From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: ben rudgers Newsgroups: gmane.emacs.devel Subject: Suggested additional example to Emacs Lisp Manual: Variables: Let Date: Tue, 17 Jan 2017 14:17:49 -0600 Message-ID: NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=001a1141e07488010105464ffe4c X-Trace: blaine.gmane.org 1484689596 22882 195.159.176.226 (17 Jan 2017 21:46:36 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Tue, 17 Jan 2017 21:46:36 +0000 (UTC) To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Tue Jan 17 22:46:32 2017 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cTba1-00047A-UK for ged-emacs-devel@m.gmane.org; Tue, 17 Jan 2017 22:46:14 +0100 Original-Received: from localhost ([::1]:37829 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cTba6-000521-LK for ged-emacs-devel@m.gmane.org; Tue, 17 Jan 2017 16:46:18 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:35298) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cTaCW-0007XB-Qm for emacs-devel@gnu.org; Tue, 17 Jan 2017 15:17:54 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cTaCV-0005Pn-6t for emacs-devel@gnu.org; Tue, 17 Jan 2017 15:17:52 -0500 Original-Received: from mail-qt0-x244.google.com ([2607:f8b0:400d:c0d::244]:35660) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1cTaCU-0005PN-SG for emacs-devel@gnu.org; Tue, 17 Jan 2017 15:17:51 -0500 Original-Received: by mail-qt0-x244.google.com with SMTP id f4so24113761qte.2 for ; Tue, 17 Jan 2017 12:17:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=1JUjNTXFb1iDPE6Fn/MbNe30SrFcHk4FU2s1FBcTD/I=; b=VMZC6OdA9lXAQvYEL4zzGbSs++B66wXcClv9TbdBCG+vIqB4sZIIDHRzLKTYUqPedP JRYTNbkHXW7S6Hi6bOHjnmL3BEqQwjvswkCJig3CSA/oxu6j7H1mpROZwv08Bqdvyn/N p6SYwJALNXMRltGjLJaWLopn1EoqDQQ5VR6U5BMPf1qaYtkfuz40Ug8wyYUnhYGx39fW uVJcbZmNmkfoLVrMPagTD3tY4ZbodXs5JUKilzZqsZ9Ohv89vTTUlh1dsV1eDg8PT2Yu KkCZHMLrYIgFn61xJKeegm3zfyXeE29v1nTWj0rZvU8bH3Scq7XfB9a/vYFHqfs3osMv nDHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=1JUjNTXFb1iDPE6Fn/MbNe30SrFcHk4FU2s1FBcTD/I=; b=mR20GzuDTIWmhLtLG4XdsfIeFprXOY+/5vH/5cFrX/60t/gE5JlamheIhOMPUYYeb8 xos2dFgJDCQNszZ+p36byK8Fb8at/UM/J79mY+E0xraBpmRPUpAVzwKKqmuyyVPfc+pD 5esskCZYt7LScw26aM9n1NsTcRtPzuczipRbSox+rc+YONDb6TE3xyMpgcm+BAEbsyUN FwQIQfI4I6iyO1XRGEOS3oW+CGDv5qqwlDR2/sYfXLmS5KaJQqPOY3pACxispKdIKshn oOR+3HzKd+vmoU7ut4Kqdvv+Uu3/I0JctD0pdkwoGRR0wWNHpSygmFQTq8ePOrz/rms2 Aoow== X-Gm-Message-State: AIkVDXJYJsxMYNxXTJteiV9Bfyp9aySoq6+dNZc++561KowiTWOsY71IH8gmY+NTOF/GzI1Vi9N6Io35hPu8gQ== X-Received: by 10.200.40.45 with SMTP id 42mr34260478qtq.89.1484684270220; Tue, 17 Jan 2017 12:17:50 -0800 (PST) Original-Received: by 10.140.97.33 with HTTP; Tue, 17 Jan 2017 12:17:49 -0800 (PST) X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c0d::244 X-Mailman-Approved-At: Tue, 17 Jan 2017 16:46:04 -0500 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:211365 Archived-At: --001a1141e07488010105464ffe4c Content-Type: multipart/alternative; boundary=001a1141e0748800fe05464ffe4a --001a1141e0748800fe05464ffe4a Content-Type: text/plain; charset=UTF-8 I apologize for not entirely following the patch submission process. I'm not sure I understand it fully yet. The manual does not provide an example showing a locally scoped function. Though the behavior can potentially be inferred from the documentation of functions, an example showing the relationship between =let= and =funcall= might be of practical help for someone who has not made a deep dive into the manual. I have appended the following to the documentation for =let= in the attached file: Functions defined within a @code{let} must be invoked using a call to @code{funcall}. @example (defun foo (x) (let ((bar (lambda (y) (+ x y)))) (funcall bar 3))) (foo 4) @result{} 7 @end example The standard internet search engines do not provide a well articulated example at this time. Because locally scoped functions are a common idiom in the Lisp family of languages, it seems likely that an example will be helpful to programmers with experience in other Lisps. =let= seems like the best place to put an example in the documentation. Anyway, thanks for all you have done. If you have any questions or there is anything I can do to help improve the documentation please let me know. --001a1141e0748800fe05464ffe4a Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
I apologize for not entire= ly following the patch submission process. I'm not sure I understand it= fully yet.

The manual does not provide an example showing a locally s= coped function. Though the behavior can potentially be inferred from the do= cumentation of functions, an example showing the relationship between =3Dle= t=3D and =3Dfuncall=3D might be of practical help for someone who has not m= ade a deep dive into the manual.

=
I have appended the following to the = documentation for =3Dlet=3D in the attached file:

Functions defined within a @code{let= } must be invoked using a call to @code{funcall}.

= @example
(defun foo (x)
=C2=A0 (let ((bar (lambda (y) (= + x y))))
=C2=A0 =C2=A0 (funcall bar 3)))
(foo 4)
=
=C2=A0 =C2=A0 =C2=A0@result{} 7
@end example

<= /div>
The standard internet sea= rch engines do not provide a well articulated example at this time. Because= locally scoped functions are a common idiom in the Lisp family of language= s, it seems likely that an example will be helpful to programmers with expe= rience in other Lisps. =3Dlet=3D seems like the best place to put an exampl= e in the documentation.

Anyway, thanks for all you have done. If you ha= ve any questions or there is anything I can do to help improve the document= ation please let me know.
--001a1141e0748800fe05464ffe4a-- --001a1141e07488010105464ffe4c Content-Type: application/x-texinfo; name="variables.texi" Content-Disposition: attachment; filename="variables.texi" Content-Transfer-Encoding: base64 X-Attachment-Id: f_iy1ymoly0 QGMgLSotdGV4aW5mby0qLQpAYyBUaGlzIGlzIHBhcnQgb2YgdGhlIEdOVSBFbWFjcyBMaXNwIFJl ZmVyZW5jZSBNYW51YWwuCkBjIENvcHlyaWdodCAoQykgMTk5MC0xOTk1LCAxOTk4LTIwMTcgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCkBjIFNlZSB0aGUgZmlsZSBlbGlzcC50ZXhpIGZv ciBjb3B5aW5nIGNvbmRpdGlvbnMuCkBub2RlIFZhcmlhYmxlcwpAY2hhcHRlciBWYXJpYWJsZXMK QGNpbmRleCB2YXJpYWJsZQoKICBBIEBkZm57dmFyaWFibGV9IGlzIGEgbmFtZSB1c2VkIGluIGEg cHJvZ3JhbSB0byBzdGFuZCBmb3IgYSB2YWx1ZS4KSW4gTGlzcCwgZWFjaCB2YXJpYWJsZSBpcyBy ZXByZXNlbnRlZCBieSBhIExpc3Agc3ltYm9sCihAcHhyZWZ7U3ltYm9sc30pLiAgVGhlIHZhcmlh YmxlIG5hbWUgaXMgc2ltcGx5IHRoZSBzeW1ib2wncyBuYW1lLCBhbmQKdGhlIHZhcmlhYmxlJ3Mg dmFsdWUgaXMgc3RvcmVkIGluIHRoZSBzeW1ib2wncyB2YWx1ZSBjZWxsQGZvb3Rub3Rle1RvCmJl IHByZWNpc2UsIHVuZGVyIHRoZSBkZWZhdWx0IEBkZm57ZHluYW1pYyBzY29waW5nfSBydWxlLCB0 aGUgdmFsdWUKY2VsbCBhbHdheXMgaG9sZHMgdGhlIHZhcmlhYmxlJ3MgY3VycmVudCB2YWx1ZSwg YnV0IHRoaXMgaXMgbm90IHRoZQpjYXNlIHVuZGVyIHRoZSBAZGZue2xleGljYWwgc2NvcGluZ30g cnVsZS4gIEB4cmVme1ZhcmlhYmxlIFNjb3Bpbmd9LApmb3IgZGV0YWlscy59LiAgQHhyZWZ7U3lt Ym9sIENvbXBvbmVudHN9LiAgSW4gRW1hY3MgTGlzcCwgdGhlIHVzZSBvZiBhCnN5bWJvbCBhcyBh IHZhcmlhYmxlIGlzIGluZGVwZW5kZW50IG9mIGl0cyB1c2UgYXMgYSBmdW5jdGlvbiBuYW1lLgoK ICBBcyBwcmV2aW91c2x5IG5vdGVkIGluIHRoaXMgbWFudWFsLCBhIExpc3AgcHJvZ3JhbSBpcyBy ZXByZXNlbnRlZApwcmltYXJpbHkgYnkgTGlzcCBvYmplY3RzLCBhbmQgb25seSBzZWNvbmRhcmls eSBhcyB0ZXh0LiAgVGhlIHRleHR1YWwKZm9ybSBvZiBhIExpc3AgcHJvZ3JhbSBpcyBnaXZlbiBi eSB0aGUgcmVhZCBzeW50YXggb2YgdGhlIExpc3Agb2JqZWN0cwp0aGF0IGNvbnN0aXR1dGUgdGhl IHByb2dyYW0uICBIZW5jZSwgdGhlIHRleHR1YWwgZm9ybSBvZiBhIHZhcmlhYmxlIGluCmEgTGlz cCBwcm9ncmFtIGlzIHdyaXR0ZW4gdXNpbmcgdGhlIHJlYWQgc3ludGF4IGZvciB0aGUgc3ltYm9s CnJlcHJlc2VudGluZyB0aGUgdmFyaWFibGUuCgpAbWVudQoqIEdsb2JhbCBWYXJpYWJsZXM6OiAg ICAgICAgICAgIFZhcmlhYmxlIHZhbHVlcyB0aGF0IGV4aXN0IHBlcm1hbmVudGx5LCBldmVyeXdo ZXJlLgoqIENvbnN0YW50IFZhcmlhYmxlczo6ICAgICAgICAgIFZhcmlhYmxlcyB0aGF0IG5ldmVy IGNoYW5nZS4KKiBMb2NhbCBWYXJpYWJsZXM6OiAgICAgICAgICAgICBWYXJpYWJsZSB2YWx1ZXMg dGhhdCBleGlzdCBvbmx5IHRlbXBvcmFyaWx5LgoqIFZvaWQgVmFyaWFibGVzOjogICAgICAgICAg ICAgIFN5bWJvbHMgdGhhdCBsYWNrIHZhbHVlcy4KKiBEZWZpbmluZyBWYXJpYWJsZXM6OiAgICAg ICAgICBBIGRlZmluaXRpb24gc2F5cyBhIHN5bWJvbCBpcyB1c2VkIGFzIGEgdmFyaWFibGUuCiog VGlwcyBmb3IgRGVmaW5pbmc6OiAgICAgICAgICAgVGhpbmdzIHlvdSBzaG91bGQgdGhpbmsgYWJv dXQgd2hlbiB5b3UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBhIHZhcmlhYmxl LgoqIEFjY2Vzc2luZyBWYXJpYWJsZXM6OiAgICAgICAgIEV4YW1pbmluZyB2YWx1ZXMgb2YgdmFy aWFibGVzIHdob3NlIG5hbWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUga25vd24g b25seSBhdCBydW4gdGltZS4KKiBTZXR0aW5nIFZhcmlhYmxlczo6ICAgICAgICAgICBTdG9yaW5n IG5ldyB2YWx1ZXMgaW4gdmFyaWFibGVzLgoqIFdhdGNoaW5nIFZhcmlhYmxlczo6ICAgICAgICAg IFJ1bm5pbmcgYSBmdW5jdGlvbiB3aGVuIGEgdmFyaWFibGUgaXMgY2hhbmdlZC4KKiBWYXJpYWJs ZSBTY29waW5nOjogICAgICAgICAgICBIb3cgTGlzcCBjaG9vc2VzIGFtb25nIGxvY2FsIGFuZCBn bG9iYWwgdmFsdWVzLgoqIEJ1ZmZlci1Mb2NhbCBWYXJpYWJsZXM6OiAgICAgIFZhcmlhYmxlIHZh bHVlcyBpbiBlZmZlY3Qgb25seSBpbiBvbmUgYnVmZmVyLgoqIEZpbGUgTG9jYWwgVmFyaWFibGVz OjogICAgICAgIEhhbmRsaW5nIGxvY2FsIHZhcmlhYmxlIGxpc3RzIGluIGZpbGVzLgoqIERpcmVj dG9yeSBMb2NhbCBWYXJpYWJsZXM6OiAgIExvY2FsIHZhcmlhYmxlcyBjb21tb24gdG8gYWxsIGZp bGVzIGluIGEgZGlyZWN0b3J5LgoqIENvbm5lY3Rpb24gTG9jYWwgVmFyaWFibGVzOjogIExvY2Fs IHZhcmlhYmxlcyBjb21tb24gZm9yIHJlbW90ZSBjb25uZWN0aW9ucy4KKiBWYXJpYWJsZSBBbGlh c2VzOjogICAgICAgICAgICBWYXJpYWJsZXMgdGhhdCBhcmUgYWxpYXNlcyBmb3Igb3RoZXIgdmFy aWFibGVzLgoqIFZhcmlhYmxlcyB3aXRoIFJlc3RyaWN0ZWQgVmFsdWVzOjogIE5vbi1jb25zdGFu dCB2YXJpYWJsZXMgd2hvc2UgdmFsdWUgY2FuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBAZW1waHtub3R9IGJlIGFuIGFyYml0cmFyeSBMaXNwIG9iamVjdC4KKiBHZW5l cmFsaXplZCBWYXJpYWJsZXM6OiAgICAgICBFeHRlbmRpbmcgdGhlIGNvbmNlcHQgb2YgdmFyaWFi bGVzLgpAZW5kIG1lbnUKCkBub2RlIEdsb2JhbCBWYXJpYWJsZXMKQHNlY3Rpb24gR2xvYmFsIFZh cmlhYmxlcwpAY2luZGV4IGdsb2JhbCB2YXJpYWJsZQoKICBUaGUgc2ltcGxlc3Qgd2F5IHRvIHVz ZSBhIHZhcmlhYmxlIGlzIEBkZm57Z2xvYmFsbHl9LiAgVGhpcyBtZWFucyB0aGF0CnRoZSB2YXJp YWJsZSBoYXMganVzdCBvbmUgdmFsdWUgYXQgYSB0aW1lLCBhbmQgdGhpcyB2YWx1ZSBpcyBpbiBl ZmZlY3QKKGF0IGxlYXN0IGZvciB0aGUgbW9tZW50KSB0aHJvdWdob3V0IHRoZSBMaXNwIHN5c3Rl bS4gIFRoZSB2YWx1ZSByZW1haW5zCmluIGVmZmVjdCB1bnRpbCB5b3Ugc3BlY2lmeSBhIG5ldyBv bmUuICBXaGVuIGEgbmV3IHZhbHVlIHJlcGxhY2VzIHRoZQpvbGQgb25lLCBubyB0cmFjZSBvZiB0 aGUgb2xkIHZhbHVlIHJlbWFpbnMgaW4gdGhlIHZhcmlhYmxlLgoKICBZb3Ugc3BlY2lmeSBhIHZh bHVlIGZvciBhIHN5bWJvbCB3aXRoIEBjb2Rle3NldHF9LiAgRm9yIGV4YW1wbGUsCgpAZXhhbXBs ZQooc2V0cSB4ICcoYSBiKSkKQGVuZCBleGFtcGxlCgpAbm9pbmRlbnQKZ2l2ZXMgdGhlIHZhcmlh YmxlIEBjb2Rle3h9IHRoZSB2YWx1ZSBAY29kZXsoYSBiKX0uICBOb3RlIHRoYXQKQGNvZGV7c2V0 cX0gaXMgYSBzcGVjaWFsIGZvcm0gKEBweHJlZntTcGVjaWFsIEZvcm1zfSk7IGl0IGRvZXMgbm90 CmV2YWx1YXRlIGl0cyBmaXJzdCBhcmd1bWVudCwgdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlLCBi dXQgaXQgZG9lcwpldmFsdWF0ZSB0aGUgc2Vjb25kIGFyZ3VtZW50LCB0aGUgbmV3IHZhbHVlLgoK ICBPbmNlIHRoZSB2YXJpYWJsZSBoYXMgYSB2YWx1ZSwgeW91IGNhbiByZWZlciB0byBpdCBieSB1 c2luZyB0aGUKc3ltYm9sIGl0c2VsZiBhcyBhbiBleHByZXNzaW9uLiAgVGh1cywKCkBleGFtcGxl CkBncm91cAp4IEByZXN1bHR7fSAoYSBiKQpAZW5kIGdyb3VwCkBlbmQgZXhhbXBsZQoKQG5vaW5k ZW50CmFzc3VtaW5nIHRoZSBAY29kZXtzZXRxfSBmb3JtIHNob3duIGFib3ZlIGhhcyBhbHJlYWR5 IGJlZW4gZXhlY3V0ZWQuCgogIElmIHlvdSBkbyBzZXQgdGhlIHNhbWUgdmFyaWFibGUgYWdhaW4s IHRoZSBuZXcgdmFsdWUgcmVwbGFjZXMgdGhlIG9sZApvbmU6CgpAZXhhbXBsZQpAZ3JvdXAKeAog ICAgIEByZXN1bHR7fSAoYSBiKQpAZW5kIGdyb3VwCkBncm91cAooc2V0cSB4IDQpCiAgICAgQHJl c3VsdHt9IDQKQGVuZCBncm91cApAZ3JvdXAKeAogICAgIEByZXN1bHR7fSA0CkBlbmQgZ3JvdXAK QGVuZCBleGFtcGxlCgpAbm9kZSBDb25zdGFudCBWYXJpYWJsZXMKQHNlY3Rpb24gVmFyaWFibGVz IHRoYXQgTmV2ZXIgQ2hhbmdlCkBjaW5kZXggQGNvZGV7c2V0dGluZy1jb25zdGFudH0gZXJyb3IK QGNpbmRleCBrZXl3b3JkIHN5bWJvbApAY2luZGV4IHZhcmlhYmxlIHdpdGggY29uc3RhbnQgdmFs dWUKQGNpbmRleCBjb25zdGFudCB2YXJpYWJsZXMKQGNpbmRleCBzeW1ib2wgdGhhdCBldmFsdWF0 ZXMgdG8gaXRzZWxmCkBjaW5kZXggc3ltYm9sIHdpdGggY29uc3RhbnQgdmFsdWUKCiAgSW4gRW1h Y3MgTGlzcCwgY2VydGFpbiBzeW1ib2xzIG5vcm1hbGx5IGV2YWx1YXRlIHRvIHRoZW1zZWx2ZXMu ICBUaGVzZQppbmNsdWRlIEBjb2Rle25pbH0gYW5kIEBjb2Rle3R9LCBhcyB3ZWxsIGFzIGFueSBz eW1ib2wgd2hvc2UgbmFtZSBzdGFydHMKd2l0aCBAc2FtcHs6fSAodGhlc2UgYXJlIGNhbGxlZCBA ZGZue2tleXdvcmRzfSkuICBUaGVzZSBzeW1ib2xzIGNhbm5vdApiZSByZWJvdW5kLCBub3IgY2Fu IHRoZWlyIHZhbHVlcyBiZSBjaGFuZ2VkLiAgQW55IGF0dGVtcHQgdG8gc2V0IG9yIGJpbmQKQGNv ZGV7bmlsfSBvciBAY29kZXt0fSBzaWduYWxzIGEgQGNvZGV7c2V0dGluZy1jb25zdGFudH0gZXJy b3IuICBUaGUKc2FtZSBpcyB0cnVlIGZvciBhIGtleXdvcmQgKGEgc3ltYm9sIHdob3NlIG5hbWUg c3RhcnRzIHdpdGggQHNhbXB7On0pLAppZiBpdCBpcyBpbnRlcm5lZCBpbiB0aGUgc3RhbmRhcmQg b2JhcnJheSwgZXhjZXB0IHRoYXQgc2V0dGluZyBzdWNoIGEKc3ltYm9sIHRvIGl0c2VsZiBpcyBu b3QgYW4gZXJyb3IuCgpAZXhhbXBsZQpAZ3JvdXAKbmlsIEBlcXVpdnt9ICduaWwKICAgICBAcmVz dWx0e30gbmlsCkBlbmQgZ3JvdXAKQGdyb3VwCihzZXRxIG5pbCA1MDApCkBlcnJvcnt9IEF0dGVt cHQgdG8gc2V0IGNvbnN0YW50IHN5bWJvbDogbmlsCkBlbmQgZ3JvdXAKQGVuZCBleGFtcGxlCgpA ZGVmdW4ga2V5d29yZHAgb2JqZWN0CmZ1bmN0aW9uIHJldHVybnMgQGNvZGV7dH0gaWYgQHZhcntv YmplY3R9IGlzIGEgc3ltYm9sIHdob3NlIG5hbWUKc3RhcnRzIHdpdGggQHNhbXB7On0sIGludGVy bmVkIGluIHRoZSBzdGFuZGFyZCBvYmFycmF5LCBhbmQgcmV0dXJucwpAY29kZXtuaWx9IG90aGVy d2lzZS4KQGVuZCBkZWZ1bgoKVGhlc2UgY29uc3RhbnRzIGFyZSBmdW5kYW1lbnRhbGx5IGRpZmZl cmVudCBmcm9tIHRoZSBjb25zdGFudHMKZGVmaW5lZCB1c2luZyB0aGUgQGNvZGV7ZGVmY29uc3R9 IHNwZWNpYWwgZm9ybSAoQHB4cmVme0RlZmluaW5nClZhcmlhYmxlc30pLiAgQSBAY29kZXtkZWZj b25zdH0gZm9ybSBzZXJ2ZXMgdG8gaW5mb3JtIGh1bWFuIHJlYWRlcnMKdGhhdCB5b3UgZG8gbm90 IGludGVuZCB0byBjaGFuZ2UgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUsIGJ1dCBFbWFjcwpkb2Vz IG5vdCByYWlzZSBhbiBlcnJvciBpZiB5b3UgYWN0dWFsbHkgY2hhbmdlIGl0LgoKQG5vZGUgTG9j YWwgVmFyaWFibGVzCkBzZWN0aW9uIExvY2FsIFZhcmlhYmxlcwpAY2luZGV4IGJpbmRpbmcgbG9j YWwgdmFyaWFibGVzCkBjaW5kZXggbG9jYWwgdmFyaWFibGVzCkBjaW5kZXggbG9jYWwgYmluZGlu ZwpAY2luZGV4IGdsb2JhbCBiaW5kaW5nCgogIEdsb2JhbCB2YXJpYWJsZXMgaGF2ZSB2YWx1ZXMg dGhhdCBsYXN0IHVudGlsIGV4cGxpY2l0bHkgc3VwZXJzZWRlZAp3aXRoIG5ldyB2YWx1ZXMuICBT b21ldGltZXMgaXQgaXMgdXNlZnVsIHRvIGdpdmUgYSB2YXJpYWJsZSBhCkBkZm57bG9jYWwgdmFs dWV9LS0tYSB2YWx1ZSB0aGF0IHRha2VzIGVmZmVjdCBvbmx5IHdpdGhpbiBhIGNlcnRhaW4KcGFy dCBvZiBhIExpc3AgcHJvZ3JhbS4gIFdoZW4gYSB2YXJpYWJsZSBoYXMgYSBsb2NhbCB2YWx1ZSwg d2Ugc2F5CnRoYXQgaXQgaXMgQGRmbntsb2NhbGx5IGJvdW5kfSB0byB0aGF0IHZhbHVlLCBhbmQg dGhhdCBpdCBpcyBhCkBkZm57bG9jYWwgdmFyaWFibGV9LgoKICBGb3IgZXhhbXBsZSwgd2hlbiBh IGZ1bmN0aW9uIGlzIGNhbGxlZCwgaXRzIGFyZ3VtZW50IHZhcmlhYmxlcwpyZWNlaXZlIGxvY2Fs IHZhbHVlcywgd2hpY2ggYXJlIHRoZSBhY3R1YWwgYXJndW1lbnRzIHN1cHBsaWVkIHRvIHRoZQpm dW5jdGlvbiBjYWxsOyB0aGVzZSBsb2NhbCBiaW5kaW5ncyB0YWtlIGVmZmVjdCB3aXRoaW4gdGhl IGJvZHkgb2YgdGhlCmZ1bmN0aW9uLiAgVG8gdGFrZSBhbm90aGVyIGV4YW1wbGUsIHRoZSBAY29k ZXtsZXR9IHNwZWNpYWwgZm9ybQpleHBsaWNpdGx5IGVzdGFibGlzaGVzIGxvY2FsIGJpbmRpbmdz IGZvciBzcGVjaWZpYyB2YXJpYWJsZXMsIHdoaWNoCnRha2UgZWZmZWN0IHdpdGhpbiB0aGUgYm9k eSBvZiB0aGUgQGNvZGV7bGV0fSBmb3JtLgoKICBXZSBhbHNvIHNwZWFrIG9mIHRoZSBAZGZue2ds b2JhbCBiaW5kaW5nfSwgd2hpY2ggaXMgd2hlcmUKKGNvbmNlcHR1YWxseSkgdGhlIGdsb2JhbCB2 YWx1ZSBpcyBrZXB0LgoKQGNpbmRleCBzaGFkb3dpbmcgb2YgdmFyaWFibGVzCiAgRXN0YWJsaXNo aW5nIGEgbG9jYWwgYmluZGluZyBzYXZlcyBhd2F5IHRoZSB2YXJpYWJsZSdzIHByZXZpb3VzCnZh bHVlIChvciBsYWNrIG9mIG9uZSkuICBXZSBzYXkgdGhhdCB0aGUgcHJldmlvdXMgdmFsdWUgaXMK QGRmbntzaGFkb3dlZH0uICBCb3RoIGdsb2JhbCBhbmQgbG9jYWwgdmFsdWVzIG1heSBiZSBzaGFk b3dlZC4gIElmIGEKbG9jYWwgYmluZGluZyBpcyBpbiBlZmZlY3QsIHVzaW5nIEBjb2Rle3NldHF9 IG9uIHRoZSBsb2NhbCB2YXJpYWJsZQpzdG9yZXMgdGhlIHNwZWNpZmllZCB2YWx1ZSBpbiB0aGUg bG9jYWwgYmluZGluZy4gIFdoZW4gdGhhdCBsb2NhbApiaW5kaW5nIGlzIG5vIGxvbmdlciBpbiBl ZmZlY3QsIHRoZSBwcmV2aW91c2x5IHNoYWRvd2VkIHZhbHVlIChvciBsYWNrCm9mIG9uZSkgY29t ZXMgYmFjay4KCkBjaW5kZXggY3VycmVudCBiaW5kaW5nCiAgQSB2YXJpYWJsZSBjYW4gaGF2ZSBt b3JlIHRoYW4gb25lIGxvY2FsIGJpbmRpbmcgYXQgYSB0aW1lIChlLmcuLCBpZgp0aGVyZSBhcmUg bmVzdGVkIEBjb2Rle2xldH0gZm9ybXMgdGhhdCBiaW5kIHRoZSB2YXJpYWJsZSkuICBUaGUKQGRm bntjdXJyZW50IGJpbmRpbmd9IGlzIHRoZSBsb2NhbCBiaW5kaW5nIHRoYXQgaXMgYWN0dWFsbHkg aW4gZWZmZWN0LgpJdCBkZXRlcm1pbmVzIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBldmFsdWF0aW5n IHRoZSB2YXJpYWJsZSBzeW1ib2wsCmFuZCBpdCBpcyB0aGUgYmluZGluZyBhY3RlZCBvbiBieSBA Y29kZXtzZXRxfS4KCiAgRm9yIG1vc3QgcHVycG9zZXMsIHlvdSBjYW4gdGhpbmsgb2YgdGhlIGN1 cnJlbnQgYmluZGluZyBhcyB0aGUKaW5uZXJtb3N0IGxvY2FsIGJpbmRpbmcsIG9yIHRoZSBnbG9i YWwgYmluZGluZyBpZiB0aGVyZSBpcyBubwpsb2NhbCBiaW5kaW5nLiAgVG8gYmUgbW9yZSBwcmVj aXNlLCBhIHJ1bGUgY2FsbGVkIHRoZSBAZGZue3Njb3BpbmcKcnVsZX0gZGV0ZXJtaW5lcyB3aGVy ZSBpbiBhIHByb2dyYW0gYSBsb2NhbCBiaW5kaW5nIHRha2VzIGVmZmVjdC4gIFRoZQpkZWZhdWx0 IHNjb3BpbmcgcnVsZSBpbiBFbWFjcyBMaXNwIGlzIGNhbGxlZCBAZGZue2R5bmFtaWMgc2NvcGlu Z30sCndoaWNoIHNpbXBseSBzdGF0ZXMgdGhhdCB0aGUgY3VycmVudCBiaW5kaW5nIGF0IGFueSBn aXZlbiBwb2ludCBpbiB0aGUKZXhlY3V0aW9uIG9mIGEgcHJvZ3JhbSBpcyB0aGUgbW9zdCByZWNl bnRseS1jcmVhdGVkIGJpbmRpbmcgZm9yIHRoYXQKdmFyaWFibGUgdGhhdCBzdGlsbCBleGlzdHMu ICBGb3IgZGV0YWlscyBhYm91dCBkeW5hbWljIHNjb3BpbmcsIGFuZCBhbgphbHRlcm5hdGl2ZSBz Y29waW5nIHJ1bGUgY2FsbGVkIEBkZm57bGV4aWNhbCBzY29waW5nfSwgQHhyZWZ7VmFyaWFibGUK U2NvcGluZ30uCgogIFRoZSBzcGVjaWFsIGZvcm1zIEBjb2Rle2xldH0gYW5kIEBjb2Rle2xldCp9 IGV4aXN0IHRvIGNyZWF0ZSBsb2NhbApiaW5kaW5nczoKCkBkZWZzcGVjIGxldCAoYmluZGluZ3NA ZG90c3t9KSBmb3Jtc0Bkb3Rze30KVGhpcyBzcGVjaWFsIGZvcm0gc2V0cyB1cCBsb2NhbCBiaW5k aW5ncyBmb3IgYSBjZXJ0YWluIHNldCBvZgp2YXJpYWJsZXMsIGFzIHNwZWNpZmllZCBieSBAdmFy e2JpbmRpbmdzfSwgYW5kIHRoZW4gZXZhbHVhdGVzIGFsbCBvZgp0aGUgQHZhcntmb3Jtc30gaW4g dGV4dHVhbCBvcmRlci4gIEl0cyByZXR1cm4gdmFsdWUgaXMgdGhlIHZhbHVlIG9mCnRoZSBsYXN0 IGZvcm0gaW4gQHZhcntmb3Jtc30uCgpFYWNoIG9mIHRoZSBAdmFye2JpbmRpbmdzfSBpcyBlaXRo ZXIgQHd7KGkpIGF9IHN5bWJvbCwgaW4gd2hpY2ggY2FzZQp0aGF0IHN5bWJvbCBpcyBsb2NhbGx5 IGJvdW5kIHRvIEBjb2Rle25pbH07IG9yIEB3eyhpaSkgYX0gbGlzdCBvZiB0aGUKZm9ybSBAY29k ZXsoQHZhcntzeW1ib2x9IEB2YXJ7dmFsdWUtZm9ybX0pfSwgaW4gd2hpY2ggY2FzZQpAdmFye3N5 bWJvbH0gaXMgbG9jYWxseSBib3VuZCB0byB0aGUgcmVzdWx0IG9mIGV2YWx1YXRpbmcKQHZhcnt2 YWx1ZS1mb3JtfS4gIElmIEB2YXJ7dmFsdWUtZm9ybX0gaXMgb21pdHRlZCwgQGNvZGV7bmlsfSBp cyB1c2VkLgoKQWxsIG9mIHRoZSBAdmFye3ZhbHVlLWZvcm19cyBpbiBAdmFye2JpbmRpbmdzfSBh cmUgZXZhbHVhdGVkIGluIHRoZQpvcmRlciB0aGV5IGFwcGVhciBhbmQgQGVtcGh7YmVmb3JlfSBi aW5kaW5nIGFueSBvZiB0aGUgc3ltYm9scyB0byB0aGVtLgpIZXJlIGlzIGFuIGV4YW1wbGUgb2Yg dGhpczogQGNvZGV7en0gaXMgYm91bmQgdG8gdGhlIG9sZCB2YWx1ZSBvZgpAY29kZXt5fSwgd2hp Y2ggaXMgMiwgbm90IHRoZSBuZXcgdmFsdWUgb2YgQGNvZGV7eX0sIHdoaWNoIGlzIDEuCgpAZXhh bXBsZQpAZ3JvdXAKKHNldHEgeSAyKQogICAgIEByZXN1bHR7fSAyCkBlbmQgZ3JvdXAKCkBncm91 cAoobGV0ICgoeSAxKQogICAgICAoeiB5KSkKICAobGlzdCB5IHopKQogICAgIEByZXN1bHR7fSAo MSAyKQpAZW5kIGdyb3VwCkBlbmQgZXhhbXBsZQoKT24gdGhlIG90aGVyIGhhbmQsIHRoZSBvcmRl ciBvZiBAZW1waHtiaW5kaW5nc30gaXMgdW5zcGVjaWZpZWQ6IGluIHRoZQpmb2xsb3dpbmcgZXhh bXBsZSwgZWl0aGVyIDEgb3IgMiBtaWdodCBiZSBwcmludGVkLgoKQGV4YW1wbGUKKGxldCAoKHgg MSkKICAgICAgKHggMikpCiAgKHByaW50IHgpKQpAZW5kIGV4YW1wbGUKClRoZXJlZm9yZSwgYXZv aWQgYmluZGluZyBhIHZhcmlhYmxlIG1vcmUgdGhhbiBvbmNlIGluIGEgc2luZ2xlCkBjb2Rle2xl dH0gZm9ybS4KCkZ1bmN0aW9ucyBkZWZpbmVkIHdpdGhpbiBhIEBjb2Rle2xldH0gbXVzdCBiZSBp bnZva2VkIHVzaW5nIGEgY2FsbCB0byBAY29kZXtmdW5jYWxsfS4KCkBleGFtcGxlCihkZWZ1biBm b28gKHgpCiAgKGxldCAoKGJhciAobGFtYmRhICh5KSAoKyB4IHkpKSkpCiAgICAoZnVuY2FsbCBi YXIgMykpKQooZm9vIDQpCiAgICAgQHJlc3VsdHt9IDcKQGVuZCBleGFtcGxlCkBlbmQgZGVmc3Bl YwoKQGRlZnNwZWMgbGV0KiAoYmluZGluZ3NAZG90c3t9KSBmb3Jtc0Bkb3Rze30KVGhpcyBzcGVj aWFsIGZvcm0gaXMgbGlrZSBAY29kZXtsZXR9LCBidXQgaXQgYmluZHMgZWFjaCB2YXJpYWJsZSBy aWdodAphZnRlciBjb21wdXRpbmcgaXRzIGxvY2FsIHZhbHVlLCBiZWZvcmUgY29tcHV0aW5nIHRo ZSBsb2NhbCB2YWx1ZSBmb3IKdGhlIG5leHQgdmFyaWFibGUuICBUaGVyZWZvcmUsIGFuIGV4cHJl c3Npb24gaW4gQHZhcntiaW5kaW5nc30gY2FuCnJlZmVyIHRvIHRoZSBwcmVjZWRpbmcgc3ltYm9s cyBib3VuZCBpbiB0aGlzIEBjb2Rle2xldCp9IGZvcm0uCkNvbXBhcmUgdGhlIGZvbGxvd2luZyBl eGFtcGxlIHdpdGggdGhlIGV4YW1wbGUgYWJvdmUgZm9yIEBjb2Rle2xldH0uCgpAZXhhbXBsZQpA Z3JvdXAKKHNldHEgeSAyKQogICAgIEByZXN1bHR7fSAyCkBlbmQgZ3JvdXAKCkBncm91cAoobGV0 KiAoKHkgMSkKICAgICAgICh6IHkpKSAgICA7IEBye1VzZSB0aGUganVzdC1lc3RhYmxpc2hlZCB2 YWx1ZSBvZiBAY29kZXt5fS59CiAgKGxpc3QgeSB6KSkKICAgICBAcmVzdWx0e30gKDEgMSkKQGVu ZCBncm91cApAZW5kIGV4YW1wbGUKQGVuZCBkZWZzcGVjCgogIEhlcmUgaXMgYSBjb21wbGV0ZSBs aXN0IG9mIHRoZSBvdGhlciBmYWNpbGl0aWVzIHRoYXQgY3JlYXRlIGxvY2FsCmJpbmRpbmdzOgoK QGl0ZW1pemUgQGJ1bGxldApAaXRlbQpGdW5jdGlvbiBjYWxscyAoQHB4cmVme0Z1bmN0aW9uc30p LgoKQGl0ZW0KTWFjcm8gY2FsbHMgKEBweHJlZntNYWNyb3N9KS4KCkBpdGVtCkBjb2Rle2NvbmRp dGlvbi1jYXNlfSAoQHB4cmVme0Vycm9yc30pLgpAZW5kIGl0ZW1pemUKCiAgVmFyaWFibGVzIGNh biBhbHNvIGhhdmUgYnVmZmVyLWxvY2FsIGJpbmRpbmdzIChAcHhyZWZ7QnVmZmVyLUxvY2FsClZh cmlhYmxlc30pOyBhIGZldyB2YXJpYWJsZXMgaGF2ZSB0ZXJtaW5hbC1sb2NhbCBiaW5kaW5ncwoo QHB4cmVme011bHRpcGxlIFRlcm1pbmFsc30pLiAgVGhlc2Uga2luZHMgb2YgYmluZGluZ3Mgd29y ayBzb21ld2hhdApsaWtlIG9yZGluYXJ5IGxvY2FsIGJpbmRpbmdzLCBidXQgdGhleSBhcmUgbG9j YWxpemVkIGRlcGVuZGluZyBvbgp3aGVyZSB5b3UgYXJlIGluIEVtYWNzLgoKQGRlZm9wdCBtYXgt c3BlY3BkbC1zaXplCkBhbmNob3J7RGVmaW5pdGlvbiBvZiBtYXgtc3BlY3BkbC1zaXplfQpAY2lu ZGV4IHZhcmlhYmxlIGxpbWl0IGVycm9yCkBjaW5kZXggZXZhbHVhdGlvbiBlcnJvcgpAY2luZGV4 IGluZmluaXRlIHJlY3Vyc2lvbgpUaGlzIHZhcmlhYmxlIGRlZmluZXMgdGhlIGxpbWl0IG9uIHRo ZSB0b3RhbCBudW1iZXIgb2YgbG9jYWwgdmFyaWFibGUKYmluZGluZ3MgYW5kIEBjb2Rle3Vud2lu ZC1wcm90ZWN0fSBjbGVhbnVwcyAoc2VlIEByZWZ7Q2xlYW51cHMsLApDbGVhbmluZyBVcCBmcm9t IE5vbmxvY2FsIEV4aXRzfSkgdGhhdCBhcmUgYWxsb3dlZCBiZWZvcmUgRW1hY3MKc2lnbmFscyBh biBlcnJvciAod2l0aCBkYXRhIEBjb2RleyJWYXJpYWJsZSBiaW5kaW5nIGRlcHRoIGV4Y2VlZHMK bWF4LXNwZWNwZGwtc2l6ZSJ9KS4KClRoaXMgbGltaXQsIHdpdGggdGhlIGFzc29jaWF0ZWQgZXJy b3Igd2hlbiBpdCBpcyBleGNlZWRlZCwgaXMgb25lIHdheQp0aGF0IExpc3AgYXZvaWRzIGluZmlu aXRlIHJlY3Vyc2lvbiBvbiBhbiBpbGwtZGVmaW5lZCBmdW5jdGlvbi4KQGNvZGV7bWF4LWxpc3At ZXZhbC1kZXB0aH0gcHJvdmlkZXMgYW5vdGhlciBsaW1pdCBvbiBkZXB0aCBvZiBuZXN0aW5nLgpA eHJlZntEZWZpbml0aW9uIG9mIG1heC1saXNwLWV2YWwtZGVwdGgsLCBFdmFsfS4KClRoZSBkZWZh dWx0IHZhbHVlIGlzIDEzMDAuICBFbnRyeSB0byB0aGUgTGlzcCBkZWJ1Z2dlciBpbmNyZWFzZXMg dGhlCnZhbHVlLCBpZiB0aGVyZSBpcyBsaXR0bGUgcm9vbSBsZWZ0LCB0byBtYWtlIHN1cmUgdGhl IGRlYnVnZ2VyIGl0c2VsZgpoYXMgcm9vbSB0byBleGVjdXRlLgpAZW5kIGRlZm9wdAoKQG5vZGUg Vm9pZCBWYXJpYWJsZXMKQHNlY3Rpb24gV2hlbiBhIFZhcmlhYmxlIGlzIFZvaWQKQGNpbmRleCBA Y29kZXt2b2lkLXZhcmlhYmxlfSBlcnJvcgpAY2luZGV4IHZvaWQgdmFyaWFibGUKCiAgV2Ugc2F5 IHRoYXQgYSB2YXJpYWJsZSBpcyB2b2lkIGlmIGl0cyBzeW1ib2wgaGFzIGFuIHVuYXNzaWduZWQg dmFsdWUKY2VsbCAoQHB4cmVme1N5bWJvbCBDb21wb25lbnRzfSkuCgogIFVuZGVyIEVtYWNzIExp c3AncyBkZWZhdWx0IGR5bmFtaWMgc2NvcGluZyBydWxlIChAcHhyZWZ7VmFyaWFibGUKU2NvcGlu Z30pLCB0aGUgdmFsdWUgY2VsbCBzdG9yZXMgdGhlIHZhcmlhYmxlJ3MgY3VycmVudCAobG9jYWwg b3IKZ2xvYmFsKSB2YWx1ZS4gIE5vdGUgdGhhdCBhbiB1bmFzc2lnbmVkIHZhbHVlIGNlbGwgaXMg QGVtcGh7bm90fSB0aGUKc2FtZSBhcyBoYXZpbmcgQGNvZGV7bmlsfSBpbiB0aGUgdmFsdWUgY2Vs bC4gIFRoZSBzeW1ib2wgQGNvZGV7bmlsfSBpcwphIExpc3Agb2JqZWN0IGFuZCBjYW4gYmUgdGhl IHZhbHVlIG9mIGEgdmFyaWFibGUsIGp1c3QgYXMgYW55IG90aGVyCm9iamVjdCBjYW4gYmU7IGJ1 dCBpdCBpcyBzdGlsbCBhIHZhbHVlLiAgSWYgYSB2YXJpYWJsZSBpcyB2b2lkLCB0cnlpbmcKdG8g ZXZhbHVhdGUgdGhlIHZhcmlhYmxlIHNpZ25hbHMgYSBAY29kZXt2b2lkLXZhcmlhYmxlfSBlcnJv ciwgaW5zdGVhZApvZiByZXR1cm5pbmcgYSB2YWx1ZS4KCiAgVW5kZXIgdGhlIG9wdGlvbmFsIGxl eGljYWwgc2NvcGluZyBydWxlLCB0aGUgdmFsdWUgY2VsbCBvbmx5IGhvbGRzCnRoZSB2YXJpYWJs ZSdzIGdsb2JhbCB2YWx1ZS0tLXRoZSB2YWx1ZSBvdXRzaWRlIG9mIGFueSBsZXhpY2FsIGJpbmRp bmcKY29uc3RydWN0LiAgV2hlbiBhIHZhcmlhYmxlIGlzIGxleGljYWxseSBib3VuZCwgdGhlIGxv Y2FsIHZhbHVlIGlzCmRldGVybWluZWQgYnkgdGhlIGxleGljYWwgZW52aXJvbm1lbnQ7IGhlbmNl LCB2YXJpYWJsZXMgY2FuIGhhdmUgbG9jYWwKdmFsdWVzIGV2ZW4gaWYgdGhlaXIgc3ltYm9scycg dmFsdWUgY2VsbHMgYXJlIHVuYXNzaWduZWQuCgpAZGVmdW4gbWFrdW5ib3VuZCBzeW1ib2wKVGhp cyBmdW5jdGlvbiBlbXB0aWVzIG91dCB0aGUgdmFsdWUgY2VsbCBvZiBAdmFye3N5bWJvbH0sIG1h a2luZyB0aGUKdmFyaWFibGUgdm9pZC4gIEl0IHJldHVybnMgQHZhcntzeW1ib2x9LgoKSWYgQHZh cntzeW1ib2x9IGhhcyBhIGR5bmFtaWMgbG9jYWwgYmluZGluZywgQGNvZGV7bWFrdW5ib3VuZH0g dm9pZHMKdGhlIGN1cnJlbnQgYmluZGluZywgYW5kIHRoaXMgdm9pZG5lc3MgbGFzdHMgb25seSBh cyBsb25nIGFzIHRoZSBsb2NhbApiaW5kaW5nIGlzIGluIGVmZmVjdC4gIEFmdGVyd2FyZHMsIHRo ZSBwcmV2aW91c2x5IHNoYWRvd2VkIGxvY2FsIG9yCmdsb2JhbCBiaW5kaW5nIGlzIHJlZXhwb3Nl ZDsgdGhlbiB0aGUgdmFyaWFibGUgd2lsbCBubyBsb25nZXIgYmUgdm9pZCwKdW5sZXNzIHRoZSBy ZWV4cG9zZWQgYmluZGluZyBpcyB2b2lkIHRvby4KCkhlcmUgYXJlIHNvbWUgZXhhbXBsZXMgKGFz c3VtaW5nIGR5bmFtaWMgYmluZGluZyBpcyBpbiBlZmZlY3QpOgoKQHNtYWxsZXhhbXBsZQpAZ3Jv dXAKKHNldHEgeCAxKSAgICAgICAgICAgICAgIDsgQHJ7UHV0IGEgdmFsdWUgaW4gdGhlIGdsb2Jh bCBiaW5kaW5nLn0KICAgICBAcmVzdWx0e30gMQoobGV0ICgoeCAyKSkgICAgICAgICAgICAgOyBA cntMb2NhbGx5IGJpbmQgaXQufQogIChtYWt1bmJvdW5kICd4KSAgICAgICAgOyBAcntWb2lkIHRo ZSBsb2NhbCBiaW5kaW5nLn0KICB4KQpAZXJyb3J7fSBTeW1ib2wncyB2YWx1ZSBhcyB2YXJpYWJs ZSBpcyB2b2lkOiB4CkBlbmQgZ3JvdXAKQGdyb3VwCnggICAgICAgICAgICAgICAgICAgICAgICA7 IEBye1RoZSBnbG9iYWwgYmluZGluZyBpcyB1bmNoYW5nZWQufQogICAgIEByZXN1bHR7fSAxCgoo bGV0ICgoeCAyKSkgICAgICAgICAgICAgOyBAcntMb2NhbGx5IGJpbmQgaXQufQogIChsZXQgKCh4 IDMpKSAgICAgICAgICAgOyBAcntBbmQgYWdhaW4ufQogICAgKG1ha3VuYm91bmQgJ3gpICAgICAg OyBAcntWb2lkIHRoZSBpbm5lcm1vc3QtbG9jYWwgYmluZGluZy59CiAgICB4KSkgICAgICAgICAg ICAgICAgICA7IEBye0FuZCByZWZlcjogaXQncyB2b2lkLn0KQGVycm9ye30gU3ltYm9sJ3MgdmFs dWUgYXMgdmFyaWFibGUgaXMgdm9pZDogeApAZW5kIGdyb3VwCgpAZ3JvdXAKKGxldCAoKHggMikp CiAgKGxldCAoKHggMykpCiAgICAobWFrdW5ib3VuZCAneCkpICAgICA7IEBye1ZvaWQgaW5uZXIg YmluZGluZywgdGhlbiByZW1vdmUgaXQufQogIHgpICAgICAgICAgICAgICAgICAgICAgOyBAcntO b3cgb3V0ZXIgQGNvZGV7bGV0fSBiaW5kaW5nIGlzIHZpc2libGUufQogICAgIEByZXN1bHR7fSAy CkBlbmQgZ3JvdXAKQGVuZCBzbWFsbGV4YW1wbGUKQGVuZCBkZWZ1bgoKQGRlZnVuIGJvdW5kcCB2 YXJpYWJsZQpUaGlzIGZ1bmN0aW9uIHJldHVybnMgQGNvZGV7dH0gaWYgQHZhcnt2YXJpYWJsZX0g KGEgc3ltYm9sKSBpcyBub3QKdm9pZCwgYW5kIEBjb2Rle25pbH0gaWYgaXQgaXMgdm9pZC4KCkhl cmUgYXJlIHNvbWUgZXhhbXBsZXMgKGFzc3VtaW5nIGR5bmFtaWMgYmluZGluZyBpcyBpbiBlZmZl Y3QpOgoKQHNtYWxsZXhhbXBsZQpAZ3JvdXAKKGJvdW5kcCAnYWJyYWNhZGFicmEpICAgICAgICAg IDsgQHJ7U3RhcnRzIG91dCB2b2lkLn0KICAgICBAcmVzdWx0e30gbmlsCkBlbmQgZ3JvdXAKQGdy b3VwCihsZXQgKChhYnJhY2FkYWJyYSA1KSkgICAgICAgICA7IEBye0xvY2FsbHkgYmluZCBpdC59 CiAgKGJvdW5kcCAnYWJyYWNhZGFicmEpKQogICAgIEByZXN1bHR7fSB0CkBlbmQgZ3JvdXAKQGdy b3VwCihib3VuZHAgJ2FicmFjYWRhYnJhKSAgICAgICAgICA7IEBye1N0aWxsIGdsb2JhbGx5IHZv aWQufQogICAgIEByZXN1bHR7fSBuaWwKQGVuZCBncm91cApAZ3JvdXAKKHNldHEgYWJyYWNhZGFi cmEgNSkgICAgICAgICAgIDsgQHJ7TWFrZSBpdCBnbG9iYWxseSBub252b2lkLn0KICAgICBAcmVz dWx0e30gNQpAZW5kIGdyb3VwCkBncm91cAooYm91bmRwICdhYnJhY2FkYWJyYSkKICAgICBAcmVz dWx0e30gdApAZW5kIGdyb3VwCkBlbmQgc21hbGxleGFtcGxlCkBlbmQgZGVmdW4KCkBub2RlIERl ZmluaW5nIFZhcmlhYmxlcwpAc2VjdGlvbiBEZWZpbmluZyBHbG9iYWwgVmFyaWFibGVzCkBjaW5k ZXggdmFyaWFibGUgZGVmaW5pdGlvbgoKICBBIEBkZm57dmFyaWFibGUgZGVmaW5pdGlvbn0gaXMg YSBjb25zdHJ1Y3QgdGhhdCBhbm5vdW5jZXMgeW91cgppbnRlbnRpb24gdG8gdXNlIGEgc3ltYm9s IGFzIGEgZ2xvYmFsIHZhcmlhYmxlLiAgSXQgdXNlcyB0aGUgc3BlY2lhbApmb3JtcyBAY29kZXtk ZWZ2YXJ9IG9yIEBjb2Rle2RlZmNvbnN0fSwgd2hpY2ggYXJlIGRvY3VtZW50ZWQgYmVsb3cuCgog IEEgdmFyaWFibGUgZGVmaW5pdGlvbiBzZXJ2ZXMgdGhyZWUgcHVycG9zZXMuICBGaXJzdCwgaXQg aW5mb3JtcwpwZW9wbGUgd2hvIHJlYWQgdGhlIGNvZGUgdGhhdCB0aGUgc3ltYm9sIGlzIEBlbXBo e2ludGVuZGVkfSB0byBiZSB1c2VkCmEgY2VydGFpbiB3YXkgKGFzIGEgdmFyaWFibGUpLiAgU2Vj b25kLCBpdCBpbmZvcm1zIHRoZSBMaXNwIHN5c3RlbSBvZgp0aGlzLCBvcHRpb25hbGx5IHN1cHBs eWluZyBhbiBpbml0aWFsIHZhbHVlIGFuZCBhIGRvY3VtZW50YXRpb24Kc3RyaW5nLiAgVGhpcmQs IGl0IHByb3ZpZGVzIGluZm9ybWF0aW9uIHRvIHByb2dyYW1taW5nIHRvb2xzIHN1Y2ggYXMKQGNv bW1hbmR7ZXRhZ3N9LCBhbGxvd2luZyB0aGVtIHRvIGZpbmQgd2hlcmUgdGhlIHZhcmlhYmxlIHdh cyBkZWZpbmVkLgoKICBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIEBjb2Rle2RlZmNvbnN0fSBhbmQg QGNvZGV7ZGVmdmFyfSBpcyBtYWlubHkgYQptYXR0ZXIgb2YgaW50ZW50LCBzZXJ2aW5nIHRvIGlu Zm9ybSBodW1hbiByZWFkZXJzIG9mIHdoZXRoZXIgdGhlIHZhbHVlCnNob3VsZCBldmVyIGNoYW5n ZS4gIEVtYWNzIExpc3AgZG9lcyBub3QgYWN0dWFsbHkgcHJldmVudCB5b3UgZnJvbQpjaGFuZ2lu ZyB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZSBkZWZpbmVkIHdpdGggQGNvZGV7ZGVmY29uc3R9LiAg T25lCm5vdGFibGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gZm9ybXMgaXMgdGhhdCBAY29k ZXtkZWZjb25zdH0KdW5jb25kaXRpb25hbGx5IGluaXRpYWxpemVzIHRoZSB2YXJpYWJsZSwgd2hl cmVhcyBAY29kZXtkZWZ2YXJ9CmluaXRpYWxpemVzIGl0IG9ubHkgaWYgaXQgaXMgb3JpZ2luYWxs eSB2b2lkLgoKICBUbyBkZWZpbmUgYSBjdXN0b21pemFibGUgdmFyaWFibGUsIHlvdSBzaG91bGQg dXNlIEBjb2Rle2RlZmN1c3RvbX0KKHdoaWNoIGNhbGxzIEBjb2Rle2RlZnZhcn0gYXMgYSBzdWJy b3V0aW5lKS4gIEB4cmVme1ZhcmlhYmxlCkRlZmluaXRpb25zfS4KCkBkZWZzcGVjIGRlZnZhciBz eW1ib2wgW3ZhbHVlIFtkb2Mtc3RyaW5nXV0KVGhpcyBzcGVjaWFsIGZvcm0gZGVmaW5lcyBAdmFy e3N5bWJvbH0gYXMgYSB2YXJpYWJsZS4gIE5vdGUgdGhhdApAdmFye3N5bWJvbH0gaXMgbm90IGV2 YWx1YXRlZDsgdGhlIHN5bWJvbCB0byBiZSBkZWZpbmVkIHNob3VsZCBhcHBlYXIKZXhwbGljaXRs eSBpbiB0aGUgQGNvZGV7ZGVmdmFyfSBmb3JtLiAgVGhlIHZhcmlhYmxlIGlzIG1hcmtlZCBhcwpA ZGZue3NwZWNpYWx9LCBtZWFuaW5nIHRoYXQgaXQgc2hvdWxkIGFsd2F5cyBiZSBkeW5hbWljYWxs eSBib3VuZAooQHB4cmVme1ZhcmlhYmxlIFNjb3Bpbmd9KS4KCklmIEB2YXJ7dmFsdWV9IGlzIHNw ZWNpZmllZCwgYW5kIEB2YXJ7c3ltYm9sfSBpcyB2b2lkIChpLmUuLCBpdCBoYXMgbm8KZHluYW1p Y2FsbHkgYm91bmQgdmFsdWU7IEBweHJlZntWb2lkIFZhcmlhYmxlc30pLCB0aGVuIEB2YXJ7dmFs dWV9IGlzCmV2YWx1YXRlZCBhbmQgQHZhcntzeW1ib2x9IGlzIHNldCB0byB0aGUgcmVzdWx0LiAg QnV0IGlmIEB2YXJ7c3ltYm9sfQppcyBub3Qgdm9pZCwgQHZhcnt2YWx1ZX0gaXMgbm90IGV2YWx1 YXRlZCwgYW5kIEB2YXJ7c3ltYm9sfSdzIHZhbHVlIGlzCmxlZnQgdW5jaGFuZ2VkLiAgSWYgQHZh cnt2YWx1ZX0gaXMgb21pdHRlZCwgdGhlIHZhbHVlIG9mIEB2YXJ7c3ltYm9sfQppcyBub3QgY2hh bmdlZCBpbiBhbnkgY2FzZS4KCklmIEB2YXJ7c3ltYm9sfSBoYXMgYSBidWZmZXItbG9jYWwgYmlu ZGluZyBpbiB0aGUgY3VycmVudCBidWZmZXIsCkBjb2Rle2RlZnZhcn0gYWN0cyBvbiB0aGUgZGVm YXVsdCB2YWx1ZSwgd2hpY2ggaXMgYnVmZmVyLWluZGVwZW5kZW50LApyYXRoZXIgdGhhbiB0aGUg YnVmZmVyLWxvY2FsIGJpbmRpbmcuICBJdCBzZXRzIHRoZSBkZWZhdWx0IHZhbHVlIGlmCnRoZSBk ZWZhdWx0IHZhbHVlIGlzIHZvaWQuICBAeHJlZntCdWZmZXItTG9jYWwgVmFyaWFibGVzfS4KCklm IEB2YXJ7c3ltYm9sfSBpcyBhbHJlYWR5IGxleGljYWxseSBib3VuZCAoZS5nLiwgaWYgdGhlIEBj b2Rle2RlZnZhcn0KZm9ybSBvY2N1cnMgaW4gYSBAY29kZXtsZXR9IGZvcm0gd2l0aCBsZXhpY2Fs IGJpbmRpbmcgZW5hYmxlZCksIHRoZW4KQGNvZGV7ZGVmdmFyfSBzZXRzIHRoZSBkeW5hbWljIHZh bHVlLiAgVGhlIGxleGljYWwgYmluZGluZyByZW1haW5zIGluCmVmZmVjdCB1bnRpbCBpdHMgYmlu ZGluZyBjb25zdHJ1Y3QgZXhpdHMuICBAeHJlZntWYXJpYWJsZSBTY29waW5nfS4KCldoZW4geW91 IGV2YWx1YXRlIGEgdG9wLWxldmVsIEBjb2Rle2RlZnZhcn0gZm9ybSB3aXRoIEBrYmR7Qy1NLXh9 IGluCkVtYWNzIExpc3AgbW9kZSAoQGNvZGV7ZXZhbC1kZWZ1bn0pLCBhIHNwZWNpYWwgZmVhdHVy ZSBvZgpAY29kZXtldmFsLWRlZnVufSBhcnJhbmdlcyB0byBzZXQgdGhlIHZhcmlhYmxlIHVuY29u ZGl0aW9uYWxseSwgd2l0aG91dAp0ZXN0aW5nIHdoZXRoZXIgaXRzIHZhbHVlIGlzIHZvaWQuCgpJ ZiB0aGUgQHZhcntkb2Mtc3RyaW5nfSBhcmd1bWVudCBpcyBzdXBwbGllZCwgaXQgc3BlY2lmaWVz IHRoZQpkb2N1bWVudGF0aW9uIHN0cmluZyBmb3IgdGhlIHZhcmlhYmxlIChzdG9yZWQgaW4gdGhl IHN5bWJvbCdzCkBjb2Rle3ZhcmlhYmxlLWRvY3VtZW50YXRpb259IHByb3BlcnR5KS4gIEB4cmVm e0RvY3VtZW50YXRpb259LgoKSGVyZSBhcmUgc29tZSBleGFtcGxlcy4gIFRoaXMgZm9ybSBkZWZp bmVzIEBjb2Rle2Zvb30gYnV0IGRvZXMgbm90CmluaXRpYWxpemUgaXQ6CgpAZXhhbXBsZQpAZ3Jv dXAKKGRlZnZhciBmb28pCiAgICAgQHJlc3VsdHt9IGZvbwpAZW5kIGdyb3VwCkBlbmQgZXhhbXBs ZQoKVGhpcyBleGFtcGxlIGluaXRpYWxpemVzIHRoZSB2YWx1ZSBvZiBAY29kZXtiYXJ9IHRvIEBj b2RlezIzfSwgYW5kIGdpdmVzCml0IGEgZG9jdW1lbnRhdGlvbiBzdHJpbmc6CgpAZXhhbXBsZQpA Z3JvdXAKKGRlZnZhciBiYXIgMjMKICAiVGhlIG5vcm1hbCB3ZWlnaHQgb2YgYSBiYXIuIikKICAg ICBAcmVzdWx0e30gYmFyCkBlbmQgZ3JvdXAKQGVuZCBleGFtcGxlCgpUaGUgQGNvZGV7ZGVmdmFy fSBmb3JtIHJldHVybnMgQHZhcntzeW1ib2x9LCBidXQgaXQgaXMgbm9ybWFsbHkgdXNlZAphdCB0 b3AgbGV2ZWwgaW4gYSBmaWxlIHdoZXJlIGl0cyB2YWx1ZSBkb2VzIG5vdCBtYXR0ZXIuCkBlbmQg ZGVmc3BlYwoKQGNpbmRleCBjb25zdGFudCB2YXJpYWJsZXMKQGRlZnNwZWMgZGVmY29uc3Qgc3lt Ym9sIHZhbHVlIFtkb2Mtc3RyaW5nXQpUaGlzIHNwZWNpYWwgZm9ybSBkZWZpbmVzIEB2YXJ7c3lt Ym9sfSBhcyBhIHZhbHVlIGFuZCBpbml0aWFsaXplcyBpdC4KSXQgaW5mb3JtcyBhIHBlcnNvbiBy ZWFkaW5nIHlvdXIgY29kZSB0aGF0IEB2YXJ7c3ltYm9sfSBoYXMgYSBzdGFuZGFyZApnbG9iYWwg dmFsdWUsIGVzdGFibGlzaGVkIGhlcmUsIHRoYXQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIGJ5IHRo ZSB1c2VyCm9yIGJ5IG90aGVyIHByb2dyYW1zLiAgTm90ZSB0aGF0IEB2YXJ7c3ltYm9sfSBpcyBu b3QgZXZhbHVhdGVkOyB0aGUKc3ltYm9sIHRvIGJlIGRlZmluZWQgbXVzdCBhcHBlYXIgZXhwbGlj aXRseSBpbiB0aGUgQGNvZGV7ZGVmY29uc3R9LgoKVGhlIEBjb2Rle2RlZmNvbnN0fSBmb3JtLCBs aWtlIEBjb2Rle2RlZnZhcn0sIG1hcmtzIHRoZSB2YXJpYWJsZSBhcwpAZGZue3NwZWNpYWx9LCBt ZWFuaW5nIHRoYXQgaXQgc2hvdWxkIGFsd2F5cyBiZSBkeW5hbWljYWxseSBib3VuZAooQHB4cmVm e1ZhcmlhYmxlIFNjb3Bpbmd9KS4gIEluIGFkZGl0aW9uLCBpdCBtYXJrcyB0aGUgdmFyaWFibGUg YXMKcmlza3kgKEBweHJlZntGaWxlIExvY2FsIFZhcmlhYmxlc30pLgoKQGNvZGV7ZGVmY29uc3R9 IGFsd2F5cyBldmFsdWF0ZXMgQHZhcnt2YWx1ZX0sIGFuZCBzZXRzIHRoZSB2YWx1ZSBvZgpAdmFy e3N5bWJvbH0gdG8gdGhlIHJlc3VsdC4gIElmIEB2YXJ7c3ltYm9sfSBkb2VzIGhhdmUgYSBidWZm ZXItbG9jYWwKYmluZGluZyBpbiB0aGUgY3VycmVudCBidWZmZXIsIEBjb2Rle2RlZmNvbnN0fSBz ZXRzIHRoZSBkZWZhdWx0IHZhbHVlLApub3QgdGhlIGJ1ZmZlci1sb2NhbCB2YWx1ZS4gIChCdXQg eW91IHNob3VsZCBub3QgYmUgbWFraW5nCmJ1ZmZlci1sb2NhbCBiaW5kaW5ncyBmb3IgYSBzeW1i b2wgdGhhdCBpcyBkZWZpbmVkIHdpdGgKQGNvZGV7ZGVmY29uc3R9LikKCkFuIGV4YW1wbGUgb2Yg dGhlIHVzZSBvZiBAY29kZXtkZWZjb25zdH0gaXMgRW1hY3MncyBkZWZpbml0aW9uIG9mCkBjb2Rl e2Zsb2F0LXBpfS0tLXRoZSBtYXRoZW1hdGljYWwgY29uc3RhbnQgQG1hdGh7cGl9LCB3aGljaCBv dWdodCBub3QKdG8gYmUgY2hhbmdlZCBieSBhbnlvbmUgKGF0dGVtcHRzIGJ5IHRoZSBJbmRpYW5h IFN0YXRlIExlZ2lzbGF0dXJlCm5vdHdpdGhzdGFuZGluZykuICBBcyB0aGUgc2Vjb25kIGZvcm0g aWxsdXN0cmF0ZXMsIGhvd2V2ZXIsCkBjb2Rle2RlZmNvbnN0fSBpcyBvbmx5IGFkdmlzb3J5LgoK QGV4YW1wbGUKQGdyb3VwCihkZWZjb25zdCBmbG9hdC1waSAzLjE0MTU5MjY1MzU4OTc5MyAiVGhl IHZhbHVlIG9mIFBpLiIpCiAgICAgQHJlc3VsdHt9IGZsb2F0LXBpCkBlbmQgZ3JvdXAKQGdyb3Vw CihzZXRxIGZsb2F0LXBpIDMpCiAgICAgQHJlc3VsdHt9IGZsb2F0LXBpCkBlbmQgZ3JvdXAKQGdy b3VwCmZsb2F0LXBpCiAgICAgQHJlc3VsdHt9IDMKQGVuZCBncm91cApAZW5kIGV4YW1wbGUKQGVu ZCBkZWZzcGVjCgogIEBzdHJvbmd7V2FybmluZzp9IElmIHlvdSB1c2UgYSBAY29kZXtkZWZjb25z dH0gb3IgQGNvZGV7ZGVmdmFyfQpzcGVjaWFsIGZvcm0gd2hpbGUgdGhlIHZhcmlhYmxlIGhhcyBh IGxvY2FsIGJpbmRpbmcgKG1hZGUgd2l0aApAY29kZXtsZXR9LCBvciBhIGZ1bmN0aW9uIGFyZ3Vt ZW50KSwgaXQgc2V0cyB0aGUgbG9jYWwgYmluZGluZyByYXRoZXIKdGhhbiB0aGUgZ2xvYmFsIGJp bmRpbmcuICBUaGlzIGlzIG5vdCB3aGF0IHlvdSB1c3VhbGx5IHdhbnQuICBUbwpwcmV2ZW50IHRo aXMsIHVzZSB0aGVzZSBzcGVjaWFsIGZvcm1zIGF0IHRvcCBsZXZlbCBpbiBhIGZpbGUsIHdoZXJl Cm5vcm1hbGx5IG5vIGxvY2FsIGJpbmRpbmcgaXMgaW4gZWZmZWN0LCBhbmQgbWFrZSBzdXJlIHRv IGxvYWQgdGhlIGZpbGUKYmVmb3JlIG1ha2luZyBhIGxvY2FsIGJpbmRpbmcgZm9yIHRoZSB2YXJp YWJsZS4KCkBub2RlIFRpcHMgZm9yIERlZmluaW5nCkBzZWN0aW9uIFRpcHMgZm9yIERlZmluaW5n IFZhcmlhYmxlcyBSb2J1c3RseQoKICBXaGVuIHlvdSBkZWZpbmUgYSB2YXJpYWJsZSB3aG9zZSB2 YWx1ZSBpcyBhIGZ1bmN0aW9uLCBvciBhIGxpc3Qgb2YKZnVuY3Rpb25zLCB1c2UgYSBuYW1lIHRo YXQgZW5kcyBpbiBAc2FtcHstZnVuY3Rpb259IG9yCkBzYW1wey1mdW5jdGlvbnN9LCByZXNwZWN0 aXZlbHkuCgogIFRoZXJlIGFyZSBzZXZlcmFsIG90aGVyIHZhcmlhYmxlIG5hbWUgY29udmVudGlv bnM7CmhlcmUgaXMgYSBjb21wbGV0ZSBsaXN0OgoKQHRhYmxlIEBzYW1wCkBpdGVtIEBkb3Rze30t aG9vawpUaGUgdmFyaWFibGUgaXMgYSBub3JtYWwgaG9vayAoQHB4cmVme0hvb2tzfSkuCgpAaXRl bSBAZG90c3t9LWZ1bmN0aW9uClRoZSB2YWx1ZSBpcyBhIGZ1bmN0aW9uLgoKQGl0ZW0gQGRvdHN7 fS1mdW5jdGlvbnMKVGhlIHZhbHVlIGlzIGEgbGlzdCBvZiBmdW5jdGlvbnMuCgpAaXRlbSBAZG90 c3t9LWZvcm0KVGhlIHZhbHVlIGlzIGEgZm9ybSAoYW4gZXhwcmVzc2lvbikuCgpAaXRlbSBAZG90 c3t9LWZvcm1zClRoZSB2YWx1ZSBpcyBhIGxpc3Qgb2YgZm9ybXMgKGV4cHJlc3Npb25zKS4KCkBp dGVtIEBkb3Rze30tcHJlZGljYXRlClRoZSB2YWx1ZSBpcyBhIHByZWRpY2F0ZS0tLWEgZnVuY3Rp b24gb2Ygb25lIGFyZ3VtZW50IHRoYXQgcmV0dXJucwpub24tQGNvZGV7bmlsfSBmb3Igc3VjY2Vz cyBhbmQgQGNvZGV7bmlsfSBmb3IgZmFpbHVyZS4KCkBpdGVtIEBkb3Rze30tZmxhZwpUaGUgdmFs dWUgaXMgc2lnbmlmaWNhbnQgb25seSBhcyB0byB3aGV0aGVyIGl0IGlzIEBjb2Rle25pbH0gb3Ig bm90LgpTaW5jZSBzdWNoIHZhcmlhYmxlcyBvZnRlbiBlbmQgdXAgYWNxdWlyaW5nIG1vcmUgdmFs dWVzIG92ZXIgdGltZSwKdGhpcyBjb252ZW50aW9uIGlzIG5vdCBzdHJvbmdseSByZWNvbW1lbmRl ZC4KCkBpdGVtIEBkb3Rze30tcHJvZ3JhbQpUaGUgdmFsdWUgaXMgYSBwcm9ncmFtIG5hbWUuCgpA aXRlbSBAZG90c3t9LWNvbW1hbmQKVGhlIHZhbHVlIGlzIGEgd2hvbGUgc2hlbGwgY29tbWFuZC4K CkBpdGVtIEBkb3Rze30tc3dpdGNoZXMKVGhlIHZhbHVlIHNwZWNpZmllcyBvcHRpb25zIGZvciBh IGNvbW1hbmQuCkBlbmQgdGFibGUKCiAgV2hlbiB5b3UgZGVmaW5lIGEgdmFyaWFibGUsIGFsd2F5 cyBjb25zaWRlciB3aGV0aGVyIHlvdSBzaG91bGQgbWFyawppdCBhcyBzYWZlIG9yIHJpc2t5OyBz ZWUgQHJlZntGaWxlIExvY2FsIFZhcmlhYmxlc30uCgogIFdoZW4gZGVmaW5pbmcgYW5kIGluaXRp YWxpemluZyBhIHZhcmlhYmxlIHRoYXQgaG9sZHMgYSBjb21wbGljYXRlZAp2YWx1ZSAoc3VjaCBh cyBhIGtleW1hcCB3aXRoIGJpbmRpbmdzIGluIGl0KSwgaXQncyBiZXN0IHRvIHB1dCB0aGUKZW50 aXJlIGNvbXB1dGF0aW9uIG9mIHRoZSB2YWx1ZSBpbnRvIHRoZSBAY29kZXtkZWZ2YXJ9LCBsaWtl IHRoaXM6CgpAZXhhbXBsZQooZGVmdmFyIG15LW1vZGUtbWFwCiAgKGxldCAoKG1hcCAobWFrZS1z cGFyc2Uta2V5bWFwKSkpCiAgICAoZGVmaW5lLWtleSBtYXAgIlxDLWNcQy1hIiAnbXktY29tbWFu ZCkKICAgIEBkb3Rze30KICAgIG1hcCkKICBAdmFye2RvY3N0cmluZ30pCkBlbmQgZXhhbXBsZQoK QG5vaW5kZW50ClRoaXMgbWV0aG9kIGhhcyBzZXZlcmFsIGJlbmVmaXRzLiAgRmlyc3QsIGlmIHRo ZSB1c2VyIHF1aXRzIHdoaWxlCmxvYWRpbmcgdGhlIGZpbGUsIHRoZSB2YXJpYWJsZSBpcyBlaXRo ZXIgc3RpbGwgdW5pbml0aWFsaXplZCBvcgppbml0aWFsaXplZCBwcm9wZXJseSwgbmV2ZXIgaW4t YmV0d2Vlbi4gIElmIGl0IGlzIHN0aWxsIHVuaW5pdGlhbGl6ZWQsCnJlbG9hZGluZyB0aGUgZmls ZSB3aWxsIGluaXRpYWxpemUgaXQgcHJvcGVybHkuICBTZWNvbmQsIHJlbG9hZGluZyB0aGUKZmls ZSBvbmNlIHRoZSB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCB3aWxsIG5vdCBhbHRlciBpdDsgdGhh dCBpcwppbXBvcnRhbnQgaWYgdGhlIHVzZXIgaGFzIHJ1biBob29rcyB0byBhbHRlciBwYXJ0IG9m IHRoZSBjb250ZW50cwooc3VjaCBhcywgdG8gcmViaW5kIGtleXMpLiAgVGhpcmQsIGV2YWx1YXRp bmcgdGhlIEBjb2Rle2RlZnZhcn0gZm9ybQp3aXRoIEBrYmR7Qy1NLXh9IHdpbGwgcmVpbml0aWFs aXplIHRoZSBtYXAgY29tcGxldGVseS4KCiAgUHV0dGluZyBzbyBtdWNoIGNvZGUgaW4gdGhlIEBj b2Rle2RlZnZhcn0gZm9ybSBoYXMgb25lIGRpc2FkdmFudGFnZToKaXQgcHV0cyB0aGUgZG9jdW1l bnRhdGlvbiBzdHJpbmcgZmFyIGF3YXkgZnJvbSB0aGUgbGluZSB3aGljaCBuYW1lcyB0aGUKdmFy aWFibGUuICBIZXJlJ3MgYSBzYWZlIHdheSB0byBhdm9pZCB0aGF0OgoKQGV4YW1wbGUKKGRlZnZh ciBteS1tb2RlLW1hcCBuaWwKICBAdmFye2RvY3N0cmluZ30pCih1bmxlc3MgbXktbW9kZS1tYXAK ICAobGV0ICgobWFwIChtYWtlLXNwYXJzZS1rZXltYXApKSkKICAgIChkZWZpbmUta2V5IG1hcCAi XEMtY1xDLWEiICdteS1jb21tYW5kKQogICAgQGRvdHN7fQogICAgKHNldHEgbXktbW9kZS1tYXAg bWFwKSkpCkBlbmQgZXhhbXBsZQoKQG5vaW5kZW50ClRoaXMgaGFzIGFsbCB0aGUgc2FtZSBhZHZh bnRhZ2VzIGFzIHB1dHRpbmcgdGhlIGluaXRpYWxpemF0aW9uIGluc2lkZQp0aGUgQGNvZGV7ZGVm dmFyfSwgZXhjZXB0IHRoYXQgeW91IG11c3QgdHlwZSBAa2Jke0MtTS14fSB0d2ljZSwgb25jZSBv bgplYWNoIGZvcm0sIGlmIHlvdSBkbyB3YW50IHRvIHJlaW5pdGlhbGl6ZSB0aGUgdmFyaWFibGUu CgpAbm9kZSBBY2Nlc3NpbmcgVmFyaWFibGVzCkBzZWN0aW9uIEFjY2Vzc2luZyBWYXJpYWJsZSBW YWx1ZXMKCiAgVGhlIHVzdWFsIHdheSB0byByZWZlcmVuY2UgYSB2YXJpYWJsZSBpcyB0byB3cml0 ZSB0aGUgc3ltYm9sIHdoaWNoCm5hbWVzIGl0LiAgQHhyZWZ7U3ltYm9sIEZvcm1zfS4KCiAgT2Nj YXNpb25hbGx5LCB5b3UgbWF5IHdhbnQgdG8gcmVmZXJlbmNlIGEgdmFyaWFibGUgd2hpY2ggaXMg b25seQpkZXRlcm1pbmVkIGF0IHJ1biB0aW1lLiAgSW4gdGhhdCBjYXNlLCB5b3UgY2Fubm90IHNw ZWNpZnkgdGhlIHZhcmlhYmxlCm5hbWUgaW4gdGhlIHRleHQgb2YgdGhlIHByb2dyYW0uICBZb3Ug Y2FuIHVzZSB0aGUgQGNvZGV7c3ltYm9sLXZhbHVlfQpmdW5jdGlvbiB0byBleHRyYWN0IHRoZSB2 YWx1ZS4KCkBkZWZ1biBzeW1ib2wtdmFsdWUgc3ltYm9sClRoaXMgZnVuY3Rpb24gcmV0dXJucyB0 aGUgdmFsdWUgc3RvcmVkIGluIEB2YXJ7c3ltYm9sfSdzIHZhbHVlIGNlbGwuClRoaXMgaXMgd2hl cmUgdGhlIHZhcmlhYmxlJ3MgY3VycmVudCAoZHluYW1pYykgdmFsdWUgaXMgc3RvcmVkLiAgSWYK dGhlIHZhcmlhYmxlIGhhcyBubyBsb2NhbCBiaW5kaW5nLCB0aGlzIGlzIHNpbXBseSBpdHMgZ2xv YmFsIHZhbHVlLgpJZiB0aGUgdmFyaWFibGUgaXMgdm9pZCwgYSBAY29kZXt2b2lkLXZhcmlhYmxl fSBlcnJvciBpcyBzaWduYWxlZC4KCklmIHRoZSB2YXJpYWJsZSBpcyBsZXhpY2FsbHkgYm91bmQs IHRoZSB2YWx1ZSByZXBvcnRlZCBieQpAY29kZXtzeW1ib2wtdmFsdWV9IGlzIG5vdCBuZWNlc3Nh cmlseSB0aGUgc2FtZSBhcyB0aGUgdmFyaWFibGUncwpsZXhpY2FsIHZhbHVlLCB3aGljaCBpcyBk ZXRlcm1pbmVkIGJ5IHRoZSBsZXhpY2FsIGVudmlyb25tZW50IHJhdGhlcgp0aGFuIHRoZSBzeW1i b2wncyB2YWx1ZSBjZWxsLiAgQHhyZWZ7VmFyaWFibGUgU2NvcGluZ30uCgpAZXhhbXBsZQpAZ3Jv dXAKKHNldHEgYWJyYWNhZGFicmEgNSkKICAgICBAcmVzdWx0e30gNQpAZW5kIGdyb3VwCkBncm91 cAooc2V0cSBmb28gOSkKICAgICBAcmVzdWx0e30gOQpAZW5kIGdyb3VwCgpAZ3JvdXAKOzsgQHJ7 SGVyZSB0aGUgc3ltYm9sIEBjb2Rle2FicmFjYWRhYnJhfX0KOzsgICBAcntpcyB0aGUgc3ltYm9s IHdob3NlIHZhbHVlIGlzIGV4YW1pbmVkLn0KKGxldCAoKGFicmFjYWRhYnJhICdmb28pKQogIChz eW1ib2wtdmFsdWUgJ2FicmFjYWRhYnJhKSkKICAgICBAcmVzdWx0e30gZm9vCkBlbmQgZ3JvdXAK CkBncm91cAo7OyBAcntIZXJlLCB0aGUgdmFsdWUgb2YgQGNvZGV7YWJyYWNhZGFicmF9LH0KOzsg ICBAcnt3aGljaCBpcyBAY29kZXtmb299LH0KOzsgICBAcntpcyB0aGUgc3ltYm9sIHdob3NlIHZh bHVlIGlzIGV4YW1pbmVkLn0KKGxldCAoKGFicmFjYWRhYnJhICdmb28pKQogIChzeW1ib2wtdmFs dWUgYWJyYWNhZGFicmEpKQogICAgIEByZXN1bHR7fSA5CkBlbmQgZ3JvdXAKCkBncm91cAooc3lt Ym9sLXZhbHVlICdhYnJhY2FkYWJyYSkKICAgICBAcmVzdWx0e30gNQpAZW5kIGdyb3VwCkBlbmQg ZXhhbXBsZQpAZW5kIGRlZnVuCgpAbm9kZSBTZXR0aW5nIFZhcmlhYmxlcwpAc2VjdGlvbiBTZXR0 aW5nIFZhcmlhYmxlIFZhbHVlcwoKICBUaGUgdXN1YWwgd2F5IHRvIGNoYW5nZSB0aGUgdmFsdWUg b2YgYSB2YXJpYWJsZSBpcyB3aXRoIHRoZSBzcGVjaWFsCmZvcm0gQGNvZGV7c2V0cX0uICBXaGVu IHlvdSBuZWVkIHRvIGNvbXB1dGUgdGhlIGNob2ljZSBvZiB2YXJpYWJsZSBhdApydW4gdGltZSwg dXNlIHRoZSBmdW5jdGlvbiBAY29kZXtzZXR9LgoKQGRlZnNwZWMgc2V0cSBbc3ltYm9sIGZvcm1d QGRvdHN7fQpUaGlzIHNwZWNpYWwgZm9ybSBpcyB0aGUgbW9zdCBjb21tb24gbWV0aG9kIG9mIGNo YW5naW5nIGEgdmFyaWFibGUncwp2YWx1ZS4gIEVhY2ggQHZhcntzeW1ib2x9IGlzIGdpdmVuIGEg bmV3IHZhbHVlLCB3aGljaCBpcyB0aGUgcmVzdWx0IG9mCmV2YWx1YXRpbmcgdGhlIGNvcnJlc3Bv bmRpbmcgQHZhcntmb3JtfS4gIFRoZSBjdXJyZW50IGJpbmRpbmcgb2YgdGhlCnN5bWJvbCBpcyBj aGFuZ2VkLgoKQGNvZGV7c2V0cX0gZG9lcyBub3QgZXZhbHVhdGUgQHZhcntzeW1ib2x9OyBpdCBz ZXRzIHRoZSBzeW1ib2wgdGhhdCB5b3UKd3JpdGUuICBXZSBzYXkgdGhhdCB0aGlzIGFyZ3VtZW50 IGlzIEBkZm57YXV0b21hdGljYWxseSBxdW90ZWR9LiAgVGhlCkBzYW1we3F9IGluIEBjb2Rle3Nl dHF9IHN0YW5kcyBmb3IgYGBxdW90ZWQnJy4KClRoZSB2YWx1ZSBvZiB0aGUgQGNvZGV7c2V0cX0g Zm9ybSBpcyB0aGUgdmFsdWUgb2YgdGhlIGxhc3QgQHZhcntmb3JtfS4KCkBleGFtcGxlCkBncm91 cAooc2V0cSB4ICgxKyAyKSkKICAgICBAcmVzdWx0e30gMwpAZW5kIGdyb3VwCnggICAgICAgICAg ICAgICAgICAgOyBAcntAY29kZXt4fSBub3cgaGFzIGEgZ2xvYmFsIHZhbHVlLn0KICAgICBAcmVz dWx0e30gMwpAZ3JvdXAKKGxldCAoKHggNSkpCiAgKHNldHEgeCA2KSAgICAgICAgOyBAcntUaGUg bG9jYWwgYmluZGluZyBvZiBAY29kZXt4fSBpcyBzZXQufQogIHgpCiAgICAgQHJlc3VsdHt9IDYK QGVuZCBncm91cAp4ICAgICAgICAgICAgICAgICAgIDsgQHJ7VGhlIGdsb2JhbCB2YWx1ZSBpcyB1 bmNoYW5nZWQufQogICAgIEByZXN1bHR7fSAzCkBlbmQgZXhhbXBsZQoKTm90ZSB0aGF0IHRoZSBm aXJzdCBAdmFye2Zvcm19IGlzIGV2YWx1YXRlZCwgdGhlbiB0aGUgZmlyc3QKQHZhcntzeW1ib2x9 IGlzIHNldCwgdGhlbiB0aGUgc2Vjb25kIEB2YXJ7Zm9ybX0gaXMgZXZhbHVhdGVkLCB0aGVuIHRo ZQpzZWNvbmQgQHZhcntzeW1ib2x9IGlzIHNldCwgYW5kIHNvIG9uOgoKQGV4YW1wbGUKQGdyb3Vw CihzZXRxIHggMTAgICAgICAgICAgOyBAcntOb3RpY2UgdGhhdCBAY29kZXt4fSBpcyBzZXQgYmVm b3JlfQogICAgICB5ICgxKyB4KSkgICAgIDsgICBAcnt0aGUgdmFsdWUgb2YgQGNvZGV7eX0gaXMg Y29tcHV0ZWQufQogICAgIEByZXN1bHR7fSAxMQpAZW5kIGdyb3VwCkBlbmQgZXhhbXBsZQpAZW5k IGRlZnNwZWMKCkBkZWZ1biBzZXQgc3ltYm9sIHZhbHVlClRoaXMgZnVuY3Rpb24gcHV0cyBAdmFy e3ZhbHVlfSBpbiB0aGUgdmFsdWUgY2VsbCBvZiBAdmFye3N5bWJvbH0uClNpbmNlIGl0IGlzIGEg ZnVuY3Rpb24gcmF0aGVyIHRoYW4gYSBzcGVjaWFsIGZvcm0sIHRoZSBleHByZXNzaW9uCndyaXR0 ZW4gZm9yIEB2YXJ7c3ltYm9sfSBpcyBldmFsdWF0ZWQgdG8gb2J0YWluIHRoZSBzeW1ib2wgdG8g c2V0LgpUaGUgcmV0dXJuIHZhbHVlIGlzIEB2YXJ7dmFsdWV9LgoKV2hlbiBkeW5hbWljIHZhcmlh YmxlIGJpbmRpbmcgaXMgaW4gZWZmZWN0ICh0aGUgZGVmYXVsdCksIEBjb2Rle3NldH0KaGFzIHRo ZSBzYW1lIGVmZmVjdCBhcyBAY29kZXtzZXRxfSwgYXBhcnQgZnJvbSB0aGUgZmFjdCB0aGF0CkBj b2Rle3NldH0gZXZhbHVhdGVzIGl0cyBAdmFye3N5bWJvbH0gYXJndW1lbnQgd2hlcmVhcyBAY29k ZXtzZXRxfQpkb2VzIG5vdC4gIEJ1dCB3aGVuIGEgdmFyaWFibGUgaXMgbGV4aWNhbGx5IGJvdW5k LCBAY29kZXtzZXR9IGFmZmVjdHMKaXRzIEBlbXBoe2R5bmFtaWN9IHZhbHVlLCB3aGVyZWFzIEBj b2Rle3NldHF9IGFmZmVjdHMgaXRzIGN1cnJlbnQKKGxleGljYWwpIHZhbHVlLiAgQHhyZWZ7VmFy aWFibGUgU2NvcGluZ30uCgpAZXhhbXBsZQpAZ3JvdXAKKHNldCBvbmUgMSkKQGVycm9ye30gU3lt Ym9sJ3MgdmFsdWUgYXMgdmFyaWFibGUgaXMgdm9pZDogb25lCkBlbmQgZ3JvdXAKQGdyb3VwCihz ZXQgJ29uZSAxKQogICAgIEByZXN1bHR7fSAxCkBlbmQgZ3JvdXAKQGdyb3VwCihzZXQgJ3R3byAn b25lKQogICAgIEByZXN1bHR7fSBvbmUKQGVuZCBncm91cApAZ3JvdXAKKHNldCB0d28gMikgICAg ICAgICA7IEBye0Bjb2Rle3R3b30gZXZhbHVhdGVzIHRvIHN5bWJvbCBAY29kZXtvbmV9Ln0KICAg ICBAcmVzdWx0e30gMgpAZW5kIGdyb3VwCkBncm91cApvbmUgICAgICAgICAgICAgICAgIDsgQHJ7 U28gaXQgaXMgQGNvZGV7b25lfSB0aGF0IHdhcyBzZXQufQogICAgIEByZXN1bHR7fSAyCihsZXQg KChvbmUgMSkpICAgICAgOyBAcntUaGlzIGJpbmRpbmcgb2YgQGNvZGV7b25lfSBpcyBzZXQsfQog IChzZXQgJ29uZSAzKSAgICAgIDsgICBAcntub3QgdGhlIGdsb2JhbCB2YWx1ZS59CiAgb25lKQog ICAgIEByZXN1bHR7fSAzCkBlbmQgZ3JvdXAKQGdyb3VwCm9uZQogICAgIEByZXN1bHR7fSAyCkBl bmQgZ3JvdXAKQGVuZCBleGFtcGxlCgpJZiBAdmFye3N5bWJvbH0gaXMgbm90IGFjdHVhbGx5IGEg c3ltYm9sLCBhIEBjb2Rle3dyb25nLXR5cGUtYXJndW1lbnR9CmVycm9yIGlzIHNpZ25hbGVkLgoK QGV4YW1wbGUKKHNldCAnKHggeSkgJ3opCkBlcnJvcnt9IFdyb25nIHR5cGUgYXJndW1lbnQ6IHN5 bWJvbHAsICh4IHkpCkBlbmQgZXhhbXBsZQpAZW5kIGRlZnVuCgpAbm9kZSBXYXRjaGluZyBWYXJp YWJsZXMKQHNlY3Rpb24gUnVubmluZyBhIGZ1bmN0aW9uIHdoZW4gYSB2YXJpYWJsZSBpcyBjaGFu Z2VkLgpAY2luZGV4IHZhcmlhYmxlIHdhdGNocG9pbnRzCkBjaW5kZXggd2F0Y2hwb2ludHMgZm9y IExpc3AgdmFyaWFibGVzCgpJdCBpcyBzb21ldGltZXMgdXNlZnVsIHRvIHRha2Ugc29tZSBhY3Rp b24gd2hlbiBhIHZhcmlhYmxlIGNoYW5nZXMgaXRzCnZhbHVlLiAgVGhlIHdhdGNocG9pbnQgZmFj aWxpdHkgcHJvdmlkZXMgdGhlIG1lYW5zIHRvIGRvIHNvLiAgU29tZQpwb3NzaWJsZSB1c2VzIGZv ciB0aGlzIGZlYXR1cmUgaW5jbHVkZSBrZWVwaW5nIGRpc3BsYXkgaW4gc3luYyB3aXRoCnZhcmlh YmxlIHNldHRpbmdzLCBhbmQgaW52b2tpbmcgdGhlIGRlYnVnZ2VyIHRvIHRyYWNrIGRvd24gdW5l eHBlY3RlZApjaGFuZ2VzIHRvIHZhcmlhYmxlcyAoQHB4cmVme1ZhcmlhYmxlIERlYnVnZ2luZ30p LgoKVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgbWF5IGJlIHVzZWQgdG8gbWFuaXB1bGF0ZSBhbmQg cXVlcnkgdGhlIHdhdGNoCmZ1bmN0aW9ucyBmb3IgYSB2YXJpYWJsZS4KCkBkZWZ1biBhZGQtdmFy aWFibGUtd2F0Y2hlciBzeW1ib2wgd2F0Y2gtZnVuY3Rpb24KVGhpcyBmdW5jdGlvbiBhcnJhbmdl cyBmb3IgQHZhcnt3YXRjaC1mdW5jdGlvbn0gdG8gYmUgY2FsbGVkIHdoZW5ldmVyCkB2YXJ7c3lt Ym9sfSBpcyBtb2RpZmllZC4gIE1vZGlmaWNhdGlvbnMgdGhyb3VnaCBhbGlhc2VzCihAcHhyZWZ7 VmFyaWFibGUgQWxpYXNlc30pIHdpbGwgaGF2ZSB0aGUgc2FtZSBlZmZlY3QuCgpAdmFye3dhdGNo LWZ1bmN0aW9ufSB3aWxsIGJlIGNhbGxlZCB3aXRoIDQgYXJndW1lbnRzOiAoQHZhcntzeW1ib2x9 CkB2YXJ7bmV3dmFsfSBAdmFye29wZXJhdGlvbn0gQHZhcnt3aGVyZX0pLgoKQHZhcntzeW1ib2x9 IGlzIHRoZSB2YXJpYWJsZSBiZWluZyBjaGFuZ2VkLgpAdmFye25ld3ZhbH0gaXMgdGhlIHZhbHVl IGl0IHdpbGwgYmUgY2hhbmdlZCB0by4KQHZhcntvcGVyYXRpb259IGlzIGEgc3ltYm9sIHJlcHJl c2VudGluZyB0aGUga2luZCBvZiBjaGFuZ2UsIG9uZSBvZjoKYHNldCcsIGBsZXQnLCBgdW5sZXQn LCBgbWFrdW5ib3VuZCcsIGFuZCBgZGVmdmFyYWxpYXMnLgpAdmFye3doZXJlfSBpcyBhIGJ1ZmZl ciBpZiB0aGUgYnVmZmVyLWxvY2FsIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBpcwpiZWluZyBjaGFu Z2VkLCBuaWwgb3RoZXJ3aXNlLgpAZW5kIGRlZnVuCgpAZGVmdW4gcmVtb3ZlLXZhcmlhYmxlLXdh dGNoIHN5bWJvbCB3YXRjaC1mdW5jdGlvbgpUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgQHZhcnt3YXRj aC1mdW5jdGlvbn0gZnJvbSBAdmFye3N5bWJvbH0ncyBsaXN0IG9mCndhdGNoZXJzLgpAZW5kIGRl ZnVuCgpAZGVmdW4gZ2V0LXZhcmlhYmxlLXdhdGNoZXJzIHN5bWJvbApUaGlzIGZ1bmN0aW9uIHJl dHVybnMgdGhlIGxpc3Qgb2YgQHZhcntzeW1ib2x9J3MgYWN0aXZlIHdhdGNoZXIKZnVuY3Rpb25z LgpAZW5kIGRlZnVuCgpAc3Vic2VjdGlvbiBMaW1pdGF0aW9ucwoKVGhlcmUgYXJlIGEgY291cGxl IG9mIHdheXMgaW4gd2hpY2ggYSB2YXJpYWJsZSBjb3VsZCBiZSBtb2RpZmllZCAob3IgYXQKbGVh c3QgYXBwZWFyIHRvIGJlIG1vZGlmaWVkKSB3aXRob3V0IHRyaWdnZXJpbmcgYSB3YXRjaHBvaW50 LgoKU2luY2Ugd2F0Y2hwb2ludHMgYXJlIGF0dGFjaGVkIHRvIHN5bWJvbHMsIG1vZGlmaWNhdGlv biB0byB0aGUKb2JqZWN0cyBjb250YWluZWQgd2l0aGluIHZhcmlhYmxlcyAoZS5nLiwgYnkgYSBs aXN0IG1vZGlmaWNhdGlvbgpmdW5jdGlvbiBAcHhyZWZ7TW9kaWZ5aW5nIExpc3RzfSkgaXMgbm90 IGNhdWdodCBieSB0aGlzIG1lY2hhbmlzbS4KCkFkZGl0aW9uYWxseSwgQyBjb2RlIGNhbiBtb2Rp ZnkgdGhlIHZhbHVlIG9mIHZhcmlhYmxlcyBkaXJlY3RseSwKYnlwYXNzaW5nIHRoZSB3YXRjaHBv aW50IG1lY2hhbmlzbS4KCkEgbWlub3IgbGltaXRhdGlvbiBvZiB0aGlzIGZlYXR1cmUsIGFnYWlu IGJlY2F1c2UgaXQgdGFyZ2V0cyBzeW1ib2xzLAppcyB0aGF0IG9ubHkgdmFyaWFibGVzIG9mIGR5 bmFtaWMgc2NvcGUgbWF5IGJlIHdhdGNoZWQuICBUaGlzIHBvc2VzCmxpdHRsZSBkaWZmaWN1bHR5 LCBzaW5jZSBtb2RpZmljYXRpb25zIHRvIGxleGljYWwgdmFyaWFibGVzIGNhbiBiZQpkaXNjb3Zl cmVkIGVhc2lseSBieSBpbnNwZWN0aW5nIHRoZSBjb2RlIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhl CnZhcmlhYmxlICh1bmxpa2UgZHluYW1pYyB2YXJpYWJsZXMsIHdoaWNoIGNhbiBiZSBtb2RpZmll ZCBieSBhbnkgY29kZQphdCBhbGwsIEBweHJlZntWYXJpYWJsZSBTY29waW5nfSkuCgoKQG5vZGUg VmFyaWFibGUgU2NvcGluZwpAc2VjdGlvbiBTY29waW5nIFJ1bGVzIGZvciBWYXJpYWJsZSBCaW5k aW5ncwpAY2luZGV4IHNjb3BpbmcgcnVsZQoKICBXaGVuIHlvdSBjcmVhdGUgYSBsb2NhbCBiaW5k aW5nIGZvciBhIHZhcmlhYmxlLCB0aGF0IGJpbmRpbmcgdGFrZXMKZWZmZWN0IG9ubHkgd2l0aGlu IGEgbGltaXRlZCBwb3J0aW9uIG9mIHRoZSBwcm9ncmFtIChAcHhyZWZ7TG9jYWwKVmFyaWFibGVz fSkuICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGV4YWN0bHkgd2hhdCB0aGlzIG1lYW5zLgoKQGNp bmRleCBzY29wZQpAY2luZGV4IGV4dGVudAogIEVhY2ggbG9jYWwgYmluZGluZyBoYXMgYSBjZXJ0 YWluIEBkZm57c2NvcGV9IGFuZCBAZGZue2V4dGVudH0uCkBkZm57U2NvcGV9IHJlZmVycyB0byBA ZW1waHt3aGVyZX0gaW4gdGhlIHRleHR1YWwgc291cmNlIGNvZGUgdGhlCmJpbmRpbmcgY2FuIGJl IGFjY2Vzc2VkLiAgQGRmbntFeHRlbnR9IHJlZmVycyB0byBAZW1waHt3aGVufSwgYXMgdGhlCnBy b2dyYW0gaXMgZXhlY3V0aW5nLCB0aGUgYmluZGluZyBleGlzdHMuCgpAY2luZGV4IGR5bmFtaWMg YmluZGluZwpAY2luZGV4IGR5bmFtaWMgc2NvcGUKQGNpbmRleCBkeW5hbWljIGV4dGVudAogIEJ5 IGRlZmF1bHQsIHRoZSBsb2NhbCBiaW5kaW5ncyB0aGF0IEVtYWNzIGNyZWF0ZXMgYXJlIEBkZm57 ZHluYW1pYwpiaW5kaW5nc30uICBTdWNoIGEgYmluZGluZyBoYXMgQGRmbntkeW5hbWljIHNjb3Bl fSwgbWVhbmluZyB0aGF0IGFueQpwYXJ0IG9mIHRoZSBwcm9ncmFtIGNhbiBwb3RlbnRpYWxseSBh Y2Nlc3MgdGhlIHZhcmlhYmxlIGJpbmRpbmcuICBJdAphbHNvIGhhcyBAZGZue2R5bmFtaWMgZXh0 ZW50fSwgbWVhbmluZyB0aGF0IHRoZSBiaW5kaW5nIGxhc3RzIG9ubHkKd2hpbGUgdGhlIGJpbmRp bmcgY29uc3RydWN0IChzdWNoIGFzIHRoZSBib2R5IG9mIGEgQGNvZGV7bGV0fSBmb3JtKSBpcwpi ZWluZyBleGVjdXRlZC4KCkBjaW5kZXggbGV4aWNhbCBiaW5kaW5nCkBjaW5kZXggbGV4aWNhbCBz Y29wZQpAY2luZGV4IGluZGVmaW5pdGUgZXh0ZW50CiAgRW1hY3MgY2FuIG9wdGlvbmFsbHkgY3Jl YXRlIEBkZm57bGV4aWNhbCBiaW5kaW5nc30uICBBIGxleGljYWwKYmluZGluZyBoYXMgQGRmbnts ZXhpY2FsIHNjb3BlfSwgbWVhbmluZyB0aGF0IGFueSByZWZlcmVuY2UgdG8gdGhlCnZhcmlhYmxl IG11c3QgYmUgbG9jYXRlZCB0ZXh0dWFsbHkgd2l0aGluIHRoZSBiaW5kaW5nCmNvbnN0cnVjdEBm b290bm90ZXtXaXRoIHNvbWUgZXhjZXB0aW9uczsgZm9yIGluc3RhbmNlLCBhIGxleGljYWwKYmlu ZGluZyBjYW4gYWxzbyBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBMaXNwIGRlYnVnZ2VyLn0uICBJdCBh bHNvIGhhcwpAZGZue2luZGVmaW5pdGUgZXh0ZW50fSwgbWVhbmluZyB0aGF0IHVuZGVyIHNvbWUg Y2lyY3Vtc3RhbmNlcyB0aGUKYmluZGluZyBjYW4gbGl2ZSBvbiBldmVuIGFmdGVyIHRoZSBiaW5k aW5nIGNvbnN0cnVjdCBoYXMgZmluaXNoZWQKZXhlY3V0aW5nLCBieSBtZWFucyBvZiBzcGVjaWFs IG9iamVjdHMgY2FsbGVkIEBkZm57Y2xvc3VyZXN9LgoKICBUaGUgZm9sbG93aW5nIHN1YnNlY3Rp b25zIGRlc2NyaWJlIGR5bmFtaWMgYmluZGluZyBhbmQgbGV4aWNhbApiaW5kaW5nIGluIGdyZWF0 ZXIgZGV0YWlsLCBhbmQgaG93IHRvIGVuYWJsZSBsZXhpY2FsIGJpbmRpbmcgaW4gRW1hY3MKTGlz cCBwcm9ncmFtcy4KCkBtZW51CiogRHluYW1pYyBCaW5kaW5nOjogICAgICAgICBUaGUgZGVmYXVs dCBmb3IgYmluZGluZyBsb2NhbCB2YXJpYWJsZXMgaW4gRW1hY3MuCiogRHluYW1pYyBCaW5kaW5n IFRpcHM6OiAgICBBdm9pZGluZyBwcm9ibGVtcyB3aXRoIGR5bmFtaWMgYmluZGluZy4KKiBMZXhp Y2FsIEJpbmRpbmc6OiAgICAgICAgIEEgZGlmZmVyZW50IHR5cGUgb2YgbG9jYWwgdmFyaWFibGUg YmluZGluZy4KKiBVc2luZyBMZXhpY2FsIEJpbmRpbmc6OiAgIEhvdyB0byBlbmFibGUgbGV4aWNh bCBiaW5kaW5nLgpAZW5kIG1lbnUKCkBub2RlIER5bmFtaWMgQmluZGluZwpAc3Vic2VjdGlvbiBE eW5hbWljIEJpbmRpbmcKCiAgQnkgZGVmYXVsdCwgdGhlIGxvY2FsIHZhcmlhYmxlIGJpbmRpbmdz IG1hZGUgYnkgRW1hY3MgYXJlIGR5bmFtaWMKYmluZGluZ3MuICBXaGVuIGEgdmFyaWFibGUgaXMg ZHluYW1pY2FsbHkgYm91bmQsIGl0cyBjdXJyZW50IGJpbmRpbmcKYXQgYW55IHBvaW50IGluIHRo ZSBleGVjdXRpb24gb2YgdGhlIExpc3AgcHJvZ3JhbSBpcyBzaW1wbHkgdGhlIG1vc3QKcmVjZW50 bHktY3JlYXRlZCBkeW5hbWljIGxvY2FsIGJpbmRpbmcgZm9yIHRoYXQgc3ltYm9sLCBvciB0aGUg Z2xvYmFsCmJpbmRpbmcgaWYgdGhlcmUgaXMgbm8gc3VjaCBsb2NhbCBiaW5kaW5nLgoKICBEeW5h bWljIGJpbmRpbmdzIGhhdmUgZHluYW1pYyBzY29wZSBhbmQgZXh0ZW50LCBhcyBzaG93biBieSB0 aGUKZm9sbG93aW5nIGV4YW1wbGU6CgpAZXhhbXBsZQpAZ3JvdXAKKGRlZnZhciB4IC05OSkgIDsg QHJ7QGNvZGV7eH0gcmVjZWl2ZXMgYW4gaW5pdGlhbCB2YWx1ZSBvZiBAbWludXN7fTk5Ln0KCihk ZWZ1biBnZXR4ICgpCiAgeCkgICAgICAgICAgICA7IEBye0Bjb2Rle3h9IGlzIHVzZWQgZnJlZSBp biB0aGlzIGZ1bmN0aW9uLn0KCihsZXQgKCh4IDEpKSAgICA7IEBye0Bjb2Rle3h9IGlzIGR5bmFt aWNhbGx5IGJvdW5kLn0KICAoZ2V0eCkpCiAgICAgQHJlc3VsdHt9IDEKCjs7IEBye0FmdGVyIHRo ZSBAY29kZXtsZXR9IGZvcm0gZmluaXNoZXMsIEBjb2Rle3h9IHJldmVydHMgdG8gaXRzfQo7OyBA cntwcmV2aW91cyB2YWx1ZSwgd2hpY2ggaXMgQG1pbnVze305OS59CgooZ2V0eCkKICAgICBAcmVz dWx0e30gLTk5CkBlbmQgZ3JvdXAKQGVuZCBleGFtcGxlCgpAbm9pbmRlbnQKVGhlIGZ1bmN0aW9u IEBjb2Rle2dldHh9IHJlZmVycyB0byBAY29kZXt4fS4gIFRoaXMgaXMgYSBAZGZue2ZyZWV9CnJl ZmVyZW5jZSwgaW4gdGhlIHNlbnNlIHRoYXQgdGhlcmUgaXMgbm8gYmluZGluZyBmb3IgQGNvZGV7 eH0gd2l0aGluCnRoYXQgQGNvZGV7ZGVmdW59IGNvbnN0cnVjdCBpdHNlbGYuICBXaGVuIHdlIGNh bGwgQGNvZGV7Z2V0eH0gZnJvbQp3aXRoaW4gYSBAY29kZXtsZXR9IGZvcm0gaW4gd2hpY2ggQGNv ZGV7eH0gaXMgKGR5bmFtaWNhbGx5KSBib3VuZCwgaXQKcmV0cmlldmVzIHRoZSBsb2NhbCB2YWx1 ZSAoaS5lLiwgMSkuICBCdXQgd2hlbiB3ZSBjYWxsIEBjb2Rle2dldHh9Cm91dHNpZGUgdGhlIEBj b2Rle2xldH0gZm9ybSwgaXQgcmV0cmlldmVzIHRoZSBnbG9iYWwgdmFsdWUgKGkuZS4sCkBtaW51 c3t9OTkpLgoKICBIZXJlIGlzIGFub3RoZXIgZXhhbXBsZSwgd2hpY2ggaWxsdXN0cmF0ZXMgc2V0 dGluZyBhIGR5bmFtaWNhbGx5CmJvdW5kIHZhcmlhYmxlIHVzaW5nIEBjb2Rle3NldHF9OgoKQGV4 YW1wbGUKQGdyb3VwCihkZWZ2YXIgeCAtOTkpICAgICAgOyBAcntAY29kZXt4fSByZWNlaXZlcyBh biBpbml0aWFsIHZhbHVlIG9mIEBtaW51c3t9OTkufQoKKGRlZnVuIGFkZHggKCkKICAoc2V0cSB4 ICgxKyB4KSkpICA7IEBye0FkZCAxIHRvIEBjb2Rle3h9IGFuZCByZXR1cm4gaXRzIG5ldyB2YWx1 ZS59CgoobGV0ICgoeCAxKSkKICAoYWRkeCkKICAoYWRkeCkpCiAgICAgQHJlc3VsdHt9IDMgICAg ICAgICAgIDsgQHJ7VGhlIHR3byBAY29kZXthZGR4fSBjYWxscyBhZGQgdG8gQGNvZGV7eH0gdHdp Y2UufQoKOzsgQHJ7QWZ0ZXIgdGhlIEBjb2Rle2xldH0gZm9ybSBmaW5pc2hlcywgQGNvZGV7eH0g cmV2ZXJ0cyB0byBpdHN9Cjs7IEBye3ByZXZpb3VzIHZhbHVlLCB3aGljaCBpcyBAbWludXN7fTk5 Ln0KCihhZGR4KQogICAgIEByZXN1bHR7fSAtOTgKQGVuZCBncm91cApAZW5kIGV4YW1wbGUKCiAg RHluYW1pYyBiaW5kaW5nIGlzIGltcGxlbWVudGVkIGluIEVtYWNzIExpc3AgaW4gYSBzaW1wbGUg d2F5LiAgRWFjaApzeW1ib2wgaGFzIGEgdmFsdWUgY2VsbCwgd2hpY2ggc3BlY2lmaWVzIGl0cyBj dXJyZW50IGR5bmFtaWMgdmFsdWUgKG9yCmFic2VuY2Ugb2YgdmFsdWUpLiAgQHhyZWZ7U3ltYm9s IENvbXBvbmVudHN9LiAgV2hlbiBhIHN5bWJvbCBpcyBnaXZlbgphIGR5bmFtaWMgbG9jYWwgYmlu ZGluZywgRW1hY3MgcmVjb3JkcyB0aGUgY29udGVudHMgb2YgdGhlIHZhbHVlIGNlbGwKKG9yIGFi c2VuY2UgdGhlcmVvZikgaW4gYSBzdGFjaywgYW5kIHN0b3JlcyB0aGUgbmV3IGxvY2FsIHZhbHVl IGluIHRoZQp2YWx1ZSBjZWxsLiAgV2hlbiB0aGUgYmluZGluZyBjb25zdHJ1Y3QgZmluaXNoZXMg ZXhlY3V0aW5nLCBFbWFjcyBwb3BzCnRoZSBvbGQgdmFsdWUgb2ZmIHRoZSBzdGFjaywgYW5kIHB1 dHMgaXQgaW4gdGhlIHZhbHVlIGNlbGwuCgpAbm9kZSBEeW5hbWljIEJpbmRpbmcgVGlwcwpAc3Vi c2VjdGlvbiBQcm9wZXIgVXNlIG9mIER5bmFtaWMgQmluZGluZwoKICBEeW5hbWljIGJpbmRpbmcg aXMgYSBwb3dlcmZ1bCBmZWF0dXJlLCBhcyBpdCBhbGxvd3MgcHJvZ3JhbXMgdG8KcmVmZXIgdG8g dmFyaWFibGVzIHRoYXQgYXJlIG5vdCBkZWZpbmVkIHdpdGhpbiB0aGVpciBsb2NhbCB0ZXh0dWFs CnNjb3BlLiAgSG93ZXZlciwgaWYgdXNlZCB3aXRob3V0IHJlc3RyYWludCwgdGhpcyBjYW4gYWxz byBtYWtlCnByb2dyYW1zIGhhcmQgdG8gdW5kZXJzdGFuZC4gIFRoZXJlIGFyZSB0d28gY2xlYW4g d2F5cyB0byB1c2UgdGhpcwp0ZWNobmlxdWU6CgpAaXRlbWl6ZSBAYnVsbGV0CkBpdGVtCklmIGEg dmFyaWFibGUgaGFzIG5vIGdsb2JhbCBkZWZpbml0aW9uLCB1c2UgaXQgYXMgYSBsb2NhbCB2YXJp YWJsZQpvbmx5IHdpdGhpbiBhIGJpbmRpbmcgY29uc3RydWN0LCBzdWNoIGFzIHRoZSBib2R5IG9m IHRoZSBAY29kZXtsZXR9CmZvcm0gd2hlcmUgdGhlIHZhcmlhYmxlIHdhcyBib3VuZC4gIElmIHRo aXMgY29udmVudGlvbiBpcyBmb2xsb3dlZApjb25zaXN0ZW50bHkgdGhyb3VnaG91dCBhIHByb2dy YW0sIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgd2lsbCBub3QKYWZmZWN0LCBub3IgYmUgYWZm ZWN0ZWQgYnksIGFueSB1c2VzIG9mIHRoZSBzYW1lIHZhcmlhYmxlIHN5bWJvbAplbHNld2hlcmUg aW4gdGhlIHByb2dyYW0uCgpAaXRlbQpPdGhlcndpc2UsIGRlZmluZSB0aGUgdmFyaWFibGUgd2l0 aCBAY29kZXtkZWZ2YXJ9LCBAY29kZXtkZWZjb25zdH0sIG9yCkBjb2Rle2RlZmN1c3RvbX0uICBA eHJlZntEZWZpbmluZyBWYXJpYWJsZXN9LiAgVXN1YWxseSwgdGhlIGRlZmluaXRpb24Kc2hvdWxk IGJlIGF0IHRvcC1sZXZlbCBpbiBhbiBFbWFjcyBMaXNwIGZpbGUuICBBcyBmYXIgYXMgcG9zc2li bGUsIGl0CnNob3VsZCBpbmNsdWRlIGEgZG9jdW1lbnRhdGlvbiBzdHJpbmcgd2hpY2ggZXhwbGFp bnMgdGhlIG1lYW5pbmcgYW5kCnB1cnBvc2Ugb2YgdGhlIHZhcmlhYmxlLiAgWW91IHNob3VsZCBh bHNvIGNob29zZSB0aGUgdmFyaWFibGUncyBuYW1lCnRvIGF2b2lkIG5hbWUgY29uZmxpY3RzIChA cHhyZWZ7Q29kaW5nIENvbnZlbnRpb25zfSkuCgpUaGVuIHlvdSBjYW4gYmluZCB0aGUgdmFyaWFi bGUgYW55d2hlcmUgaW4gYSBwcm9ncmFtLCBrbm93aW5nIHJlbGlhYmx5CndoYXQgdGhlIGVmZmVj dCB3aWxsIGJlLiAgV2hlcmV2ZXIgeW91IGVuY291bnRlciB0aGUgdmFyaWFibGUsIGl0IHdpbGwK YmUgZWFzeSB0byByZWZlciBiYWNrIHRvIHRoZSBkZWZpbml0aW9uLCBlLmcuLCB2aWEgdGhlIEBr YmR7Qy1oIHZ9CmNvbW1hbmQgKHByb3ZpZGVkIHRoZSB2YXJpYWJsZSBkZWZpbml0aW9uIGhhcyBi ZWVuIGxvYWRlZCBpbnRvIEVtYWNzKS4KQHhyZWZ7TmFtZSBIZWxwLCwsIGVtYWNzLCBUaGUgR05V IEVtYWNzIE1hbnVhbH0uCgpGb3IgZXhhbXBsZSwgaXQgaXMgY29tbW9uIHRvIHVzZSBsb2NhbCBi aW5kaW5ncyBmb3IgY3VzdG9taXphYmxlCnZhcmlhYmxlcyBsaWtlIEBjb2Rle2Nhc2UtZm9sZC1z ZWFyY2h9OgoKQGV4YW1wbGUKQGdyb3VwCihkZWZ1biBzZWFyY2gtZm9yLWFiYyAoKQogICJTZWFy Y2ggZm9yIHRoZSBzdHJpbmcgXCJhYmNcIiwgaWdub3JpbmcgY2FzZSBkaWZmZXJlbmNlcy4iCiAg KGxldCAoKGNhc2UtZm9sZC1zZWFyY2ggbmlsKSkKICAgIChyZS1zZWFyY2gtZm9yd2FyZCAiYWJj IikpKQpAZW5kIGdyb3VwCkBlbmQgZXhhbXBsZQpAZW5kIGl0ZW1pemUKCkBub2RlIExleGljYWwg QmluZGluZwpAc3Vic2VjdGlvbiBMZXhpY2FsIEJpbmRpbmcKCiAgTGV4aWNhbCBiaW5kaW5nIHdh cyBpbnRyb2R1Y2VkIHRvIEVtYWNzLCBhcyBhbiBvcHRpb25hbCBmZWF0dXJlLCBpbgp2ZXJzaW9u IDI0LjEuICBXZSBleHBlY3QgaXRzIGltcG9ydGFuY2UgdG8gaW5jcmVhc2UgaW4gdGhlIGZ1dHVy ZS4KTGV4aWNhbCBiaW5kaW5nIG9wZW5zIHVwIG1hbnkgbW9yZSBvcHBvcnR1bml0aWVzIGZvciBv cHRpbWl6YXRpb24sIHNvCnByb2dyYW1zIHVzaW5nIGl0IGFyZSBsaWtlbHkgdG8gcnVuIGZhc3Rl ciBpbiBmdXR1cmUgRW1hY3MgdmVyc2lvbnMuCkxleGljYWwgYmluZGluZyBpcyBhbHNvIG1vcmUg Y29tcGF0aWJsZSB3aXRoIGNvbmN1cnJlbmN5LCB3aGljaCB3ZQp3YW50IHRvIGFkZCB0byBFbWFj cyBpbiB0aGUgZnV0dXJlLgoKICBBIGxleGljYWxseS1ib3VuZCB2YXJpYWJsZSBoYXMgQGRmbnts ZXhpY2FsIHNjb3BlfSwgbWVhbmluZyB0aGF0IGFueQpyZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxl IG11c3QgYmUgbG9jYXRlZCB0ZXh0dWFsbHkgd2l0aGluIHRoZSBiaW5kaW5nCmNvbnN0cnVjdC4g IEhlcmUgaXMgYW4gZXhhbXBsZQpAaWZ0ZXgKKHNlZSB0aGUgbmV4dCBzdWJzZWN0aW9uLCBmb3Ig aG93IHRvIGFjdHVhbGx5IGVuYWJsZSBsZXhpY2FsIGJpbmRpbmcpOgpAZW5kIGlmdGV4CkBpZm5v dHRleAooQHB4cmVme1VzaW5nIExleGljYWwgQmluZGluZ30sIGZvciBob3cgdG8gYWN0dWFsbHkg ZW5hYmxlIGxleGljYWwgYmluZGluZyk6CkBlbmQgaWZub3R0ZXgKCkBleGFtcGxlCkBncm91cAoo bGV0ICgoeCAxKSkgICAgOyBAcntAY29kZXt4fSBpcyBsZXhpY2FsbHkgYm91bmQufQogICgrIHgg MykpCiAgICAgQHJlc3VsdHt9IDQKCihkZWZ1biBnZXR4ICgpCiAgeCkgICAgICAgICAgICA7IEBy e0Bjb2Rle3h9IGlzIHVzZWQgZnJlZSBpbiB0aGlzIGZ1bmN0aW9uLn0KCihsZXQgKCh4IDEpKSAg ICA7IEBye0Bjb2Rle3h9IGlzIGxleGljYWxseSBib3VuZC59CiAgKGdldHgpKQpAZXJyb3J7fSBT eW1ib2wncyB2YWx1ZSBhcyB2YXJpYWJsZSBpcyB2b2lkOiB4CkBlbmQgZ3JvdXAKQGVuZCBleGFt cGxlCgpAbm9pbmRlbnQKSGVyZSwgdGhlIHZhcmlhYmxlIEBjb2Rle3h9IGhhcyBubyBnbG9iYWwg dmFsdWUuICBXaGVuIGl0IGlzIGxleGljYWxseQpib3VuZCB3aXRoaW4gYSBAY29kZXtsZXR9IGZv cm0sIGl0IGNhbiBiZSB1c2VkIGluIHRoZSB0ZXh0dWFsIGNvbmZpbmVzCm9mIHRoYXQgQGNvZGV7 bGV0fSBmb3JtLiAgQnV0IGl0IGNhbiBAZW1waHtub3R9IGJlIHVzZWQgZnJvbSB3aXRoaW4gYQpA Y29kZXtnZXR4fSBmdW5jdGlvbiBjYWxsZWQgZnJvbSB0aGUgQGNvZGV7bGV0fSBmb3JtLCBzaW5j ZSB0aGUKZnVuY3Rpb24gZGVmaW5pdGlvbiBvZiBAY29kZXtnZXR4fSBvY2N1cnMgb3V0c2lkZSB0 aGUgQGNvZGV7bGV0fSBmb3JtCml0c2VsZi4KCkBjaW5kZXggbGV4aWNhbCBlbnZpcm9ubWVudAog IEhlcmUgaXMgaG93IGxleGljYWwgYmluZGluZyB3b3Jrcy4gIEVhY2ggYmluZGluZyBjb25zdHJ1 Y3QgZGVmaW5lcyBhCkBkZm57bGV4aWNhbCBlbnZpcm9ubWVudH0sIHNwZWNpZnlpbmcgdGhlIHZh cmlhYmxlcyB0aGF0IGFyZSBib3VuZAp3aXRoaW4gdGhlIGNvbnN0cnVjdCBhbmQgdGhlaXIgbG9j YWwgdmFsdWVzLiAgV2hlbiB0aGUgTGlzcCBldmFsdWF0b3IKd2FudHMgdGhlIGN1cnJlbnQgdmFs dWUgb2YgYSB2YXJpYWJsZSwgaXQgbG9va3MgZmlyc3QgaW4gdGhlIGxleGljYWwKZW52aXJvbm1l bnQ7IGlmIHRoZSB2YXJpYWJsZSBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZXJlLCBpdCBsb29rcyBp bgp0aGUgc3ltYm9sJ3MgdmFsdWUgY2VsbCwgd2hlcmUgdGhlIGR5bmFtaWMgdmFsdWUgaXMgc3Rv cmVkLgoKICAoSW50ZXJuYWxseSwgdGhlIGxleGljYWwgZW52aXJvbm1lbnQgaXMgYW4gYWxpc3Qg b2Ygc3ltYm9sLXZhbHVlCnBhaXJzLCB3aXRoIHRoZSBmaW5hbCBlbGVtZW50IGluIHRoZSBhbGlz dCBiZWluZyB0aGUgc3ltYm9sIEBjb2Rle3R9CnJhdGhlciB0aGFuIGEgY29ucyBjZWxsLiAgU3Vj aCBhbiBhbGlzdCBjYW4gYmUgcGFzc2VkIGFzIHRoZSBzZWNvbmQKYXJndW1lbnQgdG8gdGhlIEBj b2Rle2V2YWx9IGZ1bmN0aW9uLCBpbiBvcmRlciB0byBzcGVjaWZ5IGEgbGV4aWNhbAplbnZpcm9u bWVudCBpbiB3aGljaCB0byBldmFsdWF0ZSBhIGZvcm0uICBAeHJlZntFdmFsfS4gIE1vc3QgRW1h Y3MKTGlzcCBwcm9ncmFtcywgaG93ZXZlciwgc2hvdWxkIG5vdCBpbnRlcmFjdCBkaXJlY3RseSB3 aXRoIGxleGljYWwKZW52aXJvbm1lbnRzIGluIHRoaXMgd2F5OyBvbmx5IHNwZWNpYWxpemVkIHBy b2dyYW1zIGxpa2UgZGVidWdnZXJzLikKCkBjaW5kZXggY2xvc3VyZXMsIGV4YW1wbGUgb2YgdXNp bmcKICBMZXhpY2FsIGJpbmRpbmdzIGhhdmUgaW5kZWZpbml0ZSBleHRlbnQuICBFdmVuIGFmdGVy IGEgYmluZGluZwpjb25zdHJ1Y3QgaGFzIGZpbmlzaGVkIGV4ZWN1dGluZywgaXRzIGxleGljYWwg ZW52aXJvbm1lbnQgY2FuIGJlCmBga2VwdCBhcm91bmQnJyBpbiBMaXNwIG9iamVjdHMgY2FsbGVk IEBkZm57Y2xvc3VyZXN9LiAgQSBjbG9zdXJlIGlzCmNyZWF0ZWQgd2hlbiB5b3UgZGVmaW5lIGEg bmFtZWQgb3IgYW5vbnltb3VzIGZ1bmN0aW9uIHdpdGggbGV4aWNhbApiaW5kaW5nIGVuYWJsZWQu ICBAeHJlZntDbG9zdXJlc30sIGZvciBkZXRhaWxzLgoKICBXaGVuIGEgY2xvc3VyZSBpcyBjYWxs ZWQgYXMgYSBmdW5jdGlvbiwgYW55IGxleGljYWwgdmFyaWFibGUKcmVmZXJlbmNlcyB3aXRoaW4g aXRzIGRlZmluaXRpb24gdXNlIHRoZSByZXRhaW5lZCBsZXhpY2FsIGVudmlyb25tZW50LgpIZXJl IGlzIGFuIGV4YW1wbGU6CgpAZXhhbXBsZQooZGVmdmFyIG15LXRpY2tlciBuaWwpICAgOyBAcntX ZSB3aWxsIHVzZSB0aGlzIGR5bmFtaWNhbGx5IGJvdW5kfQogICAgICAgICAgICAgICAgICAgICAg ICAgOyBAcnt2YXJpYWJsZSB0byBzdG9yZSBhIGNsb3N1cmUufQoKKGxldCAoKHggMCkpICAgICAg ICAgICAgIDsgQHJ7QGNvZGV7eH0gaXMgbGV4aWNhbGx5IGJvdW5kLn0KICAoc2V0cSBteS10aWNr ZXIgKGxhbWJkYSAoKQogICAgICAgICAgICAgICAgICAgIChzZXRxIHggKDErIHgpKSkpKQogICAg QHJlc3VsdHt9IChjbG9zdXJlICgoeCAuIDApIHQpICgpCiAgICAgICAgICAoc2V0cSB4ICgxKyB4 KSkpCgooZnVuY2FsbCBteS10aWNrZXIpCiAgICBAcmVzdWx0e30gMQoKKGZ1bmNhbGwgbXktdGlj a2VyKQogICAgQHJlc3VsdHt9IDIKCihmdW5jYWxsIG15LXRpY2tlcikKICAgIEByZXN1bHR7fSAz Cgp4ICAgICAgICAgICAgICAgICAgICAgICAgOyBAcntOb3RlIHRoYXQgQGNvZGV7eH0gaGFzIG5v IGdsb2JhbCB2YWx1ZS59CkBlcnJvcnt9IFN5bWJvbCdzIHZhbHVlIGFzIHZhcmlhYmxlIGlzIHZv aWQ6IHgKQGVuZCBleGFtcGxlCgpAbm9pbmRlbnQKVGhlIEBjb2Rle2xldH0gYmluZGluZyBkZWZp bmVzIGEgbGV4aWNhbCBlbnZpcm9ubWVudCBpbiB3aGljaCB0aGUKdmFyaWFibGUgQGNvZGV7eH0g aXMgbG9jYWxseSBib3VuZCB0byAwLiAgV2l0aGluIHRoaXMgYmluZGluZwpjb25zdHJ1Y3QsIHdl IGRlZmluZSBhIGxhbWJkYSBleHByZXNzaW9uIHdoaWNoIGluY3JlbWVudHMgQGNvZGV7eH0gYnkK b25lIGFuZCByZXR1cm5zIHRoZSBpbmNyZW1lbnRlZCB2YWx1ZS4gIFRoaXMgbGFtYmRhIGV4cHJl c3Npb24gaXMKYXV0b21hdGljYWxseSB0dXJuZWQgaW50byBhIGNsb3N1cmUsIGluIHdoaWNoIHRo ZSBsZXhpY2FsIGVudmlyb25tZW50CmxpdmVzIG9uIGV2ZW4gYWZ0ZXIgdGhlIEBjb2Rle2xldH0g YmluZGluZyBjb25zdHJ1Y3QgaGFzIGV4aXRlZC4gIEVhY2gKdGltZSB3ZSBldmFsdWF0ZSB0aGUg Y2xvc3VyZSwgaXQgaW5jcmVtZW50cyBAY29kZXt4fSwgdXNpbmcgdGhlCmJpbmRpbmcgb2YgQGNv ZGV7eH0gaW4gdGhhdCBsZXhpY2FsIGVudmlyb25tZW50LgoKICBOb3RlIHRoYXQgdW5saWtlIGR5 bmFtaWMgdmFyaWFibGVzIHdoaWNoIGFyZSB0aWVkIHRvIHRoZSBzeW1ib2wKb2JqZWN0IGl0c2Vs ZiwgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGxleGljYWwgdmFyaWFibGVzIGFuZCBzeW1ib2xz CmlzIG9ubHkgcHJlc2VudCBpbiB0aGUgaW50ZXJwcmV0ZXIgKG9yIGNvbXBpbGVyKS4gIFRoZXJl Zm9yZSwKZnVuY3Rpb25zIHdoaWNoIHRha2UgYSBzeW1ib2wgYXJndW1lbnQgKGxpa2UgQGNvZGV7 c3ltYm9sLXZhbHVlfSwKQGNvZGV7Ym91bmRwfSwgYW5kIEBjb2Rle3NldH0pIGNhbiBvbmx5IHJl dHJpZXZlIG9yIG1vZGlmeSBhCnZhcmlhYmxlJ3MgZHluYW1pYyBiaW5kaW5nIChpLmUuLCB0aGUg Y29udGVudHMgb2YgaXRzIHN5bWJvbCdzIHZhbHVlCmNlbGwpLgoKQG5vZGUgVXNpbmcgTGV4aWNh bCBCaW5kaW5nCkBzdWJzZWN0aW9uIFVzaW5nIExleGljYWwgQmluZGluZwoKICBXaGVuIGxvYWRp bmcgYW4gRW1hY3MgTGlzcCBmaWxlIG9yIGV2YWx1YXRpbmcgYSBMaXNwIGJ1ZmZlciwgbGV4aWNh bApiaW5kaW5nIGlzIGVuYWJsZWQgaWYgdGhlIGJ1ZmZlci1sb2NhbCB2YXJpYWJsZSBAY29kZXts ZXhpY2FsLWJpbmRpbmd9CmlzIG5vbi1AY29kZXtuaWx9OgoKQGRlZnZhciBsZXhpY2FsLWJpbmRp bmcKSWYgdGhpcyBidWZmZXItbG9jYWwgdmFyaWFibGUgaXMgbm9uLUBjb2Rle25pbH0sIEVtYWNz IExpc3AgZmlsZXMgYW5kCmJ1ZmZlcnMgYXJlIGV2YWx1YXRlZCB1c2luZyBsZXhpY2FsIGJpbmRp bmcgaW5zdGVhZCBvZiBkeW5hbWljCmJpbmRpbmcuICAoSG93ZXZlciwgc3BlY2lhbCB2YXJpYWJs ZXMgYXJlIHN0aWxsIGR5bmFtaWNhbGx5IGJvdW5kOyBzZWUKYmVsb3cuKSAgSWYgQGNvZGV7bmls fSwgZHluYW1pYyBiaW5kaW5nIGlzIHVzZWQgZm9yIGFsbCBsb2NhbAp2YXJpYWJsZXMuICBUaGlz IHZhcmlhYmxlIGlzIHR5cGljYWxseSBzZXQgZm9yIGEgd2hvbGUgRW1hY3MgTGlzcApmaWxlLCBh cyBhIGZpbGUgbG9jYWwgdmFyaWFibGUgKEBweHJlZntGaWxlIExvY2FsIFZhcmlhYmxlc30pLgpO b3RlIHRoYXQgdW5saWtlIG90aGVyIHN1Y2ggdmFyaWFibGVzLCB0aGlzIG9uZSBtdXN0IGJlIHNl dCBpbiB0aGUKZmlyc3QgbGluZSBvZiBhIGZpbGUuCkBlbmQgZGVmdmFyCgpAbm9pbmRlbnQKV2hl biBldmFsdWF0aW5nIEVtYWNzIExpc3AgY29kZSBkaXJlY3RseSB1c2luZyBhbiBAY29kZXtldmFs fSBjYWxsLApsZXhpY2FsIGJpbmRpbmcgaXMgZW5hYmxlZCBpZiB0aGUgQHZhcntsZXhpY2FsfSBh cmd1bWVudCB0bwpAY29kZXtldmFsfSBpcyBub24tQGNvZGV7bmlsfS4gIEB4cmVme0V2YWx9LgoK QGNpbmRleCBzcGVjaWFsIHZhcmlhYmxlcwogIEV2ZW4gd2hlbiBsZXhpY2FsIGJpbmRpbmcgaXMg ZW5hYmxlZCwgY2VydGFpbiB2YXJpYWJsZXMgd2lsbApjb250aW51ZSB0byBiZSBkeW5hbWljYWxs eSBib3VuZC4gIFRoZXNlIGFyZSBjYWxsZWQgQGRmbntzcGVjaWFsCnZhcmlhYmxlc30uICBFdmVy eSB2YXJpYWJsZSB0aGF0IGhhcyBiZWVuIGRlZmluZWQgd2l0aCBAY29kZXtkZWZ2YXJ9LApAY29k ZXtkZWZjdXN0b219IG9yIEBjb2Rle2RlZmNvbnN0fSBpcyBhIHNwZWNpYWwgdmFyaWFibGUKKEBw eHJlZntEZWZpbmluZyBWYXJpYWJsZXN9KS4gIEFsbCBvdGhlciB2YXJpYWJsZXMgYXJlIHN1Ympl Y3QgdG8KbGV4aWNhbCBiaW5kaW5nLgoKQGRlZnVuIHNwZWNpYWwtdmFyaWFibGUtcCBzeW1ib2wK VGhpcyBmdW5jdGlvbiByZXR1cm5zIG5vbi1AY29kZXtuaWx9IGlmIEB2YXJ7c3ltYm9sfSBpcyBh IHNwZWNpYWwKdmFyaWFibGUgKGkuZS4sIGl0IGhhcyBhIEBjb2Rle2RlZnZhcn0sIEBjb2Rle2Rl ZmN1c3RvbX0sIG9yCkBjb2Rle2RlZmNvbnN0fSB2YXJpYWJsZSBkZWZpbml0aW9uKS4gIE90aGVy d2lzZSwgdGhlIHJldHVybiB2YWx1ZSBpcwpAY29kZXtuaWx9LgpAZW5kIGRlZnVuCgogIFRoZSB1 c2Ugb2YgYSBzcGVjaWFsIHZhcmlhYmxlIGFzIGEgZm9ybWFsIGFyZ3VtZW50IGluIGEgZnVuY3Rp b24gaXMKZGlzY291cmFnZWQuICBEb2luZyBzbyBnaXZlcyByaXNlIHRvIHVuc3BlY2lmaWVkIGJl aGF2aW9yIHdoZW4gbGV4aWNhbApiaW5kaW5nIG1vZGUgaXMgZW5hYmxlZCAoaXQgbWF5IHVzZSBs ZXhpY2FsIGJpbmRpbmcgc29tZXRpbWVzLCBhbmQKZHluYW1pYyBiaW5kaW5nIG90aGVyIHRpbWVz KS4KCiAgQ29udmVydGluZyBhbiBFbWFjcyBMaXNwIHByb2dyYW0gdG8gbGV4aWNhbCBiaW5kaW5n IGlzIGVhc3kuICBGaXJzdCwKYWRkIGEgZmlsZS1sb2NhbCB2YXJpYWJsZSBzZXR0aW5nIG9mIEBj b2Rle2xleGljYWwtYmluZGluZ30gdG8KQGNvZGV7dH0gaW4gdGhlIGhlYWRlciBsaW5lIG9mIHRo ZSBFbWFjcyBMaXNwIHNvdXJjZSBmaWxlIChAcHhyZWZ7RmlsZQpMb2NhbCBWYXJpYWJsZXN9KS4g IFNlY29uZCwgY2hlY2sgdGhhdCBldmVyeSB2YXJpYWJsZSBpbiB0aGUgcHJvZ3JhbQp3aGljaCBu ZWVkcyB0byBiZSBkeW5hbWljYWxseSBib3VuZCBoYXMgYSB2YXJpYWJsZSBkZWZpbml0aW9uLCBz byB0aGF0Cml0IGlzIG5vdCBpbmFkdmVydGVudGx5IGJvdW5kIGxleGljYWxseS4KCkBjaW5kZXgg ZnJlZSB2YXJpYWJsZQpAY2luZGV4IHVudXNlZCBsZXhpY2FsIHZhcmlhYmxlCiAgQSBzaW1wbGUg d2F5IHRvIGZpbmQgb3V0IHdoaWNoIHZhcmlhYmxlcyBuZWVkIGEgdmFyaWFibGUgZGVmaW5pdGlv bgppcyB0byBieXRlLWNvbXBpbGUgdGhlIHNvdXJjZSBmaWxlLiAgQHhyZWZ7Qnl0ZSBDb21waWxh dGlvbn0uICBJZiBhCm5vbi1zcGVjaWFsIHZhcmlhYmxlIGlzIHVzZWQgb3V0c2lkZSBvZiBhIEBj b2Rle2xldH0gZm9ybSwgdGhlCmJ5dGUtY29tcGlsZXIgd2lsbCB3YXJuIGFib3V0IHJlZmVyZW5j ZSBvciBhc3NpZ25tZW50IHRvIGEgZnJlZQp2YXJpYWJsZS4gIElmIGEgbm9uLXNwZWNpYWwgdmFy aWFibGUgaXMgYm91bmQgYnV0IG5vdCB1c2VkIHdpdGhpbiBhCkBjb2Rle2xldH0gZm9ybSwgdGhl IGJ5dGUtY29tcGlsZXIgd2lsbCB3YXJuIGFib3V0IGFuIHVudXNlZCBsZXhpY2FsCnZhcmlhYmxl LiAgVGhlIGJ5dGUtY29tcGlsZXIgd2lsbCBhbHNvIGlzc3VlIGEgd2FybmluZyBpZiB5b3UgdXNl IGEKc3BlY2lhbCB2YXJpYWJsZSBhcyBhIGZ1bmN0aW9uIGFyZ3VtZW50LgoKICAoVG8gc2lsZW5j ZSBieXRlLWNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IHVudXNlZCB2YXJpYWJsZXMsIGp1c3QgdXNl CmEgdmFyaWFibGUgbmFtZSB0aGF0IHN0YXJ0IHdpdGggYW4gdW5kZXJzY29yZS4gIFRoZSBieXRl LWNvbXBpbGVyCmludGVycHJldHMgdGhpcyBhcyBhbiBpbmRpY2F0aW9uIHRoYXQgdGhpcyBpcyBh IHZhcmlhYmxlIGtub3duIG5vdCB0bwpiZSB1c2VkLikKCkBub2RlIEJ1ZmZlci1Mb2NhbCBWYXJp YWJsZXMKQHNlY3Rpb24gQnVmZmVyLUxvY2FsIFZhcmlhYmxlcwpAY2luZGV4IHZhcmlhYmxlLCBi dWZmZXItbG9jYWwKQGNpbmRleCBidWZmZXItbG9jYWwgdmFyaWFibGVzCgogIEdsb2JhbCBhbmQg bG9jYWwgdmFyaWFibGUgYmluZGluZ3MgYXJlIGZvdW5kIGluIG1vc3QgcHJvZ3JhbW1pbmcKbGFu Z3VhZ2VzIGluIG9uZSBmb3JtIG9yIGFub3RoZXIuICBFbWFjcywgaG93ZXZlciwgYWxzbyBzdXBw b3J0cwphZGRpdGlvbmFsLCB1bnVzdWFsIGtpbmRzIG9mIHZhcmlhYmxlIGJpbmRpbmcsIHN1Y2gg YXMKQGRmbntidWZmZXItbG9jYWx9IGJpbmRpbmdzLCB3aGljaCBhcHBseSBvbmx5IGluIG9uZSBi dWZmZXIuICBIYXZpbmcKZGlmZmVyZW50IHZhbHVlcyBmb3IgYSB2YXJpYWJsZSBpbiBkaWZmZXJl bnQgYnVmZmVycyBpcyBhbiBpbXBvcnRhbnQKY3VzdG9taXphdGlvbiBtZXRob2QuICAoVmFyaWFi bGVzIGNhbiBhbHNvIGhhdmUgYmluZGluZ3MgdGhhdCBhcmUKbG9jYWwgdG8gZWFjaCB0ZXJtaW5h bC4gIEB4cmVme011bHRpcGxlIFRlcm1pbmFsc30uKQoKQG1lbnUKKiBJbnRybyB0byBCdWZmZXIt TG9jYWw6OiAgICAgICBJbnRyb2R1Y3Rpb24gYW5kIGNvbmNlcHRzLgoqIENyZWF0aW5nIEJ1ZmZl ci1Mb2NhbDo6ICAgICAgIENyZWF0aW5nIGFuZCBkZXN0cm95aW5nIGJ1ZmZlci1sb2NhbCBiaW5k aW5ncy4KKiBEZWZhdWx0IFZhbHVlOjogICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBp cyBzZWVuIGluIGJ1ZmZlcnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBk b24ndCBoYXZlIHRoZWlyIG93biBidWZmZXItbG9jYWwgdmFsdWVzLgpAZW5kIG1lbnUKCkBub2Rl IEludHJvIHRvIEJ1ZmZlci1Mb2NhbApAc3Vic2VjdGlvbiBJbnRyb2R1Y3Rpb24gdG8gQnVmZmVy LUxvY2FsIFZhcmlhYmxlcwoKICBBIGJ1ZmZlci1sb2NhbCB2YXJpYWJsZSBoYXMgYSBidWZmZXIt bG9jYWwgYmluZGluZyBhc3NvY2lhdGVkIHdpdGggYQpwYXJ0aWN1bGFyIGJ1ZmZlci4gIFRoZSBi aW5kaW5nIGlzIGluIGVmZmVjdCB3aGVuIHRoYXQgYnVmZmVyIGlzCmN1cnJlbnQ7IG90aGVyd2lz ZSwgaXQgaXMgbm90IGluIGVmZmVjdC4gIElmIHlvdSBzZXQgdGhlIHZhcmlhYmxlIHdoaWxlCmEg YnVmZmVyLWxvY2FsIGJpbmRpbmcgaXMgaW4gZWZmZWN0LCB0aGUgbmV3IHZhbHVlIGdvZXMgaW4g dGhhdCBiaW5kaW5nLApzbyBpdHMgb3RoZXIgYmluZGluZ3MgYXJlIHVuY2hhbmdlZC4gIFRoaXMg bWVhbnMgdGhhdCB0aGUgY2hhbmdlIGlzCnZpc2libGUgb25seSBpbiB0aGUgYnVmZmVyIHdoZXJl IHlvdSBtYWRlIGl0LgoKICBUaGUgdmFyaWFibGUncyBvcmRpbmFyeSBiaW5kaW5nLCB3aGljaCBp cyBub3QgYXNzb2NpYXRlZCB3aXRoIGFueQpzcGVjaWZpYyBidWZmZXIsIGlzIGNhbGxlZCB0aGUg QGRmbntkZWZhdWx0IGJpbmRpbmd9LiAgSW4gbW9zdCBjYXNlcywKdGhpcyBpcyB0aGUgZ2xvYmFs IGJpbmRpbmcuCgogIEEgdmFyaWFibGUgY2FuIGhhdmUgYnVmZmVyLWxvY2FsIGJpbmRpbmdzIGlu IHNvbWUgYnVmZmVycyBidXQgbm90IGluCm90aGVyIGJ1ZmZlcnMuICBUaGUgZGVmYXVsdCBiaW5k aW5nIGlzIHNoYXJlZCBieSBhbGwgdGhlIGJ1ZmZlcnMgdGhhdApkb24ndCBoYXZlIHRoZWlyIG93 biBiaW5kaW5ncyBmb3IgdGhlIHZhcmlhYmxlLiAgKFRoaXMgaW5jbHVkZXMgYWxsCm5ld2x5LWNy ZWF0ZWQgYnVmZmVycy4pICBJZiB5b3Ugc2V0IHRoZSB2YXJpYWJsZSBpbiBhIGJ1ZmZlciB0aGF0 IGRvZXMKbm90IGhhdmUgYSBidWZmZXItbG9jYWwgYmluZGluZyBmb3IgaXQsIHRoaXMgc2V0cyB0 aGUgZGVmYXVsdCBiaW5kaW5nLApzbyB0aGUgbmV3IHZhbHVlIGlzIHZpc2libGUgaW4gYWxsIHRo ZSBidWZmZXJzIHRoYXQgc2VlIHRoZSBkZWZhdWx0CmJpbmRpbmcuCgogIFRoZSBtb3N0IGNvbW1v biB1c2Ugb2YgYnVmZmVyLWxvY2FsIGJpbmRpbmdzIGlzIGZvciBtYWpvciBtb2RlcyB0byBjaGFu Z2UKdmFyaWFibGVzIHRoYXQgY29udHJvbCB0aGUgYmVoYXZpb3Igb2YgY29tbWFuZHMuICBGb3Ig ZXhhbXBsZSwgQyBtb2RlIGFuZApMaXNwIG1vZGUgYm90aCBzZXQgdGhlIHZhcmlhYmxlIEBjb2Rl e3BhcmFncmFwaC1zdGFydH0gdG8gc3BlY2lmeSB0aGF0IG9ubHkKYmxhbmsgbGluZXMgc2VwYXJh dGUgcGFyYWdyYXBocy4gIFRoZXkgZG8gdGhpcyBieSBtYWtpbmcgdGhlIHZhcmlhYmxlCmJ1ZmZl ci1sb2NhbCBpbiB0aGUgYnVmZmVyIHRoYXQgaXMgYmVpbmcgcHV0IGludG8gQyBtb2RlIG9yIExp c3AgbW9kZSwgYW5kCnRoZW4gc2V0dGluZyBpdCB0byB0aGUgbmV3IHZhbHVlIGZvciB0aGF0IG1v ZGUuICBAeHJlZntNYWpvciBNb2Rlc30uCgogIFRoZSB1c3VhbCB3YXkgdG8gbWFrZSBhIGJ1ZmZl ci1sb2NhbCBiaW5kaW5nIGlzIHdpdGgKQGNvZGV7bWFrZS1sb2NhbC12YXJpYWJsZX0sIHdoaWNo IGlzIHdoYXQgbWFqb3IgbW9kZSBjb21tYW5kcyB0eXBpY2FsbHkKdXNlLiAgVGhpcyBhZmZlY3Rz IGp1c3QgdGhlIGN1cnJlbnQgYnVmZmVyOyBhbGwgb3RoZXIgYnVmZmVycyAoaW5jbHVkaW5nCnRo b3NlIHlldCB0byBiZSBjcmVhdGVkKSB3aWxsIGNvbnRpbnVlIHRvIHNoYXJlIHRoZSBkZWZhdWx0 IHZhbHVlIHVubGVzcwp0aGV5IGFyZSBleHBsaWNpdGx5IGdpdmVuIHRoZWlyIG93biBidWZmZXIt bG9jYWwgYmluZGluZ3MuCgpAY2luZGV4IGF1dG9tYXRpY2FsbHkgYnVmZmVyLWxvY2FsCiAgQSBt b3JlIHBvd2VyZnVsIG9wZXJhdGlvbiBpcyB0byBtYXJrIHRoZSB2YXJpYWJsZSBhcwpAZGZue2F1 dG9tYXRpY2FsbHkgYnVmZmVyLWxvY2FsfSBieSBjYWxsaW5nCkBjb2Rle21ha2UtdmFyaWFibGUt YnVmZmVyLWxvY2FsfS4gIFlvdSBjYW4gdGhpbmsgb2YgdGhpcyBhcyBtYWtpbmcgdGhlCnZhcmlh YmxlIGxvY2FsIGluIGFsbCBidWZmZXJzLCBldmVuIHRob3NlIHlldCB0byBiZSBjcmVhdGVkLiAg TW9yZQpwcmVjaXNlbHksIHRoZSBlZmZlY3QgaXMgdGhhdCBzZXR0aW5nIHRoZSB2YXJpYWJsZSBh dXRvbWF0aWNhbGx5IG1ha2VzCnRoZSB2YXJpYWJsZSBsb2NhbCB0byB0aGUgY3VycmVudCBidWZm ZXIgaWYgaXQgaXMgbm90IGFscmVhZHkgc28uICBBbGwKYnVmZmVycyBzdGFydCBvdXQgYnkgc2hh cmluZyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgYXMgdXN1YWwsCmJ1dCBzZXR0 aW5nIHRoZSB2YXJpYWJsZSBjcmVhdGVzIGEgYnVmZmVyLWxvY2FsIGJpbmRpbmcgZm9yIHRoZSBj dXJyZW50CmJ1ZmZlci4gIFRoZSBuZXcgdmFsdWUgaXMgc3RvcmVkIGluIHRoZSBidWZmZXItbG9j YWwgYmluZGluZywgbGVhdmluZwp0aGUgZGVmYXVsdCBiaW5kaW5nIHVudG91Y2hlZC4gIFRoaXMg bWVhbnMgdGhhdCB0aGUgZGVmYXVsdCB2YWx1ZSBjYW5ub3QKYmUgY2hhbmdlZCB3aXRoIEBjb2Rl e3NldHF9IGluIGFueSBidWZmZXI7IHRoZSBvbmx5IHdheSB0byBjaGFuZ2UgaXQgaXMKd2l0aCBA Y29kZXtzZXRxLWRlZmF1bHR9LgoKICBAc3Ryb25ne1dhcm5pbmc6fSBXaGVuIGEgdmFyaWFibGUg aGFzIGJ1ZmZlci1sb2NhbApiaW5kaW5ncyBpbiBvbmUgb3IgbW9yZSBidWZmZXJzLCBAY29kZXts ZXR9IHJlYmluZHMgdGhlIGJpbmRpbmcgdGhhdCdzCmN1cnJlbnRseSBpbiBlZmZlY3QuICBGb3Ig aW5zdGFuY2UsIGlmIHRoZSBjdXJyZW50IGJ1ZmZlciBoYXMgYQpidWZmZXItbG9jYWwgdmFsdWUs IEBjb2Rle2xldH0gdGVtcG9yYXJpbHkgcmViaW5kcyB0aGF0LiAgSWYgbm8KYnVmZmVyLWxvY2Fs IGJpbmRpbmdzIGFyZSBpbiBlZmZlY3QsIEBjb2Rle2xldH0gcmViaW5kcwp0aGUgZGVmYXVsdCB2 YWx1ZS4gIElmIGluc2lkZSB0aGUgQGNvZGV7bGV0fSB5b3UgdGhlbiBjaGFuZ2UgdG8gYQpkaWZm ZXJlbnQgY3VycmVudCBidWZmZXIgaW4gd2hpY2ggYSBkaWZmZXJlbnQgYmluZGluZyBpcyBpbiBl ZmZlY3QsCnlvdSB3b24ndCBzZWUgdGhlIEBjb2Rle2xldH0gYmluZGluZyBhbnkgbW9yZS4gIEFu ZCBpZiB5b3UgZXhpdCB0aGUKQGNvZGV7bGV0fSB3aGlsZSBzdGlsbCBpbiB0aGUgb3RoZXIgYnVm ZmVyLCB5b3Ugd29uJ3Qgc2VlIHRoZQp1bmJpbmRpbmcgb2NjdXIgKHRob3VnaCBpdCB3aWxsIG9j Y3VyIHByb3Blcmx5KS4gIEhlcmUgaXMgYW4gZXhhbXBsZQp0byBpbGx1c3RyYXRlOgoKQGV4YW1w bGUKQGdyb3VwCihzZXRxIGZvbyAnZykKKHNldC1idWZmZXIgImEiKQoobWFrZS1sb2NhbC12YXJp YWJsZSAnZm9vKQpAZW5kIGdyb3VwCihzZXRxIGZvbyAnYSkKKGxldCAoKGZvbyAndGVtcCkpCiAg OzsgZm9vIEByZXN1bHR7fSAndGVtcCAgOyBAcntsZXQgYmluZGluZyBpbiBidWZmZXIgQHNhbXB7 YX19CiAgKHNldC1idWZmZXIgImIiKQogIDs7IGZvbyBAcmVzdWx0e30gJ2cgICAgIDsgQHJ7dGhl IGdsb2JhbCB2YWx1ZSBzaW5jZSBmb28gaXMgbm90IGxvY2FsIGluIEBzYW1we2J9fQogIEB2YXJ7 Ym9keX1AZG90c3t9KQpAZ3JvdXAKZm9vIEByZXN1bHR7fSAnZyAgICAgICAgOyBAcntleGl0aW5n IHJlc3RvcmVkIHRoZSBsb2NhbCB2YWx1ZSBpbiBidWZmZXIgQHNhbXB7YX0sfQogICAgICAgICAg ICAgICAgIDsgQHJ7YnV0IHdlIGRvbid0IHNlZSB0aGF0IGluIGJ1ZmZlciBAc2FtcHtifX0KQGVu ZCBncm91cApAZ3JvdXAKKHNldC1idWZmZXIgImEiKSA7IEBye3ZlcmlmeSB0aGUgbG9jYWwgdmFs dWUgd2FzIHJlc3RvcmVkfQpmb28gQHJlc3VsdHt9ICdhCkBlbmQgZ3JvdXAKQGVuZCBleGFtcGxl CgpAbm9pbmRlbnQKTm90ZSB0aGF0IHJlZmVyZW5jZXMgdG8gQGNvZGV7Zm9vfSBpbiBAdmFye2Jv ZHl9IGFjY2VzcyB0aGUKYnVmZmVyLWxvY2FsIGJpbmRpbmcgb2YgYnVmZmVyIEBzYW1we2J9LgoK ICBXaGVuIGEgZmlsZSBzcGVjaWZpZXMgbG9jYWwgdmFyaWFibGUgdmFsdWVzLCB0aGVzZSBiZWNv bWUgYnVmZmVyLWxvY2FsCnZhbHVlcyB3aGVuIHlvdSB2aXNpdCB0aGUgZmlsZS4gIEB4cmVme0Zp bGUgVmFyaWFibGVzLCwsIGVtYWNzLCBUaGUKR05VIEVtYWNzIE1hbnVhbH0uCgogIEEgYnVmZmVy LWxvY2FsIHZhcmlhYmxlIGNhbm5vdCBiZSBtYWRlIHRlcm1pbmFsLWxvY2FsCihAcHhyZWZ7TXVs dGlwbGUgVGVybWluYWxzfSkuCgpAbm9kZSBDcmVhdGluZyBCdWZmZXItTG9jYWwKQHN1YnNlY3Rp b24gQ3JlYXRpbmcgYW5kIERlbGV0aW5nIEJ1ZmZlci1Mb2NhbCBCaW5kaW5ncwoKQGRlZmZuIENv bW1hbmQgbWFrZS1sb2NhbC12YXJpYWJsZSB2YXJpYWJsZQpUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMg YSBidWZmZXItbG9jYWwgYmluZGluZyBpbiB0aGUgY3VycmVudCBidWZmZXIgZm9yCkB2YXJ7dmFy aWFibGV9IChhIHN5bWJvbCkuICBPdGhlciBidWZmZXJzIGFyZSBub3QgYWZmZWN0ZWQuICBUaGUg dmFsdWUKcmV0dXJuZWQgaXMgQHZhcnt2YXJpYWJsZX0uCgpUaGUgYnVmZmVyLWxvY2FsIHZhbHVl IG9mIEB2YXJ7dmFyaWFibGV9IHN0YXJ0cyBvdXQgYXMgdGhlIHNhbWUgdmFsdWUKQHZhcnt2YXJp YWJsZX0gcHJldmlvdXNseSBoYWQuICBJZiBAdmFye3ZhcmlhYmxlfSB3YXMgdm9pZCwgaXQgcmVt YWlucwp2b2lkLgoKQGV4YW1wbGUKQGdyb3VwCjs7IEBye0luIGJ1ZmZlciBAc2FtcHtiMX06fQoo c2V0cSBmb28gNSkgICAgICAgICAgICAgICAgOyBAcntBZmZlY3RzIGFsbCBidWZmZXJzLn0KICAg ICBAcmVzdWx0e30gNQpAZW5kIGdyb3VwCkBncm91cAoobWFrZS1sb2NhbC12YXJpYWJsZSAnZm9v KSAgOyBAcntOb3cgaXQgaXMgbG9jYWwgaW4gQHNhbXB7YjF9Ln0KICAgICBAcmVzdWx0e30gZm9v CkBlbmQgZ3JvdXAKQGdyb3VwCmZvbyAgICAgICAgICAgICAgICAgICAgICAgICA7IEBye1RoYXQg ZGlkIG5vdCBjaGFuZ2V9CiAgICAgQHJlc3VsdHt9IDUgICAgICAgICAgICAgICAgICAgOyAgIEBy e3RoZSB2YWx1ZS59CkBlbmQgZ3JvdXAKQGdyb3VwCihzZXRxIGZvbyA2KSAgICAgICAgICAgICAg ICA7IEBye0NoYW5nZSB0aGUgdmFsdWV9CiAgICAgQHJlc3VsdHt9IDYgICAgICAgICAgICAgICAg ICAgOyAgIEBye2luIEBzYW1we2IxfS59CkBlbmQgZ3JvdXAKQGdyb3VwCmZvbwogICAgIEByZXN1 bHR7fSA2CkBlbmQgZ3JvdXAKCkBncm91cAo7OyBAcntJbiBidWZmZXIgQHNhbXB7YjJ9LCB0aGUg dmFsdWUgaGFzbid0IGNoYW5nZWQufQood2l0aC1jdXJyZW50LWJ1ZmZlciAiYjIiCiAgZm9vKQog ICAgIEByZXN1bHR7fSA1CkBlbmQgZ3JvdXAKQGVuZCBleGFtcGxlCgpNYWtpbmcgYSB2YXJpYWJs ZSBidWZmZXItbG9jYWwgd2l0aGluIGEgQGNvZGV7bGV0fS1iaW5kaW5nIGZvciB0aGF0CnZhcmlh YmxlIGRvZXMgbm90IHdvcmsgcmVsaWFibHksIHVubGVzcyB0aGUgYnVmZmVyIGluIHdoaWNoIHlv dSBkbyB0aGlzCmlzIG5vdCBjdXJyZW50IGVpdGhlciBvbiBlbnRyeSB0byBvciBleGl0IGZyb20g dGhlIEBjb2Rle2xldH0uICBUaGlzIGlzCmJlY2F1c2UgQGNvZGV7bGV0fSBkb2VzIG5vdCBkaXN0 aW5ndWlzaCBiZXR3ZWVuIGRpZmZlcmVudCBraW5kcyBvZgpiaW5kaW5nczsgaXQga25vd3Mgb25s eSB3aGljaCB2YXJpYWJsZSB0aGUgYmluZGluZyB3YXMgbWFkZSBmb3IuCgpJZiB0aGUgdmFyaWFi bGUgaXMgdGVybWluYWwtbG9jYWwgKEBweHJlZntNdWx0aXBsZSBUZXJtaW5hbHN9KSwgdGhpcwpm dW5jdGlvbiBzaWduYWxzIGFuIGVycm9yLiAgU3VjaCB2YXJpYWJsZXMgY2Fubm90IGhhdmUgYnVm ZmVyLWxvY2FsCmJpbmRpbmdzIGFzIHdlbGwuCgpAc3Ryb25ne1dhcm5pbmc6fSBkbyBub3QgdXNl IEBjb2Rle21ha2UtbG9jYWwtdmFyaWFibGV9IGZvciBhIGhvb2sKdmFyaWFibGUuICBUaGUgaG9v ayB2YXJpYWJsZXMgYXJlIGF1dG9tYXRpY2FsbHkgbWFkZSBidWZmZXItbG9jYWwgYXMKbmVlZGVk IGlmIHlvdSB1c2UgdGhlIEB2YXJ7bG9jYWx9IGFyZ3VtZW50IHRvIEBjb2Rle2FkZC1ob29rfSBv cgpAY29kZXtyZW1vdmUtaG9va30uCkBlbmQgZGVmZm4KCkBkZWZtYWMgc2V0cS1sb2NhbCB2YXJp YWJsZSB2YWx1ZQpUaGlzIG1hY3JvIGNyZWF0ZXMgYSBidWZmZXItbG9jYWwgYmluZGluZyBpbiB0 aGUgY3VycmVudCBidWZmZXIgZm9yCkB2YXJ7dmFyaWFibGV9LCBhbmQgZ2l2ZXMgaXQgdGhlIGJ1 ZmZlci1sb2NhbCB2YWx1ZSBAdmFye3ZhbHVlfS4gIEl0CmlzIGVxdWl2YWxlbnQgdG8gY2FsbGlu ZyBAY29kZXttYWtlLWxvY2FsLXZhcmlhYmxlfSBmb2xsb3dlZCBieQpAY29kZXtzZXRxfS4gIEB2 YXJ7dmFyaWFibGV9IHNob3VsZCBiZSBhbiB1bnF1b3RlZCBzeW1ib2wuCkBlbmQgZGVmbWFjCgpA ZGVmZm4gQ29tbWFuZCBtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCB2YXJpYWJsZQpUaGlzIGZ1 bmN0aW9uIG1hcmtzIEB2YXJ7dmFyaWFibGV9IChhIHN5bWJvbCkgYXV0b21hdGljYWxseQpidWZm ZXItbG9jYWwsIHNvIHRoYXQgYW55IHN1YnNlcXVlbnQgYXR0ZW1wdCB0byBzZXQgaXQgd2lsbCBt YWtlIGl0CmxvY2FsIHRvIHRoZSBjdXJyZW50IGJ1ZmZlciBhdCB0aGUgdGltZS4gIFVubGlrZQpA Y29kZXttYWtlLWxvY2FsLXZhcmlhYmxlfSwgd2l0aCB3aGljaCBpdCBpcyBvZnRlbiBjb25mdXNl ZCwgdGhpcwpjYW5ub3QgYmUgdW5kb25lLCBhbmQgYWZmZWN0cyB0aGUgYmVoYXZpb3Igb2YgdGhl IHZhcmlhYmxlIGluIGFsbApidWZmZXJzLgoKQSBwZWN1bGlhciB3cmlua2xlIG9mIHRoaXMgZmVh dHVyZSBpcyB0aGF0IGJpbmRpbmcgdGhlIHZhcmlhYmxlICh3aXRoCkBjb2Rle2xldH0gb3Igb3Ro ZXIgYmluZGluZyBjb25zdHJ1Y3RzKSBkb2VzIG5vdCBjcmVhdGUgYSBidWZmZXItbG9jYWwKYmlu ZGluZyBmb3IgaXQuICBPbmx5IHNldHRpbmcgdGhlIHZhcmlhYmxlICh3aXRoIEBjb2Rle3NldH0g b3IKQGNvZGV7c2V0cX0pLCB3aGlsZSB0aGUgdmFyaWFibGUgZG9lcyBub3QgaGF2ZSBhIEBjb2Rl e2xldH0tc3R5bGUKYmluZGluZyB0aGF0IHdhcyBtYWRlIGluIHRoZSBjdXJyZW50IGJ1ZmZlciwg ZG9lcyBzby4KCklmIEB2YXJ7dmFyaWFibGV9IGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0IHZhbHVl LCB0aGVuIGNhbGxpbmcgdGhpcwpjb21tYW5kIHdpbGwgZ2l2ZSBpdCBhIGRlZmF1bHQgdmFsdWUg b2YgQGNvZGV7bmlsfS4gIElmIEB2YXJ7dmFyaWFibGV9CmFscmVhZHkgaGFzIGEgZGVmYXVsdCB2 YWx1ZSwgdGhhdCB2YWx1ZSByZW1haW5zIHVuY2hhbmdlZC4KU3Vic2VxdWVudGx5IGNhbGxpbmcg QGNvZGV7bWFrdW5ib3VuZH0gb24gQHZhcnt2YXJpYWJsZX0gd2lsbCByZXN1bHQKaW4gYSB2b2lk IGJ1ZmZlci1sb2NhbCB2YWx1ZSBhbmQgbGVhdmUgdGhlIGRlZmF1bHQgdmFsdWUgdW5hZmZlY3Rl ZC4KClRoZSB2YWx1ZSByZXR1cm5lZCBpcyBAdmFye3ZhcmlhYmxlfS4KCkBzdHJvbmd7V2Fybmlu Zzp9IERvbid0IGFzc3VtZSB0aGF0IHlvdSBzaG91bGQgdXNlCkBjb2Rle21ha2UtdmFyaWFibGUt YnVmZmVyLWxvY2FsfSBmb3IgdXNlci1vcHRpb24gdmFyaWFibGVzLCBzaW1wbHkKYmVjYXVzZSB1 c2VycyBAZW1waHttaWdodH0gd2FudCB0byBjdXN0b21pemUgdGhlbSBkaWZmZXJlbnRseSBpbgpk aWZmZXJlbnQgYnVmZmVycy4gIFVzZXJzIGNhbiBtYWtlIGFueSB2YXJpYWJsZSBsb2NhbCwgd2hl biB0aGV5IHdpc2gKdG8uICBJdCBpcyBiZXR0ZXIgdG8gbGVhdmUgdGhlIGNob2ljZSB0byB0aGVt LgoKVGhlIHRpbWUgdG8gdXNlIEBjb2Rle21ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsfSBpcyB3 aGVuIGl0IGlzIGNydWNpYWwKdGhhdCBubyB0d28gYnVmZmVycyBldmVyIHNoYXJlIHRoZSBzYW1l IGJpbmRpbmcuICBGb3IgZXhhbXBsZSwgd2hlbiBhCnZhcmlhYmxlIGlzIHVzZWQgZm9yIGludGVy bmFsIHB1cnBvc2VzIGluIGEgTGlzcCBwcm9ncmFtIHdoaWNoIGRlcGVuZHMKb24gaGF2aW5nIHNl cGFyYXRlIHZhbHVlcyBpbiBzZXBhcmF0ZSBidWZmZXJzLCB0aGVuIHVzaW5nCkBjb2Rle21ha2Ut dmFyaWFibGUtYnVmZmVyLWxvY2FsfSBjYW4gYmUgdGhlIGJlc3Qgc29sdXRpb24uCkBlbmQgZGVm Zm4KCkBkZWZtYWMgZGVmdmFyLWxvY2FsIHZhcmlhYmxlIHZhbHVlICZvcHRpb25hbCBkb2NzdHJp bmcKVGhpcyBtYWNybyBkZWZpbmVzIEB2YXJ7dmFyaWFibGV9IGFzIGEgdmFyaWFibGUgd2l0aCBp bml0aWFsIHZhbHVlCkB2YXJ7dmFsdWV9IGFuZCBAdmFye2RvY3N0cmluZ30sIGFuZCBtYXJrcyBp dCBhcyBhdXRvbWF0aWNhbGx5CmJ1ZmZlci1sb2NhbC4gIEl0IGlzIGVxdWl2YWxlbnQgdG8gY2Fs bGluZyBAY29kZXtkZWZ2YXJ9IGZvbGxvd2VkIGJ5CkBjb2Rle21ha2UtdmFyaWFibGUtYnVmZmVy LWxvY2FsfS4gIEB2YXJ7dmFyaWFibGV9IHNob3VsZCBiZSBhbgp1bnF1b3RlZCBzeW1ib2wuCkBl bmQgZGVmbWFjCgpAZGVmdW4gbG9jYWwtdmFyaWFibGUtcCB2YXJpYWJsZSAmb3B0aW9uYWwgYnVm ZmVyClRoaXMgcmV0dXJucyBAY29kZXt0fSBpZiBAdmFye3ZhcmlhYmxlfSBpcyBidWZmZXItbG9j YWwgaW4gYnVmZmVyCkB2YXJ7YnVmZmVyfSAod2hpY2ggZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQg YnVmZmVyKTsgb3RoZXJ3aXNlLApAY29kZXtuaWx9LgpAZW5kIGRlZnVuCgpAZGVmdW4gbG9jYWwt dmFyaWFibGUtaWYtc2V0LXAgdmFyaWFibGUgJm9wdGlvbmFsIGJ1ZmZlcgpUaGlzIHJldHVybnMg QGNvZGV7dH0gaWYgQHZhcnt2YXJpYWJsZX0gZWl0aGVyIGhhcyBhIGJ1ZmZlci1sb2NhbAp2YWx1 ZSBpbiBidWZmZXIgQHZhcntidWZmZXJ9LCBvciBpcyBhdXRvbWF0aWNhbGx5IGJ1ZmZlci1sb2Nh bC4KT3RoZXJ3aXNlLCBpdCByZXR1cm5zIEBjb2Rle25pbH0uICBJZiBvbWl0dGVkIG9yIEBjb2Rl e25pbH0sCkB2YXJ7YnVmZmVyfSBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBidWZmZXIuCkBlbmQg ZGVmdW4KCkBkZWZ1biBidWZmZXItbG9jYWwtdmFsdWUgdmFyaWFibGUgYnVmZmVyClRoaXMgZnVu Y3Rpb24gcmV0dXJucyB0aGUgYnVmZmVyLWxvY2FsIGJpbmRpbmcgb2YgQHZhcnt2YXJpYWJsZX0g KGEKc3ltYm9sKSBpbiBidWZmZXIgQHZhcntidWZmZXJ9LiAgSWYgQHZhcnt2YXJpYWJsZX0gZG9l cyBub3QgaGF2ZSBhCmJ1ZmZlci1sb2NhbCBiaW5kaW5nIGluIGJ1ZmZlciBAdmFye2J1ZmZlcn0s IGl0IHJldHVybnMgdGhlIGRlZmF1bHQKdmFsdWUgKEBweHJlZntEZWZhdWx0IFZhbHVlfSkgb2Yg QHZhcnt2YXJpYWJsZX0gaW5zdGVhZC4KQGVuZCBkZWZ1bgoKQGRlZnVuIGJ1ZmZlci1sb2NhbC12 YXJpYWJsZXMgJm9wdGlvbmFsIGJ1ZmZlcgpUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBsaXN0IGRl c2NyaWJpbmcgdGhlIGJ1ZmZlci1sb2NhbCB2YXJpYWJsZXMgaW4KYnVmZmVyIEB2YXJ7YnVmZmVy fS4gIChJZiBAdmFye2J1ZmZlcn0gaXMgb21pdHRlZCwgdGhlIGN1cnJlbnQgYnVmZmVyCmlzIHVz ZWQuKSAgTm9ybWFsbHksIGVhY2ggbGlzdCBlbGVtZW50IGhhcyB0aGUgZm9ybQpAd3tAY29kZXso QHZhcntzeW19IC4gQHZhcnt2YWx9KX19LCB3aGVyZSBAdmFye3N5bX0gaXMgYSBidWZmZXItbG9j YWwKdmFyaWFibGUgKGEgc3ltYm9sKSBhbmQgQHZhcnt2YWx9IGlzIGl0cyBidWZmZXItbG9jYWwg dmFsdWUuICBCdXQgd2hlbgphIHZhcmlhYmxlJ3MgYnVmZmVyLWxvY2FsIGJpbmRpbmcgaW4gQHZh cntidWZmZXJ9IGlzIHZvaWQsIGl0cyBsaXN0CmVsZW1lbnQgaXMganVzdCBAdmFye3N5bX0uCgpA ZXhhbXBsZQpAZ3JvdXAKKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2Zvb2JhcikKKG1ha3VuYm91bmQg J2Zvb2JhcikKKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2JpbmQtbWUpCihzZXRxIGJpbmQtbWUgNjkp CkBlbmQgZ3JvdXAKKHNldHEgbGNsIChidWZmZXItbG9jYWwtdmFyaWFibGVzKSkKICAgIDs7IEBy e0ZpcnN0LCBidWlsdC1pbiB2YXJpYWJsZXMgbG9jYWwgaW4gYWxsIGJ1ZmZlcnM6fQpAcmVzdWx0 e30gKChtYXJrLWFjdGl2ZSAuIG5pbCkKICAgIChidWZmZXItdW5kby1saXN0IC4gbmlsKQogICAg KG1vZGUtbmFtZSAuICJGdW5kYW1lbnRhbCIpCiAgICBAZG90c3t9CkBncm91cAogICAgOzsgQHJ7 TmV4dCwgbm9uLWJ1aWx0LWluIGJ1ZmZlci1sb2NhbCB2YXJpYWJsZXMufQogICAgOzsgQHJ7VGhp cyBvbmUgaXMgYnVmZmVyLWxvY2FsIGFuZCB2b2lkOn0KICAgIGZvb2JhcgogICAgOzsgQHJ7VGhp cyBvbmUgaXMgYnVmZmVyLWxvY2FsIGFuZCBub252b2lkOn0KICAgIChiaW5kLW1lIC4gNjkpKQpA ZW5kIGdyb3VwCkBlbmQgZXhhbXBsZQoKTm90ZSB0aGF0IHN0b3JpbmcgbmV3IHZhbHVlcyBpbnRv IHRoZSBAc2N7Y2RyfXMgb2YgY29ucyBjZWxscyBpbiB0aGlzCmxpc3QgZG9lcyBAZW1waHtub3R9 IGNoYW5nZSB0aGUgYnVmZmVyLWxvY2FsIHZhbHVlcyBvZiB0aGUgdmFyaWFibGVzLgpAZW5kIGRl ZnVuCgpAZGVmZm4gQ29tbWFuZCBraWxsLWxvY2FsLXZhcmlhYmxlIHZhcmlhYmxlClRoaXMgZnVu Y3Rpb24gZGVsZXRlcyB0aGUgYnVmZmVyLWxvY2FsIGJpbmRpbmcgKGlmIGFueSkgZm9yCkB2YXJ7 dmFyaWFibGV9IChhIHN5bWJvbCkgaW4gdGhlIGN1cnJlbnQgYnVmZmVyLiAgQXMgYSByZXN1bHQs IHRoZQpkZWZhdWx0IGJpbmRpbmcgb2YgQHZhcnt2YXJpYWJsZX0gYmVjb21lcyB2aXNpYmxlIGlu IHRoaXMgYnVmZmVyLiAgVGhpcwp0eXBpY2FsbHkgcmVzdWx0cyBpbiBhIGNoYW5nZSBpbiB0aGUg dmFsdWUgb2YgQHZhcnt2YXJpYWJsZX0sIHNpbmNlIHRoZQpkZWZhdWx0IHZhbHVlIGlzIHVzdWFs bHkgZGlmZmVyZW50IGZyb20gdGhlIGJ1ZmZlci1sb2NhbCB2YWx1ZSBqdXN0CmVsaW1pbmF0ZWQu CgpJZiB5b3Uga2lsbCB0aGUgYnVmZmVyLWxvY2FsIGJpbmRpbmcgb2YgYSB2YXJpYWJsZSB0aGF0 IGF1dG9tYXRpY2FsbHkKYmVjb21lcyBidWZmZXItbG9jYWwgd2hlbiBzZXQsIHRoaXMgbWFrZXMg dGhlIGRlZmF1bHQgdmFsdWUgdmlzaWJsZSBpbgp0aGUgY3VycmVudCBidWZmZXIuICBIb3dldmVy LCBpZiB5b3Ugc2V0IHRoZSB2YXJpYWJsZSBhZ2FpbiwgdGhhdCB3aWxsCm9uY2UgYWdhaW4gY3Jl YXRlIGEgYnVmZmVyLWxvY2FsIGJpbmRpbmcgZm9yIGl0LgoKQGNvZGV7a2lsbC1sb2NhbC12YXJp YWJsZX0gcmV0dXJucyBAdmFye3ZhcmlhYmxlfS4KClRoaXMgZnVuY3Rpb24gaXMgYSBjb21tYW5k IGJlY2F1c2UgaXQgaXMgc29tZXRpbWVzIHVzZWZ1bCB0byBraWxsIG9uZQpidWZmZXItbG9jYWwg dmFyaWFibGUgaW50ZXJhY3RpdmVseSwganVzdCBhcyBpdCBpcyB1c2VmdWwgdG8gY3JlYXRlCmJ1 ZmZlci1sb2NhbCB2YXJpYWJsZXMgaW50ZXJhY3RpdmVseS4KQGVuZCBkZWZmbgoKQGNpbmRleCBs b2NhbCB2YXJpYWJsZXMsIGtpbGxlZCBieSBtYWpvciBtb2RlCkBkZWZ1biBraWxsLWFsbC1sb2Nh bC12YXJpYWJsZXMKVGhpcyBmdW5jdGlvbiBlbGltaW5hdGVzIGFsbCB0aGUgYnVmZmVyLWxvY2Fs IHZhcmlhYmxlIGJpbmRpbmdzIG9mIHRoZQpjdXJyZW50IGJ1ZmZlciBleGNlcHQgZm9yIHZhcmlh YmxlcyBtYXJrZWQgYXMgcGVybWFuZW50IGFuZCBsb2NhbApob29rIGZ1bmN0aW9ucyB0aGF0IGhh dmUgYSBub24tQGNvZGV7bmlsfSBAY29kZXtwZXJtYW5lbnQtbG9jYWwtaG9va30KcHJvcGVydHkg KEBweHJlZntTZXR0aW5nIEhvb2tzfSkuICBBcyBhIHJlc3VsdCwgdGhlIGJ1ZmZlciB3aWxsIHNl ZQp0aGUgZGVmYXVsdCB2YWx1ZXMgb2YgbW9zdCB2YXJpYWJsZXMuCgpUaGlzIGZ1bmN0aW9uIGFs c28gcmVzZXRzIGNlcnRhaW4gb3RoZXIgaW5mb3JtYXRpb24gcGVydGFpbmluZyB0byB0aGUKYnVm ZmVyOiBpdCBzZXRzIHRoZSBsb2NhbCBrZXltYXAgdG8gQGNvZGV7bmlsfSwgdGhlIHN5bnRheCB0 YWJsZSB0byB0aGUKdmFsdWUgb2YgQGNvZGV7KHN0YW5kYXJkLXN5bnRheC10YWJsZSl9LCB0aGUg Y2FzZSB0YWJsZSB0bwpAY29kZXsoc3RhbmRhcmQtY2FzZS10YWJsZSl9LCBhbmQgdGhlIGFiYnJl diB0YWJsZSB0byB0aGUgdmFsdWUgb2YKQGNvZGV7ZnVuZGFtZW50YWwtbW9kZS1hYmJyZXYtdGFi bGV9LgoKVGhlIHZlcnkgZmlyc3QgdGhpbmcgdGhpcyBmdW5jdGlvbiBkb2VzIGlzIHJ1biB0aGUg bm9ybWFsIGhvb2sKQGNvZGV7Y2hhbmdlLW1ham9yLW1vZGUtaG9va30gKHNlZSBiZWxvdykuCgpF dmVyeSBtYWpvciBtb2RlIGNvbW1hbmQgYmVnaW5zIGJ5IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwg d2hpY2ggaGFzIHRoZQplZmZlY3Qgb2Ygc3dpdGNoaW5nIHRvIEZ1bmRhbWVudGFsIG1vZGUgYW5k IGVyYXNpbmcgbW9zdCBvZiB0aGUgZWZmZWN0cwpvZiB0aGUgcHJldmlvdXMgbWFqb3IgbW9kZS4g IFRvIGVuc3VyZSB0aGF0IHRoaXMgZG9lcyBpdHMgam9iLCB0aGUKdmFyaWFibGVzIHRoYXQgbWFq b3IgbW9kZXMgc2V0IHNob3VsZCBub3QgYmUgbWFya2VkIHBlcm1hbmVudC4KCkBjb2Rle2tpbGwt YWxsLWxvY2FsLXZhcmlhYmxlc30gcmV0dXJucyBAY29kZXtuaWx9LgpAZW5kIGRlZnVuCgpAZGVm dmFyIGNoYW5nZS1tYWpvci1tb2RlLWhvb2sKVGhlIGZ1bmN0aW9uIEBjb2Rle2tpbGwtYWxsLWxv Y2FsLXZhcmlhYmxlc30gcnVucyB0aGlzIG5vcm1hbCBob29rCmJlZm9yZSBpdCBkb2VzIGFueXRo aW5nIGVsc2UuICBUaGlzIGdpdmVzIG1ham9yIG1vZGVzIGEgd2F5IHRvIGFycmFuZ2UKZm9yIHNv bWV0aGluZyBzcGVjaWFsIHRvIGJlIGRvbmUgaWYgdGhlIHVzZXIgc3dpdGNoZXMgdG8gYSBkaWZm ZXJlbnQKbWFqb3IgbW9kZS4gIEl0IGlzIGFsc28gdXNlZnVsIGZvciBidWZmZXItc3BlY2lmaWMg bWlub3IgbW9kZXMKdGhhdCBzaG91bGQgYmUgZm9yZ290dGVuIGlmIHRoZSB1c2VyIGNoYW5nZXMg dGhlIG1ham9yIG1vZGUuCgpGb3IgYmVzdCByZXN1bHRzLCBtYWtlIHRoaXMgdmFyaWFibGUgYnVm ZmVyLWxvY2FsLCBzbyB0aGF0IGl0IHdpbGwKZGlzYXBwZWFyIGFmdGVyIGRvaW5nIGl0cyBqb2Ig YW5kIHdpbGwgbm90IGludGVyZmVyZSB3aXRoIHRoZQpzdWJzZXF1ZW50IG1ham9yIG1vZGUuICBA eHJlZntIb29rc30uCkBlbmQgZGVmdmFyCgpAY2luZGV4IHBlcm1hbmVudCBsb2NhbCB2YXJpYWJs ZQpBIGJ1ZmZlci1sb2NhbCB2YXJpYWJsZSBpcyBAZGZue3Blcm1hbmVudH0gaWYgdGhlIHZhcmlh YmxlIG5hbWUgKGEKc3ltYm9sKSBoYXMgYSBAY29kZXtwZXJtYW5lbnQtbG9jYWx9IHByb3BlcnR5 IHRoYXQgaXMgbm9uLUBjb2Rle25pbH0uClN1Y2ggdmFyaWFibGVzIGFyZSB1bmFmZmVjdGVkIGJ5 IEBjb2Rle2tpbGwtYWxsLWxvY2FsLXZhcmlhYmxlc30sIGFuZAp0aGVpciBsb2NhbCBiaW5kaW5n cyBhcmUgdGhlcmVmb3JlIG5vdCBjbGVhcmVkIGJ5IGNoYW5naW5nIG1ham9yIG1vZGVzLgpQZXJt YW5lbnQgbG9jYWxzIGFyZSBhcHByb3ByaWF0ZSBmb3IgZGF0YSBwZXJ0YWluaW5nIHRvIHdoZXJl IHRoZSBmaWxlCmNhbWUgZnJvbSBvciBob3cgdG8gc2F2ZSBpdCwgcmF0aGVyIHRoYW4gd2l0aCBo b3cgdG8gZWRpdCB0aGUgY29udGVudHMuCgpAbm9kZSBEZWZhdWx0IFZhbHVlCkBzdWJzZWN0aW9u IFRoZSBEZWZhdWx0IFZhbHVlIG9mIGEgQnVmZmVyLUxvY2FsIFZhcmlhYmxlCkBjaW5kZXggZGVm YXVsdCB2YWx1ZQoKICBUaGUgZ2xvYmFsIHZhbHVlIG9mIGEgdmFyaWFibGUgd2l0aCBidWZmZXIt bG9jYWwgYmluZGluZ3MgaXMgYWxzbwpjYWxsZWQgdGhlIEBkZm57ZGVmYXVsdH0gdmFsdWUsIGJl Y2F1c2UgaXQgaXMgdGhlIHZhbHVlIHRoYXQgaXMgaW4KZWZmZWN0IHdoZW5ldmVyIG5laXRoZXIg dGhlIGN1cnJlbnQgYnVmZmVyIG5vciB0aGUgc2VsZWN0ZWQgZnJhbWUgaGFzCml0cyBvd24gYmlu ZGluZyBmb3IgdGhlIHZhcmlhYmxlLgoKICBUaGUgZnVuY3Rpb25zIEBjb2Rle2RlZmF1bHQtdmFs dWV9IGFuZCBAY29kZXtzZXRxLWRlZmF1bHR9IGFjY2VzcyBhbmQKY2hhbmdlIGEgdmFyaWFibGUn cyBkZWZhdWx0IHZhbHVlIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgY3VycmVudApidWZmZXIg aGFzIGEgYnVmZmVyLWxvY2FsIGJpbmRpbmcuICBGb3IgZXhhbXBsZSwgeW91IGNvdWxkIHVzZQpA Y29kZXtzZXRxLWRlZmF1bHR9IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBzZXR0aW5nIG9mCkBjb2Rl e3BhcmFncmFwaC1zdGFydH0gZm9yIG1vc3QgYnVmZmVyczsgYW5kIHRoaXMgd291bGQgd29yayBl dmVuIHdoZW4KeW91IGFyZSBpbiBhIEMgb3IgTGlzcCBtb2RlIGJ1ZmZlciB0aGF0IGhhcyBhIGJ1 ZmZlci1sb2NhbCB2YWx1ZSBmb3IKdGhpcyB2YXJpYWJsZS4KCkBjIEVtYWNzIDE5IGZlYXR1cmUK ICBUaGUgc3BlY2lhbCBmb3JtcyBAY29kZXtkZWZ2YXJ9IGFuZCBAY29kZXtkZWZjb25zdH0gYWxz byBzZXQgdGhlCmRlZmF1bHQgdmFsdWUgKGlmIHRoZXkgc2V0IHRoZSB2YXJpYWJsZSBhdCBhbGwp LCByYXRoZXIgdGhhbiBhbnkKYnVmZmVyLWxvY2FsIHZhbHVlLgoKQGRlZnVuIGRlZmF1bHQtdmFs dWUgc3ltYm9sClRoaXMgZnVuY3Rpb24gcmV0dXJucyBAdmFye3N5bWJvbH0ncyBkZWZhdWx0IHZh bHVlLiAgVGhpcyBpcyB0aGUgdmFsdWUKdGhhdCBpcyBzZWVuIGluIGJ1ZmZlcnMgYW5kIGZyYW1l cyB0aGF0IGRvIG5vdCBoYXZlIHRoZWlyIG93biB2YWx1ZXMgZm9yCnRoaXMgdmFyaWFibGUuICBJ ZiBAdmFye3N5bWJvbH0gaXMgbm90IGJ1ZmZlci1sb2NhbCwgdGhpcyBpcyBlcXVpdmFsZW50CnRv IEBjb2Rle3N5bWJvbC12YWx1ZX0gKEBweHJlZntBY2Nlc3NpbmcgVmFyaWFibGVzfSkuCkBlbmQg ZGVmdW4KCkBjIEVtYWNzIDE5IGZlYXR1cmUKQGRlZnVuIGRlZmF1bHQtYm91bmRwIHN5bWJvbApU aGUgZnVuY3Rpb24gQGNvZGV7ZGVmYXVsdC1ib3VuZHB9IHRlbGxzIHlvdSB3aGV0aGVyIEB2YXJ7 c3ltYm9sfSdzCmRlZmF1bHQgdmFsdWUgaXMgbm9udm9pZC4gIElmIEBjb2RleyhkZWZhdWx0LWJv dW5kcCAnZm9vKX0gcmV0dXJucwpAY29kZXtuaWx9LCB0aGVuIEBjb2RleyhkZWZhdWx0LXZhbHVl ICdmb28pfSB3b3VsZCBnZXQgYW4gZXJyb3IuCgpAY29kZXtkZWZhdWx0LWJvdW5kcH0gaXMgdG8g QGNvZGV7ZGVmYXVsdC12YWx1ZX0gYXMgQGNvZGV7Ym91bmRwfSBpcyB0bwpAY29kZXtzeW1ib2wt dmFsdWV9LgpAZW5kIGRlZnVuCgpAZGVmc3BlYyBzZXRxLWRlZmF1bHQgW3N5bWJvbCBmb3JtXUBk b3Rze30KVGhpcyBzcGVjaWFsIGZvcm0gZ2l2ZXMgZWFjaCBAdmFye3N5bWJvbH0gYSBuZXcgZGVm YXVsdCB2YWx1ZSwgd2hpY2ggaXMKdGhlIHJlc3VsdCBvZiBldmFsdWF0aW5nIHRoZSBjb3JyZXNw b25kaW5nIEB2YXJ7Zm9ybX0uICBJdCBkb2VzIG5vdApldmFsdWF0ZSBAdmFye3N5bWJvbH0sIGJ1 dCBkb2VzIGV2YWx1YXRlIEB2YXJ7Zm9ybX0uICBUaGUgdmFsdWUgb2YgdGhlCkBjb2Rle3NldHEt ZGVmYXVsdH0gZm9ybSBpcyB0aGUgdmFsdWUgb2YgdGhlIGxhc3QgQHZhcntmb3JtfS4KCklmIGEg QHZhcntzeW1ib2x9IGlzIG5vdCBidWZmZXItbG9jYWwgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciwg YW5kIGlzIG5vdAptYXJrZWQgYXV0b21hdGljYWxseSBidWZmZXItbG9jYWwsIEBjb2Rle3NldHEt ZGVmYXVsdH0gaGFzIHRoZSBzYW1lCmVmZmVjdCBhcyBAY29kZXtzZXRxfS4gIElmIEB2YXJ7c3lt Ym9sfSBpcyBidWZmZXItbG9jYWwgZm9yIHRoZSBjdXJyZW50CmJ1ZmZlciwgdGhlbiB0aGlzIGNo YW5nZXMgdGhlIHZhbHVlIHRoYXQgb3RoZXIgYnVmZmVycyB3aWxsIHNlZSAoYXMgbG9uZwphcyB0 aGV5IGRvbid0IGhhdmUgYSBidWZmZXItbG9jYWwgdmFsdWUpLCBidXQgbm90IHRoZSB2YWx1ZSB0 aGF0IHRoZQpjdXJyZW50IGJ1ZmZlciBzZWVzLgoKQGV4YW1wbGUKQGdyb3VwCjs7IEBye0luIGJ1 ZmZlciBAc2FtcHtmb299On0KKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2J1ZmZlci1sb2NhbCkKICAg ICBAcmVzdWx0e30gYnVmZmVyLWxvY2FsCkBlbmQgZ3JvdXAKQGdyb3VwCihzZXRxIGJ1ZmZlci1s b2NhbCAndmFsdWUtaW4tZm9vKQogICAgIEByZXN1bHR7fSB2YWx1ZS1pbi1mb28KQGVuZCBncm91 cApAZ3JvdXAKKHNldHEtZGVmYXVsdCBidWZmZXItbG9jYWwgJ25ldy1kZWZhdWx0KQogICAgIEBy ZXN1bHR7fSBuZXctZGVmYXVsdApAZW5kIGdyb3VwCkBncm91cApidWZmZXItbG9jYWwKICAgICBA cmVzdWx0e30gdmFsdWUtaW4tZm9vCkBlbmQgZ3JvdXAKQGdyb3VwCihkZWZhdWx0LXZhbHVlICdi dWZmZXItbG9jYWwpCiAgICAgQHJlc3VsdHt9IG5ldy1kZWZhdWx0CkBlbmQgZ3JvdXAKCkBncm91 cAo7OyBAcntJbiAodGhlIG5ldykgYnVmZmVyIEBzYW1we2Jhcn06fQpidWZmZXItbG9jYWwKICAg ICBAcmVzdWx0e30gbmV3LWRlZmF1bHQKQGVuZCBncm91cApAZ3JvdXAKKGRlZmF1bHQtdmFsdWUg J2J1ZmZlci1sb2NhbCkKICAgICBAcmVzdWx0e30gbmV3LWRlZmF1bHQKQGVuZCBncm91cApAZ3Jv dXAKKHNldHEgYnVmZmVyLWxvY2FsICdhbm90aGVyLWRlZmF1bHQpCiAgICAgQHJlc3VsdHt9IGFu b3RoZXItZGVmYXVsdApAZW5kIGdyb3VwCkBncm91cAooZGVmYXVsdC12YWx1ZSAnYnVmZmVyLWxv Y2FsKQogICAgIEByZXN1bHR7fSBhbm90aGVyLWRlZmF1bHQKQGVuZCBncm91cAoKQGdyb3VwCjs7 IEBye0JhY2sgaW4gYnVmZmVyIEBzYW1we2Zvb306fQpidWZmZXItbG9jYWwKICAgICBAcmVzdWx0 e30gdmFsdWUtaW4tZm9vCihkZWZhdWx0LXZhbHVlICdidWZmZXItbG9jYWwpCiAgICAgQHJlc3Vs dHt9IGFub3RoZXItZGVmYXVsdApAZW5kIGdyb3VwCkBlbmQgZXhhbXBsZQpAZW5kIGRlZnNwZWMK CkBkZWZ1biBzZXQtZGVmYXVsdCBzeW1ib2wgdmFsdWUKVGhpcyBmdW5jdGlvbiBpcyBsaWtlIEBj b2Rle3NldHEtZGVmYXVsdH0sIGV4Y2VwdCB0aGF0IEB2YXJ7c3ltYm9sfSBpcwphbiBvcmRpbmFy eSBldmFsdWF0ZWQgYXJndW1lbnQuCgpAZXhhbXBsZQpAZ3JvdXAKKHNldC1kZWZhdWx0IChjYXIg JyhhIGIgYykpIDIzKQogICAgIEByZXN1bHR7fSAyMwpAZW5kIGdyb3VwCkBncm91cAooZGVmYXVs dC12YWx1ZSAnYSkKICAgICBAcmVzdWx0e30gMjMKQGVuZCBncm91cApAZW5kIGV4YW1wbGUKQGVu ZCBkZWZ1bgoKICBBIHZhcmlhYmxlIGNhbiBiZSBsZXQtYm91bmQgKEBweHJlZntMb2NhbCBWYXJp YWJsZXN9KSB0byBhIHZhbHVlLgpUaGlzIG1ha2VzIGl0cyBnbG9iYWwgdmFsdWUgc2hhZG93ZWQg YnkgdGhlIGJpbmRpbmc7CkBjb2Rle2RlZmF1bHQtdmFsdWV9IHdpbGwgdGhlbiByZXR1cm4gdGhl IHZhbHVlIGZyb20gdGhhdCBiaW5kaW5nLCBub3QKdGhlIGdsb2JhbCB2YWx1ZSwgYW5kIEBjb2Rl e3NldC1kZWZhdWx0fSB3aWxsIGJlIHByZXZlbnRlZCBmcm9tCnNldHRpbmcgdGhlIGdsb2JhbCB2 YWx1ZSAoaXQgd2lsbCBjaGFuZ2UgdGhlIGxldC1ib3VuZCB2YWx1ZSBpbnN0ZWFkKS4KVGhlIGZv bGxvd2luZyB0d28gZnVuY3Rpb25zIGFsbG93IHRvIHJlZmVyZW5jZSB0aGUgZ2xvYmFsIHZhbHVl IGV2ZW4KaWYgaXQncyBzaGFkb3dlZCBieSBhIGxldC1iaW5kaW5nLgoKQGNpbmRleCB0b3AtbGV2 ZWwgZGVmYXVsdCB2YWx1ZQpAZGVmdW4gZGVmYXVsdC10b3BsZXZlbC12YWx1ZSBzeW1ib2wKVGhp cyBmdW5jdGlvbiByZXR1cm5zIHRoZSBAZGZue3RvcC1sZXZlbH0gZGVmYXVsdCB2YWx1ZSBvZgpA dmFye3N5bWJvbH0sIHdoaWNoIGlzIGl0cyB2YWx1ZSBvdXRzaWRlIG9mIGFueSBsZXQtYmluZGlu Zy4KQGVuZCBkZWZ1bgoKQGV4YW1wbGUKQGdyb3VwCihkZWZ2YXIgdmFyaWFibGUgJ2dsb2JhbC12 YWx1ZSkKICAgIEByZXN1bHR7fSB2YXJpYWJsZQpAZW5kIGdyb3VwCkBncm91cAoobGV0ICgodmFy aWFibGUgJ2xldC1iaW5kaW5nKSkKICAoZGVmYXVsdC12YWx1ZSAndmFyaWFibGUpKQogICAgQHJl c3VsdHt9IGxldC1iaW5kaW5nCkBlbmQgZ3JvdXAKQGdyb3VwCihsZXQgKCh2YXJpYWJsZSAnbGV0 LWJpbmRpbmcpKQogIChkZWZhdWx0LXRvcGxldmVsLXZhbHVlICd2YXJpYWJsZSkpCiAgICBAcmVz dWx0e30gZ2xvYmFsLXZhbHVlCkBlbmQgZ3JvdXAKQGVuZCBleGFtcGxlCgpAZGVmdW4gc2V0LWRl ZmF1bHQtdG9wbGV2ZWwtdmFsdWUgc3ltYm9sIHZhbHVlClRoaXMgZnVuY3Rpb24gc2V0cyB0aGUg dG9wLWxldmVsIGRlZmF1bHQgdmFsdWUgb2YgQHZhcntzeW1ib2x9IHRvIHRoZQpzcGVjaWZpZWQg QHZhcnt2YWx1ZX0uICBUaGlzIGNvbWVzIGluIGhhbmR5IHdoZW4geW91IHdhbnQgdG8gc2V0IHRo ZQpnbG9iYWwgdmFsdWUgb2YgQHZhcntzeW1ib2x9IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB5b3Vy IGNvZGUgcnVucyBpbgp0aGUgY29udGV4dCBvZiBAdmFye3N5bWJvbH0ncyBsZXQtYmluZGluZy4K QGVuZCBkZWZ1bgoKCkBub2RlIEZpbGUgTG9jYWwgVmFyaWFibGVzCkBzZWN0aW9uIEZpbGUgTG9j YWwgVmFyaWFibGVzCkBjaW5kZXggZmlsZSBsb2NhbCB2YXJpYWJsZXMKCiAgQSBmaWxlIGNhbiBz cGVjaWZ5IGxvY2FsIHZhcmlhYmxlIHZhbHVlczsgRW1hY3MgdXNlcyB0aGVzZSB0byBjcmVhdGUK YnVmZmVyLWxvY2FsIGJpbmRpbmdzIGZvciB0aG9zZSB2YXJpYWJsZXMgaW4gdGhlIGJ1ZmZlciB2 aXNpdGluZyB0aGF0CmZpbGUuICBAeHJlZntGaWxlIFZhcmlhYmxlcywgLCBMb2NhbCBWYXJpYWJs ZXMgaW4gRmlsZXMsIGVtYWNzLCBUaGUKR05VIEVtYWNzIE1hbnVhbH0sIGZvciBiYXNpYyBpbmZv cm1hdGlvbiBhYm91dCBmaWxlLWxvY2FsIHZhcmlhYmxlcy4KVGhpcyBzZWN0aW9uIGRlc2NyaWJl cyB0aGUgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgdGhhdCBhZmZlY3QgaG93CmZpbGUtbG9jYWwg dmFyaWFibGVzIGFyZSBwcm9jZXNzZWQuCgogIElmIGEgZmlsZS1sb2NhbCB2YXJpYWJsZSBjb3Vs ZCBzcGVjaWZ5IGFuIGFyYml0cmFyeSBmdW5jdGlvbiBvciBMaXNwCmV4cHJlc3Npb24gdGhhdCB3 b3VsZCBiZSBjYWxsZWQgbGF0ZXIsIHZpc2l0aW5nIGEgZmlsZSBjb3VsZCB0YWtlIG92ZXIKeW91 ciBFbWFjcy4gIEVtYWNzIHByb3RlY3RzIGFnYWluc3QgdGhpcyBieSBhdXRvbWF0aWNhbGx5IHNl dHRpbmcgb25seQp0aG9zZSBmaWxlLWxvY2FsIHZhcmlhYmxlcyB3aG9zZSBzcGVjaWZpZWQgdmFs dWVzIGFyZSBrbm93biB0byBiZQpzYWZlLiAgT3RoZXIgZmlsZS1sb2NhbCB2YXJpYWJsZXMgYXJl IHNldCBvbmx5IGlmIHRoZSB1c2VyIGFncmVlcy4KCiAgRm9yIGFkZGl0aW9uYWwgc2FmZXR5LCBA Y29kZXtyZWFkLWNpcmNsZX0gaXMgdGVtcG9yYXJpbHkgYm91bmQgdG8KQGNvZGV7bmlsfSB3aGVu IEVtYWNzIHJlYWRzIGZpbGUtbG9jYWwgdmFyaWFibGVzIChAcHhyZWZ7SW5wdXQKRnVuY3Rpb25z fSkuICBUaGlzIHByZXZlbnRzIHRoZSBMaXNwIHJlYWRlciBmcm9tIHJlY29nbml6aW5nIGNpcmN1 bGFyCmFuZCBzaGFyZWQgTGlzcCBzdHJ1Y3R1cmVzIChAcHhyZWZ7Q2lyY3VsYXIgT2JqZWN0c30p LgoKQGRlZm9wdCBlbmFibGUtbG9jYWwtdmFyaWFibGVzClRoaXMgdmFyaWFibGUgY29udHJvbHMg d2hldGhlciB0byBwcm9jZXNzIGZpbGUtbG9jYWwgdmFyaWFibGVzLgpUaGUgcG9zc2libGUgdmFs dWVzIGFyZToKCkB0YWJsZSBAYXNpcwpAaXRlbSBAY29kZXt0fSAodGhlIGRlZmF1bHQpClNldCB0 aGUgc2FmZSB2YXJpYWJsZXMsIGFuZCBxdWVyeSAob25jZSkgYWJvdXQgYW55IHVuc2FmZSB2YXJp YWJsZXMuCkBpdGVtIEBjb2RlezpzYWZlfQpTZXQgb25seSB0aGUgc2FmZSB2YXJpYWJsZXMgYW5k IGRvIG5vdCBxdWVyeS4KQGl0ZW0gQGNvZGV7OmFsbH0KU2V0IGFsbCB0aGUgdmFyaWFibGVzIGFu ZCBkbyBub3QgcXVlcnkuCkBpdGVtIEBjb2Rle25pbH0KRG9uJ3Qgc2V0IGFueSB2YXJpYWJsZXMu CkBpdGVtIGFueXRoaW5nIGVsc2UKUXVlcnkgKG9uY2UpIGFib3V0IGFsbCB0aGUgdmFyaWFibGVz LgpAZW5kIHRhYmxlCkBlbmQgZGVmb3B0CgpAZGVmdmFyIGluaGliaXQtbG9jYWwtdmFyaWFibGVz LXJlZ2V4cHMKVGhpcyBpcyBhIGxpc3Qgb2YgcmVndWxhciBleHByZXNzaW9ucy4gIElmIGEgZmls ZSBoYXMgYSBuYW1lCm1hdGNoaW5nIGFuIGVsZW1lbnQgb2YgdGhpcyBsaXN0LCB0aGVuIGl0IGlz IG5vdCBzY2FubmVkIGZvcgphbnkgZm9ybSBvZiBmaWxlLWxvY2FsIHZhcmlhYmxlLiAgRm9yIGV4 YW1wbGVzIG9mIHdoeSB5b3UgbWlnaHQgd2FudAp0byB1c2UgdGhpcywgQHB4cmVme0F1dG8gTWFq b3IgTW9kZX0uCkBlbmQgZGVmdmFyCgpAZGVmdW4gaGFjay1sb2NhbC12YXJpYWJsZXMgJm9wdGlv bmFsIGhhbmRsZS1tb2RlClRoaXMgZnVuY3Rpb24gcGFyc2VzLCBhbmQgYmluZHMgb3IgZXZhbHVh dGVzIGFzIGFwcHJvcHJpYXRlLCBhbnkgbG9jYWwKdmFyaWFibGVzIHNwZWNpZmllZCBieSB0aGUg Y29udGVudHMgb2YgdGhlIGN1cnJlbnQgYnVmZmVyLiAgVGhlIHZhcmlhYmxlCkBjb2Rle2VuYWJs ZS1sb2NhbC12YXJpYWJsZXN9IGhhcyBpdHMgZWZmZWN0IGhlcmUuICBIb3dldmVyLCB0aGlzCmZ1 bmN0aW9uIGRvZXMgbm90IGxvb2sgZm9yIHRoZSBAc2FtcHttb2RlOn0gbG9jYWwgdmFyaWFibGUg aW4gdGhlCkB3e0BzYW1wey0qLX19IGxpbmUuICBAY29kZXtzZXQtYXV0by1tb2RlfSBkb2VzIHRo YXQsIGFsc28gdGFraW5nCkBjb2Rle2VuYWJsZS1sb2NhbC12YXJpYWJsZXN9IGludG8gYWNjb3Vu dCAoQHB4cmVme0F1dG8gTWFqb3IgTW9kZX0pLgoKVGhpcyBmdW5jdGlvbiB3b3JrcyBieSB3YWxr aW5nIHRoZSBhbGlzdCBzdG9yZWQgaW4KQGNvZGV7ZmlsZS1sb2NhbC12YXJpYWJsZXMtYWxpc3R9 IGFuZCBhcHBseWluZyBlYWNoIGxvY2FsIHZhcmlhYmxlIGluCnR1cm4uICBJdCBjYWxscyBAY29k ZXtiZWZvcmUtaGFjay1sb2NhbC12YXJpYWJsZXMtaG9va30gYW5kCkBjb2Rle2hhY2stbG9jYWwt dmFyaWFibGVzLWhvb2t9IGJlZm9yZSBhbmQgYWZ0ZXIgYXBwbHlpbmcgdGhlCnZhcmlhYmxlcywg cmVzcGVjdGl2ZWx5LiAgSXQgb25seSBjYWxscyB0aGUgYmVmb3JlLWhvb2sgaWYgdGhlIGFsaXN0 CmlzIG5vbi1AY29kZXtuaWx9OyBpdCBhbHdheXMgY2FsbHMgdGhlIG90aGVyIGhvb2suICBUaGlz CmZ1bmN0aW9uIGlnbm9yZXMgYSBAc2FtcHttb2RlfSBlbGVtZW50IGlmIGl0IHNwZWNpZmllcyB0 aGUgc2FtZSBtYWpvcgptb2RlIGFzIHRoZSBidWZmZXIgYWxyZWFkeSBoYXMuCgpJZiB0aGUgb3B0 aW9uYWwgYXJndW1lbnQgQHZhcntoYW5kbGUtbW9kZX0gaXMgQGNvZGV7dH0sIHRoZW4gYWxsIHRo aXMKZnVuY3Rpb24gZG9lcyBpcyByZXR1cm4gYSBzeW1ib2wgc3BlY2lmeWluZyB0aGUgbWFqb3Ig bW9kZSwgaWYgdGhlCkB3e0BzYW1wey0qLX19IGxpbmUgb3IgdGhlIGxvY2FsIHZhcmlhYmxlcyBs aXN0IHNwZWNpZmllcyBvbmUsIGFuZApAY29kZXtuaWx9IG90aGVyd2lzZS4gIEl0IGRvZXMgbm90 IHNldCB0aGUgbW9kZSBvciBhbnkgb3RoZXIKZmlsZS1sb2NhbCB2YXJpYWJsZS4gIElmIEB2YXJ7 aGFuZGxlLW1vZGV9IGhhcyBhbnkgdmFsdWUgb3RoZXIgdGhhbgpAY29kZXtuaWx9IG9yIEBjb2Rl e3R9LCBhbnkgc2V0dGluZ3Mgb2YgQHNhbXB7bW9kZX0gaW4gdGhlCkB3e0BzYW1wey0qLX19IGxp bmUgb3IgdGhlIGxvY2FsIHZhcmlhYmxlcyBsaXN0IGFyZSBpZ25vcmVkLCBhbmQgdGhlCm90aGVy IHNldHRpbmdzIGFyZSBhcHBsaWVkLiAgSWYgQHZhcntoYW5kbGUtbW9kZX0gaXMgQGNvZGV7bmls fSwgYWxsCnRoZSBmaWxlIGxvY2FsIHZhcmlhYmxlcyBhcmUgc2V0LgpAZW5kIGRlZnVuCgpAZGVm dmFyIGZpbGUtbG9jYWwtdmFyaWFibGVzLWFsaXN0ClRoaXMgYnVmZmVyLWxvY2FsIHZhcmlhYmxl IGhvbGRzIHRoZSBhbGlzdCBvZiBmaWxlLWxvY2FsIHZhcmlhYmxlCnNldHRpbmdzLiAgRWFjaCBl bGVtZW50IG9mIHRoZSBhbGlzdCBpcyBvZiB0aGUgZm9ybQpAd3tAY29kZXsoQHZhcnt2YXJ9IC4g QHZhcnt2YWx1ZX0pfX0sIHdoZXJlIEB2YXJ7dmFyfSBpcyBhIHN5bWJvbCBvZgp0aGUgbG9jYWwg dmFyaWFibGUgYW5kIEB2YXJ7dmFsdWV9IGlzIGl0cyB2YWx1ZS4gIFdoZW4gRW1hY3MgdmlzaXRz IGEKZmlsZSwgaXQgZmlyc3QgY29sbGVjdHMgYWxsIHRoZSBmaWxlLWxvY2FsIHZhcmlhYmxlcyBp bnRvIHRoaXMgYWxpc3QsCmFuZCB0aGVuIHRoZSBAY29kZXtoYWNrLWxvY2FsLXZhcmlhYmxlc30g ZnVuY3Rpb24gYXBwbGllcyB0aGVtIG9uZSBieQpvbmUuCkBlbmQgZGVmdmFyCgpAZGVmdmFyIGJl Zm9yZS1oYWNrLWxvY2FsLXZhcmlhYmxlcy1ob29rCkVtYWNzIGNhbGxzIHRoaXMgaG9vayBpbW1l ZGlhdGVseSBiZWZvcmUgYXBwbHlpbmcgZmlsZS1sb2NhbCB2YXJpYWJsZXMKc3RvcmVkIGluIEBj b2Rle2ZpbGUtbG9jYWwtdmFyaWFibGVzLWFsaXN0fS4KQGVuZCBkZWZ2YXIKCkBkZWZ2YXIgaGFj ay1sb2NhbC12YXJpYWJsZXMtaG9vawpFbWFjcyBjYWxscyB0aGlzIGhvb2sgaW1tZWRpYXRlbHkg YWZ0ZXIgaXQgZmluaXNoZXMgYXBwbHlpbmcKZmlsZS1sb2NhbCB2YXJpYWJsZXMgc3RvcmVkIGlu IEBjb2Rle2ZpbGUtbG9jYWwtdmFyaWFibGVzLWFsaXN0fS4KQGVuZCBkZWZ2YXIKCkBjaW5kZXgg c2FmZSBsb2NhbCB2YXJpYWJsZQogIFlvdSBjYW4gc3BlY2lmeSBzYWZlIHZhbHVlcyBmb3IgYSB2 YXJpYWJsZSB3aXRoIGEKQGNvZGV7c2FmZS1sb2NhbC12YXJpYWJsZX0gcHJvcGVydHkuICBUaGUg cHJvcGVydHkgaGFzIHRvIGJlIGEKZnVuY3Rpb24gb2Ygb25lIGFyZ3VtZW50OyBhbnkgdmFsdWUg aXMgc2FmZSBpZiB0aGUgZnVuY3Rpb24gcmV0dXJucwpub24tQGNvZGV7bmlsfSBnaXZlbiB0aGF0 IHZhbHVlLiAgTWFueSBjb21tb25seS1lbmNvdW50ZXJlZCBmaWxlCnZhcmlhYmxlcyBoYXZlIEBj b2Rle3NhZmUtbG9jYWwtdmFyaWFibGV9IHByb3BlcnRpZXM7IHRoZXNlIGluY2x1ZGUKQGNvZGV7 ZmlsbC1jb2x1bW59LCBAY29kZXtmaWxsLXByZWZpeH0sIGFuZCBAY29kZXtpbmRlbnQtdGFicy1t b2RlfS4KRm9yIGJvb2xlYW4tdmFsdWVkIHZhcmlhYmxlcyB0aGF0IGFyZSBzYWZlLCB1c2UgQGNv ZGV7Ym9vbGVhbnB9IGFzIHRoZQpwcm9wZXJ0eSB2YWx1ZS4KCiAgV2hlbiBkZWZpbmluZyBhIHVz ZXIgb3B0aW9uIHVzaW5nIEBjb2Rle2RlZmN1c3RvbX0sIHlvdSBjYW4gc2V0IGl0cwpAY29kZXtz YWZlLWxvY2FsLXZhcmlhYmxlfSBwcm9wZXJ0eSBieSBhZGRpbmcgdGhlIGFyZ3VtZW50cwpAY29k ZXs6c2FmZSBAdmFye2Z1bmN0aW9ufX0gdG8gQGNvZGV7ZGVmY3VzdG9tfSAoQHB4cmVme1Zhcmlh YmxlCkRlZmluaXRpb25zfSkuCgpAZGVmb3B0IHNhZmUtbG9jYWwtdmFyaWFibGUtdmFsdWVzClRo aXMgdmFyaWFibGUgcHJvdmlkZXMgYW5vdGhlciB3YXkgdG8gbWFyayBzb21lIHZhcmlhYmxlIHZh bHVlcyBhcwpzYWZlLiAgSXQgaXMgYSBsaXN0IG9mIGNvbnMgY2VsbHMgQGNvZGV7KEB2YXJ7dmFy fSAuIEB2YXJ7dmFsfSl9LAp3aGVyZSBAdmFye3Zhcn0gaXMgYSB2YXJpYWJsZSBuYW1lIGFuZCBA dmFye3ZhbH0gaXMgYSB2YWx1ZSB3aGljaCBpcwpzYWZlIGZvciB0aGF0IHZhcmlhYmxlLgoKV2hl biBFbWFjcyBhc2tzIHRoZSB1c2VyIHdoZXRoZXIgb3Igbm90IHRvIG9iZXkgYSBzZXQgb2YgZmls ZS1sb2NhbAp2YXJpYWJsZSBzcGVjaWZpY2F0aW9ucywgdGhlIHVzZXIgY2FuIGNob29zZSB0byBt YXJrIHRoZW0gYXMgc2FmZS4KRG9pbmcgc28gYWRkcyB0aG9zZSB2YXJpYWJsZS92YWx1ZSBwYWly cyB0bwpAY29kZXtzYWZlLWxvY2FsLXZhcmlhYmxlLXZhbHVlc30sIGFuZCBzYXZlcyBpdCB0byB0 aGUgdXNlcidzIGN1c3RvbQpmaWxlLgpAZW5kIGRlZm9wdAoKQGRlZnVuIHNhZmUtbG9jYWwtdmFy aWFibGUtcCBzeW0gdmFsClRoaXMgZnVuY3Rpb24gcmV0dXJucyBub24tQGNvZGV7bmlsfSBpZiBp dCBpcyBzYWZlIHRvIGdpdmUgQHZhcntzeW19CnRoZSB2YWx1ZSBAdmFye3ZhbH0sIGJhc2VkIG9u IHRoZSBhYm92ZSBjcml0ZXJpYS4KQGVuZCBkZWZ1bgoKQGMgQGNpbmRleCByaXNreSBsb2NhbCB2 YXJpYWJsZSAgIER1cGxpY2F0ZXMgcmlza3ktbG9jYWwtdmFyaWFibGUKICBTb21lIHZhcmlhYmxl cyBhcmUgY29uc2lkZXJlZCBAZGZue3Jpc2t5fS4gIElmIGEgdmFyaWFibGUgaXMgcmlza3ksCml0 IGlzIG5ldmVyIGVudGVyZWQgYXV0b21hdGljYWxseSBpbnRvCkBjb2Rle3NhZmUtbG9jYWwtdmFy aWFibGUtdmFsdWVzfTsgRW1hY3MgYWx3YXlzIHF1ZXJpZXMgYmVmb3JlIHNldHRpbmcKYSByaXNr eSB2YXJpYWJsZSwgdW5sZXNzIHRoZSB1c2VyIGV4cGxpY2l0bHkgYWxsb3dzIGEgdmFsdWUgYnkK Y3VzdG9taXppbmcgQGNvZGV7c2FmZS1sb2NhbC12YXJpYWJsZS12YWx1ZXN9IGRpcmVjdGx5LgoK ICBBbnkgdmFyaWFibGUgd2hvc2UgbmFtZSBoYXMgYSBub24tQGNvZGV7bmlsfQpAY29kZXtyaXNr eS1sb2NhbC12YXJpYWJsZX0gcHJvcGVydHkgaXMgY29uc2lkZXJlZCByaXNreS4gIFdoZW4geW91 CmRlZmluZSBhIHVzZXIgb3B0aW9uIHVzaW5nIEBjb2Rle2RlZmN1c3RvbX0sIHlvdSBjYW4gc2V0 IGl0cwpAY29kZXtyaXNreS1sb2NhbC12YXJpYWJsZX0gcHJvcGVydHkgYnkgYWRkaW5nIHRoZSBh cmd1bWVudHMKQGNvZGV7OnJpc2t5IEB2YXJ7dmFsdWV9fSB0byBAY29kZXtkZWZjdXN0b219IChA cHhyZWZ7VmFyaWFibGUKRGVmaW5pdGlvbnN9KS4gIEluIGFkZGl0aW9uLCBhbnkgdmFyaWFibGUg d2hvc2UgbmFtZSBlbmRzIGluIGFueSBvZgpAc2FtcHstY29tbWFuZH0sIEBzYW1wey1mcmFtZS1h bGlzdH0sIEBzYW1wey1mdW5jdGlvbn0sCkBzYW1wey1mdW5jdGlvbnN9LCBAc2FtcHstaG9va30s IEBzYW1wey1ob29rc30sIEBzYW1wey1mb3JtfSwKQHNhbXB7LWZvcm1zfSwgQHNhbXB7LW1hcH0s IEBzYW1wey1tYXAtYWxpc3R9LCBAc2FtcHstbW9kZS1hbGlzdH0sCkBzYW1wey1wcm9ncmFtfSwg b3IgQHNhbXB7LXByZWRpY2F0ZX0gaXMgYXV0b21hdGljYWxseSBjb25zaWRlcmVkCnJpc2t5LiAg VGhlIHZhcmlhYmxlcyBAc2FtcHtmb250LWxvY2sta2V5d29yZHN9LApAc2FtcHtmb250LWxvY2st a2V5d29yZHN9IGZvbGxvd2VkIGJ5IGEgZGlnaXQsIGFuZApAc2FtcHtmb250LWxvY2stc3ludGFj dGljLWtleXdvcmRzfSBhcmUgYWxzbyBjb25zaWRlcmVkIHJpc2t5LgoKQGRlZnVuIHJpc2t5LWxv Y2FsLXZhcmlhYmxlLXAgc3ltClRoaXMgZnVuY3Rpb24gcmV0dXJucyBub24tQGNvZGV7bmlsfSBp ZiBAdmFye3N5bX0gaXMgYSByaXNreSB2YXJpYWJsZSwKYmFzZWQgb24gdGhlIGFib3ZlIGNyaXRl cmlhLgpAZW5kIGRlZnVuCgpAZGVmdmFyIGlnbm9yZWQtbG9jYWwtdmFyaWFibGVzClRoaXMgdmFy aWFibGUgaG9sZHMgYSBsaXN0IG9mIHZhcmlhYmxlcyB0aGF0IHNob3VsZCBub3QgYmUgZ2l2ZW4g bG9jYWwKdmFsdWVzIGJ5IGZpbGVzLiAgQW55IHZhbHVlIHNwZWNpZmllZCBmb3Igb25lIG9mIHRo ZXNlIHZhcmlhYmxlcyBpcwpjb21wbGV0ZWx5IGlnbm9yZWQuCkBlbmQgZGVmdmFyCgogIFRoZSBA c2FtcHtFdmFsOn0gYGB2YXJpYWJsZScnIGlzIGFsc28gYSBwb3RlbnRpYWwgbG9vcGhvbGUsIHNv IEVtYWNzCm5vcm1hbGx5IGFza3MgZm9yIGNvbmZpcm1hdGlvbiBiZWZvcmUgaGFuZGxpbmcgaXQu CgpAZGVmb3B0IGVuYWJsZS1sb2NhbC1ldmFsClRoaXMgdmFyaWFibGUgY29udHJvbHMgcHJvY2Vz c2luZyBvZiBAc2FtcHtFdmFsOn0gaW4gQHNhbXB7LSotfSBsaW5lcwpvciBsb2NhbCB2YXJpYWJs ZXMKbGlzdHMgaW4gZmlsZXMgYmVpbmcgdmlzaXRlZC4gIEEgdmFsdWUgb2YgQGNvZGV7dH0gbWVh bnMgcHJvY2VzcyB0aGVtCnVuY29uZGl0aW9uYWxseTsgQGNvZGV7bmlsfSBtZWFucyBpZ25vcmUg dGhlbTsgYW55dGhpbmcgZWxzZSBtZWFucyBhc2sKdGhlIHVzZXIgd2hhdCB0byBkbyBmb3IgZWFj aCBmaWxlLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgQGNvZGV7bWF5YmV9LgpAZW5kIGRlZm9wdAoK QGRlZm9wdCBzYWZlLWxvY2FsLWV2YWwtZm9ybXMKVGhpcyB2YXJpYWJsZSBob2xkcyBhIGxpc3Qg b2YgZXhwcmVzc2lvbnMgdGhhdCBhcmUgc2FmZSB0bwpldmFsdWF0ZSB3aGVuIGZvdW5kIGluIHRo ZSBAc2FtcHtFdmFsOn0gYGB2YXJpYWJsZScnIGluIGEgZmlsZQpsb2NhbCB2YXJpYWJsZXMgbGlz dC4KQGVuZCBkZWZvcHQKCiAgSWYgdGhlIGV4cHJlc3Npb24gaXMgYSBmdW5jdGlvbiBjYWxsIGFu ZCB0aGUgZnVuY3Rpb24gaGFzIGEKQGNvZGV7c2FmZS1sb2NhbC1ldmFsLWZ1bmN0aW9ufSBwcm9w ZXJ0eSwgdGhlIHByb3BlcnR5IHZhbHVlCmRldGVybWluZXMgd2hldGhlciB0aGUgZXhwcmVzc2lv biBpcyBzYWZlIHRvIGV2YWx1YXRlLiAgVGhlIHByb3BlcnR5CnZhbHVlIGNhbiBiZSBhIHByZWRp Y2F0ZSB0byBjYWxsIHRvIHRlc3QgdGhlIGV4cHJlc3Npb24sIGEgbGlzdCBvZgpzdWNoIHByZWRp Y2F0ZXMgKGl0J3Mgc2FmZSBpZiBhbnkgcHJlZGljYXRlIHN1Y2NlZWRzKSwgb3IgQGNvZGV7dH0K KGFsd2F5cyBzYWZlIHByb3ZpZGVkIHRoZSBhcmd1bWVudHMgYXJlIGNvbnN0YW50KS4KCiAgVGV4 dCBwcm9wZXJ0aWVzIGFyZSBhbHNvIHBvdGVudGlhbCBsb29waG9sZXMsIHNpbmNlIHRoZWlyIHZh bHVlcwpjb3VsZCBpbmNsdWRlIGZ1bmN0aW9ucyB0byBjYWxsLiAgU28gRW1hY3MgZGlzY2FyZHMg YWxsIHRleHQKcHJvcGVydGllcyBmcm9tIHN0cmluZyB2YWx1ZXMgc3BlY2lmaWVkIGZvciBmaWxl LWxvY2FsIHZhcmlhYmxlcy4KCkBub2RlIERpcmVjdG9yeSBMb2NhbCBWYXJpYWJsZXMKQHNlY3Rp b24gRGlyZWN0b3J5IExvY2FsIFZhcmlhYmxlcwpAY2luZGV4IGRpcmVjdG9yeSBsb2NhbCB2YXJp YWJsZXMKCiAgQSBkaXJlY3RvcnkgY2FuIHNwZWNpZnkgbG9jYWwgdmFyaWFibGUgdmFsdWVzIGNv bW1vbiB0byBhbGwgZmlsZXMgaW4KdGhhdCBkaXJlY3Rvcnk7IEVtYWNzIHVzZXMgdGhlc2UgdG8g Y3JlYXRlIGJ1ZmZlci1sb2NhbCBiaW5kaW5ncyBmb3IKdGhvc2UgdmFyaWFibGVzIGluIGJ1ZmZl cnMgdmlzaXRpbmcgYW55IGZpbGUgaW4gdGhhdCBkaXJlY3RvcnkuICBUaGlzCmlzIHVzZWZ1bCB3 aGVuIHRoZSBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5IGJlbG9uZyB0byBzb21lIEBkZm57cHJvamVj dH0KYW5kIHRoZXJlZm9yZSBzaGFyZSB0aGUgc2FtZSBsb2NhbCB2YXJpYWJsZXMuCgogIFRoZXJl IGFyZSB0d28gZGlmZmVyZW50IG1ldGhvZHMgZm9yIHNwZWNpZnlpbmcgZGlyZWN0b3J5IGxvY2Fs CnZhcmlhYmxlczogYnkgcHV0dGluZyB0aGVtIGluIGEgc3BlY2lhbCBmaWxlLCBvciBieSBkZWZp bmluZyBhCkBkZm57cHJvamVjdCBjbGFzc30gZm9yIHRoYXQgZGlyZWN0b3J5LgoKQGRlZnZyIENv bnN0YW50IGRpci1sb2NhbHMtZmlsZQpUaGlzIGNvbnN0YW50IGlzIHRoZSBuYW1lIG9mIHRoZSBm aWxlIHdoZXJlIEVtYWNzIGV4cGVjdHMgdG8gZmluZCB0aGUKZGlyZWN0b3J5LWxvY2FsIHZhcmlh Ymxlcy4gIFRoZSBuYW1lIG9mIHRoZSBmaWxlIGlzCkBmaWxley5kaXItbG9jYWxzLmVsfUBmb290 bm90ZXsKVGhlIE1TLURPUyB2ZXJzaW9uIG9mIEVtYWNzIHVzZXMgQGZpbGV7X2Rpci1sb2NhbHMu ZWx9IGluc3RlYWQsIGR1ZSB0bwpsaW1pdGF0aW9ucyBvZiB0aGUgRE9TIGZpbGVzeXN0ZW1zLgp9 LiAgQSBmaWxlIGJ5IHRoYXQgbmFtZSBpbiBhIGRpcmVjdG9yeSBjYXVzZXMgRW1hY3MgdG8gYXBw bHkgaXRzCnNldHRpbmdzIHRvIGFueSBmaWxlIGluIHRoYXQgZGlyZWN0b3J5IG9yIGFueSBvZiBp dHMgc3ViZGlyZWN0b3JpZXMKKG9wdGlvbmFsbHksIHlvdSBjYW4gZXhjbHVkZSBzdWJkaXJlY3Rv cmllczsgc2VlIGJlbG93KS4KSWYgc29tZSBvZiB0aGUgc3ViZGlyZWN0b3JpZXMgaGF2ZSB0aGVp ciBvd24gQGZpbGV7LmRpci1sb2NhbHMuZWx9CmZpbGVzLCBFbWFjcyB1c2VzIHRoZSBzZXR0aW5n cyBmcm9tIHRoZSBkZWVwZXN0IGZpbGUgaXQgZmluZHMgc3RhcnRpbmcKZnJvbSB0aGUgZmlsZSdz IGRpcmVjdG9yeSBhbmQgbW92aW5nIHVwIHRoZSBkaXJlY3RvcnkgdHJlZS4gIFRoZSBmaWxlCnNw ZWNpZmllcyBsb2NhbCB2YXJpYWJsZXMgYXMgYSBzcGVjaWFsbHkgZm9ybWF0dGVkIGxpc3Q7IHNl ZQpAcmVme0RpcmVjdG9yeSBWYXJpYWJsZXMsICwgUGVyLWRpcmVjdG9yeSBMb2NhbCBWYXJpYWJs ZXMsIGVtYWNzLCBUaGUKR05VIEVtYWNzIE1hbnVhbH0sIGZvciBtb3JlIGRldGFpbHMuCkBlbmQg ZGVmdnIKCkBkZWZ1biBoYWNrLWRpci1sb2NhbC12YXJpYWJsZXMKVGhpcyBmdW5jdGlvbiByZWFk cyB0aGUgQGNvZGV7LmRpci1sb2NhbHMuZWx9IGZpbGUgYW5kIHN0b3JlcyB0aGUKZGlyZWN0b3J5 LWxvY2FsIHZhcmlhYmxlcyBpbiBAY29kZXtmaWxlLWxvY2FsLXZhcmlhYmxlcy1hbGlzdH0gdGhh dCBpcwpsb2NhbCB0byB0aGUgYnVmZmVyIHZpc2l0aW5nIGFueSBmaWxlIGluIHRoZSBkaXJlY3Rv cnksIHdpdGhvdXQKYXBwbHlpbmcgdGhlbS4gIEl0IGFsc28gc3RvcmVzIHRoZSBkaXJlY3Rvcnkt bG9jYWwgc2V0dGluZ3MgaW4KQGNvZGV7ZGlyLWxvY2Fscy1jbGFzcy1hbGlzdH0sIHdoZXJlIGl0 IGRlZmluZXMgYSBzcGVjaWFsIGNsYXNzIGZvcgp0aGUgZGlyZWN0b3J5IGluIHdoaWNoIEBmaWxl ey5kaXItbG9jYWxzLmVsfSBmaWxlIHdhcyBmb3VuZC4gIFRoaXMKZnVuY3Rpb24gd29ya3MgYnkg Y2FsbGluZyBAY29kZXtkaXItbG9jYWxzLXNldC1jbGFzcy12YXJpYWJsZXN9IGFuZApAY29kZXtk aXItbG9jYWxzLXNldC1kaXJlY3RvcnktY2xhc3N9LCBkZXNjcmliZWQgYmVsb3cuCkBlbmQgZGVm dW4KCkBkZWZ1biBoYWNrLWRpci1sb2NhbC12YXJpYWJsZXMtbm9uLWZpbGUtYnVmZmVyClRoaXMg ZnVuY3Rpb24gbG9va3MgZm9yIGRpcmVjdG9yeS1sb2NhbCB2YXJpYWJsZXMsIGFuZCBpbW1lZGlh dGVseQphcHBsaWVzIHRoZW0gaW4gdGhlIGN1cnJlbnQgYnVmZmVyLiAgSXQgaXMgaW50ZW5kZWQg dG8gYmUgY2FsbGVkIGluCnRoZSBtb2RlIGNvbW1hbmRzIGZvciBub24tZmlsZSBidWZmZXJzLCBz dWNoIGFzIERpcmVkIGJ1ZmZlcnMsIHRvIGxldAp0aGVtIG9iZXkgZGlyZWN0b3J5LWxvY2FsIHZh cmlhYmxlIHNldHRpbmdzLiAgRm9yIG5vbi1maWxlIGJ1ZmZlcnMsCkVtYWNzIGxvb2tzIGZvciBk aXJlY3RvcnktbG9jYWwgdmFyaWFibGVzIGluIEBjb2Rle2RlZmF1bHQtZGlyZWN0b3J5fQphbmQg aXRzIHBhcmVudCBkaXJlY3Rvcmllcy4KQGVuZCBkZWZ1bgoKQGRlZnVuIGRpci1sb2NhbHMtc2V0 LWNsYXNzLXZhcmlhYmxlcyBjbGFzcyB2YXJpYWJsZXMKVGhpcyBmdW5jdGlvbiBkZWZpbmVzIGEg c2V0IG9mIHZhcmlhYmxlIHNldHRpbmdzIGZvciB0aGUgbmFtZWQKQHZhcntjbGFzc30sIHdoaWNo IGlzIGEgc3ltYm9sLiAgWW91IGNhbiBsYXRlciBhc3NpZ24gdGhlIGNsYXNzIHRvIG9uZQpvciBt b3JlIGRpcmVjdG9yaWVzLCBhbmQgRW1hY3Mgd2lsbCBhcHBseSB0aG9zZSB2YXJpYWJsZSBzZXR0 aW5ncyB0bwphbGwgZmlsZXMgaW4gdGhvc2UgZGlyZWN0b3JpZXMuICBUaGUgbGlzdCBpbiBAdmFy e3ZhcmlhYmxlc30gY2FuIGJlIG9mCm9uZSBvZiB0aGUgdHdvIGZvcm1zOiBAY29kZXsoQHZhcntt YWpvci1tb2RlfSAuIEB2YXJ7YWxpc3R9KX0gb3IKQGNvZGV7KEB2YXJ7ZGlyZWN0b3J5fSAuIEB2 YXJ7bGlzdH0pfS4gIFdpdGggdGhlIGZpcnN0IGZvcm0sIGlmIHRoZQpmaWxlJ3MgYnVmZmVyIHR1 cm5zIG9uIGEgbW9kZSB0aGF0IGlzIGRlcml2ZWQgZnJvbSBAdmFye21ham9yLW1vZGV9LAp0aGVu IHRoZSBhbGwgdGhlIHZhcmlhYmxlcyBpbiB0aGUgYXNzb2NpYXRlZCBAdmFye2FsaXN0fSBhcmUg YXBwbGllZDsKQHZhcnthbGlzdH0gc2hvdWxkIGJlIG9mIHRoZSBmb3JtIEBjb2RleyhAdmFye25h bWV9IC4gQHZhcnt2YWx1ZX0pfS4KQSBzcGVjaWFsIHZhbHVlIEBjb2Rle25pbH0gZm9yIEB2YXJ7 bWFqb3ItbW9kZX0gbWVhbnMgdGhlIHNldHRpbmdzIGFyZQphcHBsaWNhYmxlIHRvIGFueSBtb2Rl LiAgSW4gQHZhcnthbGlzdH0sIHlvdSBjYW4gdXNlIGEgc3BlY2lhbApAdmFye25hbWV9OiBAY29k ZXtzdWJkaXJzfS4gIElmIHRoZSBhc3NvY2lhdGVkIHZhbHVlIGlzCkBjb2Rle25pbH0sIHRoZSBh bGlzdCBpcyBvbmx5IGFwcGxpZWQgdG8gZmlsZXMgaW4gdGhlIHJlbGV2YW50CmRpcmVjdG9yeSwg bm90IHRvIHRob3NlIGluIGFueSBzdWJkaXJlY3Rvcmllcy4KCldpdGggdGhlIHNlY29uZCBmb3Jt IG9mIEB2YXJ7dmFyaWFibGVzfSwgaWYgQHZhcntkaXJlY3Rvcnl9IGlzIHRoZQppbml0aWFsIHN1 YnN0cmluZyBvZiB0aGUgZmlsZSdzIGRpcmVjdG9yeSwgdGhlbiBAdmFye2xpc3R9IGlzIGFwcGxp ZWQKcmVjdXJzaXZlbHkgYnkgZm9sbG93aW5nIHRoZSBhYm92ZSBydWxlczsgQHZhcntsaXN0fSBz aG91bGQgYmUgb2Ygb25lCm9mIHRoZSB0d28gZm9ybXMgYWNjZXB0ZWQgYnkgdGhpcyBmdW5jdGlv biBpbiBAdmFye3ZhcmlhYmxlc30uCkBlbmQgZGVmdW4KCkBkZWZ1biBkaXItbG9jYWxzLXNldC1k aXJlY3RvcnktY2xhc3MgZGlyZWN0b3J5IGNsYXNzICZvcHRpb25hbCBtdGltZQpUaGlzIGZ1bmN0 aW9uIGFzc2lnbnMgQHZhcntjbGFzc30gdG8gYWxsIHRoZSBmaWxlcyBpbiBAY29kZXtkaXJlY3Rv cnl9CmFuZCBpdHMgc3ViZGlyZWN0b3JpZXMuICBUaGVyZWFmdGVyLCBhbGwgdGhlIHZhcmlhYmxl IHNldHRpbmdzCnNwZWNpZmllZCBmb3IgQHZhcntjbGFzc30gd2lsbCBiZSBhcHBsaWVkIHRvIGFu eSB2aXNpdGVkIGZpbGUgaW4KQHZhcntkaXJlY3Rvcnl9IGFuZCBpdHMgY2hpbGRyZW4uICBAdmFy e2NsYXNzfSBtdXN0IGhhdmUgYmVlbiBhbHJlYWR5CmRlZmluZWQgYnkgQGNvZGV7ZGlyLWxvY2Fs cy1zZXQtY2xhc3MtdmFyaWFibGVzfS4KCkVtYWNzIHVzZXMgdGhpcyBmdW5jdGlvbiBpbnRlcm5h bGx5IHdoZW4gaXQgbG9hZHMgZGlyZWN0b3J5IHZhcmlhYmxlcwpmcm9tIGEgQGNvZGV7LmRpci1s b2NhbHMuZWx9IGZpbGUuICBJbiB0aGF0IGNhc2UsIHRoZSBvcHRpb25hbAphcmd1bWVudCBAdmFy e210aW1lfSBob2xkcyB0aGUgZmlsZSBtb2RpZmljYXRpb24gdGltZSAoYXMgcmV0dXJuZWQgYnkK QGNvZGV7ZmlsZS1hdHRyaWJ1dGVzfSkuICBFbWFjcyB1c2VzIHRoaXMgdGltZSB0byBjaGVjayBz dG9yZWQKbG9jYWwgdmFyaWFibGVzIGFyZSBzdGlsbCB2YWxpZC4gIElmIHlvdSBhcmUgYXNzaWdu aW5nIGEgY2xhc3MKZGlyZWN0bHksIG5vdCB2aWEgYSBmaWxlLCB0aGlzIGFyZ3VtZW50IHNob3Vs ZCBiZSBAY29kZXtuaWx9LgpAZW5kIGRlZnVuCgpAZGVmdmFyIGRpci1sb2NhbHMtY2xhc3MtYWxp c3QKVGhpcyBhbGlzdCBob2xkcyB0aGUgY2xhc3Mgc3ltYm9scyBhbmQgdGhlIGFzc29jaWF0ZWQg dmFyaWFibGUKc2V0dGluZ3MuICBJdCBpcyB1cGRhdGVkIGJ5IEBjb2Rle2Rpci1sb2NhbHMtc2V0 LWNsYXNzLXZhcmlhYmxlc30uCkBlbmQgZGVmdmFyCgpAZGVmdmFyIGRpci1sb2NhbHMtZGlyZWN0 b3J5LWNhY2hlClRoaXMgYWxpc3QgaG9sZHMgZGlyZWN0b3J5IG5hbWVzLCB0aGVpciBhc3NpZ25l ZCBjbGFzcyBuYW1lcywgYW5kCm1vZGlmaWNhdGlvbiB0aW1lcyBvZiB0aGUgYXNzb2NpYXRlZCBk aXJlY3RvcnkgbG9jYWwgdmFyaWFibGVzIGZpbGUKKGlmIHRoZXJlIGlzIG9uZSkuICBUaGUgZnVu Y3Rpb24gQGNvZGV7ZGlyLWxvY2Fscy1zZXQtZGlyZWN0b3J5LWNsYXNzfQp1cGRhdGVzIHRoaXMg bGlzdC4KQGVuZCBkZWZ2YXIKCkBkZWZ2YXIgZW5hYmxlLWRpci1sb2NhbC12YXJpYWJsZXMKSWYg QGNvZGV7bmlsfSwgZGlyZWN0b3J5LWxvY2FsIHZhcmlhYmxlcyBhcmUgaWdub3JlZC4gIFRoaXMg dmFyaWFibGUKbWF5IGJlIHVzZWZ1bCBmb3IgbW9kZXMgdGhhdCB3YW50IHRvIGlnbm9yZSBkaXJl Y3RvcnktbG9jYWxzIHdoaWxlCnN0aWxsIHJlc3BlY3RpbmcgZmlsZS1sb2NhbCB2YXJpYWJsZXMg KEBweHJlZntGaWxlIExvY2FsIFZhcmlhYmxlc30pLgpAZW5kIGRlZnZhcgoKQG5vZGUgQ29ubmVj dGlvbiBMb2NhbCBWYXJpYWJsZXMKQHNlY3Rpb24gQ29ubmVjdGlvbiBMb2NhbCBWYXJpYWJsZXMK QGNpbmRleCBjb25uZWN0aW9uIGxvY2FsIHZhcmlhYmxlcwoKICBDb25uZWN0aW9uLWxvY2FsIHZh cmlhYmxlcyBwcm92aWRlIGEgZ2VuZXJhbCBtZWNoYW5pc20gZm9yCmRpZmZlcmVudCB2YXJpYWJs ZSBzZXR0aW5ncyBpbiBidWZmZXJzIHdpdGggYSByZW1vdGUgZGVmYXVsdApkaXJlY3RvcnkuICBU aGV5IGFyZSBib3VuZCBhbmQgc2V0IGRlcGVuZGluZyBvbiB0aGUgcmVtb3RlIGNvbm5lY3Rpb24K YSBidWZmZXIgaXMgZGVkaWNhdGVkIHRvLiAgUGVyIGRlZmF1bHQsIHRoZXkgYXJlIHNldCBpbiBh bGwgcHJvY2VzcwpidWZmZXJzIGZvciBhIHJlbW90ZSBjb25uZWN0aW9uLCBidXQgdGhleSBjb3Vs ZCBiZSBhcHBsaWVkIGFsc28gaW4Kb3RoZXIgYnVmZmVycyB3aXRoIGEgcmVtb3RlIGRpcmVjdG9y eS4KCkBkZWZ1biBjb25uZWN0aW9uLWxvY2FsLXNldC1jbGFzcy12YXJpYWJsZXMgY2xhc3MgdmFy aWFibGVzClRoaXMgZnVuY3Rpb24gZGVmaW5lcyBhIHNldCBvZiB2YXJpYWJsZSBzZXR0aW5ncyBm b3IgdGhlIG5hbWVkCkB2YXJ7Y2xhc3N9LCB3aGljaCBpcyBhIHN5bWJvbC4gIFlvdSBjYW4gbGF0 ZXIgYXNzaWduIHRoZSBjbGFzcyB0byBvbmUKb3IgbW9yZSByZW1vdGUgY29ubmVjdGlvbnMsIGFu ZCBFbWFjcyB3aWxsIGFwcGx5IHRob3NlIHZhcmlhYmxlCnNldHRpbmdzIHRvIGFsbCBwcm9jZXNz IGJ1ZmZlcnMgZm9yIHRob3NlIGNvbm5lY3Rpb25zLiAgVGhlIGxpc3QgaW4KQHZhcnt2YXJpYWJs ZXN9IGlzIGFuIGFsaXN0IG9mIHRoZSBmb3JtIEBjb2RleyhAdmFye25hbWV9Ci4gQHZhcnt2YWx1 ZX0pfS4gIEV4YW1wbGU6CgpAZXhhbXBsZQpAZ3JvdXAKKGNvbm5lY3Rpb24tbG9jYWwtc2V0LWNs YXNzLXZhcmlhYmxlcwogICdyZW1vdGUtYmFzaAogICcoKHNoZWxsLWZpbGUtbmFtZSAuICIvYmlu L2Jhc2giKQogICAgKHNoZWxsLWNvbW1hbmQtc3dpdGNoIC4gIi1jIikKICAgIChzaGVsbC1pbnRl cmFjdGl2ZS1zd2l0Y2ggLiAiLWkiKQogICAgKHNoZWxsLWxvZ2luLXN3aXRjaCAuICItbCIpKSkK QGVuZCBncm91cAoKQGdyb3VwCihjb25uZWN0aW9uLWxvY2FsLXNldC1jbGFzcy12YXJpYWJsZXMK ICAncmVtb3RlLWtzaAogICcoKHNoZWxsLWZpbGUtbmFtZSAuICIvYmluL2tzaCIpCiAgICAoc2hl bGwtY29tbWFuZC1zd2l0Y2ggLiAiLWMiKQogICAgKHNoZWxsLWludGVyYWN0aXZlLXN3aXRjaCAu ICItaSIpCiAgICAoc2hlbGwtbG9naW4tc3dpdGNoIC4gIi1sIikpKQpAZW5kIGdyb3VwCgpAZ3Jv dXAKKGNvbm5lY3Rpb24tbG9jYWwtc2V0LWNsYXNzLXZhcmlhYmxlcwogICdyZW1vdGUtbnVsbC1k ZXZpY2UKICAnKChudWxsLWRldmljZSAuICIvZGV2L251bGwiKSkpCkBlbmQgZ3JvdXAKQGVuZCBl eGFtcGxlCkBlbmQgZGVmdW4KCkBkZWZ2YXIgY29ubmVjdGlvbi1sb2NhbC1jbGFzcy1hbGlzdApU aGlzIGFsaXN0IGhvbGRzIHRoZSBjbGFzcyBzeW1ib2xzIGFuZCB0aGUgYXNzb2NpYXRlZCB2YXJp YWJsZQpzZXR0aW5ncy4gIEl0IGlzIHVwZGF0ZWQgYnkgQGNvZGV7Y29ubmVjdGlvbi1sb2NhbC1z ZXQtY2xhc3MtdmFyaWFibGVzfS4KQGVuZCBkZWZ2YXIKCkBkZWZ1biBjb25uZWN0aW9uLWxvY2Fs LXNldC1jbGFzc2VzIGNyaXRlcmlhICZyZXN0IGNsYXNzZXMKVGhpcyBmdW5jdGlvbiBhc3NpZ25z IEB2YXJ7Y2xhc3Nlc30sIHdoaWNoIGFyZSBzeW1ib2xzLCB0byBhbGwgcmVtb3RlCmNvbm5lY3Rp b25zIGlkZW50aWZpZWQgYnkgQHZhcntjcml0ZXJpYX0uICBAdmFye2NyaXRlcmlhfSBpcyBlaXRo ZXIgYQpyZWd1bGFyIGV4cHJlc3Npb24gaWRlbnRpZnlpbmcgYSByZW1vdGUgc2VydmVyLCBvciBh IGZ1bmN0aW9uIHdpdGggb25lCmFyZ3VtZW50IEB2YXJ7aWRlbnRpZmljYXRpb259LCB3aGljaCBt dXN0IHJldHVybiBub24tbmlsIHdoZW4gYSByZW1vdGUKc2VydmVyIHNoYWxsIGFwcGx5IEB2YXJ7 Y2xhc3Nlc30gdmFyaWFibGVzLCBvciBAY29kZXtuaWx9LgoKSWYgQHZhcntjcml0ZXJpYX0gaXMg YSByZWdleHAsIGlzIG11c3QgbWF0Y2ggdGhlIHJlc3VsdCBvZgpAY29kZXsoZmlsZS1yZW1vdGUt cCBkZWZhdWx0LWRpcmVjdG9yeSl9IG9mIGEgYnVmZmVyIGluIG9yZGVyIHRvIGFwcGx5CnRoZSB2 YXJpYWJsZXMgc2V0dGluZy4gIEV4YW1wbGU6CgpAZXhhbXBsZQpAZ3JvdXAKKGNvbm5lY3Rpb24t bG9jYWwtc2V0LWNsYXNzZXMKICAiXi9zc2g6IiAncmVtb3RlLWJhc2ggJ3JlbW90ZS1udWxsLWRl dmljZSkKQGVuZCBncm91cAoKQGdyb3VwCihjb25uZWN0aW9uLWxvY2FsLXNldC1jbGFzc2VzCiAg Il4vc3VkbzoiICdyZW1vdGUta3NoICdyZW1vdGUtbnVsbC1kZXZpY2UpCkBlbmQgZ3JvdXAKQGVu ZCBleGFtcGxlCgogIElmIEB2YXJ7Y3JpdGVyaWF9IGlzIG5pbCwgaXQgYXBwbGllcyBmb3IgYWxs IHJlbW90ZSBjb25uZWN0aW9ucy4KVGhlcmVmb3JlLCB0aGUgZXhhbXBsZSBhYm92ZSB3b3VsZCBi ZSBlcXVpdmFsZW50IHRvCgpAZXhhbXBsZQooY29ubmVjdGlvbi1sb2NhbC1zZXQtY2xhc3NlcyAi Xi9zc2g6IiAncmVtb3RlLWJhc2gpCihjb25uZWN0aW9uLWxvY2FsLXNldC1jbGFzc2VzICJeL3N1 ZG86IiAncmVtb3RlLWtzaCkKKGNvbm5lY3Rpb24tbG9jYWwtc2V0LWNsYXNzZXMgbmlsICdyZW1v dGUtbnVsbC1kZXZpY2UpCkBlbmQgZXhhbXBsZQoKICBJZiBAdmFye2NyaXRlcmlhfSBpcyBhIGxh bWJkYSBmdW5jdGlvbiBpdCBtdXN0IGFjY2VwdCBvbmUgcGFyYW1ldGVyLAp0aGUgaWRlbnRpZmlj YXRpb24uICBUaGUgZXhhbXBsZSBhYm92ZSBjb3VsZCBiZSByZXdyaXR0ZW4gYXMKCkBleGFtcGxl CkBncm91cAooY29ubmVjdGlvbi1sb2NhbC1zZXQtY2xhc3NlcwogIChsYW1iZGEgKGlkZW50aWZp Y2F0aW9uKQogICAgKHN0cmluZy1lcXVhbCAoZmlsZS1yZW1vdGUtcCBpZGVudGlmaWNhdGlvbiAn bWV0aG9kKSAic3NoIikpCiAgJ3JlbW90ZS1iYXNoKQpAZW5kIGdyb3VwCgpAZ3JvdXAKKGNvbm5l Y3Rpb24tbG9jYWwtc2V0LWNsYXNzZXMKICAobGFtYmRhIChpZGVudGlmaWNhdGlvbikKICAgIChz dHJpbmctZXF1YWwgKGZpbGUtcmVtb3RlLXAgaWRlbnRpZmljYXRpb24gJ21ldGhvZCkgInN1ZG8i KSkKICAncmVtb3RlLWtzaCkKQGVuZCBncm91cAoKQGdyb3VwCihjb25uZWN0aW9uLWxvY2FsLXNl dC1jbGFzc2VzCiAgKGxhbWJkYSAoaWRlbnRpZmljYXRpb24pIHQpCiAgJ3JlbW90ZS1udWxsLWRl dmljZSkKQGVuZCBncm91cApAZW5kIGV4YW1wbGUKCiAgVGhlcmVhZnRlciwgYWxsIHRoZSB2YXJp YWJsZSBzZXR0aW5ncyBzcGVjaWZpZWQgZm9yIEB2YXJ7Y2xhc3Nlc30Kd2lsbCBiZSBhcHBsaWVk IHRvIGFueSBidWZmZXIgd2l0aCBhIG1hdGNoaW5nIHJlbW90ZSBkaXJlY3RvcnksIHdoZW4KYWN0 aXZhdGVkIGJ5IEBjb2Rle2hhY2stY29ubmVjdGlvbi1sb2NhbC12YXJpYWJsZXMtYXBwbHl9LiAg QW55IGNsYXNzCm9mIEB2YXJ7Y2xhc3Nlc30gbXVzdCBoYXZlIGJlZW4gYWxyZWFkeSBkZWZpbmVk IGJ5CkBjb2Rle2Nvbm5lY3Rpb24tbG9jYWwtc2V0LWNsYXNzLXZhcmlhYmxlc30uCkBlbmQgZGVm dW4KCkBkZWZ2YXIgY29ubmVjdGlvbi1sb2NhbC1jcml0ZXJpYS1hbGlzdApUaGlzIGFsaXN0IGNv bnRhaW5zIHJlbW90ZSBzZXJ2ZXIgaWRlbnRpZmljYXRpb25zIGFuZCB0aGVpciBhc3NpZ25lZApj bGFzcyBuYW1lcy4gIFRoZSBmdW5jdGlvbiBAY29kZXtjb25uZWN0aW9uLWxvY2FsLXNldC1jbGFz c2VzfSB1cGRhdGVzCnRoaXMgbGlzdC4KQGVuZCBkZWZ2YXIKCkBkZWZ1biBoYWNrLWNvbm5lY3Rp b24tbG9jYWwtdmFyaWFibGVzClRoaXMgZnVuY3Rpb24gY29sbGVjdHMgYXBwbGljYWJsZSBjb25u ZWN0aW9uLWxvY2FsIHZhcmlhYmxlcyBpbgpAY29kZXtjb25uZWN0aW9uLWxvY2FsLXZhcmlhYmxl cy1hbGlzdH0gdGhhdCBpcyBsb2NhbCB0byB0aGUgYnVmZmVyLAp3aXRob3V0IGFwcGx5aW5nIHRo ZW0uICBXaGV0aGVyIGEgY29ubmVjdGlvbi1sb2NhbCB2YXJpYWJsZSBpcwphcHBsaWNhYmxlIGlz IHNwZWNpZmllZCBieSB0aGUgcmVtb3RlIGlkZW50aWZpZXIgb2YgYSBidWZmZXIsCmV2YWx1YXRl ZCBieSBAY29kZXsoZmlsZS1yZW1vdGUtcCBkZWZhdWx0LWRpcmVjdG9yeSl9LgpAZW5kIGRlZnVu CgpAZGVmdW4gaGFjay1jb25uZWN0aW9uLWxvY2FsLXZhcmlhYmxlcy1hcHBseQpUaGlzIGZ1bmN0 aW9uIGxvb2tzIGZvciBjb25uZWN0aW9uLWxvY2FsIHZhcmlhYmxlcywgYW5kIGltbWVkaWF0ZWx5 CmFwcGxpZXMgdGhlbSBpbiB0aGUgY3VycmVudCBidWZmZXIuICBJdCBpcyBjYWxsZWQgcGVyIGRl ZmF1bHQgZm9yCmV2ZXJ5IHByb2Nlc3MtYnVmZmVyIHJlbGF0ZWQgdG8gYSByZW1vdGUgY29ubmVj dGlvbi4gIEZvciBvdGhlciByZW1vdGUKYnVmZmVycywgaXQgY291bGQgYmUgY2FsbGVkIGJ5IGFu eSBtb2RlLgpAZW5kIGRlZnVuCgpAZGVmbWFjIHdpdGgtY29ubmVjdGlvbi1sb2NhbC1jbGFzc2Vz IGNsYXNzZXMgJnJlc3QgYm9keQpBbGwgY29ubmVjdGlvbi1sb2NhbCB2YXJpYWJsZXMsIHdoaWNo IGFyZSBzcGVjaWZpZWQgYnkgYSBjbGFzcyBpbgpAdmFye2NsYXNzZXN9LCBhcmUgYXBwbGllZC4g IEFuIGltcGxpY2l0IGJpbmRpbmcgb2YgdGhlIGNsYXNzZXMgdG8gdGhlCnJlbW90ZSBjb25uZWN0 aW9uIGlzIGVuYWJsZWQuCgpBZnRlciB0aGF0LCBAdmFye2JvZHl9IGlzIGV4ZWN1dGVkLCBhbmQg dGhlIGNvbm5lY3Rpb24tbG9jYWwgdmFyaWFibGVzCmFyZSB1bndvdW5kLiAgRXhhbXBsZToKCkBl eGFtcGxlCkBncm91cAooY29ubmVjdGlvbi1sb2NhbC1zZXQtY2xhc3MtdmFyaWFibGVzCiAgJ3Jl bW90ZS1wZXJsCiAgJygocGVybC1jb21tYW5kLW5hbWUgLiAiL3Vzci9sb2NhbC9iaW4vcGVybCIp CiAgICAocGVybC1jb21tYW5kLXN3aXRjaCAuICItZSAlcyIpKSkKQGVuZCBncm91cAoKQGdyb3Vw Cih3aXRoLWNvbm5lY3Rpb24tbG9jYWwtY2xhc3NlcyAnKHJlbW90ZS1wZXJsKQogIGRvIHNvbWV0 aGluZyB1c2VmdWwpCkBlbmQgZ3JvdXAKQGVuZCBleGFtcGxlCkBlbmQgZGVmbWFjCgpAZGVmdmFy IGVuYWJsZS1jb25uZWN0aW9uLWxvY2FsLXZhcmlhYmxlcwpJZiBAY29kZXtuaWx9LCBjb25uZWN0 aW9uLWxvY2FsIHZhcmlhYmxlcyBhcmUgaWdub3JlZC4gIFRoaXMgdmFyaWFibGUKc2hhbGwgYmUg Y2hhbmdlZCB0ZW1wb3JhcmlseSBvbmx5IGluIHNwZWNpYWwgbW9kZXMuCkBlbmQgZGVmdmFyCgpA bm9kZSBWYXJpYWJsZSBBbGlhc2VzCkBzZWN0aW9uIFZhcmlhYmxlIEFsaWFzZXMKQGNpbmRleCB2 YXJpYWJsZSBhbGlhc2VzCkBjaW5kZXggYWxpYXMsIGZvciB2YXJpYWJsZXMKCiAgSXQgaXMgc29t ZXRpbWVzIHVzZWZ1bCB0byBtYWtlIHR3byB2YXJpYWJsZXMgc3lub255bXMsIHNvIHRoYXQgYm90 aAp2YXJpYWJsZXMgYWx3YXlzIGhhdmUgdGhlIHNhbWUgdmFsdWUsIGFuZCBjaGFuZ2luZyBlaXRo ZXIgb25lIGFsc28KY2hhbmdlcyB0aGUgb3RoZXIuICBXaGVuZXZlciB5b3UgY2hhbmdlIHRoZSBu YW1lIG9mIGEKdmFyaWFibGUtLS1laXRoZXIgYmVjYXVzZSB5b3UgcmVhbGl6ZSBpdHMgb2xkIG5h bWUgd2FzIG5vdCB3ZWxsCmNob3Nlbiwgb3IgYmVjYXVzZSBpdHMgbWVhbmluZyBoYXMgcGFydGx5 IGNoYW5nZWQtLS1pdCBjYW4gYmUgdXNlZnVsCnRvIGtlZXAgdGhlIG9sZCBuYW1lIGFzIGFuIEBl bXBoe2FsaWFzfSBvZiB0aGUgbmV3IG9uZSBmb3IKY29tcGF0aWJpbGl0eS4gIFlvdSBjYW4gZG8g dGhpcyB3aXRoIEBjb2Rle2RlZnZhcmFsaWFzfS4KCkBkZWZ1biBkZWZ2YXJhbGlhcyBuZXctYWxp YXMgYmFzZS12YXJpYWJsZSAmb3B0aW9uYWwgZG9jc3RyaW5nClRoaXMgZnVuY3Rpb24gZGVmaW5l cyB0aGUgc3ltYm9sIEB2YXJ7bmV3LWFsaWFzfSBhcyBhIHZhcmlhYmxlIGFsaWFzCmZvciBzeW1i b2wgQHZhcntiYXNlLXZhcmlhYmxlfS4gVGhpcyBtZWFucyB0aGF0IHJldHJpZXZpbmcgdGhlIHZh bHVlCm9mIEB2YXJ7bmV3LWFsaWFzfSByZXR1cm5zIHRoZSB2YWx1ZSBvZiBAdmFye2Jhc2UtdmFy aWFibGV9LCBhbmQKY2hhbmdpbmcgdGhlIHZhbHVlIG9mIEB2YXJ7bmV3LWFsaWFzfSBjaGFuZ2Vz IHRoZSB2YWx1ZSBvZgpAdmFye2Jhc2UtdmFyaWFibGV9LiAgVGhlIHR3byBhbGlhc2VkIHZhcmlh YmxlIG5hbWVzIGFsd2F5cyBzaGFyZSB0aGUKc2FtZSB2YWx1ZSBhbmQgdGhlIHNhbWUgYmluZGlu Z3MuCgpJZiB0aGUgQHZhcntkb2NzdHJpbmd9IGFyZ3VtZW50IGlzIG5vbi1AY29kZXtuaWx9LCBp dCBzcGVjaWZpZXMgdGhlCmRvY3VtZW50YXRpb24gZm9yIEB2YXJ7bmV3LWFsaWFzfTsgb3RoZXJ3 aXNlLCB0aGUgYWxpYXMgZ2V0cyB0aGUgc2FtZQpkb2N1bWVudGF0aW9uIGFzIEB2YXJ7YmFzZS12 YXJpYWJsZX0gaGFzLCBpZiBhbnksIHVubGVzcwpAdmFye2Jhc2UtdmFyaWFibGV9IGlzIGl0c2Vs ZiBhbiBhbGlhcywgaW4gd2hpY2ggY2FzZSBAdmFye25ldy1hbGlhc30gZ2V0cwp0aGUgZG9jdW1l bnRhdGlvbiBvZiB0aGUgdmFyaWFibGUgYXQgdGhlIGVuZCBvZiB0aGUgY2hhaW4gb2YgYWxpYXNl cy4KClRoaXMgZnVuY3Rpb24gcmV0dXJucyBAdmFye2Jhc2UtdmFyaWFibGV9LgpAZW5kIGRlZnVu CgogIFZhcmlhYmxlIGFsaWFzZXMgYXJlIGNvbnZlbmllbnQgZm9yIHJlcGxhY2luZyBhbiBvbGQg bmFtZSBmb3IgYQp2YXJpYWJsZSB3aXRoIGEgbmV3IG5hbWUuICBAY29kZXttYWtlLW9ic29sZXRl LXZhcmlhYmxlfSBkZWNsYXJlcyB0aGF0CnRoZSBvbGQgbmFtZSBpcyBvYnNvbGV0ZSBhbmQgdGhl cmVmb3JlIHRoYXQgaXQgbWF5IGJlIHJlbW92ZWQgYXQgc29tZQpzdGFnZSBpbiB0aGUgZnV0dXJl LgoKQGRlZnVuIG1ha2Utb2Jzb2xldGUtdmFyaWFibGUgb2Jzb2xldGUtbmFtZSBjdXJyZW50LW5h bWUgd2hlbiAmb3B0aW9uYWwgYWNjZXNzLXR5cGUKVGhpcyBmdW5jdGlvbiBtYWtlcyB0aGUgYnl0 ZSBjb21waWxlciB3YXJuIHRoYXQgdGhlIHZhcmlhYmxlCkB2YXJ7b2Jzb2xldGUtbmFtZX0gaXMg b2Jzb2xldGUuICBJZiBAdmFye2N1cnJlbnQtbmFtZX0gaXMgYSBzeW1ib2wsCml0IGlzIHRoZSB2 YXJpYWJsZSdzIG5ldyBuYW1lOyB0aGVuIHRoZSB3YXJuaW5nIG1lc3NhZ2Ugc2F5cyB0byB1c2UK QHZhcntjdXJyZW50LW5hbWV9IGluc3RlYWQgb2YgQHZhcntvYnNvbGV0ZS1uYW1lfS4gIElmCkB2 YXJ7Y3VycmVudC1uYW1lfSBpcyBhIHN0cmluZywgdGhpcyBpcyB0aGUgbWVzc2FnZSBhbmQgdGhl cmUgaXMgbm8KcmVwbGFjZW1lbnQgdmFyaWFibGUuICBAdmFye3doZW59IHNob3VsZCBiZSBhIHN0 cmluZyBpbmRpY2F0aW5nIHdoZW4KdGhlIHZhcmlhYmxlIHdhcyBmaXJzdCBtYWRlIG9ic29sZXRl ICh1c3VhbGx5IGEgdmVyc2lvbiBudW1iZXIKc3RyaW5nKS4KClRoZSBvcHRpb25hbCBhcmd1bWVu dCBAdmFye2FjY2Vzcy10eXBlfSwgaWYgbm9uLUBjb2Rle25pbH0sIHNob3VsZApzcGVjaWZ5IHRo ZSBraW5kIG9mIGFjY2VzcyB0aGF0IHdpbGwgdHJpZ2dlciBvYnNvbGVzY2VuY2Ugd2FybmluZ3M7 IGl0CmNhbiBiZSBlaXRoZXIgQGNvZGV7Z2V0fSBvciBAY29kZXtzZXR9LgpAZW5kIGRlZnVuCgog IFlvdSBjYW4gbWFrZSB0d28gdmFyaWFibGVzIHN5bm9ueW1zIGFuZCBkZWNsYXJlIG9uZSBvYnNv bGV0ZSBhdCB0aGUKc2FtZSB0aW1lIHVzaW5nIHRoZSBtYWNybyBAY29kZXtkZWZpbmUtb2Jzb2xl dGUtdmFyaWFibGUtYWxpYXN9LgoKQGRlZm1hYyBkZWZpbmUtb2Jzb2xldGUtdmFyaWFibGUtYWxp YXMgb2Jzb2xldGUtbmFtZSBjdXJyZW50LW5hbWUgJm9wdGlvbmFsIHdoZW4gZG9jc3RyaW5nClRo aXMgbWFjcm8gbWFya3MgdGhlIHZhcmlhYmxlIEB2YXJ7b2Jzb2xldGUtbmFtZX0gYXMgb2Jzb2xl dGUgYW5kIGFsc28KbWFrZXMgaXQgYW4gYWxpYXMgZm9yIHRoZSB2YXJpYWJsZSBAdmFye2N1cnJl bnQtbmFtZX0uICBJdCBpcwplcXVpdmFsZW50IHRvIHRoZSBmb2xsb3dpbmc6CgpAZXhhbXBsZQoo ZGVmdmFyYWxpYXMgQHZhcntvYnNvbGV0ZS1uYW1lfSBAdmFye2N1cnJlbnQtbmFtZX0gQHZhcntk b2NzdHJpbmd9KQoobWFrZS1vYnNvbGV0ZS12YXJpYWJsZSBAdmFye29ic29sZXRlLW5hbWV9IEB2 YXJ7Y3VycmVudC1uYW1lfSBAdmFye3doZW59KQpAZW5kIGV4YW1wbGUKQGVuZCBkZWZtYWMKCkBk ZWZ1biBpbmRpcmVjdC12YXJpYWJsZSB2YXJpYWJsZQpUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhl IHZhcmlhYmxlIGF0IHRoZSBlbmQgb2YgdGhlIGNoYWluIG9mIGFsaWFzZXMKb2YgQHZhcnt2YXJp YWJsZX0uICBJZiBAdmFye3ZhcmlhYmxlfSBpcyBub3QgYSBzeW1ib2wsIG9yIGlmIEB2YXJ7dmFy aWFibGV9IGlzCm5vdCBkZWZpbmVkIGFzIGFuIGFsaWFzLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBA dmFye3ZhcmlhYmxlfS4KClRoaXMgZnVuY3Rpb24gc2lnbmFscyBhIEBjb2Rle2N5Y2xpYy12YXJp YWJsZS1pbmRpcmVjdGlvbn0gZXJyb3IgaWYKdGhlcmUgaXMgYSBsb29wIGluIHRoZSBjaGFpbiBv ZiBzeW1ib2xzLgpAZW5kIGRlZnVuCgpAZXhhbXBsZQooZGVmdmFyYWxpYXMgJ2ZvbyAnYmFyKQoo aW5kaXJlY3QtdmFyaWFibGUgJ2ZvbykKICAgICBAcmVzdWx0e30gYmFyCihpbmRpcmVjdC12YXJp YWJsZSAnYmFyKQogICAgIEByZXN1bHR7fSBiYXIKKHNldHEgYmFyIDIpCmJhcgogICAgIEByZXN1 bHR7fSAyCkBncm91cApmb28KICAgICBAcmVzdWx0e30gMgpAZW5kIGdyb3VwCihzZXRxIGZvbyAw KQpiYXIKICAgICBAcmVzdWx0e30gMApmb28KICAgICBAcmVzdWx0e30gMApAZW5kIGV4YW1wbGUK CkBub2RlIFZhcmlhYmxlcyB3aXRoIFJlc3RyaWN0ZWQgVmFsdWVzCkBzZWN0aW9uIFZhcmlhYmxl cyB3aXRoIFJlc3RyaWN0ZWQgVmFsdWVzCkBjaW5kZXggbGlzcCB2YXJpYWJsZXMgZGVmaW5lZCBp biBDLCByZXN0cmljdGlvbnMKCiAgT3JkaW5hcnkgTGlzcCB2YXJpYWJsZXMgY2FuIGJlIGFzc2ln bmVkIGFueSB2YWx1ZSB0aGF0IGlzIGEgdmFsaWQKTGlzcCBvYmplY3QuICBIb3dldmVyLCBjZXJ0 YWluIExpc3AgdmFyaWFibGVzIGFyZSBub3QgZGVmaW5lZCBpbiBMaXNwLApidXQgaW4gQ0AuICBN b3N0IG9mIHRoZXNlIHZhcmlhYmxlcyBhcmUgZGVmaW5lZCBpbiB0aGUgQyBjb2RlIHVzaW5nCkBj b2Rle0RFRlZBUl9MSVNQfS4gIExpa2UgdmFyaWFibGVzIGRlZmluZWQgaW4gTGlzcCwgdGhlc2Ug Y2FuIHRha2Ugb24KYW55IHZhbHVlLiAgSG93ZXZlciwgc29tZSB2YXJpYWJsZXMgYXJlIGRlZmlu ZWQgdXNpbmcKQGNvZGV7REVGVkFSX0lOVH0gb3IgQGNvZGV7REVGVkFSX0JPT0x9LiAgQHhyZWZ7 RGVmaW5pbmcgTGlzcAp2YXJpYWJsZXMgaW4gQywsIFdyaXRpbmcgRW1hY3MgUHJpbWl0aXZlc30s IGluIHBhcnRpY3VsYXIgdGhlCmRlc2NyaXB0aW9uIG9mIGZ1bmN0aW9ucyBvZiB0aGUgdHlwZSBA Y29kZXtzeW1zX29mX0B2YXJ7ZmlsZW5hbWV9fSwKZm9yIGEgYnJpZWYgZGlzY3Vzc2lvbiBvZiB0 aGUgQyBpbXBsZW1lbnRhdGlvbi4KCiAgVmFyaWFibGVzIG9mIHR5cGUgQGNvZGV7REVGVkFSX0JP T0x9IGNhbiBvbmx5IHRha2Ugb24gdGhlIHZhbHVlcwpAY29kZXtuaWx9IG9yIEBjb2Rle3R9LiAg QXR0ZW1wdGluZyB0byBhc3NpZ24gdGhlbSBhbnkgb3RoZXIgdmFsdWUKd2lsbCBzZXQgdGhlbSB0 byBAY29kZXt0fToKCkBleGFtcGxlCihsZXQgKChkaXNwbGF5LWhvdXJnbGFzcyA1KSkKICBkaXNw bGF5LWhvdXJnbGFzcykKICAgICBAcmVzdWx0e30gdApAZW5kIGV4YW1wbGUKCkBkZWZ2YXIgYnl0 ZS1ib29sZWFuLXZhcnMKVGhpcyB2YXJpYWJsZSBob2xkcyBhIGxpc3Qgb2YgYWxsIHZhcmlhYmxl cyBvZiB0eXBlIEBjb2Rle0RFRlZBUl9CT09MfS4KQGVuZCBkZWZ2YXIKCiAgVmFyaWFibGVzIG9m IHR5cGUgQGNvZGV7REVGVkFSX0lOVH0gY2FuIHRha2Ugb24gb25seSBpbnRlZ2VyIHZhbHVlcy4K QXR0ZW1wdGluZyB0byBhc3NpZ24gdGhlbSBhbnkgb3RoZXIgdmFsdWUgd2lsbCByZXN1bHQgaW4g YW4gZXJyb3I6CgpAZXhhbXBsZQooc2V0cSB1bmRvLWxpbWl0IDEwMDAuMCkKQGVycm9ye30gV3Jv bmcgdHlwZSBhcmd1bWVudDogaW50ZWdlcnAsIDEwMDAuMApAZW5kIGV4YW1wbGUKCkBub2RlIEdl bmVyYWxpemVkIFZhcmlhYmxlcwpAc2VjdGlvbiBHZW5lcmFsaXplZCBWYXJpYWJsZXMKCkBjaW5k ZXggZ2VuZXJhbGl6ZWQgdmFyaWFibGUKQGNpbmRleCBwbGFjZSBmb3JtCkEgQGRmbntnZW5lcmFs aXplZCB2YXJpYWJsZX0gb3IgQGRmbntwbGFjZSBmb3JtfSBpcyBvbmUgb2YgdGhlIG1hbnkgcGxh Y2VzCmluIExpc3AgbWVtb3J5IHdoZXJlIHZhbHVlcyBjYW4gYmUgc3RvcmVkLiAgVGhlIHNpbXBs ZXN0IHBsYWNlIGZvcm0gaXMKYSByZWd1bGFyIExpc3AgdmFyaWFibGUuICBCdXQgdGhlIEBzY3tj YXJ9cyBhbmQgQHNje2Nkcn1zIG9mIGxpc3RzLCBlbGVtZW50cwpvZiBhcnJheXMsIHByb3BlcnRp ZXMgb2Ygc3ltYm9scywgYW5kIG1hbnkgb3RoZXIgbG9jYXRpb25zIGFyZSBhbHNvCnBsYWNlcyB3 aGVyZSBMaXNwIHZhbHVlcyBhcmUgc3RvcmVkLgoKR2VuZXJhbGl6ZWQgdmFyaWFibGVzIGFyZSBh bmFsb2dvdXMgdG8gbHZhbHVlcyBpbiB0aGUgQwpsYW5ndWFnZSwgd2hlcmUgQHNhbXB7eCA9IGFb aV19IGdldHMgYW4gZWxlbWVudCBmcm9tIGFuIGFycmF5CmFuZCBAc2FtcHthW2ldID0geH0gc3Rv cmVzIGFuIGVsZW1lbnQgdXNpbmcgdGhlIHNhbWUgbm90YXRpb24uCkp1c3QgYXMgY2VydGFpbiBm b3JtcyBsaWtlIEBjb2Rle2FbaV19IGNhbiBiZSBsdmFsdWVzIGluIEMsIHRoZXJlCmlzIGEgc2V0 IG9mIGZvcm1zIHRoYXQgY2FuIGJlIGdlbmVyYWxpemVkIHZhcmlhYmxlcyBpbiBMaXNwLgoKQG1l bnUKKiBTZXR0aW5nIEdlbmVyYWxpemVkIFZhcmlhYmxlczo6ICAgVGhlIEBjb2Rle3NldGZ9IG1h Y3JvLgoqIEFkZGluZyBHZW5lcmFsaXplZCBWYXJpYWJsZXM6OiAgICBEZWZpbmluZyBuZXcgQGNv ZGV7c2V0Zn0gZm9ybXMuCkBlbmQgbWVudQoKQG5vZGUgU2V0dGluZyBHZW5lcmFsaXplZCBWYXJp YWJsZXMKQHN1YnNlY3Rpb24gVGhlIEBjb2Rle3NldGZ9IE1hY3JvCgpUaGUgQGNvZGV7c2V0Zn0g bWFjcm8gaXMgdGhlIG1vc3QgYmFzaWMgd2F5IHRvIG9wZXJhdGUgb24gZ2VuZXJhbGl6ZWQKdmFy aWFibGVzLiAgVGhlIEBjb2Rle3NldGZ9IGZvcm0gaXMgbGlrZSBAY29kZXtzZXRxfSwgZXhjZXB0 IHRoYXQgaXQKYWNjZXB0cyBhcmJpdHJhcnkgcGxhY2UgZm9ybXMgb24gdGhlIGxlZnQgc2lkZSBy YXRoZXIgdGhhbiBqdXN0CnN5bWJvbHMuICBGb3IgZXhhbXBsZSwgQGNvZGV7KHNldGYgKGNhciBh KSBiKX0gc2V0cyB0aGUgY2FyIG9mCkBjb2Rle2F9IHRvIEBjb2Rle2J9LCBkb2luZyB0aGUgc2Ft ZSBvcGVyYXRpb24gYXMgQGNvZGV7KHNldGNhciBhIGIpfSwKYnV0IHdpdGhvdXQgaGF2aW5nIHRv IHJlbWVtYmVyIHR3byBzZXBhcmF0ZSBmdW5jdGlvbnMgZm9yIHNldHRpbmcgYW5kCmFjY2Vzc2lu ZyBldmVyeSB0eXBlIG9mIHBsYWNlLgoKQGRlZm1hYyBzZXRmIFtwbGFjZSBmb3JtXUBkb3Rze30K VGhpcyBtYWNybyBldmFsdWF0ZXMgQHZhcntmb3JtfSBhbmQgc3RvcmVzIGl0IGluIEB2YXJ7cGxh Y2V9LCB3aGljaAptdXN0IGJlIGEgdmFsaWQgZ2VuZXJhbGl6ZWQgdmFyaWFibGUgZm9ybS4gIElm IHRoZXJlIGFyZSBzZXZlcmFsCkB2YXJ7cGxhY2V9IGFuZCBAdmFye2Zvcm19IHBhaXJzLCB0aGUg YXNzaWdubWVudHMgYXJlIGRvbmUgc2VxdWVudGlhbGx5Cmp1c3QgYXMgd2l0aCBAY29kZXtzZXRx fS4gIEBjb2Rle3NldGZ9IHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBsYXN0CkB2YXJ7Zm9ybX0u CkBlbmQgZGVmbWFjCgpUaGUgZm9sbG93aW5nIExpc3AgZm9ybXMgd2lsbCB3b3JrIGFzIGdlbmVy YWxpemVkIHZhcmlhYmxlcywgYW5kCnNvIG1heSBhcHBlYXIgaW4gdGhlIEB2YXJ7cGxhY2V9IGFy Z3VtZW50IG9mIEBjb2Rle3NldGZ9OgoKQGl0ZW1pemUKQGl0ZW0KQSBzeW1ib2wgbmFtaW5nIGEg dmFyaWFibGUuICBJbiBvdGhlciB3b3JkcywgQGNvZGV7KHNldGYgeCB5KX0gaXMKZXhhY3RseSBl cXVpdmFsZW50IHRvIEBjb2RleyhzZXRxIHggeSl9LCBhbmQgQGNvZGV7c2V0cX0gaXRzZWxmIGlz CnN0cmljdGx5IHNwZWFraW5nIHJlZHVuZGFudCBnaXZlbiB0aGF0IEBjb2Rle3NldGZ9IGV4aXN0 cy4gIE1hbnkKcHJvZ3JhbW1lcnMgY29udGludWUgdG8gcHJlZmVyIEBjb2Rle3NldHF9IGZvciBz ZXR0aW5nIHNpbXBsZQp2YXJpYWJsZXMsIHRob3VnaCwgcHVyZWx5IGZvciBzdHlsaXN0aWMgb3Ig aGlzdG9yaWNhbCByZWFzb25zLgpUaGUgbWFjcm8gQGNvZGV7KHNldGYgeCB5KX0gYWN0dWFsbHkg ZXhwYW5kcyB0byBAY29kZXsoc2V0cSB4IHkpfSwKc28gdGhlcmUgaXMgbm8gcGVyZm9ybWFuY2Ug cGVuYWx0eSBmb3IgdXNpbmcgaXQgaW4gY29tcGlsZWQgY29kZS4KCkBpdGVtCkEgY2FsbCB0byBh bnkgb2YgdGhlIGZvbGxvd2luZyBzdGFuZGFyZCBMaXNwIGZ1bmN0aW9uczoKCkBzbWFsbGV4YW1w bGUKYXJlZiAgICAgIGNkZHIgICAgICBzeW1ib2wtZnVuY3Rpb24KY2FyICAgICAgIGVsdCAgICAg ICBzeW1ib2wtcGxpc3QKY2FhciAgICAgIGdldCAgICAgICBzeW1ib2wtdmFsdWUKY2FkciAgICAg IGdldGhhc2gKY2RyICAgICAgIG50aApjZGFyICAgICAgbnRoY2RyCkBlbmQgc21hbGxleGFtcGxl CgpAaXRlbQpBIGNhbGwgdG8gYW55IG9mIHRoZSBmb2xsb3dpbmcgRW1hY3Mtc3BlY2lmaWMgZnVu Y3Rpb25zOgoKQHNtYWxsZXhhbXBsZQphbGlzdC1nZXQgICAgICAgICAgICAgICAgICAgICBwcm9j ZXNzLWdldApmcmFtZS1wYXJhbWV0ZXIgICAgICAgICAgICAgICBwcm9jZXNzLXNlbnRpbmVsCnRl cm1pbmFsLXBhcmFtZXRlciAgICAgICAgICAgIHdpbmRvdy1idWZmZXIKa2V5bWFwLXBhcmVudCAg ICAgICAgICAgICAgICAgd2luZG93LWRpc3BsYXktdGFibGUKbWF0Y2gtZGF0YSAgICAgICAgICAg ICAgICAgICAgd2luZG93LWRlZGljYXRlZC1wCm92ZXJsYXktZ2V0ICAgICAgICAgICAgICAgICAg IHdpbmRvdy1oc2Nyb2xsCm92ZXJsYXktc3RhcnQgICAgICAgICAgICAgICAgIHdpbmRvdy1wYXJh bWV0ZXIKb3ZlcmxheS1lbmQgICAgICAgICAgICAgICAgICAgd2luZG93LXBvaW50CnByb2Nlc3Mt YnVmZmVyICAgICAgICAgICAgICAgIHdpbmRvdy1zdGFydApwcm9jZXNzLWZpbHRlciAgICAgICAg ICAgICAgICBkZWZhdWx0LXZhbHVlCkBlbmQgc21hbGxleGFtcGxlCkBlbmQgaXRlbWl6ZQoKQG5v aW5kZW50CkBjb2Rle3NldGZ9IHNpZ25hbHMgYW4gZXJyb3IgaWYgeW91IHBhc3MgYSBAdmFye3Bs YWNlfSBmb3JtIHRoYXQgaXQKZG9lcyBub3Qga25vdyBob3cgdG8gaGFuZGxlLgoKQGMgQW5kIGZv ciBjbC1saWIncyBjbC1nZXRmLgpOb3RlIHRoYXQgZm9yIEBjb2Rle250aGNkcn0sIHRoZSBsaXN0 IGFyZ3VtZW50IG9mIHRoZSBmdW5jdGlvbiBtdXN0Cml0c2VsZiBiZSBhIHZhbGlkIEB2YXJ7cGxh Y2V9IGZvcm0uICBGb3IgZXhhbXBsZSwgQGNvZGV7KHNldGYgKG50aGNkcgowIGZvbykgNyl9IHdp bGwgc2V0IEBjb2Rle2Zvb30gaXRzZWxmIHRvIDcuCkBjIFRoZSB1c2Ugb2YgQGNvZGV7bnRoY2Ry fSBhcyBhIEB2YXJ7cGxhY2V9IGZvcm0gaXMgYW4gZXh0ZW5zaW9uCkBjIHRvIHN0YW5kYXJkIENv bW1vbiBMaXNwLgoKQGMgRklYTUUgSSBkb24ndCB0aGluayBpcyBhIHBhcnRpY3VsYXJseSBnb29k IHdheSB0byBkbyBpdCwKQGMgYnV0IHRoZXNlIG1hY3JvcyBhcmUgaW50cm9kdWNlZCBiZWZvcmUg Z2VuZXJhbGl6ZWQgdmFyaWFibGVzIGFyZS4KVGhlIG1hY3JvcyBAY29kZXtwdXNofSAoQHB4cmVm e0xpc3QgVmFyaWFibGVzfSkgYW5kIEBjb2Rle3BvcH0KKEBweHJlZntMaXN0IEVsZW1lbnRzfSkg Y2FuIG1hbmlwdWxhdGUgZ2VuZXJhbGl6ZWQgdmFyaWFibGVzLApub3QganVzdCBsaXN0cy4gIEBj b2Rleyhwb3AgQHZhcntwbGFjZX0pfSByZW1vdmVzIGFuZCByZXR1cm5zIHRoZSBmaXJzdAplbGVt ZW50IG9mIHRoZSBsaXN0IHN0b3JlZCBpbiBAdmFye3BsYWNlfS4gIEl0IGlzIGFuYWxvZ291cyB0 bwpAY29kZXsocHJvZzEgKGNhciBAdmFye3BsYWNlfSkgKHNldGYgQHZhcntwbGFjZX0gKGNkciBA dmFye3BsYWNlfSkpKX0sCmV4Y2VwdCB0aGF0IGl0IHRha2VzIGNhcmUgdG8gZXZhbHVhdGUgYWxs IHN1YmZvcm1zIG9ubHkgb25jZS4KQGNvZGV7KHB1c2ggQHZhcnt4fSBAdmFye3BsYWNlfSl9IGlu c2VydHMgQHZhcnt4fSBhdCB0aGUgZnJvbnQgb2YKdGhlIGxpc3Qgc3RvcmVkIGluIEB2YXJ7cGxh Y2V9LiAgSXQgaXMgYW5hbG9nb3VzIHRvIEBjb2RleyhzZXRmCkB2YXJ7cGxhY2V9IChjb25zIEB2 YXJ7eH0gQHZhcntwbGFjZX0pKX0sIGV4Y2VwdCBmb3IgZXZhbHVhdGlvbiBvZiB0aGUKc3ViZm9y bXMuICBOb3RlIHRoYXQgQGNvZGV7cHVzaH0gYW5kIEBjb2Rle3BvcH0gb24gYW4gQGNvZGV7bnRo Y2RyfQpwbGFjZSBjYW4gYmUgdXNlZCB0byBpbnNlcnQgb3IgZGVsZXRlIGF0IGFueSBwb3NpdGlv biBpbiBhIGxpc3QuCgpUaGUgQGZpbGV7Y2wtbGlifSBsaWJyYXJ5IGRlZmluZXMgdmFyaW91cyBl eHRlbnNpb25zIGZvciBnZW5lcmFsaXplZAp2YXJpYWJsZXMsIGluY2x1ZGluZyBhZGRpdGlvbmFs IEBjb2Rle3NldGZ9IHBsYWNlcy4KQHhyZWZ7R2VuZXJhbGl6ZWQgVmFyaWFibGVzLCwsIGNsLCBD b21tb24gTGlzcCBFeHRlbnNpb25zfS4KCgpAbm9kZSBBZGRpbmcgR2VuZXJhbGl6ZWQgVmFyaWFi bGVzCkBzdWJzZWN0aW9uIERlZmluaW5nIG5ldyBAY29kZXtzZXRmfSBmb3JtcwoKVGhpcyBzZWN0 aW9uIGRlc2NyaWJlcyBob3cgdG8gZGVmaW5lIG5ldyBmb3JtcyB0aGF0IEBjb2Rle3NldGZ9IGNh bgpvcGVyYXRlIG9uLgoKQGRlZm1hYyBndi1kZWZpbmUtc2ltcGxlLXNldHRlciBuYW1lIHNldHRl ciAmb3B0aW9uYWwgZml4LXJldHVybgpUaGlzIG1hY3JvIGVuYWJsZXMgeW91IHRvIGVhc2lseSBk ZWZpbmUgQGNvZGV7c2V0Zn0gbWV0aG9kcyBmb3Igc2ltcGxlCmNhc2VzLiAgQHZhcntuYW1lfSBp cyB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uLCBtYWNybywgb3Igc3BlY2lhbCBmb3JtLgpZb3UgY2Fu IHVzZSB0aGlzIG1hY3JvIHdoZW5ldmVyIEB2YXJ7bmFtZX0gaGFzIGEgZGlyZWN0bHkKY29ycmVz cG9uZGluZyBAdmFye3NldHRlcn0gZnVuY3Rpb24gdGhhdCB1cGRhdGVzIGl0LCBlLmcuLApAY29k ZXsoZ3YtZGVmaW5lLXNpbXBsZS1zZXR0ZXIgY2FyIHNldGNhcil9LgoKVGhpcyBtYWNybyB0cmFu c2xhdGVzIGEgY2FsbCBvZiB0aGUgZm9ybQoKQGV4YW1wbGUKKHNldGYgKEB2YXJ7bmFtZX0gQHZh cnthcmdzfUBkb3Rze30pIEB2YXJ7dmFsdWV9KQpAZW5kIGV4YW1wbGUKCmludG8KQGV4YW1wbGUK KEB2YXJ7c2V0dGVyfSBAdmFye2FyZ3N9QGRvdHN7fSBAdmFye3ZhbHVlfSkKQGVuZCBleGFtcGxl CgpAbm9pbmRlbnQKU3VjaCBhIEBjb2Rle3NldGZ9IGNhbGwgaXMgZG9jdW1lbnRlZCB0byByZXR1 cm4gQHZhcnt2YWx1ZX0uICBUaGlzIGlzCm5vIHByb2JsZW0gd2l0aCwgZS5nLiwgQGNvZGV7Y2Fy fSBhbmQgQGNvZGV7c2V0Y2FyfSwgYmVjYXVzZQpAY29kZXtzZXRjYXJ9IHJldHVybnMgdGhlIHZh bHVlIHRoYXQgaXQgc2V0LiAgSWYgeW91ciBAdmFye3NldHRlcn0KZnVuY3Rpb24gZG9lcyBub3Qg cmV0dXJuIEB2YXJ7dmFsdWV9LCB1c2UgYSBub24tQGNvZGV7bmlsfSB2YWx1ZSBmb3IKdGhlIEB2 YXJ7Zml4LXJldHVybn0gYXJndW1lbnQgb2YgQGNvZGV7Z3YtZGVmaW5lLXNpbXBsZS1zZXR0ZXJ9 LiAgVGhpcwpleHBhbmRzIGludG8gc29tZXRoaW5nIGVxdWl2YWxlbnQgdG8KQGV4YW1wbGUKKGxl dCAoKHRlbXAgQHZhcnt2YWx1ZX0pKQogIChAdmFye3NldHRlcn0gQHZhcnthcmdzfUBkb3Rze30g dGVtcCkKICB0ZW1wKQpAZW5kIGV4YW1wbGUKc28gZW5zdXJpbmcgdGhhdCBpdCByZXR1cm5zIHRo ZSBjb3JyZWN0IHJlc3VsdC4KQGVuZCBkZWZtYWMKCgpAZGVmbWFjIGd2LWRlZmluZS1zZXR0ZXIg bmFtZSBhcmdsaXN0ICZyZXN0IGJvZHkKVGhpcyBtYWNybyBhbGxvd3MgZm9yIG1vcmUgY29tcGxl eCBAY29kZXtzZXRmfSBleHBhbnNpb25zIHRoYW4gdGhlCnByZXZpb3VzIGZvcm0uICBZb3UgbWF5 IG5lZWQgdG8gdXNlIHRoaXMgZm9ybSwgZm9yIGV4YW1wbGUsIGlmIHRoZXJlCmlzIG5vIHNpbXBs ZSBzZXR0ZXIgZnVuY3Rpb24gdG8gY2FsbCwgb3IgaWYgdGhlcmUgaXMgb25lIGJ1dCBpdApyZXF1 aXJlcyBkaWZmZXJlbnQgYXJndW1lbnRzIHRvIHRoZSBwbGFjZSBmb3JtLgoKVGhpcyBtYWNybyBl eHBhbmRzIHRoZSBmb3JtCkBjb2RleyhzZXRmIChAdmFye25hbWV9IEB2YXJ7YXJnc31AZG90c3t9 KSBAdmFye3ZhbHVlfSl9IGJ5CmZpcnN0IGJpbmRpbmcgdGhlIEBjb2Rle3NldGZ9IGFyZ3VtZW50 IGZvcm1zCkBjb2RleyhAdmFye3ZhbHVlfSBAdmFye2FyZ3N9QGRvdHN7fSl9IGFjY29yZGluZyB0 byBAdmFye2FyZ2xpc3R9LAphbmQgdGhlbiBleGVjdXRpbmcgQHZhcntib2R5fS4gIEB2YXJ7Ym9k eX0gc2hvdWxkIHJldHVybiBhIExpc3AKZm9ybSB0aGF0IGRvZXMgdGhlIGFzc2lnbm1lbnQsIGFu ZCBmaW5hbGx5IHJldHVybnMgdGhlIHZhbHVlIHRoYXQgd2FzCnNldC4gIEFuIGV4YW1wbGUgb2Yg dXNpbmcgdGhpcyBtYWNybyBpczoKCkBleGFtcGxlCihndi1kZWZpbmUtc2V0dGVyIGNhYXIgKHZh bCB4KSBgKHNldGNhciAoY2FyICx4KSAsdmFsKSkKQGVuZCBleGFtcGxlCkBlbmQgZGVmbWFjCgpA ZmluZGV4IGd2LWRlZmluZS1leHBhbmRlcgpAZmluZGV4IGd2LWxldHBsYWNlCkBjIEZJWE1FPyAg Tm90IHN1cmUgd2hhdCBvciBob3cgbXVjaCB0byBzYXkgYWJvdXQgdGhlc2UuCkBjIFNlZSBjbC50 ZXhpIGZvciBhbiBleGFtcGxlIG9mIHVzaW5nIGd2LWxldHBsYWNlLgpGb3IgbW9yZSBjb250cm9s IG92ZXIgdGhlIGV4cGFuc2lvbiwgc2VlIHRoZSBtYWNybyBAY29kZXtndi1kZWZpbmUtZXhwYW5k ZXJ9LgpUaGUgbWFjcm8gQGNvZGV7Z3YtbGV0cGxhY2V9IGNhbiBiZSB1c2VmdWwgaW4gZGVmaW5p bmcgbWFjcm9zIHRoYXQKcGVyZm9ybSBzaW1pbGFybHkgdG8gQGNvZGV7c2V0Zn07IGZvciBleGFt cGxlLCB0aGUgQGNvZGV7aW5jZn0gbWFjcm8Kb2YgQ29tbW9uIExpc3AuICBDb25zdWx0IHRoZSBz b3VyY2UgZmlsZSBAZmlsZXtndi5lbH0gZm9yIG1vcmUgZGV0YWlscy4KCkBjaW5kZXggQ0wgbm90 ZS0tLW5vIEBjb2Rle3NldGZ9IGZ1bmN0aW9ucwpAcXVvdGF0aW9uCkBie0NvbW1vbiBMaXNwIG5v dGU6fSBDb21tb24gTGlzcCBkZWZpbmVzIGFub3RoZXIgd2F5IHRvIHNwZWNpZnkgdGhlCkBjb2Rl e3NldGZ9IGJlaGF2aW9yIG9mIGEgZnVuY3Rpb24sIG5hbWVseSBAY29kZXtzZXRmfSBmdW5jdGlv bnMsCndob3NlIG5hbWVzIGFyZSBsaXN0cyBAY29kZXsoc2V0ZiBAdmFye25hbWV9KX0gcmF0aGVy IHRoYW4gc3ltYm9scy4KRm9yIGV4YW1wbGUsIEBjb2RleyhkZWZ1biAoc2V0ZiBmb28pIEBkb3Rz e30pfSBkZWZpbmVzIHRoZSBmdW5jdGlvbgp0aGF0IGlzIHVzZWQgd2hlbiBAY29kZXtzZXRmfSBp cyBhcHBsaWVkIHRvIEBjb2Rle2Zvb30uICBFbWFjcyBkb2VzCm5vdCBzdXBwb3J0IHRoaXMuICBJ dCBpcyBhIGNvbXBpbGUtdGltZSBlcnJvciB0byB1c2UgQGNvZGV7c2V0Zn0gb24gYQpmb3JtIHRo YXQgaGFzIG5vdCBhbHJlYWR5IGhhZCBhbiBhcHByb3ByaWF0ZSBleHBhbnNpb24gZGVmaW5lZC4g IEluCkNvbW1vbiBMaXNwLCB0aGlzIGlzIG5vdCBhbiBlcnJvciBzaW5jZSB0aGUgZnVuY3Rpb24g QGNvZGV7KHNldGYKQHZhcntmdW5jfSl9IG1pZ2h0IGJlIGRlZmluZWQgbGF0ZXIuCkBlbmQgcXVv dGF0aW9uCg== --001a1141e07488010105464ffe4c--