Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtp (Exim 4.72) (envelope-from ) id 1TUG8F-000380-N0 for pgsql-performance@postgresql.org; Fri, 02 Nov 2012 12:13:51 +0000 Received: from llsd478-a03.servidoresdns.net ([82.223.190.30]) by magus.postgresql.org with esmtp (Exim 4.72) (envelope-from ) id 1TUG88-000622-0M for pgsql-performance@postgresql.org; Fri, 02 Nov 2012 12:13:51 +0000 Received: from [192.168.100.144] (165.Red-83-40-200.dynamicIP.rima-tde.net [83.40.200.165]) by llsd478-a03.servidoresdns.net (Postfix) with ESMTPA id D556D380527 for ; Fri, 2 Nov 2012 13:13:41 +0100 (CET) Message-ID: <5093B900.7020206@ismsolar.com> Date: Fri, 02 Nov 2012 13:13:52 +0100 From: =?ISO-8859-1?Q?Pedro_Jim=E9nez_P=E9rez?= User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:16.0) Gecko/20121026 Thunderbird/16.0.2 MIME-Version: 1.0 To: pgsql-performance@postgresql.org Subject: help with too slow query Content-Type: multipart/alternative; boundary="------------080709070503070206090305" X-Pg-Spam-Score: -1.9 (-) X-Archive-Number: 201211/27 X-Sequence-Number: 48393 This is a multi-part message in MIME format. --------------080709070503070206090305 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: quoted-printable Hello, I have this table definition: CREATE TABLE ism_floatvalues ( id_signal bigint NOT NULL, -- Indica la se=F1al a la que pertenece est= e=20 valor. Clave for=E1nea que referencia al campo id_signal de la tabla=20 ism_signal. time_stamp timestamp without time zone NOT NULL, -- Marca de tiempo=20 que indica fecha y hora correpondiente a este dato. Junto con id_signal=20 forma la clave primaria de esta tabla var_value double precision, -- Almacena el valor concreto de la se=F1a= l=20 en la marca de tiempo espeficicada. CONSTRAINT ism_floatvalues_id_signal_fkey FOREIGN KEY (id_signal) REFERENCES ism_signal (id_signal) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE CASCADE ) WITH ( OIDS=3DFALSE ); CREATE INDEX ism_floatvalues_index_idsignal_timestamp ON ism_floatvalues USING btree (id_signal, time_stamp DESC); ********************************************* Then I run this query.... ********************************************* EXPLAIN analyze select round(CAST(sum(var_value) AS numeric),2) as var_value,=20 date_trunc('month', time_stamp) as time_stamp ,=20 date_part('month',date_trunc('month', time_stamp)) as month,=20 date_part('year',date_trunc('year', time_stamp)) as year from=20 ism_floatvalues where id_signal in ( select id_signal from ism_signal where reference =3D 'EDCA' and id_source= in ( select id_source from ism_installation where id_installation in (select id_installation from ism_groupxinstallation where id_group =3D 10= 1) ) ) and time_stamp > date_trunc('month', current_date - interval '11 months') group by date_trunc('month', time_stamp), month, year order by time_stamp ****************************** And this is the result: ****************************** "GroupAggregate (cost=3D4766541.62..4884678.62 rows=3D39483 width=3D16)=20 (actual time=3D1302542.073..1302713.154 rows=3D10 loops=3D1)" " -> Sort (cost=3D4766541.62..4789932.12 rows=3D9356201 width=3D16) (a= ctual=20 time=3D1302444.324..1302531.447 rows=3D9741 loops=3D1)" " Sort Key: (date_trunc('month'::text,=20 ism_floatvalues.time_stamp)), (date_part('month'::text,=20 date_trunc('month'::text, ism_floatvalues.time_stamp))),=20 (date_part('year'::text, date_trunc('year'::text,=20 ism_floatvalues.time_stamp)))" " Sort Method: quicksort Memory: 941kB" " -> Hash Join (cost=3D545.65..3203518.39 rows=3D9356201 width=3D= 16)=20 (actual time=3D458941.090..1302245.307 rows=3D9741 loops=3D1)" " Hash Cond: (ism_floatvalues.id_signal =3D=20 ism_signal.id_signal)" " -> Seq Scan on ism_floatvalues (cost=3D0.00..2965077.57=20 rows=3D28817098 width=3D24) (actual time=3D453907.600..1002381.652=20 rows=3D29114105 loops=3D1)" " Filter: (time_stamp > date_trunc('month'::text,=20 (('now'::text)::date - '11 mons'::interval)))" " -> Hash (cost=3D544.19..544.19 rows=3D117 width=3D8) (ac= tual=20 time=3D733.782..733.782 rows=3D40 loops=3D1)" " Buckets: 1024 Batches: 1 Memory Usage: 2kB" " -> HashAggregate (cost=3D543.02..544.19 rows=3D117= =20 width=3D8) (actual time=3D733.072..733.412 rows=3D40 loops=3D1)" " -> Hash Semi Join (cost=3D27.61..542.73=20 rows=3D117 width=3D8) (actual time=3D638.175..687.934 rows=3D40 loops=3D1= )" " Hash Cond: (ism_signal.id_source =3D=20 ism_installation.id_source)" " -> Bitmap Heap Scan on ism_signal =20 (cost=3D18.84..530.42 rows=3D850 width=3D16) (actual time=3D243.690..284.= 303=20 rows=3D850 loops=3D1)" " Recheck Cond: ((reference)::text=20 =3D 'EDCA'::text)" " -> Bitmap Index Scan on=20 ism_signal_idx_reference (cost=3D0.00..18.63 rows=3D850 width=3D0) (actu= al=20 time=3D243.429..243.429 rows=3D865 loops=3D1)" " Index Cond:=20 ((reference)::text =3D 'EDCA'::text)" " -> Hash (cost=3D8.27..8.27 rows=3D40=20 width=3D8) (actual time=3D394.393..394.393 rows=3D40 loops=3D1)" " Buckets: 1024 Batches: 1 Memory=20 Usage: 2kB" " -> Hash Semi Join=20 (cost=3D3.25..8.27 rows=3D40 width=3D8) (actual time=3D391.966..394.000 r= ows=3D40=20 loops=3D1)" " Hash Cond:=20 (ism_installation.id_installation =3D ism_groupxinstallation.id_installat= ion)" " -> Seq Scan on=20 ism_installation (cost=3D0.00..4.17 rows=3D117 width=3D16) (actual=20 time=3D0.086..1.354 rows=3D117 loops=3D1)" " -> Hash (cost=3D2.75..2.75=20 rows=3D40 width=3D8) (actual time=3D390.274..390.274 rows=3D40 loops=3D1)= " " Buckets: 1024=20 Batches: 1 Memory Usage: 2kB" " -> Seq Scan on=20 ism_groupxinstallation (cost=3D0.00..2.75 rows=3D40 width=3D8) (actual=20 time=3D389.536..389.903 rows=3D40 loops=3D1)" " Filter:=20 (id_group =3D 101)" "Total runtime: 1302731.013 ms" This query is very slow as you can see, it took about 20 minutos to=20 complete.... Can someone help me to improve performance on this query?? Regards. --=20 Documento sin t=EDtulo **Pedro Jim=E9nez P=E9rez **p.jimenez@ismsolar.com **** =09 **Innovaci=F3n en Sistemas de Monitorizaci=F3n, S.L.** Edificio Hevimar C/ Iv=E1n Pavlov 2 y 4 - Parcela 4 2=AA Planta Local 9 Parque Tecnol=F3gico de Andaluc=EDa 29590 Campanillas (M=E1laga) Tlfno. 952 02 07 13 contacto@ismsolar.com firma_gpt.jpg, 1 kB =09 Antes de imprimir, piensa en tu responsabilidad y compromiso con el=20 MEDIO AMBIENTE! Before printing, think about your responsibility and commitment with the=20 ENVIRONMENT! CL=C1USULA DE CONFIDENCIALIDAD.- Este mensaje, y en su caso, cualquier=20 fichero anexo al mismo, puede contener informaci=F3n confidencial o=20 legalmente protegida (LOPD 15/1999 de 13 de Diciembre), siendo para uso=20 exclusivo del destinatario. No hay renuncia a la confidencialidad o=20 secreto profesional por cualquier transmisi=F3n defectuosa o err=F3nea, y= =20 queda expresamente prohibida su divulgaci=F3n, copia o distribuci=F3n a=20 terceros sin la autorizaci=F3n expresa del remitente. Si ha recibido este= =20 mensaje por error, se ruega lo notifique al remitente enviando un=20 mensaje al correo electr=F3nico contacto@ismsolar.com y proceda=20 inmediatamente al borrado del mensaje original y de todas sus copias.=20 Gracias por su colaboraci=F3n. --------------080709070503070206090305 Content-Type: multipart/related; boundary="------------050902090206000401000104" --------------050902090206000401000104 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Hello,
  I have this table definition:
