Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Modeling » EMF » [EMF Databinding] Problem binding map entries
[EMF Databinding] Problem binding map entries [message #642213] Tue, 30 November 2010 12:09 Go to next message
Michal Tkacz is currently offline Michal TkaczFriend
Messages: 105
Registered: July 2009
Senior Member
This is a multi-part message in MIME format.
--------------010708060502080307040504
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

Hi,

I'm having problems binding map entries. Basically I get
ClassCastException and the binding fails. I have prepared a small
snippet to illustrate the problem. The simple model looks like this:

[+] Sample
[=] Thing
0..* properties : EStringToEStringMap
[=] EStringToEStringMap [java.util.Map$Entry]
key : EString
value : EString

And here's the snippet (see attachment for the whole project):

Display display = Display.getDefault();

Realm.runWithDefault(SWTObservables.getRealm(display),
new Runnable() {
public void run() {
Thing thing = SampleFactory.eINSTANCE.createThing();

// depending on whether this line exists different class is
// casted to Map causing ClassCastException later on. If it
// exists then it's EStringToEStringMapImpl, otherwise it's
// Collections.EmptyList
thing.getProperties().put("greeting", "empty");

IObservableMap observableMap = EMFProperties.map(
SamplePackage.Literals.THING__PROPERTIES)
.observe(thing);

WritableValue observableGreeting
= new WritableValue("", String.class);

DataBindingContext dbc = new EMFDataBindingContext();
Binding binding = dbc.bindValue(observableGreeting,
Observables.observeMapEntry(observableMap,
"greeting"), null, null);
IObservableValue statusObservable
= binding.getValidationStatus();

observableGreeting.setValue("hello");
IStatus status = (IStatus) statusObservable.getValue();
System.err.println(status.getMessage());
status.getException().printStackTrace();
};
});

The output I get is this:

An error occurred while setting the value.
java.lang.ClassCastException:
com.example.sample.impl.EStringToEStringMapImpl cannot be cast to
java.util.Map
at
org.eclipse.emf.databinding.internal.EMFPropertyListener$EMF MapPropertyListener.notifyChanged(EMFPropertyListener.java:2 34)
at
org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify (BasicNotifierImpl.java:380)
at
org.eclipse.emf.ecore.util.EcoreEList.dispatchNotification(E coreEList.java:255)
at
org.eclipse.emf.common.notify.impl.NotifyingListImpl.clear(N otifyingListImpl.java:1096)
at org.eclipse.emf.ecore.util.EcoreEList.unset(EcoreEList.java: 466)
at org.eclipse.emf.ecore.util.EcoreEMap.set(EcoreEMap.java:350)
at com.example.sample.impl.ThingImpl.eSet(ThingImpl.java:112)
at
org.eclipse.emf.ecore.impl.BasicEObjectImpl.eSet(BasicEObjec tImpl.java:1081)
at
org.eclipse.emf.databinding.internal.EMFMapProperty.doSetMap (EMFMapProperty.java:101)
at
org.eclipse.core.databinding.property.map.SimpleMapProperty. doUpdateMap(SimpleMapProperty.java:94)
at
org.eclipse.core.databinding.property.map.MapProperty.update Map(MapProperty.java:93)
at
org.eclipse.core.internal.databinding.property.map.SimplePro pertyObservableMap.updateMap(SimplePropertyObservableMap.jav a:137)
at
org.eclipse.core.internal.databinding.property.map.SimplePro pertyObservableMap.put(SimplePropertyObservableMap.java:237)
at
org.eclipse.core.databinding.observable.map.DecoratingObserv ableMap.put(DecoratingObservableMap.java:261)
at
org.eclipse.core.internal.databinding.observable.MapEntryObs ervableValue.doSetValue(MapEntryObservableValue.java:107)
at
org.eclipse.core.databinding.observable.value.AbstractObserv ableValue.setValue(AbstractObservableValue.java:55)
at
org.eclipse.core.databinding.UpdateValueStrategy.doSet(Updat eValueStrategy.java:486)
at org.eclipse.core.databinding.ValueBinding$4.run(ValueBinding .java:197)
at org.eclipse.core.databinding.observable.Realm$1.run(Realm.ja va:148)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.databinding.observable.Realm.safeRun(Realm. java:152)
at org.eclipse.core.databinding.observable.Realm.exec(Realm.jav a:170)
at org.eclipse.core.databinding.ValueBinding$3.run(ValueBinding .java:188)
at org.eclipse.core.databinding.observable.Realm$1.run(Realm.ja va:148)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.databinding.observable.Realm.safeRun(Realm. java:152)
at org.eclipse.core.databinding.observable.Realm.exec(Realm.jav a:170)
at
org.eclipse.core.databinding.ValueBinding.doUpdate(ValueBind ing.java:151)
at
org.eclipse.core.databinding.ValueBinding.access$4(ValueBind ing.java:140)
at
org.eclipse.core.databinding.ValueBinding$1.handleValueChang e(ValueBinding.java:45)
at
org.eclipse.core.databinding.observable.value.ValueChangeEve nt.dispatch(ValueChangeEvent.java:62)
at
org.eclipse.core.databinding.observable.ChangeManager.fireEv ent(ChangeManager.java:119)
at
org.eclipse.core.databinding.observable.value.AbstractObserv ableValue.fireValueChange(AbstractObservableValue.java:71)
at
org.eclipse.core.databinding.observable.value.WritableValue. doSetValue(WritableValue.java:92)
at
org.eclipse.core.databinding.observable.value.AbstractObserv ableValue.setValue(AbstractObservableValue.java:55)
at com.example.sample.Snippet$1.run(Snippet.java:46)
at
org.eclipse.core.databinding.observable.Realm.runWithDefault (Realm.java:332)
at com.example.sample.Snippet.main(Snippet.java:21)

I'm not sure at which point there's an error and whether it is in my
code or in EMF Databinding. Can someone please take a look?

Michal

--------------010708060502080307040504
Content-Type: application/zip;
name="com.example.model.zip"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="com.example.model.zip"

UEsDBBQACAAIABxUfj0AAAAAAAAAAAAAAAAcAAAAY29tLmV4YW1wbGUubW9k ZWwvLmNsYXNz
cGF0aJWQQWsCMRCFz/orltydrRfpYVeRsoUKtUW3XiUmwzptnKSTROq/b6WV loKCt3nD994M
r5p87FyxR4nkuVZDuFEFsvGWuKvVS3s/uFWTcb8yTscYdNqO+71fgZzkULwR 21pFMao4Lr/H
8ixoPJ9ALx2gcRQiwqtN4HRms/06DbNFs757mrfTh3mzKP9zxAmFtQOLm9xB ph8nCiyTZqvF
rh7bQ8Bypvd62QyGMLr+o2ARjBcEwfdMgvbZ5Y44XkjyOYWcTmEb4iNblX/a +wRQSwcITBlB
us0AAABxAQAAUEsDBBQACAAIABxUfj0AAAAAAAAAAAAAAAAaAAAAY29tLmV4 YW1wbGUubW9k
ZWwvLnByb2plY3S9ks1KAzEUhdf2KcrsTXTnIp2CijtFqD5ATI5jSv5IMqWP 781MWmyhIAju
zrn33HzhJmK9d3a5Q8om+FV3y266JbwK2vhh1b2/PV3fdet+IWIKW6jyiKyS iYXC/eJKeOnQ
q+AY9tJFC+aChhV8qlOfWg6+9IIfFBXbUblq/tN8jMbqTYQi09wDjUmva6HR QhoYlDUxg211
YSokEnInpzzSEU4DMg1jpebZ8hMv+DnhN8iowZ6lN5/I5f7fiBv1BSf/zGuF tmJClTFhjs76
8nbnfkVPuQsj9a6vdhyMfznPHyThjq9+8pu+AVBLBwhvyiuZ6QAAAIoCAABQ SwMEFAAIAAgA
dV1+PQAAAAAAAAAAAAAAACYAAABjb20uZXhhbXBsZS5tb2RlbC9NRVRBLUlO Ri9NQU5JRkVT
VC5NRpWRO0/DMBSF9/yKLGzEogwMqToAygCiqKIS+419Ey74EWwnbfrrcdKm j1BALHn4Oz7n
HnsOmgp0PnlF68joNJ6wq+iu1kJiMt/BPbseyDMoTOOLStYl6e5nAMtW5UYS 3wq4UQzXoCqJ
TBmBcupIlxJ9MJt5W++3Hacf8u8lOLcA/5bG7KDUwtgu25qGBNrj9CfDQdIG fO+1nW5gL/hZ
k0WRrZHXnSDTDVmjFWqfxo/QwDJLJuwmytaVsT5ZAP+AclTC9a/L6Mwio/A8 T0KcjHb5yXac
NDa2ZMglVQ4ZNxaZrbUn1ZkfI1RF+A582pCjnCT5Np1ZxH7Kodwt99T0tRfd 6bdpLGHTRg/q
tMq3TAEectIi3Mood4yZyR3aBnI5nvAXJVNQ/UPdgKz/dA/3XqH17Rnv7qx+ bvReAD+1cis/
0oQVtiJRonfRF1BLBwjID4HFSgEAABsDAABQSwMEFAAIAAgAxl1+PQAAAAAA AAAAAAAAADwA
AABjb20uZXhhbXBsZS5tb2RlbC9iaW4vY29tL2V4YW1wbGUvc2FtcGxlL1Nh bXBsZUZhY3Rv
cnkuY2xhc3OFUd9LAkEQ/jbN09PStJ8mEdGDEnTQaxGEKAhigeL7uk3X2d2t rGfUnxW9RA/9
Af1R0dzpiyC4MPPNj51vZnd+/75/AFyhZmFD4FTpwKE3GUx8cqZz6CfQlirS 5t1CWqA0lq/S
8WXoOvejManIQkbgRBvXIeV7kyk5FDyxrQ05rUWlQI46vf7grtdsCZx113W6 FsjeMFvoRbcC
qXpjKJBu6keysYWihW2BxgoOj/UyUYftAkrY4fqYTeC83ljfPgeBSgEWsgLF rhdSbxaMyAzk
yCeBclcr6Q+l8WJ/EcwrQzKiwbMXugK11V2SLD+u5FI07/gg1Yt0ac1ci1tc aff1zChqe8kg
S1NfxpvhXfCHsWyyHMUv4A2nWOdgcyTP3gVjfKwvFD5R/mBzA7usbUagigwq 2Eui8cL3cZDg
IdOBS6tJ5vgfUEsHCJPficFFAQAAPQIAAFBLAwQUAAgACADGXX49AAAAAAAA AAAAAAAARQAA
AGNvbS5leGFtcGxlLm1vZGVsL2Jpbi9jb20vZXhhbXBsZS9zYW1wbGUvU2Ft cGxlUGFja2Fn
ZSRMaXRlcmFscy5jbGFzc4VTz08TQRh9A7Sl7SgUtEoFBERtFVl/Q4IxaZpF G0rbtGsTT5vp
+lEXt7vNdmv0z1JPevAPMF49evbo0ZtxZqAhJrRssvve7H7vfV/e7Hz7++Ur gPvYTmCCoeAE
XYPeiW7PI6N/BE0NdeG8ER1ar7gRhcLrJzDFMHso3grDE37HqLUPyYkYYtbz cvUZw3IlCDsG
OZ7b65NB3QPJg5AMs+SJfn+HIaMLbbveqNXNhlU2mwxro0QNOqCQfIekMGs2 rYaSWjV7SPeL
dYYrp3+w7T3z5RjvYhSFbnsQKe+lURatYuWFyTD9ROp9N3rKMJkvtBimSsEr SiKD+QTmGFbO
yo/jAi4yJKlcbVrFaslUg50l2knLBpc4LmNBjtChyHrt+h3ZLV8Yn3ISMhWO GOLKYYljGVcZ
5ocOdj0MehRGLvUZ1kebnaSvDFc5EphWhtc41tVIWWloNmWKfscKjsm+6Kni GxzJo+55jgJu
MeROL7b36P3YIU62SflucKSQVr6bHIbyXRzh2xLegJTkHgdHmmGm4vpUHXTb FFqi7RHDXCVw
hNcSoavWxy9TzWAQOrTr6or/9mNT/fYMvOz7FOqkVYDTw6MRZ7LbpDxVMSyo 7CVbUJFpTB6v
5fQauUapxjmclzgjV55EdW1/xOxnZBk+IafpoqIrmq4pel3Tm4re1vSOonc/ SO2EPNNATnf7
IXv8RBa/sIrf2MAfbOE7HugqdT/Uz0d4LDEFNX0GW/HkP1BLBwgqqtLSLgIA ABwEAABQSwME
FAAIAAgAxl1+PQAAAAAAAAAAAAAAADwAAABjb20uZXhhbXBsZS5tb2RlbC9i aW4vY29tL2V4
YW1wbGUvc2FtcGxlL1NhbXBsZVBhY2thZ2UuY2xhc3OFVG1v0lAUfq7bKDDm 3nTKXnTOqcOX
Vef7XEwIKdqMFUIL0U/Npd6xTmhJW4z7WcYvxg/+AH+U8dwCuiE4kt5znvPW w3PO7c9f338A
2MGuggsM647fVsVn3u60hBr2hBmLCnc+8qZQMMkwd8w/cbXFvaZabhwLJ1KQ YLjmB01VOC23
EwpVtA9J9wOhav1Mhilh5A80hoXS33wzClyv+YphpuB7YcS9qM5bXZHENEOi 1wCDIgzTrlX1
JC4yZI+iqLOrDrrclh0PAtMysFLVivo7hpTQDdPKGwV65UbpvD9GLUxZb3Xj DQPTJ4gSMMzH
Bpsqlita1dI1k2GxZytqeatW1exCuWZYMpwxLGmmVZVOq2wP1IN8hWFltMO2 97X3DGvjvPV8
qUa9b47x/9MCzS+5R/x7bvSaYWIrV2eYLPgfRBo3cFPBBkNuBA0unWe50EnP YBO3KF9Wox62
cuczmCLK7mQwh3mG2ZLrCaPbbojA4g05m4WS7/BWnQeuxH1jsiki64g2gFaP XjFmgwotHoY0
oMVBtF0J/I4IIleEvd7GJFbFoQiE58jpLlGy1ls3y+8rB7zDsDzaYe+Lk/8W z0cU2uhGsvjq
mBrxMtOFIXePqyJ3Ij84OYfRfhQVTpt+N3BE0Y0pPMP3trxFDBnd80QQUyRC BS9GD/lM5mbJ
jUTAW0RecqDSBaadoWcK08hCQZL0lNwqpAlnTuEZwrNDfho66VksYPGP/RLh y0N46RS+Qvjq
EM4OxS8P+VdO4dW4yzVcI8t1stwjKX/KN6x/xe0vcdAWnWmSwB4SFJyLrfIr dpcSpLyPB7Hc
7mMVD2P5qC938DjOeRKfT/EsrsjwnJ6XidRvUEsHCFlleuWDAgAAQgUAAFBL AwQUAAgACABB
aH49AAAAAAAAAAAAAAAAOAAAAGNvbS5leGFtcGxlLm1vZGVsL2Jpbi9jb20v ZXhhbXBsZS9z
YW1wbGUvU25pcHBldCQxLmNsYXNztVb5VxNXFP6eBCYJY61xA2stUsQg6oh2 scQdE00NkCYR
RdvaYXiG0WQmnZkgtHbfd7uv/0T9AaWe09Of+0f19JskCoSAWE45h7xl7rv3 vu8u7/v7nz/+
BHAAvylYI7DNsIuanNKLpYLU3OqQtcxSSXpdfQoCAo9e1Sd1raBbeW147Ko0 PAUtApG53UzZ
svSxghRoOWxapndUoCnaMyIQGLDHZRhNaFWhICiwLmVacqhcHJNOrnoikrIN vTCiO6a/rm0G
vAnTFdieWs63GK04ZSuECDYq2CDQ0Ui6MiR0w7OdaRWbsFkgJJND2dyJoYG4 QGdDE/MPxVpp
oE1FO7YKtBqO1D2ZmzCtPKGL9jQ6XvnKY9uwXcHjAm1Lyah4Ah0Ca/PSSzt2 STqeKXntLqq1
nbwmjYJZcqUmi1c0qijallb2zIIWH9RLsSA6BYJ5R0qPmoLoEmiWxZI33Ypu RBXsIh4PUqKi
B7uJYqnsCRyKpurjHFu807N4K4Q92Kdgr0DPklimdeOanpddKdOTjl5wVWjY L7A+dyY5dPry
5XRmOB3P5JLxrB+RerelYTtSi2fkFelIy5CxMJP3KQUHabFedlz39DHTGicm vGJiDlYVT+MZ
3rWolwRGo0sZyXpO2fDK9DHBQJcdGVsci/k2kjRCJGt2/GQ5hH4Fzwn0PsQx FTEcFlDsMVc6
kyyAdINgLHSk4u58ldWzfv1ovKOWHL6/9tNFAYsytlIFk3qhLLXzjun5yxF/ FcRxARbxyQX9
gHDxaBhHcMqvcBbUrpWl0YiC0wJ9DwjfKS5PVpcDtuXJKS+MBFrDeB4pBWcF Dq70RnNoMBMG
McRWVAOb6MQtz5kWuBldDcKrCVgV73kKK5Azz9PIKHhBQFtW02KYVGSRY6fz JSq6hFBXfrsl
3Pl/z58rcVWVZFZxmp/+DycegHkNJSI7ggsKzrPZrkRexSguCmxgo6Y5kxKm bWU9Ngi265PR
VQc6iBfZvidkoWD7tfSyist4he3drdhj9LCpUUMYacUYxhUYAkdX54EKiSv+ e3Lf4MZog1av
YKLuWamY4ivsmUVqrUISwlUUFFxb2CmmXU8WVRRhsQtLx+GdqgZMW0uzi3iM odSL7KB58GV6
FZQI059B6bp8Ouo9qnYeBtLDpIIyg9NAmYrrmGJfLflbBasOxpoKH8Y8XlPx Om4IqDQZnzJk
yQ+xwJYFRnMTjn3dB41238TbCt66Z3fhZxXvVNhOqeoKH7+coxu8Q7NXZQ5b l+YN5AP2/MYi
cHg1bYkMa07gdI0uCBx5yJRd8Bb4zGt8jFnXt7yWxX2JJ5XaV4HuldUq08it 5NXcxQSOr7bk
yFXdWgF3LtZVl9GUDmftsmPIhOlbV2skdJ8fe8Y5bhkF26XhQelN2KzI7xji pbmrih/wI1lu
UTeZYpujlxolJa0kLUs6AwXddaWr4JflGG6NYLGE71EsdIBh4n8zyf4a+G93 kKsQZwc58jFH
8+7bCP9e+azyN1wR24wAP67lTK0K4RGs48gw3FMgjnM3yL0bt7B+FlsEUr2z eIyptiPy5Cx2
NuH8LfTeQR93n12Dwbs4Mho5FjlxGwNDd5EYvY0z/YH2wN49kR13kBRiBsP9 ze3NMzjX37I3
cmkGL7W3zILA/oV8v3ILZrsyC1tgBq4/m/Znb8z5fZE+A230bDtZ+g7y7g4S 607s5NjN3z50
kTDuIseK4igp7zHsxgmOpzgmuHeWBDaNXmSwDxdITMexn+2nj/3gQAWHTPWu NRxCcPEu3iMS
3XxE3scH9OIACcmH+Ihwx6j5Y3xCDM9Sw6f4jEhlaOdzfIEWam7Dl/iKoWjC zYr/X+MbjgF8
i+/xE2cR7u3Bz/i1JVRBn3//AlBLBwiuU12/egUAALANAABQSwMEFAAIAAgA QWh+PQAAAAAA
AAAAAAAAADYAAABjb20uZXhhbXBsZS5tb2RlbC9iaW4vY29tL2V4YW1wbGUv c2FtcGxlL1Nu
aXBwZXQuY2xhc3OVUstu00AUPZOmcWJMkyY0QAmU0BacFjAgdkZsWlVCsqiU VIkQq4kzdSdy
xpYfLXwWq0Yg8QF8FOLaifqQqKJ6cY/v68x9/fn78zeAd3ipocCw7gYTS3zj k9AXVjyDnpJh
KBINRYbamJ9yy+fKsw6HY+EmDKUPUsnkI8OS2ekzFPeCkdCxhIqBZZQYqo5U 4nM6GYroiA99
wVB3Apf7fR7JTJ8bi8mJjBlazs0V2BQ14VIxNM2vzmUlvSSSyrM7fR2raGio M2wEkWcJ15dh
TCxniXUmR55IYmtfxqHPvxu4hzUGnWz74pinPjWyaXacBWm2jvt4qOEBw5ur oeNj7gprxBM+
lGpExeTJvcHR4TAW0WnWYWxgHY8YysTXFdyfMHTNhe9dr8gNouuvBBf0Vs5p a3hMM7x5hFtv
dbRQ0fEUzzS0GV7dit/AJrYYVqJUDWRycjG6A/OWdV7ZXjdVKvPY+fXwyKMr aPxnvQzaaDYV
hvbCwdFue0EaueJAZtdlzPt/ndGS+kkpEe35PI5FjDboeJF9BfqjoyWpkWYR MsLlnXOUf+Ru
nWQpN9Zwh6QxCyC8S1jBCqrz5AFRFggbU9Sc3Smav9D6co4nU2xcUjUplUJQ xBrKpFUJ63if
Uzdn6djGc8Ii+V7AJPICOnn+DnYJdbK08trxD1BLBwgAKsYi9wEAAMsDAABQ SwMEFAAIAAgA
bGh+PQAAAAAAAAAAAAAAADQAAABjb20uZXhhbXBsZS5tb2RlbC9iaW4vY29t L2V4YW1wbGUv
c2FtcGxlL1RoaW5nLmNsYXNzjVCxTsNADH0u0NBApY4sbAx0wRJrEFsZUCuQ wg8ckbledMlF
lwvi2xj4AD4K1bRDJbowWH7Psp/9/P3z+QXgFtMMI8JFFRqWD9N0XrjfpZe1 a22GY8KsNu+G
vWktP73WUqUMY8JliJal8q7rhaV5Uxyi8GLXQphaSc8xdBKTk55wdT1f/h3R tU1oeUjO82Jl
uoIwKZ1tTRqiEB7/MXK33F9Xpqg3F4eVexXOyzDESh6cV+V86+7mt1GtEI40 TvQhpHYznCqb
KBshV3S2RecbUEsHCOhzcgXPAAAAMwEAAFBLAwQUAAgACABwaH49AAAAAAAA AAAAAAAASwAA
AGNvbS5leGFtcGxlLm1vZGVsL2Jpbi9jb20vZXhhbXBsZS9zYW1wbGUvaW1w bC9FU3RyaW5n
VG9FU3RyaW5nTWFwSW1wbC5jbGFzc5WWW3AcRxWG/95dabTySJbt2FaQbMvG l9XK0UYJlySr
KJaltbPx+oIlK0RclNGqLa29mrX34sQkhGBIuORGDIEkVFGhoHAV5QdLBLng IZWnmMorPPIK
j7xyKYrwd2/vaDyalZ2t2pmenj7nfP336dPz8f/++AGAB/BzCxGBVL60mJLP OosXijJVqd8K
vKYyE9VywZ2fLJnGcedClv0WYgL7S+X5lMwXCxcqMiUXz7JdKjfsTs6ek/lq fWyrwEBwLAMu
ltxUrVoopg47lUI+Q9d7M261fFnAPpZ5aiYznjkyeiY3KbA5d8655KSKjjuf qmOkBTqnRnNn
Mr5RsQWnsiAgsgJtw4zkFqojAtFE/xTfjZXmZBwCXTYstKnWZhtxtAlszBVc eaK2OCvLk85s
UapwpbxTnHLKBfVsOluHtcN2RLHdxlZ0KB/32mjHBrqvLhQqAkO5Tykjp2HL iapTLeTHik6F
LvoS/blwWTN6RDqOXdhtoU+gPyTYhL6dcvLnnXm5N1eoyrJTrNjYg88KbMtM TJ7Onjg6M3ly
ptE8PnpKYOf6IQW2GMgj0qnWynKsVHOrWlpqvWFeVicvX5BzxyRX7h7yr1ks xdxvI4kBgZ5w
iJkZLrnAnmYko1W6mq1VZbqdut9nYxApxpbjl11nsZA/Kskzmsg2MydILU90 p2imkJ6e9oPW
szVtYYgpEuRnnIp/jlsTa6fYP6W4Pm/jC/iij2tCcR36NFxroVT+trryGR27 o6H2lFOsSSVs
2sawEnZHM2H1PqFlxW/JPUKXphmTWr/tiWyoKmpmh23sxwHVGrfxsGpFccTG YzgkED9bZ8+O
C1hlWSkVL9GpmGYMNUsVlOGZQfnzzHuzn2JSa7ON2oTMWAU6abM8PahaX7Lx qGpFMWEjh+O3
VwRjRJHkGbeinMYSWeUiii/bOAMln8xWJhpvpttxP75q42v4unpzscYdEljU Bse0cvK0jafA
yViU/nGWGEWUtzGHAzRnH9elHWexYGH+tuSpO7FRwD4qoYqTKkK0qS5IvZZW pe6QXRXthlvq
vLq20WtjlSpec39Y2q3tUnhlG67Ca7lkvJSKjWVXs1ClVmBvSKnxV2U1iqrG Jwrzrl5fgSfu
wmR4LdLanhGN+Q0bz+F5gXZWFLfqsA6XBXY3r4C+fHzBxrfwoqpMxnRRulWz h8KnZnyclmdl
Wbp5md6AK/iuhe9w66wbT2X5SwIjibvfxKGl5Xus7ncSj3LnV6XYdQchguXW 6w5NZr2pXrNR
xIOBZGqMCN/6P7JRAsnaJ0q1cl4eKajt29vkRBtULgSea0Ie/DZIr5tOge+C u8wsnqlZl/rp
w0tWLPyUwt/prOQeaZyWFt4R2HdXXNxhmgy7qVOU/xZee9UXBr+tetX3Be8x 9Y3A+3Y+2ejg
qE4+DfGufnHxO2zkf9MSHyLYwmsnnQAJGj5Ak124R79RjrZ65sPsUQ7akzex LRn5PbqD9o9w
/AdESGt7uz4an0GP9tSLHcbTIO/qXWwZO294Plp137jPNubZ7sU+Y3vQ2Eai 1wOWJ3yWEWMp
1BFiLB+iVOpdZzK6jEQstoKDH+L+YPwnfV46PS88FYyXw6SJaBWUl4EVfG5V hXb95mkq4Ggv
2+ojjRfVeojqKv6HQ6ioxiPNqAqhVI+GUCkvYVRlUlWaUI0YKh6txt8P6C/G e7Lnt3rMbtR/
QicVEy25gtEbvIzdSPb07riJjCKO6nibteXz6MYLXPEX+SF4RcdN1j16cZM4 yiQVuvU4spoq
iSfYiuIY20zs7liMA3j8GqyrfKUSbchg9Qew+pJKvBWcWDKNU0vJnoM3cXrJ o9vJrQK8SrrX
0Yc3OLM36eYqI/+EZ/RbmrSvHsQjHfJIh6jVJEkbfG1KOJ73hu8lvlLTGDR8 BwJ8u5LL2Kjx
lrGpTncTTwbhfkG497gJf0mQX9HHr7kxf4P7cM23fIMe3KCBayBZFh/49WCQ bhkk1yDNB5Ae
I9EtbFbr+RGs2DXcG72GrexUPSv4yjuw2BGLXSdxfdzYbeM2qR7/ODWlmeuB bLjBKS0zu97H
AlZ803C9abi+aWxBR3fXIRHhH407XzleEXjdTGpP8n10R95DNyFmc8mBWxrC Yv5Llif1Mgjy
EVP9Fkvan5iaH/tA9hiQDnThHJe4DrIf0U/UAEpq8XuLF/EJ3TWe1V38R5fF 814OjBi21mTP
bSWyvg3/zDX6iy9uqydAq67ZahvOecUhZYpdi95ugZrwV19NaPFqQtGrCasg AyrlAiB/o83f
m4AsmnrghoKMBUH+EQrCA9wYn+ZotaFsGl88rmhOHVz1UT86/knLfxHt374N aHtINktXmz7r
LFTZUorXcIn3Z7SfZ3UcaSbcwziXcyoZxDV0DfDpm3/AtyP4EC+vVimtgoii RcR8KvSYkC18
/j6rYD0NbET+iw4LV3IWXu4apS4/NFPb59PlYlAX0ThGaVLEK8ak31DGkwO6 RL26tI5Ziake
bvbGetHmQgFnm5pQkzd166oR9MeshmrLRFiG3sLPWuNU5G282xr/P1BLBwhN ZoFddAcAAMUR
AABQSwMEFAAIAAgAxl1+PQAAAAAAAAAAAAAAAEUAAABjb20uZXhhbXBsZS5t b2RlbC9iaW4v
Y29tL2V4YW1wbGUvc2FtcGxlL2ltcGwvU2FtcGxlRmFjdG9yeUltcGwuY2xh c3ONVtt200YU
3eMklu2ISx0SGgjUQGicBHC5FFrMLQmmuDGBYjcl9Ko4gyOQZVeWKfTOT/Qj +pTyQBbNWi1P
fehHdXXPSI5zsQNeS9KMdM4++5yzZ8b//vfnXwDO4JmBiMB4uVbNyCdWte7I TCN42Lxninp8
wyr7Ne9pnmMDvQJjNa+SkWXHrjdkRlYfcFzzQo/cJuOoQKoD9iZYgV7btX2B 0fR44XXGWVrP
1JZkHP3YZcDsSiZ3xyo/sipy9K6s2A3fe2piN/YIxPJzxdLU3EyOWRfe0DUb w1sCw8u+X7+Y
adE7pagGFPtJZsDEPgwK9Fekn1vP7Fy68NB6bGUcy61kir5nu5Vs17CtFOPY j2EDbwukO1vW
nWbFdjM5Nbmjxyq5AwITXaC3O2QTDDJi4hAOC/Q4tYrA4EautxcfyrKfHZ9P gC00cQRHBaKX
VKOu0CE9Pm9gVGCg7ZF7UpZ13665AnsKtivnmtVF6ZWsRUcKJAu1suXMW56t 5uHLvf6y3KKE
o28igLhshxosdGBAm11Fn028ZdV1rAR6kKJy/GW7ITDZKUhnuRMpWvak5ZPu 1XS3xs04VqPR
va9hLfu53M4ZOCswshOOifdxnjWkjvTcfmBLL39dFz2vuvGBiQ9xkUoLiJWW KSpidl48+mtW
uV0ycRns3XDglgvUWKqFA5ZKYD9BdD2bvu1k+Go05yr9G7gmcGjH9AxMs33t ZuQdR1YsZ8qr
NKvS9dd7Y4Cp7N+6KKabtrMkvRhuMK/SskyVVeqpsQRmcFOpL79Fn621NK+q OmuigFsCBms2
Z1XZq32tRDYaK7DbJu7gE3bVqteluyRwsuMK7cKPG0FR4OBYym6k3JqfslKP LcdeCtjqRqkY
n5qYV3Rifi3wTmAKNxlT6oYKHN5ZSAY+FzjSTaO6o0qbCdxXou7zAwEc66rq dQ+1dop2xbX8
psciXe7c7UvbC7L9zRWyXBTIdIvZQV4BZ0txHpCd1He6awZd0JjPXrY8WLXh pv2aYyS00ivC
NvEQj8Ite939aPp15wJTr+50rq1DJQjcnlyXdU+WufSouuG7Tde3q3Lebtjc n6ZcqslSy4Pq
GNpQ7bYPTwUH3Bx8NNUO2D7FdtgyW3wZvFhremV5w1b77tC2be6Uiihg5l1X elqEsmHg+9b+
vlkfBn7k/rrpA1UYfvqF6t65elwXrXOV65rbGq8+/hcxEOcV4yzO2TNEOAJG nyOR3PsSyQhe
oW924h/smliZfY6hiRc4uAaxsIp3VrTlAM/fY0Q7zvEBRJUvD8XjSOJdfhnH ICYwghOcAUNE
302bMaQ5G2TccX4FJjWPSMnAMYOgPPRCOmf5VEH6JlZx4g8OIjpOgk/gPHpx QeOagRFO4hSf
XB54LwT4jW+V7ezkS5wW+J1Dsg1+QjMCDjKnCyu8ZV/h6soaphbWMLOQzK3i I3p9LPACc8m7
vL1AaRWf/U2XIN0kCQDXmN4UOU8zmevraTJkSEeN7mGB4SY1yZ6RXpUkz5KQ 4zTNlUNiDfdZ
1y8KkytbMp1jf25vgE6E0DHOvsRXukg8ZDj7Wnt+sxXXIm55O+49Iix0wV2C 1LgPUAl5ngmb
EWOpll/BaaNF9fvFDb2IhUhxuPTvQU0Xoh7afqu/KKUI/b73ObytaFWNFtHX Y33/Dk900SN4
ih/wU1T9F/0Zv0bj/wNQSwcIuwy8ou8EAABWCwAAUEsDBBQACAAIAMZdfj0A AAAAAAAAAAAA
AABFAAAAY29tLmV4YW1wbGUubW9kZWwvYmluL2NvbS9leGFtcGxlL3NhbXBs ZS9pbXBsL1Nh
bXBsZVBhY2thZ2VJbXBsLmNsYXNzpVf7dxvFFf5Gki3ZnpBEISYJ4WE7Ibag EaRQIHKA4Nig
xnGC7djgAmEtj51NZEmsViFJy6MU2kJfQNNHSnk/ArSEOBCnhnM46W9AC7/C Ac5p/5KefjNa
PSyvbPfUPrs7e+feO9/97p27o8/+8+HHALbhozACAl2p7HRcHbWmc2kVzxcf Nu/xITPeZ6UO
W1MqyXEYIYEtWWcqrlJpO5dXcTU9yXHW8Sx65yk3Clzp43ueW4EW96Cdmert SVv5vMDl/f7u
i/MJgfVqyHVoMJztLQ72WLmSccTOJzO2qyYExJhAk53vcZRl3lcUp2wrbR/X 75FuLkHBLQLB
zq4RgVBPdkI1QSAq0YwWgZX9dkYNFKbHlTNsjaeJNNqfTVnpEcux9bsnbOw2 biK4hNgOum5u
e7wU8FYdfDHoJqzHpWFsWIyRPivlZp1jEhtxGcGr5MDQ8M6Bnl6B9v6ljBLN COIKibW4UuCG
zv5D1hErnrYyU/EiSYl6tJbsu0Z07O0SYUT0aJNEU3F0lYREix51SqzQzISY MbJ9tR8q/8Jh
3kKaJvrt7KofjGeRaMJWXBtGvG6xleps06CasvOuJu06bGNWK5x11Yu41jTR wtWul7gB32Mx
Tim3t1ya1/sQuZRf4+4miZuxnaVFd2Sw2s3e8UMq5dLNAlEzKe7WKVypR7dI 3IqVAmtTpoQ9
7z3ZjKsybl5r7JS4XWust8uF7aO1S6JXazVOOkodVxrdHRJ3Ikl0uQLR3eSD bll4BVa5B1XN
bl4x5HLIPWm2Rxh7qFVryTyRl2G97bkfOusyWtrya0raB/Y52ZxyXFvli5VU x3BQTSpHZVI6
GUPYH8awwMbFFpEYwahAq84+81xIuQXHSveR+IKj19rssxareDqbiRdcm32v n6XExe7BD8Jg
52lbUlkXyL3MbmfSh9kw7icxSwVXwVvTDgU2+E8c2K2OLUrcTpeq4wVXEUKq PoSyGmmts9KI
lS5wehWn5zWqJTpApZ0JHJSwcaiY/lKfSmbyrmVib68fRbWTtMQ0MgKyuI1K X4o2zfuiZaeN
cxIPwmEUnnEV9e2di5snu0a0B+a5UO2hzFwED3FPFmPXiuxgx/FDgXBeuQPW tNKl4dN8jNOH
JR7Rui1aN7/PUZP2US1/TOLHWh4x8v2DyTB+IrDOh2yzmyJ4UqDBDLX1zyR+ jqcEmnU7KfE0
sUSYVRAXCDzMY2Njy6D6FxL7cJce/UriAPZG8BtCyZX3u555VuI5/FbgIoOw Khn/qIuy0gkW
hWBP2sqpq1LlZOF3dYEkmVxAyljpbxkdK4zfseSNB9MtuJk29Wb4nYrgD5zw 2WuampMSD8DS
H+nnJf6MF1jwxnO5L2+qt3KVFhvYS3gljJdZ3ktrS7yK15ijSgMQ6Ki/KXdZ rjV8LKcSEbzB
T89hdUzjPiXxFt4upbSqr7xVN6WVHrWclP5/CVtGo9RR/EViAlYE73I/HdGN TwvfkziDGYZW
3PqDKp8tOLpad/wPpwrHs4qXzPk5bB4yoz5bHz9bF5y1tmrnzH8yk1GOCUfl w5jlp3leURGq
Kasw5njqXvxMw5ZSOi2hjaEFeTXwP6BPi/wlEdBnRT6b9cnZvEvvucI8Wzh7 EVbSahXfuvjU
fw3B97F6xqitMcYB3nsQ4vn3YiPV19qy2b1mWeDyWLT1LNad50CcQ5u+dcSC 57BZ37ZU/G1A
I+8JQmvn4l2UvYZ1+BiXodv4l0VvnInx2YSrcY230mlvpbGzWH0Sq8/iO9HW OXw3gAtoOOO9
3RjA3yFOYlXl/RSaP4K45zwSFyB2hxhcbBY7eN3Gq8foxebQF8Ro7Ay9Bw3K dkPcIBHtJ65R
3IYx7MJ9PKA9gH5W1d1QZbTdRPt9g3Y3rwiCF2/sC1NLYAB7PexxPjX2htgH aDtTJqPRCDNV
gTd4gQvddz3jHdTWc2u08RwGmek53K3jvq/W1UNVrtaUXR3wxdFRa/yYLw42 MB8cHfNwjNe6
esoXx8QirkL1XD3n60ph0nO1zQspwnROXcD6Wvvnq+wjZftbywX8tFdWCULZ fBKhmVhIV20s
OIvDupA16RxnY7GQkXRoSQcleTOgMD9TUzfv8n6am2wGrTiLK/ABOnGOP4Vm sR3nq+AkPDi7
jb2IUHh7CZdoRNQoneIqW0q4tsSiR2Zx1Nx/xB03i0cNwOjj0SeCQWL56WiM PDzN65ci+msR
DEQfpzzES88+M2owR09Efx8MBkvaf6TsT3N4kT+lXxfBUPSE1i4avGkU3qko /HWhgkZxerTC
wTZGB3xCDj4lB/+k7HP+zP6CPHzJ+vsKe/A1d9I3PCx9yw/bv/Am/l3Fyala TgKkUGf0fdII
chLACZJ5vlH/Gv0bPmxs+i9QSwcIDUKuGPIGAAA4EQAAUEsDBBQACAAIAHBo fj0AAAAAAAAA
AAAAAAA9AAAAY29tLmV4YW1wbGUubW9kZWwvYmluL2NvbS9leGFtcGxlL3Nh bXBsZS9pbXBs
L1RoaW5nSW1wbC5jbGFzc72W31MbVRTHvzdZCIEl2EJpFahQKE1C2m2pv4PV CqFNTSmSNCpq
6bJcwtJkN7O7QZlxdHTGJ3899y9wxuEB+lAGH5w++0c5nntzSTMkSH0xM9l7 d/f8+JxzzznJ
X3//8SeAaWxGEGIYs9yKwb8yK9UyN/z6YtPVKGzYTilLuwg0hknXKxncKttV nxu8sk5711OS
mXurm9wK6rKdDOfamJTWGDpnbMcObjCE44kigzbrrvFuhNGjI4Iuhr6c7fCF WmWVewVztcwZ
TudcyywXTc8W9+qhFmzYPsN47kT4NIPO84EZ2NZs2fRJaTSeyLUPJiMl0lH0 40wEAwyJNubz
clk0rUdmiU/k7IB7ZtnXMYizDB2F29mFWwzn/90DQ79imudmUPP4rFtzApmU LENviQeLnlvl
XmBzAp5oA0xgFdcxaoFN6b9rVslkNG+XHGmN4c4LqMzkNs0t0yibTsnIBx7l K9365IbMxqs6
RjHGcEqGt7KyuHRvMbNUyGbyDBeOC3WJr3OPOxZPd4OOSscELjL08Lltx6zY 1i1OAd+MZ49T
J4CaRdGYZZWj9PJyogmwXnPpCC7RkZ4UK0OMZ50t7vl8iVfcLUrRT/FjPGcd OlLHLKuqTrcS
KuuOG9jr28aCWGyLTtN1ZjdM20kfm/tjNUSGpnS8gqEILjPE25PJcBp4OdsP epCCoeMqrlFm
V03ftg7D24q35up/CSSM6zriSDB0ucEG9zLOGsOlF8w1VfF6/bSzcwyMmkGr +CXqgWv/mYT6
iFrMekSnfzg0uKy5s/Fs20rqwSRu6HgP71MjVkTNnIorMZl40WUivA90pDHD EPG475ZFrtky
BSviKWxXpZ+88DNItd3iJFGMgKK6+qJFP0GmAmrEHtzGhzpyuEtwvjB/ps0B J4oC8J6OedAQ
6nL4l0WzXJNDtEWWZjG/70hTWjybKIrw7+soiincYZW56Qlbn+hYQl7IZv38 oeyykP1cxxd4
QGmw/UylGmzL6bUsdB7q+BSUku68W/MsPm+L5McaE/mKQKGpnHUc7sl5yP0I SGT0pGlLIR3O
2wg2jm2T1iwSpcojxqjTwvTtoJ/AKDTxq0N3Ubq7TiujtSO5j+492oSg07Wb VlBBa0igl3Z6
XQgx9NGq4SWcUgauKAPaE5zebeh3ymfTTbpaQ/ccXla6KaUbCu8c0Zxp0gwp TSYmBd0Ny2cj
0sJbxCRkYsnwE5zXtKe48AyTRznmm6zFGtaoXRXHD0Sl0To1/DvE5wKef/qT T5F8htTU5QNc
CWM3OTV8eR/TwkVYuojRCixigGpmHAXpKlk3p1yJ3Wt4Xbqfwht4UyZ3iuDf Jt13ZFJCAzF6
Ty2mkH5RSMZQHWmyGWnkMboE1q64HOBdRlhDwyP7uPkc67RUf0BYDylXJi7B akIzGmiGBGJy
N4s5iWYgQ7s6WgfCA11REqDuUmzf0SsRc0KxjbWm63bqAHdC2EsOpfaxsNeg GpQlWCEql9Sq
lGmPzsGXZKN1ow2yRIMsQen9iMgOU9VLT6lBFY5HbwT1hMIZOYpzgAITKPv4 +CjJ10TyDWl8
i/MU1ji+lySDdXsNkglFcuhfpIOaXfmvKf8p5f9iq//PGB4jEv4NmrYjOFZ2 jpTPj8TxMx3y
r03+Uw3/qSb/9L90oI+GNYmYssxX6WDFcYfoL8sa1jujNDRLsDuj/wBQSwcI gkiU9/MEAADz
CgAAUEsDBBQACAAIAMZdfj0AAAAAAAAAAAAAAABKAAAAY29tLmV4YW1wbGUu bW9kZWwvYmlu
L2NvbS9leGFtcGxlL3NhbXBsZS91dGlsL1NhbXBsZUFkYXB0ZXJGYWN0b3J5 JDEuY2xhc3Ol
VGtT00AUPUtLQ2sQ5FEEH6BWaAsSCj7QVpTplNGxwoxl+L6kSxsmTTpJqvKv dEZxxg/+AH+U
490kVoEU6NhOkrv37jl7z727+/PX9x8AVvFSwQDDsm63NPGRt9qm0Nzg0/EM U6v59madtz3h
bHHds52jTEFBnCFzPqb2wfD0JkPCaxpuZoXWqPazSJGQJcMyvA2GQrY/aG6P IV626yIJhisq
BpFIIYZhFQquMsSycsJI1bDEdqe1L5xdvm8KhrGqrXNzjzuGHIfOuEyfYaWv DDIFSj+pc1fs
Ng2rwVCOVOAHi7mq7TQ0oZtG2xWaaB1oNLVlW5ple8bBkRZSF1NI47qCKYal fnJRMY0ZEqc7
gntBPuEEhlz2sotTN+z9Q6F7DDO9pTBMSdGVmufQcNcOjbe8zbCRrR7y9zxI lDyZiuXJXl06
gWTNaFjc6zjUlXokWSlwmtxqaMHKxbOejb4KflfFPVm+uaB8Ecq6xZyM1MeQ Prmtjtp/tlbx
PzTQvq6LA94xvTIVnOFV9owooduO0Co7ftv6Ep1XsShFT4SiA4qu0NkLlpL7 qkev/yoJ56bo
hGoqbuE2XRDnHpJI6KqKcUwwrF0sPxL/SMUCsgypmt1xdLFlyL5MRx2jZYln 2LngHghuvdIl
iy37OFKxdNN25WYSXtOuM6ivLUs4ZZO7rnAVlBjGI6qpgG7G4RMBhkE/hDmS FqPrnY2OysuP
LMV/hsifJGsdA/QHUvnFr/T6BvUzjQYwIn1+hKjwBqNkqWRL7zWM+X6qd8hS oq+cO5T/gtQx
Jj91ORI+ZtvHp4M5IV5aN3CT4kw2nWKzPmrOZ9w+yXhHMsb+YXzXkzFD8fvd bKVn3l+Duhud
be50tns9uZeojpuU7YOQaT6sXiK/eIzl0zzM56E4YcaxEoUpnIdZwFoU5mFP DOJ47FtPwlqu
46nvTdP7GT1j5GMIfkU8x4tE8jdQSwcIUeiButMCAAD/BwAAUEsDBBQACAAI AMZdfj0AAAAA
AAAAAAAAAABIAAAAY29tLmV4YW1wbGUubW9kZWwvYmluL2NvbS9leGFtcGxl L3NhbXBsZS91
dGlsL1NhbXBsZUFkYXB0ZXJGYWN0b3J5LmNsYXNzlVXbThNRFF2nLR1aBovI RW6KCNgbjIh4
K4JY2wStoGlDom/D9FAG25lmOqh99AP8AH/AJx8Ub0ETg08mfpS650K5tEJJ kzln9jlr7bXX
7HP6+8+3HwCuIC3AwxBX9JLEX8qlcpFLFWfYNNWilLXnC3m5bHIjLSumblQF +BhmdKMgcaWo
litc4qU1iRhKuiZpuqmuVSWVYNJB2CKFGMSSnufFR7LyTC5whpFMg8xOUndP gqHNxmRfqKay
zjDeCLJPrLOPYIGsWtBkc9OgPMtNgWYzR1flFpSYI3b/rKqp5hyDNxxZYfAl SWMQXoREtEEU
cJph8iSujk4F0YEzFrqLYSp8jOCD4ERkJQCGHhECWq3ZWREt8AfQj0EBAwzD x9ksYgh+8owv
LmVzC0vJFEMoo2p8abO0yo2cvFokFzszuiIXV2RDtd7doM9cVytU7MkEM7Rn TUr9UC67PB1q
xV1M60auWqZQdzizIT+XpaKsFaTl1Q2umInIUwHjDEOHvxRXdINLKWdXG8YQ FhFBlD4UTxbl
CikcDkfqvq+Lsnck2hDHpIAJhsGj9omQcJm6ssDN1F4j/598r5H9uq3OMrKu LjJEMbhs7hrF
8Dh8TDsuWYNK/VifunHfBnENNwRcZxht5jiIuIlbDK15fffsTddLOuA7Kakr TMAsw1hTAskh
UzbIV4amayczHd9y66pWqBFFGnyPxqZYh8MmSGVNgyhyujuh1qzRdblbnJpq 4WBW3zQUnlat
Bu5r1OiTlh907S1qGjfs9uEVXKAT6qXr1wP7mNLMZx1cigbsaJBizLpG6NlO kRKtMxqHol9x
KvodHU9o0vkZ3Vvo/YXAFvo+ovcDbfDiHD37bcoYge4T/QO6VuLowQQGqXHP 04rokGGYhAAj
TuQvLTPBXmG4iFE3dZXkeGiMxijXW7T43sV+YuwNBmI7GNvGJYZtxBh2F730 q+nooexAgkqb
pcLmSMc8wliwNfQ4rK4GazZF/0bMVtMCb2CQ0cs0rroykq6MUPQTuq3UXzCz g8R72y4rl99W
nt/HHapxh3CbsluE87jjEsbtd0KzwxyVfR55XA5Gqo9HvmqIvNsE8nUDpIeK tp73kKIxSGsd
djX4B1BLBwji2hhdRgMAALwHAABQSwMEFAAIAAgAxl1+PQAAAAAAAAAAAAAA AEAAAABjb20u
ZXhhbXBsZS5tb2RlbC9iaW4vY29tL2V4YW1wbGUvc2FtcGxlL3V0aWwvU2Ft cGxlU3dpdGNo
LmNsYXNzpVXZchNHFD0tyR4kD3ghYIPZYxNZXsSWhCDFGITACrJYNCEJgZCx 3JYHtLikcQg/
kD/IQ34gqcqTQ6pIkYcUb1TlJd+Tqmyne4bxNrJJogd1z+3uc8899/btX//6 +RcAZ9AwEBEY
qTTrafmlXV+uyXTbG1Zcp5Yu63n5seNWlgzEBPoe2l/Y6ZrdqKZvzD+UFVfA rDcXZO2mXXlk
V6XAiWIImIfj78kIdGedhuNOC0STY3cEYjlCJBBFjwkDu+IQ2G2iC91x9KLf QJ/AsZ1QTQyg
WyAuC6WydamUywv0Fp2GLK3U52XLsudrJDdQbFbs2h275ahv3xhzl5y2wMkw 4ltUIPn9G0Ge
LL8CGn8thKxlZaYJs7vskvmcveyf3rXQ9DYInE0Wm61qWlZqznJbpmV9kfNm S6bznuiZseLm
PBAwXnaqDdtdaRFsZEcEsujBURw3cEzg8LabTZzAm0yazNXsNpU6lhzrhK53 ZBJM4KiJgzgp
cKsjE2/vf4k04S7J/Kv6O7oDgsDl/0lBSzWOSQMTAoe2gzIxhTT5yVyz4dqs vpbA8c5q+Q4U
+GmTt/Esa7YqXQ3lLDqyVbiir0hBCfq2EvQdgXPJwr/XTLk4b+I9XBDYQxf5 8soybwVrl/kc
DWHISq43G1715otOW0FkMW3gfQJoeL2kVkxcxIyA4bTz9WX3iWZ8VzG+bCKH YYGeBblor9Tc
nN2WCiVv4iqucR+JCOxLFsLLWSXZr7gj2yeQLuT6gPqKGxlyw6lNpuz2iOqC ju4sNCvDwA2B
oZCLby05jaqS4ZaJ2ygzoArj11aBqWRYr9CLYekz8KHA3rUI2DVG8g239UTh f2TiY3wiMKjw
82W3RRCr6U+4U2AsWQw5G363zMqG6hMFgS7XI32wM2d2h5ZsM8eqx4ag7pVh vPaF0mJhUFeB
TNhqdh26h5TZalHZO7qdwhq/u+l3kJlQeV7Tk4eVKDdXWhV51VGdvH99u59S ZwSSWevCVmGm
QzNQaLBx6DqUbQM1PhUb6DEhmiCOM/lRPuM8oh5LzgzO+YDyP86vRxwFx/7U T0g8hfkS8afY
8yPMH2iMYS//BzgCk/yfQgJp9OE03qDF9A5iH/ZzHNxgGeJ4wLP8zQPC0Css DwwjgkOcR3BY
E7hNehG1MzX+HEf4QD7DyCq/o9p3tz6X0f72e/t8f2r2FpJcX/Ns+p5j6lkJ /IxpP78RUcUx
QzcpAYb6LXqVz1MCE89wbpXTdwVKk89Bfb9BT4rWS99hIDUZfY4rEbzA+ITP zdPlCGUEu5SJ
a/T6AR/KIvnM4RRK7HbXNeeU5zPgPINZFDTXGc0+op5Xnr1OdoNBjDN+HN5a kWtKy92IDv2B
QQPZkqGDYasPgpxTQYo0Z138toa/1+7m4P2En6AzEy9QKqUmn+HmhdiB2Esk dJRqvsolSy/d
2bKkZ2uBp1gGwF1SvMck3scIPmPQD3AW8ziPCoNfYECSMlS1CLNaKCsQweLZ TzUnyxfhMFfu
ESlKrF6iPaCn87R9Dpu2i4FtMJDU8iXy9s8H+yvBfmVTsg2ja+hPJZtS7XdE 9Nzy5iTBthuI
uKArZZZWlYWI2FyHj9fVYSQIJ8JQ72+ow4hPTqimG6Av+vXeCf2rjui2j762 NhSsVfQFzm25
V52j+Lqjn2RoFFGmUX0t+fgOHnJUr4rF9lHvjv8DUEsHCGeixG7yBAAAKgwA AFBLAwQUAAgA
CAAzVn49AAAAAAAAAAAAAAAAIgAAAGNvbS5leGFtcGxlLm1vZGVsL2J1aWxk LnByb3BlcnRp
ZXN1jrEKAjEQRPv9ioBX6uYHVLBQuOKsLG00Wc5IcrtsEtC/N1op6nRvHgwD M7N0LHcN46Ws
oZF9x1Z0ve8AzmHCMLlYPWWzMjg/gvlMYk/RfvfD9rBZ9PvdDyWxjm33luJf J8pCWgJluJ40
o+MkIRKyetLnEchc1RFig6zOAtcitby4nbbwAFBLBwgQQai8hgAAAOIAAABQ SwMEFAAIAAgA
wlZ+PQAAAAAAAAAAAAAAACQAAABjb20uZXhhbXBsZS5tb2RlbC9tb2RlbC9z YW1wbGUuZWNv
cmWtU8tuwjAQvPMVkdsrMdBLFRFQH0FCKhWiIPXqmk1wie3Idgj8fTcmUKg4 lKq+xMnOzO6M
4/5wK/NgA8YKrWLSDTskAMX1UqgsJov5qH1PhoNWH7g2ECVTxtcsg2ArRXQk 9ZDUCnChlLIR
1mKycq6IKK2qKtQyC7XJ6PtkTA4Qew6p7jyi1+l0EfbyxlcgWVso65jicCru 5zjjAs9FYcEL
gExrkR5NahgJFJMItkwWeaOi7GI2PvJh60sh15I2KERMDaRie+QNkNiHp5xZ K1KBpgMcP3K7
AqWbWHzx0G6+wuw8q+a9OVNyVxqWj4DhEy7QZ5CCgdppI1EYXYBxAlC0LHD7 qEu1jEm7u3dR
L5h7iRtKE+yBLee62UxYQQKulWNCSVAuJjgDEOqN0FMn11q72OlwTB756nGf bMPC0ok8RMRt
opzZXRXIg0P5j9IdA1nDjhwcN5hn5lj9IfjVv/Ad0z6HP0+yYTlm+a+z/DwT fD+7bYPWF1BL
BwisLew5dgEAAKYDAABQSwMEFAAIAAgAsGB+PQAAAAAAAAAAAAAAACcAAABj b20uZXhhbXBs
ZS5tb2RlbC9tb2RlbC9zYW1wbGUuZ2VubW9kZWy9VMuK2zAU3ecrhLqulWZR SogzlDzKQFNC
k0K3inxti9ELSXn47yvLcjJpXMpsxitdn3vPPedYePZ0kQKdwDquVY4/ZWOM QDFdcFXl+Nd+
/fELfpqPZhUoqQsQ02+gNu0BXSSfXucmYW6EwhPYlJsGLMe192ZKyPl8zrSs Mm0r8nvzjFML
MG3hrgmY4MZBbARZksl4PCGrtu01dS/k/6O9UoziwJJbYF7bJseEaZnBhUoj IIsgcZZ1W2K5
FceKq+dljh86E9sPKoP6XQQw4tJo68G2E0HDVU/QkvVYBjcrJVB/tLAEARX1 McFlo6jkDKOw
0QhOFYPvcGp9fm6/CdOmsbyq/ZqDKFyOSyoc4Hmgm5WBl1ed2bnrtMZlM3IH tb0hvi1lL7QC
h4yFkl9uLg7UQQLvjGNUcGe0owcBW6tPvAC7pilLb4/JFEJx6ZXhtZIPJErt BCwEdS7sj0gs
/m4m+zrcvzTSDa27yBxS2vOy6QNAzAYAFjUXxfWdsdqA9c0uBL+oNWfgktBu Z+LKcaymq59Q
gg23HtCQDJLoODhMkgtys/EmX6udt4Fyr9NhQ82wyyFbg9q/+kB0OPoH7QOr yAs0vYV32Xei
IoT+j9Bi3V/G8IshD/+Y+egPUEsHCCU3vr3bAQAAnwQAAFBLAwQUAAgACAAz Vn49AAAAAAAA
AAAAAAAAIwAAAGNvbS5leGFtcGxlLm1vZGVsL3BsdWdpbi5wcm9wZXJ0aWVz 41JWsEnOL6gs
ykzPKLHjAvL0kblAARXPFBUuroKc0vTMPL/E3FQFW4XgxNyCnFQF3/yU1Byu gqL8ssyU1CKo
XHl5uV5qBViBXn5ROhcAUEsHCFSQYIJOAAAAYQAAAFBLAwQUAAgACAAzVn49 AAAAAAAAAAAA
AAAAHAAAAGNvbS5leGFtcGxlLm1vZGVsL3BsdWdpbi54bWxVT01PBCEMvc+v wGavA2u8GAMz
N5M9mJioZ0OYyhL5CrBm/PfCLKtuL+1rX19f+bw6S74wZRO8gFu6B4JehcV4 LeDt9XG8h3ka
+IzKmpjxj3pXqXUy8JtxHAhXIX4no49lqoD9QwPZHZbdMI6NG+1JG9+ahHBc C/omRmIwvggI
SdN+h6L7qHVISDV6TLLg8h6l+pQaYWrrTaE3OjzHKRkBx1LiA2O4ShctUhUc y1sJV1xlZc4C
6pheqGcafdnScz94tVT9PIUFrQDXUhduNjcMbLPH2e977XF2+fwHUEsHCM2x 79vcAAAAcQEA
AFBLAwQUAAgACAAzVn49AAAAAAAAAAAAAAAAOwAAAGNvbS5leGFtcGxlLm1v ZGVsL3NyYy9j
b20vZXhhbXBsZS9zYW1wbGUvU2FtcGxlRmFjdG9yeS5qYXZhrVPdSsMwFL5u n+IIg+mg6QNY
hyITejPE7QXS9LSNtklJUt0Q393TtBPqtouhV0lOzs/3k8SLRQgLSIRu90aW lVv6Yzw596FZ
ms9ojcOWizdeIgjdMNzxpq2RWb/chqFsWm0caFMyFLVsLTJsCtprg2z1xIXT Zk958Tj2Koog
w1KqqLNoolwLiCIPYVshJNlyLEnibAmFNuAo3Ogca9YnpQ5ao99ljhY4CIPc 0TW6Suc+G7mo
QGkV8cw6Q61A1Nxa0MWvRh4IqvwIxr3FU1TZxi/PgxY+sUSFhubng0pdVksB Ujk0BRcIQ8FI
B3DnaJqFgyTwGQa9JsHI3EpV1ui0og7WcUUNRszFUMB86jn9grOUginUoMca /MKWrjfbh/Xj
Cu5OMSeLazapSPuIVNJd35C1Pzxe0HVG9cYo/ACdvSLpTywGC+YJNsttRTyT mHbzPxEyftRF
k45E8BnjG/L702x6Dw5fwHZt/9wxh2xPF9L+izsjmQsGnTF0fJ1QopsEPLEv iOOJi+E3UEsH
CPeV0fqJAQAACwQAAFBLAwQUAAgACADIVn49AAAAAAAAAAAAAAAAOwAAAGNv bS5leGFtcGxl
Lm1vZGVsL3NyYy9jb20vZXhhbXBsZS9zYW1wbGUvU2FtcGxlUGFja2FnZS5q YXZhzVhdb9s2
FH2WfwXnFUgbzFK3x9UxYqTKZrRxAlsptieDlq5tNfoCSRU1gvz3kZRkfViU rNpO5xdLJEWe
e+65vLw0Li976BIN7TDaEne9YSP5apTeRdObifOG/xu9CNtPeA3IDn0dvmM/ 8kCn8u9Dr+f6
UUgYCslaB9tzIwo6+Cv+HBLQzTFjxF3GjI9sHnjjYUrbBj0kQNqGzWAFBAJb wDNSa38ZDNAS
1m4wiCmQgRPaaDCQllsbQMPlKJ17aCxHaBUSxHizHzrg6WLQhHHrA4bdgCJs 20BpSGg+DhhG
4fIr2IwiFiICEQEKAZNLx55cB6Gh544A2xtkC2N/Gxr8vdKzAsxiAihcoZaR EMR+tQMHTvKZ
gzkgto1gN2BopDAkExA4ezxcU6hzsT6Xf7fYZiHZyoGSFvTkBs5VP9VGX3as IQCCGTiJbOKl
59rIDRiQFbYBJTOlRCP4zjgMijKvoueeJrylpT7JVBdgH3TZqnKipjRLK6PS BCxtziUZrBFM
x3cmukL9xM4+F4tyfRoJ/I+zyXmAzBd8agFlw1j0p2FkHuDeMA5Gdz6e5ouH mXk7+aeBLMpH
esDCgLubMsxjT0iY5UBPi6wspMl0bo2nN8KZNfrle4Wnl76YiBY3cNnbd1U7 CpGMXGcX4BfP
154bPCmntzbcfjEtGoI/km9Dgz+9XCQRfJT1irgsL9w+dI+CX9fA5Pdv39XT zCMXWX9Ppn9x
Yt9Xmcp2qiJLwnixlZIwAsJcoGI3lURcIB9Hp9MAug6Jw/f4PaQLLtX7B3Nm Tcx5HWq+aS6B
CG1SRmKbW4C9zBSaSfai7MRT+PBA9Lfm2HqcmYub+8epxfH/fiJ9mkksW2H6 cIejnVrTJmSF
KHvk3a8jXwWuHxRzzWxN0jbn1kyQbt0vsse78UMd6w1a/wTbgshxdtw5r1jq kS8Wn8x/O4bq
F+zF8P8x4Mv486NZ54HD47ZBzq8SyArTqpH9B7cwN3EG3BB+tKwcJqW7JOam CJc71V7iOcpK
IvE0walskXpjyMqB9YGYHPxRnoo+HEiLbMNRKzFiY8gTkqSpmJ/OytUOY82q h1BWxp7tZeKL
1tydF0E7bhfFqQ6luay+r/gb1mPmejqPKd0MGNm255BXUGJT0Bd4roGfdKYV DWw/8sLJ4nXT
VV9RWyaz9+Vn6e+b2EM7fdgQBbU5rEtM7HbwVqfJ1HV2/RfwFBc9yC2Z0jsk 9vzGQcHmgiM4
F6NpNn1tTvNlfx6rEoOa11VyfcCfMUM24Ykbko6sXNwl8fTO5TTk/dCyinIz vQERBJQaykY3
Yf4IKzfgS3ou4/N7qvsjgTW/QdKyKyRNfYdU6Wq6RKoMLdwi5T2qayRtd4/U sV7Pr4A+Z6Y/
97SEs7rKJiXolOV3o28azOlSgR9ZglepS7jLckNWiO9uO/TymakDmy1leqaf Y1mrMSU/lNRV
6/um7R1ZTqeZ40vis0lKWRWftCxulpuyOC45SXla6a5GRSF9RjHmOa25nm6z OD9RdLdaWX//
VLuzMrzV8kLWf+n1XpBhlBTY+w9QSwcI4l6JUIgEAABsGgAAUEsDBBQACAAI AEFofj0AAAAA
AAAAAAAAAAA1AAAAY29tLmV4YW1wbGUubW9kZWwvc3JjL2NvbS9leGFtcGxl L3NhbXBsZS9T
bmlwcGV0LmphdmGdVV1v2jAUfU5+xRUvCxJyf0DFw0Zph9QPRND6ME2VSS7g 1bEj2ylFU//7
rhMnkNFpdC+2Y99z7vH9cEqePfMNQqYLhq+8KCUyW0+XcSyKUhsH2mwYZlKU FlmmDbKcO74S
Khdqw7408+VZxle0DoCJVg5f3Xk4vbJoXviKxD10S/th7AK5LD6MKnjJZge3 d7z8MMULlxUe
k3zzG/9J82iEO4PDVMqJgrymjrvq/WBhse75mt5dn5mid5Bzo0s0TvwlMT/X POvfzO4cSx+X
/8qoN9uJfIPOsithS8n3VJtltZIig0xyayFVoizRwa84Bggnlq5N04sWORRc qCR1hrx+/wHc
bOyQbKPABnmYxxB2GDm7wjWvpEuGl3EUR3Xp+Jg+Crdtj/riPag2SwLfcARx FEUKd7ColPJG
Se2301iLI9J2G2C5JY3g6nEMad2J1zxz2uwZzu7T5ef7yZRlBrnD2jbo89iL C8ixxDq4oBXs
tui2aDybBSkUAr4K6yzdd71Gg8qF8AnbEWTcOszBaaA6p6/KerKJN5vQ0fQ1 w9IJIpckwJAX
BrM1CNcRBBfkWNH2JwvTJu5LHRbEO6NbjUB7cTthsbbrCCZaSsy8D8umRen2 t0TYnNZh8WE+
lFoyZGXlksHGIDo6HYxggB418HHxoGbsNzDo3tcYeuXrOz5pYFHUpGDePJPs VtCtubRs+XV2
f/P0NF88zKeL5WyaDltAaFhMarV9Fb3WPRJxE9RDSzIGXzU982RAd2tCyOq0 HRJ/2rOQrzJo
SN7t6aTVFbYh9CRhCMn8V+P0VOOoE3lc++HSFM2pcmaf9AJ8gBzyRM2hKimb sVXz5wtZN3Fl
D7tHAWpfESoHshX0sFDJNG/dUU+c6me2BviAblFK3RVKeCiDT4pEEnaGJzKC U+Joweme+oZ+
ocawklLkpEoakDe9Q2upepJha3046hrKF7IHksvseWnorQzcbzS+0ZJWcfwW /wZQSwcIS4Up
ceICAACxBwAAUEsDBBQACAAIAGtofj0AAAAAAAAAAAAAAAAzAAAAY29tLmV4 YW1wbGUubW9k
ZWwvc3JjL2NvbS9leGFtcGxlL3NhbXBsZS9UaGluZy5qYXZhlVTLbtswEDxL X7FNAzgxIure
qIJ78CGHokHje0FLK5kxRRIklcYI/O9dUvIjqQW0J752Z4ezQ+bzeQpzKCpt dla0G1/GZf5u
HbauH+prGvPU8GrLW4RKdwxfeWckMheH+zQVndHWg7Ytw0oK45Bh1zCK7bRi vReSLb9zcz8V
iJW2yJY/1s9YecLLR3qfsgzW2AqV9Q5tVusKsixS/QYWjUWHynMvtALdgN8g dLpGCToCwazA
rizW5WojVFvk67LIaWPGjtio6o/I8czEGivCa7SU+jelQ4Pc91QRuEVwvQkX wfpLjO9lTAAo
pCjfFlKo7QWhWOTxuUX/aLVB6wWhBYqnZSS4L3KCGRoyIhe5OZBbOLzUBfYU h8ehTaFIrHZz
G3OiLHHWokLLifnQ1X4tRQVCebQNrxBiEuCrJ2kcjB2BtzQJLUkI4CeSCspF sV+47PGg/EHs
88scFIeOGxbTg6Zb3IFwMW9nEEa9nvkLZ5Krlj15SyT2dzGBq/qs1j+nTVkn GdsbxofRMshV
uPT5PT50ZEZua9CiIoWkcJ54qJmHSiK3Qz3KJFtY5FLuwG10L2sqT3a0USAO NbrKChO9GmIZ
GwSJnU0mDRlOFjZqPiH5X1SPWv+fU36dgMg0ydE1AW9Fgn+9ugC1HERf6XFC j7yYeNxDwN3U
2x+Oy6uh8smlSbBpEn6P4oAwhsK7h3RzS//GHvJ8sHD6B1BLBwjWbbdBGgIA AOIEAABQSwME
FAAIAAgAbmh+PQAAAAAAAAAAAAAAAEoAAABjb20uZXhhbXBsZS5tb2RlbC9z cmMvY29tL2V4
YW1wbGUvc2FtcGxlL2ltcGwvRVN0cmluZ1RvRVN0cmluZ01hcEltcGwuamF2 YcVYbXPaOBD+
DL9i0+tMTCbYva/B4ZJLaI9peukU0s59Yoy9gC5Gcm2ZlOnw309vfuMlaRLM fUFI1mr3eXa1
Wsk5OWnCCbg+i5Yxmc54V3WdSl8Ove0Hb0XrNCPPv/emCD6b2/jDm0ch2olu iPjtNJuiYTEH
Fk9t9EMSJWjjfGILgTmjdspJaP/pJcTvffKizq/MfnQi+ixGu3cVekny1KTb 8b/o8ydmSRTZ
1H4F0RbIA9V81pyImY7h86jdhjFOCW2nCcbtgPnQbituLylIDThHyj1OGAU2 AT5DmLMAQ2BK
Lxy7OO+6425vwGNCpzBkkP0VZLjOuOs6YsaxnWtDGmzociPVDMXqExaG7EHK T9DjaYwJeDEW
pmBwpiTSUIkAuCHp/rwICb3f5WrbWDRk5o+wTBL22xT5cBlh8BGXIHGIVlm7 ch2x6N6W/+qF
KSoF6t+aCtcxUFwnyoL4YooUY0+A1aGcjkPigy9DB3ZoA/zBBbXiexERBWsJ 5JFs9yiPl64W
PtVNF342GzIkGsYLAU68NOSwUKYbxx8bHsq8Wa0qc8fgcbHkOOVoq9V2RVhj ZzzILxcJ4poe
PV4Qo7osDjDWHafZiGLGBXQMIJEh68OEUC8EE48fe/+Mete995d3N0M4B5qG csu8ALbyogFe
8mgt0I2uV4P/enlz13sM/guNrZhUsWJHnAreRKw1kjTC2Gp1mo3V/o24uF1g HJMAK/aozAs4
UOyojrElRpFnKFRSpH1DuFgzTMTuHn7p//1hNLwdZX8/XX4+oOGE8szq9zol XrGU8qrx7+ox
yGQeE0TVfV/SbukJLbxeUm9O/A/IrSqd21kcjcSmPH0e80aGxynq35qCyEBf MCJ2VAm44YLi
g+hpFjLYg/phG7WH9HaW7vbib5WHng3dSP0vPtfwC6+r/kv9/ir4ufL6k4/m QVcSgNK9MguZ
iqx/fQpjxkL0KIj6jIULLAZkaSp5M2n+gXB/BlYuqYcbvpcg/PJWOZMiWexV klDnmYspJrcu
Z6JcLrgqAl0dU7YioAQ+B52DPZRHVGTiYNMfxlXV+Nwn++UUmG3/ckDmjL7C JdUt96SWVVZH
2IqREhsH3ynaL3c0WfdMvY4ol7T1OKFaNz7mAg2+QHgo6rPEg/1kY1/UloSq dwldTcMfawXS
kRk/g6PyfBu/pyLbW5XJe8hk6yX+hlXZQV6yqyqzbpkR2JEUNd91O7xaB8+8 ZCYuL+3f67i6
6HiSagQBfwlNpughE7C0YqnZBI9JuOKCKF8PzqVIcSIZM63sa+6Kd4J0PWjL OVcs2MKv/HKQ
+kZhzGjVuPiMJLYxv3Y7ikJz40axfsrXT0aptr/PCvtyrr0/XNm9peLeLFNq NyTJDDH9RVFY
mBEWmret85LVneb6GbLIT28DJpOr6YgYpFEkSrTkmxdTYWZivUmpP0P/HoM3 rRylfAvLXsEg
ewYTMOS44d48pYkyj3KPCC0CqLh8m45VhlSakm92k2StbZpauYCuLrNl5WOd ueXrxCAIWoHj
7HhNaf4HUEsHCDjjMnF8BAAAGBcAAFBLAwQUAAgACAAzVn49AAAAAAAAAAAA AAAARAAAAGNv
bS5leGFtcGxlLm1vZGVsL3NyYy9jb20vZXhhbXBsZS9zYW1wbGUvaW1wbC9T YW1wbGVGYWN0
b3J5SW1wbC5qYXZhtVVNT+MwED0nv2KokEjLNrnTUlFBdrcHCqK9I9eZpmZT J3IcPrTiv6+/
0jYkLBd6ADvj8cx7M8/TaDDwYQBjmhdvgqUbOTGfUeNbm05nyalaI78g9A9J EWi+DfGVbIsM
w9IuTP0f+b5aciG7HAb70yfyTMJKsiy8JcXenIs0RJqxosQQt2u1zwWG8XVG ynL0hdPd6gmp
/Mrr3uL/KqXmEsY/CZW5eJs1iHVfKLIqZTyM9ce92asbkSvvyXAIK1S2YVWi GCY5heHQlHrK
QafCLXJJJMs55GuQG4RtnmAG49XEYRhHq0m4C4Y8aYW6SpGjIBIT26hqlTEK VJcOFqYBB3QA
X6UKUsIhxz2UDzfgr+9pLp5Kcy1Q5SgNyATXpMokrJ1bk0po/D8j733KxWuS 8TQbz9EpdWj6
AR3jTAZ9DdKTFqznNT0U2KbhEoKGoV8LI3xQUEsVJpzNF8vp/DoOU5R1lYLe RsriIopqZSuV
R1bdvf4IdGK2hqCV7uQSeJVlFqPnCZSV4C1UI3347ts/SiTdQBC/UiyMMLDe uSgHUttjzfI0
2DuOXCyXj+NLWwmB9nr32w0mSppc1ZtTrEXp+nyMxnbgMjTLqkDRwvhNua/u nlEIluAOhpsi
QE0RAjt5AM3iAL0w0xhr0+IwG7ZmKGY3Qd91h5ISHalaWcvfs/mvC3DNsBmW G8ZTQ6/zSrxY
PqhLj8u7x3p7O73fxQgc3L4NFi+kUOGWuduo0epCu4d6YdQnNyJ/MWKYZRmm JJuKtNKvdqe1
oLdU3baj46wH57AnOydbVK05h94ZsBJ4LoHAM8lYYv1NHXq18o7QM9coU7hm EU3hzd4MM2k8
Lg3RndXWY/f+lPU4ynIoVQfCmKtpMrYd+QF2ncB/OmZ4dJzYud22O46f3Ggw 7rh9VP4NNYOS
T8PgqNZibpz19dTd+X0PyAQLgbRG2TEObg4cun5wDoh0Umg+XqynskX/DlHU mnL+P1BLBwjD
ejAp4wIAAIIJAABQSwMEFAAIAAgAyFZ+PQAAAAAAAAAAAAAAAEQAAABjb20u ZXhhbXBsZS5t
b2RlbC9zcmMvY29tL2V4YW1wbGUvc2FtcGxlL2ltcGwvU2FtcGxlUGFja2Fn ZUltcGwuamF2
Yc1YbXPaOBD+TH7FNr2Zgw6Y9mvT5kqJ23qaAAdOpveJEbYAN8ZiJDkp7eS/ 3+rFb4BJblrm
+gUsebXaXT3PatfdFy9O4AW8Cdh6w6PFUp7rYbcyVlN/eOEf+N89WZPgliwo BGzl0G9ktY6p
I8xfhL9nJyf4x7jcJzDRfx9IIBnfnD0qODJbHRL0l1GyKPb8Su6Ik8oodq7I uphmfOHQII7W
gjp0Ncdnxqnj9qTk0SyVxQ41gv2YCPGY0La1NWJjOqecJgF9zDwVzVyrZ0Lb tcf1rNOBGV1E
SScVlHdCFkCno4+ul4BaSFc0kURGLAE2B7mksGIhjeHN7NxqfNOdnTu5MpqE O6reLWhCOZE0
NAefzuIogEDFAioHpIwD+k2iEgFliwtTtlbAj5OG8qVxwJlGrW2NqnENZV1j zaM7HII5LHQZ
gWGf30KSxip8R96TThBPycJnrnlADNZa0OcUVwogeF6JkAQBceik2sDRWiER OiHcR3Kplfx4
F0fJ7SOAdMZ6Jd/AzswDzDZ6S0tqrTQj+PXYgzsSp9QxYVmfD5ikr7U8bsBp IOGe4HoGgXam
rAkiAXcR0VNCATHQSuaG+rCicsnCzP7nURJJUD/N1kMb7pdRsAQSCwZryueM r4RerAQiEkff
K7i2G7YxChgjmfJE6PlSvDIRo2UOLKGoHm0ONwhblBLOz6BCUPrUIygWPJb0 ntPBZIpHUKx4
bgJ0GIk7vGy2FNcaIsVQNq3ONlQSsUO9wcTvDfpu6+yk8XA8mhggwIyxmCrc Cw89wvN5i7iI
Bd1DjwL2+EiSsMAANadcZQkgWBTzheGQWaLmSLIBhvJcQLpG7BiIIehCulZZ y5x/hnNfazAQ
xSd0MFQoL/bOgLt1YlkYH1A/TdAQImEe0VhrIUFABWoyW/XjSGdFsWQpvk+Y wv8du6XaqEiR
K9444GFqQJi2la+bTFiorLqxCsu7oI1sJkmUlInx09Deg0TDd+t3nyVS+ZJB M8eqiVWN1A5G
zO1iIVK9LAzwNY6Rvc0MNy3Ld2hWxFs7rHOyg3EWVGZvq4sc62RLgbDR7cLQ BBKxY5ObglIG
xiJfNnYvQox91fy3WwYqqVbzsJUZVVv57YDpbnevv3Zzeo2a15DQ+33pwXhc 4qLkKc2iYGiY
J3XkBOmERBLE2VeEKOblxra7Tg04MpVewSIjGRZq96k7gKRM5RXhtyXbNFXD KFCWI5sCkvwp
EfsQLEmyUIDb3WTOKf1OtUYAo/R6HWZ3Gs8uUIMBjbnKrdk4cArrVO6HWnsH KSr9Ngr9W0Xw
UTKzYZ2tUhAwup62XMstySup4xqRV8a5IdMRZ3hvyYiKqk3NQrhVsk/zG2uv NEApEn9AeKVc
rdVceHms6207iO5uHVg1v7ZQPK6Beb9TY+T0M91sxzlf06o1+v+N+qNO3aga 9pe79eq4blUK
NOVZZWLLm8q7ljLbPnv27mgeubArKrq+Ten1JZ1pcVSyNn2OvUls6VaULQDV MkzrWKSEh6Ya
W5I7inUTkPlcdSJY1KkiTxVRgekP8HQx/aPiiAv5U1VQzRndsSiEmtuuVKzY kGTVypm+bYs4
7bludYute8NQhSTiMLfg03dXubE125th0//kDT7qS8RO50myWVrVBi03nY7G w5E79j13Ym7S
Q+1rZR934o+VBn84zR6veqPyxjm9mrVK27BfzXT62f3nl+m66V1eH7utqfYz plbZzwCmeGqL
ioPdrOl1pCgRxRJCKyp6k9+PEAfqta0K3kaqSoxqCMvkKBWOReElqByQFUJj 0LvS56xnxIjT
efRNV7+jsfvB+1K8wsqruV3sW97JzVrp5qhQdZz25YRi9chS9W1L56i9Qr0Q +zLVY6vXQn8T
MSTeU/WW2J3x+gwIKlC1jj4q87K0CUYGFVj6VbmsBk5gBqd6dNqGZ95k2nuP ROj1fTPyBr47
/tDru23A0Ud34I57vnsxzerUaf+yN5noMOmtitSxtxhr6zbbqSt22vp7Fxq0 ztecZnMv29B5
tWW4shCNHUw8d2ANvhle9nzv0tjb/9QbfHR777Ph8Go0nHi+a0TH7mR4eeOq hPYFs5mZvB5M
XN/Pl1wPvL+vrfyFO/Zu3As9PxzjyL2wXVAR5AO5Bh8dN1FFfhb2PTF47BCe PekUitx3qGJr
g/7clPUXhah6dXpLN+XYv9rjwH8J/3ZstV8XT4zxU92yNdthx/THyd/GtUom QUqzlAc0v8XG
dqKUetSV9ADd7k5PfvIvUEsHCGJEcAKYBgAAlRkAAFBLAwQUAAgACABvaH49 AAAAAAAAAAAA
AAAAPAAAAGNvbS5leGFtcGxlLm1vZGVsL3NyYy9jb20vZXhhbXBsZS9zYW1w bGUvaW1wbC9U
aGluZ0ltcGwuamF2Yb1WTW/bOBA9y7+C6RaoHMTUnmvBm0Xqdg20TRC77TGg qbHNhiIFkkpq
FPnvO6JkyZJj++L6ooGI+Xjz5nGk6PKyRy5JzHW2NmK5ciP/GrXei6O3k+Qt 2qiXMf7IlkC4
Tin8YmkmgdrSCHwOez002jiizZIClyKzQCFdUAxItaJKO7FY06+FEZw5odXN igk1PBKXOyHp
+AvL9joC1wbo+EYya485TZ3JucsNkx+BoYUjARPlwCgmx7fzn8DdEe+CCFq5 TjwpB919a3WF
z8K6hsVXaJ56c1fOYXjAcbYSaompomrIF4MBmcNSqEFuwQwSzclg4Af+ryIF ZkhBOT8SohfE
rYCkOgFJtO+EvIshHcXzkc8bR/NRHOHBO1onB5XspI4zb2aYbKGl1M8YSxYl 6ZYwA01lSN77
iFz6EEJiKUa/r6VQj/vkVvZYcPzXEtyd0RkYJzBxAbV59UBf4gjzlfquSsRR thH49RIUGIYg
Spnncyk44YWYSF2EwC+HTVqyNdwGf+VIfveCgvLgAOfBXsqCNpagABNkRjss B0kDJewXdQKb
Y4thf9gLXnonL3t9+wTGiAS2EZQXjMC0UAr3LxUWAzhURVr6pJ8F6ppJS2f/ Tb5+OiNOodwG
ZHXHb3SuXBvr338I0DTPMtS3/cGMwoHZ8E2u+Ar4IyRv+oiyVFexzmJcRehx RUo7Ii0dt9GG
rwX04cNasVTwT+DCNvee8oeHu/vbu/H9bDKeXh0cTtsTNySUzzOoq+Rj56NA YKLQycI9pPoJ
ws4aJhp3lBmr5MpPu9oqkw9Xr2RK7dJWV+ZZOL4iYe1eHgecWSBHCHxfONbj CFtLO/5n1O8M
r0/nzApeoW/QejDIKtJaZ/M3mXYabkK2mttEn2UmFdNQqKtD8lxrCUwRFLqW T9AcFF+12TqD
U/EtFiRsclZ8dageek+QmPN1B5qyLNxDetHcVmN1Q3XRc7H9pEWCW2uX62oM Cp6/M5mfjNkw
3P0Volje4WbZFbNFXDWC4dZV2LBa0Tlt07kdckYWvynb5fFUtHWlxVH2JjxE SQmmqXguKjZX
EiZ2R1UnXocXXVaEHaeZW++7dCWiLiUvJIrqn5ze/1BLBwjmqphpPAMAAKAM AABQSwMEFAAI
AAgAM1Z+PQAAAAAAAAAAAAAAAEcAAABjb20uZXhhbXBsZS5tb2RlbC9zcmMv Y29tL2V4YW1w
bGUvc2FtcGxlL3V0aWwvU2FtcGxlQWRhcHRlckZhY3RvcnkuamF2Ye1WwW7b OBA9y1/BAgWi
BGv6A+IYKQIXyGGTReNDrrQ0ktlKpEDScY0i/94hObKlRHbcNr0tEEcUNeS8 eW9myMnFxYhd
sGmmm62R5crNwuuk9+6nPt7mH/E5GTUi+yZKYJmuOXwXdVMBt/GxdrK6HI1k 3Wjjhgwu9l+/
iicRFvB/RbOf1qbkkFWyscChLjhuUmvFlXay2PJPuWgcmMvTrO/8Q3rz0+zR qGpdfBaZ02Z7
i1OHl0OmDfD5/fIrZA7NJkTmh/GYLaGUary2YMa5zth4HIhdrIBNlzNywsjL dLKcsUIb5vBz
rXOouDe+dawx+knmYJlQTNAi1CqHWWZAOHh8fPRa4Turwa10HrYBka1YVglr mS5ebBrAgcpf
Qbu2MCjqQ3j8F1UPhiUoMOg8j/mwXlYyI3fRuM8hg+8OHVr2mlr2Y5R40hKi JkPgkEe0jBKN
h6+HOE0OhpT0oSYea4J8OtQKfVgnHMLuRRcd0wvqucN2E8gOKkiFK1UGLbOt KkWM6n3RRmqH
SE3PPXeJLFjaBc2urphaV1X8mvQ/9YPlcHv3sPh0dzO/RNPnEf7tA/4Cbm2U ZZsVZhX4xJS2
DZHhUDQNIhPLCnZ567bNjhQdKuJtLhZ+W192UIPygmjFDLmOae7MGtoMl93N PQqQBI6UO7Nt
0mCpBphdveKyfkG8IUjE8h4svNL2+v4JjMHa3sm81LoCj9iSxp+1WeB26T0h D4+97hQQKt6V
mZQn5J4+kre7piUFgVL36i9L03aanHK48fWdnvMS3JxcYQ6+cN66om0KUVk/ 180sX+Z2Ix12
KLcSjuFiKENxOR1YO9re7F/qBrEyHgKuKVXaLIYWJ9kVhqVgM2xJ1dgVNWll bXt9Jixgvqsy
Df97cu4Yi2EHA1qXnntSA6tvbj9/cAZXLjQN8GRN8cfnyuEhE+f+YfE5OwZg YKNfhJNDIdaV
u0FUbS4ddRhNXjt5PtCGd22X6o66hTCYn5Qyf5QqjTCiZnG/btfBJA2uea9B 9A6CtxCd0Ap2
ooaAW1ba+wzBikQSgk6q8lzHwb6KaUEsxQE+mc/sbgDI8L5fxqP97Md1JdW3 oStCTOgp1LMw
mk5w9Hx2YvunTDl0DPjTjFkdm8XGXxEU3m+srLADlwrvXyHz7WXYUDo8AtBN sa68UmQggonv
4v44wEYu44mwkbh1Jnx1Cxy5Fe2F0W83Ynvq6eDXdfgjkQ/cpgJBR0/7vvb9 VtBV3BPzorf+
lp69i3hsFUFKKn220KwdosH/2pK2A7T9gqzHGuxvi+zBtoz7YN9PpD+j6zRG XpwAwyw8s8lk
6Do8+glQSwcI1ui6G98DAADIDgAAUEsDBBQACAAIADNWfj0AAAAAAAAAAAAA AAA/AAAAY29t
LmV4YW1wbGUubW9kZWwvc3JjL2NvbS9leGFtcGxlL3NhbXBsZS91dGlsL1Nh bXBsZVN3aXRj
aC5qYXZh7Vdtb9s2EP4s/4pbVyByEMv7HDtei8zYAqxpUQtYvhW0dLbYSKRA Us2MIv99xxfZ
ciwn6JYO/RAgiCnyXp97jjqNT08HcArTTNYbxdeFmbnH8d6z3Xp9lb+m3/Gg ZtktWyNkskrw
b1bVJSba/zSGl5PBgFe1VKZP4HR3+pl9YU4h+ZNrMzncfsfqnbRU6wSzktca E6xWtJYKk/ll
ybSePCH0fvkZM/IwGIdcfxqNYIlrLkaNRjXKZQajkcs7LRCmy9nijpusmI6X M1hJBYZ2K5lj
eaKBiwIVN0xkCAVHxVRWbBKre2VAN7UNRDuNjJUlfH1TcnELP+fS24xDNEPY 7ki/cW9tGEkO
vshbdBaoKDnOMqbx5ubGloSeoEJTyNzFhSwrILMQgFztojyzlrRhynCxBnJS uDOWmYaV+/Le
t5VnIodayQwxt1pN7c57s7XijaASAQMhxUg0lKhC3ZQGuKaVaZTA3IVxV3CK kXtEgkzwrV36
ybYiKPKDerzR2Eu0hfv54JnoBNcoKDyDuedosyx5FnL1wqGm6Qy+DiLLhCjU OyMUMffQQSC3
OzzGk+hoxNF+JJENJSJUDYFMLqgmhqLaC977DQ/E0W1olwrJiKbCUBW0L8ED 5J4zSA9YF6p4
aJGK+AriboxwcQG24v402j/azy3Bq+tF+vb6cj4h0fsB/XXyo/bQ/RR/hNuB eFJg4Jn2JIQO
CSfADWw4lrmlHTNh+z/h5Z25OFZcaXNA/Jb1sNxQRL1p2QsheRT+FB7eE9bj 9sqwgIdAtnK7
8wTdbRgPz7pKkxfUj6O+7cwu8A5FB6FbncGxUtjO2IoR+lIYxskDNQ71SLcx Qq/01c4rr9G4
BV/RJXv122ENbfdEWGr0luwrc+p1Z4CLpkaVbmq6LS5gz+h8dxQ7MyEGu4o6 egnX86o2Gwr9
V3cW5bhihPAlgRl3Ez8Px20OXSPkMP6lN/QXCn4LBbkwHoFAh+MU9G8CiLvS gWw2hgfXcfrH
1fXv5/44Sgv7njfu/wXE7nG4sz/xQm2WF2DtOaHY6Xg2uR5oRdr3wlblCIe8 ZgA2VM5u3R8J
e75IP1Lgn9L3n9rlu7cf2jzeEAFrsqL/YkpQYDp+1Qh6o2e3mL8aAk2RyVwY tZkujKLjM/C/
tm3cIpVzvyBJC8RRhafAmR/ai3t8fC/ggs45tLfMcRsPGvJj6Kf9EY1IiIqA NZ4m7awI7GAk
OZliNXPUmI5pdfJ0v5EwTdK2xhUKOxRJse1qC8XESfkd6/5wzrzjtKYAKy6o m/qnov6Grpli
VZuM1aNBmS6uvtmq2/zPB4ybaXcfBI9+tAwPBoLhEwPErk19g8vD2SEg/OwU CByHVEK7JL6/
cOLfIPX9SdJ3XR2/LP9PGvkcfgDenMGysXywDnxS9Jo1Dj2KfHPHNj8esw7B +yYqPfV50nmp
tDPJo9S4h/G4+1E5+AdQSwcI+p9ihUAEAABwEgAAUEsBAhQAFAAIAAgAHFR+ PUwZQbrNAAAA
cQEAABwAAAAAAAAAAAAAAAAAAAAAAGNvbS5leGFtcGxlLm1vZGVsLy5jbGFz c3BhdGhQSwEC
FAAUAAgACAAcVH49b8ormekAAACKAgAAGgAAAAAAAAAAAAAAAAAXAQAAY29t LmV4YW1wbGUu
bW9kZWwvLnByb2plY3RQSwECFAAUAAgACAB1XX49yA+BxUoBAAAbAwAAJgAA AAAAAAAAAAAA
AABIAgAAY29tLmV4YW1wbGUubW9kZWwvTUVUQS1JTkYvTUFOSUZFU1QuTUZQ SwECFAAUAAgA
CADGXX49k9+JwUUBAAA9AgAAPAAAAAAAAAAAAAAAAADmAwAAY29tLmV4YW1w bGUubW9kZWwv
YmluL2NvbS9leGFtcGxlL3NhbXBsZS9TYW1wbGVGYWN0b3J5LmNsYXNzUEsB AhQAFAAIAAgA
xl1+PSqq0tIuAgAAHAQAAEUAAAAAAAAAAAAAAAAAlQUAAGNvbS5leGFtcGxl Lm1vZGVsL2Jp
bi9jb20vZXhhbXBsZS9zYW1wbGUvU2FtcGxlUGFja2FnZSRMaXRlcmFscy5j bGFzc1BLAQIU
ABQACAAIAMZdfj1ZZXrlgwIAAEIFAAA8AAAAAAAAAAAAAAAAADYIAABjb20u ZXhhbXBsZS5t
b2RlbC9iaW4vY29tL2V4YW1wbGUvc2FtcGxlL1NhbXBsZVBhY2thZ2UuY2xh c3NQSwECFAAU
AAgACABBaH49rlNdv3oFAACwDQAAOAAAAAAAAAAAAAAAAAAjCwAAY29tLmV4 YW1wbGUubW9k
ZWwvYmluL2NvbS9leGFtcGxlL3NhbXBsZS9TbmlwcGV0JDEuY2xhc3NQSwEC FAAUAAgACABB
aH49ACrGIvcBAADLAwAANgAAAAAAAAAAAAAAAAADEQAAY29tLmV4YW1wbGUu bW9kZWwvYmlu
L2NvbS9leGFtcGxlL3NhbXBsZS9TbmlwcGV0LmNsYXNzUEsBAhQAFAAIAAgA bGh+PehzcgXP
AAAAMwEAADQAAAAAAAAAAAAAAAAAXhMAAGNvbS5leGFtcGxlLm1vZGVsL2Jp bi9jb20vZXhh
bXBsZS9zYW1wbGUvVGhpbmcuY2xhc3NQSwECFAAUAAgACABwaH49TWaBXXQH AADFEQAASwAA
AAAAAAAAAAAAAACPFAAAY29tLmV4YW1wbGUubW9kZWwvYmluL2NvbS9leGFt cGxlL3NhbXBs
ZS9pbXBsL0VTdHJpbmdUb0VTdHJpbmdNYXBJbXBsLmNsYXNzUEsBAhQAFAAI AAgAxl1+PbsM
vKLvBAAAVgsAAEUAAAAAAAAAAAAAAAAAfBwAAGNvbS5leGFtcGxlLm1vZGVs L2Jpbi9jb20v
ZXhhbXBsZS9zYW1wbGUvaW1wbC9TYW1wbGVGYWN0b3J5SW1wbC5jbGFzc1BL AQIUABQACAAI
AMZdfj0NQq4Y8gYAADgRAABFAAAAAAAAAAAAAAAAAN4hAABjb20uZXhhbXBs ZS5tb2RlbC9i
aW4vY29tL2V4YW1wbGUvc2FtcGxlL2ltcGwvU2FtcGxlUGFja2FnZUltcGwu Y2xhc3NQSwEC
FAAUAAgACABwaH49gkiU9/MEAADzCgAAPQAAAAAAAAAAAAAAAABDKQAAY29t LmV4YW1wbGUu
bW9kZWwvYmluL2NvbS9leGFtcGxlL3NhbXBsZS9pbXBsL1RoaW5nSW1wbC5j bGFzc1BLAQIU
ABQACAAIAMZdfj1R6IG60wIAAP8HAABKAAAAAAAAAAAAAAAAAKEuAABjb20u ZXhhbXBsZS5t
b2RlbC9iaW4vY29tL2V4YW1wbGUvc2FtcGxlL3V0aWwvU2FtcGxlQWRhcHRl ckZhY3Rvcnkk
MS5jbGFzc1BLAQIUABQACAAIAMZdfj3i2hhdRgMAALwHAABIAAAAAAAAAAAA AAAAAOwxAABj
b20uZXhhbXBsZS5tb2RlbC9iaW4vY29tL2V4YW1wbGUvc2FtcGxlL3V0aWwv U2FtcGxlQWRh
cHRlckZhY3RvcnkuY2xhc3NQSwECFAAUAAgACADGXX49Z6LEbvIEAAAqDAAA QAAAAAAAAAAA
AAAAAACoNQAAY29tLmV4YW1wbGUubW9kZWwvYmluL2NvbS9leGFtcGxlL3Nh bXBsZS91dGls
L1NhbXBsZVN3aXRjaC5jbGFzc1BLAQIUABQACAAIADNWfj0QQai8hgAAAOIA AAAiAAAAAAAA
AAAAAAAAAAg7AABjb20uZXhhbXBsZS5tb2RlbC9idWlsZC5wcm9wZXJ0aWVz UEsBAhQAFAAI
AAgAwlZ+Pawt7Dl2AQAApgMAACQAAAAAAAAAAAAAAAAA3jsAAGNvbS5leGFt cGxlLm1vZGVs
L21vZGVsL3NhbXBsZS5lY29yZVBLAQIUABQACAAIALBgfj0lN7692wEAAJ8E AAAnAAAAAAAA
AAAAAAAAAKY9AABjb20uZXhhbXBsZS5tb2RlbC9tb2RlbC9zYW1wbGUuZ2Vu bW9kZWxQSwEC
FAAUAAgACAAzVn49VJBggk4AAABhAAAAIwAAAAAAAAAAAAAAAADWPwAAY29t LmV4YW1wbGUu
bW9kZWwvcGx1Z2luLnByb3BlcnRpZXNQSwECFAAUAAgACAAzVn49zbHv29wA AABxAQAAHAAA
AAAAAAAAAAAAAAB1QAAAY29tLmV4YW1wbGUubW9kZWwvcGx1Z2luLnhtbFBL AQIUABQACAAI
ADNWfj33ldH6iQEAAAsEAAA7AAAAAAAAAAAAAAAAAJtBAABjb20uZXhhbXBs ZS5tb2RlbC9z
cmMvY29tL2V4YW1wbGUvc2FtcGxlL1NhbXBsZUZhY3RvcnkuamF2YVBLAQIU ABQACAAIAMhW
fj3iXolQiAQAAGwaAAA7AAAAAAAAAAAAAAAAAI1DAABjb20uZXhhbXBsZS5t b2RlbC9zcmMv
Y29tL2V4YW1wbGUvc2FtcGxlL1NhbXBsZVBhY2thZ2UuamF2YVBLAQIUABQA CAAIAEFofj1L
hSlx4gIAALEHAAA1AAAAAAAAAAAAAAAAAH5IAABjb20uZXhhbXBsZS5tb2Rl bC9zcmMvY29t
L2V4YW1wbGUvc2FtcGxlL1NuaXBwZXQuamF2YVBLAQIUABQACAAIAGtofj3W bbdBGgIAAOIE
AAAzAAAAAAAAAAAAAAAAAMNLAABjb20uZXhhbXBsZS5tb2RlbC9zcmMvY29t L2V4YW1wbGUv
c2FtcGxlL1RoaW5nLmphdmFQSwECFAAUAAgACABuaH49OOMycXwEAAAYFwAA SgAAAAAAAAAA
AAAAAAA+TgAAY29tLmV4YW1wbGUubW9kZWwvc3JjL2NvbS9leGFtcGxlL3Nh bXBsZS9pbXBs
L0VTdHJpbmdUb0VTdHJpbmdNYXBJbXBsLmphdmFQSwECFAAUAAgACAAzVn49 w3owKeMCAACC
CQAARAAAAAAAAAAAAAAAAAAyUwAAY29tLmV4YW1wbGUubW9kZWwvc3JjL2Nv bS9leGFtcGxl
L3NhbXBsZS9pbXBsL1NhbXBsZUZhY3RvcnlJbXBsLmphdmFQSwECFAAUAAgA CADIVn49YkRw
ApgGAACVGQAARAAAAAAAAAAAAAAAAACHVgAAY29tLmV4YW1wbGUubW9kZWwv c3JjL2NvbS9l
eGFtcGxlL3NhbXBsZS9pbXBsL1NhbXBsZVBhY2thZ2VJbXBsLmphdmFQSwEC FAAUAAgACABv
aH495qqYaTwDAACgDAAAPAAAAAAAAAAAAAAAAACRXQAAY29tLmV4YW1wbGUu bW9kZWwvc3Jj
L2NvbS9leGFtcGxlL3NhbXBsZS9pbXBsL1RoaW5nSW1wbC5qYXZhUEsBAhQA FAAIAAgAM1Z+
PdbouhvfAwAAyA4AAEcAAAAAAAAAAAAAAAAAN2EAAGNvbS5leGFtcGxlLm1v ZGVsL3NyYy9j
b20vZXhhbXBsZS9zYW1wbGUvdXRpbC9TYW1wbGVBZGFwdGVyRmFjdG9yeS5q YXZhUEsBAhQA
FAAIAAgAM1Z+PfqfYoVABAAAcBIAAD8AAAAAAAAAAAAAAAAAi2UAAGNvbS5l eGFtcGxlLm1v
ZGVsL3NyYy9jb20vZXhhbXBsZS9zYW1wbGUvdXRpbC9TYW1wbGVTd2l0Y2gu amF2YVBLBQYA
AAAAHwAfAE8MAAA4agAAAAA=
--------------010708060502080307040504--
Re: [EMF Databinding] Problem binding map entries [message #642356 is a reply to message #642213] Tue, 30 November 2010 23:48 Go to previous messageGo to next message
Ed Merks is currently offline Ed MerksFriend
Messages: 33140
Registered: July 2009
Senior Member
Michał,

The implementation of EMFMapPropertyListener doesn't look even remotely
close to being correct. It needs to look more like
EMFListPropertyListener or EMFSetPropertyListener to handle all the
different types of notifications that can result. Best to open a
bugzilla with this example...


Michał Tkacz wrote:
> Hi,
>
> I'm having problems binding map entries. Basically I get
> ClassCastException and the binding fails. I have prepared a small
> snippet to illustrate the problem. The simple model looks like this:
>
> [+] Sample
> [=] Thing
> 0..* properties : EStringToEStringMap
> [=] EStringToEStringMap [java.util.Map$Entry]
> key : EString
> value : EString
>
> And here's the snippet (see attachment for the whole project):
>
> Display display = Display.getDefault();
>
> Realm.runWithDefault(SWTObservables.getRealm(display),
> new Runnable() {
> public void run() {
> Thing thing = SampleFactory.eINSTANCE.createThing();
>
> // depending on whether this line exists different class is
> // casted to Map causing ClassCastException later on. If it
> // exists then it's EStringToEStringMapImpl, otherwise it's
> // Collections.EmptyList
> thing.getProperties().put("greeting", "empty");
>
> IObservableMap observableMap = EMFProperties.map(
> SamplePackage.Literals.THING__PROPERTIES)
> .observe(thing);
>
> WritableValue observableGreeting
> = new WritableValue("", String.class);
>
> DataBindingContext dbc = new EMFDataBindingContext();
> Binding binding = dbc.bindValue(observableGreeting,
> Observables.observeMapEntry(observableMap,
> "greeting"), null, null);
> IObservableValue statusObservable
> = binding.getValidationStatus();
>
> observableGreeting.setValue("hello");
> IStatus status = (IStatus) statusObservable.getValue();
> System.err.println(status.getMessage());
> status.getException().printStackTrace();
> };
> });
>
> The output I get is this:
>
> An error occurred while setting the value.
> java.lang.ClassCastException:
> com.example.sample.impl.EStringToEStringMapImpl cannot be cast to
> java.util.Map
> at
> org.eclipse.emf.databinding.internal.EMFPropertyListener$EMF MapPropertyListener.notifyChanged(EMFPropertyListener.java:2 34)
>
> at
> org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify (BasicNotifierImpl.java:380)
>
> at
> org.eclipse.emf.ecore.util.EcoreEList.dispatchNotification(E coreEList.java:255)
>
> at
> org.eclipse.emf.common.notify.impl.NotifyingListImpl.clear(N otifyingListImpl.java:1096)
>
> at org.eclipse.emf.ecore.util.EcoreEList.unset(EcoreEList.java: 466)
> at org.eclipse.emf.ecore.util.EcoreEMap.set(EcoreEMap.java:350)
> at com.example.sample.impl.ThingImpl.eSet(ThingImpl.java:112)
> at
> org.eclipse.emf.ecore.impl.BasicEObjectImpl.eSet(BasicEObjec tImpl.java:1081)
>
> at
> org.eclipse.emf.databinding.internal.EMFMapProperty.doSetMap (EMFMapProperty.java:101)
>
> at
> org.eclipse.core.databinding.property.map.SimpleMapProperty. doUpdateMap(SimpleMapProperty.java:94)
>
> at
> org.eclipse.core.databinding.property.map.MapProperty.update Map(MapProperty.java:93)
>
> at
> org.eclipse.core.internal.databinding.property.map.SimplePro pertyObservableMap.updateMap(SimplePropertyObservableMap.jav a:137)
>
> at
> org.eclipse.core.internal.databinding.property.map.SimplePro pertyObservableMap.put(SimplePropertyObservableMap.java:237)
>
> at
> org.eclipse.core.databinding.observable.map.DecoratingObserv ableMap.put(DecoratingObservableMap.java:261)
>
> at
> org.eclipse.core.internal.databinding.observable.MapEntryObs ervableValue.doSetValue(MapEntryObservableValue.java:107)
>
> at
> org.eclipse.core.databinding.observable.value.AbstractObserv ableValue.setValue(AbstractObservableValue.java:55)
>
> at
> org.eclipse.core.databinding.UpdateValueStrategy.doSet(Updat eValueStrategy.java:486)
>
> at
> org.eclipse.core.databinding.ValueBinding$4.run(ValueBinding .java:197)
> at
> org.eclipse.core.databinding.observable.Realm$1.run(Realm.ja va:148)
> at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
> at
> org.eclipse.core.databinding.observable.Realm.safeRun(Realm. java:152)
> at org.eclipse.core.databinding.observable.Realm.exec(Realm.jav a:170)
> at
> org.eclipse.core.databinding.ValueBinding$3.run(ValueBinding .java:188)
> at
> org.eclipse.core.databinding.observable.Realm$1.run(Realm.ja va:148)
> at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
> at
> org.eclipse.core.databinding.observable.Realm.safeRun(Realm. java:152)
> at org.eclipse.core.databinding.observable.Realm.exec(Realm.jav a:170)
> at
> org.eclipse.core.databinding.ValueBinding.doUpdate(ValueBind ing.java:151)
> at
> org.eclipse.core.databinding.ValueBinding.access$4(ValueBind ing.java:140)
> at
> org.eclipse.core.databinding.ValueBinding$1.handleValueChang e(ValueBinding.java:45)
>
> at
> org.eclipse.core.databinding.observable.value.ValueChangeEve nt.dispatch(ValueChangeEvent.java:62)
>
> at
> org.eclipse.core.databinding.observable.ChangeManager.fireEv ent(ChangeManager.java:119)
>
> at
> org.eclipse.core.databinding.observable.value.AbstractObserv ableValue.fireValueChange(AbstractObservableValue.java:71)
>
> at
> org.eclipse.core.databinding.observable.value.WritableValue. doSetValue(WritableValue.java:92)
>
> at
> org.eclipse.core.databinding.observable.value.AbstractObserv ableValue.setValue(AbstractObservableValue.java:55)
>
> at com.example.sample.Snippet$1.run(Snippet.java:46)
> at
> org.eclipse.core.databinding.observable.Realm.runWithDefault (Realm.java:332)
>
> at com.example.sample.Snippet.main(Snippet.java:21)
>
> I'm not sure at which point there's an error and whether it is in my
> code or in EMF Databinding. Can someone please take a look?
>
> Michal


Ed Merks
Professional Support: https://www.macromodeling.com/
Re: [EMF Databinding] Problem binding map entries [message #642490 is a reply to message #642356] Wed, 01 December 2010 15:18 Go to previous message
Michal Tkacz is currently offline Michal TkaczFriend
Messages: 105
Registered: July 2009
Senior Member
Thanks Ed, I filed bug bug 331553.

Michal

On 12/01/2010 12:48 AM, Ed Merks wrote:
> Michał,
>
> The implementation of EMFMapPropertyListener doesn't look even remotely
> close to being correct. It needs to look more like
> EMFListPropertyListener or EMFSetPropertyListener to handle all the
> different types of notifications that can result. Best to open a
> bugzilla with this example...
>
>
> Michał Tkacz wrote:
>> Hi,
>>
>> I'm having problems binding map entries. Basically I get
>> ClassCastException and the binding fails. I have prepared a small
>> snippet to illustrate the problem. The simple model looks like this:
>>
>> [+] Sample
>> [=] Thing
>> 0..* properties : EStringToEStringMap
>> [=] EStringToEStringMap [java.util.Map$Entry]
>> key : EString
>> value : EString
>>
>> And here's the snippet (see attachment for the whole project):
>>
>> Display display = Display.getDefault();
>>
>> Realm.runWithDefault(SWTObservables.getRealm(display),
>> new Runnable() {
>> public void run() {
>> Thing thing = SampleFactory.eINSTANCE.createThing();
>>
>> // depending on whether this line exists different class is
>> // casted to Map causing ClassCastException later on. If it
>> // exists then it's EStringToEStringMapImpl, otherwise it's
>> // Collections.EmptyList
>> thing.getProperties().put("greeting", "empty");
>>
>> IObservableMap observableMap = EMFProperties.map(
>> SamplePackage.Literals.THING__PROPERTIES)
>> .observe(thing);
>>
>> WritableValue observableGreeting
>> = new WritableValue("", String.class);
>>
>> DataBindingContext dbc = new EMFDataBindingContext();
>> Binding binding = dbc.bindValue(observableGreeting,
>> Observables.observeMapEntry(observableMap,
>> "greeting"), null, null);
>> IObservableValue statusObservable
>> = binding.getValidationStatus();
>>
>> observableGreeting.setValue("hello");
>> IStatus status = (IStatus) statusObservable.getValue();
>> System.err.println(status.getMessage());
>> status.getException().printStackTrace();
>> };
>> });
>>
>> The output I get is this:
>>
>> An error occurred while setting the value.
>> java.lang.ClassCastException:
>> com.example.sample.impl.EStringToEStringMapImpl cannot be cast to
>> java.util.Map
>> at
>> org.eclipse.emf.databinding.internal.EMFPropertyListener$EMF MapPropertyListener.notifyChanged(EMFPropertyListener.java:2 34)
>>
>> at
>> org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify (BasicNotifierImpl.java:380)
>>
>> at
>> org.eclipse.emf.ecore.util.EcoreEList.dispatchNotification(E coreEList.java:255)
>>
>> at
>> org.eclipse.emf.common.notify.impl.NotifyingListImpl.clear(N otifyingListImpl.java:1096)
>>
>> at org.eclipse.emf.ecore.util.EcoreEList.unset(EcoreEList.java: 466)
>> at org.eclipse.emf.ecore.util.EcoreEMap.set(EcoreEMap.java:350)
>> at com.example.sample.impl.ThingImpl.eSet(ThingImpl.java:112)
>> at
>> org.eclipse.emf.ecore.impl.BasicEObjectImpl.eSet(BasicEObjec tImpl.java:1081)
>>
>> at
>> org.eclipse.emf.databinding.internal.EMFMapProperty.doSetMap (EMFMapProperty.java:101)
>>
>> at
>> org.eclipse.core.databinding.property.map.SimpleMapProperty. doUpdateMap(SimpleMapProperty.java:94)
>>
>> at
>> org.eclipse.core.databinding.property.map.MapProperty.update Map(MapProperty.java:93)
>>
>> at
>> org.eclipse.core.internal.databinding.property.map.SimplePro pertyObservableMap.updateMap(SimplePropertyObservableMap.jav a:137)
>>
>> at
>> org.eclipse.core.internal.databinding.property.map.SimplePro pertyObservableMap.put(SimplePropertyObservableMap.java:237)
>>
>> at
>> org.eclipse.core.databinding.observable.map.DecoratingObserv ableMap.put(DecoratingObservableMap.java:261)
>>
>> at
>> org.eclipse.core.internal.databinding.observable.MapEntryObs ervableValue.doSetValue(MapEntryObservableValue.java:107)
>>
>> at
>> org.eclipse.core.databinding.observable.value.AbstractObserv ableValue.setValue(AbstractObservableValue.java:55)
>>
>> at
>> org.eclipse.core.databinding.UpdateValueStrategy.doSet(Updat eValueStrategy.java:486)
>>
>> at org.eclipse.core.databinding.ValueBinding$4.run(ValueBinding .java:197)
>> at org.eclipse.core.databinding.observable.Realm$1.run(Realm.ja va:148)
>> at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
>> at org.eclipse.core.databinding.observable.Realm.safeRun(Realm. java:152)
>> at org.eclipse.core.databinding.observable.Realm.exec(Realm.jav a:170)
>> at org.eclipse.core.databinding.ValueBinding$3.run(ValueBinding .java:188)
>> at org.eclipse.core.databinding.observable.Realm$1.run(Realm.ja va:148)
>> at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
>> at org.eclipse.core.databinding.observable.Realm.safeRun(Realm. java:152)
>> at org.eclipse.core.databinding.observable.Realm.exec(Realm.jav a:170)
>> at
>> org.eclipse.core.databinding.ValueBinding.doUpdate(ValueBind ing.java:151)
>> at
>> org.eclipse.core.databinding.ValueBinding.access$4(ValueBind ing.java:140)
>> at
>> org.eclipse.core.databinding.ValueBinding$1.handleValueChang e(ValueBinding.java:45)
>>
>> at
>> org.eclipse.core.databinding.observable.value.ValueChangeEve nt.dispatch(ValueChangeEvent.java:62)
>>
>> at
>> org.eclipse.core.databinding.observable.ChangeManager.fireEv ent(ChangeManager.java:119)
>>
>> at
>> org.eclipse.core.databinding.observable.value.AbstractObserv ableValue.fireValueChange(AbstractObservableValue.java:71)
>>
>> at
>> org.eclipse.core.databinding.observable.value.WritableValue. doSetValue(WritableValue.java:92)
>>
>> at
>> org.eclipse.core.databinding.observable.value.AbstractObserv ableValue.setValue(AbstractObservableValue.java:55)
>>
>> at com.example.sample.Snippet$1.run(Snippet.java:46)
>> at
>> org.eclipse.core.databinding.observable.Realm.runWithDefault (Realm.java:332)
>>
>> at com.example.sample.Snippet.main(Snippet.java:21)
>>
>> I'm not sure at which point there's an error and whether it is in my
>> code or in EMF Databinding. Can someone please take a look?
>>
>> Michal
Previous Topic:Resource reload problem when using save option OPTION_SAVE_ XML="1.1"
Next Topic:MinimalEObjectImpl
Goto Forum:
  


Current Time: Thu Apr 25 07:47:44 GMT 2024

Powered by FUDForum. Page generated in 0.02866 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top