From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Vaidheeswaran C Newsgroups: gmane.emacs.bugs Subject: bug#21017: url-http: synchronous post and 302 error response not handled properly Date: Thu, 09 Jul 2015 13:51:39 +0530 Message-ID: <559E2F13.3080801@gmail.com> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------070802080004060405060703" X-Trace: ger.gmane.org 1436455953 5837 80.91.229.3 (9 Jul 2015 15:32:33 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 9 Jul 2015 15:32:33 +0000 (UTC) To: 21017@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Thu Jul 09 17:32:18 2015 Return-path: Envelope-to: geb-bug-gnu-emacs@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 1ZDDo6-0000Tj-KX for geb-bug-gnu-emacs@m.gmane.org; Thu, 09 Jul 2015 17:32:15 +0200 Original-Received: from localhost ([::1]:40479 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZDDo5-00036l-Qy for geb-bug-gnu-emacs@m.gmane.org; Thu, 09 Jul 2015 11:32:13 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:55505) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZDDnx-00035X-V0 for bug-gnu-emacs@gnu.org; Thu, 09 Jul 2015 11:32:09 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZDDnu-00041X-5b for bug-gnu-emacs@gnu.org; Thu, 09 Jul 2015 11:32:05 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:43864) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZDDnu-00041K-0X for bug-gnu-emacs@gnu.org; Thu, 09 Jul 2015 11:32:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1ZDDnt-0004GO-Nz for bug-gnu-emacs@gnu.org; Thu, 09 Jul 2015 11:32:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Vaidheeswaran C Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 09 Jul 2015 15:32:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 21017 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.143645587116297 (code B ref -1); Thu, 09 Jul 2015 15:32:01 +0000 Original-Received: (at submit) by debbugs.gnu.org; 9 Jul 2015 15:31:11 +0000 Original-Received: from localhost ([127.0.0.1]:45307 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZDDn2-0004El-Hx for submit@debbugs.gnu.org; Thu, 09 Jul 2015 11:31:10 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:47924) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZD75e-0000Qi-Rd for submit@debbugs.gnu.org; Thu, 09 Jul 2015 04:21:57 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZD75W-000550-7V for submit@debbugs.gnu.org; Thu, 09 Jul 2015 04:21:49 -0400 Original-Received: from lists.gnu.org ([2001:4830:134:3::11]:43003) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZD75W-00054w-2w for submit@debbugs.gnu.org; Thu, 09 Jul 2015 04:21:46 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:33164) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZD75S-0006mM-Fk for bug-gnu-emacs@gnu.org; Thu, 09 Jul 2015 04:21:45 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZD75O-00051r-Ee for bug-gnu-emacs@gnu.org; Thu, 09 Jul 2015 04:21:42 -0400 Original-Received: from mail-pa0-x235.google.com ([2607:f8b0:400e:c03::235]:34994) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZD75N-00051M-SI for bug-gnu-emacs@gnu.org; Thu, 09 Jul 2015 04:21:38 -0400 Original-Received: by pactm7 with SMTP id tm7so146809342pac.2 for ; Thu, 09 Jul 2015 01:21:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:subject :content-type; bh=LDOuFT8xp/dkHkWymJwxdakmFDZ2xnHetJ0hsDd6Vko=; b=y5zta7aiEeZZYUUqipdp1IIYELNMMKv9xkhh3Nnu4rL4NytCfGYPk8ushqrh6NrGdT noRGRQzLCZEKij5EJg76w+b4cg2EdrmdIYnWfv+8+NeLBPovt9qLkERwy7oEflTaqCp9 NB+KzC6zGbTgkoUwLLkMLtC7dNE6rxq0KCRS8Hen+dxpIMDyA3zQQFMQmdtBTXsNrBQk qOF785TEILDBuBDKwp+NKuhKtFYLjrAFI9eVMkdaP/SshgKPtAqX6v82k9th82wzKd3p 10fHDu5jHUf3V5tCmVK9g1cmAGvKmVTCshejJjMTxRDXUfYHHaNVm80IwJvgkEMbCV4r RWzA== X-Received: by 10.66.156.68 with SMTP id wc4mr28939560pab.126.1436430097021; Thu, 09 Jul 2015 01:21:37 -0700 (PDT) Original-Received: from [192.168.43.83] ([106.216.158.36]) by smtp.gmail.com with ESMTPSA id vz2sm4987190pbc.71.2015.07.09.01.21.32 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 09 Jul 2015 01:21:35 -0700 (PDT) User-Agent: Mozilla/5.0 (X11; Linux i686; rv:31.0) Gecko/20100101 Icedove/31.3.0 X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Mailman-Approved-At: Thu, 09 Jul 2015 11:31:07 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:104853 Archived-At: This is a multi-part message in MIME format. --------------070802080004060405060703 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit url-http: synchronous post and 302 error response not handled properly. This is seen with Oddmuse wikis. GNU Emacs is from today's master branch. ---------------------------------------------------------------- Prerequisites: You need an oddmuse wiki that you have write access to. ---------------------------------------------------------------- The snippet below posts the "Hello Everywhere" (the "text") on to "TemporaryPage" (the "title"). (let* ((wiki-base-url "http://localhost/cgi-bin/wiki.pl/") (values `(("pwd" . "xxxx") ("recent_edit" . "off") ("summary" . "Some updates") ("text" . "Hello Everywhere") ("title" . "TemporaryPage") ("username" . "Anonymous")))) (let ((url-request-method "POST") (url-request-extra-headers '(("Content-Type" . "application/x-www-form-urlencoded"))) (url-request-data (mm-url-encode-www-form-urlencoded values))) (url-retrieve-synchronously wiki-base-url) (message "Done"))) 1. Get hold of an oddmuse wiki that you have edit access to 2. Customize `url-debug' to t 3. C-x C-e the above snippet 4. See that the "Done" message gets never printed. 5. C-g your way out. 6. Verify that Oddmuse wiki page has been updated. ---------------------------------------------------------------- The HTTP process buffer says: HTTP/1.1 302 Found Status: 302 Found Location: http://localhost/cgi-bin/wiki.pl/TemporaryPage Transfer-Encoding: chunked Date: Thu, 09 Jul 2015 07:32:42 GMT Server: lighttpd/1.4.31 ---------------------------------------------------------------- The *URL-DEBUG* buffer says infinite "spinning" for headers. http -> Contacting host: localhost:80 http -> Marking connection as busy: localhost:80 # retrieval -> Spinning in url-retrieve-synchronously: nil (#) http -> Request is: POST /cgi-bin/wiki.pl/ HTTP/1.1 MIME-Version: 1.0 Connection: keep-alive Extension: Security/Digest Security/SSL Host: localhost Accept-encoding: gzip Accept-charset: utf-8;q=1, gb2312;q=0.5, iso-8859-1;q=0.5, big5;q=0.5, iso-2022-jp;q=0.5, shift_jis;q=0.5, euc-tw;q=0.5, euc-jp;q=0.5, euc-jis-2004;q=0.5, euc-kr;q=0.5, us-ascii;q=0.5, utf-7;q=0.5, hz-gb-2312;q=0.5, big5-hkscs;q=0.5, gbk;q=0.5, gb18030;q=0.5, iso-8859-5;q=0.5, koi8-r;q=0.5, koi8-u;q=0.5, cp866;q=0.5, koi8-t;q=0.5, windows-1251;q=0.5, cp855;q=0.5, iso-8859-2;q=0.5, iso-8859-3;q=0.5, iso-8859-4;q=0.5, iso-8859-9;q=0.5, iso-8859-10;q=0.5, iso-8859-13;q=0.5, iso-8859-14;q=0.5, iso-8859-15;q=0.5, windows-1250;q=0.5, windows-1252;q=0.5, windows-1254;q=0.5, windows-1257;q=0.5, cp775;q=0.5, cp850;q=0.5, cp852;q=0.5, cp857;q=0.5, cp858;q=0.5, cp860;q=0.5, cp861;q=0.5, cp863;q=0.5, cp865;q=0.5, cp437;q=0.5, macintosh;q=0.5, next;q=0.5, hp-roman8;q=0.5, adobe-standard-encoding;q=0.5, iso-8859-16;q=0.5, iso-8859-7;q=0.5, windows-1253;q=0.5, cp737;q=0.5, cp851;q=0.5, cp869;q=0.5, iso-8859-8;q=0.5, windows-1255;q=0.5, cp862;q=0.5, iso-2022-jp-2004;q=0.5, cp874;q=0.5, iso-8859-11;q=0.5, viscii;q=0.5, windows-1258;q=0.5, iso-8859-6;q=0.5, windows-1256;q=0.5, iso-2022-cn;q=0.5, iso-2022-cn-ext;q=0.5, iso-2022-jp-2;q=0.5, iso-2022-kr;q=0.5, utf-16le;q=0.5, utf-16be;q=0.5, utf-16;q=0.5, x-ctext;q=0.5 Accept: */* User-Agent: URL/Emacs Cookie: Wiki=pwd%251exxxx%251eusername%251eAnonymous Content-Type: application/x-www-form-urlencoded Content-length: 101 pwd=xxxx&recent_edit=off&summary=Some+updates&text=Hello+World&title=TemporaryPage&username=Anonymous http -> Calling after change function `url-http-wait-for-headers-change-function' for `#' http -> url-http-wait-for-headers-change-function ( *http localhost:80*) http -> Saw end of headers... ( *http localhost:80*) http -> url-http-parse-response called in ( *http localhost:80*) http -> Saw chunked encoding. http -> Calling initial chunked-encoding for extra data at end of headers http -> Reading chunk 0 (182 183 1) http -> Did not see start of chunk @ 183! http -> Spinning waiting for headers... retrieval -> Spinning in url-retrieve-synchronously: nil (#) http -> Calling after change function `url-http-chunked-encoding-after-change-function' for `#' http -> Reading chunk 0 (183 188 5) http -> Saw start of chunk 1 (length=0, start=183 http -> Saw end of stream chunk! http -> Removing terminator of last chunk http -> Saw end of trailers... http -> Marking connection as free: localhost:80 # http -> url-http-parse-headers called in ( *http localhost:80*) http -> url-http-parse-response called in ( *http localhost:80*) http -> Parsed HTTP headers: class=3 status=302 http -> Finished parsing HTTP headers: nil retrieval -> Spinning in url-retrieve-synchronously: nil (#) retrieval -> Spinning in url-retrieve-synchronously: nil (#) ---------------------------------------------------------------- Hint for quick isolation: If I comment out the `unless' part below (cf. url-http.el @ line 602) thereabouts, the spinning stops altogether. ((or `moved-permanently `found `temporary-redirect) ; 301 302 307 ;; If the 301|302 status code is received in response to a ;; request other than GET or HEAD, the user agent MUST NOT ;; automatically redirect the request unless it can be ;; confirmed by the user, since this might change the ;; conditions under which the request was issued. (unless (member url-http-method '("HEAD" "GET")) (setq redirect-uri nil))) ---------------------------------------------------------------- Expected behaviour: I am attaching an edit transaction done via firefox + emacswiki (captured with "follow TCP stream" option of wireshark) I see a 302 response followed by a fetch of the edited page. Whatever be the right behaviour, I expect that synchronous fetch doesn't loop infinitely and make emacs unusable. --------------070802080004060405060703 Content-Type: text/plain; charset=UTF-8; name="oddmuse-edit-via-firefox.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="oddmuse-edit-via-firefox.txt" R0VUIC9lbWFjcz9hY3Rpb249ZWRpdDtpZD1UZXN0IEhUVFAvMS4xDQpIb3N0OiB3d3cuZW1h Y3N3aWtpLm9yZw0KVXNlci1BZ2VudDogTW96aWxsYS81LjAgKFgxMTsgTGludXggaTY4Njsg cnY6MzEuMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC8zMS4wIEljZXdlYXNlbC8zMS4zLjAN CkFjY2VwdDogdGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94 bWw7cT0wLjksKi8qO3E9MC44DQpBY2NlcHQtTGFuZ3VhZ2U6IGVuLVVTLGVuO3E9MC41DQpB Y2NlcHQtRW5jb2Rpbmc6IGd6aXAsIGRlZmxhdGUNClJlZmVyZXI6IGh0dHA6Ly93d3cuZW1h Y3N3aWtpLm9yZy9lbWFjcy9UZXN0DQpDb29raWU6IFdpa2k9dWlobnNjdXNrYyUyNTFlMSUy NTFldXNlcm5hbWUlMjUxZUFub255bW91cw0KQ29ubmVjdGlvbjoga2VlcC1hbGl2ZQ0KDQpI VFRQLzEuMSAyMDAgT0sNClNlcnZlcjogbmdpbngvMS40LjYgKFVidW50dSkNCkRhdGU6IFRo dSwgMDkgSnVsIDIwMTUgMDg6MDQ6MTAgR01UDQpDb250ZW50LVR5cGU6IHRleHQvaHRtbDsg Y2hhcnNldD11dGYtOA0KVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQNCkNvbm5lY3Rpb246 IGtlZXAtYWxpdmUNCkNvbnRlbnQtTG9jYXRpb246IGVtYWNzLnBsDQpWYXJ5OiBuZWdvdGlh dGUsQWNjZXB0LUxhbmd1YWdlDQpUQ046IGNob2ljZQ0KWC1FbWFjc1dpa2ktU291cmNlOiBB cGFjaGUvQ0dJDQpYLVByb3h5LUNhY2hlOiBCWVBBU1MNCg0KZDE1DQo8IURPQ1RZUEUgaHRt bCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3 dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5z PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj48aGVhZD48dGl0bGU+RW1hY3NXaWtp OiBFZGl0aW5nIFRlc3Q8L3RpdGxlPgo8bGluayB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHls ZXNoZWV0IiBocmVmPSJodHRwOi8vbmV0ZG5hLmJvb3RzdHJhcGNkbi5jb20vdHdpdHRlci1i b290c3RyYXAvMi4zLjAvY3NzL2Jvb3RzdHJhcC1jb21iaW5lZC5taW4uY3NzIiAvPgo8bGlu ayB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvY3NzL2Jvb3RzdHJh cC5jc3MiIC8+CjxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0iTk9JTkRFWCxGT0xMT1ci IC8+PGxpbmsgcmVsPSJhbHRlcm5hdGUiIHR5cGU9ImFwcGxpY2F0aW9uL3Jzcyt4bWwiIHRp dGxlPSJFbWFjc1dpa2kiIGhyZWY9Imh0dHA6Ly93d3cuZW1hY3N3aWtpLm9yZy9lbWFjcz9h Y3Rpb249cnNzIiAvPjxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0eXBlPSJhcHBsaWNhdGlvbi9y c3MreG1sIiB0aXRsZT0iRW1hY3NXaWtpOiBUZXN0IiBocmVmPSJodHRwOi8vd3d3LmVtYWNz d2lraS5vcmcvZW1hY3M/YWN0aW9uPXJzcztyY2lkb25seT1UZXN0IiAvPjxsaW5rIHJlbD0i YWx0ZXJuYXRlIiB0eXBlPSJhcHBsaWNhdGlvbi9yc3MreG1sIiB0aXRsZT0iRm9sbG93LXVw cyBmb3IgQW5vbnltb3VzIiBocmVmPSJodHRwOi8vd3d3LmVtYWNzd2lraS5vcmcvZW1hY3M/ YWN0aW9uPXJzcztmb2xsb3d1cD1Bbm9ueW1vdXMiIC8+CjxsaW5rIHJlbD0iYWx0ZXJuYXRl IiB0eXBlPSJhcHBsaWNhdGlvbi9yc3MreG1sIgogICAgICB0aXRsZT0iRW1hY3MgV2lraSB3 aXRoIHBhZ2UgY29udGVudCIKICAgICAgaHJlZj0iaHR0cDovL3d3dy5lbWFjc3dpa2kub3Jn L2Z1bGwucnNzIiAvPgo8bGluayByZWw9ImFsdGVybmF0ZSIgdHlwZT0iYXBwbGljYXRpb24v cnNzK3htbCIKICAgICAgdGl0bGU9IkVtYWNzIFdpa2kgd2l0aCBwYWdlIGNvbnRlbnQgYW5k IGRpZmYiCiAgICAgIGhyZWY9Imh0dHA6Ly93d3cuZW1hY3N3aWtpLm9yZy9mdWxsLWRpZmYu cnNzIiAvPgo8bGluayByZWw9ImFsdGVybmF0ZSIgdHlwZT0iYXBwbGljYXRpb24vcnNzK3ht bCIKICAgICAgdGl0bGU9IkVtYWNzIFdpa2kgaW5jbHVkaW5nIG1pbm9yIGRpZmZlcmVuY2Vz IgogICAgICBocmVmPSJodHRwOi8vd3d3LmVtYWNzd2lraS5vcmcvbWlub3ItZWRpdHMucnNz IiAvPgo8bGluayByZWw9ImFsdGVybmF0ZSIgdHlwZT0iYXBwbGljYXRpb24vcnNzK3htbCIK ICAgICAgdGl0bGU9IkNoYW5nZXMgZm9yIFRlc3Qgb25seSIKICAgICAgaHJlZj0iaHR0cDov L3d3dy5lbWFjc3dpa2kub3JnL2VtYWNzP2FjdGlvbj1yc3M7cmNpZG9ubHk9VGVzdCIgLz4K PGxpbmsgcmVsPSJhbHRlcm5hdGUiIHR5cGU9ImFwcGxpY2F0aW9uL3Jzcyt4bWwiCiAgICAg IHRpdGxlPSJGb2xsb3ctdXBzIHRvIEFub255bW91cyIKICAgICAgaHJlZj0iaHR0cDovL3d3 dy5lbWFjc3dpa2kub3JnL2VtYWNzP2FjdGlvbj1yc3M7Zm9sbG93dXA9QW5vbnltb3VzIiAv Pgo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoIiAv Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwOi8vY29kZS5qcXVl cnkuY29tL2pxdWVyeS0xLjkuMS5taW4uanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRl eHQvamF2YXNjcmlwdCIgc3JjPSJodHRwOi8vbmV0ZG5hLmJvb3RzdHJhcGNkbi5jb20vdHdp dHRlci1ib290c3RyYXAvMi4zLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+Cjxz Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly9lbWFjc3dpa2kub3Jn L2Jvb3RzdHJhcC5qcyI+PC9zY3JpcHQ+CjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlw ZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiAvPjwvaGVhZD48Ym9keSBj bGFzcz0iaHR0cDovL3d3dy5lbWFjc3dpa2kub3JnL2VtYWNzIj48ZGl2IGNsYXNzPSJoZWFk ZXIiPjxkaXYgY2xhc3M9Im1lbnUiPjxzcGFuIGNsYXNzPSJnb3RvYmFyIGJhciI+PGEgaHJl Zj0iaHR0cDovL3d3dy5lbWFjc3dpa2kub3JnL2VtYWNzL1NpdGVNYXAiIGNsYXNzPSJsb2Nh bCI+U2l0ZU1hcDwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5lbWFjc3dpa2kub3JnL2VtYWNz L1NlYXJjaCIgY2xhc3M9ImxvY2FsIj5TZWFyY2g8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cu ZW1hY3N3aWtpLm9yZy9lbWFjcy9FbGlzcEFyZWEiIGNsYXNzPSJsb2NhbCI+RWxpc3BBcmVh PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3LmVtYWNzd2lraS5vcmcvZW1hY3MvSG93VG8iIGNs YXNzPSJsb2NhbCI+SG93VG88L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cuZW1hY3N3aWtpLm9y Zy9lbWFjcy9HbG9zc2FyeSIgY2xhc3M9ImxvY2FsIj5HbG9zc2FyeTwvYT4gPGEgaHJlZj0i aHR0cDovL3d3dy5lbWFjc3dpa2kub3JnL2VtYWNzL1JlY2VudENoYW5nZXMiIGNsYXNzPSJs b2NhbCI+UmVjZW50Q2hhbmdlczwvYT4gPGEgY2xhc3M9ImxvY2FsIiBocmVmPSJodHRwOi8v d3d3LmVtYWNzd2lraS5vcmcvZW1hY3MvTmV3cyI+TmV3czwvYT4gPGEgY2xhc3M9ImxvY2Fs IiBocmVmPSJodHRwOi8vd3d3LmVtYWNzd2lraS5vcmcvZW1hY3MvUHJvYmxlbXMiPlByb2Js ZW1zPC9hPiA8YSBocmVmPSJodHRwOi8vd3d3LmVtYWNzd2lraS5vcmcvZW1hY3MvU3VnZ2Vz dGlvbnMiIGNsYXNzPSJsb2NhbCI+U3VnZ2VzdGlvbnM8L2E+IDwvc3Bhbj48Zm9ybSBtZXRo b2Q9ImdldCIgYWN0aW9uPSJodHRwOi8vd3d3LmVtYWNzd2lraS5vcmcvZW1hY3MiIGVuY3R5 cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIGFjY2VwdC1jaGFyc2V0PSJ1dGYtOCIgY2xhc3M9 InNlYXJjaCI+PHA+PGxhYmVsIGZvcj0ic2VhcmNoIj5TZWFyY2g6PC9sYWJlbD4gPGlucHV0 IHR5cGU9InRleHQiIG5hbWU9InNlYXJjaCIgIHNpemU9IjIwIiBpZD0ic2VhcmNoIiBhY2Nl c3NrZXk9ImYiIC8+IDxsYWJlbCBmb3I9InNlYXJjaGxhbmciPkxhbmd1YWdlOjwvbGFiZWw+ IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJsYW5nIiAgc2l6ZT0iMTAiIGlkPSJzZWFyY2hs YW5nIiAvPiA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJkb3NlYXJjaCIgdmFsdWU9Ikdv ISIgLz48L3A+PC9mb3JtPjwvZGl2PjxoMT5FZGl0aW5nIFRlc3Q8L2gxPjwvZGl2PjxkaXYg Y2xhc3M9IndyYXBwZXIiPjxkaXYgY2xhc3M9ImNvbnRlbnQgZWRpdCI+DQo1YjkNCjxmb3Jt IG1ldGhvZD0icG9zdCIgYWN0aW9uPSJodHRwOi8vd3d3LmVtYWNzd2lraS5vcmcvZW1hY3Mi IGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIGFjY2VwdC1jaGFyc2V0PSJ1dGYtOCIg Y2xhc3M9ImVkaXQgdGV4dCI+PHA+PGlucHV0IG5hbWU9InRpdGxlIiB0eXBlPSJoaWRkZW4i IHZhbHVlPSJUZXN0IiAvPiAgPGlucHV0IG5hbWU9Im9sZHRpbWUiIHR5cGU9ImhpZGRlbiIg dmFsdWU9IjE0MzY0Mjg5NDAiIC8+IDx0ZXh0YXJlYSBuYW1lPSJ0ZXh0IiAgcm93cz0iMjUi IGNvbHM9Ijc4IiBpZD0idGV4dCI+SGVsbG8gV29ybGQKPC90ZXh0YXJlYT48L3A+PHA+U3Vt bWFyeTo8YnIgLz48dGV4dGFyZWEgbmFtZT0ic3VtbWFyeSIgIHJvd3M9IjIiIGNvbHM9Ijc4 IiBpZD0ic3VtbWFyeSI+PC90ZXh0YXJlYT48L3A+PHA+PGxhYmVsPjxpbnB1dCB0eXBlPSJj aGVja2JveCIgbmFtZT0icmVjZW50X2VkaXQiIHZhbHVlPSJvbiIgLz5UaGlzIGNoYW5nZSBp cyBhIG1pbm9yIGVkaXQuPC9sYWJlbD48L3A+PHA+UGxlYXNlIG1ha2Ugc3VyZSB5b3UgY29u dHJpYnV0ZSBvbmx5IHlvdXIgb3duIHdvcmsuIElQIG51bWJlcnMgYXJlIG1hZGUgYXZhaWxh YmxlIHZpYSB0aGUgcGFnZSBoaXN0b3J5LiBJZiB5b3Ugd2FudCB0byBrZWVwIGl0IGEgc2Vj cmV0LCB5b3UgbmVlZCB0byB1c2UgPGEgaHJlZj0iaHR0cDovL3d3dy50b3Jwcm9qZWN0Lm9y Zy8iPlRvcjwvYT4uIFNlZSA8YSBocmVmPSIvZW1hY3MvVGV4dEZvcm1hdHRpbmdSdWxlcyI+ VGV4dEZvcm1hdHRpbmdSdWxlczwvYT4gZm9yIGhvdyB0byBmb3JtYXQgdGV4dC4gU2VlIDxh IGhyZWY9Ii9lbWFjcy9TdHlsZUd1aWRlIj5TdHlsZUd1aWRlPC9hPiBmb3IgdGhlIHN1Z2dl c3RlZCB3cml0aW5nIHN0eWxlIG9uIHRoaXMgd2lraS48L3A+PHA+PGxhYmVsIGZvcj0idXNl cm5hbWUiPlVzZXJuYW1lOjwvbGFiZWw+IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ1c2Vy bmFtZSIgdmFsdWU9IkFub255bW91cyIgc2l6ZT0iMjAiIG1heGxlbmd0aD0iNTAiIGlkPSJ1 c2VybmFtZSIgLz48L3A+PHA+PGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0iU2F2ZSIgdmFs dWU9IlNhdmUiIGFjY2Vzc2tleT0icyIgLz4gIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9 IlByZXZpZXciIHZhbHVlPSJQcmV2aWV3IiBhY2Nlc3NrZXk9InAiIC8+IDxpbnB1dCB0eXBl PSJzdWJtaXQiIG5hbWU9IkNhbmNlbCIgdmFsdWU9IkNhbmNlbCIgLz48L3A+PHA+PGEgY2xh c3M9InVwbG9hZCIgaHJlZj0iaHR0cDovL3d3dy5lbWFjc3dpa2kub3JnL2VtYWNzP2FjdGlv bj1lZGl0O3VwbG9hZD0xO2lkPVRlc3QiIHJlbD0ibm9mb2xsb3ciPlJlcGxhY2UgdGhpcyB0 ZXh0IHdpdGggYSBmaWxlPC9hPjwvcD48ZGl2PjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9 Ii5jZ2lmaWVsZHMiIHZhbHVlPSJyZWNlbnRfZWRpdCIgIC8+PC9kaXY+CjwvZm9ybT48L2Rp dj4NCjI3DQo8ZGl2IGNsYXNzPSJ3cmFwcGVyIGNsb3NlIj48L2Rpdj48L2Rpdj4NCjFhDQo8 ZGl2IGNsYXNzPSJmb290ZXIiPjxociAvPg0KMWRmDQo8ZGl2IGNsYXNzPSJlZGl0IGJhciI+ PGEgcmVsPSJub2ZvbGxvdyIgY2xhc3M9Imhpc3RvcnkiIGhyZWY9Imh0dHA6Ly93d3cuZW1h Y3N3aWtpLm9yZy9lbWFjcz9hY3Rpb249aGlzdG9yeTtpZD1UZXN0Ij5WaWV3IG90aGVyIHJl dmlzaW9uczwvYT4gPGEgY2xhc3M9ImxvY2FsIiBocmVmPSJodHRwOi8vd3d3LmVtYWNzd2lr aS5vcmcvZW1hY3MvVGVzdCI+VmlldyBjdXJyZW50IHJldmlzaW9uPC9hPiA8YSByZWw9Im5v Zm9sbG93IiBocmVmPSJodHRwOi8vd3d3LmVtYWNzd2lraS5vcmcvZW1hY3M/YWN0aW9uPXJj O2FsbD0xO2Zyb209MTtzaG93ZWRpdD0xO3JjaWRvbmx5PVRlc3QiIGNsYXNzPSJyYyI+Vmll dyBhbGwgY2hhbmdlczwvYT4gPGEgcmVsPSJub2ZvbGxvdyIgY2xhc3M9ImFkbWluIiBocmVm PSJodHRwOi8vd3d3LmVtYWNzd2lraS5vcmcvZW1hY3M/YWN0aW9uPWFkbWluO2lkPVRlc3Qi PkFkbWluaXN0cmF0aW9uPC9hPjwvZGl2Pg0KNzY0DQo8ZGl2IHN0eWxlPSJmbG9hdDpyaWdo dDsgbWFyZ2luLWxlZnQ6MWV4OyI+CjwhLS0gQ3JlYXRpdmUgQ29tbW9ucyBMaWNlbnNlIC0t Pgo8YSBjbGFzcz0ibGljZW5jZSIgaHJlZj0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcv bGljZW5zZXMvR1BMLzIuMC8iPjxpbWcgYWx0PSJDQy1HTlUgR1BMIiBzdHlsZT0iYm9yZGVy Om5vbmUiIHNyYz0iL3BpY3MvY2MtR1BMLWEucG5nIiAvPjwvYT4KPCEtLSAvQ3JlYXRpdmUg Q29tbW9ucyBMaWNlbnNlIC0tPgo8L2Rpdj4KCjwhLS0KPHJkZjpSREYgeG1sbnM9Imh0dHA6 Ly93ZWIucmVzb3VyY2Uub3JnL2NjLyIKIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMv ZWxlbWVudHMvMS4xLyIKIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8y Mi1yZGYtc3ludGF4LW5zIyI+CjxXb3JrIHJkZjphYm91dD0iIj4KICAgPGxpY2Vuc2UgcmRm OnJlc291cmNlPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9HUEwvMi4w LyIgLz4KICA8ZGM6dHlwZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21p dHlwZS9Tb2Z0d2FyZSIgLz4KPC9Xb3JrPgoKPExpY2Vuc2UgcmRmOmFib3V0PSJodHRwOi8v Y3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9HUEwvMi4wLyI+CiAgIDxwZXJtaXRzIHJk ZjpyZXNvdXJjZT0iaHR0cDovL3dlYi5yZXNvdXJjZS5vcmcvY2MvUmVwcm9kdWN0aW9uIiAv PgogICA8cGVybWl0cyByZGY6cmVzb3VyY2U9Imh0dHA6Ly93ZWIucmVzb3VyY2Uub3JnL2Nj L0Rpc3RyaWJ1dGlvbiIgLz4KICAgPHJlcXVpcmVzIHJkZjpyZXNvdXJjZT0iaHR0cDovL3dl Yi5yZXNvdXJjZS5vcmcvY2MvTm90aWNlIiAvPgogICA8cGVybWl0cyByZGY6cmVzb3VyY2U9 Imh0dHA6Ly93ZWIucmVzb3VyY2Uub3JnL2NjL0Rlcml2YXRpdmVXb3JrcyIgLz4KICAgPHJl cXVpcmVzIHJkZjpyZXNvdXJjZT0iaHR0cDovL3dlYi5yZXNvdXJjZS5vcmcvY2MvU2hhcmVB bGlrZSIgLz4KICAgPHJlcXVpcmVzIHJkZjpyZXNvdXJjZT0iaHR0cDovL3dlYi5yZXNvdXJj ZS5vcmcvY2MvU291cmNlQ29kZSIgLz4KPC9MaWNlbnNlPgo8L3JkZjpSREY+Ci0tPgoKPHAg Y2xhc3M9ImxlZ2FsIj4KVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHRvIHlvdSB1bmRlciB2ZXJz aW9uIDIgb2YgdGhlCjxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy8iPkdOVTwvYT4gPGEg aHJlZj0iL0dQTCI+R2VuZXJhbCBQdWJsaWMgTGljZW5zZTwvYT4uCkFsdGVybmF0aXZlbHks IHlvdSBtYXkgY2hvb3NlIHRvIHJlY2VpdmUgdGhpcyB3b3JrIHVuZGVyIGFueSBvdGhlcgps aWNlbnNlIHRoYXQgZ3JhbnRzIHRoZSByaWdodCB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5k L29yIGRpc3RyaWJ1dGUKdGhlIHdvcmssIGFzIGxvbmcgYXMgdGhhdCBsaWNlbnNlIGltcG9z ZXMgdGhlIHJlc3RyaWN0aW9uIHRoYXQKZGVyaXZhdGl2ZSB3b3JrcyBoYXZlIHRvIGdyYW50 IHRoZSBzYW1lIHJpZ2h0cyBhbmQgaW1wb3NlIHRoZSBzYW1lCnJlc3RyaWN0aW9uLiBGb3Ig ZXhhbXBsZSwgeW91IG1heSBjaG9vc2UgdG8gcmVjZWl2ZSB0aGlzIHdvcmsgdW5kZXIKdGhl CjxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy8iPkdOVTwvYT4KPGEgaHJlZj0iL0ZETCI+ RnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2U8L2E+LCB0aGUKPGEgaHJlZj0iaHR0cDovL2Ny ZWF0aXZlY29tbW9ucy5vcmcvIj5DcmVhdGl2ZUNvbW1vbnM8L2E+CjxhIGhyZWY9Imh0dHA6 Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL3NhLzEuMC8iPlNoYXJlQWxpa2U8L2E+ CkxpY2Vuc2UsIHRoZSBYRW1hY3MgbWFudWFsIGxpY2Vuc2UsIG9yCjxhIGhyZWY9Ii9PTEQi PnNpbWlsYXIgbGljZW5zZXM8L2E+Lgo8L3A+CjwvZGl2Pg0KMTENCgo8L2JvZHk+CjwvaHRt bD4KDQowDQoNClBPU1QgL2VtYWNzIEhUVFAvMS4xDQpIb3N0OiB3d3cuZW1hY3N3aWtpLm9y Zw0KVXNlci1BZ2VudDogTW96aWxsYS81LjAgKFgxMTsgTGludXggaTY4NjsgcnY6MzEuMCkg R2Vja28vMjAxMDAxMDEgRmlyZWZveC8zMS4wIEljZXdlYXNlbC8zMS4zLjANCkFjY2VwdDog dGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjks Ki8qO3E9MC44DQpBY2NlcHQtTGFuZ3VhZ2U6IGVuLVVTLGVuO3E9MC41DQpBY2NlcHQtRW5j b2Rpbmc6IGd6aXAsIGRlZmxhdGUNClJlZmVyZXI6IGh0dHA6Ly93d3cuZW1hY3N3aWtpLm9y Zy9lbWFjcz9hY3Rpb249ZWRpdDtpZD1UZXN0DQpDb29raWU6IFdpa2k9dWlobnNjdXNrYyUy NTFlMSUyNTFldXNlcm5hbWUlMjUxZUFub255bW91cw0KQ29ubmVjdGlvbjoga2VlcC1hbGl2 ZQ0KQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0yMDg2OTg5NTYwMTQ0MTQ4NjY0NjE0NjkyOTE1NDkNCkNv bnRlbnQtTGVuZ3RoOiA5MjENCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0yMDg2 OTg5NTYwMTQ0MTQ4NjY0NjE0NjkyOTE1NDkNCkNvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0t ZGF0YTsgbmFtZT0idGl0bGUiDQoNClRlc3QNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tMjA4Njk4OTU2MDE0NDE0ODY2NDYxNDY5MjkxNTQ5DQpDb250ZW50LURpc3Bvc2l0aW9u OiBmb3JtLWRhdGE7IG5hbWU9Im9sZHRpbWUiDQoNCjE0MzY0Mjg5NDANCi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tMjA4Njk4OTU2MDE0NDE0ODY2NDYxNDY5MjkxNTQ5DQpDb250 ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9InRleHQiDQoNCkhlbGxvIFdvcmxk IQ0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTIwODY5ODk1NjAxNDQxNDg2NjQ2 MTQ2OTI5MTU0OQ0KQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJzdW1t YXJ5Ig0KDQpUaGlzIGlzIGEgc3BhbSBlZGl0DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLTIwODY5ODk1NjAxNDQxNDg2NjQ2MTQ2OTI5MTU0OQ0KQ29udGVudC1EaXNwb3NpdGlv bjogZm9ybS1kYXRhOyBuYW1lPSJ1c2VybmFtZSINCg0KQW5vbnltb3VzDQotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLTIwODY5ODk1NjAxNDQxNDg2NjQ2MTQ2OTI5MTU0OQ0KQ29u dGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJTYXZlIg0KDQpTYXZlDQotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTIwODY5ODk1NjAxNDQxNDg2NjQ2MTQ2OTI5MTU0 OQ0KQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSIuY2dpZmllbGRzIg0K DQpyZWNlbnRfZWRpdA0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0yMDg2OTg5NTYw MTQ0MTQ4NjY0NjE0NjkyOTE1NDktLQ0KSFRUUC8xLjEgMzAyIEZvdW5kDQpTZXJ2ZXI6IG5n aW54LzEuNC42IChVYnVudHUpDQpEYXRlOiBUaHUsIDA5IEp1bCAyMDE1IDA4OjA0OjMyIEdN VA0KQ29udGVudC1UeXBlOiB0ZXh0L3gtcGVybA0KQ29udGVudC1MZW5ndGg6IDANCkNvbm5l Y3Rpb246IGtlZXAtYWxpdmUNCkxvY2F0aW9uOiBodHRwOi8vd3d3LmVtYWNzd2lraS5vcmcv ZW1hY3MvVGVzdA0KWC1FbWFjc1dpa2ktU291cmNlOiBBcGFjaGUvQ0dJDQoNCkdFVCAvZW1h Y3MvVGVzdCBIVFRQLzEuMQ0KSG9zdDogd3d3LmVtYWNzd2lraS5vcmcNClVzZXItQWdlbnQ6 IE1vemlsbGEvNS4wIChYMTE7IExpbnV4IGk2ODY7IHJ2OjMxLjApIEdlY2tvLzIwMTAwMTAx IEZpcmVmb3gvMzEuMCBJY2V3ZWFzZWwvMzEuMy4wDQpBY2NlcHQ6IHRleHQvaHRtbCxhcHBs aWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LCovKjtxPTAuOA0KQWNj ZXB0LUxhbmd1YWdlOiBlbi1VUyxlbjtxPTAuNQ0KQWNjZXB0LUVuY29kaW5nOiBnemlwLCBk ZWZsYXRlDQpSZWZlcmVyOiBodHRwOi8vd3d3LmVtYWNzd2lraS5vcmcvZW1hY3M/YWN0aW9u PWVkaXQ7aWQ9VGVzdA0KQ29va2llOiBXaWtpPXVpaG5zY3Vza2MlMjUxZTElMjUxZXVzZXJu YW1lJTI1MWVBbm9ueW1vdXMNCkNvbm5lY3Rpb246IGtlZXAtYWxpdmUNCg0KSFRUUC8xLjEg MjAwIE9LDQpTZXJ2ZXI6IG5naW54LzEuNC42IChVYnVudHUpDQpEYXRlOiBUaHUsIDA5IEp1 bCAyMDE1IDA4OjA0OjMzIEdNVA0KQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9 dXRmLTgNClRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkDQpDb25uZWN0aW9uOiBrZWVwLWFs aXZlDQpWYXJ5OiBBY2NlcHQtTGFuZ3VhZ2UNClgtRW1hY3NXaWtpLVNvdXJjZTogQXBhY2hl L0NHSQ0KWC1Qcm94eS1DYWNoZTogQllQQVNTDQoNCmVjNA0KPCFET0NUWVBFIGh0bWwgUFVC TElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgImh0dHA6Ly93d3cudzMu b3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgo8aHRtbCB4bWxucz0iaHR0 cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+PGhlYWQ+PHRpdGxlPkVtYWNzV2lraTogVGVz dDwvdGl0bGU+PGxpbmsgcmVsPSJhbHRlcm5hdGUiIHR5cGU9ImFwcGxpY2F0aW9uL3dpa2ki IHRpdGxlPSJFZGl0IHRoaXMgcGFnZSIgaHJlZj0iaHR0cDovL3d3dy5lbWFjc3dpa2kub3Jn L2VtYWNzP2FjdGlvbj1lZGl0O2lkPVRlc3QiIC8+CjxsaW5rIHR5cGU9InRleHQvY3NzIiBy ZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHA6Ly9uZXRkbmEuYm9vdHN0cmFwY2RuLmNvbS90 d2l0dGVyLWJvb3RzdHJhcC8yLjMuMC9jc3MvYm9vdHN0cmFwLWNvbWJpbmVkLm1pbi5jc3Mi IC8+CjxsaW5rIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9jc3Mv Ym9vdHN0cmFwLmNzcyIgLz4KPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJJTkRFWCxG T0xMT1ciIC8+PGxpbmsgcmVsPSJhbHRlcm5hdGUiIHR5cGU9ImFwcGxpY2F0aW9uL3Jzcyt4 bWwiIHRpdGxlPSJFbWFjc1dpa2kiIGhyZWY9Imh0dHA6Ly93d3cuZW1hY3N3aWtpLm9yZy9l bWFjcz9hY3Rpb249cnNzIiAvPjxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0eXBlPSJhcHBsaWNh dGlvbi9yc3MreG1sIiB0aXRsZT0iRW1hY3NXaWtpOiBUZXN0IiBocmVmPSJodHRwOi8vd3d3 LmVtYWNzd2lraS5vcmcvZW1hY3M/YWN0aW9uPXJzcztyY2lkb25seT1UZXN0IiAvPjxsaW5r IHJlbD0iYWx0ZXJuYXRlIiB0eXBlPSJhcHBsaWNhdGlvbi9yc3MreG1sIiB0aXRsZT0iRm9s bG93LXVwcyBmb3IgQW5vbnltb3VzIiBocmVmPSJodHRwOi8vd3d3LmVtYWNzd2lraS5vcmcv ZW1hY3M/YWN0aW9uPXJzcztmb2xsb3d1cD1Bbm9ueW1vdXMiIC8+CjxsaW5rIHJlbD0iYWx0 ZXJuYXRlIiB0eXBlPSJhcHBsaWNhdGlvbi9yc3MreG1sIgogICAgICB0aXRsZT0iRW1hY3Mg V2lraSB3aXRoIHBhZ2UgY29udGVudCIKICAgICAgaHJlZj0iaHR0cDovL3d3dy5lbWFjc3dp a2kub3JnL2Z1bGwucnNzIiAvPgo8bGluayByZWw9ImFsdGVybmF0ZSIgdHlwZT0iYXBwbGlj YXRpb24vcnNzK3htbCIKICAgICAgdGl0bGU9IkVtYWNzIFdpa2kgd2l0aCBwYWdlIGNvbnRl bnQgYW5kIGRpZmYiCiAgICAgIGhyZWY9Imh0dHA6Ly93d3cuZW1hY3N3aWtpLm9yZy9mdWxs LWRpZmYucnNzIiAvPgo8bGluayByZWw9ImFsdGVybmF0ZSIgdHlwZT0iYXBwbGljYXRpb24v cnNzK3htbCIKICAgICAgdGl0bGU9IkVtYWNzIFdpa2kgaW5jbHVkaW5nIG1pbm9yIGRpZmZl cmVuY2VzIgogICAgICBocmVmPSJodHRwOi8vd3d3LmVtYWNzd2lraS5vcmcvbWlub3ItZWRp dHMucnNzIiAvPgo8bGluayByZWw9ImFsdGVybmF0ZSIgdHlwZT0iYXBwbGljYXRpb24vcnNz K3htbCIKICAgICAgdGl0bGU9IkNoYW5nZXMgZm9yIFRlc3Qgb25seSIKICAgICAgaHJlZj0i aHR0cDovL3d3dy5lbWFjc3dpa2kub3JnL2VtYWNzP2FjdGlvbj1yc3M7cmNpZG9ubHk9VGVz dCIgLz4KPGxpbmsgcmVsPSJhbHRlcm5hdGUiIHR5cGU9ImFwcGxpY2F0aW9uL3Jzcyt4bWwi CiAgICAgIHRpdGxlPSJGb2xsb3ctdXBzIHRvIEFub255bW91cyIKICAgICAgaHJlZj0iaHR0 cDovL3d3dy5lbWFjc3dpa2kub3JnL2VtYWNzP2FjdGlvbj1yc3M7Zm9sbG93dXA9QW5vbnlt b3VzIiAvPgo8bWV0YSBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgiIG5hbWU9InZpZXdw b3J0IiAvPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvb3V0bGluZXIu MC41LjAuNjItdG9jLmpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp cHQiPgoKICBmdW5jdGlvbiBhZGRPbmxvYWRFdmVudChmbmMpIHsKICAgIGlmICggdHlwZW9m IHdpbmRvdy5hZGRFdmVudExpc3RlbmVyICE9ICJ1bmRlZmluZWQiICkKICAgICAgd2luZG93 LmFkZEV2ZW50TGlzdGVuZXIoICJsb2FkIiwgZm5jLCBmYWxzZSApOwogICAgZWxzZSBpZiAo IHR5cGVvZiB3aW5kb3cuYXR0YWNoRXZlbnQgIT0gInVuZGVmaW5lZCIgKSB7CiAgICAgIHdp bmRvdy5hdHRhY2hFdmVudCggIm9ubG9hZCIsIGZuYyApOwogICAgfQogICAgZWxzZSB7CiAg ICAgIGlmICggd2luZG93Lm9ubG9hZCAhPSBudWxsICkgewoJdmFyIG9sZE9ubG9hZCA9IHdp bmRvdy5vbmxvYWQ7Cgl3aW5kb3cub25sb2FkID0gZnVuY3Rpb24gKCBlICkgewoJICBvbGRP bmxvYWQoIGUgKTsKCSAgd2luZG93W2ZuY10oKTsKCX07CiAgICAgIH0KICAgICAgZWxzZQoJ d2luZG93Lm9ubG9hZCA9IGZuYzsKICAgIH0KICB9CgogIC8vIGh0dHBzOi8vc3RhY2tvdmVy Zmxvdy5jb20vcXVlc3Rpb25zLzI4MDYzNC9lbmRzd2l0aC1pbi1qYXZhc2NyaXB0CiAgaWYg KHR5cGVvZiBTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoICE9PSAnZnVuY3Rpb24nKSB7CiAg ICBTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoID0gZnVuY3Rpb24oc3VmZml4KSB7CiAgICAg IHJldHVybiB0aGlzLmluZGV4T2Yoc3VmZml4LCB0aGlzLmxlbmd0aCAtIHN1ZmZpeC5sZW5n dGgpICE9PSAtMTsKICAgIH07CiAgfQoKICB2YXIgaW5pdFRvYz1mdW5jdGlvbigpIHsKCiAg ICB2YXIgb3V0bGluZSA9IEhUTUw1T3V0bGluZShkb2N1bWVudC5ib2R5KTsKICAgIGlmIChv dXRsaW5lLnNlY3Rpb25zLmxlbmd0aCA9PSAxKSB7CiAgICAgIG91dGxpbmUuc2VjdGlvbnMg PSBvdXRsaW5lLnNlY3Rpb25zWzBdLnNlY3Rpb25zOwogICAgfQoKICAgIGlmIChvdXRsaW5l LnNlY3Rpb25zLmxlbmd0aCA+IDEKCXx8IG91dGxpbmUuc2VjdGlvbnMubGVuZ3RoID09IDEK ICAgICAgICAgICAmJiBvdXRsaW5lLnNlY3Rpb25zWzBdLnNlY3Rpb25zLmxlbmd0aCA+IDAp IHsKCiAgICAgIHZhciB0b2MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9jJyk7Cgog ICAgICBpZiAoIXRvYykgewoJdmFyIGRpdnMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFn TmFtZSgnZGl2Jyk7Cglmb3IgKHZhciBpID0gMDsgaSA8IGRpdnMubGVuZ3RoOyBpKyspIHsK CSAgaWYgKGRpdnNbaV0uZ2V0QXR0cmlidXRlKCdjbGFzcycpID09ICd0b2MnKSB7CgkgICAg dG9jID0gZGl2c1tpXTsKCSAgICBicmVhazsKCSAgfQoJfQogICAgICB9CgogICAgICBpZiAo IXRvYykgewoJdmFyIGgyID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2gyJylb MF07CglpZiAoaDIpIHsKCSAgdG9jID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7 CgkgIHRvYy5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3RvYycpOwoJICBoMi5wYXJlbnROb2Rl Lmluc2VydEJlZm9yZSh0b2MsIGgyKTsKCX0KICAgICAgfQoKICAgICAgaWYgKHRvYykgewog ICAgICAgIHZhciBodG1sID0gb3V0bGluZS5hc0hUTUwodHJ1ZSk7CiAgICAgICAgdG9jLmlu bmVySFRNTCA9IGh0bWw7CgoJaXRlbXMgPSB0b2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2En KTsKCWZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKCSAgd2hpbGUg KGl0ZW1zW2ldLnRleHRDb250ZW50LmVuZHNXaXRoKCfDosKcwo4nKSkgewogICAgICAgICAg ICB2YXIgdGV4dCA9IGl0ZW1zW2ldLmNoaWxkTm9kZXNbMF0ubm9kZVZhbHVlOwoJICAgIGl0 ZW1zW2ldLmNoaWxkTm9kZXNbMF0ubm9kZVZhbHVlID0gdGV4dC5zdWJzdHJpbmcoMCwgdGV4 dC5sZW5ndGggLSAxKTsKCSAgfQoJfQogICAgICB9CiAgICB9DQo3MzkNCgogIH0KCiAgYWRk T25sb2FkRXZlbnQoaW5pdFRvYyk7CiAgPC9zY3JpcHQ+Cgo8c2NyaXB0IHR5cGU9InRleHQv amF2YXNjcmlwdCIgc3JjPSJodHRwOi8vY29kZS5qcXVlcnkuY29tL2pxdWVyeS0xLjkuMS5t aW4uanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJo dHRwOi8vbmV0ZG5hLmJvb3RzdHJhcGNkbi5jb20vdHdpdHRlci1ib290c3RyYXAvMi4zLjAv anMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZh c2NyaXB0IiBzcmM9Imh0dHA6Ly9lbWFjc3dpa2kub3JnL2Jvb3RzdHJhcC5qcyI+PC9zY3Jp cHQ+CjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1s OyBjaGFyc2V0PXV0Zi04IiAvPjwvaGVhZD48Ym9keSBjbGFzcz0iaHR0cDovL3d3dy5lbWFj c3dpa2kub3JnL2VtYWNzIj48ZGl2IGNsYXNzPSJoZWFkZXIiPjxkaXYgY2xhc3M9Im1lbnUi PjxzcGFuIGNsYXNzPSJnb3RvYmFyIGJhciI+PGEgaHJlZj0iaHR0cDovL3d3dy5lbWFjc3dp a2kub3JnL2VtYWNzL1NpdGVNYXAiIGNsYXNzPSJsb2NhbCI+U2l0ZU1hcDwvYT4gPGEgY2xh c3M9ImxvY2FsIiBocmVmPSJodHRwOi8vd3d3LmVtYWNzd2lraS5vcmcvZW1hY3MvU2VhcmNo Ij5TZWFyY2g8L2E+IDxhIGNsYXNzPSJsb2NhbCIgaHJlZj0iaHR0cDovL3d3dy5lbWFjc3dp a2kub3JnL2VtYWNzL0VsaXNwQXJlYSI+RWxpc3BBcmVhPC9hPiA8YSBocmVmPSJodHRwOi8v d3d3LmVtYWNzd2lraS5vcmcvZW1hY3MvSG93VG8iIGNsYXNzPSJsb2NhbCI+SG93VG88L2E+ IDxhIGhyZWY9Imh0dHA6Ly93d3cuZW1hY3N3aWtpLm9yZy9lbWFjcy9HbG9zc2FyeSIgY2xh c3M9ImxvY2FsIj5HbG9zc2FyeTwvYT4gPGEgY2xhc3M9ImxvY2FsIiBocmVmPSJodHRwOi8v d3d3LmVtYWNzd2lraS5vcmcvZW1hY3MvUmVjZW50Q2hhbmdlcyI+UmVjZW50Q2hhbmdlczwv YT4gPGEgaHJlZj0iaHR0cDovL3d3dy5lbWFjc3dpa2kub3JnL2VtYWNzL05ld3MiIGNsYXNz PSJsb2NhbCI+TmV3czwvYT4gPGEgY2xhc3M9ImxvY2FsIiBocmVmPSJodHRwOi8vd3d3LmVt YWNzd2lraS5vcmcvZW1hY3MvUHJvYmxlbXMiPlByb2JsZW1zPC9hPiA8YSBjbGFzcz0ibG9j YWwiIGhyZWY9Imh0dHA6Ly93d3cuZW1hY3N3aWtpLm9yZy9lbWFjcy9TdWdnZXN0aW9ucyI+ U3VnZ2VzdGlvbnM8L2E+IDwvc3Bhbj48Zm9ybSBtZXRob2Q9ImdldCIgYWN0aW9uPSJodHRw Oi8vd3d3LmVtYWNzd2lraS5vcmcvZW1hY3MiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRh dGEiIGNsYXNzPSJzZWFyY2giIGFjY2VwdC1jaGFyc2V0PSJ1dGYtOCI+PHA+PGxhYmVsIGZv cj0ic2VhcmNoIj5TZWFyY2g6PC9sYWJlbD4gPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNl YXJjaCIgIHNpemU9IjIwIiBpZD0ic2VhcmNoIiBhY2Nlc3NrZXk9ImYiIC8+IDxsYWJlbCBm b3I9InNlYXJjaGxhbmciPkxhbmd1YWdlOjwvbGFiZWw+IDxpbnB1dCB0eXBlPSJ0ZXh0IiBu YW1lPSJsYW5nIiAgc2l6ZT0iMTAiIGlkPSJzZWFyY2hsYW5nIiAvPiA8aW5wdXQgdHlwZT0i c3VibWl0IiBuYW1lPSJkb3NlYXJjaCIgdmFsdWU9IkdvISIgLz48L3A+PC9mb3JtPjwvZGl2 PjxoMT48YSByZWw9Im5vZm9sbG93IiB0aXRsZT0iQ2xpY2sgdG8gc2VhcmNoIGZvciByZWZl cmVuY2VzIHRvIHRoaXMgcGFnZSIgaHJlZj0iaHR0cDovL3d3dy5lbWFjc3dpa2kub3JnL2Vt YWNzP3NlYXJjaD0lMjJUZXN0JTIyIj5UZXN0PC9hPjwvaDE+PC9kaXY+PGRpdiBjbGFzcz0i d3JhcHBlciI+PGRpdiBjbGFzcz0iY29udGVudCBicm93c2UiPjxwPkhlbGxvIFdvcmxkITwv cD4NCjYNCjwvZGl2Pg0KMjcNCjxkaXYgY2xhc3M9IndyYXBwZXIgY2xvc2UiPjwvZGl2Pjwv ZGl2Pg0KMWENCjxkaXYgY2xhc3M9ImZvb3RlciI+PGhyIC8+DQpiNGYNCjxzcGFuIGNsYXNz PSJ0cmFuc2xhdGlvbiBiYXIiPjxiciAvPiAgPGEgcmVsPSJub2ZvbGxvdyIgaHJlZj0iaHR0 cDovL3d3dy5lbWFjc3dpa2kub3JnL2VtYWNzP2FjdGlvbj10cmFuc2xhdGU7aWQ9VGVzdDtt aXNzaW5nPWRlX2VuX2VzX2ZyX2l0X2phX2tvX3B0X3J1X3NlX3VrX3poIiBjbGFzcz0idHJh bnNsYXRpb24gbmV3Ij5BZGQgVHJhbnNsYXRpb248L2E+PC9zcGFuPjxkaXYgY2xhc3M9ImVk aXQgYmFyIj48YSBjbGFzcz0iY29tbWVudCBsb2NhbCBlZGl0IiBhY2Nlc3NrZXk9ImMiIGhy ZWY9Imh0dHA6Ly93d3cuZW1hY3N3aWtpLm9yZy9lbWFjcy9Db21tZW50c19vbl9UZXN0Ij5U YWxrPC9hPiA8YSBjbGFzcz0iZWRpdCIgaHJlZj0iaHR0cDovL3d3dy5lbWFjc3dpa2kub3Jn L2VtYWNzP2FjdGlvbj1lZGl0O2lkPVRlc3QiIGFjY2Vzc2tleT0iZSIgcmVsPSJub2ZvbGxv dyIgdGl0bGU9IkNsaWNrIHRvIGVkaXQgdGhpcyBwYWdlIj5FZGl0IHRoaXMgcGFnZTwvYT4g PGEgcmVsPSJub2ZvbGxvdyIgaHJlZj0iaHR0cDovL3d3dy5lbWFjc3dpa2kub3JnL2VtYWNz P2FjdGlvbj1oaXN0b3J5O2lkPVRlc3QiIGNsYXNzPSJoaXN0b3J5Ij5WaWV3IG90aGVyIHJl dmlzaW9uczwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5lbWFjc3dpa2kub3JnL2VtYWNzP2Fj dGlvbj1hZG1pbjtpZD1UZXN0IiBjbGFzcz0iYWRtaW4iIHJlbD0ibm9mb2xsb3ciPkFkbWlu aXN0cmF0aW9uPC9hPjwvZGl2PjxkaXYgY2xhc3M9InRpbWUiPkxhc3QgZWRpdGVkIDIwMTUt MDctMDkgMDg6MDQgVVRDIGJ5IDxhIGNsYXNzPSJhdXRob3IiIGhyZWY9Imh0dHA6Ly93d3cu ZW1hY3N3aWtpLm9yZy9lbWFjcy9Bbm9ueW1vdXMiIHRpdGxlPSIxMDYuMjE2LjE1OC4zNiI+ QW5vbnltb3VzPC9hPiA8YSByZWw9Im5vZm9sbG93IiBjbGFzcz0iZGlmZiIgaHJlZj0iaHR0 cDovL3d3dy5lbWFjc3dpa2kub3JnL2VtYWNzP2FjdGlvbj1icm93c2U7ZGlmZj0yO2lkPVRl c3QiPihkaWZmKTwvYT48L2Rpdj48ZGl2IHN0eWxlPSJmbG9hdDpyaWdodDsgbWFyZ2luLWxl ZnQ6MWV4OyI+CjwhLS0gQ3JlYXRpdmUgQ29tbW9ucyBMaWNlbnNlIC0tPgo8YSBjbGFzcz0i bGljZW5jZSIgaHJlZj0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvR1BM LzIuMC8iPjxpbWcgYWx0PSJDQy1HTlUgR1BMIiBzdHlsZT0iYm9yZGVyOm5vbmUiIHNyYz0i L3BpY3MvY2MtR1BMLWEucG5nIiAvPjwvYT4KPCEtLSAvQ3JlYXRpdmUgQ29tbW9ucyBMaWNl bnNlIC0tPgo8L2Rpdj4KCjwhLS0KPHJkZjpSREYgeG1sbnM9Imh0dHA6Ly93ZWIucmVzb3Vy Y2Uub3JnL2NjLyIKIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4x LyIKIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4 LW5zIyI+CjxXb3JrIHJkZjphYm91dD0iIj4KICAgPGxpY2Vuc2UgcmRmOnJlc291cmNlPSJo dHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9HUEwvMi4wLyIgLz4KICA8ZGM6 dHlwZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9Tb2Z0d2Fy ZSIgLz4KPC9Xb3JrPgoKPExpY2Vuc2UgcmRmOmFib3V0PSJodHRwOi8vY3JlYXRpdmVjb21t b25zLm9yZy9saWNlbnNlcy9HUEwvMi4wLyI+CiAgIDxwZXJtaXRzIHJkZjpyZXNvdXJjZT0i aHR0cDovL3dlYi5yZXNvdXJjZS5vcmcvY2MvUmVwcm9kdWN0aW9uIiAvPgogICA8cGVybWl0 cyByZGY6cmVzb3VyY2U9Imh0dHA6Ly93ZWIucmVzb3VyY2Uub3JnL2NjL0Rpc3RyaWJ1dGlv biIgLz4KICAgPHJlcXVpcmVzIHJkZjpyZXNvdXJjZT0iaHR0cDovL3dlYi5yZXNvdXJjZS5v cmcvY2MvTm90aWNlIiAvPgogICA8cGVybWl0cyByZGY6cmVzb3VyY2U9Imh0dHA6Ly93ZWIu cmVzb3VyY2Uub3JnL2NjL0Rlcml2YXRpdmVXb3JrcyIgLz4KICAgPHJlcXVpcmVzIHJkZjpy ZXNvdXJjZT0iaHR0cDovL3dlYi5yZXNvdXJjZS5vcmcvY2MvU2hhcmVBbGlrZSIgLz4KICAg PHJlcXVpcmVzIHJkZjpyZXNvdXJjZT0iaHR0cDovL3dlYi5yZXNvdXJjZS5vcmcvY2MvU291 cmNlQ29kZSIgLz4KPC9MaWNlbnNlPgo8L3JkZjpSREY+Ci0tPgoKPHAgY2xhc3M9ImxlZ2Fs Ij4KVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHRvIHlvdSB1bmRlciB2ZXJzaW9uIDIgb2YgdGhl CjxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy8iPkdOVTwvYT4gPGEgaHJlZj0iL0dQTCI+ R2VuZXJhbCBQdWJsaWMgTGljZW5zZTwvYT4uCkFsdGVybmF0aXZlbHksIHlvdSBtYXkgY2hv b3NlIHRvIHJlY2VpdmUgdGhpcyB3b3JrIHVuZGVyIGFueSBvdGhlcgpsaWNlbnNlIHRoYXQg Z3JhbnRzIHRoZSByaWdodCB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1 dGUKdGhlIHdvcmssIGFzIGxvbmcgYXMgdGhhdCBsaWNlbnNlIGltcG9zZXMgdGhlIHJlc3Ry aWN0aW9uIHRoYXQKZGVyaXZhdGl2ZSB3b3JrcyBoYXZlIHRvIGdyYW50IHRoZSBzYW1lIHJp Z2h0cyBhbmQgaW1wb3NlIHRoZSBzYW1lCnJlc3RyaWN0aW9uLiBGb3IgZXhhbXBsZSwgeW91 IG1heSBjaG9vc2UgdG8gcmVjZWl2ZSB0aGlzIHdvcmsgdW5kZXIKdGhlCjxhIGhyZWY9Imh0 dHA6Ly93d3cuZ251Lm9yZy8iPkdOVTwvYT4KPGEgaHJlZj0iL0ZETCI+RnJlZSBEb2N1bWVu dGF0aW9uIExpY2Vuc2U8L2E+LCB0aGUKPGEgaHJlZj0iaHR0cDovL2NyZWF0aXZlY29tbW9u cy5vcmcvIj5DcmVhdGl2ZUNvbW1vbnM8L2E+CjxhIGhyZWY9Imh0dHA6Ly9jcmVhdGl2ZWNv bW1vbnMub3JnL2xpY2Vuc2VzL3NhLzEuMC8iPlNoYXJlQWxpa2U8L2E+CkxpY2Vuc2UsIHRo ZSBYRW1hY3MgbWFudWFsIGxpY2Vuc2UsIG9yCjxhIGhyZWY9Ii9PTEQiPnNpbWlsYXIgbGlj ZW5zZXM8L2E+Lgo8L3A+CjwvZGl2Pg0KMTENCgo8L2JvZHk+CjwvaHRtbD4KDQowDQoNCg== --------------070802080004060405060703--