CREATE TABLE ism_floatvalues
(
  id_signal bigint NOT NULL, -- Indica la señal a la que pertenece este valor. Clave foránea que referencia al campo id_signal de la tabla ism_signal.
  time_stamp timestamp without time zone NOT NULL, -- Marca de tiempo que indica fecha y hora correpondiente a este dato. Junto con id_signal forma la clave primaria de esta tabla
  var_value double precision, -- Almacena el valor concreto de la señal en la marca de tiempo espeficicada.
  CONSTRAINT ism_floatvalues_id_signal_fkey FOREIGN KEY (id_signal)
      REFERENCES ism_signal (id_signal) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE CASCADE
)
WITH (
  OIDS=FALSE
);

CREATE INDEX ism_floatvalues_index_idsignal_timestamp
  ON ism_floatvalues
  USING btree
  (id_signal, time_stamp DESC);



*********************************************

Then I run this query....
*********************************************
EXPLAIN analyze
select round(CAST(sum(var_value) AS numeric),2) as var_value, date_trunc('month', time_stamp) as time_stamp , date_part('month',date_trunc('month', time_stamp)) as month, date_part('year',date_trunc('year', time_stamp)) as year from ism_floatvalues where id_signal in
(
select id_signal from ism_signal where reference = 'EDCA' and id_source in
(
select id_source from ism_installation where id_installation in
(select id_installation from ism_groupxinstallation where id_group = 101)
)
)
and time_stamp > date_trunc('month', current_date - interval '11 months')
group by date_trunc('month', time_stamp), month, year
order by time_stamp

