From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Michael Mauger Newsgroups: gmane.emacs.devel Subject: Re: Proposal: emacsclient --readonly Date: Sat, 23 Mar 2013 20:45:55 -0700 (PDT) Message-ID: <1364096755.243.YahooMailNeo@web160903.mail.bf1.yahoo.com> References: <87y5dqafcy.fsf@michael-laptop.hsd1.ma.comcast.net> Reply-To: Michael Mauger NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="980202461-1154982833-1364096755=:243" X-Trace: ger.gmane.org 1364096767 17019 80.91.229.3 (24 Mar 2013 03:46:07 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sun, 24 Mar 2013 03:46:07 +0000 (UTC) Cc: "emacs-devel@gnu.org" To: Stefan Monnier Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sun Mar 24 04:46:33 2013 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1UJbt8-0002aX-8o for ged-emacs-devel@m.gmane.org; Sun, 24 Mar 2013 04:46:30 +0100 Original-Received: from localhost ([::1]:54931 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UJbsk-0002my-Ly for ged-emacs-devel@m.gmane.org; Sat, 23 Mar 2013 23:46:06 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:33177) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UJbse-0002mc-3P for emacs-devel@gnu.org; Sat, 23 Mar 2013 23:46:02 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UJbsb-0002cw-4C for emacs-devel@gnu.org; Sat, 23 Mar 2013 23:46:00 -0400 Original-Received: from nm35-vm5.bullet.mail.bf1.yahoo.com ([72.30.238.77]:24464) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UJbsa-0002cm-HO for emacs-devel@gnu.org; Sat, 23 Mar 2013 23:45:57 -0400 Original-Received: from [98.139.212.148] by nm35.bullet.mail.bf1.yahoo.com with NNFMP; 24 Mar 2013 03:45:55 -0000 Original-Received: from [98.139.215.230] by tm5.bullet.mail.bf1.yahoo.com with NNFMP; 24 Mar 2013 03:45:55 -0000 Original-Received: from [127.0.0.1] by omp1070.mail.bf1.yahoo.com with NNFMP; 24 Mar 2013 03:45:55 -0000 X-Yahoo-Newman-Property: ymail-3 X-Yahoo-Newman-Id: 310014.83911.bm@omp1070.mail.bf1.yahoo.com Original-Received: (qmail 8737 invoked by uid 60001); 24 Mar 2013 03:45:55 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s1024; t=1364096755; bh=pf9vwuNKq5VRsTuV6i1LCuZLorkdYvGaBE/oLJtyfLQ=; h=X-YMail-OSG:Received:X-Rocket-MIMEInfo:X-RocketYMMF:X-Mailer:References:Message-ID:Date:From:Reply-To:Subject:To:Cc:In-Reply-To:MIME-Version:Content-Type; b=CyYndbMGK8Koez9cmihYZwvtc81dvHdsYkhI0CnIYxJyPVV32x7DhMo8Hy+RgF+pKptcZ80iPZ1VzZJ+ymApjh+xbF/HJ0icdgPS1n3pWgqPbxZnrtdb+ig/1f2m9lMXppKd9J731q6TkxA2k2zFcG8qbMFOlU919jGJR9fYSvA= DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com; h=X-YMail-OSG:Received:X-Rocket-MIMEInfo:X-RocketYMMF:X-Mailer:References:Message-ID:Date:From:Reply-To:Subject:To:Cc:In-Reply-To:MIME-Version:Content-Type; b=otTiS9PeBs95IlustbW4zPt84th9hfOb3krJs7NW0tx2q+8spDp0RMKybLZ9sXVc9fwI9D+jInGkzc/1xOmuh73MI2IO02HUuAeh/hpFQZ+lP9aHBci+BFl/65wF0nobxRuxQQMqsb/xOrpG7auXaihgC6rl/IreEJY5MFFyjkU=; X-YMail-OSG: HHaPXOgVM1nFep2EkULhrqBgG7ivHTfPgfYYlAOiQ5OnDxD iY__gBi5be1Ae7V.JLwSDT5xcglQa0UHcnG60kc994VU4bGfvsIrFt9az820 l3p9zV_dlQ4wwX.bDGhu8rbBbCa562QcSnAl2j8i4ZNrzLKwXFbbmLRHftde Bx97Vot0bHbL7xvdHN3Wu30jaAEJAiDu6tdJnbCT48bVYLvb7Bxuhn8Nv2oB QOYXsqrVta.QkqhKwAuJh..cGVGC5Q6L0.2NaMmD.kGk2ETtC4zCS3wN3XTc woUg5mosZogDoOWePpBjqHILAnq7Nw08uex0InJSJtoZJgr3wyicqq0Bga44 .5gJmLb.hxzwF6FZxjvpaKj6QxBCE.RR8AG2odjEN.iZ2aX2sYIficKjpKAE xLUrBilY1SFoFnOIYjCz4mxKqK6Stxyx_FQdXkMlYTGMhZ5DfDIVUarMkmj4 wz6bTZNEV3r6B6jeyrRTSD6Z92C7NLMPKd0N6ILDDCMSfop5543n9HvYFKxB FlAZXUniKPj18IAGxA.5vQJUi.eAWajVnK_pZR8yGVanvSSS6sjViQI5O6AD hoICjdoerXiQnC.729Az.vtI9fO_SSe9J.d21DTJsctJJd1LzGyQt3CWA2zW .WAOvVqtA705Peu.WVZY0.cD1jUtA.LoHKl34D8h04BWXHg-- Original-Received: from [98.216.52.54] by web160903.mail.bf1.yahoo.com via HTTP; Sat, 23 Mar 2013 20:45:55 PDT X-Rocket-MIMEInfo: 002.001, W0kgZ290IGEgbWVzc2FnZSB0aGlzIGJvdW5jZWQgb24gdGhlIG1haWxpbmcgbGlzdCwgdHdpY2U7IHRyeWluZyBhZ2Fpbi4KU29ycnkgaWYgdGhpcyBpcyBhIGR1cGUuCgpJJ3ZlIHBvbGlzaGVkIHRoZSB0ZXh0IGFuZCB0aGUgY29kZSBiaXQ7IGl0IHdhcyBvcmlnaW5hbGx5IHNlbnQgd2hpbGUgSQp3YXMgYXR0ZW5kaW5nIExpYnJlUGxhbmV0Ll0KCj4gPiBJJ2QgYmUgaW50ZXJlc3RlZCBpbiBhbnkgc3VnZ2VzdGlvbnMgcGVvcGxlIGhhdmUgb24gaG93IHRvIGFjY29tcGxpc2gKPiA.IHRoaXMgdXNpbmcgZW0BMAEBAQE- X-RocketYMMF: mmaug X-Mailer: YahooMailWebService/0.8.138.524 In-Reply-To: X-detected-operating-system: by eggs.gnu.org: FreeBSD 8.x X-Received-From: 72.30.238.77 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:158100 Archived-At: --980202461-1154982833-1364096755=:243 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable [I got a message this bounced on the mailing list, twice; trying again.=0AS= orry if this is a dupe.=0A=0AI've polished the text and the code bit; it wa= s originally sent while I=0Awas attending LibrePlanet.]=0A=0A> > I'd be int= erested in any suggestions people have on how to accomplish=0A> > this usin= g emacsclient currently.=A0 In the absence of any ideas, I'd like=0A> > to = propose the folowing patch which adds a `--readonly,-r' option to=0A> > ema= csclient (and server.el) (I had originally called it --view-mode,-v but=0A>= > getopt_long_only complained that it was ambiguous if abbreviated.)=0A>= =0A> I think the way to do it is to change emacsclient.c so that any "--foo= "=0A> arg simply gets sent to server.el.=A0 This way the addition of --read= only=0A>=0A> support can be implemented all in server.el.=A0 Then server.el= should be=0A> changed to provide a hook that lets user add handling for th= eir=0A> own --foo args so that you can even do it without changing server.e= l.=0A>=0A>=A0=A0=A0=A0=A0=A0=A0 Stefan=0A=0AAdding a feature to allow custo= m options in emacsclient is an idea that=0AI've had in the past and failed = at implementing it in the past miserably=0Abecause I came up with too many = complex situations.=A0 So I've spent the=0Alast week or so trying again.=A0= I've been through several iterations and=0Ahave reduced it to this simplif= ied solution.=A0 The code is still a=0Alittle rough, but the idea is stable= .=A0 The doc strings probably need=0Alots of work...=0A=0ABasically, there = are two variables used to control the parsing and=0Aprocessing of custom em= acsclient options:=0A=0Aserver-custom-option-functions:=0A=A0 A list of fun= ctions to handle custom options.=0A=0A=A0 The functions accept four argumen= ts: a buffer, a process, the option=0A=A0 string and the option value.=A0 I= f this variable is nil, then no options=0A=A0 are accepted, regardless of t= he setting of=0A=A0 `server-custom-option-list'.=A0 The functions on this h= ook variable are=0A=A0 called once before files or expressions are processe= d with the buffer=0A=A0 set to nil.=A0 After each file is opened, the hooks= will be called=0A=A0 again, this time with the file buffer passed as the f= irst argument.=0A=0Aserver-custom-option-list:=0A=A0 A list that defines th= e acceptable custom options.=0A=0A=A0 If this variable is nil, all unrecogn= ized options are assumed to be=0A=A0 valid custom options.=A0 If this varia= ble is a list then each element=0A=A0 defines an acceptable option.=A0 Each= list entry should be either a=0A=A0 string with the option name that does = not accept a value, or a list=0A=A0 whose first entry is a string containin= g the option name and the=0A=A0 optional second entry is a type predicate.= =A0 If the type predicate is=0A=A0 `string-only', then the option value is = simply treated as a string;=0A=A0 any other predicate forces the value to b= e interpreted by the elisp=0A=A0 reader and passed to the predicate to vali= date it's value.=0A=0A=0ASo, in my user-init-file, I have:=0A=0A=A0 (defun = my-server-custom-options (buf proc option value)=0A=A0=A0=A0 (if buf=A0 ;; = options processed for each file opened=0A=A0=A0=A0=A0=A0=A0=A0 (pcase optio= n=0A=A0=A0=A0=A0=A0=A0=A0=A0=A0 (`"readonly"=0A=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0 (view-mode +1)=0A=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 (when (and view-mode se= rver-buffer-clients)=A0 ;; not nowait=0A=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0 (setq-local view-exit-action 'server-buffer-done)))=0A=A0=A0=A0=A0=A0= =A0=A0=A0=A0 (t nil))=0A=0A=A0=A0=A0=A0=A0 (pcase option ;; global options= =0A=A0=A0=A0=A0=A0=A0=A0 (`"banner"=A0 ;; display banner value=0A=A0=A0=A0= =A0=A0=A0=A0=A0 (cond=0A=A0=A0=A0=A0=A0=A0=A0=A0=A0 ((executable-find "figl= et")=0A=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 (call-process-shell-command "figlet" = nil=0A=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 "*Banner*" t value))=0A=A0=A0= =A0=A0=A0=A0=A0=A0=A0 ((executable-find "banner")=0A=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0 (call-process-shell-command "banner" nil=0A=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0 "*Banner*" t value))=0A=A0=A0=A0=A0=A0=A0=A0=A0=A0 (t (p= rogn=0A=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 (get-buffer-create "*Bann= er*")=0A=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 (with-current-buffer "*B= anner*"=0A=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 (insert (propert= ize value 'face=0A=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 'font-lock-warning-face= ))))))=0A=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 (display-buffer "*Banner*"))= =0A=A0=A0=A0=A0=A0=A0=A0=A0 (t nil))))=0A=0A=A0 ;; define option syntax=0A= =A0 (setq server-custom-option-list=0A=A0=A0=A0=A0=A0=A0=A0 '("readonly"=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 ;; --readonly=0A=A0=A0=A0=A0=A0= =A0=A0=A0=A0 ("banner" string-only)))=A0 ;; --banner=3Dtext=0A=0A=A0 ;; Pro= cess options=0A=A0 (add-hook 'server-custom-option-functions 'my-server-cus= tom-options)=0A=0AIn the end, the changes were pretty small and localized.= =A0 I have not=0Atested it that hard, so it's not difficult to break.=0A=0A= --=0AMichael R. Mauger=A0=A0=A0=A0=A0=A0 FSF Member #4247=A0=A0=A0=A0=A0=A0= Emacs sql.el Maintainer=0Amichael # mauger com=A0=A0=A0=A0 mmaug # member = fsf org=A0=A0=A0=A0 mmaug # yahoo com --980202461-1154982833-1364096755=:243 Content-Type: text/x-patch; name="custom-option.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="custom-option.diff" KioqIHRydW5rL2xpYi1zcmMvZW1hY3NjbGllbnQuYwkyMDEzLTAzLTEzIDE5 OjQ4OjAwLjAxNzkxOTAwMCAtMDQwMAotLS0gbXktd29yay9saWItc3JjL2Vt YWNzY2xpZW50LmMJMjAxMy0wMy0yMyAyMTo0Nzo1My4wNjU0MDI3ODMgLTA0 MDAKKioqKioqKioqKioqKioqCioqKiAxNjMsMTY4ICoqKioKLS0tIDE2Mywx NzMgLS0tLQogIC8qIFBJRCBvZiB0aGUgRW1hY3Mgc2VydmVyIHByb2Nlc3Mu ICAqLwogIGludCBlbWFjc19waWQgPSAwOwoKKyAvKiBDdXN0b20gb3B0aW9u cyAqLworICNkZWZpbmUgTUFYX0NVU1RPTV9PUFRJT05TICgzMikKKyBjb25z dCBjaGFyICpjdXN0b21fb3B0aW9uc1tNQVhfQ1VTVE9NX09QVElPTlNdOwor IGludCBjdXN0b3B0cyA9IDA7CisKICAvKiBJZiBub24tTlVMTCwgYSBzdHJp bmcgdGhhdCBzaG91bGQgZm9ybSBhIGZyYW1lIHBhcmFtZXRlciBhbGlzdCB0 bwogICAgIGJlIHVzZWQgZm9yIHRoZSBuZXcgZnJhbWUgKi8KICBjb25zdCBj aGFyICpmcmFtZV9wYXJhbWV0ZXJzID0gTlVMTDsKKioqKioqKioqKioqKioq CioqKiA0NzMsNDc4ICoqKioKLS0tIDQ3OCw0ODQgLS0tLQogIHsKICAgIGFs dGVybmF0ZV9lZGl0b3IgPSBlZ2V0ZW52ICgiQUxURVJOQVRFX0VESVRPUiIp OwoKKyAgIG9wdGVyciA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIGRvbid0 IGRpc3BsYXkgYW4gZXJyb3IgKi8KICAgIHdoaWxlICgxKQogICAgICB7CiAg ICAgICAgaW50IG9wdCA9IGdldG9wdF9sb25nX29ubHkgKGFyZ2MsIGFyZ3Ys CioqKioqKioqKioqKioqKgoqKiogNTU0LDU1OSAqKioqCi0tLSA1NjAsNTc0 IC0tLS0KICAgICAgICAgICAgZnJhbWVfcGFyYW1ldGVycyA9IG9wdGFyZzsK ICAgICAgICAgICAgYnJlYWs7CgorICAgICAgICAgY2FzZSAnPyc6CisgICAg ICAgICAgIGlmIChjdXN0b3B0cyA8IE1BWF9DVVNUT01fT1BUSU9OUykKKyAg ICAgICAgICAgICBjdXN0b21fb3B0aW9ucyBbY3VzdG9wdHMrK10gPSBhcmd2 W29wdGluZC0xXTsKKworICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg bWVzc2FnZSAoVFJVRSwgIiVzOiB0b28gbWFueSBjdXN0b20gb3B0aW9uczog JXNcbiIsIHByb2duYW1lLCBhcmd2W29wdGluZC0xXSk7CisKKyAgICAgICAg ICAgYnJlYWs7CisKICAJZGVmYXVsdDoKICAJICBtZXNzYWdlIChUUlVFLCAi VHJ5IGAlcyAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uXG4iLCBwcm9n bmFtZSk7CiAgCSAgZXhpdCAoRVhJVF9GQUlMVVJFKTsKKioqKioqKioqKioq KioqCioqKiA2NjAsNjY2ICoqKioKICAiCQkJSWYgRURJVE9SIGlzIHRoZSBl bXB0eSBzdHJpbmcsIHN0YXJ0IEVtYWNzIGluIGRhZW1vblxuXAogIAkJCW1v ZGUgYW5kIHRyeSBjb25uZWN0aW5nIGFnYWluXG4iCiAgI2VuZGlmIC8qIG5v dCBXSU5ET1dTTlQgKi8KISAiXG5cCiAgUmVwb3J0IGJ1Z3Mgd2l0aCBNLXgg cmVwb3J0LWVtYWNzLWJ1Zy5cbiIsIHByb2duYW1lKTsKICAgIGV4aXQgKEVY SVRfU1VDQ0VTUyk7CiAgfQotLS0gNjc1LDY4NiAtLS0tCiAgIgkJCUlmIEVE SVRPUiBpcyB0aGUgZW1wdHkgc3RyaW5nLCBzdGFydCBFbWFjcyBpbiBkYWVt b25cblwKICAJCQltb2RlIGFuZCB0cnkgY29ubmVjdGluZyBhZ2FpblxuIgog ICNlbmRpZiAvKiBub3QgV0lORE9XU05UICovCiEgIi0tWFhYCQkJQ3VzdG9t IG9wdGlvbiBYWFhcblwKISAtLVhYWD1ZWVkJCUN1c3RvbSBvcHRpb24gWFhY IHdpdGggdmFsdWUgWVlZXG5cCiEgCQkJU2VlIGBzZXJ2ZXItY3VzdG9tLW9w dGlvbi1saXN0JyBhbmQKISAgICAgICAgICAgICAgICAgICAgICAgICBgc2Vy dmVyLWN1c3RvbS1vcHRpb24tZnVuY3Rpb25zJyB0byBzZXR1cCBcblwKISAg ICAgICAgICAgICAgICAgICAgICAgICBjdXN0b20gb3B0aW9uc1xuXAohIFxu XAogIFJlcG9ydCBidWdzIHdpdGggTS14IHJlcG9ydC1lbWFjcy1idWcuXG4i LCBwcm9nbmFtZSk7CiAgICBleGl0IChFWElUX1NVQ0NFU1MpOwogIH0KKioq KioqKioqKioqKioqCioqKiAxNTQ5LDE1NTUgKioqKgogICAgLyogUHJvY2Vz cyBvcHRpb25zLiAgKi8KICAgIGRlY29kZV9vcHRpb25zIChhcmdjLCBhcmd2 KTsKCiEgICBpZiAoKGFyZ2MgLSBvcHRpbmQgPCAxKSAmJiAhZXZhbCAmJiBj dXJyZW50X2ZyYW1lKQogICAgICB7CiAgICAgICAgbWVzc2FnZSAoVFJVRSwg IiVzOiBmaWxlIG5hbWUgb3IgYXJndW1lbnQgcmVxdWlyZWRcbiIKICAJICAg ICAgICJUcnkgYCVzIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb25cbiIs Ci0tLSAxNTY5LDE1NzUgLS0tLQogICAgLyogUHJvY2VzcyBvcHRpb25zLiAg Ki8KICAgIGRlY29kZV9vcHRpb25zIChhcmdjLCBhcmd2KTsKCiEgICBpZiAo KGFyZ2MgLSBvcHRpbmQgPCAxKSAmJiAhZXZhbCAmJiAhY3VzdG9wdHMgJiYg Y3VycmVudF9mcmFtZSkKICAgICAgewogICAgICAgIG1lc3NhZ2UgKFRSVUUs ICIlczogZmlsZSBuYW1lIG9yIGFyZ3VtZW50IHJlcXVpcmVkXG4iCiAgCSAg ICAgICAiVHJ5IGAlcyAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uXG4i LAoqKioqKioqKioqKioqKioKKioqIDE2NTEsMTY1NiAqKioqCi0tLSAxNjcx LDE2OTMgLS0tLQogICAgaWYgKCFjdXJyZW50X2ZyYW1lICYmICF0dHkpCiAg ICAgIHNlbmRfdG9fZW1hY3MgKGVtYWNzX3NvY2tldCwgIi13aW5kb3ctc3lz dGVtICIpOwoKKyAgIGlmIChjdXN0b3B0cykKKyAgICAgeworICAgICAgIGlu dCBpOworICAgICAgIGNvbnN0IGNoYXIgKm9wdDsKKyAgICAgICBmb3IgKGkg PSAwOyBpIDwgY3VzdG9wdHM7ICsraSkKKyAgICAgICAgIHsKKyAgICAgICAg ICAgLyogU2tpcCBsZWFkaW5nIGh5cGhlbnMgKi8KKyAgICAgICAgICAgZm9y IChvcHQgPSBjdXN0b21fb3B0aW9uc1tpXTsgKm9wdCA9PSAnLSc7ICsrb3B0 KQorICAgICAgICAgICAgIDsKKworICAgICAgICAgICAvKiBTZW5kIGN1c3Rv bSBvcHRpb25zIHRvIHRoZSBzZXJ2ZXIgKi8KKyAgICAgICAgICAgc2VuZF90 b19lbWFjcyAoZW1hY3Nfc29ja2V0LCAiLWN1c3RvbSAiKTsKKyAgICAgICAg ICAgcXVvdGVfYXJndW1lbnQgKGVtYWNzX3NvY2tldCwgb3B0KTsKKyAgICAg ICAgICAgc2VuZF90b19lbWFjcyAoZW1hY3Nfc29ja2V0LCAiICIpOworICAg ICAgICAgfQorICAgICB9CisKICAgIGlmICgoYXJnYyAtIG9wdGluZCA+IDAp KQogICAgICB7CiAgICAgICAgaW50IGk7CioqKiB0cnVuay9saXNwL3NlcnZl ci5lbAkyMDEzLTAzLTAyIDIyOjM2OjMzLjMwOTE0NDAwMCAtMDUwMAotLS0g bXktd29yay9saXNwL3NlcnZlci5lbAkyMDEzLTAzLTIzIDIxOjAyOjIyLjA5 MDQxMzI3NCAtMDQwMAoqKioqKioqKioqKioqKioKKioqIDI2MiwyNjcgKioq KgotLS0gMjYyLDMwMiAtLS0tCiAgICA6dHlwZSAnc3RyaW5nCiAgICA6dmVy c2lvbiAiMjMuMSIpCgorIDs7IEN1c3RvbSBvcHRpb25zCisgKGRlZmN1c3Rv bSBzZXJ2ZXItY3VzdG9tLW9wdGlvbi1mdW5jdGlvbnMgbmlsCisgICAiQSBs aXN0IG9mIGZ1bmN0aW9ucyB0byBoYW5kbGUgY3VzdG9tIG9wdGlvbnMuCisg VGhlIGZ1bmN0aW9ucyBhY2NlcHQgZm91ciBhcmd1bWVudHM6IGEgYnVmZmVy LCBhIHByb2Nlc3MsIHRoZQorIG9wdGlvbiBzdHJpbmcgYW5kIHRoZSBvcHRp b24gdmFsdWUuICBJZiB0aGlzIHZhcmlhYmxlIGlzIG5pbCwKKyB0aGVuIG5v IG9wdGlvbnMgYXJlIGFjY2VwdGVkLCByZWdhcmRsZXNzIG9mIHRoZSBzZXR0 aW5nIG9mCisgYHNlcnZlci1jdXN0b20tb3B0aW9uLWxpc3QnLiAgVGhlIGZ1 bmN0aW9ucyBvbiB0aGlzIGhvb2sgdmFyaWFibGUKKyBhcmUgY2FsbGVkIG9u Y2UgYmVmb3JlIGZpbGVzIG9yIGV4cHJlc3Npb25zIGFyZSBwcm9jZXNzZWQg d2l0aAorIHRoZSBidWZmZXIgc2V0IHRvIG5pbC4gIEFmdGVyIGVhY2ggZmls ZSBpcyBvcGVuZWQsIHRoZSBob29rcyB3aWxsCisgYmUgY2FsbGVkIGFnYWlu LCB0aGlzIHRpbWUgd2l0aCB0aGUgZmlsZSBidWZmZXIgcGFzc2VkIGFzIHRo ZQorIGZpcnN0IGFyZ3VtZW50LiIKKyAgIDpncm91cCAnc2VydmVyCisgICA6 dHlwZSAnaG9vaworICAgOnZlcnNpb24gIjI0LjQiKQorCisgKGRlZmN1c3Rv bSBzZXJ2ZXItY3VzdG9tLW9wdGlvbi1saXN0IG5pbAorICAgIkEgbGlzdCB0 aGF0IGRlZmluZXMgdGhlIGFjY2VwdGFibGUgY3VzdG9tIG9wdGlvbnMuCisg SWYgdGhpcyB2YXJpYWJsZSBpcyBuaWwsIGFsbCB1bnJlY29nbml6ZWQgb3B0 aW9ucyBhcmUgYXNzdW1lZCB0bworIGJlIHZhbGlkIGN1c3RvbSBvcHRpb25z LiAgSWYgdGhpcyB2YXJpYWJsZSBpcyBhIGxpc3QgdGhlbiBlYWNoCisgZWxl bWVudCBkZWZpbmVzIGFuIGFjY2VwdGFibGUgb3B0aW9uLiAgRWFjaCBsaXN0 IGVudHJ5IHNob3VsZCBiZQorIGVpdGhlciBhIHN0cmluZyB3aXRoIHRoZSBv cHRpb24gbmFtZSB0aGF0IGRvZXMgbm90IGFjY2VwdCBhCisgdmFsdWUsIG9y IGEgbGlzdCB3aG9zZSBmaXJzdCBlbnRyeSBpcyBhIHN0cmluZyBjb250YWlu aW5nIHRoZQorIG9wdGlvbiBuYW1lIGFuZCB0aGUgb3B0aW9uYWwgc2Vjb25k IGVudHJ5IGlzIGEgdHlwZSBwcmVkaWNhdGUuCisgSWYgdGhlIHR5cGUgcHJl ZGljYXRlIGlzIGBzdHJpbmctb25seScsIHRoZW4gdGhlIG9wdGlvbiB2YWx1 ZSBpcworIHNpbXBseSB0cmVhdGVkIGFzIGEgc3RyaW5nOyBhbnkgb3RoZXIg cHJlZGljYXRlIGZvcmNlcyB0aGUgdmFsdWUKKyB0byBiZSBpbnRlcnByZXRl ZCBieSB0aGUgZWxpc3AgcmVhZGVyIGFuZCBwYXNzZWQgdG8gdGhlIHByZWRp Y2F0ZQorIHRvIHZhbGlkYXRlIGl0J3MgdmFsdWUuICIKKyAgIDpncm91cCAn c2VydmVyCisgICA6dHlwZSAnKHJlcGVhdCAoY2hvaWNlIChzdHJpbmcgOnRh ZyAiT3B0aW9uIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3Qg ICA6dGFnICJPcHRpb249UGFyYW1ldGVyIgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChzdHJpbmcgOnRhZyAiT3B0aW9uIikKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hvaWNlIChjb25zdCA6 dGFnICJTdHJpbmctb25seSIgc3RyaW5nLW9ubHkpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gOnRhZyAi UGFyYW1ldGVyIHByZWRpY2F0ZSIpKSkpKQorICAgOnZlcnNpb24gIjI0LjQi KQorCiAgOzsgV2UgZG8gbm90IHVzZSBgdGVtcG9yYXJ5LWZpbGUtZGlyZWN0 b3J5JyBoZXJlLCBiZWNhdXNlIGVtYWNzY2xpZW50CiAgOzsgZG9lcyBub3Qg cmVhZCB0aGUgaW5pdCBmaWxlLgogIChkZWZ2YXIgc2VydmVyLXNvY2tldC1k aXIKKioqKioqKioqKioqKioqCioqKiA5NTUsOTYwICoqKioKLS0tIDk5MCw5 OTggLS0tLQogICAgR28gdG8gdGhlIGdpdmVuIGxpbmUgYW5kIGNvbHVtbiBu dW1iZXIKICAgIGluIHRoZSBuZXh0IGZpbGUgb3BlbmVkLgoKKyBgLWN1c3Rv bSBPUFRJT05bPVBBUk1dCisgICBJbnZva2UgYSBjdXN0b20gb3B0aW9uLgor CiAgYC1maWxlIEZJTEVOQU1FJwogICAgTG9hZCB0aGUgZ2l2ZW4gZmlsZSBp biB0aGUgY3VycmVudCBmcmFtZS4KCioqKioqKioqKioqKioqKgoqKiogMTA1 NSwxMDYwICoqKioKLS0tIDEwOTMsMTA5OSAtLS0tCiAgCQlwYXJlbnQtaWQg IDsgV2luZG93IElEIGZvciBYRW1iZWQKICAJCWRvbnRraWxsICAgOyB0IGlm IGNsaWVudCBzaG91bGQgbm90IGJlIGtpbGxlZC4KICAJCWNvbW1hbmRzCisg CQljdXN0b21zCiAgCQlkaXIKICAJCXVzZS1jdXJyZW50LWZyYW1lCiAgCQlm cmFtZS1wYXJhbWV0ZXJzICA7cGFyYW1ldGVycyBmb3IgbmV3bHkgY3JlYXRl ZCBmcmFtZQoqKioqKioqKioqKioqKioKKioqIDExNTcsMTE2MiAqKioqCi0t LSAxMTk2LDEyMTUgLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoc3RyaW5nLXRvLW51bWJlciAob3IgKG1hdGNoLXN0cmluZyAyIGFy ZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICIiKSkpKSkpCgorICAgICAgICAgICAgICAgICA7OyAt Y3VzdG9tIE9QVElPTls9UEFSTV0KKyAgICAgICAgICAgICAgICAgOzsgIGlu dm9rZSBjdXN0b20gbGlzcCBjb2RlCisgICAgICAgICAgICAgICAgIChgIi1j dXN0b20iCisgICAgICAgICAgICAgICAgICAobGV0ICgob3B0aW9uIChwb3Ag YXJncy1sZWZ0KSkpCisgICAgICAgICAgICAgICAgICAgIChpZiAobm90IHNl cnZlci1jdXN0b20tb3B0aW9uLWZ1bmN0aW9ucykKKyAgICAgICAgICAgICAg ICAgICAgICAgIChlcnJvciAiQ3VzdG9tIG9wdGlvbnMgYXJlIG5vdCBhY2Nl cHRlZCAtLSVzIiBvcHRpb24pCisKKyAgICAgICAgICAgICAgICAgICAgICAo aWYgY29kaW5nLXN5c3RlbQorICAgICAgICAgICAgICAgICAgICAgICAgICAo c2V0cSBvcHRpb24gKGRlY29kZS1jb2Rpbmctc3RyaW5nIG9wdGlvbiBjb2Rp bmctc3lzdGVtKSkpCisgICAgICAgICAgICAgICAgICAgICAgKHNlcnZlci1s b2cgKGZvcm1hdCAiQ3VzdG9tOiAlcyIgb3B0aW9uKSBwcm9jKQorCisgICAg ICAgICAgICAgICAgICAgICAgKHB1c2ggKHNlcnZlci1jdXN0b20tb3B0aW9u LXBhcnNlIG9wdGlvbikgY3VzdG9tcykpKQorICAgICAgICAgICAgICAgICAg ICAoc2V0cSBmaWxlcG9zIG5pbCkpCisKICAgICAgICAgICAgICAgICAgOzsg LWZpbGUgRklMRU5BTUU6ICBMb2FkIHRoZSBnaXZlbiBmaWxlLgogICAgICAg ICAgICAgICAgICAoYCItZmlsZSIKICAgICAgICAgICAgICAgICAgIChsZXQg KChmaWxlIChwb3AgYXJncy1sZWZ0KSkpCioqKioqKioqKioqKioqKgoqKiog MTIzMywxMjM5ICoqKioKICAgICAgICAgICAgICAgICAgIChsZXQgKChkZWZh dWx0LWRpcmVjdG9yeQogICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYg KGFuZCBkaXIgKGZpbGUtZGlyZWN0b3J5LXAgZGlyKSkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRpciBkZWZhdWx0LWRpcmVjdG9yeSkpKQoh ICAgICAgICAgICAgICAgICAgICAoc2VydmVyLWV4ZWN1dGUgcHJvYyBmaWxl cyBub3dhaXQgY29tbWFuZHMKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRvbnRraWxsIGZyYW1lIHR0eS1uYW1lKSkpKSkKCiAgICAg ICAgICAgICAgKHdoZW4gKG9yIGZyYW1lIGZpbGVzKQotLS0gMTI4NiwxMjky IC0tLS0KICAgICAgICAgICAgICAgICAgIChsZXQgKChkZWZhdWx0LWRpcmVj dG9yeQogICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgKGFuZCBkaXIg KGZpbGUtZGlyZWN0b3J5LXAgZGlyKSkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRpciBkZWZhdWx0LWRpcmVjdG9yeSkpKQohICAgICAgICAg ICAgICAgICAgICAoc2VydmVyLWV4ZWN1dGUgcHJvYyBmaWxlcyBub3dhaXQg Y29tbWFuZHMgY3VzdG9tcwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZG9udGtpbGwgZnJhbWUgdHR5LW5hbWUpKSkpKQoKICAgICAg ICAgICAgICAod2hlbiAob3IgZnJhbWUgZmlsZXMpCioqKioqKioqKioqKioq KgoqKiogMTI0MywxMjQ5ICoqKioKICAgICAgOzsgY29uZGl0aW9uLWNhc2UK ICAgICAgKGVycm9yIChzZXJ2ZXItcmV0dXJuLWVycm9yIHByb2MgZXJyKSkp KQoKISAoZGVmdW4gc2VydmVyLWV4ZWN1dGUgKHByb2MgZmlsZXMgbm93YWl0 IGNvbW1hbmRzIGRvbnRraWxsIGZyYW1lIHR0eS1uYW1lKQogICAgOzsgVGhp cyBpcyBydW4gZnJvbSB0aW1lcnMgYW5kIHByb2Nlc3MtZmlsdGVycywgaS5l LiAiYXN5bmNocm9ub3VzbHkiLgogICAgOzsgQnV0IHcuci50IHRoZSB1c2Vy LCB0aGlzIGlzIG5vdCByZWFsbHkgYXN5bmNocm9ub3VzIHNpbmNlIHRoZSB0 aW1lcgogICAgOzsgaXMgcnVuIGFmdGVyIDBzIGFuZCB0aGUgcHJvY2Vzcy1m aWx0ZXIgaXMgcnVuIGluIHJlc3BvbnNlIHRvIHRoZQotLS0gMTI5NiwxMzAy IC0tLS0KICAgICAgOzsgY29uZGl0aW9uLWNhc2UKICAgICAgKGVycm9yIChz ZXJ2ZXItcmV0dXJuLWVycm9yIHByb2MgZXJyKSkpKQoKISAoZGVmdW4gc2Vy dmVyLWV4ZWN1dGUgKHByb2MgZmlsZXMgbm93YWl0IGNvbW1hbmRzIGN1c3Rv bXMgZG9udGtpbGwgZnJhbWUgdHR5LW5hbWUpCiAgICA7OyBUaGlzIGlzIHJ1 biBmcm9tIHRpbWVycyBhbmQgcHJvY2Vzcy1maWx0ZXJzLCBpLmUuICJhc3lu Y2hyb25vdXNseSIuCiAgICA7OyBCdXQgdy5yLnQgdGhlIHVzZXIsIHRoaXMg aXMgbm90IHJlYWxseSBhc3luY2hyb25vdXMgc2luY2UgdGhlIHRpbWVyCiAg ICA7OyBpcyBydW4gYWZ0ZXIgMHMgYW5kIHRoZSBwcm9jZXNzLWZpbHRlciBp cyBydW4gaW4gcmVzcG9uc2UgdG8gdGhlCioqKioqKioqKioqKioqKgoqKiog MTI1MywxMjY1ICoqKioKICAgIDs7IGluY2x1ZGluZyBjb2RlIHRoYXQgbmVl ZHMgdG8gd2FpdC4KICAgICh3aXRoLWxvY2FsLXF1aXQKICAgICAgKGNvbmRp dGlvbi1jYXNlIGVycgohICAgICAgICAgKGxldCAoKGJ1ZmZlcnMgKHNlcnZl ci12aXNpdC1maWxlcyBmaWxlcyBwcm9jIG5vd2FpdCkpKQogICAgICAgICAg ICAobWFwYyAnZnVuY2FsbCAobnJldmVyc2UgY29tbWFuZHMpKQoKICAJICA7 OyBJZiB3ZSB3ZXJlIHRvbGQgb25seSB0byBvcGVuIGEgbmV3IGNsaWVudCwg b2JleQogIAkgIDs7IGBpbml0aWFsLWJ1ZmZlci1jaG9pY2UnIGlmIGl0IHNw ZWNpZmllcyBhIGZpbGUKICAgICAgICAgICAgOzsgb3IgYSBmdW5jdGlvbi4K ISAgICAgICAgICAgKHVubGVzcyAob3IgZmlsZXMgY29tbWFuZHMpCiAgICAg ICAgICAgICAgKGxldCAoKGJ1ZgogICAgICAgICAgICAgICAgICAgICAoY29u ZCAoKHN0cmluZ3AgaW5pdGlhbC1idWZmZXItY2hvaWNlKQogIAkJCSAgKGZp bmQtZmlsZS1ub3NlbGVjdCBpbml0aWFsLWJ1ZmZlci1jaG9pY2UpKQotLS0g MTMwNiwxMzE4IC0tLS0KICAgIDs7IGluY2x1ZGluZyBjb2RlIHRoYXQgbmVl ZHMgdG8gd2FpdC4KICAgICh3aXRoLWxvY2FsLXF1aXQKICAgICAgKGNvbmRp dGlvbi1jYXNlIGVycgohICAgICAgICAgKGxldCAoKGJ1ZmZlcnMgKHNlcnZl ci12aXNpdC1maWxlcyBmaWxlcyBjdXN0b21zIHByb2Mgbm93YWl0KSkpCiAg ICAgICAgICAgIChtYXBjICdmdW5jYWxsIChucmV2ZXJzZSBjb21tYW5kcykp CgogIAkgIDs7IElmIHdlIHdlcmUgdG9sZCBvbmx5IHRvIG9wZW4gYSBuZXcg Y2xpZW50LCBvYmV5CiAgCSAgOzsgYGluaXRpYWwtYnVmZmVyLWNob2ljZScg aWYgaXQgc3BlY2lmaWVzIGEgZmlsZQogICAgICAgICAgICA7OyBvciBhIGZ1 bmN0aW9uLgohICAgICAgICAgICAodW5sZXNzIChvciBmaWxlcyBjb21tYW5k cyBjdXN0b21zKQogICAgICAgICAgICAgIChsZXQgKChidWYKICAgICAgICAg ICAgICAgICAgICAgKGNvbmQgKChzdHJpbmdwIGluaXRpYWwtYnVmZmVyLWNo b2ljZSkKICAJCQkgIChmaW5kLWZpbGUtbm9zZWxlY3QgaW5pdGlhbC1idWZm ZXItY2hvaWNlKSkKKioqKioqKioqKioqKioqCioqKiAxMzE5LDEzMzMgKioq KgogICAgICAgICh3aGVuICg+IGNvbHVtbi1udW1iZXIgMCkKICAgICAgICAg IChtb3ZlLXRvLWNvbHVtbiAoMS0gY29sdW1uLW51bWJlcikpKSkpKQoKISAo ZGVmdW4gc2VydmVyLXZpc2l0LWZpbGVzIChmaWxlcyBwcm9jICZvcHRpb25h bCBub3dhaXQpCiAgICAiRmluZCBGSUxFUyBhbmQgcmV0dXJuIGEgbGlzdCBv ZiBidWZmZXJzIGNyZWF0ZWQuCiAgRklMRVMgaXMgYW4gYWxpc3Qgd2hvc2Ug ZWxlbWVudHMgYXJlIChGSUxFTkFNRSAuIEZJTEVQT1MpCiAgd2hlcmUgRklM RVBPUyBjYW4gYmUgbmlsIG9yIGEgcGFpciAoTElORU5VTUJFUiAuIENPTFVN Tk5VTUJFUikuCiAgUFJPQyBpcyB0aGUgY2xpZW50IHRoYXQgcmVxdWVzdGVk IHRoaXMgb3BlcmF0aW9uLgogIE5PV0FJVCBub24tbmlsIG1lYW5zIHRoaXMg Y2xpZW50IGlzIG5vdCB3YWl0aW5nIGZvciB0aGUgcmVzdWx0cywKISBzbyBk b24ndCBtYXJrIHRoZXNlIGJ1ZmZlcnMgc3BlY2lhbGx5LCBqdXN0IHZpc2l0 IHRoZW0gbm9ybWFsbHkuIgogICAgOzsgQmluZCBsYXN0LW5vbm1lbnUtZXZl bnQgdG8gZm9yY2UgdXNlIG9mIGtleWJvYXJkLCBub3QgbW91c2UsIGZvciBx dWVyaWVzLgogICAgKGxldCAoKGxhc3Qtbm9ubWVudS1ldmVudCB0KSBjbGll bnQtcmVjb3JkKQogICAgICA7OyBSZXN0b3JlIHRoZSBjdXJyZW50IGJ1ZmZl ciBhZnRlcndhcmQsIGJ1dCBub3QgdXNpbmcgc2F2ZS1leGN1cnNpb24sCiAg ICAgIDs7IGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBzYXZlIHBvaW50IGlu IHRoaXMgYnVmZmVyCiAgICAgIDs7IGlmIGl0IGhhcHBlbnMgdG8gYmUgb25l IG9mIHRob3NlIHNwZWNpZmllZCBieSB0aGUgc2VydmVyLgotLS0gMTM3Miwx MzkxIC0tLS0KICAgICAgICAod2hlbiAoPiBjb2x1bW4tbnVtYmVyIDApCiAg ICAgICAgICAobW92ZS10by1jb2x1bW4gKDEtIGNvbHVtbi1udW1iZXIpKSkp KSkKCiEgKGRlZnVuIHNlcnZlci12aXNpdC1maWxlcyAoZmlsZXMgY3VzdG9t cyBwcm9jICZvcHRpb25hbCBub3dhaXQpCiAgICAiRmluZCBGSUxFUyBhbmQg cmV0dXJuIGEgbGlzdCBvZiBidWZmZXJzIGNyZWF0ZWQuCiAgRklMRVMgaXMg YW4gYWxpc3Qgd2hvc2UgZWxlbWVudHMgYXJlIChGSUxFTkFNRSAuIEZJTEVQ T1MpCiAgd2hlcmUgRklMRVBPUyBjYW4gYmUgbmlsIG9yIGEgcGFpciAoTElO RU5VTUJFUiAuIENPTFVNTk5VTUJFUikuCiAgUFJPQyBpcyB0aGUgY2xpZW50 IHRoYXQgcmVxdWVzdGVkIHRoaXMgb3BlcmF0aW9uLgogIE5PV0FJVCBub24t bmlsIG1lYW5zIHRoaXMgY2xpZW50IGlzIG5vdCB3YWl0aW5nIGZvciB0aGUg cmVzdWx0cywKISBzbyBkb24ndCBtYXJrIHRoZXNlIGJ1ZmZlcnMgc3BlY2lh bGx5LCBqdXN0IHZpc2l0IHRoZW0gbm9ybWFsbHkuCiEKISBDVVNUT01TIGFy ZSBydW4gd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBidWZmZXIgb2YgdGhl IG9wZW5lZAohIGZpbGUuIgogICAgOzsgQmluZCBsYXN0LW5vbm1lbnUtZXZl bnQgdG8gZm9yY2UgdXNlIG9mIGtleWJvYXJkLCBub3QgbW91c2UsIGZvciBx dWVyaWVzLgogICAgKGxldCAoKGxhc3Qtbm9ubWVudS1ldmVudCB0KSBjbGll bnQtcmVjb3JkKQorICAgICA7OyBJbnZva2UgY3VzdG9tIG9wdGlvbnMgYXQg dGhlIHByb2Nlc3MgbGV2ZWwKKyAgICAgKHNlcnZlci1jdXN0b20tb3B0aW9u LWNhbGwgbmlsIHByb2MgY3VzdG9tcykKICAgICAgOzsgUmVzdG9yZSB0aGUg Y3VycmVudCBidWZmZXIgYWZ0ZXJ3YXJkLCBidXQgbm90IHVzaW5nIHNhdmUt ZXhjdXJzaW9uLAogICAgICA7OyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8g c2F2ZSBwb2ludCBpbiB0aGlzIGJ1ZmZlcgogICAgICA7OyBpZiBpdCBoYXBw ZW5zIHRvIGJlIG9uZSBvZiB0aG9zZSBzcGVjaWZpZWQgYnkgdGhlIHNlcnZl ci4KKioqKioqKioqKioqKioqCioqKiAxMzY3LDEzNzIgKioqKgotLS0gMTQy NSwxNDM0IC0tLS0KICAJICA7OyBXaGVuIHRoZSBidWZmZXIgaXMga2lsbGVk LCBpbmZvcm0gdGhlIGNsaWVudHMuCiAgCSAgKGFkZC1ob29rICdraWxsLWJ1 ZmZlci1ob29rICdzZXJ2ZXIta2lsbC1idWZmZXIgbmlsIHQpCiAgCSAgKHB1 c2ggcHJvYyBzZXJ2ZXItYnVmZmVyLWNsaWVudHMpKQorICAgICAgICAgOzsg V2FpdCB1bnRpbCBoZXJlIHRvIGludm9rZSBjdXN0b20gb3B0aW9ucyBzbyBh bGwgdGhlIHNlcnZlcgorICAgICAgICAgOzsgcmVsYXRlZCBzdHVmZiBpcyBl c3RhYmxpc2hlZC4gIEJ1dCBkb2luZyB0aGlzIGVhcmxpZXIKKyAgICAgICAg IDs7IGJlZm9yZSBzb21lIGhvb2tzIGNhbiBiZSBqdXN0aWZpZWQgYXMgd2Vs bC4KKyAgICAgICAgIChzZXJ2ZXItY3VzdG9tLW9wdGlvbi1jYWxsIChjdXJy ZW50LWJ1ZmZlcikgcHJvYyBjdXN0b21zKQogIAkocHVzaCAoY3VycmVudC1i dWZmZXIpIGNsaWVudC1yZWNvcmQpKSkKICAgICAgKHVubGVzcyBub3dhaXQK ICAgICAgICAocHJvY2Vzcy1wdXQgcHJvYyAnYnVmZmVycwoqKioqKioqKioq KioqKioKKioqIDE1MTAsMTUxNSAqKioqCi0tLSAxNTcyLDE2NDIgLS0tLQog IAkgICAgICh3aGVuIHNlcnZlci1wcm9jZXNzCiAgCSAgICAgICAoc2VydmVy LWJ1ZmZlci1kb25lIChjdXJyZW50LWJ1ZmZlcikgdCkpKSkpKQogIAwKKyAo ZGVmdW4gc2VydmVyLWN1c3RvbS1vcHRpb24tcGFyc2UtMSAob3B0aW9uIHN2 YWx1ZSBwcmVkKQorICAgOzsgV2UgaGF2ZSBlbmNvdW50ZXJlZCBhbiBPUFRJ T04gd2l0aCBhIHN0cmluZyB2YWx1ZSBTVkFMVUUuICBJZgorICAgOzsgUFJF RCBpcyBub24tbmlsLCB0aGVuIGEgdmFsdWUgaXMgZXhwZWN0ZWQ7IGlmIG5p bCwgdGhlbiBubyB2YWx1ZQorICAgOzsgaXMgYWNjZXB0ZWQuICBJZiBQUkVE IGlzIGBzdHJpbmctb25seSwgdGhlbiB0aGUgVkFMVUUgaXMgbGVmdCBhcwor ICAgOzsgYSBzdHJpbmc7IG90aGVyd2lzZSBWQUxVRSBpcyBydW4gdGhyb3Vn aCB0aGUgZWxpc3AgcGFyc2VyIGFuZAorICAgOzsgY29udmVydGVkIHRvIGVs aXNwIHR5cGVzLiAgSWYgUFJFRCBpcyB0LCB0aGVuIGFueSB2YWx1ZSBpcwor ICAgOzsgYWNjZXB0YWJsZSwgb3RoZXJ3aXNlIHRoZSBQUkVEIGlzIGEgc2lu Z2xlIG9wZXJhbmQgcHJlZGljYXRlIHRvCisgICA7OyB2ZXJpZnkgdGhlIGRh dGEgdHlwZSBvZiB0aGUgcGFyc2VkIHZhbHVlIGlzIGFjY2VwdGFibGUuCisg ICAobGV0ICh2YWx1ZSkKKyAgICAgOzsgV2UgY2FuJ3Qgc3VwcGx5IGEgdmFs dWUgaWYgdGhlcmUgaXMgbm8gcHJlZGljYXRlCisgICAgICh3aGVuIChhbmQg KG5vdCBwcmVkKSBzdmFsdWUpCisgICAgICAgKGVycm9yICJDdXN0b20gb3B0 aW9uIC0tJXMgZG9lcyBub3QgYWNjZXB0IGEgdmFsdWUiIG9wdGlvbikpCisg ICAgIDs7IElzIHRoZXJlIGEgdmFsdWU/CisgICAgIChpZiAob3Igc3ZhbHVl ICg8IDAgKGxlbmd0aCBzdmFsdWUpKSkKKyAgICAgICAgIDs7IFdlIGhhdmUg YSBzdHJpbmcgdmFsdWUsIGlzIHRoYXQgYWxsIHdlIHdhbnQKKyAgICAgICAg IChpZiAoZXEgcHJlZCAnc3RyaW5nLW9ubHkpCisgICAgICAgICAgICAgKGNv bnMgb3B0aW9uIHN2YWx1ZSkKKyAgICAgICAgICAgOzsgV2Ugd2FudCBhIGxp c3AgdmFsdWUsIHBhcnNlIGl0IG1ha2Ugc3VyZSB3ZSBnb3QgaXQgYWxsCisg ICAgICAgICAgIChzZXRxIHZhbHVlIChyZWFkLWZyb20tc3RyaW5nIHN2YWx1 ZSkpCisgICAgICAgICAgICh3aGVuICg+IChsZW5ndGggc3ZhbHVlKSAoY2Ry IHZhbHVlKSkKKyAgICAgICAgICAgICAoZXJyb3IgIkludmFsaWQgY3VzdG9t IG9wdGlvbiB2YWx1ZSAtLSVzPSVzIiBvcHRpb24gc3ZhbHVlKSkKKyAgICAg ICAgICAgKHNldHEgdmFsdWUgKGNhciB2YWx1ZSkpCisgICAgICAgICAgIDs7 IFZhbGlkYXRlIGl0CisgICAgICAgICAgIChpZiAob3IgKGVxIHByZWQgdCkK KyAgICAgICAgICAgICAgICAgICAoZnVuY2FsbCBwcmVkIHZhbHVlKSkKKyAg ICAgICAgICAgICAgIChjb25zIG9wdGlvbiB2YWx1ZSkKKyAgICAgICAgICAg ICAoZXJyb3IgIkN1c3RvbSBvcHRpb24gLS0lcyBleHBlY3RlZCBhKG4pIGAl cycgdmFsdWUsIGdvdCBgJXMnIgorICAgICAgICAgICAgICAgICAgICBvcHRp b24gcHJlZCB2YWx1ZSkpKQorICAgICAgIDs7IFRyZWF0IG5pbCBhbmQgZW1w dHkgc3RyaW5ncyBhcyBhIG5pbCB2YWx1ZQorICAgICAgIChjb25zIG9wdGlv biBuaWwpKSkpCisKKyAoZGVmdW4gc2VydmVyLWN1c3RvbS1vcHRpb24tcGFy c2UgKG9wdGlvbi12YWx1ZSkKKyAgIChsZXQgKG9wdGlvbiBzdmFsdWUgcmVz dWx0KQorICAgICAoaWYgKG5vdCAoc3RyaW5nLW1hdGNoICJcXGBcXChbXj1d K1xcKVxcKD86Wz1dXFwoLipcXClcXCk/XFwnIiBvcHRpb24tdmFsdWUpKQor ICAgICAgICAgKGVycm9yICJJbnZhbGlkIGN1c3RvbSBvcHRpb24gZm9ybWF0 IC0tJXMiIG9wdGlvbi12YWx1ZSkKKyAgICAgICAoc2V0cSBvcHRpb24gKG1h dGNoLXN0cmluZyAxIG9wdGlvbi12YWx1ZSkKKyAgICAgICAgICAgICBzdmFs dWUgKG1hdGNoLXN0cmluZyAyIG9wdGlvbi12YWx1ZSkpCisgICAgICAgOzsg bG9vay11cCB0aGUgb3B0aW9uCisgICAgICAgKGlmIChub3Qgc2VydmVyLWN1 c3RvbS1vcHRpb24tbGlzdCkKKyAgICAgICAgICAgKHNldHEgcmVzdWx0IChj b25zIG9wdGlvbiBzdmFsdWUpKQorICAgICAgICAgKGRvbGlzdCAobyBzZXJ2 ZXItY3VzdG9tLW9wdGlvbi1saXN0KQorICAgICAgICAgICAoY29uZAorICAg ICAgICAgICAgOzsgZGVmbiBpcyBhIHN0cmluZywgZXhwZWN0IG5vIHZhbHVl CisgICAgICAgICAgICAoKGFuZCAoc3RyaW5ncCBvKQorICAgICAgICAgICAg ICAgICAgKHN0cmluZz0gbyBvcHRpb24pKQorICAgICAgICAgICAgIChzZXRx IHJlc3VsdAorICAgICAgICAgICAgICAgICAgIChzZXJ2ZXItY3VzdG9tLW9w dGlvbi1wYXJzZS0xIG9wdGlvbiBzdmFsdWUgbmlsKSkpCisgICAgICAgICAg ICA7OyBkZWZuIGlzIGEgbGlzdCwgZXhwZWN0IGEgdmFsdWUsIHNlY29uZCBl bGVtIGlzIHR5cGUKKyAgICAgICAgICAgICgoYW5kIChjb25zcCBvKQorICAg ICAgICAgICAgICAgICAgKHN0cmluZz0gKGNhciBvKSBvcHRpb24pKQorICAg ICAgICAgICAgIChzZXRxIHJlc3VsdAorICAgICAgICAgICAgICAgICAgIChz ZXJ2ZXItY3VzdG9tLW9wdGlvbi1wYXJzZS0xIG9wdGlvbiBzdmFsdWUgKG9y IChjYWRyIG8pIHQpKSkpKSkpKQorICAgICAoaWYgcmVzdWx0CisgICAgICAg ICByZXN1bHQKKyAgICAgICAoZXJyb3IgIlVucmVjb2duaXplZCBjdXN0b20g b3B0aW9uIC0tJXMiIG9wdGlvbikpKSkKKworIChkZWZ1biBzZXJ2ZXItY3Vz dG9tLW9wdGlvbi1jYWxsIChidWYgcHJvYyBjdXN0b21zKQorICAgKHNlcnZl ci1sb2cgKGZvcm1hdCAic2VydmVyLWN1c3RvbS1vcHRpb24tY2FsbDogYCVz JyIKKyAgICAgICAgICAgICAgICAgICAgICAgKG9yIChidWZmZXItbmFtZSBi dWYpIChwcm9jZXNzLW5hbWUgcHJvYykpKSBwcm9jKQorICAgKHdpdGgtbG9j YWwtcXVpdAorICAgICAoZG9saXN0IChjIGN1c3RvbXMpCisgICAgICAgKHJ1 bi1ob29rLXdpdGgtYXJncyAnc2VydmVyLWN1c3RvbS1vcHRpb24tZnVuY3Rp b25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYgcHJvYyAoY2Fy IGMpIChjZHIgYykpKSkpCisKKyAMCiAgKGRlZnVuIHNlcnZlci1lZGl0ICgm b3B0aW9uYWwgYXJnKQogICAgIlN3aXRjaCB0byBuZXh0IHNlcnZlciBlZGl0 aW5nIGJ1ZmZlcjsgc2F5IFwiRG9uZVwiIGZvciBjdXJyZW50IGJ1ZmZlci4K ICBJZiBhIHNlcnZlciBidWZmZXIgaXMgY3VycmVudCwgaXQgaXMgbWFya2Vk IFwiZG9uZVwiIGFuZCBvcHRpb25hbGx5IHNhdmVkLgo= --980202461-1154982833-1364096755=:243--