From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp0 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id SPfbOavFz17/TQAA0tVLHw (envelope-from ) for ; Thu, 28 May 2020 14:07:39 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp0 with LMTPS id SFB9NavFz14mZgAA1q6Kng (envelope-from ) for ; Thu, 28 May 2020 14:07:39 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 2200E94038F for ; Thu, 28 May 2020 14:07:39 +0000 (UTC) Received: from localhost ([::1]:57730 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jeJC4-0004d7-NJ for larch@yhetil.org; Thu, 28 May 2020 10:07:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47912) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jeJBe-0004ay-Ex for emacs-orgmode@gnu.org; Thu, 28 May 2020 10:07:10 -0400 Received: from mail-yb1-xb36.google.com ([2607:f8b0:4864:20::b36]:36152) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jeJBd-0006Jq-DF for emacs-orgmode@gnu.org; Thu, 28 May 2020 10:07:10 -0400 Received: by mail-yb1-xb36.google.com with SMTP id y18so110242ybb.3 for ; Thu, 28 May 2020 07:07:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=zy4x5d9eMd1dz93NoHbqAj8+bVN3zmkkbmbxXsmbMfY=; b=AnP7wUFfe09vMdaVGmYfDiVMkChooyeYvJ19tcO9eDnaPK4VH1Em5wCtRUlnIKFTw6 5cgn38R0nYdzSl6UHEi013nJBycusLIHbSo055d/Kq0CQcIPOaWSz/G1aYU126zo+92W yfcXQbepmbvrEgc0LXPUpnP+1hYM1S3bYJP2/QtBPN4nM/tlvFpJDTdRTI8rzu1t0uL4 5xZZNygazEsnP7rLWjh82FQObgfIX3qIRJyBRBvYKbLjH7dvKZ247GcjJEiOq7e8G10E ODw74tdYrVzzhX+47NhbVzEBRor0apKV0jU9wkPx9AzDHWMYDP9yp0/ry4LC/qjhSA4C Y3sQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=zy4x5d9eMd1dz93NoHbqAj8+bVN3zmkkbmbxXsmbMfY=; b=W2fE0HM9AoNIH5UGV3NU20gT0Cfzn8HAuJAct70E7jjoYPcklaCE195+o7JnIkdfFJ V5QUqWy41sudIn1KPs2IUdgKhr61TsYMQ9YD+sXH99AAS9Zdc0t27t8t9+NA7G/FlVNl ZhnSwLNd6mpI6gXXeyEzF6qmtKxSY/kPr7TbhqRcGO3V1itydKt3HNdUCRi3FutboUut IHi8HJSjJC1EnstoT1CPPSIZg3ikldyh+366yhC03QN303Q2LLWJVhKhT0bdFPGLNHnh a1DYbF9Fc9lckDD9fPimi8T4C2dGxaOa/I3NTPvOI/jTLHswUs0X7pdwy72py2XN9UnG w7ZA== X-Gm-Message-State: AOAM531zLu/ZlZvbQdREQVnoyOj9DgQH3/nF4lMdK1vTPzPh4ET45HCr N4aHhsB+C2WpTXS1S6pjewkLMx7TmT9oZo4NxEM= X-Google-Smtp-Source: ABdhPJzecWxfHW3ETXfd07cEEV6ykT5VWbDmtFYx7VmWcpEfIdWlXg9H9oZGmh3rlYMnIV4CK/VSERot+5x8FBv3CkI= X-Received: by 2002:a25:3343:: with SMTP id z64mr5146863ybz.272.1590674828281; Thu, 28 May 2020 07:07:08 -0700 (PDT) MIME-Version: 1.0 References: <874ks0aotm.fsf@gmail.com> <875zcgz21l.fsf@nicolasgoaziou.fr> In-Reply-To: <875zcgz21l.fsf@nicolasgoaziou.fr> From: Ken Mankoff Date: Thu, 28 May 2020 07:06:30 -0700 Message-ID: Subject: Re: Help speeding up Org iCal export To: Ken Mankoff , Org-mode Content-Type: multipart/alternative; boundary="00000000000017d0d705a6b5d85a" Received-SPF: pass client-ip=2607:f8b0:4864:20::b36; envelope-from=mankoff@gmail.com; helo=mail-yb1-xb36.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-orgmode@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+larch=yhetil.org@gnu.org Sender: "Emacs-orgmode" X-Scanner: scn0 Authentication-Results: aspmx1.migadu.com; dkim=pass header.d=gmail.com header.s=20161025 header.b=AnP7wUFf; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (aspmx1.migadu.com: domain of emacs-orgmode-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=emacs-orgmode-bounces@gnu.org X-Spam-Score: -1.61 X-TUID: PY3BUwbhX/E/ --00000000000017d0d705a6b5d85a Content-Type: text/plain; charset="UTF-8" Hi Nicolas, Thank you for providing suggestions about the appropriate tool. I've profiled it, examined the variables you suggested, but am not sure what next steps to take. I hope it is OK that I post questions about this on this list... On Thu, May 28, 2020 at 5:17 AM Nicolas Goaziou wrote: > Ken Mankoff writes: > > > When I eval `(org-icalendar-combine-agenda-files nil)`, it takes about > > 15 seconds. > > OK. You may want to profile this, or use ELP. > Output from the profiler is here: https://pastebin.com/QvL9w69R but the key lines seems to be: - org-icalendar-combine-agenda-files 15540 83% - apply 15540 83% - org-icalendar--combine-files 15540 83% - mapconcat 15536 83% - # 15536 83% - org-export-as 15162 81% - org-export-data 6493 34% - mapconcat 6493 34% - # 6493 34% - org-export-data 6493 34% - mapconcat 6164 33% - # 6160 33% - org-export-data 6156 33% - mapconcat 5674 30% with org-export-data and mapconcat repeating, AND - mapc 5672 30% - # 5672 30% - mapc 5672 30% - # 5668 30% - # 4392 23% - org-id-find 4392 23% - org-id-update-id-locations 4376 23% - org-map-entries 3696 19% - org-scan-tags 3668 19% + # 990 5% + # 879 4% + # 830 4% > Some strange messages in the *Messages* buffer include: > > > > 22 files scanned, 7 files contains IDs and in total 23 IDs found. > > You may have set `org-icalendar-store-UID' somehow. > It is set to nil. I have only the *scratch* buffer open, and no other buffers (although some where open earlier in this emacs session). > > But my `org-agenda-files` variable only contains 12 files and no > > #+INCLUDE statements. > > ID scanning is not limited to agenda files. Org also scans files known > to contain ID. E.g., if, during the session, you insert an ID in > "foo.org", later scans (in the same session) will include "foo.org". > > See `org-id-files' (internal variable), and `org-id-extra-files', which > may contain even more files. > `org-id-files` contained a subset of my agenda files plus a few extra (total: 7 files, and these 7 plus my agenda files do not sum to 22). When I set it to nil, nothing significant changed, but it was reset after running `org-icalendar-combine-agenda-files` again. `org-id-extra-files` was set to org-agenda-text-search-extra-files. When I set it to nil, nothing significant changed. It does not get reset when `org-icalendar-combine-agenda-files` is run. -k. --00000000000017d0d705a6b5d85a Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: base64 PGRpdiBkaXI9Imx0ciI+PGRpdj5IaSBOaWNvbGFzLDwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+ VGhhbmsgeW91IGZvciBwcm92aWRpbmcgc3VnZ2VzdGlvbnMgYWJvdXQgdGhlIGFwcHJvcHJpYXRl IHRvb2wuIEkmIzM5O3ZlIHByb2ZpbGVkIGl0LCBleGFtaW5lZCB0aGUgdmFyaWFibGVzIHlvdSBz dWdnZXN0ZWQsIGJ1dCBhbSBub3Qgc3VyZSB3aGF0IG5leHQgc3RlcHMgdG8gdGFrZS4gSSBob3Bl IGl0IGlzIE9LIHRoYXQgSSBwb3N0IHF1ZXN0aW9ucyBhYm91dCB0aGlzIG9uIHRoaXMgbGlzdC4u Ljxicj48L2Rpdj48YnI+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPjxkaXYgZGlyPSJsdHIiIGNs YXNzPSJnbWFpbF9hdHRyIj5PbiBUaHUsIE1heSAyOCwgMjAyMCBhdCA1OjE3IEFNIE5pY29sYXMg R29hemlvdSAmbHQ7PGEgaHJlZj0ibWFpbHRvOm1haWxAbmljb2xhc2dvYXppb3UuZnIiPm1haWxA bmljb2xhc2dvYXppb3UuZnI8L2E+Jmd0OyB3cm90ZTo8YnI+PC9kaXY+PGJsb2NrcXVvdGUgY2xh c3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjBweCAwcHggMHB4IDAuOGV4O2JvcmRlci1s ZWZ0OjFweCBzb2xpZCByZ2IoMjA0LDIwNCwyMDQpO3BhZGRpbmctbGVmdDoxZXgiPg0KS2VuIE1h bmtvZmYgJmx0OzxhIGhyZWY9Im1haWx0bzptYW5rb2ZmQGdtYWlsLmNvbSIgdGFyZ2V0PSJfYmxh bmsiPm1hbmtvZmZAZ21haWwuY29tPC9hPiZndDsgd3JpdGVzOjxicj4NCjxicj4NCiZndDsgV2hl biBJIGV2YWwgYChvcmctaWNhbGVuZGFyLWNvbWJpbmUtYWdlbmRhLWZpbGVzIG5pbClgLCBpdCB0 YWtlcyBhYm91dDxicj4NCiZndDsgMTUgc2Vjb25kcy48YnI+DQo8YnI+DQpPSy4gWW91IG1heSB3 YW50IHRvIHByb2ZpbGUgdGhpcywgb3IgdXNlIEVMUC48YnI+PC9ibG9ja3F1b3RlPjxkaXY+PGJy PjwvZGl2PjxkaXY+T3V0cHV0IGZyb20gdGhlIHByb2ZpbGVyIGlzIGhlcmU6IDxhIGhyZWY9Imh0 dHBzOi8vcGFzdGViaW4uY29tL1F2TDl3NjlSIj5odHRwczovL3Bhc3RlYmluLmNvbS9Rdkw5dzY5 UjwvYT4gYnV0IHRoZSBrZXkgbGluZXMgc2VlbXMgdG8gYmU6PC9kaXY+PGRpdj48YnI+PC9kaXY+ PGRpdj48ZGl2IGNsYXNzPSJnbWFpbC1kZTEiPsKgIMKgIMKgIC0gb3JnLWljYWxlbmRhci1jb21i aW5lLWFnZW5kYS1maWxlcyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoDE1NTQwIMKg ODMlPC9kaXY+DQo8ZGl2IGNsYXNzPSJnbWFpbC1kZTEiPsKgIMKgIMKgIMKgLSBhcHBseSDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoDE1NTQwIMKgODMlPC9kaXY+DQo8ZGl2IGNsYXNzPSJnbWFpbC1kZTEiPsKg IMKgIMKgIMKgIC0gb3JnLWljYWxlbmRhci0tY29tYmluZS1maWxlcyDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoDE1NTQwIMKgODMlPC9kaXY+DQo8ZGl2IGNsYXNzPSJnbWFp bC1kZTIiPsKgIMKgIMKgIMKgIMKgLSBtYXBjb25jYXQgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAxNTUzNiDCoDgzJTwvZGl2 Pg0KPGRpdiBjbGFzcz0iZ21haWwtZGUxIj7CoCDCoCDCoCDCoCDCoCAtICMmbHQ7Y29tcGlsZWQg MHgxNTg3OWIxJmd0OyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCAxNTUzNiDCoDgzJTwvZGl2Pg0KPGRpdiBjbGFzcz0iZ21haWwtZGUxIj7CoCDCoCDCoCDCoCDC oCDCoC0gb3JnLWV4cG9ydC1hcyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoDE1MTYyIMKgODElPC9kaXY+DQo8ZGl2IGNsYXNzPSJnbWFpbC1k ZTEiPsKgIMKgIMKgIMKgIMKgIMKgIC0gb3JnLWV4cG9ydC1kYXRhIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgNjQ5MyDCoDM0JTwvZGl2Pg0KPGRp diBjbGFzcz0iZ21haWwtZGUxIj7CoCDCoCDCoCDCoCDCoCDCoCDCoC0gbWFwY29uY2F0IMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIDY0 OTMgwqAzNCU8L2Rpdj4NCjxkaXYgY2xhc3M9ImdtYWlsLWRlMiI+wqAgwqAgwqAgwqAgwqAgwqAg wqAgLSAjJmx0O2NvbXBpbGVkIDB4MjViYWY5ZCZndDsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqA2NDkzIMKgMzQlPC9kaXY+DQo8ZGl2IGNsYXNzPSJnbWFpbC1kZTEi PsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgLSBvcmctZXhwb3J0LWRhdGEgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgNjQ5MyDCoDM0JTwvZGl2Pg0KPGRpdiBj bGFzcz0iZ21haWwtZGUxIj7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAtIG1hcGNvbmNhdCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoDYxNjQg wqAzMyU8L2Rpdj4NCjxkaXYgY2xhc3M9ImdtYWlsLWRlMSI+wqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAtICMmbHQ7Y29tcGlsZWQgMHgyMjg2NGI1Jmd0OyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCA2MTYwIMKgMzMlPC9kaXY+DQo8ZGl2IGNsYXNzPSJnbWFpbC1kZTEiPsKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIC0gb3JnLWV4cG9ydC1kYXRhIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgNjE1NiDCoDMzJTwvZGl2Pg0KPGRpdiBjbGFz cz0iZ21haWwtZGUyIj7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoC0gbWFwY29uY2F0IMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIDU2NzQgwqAz MCU8L2Rpdj4NCjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+d2l0aCBvcmctZXhwb3J0LWRhdGEg YW5kIG1hcGNvbmNhdCByZXBlYXRpbmcsIEFORDwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+wqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLSBtYXBjIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIDU2NzIgwqAzMCU8YnI+wqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAtICMmbHQ7Y29tcGlsZWQgMHgzMTI5YzkxJmd0 OyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCA1NjcyIMKgMzAlPGJyPsKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIC0gbWFwYyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCA1NjcyIMKgMzAlPGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgLSAjJmx0O2NvbXBpbGVkIDB4MzEyOWM5MSZndDsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgNTY2OCDCoDMwJTxicj7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCAtICMmbHQ7Y29tcGlsZWQgMHgxNWIyMTQxJmd0OyDCoCDCoCDCoCDCoCDCoCDC oCDCoCA0MzkyIMKgMjMlPGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgLSBvcmctaWQtZmluZCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCA0Mzky IMKgMjMlPGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIC0g b3JnLWlkLXVwZGF0ZS1pZC1sb2NhdGlvbnMgwqAgwqAgwqAgwqAgwqAgwqAgwqAgNDM3NiDCoDIz JTxicj7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoC0gb3Jn LW1hcC1lbnRyaWVzIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIDM2OTYgwqAxOSU8YnI+wqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLSBvcmctc2Nhbi10YWdz IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgMzY2OCDCoDE5JTxicj7CoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCsgIyZsdDtsYW1iZGEgMHgyMmM1MjMz ZWEmZ3Q7IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgOTkwIMKgIDUlPGJyPsKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKyAjJmx0O2xhbWJkYSAweDIyYzUy MzNlYSZndDsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqA4NzkgwqAgNCU8YnI+wqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqArICMmbHQ7bGFtYmRhIDB4MjJj NTIzM2VhJmd0OyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoDgzMCDCoCA0JTxicj48L2Rpdj48YnI+ PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPjxicj48L2Rpdj48ZGl2IGNsYXNzPSJnbWFp bF9xdW90ZSI+PGJyPjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX3F1b3RlIj4mZ3Q7IFNvbWUgc3Ry YW5nZSBtZXNzYWdlcyBpbiB0aGUgKk1lc3NhZ2VzKiBidWZmZXIgaW5jbHVkZTo8YnI+PGJsb2Nr cXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjBweCAwcHggMHB4IDAuOGV4 O2JvcmRlci1sZWZ0OjFweCBzb2xpZCByZ2IoMjA0LDIwNCwyMDQpO3BhZGRpbmctbGVmdDoxZXgi Pg0KJmd0Ozxicj4NCiZndDsgMjIgZmlsZXMgc2Nhbm5lZCwgNyBmaWxlcyBjb250YWlucyBJRHMg YW5kIGluIHRvdGFsIDIzIElEcyBmb3VuZC48YnI+DQo8YnI+DQpZb3UgbWF5IGhhdmUgc2V0IGBv cmctaWNhbGVuZGFyLXN0b3JlLVVJRCYjMzk7IHNvbWVob3cuPGJyPjwvYmxvY2txdW90ZT48ZGl2 Pjxicj48L2Rpdj48ZGl2Pkl0IGlzIHNldCB0byBuaWwuIEkgaGF2ZSBvbmx5IHRoZSAqc2NyYXRj aCogYnVmZmVyIG9wZW4sIGFuZCBubyBvdGhlciBidWZmZXJzIChhbHRob3VnaCBzb21lIHdoZXJl IG9wZW4gZWFybGllciBpbiB0aGlzIGVtYWNzIHNlc3Npb24pLjxicj48L2Rpdj48ZGl2PsKgPC9k aXY+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjBweCAwcHgg MHB4IDAuOGV4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCByZ2IoMjA0LDIwNCwyMDQpO3BhZGRpbmct bGVmdDoxZXgiPg0KJmd0OyBCdXQgbXkgYG9yZy1hZ2VuZGEtZmlsZXNgIHZhcmlhYmxlIG9ubHkg Y29udGFpbnMgMTIgZmlsZXMgYW5kIG5vPGJyPg0KJmd0OyAjK0lOQ0xVREUgc3RhdGVtZW50cy48 YnI+DQo8YnI+DQpJRCBzY2FubmluZyBpcyBub3QgbGltaXRlZCB0byBhZ2VuZGEgZmlsZXMuIE9y ZyBhbHNvIHNjYW5zIGZpbGVzIGtub3duPGJyPg0KdG8gY29udGFpbiBJRC4gRS5nLiwgaWYsIGR1 cmluZyB0aGUgc2Vzc2lvbiwgeW91IGluc2VydCBhbiBJRCBpbjxicj4NCiZxdW90OzxhIGhyZWY9 Imh0dHA6Ly9mb28ub3JnIiByZWw9Im5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5mb28ub3Jn PC9hPiZxdW90OywgbGF0ZXIgc2NhbnMgKGluIHRoZSBzYW1lIHNlc3Npb24pIHdpbGwgaW5jbHVk ZSAmcXVvdDs8YSBocmVmPSJodHRwOi8vZm9vLm9yZyIgcmVsPSJub3JlZmVycmVyIiB0YXJnZXQ9 Il9ibGFuayI+Zm9vLm9yZzwvYT4mcXVvdDsuPGJyPg0KPGJyPg0KU2VlIGBvcmctaWQtZmlsZXMm IzM5OyAoaW50ZXJuYWwgdmFyaWFibGUpLCBhbmQgYG9yZy1pZC1leHRyYS1maWxlcyYjMzk7LCB3 aGljaDxicj4NCm1heSBjb250YWluIGV2ZW4gbW9yZSBmaWxlcy48YnI+PC9ibG9ja3F1b3RlPjxk aXY+PGJyPjwvZGl2PjxkaXY+YG9yZy1pZC1maWxlc2AgY29udGFpbmVkIGEgc3Vic2V0IG9mIG15 IGFnZW5kYSBmaWxlcyBwbHVzIGEgZmV3IGV4dHJhICh0b3RhbDogNyBmaWxlcywgYW5kIHRoZXNl IDcgcGx1cyBteSBhZ2VuZGEgZmlsZXMgZG8gbm90IHN1bSB0byAyMikuIFdoZW4gSSBzZXQgaXQg dG8gbmlsLCBub3RoaW5nIHNpZ25pZmljYW50IGNoYW5nZWQsIGJ1dCBpdCB3YXMgcmVzZXQgYWZ0 ZXIgcnVubmluZyBgb3JnLWljYWxlbmRhci1jb21iaW5lLWFnZW5kYS1maWxlc2AgYWdhaW4uPC9k aXY+PGRpdj48YnI+PC9kaXY+PGRpdj5gb3JnLWlkLWV4dHJhLWZpbGVzYCB3YXMgc2V0IHRvIG9y Zy1hZ2VuZGEtdGV4dC1zZWFyY2gtZXh0cmEtZmlsZXMuIFdoZW4gSSBzZXQgaXQgdG8gbmlsLCBu b3RoaW5nIHNpZ25pZmljYW50IGNoYW5nZWQuIEl0IGRvZXMgbm90IGdldCByZXNldCB3aGVuIGBv cmctaWNhbGVuZGFyLWNvbWJpbmUtYWdlbmRhLWZpbGVzYCBpcyBydW4uPGJyPjwvZGl2PjxkaXY+ wqA8L2Rpdj48ZGl2PsKgIC1rLjxicj48L2Rpdj48L2Rpdj48L2Rpdj4NCg== --00000000000017d0d705a6b5d85a--