******************************
And this is the result:
******************************

"GroupAggregate  (cost=4766541.62..4884678.62 rows=39483 width=16) (actual time=1302542.073..1302713.154 rows=10 loops=1)"
"  ->  Sort  (cost=4766541.62..4789932.12 rows=9356201 width=16) (actual time=1302444.324..1302531.447 rows=9741 loops=1)"
"        Sort Key: (date_trunc('month'::text, ism_floatvalues.time_stamp)), (date_part('month'::text, date_trunc('month'::text, ism_floatvalues.time_stamp))), (date_part('year'::text, date_trunc('year'::text, ism_floatvalues.time_stamp)))"
"        Sort Method:  quicksort  Memory: 941kB"
"        ->  Hash Join  (cost=545.65..3203518.39 rows=9356201 width=16) (actual time=458941.090..1302245.307 rows=9741 loops=1)"
"              Hash Cond: (ism_floatvalues.id_signal = ism_signal.id_signal)"
"              ->  Seq Scan on ism_floatvalues  (cost=0.00..2965077.57 rows=28817098 width=24) (actual time=453907.600..1002381.652 rows=29114105 loops=1)"
"                    Filter: (time_stamp > date_trunc('month'::text, (('now'::text)::date - '11 mons'::interval)))"
"              ->  Hash  (cost=544.19..544.19 rows=117 width=8) (actual time=733.782..733.782 rows=40 loops=1)"
"                    Buckets: 1024  Batches: 1  Memory Usage: 2kB"
"                    ->  HashAggregate  (cost=543.02..544.19 rows=117 width=8) (actual time=733.072..733.412 rows=40 loops=1)"
"                          ->  Hash Semi Join  (cost=27.61..542.73 rows=117 width=8) (actual time=638.175..687.934 rows=40 loops=1)"
"                                Hash Cond: (ism_signal.id_source = ism_installation.id_source)"
"                                ->  Bitmap Heap Scan on ism_signal  (cost=18.84..530.42 rows=850 width=16) (actual time=243.690..284.303 rows=850 loops=1)"
"                                      Recheck Cond: ((reference)::text = 'EDCA'::text)"
"                                      ->  Bitmap Index Scan on ism_signal_idx_reference  (cost=0.00..18.63 rows=850 width=0) (actual time=243.429..243.429 rows=865 loops=1)"
"                                            Index Cond: ((reference)::text = 'EDCA'::text)"
"                                ->  Hash  (cost=8.27..8.27 rows=40 width=8) (actual time=394.393..394.393 rows=40 loops=1)"
"                                      Buckets: 1024  Batches: 1  Memory Usage: 2kB"
"                                      ->  Hash Semi Join  (cost=3.25..8.27 rows=40 width=8) (actual time=391.966..394.000 rows=40 loops=1)"
"                                            Hash Cond: (ism_installation.id_installation = ism_groupxinstallation.id_installation)"
"                                            ->  Seq Scan on ism_installation  (cost=0.00..4.17 rows=117 width=16) (actual time=0.086..1.354 rows=117 loops=1)"
"                                            ->  Hash  (cost=2.75..2.75 rows=40 width=8) (actual time=390.274..390.274 rows=40 loops=1)"
"                                                  Buckets: 1024  Batches: 1  Memory Usage: 2kB"
"                                                  ->  Seq Scan on ism_groupxinstallation  (cost=0.00..2.75 rows=40 width=8) (actual time=389.536..389.903 rows=40 loops=1)"
"                                                        Filter: (id_group = 101)"
"Total runtime: 1302731.013 ms"


