From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "Juanma Barranquero" Newsgroups: gmane.emacs.devel Subject: Re: Back to emacsclient/server Date: Fri, 27 Oct 2006 02:27:09 +0200 Message-ID: References: NNTP-Posting-Host: main.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_54136_13421296.1161908829650" X-Trace: sea.gmane.org 1161908882 6307 80.91.229.2 (27 Oct 2006 00:28:02 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Fri, 27 Oct 2006 00:28:02 +0000 (UTC) Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Fri Oct 27 02:27:59 2006 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by ciao.gmane.org with esmtp (Exim 4.43) id 1GdFZO-0002vW-Hb for ged-emacs-devel@m.gmane.org; Fri, 27 Oct 2006 02:27:49 +0200 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1GdFZL-0005kX-OM for ged-emacs-devel@m.gmane.org; Thu, 26 Oct 2006 20:27:31 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1GdFZ6-0005jA-EV for emacs-devel@gnu.org; Thu, 26 Oct 2006 20:27:16 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1GdFZ2-0005cw-I6 for emacs-devel@gnu.org; Thu, 26 Oct 2006 20:27:16 -0400 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1GdFZ2-0005cm-B8 for emacs-devel@gnu.org; Thu, 26 Oct 2006 20:27:12 -0400 Original-Received: from [66.249.92.171] (helo=ug-out-1314.google.com) by monty-python.gnu.org with esmtp (Exim 4.52) id 1GdFZ1-0002Wk-D0 for emacs-devel@gnu.org; Thu, 26 Oct 2006 20:27:12 -0400 Original-Received: by ug-out-1314.google.com with SMTP id 36so588586uga for ; Thu, 26 Oct 2006 17:27:10 -0700 (PDT) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:to:subject:in-reply-to:mime-version:content-type:references; b=ky02bf0rqrGKskkuHS5VIGVaW8b/iozyPwjxR0ZuUQVEWwvv53VEPjoqhPWfgig2fWWImOVgwTm6NUPTTM2SmdWNqgfIbuPtrK8ORXbHPdOBUU/RBy8ZriWf2X1lTXgh/d95d0eZ4tHd9ZAAoYyuZDBP/PkwPQqIuK1gX6PuBck= Original-Received: by 10.82.114.3 with SMTP id m3mr1072510buc; Thu, 26 Oct 2006 17:27:09 -0700 (PDT) Original-Received: by 10.82.136.11 with HTTP; Thu, 26 Oct 2006 17:27:09 -0700 (PDT) Original-To: "Emacs Devel" In-Reply-To: X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:61212 Archived-At: ------=_Part_54136_13421296.1161908829650 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline OK, there's a rough first cut at the emacsclient patch (attached in context and unified diffs, for easier reading). No doc patches nor ChangeLogs, yet. Notes: - Should `server-ensure-safe-dir' be used also to create/check safety of the `server-auth-dir' directory (by default at ~/.emacs.d/server)? If so, `server-ensure-safe-dir' must be changed to create directories in the path (because `server-auth-dir', unlike `server-socket-dir', can be customized by the user, and so it can be at any depth). I've implemented this (by passing the PARENTS arg to `make-directory'), but I'm not sure that's the right way, security-wise. - Also, I've patched `server-ensure-safe-dir' to ignore Unix-style file permissions in Windows (checking ACLs would be useful, but I don't know whether that's possible from Emacs). - emasclient.c compiles and works fine with MinGW 3.4.5; I'll try to test it with MSVC once the code/features settle. - With an eye to porting it to MSVC, I've changed the code to use send/recv instead of streams (it'll be easier to maintain compatibility, I believe). The Unix sockets code should work OK, but I don't really know, so please test it. - I haven't tried compiling on GNU/Linux or Unix, so there could be typos or oversights, which should be trivial to fix. - There's a new argument --server-file. If --server-file (or environment variable EMACS_SERVER_FILE) exist, emacsclient uses TCP sockets, else it uses Unix sockets (either --socket-name, or "emacs" by default). - The only major thing missing is interpreting --server-file=SERVERNAME as ~/.emacs.d/server/SERVERNAME (currently, you've got to pass the full path). What would be the easier portable way to find the user directory? The $HOME (or %HOME in Windows) env var? I'd be glad if people could try the patch, with stress on testing on non-Windows environments and non-TCP sockets (I want to be sure I'm not breaking anything). Comments welcome. /L/e/k/t/u ------=_Part_54136_13421296.1161908829650 Content-Type: application/octet-stream; name=newserver-c.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_etru4bqk Content-Disposition: attachment; filename="newserver-c.patch" SW5kZXg6IGxpc3Avc2VydmVyLmVsDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2c3Jvb3QvZW1h Y3MvZW1hY3MvbGlzcC9zZXJ2ZXIuZWwsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjExMw0KZGlm ZiAtYiAtYyAtMiAtcjEuMTEzIHNlcnZlci5lbA0KKioqIGxpc3Avc2VydmVyLmVsCTYgSnVsIDIw MDYgMjI6NDg6MTYgLTAwMDAJMS4xMTMNCi0tLSBsaXNwL3NlcnZlci5lbAkyNiBPY3QgMjAwNiAy MzowNjowOCAtMDAwMA0KKioqKioqKioqKioqKioqDQoqKiogODMsODYgKioqKg0KLS0tIDgzLDEx NSAtLS0tDQogICAgOmdyb3VwICdleHRlcm5hbCkNCiAgDQorIChkZWZjdXN0b20gc2VydmVyLXVz ZS10Y3AgbmlsDQorICAgIklmIG5vbi1uaWwsIHVzZSBUQ1Agc29ja2V0cyBpbnN0ZWFkIG9mIGxv Y2FsIHNvY2tldHMuIg0KKyAgIDpzZXQgIycobGFtYmRhIChzeW0gdmFsKQ0KKyAgICAgICAgICAg IChpZiAoZmVhdHVyZXAgJ21ha2UtbmV0d29yay1wcm9jZXNzICcoOmZhbWlseSBsb2NhbCkpDQor ICAgICAgICAgICAgICAgIChzZXQtZGVmYXVsdCBzeW0gdmFsKQ0KKyAgICAgICAgICAgICAgKHVu bGVzcyBsb2FkLWluLXByb2dyZXNzDQorICAgICAgICAgICAgICAgIChtZXNzYWdlICJMb2NhbCBz b2NrZXRzIHVuc3VwcG9ydGVkLCB1c2luZyBUQ1Agc29ja2V0cyIpKQ0KKyAgICAgICAgICAgICAg KHNldC1kZWZhdWx0IHN5bSB0KSkpDQorICAgOmdyb3VwICdzZXJ2ZXINCisgICA6dHlwZSAnYm9v bGVhbg0KKyAgIDp2ZXJzaW9uICIyMi4xIikNCisgDQorIChkZWZjdXN0b20gc2VydmVyLWhvc3Qg bmlsDQorICAgIlRoZSBuYW1lIG9yIElQIGFkZHJlc3MgdG8gdXNlIGFzIGhvc3QgYWRkcmVzcyBv ZiB0aGUgc2VydmVyIHByb2Nlc3MuDQorIElmIHNldCwgdGhlIHNlcnZlciBhY2NlcHRzIHJlbW90 ZSBjb25uZWN0aW9uczsgb3RoZXJ3aXNlIGl0IGlzIGxvY2FsLiINCisgICA6Z3JvdXAgJ3NlcnZl cg0KKyAgIDp0eXBlICcoY2hvaWNlDQorICAgICAgICAgICAoc3RyaW5nIDp0YWcgIk5hbWUgb3Ig SVAgYWRkcmVzcyIpDQorICAgICAgICAgICAoY29uc3QgOnRhZyAiTG9jYWwiIG5pbCkpDQorICAg OnZlcnNpb24gIjIyLjEiKQ0KKyAocHV0ICdzZXJ2ZXItaG9zdCAncmlza3ktbG9jYWwtdmFyaWFi bGUgdCkNCisgDQorIChkZWZjdXN0b20gc2VydmVyLWF1dGgtZGlyICJ+Ly5lbWFjcy5kL3NlcnZl ci8iDQorICAgIkRpcmVjdG9yeSBmb3Igc2VydmVyIGF1dGhlbnRpY2F0aW9uIGZpbGVzLiINCisg ICA6Z3JvdXAgJ3NlcnZlcg0KKyAgIDp0eXBlICdkaXJlY3RvcnkNCisgICA6dmVyc2lvbiAiMjIu MSIpDQorIChwdXQgJ3NlcnZlci1hdXRoLWRpciAncmlza3ktbG9jYWwtdmFyaWFibGUgdCkNCisg DQogIChkZWZjdXN0b20gc2VydmVyLXZpc2l0LWhvb2sgbmlsDQogICAgIipIb29rIHJ1biB3aGVu IHZpc2l0aW5nIGEgZmlsZSBmb3IgdGhlIEVtYWNzIHNlcnZlci4iDQoqKioqKioqKioqKioqKioN CioqKiAxMDEsMTA0ICoqKioNCi0tLSAxMzAsMTM2IC0tLS0NCiAgICAiVGhlIGN1cnJlbnQgc2Vy dmVyIHByb2Nlc3MuIikNCiAgDQorIChkZWZ2YXIgc2VydmVyLWF1dGgtc3RyaW5nIG5pbA0KKyAg ICJUaGUgY3VycmVudCBzZXJ2ZXIgYXV0aGVudGljYXRpb24gc3RyaW5nLiIpDQorIA0KICAoZGVm dmFyIHNlcnZlci1jbGllbnRzIG5pbA0KICAgICJMaXN0IG9mIGN1cnJlbnQgc2VydmVyIGNsaWVu dHMuDQoqKioqKioqKioqKioqKioNCioqKiAyMzIsMjQyICoqKioNCiAgICAobGV0ICgoYXR0cnMg KGZpbGUtYXR0cmlidXRlcyBkaXIpKSkNCiAgICAgICh1bmxlc3MgYXR0cnMNCiEgICAgICAgKGxl dGYgKCgoZGVmYXVsdC1maWxlLW1vZGVzKSA/XDcwMCkpIChtYWtlLWRpcmVjdG9yeSBkaXIpKQ0K ICAgICAgICAoc2V0cSBhdHRycyAoZmlsZS1hdHRyaWJ1dGVzIGRpcikpKQ0KICAgICAgOzsgQ2hl Y2sgdGhhdCBpdCdzIHNhZmUgZm9yIHVzZS4NCiAgICAgICh1bmxlc3MgKGFuZCAoZXEgdCAoY2Fy IGF0dHJzKSkgKGVxIChudGggMiBhdHRycykgKHVzZXItdWlkKSkNCiEgCQkgKHplcm9wIChsb2dh bmQgP1wwNzcgKGZpbGUtbW9kZXMgZGlyKSkpKQ0KICAgICAgICAoZXJyb3IgIlRoZSBkaXJlY3Rv cnkgJXMgaXMgdW5zYWZlIiBkaXIpKSkpDQogIA0KICA7OzsjIyNhdXRvbG9hZA0KICAoZGVmdW4g c2VydmVyLXN0YXJ0ICgmb3B0aW9uYWwgbGVhdmUtZGVhZCkNCi0tLSAyNjQsMjg1IC0tLS0NCiAg ICAobGV0ICgoYXR0cnMgKGZpbGUtYXR0cmlidXRlcyBkaXIpKSkNCiAgICAgICh1bmxlc3MgYXR0 cnMNCiEgICAgICAgKGxldGYgKCgoZGVmYXVsdC1maWxlLW1vZGVzKSA/XDcwMCkpIChtYWtlLWRp cmVjdG9yeSBkaXIgdCkpDQogICAgICAgIChzZXRxIGF0dHJzIChmaWxlLWF0dHJpYnV0ZXMgZGly KSkpDQogICAgICA7OyBDaGVjayB0aGF0IGl0J3Mgc2FmZSBmb3IgdXNlLg0KICAgICAgKHVubGVz cyAoYW5kIChlcSB0IChjYXIgYXR0cnMpKSAoZXEgKG50aCAyIGF0dHJzKSAodXNlci11aWQpKQ0K ISAgICAgICAgICAgICAgICAgIChvciAoZXEgc3lzdGVtLXR5cGUgJ3dpbmRvd3MtbnQpDQohICAg ICAgICAgICAgICAgICAgICAgICh6ZXJvcCAobG9nYW5kID9cMDc3IChmaWxlLW1vZGVzIGRpcikp KSkpDQogICAgICAgIChlcnJvciAiVGhlIGRpcmVjdG9yeSAlcyBpcyB1bnNhZmUiIGRpcikpKSkN CiAgDQorIChkZWZ1biBzZXJ2ZXItYXV0aC1zdHJpbmcgKCkNCisgICAob3Igc2VydmVyLWF1dGgt c3RyaW5nDQorICAgICAgIDs7IElmIHRoZSBhdXRoZW50aWNhdGlvbiBzdHJpbmcgZG9lcyBub3Qg ZXhpc3QsIGNyZWF0ZSBpdCBvbiB0aGUgZmx5Og0KKyAgICAgICA7OyBpdCdzIGEgNjQtYnl0ZSBz dHJpbmcgb2YgcmFuZG9tIGNoYXJzIGluIHRoZSByYW5nZSBgIScuLmB+Jy4NCisgICAgICAgKHNl dHEgc2VydmVyLWF1dGgtc3RyaW5nDQorIAkgICAgKGxvb3ANCisgCSAgICAgICBmb3IgaSBiZWxv dyA2NA0KKyAJICAgICAgIGNvbGxlY3QgKCsgMzMgKHJhbmRvbSA5NCkpIGludG8gYXV0aA0KKyAJ ICAgICAgIGZpbmFsbHkgcmV0dXJuIChjb25jYXQgYXV0aCkpKSkpDQorIA0KICA7OzsjIyNhdXRv bG9hZA0KICAoZGVmdW4gc2VydmVyLXN0YXJ0ICgmb3B0aW9uYWwgbGVhdmUtZGVhZCkNCioqKioq KioqKioqKioqKg0KKioqIDI0OSwyNTkgKioqKg0KICBQcmVmaXggYXJnIG1lYW5zIGp1c3Qga2ls bCBhbnkgZXhpc3Rpbmcgc2VydmVyIGNvbW11bmljYXRpb25zIHN1YnByb2Nlc3MuIg0KICAgIChp bnRlcmFjdGl2ZSAiUCIpDQogICAgOzsga2lsbCBpdCBkZWFkIQ0KISAgIChpZiBzZXJ2ZXItcHJv Y2Vzcw0KISAgICAgICAoY29uZGl0aW9uLWNhc2UgKCkgKGRlbGV0ZS1wcm9jZXNzIHNlcnZlci1w cm9jZXNzKSAoZXJyb3IgbmlsKSkpDQohICAgOzsgRGVsZXRlIHRoZSBzb2NrZXQgZmlsZXMgbWFk ZSBieSBwcmV2aW91cyBzZXJ2ZXIgaW52b2NhdGlvbnMuDQohICAgKGNvbmRpdGlvbi1jYXNlICgp DQogICAgICAgIChkZWxldGUtZmlsZSAoZXhwYW5kLWZpbGUtbmFtZSBzZXJ2ZXItbmFtZSBzZXJ2 ZXItc29ja2V0LWRpcikpDQohICAgICAoZXJyb3IgbmlsKSkNCiAgICA7OyBJZiB0aGlzIEVtYWNz IGFscmVhZHkgaGFkIGEgc2VydmVyLCBjbGVhciBvdXQgYXNzb2NpYXRlZCBzdGF0dXMuDQogICAg KHdoaWxlIHNlcnZlci1jbGllbnRzDQotLS0gMjkyLDMwNCAtLS0tDQogIFByZWZpeCBhcmcgbWVh bnMganVzdCBraWxsIGFueSBleGlzdGluZyBzZXJ2ZXIgY29tbXVuaWNhdGlvbnMgc3VicHJvY2Vz cy4iDQogICAgKGludGVyYWN0aXZlICJQIikNCisgICAod2hlbiBzZXJ2ZXItcHJvY2Vzcw0KICAg ICAgOzsga2lsbCBpdCBkZWFkIQ0KISAgICAgKGlnbm9yZS1lcnJvcnMgKGRlbGV0ZS1wcm9jZXNz IHNlcnZlci1wcm9jZXNzKSkNCiEgICAgIChpZ25vcmUtZXJyb3JzDQohICAgICAgIDs7IERlbGV0 ZSB0aGUgc29ja2V0IG9yIGF1dGhlbnRpY2F0aW9uIGZpbGVzIG1hZGUgYnkgcHJldmlvdXMgc2Vy dmVyIGludm9jYXRpb25zLg0KISAgICAgICAoaWYgKGVxIChwcm9jZXNzLWNvbnRhY3Qgc2VydmVy LXByb2Nlc3MgOmZhbWlseSkgJ2xvY2FsKQ0KICAgICAgICAgICAgKGRlbGV0ZS1maWxlIChleHBh bmQtZmlsZS1uYW1lIHNlcnZlci1uYW1lIHNlcnZlci1zb2NrZXQtZGlyKSkNCiEgICAgICAgICAo c2V0cSBzZXJ2ZXItYXV0aC1zdHJpbmcgbmlsKQ0KISAgICAgICAgIChkZWxldGUtZmlsZSAoZXhw YW5kLWZpbGUtbmFtZSBzZXJ2ZXItbmFtZSBzZXJ2ZXItYXV0aC1kaXIpKSkpKQ0KICAgIDs7IElm IHRoaXMgRW1hY3MgYWxyZWFkeSBoYWQgYSBzZXJ2ZXIsIGNsZWFyIG91dCBhc3NvY2lhdGVkIHN0 YXR1cy4NCiAgICAod2hpbGUgc2VydmVyLWNsaWVudHMNCioqKioqKioqKioqKioqKg0KKioqIDI2 MywyNzkgKioqKg0KICAgICh1bmxlc3MgbGVhdmUtZGVhZA0KICAgICAgOzsgTWFrZSBzdXJlIHRo ZXJlIGlzIGEgc2FmZSBkaXJlY3RvcnkgaW4gd2hpY2ggdG8gcGxhY2UgdGhlIHNvY2tldC4NCiEg ICAgIChzZXJ2ZXItZW5zdXJlLXNhZmUtZGlyIHNlcnZlci1zb2NrZXQtZGlyKQ0KISAgICAgKGlm IHNlcnZlci1wcm9jZXNzDQogIAkoc2VydmVyLWxvZyAobWVzc2FnZSAiUmVzdGFydGluZyBzZXJ2 ZXIiKSkpDQogICAgICAobGV0ZiAoKChkZWZhdWx0LWZpbGUtbW9kZXMpID9cNzAwKSkNCiAgICAg ICAgKHNldHEgc2VydmVyLXByb2Nlc3MNCiEgCSAgICAobWFrZS1uZXR3b3JrLXByb2Nlc3MNCiEg CSAgICAgOm5hbWUgInNlcnZlciIgOmZhbWlseSAnbG9jYWwgOnNlcnZlciB0IDpub3F1ZXJ5IHQN CiEgCSAgICAgOnNlcnZpY2UgKGV4cGFuZC1maWxlLW5hbWUgc2VydmVyLW5hbWUgc2VydmVyLXNv Y2tldC1kaXIpDQohIAkgICAgIDpzZW50aW5lbCAnc2VydmVyLXNlbnRpbmVsIDpmaWx0ZXIgJ3Nl cnZlci1wcm9jZXNzLWZpbHRlcg0KICAJICAgICA7OyBXZSBtdXN0IHJlY2VpdmUgZmlsZSBuYW1l cyB3aXRob3V0IGJlaW5nIGRlY29kZWQuDQogIAkgICAgIDs7IFRob3NlIGFyZSBkZWNvZGVkIGJ5 IHNlcnZlci1wcm9jZXNzLWZpbHRlciBhY2NvcmRpbmcNCiAgCSAgICAgOzsgdG8gZmlsZS1uYW1l LWNvZGluZy1zeXN0ZW0uDQohIAkgICAgIDpjb2RpbmcgJ3Jhdy10ZXh0KSkpKSkNCiAgDQogIDs7 OyMjI2F1dG9sb2FkDQotLS0gMzA4LDM0MiAtLS0tDQogICAgKHVubGVzcyBsZWF2ZS1kZWFkDQog ICAgICA7OyBNYWtlIHN1cmUgdGhlcmUgaXMgYSBzYWZlIGRpcmVjdG9yeSBpbiB3aGljaCB0byBw bGFjZSB0aGUgc29ja2V0Lg0KISAgICAgKHNlcnZlci1lbnN1cmUtc2FmZS1kaXIgKGlmIHNlcnZl ci11c2UtdGNwIHNlcnZlci1hdXRoLWRpciBzZXJ2ZXItc29ja2V0LWRpcikpDQohICAgICAod2hl biBzZXJ2ZXItcHJvY2Vzcw0KICAgICAgICAoc2VydmVyLWxvZyAobWVzc2FnZSAiUmVzdGFydGlu ZyBzZXJ2ZXIiKSkpDQogICAgICAobGV0ZiAoKChkZWZhdWx0LWZpbGUtbW9kZXMpID9cNzAwKSkN CiAgICAgICAgKHNldHEgc2VydmVyLXByb2Nlc3MNCiEgICAgICAgICAgICAgKGFwcGx5ICMnbWFr ZS1uZXR3b3JrLXByb2Nlc3MNCiEgICAgICAgICAgICAgICAgICAgIDpuYW1lIHNlcnZlci1uYW1l DQohICAgICAgICAgICAgICAgICAgICA6c2VydmVyIHQNCiEgICAgICAgICAgICAgICAgICAgIDpu b3F1ZXJ5IHQNCiEgICAgICAgICAgICAgICAgICAgIDpzZW50aW5lbCAnc2VydmVyLXNlbnRpbmVs DQohICAgICAgICAgICAgICAgICAgICA6ZmlsdGVyICdzZXJ2ZXItcHJvY2Vzcy1maWx0ZXINCiAg ICAgICAgICAgICAgICAgICAgIDs7IFdlIG11c3QgcmVjZWl2ZSBmaWxlIG5hbWVzIHdpdGhvdXQg YmVpbmcgZGVjb2RlZC4NCiAgICAgICAgICAgICAgICAgICAgIDs7IFRob3NlIGFyZSBkZWNvZGVk IGJ5IHNlcnZlci1wcm9jZXNzLWZpbHRlciBhY2NvcmRpbmcNCiAgICAgICAgICAgICAgICAgICAg IDs7IHRvIGZpbGUtbmFtZS1jb2Rpbmctc3lzdGVtLg0KISAgICAgICAgICAgICAgICAgICAgOmNv ZGluZyAncmF3LXRleHQNCiEgICAgICAgICAgICAgICAgICAgIDs7IFRoZSByZXN0IG9mIHRoZSBh cmd1bWVudHMgZGVwZW5kIG9uIHRoZSBraW5kIG9mIHNvY2tldCB1c2VkDQohICAgICAgICAgICAg ICAgICAgICAoaWYgc2VydmVyLXVzZS10Y3ANCiEgICAgICAgICAgICAgICAgICAgICAgICAobGlz dCA6ZmFtaWx5IG5pbA0KISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzZXJ2aWNlIHQN CiEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6aG9zdCAob3Igc2VydmVyLWhvc3QgJ2xv Y2FsKQ0KISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpwbGlzdCAnKDphdXRoZW50aWNh dGVkIG5pbCkpDQohICAgICAgICAgICAgICAgICAgICAgIChsaXN0IDpmYW1pbHkgJ2xvY2FsDQoh ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzZXJ2aWNlIChleHBhbmQtZmlsZS1uYW1lIHNl cnZlci1uYW1lIHNlcnZlci1zb2NrZXQtZGlyKQ0KISAgICAgICAgICAgICAgICAgICAgICAgICAg ICA6cGxpc3QgJyg6YXV0aGVudGljYXRlZCB0KSkpKSkpDQohICAgICAodW5sZXNzIHNlcnZlci1w cm9jZXNzIChlcnJvciAiQ291bGQgbm90IHN0YXJ0IHNlcnZlciBwcm9jZXNzIikpDQohICAgICAo d2hlbiBzZXJ2ZXItdXNlLXRjcA0KISAgICAgICAod2l0aC10ZW1wLWZpbGUgKGV4cGFuZC1maWxl LW5hbWUgc2VydmVyLW5hbWUgc2VydmVyLWF1dGgtZGlyKQ0KISAgICAgICAgIChzZXQtYnVmZmVy LW11bHRpYnl0ZSBuaWwpDQohICAgICAgICAgKHNldHEgYnVmZmVyLWZpbGUtY29kaW5nLXN5c3Rl bSAnbm8tY29udmVyc2lvbikNCiEgICAgICAgICAoaW5zZXJ0IChmb3JtYXQtbmV0d29yay1hZGRy ZXNzIChwcm9jZXNzLWNvbnRhY3Qgc2VydmVyLXByb2Nlc3MgOmxvY2FsKSkNCiEgICAgICAgICAg ICAgICAgICJcbiIgKHNlcnZlci1hdXRoLXN0cmluZykpKSkpKQ0KICANCiAgOzs7IyMjYXV0b2xv YWQNCioqKioqKioqKioqKioqKg0KKioqIDI5MCwzMDEgKioqKg0KICAgIChzZXJ2ZXItc3RhcnQg KG5vdCBzZXJ2ZXItbW9kZSkpKQ0KICAMDQohIChkZWZ1biBzZXJ2ZXItcHJvY2Vzcy1maWx0ZXIg KHByb2Mgc3RyaW5nKQ0KICAgICJQcm9jZXNzIGEgcmVxdWVzdCBmcm9tIHRoZSBzZXJ2ZXIgdG8g ZWRpdCBzb21lIGZpbGVzLg0KICBQUk9DIGlzIHRoZSBzZXJ2ZXIgcHJvY2Vzcy4gIEZvcm1hdCBv ZiBTVFJJTkcgaXMgXCJQQVRIIFBBVEggUEFUSC4uLiBcXG5cIi4iDQogICAgKHNlcnZlci1sb2cg c3RyaW5nIHByb2MpDQohICAgKGxldCAoKHByZXYgKHByb2Nlc3MtZ2V0IHByb2MgJ3ByZXZpb3Vz LXN0cmluZykpKQ0KICAgICAgKHdoZW4gcHJldg0KICAgICAgICAoc2V0cSBzdHJpbmcgKGNvbmNh dCBwcmV2IHN0cmluZykpDQohICAgICAgIChwcm9jZXNzLXB1dCBwcm9jICdwcmV2aW91cy1zdHJp bmcgbmlsKSkpDQogICAgOzsgSWYgdGhlIGlucHV0IGlzIG11bHRpcGxlIGxpbmVzLA0KICAgIDs7 IHByb2Nlc3MgZWFjaCBsaW5lIGluZGl2aWR1YWxseS4NCi0tLSAzNTMsMzc1IC0tLS0NCiAgICAo c2VydmVyLXN0YXJ0IChub3Qgc2VydmVyLW1vZGUpKSkNCiAgDA0KISAoZGVmdW4qIHNlcnZlci1w cm9jZXNzLWZpbHRlciAocHJvYyBzdHJpbmcpDQogICAgIlByb2Nlc3MgYSByZXF1ZXN0IGZyb20g dGhlIHNlcnZlciB0byBlZGl0IHNvbWUgZmlsZXMuDQogIFBST0MgaXMgdGhlIHNlcnZlciBwcm9j ZXNzLiAgRm9ybWF0IG9mIFNUUklORyBpcyBcIlBBVEggUEFUSCBQQVRILi4uIFxcblwiLiINCisg ICA7OyBGaXJzdCB0aGluZ3MgZmlyc3Q6IGxldCdzIGNoZWNrIHRoZSBhdXRoZW50aWNhdGlvbg0K KyAgICh1bmxlc3MgKHByb2Nlc3MtZ2V0IHByb2MgOmF1dGhlbnRpY2F0ZWQpDQorICAgICAoaWYg KGFuZCAoc3RyaW5nLW1hdGNoICItYXV0aCBcXCguKj9cXClcbiIgc3RyaW5nKQ0KKyAgICAgICAg ICAgICAgKHN0cmluZz0gKG1hdGNoLXN0cmluZyAxIHN0cmluZykgc2VydmVyLWF1dGgtc3RyaW5n KSkNCisgICAgICAgICAocHJvZ24NCisgICAgICAgICAgIChzZXRxIHN0cmluZyAoc3Vic3RyaW5n IHN0cmluZyAobWF0Y2gtZW5kIDApKSkNCisgICAgICAgICAgIChwcm9jZXNzLXB1dCBwcm9jIDph dXRoZW50aWNhdGVkIHQpDQorICAgICAgICAgICAoc2VydmVyLWxvZyAiQXV0aGVudGljYXRpb24g c3VjY2Vzc2Z1bCIgcHJvYykpDQorICAgICAgIChzZXJ2ZXItbG9nICJBdXRoZW50aWNhdGlvbiBm YWlsZWQiIHByb2MpDQorICAgICAgIChkZWxldGUtcHJvY2VzcyBwcm9jKQ0KKyAgICAgICAocmV0 dXJuLWZyb20gc2VydmVyLXByb2Nlc3MtZmlsdGVyKSkpDQogICAgKHNlcnZlci1sb2cgc3RyaW5n IHByb2MpDQohICAgKGxldCAoKHByZXYgKHByb2Nlc3MtZ2V0IHByb2MgOnByZXZpb3VzLXN0cmlu ZykpKQ0KICAgICAgKHdoZW4gcHJldg0KICAgICAgICAoc2V0cSBzdHJpbmcgKGNvbmNhdCBwcmV2 IHN0cmluZykpDQohICAgICAgIChwcm9jZXNzLXB1dCBwcm9jIDpwcmV2aW91cy1zdHJpbmcgbmls KSkpDQogICAgOzsgSWYgdGhlIGlucHV0IGlzIG11bHRpcGxlIGxpbmVzLA0KICAgIDs7IHByb2Nl c3MgZWFjaCBsaW5lIGluZGl2aWR1YWxseS4NCioqKioqKioqKioqKioqKg0KKioqIDM5MCwzOTQg KioqKg0KICAgIDs7IFNhdmUgZm9yIGxhdGVyIGFueSBwYXJ0aWFsIGxpbmUgdGhhdCByZW1haW5z Lg0KICAgICh3aGVuICg+IChsZW5ndGggc3RyaW5nKSAwKQ0KISAgICAgKHByb2Nlc3MtcHV0IHBy b2MgJ3ByZXZpb3VzLXN0cmluZyBzdHJpbmcpKSkNCiAgDQogIChkZWZ1biBzZXJ2ZXItZ290by1s aW5lLWNvbHVtbiAoZmlsZS1saW5lLWNvbCkNCi0tLSA0NjQsNDY4IC0tLS0NCiAgICA7OyBTYXZl IGZvciBsYXRlciBhbnkgcGFydGlhbCBsaW5lIHRoYXQgcmVtYWlucy4NCiAgICAod2hlbiAoPiAo bGVuZ3RoIHN0cmluZykgMCkNCiEgICAgIChwcm9jZXNzLXB1dCBwcm9jIDpwcmV2aW91cy1zdHJp bmcgc3RyaW5nKSkpDQogIA0KICAoZGVmdW4gc2VydmVyLWdvdG8tbGluZS1jb2x1bW4gKGZpbGUt bGluZS1jb2wpDQpJbmRleDogbGliLXNyYy9lbWFjc2NsaWVudC5jDQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1Mg ZmlsZTogL2N2c3Jvb3QvZW1hY3MvZW1hY3MvbGliLXNyYy9lbWFjc2NsaWVudC5jLHYNCnJldHJp ZXZpbmcgcmV2aXNpb24gMS43Nw0KZGlmZiAtYiAtYyAtMiAtcjEuNzcgZW1hY3NjbGllbnQuYw0K KioqIGxpYi1zcmMvZW1hY3NjbGllbnQuYwkxOCBKdWwgMjAwNiAxNjozMzo0NSAtMDAwMAkxLjc3 DQotLS0gbGliLXNyYy9lbWFjc2NsaWVudC5jCTI3IE9jdCAyMDA2IDAwOjA2OjAxIC0wMDAwDQoq KioqKioqKioqKioqKioNCioqKiAyNywzNSAqKioqDQogICNlbmRpZg0KICANCiAgI3VuZGVmIHNp Z25hbA0KICANCiAgI2luY2x1ZGUgPGN0eXBlLmg+DQogICNpbmNsdWRlIDxzdGRpby5oPg0KISAj aW5jbHVkZSA8Z2V0b3B0Lmg+DQogICNpZmRlZiBIQVZFX1VOSVNURF9IDQogICNpbmNsdWRlIDx1 bmlzdGQuaD4NCi0tLSAyNyw0MCAtLS0tDQogICNlbmRpZg0KICANCisgI2lmZGVmIFdJTkRPV1NO VA0KKyAjZGVmaW5lIEhBVkVfU09DS0VUUw0KKyAjZGVmaW5lIE5PX1NPQ0tFVFNfSU5fRklMRV9T WVNURU0NCisgI2VuZGlmDQorIA0KICAjdW5kZWYgc2lnbmFsDQogIA0KICAjaW5jbHVkZSA8Y3R5 cGUuaD4NCiAgI2luY2x1ZGUgPHN0ZGlvLmg+DQohICNpbmNsdWRlICJnZXRvcHQuaCINCiAgI2lm ZGVmIEhBVkVfVU5JU1REX0gNCiAgI2luY2x1ZGUgPHVuaXN0ZC5oPg0KKioqKioqKioqKioqKioq DQoqKiogMzgsNDMgKioqKg0KICAjaWZkZWYgVk1TDQogICMgaW5jbHVkZSAidm1zLXB3ZC5oIg0K ISAjZWxzZQ0KICAjIGluY2x1ZGUgPHB3ZC5oPg0KICAjZW5kaWYgLyogbm90IFZNUyAqLw0KICAN Ci0tLSA0Myw1MiAtLS0tDQogICNpZmRlZiBWTVMNCiAgIyBpbmNsdWRlICJ2bXMtcHdkLmgiDQoh ICNlbHNlIC8qIG5vdCBWTVMgKi8NCiEgI2lmZGVmIFdJTkRPV1NOVA0KISAjIGluY2x1ZGUgPGlv Lmg+DQohICNlbHNlIC8qIG5vdCBXSU5ET1dTTlQgKi8NCiAgIyBpbmNsdWRlIDxwd2QuaD4NCisg I2VuZGlmIC8qIG5vdCBXSU5ET1dTTlQgKi8NCiAgI2VuZGlmIC8qIG5vdCBWTVMgKi8NCiAgDQoq KioqKioqKioqKioqKioNCioqKiA0OSw1MiAqKioqDQotLS0gNTgsNzYgLS0tLQ0KICAjZW5kaWYN CiAgDQorICNkZWZpbmUgU0VORF9TVFJJTkcoZGF0YSkgKHNlbmRfdG9fZW1hY3MgKHMsIChkYXRh KSkpDQorICNkZWZpbmUgU0VORF9RVU9URUQoZGF0YSkgKHF1b3RlX2ZpbGVfbmFtZSAocywgKGRh dGEpKSkNCisgDQorICNpZm5kZWYgRVhJVF9TVUNDRVNTDQorICNkZWZpbmUgRVhJVF9TVUNDRVNT IDANCisgI2VuZGlmDQorIA0KKyAjaWZuZGVmIEVYSVRfRkFJTFVSRQ0KKyAjZGVmaW5lIEVYSVRf RkFJTFVSRSAxDQorICNlbmRpZg0KKyANCisgI2lmbmRlZiBOT19SRVRVUk4NCisgI2RlZmluZSBO T19SRVRVUk4NCisgI2VuZGlmDQorIAwNCiAgLyogTmFtZSB1c2VkIHRvIGludm9rZSB0aGlzIHBy b2dyYW0uICAqLw0KICBjaGFyICpwcm9nbmFtZTsNCioqKioqKioqKioqKioqKg0KKioqIDY4LDcx ICoqKioNCi0tLSA5Miw5OCAtLS0tDQogIGNoYXIgKnNvY2tldF9uYW1lID0gTlVMTDsNCiAgDQor IC8qIElmIG5vbi1OVUxMLCB0aGUgZmlsZW5hbWUgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIGZpbGUu ICAqLw0KKyBjaGFyICpzZXJ2ZXJfZmlsZSA9IE5VTEw7DQorIA0KICB2b2lkIHByaW50X2hlbHBf YW5kX2V4aXQgKCkgTk9fUkVUVVJOOw0KICANCioqKioqKioqKioqKioqKg0KKioqIDc4LDgxICoq KioNCi0tLSAxMDUsMTA5IC0tLS0NCiAgICB7ICJhbHRlcm5hdGUtZWRpdG9yIiwgcmVxdWlyZWRf YXJndW1lbnQsIE5VTEwsICdhJyB9LA0KICAgIHsgInNvY2tldC1uYW1lIiwJcmVxdWlyZWRfYXJn dW1lbnQsIE5VTEwsICdzJyB9LA0KKyAgIHsgInNlcnZlci1maWxlIiwJcmVxdWlyZWRfYXJndW1l bnQsIE5VTEwsICdmJyB9LA0KICAgIHsgImRpc3BsYXkiLAlyZXF1aXJlZF9hcmd1bWVudCwgTlVM TCwgJ2QnIH0sDQogICAgeyAwLCAwLCAwLCAwIH0NCioqKioqKioqKioqKioqKg0KKioqIDkxLDk5 ICoqKioNCiAgew0KICAgIGFsdGVybmF0ZV9lZGl0b3IgPSBnZXRlbnYgKCJBTFRFUk5BVEVfRURJ VE9SIik7DQogIA0KICAgIHdoaWxlICgxKQ0KICAgICAgew0KICAgICAgICBpbnQgb3B0ID0gZ2V0 b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsDQohIAkJCSAgICAgIlZIbmVhOnM6ZDoiLCBsb25nb3B0cywg MCk7DQogIA0KICAgICAgICBpZiAob3B0ID09IEVPRikNCi0tLSAxMTksMTI4IC0tLS0NCiAgew0K ICAgIGFsdGVybmF0ZV9lZGl0b3IgPSBnZXRlbnYgKCJBTFRFUk5BVEVfRURJVE9SIik7DQorICAg c2VydmVyX2ZpbGUgPSBnZXRlbnYgKCJFTUFDU19TRVJWRVJfRklMRSIpOw0KICANCiAgICB3aGls ZSAoMSkNCiAgICAgIHsNCiAgICAgICAgaW50IG9wdCA9IGdldG9wdF9sb25nIChhcmdjLCBhcmd2 LA0KISAJCQkgICAgICJWSG5lYTpzOmY6ZDoiLCBsb25nb3B0cywgMCk7DQogIA0KICAgICAgICBp ZiAob3B0ID09IEVPRikNCioqKioqKioqKioqKioqKg0KKioqIDExNSwxMTggKioqKg0KLS0tIDE0 NCwxNTEgLS0tLQ0KICAJICBicmVhazsNCiAgDQorIAljYXNlICdmJzoNCisgCSAgc2VydmVyX2Zp bGUgPSBvcHRhcmc7DQorIAkgIGJyZWFrOw0KKyANCiAgCWNhc2UgJ2QnOg0KICAJICBkaXNwbGF5 ID0gb3B0YXJnOw0KKioqKioqKioqKioqKioqDQoqKiogMTU4LDE2MyAqKioqDQogIC1lLCAtLWV2 YWwgICAgICAgICAgICAgIEV2YWx1YXRlIHRoZSBGSUxFIGFyZ3VtZW50cyBhcyBFTGlzcCBleHBy ZXNzaW9uc1xuXA0KICAtZCwgLS1kaXNwbGF5PURJU1BMQVkgICBWaXNpdCB0aGUgZmlsZSBpbiB0 aGUgZ2l2ZW4gZGlzcGxheVxuXA0KISAtcywgLS1zb2NrZXQtbmFtZT1GSUxFTkFNRVxuXA0KICAg ICAgICAgICAgICAgICAgICAgICAgICBTZXQgdGhlIGZpbGVuYW1lIG9mIHRoZSBVTklYIHNvY2tl dCBmb3IgY29tbXVuaWNhdGlvblxuXA0KICAtYSwgLS1hbHRlcm5hdGUtZWRpdG9yPUVESVRPUlxu XA0KICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IgdG8gZmFsbGJhY2sgdG8gaWYgdGhl IHNlcnZlciBpcyBub3QgcnVubmluZ1xuXA0KLS0tIDE5MSwyMDIgLS0tLQ0KICAtZSwgLS1ldmFs CQlFdmFsdWF0ZSB0aGUgRklMRSBhcmd1bWVudHMgYXMgRUxpc3AgZXhwcmVzc2lvbnNcblwNCiAg LWQsIC0tZGlzcGxheT1ESVNQTEFZCVZpc2l0IHRoZSBmaWxlIGluIHRoZSBnaXZlbiBkaXNwbGF5 XG5cDQohICINCiEgI2lmbmRlZiBOT19TT0NLRVRTX0lOX0ZJTEVfU1lTVEVNDQohICItcywgLS1z b2NrZXQtbmFtZT1GSUxFTkFNRVxuXA0KICAJCQlTZXQgdGhlIGZpbGVuYW1lIG9mIHRoZSBVTklY IHNvY2tldCBmb3IgY29tbXVuaWNhdGlvblxuXA0KKyAiDQorICNlbmRpZg0KKyAiLWYsIC0tc2Vy dmVyLWZpbGU9RklMRU5BTUVcblwNCisgCQkJU2V0IHRoZSBmaWxlbmFtZSBvZiB0aGUgVENQIGNv bmZpZ3VyYXRpb24gZmlsZVxuXA0KICAtYSwgLS1hbHRlcm5hdGUtZWRpdG9yPUVESVRPUlxuXA0K ICAJCQlFZGl0b3IgdG8gZmFsbGJhY2sgdG8gaWYgdGhlIHNlcnZlciBpcyBub3QgcnVubmluZ1xu XA0KKioqKioqKioqKioqKioqDQoqKiogMTY3LDE3OCAqKioqDQogIH0NCiAgDQogIC8qIEluIE5B TUUsIGluc2VydCBhICYgYmVmb3JlIGVhY2ggJiwgZWFjaCBzcGFjZSwgZWFjaCBuZXdsaW5lLCBh bmQNCiAgICAgYW55IGluaXRpYWwgLS4gIENoYW5nZSBzcGFjZXMgdG8gdW5kZXJzY29yZXMsIHRv bywgc28gdGhhdCB0aGUNCiAgICAgcmV0dXJuIHZhbHVlIG5ldmVyIGNvbnRhaW5zIGEgc3BhY2Uu ICAqLw0KLSANCiAgdm9pZA0KISBxdW90ZV9maWxlX25hbWUgKG5hbWUsIHN0cmVhbSkNCiAgICAg ICBjaGFyICpuYW1lOw0KLSAgICAgIEZJTEUgKnN0cmVhbTsNCiAgew0KICAgIGNoYXIgKmNvcHkg PSAoY2hhciAqKSBtYWxsb2MgKHN0cmxlbiAobmFtZSkgKiAyICsgMSk7DQotLS0gMjA2LDMxMyAt LS0tDQogIH0NCiAgDQorIAwNCisgLyoNCisgICBUcnkgdG8gcnVuIGEgZGlmZmVyZW50IGNvbW1h bmQsIG9yIC0taWYgbm8gYWx0ZXJuYXRlIGVkaXRvciBpcw0KKyAgIGRlZmluZWQtLSBleGl0IHdp dGggYW4gZXJyb3Jjb2RlLg0KKyAqLw0KKyB2b2lkDQorIGZhaWwgKGFyZ2MsIGFyZ3YpDQorICAg ICAgaW50IGFyZ2M7DQorICAgICAgY2hhciAqKmFyZ3Y7DQorIHsNCisgICBpZiAoYWx0ZXJuYXRl X2VkaXRvcikNCisgICAgIHsNCisgICAgICAgaW50IGkgPSBvcHRpbmQgLSAxOw0KKyAgICAgICBl eGVjdnAgKGFsdGVybmF0ZV9lZGl0b3IsIGFyZ3YgKyBpKTsNCisgICAgICAgcmV0dXJuOw0KKyAg ICAgfQ0KKyAgIGVsc2UNCisgICAgIHsNCisgICAgICAgZXhpdCAoRVhJVF9GQUlMVVJFKTsNCisg ICAgIH0NCisgfQ0KKyANCisgDA0KKyAjaWYgIWRlZmluZWQgKEhBVkVfU09DS0VUUykNCisgDQor IGludA0KKyBtYWluIChhcmdjLCBhcmd2KQ0KKyAgICAgIGludCBhcmdjOw0KKyAgICAgIGNoYXIg Kiphcmd2Ow0KKyB7DQorICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6IFNvcnJ5LCB0aGUgRW1hY3Mg c2VydmVyIGlzIHN1cHBvcnRlZCBvbmx5XG4iLA0KKyAJICAgYXJndlswXSk7DQorICAgZnByaW50 ZiAoc3RkZXJyLCAib24gc3lzdGVtcyB3aXRoIEJlcmtlbGV5IHNvY2tldHMuXG4iKTsNCisgDQor ICAgZmFpbCAoYXJnYywgYXJndik7DQorIH0NCisgDQorICNlbHNlIC8qIEhBVkVfU09DS0VUUyAq Lw0KKyANCisgI2RlZmluZSBBVVRIX1NUUklOR19MRU5HVEggICA2NA0KKyAjZGVmaW5lIFNFTkRf QlVGRkVSX1NJWkUgICA0MDk2DQorIA0KKyAjaWZkZWYgV0lORE9XU05UDQorICMgaW5jbHVkZSA8 d2luc29jazIuaD4NCisgI2Vsc2UNCisgIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCisgIyBpbmNs dWRlIDxzeXMvc29ja2V0Lmg+DQorICMgaW5jbHVkZSA8c3lzL3VuLmg+DQorICMgaW5jbHVkZSA8 c3lzL3N0YXQuaD4NCisgIyBpbmNsdWRlIDxlcnJuby5oPg0KKyAjZW5kaWYNCisgDQorIGV4dGVy biBjaGFyICpzdHJlcnJvciAoKTsNCisgZXh0ZXJuIGludCBlcnJubzsNCisgDQorIC8qIEJ1ZmZl ciB0byBhY2N1bXVsYXRlIGRhdGEgdG8gc2VuZCBpbiBUQ1AgY29ubmVjdGlvbnMuICAqLw0KKyBj aGFyIHNlbmRfYnVmZmVyW1NFTkRfQlVGRkVSX1NJWkUgKyAxXTsNCisgaW50IHNibGVuID0gMDsJ LyogRmlsbCBwb2ludGVyIGZvciB0aGUgc2VuZCBidWZmZXIuICAqLw0KKyANCisgLyogTGV0J3Mg c2VuZCB0aGUgZGF0YSB0byBFbWFjcyB3aGVuIGVpdGhlcg0KKyAgICAtIHRoZSBkYXRhIGVuZHMg aW4gIlxuIiwgb3INCisgICAgLSB0aGUgYnVmZmVyIGlzIGZ1bGwgKGJ1dCB0aGlzIHNob3VsZG4n dCBoYXBwZW4pDQorICAgIE90aGVyd2lzZSwgd2UganVzdCBhY2N1bXVsYXRlIGl0LiAgKi8NCisg dm9pZCBzZW5kX3RvX2VtYWNzIChzLCBkYXRhKQ0KKyAgICAgIFNPQ0tFVCBzOw0KKyAgICAgIGNo YXIgKmRhdGE7DQorIHsNCisgICB3aGlsZSAoZGF0YSkNCisgICAgIHsNCisgICAgICAgaW50IGRs ZW4gPSBzdHJsZW4gKGRhdGEpOw0KKyAgICAgICBpZiAoZGxlbiArIHNibGVuID49IFNFTkRfQlVG RkVSX1NJWkUpDQorIAl7DQorIAkgIGludCBwYXJ0ID0gU0VORF9CVUZGRVJfU0laRSAtIHNibGVu Ow0KKyAJICBzdHJuY3B5ICgmc2VuZF9idWZmZXJbc2JsZW5dLCBkYXRhLCBwYXJ0KTsNCisgCSAg ZGF0YSArPSBwYXJ0Ow0KKyAJICBzYmxlbiA9IFNFTkRfQlVGRkVSX1NJWkU7DQorIAl9DQorICAg ICAgIGVsc2UgaWYgKGRsZW4pDQorIAl7DQorIAkgIHN0cmNweSAoJnNlbmRfYnVmZmVyW3NibGVu XSwgZGF0YSk7DQorIAkgIGRhdGEgPSBOVUxMOw0KKyAJICBzYmxlbiArPSBkbGVuOw0KKyAJfQ0K KyAgICAgICBlbHNlDQorIAlicmVhazsNCisgDQorICAgICAgIGlmIChzYmxlbiA9PSBTRU5EX0JV RkZFUl9TSVpFDQorIAkgIHx8IChzYmxlbiA+IDAgJiYgc2VuZF9idWZmZXJbc2JsZW4tMV0gPT0g J1xuJykpDQorIAl7DQorIAkgIGludCBzZW50ID0gc2VuZCAocywgc2VuZF9idWZmZXIsIHNibGVu LCAwKTsNCisgCSAgaWYgKHNlbnQgIT0gc2JsZW4pDQorIAkgICAgc3RyY3B5IChzZW5kX2J1ZmZl ciwgJnNlbmRfYnVmZmVyW3NlbnRdKTsNCisgCSAgc2JsZW4gLT0gc2VudDsNCisgCX0NCisgICAg IH0NCisgfQ0KKyANCiAgLyogSW4gTkFNRSwgaW5zZXJ0IGEgJiBiZWZvcmUgZWFjaCAmLCBlYWNo IHNwYWNlLCBlYWNoIG5ld2xpbmUsIGFuZA0KICAgICBhbnkgaW5pdGlhbCAtLiAgQ2hhbmdlIHNw YWNlcyB0byB1bmRlcnNjb3JlcywgdG9vLCBzbyB0aGF0IHRoZQ0KICAgICByZXR1cm4gdmFsdWUg bmV2ZXIgY29udGFpbnMgYSBzcGFjZS4JICovDQogIHZvaWQNCiEgcXVvdGVfZmlsZV9uYW1lIChz LCBuYW1lKQ0KISAgICAgIFNPQ0tFVCBzOw0KICAgICAgIGNoYXIgKm5hbWU7DQogIHsNCiAgICBj aGFyICpjb3B5ID0gKGNoYXIgKikgbWFsbG9jIChzdHJsZW4gKG5hbWUpICogMiArIDEpOw0KKioq KioqKioqKioqKioqDQoqKiogMjA0LDI3NCAqKioqDQogICAgKnErKyA9IDA7DQogIA0KISAgIGZw cmludGYgKHN0cmVhbSwgIiVzIiwgY29weSk7DQogIA0KICAgIGZyZWUgKGNvcHkpOw0KICB9DQog IA0KISAvKiBMaWtlIG1hbGxvYyBidXQgZ2V0IGZhdGFsIGVycm9yIGlmIG1lbW9yeSBpcyBleGhh dXN0ZWQuICAqLw0KICANCiEgbG9uZyAqDQohIHhtYWxsb2MgKHNpemUpDQohICAgICAgdW5zaWdu ZWQgaW50IHNpemU7DQogIHsNCiEgICBsb25nICpyZXN1bHQgPSAobG9uZyAqKSBtYWxsb2MgKHNp emUpOw0KISAgIGlmIChyZXN1bHQgPT0gTlVMTCkNCiAgICB7DQohICAgICBwZXJyb3IgKCJtYWxs b2MiKTsNCiAgICAgIGV4aXQgKEVYSVRfRkFJTFVSRSk7DQogICAgfQ0KISAgIHJldHVybiByZXN1 bHQ7DQogIH0NCiAgDA0KICAvKg0KISAgIFRyeSB0byBydW4gYSBkaWZmZXJlbnQgY29tbWFuZCwg b3IgLS1pZiBubyBhbHRlcm5hdGUgZWRpdG9yIGlzDQohICAgZGVmaW5lZC0tIGV4aXQgd2l0aCBh biBlcnJvcmNvZGUuDQogICovDQohIHZvaWQNCiEgZmFpbCAoYXJnYywgYXJndikNCiEgICAgICBp bnQgYXJnYzsNCiEgICAgICBjaGFyICoqYXJndjsNCiAgew0KISAgIGlmIChhbHRlcm5hdGVfZWRp dG9yKQ0KICAgICAgew0KISAgICAgICBpbnQgaSA9IG9wdGluZCAtIDE7DQohICAgICAgIGV4ZWN2 cCAoYWx0ZXJuYXRlX2VkaXRvciwgYXJndiArIGkpOw0KISAgICAgICByZXR1cm47DQogICAgICB9 DQogICAgZWxzZQ0KICAgICAgew0KICAgICAgICBleGl0IChFWElUX0ZBSUxVUkUpOw0KICAgICAg fQ0KLSB9DQogIA0KICANCiAgDA0KISAjaWYgIWRlZmluZWQgKEhBVkVfU09DS0VUUykgfHwgZGVm aW5lZCAoTk9fU09DS0VUU19JTl9GSUxFX1NZU1RFTSkNCiAgDQohIGludA0KISBtYWluIChhcmdj LCBhcmd2KQ0KISAgICAgIGludCBhcmdjOw0KISAgICAgIGNoYXIgKiphcmd2Ow0KICB7DQohICAg ZnByaW50ZiAoc3RkZXJyLCAiJXM6IFNvcnJ5LCB0aGUgRW1hY3Mgc2VydmVyIGlzIHN1cHBvcnRl ZCBvbmx5XG4iLA0KISAJICAgYXJndlswXSk7DQohICAgZnByaW50ZiAoc3RkZXJyLCAib24gc3lz dGVtcyB3aXRoIEJlcmtlbGV5IHNvY2tldHMuXG4iKTsNCiAgDQohICAgZmFpbCAoYXJnYywgYXJn dik7DQohIH0NCiAgDQohICNlbHNlIC8qIEhBVkVfU09DS0VUUyAqLw0KICANCiEgI2luY2x1ZGUg PHN5cy90eXBlcy5oPg0KISAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KISAjaW5jbHVkZSA8c3lz L3VuLmg+DQohICNpbmNsdWRlIDxzeXMvc3RhdC5oPg0KISAjaW5jbHVkZSA8ZXJybm8uaD4NCiAg DQohIGV4dGVybiBjaGFyICpzdHJlcnJvciAoKTsNCiEgZXh0ZXJuIGludCBlcnJubzsNCiAgDQog IC8qIFRocmVlIHBvc3NpYmlsaXRpZXM6DQotLS0gMzM5LDQ2MyAtLS0tDQogICAgKnErKyA9IDA7 DQogIA0KISAgIFNFTkRfU1RSSU5HIChjb3B5KTsNCiAgDQogICAgZnJlZSAoY29weSk7DQogIH0N CiAgDQohICNpZmRlZiBXSU5ET1dTTlQNCiEgLyogV3JhcHBlciB0byBtYWtlIFdTQUNsZWFudXAg YSBjZGVjbCwgYXMgcmVxdWlyZWQgYnkgYXRleGl0KCkuCSAqLw0KISB2b2lkIGNsb3NlX3dpbnNv Y2sgKCkNCiEgew0KISAgIFdTQUNsZWFudXAgKCk7DQohIH0NCiEgI2VuZGlmIC8qIFdJTkRPV1NO VCAqLw0KICANCiEgdm9pZCBpbml0aWFsaXplX3NvY2tldHMgKCkNCiAgew0KISAjaWZkZWYgV0lO RE9XU05UDQohICAgV1NBREFUQSB3c2FEYXRhOw0KISANCiEgICAvKiBJbml0aWFsaXplIHRoZSBX aW5Tb2NrMiBsaWJyYXJ5LiAgKi8NCiEgICBpZiAoV1NBU3RhcnR1cCAoTUFLRVdPUkQgKDIsIDAp LCAmd3NhRGF0YSkpDQogICAgICB7DQohICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiBlcnJv ciBpbml0aWFsaXppbmcgV2luU29jazIiLCBwcm9nbmFtZSk7DQogICAgICAgIGV4aXQgKEVYSVRf RkFJTFVSRSk7DQogICAgICB9DQohIA0KISAgIGF0ZXhpdCAoY2xvc2Vfd2luc29jayk7DQohICNl bmRpZiAvKiBXSU5ET1dTTlQgKi8NCiAgfQ0KICANCiAgLyoNCiEgICogUmVhZCB0aGUgaW5mb3Jt YXRpb24gbmVlZGVkIHRvIHNldCB1cCBhIFRDUCBjb21tIGNoYW5uZWwgd2l0aA0KISAgKiB0aGUg RW1hY3Mgc2VydmVyOiBob3N0LCBwb3J0IGFuZCBhdXRoZW50aWNhdGlvbiBzdHJpbmcuDQogICov DQohIHZvaWQgZ2V0X3NlcnZlcl9jb25maWcgKHNlcnZlciwgYXV0aGVudGljYXRpb24pDQohICAg ICAgc3RydWN0IHNvY2thZGRyX2luICpzZXJ2ZXI7DQohICAgICAgY2hhciAqYXV0aGVudGljYXRp b247DQogIHsNCiEgICBGSUxFICpjb25maWc7DQohICAgY2hhciBkb3R0ZWRbMzJdOw0KISAgIGNo YXIgKnBvcnQ7DQohIA0KISAgIGlmICghIChjb25maWcgPSBmb3BlbiAoc2VydmVyX2ZpbGUsICJy YiIpKSkNCiAgICAgIHsNCiEgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6IGNhbm5vdCByZWFk IGNvbmZpZ3VyYXRpb24gZmlsZSAlcyIsDQohIAkgICAgICAgcHJvZ25hbWUsIHNlcnZlcl9maWxl KTsNCiEgICAgICAgZXhpdCAoRVhJVF9GQUlMVVJFKTsNCiEgICAgIH0NCiEgDQohICAgaWYgKGZn ZXRzIChkb3R0ZWQsIHNpemVvZiBkb3R0ZWQsIGNvbmZpZykNCiEgICAgICAgJiYgKHBvcnQgPSBz dHJjaHIgKGRvdHRlZCwgJzonKSkpDQohICAgICB7DQohICAgICAgICpwb3J0KysgPSAnXDAnOw0K ICAgICAgfQ0KICAgIGVsc2UNCiAgICAgIHsNCisgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6 IGludmFsaWQgY29uZmlndXJhdGlvbiBpbmZvIiwgcHJvZ25hbWUpOw0KICAgICAgICBleGl0IChF WElUX0ZBSUxVUkUpOw0KICAgICAgfQ0KICANCisgICBzZXJ2ZXItPnNpbl9mYW1pbHkgPSBBRl9J TkVUOw0KKyAgIHNlcnZlci0+c2luX2FkZHIuc19hZGRyID0gaW5ldF9hZGRyIChkb3R0ZWQpOw0K KyAgIHNlcnZlci0+c2luX3BvcnQgPSBodG9ucyAoYXRvaSAocG9ydCkpOw0KICANCisgICBpZiAo ISBmcmVhZCAoYXV0aGVudGljYXRpb24sIEFVVEhfU1RSSU5HX0xFTkdUSCwgMSwgY29uZmlnKSkN CisgICAgIHsNCisgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6IGNhbm5vdCByZWFkIGF1dGhl bnRpY2F0aW9uIGluZm8iLCBwcm9nbmFtZSk7DQorICAgICAgIGV4aXQgKEVYSVRfRkFJTFVSRSk7 DQorICAgICB9DQogIA0KISAgIGZjbG9zZSAoY29uZmlnKTsNCiEgfQ0KICANCiEgU09DS0VUDQoh IHNldF90Y3Bfc29ja2V0ICgpDQogIHsNCiEgICBTT0NLRVQgczsNCiEgICBzdHJ1Y3Qgc29ja2Fk ZHJfaW4gc2VydmVyOw0KISAgIHVuc2lnbmVkIGxvbmcgY19hcmcgPSAwOw0KISAgIHN0cnVjdCBs aW5nZXIgbF9hcmcgPSB7MSwgMX07DQohICAgY2hhciBhdXRoX3N0cmluZ1tBVVRIX1NUUklOR19M RU5HVEggKyAxXTsNCiAgDQohICAgaW5pdGlhbGl6ZV9zb2NrZXRzICgpOw0KICANCiEgICBnZXRf c2VydmVyX2NvbmZpZyAoJnNlcnZlciwgYXV0aF9zdHJpbmcpOw0KICANCiEgICAvKg0KISAgICAq IE9wZW4gdXAgYW4gQUZfSU5FVCBzb2NrZXQNCiEgICAgKi8NCiEgICBpZiAoKHMgPSBzb2NrZXQg KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCkpIDwgMCkNCiEgICAgIHsNCiEgICAg ICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICIsIHByb2duYW1lKTsNCiEgICAgICAgcGVycm9yICgi c29ja2V0Iik7DQohICAgICAgIHJldHVybiBJTlZBTElEX1NPQ0tFVDsNCiEgICAgIH0NCiAgDQoh ICAgLyoNCiEgICAgKiBTZXQgdXAgdGhlIHNvY2tldA0KISAgICAqLw0KISAgIGlmIChjb25uZWN0 IChzLCAoc3RydWN0IHNvY2thZGRyICopICZzZXJ2ZXIsIHNpemVvZiBzZXJ2ZXIpIDwgMCkNCiEg ICAgIHsNCiEgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICIsIHByb2duYW1lKTsNCiEgICAg ICAgcGVycm9yICgiY29ubmVjdCIpOw0KISAgICAgICByZXR1cm4gSU5WQUxJRF9TT0NLRVQ7DQoh ICAgICB9DQohIA0KISAgIGlvY3Rsc29ja2V0IChzLCBGSU9OQklPLCAmY19hcmcpOw0KISAgIHNl dHNvY2tvcHQgKHMsIFNPTF9TT0NLRVQsIFNPX0xJTkdFUiwgKGNoYXIgKikgJmxfYXJnLCBzaXpl b2YgbF9hcmcpOw0KISANCiEgICAvKg0KISAgICAqIFNlbmQgdGhlIGF1dGhlbnRpY2F0aW9uDQoh ICAgICovDQohICAgYXV0aF9zdHJpbmdbQVVUSF9TVFJJTkdfTEVOR1RIXSA9ICdcMCc7DQohIA0K ISAgIFNFTkRfU1RSSU5HICgiLWF1dGggIik7DQohICAgU0VORF9TVFJJTkcgKGF1dGhfc3RyaW5n KTsNCiEgICBTRU5EX1NUUklORyAoIlxuIik7DQohIA0KISAgIHJldHVybiBzOw0KISB9DQohIA0K ISAjaWYgIWRlZmluZWQgKE5PX1NPQ0tFVFNfSU5fRklMRV9TWVNURU0pDQogIA0KICAvKiBUaHJl ZSBwb3NzaWJpbGl0aWVzOg0KKioqKioqKioqKioqKioqDQoqKiogMjkyLDMxNyAqKioqDQogIH0N CiAgDQohIGludA0KISBtYWluIChhcmdjLCBhcmd2KQ0KISAgICAgIGludCBhcmdjOw0KISAgICAg IGNoYXIgKiphcmd2Ow0KICB7DQohICAgaW50IHMsIGksIG5lZWRsZiA9IDA7DQohICAgRklMRSAq b3V0LCAqaW47DQogICAgc3RydWN0IHNvY2thZGRyX3VuIHNlcnZlcjsNCi0gICBjaGFyICpjd2Qs ICpzdHI7DQotICAgY2hhciBzdHJpbmdbQlVGU0laXTsNCi0gDQotICAgcHJvZ25hbWUgPSBhcmd2 WzBdOw0KLSANCi0gICAvKiBQcm9jZXNzIG9wdGlvbnMuICAqLw0KLSAgIGRlY29kZV9vcHRpb25z IChhcmdjLCBhcmd2KTsNCi0gDQotICAgaWYgKChhcmdjIC0gb3B0aW5kIDwgMSkgJiYgIWV2YWwp DQotICAgICB7DQotICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiBmaWxlIG5hbWUgb3IgYXJn dW1lbnQgcmVxdWlyZWRcbiIsIHByb2duYW1lKTsNCi0gICAgICAgZnByaW50ZiAoc3RkZXJyLCAi VHJ5IGAlcyAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uXG4iLCBwcm9nbmFtZSk7DQotICAg ICAgIGV4aXQgKEVYSVRfRkFJTFVSRSk7DQotICAgICB9DQogIA0KICAgIC8qDQotLS0gNDgxLDQ4 OSAtLS0tDQogIH0NCiAgDQohIFNPQ0tFVA0KISBzZXRfbG9jYWxfc29ja2V0ICgpDQogIHsNCiEg ICBTT0NLRVQgczsNCiAgICBzdHJ1Y3Qgc29ja2FkZHJfdW4gc2VydmVyOw0KICANCiAgICAvKg0K KioqKioqKioqKioqKioqDQoqKiogMzIxLDMyNyAqKioqDQogICAgaWYgKChzID0gc29ja2V0IChB Rl9VTklYLCBTT0NLX1NUUkVBTSwgMCkpIDwgMCkNCiAgICAgIHsNCiEgICAgICAgZnByaW50ZiAo c3RkZXJyLCAiJXM6ICIsIGFyZ3ZbMF0pOw0KICAgICAgICBwZXJyb3IgKCJzb2NrZXQiKTsNCiEg ICAgICAgZmFpbCAoYXJnYywgYXJndik7DQogICAgICB9DQogIA0KLS0tIDQ5Myw0OTkgLS0tLQ0K ICAgIGlmICgocyA9IHNvY2tldCAoQUZfVU5JWCwgU09DS19TVFJFQU0sIDApKSA8IDApDQogICAg ICB7DQohICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAiLCBwcm9nbmFtZSk7DQogICAgICAg IHBlcnJvciAoInNvY2tldCIpOw0KISAgICAgICByZXR1cm4gSU5WQUxJRF9TT0NLRVQ7DQogICAg ICB9DQogIA0KKioqKioqKioqKioqKioqDQoqKiogMzUzLDM1NyAqKioqDQogICAgICAgIHsNCiAg CWZwcmludGYgKHN0ZGVyciwgIiVzOiBzb2NrZXQtbmFtZSAlcyB0b28gbG9uZyIsDQohIAkJIGFy Z3ZbMF0sIHNvY2tldF9uYW1lKTsNCiAgCWV4aXQgKEVYSVRfRkFJTFVSRSk7DQogICAgICAgIH0N Ci0tLSA1MjUsNTI5IC0tLS0NCiAgICAgICAgew0KICAJZnByaW50ZiAoc3RkZXJyLCAiJXM6IHNv Y2tldC1uYW1lICVzIHRvbyBsb25nIiwNCiEgCQkgcHJvZ25hbWUsIHNvY2tldF9uYW1lKTsNCiAg CWV4aXQgKEVYSVRfRkFJTFVSRSk7DQogICAgICAgIH0NCioqKioqKioqKioqKioqKg0KKioqIDM4 OCwzOTIgKioqKg0KICAJCSAgew0KICAJCSAgICBmcHJpbnRmIChzdGRlcnIsICIlczogc29ja2V0 LW5hbWUgJXMgdG9vIGxvbmciLA0KISAJCQkgICAgIGFyZ3ZbMF0sIHNvY2tldF9uYW1lKTsNCiAg CQkgICAgZXhpdCAoRVhJVF9GQUlMVVJFKTsNCiAgCQkgIH0NCi0tLSA1NjAsNTY0IC0tLS0NCiAg CQkgIHsNCiAgCQkgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6IHNvY2tldC1uYW1lICVzIHRvbyBs b25nIiwNCiEgCQkJICAgICBwcm9nbmFtZSwgc29ja2V0X25hbWUpOw0KICAJCSAgICBleGl0IChF WElUX0ZBSUxVUkUpOw0KICAJCSAgfQ0KKioqKioqKioqKioqKioqDQoqKiogNDA4LDQxMiAqKioq DQogIAkgICB7DQogIAkgICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiBJbnZhbGlkIHNvY2tldCBv d25lclxuIiwgYXJndlswXSk7DQohIAkgICAgIGZhaWwgKGFyZ2MsIGFyZ3YpOw0KICAJICAgfQ0K ICAJIGJyZWFrOw0KLS0tIDU4MCw1ODQgLS0tLQ0KICAJICB7DQogIAkgICAgZnByaW50ZiAoc3Rk ZXJyLCAiJXM6IEludmFsaWQgc29ja2V0IG93bmVyXG4iLCBhcmd2WzBdKTsNCiEgCSAgICByZXR1 cm4gSU5WQUxJRF9TT0NLRVQ7DQogIAkgIH0NCiAgCWJyZWFrOw0KKioqKioqKioqKioqKioqDQoq KiogNDE4LDQyNyAqKioqDQogIAkJICAgICIlczogY2FuJ3QgZmluZCBzb2NrZXQ7IGhhdmUgeW91 IHN0YXJ0ZWQgdGhlIHNlcnZlcj9cblwNCiAgVG8gc3RhcnQgdGhlIHNlcnZlciBpbiBFbWFjcywg dHlwZSBcIk0teCBzZXJ2ZXItc3RhcnRcIi5cbiIsDQohIAkJICAgIGFyZ3ZbMF0pOw0KICAJIGVs c2UNCiAgCSAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiBjYW4ndCBzdGF0ICVzOiAlc1xuIiwNCiEg CQkgICAgYXJndlswXSwgc2VydmVyLnN1bl9wYXRoLCBzdHJlcnJvciAoc2F2ZWRfZXJybm8pKTsN CiEgCSBmYWlsIChhcmdjLCBhcmd2KTsNCiEgCSBicmVhazsNCiAgICAgICAgIH0NCiAgICB9DQot LS0gNTkwLDU5OCAtLS0tDQogIAkJICAgIiVzOiBjYW4ndCBmaW5kIHNvY2tldDsgaGF2ZSB5b3Ug c3RhcnRlZCB0aGUgc2VydmVyP1xuXA0KICBUbyBzdGFydCB0aGUgc2VydmVyIGluIEVtYWNzLCB0 eXBlIFwiTS14IHNlcnZlci1zdGFydFwiLlxuIiwNCiEgCQkgICBwcm9nbmFtZSk7DQogIAllbHNl DQogIAkgIGZwcmludGYgKHN0ZGVyciwgIiVzOiBjYW4ndCBzdGF0ICVzOiAlc1xuIiwNCiEgCQkg ICBwcm9nbmFtZSwgc2VydmVyLnN1bl9wYXRoLCBzdHJlcnJvciAoc2F2ZWRfZXJybm8pKTsNCiEg CXJldHVybiBJTlZBTElEX1NPQ0tFVDsNCiAgICAgICAgfQ0KICAgIH0NCioqKioqKioqKioqKioq Kg0KKioqIDQzMCw0NTggKioqKg0KICAgICAgICA8IDApDQogICAgICB7DQohICAgICAgIGZwcmlu dGYgKHN0ZGVyciwgIiVzOiAiLCBhcmd2WzBdKTsNCiAgICAgICAgcGVycm9yICgiY29ubmVjdCIp Ow0KISAgICAgICBmYWlsIChhcmdjLCBhcmd2KTsNCiAgICAgIH0NCiAgDQohICAgLyogV2UgdXNl IHRoZSBzdHJlYW0gT1VUIHRvIHNlbmQgb3VyIGNvbW1hbmQgdG8gdGhlIHNlcnZlci4gICovDQoh ICAgaWYgKChvdXQgPSBmZG9wZW4gKHMsICJyKyIpKSA9PSBOVUxMKQ0KICAgICAgew0KISAgICAg ICBmcHJpbnRmIChzdGRlcnIsICIlczogIiwgYXJndlswXSk7DQohICAgICAgIHBlcnJvciAoImZk b3BlbiIpOw0KISAgICAgICBmYWlsIChhcmdjLCBhcmd2KTsNCiAgICAgIH0NCiAgDQohICAgLyog V2UgdXNlIHRoZSBzdHJlYW0gSU4gdG8gcmVhZCB0aGUgcmVzcG9uc2UuDQohICAgICAgV2UgdXNl ZCB0byB1c2UganVzdCBvbmUgc3RyZWFtIGZvciBib3RoIG91dHB1dCBhbmQgaW5wdXQNCiEgICAg ICBvbiB0aGUgc29ja2V0LCBidXQgcmV2ZXJzaW5nIGRpcmVjdGlvbiB3b3JrcyBub25wb3J0YWJs eToNCiEgICAgICBvbiBzb21lIHN5c3RlbXMsIHRoZSBvdXRwdXQgYXBwZWFycyBhcyB0aGUgZmly c3QgaW5wdXQ7DQohICAgICAgb24gb3RoZXIgc3lzdGVtcyBpdCBkb2VzIG5vdC4gICovDQohICAg aWYgKChpbiA9IGZkb3BlbiAocywgInIrIikpID09IE5VTEwpDQogICAgICB7DQohICAgICAgIGZw cmludGYgKHN0ZGVyciwgIiVzOiAiLCBhcmd2WzBdKTsNCiEgICAgICAgcGVycm9yICgiZmRvcGVu Iik7DQohICAgICAgIGZhaWwgKGFyZ2MsIGFyZ3YpOw0KICAgICAgfQ0KICANCiAgI2lmZGVmIEhB VkVfR0VUQ1dEDQogICAgY3dkID0gZ2V0Y3dkIChzdHJpbmcsIHNpemVvZiBzdHJpbmcpOw0KLS0t IDYwMSw2NTQgLS0tLQ0KICAgICAgICA8IDApDQogICAgICB7DQohICAgICAgIGZwcmludGYgKHN0 ZGVyciwgIiVzOiAiLCBwcm9nbmFtZSk7DQogICAgICAgIHBlcnJvciAoImNvbm5lY3QiKTsNCiEg ICAgICAgcmV0dXJuIElOVkFMSURfU09DS0VUOw0KICAgICAgfQ0KICANCiEgICByZXR1cm4gczsN CiEgfQ0KISAjZW5kaWYgLyogISBOT19TT0NLRVRTX0lOX0ZJTEVfU1lTVEVNICovDQohIA0KISBT T0NLRVQNCiEgc2V0X3NvY2tldCAoKQ0KISB7DQohICAgaWYgKHNlcnZlcl9maWxlKQ0KISAgICAg cmV0dXJuIHNldF90Y3Bfc29ja2V0ICgpOw0KISAgIGVsc2UNCiEgI2lmbmRlZiBOT19TT0NLRVRT X0lOX0ZJTEVfU1lTVEVNDQohICAgICByZXR1cm4gc2V0X2xvY2FsX3NvY2tldCAoKTsNCiEgI2Vs c2UNCiAgICAgIHsNCiEgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6IG1pc3NpbmcgLS1zZXJ2 ZXItZmlsZSBvcHRpb24iLCBwcm9nbmFtZSk7DQohICAgICAgIGV4aXQgKEVYSVRfRkFJTFVSRSk7 DQogICAgICB9DQorICNlbmRpZg0KKyB9DQorIA0KKyBpbnQNCisgbWFpbiAoYXJnYywgYXJndikN CisgICAgICBpbnQgYXJnYzsNCisgICAgICBjaGFyICoqYXJndjsNCisgew0KKyAgIFNPQ0tFVCBz Ow0KKyAgIGludCBpLCBybCwgbmVlZGxmID0gMDsNCisgICBjaGFyICpjd2Q7DQorICAgY2hhciBz dHJpbmdbQlVGU0laKzFdOw0KKyANCisgICBwcm9nbmFtZSA9IGFyZ3ZbMF07DQogIA0KISAgIC8q IFByb2Nlc3Mgb3B0aW9ucy4gICovDQohICAgZGVjb2RlX29wdGlvbnMgKGFyZ2MsIGFyZ3YpOw0K ISANCiEgICBpZiAoKGFyZ2MgLSBvcHRpbmQgPCAxKSAmJiAhZXZhbCkNCiAgICAgIHsNCiEgICAg ICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6IGZpbGUgbmFtZSBvciBhcmd1bWVudCByZXF1aXJlZFxu IiwgcHJvZ25hbWUpOw0KISAgICAgICBmcHJpbnRmIChzdGRlcnIsICJUcnkgYCVzIC0taGVscCcg Zm9yIG1vcmUgaW5mb3JtYXRpb25cbiIsIHByb2duYW1lKTsNCiEgICAgICAgZXhpdCAoRVhJVF9G QUlMVVJFKTsNCiAgICAgIH0NCiAgDQorICAgaWYgKChzID0gc2V0X3NvY2tldCAoKSkgPT0gSU5W QUxJRF9TT0NLRVQpDQorICAgICBmYWlsIChhcmdjLCBhcmd2KTsNCisgDQogICNpZmRlZiBIQVZF X0dFVENXRA0KICAgIGN3ZCA9IGdldGN3ZCAoc3RyaW5nLCBzaXplb2Ygc3RyaW5nKTsNCioqKioq KioqKioqKioqKg0KKioqIDQ2NSw0NzIgKioqKg0KICANCiAgI2lmZGVmIEhBVkVfR0VUQ1dEDQoh ICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAlcyAoJXMpXG4iLCBhcmd2WzBdLA0KICAJICAg ICAgICJDYW5ub3QgZ2V0IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiLCBzdHJlcnJvciAoZXJy bm8pKTsNCiAgI2Vsc2UNCiEgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICVzICglcylcbiIs IGFyZ3ZbMF0sIHN0cmluZywgc3RyZXJyb3IgKGVycm5vKSk7DQogICNlbmRpZg0KICAgICAgICBm YWlsIChhcmdjLCBhcmd2KTsNCi0tLSA2NjEsNjY4IC0tLS0NCiAgDQogICNpZmRlZiBIQVZFX0dF VENXRA0KISAgICAgICBmcHJpbnRmIChzdGRlcnIsICIlczogJXMgKCVzKVxuIiwgcHJvZ25hbWUs DQogIAkgICAgICAgIkNhbm5vdCBnZXQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIsIHN0cmVy cm9yIChlcnJubykpOw0KICAjZWxzZQ0KISAgICAgICBmcHJpbnRmIChzdGRlcnIsICIlczogJXMg KCVzKVxuIiwgcHJvZ25hbWUsIHN0cmluZywgc3RyZXJyb3IgKGVycm5vKSk7DQogICNlbmRpZg0K ICAgICAgICBmYWlsIChhcmdjLCBhcmd2KTsNCioqKioqKioqKioqKioqKg0KKioqIDQ3NCw0ODcg KioqKg0KICANCiAgICBpZiAobm93YWl0KQ0KISAgICAgZnByaW50ZiAob3V0LCAiLW5vd2FpdCAi KTsNCiAgDQogICAgaWYgKGV2YWwpDQohICAgICBmcHJpbnRmIChvdXQsICItZXZhbCAiKTsNCiAg DQogICAgaWYgKGRpc3BsYXkpDQogICAgICB7DQohICAgICAgIGZwcmludGYgKG91dCwgIi1kaXNw bGF5ICIpOw0KISAgICAgICBxdW90ZV9maWxlX25hbWUgKGRpc3BsYXksIG91dCk7DQohICAgICAg IGZwcmludGYgKG91dCwgIiAiKTsNCiAgICAgIH0NCiAgDQotLS0gNjcwLDY4MyAtLS0tDQogIA0K ICAgIGlmIChub3dhaXQpDQohICAgICBTRU5EX1NUUklORyAoIi1ub3dhaXQgIik7DQogIA0KICAg IGlmIChldmFsKQ0KISAgICAgU0VORF9TVFJJTkcgKCItZXZhbCAiKTsNCiAgDQogICAgaWYgKGRp c3BsYXkpDQogICAgICB7DQohICAgICAgIFNFTkRfU1RSSU5HICgiLWRpc3BsYXkgIik7DQohICAg ICAgIFNFTkRfUVVPVEVEIChkaXNwbGF5KTsNCiEgICAgICAgU0VORF9TVFJJTkcgKCIgIik7DQog ICAgICB9DQogIA0KKioqKioqKioqKioqKioqDQoqKiogNDk4LDUzMSAqKioqDQogIAkgICAgICBp ZiAoKnAgIT0gMCkNCiAgCQl7DQohIAkJICBxdW90ZV9maWxlX25hbWUgKGN3ZCwgb3V0KTsNCiEg CQkgIGZwcmludGYgKG91dCwgIi8iKTsNCiAgCQl9DQogIAkgICAgfQ0KICAJICBlbHNlIGlmICgq YXJndltpXSAhPSAnLycpDQogIAkgICAgew0KISAJICAgICAgcXVvdGVfZmlsZV9uYW1lIChjd2Qs IG91dCk7DQohIAkgICAgICBmcHJpbnRmIChvdXQsICIvIik7DQogIAkgICAgfQ0KICANCiEgCSAg cXVvdGVfZmlsZV9uYW1lIChhcmd2W2ldLCBvdXQpOw0KISAJICBmcHJpbnRmIChvdXQsICIgIik7 DQogIAl9DQogICAgICB9DQogICAgZWxzZQ0KICAgICAgew0KISAgICAgICB3aGlsZSAoKHN0ciA9 IGZnZXRzIChzdHJpbmcsIEJVRlNJWiwgc3RkaW4pKSkNCiAgCXsNCiEgCSAgcXVvdGVfZmlsZV9u YW1lIChzdHIsIG91dCk7DQogIAl9DQohICAgICAgIGZwcmludGYgKG91dCwgIiAiKTsNCiAgICAg IH0NCiAgDQohICAgZnByaW50ZiAob3V0LCAiXG4iKTsNCiEgICBmZmx1c2ggKG91dCk7DQogIA0K ICAgIC8qIE1heWJlIHdhaXQgZm9yIGFuIGFuc3dlci4gICAqLw0KISAgIGlmIChub3dhaXQpDQoh ICAgICByZXR1cm4gRVhJVF9TVUNDRVNTOw0KISANCiAgICBpZiAoIWV2YWwpDQogICAgICB7DQot LS0gNjk0LDczNCAtLS0tDQogIAkgICAgICBpZiAoKnAgIT0gMCkNCiAgCQl7DQohIAkJICBTRU5E X1FVT1RFRCAoY3dkKTsNCiEgCQkgIFNFTkRfU1RSSU5HICgiLyIpOw0KICAJCX0NCiAgCSAgICB9 DQorICNpZm5kZWYgV0lORE9XU05UDQogIAkgIGVsc2UgaWYgKCphcmd2W2ldICE9ICcvJykNCisg I2Vsc2UNCisgCSAgZWxzZSBpZiAoKCphcmd2W2ldICE9ICcvJykNCisgCQkgICAvKiBBYnNvbHV0 ZSBwYXRocyBjYW4gYWxzbyBzdGFydCB3aXRoIGJhY2tzbGFzaA0KKyAJCSAgICAgIG9yIGRyaXZl IGxldHRlcnMuCSAqLw0KKyAJCSAgICYmICgqYXJndltpXSAhPSAnXFwnKQ0KKyAJCSAgICYmICgh aXNsb3dlciAodG9sb3dlciAoKmFyZ3ZbaV0pKQ0KKyAJCSAgICAgICB8fCAoYXJndltpXVsxXSAh PSAnOicpKSkNCisgI2VuZGlmDQogIAkgICAgew0KISAJICAgICAgU0VORF9RVU9URUQgKGN3ZCk7 DQohIAkgICAgICBTRU5EX1NUUklORyAoIi8iKTsNCiAgCSAgICB9DQogIA0KISAJICBTRU5EX1FV T1RFRCAoYXJndltpXSk7DQohIAkgIFNFTkRfU1RSSU5HICgiICIpOw0KICAJfQ0KICAgICAgfQ0K ICAgIGVsc2UNCiAgICAgIHsNCiEgICAgICAgd2hpbGUgKGZnZXRzIChzdHJpbmcsIEJVRlNJWiwg c3RkaW4pKQ0KICAJew0KISAJICBTRU5EX1FVT1RFRCAoc3RyaW5nKTsNCiAgCX0NCiEgICAgICAg U0VORF9TVFJJTkcgKCIgIik7DQogICAgICB9DQogIA0KISAgIFNFTkRfU1RSSU5HICgiXG4iKTsN CiAgDQogICAgLyogTWF5YmUgd2FpdCBmb3IgYW4gYW5zd2VyLgkgKi8NCiEgICBpZiAoIW5vd2Fp dCkNCiEgICAgIHsNCiAgICAgICAgaWYgKCFldmFsKQ0KICAJew0KKioqKioqKioqKioqKioqDQoq KiogNTM2LDU0NSAqKioqDQogIA0KICAgIC8qIE5vdywgd2FpdCBmb3IgYW4gYW5zd2VyIGFuZCBw cmludCBhbnkgbWVzc2FnZXMuICAqLw0KISAgIHdoaWxlICgoc3RyID0gZmdldHMgKHN0cmluZywg QlVGU0laLCBpbikpKQ0KICAgICAgew0KICAgICAgICBpZiAobmVlZGxmID09IDIpDQogIAlwcmlu dGYgKCJcbiIpOw0KISAgICAgICBwcmludGYgKCIlcyIsIHN0cik7DQohICAgICAgIG5lZWRsZiA9 IHN0clswXSA9PSAnXDAnID8gbmVlZGxmIDogc3RyW3N0cmxlbiAoc3RyKSAtIDFdICE9ICdcbic7 DQogICAgICB9DQogIA0KLS0tIDczOSw3NDkgLS0tLQ0KICANCiAgICAgICAgLyogTm93LCB3YWl0 IGZvciBhbiBhbnN3ZXIgYW5kIHByaW50IGFueSBtZXNzYWdlcy4gICovDQohICAgICAgIHdoaWxl ICgocmwgPSByZWN2IChzLCBzdHJpbmcsIEJVRlNJWiwgMCkpID4gMCkNCiAgCXsNCisgCSAgc3Ry aW5nW3JsXSA9ICdcMCc7DQogIAkgIGlmIChuZWVkbGYgPT0gMikNCiAgCSAgICBwcmludGYgKCJc biIpOw0KISAJICBwcmludGYgKCIlcyIsIHN0cmluZyk7DQohIAkgIG5lZWRsZiA9IHN0cmluZ1sw XSA9PSAnXDAnID8gbmVlZGxmIDogc3RyaW5nW3N0cmxlbiAoc3RyaW5nKSAtIDFdICE9ICdcbic7 DQogIAl9DQogIA0KKioqKioqKioqKioqKioqDQoqKiogNTQ3LDU1MSAqKioqDQotLS0gNzUxLDc1 NyAtLS0tDQogIAlwcmludGYgKCJcbiIpOw0KICAgICAgICBmZmx1c2ggKHN0ZG91dCk7DQorICAg ICB9DQogIA0KKyAgIGNsb3Nlc29ja2V0IChzKTsNCiAgICByZXR1cm4gRVhJVF9TVUNDRVNTOw0K ICB9DQpJbmRleDogbGliLXNyYy9tYWtlZmlsZS53MzItaW4NCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxl OiAvY3Zzcm9vdC9lbWFjcy9lbWFjcy9saWItc3JjL21ha2VmaWxlLnczMi1pbix2DQpyZXRyaWV2 aW5nIHJldmlzaW9uIDIuNDYNCmRpZmYgLWIgLWMgLTIgLXIyLjQ2IG1ha2VmaWxlLnczMi1pbg0K KioqIGxpYi1zcmMvbWFrZWZpbGUudzMyLWluCTkgT2N0IDIwMDYgMTk6NTc6NDMgLTAwMDAJMi40 Ng0KLS0tIGxpYi1zcmMvbWFrZWZpbGUudzMyLWluCTI2IE9jdCAyMDA2IDIyOjIzOjEyIC0wMDAw DQoqKioqKioqKioqKioqKioNCioqKiAyMSwyNSAqKioqDQogICMNCiAgDQohIEFMTCA9IG1ha2Ut ZG9jZmlsZSBoZXhsIGN0YWdzIGV0YWdzIG1vdmVtYWlsIGVicm93c2Ugc29ydGVkLWRvYyBkaWdl c3QtZG9jDQogIA0KICAuUEhPTlk6ICQoQUxMKQ0KLS0tIDIxLDI1IC0tLS0NCiAgIw0KICANCiEg QUxMID0gbWFrZS1kb2NmaWxlIGhleGwgY3RhZ3MgZXRhZ3MgbW92ZW1haWwgZWJyb3dzZSBzb3J0 ZWQtZG9jIGRpZ2VzdC1kb2MgZW1hY3NjbGllbnQNCiAgDQogIC5QSE9OWTogJChBTEwpDQoqKioq KioqKioqKioqKioNCioqKiAzMywzNyAqKioqDQogICMJCSQoQkxEKS9zZXJ2ZXIuZXhlCVwNCiAg IwkJJChCTEQpL2VtYWNzdG9vbC5leGUJXA0KLSAjCQkkKEJMRCkvZW1hY3NjbGllbnQuZXhlCVwN CiAgIwkJJChCTEQpL2N2dG1haWwuZXhlCVwNCiAgDQotLS0gMzMsMzYgLS0tLQ0KKioqKioqKioq KioqKioqDQoqKiogNjAsNjMgKioqKg0KLS0tIDU5LDYzIC0tLS0NCiAgc29ydGVkLWRvYzoJJChC TEQpICQoQkxEKS9zb3J0ZWQtZG9jLmV4ZQ0KICBkaWdlc3QtZG9jOgkkKEJMRCkgJChCTEQpL2Rp Z2VzdC1kb2MuZXhlDQorIGVtYWNzY2xpZW50OgkkKEJMRCkgJChCTEQpL2VtYWNzY2xpZW50LmV4 ZQ0KICANCiAgdGVzdC1kaXN0cmliOgkkKEJMRCkgJChCTEQpL3Rlc3QtZGlzdHJpYi5leGUNCioq KioqKioqKioqKioqKg0KKioqIDc1LDc4ICoqKioNCi0tLSA3NSw5MSAtLS0tDQogIAkJJChMSU5L KSAkKExJTktfT1VUKSRAICQoTElOS19GTEFHUykgJChNT1ZFTUFJTE9CSlMpICQoV1NPQ0szMikg JChMSUJTKQ0KICANCisgRUNMSUVOVF9DRkxBR1MgPSAtRFdJTkRPV1NOVCAtREhBVkVfR0VUQ1dE IC1ESEFWRV9TVFJFUlJPUiAtYw0KKyBFQ0xJRU5UT0JKUyA9CSQoQkxEKS9lbWFjc2NsaWVudC4k KE8pIFwNCisgCQkkKEJMRCkvZ2V0b3B0LiQoTykgXA0KKyAJCSQoQkxEKS9nZXRvcHQxLiQoTykg XA0KKyAJCSQoQkxEKS9udGxpYi4kKE8pDQorIA0KKyAkKEJMRCkvZW1hY3NjbGllbnQuZXhlOgkJ JChFQ0xJRU5UT0JKUykNCisgIyBwdXQgd3NvY2szMi5saWIgYmVmb3JlICQoTElCUykgdG8gZW5z dXJlIHdlIGRvbid0IGxpbmsgdG8gd3MyXzMyLmxpYg0KKyAJCSQoTElOSykgJChMSU5LX09VVCkk QCAkKExJTktfRkxBR1MpICQoRUNMSUVOVE9CSlMpICQoV1NPQ0szMikgJChMSUJTKQ0KKyANCisg JChCTEQpL2VtYWNzY2xpZW50LiQoTyk6CWVtYWNzY2xpZW50LmMNCisgCQkkKENDKSAkKEVDTElF TlRfQ0ZMQUdTKSAkKENDX09VVCkkQCBlbWFjc2NsaWVudC5jDQorIA0KICBFVEFHU09CSiAgICAg ID0gJChCTEQpL2V0YWdzLiQoTykgXA0KICAJCSQoQkxEKS9nZXRvcHQuJChPKSBcDQoqKioqKioq KioqKioqKioNCioqKiAyOTcsMzAwICoqKioNCi0tLSAzMTAsMzE0IC0tLS0NCiAgCQkkKENQKSAk KEJMRCkvc29ydGVkLWRvYy5leGUgJChJTlNUQUxMX0RJUikvYmluDQogIAkJJChDUCkgJChCTEQp L2RpZ2VzdC1kb2MuZXhlICQoSU5TVEFMTF9ESVIpL2Jpbg0KKyAJCSQoQ1ApICQoQkxEKS9lbWFj c2NsaWVudC5leGUgJChJTlNUQUxMX0RJUikvYmluDQogIAkJLSBta2RpciAiJChJTlNUQUxMX0RJ UikvZXRjIg0KICAJCSQoQ1ApICQoRE9DKSAkKElOU1RBTExfRElSKS9ldGMNCg== ------=_Part_54136_13421296.1161908829650 Content-Type: application/octet-stream; name=newserver-u.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_etru4r27 Content-Disposition: attachment; filename="newserver-u.patch" SW5kZXg6IGxpc3Avc2VydmVyLmVsDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2c3Jvb3QvZW1h Y3MvZW1hY3MvbGlzcC9zZXJ2ZXIuZWwsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjExMw0KZGlm ZiAtYiAtdSAtMiAtcjEuMTEzIHNlcnZlci5lbA0KLS0tIGxpc3Avc2VydmVyLmVsCTYgSnVsIDIw MDYgMjI6NDg6MTYgLTAwMDAJMS4xMTMNCisrKyBsaXNwL3NlcnZlci5lbAkyNiBPY3QgMjAwNiAy MzowNjowOCAtMDAwMA0KQEAgLTgzLDQgKzgzLDMzIEBADQogICA6Z3JvdXAgJ2V4dGVybmFsKQ0K IA0KKyhkZWZjdXN0b20gc2VydmVyLXVzZS10Y3AgbmlsDQorICAiSWYgbm9uLW5pbCwgdXNlIFRD UCBzb2NrZXRzIGluc3RlYWQgb2YgbG9jYWwgc29ja2V0cy4iDQorICA6c2V0ICMnKGxhbWJkYSAo c3ltIHZhbCkNCisgICAgICAgICAgIChpZiAoZmVhdHVyZXAgJ21ha2UtbmV0d29yay1wcm9jZXNz ICcoOmZhbWlseSBsb2NhbCkpDQorICAgICAgICAgICAgICAgKHNldC1kZWZhdWx0IHN5bSB2YWwp DQorICAgICAgICAgICAgICh1bmxlc3MgbG9hZC1pbi1wcm9ncmVzcw0KKyAgICAgICAgICAgICAg IChtZXNzYWdlICJMb2NhbCBzb2NrZXRzIHVuc3VwcG9ydGVkLCB1c2luZyBUQ1Agc29ja2V0cyIp KQ0KKyAgICAgICAgICAgICAoc2V0LWRlZmF1bHQgc3ltIHQpKSkNCisgIDpncm91cCAnc2VydmVy DQorICA6dHlwZSAnYm9vbGVhbg0KKyAgOnZlcnNpb24gIjIyLjEiKQ0KKw0KKyhkZWZjdXN0b20g c2VydmVyLWhvc3QgbmlsDQorICAiVGhlIG5hbWUgb3IgSVAgYWRkcmVzcyB0byB1c2UgYXMgaG9z dCBhZGRyZXNzIG9mIHRoZSBzZXJ2ZXIgcHJvY2Vzcy4NCitJZiBzZXQsIHRoZSBzZXJ2ZXIgYWNj ZXB0cyByZW1vdGUgY29ubmVjdGlvbnM7IG90aGVyd2lzZSBpdCBpcyBsb2NhbC4iDQorICA6Z3Jv dXAgJ3NlcnZlcg0KKyAgOnR5cGUgJyhjaG9pY2UNCisgICAgICAgICAgKHN0cmluZyA6dGFnICJO YW1lIG9yIElQIGFkZHJlc3MiKQ0KKyAgICAgICAgICAoY29uc3QgOnRhZyAiTG9jYWwiIG5pbCkp DQorICA6dmVyc2lvbiAiMjIuMSIpDQorKHB1dCAnc2VydmVyLWhvc3QgJ3Jpc2t5LWxvY2FsLXZh cmlhYmxlIHQpDQorDQorKGRlZmN1c3RvbSBzZXJ2ZXItYXV0aC1kaXIgIn4vLmVtYWNzLmQvc2Vy dmVyLyINCisgICJEaXJlY3RvcnkgZm9yIHNlcnZlciBhdXRoZW50aWNhdGlvbiBmaWxlcy4iDQor ICA6Z3JvdXAgJ3NlcnZlcg0KKyAgOnR5cGUgJ2RpcmVjdG9yeQ0KKyAgOnZlcnNpb24gIjIyLjEi KQ0KKyhwdXQgJ3NlcnZlci1hdXRoLWRpciAncmlza3ktbG9jYWwtdmFyaWFibGUgdCkNCisNCiAo ZGVmY3VzdG9tIHNlcnZlci12aXNpdC1ob29rIG5pbA0KICAgIipIb29rIHJ1biB3aGVuIHZpc2l0 aW5nIGEgZmlsZSBmb3IgdGhlIEVtYWNzIHNlcnZlci4iDQpAQCAtMTAxLDQgKzEzMCw3IEBADQog ICAiVGhlIGN1cnJlbnQgc2VydmVyIHByb2Nlc3MuIikNCiANCisoZGVmdmFyIHNlcnZlci1hdXRo LXN0cmluZyBuaWwNCisgICJUaGUgY3VycmVudCBzZXJ2ZXIgYXV0aGVudGljYXRpb24gc3RyaW5n LiIpDQorDQogKGRlZnZhciBzZXJ2ZXItY2xpZW50cyBuaWwNCiAgICJMaXN0IG9mIGN1cnJlbnQg c2VydmVyIGNsaWVudHMuDQpAQCAtMjMyLDExICsyNjQsMjIgQEANCiAgIChsZXQgKChhdHRycyAo ZmlsZS1hdHRyaWJ1dGVzIGRpcikpKQ0KICAgICAodW5sZXNzIGF0dHJzDQotICAgICAgKGxldGYg KCgoZGVmYXVsdC1maWxlLW1vZGVzKSA/XDcwMCkpIChtYWtlLWRpcmVjdG9yeSBkaXIpKQ0KKyAg ICAgIChsZXRmICgoKGRlZmF1bHQtZmlsZS1tb2RlcykgP1w3MDApKSAobWFrZS1kaXJlY3Rvcnkg ZGlyIHQpKQ0KICAgICAgIChzZXRxIGF0dHJzIChmaWxlLWF0dHJpYnV0ZXMgZGlyKSkpDQogICAg IDs7IENoZWNrIHRoYXQgaXQncyBzYWZlIGZvciB1c2UuDQogICAgICh1bmxlc3MgKGFuZCAoZXEg dCAoY2FyIGF0dHJzKSkgKGVxIChudGggMiBhdHRycykgKHVzZXItdWlkKSkNCi0JCSAoemVyb3Ag KGxvZ2FuZCA/XDA3NyAoZmlsZS1tb2RlcyBkaXIpKSkpDQorICAgICAgICAgICAgICAgICAob3Ig KGVxIHN5c3RlbS10eXBlICd3aW5kb3dzLW50KQ0KKyAgICAgICAgICAgICAgICAgICAgICh6ZXJv cCAobG9nYW5kID9cMDc3IChmaWxlLW1vZGVzIGRpcikpKSkpDQogICAgICAgKGVycm9yICJUaGUg ZGlyZWN0b3J5ICVzIGlzIHVuc2FmZSIgZGlyKSkpKQ0KIA0KKyhkZWZ1biBzZXJ2ZXItYXV0aC1z dHJpbmcgKCkNCisgIChvciBzZXJ2ZXItYXV0aC1zdHJpbmcNCisgICAgICA7OyBJZiB0aGUgYXV0 aGVudGljYXRpb24gc3RyaW5nIGRvZXMgbm90IGV4aXN0LCBjcmVhdGUgaXQgb24gdGhlIGZseToN CisgICAgICA7OyBpdCdzIGEgNjQtYnl0ZSBzdHJpbmcgb2YgcmFuZG9tIGNoYXJzIGluIHRoZSBy YW5nZSBgIScuLmB+Jy4NCisgICAgICAoc2V0cSBzZXJ2ZXItYXV0aC1zdHJpbmcNCisJICAgIChs b29wDQorCSAgICAgICBmb3IgaSBiZWxvdyA2NA0KKwkgICAgICAgY29sbGVjdCAoKyAzMyAocmFu ZG9tIDk0KSkgaW50byBhdXRoDQorCSAgICAgICBmaW5hbGx5IHJldHVybiAoY29uY2F0IGF1dGgp KSkpKQ0KKw0KIDs7OyMjI2F1dG9sb2FkDQogKGRlZnVuIHNlcnZlci1zdGFydCAoJm9wdGlvbmFs IGxlYXZlLWRlYWQpDQpAQCAtMjQ5LDExICsyOTIsMTMgQEANCiBQcmVmaXggYXJnIG1lYW5zIGp1 c3Qga2lsbCBhbnkgZXhpc3Rpbmcgc2VydmVyIGNvbW11bmljYXRpb25zIHN1YnByb2Nlc3MuIg0K ICAgKGludGVyYWN0aXZlICJQIikNCisgICh3aGVuIHNlcnZlci1wcm9jZXNzDQogICA7OyBraWxs IGl0IGRlYWQhDQotICAoaWYgc2VydmVyLXByb2Nlc3MNCi0gICAgICAoY29uZGl0aW9uLWNhc2Ug KCkgKGRlbGV0ZS1wcm9jZXNzIHNlcnZlci1wcm9jZXNzKSAoZXJyb3IgbmlsKSkpDQotICA7OyBE ZWxldGUgdGhlIHNvY2tldCBmaWxlcyBtYWRlIGJ5IHByZXZpb3VzIHNlcnZlciBpbnZvY2F0aW9u cy4NCi0gIChjb25kaXRpb24tY2FzZSAoKQ0KKyAgICAoaWdub3JlLWVycm9ycyAoZGVsZXRlLXBy b2Nlc3Mgc2VydmVyLXByb2Nlc3MpKQ0KKyAgICAoaWdub3JlLWVycm9ycw0KKyAgICAgIDs7IERl bGV0ZSB0aGUgc29ja2V0IG9yIGF1dGhlbnRpY2F0aW9uIGZpbGVzIG1hZGUgYnkgcHJldmlvdXMg c2VydmVyIGludm9jYXRpb25zLg0KKyAgICAgIChpZiAoZXEgKHByb2Nlc3MtY29udGFjdCBzZXJ2 ZXItcHJvY2VzcyA6ZmFtaWx5KSAnbG9jYWwpDQogICAgICAgKGRlbGV0ZS1maWxlIChleHBhbmQt ZmlsZS1uYW1lIHNlcnZlci1uYW1lIHNlcnZlci1zb2NrZXQtZGlyKSkNCi0gICAgKGVycm9yIG5p bCkpDQorICAgICAgICAoc2V0cSBzZXJ2ZXItYXV0aC1zdHJpbmcgbmlsKQ0KKyAgICAgICAgKGRl bGV0ZS1maWxlIChleHBhbmQtZmlsZS1uYW1lIHNlcnZlci1uYW1lIHNlcnZlci1hdXRoLWRpcikp KSkpDQogICA7OyBJZiB0aGlzIEVtYWNzIGFscmVhZHkgaGFkIGEgc2VydmVyLCBjbGVhciBvdXQg YXNzb2NpYXRlZCBzdGF0dXMuDQogICAod2hpbGUgc2VydmVyLWNsaWVudHMNCkBAIC0yNjMsMTcg KzMwOCwzNSBAQA0KICAgKHVubGVzcyBsZWF2ZS1kZWFkDQogICAgIDs7IE1ha2Ugc3VyZSB0aGVy ZSBpcyBhIHNhZmUgZGlyZWN0b3J5IGluIHdoaWNoIHRvIHBsYWNlIHRoZSBzb2NrZXQuDQotICAg IChzZXJ2ZXItZW5zdXJlLXNhZmUtZGlyIHNlcnZlci1zb2NrZXQtZGlyKQ0KLSAgICAoaWYgc2Vy dmVyLXByb2Nlc3MNCisgICAgKHNlcnZlci1lbnN1cmUtc2FmZS1kaXIgKGlmIHNlcnZlci11c2Ut dGNwIHNlcnZlci1hdXRoLWRpciBzZXJ2ZXItc29ja2V0LWRpcikpDQorICAgICh3aGVuIHNlcnZl ci1wcm9jZXNzDQogCShzZXJ2ZXItbG9nIChtZXNzYWdlICJSZXN0YXJ0aW5nIHNlcnZlciIpKSkN CiAgICAgKGxldGYgKCgoZGVmYXVsdC1maWxlLW1vZGVzKSA/XDcwMCkpDQogICAgICAgKHNldHEg c2VydmVyLXByb2Nlc3MNCi0JICAgIChtYWtlLW5ldHdvcmstcHJvY2Vzcw0KLQkgICAgIDpuYW1l ICJzZXJ2ZXIiIDpmYW1pbHkgJ2xvY2FsIDpzZXJ2ZXIgdCA6bm9xdWVyeSB0DQotCSAgICAgOnNl cnZpY2UgKGV4cGFuZC1maWxlLW5hbWUgc2VydmVyLW5hbWUgc2VydmVyLXNvY2tldC1kaXIpDQot CSAgICAgOnNlbnRpbmVsICdzZXJ2ZXItc2VudGluZWwgOmZpbHRlciAnc2VydmVyLXByb2Nlc3Mt ZmlsdGVyDQorICAgICAgICAgICAgKGFwcGx5ICMnbWFrZS1uZXR3b3JrLXByb2Nlc3MNCisgICAg ICAgICAgICAgICAgICAgOm5hbWUgc2VydmVyLW5hbWUNCisgICAgICAgICAgICAgICAgICAgOnNl cnZlciB0DQorICAgICAgICAgICAgICAgICAgIDpub3F1ZXJ5IHQNCisgICAgICAgICAgICAgICAg ICAgOnNlbnRpbmVsICdzZXJ2ZXItc2VudGluZWwNCisgICAgICAgICAgICAgICAgICAgOmZpbHRl ciAnc2VydmVyLXByb2Nlc3MtZmlsdGVyDQogCSAgICAgOzsgV2UgbXVzdCByZWNlaXZlIGZpbGUg bmFtZXMgd2l0aG91dCBiZWluZyBkZWNvZGVkLg0KIAkgICAgIDs7IFRob3NlIGFyZSBkZWNvZGVk IGJ5IHNlcnZlci1wcm9jZXNzLWZpbHRlciBhY2NvcmRpbmcNCiAJICAgICA7OyB0byBmaWxlLW5h bWUtY29kaW5nLXN5c3RlbS4NCi0JICAgICA6Y29kaW5nICdyYXctdGV4dCkpKSkpDQorICAgICAg ICAgICAgICAgICAgIDpjb2RpbmcgJ3Jhdy10ZXh0DQorICAgICAgICAgICAgICAgICAgIDs7IFRo ZSByZXN0IG9mIHRoZSBhcmd1bWVudHMgZGVwZW5kIG9uIHRoZSBraW5kIG9mIHNvY2tldCB1c2Vk DQorICAgICAgICAgICAgICAgICAgIChpZiBzZXJ2ZXItdXNlLXRjcA0KKyAgICAgICAgICAgICAg ICAgICAgICAgKGxpc3QgOmZhbWlseSBuaWwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDpzZXJ2aWNlIHQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpob3N0IChvciBzZXJ2 ZXItaG9zdCAnbG9jYWwpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6cGxpc3QgJyg6 YXV0aGVudGljYXRlZCBuaWwpKQ0KKyAgICAgICAgICAgICAgICAgICAgIChsaXN0IDpmYW1pbHkg J2xvY2FsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNlcnZpY2UgKGV4cGFuZC1maWxl LW5hbWUgc2VydmVyLW5hbWUgc2VydmVyLXNvY2tldC1kaXIpDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgOnBsaXN0ICcoOmF1dGhlbnRpY2F0ZWQgdCkpKSkpKQ0KKyAgICAodW5sZXNzIHNl cnZlci1wcm9jZXNzIChlcnJvciAiQ291bGQgbm90IHN0YXJ0IHNlcnZlciBwcm9jZXNzIikpDQor ICAgICh3aGVuIHNlcnZlci11c2UtdGNwDQorICAgICAgKHdpdGgtdGVtcC1maWxlIChleHBhbmQt ZmlsZS1uYW1lIHNlcnZlci1uYW1lIHNlcnZlci1hdXRoLWRpcikNCisgICAgICAgIChzZXQtYnVm ZmVyLW11bHRpYnl0ZSBuaWwpDQorICAgICAgICAoc2V0cSBidWZmZXItZmlsZS1jb2Rpbmctc3lz dGVtICduby1jb252ZXJzaW9uKQ0KKyAgICAgICAgKGluc2VydCAoZm9ybWF0LW5ldHdvcmstYWRk cmVzcyAocHJvY2Vzcy1jb250YWN0IHNlcnZlci1wcm9jZXNzIDpsb2NhbCkpDQorICAgICAgICAg ICAgICAgICJcbiIgKHNlcnZlci1hdXRoLXN0cmluZykpKSkpKQ0KIA0KIDs7OyMjI2F1dG9sb2Fk DQpAQCAtMjkwLDEyICszNTMsMjMgQEANCiAgIChzZXJ2ZXItc3RhcnQgKG5vdCBzZXJ2ZXItbW9k ZSkpKQ0KIAwNCi0oZGVmdW4gc2VydmVyLXByb2Nlc3MtZmlsdGVyIChwcm9jIHN0cmluZykNCiso ZGVmdW4qIHNlcnZlci1wcm9jZXNzLWZpbHRlciAocHJvYyBzdHJpbmcpDQogICAiUHJvY2VzcyBh IHJlcXVlc3QgZnJvbSB0aGUgc2VydmVyIHRvIGVkaXQgc29tZSBmaWxlcy4NCiBQUk9DIGlzIHRo ZSBzZXJ2ZXIgcHJvY2Vzcy4gIEZvcm1hdCBvZiBTVFJJTkcgaXMgXCJQQVRIIFBBVEggUEFUSC4u LiBcXG5cIi4iDQorICA7OyBGaXJzdCB0aGluZ3MgZmlyc3Q6IGxldCdzIGNoZWNrIHRoZSBhdXRo ZW50aWNhdGlvbg0KKyAgKHVubGVzcyAocHJvY2Vzcy1nZXQgcHJvYyA6YXV0aGVudGljYXRlZCkN CisgICAgKGlmIChhbmQgKHN0cmluZy1tYXRjaCAiLWF1dGggXFwoLio/XFwpXG4iIHN0cmluZykN CisgICAgICAgICAgICAgKHN0cmluZz0gKG1hdGNoLXN0cmluZyAxIHN0cmluZykgc2VydmVyLWF1 dGgtc3RyaW5nKSkNCisgICAgICAgIChwcm9nbg0KKyAgICAgICAgICAoc2V0cSBzdHJpbmcgKHN1 YnN0cmluZyBzdHJpbmcgKG1hdGNoLWVuZCAwKSkpDQorICAgICAgICAgIChwcm9jZXNzLXB1dCBw cm9jIDphdXRoZW50aWNhdGVkIHQpDQorICAgICAgICAgIChzZXJ2ZXItbG9nICJBdXRoZW50aWNh dGlvbiBzdWNjZXNzZnVsIiBwcm9jKSkNCisgICAgICAoc2VydmVyLWxvZyAiQXV0aGVudGljYXRp b24gZmFpbGVkIiBwcm9jKQ0KKyAgICAgIChkZWxldGUtcHJvY2VzcyBwcm9jKQ0KKyAgICAgIChy ZXR1cm4tZnJvbSBzZXJ2ZXItcHJvY2Vzcy1maWx0ZXIpKSkNCiAgIChzZXJ2ZXItbG9nIHN0cmlu ZyBwcm9jKQ0KLSAgKGxldCAoKHByZXYgKHByb2Nlc3MtZ2V0IHByb2MgJ3ByZXZpb3VzLXN0cmlu ZykpKQ0KKyAgKGxldCAoKHByZXYgKHByb2Nlc3MtZ2V0IHByb2MgOnByZXZpb3VzLXN0cmluZykp KQ0KICAgICAod2hlbiBwcmV2DQogICAgICAgKHNldHEgc3RyaW5nIChjb25jYXQgcHJldiBzdHJp bmcpKQ0KLSAgICAgIChwcm9jZXNzLXB1dCBwcm9jICdwcmV2aW91cy1zdHJpbmcgbmlsKSkpDQor ICAgICAgKHByb2Nlc3MtcHV0IHByb2MgOnByZXZpb3VzLXN0cmluZyBuaWwpKSkNCiAgIDs7IElm IHRoZSBpbnB1dCBpcyBtdWx0aXBsZSBsaW5lcywNCiAgIDs7IHByb2Nlc3MgZWFjaCBsaW5lIGlu ZGl2aWR1YWxseS4NCkBAIC0zOTAsNSArNDY0LDUgQEANCiAgIDs7IFNhdmUgZm9yIGxhdGVyIGFu eSBwYXJ0aWFsIGxpbmUgdGhhdCByZW1haW5zLg0KICAgKHdoZW4gKD4gKGxlbmd0aCBzdHJpbmcp IDApDQotICAgIChwcm9jZXNzLXB1dCBwcm9jICdwcmV2aW91cy1zdHJpbmcgc3RyaW5nKSkpDQor ICAgIChwcm9jZXNzLXB1dCBwcm9jIDpwcmV2aW91cy1zdHJpbmcgc3RyaW5nKSkpDQogDQogKGRl ZnVuIHNlcnZlci1nb3RvLWxpbmUtY29sdW1uIChmaWxlLWxpbmUtY29sKQ0KSW5kZXg6IGxpYi1z cmMvZW1hY3NjbGllbnQuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnNyb290L2VtYWNzL2Vt YWNzL2xpYi1zcmMvZW1hY3NjbGllbnQuYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNzcNCmRp ZmYgLWIgLXUgLTIgLXIxLjc3IGVtYWNzY2xpZW50LmMNCi0tLSBsaWItc3JjL2VtYWNzY2xpZW50 LmMJMTggSnVsIDIwMDYgMTY6MzM6NDUgLTAwMDAJMS43Nw0KKysrIGxpYi1zcmMvZW1hY3NjbGll bnQuYwkyNyBPY3QgMjAwNiAwMDowNjowMSAtMDAwMA0KQEAgLTI3LDkgKzI3LDE0IEBADQogI2Vu ZGlmDQogDQorI2lmZGVmIFdJTkRPV1NOVA0KKyNkZWZpbmUgSEFWRV9TT0NLRVRTDQorI2RlZmlu ZSBOT19TT0NLRVRTX0lOX0ZJTEVfU1lTVEVNDQorI2VuZGlmDQorDQogI3VuZGVmIHNpZ25hbA0K IA0KICNpbmNsdWRlIDxjdHlwZS5oPg0KICNpbmNsdWRlIDxzdGRpby5oPg0KLSNpbmNsdWRlIDxn ZXRvcHQuaD4NCisjaW5jbHVkZSAiZ2V0b3B0LmgiDQogI2lmZGVmIEhBVkVfVU5JU1REX0gNCiAj aW5jbHVkZSA8dW5pc3RkLmg+DQpAQCAtMzgsNiArNDMsMTAgQEANCiAjaWZkZWYgVk1TDQogIyBp bmNsdWRlICJ2bXMtcHdkLmgiDQotI2Vsc2UNCisjZWxzZSAvKiBub3QgVk1TICovDQorI2lmZGVm IFdJTkRPV1NOVA0KKyMgaW5jbHVkZSA8aW8uaD4NCisjZWxzZSAvKiBub3QgV0lORE9XU05UICov DQogIyBpbmNsdWRlIDxwd2QuaD4NCisjZW5kaWYgLyogbm90IFdJTkRPV1NOVCAqLw0KICNlbmRp ZiAvKiBub3QgVk1TICovDQogDQpAQCAtNDksNCArNTgsMTkgQEANCiAjZW5kaWYNCiAMDQorI2Rl ZmluZSBTRU5EX1NUUklORyhkYXRhKSAoc2VuZF90b19lbWFjcyAocywgKGRhdGEpKSkNCisjZGVm aW5lIFNFTkRfUVVPVEVEKGRhdGEpIChxdW90ZV9maWxlX25hbWUgKHMsIChkYXRhKSkpDQorDQor I2lmbmRlZiBFWElUX1NVQ0NFU1MNCisjZGVmaW5lIEVYSVRfU1VDQ0VTUyAwDQorI2VuZGlmDQor DQorI2lmbmRlZiBFWElUX0ZBSUxVUkUNCisjZGVmaW5lIEVYSVRfRkFJTFVSRSAxDQorI2VuZGlm DQorDQorI2lmbmRlZiBOT19SRVRVUk4NCisjZGVmaW5lIE5PX1JFVFVSTg0KKyNlbmRpZg0KKwwN CiAvKiBOYW1lIHVzZWQgdG8gaW52b2tlIHRoaXMgcHJvZ3JhbS4gICovDQogY2hhciAqcHJvZ25h bWU7DQpAQCAtNjgsNCArOTIsNyBAQA0KIGNoYXIgKnNvY2tldF9uYW1lID0gTlVMTDsNCiANCisv KiBJZiBub24tTlVMTCwgdGhlIGZpbGVuYW1lIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBmaWxlLiAg Ki8NCitjaGFyICpzZXJ2ZXJfZmlsZSA9IE5VTEw7DQorDQogdm9pZCBwcmludF9oZWxwX2FuZF9l eGl0ICgpIE5PX1JFVFVSTjsNCiANCkBAIC03OCw0ICsxMDUsNSBAQA0KICAgeyAiYWx0ZXJuYXRl LWVkaXRvciIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnYScgfSwNCiAgIHsgInNvY2tldC1u YW1lIiwJcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdzJyB9LA0KKyAgeyAic2VydmVyLWZpbGUi LAlyZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ2YnIH0sDQogICB7ICJkaXNwbGF5IiwJcmVxdWly ZWRfYXJndW1lbnQsIE5VTEwsICdkJyB9LA0KICAgeyAwLCAwLCAwLCAwIH0NCkBAIC05MSw5ICsx MTksMTAgQEANCiB7DQogICBhbHRlcm5hdGVfZWRpdG9yID0gZ2V0ZW52ICgiQUxURVJOQVRFX0VE SVRPUiIpOw0KKyAgc2VydmVyX2ZpbGUgPSBnZXRlbnYgKCJFTUFDU19TRVJWRVJfRklMRSIpOw0K IA0KICAgd2hpbGUgKDEpDQogICAgIHsNCiAgICAgICBpbnQgb3B0ID0gZ2V0b3B0X2xvbmcgKGFy Z2MsIGFyZ3YsDQotCQkJICAgICAiVkhuZWE6czpkOiIsIGxvbmdvcHRzLCAwKTsNCisJCQkgICAg ICJWSG5lYTpzOmY6ZDoiLCBsb25nb3B0cywgMCk7DQogDQogICAgICAgaWYgKG9wdCA9PSBFT0Yp DQpAQCAtMTE1LDQgKzE0NCw4IEBADQogCSAgYnJlYWs7DQogDQorCWNhc2UgJ2YnOg0KKwkgIHNl cnZlcl9maWxlID0gb3B0YXJnOw0KKwkgIGJyZWFrOw0KKw0KIAljYXNlICdkJzoNCiAJICBkaXNw bGF5ID0gb3B0YXJnOw0KQEAgLTE1OCw2ICsxOTEsMTIgQEANCiAtZSwgLS1ldmFsICAgICAgICAg ICAgICBFdmFsdWF0ZSB0aGUgRklMRSBhcmd1bWVudHMgYXMgRUxpc3AgZXhwcmVzc2lvbnNcblwN CiAtZCwgLS1kaXNwbGF5PURJU1BMQVkgICBWaXNpdCB0aGUgZmlsZSBpbiB0aGUgZ2l2ZW4gZGlz cGxheVxuXA0KLS1zLCAtLXNvY2tldC1uYW1lPUZJTEVOQU1FXG5cDQorIg0KKyNpZm5kZWYgTk9f U09DS0VUU19JTl9GSUxFX1NZU1RFTQ0KKyItcywgLS1zb2NrZXQtbmFtZT1GSUxFTkFNRVxuXA0K ICAgICAgICAgICAgICAgICAgICAgICAgIFNldCB0aGUgZmlsZW5hbWUgb2YgdGhlIFVOSVggc29j a2V0IGZvciBjb21tdW5pY2F0aW9uXG5cDQorIg0KKyNlbmRpZg0KKyItZiwgLS1zZXJ2ZXItZmls ZT1GSUxFTkFNRVxuXA0KKwkJCVNldCB0aGUgZmlsZW5hbWUgb2YgdGhlIFRDUCBjb25maWd1cmF0 aW9uIGZpbGVcblwNCiAtYSwgLS1hbHRlcm5hdGUtZWRpdG9yPUVESVRPUlxuXA0KICAgICAgICAg ICAgICAgICAgICAgICAgIEVkaXRvciB0byBmYWxsYmFjayB0byBpZiB0aGUgc2VydmVyIGlzIG5v dCBydW5uaW5nXG5cDQpAQCAtMTY3LDEyICsyMDYsMTA4IEBADQogfQ0KIA0KKwwNCisvKg0KKyAg VHJ5IHRvIHJ1biBhIGRpZmZlcmVudCBjb21tYW5kLCBvciAtLWlmIG5vIGFsdGVybmF0ZSBlZGl0 b3IgaXMNCisgIGRlZmluZWQtLSBleGl0IHdpdGggYW4gZXJyb3Jjb2RlLg0KKyovDQordm9pZA0K K2ZhaWwgKGFyZ2MsIGFyZ3YpDQorICAgICBpbnQgYXJnYzsNCisgICAgIGNoYXIgKiphcmd2Ow0K K3sNCisgIGlmIChhbHRlcm5hdGVfZWRpdG9yKQ0KKyAgICB7DQorICAgICAgaW50IGkgPSBvcHRp bmQgLSAxOw0KKyAgICAgIGV4ZWN2cCAoYWx0ZXJuYXRlX2VkaXRvciwgYXJndiArIGkpOw0KKyAg ICAgIHJldHVybjsNCisgICAgfQ0KKyAgZWxzZQ0KKyAgICB7DQorICAgICAgZXhpdCAoRVhJVF9G QUlMVVJFKTsNCisgICAgfQ0KK30NCisNCisMDQorI2lmICFkZWZpbmVkIChIQVZFX1NPQ0tFVFMp DQorDQoraW50DQorbWFpbiAoYXJnYywgYXJndikNCisgICAgIGludCBhcmdjOw0KKyAgICAgY2hh ciAqKmFyZ3Y7DQorew0KKyAgZnByaW50ZiAoc3RkZXJyLCAiJXM6IFNvcnJ5LCB0aGUgRW1hY3Mg c2VydmVyIGlzIHN1cHBvcnRlZCBvbmx5XG4iLA0KKwkgICBhcmd2WzBdKTsNCisgIGZwcmludGYg KHN0ZGVyciwgIm9uIHN5c3RlbXMgd2l0aCBCZXJrZWxleSBzb2NrZXRzLlxuIik7DQorDQorICBm YWlsIChhcmdjLCBhcmd2KTsNCit9DQorDQorI2Vsc2UgLyogSEFWRV9TT0NLRVRTICovDQorDQor I2RlZmluZSBBVVRIX1NUUklOR19MRU5HVEggICA2NA0KKyNkZWZpbmUgU0VORF9CVUZGRVJfU0la RSAgIDQwOTYNCisNCisjaWZkZWYgV0lORE9XU05UDQorIyBpbmNsdWRlIDx3aW5zb2NrMi5oPg0K KyNlbHNlDQorIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCisjIGluY2x1ZGUgPHN5cy9zb2NrZXQu aD4NCisjIGluY2x1ZGUgPHN5cy91bi5oPg0KKyMgaW5jbHVkZSA8c3lzL3N0YXQuaD4NCisjIGlu Y2x1ZGUgPGVycm5vLmg+DQorI2VuZGlmDQorDQorZXh0ZXJuIGNoYXIgKnN0cmVycm9yICgpOw0K K2V4dGVybiBpbnQgZXJybm87DQorDQorLyogQnVmZmVyIHRvIGFjY3VtdWxhdGUgZGF0YSB0byBz ZW5kIGluIFRDUCBjb25uZWN0aW9ucy4gICovDQorY2hhciBzZW5kX2J1ZmZlcltTRU5EX0JVRkZF Ul9TSVpFICsgMV07DQoraW50IHNibGVuID0gMDsJLyogRmlsbCBwb2ludGVyIGZvciB0aGUgc2Vu ZCBidWZmZXIuICAqLw0KKw0KKy8qIExldCdzIHNlbmQgdGhlIGRhdGEgdG8gRW1hY3Mgd2hlbiBl aXRoZXINCisgICAtIHRoZSBkYXRhIGVuZHMgaW4gIlxuIiwgb3INCisgICAtIHRoZSBidWZmZXIg aXMgZnVsbCAoYnV0IHRoaXMgc2hvdWxkbid0IGhhcHBlbikNCisgICBPdGhlcndpc2UsIHdlIGp1 c3QgYWNjdW11bGF0ZSBpdC4gICovDQordm9pZCBzZW5kX3RvX2VtYWNzIChzLCBkYXRhKQ0KKyAg ICAgU09DS0VUIHM7DQorICAgICBjaGFyICpkYXRhOw0KK3sNCisgIHdoaWxlIChkYXRhKQ0KKyAg ICB7DQorICAgICAgaW50IGRsZW4gPSBzdHJsZW4gKGRhdGEpOw0KKyAgICAgIGlmIChkbGVuICsg c2JsZW4gPj0gU0VORF9CVUZGRVJfU0laRSkNCisJew0KKwkgIGludCBwYXJ0ID0gU0VORF9CVUZG RVJfU0laRSAtIHNibGVuOw0KKwkgIHN0cm5jcHkgKCZzZW5kX2J1ZmZlcltzYmxlbl0sIGRhdGEs IHBhcnQpOw0KKwkgIGRhdGEgKz0gcGFydDsNCisJICBzYmxlbiA9IFNFTkRfQlVGRkVSX1NJWkU7 DQorCX0NCisgICAgICBlbHNlIGlmIChkbGVuKQ0KKwl7DQorCSAgc3RyY3B5ICgmc2VuZF9idWZm ZXJbc2JsZW5dLCBkYXRhKTsNCisJICBkYXRhID0gTlVMTDsNCisJICBzYmxlbiArPSBkbGVuOw0K Kwl9DQorICAgICAgZWxzZQ0KKwlicmVhazsNCisNCisgICAgICBpZiAoc2JsZW4gPT0gU0VORF9C VUZGRVJfU0laRQ0KKwkgIHx8IChzYmxlbiA+IDAgJiYgc2VuZF9idWZmZXJbc2JsZW4tMV0gPT0g J1xuJykpDQorCXsNCisJICBpbnQgc2VudCA9IHNlbmQgKHMsIHNlbmRfYnVmZmVyLCBzYmxlbiwg MCk7DQorCSAgaWYgKHNlbnQgIT0gc2JsZW4pDQorCSAgICBzdHJjcHkgKHNlbmRfYnVmZmVyLCAm c2VuZF9idWZmZXJbc2VudF0pOw0KKwkgIHNibGVuIC09IHNlbnQ7DQorCX0NCisgICAgfQ0KK30N CisNCiAvKiBJbiBOQU1FLCBpbnNlcnQgYSAmIGJlZm9yZSBlYWNoICYsIGVhY2ggc3BhY2UsIGVh Y2ggbmV3bGluZSwgYW5kDQogICAgYW55IGluaXRpYWwgLS4gIENoYW5nZSBzcGFjZXMgdG8gdW5k ZXJzY29yZXMsIHRvbywgc28gdGhhdCB0aGUNCiAgICByZXR1cm4gdmFsdWUgbmV2ZXIgY29udGFp bnMgYSBzcGFjZS4gICovDQotDQogdm9pZA0KLXF1b3RlX2ZpbGVfbmFtZSAobmFtZSwgc3RyZWFt KQ0KK3F1b3RlX2ZpbGVfbmFtZSAocywgbmFtZSkNCisgICAgIFNPQ0tFVCBzOw0KICAgICAgY2hh ciAqbmFtZTsNCi0gICAgIEZJTEUgKnN0cmVhbTsNCiB7DQogICBjaGFyICpjb3B5ID0gKGNoYXIg KikgbWFsbG9jIChzdHJsZW4gKG5hbWUpICogMiArIDEpOw0KQEAgLTIwNCw3MSArMzM5LDEyNSBA QA0KICAgKnErKyA9IDA7DQogDQotICBmcHJpbnRmIChzdHJlYW0sICIlcyIsIGNvcHkpOw0KKyAg U0VORF9TVFJJTkcgKGNvcHkpOw0KIA0KICAgZnJlZSAoY29weSk7DQogfQ0KIA0KLS8qIExpa2Ug bWFsbG9jIGJ1dCBnZXQgZmF0YWwgZXJyb3IgaWYgbWVtb3J5IGlzIGV4aGF1c3RlZC4gICovDQor I2lmZGVmIFdJTkRPV1NOVA0KKy8qIFdyYXBwZXIgdG8gbWFrZSBXU0FDbGVhbnVwIGEgY2RlY2ws IGFzIHJlcXVpcmVkIGJ5IGF0ZXhpdCgpLgkgKi8NCit2b2lkIGNsb3NlX3dpbnNvY2sgKCkNCit7 DQorICBXU0FDbGVhbnVwICgpOw0KK30NCisjZW5kaWYgLyogV0lORE9XU05UICovDQogDQotbG9u ZyAqDQoteG1hbGxvYyAoc2l6ZSkNCi0gICAgIHVuc2lnbmVkIGludCBzaXplOw0KK3ZvaWQgaW5p dGlhbGl6ZV9zb2NrZXRzICgpDQogew0KLSAgbG9uZyAqcmVzdWx0ID0gKGxvbmcgKikgbWFsbG9j IChzaXplKTsNCi0gIGlmIChyZXN1bHQgPT0gTlVMTCkNCisjaWZkZWYgV0lORE9XU05UDQorICBX U0FEQVRBIHdzYURhdGE7DQorDQorICAvKiBJbml0aWFsaXplIHRoZSBXaW5Tb2NrMiBsaWJyYXJ5 LiAgKi8NCisgIGlmIChXU0FTdGFydHVwIChNQUtFV09SRCAoMiwgMCksICZ3c2FEYXRhKSkNCiAg IHsNCi0gICAgcGVycm9yICgibWFsbG9jIik7DQorICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6 IGVycm9yIGluaXRpYWxpemluZyBXaW5Tb2NrMiIsIHByb2duYW1lKTsNCiAgICAgZXhpdCAoRVhJ VF9GQUlMVVJFKTsNCiAgIH0NCi0gIHJldHVybiByZXN1bHQ7DQorDQorICBhdGV4aXQgKGNsb3Nl X3dpbnNvY2spOw0KKyNlbmRpZiAvKiBXSU5ET1dTTlQgKi8NCiB9DQogDA0KIC8qDQotICBUcnkg dG8gcnVuIGEgZGlmZmVyZW50IGNvbW1hbmQsIG9yIC0taWYgbm8gYWx0ZXJuYXRlIGVkaXRvciBp cw0KLSAgZGVmaW5lZC0tIGV4aXQgd2l0aCBhbiBlcnJvcmNvZGUuDQorICogUmVhZCB0aGUgaW5m b3JtYXRpb24gbmVlZGVkIHRvIHNldCB1cCBhIFRDUCBjb21tIGNoYW5uZWwgd2l0aA0KKyAqIHRo ZSBFbWFjcyBzZXJ2ZXI6IGhvc3QsIHBvcnQgYW5kIGF1dGhlbnRpY2F0aW9uIHN0cmluZy4NCiAq Lw0KLXZvaWQNCi1mYWlsIChhcmdjLCBhcmd2KQ0KLSAgICAgaW50IGFyZ2M7DQotICAgICBjaGFy ICoqYXJndjsNCit2b2lkIGdldF9zZXJ2ZXJfY29uZmlnIChzZXJ2ZXIsIGF1dGhlbnRpY2F0aW9u KQ0KKyAgICAgc3RydWN0IHNvY2thZGRyX2luICpzZXJ2ZXI7DQorICAgICBjaGFyICphdXRoZW50 aWNhdGlvbjsNCiB7DQotICBpZiAoYWx0ZXJuYXRlX2VkaXRvcikNCisgIEZJTEUgKmNvbmZpZzsN CisgIGNoYXIgZG90dGVkWzMyXTsNCisgIGNoYXIgKnBvcnQ7DQorDQorICBpZiAoISAoY29uZmln ID0gZm9wZW4gKHNlcnZlcl9maWxlLCAicmIiKSkpDQogICAgIHsNCi0gICAgICBpbnQgaSA9IG9w dGluZCAtIDE7DQotICAgICAgZXhlY3ZwIChhbHRlcm5hdGVfZWRpdG9yLCBhcmd2ICsgaSk7DQot ICAgICAgcmV0dXJuOw0KKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiBjYW5ub3QgcmVhZCBj b25maWd1cmF0aW9uIGZpbGUgJXMiLA0KKwkgICAgICAgcHJvZ25hbWUsIHNlcnZlcl9maWxlKTsN CisgICAgICBleGl0IChFWElUX0ZBSUxVUkUpOw0KKyAgICB9DQorDQorICBpZiAoZmdldHMgKGRv dHRlZCwgc2l6ZW9mIGRvdHRlZCwgY29uZmlnKQ0KKyAgICAgICYmIChwb3J0ID0gc3RyY2hyIChk b3R0ZWQsICc6JykpKQ0KKyAgICB7DQorICAgICAgKnBvcnQrKyA9ICdcMCc7DQogICAgIH0NCiAg IGVsc2UNCiAgICAgew0KKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiBpbnZhbGlkIGNvbmZp Z3VyYXRpb24gaW5mbyIsIHByb2duYW1lKTsNCiAgICAgICBleGl0IChFWElUX0ZBSUxVUkUpOw0K ICAgICB9DQotfQ0KIA0KKyAgc2VydmVyLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsNCisgIHNlcnZl ci0+c2luX2FkZHIuc19hZGRyID0gaW5ldF9hZGRyIChkb3R0ZWQpOw0KKyAgc2VydmVyLT5zaW5f cG9ydCA9IGh0b25zIChhdG9pIChwb3J0KSk7DQogDQorICBpZiAoISBmcmVhZCAoYXV0aGVudGlj YXRpb24sIEFVVEhfU1RSSU5HX0xFTkdUSCwgMSwgY29uZmlnKSkNCisgICAgew0KKyAgICAgIGZw cmludGYgKHN0ZGVyciwgIiVzOiBjYW5ub3QgcmVhZCBhdXRoZW50aWNhdGlvbiBpbmZvIiwgcHJv Z25hbWUpOw0KKyAgICAgIGV4aXQgKEVYSVRfRkFJTFVSRSk7DQorICAgIH0NCiAMDQotI2lmICFk ZWZpbmVkIChIQVZFX1NPQ0tFVFMpIHx8IGRlZmluZWQgKE5PX1NPQ0tFVFNfSU5fRklMRV9TWVNU RU0pDQorICBmY2xvc2UgKGNvbmZpZyk7DQorfQ0KIA0KLWludA0KLW1haW4gKGFyZ2MsIGFyZ3Yp DQotICAgICBpbnQgYXJnYzsNCi0gICAgIGNoYXIgKiphcmd2Ow0KK1NPQ0tFVA0KK3NldF90Y3Bf c29ja2V0ICgpDQogew0KLSAgZnByaW50ZiAoc3RkZXJyLCAiJXM6IFNvcnJ5LCB0aGUgRW1hY3Mg c2VydmVyIGlzIHN1cHBvcnRlZCBvbmx5XG4iLA0KLQkgICBhcmd2WzBdKTsNCi0gIGZwcmludGYg KHN0ZGVyciwgIm9uIHN5c3RlbXMgd2l0aCBCZXJrZWxleSBzb2NrZXRzLlxuIik7DQorICBTT0NL RVQgczsNCisgIHN0cnVjdCBzb2NrYWRkcl9pbiBzZXJ2ZXI7DQorICB1bnNpZ25lZCBsb25nIGNf YXJnID0gMDsNCisgIHN0cnVjdCBsaW5nZXIgbF9hcmcgPSB7MSwgMX07DQorICBjaGFyIGF1dGhf c3RyaW5nW0FVVEhfU1RSSU5HX0xFTkdUSCArIDFdOw0KIA0KLSAgZmFpbCAoYXJnYywgYXJndik7 DQotfQ0KKyAgaW5pdGlhbGl6ZV9zb2NrZXRzICgpOw0KIA0KLSNlbHNlIC8qIEhBVkVfU09DS0VU UyAqLw0KKyAgZ2V0X3NlcnZlcl9jb25maWcgKCZzZXJ2ZXIsIGF1dGhfc3RyaW5nKTsNCiANCi0j aW5jbHVkZSA8c3lzL3R5cGVzLmg+DQotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4NCi0jaW5jbHVk ZSA8c3lzL3VuLmg+DQotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+DQotI2luY2x1ZGUgPGVycm5vLmg+ DQorICAvKg0KKyAgICogT3BlbiB1cCBhbiBBRl9JTkVUIHNvY2tldA0KKyAgICovDQorICBpZiAo KHMgPSBzb2NrZXQgKEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCkpIDwgMCkNCisg ICAgew0KKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAiLCBwcm9nbmFtZSk7DQorICAgICAg cGVycm9yICgic29ja2V0Iik7DQorICAgICAgcmV0dXJuIElOVkFMSURfU09DS0VUOw0KKyAgICB9 DQogDQotZXh0ZXJuIGNoYXIgKnN0cmVycm9yICgpOw0KLWV4dGVybiBpbnQgZXJybm87DQorICAv Kg0KKyAgICogU2V0IHVwIHRoZSBzb2NrZXQNCisgICAqLw0KKyAgaWYgKGNvbm5lY3QgKHMsIChz dHJ1Y3Qgc29ja2FkZHIgKikgJnNlcnZlciwgc2l6ZW9mIHNlcnZlcikgPCAwKQ0KKyAgICB7DQor ICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICIsIHByb2duYW1lKTsNCisgICAgICBwZXJyb3Ig KCJjb25uZWN0Iik7DQorICAgICAgcmV0dXJuIElOVkFMSURfU09DS0VUOw0KKyAgICB9DQorDQor ICBpb2N0bHNvY2tldCAocywgRklPTkJJTywgJmNfYXJnKTsNCisgIHNldHNvY2tvcHQgKHMsIFNP TF9TT0NLRVQsIFNPX0xJTkdFUiwgKGNoYXIgKikgJmxfYXJnLCBzaXplb2YgbF9hcmcpOw0KKw0K KyAgLyoNCisgICAqIFNlbmQgdGhlIGF1dGhlbnRpY2F0aW9uDQorICAgKi8NCisgIGF1dGhfc3Ry aW5nW0FVVEhfU1RSSU5HX0xFTkdUSF0gPSAnXDAnOw0KKw0KKyAgU0VORF9TVFJJTkcgKCItYXV0 aCAiKTsNCisgIFNFTkRfU1RSSU5HIChhdXRoX3N0cmluZyk7DQorICBTRU5EX1NUUklORyAoIlxu Iik7DQorDQorICByZXR1cm4gczsNCit9DQorDQorI2lmICFkZWZpbmVkIChOT19TT0NLRVRTX0lO X0ZJTEVfU1lTVEVNKQ0KIA0KIC8qIFRocmVlIHBvc3NpYmlsaXRpZXM6DQpAQCAtMjkyLDI2ICs0 ODEsOSBAQA0KIH0NCiANCi1pbnQNCi1tYWluIChhcmdjLCBhcmd2KQ0KLSAgICAgaW50IGFyZ2M7 DQotICAgICBjaGFyICoqYXJndjsNCitTT0NLRVQNCitzZXRfbG9jYWxfc29ja2V0ICgpDQogew0K LSAgaW50IHMsIGksIG5lZWRsZiA9IDA7DQotICBGSUxFICpvdXQsICppbjsNCisgIFNPQ0tFVCBz Ow0KICAgc3RydWN0IHNvY2thZGRyX3VuIHNlcnZlcjsNCi0gIGNoYXIgKmN3ZCwgKnN0cjsNCi0g IGNoYXIgc3RyaW5nW0JVRlNJWl07DQotDQotICBwcm9nbmFtZSA9IGFyZ3ZbMF07DQotDQotICAv KiBQcm9jZXNzIG9wdGlvbnMuICAqLw0KLSAgZGVjb2RlX29wdGlvbnMgKGFyZ2MsIGFyZ3YpOw0K LQ0KLSAgaWYgKChhcmdjIC0gb3B0aW5kIDwgMSkgJiYgIWV2YWwpDQotICAgIHsNCi0gICAgICBm cHJpbnRmIChzdGRlcnIsICIlczogZmlsZSBuYW1lIG9yIGFyZ3VtZW50IHJlcXVpcmVkXG4iLCBw cm9nbmFtZSk7DQotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiVHJ5IGAlcyAtLWhlbHAnIGZvciBt b3JlIGluZm9ybWF0aW9uXG4iLCBwcm9nbmFtZSk7DQotICAgICAgZXhpdCAoRVhJVF9GQUlMVVJF KTsNCi0gICAgfQ0KIA0KICAgLyoNCkBAIC0zMjEsNyArNDkzLDcgQEANCiAgIGlmICgocyA9IHNv Y2tldCAoQUZfVU5JWCwgU09DS19TVFJFQU0sIDApKSA8IDApDQogICAgIHsNCi0gICAgICBmcHJp bnRmIChzdGRlcnIsICIlczogIiwgYXJndlswXSk7DQorICAgICAgZnByaW50ZiAoc3RkZXJyLCAi JXM6ICIsIHByb2duYW1lKTsNCiAgICAgICBwZXJyb3IgKCJzb2NrZXQiKTsNCi0gICAgICBmYWls IChhcmdjLCBhcmd2KTsNCisgICAgICByZXR1cm4gSU5WQUxJRF9TT0NLRVQ7DQogICAgIH0NCiAN CkBAIC0zNTMsNSArNTI1LDUgQEANCiAgICAgICB7DQogCWZwcmludGYgKHN0ZGVyciwgIiVzOiBz b2NrZXQtbmFtZSAlcyB0b28gbG9uZyIsDQotCQkgYXJndlswXSwgc29ja2V0X25hbWUpOw0KKwkJ IHByb2duYW1lLCBzb2NrZXRfbmFtZSk7DQogCWV4aXQgKEVYSVRfRkFJTFVSRSk7DQogICAgICAg fQ0KQEAgLTM4OCw1ICs1NjAsNSBAQA0KIAkJICB7DQogCQkgICAgZnByaW50ZiAoc3RkZXJyLCAi JXM6IHNvY2tldC1uYW1lICVzIHRvbyBsb25nIiwNCi0JCQkgICAgIGFyZ3ZbMF0sIHNvY2tldF9u YW1lKTsNCisJCQkgICAgIHByb2duYW1lLCBzb2NrZXRfbmFtZSk7DQogCQkgICAgZXhpdCAoRVhJ VF9GQUlMVVJFKTsNCiAJCSAgfQ0KQEAgLTQwOCw1ICs1ODAsNSBAQA0KIAkgICB7DQogCSAgICAg ZnByaW50ZiAoc3RkZXJyLCAiJXM6IEludmFsaWQgc29ja2V0IG93bmVyXG4iLCBhcmd2WzBdKTsN Ci0JICAgICBmYWlsIChhcmdjLCBhcmd2KTsNCisJICAgIHJldHVybiBJTlZBTElEX1NPQ0tFVDsN CiAJICAgfQ0KIAkgYnJlYWs7DQpAQCAtNDE4LDEwICs1OTAsOSBAQA0KIAkJICAgICIlczogY2Fu J3QgZmluZCBzb2NrZXQ7IGhhdmUgeW91IHN0YXJ0ZWQgdGhlIHNlcnZlcj9cblwNCiBUbyBzdGFy dCB0aGUgc2VydmVyIGluIEVtYWNzLCB0eXBlIFwiTS14IHNlcnZlci1zdGFydFwiLlxuIiwNCi0J CSAgICBhcmd2WzBdKTsNCisJCSAgIHByb2duYW1lKTsNCiAJIGVsc2UNCiAJICAgZnByaW50ZiAo c3RkZXJyLCAiJXM6IGNhbid0IHN0YXQgJXM6ICVzXG4iLA0KLQkJICAgIGFyZ3ZbMF0sIHNlcnZl ci5zdW5fcGF0aCwgc3RyZXJyb3IgKHNhdmVkX2Vycm5vKSk7DQotCSBmYWlsIChhcmdjLCBhcmd2 KTsNCi0JIGJyZWFrOw0KKwkJICAgcHJvZ25hbWUsIHNlcnZlci5zdW5fcGF0aCwgc3RyZXJyb3Ig KHNhdmVkX2Vycm5vKSk7DQorCXJldHVybiBJTlZBTElEX1NPQ0tFVDsNCiAgICAgICAgfQ0KICAg fQ0KQEAgLTQzMCwyOSArNjAxLDU0IEBADQogICAgICAgPCAwKQ0KICAgICB7DQotICAgICAgZnBy aW50ZiAoc3RkZXJyLCAiJXM6ICIsIGFyZ3ZbMF0pOw0KKyAgICAgIGZwcmludGYgKHN0ZGVyciwg IiVzOiAiLCBwcm9nbmFtZSk7DQogICAgICAgcGVycm9yICgiY29ubmVjdCIpOw0KLSAgICAgIGZh aWwgKGFyZ2MsIGFyZ3YpOw0KKyAgICAgIHJldHVybiBJTlZBTElEX1NPQ0tFVDsNCiAgICAgfQ0K IA0KLSAgLyogV2UgdXNlIHRoZSBzdHJlYW0gT1VUIHRvIHNlbmQgb3VyIGNvbW1hbmQgdG8gdGhl IHNlcnZlci4gICovDQotICBpZiAoKG91dCA9IGZkb3BlbiAocywgInIrIikpID09IE5VTEwpDQor ICByZXR1cm4gczsNCit9DQorI2VuZGlmIC8qICEgTk9fU09DS0VUU19JTl9GSUxFX1NZU1RFTSAq Lw0KKw0KK1NPQ0tFVA0KK3NldF9zb2NrZXQgKCkNCit7DQorICBpZiAoc2VydmVyX2ZpbGUpDQor ICAgIHJldHVybiBzZXRfdGNwX3NvY2tldCAoKTsNCisgIGVsc2UNCisjaWZuZGVmIE5PX1NPQ0tF VFNfSU5fRklMRV9TWVNURU0NCisgICAgcmV0dXJuIHNldF9sb2NhbF9zb2NrZXQgKCk7DQorI2Vs c2UNCiAgICAgew0KLSAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAiLCBhcmd2WzBdKTsNCi0g ICAgICBwZXJyb3IgKCJmZG9wZW4iKTsNCi0gICAgICBmYWlsIChhcmdjLCBhcmd2KTsNCisgICAg ICBmcHJpbnRmIChzdGRlcnIsICIlczogbWlzc2luZyAtLXNlcnZlci1maWxlIG9wdGlvbiIsIHBy b2duYW1lKTsNCisgICAgICBleGl0IChFWElUX0ZBSUxVUkUpOw0KICAgICB9DQorI2VuZGlmDQor fQ0KKw0KK2ludA0KK21haW4gKGFyZ2MsIGFyZ3YpDQorICAgICBpbnQgYXJnYzsNCisgICAgIGNo YXIgKiphcmd2Ow0KK3sNCisgIFNPQ0tFVCBzOw0KKyAgaW50IGksIHJsLCBuZWVkbGYgPSAwOw0K KyAgY2hhciAqY3dkOw0KKyAgY2hhciBzdHJpbmdbQlVGU0laKzFdOw0KKw0KKyAgcHJvZ25hbWUg PSBhcmd2WzBdOw0KIA0KLSAgLyogV2UgdXNlIHRoZSBzdHJlYW0gSU4gdG8gcmVhZCB0aGUgcmVz cG9uc2UuDQotICAgICBXZSB1c2VkIHRvIHVzZSBqdXN0IG9uZSBzdHJlYW0gZm9yIGJvdGggb3V0 cHV0IGFuZCBpbnB1dA0KLSAgICAgb24gdGhlIHNvY2tldCwgYnV0IHJldmVyc2luZyBkaXJlY3Rp b24gd29ya3Mgbm9ucG9ydGFibHk6DQotICAgICBvbiBzb21lIHN5c3RlbXMsIHRoZSBvdXRwdXQg YXBwZWFycyBhcyB0aGUgZmlyc3QgaW5wdXQ7DQotICAgICBvbiBvdGhlciBzeXN0ZW1zIGl0IGRv ZXMgbm90LiAgKi8NCi0gIGlmICgoaW4gPSBmZG9wZW4gKHMsICJyKyIpKSA9PSBOVUxMKQ0KKyAg LyogUHJvY2VzcyBvcHRpb25zLiAgKi8NCisgIGRlY29kZV9vcHRpb25zIChhcmdjLCBhcmd2KTsN CisNCisgIGlmICgoYXJnYyAtIG9wdGluZCA8IDEpICYmICFldmFsKQ0KICAgICB7DQotICAgICAg ZnByaW50ZiAoc3RkZXJyLCAiJXM6ICIsIGFyZ3ZbMF0pOw0KLSAgICAgIHBlcnJvciAoImZkb3Bl biIpOw0KLSAgICAgIGZhaWwgKGFyZ2MsIGFyZ3YpOw0KKyAgICAgIGZwcmludGYgKHN0ZGVyciwg IiVzOiBmaWxlIG5hbWUgb3IgYXJndW1lbnQgcmVxdWlyZWRcbiIsIHByb2duYW1lKTsNCisgICAg ICBmcHJpbnRmIChzdGRlcnIsICJUcnkgYCVzIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb25c biIsIHByb2duYW1lKTsNCisgICAgICBleGl0IChFWElUX0ZBSUxVUkUpOw0KICAgICB9DQogDQor ICBpZiAoKHMgPSBzZXRfc29ja2V0ICgpKSA9PSBJTlZBTElEX1NPQ0tFVCkNCisgICAgZmFpbCAo YXJnYywgYXJndik7DQorDQogI2lmZGVmIEhBVkVfR0VUQ1dEDQogICBjd2QgPSBnZXRjd2QgKHN0 cmluZywgc2l6ZW9mIHN0cmluZyk7DQpAQCAtNDY1LDggKzY2MSw4IEBADQogDQogI2lmZGVmIEhB VkVfR0VUQ1dEDQotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICVzICglcylcbiIsIGFyZ3Zb MF0sDQorICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICVzICglcylcbiIsIHByb2duYW1lLA0K IAkgICAgICAgIkNhbm5vdCBnZXQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIsIHN0cmVycm9y IChlcnJubykpOw0KICNlbHNlDQotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICVzICglcylc biIsIGFyZ3ZbMF0sIHN0cmluZywgc3RyZXJyb3IgKGVycm5vKSk7DQorICAgICAgZnByaW50ZiAo c3RkZXJyLCAiJXM6ICVzICglcylcbiIsIHByb2duYW1lLCBzdHJpbmcsIHN0cmVycm9yIChlcnJu bykpOw0KICNlbmRpZg0KICAgICAgIGZhaWwgKGFyZ2MsIGFyZ3YpOw0KQEAgLTQ3NCwxNCArNjcw LDE0IEBADQogDQogICBpZiAobm93YWl0KQ0KLSAgICBmcHJpbnRmIChvdXQsICItbm93YWl0ICIp Ow0KKyAgICBTRU5EX1NUUklORyAoIi1ub3dhaXQgIik7DQogDQogICBpZiAoZXZhbCkNCi0gICAg ZnByaW50ZiAob3V0LCAiLWV2YWwgIik7DQorICAgIFNFTkRfU1RSSU5HICgiLWV2YWwgIik7DQog DQogICBpZiAoZGlzcGxheSkNCiAgICAgew0KLSAgICAgIGZwcmludGYgKG91dCwgIi1kaXNwbGF5 ICIpOw0KLSAgICAgIHF1b3RlX2ZpbGVfbmFtZSAoZGlzcGxheSwgb3V0KTsNCi0gICAgICBmcHJp bnRmIChvdXQsICIgIik7DQorICAgICAgU0VORF9TVFJJTkcgKCItZGlzcGxheSAiKTsNCisgICAg ICBTRU5EX1FVT1RFRCAoZGlzcGxheSk7DQorICAgICAgU0VORF9TVFJJTkcgKCIgIik7DQogICAg IH0NCiANCkBAIC00OTgsMzQgKzY5NCw0MSBAQA0KIAkgICAgICBpZiAoKnAgIT0gMCkNCiAJCXsN Ci0JCSAgcXVvdGVfZmlsZV9uYW1lIChjd2QsIG91dCk7DQotCQkgIGZwcmludGYgKG91dCwgIi8i KTsNCisJCSAgU0VORF9RVU9URUQgKGN3ZCk7DQorCQkgIFNFTkRfU1RSSU5HICgiLyIpOw0KIAkJ fQ0KIAkgICAgfQ0KKyNpZm5kZWYgV0lORE9XU05UDQogCSAgZWxzZSBpZiAoKmFyZ3ZbaV0gIT0g Jy8nKQ0KKyNlbHNlDQorCSAgZWxzZSBpZiAoKCphcmd2W2ldICE9ICcvJykNCisJCSAgIC8qIEFi c29sdXRlIHBhdGhzIGNhbiBhbHNvIHN0YXJ0IHdpdGggYmFja3NsYXNoDQorCQkgICAgICBvciBk cml2ZSBsZXR0ZXJzLgkgKi8NCisJCSAgICYmICgqYXJndltpXSAhPSAnXFwnKQ0KKwkJICAgJiYg KCFpc2xvd2VyICh0b2xvd2VyICgqYXJndltpXSkpDQorCQkgICAgICAgfHwgKGFyZ3ZbaV1bMV0g IT0gJzonKSkpDQorI2VuZGlmDQogCSAgICB7DQotCSAgICAgIHF1b3RlX2ZpbGVfbmFtZSAoY3dk LCBvdXQpOw0KLQkgICAgICBmcHJpbnRmIChvdXQsICIvIik7DQorCSAgICAgIFNFTkRfUVVPVEVE IChjd2QpOw0KKwkgICAgICBTRU5EX1NUUklORyAoIi8iKTsNCiAJICAgIH0NCiANCi0JICBxdW90 ZV9maWxlX25hbWUgKGFyZ3ZbaV0sIG91dCk7DQotCSAgZnByaW50ZiAob3V0LCAiICIpOw0KKwkg IFNFTkRfUVVPVEVEIChhcmd2W2ldKTsNCisJICBTRU5EX1NUUklORyAoIiAiKTsNCiAJfQ0KICAg ICB9DQogICBlbHNlDQogICAgIHsNCi0gICAgICB3aGlsZSAoKHN0ciA9IGZnZXRzIChzdHJpbmcs IEJVRlNJWiwgc3RkaW4pKSkNCisgICAgICB3aGlsZSAoZmdldHMgKHN0cmluZywgQlVGU0laLCBz dGRpbikpDQogCXsNCi0JICBxdW90ZV9maWxlX25hbWUgKHN0ciwgb3V0KTsNCisJICBTRU5EX1FV T1RFRCAoc3RyaW5nKTsNCiAJfQ0KLSAgICAgIGZwcmludGYgKG91dCwgIiAiKTsNCisgICAgICBT RU5EX1NUUklORyAoIiAiKTsNCiAgICAgfQ0KIA0KLSAgZnByaW50ZiAob3V0LCAiXG4iKTsNCi0g IGZmbHVzaCAob3V0KTsNCisgIFNFTkRfU1RSSU5HICgiXG4iKTsNCiANCiAgIC8qIE1heWJlIHdh aXQgZm9yIGFuIGFuc3dlci4gICAqLw0KLSAgaWYgKG5vd2FpdCkNCi0gICAgcmV0dXJuIEVYSVRf U1VDQ0VTUzsNCi0NCisgIGlmICghbm93YWl0KQ0KKyAgICB7DQogICBpZiAoIWV2YWwpDQogICAg IHsNCkBAIC01MzYsMTAgKzczOSwxMSBAQA0KIA0KICAgLyogTm93LCB3YWl0IGZvciBhbiBhbnN3 ZXIgYW5kIHByaW50IGFueSBtZXNzYWdlcy4gICovDQotICB3aGlsZSAoKHN0ciA9IGZnZXRzIChz dHJpbmcsIEJVRlNJWiwgaW4pKSkNCisgICAgICB3aGlsZSAoKHJsID0gcmVjdiAocywgc3RyaW5n LCBCVUZTSVosIDApKSA+IDApDQogICAgIHsNCisJICBzdHJpbmdbcmxdID0gJ1wwJzsNCiAgICAg ICBpZiAobmVlZGxmID09IDIpDQogCXByaW50ZiAoIlxuIik7DQotICAgICAgcHJpbnRmICgiJXMi LCBzdHIpOw0KLSAgICAgIG5lZWRsZiA9IHN0clswXSA9PSAnXDAnID8gbmVlZGxmIDogc3RyW3N0 cmxlbiAoc3RyKSAtIDFdICE9ICdcbic7DQorCSAgcHJpbnRmICgiJXMiLCBzdHJpbmcpOw0KKwkg IG5lZWRsZiA9IHN0cmluZ1swXSA9PSAnXDAnID8gbmVlZGxmIDogc3RyaW5nW3N0cmxlbiAoc3Ry aW5nKSAtIDFdICE9ICdcbic7DQogICAgIH0NCiANCkBAIC01NDcsNSArNzUxLDcgQEANCiAgICAg cHJpbnRmICgiXG4iKTsNCiAgIGZmbHVzaCAoc3Rkb3V0KTsNCisgICAgfQ0KIA0KKyAgY2xvc2Vz b2NrZXQgKHMpOw0KICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsNCiB9DQpJbmRleDogbGliLXNyYy9t YWtlZmlsZS53MzItaW4NCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvY3Zzcm9vdC9lbWFjcy9lbWFj cy9saWItc3JjL21ha2VmaWxlLnczMi1pbix2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDIuNDYNCmRp ZmYgLWIgLXUgLTIgLXIyLjQ2IG1ha2VmaWxlLnczMi1pbg0KLS0tIGxpYi1zcmMvbWFrZWZpbGUu dzMyLWluCTkgT2N0IDIwMDYgMTk6NTc6NDMgLTAwMDAJMi40Ng0KKysrIGxpYi1zcmMvbWFrZWZp bGUudzMyLWluCTI2IE9jdCAyMDA2IDIyOjIzOjEyIC0wMDAwDQpAQCAtMjEsNSArMjEsNSBAQA0K ICMNCiANCi1BTEwgPSBtYWtlLWRvY2ZpbGUgaGV4bCBjdGFncyBldGFncyBtb3ZlbWFpbCBlYnJv d3NlIHNvcnRlZC1kb2MgZGlnZXN0LWRvYw0KK0FMTCA9IG1ha2UtZG9jZmlsZSBoZXhsIGN0YWdz IGV0YWdzIG1vdmVtYWlsIGVicm93c2Ugc29ydGVkLWRvYyBkaWdlc3QtZG9jIGVtYWNzY2xpZW50 DQogDQogLlBIT05ZOiAkKEFMTCkNCkBAIC0zMyw1ICszMyw0IEBADQogIwkJJChCTEQpL3NlcnZl ci5leGUJXA0KICMJCSQoQkxEKS9lbWFjc3Rvb2wuZXhlCVwNCi0jCQkkKEJMRCkvZW1hY3NjbGll bnQuZXhlCVwNCiAjCQkkKEJMRCkvY3Z0bWFpbC5leGUJXA0KIA0KQEAgLTYwLDQgKzU5LDUgQEAN CiBzb3J0ZWQtZG9jOgkkKEJMRCkgJChCTEQpL3NvcnRlZC1kb2MuZXhlDQogZGlnZXN0LWRvYzoJ JChCTEQpICQoQkxEKS9kaWdlc3QtZG9jLmV4ZQ0KK2VtYWNzY2xpZW50OgkkKEJMRCkgJChCTEQp L2VtYWNzY2xpZW50LmV4ZQ0KIA0KIHRlc3QtZGlzdHJpYjoJJChCTEQpICQoQkxEKS90ZXN0LWRp c3RyaWIuZXhlDQpAQCAtNzUsNCArNzUsMTcgQEANCiAJCSQoTElOSykgJChMSU5LX09VVCkkQCAk KExJTktfRkxBR1MpICQoTU9WRU1BSUxPQkpTKSAkKFdTT0NLMzIpICQoTElCUykNCiANCitFQ0xJ RU5UX0NGTEFHUyA9IC1EV0lORE9XU05UIC1ESEFWRV9HRVRDV0QgLURIQVZFX1NUUkVSUk9SIC1j DQorRUNMSUVOVE9CSlMgPQkkKEJMRCkvZW1hY3NjbGllbnQuJChPKSBcDQorCQkkKEJMRCkvZ2V0 b3B0LiQoTykgXA0KKwkJJChCTEQpL2dldG9wdDEuJChPKSBcDQorCQkkKEJMRCkvbnRsaWIuJChP KQ0KKw0KKyQoQkxEKS9lbWFjc2NsaWVudC5leGU6CQkkKEVDTElFTlRPQkpTKQ0KKyMgcHV0IHdz b2NrMzIubGliIGJlZm9yZSAkKExJQlMpIHRvIGVuc3VyZSB3ZSBkb24ndCBsaW5rIHRvIHdzMl8z Mi5saWINCisJCSQoTElOSykgJChMSU5LX09VVCkkQCAkKExJTktfRkxBR1MpICQoRUNMSUVOVE9C SlMpICQoV1NPQ0szMikgJChMSUJTKQ0KKw0KKyQoQkxEKS9lbWFjc2NsaWVudC4kKE8pOgllbWFj c2NsaWVudC5jDQorCQkkKENDKSAkKEVDTElFTlRfQ0ZMQUdTKSAkKENDX09VVCkkQCBlbWFjc2Ns aWVudC5jDQorDQogRVRBR1NPQkogICAgICA9ICQoQkxEKS9ldGFncy4kKE8pIFwNCiAJCSQoQkxE KS9nZXRvcHQuJChPKSBcDQpAQCAtMjk3LDQgKzMxMCw1IEBADQogCQkkKENQKSAkKEJMRCkvc29y dGVkLWRvYy5leGUgJChJTlNUQUxMX0RJUikvYmluDQogCQkkKENQKSAkKEJMRCkvZGlnZXN0LWRv Yy5leGUgJChJTlNUQUxMX0RJUikvYmluDQorCQkkKENQKSAkKEJMRCkvZW1hY3NjbGllbnQuZXhl ICQoSU5TVEFMTF9ESVIpL2Jpbg0KIAkJLSBta2RpciAiJChJTlNUQUxMX0RJUikvZXRjIg0KIAkJ JChDUCkgJChET0MpICQoSU5TVEFMTF9ESVIpL2V0Yw0K ------=_Part_54136_13421296.1161908829650 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Emacs-devel mailing list Emacs-devel@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-devel ------=_Part_54136_13421296.1161908829650--