Home » Modeling » EMF "Technology" (Ecore Tools, EMFatic, etc) » [EMF Compare] GenericMatchEngine - Lists of java.lang.String aren't being matched
|
Re: [EMF Compare] GenericMatchEngine - Lists of java.lang.String aren't being matched [message #127295 is a reply to message #127181] |
Fri, 18 July 2008 22:30 |
Matt Seashore Messages: 58 Registered: July 2009 |
Member |
|
|
This is a multi-part message in MIME format.
--------------080304030905020703050703
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
As I look that this more, it seems that EMF Compare assumes that any
lists it's comparing contain only EObjects and not any other kind of
Object. Any list which doesn't contain EObjects will either be ignored
by EMF Compare or (worst case) have an exception thrown.
I think this is a bug (see below and attached files for more
info...maybe I'm just missing something here?). Anyone agree/disagree?
The heart of the problem appears that AttributeChangeRightTarget and
AttributeChangeLeftTarget's 'target' field is an EObject. The target is
the object in the list that changed. So, when you're Diffing a list of
EObjects, everything works, but when you have a list of "Object", it
either throws an exception on setting the 'target' (class cast
exception) or doesn't register as an 'Add/RemoveAttribute' at all
(instanceof check)!
For where these things occur (not an exhaustive list):
-GenericDiffEngine (version 1.17), lines 838,840,842 for the class cast
exception (finally happens in internalFindActualEObject, line 1588)
-GenericDiffEngine, lines 1120,1130 for the instanceof check which
prevents the add/remove.
I've attached a few files which show the issue (and a full zipped
Eclipse project if it gets through). The code to run the compare it is
set up in Application.java and outputs to the console.
Please let me know if there's something I'm missing, otherwise, I can go
ahead and file a bug report about this.
Thanks!
Matt
Matt Seashore wrote:
> I have an model in which one of the objects contains a list of
> 'java.lang.String' elements. I would like to run a match/diff and get
> an 'AddAttribute' or something similar when a new string is added to the
> list.
>
> However, when I add a new string to one side of the model and run the
> GenericMatchEngine (2 way) on it, I don't get an
> 'unMatchedElement/Attribute' for the newly added String, so nothing
> shows up in the Diff.
>
> Is there a way to run a comparison like this with a list of Strings (or
> maybe this is this a known issue with EMF Compare)?
>
> I can create a 'snippet' to recreate the problem or provide more
> detailed information if that would be helpful. I'm running with EMF
> Compare 0.80 (june 18th).
>
> Thanks again for all the hard work!
>
> Matt
>
--------------080304030905020703050703
Content-Type: text/xml;
name="model.ecore"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="model.ecore"
<?xml version="1.0" encoding="UTF-8"?>
<ecore:EPackage xmi:version="2.0"
xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="PhotoDatabase"
nsURI="Example" nsPrefix="PhotoDatabase">
<eClassifiers xsi:type="ecore:EClass" name="Photo">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
defaultValueLiteral=""/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="tags" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="id" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
iD="true"/>
</eClassifiers>
</ecore:EPackage>
--------------080304030905020703050703
Content-Type: text/plain;
name="Application.java"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="Application.java"
package emfcomparedatalist;
import java.io.IOException;
import java.util.HashMap;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.compare.diff.engine.GenericDiffEngine;
import org.eclipse.emf.compare.diff.metamodel.DiffModel;
import org.eclipse.emf.compare.match.engine.GenericMatchEngine;
import org.eclipse.emf.compare.match.metamodel.MatchModel;
import org.eclipse.emf.compare.util.ModelUtils;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl;
import org.eclipse.equinox.app.IApplication;
import org.eclipse.equinox.app.IApplicationContext;
import PhotoDatabase.ExampleFactory;
import PhotoDatabase.Photo;
/**
* This class controls all aspects of the application's execution
*/
public class Application implements IApplication {
/* (non-Javadoc)
* @see org.eclipse.equinox.app.IApplication#start(org.eclipse.equin ox.app.IApplicationContext)
*/
public Object start(IApplicationContext context) throws Exception {
Photo beforePhoto = ExampleFactory.eINSTANCE.createPhoto();
Photo afterPhoto = ExampleFactory.eINSTANCE.createPhoto();
Photo ancestorPhoto = ExampleFactory.eINSTANCE.createPhoto();
beforePhoto.setId("123");
afterPhoto.setId("123");
ancestorPhoto.setId("123");
beforePhoto.setName("test");
afterPhoto.setName("test");
ancestorPhoto.setName("");
beforePhoto.getTags().add("camping");
afterPhoto.getTags().add("camping");
afterPhoto.getTags().add("fishing");
Resource resourceBefore = new XMIResourceImpl(URI.createURI("http://ex/before"));
Resource resourceAfter = new XMIResourceImpl(URI.createURI("http://ex/after"));
Resource resourceAncestor = new XMIResourceImpl(URI.createURI("http://ex/ancestor"));
resourceBefore.getContents().add(beforePhoto);
resourceAfter.getContents().add(afterPhoto);
resourceAncestor.getContents().add(ancestorPhoto);
HashMap<String, Object> options = new HashMap<String, Object>();
GenericMatchEngine genericMatch = new GenericMatchEngine();
GenericDiffEngine diffEngine = new GenericDiffEngine();
try
{
MatchModel match2way = genericMatch.resourceMatch(resourceBefore, resourceAfter,
options);
System.out.print("\n2 way match: \n"+ModelUtils.serialize(match2way));
DiffModel diff2way = diffEngine.doDiff(match2way, false);
System.out.print("\n2 way diff: (Note no differences shown)\n"+ModelUtils.serialize(diff2way));
MatchModel match3way = genericMatch.resourceMatch(resourceBefore, resourceAfter,resourceAncestor,
options);
System.out.print("\n3 way match: \n"+ModelUtils.serialize(match3way));
DiffModel diff3way = diffEngine.doDiff(match3way, true);
System.out.print("Never get here! \n"+ModelUtils.serialize(diff3way));
}
catch(Exception ex)
{
ex.printStackTrace();
}
return IApplication.EXIT_OK;
}
/* (non-Javadoc)
* @see org.eclipse.equinox.app.IApplication#stop()
*/
public void stop() {
// nothing to do
}
}
--------------080304030905020703050703
Content-Type: application/x-zip-compressed;
name="emfCompareDataList - Eclipse Project.zip"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="emfCompareDataList - Eclipse Project.zip"
UEsDBAoAAAAAAMZS8jgAAAAAAAAAAAAAAAATAAAAZW1mQ29tcGFyZURhdGFM aXN0L1BLAwQU
AAAACADGUvI4TBlBus0AAABxAQAAHQAAAGVtZkNvbXBhcmVEYXRhTGlzdC8u Y2xhc3NwYXRo
lZBBawIxEIXP9VcsuTtbL6WHXaWULVSoLbrttcRkWKdNJ+kkkfrvq6gogoK3 meGb9x6vGv39
uGKJEslzrQZwqwpk4y1xV6v39ql/r0bDXmWcjjHotBj2bg4LcpJV8U1saxXF qGJz3I7lWdB4
3oNeOkDjKESEL5vA6cxmsbaG8bT5fHydtA/Pk2ZannLECYW1A4vz3EGm3ScK zJJmq8V+vLSr
gOVYL/Ws6Q/g7vpEwSIYLwiCv5kE7ZvLHXG8oORzCjntxebEG7Yqj9r7B1BL AwQUAAAACAA3
UvI4SP5uYO4AAACnAgAAGwAAAGVtZkNvbXBhcmVEYXRhTGlzdC8ucHJvamVj dL2Sz04DIRDG
z5r4Ds3eBb15oNvENp7UmFQfYITpSrP8ycA2Pr6AaLdp0/TQ9MR838zHjwBi 9m36yQYpaGen
zT27ayZopVPadtPm4/3p9qGZtTfXwpNbo4wLDJK0j2k6uVfCgsEWzWrujAfC BUR41iEKnhtl
Qjpj0MZW8Fpl92+7UATfUZ+D7tXSo8yqynmKglXFqVBHHUPZax+QrVVk0lEq YAMlgPR7hJoA
6obMDlXzsZH1mHI61ytkL2D1CkN8vCx2Kb/QwFmg2dleeebFgbBMV7GPf+uH TtvX0kz0so4C
R57H7mVS/U8U/OBH+wFQSwMECgAAAAAAN1LyOAAAAAAAAAAAAAAAAB0AAABl bWZDb21wYXJl
RGF0YUxpc3QvLnNldHRpbmdzL1BLAwQUAAAACAA3UvI4W6TEWpYAAABKAQAA NwAAAGVtZkNv
bXBhcmVEYXRhTGlzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUu cHJlZnOVjr0K
wjAAhPdC3yHgHhopWgrdRFAQHHyB2F5LJH9cUp/fLp1tl+OG7+PucKUR99kK 1QhVterc1rV4
XF7iWFVNWaC3JibISIwgfI8kv2AywXeqLAInuSKfIcs+EEu4aCy4lAETvMya E/LT6jwGuk7J
03/TRWv0MreFjgxvCyd1SmC+DfDZjAbsQAZuteFnt9dNYeb68QdQSwMECgAA AAAA1HHyOAAA
AAAAAAAAAAAAABcAAABlbWZDb21wYXJlRGF0YUxpc3QvYmluL1BLAwQKAAAA AADUcfI4AAAA
AAAAAAAAAAAAKgAAAGVtZkNvbXBhcmVEYXRhTGlzdC9iaW4vZW1mY29tcGFy ZWRhdGFsaXN0
L1BLAwQUAAAACADUcfI4mqgThfIBAABnAwAAOQAAAGVtZkNvbXBhcmVEYXRh TGlzdC9iaW4v
ZW1mY29tcGFyZWRhdGFsaXN0L0FjdGl2YXRvci5jbGFzc4WSXU8TQRSG3yn9 oOtSFCiKYAtI
sdTETfSyxkRbMSQbQoL21gzb6Tq63WlmZ5Gf5ccFiRf+AH+U8cy0KYkXpRcz cz76vO852T9/
f/0G8ByHFRQYdsR4FKnxhGsx5IYnMjPB68jIS26UrqDI0FQ6DkSUyEkmgkhp Eeg8NXIsgrMk
j2XKUD0LP7w7Of140mdYCz/zSx4kPI2Dc6NlGncZVnoqzQxPzYAnuVhGlfpI tzfV7ZNuSLoM
5cmM2AgX2epS50uZSvOKYal9NGAo9tRQeFjCXR8+VhhWQ5mK03x8IfR7fpEI a0xFPBlwLW08
SxbNJ5kxlMicJv1WO7TDqiyWwUjzsfiq9JfgTZ4OE0EjGHFlulbOe3sViYmR NFUFDxjWb2ae
V6ybhz42UK+C1uzDwx2GSuQwpLV/uxT5y4yaWNKejybqpBwL0xcjnieE2G0f 3bYn71zlOhLH
0k5bm1eeWcPYI2NL9C0UsIUSyhRVXLQMz7qld5FytE86axS9oJvRXepcY/W7 a71Hp4cCnRvU
XMcavfxpE9YdgtkVUMfmDHffoY4pU7D/7Ty9xlbnJ7ZveDVnaocIj1BFwzE3 p91Tpn1RreHs
NBfRGYGtwu7/9BZ1HxL9ySI61ffxeDb8Ad32V/yB7W9zWtllA0cpuGkP3Kv1 D1BLAwQUAAAA
CADUcfI419vYOhwHAADuDwAAOwAAAGVtZkNvbXBhcmVEYXRhTGlzdC9iaW4v ZW1mY29tcGFy
ZWRhdGFsaXN0L0FwcGxpY2F0aW9uLmNsYXNztVdbdBPXFd3Xlj16jG1iQqha HjIhIAH2FDuU
IgGNAZOoyIL6QQylTcfSlTxE0iijMdhp2qalpG3a0lfa9P1u0ncIHwaXtbL6 nbXym9/85iMr
Kz/5yUeSfUcaI2xjDCtZy545595zzz2Pfc4cvfr+/14B0I8rGloENslyIWeX q6Yj86Zrlqya
awxWqyUrZ7qWXdEQEFhz1jxnGiWzUjSOT56VOVdDu8BW2ykaMleyqjVpyCem rYo9Y5jVqpFu
Oi/Qvt+qWO5BgdZ44qRA4LCdl2G0IqJDQ1CgK2NVZHa6PCmdMXOyJAW6M3bO LJ00HUvxjcWA
O2XVBGKZle1NCbTVXNNxBQbjmdVYeNiuuHLGTSUyi72krvDQTE5WlVhNw70C a2/ILOyEcB8+
oWG9wIYTU7ZrH6FZk2ZNUsIsV0vyqJlzbWdWRxSfFAjJdHZ0bDB7eIixz6x0 IBWh4g06NmKT
QCTnSNOVnrzA+nhi0VGPSwURY5x39w9EsAVbNdxPi5eR0/EAtqlASTedF1gX b3J91HWsSjGV
OBlEXEVd1lylbIeOneqMxjNZsyyD6BWA2jF0fBq7uVOU7phZZI4eiCdujny5 YDBlZbtiTLtW
yRjKMGm0dYCHcvSY90WwB3s1fEag57YndXwW++immfdsX5q2xOkgUtRdsGpT 1K3hgEDfIrWk
bUcaM2XLsBhzY2I4PSJr9rSTk2nyQXyOsJ9y3WrSMOSMMSkLFA9jEIc1HBLY vJKV4yNpHUcw
xGTXs8YFgT3LRTlzGz2pMPbjYVUpj7Dg4rcVV2n7PGvqhuVmwZVOEBmWVdNi Jce82k4EWZzQ
cFxg+/LxcRoxMfzg6PiCSnaEyfYKp+KyMEYF7lG+1e14xKxNDZvVMEYQ0cCS 37tYd6N+jbLp
5qYMWSmyAxgPy4p0rNywWhvylsIYVxpOMXa30pC3CoVFCo5wyT8/gYhSckbH l/BlgQ7fHe8S
gefjmVW6nVq94I1AMAjM8MrOl6VrltkRKa34YUWmQvgKJjWYN3Xe0dmaK8s6 csgT/Pa0S/DX
L7Ns4wTh5I66RFs5paHADrEYa4emrVJeIYF+d4X7Y+fN2ZhnQjIWDkPirALZ tjBKYM8v+4BY
anfdNc/OcVI1HTaqRHqNsWc3fpKteuBWYR3yC3RpJSgTHB010K12tmhZoZe9 y5bMLTzzVJzT
cR4zAkHXrm8K3Btf9ron8ZSGr6qOvjSEOr7m9ceqWlIo+oaOp/FNWpa3FbwE rPjd5PV0IrMi
kG8cUrfUzwRxQSDRSJiSSsbiWduVsYrtsdKRqphjtSn7fCURVnC/qOD+jMD/ Pw54r1rwI6iD
IL6rwDpwE1iDeJbtJivPSSfGLhSbYgR6FIbX4gc6fuiNFNV6Ls3c42OOmZMh tOFHOn6Mn/Cr
MDSRHnvs+DFmvgkWabayIjGkvkj1eYDou6PxgT3R+0j4n+h1y32g1UThNeSG UEejEft8px/H
Q54qJn7V8W7qboPqBvaOBb5xCZ2z67OMcn5Jw6YKvdjUhAX2Ze6ycys/8wt9 mF+AzF01cKoJ
eTf1EwACD94NhtgL1B11Df13Xn++CQNU0NBVJ1vkjMryMgMhz9x38wg7W/XH 2H1L475/aXta
OtMcVAn2EM0Tni4N/xXYeQcQ5TRHFFSZmlEPFkctZdCaJsE+dS16wO8L/9sA 9VZTOp8hcgbf
gu+2HVcRfplEC3Q+273F9ejgU68LoBNdfFM97qFUN+kAubVKTWuc+13cvHQF 6+bxKYFhn8j6
RDKwq3vzPHpa0Nt4RwMNYlf39nkkuOG9vY1dHsFnH6ec/nk82IJHe5fjknXu Ovaf6j54DQ9d
xdFkm8elG1y7xx1rcFq0bR7Dgqq9c9F2j+ttcJrieL+vdOTUVYwlg9cxTuLR ZOg6JkicToaj
oWhbtD0anMMXk5EreOw65Knu4lVY0cg1PD6HJ+YwPYfZaDgaaZ3D15O6L/Mt JaM3yzRUaUrZ
t5MdvuB3lGDHImUdAaWs05f5npLpbJZ5EeFkJBqZw/ev4NJl5udN8bS4wCwF vLz+FFv53Mic
bWIGN2MDeriyBbtwP/bwJ8QBbMMQtnOGTOAMduAsfyLMoBfPoA/PESx/xm5c 5g/NVzCA13ji
dezFGxze3+RM+zZPv8P3uzgouvCQiGJQDOCISHFsPsD3IRwVZzj0FpCmRcfE RYb6WZxQGKPe
NQo9dYwpipb+TEGUUs/h5wpv4in8glQrNggHz5MK8IMYxC/xK7RR5j38mlQ7 Nb2F35DSaNs1
/Ba/Q5AWvoTf4w8I0c4X8Ef8CWFaeYmyf0FEROnlX/E36LRwEC9wrYM2bsSL XOsUF6n97/gH
fxf9s14LDb3/ot5/c6UPLR+IC2qoFRr+o2GL/5f1/0Y0jGuYUPtrVV29tFB8 O5Wr6n9x4U00
FZ5YKLzLntTLHwJQSwMECgAAAAAA1HHyOAAAAAAAAAAAAAAAACUAAABlbWZD b21wYXJlRGF0
YUxpc3QvYmluL1Bob3RvRGF0YWJhc2UvUEsDBBQAAAAIANRx8jidSSCyRQEA ACYCAAA5AAAA
ZW1mQ29tcGFyZURhdGFMaXN0L2Jpbi9QaG90b0RhdGFiYXNlL0V4YW1wbGVG YWN0b3J5LmNs
YXNzfVHfSwJBEP7WzNPT8ldlmUQvgRJ00GsRhCkIYoLi+941XWenK9ca9WdF L9FDf0B/VDR7
CGGRCzs7M7vf983OfH69fwA4Rc1CQqDWv1NaXUktXflATutJTmYhtaWnVfRs ISlQGMtH6YRy
6jvX7pg8bSElcKAi3yEvDGaMoskt+ypi/AIpkKFObzC87DVb/Li7SuVMIH3O TNNAXwis1Rsj
gWRT3ZCNDeQtbAocLeMDRv8i6bCfQwFFxhomgcN6Y7VsBgLlHCykBfLdYEq9 +cSlaCjdkARK
XeXJcCSjwMSLZNaLSGqKaQUqfxTiiP9T9Ekv1PrSu5c+/VfPzwuG2QM1jzxq B0arvFzuiRkD
N547xHud954pnUe5xjYDmzNZjo75NMt6Q+4VpRd2E9hiayPBtooUytiOs2a6 O6jE5y7TgaHV
+Gb/G1BLAwQUAAAACADUcfI4yXTXptABAAAaAwAAQgAAAGVtZkNvbXBhcmVE YXRhTGlzdC9i
aW4vUGhvdG9EYXRhYmFzZS9FeGFtcGxlUGFja2FnZSRMaXRlcmFscy5jbGFz c4VSTW/TQBB9
0+bLyZaWFgqBUtqSQgJtg7gWIUVpgEjBiRSrNxSt3cW4OHZlO4gfxQUQB5Dg xgWJv4SYXVJE
D00ted6b1Zu3O6P5+fvrdwCP8LCIOcL24HWcxQcyk65MVbPzTo5PQjWQ3hvp q1ovyFQiw7SI
HGHpWL6VzVBGfrPvHisvI+QHz/tOn7DeixO/qbwwOGETNX7FPE7Yrh3KNN0n VIxwNLJbLzqE
rfPkrSxLAneSqf9KnNazIcGaZt0DQukxV0ZB9oQwX28cEnLt+EhZWMTlIpYI a7N6EljGCvup
rj10Wna7o18/q2C/wsZXBVZxja/2VWbEhI16Y3bXFghVgTwK2uGmwBpuERZO HUa2HCtCrd64
eBra6rZAESVttSmwddbKkX6qNTUB66/mrsA9ran803SPtKIhUEaJsNgLImVP xq5KHOmG/JDl
XuzJ8FAmgc6nh+VhPEk89TTQycrZwezpfSCIbhSpxLSsUp7Q6c4UiK+b51XL oaqHwKyqOzBo
TbFskDhWIBgXOHvJqL/dj7j0BVcIn3Dd0Buarhu6oekdQ7c1rX/ggjnc57iK PMfPbPiN+Q9s
4hd28B4PtML8OybuYo+xzJcRz6tZsP4AUEsDBBQAAAAIANRx8jijLrb0MwIA ADAEAAA5AAAA
ZW1mQ29tcGFyZURhdGFMaXN0L2Jpbi9QaG90b0RhdGFiYXNlL0V4YW1wbGVQ YWNrYWdlLmNs
YXNzfVNbc9JAFP62tAQotRe8VStWpQpeitbbQx1nGAqaGQwMBMY3ZknXmBqS TrI4+rMcXxwf
/AH+KMezIS3QDg2TPft9e76z5xL+/vv9B8AeXmtYYNhqffalf8AlH/BQlGvf +PDYFS1ufeG2
0LDIsHbEv/Kyyz273BwcCUtqSDLk/cAuC8t1jkklhp9o7wekj5UMS8KofKgx bDQm+o4MHM/e
Z1ip+l4ouSd73B2JFJaJmk6E9JowOv1uW0/hEoFxXkRnFN1q1+r6R4a00I2O WTGqdE++cVEl
dOdS633TbDIwPQF6GJYjot9XeU6QWXnXSahzCh9T+gERqlm5MVGvVcxuu9av NruGqY4SDKk3
1AvPkW8ZEsVSj2Gx6h+KDLZxV8Mdhp3Z7BzK7UyKOu2zuIcCaVUkhu1i6eKi 0lTF/SzWsM6w
2nA8YYyGAxGYfOAK1Xnf4m6PB47CMZmyhYxijsPPmWLV5WGo5nTi3Tf4kNSF +ZKKpOEORlLM
yExuh9TbU6wfMqwTigupc0v6wfd5pU48KGim448CS9QdVUZuthO76htjyOqe J4IoeRFqeHmu
7bOqQsORIuAuZZg62dKnTROkdwlpbEJDivZpNX5kCGen8Arh1dlzNQqA7AZy p/xlwlfO4KtT
+Brh61N4k343pvBNJOmWLdwiJk/MI7Lq0X7h9k/s/IicHtCawQKt+0iSczFi 1f+3hIfKkuxx
ZJ/Edje2ZTyNfJ9F6x6eq0h0xQt6XyXT/wFQSwMECgAAAAAA1HHyOAAAAAAA AAAAAAAAACoA
AABlbWZDb21wYXJlRGF0YUxpc3QvYmluL1Bob3RvRGF0YWJhc2UvaW1wbC9Q SwMEFAAAAAgA
1HHyODb07d5FBAAAQAkAAEIAAABlbWZDb21wYXJlRGF0YUxpc3QvYmluL1Bo b3RvRGF0YWJh
c2UvaW1wbC9FeGFtcGxlRmFjdG9yeUltcGwuY2xhc3ONVVtT20YU/taAZYyS NCZcklDqElJs
08RtQnpzAuViWheHUHDc0lsizGJEZMkjy5nksQ/9M32iPMCkzLR56kN/VKff ygITgx00o9We
3XO+cz/6978//wJwB46GkMDNlW3HcxYMz9gwajJtVqpWOvvC4EcuGiXPcV/m uNfQLTDhuOW0
LFlmlYyyssW94x6JvMEcFhh5A7cFUqDbtE1PIJ5I5jsxZsg572zKXvThgga9 rRHZFaP0zCjL
8VVZNmue+1LHRVwSiOSW1wqzy/NZgWT+nKKZCC4LaIElfVTdr+MKBgT6ytLL HvswlcjvGM+N
tGXY5fSa55p2OdNWyZFDvRjCVQ3DAomzOatWvWza6awiVvy9cuWaQCp/XoFM lEpGdLyLUYEu
yykLDJy09dHGjix5mWQxCqZAx/sYEwjfVymZpkAiWdQwLtDflMi+KMmqZzq2 wKW8acvlemVD
ugVjw5ICsbxTMqyi4ZqKDg4ve9uyNemjb8t1r2zqGcifoZ48F9Y85uuhUfUV RdGFOIvE2zZr
LI78uaqZKOGSKw2Pds4k2mVs3jJqtfYJDYLYx06a0nCXFd8JR8c9fMLgsYB8 2twypZtb8KOd
U2n4TMfn+IIl1jDM90Ng6FR/+FRGw32BsWaAcpYly4Y165brFWl7x/HSME2Q 1iqdq5vWpnQj
+JL6CtsyXlImxSeieIA5VQ7zDP9ZxV1U3mZ1LOIrNgh9WTYqjOGVRPI0swLL 6fgGS4y2Ua1K
e1Pg1pkt08Y+9uFDgesTcbMWtx0vbsSfG5a5GS8dB1DpeKRjRZkT8ZyGdBQZ zFGn9APNquuc
YA2Pmbsz6sY/UuUSRUHVWE9VHSi8TswZlj4DExRdMFraDbomR0bVwE86fsYv wZg5Fh1LvG1y
0Yenp3xotSBK0CaxIKuuLLHQmJSrq3XbMyuyaNZMttSszWAbqnoYvMETyWnK cIo9wZaOMrZV
0zZn7GhnJ6l4zam7JbloqhkxdLo1byt1AnrOtqXrJ0jWNFSI3DkEzP/R+Gb9 sq349vA3F0Yv
NERI9ZL6FSEIfsf3EI298wqxEF6jZyn1Dy6kdpf2MJjax/VDiPUDvLfrc/Zz 8N8g2k3uryHM
dQwXeRLDOG8mMIAERpDCB7wZRIh3YZ4mSA1QbxIp7ib58l9b0HBDIyinbWDO XX6Vkp7UAT78
g5uQryeKENcpdOOej6s3mHALt/kVSOOjAOA3niremclX+Fjgd245+ZtPjP58 unuIzPohHqzH
Zg4wS05OnX18Hctz2cfyAb79m6y+izS/i+s0hjHDv8dsw62GioZ6f7eKNQjl Fk0MDXdzz9EV
mDRHbsUfPUSBYSzmJ3dbHFtiOvInkKMBcoTUd/jej8k6fgjw7iha3dKVH1/j SRMt7J8/PhGi
SAOJcgblu7Dh21sKeDfVjUq+4lW270G2oj310UL+a/rrDp75NrIrYcEO9/4P UEsDBBQAAAAI
ANRx8jjyXnb02QUAAOkNAABCAAAAZW1mQ29tcGFyZURhdGFMaXN0L2Jpbi9Q aG90b0RhdGFi
YXNlL2ltcGwvRXhhbXBsZVBhY2thZ2VJbXBsLmNsYXNzlVf7cxNVFP5ukzTb dltKyquKvCzS
BCVSUcEUBEurkVBqn1JF2KbbdCFNymaLgOJbfIuKigV1RmcU/K2glCnMYP1R dEb/Gn90/O5m
82ibR+2we+8995zvnsd37oY7/968DaAF33hRIbCxazRpJfdqljakpfSgMTYe D7af1DjoXVr0
mBbTw5x74RbYlDRjQT0aN8apqI+NcJ40MyZzlCsFVs/BnQcpUDMut9vb4loq JbAmUhg6vR8S
UIxUOGFY+rCAGBSoMlJtpq7Z69r0lqHFjdNyrbQShoJdAq5mf7+Auy05rFdB YKmKKlQLLIkY
Cb1zYmxIN3u1oTi98UWSUS3er5mGXDvCylYbRsEKAW/af8Kswl1eNBaLr0OL WknzlIq7sZpu
6uHOnt49nW3tMsRSBqFquLBGxTKsFXi4OXJUO6EF41oiFuyxTCMRCxVLUMbe 3y8jXK/CC0XO
7lVRg2o526hClVG7rVEjxSJGFlXwEA1k+ALrmv2RUrUMVWEzHvDi/mIEyXKj qVuPGSlLpmcL
gqxULjv+yCJNQzU8batK+j5EEsV0qz1LqW0F0lYOl3lnvmXe6+TsURXbUSew PGqzy1FqSyYs
PWGlpMZjKkJSo9HIcK6Q1k4Vu6RW5Yip66fp21JrVJ/fArU9Fqf7tXGbb148 QZKU9pYpY8R2
Mey6lOua2oz24U5tjNZNxU32WEzY0ISlM8FP4WkvwqR4KXgV+xARWCFLwGRP RK0JU4t36BpH
PUXaFTgrmhwbSyaCE5ZBykVYTx7WiS4vDpC6ZZVVPINuNjVPZIWaw/68ch8Y OqpHrZAXvUxM
uRDzE9OrxehsTXYdHmaxuJrbnsW6IKdhE2lQxXN4XqBBAjgb4UTK0hJRHrqh ePbzQV5QcRhH
BNQ0BzNX5PrmcOl628ZDKqJgCPVp42zM9vGlzcP+fgUjzM2cMCXoqAoDR3kJ pnQrTaTlhVqt
X+rGVYxJ3Rqpm+oy9RHjpJQnVYxLuWLL+7rDXphM1NyU2isFLK/HnkrDEype xEmBatlwmWQM
l4klz7u0YKG7g4ODi8jnaRXt6JDX6MsqzuAVlkXq5Jq4qRhGTku21Gt4w4vX WYTy2irexFuM
V3Io7Stv8+LUkcnrPTWuhxSc5Z2dYH0UvCsA6f77Kj7AhwJ1Mnn5ZLjSXP4i KJkdY8TQzYVp
LSAJhxdUY9D5W8RtJKP4WEUfOhR8Ij9i7Fcp+0xFv5R9LlBhDEvJlyou4CvG mqZ+t55KTpiy
73b+j++C6VgFM+YhVqLHnnUY8kfByoWfyi0SncQIJxK6aQco7z8l88XCejrn 4uOBGxXy+wxZ
nCo+4LrGGVV7rOZuLeqovYQrP0f553H9jPqrtprPVqrgewfhGtEgpfazLGvW I4/j2BjwLb+G
lTdwT0Bcx7qA6zo2yFdTDmoFPHxvpTdraX6BcFP8hdNiw6ppENyHTRyr0Ay/ c8C3tJZ7nddQ
P4ml18CDZvBgBWbhmcqtfoOYRH1ufRnVtyAO3sC2WYh9bsYUmMYjfHbwaQ1M EdFle7UGXr67
GVIfWjGA3RjEXhzih+kIIhjKetdK7cdt73bzUeBatrrDiz3caaN+2tcgR+mr J/AL1k1lA6+0
hcfyAvU4gQrZ8Y7xTifQBmk8gydZyBnsl3H2zIey8qAaslB9JaDcxaDOFITq LwHlKQZ1tiDU
AJ51oFqc7CiswMFZrJpvfy7PXsnab89S7YxDtRa6smES7qsBtyRZwDWNQ5Jy 0kPONXvizkw8
nFydV+3viP89uf8DOfkj2XiZfLtCZv6U50GL48Fu21YoFIayrvyDelvpEk9o yrjSFPDp04jZ
72Pk4TQStge+476Uy0WHJgYCDP0UZS/N4FX+T+Bt3zsut+84N/lParxna3yU 0zgnXBULFT7N
KZwXGQS3o2Cf/MVALuYtqOH7JmO+xZhvM8Zf2WmzjPt3MvYOf+n8ARN/4jz+ wkX8nZeDS/Nz
UIFJu2gXuZW+9TezBb6urPoPUEsDBBQAAAAIANRx8jhPCgK2dQcAAE8PAAA5 AAAAZW1mQ29t
cGFyZURhdGFMaXN0L2Jpbi9QaG90b0RhdGFiYXNlL2ltcGwvUGhvdG9JbXBs LmNsYXNzjVdr
cBtXFf7WWlmysnmpjpvULnZpEiRZWNC0tFQmqWsrjaj8oHacxjzKWl47m8gr R1qlCdA2KQ+3
pbwpJS3Qlsd0BsJgt8SekJlOGaBlyl8GBgYGfjHDMEynv/v8zt21Ksuy02R0 H+fe893vPO65
61fe+s0LAG7Az0Jo0tAxcqzoFgdM15w0y1bKnp0rpJQoy1EIuoa9xdJMysoX 7DmuW7PTHBdL
/s7M8ORxK+96e5s1XLUaTc00bB7qG8zckxnIHOw7nBvTEM0dN0+ZqYLpzKRG 3ZLtzKS5qb/o
lF3TccfNQsUKY5MGaNAdc9Zi55ozZQ3X5+q55Iuzs0UnVXFtksnZZZdILaP2 jGO6lRIVb76y
Ru9aNvuJsik7UEO5yZ7SEO4ljmO7+zUEYvFx0uovTlktpHm1ge0Ia9iasx1r qDI7aZXGzMmC
JbYW82Zh3CzZMveFzb0KJoIAOgxcg1bBeJ8BA2EZdRmIEo1WH7PLXMhtFCNS NaxR13TtfH/B
LJepHovnGscso3akW7AXsRA+oGHPauTMaZOI1oiZP2HOWLtztmuVzELZQBwJ DcGRQ8Njw+Sz
ITr5hGYsd0jFrTUWbxTrUHllw47Y2vX4eIRO+JCBD+MG7rCGiq49bedpYdG5 yzpZsUvWlIrA
RAg3akhulJ+1uuKtCPbhI+LymzWMxNYxJOvQbscs+NmdzmZrSPqyNRKf9kcN 3Aox0aN9RkMq
tl4OOmpHqpYjUajrWPd67gkVC1PeaPOoy6gMmnMqhUK4TcO2es95nh9TV2VP LH7l1E+T73vZ
1/CKSKZmDGzGlhDuoJkNfemDSIaNnZmzDjv2yYqlMCM4iKxE4uMaemuzwMui 9xoa8VeQVmen
2Jf9nv5TPb0nvW7dYbm8pLHsxER8beAkbHcZ6EZSRmMG+nC7jMYN3CmyAO42 MIwRVpZpS9WV
7IAGLUt3l6xysXDK4myC5UEYipVy4qic2BbLrpcnpoEPomcT8mAwyfG6KwbB wDRaaVS+YJml
EI7xdgm2t6O/WCgQnBkkkMcNnECBdcacmuorcLArlmu0Nx2fEC6OgRx6xNA5 A5/BPTSFHpQ6
LAVsrQUEZiTLYqEeYwRE85SBMlxZyZZH/RVBP4DPGfg8viArJyssJurOr3XK hPC+38ADcudD
djkzO+eeEeBzBu7FaVJyi17qCeMvGfiybAzztJFS8bTaOW/gQSRDeJiOr8/X 2yvT01Ypgofw
Vcm5njC+Ru2umDwvt3aJ/BsGvolvic/m5iyHEUk2Kk25xsDpML5DvGSXvFMe 3mOC9z3CrLV2
I5jvk0Gyy57yQJ4QkCc1tMf619WRffPUYi5WCnT8zvU2aoiMFiulvHXQlkdo S/UJ6REFPiNZ
x7FK6vpZ5RB+wo+DjZ4H2rvyQOA6xiTAX5D/OxBCmOMWfmU0IQJdnjWOdSkV lG9V8m3ct92X
R1W/me1VaOWOHZzF2cu/oPY82haVyk62ETSxHaZSDLtEqgCuqaodokQUo4ll tCeikYu4NvEc
2i6is4rB43S2Jts08Y6SxqTCMjxNGvN+hXo9dvuoPew1kT2HPQtVnGYlO1Gj q/u6mhQTXzfl
6wYTv8a19cpujXJwRVkKg698jj4JsN8jyoOJbjFnCanzaEtcxr6jCT2QlJVl 3LSEW8TCgAJv
Q5DtfWzvp4UP0MKztOWcOqzLA/QOU6NeFa4gVz7GURP2U0rJG9gd4vXVpBxS 6oWtX9Ea9+m3
8/CBlxElmYNHowcS+jIOXcSASBeqZLaoAx9mVjxCYo/WWNzuk9iv9mptFN7Z 0G+d9X57rKHf
cg391qn81rnab8GkrDT224/YPkW/PU2/PUO//Xgdvw1W/TbUyG/yZPh0Hoeu cm5f+8+VbkIa
P3vbBVvwSPATC2xGpTm8kGjvYFyPLNSR+wXvzS9J4lf8hltkmj2vyCU8+Cq5 fUzrCR4uo0/i
UzxIRp/mKKBoNkPv0HWdO1jufZKXuSYmDvokM3Ukd/PXm0i+iANL+OyiEL2E SQ0yoHDmEuwm
HFn0N8wuJtqTyyj6vlUUI2xfIP0XCfVb+u93DNfvmX1/YN69zOP+yC+CVxjE P9X4e7Bq0qBn
khqdRAlNVUPCV9Pr8vr4hjzJNSGd9g25cbUhCi/J2rDKjEUpEx7vZVTepb1X 1bE/k/ZfqPhX
FoW/MUX/zjv6DwL/EzfhX/zg+7ei3OYdW6Wc9ihXiTa3hDjja+YT/Y9PdN4n eraOaB9/d0cj
vGByyV9CSH8WOwPPojUaEcESzpxHiHNdvyBX7iVsl+4S7tPwBIL6hcAF2uRp d3rau7h7B4Ui
qVUXo89eqEu1/9Lo//Hu/59mvMor9VqNkfNVI+ffNZJGbe3YepvWxB8/VbZx xJ/czAer1/oi
jxCAMXr+i+cRZp3+ysJlPHRUBst4JNcdfXQJXz/SLRaqQfTbK/OBJXyX88dX 5p1qsC2+hPNH
upfwg4W6ZHudFeJNzt9CJ95GjExSmoZbtCYc0AI4pOkY1oI1Ro35Ru1kUv6Q ZUBbqUwGl59S
gXkaz6hXiH8Wsy78tLnlHVBLAwQUAAAACADUcfI4XwV6PfQAAACLAQAAMAAA AGVtZkNvbXBh
cmVEYXRhTGlzdC9iaW4vUGhvdG9EYXRhYmFzZS9QaG90by5jbGFzc42QT0vD QBDF39bG2Pqv
Wj16FNqLC95E8WQFoagQ8b6N47olycruxg/nwQ/ghyqdJC2F9tLDMjv83rwZ 3v/s9w/ANfox
WgL91y8b7IMKaqI8ybqL0RboTdWPkpkqtHyZTCkNMXYFLqzTktLMfLOY8k/+ W0dy1EgEYk3h
WeUkcDYYjlcWSXCm0Lcs8EvB+WCTD98bizelvcAlW6zvS22e20KWwWRyNDY+ sGcnMbpQoXTs
erPNzN3m5nv2iXjz0wdX39RuYkuX0qPJiJs6mqtqkHMQ2OEXcZBRm0/GHqrM OujWdR8HTA+Z
tnDE/fGC9yrO5KQmp3NQSwMECgAAAAAA1HHyOAAAAAAAAAAAAAAAACoAAABl bWZDb21wYXJl
RGF0YUxpc3QvYmluL1Bob3RvRGF0YWJhc2UvdXRpbC9QSwMEFAAAAAgA1HHy OFgR9c05AgAA
bQUAAEcAAABlbWZDb21wYXJlRGF0YUxpc3QvYmluL1Bob3RvRGF0YWJhc2Uv dXRpbC9FeGFt
cGxlQWRhcHRlckZhY3RvcnkkMS5jbGFzc5VTXW8SQRQ9UygUXAX7gVo/WhV1 gbbb6osJhKRB
GhtXbYLp+7AMsM2yQ3YHtf9KE62JD/4Af5TxzrLpAwG77mZ375y558w9d2d+ //n5C8BzWFks
MVRPhlLJV1zxLg+FNVGuZ7U/89HYE4c9PlYiOOKOksF5+SCLNMP24vzOJ1c5 Q4aMGrpheZ+0
7aTidWI1XN9VTYZdMzmtcsqQbsmeyIHhmoFlZPJI4bqBLG4wpEydULBdX7yb jLoi+MC7nmBY
taXDvVMeuHocg2ldNsNO4tXLB1R2zqGkiMHQnK08GtUrtgwGlnA8d0yYGPUt R45G0rd8qdz+
uRWr1vMo4XYWtxjMpCUYuINN8uMEgqtpGXECQ8VMujA1X3bPhKMYNuY6oN72 RJ9PPNUikOG1
OatMsQyE1X4f6fyX5W0DD7WJ9amJWOLSxta/l6LaXlxdzRn/yC2P+wMrhvK0 X54YuI8HulHz
TC9imQbWsM6Q78hJ4IgjV++dzbl/Z08L0BbpuAOfq0lAiW/sq85PI2HrmuS8 0PYdT4auP3gr
1FD2GIxj3xdBy+NhKELsU70pOuysWNRHg6JlerJYITxH0Uss0Q3kq7Xv9PoB 4yuNllDQWDTD
iHGMIkUGxRq9iVWN6ybEKg366tyV6jfkL7Dx5VIjE3HsiF+a5kz5UXQX92ie 6Z8wX2lrVulk
odIj8nhISo9jpaexs0y1doHyrA7TOnqeOGuUO4fzbCEHaVSiqIpa9N3BboSW 6L2nexS5iq6/
UEsDBBQAAAAIANRx8jikKb4HKAMAADwHAABFAAAAZW1mQ29tcGFyZURhdGFM aXN0L2Jpbi9Q
aG90b0RhdGFiYXNlL3V0aWwvRXhhbXBsZUFkYXB0ZXJGYWN0b3J5LmNsYXNz jVVbTxNBFP6G
li4ti0XkotwEBN22wIqICkUUucTGWjElJPpgMl2Gsth2m+1W7U/xD/jkg+It aGLwycQfpZ69
tHKx0DadmT1nzne+8+2Z6a/fX78DuIYVCU0Mytq2YRnL3OIZXhJq2dJz6sor ni/mxOImL1rC
XOWaZZgVCX6GGcPMqkLL6UXaK/Jbqmbk80ZBLRiWvlVRdQpTD4clyMQg541N kVvj2nOeFQyD
yUNZqwk9f5yh1dmffqlb2jbDSLI+SXcPhQTTerbArbJJ+A9ODZhPnlhJtYj4 AiEH5vWCbi0w
+JTIBoN/ibiF4ENYRitkCWcZoo2qODoVQjvO2ZGdDBNKstHAeGQjCIZuGRJa 7NV5Gc0IBNGL
fgl9DP0nSSpjAAHSSCRS6fXF1NIKQzipF0SqnM8Ic51ncqRaR9LQeG6Dm7r9 7Bn91rZeogIb
J8rQlrYo7UNe9DDa9ZLnXDXM9UqRTF1Kcoe/4GqOF7Lqo8yO0Kx45KmEywwD R94MrQ2TCnJ3
tWIMiowIovRixFKOl4jdkBJJ1olydsRbMY5JCRMk00n7ZKi4St2XFdZKrVlH 6oP/a9iA4bAj
EY/VZQuimYJbVaEYHiuntF/KnnTqv0iDfRrCDdyScJO0OK31ZcxijqFl06ie r2mlXoHVN3O8
KAnzDGMNkSN1LG5mBanTcN0kpKuZU00NKKI0KghDpwvg1VCDCKWNsqmJVd3u zN7/tvCkXS1d
WolCQZhOY4gShunM+ejibIJz8Gjlt48iWYOONURWZl8INLaRJU9+RvNA9AvO RL+h/QktOj6h
axc9PxHcxYUP6HlPG3wYpLHXgYxQ0H0CStAlEUU3YujHBC6SR3bBMIRhmkdc yx9yM8n20O8S
Rr3UFaLTRHM0RrneoNn/NvYDY6/RF9vH2B6uMOwhxlB1+uhb5UE5m2mcpdLm qLB54nEbCu44
HLpdVJeDs5qi/xFms6EoX7Cf0cM0rns0ljwa4ehHdNmpP2NmH/F3tlxOroDD /NkB7HANO0x5
F8jPKPddD3Dcfraj2VGM/AGNmlwMWi82EFk5GunM9+yRClimOUS+djifv1BL AwQUAAAACADU
cfI4jcRff0QEAADmCQAAPQAAAGVtZkNvbXBhcmVEYXRhTGlzdC9iaW4vUGhv dG9EYXRhYmFz
ZS91dGlsL0V4YW1wbGVTd2l0Y2guY2xhc3OlVl1PG0cUPWM7bGyWQCBAgIRA mjS2+TBtoB/g
UhJjGjeLQ2KXtEmTZjELbGJ7LXvdNk/9Hf0DrdQnmkpU9KHKW6SqUn9PpX6d mTUGgzFqy8PM
3bl3zj3nzp3Bv/z1088A3sQTDT6BkZUtx3UWTddcMytWrOra+VjyS7NQyluZ L2w3t6UhIND1
1PzcjOXN4mbsztpTK+cK6AVn3cqvmLln5qYlMGw0AO1h1PxzAm1xu2i78wL+ cGRVIJDg9hD8
aNeh4XQQAh06TqEtiE6c1dAlcKEVoo5utAkErVQ6k72RTiQFOg27aKWrhTWr nDXX8iTVbTg5
M79qlm35XVsMuFt2ReCycZJyku5rBHhe2gO5duLueDY7N0+IjoxLxstmqbbz 9LrjBQhcDxtO
eTNm5fJ2iRhWYYO2U6ZUr8hzEeNw3QkYzNibRdOtlgl25UQEsmjHJYxqGBG4 2DJYx2W8xoOy
EnmzwgqNhCPHoauIuRAP7aqOQbwucDfcOtb4D0pD7paV3Ou3S8ch1MNv/k8K qlRjmNAwzuZr
BaVjEjHysxJO0TXZdWWB0XCkdQIF/obOm3edvbppuQrK3rCtcmpRXYuULOiM LOhbAtPhlPGv
ayZTvKPjXcwKnGGKZKZassqybys8qiYMc06h4BRr7WvYFQkRx7yG9wgg4T2X 9Oh4HwsCml1J
Fkruc8X4gWR8U0cCQwLt69aGWc27CV4IiZLUsYQPGEciAr3hVPN2lodc67jh 1gfIFNZBQV1G
I0MGTB1airdEVBf06smFZmdouCPQ03jp1ZeswF0d95ChlhyX1apAJGw0iW7e 6HquoRVESuBU
yYPpbYrCW1q2Kqw137hmgP5sluPgMRSUs82pXaxQxqmWc9aSrV7MhjdsUkIL hOPZ2aNZ5o8u
YRTMDXBUbzmtNtp83zkG+fWMs+B8NvojQi+gv0LwBc78AP17LgbQw7EbAY7j HCcQ4j3rwhTO
cUX3NqIXfZz7G1bOcx7wVv7mBqEpDwuAIfhwAeB4URG4R3o+GRkd28WwwNgO rmzz269yt6l9
sypfnxfn5VPWNYTp38+s1zIH5AtYzxNReX4jotSxwDRRAUr9Bp0y55TA+A6m t2m+LZCe2AXP
4mu0R7l641t0Ryf8u1j04SXGxiW3el2GoXFMMusSs6b4pt8mH4PVWebF/FBx jno5Pc7KusVI
IS3F3if/EzD2Ntn11zUueDpqPoM+WcsO+M//gX4N8bQmxchXqS5yWYn8ldYp zjND36l0k9j/
6xl/iXQ6OrGDldnAQOAVQkqhtLeVta9sUDXKJ1TwkJk/xQge8fwfI4YnStW0 l8RTpawsPlKq
ZmqqBuhZxX3SHOGvh4+JFTigb8bTV/M9oI/6aPvP/Sn1SXm/M1DIO1xX+FAp vMVVn/wWh5uk
dKBJfHVqPtK/39AkPi857cTBZjwB/atj0cNH0dX8SI2Pa/if/QNQSwMEFAAA AAgAN1LyOJ2P
LjRWAAAAbQAAACMAAABlbWZDb21wYXJlRGF0YUxpc3QvYnVpbGQucHJvcGVy dGllc23JMQqA
MAyF4b3QO/QAmp7AwUHBQSdHJ2uRQmxL04DHN7gJvuEN30+Ji/MApjNUnNUq cc1cX9hDFJCH
EB3y4UkwI58i94XNppX5bh7Wvp2W0f400OoBUEsDBAoAAAAAADdS8jgAAAAA AAAAAAAAAAAc
AAAAZW1mQ29tcGFyZURhdGFMaXN0L01FVEEtSU5GL1BLAwQUAAAACADTcfI4 Wh7Yz/4AAAB2
AgAAJwAAAGVtZkNvbXBhcmVEYXRhTGlzdC9NRVRBLUlORi9NQU5JRkVTVC5N RpWRy2rDMBBF
9/4KkXU9OKGU4pBFH96UtoQGulfksTugR6qHifv1VWI7JTUJyU5w7zkjad64 pgqdTz/ROjI6
Z1PIksegS4npEB6y2ZC8c4U5K1T1ZNSGW3zmnr+S82wpQ52SHnqrVq2NJNH1 cdSfM0e6luij
feFtwB48us7fhR6Ep4Z7Y/cu0bnK6JLRBYc0+cDvQBbTPRYHG1sDCkkbhyCM RbBBe1J4kxxF
0Tlfd5Oabv5iMoNbyCbjYjxH0ZV12Cq6HOnfNwIyuD8LQElVdT2luBdfJ7B/ C4jJcrfWNmeS
/7RD2n97WWxRhF2p0A1ZoxVqn7MX3vBVkU7hLvkFUEsDBAoAAAAAAMRS8jgA AAAAAAAAAAAA
AAAZAAAAZW1mQ29tcGFyZURhdGFMaXN0L21vZGVsL1BLAwQUAAAACAA0U/I4 wIPJNFABAABo
AwAAJAAAAGVtZkNvbXBhcmVEYXRhTGlzdC9tb2RlbC9tb2RlbC5lY29yZa2T X2vCMBTF3wd+
h5I9a9S9jNIq26wgOJCpY6/X9raGtUlJ0rX79rvp1Nmxh4HmIYHknJPfzZ9g 2hS594HaCCVD
NhoMmYcyVomQWci2m3n/nk0nvZsAY6XRj1YQv0OGXlMI/+Qak6t341GjMGl8 WgzZ3trS57yu
64EqsoHSGX97XrCjxHQl9V2rGA+HI5It1/EeC+gLaSzIGDvpLUnHjHEuSoNt AhapSxnzyMmY
J6Eg8WqvrJqBhR2YY5o025dFyKIGijJ3SrPSmIrmt3ri5AE+5WCMSAUV7RG9 bz9LCj4cS7vY
2ezb5oxrq6vYVhryOQKN+If/wVotdpU9AbuebmJzLnJEbsL7V+m3nEe0Nd2j q/fQEkyhyu0r
5BUuhUWCChnjl7FayKj2qixRP6pKJiHrj67GfiGbSK5G8nOKYhYygsEDXMDP H4f7LLz7W2jq
C1BLAwQUAAAACAA5U/I4QPy0GY8BAADNAwAAJwAAAGVtZkNvbXBhcmVEYXRh TGlzdC9tb2Rl
bC9tb2RlbC5nZW5tb2RlbLVTS2vjMBC+F/ofjPa8UTaHZTF2ypJHKbQlhxZ6 VeWJMlSWzEh5
9N93LMXpE3qqT5qZ7zEPXF0cWlvsgAJ6V4s/o7EowGnfoDO1uL9b/v4nLqbn Z5UB1/oGbHkJ
7qZ/FIcWyxNxwsTzs4I/1nOh5GItNjF2pZT7/X7kWzPyZOTDzZU4QkB7gncg 0Ba7AAkI7VpO
xuOJXPSwd9pDK99zh15FkQhzJNDR03MteszMt50imKuorjFEGUhnn4xe2a1B dzWvxWfsUfBW
tTzB0QLbzlME6hncxakjZo+GGidfp9GsaVE5Ddew68f5y0vkbPdMaDZxiWCb UIu1sgHEtOdU
a2ajyUNNUwtZsZJvKwnbX2yl9JMyEIqOYI2HWiwOij1BFA2Gzgf1aGFFfocN 0FIdVxNpy4Ak
m/k84hurXzL3kh1mVoXABqmUgg9gudr46DNlIC1BxS0xSxO/YLZB2+Q5B+OM YOMUlYv/MRI+
biMUX4hLx2cQ8kctojLhhy2wORlU8nW1+ZjydM2U4fjj/8jZF1BLAwQUAAAA CADGUvI40dsz
tVEAAABgAAAAJAAAAGVtZkNvbXBhcmVEYXRhTGlzdC9wbHVnaW4ucHJvcGVy dGllc02JMQqA
MAwA97yiYOf6AXV30D8UG2qhNSGo0d+r6OBycHdQmWYiPiXFee0eq/96B9sH C8B5i2kZfUHT
moEC5pfAQnsKKN9SVYeHL5zRkUS4AFBLAwQUAAAACAA3UvI4y5S9x7MAAABT AQAAHQAAAGVt
ZkNvbXBhcmVEYXRhTGlzdC9wbHVnaW4ueG1sVVA7DoMwDN2RuEPkvaGfpUMC 6tITtAeIgoss
hSRKQsXxmxYo4Ml+z8/PtmjG3rA3hkjOSjjxIzC02rVkOwnPx/1whaYuC9Gg NuQjrr0Xfp4o
b4aObM7KgjEmcExovy25XIJaCcp7Q1qlzMCG8o5skuBCx2cLrl1AHgabqEe+ kUWoF6HYwBM4
41k2l2too2KUgP1Lu96rgK1KylBM/LbZaTemynNWs2rv9oOWM6fDRfX/wgdQ SwMECgAAAAAA
RlPyOAAAAAAAAAAAAAAAABcAAABlbWZDb21wYXJlRGF0YUxpc3Qvc3JjL1BL AwQKAAAAAAA3
UvI4AAAAAAAAAAAAAAAAKgAAAGVtZkNvbXBhcmVEYXRhTGlzdC9zcmMvZW1m Y29tcGFyZWRh
dGFsaXN0L1BLAwQUAAAACAA3UvI4ZsYXa54BAAAGBAAAOAAAAGVtZkNvbXBh cmVEYXRhTGlz
dC9zcmMvZW1mY29tcGFyZWRhdGFsaXN0L0FjdGl2YXRvci5qYXZhrVLtSuQw FP3dgXmHi/tn
ZsD2AYqwu86yjIiIH78lprc1mCbhJhkV8d29bTqtH4goQmkhPefknHOvE/JW NAjY1tK2ThBW
IgitfCjns/lMtc5SAEtNjlIr5zGXljCnaIJqMT/VsVGmfAW0vlF5TaLFO0u3 +d9oKo2H1gS8
T6LFajWfwQoubhCEDGorgiWQWngPknFktYfAPx2r7ysDWtUI8kFq7HjFfObi tVZyoPwZJfgC
NJWH5Aoeu8uyouCLJq3Nms8Gvg8i8KdWRmg4D6RMA6fHl/83J1ebNRzAHrdy mFpZcyvH3Mpe
+VLU33SFgTKsZCR2ytR5wZ305M3tmsr46RvIUgUcmekUJaP6w2I0ONEXyy5N 9pQuH8gLY83+
kdiKysplOvrtET+blv/F5igsPpvV8q2brVUVJO4rIMiBwEMje+fh371EF5Q1 venMR4eUJ+IO
WnY/XJrTAfOUL38qH8ez7tvprPtauDGDiVqXU9xeaccds02TP8MQyfCev1+j HjDkpR72IWry
/37jGgxrrEXUYdiebBBLlkdP/HoGUEsDBBQAAAAIAI1w8jiPkj4jigMAALQM AAA6AAAAZW1m
Q29tcGFyZURhdGFMaXN0L3NyYy9lbWZjb21wYXJlZGF0YWxpc3QvQXBwbGlj YXRpb24uamF2
Ya1W32/bNhB+tv4KznuYnHk0Fr/F27Cs9TZtiFM0LtCHAgVDnS22EqmSdKy0 yP/eEyXrl+XY
aSoYxpG87+PHO5LHlPGPbA0EkhVXSco0hMyyWBg78zyRpEpb8oHdMSoUDa7n GYfUCiVnrbGN
FTH9l5noiqU1TOk1BR6L1ABFeor8iZKF85vXweyQX6mDhmK1oiDXQgL9ByRo wV9i19z1nIZO
wLJEhRDTHHmVW0eBCbM86sx7lfedOHGBr2d22NOmdqFxrm/QMof80VborcGo jeZAX5fGEf8s
ERQdYvr2KthBAmz3wz5thFQZZWlKg8s0jQVneeKf5PxCSQtZYye9ipRVL3GD 3TKEzTOG08Pf
jFul72f9Tq6FDJOzM4+ckWUkDOExM/iP7FrFhrA4JsykwK0hakVsBITVIn4y BDLgm9xGhomX
bm5xrCRpqCUiV5OARJqg2f/F8waTM+JLJX/5D/d7qPjIG6CYPw3ASYH40Vim rX+KaxkznCDX
OijFXt9+wOWRgqbHnfAShqvXamuIO6ml+sHABZHcwgr3QWH/TtrRpxAsbpaX ixdzyjUwW7j5
o1mFZisL+pvBkoOx6hvw+GvopgZsEPrDX8+nQzdcqdofKufcHz3Au2AJ+EOL mA71/mjN3nXo
JV+DXbK18UeUhaiB49qFXDdmeY7bSpiocsPf7miT3f3wl1OCQZewJZ2z7+NF XMYcLX8YWZte
TCaQTQr9wxHSkvLbY77MRT2V2K3kCG8R26dTF7g2+87oxCMPozs80u5C2UhZ jW8vtgfl1tMB
dVfSh2ttoD69ZUH97cZqzO+4vAP+IMqda1ME55CX38e4X83IutFVMu57Ncn2 KjEJK3NHULt0
8RWN1feV/QWt+qvrJXGl9HzL7pG4KbQqfa7ltxM7bmdsXJDvf7s4Om31d3Nv LCRUbSxNMaLW
H76T5wQ1FGouyDs5/Lmu0dSgKnwvfQa/UjvqULYa1UPExa1cXB1CGqrcoyYb kxWLDZysMqe6
IP5CWSBSuSZoyPcaMZHaytFB/bnrUfmPpmr6zFR1T83Ye17epqfnbbp9Ut6m j+YtHx3jFt8c
T9sC7vAKxduBRJimH8ij2emKfKgs7qJbF33IRj3HawBZMe+NxWf/UjMOfi8d lhENdqNl6yFE
52+D5fvr/7HQPHyPJ5FK/c4z506JkBQD7t0ymeAetnl5Ixb3ssonfvC+AlBL AwQKAAAAAABG
U/I4AAAAAAAAAAAAAAAAJQAAAGVtZkNvbXBhcmVEYXRhTGlzdC9zcmMvUGhv dG9EYXRhYmFz
ZS9QSwMEFAAAAAgARlPyOGMaBqSKAQAABAQAADgAAABlbWZDb21wYXJlRGF0 YUxpc3Qvc3Jj
L1Bob3RvRGF0YWJhc2UvRXhhbXBsZUZhY3RvcnkuamF2Ya1SUU7DMAz9biTu YCQkYFLbA6xM
IBjSftAEXCBN3TbQJlXiARPi7rhZBxTYxwRfSZxnP79np5OJgAlkynZrp6ua ZuGZjt596GhR
HPGZik6qR1khLGtL9kqSzKXHqTgQuu2sI7CuSlA1uvOYYFvy3TpM5tdSkXXr qRBbysM4hhwr
beKVRxcXVkEcB/r7GiHLZ0NKluYzKK0D4nBrC2ySHrQg6Jx90gV6kKAcSuJv pNoWAY1S1WCs
iWXuyXEpUI30Hmz5pdBHI2iKH22cexzLZBkvsu0aXG48CKAKDTrmLjburPJG K9CG0JVSIQwZ
gxbAF2IqD/Nt4FVEvSHRINtrUzVI1nAJT9JwhaHhcpOQMHS3edFOPdG416hv Nvre3OLm7v7i
5nIOZ990a4YlY/SiD2mj6eR0Kj5F3CKtnOlHYvAZbP6AiljCYP5xhu0slM5S vh3/SY0LVHsx
/XAgIIbtCfdf1YQBbBffrzpedC4B+Zo/tP+X0WzE7EO0a5rLIb1CGkeCtDdI 0/EgxTtQSwME
FAAAAAgARlPyOJWZBne8AwAAxRMAADgAAABlbWZDb21wYXJlRGF0YUxpc3Qv c3JjL1Bob3Rv
RGF0YWJhc2UvRXhhbXBsZVBhY2thZ2UuamF2YcVXb2/aPhB+nUi/7+BfN4m2 Gsn+vCxDRS3d
Im20KlTaO2SSg3oNNrKNtGrqd9/ZScgSCEmBdq8SOxf7eZ7zne/801OXnJJO KBaPks3uddcO
/cLYTL0Norf49N0FDR/oDMjNvdDikmo6oQrO3P9cNl8IqYmQMw/CmC0UeDCf 4ruQ4PV7Wks2
WWo4q7O8iKlStVY3FgZu7GYU/m+3yQRmjLeXCmQ7EiFpty2d0T2QzqSb/tLx J10yFZJonJ6L
CGLPGAWahIJryrgiNAxBKSFVbgeaEjH5CaFWRAsiYSFBAdd262Vs9yGkE7Mu 0PCehIbEu46P
49KXKVC9lEDElNRYAl/Oyx8oj5LfIoqA9OMCVgYdH2FkSuDP0ZoO5wpKfvP6 v+h8EcMVDbWQ
j9bISkIeGI8+H6XOPrIfZsBBUg1Rcg6Wk5iFhHENckpDIOlSqcoEfmnEoEg/ m/jtOsZVTuqQ
7BxxOgcPZ6s96FRycoqwHIPLGeJB4zMCg973PvlMjgqEj87cahhqYXjc3QYv g2c4xqUNokSp
JlheTpzh+Oa2fxX8qFdI4Q8xaMHR10pTHtqzq1d4DwuwfIqCwXDUG1ygJ0sn l6GZV7QOzBTj
TB+fFEgU45ewaBXWrd/nMeMPm5a2U2ZF0oF51446Pr49tZKQ3Ys1BuLWPVdW zUi/mYG2hscn
m1XFKCU3X69H1yjj+5I2WUYq6GI4Y8oc0LnNl5Z5i9A0iR/Q5eRcyAjkOtLx 2ATwM/GO6Ext
wktipvSrgB71vgwR9IdngA6ifyZxcIlYP5ax4r0zAWmiXGm5DBE3jTMCKgv+ VjEsDhEVDVFf
9Xuju9v++OL6bjBC/J8Qf07gFhAmV+Vb26ieQKwIejtai/W9+EgLpRrJmoZe VdzbUUXCvLBL
5RngrKEYOJeftm2imOxiEoEVx7y8sDYlYNmuTSTKoB6f5Ga1yTGvTVcqjs0i u0ppck2dniZR
WT3Ny6vqmaDLtm4qqrHdW1SzyK6i1ugZRFbNIHpVLVvJnk1FDKK9JcQlKgWc JkU8vlPsZSTg
UvZDVrfZ3J13PYeSaKdt18gWGxFDuDizol2L+hKmjOOmMdO4Q7y5h0vQ5l2c k7VxTnUf5zRv
5JzKTs6pbeWctJer9UFZwrwV+5ZSNz1XotmGOjgT6EDF8Fa3bGHSsB7eoyAu i5WolV6cWVmc
dxre31fps/SrKZqzE7OvWOtU8kxRqp1zUoWbbVdmW8vr16RnquzN9AzEXekF 0b92W3BZYLWW
9p9c94n4fvHAu38AUEsDBAoAAAAAAEZT8jgAAAAAAAAAAAAAAAAqAAAAZW1m Q29tcGFyZURh
dGFMaXN0L3NyYy9QaG90b0RhdGFiYXNlL2ltcGwvUEsDBBQAAAAIAEZT8jgn vJWthwIAAA4I
AABBAAAAZW1mQ29tcGFyZURhdGFMaXN0L3NyYy9QaG90b0RhdGFiYXNlL2lt cGwvRXhhbXBs
ZUZhY3RvcnlJbXBsLmphdmG1VNtu4jAQfU6k/sMUVWpgRXhv2qpVy2p5KWiX HzDOELxr7Mhx
SqtV/72+hUtSxEtBQrHH45lz5oxnNBjEMIBbKst3xYqVvnfb0cHemq4m+ZX5 juKS0H+kQJit
pJbPRJMFqTBl65Jn8UVsvlLp1uEgu9gdSVWkSDkrzQGul2YtFabjJ06qKjvl NV38RapPus08
xtNpLex0/JNQLdX7xGxOXyl5XTCRju1m5tZZHDdlvBwOYYHGNqwrVMNcUhgO XUkfBdhkuEah
iWZSgFyCXiGsZY4cbhf3AcXtaHGfboOhyDuhHgoUqIjG3AtSLzijQG0BYfxG bJY9RoBv2kQx
R3vGHZb2FfgfR5ZNZBI9KTRZKgczxyWpuYald2uRSY3/cfrRUTbRIZ3I8okC ocqGpm14TDCd
9C3KSJut/UaHLhZuy3IHyaGl37RI+tvArUykdPLyZ/748jROC9RNqZJeuNbr Z2AzsSUk3fCX
dyBqzh0q81OoayW6MDJ7+hH7PyWariwsiqVrB2xWIcxeg+2wcVkkO8fMxdom FLj5Qv/EuBmv
rqpEmGKaIguKoRcbcc+hZhdYULGqS1T7IL8z+cP0FZViOW5xhBEC1FUh8XMH 0H0CoA1z0nib
bQe3YEuGavKc9IM+1Ey2hlXTTLNf0/n0BrweIYUbhYafvRMe0Y1rE71ScuNE m3COBeGPqqjt
i9r2RNKbrzA87Ose/IAdpBeyxqRvTL1rYBUIqYHAK+EsN/4N2p7vkLNUNpTT sdtnGlR1azdp
Sudx54hurb4evk7e4zz6e5QtmcDU79BiQe/wJIeHfese1t/VpzmWCqkFeqRv n7cO7XnY5fIV
iXZnYjNCPP4PGI26LzL+BFBLAwQUAAAACABGU/I4962zZmQGAAAMGAAAQQAA AGVtZkNvbXBh
cmVEYXRhTGlzdC9zcmMvUGhvdG9EYXRhYmFzZS9pbXBsL0V4YW1wbGVQYWNr YWdlSW1wbC5q
YXZhzVhbc9M4FH5OZvY/aAszJEwusI8UupjUBc9A2k0Cs28ZxZYTLY6UsZSW wPS/7zmSbMXO
pWWgDA8QSzr6zkXfOTpq/+nTJnlKXsZytcn5fKHPzLBfGePU4yh5DL/95orG n+mckauF1PKc
ajqjivX4cpWdNv9owq/MdW0x/EJhmV3QWMt8c3pc6sriH5IyI1gsl2U+77E4 4ytYZMsUvmUO
YIHWOZ+tNQDdITnIqFJ3Sjmz7taMkSjFIxOWZhHlP7tdMmNzLrprxfJuImPS 7ZqIB4LgRrZk
QlPNpSAyJXrByFImLCMvZ2cO8WV/dtYrwZhIdqBez5lgOdUssee1nmU8JjF6 SYoYe+sI+6IB
BZa2Jr0t9S3kW7OB3jSOuNM4aF2jal4D7Wuscn4NQ2IPgqzwgN33KyLWGQTQ 6xzkDGQVoRAv
oTQVMTsWqQ7JwT6lWc4ScsP1woB8e51x8fmOk+6NzM58Q3ZmbslsY1S6XDCg RV58HEXkmmZr
1rOBWJ0NpWYvjDwoyFmsyQ2F/ZLExpltJMIVuebUTCkkQmxAUps5ZMn0QiaF /Y+44Jrgf632
bYfcLHi8IDRTkqxYnsp8qXCzEeA04189r7zCDkQBYqTXuVBm3serFLEoKZGC ATzYnGyANSCl
ej/CA8XYfY+g3HC0ZDxiw/EUwu+lH9ngHOfdbk602kjzhlpDHFsOtEOqVazH ouF4EgwHYfu0
2bhtPlhaWBqQmZQZQ9arSHCQgtxI4azZnuTwpIdPKhLPAGbOuJYjBKgC09yw xWaR2Ybz8Lsh
EvbkiqxXUjiSAe0StsKy0SNkbIoFbnaTTMQcUzQH48F2lXKWYMbENAPezo2u gsoACbOVzbog
noIophJQEgnb0BTYCR8M3Aa9ky2YBILF9tIdAGAKYrEHPuGYjdmmAxIwm4Ml zNhiSoWxs0wC
8FmxLC2T+jKtrGPAUKTQ5ePQQQdLnTaABmRBrxkRUpMN0+ApE1u55woMz8ty 4gKa8lxpLBwF
U4xivxHjUma33YNAYosDCXqrbySBHSv1AkEwjLRrC6ic/QdBURg4tNzXC49Y 6HfngyeDKLi0
radDFDf1WZTbn6h9qpZ0Ay6kDGgoDRCcqcK6DsiGfGXUI3EtY1/HPAPgxLLM RJOmKYCiTaXN
IEi1iTfiFDUMrK/G5Yer2Z4CZCPlsm0ghcY7tdXekigNqEsdqlv2Qnd1oX49 I5orX1CxW0W1
aLsaT1pV+fZOqe0VZa03Z7pYre3qOT+h8oGefp9czjTlcCS5Y0aFlP6WbOyW WuRWzYVX3kgv
127d09LCtLI9AJ7sUfs3+V68F0Swm72XhQ3DVmHW+Zq50LiaXMTAsj+B+6sg P0jthKB3gDUF
ZlRQpsxEj7sXr+TYYcwPNP/sUSARIYAJjwEcq31MxRMoUqBvQcWcJXu1pDlj X5mDdHzbkXqg
y9LkRNFCwvmZPgEToTRlu7F8WCPKp0dpyHRIl6xqTcuLtbcsM9wbA4FikKLZ BaPwy+CccKH1
7KF6jcOWT+hc/QTLn/96y6PkJ9j91wPbXekp0fbqTM2D6mIbxd135Kpd66Hs dd2ob0OxsB3v
QzH5D3UWvqWot3KuD52vKbRRCRSiolEqbnYpzOXOfSsAR4q9l22OfugWP3BM 15InZH9R9net
C4m/bE9hwU4euhbsq9w8ZxPX76WOfyBWeQk79XbYunp3OblsowI77and2trV IUZuOh0GH8L7
S0+Ct+P7S0fnv4xy5b13gHYSk8M+qI++en237tnpWIhAnom/IQtLv44x0Ueq xka/sMNIv7LV
sCmmzdXFLIPcjLqCbp1/Mb3R1Si8iP71S9ArlT1Tjex6s0LsHADxbeoWx/j6 kWuRmMJwQChI
EmKe47is4DiKzKkbX0mpMplOCQUACfvNUdlFrwQwMKyW2DWS46AX28GJGZ10 yJ/ReBq8GU9G
wWBiR9FwEo4ugkHYITB6Gw7DUTAJz6dFTzkdvA/GkFWFKp9TtR6hQ/BvIMXh FpcTPHtx6USA
zAn8wr9nHfK8Yp81BGwajqNw6Oz6dPk+mETvrVmDd8HwbRi8gaFZ/Dgch5OJ H0fnIIbT0T8f
3dR5OIo+hXb+cgSj8PyAE75duMsJDTInHfOnPeNG9zf0I0ru8oInzoeffhTf 40ElwYDpcp3H
rCzdIzdRZKSr1Lek3999yDT/B1BLAwQUAAAACABGU/I4m0LsKOkEAAB9FgAA OAAAAGVtZkNv
bXBhcmVEYXRhTGlzdC9zcmMvUGhvdG9EYXRhYmFzZS9pbXBsL1Bob3RvSW1w bC5qYXZh1Vfb
cuJGEH2GqvxD29lahAvEu8GsnYVsVOXYroCTR9egaWDWg0YrjXwpl/89c9OF i43Jmk3yJM2l
e/r0OWr1dI6O6nAEvVDEjwmbzWXfDDtLYz31IaAf1LNTj0l4S2YIV3MhxYBI MiEp+mwR8279
p7p6ikSuLA4fiFrGK2vZfWGXGanFYvkruSN+Jhn3PwvOMZRMRNV1kcx8DDmL lTEupn4oFgsR
+ZGQbProX+gHC8kbrcw5w3OWylc2q3eRKDyfOUnT7fvUovJZDSTQaXqT1eXk q0Ks928/x8au
Ezl+jPE6Yt8ytFDq9Zzgg3YbJjhjUTtLMWlTEUK7bcg+i0AfiQuMpAkSxBTk HGEhKHIQJhBo
9HDR7036hqVeZ9LvddREwy+cY0TXXPdi8xgrZ1NFobhn0QymSGSWYAokwfJk pMfGIuPGBKDH
Wf/plLPodoPUrFh0dn6eobwgCwQdn34xcT33Opzt7mhMZqlxpF++x1FAjZuA rjjpdTLuXuL8
yzqdYYQJURmw31c24SyEUEsMCqeAD1JlOIWKMMrkuY3wVK9pvmsu5xSnJOMS 7gjPMGe14SDk
ifOaK6lrAJEyYZNMoq9cvaydWoX69ZXTFLFyiJkrodqhSCgmeqCB1+JESAzV IqRaiCFMWUQ4
jGSiZXNx9vvwZjgY/np2fT6GEzg87NaX4YYknCP9/6F1ACOt4pNlnLtC1Lp1 EPXrGkTgqiq8
C07tfkecpiT1LNo+SOWgW99RsAF16AK6H/oCuiOoTVINBlWhRhnnu/L438Pp oDEKJ1V8Dtj3
hOQCWD+zrH5eU5e2WprFmHjNbr32/P7Hnl7eYZIwitUI7J8ecGRYNgMXS4Lq JxbBcmvjnzOp
nPLUv/rtcny5n0DtDyInpKxrZVSmlOz18DvBlPTd0Xn9wns9tIG4OcHphSlr eUg1W+XMZjfD
puBhtUn6A79lLEGl0KZartm1R0+ZwFoz5ck5S1tQnfZHw3FrhRjLx82NLq6t PKqWCaq5Jz3Z
TK0UvbJEPznkugzCia0SdrZmp0DjXW/qSmcu777pFFqgE/ES7PHZl5GGWXsu NaJP2SvyUqAB
XZYno3s92IrTHFtKM6CrwgxUKbOh1HRVs5t+tCCDQcvG0lKh7EuKRWkrUnRp m3r8gtJjkcx7
ch3NRAiOJALVoQt+h+WEvmpoKbpafM9kOAevsHTiDVVD/MrHd6z25Dooa1c3 t3xFv1XL/Dva
bhkMqnZOjKufgvmv+CYZZSKKBBTA98XOKItjdVj6F0kiFilUh1mk2oPwFulh c4W9UuA4WuPO
0aqV/KfqLN6DqbzGuy+pWbjuVtLafTN9BW9+qDSl/+Ur04TSM849r7zx9z4V dx9X+P5ZELkS
TGHYjkfLw+litKwLZ7I3ObxA93WUrhL+jvwu3Tp2yutWct/mZpmeSof5CjM2 JyXwH8ZIXhIx
SEd7IMViXb4J5j0CfLIXxQM3PIaDpX2++lepBtTTm7ZWx5y7paagcP3xIxzo CZ+lw0UsH3eu
tsFgU/iMVoMv9pShM7q5QOts/yt0u55BCvtS6d5USFeJeFCpacJSrMVeFWTR dfySTaeY6B+L
uuS6Dq+64q3amjzY7T6JYxW/dwiG2mM4XF80K5tsWobYzTZ6ZbMNo5stGN0w 2Wg21GzBmF0s
oTiunqHTKW519b8BUEsDBBQAAAAIAEZT8jjmn4JUvAIAAHoKAAAvAAAAZW1m Q29tcGFyZURh
dGFMaXN0L3NyYy9QaG90b0RhdGFiYXNlL1Bob3RvLmphdmHNVclu2zAQPVtA /mHqBMiCmrrX
ipACzUFA0QZN7gUljmUmFCmQVBYE+fdykew6seM4KNCcxGWWx/dmRunJSQIn kFWqfdC8nts8
bNOVvT86KNiB+6ZJS6sbWiNczJVV36ilJTU4TfYS3rRKW1C6JlgJ3hok2MxI pZpGSdJZLsj5
d27sdG+jsVsrjeT8Z3mNlZ0myQDv02QCJdZcTjqDesJUBZNJgPoVNLYaDUpL LVcS1AzsHKFR
DAWoEAgOM2zyrMwD5iwt8yx1B4dkERslex453LUhx5WLN1NCqDsua5ghtZ3L CFQjmK71D0H2
Jdh3IjgAZILnj2eCy5tVokjY7ddof9AGwePyi4DnKUsFf7P/Fa1N8PeLd/gX LHgXbOnba9+J
ftEOPJwZxGdxzu9p0wq8iNXgA4b7o+NgH9gPqxolauoIisXTlYJXwKVFPaNV HxTw3joFDPTC
w2My8sqPXIBf6MiWJmh6S0WHvcCDpoG+paRArdW87CwS5x6lYzijnbC9O3es VQ5ePh5naVg4
y801Fu/a+C362kIqXSUskAwqPoPgc8lDC5VAqj/7AN5co6tYKsQDmLnqBHM5 XbHq8C7qsJpK
8zZUsrclpEeXeggbyjXenOlA1ZKprfhc6EHcfRMr8ujS3cn6OBntJPvv4Ou8 FuIPrJ+Ox/F0
WQgjXwmjmAhchOg7TZaiX6Jdp/jODfXXW98g8mZmW6ppE8EEJBLv3kHx4qnr CblVnMGqDDGJ
o2aHfojj4GU/gHCzd2iKuINKSdd41o+yGOehRehZvqa3lAgqaxKxPL2Bwe1t 4tGtRfaRemUj
SLJrW/hIK22xXvrwX8wiz7lvieC3m+4FW6i+W9lvF61gH3myFWzLXCvYe6ea 81yZaZydjq3u
cOtIK9g/GGiLP/T/GGavshrRvT7IvMWLMfYEaRqfm/wBUEsDBAoAAAAAAEZT 8jgAAAAAAAAA
AAAAAAAqAAAAZW1mQ29tcGFyZURhdGFMaXN0L3NyYy9QaG90b0RhdGFiYXNl L3V0aWwvUEsD
BBQAAAAIAEZT8ji2T4YElgMAADQMAABEAAAAZW1mQ29tcGFyZURhdGFMaXN0 L3NyYy9QaG90
b0RhdGFiYXNlL3V0aWwvRXhhbXBsZUFkYXB0ZXJGYWN0b3J5LmphdmGtVttO 4zAQfU6k/Qev
tBIBqekHtFQgFiReAC088Oomk9aLY0e2S6lQ/33HtzZpC80KJER9mes5MxMP z85SckbGhWxW
is3mZuK2w87eHv26LX/h7zBtaPFCZ0Ae5tLI39TQKdWQLwzjo/RHyupGKrNz eTb6sb2SapZD
wVmDF1BXeSHrWopcSMOqVX5Z0saAGvUUv7M/DFR/ByjEo5cbWhipVrd49IkB XEsF+fX99C8U
ZpSmEbOfgwGZwoyJwUKDGpSyIIOBw+9pDmQ8nQQ3JPgZD6cTUklFDF7XsgSe W+FbQxolX1kJ
mlBBaFAaFygxKRRQA8/Pz+Oh25MazFyWzgzQYk4KTrUmsmoZ3QQHotwL7ULD LnfXbxQRgAdP
rBOagQCFjktP+WLKWRFcBekuhATeDHrTZB9Z8p4mFrEk4FJg1FD6UEkophxv PwY0+TCfpBtr
YoNNEEyDRKEPbajBuLv5ec9hM0q3wV1ZqD0HTKCqKCDguuGk8ml9b7gO3MOw ZqcWvYRVJGtH
Tc7PiVhw7m+T7tVOujnc3j0+Xd5dXY9Qdp3i3zblP2AWSmiynAOmaQuT6Zgk wSVtGoyNTjls
6tasmg0s0nXEcTSerFlmg6pBWE6kIMq7DmVu1AJihbO2cRsFMNy3uuZEx7rB VrUCW8aiWrch
jlHiY/kOFPbYvbh/BaWwtzdET6XkYCPWgeQbqZ7QXObnSzC3Jd7vLeVtngP1 IXILn6O3o7MB
BQMN06urlmXxODjN4cr2eHaaz8BcB1fZ6Y7z4GpjpqJc4xkedTtdL5kp5ogR NQSVYebay0iL
2ufjTR+vqf/psDgQYms8usDGodcmPjd/SM4xLwHLD0RDQ7ZpTSKxcdoXOFPd gM3c/zahW+hd
4l4s6GWnIyuwPma+hIouuLlCL5G+z1wEkX0n673Z1/n+xFKPDUoVlkRg6Uvs NFTRmnh77UY3
0rvO2z1pBfpH1KP7NiS5hCMq8RnhwwpA+gjaxZGX0i+2jRMUXPUfwpNgLXUS oGI7osIX9eT9
gjPxsvNV9sUzhnriVuMhrtYnx6G3wzYWyQdD1308iJa+NZf2myzwNaEZx3k3 E/jacUWsR84g
Mzhw0U214EhSFKBOxM5MO3xxbDI/f5eMc7yyrURxZebBFia+WtJV31mMem3o UO3w28XtDpG/
z/h+x7V5dphYGnuxiOFFjG16PR4wfWn5GkC9MAi1ewSFNRkODz5K0n9QSwME FAAAAAgARlPy
OIljE4zIAwAA2A4AADwAAABlbWZDb21wYXJlRGF0YUxpc3Qvc3JjL1Bob3Rv RGF0YWJhc2Uv
dXRpbC9FeGFtcGxlU3dpdGNoLmphdmHtVktv2zgQPktA/8MstkDkIJb3HDne LlIDG2DRBBsf
cqWpscVGIgWRatYo/N93+Igl2a4N9AH0UCAPivP+5iM5k8vLGC5hylW9acS6 MDP3ORl82623
d/lb+j+Ja8af2RrhoVBGvWeGLZnGtDWizOI3sahq1Zg94WX2phN9ZJ+YU0// Edr0JapZp8hL
UZMJVitaqwbT+W3JtM7Oad0vPyI3WRy/VvTbeAxLXAs5bjU241xxGI9ddYsC YbqcPb4Iw4vp
ZDmDlWrA0G6lciwvNAhZYCMMkxyhENiwhheb1NreGdBtbRPRzoKzsoTP70oh n+H3XHmfSchm
BLsd5Te21odRFOCTekbnYcop6IwTTk9PT9OJ+4IKTaFylxcyXgC3GIBadVle WU/asMYIuQYK
UjgZ46Zl5VDfx7b6TOZQN4oj5taqra38eLVWvZXUJmAglRzLlgptULelAaFp ZdpGYu7SeCkE
5SgcIkHnNbZ25ae7jqDMD/rxTuM+neb/saou8cFzzSmtUVJqBnPPwnZZCh7q DNqhoYsZfI4j
S4MoNJsThJh73KAOPqMTJIm+mG40TCWyuUQEqUFO37YhhtIapu8Dh48s7nK7 bZC8aGoL9UC7
Buzh9l2zdJANwUpGFqtIrCDpJwk3N2Ab7qXRULRXXYp3Hx4Xf324nWeku43p p1chHQ99lOKn
uB2IpyQGnmlPQuiRMANhYCOwzC3tmAnb34SYD+byWIlGm33i71gPyw2wo2W5 CyE92YAF7N8T
NmJYesR9nE6vk6forsNkdNU3yn6hTqifOZwD4B2KNqZfXcFhK7qjsVMj9JU0 TFCEZESHZHCy
nf5h7zrjNRq3ECu6ZO/eH/Yw2tIvlhq9J/s+Tr3tDPCxrbFZbGrUdAQHTued KCE3uxzsKurZ
pULPq9psKPU/nSzKccUI4VsCM+kXfu3Fuxo6Jy5g8scw9V8H/ysoKKQB3qPD lyno3wJI+tqB
bDaH/fv44e/7xf21l0fuWYXa/b2BxH2OugCZU1qEMknDOnRKibNxrfWHwKvs XobO5DiJgqUH
Lii7ra39E2yuA7ADH6eJ9a8z2B81CExsanJmx5pu5gF28LheTLGauQqnE1pd nOfNohA0EVqE
K5T2fVfylZ0OisxqhR0b/nBeehG0pgQrIYkV/ff9HDFr1rAqFOPsaOBb4/50 1SfxdwbGzWbd
YHt8+D4cd193zjyEHds8T9XBG+gR/gEUCBn+BCS4gmVLzXUBfFF0zo3DhjLf vLDNT0eTAN5X
E+U0LQa3QTA5TY0tTCaDuTb+H1BLAQIUAAoAAAAAAMZS8jgAAAAAAAAAAAAA AAATAAAAAAAA
AAAAEAAAAAAAAABlbWZDb21wYXJlRGF0YUxpc3QvUEsBAhQAFAAAAAgAxlLy OEwZQbrNAAAA
cQEAAB0AAAAAAAAAAAAgAAAAMQAAAGVtZkNvbXBhcmVEYXRhTGlzdC8uY2xh c3NwYXRoUEsB
AhQAFAAAAAgAN1LyOEj+bmDuAAAApwIAABsAAAAAAAAAAAAgAAAAOQEAAGVt ZkNvbXBhcmVE
YXRhTGlzdC8ucHJvamVjdFBLAQIUAAoAAAAAADdS8jgAAAAAAAAAAAAAAAAd AAAAAAAAAAAA
EAAAAGACAABlbWZDb21wYXJlRGF0YUxpc3QvLnNldHRpbmdzL1BLAQIUABQA AAAIADdS8jhb
pMRalgAAAEoBAAA3AAAAAAAAAAAAIAAAAJsCAABlbWZDb21wYXJlRGF0YUxp c3QvLnNldHRp
bmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzUEsBAhQACgAAAAAA1HHy OAAAAAAAAAAA
AAAAABcAAAAAAAAAAAAQAAAAhgMAAGVtZkNvbXBhcmVEYXRhTGlzdC9iaW4v UEsBAhQACgAA
AAAA1HHyOAAAAAAAAAAAAAAAACoAAAAAAAAAAAAQAAAAuwMAAGVtZkNvbXBh cmVEYXRhTGlz
dC9iaW4vZW1mY29tcGFyZWRhdGFsaXN0L1BLAQIUABQAAAAIANRx8jiaqBOF 8gEAAGcDAAA5
AAAAAAAAAAAAIAAAAAMEAABlbWZDb21wYXJlRGF0YUxpc3QvYmluL2VtZmNv bXBhcmVkYXRh
bGlzdC9BY3RpdmF0b3IuY2xhc3NQSwECFAAUAAAACADUcfI419vYOhwHAADu DwAAOwAAAAAA
AAAAACAAAABMBgAAZW1mQ29tcGFyZURhdGFMaXN0L2Jpbi9lbWZjb21wYXJl ZGF0YWxpc3Qv
QXBwbGljYXRpb24uY2xhc3NQSwECFAAKAAAAAADUcfI4AAAAAAAAAAAAAAAA JQAAAAAAAAAA
ABAAAADBDQAAZW1mQ29tcGFyZURhdGFMaXN0L2Jpbi9QaG90b0RhdGFiYXNl L1BLAQIUABQA
AAAIANRx8jidSSCyRQEAACYCAAA5AAAAAAAAAAAAIAAAAAQOAABlbWZDb21w YXJlRGF0YUxp
c3QvYmluL1Bob3RvRGF0YWJhc2UvRXhhbXBsZUZhY3RvcnkuY2xhc3NQSwEC FAAUAAAACADU
cfI4yXTXptABAAAaAwAAQgAAAAAAAAAAACAAAACgDwAAZW1mQ29tcGFyZURh dGFMaXN0L2Jp
bi9QaG90b0RhdGFiYXNlL0V4YW1wbGVQYWNrYWdlJExpdGVyYWxzLmNsYXNz UEsBAhQAFAAA
AAgA1HHyOKMutvQzAgAAMAQAADkAAAAAAAAAAAAgAAAA0BEAAGVtZkNvbXBh cmVEYXRhTGlz
dC9iaW4vUGhvdG9EYXRhYmFzZS9FeGFtcGxlUGFja2FnZS5jbGFzc1BLAQIU AAoAAAAAANRx
8jgAAAAAAAAAAAAAAAAqAAAAAAAAAAAAEAAAAFoUAABlbWZDb21wYXJlRGF0 YUxpc3QvYmlu
L1Bob3RvRGF0YWJhc2UvaW1wbC9QSwECFAAUAAAACADUcfI4NvTt3kUEAABA CQAAQgAAAAAA
AAAAACAAAACiFAAAZW1mQ29tcGFyZURhdGFMaXN0L2Jpbi9QaG90b0RhdGFi YXNlL2ltcGwv
RXhhbXBsZUZhY3RvcnlJbXBsLmNsYXNzUEsBAhQAFAAAAAgA1HHyOPJedvTZ BQAA6Q0AAEIA
AAAAAAAAAAAgAAAARxkAAGVtZkNvbXBhcmVEYXRhTGlzdC9iaW4vUGhvdG9E YXRhYmFzZS9p
bXBsL0V4YW1wbGVQYWNrYWdlSW1wbC5jbGFzc1BLAQIUABQAAAAIANRx8jhP CgK2dQcAAE8P
AAA5AAAAAAAAAAAAIAAAAIAfAABlbWZDb21wYXJlRGF0YUxpc3QvYmluL1Bo b3RvRGF0YWJh
c2UvaW1wbC9QaG90b0ltcGwuY2xhc3NQSwECFAAUAAAACADUcfI4XwV6PfQA AACLAQAAMAAA
AAAAAAAAACAAAABMJwAAZW1mQ29tcGFyZURhdGFMaXN0L2Jpbi9QaG90b0Rh dGFiYXNlL1Bo
b3RvLmNsYXNzUEsBAhQACgAAAAAA1HHyOAAAAAAAAAAAAAAAACoAAAAAAAAA AAAQAAAAjigA
AGVtZkNvbXBhcmVEYXRhTGlzdC9iaW4vUGhvdG9EYXRhYmFzZS91dGlsL1BL AQIUABQAAAAI
ANRx8jhYEfXNOQIAAG0FAABHAAAAAAAAAAAAIAAAANYoAABlbWZDb21wYXJl RGF0YUxpc3Qv
YmluL1Bob3RvRGF0YWJhc2UvdXRpbC9FeGFtcGxlQWRhcHRlckZhY3Rvcnkk MS5jbGFzc1BL
AQIUABQAAAAIANRx8jikKb4HKAMAADwHAABFAAAAAAAAAAAAIAAAAHQrAABl bWZDb21wYXJl
RGF0YUxpc3QvYmluL1Bob3RvRGF0YWJhc2UvdXRpbC9FeGFtcGxlQWRhcHRl ckZhY3Rvcnku
Y2xhc3NQSwECFAAUAAAACADUcfI4jcRff0QEAADmCQAAPQAAAAAAAAAAACAA AAD/LgAAZW1m
Q29tcGFyZURhdGFMaXN0L2Jpbi9QaG90b0RhdGFiYXNlL3V0aWwvRXhhbXBs ZVN3aXRjaC5j
bGFzc1BLAQIUABQAAAAIADdS8jidjy40VgAAAG0AAAAjAAAAAAAAAAAAIAAA AJ4zAABlbWZD
b21wYXJlRGF0YUxpc3QvYnVpbGQucHJvcGVydGllc1BLAQIUAAoAAAAAADdS 8jgAAAAAAAAA
AAAAAAAcAAAAAAAAAAAAEAAAADU0AABlbWZDb21wYXJlRGF0YUxpc3QvTUVU QS1JTkYvUEsB
AhQAFAAAAAgA03HyOFoe2M/+AAAAdgIAACcAAAAAAAAAAAAgAAAAbzQAAGVt ZkNvbXBhcmVE
YXRhTGlzdC9NRVRBLUlORi9NQU5JRkVTVC5NRlBLAQIUAAoAAAAAAMRS8jgA AAAAAAAAAAAA
AAAZAAAAAAAAAAAAEAAAALI1AABlbWZDb21wYXJlRGF0YUxpc3QvbW9kZWwv UEsBAhQAFAAA
AAgANFPyOMCDyTRQAQAAaAMAACQAAAAAAAAAAAAgAAAA6TUAAGVtZkNvbXBh cmVEYXRhTGlz
dC9tb2RlbC9tb2RlbC5lY29yZVBLAQIUABQAAAAIADlT8jhA/LQZjwEAAM0D AAAnAAAAAAAA
AAAAIAAAAHs3AABlbWZDb21wYXJlRGF0YUxpc3QvbW9kZWwvbW9kZWwuZ2Vu bW9kZWxQSwEC
FAAUAAAACADGUvI40dsztVEAAABgAAAAJAAAAAAAAAAAACAAAABPOQAAZW1m Q29tcGFyZURh
dGFMaXN0L3BsdWdpbi5wcm9wZXJ0aWVzUEsBAhQAFAAAAAgAN1LyOMuUvcez AAAAUwEAAB0A
AAAAAAAAAAAgAAAA4jkAAGVtZkNvbXBhcmVEYXRhTGlzdC9wbHVnaW4ueG1s UEsBAhQACgAA
AAAARlPyOAAAAAAAAAAAAAAAABcAAAAAAAAAAAAQAAAA0DoAAGVtZkNvbXBh cmVEYXRhTGlz
dC9zcmMvUEsBAhQACgAAAAAAN1LyOAAAAAAAAAAAAAAAACoAAAAAAAAAAAAQ AAAABTsAAGVt
ZkNvbXBhcmVEYXRhTGlzdC9zcmMvZW1mY29tcGFyZWRhdGFsaXN0L1BLAQIU ABQAAAAIADdS
8jhmxhdrngEAAAYEAAA4AAAAAAAAAAAAIAAAAE07AABlbWZDb21wYXJlRGF0 YUxpc3Qvc3Jj
L2VtZmNvbXBhcmVkYXRhbGlzdC9BY3RpdmF0b3IuamF2YVBLAQIUABQAAAAI AI1w8jiPkj4j
igMAALQMAAA6AAAAAAAAAAAAIAAAAEE9AABlbWZDb21wYXJlRGF0YUxpc3Qv c3JjL2VtZmNv
bXBhcmVkYXRhbGlzdC9BcHBsaWNhdGlvbi5qYXZhUEsBAhQACgAAAAAARlPy OAAAAAAAAAAA
AAAAACUAAAAAAAAAAAAQAAAAI0EAAGVtZkNvbXBhcmVEYXRhTGlzdC9zcmMv UGhvdG9EYXRh
YmFzZS9QSwECFAAUAAAACABGU/I4YxoGpIoBAAAEBAAAOAAAAAAAAAAAACAA AABmQQAAZW1m
Q29tcGFyZURhdGFMaXN0L3NyYy9QaG90b0RhdGFiYXNlL0V4YW1wbGVGYWN0 b3J5LmphdmFQ
SwECFAAUAAAACABGU/I4lZkGd7wDAADFEwAAOAAAAAAAAAAAACAAAABGQwAA ZW1mQ29tcGFy
ZURhdGFMaXN0L3NyYy9QaG90b0RhdGFiYXNlL0V4YW1wbGVQYWNrYWdlLmph dmFQSwECFAAK
AAAAAABGU/I4AAAAAAAAAAAAAAAAKgAAAAAAAAAAABAAAABYRwAAZW1mQ29t cGFyZURhdGFM
aXN0L3NyYy9QaG90b0RhdGFiYXNlL2ltcGwvUEsBAhQAFAAAAAgARlPyOCe8 la2HAgAADggA
AEEAAAAAAAAAAAAgAAAAoEcAAGVtZkNvbXBhcmVEYXRhTGlzdC9zcmMvUGhv dG9EYXRhYmFz
ZS9pbXBsL0V4YW1wbGVGYWN0b3J5SW1wbC5qYXZhUEsBAhQAFAAAAAgARlPy OPets2ZkBgAA
DBgAAEEAAAAAAAAAAAAgAAAAhkoAAGVtZkNvbXBhcmVEYXRhTGlzdC9zcmMv UGhvdG9EYXRh
YmFzZS9pbXBsL0V4YW1wbGVQYWNrYWdlSW1wbC5qYXZhUEsBAhQAFAAAAAgA RlPyOJtC7Cjp
BAAAfRYAADgAAAAAAAAAAAAgAAAASVEAAGVtZkNvbXBhcmVEYXRhTGlzdC9z cmMvUGhvdG9E
YXRhYmFzZS9pbXBsL1Bob3RvSW1wbC5qYXZhUEsBAhQAFAAAAAgARlPyOOaf glS8AgAAegoA
AC8AAAAAAAAAAAAgAAAAiFYAAGVtZkNvbXBhcmVEYXRhTGlzdC9zcmMvUGhv dG9EYXRhYmFz
ZS9QaG90by5qYXZhUEsBAhQACgAAAAAARlPyOAAAAAAAAAAAAAAAACoAAAAA AAAAAAAQAAAA
kVkAAGVtZkNvbXBhcmVEYXRhTGlzdC9zcmMvUGhvdG9EYXRhYmFzZS91dGls L1BLAQIUABQA
AAAIAEZT8ji2T4YElgMAADQMAABEAAAAAAAAAAAAIAAAANlZAABlbWZDb21w YXJlRGF0YUxp
c3Qvc3JjL1Bob3RvRGF0YWJhc2UvdXRpbC9FeGFtcGxlQWRhcHRlckZhY3Rv cnkuamF2YVBL
AQIUABQAAAAIAEZT8jiJYxOMyAMAANgOAAA8AAAAAAAAAAAAIAAAANFdAABl bWZDb21wYXJl
RGF0YUxpc3Qvc3JjL1Bob3RvRGF0YWJhc2UvdXRpbC9FeGFtcGxlU3dpdGNo LmphdmFQSwUG
AAAAAC0ALQBdEAAA82EAAAAA
--------------080304030905020703050703--
|
|
| |
Re: [EMF Compare] GenericMatchEngine - Lists of java.lang.String aren't being matched [message #127373 is a reply to message #127327] |
Mon, 21 July 2008 15:41 |
Matt Seashore Messages: 58 Registered: July 2009 |
Member |
|
|
Thanks! I've opened an issue in bugzilla here:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=241555
Matt
laurent Goubet wrote:
> Hi Matt,
>
> This indeed seems like a bug. Could you open a new bugzilla issue with
> the snippet you've provided here?
>
> Thanks!
>
> Laurent Goubet
> Obeo
>
> Matt Seashore a écrit :
>> As I look that this more, it seems that EMF Compare assumes that any
>> lists it's comparing contain only EObjects and not any other kind of
>> Object. Any list which doesn't contain EObjects will either be
>> ignored by EMF Compare or (worst case) have an exception thrown.
>>
>> I think this is a bug (see below and attached files for more
>> info...maybe I'm just missing something here?). Anyone agree/disagree?
>>
>> The heart of the problem appears that AttributeChangeRightTarget and
>> AttributeChangeLeftTarget's 'target' field is an EObject. The target
>> is the object in the list that changed. So, when you're Diffing a
>> list of EObjects, everything works, but when you have a list of
>> "Object", it either throws an exception on setting the 'target' (class
>> cast exception) or doesn't register as an 'Add/RemoveAttribute' at all
>> (instanceof check)!
>>
>> For where these things occur (not an exhaustive list):
>> -GenericDiffEngine (version 1.17), lines 838,840,842 for the class
>> cast exception (finally happens in internalFindActualEObject, line 1588)
>> -GenericDiffEngine, lines 1120,1130 for the instanceof check which
>> prevents the add/remove.
>>
>> I've attached a few files which show the issue (and a full zipped
>> Eclipse project if it gets through). The code to run the compare it
>> is set up in Application.java and outputs to the console.
>>
>> Please let me know if there's something I'm missing, otherwise, I can
>> go ahead and file a bug report about this.
>>
>> Thanks!
>>
>> Matt
>>
>>
>> Matt Seashore wrote:
>>> I have an model in which one of the objects contains a list of
>>> 'java.lang.String' elements. I would like to run a match/diff and
>>> get an 'AddAttribute' or something similar when a new string is added
>>> to the list.
>>>
>>> However, when I add a new string to one side of the model and run the
>>> GenericMatchEngine (2 way) on it, I don't get an
>>> 'unMatchedElement/Attribute' for the newly added String, so nothing
>>> shows up in the Diff.
>>>
>>> Is there a way to run a comparison like this with a list of Strings
>>> (or maybe this is this a known issue with EMF Compare)?
>>>
>>> I can create a 'snippet' to recreate the problem or provide more
>>> detailed information if that would be helpful. I'm running with EMF
>>> Compare 0.80 (june 18th).
>>>
>>> Thanks again for all the hard work!
>>>
>>> Matt
>>>
>
|
|
|
Re: [EMF Compare] GenericMatchEngine - Lists of java.lang.String aren't being matched [message #620126 is a reply to message #127181] |
Fri, 18 July 2008 22:30 |
Matt Seashore Messages: 58 Registered: July 2009 |
Member |
|
|
This is a multi-part message in MIME format.
--------------080304030905020703050703
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
As I look that this more, it seems that EMF Compare assumes that any
lists it's comparing contain only EObjects and not any other kind of
Object. Any list which doesn't contain EObjects will either be ignored
by EMF Compare or (worst case) have an exception thrown.
I think this is a bug (see below and attached files for more
info...maybe I'm just missing something here?). Anyone agree/disagree?
The heart of the problem appears that AttributeChangeRightTarget and
AttributeChangeLeftTarget's 'target' field is an EObject. The target is
the object in the list that changed. So, when you're Diffing a list of
EObjects, everything works, but when you have a list of "Object", it
either throws an exception on setting the 'target' (class cast
exception) or doesn't register as an 'Add/RemoveAttribute' at all
(instanceof check)!
For where these things occur (not an exhaustive list):
-GenericDiffEngine (version 1.17), lines 838,840,842 for the class cast
exception (finally happens in internalFindActualEObject, line 1588)
-GenericDiffEngine, lines 1120,1130 for the instanceof check which
prevents the add/remove.
I've attached a few files which show the issue (and a full zipped
Eclipse project if it gets through). The code to run the compare it is
set up in Application.java and outputs to the console.
Please let me know if there's something I'm missing, otherwise, I can go
ahead and file a bug report about this.
Thanks!
Matt
Matt Seashore wrote:
> I have an model in which one of the objects contains a list of
> 'java.lang.String' elements. I would like to run a match/diff and get
> an 'AddAttribute' or something similar when a new string is added to the
> list.
>
> However, when I add a new string to one side of the model and run the
> GenericMatchEngine (2 way) on it, I don't get an
> 'unMatchedElement/Attribute' for the newly added String, so nothing
> shows up in the Diff.
>
> Is there a way to run a comparison like this with a list of Strings (or
> maybe this is this a known issue with EMF Compare)?
>
> I can create a 'snippet' to recreate the problem or provide more
> detailed information if that would be helpful. I'm running with EMF
> Compare 0.80 (june 18th).
>
> Thanks again for all the hard work!
>
> Matt
>
--------------080304030905020703050703
Content-Type: text/xml;
name="model.ecore"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="model.ecore"
<?xml version="1.0" encoding="UTF-8"?>
<ecore:EPackage xmi:version="2.0"
xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="PhotoDatabase"
nsURI="Example" nsPrefix="PhotoDatabase">
<eClassifiers xsi:type="ecore:EClass" name="Photo">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
defaultValueLiteral=""/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="tags" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="id" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
iD="true"/>
</eClassifiers>
</ecore:EPackage>
--------------080304030905020703050703
Content-Type: text/plain;
name="Application.java"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="Application.java"
package emfcomparedatalist;
import java.io.IOException;
import java.util.HashMap;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.compare.diff.engine.GenericDiffEngine;
import org.eclipse.emf.compare.diff.metamodel.DiffModel;
import org.eclipse.emf.compare.match.engine.GenericMatchEngine;
import org.eclipse.emf.compare.match.metamodel.MatchModel;
import org.eclipse.emf.compare.util.ModelUtils;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl;
import org.eclipse.equinox.app.IApplication;
import org.eclipse.equinox.app.IApplicationContext;
import PhotoDatabase.ExampleFactory;
import PhotoDatabase.Photo;
/**
* This class controls all aspects of the application's execution
*/
public class Application implements IApplication {
/* (non-Javadoc)
* @see org.eclipse.equinox.app.IApplication#start(org.eclipse.equin ox.app.IApplicationContext)
*/
public Object start(IApplicationContext context) throws Exception {
Photo beforePhoto = ExampleFactory.eINSTANCE.createPhoto();
Photo afterPhoto = ExampleFactory.eINSTANCE.createPhoto();
Photo ancestorPhoto = ExampleFactory.eINSTANCE.createPhoto();
beforePhoto.setId("123");
afterPhoto.setId("123");
ancestorPhoto.setId("123");
beforePhoto.setName("test");
afterPhoto.setName("test");
ancestorPhoto.setName("");
beforePhoto.getTags().add("camping");
afterPhoto.getTags().add("camping");
afterPhoto.getTags().add("fishing");
Resource resourceBefore = new XMIResourceImpl(URI.createURI("http://ex/before"));
Resource resourceAfter = new XMIResourceImpl(URI.createURI("http://ex/after"));
Resource resourceAncestor = new XMIResourceImpl(URI.createURI("http://ex/ancestor"));
resourceBefore.getContents().add(beforePhoto);
resourceAfter.getContents().add(afterPhoto);
resourceAncestor.getContents().add(ancestorPhoto);
HashMap<String, Object> options = new HashMap<String, Object>();
GenericMatchEngine genericMatch = new GenericMatchEngine();
GenericDiffEngine diffEngine = new GenericDiffEngine();
try
{
MatchModel match2way = genericMatch.resourceMatch(resourceBefore, resourceAfter,
options);
System.out.print("\n2 way match: \n"+ModelUtils.serialize(match2way));
DiffModel diff2way = diffEngine.doDiff(match2way, false);
System.out.print("\n2 way diff: (Note no differences shown)\n"+ModelUtils.serialize(diff2way));
MatchModel match3way = genericMatch.resourceMatch(resourceBefore, resourceAfter,resourceAncestor,
options);
System.out.print("\n3 way match: \n"+ModelUtils.serialize(match3way));
DiffModel diff3way = diffEngine.doDiff(match3way, true);
System.out.print("Never get here! \n"+ModelUtils.serialize(diff3way));
}
catch(Exception ex)
{
ex.printStackTrace();
}
return IApplication.EXIT_OK;
}
/* (non-Javadoc)
* @see org.eclipse.equinox.app.IApplication#stop()
*/
public void stop() {
// nothing to do
}
}
--------------080304030905020703050703
Content-Type: application/x-zip-compressed;
name="emfCompareDataList - Eclipse Project.zip"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="emfCompareDataList - Eclipse Project.zip"
UEsDBAoAAAAAAMZS8jgAAAAAAAAAAAAAAAATAAAAZW1mQ29tcGFyZURhdGFM aXN0L1BLAwQU
AAAACADGUvI4TBlBus0AAABxAQAAHQAAAGVtZkNvbXBhcmVEYXRhTGlzdC8u Y2xhc3NwYXRo
lZBBawIxEIXP9VcsuTtbL6WHXaWULVSoLbrttcRkWKdNJ+kkkfrvq6gogoK3 meGb9x6vGv39
uGKJEslzrQZwqwpk4y1xV6v39ql/r0bDXmWcjjHotBj2bg4LcpJV8U1saxXF qGJz3I7lWdB4
3oNeOkDjKESEL5vA6cxmsbaG8bT5fHydtA/Pk2ZannLECYW1A4vz3EGm3ScK zJJmq8V+vLSr
gOVYL/Ws6Q/g7vpEwSIYLwiCv5kE7ZvLHXG8oORzCjntxebEG7Yqj9r7B1BL AwQUAAAACAA3
UvI4SP5uYO4AAACnAgAAGwAAAGVtZkNvbXBhcmVEYXRhTGlzdC8ucHJvamVj dL2Sz04DIRDG
z5r4Ds3eBb15oNvENp7UmFQfYITpSrP8ycA2Pr6AaLdp0/TQ9MR838zHjwBi 9m36yQYpaGen
zT27ayZopVPadtPm4/3p9qGZtTfXwpNbo4wLDJK0j2k6uVfCgsEWzWrujAfC BUR41iEKnhtl
Qjpj0MZW8Fpl92+7UATfUZ+D7tXSo8yqynmKglXFqVBHHUPZax+QrVVk0lEq YAMlgPR7hJoA
6obMDlXzsZH1mHI61ytkL2D1CkN8vCx2Kb/QwFmg2dleeebFgbBMV7GPf+uH TtvX0kz0so4C
R57H7mVS/U8U/OBH+wFQSwMECgAAAAAAN1LyOAAAAAAAAAAAAAAAAB0AAABl bWZDb21wYXJl
RGF0YUxpc3QvLnNldHRpbmdzL1BLAwQUAAAACAA3UvI4W6TEWpYAAABKAQAA NwAAAGVtZkNv
bXBhcmVEYXRhTGlzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUu cHJlZnOVjr0K
wjAAhPdC3yHgHhopWgrdRFAQHHyB2F5LJH9cUp/fLp1tl+OG7+PucKUR99kK 1QhVterc1rV4
XF7iWFVNWaC3JibISIwgfI8kv2AywXeqLAInuSKfIcs+EEu4aCy4lAETvMya E/LT6jwGuk7J
03/TRWv0MreFjgxvCyd1SmC+DfDZjAbsQAZuteFnt9dNYeb68QdQSwMECgAA AAAA1HHyOAAA
AAAAAAAAAAAAABcAAABlbWZDb21wYXJlRGF0YUxpc3QvYmluL1BLAwQKAAAA AADUcfI4AAAA
AAAAAAAAAAAAKgAAAGVtZkNvbXBhcmVEYXRhTGlzdC9iaW4vZW1mY29tcGFy ZWRhdGFsaXN0
L1BLAwQUAAAACADUcfI4mqgThfIBAABnAwAAOQAAAGVtZkNvbXBhcmVEYXRh TGlzdC9iaW4v
ZW1mY29tcGFyZWRhdGFsaXN0L0FjdGl2YXRvci5jbGFzc4WSXU8TQRSG3yn9 oOtSFCiKYAtI
sdTETfSyxkRbMSQbQoL21gzb6Tq63WlmZ5Gf5ccFiRf+AH+U8cy0KYkXpRcz cz76vO852T9/
f/0G8ByHFRQYdsR4FKnxhGsx5IYnMjPB68jIS26UrqDI0FQ6DkSUyEkmgkhp Eeg8NXIsgrMk
j2XKUD0LP7w7Of140mdYCz/zSx4kPI2Dc6NlGncZVnoqzQxPzYAnuVhGlfpI tzfV7ZNuSLoM
5cmM2AgX2epS50uZSvOKYal9NGAo9tRQeFjCXR8+VhhWQ5mK03x8IfR7fpEI a0xFPBlwLW08
SxbNJ5kxlMicJv1WO7TDqiyWwUjzsfiq9JfgTZ4OE0EjGHFlulbOe3sViYmR NFUFDxjWb2ae
V6ybhz42UK+C1uzDwx2GSuQwpLV/uxT5y4yaWNKejybqpBwL0xcjnieE2G0f 3bYn71zlOhLH
0k5bm1eeWcPYI2NL9C0UsIUSyhRVXLQMz7qld5FytE86axS9oJvRXepcY/W7 a71Hp4cCnRvU
XMcavfxpE9YdgtkVUMfmDHffoY4pU7D/7Ty9xlbnJ7ZveDVnaocIj1BFwzE3 p91Tpn1RreHs
NBfRGYGtwu7/9BZ1HxL9ySI61ffxeDb8Ad32V/yB7W9zWtllA0cpuGkP3Kv1 D1BLAwQUAAAA
CADUcfI419vYOhwHAADuDwAAOwAAAGVtZkNvbXBhcmVEYXRhTGlzdC9iaW4v ZW1mY29tcGFy
ZWRhdGFsaXN0L0FwcGxpY2F0aW9uLmNsYXNztVdbdBPXFd3Xlj16jG1iQqha HjIhIAH2FDuU
IgGNAZOoyIL6QQylTcfSlTxE0iijMdhp2qalpG3a0lfa9P1u0ncIHwaXtbL6 nbXym9/85iMr
Kz/5yUeSfUcaI2xjDCtZy545595zzz2Pfc4cvfr+/14B0I8rGloENslyIWeX q6Yj86Zrlqya
awxWqyUrZ7qWXdEQEFhz1jxnGiWzUjSOT56VOVdDu8BW2ykaMleyqjVpyCem rYo9Y5jVqpFu
Oi/Qvt+qWO5BgdZ44qRA4LCdl2G0IqJDQ1CgK2NVZHa6PCmdMXOyJAW6M3bO LJ00HUvxjcWA
O2XVBGKZle1NCbTVXNNxBQbjmdVYeNiuuHLGTSUyi72krvDQTE5WlVhNw70C a2/ILOyEcB8+
oWG9wIYTU7ZrH6FZk2ZNUsIsV0vyqJlzbWdWRxSfFAjJdHZ0bDB7eIixz6x0 IBWh4g06NmKT
QCTnSNOVnrzA+nhi0VGPSwURY5x39w9EsAVbNdxPi5eR0/EAtqlASTedF1gX b3J91HWsSjGV
OBlEXEVd1lylbIeOneqMxjNZsyyD6BWA2jF0fBq7uVOU7phZZI4eiCdujny5 YDBlZbtiTLtW
yRjKMGm0dYCHcvSY90WwB3s1fEag57YndXwW++immfdsX5q2xOkgUtRdsGpT 1K3hgEDfIrWk
bUcaM2XLsBhzY2I4PSJr9rSTk2nyQXyOsJ9y3WrSMOSMMSkLFA9jEIc1HBLY vJKV4yNpHUcw
xGTXs8YFgT3LRTlzGz2pMPbjYVUpj7Dg4rcVV2n7PGvqhuVmwZVOEBmWVdNi Jce82k4EWZzQ
cFxg+/LxcRoxMfzg6PiCSnaEyfYKp+KyMEYF7lG+1e14xKxNDZvVMEYQ0cCS 37tYd6N+jbLp
5qYMWSmyAxgPy4p0rNywWhvylsIYVxpOMXa30pC3CoVFCo5wyT8/gYhSckbH l/BlgQ7fHe8S
gefjmVW6nVq94I1AMAjM8MrOl6VrltkRKa34YUWmQvgKJjWYN3Xe0dmaK8s6 csgT/Pa0S/DX
L7Ns4wTh5I66RFs5paHADrEYa4emrVJeIYF+d4X7Y+fN2ZhnQjIWDkPirALZ tjBKYM8v+4BY
anfdNc/OcVI1HTaqRHqNsWc3fpKteuBWYR3yC3RpJSgTHB010K12tmhZoZe9 y5bMLTzzVJzT
cR4zAkHXrm8K3Btf9ron8ZSGr6qOvjSEOr7m9ceqWlIo+oaOp/FNWpa3FbwE rPjd5PV0IrMi
kG8cUrfUzwRxQSDRSJiSSsbiWduVsYrtsdKRqphjtSn7fCURVnC/qOD+jMD/ Pw54r1rwI6iD
IL6rwDpwE1iDeJbtJivPSSfGLhSbYgR6FIbX4gc6fuiNFNV6Ls3c42OOmZMh tOFHOn6Mn/Cr
MDSRHnvs+DFmvgkWabayIjGkvkj1eYDou6PxgT3R+0j4n+h1y32g1UThNeSG UEejEft8px/H
Q54qJn7V8W7qboPqBvaOBb5xCZ2z67OMcn5Jw6YKvdjUhAX2Ze6ycys/8wt9 mF+AzF01cKoJ
eTf1EwACD94NhtgL1B11Df13Xn++CQNU0NBVJ1vkjMryMgMhz9x38wg7W/XH 2H1L475/aXta
OtMcVAn2EM0Tni4N/xXYeQcQ5TRHFFSZmlEPFkctZdCaJsE+dS16wO8L/9sA 9VZTOp8hcgbf
gu+2HVcRfplEC3Q+273F9ejgU68LoBNdfFM97qFUN+kAubVKTWuc+13cvHQF 6+bxKYFhn8j6
RDKwq3vzPHpa0Nt4RwMNYlf39nkkuOG9vY1dHsFnH6ec/nk82IJHe5fjknXu Ovaf6j54DQ9d
xdFkm8elG1y7xx1rcFq0bR7Dgqq9c9F2j+ttcJrieL+vdOTUVYwlg9cxTuLR ZOg6JkicToaj
oWhbtD0anMMXk5EreOw65Knu4lVY0cg1PD6HJ+YwPYfZaDgaaZ3D15O6L/Mt JaM3yzRUaUrZ
t5MdvuB3lGDHImUdAaWs05f5npLpbJZ5EeFkJBqZw/ev4NJl5udN8bS4wCwF vLz+FFv53Mic
bWIGN2MDeriyBbtwP/bwJ8QBbMMQtnOGTOAMduAsfyLMoBfPoA/PESx/xm5c 5g/NVzCA13ji
dezFGxze3+RM+zZPv8P3uzgouvCQiGJQDOCISHFsPsD3IRwVZzj0FpCmRcfE RYb6WZxQGKPe
NQo9dYwpipb+TEGUUs/h5wpv4in8glQrNggHz5MK8IMYxC/xK7RR5j38mlQ7 Nb2F35DSaNs1
/Ba/Q5AWvoTf4w8I0c4X8Ef8CWFaeYmyf0FEROnlX/E36LRwEC9wrYM2bsSL XOsUF6n97/gH
fxf9s14LDb3/ot5/c6UPLR+IC2qoFRr+o2GL/5f1/0Y0jGuYUPtrVV29tFB8 O5Wr6n9x4U00
FZ5YKLzLntTLHwJQSwMECgAAAAAA1HHyOAAAAAAAAAAAAAAAACUAAABlbWZD b21wYXJlRGF0
YUxpc3QvYmluL1Bob3RvRGF0YWJhc2UvUEsDBBQAAAAIANRx8jidSSCyRQEA ACYCAAA5AAAA
ZW1mQ29tcGFyZURhdGFMaXN0L2Jpbi9QaG90b0RhdGFiYXNlL0V4YW1wbGVG YWN0b3J5LmNs
YXNzfVHfSwJBEP7WzNPT8ldlmUQvgRJ00GsRhCkIYoLi+941XWenK9ca9WdF L9FDf0B/VDR7
CGGRCzs7M7vf983OfH69fwA4Rc1CQqDWv1NaXUktXflATutJTmYhtaWnVfRs ISlQGMtH6YRy
6jvX7pg8bSElcKAi3yEvDGaMoskt+ypi/AIpkKFObzC87DVb/Li7SuVMIH3O TNNAXwis1Rsj
gWRT3ZCNDeQtbAocLeMDRv8i6bCfQwFFxhomgcN6Y7VsBgLlHCykBfLdYEq9 +cSlaCjdkARK
XeXJcCSjwMSLZNaLSGqKaQUqfxTiiP9T9Ekv1PrSu5c+/VfPzwuG2QM1jzxq B0arvFzuiRkD
N547xHud954pnUe5xjYDmzNZjo75NMt6Q+4VpRd2E9hiayPBtooUytiOs2a6 O6jE5y7TgaHV
+Gb/G1BLAwQUAAAACADUcfI4yXTXptABAAAaAwAAQgAAAGVtZkNvbXBhcmVE YXRhTGlzdC9i
aW4vUGhvdG9EYXRhYmFzZS9FeGFtcGxlUGFja2FnZSRMaXRlcmFscy5jbGFz c4VSTW/TQBB9
0+bLyZaWFgqBUtqSQgJtg7gWIUVpgEjBiRSrNxSt3cW4OHZlO4gfxQUQB5Dg xgWJv4SYXVJE
D00ted6b1Zu3O6P5+fvrdwCP8LCIOcL24HWcxQcyk65MVbPzTo5PQjWQ3hvp q1ovyFQiw7SI
HGHpWL6VzVBGfrPvHisvI+QHz/tOn7DeixO/qbwwOGETNX7FPE7Yrh3KNN0n VIxwNLJbLzqE
rfPkrSxLAneSqf9KnNazIcGaZt0DQukxV0ZB9oQwX28cEnLt+EhZWMTlIpYI a7N6EljGCvup
rj10Wna7o18/q2C/wsZXBVZxja/2VWbEhI16Y3bXFghVgTwK2uGmwBpuERZO HUa2HCtCrd64
eBra6rZAESVttSmwddbKkX6qNTUB66/mrsA9ran803SPtKIhUEaJsNgLImVP xq5KHOmG/JDl
XuzJ8FAmgc6nh+VhPEk89TTQycrZwezpfSCIbhSpxLSsUp7Q6c4UiK+b51XL oaqHwKyqOzBo
TbFskDhWIBgXOHvJqL/dj7j0BVcIn3Dd0Buarhu6oekdQ7c1rX/ggjnc57iK PMfPbPiN+Q9s
4hd28B4PtML8OybuYo+xzJcRz6tZsP4AUEsDBBQAAAAIANRx8jijLrb0MwIA ADAEAAA5AAAA
ZW1mQ29tcGFyZURhdGFMaXN0L2Jpbi9QaG90b0RhdGFiYXNlL0V4YW1wbGVQ YWNrYWdlLmNs
YXNzfVNbc9JAFP62tAQotRe8VStWpQpeitbbQx1nGAqaGQwMBMY3ZknXmBqS TrI4+rMcXxwf
/AH+KMezIS3QDg2TPft9e76z5xL+/vv9B8AeXmtYYNhqffalf8AlH/BQlGvf +PDYFS1ufeG2
0LDIsHbEv/Kyyz273BwcCUtqSDLk/cAuC8t1jkklhp9o7wekj5UMS8KofKgx bDQm+o4MHM/e
Z1ip+l4ouSd73B2JFJaJmk6E9JowOv1uW0/hEoFxXkRnFN1q1+r6R4a00I2O WTGqdE++cVEl
dOdS633TbDIwPQF6GJYjot9XeU6QWXnXSahzCh9T+gERqlm5MVGvVcxuu9av NruGqY4SDKk3
1AvPkW8ZEsVSj2Gx6h+KDLZxV8Mdhp3Z7BzK7UyKOu2zuIcCaVUkhu1i6eKi 0lTF/SzWsM6w
2nA8YYyGAxGYfOAK1Xnf4m6PB47CMZmyhYxijsPPmWLV5WGo5nTi3Tf4kNSF +ZKKpOEORlLM
yExuh9TbU6wfMqwTigupc0v6wfd5pU48KGim448CS9QdVUZuthO76htjyOqe J4IoeRFqeHmu
7bOqQsORIuAuZZg62dKnTROkdwlpbEJDivZpNX5kCGen8Arh1dlzNQqA7AZy p/xlwlfO4KtT
+Brh61N4k343pvBNJOmWLdwiJk/MI7Lq0X7h9k/s/IicHtCawQKt+0iSczFi 1f+3hIfKkuxx
ZJ/Edje2ZTyNfJ9F6x6eq0h0xQt6XyXT/wFQSwMECgAAAAAA1HHyOAAAAAAA AAAAAAAAACoA
AABlbWZDb21wYXJlRGF0YUxpc3QvYmluL1Bob3RvRGF0YWJhc2UvaW1wbC9Q SwMEFAAAAAgA
1HHyODb07d5FBAAAQAkAAEIAAABlbWZDb21wYXJlRGF0YUxpc3QvYmluL1Bo b3RvRGF0YWJh
c2UvaW1wbC9FeGFtcGxlRmFjdG9yeUltcGwuY2xhc3ONVVtT20YU/taAZYyS NCZcklDqElJs
08RtQnpzAuViWheHUHDc0lsizGJEZMkjy5nksQ/9M32iPMCkzLR56kN/VKff ygITgx00o9We
3XO+cz/6978//wJwB46GkMDNlW3HcxYMz9gwajJtVqpWOvvC4EcuGiXPcV/m uNfQLTDhuOW0
LFlmlYyyssW94x6JvMEcFhh5A7cFUqDbtE1PIJ5I5jsxZsg572zKXvThgga9 rRHZFaP0zCjL
8VVZNmue+1LHRVwSiOSW1wqzy/NZgWT+nKKZCC4LaIElfVTdr+MKBgT6ytLL HvswlcjvGM+N
tGXY5fSa55p2OdNWyZFDvRjCVQ3DAomzOatWvWza6awiVvy9cuWaQCp/XoFM lEpGdLyLUYEu
yykLDJy09dHGjix5mWQxCqZAx/sYEwjfVymZpkAiWdQwLtDflMi+KMmqZzq2 wKW8acvlemVD
ugVjw5ICsbxTMqyi4ZqKDg4ve9uyNemjb8t1r2zqGcifoZ48F9Y85uuhUfUV RdGFOIvE2zZr
LI78uaqZKOGSKw2Pds4k2mVs3jJqtfYJDYLYx06a0nCXFd8JR8c9fMLgsYB8 2twypZtb8KOd
U2n4TMfn+IIl1jDM90Ng6FR/+FRGw32BsWaAcpYly4Y165brFWl7x/HSME2Q 1iqdq5vWpnQj
+JL6CtsyXlImxSeieIA5VQ7zDP9ZxV1U3mZ1LOIrNgh9WTYqjOGVRPI0swLL 6fgGS4y2Ua1K
e1Pg1pkt08Y+9uFDgesTcbMWtx0vbsSfG5a5GS8dB1DpeKRjRZkT8ZyGdBQZ zFGn9APNquuc
YA2Pmbsz6sY/UuUSRUHVWE9VHSi8TswZlj4DExRdMFraDbomR0bVwE86fsYv wZg5Fh1LvG1y
0Yenp3xotSBK0CaxIKuuLLHQmJSrq3XbMyuyaNZMttSszWAbqnoYvMETyWnK cIo9wZaOMrZV
0zZn7GhnJ6l4zam7JbloqhkxdLo1byt1AnrOtqXrJ0jWNFSI3DkEzP/R+Gb9 sq349vA3F0Yv
NERI9ZL6FSEIfsf3EI298wqxEF6jZyn1Dy6kdpf2MJjax/VDiPUDvLfrc/Zz 8N8g2k3uryHM
dQwXeRLDOG8mMIAERpDCB7wZRIh3YZ4mSA1QbxIp7ib58l9b0HBDIyinbWDO XX6Vkp7UAT78
g5uQryeKENcpdOOej6s3mHALt/kVSOOjAOA3niremclX+Fjgd245+ZtPjP58 unuIzPohHqzH
Zg4wS05OnX18Hctz2cfyAb79m6y+izS/i+s0hjHDv8dsw62GioZ6f7eKNQjl Fk0MDXdzz9EV
mDRHbsUfPUSBYSzmJ3dbHFtiOvInkKMBcoTUd/jej8k6fgjw7iha3dKVH1/j SRMt7J8/PhGi
SAOJcgblu7Dh21sKeDfVjUq+4lW270G2oj310UL+a/rrDp75NrIrYcEO9/4P UEsDBBQAAAAI
ANRx8jjyXnb02QUAAOkNAABCAAAAZW1mQ29tcGFyZURhdGFMaXN0L2Jpbi9Q aG90b0RhdGFi
YXNlL2ltcGwvRXhhbXBsZVBhY2thZ2VJbXBsLmNsYXNzlVf7cxNVFP5ukzTb dltKyquKvCzS
BCVSUcEUBEurkVBqn1JF2KbbdCFNymaLgOJbfIuKigV1RmcU/K2glCnMYP1R dEb/Gn90/O5m
82ibR+2we+8995zvnsd37oY7/968DaAF33hRIbCxazRpJfdqljakpfSgMTYe D7af1DjoXVr0
mBbTw5x74RbYlDRjQT0aN8apqI+NcJ40MyZzlCsFVs/BnQcpUDMut9vb4loq JbAmUhg6vR8S
UIxUOGFY+rCAGBSoMlJtpq7Z69r0lqHFjdNyrbQShoJdAq5mf7+Auy05rFdB YKmKKlQLLIkY
Cb1zYmxIN3u1oTi98UWSUS3er5mGXDvCylYbRsEKAW/af8Kswl1eNBaLr0OL WknzlIq7sZpu
6uHOnt49nW3tMsRSBqFquLBGxTKsFXi4OXJUO6EF41oiFuyxTCMRCxVLUMbe 3y8jXK/CC0XO
7lVRg2o526hClVG7rVEjxSJGFlXwEA1k+ALrmv2RUrUMVWEzHvDi/mIEyXKj qVuPGSlLpmcL
gqxULjv+yCJNQzU8batK+j5EEsV0qz1LqW0F0lYOl3lnvmXe6+TsURXbUSew PGqzy1FqSyYs
PWGlpMZjKkJSo9HIcK6Q1k4Vu6RW5Yip66fp21JrVJ/fArU9Fqf7tXGbb148 QZKU9pYpY8R2
Mey6lOua2oz24U5tjNZNxU32WEzY0ISlM8FP4WkvwqR4KXgV+xARWCFLwGRP RK0JU4t36BpH
PUXaFTgrmhwbSyaCE5ZBykVYTx7WiS4vDpC6ZZVVPINuNjVPZIWaw/68ch8Y OqpHrZAXvUxM
uRDzE9OrxehsTXYdHmaxuJrbnsW6IKdhE2lQxXN4XqBBAjgb4UTK0hJRHrqh ePbzQV5QcRhH
BNQ0BzNX5PrmcOl628ZDKqJgCPVp42zM9vGlzcP+fgUjzM2cMCXoqAoDR3kJ pnQrTaTlhVqt
X+rGVYxJ3Rqpm+oy9RHjpJQnVYxLuWLL+7rDXphM1NyU2isFLK/HnkrDEype xEmBatlwmWQM
l4klz7u0YKG7g4ODi8jnaRXt6JDX6MsqzuAVlkXq5Jq4qRhGTku21Gt4w4vX WYTy2irexFuM
V3Io7Stv8+LUkcnrPTWuhxSc5Z2dYH0UvCsA6f77Kj7AhwJ1Mnn5ZLjSXP4i KJkdY8TQzYVp
LSAJhxdUY9D5W8RtJKP4WEUfOhR8Ij9i7Fcp+0xFv5R9LlBhDEvJlyou4CvG mqZ+t55KTpiy
73b+j++C6VgFM+YhVqLHnnUY8kfByoWfyi0SncQIJxK6aQco7z8l88XCejrn 4uOBGxXy+wxZ
nCo+4LrGGVV7rOZuLeqovYQrP0f553H9jPqrtprPVqrgewfhGtEgpfazLGvW I4/j2BjwLb+G
lTdwT0Bcx7qA6zo2yFdTDmoFPHxvpTdraX6BcFP8hdNiw6ppENyHTRyr0Ay/ c8C3tJZ7nddQ
P4ml18CDZvBgBWbhmcqtfoOYRH1ufRnVtyAO3sC2WYh9bsYUmMYjfHbwaQ1M EdFle7UGXr67
GVIfWjGA3RjEXhzih+kIIhjKetdK7cdt73bzUeBatrrDiz3caaN+2tcgR+mr J/AL1k1lA6+0
hcfyAvU4gQrZ8Y7xTifQBmk8gydZyBnsl3H2zIey8qAaslB9JaDcxaDOFITq LwHlKQZ1tiDU
AJ51oFqc7CiswMFZrJpvfy7PXsnab89S7YxDtRa6smES7qsBtyRZwDWNQ5Jy 0kPONXvizkw8
nFydV+3viP89uf8DOfkj2XiZfLtCZv6U50GL48Fu21YoFIayrvyDelvpEk9o yrjSFPDp04jZ
72Pk4TQStge+476Uy0WHJgYCDP0UZS/N4FX+T+Bt3zsut+84N/lParxna3yU 0zgnXBULFT7N
KZwXGQS3o2Cf/MVALuYtqOH7JmO+xZhvM8Zf2WmzjPt3MvYOf+n8ARN/4jz+ wkX8nZeDS/Nz
UIFJu2gXuZW+9TezBb6urPoPUEsDBBQAAAAIANRx8jhPCgK2dQcAAE8PAAA5 AAAAZW1mQ29t
cGFyZURhdGFMaXN0L2Jpbi9QaG90b0RhdGFiYXNlL2ltcGwvUGhvdG9JbXBs LmNsYXNzjVdr
cBtXFf7WWlmysnmpjpvULnZpEiRZWNC0tFQmqWsrjaj8oHacxjzKWl47m8gr R1qlCdA2KQ+3
pbwpJS3Qlsd0BsJgt8SekJlOGaBlyl8GBgYGfjHDMEynv/v8zt21Ksuy02R0 H+fe893vPO65
61fe+s0LAG7Az0Jo0tAxcqzoFgdM15w0y1bKnp0rpJQoy1EIuoa9xdJMysoX 7DmuW7PTHBdL
/s7M8ORxK+96e5s1XLUaTc00bB7qG8zckxnIHOw7nBvTEM0dN0+ZqYLpzKRG 3ZLtzKS5qb/o
lF3TccfNQsUKY5MGaNAdc9Zi55ozZQ3X5+q55Iuzs0UnVXFtksnZZZdILaP2 jGO6lRIVb76y
Ru9aNvuJsik7UEO5yZ7SEO4ljmO7+zUEYvFx0uovTlktpHm1ge0Ia9iasx1r qDI7aZXGzMmC
JbYW82Zh3CzZMveFzb0KJoIAOgxcg1bBeJ8BA2EZdRmIEo1WH7PLXMhtFCNS NaxR13TtfH/B
LJepHovnGscso3akW7AXsRA+oGHPauTMaZOI1oiZP2HOWLtztmuVzELZQBwJ DcGRQ8Njw+Sz
ITr5hGYsd0jFrTUWbxTrUHllw47Y2vX4eIRO+JCBD+MG7rCGiq49bedpYdG5 yzpZsUvWlIrA
RAg3akhulJ+1uuKtCPbhI+LymzWMxNYxJOvQbscs+NmdzmZrSPqyNRKf9kcN 3Aox0aN9RkMq
tl4OOmpHqpYjUajrWPd67gkVC1PeaPOoy6gMmnMqhUK4TcO2es95nh9TV2VP LH7l1E+T73vZ
1/CKSKZmDGzGlhDuoJkNfemDSIaNnZmzDjv2yYqlMCM4iKxE4uMaemuzwMui 9xoa8VeQVmen
2Jf9nv5TPb0nvW7dYbm8pLHsxER8beAkbHcZ6EZSRmMG+nC7jMYN3CmyAO42 MIwRVpZpS9WV
7IAGLUt3l6xysXDK4myC5UEYipVy4qic2BbLrpcnpoEPomcT8mAwyfG6KwbB wDRaaVS+YJml
EI7xdgm2t6O/WCgQnBkkkMcNnECBdcacmuorcLArlmu0Nx2fEC6OgRx6xNA5 A5/BPTSFHpQ6
LAVsrQUEZiTLYqEeYwRE85SBMlxZyZZH/RVBP4DPGfg8viArJyssJurOr3XK hPC+38ADcudD
djkzO+eeEeBzBu7FaVJyi17qCeMvGfiybAzztJFS8bTaOW/gQSRDeJiOr8/X 2yvT01Ypgofw
Vcm5njC+Ru2umDwvt3aJ/BsGvolvic/m5iyHEUk2Kk25xsDpML5DvGSXvFMe 3mOC9z3CrLV2
I5jvk0Gyy57yQJ4QkCc1tMf619WRffPUYi5WCnT8zvU2aoiMFiulvHXQlkdo S/UJ6REFPiNZ
x7FK6vpZ5RB+wo+DjZ4H2rvyQOA6xiTAX5D/OxBCmOMWfmU0IQJdnjWOdSkV lG9V8m3ct92X
R1W/me1VaOWOHZzF2cu/oPY82haVyk62ETSxHaZSDLtEqgCuqaodokQUo4ll tCeikYu4NvEc
2i6is4rB43S2Jts08Y6SxqTCMjxNGvN+hXo9dvuoPew1kT2HPQtVnGYlO1Gj q/u6mhQTXzfl
6wYTv8a19cpujXJwRVkKg698jj4JsN8jyoOJbjFnCanzaEtcxr6jCT2QlJVl 3LSEW8TCgAJv
Q5DtfWzvp4UP0MKztOWcOqzLA/QOU6NeFa4gVz7GURP2U0rJG9gd4vXVpBxS 6oWtX9Ea9+m3
8/CBlxElmYNHowcS+jIOXcSASBeqZLaoAx9mVjxCYo/WWNzuk9iv9mptFN7Z 0G+d9X57rKHf
cg391qn81rnab8GkrDT224/YPkW/PU2/PUO//Xgdvw1W/TbUyG/yZPh0Hoeu cm5f+8+VbkIa
P3vbBVvwSPATC2xGpTm8kGjvYFyPLNSR+wXvzS9J4lf8hltkmj2vyCU8+Cq5 fUzrCR4uo0/i
UzxIRp/mKKBoNkPv0HWdO1jufZKXuSYmDvokM3Ukd/PXm0i+iANL+OyiEL2E SQ0yoHDmEuwm
HFn0N8wuJtqTyyj6vlUUI2xfIP0XCfVb+u93DNfvmX1/YN69zOP+yC+CVxjE P9X4e7Bq0qBn
khqdRAlNVUPCV9Pr8vr4hjzJNSGd9g25cbUhCi/J2rDKjEUpEx7vZVTepb1X 1bE/k/ZfqPhX
FoW/MUX/zjv6DwL/EzfhX/zg+7ei3OYdW6Wc9ihXiTa3hDjja+YT/Y9PdN4n eraOaB9/d0cj
vGByyV9CSH8WOwPPojUaEcESzpxHiHNdvyBX7iVsl+4S7tPwBIL6hcAF2uRp d3rau7h7B4Ui
qVUXo89eqEu1/9Lo//Hu/59mvMor9VqNkfNVI+ffNZJGbe3YepvWxB8/VbZx xJ/czAer1/oi
jxCAMXr+i+cRZp3+ysJlPHRUBst4JNcdfXQJXz/SLRaqQfTbK/OBJXyX88dX 5p1qsC2+hPNH
upfwg4W6ZHudFeJNzt9CJ95GjExSmoZbtCYc0AI4pOkY1oI1Ro35Ru1kUv6Q ZUBbqUwGl59S
gXkaz6hXiH8Wsy78tLnlHVBLAwQUAAAACADUcfI4XwV6PfQAAACLAQAAMAAA AGVtZkNvbXBh
cmVEYXRhTGlzdC9iaW4vUGhvdG9EYXRhYmFzZS9QaG90by5jbGFzc42QT0vD QBDF39bG2Pqv
Wj16FNqLC95E8WQFoagQ8b6N47olycruxg/nwQ/ghyqdJC2F9tLDMjv83rwZ 3v/s9w/ANfox
WgL91y8b7IMKaqI8ybqL0RboTdWPkpkqtHyZTCkNMXYFLqzTktLMfLOY8k/+ W0dy1EgEYk3h
WeUkcDYYjlcWSXCm0Lcs8EvB+WCTD98bizelvcAlW6zvS22e20KWwWRyNDY+ sGcnMbpQoXTs
erPNzN3m5nv2iXjz0wdX39RuYkuX0qPJiJs6mqtqkHMQ2OEXcZBRm0/GHqrM OujWdR8HTA+Z
tnDE/fGC9yrO5KQmp3NQSwMECgAAAAAA1HHyOAAAAAAAAAAAAAAAACoAAABl bWZDb21wYXJl
RGF0YUxpc3QvYmluL1Bob3RvRGF0YWJhc2UvdXRpbC9QSwMEFAAAAAgA1HHy OFgR9c05AgAA
bQUAAEcAAABlbWZDb21wYXJlRGF0YUxpc3QvYmluL1Bob3RvRGF0YWJhc2Uv dXRpbC9FeGFt
cGxlQWRhcHRlckZhY3RvcnkkMS5jbGFzc5VTXW8SQRQ9UygUXAX7gVo/WhV1 gbbb6osJhKRB
GhtXbYLp+7AMsM2yQ3YHtf9KE62JD/4Af5TxzrLpAwG77mZ375y558w9d2d+ //n5C8BzWFks
MVRPhlLJV1zxLg+FNVGuZ7U/89HYE4c9PlYiOOKOksF5+SCLNMP24vzOJ1c5 Q4aMGrpheZ+0
7aTidWI1XN9VTYZdMzmtcsqQbsmeyIHhmoFlZPJI4bqBLG4wpEydULBdX7yb jLoi+MC7nmBY
taXDvVMeuHocg2ldNsNO4tXLB1R2zqGkiMHQnK08GtUrtgwGlnA8d0yYGPUt R45G0rd8qdz+
uRWr1vMo4XYWtxjMpCUYuINN8uMEgqtpGXECQ8VMujA1X3bPhKMYNuY6oN72 RJ9PPNUikOG1
OatMsQyE1X4f6fyX5W0DD7WJ9amJWOLSxta/l6LaXlxdzRn/yC2P+wMrhvK0 X54YuI8HulHz
TC9imQbWsM6Q78hJ4IgjV++dzbl/Z08L0BbpuAOfq0lAiW/sq85PI2HrmuS8 0PYdT4auP3gr
1FD2GIxj3xdBy+NhKELsU70pOuysWNRHg6JlerJYITxH0Uss0Q3kq7Xv9PoB 4yuNllDQWDTD
iHGMIkUGxRq9iVWN6ybEKg366tyV6jfkL7Dx5VIjE3HsiF+a5kz5UXQX92ie 6Z8wX2lrVulk
odIj8nhISo9jpaexs0y1doHyrA7TOnqeOGuUO4fzbCEHaVSiqIpa9N3BboSW 6L2nexS5iq6/
UEsDBBQAAAAIANRx8jikKb4HKAMAADwHAABFAAAAZW1mQ29tcGFyZURhdGFM aXN0L2Jpbi9Q
aG90b0RhdGFiYXNlL3V0aWwvRXhhbXBsZUFkYXB0ZXJGYWN0b3J5LmNsYXNz jVVbTxNBFP6G
li4ti0XkotwEBN22wIqICkUUucTGWjElJPpgMl2Gsth2m+1W7U/xD/jkg+It aGLwycQfpZ69
tHKx0DadmT1nzne+8+2Z6a/fX78DuIYVCU0Mytq2YRnL3OIZXhJq2dJz6sor ni/mxOImL1rC
XOWaZZgVCX6GGcPMqkLL6UXaK/Jbqmbk80ZBLRiWvlVRdQpTD4clyMQg541N kVvj2nOeFQyD
yUNZqwk9f5yh1dmffqlb2jbDSLI+SXcPhQTTerbArbJJ+A9ODZhPnlhJtYj4 AiEH5vWCbi0w
+JTIBoN/ibiF4ENYRitkCWcZoo2qODoVQjvO2ZGdDBNKstHAeGQjCIZuGRJa 7NV5Gc0IBNGL
fgl9DP0nSSpjAAHSSCRS6fXF1NIKQzipF0SqnM8Ic51ncqRaR9LQeG6Dm7r9 7Bn91rZeogIb
J8rQlrYo7UNe9DDa9ZLnXDXM9UqRTF1Kcoe/4GqOF7Lqo8yO0Kx45KmEywwD R94MrQ2TCnJ3
tWIMiowIovRixFKOl4jdkBJJ1olydsRbMY5JCRMk00n7ZKi4St2XFdZKrVlH 6oP/a9iA4bAj
EY/VZQuimYJbVaEYHiuntF/KnnTqv0iDfRrCDdyScJO0OK31ZcxijqFl06ie r2mlXoHVN3O8
KAnzDGMNkSN1LG5mBanTcN0kpKuZU00NKKI0KghDpwvg1VCDCKWNsqmJVd3u zN7/tvCkXS1d
WolCQZhOY4gShunM+ejibIJz8Gjlt48iWYOONURWZl8INLaRJU9+RvNA9AvO RL+h/QktOj6h
axc9PxHcxYUP6HlPG3wYpLHXgYxQ0H0CStAlEUU3YujHBC6SR3bBMIRhmkdc yx9yM8n20O8S
Rr3UFaLTRHM0RrneoNn/NvYDY6/RF9vH2B6uMOwhxlB1+uhb5UE5m2mcpdLm qLB54nEbCu44
HLpdVJeDs5qi/xFms6EoX7Cf0cM0rns0ljwa4ehHdNmpP2NmH/F3tlxOroDD /NkB7HANO0x5
F8jPKPddD3Dcfraj2VGM/AGNmlwMWi82EFk5GunM9+yRClimOUS+djifv1BL AwQUAAAACADU
cfI4jcRff0QEAADmCQAAPQAAAGVtZkNvbXBhcmVEYXRhTGlzdC9iaW4vUGhv dG9EYXRhYmFz
ZS91dGlsL0V4YW1wbGVTd2l0Y2guY2xhc3OlVl1PG0cUPWM7bGyWQCBAgIRA mjS2+TBtoB/g
UhJjGjeLQ2KXtEmTZjELbGJ7LXvdNk/9Hf0DrdQnmkpU9KHKW6SqUn9PpX6d mTUGgzFqy8PM
3bl3zj3nzp3Bv/z1088A3sQTDT6BkZUtx3UWTddcMytWrOra+VjyS7NQyluZ L2w3t6UhIND1
1PzcjOXN4mbsztpTK+cK6AVn3cqvmLln5qYlMGw0AO1h1PxzAm1xu2i78wL+ cGRVIJDg9hD8
aNeh4XQQAh06TqEtiE6c1dAlcKEVoo5utAkErVQ6k72RTiQFOg27aKWrhTWr nDXX8iTVbTg5
M79qlm35XVsMuFt2ReCycZJyku5rBHhe2gO5duLueDY7N0+IjoxLxstmqbbz 9LrjBQhcDxtO
eTNm5fJ2iRhWYYO2U6ZUr8hzEeNw3QkYzNibRdOtlgl25UQEsmjHJYxqGBG4 2DJYx2W8xoOy
EnmzwgqNhCPHoauIuRAP7aqOQbwucDfcOtb4D0pD7paV3Ou3S8ch1MNv/k8K qlRjmNAwzuZr
BaVjEjHysxJO0TXZdWWB0XCkdQIF/obOm3edvbppuQrK3rCtcmpRXYuULOiM LOhbAtPhlPGv
ayZTvKPjXcwKnGGKZKZassqybys8qiYMc06h4BRr7WvYFQkRx7yG9wgg4T2X 9Oh4HwsCml1J
Fkruc8X4gWR8U0cCQwLt69aGWc27CV4IiZLUsYQPGEciAr3hVPN2lodc67jh 1gfIFNZBQV1G
I0MGTB1airdEVBf06smFZmdouCPQ03jp1ZeswF0d95ChlhyX1apAJGw0iW7e 6HquoRVESuBU
yYPpbYrCW1q2Kqw137hmgP5sluPgMRSUs82pXaxQxqmWc9aSrV7MhjdsUkIL hOPZ2aNZ5o8u
YRTMDXBUbzmtNtp83zkG+fWMs+B8NvojQi+gv0LwBc78AP17LgbQw7EbAY7j HCcQ4j3rwhTO
cUX3NqIXfZz7G1bOcx7wVv7mBqEpDwuAIfhwAeB4URG4R3o+GRkd28WwwNgO rmzz269yt6l9
sypfnxfn5VPWNYTp38+s1zIH5AtYzxNReX4jotSxwDRRAUr9Bp0y55TA+A6m t2m+LZCe2AXP
4mu0R7l641t0Ryf8u1j04SXGxiW3el2GoXFMMusSs6b4pt8mH4PVWebF/FBx jno5Pc7KusVI
IS3F3if/EzD2Ntn11zUueDpqPoM+WcsO+M//gX4N8bQmxchXqS5yWYn8ldYp zjND36l0k9j/
6xl/iXQ6OrGDldnAQOAVQkqhtLeVta9sUDXKJ1TwkJk/xQge8fwfI4YnStW0 l8RTpawsPlKq
ZmqqBuhZxX3SHOGvh4+JFTigb8bTV/M9oI/6aPvP/Sn1SXm/M1DIO1xX+FAp vMVVn/wWh5uk
dKBJfHVqPtK/39AkPi857cTBZjwB/atj0cNH0dX8SI2Pa/if/QNQSwMEFAAA AAgAN1LyOJ2P
LjRWAAAAbQAAACMAAABlbWZDb21wYXJlRGF0YUxpc3QvYnVpbGQucHJvcGVy dGllc23JMQqA
MAyF4b3QO/QAmp7AwUHBQSdHJ2uRQmxL04DHN7gJvuEN30+Ji/MApjNUnNUq cc1cX9hDFJCH
EB3y4UkwI58i94XNppX5bh7Wvp2W0f400OoBUEsDBAoAAAAAADdS8jgAAAAA AAAAAAAAAAAc
AAAAZW1mQ29tcGFyZURhdGFMaXN0L01FVEEtSU5GL1BLAwQUAAAACADTcfI4 Wh7Yz/4AAAB2
AgAAJwAAAGVtZkNvbXBhcmVEYXRhTGlzdC9NRVRBLUlORi9NQU5JRkVTVC5N RpWRy2rDMBBF
9/4KkXU9OKGU4pBFH96UtoQGulfksTugR6qHifv1VWI7JTUJyU5w7zkjad64 pgqdTz/ROjI6
Z1PIksegS4npEB6y2ZC8c4U5K1T1ZNSGW3zmnr+S82wpQ52SHnqrVq2NJNH1 cdSfM0e6luij
feFtwB48us7fhR6Ep4Z7Y/cu0bnK6JLRBYc0+cDvQBbTPRYHG1sDCkkbhyCM RbBBe1J4kxxF
0Tlfd5Oabv5iMoNbyCbjYjxH0ZV12Cq6HOnfNwIyuD8LQElVdT2luBdfJ7B/ C4jJcrfWNmeS
/7RD2n97WWxRhF2p0A1ZoxVqn7MX3vBVkU7hLvkFUEsDBAoAAAAAAMRS8jgA AAAAAAAAAAAA
AAAZAAAAZW1mQ29tcGFyZURhdGFMaXN0L21vZGVsL1BLAwQUAAAACAA0U/I4 wIPJNFABAABo
AwAAJAAAAGVtZkNvbXBhcmVEYXRhTGlzdC9tb2RlbC9tb2RlbC5lY29yZa2T X2vCMBTF3wd+
h5I9a9S9jNIq26wgOJCpY6/X9raGtUlJ0rX79rvp1Nmxh4HmIYHknJPfzZ9g 2hS594HaCCVD
NhoMmYcyVomQWci2m3n/nk0nvZsAY6XRj1YQv0OGXlMI/+Qak6t341GjMGl8 WgzZ3trS57yu
64EqsoHSGX97XrCjxHQl9V2rGA+HI5It1/EeC+gLaSzIGDvpLUnHjHEuSoNt AhapSxnzyMmY
J6Eg8WqvrJqBhR2YY5o025dFyKIGijJ3SrPSmIrmt3ri5AE+5WCMSAUV7RG9 bz9LCj4cS7vY
2ezb5oxrq6vYVhryOQKN+If/wVotdpU9AbuebmJzLnJEbsL7V+m3nEe0Nd2j q/fQEkyhyu0r
5BUuhUWCChnjl7FayKj2qixRP6pKJiHrj67GfiGbSK5G8nOKYhYygsEDXMDP H4f7LLz7W2jq
C1BLAwQUAAAACAA5U/I4QPy0GY8BAADNAwAAJwAAAGVtZkNvbXBhcmVEYXRh TGlzdC9tb2Rl
bC9tb2RlbC5nZW5tb2RlbLVTS2vjMBC+F/ofjPa8UTaHZTF2ypJHKbQlhxZ6 VeWJMlSWzEh5
9N93LMXpE3qqT5qZ7zEPXF0cWlvsgAJ6V4s/o7EowGnfoDO1uL9b/v4nLqbn Z5UB1/oGbHkJ
7qZ/FIcWyxNxwsTzs4I/1nOh5GItNjF2pZT7/X7kWzPyZOTDzZU4QkB7gncg 0Ba7AAkI7VpO
xuOJXPSwd9pDK99zh15FkQhzJNDR03MteszMt50imKuorjFEGUhnn4xe2a1B dzWvxWfsUfBW
tTzB0QLbzlME6hncxakjZo+GGidfp9GsaVE5Ddew68f5y0vkbPdMaDZxiWCb UIu1sgHEtOdU
a2ajyUNNUwtZsZJvKwnbX2yl9JMyEIqOYI2HWiwOij1BFA2Gzgf1aGFFfocN 0FIdVxNpy4Ak
m/k84hurXzL3kh1mVoXABqmUgg9gudr46DNlIC1BxS0xSxO/YLZB2+Q5B+OM YOMUlYv/MRI+
biMUX4hLx2cQ8kctojLhhy2wORlU8nW1+ZjydM2U4fjj/8jZF1BLAwQUAAAA CADGUvI40dsz
tVEAAABgAAAAJAAAAGVtZkNvbXBhcmVEYXRhTGlzdC9wbHVnaW4ucHJvcGVy dGllc02JMQqA
MAwA97yiYOf6AXV30D8UG2qhNSGo0d+r6OBycHdQmWYiPiXFee0eq/96B9sH C8B5i2kZfUHT
moEC5pfAQnsKKN9SVYeHL5zRkUS4AFBLAwQUAAAACAA3UvI4y5S9x7MAAABT AQAAHQAAAGVt
ZkNvbXBhcmVEYXRhTGlzdC9wbHVnaW4ueG1sVVA7DoMwDN2RuEPkvaGfpUMC 6tITtAeIgoss
hSRKQsXxmxYo4Ml+z8/PtmjG3rA3hkjOSjjxIzC02rVkOwnPx/1whaYuC9Gg NuQjrr0Xfp4o
b4aObM7KgjEmcExovy25XIJaCcp7Q1qlzMCG8o5skuBCx2cLrl1AHgabqEe+ kUWoF6HYwBM4
41k2l2too2KUgP1Lu96rgK1KylBM/LbZaTemynNWs2rv9oOWM6fDRfX/wgdQ SwMECgAAAAAA
RlPyOAAAAAAAAAAAAAAAABcAAABlbWZDb21wYXJlRGF0YUxpc3Qvc3JjL1BL AwQKAAAAAAA3
UvI4AAAAAAAAAAAAAAAAKgAAAGVtZkNvbXBhcmVEYXRhTGlzdC9zcmMvZW1m Y29tcGFyZWRh
dGFsaXN0L1BLAwQUAAAACAA3UvI4ZsYXa54BAAAGBAAAOAAAAGVtZkNvbXBh cmVEYXRhTGlz
dC9zcmMvZW1mY29tcGFyZWRhdGFsaXN0L0FjdGl2YXRvci5qYXZhrVLtSuQw FP3dgXmHi/tn
ZsD2AYqwu86yjIiIH78lprc1mCbhJhkV8d29bTqtH4goQmkhPefknHOvE/JW NAjY1tK2ThBW
IgitfCjns/lMtc5SAEtNjlIr5zGXljCnaIJqMT/VsVGmfAW0vlF5TaLFO0u3 +d9oKo2H1gS8
T6LFajWfwQoubhCEDGorgiWQWngPknFktYfAPx2r7ysDWtUI8kFq7HjFfObi tVZyoPwZJfgC
NJWH5Aoeu8uyouCLJq3Nms8Gvg8i8KdWRmg4D6RMA6fHl/83J1ebNRzAHrdy mFpZcyvH3Mpe
+VLU33SFgTKsZCR2ytR5wZ305M3tmsr46RvIUgUcmekUJaP6w2I0ONEXyy5N 9pQuH8gLY83+
kdiKysplOvrtET+blv/F5igsPpvV8q2brVUVJO4rIMiBwEMje+fh371EF5Q1 venMR4eUJ+IO
WnY/XJrTAfOUL38qH8ez7tvprPtauDGDiVqXU9xeaccds02TP8MQyfCev1+j HjDkpR72IWry
/37jGgxrrEXUYdiebBBLlkdP/HoGUEsDBBQAAAAIAI1w8jiPkj4jigMAALQM AAA6AAAAZW1m
Q29tcGFyZURhdGFMaXN0L3NyYy9lbWZjb21wYXJlZGF0YWxpc3QvQXBwbGlj YXRpb24uamF2
Ya1W32/bNhB+tv4KznuYnHk0Fr/F27Cs9TZtiFM0LtCHAgVDnS22EqmSdKy0 yP/eEyXrl+XY
aSoYxpG87+PHO5LHlPGPbA0EkhVXSco0hMyyWBg78zyRpEpb8oHdMSoUDa7n GYfUCiVnrbGN
FTH9l5noiqU1TOk1BR6L1ABFeor8iZKF85vXweyQX6mDhmK1oiDXQgL9ByRo wV9i19z1nIZO
wLJEhRDTHHmVW0eBCbM86sx7lfedOHGBr2d22NOmdqFxrm/QMof80VborcGo jeZAX5fGEf8s
ERQdYvr2KthBAmz3wz5thFQZZWlKg8s0jQVneeKf5PxCSQtZYye9ipRVL3GD 3TKEzTOG08Pf
jFul72f9Tq6FDJOzM4+ckWUkDOExM/iP7FrFhrA4JsykwK0hakVsBITVIn4y BDLgm9xGhomX
bm5xrCRpqCUiV5OARJqg2f/F8waTM+JLJX/5D/d7qPjIG6CYPw3ASYH40Vim rX+KaxkznCDX
OijFXt9+wOWRgqbHnfAShqvXamuIO6ml+sHABZHcwgr3QWH/TtrRpxAsbpaX ixdzyjUwW7j5
o1mFZisL+pvBkoOx6hvw+GvopgZsEPrDX8+nQzdcqdofKufcHz3Au2AJ+EOL mA71/mjN3nXo
JV+DXbK18UeUhaiB49qFXDdmeY7bSpiocsPf7miT3f3wl1OCQZewJZ2z7+NF XMYcLX8YWZte
TCaQTQr9wxHSkvLbY77MRT2V2K3kCG8R26dTF7g2+87oxCMPozs80u5C2UhZ jW8vtgfl1tMB
dVfSh2ttoD69ZUH97cZqzO+4vAP+IMqda1ME55CX38e4X83IutFVMu57Ncn2 KjEJK3NHULt0
8RWN1feV/QWt+qvrJXGl9HzL7pG4KbQqfa7ltxM7bmdsXJDvf7s4Om31d3Nv LCRUbSxNMaLW
H76T5wQ1FGouyDs5/Lmu0dSgKnwvfQa/UjvqULYa1UPExa1cXB1CGqrcoyYb kxWLDZysMqe6
IP5CWSBSuSZoyPcaMZHaytFB/bnrUfmPpmr6zFR1T83Ye17epqfnbbp9Ut6m j+YtHx3jFt8c
T9sC7vAKxduBRJimH8ij2emKfKgs7qJbF33IRj3HawBZMe+NxWf/UjMOfi8d lhENdqNl6yFE
52+D5fvr/7HQPHyPJ5FK/c4z506JkBQD7t0ymeAetnl5Ixb3ssonfvC+AlBL AwQKAAAAAABG
U/I4AAAAAAAAAAAAAAAAJQAAAGVtZkNvbXBhcmVEYXRhTGlzdC9zcmMvUGhv dG9EYXRhYmFz
ZS9QSwMEFAAAAAgARlPyOGMaBqSKAQAABAQAADgAAABlbWZDb21wYXJlRGF0 YUxpc3Qvc3Jj
L1Bob3RvRGF0YWJhc2UvRXhhbXBsZUZhY3RvcnkuamF2Ya1SUU7DMAz9biTu YCQkYFLbA6xM
IBjSftAEXCBN3TbQJlXiARPi7rhZBxTYxwRfSZxnP79np5OJgAlkynZrp6ua ZuGZjt596GhR
HPGZik6qR1khLGtL9kqSzKXHqTgQuu2sI7CuSlA1uvOYYFvy3TpM5tdSkXXr qRBbysM4hhwr
beKVRxcXVkEcB/r7GiHLZ0NKluYzKK0D4nBrC2ySHrQg6Jx90gV6kKAcSuJv pNoWAY1S1WCs
iWXuyXEpUI30Hmz5pdBHI2iKH22cexzLZBkvsu0aXG48CKAKDTrmLjburPJG K9CG0JVSIQwZ
gxbAF2IqD/Nt4FVEvSHRINtrUzVI1nAJT9JwhaHhcpOQMHS3edFOPdG416hv Nvre3OLm7v7i
5nIOZ990a4YlY/SiD2mj6eR0Kj5F3CKtnOlHYvAZbP6AiljCYP5xhu0slM5S vh3/SY0LVHsx
/XAgIIbtCfdf1YQBbBffrzpedC4B+Zo/tP+X0WzE7EO0a5rLIb1CGkeCtDdI 0/EgxTtQSwME
FAAAAAgARlPyOJWZBne8AwAAxRMAADgAAABlbWZDb21wYXJlRGF0YUxpc3Qv c3JjL1Bob3Rv
RGF0YWJhc2UvRXhhbXBsZVBhY2thZ2UuamF2YcVXb2/aPhB+nUi/7+BfN4m2 Gsn+vCxDRS3d
Im20KlTaO2SSg3oNNrKNtGrqd9/ZScgSCEmBdq8SOxf7eZ7zne/801OXnJJO KBaPks3uddcO
/cLYTL0Norf49N0FDR/oDMjNvdDikmo6oQrO3P9cNl8IqYmQMw/CmC0UeDCf 4ruQ4PV7Wks2
WWo4q7O8iKlStVY3FgZu7GYU/m+3yQRmjLeXCmQ7EiFpty2d0T2QzqSb/tLx J10yFZJonJ6L
CGLPGAWahIJryrgiNAxBKSFVbgeaEjH5CaFWRAsiYSFBAdd262Vs9yGkE7Mu 0PCehIbEu46P
49KXKVC9lEDElNRYAl/Oyx8oj5LfIoqA9OMCVgYdH2FkSuDP0ZoO5wpKfvP6 v+h8EcMVDbWQ
j9bISkIeGI8+H6XOPrIfZsBBUg1Rcg6Wk5iFhHENckpDIOlSqcoEfmnEoEg/ m/jtOsZVTuqQ
7BxxOgcPZ6s96FRycoqwHIPLGeJB4zMCg973PvlMjgqEj87cahhqYXjc3QYv g2c4xqUNokSp
JlheTpzh+Oa2fxX8qFdI4Q8xaMHR10pTHtqzq1d4DwuwfIqCwXDUG1ygJ0sn l6GZV7QOzBTj
TB+fFEgU45ewaBXWrd/nMeMPm5a2U2ZF0oF51446Pr49tZKQ3Ys1BuLWPVdW zUi/mYG2hscn
m1XFKCU3X69H1yjj+5I2WUYq6GI4Y8oc0LnNl5Z5i9A0iR/Q5eRcyAjkOtLx 2ATwM/GO6Ext
wktipvSrgB71vgwR9IdngA6ifyZxcIlYP5ax4r0zAWmiXGm5DBE3jTMCKgv+ VjEsDhEVDVFf
9Xuju9v++OL6bjBC/J8Qf07gFhAmV+Vb26ieQKwIejtai/W9+EgLpRrJmoZe VdzbUUXCvLBL
5RngrKEYOJeftm2imOxiEoEVx7y8sDYlYNmuTSTKoB6f5Ga1yTGvTVcqjs0i u0ppck2dniZR
WT3Ny6vqmaDLtm4qqrHdW1SzyK6i1ugZRFbNIHpVLVvJnk1FDKK9JcQlKgWc JkU8vlPsZSTg
UvZDVrfZ3J13PYeSaKdt18gWGxFDuDizol2L+hKmjOOmMdO4Q7y5h0vQ5l2c k7VxTnUf5zRv
5JzKTs6pbeWctJer9UFZwrwV+5ZSNz1XotmGOjgT6EDF8Fa3bGHSsB7eoyAu i5WolV6cWVmc
dxre31fps/SrKZqzE7OvWOtU8kxRqp1zUoWbbVdmW8vr16RnquzN9AzEXekF 0b92W3BZYLWW
9p9c94n4fvHAu38AUEsDBAoAAAAAAEZT8jgAAAAAAAAAAAAAAAAqAAAAZW1m Q29tcGFyZURh
dGFMaXN0L3NyYy9QaG90b0RhdGFiYXNlL2ltcGwvUEsDBBQAAAAIAEZT8jgn vJWthwIAAA4I
AABBAAAAZW1mQ29tcGFyZURhdGFMaXN0L3NyYy9QaG90b0RhdGFiYXNlL2lt cGwvRXhhbXBs
ZUZhY3RvcnlJbXBsLmphdmG1VNtu4jAQfU6k/sMUVWpgRXhv2qpVy2p5KWiX HzDOELxr7Mhx
SqtV/72+hUtSxEtBQrHH45lz5oxnNBjEMIBbKst3xYqVvnfb0cHemq4m+ZX5 juKS0H+kQJit
pJbPRJMFqTBl65Jn8UVsvlLp1uEgu9gdSVWkSDkrzQGul2YtFabjJ06qKjvl NV38RapPus08
xtNpLex0/JNQLdX7xGxOXyl5XTCRju1m5tZZHDdlvBwOYYHGNqwrVMNcUhgO XUkfBdhkuEah
iWZSgFyCXiGsZY4cbhf3AcXtaHGfboOhyDuhHgoUqIjG3AtSLzijQG0BYfxG bJY9RoBv2kQx
R3vGHZb2FfgfR5ZNZBI9KTRZKgczxyWpuYald2uRSY3/cfrRUTbRIZ3I8okC ocqGpm14TDCd
9C3KSJut/UaHLhZuy3IHyaGl37RI+tvArUykdPLyZ/748jROC9RNqZJeuNbr Z2AzsSUk3fCX
dyBqzh0q81OoayW6MDJ7+hH7PyWariwsiqVrB2xWIcxeg+2wcVkkO8fMxdom FLj5Qv/EuBmv
rqpEmGKaIguKoRcbcc+hZhdYULGqS1T7IL8z+cP0FZViOW5xhBEC1FUh8XMH 0H0CoA1z0nib
bQe3YEuGavKc9IM+1Ey2hlXTTLNf0/n0BrweIYUbhYafvRMe0Y1rE71ScuNE m3COBeGPqqjt
i9r2RNKbrzA87Ose/IAdpBeyxqRvTL1rYBUIqYHAK+EsN/4N2p7vkLNUNpTT sdtnGlR1azdp
Sudx54hurb4evk7e4zz6e5QtmcDU79BiQe/wJIeHfese1t/VpzmWCqkFeqRv n7cO7XnY5fIV
iXZnYjNCPP4PGI26LzL+BFBLAwQUAAAACABGU/I4962zZmQGAAAMGAAAQQAA AGVtZkNvbXBh
cmVEYXRhTGlzdC9zcmMvUGhvdG9EYXRhYmFzZS9pbXBsL0V4YW1wbGVQYWNr YWdlSW1wbC5q
YXZhzVhbc9M4FH5OZvY/aAszJEwusI8UupjUBc9A2k0Cs28ZxZYTLY6UsZSW wPS/7zmSbMXO
pWWgDA8QSzr6zkXfOTpq/+nTJnlKXsZytcn5fKHPzLBfGePU4yh5DL/95orG n+mckauF1PKc
ajqjivX4cpWdNv9owq/MdW0x/EJhmV3QWMt8c3pc6sriH5IyI1gsl2U+77E4 4ytYZMsUvmUO
YIHWOZ+tNQDdITnIqFJ3Sjmz7taMkSjFIxOWZhHlP7tdMmNzLrprxfJuImPS 7ZqIB4LgRrZk
QlPNpSAyJXrByFImLCMvZ2cO8WV/dtYrwZhIdqBez5lgOdUssee1nmU8JjF6 SYoYe+sI+6IB
BZa2Jr0t9S3kW7OB3jSOuNM4aF2jal4D7Wuscn4NQ2IPgqzwgN33KyLWGQTQ 6xzkDGQVoRAv
oTQVMTsWqQ7JwT6lWc4ScsP1woB8e51x8fmOk+6NzM58Q3ZmbslsY1S6XDCg RV58HEXkmmZr
1rOBWJ0NpWYvjDwoyFmsyQ2F/ZLExpltJMIVuebUTCkkQmxAUps5ZMn0QiaF /Y+44Jrgf632
bYfcLHi8IDRTkqxYnsp8qXCzEeA04189r7zCDkQBYqTXuVBm3serFLEoKZGC ATzYnGyANSCl
ej/CA8XYfY+g3HC0ZDxiw/EUwu+lH9ngHOfdbk602kjzhlpDHFsOtEOqVazH ouF4EgwHYfu0
2bhtPlhaWBqQmZQZQ9arSHCQgtxI4azZnuTwpIdPKhLPAGbOuJYjBKgC09yw xWaR2Ybz8Lsh
EvbkiqxXUjiSAe0StsKy0SNkbIoFbnaTTMQcUzQH48F2lXKWYMbENAPezo2u gsoACbOVzbog
noIophJQEgnb0BTYCR8M3Aa9ky2YBILF9tIdAGAKYrEHPuGYjdmmAxIwm4Ml zNhiSoWxs0wC
8FmxLC2T+jKtrGPAUKTQ5ePQQQdLnTaABmRBrxkRUpMN0+ApE1u55woMz8ty 4gKa8lxpLBwF
U4xivxHjUma33YNAYosDCXqrbySBHSv1AkEwjLRrC6ic/QdBURg4tNzXC49Y 6HfngyeDKLi0
radDFDf1WZTbn6h9qpZ0Ay6kDGgoDRCcqcK6DsiGfGXUI3EtY1/HPAPgxLLM RJOmKYCiTaXN
IEi1iTfiFDUMrK/G5Yer2Z4CZCPlsm0ghcY7tdXekigNqEsdqlv2Qnd1oX49 I5orX1CxW0W1
aLsaT1pV+fZOqe0VZa03Z7pYre3qOT+h8oGefp9czjTlcCS5Y0aFlP6WbOyW WuRWzYVX3kgv
127d09LCtLI9AJ7sUfs3+V68F0Swm72XhQ3DVmHW+Zq50LiaXMTAsj+B+6sg P0jthKB3gDUF
ZlRQpsxEj7sXr+TYYcwPNP/sUSARIYAJjwEcq31MxRMoUqBvQcWcJXu1pDlj X5mDdHzbkXqg
y9LkRNFCwvmZPgEToTRlu7F8WCPKp0dpyHRIl6xqTcuLtbcsM9wbA4FikKLZ BaPwy+CccKH1
7KF6jcOWT+hc/QTLn/96y6PkJ9j91wPbXekp0fbqTM2D6mIbxd135Kpd66Hs dd2ob0OxsB3v
QzH5D3UWvqWot3KuD52vKbRRCRSiolEqbnYpzOXOfSsAR4q9l22OfugWP3BM 15InZH9R9net
C4m/bE9hwU4euhbsq9w8ZxPX76WOfyBWeQk79XbYunp3OblsowI77and2trV IUZuOh0GH8L7
S0+Ct+P7S0fnv4xy5b13gHYSk8M+qI++en237tnpWIhAnom/IQtLv44x0Ueq xka/sMNIv7LV
sCmmzdXFLIPcjLqCbp1/Mb3R1Si8iP71S9ArlT1Tjex6s0LsHADxbeoWx/j6 kWuRmMJwQChI
EmKe47is4DiKzKkbX0mpMplOCQUACfvNUdlFrwQwMKyW2DWS46AX28GJGZ10 yJ/ReBq8GU9G
wWBiR9FwEo4ugkHYITB6Gw7DUTAJz6dFTzkdvA/GkFWFKp9TtR6hQ/BvIMXh FpcTPHtx6USA
zAn8wr9nHfK8Yp81BGwajqNw6Oz6dPk+mETvrVmDd8HwbRi8gaFZ/Dgch5OJ H0fnIIbT0T8f
3dR5OIo+hXb+cgSj8PyAE75duMsJDTInHfOnPeNG9zf0I0ru8oInzoeffhTf 40ElwYDpcp3H
rCzdIzdRZKSr1Lek3999yDT/B1BLAwQUAAAACABGU/I4m0LsKOkEAAB9FgAA OAAAAGVtZkNv
bXBhcmVEYXRhTGlzdC9zcmMvUGhvdG9EYXRhYmFzZS9pbXBsL1Bob3RvSW1w bC5qYXZh1Vfb
cuJGEH2GqvxD29lahAvEu8GsnYVsVOXYroCTR9egaWDWg0YrjXwpl/89c9OF i43Jmk3yJM2l
e/r0OWr1dI6O6nAEvVDEjwmbzWXfDDtLYz31IaAf1LNTj0l4S2YIV3MhxYBI MiEp+mwR8279
p7p6ikSuLA4fiFrGK2vZfWGXGanFYvkruSN+Jhn3PwvOMZRMRNV1kcx8DDmL lTEupn4oFgsR
+ZGQbProX+gHC8kbrcw5w3OWylc2q3eRKDyfOUnT7fvUovJZDSTQaXqT1eXk q0Ks928/x8au
Ezl+jPE6Yt8ytFDq9Zzgg3YbJjhjUTtLMWlTEUK7bcg+i0AfiQuMpAkSxBTk HGEhKHIQJhBo
9HDR7036hqVeZ9LvddREwy+cY0TXXPdi8xgrZ1NFobhn0QymSGSWYAokwfJk pMfGIuPGBKDH
Wf/plLPodoPUrFh0dn6eobwgCwQdn34xcT33Opzt7mhMZqlxpF++x1FAjZuA rjjpdTLuXuL8
yzqdYYQJURmw31c24SyEUEsMCqeAD1JlOIWKMMrkuY3wVK9pvmsu5xSnJOMS 7gjPMGe14SDk
ifOaK6lrAJEyYZNMoq9cvaydWoX69ZXTFLFyiJkrodqhSCgmeqCB1+JESAzV IqRaiCFMWUQ4
jGSiZXNx9vvwZjgY/np2fT6GEzg87NaX4YYknCP9/6F1ACOt4pNlnLtC1Lp1 EPXrGkTgqiq8
C07tfkecpiT1LNo+SOWgW99RsAF16AK6H/oCuiOoTVINBlWhRhnnu/L438Pp oDEKJ1V8Dtj3
hOQCWD+zrH5eU5e2WprFmHjNbr32/P7Hnl7eYZIwitUI7J8ecGRYNgMXS4Lq JxbBcmvjnzOp
nPLUv/rtcny5n0DtDyInpKxrZVSmlOz18DvBlPTd0Xn9wns9tIG4OcHphSlr eUg1W+XMZjfD
puBhtUn6A79lLEGl0KZartm1R0+ZwFoz5ck5S1tQnfZHw3FrhRjLx82NLq6t PKqWCaq5Jz3Z
TK0UvbJEPznkugzCia0SdrZmp0DjXW/qSmcu777pFFqgE/ES7PHZl5GGWXsu NaJP2SvyUqAB
XZYno3s92IrTHFtKM6CrwgxUKbOh1HRVs5t+tCCDQcvG0lKh7EuKRWkrUnRp m3r8gtJjkcx7
ch3NRAiOJALVoQt+h+WEvmpoKbpafM9kOAevsHTiDVVD/MrHd6z25Dooa1c3 t3xFv1XL/Dva
bhkMqnZOjKufgvmv+CYZZSKKBBTA98XOKItjdVj6F0kiFilUh1mk2oPwFulh c4W9UuA4WuPO
0aqV/KfqLN6DqbzGuy+pWbjuVtLafTN9BW9+qDSl/+Ur04TSM849r7zx9z4V dx9X+P5ZELkS
TGHYjkfLw+litKwLZ7I3ObxA93WUrhL+jvwu3Tp2yutWct/mZpmeSof5CjM2 JyXwH8ZIXhIx
SEd7IMViXb4J5j0CfLIXxQM3PIaDpX2++lepBtTTm7ZWx5y7paagcP3xIxzo CZ+lw0UsH3eu
tsFgU/iMVoMv9pShM7q5QOts/yt0u55BCvtS6d5USFeJeFCpacJSrMVeFWTR dfySTaeY6B+L
uuS6Dq+64q3amjzY7T6JYxW/dwiG2mM4XF80K5tsWobYzTZ6ZbMNo5stGN0w 2Wg21GzBmF0s
oTiunqHTKW519b8BUEsDBBQAAAAIAEZT8jjmn4JUvAIAAHoKAAAvAAAAZW1m Q29tcGFyZURh
dGFMaXN0L3NyYy9QaG90b0RhdGFiYXNlL1Bob3RvLmphdmHNVclu2zAQPVtA /mHqBMiCmrrX
ipACzUFA0QZN7gUljmUmFCmQVBYE+fdykew6seM4KNCcxGWWx/dmRunJSQIn kFWqfdC8nts8
bNOVvT86KNiB+6ZJS6sbWiNczJVV36ilJTU4TfYS3rRKW1C6JlgJ3hok2MxI pZpGSdJZLsj5
d27sdG+jsVsrjeT8Z3mNlZ0myQDv02QCJdZcTjqDesJUBZNJgPoVNLYaDUpL LVcS1AzsHKFR
DAWoEAgOM2zyrMwD5iwt8yx1B4dkERslex453LUhx5WLN1NCqDsua5ghtZ3L CFQjmK71D0H2
Jdh3IjgAZILnj2eCy5tVokjY7ddof9AGwePyi4DnKUsFf7P/Fa1N8PeLd/gX LHgXbOnba9+J
ftEOPJwZxGdxzu9p0wq8iNXgA4b7o+NgH9gPqxolauoIisXTlYJXwKVFPaNV HxTw3joFDPTC
w2My8sqPXIBf6MiWJmh6S0WHvcCDpoG+paRArdW87CwS5x6lYzijnbC9O3es VQ5ePh5naVg4
y801Fu/a+C362kIqXSUskAwqPoPgc8lDC5VAqj/7AN5co6tYKsQDmLnqBHM5 XbHq8C7qsJpK
8zZUsrclpEeXeggbyjXenOlA1ZKprfhc6EHcfRMr8ujS3cn6OBntJPvv4Ou8 FuIPrJ+Ox/F0
WQgjXwmjmAhchOg7TZaiX6Jdp/jODfXXW98g8mZmW6ppE8EEJBLv3kHx4qnr CblVnMGqDDGJ
o2aHfojj4GU/gHCzd2iKuINKSdd41o+yGOehRehZvqa3lAgqaxKxPL2Bwe1t 4tGtRfaRemUj
SLJrW/hIK22xXvrwX8wiz7lvieC3m+4FW6i+W9lvF61gH3myFWzLXCvYe6ea 81yZaZydjq3u
cOtIK9g/GGiLP/T/GGavshrRvT7IvMWLMfYEaRqfm/wBUEsDBAoAAAAAAEZT 8jgAAAAAAAAA
AAAAAAAqAAAAZW1mQ29tcGFyZURhdGFMaXN0L3NyYy9QaG90b0RhdGFiYXNl L3V0aWwvUEsD
BBQAAAAIAEZT8ji2T4YElgMAADQMAABEAAAAZW1mQ29tcGFyZURhdGFMaXN0 L3NyYy9QaG90
b0RhdGFiYXNlL3V0aWwvRXhhbXBsZUFkYXB0ZXJGYWN0b3J5LmphdmGtVttO 4zAQfU6k/Qev
tBIBqekHtFQgFiReAC088Oomk9aLY0e2S6lQ/33HtzZpC80KJER9mes5MxMP z85SckbGhWxW
is3mZuK2w87eHv26LX/h7zBtaPFCZ0Ae5tLI39TQKdWQLwzjo/RHyupGKrNz eTb6sb2SapZD
wVmDF1BXeSHrWopcSMOqVX5Z0saAGvUUv7M/DFR/ByjEo5cbWhipVrd49IkB XEsF+fX99C8U
ZpSmEbOfgwGZwoyJwUKDGpSyIIOBw+9pDmQ8nQQ3JPgZD6cTUklFDF7XsgSe W+FbQxolX1kJ
mlBBaFAaFygxKRRQA8/Pz+Oh25MazFyWzgzQYk4KTrUmsmoZ3QQHotwL7ULD LnfXbxQRgAdP
rBOagQCFjktP+WLKWRFcBekuhATeDHrTZB9Z8p4mFrEk4FJg1FD6UEkophxv PwY0+TCfpBtr
YoNNEEyDRKEPbajBuLv5ec9hM0q3wV1ZqD0HTKCqKCDguuGk8ml9b7gO3MOw ZqcWvYRVJGtH
Tc7PiVhw7m+T7tVOujnc3j0+Xd5dXY9Qdp3i3zblP2AWSmiynAOmaQuT6Zgk wSVtGoyNTjls
6tasmg0s0nXEcTSerFlmg6pBWE6kIMq7DmVu1AJihbO2cRsFMNy3uuZEx7rB VrUCW8aiWrch
jlHiY/kOFPbYvbh/BaWwtzdET6XkYCPWgeQbqZ7QXObnSzC3Jd7vLeVtngP1 IXILn6O3o7MB
BQMN06urlmXxODjN4cr2eHaaz8BcB1fZ6Y7z4GpjpqJc4xkedTtdL5kp5ogR NQSVYebay0iL
2ufjTR+vqf/psDgQYms8usDGodcmPjd/SM4xLwHLD0RDQ7ZpTSKxcdoXOFPd gM3c/zahW+hd
4l4s6GWnIyuwPma+hIouuLlCL5G+z1wEkX0n673Z1/n+xFKPDUoVlkRg6Uvs NFTRmnh77UY3
0rvO2z1pBfpH1KP7NiS5hCMq8RnhwwpA+gjaxZGX0i+2jRMUXPUfwpNgLXUS oGI7osIX9eT9
gjPxsvNV9sUzhnriVuMhrtYnx6G3wzYWyQdD1308iJa+NZf2myzwNaEZx3k3 E/jacUWsR84g
Mzhw0U214EhSFKBOxM5MO3xxbDI/f5eMc7yyrURxZebBFia+WtJV31mMem3o UO3w28XtDpG/
z/h+x7V5dphYGnuxiOFFjG16PR4wfWn5GkC9MAi1ewSFNRkODz5K0n9QSwME FAAAAAgARlPy
OIljE4zIAwAA2A4AADwAAABlbWZDb21wYXJlRGF0YUxpc3Qvc3JjL1Bob3Rv RGF0YWJhc2Uv
dXRpbC9FeGFtcGxlU3dpdGNoLmphdmHtVktv2zgQPktA/8MstkDkIJb3HDne LlIDG2DRBBsf
cqWpscVGIgWRatYo/N93+Igl2a4N9AH0UCAPivP+5iM5k8vLGC5hylW9acS6 MDP3ORl82623
d/lb+j+Ja8af2RrhoVBGvWeGLZnGtDWizOI3sahq1Zg94WX2phN9ZJ+YU0// Edr0JapZp8hL
UZMJVitaqwbT+W3JtM7Oad0vPyI3WRy/VvTbeAxLXAs5bjU241xxGI9ddYsC YbqcPb4Iw4vp
ZDmDlWrA0G6lciwvNAhZYCMMkxyhENiwhheb1NreGdBtbRPRzoKzsoTP70oh n+H3XHmfSchm
BLsd5Te21odRFOCTekbnYcop6IwTTk9PT9OJ+4IKTaFylxcyXgC3GIBadVle WU/asMYIuQYK
UjgZ46Zl5VDfx7b6TOZQN4oj5taqra38eLVWvZXUJmAglRzLlgptULelAaFp ZdpGYu7SeCkE
5SgcIkHnNbZ25ae7jqDMD/rxTuM+neb/saou8cFzzSmtUVJqBnPPwnZZCh7q DNqhoYsZfI4j
S4MoNJsThJh73KAOPqMTJIm+mG40TCWyuUQEqUFO37YhhtIapu8Dh48s7nK7 bZC8aGoL9UC7
Buzh9l2zdJANwUpGFqtIrCDpJwk3N2Ab7qXRULRXXYp3Hx4Xf324nWeku43p p1chHQ99lOKn
uB2IpyQGnmlPQuiRMANhYCOwzC3tmAnb34SYD+byWIlGm33i71gPyw2wo2W5 CyE92YAF7N8T
NmJYesR9nE6vk6forsNkdNU3yn6hTqifOZwD4B2KNqZfXcFhK7qjsVMj9JU0 TFCEZESHZHCy
nf5h7zrjNRq3ECu6ZO/eH/Yw2tIvlhq9J/s+Tr3tDPCxrbFZbGrUdAQHTued KCE3uxzsKurZ
pULPq9psKPU/nSzKccUI4VsCM+kXfu3Fuxo6Jy5g8scw9V8H/ysoKKQB3qPD lyno3wJI+tqB
bDaH/fv44e/7xf21l0fuWYXa/b2BxH2OugCZU1qEMknDOnRKibNxrfWHwKvs XobO5DiJgqUH
Lii7ra39E2yuA7ADH6eJ9a8z2B81CExsanJmx5pu5gF28LheTLGauQqnE1pd nOfNohA0EVqE
K5T2fVfylZ0OisxqhR0b/nBeehG0pgQrIYkV/ff9HDFr1rAqFOPsaOBb4/50 1SfxdwbGzWbd
YHt8+D4cd193zjyEHds8T9XBG+gR/gEUCBn+BCS4gmVLzXUBfFF0zo3DhjLf vLDNT0eTAN5X
E+U0LQa3QTA5TY0tTCaDuTb+H1BLAQIUAAoAAAAAAMZS8jgAAAAAAAAAAAAA AAATAAAAAAAA
AAAAEAAAAAAAAABlbWZDb21wYXJlRGF0YUxpc3QvUEsBAhQAFAAAAAgAxlLy OEwZQbrNAAAA
cQEAAB0AAAAAAAAAAAAgAAAAMQAAAGVtZkNvbXBhcmVEYXRhTGlzdC8uY2xh c3NwYXRoUEsB
AhQAFAAAAAgAN1LyOEj+bmDuAAAApwIAABsAAAAAAAAAAAAgAAAAOQEAAGVt ZkNvbXBhcmVE
YXRhTGlzdC8ucHJvamVjdFBLAQIUAAoAAAAAADdS8jgAAAAAAAAAAAAAAAAd AAAAAAAAAAAA
EAAAAGACAABlbWZDb21wYXJlRGF0YUxpc3QvLnNldHRpbmdzL1BLAQIUABQA AAAIADdS8jhb
pMRalgAAAEoBAAA3AAAAAAAAAAAAIAAAAJsCAABlbWZDb21wYXJlRGF0YUxp c3QvLnNldHRp
bmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzUEsBAhQACgAAAAAA1HHy OAAAAAAAAAAA
AAAAABcAAAAAAAAAAAAQAAAAhgMAAGVtZkNvbXBhcmVEYXRhTGlzdC9iaW4v UEsBAhQACgAA
AAAA1HHyOAAAAAAAAAAAAAAAACoAAAAAAAAAAAAQAAAAuwMAAGVtZkNvbXBh cmVEYXRhTGlz
dC9iaW4vZW1mY29tcGFyZWRhdGFsaXN0L1BLAQIUABQAAAAIANRx8jiaqBOF 8gEAAGcDAAA5
AAAAAAAAAAAAIAAAAAMEAABlbWZDb21wYXJlRGF0YUxpc3QvYmluL2VtZmNv bXBhcmVkYXRh
bGlzdC9BY3RpdmF0b3IuY2xhc3NQSwECFAAUAAAACADUcfI419vYOhwHAADu DwAAOwAAAAAA
AAAAACAAAABMBgAAZW1mQ29tcGFyZURhdGFMaXN0L2Jpbi9lbWZjb21wYXJl ZGF0YWxpc3Qv
QXBwbGljYXRpb24uY2xhc3NQSwECFAAKAAAAAADUcfI4AAAAAAAAAAAAAAAA JQAAAAAAAAAA
ABAAAADBDQAAZW1mQ29tcGFyZURhdGFMaXN0L2Jpbi9QaG90b0RhdGFiYXNl L1BLAQIUABQA
AAAIANRx8jidSSCyRQEAACYCAAA5AAAAAAAAAAAAIAAAAAQOAABlbWZDb21w YXJlRGF0YUxp
c3QvYmluL1Bob3RvRGF0YWJhc2UvRXhhbXBsZUZhY3RvcnkuY2xhc3NQSwEC FAAUAAAACADU
cfI4yXTXptABAAAaAwAAQgAAAAAAAAAAACAAAACgDwAAZW1mQ29tcGFyZURh dGFMaXN0L2Jp
bi9QaG90b0RhdGFiYXNlL0V4YW1wbGVQYWNrYWdlJExpdGVyYWxzLmNsYXNz UEsBAhQAFAAA
AAgA1HHyOKMutvQzAgAAMAQAADkAAAAAAAAAAAAgAAAA0BEAAGVtZkNvbXBh cmVEYXRhTGlz
dC9iaW4vUGhvdG9EYXRhYmFzZS9FeGFtcGxlUGFja2FnZS5jbGFzc1BLAQIU AAoAAAAAANRx
8jgAAAAAAAAAAAAAAAAqAAAAAAAAAAAAEAAAAFoUAABlbWZDb21wYXJlRGF0 YUxpc3QvYmlu
L1Bob3RvRGF0YWJhc2UvaW1wbC9QSwECFAAUAAAACADUcfI4NvTt3kUEAABA CQAAQgAAAAAA
AAAAACAAAACiFAAAZW1mQ29tcGFyZURhdGFMaXN0L2Jpbi9QaG90b0RhdGFi YXNlL2ltcGwv
RXhhbXBsZUZhY3RvcnlJbXBsLmNsYXNzUEsBAhQAFAAAAAgA1HHyOPJedvTZ BQAA6Q0AAEIA
AAAAAAAAAAAgAAAARxkAAGVtZkNvbXBhcmVEYXRhTGlzdC9iaW4vUGhvdG9E YXRhYmFzZS9p
bXBsL0V4YW1wbGVQYWNrYWdlSW1wbC5jbGFzc1BLAQIUABQAAAAIANRx8jhP CgK2dQcAAE8P
AAA5AAAAAAAAAAAAIAAAAIAfAABlbWZDb21wYXJlRGF0YUxpc3QvYmluL1Bo b3RvRGF0YWJh
c2UvaW1wbC9QaG90b0ltcGwuY2xhc3NQSwECFAAUAAAACADUcfI4XwV6PfQA AACLAQAAMAAA
AAAAAAAAACAAAABMJwAAZW1mQ29tcGFyZURhdGFMaXN0L2Jpbi9QaG90b0Rh dGFiYXNlL1Bo
b3RvLmNsYXNzUEsBAhQACgAAAAAA1HHyOAAAAAAAAAAAAAAAACoAAAAAAAAA AAAQAAAAjigA
AGVtZkNvbXBhcmVEYXRhTGlzdC9iaW4vUGhvdG9EYXRhYmFzZS91dGlsL1BL AQIUABQAAAAI
ANRx8jhYEfXNOQIAAG0FAABHAAAAAAAAAAAAIAAAANYoAABlbWZDb21wYXJl RGF0YUxpc3Qv
YmluL1Bob3RvRGF0YWJhc2UvdXRpbC9FeGFtcGxlQWRhcHRlckZhY3Rvcnkk MS5jbGFzc1BL
AQIUABQAAAAIANRx8jikKb4HKAMAADwHAABFAAAAAAAAAAAAIAAAAHQrAABl bWZDb21wYXJl
RGF0YUxpc3QvYmluL1Bob3RvRGF0YWJhc2UvdXRpbC9FeGFtcGxlQWRhcHRl ckZhY3Rvcnku
Y2xhc3NQSwECFAAUAAAACADUcfI4jcRff0QEAADmCQAAPQAAAAAAAAAAACAA AAD/LgAAZW1m
Q29tcGFyZURhdGFMaXN0L2Jpbi9QaG90b0RhdGFiYXNlL3V0aWwvRXhhbXBs ZVN3aXRjaC5j
bGFzc1BLAQIUABQAAAAIADdS8jidjy40VgAAAG0AAAAjAAAAAAAAAAAAIAAA AJ4zAABlbWZD
b21wYXJlRGF0YUxpc3QvYnVpbGQucHJvcGVydGllc1BLAQIUAAoAAAAAADdS 8jgAAAAAAAAA
AAAAAAAcAAAAAAAAAAAAEAAAADU0AABlbWZDb21wYXJlRGF0YUxpc3QvTUVU QS1JTkYvUEsB
AhQAFAAAAAgA03HyOFoe2M/+AAAAdgIAACcAAAAAAAAAAAAgAAAAbzQAAGVt ZkNvbXBhcmVE
YXRhTGlzdC9NRVRBLUlORi9NQU5JRkVTVC5NRlBLAQIUAAoAAAAAAMRS8jgA AAAAAAAAAAAA
AAAZAAAAAAAAAAAAEAAAALI1AABlbWZDb21wYXJlRGF0YUxpc3QvbW9kZWwv UEsBAhQAFAAA
AAgANFPyOMCDyTRQAQAAaAMAACQAAAAAAAAAAAAgAAAA6TUAAGVtZkNvbXBh cmVEYXRhTGlz
dC9tb2RlbC9tb2RlbC5lY29yZVBLAQIUABQAAAAIADlT8jhA/LQZjwEAAM0D AAAnAAAAAAAA
AAAAIAAAAHs3AABlbWZDb21wYXJlRGF0YUxpc3QvbW9kZWwvbW9kZWwuZ2Vu bW9kZWxQSwEC
FAAUAAAACADGUvI40dsztVEAAABgAAAAJAAAAAAAAAAAACAAAABPOQAAZW1m Q29tcGFyZURh
dGFMaXN0L3BsdWdpbi5wcm9wZXJ0aWVzUEsBAhQAFAAAAAgAN1LyOMuUvcez AAAAUwEAAB0A
AAAAAAAAAAAgAAAA4jkAAGVtZkNvbXBhcmVEYXRhTGlzdC9wbHVnaW4ueG1s UEsBAhQACgAA
AAAARlPyOAAAAAAAAAAAAAAAABcAAAAAAAAAAAAQAAAA0DoAAGVtZkNvbXBh cmVEYXRhTGlz
dC9zcmMvUEsBAhQACgAAAAAAN1LyOAAAAAAAAAAAAAAAACoAAAAAAAAAAAAQ AAAABTsAAGVt
ZkNvbXBhcmVEYXRhTGlzdC9zcmMvZW1mY29tcGFyZWRhdGFsaXN0L1BLAQIU ABQAAAAIADdS
8jhmxhdrngEAAAYEAAA4AAAAAAAAAAAAIAAAAE07AABlbWZDb21wYXJlRGF0 YUxpc3Qvc3Jj
L2VtZmNvbXBhcmVkYXRhbGlzdC9BY3RpdmF0b3IuamF2YVBLAQIUABQAAAAI AI1w8jiPkj4j
igMAALQMAAA6AAAAAAAAAAAAIAAAAEE9AABlbWZDb21wYXJlRGF0YUxpc3Qv c3JjL2VtZmNv
bXBhcmVkYXRhbGlzdC9BcHBsaWNhdGlvbi5qYXZhUEsBAhQACgAAAAAARlPy OAAAAAAAAAAA
AAAAACUAAAAAAAAAAAAQAAAAI0EAAGVtZkNvbXBhcmVEYXRhTGlzdC9zcmMv UGhvdG9EYXRh
YmFzZS9QSwECFAAUAAAACABGU/I4YxoGpIoBAAAEBAAAOAAAAAAAAAAAACAA AABmQQAAZW1m
Q29tcGFyZURhdGFMaXN0L3NyYy9QaG90b0RhdGFiYXNlL0V4YW1wbGVGYWN0 b3J5LmphdmFQ
SwECFAAUAAAACABGU/I4lZkGd7wDAADFEwAAOAAAAAAAAAAAACAAAABGQwAA ZW1mQ29tcGFy
ZURhdGFMaXN0L3NyYy9QaG90b0RhdGFiYXNlL0V4YW1wbGVQYWNrYWdlLmph dmFQSwECFAAK
AAAAAABGU/I4AAAAAAAAAAAAAAAAKgAAAAAAAAAAABAAAABYRwAAZW1mQ29t cGFyZURhdGFM
aXN0L3NyYy9QaG90b0RhdGFiYXNlL2ltcGwvUEsBAhQAFAAAAAgARlPyOCe8 la2HAgAADggA
AEEAAAAAAAAAAAAgAAAAoEcAAGVtZkNvbXBhcmVEYXRhTGlzdC9zcmMvUGhv dG9EYXRhYmFz
ZS9pbXBsL0V4YW1wbGVGYWN0b3J5SW1wbC5qYXZhUEsBAhQAFAAAAAgARlPy OPets2ZkBgAA
DBgAAEEAAAAAAAAAAAAgAAAAhkoAAGVtZkNvbXBhcmVEYXRhTGlzdC9zcmMv UGhvdG9EYXRh
YmFzZS9pbXBsL0V4YW1wbGVQYWNrYWdlSW1wbC5qYXZhUEsBAhQAFAAAAAgA RlPyOJtC7Cjp
BAAAfRYAADgAAAAAAAAAAAAgAAAASVEAAGVtZkNvbXBhcmVEYXRhTGlzdC9z cmMvUGhvdG9E
YXRhYmFzZS9pbXBsL1Bob3RvSW1wbC5qYXZhUEsBAhQAFAAAAAgARlPyOOaf glS8AgAAegoA
AC8AAAAAAAAAAAAgAAAAiFYAAGVtZkNvbXBhcmVEYXRhTGlzdC9zcmMvUGhv dG9EYXRhYmFz
ZS9QaG90by5qYXZhUEsBAhQACgAAAAAARlPyOAAAAAAAAAAAAAAAACoAAAAA AAAAAAAQAAAA
kVkAAGVtZkNvbXBhcmVEYXRhTGlzdC9zcmMvUGhvdG9EYXRhYmFzZS91dGls L1BLAQIUABQA
AAAIAEZT8ji2T4YElgMAADQMAABEAAAAAAAAAAAAIAAAANlZAABlbWZDb21w YXJlRGF0YUxp
c3Qvc3JjL1Bob3RvRGF0YWJhc2UvdXRpbC9FeGFtcGxlQWRhcHRlckZhY3Rv cnkuamF2YVBL
AQIUABQAAAAIAEZT8jiJYxOMyAMAANgOAAA8AAAAAAAAAAAAIAAAANFdAABl bWZDb21wYXJl
RGF0YUxpc3Qvc3JjL1Bob3RvRGF0YWJhc2UvdXRpbC9FeGFtcGxlU3dpdGNo LmphdmFQSwUG
AAAAAC0ALQBdEAAA82EAAAAA
--------------080304030905020703050703--
|
|
| |
Re: [EMF Compare] GenericMatchEngine - Lists of java.lang.String aren't being matched [message #620135 is a reply to message #127327] |
Mon, 21 July 2008 15:41 |
Matt Seashore Messages: 58 Registered: July 2009 |
Member |
|
|
Thanks! I've opened an issue in bugzilla here:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=241555
Matt
laurent Goubet wrote:
> Hi Matt,
>
> This indeed seems like a bug. Could you open a new bugzilla issue with
> the snippet you've provided here?
>
> Thanks!
>
> Laurent Goubet
> Obeo
>
> Matt Seashore a écrit :
>> As I look that this more, it seems that EMF Compare assumes that any
>> lists it's comparing contain only EObjects and not any other kind of
>> Object. Any list which doesn't contain EObjects will either be
>> ignored by EMF Compare or (worst case) have an exception thrown.
>>
>> I think this is a bug (see below and attached files for more
>> info...maybe I'm just missing something here?). Anyone agree/disagree?
>>
>> The heart of the problem appears that AttributeChangeRightTarget and
>> AttributeChangeLeftTarget's 'target' field is an EObject. The target
>> is the object in the list that changed. So, when you're Diffing a
>> list of EObjects, everything works, but when you have a list of
>> "Object", it either throws an exception on setting the 'target' (class
>> cast exception) or doesn't register as an 'Add/RemoveAttribute' at all
>> (instanceof check)!
>>
>> For where these things occur (not an exhaustive list):
>> -GenericDiffEngine (version 1.17), lines 838,840,842 for the class
>> cast exception (finally happens in internalFindActualEObject, line 1588)
>> -GenericDiffEngine, lines 1120,1130 for the instanceof check which
>> prevents the add/remove.
>>
>> I've attached a few files which show the issue (and a full zipped
>> Eclipse project if it gets through). The code to run the compare it
>> is set up in Application.java and outputs to the console.
>>
>> Please let me know if there's something I'm missing, otherwise, I can
>> go ahead and file a bug report about this.
>>
>> Thanks!
>>
>> Matt
>>
>>
>> Matt Seashore wrote:
>>> I have an model in which one of the objects contains a list of
>>> 'java.lang.String' elements. I would like to run a match/diff and
>>> get an 'AddAttribute' or something similar when a new string is added
>>> to the list.
>>>
>>> However, when I add a new string to one side of the model and run the
>>> GenericMatchEngine (2 way) on it, I don't get an
>>> 'unMatchedElement/Attribute' for the newly added String, so nothing
>>> shows up in the Diff.
>>>
>>> Is there a way to run a comparison like this with a list of Strings
>>> (or maybe this is this a known issue with EMF Compare)?
>>>
>>> I can create a 'snippet' to recreate the problem or provide more
>>> detailed information if that would be helpful. I'm running with EMF
>>> Compare 0.80 (june 18th).
>>>
>>> Thanks again for all the hard work!
>>>
>>> Matt
>>>
>
|
|
|
Goto Forum:
Current Time: Mon Dec 02 08:55:33 GMT 2024
Powered by FUDForum. Page generated in 0.04079 seconds
|