This query is very slow as you can see, it took about 20 minutos to complete.... Can someone help me to improve performance on this query??
Regards.
--
Documento sin título

Pedro Jiménez Pérez
p.jimenez@ismsolar.com

Innovación en Sistemas de Monitorización, S.L.
Edificio Hevimar
C/ Iván Pavlov
2 y 4 - Parcela 4 2ª Planta Local 9
Parque Tecnológico de Andalucía
29590 Campanillas (Málaga)
Tlfno. 952 02 07 13
contacto@ismsolar.com

firma_gpt.jpg, 1 kB

Antes de imprimir, piensa en tu responsabilidad y compromiso con el MEDIO AMBIENTE!

Before printing, think about your responsibility and commitment with the ENVIRONMENT!

CLÁUSULA DE CONFIDENCIALIDAD.- Este mensaje, y en su caso, cualquier fichero anexo al mismo, puede contener información confidencial o legalmente protegida (LOPD 15/1999 de 13 de Diciembre), siendo para uso exclusivo del destinatario. No hay renuncia a la confidencialidad o secreto profesional por cualquier transmisión defectuosa o errónea, y queda expresamente prohibida su divulgación, copia o distribución a terceros sin la autorización expresa del remitente. Si ha recibido este mensaje por error, se ruega lo notifique al remitente enviando un mensaje al correo electrónico contacto@ismsolar.com y proceda inmediatamente al borrado del mensaje original y de todas sus copias. Gracias por su colaboración.

