Home » Modeling » EMF "Technology" (Ecore Tools, EMFatic, etc) » [Teneo] memory consumption keeps building up
| |
Re: [Teneo] memory consumption keeps building up [message #78430 is a reply to message #78417] |
Wed, 04 April 2007 16:20 ![Go to previous message Go to previous message](theme/Solstice/images/up.png) ![Go to next message Go to next message](theme/Solstice/images/down.png) |
Parvez![Friend of Eclipse Friend](/donate/web-api/friends_decorator.php?email=p.chauhan%40pilz.ie) Messages: 181 Registered: July 2009 |
Senior Member |
|
|
Hi Martin,
yes, if I initialize 5 times then it goes to around 500mb or so.
SessionFactory close seems to work as I don't see any error, otherwise I
guess I would have seen "session is already closed" or something.
As per initialise time it used to take from 15 - 20 secs. But now I have
changed to use cacheableFile, so that have reduced to 7 - 10 seconds.
Regards,
Parvez
Martin Taal wrote:
> Hi Parvez,
> There is an ERuntime.INSTANCE which keeps track of mapping from the
> ecore to the java classes. But I can't really imagine that this one is
> 100mb large. Also the same epackage can not be registered twice.
>
> Internally the hbDataStore keeps a cross reference map which can take
> some space (but 100mb seems a lot). This one is not cleared when doing
> close() on the datastore or the hbhelper. Is there still a pointer
> somewhere to the old datastore?
>
> Btw, the HbHelper.INSTANCE.closeAll() also closes the underlying
> sessionfactory so I am surprised that your sessionfactoru.close() works.
>
> So if you create 5 hbdatastores and initialize them then 500Mb is used?
>
> gr. Martin
>
> PC wrote:
>> Hi,
>>
>> Every time user creates a project in our application we initialize a
>> new database (embedded HSQLDB) and hence we have to initialize
>> HbDataStore.
>> I have number of emf models and nearly 100mb is consumed on each
>> hbds.initialize();
>> Before user can create another project, existing opened(if any)
>> project/database is closed and session is cleared.
>>
>> These are the steps done on close of project:
>>
>>
>> session.flush(); //session obtained from teneo
>> session.clear();
>> //here shutdown statement is issued for the db and then
>> session.disconnect();
>> session.close();
>> HbHelper.INSTANCE.deRegisterDataStore(_dbName); // _dbName is
>> session factory name
>> HbHelper.INSTANCE.closeAll();
>> sessionFactory.close(); //session factory obtained from teneo
>> Runtime runtime = Runtime.getRuntime();
>> runtime.gc();
>>
>> But it seems that emf objects created during models initialization
>> remains in memory and so if user creates another project then again
>> 100mb is consumed and hence shortly runs out of memory.
>>
>> So just wondering do I have to do something more about clearing?
>>
>> Any suggestions to fix it?
>>
>> Thanks.
>> Parvez
>
>
|
|
|
Re: [Teneo] memory consumption keeps building up [message #78445 is a reply to message #78430] |
Wed, 04 April 2007 16:31 ![Go to previous message Go to previous message](theme/Solstice/images/up.png) ![Go to next message Go to next message](theme/Solstice/images/down.png) |
Martin Taal![Friend of Eclipse Friend](/donate/web-api/friends_decorator.php?email=mtaal%40springsite.com) Messages: 5468 Registered: July 2009 |
Senior Member |
|
|
Hi Parvez,
How large is your model? Would the cross reference mapping cause the memory use (it is the referers
member in the HbDataStore)?
gr. Martin
PC wrote:
> Hi Martin,
>
> yes, if I initialize 5 times then it goes to around 500mb or so.
> SessionFactory close seems to work as I don't see any error, otherwise I
> guess I would have seen "session is already closed" or something.
>
> As per initialise time it used to take from 15 - 20 secs. But now I have
> changed to use cacheableFile, so that have reduced to 7 - 10 seconds.
>
> Regards,
> Parvez
>
> Martin Taal wrote:
>> Hi Parvez,
>> There is an ERuntime.INSTANCE which keeps track of mapping from the
>> ecore to the java classes. But I can't really imagine that this one is
>> 100mb large. Also the same epackage can not be registered twice.
>>
>> Internally the hbDataStore keeps a cross reference map which can take
>> some space (but 100mb seems a lot). This one is not cleared when doing
>> close() on the datastore or the hbhelper. Is there still a pointer
>> somewhere to the old datastore?
>>
>> Btw, the HbHelper.INSTANCE.closeAll() also closes the underlying
>> sessionfactory so I am surprised that your sessionfactoru.close() works.
>>
>> So if you create 5 hbdatastores and initialize them then 500Mb is used?
>>
>> gr. Martin
>>
>> PC wrote:
>>> Hi,
>>>
>>> Every time user creates a project in our application we initialize a
>>> new database (embedded HSQLDB) and hence we have to initialize
>>> HbDataStore.
>>> I have number of emf models and nearly 100mb is consumed on each
>>> hbds.initialize();
>>> Before user can create another project, existing opened(if any)
>>> project/database is closed and session is cleared.
>>>
>>> These are the steps done on close of project:
>>>
>>>
>>> session.flush(); //session obtained from teneo
>>> session.clear();
>>> //here shutdown statement is issued for the db and then
>>> session.disconnect();
>>> session.close();
>>> HbHelper.INSTANCE.deRegisterDataStore(_dbName); // _dbName
>>> is session factory name
>>> HbHelper.INSTANCE.closeAll();
>>> sessionFactory.close(); //session factory obtained from teneo
>>> Runtime runtime = Runtime.getRuntime();
>>> runtime.gc();
>>>
>>> But it seems that emf objects created during models initialization
>>> remains in memory and so if user creates another project then again
>>> 100mb is consumed and hence shortly runs out of memory.
>>>
>>> So just wondering do I have to do something more about clearing?
>>>
>>> Any suggestions to fix it?
>>>
>>> Thanks.
>>> Parvez
>>
>>
--
With Regards, Martin Taal
Springsite/Elver.org
Office: Hardwareweg 4, 3821 BV Amersfoort
Postal: Nassaulaan 7, 3941 EC Doorn
The Netherlands
Tel: +31 (0)84 420 2397
Fax: +31 (0)84 225 9307
Mail: mtaal@springsite.com - mtaal@elver.org
Web: www.springsite.com - www.elver.org
|
|
|
Re: [Teneo] memory consumption keeps building up [message #78533 is a reply to message #78445] |
Thu, 05 April 2007 16:38 ![Go to previous message Go to previous message](theme/Solstice/images/up.png) ![Go to next message Go to next message](theme/Solstice/images/down.png) |
Parvez![Friend of Eclipse Friend](/donate/web-api/friends_decorator.php?email=p.chauhan%40pilz.ie) Messages: 181 Registered: July 2009 |
Senior Member |
|
|
This is a multi-part message in MIME format.
--------------020203090904040504070308
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Hi Martin,
I did some more investigation, and it looks that it is referers () field
of HbDataStore. By the time I created 6 projects, it went upto 483mb.
I am enclosing some profiler snapshots in zip file for your consideration.
- Parvez
Martin Taal wrote:
> Hi Parvez,
> How large is your model? Would the cross reference mapping cause the
> memory use (it is the referers member in the HbDataStore)?
>
> gr. Martin
>
> PC wrote:
>> Hi Martin,
>>
>> yes, if I initialize 5 times then it goes to around 500mb or so.
>> SessionFactory close seems to work as I don't see any error, otherwise
>> I guess I would have seen "session is already closed" or something.
>>
>> As per initialise time it used to take from 15 - 20 secs. But now I
>> have changed to use cacheableFile, so that have reduced to 7 - 10
>> seconds.
>>
>> Regards,
>> Parvez
>>
>> Martin Taal wrote:
>>> Hi Parvez,
>>> There is an ERuntime.INSTANCE which keeps track of mapping from the
>>> ecore to the java classes. But I can't really imagine that this one
>>> is 100mb large. Also the same epackage can not be registered twice.
>>>
>>> Internally the hbDataStore keeps a cross reference map which can take
>>> some space (but 100mb seems a lot). This one is not cleared when
>>> doing close() on the datastore or the hbhelper. Is there still a
>>> pointer somewhere to the old datastore?
>>>
>>> Btw, the HbHelper.INSTANCE.closeAll() also closes the underlying
>>> sessionfactory so I am surprised that your sessionfactoru.close() works.
>>>
>>> So if you create 5 hbdatastores and initialize them then 500Mb is used?
>>>
>>> gr. Martin
>>>
>>> PC wrote:
>>>> Hi,
>>>>
>>>> Every time user creates a project in our application we initialize a
>>>> new database (embedded HSQLDB) and hence we have to initialize
>>>> HbDataStore.
>>>> I have number of emf models and nearly 100mb is consumed on each
>>>> hbds.initialize();
>>>> Before user can create another project, existing opened(if any)
>>>> project/database is closed and session is cleared.
>>>>
>>>> These are the steps done on close of project:
>>>>
>>>>
>>>> session.flush(); //session obtained from teneo
>>>> session.clear();
>>>> //here shutdown statement is issued for the db and then
>>>> session.disconnect();
>>>> session.close();
>>>> HbHelper.INSTANCE.deRegisterDataStore(_dbName); // _dbName
>>>> is session factory name
>>>> HbHelper.INSTANCE.closeAll();
>>>> sessionFactory.close(); //session factory obtained from
>>>> teneo
>>>> Runtime runtime = Runtime.getRuntime();
>>>> runtime.gc();
>>>>
>>>> But it seems that emf objects created during models initialization
>>>> remains in memory and so if user creates another project then again
>>>> 100mb is consumed and hence shortly runs out of memory.
>>>>
>>>> So just wondering do I have to do something more about clearing?
>>>>
>>>> Any suggestions to fix it?
>>>>
>>>> Thanks.
>>>> Parvez
>>>
>>>
>
>
--------------020203090904040504070308
Content-Type: application/x-zip-compressed;
name="datastore.zip"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="datastore.zip"
UEsDBBQAAAAIAAyLhTaqyMiUQEoAAARwAAApAAAAdGVuZW9fcHJvamVjdDZf ZGF0YXN0b3Jl
X3JlZmVyZXJzX21hcC5KUEftvXVUnNuyL/rhrsE9eHB3T9AOGlyDOwSHoIHg DgGCk+Cexhon
uENw18bdgsvNPue9t9c6b6/91r3njrfHPWd9PeYfPX7ds7pqVtX81ZTRT7NP qwC2goy8DAAD
AwO8/fUCnhaAlwAyIiISIgIyEhISCgoyKjoeBjoaGjox7jMsPHISSgpyEjIy Klo2BipqFhoy
Mkb+FywcnDw8PJQMgqICXCJs3Dxcf+sEBgUFBR0NnQgDg4jrOdlzrv/p5+k7 gIMM7MLGwsFQ
A7A4MHA4ME9dACUAwCDA/NsD/F8PDCwcPAIiEjIKKtqvD9RiA7AwcHCw8HAI CPDwv1DfXzgA
j4OA+5xTEvGZqjEStRMe14f4L8g0UuB2fLWxE1puE+dAFFQCQiJiEjp6BsYX TDy8fPwCgkIv
X0nLyMrJK7xR19DU0tbRNTUzt7C0srZxcXVz9/D0eh/0MTgkNCw8IiHxU1Jy yufUtK+5efkF
hUXFJVXVNbV1kPqGxo7Oru6e3r7+gfGJyanpmdm5+bV16Mbm1vbO7t7p2fnF z8ur65vbv+kF
A8DB/N/PP9QL55desPDwcPBIf9MLBtbjbx/AgUd4zomIK6mKZOz0jJrrAzKe VPwXcDsKDbfa
Cb6J8xgqAS3PGt3p31T7N83+nGKB/0ua/T+K/V2veQAdDubX4MHhAOLAzwfl 7jhtzxBW2AWl
1sla/hr+coTCT636zzsQWZm/nvUSwWdhSkB5Lp4AsgXl8uuI3jeBovQY+Kwk epFNn+C4Cw7L
75nU1zwt4LMwZIuvvbUj18kMmcfVevaFVCfMapvqvX3bWnCRMMGt3lHYnAHO Lj3kx4EiGnyQ
dXLdCZWaKl9NqGLq4WpTEnr892CLj0NFFBxdJztcEu1w9AHC4SKgnM78zhJQ +W5x4dAddZNt
Ho6wS0frO+WBRbjZW5VHuh+m9TUQX0dFnWNVimm+RomJ0oznkhnfTL/TCB4a aq6g/HwCDtJj
6bVZf7qULBvNLS/sv8mdLxv7+pHN2CJF2M/EHTwv5phamvMEfHzWheN51GtY M9U6tLID1WgA
FfQU0ETaEtSeXTJz3kjiYuduwbkB7mkp4a7kJGv2PxUdFcGZcUK9bq7xnPrx cURBUYHcBzag
cg9Z8OTbiUpePVLv3csbvgl9anl6aK17saAg1YeYggZx3GtmtWkfjdK95PN5 FsJWwnSZaDN3
dHoPFqI1ubmgGdo7LfYKH45Th8K13K/RSuPrWAeDaNo4x9uBzLIBWPxXcsGW mFrPs+HNnM4i
gIvO9VGM8o1pyy4SlcZQ/3SUllgfbxj2Bpf4GuZnWZ8Fd9Xk1w0QydnI1Qwc FRXFLOfwFwyo
whey8M8D/TRXKXrH68WvtUh67+9nn4C+/ScABWvF//rq8XjpCdA5nHgoKVhB c/s0/QTUJq+P
a8UaTLrBQ0C7h2idzmG5V2MVF26MXABVoMyxCpZKkOaEQwU1BDLJSp+l5+RG 5jRUNooigAtg
KjzrOUpyrn8C0DxNfGEfx56PuQpj8GGIrlK8qlo0oI0WFmvnLkn+GNQED0t0 iz5jLIGAp/rv
zXJxX5MgLVJH30CSLNzqKiEli/fsqxripdpCYEZ2OqnMRAIm9xf97LCLJdCb U/K2S1t5lKDX
mbSfk6P1hrKWPkpJcOVPo6g3muf22ZlVSAihieopTqohgSdZ2RJcPYJzUvXl itr1K7CeawfI
7cgh5ip6yCacTY+IanYfVaw/W5CCIBta9dEKsTkPBijJkpFAD0WwisuD94kf 2/3FcsxjtHlf
VNDGLMtRB5pz9wVKzcrES64KSSlJmZTZUuBOHtXaqlpv+Fu0e1iyoLJvQUBy xgl8nKxVLyKM
ftq95IR3hAuIsIKr4e6AoDiM9zC4WsoNYgyVSJggqcGYw18uitpiYhHvpHik aCbPfAM5ObKg
bJZ3SfQlIisopDo1iq/kjLrEfYmBiTnqNHwcr55ai1Ssb64DNRlVNx/DWxCb y0RffXRpZmFE
PWxn6cIGkLDkTwzBBVbvrBEOzKIGCwxAAqntOqytAzERTWLmzHZDRHHO3/Hh tnIwEya6vg2v
iTIYZi3LTaiCuJ5LkeXq81jlMhDD5BGLBZzOl+lfhyqCW1ogrQ0xYyyHq/Vp 62vTAoEDZ9QY
XT+XiMmgJVBBaDYF3mTBiUX6WtNYwbC1rWN+XsTCZ7kfCuXvMGVQ8aKlopxB Dt+LjpqxL3Wj
Lx7J68Dfqusjpsyqa+LL/H6Y8pN+SMZforydTXfegCSrrylZwRWlGIyt3WGl l8z2PnyJBTvU
S15mQCmMxMU82F8/rO3rP7R12VNA263XifwnzLTL06DKE+ag1PUE5xLwIbzP QjqRAANS1KnO
LUPQzxam9R45QzTB5hnbwaKfLxzQOhwKMiRMk1nku+rPI1kCqsni48b5A2tp Cj0VVkZrVnLn
9BYWyQ9DrI5Y8unEDGUWrIERQeY9OWBRmdjqzDa6gHYhV1FkD8OPGKOkh8+M mN93tUpmw5TU
QOmdtHZ6dxYppLquOb2LRN0dotc6yr3cg2tQiFEb3vn2xGn829E9Pm/ZGF+w iHtf8pXcnAtp
WzpvU1gQ9Sa2NEqwvs9YUayVsLTp7nuscFd2Arql1lRr4cX8jWDLqQo6uU/l EcAMFpqwIAcY
Vfb16n19Dtbrr9UXrNx3zzrnLRK3vVaMayIWhhcgfl1oTcQCI9xRaT9yYCMY /39rWMKnvV0v
fJjXS0XZ1vcm5Ce2qmw/FC3NKrpXDZCxJ5SSsiEbfc7Ibm7G5M62P6X3Zeh6 ZLS3sObFQGzn
GU+pw5He0AuHkub1PAGc8XMfYHw6gPu7WOxrd2XshVGr2+V8S0snh+lzPd0y UjNNeE66dQv4
oBjkHc6gYePFe6aTh57M8llayA/dvVOdTiZZpuwXrBI48Cx5F6qZC9WHEoS8 lGG6fEnrg/5Y
hii4695hhwnSaUgUZpENcDJVxOpkH+pziGkysG2H75+f6r0JZnWjxLNRUy4s DKVrzTSti+Ie
YZ+Hp7GJUTjUN2N3iVF8D7+CwVPsJumecvuJA8PYrQ1M02PCb0rsU0XY3svc RJZhGmXZeWLa
yWnd0749WRCwG12wtqUiRRr0jpIpdxuXQvgtILlNRYJxyq4Qcm89406SVJHD K2zPB9LB5bNa
XkPr2kwawHuuLENrWqiQ2LGCc+FPaDSvM6tnJEs3nXUbSDwG4JQdwiCh+9kP KAmZtnqW3IZ2
DD/TmqiN9FXauz3b10xGcWDf5ET51AHb+43F+BlavRmbnDt8xmnxF09CyZOV MF5RS1B1zLKv
JI1MjEA8TbCKKU6wijonzGezjQBvFUSD0a4WLvl7SetCaZFqqzH92q4noME8 +str8NnrfuYi
O3qpYNaeVTGbBKwwHMaTDS0SpXzm/XCkOYfnMdhVhNEG2QPnadKvkFjeSUGL VxNVry1zbW6X
tiqL9JeGPVwcnRyIaHE+J5ud9aPHlwqqD1R+NoJbSUuUv/a2/bqPbaMpNF1S JW3taIarTC3N
IZWD3G4VSV3HzyHVYKKMRASMTrRyeDpqNt/xRvHP4MrjD9WV4vbSLHlRJZSS NMQTB9C9ikgH
73d7EBAaOUyUV4qNirZl44I2Fun7aRZh5vfnQt7Jmuovp67K1dizXmRyG03b 81Ql5mnG81BJ
0C36yYtU8uCz6cg7S8IJ7hrQBVfOuu7bitcoO228iveawWqV5wvgF/YwjUpc /IEQwfg1APVv
DXpvBG0SR1+Z230CrMAxe/L2Wf51+sgf3c+UaCxU5Nhmlz3XpLg5KZnajNV/ ivKRa06xblvj
466jBagEeEgzDeTGeS4GUNpd7EuQPWSH1b6oBQnSEWTPXc1nTqfjoT1DMbES eQKWedLD3q1Y
On6ihg5Rci6cEzwyZi106Q7nP+QvzL4sbrfG2AtrLnodp3cYHbL2nF7n/SGV IzEVHERqpeNy
ev6rQWQTJJA03GG1yiRLnbu/bSheTmUjm8+QOCJ6GzB272X4uJqi3dDiK3O9 sLjU7c0aetSc
nEYXRWNp+ZnDOPobJXwlVaAkMDp57xq/q+lBYv7pilCL0tKjztzgJLQxAjFC OQP+c0q8OmfP
Tl7/DYY8excryUIXtlUKtRw7+VrEqwQr/pc8XxRkVORbYkeCXG12+H0PmPHB SMHPXafFJmmC
j481t2jso6cf9ZhfSdLA35RMJDFp+VQg2yVMU5/8CHkCDkGlNhJyp4NuqDU2 kDfUTChkJYjw
YdCBXCbyeubA7wHya8c4kut63L7mtkKz/HxXDqd4DfrxSagHg1HOZMzoq1GB iN2mO8vkQbLN
ra38b5aNVrxM1o9cww2lJaRgqV+9iR7uJ21op0WAM/n3Mf0XNJHRLqo9cUKG 8WO3cpDyOPSk
yaBad49Lj4ULZeCm1xahT83rrSwc1fq3C8ewR8EpFlcDoVG5QKhO9itfBc1k QOR4hUeVvJxF
Ej+wlAChuhn/tVaOZ+Ijtvgh0ROwxviL8rocLqvMPRRueGUZKnFuuUCEW6rT ZicvWCn1ztpq
a0pJnwAGMaP5w3GD1B6nejJLuMKcHCzx9F5DvuZTitwCq0fCQPma+rKsveHN 6HCvOHlq4qii
Z3BMqHmpzIkBEkVr19GVbEVmWay8v4qHa5BeZyD8h2mD5sOUIS6c+B4tSwGR qNNpz3SlE82U
3Ey9LiGxpEtS5NwAEF9W1Q3nEWpYzovnknYAIqKN4rPvjZjBJUY2cTq9Yl+8 vHl3m+rDSbTT
jJrD1iTV93v8w85cJIj8xE/rwGuiun2s2XMXL6iHeyqm2T3j+sw0UHcSZFQl BJeSWesR1CTL
BHzsy7odK+jT6XJtsk/il3cvhVzjld3o1iSC3ZMzkOMl6fq6bARRhfi/2hJQ kMaoz/A2Kb6g
rZmrerwUaA/FOFuXuWvjhGYVTkdmo1w7nHvMN4vnKzdqZdzUqdaZ+Tj6yS7b lyZOrlrmA+/O
PSd6uTxjVcdqhhF7HvdlIwYPi3Fg6BPUsejnaJPQbaOCb2hFzMEZWk45RstG /ja+VccK9We8
KG9D74SkHvVto4v53r/m8oD5vh5Z+UvWXd+dZehFaSw1XSCl0AD/GdSoMTK+ IyoD5nuuasuP
ZvLcFZsZecRs062bK7VOmJs8d7SWQFidcCaUdrEaGLA0ngqMND7ZeaetI2t3 F7gTXs5QnvZt
SQSiPO0JQLYVQPs1N9DToXy9HpIsmJME10trR2wg10cVg0yTMfkJ0MKCtrwx BNeDCfj4f+U1
D7NR0Yy4IOHa8RcfII1VxYYCSE7xkuYab5e6Lfe0bkWb65Lf5y9FORsotFmE 7L1C1MH/VNHt
2NxehxMj2eujgoSYFn1hSBVxtn57NKPc3DJpr6d+56ABT+1Doyf/+QvaJoGO OqcjzTbcsLEB
Qwg0q7NLqCeJNjHMJAJlLUJvzuFRy+uT/NbgeYgxEaKYhjssUYqddm3biff1 V3/w0o79OrGH
JH8iLf3hJVYqKaXgd8m49/aXpSRvTx5jbYtfFrSbFurODijuhOAHCqwMyKPx A749UnoTbWSA
V2sKQ7j4Gv7JaHaxEW+Z2q5Hz8/CuEG3y9Qvb9BjPN3UroQTqx7SE881ezsb 3ASegG+tKzxP
wCnXmNjM+d4bw4cvKX0PUK8cL3SRlQaKTfttWjv9yzSzW8zK/J409Ub7o2y7 nbC6sgTpZ7K1
cRgNqFrIEoft5CWK3FJjF8r8dwwK4G/n4C3fhCXqlSiosMQI1/vbNODH1whG 4F/U4Abv5e29
kHrkfopz61eBxSgJngD7CR6oW6rYD71B8YZPmII7WHBZXqNPQETnI+4TcBPj 38H9q5A0euC7
s7xtu4MeUFg+Ch8bbEf52BZcMw0srz+iNRVmLtK1pDEPaGA3tY53bmjogw/j 07bvjU7VKNEN
lmQdC3qL2gliCUrJTpeCdTRBwR8ZO771ULofZFz0vgfWf4IwbN9ci5fp7Glm 0TSdfky9U+eS
9aBljZwSbzT6iYSKF8t8LdlLXC5fcGpHkjOR4Rkw4vMOIjwuuMx+0NODlJZT mDT6oinGGRHj
feHlUewD+CH+odT0ofAJEDOyUhY+OrpLXbry2p1IixYB5fQ7eTikLadNzNG0 TNq6BueoCzhD
BVUKA5U4lwNElLYfn22c/FLdJPLORaURR5auoBxp4TDf3baWDqHmM0wdrL/r F1WZcaW9A/Gq
ZuNfNfDLO5rDq5WTqIfKO4/DVtdlS8U205XoLKPU0aTYhhEXA5nSU6TO94aZ 5kW/mEO7l6lb
kWzhQ8G450YMMRHBUHQ9ggqi/B4MmUZfs16u3G2Q6M88vuQXcC3QZclNrqGG l3EbRYJEbITu
MkudacD5ExA6/cj4OPet/hSztqy3yLERdIdSs1AXaKIT8XjzeSGHVONTVwmH +3na4HWuceWe
83XPiLei85Eg9bfHzpARwY0Pn/gsF8F+B9+ospfvF9kEFgzB/JEi/I6W9l78 YTxFhw4Q3yzL
lijaJiVS22ch7avQfNl1SvzdVrKTjGXajH63wp74elvFCjMtcw3mBBhKDsFR BeD8Ds0fTx46
2F8raqsD5rTNW5BKs1/qIiTQVglvIT3YCdZLftGiTcCCYTwbS6jr6a026Zbp r187tT7xk9vD
at53LnrFLJhIn4Bvt6akikdS4MbZxRD8y+EqPlyWZ88ni5vdMcw/Ll3uiGS2 OibF/kxvfQJI
6w5HSSFOapS411pqEJD79IVtEXtmuRq327PyTmw4GcR3vZg5leKe738gYZ2M +1rs61TVy7ul
1uj4CNpdOduwCjPvIVS9tvCTY65PpOyfeEgbnPw1gXIp43tmvn2cmiw3r2lL GN9ih+im02Mf
hhNw1xH7OSb5fBvqvUolqlQP0vxh77h+8tD6paDTCxc+VinGTAdHygyGSBBg F+hVtmkw9bcs
nuv1MvZAWCpLnePBRcH5Jidg3N4O74cHs3GrdVl+2bJW6n18rXCxAp7XHvR1 XnGIdzxCl78r
z+XoJRLf1/lOVyVwk1Z87bDSTWnpHYu9b8gQq3Inems0q7sLsZvAJatM4uaE yJJq5HIyxUid
p10OMMKJSz0B8d6vn4DY4+uLyEcpytPzK6TblVvrh2OfGfH19FKtSbNxh5q7 zZrmGo22ptoJ
hnrbMOdVvdKuaEhpMm1gyRNAtXg38a3M45Quw4/VCFPEpXxiHi3/cxF2nc73 KD6XLRyyKEJK
N6JLHpjQfLrl9HVVU2O2qsszw8VBL3tfq8Bl5A0u0JY0Vw9cIrNs8DlZcHxV TvFc6LotxtuX
0HCE/ItLfkNX9xNdmbtly28hvM65qbkMzk4dfDpBpq6iwdmRLMf+1duvzsoc XHNLBkVGCA/A
mcHwQXFNQXLOSuLO1yMohDwYzpTYu7be+OVL6aEvWPMPTARXjedf9c8rJL3F 0jAX3YGj7Ajn
SRspfj++p/VO3tER13DPPWTew9w6Unbzxik6glzOPiOVyMG+3rDqX5eB/y0L B51aBjj8KipI
9ZqGlUD2BAuvs5YFDhVQ7nerEhIb+UhJaCAVkkCUs21ky7X0+vDLl3p65bIK Cbs+4hRxlEPv
cnrfVzPIPe6Ea7hEJZPdznhB7ZVWQI0R62crKo11IDW/0bdD9AkyWUQ/GDXV erlcR9+7Ynv6
basT4OjrV7c082P38QoqKFXd5L+yHLqJmSWvPxwVWYVDesTvAT+AN30Leu+4 H3HbruXFxlru
j5seCwcWIMdObf5K7r8mXdmgZp1cH4GGE9/gh+i8eGmuOZsfI1syrJzvSNjZ r7w0mXQMIrJk
FG0Vsp4FQg/ObVVlxfopB32tO+2jvrkEsb3LJ3u2YGr5pfTE0x/UCIlYX9ZL /Td28v7TUEWe
Gfarz1QxLhJkhPdMh74/I5eMhsARpiW7jUm1ZWlRV3qPQxVlCcrUjsRYce51 nFGmaQ0lPoIz
tZTP9iiocHfBo/SF+TYqujdHGmnzfPI01iLNRXQj06guMeqWMTOPOJGUoJV7 IuUnoHtcPOTi
eixzeL4kKlkoahVm/2oHLnZMjOwXQ2Qf/3mXnk6ZqDHFy1xP4+HIfqhaQk2D T3paTRuX6YlE
1o/VaS/fipgNp+xllRbSQ222OOZwJ5kqI4eEFKAk0C8gsG14BQLb0/fcDh+/ 8uAnaNdeUU4k
S6ASIYQy+eXylj8ByN2x+ceP6AxPwPoOXMgppLMN17Pn8vbOPcmSdzqcInvT t0Qe30yvO124
+UsSY4tTZi9RL69pNyUmb7Tj47OVav3Zwnta8bknwOycvGe0+nBly1iJO4Yz 20fL9Ped/6oI
THrHr54AxGe/OI0rTL+2j0B91Snr5tRUZkG+NV+jWxidr+4WnMOQ+vbBXgi/ q/C37lbjgHcC
5IXBZew8o5i6Oivz1popqscrmInEMXPOBzLdIlGBKFf0Of+ha/8OTtNd7ycg COVXZdAIrHz9
Jr5GBL5oeQLaPz4B9waUJ1Hat4ZPwGqH/yNbAP9+yrQIv5d3qY1QZlkc3VhN zeOohwmqviTt
8XkcF40xo8y8s2oemWW6+G+/Fnstw+LL7n9iLP4EEEqQ1cZ+5AVlY9mQsCQ8 JEhPXCyhWqv7
VEviImbJpX7adl4Ekdw383j1MaBNWpFgHEWW2Uwoloz62/pvDKfHE8UplZi6 3NX/sGeMg5lJ
ckjd9P9nP3enDOu3smXvaQjEUtquObKfgMgcjFtmuN+61th/GGC/iO//OWP9 f0lPmqopZ5cd
q6wFfZwkQRP2YqPVPt5i0cADA8TACFL5m9pqSJqnSdNYbblgQcpA5KFu1f22 acN3UDIDDBZg
GecU0C0hbMMcjLF2V+wKLjDgy0X4ua+TWu4Wbqad+jbBQaEBfp2Ds3cZac8a Y+3BW7u1avwo
7ZIU5Elnm25goqNeE804694KA0v1/gnAXvUAjooq+IZFGIr0lvR1bFX1263S j2hDdT20teA3
+1JQOfI2bikV8EXo+832y1+pPQzockxnE6KTWuM8Xm0/DyMi3lgPEGZijo4X YcBMIShmq8W1
Phfrq1jQdXoGEWG+qWfYdIA58GVW/q3FfyA+4H/4557fJv3291b/vcUBxzFt yj/2NdILTaTf
Wj33v5h0/YsskirtzNAFLrzsG+S/dTslSihR2/yjZj817edm2vQL8tYVjkF8 +Ayknzww0/+t
bfWvlG5yvTIgNJJG1wipQ6VJ9zmulYs4mtcEbpOiwce70w1WuRGdXWp7fO97 Yllr877VpdvT
zSkvfWzEIP2mhqO+9E2iREJu7J3Yz/evV86EdJ6AWSH/B2J8ux9IMbO9uGgN Dm7R5HQNjbUN
L8jn3JTZ1bIOe9ZzxWlz4D4kYL4TrIh8NWPv+o11RWs8beqIvYKWmc/IFUKv HXAYHXPXcgml
4d3BU0EitP6bVj/E5kp2Vk73/BY2hvyh0I3elOzVJ0BvJrvhWOPnkl+nZqCo GLlhh7COkkPm
Npwz1o0F0H8Ta/RW9v0xs7jBLy4OFhEt3ltWzrwklXfwKV/wOJBacAmKghK3 52CKbetPTHfM
z9rUvbFvgcQh549M6Wh8zn4LI55p799h8PWXdM2JxycAVU/vAXQncy43RVdT nzVnd5S8Po34
QWGQu6Ij6sgZnfZoaWSVgzNRyjGs0S8lb35l77TfIYWQUJUjAeSZBoPew4eA 3tWnRXk26GVn
xrhYKkHYtsY25r/DbP0E+AdTnqRYtV3g1zwBbR2Vkusg4cg+u3HBxym6xcty FNVWdkZcM7cR
TS6RKtK2TELF9dJr0x4Sy4jWyToGu+kmdPDNyXCwz6HwFw8lBQgpBN0sAJkW lvIaVGN0izrv
v7Ime083z/6AYC9+fFLk9gSQdBZca+6r1wTKZIj+bGkcCKjMtEsEs4eMdNhn EwluuPZ3uXim
XRrhW906xouGZrJYrE97Qtlw1lqoCGXdBG3N7Ng4Y+QXNSRYf2ce8d+oI3Te 7bTbytQ0frTa
5ElTBakPL+e5OdJzaR5ob85/m4tTwIV06naYXXgvVXUnHvJ16tW7ZVsCzeqj GKvAcHoAAYdY
ZB3tNC4K0UsAXQLh+B8qUjbX7MiXk0Z+GVmwoq9tsIdIa7U8+9DIXr3If3TO 3l+bq/n8kqOH
M6Nclr0L5etMHnWPPI9nWWg62bvkRlAnXYeX7NaszL5l2NvMcRFjEOIwYPuH 2pi1nyJbPZKD
m061ayKOQJH1bBTjVuO0ZwxWc0l0cXJQgIzKXSyVilz5WjGHwpsvuuSGmXWq pTkiXnx+K2ho
hUyhinDxFZf9YgnmoiUtLPCP9anQ7O1NWxoJtXet3lW+jHZY79Kfp21MVTeq EaB4zUxKxuKE
8FZpw34DfUbOx3DehqgWDdTU6WiWcgWZni61x2/GHDdOe2HOFUhATydhAS1Q mgfSH3EPCR8D
67KvrlV/lb/ukU+ApJ7y3T1TeWF0vjZK61hl6uaUg+u+TO0rtwar5XdNsp91 /LQ5htbUOUdR
kt90tXKClNH3xrW9Tm2cpH3iv0izO5y8Ot5qxHUi7jLDxfTZqRJzkiD4Iy+u bauuaAM/dj9U
+17G3jwBc0iZV9UTg2e3Pm0uhW28Rh0eMyTZQa7Cd/0ig6XlYsvW2Vakmblq vb+Sg7ICkPvb
H/y3hegm6Scgp7zw4RFfq9uQZdKVkvDaSL5qonUJs/SyTYjxMrzNjaTqgG0n KEF+8T2mYPGf
272zgnX8x4OBJHmdWwQ6GXjBq9kUa9g8wUsaSS75JXSgPmFR2FgDZV5D4m4n 51DUe0/n3myM
Z4nhdahumpdjijI4XaVeEvejF1SzT2rgOKA99lN0DWVHAO+9bMWubm/wT3su DMN2i+aqtGW+
hLd43F9UlLicEne1hY5S14SXRFlqrC9Y6Witg4eST3uCkw4dqJDQoruIzwNl ibdaDCOAU71y
rl71QOl0jQm7vGxXtSabiT1MGr4ZVVgKE+6Qhj4JPHTORQ9AyJ6mi/MJ6JAs 2mvMP4p1vIzU
87aC1rZxPwGlXp8TdJ4Rn0v0YL00DJcGvJg+r427knr7Y1uDlQt2epWTEnYK P3eXRzLVk8br
vI33iE31CAHideJnZU72zX/6MhFOslQeQmWnzJsYJzptSQiSpdE7+Y6U3sPm WELqxiQoXhb3
WoqHOfwMc7Mljkrs64e1faadGYtRgmseRtBna3r2NpCMLLC+AqIwcyHKLls1 AZ1igdVd6IUN
2+hYU2eHSQ0j8zDxld83iMaDGfqlwh9EpOukChL3H7vIhKoE2ejfRzP374Gg pSgNuIj/xk1j
/z7+Brz/J8qsWWYbaw7tKbZSGgdwI0pzPdPla3/RLK9aZu3NiGlaV2sJpnaA KqaL5GA/5NuM
+YR4HS+rzOWtLRpzKQjZ7i1EFm2r0zYU5s2QxQon1Gn1JG89gOcJ+IOg/pKy ThBtv47MA4qn
JYw56aaW5yH9kqaST8NIu9y7LdnI60raeokfAd3Nxk5UPKlIKfYMMIgc1hGb QOcetoQ9mCPl
DE97ZcRICKMxOzhKFSAHLP9WH7zfZeDQRwKKCLvKyjG24eA0qWH3sbB1F65X JyXVcVwd5vsB
n+kGYPNzq65DTUtuUPJ2U+aTulrdr+3p6vyZB84gFsoCMovKODfEjXHvJAHY mX84MG9yTyvS
RbgNFyQ9+BIdf4VJprzqK5UXH5XgmDk+ZbPG3Ret+GB+CeicFLHHChMhXUdb glPLVm4bO6Q4
CDOrre/D6VPhfpEsmpdrBktmf4Dch/iPxfzX87k/lmm8pIhHwVltbSY3uXse 1QRwb0nr+s8T
GJ3fOP7qW+veVszxhpzlCTggF3+MiqizgoVcBqfcP+o9AStTv4iJeA1L2/bZ yuNj5fVUGuN/
ACv9bjULC/VnDfX1+m3dnnVyeX13kIHn6BMkhr8oJ2GES6+rrv5mXZE3bTbp aGmFc8RmSLWs
70yg0WUTGWD4MsNyS5AWJsp4jZS0nH4PLdP3oHBSbY0XxpiHpaqXZQK0aaFu +pEfl9ENWU+Q
6h2hi8zkMa8/FuvUPcdL18aPdcdk6DqEA01WPUQBysiC30f1MQNDoqF9vKR6 OkbKrXfCvskv
3LDYaD8qiqgKsY3y5hFz9zQjAhDWAN0A9sVdCorm5skKNnNI4p3MxEEKylZJ 4EfsDZwQ9H2w
9nY8nv8ivuGMTHXg3taeP97ykoG+7yeecUV4O1wUXWnJTZkgW8K3c0hMXWYa K8i2Wn7PTyoy
Swxn5S1Fu5uducCKVQ7S9ru1sx9pMxCf12+ggtdF/Xo7limbp2vp43R1cyzP Zlw4aZmKKPLD
yFZd+uHSgI6mk7pQX0G9aAvLideQZ/4WN2PIHiMJeYXvjPi3zjfF/QMX3wII YTWirG6Rirrb
BmlntwsWdGnaWn7d9RqLOHiujU7fKd1EzyV8JPTKlTtPdedGN/fa7M6MVR0F G85oMM4Uyduj
BQfOm2ix3bHScrPXW6OtHf1Zj7KLddOZZ2sudUQCq/QFGAZ1NN9gM8KwN0yy +3nmYDxwjb6e
YBP70Vi9OGJXfpAFSg92d/vYpzF7AkpkJhC9XvXohZzERFo7WlrbVi69tHS4 TJC3q5bQXAcZ
E0UvVhEgYXchS+Uc7qDQHlxrdb93jOJpcLyYoJJzoJhX983Li4yK7tMhwlYP 0aQKFNzX+wTT
r3PtIl07laiZruXdIqfPcuzG/D2abdY8GL/LqkRCJxuJtBFWTgUhWvjVD579 psHgphgX17Ul
NtroJG19Red8GQFq+dmgBZsrYlFWPJhuQ09Z6YbaVkiQUWO1oiRDzEk7D/wo WdXgi5ctpFaa
WSqohwIO8t+pxu/FMRqS9UZxmoSWl5fmpfHivNwreRLt47kp1tfo375M0Qev rjnN/5pIffOv
+UbmsYSgXdVsJWkfZ1RXJFkQOggbGPN1RbPd9zQdU44F2+fxMMJ5RNm2RtUD rwzSjhSVlUl8
u85AqA1RxGFU1EwhD3foUEqm04zEyTEJskkhsXiMe/4XpW1JCPsrkjYWkYMx OrgacUEQL3RL
dypwew8HIrO47hjVZG+EWcSxYozvm9e2pPp9AqakiEkLxAjh4XLAfd1pRha+ ty4jHOmd7vEd
5fBc3hPwK22Mtl2Gn/ld3f88u/Jd9ts2FN0Tx2Ah4Q92jWZbvx0rrKoKWZaJ UVGvolKTeecU
v8PsHgFs1S5Rys2wXwy/2js2L7KOpdFd0h3GMcOl71WrYn4Ob1qy8fZtjEss /wcRYbYitgm9
xhCYMjbIJW3WM5wmosHNuFZMQYPZDSiZacvXAJHl0bWU4EPXfW8U3oWFdD0Q qEmPJ20d5tLY
GTnpU8kLC6oMx0XE966lt/5Brr4kLnzR63pLQvKsrOWWHIP2DFlUymx8jlx8 nfarh/OYQhZN
/6/c808T01/gvwjc4HngH6pvC7ld73bdL21SlHlh0ty1z/LCDt6e+DXCkoP8 8+qgKMzc+or3
M2+aI7tIZBI32i9Jo+n1svmduIhpPLUcOAPqUwT7aZ8AD0oOYN4v8wFMdy+0 MX06yqTsZI3R
ZUt2VlJSytn7WUCuXeNdHj0yVd0e9OX46kRNui25u+2LmiZJc4RFro5xoncB pUgyLxPxzDJz
Nj2pcDGlPCe0QeRMW+pg/8MFuQq7JGO3O8pU3hpJM+HRzNja4r6z8834noNK 1Zw9whT74nmj
z7SNExXd1cPwFjwpnLKMb4M/V8B/carfdvAcARDYDwywdYx0K75eN9WH7A/Z 5hzjgWlBpKV8
IOy30a2+c4JLcU5qOta3bgW5iF/4GngPN1QVcZK31rmb5UwYNlVK6s9UgC+y y7QEJrZfvgYI
7IujWblrIilG6qTfcelJ1zZWWX994QoPizGy4FHqZRW0YU7JKLCxJeqi1Jje 0ViXblneW2Jo
o3lsNWGTUozaSUpToWEcaU1V57fDmqWHmuNeo4LgeIjGfnMP+UU1Sh95/K10 /Ec32x4ejE5L
ef7LY4jkk2OSUFK+5FfRStkCg9/gxMw0Ch++mD8B4slPwNVP/57qrScgfnz0 sX3iCdjpK7UI
YP5ND7l3UoOP/qxPwPHeExCt8/WfgUXb3KzN5Y5kzkrYn8dlGctmVwmAOO4V JIqQAMEHvpHR
l+O6I6IWoMOrgo2Wwe56nkQUygfdop714YmorO8weson0x8KdjpBoWruAfo6 iw5eUNbGubfa
vXBE1HPcve49XJymSm2TFdEbhFXzBr32Tqh0h3kY8I4MqeHUyCMbn5i41sDJ zAF9U29kTjdI
osvLKgtXfDNbB/EaQ1NwpeizGDMJLdPG0VOhhnCAXvJ3VgmSWx4h9/BCuo8k OcnTLKyNiiyW
fWEAAR0VrIbEat3WT1M1mzbjKdemSMRJ6AcGxZgdY5ean6RmmlLIfVTFq2lB HSRTK2E+zIU2
KXW4OqNOjmRRZW/s0uP13tu7P0dhgAlzEIQtvn91Srf90Qel2DYZp51uqjIJ zKCmcpSEvQGL
JSO6A4c6swYJZpFO19m70pyYbzmIFG0ZUgUnbHGS1qN+USkJnsVmNMgN0nx+ whdMGHpQ43gt
x5a2ovQryJTtL/umE3rkMZtMYPoXPbw+nGf83Cqy8RObcs2m7CefTi3GoKfE FMt1Kiyq4+oY
FH6RlD7UTkp4VJqVuzniBEbqeoDdVm2uDWGVX62GxBzZTlVbfKDydq/H5cZU t1fh+M5pAcD1
A6S3dnGzCzVaJHd7mPrfkndzNOHgNil0qXqJd7OURTldfjf875LbSESYnYx9 PRjmVwmS5X1M
xdTLae3WAIo39VqLffn6xaTtVOjxRiqnj7lO6/6ImfQDhxcP8sfJtnL51UkV H1WLNeUJNCXw
Iy2335zFSa5iY718/FH1BGQP+t/dtkFlf5dboUjdmYjeaN5NaIoK9/IFoJJB Ms6vtS3NDqpz
970qcm8Hg1mUxmXhn6WYnnLSnGqF+dyFH9f0piiEStcFImjFH31hA1ghpK1X x0SmRNB84L34
H6X1mRcn20aT9y8d1wXdZOJEC5pcrNHVWIxzwqXsow5Wk/qJ+0eLK8b/l0Pm L/C/LVgmx3Kw
MeVabvwzlTp5vL88uMizuUBr3shdy885/sL4CqnUMu/PUQNEHz+CH+PwwT9T 82Lm6UKVMXiM
dpArySJoOqJnrYzFW87Fp6I2CJbAeZ2F1qrKT8AzSTcnF/ZMJxcR8HHSZQms FILqx1dGSbJL
/f20WS7SpzH5ZcsF2QjT0fRf3MyuZKZeIo2nGtJZVeAJEzptU3ASvH7l01SV yRDyE20YpJRg
Ww0/QMeMsNlsIXAE/U79SsaCqYEl5+h54DGSbQTQ9rupJvY38xSvRQRQ/hf6 p9HOxjRGEVOL
8b744oltYnfAciii5gn4e6aa9vn9NtefJgy8ho+2zIdCW6N3r/VuTkUM3Vo6 8uKP4B1kDjoF
kcDlJDEuXAsD06e9tGso0bTOEcMxMG9R4ERPnHas4LK/1ULGWQhmbccNO8ph O/E65gjgZcio
QngAU3KXgFyirVLrR5IfPEtE1u/2lH6gRQpHj4qYQ/RY0IhWTeH16D2PZntk aCd49e6aMl8q
T9IGWrNsQcR8NBN0HVhfqLWqRw2pe3nhBoGvsJtzNRGDoeRykl/3SCALzS0g 5eT9g5FflmpO
Wh5+ru1OQcMqzHQTRbo1mAFIIBnlviy0SnPWlixBsTfpWMgb7/EJC4AxUQPo 1DHRHBw1eSnD
DniU8a79zqUnK3L5UuTw7xs6quJeMsPtEcGNyJIFCpSkLAuCJ2pS2R0OGSAJ pGBL0bIrgh/N
XERdAYRemnwD+I5Js/dLXKS4no7dGOvksmrarLS+fAzh5eyTTHlhlycK+J/q Hp6AFoYjmCj0
bR6YTJc1coLby73LJ8CosbGpcWxzLD9164N88GKDHTVA5vBdoAfoY6BNEw8S 4cx9WfI9ZdQF
sdjc0dSF7OpFEB7HDROMSh5uYWJWC6dBuZd40CNT4mqmkL0J86GelpDvdKGn PXWwSJNVoedV
5lCE3xFHg/iLvp/A7sG9sK3ll0wiz9ZLPRirOqdOjqp38VHoLkjDZ4GF7qsv KbgDX+wsw5wU
BPvnG86t1Gcr1Tc2GK28KmVJQcYZZCpSgS0JVkdFFCKpLr9XObkMTOYnVKaZ W17odCPvkEem
fkGK+giSo6dpWCCGirbDUXatYG/7vlGo+YF7JPCsm+BW+ue+LGHS8ycg+VuR iZFI7GdGyhed
rn3wcT5cJy1ZqRhJyU3e9tXK2a8TzOo/ZHlbm3Fx8W0wcQzNMuGdT56+aeus RPE6H3YsGran
AZnyNsTsYs0ZjonUKzggib+gOl7JuJ2kgDk9Klz/RXQaSmvQSHQV312eWCfq fb1xkCVU69+A
AKfxUWcSmqW//ISgWdTNkTNEuIEN2gIBg+SiuGqqRlCiaMOfhwXVnoGi7KhW V7Ex/NGtbmWD
y4/XIVPLu8fHZq1ZesVfF8frScNmS4AblygP3obfxWgD/GlB2ROAy+oj4ko8 Pm3PaNhPStR8
534nGevyLcU4ihEJraGBzA1W4JFlh0uv1+NSUd7uiPWYjaVCl2fBsy4nVQq4 +7QmT/H2NRS8
HiAs/gcRW0JBcorfFsGTNFnOyl5+uGIde5i8RUNlNXXFKO7l59sUCl/6Nj7Q /a8q/C/wH4Nd
gSMjiloK05Q6CS/sWdJmdUMjB8x986/MPbZfUMpQvntf915hPfeUIB+NJx5N +eCOdIGVT5uE
nmtgooyyWYcf+OD3o+2FzGiyn3HTJtBQtPPesBjhzGC/WmTGiHp0q7MR2SOU 4+unuU2wChEX
2O2783c2Xp6552CIVQXv1SRZgzHrhEQZItKASI1kDPeESNZ7Eyw8Qxtdh+Sr S8LkOFrkbmha
f4WhuwBy/Acef2H+ASThSEai41Dryutw3jXj0kXt2TLnhS65saMs0sCxV0bm Y04kR0lZPOjc
cbnwGdiYbb+jWZS/WdC3GcaD0fsL/dNoqBuPimfPcH48zZvCEa4DYDQV3/oJ +A1nvWnbcK1+
Ar65PgG3XExzOagrv+nB6rf1mqbV70EbwaOau3Svt96zHXLBRL1O4AAaMq44 9btA5EMtm5aH
n62phfory/Kb8/Nd56/v5OcjUEw/9H9HygeMF3TmZnlm1Gy5bPira5CvCNmx HdkE0ZjWeaW/
sz8f4T4nSwC6LU6mA6ZJNAovEz/kz6EJ68CfHhlUouWFRhFqQqJDSZWpipHw KUPu9bOYQjWY
6WJvKb7AO/XaOlfHP2NRyp+TV1uIinDflJTKqRvvdnWkkCyanx+49b2aWzgA g4q8nGiprdfD
x9y9yqn6s3hXORAa7GAngdO1Bz5+QpXrmD1WlaaaxoR+B/NPQj1lZQXc2EQh OGc54k1kZwtl
VkJi8Wvf42dtji+dHPHY4RNfDdL0kryqSoS4P8R/XcVutnRQshn9yFvahn2t pTTFbkdbnbW+
LEisXTDHT113MX8ghasEh73ojCC/no2rcy3bmfJ+896l39a2+r1ETsPiXhAQ J/TtWILwt0xw
Bgapkx1tbjduTscWUrfAc3PRTw8KI96uS35JQ+MglYs+HPhFWVQZ/4vb6cvX E7++6beSt1fX
NufcSZHfYuwILmvygdgnkA8stG1mXZIqSUD5xNdMd56ABUqTO96ruSeg1h/c ugIWya6zH02J
XrY0SnEfbjiOsYJjfnNtv6YotXw5jmG4r1zdCqmFNNbVNoQna0CIPiZSN8Hm MN7IjSA6OyuG
N6OszblJuqctTf77fWPak8/Rsz1GLMEnTgNHvQxEUCKS3m7rFc0fvOQky8d3 iHq+mh7nybQG
EnpSQ02YunLfzcS91O87g364Jhsyt02IYBBG+Sj6mszbpfloySz3KsfTasU9 10Cf4HDQc5Te
CJQDfsCtnViGUF97+uBejfIlq6Z4L+Z8evY8jm8TMOPsg5KhB41Y969iYS0a Gq4seYZcQtUa
m2pbCGNF6z0LIPAyA6VEyo1d2AOSF6O8bq10uyor0UJHnWq1k4iF9gX9ttQy w6SLzz0zqhqk
Pr7Y6Ypy3VWNjSAxa+yw5nuvVOrhcxu8nBX/6lvFLmuS7suUeJlFAarExKDv UCqCmc5bq5my
2ol14YIp1sPhPAg9yGdJwgzXy5k9pQbwHIC3oygsN+09WeiIX+i1fqh0nXa/ vEq+1Bx2IVjg
bYRXUAle7EWXOEeDio7yNIp31Z1iRV0skFN3gFoo7mQJF6bwGT48/jAxuVvE iKwJxONkSFpk
HmOEY5Y34JYZK3Nt8t6ZR2P2PIRa06l1q0oFOn3IwJLU+mvO/Av8E+D28zHX 4ryQLUVNufX4
1cYGMG4PdbJnEp9cV+Vn1BvVd2V4N6ZUmxC3pFHdPY94zyC5cZ/PYp1OeYMu W0f0L2kdUQ97
OAhxtwVps4+gW0B82UW/2hTDVJYrpMX7R7U+M5LJyEB0VlHUas7jMzJLcVZZ 78LdmfmIRcWK
1/avwCOXlFZRHWc9GvFVkm6d1OQlA3kVcsLp7rD/W7c2noD/vjsH/wfsOJQ9 uO+d9XbOZ25l
Ol5G7rDSJS+TB9/346NozAsKUqFjKgJvcHannY2UEfZEUma+LQ6gl0hVlame xgTZSZxnuVxb
/onlibFaULnC8qqhDba+PNn0hlSj+iWuDHq2V4KlhbkdNhHAVcYlJ1DM32Ug Dhq3d/zpuQEB
RUYWfZana1YEQkxJYUNMzJhjb8yb67jwHDRyMFpIyIVfTSR0YKiAbAkIluiT uTdeAWi4cTBM
Oe/0XN6DSx5fTPA4Eno6H79sm4R3h+jxNz+jcqqd6kGBd1OdL2v/33H6Fo5U +0Q2pLbtWt5v
omQo+yTuIeXQz6DL1HLutNpCHSqwLXjZTXny0dP2zvSwbb7aN/tO687ygNIq tv/OYtErdWHL
7abueCFrdr1i/5E3VPGkfLrYGj5awHvf2y0JxkhojsHECCPz44IYh0vfbmLY 1invQSvT2MUK
tTeWkPZwd9lpjz5N53sJtpg95+m+WX1TssT6kgBzyV9TXFxLlH3pEqhwlm7R vdF7sXtTlnyg
aiA9MBy5kwx3IwrTBurJL1t/0pxF0nbKengUNx1uS948vsD+CbtYRlNuKpKt PboraJFk7JS+
tnh3PspJmofEN/YT2Yq+dbWhjB7DOxfSnA8qCCZn5HniRLNTKWU+KuPlMrXW JqetX8wd3d+e
00Yny69Gz8X1VHmVIP1yVm6m4oVOn8F6GLoThlAHw729fb3GbPX6lrpWoURl 5CS6D+5dGhrw
2sC39peZvYJQxMRVZcxdoaWCb41LU92bLYdLlzfbobgg54gEAtQIzo/wMFG4 72OYa8H1yUcj
gltVWQMyI28zvri20yREDY4aouzvd5tfl3a/dwy6qK/8SfNcvgJ3nlYxpzk6 A2NEAw8gSrYA
AK9dCbLL4F9yrh3smXyZ9RoDfcWWDkU6RdgcqKyjegThnhMtKjPif3t/8Yst /Dbo6geVI275
8m5dSRyyi40MVhb1F+iaKX6ZDV+n3YUxKrqsjFjnA1KFZ8ntn2IRjHBN/2R7 hsWPxQoyT1dX
1ehQjZnO28V36CZaFMMYFbPbkFG3FGFK+hkX6XNQMZX5ddD6pOaY9Qwf2qUo ta/U1oi9xeXw
ERWFwn05SVfnkA7pc713d7Ht7d+Rcn9biPw+D7xLMSKoISfp6FpakS1VdjG7 enTPCnck/iio
Gpz11mMD/6yTe5N0k5xpO6TZzWmdktRWyKAlZZ4n0rNsq7YlWMpePufchdED 3eW7QXHvqWk5
4PYE/Nmy5i/wvxZoi4smLMhrwKztayGXX1Nla2xDwf4i6TJlKWklI8+XyLd9 b26XObn61AxH
gSVbqZXgcnxhDuR/V0lnkUTNWL+yRZaaq//xO2s/gAsw967ZY1DJGemkyR1+ 1XY9mZB+DIg4
7fsqwrgUEvLsboX7QXtE0n6B5LWQexLeE3DKQ6hFyHUzQ8g9SHFjZJNDS6VB 9Er6Rt13MSNB
vm9KxCTBWhd93iMbPa1tju0rW4T79xlNcCOEAV1zA5N7JU6iPBZlRd/GD+PH 8THtOVtFzZ1X
gW+Og3s0iAwTUV6UEfYJ+IvB/idAOMw9q5zT6HQQtUyhcob5LEw2F9PEbz1J 59y/b9fyCXi7
+wRcmGlUS+C3/b2Dsd+l4rKx34GTLkvWV3xn36/AH+NROWOgpoCMgDlV8RU8 znzFlKieWqjM
3247BsfnVEES1qWjYLtVQdhcEiNIRTno3rbCwohpe4oWijKX7h8o1jfXMTZ7 n5vryxTVI2wI
9viZJkgQ9VDggBvHHXIaZpYHfKXZnqkQPJMaZHEe5mnVNJcReOlEHaoSXJ2A BOPOE21hoKec
cqjWwza+TmjrZMlbLRW1X4PDgQl9/j3RJmT+XU4g08cVHNcHdvnatilowhIb G9tXY9rkUx5Y
4ig7VOLwuArxzeSz2T7VBs0AniPXWCxDQ5tfTr3Q/5BrfQn6eK4hKYXsjNyJ 6DZb5tIXIX6E
Wmmbq9Pu5uImHuHoUFEhNkBiTR/IhwJfTp1zlitZG/nNLijJhItZBgtXZ9Hw pUX86GUx23at
lUL0qZdEIk2FMzh+M27pfqfREd+ok4JjQkTjMh8sbFE7ax47GmLHvG29hNbo rFG/VG9KC0hS
Ec/4Efw4LmR2Khu6tU5edzxYEXqOeTOu/ukIbet+2afw+EQvCgDABKH5FWDr Uv39akMjPbuu
ahDq8SwEtSmQOiZFSQDuqLBVp/J6mpy/A6Kbn4fLs3ZcfjitjuCzb5YZ7sPn /szuun2UpkCJ
Jr1rpuq6VHbCJ/xAZNeUn6C6l/hdLMYu0ChcPKhHY+wU5ay0XgIjOh1t6V0o WTC6nj7zTU+6
ph5ineNYW8AHThqyUBzBJCplL2rfCvnhau03Bz/fNW6dYujly3/IGBeS7pHm nCPnQUwrYMmE
ZgZT614ZzluurDRpGvEiZ+LAJ2frFqqYdsY1Jxz0eQkeNYCZMO7w+XVPT1mL 6XpIkg1vKYgw
+icas3c1UiqtXZUyvMNQCG/isIoI5CZVQ2mZdMvgO7lBdHdLfsY7xTK0OULB LI8w4Y3EPmkN
aCHg+nOr+l66wGqZrro2cF8Fu9/aA/+w5uT1h7U07qS3RPiicp2wgrsZONWm TqxLGS7D5qKf
ojPaBaV2A2XpiFOymp/NzERsPNJ4xhx3aj6S1UNaY0bQot3n58/kYe3vhJHY UIyDifSPVqPc
8GAETh7T2SC5+4SPNI1tzeOG7hCvDYjKqz6cpI9ORVQw8T82MhI4EP3+FBvq gvjjXYBYhZVa
0qZvBX4KmuvBCERg1bwKon833lcSnxHdNFDtQKRPEuWjfzI6y3q8uNRp7VIA KpLk6QOX9fAz
Xu7ohOx2YjVyCWG/k8xBrrynM7c8+brd/h7h8OPdV88vvroa5qQbbEMKWM1N n4vhQlC9Nbvr
Io0Ldt47xOdeR9izTXewM/qmHOQNT2z5nn5bVJJnQgThuix8mhR7AUKKpFRo bqo5GcJytGUt
vOxJ5al8Z2EwpF0WBoanfd5Phe+YHoi4fc/qiPEEdKg+BDX6C9+9vOMfGfL2 G4tt2jw+dz+6
4T+Ya2oVzEEuE0FZW8LbHbdKW5pOdTI3m6b2tAyRSaZPHH7eVbSfuZnORHiM MwHYaO+8N8xc
F/zZxzvXOuWBp7pCA0IB9YSj0tTPJdlR3lioepK5DVFi+OgUXQ92EMzX5Rf6 Jlvz+12KfiV2
oqns46+OQgCO4BJ7pN3/WkX/C/07+lZvV/dVmk8k6+N0Y1Nt2yevPtRB5CCb GAGjC9c+kbPF
GM5JLQzjisECfzsb3ejDi2kCLc1k7Nl2hxjC4ZAZTNjCz8Otpj3Q9jX5bkAu C2dM05Zr/mEy
+RKFzF2znIeUFSr/JVVVTuKA25Fkcy4GZpuB94c1c4HVPG9MiqMvqaS5I3mz PW2JdgmjihIH
94cdZmqjMF1eSBjVGNurOEPhTrxw2h8OIdZSn6JyEr0pMxF3pn443M1qMscW +Egp8nc0Guav
w7iz85rdveYY5c1Aqzaz66G3xvHJ0UfQMmUXCYSh+md1z7b4mvFOwcDtA+7B rE4ey4w9UQwD
N60yaqkgHAu9YT1KoH4Ok64we5i7UGVcmlKqb7E+aNsxZFzP8qy5ktnd7Pyj fdcpZXx6MRI8
NiDk/wdLLGVy97YFo+gzdT8MhvMWFh6+bqupq+KhGj8LGBiiYxg0E2fiX4Er esvxE4v05ToW
4nXglcRk4cTxhbdsEzUxqwMXvDMe+oB5rDXjHBBK6g3LBbPwx5XVf6OzWRxH BRFYRHM1VbQ2
rjc9BgHE59Tlv92Q583mv49J9r/EzH4CZKT1eP6ngkKrzZf5zUSFHTsb60Zt Y/haqsgqPw0s
kRlZVOB7zWhZgdTyTT0vmhjnjzJnz900e+GLqOKz5oh/4sGM/ondrx6Ok+jo 6UQ3hJHWyzd7
L96lBXxLI9AxTbbOP6tm4uwgDccT+siaESeAVpy3vE+YYCNfpD+7pLtg0O6I fllXCXjBBbHB
JEgM5JWYYb8si5AdTFT7s7fESTyEZEMr2XmZI1PtNx7Hau7oOrxKcr7AC8Ib BwkdaApuSFNe
IWjVjpWtNjY0ZnfzQ7S0KM0xeBIlSeEDNeNVvFRz5rtn+SQHwMT4uUjhLEfs z6vltu/UU1zm
a+hkrptz5ONnBLX7zvocHl0N+CMq12KJrLOY7tRmM6t1D7h6tzv58M9rjoKX BJkWHRY5EwCq
OPT9NjQrj4mk+mkLX55BJ/5Lx0zsUJ9dJgUPhHM/R7E3V9esPQCgHflyfEa7 ZqrCba6SvbzO
RCc/2ONAL9igHUcWVEgGc/VmhWXm3hYzfU2vXG0cheTd1fTlPhNsq1uVUlcr qTBKnc/b7fgJ
Bpzhdds5H43c3dZXlxSu4PRIHWhUvWzIRYAB+eRmefy3+h5BBicNIGtfprpl ImfC8lRxf5b1
67y+Xs0P/vkJUu2BLW76bSR0jZTJt+cvrYR42uwC7U2seQYrRVrTLz/JvVRs GhZUoRWOSiDj
TkKoAuabHFZW9rSEhtJk4lnzay4vT5eUnTzgXjeZWePjqBqgCIb3m3QSqcA5 0JmK0YNA7eZu
8OdeuJ3WXkUvSfJwFvue2dixmd1EgaEwAeeIeiFUsA//hOFV3St/taJghXyD TLFBrVgqTVu0
p+UGBvqQZ9c+ICCbIEPFagesKHGnB6Ui/LH1HwqOoH0clamOjkl3GGVV5OMi 1o9Vzk6ZK+Jw
NpktiPnQPHs49cka4RfHxjUTyzuGVSXfYy/9RfGnMs0ENaPuS/yuieH5AGb2 wAsBk/FgSBj7
23S5ZIsJS0JOuUuwXJMuwjlOkAwisEwcAmB8iKhcd0RduE4478Q22tMkCQ5J d7/SSlz+3DrB
hqjGixzITSyAWU+M2tJja35vaDypmHdrcLYsj4eIIWwm5iKcHij7mZ7zYdDd B7cebSo1MGyh
d1rB0nyClyFwfOWQ8Lwo0j4hnC66M4h+i/EHKJtFzP2+qYoLyHr+i4quf0yb eXNKPmHt0mzP
lpagV6aEk1R3dHb/A0VFiYxCCflrZ+etQ2KJocFuFk1jdeDlxYr+HG3yMV5C 3dI2O6kABiSO
yJSBqKKuwR/H80r2pC6XLquMIcghm+7ChUM6xjcUkWjus0N6nDtml8swIN5J Iha/Jow0UfNg
sKKMOexoyzPGtYDo7lzU/jI++ZHP9Pt2hcdvStSZF+X3r8eahZK5bOpm3Ivd HDE6WSphB2H7
Ft6dEIuMa13X0ZgiVWBy3dNAbxxEZH2/7J0pO7m5rWMoDCq7hsNKYzTSHJpw vOdsb2doyMF8
Av4wudkGJEItQ569rmrBNqKsnQd5PndBV4qnjaYU3tCwsJDpeG4h/F6zu7Ir +pnqKRkJ/efq
5UVFvGeOMhFUuOrneMFJYys4ayPddnCjIipIyn+d8PxvhDZgiCues7GvtdaD DYT2jiZUI7Qr
OYUGUfVgSGXewHjoJcjZrULhio7+5PoaC192ob+dvD9mA2+zy0Diou5LJ5Je kZKSkiGnLUxc
Dg39FyiByKyN9T8u6nkO6ed7DdIG7Nl+6Eh6oH+rCSGjYmofi9voJmawEjRE hg9CLIbiJSr8
sJhovjabeux3w3F9U4fYWBs91SBgAqFyyroPRLDzVLqFvjlxCPX3Ykh1cytc GOY+hHOpsdFe
fcclvyuB1wZ2lTT3tWmMXD9aJ63krAhqVuuKZ3Eom2ORDOS7uTLbdpfsljcv 3J1OiyL5OL8x
A4mX5pHRSw8bOX0elp0kVQLtl4ANpvSM0wmvCIkAoGX3rF/mtMn5WC0cD/rt Cab3+gvC8n9g
I/ML2y+Xb37Fiv/kkwNN/PxzWGjPEXVv3j4LQlHsVazXkqtYYpjHjG4X06AR wpoXOHeXU+dl
x/RhfuzPL0j9VwaJPN5II0XZzevg8gr5QNm+o9/Ea2b/jsSPpj/KgsTvkJSf gFzq8rT/3KHt
ulil8RqQgdj8TzptXZZ+2pJxhYV2L7Io89nN1KYE+X39kz/J3ZbHJMh+jsSv 7Q8OK6xv6XmJ
19iL9b/LsililMSUJHo70oQf44Uj+9CucehqK8BW4VB4qng4NdU791KR9odM O1VSnjqFuhUf
2B0jzrlMRtqNRwWJ3GPNHvPWGUIyNFqQ6kD/OHz+Ffs4k05eabXVcXh7wO8J QKj/DqDhWL3X
3SdIqx1p4t38WTcE4vlW8RD5rrSemnHXFRogtue9Xfw1QLBw/EC6JafuFH+q fLOlUY/3Vhlt
1IkkBr7VpKphRM9JP3A4EI6DMxML5N0u0ngwLnPW6eICB0IGlYYFwqf2SbSH JuF04L/85lPP
gvVGGnDSFMMZcy0yJrFoc7N0wmWxdU2UON4Me/uxgJyYQ7rmtdLiphIyfET9 LWbUoRvhZVdH
xyUN/mGkfm7+tAn2kRcRsYedOrEW8TzKBlhUEQ+mX37tgc82uCWly0O5+Osr 8Aoxa1eYKfda
YNh9lcLiQCiTDMc7IocvPrw5rCGl1g95GzbJMiN7L0W8012GjqmgMHMVtKY9 Y99RgW63/3CZ
kHf0OrezleTU/9LxsqbuzN9yqXzS02rk3i0aAvd5IXqAMzN3vDGNES7wlPCD iPA6c7ShDm9T
Kc80LsIkdW0WefVn5aPZYxkmWbhNKjL0mAbC71nkIfd7fGlLU3/7A4VMBeGi 7eA0/nqJhBxN
qWBk1Sl5ov3ppnlGuNGabMDTX9JAtMYfe3nOQEdX3oxNzdvDy9jr9YK2iF2z oABTznmgon7L
SUhwyXWQ4rSbovGxA892hNyrbAvlLA73hF2SPpl1I4fDptilXvy/ksN/aXAa oTUpT76wr2rl
0La0Se9GNiOg7FsYXxE0+AmQfR00ytoHJZfGg+lm+OiqkTZU1+ZG1xIoS55U qog46DluZaGu
hi2MvtDT4G4a4NU/7EqisJvGF22av7Ai80NHr9eRVJ4pmSkC71kU+up71Km/ bnr9J0HOgt8f
jgH/h/f/sr9z+LNN/GnufwBQSwMEFAAAAAgAO4WFNsr14qQLIAEAXfoBABoA AAB0ZW5lb19w
cm9qZWN0Nl9jbGFzc2VzLkpQR+z9BVRezdIuik7c3d1e3N09WAga3F2CuweC u/MSHIKF4O4k
uDvBXYNrkGCXb+199v7WHntl/fvece445/8zGXOMdzBndXd1VXfXU7Oq+3n+ eR1Afy0tJw1A
QEAARi9/wPMSIAnAw8LCwcLAw8HBISDAIyJjoyAjISETYGKhYZMQkpGSEBIT k4NYaMkpmaiI
iel46ZnY2Lm4uMho+YX5OIRYOLk4/ioEAgEBARkJGR8FBZ+DgpiC4//4ev4G YMBDrEOdQ0FQ
ApAYEFAYEM89ABkAQMBA/OMC/vsFAQkFDQMLB4+AiPTyQj06AAkBBQUJDQUD Aw398tTv5TkA
jQGDScEuDoulYgxH6YTN8SEhD55KoroTR3XyDMRp4hyIgIiLh09ASE1DS0fP wMXNw8vHLyD5
SkpaRlbu9Vs1dQ1NLW0dUzNzC0sr63curm7uHp5e3kHBIaFh4RGRiUnJKeDU j2npn/ILCouK
P5d8qamtq29obGpu6eru6e3rHxgcmpqe+T47N7+wuLG5tb2zu/dj/+D84vLq 5/XN7d2vv/iC
AKAg/q/rf8sXxgtfkNDQUNBwf/EFAenx1wsY0DAU7LCY4ipwxk5YlBwf4LEl EvKqOxGoOFXP
cEycJxFxQVwb1Od/sfYPzv5jjAX+f8XZ/2Dsf/K1CCBDQbwIDwoDEAWuUbBe TRVOuO6Dppmy
Zeoj0tJX5EzUzJIivz4G5T8DEzTdzwBE0gPdhP+2/rTo4RTrI6CJl2d4m9Sf jdVyjppVPlhI
FNakT7OKnzevog3mabqkSmgEw7n39QHf4LggFv2NfjwDVwhVz8A3s2cAUbTK 1f8X9Lz/Ood/
iOmtTc9NelF72Q/CmEwMQ6tJ7cdPPl7yMlxJUu0N9MCXQHgCUMK+XnbCucvb c6AmTObMNTU1
1dv0HRLkAXuuciMzBPLYF/bglYSkRFh2MEAa8c8tfuqcfAZ+YBk/AwGDTziD +2sYLKeVPy38
UQdRowoMVnXWDkKPCUy0sByd8InmG92goqNxt5E9n7iW+GLFi3VkU3k0U8GT ugfWTD/Io4dK
HSObglsgpQkGhDA6v8F9+g1bzk4P4h3yrMgHHr+g3Rftvzo52CHonnJ4rppR y8tUsYzEtl7W
BaoRfxYhvg3q8T7uD5/TlpcOHNZqrovZymDG7foYThchSQ79dBbf3zIBp/07 psL8Nw/3zmHz
P916SMeptU4dz9qsCVweDcVuuapQ0C1lJWNlYzuBB79tX50SrnpGbZrHzIVB 36T7nYa23R6z
2Cu0sQ+wRNYOsM0b1xWpayXFbQwDaLL/VAX2/8Lo5Vc8zwObZyCUEFziYOlh ZVsh0v+l36GE
yKZUMBjMTY8dRVQa3cgcj5ijKlZd8WA67Rq1om4cOLU5/bpJ3iaH49GkBayw YYaum0IjlkZg
QYeAEig2CnjkzAuIPkLaip4RiHbFHZGQPX3gIbtFztnQ+uUfxcKd5fy09Hqq Y7rIes6k7+C8
AtphL+5nIF/4XQpH68eavay8M4jhW5dNNIzDRlIqfXNmQiRmk90p3ljbOl1E E/JP1MgBWPdd
kqSHYiSW16hxz4BYBtoDrNJZ/j2czDOQqxD2BEV7q8nqc45BcV54E8Z8XPZm VkTMyaOEuW2O
lW4Zc5WjQHZ+UcRCKS1ggIzb/PAr/tUK5Y26llFdU91UBebi3shXrYrCJE9t aNwduXgaae1I
SEmjeE4xkr1/XRvtxhq6Z+wzsOkfxRVVUOfHquRjTHg3b4WzaQHjhGvGIsZE EDoW0Pg+qWux
d7d9Y1hB8RmQy5FryXh/T3/ZwSRIN6auRA414ZaLRPYvuk4Hp/v2GdCac1WQ 6TotNuxEiblu
tDZ1QlsIkj3YafTdCUcUg4KQtMxa+Qz1+bci33swfwYQLK/7Ih4/XJ8eja89 A9aPQUfZHiuG
jA6LIobtrXzHOe+4cP0xfzjpa3m26knL6dNiLi2CzgZ4QkPV2Iy14YVMRdn5 jRsBErh/3SNJ
xTFtSnghu9/LfiL8RPJz0I2TndjJxkdO6E996whopaSlaTE5QyOqmSVkXqfj RdgdnXALKli+
nVV9WqCKXzg4W0LwbeDTDNZloUYewULUOoVwRAACXP+VYullZ1QeXvrq2ZE+ 5jdOb0/EXLkj
ftGhveyCvEA+8WseeFtnCeW+clxdevvJxgFz0dNFtupFWhrpK5XU2ifIGOL2 qCtH9/iJhog4
atkF66hi3H+fAf4ukrax037exfHoB7zHNJhlTcot1ZoZ1ySXapgRFRoNGTLG T7grbbB82/QO
4EZuUQID/VvLXo1uxXuWyk+95DN2WzPIFnQ6tK7pCD0KzWliDIglcPx9sGKC aH9jRebvfVrJ
axil4W0QZWlnG6+np/0j3mAlS1MdfWBkorRAthdJiZN+kEJiOzpeF6qg+vzS Zu7QYWOFVH47
dAhpaTZ9w8hKwwwNWxaeYodOrk8dFmDh/AYn97sJqHvhtl+//rwxNkk1EsFV AZHOXqhph9SM
/Q6NdkCoepfzGDrUHNETJsTek7VPYXPJLVO86Itwi6JUbFGjgr0WJFWaO0XM r3Wge9s34UMT
lMvfFULln+plHDt98FwlOb9utwULgD9dHHgbZFfx5HboEOS5j7DXBITtbON2 YyIwRh5yjWOv
ym/R+7KWWsfrrKEIvcMYtHa3p7J66CaArrOStCQGxKEv2Adg+/+lKmqQlhpv ylX+zGgWeksa
VdBrH9pbvhlyjR5tlrg1Fn1GhI84xFPJJzQnWuQZ1LNKMcmlhG64rP8jXX80 4ZJ8qoxw90A+
cZvxyIq6B5Z7uTgoFQCvT8B5/a4b485utGd8xddbSeRVPakT9Vf1znFgPTsp DF6pavCjiphp
GBULo6o7nrZZ+1Xe4vUQ9iUVD6LGXTP2Vs9MHdoeTfY8Ax0XZ4g0P83hnHxD qAHQZzjr39XX
GRfOvHEK+SNpnCbDxZ2LjrWIMLaiSsn5jXaPTf2qDLUudWCgbKdpq12UQ+Ts IrjxGkVkagLC
wZpP/lGKuYIFpQsBl4+KvCwW+3OnG9FH5A+Xyr+vb3jfEANL61zqJMHGzgR3 WjnxWy9LQYkX
hRjvAHjHcTKoae+9ez46ApGifnGfMM+9WpW8FjP19OlP7unyBYe5Y0t3sbTy hh1KFnaw0Tz5
8TYkxOrv1t8n5NvwbE4wb31DtbyX71Q1TUGlFyIjDhoXkXQvH5lbDsx0IILx sjKs/7/WgBBs
iJzfMZQnBVg+A/+6DVYqYgTPwL+ambH/1P2n7j91/6n7f1+3gXbBrU5/TwfN Oe0SdVPc0U1M
7aA5wfJp5jbZSWSTlGDDNcYP/39l1/Q/MKxgPb2vR7u/zXmQIjsrdVW6+zUj errpf459Z/yw
FvDO9V82XM9vrfsrqlaudaUbuu7JpxZch9wFNawuERyO4PRD9UZkR1KNOIdN icz3fF/UNr9P
P0Du+f+OkW+3Od90NKI2lsqlFzfPd6IsJqlK3qaq7yEKEp4KCT4DlGNJz4CB 4wsFZJGynD4b
yT8XVo7IyJ72C+0hqsXy0Vvqpf8Qd+c6dcCphQcCSmHcP66ORX7uxoNmYxgX uZoHGs3A7IQs
zqV169vbe7FJ4s9AgsebZ6BS9usVhA42RO/8Lem99Ozp6VUl+kC+SmN94Pmp Xcek4xt4U0xQ
RopkCj/1ZN+Jo/iS2gPW2fAT+rFq38294XGO+VTBtLtfxvBKy07xWtYe/koj 6cL4uytEOqjU
SSE8hyLrVVBVW85xQ8tJnpsHhy37sdw3FFJJs3WoS2S3HwyZBsjf57pqby2U MPppUq/py8oH
qiCdiKhk8BNujh0ju0++4NIV5LQR1X0K4Lsfh3ys7F7FnPKvc/fvEvawdNm9 I7iXWZi2X7a/
83AbUxQ+2AsTYuUN/algIcu6laE0c2o+g4xm/6p6lGZlrQ0tMIf+2zwa1S7f XsGnAP6X3oVf
ow3nJrHpbhnx1l8tsa9avZv1t9Z0JTJJgXBbPCiIdi6OrpBWNMg6+/7AW661 dmupFjglqMB4
zybpZzUn2PlxZApX++0uk7cr8bop4A2DDbH9nuOsc7qD8CAba5pypl7BR6sp 9sInpCbJfLR7
LFTGUv3iExnFnTyQi/xz8Ii5jcqv4CC9oAW3liQltNTR/sRup/Yym38pAhQq sU5vhL0xKwVt
hkxSP6siRtyRsyEYQ6T3tXmq3rDWOj1mvqOl1saJ6m7v0ThW9b26L8sOw/ye 9ZtA0NleyO7Z
aknZIMyDi/WvrKOWDx+OB8D8BUutNx/O3u7wEUFs+/YTXyUrw6FtiYZZb/Gb yZdmYDemDqEw
7n+5if9UZRI/3mT7Nugm5Uz/jjwE7/+olSupIbvTvg5fPAOnnkSpNGRhdsoa djJcZQeK+KEC
8qHNcOzDErJZPHVl2iZ8+a2LDA+mD+aUT9d8RDyGUy0IhtnX0QWyU6qlAJzB 2/6u9NRIFi5w
4/dyptxpB+MZKjkmHQuvfOboqhTpLqIizv7ViprmdmmFN57gVUYSVTkQK1F7 YDd+IKPtxnZa
OGvbpliGtrhRvrVawmegbeLn3qydmw0rej/yofm1boZ2uYGuHJGjAzclZonM mLQ875DYcVLO
i0YgSa4L63Zfe/ckGB6cguZ+ZSyVphUmx/G3tYUoDyEGsNehO8sOznz3lf3l EW5bV20HKeO0
c9LSnpUbE9WsQsxEZZ7okJzDVIOJuEXlZKB3e3JoMH2cjcLxq2/Vp13Exic3 Kdcq+wKG7uic
MtQs6aRvip7oyRbQgiqYfSAw/XL7rl+mPlEeqrCN0zqp+BSlrCr61byJZAAf RW28Evl65HUH
fOihdseskAJ1Ua2Xmz3YhqAWY6nXvozMKCLtBot8VTuC/xs+VOaj4KZQS0hJ iz7sMXmTrE6f
plwC8TCTk3RNa8+XgjTlp6MhtgpxPv2+kk1RjHk9m1EnG2tiXAHM1SHwTZoV aHQW+c2E8TB8
/tgZ5FbA8jbkTlx3O9mb86v3NFX11XWxwkKL1Jm4cvjaSIkWyALsqm+LHL23 IptLbw1scl5g
YJzs19hujdCVsh3r45FzJXvF4+iMmUAyZAIt0txtUs6foiSjRdr6BwqF0r+8 hY9wR1jCwXLl
iRaO+7XwYUcXAZ0fH0c+Dy41FxzMperErGaUaIvb+Nlha0Lr6qVtWW1zMDyM hHtY0A4sRdtt
bwdADHaf9dkgPeKpTdc3zalVN7W1tTS11nKU7/QOMQzs4L6CZ2tjyEQVWE8i bf6EAtctwpi4
UVlviH6bOOWWaCPMYyHNiAVih47mi1FjA1rNm6lj+apfkHxRdYnefkTRwny3 UEtAxNV9Rn+s
E5GunizuDjJ1rsNKKTIcSix+ybJZ620cc+vBlEzuyqilSeoHSwSOUB+3+IYb dq/XIZ/MkWv4
B998pg4MkNn4Cv0unaQi57N16pl1S/Iv9cKKUjsPu+vP22D8FIzQBfRSuuU2 dlV4voHBGRG0
1rpzmL7KgsNEnfHPur2wRdO6oFFHUwhVs/tS4jwPtBZTfuhi4n6fLaJH1vH6 jsl1+du2VFOc
mUQdKexsexDYGPXHjBcmpG9NPj0YqDb41LV3nO5WP/uDaCwCNNrWYWtJTpZw xssqxAMrw4cN
Md67IRglincosBJbui1T1oup32PXPRCHbRt+zi+o+SWRhAxE2g+ZE9pB1p17 +8UfnXO/euxa
YpD5qp1P+xve+2t3/RPtQUTOhG8/fAg7Kkt+zOkU5aM8pCcTurXd8M5a8G02 fsCl8dySQTQc
54vOrAUK57+chKtZb/rJKE0XNbY0fDeb1dEaLrhm5FgsyLseoKpjeUPeS67O NN6KOAYFB+D8
FA01XBRhbZp7BuofvgqqT/9kpTpa6F8wNVto9T+3H3PqEyD8IbqB/wxEhb1I znBJdBfnMePa
kPEp/S7jZu+sT/hSy7KHl1cU0ZXEXfvkaZJx38EF5CggR2ET/qpJSlmLR8tY Gp+XANpSVPNc
uuWmUXM2UX9pYenH2QFdw6kNd5nx6npYswlydAiVRBdkD7AhT1ImxiMkv94u 3/OePPDaT1Mh
Q6Fe8tqP4f6N9TomRhDjB44IMpiAZbbcsxeARTPhK7tY31CKFmEkX1hnoxvl UZNQtv24u5Ng
jBWYCHEBZlogTTHteQL5oz0mU9fBWK4aHFy7N9YFsPAlGhMFWzBBhgI88GOO RGSS58w7kQll
ZUhF418ONM4MhfctlVh0I0Q9ywJA7+KboAVN351BCIrxCjFufPZlLxy2b8TU 11/RE975OR1Q
tLlx3n4di04MYDsCJIpy3Y1nML1xYfWsKFqH7xU/OOGMuDf0TQiBN82MlAd0 92K0F7598z2G
GYAmdegV4ZthvdLekLW/yrhXy9a4SN9kG5jFKwsmMIkYREN9fwKhThEBzapS cntixzF0qmrH
wDs9eWrUYOz6qkbBNokzTOHjK1HLZFjk/hNzacUJ5CYRvFXra8Ks7IxKcWLv hhS7otWMDCh6
kTewKOfHKe7mio5LVT5bkdwOIQhlVu6E3N8fo8HX1+CGctdfOhk9sg07xhme F98bkkI1Oz22
A4Ef5OeF7WNt6Xps9pYzhJOGXgTi2NuDgV8vZ2c9G/ZueS1hXJR6Ojgz5FM1 63Q9j3sLk6dB
tcv4tE1mAUMKNXVvEkPW2QcXXZrZYNfhfxqGWZd5fhrWbGmuRrL+LPOeOkpB rS0+V5DKJ2De
qnORvVZQRRwU07f7YYPoFPnTfrpBLfF7stj1UZR87ZNsbOa2nlq8TomlZjPm +vCVTLa4t+cx
T0luJUgxpAjldjyUo9ZuoNHdQQYQ+0AguvpHWeLgSwI1tOQThSVSotniOa59 2ubp4up0+jdv
EvsZGM/wObyq+3Yc5wel7oIg4iHIiR9Tu+vC+sAiVE3N1ZxadzsoRekNl3pt +dY+EVAYVKZO
d+oiFrSAb/2yJt6WIc7qDw93jdkq/X6Cpjqvk1Ql8IZZzAkuTwQivfK9B1Zr thpDrYhq1tdw
7rQ2FZyalbHq1ZXVxU7Q7OdrguDXOG/taS4/xHggEKg0jFZtGeeiiX1q/oq6 fIBUdtCi//P7
yrcG2YKISjCGIJy1pueFmBJ9W3UdOghaZB1CZ/NqHPv2ix9c96Dwrn3bisjJ 9c1Q1CPN4oFW
AtU8LBaNdqrzhchwIlw6G8QhtmbOLZzu7OkzUPO1voK14GliqmPpKRvcPWK8 Y557AYfxdLUt
H3qXv8jnS7gXdcp84vqotning1OU553YpvlqXHThuKK7VKqOZeWsWm/ApR4B yEmGmqCrQH6Q
bI0cSHsQdE+Nc4zXzQ08HYqvkd0DN2AmliLt2b6B3d6DiRzw9fLf1tf3N/LS aHmf3XizuetF
kfbW92BVzQ7XMMrdfNV0mcAZjxYg6cUZv83pidt4aWVwQ0DZ/fCKwdjsdTxM P+YbKsfo3gDl
b7CdBGNQlkueOWo+UbJ2V7csU1vKzY0i5icLk5QtnlldTIJvrD4oaqd+KdIe SgWO6CqUurI5
U3tuoJ5AN+6zSbqPRYsbeR8ZaTQhhnvCicOg4RfFHNd4AGaX3tS5BnAD+ryc gIKHx/bmd1Ne
VGhVufC2tRXYOw7fMR64/tGGAAFExpEjX4fP+lLQSRUFYFzcZ8BuhmUjECfF FGucdDg4FeZ1
eetdILaJoSBiCMQNlwOmvqFnqKQPyc/6gjkPAb/I44Cl12etgc4IGSOUBLpM GACRoxasI2pX
5GW7Zi/eos/tweKUHMpKupIbcs3XYfsIYyg0Zi30vVGj1x9CluXRtaFOPHXu VZNUZpi4CVij
JLE5Kd/JO1ynoJpBJzncVzLd+bOeb4ucICrDqUg5eePFOviKxTEXh9mPKNmz HGuDtXqq7Q2T
26pBJqqVKWoe0gwLbvimTkJvvfyvcaZcB2jspOlZjka/L4SA6pXovKI1eBlG LFRLgi4uenW3
ARIpnM799yzpwzLnguPIqUr5hcdnlpm76ngekdXOqBOl9oDQmVg/8XzLeWa/ clPtvZB7h8Jx
GxLRMv7JtkZrJBRt4jm6kd1xBE4GFYBj4g64J2vi8fbAhCniQb1J2ItcUViG P9pd3DmBqZG8
yOOAYhhDIjcNl0NcSiZBYsXFO6soLD8QMF/5OJ2omU6FHbXLQO5seqnKYxwU XVM5gu8Muwkx
pWLg4bW5YvnqnPninYCrg5Nwe7IG2D2Vc7mHIGarNqvKAboMRFLduPIm06w8 4olyWdpuihXl
naoic2/vDJlFMwdDGiga/rsxCMzWbMg7OEDnOWwLnNJVGCqeK+zM5kPq7cdL mrp91re+rpVy
N0soCB5N/GGq/OUVJnGoaWI+cSL9bWqfi7XzwXWUA0lTXU26GdgnCPoGOZ5A rkEjIlG5DZZf
UNGDBliGWFTRe1/8YlPQHKriEQph6SzaSqVPHchljCaqyZomQJOXssXzI+xy fCajX85oEOIt
V6qwnlJyKVYy5VL9mEYdq6a5zmZ2aRoztFGdGHUJC0UOKcZD9ykS+L/zZgw/ k3mIXmV+AbHj
j9k6x4dBZ8ldS3rnmdtmUs56cXpcRXVh3ayHn2PHDpXra8j13nzuj8+njlvn L6ibKTuNYm47
OGmrcTUS7txtpvCyqhlhfehL6ap200ZV4r//GkaakoK13GsJ8wM1qU9MW44A E3olkDMTo7NU
LWnyBI+Hm2jO7rU0G3d3mgE7OhOC+sC3RYQjnWqMicU71W5G/TRlBOSPyrmf zRm0SPP6V051
f8VmuDie2ehY+a99Gpnsb/SufmNmv75NKrPJyCAsqtmEZmcHs+hVQajNgk2Z iN+gRHCgtFKq
4V1E8StrePSsXzUmwtiBoyf4GXCVDX4vtnVW0d399YJpX/TnHtpTAGPmuXQO aerZ7skk0fs1
ptqEmBFzVaU9fbIw/23tKf/DMbJHQMPFuu+wabJQCluDivOK7A7PdfzXVdQz IIaTp/1PPoSJ
XMhIut/f1UvdhDY2mO8iHfJbwGrp4qh5TsTOAl8+MxM2SV58CkrZRnXRxVaG 9ZuNMvf73Onj
XDsIEnwtbW924VzsXB3lAR5Bo4hMhFdFVTPJNECf2ODXlYPXjPmk2ZQyi5LI FFlNb0IpNtnn
TvNdEBtdIoCXLheZ74EiryeJclFW9dV85A1mVaNyZ0AQ830AgfIH0mVsCfZq R/kNElIff0qr
kx3pxsRZSeqro+lXGx/k8DvMoHyOVxVH++0ZnSOB7uaz0DD3GwXhgkTqqdc1 EvbUF2EfC83M
4tx73JHv3CBib/Z2+WfkiTx/ElTOCukrYDsO3MeNhOt97ldEjru7R3wBp8Zx 8D82VzbZV1pb
Sx+L5PdXN14Hwi4Mp2EDY2xlsCT95w02B0+I09yCzKp0PfFKfg5Cr/u0SelI 1cytVTGXcMau
qZMhPUSURhb2X/hi32Cmt1vFsZPFc7PMfJcq4mMHzZDmO7oDu0vBawcT0af4 ri/nk2TxQapm
gpdVom6nNUobe7CscZiXOtSca9zAt77JWAS713RQqKzwP86WlRj63QcFRy6W 5PwEl5qTq5PY
OD8OmBw5NRLwl6ZbRJkXeBV9t7Sm/uZVYW/WlBAwhucbPVpnHq63jmsCKzcW gg2R3UKTmS6c
ndhwW117IRTe2Di4XVPnu0cLg33h1c+/W7t7phEkku/kfV0bweJIGys4mEgQ qh3Z9nqTR1V/
ULWA3QOE2S8Mgw2RU/KjQac/mRXsRRVH3tXIIUMcsMVIyQiToMhe34kPMoXe 5T3bTWBuc7+Y
72fCWFZypooHvwV1idOTZ7IZc+VbD9y1OLKXSAEuduuiaK9p8XDnPGhcF6j0 3+FhsRuyaJ0R
LMfzjLN9e7oTFqOSIEOzBv/KmzENFBe5TlAep4jktT1xDW/ocWmuGcrNOk26 5HF76el7YSzF
qqfxe+6vqY85Vrbl791F9GgtNJPGfxVsbz+0e/FX+m/40apl7+r+sGy6f6OE 1M+8XE5YShET
KdNqa6tccyJGhLz80C/4otaEnjIy0SubgjWp9hdyWIaKpprWQlM/Qq777p+M BiDeDlCGP7Bb
w8ymX59SSpk7US9ckuyAvdJpwjmHjrQDZIyDkroAMYXiF22s9DF1+CxWtSKz K13Tz0YU3t13
SEkqTKB2v5XNKHSrK20zWGFWe+m7spML1vSEcJSs6erpK+vMcYGBPvVNaq59 UUbL/XRmcMJu
hnpWQSrEbnNz4qY0FJ/+BSfPJJjCJUA7nICW8ke6s9W19+ulzb7xgQvK1TXa xKHJy8xM7LeD
e8R76ROfAtivHJD2BWDHj24tSfUk4Nvumy0vTPHvqC4JGugXm5EC3Cve/+hx vpWUzH4GjpN0
5CjWqO7QnOgbVyg5ZH0DVzW0ZO8EvVh6LuTKh+igkF/6BvcUI/Z4ZcXwmMNQ 8QZRDZ1nTG8g
F9YpxIjtRDSmVukJXYG63polZ5yn3BqncQF3U12OZ5CxVSGs536k3zGe572J S9ucygtvB97M
4OodpJ1s2a0BtvKRhH5yvqGByE6zt9F2jtII+J38xWTBrp5uFJ/FSZbxIIar Q395fh9M2b2b
1GOMuRhw/Bb3MTZTYwcbYnTllvFNkvzX6jpM3agl9zoLL7OP4lDrcsSIIxro mgHoMDDKKUYf
bExVp465bdxCj0EUxEIO2JXYCQ3wQwLoQ46yIIz4HleQ+gt7qErwVs4FdLOJ 0DE8AoU9X1iw
q01ou98/4FqC5FqplzNPbefDuhfNOz674a/HK7UXqHEOmMQsCWZRMlcTn9jW fKb12X4YzXoZ
sGQqZw0xXxbXdFcX7hLW5PeUIvS1c4YwMAlkGT/OUCxKq1XxI7uYvpm0rYvj Wiw7BjWhcY+O
pGKyEXSdJqQ1RFcjZUKOiA3yv4iPbetlSsNUwK9L+JQi9JVBPkIfk7kzWras RwZjMS9fGSMw
hDwARs5lw49mz4ltHInAwO660XmppXbLUyMm+Uu18khuiAVROPOorYoY8eNp YB3RLXWojfYU
f9skW+CFle8GVVtsja1Tu4ccBeIClI8RoKD1oi4c+nIuXJzjnENJsNkn2r4N 2hrKVMj9w/o/
gr9sKPZCowPlkXRQIvpYitmMt9uNQ2tDtcvoRwgJ6jj6svzSKoRGFfAM8J27 US8v1E4XV8n7
86xueSzCDNcdi2zU3cVQWPgnw9xF3ImRAH99Z3DZX2/HENpd8L2U39nd1H+9 s6uQcX2UUsCS
KUd+JzvgDkeenvhv5XLywt5TzAYjM82BfGOiT0ZRa3OzJNMF/ibn69OLV1qf 2LQR7ZURYL62
SWl9PetI+qLkwnzFuexXRBuyBT7RiFGP7+ulWmngodP2IEcJtX9vmvXCIIoQ VX6f/TnJgnyj
Fyiispi9tC7b2lXi3tTvGWAzA0q2MXQI7VOtC5bqeCLIUXe2vcy9zBKqYPWX waYBACgTBioX
skJFDAb7/+bbcRU5xvwcL5rKKdmnvUxY3MumuYKqk+yC07Px6avotZeNrC/H U0t4qYeNSJTn
+zmLVOUQM20a6HxIaSJBXZQPgagC5+pMXIP15oGLq2uIOBo2XR8R2YPqEgav H84Yp1HYvn+Z
nV0MidVV+a5DF61xgW9nTIRO0c1mIHBN7BRZzr1bWmDQ1+E9Vla2+vb1GD49 AYFx/Ht7/v56
i7EAPSSi5sQVU1OktiwAUVZYRg/18YCKyxppRd5xGoeDUvD1CL59nxjo5yLK u9zMZOWYcQJ9
Ga91otaPiqYpJubjeQk2Pn83g5Lm7Lbrbk2ZOCFr7KTNhdXqvsw/cEYe/i+f UqoSX+Pq91mr
SOHEjzzCPUmtcD61Uz4DEzBWGu+DXt48SXt5M8H/B2QdHfAp8r/GXck05fvW dKMSyzPpOEFP
7jqqb2H7S6adx5izzE2IdxaOY6Kmgj1VmCh2ndLdzxnR00X/c9ewzdBw/505 5Wfgq/Uz0Dvn
IiVi5c+6SZht89lzrVsnAY07u6Dm8zcwt5SRMAdZwtG7wuJIIWYbx0YUmy96 r4sZpoPtimeA
b5ZrOAd16j5qKWVPZ9U770HnfRllVrw8uGf6ZTXHi2ZSSN1QY/i/NPM8PZ6k smif2jb+EpW1
ylv6YiIQxIs1a/rP1mxQobXGYkzGir7w0us5rMphDwYAV1MZ0IDKxWnPfQYG Wov85woMfwEV
IsvtM+kWSVzTS/P68p+FEsU5JS5eJ+1QYtIjc5Qzbsia7rgtEqOjPAO3Mlyn v16G9Le7l98t
ohvE01/3b54BqL1nYPMwtSXtQXRTQXpannPYhzskmsea36Yx4WFpAR8LVJJJ OfDeGpb9Qzb2
oOXmisW2da3+Ik2WxQ3s1ObGscK3xHW9NlgmGRYjUC5F3MeAATx3NQdTAaXf 1peU1EdKEc2c
oU0+e8JCGeO6YXmpwyjDlcYyXeYBhOPDasbhg6LjWCokN/3sct74HFpx3ctR 63qdCCW41iha
WvlWrrz2DRUUH/aKLLtHMn/viBr0hDEq+JTjfybi/8QS9891f/8UwPH1n+r/ 8QwEuyg+A8Vr
D2g5z0BUuQ4dFOPvS+A/fitdV1+DBrfYNpdOlzzo56iGl/AWhACnsFDwUprA 6VPgi/okGT4k
6Qis4bLl/PKrewamwg/Cot1y0K0aJJ4B2cba5oYY/ylMrfkW/wa2bsbDPhkD aUdg7Vay4mVA
0+TccT8Dg1zZKGDpjhlKC2cMbBxr/W/GTAOyq3LAEbFFzvqxZY/A97Sv34+P jsvN9JYKVKo8
ngHbnVi86ejsNmQLNJjMg5aS62dgKSMdmMs5FohtdjMlubpOWJLEDsldao4C 4999wCdCs796
Bo4Ec37huzmMkT3xKjTYdTB//3o4O3c3qrNqR0HgP+8hesV2sJYp+mAf97cX 9XbLSwxkNk7D
p2Q8BAZt9vzSZiWQ+aY3nKqeAbQReaflpNm0L57DOtMsp5vps1xNLFTTRygl Fmk6m3S4TqLp
VE5p6tEyw8ZNkGLd8agZ96h7T6Ekupdhz0DM5GOYyzMgiVp+1/0M9B2gIb9b zM43d25pr3O/
Ac/B4qrTIaFErteAEuHHyIjkE8VQvhnBZgpkFfYvPGQ0ge5fSXvyyKJl4C+l 6rkZZnkR+3bP
KMOI/q3lMtck44/IAo17aM8AUTk8K0VLY+Tmqlk6grKQs3Rnykx0IPx6oOBc pmeY4W1x8W0D
CqvclKv8ElK/iNShOJ1WshsWBu2Q2Glcxq2zcy5U41N38zOQF6bx8DKIt1z9 jVdQ/Tcovvtj
oYpe6RvW+4TUh+sPYqdCwKWfU7yyOJFIlCXtSU8dzUXUwZlpTNcZFLRPMU+k sTV1kjEb32rk
LtRaxduTeeFfycPwl/ChRQAi3af/FPc/z2gRhYvz70hJwcPKgau7KycVQgMs GPpEWK3IpY4+
ZEP1V9b5jWcdWUwVmNy14bWkAbY4CdxrHyxSCrKu5EC0TGPViUrNXBBmVgak unDV+ozyuPaR
cfbMWxcL6lGfGaPRCdICjrSyi6LskLpnPXDncFs0UqFnP6uuypZvaUTImUjE c+Sm2sPdxJV8
ee8RIMxFdr8pepY/dgZX9LJU+so8YffpxUmcXQmYtZh5a4DTfcc7dNUbo18d 9zN97BRluJAx
3lelScrr97BxT3+f3ciTAG+3q6UsxB4g9srWXBM6GpWfO2fPE2pa/BnooHoG EIVOAW8r0Zse
/w0xoidXw8tJ0dM8mSy8hyul+x8acFnraApwT7dxD3SXbRD7L7P5GsYzEAI4 3E36j796KSGE
9L+TaJH+b9sK8XVP6hkQxnr6he31f5EYea0CVxP+p+HPQFec4DfSdLTHc7Jb ZZgVdyk7Ni7/
NvZlcXqtJwsKC2k+qKRv3JpPmIwOd3svE1wAp/859vj/oFD5OxuA/wPI/Rm4 HLt/BgCLl3mT
4Wug6qsZbihKDs5XcfV98CjC3cixyxh3Mx3/o6GlYO+1YK6zrqGb1w0oN8FM 4Whz2EAcbcJm
u1h1f5qdQ61ob91wph+HqEDzdaV3sUe5p8QDhJdf4TLExJuB9fdub//OqMmh wpRDPbwbUjtL
3+Y1SodCT8OPC5m6E/0yaWkEkGneJ2FeubDjVY1UkxyH8SWepdx7RZcczrgc wYwK7xydyn8h
Eryj/LppO8yprkUkXavLGnwq+KhEua5YOFBOX7hpXeOFUIYV1b2QNL67NFwK wVKynqthgiex
b/6EOtq/6KbpD5v1jbGrq1yh+PEgp748dWxkAFgHBNVy3t2Uxf0Lorl7zXbY QyjQufb/lHIh
1i00usw1OlUewovwYHNCOFxxTCdPWIh9gjjj/dGl7DRA7+nOlmUxhQ16lZFh MKMhXhax4Nru
tSuCmhf7pSs+Jp2R6AlzHM1/wmL46a9Ypg2ms5tHWNuvp2e5KH+e/Xn259mf Z3+e/YefzTQ0
B17AZC+qgWnuK8LIJ6DrVKQA57l+MmT82K8L8s/Ap15XKdj3z8C+3vHNQ+IL vqhSfbHlq98S
HZs69YedsufcncI9A8S5FqudL0u26GsetLv9XxpkS245v/BORU8fyB6c4xoO Ra9YV/3XbkVv
d9h4//GGSpX/uNJU1dNS2QtM/Or1DPivv5iayX6N2i+G5/vLl6a9FNdPB+Vi 9Axk5xQSwT1c
PTKiHbeMPyLd5Nw8oT3xy/y9ioA/pf6/r1RNpI1KgncCFTkbk59lbHDz/B0/ 7VNKI2wP2jD3
KOEzZ/pGBmfGDNIR9Nn4/L0ovbpVlPs3Aq+wrARKu4sW6sOj9Zc+N4d3TXyg R0bC0UyyhjYa
uD2wglIc3+RJ/fxFxtjaw8vzBgmoa8ie1bjLTxTrnTXFxw9VRDq5k8EnT6O9 jfik+4JsbT8u
vwJdpC9QW326f6MaZrWt6QXJUNNLASktfcemhpk70TDBLfvzY71NqYLzrwua mIQT2hplSNAP
PIxj/N6RsDm+PShYvgdmNweSnIW6dguEo3K78vIK3N2JNgmYFJwAE7Vq7e23 8TL8ADoK4K5D
U25euY/+zp0TtzHDkTgoVIOhm+F1JkdCCrUiBwI05vixbEYP2YLVUqTkrjyt mYl0z6+Epnsj
78jR2iSd2lpZ0ep6+gVnHesTI0t3UKLSGLCdDQCuAAAUWhYZLgYefzpI1JOj AGt3TNsiNR+8
vyEJIAmAqicXJAl68n6fbEt2OX1VJulXZhmHtvqe80V2vVP/iyzpPzT/Q+Yx fxGkhF2vWD6F
3I+/mMl/Dfb8v4tDjCjjL3HTzYvuFe9r+dvN+v8wbHux1c78z4dE/heFgfhT 6H+2QrF+DKGc
NF7m3D4Dz8Aiu0bFf1sGduru3DK86mEFSIbr5gyMkbhEaU8mjHZ+PTRvzfh8 8PjTg/+zUAIB
w8h6CmyNmwbVd+nBN3jDhPuO/YhlGtPh8rxZoqqyQmSbfXyD3Gikix1JpXo/ VOR8bV2nvefg
THoxrJAnETCyzLtZVtVl9whgdG0JRcJKrPHY9fwtbXide6/Ly52EX+B3XASm tsiG4dabOIUR
ASNE084LOZSU+pOoL6sL8wsZjDZee3WQICvfVIqJsjSzMXFbsz0gZDFgdVbI 2nTjUJAoy2J1
s9Pet2tQ6LpzQ40KVJmVuh4U3thoaxagdKvgett2V2nncFRGCd7F6Ugztdrx 8WcbwFFZVIwf
6naODv5JTqwv2Z3eUWgtxClVGcFSrpC1vc8d4PPReUc9lKdijf0bHfbDclLA qxtS0vRTpdi+
ve5fyQ3Dbm7OA/a5RKPfPsoWhMHZs5Dhd+ITnw9DPpVsZQhjrq7U6xK1EkWF OeHUj/YW2P74
4MHnnikT3RLtsOxF4YhAmHQbOMhVLvI0oWfIUlh7pCKWZ+A3YIZ/iRhyh5Ox y3jjNAdcVhYc
Xnhxss2NXomY9PvsankF8s7rCLe629Fw8S+1UlUg4NhfD79tq639wBWjs6pL i2bnnOp+IU8E
bTZm5o76mpOehegUaw4aMBSha5TvDdQlut3SNm5szgqWYrZMppDNREDCFbGV pCOAPb80Ysc5
EbIp7iza1yyx8Re9LvyirytJ2Ecclgj/XXEPkchtxO+82+XbmPXET9pWLLli Gw7pi24nFygl
K8xdz0DolAGKIDQGzmCGr+R3XkbWxcGnuDYcs4Tb4Gu6hIUl7t7sYc8pK3M1 aOOPFqvcw5zE
UGOKVlDvRHEVnDblUThQWE45QIc+UHcGdvl5jQwjvishPHqwgkg5aY4c+KiV /23NdqKVmcHT
TtIIkvtu1JbowtiipxM/pIptVTUi3Yd7jikzAs9nhIBT/8+KnIsy+rcFRfTv dh7ZP40OYPkf
Y0b6v00O3ff2tc+AxOPe4zMQ9AzEqvy/uFSEn1Jki7/wxvy3DpQeMZjfHf1V fIXOhb6FnaTC
xx8eDFVvjutGUfU+ZjmK+Pte/ngfevpfwxiEPGl0cjMvUHIyJctxbHVsRTpW /cZ59Lb5uoS5
+r3FUp2zlJGWJ3i/MBI2+WCOFfviMX1ckce5EjzBMqsb0SkNaTdva68BbQrl 17pQf1gqE0rC
qlqbUB2xnj7TcpkNVcsqzA9XuaV3PB58yjKlkd6tZ1MyK5V9eIzrU7RqNLZz H2zXEIN4vKjp
aCSPJYZ3IkL7A9dRR97rOspQhEoQdCEWQyy4AB1A4O9dXp3mm8OW0gm1q3e9 9I8eCPUj0/HS
sAgzxENDDzwwa66VaYnRXlCP3LIQ6ofIn1/j1QuQ/i8iRCgLc9JXOW2irtfX ZWRhMiKw05eH
tE/R73wb06d7DjrIWgfxCbJfqpBfh9dZ62xw7ODtu6QynXndFU/CjK0iFqtz /yTn8wzM0/tf
aZXFmPal92UUrBxiFEYt1rWElNfXStxvJc4KhqJeOHSXEr29CFEV6rwk+crT /neoqYNWuF9j
oG8gtzFgcHBCBTMyCk29Gx2AKGjJ1AQYnX/LRUbx6BEBTR/9dEHaV16xJtS8 zupqb0sCtUbv
mKiCJHjC2fSCWt3di3hmiyOFxD2Ku+0cPnWT7OY5eTNdswwiM2+37TlzJQS6 k6+3nG00b+iw
Yt2aDPd+NddX7NrYCPJkv9OobNclCt1D3o9vNzWzvxuAfqe3oL26tLy08oNe CE+RdJPfJARs
ASHGgmQcDh+A9Tj5gw4K69XczxXnR2bE+Xk5a0x530r8Jo5dr02GIn73nrUf R7LMLFP3iq8x
l79+4M6y3x2Wm+QajiIy1xfhJ9Rtom4eiB1XIofBItfLCN3/8I1v0MTnzrWd x6HqroM4VOno
wS/KFT2n1hT/4u6Ovd7b9CTu9XjrGTjIz8tGeDzUOFFQK5vuOHt1ufsSPtXp 7cPrKsqgBc/9
aMBE7hxKNUwpTKel+qX8jDf3doW1ElMZs7ihGwn2ONUIejg9CQ+dCKrOEvae HvrfC8AXaz3x
4uYgEfGY5V4Ef+40nDc2QvN3yUBv6OaSxI6cgNOCdvcXhS9SuZ/eYdEM2s/S vapocxxvBfmW
dgqHFcpYFu63+KXV1pxt88wWqWd2I6N/IsAOrKwjtodRC5qxI02GGHhHKnCO U6bTkEeaArlf
5W8lZXvp9Q4ZPMyDeirqm5EOlYxBARGxLGGef84byX1IgqffkL050UbvVhxx TOFJ/IaJ9NhC
1cwulwXLkpbq/fkNnMUvgwzqne/b2cQhJxWbbHojExIGVgNAfoPzcAAsGjFi og+jYB5d04Sq
MWNqvBw2c3v0exVa5kH2h7SnUxK+XGQFa9EN4lubUq1O4ZjyK0L1ozOWDLQF HPdSzPM+gshj
lmbynLQPW+TqwjY9HXRTrAZjSPIK4kdMib+uNyhlKd08kmFGGhm3garMr6fe SXWmKHNgFMdU
lCJZy1dmcmipzerhTBAr8QjqII9FYUZhV2ES1UG8rtk8JuL29CgrdvveICwy UQomiIF+Ki6I
Mf3baa0p18MYi3Mm+zKF1Xw7lAK2Ng7ahZBhRq7CeZ4NW3EIONacjc7EuZe2 8KpY482Cwd4h
33ucOp2E5II1Ir0QbDxPzED++SnIZnqpfGStgi31odgX1z96fUsMPM8SUBJF jsdE7PFPfbOL
XbzTi0nD8rsLRwt7N2zUpnf9LhaZ6yBp7fnNxhDuNBMF0V4DA999Jbn7u/3c 3Ztj19RCh1Vf
sfFLWzRYU1qbEiznO5e6CXp8XvbObFdS7Ji2u7Iqqv/+JjW9MpW5KGdTMG3V anbWHR9sGWU5
wosDDVXlrAgcjaZk6Ba2WtEZybvXy44oH2tpAZMfWiHg1WG8SfKnSuetvEWS 769OkXQWmhzv
y49zo08Qh9CGZAT1+/wIwlzECLLxZh2o/Qj7NC8pWus6mkd66s7KNDGYVGTl ngGtCJZBXvPG
vGFMBH5vvOj6YxmFMO0mAavae+ksG+oy9zGQRUvkfComATyEzp6gO3Fwn7MH asW9/LQbX0Hk
M9Adv9IP+uQhtx4qNgUDTxzoZZTL4r1uWiiHk5KJ+wxYhonLrq8R3VljU3hI Y0s7EhGoEAI+
tnqu2BDftDyDenhISc6i5Hys3bw+W8cnZ1sVUbxKmn+FHLVnognpQT2GwNc3 oese0h/LXUqH
em8j33xCauNjFkgZYh56zchjQviGzz1jBKmZJ2Reb8/zYFp+2jSlUAlVokao yN0JmrwuJGE4
KadNh28+u1lKWKyEdGjslasfDAEJtfRbbBDH0FIh3O62IHLVE9XgKCC+4Sf/ dsa2QlOrPnb1
YnG9a6iITctWBiaBOlna8XZRLxGwhwJ4GQX68F2H+Y6OuEytbUjdJSGlCFnk aBGJoEBJt9/j
6oafARFespsZ/wd1QPtTqV+R4d150zPQkf8MbH6+f/P1csvpGfCTeQZ6lWHS GRoXzZ+BHKK4
+wPRJ4Y/xH+I/w+JcdfOz18sEv2wp6jXA9U+H7aO7QlYacFr9yJ9WrnOPBLa J+oNAXD6AYnO
ShUAlMTqporwAq5L5hACUExG+QzUq8iYW6KW8JTgBkZ8fpNB3aqVh9ly3i1y lHBRCX39suiU
Smn8U3NUrtP89/q2nn7FPQORuUhc6g5/bw6ZdeqTr73o6edn4PYLUPuH9v/l tJB7TyJMz8Bh
9TMw6aBhI7K5+VY4j8cl+rUsdLEolX/928d/UlzIURzdY45nYDym//En2TOA I/N3xQ1gmlTv
mGZ9uF32X1N5Bs7V/P4rEM8atNo3usu9s98OldMLN5bvq+dlwfgos0u+mr+z /NolWFjTOcP/
7yKp9EMWyMoEe/xib61PItrIokwggsZIYQ4KhHigg4qu180yVWysa/zOTTP7 ySfcdMF9k1lI
xonpvW0T+TKgTBnhbHFRo87JydLXTlrIGlsnNXVyzFz8NNLBdKMxKpByaceH WEMBx7cnHEd8
bn/YnY5yk3A9Dr+g54XBhH43Cz7d6fvqhkcbQsAH9UGDW5hVYfah8tgBVdJ/ e2/4Xg99uJZv
jBcret31Chsiouj2q+pMX3pEcT/xry86BjoPZeeFpX2kdsedLCFmeh/qCMpr b8bYryrRPSvQ
EG9VZ1dMv3OjyLzBC3VrQB3EBEGhgprjfMAZNApbxcvbCUsZRr+G3sVZuk/3 28+e01td95V1
ZkbzyJkk7IG2jPo4FipFwvJXdIcdnDZstHPB6ytyxOAJjrYeowFxPhYZopYJ WIuMTTvVS52p
2Wt4rkMSCRDPQPVjmX5z0KhjKntHz6IHMofvxou97m7tKfgkNfMMVEbFPRL/ tBBk5HOTq5et
w1aQMFtgXuyFT5mLJbgxi0vxpK26+rKK+gwkuIkebm49AzLCgIOKFDbEsKH/ IKv/PQzrUxRO
QpnntNa0a0a7CVe1j0aqcn1Dg5Whr7NOv2PnqsKtm+m798pfZD6KmDbuznU8 A4kGz8A1ouEj
LqP4VTuP/HDpoBA/0op+j1FzWm5w22Q8hIztTiqATMqHDfGh4jasJ90vu8LY j4GonOr103ST
ZmOiWapTZtnrV+HSk7BI8R72YzN9izPnMuEsV7d25Vdapm0zLKxS2b0LFCFt qZkn0olsij3E
eAbEvEKMUpv+yNqejUelJfN6QmwOsKIM329KTR2XN7I48MpsY9b4gRj5DEbB JZ8Mn3YY2sD9
7mUZJuWakW90MJ227BDokP4twjCAiVX6U2uFYWGeLhECM6WcQ8oWHqzeuJCU Wj/LfMYjSQRM
4aKh9aCEbuoZTW358oK1AE2ak6ltaXE/lbwHdCM/xsL+NvDJDCnJcYWND46A ScmfJbVo9JqM
tzt+8DEnrto+EOva1pTUUJSGp/KN3+S+9s17zAmHSmbL5rMRDhkbrF6S2qWl j++NMU8Y/CM0
oJV9WEnYA5DlRMjfKe+fHWpqsC/sX1rn2NU1WOm89e6aWOZg7mqgYAxsShT9 SMGgKKswjnrY
Upe4qnubCM9UEDbA3voxj3W3lrIkxjKDjCMAv2pZ10qvhFbxtwrx+eiqnVep lsfdgDh0cWao
9qNxILYkZbz6dVDMty/x3jH5UwH8KJL9BpT1URozVFO5+jxox/Dl2Q7M4okL Fp0re6dJLmLO
gSBydsHwN3Xvac6l200/HTZML+vghbDUnQsXsEJFhAStlA29iamD6bLd3nZY FVk/WpOfNmtr
aUvqjm//viyNlJYOLz9KAGC7j2k7Ap1bH1SVzC1dqfEIEd9QO18gUIY0VscN gXaaaUSTRFe2
il9GajntA1UOipsNPm11fUfQ6/ZsmGnje8qK7yYGfN3s+oVzIKxLNiEzxOJy z9ReQqnDhU5r
68/CIYmGBssgOWjFiouAZvCObwAuVurjqap7tHHLRWcF5kbdIPKP6AiKixuG apgAwRoIhoLY
e5lCy4qw/C/alLc6M9RBqbUqdrDM81Umpnvb1AH8+NsWAfzDXwltCBWznMpW qWO+R7TO2OXV
heKFvrpnaza3SG6FXWYOJyffuXzg49C5Te2FPWCm/DU1Na7c0hTLx0IbwRY5 qUTB7EAyEhx3
5ZwXHZW4B3Vj6aFR1ZVtsIJfmcI4TopJUSOz0tw/2k1ymjRz4vBWbWviytO1 ua6pjfndPwL5
pBoC/grkS/vvgXxiBISV4RZNtw4VY3PsSwfxC+9kQ+HoRmZHQQpMpoLJ9ur2 xfY/ieLe5lBf
f80N0eeVn0ngJgovt2PmFixsz+bX4N8BG6ZvwSDKEIZwsiDWmtb+3B0aLZ9a qcNmo27VKbCg
cy9jAqy+rQQEMwS2o07uqxpKohZbUmc9Rdsfm/XdWsoWSHdCm8sbrQf4IwK7 XF+xblNVWlpC
XIdxE4eVLrcbsSrTuJ7sRiTIh46JfaIRFbXbaptRLzyY+R5UKuW9G64n+j+/ m9RdAYGH312H
IuAcPWnEyo0442gPn6CF4sMf4Ne6bQ6N2q2uuGKjC7cstpnQudcxwGsNrAQG cALtsFuH6mNh
+fWBWrwh5QrpVJS6GVZC9RqOR5B7AK66iWAK3OdcVNWlXoH0FRudxXdshlr7 LZTLy7p+kTYO
PLI77aqfa/jZ2NhhTIa2j0nYGHpEQOcuhjrWvDzXPLxzvFZR3KMtPFRW9iDR psj9gd01iJEA
khHIh+Dsctuy70dZrthoRiFM81KodjOfVanuOsTUID7EwjIIkrAqTFPGMqKh SloTO6dNkgfi
dw2o5TlCbEQmNh8GxSZDJHy6DdOac5OuiTiy6+h8BsgqZk9pF51cnCAu+j92 aLwfGR1Pi2ND
dd+pOm6z25RfoREczsC/upe/97TPbaLEsbEitNKQgRqLH8Ckj0oj5PvuDjkY uijIX9fOs6lr
bXG2zSFnw6hkfwoN6qXiuXYDPZTp7oKclYTfyQsyCotsHmwOi8tbn6z5jcT3 InKNJjpv82jt
RAz+FKmDGLHB8+jAmaGcvhJMo5FPDht9mgTrTtqAUh3FYsB+6wKD7Ih6kMZ3 TmHLOgctP/fi
mF0bOupkquSbTgmY14ZalJnMYEwv/d03LBnwa7eQnS6NbJY9LWUyXvkRsqJR V+RQ92hiLi1J
QoKiY+NC9daDdr5kxsrgOHG18wgK6vI98CPqLL6mbQgxCgZxQMq66m3ogjJj vbgghjz9exfL
Z4OKDwTtYDJZixaU7IdBiUM37Etk7BbWCBAKQ2dDO2214GFzs+mHt5tpdX4c DjXzB7yLHcnc
SFZ25Gxe+FZQULtvXjXhEVW3CN2ZmTkMXe0X7lev6qzKbAyoHkxRwNQNQ1Ns RENCUlkyNIGM
nAY/bclP2x9t1TafbXPq9OIlEHOII1HKpAhCJgU0v+Lbv2DNzUXwFf6cpfkq 9Lgiv8X5gmoI
7KwTM3AU7KWK+UNctQBrButYJ+U1LG7Due7SfqIktCwm39bFdxWxbwDsN8Ap MumfTC4xXKsv
a3+3oUT+bq9BWESW/92qzf9D+5+KFtD17+/de3Qn+8XMGD1F0TT9II+8GFyj X3hd7IVSONrR
7MIBOzIFvzq/CUIgts3E7SbfKiExb+/55FPDtMefjAmhKCL1DLz7FDs0RqJq p8oMg6WcxiPv
Xi1B7bYV6rdAtWOAcCRMB6XxRyL/hWlhxh98tZ+BOdNn4NNq2axfb0+Rj4Tt Hn5yPILie+kX
9Sn+46n6N8QVDn1ozmf77hpxtGk+Ptt38s7XXUYUYIVyLi/PgIsbcwjQZ1We WozGv0vhy81E
d8nCoKV/PlGrNnsHwRQ9RpU4geo8HzlZV4DQFMlb1bazk1Yv4dVCB4+8Hxf6 uhL280Q+Idnn
iLIq1Y5YR+dF+7xwCE0B+h+OuH/8pPd1+8SS6mFtJ3ptfm7Z0mA9U5lh/U09 AZ6/n//Icy+G
//ffjf7g4T94+A8e/oOH/zPjYRy4KJHxDaRHjX3yxF99jHs8P54MF0UGqfqO cre/JH7xj7I/
QxBWNCj1KrFapZo+4WYcls/oLjKUsZ1tUCBMA2UPUkrEsA9ysBGw5Cck5uJW VOAbN96LJuTj
d4xiBKJEYN6pZDVLdfuWXrBCxSV7Ixbb5f24dr/QXbzVmYUHyWFsRS7CaGgi EqOjwhuFw5/W
Webmohq3mW/yXS2lsTKZTvdlOYG8Yx7ABt7fPtEVSthtZlYh09wPgzJ826og YrsNZ93oT2Mz
SkDupveKY/Lyku96C0O4kcywkAJ24AU/sKdo6m8JAaOT3RujsGtHTzLBtp/u uYo8eXR0K1Mo
llL1yFI6pLZdLuLENSimrpa87M3DuuP7qWdKhbsL0IOYIpe+zwddsjl8xBoQ +pmL6rzWp5M4
r7WySvTGRsByyfV2o8FuQnYcUgZp981r7QpT/YVw34JM2KF0w0ghmVLDZ8C4 jifdvQRpzCL7
YG5EtbqwFqCMdcZOcG27K38qO780FuB7waBkjV4vQ0n0GPmx0RY9rm6P/5L/ 7rK5Ze+UTKfy
GYDfDXrMesx6+RGTOu+7Jnq0ZtZ48TBit9bItxLLOYcN0ecp2Eu4uU+IUl6R RmTN4/7LLvqS
P0Lc2uhDo1cMRwrVmB55xA0OwMZ6cZ2NPevALYq8LwCuuWbTf5cgw4T+TZaM S/w6pp9pHvUW
6kP/aF2rYrpBBslO+fZ74hCWckp03TdVEqT438gpeZxLA6XhiNOr4ruJNapl 8rFjp8kspGQD
whCVbYk6DJNTtqqpCgEnwpjcmQ7cdx0Ubc0dfqp+mDsnJve2w8gcH0kMWMl5 wUK1zWyajvSX
mHemeR6bjxbMnv3Ghc+AlXUj5rKODkkE7P1Hk5Q0oW5OrMtOShdMVJemAN7j 8bwfN5oXa8ue
OrM2g8oFqZi6YlMCyfPiJs7ihqmkma6f/NBkWr6Cn7a6ZmsNXoeAmhIXYRNm irqQsBIRH5qu
tgoBlyTPRt0gucRNOSOpWrD6d1YimVRCL60tY6KliOEOyb3RmCwAWC9h4eGK Ei9f0TsQCBm9
WF18hyXBnNeejr8hu0NJPkkFLCWZhXnadSmd4KjY/S46gZt6NrVo7R3bO95s 4tDNXygdCiMT
Ev8tcVHxH4mLuahU3R30M7a+whtaZeXvp4skrYu01njj84fSzYLRVgmCHGtf zWtlEm85DtKX
kEW0KVC3j9iZE3tnOiAtL0TBuk/nOlFcImCZnL0/tbp43fi20fHi0O9KmFQ+ Sj7srL5UySwc
XMNdB5Orxi8Wxq9cHA/Lvpj/V867+NPY09jLD+nhIxGHnGuHGt279xY8p0uZ 9v0Eh5HAwJSv
4vmtR+97cs5nwFrSuuEEpfWTHLr19cUGTiP+9wjToEx7/sFROa9NZhvFptbJ wsSpUy16+2sl
GzN1cw6CiOieyw8p8ta6TiniA/gDEA3PQM3V2nHcsf+tDMXT9IuZuEZJJnhy fH+3cuN5OB0Z
K4wmEyafIR/VNVtSPHK/U6drBa247DyYiXVRCXInTYbosRGhnm2TWY/DWCpz T/dZsLph9q0V
M7dWvP9M8Na2KfwZyGc/pLv7NrgEbv7sedijUf1uMdhbDamo8zEPp3Z05zOH LtO8YNvjhb0V
qvKrYFhaJwTw/u7ZbpCTpZ0lb7BtQX39yrWnwdRygW6s7rukkMHtrXItP1aF xIuDCyVUiRtN
J3wWCysKVi4zQGWJ3/wbFFwsDGDkCV7TCBytL1dvuyeSl04/WOx+21TDs4Ek +HHE814SezHf
S/zjBc9dNG57aPmmLHmjLEuZvX+dr7ifOdzipyS3NqsbW3k2l13TIf0vkCj5 FtKSlUpuhfuN
i9GEMXthFE0dQQ5JLlzobQnHgqk2WAmBcvg/3ombWzSevm9BROp382jCkNzl ZMBW1XWXQxzJ
vUaWkRQjlol6MC7ttC5jzlT1Nx918LO28SE2wY3cJPJKC08aY+kRwmT9VUDS TYzyi3Auwlel
wKA9ExecHjSvTf3zuOtV/KuDUzqkNHvNAQhjfv/Vn7RWfUT5T8PT/g2i9c/A BnHYvdKTv2+4
72lr4+mex8pWpSID98SVmzzIEEknuMr5+h1zbm8rLvIb34fgKjgq4ugJWNAq xTl1z/XF/ngh
E29LyEmGg4OTA4VZInTz4ildUoplI3RAQIivWUJS6haKi+bcA8QmUTnHrLwf M1MajbYpgtvT
J+mPKD1FOOl0y37rqhsyYyX6ZA9UuAqbLyBOrqCqyWdnl31Hp6Lv4qHtVBnk kJwQ5m7g7djE
6stcdCCClyrWPnXCYrdzqTfKFrKNJavXNpxUb7ZCVUUOIKxD9ALK06CXMRD5 6Lo0Kq9uo8Us
NMMsukCbvq7E9La0vuPbqtyrNxQL998UH/IRuFkx1qwJR+uzs+yoV5NsnGyK DYQimvPBGjGa
nEJLg0hcCk8ll5l40IkZHjoGGX7F4sUGns5EUfg8dzzT4kj9pJP17iV8+NAf YgPzX+aoxM2p
jQfmd9MLlNRlMXYQVjioyhRjavTbENHuuWhcZxaNZfP7PC0WYabXUaWfc5ss LxL1I3CzikuI
SK1kaFTGnthjivn1XxAWpo3OWtjpHls/TIFHixkSbobn+0n6jwsDP2oZv0BE ZEGVAhv9dHis
c6Mv8yaPxJA/ks6wFYme2PUEB6waRsmiIgc6DFwV4Foag8y6az8Z5VVTcGFO Kbit0Kr3sFw1
/1FY+vsLuumTrHz3yz7eaNqOZaepZZZwaGrsl7iTi0UpREJP667+dp2qwK5D MwMbyJhhW4R+
Tvuq8Wt9kGJdonpDU/MFzOKgoz0hGe0NJ1lt9SKq7oiUNQ/uco6ojJe55eeC fb/cwinF8CSm
c4lNKWmmDzXLISaycHmgyJi/XJvDugMP/Ij6Oq/IG9KMgv9blv3OP7LsuSD6 DD2jVGfqRmEq
pfKCtH1QXi9QRCSUpzjYPgPuR9rBxVhxH6Hvw3buOvSR4ghsVKzHBov6bsAR OIUHd2b07eAN
cnHcPaCId7h+AUGOXDCZnyo/TH7abqcZTIYqSZyqWnaDGi+BXMPooGmCNtLZ YaREfjlbJsQ2
iDOjatW71Tq+qJJISTMULNh3mrED4XUE7IsR9yVtKmGuHoJ1pL5nxdSt7aO4 X9itYorWslHy
7cRTYThq2sj6hyrmtNpv1pQdlV1tf2Byxa6XxZjCCaRTlq7ozGQhChiBIHcj x9L8T+9QaXzw
NfCfM34GPk3VMBmse97rhsoP7jQ+jVeD6Yhj4sE+KXa5EHNGoMykwwBgorEp WcldKnOPI1CM
vn/g67Gaym/DKYF3/xVjDf4Q/y/EQPMzEBcl+uvI/0r3e/p4U1PyuJVC5hZm IgT9+MDasdqL
XfMn+Odf0nKP3+6fUJ6hhdPUtWWPbZKIeJlmQ0KVqDF3km/x9clQCaE7Sn/9 uzRK1373dVNI
qXRt8TZ0f0TEPuGT9fm7VEacK/AUpoFtJmWOIBJEj+1AcPVKK3nhqLfwa0MS q6jClUVdpcc0
X+2T8nQ3xt1FRxwzCVSnMR9S/i1FfVaFjBejNYwi6V6UzGQFmvZovk+o4/0b O4OP9/lTMUry
025fGe91u+PX7vgvnuagOY7GOGN6tvhI/vLaWHewztSzF720oV/kCzgV/JVR yPrdeViGj6N8
njYeuR2sje3jZbQfYw8pY1BXB3Z9o9ZPBUmVaZiNLLugmlcRQHcEi+nqTtFg kuf+DT/IfXde
pCY9f2Gl7nypvu21jnB1KZslFUqiVoHXIN88e3SDzV+AReNi6S/AYkXdxKsq Q12HXMmOz4Gu
iJTQd1IHkVZ0m6HWNltX3x6IItCvHIFSw+Rvg2dvdKlHPeJQzZPVjZzDJ6GW mZVu8E/ON+3f
frBgaAz6uq2v9Ov2ZTBMjosRzfwjV33tQn7tqfMfqepmNqRcs1wrNKdaMUwG 3wtnmO3K0/HW
iMHVy2weSe9JtBZzkhkSdtE+Ht/Vn37dTv36GJj6DEhFTvxbi9img+KcJsey 9KPh69BD2amv
dSc4x9tp1MuWjJgJlBh14oHbJEu19ewN9UIqm0jtIkQ2frj4p9xIUZOW1e6y xg7Ue4IJBdFY
1XAwc2Eo44iTnjnduAbM9wwH7nhoyESdcUP1fgfzy7x8lm9CDomoPMbEqFR3 h8auV3dXT8Xl
1lscbzCGsZlq2RAhHHWRxV4BOSdx4mL46TRfKw5T9600+rrkZRN1dzx7O1M5 xzHU2YcbaF76
0kTc2j110VkZvPOAUHbowaOjGFGkp7XEsH8+MLXSyTz2yt3bC6BLg9xe5n2D CtEnj7U2XLhf
6xc2erbN4W+5daSbG/yYgd+fOj4YUzpN5uqt4bcWXEd0OKx94suJnLDYcy5j e329S/bxVWtk
zqb6B2zS4f43RlCYSuGEyQK+At+/R7t7+y5aLtkxp+Mmr1bV8SJHOZaHv16v AMXtwr9OSsRy
6W45KQc1gp9AgUj0FBfI9rt08ndlA19MtXf7R3JhmXhxF/EY5KZ/rxCCwqwK 00ejWalhFA31
HGW7+EYh6AMFOH65W44MBaT5Vle5qJLK53Ph5Sbf6+GvPuMpBN1LMFpmDCub NWhXeXjdby9P
EOdGwCMrbmIxv6BQlUqtHy3HdTe4IRvy5UJK1kjfNo2Nbmw4kqjsIBwz+PmJ buKaBHmnrhZY
WSpBZ9usbh4YgbsWgZiX0mIwJLVgPYDNc10taUF7BUGqLzAJQa8tUDbP7sj0 IoLfXi5ue/zG
c78XMLGRewbg97r1dfoQjuwccqcqLT+4zr8fKK3XSo1lG9G0dhuEfhhBI4As OTSgPpdO8L52
1NF5h2ZsljrXiIApjlXalsti3mxIDhO88wz4zGTl49u3VdkEN9lxSApQUcr6 tg+ViRuhHgW8
LqHqmNzXPsz7cQCW7cCtRzDaOZrRFY9yZ8L/eHeHYIQqzU+Qi+p82pfel1Ss Z8MbYepmYv+T
yMqOImQjQWSERVu7kKWzEckEHp7f9xlARQZ3UJ+Lt0TJdtTV1c6wVFDFIkVs vqGsezsgr9vv
QkH1SPzZlHK7+dvjwsr3Mrbi1EZpxp3Xl/3B4bYJN/ZOl479Pts/BTNmvvO9 gHgSFjsWViSd
ohzOU/CkXS6GoNMwjaPSUFvCvLcyjPjmeO2txDOg3iIL6qiOvBttEU29jquR PW+l42
|
|
|
Re: [Teneo] memory consumption keeps building up [message #78552 is a reply to message #78533] |
Thu, 05 April 2007 16:44 ![Go to previous message Go to previous message](theme/Solstice/images/up.png) ![Go to next message Go to next message](theme/Solstice/images/down.png) |
Parvez![Friend of Eclipse Friend](/donate/web-api/friends_decorator.php?email=p.chauhan%40pilz.ie) Messages: 181 Registered: July 2009 |
Senior Member |
|
|
oh yes forgot to mention, that your guess was right that it is referers
field ;-)
PC wrote:
> Hi Martin,
>
> I did some more investigation, and it looks that it is referers () field
> of HbDataStore. By the time I created 6 projects, it went upto 483mb.
>
> I am enclosing some profiler snapshots in zip file for your consideration.
>
> - Parvez
>
> Martin Taal wrote:
>> Hi Parvez,
>> How large is your model? Would the cross reference mapping cause the
>> memory use (it is the referers member in the HbDataStore)?
>>
>> gr. Martin
>>
>> PC wrote:
>>> Hi Martin,
>>>
>>> yes, if I initialize 5 times then it goes to around 500mb or so.
>>> SessionFactory close seems to work as I don't see any error,
>>> otherwise I guess I would have seen "session is already closed" or
>>> something.
>>>
>>> As per initialise time it used to take from 15 - 20 secs. But now I
>>> have changed to use cacheableFile, so that have reduced to 7 - 10
>>> seconds.
>>>
>>> Regards,
>>> Parvez
>>>
>>> Martin Taal wrote:
>>>> Hi Parvez,
>>>> There is an ERuntime.INSTANCE which keeps track of mapping from the
>>>> ecore to the java classes. But I can't really imagine that this one
>>>> is 100mb large. Also the same epackage can not be registered twice.
>>>>
>>>> Internally the hbDataStore keeps a cross reference map which can
>>>> take some space (but 100mb seems a lot). This one is not cleared
>>>> when doing close() on the datastore or the hbhelper. Is there still
>>>> a pointer somewhere to the old datastore?
>>>>
>>>> Btw, the HbHelper.INSTANCE.closeAll() also closes the underlying
>>>> sessionfactory so I am surprised that your sessionfactoru.close()
>>>> works.
>>>>
>>>> So if you create 5 hbdatastores and initialize them then 500Mb is used?
>>>>
>>>> gr. Martin
>>>>
>>>> PC wrote:
>>>>> Hi,
>>>>>
>>>>> Every time user creates a project in our application we initialize
>>>>> a new database (embedded HSQLDB) and hence we have to initialize
>>>>> HbDataStore.
>>>>> I have number of emf models and nearly 100mb is consumed on each
>>>>> hbds.initialize();
>>>>> Before user can create another project, existing opened(if any)
>>>>> project/database is closed and session is cleared.
>>>>>
>>>>> These are the steps done on close of project:
>>>>>
>>>>>
>>>>> session.flush(); //session obtained from teneo
>>>>> session.clear();
>>>>> //here shutdown statement is issued for the db and then
>>>>> session.disconnect();
>>>>> session.close();
>>>>> HbHelper.INSTANCE.deRegisterDataStore(_dbName); // _dbName
>>>>> is session factory name
>>>>> HbHelper.INSTANCE.closeAll();
>>>>> sessionFactory.close(); //session factory obtained from
>>>>> teneo
>>>>> Runtime runtime = Runtime.getRuntime();
>>>>> runtime.gc();
>>>>>
>>>>> But it seems that emf objects created during models initialization
>>>>> remains in memory and so if user creates another project then again
>>>>> 100mb is consumed and hence shortly runs out of memory.
>>>>>
>>>>> So just wondering do I have to do something more about clearing?
>>>>>
>>>>> Any suggestions to fix it?
>>>>>
>>>>> Thanks.
>>>>> Parvez
>>>>
>>>>
>>
>>
>
|
|
|
Re: [Teneo] memory consumption keeps building up [message #78566 is a reply to message #78552] |
Thu, 05 April 2007 17:23 ![Go to previous message Go to previous message](theme/Solstice/images/up.png) ![Go to next message Go to next message](theme/Solstice/images/down.png) |
Martin Taal![Friend of Eclipse Friend](/donate/web-api/friends_decorator.php?email=mtaal%40springsite.com) Messages: 5468 Registered: July 2009 |
Senior Member |
|
|
Thanks :-)
The referers field is only used after initialization to support cross-reference queries. If this is
not a requirement then it can be cleared. The only problem on the short term is that it is not
possible to clear it by subclassing hbdatastore. I will change this in cvs so then the build of the
referers hashmap can be prevented.
Btw, do you have an idea why there is still a reference to the closed hbdatastores, there must be a
reference to them otherwise it would also be gc-ed.
gr. Martin
PC wrote:
> oh yes forgot to mention, that your guess was right that it is referers
> field ;-)
>
>
> PC wrote:
>> Hi Martin,
>>
>> I did some more investigation, and it looks that it is referers ()
>> field of HbDataStore. By the time I created 6 projects, it went upto
>> 483mb.
>>
>> I am enclosing some profiler snapshots in zip file for your
>> consideration.
>>
>> - Parvez
>>
>> Martin Taal wrote:
>>> Hi Parvez,
>>> How large is your model? Would the cross reference mapping cause the
>>> memory use (it is the referers member in the HbDataStore)?
>>>
>>> gr. Martin
>>>
>>> PC wrote:
>>>> Hi Martin,
>>>>
>>>> yes, if I initialize 5 times then it goes to around 500mb or so.
>>>> SessionFactory close seems to work as I don't see any error,
>>>> otherwise I guess I would have seen "session is already closed" or
>>>> something.
>>>>
>>>> As per initialise time it used to take from 15 - 20 secs. But now I
>>>> have changed to use cacheableFile, so that have reduced to 7 - 10
>>>> seconds.
>>>>
>>>> Regards,
>>>> Parvez
>>>>
>>>> Martin Taal wrote:
>>>>> Hi Parvez,
>>>>> There is an ERuntime.INSTANCE which keeps track of mapping from the
>>>>> ecore to the java classes. But I can't really imagine that this one
>>>>> is 100mb large. Also the same epackage can not be registered twice.
>>>>>
>>>>> Internally the hbDataStore keeps a cross reference map which can
>>>>> take some space (but 100mb seems a lot). This one is not cleared
>>>>> when doing close() on the datastore or the hbhelper. Is there still
>>>>> a pointer somewhere to the old datastore?
>>>>>
>>>>> Btw, the HbHelper.INSTANCE.closeAll() also closes the underlying
>>>>> sessionfactory so I am surprised that your sessionfactoru.close()
>>>>> works.
>>>>>
>>>>> So if you create 5 hbdatastores and initialize them then 500Mb is
>>>>> used?
>>>>>
>>>>> gr. Martin
>>>>>
>>>>> PC wrote:
>>>>>> Hi,
>>>>>>
>>>>>> Every time user creates a project in our application we initialize
>>>>>> a new database (embedded HSQLDB) and hence we have to initialize
>>>>>> HbDataStore.
>>>>>> I have number of emf models and nearly 100mb is consumed on each
>>>>>> hbds.initialize();
>>>>>> Before user can create another project, existing opened(if any)
>>>>>> project/database is closed and session is cleared.
>>>>>>
>>>>>> These are the steps done on close of project:
>>>>>>
>>>>>>
>>>>>> session.flush(); //session obtained from teneo
>>>>>> session.clear();
>>>>>> //here shutdown statement is issued for the db and then
>>>>>> session.disconnect();
>>>>>> session.close();
>>>>>> HbHelper.INSTANCE.deRegisterDataStore(_dbName); //
>>>>>> _dbName is session factory name
>>>>>> HbHelper.INSTANCE.closeAll();
>>>>>> sessionFactory.close(); //session factory obtained from
>>>>>> teneo
>>>>>> Runtime runtime = Runtime.getRuntime();
>>>>>> runtime.gc();
>>>>>>
>>>>>> But it seems that emf objects created during models initialization
>>>>>> remains in memory and so if user creates another project then
>>>>>> again 100mb is consumed and hence shortly runs out of memory.
>>>>>>
>>>>>> So just wondering do I have to do something more about clearing?
>>>>>>
>>>>>> Any suggestions to fix it?
>>>>>>
>>>>>> Thanks.
>>>>>> Parvez
>>>>>
>>>>>
>>>
>>>
>>
--
With Regards, Martin Taal
Springsite/Elver.org
Office: Hardwareweg 4, 3821 BV Amersfoort
Postal: Nassaulaan 7, 3941 EC Doorn
The Netherlands
Tel: +31 (0)84 420 2397
Fax: +31 (0)84 225 9307
Mail: mtaal@springsite.com - mtaal@elver.org
Web: www.springsite.com - www.elver.org
|
|
|
Re: [Teneo] memory consumption keeps building up [message #78640 is a reply to message #78566] |
Fri, 06 April 2007 08:48 ![Go to previous message Go to previous message](theme/Solstice/images/up.png) ![Go to next message Go to next message](theme/Solstice/images/down.png) |
Parvez![Friend of Eclipse Friend](/donate/web-api/friends_decorator.php?email=p.chauhan%40pilz.ie) Messages: 181 Registered: July 2009 |
Senior Member |
|
|
Hi Martin,
I don't think that I am keeping the ref to old datastore.
Not sure, but from deep size calculation of referers field, it looks
that it may be keeping ref to some old objects. So in one instance of
HbDataStore's referers field's keySet calculates to that much size.
- Parvez
Martin Taal wrote:
> Thanks :-)
>
> The referers field is only used after initialization to support
> cross-reference queries. If this is not a requirement then it can be
> cleared. The only problem on the short term is that it is not possible
> to clear it by subclassing hbdatastore. I will change this in cvs so
> then the build of the referers hashmap can be prevented.
>
> Btw, do you have an idea why there is still a reference to the closed
> hbdatastores, there must be a reference to them otherwise it would also
> be gc-ed.
>
> gr. Martin
>
> PC wrote:
>> oh yes forgot to mention, that your guess was right that it is
>> referers field ;-)
>>
>>
>> PC wrote:
>>> Hi Martin,
>>>
>>> I did some more investigation, and it looks that it is referers ()
>>> field of HbDataStore. By the time I created 6 projects, it went
>>> upto 483mb.
>>>
>>> I am enclosing some profiler snapshots in zip file for your
>>> consideration.
>>>
>>> - Parvez
>>>
>>> Martin Taal wrote:
>>>> Hi Parvez,
>>>> How large is your model? Would the cross reference mapping cause the
>>>> memory use (it is the referers member in the HbDataStore)?
>>>>
>>>> gr. Martin
>>>>
>>>> PC wrote:
>>>>> Hi Martin,
>>>>>
>>>>> yes, if I initialize 5 times then it goes to around 500mb or so.
>>>>> SessionFactory close seems to work as I don't see any error,
>>>>> otherwise I guess I would have seen "session is already closed" or
>>>>> something.
>>>>>
>>>>> As per initialise time it used to take from 15 - 20 secs. But now I
>>>>> have changed to use cacheableFile, so that have reduced to 7 - 10
>>>>> seconds.
>>>>>
>>>>> Regards,
>>>>> Parvez
>>>>>
>>>>> Martin Taal wrote:
>>>>>> Hi Parvez,
>>>>>> There is an ERuntime.INSTANCE which keeps track of mapping from
>>>>>> the ecore to the java classes. But I can't really imagine that
>>>>>> this one is 100mb large. Also the same epackage can not be
>>>>>> registered twice.
>>>>>>
>>>>>> Internally the hbDataStore keeps a cross reference map which can
>>>>>> take some space (but 100mb seems a lot). This one is not cleared
>>>>>> when doing close() on the datastore or the hbhelper. Is there
>>>>>> still a pointer somewhere to the old datastore?
>>>>>>
>>>>>> Btw, the HbHelper.INSTANCE.closeAll() also closes the underlying
>>>>>> sessionfactory so I am surprised that your sessionfactoru.close()
>>>>>> works.
>>>>>>
>>>>>> So if you create 5 hbdatastores and initialize them then 500Mb is
>>>>>> used?
>>>>>>
>>>>>> gr. Martin
>>>>>>
>>>>>> PC wrote:
>>>>>>> Hi,
>>>>>>>
>>>>>>> Every time user creates a project in our application we
>>>>>>> initialize a new database (embedded HSQLDB) and hence we have to
>>>>>>> initialize HbDataStore.
>>>>>>> I have number of emf models and nearly 100mb is consumed on each
>>>>>>> hbds.initialize();
>>>>>>> Before user can create another project, existing opened(if any)
>>>>>>> project/database is closed and session is cleared.
>>>>>>>
>>>>>>> These are the steps done on close of project:
>>>>>>>
>>>>>>>
>>>>>>> session.flush(); //session obtained from teneo
>>>>>>> session.clear();
>>>>>>> //here shutdown statement is issued for the db and then
>>>>>>> session.disconnect();
>>>>>>> session.close();
>>>>>>> HbHelper.INSTANCE.deRegisterDataStore(_dbName); //
>>>>>>> _dbName is session factory name
>>>>>>> HbHelper.INSTANCE.closeAll();
>>>>>>> sessionFactory.close(); //session factory obtained
>>>>>>> from teneo
>>>>>>> Runtime runtime = Runtime.getRuntime();
>>>>>>> runtime.gc();
>>>>>>>
>>>>>>> But it seems that emf objects created during models
>>>>>>> initialization remains in memory and so if user creates another
>>>>>>> project then again 100mb is consumed and hence shortly runs out
>>>>>>> of memory.
>>>>>>>
>>>>>>> So just wondering do I have to do something more about clearing?
>>>>>>>
>>>>>>> Any suggestions to fix it?
>>>>>>>
>>>>>>> Thanks.
>>>>>>> Parvez
>>>>>>
>>>>>>
>>>>
>>>>
>>>
>
>
|
|
|
Re: [Teneo] memory consumption keeps building up [message #78792 is a reply to message #78640] |
Fri, 06 April 2007 21:41 ![Go to previous message Go to previous message](theme/Solstice/images/up.png) ![Go to next message Go to next message](theme/Solstice/images/down.png) |
Martin Taal![Friend of Eclipse Friend](/donate/web-api/friends_decorator.php?email=mtaal%40springsite.com) Messages: 5468 Registered: July 2009 |
Senior Member |
|
|
Hi Parvez,
I just noticed the closeAll method in the HbHelper does not clear the
HbHelper.dataStoreByPersistentClass map. This is at least one reason that the hbdatastore is not gc-ed.
I have entered a bugzilla for this. This will be solved in the next release.
As a workaround you can try the HbHelper.deRegisterDataStore method. This one should remove the
references to the datastore from both internal HbHelper maps.
gr. Martin
PC wrote:
> Hi Martin,
>
> I don't think that I am keeping the ref to old datastore.
> Not sure, but from deep size calculation of referers field, it looks
> that it may be keeping ref to some old objects. So in one instance of
> HbDataStore's referers field's keySet calculates to that much size.
>
> - Parvez
>
> Martin Taal wrote:
>> Thanks :-)
>>
>> The referers field is only used after initialization to support
>> cross-reference queries. If this is not a requirement then it can be
>> cleared. The only problem on the short term is that it is not possible
>> to clear it by subclassing hbdatastore. I will change this in cvs so
>> then the build of the referers hashmap can be prevented.
>>
>> Btw, do you have an idea why there is still a reference to the closed
>> hbdatastores, there must be a reference to them otherwise it would
>> also be gc-ed.
>>
>> gr. Martin
>>
>> PC wrote:
>>> oh yes forgot to mention, that your guess was right that it is
>>> referers field ;-)
>>>
>>>
>>> PC wrote:
>>>> Hi Martin,
>>>>
>>>> I did some more investigation, and it looks that it is referers ()
>>>> field of HbDataStore. By the time I created 6 projects, it went
>>>> upto 483mb.
>>>>
>>>> I am enclosing some profiler snapshots in zip file for your
>>>> consideration.
>>>>
>>>> - Parvez
>>>>
>>>> Martin Taal wrote:
>>>>> Hi Parvez,
>>>>> How large is your model? Would the cross reference mapping cause
>>>>> the memory use (it is the referers member in the HbDataStore)?
>>>>>
>>>>> gr. Martin
>>>>>
>>>>> PC wrote:
>>>>>> Hi Martin,
>>>>>>
>>>>>> yes, if I initialize 5 times then it goes to around 500mb or so.
>>>>>> SessionFactory close seems to work as I don't see any error,
>>>>>> otherwise I guess I would have seen "session is already closed" or
>>>>>> something.
>>>>>>
>>>>>> As per initialise time it used to take from 15 - 20 secs. But now
>>>>>> I have changed to use cacheableFile, so that have reduced to 7 -
>>>>>> 10 seconds.
>>>>>>
>>>>>> Regards,
>>>>>> Parvez
>>>>>>
>>>>>> Martin Taal wrote:
>>>>>>> Hi Parvez,
>>>>>>> There is an ERuntime.INSTANCE which keeps track of mapping from
>>>>>>> the ecore to the java classes. But I can't really imagine that
>>>>>>> this one is 100mb large. Also the same epackage can not be
>>>>>>> registered twice.
>>>>>>>
>>>>>>> Internally the hbDataStore keeps a cross reference map which can
>>>>>>> take some space (but 100mb seems a lot). This one is not cleared
>>>>>>> when doing close() on the datastore or the hbhelper. Is there
>>>>>>> still a pointer somewhere to the old datastore?
>>>>>>>
>>>>>>> Btw, the HbHelper.INSTANCE.closeAll() also closes the underlying
>>>>>>> sessionfactory so I am surprised that your sessionfactoru.close()
>>>>>>> works.
>>>>>>>
>>>>>>> So if you create 5 hbdatastores and initialize them then 500Mb is
>>>>>>> used?
>>>>>>>
>>>>>>> gr. Martin
>>>>>>>
>>>>>>> PC wrote:
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> Every time user creates a project in our application we
>>>>>>>> initialize a new database (embedded HSQLDB) and hence we have to
>>>>>>>> initialize HbDataStore.
>>>>>>>> I have number of emf models and nearly 100mb is consumed on each
>>>>>>>> hbds.initialize();
>>>>>>>> Before user can create another project, existing opened(if any)
>>>>>>>> project/database is closed and session is cleared.
>>>>>>>>
>>>>>>>> These are the steps done on close of project:
>>>>>>>>
>>>>>>>>
>>>>>>>> session.flush(); //session obtained from teneo
>>>>>>>> session.clear();
>>>>>>>> //here shutdown statement is issued for the db and then
>>>>>>>> session.disconnect();
>>>>>>>> session.close();
>>>>>>>> HbHelper.INSTANCE.deRegisterDataStore(_dbName); //
>>>>>>>> _dbName is session factory name
>>>>>>>> HbHelper.INSTANCE.closeAll();
>>>>>>>> sessionFactory.close(); //session factory obtained
>>>>>>>> from teneo
>>>>>>>> Runtime runtime = Runtime.getRuntime();
>>>>>>>> runtime.gc();
>>>>>>>>
>>>>>>>> But it seems that emf objects created during models
>>>>>>>> initialization remains in memory and so if user creates another
>>>>>>>> project then again 100mb is consumed and hence shortly runs out
>>>>>>>> of memory.
>>>>>>>>
>>>>>>>> So just wondering do I have to do something more about clearing?
>>>>>>>>
>>>>>>>> Any suggestions to fix it?
>>>>>>>>
>>>>>>>> Thanks.
>>>>>>>> Parvez
>>>>>>>
>>>>>>>
>>>>>
>>>>>
>>>>
>>
>>
--
With Regards, Martin Taal
Springsite/Elver.org
Office: Hardwareweg 4, 3821 BV Amersfoort
Postal: Nassaulaan 7, 3941 EC Doorn
The Netherlands
Tel: +31 (0)84 420 2397
Fax: +31 (0)84 225 9307
Mail: mtaal@springsite.com - mtaal@elver.org
Web: www.springsite.com - www.elver.org
|
|
|
Re: [Teneo] memory consumption keeps building up [message #78969 is a reply to message #78792] |
Tue, 10 April 2007 08:49 ![Go to previous message Go to previous message](theme/Solstice/images/up.png) ![Go to next message Go to next message](theme/Solstice/images/down.png) |
Parvez![Friend of Eclipse Friend](/donate/web-api/friends_decorator.php?email=p.chauhan%40pilz.ie) Messages: 181 Registered: July 2009 |
Senior Member |
|
|
Thanks Martin.
Yes, I did add following but didn't help.
Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap( ).remove(_dbName);
Resource.Factory.Registry.INSTANCE.getProtocolToFactoryMap() .remove(HIBERNATE);
HbHelper.INSTANCE.deRegisterDataStore(_dbName);
HbHelper.INSTANCE.deRegisterDataStore(HIBERNATE);
Earlier you mentioned that
"referers field is only used after initialization to support
cross-reference queries. If this is not a requirement then it can be
cleared"
so just wondering (short term/quick solution) if computeReferers()
returns null or empty hashmap (though I know it is private at the moment
and can't be overridden) then that should solve the problem, is it?, any
other issues if you can think of?
At present, I am using 0.7.5, as you were saying fix in next release,
any idea when that could be?
Thanks.
- Parvez
Martin Taal wrote:
> Hi Parvez,
> I just noticed the closeAll method in the HbHelper does not clear the
> HbHelper.dataStoreByPersistentClass map. This is at least one reason
> that the hbdatastore is not gc-ed.
> I have entered a bugzilla for this. This will be solved in the next
> release.
>
> As a workaround you can try the HbHelper.deRegisterDataStore method.
> This one should remove the references to the datastore from both
> internal HbHelper maps.
>
> gr. Martin
>
> PC wrote:
>> Hi Martin,
>>
>> I don't think that I am keeping the ref to old datastore.
>> Not sure, but from deep size calculation of referers field, it looks
>> that it may be keeping ref to some old objects. So in one instance of
>> HbDataStore's referers field's keySet calculates to that much size.
>>
>> - Parvez
>>
>> Martin Taal wrote:
>>> Thanks :-)
>>>
>>> The referers field is only used after initialization to support
>>> cross-reference queries. If this is not a requirement then it can be
>>> cleared. The only problem on the short term is that it is not
>>> possible to clear it by subclassing hbdatastore. I will change this
>>> in cvs so then the build of the referers hashmap can be prevented.
>>>
>>> Btw, do you have an idea why there is still a reference to the closed
>>> hbdatastores, there must be a reference to them otherwise it would
>>> also be gc-ed.
>>>
>>> gr. Martin
>>>
>>> PC wrote:
>>>> oh yes forgot to mention, that your guess was right that it is
>>>> referers field ;-)
>>>>
>>>>
>>>> PC wrote:
>>>>> Hi Martin,
>>>>>
>>>>> I did some more investigation, and it looks that it is referers ()
>>>>> field of HbDataStore. By the time I created 6 projects, it went
>>>>> upto 483mb.
>>>>>
>>>>> I am enclosing some profiler snapshots in zip file for your
>>>>> consideration.
>>>>>
>>>>> - Parvez
>>>>>
>>>>> Martin Taal wrote:
>>>>>> Hi Parvez,
>>>>>> How large is your model? Would the cross reference mapping cause
>>>>>> the memory use (it is the referers member in the HbDataStore)?
>>>>>>
>>>>>> gr. Martin
>>>>>>
>>>>>> PC wrote:
>>>>>>> Hi Martin,
>>>>>>>
>>>>>>> yes, if I initialize 5 times then it goes to around 500mb or so.
>>>>>>> SessionFactory close seems to work as I don't see any error,
>>>>>>> otherwise I guess I would have seen "session is already closed"
>>>>>>> or something.
>>>>>>>
>>>>>>> As per initialise time it used to take from 15 - 20 secs. But now
>>>>>>> I have changed to use cacheableFile, so that have reduced to 7 -
>>>>>>> 10 seconds.
>>>>>>>
>>>>>>> Regards,
>>>>>>> Parvez
>>>>>>>
>>>>>>> Martin Taal wrote:
>>>>>>>> Hi Parvez,
>>>>>>>> There is an ERuntime.INSTANCE which keeps track of mapping from
>>>>>>>> the ecore to the java classes. But I can't really imagine that
>>>>>>>> this one is 100mb large. Also the same epackage can not be
>>>>>>>> registered twice.
>>>>>>>>
>>>>>>>> Internally the hbDataStore keeps a cross reference map which can
>>>>>>>> take some space (but 100mb seems a lot). This one is not cleared
>>>>>>>> when doing close() on the datastore or the hbhelper. Is there
>>>>>>>> still a pointer somewhere to the old datastore?
>>>>>>>>
>>>>>>>> Btw, the HbHelper.INSTANCE.closeAll() also closes the underlying
>>>>>>>> sessionfactory so I am surprised that your
>>>>>>>> sessionfactoru.close() works.
>>>>>>>>
>>>>>>>> So if you create 5 hbdatastores and initialize them then 500Mb
>>>>>>>> is used?
>>>>>>>>
>>>>>>>> gr. Martin
>>>>>>>>
>>>>>>>> PC wrote:
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> Every time user creates a project in our application we
>>>>>>>>> initialize a new database (embedded HSQLDB) and hence we have
>>>>>>>>> to initialize HbDataStore.
>>>>>>>>> I have number of emf models and nearly 100mb is consumed on
>>>>>>>>> each hbds.initialize();
>>>>>>>>> Before user can create another project, existing opened(if any)
>>>>>>>>> project/database is closed and session is cleared.
>>>>>>>>>
>>>>>>>>> These are the steps done on close of project:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> session.flush(); //session obtained from teneo
>>>>>>>>> session.clear();
>>>>>>>>> //here shutdown statement is issued for the db and then
>>>>>>>>> session.disconnect();
>>>>>>>>> session.close();
>>>>>>>>> HbHelper.INSTANCE.deRegisterDataStore(_dbName); //
>>>>>>>>> _dbName is session factory name
>>>>>>>>> HbHelper.INSTANCE.closeAll();
>>>>>>>>> sessionFactory.close(); //session factory obtained
>>>>>>>>> from teneo
>>>>>>>>> Runtime runtime = Runtime.getRuntime();
>>>>>>>>> runtime.gc();
>>>>>>>>>
>>>>>>>>> But it seems that emf objects created during models
>>>>>>>>> initialization remains in memory and so if user creates another
>>>>>>>>> project then again 100mb is consumed and hence shortly runs out
>>>>>>>>> of memory.
>>>>>>>>>
>>>>>>>>> So just wondering do I have to do something more about clearing?
>>>>>>>>>
>>>>>>>>> Any suggestions to fix it?
>>>>>>>>>
>>>>>>>>> Thanks.
>>>>>>>>> Parvez
>>>>>>>>
>>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>
>>>
>
>
|
|
|
Re: [Teneo] memory consumption keeps building up [message #79038 is a reply to message #78969] |
Tue, 10 April 2007 09:27 ![Go to previous message Go to previous message](theme/Solstice/images/up.png) ![Go to next message Go to next message](theme/Solstice/images/down.png) |
Martin Taal![Friend of Eclipse Friend](/donate/web-api/friends_decorator.php?email=mtaal%40springsite.com) Messages: 5468 Registered: July 2009 |
Senior Member |
|
|
Hi Parvez,
Afaiu the issue is that there is still a reference to the hbdatastore somewhere. The deregister
should solve the references from the statics of Teneo. You can also try to set all references to the
sessionfactory to null before gc-ing. Can you analyse if there are other references to the datastore
instance?
Yes, I have made the computeReferers method protected in cvs. Although overriding the
computereferers method only resolves the symptom.
I aim to do a next release early next week.
gr. Martin
PC wrote:
> Thanks Martin.
>
> Yes, I did add following but didn't help.
>
>
> Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap( ).remove(_dbName);
>
> Resource.Factory.Registry.INSTANCE.getProtocolToFactoryMap() .remove(HIBERNATE);
>
>
> HbHelper.INSTANCE.deRegisterDataStore(_dbName);
> HbHelper.INSTANCE.deRegisterDataStore(HIBERNATE);
>
>
> Earlier you mentioned that
>
> "referers field is only used after initialization to support
> cross-reference queries. If this is not a requirement then it can be
> cleared"
>
> so just wondering (short term/quick solution) if computeReferers()
> returns null or empty hashmap (though I know it is private at the moment
> and can't be overridden) then that should solve the problem, is it?, any
> other issues if you can think of?
>
> At present, I am using 0.7.5, as you were saying fix in next release,
> any idea when that could be?
>
> Thanks.
>
> - Parvez
>
>
>
> Martin Taal wrote:
>> Hi Parvez,
>> I just noticed the closeAll method in the HbHelper does not clear the
>> HbHelper.dataStoreByPersistentClass map. This is at least one reason
>> that the hbdatastore is not gc-ed.
>> I have entered a bugzilla for this. This will be solved in the next
>> release.
>>
>> As a workaround you can try the HbHelper.deRegisterDataStore method.
>> This one should remove the references to the datastore from both
>> internal HbHelper maps.
>>
>> gr. Martin
>>
>> PC wrote:
>>> Hi Martin,
>>>
>>> I don't think that I am keeping the ref to old datastore.
>>> Not sure, but from deep size calculation of referers field, it looks
>>> that it may be keeping ref to some old objects. So in one instance of
>>> HbDataStore's referers field's keySet calculates to that much size.
>>>
>>> - Parvez
>>>
>>> Martin Taal wrote:
>>>> Thanks :-)
>>>>
>>>> The referers field is only used after initialization to support
>>>> cross-reference queries. If this is not a requirement then it can be
>>>> cleared. The only problem on the short term is that it is not
>>>> possible to clear it by subclassing hbdatastore. I will change this
>>>> in cvs so then the build of the referers hashmap can be prevented.
>>>>
>>>> Btw, do you have an idea why there is still a reference to the
>>>> closed hbdatastores, there must be a reference to them otherwise it
>>>> would also be gc-ed.
>>>>
>>>> gr. Martin
>>>>
>>>> PC wrote:
>>>>> oh yes forgot to mention, that your guess was right that it is
>>>>> referers field ;-)
>>>>>
>>>>>
>>>>> PC wrote:
>>>>>> Hi Martin,
>>>>>>
>>>>>> I did some more investigation, and it looks that it is referers ()
>>>>>> field of HbDataStore. By the time I created 6 projects, it went
>>>>>> upto 483mb.
>>>>>>
>>>>>> I am enclosing some profiler snapshots in zip file for your
>>>>>> consideration.
>>>>>>
>>>>>> - Parvez
>>>>>>
>>>>>> Martin Taal wrote:
>>>>>>> Hi Parvez,
>>>>>>> How large is your model? Would the cross reference mapping cause
>>>>>>> the memory use (it is the referers member in the HbDataStore)?
>>>>>>>
>>>>>>> gr. Martin
>>>>>>>
>>>>>>> PC wrote:
>>>>>>>> Hi Martin,
>>>>>>>>
>>>>>>>> yes, if I initialize 5 times then it goes to around 500mb or so.
>>>>>>>> SessionFactory close seems to work as I don't see any error,
>>>>>>>> otherwise I guess I would have seen "session is already closed"
>>>>>>>> or something.
>>>>>>>>
>>>>>>>> As per initialise time it used to take from 15 - 20 secs. But
>>>>>>>> now I have changed to use cacheableFile, so that have reduced to
>>>>>>>> 7 - 10 seconds.
>>>>>>>>
>>>>>>>> Regards,
>>>>>>>> Parvez
>>>>>>>>
>>>>>>>> Martin Taal wrote:
>>>>>>>>> Hi Parvez,
>>>>>>>>> There is an ERuntime.INSTANCE which keeps track of mapping from
>>>>>>>>> the ecore to the java classes. But I can't really imagine that
>>>>>>>>> this one is 100mb large. Also the same epackage can not be
>>>>>>>>> registered twice.
>>>>>>>>>
>>>>>>>>> Internally the hbDataStore keeps a cross reference map which
>>>>>>>>> can take some space (but 100mb seems a lot). This one is not
>>>>>>>>> cleared when doing close() on the datastore or the hbhelper. Is
>>>>>>>>> there still a pointer somewhere to the old datastore?
>>>>>>>>>
>>>>>>>>> Btw, the HbHelper.INSTANCE.closeAll() also closes the
>>>>>>>>> underlying sessionfactory so I am surprised that your
>>>>>>>>> sessionfactoru.close() works.
>>>>>>>>>
>>>>>>>>> So if you create 5 hbdatastores and initialize them then 500Mb
>>>>>>>>> is used?
>>>>>>>>>
>>>>>>>>> gr. Martin
>>>>>>>>>
>>>>>>>>> PC wrote:
>>>>>>>>>> Hi,
>>>>>>>>>>
>>>>>>>>>> Every time user creates a project in our application we
>>>>>>>>>> initialize a new database (embedded HSQLDB) and hence we have
>>>>>>>>>> to initialize HbDataStore.
>>>>>>>>>> I have number of emf models and nearly 100mb is consumed on
>>>>>>>>>> each hbds.initialize();
>>>>>>>>>> Before user can create another project, existing opened(if
>>>>>>>>>> any) project/database is closed and session is cleared.
>>>>>>>>>>
>>>>>>>>>> These are the steps done on close of project:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> session.flush(); //session obtained from teneo
>>>>>>>>>> session.clear();
>>>>>>>>>> //here shutdown statement is issued for the db and then
>>>>>>>>>> session.disconnect();
>>>>>>>>>> session.close();
>>>>>>>>>> HbHelper.INSTANCE.deRegisterDataStore(_dbName); //
>>>>>>>>>> _dbName is session factory name
>>>>>>>>>> HbHelper.INSTANCE.closeAll();
>>>>>>>>>> sessionFactory.close(); //session factory obtained
>>>>>>>>>> from teneo
>>>>>>>>>> Runtime runtime = Runtime.getRuntime();
>>>>>>>>>> runtime.gc();
>>>>>>>>>>
>>>>>>>>>> But it seems that emf objects created during models
>>>>>>>>>> initialization remains in memory and so if user creates
>>>>>>>>>> another project then again 100mb is consumed and hence shortly
>>>>>>>>>> runs out of memory.
>>>>>>>>>>
>>>>>>>>>> So just wondering do I have to do something more about clearing?
>>>>>>>>>>
>>>>>>>>>> Any suggestions to fix it?
>>>>>>>>>>
>>>>>>>>>> Thanks.
>>>>>>>>>> Parvez
>>>>>>>>>
>>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>
>>>>
>>
>>
--
With Regards, Martin Taal
Springsite/Elver.org
Office: Hardwareweg 4, 3821 BV Amersfoort
Postal: Nassaulaan 7, 3941 EC Doorn
The Netherlands
Tel: +31 (0)84 420 2397
Fax: +31 (0)84 225 9307
Mail: mtaal@springsite.com - mtaal@elver.org
Web: www.springsite.com - www.elver.org
|
|
|
Re: [Teneo] memory consumption keeps building up [message #79556 is a reply to message #79038] |
Thu, 12 April 2007 09:45 ![Go to previous message Go to previous message](theme/Solstice/images/up.png) ![Go to next message Go to next message](theme/Solstice/images/down.png) |
Parvez![Friend of Eclipse Friend](/donate/web-api/friends_decorator.php?email=p.chauhan%40pilz.ie) Messages: 181 Registered: July 2009 |
Senior Member |
|
|
Hi Martin,
I think thats because of HbDataStore$ReferenceTo.
2nd Time: 69 instances of
org.eclipse.emf.teneo.hibernate.HbDataStore$ReferenceTo
Deep size 122 MB
3rd Time: 138 instances of
org.eclipse.emf.teneo.hibernate.HbDataStore$ReferenceTo
Deep size 213 MB
Regards,
Parvez
Martin Taal wrote:
> Hi Parvez,
> Afaiu the issue is that there is still a reference to the hbdatastore
> somewhere. The deregister should solve the references from the statics
> of Teneo. You can also try to set all references to the sessionfactory
> to null before gc-ing. Can you analyse if there are other references to
> the datastore instance?
>
> Yes, I have made the computeReferers method protected in cvs. Although
> overriding the computereferers method only resolves the symptom.
> I aim to do a next release early next week.
>
> gr. Martin
>
> PC wrote:
>> Thanks Martin.
>>
>> Yes, I did add following but didn't help.
>>
>>
>> Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap( ).remove(_dbName);
>>
>> Resource.Factory.Registry.INSTANCE.getProtocolToFactoryMap() .remove(HIBERNATE);
>>
>>
>> HbHelper.INSTANCE.deRegisterDataStore(_dbName);
>> HbHelper.INSTANCE.deRegisterDataStore(HIBERNATE);
>>
>>
>> Earlier you mentioned that
>>
>> "referers field is only used after initialization to support
>> cross-reference queries. If this is not a requirement then it can be
>> cleared"
>>
>> so just wondering (short term/quick solution) if computeReferers()
>> returns null or empty hashmap (though I know it is private at the
>> moment and can't be overridden) then that should solve the problem, is
>> it?, any other issues if you can think of?
>>
>> At present, I am using 0.7.5, as you were saying fix in next release,
>> any idea when that could be?
>>
>> Thanks.
>>
>> - Parvez
>>
>>
>>
>> Martin Taal wrote:
>>> Hi Parvez,
>>> I just noticed the closeAll method in the HbHelper does not clear the
>>> HbHelper.dataStoreByPersistentClass map. This is at least one reason
>>> that the hbdatastore is not gc-ed.
>>> I have entered a bugzilla for this. This will be solved in the next
>>> release.
>>>
>>> As a workaround you can try the HbHelper.deRegisterDataStore method.
>>> This one should remove the references to the datastore from both
>>> internal HbHelper maps.
>>>
>>> gr. Martin
>>>
>>> PC wrote:
>>>> Hi Martin,
>>>>
>>>> I don't think that I am keeping the ref to old datastore.
>>>> Not sure, but from deep size calculation of referers field, it looks
>>>> that it may be keeping ref to some old objects. So in one instance
>>>> of HbDataStore's referers field's keySet calculates to that much size.
>>>>
>>>> - Parvez
>>>>
>>>> Martin Taal wrote:
>>>>> Thanks :-)
>>>>>
>>>>> The referers field is only used after initialization to support
>>>>> cross-reference queries. If this is not a requirement then it can
>>>>> be cleared. The only problem on the short term is that it is not
>>>>> possible to clear it by subclassing hbdatastore. I will change this
>>>>> in cvs so then the build of the referers hashmap can be prevented.
>>>>>
>>>>> Btw, do you have an idea why there is still a reference to the
>>>>> closed hbdatastores, there must be a reference to them otherwise it
>>>>> would also be gc-ed.
>>>>>
>>>>> gr. Martin
>>>>>
>>>>> PC wrote:
>>>>>> oh yes forgot to mention, that your guess was right that it is
>>>>>> referers field ;-)
>>>>>>
>>>>>>
>>>>>> PC wrote:
>>>>>>> Hi Martin,
>>>>>>>
>>>>>>> I did some more investigation, and it looks that it is referers
>>>>>>> () field of HbDataStore. By the time I created 6 projects, it
>>>>>>> went upto 483mb.
>>>>>>>
>>>>>>> I am enclosing some profiler snapshots in zip file for your
>>>>>>> consideration.
>>>>>>>
>>>>>>> - Parvez
>>>>>>>
>>>>>>> Martin Taal wrote:
>>>>>>>> Hi Parvez,
>>>>>>>> How large is your model? Would the cross reference mapping cause
>>>>>>>> the memory use (it is the referers member in the HbDataStore)?
>>>>>>>>
>>>>>>>> gr. Martin
>>>>>>>>
>>>>>>>> PC wrote:
>>>>>>>>> Hi Martin,
>>>>>>>>>
>>>>>>>>> yes, if I initialize 5 times then it goes to around 500mb or so.
>>>>>>>>> SessionFactory close seems to work as I don't see any error,
>>>>>>>>> otherwise I guess I would have seen "session is already closed"
>>>>>>>>> or something.
>>>>>>>>>
>>>>>>>>> As per initialise time it used to take from 15 - 20 secs. But
>>>>>>>>> now I have changed to use cacheableFile, so that have reduced
>>>>>>>>> to 7 - 10 seconds.
>>>>>>>>>
>>>>>>>>> Regards,
>>>>>>>>> Parvez
>>>>>>>>>
>>>>>>>>> Martin Taal wrote:
>>>>>>>>>> Hi Parvez,
>>>>>>>>>> There is an ERuntime.INSTANCE which keeps track of mapping
>>>>>>>>>> from the ecore to the java classes. But I can't really imagine
>>>>>>>>>> that this one is 100mb large. Also the same epackage can not
>>>>>>>>>> be registered twice.
>>>>>>>>>>
>>>>>>>>>> Internally the hbDataStore keeps a cross reference map which
>>>>>>>>>> can take some space (but 100mb seems a lot). This one is not
>>>>>>>>>> cleared when doing close() on the datastore or the hbhelper.
>>>>>>>>>> Is there still a pointer somewhere to the old datastore?
>>>>>>>>>>
>>>>>>>>>> Btw, the HbHelper.INSTANCE.closeAll() also closes the
>>>>>>>>>> underlying sessionfactory so I am surprised that your
>>>>>>>>>> sessionfactoru.close() works.
>>>>>>>>>>
>>>>>>>>>> So if you create 5 hbdatastores and initialize them then 500Mb
>>>>>>>>>> is used?
>>>>>>>>>>
>>>>>>>>>> gr. Martin
>>>>>>>>>>
>>>>>>>>>> PC wrote:
>>>>>>>>>>> Hi,
>>>>>>>>>>>
>>>>>>>>>>> Every time user creates a project in our application we
>>>>>>>>>>> initialize a new database (embedded HSQLDB) and hence we have
>>>>>>>>>>> to initialize HbDataStore.
>>>>>>>>>>> I have number of emf models and nearly 100mb is consumed on
>>>>>>>>>>> each hbds.initialize();
>>>>>>>>>>> Before user can create another project, existing opened(if
>>>>>>>>>>> any) project/database is closed and session is cleared.
>>>>>>>>>>>
>>>>>>>>>>> These are the steps done on close of project:
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> session.flush(); //session obtained from teneo
>>>>>>>>>>> session.clear();
>>>>>>>>>>> //here shutdown statement is issued for the db and
>>>>>>>>>>> then
>>>>>>>>>>> session.disconnect();
>>>>>>>>>>> session.close();
>>>>>>>>>>> HbHelper.INSTANCE.deRegisterDataStore(_dbName); //
>>>>>>>>>>> _dbName is session factory name
>>>>>>>>>>> HbHelper.INSTANCE.closeAll();
>>>>>>>>>>> sessionFactory.close(); //session factory obtained
>>>>>>>>>>> from teneo
>>>>>>>>>>> Runtime runtime = Runtime.getRuntime();
>>>>>>>>>>> runtime.gc();
>>>>>>>>>>>
>>>>>>>>>>> But it seems that emf objects created during models
>>>>>>>>>>> initialization remains in memory and so if user creates
>>>>>>>>>>> another project then again 100mb is consumed and hence
>>>>>>>>>>> shortly runs out of memory.
>>>>>>>>>>>
>>>>>>>>>>> So just wondering do I have to do something more about clearing?
>>>>>>>>>>>
>>>>>>>>>>> Any suggestions to fix it?
>>>>>>>>>>>
>>>>>>>>>>> Thanks.
>>>>>>>>>>> Parvez
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>
>>>>>
>>>
>>>
>
>
|
|
|
Re: [Teneo] memory consumption keeps building up [message #79572 is a reply to message #79556] |
Thu, 12 April 2007 09:52 ![Go to previous message Go to previous message](theme/Solstice/images/up.png) ![Go to next message Go to next message](theme/Solstice/images/down.png) |
Martin Taal![Friend of Eclipse Friend](/donate/web-api/friends_decorator.php?email=mtaal%40springsite.com) Messages: 5468 Registered: July 2009 |
Senior Member |
|
|
Hi Parvez,
What I do not understand is why the referenceTo takes has such a large size. This class has two
members a boolean and a string (which is a query). Can you check one of the referenceTo's and see
why the string is so large?
gr. Martin
PC wrote:
> Hi Martin,
>
> I think thats because of HbDataStore$ReferenceTo.
>
> 2nd Time: 69 instances of
> org.eclipse.emf.teneo.hibernate.HbDataStore$ReferenceTo
> Deep size 122 MB
>
>
> 3rd Time: 138 instances of
> org.eclipse.emf.teneo.hibernate.HbDataStore$ReferenceTo
> Deep size 213 MB
>
> Regards,
> Parvez
>
>
> Martin Taal wrote:
>> Hi Parvez,
>> Afaiu the issue is that there is still a reference to the hbdatastore
>> somewhere. The deregister should solve the references from the statics
>> of Teneo. You can also try to set all references to the sessionfactory
>> to null before gc-ing. Can you analyse if there are other references
>> to the datastore instance?
>>
>> Yes, I have made the computeReferers method protected in cvs. Although
>> overriding the computereferers method only resolves the symptom.
>> I aim to do a next release early next week.
>>
>> gr. Martin
>>
>> PC wrote:
>>> Thanks Martin.
>>>
>>> Yes, I did add following but didn't help.
>>>
>>>
>>> Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap( ).remove(_dbName);
>>>
>>> Resource.Factory.Registry.INSTANCE.getProtocolToFactoryMap() .remove(HIBERNATE);
>>>
>>>
>>> HbHelper.INSTANCE.deRegisterDataStore(_dbName);
>>> HbHelper.INSTANCE.deRegisterDataStore(HIBERNATE);
>>>
>>>
>>> Earlier you mentioned that
>>>
>>> "referers field is only used after initialization to support
>>> cross-reference queries. If this is not a requirement then it can be
>>> cleared"
>>>
>>> so just wondering (short term/quick solution) if computeReferers()
>>> returns null or empty hashmap (though I know it is private at the
>>> moment and can't be overridden) then that should solve the problem,
>>> is it?, any other issues if you can think of?
>>>
>>> At present, I am using 0.7.5, as you were saying fix in next release,
>>> any idea when that could be?
>>>
>>> Thanks.
>>>
>>> - Parvez
>>>
>>>
>>>
>>> Martin Taal wrote:
>>>> Hi Parvez,
>>>> I just noticed the closeAll method in the HbHelper does not clear
>>>> the HbHelper.dataStoreByPersistentClass map. This is at least one
>>>> reason that the hbdatastore is not gc-ed.
>>>> I have entered a bugzilla for this. This will be solved in the next
>>>> release.
>>>>
>>>> As a workaround you can try the HbHelper.deRegisterDataStore method.
>>>> This one should remove the references to the datastore from both
>>>> internal HbHelper maps.
>>>>
>>>> gr. Martin
>>>>
>>>> PC wrote:
>>>>> Hi Martin,
>>>>>
>>>>> I don't think that I am keeping the ref to old datastore.
>>>>> Not sure, but from deep size calculation of referers field, it
>>>>> looks that it may be keeping ref to some old objects. So in one
>>>>> instance of HbDataStore's referers field's keySet calculates to
>>>>> that much size.
>>>>>
>>>>> - Parvez
>>>>>
>>>>> Martin Taal wrote:
>>>>>> Thanks :-)
>>>>>>
>>>>>> The referers field is only used after initialization to support
>>>>>> cross-reference queries. If this is not a requirement then it can
>>>>>> be cleared. The only problem on the short term is that it is not
>>>>>> possible to clear it by subclassing hbdatastore. I will change
>>>>>> this in cvs so then the build of the referers hashmap can be
>>>>>> prevented.
>>>>>>
>>>>>> Btw, do you have an idea why there is still a reference to the
>>>>>> closed hbdatastores, there must be a reference to them otherwise
>>>>>> it would also be gc-ed.
>>>>>>
>>>>>> gr. Martin
>>>>>>
>>>>>> PC wrote:
>>>>>>> oh yes forgot to mention, that your guess was right that it is
>>>>>>> referers field ;-)
>>>>>>>
>>>>>>>
>>>>>>> PC wrote:
>>>>>>>> Hi Martin,
>>>>>>>>
>>>>>>>> I did some more investigation, and it looks that it is referers
>>>>>>>> () field of HbDataStore. By the time I created 6 projects, it
>>>>>>>> went upto 483mb.
>>>>>>>>
>>>>>>>> I am enclosing some profiler snapshots in zip file for your
>>>>>>>> consideration.
>>>>>>>>
>>>>>>>> - Parvez
>>>>>>>>
>>>>>>>> Martin Taal wrote:
>>>>>>>>> Hi Parvez,
>>>>>>>>> How large is your model? Would the cross reference mapping
>>>>>>>>> cause the memory use (it is the referers member in the
>>>>>>>>> HbDataStore)?
>>>>>>>>>
>>>>>>>>> gr. Martin
>>>>>>>>>
>>>>>>>>> PC wrote:
>>>>>>>>>> Hi Martin,
>>>>>>>>>>
>>>>>>>>>> yes, if I initialize 5 times then it goes to around 500mb or so.
>>>>>>>>>> SessionFactory close seems to work as I don't see any error,
>>>>>>>>>> otherwise I guess I would have seen "session is already
>>>>>>>>>> closed" or something.
>>>>>>>>>>
>>>>>>>>>> As per initialise time it used to take from 15 - 20 secs. But
>>>>>>>>>> now I have changed to use cacheableFile, so that have reduced
>>>>>>>>>> to 7 - 10 seconds.
>>>>>>>>>>
>>>>>>>>>> Regards,
>>>>>>>>>> Parvez
>>>>>>>>>>
>>>>>>>>>> Martin Taal wrote:
>>>>>>>>>>> Hi Parvez,
>>>>>>>>>>> There is an ERuntime.INSTANCE which keeps track of mapping
>>>>>>>>>>> from the ecore to the java classes. But I can't really
>>>>>>>>>>> imagine that this one is 100mb large. Also the same epackage
>>>>>>>>>>> can not be registered twice.
>>>>>>>>>>>
>>>>>>>>>>> Internally the hbDataStore keeps a cross reference map which
>>>>>>>>>>> can take some space (but 100mb seems a lot). This one is not
>>>>>>>>>>> cleared when doing close() on the datastore or the hbhelper.
>>>>>>>>>>> Is there still a pointer somewhere to the old datastore?
>>>>>>>>>>>
>>>>>>>>>>> Btw, the HbHelper.INSTANCE.closeAll() also closes the
>>>>>>>>>>> underlying sessionfactory so I am surprised that your
>>>>>>>>>>> sessionfactoru.close() works.
>>>>>>>>>>>
>>>>>>>>>>> So if you create 5 hbdatastores and initialize them then
>>>>>>>>>>> 500Mb is used?
>>>>>>>>>>>
>>>>>>>>>>> gr. Martin
>>>>>>>>>>>
>>>>>>>>>>> PC wrote:
>>>>>>>>>>>> Hi,
>>>>>>>>>>>>
>>>>>>>>>>>> Every time user creates a project in our application we
>>>>>>>>>>>> initialize a new database (embedded HSQLDB) and hence we
>>>>>>>>>>>> have to initialize HbDataStore.
>>>>>>>>>>>> I have number of emf models and nearly 100mb is consumed on
>>>>>>>>>>>> each hbds.initialize();
>>>>>>>>>>>> Before user can create another project, existing opened(if
>>>>>>>>>>>> any) project/database is closed and session is cleared.
>>>>>>>>>>>>
>>>>>>>>>>>> These are the steps done on close of project:
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> session.flush(); //session obtained from teneo
>>>>>>>>>>>> session.clear();
>>>>>>>>>>>> //here shutdown statement is issued for the db and
>>>>>>>>>>>> then
>>>>>>>>>>>> session.disconnect();
>>>>>>>>>>>> session.close();
>>>>>>>>>>>> HbHelper.INSTANCE.deRegisterDataStore(_dbName); //
>>>>>>>>>>>> _dbName is session factory name
>>>>>>>>>>>> HbHelper.INSTANCE.closeAll();
>>>>>>>>>>>> sessionFactory.close(); //session factory
>>>>>>>>>>>> obtained from teneo
>>>>>>>>>>>> Runtime runtime = Runtime.getRuntime();
>>>>>>>>>>>> runtime.gc();
>>>>>>>>>>>>
>>>>>>>>>>>> But it seems that emf objects created during models
>>>>>>>>>>>> initialization remains in memory and so if user creates
>>>>>>>>>>>> another project then again 100mb is consumed and hence
>>>>>>>>>>>> shortly runs out of memory.
>>>>>>>>>>>>
>>>>>>>>>>>> So just wondering do I have to do something more about
>>>>>>>>>>>> clearing?
>>>>>>>>>>>>
>>>>>>>>>>>> Any suggestions to fix it?
>>>>>>>>>>>>
>>>>>>>>>>>> Thanks.
>>>>>>>>>>>> Parvez
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>
>>>>>>
>>>>
>>>>
>>
>>
--
With Regards, Martin Taal
Springsite/Elver.org
Office: Hardwareweg 4, 3821 BV Amersfoort
Postal: Nassaulaan 7, 3941 EC Doorn
The Netherlands
Tel: +31 (0)84 420 2397
Fax: +31 (0)84 225 9307
Mail: mtaal@springsite.com - mtaal@elver.org
Web: www.springsite.com - www.elver.org
|
|
| |
Re: [Teneo] memory consumption keeps building up [message #81537 is a reply to message #81475] |
Mon, 30 April 2007 11:03 ![Go to previous message Go to previous message](theme/Solstice/images/up.png) |
Martin Taal![Friend of Eclipse Friend](/donate/web-api/friends_decorator.php?email=mtaal%40springsite.com) Messages: 5468 Registered: July 2009 |
Senior Member |
|
|
Hi Parvez,
After some more thought. The deep size is probably caused by the fact that the ReferenceTo is a
non-static inner-class. The referenceTo object itself only contains two string members.
The latest release gives you access to the refers member so you can clear it after initialization,
but this probably won't help as long as there is a separate reference to the hbdatastore (which you
will remove as I understand).
gr. Martin
PC wrote:
> Hi Martin,
> This was showing as deep size but not the size of referenceTo itself.
> However, we did investigation for couple of days now by using 2
> different profilers. And finally it looks that ref to session is kept
> somewhere in GUI code (eclipse – rcp, listeners, menu items etc.) and we
> had a hard time breaking path so that session could be garbage
> collected. Anyway, we intend to change out strategy so that only so that
> only once db is initialized. It won’t solve this problem but will hide it.
> Thanks for your time and feedback.
> Regards,
> Parvez
>
>
> Martin Taal wrote:
>> Hi Parvez,
>> What I do not understand is why the referenceTo takes has such a large
>> size. This class has two members a boolean and a string (which is a
>> query). Can you check one of the referenceTo's and see why the string
>> is so large?
>>
>> gr. Martin
>>
>> PC wrote:
>>> Hi Martin,
>>>
>>> I think thats because of HbDataStore$ReferenceTo.
>>>
>>> 2nd Time: 69 instances of
>>> org.eclipse.emf.teneo.hibernate.HbDataStore$ReferenceTo
>>> Deep size 122 MB
>>>
>>>
>>> 3rd Time: 138 instances of
>>> org.eclipse.emf.teneo.hibernate.HbDataStore$ReferenceTo
>>> Deep size 213 MB
>>>
>>> Regards,
>>> Parvez
>>>
>>>
>>> Martin Taal wrote:
>>>> Hi Parvez,
>>>> Afaiu the issue is that there is still a reference to the
>>>> hbdatastore somewhere. The deregister should solve the references
>>>> from the statics of Teneo. You can also try to set all references to
>>>> the sessionfactory to null before gc-ing. Can you analyse if there
>>>> are other references to the datastore instance?
>>>>
>>>> Yes, I have made the computeReferers method protected in cvs.
>>>> Although overriding the computereferers method only resolves the
>>>> symptom.
>>>> I aim to do a next release early next week.
>>>>
>>>> gr. Martin
>>>>
>>>> PC wrote:
>>>>> Thanks Martin.
>>>>>
>>>>> Yes, I did add following but didn't help.
>>>>>
>>>>>
>>>>> Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap( ).remove(_dbName);
>>>>>
>>>>> Resource.Factory.Registry.INSTANCE.getProtocolToFactoryMap() .remove(HIBERNATE);
>>>>>
>>>>>
>>>>> HbHelper.INSTANCE.deRegisterDataStore(_dbName);
>>>>> HbHelper.INSTANCE.deRegisterDataStore(HIBERNATE);
>>>>>
>>>>>
>>>>> Earlier you mentioned that
>>>>>
>>>>> "referers field is only used after initialization to support
>>>>> cross-reference queries. If this is not a requirement then it can
>>>>> be cleared"
>>>>>
>>>>> so just wondering (short term/quick solution) if computeReferers()
>>>>> returns null or empty hashmap (though I know it is private at the
>>>>> moment and can't be overridden) then that should solve the problem,
>>>>> is it?, any other issues if you can think of?
>>>>>
>>>>> At present, I am using 0.7.5, as you were saying fix in next
>>>>> release, any idea when that could be?
>>>>>
>>>>> Thanks.
>>>>>
>>>>> - Parvez
>>>>>
>>>>>
>>>>>
>>>>> Martin Taal wrote:
>>>>>> Hi Parvez,
>>>>>> I just noticed the closeAll method in the HbHelper does not clear
>>>>>> the HbHelper.dataStoreByPersistentClass map. This is at least one
>>>>>> reason that the hbdatastore is not gc-ed.
>>>>>> I have entered a bugzilla for this. This will be solved in the
>>>>>> next release.
>>>>>>
>>>>>> As a workaround you can try the HbHelper.deRegisterDataStore
>>>>>> method. This one should remove the references to the datastore
>>>>>> from both internal HbHelper maps.
>>>>>>
>>>>>> gr. Martin
>>>>>>
>>>>>> PC wrote:
>>>>>>> Hi Martin,
>>>>>>>
>>>>>>> I don't think that I am keeping the ref to old datastore.
>>>>>>> Not sure, but from deep size calculation of referers field, it
>>>>>>> looks that it may be keeping ref to some old objects. So in one
>>>>>>> instance of HbDataStore's referers field's keySet calculates to
>>>>>>> that much size.
>>>>>>>
>>>>>>> - Parvez
>>>>>>>
>>>>>>> Martin Taal wrote:
>>>>>>>> Thanks :-)
>>>>>>>>
>>>>>>>> The referers field is only used after initialization to support
>>>>>>>> cross-reference queries. If this is not a requirement then it
>>>>>>>> can be cleared. The only problem on the short term is that it is
>>>>>>>> not possible to clear it by subclassing hbdatastore. I will
>>>>>>>> change this in cvs so then the build of the referers hashmap can
>>>>>>>> be prevented.
>>>>>>>>
>>>>>>>> Btw, do you have an idea why there is still a reference to the
>>>>>>>> closed hbdatastores, there must be a reference to them otherwise
>>>>>>>> it would also be gc-ed.
>>>>>>>>
>>>>>>>> gr. Martin
>>>>>>>>
>>>>>>>> PC wrote:
>>>>>>>>> oh yes forgot to mention, that your guess was right that it is
>>>>>>>>> referers field ;-)
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> PC wrote:
>>>>>>>>>> Hi Martin,
>>>>>>>>>>
>>>>>>>>>> I did some more investigation, and it looks that it is
>>>>>>>>>> referers () field of HbDataStore. By the time I created 6
>>>>>>>>>> projects, it went upto 483mb.
>>>>>>>>>>
>>>>>>>>>> I am enclosing some profiler snapshots in zip file for your
>>>>>>>>>> consideration.
>>>>>>>>>>
>>>>>>>>>> - Parvez
>>>>>>>>>>
>>>>>>>>>> Martin Taal wrote:
>>>>>>>>>>> Hi Parvez,
>>>>>>>>>>> How large is your model? Would the cross reference mapping
>>>>>>>>>>> cause the memory use (it is the referers member in the
>>>>>>>>>>> HbDataStore)?
>>>>>>>>>>>
>>>>>>>>>>> gr. Martin
>>>>>>>>>>>
>>>>>>>>>>> PC wrote:
>>>>>>>>>>>> Hi Martin,
>>>>>>>>>>>>
>>>>>>>>>>>> yes, if I initialize 5 times then it goes to around 500mb or
>>>>>>>>>>>> so.
>>>>>>>>>>>> SessionFactory close seems to work as I don't see any error,
>>>>>>>>>>>> otherwise I guess I would have seen "session is already
>>>>>>>>>>>> closed" or something.
>>>>>>>>>>>>
>>>>>>>>>>>> As per initialise time it used to take from 15 - 20 secs.
>>>>>>>>>>>> But now I have changed to use cacheableFile, so that have
>>>>>>>>>>>> reduced to 7 - 10 seconds.
>>>>>>>>>>>>
>>>>>>>>>>>> Regards,
>>>>>>>>>>>> Parvez
>>>>>>>>>>>>
>>>>>>>>>>>> Martin Taal wrote:
>>>>>>>>>>>>> Hi Parvez,
>>>>>>>>>>>>> There is an ERuntime.INSTANCE which keeps track of mapping
>>>>>>>>>>>>> from the ecore to the java classes. But I can't really
>>>>>>>>>>>>> imagine that this one is 100mb large. Also the same
>>>>>>>>>>>>> epackage can not be registered twice.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Internally the hbDataStore keeps a cross reference map
>>>>>>>>>>>>> which can take some space (but 100mb seems a lot). This one
>>>>>>>>>>>>> is not cleared when doing close() on the datastore or the
>>>>>>>>>>>>> hbhelper. Is there still a pointer somewhere to the old
>>>>>>>>>>>>> datastore?
>>>>>>>>>>>>>
>>>>>>>>>>>>> Btw, the HbHelper.INSTANCE.closeAll() also closes the
>>>>>>>>>>>>> underlying sessionfactory so I am surprised that your
>>>>>>>>>>>>> sessionfactoru.close() works.
>>>>>>>>>>>>>
>>>>>>>>>>>>> So if you create 5 hbdatastores and initialize them then
>>>>>>>>>>>>> 500Mb is used?
>>>>>>>>>>>>>
>>>>>>>>>>>>> gr. Martin
>>>>>>>>>>>>>
>>>>>>>>>>>>> PC wrote:
>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Every time user creates a project in our application we
>>>>>>>>>>>>>> initialize a new database (embedded HSQLDB) and hence we
>>>>>>>>>>>>>> have to initialize HbDataStore.
>>>>>>>>>>>>>> I have number of emf models and nearly 100mb is consumed
>>>>>>>>>>>>>> on each hbds.initialize();
>>>>>>>>>>>>>> Before user can create another project, existing opened(if
>>>>>>>>>>>>>> any) project/database is closed and session is cleared.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> These are the steps done on close of project:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> session.flush(); //session obtained from teneo
>>>>>>>>>>>>>> session.clear();
>>>>>>>>>>>>>> //here shutdown statement is issued for the db
>>>>>>>>>>>>>> and then
>>>>>>>>>>>>>> session.disconnect();
>>>>>>>>>>>>>> session.close();
>>>>>>>>>>>>>> HbHelper.INSTANCE.deRegisterDataStore(_dbName);
>>>>>>>>>>>>>> // _dbName is session factory name
>>>>>>>>>>>>>> HbHelper.INSTANCE.closeAll();
>>>>>>>>>>>>>> sessionFactory.close(); //session factory
>>>>>>>>>>>>>> obtained from teneo
>>>>>>>>>>>>>> Runtime runtime = Runtime.getRuntime();
>>>>>>>>>>>>>> runtime.gc();
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> But it seems that emf objects created during models
>>>>>>>>>>>>>> initialization remains in memory and so if user creates
>>>>>>>>>>>>>> another project then again 100mb is consumed and hence
>>>>>>>>>>>>>> shortly runs out of memory.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> So just wondering do I have to do something more about
>>>>>>>>>>>>>> clearing?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Any suggestions to fix it?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Thanks.
>>>>>>>>>>>>>> Parvez
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>
>>>>>>
>>>>
>>>>
>>
>>
>
--
With Regards, Martin Taal
Springsite/Elver.org
Office: Hardwareweg 4, 3821 BV Amersfoort
Postal: Nassaulaan 7, 3941 EC Doorn
The Netherlands
Tel: +31 (0)84 420 2397
Fax: +31 (0)84 225 9307
Mail: mtaal@springsite.com - mtaal@elver.org
Web: www.springsite.com - www.elver.org
|
|
| |
Re: [Teneo] memory consumption keeps building up [message #604351 is a reply to message #78417] |
Wed, 04 April 2007 16:20 ![Go to previous message Go to previous message](theme/Solstice/images/up.png) |
Parvez![Friend of Eclipse Friend](/donate/web-api/friends_decorator.php?email=p.chauhan%40pilz.ie) Messages: 181 Registered: July 2009 |
Senior Member |
|
|
Hi Martin,
yes, if I initialize 5 times then it goes to around 500mb or so.
SessionFactory close seems to work as I don't see any error, otherwise I
guess I would have seen "session is already closed" or something.
As per initialise time it used to take from 15 - 20 secs. But now I have
changed to use cacheableFile, so that have reduced to 7 - 10 seconds.
Regards,
Parvez
Martin Taal wrote:
> Hi Parvez,
> There is an ERuntime.INSTANCE which keeps track of mapping from the
> ecore to the java classes. But I can't really imagine that this one is
> 100mb large. Also the same epackage can not be registered twice.
>
> Internally the hbDataStore keeps a cross reference map which can take
> some space (but 100mb seems a lot). This one is not cleared when doing
> close() on the datastore or the hbhelper. Is there still a pointer
> somewhere to the old datastore?
>
> Btw, the HbHelper.INSTANCE.closeAll() also closes the underlying
> sessionfactory so I am surprised that your sessionfactoru.close() works.
>
> So if you create 5 hbdatastores and initialize them then 500Mb is used?
>
> gr. Martin
>
> PC wrote:
>> Hi,
>>
>> Every time user creates a project in our application we initialize a
>> new database (embedded HSQLDB) and hence we have to initialize
>> HbDataStore.
>> I have number of emf models and nearly 100mb is consumed on each
>> hbds.initialize();
>> Before user can create another project, existing opened(if any)
>> project/database is closed and session is cleared.
>>
>> These are the steps done on close of project:
>>
>>
>> session.flush(); //session obtained from teneo
>> session.clear();
>> //here shutdown statement is issued for the db and then
>> session.disconnect();
>> session.close();
>> HbHelper.INSTANCE.deRegisterDataStore(_dbName); // _dbName is
>> session factory name
>> HbHelper.INSTANCE.closeAll();
>> sessionFactory.close(); //session factory obtained from teneo
>> Runtime runtime = Runtime.getRuntime();
>> runtime.gc();
>>
>> But it seems that emf objects created during models initialization
>> remains in memory and so if user creates another project then again
>> 100mb is consumed and hence shortly runs out of memory.
>>
>> So just wondering do I have to do something more about clearing?
>>
>> Any suggestions to fix it?
>>
>> Thanks.
>> Parvez
>
>
|
|
|
Re: [Teneo] memory consumption keeps building up [message #604355 is a reply to message #78430] |
Wed, 04 April 2007 16:31 ![Go to previous message Go to previous message](theme/Solstice/images/up.png) |
Martin Taal![Friend of Eclipse Friend](/donate/web-api/friends_decorator.php?email=mtaal%40springsite.com) Messages: 5468 Registered: July 2009 |
Senior Member |
|
|
Hi Parvez,
How large is your model? Would the cross reference mapping cause the memory use (it is the referers
member in the HbDataStore)?
gr. Martin
PC wrote:
> Hi Martin,
>
> yes, if I initialize 5 times then it goes to around 500mb or so.
> SessionFactory close seems to work as I don't see any error, otherwise I
> guess I would have seen "session is already closed" or something.
>
> As per initialise time it used to take from 15 - 20 secs. But now I have
> changed to use cacheableFile, so that have reduced to 7 - 10 seconds.
>
> Regards,
> Parvez
>
> Martin Taal wrote:
>> Hi Parvez,
>> There is an ERuntime.INSTANCE which keeps track of mapping from the
>> ecore to the java classes. But I can't really imagine that this one is
>> 100mb large. Also the same epackage can not be registered twice.
>>
>> Internally the hbDataStore keeps a cross reference map which can take
>> some space (but 100mb seems a lot). This one is not cleared when doing
>> close() on the datastore or the hbhelper. Is there still a pointer
>> somewhere to the old datastore?
>>
>> Btw, the HbHelper.INSTANCE.closeAll() also closes the underlying
>> sessionfactory so I am surprised that your sessionfactoru.close() works.
>>
>> So if you create 5 hbdatastores and initialize them then 500Mb is used?
>>
>> gr. Martin
>>
>> PC wrote:
>>> Hi,
>>>
>>> Every time user creates a project in our application we initialize a
>>> new database (embedded HSQLDB) and hence we have to initialize
>>> HbDataStore.
>>> I have number of emf models and nearly 100mb is consumed on each
>>> hbds.initialize();
>>> Before user can create another project, existing opened(if any)
>>> project/database is closed and session is cleared.
>>>
>>> These are the steps done on close of project:
>>>
>>>
>>> session.flush(); //session obtained from teneo
>>> session.clear();
>>> //here shutdown statement is issued for the db and then
>>> session.disconnect();
>>> session.close();
>>> HbHelper.INSTANCE.deRegisterDataStore(_dbName); // _dbName
>>> is session factory name
>>> HbHelper.INSTANCE.closeAll();
>>> sessionFactory.close(); //session factory obtained from teneo
>>> Runtime runtime = Runtime.getRuntime();
>>> runtime.gc();
>>>
>>> But it seems that emf objects created during models initialization
>>> remains in memory and so if user creates another project then again
>>> 100mb is consumed and hence shortly runs out of memory.
>>>
>>> So just wondering do I have to do something more about clearing?
>>>
>>> Any suggestions to fix it?
>>>
>>> Thanks.
>>> Parvez
>>
>>
--
With Regards, Martin Taal
Springsite/Elver.org
Office: Hardwareweg 4, 3821 BV Amersfoort
Postal: Nassaulaan 7, 3941 EC Doorn
The Netherlands
Tel: +31 (0)84 420 2397
Fax: +31 (0)84 225 9307
Mail: mtaal@springsite.com - mtaal@elver.org
Web: www.springsite.com - www.elver.org
|
|
|
Re: [Teneo] memory consumption keeps building up [message #604380 is a reply to message #78445] |
Thu, 05 April 2007 16:38 ![Go to previous message Go to previous message](theme/Solstice/images/up.png) |
Parvez![Friend of Eclipse Friend](/donate/web-api/friends_decorator.php?email=p.chauhan%40pilz.ie) Messages: 181 Registered: July 2009 |
Senior Member |
|
|
This is a multi-part message in MIME format.
--------------020203090904040504070308
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Hi Martin,
I did some more investigation, and it looks that it is referers () field
of HbDataStore. By the time I created 6 projects, it went upto 483mb.
I am enclosing some profiler snapshots in zip file for your consideration.
- Parvez
Martin Taal wrote:
> Hi Parvez,
> How large is your model? Would the cross reference mapping cause the
> memory use (it is the referers member in the HbDataStore)?
>
> gr. Martin
>
> PC wrote:
>> Hi Martin,
>>
>> yes, if I initialize 5 times then it goes to around 500mb or so.
>> SessionFactory close seems to work as I don't see any error, otherwise
>> I guess I would have seen "session is already closed" or something.
>>
>> As per initialise time it used to take from 15 - 20 secs. But now I
>> have changed to use cacheableFile, so that have reduced to 7 - 10
>> seconds.
>>
>> Regards,
>> Parvez
>>
>> Martin Taal wrote:
>>> Hi Parvez,
>>> There is an ERuntime.INSTANCE which keeps track of mapping from the
>>> ecore to the java classes. But I can't really imagine that this one
>>> is 100mb large. Also the same epackage can not be registered twice.
>>>
>>> Internally the hbDataStore keeps a cross reference map which can take
>>> some space (but 100mb seems a lot). This one is not cleared when
>>> doing close() on the datastore or the hbhelper. Is there still a
>>> pointer somewhere to the old datastore?
>>>
>>> Btw, the HbHelper.INSTANCE.closeAll() also closes the underlying
>>> sessionfactory so I am surprised that your sessionfactoru.close() works.
>>>
>>> So if you create 5 hbdatastores and initialize them then 500Mb is used?
>>>
>>> gr. Martin
>>>
>>> PC wrote:
>>>> Hi,
>>>>
>>>> Every time user creates a project in our application we initialize a
>>>> new database (embedded HSQLDB) and hence we have to initialize
>>>> HbDataStore.
>>>> I have number of emf models and nearly 100mb is consumed on each
>>>> hbds.initialize();
>>>> Before user can create another project, existing opened(if any)
>>>> project/database is closed and session is cleared.
>>>>
>>>> These are the steps done on close of project:
>>>>
>>>>
>>>> session.flush(); //session obtained from teneo
>>>> session.clear();
>>>> //here shutdown statement is issued for the db and then
>>>> session.disconnect();
>>>> session.close();
>>>> HbHelper.INSTANCE.deRegisterDataStore(_dbName); // _dbName
>>>> is session factory name
>>>> HbHelper.INSTANCE.closeAll();
>>>> sessionFactory.close(); //session factory obtained from
>>>> teneo
>>>> Runtime runtime = Runtime.getRuntime();
>>>> runtime.gc();
>>>>
>>>> But it seems that emf objects created during models initialization
>>>> remains in memory and so if user creates another project then again
>>>> 100mb is consumed and hence shortly runs out of memory.
>>>>
>>>> So just wondering do I have to do something more about clearing?
>>>>
>>>> Any suggestions to fix it?
>>>>
>>>> Thanks.
>>>> Parvez
>>>
>>>
>
>
--------------020203090904040504070308
Content-Type: application/x-zip-compressed;
name="datastore.zip"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="datastore.zip"
UEsDBBQAAAAIAAyLhTaqyMiUQEoAAARwAAApAAAAdGVuZW9fcHJvamVjdDZf ZGF0YXN0b3Jl
X3JlZmVyZXJzX21hcC5KUEftvXVUnNuyL/rhrsE9eHB3T9AOGlyDOwSHoIHg DgGCk+Cexhon
uENw18bdgsvNPue9t9c6b6/91r3njrfHPWd9PeYfPX7ds7pqVtX81ZTRT7NP qwC2goy8DAAD
AwO8/fUCnhaAlwAyIiISIgIyEhISCgoyKjoeBjoaGjox7jMsPHISSgpyEjIy Klo2BipqFhoy
Mkb+FywcnDw8PJQMgqICXCJs3Dxcf+sEBgUFBR0NnQgDg4jrOdlzrv/p5+k7 gIMM7MLGwsFQ
A7A4MHA4ME9dACUAwCDA/NsD/F8PDCwcPAIiEjIKKtqvD9RiA7AwcHCw8HAI CPDwv1DfXzgA
j4OA+5xTEvGZqjEStRMe14f4L8g0UuB2fLWxE1puE+dAFFQCQiJiEjp6BsYX TDy8fPwCgkIv
X0nLyMrJK7xR19DU0tbRNTUzt7C0srZxcXVz9/D0eh/0MTgkNCw8IiHxU1Jy yufUtK+5efkF
hUXFJVXVNbV1kPqGxo7Oru6e3r7+gfGJyanpmdm5+bV16Mbm1vbO7t7p2fnF z8ur65vbv+kF
A8DB/N/PP9QL55desPDwcPBIf9MLBtbjbx/AgUd4zomIK6mKZOz0jJrrAzKe VPwXcDsKDbfa
Cb6J8xgqAS3PGt3p31T7N83+nGKB/0ua/T+K/V2veQAdDubX4MHhAOLAzwfl 7jhtzxBW2AWl
1sla/hr+coTCT636zzsQWZm/nvUSwWdhSkB5Lp4AsgXl8uuI3jeBovQY+Kwk epFNn+C4Cw7L
75nU1zwt4LMwZIuvvbUj18kMmcfVevaFVCfMapvqvX3bWnCRMMGt3lHYnAHO Lj3kx4EiGnyQ
dXLdCZWaKl9NqGLq4WpTEnr892CLj0NFFBxdJztcEu1w9AHC4SKgnM78zhJQ +W5x4dAddZNt
Ho6wS0frO+WBRbjZW5VHuh+m9TUQX0dFnWNVimm+RomJ0oznkhnfTL/TCB4a aq6g/HwCDtJj
6bVZf7qULBvNLS/sv8mdLxv7+pHN2CJF2M/EHTwv5phamvMEfHzWheN51GtY M9U6tLID1WgA
FfQU0ETaEtSeXTJz3kjiYuduwbkB7mkp4a7kJGv2PxUdFcGZcUK9bq7xnPrx cURBUYHcBzag
cg9Z8OTbiUpePVLv3csbvgl9anl6aK17saAg1YeYggZx3GtmtWkfjdK95PN5 FsJWwnSZaDN3
dHoPFqI1ubmgGdo7LfYKH45Th8K13K/RSuPrWAeDaNo4x9uBzLIBWPxXcsGW mFrPs+HNnM4i
gIvO9VGM8o1pyy4SlcZQ/3SUllgfbxj2Bpf4GuZnWZ8Fd9Xk1w0QydnI1Qwc FRXFLOfwFwyo
whey8M8D/TRXKXrH68WvtUh67+9nn4C+/ScABWvF//rq8XjpCdA5nHgoKVhB c/s0/QTUJq+P
a8UaTLrBQ0C7h2idzmG5V2MVF26MXABVoMyxCpZKkOaEQwU1BDLJSp+l5+RG 5jRUNooigAtg
KjzrOUpyrn8C0DxNfGEfx56PuQpj8GGIrlK8qlo0oI0WFmvnLkn+GNQED0t0 iz5jLIGAp/rv
zXJxX5MgLVJH30CSLNzqKiEli/fsqxripdpCYEZ2OqnMRAIm9xf97LCLJdCb U/K2S1t5lKDX
mbSfk6P1hrKWPkpJcOVPo6g3muf22ZlVSAihieopTqohgSdZ2RJcPYJzUvXl itr1K7CeawfI
7cgh5ip6yCacTY+IanYfVaw/W5CCIBta9dEKsTkPBijJkpFAD0WwisuD94kf 2/3FcsxjtHlf
VNDGLMtRB5pz9wVKzcrES64KSSlJmZTZUuBOHtXaqlpv+Fu0e1iyoLJvQUBy xgl8nKxVLyKM
ftq95IR3hAuIsIKr4e6AoDiM9zC4WsoNYgyVSJggqcGYw18uitpiYhHvpHik aCbPfAM5ObKg
bJZ3SfQlIisopDo1iq/kjLrEfYmBiTnqNHwcr55ai1Ssb64DNRlVNx/DWxCb y0RffXRpZmFE
PWxn6cIGkLDkTwzBBVbvrBEOzKIGCwxAAqntOqytAzERTWLmzHZDRHHO3/Hh tnIwEya6vg2v
iTIYZi3LTaiCuJ5LkeXq81jlMhDD5BGLBZzOl+lfhyqCW1ogrQ0xYyyHq/Vp 62vTAoEDZ9QY
XT+XiMmgJVBBaDYF3mTBiUX6WtNYwbC1rWN+XsTCZ7kfCuXvMGVQ8aKlopxB Dt+LjpqxL3Wj
Lx7J68Dfqusjpsyqa+LL/H6Y8pN+SMZforydTXfegCSrrylZwRWlGIyt3WGl l8z2PnyJBTvU
S15mQCmMxMU82F8/rO3rP7R12VNA263XifwnzLTL06DKE+ag1PUE5xLwIbzP QjqRAANS1KnO
LUPQzxam9R45QzTB5hnbwaKfLxzQOhwKMiRMk1nku+rPI1kCqsni48b5A2tp Cj0VVkZrVnLn
9BYWyQ9DrI5Y8unEDGUWrIERQeY9OWBRmdjqzDa6gHYhV1FkD8OPGKOkh8+M mN93tUpmw5TU
QOmdtHZ6dxYppLquOb2LRN0dotc6yr3cg2tQiFEb3vn2xGn829E9Pm/ZGF+w iHtf8pXcnAtp
WzpvU1gQ9Sa2NEqwvs9YUayVsLTp7nuscFd2Arql1lRr4cX8jWDLqQo6uU/l EcAMFpqwIAcY
Vfb16n19Dtbrr9UXrNx3zzrnLRK3vVaMayIWhhcgfl1oTcQCI9xRaT9yYCMY /39rWMKnvV0v
fJjXS0XZ1vcm5Ce2qmw/FC3NKrpXDZCxJ5SSsiEbfc7Ibm7G5M62P6X3Zeh6 ZLS3sObFQGzn
GU+pw5He0AuHkub1PAGc8XMfYHw6gPu7WOxrd2XshVGr2+V8S0snh+lzPd0y UjNNeE66dQv4
oBjkHc6gYePFe6aTh57M8llayA/dvVOdTiZZpuwXrBI48Cx5F6qZC9WHEoS8 lGG6fEnrg/5Y
hii4695hhwnSaUgUZpENcDJVxOpkH+pziGkysG2H75+f6r0JZnWjxLNRUy4s DKVrzTSti+Ie
YZ+Hp7GJUTjUN2N3iVF8D7+CwVPsJumecvuJA8PYrQ1M02PCb0rsU0XY3svc RJZhGmXZeWLa
yWnd0749WRCwG12wtqUiRRr0jpIpdxuXQvgtILlNRYJxyq4Qcm89406SVJHD K2zPB9LB5bNa
XkPr2kwawHuuLENrWqiQ2LGCc+FPaDSvM6tnJEs3nXUbSDwG4JQdwiCh+9kP KAmZtnqW3IZ2
DD/TmqiN9FXauz3b10xGcWDf5ET51AHb+43F+BlavRmbnDt8xmnxF09CyZOV MF5RS1B1zLKv
JI1MjEA8TbCKKU6wijonzGezjQBvFUSD0a4WLvl7SetCaZFqqzH92q4noME8 +str8NnrfuYi
O3qpYNaeVTGbBKwwHMaTDS0SpXzm/XCkOYfnMdhVhNEG2QPnadKvkFjeSUGL VxNVry1zbW6X
tiqL9JeGPVwcnRyIaHE+J5ud9aPHlwqqD1R+NoJbSUuUv/a2/bqPbaMpNF1S JW3taIarTC3N
IZWD3G4VSV3HzyHVYKKMRASMTrRyeDpqNt/xRvHP4MrjD9WV4vbSLHlRJZSS NMQTB9C9ikgH
73d7EBAaOUyUV4qNirZl44I2Fun7aRZh5vfnQt7Jmuovp67K1dizXmRyG03b 81Ql5mnG81BJ
0C36yYtU8uCz6cg7S8IJ7hrQBVfOuu7bitcoO228iveawWqV5wvgF/YwjUpc /IEQwfg1APVv
DXpvBG0SR1+Z230CrMAxe/L2Wf51+sgf3c+UaCxU5Nhmlz3XpLg5KZnajNV/ ivKRa06xblvj
466jBagEeEgzDeTGeS4GUNpd7EuQPWSH1b6oBQnSEWTPXc1nTqfjoT1DMbES eQKWedLD3q1Y
On6ihg5Rci6cEzwyZi106Q7nP+QvzL4sbrfG2AtrLnodp3cYHbL2nF7n/SGV IzEVHERqpeNy
ev6rQWQTJJA03GG1yiRLnbu/bSheTmUjm8+QOCJ6GzB272X4uJqi3dDiK3O9 sLjU7c0aetSc
nEYXRWNp+ZnDOPobJXwlVaAkMDp57xq/q+lBYv7pilCL0tKjztzgJLQxAjFC OQP+c0q8OmfP
Tl7/DYY8excryUIXtlUKtRw7+VrEqwQr/pc8XxRkVORbYkeCXG12+H0PmPHB SMHPXafFJmmC
j481t2jso6cf9ZhfSdLA35RMJDFp+VQg2yVMU5/8CHkCDkGlNhJyp4NuqDU2 kDfUTChkJYjw
YdCBXCbyeubA7wHya8c4kut63L7mtkKz/HxXDqd4DfrxSagHg1HOZMzoq1GB iN2mO8vkQbLN
ra38b5aNVrxM1o9cww2lJaRgqV+9iR7uJ21op0WAM/n3Mf0XNJHRLqo9cUKG 8WO3cpDyOPSk
yaBad49Lj4ULZeCm1xahT83rrSwc1fq3C8ewR8EpFlcDoVG5QKhO9itfBc1k QOR4hUeVvJxF
Ej+wlAChuhn/tVaOZ+Ijtvgh0ROwxviL8rocLqvMPRRueGUZKnFuuUCEW6rT ZicvWCn1ztpq
a0pJnwAGMaP5w3GD1B6nejJLuMKcHCzx9F5DvuZTitwCq0fCQPma+rKsveHN 6HCvOHlq4qii
Z3BMqHmpzIkBEkVr19GVbEVmWay8v4qHa5BeZyD8h2mD5sOUIS6c+B4tSwGR qNNpz3SlE82U
3Ey9LiGxpEtS5NwAEF9W1Q3nEWpYzovnknYAIqKN4rPvjZjBJUY2cTq9Yl+8 vHl3m+rDSbTT
jJrD1iTV93v8w85cJIj8xE/rwGuiun2s2XMXL6iHeyqm2T3j+sw0UHcSZFQl BJeSWesR1CTL
BHzsy7odK+jT6XJtsk/il3cvhVzjld3o1iSC3ZMzkOMl6fq6bARRhfi/2hJQ kMaoz/A2Kb6g
rZmrerwUaA/FOFuXuWvjhGYVTkdmo1w7nHvMN4vnKzdqZdzUqdaZ+Tj6yS7b lyZOrlrmA+/O
PSd6uTxjVcdqhhF7HvdlIwYPi3Fg6BPUsejnaJPQbaOCb2hFzMEZWk45RstG /ja+VccK9We8
KG9D74SkHvVto4v53r/m8oD5vh5Z+UvWXd+dZehFaSw1XSCl0AD/GdSoMTK+ IyoD5nuuasuP
ZvLcFZsZecRs062bK7VOmJs8d7SWQFidcCaUdrEaGLA0ngqMND7ZeaetI2t3 F7gTXs5QnvZt
SQSiPO0JQLYVQPs1N9DToXy9HpIsmJME10trR2wg10cVg0yTMfkJ0MKCtrwx BNeDCfj4f+U1
D7NR0Yy4IOHa8RcfII1VxYYCSE7xkuYab5e6Lfe0bkWb65Lf5y9FORsotFmE 7L1C1MH/VNHt
2NxehxMj2eujgoSYFn1hSBVxtn57NKPc3DJpr6d+56ABT+1Doyf/+QvaJoGO OqcjzTbcsLEB
Qwg0q7NLqCeJNjHMJAJlLUJvzuFRy+uT/NbgeYgxEaKYhjssUYqddm3biff1 V3/w0o79OrGH
JH8iLf3hJVYqKaXgd8m49/aXpSRvTx5jbYtfFrSbFurODijuhOAHCqwMyKPx A749UnoTbWSA
V2sKQ7j4Gv7JaHaxEW+Z2q5Hz8/CuEG3y9Qvb9BjPN3UroQTqx7SE881ezsb 3ASegG+tKzxP
wCnXmNjM+d4bw4cvKX0PUK8cL3SRlQaKTfttWjv9yzSzW8zK/J409Ub7o2y7 nbC6sgTpZ7K1
cRgNqFrIEoft5CWK3FJjF8r8dwwK4G/n4C3fhCXqlSiosMQI1/vbNODH1whG 4F/U4Abv5e29
kHrkfopz61eBxSgJngD7CR6oW6rYD71B8YZPmII7WHBZXqNPQETnI+4TcBPj 38H9q5A0euC7
s7xtu4MeUFg+Ch8bbEf52BZcMw0srz+iNRVmLtK1pDEPaGA3tY53bmjogw/j 07bvjU7VKNEN
lmQdC3qL2gliCUrJTpeCdTRBwR8ZO771ULofZFz0vgfWf4IwbN9ci5fp7Glm 0TSdfky9U+eS
9aBljZwSbzT6iYSKF8t8LdlLXC5fcGpHkjOR4Rkw4vMOIjwuuMx+0NODlJZT mDT6oinGGRHj
feHlUewD+CH+odT0ofAJEDOyUhY+OrpLXbry2p1IixYB5fQ7eTikLadNzNG0 TNq6BueoCzhD
BVUKA5U4lwNElLYfn22c/FLdJPLORaURR5auoBxp4TDf3baWDqHmM0wdrL/r F1WZcaW9A/Gq
ZuNfNfDLO5rDq5WTqIfKO4/DVtdlS8U205XoLKPU0aTYhhEXA5nSU6TO94aZ 5kW/mEO7l6lb
kWzhQ8G450YMMRHBUHQ9ggqi/B4MmUZfs16u3G2Q6M88vuQXcC3QZclNrqGG l3EbRYJEbITu
MkudacD5ExA6/cj4OPet/hSztqy3yLERdIdSs1AXaKIT8XjzeSGHVONTVwmH +3na4HWuceWe
83XPiLei85Eg9bfHzpARwY0Pn/gsF8F+B9+ospfvF9kEFgzB/JEi/I6W9l78 YTxFhw4Q3yzL
lijaJiVS22ch7avQfNl1SvzdVrKTjGXajH63wp74elvFCjMtcw3mBBhKDsFR BeD8Ds0fTx46
2F8raqsD5rTNW5BKs1/qIiTQVglvIT3YCdZLftGiTcCCYTwbS6jr6a026Zbp r187tT7xk9vD
at53LnrFLJhIn4Bvt6akikdS4MbZxRD8y+EqPlyWZ88ni5vdMcw/Ll3uiGS2 OibF/kxvfQJI
6w5HSSFOapS411pqEJD79IVtEXtmuRq327PyTmw4GcR3vZg5leKe738gYZ2M +1rs61TVy7ul
1uj4CNpdOduwCjPvIVS9tvCTY65PpOyfeEgbnPw1gXIp43tmvn2cmiw3r2lL GN9ih+im02Mf
hhNw1xH7OSb5fBvqvUolqlQP0vxh77h+8tD6paDTCxc+VinGTAdHygyGSBBg F+hVtmkw9bcs
nuv1MvZAWCpLnePBRcH5Jidg3N4O74cHs3GrdVl+2bJW6n18rXCxAp7XHvR1 XnGIdzxCl78r
z+XoJRLf1/lOVyVwk1Z87bDSTWnpHYu9b8gQq3Inems0q7sLsZvAJatM4uaE yJJq5HIyxUid
p10OMMKJSz0B8d6vn4DY4+uLyEcpytPzK6TblVvrh2OfGfH19FKtSbNxh5q7 zZrmGo22ptoJ
hnrbMOdVvdKuaEhpMm1gyRNAtXg38a3M45Quw4/VCFPEpXxiHi3/cxF2nc73 KD6XLRyyKEJK
N6JLHpjQfLrl9HVVU2O2qsszw8VBL3tfq8Bl5A0u0JY0Vw9cIrNs8DlZcHxV TvFc6LotxtuX
0HCE/ItLfkNX9xNdmbtly28hvM65qbkMzk4dfDpBpq6iwdmRLMf+1duvzsoc XHNLBkVGCA/A
mcHwQXFNQXLOSuLO1yMohDwYzpTYu7be+OVL6aEvWPMPTARXjedf9c8rJL3F 0jAX3YGj7Ajn
SRspfj++p/VO3tER13DPPWTew9w6Unbzxik6glzOPiOVyMG+3rDqX5eB/y0L B51aBjj8KipI
9ZqGlUD2BAuvs5YFDhVQ7nerEhIb+UhJaCAVkkCUs21ky7X0+vDLl3p65bIK Cbs+4hRxlEPv
cnrfVzPIPe6Ea7hEJZPdznhB7ZVWQI0R62crKo11IDW/0bdD9AkyWUQ/GDXV erlcR9+7Ynv6
basT4OjrV7c082P38QoqKFXd5L+yHLqJmSWvPxwVWYVDesTvAT+AN30Leu+4 H3HbruXFxlru
j5seCwcWIMdObf5K7r8mXdmgZp1cH4GGE9/gh+i8eGmuOZsfI1syrJzvSNjZ r7w0mXQMIrJk
FG0Vsp4FQg/ObVVlxfopB32tO+2jvrkEsb3LJ3u2YGr5pfTE0x/UCIlYX9ZL /Td28v7TUEWe
Gfarz1QxLhJkhPdMh74/I5eMhsARpiW7jUm1ZWlRV3qPQxVlCcrUjsRYce51 nFGmaQ0lPoIz
tZTP9iiocHfBo/SF+TYqujdHGmnzfPI01iLNRXQj06guMeqWMTOPOJGUoJV7 IuUnoHtcPOTi
eixzeL4kKlkoahVm/2oHLnZMjOwXQ2Qf/3mXnk6ZqDHFy1xP4+HIfqhaQk2D T3paTRuX6YlE
1o/VaS/fipgNp+xllRbSQ222OOZwJ5kqI4eEFKAk0C8gsG14BQLb0/fcDh+/ 8uAnaNdeUU4k
S6ASIYQy+eXylj8ByN2x+ceP6AxPwPoOXMgppLMN17Pn8vbOPcmSdzqcInvT t0Qe30yvO124
+UsSY4tTZi9RL69pNyUmb7Tj47OVav3Zwnta8bknwOycvGe0+nBly1iJO4Yz 20fL9Ped/6oI
THrHr54AxGe/OI0rTL+2j0B91Snr5tRUZkG+NV+jWxidr+4WnMOQ+vbBXgi/ q/C37lbjgHcC
5IXBZew8o5i6Oivz1popqscrmInEMXPOBzLdIlGBKFf0Of+ha/8OTtNd7ycg COVXZdAIrHz9
Jr5GBL5oeQLaPz4B9waUJ1Hat4ZPwGqH/yNbAP9+yrQIv5d3qY1QZlkc3VhN zeOohwmqviTt
8XkcF40xo8y8s2oemWW6+G+/Fnstw+LL7n9iLP4EEEqQ1cZ+5AVlY9mQsCQ8 JEhPXCyhWqv7
VEviImbJpX7adl4Ekdw383j1MaBNWpFgHEWW2Uwoloz62/pvDKfHE8UplZi6 3NX/sGeMg5lJ
ckjd9P9nP3enDOu3smXvaQjEUtquObKfgMgcjFtmuN+61th/GGC/iO//OWP9 f0lPmqopZ5cd
q6wFfZwkQRP2YqPVPt5i0cADA8TACFL5m9pqSJqnSdNYbblgQcpA5KFu1f22 acN3UDIDDBZg
GecU0C0hbMMcjLF2V+wKLjDgy0X4ua+TWu4Wbqad+jbBQaEBfp2Ds3cZac8a Y+3BW7u1avwo
7ZIU5Elnm25goqNeE804694KA0v1/gnAXvUAjooq+IZFGIr0lvR1bFX1263S j2hDdT20teA3
+1JQOfI2bikV8EXo+832y1+pPQzockxnE6KTWuM8Xm0/DyMi3lgPEGZijo4X YcBMIShmq8W1
Phfrq1jQdXoGEWG+qWfYdIA58GVW/q3FfyA+4H/4557fJv3291b/vcUBxzFt yj/2NdILTaTf
Wj33v5h0/YsskirtzNAFLrzsG+S/dTslSihR2/yjZj817edm2vQL8tYVjkF8 +Ayknzww0/+t
bfWvlG5yvTIgNJJG1wipQ6VJ9zmulYs4mtcEbpOiwce70w1WuRGdXWp7fO97 Yllr877VpdvT
zSkvfWzEIP2mhqO+9E2iREJu7J3Yz/evV86EdJ6AWSH/B2J8ux9IMbO9uGgN Dm7R5HQNjbUN
L8jn3JTZ1bIOe9ZzxWlz4D4kYL4TrIh8NWPv+o11RWs8beqIvYKWmc/IFUKv HXAYHXPXcgml
4d3BU0EitP6bVj/E5kp2Vk73/BY2hvyh0I3elOzVJ0BvJrvhWOPnkl+nZqCo GLlhh7COkkPm
Npwz1o0F0H8Ta/RW9v0xs7jBLy4OFhEt3ltWzrwklXfwKV/wOJBacAmKghK3 52CKbetPTHfM
z9rUvbFvgcQh549M6Wh8zn4LI55p799h8PWXdM2JxycAVU/vAXQncy43RVdT nzVnd5S8Po34
QWGQu6Ij6sgZnfZoaWSVgzNRyjGs0S8lb35l77TfIYWQUJUjAeSZBoPew4eA 3tWnRXk26GVn
xrhYKkHYtsY25r/DbP0E+AdTnqRYtV3g1zwBbR2Vkusg4cg+u3HBxym6xcty FNVWdkZcM7cR
TS6RKtK2TELF9dJr0x4Sy4jWyToGu+kmdPDNyXCwz6HwFw8lBQgpBN0sAJkW lvIaVGN0izrv
v7Ime083z/6AYC9+fFLk9gSQdBZca+6r1wTKZIj+bGkcCKjMtEsEs4eMdNhn EwluuPZ3uXim
XRrhW906xouGZrJYrE97Qtlw1lqoCGXdBG3N7Ng4Y+QXNSRYf2ce8d+oI3Te 7bTbytQ0frTa
5ElTBakPL+e5OdJzaR5ob85/m4tTwIV06naYXXgvVXUnHvJ16tW7ZVsCzeqj GKvAcHoAAYdY
ZB3tNC4K0UsAXQLh+B8qUjbX7MiXk0Z+GVmwoq9tsIdIa7U8+9DIXr3If3TO 3l+bq/n8kqOH
M6Nclr0L5etMHnWPPI9nWWg62bvkRlAnXYeX7NaszL5l2NvMcRFjEOIwYPuH 2pi1nyJbPZKD
m061ayKOQJH1bBTjVuO0ZwxWc0l0cXJQgIzKXSyVilz5WjGHwpsvuuSGmXWq pTkiXnx+K2ho
hUyhinDxFZf9YgnmoiUtLPCP9anQ7O1NWxoJtXet3lW+jHZY79Kfp21MVTeq EaB4zUxKxuKE
8FZpw34DfUbOx3DehqgWDdTU6WiWcgWZni61x2/GHDdOe2HOFUhATydhAS1Q mgfSH3EPCR8D
67KvrlV/lb/ukU+ApJ7y3T1TeWF0vjZK61hl6uaUg+u+TO0rtwar5XdNsp91 /LQ5htbUOUdR
kt90tXKClNH3xrW9Tm2cpH3iv0izO5y8Ot5qxHUi7jLDxfTZqRJzkiD4Iy+u bauuaAM/dj9U
+17G3jwBc0iZV9UTg2e3Pm0uhW28Rh0eMyTZQa7Cd/0ig6XlYsvW2Vakmblq vb+Sg7ICkPvb
H/y3hegm6Scgp7zw4RFfq9uQZdKVkvDaSL5qonUJs/SyTYjxMrzNjaTqgG0n KEF+8T2mYPGf
272zgnX8x4OBJHmdWwQ6GXjBq9kUa9g8wUsaSS75JXSgPmFR2FgDZV5D4m4n 51DUe0/n3myM
Z4nhdahumpdjijI4XaVeEvejF1SzT2rgOKA99lN0DWVHAO+9bMWubm/wT3su DMN2i+aqtGW+
hLd43F9UlLicEne1hY5S14SXRFlqrC9Y6Witg4eST3uCkw4dqJDQoruIzwNl ibdaDCOAU71y
rl71QOl0jQm7vGxXtSabiT1MGr4ZVVgKE+6Qhj4JPHTORQ9AyJ6mi/MJ6JAs 2mvMP4p1vIzU
87aC1rZxPwGlXp8TdJ4Rn0v0YL00DJcGvJg+r427knr7Y1uDlQt2epWTEnYK P3eXRzLVk8br
vI33iE31CAHideJnZU72zX/6MhFOslQeQmWnzJsYJzptSQiSpdE7+Y6U3sPm WELqxiQoXhb3
WoqHOfwMc7Mljkrs64e1faadGYtRgmseRtBna3r2NpCMLLC+AqIwcyHKLls1 AZ1igdVd6IUN
2+hYU2eHSQ0j8zDxld83iMaDGfqlwh9EpOukChL3H7vIhKoE2ejfRzP374Gg pSgNuIj/xk1j
/z7+Brz/J8qsWWYbaw7tKbZSGgdwI0pzPdPla3/RLK9aZu3NiGlaV2sJpnaA KqaL5GA/5NuM
+YR4HS+rzOWtLRpzKQjZ7i1EFm2r0zYU5s2QxQon1Gn1JG89gOcJ+IOg/pKy ThBtv47MA4qn
JYw56aaW5yH9kqaST8NIu9y7LdnI60raeokfAd3Nxk5UPKlIKfYMMIgc1hGb QOcetoQ9mCPl
DE97ZcRICKMxOzhKFSAHLP9WH7zfZeDQRwKKCLvKyjG24eA0qWH3sbB1F65X JyXVcVwd5vsB
n+kGYPNzq65DTUtuUPJ2U+aTulrdr+3p6vyZB84gFsoCMovKODfEjXHvJAHY mX84MG9yTyvS
RbgNFyQ9+BIdf4VJprzqK5UXH5XgmDk+ZbPG3Ret+GB+CeicFLHHChMhXUdb glPLVm4bO6Q4
CDOrre/D6VPhfpEsmpdrBktmf4Dch/iPxfzX87k/lmm8pIhHwVltbSY3uXse 1QRwb0nr+s8T
GJ3fOP7qW+veVszxhpzlCTggF3+MiqizgoVcBqfcP+o9AStTv4iJeA1L2/bZ yuNj5fVUGuN/
ACv9bjULC/VnDfX1+m3dnnVyeX13kIHn6BMkhr8oJ2GES6+rrv5mXZE3bTbp aGmFc8RmSLWs
70yg0WUTGWD4MsNyS5AWJsp4jZS0nH4PLdP3oHBSbY0XxpiHpaqXZQK0aaFu +pEfl9ENWU+Q
6h2hi8zkMa8/FuvUPcdL18aPdcdk6DqEA01WPUQBysiC30f1MQNDoqF9vKR6 OkbKrXfCvskv
3LDYaD8qiqgKsY3y5hFz9zQjAhDWAN0A9sVdCorm5skKNnNI4p3MxEEKylZJ 4EfsDZwQ9H2w
9nY8nv8ivuGMTHXg3taeP97ykoG+7yeecUV4O1wUXWnJTZkgW8K3c0hMXWYa K8i2Wn7PTyoy
Swxn5S1Fu5uducCKVQ7S9ru1sx9pMxCf12+ggtdF/Xo7limbp2vp43R1cyzP Zlw4aZmKKPLD
yFZd+uHSgI6mk7pQX0G9aAvLideQZ/4WN2PIHiMJeYXvjPi3zjfF/QMX3wII YTWirG6Rirrb
BmlntwsWdGnaWn7d9RqLOHiujU7fKd1EzyV8JPTKlTtPdedGN/fa7M6MVR0F G85oMM4Uyduj
BQfOm2ix3bHScrPXW6OtHf1Zj7KLddOZZ2sudUQCq/QFGAZ1NN9gM8KwN0yy +3nmYDxwjb6e
YBP70Vi9OGJXfpAFSg92d/vYpzF7AkpkJhC9XvXohZzERFo7WlrbVi69tHS4 TJC3q5bQXAcZ
E0UvVhEgYXchS+Uc7qDQHlxrdb93jOJpcLyYoJJzoJhX983Li4yK7tMhwlYP 0aQKFNzX+wTT
r3PtIl07laiZruXdIqfPcuzG/D2abdY8GL/LqkRCJxuJtBFWTgUhWvjVD579 psHgphgX17Ul
NtroJG19Red8GQFq+dmgBZsrYlFWPJhuQ09Z6YbaVkiQUWO1oiRDzEk7D/wo WdXgi5ctpFaa
WSqohwIO8t+pxu/FMRqS9UZxmoSWl5fmpfHivNwreRLt47kp1tfo375M0Qev rjnN/5pIffOv
+UbmsYSgXdVsJWkfZ1RXJFkQOggbGPN1RbPd9zQdU44F2+fxMMJ5RNm2RtUD rwzSjhSVlUl8
u85AqA1RxGFU1EwhD3foUEqm04zEyTEJskkhsXiMe/4XpW1JCPsrkjYWkYMx OrgacUEQL3RL
dypwew8HIrO47hjVZG+EWcSxYozvm9e2pPp9AqakiEkLxAjh4XLAfd1pRha+ ty4jHOmd7vEd
5fBc3hPwK22Mtl2Gn/ld3f88u/Jd9ts2FN0Tx2Ah4Q92jWZbvx0rrKoKWZaJ UVGvolKTeecU
v8PsHgFs1S5Rys2wXwy/2js2L7KOpdFd0h3GMcOl71WrYn4Ob1qy8fZtjEss /wcRYbYitgm9
xhCYMjbIJW3WM5wmosHNuFZMQYPZDSiZacvXAJHl0bWU4EPXfW8U3oWFdD0Q qEmPJ20d5tLY
GTnpU8kLC6oMx0XE966lt/5Brr4kLnzR63pLQvKsrOWWHIP2DFlUymx8jlx8 nfarh/OYQhZN
/6/c808T01/gvwjc4HngH6pvC7ld73bdL21SlHlh0ty1z/LCDt6e+DXCkoP8 8+qgKMzc+or3
M2+aI7tIZBI32i9Jo+n1svmduIhpPLUcOAPqUwT7aZ8AD0oOYN4v8wFMdy+0 MX06yqTsZI3R
ZUt2VlJSytn7WUCuXeNdHj0yVd0e9OX46kRNui25u+2LmiZJc4RFro5xoncB pUgyLxPxzDJz
Nj2pcDGlPCe0QeRMW+pg/8MFuQq7JGO3O8pU3hpJM+HRzNja4r6z8834noNK 1Zw9whT74nmj
z7SNExXd1cPwFjwpnLKMb4M/V8B/carfdvAcARDYDwywdYx0K75eN9WH7A/Z 5hzjgWlBpKV8
IOy30a2+c4JLcU5qOta3bgW5iF/4GngPN1QVcZK31rmb5UwYNlVK6s9UgC+y y7QEJrZfvgYI
7IujWblrIilG6qTfcelJ1zZWWX994QoPizGy4FHqZRW0YU7JKLCxJeqi1Jje 0ViXblneW2Jo
o3lsNWGTUozaSUpToWEcaU1V57fDmqWHmuNeo4LgeIjGfnMP+UU1Sh95/K10 /Ec32x4ejE5L
ef7LY4jkk2OSUFK+5FfRStkCg9/gxMw0Ch++mD8B4slPwNVP/57qrScgfnz0 sX3iCdjpK7UI
YP5ND7l3UoOP/qxPwPHeExCt8/WfgUXb3KzN5Y5kzkrYn8dlGctmVwmAOO4V JIqQAMEHvpHR
l+O6I6IWoMOrgo2Wwe56nkQUygfdop714YmorO8weson0x8KdjpBoWruAfo6 iw5eUNbGubfa
vXBE1HPcve49XJymSm2TFdEbhFXzBr32Tqh0h3kY8I4MqeHUyCMbn5i41sDJ zAF9U29kTjdI
osvLKgtXfDNbB/EaQ1NwpeizGDMJLdPG0VOhhnCAXvJ3VgmSWx4h9/BCuo8k OcnTLKyNiiyW
fWEAAR0VrIbEat3WT1M1mzbjKdemSMRJ6AcGxZgdY5ean6RmmlLIfVTFq2lB HSRTK2E+zIU2
KXW4OqNOjmRRZW/s0uP13tu7P0dhgAlzEIQtvn91Srf90Qel2DYZp51uqjIJ zKCmcpSEvQGL
JSO6A4c6swYJZpFO19m70pyYbzmIFG0ZUgUnbHGS1qN+USkJnsVmNMgN0nx+ whdMGHpQ43gt
x5a2ovQryJTtL/umE3rkMZtMYPoXPbw+nGf83Cqy8RObcs2m7CefTi3GoKfE FMt1Kiyq4+oY
FH6RlD7UTkp4VJqVuzniBEbqeoDdVm2uDWGVX62GxBzZTlVbfKDydq/H5cZU t1fh+M5pAcD1
A6S3dnGzCzVaJHd7mPrfkndzNOHgNil0qXqJd7OURTldfjf875LbSESYnYx9 PRjmVwmS5X1M
xdTLae3WAIo39VqLffn6xaTtVOjxRiqnj7lO6/6ImfQDhxcP8sfJtnL51UkV H1WLNeUJNCXw
Iy2335zFSa5iY718/FH1BGQP+t/dtkFlf5dboUjdmYjeaN5NaIoK9/IFoJJB Ms6vtS3NDqpz
970qcm8Hg1mUxmXhn6WYnnLSnGqF+dyFH9f0piiEStcFImjFH31hA1ghpK1X x0SmRNB84L34
H6X1mRcn20aT9y8d1wXdZOJEC5pcrNHVWIxzwqXsow5Wk/qJ+0eLK8b/l0Pm L/C/LVgmx3Kw
MeVabvwzlTp5vL88uMizuUBr3shdy885/sL4CqnUMu/PUQNEHz+CH+PwwT9T 82Lm6UKVMXiM
dpArySJoOqJnrYzFW87Fp6I2CJbAeZ2F1qrKT8AzSTcnF/ZMJxcR8HHSZQms FILqx1dGSbJL
/f20WS7SpzH5ZcsF2QjT0fRf3MyuZKZeIo2nGtJZVeAJEzptU3ASvH7l01SV yRDyE20YpJRg
Ww0/QMeMsNlsIXAE/U79SsaCqYEl5+h54DGSbQTQ9rupJvY38xSvRQRQ/hf6 p9HOxjRGEVOL
8b744oltYnfAciii5gn4e6aa9vn9NtefJgy8ho+2zIdCW6N3r/VuTkUM3Vo6 8uKP4B1kDjoF
kcDlJDEuXAsD06e9tGso0bTOEcMxMG9R4ERPnHas4LK/1ULGWQhmbccNO8ph O/E65gjgZcio
QngAU3KXgFyirVLrR5IfPEtE1u/2lH6gRQpHj4qYQ/RY0IhWTeH16D2PZntk aCd49e6aMl8q
T9IGWrNsQcR8NBN0HVhfqLWqRw2pe3nhBoGvsJtzNRGDoeRykl/3SCALzS0g 5eT9g5FflmpO
Wh5+ru1OQcMqzHQTRbo1mAFIIBnlviy0SnPWlixBsTfpWMgb7/EJC4AxUQPo 1DHRHBw1eSnD
DniU8a79zqUnK3L5UuTw7xs6quJeMsPtEcGNyJIFCpSkLAuCJ2pS2R0OGSAJ pGBL0bIrgh/N
XERdAYRemnwD+I5Js/dLXKS4no7dGOvksmrarLS+fAzh5eyTTHlhlycK+J/q Hp6AFoYjmCj0
bR6YTJc1coLby73LJ8CosbGpcWxzLD9164N88GKDHTVA5vBdoAfoY6BNEw8S 4cx9WfI9ZdQF
sdjc0dSF7OpFEB7HDROMSh5uYWJWC6dBuZd40CNT4mqmkL0J86GelpDvdKGn PXWwSJNVoedV
5lCE3xFHg/iLvp/A7sG9sK3ll0wiz9ZLPRirOqdOjqp38VHoLkjDZ4GF7qsv KbgDX+wsw5wU
BPvnG86t1Gcr1Tc2GK28KmVJQcYZZCpSgS0JVkdFFCKpLr9XObkMTOYnVKaZ W17odCPvkEem
fkGK+giSo6dpWCCGirbDUXatYG/7vlGo+YF7JPCsm+BW+ue+LGHS8ycg+VuR iZFI7GdGyhed
rn3wcT5cJy1ZqRhJyU3e9tXK2a8TzOo/ZHlbm3Fx8W0wcQzNMuGdT56+aeus RPE6H3YsGran
AZnyNsTsYs0ZjonUKzggib+gOl7JuJ2kgDk9Klz/RXQaSmvQSHQV312eWCfq fb1xkCVU69+A
AKfxUWcSmqW//ISgWdTNkTNEuIEN2gIBg+SiuGqqRlCiaMOfhwXVnoGi7KhW V7Ex/NGtbmWD
y4/XIVPLu8fHZq1ZesVfF8frScNmS4AblygP3obfxWgD/GlB2ROAy+oj4ko8 Pm3PaNhPStR8
534nGevyLcU4ihEJraGBzA1W4JFlh0uv1+NSUd7uiPWYjaVCl2fBsy4nVQq4 +7QmT/H2NRS8
HiAs/gcRW0JBcorfFsGTNFnOyl5+uGIde5i8RUNlNXXFKO7l59sUCl/6Nj7Q /a8q/C/wH4Nd
gSMjiloK05Q6CS/sWdJmdUMjB8x986/MPbZfUMpQvntf915hPfeUIB+NJx5N +eCOdIGVT5uE
nmtgooyyWYcf+OD3o+2FzGiyn3HTJtBQtPPesBjhzGC/WmTGiHp0q7MR2SOU 4+unuU2wChEX
2O2783c2Xp6552CIVQXv1SRZgzHrhEQZItKASI1kDPeESNZ7Eyw8Qxtdh+Sr S8LkOFrkbmha
f4WhuwBy/Acef2H+ASThSEai41Dryutw3jXj0kXt2TLnhS65saMs0sCxV0bm Y04kR0lZPOjc
cbnwGdiYbb+jWZS/WdC3GcaD0fsL/dNoqBuPimfPcH48zZvCEa4DYDQV3/oJ +A1nvWnbcK1+
Ar65PgG3XExzOagrv+nB6rf1mqbV70EbwaOau3Svt96zHXLBRL1O4AAaMq44 9btA5EMtm5aH
n62phfory/Kb8/Nd56/v5OcjUEw/9H9HygeMF3TmZnlm1Gy5bPira5CvCNmx HdkE0ZjWeaW/
sz8f4T4nSwC6LU6mA6ZJNAovEz/kz6EJ68CfHhlUouWFRhFqQqJDSZWpipHw KUPu9bOYQjWY
6WJvKb7AO/XaOlfHP2NRyp+TV1uIinDflJTKqRvvdnWkkCyanx+49b2aWzgA g4q8nGiprdfD
x9y9yqn6s3hXORAa7GAngdO1Bz5+QpXrmD1WlaaaxoR+B/NPQj1lZQXc2EQh OGc54k1kZwtl
VkJi8Wvf42dtji+dHPHY4RNfDdL0kryqSoS4P8R/XcVutnRQshn9yFvahn2t pTTFbkdbnbW+
LEisXTDHT113MX8ghasEh73ojCC/no2rcy3bmfJ+896l39a2+r1ETsPiXhAQ J/TtWILwt0xw
Bgapkx1tbjduTscWUrfAc3PRTw8KI96uS35JQ+MglYs+HPhFWVQZ/4vb6cvX E7++6beSt1fX
NufcSZHfYuwILmvygdgnkA8stG1mXZIqSUD5xNdMd56ABUqTO96ruSeg1h/c ugIWya6zH02J
XrY0SnEfbjiOsYJjfnNtv6YotXw5jmG4r1zdCqmFNNbVNoQna0CIPiZSN8Hm MN7IjSA6OyuG
N6OszblJuqctTf77fWPak8/Rsz1GLMEnTgNHvQxEUCKS3m7rFc0fvOQky8d3 iHq+mh7nybQG
EnpSQ02YunLfzcS91O87g364Jhsyt02IYBBG+Sj6mszbpfloySz3KsfTasU9 10Cf4HDQc5Te
CJQDfsCtnViGUF97+uBejfIlq6Z4L+Z8evY8jm8TMOPsg5KhB41Y969iYS0a Gq4seYZcQtUa
m2pbCGNF6z0LIPAyA6VEyo1d2AOSF6O8bq10uyor0UJHnWq1k4iF9gX9ttQy w6SLzz0zqhqk
Pr7Y6Ypy3VWNjSAxa+yw5nuvVOrhcxu8nBX/6lvFLmuS7suUeJlFAarExKDv UCqCmc5bq5my
2ol14YIp1sPhPAg9yGdJwgzXy5k9pQbwHIC3oygsN+09WeiIX+i1fqh0nXa/ vEq+1Bx2IVjg
bYRXUAle7EWXOEeDio7yNIp31Z1iRV0skFN3gFoo7mQJF6bwGT48/jAxuVvE iKwJxONkSFpk
HmOEY5Y34JYZK3Nt8t6ZR2P2PIRa06l1q0oFOn3IwJLU+mvO/Av8E+D28zHX 4ryQLUVNufX4
1cYGMG4PdbJnEp9cV+Vn1BvVd2V4N6ZUmxC3pFHdPY94zyC5cZ/PYp1OeYMu W0f0L2kdUQ97
OAhxtwVps4+gW0B82UW/2hTDVJYrpMX7R7U+M5LJyEB0VlHUas7jMzJLcVZZ 78LdmfmIRcWK
1/avwCOXlFZRHWc9GvFVkm6d1OQlA3kVcsLp7rD/W7c2noD/vjsH/wfsOJQ9 uO+d9XbOZ25l
Ol5G7rDSJS+TB9/346NozAsKUqFjKgJvcHannY2UEfZEUma+LQ6gl0hVlame xgTZSZxnuVxb
/onlibFaULnC8qqhDba+PNn0hlSj+iWuDHq2V4KlhbkdNhHAVcYlJ1DM32Ug Dhq3d/zpuQEB
RUYWfZana1YEQkxJYUNMzJhjb8yb67jwHDRyMFpIyIVfTSR0YKiAbAkIluiT uTdeAWi4cTBM
Oe/0XN6DSx5fTPA4Eno6H79sm4R3h+jxNz+jcqqd6kGBd1OdL2v/33H6Fo5U +0Q2pLbtWt5v
omQo+yTuIeXQz6DL1HLutNpCHSqwLXjZTXny0dP2zvSwbb7aN/tO687ygNIq tv/OYtErdWHL
7abueCFrdr1i/5E3VPGkfLrYGj5awHvf2y0JxkhojsHECCPz44IYh0vfbmLY 1invQSvT2MUK
tTeWkPZwd9lpjz5N53sJtpg95+m+WX1TssT6kgBzyV9TXFxLlH3pEqhwlm7R vdF7sXtTlnyg
aiA9MBy5kwx3IwrTBurJL1t/0pxF0nbKengUNx1uS948vsD+CbtYRlNuKpKt PboraJFk7JS+
tnh3PspJmofEN/YT2Yq+dbWhjB7DOxfSnA8qCCZn5HniRLNTKWU+KuPlMrXW JqetX8wd3d+e
00Yny69Gz8X1VHmVIP1yVm6m4oVOn8F6GLoThlAHw729fb3GbPX6lrpWoURl 5CS6D+5dGhrw
2sC39peZvYJQxMRVZcxdoaWCb41LU92bLYdLlzfbobgg54gEAtQIzo/wMFG4 72OYa8H1yUcj
gltVWQMyI28zvri20yREDY4aouzvd5tfl3a/dwy6qK/8SfNcvgJ3nlYxpzk6 A2NEAw8gSrYA
AK9dCbLL4F9yrh3smXyZ9RoDfcWWDkU6RdgcqKyjegThnhMtKjPif3t/8Yst /Dbo6geVI275
8m5dSRyyi40MVhb1F+iaKX6ZDV+n3YUxKrqsjFjnA1KFZ8ntn2IRjHBN/2R7 hsWPxQoyT1dX
1ehQjZnO28V36CZaFMMYFbPbkFG3FGFK+hkX6XNQMZX5ddD6pOaY9Qwf2qUo ta/U1oi9xeXw
ERWFwn05SVfnkA7pc713d7Ht7d+Rcn9biPw+D7xLMSKoISfp6FpakS1VdjG7 enTPCnck/iio
Gpz11mMD/6yTe5N0k5xpO6TZzWmdktRWyKAlZZ4n0rNsq7YlWMpePufchdED 3eW7QXHvqWk5
4PYE/Nmy5i/wvxZoi4smLMhrwKztayGXX1Nla2xDwf4i6TJlKWklI8+XyLd9 b26XObn61AxH
gSVbqZXgcnxhDuR/V0lnkUTNWL+yRZaaq//xO2s/gAsw967ZY1DJGemkyR1+ 1XY9mZB+DIg4
7fsqwrgUEvLsboX7QXtE0n6B5LWQexLeE3DKQ6hFyHUzQ8g9SHFjZJNDS6VB 9Er6Rt13MSNB
vm9KxCTBWhd93iMbPa1tju0rW4T79xlNcCOEAV1zA5N7JU6iPBZlRd/GD+PH 8THtOVtFzZ1X
gW+Og3s0iAwTUV6UEfYJ+IvB/idAOMw9q5zT6HQQtUyhcob5LEw2F9PEbz1J 59y/b9fyCXi7
+wRcmGlUS+C3/b2Dsd+l4rKx34GTLkvWV3xn36/AH+NROWOgpoCMgDlV8RU8 znzFlKieWqjM
3247BsfnVEES1qWjYLtVQdhcEiNIRTno3rbCwohpe4oWijKX7h8o1jfXMTZ7 n5vryxTVI2wI
9viZJkgQ9VDggBvHHXIaZpYHfKXZnqkQPJMaZHEe5mnVNJcReOlEHaoSXJ2A BOPOE21hoKec
cqjWwza+TmjrZMlbLRW1X4PDgQl9/j3RJmT+XU4g08cVHNcHdvnatilowhIb G9tXY9rkUx5Y
4ig7VOLwuArxzeSz2T7VBs0AniPXWCxDQ5tfTr3Q/5BrfQn6eK4hKYXsjNyJ 6DZb5tIXIX6E
Wmmbq9Pu5uImHuHoUFEhNkBiTR/IhwJfTp1zlitZG/nNLijJhItZBgtXZ9Hw pUX86GUx23at
lUL0qZdEIk2FMzh+M27pfqfREd+ok4JjQkTjMh8sbFE7ax47GmLHvG29hNbo rFG/VG9KC0hS
Ec/4Efw4LmR2Khu6tU5edzxYEXqOeTOu/ukIbet+2afw+EQvCgDABKH5FWDr Uv39akMjPbuu
ahDq8SwEtSmQOiZFSQDuqLBVp/J6mpy/A6Kbn4fLs3ZcfjitjuCzb5YZ7sPn /szuun2UpkCJ
Jr1rpuq6VHbCJ/xAZNeUn6C6l/hdLMYu0ChcPKhHY+wU5ay0XgIjOh1t6V0o WTC6nj7zTU+6
ph5ineNYW8AHThqyUBzBJCplL2rfCvnhau03Bz/fNW6dYujly3/IGBeS7pHm nCPnQUwrYMmE
ZgZT614ZzluurDRpGvEiZ+LAJ2frFqqYdsY1Jxz0eQkeNYCZMO7w+XVPT1mL 6XpIkg1vKYgw
+icas3c1UiqtXZUyvMNQCG/isIoI5CZVQ2mZdMvgO7lBdHdLfsY7xTK0OULB LI8w4Y3EPmkN
aCHg+nOr+l66wGqZrro2cF8Fu9/aA/+w5uT1h7U07qS3RPiicp2wgrsZONWm TqxLGS7D5qKf
ojPaBaV2A2XpiFOymp/NzERsPNJ4xhx3aj6S1UNaY0bQot3n58/kYe3vhJHY UIyDifSPVqPc
8GAETh7T2SC5+4SPNI1tzeOG7hCvDYjKqz6cpI9ORVQw8T82MhI4EP3+FBvq gvjjXYBYhZVa
0qZvBX4KmuvBCERg1bwKon833lcSnxHdNFDtQKRPEuWjfzI6y3q8uNRp7VIA KpLk6QOX9fAz
Xu7ohOx2YjVyCWG/k8xBrrynM7c8+brd/h7h8OPdV88vvroa5qQbbEMKWM1N n4vhQlC9Nbvr
Io0Ldt47xOdeR9izTXewM/qmHOQNT2z5nn5bVJJnQgThuix8mhR7AUKKpFRo bqo5GcJytGUt
vOxJ5al8Z2EwpF0WBoanfd5Phe+YHoi4fc/qiPEEdKg+BDX6C9+9vOMfGfL2 G4tt2jw+dz+6
4T+Ya2oVzEEuE0FZW8LbHbdKW5pOdTI3m6b2tAyRSaZPHH7eVbSfuZnORHiM MwHYaO+8N8xc
F/zZxzvXOuWBp7pCA0IB9YSj0tTPJdlR3lioepK5DVFi+OgUXQ92EMzX5Rf6 Jlvz+12KfiV2
oqns46+OQgCO4BJ7pN3/WkX/C/07+lZvV/dVmk8k6+N0Y1Nt2yevPtRB5CCb GAGjC9c+kbPF
GM5JLQzjisECfzsb3ejDi2kCLc1k7Nl2hxjC4ZAZTNjCz8Otpj3Q9jX5bkAu C2dM05Zr/mEy
+RKFzF2znIeUFSr/JVVVTuKA25Fkcy4GZpuB94c1c4HVPG9MiqMvqaS5I3mz PW2JdgmjihIH
94cdZmqjMF1eSBjVGNurOEPhTrxw2h8OIdZSn6JyEr0pMxF3pn443M1qMscW +Egp8nc0Guav
w7iz85rdveYY5c1Aqzaz66G3xvHJ0UfQMmUXCYSh+md1z7b4mvFOwcDtA+7B rE4ey4w9UQwD
N60yaqkgHAu9YT1KoH4Ok64we5i7UGVcmlKqb7E+aNsxZFzP8qy5ktnd7Pyj fdcpZXx6MRI8
NiDk/wdLLGVy97YFo+gzdT8MhvMWFh6+bqupq+KhGj8LGBiiYxg0E2fiX4Er esvxE4v05ToW
4nXglcRk4cTxhbdsEzUxqwMXvDMe+oB5rDXjHBBK6g3LBbPwx5XVf6OzWRxH BRFYRHM1VbQ2
rjc9BgHE59Tlv92Q583mv49J9r/EzH4CZKT1eP6ngkKrzZf5zUSFHTsb60Zt Y/haqsgqPw0s
kRlZVOB7zWhZgdTyTT0vmhjnjzJnz900e+GLqOKz5oh/4sGM/ondrx6Ok+jo 6UQ3hJHWyzd7
L96lBXxLI9AxTbbOP6tm4uwgDccT+siaESeAVpy3vE+YYCNfpD+7pLtg0O6I fllXCXjBBbHB
JEgM5JWYYb8si5AdTFT7s7fESTyEZEMr2XmZI1PtNx7Hau7oOrxKcr7AC8Ib BwkdaApuSFNe
IWjVjpWtNjY0ZnfzQ7S0KM0xeBIlSeEDNeNVvFRz5rtn+SQHwMT4uUjhLEfs z6vltu/UU1zm
a+hkrptz5ONnBLX7zvocHl0N+CMq12KJrLOY7tRmM6t1D7h6tzv58M9rjoKX BJkWHRY5EwCq
OPT9NjQrj4mk+mkLX55BJ/5Lx0zsUJ9dJgUPhHM/R7E3V9esPQCgHflyfEa7 ZqrCba6SvbzO
RCc/2ONAL9igHUcWVEgGc/VmhWXm3hYzfU2vXG0cheTd1fTlPhNsq1uVUlcr qTBKnc/b7fgJ
Bpzhdds5H43c3dZXlxSu4PRIHWhUvWzIRYAB+eRmefy3+h5BBicNIGtfprpl ImfC8lRxf5b1
67y+Xs0P/vkJUu2BLW76bSR0jZTJt+cvrYR42uwC7U2seQYrRVrTLz/JvVRs GhZUoRWOSiDj
TkKoAuabHFZW9rSEhtJk4lnzay4vT5eUnTzgXjeZWePjqBqgCIb3m3QSqcA5 0JmK0YNA7eZu
8OdeuJ3WXkUvSfJwFvue2dixmd1EgaEwAeeIeiFUsA//hOFV3St/taJghXyD TLFBrVgqTVu0
p+UGBvqQZ9c+ICCbIEPFagesKHGnB6Ui/LH1HwqOoH0clamOjkl3GGVV5OMi 1o9Vzk6ZK+Jw
NpktiPnQPHs49cka4RfHxjUTyzuGVSXfYy/9RfGnMs0ENaPuS/yuieH5AGb2 wAsBk/FgSBj7
23S5ZIsJS0JOuUuwXJMuwjlOkAwisEwcAmB8iKhcd0RduE4478Q22tMkCQ5J d7/SSlz+3DrB
hqjGixzITSyAWU+M2tJja35vaDypmHdrcLYsj4eIIWwm5iKcHij7mZ7zYdDd B7cebSo1MGyh
d1rB0nyClyFwfOWQ8Lwo0j4hnC66M4h+i/EHKJtFzP2+qYoLyHr+i4quf0yb eXNKPmHt0mzP
lpagV6aEk1R3dHb/A0VFiYxCCflrZ+etQ2KJocFuFk1jdeDlxYr+HG3yMV5C 3dI2O6kABiSO
yJSBqKKuwR/H80r2pC6XLquMIcghm+7ChUM6xjcUkWjus0N6nDtml8swIN5J Iha/Jow0UfNg
sKKMOexoyzPGtYDo7lzU/jI++ZHP9Pt2hcdvStSZF+X3r8eahZK5bOpm3Ivd HDE6WSphB2H7
Ft6dEIuMa13X0ZgiVWBy3dNAbxxEZH2/7J0pO7m5rWMoDCq7hsNKYzTSHJpw vOdsb2doyMF8
Av4wudkGJEItQ569rmrBNqKsnQd5PndBV4qnjaYU3tCwsJDpeG4h/F6zu7Ir +pnqKRkJ/efq
5UVFvGeOMhFUuOrneMFJYys4ayPddnCjIipIyn+d8PxvhDZgiCues7GvtdaD DYT2jiZUI7Qr
OYUGUfVgSGXewHjoJcjZrULhio7+5PoaC192ob+dvD9mA2+zy0Diou5LJ5Je kZKSkiGnLUxc
Dg39FyiByKyN9T8u6nkO6ed7DdIG7Nl+6Eh6oH+rCSGjYmofi9voJmawEjRE hg9CLIbiJSr8
sJhovjabeux3w3F9U4fYWBs91SBgAqFyyroPRLDzVLqFvjlxCPX3Ykh1cytc GOY+hHOpsdFe
fcclvyuB1wZ2lTT3tWmMXD9aJ63krAhqVuuKZ3Eom2ORDOS7uTLbdpfsljcv 3J1OiyL5OL8x
A4mX5pHRSw8bOX0elp0kVQLtl4ANpvSM0wmvCIkAoGX3rF/mtMn5WC0cD/rt Cab3+gvC8n9g
I/ML2y+Xb37Fiv/kkwNN/PxzWGjPEXVv3j4LQlHsVazXkqtYYpjHjG4X06AR wpoXOHeXU+dl
x/RhfuzPL0j9VwaJPN5II0XZzevg8gr5QNm+o9/Ea2b/jsSPpj/KgsTvkJSf gFzq8rT/3KHt
ulil8RqQgdj8TzptXZZ+2pJxhYV2L7Io89nN1KYE+X39kz/J3ZbHJMh+jsSv 7Q8OK6xv6XmJ
19iL9b/LsililMSUJHo70oQf44Uj+9CucehqK8BW4VB4qng4NdU791KR9odM O1VSnjqFuhUf
2B0jzrlMRtqNRwWJ3GPNHvPWGUIyNFqQ6kD/OHz+Ffs4k05eabXVcXh7wO8J QKj/DqDhWL3X
3SdIqx1p4t38WTcE4vlW8RD5rrSemnHXFRogtue9Xfw1QLBw/EC6JafuFH+q fLOlUY/3Vhlt
1IkkBr7VpKphRM9JP3A4EI6DMxML5N0u0ngwLnPW6eICB0IGlYYFwqf2SbSH JuF04L/85lPP
gvVGGnDSFMMZcy0yJrFoc7N0wmWxdU2UON4Me/uxgJyYQ7rmtdLiphIyfET9 LWbUoRvhZVdH
xyUN/mGkfm7+tAn2kRcRsYedOrEW8TzKBlhUEQ+mX37tgc82uCWly0O5+Osr 8Aoxa1eYKfda
YNh9lcLiQCiTDMc7IocvPrw5rCGl1g95GzbJMiN7L0W8012GjqmgMHMVtKY9 Y99RgW63/3CZ
kHf0OrezleTU/9LxsqbuzN9yqXzS02rk3i0aAvd5IXqAMzN3vDGNES7wlPCD iPA6c7ShDm9T
Kc80LsIkdW0WefVn5aPZYxkmWbhNKjL0mAbC71nkIfd7fGlLU3/7A4VMBeGi 7eA0/nqJhBxN
qWBk1Sl5ov3ppnlGuNGabMDTX9JAtMYfe3nOQEdX3oxNzdvDy9jr9YK2iF2z oABTznmgon7L
SUhwyXWQ4rSbovGxA892hNyrbAvlLA73hF2SPpl1I4fDptilXvy/ksN/aXAa oTUpT76wr2rl
0La0Se9GNiOg7FsYXxE0+AmQfR00ytoHJZfGg+lm+OiqkTZU1+ZG1xIoS55U qog46DluZaGu
hi2MvtDT4G4a4NU/7EqisJvGF22av7Ai80NHr9eRVJ4pmSkC71kU+up71Km/ bnr9J0HOgt8f
jgH/h/f/sr9z+LNN/GnufwBQSwMEFAAAAAgAO4WFNsr14qQLIAEAXfoBABoA AAB0ZW5lb19w
cm9qZWN0Nl9jbGFzc2VzLkpQR+z9BVRezdIuik7c3d1e3N09WAga3F2CuweC u/MSHIKF4O4k
uDvBXYNrkGCXb+199v7WHntl/fvece445/8zGXOMdzBndXd1VXfXU7Oq+3n+ eR1Afy0tJw1A
QEAARi9/wPMSIAnAw8LCwcLAw8HBISDAIyJjoyAjISETYGKhYZMQkpGSEBIT k4NYaMkpmaiI
iel46ZnY2Lm4uMho+YX5OIRYOLk4/ioEAgEBARkJGR8FBZ+DgpiC4//4ev4G YMBDrEOdQ0FQ
ApAYEFAYEM89ABkAQMBA/OMC/vsFAQkFDQMLB4+AiPTyQj06AAkBBQUJDQUD Aw398tTv5TkA
jQGDScEuDoulYgxH6YTN8SEhD55KoroTR3XyDMRp4hyIgIiLh09ASE1DS0fP wMXNw8vHLyD5
SkpaRlbu9Vs1dQ1NLW0dUzNzC0sr63curm7uHp5e3kHBIaFh4RGRiUnJKeDU j2npn/ILCouK
P5d8qamtq29obGpu6eru6e3rHxgcmpqe+T47N7+wuLG5tb2zu/dj/+D84vLq 5/XN7d2vv/iC
AKAg/q/rf8sXxgtfkNDQUNBwf/EFAenx1wsY0DAU7LCY4ipwxk5YlBwf4LEl EvKqOxGoOFXP
cEycJxFxQVwb1Od/sfYPzv5jjAX+f8XZ/2Dsf/K1CCBDQbwIDwoDEAWuUbBe TRVOuO6Dppmy
Zeoj0tJX5EzUzJIivz4G5T8DEzTdzwBE0gPdhP+2/rTo4RTrI6CJl2d4m9Sf jdVyjppVPlhI
FNakT7OKnzevog3mabqkSmgEw7n39QHf4LggFv2NfjwDVwhVz8A3s2cAUbTK 1f8X9Lz/Ood/
iOmtTc9NelF72Q/CmEwMQ6tJ7cdPPl7yMlxJUu0N9MCXQHgCUMK+XnbCucvb c6AmTObMNTU1
1dv0HRLkAXuuciMzBPLYF/bglYSkRFh2MEAa8c8tfuqcfAZ+YBk/AwGDTziD +2sYLKeVPy38
UQdRowoMVnXWDkKPCUy0sByd8InmG92goqNxt5E9n7iW+GLFi3VkU3k0U8GT ugfWTD/Io4dK
HSObglsgpQkGhDA6v8F9+g1bzk4P4h3yrMgHHr+g3Rftvzo52CHonnJ4rppR y8tUsYzEtl7W
BaoRfxYhvg3q8T7uD5/TlpcOHNZqrovZymDG7foYThchSQ79dBbf3zIBp/07 psL8Nw/3zmHz
P916SMeptU4dz9qsCVweDcVuuapQ0C1lJWNlYzuBB79tX50SrnpGbZrHzIVB 36T7nYa23R6z
2Cu0sQ+wRNYOsM0b1xWpayXFbQwDaLL/VAX2/8Lo5Vc8zwObZyCUEFziYOlh ZVsh0v+l36GE
yKZUMBjMTY8dRVQa3cgcj5ijKlZd8WA67Rq1om4cOLU5/bpJ3iaH49GkBayw YYaum0IjlkZg
QYeAEig2CnjkzAuIPkLaip4RiHbFHZGQPX3gIbtFztnQ+uUfxcKd5fy09Hqq Y7rIes6k7+C8
AtphL+5nIF/4XQpH68eavay8M4jhW5dNNIzDRlIqfXNmQiRmk90p3ljbOl1E E/JP1MgBWPdd
kqSHYiSW16hxz4BYBtoDrNJZ/j2czDOQqxD2BEV7q8nqc45BcV54E8Z8XPZm VkTMyaOEuW2O
lW4Zc5WjQHZ+UcRCKS1ggIzb/PAr/tUK5Y26llFdU91UBebi3shXrYrCJE9t aNwduXgaae1I
SEmjeE4xkr1/XRvtxhq6Z+wzsOkfxRVVUOfHquRjTHg3b4WzaQHjhGvGIsZE EDoW0Pg+qWux
d7d9Y1hB8RmQy5FryXh/T3/ZwSRIN6auRA414ZaLRPYvuk4Hp/v2GdCac1WQ 6TotNuxEiblu
tDZ1QlsIkj3YafTdCUcUg4KQtMxa+Qz1+bci33swfwYQLK/7Ih4/XJ8eja89 A9aPQUfZHiuG
jA6LIobtrXzHOe+4cP0xfzjpa3m26knL6dNiLi2CzgZ4QkPV2Iy14YVMRdn5 jRsBErh/3SNJ
xTFtSnghu9/LfiL8RPJz0I2TndjJxkdO6E996whopaSlaTE5QyOqmSVkXqfj RdgdnXALKli+
nVV9WqCKXzg4W0LwbeDTDNZloUYewULUOoVwRAACXP+VYullZ1QeXvrq2ZE+ 5jdOb0/EXLkj
ftGhveyCvEA+8WseeFtnCeW+clxdevvJxgFz0dNFtupFWhrpK5XU2ifIGOL2 qCtH9/iJhog4
atkF66hi3H+fAf4ukrax037exfHoB7zHNJhlTcot1ZoZ1ySXapgRFRoNGTLG T7grbbB82/QO
4EZuUQID/VvLXo1uxXuWyk+95DN2WzPIFnQ6tK7pCD0KzWliDIglcPx9sGKC aH9jRebvfVrJ
axil4W0QZWlnG6+np/0j3mAlS1MdfWBkorRAthdJiZN+kEJiOzpeF6qg+vzS Zu7QYWOFVH47
dAhpaTZ9w8hKwwwNWxaeYodOrk8dFmDh/AYn97sJqHvhtl+//rwxNkk1EsFV AZHOXqhph9SM
/Q6NdkCoepfzGDrUHNETJsTek7VPYXPJLVO86Itwi6JUbFGjgr0WJFWaO0XM r3Wge9s34UMT
lMvfFULln+plHDt98FwlOb9utwULgD9dHHgbZFfx5HboEOS5j7DXBITtbON2 YyIwRh5yjWOv
ym/R+7KWWsfrrKEIvcMYtHa3p7J66CaArrOStCQGxKEv2Adg+/+lKmqQlhpv ylX+zGgWeksa
VdBrH9pbvhlyjR5tlrg1Fn1GhI84xFPJJzQnWuQZ1LNKMcmlhG64rP8jXX80 4ZJ8qoxw90A+
cZvxyIq6B5Z7uTgoFQCvT8B5/a4b485utGd8xddbSeRVPakT9Vf1znFgPTsp DF6pavCjiphp
GBULo6o7nrZZ+1Xe4vUQ9iUVD6LGXTP2Vs9MHdoeTfY8Ax0XZ4g0P83hnHxD qAHQZzjr39XX
GRfOvHEK+SNpnCbDxZ2LjrWIMLaiSsn5jXaPTf2qDLUudWCgbKdpq12UQ+Ts IrjxGkVkagLC
wZpP/lGKuYIFpQsBl4+KvCwW+3OnG9FH5A+Xyr+vb3jfEANL61zqJMHGzgR3 WjnxWy9LQYkX
hRjvAHjHcTKoae+9ez46ApGifnGfMM+9WpW8FjP19OlP7unyBYe5Y0t3sbTy hh1KFnaw0Tz5
8TYkxOrv1t8n5NvwbE4wb31DtbyX71Q1TUGlFyIjDhoXkXQvH5lbDsx0IILx sjKs/7/WgBBs
iJzfMZQnBVg+A/+6DVYqYgTPwL+ambH/1P2n7j91/6n7f1+3gXbBrU5/TwfN Oe0SdVPc0U1M
7aA5wfJp5jbZSWSTlGDDNcYP/39l1/Q/MKxgPb2vR7u/zXmQIjsrdVW6+zUj errpf459Z/yw
FvDO9V82XM9vrfsrqlaudaUbuu7JpxZch9wFNawuERyO4PRD9UZkR1KNOIdN icz3fF/UNr9P
P0Du+f+OkW+3Od90NKI2lsqlFzfPd6IsJqlK3qaq7yEKEp4KCT4DlGNJz4CB 4wsFZJGynD4b
yT8XVo7IyJ72C+0hqsXy0Vvqpf8Qd+c6dcCphQcCSmHcP66ORX7uxoNmYxgX uZoHGs3A7IQs
zqV169vbe7FJ4s9AgsebZ6BS9usVhA42RO/8Lem99Ozp6VUl+kC+SmN94Pmp Xcek4xt4U0xQ
RopkCj/1ZN+Jo/iS2gPW2fAT+rFq38294XGO+VTBtLtfxvBKy07xWtYe/koj 6cL4uytEOqjU
SSE8hyLrVVBVW85xQ8tJnpsHhy37sdw3FFJJs3WoS2S3HwyZBsjf57pqby2U MPppUq/py8oH
qiCdiKhk8BNujh0ju0++4NIV5LQR1X0K4Lsfh3ys7F7FnPKvc/fvEvawdNm9 I7iXWZi2X7a/
83AbUxQ+2AsTYuUN/algIcu6laE0c2o+g4xm/6p6lGZlrQ0tMIf+2zwa1S7f XsGnAP6X3oVf
ow3nJrHpbhnx1l8tsa9avZv1t9Z0JTJJgXBbPCiIdi6OrpBWNMg6+/7AW661 dmupFjglqMB4
zybpZzUn2PlxZApX++0uk7cr8bop4A2DDbH9nuOsc7qD8CAba5pypl7BR6sp 9sInpCbJfLR7
LFTGUv3iExnFnTyQi/xz8Ii5jcqv4CC9oAW3liQltNTR/sRup/Yym38pAhQq sU5vhL0xKwVt
hkxSP6siRtyRsyEYQ6T3tXmq3rDWOj1mvqOl1saJ6m7v0ThW9b26L8sOw/ye 9ZtA0NleyO7Z
aknZIMyDi/WvrKOWDx+OB8D8BUutNx/O3u7wEUFs+/YTXyUrw6FtiYZZb/Gb yZdmYDemDqEw
7n+5if9UZRI/3mT7Nugm5Uz/jjwE7/+olSupIbvTvg5fPAOnnkSpNGRhdsoa djJcZQeK+KEC
8qHNcOzDErJZPHVl2iZ8+a2LDA+mD+aUT9d8RDyGUy0IhtnX0QWyU6qlAJzB 2/6u9NRIFi5w
4/dyptxpB+MZKjkmHQuvfOboqhTpLqIizv7ViprmdmmFN57gVUYSVTkQK1F7 YDd+IKPtxnZa
OGvbpliGtrhRvrVawmegbeLn3qydmw0rej/yofm1boZ2uYGuHJGjAzclZonM mLQ875DYcVLO
i0YgSa4L63Zfe/ckGB6cguZ+ZSyVphUmx/G3tYUoDyEGsNehO8sOznz3lf3l EW5bV20HKeO0
c9LSnpUbE9WsQsxEZZ7okJzDVIOJuEXlZKB3e3JoMH2cjcLxq2/Vp13Exic3 Kdcq+wKG7uic
MtQs6aRvip7oyRbQgiqYfSAw/XL7rl+mPlEeqrCN0zqp+BSlrCr61byJZAAf RW28Evl65HUH
fOihdseskAJ1Ua2Xmz3YhqAWY6nXvozMKCLtBot8VTuC/xs+VOaj4KZQS0hJ iz7sMXmTrE6f
plwC8TCTk3RNa8+XgjTlp6MhtgpxPv2+kk1RjHk9m1EnG2tiXAHM1SHwTZoV aHQW+c2E8TB8
/tgZ5FbA8jbkTlx3O9mb86v3NFX11XWxwkKL1Jm4cvjaSIkWyALsqm+LHL23 IptLbw1scl5g
YJzs19hujdCVsh3r45FzJXvF4+iMmUAyZAIt0txtUs6foiSjRdr6BwqF0r+8 hY9wR1jCwXLl
iRaO+7XwYUcXAZ0fH0c+Dy41FxzMperErGaUaIvb+Nlha0Lr6qVtWW1zMDyM hHtY0A4sRdtt
bwdADHaf9dkgPeKpTdc3zalVN7W1tTS11nKU7/QOMQzs4L6CZ2tjyEQVWE8i bf6EAtctwpi4
UVlviH6bOOWWaCPMYyHNiAVih47mi1FjA1rNm6lj+apfkHxRdYnefkTRwny3 UEtAxNV9Rn+s
E5GunizuDjJ1rsNKKTIcSix+ybJZ620cc+vBlEzuyqilSeoHSwSOUB+3+IYb dq/XIZ/MkWv4
B998pg4MkNn4Cv0unaQi57N16pl1S/Iv9cKKUjsPu+vP22D8FIzQBfRSuuU2 dlV4voHBGRG0
1rpzmL7KgsNEnfHPur2wRdO6oFFHUwhVs/tS4jwPtBZTfuhi4n6fLaJH1vH6 jsl1+du2VFOc
mUQdKexsexDYGPXHjBcmpG9NPj0YqDb41LV3nO5WP/uDaCwCNNrWYWtJTpZw xssqxAMrw4cN
Md67IRglincosBJbui1T1oup32PXPRCHbRt+zi+o+SWRhAxE2g+ZE9pB1p17 +8UfnXO/euxa
YpD5qp1P+xve+2t3/RPtQUTOhG8/fAg7Kkt+zOkU5aM8pCcTurXd8M5a8G02 fsCl8dySQTQc
54vOrAUK57+chKtZb/rJKE0XNbY0fDeb1dEaLrhm5FgsyLseoKpjeUPeS67O NN6KOAYFB+D8
FA01XBRhbZp7BuofvgqqT/9kpTpa6F8wNVto9T+3H3PqEyD8IbqB/wxEhb1I znBJdBfnMePa
kPEp/S7jZu+sT/hSy7KHl1cU0ZXEXfvkaZJx38EF5CggR2ET/qpJSlmLR8tY Gp+XANpSVPNc
uuWmUXM2UX9pYenH2QFdw6kNd5nx6npYswlydAiVRBdkD7AhT1ImxiMkv94u 3/OePPDaT1Mh
Q6Fe8tqP4f6N9TomRhDjB44IMpiAZbbcsxeARTPhK7tY31CKFmEkX1hnoxvl UZNQtv24u5Ng
jBWYCHEBZlogTTHteQL5oz0mU9fBWK4aHFy7N9YFsPAlGhMFWzBBhgI88GOO RGSS58w7kQll
ZUhF418ONM4MhfctlVh0I0Q9ywJA7+KboAVN351BCIrxCjFufPZlLxy2b8TU 11/RE975OR1Q
tLlx3n4di04MYDsCJIpy3Y1nML1xYfWsKFqH7xU/OOGMuDf0TQiBN82MlAd0 92K0F7598z2G
GYAmdegV4ZthvdLekLW/yrhXy9a4SN9kG5jFKwsmMIkYREN9fwKhThEBzapS cntixzF0qmrH
wDs9eWrUYOz6qkbBNokzTOHjK1HLZFjk/hNzacUJ5CYRvFXra8Ks7IxKcWLv hhS7otWMDCh6
kTewKOfHKe7mio5LVT5bkdwOIQhlVu6E3N8fo8HX1+CGctdfOhk9sg07xhme F98bkkI1Oz22
A4Ef5OeF7WNt6Xps9pYzhJOGXgTi2NuDgV8vZ2c9G/ZueS1hXJR6Ojgz5FM1 63Q9j3sLk6dB
tcv4tE1mAUMKNXVvEkPW2QcXXZrZYNfhfxqGWZd5fhrWbGmuRrL+LPOeOkpB rS0+V5DKJ2De
qnORvVZQRRwU07f7YYPoFPnTfrpBLfF7stj1UZR87ZNsbOa2nlq8TomlZjPm +vCVTLa4t+cx
T0luJUgxpAjldjyUo9ZuoNHdQQYQ+0AguvpHWeLgSwI1tOQThSVSotniOa59 2ubp4up0+jdv
EvsZGM/wObyq+3Yc5wel7oIg4iHIiR9Tu+vC+sAiVE3N1ZxadzsoRekNl3pt +dY+EVAYVKZO
d+oiFrSAb/2yJt6WIc7qDw93jdkq/X6Cpjqvk1Ql8IZZzAkuTwQivfK9B1Zr thpDrYhq1tdw
7rQ2FZyalbHq1ZXVxU7Q7OdrguDXOG/taS4/xHggEKg0jFZtGeeiiX1q/oq6 fIBUdtCi//P7
yrcG2YKISjCGIJy1pueFmBJ9W3UdOghaZB1CZ/NqHPv2ix9c96Dwrn3bisjJ 9c1Q1CPN4oFW
AtU8LBaNdqrzhchwIlw6G8QhtmbOLZzu7OkzUPO1voK14GliqmPpKRvcPWK8 Y557AYfxdLUt
H3qXv8jnS7gXdcp84vqotning1OU553YpvlqXHThuKK7VKqOZeWsWm/ApR4B yEmGmqCrQH6Q
bI0cSHsQdE+Nc4zXzQ08HYqvkd0DN2AmliLt2b6B3d6DiRzw9fLf1tf3N/LS aHmf3XizuetF
kfbW92BVzQ7XMMrdfNV0mcAZjxYg6cUZv83pidt4aWVwQ0DZ/fCKwdjsdTxM P+YbKsfo3gDl
b7CdBGNQlkueOWo+UbJ2V7csU1vKzY0i5icLk5QtnlldTIJvrD4oaqd+KdIe SgWO6CqUurI5
U3tuoJ5AN+6zSbqPRYsbeR8ZaTQhhnvCicOg4RfFHNd4AGaX3tS5BnAD+ryc gIKHx/bmd1Ne
VGhVufC2tRXYOw7fMR64/tGGAAFExpEjX4fP+lLQSRUFYFzcZ8BuhmUjECfF FGucdDg4FeZ1
eetdILaJoSBiCMQNlwOmvqFnqKQPyc/6gjkPAb/I44Cl12etgc4IGSOUBLpM GACRoxasI2pX
5GW7Zi/eos/tweKUHMpKupIbcs3XYfsIYyg0Zi30vVGj1x9CluXRtaFOPHXu VZNUZpi4CVij
JLE5Kd/JO1ynoJpBJzncVzLd+bOeb4ucICrDqUg5eePFOviKxTEXh9mPKNmz HGuDtXqq7Q2T
26pBJqqVKWoe0gwLbvimTkJvvfyvcaZcB2jspOlZjka/L4SA6pXovKI1eBlG LFRLgi4uenW3
ARIpnM799yzpwzLnguPIqUr5hcdnlpm76ngekdXOqBOl9oDQmVg/8XzLeWa/ clPtvZB7h8Jx
GxLRMv7JtkZrJBRt4jm6kd1xBE4GFYBj4g64J2vi8fbAhCniQb1J2ItcUViG P9pd3DmBqZG8
yOOAYhhDIjcNl0NcSiZBYsXFO6soLD8QMF/5OJ2omU6FHbXLQO5seqnKYxwU XVM5gu8Muwkx
pWLg4bW5YvnqnPninYCrg5Nwe7IG2D2Vc7mHIGarNqvKAboMRFLduPIm06w8 4olyWdpuihXl
naoic2/vDJlFMwdDGiga/rsxCMzWbMg7OEDnOWwLnNJVGCqeK+zM5kPq7cdL mrp91re+rpVy
N0soCB5N/GGq/OUVJnGoaWI+cSL9bWqfi7XzwXWUA0lTXU26GdgnCPoGOZ5A rkEjIlG5DZZf
UNGDBliGWFTRe1/8YlPQHKriEQph6SzaSqVPHchljCaqyZomQJOXssXzI+xy fCajX85oEOIt
V6qwnlJyKVYy5VL9mEYdq6a5zmZ2aRoztFGdGHUJC0UOKcZD9ykS+L/zZgw/ k3mIXmV+AbHj
j9k6x4dBZ8ldS3rnmdtmUs56cXpcRXVh3ayHn2PHDpXra8j13nzuj8+njlvn L6ibKTuNYm47
OGmrcTUS7txtpvCyqhlhfehL6ap200ZV4r//GkaakoK13GsJ8wM1qU9MW44A E3olkDMTo7NU
LWnyBI+Hm2jO7rU0G3d3mgE7OhOC+sC3RYQjnWqMicU71W5G/TRlBOSPyrmf zRm0SPP6V051
f8VmuDie2ehY+a99Gpnsb/SufmNmv75NKrPJyCAsqtmEZmcHs+hVQajNgk2Z iN+gRHCgtFKq
4V1E8StrePSsXzUmwtiBoyf4GXCVDX4vtnVW0d399YJpX/TnHtpTAGPmuXQO aerZ7skk0fs1
ptqEmBFzVaU9fbIw/23tKf/DMbJHQMPFuu+wabJQCluDivOK7A7PdfzXVdQz IIaTp/1PPoSJ
XMhIut/f1UvdhDY2mO8iHfJbwGrp4qh5TsTOAl8+MxM2SV58CkrZRnXRxVaG 9ZuNMvf73Onj
XDsIEnwtbW924VzsXB3lAR5Bo4hMhFdFVTPJNECf2ODXlYPXjPmk2ZQyi5LI FFlNb0IpNtnn
TvNdEBtdIoCXLheZ74EiryeJclFW9dV85A1mVaNyZ0AQ830AgfIH0mVsCfZq R/kNElIff0qr
kx3pxsRZSeqro+lXGx/k8DvMoHyOVxVH++0ZnSOB7uaz0DD3GwXhgkTqqdc1 EvbUF2EfC83M
4tx73JHv3CBib/Z2+WfkiTx/ElTOCukrYDsO3MeNhOt97ldEjru7R3wBp8Zx 8D82VzbZV1pb
Sx+L5PdXN14Hwi4Mp2EDY2xlsCT95w02B0+I09yCzKp0PfFKfg5Cr/u0SelI 1cytVTGXcMau
qZMhPUSURhb2X/hi32Cmt1vFsZPFc7PMfJcq4mMHzZDmO7oDu0vBawcT0af4 ri/nk2TxQapm
gpdVom6nNUobe7CscZiXOtSca9zAt77JWAS713RQqKzwP86WlRj63QcFRy6W 5PwEl5qTq5PY
OD8OmBw5NRLwl6ZbRJkXeBV9t7Sm/uZVYW/WlBAwhucbPVpnHq63jmsCKzcW gg2R3UKTmS6c
ndhwW117IRTe2Di4XVPnu0cLg33h1c+/W7t7phEkku/kfV0bweJIGys4mEgQ qh3Z9nqTR1V/
ULWA3QOE2S8Mgw2RU/KjQac/mRXsRRVH3tXIIUMcsMVIyQiToMhe34kPMoXe 5T3bTWBuc7+Y
72fCWFZypooHvwV1idOTZ7IZc+VbD9y1OLKXSAEuduuiaK9p8XDnPGhcF6j0 3+FhsRuyaJ0R
LMfzjLN9e7oTFqOSIEOzBv/KmzENFBe5TlAep4jktT1xDW/ocWmuGcrNOk26 5HF76el7YSzF
qqfxe+6vqY85Vrbl791F9GgtNJPGfxVsbz+0e/FX+m/40apl7+r+sGy6f6OE 1M+8XE5YShET
KdNqa6tccyJGhLz80C/4otaEnjIy0SubgjWp9hdyWIaKpprWQlM/Qq777p+M BiDeDlCGP7Bb
w8ymX59SSpk7US9ckuyAvdJpwjmHjrQDZIyDkroAMYXiF22s9DF1+CxWtSKz K13Tz0YU3t13
SEkqTKB2v5XNKHSrK20zWGFWe+m7spML1vSEcJSs6erpK+vMcYGBPvVNaq59 UUbL/XRmcMJu
hnpWQSrEbnNz4qY0FJ/+BSfPJJjCJUA7nICW8ke6s9W19+ulzb7xgQvK1TXa xKHJy8xM7LeD
e8R76ROfAtivHJD2BWDHj24tSfUk4Nvumy0vTPHvqC4JGugXm5EC3Cve/+hx vpWUzH4GjpN0
5CjWqO7QnOgbVyg5ZH0DVzW0ZO8EvVh6LuTKh+igkF/6BvcUI/Z4ZcXwmMNQ 8QZRDZ1nTG8g
F9YpxIjtRDSmVukJXYG63polZ5yn3BqncQF3U12OZ5CxVSGs536k3zGe572J S9ucygtvB97M
4OodpJ1s2a0BtvKRhH5yvqGByE6zt9F2jtII+J38xWTBrp5uFJ/FSZbxIIar Q395fh9M2b2b
1GOMuRhw/Bb3MTZTYwcbYnTllvFNkvzX6jpM3agl9zoLL7OP4lDrcsSIIxro mgHoMDDKKUYf
bExVp465bdxCj0EUxEIO2JXYCQ3wQwLoQ46yIIz4HleQ+gt7qErwVs4FdLOJ 0DE8AoU9X1iw
q01ou98/4FqC5FqplzNPbefDuhfNOz674a/HK7UXqHEOmMQsCWZRMlcTn9jW fKb12X4YzXoZ
sGQqZw0xXxbXdFcX7hLW5PeUIvS1c4YwMAlkGT/OUCxKq1XxI7uYvpm0rYvj Wiw7BjWhcY+O
pGKyEXSdJqQ1RFcjZUKOiA3yv4iPbetlSsNUwK9L+JQi9JVBPkIfk7kzWras RwZjMS9fGSMw
hDwARs5lw49mz4ltHInAwO660XmppXbLUyMm+Uu18khuiAVROPOorYoY8eNp YB3RLXWojfYU
f9skW+CFle8GVVtsja1Tu4ccBeIClI8RoKD1oi4c+nIuXJzjnENJsNkn2r4N 2hrKVMj9w/o/
gr9sKPZCowPlkXRQIvpYitmMt9uNQ2tDtcvoRwgJ6jj6svzSKoRGFfAM8J27 US8v1E4XV8n7
86xueSzCDNcdi2zU3cVQWPgnw9xF3ImRAH99Z3DZX2/HENpd8L2U39nd1H+9 s6uQcX2UUsCS
KUd+JzvgDkeenvhv5XLywt5TzAYjM82BfGOiT0ZRa3OzJNMF/ibn69OLV1qf 2LQR7ZURYL62
SWl9PetI+qLkwnzFuexXRBuyBT7RiFGP7+ulWmngodP2IEcJtX9vmvXCIIoQ VX6f/TnJgnyj
Fyiispi9tC7b2lXi3tTvGWAzA0q2MXQI7VOtC5bqeCLIUXe2vcy9zBKqYPWX waYBACgTBioX
skJFDAb7/+bbcRU5xvwcL5rKKdmnvUxY3MumuYKqk+yC07Px6avotZeNrC/H U0t4qYeNSJTn
+zmLVOUQM20a6HxIaSJBXZQPgagC5+pMXIP15oGLq2uIOBo2XR8R2YPqEgav H84Yp1HYvn+Z
nV0MidVV+a5DF61xgW9nTIRO0c1mIHBN7BRZzr1bWmDQ1+E9Vla2+vb1GD49 AYFx/Ht7/v56
i7EAPSSi5sQVU1OktiwAUVZYRg/18YCKyxppRd5xGoeDUvD1CL59nxjo5yLK u9zMZOWYcQJ9
Ga91otaPiqYpJubjeQk2Pn83g5Lm7Lbrbk2ZOCFr7KTNhdXqvsw/cEYe/i+f UqoSX+Pq91mr
SOHEjzzCPUmtcD61Uz4DEzBWGu+DXt48SXt5M8H/B2QdHfAp8r/GXck05fvW dKMSyzPpOEFP
7jqqb2H7S6adx5izzE2IdxaOY6Kmgj1VmCh2ndLdzxnR00X/c9ewzdBw/505 5Wfgq/Uz0Dvn
IiVi5c+6SZht89lzrVsnAY07u6Dm8zcwt5SRMAdZwtG7wuJIIWYbx0YUmy96 r4sZpoPtimeA
b5ZrOAd16j5qKWVPZ9U770HnfRllVrw8uGf6ZTXHi2ZSSN1QY/i/NPM8PZ6k smif2jb+EpW1
ylv6YiIQxIs1a/rP1mxQobXGYkzGir7w0us5rMphDwYAV1MZ0IDKxWnPfQYG Wov85woMfwEV
IsvtM+kWSVzTS/P68p+FEsU5JS5eJ+1QYtIjc5Qzbsia7rgtEqOjPAO3Mlyn v16G9Le7l98t
ohvE01/3b54BqL1nYPMwtSXtQXRTQXpannPYhzskmsea36Yx4WFpAR8LVJJJ OfDeGpb9Qzb2
oOXmisW2da3+Ik2WxQ3s1ObGscK3xHW9NlgmGRYjUC5F3MeAATx3NQdTAaXf 1peU1EdKEc2c
oU0+e8JCGeO6YXmpwyjDlcYyXeYBhOPDasbhg6LjWCokN/3sct74HFpx3ctR 63qdCCW41iha
WvlWrrz2DRUUH/aKLLtHMn/viBr0hDEq+JTjfybi/8QS9891f/8UwPH1n+r/ 8QwEuyg+A8Vr
D2g5z0BUuQ4dFOPvS+A/fitdV1+DBrfYNpdOlzzo56iGl/AWhACnsFDwUprA 6VPgi/okGT4k
6Qis4bLl/PKrewamwg/Cot1y0K0aJJ4B2cba5oYY/ylMrfkW/wa2bsbDPhkD aUdg7Vay4mVA
0+TccT8Dg1zZKGDpjhlKC2cMbBxr/W/GTAOyq3LAEbFFzvqxZY/A97Sv34+P jsvN9JYKVKo8
ngHbnVi86ejsNmQLNJjMg5aS62dgKSMdmMs5FohtdjMlubpOWJLEDsldao4C 4999wCdCs796
Bo4Ec37huzmMkT3xKjTYdTB//3o4O3c3qrNqR0HgP+8hesV2sJYp+mAf97cX 9XbLSwxkNk7D
p2Q8BAZt9vzSZiWQ+aY3nKqeAbQReaflpNm0L57DOtMsp5vps1xNLFTTRygl Fmk6m3S4TqLp
VE5p6tEyw8ZNkGLd8agZ96h7T6Ekupdhz0DM5GOYyzMgiVp+1/0M9B2gIb9b zM43d25pr3O/
Ac/B4qrTIaFErteAEuHHyIjkE8VQvhnBZgpkFfYvPGQ0ge5fSXvyyKJl4C+l 6rkZZnkR+3bP
KMOI/q3lMtck44/IAo17aM8AUTk8K0VLY+Tmqlk6grKQs3Rnykx0IPx6oOBc pmeY4W1x8W0D
CqvclKv8ElK/iNShOJ1WshsWBu2Q2Glcxq2zcy5U41N38zOQF6bx8DKIt1z9 jVdQ/Tcovvtj
oYpe6RvW+4TUh+sPYqdCwKWfU7yyOJFIlCXtSU8dzUXUwZlpTNcZFLRPMU+k sTV1kjEb32rk
LtRaxduTeeFfycPwl/ChRQAi3af/FPc/z2gRhYvz70hJwcPKgau7KycVQgMs GPpEWK3IpY4+
ZEP1V9b5jWcdWUwVmNy14bWkAbY4CdxrHyxSCrKu5EC0TGPViUrNXBBmVgak unDV+ozyuPaR
cfbMWxcL6lGfGaPRCdICjrSyi6LskLpnPXDncFs0UqFnP6uuypZvaUTImUjE c+Sm2sPdxJV8
ee8RIMxFdr8pepY/dgZX9LJU+so8YffpxUmcXQmYtZh5a4DTfcc7dNUbo18d 9zN97BRluJAx
3lelScrr97BxT3+f3ciTAG+3q6UsxB4g9srWXBM6GpWfO2fPE2pa/BnooHoG EIVOAW8r0Zse
/w0xoidXw8tJ0dM8mSy8hyul+x8acFnraApwT7dxD3SXbRD7L7P5GsYzEAI4 3E36j796KSGE
9L+TaJH+b9sK8XVP6hkQxnr6he31f5EYea0CVxP+p+HPQFec4DfSdLTHc7Jb ZZgVdyk7Ni7/
NvZlcXqtJwsKC2k+qKRv3JpPmIwOd3svE1wAp/859vj/oFD5OxuA/wPI/Rm4 HLt/BgCLl3mT
4Wug6qsZbihKDs5XcfV98CjC3cixyxh3Mx3/o6GlYO+1YK6zrqGb1w0oN8FM 4Whz2EAcbcJm
u1h1f5qdQ61ob91wph+HqEDzdaV3sUe5p8QDhJdf4TLExJuB9fdub//OqMmh wpRDPbwbUjtL
3+Y1SodCT8OPC5m6E/0yaWkEkGneJ2FeubDjVY1UkxyH8SWepdx7RZcczrgc wYwK7xydyn8h
Eryj/LppO8yprkUkXavLGnwq+KhEua5YOFBOX7hpXeOFUIYV1b2QNL67NFwK wVKynqthgiex
b/6EOtq/6KbpD5v1jbGrq1yh+PEgp748dWxkAFgHBNVy3t2Uxf0Lorl7zXbY QyjQufb/lHIh
1i00usw1OlUewovwYHNCOFxxTCdPWIh9gjjj/dGl7DRA7+nOlmUxhQ16lZFh MKMhXhax4Nru
tSuCmhf7pSs+Jp2R6AlzHM1/wmL46a9Ypg2ms5tHWNuvp2e5KH+e/Xn259mf Z3+e/YefzTQ0
B17AZC+qgWnuK8LIJ6DrVKQA57l+MmT82K8L8s/Ap15XKdj3z8C+3vHNQ+IL vqhSfbHlq98S
HZs69YedsufcncI9A8S5FqudL0u26GsetLv9XxpkS245v/BORU8fyB6c4xoO Ra9YV/3XbkVv
d9h4//GGSpX/uNJU1dNS2QtM/Or1DPivv5iayX6N2i+G5/vLl6a9FNdPB+Vi 9Axk5xQSwT1c
PTKiHbeMPyLd5Nw8oT3xy/y9ioA/pf6/r1RNpI1KgncCFTkbk59lbHDz/B0/ 7VNKI2wP2jD3
KOEzZ/pGBmfGDNIR9Nn4/L0ovbpVlPs3Aq+wrARKu4sW6sOj9Zc+N4d3TXyg R0bC0UyyhjYa
uD2wglIc3+RJ/fxFxtjaw8vzBgmoa8ie1bjLTxTrnTXFxw9VRDq5k8EnT6O9 jfik+4JsbT8u
vwJdpC9QW326f6MaZrWt6QXJUNNLASktfcemhpk70TDBLfvzY71NqYLzrwua mIQT2hplSNAP
PIxj/N6RsDm+PShYvgdmNweSnIW6dguEo3K78vIK3N2JNgmYFJwAE7Vq7e23 8TL8ADoK4K5D
U25euY/+zp0TtzHDkTgoVIOhm+F1JkdCCrUiBwI05vixbEYP2YLVUqTkrjyt mYl0z6+Epnsj
78jR2iSd2lpZ0ep6+gVnHesTI0t3UKLSGLCdDQCuAAAUWhYZLgYefzpI1JOj AGt3TNsiNR+8
vyEJIAmAqicXJAl68n6fbEt2OX1VJulXZhmHtvqe80V2vVP/iyzpPzT/Q+Yx fxGkhF2vWD6F
3I+/mMl/Dfb8v4tDjCjjL3HTzYvuFe9r+dvN+v8wbHux1c78z4dE/heFgfhT 6H+2QrF+DKGc
NF7m3D4Dz8Aiu0bFf1sGduru3DK86mEFSIbr5gyMkbhEaU8mjHZ+PTRvzfh8 8PjTg/+zUAIB
w8h6CmyNmwbVd+nBN3jDhPuO/YhlGtPh8rxZoqqyQmSbfXyD3Gikix1JpXo/ VOR8bV2nvefg
THoxrJAnETCyzLtZVtVl9whgdG0JRcJKrPHY9fwtbXide6/Ly52EX+B3XASm tsiG4dabOIUR
ASNE084LOZSU+pOoL6sL8wsZjDZee3WQICvfVIqJsjSzMXFbsz0gZDFgdVbI 2nTjUJAoy2J1
s9Pet2tQ6LpzQ40KVJmVuh4U3thoaxagdKvgett2V2nncFRGCd7F6Ugztdrx 8WcbwFFZVIwf
6naODv5JTqwv2Z3eUWgtxClVGcFSrpC1vc8d4PPReUc9lKdijf0bHfbDclLA qxtS0vRTpdi+
ve5fyQ3Dbm7OA/a5RKPfPsoWhMHZs5Dhd+ITnw9DPpVsZQhjrq7U6xK1EkWF OeHUj/YW2P74
4MHnnikT3RLtsOxF4YhAmHQbOMhVLvI0oWfIUlh7pCKWZ+A3YIZ/iRhyh5Ox y3jjNAdcVhYc
Xnhxss2NXomY9PvsankF8s7rCLe629Fw8S+1UlUg4NhfD79tq639wBWjs6pL i2bnnOp+IU8E
bTZm5o76mpOehegUaw4aMBSha5TvDdQlut3SNm5szgqWYrZMppDNREDCFbGV pCOAPb80Ysc5
EbIp7iza1yyx8Re9LvyirytJ2Ecclgj/XXEPkchtxO+82+XbmPXET9pWLLli Gw7pi24nFygl
K8xdz0DolAGKIDQGzmCGr+R3XkbWxcGnuDYcs4Tb4Gu6hIUl7t7sYc8pK3M1 aOOPFqvcw5zE
UGOKVlDvRHEVnDblUThQWE45QIc+UHcGdvl5jQwjvishPHqwgkg5aY4c+KiV /23NdqKVmcHT
TtIIkvtu1JbowtiipxM/pIptVTUi3Yd7jikzAs9nhIBT/8+KnIsy+rcFRfTv dh7ZP40OYPkf
Y0b6v00O3ff2tc+AxOPe4zMQ9AzEqvy/uFSEn1Jki7/wxvy3DpQeMZjfHf1V fIXOhb6FnaTC
xx8eDFVvjutGUfU+ZjmK+Pte/ngfevpfwxiEPGl0cjMvUHIyJctxbHVsRTpW /cZ59Lb5uoS5
+r3FUp2zlJGWJ3i/MBI2+WCOFfviMX1ckce5EjzBMqsb0SkNaTdva68BbQrl 17pQf1gqE0rC
qlqbUB2xnj7TcpkNVcsqzA9XuaV3PB58yjKlkd6tZ1MyK5V9eIzrU7RqNLZz H2zXEIN4vKjp
aCSPJYZ3IkL7A9dRR97rOspQhEoQdCEWQyy4AB1A4O9dXp3mm8OW0gm1q3e9 9I8eCPUj0/HS
sAgzxENDDzwwa66VaYnRXlCP3LIQ6ofIn1/j1QuQ/i8iRCgLc9JXOW2irtfX ZWRhMiKw05eH
tE/R73wb06d7DjrIWgfxCbJfqpBfh9dZ62xw7ODtu6QynXndFU/CjK0iFqtz /yTn8wzM0/tf
aZXFmPal92UUrBxiFEYt1rWElNfXStxvJc4KhqJeOHSXEr29CFEV6rwk+crT /neoqYNWuF9j
oG8gtzFgcHBCBTMyCk29Gx2AKGjJ1AQYnX/LRUbx6BEBTR/9dEHaV16xJtS8 zupqb0sCtUbv
mKiCJHjC2fSCWt3di3hmiyOFxD2Ku+0cPnWT7OY5eTNdswwiM2+37TlzJQS6 k6+3nG00b+iw
Yt2aDPd+NddX7NrYCPJkv9OobNclCt1D3o9vNzWzvxuAfqe3oL26tLy08oNe CE+RdJPfJARs
ASHGgmQcDh+A9Tj5gw4K69XczxXnR2bE+Xk5a0x530r8Jo5dr02GIn73nrUf R7LMLFP3iq8x
l79+4M6y3x2Wm+QajiIy1xfhJ9Rtom4eiB1XIofBItfLCN3/8I1v0MTnzrWd x6HqroM4VOno
wS/KFT2n1hT/4u6Ovd7b9CTu9XjrGTjIz8tGeDzUOFFQK5vuOHt1ufsSPtXp 7cPrKsqgBc/9
aMBE7hxKNUwpTKel+qX8jDf3doW1ElMZs7ihGwn2ONUIejg9CQ+dCKrOEvae HvrfC8AXaz3x
4uYgEfGY5V4Ef+40nDc2QvN3yUBv6OaSxI6cgNOCdvcXhS9SuZ/eYdEM2s/S vapocxxvBfmW
dgqHFcpYFu63+KXV1pxt88wWqWd2I6N/IsAOrKwjtodRC5qxI02GGHhHKnCO U6bTkEeaArlf
5W8lZXvp9Q4ZPMyDeirqm5EOlYxBARGxLGGef84byX1IgqffkL050UbvVhxx TOFJ/IaJ9NhC
1cwulwXLkpbq/fkNnMUvgwzqne/b2cQhJxWbbHojExIGVgNAfoPzcAAsGjFi og+jYB5d04Sq
MWNqvBw2c3v0exVa5kH2h7SnUxK+XGQFa9EN4lubUq1O4ZjyK0L1ozOWDLQF HPdSzPM+gshj
lmbynLQPW+TqwjY9HXRTrAZjSPIK4kdMib+uNyhlKd08kmFGGhm3garMr6fe SXWmKHNgFMdU
lCJZy1dmcmipzerhTBAr8QjqII9FYUZhV2ES1UG8rtk8JuL29CgrdvveICwy UQomiIF+Ki6I
Mf3baa0p18MYi3Mm+zKF1Xw7lAK2Ng7ahZBhRq7CeZ4NW3EIONacjc7EuZe2 8KpY482Cwd4h
33ucOp2E5II1Ir0QbDxPzED++SnIZnqpfGStgi31odgX1z96fUsMPM8SUBJF jsdE7PFPfbOL
XbzTi0nD8rsLRwt7N2zUpnf9LhaZ6yBp7fnNxhDuNBMF0V4DA999Jbn7u/3c 3Ztj19RCh1Vf
sfFLWzRYU1qbEiznO5e6CXp8XvbObFdS7Ji2u7Iqqv/+JjW9MpW5KGdTMG3V anbWHR9sGWU5
wosDDVXlrAgcjaZk6Ba2WtEZybvXy44oH2tpAZMfWiHg1WG8SfKnSuetvEWS 769OkXQWmhzv
y49zo08Qh9CGZAT1+/wIwlzECLLxZh2o/Qj7NC8pWus6mkd66s7KNDGYVGTl ngGtCJZBXvPG
vGFMBH5vvOj6YxmFMO0mAavae+ksG+oy9zGQRUvkfComATyEzp6gO3Fwn7MH asW9/LQbX0Hk
M9Adv9IP+uQhtx4qNgUDTxzoZZTL4r1uWiiHk5KJ+wxYhonLrq8R3VljU3hI Y0s7EhGoEAI+
tnqu2BDftDyDenhISc6i5Hys3bw+W8cnZ1sVUbxKmn+FHLVnognpQT2GwNc3 oese0h/LXUqH
em8j33xCauNjFkgZYh56zchjQviGzz1jBKmZJ2Reb8/zYFp+2jSlUAlVokao yN0JmrwuJGE4
KadNh28+u1lKWKyEdGjslasfDAEJtfRbbBDH0FIh3O62IHLVE9XgKCC+4Sf/ dsa2QlOrPnb1
YnG9a6iITctWBiaBOlna8XZRLxGwhwJ4GQX68F2H+Y6OuEytbUjdJSGlCFnk aBGJoEBJt9/j
6oafARFespsZ/wd1QPtTqV+R4d150zPQkf8MbH6+f/P1csvpGfCTeQZ6lWHS GRoXzZ+BHKK4
+wPRJ4Y/xH+I/w+JcdfOz18sEv2wp6jXA9U+H7aO7QlYacFr9yJ9WrnOPBLa J+oNAXD6AYnO
ShUAlMTqporwAq5L5hACUExG+QzUq8iYW6KW8JTgBkZ8fpNB3aqVh9ly3i1y lHBRCX39suiU
Smn8U3NUrtP89/q2nn7FPQORuUhc6g5/bw6ZdeqTr73o6edn4PYLUPuH9v/l tJB7TyJMz8Bh
9TMw6aBhI7K5+VY4j8cl+rUsdLEolX/928d/UlzIURzdY45nYDym//En2TOA I/N3xQ1gmlTv
mGZ9uF32X1N5Bs7V/P4rEM8atNo3usu9s98OldMLN5bvq+dlwfgos0u+mr+z /NolWFjTOcP/
7yKp9EMWyMoEe/xib61PItrIokwggsZIYQ4KhHigg4qu180yVWysa/zOTTP7 ySfcdMF9k1lI
xonpvW0T+TKgTBnhbHFRo87JydLXTlrIGlsnNXVyzFz8NNLBdKMxKpByaceH WEMBx7cnHEd8
bn/YnY5yk3A9Dr+g54XBhH43Cz7d6fvqhkcbQsAH9UGDW5hVYfah8tgBVdJ/ e2/4Xg99uJZv
jBcret31Chsiouj2q+pMX3pEcT/xry86BjoPZeeFpX2kdsedLCFmeh/qCMpr b8bYryrRPSvQ
EG9VZ1dMv3OjyLzBC3VrQB3EBEGhgprjfMAZNApbxcvbCUsZRr+G3sVZuk/3 28+e01td95V1
ZkbzyJkk7IG2jPo4FipFwvJXdIcdnDZstHPB6ytyxOAJjrYeowFxPhYZopYJ WIuMTTvVS52p
2Wt4rkMSCRDPQPVjmX5z0KhjKntHz6IHMofvxou97m7tKfgkNfMMVEbFPRL/ tBBk5HOTq5et
w1aQMFtgXuyFT5mLJbgxi0vxpK26+rKK+gwkuIkebm49AzLCgIOKFDbEsKH/ IKv/PQzrUxRO
QpnntNa0a0a7CVe1j0aqcn1Dg5Whr7NOv2PnqsKtm+m798pfZD6KmDbuznU8 A4kGz8A1ouEj
LqP4VTuP/HDpoBA/0op+j1FzWm5w22Q8hIztTiqATMqHDfGh4jasJ90vu8LY j4GonOr103ST
ZmOiWapTZtnrV+HSk7BI8R72YzN9izPnMuEsV7d25Vdapm0zLKxS2b0LFCFt qZkn0olsij3E
eAbEvEKMUpv+yNqejUelJfN6QmwOsKIM329KTR2XN7I48MpsY9b4gRj5DEbB JZ8Mn3YY2sD9
7mUZJuWakW90MJ227BDokP4twjCAiVX6U2uFYWGeLhECM6WcQ8oWHqzeuJCU Wj/LfMYjSQRM
4aKh9aCEbuoZTW358oK1AE2ak6ltaXE/lbwHdCM/xsL+NvDJDCnJcYWND46A ScmfJbVo9JqM
tzt+8DEnrto+EOva1pTUUJSGp/KN3+S+9s17zAmHSmbL5rMRDhkbrF6S2qWl j++NMU8Y/CM0
oJV9WEnYA5DlRMjfKe+fHWpqsC/sX1rn2NU1WOm89e6aWOZg7mqgYAxsShT9 SMGgKKswjnrY
Upe4qnubCM9UEDbA3voxj3W3lrIkxjKDjCMAv2pZ10qvhFbxtwrx+eiqnVep lsfdgDh0cWao
9qNxILYkZbz6dVDMty/x3jH5UwH8KJL9BpT1URozVFO5+jxox/Dl2Q7M4okL Fp0re6dJLmLO
gSBydsHwN3Xvac6l200/HTZML+vghbDUnQsXsEJFhAStlA29iamD6bLd3nZY FVk/WpOfNmtr
aUvqjm//viyNlJYOLz9KAGC7j2k7Ap1bH1SVzC1dqfEIEd9QO18gUIY0VscN gXaaaUSTRFe2
il9GajntA1UOipsNPm11fUfQ6/ZsmGnje8qK7yYGfN3s+oVzIKxLNiEzxOJy z9ReQqnDhU5r
68/CIYmGBssgOWjFiouAZvCObwAuVurjqap7tHHLRWcF5kbdIPKP6AiKixuG apgAwRoIhoLY
e5lCy4qw/C/alLc6M9RBqbUqdrDM81Umpnvb1AH8+NsWAfzDXwltCBWznMpW qWO+R7TO2OXV
heKFvrpnaza3SG6FXWYOJyffuXzg49C5Te2FPWCm/DU1Na7c0hTLx0IbwRY5 qUTB7EAyEhx3
5ZwXHZW4B3Vj6aFR1ZVtsIJfmcI4TopJUSOz0tw/2k1ymjRz4vBWbWviytO1 ua6pjfndPwL5
pBoC/grkS/vvgXxiBISV4RZNtw4VY3PsSwfxC+9kQ+HoRmZHQQpMpoLJ9ur2 xfY/ieLe5lBf
f80N0eeVn0ngJgovt2PmFixsz+bX4N8BG6ZvwSDKEIZwsiDWmtb+3B0aLZ9a qcNmo27VKbCg
cy9jAqy+rQQEMwS2o07uqxpKohZbUmc9Rdsfm/XdWsoWSHdCm8sbrQf4IwK7 XF+xblNVWlpC
XIdxE4eVLrcbsSrTuJ7sRiTIh46JfaIRFbXbaptRLzyY+R5UKuW9G64n+j+/ m9RdAYGH312H
IuAcPWnEyo0442gPn6CF4sMf4Ne6bQ6N2q2uuGKjC7cstpnQudcxwGsNrAQG cALtsFuH6mNh
+fWBWrwh5QrpVJS6GVZC9RqOR5B7AK66iWAK3OdcVNWlXoH0FRudxXdshlr7 LZTLy7p+kTYO
PLI77aqfa/jZ2NhhTIa2j0nYGHpEQOcuhjrWvDzXPLxzvFZR3KMtPFRW9iDR psj9gd01iJEA
khHIh+Dsctuy70dZrthoRiFM81KodjOfVanuOsTUID7EwjIIkrAqTFPGMqKh SloTO6dNkgfi
dw2o5TlCbEQmNh8GxSZDJHy6DdOac5OuiTiy6+h8BsgqZk9pF51cnCAu+j92 aLwfGR1Pi2ND
dd+pOm6z25RfoREczsC/upe/97TPbaLEsbEitNKQgRqLH8Ckj0oj5PvuDjkY uijIX9fOs6lr
bXG2zSFnw6hkfwoN6qXiuXYDPZTp7oKclYTfyQsyCotsHmwOi8tbn6z5jcT3 InKNJjpv82jt
RAz+FKmDGLHB8+jAmaGcvhJMo5FPDht9mgTrTtqAUh3FYsB+6wKD7Ih6kMZ3 TmHLOgctP/fi
mF0bOupkquSbTgmY14ZalJnMYEwv/d03LBnwa7eQnS6NbJY9LWUyXvkRsqJR V+RQ92hiLi1J
QoKiY+NC9daDdr5kxsrgOHG18wgK6vI98CPqLL6mbQgxCgZxQMq66m3ogjJj vbgghjz9exfL
Z4OKDwTtYDJZixaU7IdBiUM37Etk7BbWCBAKQ2dDO2214GFzs+mHt5tpdX4c DjXzB7yLHcnc
SFZ25Gxe+FZQULtvXjXhEVW3CN2ZmTkMXe0X7lev6qzKbAyoHkxRwNQNQ1Ns RENCUlkyNIGM
nAY/bclP2x9t1TafbXPq9OIlEHOII1HKpAhCJgU0v+Lbv2DNzUXwFf6cpfkq 9Lgiv8X5gmoI
7KwTM3AU7KWK+UNctQBrButYJ+U1LG7Due7SfqIktCwm39bFdxWxbwDsN8Ap MumfTC4xXKsv
a3+3oUT+bq9BWESW/92qzf9D+5+KFtD17+/de3Qn+8XMGD1F0TT9II+8GFyj X3hd7IVSONrR
7MIBOzIFvzq/CUIgts3E7SbfKiExb+/55FPDtMefjAmhKCL1DLz7FDs0RqJq p8oMg6WcxiPv
Xi1B7bYV6rdAtWOAcCRMB6XxRyL/hWlhxh98tZ+BOdNn4NNq2axfb0+Rj4Tt Hn5yPILie+kX
9Sn+46n6N8QVDn1ozmf77hpxtGk+Ptt38s7XXUYUYIVyLi/PgIsbcwjQZ1We WozGv0vhy81E
d8nCoKV/PlGrNnsHwRQ9RpU4geo8HzlZV4DQFMlb1bazk1Yv4dVCB4+8Hxf6 uhL280Q+Idnn
iLIq1Y5YR+dF+7xwCE0B+h+OuH/8pPd1+8SS6mFtJ3ptfm7Z0mA9U5lh/U09 AZ6/n//Icy+G
//ffjf7g4T94+A8e/oOH/zPjYRy4KJHxDaRHjX3yxF99jHs8P54MF0UGqfqO cre/JH7xj7I/
QxBWNCj1KrFapZo+4WYcls/oLjKUsZ1tUCBMA2UPUkrEsA9ysBGw5Cck5uJW VOAbN96LJuTj
d4xiBKJEYN6pZDVLdfuWXrBCxSV7Ixbb5f24dr/QXbzVmYUHyWFsRS7CaGgi EqOjwhuFw5/W
Webmohq3mW/yXS2lsTKZTvdlOYG8Yx7ABt7fPtEVSthtZlYh09wPgzJ826og YrsNZ93oT2Mz
SkDupveKY/Lyku96C0O4kcywkAJ24AU/sKdo6m8JAaOT3RujsGtHTzLBtp/u uYo8eXR0K1Mo
llL1yFI6pLZdLuLENSimrpa87M3DuuP7qWdKhbsL0IOYIpe+zwddsjl8xBoQ +pmL6rzWp5M4
r7WySvTGRsByyfV2o8FuQnYcUgZp981r7QpT/YVw34JM2KF0w0ghmVLDZ8C4 jifdvQRpzCL7
YG5EtbqwFqCMdcZOcG27K38qO780FuB7waBkjV4vQ0n0GPmx0RY9rm6P/5L/ 7rK5Ze+UTKfy
GYDfDXrMesx6+RGTOu+7Jnq0ZtZ48TBit9bItxLLOYcN0ecp2Eu4uU+IUl6R RmTN4/7LLvqS
P0Lc2uhDo1cMRwrVmB55xA0OwMZ6cZ2NPevALYq8LwCuuWbTf5cgw4T+TZaM S/w6pp9pHvUW
6kP/aF2rYrpBBslO+fZ74hCWckp03TdVEqT438gpeZxLA6XhiNOr4ruJNapl 8rFjp8kspGQD
whCVbYk6DJNTtqqpCgEnwpjcmQ7cdx0Ubc0dfqp+mDsnJve2w8gcH0kMWMl5 wUK1zWyajvSX
mHemeR6bjxbMnv3Ghc+AlXUj5rKODkkE7P1Hk5Q0oW5OrMtOShdMVJemAN7j 8bwfN5oXa8ue
OrM2g8oFqZi6YlMCyfPiJs7ihqmkma6f/NBkWr6Cn7a6ZmsNXoeAmhIXYRNm irqQsBIRH5qu
tgoBlyTPRt0gucRNOSOpWrD6d1YimVRCL60tY6KliOEOyb3RmCwAWC9h4eGK Ei9f0TsQCBm9
WF18hyXBnNeejr8hu0NJPkkFLCWZhXnadSmd4KjY/S46gZt6NrVo7R3bO95s 4tDNXygdCiMT
Ev8tcVHxH4mLuahU3R30M7a+whtaZeXvp4skrYu01njj84fSzYLRVgmCHGtf zWtlEm85DtKX
kEW0KVC3j9iZE3tnOiAtL0TBuk/nOlFcImCZnL0/tbp43fi20fHi0O9KmFQ+ Sj7srL5UySwc
XMNdB5Orxi8Wxq9cHA/Lvpj/V867+NPY09jLD+nhIxGHnGuHGt279xY8p0uZ 9v0Eh5HAwJSv
4vmtR+97cs5nwFrSuuEEpfWTHLr19cUGTiP+9wjToEx7/sFROa9NZhvFptbJ wsSpUy16+2sl
GzN1cw6CiOieyw8p8ta6TiniA/gDEA3PQM3V2nHcsf+tDMXT9IuZuEZJJnhy fH+3cuN5OB0Z
K4wmEyafIR/VNVtSPHK/U6drBa247DyYiXVRCXInTYbosRGhnm2TWY/DWCpz T/dZsLph9q0V
M7dWvP9M8Na2KfwZyGc/pLv7NrgEbv7sedijUf1uMdhbDamo8zEPp3Z05zOH LtO8YNvjhb0V
qvKrYFhaJwTw/u7ZbpCTpZ0lb7BtQX39yrWnwdRygW6s7rukkMHtrXItP1aF xIuDCyVUiRtN
J3wWCysKVi4zQGWJ3/wbFFwsDGDkCV7TCBytL1dvuyeSl04/WOx+21TDs4Ek +HHE814SezHf
S/zjBc9dNG57aPmmLHmjLEuZvX+dr7ifOdzipyS3NqsbW3k2l13TIf0vkCj5 FtKSlUpuhfuN
i9GEMXthFE0dQQ5JLlzobQnHgqk2WAmBcvg/3ombWzSevm9BROp382jCkNzl ZMBW1XWXQxzJ
vUaWkRQjlol6MC7ttC5jzlT1Nx918LO28SE2wY3cJPJKC08aY+kRwmT9VUDS TYzyi3Auwlel
wKA9ExecHjSvTf3zuOtV/KuDUzqkNHvNAQhjfv/Vn7RWfUT5T8PT/g2i9c/A BnHYvdKTv2+4
72lr4+mex8pWpSID98SVmzzIEEknuMr5+h1zbm8rLvIb34fgKjgq4ugJWNAq xTl1z/XF/ngh
E29LyEmGg4OTA4VZInTz4ildUoplI3RAQIivWUJS6haKi+bcA8QmUTnHrLwf M1MajbYpgtvT
J+mPKD1FOOl0y37rqhsyYyX6ZA9UuAqbLyBOrqCqyWdnl31Hp6Lv4qHtVBnk kJwQ5m7g7djE
6stcdCCClyrWPnXCYrdzqTfKFrKNJavXNpxUb7ZCVUUOIKxD9ALK06CXMRD5 6Lo0Kq9uo8Us
NMMsukCbvq7E9La0vuPbqtyrNxQL998UH/IRuFkx1qwJR+uzs+yoV5NsnGyK DYQimvPBGjGa
nEJLg0hcCk8ll5l40IkZHjoGGX7F4sUGns5EUfg8dzzT4kj9pJP17iV8+NAf YgPzX+aoxM2p
jQfmd9MLlNRlMXYQVjioyhRjavTbENHuuWhcZxaNZfP7PC0WYabXUaWfc5ss LxL1I3CzikuI
SK1kaFTGnthjivn1XxAWpo3OWtjpHls/TIFHixkSbobn+0n6jwsDP2oZv0BE ZEGVAhv9dHis
c6Mv8yaPxJA/ks6wFYme2PUEB6waRsmiIgc6DFwV4Foag8y6az8Z5VVTcGFO Kbit0Kr3sFw1
/1FY+vsLuumTrHz3yz7eaNqOZaepZZZwaGrsl7iTi0UpREJP667+dp2qwK5D MwMbyJhhW4R+
Tvuq8Wt9kGJdonpDU/MFzOKgoz0hGe0NJ1lt9SKq7oiUNQ/uco6ojJe55eeC fb/cwinF8CSm
c4lNKWmmDzXLISaycHmgyJi/XJvDugMP/Ij6Oq/IG9KMgv9blv3OP7LsuSD6 DD2jVGfqRmEq
pfKCtH1QXi9QRCSUpzjYPgPuR9rBxVhxH6Hvw3buOvSR4ghsVKzHBov6bsAR OIUHd2b07eAN
cnHcPaCId7h+AUGOXDCZnyo/TH7abqcZTIYqSZyqWnaDGi+BXMPooGmCNtLZ YaREfjlbJsQ2
iDOjatW71Tq+qJJISTMULNh3mrED4XUE7IsR9yVtKmGuHoJ1pL5nxdSt7aO4 X9itYorWslHy
7cRTYThq2sj6hyrmtNpv1pQdlV1tf2Byxa6XxZjCCaRTlq7ozGQhChiBIHcj x9L8T+9QaXzw
NfCfM34GPk3VMBmse97rhsoP7jQ+jVeD6Yhj4sE+KXa5EHNGoMykwwBgorEp WcldKnOPI1CM
vn/g67Gaym/DKYF3/xVjDf4Q/y/EQPMzEBcl+uvI/0r3e/p4U1PyuJVC5hZm IgT9+MDasdqL
XfMn+Odf0nKP3+6fUJ6hhdPUtWWPbZKIeJlmQ0KVqDF3km/x9clQCaE7Sn/9 uzRK1373dVNI
qXRt8TZ0f0TEPuGT9fm7VEacK/AUpoFtJmWOIBJEj+1AcPVKK3nhqLfwa0MS q6jClUVdpcc0
X+2T8nQ3xt1FRxwzCVSnMR9S/i1FfVaFjBejNYwi6V6UzGQFmvZovk+o4/0b O4OP9/lTMUry
025fGe91u+PX7vgvnuagOY7GOGN6tvhI/vLaWHewztSzF720oV/kCzgV/JVR yPrdeViGj6N8
njYeuR2sje3jZbQfYw8pY1BXB3Z9o9ZPBUmVaZiNLLugmlcRQHcEi+nqTtFg kuf+DT/IfXde
pCY9f2Gl7nypvu21jnB1KZslFUqiVoHXIN88e3SDzV+AReNi6S/AYkXdxKsq Q12HXMmOz4Gu
iJTQd1IHkVZ0m6HWNltX3x6IItCvHIFSw+Rvg2dvdKlHPeJQzZPVjZzDJ6GW mZVu8E/ON+3f
frBgaAz6uq2v9Ov2ZTBMjosRzfwjV33tQn7tqfMfqepmNqRcs1wrNKdaMUwG 3wtnmO3K0/HW
iMHVy2weSe9JtBZzkhkSdtE+Ht/Vn37dTv36GJj6DEhFTvxbi9img+KcJsey 9KPh69BD2amv
dSc4x9tp1MuWjJgJlBh14oHbJEu19ewN9UIqm0jtIkQ2frj4p9xIUZOW1e6y xg7Ue4IJBdFY
1XAwc2Eo44iTnjnduAbM9wwH7nhoyESdcUP1fgfzy7x8lm9CDomoPMbEqFR3 h8auV3dXT8Xl
1lscbzCGsZlq2RAhHHWRxV4BOSdx4mL46TRfKw5T9600+rrkZRN1dzx7O1M5 xzHU2YcbaF76
0kTc2j110VkZvPOAUHbowaOjGFGkp7XEsH8+MLXSyTz2yt3bC6BLg9xe5n2D CtEnj7U2XLhf
6xc2erbN4W+5daSbG/yYgd+fOj4YUzpN5uqt4bcWXEd0OKx94suJnLDYcy5j e329S/bxVWtk
zqb6B2zS4f43RlCYSuGEyQK+At+/R7t7+y5aLtkxp+Mmr1bV8SJHOZaHv16v AMXtwr9OSsRy
6W45KQc1gp9AgUj0FBfI9rt08ndlA19MtXf7R3JhmXhxF/EY5KZ/rxCCwqwK 00ejWalhFA31
HGW7+EYh6AMFOH65W44MBaT5Vle5qJLK53Ph5Sbf6+GvPuMpBN1LMFpmDCub NWhXeXjdby9P
EOdGwCMrbmIxv6BQlUqtHy3HdTe4IRvy5UJK1kjfNo2Nbmw4kqjsIBwz+PmJ buKaBHmnrhZY
WSpBZ9usbh4YgbsWgZiX0mIwJLVgPYDNc10taUF7BUGqLzAJQa8tUDbP7sj0 IoLfXi5ue/zG
c78XMLGRewbg97r1dfoQjuwccqcqLT+4zr8fKK3XSo1lG9G0dhuEfhhBI4As OTSgPpdO8L52
1NF5h2ZsljrXiIApjlXalsti3mxIDhO88wz4zGTl49u3VdkEN9lxSApQUcr6 tg+ViRuhHgW8
LqHqmNzXPsz7cQCW7cCtRzDaOZrRFY9yZ8L/eHeHYIQqzU+Qi+p82pfel1Ss Z8MbYepmYv+T
yMqOImQjQWSERVu7kKWzEckEHp7f9xlARQZ3UJ+Lt0TJdtTV1c6wVFDFIkVs vqGsezsgr9vv
QkH1SPzZlHK7+dvjwsr3Mrbi1EZpxp3Xl/3B4bYJN/ZOl479Pts/BTNmvvO9 gHgSFjsWViSd
ohzOU/CkXS6GoNMwjaPSUFvCvLcyjPjmeO2txDOg3iIL6qiOvBttEU29jquR PW+l42
|
|
|
Re: [Teneo] memory consumption keeps building up [message #604385 is a reply to message #78533] |
Thu, 05 April 2007 16:44 ![Go to previous message Go to previous message](theme/Solstice/images/up.png) |
Parvez![Friend of Eclipse Friend](/donate/web-api/friends_decorator.php?email=p.chauhan%40pilz.ie) Messages: 181 Registered: July 2009 |
Senior Member |
|
|
oh yes forgot to mention, that your guess was right that it is referers
field ;-)
PC wrote:
> Hi Martin,
>
> I did some more investigation, and it looks that it is referers () field
> of HbDataStore. By the time I created 6 projects, it went upto 483mb.
>
> I am enclosing some profiler snapshots in zip file for your consideration.
>
> - Parvez
>
> Martin Taal wrote:
>> Hi Parvez,
>> How large is your model? Would the cross reference mapping cause the
>> memory use (it is the referers member in the HbDataStore)?
>>
>> gr. Martin
>>
>> PC wrote:
>>> Hi Martin,
>>>
>>> yes, if I initialize 5 times then it goes to around 500mb or so.
>>> SessionFactory close seems to work as I don't see any error,
>>> otherwise I guess I would have seen "session is already closed" or
>>> something.
>>>
>>> As per initialise time it used to take from 15 - 20 secs. But now I
>>> have changed to use cacheableFile, so that have reduced to 7 - 10
>>> seconds.
>>>
>>> Regards,
>>> Parvez
>>>
>>> Martin Taal wrote:
>>>> Hi Parvez,
>>>> There is an ERuntime.INSTANCE which keeps track of mapping from the
>>>> ecore to the java classes. But I can't really imagine that this one
>>>> is 100mb large. Also the same epackage can not be registered twice.
>>>>
>>>> Internally the hbDataStore keeps a cross reference map which can
>>>> take some space (but 100mb seems a lot). This one is not cleared
>>>> when doing close() on the datastore or the hbhelper. Is there still
>>>> a pointer somewhere to the old datastore?
>>>>
>>>> Btw, the HbHelper.INSTANCE.closeAll() also closes the underlying
>>>> sessionfactory so I am surprised that your sessionfactoru.close()
>>>> works.
>>>>
>>>> So if you create 5 hbdatastores and initialize them then 500Mb is used?
>>>>
>>>> gr. Martin
>>>>
>>>> PC wrote:
>>>>> Hi,
>>>>>
>>>>> Every time user creates a project in our application we initialize
>>>>> a new database (embedded HSQLDB) and hence we have to initialize
>>>>> HbDataStore.
>>>>> I have number of emf models and nearly 100mb is consumed on each
>>>>> hbds.initialize();
>>>>> Before user can create another project, existing opened(if any)
>>>>> project/database is closed and session is cleared.
>>>>>
>>>>> These are the steps done on close of project:
>>>>>
>>>>>
>>>>> session.flush(); //session obtained from teneo
>>>>> session.clear();
>>>>> //here shutdown statement is issued for the db and then
>>>>> session.disconnect();
>>>>> session.close();
>>>>> HbHelper.INSTANCE.deRegisterDataStore(_dbName); // _dbName
>>>>> is session factory name
>>>>> HbHelper.INSTANCE.closeAll();
>>>>> sessionFactory.close(); //session factory obtained from
>>>>> teneo
>>>>> Runtime runtime = Runtime.getRuntime();
>>>>> runtime.gc();
>>>>>
>>>>> But it seems that emf objects created during models initialization
>>>>> remains in memory and so if user creates another project then again
>>>>> 100mb is consumed and hence shortly runs out of memory.
>>>>>
>>>>> So just wondering do I have to do something more about clearing?
>>>>>
>>>>> Any suggestions to fix it?
>>>>>
>>>>> Thanks.
>>>>> Parvez
>>>>
>>>>
>>
>>
>
|
|
|
Re: [Teneo] memory consumption keeps building up [message #604389 is a reply to message #78552] |
Thu, 05 April 2007 17:23 ![Go to previous message Go to previous message](theme/Solstice/images/up.png) |
Martin Taal![Friend of Eclipse Friend](/donate/web-api/friends_decorator.php?email=mtaal%40springsite.com) Messages: 5468 Registered: July 2009 |
Senior Member |
|
|
Thanks :-)
The referers field is only used after initialization to support cross-reference queries. If this is
not a requirement then it can be cleared. The only problem on the short term is that it is not
possible to clear it by subclassing hbdatastore. I will change this in cvs so then the build of the
referers hashmap can be prevented.
Btw, do you have an idea why there is still a reference to the closed hbdatastores, there must be a
reference to them otherwise it would also be gc-ed.
gr. Martin
PC wrote:
> oh yes forgot to mention, that your guess was right that it is referers
> field ;-)
>
>
> PC wrote:
>> Hi Martin,
>>
>> I did some more investigation, and it looks that it is referers ()
>> field of HbDataStore. By the time I created 6 projects, it went upto
>> 483mb.
>>
>> I am enclosing some profiler snapshots in zip file for your
>> consideration.
>>
>> - Parvez
>>
>> Martin Taal wrote:
>>> Hi Parvez,
>>> How large is your model? Would the cross reference mapping cause the
>>> memory use (it is the referers member in the HbDataStore)?
>>>
>>> gr. Martin
>>>
>>> PC wrote:
>>>> Hi Martin,
>>>>
>>>> yes, if I initialize 5 times then it goes to around 500mb or so.
>>>> SessionFactory close seems to work as I don't see any error,
>>>> otherwise I guess I would have seen "session is already closed" or
>>>> something.
>>>>
>>>> As per initialise time it used to take from 15 - 20 secs. But now I
>>>> have changed to use cacheableFile, so that have reduced to 7 - 10
>>>> seconds.
>>>>
>>>> Regards,
>>>> Parvez
>>>>
>>>> Martin Taal wrote:
>>>>> Hi Parvez,
>>>>> There is an ERuntime.INSTANCE which keeps track of mapping from the
>>>>> ecore to the java classes. But I can't really imagine that this one
>>>>> is 100mb large. Also the same epackage can not be registered twice.
>>>>>
>>>>> Internally the hbDataStore keeps a cross reference map which can
>>>>> take some space (but 100mb seems a lot). This one is not cleared
>>>>> when doing close() on the datastore or the hbhelper. Is there still
>>>>> a pointer somewhere to the old datastore?
>>>>>
>>>>> Btw, the HbHelper.INSTANCE.closeAll() also closes the underlying
>>>>> sessionfactory so I am surprised that your sessionfactoru.close()
>>>>> works.
>>>>>
>>>>> So if you create 5 hbdatastores and initialize them then 500Mb is
>>>>> used?
>>>>>
>>>>> gr. Martin
>>>>>
>>>>> PC wrote:
>>>>>> Hi,
>>>>>>
>>>>>> Every time user creates a project in our application we initialize
>>>>>> a new database (embedded HSQLDB) and hence we have to initialize
>>>>>> HbDataStore.
>>>>>> I have number of emf models and nearly 100mb is consumed on each
>>>>>> hbds.initialize();
>>>>>> Before user can create another project, existing opened(if any)
>>>>>> project/database is closed and session is cleared.
>>>>>>
>>>>>> These are the steps done on close of project:
>>>>>>
>>>>>>
>>>>>> session.flush(); //session obtained from teneo
>>>>>> session.clear();
>>>>>> //here shutdown statement is issued for the db and then
>>>>>> session.disconnect();
>>>>>> session.close();
>>>>>> HbHelper.INSTANCE.deRegisterDataStore(_dbName); //
>>>>>> _dbName is session factory name
>>>>>> HbHelper.INSTANCE.closeAll();
>>>>>> sessionFactory.close(); //session factory obtained from
>>>>>> teneo
>>>>>> Runtime runtime = Runtime.getRuntime();
>>>>>> runtime.gc();
>>>>>>
>>>>>> But it seems that emf objects created during models initialization
>>>>>> remains in memory and so if user creates another project then
>>>>>> again 100mb is consumed and hence shortly runs out of memory.
>>>>>>
>>>>>> So just wondering do I have to do something more about clearing?
>>>>>>
>>>>>> Any suggestions to fix it?
>>>>>>
>>>>>> Thanks.
>>>>>> Parvez
>>>>>
>>>>>
>>>
>>>
>>
--
With Regards, Martin Taal
Springsite/Elver.org
Office: Hardwareweg 4, 3821 BV Amersfoort
Postal: Nassaulaan 7, 3941 EC Doorn
The Netherlands
Tel: +31 (0)84 420 2397
Fax: +31 (0)84 225 9307
Mail: mtaal@springsite.com - mtaal@elver.org
Web: www.springsite.com - www.elver.org
|
|
|
Re: [Teneo] memory consumption keeps building up [message #604412 is a reply to message #78566] |
Fri, 06 April 2007 08:48 ![Go to previous message Go to previous message](theme/Solstice/images/up.png) |
Parvez![Friend of Eclipse Friend](/donate/web-api/friends_decorator.php?email=p.chauhan%40pilz.ie) Messages: 181 Registered: July 2009 |
Senior Member |
|
|
Hi Martin,
I don't think that I am keeping the ref to old datastore.
Not sure, but from deep size calculation of referers field, it looks
that it may be keeping ref to some old objects. So in one instance of
HbDataStore's referers field's keySet calculates to that much size.
- Parvez
Martin Taal wrote:
> Thanks :-)
>
> The referers field is only used after initialization to support
> cross-reference queries. If this is not a requirement then it can be
> cleared. The only problem on the short term is that it is not possible
> to clear it by subclassing hbdatastore. I will change this in cvs so
> then the build of the referers hashmap can be prevented.
>
> Btw, do you have an idea why there is still a reference to the closed
> hbdatastores, there must be a reference to them otherwise it would also
> be gc-ed.
>
> gr. Martin
>
> PC wrote:
>> oh yes forgot to mention, that your guess was right that it is
>> referers field ;-)
>>
>>
>> PC wrote:
>>> Hi Martin,
>>>
>>> I did some more investigation, and it looks that it is referers ()
>>> field of HbDataStore. By the time I created 6 projects, it went
>>> upto 483mb.
>>>
>>> I am enclosing some profiler snapshots in zip file for your
>>> consideration.
>>>
>>> - Parvez
>>>
>>> Martin Taal wrote:
>>>> Hi Parvez,
>>>> How large is your model? Would the cross reference mapping cause the
>>>> memory use (it is the referers member in the HbDataStore)?
>>>>
>>>> gr. Martin
>>>>
>>>> PC wrote:
>>>>> Hi Martin,
>>>>>
>>>>> yes, if I initialize 5 times then it goes to around 500mb or so.
>>>>> SessionFactory close seems to work as I don't see any error,
>>>>> otherwise I guess I would have seen "session is already closed" or
>>>>> something.
>>>>>
>>>>> As per initialise time it used to take from 15 - 20 secs. But now I
>>>>> have changed to use cacheableFile, so that have reduced to 7 - 10
>>>>> seconds.
>>>>>
>>>>> Regards,
>>>>> Parvez
>>>>>
>>>>> Martin Taal wrote:
>>>>>> Hi Parvez,
>>>>>> There is an ERuntime.INSTANCE which keeps track of mapping from
>>>>>> the ecore to the java classes. But I can't really imagine that
>>>>>> this one is 100mb large. Also the same epackage can not be
>>>>>> registered twice.
>>>>>>
>>>>>> Internally the hbDataStore keeps a cross reference map which can
>>>>>> take some space (but 100mb seems a lot). This one is not cleared
>>>>>> when doing close() on the datastore or the hbhelper. Is there
>>>>>> still a pointer somewhere to the old datastore?
>>>>>>
>>>>>> Btw, the HbHelper.INSTANCE.closeAll() also closes the underlying
>>>>>> sessionfactory so I am surprised that your sessionfactoru.close()
>>>>>> works.
>>>>>>
>>>>>> So if you create 5 hbdatastores and initialize them then 500Mb is
>>>>>> used?
>>>>>>
>>>>>> gr. Martin
>>>>>>
>>>>>> PC wrote:
>>>>>>> Hi,
>>>>>>>
>>>>>>> Every time user creates a project in our application we
>>>>>>> initialize a new database (embedded HSQLDB) and hence we have to
>>>>>>> initialize HbDataStore.
>>>>>>> I have number of emf models and nearly 100mb is consumed on each
>>>>>>> hbds.initialize();
>>>>>>> Before user can create another project, existing opened(if any)
>>>>>>> project/database is closed and session is cleared.
>>>>>>>
>>>>>>> These are the steps done on close of project:
>>>>>>>
>>>>>>>
>>>>>>> session.flush(); //session obtained from teneo
>>>>>>> session.clear();
>>>>>>> //here shutdown statement is issued for the db and then
>>>>>>> session.disconnect();
>>>>>>> session.close();
>>>>>>> HbHelper.INSTANCE.deRegisterDataStore(_dbName); //
>>>>>>> _dbName is session factory name
>>>>>>> HbHelper.INSTANCE.closeAll();
>>>>>>> sessionFactory.close(); //session factory obtained
>>>>>>> from teneo
>>>>>>> Runtime runtime = Runtime.getRuntime();
>>>>>>> runtime.gc();
>>>>>>>
>>>>>>> But it seems that emf objects created during models
>>>>>>> initialization remains in memory and so if user creates another
>>>>>>> project then again 100mb is consumed and hence shortly runs out
>>>>>>> of memory.
>>>>>>>
>>>>>>> So just wondering do I have to do something more about clearing?
>>>>>>>
>>>>>>> Any suggestions to fix it?
>>>>>>>
>>>>>>> Thanks.
>>>>>>> Parvez
>>>>>>
>>>>>>
>>>>
>>>>
>>>
>
>
|
|
|
Re: [Teneo] memory consumption keeps building up [message #604452 is a reply to message #78640] |
Fri, 06 April 2007 21:41 ![Go to previous message Go to previous message](theme/Solstice/images/up.png) |
Martin Taal![Friend of Eclipse Friend](/donate/web-api/friends_decorator.php?email=mtaal%40springsite.com) Messages: 5468 Registered: July 2009 |
Senior Member |
|
|
Hi Parvez,
I just noticed the closeAll method in the HbHelper does not clear the
HbHelper.dataStoreByPersistentClass map. This is at least one reason that the hbdatastore is not gc-ed.
I have entered a bugzilla for this. This will be solved in the next release.
As a workaround you can try the HbHelper.deRegisterDataStore method. This one should remove the
references to the datastore from both internal HbHelper maps.
gr. Martin
PC wrote:
> Hi Martin,
>
> I don't think that I am keeping the ref to old datastore.
> Not sure, but from deep size calculation of referers field, it looks
> that it may be keeping ref to some old objects. So in one instance of
> HbDataStore's referers field's keySet calculates to that much size.
>
> - Parvez
>
> Martin Taal wrote:
>> Thanks :-)
>>
>> The referers field is only used after initialization to support
>> cross-reference queries. If this is not a requirement then it can be
>> cleared. The only problem on the short term is that it is not possible
>> to clear it by subclassing hbdatastore. I will change this in cvs so
>> then the build of the referers hashmap can be prevented.
>>
>> Btw, do you have an idea why there is still a reference to the closed
>> hbdatastores, there must be a reference to them otherwise it would
>> also be gc-ed.
>>
>> gr. Martin
>>
>> PC wrote:
>>> oh yes forgot to mention, that your guess was right that it is
>>> referers field ;-)
>>>
>>>
>>> PC wrote:
>>>> Hi Martin,
>>>>
>>>> I did some more investigation, and it looks that it is referers ()
>>>> field of HbDataStore. By the time I created 6 projects, it went
>>>> upto 483mb.
>>>>
>>>> I am enclosing some profiler snapshots in zip file for your
>>>> consideration.
>>>>
>>>> - Parvez
>>>>
>>>> Martin Taal wrote:
>>>>> Hi Parvez,
>>>>> How large is your model? Would the cross reference mapping cause
>>>>> the memory use (it is the referers member in the HbDataStore)?
>>>>>
>>>>> gr. Martin
>>>>>
>>>>> PC wrote:
>>>>>> Hi Martin,
>>>>>>
>>>>>> yes, if I initialize 5 times then it goes to around 500mb or so.
>>>>>> SessionFactory close seems to work as I don't see any error,
>>>>>> otherwise I guess I would have seen "session is already closed" or
>>>>>> something.
>>>>>>
>>>>>> As per initialise time it used to take from 15 - 20 secs. But now
>>>>>> I have changed to use cacheableFile, so that have reduced to 7 -
>>>>>> 10 seconds.
>>>>>>
>>>>>> Regards,
>>>>>> Parvez
>>>>>>
>>>>>> Martin Taal wrote:
>>>>>>> Hi Parvez,
>>>>>>> There is an ERuntime.INSTANCE which keeps track of mapping from
>>>>>>> the ecore to the java classes. But I can't really imagine that
>>>>>>> this one is 100mb large. Also the same epackage can not be
>>>>>>> registered twice.
>>>>>>>
>>>>>>> Internally the hbDataStore keeps a cross reference map which can
>>>>>>> take some space (but 100mb seems a lot). This one is not cleared
>>>>>>> when doing close() on the datastore or the hbhelper. Is there
>>>>>>> still a pointer somewhere to the old datastore?
>>>>>>>
>>>>>>> Btw, the HbHelper.INSTANCE.closeAll() also closes the underlying
>>>>>>> sessionfactory so I am surprised that your sessionfactoru.close()
>>>>>>> works.
>>>>>>>
>>>>>>> So if you create 5 hbdatastores and initialize them then 500Mb is
>>>>>>> used?
>>>>>>>
>>>>>>> gr. Martin
>>>>>>>
>>>>>>> PC wrote:
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> Every time user creates a project in our application we
>>>>>>>> initialize a new database (embedded HSQLDB) and hence we have to
>>>>>>>> initialize HbDataStore.
>>>>>>>> I have number of emf models and nearly 100mb is consumed on each
>>>>>>>> hbds.initialize();
>>>>>>>> Before user can create another project, existing opened(if any)
>>>>>>>> project/database is closed and session is cleared.
>>>>>>>>
>>>>>>>> These are the steps done on close of project:
>>>>>>>>
>>>>>>>>
>>>>>>>> session.flush(); //session obtained from teneo
>>>>>>>> session.clear();
>>>>>>>> //here shutdown statement is issued for the db and then
>>>>>>>> session.disconnect();
>>>>>>>> session.close();
>>>>>>>> HbHelper.INSTANCE.deRegisterDataStore(_dbName); //
>>>>>>>> _dbName is session factory name
>>>>>>>> HbHelper.INSTANCE.closeAll();
>>>>>>>> sessionFactory.close(); //session factory obtained
>>>>>>>> from teneo
>>>>>>>> Runtime runtime = Runtime.getRuntime();
>>>>>>>> runtime.gc();
>>>>>>>>
>>>>>>>> But it seems that emf objects created during models
>>>>>>>> initialization remains in memory and so if user creates another
>>>>>>>> project then again 100mb is consumed and hence shortly runs out
>>>>>>>> of memory.
>>>>>>>>
>>>>>>>> So just wondering do I have to do something more about clearing?
>>>>>>>>
>>>>>>>> Any suggestions to fix it?
>>>>>>>>
>>>>>>>> Thanks.
>>>>>>>> Parvez
>>>>>>>
>>>>>>>
>>>>>
>>>>>
>>>>
>>
>>
--
With Regards, Martin Taal
Springsite/Elver.org
Office: Hardwareweg 4, 3821 BV Amersfoort
Postal: Nassaulaan 7, 3941 EC Doorn
The Netherlands
Tel: +31 (0)84 420 2397
Fax: +31 (0)84 225 9307
Mail: mtaal@springsite.com - mtaal@elver.org
Web: www.springsite.com - www.elver.org
|
|
|
Re: [Teneo] memory consumption keeps building up [message #604516 is a reply to message #78792] |
Tue, 10 April 2007 08:49 ![Go to previous message Go to previous message](theme/Solstice/images/up.png) |
Parvez![Friend of Eclipse Friend](/donate/web-api/friends_decorator.php?email=p.chauhan%40pilz.ie) Messages: 181 Registered: July 2009 |
Senior Member |
|
|
Thanks Martin.
Yes, I did add following but didn't help.
Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap( ).remove(_dbName);
Resource.Factory.Registry.INSTANCE.getProtocolToFactoryMap() .remove(HIBERNATE);
HbHelper.INSTANCE.deRegisterDataStore(_dbName);
HbHelper.INSTANCE.deRegisterDataStore(HIBERNATE);
Earlier you mentioned that
"referers field is only used after initialization to support
cross-reference queries. If this is not a requirement then it can be
cleared"
so just wondering (short term/quick solution) if computeReferers()
returns null or empty hashmap (though I know it is private at the moment
and can't be overridden) then that should solve the problem, is it?, any
other issues if you can think of?
At present, I am using 0.7.5, as you were saying fix in next release,
any idea when that could be?
Thanks.
- Parvez
Martin Taal wrote:
> Hi Parvez,
> I just noticed the closeAll method in the HbHelper does not clear the
> HbHelper.dataStoreByPersistentClass map. This is at least one reason
> that the hbdatastore is not gc-ed.
> I have entered a bugzilla for this. This will be solved in the next
> release.
>
> As a workaround you can try the HbHelper.deRegisterDataStore method.
> This one should remove the references to the datastore from both
> internal HbHelper maps.
>
> gr. Martin
>
> PC wrote:
>> Hi Martin,
>>
>> I don't think that I am keeping the ref to old datastore.
>> Not sure, but from deep size calculation of referers field, it looks
>> that it may be keeping ref to some old objects. So in one instance of
>> HbDataStore's referers field's keySet calculates to that much size.
>>
>> - Parvez
>>
>> Martin Taal wrote:
>>> Thanks :-)
>>>
>>> The referers field is only used after initialization to support
>>> cross-reference queries. If this is not a requirement then it can be
>>> cleared. The only problem on the short term is that it is not
>>> possible to clear it by subclassing hbdatastore. I will change this
>>> in cvs so then the build of the referers hashmap can be prevented.
>>>
>>> Btw, do you have an idea why there is still a reference to the closed
>>> hbdatastores, there must be a reference to them otherwise it would
>>> also be gc-ed.
>>>
>>> gr. Martin
>>>
>>> PC wrote:
>>>> oh yes forgot to mention, that your guess was right that it is
>>>> referers field ;-)
>>>>
>>>>
>>>> PC wrote:
>>>>> Hi Martin,
>>>>>
>>>>> I did some more investigation, and it looks that it is referers ()
>>>>> field of HbDataStore. By the time I created 6 projects, it went
>>>>> upto 483mb.
>>>>>
>>>>> I am enclosing some profiler snapshots in zip file for your
>>>>> consideration.
>>>>>
>>>>> - Parvez
>>>>>
>>>>> Martin Taal wrote:
>>>>>> Hi Parvez,
>>>>>> How large is your model? Would the cross reference mapping cause
>>>>>> the memory use (it is the referers member in the HbDataStore)?
>>>>>>
>>>>>> gr. Martin
>>>>>>
>>>>>> PC wrote:
>>>>>>> Hi Martin,
>>>>>>>
>>>>>>> yes, if I initialize 5 times then it goes to around 500mb or so.
>>>>>>> SessionFactory close seems to work as I don't see any error,
>>>>>>> otherwise I guess I would have seen "session is already closed"
>>>>>>> or something.
>>>>>>>
>>>>>>> As per initialise time it used to take from 15 - 20 secs. But now
>>>>>>> I have changed to use cacheableFile, so that have reduced to 7 -
>>>>>>> 10 seconds.
>>>>>>>
>>>>>>> Regards,
>>>>>>> Parvez
>>>>>>>
>>>>>>> Martin Taal wrote:
>>>>>>>> Hi Parvez,
>>>>>>>> There is an ERuntime.INSTANCE which keeps track of mapping from
>>>>>>>> the ecore to the java classes. But I can't really imagine that
>>>>>>>> this one is 100mb large. Also the same epackage can not be
>>>>>>>> registered twice.
>>>>>>>>
>>>>>>>> Internally the hbDataStore keeps a cross reference map which can
>>>>>>>> take some space (but 100mb seems a lot). This one is not cleared
>>>>>>>> when doing close() on the datastore or the hbhelper. Is there
>>>>>>>> still a pointer somewhere to the old datastore?
>>>>>>>>
>>>>>>>> Btw, the HbHelper.INSTANCE.closeAll() also closes the underlying
>>>>>>>> sessionfactory so I am surprised that your
>>>>>>>> sessionfactoru.close() works.
>>>>>>>>
>>>>>>>> So if you create 5 hbdatastores and initialize them then 500Mb
>>>>>>>> is used?
>>>>>>>>
>>>>>>>> gr. Martin
>>>>>>>>
>>>>>>>> PC wrote:
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> Every time user creates a project in our application we
>>>>>>>>> initialize a new database (embedded HSQLDB) and hence we have
>>>>>>>>> to initialize HbDataStore.
>>>>>>>>> I have number of emf models and nearly 100mb is consumed on
>>>>>>>>> each hbds.initialize();
>>>>>>>>> Before user can create another project, existing opened(if any)
>>>>>>>>> project/database is closed and session is cleared.
>>>>>>>>>
>>>>>>>>> These are the steps done on close of project:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> session.flush(); //session obtained from teneo
>>>>>>>>> session.clear();
>>>>>>>>> //here shutdown statement is issued for the db and then
>>>>>>>>> session.disconnect();
>>>>>>>>> session.close();
>>>>>>>>> HbHelper.INSTANCE.deRegisterDataStore(_dbName); //
>>>>>>>>> _dbName is session factory name
>>>>>>>>> HbHelper.INSTANCE.closeAll();
>>>>>>>>> sessionFactory.close(); //session factory obtained
>>>>>>>>> from teneo
>>>>>>>>> Runtime runtime = Runtime.getRuntime();
>>>>>>>>> runtime.gc();
>>>>>>>>>
>>>>>>>>> But it seems that emf objects created during models
>>>>>>>>> initialization remains in memory and so if user creates another
>>>>>>>>> project then again 100mb is consumed and hence shortly runs out
>>>>>>>>> of memory.
>>>>>>>>>
>>>>>>>>> So just wondering do I have to do something more about clearing?
>>>>>>>>>
>>>>>>>>> Any suggestions to fix it?
>>>>>>>>>
>>>>>>>>> Thanks.
>>>>>>>>> Parvez
>>>>>>>>
>>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>
>>>
>
>
|
|
|
Re: [Teneo] memory consumption keeps building up [message #604520 is a reply to message #78969] |
Tue, 10 April 2007 09:27 ![Go to previous message Go to previous message](theme/Solstice/images/up.png) |
Martin Taal![Friend of Eclipse Friend](/donate/web-api/friends_decorator.php?email=mtaal%40springsite.com) Messages: 5468 Registered: July 2009 |
Senior Member |
|
|
Hi Parvez,
Afaiu the issue is that there is still a reference to the hbdatastore somewhere. The deregister
should solve the references from the statics of Teneo. You can also try to set all references to the
sessionfactory to null before gc-ing. Can you analyse if there are other references to the datastore
instance?
Yes, I have made the computeReferers method protected in cvs. Although overriding the
computereferers method only resolves the symptom.
I aim to do a next release early next week.
gr. Martin
PC wrote:
> Thanks Martin.
>
> Yes, I did add following but didn't help.
>
>
> Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap( ).remove(_dbName);
>
> Resource.Factory.Registry.INSTANCE.getProtocolToFactoryMap() .remove(HIBERNATE);
>
>
> HbHelper.INSTANCE.deRegisterDataStore(_dbName);
> HbHelper.INSTANCE.deRegisterDataStore(HIBERNATE);
>
>
> Earlier you mentioned that
>
> "referers field is only used after initialization to support
> cross-reference queries. If this is not a requirement then it can be
> cleared"
>
> so just wondering (short term/quick solution) if computeReferers()
> returns null or empty hashmap (though I know it is private at the moment
> and can't be overridden) then that should solve the problem, is it?, any
> other issues if you can think of?
>
> At present, I am using 0.7.5, as you were saying fix in next release,
> any idea when that could be?
>
> Thanks.
>
> - Parvez
>
>
>
> Martin Taal wrote:
>> Hi Parvez,
>> I just noticed the closeAll method in the HbHelper does not clear the
>> HbHelper.dataStoreByPersistentClass map. This is at least one reason
>> that the hbdatastore is not gc-ed.
>> I have entered a bugzilla for this. This will be solved in the next
>> release.
>>
>> As a workaround you can try the HbHelper.deRegisterDataStore method.
>> This one should remove the references to the datastore from both
>> internal HbHelper maps.
>>
>> gr. Martin
>>
>> PC wrote:
>>> Hi Martin,
>>>
>>> I don't think that I am keeping the ref to old datastore.
>>> Not sure, but from deep size calculation of referers field, it looks
>>> that it may be keeping ref to some old objects. So in one instance of
>>> HbDataStore's referers field's keySet calculates to that much size.
>>>
>>> - Parvez
>>>
>>> Martin Taal wrote:
>>>> Thanks :-)
>>>>
>>>> The referers field is only used after initialization to support
>>>> cross-reference queries. If this is not a requirement then it can be
>>>> cleared. The only problem on the short term is that it is not
>>>> possible to clear it by subclassing hbdatastore. I will change this
>>>> in cvs so then the build of the referers hashmap can be prevented.
>>>>
>>>> Btw, do you have an idea why there is still a reference to the
>>>> closed hbdatastores, there must be a reference to them otherwise it
>>>> would also be gc-ed.
>>>>
>>>> gr. Martin
>>>>
>>>> PC wrote:
>>>>> oh yes forgot to mention, that your guess was right that it is
>>>>> referers field ;-)
>>>>>
>>>>>
>>>>> PC wrote:
>>>>>> Hi Martin,
>>>>>>
>>>>>> I did some more investigation, and it looks that it is referers ()
>>>>>> field of HbDataStore. By the time I created 6 projects, it went
>>>>>> upto 483mb.
>>>>>>
>>>>>> I am enclosing some profiler snapshots in zip file for your
>>>>>> consideration.
>>>>>>
>>>>>> - Parvez
>>>>>>
>>>>>> Martin Taal wrote:
>>>>>>> Hi Parvez,
>>>>>>> How large is your model? Would the cross reference mapping cause
>>>>>>> the memory use (it is the referers member in the HbDataStore)?
>>>>>>>
>>>>>>> gr. Martin
>>>>>>>
>>>>>>> PC wrote:
>>>>>>>> Hi Martin,
>>>>>>>>
>>>>>>>> yes, if I initialize 5 times then it goes to around 500mb or so.
>>>>>>>> SessionFactory close seems to work as I don't see any error,
>>>>>>>> otherwise I guess I would have seen "session is already closed"
>>>>>>>> or something.
>>>>>>>>
>>>>>>>> As per initialise time it used to take from 15 - 20 secs. But
>>>>>>>> now I have changed to use cacheableFile, so that have reduced to
>>>>>>>> 7 - 10 seconds.
>>>>>>>>
>>>>>>>> Regards,
>>>>>>>> Parvez
>>>>>>>>
>>>>>>>> Martin Taal wrote:
>>>>>>>>> Hi Parvez,
>>>>>>>>> There is an ERuntime.INSTANCE which keeps track of mapping from
>>>>>>>>> the ecore to the java classes. But I can't really imagine that
>>>>>>>>> this one is 100mb large. Also the same epackage can not be
>>>>>>>>> registered twice.
>>>>>>>>>
>>>>>>>>> Internally the hbDataStore keeps a cross reference map which
>>>>>>>>> can take some space (but 100mb seems a lot). This one is not
>>>>>>>>> cleared when doing close() on the datastore or the hbhelper. Is
>>>>>>>>> there still a pointer somewhere to the old datastore?
>>>>>>>>>
>>>>>>>>> Btw, the HbHelper.INSTANCE.closeAll() also closes the
>>>>>>>>> underlying sessionfactory so I am surprised that your
>>>>>>>>> sessionfactoru.close() works.
>>>>>>>>>
>>>>>>>>> So if you create 5 hbdatastores and initialize them then 500Mb
>>>>>>>>> is used?
>>>>>>>>>
>>>>>>>>> gr. Martin
>>>>>>>>>
>>>>>>>>> PC wrote:
>>>>>>>>>> Hi,
>>>>>>>>>>
>>>>>>>>>> Every time user creates a project in our application we
>>>>>>>>>> initialize a new database (embedded HSQLDB) and hence we have
>>>>>>>>>> to initialize HbDataStore.
>>>>>>>>>> I have number of emf models and nearly 100mb is consumed on
>>>>>>>>>> each hbds.initialize();
>>>>>>>>>> Before user can create another project, existing opened(if
>>>>>>>>>> any) project/database is closed and session is cleared.
>>>>>>>>>>
>>>>>>>>>> These are the steps done on close of project:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> session.flush(); //session obtained from teneo
>>>>>>>>>> session.clear();
>>>>>>>>>> //here shutdown statement is issued for the db and then
>>>>>>>>>> session.disconnect();
>>>>>>>>>> session.close();
>>>>>>>>>> HbHelper.INSTANCE.deRegisterDataStore(_dbName); //
>>>>>>>>>> _dbName is session factory name
>>>>>>>>>> HbHelper.INSTANCE.closeAll();
>>>>>>>>>> sessionFactory.close(); //session factory obtained
>>>>>>>>>> from teneo
>>>>>>>>>> Runtime runtime = Runtime.getRuntime();
>>>>>>>>>> runtime.gc();
>>>>>>>>>>
>>>>>>>>>> But it seems that emf objects created during models
>>>>>>>>>> initialization remains in memory and so if user creates
>>>>>>>>>> another project then again 100mb is consumed and hence shortly
>>>>>>>>>> runs out of memory.
>>>>>>>>>>
>>>>>>>>>> So just wondering do I have to do something more about clearing?
>>>>>>>>>>
>>>>>>>>>> Any suggestions to fix it?
>>>>>>>>>>
>>>>>>>>>> Thanks.
>>>>>>>>>> Parvez
>>>>>>>>>
>>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>
>>>>
>>
>>
--
With Regards, Martin Taal
Springsite/Elver.org
Office: Hardwareweg 4, 3821 BV Amersfoort
Postal: Nassaulaan 7, 3941 EC Doorn
The Netherlands
Tel: +31 (0)84 420 2397
Fax: +31 (0)84 225 9307
Mail: mtaal@springsite.com - mtaal@elver.org
Web: www.springsite.com - www.elver.org
|
|
|
Re: [Teneo] memory consumption keeps building up [message #604671 is a reply to message #79038] |
Thu, 12 April 2007 09:45 ![Go to previous message Go to previous message](theme/Solstice/images/up.png) |
Parvez![Friend of Eclipse Friend](/donate/web-api/friends_decorator.php?email=p.chauhan%40pilz.ie) Messages: 181 Registered: July 2009 |
Senior Member |
|
|
Hi Martin,
I think thats because of HbDataStore$ReferenceTo.
2nd Time: 69 instances of
org.eclipse.emf.teneo.hibernate.HbDataStore$ReferenceTo
Deep size 122 MB
3rd Time: 138 instances of
org.eclipse.emf.teneo.hibernate.HbDataStore$ReferenceTo
Deep size 213 MB
Regards,
Parvez
Martin Taal wrote:
> Hi Parvez,
> Afaiu the issue is that there is still a reference to the hbdatastore
> somewhere. The deregister should solve the references from the statics
> of Teneo. You can also try to set all references to the sessionfactory
> to null before gc-ing. Can you analyse if there are other references to
> the datastore instance?
>
> Yes, I have made the computeReferers method protected in cvs. Although
> overriding the computereferers method only resolves the symptom.
> I aim to do a next release early next week.
>
> gr. Martin
>
> PC wrote:
>> Thanks Martin.
>>
>> Yes, I did add following but didn't help.
>>
>>
>> Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap( ).remove(_dbName);
>>
>> Resource.Factory.Registry.INSTANCE.getProtocolToFactoryMap() .remove(HIBERNATE);
>>
>>
>> HbHelper.INSTANCE.deRegisterDataStore(_dbName);
>> HbHelper.INSTANCE.deRegisterDataStore(HIBERNATE);
>>
>>
>> Earlier you mentioned that
>>
>> "referers field is only used after initialization to support
>> cross-reference queries. If this is not a requirement then it can be
>> cleared"
>>
>> so just wondering (short term/quick solution) if computeReferers()
>> returns null or empty hashmap (though I know it is private at the
>> moment and can't be overridden) then that should solve the problem, is
>> it?, any other issues if you can think of?
>>
>> At present, I am using 0.7.5, as you were saying fix in next release,
>> any idea when that could be?
>>
>> Thanks.
>>
>> - Parvez
>>
>>
>>
>> Martin Taal wrote:
>>> Hi Parvez,
>>> I just noticed the closeAll method in the HbHelper does not clear the
>>> HbHelper.dataStoreByPersistentClass map. This is at least one reason
>>> that the hbdatastore is not gc-ed.
>>> I have entered a bugzilla for this. This will be solved in the next
>>> release.
>>>
>>> As a workaround you can try the HbHelper.deRegisterDataStore method.
>>> This one should remove the references to the datastore from both
>>> internal HbHelper maps.
>>>
>>> gr. Martin
>>>
>>> PC wrote:
>>>> Hi Martin,
>>>>
>>>> I don't think that I am keeping the ref to old datastore.
>>>> Not sure, but from deep size calculation of referers field, it looks
>>>> that it may be keeping ref to some old objects. So in one instance
>>>> of HbDataStore's referers field's keySet calculates to that much size.
>>>>
>>>> - Parvez
>>>>
>>>> Martin Taal wrote:
>>>>> Thanks :-)
>>>>>
>>>>> The referers field is only used after initialization to support
>>>>> cross-reference queries. If this is not a requirement then it can
>>>>> be cleared. The only problem on the short term is that it is not
>>>>> possible to clear it by subclassing hbdatastore. I will change this
>>>>> in cvs so then the build of the referers hashmap can be prevented.
>>>>>
>>>>> Btw, do you have an idea why there is still a reference to the
>>>>> closed hbdatastores, there must be a reference to them otherwise it
>>>>> would also be gc-ed.
>>>>>
>>>>> gr. Martin
>>>>>
>>>>> PC wrote:
>>>>>> oh yes forgot to mention, that your guess was right that it is
>>>>>> referers field ;-)
>>>>>>
>>>>>>
>>>>>> PC wrote:
>>>>>>> Hi Martin,
>>>>>>>
>>>>>>> I did some more investigation, and it looks that it is referers
>>>>>>> () field of HbDataStore. By the time I created 6 projects, it
>>>>>>> went upto 483mb.
>>>>>>>
>>>>>>> I am enclosing some profiler snapshots in zip file for your
>>>>>>> consideration.
>>>>>>>
>>>>>>> - Parvez
>>>>>>>
>>>>>>> Martin Taal wrote:
>>>>>>>> Hi Parvez,
>>>>>>>> How large is your model? Would the cross reference mapping cause
>>>>>>>> the memory use (it is the referers member in the HbDataStore)?
>>>>>>>>
>>>>>>>> gr. Martin
>>>>>>>>
>>>>>>>> PC wrote:
>>>>>>>>> Hi Martin,
>>>>>>>>>
>>>>>>>>> yes, if I initialize 5 times then it goes to around 500mb or so.
>>>>>>>>> SessionFactory close seems to work as I don't see any error,
>>>>>>>>> otherwise I guess I would have seen "session is already closed"
>>>>>>>>> or something.
>>>>>>>>>
>>>>>>>>> As per initialise time it used to take from 15 - 20 secs. But
>>>>>>>>> now I have changed to use cacheableFile, so that have reduced
>>>>>>>>> to 7 - 10 seconds.
>>>>>>>>>
>>>>>>>>> Regards,
>>>>>>>>> Parvez
>>>>>>>>>
>>>>>>>>> Martin Taal wrote:
>>>>>>>>>> Hi Parvez,
>>>>>>>>>> There is an ERuntime.INSTANCE which keeps track of mapping
>>>>>>>>>> from the ecore to the java classes. But I can't really imagine
>>>>>>>>>> that this one is 100mb large. Also the same epackage can not
>>>>>>>>>> be registered twice.
>>>>>>>>>>
>>>>>>>>>> Internally the hbDataStore keeps a cross reference map which
>>>>>>>>>> can take some space (but 100mb seems a lot). This one is not
>>>>>>>>>> cleared when doing close() on the datastore or the hbhelper.
>>>>>>>>>> Is there still a pointer somewhere to the old datastore?
>>>>>>>>>>
>>>>>>>>>> Btw, the HbHelper.INSTANCE.closeAll() also closes the
>>>>>>>>>> underlying sessionfactory so I am surprised that your
>>>>>>>>>> sessionfactoru.close() works.
>>>>>>>>>>
>>>>>>>>>> So if you create 5 hbdatastores and initialize them then 500Mb
>>>>>>>>>> is used?
>>>>>>>>>>
>>>>>>>>>> gr. Martin
>>>>>>>>>>
>>>>>>>>>> PC wrote:
>>>>>>>>>>> Hi,
>>>>>>>>>>>
>>>>>>>>>>> Every time user creates a project in our application we
>>>>>>>>>>> initialize a new database (embedded HSQLDB) and hence we have
>>>>>>>>>>> to initialize HbDataStore.
>>>>>>>>>>> I have number of emf models and nearly 100mb is consumed on
>>>>>>>>>>> each hbds.initialize();
>>>>>>>>>>> Before user can create another project, existing opened(if
>>>>>>>>>>> any) project/database is closed and session is cleared.
>>>>>>>>>>>
>>>>>>>>>>> These are the steps done on close of project:
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> session.flush(); //session obtained from teneo
>>>>>>>>>>> session.clear();
>>>>>>>>>>> //here shutdown statement is issued for the db and
>>>>>>>>>>> then
>>>>>>>>>>> session.disconnect();
>>>>>>>>>>> session.close();
>>>>>>>>>>> HbHelper.INSTANCE.deRegisterDataStore(_dbName); //
>>>>>>>>>>> _dbName is session factory name
>>>>>>>>>>> HbHelper.INSTANCE.closeAll();
>>>>>>>>>>> sessionFactory.close(); //session factory obtained
>>>>>>>>>>> from teneo
>>>>>>>>>>> Runtime runtime = Runtime.getRuntime();
>>>>>>>>>>> runtime.gc();
>>>>>>>>>>>
>>>>>>>>>>> But it seems that emf objects created during models
>>>>>>>>>>> initialization remains in memory and so if user creates
>>>>>>>>>>> another project then again 100mb is consumed and hence
>>>>>>>>>>> shortly runs out of memory.
>>>>>>>>>>>
>>>>>>>>>>> So just wondering do I have to do something more about clearing?
>>>>>>>>>>>
>>>>>>>>>>> Any suggestions to fix it?
>>>>>>>>>>>
>>>>>>>>>>> Thanks.
>>>>>>>>>>> Parvez
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>
>>>>>
>>>
>>>
>
>
|
|
|
Re: [Teneo] memory consumption keeps building up [message #604676 is a reply to message #79556] |
Thu, 12 April 2007 09:52 ![Go to previous message Go to previous message](theme/Solstice/images/up.png) |
Martin Taal![Friend of Eclipse Friend](/donate/web-api/friends_decorator.php?email=mtaal%40springsite.com) Messages: 5468 Registered: July 2009 |
Senior Member |
|
|
Hi Parvez,
What I do not understand is why the referenceTo takes has such a large size. This class has two
members a boolean and a string (which is a query). Can you check one of the referenceTo's and see
why the string is so large?
gr. Martin
PC wrote:
> Hi Martin,
>
> I think thats because of HbDataStore$ReferenceTo.
>
> 2nd Time: 69 instances of
> org.eclipse.emf.teneo.hibernate.HbDataStore$ReferenceTo
> Deep size 122 MB
>
>
> 3rd Time: 138 instances of
> org.eclipse.emf.teneo.hibernate.HbDataStore$ReferenceTo
> Deep size 213 MB
>
> Regards,
> Parvez
>
>
> Martin Taal wrote:
>> Hi Parvez,
>> Afaiu the issue is that there is still a reference to the hbdatastore
>> somewhere. The deregister should solve the references from the statics
>> of Teneo. You can also try to set all references to the sessionfactory
>> to null before gc-ing. Can you analyse if there are other references
>> to the datastore instance?
>>
>> Yes, I have made the computeReferers method protected in cvs. Although
>> overriding the computereferers method only resolves the symptom.
>> I aim to do a next release early next week.
>>
>> gr. Martin
>>
>> PC wrote:
>>> Thanks Martin.
>>>
>>> Yes, I did add following but didn't help.
>>>
>>>
>>> Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap( ).remove(_dbName);
>>>
>>> Resource.Factory.Registry.INSTANCE.getProtocolToFactoryMap() .remove(HIBERNATE);
>>>
>>>
>>> HbHelper.INSTANCE.deRegisterDataStore(_dbName);
>>> HbHelper.INSTANCE.deRegisterDataStore(HIBERNATE);
>>>
>>>
>>> Earlier you mentioned that
>>>
>>> "referers field is only used after initialization to support
>>> cross-reference queries. If this is not a requirement then it can be
>>> cleared"
>>>
>>> so just wondering (short term/quick solution) if computeReferers()
>>> returns null or empty hashmap (though I know it is private at the
>>> moment and can't be overridden) then that should solve the problem,
>>> is it?, any other issues if you can think of?
>>>
>>> At present, I am using 0.7.5, as you were saying fix in next release,
>>> any idea when that could be?
>>>
>>> Thanks.
>>>
>>> - Parvez
>>>
>>>
>>>
>>> Martin Taal wrote:
>>>> Hi Parvez,
>>>> I just noticed the closeAll method in the HbHelper does not clear
>>>> the HbHelper.dataStoreByPersistentClass map. This is at least one
>>>> reason that the hbdatastore is not gc-ed.
>>>> I have entered a bugzilla for this. This will be solved in the next
>>>> release.
>>>>
>>>> As a workaround you can try the HbHelper.deRegisterDataStore method.
>>>> This one should remove the references to the datastore from both
>>>> internal HbHelper maps.
>>>>
>>>> gr. Martin
>>>>
>>>> PC wrote:
>>>>> Hi Martin,
>>>>>
>>>>> I don't think that I am keeping the ref to old datastore.
>>>>> Not sure, but from deep size calculation of referers field, it
>>>>> looks that it may be keeping ref to some old objects. So in one
>>>>> instance of HbDataStore's referers field's keySet calculates to
>>>>> that much size.
>>>>>
>>>>> - Parvez
>>>>>
>>>>> Martin Taal wrote:
>>>>>> Thanks :-)
>>>>>>
>>>>>> The referers field is only used after initialization to support
>>>>>> cross-reference queries. If this is not a requirement then it can
>>>>>> be cleared. The only problem on the short term is that it is not
>>>>>> possible to clear it by subclassing hbdatastore. I will change
>>>>>> this in cvs so then the build of the referers hashmap can be
>>>>>> prevented.
>>>>>>
>>>>>> Btw, do you have an idea why there is still a reference to the
>>>>>> closed hbdatastores, there must be a reference to them otherwise
>>>>>> it would also be gc-ed.
>>>>>>
>>>>>> gr. Martin
>>>>>>
>>>>>> PC wrote:
>>>>>>> oh yes forgot to mention, that your guess was right that it is
>>>>>>> referers field ;-)
>>>>>>>
>>>>>>>
>>>>>>> PC wrote:
>>>>>>>> Hi Martin,
>>>>>>>>
>>>>>>>> I did some more investigation, and it looks that it is referers
>>>>>>>> () field of HbDataStore. By the time I created 6 projects, it
>>>>>>>> went upto 483mb.
>>>>>>>>
>>>>>>>> I am enclosing some profiler snapshots in zip file for your
>>>>>>>> consideration.
>>>>>>>>
>>>>>>>> - Parvez
>>>>>>>>
>>>>>>>> Martin Taal wrote:
>>>>>>>>> Hi Parvez,
>>>>>>>>> How large is your model? Would the cross reference mapping
>>>>>>>>> cause the memory use (it is the referers member in the
>>>>>>>>> HbDataStore)?
>>>>>>>>>
>>>>>>>>> gr. Martin
>>>>>>>>>
>>>>>>>>> PC wrote:
>>>>>>>>>> Hi Martin,
>>>>>>>>>>
>>>>>>>>>> yes, if I initialize 5 times then it goes to around 500mb or so.
>>>>>>>>>> SessionFactory close seems to work as I don't see any error,
>>>>>>>>>> otherwise I guess I would have seen "session is already
>>>>>>>>>> closed" or something.
>>>>>>>>>>
>>>>>>>>>> As per initialise time it used to take from 15 - 20 secs. But
>>>>>>>>>> now I have changed to use cacheableFile, so that have reduced
>>>>>>>>>> to 7 - 10 seconds.
>>>>>>>>>>
>>>>>>>>>> Regards,
>>>>>>>>>> Parvez
>>>>>>>>>>
>>>>>>>>>> Martin Taal wrote:
>>>>>>>>>>> Hi Parvez,
>>>>>>>>>>> There is an ERuntime.INSTANCE which keeps track of mapping
>>>>>>>>>>> from the ecore to the java classes. But I can't really
>>>>>>>>>>> imagine that this one is 100mb large. Also the same epackage
>>>>>>>>>>> can not be registered twice.
>>>>>>>>>>>
>>>>>>>>>>> Internally the hbDataStore keeps a cross reference map which
>>>>>>>>>>> can take some space (but 100mb seems a lot). This one is not
>>>>>>>>>>> cleared when doing close() on the datastore or the hbhelper.
>>>>>>>>>>> Is there still a pointer somewhere to the old datastore?
>>>>>>>>>>>
>>>>>>>>>>> Btw, the HbHelper.INSTANCE.closeAll() also closes the
>>>>>>>>>>> underlying sessionfactory so I am surprised that your
>>>>>>>>>>> sessionfactoru.close() works.
>>>>>>>>>>>
>>>>>>>>>>> So if you create 5 hbdatastores and initialize them then
>>>>>>>>>>> 500Mb is used?
>>>>>>>>>>>
>>>>>>>>>>> gr. Martin
>>>>>>>>>>>
>>>>>>>>>>> PC wrote:
>>>>>>>>>>>> Hi,
>>>>>>>>>>>>
>>>>>>>>>>>> Every time user creates a project in our application we
>>>>>>>>>>>> initialize a new database (embedded HSQLDB) and hence we
>>>>>>>>>>>> have to initialize HbDataStore.
>>>>>>>>>>>> I have number of emf models and nearly 100mb is consumed on
>>>>>>>>>>>> each hbds.initialize();
>>>>>>>>>>>> Before user can create another project, existing opened(if
>>>>>>>>>>>> any) project/database is closed and session is cleared.
>>>>>>>>>>>>
>>>>>>>>>>>> These are the steps done on close of project:
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> session.flush(); //session obtained from teneo
>>>>>>>>>>>> session.clear();
>>>>>>>>>>>> //here shutdown statement is issued for the db and
>>>>>>>>>>>> then
>>>>>>>>>>>> session.disconnect();
>>>>>>>>>>>> session.close();
>>>>>>>>>>>> HbHelper.INSTANCE.deRegisterDataStore(_dbName); //
>>>>>>>>>>>> _dbName is session factory name
>>>>>>>>>>>> HbHelper.INSTANCE.closeAll();
>>>>>>>>>>>> sessionFactory.close(); //session factory
>>>>>>>>>>>> obtained from teneo
>>>>>>>>>>>> Runtime runtime = Runtime.getRuntime();
>>>>>>>>>>>> runtime.gc();
>>>>>>>>>>>>
>>>>>>>>>>>> But it seems that emf objects created during models
>>>>>>>>>>>> initialization remains in memory and so if user creates
>>>>>>>>>>>> another project then again 100mb is consumed and hence
>>>>>>>>>>>> shortly runs out of memory.
>>>>>>>>>>>>
>>>>>>>>>>>> So just wondering do I have to do something more about
>>>>>>>>>>>> clearing?
>>>>>>>>>>>>
>>>>>>>>>>>> Any suggestions to fix it?
>>>>>>>>>>>>
>>>>>>>>>>>> Thanks.
>>>>>>>>>>>> Parvez
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>
>>>>>>
>>>>
>>>>
>>
>>
--
With Regards, Martin Taal
Springsite/Elver.org
Office: Hardwareweg 4, 3821 BV Amersfoort
Postal: Nassaulaan 7, 3941 EC Doorn
The Netherlands
Tel: +31 (0)84 420 2397
Fax: +31 (0)84 225 9307
Mail: mtaal@springsite.com - mtaal@elver.org
Web: www.springsite.com - www.elver.org
|
|
| |
Re: [Teneo] memory consumption keeps building up [message #605153 is a reply to message #81475] |
Mon, 30 April 2007 11:03 ![Go to previous message Go to previous message](theme/Solstice/images/up.png) |
Martin Taal![Friend of Eclipse Friend](/donate/web-api/friends_decorator.php?email=mtaal%40springsite.com) Messages: 5468 Registered: July 2009 |
Senior Member |
|
|
Hi Parvez,
After some more thought. The deep size is probably caused by the fact that the ReferenceTo is a
non-static inner-class. The referenceTo object itself only contains two string members.
The latest release gives you access to the refers member so you can clear it after initialization,
but this probably won't help as long as there is a separate reference to the hbdatastore (which you
will remove as I understand).
gr. Martin
PC wrote:
> Hi Martin,
> This was showing as deep size but not the size of referenceTo itself.
> However, we did investigation for couple of days now by using 2
> different profilers. And finally it looks that ref to session is kept
> somewhere in GUI code (eclipse – rcp, listeners, menu items etc.) and we
> had a hard time breaking path so that session could be garbage
> collected. Anyway, we intend to change out strategy so that only so that
> only once db is initialized. It won’t solve this problem but will hide it.
> Thanks for your time and feedback.
> Regards,
> Parvez
>
>
> Martin Taal wrote:
>> Hi Parvez,
>> What I do not understand is why the referenceTo takes has such a large
>> size. This class has two members a boolean and a string (which is a
>> query). Can you check one of the referenceTo's and see why the string
>> is so large?
>>
>> gr. Martin
>>
>> PC wrote:
>>> Hi Martin,
>>>
>>> I think thats because of HbDataStore$ReferenceTo.
>>>
>>> 2nd Time: 69 instances of
>>> org.eclipse.emf.teneo.hibernate.HbDataStore$ReferenceTo
>>> Deep size 122 MB
>>>
>>>
>>> 3rd Time: 138 instances of
>>> org.eclipse.emf.teneo.hibernate.HbDataStore$ReferenceTo
>>> Deep size 213 MB
>>>
>>> Regards,
>>> Parvez
>>>
>>>
>>> Martin Taal wrote:
>>>> Hi Parvez,
>>>> Afaiu the issue is that there is still a reference to the
>>>> hbdatastore somewhere. The deregister should solve the references
>>>> from the statics of Teneo. You can also try to set all references to
>>>> the sessionfactory to null before gc-ing. Can you analyse if there
>>>> are other references to the datastore instance?
>>>>
>>>> Yes, I have made the computeReferers method protected in cvs.
>>>> Although overriding the computereferers method only resolves the
>>>> symptom.
>>>> I aim to do a next release early next week.
>>>>
>>>> gr. Martin
>>>>
>>>> PC wrote:
>>>>> Thanks Martin.
>>>>>
>>>>> Yes, I did add following but didn't help.
>>>>>
>>>>>
>>>>> Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap( ).remove(_dbName);
>>>>>
>>>>> Resource.Factory.Registry.INSTANCE.getProtocolToFactoryMap() .remove(HIBERNATE);
>>>>>
>>>>>
>>>>> HbHelper.INSTANCE.deRegisterDataStore(_dbName);
>>>>> HbHelper.INSTANCE.deRegisterDataStore(HIBERNATE);
>>>>>
>>>>>
>>>>> Earlier you mentioned that
>>>>>
>>>>> "referers field is only used after initialization to support
>>>>> cross-reference queries. If this is not a requirement then it can
>>>>> be cleared"
>>>>>
>>>>> so just wondering (short term/quick solution) if computeReferers()
>>>>> returns null or empty hashmap (though I know it is private at the
>>>>> moment and can't be overridden) then that should solve the problem,
>>>>> is it?, any other issues if you can think of?
>>>>>
>>>>> At present, I am using 0.7.5, as you were saying fix in next
>>>>> release, any idea when that could be?
>>>>>
>>>>> Thanks.
>>>>>
>>>>> - Parvez
>>>>>
>>>>>
>>>>>
>>>>> Martin Taal wrote:
>>>>>> Hi Parvez,
>>>>>> I just noticed the closeAll method in the HbHelper does not clear
>>>>>> the HbHelper.dataStoreByPersistentClass map. This is at least one
>>>>>> reason that the hbdatastore is not gc-ed.
>>>>>> I have entered a bugzilla for this. This will be solved in the
>>>>>> next release.
>>>>>>
>>>>>> As a workaround you can try the HbHelper.deRegisterDataStore
>>>>>> method. This one should remove the references to the datastore
>>>>>> from both internal HbHelper maps.
>>>>>>
>>>>>> gr. Martin
>>>>>>
>>>>>> PC wrote:
>>>>>>> Hi Martin,
>>>>>>>
>>>>>>> I don't think that I am keeping the ref to old datastore.
>>>>>>> Not sure, but from deep size calculation of referers field, it
>>>>>>> looks that it may be keeping ref to some old objects. So in one
>>>>>>> instance of HbDataStore's referers field's keySet calculates to
>>>>>>> that much size.
>>>>>>>
>>>>>>> - Parvez
>>>>>>>
>>>>>>> Martin Taal wrote:
>>>>>>>> Thanks :-)
>>>>>>>>
>>>>>>>> The referers field is only used after initialization to support
>>>>>>>> cross-reference queries. If this is not a requirement then it
>>>>>>>> can be cleared. The only problem on the short term is that it is
>>>>>>>> not possible to clear it by subclassing hbdatastore. I will
>>>>>>>> change this in cvs so then the build of the referers hashmap can
>>>>>>>> be prevented.
>>>>>>>>
>>>>>>>> Btw, do you have an idea why there is still a reference to the
>>>>>>>> closed hbdatastores, there must be a reference to them otherwise
>>>>>>>> it would also be gc-ed.
>>>>>>>>
>>>>>>>> gr. Martin
>>>>>>>>
>>>>>>>> PC wrote:
>>>>>>>>> oh yes forgot to mention, that your guess was right that it is
>>>>>>>>> referers field ;-)
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> PC wrote:
>>>>>>>>>> Hi Martin,
>>>>>>>>>>
>>>>>>>>>> I did some more investigation, and it looks that it is
>>>>>>>>>> referers () field of HbDataStore. By the time I created 6
>>>>>>>>>> projects, it went upto 483mb.
>>>>>>>>>>
>>>>>>>>>> I am enclosing some profiler snapshots in zip file for your
>>>>>>>>>> consideration.
>>>>>>>>>>
>>>>>>>>>> - Parvez
>>>>>>>>>>
>>>>>>>>>> Martin Taal wrote:
>>>>>>>>>>> Hi Parvez,
>>>>>>>>>>> How large is your model? Would the cross reference mapping
>>>>>>>>>>> cause the memory use (it is the referers member in the
>>>>>>>>>>> HbDataStore)?
>>>>>>>>>>>
>>>>>>>>>>> gr. Martin
>>>>>>>>>>>
>>>>>>>>>>> PC wrote:
>>>>>>>>>>>> Hi Martin,
>>>>>>>>>>>>
>>>>>>>>>>>> yes, if I initialize 5 times then it goes to around 500mb or
>>>>>>>>>>>> so.
>>>>>>>>>>>> SessionFactory close seems to work as I don't see any error,
>>>>>>>>>>>> otherwise I guess I would have seen "session is already
>>>>>>>>>>>> closed" or something.
>>>>>>>>>>>>
>>>>>>>>>>>> As per initialise time it used to take from 15 - 20 secs.
>>>>>>>>>>>> But now I have changed to use cacheableFile, so that have
>>>>>>>>>>>> reduced to 7 - 10 seconds.
>>>>>>>>>>>>
>>>>>>>>>>>> Regards,
>>>>>>>>>>>> Parvez
>>>>>>>>>>>>
>>>>>>>>>>>> Martin Taal wrote:
>>>>>>>>>>>>> Hi Parvez,
>>>>>>>>>>>>> There is an ERuntime.INSTANCE which keeps track of mapping
>>>>>>>>>>>>> from the ecore to the java classes. But I can't really
>>>>>>>>>>>>> imagine that this one is 100mb large. Also the same
>>>>>>>>>>>>> epackage can not be registered twice.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Internally the hbDataStore keeps a cross reference map
>>>>>>>>>>>>> which can take some space (but 100mb seems a lot). This one
>>>>>>>>>>>>> is not cleared when doing close() on the datastore or the
>>>>>>>>>>>>> hbhelper. Is there still a pointer somewhere to the old
>>>>>>>>>>>>> datastore?
>>>>>>>>>>>>>
>>>>>>>>>>>>> Btw, the HbHelper.INSTANCE.closeAll() also closes the
>>>>>>>>>>>>> underlying sessionfactory so I am surprised that your
>>>>>>>>>>>>> sessionfactoru.close() works.
>>>>>>>>>>>>>
>>>>>>>>>>>>> So if you create 5 hbdatastores and initialize them then
>>>>>>>>>>>>> 500Mb is used?
>>>>>>>>>>>>>
>>>>>>>>>>>>> gr. Martin
>>>>>>>>>>>>>
>>>>>>>>>>>>> PC wrote:
>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Every time user creates a project in our application we
>>>>>>>>>>>>>> initialize a new database (embedded HSQLDB) and hence we
>>>>>>>>>>>>>> have to initialize HbDataStore.
>>>>>>>>>>>>>> I have number of emf models and nearly 100mb is consumed
>>>>>>>>>>>>>> on each hbds.initialize();
>>>>>>>>>>>>>> Before user can create another project, existing opened(if
>>>>>>>>>>>>>> any) project/database is closed and session is cleared.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> These are the steps done on close of project:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> session.flush(); //session obtained from teneo
>>>>>>>>>>>>>> session.clear();
>>>>>>>>>>>>>> //here shutdown statement is issued for the db
>>>>>>>>>>>>>> and then
>>>>>>>>>>>>>> session.disconnect();
>>>>>>>>>>>>>> session.close();
>>>>>>>>>>>>>> HbHelper.INSTANCE.deRegisterDataStore(_dbName);
>>>>>>>>>>>>>> // _dbName is session factory name
>>>>>>>>>>>>>> HbHelper.INSTANCE.closeAll();
>>>>>>>>>>>>>> sessionFactory.close(); //session factory
>>>>>>>>>>>>>> obtained from teneo
>>>>>>>>>>>>>> Runtime runtime = Runtime.getRuntime();
>>>>>>>>>>>>>> runtime.gc();
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> But it seems that emf objects created during models
>>>>>>>>>>>>>> initialization remains in memory and so if user creates
>>>>>>>>>>>>>> another project then again 100mb is consumed and hence
>>>>>>>>>>>>>> shortly runs out of memory.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> So just wondering do I have to do something more about
>>>>>>>>>>>>>> clearing?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Any suggestions to fix it?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Thanks.
>>>>>>>>>>>>>> Parvez
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>
>>>>>>
>>>>
>>>>
>>
>>
>
--
With Regards, Martin Taal
Springsite/Elver.org
Office: Hardwareweg 4, 3821 BV Amersfoort
Postal: Nassaulaan 7, 3941 EC Doorn
The Netherlands
Tel: +31 (0)84 420 2397
Fax: +31 (0)84 225 9307
Mail: mtaal@springsite.com - mtaal@elver.org
Web: www.springsite.com - www.elver.org
|
|
|
Goto Forum:
Current Time: Wed Apr 24 18:00:31 GMT 2024
Powered by FUDForum. Page generated in 0.09520 seconds
|