From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: =?UTF-8?Q?Cl=c3=a9ment_Pit--Claudel?= Newsgroups: gmane.emacs.devel Subject: Re: What makes set-window-buffer slow? Date: Fri, 24 Jun 2016 08:33:25 -0400 Message-ID: <576D2895.4020600@gmail.com> References: <576C04E4.9040000@gmail.com> <576C2054.3020705@gmail.com> <20160623181242.GB4946@acm.fritz.box> <576C2AAA.1090707@gmail.com> <83fus33ekr.fsf@gnu.org> <576C536A.6060503@gmail.com> <83bn2r2i0y.fsf@gnu.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="NPGPN9dHdv9jNTvcT0fCqFSwJnXfT720l" X-Trace: ger.gmane.org 1466771646 21812 80.91.229.3 (24 Jun 2016 12:34:06 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Fri, 24 Jun 2016 12:34:06 +0000 (UTC) Cc: acm@muc.de, emacs-devel@gnu.org, schwab@suse.de To: Eli Zaretskii Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Fri Jun 24 14:33:55 2016 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1bGQJ0-0006rd-PC for ged-emacs-devel@m.gmane.org; Fri, 24 Jun 2016 14:33:55 +0200 Original-Received: from localhost ([::1]:43150 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bGQIz-00013M-SG for ged-emacs-devel@m.gmane.org; Fri, 24 Jun 2016 08:33:53 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:36845) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bGQIp-00010S-Bu for emacs-devel@gnu.org; Fri, 24 Jun 2016 08:33:46 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bGQIm-0002I8-6T for emacs-devel@gnu.org; Fri, 24 Jun 2016 08:33:42 -0400 Original-Received: from mout.kundenserver.de ([212.227.126.135]:49655) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bGQIg-0002HD-TH; Fri, 24 Jun 2016 08:33:35 -0400 Original-Received: from [18.189.1.110] ([18.189.1.110]) by mrelayeu.kundenserver.de (mreue004) with ESMTPSA (Nemesis) id 0LuYWS-1bPOVl213o-00zkPr; Fri, 24 Jun 2016 14:33:29 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.8.0 In-Reply-To: <83bn2r2i0y.fsf@gnu.org> X-Provags-ID: V03:K0:rM9/ackP6XR1Qzrbo9vGQGMFzJfKvtjBnxMhu/wfuaBgJkro4DX LrbpRPJeJz2mLQzyWrW1p+fm53K9ACBPuh2/otZEyd4RNyQ1BvN3Xu6iwkTGiERbzxL8Acw ZtbZKJrzdSpbTiUKZ8LcOad+2HvnflZS3y0F/bTqwBGcRvbpi3ZHV6scDgpdEN4iRBDSNwX lQ+Qu2n5SIH3OynjSLNYA== X-UI-Out-Filterresults: notjunk:1;V01:K0:xnhcTCciA+8=:axcJZaJRKcMRTHttXSjZb0 zijZRlFZB28LJIA6QZzon17DJG0229+22XFjGdkrysDJGkSIxranENGVBN3Vpx9q92ViAmGnr vf+DLY94usqMhhXOMk7w4wPo8JahapEFmaUyQ0+R3EIr5bXjt/8l2nJ+AlR26DD2k5kf8Vjn8 21BtCy4/Lv8CQhPy0B4MGPE1Qf/FTXdDewZ8O7zlazLwr2PgYg5VQXZDyAGKk29eewGTOGuTr 3saPuRkCnqhGy63IkNhr/5zJ5ZUHYcd5MwSmr7/1yEoEz6dYL36CJF87pCI3eDrObtxqwt9gh lX4gEodbxYU6xoSco9CVqZvVdp6YIoOwrgp9sGNOSO2Yj10JxIvE+ytDMVMyMA8VdZr8f/xgD 0c7fQx60ZfuYQvHgMLIoVRLJaTkRhbrLBiiO2IQ34lRcfL5cPGmywDefWLB9To+c8RSgyCMSB EOnMyn/GC+EyzZK6H6bTOkftSPMnIsqG026lCTfzGHn5AMhxu5BX0T01J5mXzQP++tLYTsAxm ErrkDpcH9OrMNYzt39mg1x1ZKgytZ7FAYv4XT+bs/mFLGmCI3gMOZ/miautHBrcwf1Mi4L/nC u1dvF/tGaPE5e4nG3XNUiYHKfo39br+elzGTkx6aWIqb/ZaSGhn2O/TxY2xXpJQVrqW4Asd7U FjMpcY4Igu8hqijp2jmpdrR7gkU4++JulL8hqMFa9G2bat2TcUMSRweBWyW1KesEj9h0= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 212.227.126.135 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:204725 Archived-At: This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --NPGPN9dHdv9jNTvcT0fCqFSwJnXfT720l Content-Type: multipart/mixed; boundary="1DtkqgNQockVPWG4frkqdiJjdVsWxnhXC" From: =?UTF-8?Q?Cl=c3=a9ment_Pit--Claudel?= To: Eli Zaretskii Cc: acm@muc.de, schwab@suse.de, emacs-devel@gnu.org Message-ID: <576D2895.4020600@gmail.com> Subject: Re: What makes set-window-buffer slow? References: <576C04E4.9040000@gmail.com> <576C2054.3020705@gmail.com> <20160623181242.GB4946@acm.fritz.box> <576C2AAA.1090707@gmail.com> <83fus33ekr.fsf@gnu.org> <576C536A.6060503@gmail.com> <83bn2r2i0y.fsf@gnu.org> In-Reply-To: <83bn2r2i0y.fsf@gnu.org> --1DtkqgNQockVPWG4frkqdiJjdVsWxnhXC Content-Type: multipart/mixed; boundary="------------020006000300050205050700" This is a multi-part message in MIME format. --------------020006000300050205050700 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable On 2016-06-24 02:54, Eli Zaretskii wrote: >> From: Cl=E9ment Pit--Claudel Cc: acm@muc.de, >> schwab@suse.de, emacs-devel@gnu.org Date: Thu, 23 Jun 2016 17:23:54 >> -0400 >>=20 >> On 2016-06-23 15:11, Eli Zaretskii wrote: >>> Instead of hypothesizing, I suggest to profile your code with=20 >>> profiler.el. If indeed redisplay is taking the time, you should >>> see that in the profile. >>=20 >> The profile doesn't show that, unfortunately; in fact, we spent a >> significant amount of time trying to understand what was taking all >> that time by looking at the profile, but nothing in there was >> taking more than 30% of the time, and even optimizing away a >> function that according to the profile took 28% of the time didn't >> yield a measurable runtime difference. >>=20 >> Commenting out the call to set-window-buffer (or predicating it on >> the window not already displaying the buffer), on the other hand, >> does yield a 95% performance gain. set-window-buffer does not >> appear in the profile; redisplay_internal does appear, but it only >> is credited with 30% of the execution time. >>=20 >> I wonder what might explain these results... >=20 > Any hope of seeing the profile, fully expanded? Absolutely. I've attached it. --------------020006000300050205050700 Content-Type: text/plain; charset=UTF-8; name="mergesort-profile2" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="mergesort-profile2" [profiler-profile "24.3" cpu #s(hash-table size 97 test equal rehash-size= 1.5 rehash-threshold 0.8 data ([nil nil nil nil nil nil nil nil nil nil = nil nil nil nil nil nil] 3308 ["#" funcall with-no-war= nings setq let ad-Advice-font-lock-fontify-keywords-region apply font-loc= k-fontify-keywords-region font-lock-default-fontify-region font-lock-font= ify-region run-hook-with-args "#" funcall jit-lock-fon= tify-now jit-lock-function recenter] 20 [end-of-buffer call-interactively= command-execute nil nil nil nil nil nil nil nil nil nil nil nil nil] 9 [= font-lock-fontify-region run-hook-with-args "#" funcal= l jit-lock-fontify-now jit-lock-function recenter end-of-buffer call-inte= ractively command-execute nil nil nil nil nil nil] 3 [read-event "#" funcall track-mouse eval mouse-drag-track mouse-drag-regio= n call-interactively command-execute nil nil nil nil nil nil nil] 8 [byte= -code tooltip-show tooltip-help-tips run-hook-with-args-until-success too= ltip-timeout apply byte-code timer-event-handler nil nil nil nil nil nil = nil nil] 6 [coq-script-parse-cmdend-forward coq-script-parse-function pro= of-segment-up-to proof-segment-up-to-using-cache proof-assert-until-point= proof-toolbar-goto call-interactively command-execute nil nil nil nil ni= l nil nil nil] 14 ["#" funcall syntax-ppss proof-buffe= r-syntactic-context coq-script-parse-cmdend-forward coq-script-parse-func= tion proof-segment-up-to proof-segment-up-to-using-cache proof-assert-unt= il-point proof-toolbar-goto call-interactively command-execute nil nil ni= l nil] 43 [proof-segment-up-to proof-segment-up-to-using-cache proof-asse= rt-until-point proof-toolbar-goto call-interactively command-execute nil = nil nil nil nil nil nil nil nil nil] 4 [proof-buffer-syntactic-context pr= oof-inside-comment coq-looking-at-comment coq-find-comment-start coq-find= -not-in-comment-backward coq-empty-command-p coq-script-parse-cmdend-forw= ard coq-script-parse-function proof-segment-up-to proof-segment-up-to-usi= ng-cache proof-assert-until-point proof-toolbar-goto call-interactively c= ommand-execute nil nil] 5 ["#" funcall syntax-ppss pro= of-buffer-syntactic-context proof-inside-comment coq-looking-at-comment c= oq-find-not-in-comment-backward coq-empty-command-p coq-empty-command-p c= oq-empty-command-p coq-script-parse-cmdend-forward coq-script-parse-funct= ion proof-segment-up-to proof-segment-up-to-using-cache proof-assert-unti= l-point proof-toolbar-goto] 3 [coq-empty-command-p coq-script-parse-cmden= d-forward coq-script-parse-function proof-segment-up-to proof-segment-up-= to-using-cache proof-assert-until-point proof-toolbar-goto call-interacti= vely command-execute nil nil nil nil nil nil nil] 4 [proof-segment-up-to-= using-cache proof-assert-until-point proof-toolbar-goto call-interactivel= y command-execute nil nil nil nil nil nil nil nil nil nil nil] 4 ["#" funcall syntax-ppss proof-buffer-syntactic-context proof-= inside-comment coq-looking-at-comment coq-find-not-in-comment-backward co= q-empty-command-p coq-script-parse-cmdend-forward coq-script-parse-functi= on proof-segment-up-to proof-segment-up-to-using-cache proof-assert-until= -point proof-toolbar-goto call-interactively command-execute] 11 ["#" funcall syntax-ppss proof-buffer-syntactic-context proof-= inside-comment coq-looking-at-comment coq-find-comment-start coq-find-not= -in-comment-backward coq-empty-command-p coq-script-parse-cmdend-forward = coq-script-parse-function proof-segment-up-to proof-segment-up-to-using-c= ache proof-assert-until-point proof-toolbar-goto call-interactively] 8 [s= yntax-ppss proof-buffer-syntactic-context coq-script-parse-cmdend-forward= coq-script-parse-function proof-segment-up-to proof-segment-up-to-using-= cache proof-assert-until-point proof-toolbar-goto call-interactively comm= and-execute nil nil nil nil nil nil] 4 [redisplay proof-shell-wait proof-= shell-invisible-command coq-adapt-printing-width run-hooks proof-assert-u= ntil-point proof-toolbar-goto call-interactively command-execute nil nil = nil nil nil nil nil] 2 [proof-script-delete-secondary-spans proof-assert-= semis proof-assert-until-point proof-toolbar-goto call-interactively comm= and-execute nil nil nil nil nil nil nil nil nil nil] 8 [apply coq-seq-get= -library-dependencies coq-seq-map-module-id-to-obj-file coq-seq-check-mod= ule coq-seq-preprocess-require-commands run-hooks byte-code proof-extend-= queue proof-assert-semis proof-assert-until-point proof-toolbar-goto call= -interactively command-execute nil nil nil] 7 [coq-seq-preprocess-require= -commands run-hooks byte-code proof-extend-queue proof-assert-semis proof= -assert-until-point proof-toolbar-goto call-interactively command-execute= nil nil nil nil nil nil nil] 3 [proof-done-advancing byte-code proof-she= ll-invoke-callback mapc proof-add-to-queue proof-extend-queue proof-asser= t-semis proof-assert-until-point proof-toolbar-goto call-interactively co= mmand-execute nil nil nil nil nil] 2 [proof-done-advancing-other proof-do= ne-advancing byte-code proof-shell-invoke-callback mapc proof-shell-exec-= loop proof-shell-filter-manage-output proof-shell-filter byte-code proof-= shell-filter-wrapper run-hook-with-args scomint-output-filter nil nil nil= nil] 4 [proof-set-overlay-arrow proof-done-advancing byte-code proof-she= ll-invoke-callback mapc proof-shell-exec-loop proof-shell-filter-manage-o= utput proof-shell-filter byte-code proof-shell-filter-wrapper run-hook-wi= th-args scomint-output-filter nil nil nil nil] 13 [proof-toolbar-next-ena= ble-p redisplay_internal\ \(C\ function\) nil nil nil nil nil nil nil nil= nil nil nil nil nil nil] 19 [run-hooks proof-done-advancing byte-code pr= oof-shell-invoke-callback mapc proof-shell-exec-loop proof-shell-filter-m= anage-output proof-shell-filter byte-code proof-shell-filter-wrapper run-= hook-with-args scomint-output-filter nil nil nil nil] 17 [proof-done-adva= ncing byte-code proof-shell-invoke-callback mapc proof-shell-exec-loop pr= oof-shell-filter-manage-output proof-shell-filter byte-code proof-shell-f= ilter-wrapper run-hook-with-args scomint-output-filter nil nil nil nil ni= l] 25 [redisplay--update-region-highlight "#" funcall = redisplay--update-region-highlights apply "#" redispla= y_internal\ \(C\ function\) nil nil nil nil nil nil nil nil nil] 2 [proof= -shell-filter-manage-output proof-shell-filter byte-code proof-shell-filt= er-wrapper run-hook-with-args scomint-output-filter nil nil nil nil nil n= il nil nil nil nil] 7 [scomint-send-input proof-shell-insert proof-shell-= exec-loop proof-shell-filter-manage-output proof-shell-filter byte-code p= roof-shell-filter-wrapper run-hook-with-args scomint-output-filter nil ni= l nil nil nil nil nil] 11 [proof-shell-handle-immediate-output proof-shel= l-filter-manage-output proof-shell-filter byte-code proof-shell-filter-wr= apper run-hook-with-args scomint-output-filter nil nil nil nil nil nil ni= l nil nil] 7 [company-coq-state-change run-hooks proof-done-advancing byt= e-code proof-shell-invoke-callback mapc proof-shell-exec-loop proof-shell= -filter-manage-output proof-shell-filter byte-code proof-shell-filter-wra= pper run-hook-with-args scomint-output-filter nil nil nil] 4 [proof-unpro= cessed-begin proof-locked-region-full-p proof-toolbar-use-enable-p redisp= lay_internal\ \(C\ function\) nil nil nil nil nil nil nil nil nil nil nil= nil] 1 [run-hook-with-args scomint-output-filter nil nil nil nil nil nil= nil nil nil nil nil nil nil nil] 4 [menu-bar-update-buffers redisplay_in= ternal\ \(C\ function\) nil nil nil nil nil nil nil nil nil nil nil nil n= il nil] 14 [redisplay_internal\ \(C\ function\) nil nil nil nil nil nil n= il nil nil nil nil nil nil nil nil] 8 [proof-shell-filter byte-code proof= -shell-filter-wrapper run-hook-with-args scomint-output-filter nil nil ni= l nil nil nil nil nil nil nil nil] 19 [proof-done-advancing-save proof-do= ne-advancing byte-code proof-shell-invoke-callback mapc proof-shell-exec-= loop proof-shell-filter-manage-output proof-shell-filter byte-code proof-= shell-filter-wrapper run-hook-with-args scomint-output-filter nil nil nil= nil] 9 [file-remote-p redisplay_internal\ \(C\ function\) nil nil nil ni= l nil nil nil nil nil nil nil nil nil nil] 17 [display-graphic-p if eval = redisplay_internal\ \(C\ function\) nil nil nil nil nil nil nil nil nil n= il nil nil] 6 [proof-get-name-from-goal proof-done-advancing-save proof-d= one-advancing byte-code proof-shell-invoke-callback mapc proof-shell-exec= -loop proof-shell-filter-manage-output proof-shell-filter byte-code proof= -shell-filter-wrapper run-hook-with-args scomint-output-filter nil nil ni= l] 2 [tool-bar-make-keymap redisplay_internal\ \(C\ function\) nil nil ni= l nil nil nil nil nil nil nil nil nil nil nil] 14 [image-search-load-path= find-image eval "#" mapcar tool-bar-make-keymap-1 too= l-bar-make-keymap redisplay_internal\ \(C\ function\) nil nil nil nil nil= nil nil nil] 3 [coq-set-state-infos run-hooks proof-done-advancing byte-= code proof-shell-invoke-callback mapc proof-shell-exec-loop proof-shell-f= ilter-manage-output proof-shell-filter byte-code proof-shell-filter-wrapp= er run-hook-with-args scomint-output-filter nil nil nil] 2 [if company-co= q-state-change run-hooks proof-done-advancing byte-code proof-shell-invok= e-callback mapc proof-shell-exec-loop proof-shell-filter-manage-output pr= oof-shell-filter byte-code proof-shell-filter-wrapper run-hook-with-args = scomint-output-filter nil nil] 1 [eval redisplay_internal\ \(C\ function\= ) nil nil nil nil nil nil nil nil nil nil nil nil nil nil] 7 [proof-shell= -exec-loop proof-shell-filter-manage-output proof-shell-filter byte-code = proof-shell-filter-wrapper run-hook-with-args scomint-output-filter nil n= il nil nil nil nil nil nil nil] 2 [coq-count-match coq-module-opening-p c= oq-goal-command-p proof-done-advancing-other proof-done-advancing byte-co= de proof-shell-invoke-callback mapc proof-shell-exec-loop proof-shell-fil= ter-manage-output proof-shell-filter byte-code proof-shell-filter-wrapper= run-hook-with-args scomint-output-filter nil] 4 [coq-search-urgent-messa= ge proof-shell-process-urgent-messages proof-shell-filter byte-code proof= -shell-filter-wrapper run-hook-with-args scomint-output-filter nil nil ni= l nil nil nil nil nil nil] 4 [if eval redisplay_internal\ \(C\ function\)= nil nil nil nil nil nil nil nil nil nil nil nil nil] 19 [keymap-canonica= lize redisplay_internal\ \(C\ function\) nil nil nil nil nil nil nil nil = nil nil nil nil nil nil] 5 [proof-shell-insert proof-shell-exec-loop proo= f-shell-filter-manage-output proof-shell-filter byte-code proof-shell-fil= ter-wrapper run-hook-with-args scomint-output-filter nil nil nil nil nil = nil nil nil] 2 [mapc proof-shell-exec-loop proof-shell-filter-manage-outp= ut proof-shell-filter byte-code proof-shell-filter-wrapper run-hook-with-= args scomint-output-filter nil nil nil nil nil nil nil nil] 2 [proof-elem= ent-id proof-next-element-id proof-done-advancing-other proof-done-advanc= ing byte-code proof-shell-invoke-callback mapc proof-shell-exec-loop proo= f-shell-filter-manage-output proof-shell-filter byte-code proof-shell-fil= ter-wrapper run-hook-with-args scomint-output-filter nil nil] 1 [unless e= val redisplay_internal\ \(C\ function\) nil nil nil nil nil nil nil nil n= il nil nil nil nil] 4 [byte-code proof-shell-filter-wrapper run-hook-with= -args scomint-output-filter nil nil nil nil nil nil nil nil nil nil nil n= il] 9 [progn if let if let company-coq-state-change run-hooks proof-done-= advancing byte-code proof-shell-invoke-callback mapc proof-shell-exec-loo= p proof-shell-filter-manage-output proof-shell-filter byte-code proof-she= ll-filter-wrapper] 5 [coq-last-prompt-info coq-last-prompt-info-safe coq-= set-state-infos run-hooks proof-done-advancing byte-code proof-shell-invo= ke-callback mapc proof-shell-exec-loop proof-shell-filter-manage-output p= roof-shell-filter byte-code proof-shell-filter-wrapper run-hook-with-args= scomint-output-filter nil] 4 [coq-count-match coq-module-opening-p coq-g= oal-command-p proof-done-advancing-save proof-done-advancing byte-code pr= oof-shell-invoke-callback mapc proof-shell-exec-loop proof-shell-filter-m= anage-output proof-shell-filter byte-code proof-shell-filter-wrapper run-= hook-with-args scomint-output-filter nil] 2 [and company-coq-boundp-strin= g-match-p and let* if company-coq-maybe-proof-input-reload-things run-hoo= ks proof-shell-insert proof-shell-exec-loop proof-shell-filter-manage-out= put proof-shell-filter byte-code proof-shell-filter-wrapper run-hook-with= -args scomint-output-filter nil] 2 [run-hooks proof-shell-insert proof-sh= ell-exec-loop proof-shell-filter-manage-output proof-shell-filter byte-co= de proof-shell-filter-wrapper run-hook-with-args scomint-output-filter ni= l nil nil nil nil nil nil] 5 [pg-processing-complete-hint proof-shell-exe= c-loop proof-shell-filter-manage-output proof-shell-filter byte-code proo= f-shell-filter-wrapper run-hook-with-args scomint-output-filter nil nil n= il nil nil nil nil nil] 6 ["#" funcall with-no-warning= s setq let ad-Advice-font-lock-fontify-keywords-region apply font-lock-fo= ntify-keywords-region font-lock-default-fontify-region font-lock-fontify-= region run-hook-with-args "#" funcall jit-lock-fontify= -now jit-lock-function pos-visible-in-window-p] 4 [completing-read-defaul= t completing-read read-extended-command byte-code call-interactively comm= and-execute nil nil nil nil nil nil nil nil nil nil] 38 [read-from-minibu= ffer completing-read-default completing-read read-extended-command byte-c= ode call-interactively command-execute nil nil nil nil nil nil nil nil ni= l] 78 [profiler-cpu-profile profiler-report-cpu profiler-report call-inte= ractively command-execute execute-extended-command call-interactively com= mand-execute nil nil nil nil nil nil nil nil] 10 [Automatic\ GC] 53)) (22= 380 15820 895462 621000) nil] --------------020006000300050205050700-- --1DtkqgNQockVPWG4frkqdiJjdVsWxnhXC-- --NPGPN9dHdv9jNTvcT0fCqFSwJnXfT720l Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) iQIcBAEBAgAGBQJXbSiVAAoJEPqg+cTm90wjOEgQAJ2ZPQFbRT9c8KagqX0ZpniD 5Gda9uOogtaq7OtseaeTvRWCHHL8DqQ4WGDqeRDAET2573SneCLjQ69SLHviTXw7 guZbV/b0DkRmW3X2w/6GTuFttWwPd+lOlIhYgB3OjE/+XiVjPYeJJjGELT0BiB4r 5zlI4RlCcZPHQRlKJ4U6qWtG6cAJR+x5XJClzyXAP8X9HN0VR3GmNOLM1d/tlCL9 NWJy5qr/ICyHWtl/mt/0auQ8+erzWNuDhLYQ/Z9oD1ndziX3ieDnU0DtdDlJlN7R +Xlkul8DubbwqRFJ37wwWd/xZzaW8jfi9xW3UfYdHtgEHQ1a5Cjlfqln0p8uQ1dZ zM1w5COVZDFlaRrFh/ovSm6m8KieUuy/kVMHZESjvlUzQ+NZ/GTAQReuK3HSzKto FRHZMjC5Z4PtM4L0VZuRhS10RYAeEnimrBqG9at2h3e49pV41vFTD+lXJX+08xlu xmFaIRdsxUecgH1PUdB5GJTTKcmcHkoxTrlBL13NXc2RGJGTPxKV+dOG3iTez/ea IXE352ARYDEhf0WiIIFznZn1Gi0a+gaffPCwbVeqgA7F+t1wyjhQdDn1W4aqkW2d LOIyTzkm/z8X9eewqM7SsbTd+Qm64AJQMYfstI5yV6AZIDk3xs/EqMa96X1iIAJF X9bb5WUNaqyxznJWv54p =RZ+t -----END PGP SIGNATURE----- --NPGPN9dHdv9jNTvcT0fCqFSwJnXfT720l--