--------------050902090206000401000104 Content-Type: image/gif; name="Logo_Ism.gif" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="Logo_Ism.gif" R0lGODlhZAA0AMQAAPz8+/6xCgUrdubn6J+uydjY2FFsn/zwzsnJyTNTj/zkqvzJVfzaifzR bfLy8/3349LZ5f26JmyDroudvv378rK+1PzBPOrr7cPN3N7g4u/v8Bc7gPb29/n5+czMzP// /yH5BAAAAAAALAAAAABkADQAAAX/4CeOZGmeaKqubOu+cCzPdG3fOPwoTOM3DMWBkisaURTF IhJoOp2WxsEFIRAwpgthwr1eTprt5ApAAQaOMk5heVoWv4WF2ZyuCIL85jvCbPKAAhsGBBwk eIETKBIbGwmENRQNUAxDJhQHPQ8sEoAbDiMZf4GkCQMjiJ4aJhmkEjQUbQERDGo4E4AJHSOd ngRVowIGqJ55BCa4ga8yFAtNFpsnAA8HBw9ELckCCSMDwQIVxIAQInjfwyQcCYKAyzEMz9Ek AAcNc04RFpV3uSMVgehEOFhnTIQ2dp9I/Cvm7sUBJhHskDgga5aFe00iLJBnIlXATqOOkegl YFmyRoDC//HKk2BUQxeTAjAwAW9WpWsAMCmIGUEBCo8jDAQiR0KbSZZC8wQUJYjAqIAuHkDE NqImA6omDjgL4LMjoIBJBWUosbCkQT2p9pwVBuFpDAVNZpKAy3XeNZpNuir8GtQT0T7t1u4h CE4EQQIX3MKIKVFEG7kfKDCYo1GBrQ+TLGD9UJbb2VGKSGAI/OEkB6MfRgty4E1pDGcROB6Y he2BrDdMGtiSKpNsPxGJAVYYUMaBgUdYSuvRAMFTh17DgguDESuA5rkBGoyA3VVS76rWL3cm AYGwngQTMIAqqudUWAIEw0mHygJAm+sj4MqdXZfEJHmzRbQXS5d1MIF5nhiQnP9ygpyS1h8J rKKBYi7YRxt2clGgUVbfRcaEXpzlYgsAGUBwAQYSIJhHaCeNxZQyInBAoQuwNTbbAiPcVYKG OI7w2IDbqFHeHyJ1UIV5G5DToghh5aGSjK7BUBOIGsa2wkUjWAhZiAQySRp7gByzZIij6BIj QfSxwJ8FJcCzpQkPBNDjB7yBOJ4IJCVw2QckCSCmHkQ5EExoH3RAkGcvVNefCHWmAI9edDWW CqKq5bHgB6lss8pJf5G0oKEsyVCTBZfB1ZMJAMCD3wfOrIqpiCNoY8AXGfSZQHKcjnCBBJBk eSgzdLxZ0wIKPEANG7NIRJd2QJqJyiiOnMMHn+NwEuX/W068SdETTjQgj22zcPQBABBggMG0 IzhwILSP/CUCBgkkIMEuKxgJgSEzxCTTnpksAAcDHIG7aAwXlAvBeimUAcCeauw5AwBbydmY CgrQwawJGoDCAQC7cJABvgLtosHCA5QMHHEfZAAAB6t4bEgaHXhQaAcgywCAvtkd4LAIACjR 7c4pu6jBKRkUUAAJBRDdgQNGF7CKByYXAMAFpxRwASjExfwBBwWMZUPFbjQgRDUH7FQRLSoM cLQGVn9w9SmhjJW1Axpc/YEHTn9AnANfqA3KBSSL4AHCNTzAAB3cIp7RAhOjOgK90iQMOAqQ l7BKEUkswS0UUhzh+eeRld0D/xBCAA366ainrvrqrLfu+uuwxx47x3RTPUAGuOfedO64lzzA 1Rx0YLrs9fF9u9EeJI/A8sw37/zzyye/++8OVE48CR0MXbTyzSfv/ffghy8+98xLn8HvG8ee /fbdj+++B9DH7/z37SetQc2pr6xB0dG/7339uztfyS5AQN/prmnkgx7eMqAB66WObfAbX/+6 NoD7LYwGC+OA8YpWgARGr2vVYx3T4IcA7uENDcMrwsouwEESls9qDvycxzroAQbGsHW0U1sH XziAGx7hgteTBsvURsIT+jCIrcseEUtotRQicXVKLEAJM0C4JxKPAzpsohWRCID9JQ1/W5wd ay6QvgkwXm9lITRBCAAAOw== --------------050902090206000401000104 Content-Type: image/jpeg; name="graphics2" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="graphics2" iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGOfPtRkwAACjtp Q0NQaWNtAAB42p1Td1iT9xY+3/dlD1ZC2PCxl2yBACIjrAjIEFmiEJIAYYQQEkDFhYgKVhQV EZxIVcSC1QpInYjioCi4Z0GKiFqLVVw47h/cp7V9eu/t7fvX+7znnOf8znnPD4AREiaR5qJq ADlShTw62B+PT0jEyb2AAhVI4AQgEObLwmcFxQAA8AN5eH50sD/8Aa9vAAIAcNUuJBLH4f+D ulAmVwAgkQDgIhLnCwGQUgDILlTIFADIGACwU7NkCgCUAABseXxCIgCqDQDs9Ek+BQDYqZPc FwDYohypCACNAQCZKEckAkC7AGBVgVIsAsDCAKCsQCIuBMCuAYBZtjJHAoC9BQB2jliQD0Bg AICZQizMACA4AgBDHhPNAyBMA6Aw0r/gqV9whbhIAQDAy5XNl0vSMxS4ldAad/Lw4OIh4sJs sUJhFykQZgnkIpyXmyMTSOcDTM4MAAAa+dHB/jg/kOfm5OHmZuds7/TFov5r8G8iPiHx3/68 jAIEABBOz+/aX+Xl1gNwxwGwdb9rqVsA2lYAaN/5XTPbCaBaCtB6+Yt5OPxAHp6hUMg8HRwK CwvtJWKhvTDjiz7/M+Fv4It+9vxAHv7bevAAcZpAma3Ao4P9cWFudq5SjufLBEIxbvfnI/7H hX/9jinR4jSxXCwVivFYibhQIk3HeblSkUQhyZXiEul/MvEflv0Jk3cNAKyGT8BOtge1y2zA fu4BAosOWNJ2AEB+8y2MGguRABBnNDJ59wAAk7/5j0ArAQDNl6TjAAC86BhcqJQXTMYIAABE oIEqsEEHDMEUrMAOnMEdvMAXAmEGREAMJMA8EEIG5IAcCqEYlkEZVMA62AS1sAMaoBGa4RC0 wTE4DefgElyB63AXBmAYnsIYvIYJBEHICBNhITqIEWKO2CLOCBeZjgQiYUg0koCkIOmIFFEi xchypAKpQmqRXUgj8i1yFDmNXED6kNvIIDKK/Iq8RzGUgbJRA9QCdUC5qB8aisagc9F0NA9d gJaia9EatB49gLaip9FL6HV0AH2KjmOA0TEOZozZYVyMh0VgiVgaJscWY+VYNVaPNWMdWDd2 FRvAnmHvCCQCi4AT7AhehBDCbIKQkEdYTFhDqCXsI7QSughXCYOEMcInIpOoT7QlehL5xHhi OrGQWEasJu4hHiGeJV4nDhNfk0gkDsmS5E4KISWQMkkLSWtI20gtpFOkPtIQaZxMJuuQbcne 5AiygKwgl5G3kA+QT5L7ycPktxQ6xYjiTAmiJFKklBJKNWU/5QSlnzJCmaCqUc2pntQIqog6 n1pJbaB2UC9Th6kTNHWaJc2bFkPLpC2j1dCaaWdp92gv6XS6Cd2DHkWX0JfSa+gH6efpg/R3 DA2GDYPHSGIoGWsZexmnGLcZL5lMpgXTl5nIVDDXMhuZZ5gPmG9VWCr2KnwVkcoSlTqVVpV+ leeqVFVzVT/VeaoLVKtVD6teVn2mRlWzUOOpCdQWq9WpHVW7qTauzlJ3Uo9Qz1Ffo75f/YL6 Yw2yhoVGoIZIo1Rjt8YZjSEWxjJl8VhC1nJWA+ssa5hNYluy+exMdgX7G3Yve0xTQ3OqZqxm kWad5nHNAQ7GseDwOdmcSs4hzg3Oey0DLT8tsdZqrWatfq032nravtpi7XLtFu3r2u91cJ1A nSyd9TptOvd1Cbo2ulG6hbrbdc/qPtNj63npCfXK9Q7p3dFH9W30o/UX6u/W79EfNzA0CDaQ GWwxOGPwzJBj6GuYabjR8IThqBHLaLqRxGij0UmjJ7gm7odn4zV4Fz5mrG8cYqw03mXcazxh Ymky26TEpMXkvinNlGuaZrrRtNN0zMzILNys2KzJ7I451ZxrnmG+2bzb/I2FpUWcxUqLNovH ltqWfMsFlk2W96yYVj5WeVb1VtesSdZc6yzrbdZXbFAbV5sMmzqby7aorZutxHabbd8U4hSP KdIp9VNu2jHs/OwK7JrsBu059mH2JfZt9s8dzBwSHdY7dDt8cnR1zHZscLzrpOE0w6nEqcPp V2cbZ6FznfM1F6ZLkMsSl3aXF1Ntp4qnbp96y5XlGu660rXT9aObu5vcrdlt1N3MPcV9q/tN LpsbyV3DPe9B9PD3WOJxzOOdp5unwvOQ5y9edl5ZXvu9Hk+znCae1jBtyNvEW+C9y3tgOj49 ZfrO6QM+xj4Cn3qfh76mviLfPb4jftZ+mX4H/J77O/rL/Y/4v+F58hbxTgVgAcEB5QG9gRqB swNrAx8EmQSlBzUFjQW7Bi8MPhVCDAkNWR9yk2/AF/Ib+WMz3GcsmtEVygidFVob+jDMJkwe 1hGOhs8I3xB+b6b5TOnMtgiI4EdsiLgfaRmZF/l9FCkqMqou6lG0U3RxdPcs1qzkWftnvY7x j6mMuTvbarZydmesamxSbGPsm7iAuKq4gXiH+EXxlxJ0EyQJ7YnkxNjEPYnjcwLnbJoznOSa VJZ0Y67l3KK5F+bpzsuedzxZNVmQfDiFmBKXsj/lgyBCUC8YT+Wnbk0dE/KEm4VPRb6ijaJR sbe4SjyS5p1WlfY43Tt9Q/pohk9GdcYzCU9SK3mRGZK5I/NNVkTW3qzP2XHZLTmUnJSco1IN aZa0K9cwtyi3T2YrK5MN5Hnmbcobk4fK9+Qj+XPz2xVshUzRo7RSrlAOFkwvqCt4WxhbeLhI vUha1DPfZv7q+SMLghZ8vZCwULiws9i4eFnx4CK/RbsWI4tTF3cuMV1SumR4afDSfctoy7KW /VDiWFJV8mp53PKOUoPSpaVDK4JXNJWplMnLbq70WrljFWGVZFXvapfVW1Z/KheVX6xwrKiu +LBGuObiV05f1Xz1eW3a2t5Kt8rt60jrpOturPdZv69KvWpB1dCG8A2tG/GN5RtfbUredKF6 avWOzbTNys0DNWE17VvMtqzb8qE2o/Z6nX9dy1b9rau3vtkm2ta/3Xd78w6DHRU73u+U7Ly1 K3hXa71FffVu0u6C3Y8aYhu6v+Z+3bhHd0/Fno97pXsH9kXv62p0b2zcr7+/sgltUjaNHkg6 cOWbgG/am+2ad7VwWioOwkHlwSffpnx741Dooc7D3MPN35l/t/UI60h5K9I6v3WsLaNtoD2h ve/ojKOdHV4dR763/37vMeNjdcc1j1eeoJ0oPfH55IKT46dkp56dTj891JncefdM/JlrXVFd vWdDz54/F3TuTLdf98nz3uePXfC8cPQi92LbJbdLrT2uPUd+cP3hSK9bb+tl98vtVzyudPRN 6zvR79N/+mrA1XPX+NcuXZ95ve/G7Bu3bibdHLgluvX4dvbtF3cK7kzcXXqPeK/8vtr96gf6 D+p/tP6xZcBt4PhgwGDPw1kP7w4Jh57+lP/Th+HSR8xH1SNGI42PnR8fGw0avfJkzpPhp7Kn E8/Kflb/eetzq+ff/eL7S89Y/NjwC/mLz7+ueanzcu+rqa86xyPHH7zOeT3xpvytztt977jv ut/HvR+ZKPxA/lDz0fpjx6fQT/c+53z+/C/3hPP7JNX7DgAAACBjSFJNAAB6JQAAgIMAAPn/ AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsT AAALEwEAmpwYAAAGe0lEQVR42s2Xy28b1xXGv3nPcB4akqJEkZZEKZIlyxUiI27itIlFOagC ryojaIsCTSDBqywCWH+BIiBZdCVl3YVVoN0YDWC4TRduUNFoEzgO2rA2JcVRZFIP6kFR5HDI 4ZDDeXQRJIgdi1ICF+4FLjCbc77fed07l/A8D09zkU9V/f8BgP6hhgMXBuJgvwrBtm00Gg14 hAeGYkBaZObLW19mjuOHOG4PhM6HJtqH2ucIlYiZDVMTWTEht8gTjI+B6ZrQ6zpq9RokQoKd tbXs7eyZUrJ0JMSxAIIvBGPh0XC6FCshHAzj1c5XEWbDIAkySVDECM/xoEgKW8YWFpYXYOwa 4D/jFx788cHUEwGITcYWq89W4+3Rdlw+dRkcxWFpbwlL60vJUq0UC4VD6nOR59Atd2OluIIP Vj9Ada0KL+WNFdPFmLfnZWrbtcQPAgiOBePCqLDodrtQRRVluwy9pkMyJTTWGhmU8Z7QK8wR Jwhojgae5sERHIqFIuQ9WTP+Y2jan7Wew/wfOQXsM+xV02/C8Azoto4QF8KQPAShKMBKWVO5 3+Xm7XU7GfEiOBs6iy6pCyAAkiVhOqbq6m7TMjQFEIfFCYuyYg23AYmWEPFFINIi9nP7MNfM hHZTSwAAsUNMZ7IZ6KYODhwEQoCne2ikGwn9lp5optF0DI17xnV5VJoiQc40ehqxgnuAil1B W74d3qb3TWSiI6pyXYa+VYJma4ADEOuAs2Y/mSb0/VRQ+Sh/xd+vzgTkIMyUOZ/6w9I0AEgn pBGx0zfhjwZA8xSqdhWVegXVYjVTSRgLrWOBuKD45krp0iX9bjnTNAORwY6RckifizwTAS1S UBQFP+ocBi2TtwrXim93jIYXPF9+Rt8qz35tU9mqJAEkH3UsvyLGfj3/q8Xxyz+Lr+SWIfp9 cwAuNQXY/nwn2XUxOqWcltJ6WxE/P/06CBcQt/l48IKaOLilJQA0Tav/pKoKw9xMy0vSlYPO PVwaeg2f3PsILW5goms8Gt+4mX2oJ77ThKzMxGtqBZ0nohgIn8SKm4I6KEM67Zs7slYAaJWM ywPCFWXIB03Ko0aa6G/vRy1SQctp5Ts+HgIInQ2o4iA3J4Z5tIgyNupp7NpbEIMC5H5+JDrR NnkUwP6dwnWv7CY4jwbJeviw8FcQtI1AmwKujxw5cbFj8lAAPspNcp20Kig0St4BbuxfQ90z wNZJMHU6w8nsnNznU4+CMO7Xp91dD5RLouwUUIEGigNohQDjJ2KHArA0DZHjIQsSgj4//GwL eJdD7YGlabeNMfPz2phXQ+wogOzNvWR1ub5AagQCXADtQhsUToZAcWDchyf/IQBrp7FA5miN sACVbYHCynALLiop8730+9nMzqf5ZGWrmjxMOPJi6OrX3+UlY9pYrWrQAc7iQBoeyDwFK+cs HAqw+fGupqeq08QuCdd1wICEXbUyDJj5o6J++Y1z8YHzvd/Ud/ejgsZa7Gxdryasci1R36kn qvfrs5m/ZzPftnvsQXTxnZcX5VEq3iIpyOUPkt1230iU68a/tz9BySxBIVtA6Rx6iVOz7175 7dsAMD7zk8XW55V4vpLD88p59Lb24VPjH8hzu2A8GuWUhfSN3bHUX1YT39Z67FGcv6fNSl0d 8WrMTLaGAjFD3Edn4BwGzvwGq7VlfGHchbCtgF4jAABvzP5yUj7DxP2DIsaV19HBdGK9sYa6 oaGNDEDbMlDfdK4/Kn5oBgDgwlvnrra9JMaCQ2rc18qhQmgQSQUkSJh2FbnVPLI3yrNCWZ53 BivprvFW1R/0g6M5WJ4FyzMhQYVRNpC/bWDl2kZP8sZK5lGdQ2/DzX/tTJv33YxdsyDRPvSw /fDTKliKBktRYCkGtmshe7CpChKr8hwLhiLBkyzamXb0MCchEgIaezYKycrs48SbAqx+vK7t 3M3/3lvlUDwooVY3wTg8GJuFYzuQPBUCRCy/v54xv3DnnRwB2mEgegoER0bdqiFfyKO2QmjZ ZO7QJm56Hd/5073E+akfT/Xp3XN2tKzaTAE0QYHxFNg7NTjFr3qgkKrOdp2iJy0e6pqZhmU0 wLsS7F0Ga/9cn059uKodpnHsv+IXXns2znIcAMDxGjAME8WNUmYjuZMBgFfefHGya7jjqrZZ HitslGA7LkoHJS31t9VkU8ee5z2xPfyL3s++r80TfRnt3Sld+r42xy7B/2o99bfhUwf4L18h RlU10bMgAAAAAElFTkSuQmCC --------------050902090206000401000104-- --------------080709070503070206090305--