From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Philip Kaludercic Newsgroups: gmane.emacs.devel Subject: Re: Submitting Dslide to Non-GNU ELPA Date: Sun, 24 Nov 2024 20:13:19 +0000 Message-ID: <87iksctmow.fsf@posteo.net> References: <874j9o599o.fsf@posteo.net> <87zfrf4uaw.fsf@posteo.net> <87v8234i24.fsf@posteo.net> <871q4qrg9d.fsf@posteo.net> <87plsapyq9.fsf@posteo.net> <87jziipcba.fsf@posteo.net> <87y1517j54.fsf@posteo.net> <87ttbyntol.fsf@posteo.net> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="17022"; mail-complaints-to="usenet@ciao.gmane.io" Cc: "Emacs-devel@gnu.org" To: Psionic K Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Sun Nov 24 21:14:27 2024 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1tFIzx-0004O6-NP for ged-emacs-devel@m.gmane-mx.org; Sun, 24 Nov 2024 21:14:27 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tFIz5-0000oK-4w; Sun, 24 Nov 2024 15:13:31 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tFIz3-0000oB-3Q for Emacs-devel@gnu.org; Sun, 24 Nov 2024 15:13:29 -0500 Original-Received: from mout02.posteo.de ([185.67.36.66]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tFIyz-0007po-Au for Emacs-devel@gnu.org; Sun, 24 Nov 2024 15:13:28 -0500 Original-Received: from submission (posteo.de [185.67.36.169]) by mout02.posteo.de (Postfix) with ESMTPS id 9223D240101 for ; Sun, 24 Nov 2024 21:13:21 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1732479202; bh=qzJcwjaUnVcwcIUc51kXUFTmt9ZzHBmDaqNnkXiPfAk=; h=From:To:Cc:Subject:Autocrypt:OpenPGP:Date:Message-ID:MIME-Version: Content-Type:From; b=qeXCUvvd0I9AP0VbXraQAKQ8G7DGp35rjZ3JvAaLAxg6OpWYmE2/HLvaj/EIoLg8F HQsTXJWdDPhlk6aqwteJWLahSurGMyAXBjbcrfV0IBjyD3EtfeTE9hKQXIwbQmqQ8N Btvx+ATaCSFga0KHux3Mj/+nsqRXC0D03kxw5/tUgRDAfwCG9duYsWlf0+ZMs44sUf WlKysz1wJjBKpSHBYr86qHwmYUhtzOsBWDWKyxN8vY6+rY55BdKp0hKTw63x9uQyDs 8wwljRVWOLjTmsfjUgdKflKeel44rNiFSlIwH6lH2H5JSnXg9EBpq3GoL6sqHhrrpr gDnHqU64+OrZw== Original-Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4XxKlh1Bszz9rxD; Sun, 24 Nov 2024 21:13:20 +0100 (CET) In-Reply-To: (Psionic K.'s message of "Sat, 23 Nov 2024 19:51:20 +0900") Autocrypt: addr=philipk@posteo.net; keydata= mDMEZBBQQhYJKwYBBAHaRw8BAQdAHJuofBrfqFh12uQu0Yi7mrl525F28eTmwUDflFNmdui0QlBo aWxpcCBLYWx1ZGVyY2ljIChnZW5lcmF0ZWQgYnkgYXV0b2NyeXB0LmVsKSA8cGhpbGlwa0Bwb3N0 ZW8ubmV0PoiWBBMWCAA+FiEEDg7HY17ghYlni8XN8xYDWXahwukFAmQQUEICGwMFCQHhM4AFCwkI BwIGFQoJCAsCBBYCAwECHgECF4AACgkQ8xYDWXahwulikAEA77hloUiSrXgFkUVJhlKBpLCHUjA0 mWZ9j9w5d08+jVwBAK6c4iGP7j+/PhbkxaEKa4V3MzIl7zJkcNNjHCXmvFcEuDgEZBBQQhIKKwYB BAGXVQEFAQEHQI5NLiLRjZy3OfSt1dhCmFyn+fN/QKELUYQetiaoe+MMAwEIB4h+BBgWCAAmFiEE Dg7HY17ghYlni8XN8xYDWXahwukFAmQQUEICGwwFCQHhM4AACgkQ8xYDWXahwukm+wEA8cml4JpK NeAu65rg+auKrPOP6TP/4YWRCTIvuYDm0joBALw98AMz7/qMHvSCeU/hw9PL6u6R2EScxtpKnWof z4oM OpenPGP: id=philipk@posteo.net; url="https://keys.openpgp.org/vks/v1/by-email/philipk@posteo.net"; preference=signencrypt Received-SPF: pass client-ip=185.67.36.66; envelope-from=philipk@posteo.net; helo=mout02.posteo.de X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 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-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:325675 Archived-At: --=-=-= Content-Type: text/plain Psionic K writes: >> I cannot compile the .org file to .texi before I apply this change > > I believe the change in question is already applied in dee290e > > https://github.com/positron-solutions/dslide/commit/dee290e1c41fdcaa3be508f8476b3ca3a5e56ed1#diff-b456cfb70f8b49bf51eb0d96e83118d82736fc1d5ae1c89a8896fade494d7604R7 > >> Unless you insist on us using your .texi file > > If it still does not build, I would prefer it at this time. I used > some macros from elisp-repo-kit (elisp prefix erk) that I need to do > some maintenance on. > >> build server will synchronise your changes > > If I need to bump a minor version to accommodate any configuration > changes for the manual, let me know. I don't intend to bump the > version again soon. > I can build it now, though I do get a warning: dslide.texi:1620: warning: @node name should not contain `,': dslide-goto, starting from point If it is important, please address it. Otherwise, here is a tarball that the ELPA build script would then produce; I can update nongnu.git if you think it is fine: --=-=-= Content-Type: application/x-tar Content-Disposition: attachment; filename=dslide-0.5.4.0.20241123.62749.tar Content-Transfer-Encoding: base64 ZHNsaWRlLTAuNS40LjAuMjAyNDExMjMuNjI3NDkvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA3NTUAMDAwMTc1 MAAwMDAxNzUwADAwMDAwMDAwMDAwADE0NzIwNzA0MTUxADAxMjYzNAAgNQAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHBoaQAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAcGhpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABk c2xpZGUtMC41LjQuMC4yMDI0MTEyMy42Mjc0OS9kc2xpZGUuaW5mbwAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY2NAAwMDAxNzUw ADAwMDE3NTAAMDAwMDAyMzQzNzQAMTQ3MjA3MDQxNTEAMDE0Nzc0ACAwAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAcGhpAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAABwaGkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFRo aXMgaXMgZG9jdFZOM0YzLmluZm8sIHByb2R1Y2VkIGJ5IC50ZXhpMmFueS1yZWFsIHZlcnNpb24g Ny4xLjEgZnJvbQpkc2xpZGUudGV4aS4KCkdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFIFZlcnNp b24gMywgMjkgSnVuZSAyMDA3CgogICBDb3B5cmlnaHQgKEMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLCBJbmMuICA8aHR0cDovL2ZzZi5vcmcvPgpFdmVyeW9uZSBpcyBwZXJtaXR0ZWQg dG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcwpsaWNlbnNlIGRv Y3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCgogICBQcmVhbWJsZQoKICAg VGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGEgZnJlZSwgY29weWxlZnQgbGljZW5z ZSBmb3IKc29mdHdhcmUgYW5kIG90aGVyIGtpbmRzIG9mIHdvcmtzLgoKICAgVGhlIGxpY2Vuc2Vz IGZvciBtb3N0IHNvZnR3YXJlIGFuZCBvdGhlciBwcmFjdGljYWwgd29ya3MgYXJlIGRlc2lnbmVk CnRvIHRha2UgYXdheSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSB0aGUgd29ya3Mu ICBCeSBjb250cmFzdCwKdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGludGVuZGVk IHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8Kc2hhcmUgYW5kIGNoYW5nZSBhbGwgdmVyc2lv bnMgb2YgYSBwcm9ncmFtLXRvIG1ha2Ugc3VyZSBpdCByZW1haW5zIGZyZWUKc29mdHdhcmUgZm9y IGFsbCBpdHMgdXNlcnMuICBXZSwgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdXNlIHRo ZQpHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9zdCBvZiBvdXIgc29mdHdhcmU7IGl0 IGFwcGxpZXMgYWxzbyB0bwphbnkgb3RoZXIgd29yayByZWxlYXNlZCB0aGlzIHdheSBieSBpdHMg YXV0aG9ycy4gIFlvdSBjYW4gYXBwbHkgaXQgdG8KeW91ciBwcm9ncmFtcywgdG9vLgoKICAgV2hl biB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20s IG5vdApwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8g bWFrZSBzdXJlIHRoYXQgeW91CmhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMg b2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKdGhlbSBpZiB5b3Ugd2lzaCksIHRoYXQg eW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdCBpZiB5b3UKd2FudCBpdCwgdGhh dCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcK ZnJlZSBwcm9ncmFtcywgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3Mu CgogICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIHByZXZlbnQgb3RoZXJzIGZy b20gZGVueWluZyB5b3UKdGhlc2UgcmlnaHRzIG9yIGFza2luZyB5b3UgdG8gc3VycmVuZGVyIHRo ZSByaWdodHMuICBUaGVyZWZvcmUsIHlvdSBoYXZlCmNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBp ZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZgp5b3UgbW9kaWZ5 IGl0OiByZXNwb25zaWJpbGl0aWVzIHRvIHJlc3BlY3QgdGhlIGZyZWVkb20gb2Ygb3RoZXJzLgoK ICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3Jh bSwgd2hldGhlcgpncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBwYXNzIG9uIHRvIHRoZSBy ZWNpcGllbnRzIHRoZSBzYW1lCmZyZWVkb21zIHRoYXQgeW91IHJlY2VpdmVkLiAgWW91IG11c3Qg bWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlCm9yIGNhbiBnZXQgdGhlIHNvdXJjZSBj b2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5Cmtub3cgdGhl aXIgcmlnaHRzLgoKICAgRGV2ZWxvcGVycyB0aGF0IHVzZSB0aGUgR05VIEdQTCBwcm90ZWN0IHlv dXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOgooMSkgYXNzZXJ0IGNvcHlyaWdodCBvbiB0aGUgc29m dHdhcmUsIGFuZCAoMikgb2ZmZXIgeW91IHRoaXMgTGljZW5zZQpnaXZpbmcgeW91IGxlZ2FsIHBl cm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IGl0LgoKICAgRm9yIHRo ZSBkZXZlbG9wZXJzJyBhbmQgYXV0aG9ycycgcHJvdGVjdGlvbiwgdGhlIEdQTCBjbGVhcmx5IGV4 cGxhaW5zCnRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4g IEZvciBib3RoIHVzZXJzJyBhbmQKYXV0aG9ycycgc2FrZSwgdGhlIEdQTCByZXF1aXJlcyB0aGF0 IG1vZGlmaWVkIHZlcnNpb25zIGJlIG1hcmtlZCBhcwpjaGFuZ2VkLCBzbyB0aGF0IHRoZWlyIHBy b2JsZW1zIHdpbGwgbm90IGJlIGF0dHJpYnV0ZWQgZXJyb25lb3VzbHkgdG8KYXV0aG9ycyBvZiBw cmV2aW91cyB2ZXJzaW9ucy4KCiAgIFNvbWUgZGV2aWNlcyBhcmUgZGVzaWduZWQgdG8gZGVueSB1 c2VycyBhY2Nlc3MgdG8gaW5zdGFsbCBvciBydW4KbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlIHNv ZnR3YXJlIGluc2lkZSB0aGVtLCBhbHRob3VnaCB0aGUgbWFudWZhY3R1cmVyCmNhbiBkbyBzby4g IFRoaXMgaXMgZnVuZGFtZW50YWxseSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgYWltIG9mCnByb3Rl Y3RpbmcgdXNlcnMnIGZyZWVkb20gdG8gY2hhbmdlIHRoZSBzb2Z0d2FyZS4gIFRoZSBzeXN0ZW1h dGljCnBhdHRlcm4gb2Ygc3VjaCBhYnVzZSBvY2N1cnMgaW4gdGhlIGFyZWEgb2YgcHJvZHVjdHMg Zm9yIGluZGl2aWR1YWxzIHRvCnVzZSwgd2hpY2ggaXMgcHJlY2lzZWx5IHdoZXJlIGl0IGlzIG1v c3QgdW5hY2NlcHRhYmxlLiAgVGhlcmVmb3JlLCB3ZQpoYXZlIGRlc2lnbmVkIHRoaXMgdmVyc2lv biBvZiB0aGUgR1BMIHRvIHByb2hpYml0IHRoZSBwcmFjdGljZSBmb3IgdGhvc2UKcHJvZHVjdHMu ICBJZiBzdWNoIHByb2JsZW1zIGFyaXNlIHN1YnN0YW50aWFsbHkgaW4gb3RoZXIgZG9tYWlucywg d2UKc3RhbmQgcmVhZHkgdG8gZXh0ZW5kIHRoaXMgcHJvdmlzaW9uIHRvIHRob3NlIGRvbWFpbnMg aW4gZnV0dXJlIHZlcnNpb25zCm9mIHRoZSBHUEwsIGFzIG5lZWRlZCB0byBwcm90ZWN0IHRoZSBm cmVlZG9tIG9mIHVzZXJzLgoKICAgRmluYWxseSwgZXZlcnkgcHJvZ3JhbSBpcyB0aHJlYXRlbmVk IGNvbnN0YW50bHkgYnkgc29mdHdhcmUgcGF0ZW50cy4KU3RhdGVzIHNob3VsZCBub3QgYWxsb3cg cGF0ZW50cyB0byByZXN0cmljdCBkZXZlbG9wbWVudCBhbmQgdXNlIG9mCnNvZnR3YXJlIG9uIGdl bmVyYWwtcHVycG9zZSBjb21wdXRlcnMsIGJ1dCBpbiB0aG9zZSB0aGF0IGRvLCB3ZSB3aXNoIHRv CmF2b2lkIHRoZSBzcGVjaWFsIGRhbmdlciB0aGF0IHBhdGVudHMgYXBwbGllZCB0byBhIGZyZWUg cHJvZ3JhbSBjb3VsZAptYWtlIGl0IGVmZmVjdGl2ZWx5IHByb3ByaWV0YXJ5LiAgVG8gcHJldmVu dCB0aGlzLCB0aGUgR1BMIGFzc3VyZXMgdGhhdApwYXRlbnRzIGNhbm5vdCBiZSB1c2VkIHRvIHJl bmRlciB0aGUgcHJvZ3JhbSBub24tZnJlZS4KCiAgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25k aXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCm1vZGlmaWNhdGlvbiBmb2xsb3cu CgogICBURVJNUyBBTkQgQ09ORElUSU9OUwoKICAxLiBEZWZpbml0aW9ucy4KCiAgICJUaGlzIExp Y2Vuc2UiIHJlZmVycyB0byB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlLgoKICAgIkNvcHlyaWdodCIgYWxzbyBtZWFucyBjb3B5cmlnaHQtbGlrZSBsYXdzIHRoYXQg YXBwbHkgdG8gb3RoZXIga2luZHMKb2Ygd29ya3MsIHN1Y2ggYXMgc2VtaWNvbmR1Y3RvciBtYXNr cy4KCiAgICJUaGUgUHJvZ3JhbSIgcmVmZXJzIHRvIGFueSBjb3B5cmlnaHRhYmxlIHdvcmsgbGlj ZW5zZWQgdW5kZXIgdGhpcwpMaWNlbnNlLiAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMg InlvdSIuICAiTGljZW5zZWVzIiBhbmQKInJlY2lwaWVudHMiIG1heSBiZSBpbmRpdmlkdWFscyBv ciBvcmdhbml6YXRpb25zLgoKICAgVG8gIm1vZGlmeSIgYSB3b3JrIG1lYW5zIHRvIGNvcHkgZnJv bSBvciBhZGFwdCBhbGwgb3IgcGFydCBvZiB0aGUKd29yayBpbiBhIGZhc2hpb24gcmVxdWlyaW5n IGNvcHlyaWdodCBwZXJtaXNzaW9uLCBvdGhlciB0aGFuIHRoZSBtYWtpbmcKb2YgYW4gZXhhY3Qg Y29weS4gIFRoZSByZXN1bHRpbmcgd29yayBpcyBjYWxsZWQgYSAibW9kaWZpZWQgdmVyc2lvbiIg b2YKdGhlIGVhcmxpZXIgd29yayBvciBhIHdvcmsgImJhc2VkIG9uIiB0aGUgZWFybGllciB3b3Jr LgoKICAgQSAiY292ZXJlZCB3b3JrIiBtZWFucyBlaXRoZXIgdGhlIHVubW9kaWZpZWQgUHJvZ3Jh bSBvciBhIHdvcmsgYmFzZWQKb24gdGhlIFByb2dyYW0uCgogICBUbyAicHJvcGFnYXRlIiBhIHdv cmsgbWVhbnMgdG8gZG8gYW55dGhpbmcgd2l0aCBpdCB0aGF0LCB3aXRob3V0CnBlcm1pc3Npb24s IHdvdWxkIG1ha2UgeW91IGRpcmVjdGx5IG9yIHNlY29uZGFyaWx5IGxpYWJsZSBmb3IKaW5mcmlu Z2VtZW50IHVuZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGxhdywgZXhjZXB0IGV4ZWN1dGluZyBp dCBvbiBhCmNvbXB1dGVyIG9yIG1vZGlmeWluZyBhIHByaXZhdGUgY29weS4gIFByb3BhZ2F0aW9u IGluY2x1ZGVzIGNvcHlpbmcsCmRpc3RyaWJ1dGlvbiAod2l0aCBvciB3aXRob3V0IG1vZGlmaWNh dGlvbiksIG1ha2luZyBhdmFpbGFibGUgdG8gdGhlCnB1YmxpYywgYW5kIGluIHNvbWUgY291bnRy aWVzIG90aGVyIGFjdGl2aXRpZXMgYXMgd2VsbC4KCiAgIFRvICJjb252ZXkiIGEgd29yayBtZWFu cyBhbnkga2luZCBvZiBwcm9wYWdhdGlvbiB0aGF0IGVuYWJsZXMgb3RoZXIKcGFydGllcyB0byBt YWtlIG9yIHJlY2VpdmUgY29waWVzLiAgTWVyZSBpbnRlcmFjdGlvbiB3aXRoIGEgdXNlciB0aHJv dWdoCmEgY29tcHV0ZXIgbmV0d29yaywgd2l0aCBubyB0cmFuc2ZlciBvZiBhIGNvcHksIGlzIG5v dCBjb252ZXlpbmcuCgogICBBbiBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZSBkaXNwbGF5cyAi QXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcyIgdG8KdGhlIGV4dGVudCB0aGF0IGl0IGluY2x1ZGVz IGEgY29udmVuaWVudCBhbmQgcHJvbWluZW50bHkgdmlzaWJsZSBmZWF0dXJlCnRoYXQgKDEpIGRp c3BsYXlzIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UsIGFuZCAoMikgdGVsbHMgdGhl CnVzZXIgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIHdvcmsgKGV4Y2VwdCB0byB0 aGUgZXh0ZW50IHRoYXQKd2FycmFudGllcyBhcmUgcHJvdmlkZWQpLCB0aGF0IGxpY2Vuc2VlcyBt YXkgY29udmV5IHRoZSB3b3JrIHVuZGVyIHRoaXMKTGljZW5zZSwgYW5kIGhvdyB0byB2aWV3IGEg Y29weSBvZiB0aGlzIExpY2Vuc2UuICBJZiB0aGUgaW50ZXJmYWNlCnByZXNlbnRzIGEgbGlzdCBv ZiB1c2VyIGNvbW1hbmRzIG9yIG9wdGlvbnMsIHN1Y2ggYXMgYSBtZW51LCBhIHByb21pbmVudApp dGVtIGluIHRoZSBsaXN0IG1lZXRzIHRoaXMgY3JpdGVyaW9uLgoKICAxLiBTb3VyY2UgQ29kZS4K CiAgIFRoZSAic291cmNlIGNvZGUiIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3Jt IG9mIHRoZSB3b3JrIGZvcgptYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gICJPYmplY3QgY29k ZSIgbWVhbnMgYW55IG5vbi1zb3VyY2UgZm9ybSBvZgphIHdvcmsuCgogICBBICJTdGFuZGFyZCBJ bnRlcmZhY2UiIG1lYW5zIGFuIGludGVyZmFjZSB0aGF0IGVpdGhlciBpcyBhbiBvZmZpY2lhbApz dGFuZGFyZCBkZWZpbmVkIGJ5IGEgcmVjb2duaXplZCBzdGFuZGFyZHMgYm9keSwgb3IsIGluIHRo ZSBjYXNlIG9mCmludGVyZmFjZXMgc3BlY2lmaWVkIGZvciBhIHBhcnRpY3VsYXIgcHJvZ3JhbW1p bmcgbGFuZ3VhZ2UsIG9uZSB0aGF0IGlzCndpZGVseSB1c2VkIGFtb25nIGRldmVsb3BlcnMgd29y a2luZyBpbiB0aGF0IGxhbmd1YWdlLgoKICAgVGhlICJTeXN0ZW0gTGlicmFyaWVzIiBvZiBhbiBl eGVjdXRhYmxlIHdvcmsgaW5jbHVkZSBhbnl0aGluZywgb3RoZXIKdGhhbiB0aGUgd29yayBhcyBh IHdob2xlLCB0aGF0IChhKSBpcyBpbmNsdWRlZCBpbiB0aGUgbm9ybWFsIGZvcm0gb2YKcGFja2Fn aW5nIGEgTWFqb3IgQ29tcG9uZW50LCBidXQgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhhdCBNYWpv cgpDb21wb25lbnQsIGFuZCAoYikgc2VydmVzIG9ubHkgdG8gZW5hYmxlIHVzZSBvZiB0aGUgd29y ayB3aXRoIHRoYXQgTWFqb3IKQ29tcG9uZW50LCBvciB0byBpbXBsZW1lbnQgYSBTdGFuZGFyZCBJ bnRlcmZhY2UgZm9yIHdoaWNoIGFuCmltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUg cHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0uICBBICJNYWpvcgpDb21wb25lbnQiLCBpbiB0aGlz IGNvbnRleHQsIG1lYW5zIGEgbWFqb3IgZXNzZW50aWFsIGNvbXBvbmVudCAoa2VybmVsLAp3aW5k b3cgc3lzdGVtLCBhbmQgc28gb24pIG9mIHRoZSBzcGVjaWZpYyBvcGVyYXRpbmcgc3lzdGVtIChp ZiBhbnkpIG9uCndoaWNoIHRoZSBleGVjdXRhYmxlIHdvcmsgcnVucywgb3IgYSBjb21waWxlciB1 c2VkIHRvIHByb2R1Y2UgdGhlIHdvcmssCm9yIGFuIG9iamVjdCBjb2RlIGludGVycHJldGVyIHVz ZWQgdG8gcnVuIGl0LgoKICAgVGhlICJDb3JyZXNwb25kaW5nIFNvdXJjZSIgZm9yIGEgd29yayBp biBvYmplY3QgY29kZSBmb3JtIG1lYW5zIGFsbAp0aGUgc291cmNlIGNvZGUgbmVlZGVkIHRvIGdl bmVyYXRlLCBpbnN0YWxsLCBhbmQgKGZvciBhbiBleGVjdXRhYmxlCndvcmspIHJ1biB0aGUgb2Jq ZWN0IGNvZGUgYW5kIHRvIG1vZGlmeSB0aGUgd29yaywgaW5jbHVkaW5nIHNjcmlwdHMgdG8KY29u dHJvbCB0aG9zZSBhY3Rpdml0aWVzLiAgSG93ZXZlciwgaXQgZG9lcyBub3QgaW5jbHVkZSB0aGUg d29yaydzClN5c3RlbSBMaWJyYXJpZXMsIG9yIGdlbmVyYWwtcHVycG9zZSB0b29scyBvciBnZW5l cmFsbHkgYXZhaWxhYmxlIGZyZWUKcHJvZ3JhbXMgd2hpY2ggYXJlIHVzZWQgdW5tb2RpZmllZCBp biBwZXJmb3JtaW5nIHRob3NlIGFjdGl2aXRpZXMgYnV0CndoaWNoIGFyZSBub3QgcGFydCBvZiB0 aGUgd29yay4gIEZvciBleGFtcGxlLCBDb3JyZXNwb25kaW5nIFNvdXJjZQppbmNsdWRlcyBpbnRl cmZhY2UgZGVmaW5pdGlvbiBmaWxlcyBhc3NvY2lhdGVkIHdpdGggc291cmNlIGZpbGVzIGZvciB0 aGUKd29yaywgYW5kIHRoZSBzb3VyY2UgY29kZSBmb3Igc2hhcmVkIGxpYnJhcmllcyBhbmQgZHlu YW1pY2FsbHkgbGlua2VkCnN1YnByb2dyYW1zIHRoYXQgdGhlIHdvcmsgaXMgc3BlY2lmaWNhbGx5 IGRlc2lnbmVkIHRvIHJlcXVpcmUsIHN1Y2ggYXMKYnkgaW50aW1hdGUgZGF0YSBjb21tdW5pY2F0 aW9uIG9yIGNvbnRyb2wgZmxvdyBiZXR3ZWVuIHRob3NlIHN1YnByb2dyYW1zCmFuZCBvdGhlciBw YXJ0cyBvZiB0aGUgd29yay4KCiAgIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBuZWVkIG5vdCBp bmNsdWRlIGFueXRoaW5nIHRoYXQgdXNlcnMgY2FuCnJlZ2VuZXJhdGUgYXV0b21hdGljYWxseSBm cm9tIG90aGVyIHBhcnRzIG9mIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZS4KCiAgIFRoZSBDb3Jy ZXNwb25kaW5nIFNvdXJjZSBmb3IgYSB3b3JrIGluIHNvdXJjZSBjb2RlIGZvcm0gaXMgdGhhdCBz YW1lCndvcmsuCgogIDEuIEJhc2ljIFBlcm1pc3Npb25zLgoKICAgQWxsIHJpZ2h0cyBncmFudGVk IHVuZGVyIHRoaXMgTGljZW5zZSBhcmUgZ3JhbnRlZCBmb3IgdGhlIHRlcm0gb2YKY29weXJpZ2h0 IG9uIHRoZSBQcm9ncmFtLCBhbmQgYXJlIGlycmV2b2NhYmxlIHByb3ZpZGVkIHRoZSBzdGF0ZWQK Y29uZGl0aW9ucyBhcmUgbWV0LiAgVGhpcyBMaWNlbnNlIGV4cGxpY2l0bHkgYWZmaXJtcyB5b3Vy IHVubGltaXRlZApwZXJtaXNzaW9uIHRvIHJ1biB0aGUgdW5tb2RpZmllZCBQcm9ncmFtLiAgVGhl IG91dHB1dCBmcm9tIHJ1bm5pbmcgYQpjb3ZlcmVkIHdvcmsgaXMgY292ZXJlZCBieSB0aGlzIExp Y2Vuc2Ugb25seSBpZiB0aGUgb3V0cHV0LCBnaXZlbiBpdHMKY29udGVudCwgY29uc3RpdHV0ZXMg YSBjb3ZlcmVkIHdvcmsuICBUaGlzIExpY2Vuc2UgYWNrbm93bGVkZ2VzIHlvdXIKcmlnaHRzIG9m IGZhaXIgdXNlIG9yIG90aGVyIGVxdWl2YWxlbnQsIGFzIHByb3ZpZGVkIGJ5IGNvcHlyaWdodCBs YXcuCgogICBZb3UgbWF5IG1ha2UsIHJ1biBhbmQgcHJvcGFnYXRlIGNvdmVyZWQgd29ya3MgdGhh dCB5b3UgZG8gbm90IGNvbnZleSwKd2l0aG91dCBjb25kaXRpb25zIHNvIGxvbmcgYXMgeW91ciBs aWNlbnNlIG90aGVyd2lzZSByZW1haW5zIGluIGZvcmNlLgpZb3UgbWF5IGNvbnZleSBjb3ZlcmVk IHdvcmtzIHRvIG90aGVycyBmb3IgdGhlIHNvbGUgcHVycG9zZSBvZiBoYXZpbmcKdGhlbSBtYWtl IG1vZGlmaWNhdGlvbnMgZXhjbHVzaXZlbHkgZm9yIHlvdSwgb3IgcHJvdmlkZSB5b3Ugd2l0aApm YWNpbGl0aWVzIGZvciBydW5uaW5nIHRob3NlIHdvcmtzLCBwcm92aWRlZCB0aGF0IHlvdSBjb21w bHkgd2l0aCB0aGUKdGVybXMgb2YgdGhpcyBMaWNlbnNlIGluIGNvbnZleWluZyBhbGwgbWF0ZXJp YWwgZm9yIHdoaWNoIHlvdSBkbyBub3QKY29udHJvbCBjb3B5cmlnaHQuICBUaG9zZSB0aHVzIG1h a2luZyBvciBydW5uaW5nIHRoZSBjb3ZlcmVkIHdvcmtzIGZvcgp5b3UgbXVzdCBkbyBzbyBleGNs dXNpdmVseSBvbiB5b3VyIGJlaGFsZiwgdW5kZXIgeW91ciBkaXJlY3Rpb24gYW5kCmNvbnRyb2ws IG9uIHRlcm1zIHRoYXQgcHJvaGliaXQgdGhlbSBmcm9tIG1ha2luZyBhbnkgY29waWVzIG9mIHlv dXIKY29weXJpZ2h0ZWQgbWF0ZXJpYWwgb3V0c2lkZSB0aGVpciByZWxhdGlvbnNoaXAgd2l0aCB5 b3UuCgogICBDb252ZXlpbmcgdW5kZXIgYW55IG90aGVyIGNpcmN1bXN0YW5jZXMgaXMgcGVybWl0 dGVkIHNvbGVseSB1bmRlciB0aGUKY29uZGl0aW9ucyBzdGF0ZWQgYmVsb3cuICBTdWJsaWNlbnNp bmcgaXMgbm90IGFsbG93ZWQ7IHNlY3Rpb24gMTAgbWFrZXMKaXQgdW5uZWNlc3NhcnkuCgogIDEu IFByb3RlY3RpbmcgVXNlcnMnIExlZ2FsIFJpZ2h0cyBGcm9tIEFudGktQ2lyY3VtdmVudGlvbiBM YXcuCgogICBObyBjb3ZlcmVkIHdvcmsgc2hhbGwgYmUgZGVlbWVkIHBhcnQgb2YgYW4gZWZmZWN0 aXZlIHRlY2hub2xvZ2ljYWwKbWVhc3VyZSB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgZnVsZmls bGluZyBvYmxpZ2F0aW9ucyB1bmRlciBhcnRpY2xlIDExCm9mIHRoZSBXSVBPIGNvcHlyaWdodCB0 cmVhdHkgYWRvcHRlZCBvbiAyMCBEZWNlbWJlciAxOTk2LCBvciBzaW1pbGFyCmxhd3MgcHJvaGli aXRpbmcgb3IgcmVzdHJpY3RpbmcgY2lyY3VtdmVudGlvbiBvZiBzdWNoIG1lYXN1cmVzLgoKICAg V2hlbiB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCB5b3Ugd2FpdmUgYW55IGxlZ2FsIHBvd2Vy IHRvIGZvcmJpZApjaXJjdW12ZW50aW9uIG9mIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdG8gdGhl IGV4dGVudCBzdWNoIGNpcmN1bXZlbnRpb24KaXMgZWZmZWN0ZWQgYnkgZXhlcmNpc2luZyByaWdo dHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUKY292ZXJlZCB3b3JrLCBh bmQgeW91IGRpc2NsYWltIGFueSBpbnRlbnRpb24gdG8gbGltaXQgb3BlcmF0aW9uIG9yCm1vZGlm aWNhdGlvbiBvZiB0aGUgd29yayBhcyBhIG1lYW5zIG9mIGVuZm9yY2luZywgYWdhaW5zdCB0aGUg d29yaydzCnVzZXJzLCB5b3VyIG9yIHRoaXJkIHBhcnRpZXMnIGxlZ2FsIHJpZ2h0cyB0byBmb3Ji aWQgY2lyY3VtdmVudGlvbiBvZgp0ZWNobm9sb2dpY2FsIG1lYXN1cmVzLgoKICAxLiBDb252ZXlp bmcgVmVyYmF0aW0gQ29waWVzLgoKICAgWW91IG1heSBjb252ZXkgdmVyYmF0aW0gY29waWVzIG9m IHRoZSBQcm9ncmFtJ3Mgc291cmNlIGNvZGUgYXMgeW91CnJlY2VpdmUgaXQsIGluIGFueSBtZWRp dW0sIHByb3ZpZGVkIHRoYXQgeW91IGNvbnNwaWN1b3VzbHkgYW5kCmFwcHJvcHJpYXRlbHkgcHVi bGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZTsga2VlcApp bnRhY3QgYWxsIG5vdGljZXMgc3RhdGluZyB0aGF0IHRoaXMgTGljZW5zZSBhbmQgYW55IG5vbi1w ZXJtaXNzaXZlCnRlcm1zIGFkZGVkIGluIGFjY29yZCB3aXRoIHNlY3Rpb24gNyBhcHBseSB0byB0 aGUgY29kZTsga2VlcCBpbnRhY3QgYWxsCm5vdGljZXMgb2YgdGhlIGFic2VuY2Ugb2YgYW55IHdh cnJhbnR5OyBhbmQgZ2l2ZSBhbGwgcmVjaXBpZW50cyBhIGNvcHkKb2YgdGhpcyBMaWNlbnNlIGFs b25nIHdpdGggdGhlIFByb2dyYW0uCgogICBZb3UgbWF5IGNoYXJnZSBhbnkgcHJpY2Ugb3Igbm8g cHJpY2UgZm9yIGVhY2ggY29weSB0aGF0IHlvdSBjb252ZXksCmFuZCB5b3UgbWF5IG9mZmVyIHN1 cHBvcnQgb3Igd2FycmFudHkgcHJvdGVjdGlvbiBmb3IgYSBmZWUuCgogIDEuIENvbnZleWluZyBN b2RpZmllZCBTb3VyY2UgVmVyc2lvbnMuCgogICBZb3UgbWF5IGNvbnZleSBhIHdvcmsgYmFzZWQg b24gdGhlIFByb2dyYW0sIG9yIHRoZSBtb2RpZmljYXRpb25zIHRvCnByb2R1Y2UgaXQgZnJvbSB0 aGUgUHJvZ3JhbSwgaW4gdGhlIGZvcm0gb2Ygc291cmNlIGNvZGUgdW5kZXIgdGhlIHRlcm1zCm9m IHNlY3Rpb24gNCwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25k aXRpb25zOgoKICAgYSkgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0 aW5nIHRoYXQgeW91IG1vZGlmaWVkCml0LCBhbmQgZ2l2aW5nIGEgcmVsZXZhbnQgZGF0ZS4KCiAg IGIpIFRoZSB3b3JrIG11c3QgY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IGl0 IGlzIHJlbGVhc2VkCnVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IGNvbmRpdGlvbnMgYWRkZWQg dW5kZXIgc2VjdGlvbgogIDEuIFRoaXMgcmVxdWlyZW1lbnQgbW9kaWZpZXMgdGhlIHJlcXVpcmVt ZW50IGluIHNlY3Rpb24gNCB0bwogICAia2VlcCBpbnRhY3QgYWxsIG5vdGljZXMiLgoKICAgYykg WW91IG11c3QgbGljZW5zZSB0aGUgZW50aXJlIHdvcmssIGFzIGEgd2hvbGUsIHVuZGVyIHRoaXMg TGljZW5zZQp0byBhbnlvbmUgd2hvIGNvbWVzIGludG8gcG9zc2Vzc2lvbiBvZiBhIGNvcHkuICBU aGlzIExpY2Vuc2Ugd2lsbAp0aGVyZWZvcmUgYXBwbHksIGFsb25nIHdpdGggYW55IGFwcGxpY2Fi bGUgc2VjdGlvbiA3IGFkZGl0aW9uYWwgdGVybXMsCnRvIHRoZSB3aG9sZSBvZiB0aGUgd29yaywg YW5kIGFsbCBpdHMgcGFydHMsIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkgYXJlCnBhY2thZ2VkLiAg VGhpcyBMaWNlbnNlIGdpdmVzIG5vIHBlcm1pc3Npb24gdG8gbGljZW5zZSB0aGUgd29yayBpbiBh bnkKb3RoZXIgd2F5LCBidXQgaXQgZG9lcyBub3QgaW52YWxpZGF0ZSBzdWNoIHBlcm1pc3Npb24g aWYgeW91IGhhdmUKc2VwYXJhdGVseSByZWNlaXZlZCBpdC4KCiAgIGQpIElmIHRoZSB3b3JrIGhh cyBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZXMsIGVhY2ggbXVzdCBkaXNwbGF5CkFwcHJvcHJp YXRlIExlZ2FsIE5vdGljZXM7IGhvd2V2ZXIsIGlmIHRoZSBQcm9ncmFtIGhhcyBpbnRlcmFjdGl2 ZQppbnRlcmZhY2VzIHRoYXQgZG8gbm90IGRpc3BsYXkgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNl cywgeW91ciB3b3JrIG5lZWQKbm90IG1ha2UgdGhlbSBkbyBzby4KCiAgIEEgY29tcGlsYXRpb24g b2YgYSBjb3ZlcmVkIHdvcmsgd2l0aCBvdGhlciBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQKd29y a3MsIHdoaWNoIGFyZSBub3QgYnkgdGhlaXIgbmF0dXJlIGV4dGVuc2lvbnMgb2YgdGhlIGNvdmVy ZWQgd29yaywgYW5kCndoaWNoIGFyZSBub3QgY29tYmluZWQgd2l0aCBpdCBzdWNoIGFzIHRvIGZv cm0gYSBsYXJnZXIgcHJvZ3JhbSwgaW4gb3IKb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRp c3RyaWJ1dGlvbiBtZWRpdW0sIGlzIGNhbGxlZCBhbgoiYWdncmVnYXRlIiBpZiB0aGUgY29tcGls YXRpb24gYW5kIGl0cyByZXN1bHRpbmcgY29weXJpZ2h0IGFyZSBub3QgdXNlZAp0byBsaW1pdCB0 aGUgYWNjZXNzIG9yIGxlZ2FsIHJpZ2h0cyBvZiB0aGUgY29tcGlsYXRpb24ncyB1c2VycyBiZXlv bmQKd2hhdCB0aGUgaW5kaXZpZHVhbCB3b3JrcyBwZXJtaXQuICBJbmNsdXNpb24gb2YgYSBjb3Zl cmVkIHdvcmsgaW4gYW4KYWdncmVnYXRlIGRvZXMgbm90IGNhdXNlIHRoaXMgTGljZW5zZSB0byBh cHBseSB0byB0aGUgb3RoZXIgcGFydHMgb2YgdGhlCmFnZ3JlZ2F0ZS4KCiAgMS4gQ29udmV5aW5n IE5vbi1Tb3VyY2UgRm9ybXMuCgogICBZb3UgbWF5IGNvbnZleSBhIGNvdmVyZWQgd29yayBpbiBv YmplY3QgY29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgpzZWN0aW9ucyA0IGFuZCA1LCBwcm92 aWRlZCB0aGF0IHlvdSBhbHNvIGNvbnZleSB0aGUgbWFjaGluZS1yZWFkYWJsZQpDb3JyZXNwb25k aW5nIFNvdXJjZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbiBvbmUgb2YgdGhl c2UKd2F5czoKCiAgIGEpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGlu LCBhIHBoeXNpY2FsIHByb2R1Y3QKKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBt ZWRpdW0pLCBhY2NvbXBhbmllZCBieSB0aGUKQ29ycmVzcG9uZGluZyBTb3VyY2UgZml4ZWQgb24g YSBkdXJhYmxlIHBoeXNpY2FsIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkCmZvciBzb2Z0d2FyZSBp bnRlcmNoYW5nZS4KCiAgIGIpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVk IGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlv biBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSBhIHdyaXR0ZW4Kb2ZmZXIsIHZhbGlkIGZvciBhdCBs ZWFzdCB0aHJlZSB5ZWFycyBhbmQgdmFsaWQgZm9yIGFzIGxvbmcgYXMgeW91IG9mZmVyCnNwYXJl IHBhcnRzIG9yIGN1c3RvbWVyIHN1cHBvcnQgZm9yIHRoYXQgcHJvZHVjdCBtb2RlbCwgdG8gZ2l2 ZSBhbnlvbmUKd2hvIHBvc3Nlc3NlcyB0aGUgb2JqZWN0IGNvZGUgZWl0aGVyICgxKSBhIGNvcHkg b2YgdGhlIENvcnJlc3BvbmRpbmcKU291cmNlIGZvciBhbGwgdGhlIHNvZnR3YXJlIGluIHRoZSBw cm9kdWN0IHRoYXQgaXMgY292ZXJlZCBieSB0aGlzCkxpY2Vuc2UsIG9uIGEgZHVyYWJsZSBwaHlz aWNhbCBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUKaW50ZXJjaGFuZ2UsIGZv ciBhIHByaWNlIG5vIG1vcmUgdGhhbiB5b3VyIHJlYXNvbmFibGUgY29zdCBvZiBwaHlzaWNhbGx5 CnBlcmZvcm1pbmcgdGhpcyBjb252ZXlpbmcgb2Ygc291cmNlLCBvciAoMikgYWNjZXNzIHRvIGNv cHkgdGhlCkNvcnJlc3BvbmRpbmcgU291cmNlIGZyb20gYSBuZXR3b3JrIHNlcnZlciBhdCBubyBj aGFyZ2UuCgogICBjKSBDb252ZXkgaW5kaXZpZHVhbCBjb3BpZXMgb2YgdGhlIG9iamVjdCBjb2Rl IHdpdGggYSBjb3B5IG9mIHRoZQp3cml0dGVuIG9mZmVyIHRvIHByb3ZpZGUgdGhlIENvcnJlc3Bv bmRpbmcgU291cmNlLiAgVGhpcyBhbHRlcm5hdGl2ZSBpcwphbGxvd2VkIG9ubHkgb2NjYXNpb25h bGx5IGFuZCBub25jb21tZXJjaWFsbHksIGFuZCBvbmx5IGlmIHlvdSByZWNlaXZlZAp0aGUgb2Jq ZWN0IGNvZGUgd2l0aCBzdWNoIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBzdWJzZWN0aW9uIDZi LgoKICAgZCkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBieSBvZmZlcmluZyBhY2Nlc3MgZnJvbSBh IGRlc2lnbmF0ZWQgcGxhY2UKKGdyYXRpcyBvciBmb3IgYSBjaGFyZ2UpLCBhbmQgb2ZmZXIgZXF1 aXZhbGVudCBhY2Nlc3MgdG8gdGhlCkNvcnJlc3BvbmRpbmcgU291cmNlIGluIHRoZSBzYW1lIHdh eSB0aHJvdWdoIHRoZSBzYW1lIHBsYWNlIGF0IG5vCmZ1cnRoZXIgY2hhcmdlLiAgWW91IG5lZWQg bm90IHJlcXVpcmUgcmVjaXBpZW50cyB0byBjb3B5IHRoZQpDb3JyZXNwb25kaW5nIFNvdXJjZSBh bG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4gIElmIHRoZSBwbGFjZSB0byBjb3B5CnRoZSBvYmpl Y3QgY29kZSBpcyBhIG5ldHdvcmsgc2VydmVyLCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbWF5 IGJlIG9uCmEgZGlmZmVyZW50IHNlcnZlciAob3BlcmF0ZWQgYnkgeW91IG9yIGEgdGhpcmQgcGFy dHkpIHRoYXQgc3VwcG9ydHMKZXF1aXZhbGVudCBjb3B5aW5nIGZhY2lsaXRpZXMsIHByb3ZpZGVk IHlvdSBtYWludGFpbiBjbGVhciBkaXJlY3Rpb25zCm5leHQgdG8gdGhlIG9iamVjdCBjb2RlIHNh eWluZyB3aGVyZSB0byBmaW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZS4KUmVnYXJkbGVzcyBv ZiB3aGF0IHNlcnZlciBob3N0cyB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UsIHlvdSByZW1haW4K b2JsaWdhdGVkIHRvIGVuc3VyZSB0aGF0IGl0IGlzIGF2YWlsYWJsZSBmb3IgYXMgbG9uZyBhcyBu ZWVkZWQgdG8Kc2F0aXNmeSB0aGVzZSByZXF1aXJlbWVudHMuCgogICBlKSBDb252ZXkgdGhlIG9i amVjdCBjb2RlIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24sIHByb3ZpZGVkCnlvdSBp bmZvcm0gb3RoZXIgcGVlcnMgd2hlcmUgdGhlIG9iamVjdCBjb2RlIGFuZCBDb3JyZXNwb25kaW5n IFNvdXJjZSBvZgp0aGUgd29yayBhcmUgYmVpbmcgb2ZmZXJlZCB0byB0aGUgZ2VuZXJhbCBwdWJs aWMgYXQgbm8gY2hhcmdlIHVuZGVyCnN1YnNlY3Rpb24gNmQuCgogICBBIHNlcGFyYWJsZSBwb3J0 aW9uIG9mIHRoZSBvYmplY3QgY29kZSwgd2hvc2Ugc291cmNlIGNvZGUgaXMgZXhjbHVkZWQKZnJv bSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgYXMgYSBTeXN0ZW0gTGlicmFyeSwgbmVlZCBub3Qg YmUgaW5jbHVkZWQKaW4gY29udmV5aW5nIHRoZSBvYmplY3QgY29kZSB3b3JrLgoKICAgQSAiVXNl ciBQcm9kdWN0IiBpcyBlaXRoZXIgKDEpIGEgImNvbnN1bWVyIHByb2R1Y3QiLCB3aGljaCBtZWFu cyBhbnkKdGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgd2hpY2ggaXMgbm9ybWFsbHkgdXNlZCBm b3IgcGVyc29uYWwsIGZhbWlseSwKb3IgaG91c2Vob2xkIHB1cnBvc2VzLCBvciAoMikgYW55dGhp bmcgZGVzaWduZWQgb3Igc29sZCBmb3IKaW5jb3Jwb3JhdGlvbiBpbnRvIGEgZHdlbGxpbmcuICBJ biBkZXRlcm1pbmluZyB3aGV0aGVyIGEgcHJvZHVjdCBpcyBhCmNvbnN1bWVyIHByb2R1Y3QsIGRv dWJ0ZnVsIGNhc2VzIHNoYWxsIGJlIHJlc29sdmVkIGluIGZhdm9yIG9mIGNvdmVyYWdlLgpGb3Ig YSBwYXJ0aWN1bGFyIHByb2R1Y3QgcmVjZWl2ZWQgYnkgYSBwYXJ0aWN1bGFyIHVzZXIsICJub3Jt YWxseSB1c2VkIgpyZWZlcnMgdG8gYSB0eXBpY2FsIG9yIGNvbW1vbiB1c2Ugb2YgdGhhdCBjbGFz cyBvZiBwcm9kdWN0LCByZWdhcmRsZXNzCm9mIHRoZSBzdGF0dXMgb2YgdGhlIHBhcnRpY3VsYXIg dXNlciBvciBvZiB0aGUgd2F5IGluIHdoaWNoIHRoZQpwYXJ0aWN1bGFyIHVzZXIgYWN0dWFsbHkg dXNlcywgb3IgZXhwZWN0cyBvciBpcyBleHBlY3RlZCB0byB1c2UsIHRoZQpwcm9kdWN0LiAgQSBw cm9kdWN0IGlzIGEgY29uc3VtZXIgcHJvZHVjdCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlCnBy b2R1Y3QgaGFzIHN1YnN0YW50aWFsIGNvbW1lcmNpYWwsIGluZHVzdHJpYWwgb3Igbm9uLWNvbnN1 bWVyIHVzZXMsCnVubGVzcyBzdWNoIHVzZXMgcmVwcmVzZW50IHRoZSBvbmx5IHNpZ25pZmljYW50 IG1vZGUgb2YgdXNlIG9mIHRoZQpwcm9kdWN0LgoKICAgIkluc3RhbGxhdGlvbiBJbmZvcm1hdGlv biIgZm9yIGEgVXNlciBQcm9kdWN0IG1lYW5zIGFueSBtZXRob2RzLApwcm9jZWR1cmVzLCBhdXRo b3JpemF0aW9uIGtleXMsIG9yIG90aGVyIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGluc3RhbGwK YW5kIGV4ZWN1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgYSBjb3ZlcmVkIHdvcmsgaW4gdGhhdCBV c2VyIFByb2R1Y3QKZnJvbSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgaXRzIENvcnJlc3BvbmRpbmcg U291cmNlLiAgVGhlIGluZm9ybWF0aW9uCm11c3Qgc3VmZmljZSB0byBlbnN1cmUgdGhhdCB0aGUg Y29udGludWVkIGZ1bmN0aW9uaW5nIG9mIHRoZSBtb2RpZmllZApvYmplY3QgY29kZSBpcyBpbiBu byBjYXNlIHByZXZlbnRlZCBvciBpbnRlcmZlcmVkIHdpdGggc29sZWx5IGJlY2F1c2UKbW9kaWZp Y2F0aW9uIGhhcyBiZWVuIG1hZGUuCgogICBJZiB5b3UgY29udmV5IGFuIG9iamVjdCBjb2RlIHdv cmsgdW5kZXIgdGhpcyBzZWN0aW9uIGluLCBvciB3aXRoLCBvcgpzcGVjaWZpY2FsbHkgZm9yIHVz ZSBpbiwgYSBVc2VyIFByb2R1Y3QsIGFuZCB0aGUgY29udmV5aW5nIG9jY3VycyBhcwpwYXJ0IG9m IGEgdHJhbnNhY3Rpb24gaW4gd2hpY2ggdGhlIHJpZ2h0IG9mIHBvc3Nlc3Npb24gYW5kIHVzZSBv ZiB0aGUKVXNlciBQcm9kdWN0IGlzIHRyYW5zZmVycmVkIHRvIHRoZSByZWNpcGllbnQgaW4gcGVy cGV0dWl0eSBvciBmb3IgYQpmaXhlZCB0ZXJtIChyZWdhcmRsZXNzIG9mIGhvdyB0aGUgdHJhbnNh Y3Rpb24gaXMgY2hhcmFjdGVyaXplZCksIHRoZQpDb3JyZXNwb25kaW5nIFNvdXJjZSBjb252ZXll ZCB1bmRlciB0aGlzIHNlY3Rpb24gbXVzdCBiZSBhY2NvbXBhbmllZCBieQp0aGUgSW5zdGFsbGF0 aW9uIEluZm9ybWF0aW9uLiAgQnV0IHRoaXMgcmVxdWlyZW1lbnQgZG9lcyBub3QgYXBwbHkgaWYK bmVpdGhlciB5b3Ugbm9yIGFueSB0aGlyZCBwYXJ0eSByZXRhaW5zIHRoZSBhYmlsaXR5IHRvIGlu c3RhbGwgbW9kaWZpZWQKb2JqZWN0IGNvZGUgb24gdGhlIFVzZXIgUHJvZHVjdCAoZm9yIGV4YW1w bGUsIHRoZSB3b3JrIGhhcyBiZWVuCmluc3RhbGxlZCBpbiBST00pLgoKICAgVGhlIHJlcXVpcmVt ZW50IHRvIHByb3ZpZGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIGRvZXMgbm90IGluY2x1ZGUK YSByZXF1aXJlbWVudCB0byBjb250aW51ZSB0byBwcm92aWRlIHN1cHBvcnQgc2VydmljZSwgd2Fy cmFudHksIG9yCnVwZGF0ZXMgZm9yIGEgd29yayB0aGF0IGhhcyBiZWVuIG1vZGlmaWVkIG9yIGlu c3RhbGxlZCBieSB0aGUgcmVjaXBpZW50LApvciBmb3IgdGhlIFVzZXIgUHJvZHVjdCBpbiB3aGlj aCBpdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQuCkFjY2VzcyB0byBhIG5ldHdvcmsg bWF5IGJlIGRlbmllZCB3aGVuIHRoZSBtb2RpZmljYXRpb24gaXRzZWxmCm1hdGVyaWFsbHkgYW5k IGFkdmVyc2VseSBhZmZlY3RzIHRoZSBvcGVyYXRpb24gb2YgdGhlIG5ldHdvcmsgb3IKdmlvbGF0 ZXMgdGhlIHJ1bGVzIGFuZCBwcm90b2NvbHMgZm9yIGNvbW11bmljYXRpb24gYWNyb3NzIHRoZSBu ZXR3b3JrLgoKICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgY29udmV5ZWQsIGFuZCBJbnN0YWxsYXRp b24gSW5mb3JtYXRpb24gcHJvdmlkZWQsCmluIGFjY29yZCB3aXRoIHRoaXMgc2VjdGlvbiBtdXN0 IGJlIGluIGEgZm9ybWF0IHRoYXQgaXMgcHVibGljbHkKZG9jdW1lbnRlZCAoYW5kIHdpdGggYW4g aW1wbGVtZW50YXRpb24gYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgaW4gc291cmNlCmNvZGUgZm9y bSksIGFuZCBtdXN0IHJlcXVpcmUgbm8gc3BlY2lhbCBwYXNzd29yZCBvciBrZXkgZm9yIHVucGFj a2luZywKcmVhZGluZyBvciBjb3B5aW5nLgoKICAxLiBBZGRpdGlvbmFsIFRlcm1zLgoKICAgIkFk ZGl0aW9uYWwgcGVybWlzc2lvbnMiIGFyZSB0ZXJtcyB0aGF0IHN1cHBsZW1lbnQgdGhlIHRlcm1z IG9mIHRoaXMKTGljZW5zZSBieSBtYWtpbmcgZXhjZXB0aW9ucyBmcm9tIG9uZSBvciBtb3JlIG9m IGl0cyBjb25kaXRpb25zLgpBZGRpdGlvbmFsIHBlcm1pc3Npb25zIHRoYXQgYXJlIGFwcGxpY2Fi bGUgdG8gdGhlIGVudGlyZSBQcm9ncmFtIHNoYWxsCmJlIHRyZWF0ZWQgYXMgdGhvdWdoIHRoZXkg d2VyZSBpbmNsdWRlZCBpbiB0aGlzIExpY2Vuc2UsIHRvIHRoZSBleHRlbnQKdGhhdCB0aGV5IGFy ZSB2YWxpZCB1bmRlciBhcHBsaWNhYmxlIGxhdy4gIElmIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMK YXBwbHkgb25seSB0byBwYXJ0IG9mIHRoZSBQcm9ncmFtLCB0aGF0IHBhcnQgbWF5IGJlIHVzZWQg c2VwYXJhdGVseQp1bmRlciB0aG9zZSBwZXJtaXNzaW9ucywgYnV0IHRoZSBlbnRpcmUgUHJvZ3Jh bSByZW1haW5zIGdvdmVybmVkIGJ5IHRoaXMKTGljZW5zZSB3aXRob3V0IHJlZ2FyZCB0byB0aGUg YWRkaXRpb25hbCBwZXJtaXNzaW9ucy4KCiAgIFdoZW4geW91IGNvbnZleSBhIGNvcHkgb2YgYSBj b3ZlcmVkIHdvcmssIHlvdSBtYXkgYXQgeW91ciBvcHRpb24KcmVtb3ZlIGFueSBhZGRpdGlvbmFs IHBlcm1pc3Npb25zIGZyb20gdGhhdCBjb3B5LCBvciBmcm9tIGFueSBwYXJ0IG9mCml0LiAgKEFk ZGl0aW9uYWwgcGVybWlzc2lvbnMgbWF5IGJlIHdyaXR0ZW4gdG8gcmVxdWlyZSB0aGVpciBvd24g cmVtb3ZhbAppbiBjZXJ0YWluIGNhc2VzIHdoZW4geW91IG1vZGlmeSB0aGUgd29yay4pICBZb3Ug bWF5IHBsYWNlIGFkZGl0aW9uYWwKcGVybWlzc2lvbnMgb24gbWF0ZXJpYWwsIGFkZGVkIGJ5IHlv dSB0byBhIGNvdmVyZWQgd29yaywgZm9yIHdoaWNoIHlvdQpoYXZlIG9yIGNhbiBnaXZlIGFwcHJv cHJpYXRlIGNvcHlyaWdodCBwZXJtaXNzaW9uLgoKICAgTm90d2l0aHN0YW5kaW5nIGFueSBvdGhl ciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBmb3IgbWF0ZXJpYWwgeW91CmFkZCB0byBhIGNv dmVyZWQgd29yaywgeW91IG1heSAoaWYgYXV0aG9yaXplZCBieSB0aGUgY29weXJpZ2h0IGhvbGRl cnMKb2YgdGhhdCBtYXRlcmlhbCkgc3VwcGxlbWVudCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNl IHdpdGggdGVybXM6CgogICBhKSBEaXNjbGFpbWluZyB3YXJyYW50eSBvciBsaW1pdGluZyBsaWFi aWxpdHkgZGlmZmVyZW50bHkgZnJvbSB0aGUKdGVybXMgb2Ygc2VjdGlvbnMgMTUgYW5kIDE2IG9m IHRoaXMgTGljZW5zZTsgb3IKCiAgIGIpIFJlcXVpcmluZyBwcmVzZXJ2YXRpb24gb2Ygc3BlY2lm aWVkIHJlYXNvbmFibGUgbGVnYWwgbm90aWNlcyBvcgphdXRob3IgYXR0cmlidXRpb25zIGluIHRo YXQgbWF0ZXJpYWwgb3IgaW4gdGhlIEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMKZGlzcGxheWVk IGJ5IHdvcmtzIGNvbnRhaW5pbmcgaXQ7IG9yCgogICBjKSBQcm9oaWJpdGluZyBtaXNyZXByZXNl bnRhdGlvbiBvZiB0aGUgb3JpZ2luIG9mIHRoYXQgbWF0ZXJpYWwsIG9yCnJlcXVpcmluZyB0aGF0 IG1vZGlmaWVkIHZlcnNpb25zIG9mIHN1Y2ggbWF0ZXJpYWwgYmUgbWFya2VkIGluCnJlYXNvbmFi bGUgd2F5cyBhcyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgdmVyc2lvbjsgb3IKCiAgIGQp IExpbWl0aW5nIHRoZSB1c2UgZm9yIHB1YmxpY2l0eSBwdXJwb3NlcyBvZiBuYW1lcyBvZiBsaWNl bnNvcnMgb3IKYXV0aG9ycyBvZiB0aGUgbWF0ZXJpYWw7IG9yCgogICBlKSBEZWNsaW5pbmcgdG8g Z3JhbnQgcmlnaHRzIHVuZGVyIHRyYWRlbWFyayBsYXcgZm9yIHVzZSBvZiBzb21lCnRyYWRlIG5h bWVzLCB0cmFkZW1hcmtzLCBvciBzZXJ2aWNlIG1hcmtzOyBvcgoKICAgZikgUmVxdWlyaW5nIGlu ZGVtbmlmaWNhdGlvbiBvZiBsaWNlbnNvcnMgYW5kIGF1dGhvcnMgb2YgdGhhdAptYXRlcmlhbCBi eSBhbnlvbmUgd2hvIGNvbnZleXMgdGhlIG1hdGVyaWFsIChvciBtb2RpZmllZCB2ZXJzaW9ucyBv ZiBpdCkKd2l0aCBjb250cmFjdHVhbCBhc3N1bXB0aW9ucyBvZiBsaWFiaWxpdHkgdG8gdGhlIHJl Y2lwaWVudCwgZm9yIGFueQpsaWFiaWxpdHkgdGhhdCB0aGVzZSBjb250cmFjdHVhbCBhc3N1bXB0 aW9ucyBkaXJlY3RseSBpbXBvc2Ugb24gdGhvc2UKbGljZW5zb3JzIGFuZCBhdXRob3JzLgoKICAg QWxsIG90aGVyIG5vbi1wZXJtaXNzaXZlIGFkZGl0aW9uYWwgdGVybXMgYXJlIGNvbnNpZGVyZWQg ImZ1cnRoZXIKcmVzdHJpY3Rpb25zIiB3aXRoaW4gdGhlIG1lYW5pbmcgb2Ygc2VjdGlvbiAxMC4g IElmIHRoZSBQcm9ncmFtIGFzIHlvdQpyZWNlaXZlZCBpdCwgb3IgYW55IHBhcnQgb2YgaXQsIGNv bnRhaW5zIGEgbm90aWNlIHN0YXRpbmcgdGhhdCBpdCBpcwpnb3Zlcm5lZCBieSB0aGlzIExpY2Vu c2UgYWxvbmcgd2l0aCBhIHRlcm0gdGhhdCBpcyBhIGZ1cnRoZXIKcmVzdHJpY3Rpb24sIHlvdSBt YXkgcmVtb3ZlIHRoYXQgdGVybS4gIElmIGEgbGljZW5zZSBkb2N1bWVudCBjb250YWlucyBhCmZ1 cnRoZXIgcmVzdHJpY3Rpb24gYnV0IHBlcm1pdHMgcmVsaWNlbnNpbmcgb3IgY29udmV5aW5nIHVu ZGVyIHRoaXMKTGljZW5zZSwgeW91IG1heSBhZGQgdG8gYSBjb3ZlcmVkIHdvcmsgbWF0ZXJpYWwg Z292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mCnRoYXQgbGljZW5zZSBkb2N1bWVudCwgcHJvdmlkZWQg dGhhdCB0aGUgZnVydGhlciByZXN0cmljdGlvbiBkb2VzIG5vdApzdXJ2aXZlIHN1Y2ggcmVsaWNl bnNpbmcgb3IgY29udmV5aW5nLgoKICAgSWYgeW91IGFkZCB0ZXJtcyB0byBhIGNvdmVyZWQgd29y ayBpbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24sIHlvdQptdXN0IHBsYWNlLCBpbiB0aGUgcmVs ZXZhbnQgc291cmNlIGZpbGVzLCBhIHN0YXRlbWVudCBvZiB0aGUgYWRkaXRpb25hbAp0ZXJtcyB0 aGF0IGFwcGx5IHRvIHRob3NlIGZpbGVzLCBvciBhIG5vdGljZSBpbmRpY2F0aW5nIHdoZXJlIHRv IGZpbmQKdGhlIGFwcGxpY2FibGUgdGVybXMuCgogICBBZGRpdGlvbmFsIHRlcm1zLCBwZXJtaXNz aXZlIG9yIG5vbi1wZXJtaXNzaXZlLCBtYXkgYmUgc3RhdGVkIGluIHRoZQpmb3JtIG9mIGEgc2Vw YXJhdGVseSB3cml0dGVuIGxpY2Vuc2UsIG9yIHN0YXRlZCBhcyBleGNlcHRpb25zOyB0aGUgYWJv dmUKcmVxdWlyZW1lbnRzIGFwcGx5IGVpdGhlciB3YXkuCgogIDEuIFRlcm1pbmF0aW9uLgoKICAg WW91IG1heSBub3QgcHJvcGFnYXRlIG9yIG1vZGlmeSBhIGNvdmVyZWQgd29yayBleGNlcHQgYXMg ZXhwcmVzc2x5CnByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0IG90aGVy d2lzZSB0byBwcm9wYWdhdGUgb3IKbW9kaWZ5IGl0IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRp Y2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyCnRoaXMgTGljZW5zZSAoaW5jbHVkaW5n IGFueSBwYXRlbnQgbGljZW5zZXMgZ3JhbnRlZCB1bmRlciB0aGUgdGhpcmQKcGFyYWdyYXBoIG9m IHNlY3Rpb24gMTEpLgoKICAgSG93ZXZlciwgaWYgeW91IGNlYXNlIGFsbCB2aW9sYXRpb24gb2Yg dGhpcyBMaWNlbnNlLCB0aGVuIHlvdXIKbGljZW5zZSBmcm9tIGEgcGFydGljdWxhciBjb3B5cmln aHQgaG9sZGVyIGlzIHJlaW5zdGF0ZWQgKGEpCnByb3Zpc2lvbmFsbHksIHVubGVzcyBhbmQgdW50 aWwgdGhlIGNvcHlyaWdodCBob2xkZXIgZXhwbGljaXRseSBhbmQKZmluYWxseSB0ZXJtaW5hdGVz IHlvdXIgbGljZW5zZSwgYW5kIChiKSBwZXJtYW5lbnRseSwgaWYgdGhlIGNvcHlyaWdodApob2xk ZXIgZmFpbHMgdG8gbm90aWZ5IHlvdSBvZiB0aGUgdmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJs ZSBtZWFucwpwcmlvciB0byA2MCBkYXlzIGFmdGVyIHRoZSBjZXNzYXRpb24uCgogICBNb3Jlb3Zl ciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKcmVp bnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ug b2YgdGhlCnZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZp cnN0IHRpbWUgeW91IGhhdmUKcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExp Y2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0CmNvcHlyaWdodCBob2xkZXIsIGFuZCB5b3Ug Y3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIgeW91cgpyZWNlaXB0IG9m IHRoZSBub3RpY2UuCgogICBUZXJtaW5hdGlvbiBvZiB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIHNl Y3Rpb24gZG9lcyBub3QgdGVybWluYXRlIHRoZQpsaWNlbnNlcyBvZiBwYXJ0aWVzIHdobyBoYXZl IHJlY2VpdmVkIGNvcGllcyBvciByaWdodHMgZnJvbSB5b3UgdW5kZXIKdGhpcyBMaWNlbnNlLiAg SWYgeW91ciByaWdodHMgaGF2ZSBiZWVuIHRlcm1pbmF0ZWQgYW5kIG5vdCBwZXJtYW5lbnRseQpy ZWluc3RhdGVkLCB5b3UgZG8gbm90IHF1YWxpZnkgdG8gcmVjZWl2ZSBuZXcgbGljZW5zZXMgZm9y IHRoZSBzYW1lCm1hdGVyaWFsIHVuZGVyIHNlY3Rpb24gMTAuCgogIDEuIEFjY2VwdGFuY2UgTm90 IFJlcXVpcmVkIGZvciBIYXZpbmcgQ29waWVzLgoKICAgWW91IGFyZSBub3QgcmVxdWlyZWQgdG8g YWNjZXB0IHRoaXMgTGljZW5zZSBpbiBvcmRlciB0byByZWNlaXZlIG9yCnJ1biBhIGNvcHkgb2Yg dGhlIFByb2dyYW0uICBBbmNpbGxhcnkgcHJvcGFnYXRpb24gb2YgYSBjb3ZlcmVkIHdvcmsKb2Nj dXJyaW5nIHNvbGVseSBhcyBhIGNvbnNlcXVlbmNlIG9mIHVzaW5nIHBlZXItdG8tcGVlciB0cmFu c21pc3Npb24gdG8KcmVjZWl2ZSBhIGNvcHkgbGlrZXdpc2UgZG9lcyBub3QgcmVxdWlyZSBhY2Nl cHRhbmNlLiAgSG93ZXZlciwgbm90aGluZwpvdGhlciB0aGFuIHRoaXMgTGljZW5zZSBncmFudHMg eW91IHBlcm1pc3Npb24gdG8gcHJvcGFnYXRlIG9yIG1vZGlmeSBhbnkKY292ZXJlZCB3b3JrLiAg VGhlc2UgYWN0aW9ucyBpbmZyaW5nZSBjb3B5cmlnaHQgaWYgeW91IGRvIG5vdCBhY2NlcHQKdGhp cyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieSBtb2RpZnlpbmcgb3IgcHJvcGFnYXRpbmcgYSBjb3Zl cmVkIHdvcmssCnlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRv IGRvIHNvLgoKICAxLiBBdXRvbWF0aWMgTGljZW5zaW5nIG9mIERvd25zdHJlYW0gUmVjaXBpZW50 cy4KCiAgIEVhY2ggdGltZSB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCB0aGUgcmVjaXBpZW50 IGF1dG9tYXRpY2FsbHkKcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlIG9yaWdpbmFsIGxpY2Vu c29ycywgdG8gcnVuLCBtb2RpZnkgYW5kCnByb3BhZ2F0ZSB0aGF0IHdvcmssIHN1YmplY3QgdG8g dGhpcyBMaWNlbnNlLiAgWW91IGFyZSBub3QgcmVzcG9uc2libGUKZm9yIGVuZm9yY2luZyBjb21w bGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aCB0aGlzIExpY2Vuc2UuCgogICBBbiAiZW50aXR5 IHRyYW5zYWN0aW9uIiBpcyBhIHRyYW5zYWN0aW9uIHRyYW5zZmVycmluZyBjb250cm9sIG9mIGFu Cm9yZ2FuaXphdGlvbiwgb3Igc3Vic3RhbnRpYWxseSBhbGwgYXNzZXRzIG9mIG9uZSwgb3Igc3Vi ZGl2aWRpbmcgYW4Kb3JnYW5pemF0aW9uLCBvciBtZXJnaW5nIG9yZ2FuaXphdGlvbnMuICBJZiBw cm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQKd29yayByZXN1bHRzIGZyb20gYW4gZW50aXR5IHRyYW5z YWN0aW9uLCBlYWNoIHBhcnR5IHRvIHRoYXQgdHJhbnNhY3Rpb24Kd2hvIHJlY2VpdmVzIGEgY29w eSBvZiB0aGUgd29yayBhbHNvIHJlY2VpdmVzIHdoYXRldmVyIGxpY2Vuc2VzIHRvIHRoZQp3b3Jr IHRoZSBwYXJ0eSdzIHByZWRlY2Vzc29yIGluIGludGVyZXN0IGhhZCBvciBjb3VsZCBnaXZlIHVu ZGVyIHRoZQpwcmV2aW91cyBwYXJhZ3JhcGgsIHBsdXMgYSByaWdodCB0byBwb3NzZXNzaW9uIG9m IHRoZSBDb3JyZXNwb25kaW5nClNvdXJjZSBvZiB0aGUgd29yayBmcm9tIHRoZSBwcmVkZWNlc3Nv ciBpbiBpbnRlcmVzdCwgaWYgdGhlIHByZWRlY2Vzc29yCmhhcyBpdCBvciBjYW4gZ2V0IGl0IHdp dGggcmVhc29uYWJsZSBlZmZvcnRzLgoKICAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVy IHJlc3RyaWN0aW9ucyBvbiB0aGUgZXhlcmNpc2Ugb2YgdGhlCnJpZ2h0cyBncmFudGVkIG9yIGFm ZmlybWVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEZvciBleGFtcGxlLCB5b3UgbWF5IG5vdAppbXBv c2UgYSBsaWNlbnNlIGZlZSwgcm95YWx0eSwgb3Igb3RoZXIgY2hhcmdlIGZvciBleGVyY2lzZSBv ZiByaWdodHMKZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCB5b3UgbWF5IG5vdCBpbml0 aWF0ZSBsaXRpZ2F0aW9uCihpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0g aW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IGFueQpwYXRlbnQgY2xhaW0gaXMgaW5mcmluZ2Vk IGJ5IG1ha2luZywgdXNpbmcsIHNlbGxpbmcsIG9mZmVyaW5nIGZvciBzYWxlLApvciBpbXBvcnRp bmcgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24gb2YgaXQuCgogIDEuIFBhdGVudHMuCgogICBB ICJjb250cmlidXRvciIgaXMgYSBjb3B5cmlnaHQgaG9sZGVyIHdobyBhdXRob3JpemVzIHVzZSB1 bmRlciB0aGlzCkxpY2Vuc2Ugb2YgdGhlIFByb2dyYW0gb3IgYSB3b3JrIG9uIHdoaWNoIHRoZSBQ cm9ncmFtIGlzIGJhc2VkLiAgVGhlCndvcmsgdGh1cyBsaWNlbnNlZCBpcyBjYWxsZWQgdGhlIGNv bnRyaWJ1dG9yJ3MgImNvbnRyaWJ1dG9yIHZlcnNpb24iLgoKICAgQSBjb250cmlidXRvcidzICJl c3NlbnRpYWwgcGF0ZW50IGNsYWltcyIgYXJlIGFsbCBwYXRlbnQgY2xhaW1zIG93bmVkCm9yIGNv bnRyb2xsZWQgYnkgdGhlIGNvbnRyaWJ1dG9yLCB3aGV0aGVyIGFscmVhZHkgYWNxdWlyZWQgb3Ig aGVyZWFmdGVyCmFjcXVpcmVkLCB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBieSBzb21lIG1hbm5l ciwgcGVybWl0dGVkIGJ5IHRoaXMKTGljZW5zZSwgb2YgbWFraW5nLCB1c2luZywgb3Igc2VsbGlu ZyBpdHMgY29udHJpYnV0b3IgdmVyc2lvbiwgYnV0IGRvCm5vdCBpbmNsdWRlIGNsYWltcyB0aGF0 IHdvdWxkIGJlIGluZnJpbmdlZCBvbmx5IGFzIGEgY29uc2VxdWVuY2Ugb2YKZnVydGhlciBtb2Rp ZmljYXRpb24gb2YgdGhlIGNvbnRyaWJ1dG9yIHZlcnNpb24uICBGb3IgcHVycG9zZXMgb2YgdGhp cwpkZWZpbml0aW9uLCAiY29udHJvbCIgaW5jbHVkZXMgdGhlIHJpZ2h0IHRvIGdyYW50IHBhdGVu dCBzdWJsaWNlbnNlcyBpbgphIG1hbm5lciBjb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50 cyBvZiB0aGlzIExpY2Vuc2UuCgogICBFYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24t ZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZQpwYXRlbnQgbGljZW5zZSB1bmRlciB0 aGUgY29udHJpYnV0b3IncyBlc3NlbnRpYWwgcGF0ZW50IGNsYWltcywgdG8gbWFrZSwKdXNlLCBz ZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0IGFuZCBvdGhlcndpc2UgcnVuLCBtb2RpZnkgYW5k CnByb3BhZ2F0ZSB0aGUgY29udGVudHMgb2YgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24uCgogICBJ biB0aGUgZm9sbG93aW5nIHRocmVlIHBhcmFncmFwaHMsIGEgInBhdGVudCBsaWNlbnNlIiBpcyBh bnkgZXhwcmVzcwphZ3JlZW1lbnQgb3IgY29tbWl0bWVudCwgaG93ZXZlciBkZW5vbWluYXRlZCwg bm90IHRvIGVuZm9yY2UgYSBwYXRlbnQKKHN1Y2ggYXMgYW4gZXhwcmVzcyBwZXJtaXNzaW9uIHRv IHByYWN0aWNlIGEgcGF0ZW50IG9yIGNvdmVuYW50IG5vdCB0bwpzdWUgZm9yIHBhdGVudCBpbmZy aW5nZW1lbnQpLiAgVG8gImdyYW50IiBzdWNoIGEgcGF0ZW50IGxpY2Vuc2UgdG8gYQpwYXJ0eSBt ZWFucyB0byBtYWtlIHN1Y2ggYW4gYWdyZWVtZW50IG9yIGNvbW1pdG1lbnQgbm90IHRvIGVuZm9y Y2UgYQpwYXRlbnQgYWdhaW5zdCB0aGUgcGFydHkuCgogICBJZiB5b3UgY29udmV5IGEgY292ZXJl ZCB3b3JrLCBrbm93aW5nbHkgcmVseWluZyBvbiBhIHBhdGVudCBsaWNlbnNlLAphbmQgdGhlIENv cnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGlzIG5vdCBhdmFpbGFibGUgZm9yIGFueW9u ZSB0bwpjb3B5LCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGlj ZW5zZSwgdGhyb3VnaCBhCnB1YmxpY2x5IGF2YWlsYWJsZSBuZXR3b3JrIHNlcnZlciBvciBvdGhl ciByZWFkaWx5IGFjY2Vzc2libGUgbWVhbnMsCnRoZW4geW91IG11c3QgZWl0aGVyICgxKSBjYXVz ZSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdG8gYmUgc28KYXZhaWxhYmxlLCBvciAoMikgYXJy YW5nZSB0byBkZXByaXZlIHlvdXJzZWxmIG9mIHRoZSBiZW5lZml0IG9mIHRoZQpwYXRlbnQgbGlj ZW5zZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHdvcmssIG9yICgzKSBhcnJhbmdlLCBpbiBhIG1hbm5l cgpjb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UsIHRvIGV4 dGVuZCB0aGUgcGF0ZW50CmxpY2Vuc2UgdG8gZG93bnN0cmVhbSByZWNpcGllbnRzLiAgIktub3dp bmdseSByZWx5aW5nIiBtZWFucyB5b3UgaGF2ZQphY3R1YWwga25vd2xlZGdlIHRoYXQsIGJ1dCBm b3IgdGhlIHBhdGVudCBsaWNlbnNlLCB5b3VyIGNvbnZleWluZyB0aGUKY292ZXJlZCB3b3JrIGlu IGEgY291bnRyeSwgb3IgeW91ciByZWNpcGllbnQncyB1c2Ugb2YgdGhlIGNvdmVyZWQgd29yawpp biBhIGNvdW50cnksIHdvdWxkIGluZnJpbmdlIG9uZSBvciBtb3JlIGlkZW50aWZpYWJsZSBwYXRl bnRzIGluIHRoYXQKY291bnRyeSB0aGF0IHlvdSBoYXZlIHJlYXNvbiB0byBiZWxpZXZlIGFyZSB2 YWxpZC4KCiAgIElmLCBwdXJzdWFudCB0byBvciBpbiBjb25uZWN0aW9uIHdpdGggYSBzaW5nbGUg dHJhbnNhY3Rpb24gb3IKYXJyYW5nZW1lbnQsIHlvdSBjb252ZXksIG9yIHByb3BhZ2F0ZSBieSBw cm9jdXJpbmcgY29udmV5YW5jZSBvZiwgYQpjb3ZlcmVkIHdvcmssIGFuZCBncmFudCBhIHBhdGVu dCBsaWNlbnNlIHRvIHNvbWUgb2YgdGhlIHBhcnRpZXMKcmVjZWl2aW5nIHRoZSBjb3ZlcmVkIHdv cmsgYXV0aG9yaXppbmcgdGhlbSB0byB1c2UsIHByb3BhZ2F0ZSwgbW9kaWZ5IG9yCmNvbnZleSBh IHNwZWNpZmljIGNvcHkgb2YgdGhlIGNvdmVyZWQgd29yaywgdGhlbiB0aGUgcGF0ZW50IGxpY2Vu c2UgeW91CmdyYW50IGlzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQgdG8gYWxsIHJlY2lwaWVudHMg b2YgdGhlIGNvdmVyZWQgd29yawphbmQgd29ya3MgYmFzZWQgb24gaXQuCgogICBBIHBhdGVudCBs aWNlbnNlIGlzICJkaXNjcmltaW5hdG9yeSIgaWYgaXQgZG9lcyBub3QgaW5jbHVkZSB3aXRoaW4K dGhlIHNjb3BlIG9mIGl0cyBjb3ZlcmFnZSwgcHJvaGliaXRzIHRoZSBleGVyY2lzZSBvZiwgb3Ig aXMgY29uZGl0aW9uZWQKb24gdGhlIG5vbi1leGVyY2lzZSBvZiBvbmUgb3IgbW9yZSBvZiB0aGUg cmlnaHRzIHRoYXQgYXJlIHNwZWNpZmljYWxseQpncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZS4g IFlvdSBtYXkgbm90IGNvbnZleSBhIGNvdmVyZWQgd29yayBpZiB5b3UKYXJlIGEgcGFydHkgdG8g YW4gYXJyYW5nZW1lbnQgd2l0aCBhIHRoaXJkIHBhcnR5IHRoYXQgaXMgaW4gdGhlIGJ1c2luZXNz Cm9mIGRpc3RyaWJ1dGluZyBzb2Z0d2FyZSwgdW5kZXIgd2hpY2ggeW91IG1ha2UgcGF5bWVudCB0 byB0aGUgdGhpcmQKcGFydHkgYmFzZWQgb24gdGhlIGV4dGVudCBvZiB5b3VyIGFjdGl2aXR5IG9m IGNvbnZleWluZyB0aGUgd29yaywgYW5kCnVuZGVyIHdoaWNoIHRoZSB0aGlyZCBwYXJ0eSBncmFu dHMsIHRvIGFueSBvZiB0aGUgcGFydGllcyB3aG8gd291bGQKcmVjZWl2ZSB0aGUgY292ZXJlZCB3 b3JrIGZyb20geW91LCBhIGRpc2NyaW1pbmF0b3J5IHBhdGVudCBsaWNlbnNlIChhKQppbiBjb25u ZWN0aW9uIHdpdGggY29waWVzIG9mIHRoZSBjb3ZlcmVkIHdvcmsgY29udmV5ZWQgYnkgeW91IChv ciBjb3BpZXMKbWFkZSBmcm9tIHRob3NlIGNvcGllcyksIG9yIChiKSBwcmltYXJpbHkgZm9yIGFu ZCBpbiBjb25uZWN0aW9uIHdpdGgKc3BlY2lmaWMgcHJvZHVjdHMgb3IgY29tcGlsYXRpb25zIHRo YXQgY29udGFpbiB0aGUgY292ZXJlZCB3b3JrLCB1bmxlc3MKeW91IGVudGVyZWQgaW50byB0aGF0 IGFycmFuZ2VtZW50LCBvciB0aGF0IHBhdGVudCBsaWNlbnNlIHdhcyBncmFudGVkLApwcmlvciB0 byAyOCBNYXJjaCAyMDA3LgoKICAgTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgY29u c3RydWVkIGFzIGV4Y2x1ZGluZyBvciBsaW1pdGluZwphbnkgaW1wbGllZCBsaWNlbnNlIG9yIG90 aGVyIGRlZmVuc2VzIHRvIGluZnJpbmdlbWVudCB0aGF0IG1heSBvdGhlcndpc2UKYmUgYXZhaWxh YmxlIHRvIHlvdSB1bmRlciBhcHBsaWNhYmxlIHBhdGVudCBsYXcuCgogIDEuIE5vIFN1cnJlbmRl ciBvZiBPdGhlcnMnIEZyZWVkb20uCgogICBJZiBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlv dSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50Cm9yIG90aGVyd2lzZSkgdGhhdCBj b250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbwpub3QgZXhj dXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5u b3QKY29udmV5IGEgY292ZXJlZCB3b3JrIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkg eW91ciBvYmxpZ2F0aW9ucwp1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5l bnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYQpjb25zZXF1ZW5jZSB5b3UgbWF5IG5vdCBjb252ZXkg aXQgYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBhZ3JlZSB0bwp0ZXJtcyB0aGF0IG9ibGln YXRlIHlvdSB0byBjb2xsZWN0IGEgcm95YWx0eSBmb3IgZnVydGhlciBjb252ZXlpbmcgZnJvbQp0 aG9zZSB0byB3aG9tIHlvdSBjb252ZXkgdGhlIFByb2dyYW0sIHRoZSBvbmx5IHdheSB5b3UgY291 bGQgc2F0aXNmeQpib3RoIHRob3NlIHRlcm1zIGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8g cmVmcmFpbiBlbnRpcmVseSBmcm9tCmNvbnZleWluZyB0aGUgUHJvZ3JhbS4KCiAgMS4gVXNlIHdp dGggdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KCiAgIE5vdHdpdGhzdGFu ZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgeW91IGhhdmUKcGVybWlz c2lvbiB0byBsaW5rIG9yIGNvbWJpbmUgYW55IGNvdmVyZWQgd29yayB3aXRoIGEgd29yayBsaWNl bnNlZAp1bmRlciB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBpbnRvIGEgc2luZ2xlCmNvbWJpbmVkIHdvcmssIGFuZCB0byBjb252ZXkgdGhlIHJlc3Vs dGluZyB3b3JrLiAgVGhlIHRlcm1zIG9mIHRoaXMKTGljZW5zZSB3aWxsIGNvbnRpbnVlIHRvIGFw cGx5IHRvIHRoZSBwYXJ0IHdoaWNoIGlzIHRoZSBjb3ZlcmVkIHdvcmssCmJ1dCB0aGUgc3BlY2lh bCByZXF1aXJlbWVudHMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwK c2VjdGlvbiAxMywgY29uY2VybmluZyBpbnRlcmFjdGlvbiB0aHJvdWdoIGEgbmV0d29yayB3aWxs IGFwcGx5IHRvIHRoZQpjb21iaW5hdGlvbiBhcyBzdWNoLgoKICAxLiBSZXZpc2VkIFZlcnNpb25z IG9mIHRoaXMgTGljZW5zZS4KCiAgIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1 Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCm9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zCndpbGwgYmUg c2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIg aW4KZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgoKICAgRWFjaCB2 ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUK UHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIGNlcnRhaW4gbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGUg R05VIEdlbmVyYWwKUHVibGljIExpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVz IHRvIGl0LCB5b3UgaGF2ZSB0aGUgb3B0aW9uCm9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNv bmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgbnVtYmVyZWQgdmVyc2lvbiBvcgpvZiBhbnkgbGF0ZXIg dmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRo ZQpQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljCkxpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCkZvdW5kYXRpb24uCgogICBJZiB0aGUgUHJvZ3Jh bSBzcGVjaWZpZXMgdGhhdCBhIHByb3h5IGNhbiBkZWNpZGUgd2hpY2ggZnV0dXJlCnZlcnNpb25z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBjYW4gYmUgdXNlZCwgdGhhdCBwcm94 eSdzCnB1YmxpYyBzdGF0ZW1lbnQgb2YgYWNjZXB0YW5jZSBvZiBhIHZlcnNpb24gcGVybWFuZW50 bHkgYXV0aG9yaXplcyB5b3UKdG8gY2hvb3NlIHRoYXQgdmVyc2lvbiBmb3IgdGhlIFByb2dyYW0u CgogICBMYXRlciBsaWNlbnNlIHZlcnNpb25zIG1heSBnaXZlIHlvdSBhZGRpdGlvbmFsIG9yIGRp ZmZlcmVudApwZXJtaXNzaW9ucy4gIEhvd2V2ZXIsIG5vIGFkZGl0aW9uYWwgb2JsaWdhdGlvbnMg YXJlIGltcG9zZWQgb24gYW55CmF1dGhvciBvciBjb3B5cmlnaHQgaG9sZGVyIGFzIGEgcmVzdWx0 IG9mIHlvdXIgY2hvb3NpbmcgdG8gZm9sbG93IGEKbGF0ZXIgdmVyc2lvbi4KCiAgMS4gRGlzY2xh aW1lciBvZiBXYXJyYW50eS4KCiAgIFRIRVJFIElTIE5PIFdBUlJBTlRZIEZPUiBUSEUgUFJPR1JB TSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkKQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hF TiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVApIT0xERVJTIEFORC9P UiBPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUCldBUlJB TlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywg QlVUIE5PVApMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUyBGT1IgQQpQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJ U0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFCk9GIFRIRSBQUk9HUkFNIElTIFdJ VEggWU9VLiAgU0hPVUxEIFRIRSBQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VCkFTU1VNRSBU SEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04u CgogIDEuIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LgoKICAgSU4gTk8gRVZFTlQgVU5MRVNTIFJF UVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCldJTEwgQU5Z IENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTU9ESUZJRVMgQU5EL09S CkNPTlZFWVMgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9V IEZPUiBEQU1BR0VTLApJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwg T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCkFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklM SVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVApOT1QgTElNSVRFRCBUTyBMT1NT IE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUwpTVVNU QUlORUQgQlkgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFN IFRPIE9QRVJBVEUKV0lUSCBBTlkgT1RIRVIgUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVS IE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOCkFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV Q0ggREFNQUdFUy4KCiAgMS4gSW50ZXJwcmV0YXRpb24gb2YgU2VjdGlvbnMgMTUgYW5kIDE2LgoK ICAgSWYgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgYW5kIGxpbWl0YXRpb24gb2YgbGlhYmls aXR5IHByb3ZpZGVkCmFib3ZlIGNhbm5vdCBiZSBnaXZlbiBsb2NhbCBsZWdhbCBlZmZlY3QgYWNj b3JkaW5nIHRvIHRoZWlyIHRlcm1zLApyZXZpZXdpbmcgY291cnRzIHNoYWxsIGFwcGx5IGxvY2Fs IGxhdyB0aGF0IG1vc3QgY2xvc2VseSBhcHByb3hpbWF0ZXMgYW4KYWJzb2x1dGUgd2FpdmVyIG9m IGFsbCBjaXZpbCBsaWFiaWxpdHkgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBQcm9ncmFtLAp1bmxl c3MgYSB3YXJyYW50eSBvciBhc3N1bXB0aW9uIG9mIGxpYWJpbGl0eSBhY2NvbXBhbmllcyBhIGNv cHkgb2YgdGhlClByb2dyYW0gaW4gcmV0dXJuIGZvciBhIGZlZS4KCiAgIEVORCBPRiBURVJNUyBB TkQgQ09ORElUSU9OUwoKICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFBy b2dyYW1zCgogICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQg dG8gYmUgb2YgdGhlIGdyZWF0ZXN0CnBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVz dCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKZnJlZSBzb2Z0d2FyZSB3aGljaCBl dmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UKdGVybXMuCgog ICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4g IEl0IGlzIHNhZmVzdAp0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2Ug ZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5CnN0YXRlIHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7 IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgdGhlCiJjb3B5cmlnaHQiIGxpbmUg YW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCgogICA8b25l IGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0 IGl0CmRvZXMuPiBDb3B5cmlnaHQgKEMpIDx5ZWFyPiA8bmFtZSBvZiBhdXRob3I+CgogICBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQppdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIg dmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgpvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgoKICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsIGJ1dApXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCkdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KCiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAg SWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKICAgQWxzbyBhZGQg aW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVy Cm1haWwuCgogICBJZiB0aGUgcHJvZ3JhbSBkb2VzIHRlcm1pbmFsIGludGVyYWN0aW9uLCBtYWtl IGl0IG91dHB1dCBhIHNob3J0Cm5vdGljZSBsaWtlIHRoaXMgd2hlbiBpdCBzdGFydHMgaW4gYW4g aW50ZXJhY3RpdmUgbW9kZToKCiAgIDxwcm9ncmFtPiBDb3B5cmlnaHQgKEMpIDx5ZWFyPiA8bmFt ZSBvZiBhdXRob3I+IFRoaXMgcHJvZ3JhbSBjb21lcwp3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFO VFk7IGZvciBkZXRhaWxzIHR5cGUgJ3Nob3cgdycuICBUaGlzIGlzIGZyZWUKc29mdHdhcmUsIGFu ZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0IHVuZGVyIGNlcnRhaW4KY29uZGl0 aW9uczsgdHlwZSAnc2hvdyBjJyBmb3IgZGV0YWlscy4KCiAgIFRoZSBoeXBvdGhldGljYWwgY29t bWFuZHMgJ3Nob3cgdycgYW5kICdzaG93IGMnIHNob3VsZCBzaG93IHRoZQphcHByb3ByaWF0ZSBw YXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgeW91cgpwcm9n cmFtJ3MgY29tbWFuZHMgbWlnaHQgYmUgZGlmZmVyZW50OyBmb3IgYSBHVUkgaW50ZXJmYWNlLCB5 b3Ugd291bGQKdXNlIGFuICJhYm91dCBib3giLgoKICAgWW91IHNob3VsZCBhbHNvIGdldCB5b3Vy IGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yCnNjaG9vbCwgaWYgYW55 LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCm5l Y2Vzc2FyeS4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMsIGFuZCBob3cgdG8gYXBwbHkg YW5kIGZvbGxvdwp0aGUgR05VIEdQTCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv Pi4KCiAgIFRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5j b3Jwb3JhdGluZyB5b3VyCnByb2dyYW0gaW50byBwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlv dXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUKbGlicmFyeSwgeW91IG1heSBjb25zaWRlciBpdCBt b3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeQphcHBsaWNhdGlvbnMgd2l0 aCB0aGUgbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZQpH TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2Uu ICBCdXQgZmlyc3QsCnBsZWFzZSByZWFkIDxodHRwOi8vd3d3LmdudS5vcmcvcGhpbG9zb3BoeS93 aHktbm90LWxncGwuaHRtbD4uCklORk8tRElSLVNFQ1RJT04gRW1hY3MKU1RBUlQtSU5GTy1ESVIt RU5UUlkKKiBEc2xpZGU6IChkc2xpZGUpLiAgICAgQSBwcmVzZW50YXRpb24gZnJhbWV3b3JrLgpF TkQtSU5GTy1ESVItRU5UUlkKCh8KRmlsZTogZG9jdFZOM0YzLmluZm8sICBOb2RlOiBUb3AsICBO ZXh0OiBJbnRyb2R1Y3Rpb24sICBVcDogKGRpcikKCkRvbWFpbiBTcGVjaWZpYyBzTElERXMKKioq KioqKioqKioqKioqKioqKioqKgoKKiBNZW51OgoKKiBJbnRyb2R1Y3Rpb246OiAgICAgICAgICAg ICAgICAgV2h5IFlvdSBIZWFydCBEU0wgSURFCiogR2xvc3Nhcnk6OiAgICAgICAgICAgICAgICAg ICAgIFdvcmRzIFdlIEludmVudGVkCiogQ3JlYXRpbmc6OiAgICAgICAgICAgICAgICAgICAgIE1h a2luZyBPcmcgRG9jdW1lbnRzIEludG8gUHJlc2VudGF0aW9ucwoqIFByZXNlbnRpbmc6OiAgICAg ICAgICAgICAgICAgICBDb250cm9sbGluZyB0aGUgUHJlc2VudGF0aW9uCiogQ29uZmlndXJpbmc6 OiAgICAgICAgICAgICAgICAgIEdsb2JhbCBTZXR0aW5ncwoqIEV4dGVuZGluZzo6ICAgICAgICAg ICAgICAgICAgICBSZXVzaW5nIERzbGlkZSBDbGFzc2VzCiogSGFja2luZzo6ICAgICAgICAgICAg ICAgICAgICAgIEhpZ2gtbGV2ZWwgRGVzaWduIFN1bW1hcnkKKiBDb250cmlidXRpbmc6OiAgICAg ICAgICAgICAgICAgR2l2ZSBtZSBoYW1idXJnZXJzCiogVGhhbmtzOjogICAgICAgICAgICAgICAg ICAgICAgIEFuZCBBY2tub3dsZWRnZW1lbnRzCiogUHJvbnVuY2lhdGlvbjo6ICAgICAgICAgICAg ICAgIEJ1dGNoZXIgaXQgUmlnaHQKKiBJbmRpY2VzOjoKCi0tIFRoZSBEZXRhaWxlZCBOb2RlIExp c3RpbmcgLS0KCkludHJvZHVjdGlvbgoKKiBEZXNpZ24gR29hbHM6OiAgICAgICAgICAgICAgICAg VGhpbmdzIEhvcGVmdWxseSBBY2hpZXZlZAoqIFN0cmVuZ3Roczo6ICAgICAgICAgICAgICAgICAg ICBXaGVuIERzbGlkZSBpcyBQZXJmZWN0CgpHbG9zc2FyeQoKKiBPcmcgTW9kZSBUZXJtczo6ICAg ICAgICAgICAgICAgT25lcyBZb3UgTWlnaHQgTm90IEtub3cKCkNyZWF0aW5nCgoqIEFjdGlvbnM6 OiAgICAgICAgICAgICAgICAgICAgICBPdmVydmlldwoqIEFkZGluZyBBY3Rpb25zOjogICAgICAg ICAgICAgICBNYWtpbmcgQ29udGVudCBEbyBTdHVmZgoqIEFjdGlvbiBBcmd1bWVudHM6OiAgICAg ICAgICAgICBUd2Vha2luZyBCZWhhdmlvcgoqIEFubm90YXRpbmcgRWxlbWVudHM6OiAgICAgICAg ICBUZWxsaW5nIEFjdGlvbnMgV2hhdCBhbmQgV2hlcmUKKiBCYWJlbCBTY3JpcHRpbmc6OiAgICAg ICAgICAgICAgRnVsbHkgUHJvZ3JhbW1hYmxlIFN0ZXBzCiogSGlkaW5nIE1hcmt1cDo6ICAgICAg ICAgICAgICAgIE5vIE1vcmUgVWdseQoqIEZpbHRlcmluZyBIZWFkaW5nczo6ICAgICAgICAgICBJ dCdzIE5vdCBEb25lIFlldAoqIEhlYWRlciBLZXl3b3Jkczo6ICAgICAgICAgICAgICBUaXRsZSwg QXV0aG9yLCBFbWFpbAoqIEZpbGUgTG9jYWwgVmFyaWFibGVzOjogICAgICAgICBEb24ndCBGb3Jn ZXQgRnJlZSBMdW5jaAoKQmFiZWwgU2NyaXB0aW5nCgoqIFN0ZXAgQ2FsbGJhY2tzOjoKCkhpZGlu ZyBNYXJrdXAKCiogSGlkaW5nIFRvZG9zIGFuZCBUYWdzOjoKClByZXNlbnRpbmcKCiogVHdvIEJ1 dHRvbiBJbnRlcmZhY2U6OiAgICAgICAgIEl0cyBBbGwgRm9yd2FyZHMgYW5kIEJhY2t3YXJkcwoq IENvbnRlbnRzIEludGVyZmFjZTo6ICAgICAgICAgICBOYXZpZ2F0aW5nIEZhc3RlcgoqIE5hcnJh dGluZzo6ICAgICAgICAgICAgICAgICAgICBBbmQgRGVidWdnaW5nIExpdmUKKiBDdXJzb3IgVmlz aWJpbGl0eTo6CgpDb25maWd1cmluZwoKKiBCaW5kaW5nOjoKKiBIb29rczo6CiogU3RlZXppbmcg T3JnOjogICAgICAgICAgICAgICAgIE1ha2luZyBpdCBQcmV0dHkKCkJpbmRpbmcKCiogU2Vjb25k YXJ5IENvbW1hbmRzIPCfmqc6OgoKSG9va3MKCiogUGVyLVNsaWRlIEFjdGlvbnM6OgoKRXh0ZW5k aW5nCgoqIENyZWF0aW5nIEFjdGlvbnM6OiAgICAgICAgICAgICBPdmVydmlldwoqIEEgQ3VzdG9t IEFjdGlvbjo6ICAgICAgICAgICAgICBFeGFtcGxlIENsYXNzCiogRGVmYXVsdCBDbGFzc2VzOjog ICAgICAgICAgICAgIE92ZXJyaWRpbmcgdGhlIEd1dHMKCkhhY2tpbmcKCiogT2JqZWN0cyAmIE93 bmVyc2hpcDo6CiogU3RhdGVmdWwgU2VxdWVuY2U6OgoqIEZsb3cgQ29udHJvbDo6CiogSW5zdGFu dGlhdGluZyBTbGlkZXM6OgoKU3RhdGVmdWwgU2VxdWVuY2UKCiogQWN0aW9uczogQWN0aW9ucyAo MSkuCgpDb250cmlidXRpbmcKCiogV29yayBJbiBQcm9ncmVzcyDwn5qnOjoKCldvcmsgSW4gUHJv Z3Jlc3Mg8J+apwoKKiBTbGlkZSBBY3Rpb24gUHJlY2VkZW5jZTo6CiogU2Vjb25kYXJ5IENvbW1h bmRzOjoKKiBkc2xpZGUtZ290bywgc3RhcnRpbmcgZnJvbSBwb2ludDo6CiogQWZmaWxpYXRlZCBC dWZmZXJzOjoKKiBOb24tR3JhcGhpYyBEaXNwbGF5OjoKKiBJbXByb3BlciBMZXZlbHM6OgoqIENv dW50aW5nIFNsaWRlczo6CiogTm9uLU9yZyBTZXF1ZW5jZXM6OgoKSW5kaWNlcwoKKiBDb21tYW5k IGFuZCBGdW5jdGlvbiBpbmRleDo6CiogQ29uY2VwdCBpbmRleDo6CiogVmFyaWFibGUgaW5kZXg6 OgoKCh8KRmlsZTogZG9jdFZOM0YzLmluZm8sICBOb2RlOiBJbnRyb2R1Y3Rpb24sICBOZXh0OiBH bG9zc2FyeSwgIFByZXY6IFRvcCwgIFVwOiBUb3AKCjEgSW50cm9kdWN0aW9uCioqKioqKioqKioq KioqCgpEc2xpZGUgaXMgZGVzaWduZWQgZm9yIGNvbmR1Y3RpbmcgcHJlc2VudGF0aW9ucyBpbiBF bWFjcy4gIEFic3RyYWN0bHksIGEKcHJlc2VudGF0aW9uIGlzIGEgc2NyaXB0ZWQgc2VxdWVuY2Ug b2YgY29udGVudC4gIE9yZyBtb2RlIGRvY3VtZW50cyBhcmUKdGhlIHByaW1hcnkgbWVhbnMgb2Yg ZW5jb2RpbmcgdGhlc2Ugc2VxdWVuY2VzIGZvciBkc2xpZGUuCgogICBXaGF0IGRzbGlkZSBwcmlt YXJpbHkgYWRkcyB0byBFbWFjcyBhbmQgT3JnIE1vZGU6CgogICDigKIgU2ltcGxpZmllZCB1c2Vy IGludGVyZmFjZSBzdWl0YWJsZSBmb3IgYSBwcmVzZW50YXRpb24gcmVtb3RlCiAgICAgY29udHJv bGxlcgogICDigKIgRGF0YSBtb2RlbCB0aGF0IGFkYXB0cyBFbWFjcyB0byB0aGlzIGludGVyZmFj ZQogICDigKIgTWV0aG9kIG9mIGF0dGFjaGluZyByZXVzYWJsZSwgY29uZmlndXJhYmxlIHByb2dy YW1tZWQgYmVoYXZpb3IgdG8KICAgICBvcmcgbW9kZSBjb250ZW50CiAgIOKAoiBFeHRlbnNpYmxl IGZyYW1ld29yayBmb3IgY3JlYXRpbmcgY3VzdG9tIHByb2dyYW1tZWQgYmVoYXZpb3IKICAg4oCi IFByZXNlbnRlciB0b29scyBzdWNoIGFzIHZpZXdpbmcgaGlkZGVuIGNvbnRlbnQgaW52aXNpYmxl IHRvIHRoZQogICAgIGF1ZGllbmNlCgoqIE1lbnU6CgoqIERlc2lnbiBHb2Fsczo6ICAgICAgICAg ICAgICAgICBUaGluZ3MgSG9wZWZ1bGx5IEFjaGlldmVkCiogU3RyZW5ndGhzOjogICAgICAgICAg ICAgICAgICAgIFdoZW4gRHNsaWRlIGlzIFBlcmZlY3QKCh8KRmlsZTogZG9jdFZOM0YzLmluZm8s ICBOb2RlOiBEZXNpZ24gR29hbHMsICBOZXh0OiBTdHJlbmd0aHMsICBVcDogSW50cm9kdWN0aW9u CgoxLjEgRGVzaWduIEdvYWxzCj09PT09PT09PT09PT09PT0KCkdyYW51bGFyIGNvbmZpZ3VyYWJp bGl0eSB3YXMgdGhlIGZpcnN0IGdvYWwuICBEc2xpZGUncyBwcmVkZWNlc3NvciwK4oCYb3JnLXRy ZWUtc2xpZGXigJksIGNvdWxkIG9ubHkgYmUgY29uZmlndXJlZCBhdCB0aGUgbGV2ZWwgb2YgdGhl IGVudGlyZQpkb2N1bWVudCwgdXNpbmcgY3VzdG9taXplIHZhcmlhYmxlcy4KCiAgIFByb2dyYW1t YWJpbGl0eSBxdWlja2x5IGJlY2FtZSBwcmltYXJ5IG1vdGl2YXRpb24gdG8gZGV2ZWxvcCBkc2xp ZGUKZnVydGhlci4gIE9yZyBiYWJlbCBibG9ja3MgY2FuIGJlIHVzZWQgYXMgc3RlcHMgb2YgYSBk c2xpZGUKcHJlc2VudGF0aW9uLiAgQnkgc2NyaXB0aW5nIEVtYWNzIHZpYSBFbGlzcCB3aXRoaW4g b3JnIGJhYmVsIGJsb2NrcywKYmVjYXVzZSBFbWFjcyBzaXRzIG9uIHRvcCBvZiBhbGwgeW91ciBv dGhlciBwcm9ncmFtbWluZyB0b29scyBhbmQKc3ViLXByb2Nlc3Nlcywgc28gZG9lcyBkc2xpZGUu ICBUaGUgYWN0aW9uIHN5c3RlbSBpcyBhIGZyYW1ld29yayBmb3IKYXR0YWNoaW5nIHJldXNhYmxl LCBjb25maWd1cmFibGUgcHJvZ3JhbW1lZCBiZWhhdmlvciB0byBtdWx0aXBsZQpoZWFkaW5ncy4K CiAgIEhpZ2ggcHJvZHVjdGl2aXR5IHdhcyBhbm90aGVyIGdvYWwuICBXaXRoIGEgZGVjZW50IG9y ZyBjb25maWd1cmF0aW9uLAp1c2UgYmFzaWMgbWFya3VwIHRvIG9idGFpbiBhIGRlY2VudCBwcmVz ZW50YXRpb24uICBPcmcgbW9kZSdzIHByb3BlcnRpZXMKYW5kIGtleXdvcmRzIGFyZSB1c2VkIHRv IGF0dGFjaCBhbmQgY29uZmlndXJlIHJldXNhYmxlIGJlaGF2aW9yIHRvCnNsaWRlcy4gIERzbGlk ZSByZXNwZWN0cyBleHBvcnQgc2V0dGluZ3MsIGFsbG93aW5nIGNvbnRlbnQgdG8gdmFyeQpiZXR3 ZWVuIHByZXNlbnRhdGlvbiBhbmQgZXhwb3J0LiAgWW91IGNhbiB1c2UgdGhlIHByZXNlbnRhdGlv biBvcmcKZG9jdW1lbnQgaXRzZWxmIHRoZSBzYW1lIHdheSB5b3UgdXNlIG90aGVyIG9yZyBkb2N1 bWVudHMsIHRvIHN0b3JlIGFuZApvcmdhbml6ZSBpbmZvcm1hdGlvbi4KCh8KRmlsZTogZG9jdFZO M0YzLmluZm8sICBOb2RlOiBTdHJlbmd0aHMsICBQcmV2OiBEZXNpZ24gR29hbHMsICBVcDogSW50 cm9kdWN0aW9uCgoxLjIgU3RyZW5ndGhzCj09PT09PT09PT09PT0KCkRzbGlkZSBpcyBwYXJ0aWN1 bGFybHkgZ29vZCBmb3IgcHJlc2VudGF0aW9ucyB0aGF0IGFyZSBmb3IgaW50ZXJuYWwgdXNlCm9y IGludGVuZGVkIGZvciBjbG9zZWQgYXVkaWVuY2VzLCB3aGVyZSB0aGUgcG9saXNoIHRoYXQgd291 bGQgYmUKZGlyZWN0ZWQgYXQgZW5kIGNvbnN1bWVycyBpcyB1bm5lZWRlZCBhbmQgY291bGQgZXZl biBiZSBzZWVuIGFzIGFuCmluYXBwcm9wcmlhdGUgZXhwZW5zZSBvZiB0aW1lOgoKICAg4oCiIFRl Y2ggZGVtb3MKICAg4oCiIEVhcmx5IHN0YWdlIHN0YXJ0dXAgcGl0Y2hlcwogICDigKIgQ29uZHVj dGluZyB0ZWFtIG1lZXRpbmdzCgofCkZpbGU6IGRvY3RWTjNGMy5pbmZvLCAgTm9kZTogR2xvc3Nh cnksICBOZXh0OiBDcmVhdGluZywgIFByZXY6IEludHJvZHVjdGlvbiwgIFVwOiBUb3AKCjIgR2xv c3NhcnkKKioqKioqKioqKgoKICAg4oCiIOKAmERlY2vigJk6IGFuIG9iamVjdCB0aGF0IGlzIHVz ZWQgdG8gcmVsYXRlIHRoZSBkaXNwbGF5IGFuZCBiYXNlCiAgICAgYnVmZmVyIGFuZCBpcyB0aGUg cm9vdCBvZiBhbGwgc2VxdWVuY2VzLiAgSXQncyBhbm90aGVyIHdvcmQgZm9yCiAgICAgInByZXNl bnRhdGlvbiIgb3IgUFQuCiAgIOKAoiDigJhTbGlkZeKAmTogYW4gb2JqZWN0IHRoYXQgaW50ZXJw cmV0cyBhbiBvcmcgaGVhZGluZyB0byBoeWRyYXRlIGl0cwogICAgIGFjdGlvbnMKICAg4oCiIOKA mEFjdGlvbuKAmTogYW4gb2JqZWN0IHRoYXQgcmVzcG9uZHMgdG8g4oCYZHNsaWRlLWRlY2stZm9y d2FyZOKAmSBhbmQKICAgICDigJhkc2xpZGUtZGVjay1iYWNrd2FyZOKAmSBjYWxscyBhbmQgaW1w bGVtZW50cyBsaWZlY3ljbGUgbWV0aG9kcyB0bwogICAgIGluaXRpYWxpemUgYW5kIGNsZWFuIHVw IHN0YXRlCiAgICAgICAg4oCiIOKAmFNsaWRlIEFjdGlvbuKAmTogYW4gYWN0aW9uIHN1YmNsYXNz IHRoYXQgaGFuZGxlcyBpbml0aWFsCiAgICAgICAgICBkaXNwbGF5IG9mIHRoZSBzbGlkZSBhbmQg Y3JlYXRpb24gb2YgY2hpbGQgc2xpZGVzIGZyb20KICAgICAgICAgIHN1Yi1oZWFkaW5ncy4KICAg ICAgICDigKIg4oCYU2VjdGlvbiBBY3Rpb25z4oCZOiBhY3Rpb25zIHRoYXQgdHlwaWNhbGx5IGNv bnRyb2wgdGhlIGRpc3BsYXkKICAgICAgICAgIGFuZCBiZWhhdmlvciBvZiBhIGhlYWRpbmcncyBz ZWN0aW9uLCB0aGUgcmVnaW9uIGJldHdlZW4gdGhlCiAgICAgICAgICBoZWFkbGluZSBhbmQgY2hp bGQgaGVhZGluZ3MuCiAgIOKAoiDigJhTdGVw4oCZOiBhIHNpbmdsZSBjYWxsIHRvIOKAmGRzbGlk ZS1kZWNrLWZvd2FyZOKAmSBvcgogICAgIOKAmGRzbGlkZS1kZWNrLWJhY2t3YXJk4oCZLCB1c3Vh bGx5IGRlbGVnYXRlZCBkb3duIHRvIOKAmGRzbGlkZS1mb3J3YXJk4oCZCiAgICAgYW5kIOKAmGRz bGlkZS1iYWNrd2FyZOKAmSBtZXRob2RzCiAgIOKAoiDigJhDb250ZW50c+KAmTogQSB2aWV3IG9m IHRoZSBmb2xkZWQgdG9wLWxldmVsIGhlYWRpbmdzIHRoYXQgaXMgdXNlZAogICAgIGZvciBxdWlj a2x5IG5hdmlnYXRpbmcgYmV0d2VlbiBoZWFkaW5ncyBkdXJpbmcgYSBwcmVzZW50YXRpb24uCiAg IOKAoiDigJhTbGlkZSBCdWZmZXLigJk6IHRoZSBzbGlkZXMgYXJlIHNob3duIGluIGFuIGluZGly ZWN0IGJ1ZmZlciB0aGF0IGlzCiAgICAgY2xvbmVkIGZyb20geW91ciBvcmcgZG9jdW1lbnQgYnVm ZmVyLiAgVGhlIHNvdXJjZSBpcyBjYWxsZWQgdGhlCiAgICAgKmJhc2UgYnVmZmVyKi4gIENoZWNr IGZvciB0aGUg4oCYZGVjazogbXktcHJlc2VudGF0aW9uLm9yZ+KAmSBidWZmZXIKICAgICBuYW1l LgogICAgICAgIOKAoiBJbmRpcmVjdCBidWZmZXIgYW5kIOKAmHNsaWRlLWJ1ZmZlcuKAmSBhcmUg dXNlZCBpbnRlcmNoYW5nZWFibHkKICAgICAgICDigKIgQmFzZSBidWZmZXIgb3Ig4oCYYmFzZS1i dWZmZXLigJkgaXMgdXNlZCBwcmV0dHkgZXhjbHVzaXZlbHkKICAg4oCiIOKAmFN0YXRlZnVsIFNl cXVlbmNl4oCZOiDigJhkc2xpZGUtc3RhdGVmdWwtc2VxdWVuY2XigJkgaXMgYW4gaW50ZXJmYWNl CiAgICAgdGhhdCBvdGhlciBjbGFzc2VzIGltcGxlbWVudCB3aGVuIHRoZXkgd2lsbCByZWNlaXZl IGRlbGVnYXRlZAogICAgIGNvbW1hbmRzIGZyb20gdGhlIHVzZXIuCgoqIE1lbnU6CgoqIE9yZyBN b2RlIFRlcm1zOjogICAgICAgICAgICAgICBPbmVzIFlvdSBNaWdodCBOb3QgS25vdwoKHwpGaWxl OiBkb2N0Vk4zRjMuaW5mbywgIE5vZGU6IE9yZyBNb2RlIFRlcm1zLCAgVXA6IEdsb3NzYXJ5Cgoy LjEgT3JnIE1vZGUgVGVybXMKPT09PT09PT09PT09PT09PT09CgpTZWxlY3Qgb3JnIG1vZGUgdGVy bXMgbW9yZSBmcmVxdWVudGx5IHVzZWQgYnkgZHNsaWRlLiAgRG9uJ3QgbWlzcyAqbm90ZQpPcmcg U3ludGF4IChvcmcpOiAob3JnKU9yZyBTeW50YXguCgogICDigKIg4oCYRWxlbWVudOKAmTogb3Jn IGRvY3VtZW50cyBhcmUgcGFyc2VkIGludG8gZWxlbWVudHMgYW5kIG9iamVjdHMuCiAgICAgSGVh ZGluZ3MsIHBsYWluIGxpc3RzLCBhbmQgYmxvY2tzIGFyZSBleGFtcGxlcyBvZiBlbGVtZW50cy4g IFNlZQogICAgIHRoZSBvcmcgZWxlbWVudCBhcGkKICAgICAoaHR0cHM6Ly9vcmdtb2RlLm9yZy93 b3JnL2Rldi9vcmctZWxlbWVudC1hcGkuaHRtbCkgZG9jdW1lbnRhdGlvbi4KICAgICBEc2xpZGUg bWFrZXMgaGVhdnkgdXNlIG9mIG9yZydzIGVsZW1lbnQgcGFyc2VyIHRvIGltcGxlbWVudCBpdHMK ICAgICBmZWF0dXJlcy4KICAg4oCiIOKAmEtleXdvcmTigJk6IEEgc2luZ2xlIOKAmCMra2V5d29y ZF9zdHlsZTrigJkgbGluZSB1c2VkIHRvIHNwZWNpZnkgc29tZQogICAgIG9wdGlvbgogICDigKIg 4oCYQWZmaWxhdGVkIGtleXdvcmTigJk6IEEg4oCYIythdHRyX2tleXdvcmRfc3R5bGU64oCZIGxp bmUgdGhhdCBkaXJlY3RseQogICAgIHByZWNlZWRzIGFuIGVsZW1lbnQgYW5kIGlzIHVzZWQgdG8g YWRkIG1ldGFkYXRhIHRvIGFyYml0cmFyeSBvcmcKICAgICBlbGVtZW50cwogICDigKIg4oCYUHJv cGVydHnigJk6IE1ldGEgZGF0YSBhdHRhY2hlZCB0byBoZWFkaW5ncy4gIFNlZSAqbm90ZSBQcm9w ZXJ0eQogICAgIFN5bnRheCAob3JnKTogKG9yZylQcm9wZXJ0eSBTeW50YXguCgofCkZpbGU6IGRv Y3RWTjNGMy5pbmZvLCAgTm9kZTogQ3JlYXRpbmcsICBOZXh0OiBQcmVzZW50aW5nLCAgUHJldjog R2xvc3NhcnksICBVcDogVG9wCgozIENyZWF0aW5nCioqKioqKioqKioKCk1ha2luZyBhbiBvcmcg ZG9jdW1lbnQgaW50byBhIHByZXNlbnRhdGlvbi4KCiogTWVudToKCiogQWN0aW9uczo6ICAgICAg ICAgICAgICAgICAgICAgIE92ZXJ2aWV3CiogQWRkaW5nIEFjdGlvbnM6OiAgICAgICAgICAgICAg IE1ha2luZyBDb250ZW50IERvIFN0dWZmCiogQWN0aW9uIEFyZ3VtZW50czo6ICAgICAgICAgICAg IFR3ZWFraW5nIEJlaGF2aW9yCiogQW5ub3RhdGluZyBFbGVtZW50czo6ICAgICAgICAgIFRlbGxp bmcgQWN0aW9ucyBXaGF0IGFuZCBXaGVyZQoqIEJhYmVsIFNjcmlwdGluZzo6ICAgICAgICAgICAg ICBGdWxseSBQcm9ncmFtbWFibGUgU3RlcHMKKiBIaWRpbmcgTWFya3VwOjogICAgICAgICAgICAg ICAgTm8gTW9yZSBVZ2x5CiogRmlsdGVyaW5nIEhlYWRpbmdzOjogICAgICAgICAgIEl0J3MgTm90 IERvbmUgWWV0CiogSGVhZGVyIEtleXdvcmRzOjogICAgICAgICAgICAgIFRpdGxlLCBBdXRob3Is IEVtYWlsCiogRmlsZSBMb2NhbCBWYXJpYWJsZXM6OiAgICAgICAgIERvbid0IEZvcmdldCBGcmVl IEx1bmNoCgofCkZpbGU6IGRvY3RWTjNGMy5pbmZvLCAgTm9kZTogQWN0aW9ucywgIE5leHQ6IEFk ZGluZyBBY3Rpb25zLCAgVXA6IENyZWF0aW5nCgozLjEgQWN0aW9ucwo9PT09PT09PT09PQoKQnkg ZGVmYXVsdCwgeW91IGp1c3QgZ2V0IG9uZSBzbGlkZSBwZXIgaGVhZGluZywgYSBoZWFkZXIsIGFu ZCBzb21lCmFuaW1hdGlvbi4gIFRoaXMgaXMgbm90IHZlcnkgZXhjaXRpbmcuICBZb3UgbmVlZCB0 byBhZGQgYWN0aW9ucyB0bwpzbGlkZXMgdG8gY29uc3VtZSB0aGVpciBzZWN0aW9uIGNvbnRlbnQg aW4gYSBtb3JlIGVuZ2FnaW5nIHdheS4KCiAgIFRoZXJlIGFyZSB0d28ga2luZHMgb2YgYWN0aW9u czoKICAg4oCiIOKAmFNsaWRlIGFjdGlvbnPigJk6IG1vc3RseSByZXNwb25zaWJsZSBmb3IgbmFy cm93aW5nIHRvIGEgc2xpZGUgYW5kCiAgICAgdGhlbiBoYW5kbGluZyB0aGUgY2hpbGQgaGVhZGlu Z3MsIGVpdGhlciBpbmxpbmUgb3IgYXMgc2VwYXJhdGUKICAgICBzbGlkZXMKICAg4oCiIOKAmFNl Y3Rpb24gYWN0aW9uc+KAmTogd29yayBvbiB0aGUgY29udGVudCBpbiB0aGUgaGVhZGluZydzIHNl Y3Rpb24uCgogICBUbyBicm93c2UgYWxsIGFjdGlvbnMsIGJlY2F1c2UgdGhleSBhcmUgYWxsIEVJ RUlPIGNsYXNzZXMsIHlvdSBjYW4KdXNlIOKAmGVpZWlvLWJyb3dzZeKAmSBhbmQgc2VlIHRoZSBh Y3Rpb25zIGRlc2NlbmQgZnJvbSDigJhkc2xpZGUtYWN0aW9u4oCZLgoKICAgICArLS1kc2xpZGUt c3RhdGVmdWwtc2VxdWVuY2UKICAgICAgICAgICstLWRzbGlkZS1hY3Rpb24KICAgICAgICAgICAg ICAgKy0tZHNsaWRlLWFjdGlvbi1wcm9wZXJ0aXplCiAgICAgICAgICAgICAgICstLWRzbGlkZS1h Y3Rpb24taW1hZ2UKICAgICAgICAgICAgICAgKy0tZHNsaWRlLWFjdGlvbi1iYWJlbAogICAgICAg ICAgICAgICArLS1kc2xpZGUtYWN0aW9uLWl0ZW0tcmV2ZWFsCiAgICAgICAgICAgICAgICstLWRz bGlkZS1hY3Rpb24taGlkZS1tYXJrdXAKICAgICAgICAgICAgICAgKy0tZHNsaWRlLXNsaWRlLWFj dGlvbgogICAgICAgICAgICAgICAgICAgICstLWRzbGlkZS1zbGlkZS1hY3Rpb24tZXZlcnktY2hp bGQKICAgICAgICAgICAgICAgICAgICArLS1kc2xpZGUtc2xpZGUtYWN0aW9uLWlubGluZQogICAg ICAgICAgICAgICAgICAgICstLWRzbGlkZS1zbGlkZS1hY3Rpb24tY2hpbGQKICAgICAgICAgICAg ICAgICAgICArLS1kc2xpZGUtc2xpZGUtYWN0aW9uLWZsYXQKCh8KRmlsZTogZG9jdFZOM0YzLmlu Zm8sICBOb2RlOiBBZGRpbmcgQWN0aW9ucywgIE5leHQ6IEFjdGlvbiBBcmd1bWVudHMsICBQcmV2 OiBBY3Rpb25zLCAgVXA6IENyZWF0aW5nCgozLjIgQWRkaW5nIEFjdGlvbnMKPT09PT09PT09PT09 PT09PT09CgpCeSBkZWZhdWx0LCBldmVyeSBzbGlkZSBoYXMgdHdvIGFjdGlvbnMsIGNvbmZpZ3Vy YWJsZSBpbgrigJhkc2xpZGUtZGVmYXVsdC1hY3Rpb25z4oCZOgogICDigKIg4oCYZHNsaWRlLWFj dGlvbi1wcm9wZXJ0aXpl4oCZIGZvciBhZGRpbmcgdGV4dCBwcm9wZXJ0aWVzIHRvIGFyYml0cmFy eQogICAgIGVsZW1lbnRzCiAgIOKAoiDigJhkc2xpZGUtYWN0aW9uLWhpZGUtbWFya3Vw4oCZIHRv IGhpZGUga2V5d29yZHMsIHRvZG8gc3RhdGVzLCBhbmQKICAgICB0YWdzLCBhbGxvd2luZyB5b3Ug dG8gaGF2ZSB0aGVzZSB0aGluZ3MgaW4geW91ciBzb3VyY2Ugd2l0aG91dCB0aGVtCiAgICAgY2x1 dHRlcmluZyB0aGUgcHJlc2VudGF0aW9uCgogICBBY3Rpb25zIG11c3QgYmUgYWRkZWQgdG8gYSBz bGlkZSB1c2luZyB0aGUgc2xpZGUncyBwcm9wZXJ0eSBkcmF3ZXIuCgogICDigKIg4oCYRFNMSURF X1NMSURFX0FDVElPTuKAmTogVXN1YWxseSBuYXJyb3dzIHRvIHRoZSBzbGlkZSBhbmQgY3JlYXRl cwogICAgIGNoaWxkcmVuIGZyb20gY2hpbGQgaGVhZGluZ3MuICBMaWZlY3ljbGUgZW5jbG9zZXMg dGhlIHNlY3Rpb24KICAgICBhY3Rpb25zLgogICDigKIg4oCYRFNMSURFX0FDVElPTlM64oCZIE1v c3QgY29tbW9ubHkgY3VzdG9taXplZC4gIFlvdSBjYW4gbGlzdCBtdWx0aXBsZQogICAgIGFjdGlv bnMuICBFYWNoIG9uZSB3aWxsIHN0ZXAgdGhyb3VnaCBpdHMgZm9yd2FyZCBhbmQgYmFja3dhcmQK ICAgICBzdGVwcy4KCiAgICAgKiBGdWxsIFNjcmVlbiBJbWFnZXMKICAgICA6UFJPUEVSVElFUzoK ICAgICA6RFNMSURFX0FDVElPTlM6IGRzbGlkZS1hY3Rpb24taW1hZ2VzCiAgICAgOkVORDoKICAg ICAjK2F0dHJfaHRtbDogOndpZHRoIDUwJQogICAgIFtbLi9pbWFnZXMvZW1hY3NlbjQuanBlZ11d IFtbLi9pbWFnZXMvYmVmb3JlLWdvb2dsZTMuanBlZ11dCgofCkZpbGU6IGRvY3RWTjNGMy5pbmZv LCAgTm9kZTogQWN0aW9uIEFyZ3VtZW50cywgIE5leHQ6IEFubm90YXRpbmcgRWxlbWVudHMsICBQ cmV2OiBBZGRpbmcgQWN0aW9ucywgIFVwOiBDcmVhdGluZwoKMy4zIEFjdGlvbiBBcmd1bWVudHMK PT09PT09PT09PT09PT09PT09PT0KCk1hbnkgYWN0aW9ucyB1bmRlcnN0YW5kIGFyZ3VtZW50cywg YWxsb3dpbmcgdHVuaW5nIG9mIHNpbWlsYXIgYmVoYXZpb3JzCmZyb20gdGhlIHNhbWUgY2xhc3Mu CgogICBUbyB2aWV3IGFuIGFjdGlvbidzIGFyZ3VtZW50cywgY2FsbCDigJhkZXNjcmliZS1zeW1i b2zigJkgb24gaXQuICBBbnkKc2xvdCBkZWZpbml0aW9uIHVzdWFsbHkgaGFzIHRoZSBzYW1lIOKA mDppbml0YXJn4oCZIGFuZCB3aWxsIGJlIHVuZGVyc3Rvb2QKd2hlbiBhZGRlZCBhcyBhIHBsaXN0 LXN0eWxlIGFyZ3VtZW50LgoKICAgQ29uZmlndXJpbmcgdGhlIHNsb3QgaXMgZG9uZSBieSBhZGRp bmcgcGxpc3Qtc3R5bGUgcHJvcGVydGllcyBhZnRlcgp0aGUgY2xhc3MgbmFtZToKCiAgICAgOlBS T1BFUlRJRVM6CiAgICAgOkRTTElERV9BQ1RJT05TOiBkc2xpZGUtYWN0aW9uLWl0ZW0tcmV2ZWFs IDppbmxpbmUgdAogICAgIDpFTkQ6CgogICBZb3UgY2FuIGFsc28gdXNlICJwcm9wZXJ0eSsiIHN5 bnRheCB0byBhZGQgdG8gYSBwcm9wZXJ0eSwgYW5kIHRoZXNlCmFjY2VwdCBwbGlzdCBhcmd1bWVu dHMgdG9vOgoKICAgICA6UFJPUEVSVElFUzoKICAgICA6RFNMSURFX0FDVElPTlM6IGRzbGlkZS1h Y3Rpb24tYmFiZWwKICAgICA6RFNMSURFX0FDVElPTlMrOiBkc2xpZGUtYWN0aW9uLWltYWdlcyA6 ZnVsbC1mcmFtZSB0CiAgICAgOkVORDoKCiAgIPCfmqcgVGhlIGN1cnJlbnQgcGxpc3QgcmVhZCBp bXBsZW1lbnRhdGlvbiBzcGxpdHMgdGhlIHN0cmluZyByYXRoZXIKdGhhbiB1c2luZyDigJhyZWFk LXN0cmluZ+KAmSBhbmQgaXMgdGhlcmVmb3JlIG5vdCBzbWFydCBlbm91Z2ggdG8gcGFyc2UKbGlz dHMgYXMgYXJndW1lbnRzLiAgSG93ZXZlciDigJhkc2xpZGUtYWN0aW9uLXByb3BlcnRpemXigJkg ZGVtb25zdHJhdGVzCmRvaW5nIHRoaXMgY29ycmVjdGx5IGFuZCBzaG93cyB0aGF0IGl0IHdpbGwg YmUgcG9zc2libGUgaWYgbmVlZGVkLgoKHwpGaWxlOiBkb2N0Vk4zRjMuaW5mbywgIE5vZGU6IEFu bm90YXRpbmcgRWxlbWVudHMsICBOZXh0OiBCYWJlbCBTY3JpcHRpbmcsICBQcmV2OiBBY3Rpb24g QXJndW1lbnRzLCAgVXA6IENyZWF0aW5nCgozLjQgQW5ub3RhdGluZyBFbGVtZW50cwo9PT09PT09 PT09PT09PT09PT09PT09PQoKU29tZSBhY3Rpb25zLCBzdWNoIGFzIOKAmGRzbGlkZS1hY3Rpb24t cHJvcGVydGl6ZeKAmSwgY2FuJ3QgZGVjaWRlIHdoaWNoCmVsZW1lbnRzIHRvIG9wZXJhdGUgb24g b3Igd2hhdCB0byBkbyB3aXRoIHRoZSBlbGVtZW50LiAgWW91IGNhbiBhZGQgc29tZQptZXRhIGRh dGEgdG8gYW4gZWxlbWVudCB1c2luZyBhbiAqYWZmaWxpYXRlZCBrZXl3b3JkKi4KCiAgIOKaoO+4 jyBJZiB5b3UgYXJlIGV4dGVuZGluZyBhbiBhY3Rpb24gYW5kIHdhbnQgdG8gY3JlYXRlIHlvdXIg b3duCmFmZmlsaWF0ZWQga2V5d29yZCwgdGhleSBtdXN0IHN0YXJ0IHdpdGgg4oCYYXR0cuKAmSBv ciBlbHNlIHRoZSBwYXJzZXIgd2lsbApub3QgY29uc2lkZXIgdGhlbSBhZmZpbGlhdGVkIQoKICAg ICAqIEZhbmN5IFRleHQKICAgICA6UFJPUEVSVElFUzoKICAgICA6RFNMSURFX0FDVElPTlM6IGRz bGlkZS1hY3Rpb24tcHJvcGVydGl6ZQogICAgIDpFTkQ6CiAgICAgQWRkIHRleHQgcHJvcGVydGll cyB0byBhbiBlbGVtZW50IHVzaW5nIHRoZSA9YXR0cl9kc2xpZGVfcHJvcGVydGl6ZT0gYWZmaWxp YXRlZCBrZXl3b3JkLiAgTm8gcXVvdGluZyBpcyByZXF1aXJlZC4gIExpc3RzIHdpbGwgYmUgaW50 ZXJwcmV0ZWQgYXMgc3VjaC4KCiAgICAgIythdHRyX2RzbGlkZV9wcm9wZXJ0aXplOiBmYWNlICg6 YmFja2dyb3VuZCAiI2RkZGRmZiIgOmZvcmVncm91bmQgIiMwMDAwMDAiIDp3ZWlnaHQgYm9sZCA6 aGVpZ2h0IDIuMCkKICAgICBUaGlzIGlzIHNvbWUgZmFuY3kgdGV4dAoKHwpGaWxlOiBkb2N0Vk4z RjMuaW5mbywgIE5vZGU6IEJhYmVsIFNjcmlwdGluZywgIE5leHQ6IEhpZGluZyBNYXJrdXAsICBQ cmV2OiBBbm5vdGF0aW5nIEVsZW1lbnRzLCAgVXA6IENyZWF0aW5nCgozLjUgQmFiZWwgU2NyaXB0 aW5nCj09PT09PT09PT09PT09PT09PT0KCllvdSBjYW4gd3JpdGUgY3VzdG9tIHNjcmlwdHMgaW50 byB5b3VyIHByZXNlbnRhdGlvbiBhcyBPcmcgQmFiZWwgYmxvY2tzLgpUaGVzZSBjYW4gYmUgZXhl Y3V0ZWQgd2l0aCB0aGUg4oCYZHNsaWRlLWFjdGlvbi1iYWJlbOKAmSBhY3Rpb24uCgogICBCeSBk ZWZhdWx0IGJsb2NrcyBvbmx5IGV4ZWN1dGUgZ29pbmcgZm9yd2FyZCwgb25lIGJsb2NrIHBlciBz dGVwLgpZb3UgbmVlZCB0byBsYWJlbCB5b3VyIGJsb2NrcyB3aXRoIGxpZmVjeWNsZSBtZXRob2Rz IGlmIHlvdSB3YW50IHRvIGJlCmFibGUgdG8gZ28gZm9yd2FyZHMgYW5kIGJhY2t3YXJkcyBvciBl eGVjdXRlIHRoZW0gYXQgdGhlIGJlZ2lubmluZyBvcgplbmQgb2YgYSBzbGlkZS4gIFNlZSB0aGUg 4oCYZHNsaWRlLWFjdGlvbi1iYWJlbOKAmSBjbGFzcyBhbmQgZXhhbXBsZXMgaW4KLi90ZXN0L2Rl bW8ub3JnICguL3Rlc3QvZGVtby5vcmcpLgoKICAgVGhlIOKAmCMrYXR0cl9kc2xpZGU64oCZIGFm ZmlsaWF0ZWQga2V5d29yZCBpcyB1c2VkIHRvIGNvbmZpZ3VyZSB3aGljaAptZXRob2RzIHdpbGwg cnVuIHRoZSBibG9jay4gIEJsb2NrIGxhYmVscyB0aGF0IGFyZSB1bmRlcnN0b29kOgoKICAg4oCi IOKAmGJlZ2lu4oCZIGFuZCDigJhlbmTigJkgYXJlIHJ1biB3aGVuIHRoZSBzbGlkZSBpcyBpbnN0 YW50aWF0ZWQsIGdvaW5nCiAgICAgZm9yd2FyZCBhbmQgYmFja3dhcmQgcmVzcGVjdGl2ZWx5LiAg WW91IGNhbiBoYXZlIHNldmVyYWwgYmxvY2tzCiAgICAgd2l0aCB0aGVzZSBtZXRob2RzLCBhbmQg dGhleSB3aWxsIGJlIHJ1biBmcm9tICp0b3AtdG8tYm90dG9tKgogICAgIGFsd2F5cywgbWFraW5n IGl0IGVhc2llciB0byByZS11c2UgY29kZSB1c3VhbGx5LgoKICAg4oCiIOKAmGZpbmFs4oCZIGlz IG9ubHkgY2FsbGVkIHdoZW4gbm8gcHJvZ3Jlc3MgY2FuIGJlIG1hZGUgb3IgaWYgdGhlCiAgICAg cHJlc2VudGF0aW9uIGlzIHN0b3BwZWQuCgogICDigKIg4oCYZm9yd2FyZOKAmSBhbmQg4oCYYmFj a3dhcmTigJkgYXJlIHNlbGYtZXhwbGFuYXRvcnkuICBQb3NpdGlvbiB5b3VyCiAgICAg4oCYYmFj a3dhcmTigJkgYmxvY2tzICphYm92ZSogYW55IGJsb2NrIHRoYXQgdGhleSB1bmRvCgogICDigKIg 4oCYYm90aOKAmSBydW5zIGVpdGhlciBkaXJlY3Rpb24uICBJdCB3aWxsIG5vdCByZXBlYXQgaW4g cGxhY2Ugd2hlbgogICAgIHJldmVyc2luZy4gIFVzZSBzZXBlcmF0ZSDigJhmb3J3YXJk4oCZIGFu ZCDigJhiYWNrd2FyZOKAmSBibG9ja3MgZm9yIHRoYXQg8J+SoQoKICAgVGhlIGJhYmVsIGFjdGlv biBhbHNvIHVuZGVyc3RhbmRzIHJlZ3VsYXIgYmFiZWwgb3B0aW9ucyBzdWNoIGFzCuKAmDpleHBv cnRz4oCZIGFuZCDigJg6cmVzdWx0c+KAmS4gIEV4cG9ydHMgbm9uZSB3aWxsIG1ha2UgdGhlIGJs b2NrIGludmlzaWJsZS4KUmVzdWx0cyBjb250cm9scyB3aGV0aGVyIHJlc3VsdHMgd2lsbCBiZSBw cmludGVkIGludG8gdGhlIGJ1ZmZlciBvciBub3QuCgoqIE1lbnU6CgoqIFN0ZXAgQ2FsbGJhY2tz OjoKCh8KRmlsZTogZG9jdFZOM0YzLmluZm8sICBOb2RlOiBTdGVwIENhbGxiYWNrcywgIFVwOiBC YWJlbCBTY3JpcHRpbmcKCjMuNS4xIFN0ZXAgQ2FsbGJhY2tzCi0tLS0tLS0tLS0tLS0tLS0tLS0t CgpTZWUg4oCYZHNsaWRlLXB1c2gtc3RlcOKAmSBmb3IgaW5zZXJ0aW5nIGFyYml0cmFyeSBjYWxs YmFja3MgdGhhdCBjYW4KZnVuY3Rpb24gYXMgc3RlcHMuICBVbmxlc3MgeW91ciBhY3Rpb24gcGVy Zm9ybXMgc3RhdGUgdHJhY2tpbmcgdG8gZGVjaWRlCndoZW4gdG8gY29uc3VtZSDigJhkc2xpZGUt ZGVjay1mb3J3YXJk4oCZIGFuZCDigJhkc2xpZGUtZGVjay1iYWNrd2FyZOKAmSBpdHNlbGYsCmEg Y2FsbGJhY2sgbWF5IGJlIGVhc2llci4gIFVzaW5nIOKAmGRzbGlkZS1wdXNoLXN0ZXDigJkgaXMg YWxzbyBvbmUgd2F5IHRvCm9wdGlvbmFsbHkgYWRkIGEgc3RlcCBjYWxsYmFjayBmcm9tIGEgYmFi ZWwgYmxvY2suCgofCkZpbGU6IGRvY3RWTjNGMy5pbmZvLCAgTm9kZTogSGlkaW5nIE1hcmt1cCwg IE5leHQ6IEZpbHRlcmluZyBIZWFkaW5ncywgIFByZXY6IEJhYmVsIFNjcmlwdGluZywgIFVwOiBD cmVhdGluZwoKMy42IEhpZGluZyBNYXJrdXAKPT09PT09PT09PT09PT09PT0KCkRzbGlkZSB1c2Vz IGEgbG90IG9mIG1hcmt1cCB0aGF0IHdvdWxkIG5vdCBsb29rIGdvb2QgaW4gYSBwcmVzZW50YXRp b24uCkl0IGFsc28gZmlsdGVycyBpdCBieSBkZWZhdWx0IHVzaW5nIOKAmGRzbGlkZS1hY3Rpb24t aGlkZS1tYXJrdXDigJkuICBZb3UKY2FuIGFkanVzdCB0aGUgdHlwZXMgdXNpbmcg4oCYZHNsaWRl LWhpZGUtbWFya3VwLXR5cGVz4oCZCgoqIE1lbnU6CgoqIEhpZGluZyBUb2RvcyBhbmQgVGFnczo6 CgofCkZpbGU6IGRvY3RWTjNGMy5pbmZvLCAgTm9kZTogSGlkaW5nIFRvZG9zIGFuZCBUYWdzLCAg VXA6IEhpZGluZyBNYXJrdXAKCjMuNi4xIEhpZGluZyBUb2RvcyBhbmQgVGFncwotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KCuKAmGRzbGlkZS1hY3Rpb24taGlkZS1tYXJrdXDigJkgd2lsbCBh bHNvIGhpZGUgdG9kb3MgYW5kIHRhZ3MuICBZb3UgY2FuCm1vZGlmaXkgdGhpcyB3aXRoIOKAmGRz bGlkZS1oaWRlLXRvZG/igJkgYW5kIOKAmGRzbGlkZS1oaWRlLXRhZ3PigJkuCgofCkZpbGU6IGRv Y3RWTjNGMy5pbmZvLCAgTm9kZTogRmlsdGVyaW5nIEhlYWRpbmdzLCAgTmV4dDogSGVhZGVyIEtl eXdvcmRzLCAgUHJldjogSGlkaW5nIE1hcmt1cCwgIFVwOiBDcmVhdGluZwoKMy43IEZpbHRlcmlu ZyBIZWFkaW5ncwo9PT09PT09PT09PT09PT09PT09PT09CgogICDigKIgQW55IGhlYWRpbmcgd2l0 aCDigJhDT01NRU5U4oCZIGRpcmVjdGx5IGFmdGVyIHRoZSBzdGFycyB3aWxsIGJlIHNraXBwZWQK ICAg4oCiIEFueSBoZWFkaW5nIHdpdGggdGhlIOKAmDpub3NsaWRlOuKAmSBvciDigJg6bm9leHBv cnQ64oCZIHRhZ3Mgd2lsbCBiZQogICAgIHNraXBwZWQKCiAgIFVzZSB0aGlzIHdoZW4geW91ciBo ZWFkaW5ncyBhcmUgd29yay1pbi1wcm9ncmVzcyBhbmQgeW91IHJ1biBvdXQgb2YKdGltZSBvbiBG cmlkYXkgYmVmb3JlIHRoZSBmZWF0dXJlIGRlbW8gbWVldGluZy4gIEhhdmUgc29tZSBjb250ZW50 IHRoYXQKaXMgdXNlZCBvbmx5IGluIHNvbWUgZXhwb3J0cz8gIFVzZSDigJg6bm9zbGlkZTrigJku CgofCkZpbGU6IGRvY3RWTjNGMy5pbmZvLCAgTm9kZTogSGVhZGVyIEtleXdvcmRzLCAgTmV4dDog RmlsZSBMb2NhbCBWYXJpYWJsZXMsICBQcmV2OiBGaWx0ZXJpbmcgSGVhZGluZ3MsICBVcDogQ3Jl YXRpbmcKCjMuOCBIZWFkZXIgS2V5d29yZHMKPT09PT09PT09PT09PT09PT09PQoKSWYg4oCYZHNs aWRlLWhlYWRlcuKAmSBpcyBjb25maWd1cmVkLCB0aGUga2V5d29yZHMgZm9yIHRoZSBkb2N1bWVu dCB0aXRsZSwKZW1haWwsIGFuZCBhdXRob3IgZXRjIHdpbGwgYmUgdXNlZCB0byBnZW5lcmF0ZSBh biBva2F5IGhlYWRlci4KCiAgICAgIyssdGl0bGU6ICAgICAgICBEb21haW4gU3BlY2lmaWMgc0xJ REVzCiAgICAgIythdXRob3I6ICAgICAgICBQb3NpdHJvbgogICAgICMrZW1haWw6ICAgICAgICBj b250YWN0QHBvc2l0cm9uLnNvbHV0aW9ucwoKHwpGaWxlOiBkb2N0Vk4zRjMuaW5mbywgIE5vZGU6 IEZpbGUgTG9jYWwgVmFyaWFibGVzLCAgUHJldjogSGVhZGVyIEtleXdvcmRzLCAgVXA6IENyZWF0 aW5nCgozLjkgRmlsZSBMb2NhbCBWYXJpYWJsZXMKPT09PT09PT09PT09PT09PT09PT09PT09CgpE b24ndCBmb3JnZXQgdGhhdCBpZiB5b3UgbmVlZCBhIGN1c3RvbWl6ZSB2YXJpYWJsZSBvbmx5IHNl dCBpbiBhCnBhcnRpY3VsYXIgcHJlc2VudGF0aW9uLCB5b3UgY2FuIHVzZSBmaWxlIGxvY2FsIHZh cmlhYmxlcy4gIE5vdCBldmVyeQpzZXR0aW5nIG5lZWRzIGEga2V5d29yZCBvciBiYWJlbCBibG9j ayBpbnRlZ3JhdGlvbi4KCiAgICAgIyBMb2NhbCBWYXJpYWJsZXM6CiAgICAgIyBkc2xpZGUtaGVh ZGVyOiBuaWwKICAgICAjIEVuZDoKCh8KRmlsZTogZG9jdFZOM0YzLmluZm8sICBOb2RlOiBQcmVz ZW50aW5nLCAgTmV4dDogQ29uZmlndXJpbmcsICBQcmV2OiBDcmVhdGluZywgIFVwOiBUb3AKCjQg UHJlc2VudGluZwoqKioqKioqKioqKioKCkhvdyB0byBjb250cm9sIGFuZCB2aWV3IHlvdXIgcHJl c2VudGF0aW9uLgoKKiBNZW51OgoKKiBUd28gQnV0dG9uIEludGVyZmFjZTo6ICAgICAgICAgSXRz IEFsbCBGb3J3YXJkcyBhbmQgQmFja3dhcmRzCiogQ29udGVudHMgSW50ZXJmYWNlOjogICAgICAg ICAgIE5hdmlnYXRpbmcgRmFzdGVyCiogTmFycmF0aW5nOjogICAgICAgICAgICAgICAgICAgIEFu ZCBEZWJ1Z2dpbmcgTGl2ZQoqIEN1cnNvciBWaXNpYmlsaXR5OjoKCh8KRmlsZTogZG9jdFZOM0Yz LmluZm8sICBOb2RlOiBUd28gQnV0dG9uIEludGVyZmFjZSwgIE5leHQ6IENvbnRlbnRzIEludGVy ZmFjZSwgIFVwOiBQcmVzZW50aW5nCgo0LjEgVHdvIEJ1dHRvbiBJbnRlcmZhY2UKPT09PT09PT09 PT09PT09PT09PT09PT09CgpQcmVzZW50YXRpb25zIHRlbmQgdG8gYmUgb3JnYW5pemVkIGludG8g YSBzY3JpcHRlZCBsaW5lYXIgc2VxdWVuY2UuICBXZQp3YW50IHRvIGNvbnRyb2wgdGhlIGVudGly ZSBwcmVzZW50YXRpb24gc2VxdWVuY2UgbW9zdGx5IHdpdGggdHdvCmJ1dHRvbnMsIGZvcndhcmRz IGFuZCBiYWNrd2FyZHMuCgogICBUaGUgY29udHJvbGxlcnMgZm9yIHByZXNlbnRpbmcgdXN1YWxs eSBoYXZlIHZlcnkgZmV3IGJ1dHRvbnMuICBEc2xpZGUKd2FzIGRlc2lnbmVkIHdpdGggdGhpcyB1 c2FnZSBwYXR0ZXJuIGluIG1pbmQgYW5kIGNhbiBtb3N0bHkgYmUKY29udHJvbGxlZCBieSB0d28g Y29tbWFuZHMuCgogICDigKIg4oCYZHNsaWRlLWRlY2stZm9yd2FyZOKAmQogICDigKIg4oCYZHNs aWRlLWRlY2stYmFja3dhcmTigJkKCiAgIE1hbnkgY29udHJvbGxlcnMgYWxzbyBoYXZlIGEgInBs YXkiIGJ1dHRvbiBvciBzaW1pbGFyLiAgSXQncwpyZWNvbW1lbmRlZCB0byBtYXAgdGhpcyB0byDi gJhkc2xpZGUtZGVjay1zdGFydOKAmS4KCiAgIPCfmqcgSXQgaXMgaW50ZW5kZWQgdG8gb3Zlcmxv YWQg4oCYZHNsaWRlLWRlY2stc3RhcnTigJkgZnVydGhlciB0bwppbXBsZW1lbnQgInNlY29uZGFy eSIgYWN0aW9ucyB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgbm9uLWxpbmVhcmx5LgoKICAgVGhlcmUg aXMgbGlrZWx5IG5vIGdvb2QgcGxhY2UgdG8gYmluZCDigJhkc2xpZGUtZGVjay1zdG9w4oCZLCBi dXQgaXQncwpub3QgY3JpdGljYWwuICBZb3UgY2FuIGRvIGV2ZXJ5dGhpbmcgd2l0aCBqdXN0IHRo cmVlIGJ1dHRvbnMuCgofCkZpbGU6IGRvY3RWTjNGMy5pbmZvLCAgTm9kZTogQ29udGVudHMgSW50 ZXJmYWNlLCAgTmV4dDogTmFycmF0aW5nLCAgUHJldjogVHdvIEJ1dHRvbiBJbnRlcmZhY2UsICBV cDogUHJlc2VudGluZwoKNC4yIENvbnRlbnRzIEludGVyZmFjZQo9PT09PT09PT09PT09PT09PT09 PT09CgpOYXZpZ2F0ZSB5b3VyIHByZXNlbnRhdGlvbiBmYXN0ZXIgd2hlbiBhbnN3ZXJpbmcgcXVl c3Rpb25zLiAgVGhlCmNvbnRlbnRzIGludGVyZmFjZSBpcyBhIHZpZXcgb2YgdG9wLWxldmVsIGhl YWRpbmdzLiAgSXQgb3ZlcmxvYWRzIHRoZQpwcmVzZW50YXRpb24gY29udHJvbHMgdG8gbmF2aWdh dGUuCgogICBUbyBlbnRlciB0aGUgY29udGVudHMsIGNhbGwg4oCYZHNsaWRlLWRlY2stc3RhcnTi gJkgd2hlbiBhIHByZXNlbnRhdGlvbgppcyBhbHJlYWR5IGFjdGl2ZS4KCiAgIOKAoiDigJhkc2xp ZGUtZGVjay1zdGFydOKAmSB3aWxsIHJlc3VtZSB0aGUgcHJlc2VudGF0aW9uIGF0IHRoYXQgaGVh ZGluZwogICDigKIg4oCYZHNsaWRlLWRlY2stc3RvcOKAmSB3aWxsIHNpbWlsYXJseSBleGl0IHRo ZSBjb250ZW50cyB2aWV3CiAgIOKAoiDigJhkc2xpZGUtZGVjay1mb3J3YXJk4oCZIGFuZCDigJhk c2xpZGUtZGVjay1iYWNrd2FyZOKAmSBtb3ZlIGJldHdlZW4gdG9wCiAgICAgbGV2ZWwgaGVhZGlu Z3MuCgofCkZpbGU6IGRvY3RWTjNGMy5pbmZvLCAgTm9kZTogTmFycmF0aW5nLCAgTmV4dDogQ3Vy c29yIFZpc2liaWxpdHksICBQcmV2OiBDb250ZW50cyBJbnRlcmZhY2UsICBVcDogUHJlc2VudGlu ZwoKNC4zIE5hcnJhdGluZwo9PT09PT09PT09PT09CgpUaGUgcHJlc2VudGF0aW9uIHlvdSBzZWUg aXMgYSBjbG9uZWQgKm5vdGUgaW5kaXJlY3QgYnVmZmVyOgooZWxpc3ApSW5kaXJlY3QgQnVmZmVy cy4gb2YgeW91ciBvcmcgbW9kZSBidWZmZXIuICBUaGUgRWxpc3Agc3RhdGUgYW5kCm92ZXJsYXlz IGFyZSBpbmRlcGVuZGVudC4gIFRoZXJlIGFyZSB0d28ga2V5IGFkdmFudGFnZXM6CgogICDigKIg QW55IHN0YXRlIHlvdSBjcmVhdGUgaW4gdGhlIHByZXNlbnRhdGlvbiB3aWxsIG5vdCBwb2xsdXRl IHRoZSBvcmcKICAgICBtb2RlIGJ1ZmZlciB5b3UgYXJlIGVkaXRpbmcKICAg4oCiIFdlIGNhbiBk aXNwbGF5IHRoZSBzb3VyY2UgZm9yIHRoZSBwcmVzZW50YXRpb24gc2ltdWx0YW5lb3VzbHkKCiAg IOKAmGRzbGlkZS1kZWNrLWRldmVsb3DigJkgd2lsbCBhdHRlbXB0IHRvIGRpc3BsYXkgYm90aCB0 aGUgcHJlc2VudGF0aW9uCmFuZCBzb3VyY2Ugc2ltdWx0YW5lb3VzbHkuICBXaGVuZXZlciB0aGUg c291cmNlIGlzIHZpc2libGUsIGhpZ2hsaWdodHMKd2lsbCBiZSBhcHBsaWVkIHRvIGluZGljYXRl IHdoZXJlIHRoZSBwcmVzZW50YXRpb24gaXMgYXQuICAqVGhpcyBpcwplc3BlY2lhbGx5IGhlbHBm dWwgZm9yIGluY2x1ZGluZyBwcmVzZW50YXRpb24gbm90ZXMgaW4gY29tbWVudHMsIHdoaWNoCmFy ZSBoaWRkZW4gYnkgZGVmYXVsdCouCgogICBUbyBsZWF2ZSBhIGNvbW1lbnQgZm9yIHlvdXJzZWxm IGluIHRoZSBwcmVzZW50YXRpb24gc291cmNlLCBqdXN0IGFkZAphIGNvbW1lbnQgYmxvY2sgb3Ig Y29tbWVudCBsaW5lOgoKICAgICAjIFRoaXMgaXMgYWxzbyBhIGNvbW1lbnQKCiAgICAgIytiZWdp bl9jb21tZW50CiAgICAgVGhpcyBpcyBhIGNvbW1lbnQgdGhhdCBvbmx5IEkgY2FuIHNlZSB3aGls ZSBwcmVzZW50aW5nLCBvbmx5IHdoZW4gSSBsb29rIGF0IG15IGJhc2UgYnVmZmVyIHdoaWxlIHNo YXJpbmcgYW5vdGhlciBmcmFtZS4KICAgICAjK2VuZF9jb21tZW50CgogICBZb3UgY2FuIGFsc28g c3dpdGNoIGEgd2luZG93IHRvIHRoZSBiYXNlIGJ1ZmZlciBtYW51YWxseS4gIFRoYXQncwphbG1v c3QgYWxsIOKAmGRzbGlkZS1kZWNrLWRldmVsb3DigJkgZG9lcy4KCh8KRmlsZTogZG9jdFZOM0Yz LmluZm8sICBOb2RlOiBDdXJzb3IgVmlzaWJpbGl0eSwgIFByZXY6IE5hcnJhdGluZywgIFVwOiBQ cmVzZW50aW5nCgo0LjQgQ3Vyc29yIFZpc2liaWxpdHkKPT09PT09PT09PT09PT09PT09PT09CgpC eSBkZWZhdWx0LCB0aGUgY3Vyc29yIGlzIGhpZGRlbiBpbiB0aGUgcHJlc2VudGF0aW9uIGJ1ZmZl ciB1c2luZwrigJhkc2xpZGUtY3Vyc29yLWhpZGXigJkuICBZb3UgY2FuIGNhbGwg4oCYZHNsaWRl LWN1cnNvci1yZXN0b3Jl4oCZIGlmIHlvdSBuZWVkCml0LgoKHwpGaWxlOiBkb2N0Vk4zRjMuaW5m bywgIE5vZGU6IENvbmZpZ3VyaW5nLCAgTmV4dDogRXh0ZW5kaW5nLCAgUHJldjogUHJlc2VudGlu ZywgIFVwOiBUb3AKCjUgQ29uZmlndXJpbmcKKioqKioqKioqKioqKgoKQmUgc3VyZSB0byBjaGVj ayDigJhNLXjigJkg4oCYY3VzdG9taXplLWdyb3Vw4oCZIOKAmGRzbGlkZeKAmSB0byBzZWUgYWxs IGRlY2xhcmVkCmN1c3RvbSB2YXJpYWJsZXMuICBBbGwgb2YgdGhlIHZhcmlhYmxlcyBhcmUgY29u ZmlndXJlZCB0byByZWNvbW1lbmRlZApkZWZhdWx0cyBleGNlcHQgaG9va3MsIHdoaWNoIHdvdWxk IGRlcGVuZCBvbiBvdGhlciBwYWNrYWdlcyB1c3VhbGx5LgoKICAgTWFueSBzZXR0aW5ncyBjYW4g YmUgY29uZmlndXJlZCBhdDoKICAg4oCiIGdsb2JhbCBsZXZlbCB0aHJvdWdoIGN1c3RvbWl6ZSB2 YXJpYWJsZXMKICAg4oCiIGRvY3VtZW50IGxldmVsIHRocm91Z2gga2V5d29yZHMKICAg4oCiIHNs aWRlIGxldmVsIHRocm91Z2ggdGhlIHByb3BlcnR5IGRyYXdlcgoKKiBNZW51OgoKKiBCaW5kaW5n OjoKKiBIb29rczo6CiogU3RlZXppbmcgT3JnOjogICAgICAgICAgICAgICAgIE1ha2luZyBpdCBQ cmV0dHkKCh8KRmlsZTogZG9jdFZOM0YzLmluZm8sICBOb2RlOiBCaW5kaW5nLCAgTmV4dDogSG9v a3MsICBVcDogQ29uZmlndXJpbmcKCjUuMSBCaW5kaW5nCj09PT09PT09PT09CgpZb3UgbGlrZWx5 IHdhbnQgdG8gc3RhcnQgdGhlIG1vZGUgdmlhIOKAmGRzbGlkZS1kZWNrLXN0YXJ04oCZLiAgT25j ZSB0aGUKbW9kZSBzdGFydHMsIGl0IGNyZWF0ZXMgYW4gaW5kaXJlY3QgYnVmZmVyIHRvIGRpc3Bs YXkgdGhlIHNsaWRlcyBhbmQKdGhlbiBjYWxscyDigJhkc2xpZGUtZGVjay1zdGFydC1mdW5jdGlv buKAmSBvbmNlIHRoZSBtb2RlIGlzIGFjdGl2ZSBhbmQKZXZlcnl0aGluZyBpcyBpbml0aWFsaXpl ZCwgc28geW91IGNhbiBjdXN0b21pemUgc3RhcnR1cCBiZWhhdmlvci4KCiAgIEFsbCBjb21tYW5k cyBiZWdpbiB3aXRoIOKAmGRzbGlkZS1kZWNr4oCZIPCfkqEKICAgICAoa2V5bWFwLXNldCBvcmct bW9kZS1tYXAgIjxmNT4iICMnZHNsaWRlLWRlY2stc3RhcnQpCiAgIE9uY2UgdGhlIGdsb2JhbCBt aW5vciBtb2RlLCDigJhkc2xpZGUtbW9kZeKAmSBpcyBhY3RpdmUsIGFkZGl0aW9uYWwKYmluZGlu Z3MgaW4g4oCYZHNsaWRlLW1vZGUtbWFw4oCZIGFyZSBhY3RpdmUgaW4gZXZlcnkgYnVmZmVyIHNv IHRoYXQgeW91IGNhbgppbnRlZ3JhdGUgb3RoZXIgYnVmZmVycyBpbnRvIHlvdXIgcHJlc2VudGF0 aW9uLiAgKFRyYWNraW5nIHdoaWNoIGJ1ZmZlcnMKYXJlIHBhcnQgb2YgYSBwcmVzZW50YXRpb24g aXMgc3RpbGwgYSB0b3BpYyB1bmRlciBjb25zaWRlcmF0aW9uIPCfmqcpCgoqIE1lbnU6CgoqIFNl Y29uZGFyeSBDb21tYW5kcyDwn5qnOjoKCh8KRmlsZTogZG9jdFZOM0YzLmluZm8sICBOb2RlOiBT ZWNvbmRhcnkgQ29tbWFuZHMg8J+apywgIFVwOiBCaW5kaW5nCgo1LjEuMSBTZWNvbmRhcnkgQ29t bWFuZHMg8J+apwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkJlY2F1c2UgeW91IG1pZ2h0 IHdhbnQgdG8gcGxheSBhIHZpZGVvIG9yIHRha2UgYSBicmFuY2ggaW4gdGhlCnByZXNlbnRhdGlv biBhbmQgdGhlbiBleGl0IHRoYXQgYnJhbmNoLCB0aGUgcGxhbiBpcyB0byBvdmVybG9hZCB0aGUK 4oCYZHNsaWRlLWRlY2stc3RhcnTigJkgYmluZGluZyB3aXRoaW4gcHJlc2VudGF0aW9ucyB0byBl bnRlciAvIGV4aXQgdGhlc2UKYnJhbmNoZXMuCgofCkZpbGU6IGRvY3RWTjNGMy5pbmZvLCAgTm9k ZTogSG9va3MsICBOZXh0OiBTdGVlemluZyBPcmcsICBQcmV2OiBCaW5kaW5nLCAgVXA6IENvbmZp Z3VyaW5nCgo1LjIgSG9va3MKPT09PT09PT09CgpCZXdhcmUgb2YgdXNpbmcgdGhlIG5vcm1hbCDi gJhkc2xpZGUtbW9kZS1ob29r4oCZIPCfmLEgYmVjYXVzZSBpdCBydW5zICppbiB0aGUKYmFzZSBi dWZmZXIqIOKaoO+4jy4gIElmIHlvdSByZW1hcCBmYWNlcyBvciBhZGQgYSBidW5jaCBvZiBzdHls aW5nLCBpdCB3aWxsCmJlIGNvcGllZCB0byB0aGUgaW5kaXJlY3QgYnVmZmVyIGJ1dCB0aGVuIGxp bmdlciBpbiB5b3VyIGJhc2UgYnVmZmVyLgpJbnN0ZWFkLCB1c2Ug4oCYZHNsaWRlLXN0YXJ0LWhv b2vigJkuICDwn5KhCgogICDigKIg4oCYZHNsaWRlLXN0YXJ0LWhvb2vigJkgaXMgcnVuIGluIHRo ZSBpbmRpcmVjdCBidWZmZXIgYWZ0ZXIgaXQgaXMgc2V0CiAgICAgaXQuICBUaGlzIGlzIHdoYXQg eW91IHdhbnQuCiAgIOKAoiDigJhkc2xpZGUtc3RvcC1ob29r4oCZIGlzIHJ1biBpbiB0aGUgYmFz ZSBidWZmZXIgYmVjYXVzZSB0aGUgaW5kaXJlY3QKICAgICBidWZmZXIgaXMgYWxyZWFkeSBkZWFk LgogICDigKIg4oCYZHNsaWRlLWNvbnRlbnRzLWhvb2vigJkgaXMgcnVuIGFmdGVyIHN3aXRjaGlu ZyB0byBjb250ZW50cy4gIEl0IHJ1bnMKICAgICBpbiB0aGUgc2xpZGUgYnVmZmVyLgogICDigKIg 4oCYZHNsaWRlLW5hcnJvdy1ob29r4oCZIGlzIHJ1biBhZnRlciBuYXJyb3dpbmcsIHVzdWFsbHkg YWZ0ZXIgYSBzbGlkZQogICAgIGlzIHN0YXJ0ZWQKICAg4oCiIOKAmGRzbGlkZS1hZnRlci1sYXN0 LXNsaWRlLWhvb2vigJkgaXMgcnVuIHdoZW4gdGhlIHVzZXIgdHJpZXMgdG8gZ28KICAgICBmb3J3 YXJkIGJ1dCB0aGVyZSBhcmUgbm8gbW9yZSBzbGlkZXMuICBZb3UgY2FuIHVzZSB0aGlzIHRvCiAg ICAgaW1wbGVtZW50IGEgZmluYWwgZmVlZGJhY2sgYmVmb3JlIHF1aXR0aW5nIG9yIGFkZAogICAg IOKAmGRzbGlkZS1kZWNrLXN0b3DigJkgdG8gZXhpdCB3aXRob3V0IGZlZWRiYWNrLgoKICAgICBB bm90aGVyIG9wdGlvbiBpcyB0byB1c2Ug4oCYZHNsaWRlLXB1c2gtc3RlcOKAmSB0byBwdXNoIGEg Y2FsbGJhY2sgdGhhdAogICAgIHdpbGwgb25seSBydW4gd2hlbiBjYWxsZWQgZ29pbmcgZm9yd2Fy ZC4KCiAgICAgKGRlZnVuIG15LXN0b3AtaWYtZm9yd2FyZCAoKQogICAgICAgKGRzbGlkZS1wdXNo LXN0ZXAgKGxhbWJkYSAoZGlyZWN0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICh3aGVuIChl cSBkaXJlY3Rpb24gJ2ZvcndhcmQpCiAgICAgICAgICAgICAgICAgICAgICAgICA7OyBCZSBzdXJl IHRvIHJldHVybiB0IG9yIHRoZSBjYWxsYmFjayB3b24ndCBjb3VudCBhcyBhCiAgICAgICAgICAg ICAgICAgICAgICAgICA7OyBzdGVwIGFuZCB0aGUgaG9vayB3aWxsIHJ1biBhZ2Fpbi4KICAgICAg ICAgICAgICAgICAgICAgICAgIChwcm9nMSB0IChkc2xpZGUtZGVjay1zdG9wKSkpKSkpCgogICAg IChzZXRxIGRzbGlkZS1hZnRlci1sYXN0LXNsaWRlLWhvb2sgIydteS1zdG9wLWlmLWZvcndhcmQp CgoqIE1lbnU6CgoqIFBlci1TbGlkZSBBY3Rpb25zOjoKCh8KRmlsZTogZG9jdFZOM0YzLmluZm8s ICBOb2RlOiBQZXItU2xpZGUgQWN0aW9ucywgIFVwOiBIb29rcwoKNS4yLjEgUGVyLVNsaWRlIEFj dGlvbnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCvCfkqEgSWYgeW91IHdhbnQgdG8gZG8gc29t ZXRoaW5nIG9uIGVhY2ggc2xpZGUgb3Igc3BlY2lmaWMgc2xpZGVzLCBiZWZvcmUKdXNpbmcgaG9v a3MsIGluc3RlYWQgY29uc2lkZXIgdXNpbmcgYWN0aW9ucy4KCiAgIFNlZSB0aGUg4oCYZHNsaWRl LWFjdGlvbi1oaWRlLW1hcmt1cOKAmSB3aGljaCBpcyBieSBkZWZhdWx0IGFkZGVkIHRvCuKAmGRz bGlkZS1kZWZhdWx0LWFjdGlvbnPigJkgYW5kIGhpZGVzIG1hcmt1cCBvbiBldmVyeSBzbGlkZS4g IFRoZSBsaWZlY3ljbGUKb2YgYWN0aW9ucyBhbmQgdGhlaXIgbWV0aG9kcyBmb3Igb2J0YWluaW5n IHRoZSBjdXJyZW50IHNsaWRlJ3MgaGVhZGluZwptYWtlIHRoZW0gdmVyeSBnb29kIGZvciBwZXIt c2xpZGUgYmVoYXZpb3IuCgofCkZpbGU6IGRvY3RWTjNGMy5pbmZvLCAgTm9kZTogU3RlZXppbmcg T3JnLCAgUHJldjogSG9va3MsICBVcDogQ29uZmlndXJpbmcKCjUuMyBTdGVlemluZyBPcmcKPT09 PT09PT09PT09PT09PQoKTm90IHVuaXF1ZSB0byBkc2xpZGUsIGlmIHlvdSB3YW50IG1vcmUgcHJv ZmVzc2lvbmFsIGxvb2tpbmcgcmVzdWx0cywgeW91CndpbGwgbGlrZWx5IG5lZWQgdG8gbWFrZSB5 b3VyIG9yZyBhIGJpdCBwcmV0dGllci4KCiAgIFRoZSBzZXR1cCB1c2VkIGZvciB0aGUgUG9zaXRy b24ncyBZb3VUdWJlIGRlbW9zIGlzIG5vdCBtdWNoIG1vcmUKY29tcGxleCB0aGFuIHRoaXMgd2Vs bC1kb2N1bWVudGVkIHNldHVwIGJ5IFN5c3RlbSBDcmFmdGVycwooaHR0cHM6Ly9zeXN0ZW1jcmFm dGVycy5uZXQvZW1hY3MtdGlwcy9wcmVzZW50YXRpb25zLXdpdGgtb3JnLXByZXNlbnQvKS4KQWxz byBzZWUgUHJvdCdzIGZ1cnRoZXIKKGh0dHBzOi8vcHJvdGVzaWxhb3MuY29tL2NvZGVsb2cvMjAy MC0wNy0xNy1lbWFjcy1taXhlZC1mb250cy1vcmcvKQpkb2N1bWVudGF0aW9uIG9uIGN1c3RvbWl6 aW5nIG9yZyBtb2RlIGZhY2VzIGFuZCBmb250cy4KCiAgIEluIHNob3J0LCB1c2U6CiAgIOKAoiDi gJhvcmctbW9kZXJu4oCZCiAgIOKAoiDigJhvcmctYXBwZWFy4oCZCiAgIOKAoiDigJhuZXJkLWlj b25z4oCZIGZvciBtb3JlIGNoZWVzeSDumLIoRW1hY3MgbG9nbykKICAg4oCiIEFuZCBzZXQgdGhl IGZhY2VzIGZvciBvcmcgaGVhZGluZ3MgYW5kIGRvY3VtZW50IHRpdGxlLgoKICAgRG9uJ3QgZm9y Z2V0IGJ1aWx0LWluIOKAmGVtb2ppLXNlYXJjaOKAmSBhbmQgc2VhcmNoaW5nIOKAmGluc2VydC1j aGFy4oCZLgoKICAgUG9zaXRyb24gaXMgY2hlYXRpbmcgYW5kIGFsc28gYXBwbHkgY3VzdG9tIGxp bmUtc3BhY2luZyBhbmQKbGluZS1oZWlnaHQuICBXaGlsZSBQc2lvbmljIG1haW50YWlucyBhIGN1 c3RvbSDigJhvcmctbW9kZXJu4oCZLCB1c2luZwpjdXN0b20gc3BhY2luZyBldmVyeXdoZXJlIGZp Z2h0cyB3aXRoIOKAmHZpc3VhbC1saW5lLW1vZGXigJkgY3VycmVudGx5LgoKHwpGaWxlOiBkb2N0 Vk4zRjMuaW5mbywgIE5vZGU6IEV4dGVuZGluZywgIE5leHQ6IEhhY2tpbmcsICBQcmV2OiBDb25m aWd1cmluZywgIFVwOiBUb3AKCjYgRXh0ZW5kaW5nCioqKioqKioqKioqCgpUaGlzIHNlY3Rpb24g aXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBhbiBvdmVydmlldyBmb3IgZXh0ZW5kaW5nIGRzbGlkZQpj bGFzc2VzIG9yIGhhY2tpbmcgb24gZHNsaWRlIGl0c2VsZi4KCiogTWVudToKCiogQ3JlYXRpbmcg QWN0aW9uczo6ICAgICAgICAgICAgIE92ZXJ2aWV3CiogQSBDdXN0b20gQWN0aW9uOjogICAgICAg ICAgICAgIEV4YW1wbGUgQ2xhc3MKKiBEZWZhdWx0IENsYXNzZXM6OiAgICAgICAgICAgICAgT3Zl cnJpZGluZyB0aGUgR3V0cwoKHwpGaWxlOiBkb2N0Vk4zRjMuaW5mbywgIE5vZGU6IENyZWF0aW5n IEFjdGlvbnMsICBOZXh0OiBBIEN1c3RvbSBBY3Rpb24sICBVcDogRXh0ZW5kaW5nCgo2LjEgQ3Jl YXRpbmcgQWN0aW9ucwo9PT09PT09PT09PT09PT09PT09PQoKQWN0aW9ucyBhcmUgdGhlIHJpZ2h0 IGNob2ljZSB3aGVuIHlvdSBuZWVkIGN1c3RvbSBiZWhhdmlvciB0aGF0IHlvdSB3YW50CnRvIHJl LXVzZS4gIEFjdGlvbnMgY2FuIGJlIGNvbmZpZ3VyZWQgd2l0aCBhcmd1bWVudHMuICBUaGV5IGlt cGxlbWVudAp0aGUgc3RhdGVmdWwgc2VxdWVuY2UgbGlmZWN5Y2xlLiAgRm9yIG9uZS1vZmYgc29s dXRpb25zLCB5b3UgcHJvYmFibHkKanVzdCB3YW50IGEgYmFiZWwgYmxvY2suCgogICBGaXJzdCBj aG9vc2UgeW91ciBhY3Rpb24gdHlwZToKCiAgIOKAoiBPdmVycmlkZSDigJhkc2xpZGUtc2xpZGUt YWN0aW9u4oCZIHRvIGNyZWF0ZSBhIHNsaWRlIGFjdGlvbi4gIFlvdXIKICAgICBhY3Rpb24gd2ls bCBjb250cm9sIHRoZSBkaXNwbGF5IG9mIHRoZSBzbGlkZSBhbmQgaXRzIGNoaWxkcmVuLAogICAg IHVzdWFsbHkgY29udHJvbGxpbmcgdGhlIG5hcnJvdyBzdGF0ZSBhbmQgYWRkaW5nIG9yIHJlbW92 aW5nCiAgICAgb3ZlcmxheXMgZnJvbSBjaGlsZHJlbi4KICAg4oCiIE92ZXJyaWRlIOKAmGRzbGlk ZS1hY3Rpb27igJkgdG8gY3JlYXRlIGFuIGFjdGlvbiB0aGF0IHdvcmtzIG1haW5seSBvbiBhCiAg ICAgaGVhZGluZydzIHNlY3Rpb24gY29udGVudC4KCiAgIE92ZXJyaWRlIG1ldGhvZHMgYXMgYXBw cm9wcmlhdGUsIGNvbmZpZ3VyZSBhIGhlYWRpbmcgdG8gdXNlIHlvdXIKYWN0aW9uLCBhbmQgeW91 J3JlIGRvbmUuICBTb21lIGFjdGlvbnMsIHN1Y2ggYXMK4oCYZHNsaWRlLWFjdGlvbi1wcm9wZXJ0 aXpl4oCZIG9ubHkgd29yayB3aGVuIHNvbWUgb2YgdGhlIHNlY3Rpb24gZGF0YSBpcwphbm5vdGF0 ZWQuCgofCkZpbGU6IGRvY3RWTjNGMy5pbmZvLCAgTm9kZTogQSBDdXN0b20gQWN0aW9uLCAgTmV4 dDogRGVmYXVsdCBDbGFzc2VzLCAgUHJldjogQ3JlYXRpbmcgQWN0aW9ucywgIFVwOiBFeHRlbmRp bmcKCjYuMiBBIEN1c3RvbSBBY3Rpb24KPT09PT09PT09PT09PT09PT09PQoKVGhlIOKAmGRzbGlk ZS1zZWN0aW9uLW5leHTigJkgYW5kIOKAmGRzbGlkZS1zZWN0aW9uLXByZXZpb3Vz4oCZIG1ldGhv ZApkb2N1bWVudGF0aW9uIGFyZSB2ZXJ5IGhlbHBmdWwgYmVoYXZpb3IgZm9yIHF1aWNrbHkgd3Jp dGluZyBjdXN0b20KYWN0aW9ucy4gIFRoZXkgYWR2YW5jZSB0aGUgYWN0aW9uJ3Mg4oCYOm1hcmtl cuKAmSBmb3J3YXJkcyBhbmQgYmFja3dhcmRzIHRvCnRoZSBuZXh0IG1hdGNoaW5nIGVsZW1lbnQg YW5kIHJldHVybiB0aGF0IGVsZW1lbnQgc28gd2UgY2FuIGRvIHNvbWV0aGluZwp3aXRoIGl0LgoK ICAg4oCiIGRlY2xhcmUgYSBjbGFzcwogICDigKIgb3ZlcnJpZGUgYSBmZXcgbWV0aG9kcwogICDi gKIgbm93IHlvdSB0b28gY2FuIHBhaW50IHRoZSBwYXJhZ3JhcGhzIHJlZAoKICAgRXhhbXBsZSBj b2RlOgoKICAgICAoZGVmY2xhc3MgZHNsaWRlLWFjdGlvbi1yZWQtcGFyYWdyYXBocyAoZHNsaWRl LWFjdGlvbikKICAgICAgICgob3ZlcmxheXMgOmluaXRmb3JtIG5pbCkpCiAgICAgICAiUGFpbnQg dGhlIHBhcmFncmFwaHMgcmVkLCBvbmUgYnkgb25lLiIpCgogICAgIDs7IERlZmF1bHQgbm8tb3Ag YGRzbGlkZS1iZWdpbicgaXMgc3VmZmljaWVudAoKICAgICA7OyBEZWZhdWx0IGltcGxlbWVudGF0 aW9uIG9mIGBkc2xpZGUtZW5kJywgd2hpY2gganVzdCBwbGF5cyBmb3J3YXJkIHRvIHRoZSBlbmQs CiAgICAgOzsgaXMgd2VsbC1iZWhhdmVkIHdpdGggdGhpcyBjbGFzcy4KCiAgICAgOzsgUmVtb3Zl IGFueSByZW1haW5pbmcgb3ZlcmxheXMgd2hlbiBjYWxsaW5nIGZpbmFsLgogICAgIChjbC1kZWZt ZXRob2QgZHNsaWRlLWZpbmFsIDphZnRlciAoKG9iaiBkc2xpZGUtYWN0aW9uLXJlZC1wYXJhZ3Jh cGhzKSkKICAgICAgIChtYXBjICMnZGVsZXRlLW92ZXJsYXkgKG9yZWYgb2JqIG92ZXJsYXlzKSkp CgogICAgIDs7IEZpbmQgdGhlIG5leHQgcGFyYWdyYXBoIGFuZCBhZGQgYW4gb3ZlcmxheSBpZiBp dCBleGlzdHMKICAgICAoY2wtZGVmbWV0aG9kIGRzbGlkZS1mb3J3YXJkICgob2JqIGRzbGlkZS1h Y3Rpb24tcmVkLXBhcmFncmFwaHMpKQogICAgICAgKHdoZW4tbGV0ICgocGFyYWdyYXBoIChkc2xp ZGUtc2VjdGlvbi1uZXh0IG9iaiAncGFyYWdyYXBoKSkpCiAgICAgICAgIChsZXQqICgoYmVnIChv cmctZWxlbWVudC1wcm9wZXJ0eSA6YmVnaW4gcGFyYWdyYXBoKSkKICAgICAgICAgICAgICAgIChl bmQgKG9yZy1lbGVtZW50LXByb3BlcnR5IDplbmQgcGFyYWdyYXBoKSkKICAgICAgICAgICAgICAg IChuZXctb3ZlcmxheSAobWFrZS1vdmVybGF5IGJlZyBlbmQpKSkKICAgICAgICAgICAob3Zlcmxh eS1wdXQgbmV3LW92ZXJsYXkgJ2ZhY2UgJ2Vycm9yKQogICAgICAgICAgIChwdXNoIG5ldy1vdmVy bGF5IChvcmVmIG9iaiBvdmVybGF5cykpCiAgICAgICAgICAgOzsgUmV0dXJuIG5vbi1uaWwgdG8g aW5kaWNhdGUgcHJvZ3Jlc3Mgd2FzIG1hZGUuICBUaGlzIGFsc28gaW5mb3JtcyB0aGUKICAgICAg ICAgICA7OyBoaWdobGlnaHQgd2hlbiBmb2xsb3dpbmcgdGhlIHNsaWRlcyBpbiB0aGUgYmFzZSBi dWZmZXIuCiAgICAgICAgICAgYmVnKSkpCgogICAgIChjbC1kZWZtZXRob2QgZHNsaWRlLWJhY2t3 YXJkICgob2JqIGRzbGlkZS1hY3Rpb24tcmVkLXBhcmFncmFwaHMpKQogICAgICAgKHdoZW4tbGV0 KiAoKG92ZXJsYXkgKHBvcCAob3JlZiBvYmogb3ZlcmxheXMpKSkpCiAgICAgICAgIChkZWxldGUt b3ZlcmxheSBvdmVybGF5KQogICAgICAgICA7OyBJZiB0aGVyZSBpcyBhIHByZWNlZGluZyBvdmVy bGF5LCBtb3ZlIHRvIGl0cyBiZWdpbm5pbmcgZWxzZSBtb3ZlIHRvIHRoZQogICAgICAgICA7OyBi ZWdpbm5pbmcgb2YgdGhlIGhlYWRpbmcuCiAgICAgICAgIChpZi1sZXQgKChvdmVybGF5IChjYXIg KG9yZWYgb2JqIG92ZXJsYXlzKSkpKQogICAgICAgICAgICAgKGRzbGlkZS1tYXJrZXIgb2JqIChv dmVybGF5LXN0YXJ0IG92ZXJsYXkpKQogICAgICAgICAgIChkc2xpZGUtbWFya2VyIG9iaiAob3Jn LWVsZW1lbnQtcHJvcGVydHkgOmJlZ2luIChkc2xpZGUtaGVhZGluZyBvYmopKSkpKSkKCh8KRmls ZTogZG9jdFZOM0YzLmluZm8sICBOb2RlOiBEZWZhdWx0IENsYXNzZXMsICBQcmV2OiBBIEN1c3Rv bSBBY3Rpb24sICBVcDogRXh0ZW5kaW5nCgo2LjMgRGVmYXVsdCBDbGFzc2VzCj09PT09PT09PT09 PT09PT09PT0KClRoZSBkZWNrIGFuZCBzbGlkZSBjbGFzcyBhcyB3ZWxsIGFzIGFjdGlvbnMgY2Fu IGJlIHN1Yi1jbGFzc2VkLiAgVXNlIHRoZQpleGlzdGluZyBzdWItY2xhc3NlcyBvZiBhY3Rpb25z IGFzIGV4YW1wbGUgY29kZSBmb3Igd3JpdGluZyBvdGhlcgpjbGFzc2VzLiAgU2VlIHRoZSAqbm90 ZSBlaWVpbyNUb3A6IChlaWVpbylUb3AuIG1hbnVhbCBmb3IgZXhwbGFuYXRpb24gb2YKT09QIGlu IEVsaXNwLgoKICAg4oCiIOKAmEFjdGlvbuKAmTogQ3JlYXRpbmcgbmV3IGFjdGlvbiBzdWJjbGFz c2VzIGFyZSBhbiBlZmZpY2llbnQgd2F5IHRvCiAgICAgcGVyZm9ybSBzaW1pbGFyIG9wZXJhdGlv bnMgb24gdHlwaWNhbCBraW5kcyBvZiBvcmcgZGF0YS4KICAg4oCiIOKAmFNsaWRlOuKAmSBTbGlk ZXMgY2FuIGJlIGNvbmZpZ3VyZWQgZXh0ZW5zaXZlbHkgYnkgY2hhbmdpbmcgdGhlaXIKICAgICBh Y3Rpb25zLiAgSG93ZXZlciwgZm9yIG1vcmUgdmVydGljYWwgY29vcGVyYXRpb24gYmV0d2VlbiBz bGlkZXMgb3IKICAgICBjb29wZXJhdGlvbiBhbW9uZyBhY3Rpb25zLCBleHRlbmRlZCBzbGlkZXMg Y291bGQgYmUgdXNlZnVsLgogICDigKIg4oCYRGVja+KAmTogSWYgdGhlIGNvcmUgbWV0aG9kcyBv ZiB0aGUgZGVjayBhcmUgaW5zdWZmaWNpZW50LCBleHRlbnNpb24KICAgICBpcyBhbm90aGVyIG9w dGlvbiBiZXNpZGVzIGFkdmljZSwgaG9va3MsIGFuZCBtb2RpZnlpbmcgdGhlIHNvdXJjZS4KCiAg ICAgSWYgeW91IHN1c3BlY3QgeW91IG1pZ2h0IG5lZWQgdG8gc3ViLWNsYXNzIHRoZSDigJhkc2xp ZGUtc2xpZGXigJkgb3IKICAgICDigJhkc2xpZGUtZGVja+KAmSwgcGxlYXNlIGZpbGUgYW4gaXNz dWUgYmVjYXVzZSB5b3VyIHVzZSBjYXNlIGlzCiAgICAgcHJvYmFibHkgaW50ZXJlc3RpbmcuCgof CkZpbGU6IGRvY3RWTjNGMy5pbmZvLCAgTm9kZTogSGFja2luZywgIE5leHQ6IENvbnRyaWJ1dGlu ZywgIFByZXY6IEV4dGVuZGluZywgIFVwOiBUb3AKCjcgSGFja2luZwoqKioqKioqKioKClRoaXMg c2VjdGlvbiBwcm92aWRlcyByZWFsbHkgaGlnaC1sZXZlbCBzdW1tYXJ5IG9mIHRoZSBjb2RlJ3Mg bWFqb3IKZGVzaWduIGNob2ljZXMgdG8gcHJlcGFyZSBmb3IgZGl2aW5nIGludG8gc291cmNlLgoK KiBNZW51OgoKKiBPYmplY3RzICYgT3duZXJzaGlwOjoKKiBTdGF0ZWZ1bCBTZXF1ZW5jZTo6Ciog RmxvdyBDb250cm9sOjoKKiBJbnN0YW50aWF0aW5nIFNsaWRlczo6CgofCkZpbGU6IGRvY3RWTjNG My5pbmZvLCAgTm9kZTogT2JqZWN0cyAmIE93bmVyc2hpcCwgIE5leHQ6IFN0YXRlZnVsIFNlcXVl bmNlLCAgVXA6IEhhY2tpbmcKCjcuMSBPYmplY3RzICYgT3duZXJzaGlwCj09PT09PT09PT09PT09 PT09PT09PT09CgpPcmcgbW9kZSB1c2VzIHRyZWVzLiAgUHJlc2VudGF0aW9ucyBhcmUgbGluZWFy IHNlcXVlbmNlcy4gIFdlIGNhbiBlaXRoZXIKdHJhdmVyc2UgdGhlIHRyZWUgb3IgZmxhdHRlbiBp dC4gIERzbGlkZSBjaG9zZSB0byB0cmF2ZXJzZS4gIFRoaXMgZGVzaWduCmFsbG93ZWQgaW1wbGVt ZW50aW5nIGZlYXR1cmVzIHN1Y2ggYXMg4oCYZHNsaWRlLXNsaWRlLWFjdGlvbi1lYWNoLWNoaWxk 4oCZLgpUaGUgY2hpbGRyZW4gb2Ygc3VjaCBhIHBhcmVudCBzbGlkZSBleGlzdCBzaW11bHRhbmVv dXNseS4gIEEgY29uc2VxdWVuY2UKb2YgdGhlIGNob2ljZSBub3QgdG8gZmxhdHRlbiBpcyB0aGF0 IHBhcmVudHMgb3duIHRoZWlyIGNoaWxkcmVuLiAgVGhlCmxpZmVjeWNsZSBvZiBhIHBhcmVudCBh bHdheXMgZW5jb21wYXNzZXMgaXRzIGNoaWxkLgoKICAg4oCiIFRoZSBkZWNrIG9iamVjdCBpcyB0 aGUgcm9vdCBvZiBhbGwgZnVuY3Rpb25hbGl0eSBhbmQgbWFueSBjb21tYW5kcwogICAgIGRlbGVn YXRlIHRocm91Z2ggaXQKICAg4oCiIFRoZSBkZWNrIG93bnMgc2xpZGVzLCB3aGljaCBvd24gYWN0 aW9ucwogICDigKIgU2xpZGUgYWN0aW9ucyBtYXkgZnVydGhlciBvd24gY2hpbGQgc2xpZGVzCgof CkZpbGU6IGRvY3RWTjNGMy5pbmZvLCAgTm9kZTogU3RhdGVmdWwgU2VxdWVuY2UsICBOZXh0OiBG bG93IENvbnRyb2wsICBQcmV2OiBPYmplY3RzICYgT3duZXJzaGlwLCAgVXA6IEhhY2tpbmcKCjcu MiBTdGF0ZWZ1bCBTZXF1ZW5jZQo9PT09PT09PT09PT09PT09PT09PT0KClByZXNlbnRhdGlvbnMg YXJlIHN1cHBvc2VkIHRvIGJlIGxpbmVhciBzZXF1ZW5jZXMuICBIb3dldmVyLCB0aGV5IG1heQpy ZXF1aXJlIHNldHVwIGFuZCB0ZWFyZG93bi4gIFRoaXMgaXMgdGhlICJzdGF0ZWZ1bCIgcGFydCBv ZiBhCuKAmGRzbGlkZS1zdGF0ZWZ1bC1zZXF1ZW5jZeKAmS4KCiAgIElmIGFsbCBzZXF1ZW5jZXMg d2VyZSBpZGVtcG90ZW50LCB3ZSB3b3VsZCBqdXN0IGltcGxlbWVudArigJhkc2xpZGUtZm9yd2Fy ZOKAmSBhbmQg4oCYZHNsaWRlLWJhY2t3YXJk4oCZLiAgVGhlIHJlYXNvbiB0aGlzIHdhcyBub3Qg ZG9uZSBpcwpiZWNhdXNlIHRob3NlIG1ldGhvZHMgd291bGQgaGF2ZSB0byBkaWZmZXJlbnRpYXRl IGNhbGxzIHRvIHBlcmZvcm0gc2V0dXAKdmVyc3VzIGF0dGVtcHRpbmcgdG8gbWFrZSBwcm9ncmVz cyBhbmQgY291bnRpbmcgYXMgc3RlcHMuICBJdCB3YXMKZXh0cmVtZWx5IHRyaWNreSwgYW5kIHNv IHNldHVwIGFuZCB0ZWFyZG93biB3ZXJlIHNwbGl0IGludG8gdGhyZWUKbWV0aG9kcy4KCiAgIFRo aXMgc2V0dXAgYW5kIHRlYXJkb3duIGNhbiBoYXBwZW4gaW4gYm90aCBkaXJlY3Rpb25zLCBzbyB0 aGVyZSBpcwrigJhkc2xpZGUtYmVnaW7igJkgYW5kIOKAmGRzbGlkZS1lbmTigJkuICBUaGUgbGF0 dGVyIGNvbW1vbmx5IGNhbGxzIHRoZSBmb3JtZXIKYW5kIHRoZW4gYWR2YW5jZXMgdGhlIHN0YXRl IHRvIHRoZSBlbmQsIGJ1dCBzb21lIG1vcmUgb3B0aW1hbCBzZXR1cHMgYXJlCnBvc3NpYmxlIGFu ZCBhbHJlYWR5IGluIHVzZS4KCiAgIFNsaWRlcyBtYXkgYmUgZGlzcG9zZWQgb2YgYWZ0ZXIgdGhl eSBubyBsb25nZXIgbWFrZSBwcm9ncmVzcy4gIFRvCmVuc3VyZSB0aGlzIGZpbmFsaXphdGlvbiBo YXBwZW5zLCB0aGUgcGFyZW50IGNhbGxzIOKAmGRzbGlkZS1maW5hbOKAmS4KCiogTWVudToKCiog QWN0aW9uczogQWN0aW9ucyAoMSkuCgofCkZpbGU6IGRvY3RWTjNGMy5pbmZvLCAgTm9kZTogQWN0 aW9ucyAoMSksICBVcDogU3RhdGVmdWwgU2VxdWVuY2UKCjcuMi4xIEFjdGlvbnMKLS0tLS0tLS0t LS0tLQoKQWN0aW9ucyBsaXZlIG9uIHRoZSBzbGlkZS4gIFRoZXkgaW1wbGVtZW50IHN0YXRlZnVs IHNlcXVlbmNlLiAgVGhlcmUgYXJlCnR3byBraW5kcyBvZiBhY3Rpb25zOgoKICAg4oCiIEFjdGlv bjogQSByZWd1bGFyIGFjdGlvbiB1c3VhbGx5IHdvcmtzIG9uIHRoZSBzZWN0aW9uIGNvbnRlbnRz LgogICDigKIgU2xpZGUgQWN0aW9uOiBBIHNsaWRlIGFjdGlvbiB1c3VhbGx5IHdpbGwgbmFycm93 IHRvIGl0cyBvd24KICAgICBjb250ZW50cy4gIEl0IGNhbiBjcmVhdGUgbmV3IHNsaWRlcyBieSBj YWxsaW5nCiAgICAg4oCYZHNsaWRlLS1tYWtlLXNsaWRl4oCZLCB3aGVyZSBpdCBjYW4gb3ZlcnJp ZGUgdGhlbSB0byBwcmV2ZW50IHRoZW0KICAgICBmcm9tIG5hcnJvd2luZy4gIFRoZSBzbGlkZSBh Y3Rpb24gaXMgYWx3YXlzIGNhbGxlZCBiZWZvcmUgYW55IG90aGVyCiAgICAgYWN0aW9uLCB3aGV0 aGVyIGdvaW5nIGluIGZvcndhcmQgb3IgcmV2ZXJzZS4KCh8KRmlsZTogZG9jdFZOM0YzLmluZm8s ICBOb2RlOiBGbG93IENvbnRyb2wsICBOZXh0OiBJbnN0YW50aWF0aW5nIFNsaWRlcywgIFByZXY6 IFN0YXRlZnVsIFNlcXVlbmNlLCAgVXA6IEhhY2tpbmcKCjcuMyBGbG93IENvbnRyb2wKPT09PT09 PT09PT09PT09PQoKRGVja3MsIHNsaWRlcywgYW5kIGFjdGlvbnMgaW1wbGVtZW50IHRoZSDigJhk c2xpZGUtc3RhdGVmdWwtc2VxdWVuY2XigJkKaW50ZXJmYWNlLiAgT24gZWFjaCBjYWxsIHRvIOKA mGRzbGlkZS1kZWNrLWZvcndhcmTigJkgb3IK4oCYZHNsaWRlLWRlY2stYmFja3dhcmTigJksIHRo ZSBkZWNrIHJlY2VpdmVzIHRoZSBmaXJzdCBjYWxsIHRvIGl0cwrigJhkc2xpZGUtZm9yd2FyZOKA mSBtZXRob2QuCgogICBGaXJzdCwgdGhlIGRlY2sgd2lsbCBjaGVjayBmb3IgYW55IHN0ZXAgY2Fs bGJhY2tzLiAgVGhlc2UgYXJlIGFkZGVkCndpdGgg4oCYZHNsaWRlLXB1c2gtc3RlcOKAmS4gIFRo ZSBkZWNrIGRlbGVnYXRlcyB0aGlzIHRvIHRoZSBzbGlkZS4gIFRoZQpzbGlkZSBtYXkgZGVsZWdh dGUgZG93biB0byBhbiBhY3Rpb24sIHdoaWNoIG1heSBkZWxlZ2F0ZSB0byBhIHNsaWRlLgoKICAg SW4gdGhlIG1vc3QgYmFzaWMgY2FzZSwgZWFjaCBkZWxlZ2F0ZSB3aWxsIHRyeSBhbGwgb2YgaXRz IGFjdGlvbnMKdW50aWwgb25lIHJldHVybnMgbm9uLW5pbC4gIFRoZSBkZWxlZ2F0ZSByZXR1cm5z IHRoZSBmaXJzdCBub24tbmlsbApyZXN1bHQsIGluZGljYXRpbmcgdGhhdCBwcm9ncmVzcyB3YXMg bWFkZS4gIElmIHRoZSBkZWxlZ2F0ZSByZXR1cm5zIG5pbCwKaXQgbWVhbnMgaXQgd2FzIHVuYWJs ZSB0byBtYWtlIHByb2dyZXNzLCBhbmQgc28gdGhlIGNhbGxlciB3aWxsIGluc3RlYWQKdHJ5IGl0 cyBvd24gbmV4dCBhY3Rpb24uCgogICBXaGVuZXZlciBhbGwgc2xpZGVzIGFuZCBhY3Rpb25zIHJl dHVybiBuaWwgYWxsIHRoZSB3YXkgYmFjayB1cCB0byB0aGUKZGVjaywgaXQgbG9va3MgZm9yIGEg bmV4dCBvciBwcmV2aW91cyB0b3AtbGV2ZWwgaGVhZGluZyB0byBtYWtlIGludG8gYQpzbGlkZS4g IElmIG5vbmUgaXMgZm91bmQsIGl0IGluZGljYXRlcyB0aGF0IHRoZSB1c2VyIGlzIGF0IHRoZSBi ZWdpbm5pbmcKb3IgZW5kIG9mIHRoZSBwcmVzZW50YXRpb24uCgogICBUaGUgZGVjayBvYmplY3Qg YW5kIHNsaWRlIGFjdGlvbnMgZnJlcXVlbnRseSBjcmVhdGUgbmV3IGNoaWxkcmVuIGZyb20Kb3Jn IGhlYWRpbmdzLiAgVGhleSBjYWxsIHRoZWlyIOKAmGRzbGlkZS1iZWdpbuKAmSBvciDigJhkc2xp ZGUtZW5k4oCZIG1ldGhvZHMKcmlnaHQgYWZ0ZXIgdGhhdC4gIElmIHRoZXNlIG1ldGhvZHMgZG9u J3QgaW5kaWNhdGUgcHJvZ3Jlc3MsIHRoZQrigJhkc2xpZGUtZm9yd2FyZOKAmSBvciDigJhkc2xp ZGUtYmFja+KAmSBtZXRob2Qgd2lsbCBiZSBjYWxsZWQuCgofCkZpbGU6IGRvY3RWTjNGMy5pbmZv LCAgTm9kZTogSW5zdGFudGlhdGluZyBTbGlkZXMsICBQcmV2OiBGbG93IENvbnRyb2wsICBVcDog SGFja2luZwoKNy40IEluc3RhbnRpYXRpbmcgU2xpZGVzCj09PT09PT09PT09PT09PT09PT09PT09 PQoKU2xpZGVzIGFyZSBjcmVhdGVkIGJ5IGNhbGxpbmcg4oCYZHNsaWRlLS1tYWtlLXNsaWRl4oCZ IHdpdGggYW4gb3JnIGVsZW1lbnQKZm9yIGEgaGVhZGluZy4gIFRoaXMgZnVuY3Rpb24gaW50ZXJw cmV0cyB0aGUgY2xhc3MgbmFtZSBhbmQgYXJndW1lbnRzCmZvciB0aGUgbmV3IHNsaWRlIGFuZCBp bnN0YW50aWF0ZXMgdGhlIG9iamVjdC4KCiAgIFRoZSBkZWZhdWx0IGNsYXNzZXMgYW5kIGFjdGlv bnMgY2FuIGJlIGNvbmZpZ3VyZWQgYXQgdGhlIGRvY3VtZW50IG9yCmN1c3RvbWl6ZSBsZXZlbC4g IFNldCB0aGUg4oCYRFNMSURFX0RFQ0tfQ0xBU1PigJkgYW5kIOKAmERTTElERV9TTElERV9DTEFT U+KAmQphcyB3ZWxsIGFzIG90aGVyIHByb3BlcnRpZXMgdGhhdCB3b3JrIGF0IHRoZSBoZWFkaW5n IGxldmVsLiAgVGhlIG9yZGVyCm9mIHByZWNlZGVuY2UgKCpOb3QgZnVsbHkgaW1wbGVtZW50ZWQq IPCfmqcpOgoKICAg4oCiIFByb3BlcnR5IGRlZmluaXRpb24gb2YgdGhlIGN1cnJlbnQgaGVhZGlu ZwogICDigKIgUHJvcGVydHkgZGVmaW5pdGlvbiBpbiB0aGUgZG9jdW1lbnQKICAg4oCiIEN1c3Rv bWl6ZSB2YXJpYWJsZQoKICAg4oCYZHNsaWRlLS1tYWtlLXNsaWRl4oCZIHdpbGwgbG9vayBpbiBv cmRlciBmb3IgdGhlIGhpZ2hlc3QgcHJlY2VkZW5jZQpzZXR0aW5nIGFuZCB0aGVuIGluc3RhbnRp YXRlIHRoZSBjbGFzcyB3aXRoIHRoYXQgdmFsdWUgaW4gdGhlIHNsb3QuCgofCkZpbGU6IGRvY3RW TjNGMy5pbmZvLCAgTm9kZTogQ29udHJpYnV0aW5nLCAgTmV4dDogVGhhbmtzLCAgUHJldjogSGFj a2luZywgIFVwOiBUb3AKCjggQ29udHJpYnV0aW5nCioqKioqKioqKioqKioqCgogICDigKIgU2lu Y2UgeW91IGxpa2VseSBqdXN0IG5lZWQgc29tZXRoaW5nIHRvIG1hZ2ljYWxseSBoYXBwZW4sIHRo ZQogICAgIHJlY29tbWVuZGVkIG9wdGlvbiBpcyB0byBwbGFjZSBhIGhhbWJ1cmdlciBpbiB0aGUg aGFtYnVyZ2VyIGphcgogICAgIChodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvcG9zaXRyb24t c29sdXRpb25zKSBhbmQgZmlsZSBhbiBpc3N1ZS4KICAg4oCiIElmIHlvdSBkbyBoYXZlIHRpbWUs IGV4Y2VsbGVudC4gIEhhcHB5IHRvIHN1cHBvcnQgeW91ciBQUidzIGFuZAogICAgIHByb3ZpZGUg Y29udGV4dCBhYm91dCB0aGUgYXJjaGl0ZWN0dXJlIGFuZCBiZWhhdmlvci4KCiogTWVudToKCiog V29yayBJbiBQcm9ncmVzcyDwn5qnOjoKCh8KRmlsZTogZG9jdFZOM0YzLmluZm8sICBOb2RlOiBX b3JrIEluIFByb2dyZXNzIPCfmqcsICBVcDogQ29udHJpYnV0aW5nCgo4LjEgV29yayBJbiBQcm9n cmVzcyDwn5qnCj09PT09PT09PT09PT09PT09PT09PT09CgpPcGVuIGlzc3VlcyBhbmQgZ2l2ZSBm ZWVkYmFjayBvbiBmZWF0dXJlIHJlcXVlc3RzLiAgQ29udHJpYnV0aW9ucwp3ZWxjb21lLgoKKiBN ZW51OgoKKiBTbGlkZSBBY3Rpb24gUHJlY2VkZW5jZTo6CiogU2Vjb25kYXJ5IENvbW1hbmRzOjoK KiBkc2xpZGUtZ290bywgc3RhcnRpbmcgZnJvbSBwb2ludDo6CiogQWZmaWxpYXRlZCBCdWZmZXJz OjoKKiBOb24tR3JhcGhpYyBEaXNwbGF5OjoKKiBJbXByb3BlciBMZXZlbHM6OgoqIENvdW50aW5n IFNsaWRlczo6CiogTm9uLU9yZyBTZXF1ZW5jZXM6OgoKHwpGaWxlOiBkb2N0Vk4zRjMuaW5mbywg IE5vZGU6IFNsaWRlIEFjdGlvbiBQcmVjZWRlbmNlLCAgTmV4dDogU2Vjb25kYXJ5IENvbW1hbmRz LCAgVXA6IFdvcmsgSW4gUHJvZ3Jlc3Mg8J+apwoKOC4xLjEgU2xpZGUgQWN0aW9uIFByZWNlZGVu Y2UKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCldoZW4gYSBzbGlkZSBpcyBjcmVhdGVk IGluIOKAmGRzbGlkZS1tYWtlLXNsaWRl4oCZLCBpdCBjYW4gb2J0YWluIHRoZW0gZnJvbQpzZXZl cmFsIHBsYWNlczoKICAg4oCiIHBhc3NlZCBpbiBhcmd1bWVudHMsIGFzIHNsaWRlIGFjdGlvbnMg ZG8gdG8gcHJldmVudCBjaGlsZHJlbiBmcm9tCiAgICAgdHJ5aW5nIHRvIGRpc3BsYXkgdGhlbXNl bHZlcwogICDigKIgcHJvcGVydGllcywgaG93IHNsaWRlcyBhcmUgdXN1YWxseSBjb25maWd1cmVk CiAgIOKAoiBjdXN0b21pemUgdmFyaWFibGVzIHRoYXQgc2V0IHRoZSBkZWZhdWx0IGFjdGlvbnMu CiAgIFRoZSBvcmRlciBvZiBwcmVjZWRlbmNlIGFuZCBjYXBhYmlsaXR5IHRvIG92ZXJyaWRlIG9w dGlvbnMgaXMgc3RpbGwKcHJldHR5IGltbWF0dXJlLgoKHwpGaWxlOiBkb2N0Vk4zRjMuaW5mbywg IE5vZGU6IFNlY29uZGFyeSBDb21tYW5kcywgIE5leHQ6IH9kc2xpZGUtZ290bywgc3RhcnRpbmcg ZnJvbSBwb2ludH8sICBQcmV2OiBTbGlkZSBBY3Rpb24gUHJlY2VkZW5jZSwgIFVwOiBXb3JrIElu IFByb2dyZXNzIPCfmqcKCjguMS4yIFNlY29uZGFyeSBDb21tYW5kcwotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KClNlZSB0aGUgc2VjdGlvbiBhYm91dCBiaW5kaW5ncyBmb3IgY29udGV4dC4gIFZp ZGVvIHBsYXkgb3Igb3RoZXIKc2l0dWF0aW9ucyB3aGVyZSB0aGUgcHJlc2VudGF0aW9uIG1pZ2h0 IGJyYW5jaCBzaG91bGQgYmUgc3VwcG9ydGVkIGJ5Cm92ZXJsb2FkaW5nIHRoZSBiZWhhdmlvciBv ZiDigJhkc2xpZGUtZGVjay1zdGFydOKAmS4gIEkgdGhpbmsgdGhpcyBjb21tYW5kCndpbGwgdHVy biBpbnRvIOKAmGRzbGlkZS1kZWNrLXNlY29uZGFyeeKAmSBpbiB0aGUg4oCYZHNsaWRlLW1vZGUt bWFw4oCZLgoKHwpGaWxlOiBkb2N0Vk4zRjMuaW5mbywgIE5vZGU6IH9kc2xpZGUtZ290bywgc3Rh cnRpbmcgZnJvbSBwb2ludH8sICBOZXh0OiBBZmZpbGlhdGVkIEJ1ZmZlcnMsICBQcmV2OiBTZWNv bmRhcnkgQ29tbWFuZHMsICBVcDogV29yayBJbiBQcm9ncmVzcyDwn5qnCgo4LjEuMyDigJhkc2xp ZGUtZ290b+KAmSwgc3RhcnRpbmcgZnJvbSBwb2ludAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCgpTaW5jZSBub3QgbWFueSBhY3Rpb25zIGN1cnJlbnRseSBoYXZlIGlt cGxlbWVudGVkIHRoaXMgdmVyeSBhY2N1cmF0ZWx5LApwbGF5aW5nIGZyb20gcG9pbnQgaXMgbGlr ZWx5IG5vdCB0aGF0IGFjY3VyYXRlLiAgUHJvZ3Jlc3MgdXBkYXRpbmcgaW4KdGhlIGJhc2UgYnVm ZmVyIGlzIGFsc28gY3VycmVudGx5IG9ubHkgYXQgdGhlIHNsaWRlIGxldmVsIG9mCmdyYW51bGFy aXR5LgoKHwpGaWxlOiBkb2N0Vk4zRjMuaW5mbywgIE5vZGU6IEFmZmlsaWF0ZWQgQnVmZmVycywg IE5leHQ6IE5vbi1HcmFwaGljIERpc3BsYXksICBQcmV2OiB/ZHNsaWRlLWdvdG8sIHN0YXJ0aW5n IGZyb20gcG9pbnR/LCAgVXA6IFdvcmsgSW4gUHJvZ3Jlc3Mg8J+apwoKOC4xLjQgQWZmaWxpYXRl ZCBCdWZmZXJzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhlcmUgaXMgbm8gdHJhY2tpbmcg d2hldGhlciBhIGJ1ZmZlciBpcyBwYXJ0IG9mIHRoZSBwcmVzZW50YXRpb24gb3IKbm90LiAgSG93 IHdvdWxkIGEgYnVmZmVyIGJlY29tZSBvbmU/ICBTaG91bGQgaXQgYmUgaW1wbGljaXQ/ICBXaXRo b3V0CmFueSBzb3J0IG9mIHRyYWNraW5nLCB0aGUgY29uc2VxdWVuY2UgaXMgdGhhdCBoYXZpbmcg YSBwcmVzZW50YXRpb24gb3BlbgpsZWF2ZXMgdGhlIG1pbm9yIG1vZGUgYmluZGluZ3MgaG90LiAg VGhlc2UgY29tbWFuZHMgZG8gd2VpcmQgdGhpbmdzIHdoZW4KcnVuIGZyb20gdGhlc2Ugc2l0dWF0 aW9ucywgZXNwZWNpYWxseSBpZiBydW5uaW5nIGJhYmVsIHNjcmlwdHMsIHNvIHNvbWUKa2luZCBv ZiBmaXJzdC1jbGFzcyBidWZmZXIgYWZmaWxpYXRpb24gc2VlbXMgbmVjZXNzYXJ5LgoKHwpGaWxl OiBkb2N0Vk4zRjMuaW5mbywgIE5vZGU6IE5vbi1HcmFwaGljIERpc3BsYXksICBOZXh0OiBJbXBy b3BlciBMZXZlbHMsICBQcmV2OiBBZmZpbGlhdGVkIEJ1ZmZlcnMsICBVcDogV29yayBJbiBQcm9n cmVzcyDwn5qnCgo4LjEuNSBOb24tR3JhcGhpYyBEaXNwbGF5Ci0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KCkZvciB0ZXJtaW5hbHMsIHRoZSBsaW5lLWhlaWdodCBiYXNlZCBzbGlkZS1pbiBlZmZl Y3QgaXMgbm90IHN1cHBvcnRlZC4KCh8KRmlsZTogZG9jdFZOM0YzLmluZm8sICBOb2RlOiBJbXBy b3BlciBMZXZlbHMsICBOZXh0OiBDb3VudGluZyBTbGlkZXMsICBQcmV2OiBOb24tR3JhcGhpYyBE aXNwbGF5LCAgVXA6IFdvcmsgSW4gUHJvZ3Jlc3Mg8J+apwoKOC4xLjYgSW1wcm9wZXIgTGV2ZWxz Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKQ2hpbGRyZW4gd2l0aCBubyBwYXJlbnRzIG9yIG1pc3Np bmcgYSBsZXZlbCBhcmUgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQKYW5kIGxpa2VseSBjYXVzZSBi YWQgYmVoYXZpb3IuCgofCkZpbGU6IGRvY3RWTjNGMy5pbmZvLCAgTm9kZTogQ291bnRpbmcgU2xp ZGVzLCAgTmV4dDogTm9uLU9yZyBTZXF1ZW5jZXMsICBQcmV2OiBJbXByb3BlciBMZXZlbHMsICBV cDogV29yayBJbiBQcm9ncmVzcyDwn5qnCgo4LjEuNyBDb3VudGluZyBTbGlkZXMKLS0tLS0tLS0t LS0tLS0tLS0tLS0tCgpFc3BlY2lhbGx5IGlmIHNsaWRlcyBsYXVuY2ggc3ViLXNlcXVlbmNlcywg YW5kIHRoZXkgZG8gaXQgZnJvbSBMaXNwLAp0aGlzIGlzIGhhcmQuICBCdWZmZXIgc2xpZGVzIGFu ZCBhbHNvIHNsaWRlIGFjdGlvbnMgbWFrZSBpdCBzb21ld2hhdAphbWJpZ3VvdXMuICBDb3VudGlu ZyB0cmVlcyBvciB0cmFja2luZyB0aGUgcG9pbnQgbWlnaHQgYmUgZWFzaWVyLiAgQQrigJhjaGls ZHJlbuKAmSBtZXRob2QgZm9yIHNlcXVlbmNlcyB3b3JrcyBhcyBsb25nIGFzIHNlcXVlbmNlcyBh Y3R1YWxseQppbXBsZW1lbnQgaXQuCgofCkZpbGU6IGRvY3RWTjNGMy5pbmZvLCAgTm9kZTogTm9u LU9yZyBTZXF1ZW5jZXMsICBQcmV2OiBDb3VudGluZyBTbGlkZXMsICBVcDogV29yayBJbiBQcm9n cmVzcyDwn5qnCgo4LjEuOCBOb24tT3JnIFNlcXVlbmNlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQoKVGhlcmUncyBubyBjb25jcmV0ZSByZWFzb24gd2h5IHByZXNlbnRhdGlvbnMgbmVlZCB0byBz dGFydCB3aXRoIE9yZyBtb2RlCmJ1ZmZlcnMuICBUaGUgZGVjayBvYmplY3QgY291bGQgaGF2ZSBp dHMgb3JnLXNwZWNpZmljIGZ1bmN0aW9uYWxpdHkKcHVzaGVkIGRvd24gdG8gYW4gb3JnLW1vZGUg Y2xhc3MuICBUaGUgb25seSByZXF1aXJlbWVudCBpcyB0byBiZSBhYmxlIHRvCmh5ZHJhdGUgc29t ZSBzdGF0ZWZ1bCBzZXF1ZW5jZXMsIHdoaWNoIG1heSBoeWRyYXRlIGFuZCBjYWxsIGludG8Kc3Vi LXNlcXVlbmNlcywgbWVhbmluZyBhbnl0aGluZyBpcyBwcmV0dHkgdHJpdmlhbGx5IHBvc3NpYmxl LgoKHwpGaWxlOiBkb2N0Vk4zRjMuaW5mbywgIE5vZGU6IFRoYW5rcywgIE5leHQ6IFByb251bmNp YXRpb24sICBQcmV2OiBDb250cmlidXRpbmcsICBVcDogVG9wCgo5IFRoYW5rcwoqKioqKioqKgoK VGhpcyBwYWNrYWdlIGlzIGEgZGlyZWN0IGRlc2NlbmRhbnQgb2YgVGFrYWFraSBJU0hJS0FXQSdz IG9yZy10cmVlLXNsaWRlCihodHRwczovL2dpdGh1Yi5jb20vdGFrYXhwL29yZy10cmVlLXNsaWRl KSBwYWNrYWdlLiAgTWFueSBvZiB0aGUgaWRlYXMKYW5kIHNvbWUgb2YgdGhlIGltcGxlbWVudGF0 aW9ucyB3ZXJlIGVpdGhlciBpbmhlcml0ZWQgb3IgaW5zcGlyZWQgYnkKaWRlYXMgZnJvbSB0aGF0 IHBhY2thZ2UuICBUaGlzIHBhY2thZ2Ugd291bGQgbm90IGV4aXN0IHdpdGhvdXQgdGhlCmluc3Bp cmF0aW9uLiAgVGhhbmtzIHRvIGV2ZXJ5b25lIHdobyBjb250cmlidXRlZCBvbiBvcmctdHJlZS1z bGlkZS4KCh8KRmlsZTogZG9jdFZOM0YzLmluZm8sICBOb2RlOiBQcm9udW5jaWF0aW9uLCAgTmV4 dDogSW5kaWNlcywgIFByZXY6IFRoYW5rcywgIFVwOiBUb3AKCjEwIFByb251bmNpYXRpb24KKioq KioqKioqKioqKioqKgoKV2hpbGUgaXQgbWF5IGhhdmUgYmVlbiBzcG9rZW4gbWFueSB0aW1lcyBi ZWZvcmUsIGxldCBpdCBiZSBvZmZpY2lhbCB0aGF0CnRoZXJlIGlzIG5vIGNvcnJlY3Qgd2F5IHRv IHByb25vdW5jZSBEU0wgSURFLiAgSGVyZSBhcmUgc29tZSBvcHRpb25zOgoKICAg4oCiIEQtUy1M IEktRC1FOiBhcyBpZiBpdCBpcyBhbiBJREUgZm9yIGRlc2lnbmluZyBEU0xzLCBjbGVhcmx5IGZh bHNlCiAgICAgYW5kIHByZXRlbnRpb3VzIHNvdW5kaW5nLCBidXQgdGhvc2Ugd2hvIGtlZXAgc2Nv cmUgbG9zZSBmb3IgYmVpbmcKICAgICB0b28gYW54aW91cyB0byB3aW4KICAg4oCiIEQnc2xpZGU6 IHBlcmhhcHMsICJ0aGUgc2xpZGUiCiAgIOKAoiBERUVFIHNsaWRlOiBXZSBhcmUgZ29pbmcgdW4g dW4tc2xpZGUgeW91ciBzbGlkZS4gIFBvd2VycG9pbnQgaXMgbm8KICAgICBtb3JlLiAgRW1hY3Mg aGFzIHRyaXVtcGhlZCBvdmVyIHRoZSBib2FyZCByb29tIGF0IGxhc3QKCiAgIFBsZWFzZSBzcHJl YWQgdGhlc2UgYW5kIG90aGVyIGludGVudGlvbmFsbHkgd3JvbmdmdWwgcHJvbnVuY2lhdGlvbnMK dG8gcHJvdGVjdCB0aG9zZSB3aG8gaGF2ZSBvbmx5IGV2ZXIgcmVhZCB0aGUgbmFtZSBmcm9tIHBl cnNlY3V0aW9uIGJ5CnNlbGYtYW5ub2ludGVkIGluLWdyb3VwcyB3aG8gY2xhaW0gdG8ga25vdyB0 aGUgY29ycmVjdCB3YXkgdG8gcHJvbm91bmNlCnRoaXMgbWFkZSB1cCB3b3JkLgoKHwpGaWxlOiBk b2N0Vk4zRjMuaW5mbywgIE5vZGU6IEluZGljZXMsICBQcmV2OiBQcm9udW5jaWF0aW9uLCAgVXA6 IFRvcAoKMTEgSW5kaWNlcwoqKioqKioqKioqCgoqIE1lbnU6CgoqIENvbW1hbmQgYW5kIEZ1bmN0 aW9uIGluZGV4OjoKKiBDb25jZXB0IGluZGV4OjoKKiBWYXJpYWJsZSBpbmRleDo6CgofCkZpbGU6 IGRvY3RWTjNGMy5pbmZvLCAgTm9kZTogQ29tbWFuZCBhbmQgRnVuY3Rpb24gaW5kZXgsICBOZXh0 OiBDb25jZXB0IGluZGV4LCAgVXA6IEluZGljZXMKCjExLjEgQ29tbWFuZCBhbmQgRnVuY3Rpb24g aW5kZXgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKAAhbaW5kZXgACF0KKiBNZW51 OgoKKiBkc2xpZGUtLW1ha2Utc2xpZGU6ICAgICAgICAgICAgICAgICAgICBJbnN0YW50aWF0aW5n IFNsaWRlcy4gKGxpbmUgIDYpCiogZHNsaWRlLWFjdGlvbjogICAgICAgICAgICAgICAgICAgICAg ICAgQ3JlYXRpbmcgQWN0aW9ucy4gICAgIChsaW5lIDE3KQoqIGRzbGlkZS1hY3Rpb24tYmFiZWw6 ICAgICAgICAgICAgICAgICAgIEJhYmVsIFNjcmlwdGluZy4gICAgICAobGluZSAgNikKKiBkc2xp ZGUtYWN0aW9uLWhpZGUtbWFya3VwOiAgICAgICAgICAgICBIaWRpbmcgTWFya3VwLiAgICAgICAg KGxpbmUgIDYpCiogZHNsaWRlLWJhY2t3YXJkOiAgICAgICAgICAgICAgICAgICAgICAgU3RhdGVm dWwgU2VxdWVuY2UuICAgIChsaW5lIDEwKQoqIGRzbGlkZS1iZWdpbjogICAgICAgICAgICAgICAg ICAgICAgICAgIFN0YXRlZnVsIFNlcXVlbmNlLiAgICAobGluZSAxNykKKiBkc2xpZGUtY3Vyc29y LWhpZGU6ICAgICAgICAgICAgICAgICAgICBDdXJzb3IgVmlzaWJpbGl0eS4gICAgKGxpbmUgIDYp CiogZHNsaWRlLWN1cnNvci1yZXN0b3JlOiAgICAgICAgICAgICAgICAgQ3Vyc29yIFZpc2liaWxp dHkuICAgIChsaW5lICA2KQoqIGRzbGlkZS1kZWNrLWJhY2t3YXJkOiAgICAgICAgICAgICAgICAg IFR3byBCdXR0b24gSW50ZXJmYWNlLiAobGluZSAxNSkKKiBkc2xpZGUtZGVjay1kZXZlbG9wOiAg ICAgICAgICAgICAgICAgICBOYXJyYXRpbmcuICAgICAgICAgICAgKGxpbmUgMTQpCiogZHNsaWRl LWRlY2stZm9yd2FyZDogICAgICAgICAgICAgICAgICAgVHdvIEJ1dHRvbiBJbnRlcmZhY2UuIChs aW5lIDE0KQoqIGRzbGlkZS1kZWNrLXN0YXJ0OiAgICAgICAgICAgICAgICAgICAgIFR3byBCdXR0 b24gSW50ZXJmYWNlLiAobGluZSAxNykKKiBkc2xpZGUtZGVjay1zdG9wOiAgICAgICAgICAgICAg ICAgICAgICBUd28gQnV0dG9uIEludGVyZmFjZS4gKGxpbmUgMjMpCiogZHNsaWRlLWVuZDogICAg ICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGVmdWwgU2VxdWVuY2UuICAgIChsaW5lIDE3KQoq IGRzbGlkZS1maW5hbDogICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlZnVsIFNlcXVlbmNl LiAgICAobGluZSAyMikKKiBkc2xpZGUtZm9yd2FyZDogICAgICAgICAgICAgICAgICAgICAgICBT dGF0ZWZ1bCBTZXF1ZW5jZS4gICAgKGxpbmUgMTApCiogZHNsaWRlLXB1c2gtc3RlcDogICAgICAg ICAgICAgICAgICAgICAgU3RlcCBDYWxsYmFja3MuICAgICAgIChsaW5lICA2KQoqIGRzbGlkZS1z ZWN0aW9uLW5leHQ6ICAgICAgICAgICAgICAgICAgIEEgQ3VzdG9tIEFjdGlvbi4gICAgICAobGlu ZSAgNikKKiBkc2xpZGUtc2VjdGlvbi1wcmV2aW91czogICAgICAgICAgICAgICBBIEN1c3RvbSBB Y3Rpb24uICAgICAgKGxpbmUgIDYpCiogZHNsaWRlLXNsaWRlLWFjdGlvbjogICAgICAgICAgICAg ICAgICAgQ3JlYXRpbmcgQWN0aW9ucy4gICAgIChsaW5lIDEzKQoqIGRzbGlkZS1zdGF0ZWZ1bC1z ZXF1ZW5jZTogICAgICAgICAgICAgIFN0YXRlZnVsIFNlcXVlbmNlLiAgICAobGluZSAgNikKCh8K RmlsZTogZG9jdFZOM0YzLmluZm8sICBOb2RlOiBDb25jZXB0IGluZGV4LCAgTmV4dDogVmFyaWFi bGUgaW5kZXgsICBQcmV2OiBDb21tYW5kIGFuZCBGdW5jdGlvbiBpbmRleCwgIFVwOiBJbmRpY2Vz CgoxMS4yIENvbmNlcHQgaW5kZXgKPT09PT09PT09PT09PT09PT09CgoACFtpbmRleAAIXQoqIE1l bnU6CgoqIGNvbW1lbnRlZCBoZWFkaW5nczogICAgICAgICAgICAgICAgICAgIEZpbHRlcmluZyBI ZWFkaW5ncy4gICAgKGxpbmUgNikKKiBwdXNoaW5nIHN0ZXBzOiAgICAgICAgICAgICAgICAgICAg ICAgICBTdGVwIENhbGxiYWNrcy4gICAgICAgIChsaW5lIDYpCiogc2NyaXB0aW5nIGJhYmVsIHN0 ZXBzOiAgICAgICAgICAgICAgICAgQmFiZWwgU2NyaXB0aW5nLiAgICAgICAobGluZSA2KQoKHwpG aWxlOiBkb2N0Vk4zRjMuaW5mbywgIE5vZGU6IFZhcmlhYmxlIGluZGV4LCAgUHJldjogQ29uY2Vw dCBpbmRleCwgIFVwOiBJbmRpY2VzCgoxMS4zIFZhcmlhYmxlIGluZGV4Cj09PT09PT09PT09PT09 PT09PT0KCgAIW2luZGV4AAhdCiogTWVudToKCiogZHNsaWRlLWRlZmF1bHQtYWN0aW9uczogICAg ICAgICAgICAgICAgQWRkaW5nIEFjdGlvbnMuICAgICAgICAobGluZSA2KQoqIGRzbGlkZS1oZWFk ZXI6ICAgICAgICAgICAgICAgICAgICAgICAgIEhlYWRlciBLZXl3b3Jkcy4gICAgICAgKGxpbmUg NikKKiBkc2xpZGUtaGlkZS1tYXJrdXAtdHlwZXM6ICAgICAgICAgICAgICBIaWRpbmcgTWFya3Vw LiAgICAgICAgIChsaW5lIDYpCiogZHNsaWRlLWhpZGUtdGFnczogICAgICAgICAgICAgICAgICAg ICAgSGlkaW5nIFRvZG9zIGFuZCBUYWdzLiAobGluZSA2KQoqIGRzbGlkZS1oaWRlLXRvZG86ICAg ICAgICAgICAgICAgICAgICAgIEhpZGluZyBUb2RvcyBhbmQgVGFncy4gKGxpbmUgNikKCgofClRh ZyBUYWJsZToKTm9kZTogVG9wfzM1MDE5Ck5vZGU6IEludHJvZHVjdGlvbn8zNzUxMgpOb2RlOiBE ZXNpZ24gR29hbHN/MzgzOTcKTm9kZTogU3RyZW5ndGhzfzM5NTQ2Ck5vZGU6IEdsb3NzYXJ5fzM5 OTc5Ck5vZGU6IE9yZyBNb2RlIFRlcm1zfzQxODM0Ck5vZGU6IENyZWF0aW5nfzQyNzQyCk5vZGU6 IEFjdGlvbnN/NDMzODcKTm9kZTogQWRkaW5nIEFjdGlvbnN/NDQ2MTMKTm9kZTogQWN0aW9uIEFy Z3VtZW50c380NTY5NApOb2RlOiBBbm5vdGF0aW5nIEVsZW1lbnRzfzQ2ODIzCk5vZGU6IEJhYmVs IFNjcmlwdGluZ380Nzc1MwpOb2RlOiBTdGVwIENhbGxiYWNrc380OTQyNQpOb2RlOiBIaWRpbmcg TWFya3VwfzQ5ODg4Ck5vZGU6IEhpZGluZyBUb2RvcyBhbmQgVGFnc381MDI3OApOb2RlOiBGaWx0 ZXJpbmcgSGVhZGluZ3N/NTA1NTEKTm9kZTogSGVhZGVyIEtleXdvcmRzfzUxMDc2Ck5vZGU6IEZp bGUgTG9jYWwgVmFyaWFibGVzfzUxNTAwCk5vZGU6IFByZXNlbnRpbmd/NTE4OTQKTm9kZTogVHdv IEJ1dHRvbiBJbnRlcmZhY2V/NTIyNTQKTm9kZTogQ29udGVudHMgSW50ZXJmYWNlfzUzMTk3Ck5v ZGU6IE5hcnJhdGluZ381Mzg3MgpOb2RlOiBDdXJzb3IgVmlzaWJpbGl0eX81NTEwNApOb2RlOiBD b25maWd1cmluZ381NTM4NQpOb2RlOiBCaW5kaW5nfzU1OTgzCk5vZGU6IFNlY29uZGFyeSBDb21t YW5kcyDwn5qnfzU2Nzk5Ck5vZGU6IEhvb2tzfzU3MTQ1Ck5vZGU6IFBlci1TbGlkZSBBY3Rpb25z fzU4NzQ2Ck5vZGU6IFN0ZWV6aW5nIE9yZ381OTI0MgpOb2RlOiBFeHRlbmRpbmd/NjAyOTYKTm9k ZTogQ3JlYXRpbmcgQWN0aW9uc382MDY2OApOb2RlOiBBIEN1c3RvbSBBY3Rpb25/NjE2MjQKTm9k ZTogRGVmYXVsdCBDbGFzc2VzfzYzODM3Ck5vZGU6IEhhY2tpbmd/NjQ4NjcKTm9kZTogT2JqZWN0 cyAmIE93bmVyc2hpcH82NTE5NApOb2RlOiBTdGF0ZWZ1bCBTZXF1ZW5jZX82NTk1MApOb2RlOiBB Y3Rpb25zICgxKX82NzA1NwpOb2RlOiBGbG93IENvbnRyb2x/Njc2MzgKTm9kZTogSW5zdGFudGlh dGluZyBTbGlkZXN/NjkwNjQKTm9kZTogQ29udHJpYnV0aW5nfzY5OTI4Ck5vZGU6IFdvcmsgSW4g UHJvZ3Jlc3Mg8J+ap383MDQyMgpOb2RlOiBTbGlkZSBBY3Rpb24gUHJlY2VkZW5jZX83MDgyOQpO b2RlOiBTZWNvbmRhcnkgQ29tbWFuZHN/NzEzOTkKTm9kZTogZHNsaWRlLWdvdG8sIHN0YXJ0aW5n IGZyb20gcG9pbnR/NzE4ODgKTm9kZTogQWZmaWxpYXRlZCBCdWZmZXJzfzcyMzQxCk5vZGU6IE5v bi1HcmFwaGljIERpc3BsYXl/NzI5NTYKTm9kZTogSW1wcm9wZXIgTGV2ZWxzfzczMjEyCk5vZGU6 IENvdW50aW5nIFNsaWRlc383MzQ4OQpOb2RlOiBOb24tT3JnIFNlcXVlbmNlc383Mzk1NApOb2Rl OiBUaGFua3N/NzQ0NDcKTm9kZTogUHJvbnVuY2lhdGlvbn83NDkwNwpOb2RlOiBJbmRpY2Vzfzc1 NzQ2Ck5vZGU6IENvbW1hbmQgYW5kIEZ1bmN0aW9uIGluZGV4fzc1OTE5Ck5vZGU6IENvbmNlcHQg aW5kZXh/Nzc2MzQKTm9kZTogVmFyaWFibGUgaW5kZXh/NzgwMzIKHwpFbmQgVGFnIFRhYmxlCgof CkxvY2FsIFZhcmlhYmxlczoKY29kaW5nOiB1dGYtOApFbmQ6CgAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAZHNsaWRlLTAuNS40LjAuMjAyNDExMjMuNjI3NDkvQ09QWUlORwAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAw MDA2NjQAMDAwMTc1MAAwMDAxNzUwADAwMDAwMTA0NTEzADE0NzIwMzEzMzA2ADAxMzY3MwAgMAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHBoaQAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcGhpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAgICAgICAgICAgICAgICAgICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNF CiAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAzLCAyOSBKdW5lIDIwMDcKCiBDb3B5cmln aHQgKEMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIDxodHRwOi8vZnNmLm9y Zy8+CiBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRp bSBjb3BpZXMKIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5v dCBhbGxvd2VkLgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZWFtYmxlCgogIFRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBhIGZyZWUsIGNvcHlsZWZ0IGxpY2Vuc2UgZm9y CnNvZnR3YXJlIGFuZCBvdGhlciBraW5kcyBvZiB3b3Jrcy4KCiAgVGhlIGxpY2Vuc2VzIGZvciBt b3N0IHNvZnR3YXJlIGFuZCBvdGhlciBwcmFjdGljYWwgd29ya3MgYXJlIGRlc2lnbmVkCnRvIHRh a2UgYXdheSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSB0aGUgd29ya3MuICBCeSBj b250cmFzdCwKdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1 YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8Kc2hhcmUgYW5kIGNoYW5nZSBhbGwgdmVyc2lvbnMgb2Yg YSBwcm9ncmFtLS10byBtYWtlIHN1cmUgaXQgcmVtYWlucyBmcmVlCnNvZnR3YXJlIGZvciBhbGwg aXRzIHVzZXJzLiAgV2UsIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHVzZSB0aGUKR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vc3Qgb2Ygb3VyIHNvZnR3YXJlOyBpdCBhcHBs aWVzIGFsc28gdG8KYW55IG90aGVyIHdvcmsgcmVsZWFzZWQgdGhpcyB3YXkgYnkgaXRzIGF1dGhv cnMuICBZb3UgY2FuIGFwcGx5IGl0IHRvCnlvdXIgcHJvZ3JhbXMsIHRvby4KCiAgV2hlbiB3ZSBz cGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdApw cmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBz dXJlIHRoYXQgeW91CmhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJl ZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKdGhlbSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJl Y2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdCBpZiB5b3UKd2FudCBpdCwgdGhhdCB5b3Ug Y2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcKZnJlZSBw cm9ncmFtcywgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCgogIFRv IHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gcHJldmVudCBvdGhlcnMgZnJvbSBkZW55 aW5nIHlvdQp0aGVzZSByaWdodHMgb3IgYXNraW5nIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0 cy4gIFRoZXJlZm9yZSwgeW91IGhhdmUKY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGlmIHlvdSBk aXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmCnlvdSBtb2RpZnkgaXQ6IHJl c3BvbnNpYmlsaXRpZXMgdG8gcmVzcGVjdCB0aGUgZnJlZWRvbSBvZiBvdGhlcnMuCgogIEZvciBl eGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRo ZXIKZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgcGFzcyBvbiB0byB0aGUgcmVjaXBpZW50 cyB0aGUgc2FtZQpmcmVlZG9tcyB0aGF0IHlvdSByZWNlaXZlZC4gIFlvdSBtdXN0IG1ha2Ugc3Vy ZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZQpvciBjYW4gZ2V0IHRoZSBzb3VyY2UgY29kZS4gIEFu ZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleQprbm93IHRoZWlyIHJpZ2h0 cy4KCiAgRGV2ZWxvcGVycyB0aGF0IHVzZSB0aGUgR05VIEdQTCBwcm90ZWN0IHlvdXIgcmlnaHRz IHdpdGggdHdvIHN0ZXBzOgooMSkgYXNzZXJ0IGNvcHlyaWdodCBvbiB0aGUgc29mdHdhcmUsIGFu ZCAoMikgb2ZmZXIgeW91IHRoaXMgTGljZW5zZQpnaXZpbmcgeW91IGxlZ2FsIHBlcm1pc3Npb24g dG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IGl0LgoKICBGb3IgdGhlIGRldmVsb3Bl cnMnIGFuZCBhdXRob3JzJyBwcm90ZWN0aW9uLCB0aGUgR1BMIGNsZWFybHkgZXhwbGFpbnMKdGhh dCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlIHNvZnR3YXJlLiAgRm9yIGJvdGgg dXNlcnMnIGFuZAphdXRob3JzJyBzYWtlLCB0aGUgR1BMIHJlcXVpcmVzIHRoYXQgbW9kaWZpZWQg dmVyc2lvbnMgYmUgbWFya2VkIGFzCmNoYW5nZWQsIHNvIHRoYXQgdGhlaXIgcHJvYmxlbXMgd2ls bCBub3QgYmUgYXR0cmlidXRlZCBlcnJvbmVvdXNseSB0bwphdXRob3JzIG9mIHByZXZpb3VzIHZl cnNpb25zLgoKICBTb21lIGRldmljZXMgYXJlIGRlc2lnbmVkIHRvIGRlbnkgdXNlcnMgYWNjZXNz IHRvIGluc3RhbGwgb3IgcnVuCm1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBzb2Z0d2FyZSBpbnNp ZGUgdGhlbSwgYWx0aG91Z2ggdGhlIG1hbnVmYWN0dXJlcgpjYW4gZG8gc28uICBUaGlzIGlzIGZ1 bmRhbWVudGFsbHkgaW5jb21wYXRpYmxlIHdpdGggdGhlIGFpbSBvZgpwcm90ZWN0aW5nIHVzZXJz JyBmcmVlZG9tIHRvIGNoYW5nZSB0aGUgc29mdHdhcmUuICBUaGUgc3lzdGVtYXRpYwpwYXR0ZXJu IG9mIHN1Y2ggYWJ1c2Ugb2NjdXJzIGluIHRoZSBhcmVhIG9mIHByb2R1Y3RzIGZvciBpbmRpdmlk dWFscyB0bwp1c2UsIHdoaWNoIGlzIHByZWNpc2VseSB3aGVyZSBpdCBpcyBtb3N0IHVuYWNjZXB0 YWJsZS4gIFRoZXJlZm9yZSwgd2UKaGF2ZSBkZXNpZ25lZCB0aGlzIHZlcnNpb24gb2YgdGhlIEdQ TCB0byBwcm9oaWJpdCB0aGUgcHJhY3RpY2UgZm9yIHRob3NlCnByb2R1Y3RzLiAgSWYgc3VjaCBw cm9ibGVtcyBhcmlzZSBzdWJzdGFudGlhbGx5IGluIG90aGVyIGRvbWFpbnMsIHdlCnN0YW5kIHJl YWR5IHRvIGV4dGVuZCB0aGlzIHByb3Zpc2lvbiB0byB0aG9zZSBkb21haW5zIGluIGZ1dHVyZSB2 ZXJzaW9ucwpvZiB0aGUgR1BMLCBhcyBuZWVkZWQgdG8gcHJvdGVjdCB0aGUgZnJlZWRvbSBvZiB1 c2Vycy4KCiAgRmluYWxseSwgZXZlcnkgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkg Ynkgc29mdHdhcmUgcGF0ZW50cy4KU3RhdGVzIHNob3VsZCBub3QgYWxsb3cgcGF0ZW50cyB0byBy ZXN0cmljdCBkZXZlbG9wbWVudCBhbmQgdXNlIG9mCnNvZnR3YXJlIG9uIGdlbmVyYWwtcHVycG9z ZSBjb21wdXRlcnMsIGJ1dCBpbiB0aG9zZSB0aGF0IGRvLCB3ZSB3aXNoIHRvCmF2b2lkIHRoZSBz cGVjaWFsIGRhbmdlciB0aGF0IHBhdGVudHMgYXBwbGllZCB0byBhIGZyZWUgcHJvZ3JhbSBjb3Vs ZAptYWtlIGl0IGVmZmVjdGl2ZWx5IHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB0aGUg R1BMIGFzc3VyZXMgdGhhdApwYXRlbnRzIGNhbm5vdCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgcHJv Z3JhbSBub24tZnJlZS4KCiAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNv cHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKbW9kaWZpY2F0aW9uIGZvbGxvdy4KCiAgICAgICAgICAg ICAgICAgICAgICAgVEVSTVMgQU5EIENPTkRJVElPTlMKCiAgMC4gRGVmaW5pdGlvbnMuCgogICJU aGlzIExpY2Vuc2UiIHJlZmVycyB0byB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlLgoKICAiQ29weXJpZ2h0IiBhbHNvIG1lYW5zIGNvcHlyaWdodC1saWtlIGxhd3Mg dGhhdCBhcHBseSB0byBvdGhlciBraW5kcyBvZgp3b3Jrcywgc3VjaCBhcyBzZW1pY29uZHVjdG9y IG1hc2tzLgoKICAiVGhlIFByb2dyYW0iIHJlZmVycyB0byBhbnkgY29weXJpZ2h0YWJsZSB3b3Jr IGxpY2Vuc2VkIHVuZGVyIHRoaXMKTGljZW5zZS4gIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2Vk IGFzICJ5b3UiLiAgIkxpY2Vuc2VlcyIgYW5kCiJyZWNpcGllbnRzIiBtYXkgYmUgaW5kaXZpZHVh bHMgb3Igb3JnYW5pemF0aW9ucy4KCiAgVG8gIm1vZGlmeSIgYSB3b3JrIG1lYW5zIHRvIGNvcHkg ZnJvbSBvciBhZGFwdCBhbGwgb3IgcGFydCBvZiB0aGUgd29yawppbiBhIGZhc2hpb24gcmVxdWly aW5nIGNvcHlyaWdodCBwZXJtaXNzaW9uLCBvdGhlciB0aGFuIHRoZSBtYWtpbmcgb2YgYW4KZXhh Y3QgY29weS4gIFRoZSByZXN1bHRpbmcgd29yayBpcyBjYWxsZWQgYSAibW9kaWZpZWQgdmVyc2lv biIgb2YgdGhlCmVhcmxpZXIgd29yayBvciBhIHdvcmsgImJhc2VkIG9uIiB0aGUgZWFybGllciB3 b3JrLgoKICBBICJjb3ZlcmVkIHdvcmsiIG1lYW5zIGVpdGhlciB0aGUgdW5tb2RpZmllZCBQcm9n cmFtIG9yIGEgd29yayBiYXNlZApvbiB0aGUgUHJvZ3JhbS4KCiAgVG8gInByb3BhZ2F0ZSIgYSB3 b3JrIG1lYW5zIHRvIGRvIGFueXRoaW5nIHdpdGggaXQgdGhhdCwgd2l0aG91dApwZXJtaXNzaW9u LCB3b3VsZCBtYWtlIHlvdSBkaXJlY3RseSBvciBzZWNvbmRhcmlseSBsaWFibGUgZm9yCmluZnJp bmdlbWVudCB1bmRlciBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXcsIGV4Y2VwdCBleGVjdXRpbmcg aXQgb24gYQpjb21wdXRlciBvciBtb2RpZnlpbmcgYSBwcml2YXRlIGNvcHkuICBQcm9wYWdhdGlv biBpbmNsdWRlcyBjb3B5aW5nLApkaXN0cmlidXRpb24gKHdpdGggb3Igd2l0aG91dCBtb2RpZmlj YXRpb24pLCBtYWtpbmcgYXZhaWxhYmxlIHRvIHRoZQpwdWJsaWMsIGFuZCBpbiBzb21lIGNvdW50 cmllcyBvdGhlciBhY3Rpdml0aWVzIGFzIHdlbGwuCgogIFRvICJjb252ZXkiIGEgd29yayBtZWFu cyBhbnkga2luZCBvZiBwcm9wYWdhdGlvbiB0aGF0IGVuYWJsZXMgb3RoZXIKcGFydGllcyB0byBt YWtlIG9yIHJlY2VpdmUgY29waWVzLiAgTWVyZSBpbnRlcmFjdGlvbiB3aXRoIGEgdXNlciB0aHJv dWdoCmEgY29tcHV0ZXIgbmV0d29yaywgd2l0aCBubyB0cmFuc2ZlciBvZiBhIGNvcHksIGlzIG5v dCBjb252ZXlpbmcuCgogIEFuIGludGVyYWN0aXZlIHVzZXIgaW50ZXJmYWNlIGRpc3BsYXlzICJB cHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzIgp0byB0aGUgZXh0ZW50IHRoYXQgaXQgaW5jbHVkZXMg YSBjb252ZW5pZW50IGFuZCBwcm9taW5lbnRseSB2aXNpYmxlCmZlYXR1cmUgdGhhdCAoMSkgZGlz cGxheXMgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSwgYW5kICgyKQp0ZWxscyB0aGUg dXNlciB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgd29yayAoZXhjZXB0IHRvIHRo ZQpleHRlbnQgdGhhdCB3YXJyYW50aWVzIGFyZSBwcm92aWRlZCksIHRoYXQgbGljZW5zZWVzIG1h eSBjb252ZXkgdGhlCndvcmsgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgaG93IHRvIHZpZXcgYSBj b3B5IG9mIHRoaXMgTGljZW5zZS4gIElmCnRoZSBpbnRlcmZhY2UgcHJlc2VudHMgYSBsaXN0IG9m IHVzZXIgY29tbWFuZHMgb3Igb3B0aW9ucywgc3VjaCBhcyBhCm1lbnUsIGEgcHJvbWluZW50IGl0 ZW0gaW4gdGhlIGxpc3QgbWVldHMgdGhpcyBjcml0ZXJpb24uCgogIDEuIFNvdXJjZSBDb2RlLgoK ICBUaGUgInNvdXJjZSBjb2RlIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBv ZiB0aGUgd29yawpmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICAiT2JqZWN0IGNvZGUi IG1lYW5zIGFueSBub24tc291cmNlCmZvcm0gb2YgYSB3b3JrLgoKICBBICJTdGFuZGFyZCBJbnRl cmZhY2UiIG1lYW5zIGFuIGludGVyZmFjZSB0aGF0IGVpdGhlciBpcyBhbiBvZmZpY2lhbApzdGFu ZGFyZCBkZWZpbmVkIGJ5IGEgcmVjb2duaXplZCBzdGFuZGFyZHMgYm9keSwgb3IsIGluIHRoZSBj YXNlIG9mCmludGVyZmFjZXMgc3BlY2lmaWVkIGZvciBhIHBhcnRpY3VsYXIgcHJvZ3JhbW1pbmcg bGFuZ3VhZ2UsIG9uZSB0aGF0CmlzIHdpZGVseSB1c2VkIGFtb25nIGRldmVsb3BlcnMgd29ya2lu ZyBpbiB0aGF0IGxhbmd1YWdlLgoKICBUaGUgIlN5c3RlbSBMaWJyYXJpZXMiIG9mIGFuIGV4ZWN1 dGFibGUgd29yayBpbmNsdWRlIGFueXRoaW5nLCBvdGhlcgp0aGFuIHRoZSB3b3JrIGFzIGEgd2hv bGUsIHRoYXQgKGEpIGlzIGluY2x1ZGVkIGluIHRoZSBub3JtYWwgZm9ybSBvZgpwYWNrYWdpbmcg YSBNYWpvciBDb21wb25lbnQsIGJ1dCB3aGljaCBpcyBub3QgcGFydCBvZiB0aGF0IE1ham9yCkNv bXBvbmVudCwgYW5kIChiKSBzZXJ2ZXMgb25seSB0byBlbmFibGUgdXNlIG9mIHRoZSB3b3JrIHdp dGggdGhhdApNYWpvciBDb21wb25lbnQsIG9yIHRvIGltcGxlbWVudCBhIFN0YW5kYXJkIEludGVy ZmFjZSBmb3Igd2hpY2ggYW4KaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIHRvIHRoZSBwdWJs aWMgaW4gc291cmNlIGNvZGUgZm9ybS4gIEEKIk1ham9yIENvbXBvbmVudCIsIGluIHRoaXMgY29u dGV4dCwgbWVhbnMgYSBtYWpvciBlc3NlbnRpYWwgY29tcG9uZW50CihrZXJuZWwsIHdpbmRvdyBz eXN0ZW0sIGFuZCBzbyBvbikgb2YgdGhlIHNwZWNpZmljIG9wZXJhdGluZyBzeXN0ZW0KKGlmIGFu eSkgb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgd29yayBydW5zLCBvciBhIGNvbXBpbGVyIHVzZWQg dG8KcHJvZHVjZSB0aGUgd29yaywgb3IgYW4gb2JqZWN0IGNvZGUgaW50ZXJwcmV0ZXIgdXNlZCB0 byBydW4gaXQuCgogIFRoZSAiQ29ycmVzcG9uZGluZyBTb3VyY2UiIGZvciBhIHdvcmsgaW4gb2Jq ZWN0IGNvZGUgZm9ybSBtZWFucyBhbGwKdGhlIHNvdXJjZSBjb2RlIG5lZWRlZCB0byBnZW5lcmF0 ZSwgaW5zdGFsbCwgYW5kIChmb3IgYW4gZXhlY3V0YWJsZQp3b3JrKSBydW4gdGhlIG9iamVjdCBj b2RlIGFuZCB0byBtb2RpZnkgdGhlIHdvcmssIGluY2x1ZGluZyBzY3JpcHRzIHRvCmNvbnRyb2wg dGhvc2UgYWN0aXZpdGllcy4gIEhvd2V2ZXIsIGl0IGRvZXMgbm90IGluY2x1ZGUgdGhlIHdvcmsn cwpTeXN0ZW0gTGlicmFyaWVzLCBvciBnZW5lcmFsLXB1cnBvc2UgdG9vbHMgb3IgZ2VuZXJhbGx5 IGF2YWlsYWJsZSBmcmVlCnByb2dyYW1zIHdoaWNoIGFyZSB1c2VkIHVubW9kaWZpZWQgaW4gcGVy Zm9ybWluZyB0aG9zZSBhY3Rpdml0aWVzIGJ1dAp3aGljaCBhcmUgbm90IHBhcnQgb2YgdGhlIHdv cmsuICBGb3IgZXhhbXBsZSwgQ29ycmVzcG9uZGluZyBTb3VyY2UKaW5jbHVkZXMgaW50ZXJmYWNl IGRlZmluaXRpb24gZmlsZXMgYXNzb2NpYXRlZCB3aXRoIHNvdXJjZSBmaWxlcyBmb3IKdGhlIHdv cmssIGFuZCB0aGUgc291cmNlIGNvZGUgZm9yIHNoYXJlZCBsaWJyYXJpZXMgYW5kIGR5bmFtaWNh bGx5CmxpbmtlZCBzdWJwcm9ncmFtcyB0aGF0IHRoZSB3b3JrIGlzIHNwZWNpZmljYWxseSBkZXNp Z25lZCB0byByZXF1aXJlLApzdWNoIGFzIGJ5IGludGltYXRlIGRhdGEgY29tbXVuaWNhdGlvbiBv ciBjb250cm9sIGZsb3cgYmV0d2VlbiB0aG9zZQpzdWJwcm9ncmFtcyBhbmQgb3RoZXIgcGFydHMg b2YgdGhlIHdvcmsuCgogIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBuZWVkIG5vdCBpbmNsdWRl IGFueXRoaW5nIHRoYXQgdXNlcnMKY2FuIHJlZ2VuZXJhdGUgYXV0b21hdGljYWxseSBmcm9tIG90 aGVyIHBhcnRzIG9mIHRoZSBDb3JyZXNwb25kaW5nClNvdXJjZS4KCiAgVGhlIENvcnJlc3BvbmRp bmcgU291cmNlIGZvciBhIHdvcmsgaW4gc291cmNlIGNvZGUgZm9ybSBpcyB0aGF0CnNhbWUgd29y ay4KCiAgMi4gQmFzaWMgUGVybWlzc2lvbnMuCgogIEFsbCByaWdodHMgZ3JhbnRlZCB1bmRlciB0 aGlzIExpY2Vuc2UgYXJlIGdyYW50ZWQgZm9yIHRoZSB0ZXJtIG9mCmNvcHlyaWdodCBvbiB0aGUg UHJvZ3JhbSwgYW5kIGFyZSBpcnJldm9jYWJsZSBwcm92aWRlZCB0aGUgc3RhdGVkCmNvbmRpdGlv bnMgYXJlIG1ldC4gIFRoaXMgTGljZW5zZSBleHBsaWNpdGx5IGFmZmlybXMgeW91ciB1bmxpbWl0 ZWQKcGVybWlzc2lvbiB0byBydW4gdGhlIHVubW9kaWZpZWQgUHJvZ3JhbS4gIFRoZSBvdXRwdXQg ZnJvbSBydW5uaW5nIGEKY292ZXJlZCB3b3JrIGlzIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlIG9u bHkgaWYgdGhlIG91dHB1dCwgZ2l2ZW4gaXRzCmNvbnRlbnQsIGNvbnN0aXR1dGVzIGEgY292ZXJl ZCB3b3JrLiAgVGhpcyBMaWNlbnNlIGFja25vd2xlZGdlcyB5b3VyCnJpZ2h0cyBvZiBmYWlyIHVz ZSBvciBvdGhlciBlcXVpdmFsZW50LCBhcyBwcm92aWRlZCBieSBjb3B5cmlnaHQgbGF3LgoKICBZ b3UgbWF5IG1ha2UsIHJ1biBhbmQgcHJvcGFnYXRlIGNvdmVyZWQgd29ya3MgdGhhdCB5b3UgZG8g bm90CmNvbnZleSwgd2l0aG91dCBjb25kaXRpb25zIHNvIGxvbmcgYXMgeW91ciBsaWNlbnNlIG90 aGVyd2lzZSByZW1haW5zCmluIGZvcmNlLiAgWW91IG1heSBjb252ZXkgY292ZXJlZCB3b3JrcyB0 byBvdGhlcnMgZm9yIHRoZSBzb2xlIHB1cnBvc2UKb2YgaGF2aW5nIHRoZW0gbWFrZSBtb2RpZmlj YXRpb25zIGV4Y2x1c2l2ZWx5IGZvciB5b3UsIG9yIHByb3ZpZGUgeW91CndpdGggZmFjaWxpdGll cyBmb3IgcnVubmluZyB0aG9zZSB3b3JrcywgcHJvdmlkZWQgdGhhdCB5b3UgY29tcGx5IHdpdGgK dGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBpbiBjb252ZXlpbmcgYWxsIG1hdGVyaWFsIGZvciB3 aGljaCB5b3UgZG8Kbm90IGNvbnRyb2wgY29weXJpZ2h0LiAgVGhvc2UgdGh1cyBtYWtpbmcgb3Ig cnVubmluZyB0aGUgY292ZXJlZCB3b3Jrcwpmb3IgeW91IG11c3QgZG8gc28gZXhjbHVzaXZlbHkg b24geW91ciBiZWhhbGYsIHVuZGVyIHlvdXIgZGlyZWN0aW9uCmFuZCBjb250cm9sLCBvbiB0ZXJt cyB0aGF0IHByb2hpYml0IHRoZW0gZnJvbSBtYWtpbmcgYW55IGNvcGllcyBvZgp5b3VyIGNvcHly aWdodGVkIG1hdGVyaWFsIG91dHNpZGUgdGhlaXIgcmVsYXRpb25zaGlwIHdpdGggeW91LgoKICBD b252ZXlpbmcgdW5kZXIgYW55IG90aGVyIGNpcmN1bXN0YW5jZXMgaXMgcGVybWl0dGVkIHNvbGVs eSB1bmRlcgp0aGUgY29uZGl0aW9ucyBzdGF0ZWQgYmVsb3cuICBTdWJsaWNlbnNpbmcgaXMgbm90 IGFsbG93ZWQ7IHNlY3Rpb24gMTAKbWFrZXMgaXQgdW5uZWNlc3NhcnkuCgogIDMuIFByb3RlY3Rp bmcgVXNlcnMnIExlZ2FsIFJpZ2h0cyBGcm9tIEFudGktQ2lyY3VtdmVudGlvbiBMYXcuCgogIE5v IGNvdmVyZWQgd29yayBzaGFsbCBiZSBkZWVtZWQgcGFydCBvZiBhbiBlZmZlY3RpdmUgdGVjaG5v bG9naWNhbAptZWFzdXJlIHVuZGVyIGFueSBhcHBsaWNhYmxlIGxhdyBmdWxmaWxsaW5nIG9ibGln YXRpb25zIHVuZGVyIGFydGljbGUKMTEgb2YgdGhlIFdJUE8gY29weXJpZ2h0IHRyZWF0eSBhZG9w dGVkIG9uIDIwIERlY2VtYmVyIDE5OTYsIG9yCnNpbWlsYXIgbGF3cyBwcm9oaWJpdGluZyBvciBy ZXN0cmljdGluZyBjaXJjdW12ZW50aW9uIG9mIHN1Y2gKbWVhc3VyZXMuCgogIFdoZW4geW91IGNv bnZleSBhIGNvdmVyZWQgd29yaywgeW91IHdhaXZlIGFueSBsZWdhbCBwb3dlciB0byBmb3JiaWQK Y2lyY3VtdmVudGlvbiBvZiB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRvIHRoZSBleHRlbnQgc3Vj aCBjaXJjdW12ZW50aW9uCmlzIGVmZmVjdGVkIGJ5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRo aXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8KdGhlIGNvdmVyZWQgd29yaywgYW5kIHlvdSBkaXNj bGFpbSBhbnkgaW50ZW50aW9uIHRvIGxpbWl0IG9wZXJhdGlvbiBvcgptb2RpZmljYXRpb24gb2Yg dGhlIHdvcmsgYXMgYSBtZWFucyBvZiBlbmZvcmNpbmcsIGFnYWluc3QgdGhlIHdvcmsncwp1c2Vy cywgeW91ciBvciB0aGlyZCBwYXJ0aWVzJyBsZWdhbCByaWdodHMgdG8gZm9yYmlkIGNpcmN1bXZl bnRpb24gb2YKdGVjaG5vbG9naWNhbCBtZWFzdXJlcy4KCiAgNC4gQ29udmV5aW5nIFZlcmJhdGlt IENvcGllcy4KCiAgWW91IG1heSBjb252ZXkgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFt J3Mgc291cmNlIGNvZGUgYXMgeW91CnJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVk IHRoYXQgeW91IGNvbnNwaWN1b3VzbHkgYW5kCmFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNo IGNvcHkgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZTsKa2VlcCBpbnRhY3QgYWxsIG5v dGljZXMgc3RhdGluZyB0aGF0IHRoaXMgTGljZW5zZSBhbmQgYW55Cm5vbi1wZXJtaXNzaXZlIHRl cm1zIGFkZGVkIGluIGFjY29yZCB3aXRoIHNlY3Rpb24gNyBhcHBseSB0byB0aGUgY29kZTsKa2Vl cCBpbnRhY3QgYWxsIG5vdGljZXMgb2YgdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQg Z2l2ZSBhbGwKcmVjaXBpZW50cyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhl IFByb2dyYW0uCgogIFlvdSBtYXkgY2hhcmdlIGFueSBwcmljZSBvciBubyBwcmljZSBmb3IgZWFj aCBjb3B5IHRoYXQgeW91IGNvbnZleSwKYW5kIHlvdSBtYXkgb2ZmZXIgc3VwcG9ydCBvciB3YXJy YW50eSBwcm90ZWN0aW9uIGZvciBhIGZlZS4KCiAgNS4gQ29udmV5aW5nIE1vZGlmaWVkIFNvdXJj ZSBWZXJzaW9ucy4KCiAgWW91IG1heSBjb252ZXkgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFt LCBvciB0aGUgbW9kaWZpY2F0aW9ucyB0bwpwcm9kdWNlIGl0IGZyb20gdGhlIFByb2dyYW0sIGlu IHRoZSBmb3JtIG9mIHNvdXJjZSBjb2RlIHVuZGVyIHRoZQp0ZXJtcyBvZiBzZWN0aW9uIDQsIHBy b3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKCiAgICBh KSBUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3Ug bW9kaWZpZWQKICAgIGl0LCBhbmQgZ2l2aW5nIGEgcmVsZXZhbnQgZGF0ZS4KCiAgICBiKSBUaGUg d29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBpdCBpcwogICAg cmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhbnkgY29uZGl0aW9ucyBhZGRlZCB1bmRl ciBzZWN0aW9uCiAgICA3LiAgVGhpcyByZXF1aXJlbWVudCBtb2RpZmllcyB0aGUgcmVxdWlyZW1l bnQgaW4gc2VjdGlvbiA0IHRvCiAgICAia2VlcCBpbnRhY3QgYWxsIG5vdGljZXMiLgoKICAgIGMp IFlvdSBtdXN0IGxpY2Vuc2UgdGhlIGVudGlyZSB3b3JrLCBhcyBhIHdob2xlLCB1bmRlciB0aGlz CiAgICBMaWNlbnNlIHRvIGFueW9uZSB3aG8gY29tZXMgaW50byBwb3NzZXNzaW9uIG9mIGEgY29w eS4gIFRoaXMKICAgIExpY2Vuc2Ugd2lsbCB0aGVyZWZvcmUgYXBwbHksIGFsb25nIHdpdGggYW55 IGFwcGxpY2FibGUgc2VjdGlvbiA3CiAgICBhZGRpdGlvbmFsIHRlcm1zLCB0byB0aGUgd2hvbGUg b2YgdGhlIHdvcmssIGFuZCBhbGwgaXRzIHBhcnRzLAogICAgcmVnYXJkbGVzcyBvZiBob3cgdGhl eSBhcmUgcGFja2FnZWQuICBUaGlzIExpY2Vuc2UgZ2l2ZXMgbm8KICAgIHBlcm1pc3Npb24gdG8g bGljZW5zZSB0aGUgd29yayBpbiBhbnkgb3RoZXIgd2F5LCBidXQgaXQgZG9lcyBub3QKICAgIGlu dmFsaWRhdGUgc3VjaCBwZXJtaXNzaW9uIGlmIHlvdSBoYXZlIHNlcGFyYXRlbHkgcmVjZWl2ZWQg aXQuCgogICAgZCkgSWYgdGhlIHdvcmsgaGFzIGludGVyYWN0aXZlIHVzZXIgaW50ZXJmYWNlcywg ZWFjaCBtdXN0IGRpc3BsYXkKICAgIEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXM7IGhvd2V2ZXIs IGlmIHRoZSBQcm9ncmFtIGhhcyBpbnRlcmFjdGl2ZQogICAgaW50ZXJmYWNlcyB0aGF0IGRvIG5v dCBkaXNwbGF5IEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMsIHlvdXIKICAgIHdvcmsgbmVlZCBu b3QgbWFrZSB0aGVtIGRvIHNvLgoKICBBIGNvbXBpbGF0aW9uIG9mIGEgY292ZXJlZCB3b3JrIHdp dGggb3RoZXIgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50CndvcmtzLCB3aGljaCBhcmUgbm90IGJ5 IHRoZWlyIG5hdHVyZSBleHRlbnNpb25zIG9mIHRoZSBjb3ZlcmVkIHdvcmssCmFuZCB3aGljaCBh cmUgbm90IGNvbWJpbmVkIHdpdGggaXQgc3VjaCBhcyB0byBmb3JtIGEgbGFyZ2VyIHByb2dyYW0s CmluIG9yIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtLCBp cyBjYWxsZWQgYW4KImFnZ3JlZ2F0ZSIgaWYgdGhlIGNvbXBpbGF0aW9uIGFuZCBpdHMgcmVzdWx0 aW5nIGNvcHlyaWdodCBhcmUgbm90CnVzZWQgdG8gbGltaXQgdGhlIGFjY2VzcyBvciBsZWdhbCBy aWdodHMgb2YgdGhlIGNvbXBpbGF0aW9uJ3MgdXNlcnMKYmV5b25kIHdoYXQgdGhlIGluZGl2aWR1 YWwgd29ya3MgcGVybWl0LiAgSW5jbHVzaW9uIG9mIGEgY292ZXJlZCB3b3JrCmluIGFuIGFnZ3Jl Z2F0ZSBkb2VzIG5vdCBjYXVzZSB0aGlzIExpY2Vuc2UgdG8gYXBwbHkgdG8gdGhlIG90aGVyCnBh cnRzIG9mIHRoZSBhZ2dyZWdhdGUuCgogIDYuIENvbnZleWluZyBOb24tU291cmNlIEZvcm1zLgoK ICBZb3UgbWF5IGNvbnZleSBhIGNvdmVyZWQgd29yayBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVy IHRoZSB0ZXJtcwpvZiBzZWN0aW9ucyA0IGFuZCA1LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGNv bnZleSB0aGUKbWFjaGluZS1yZWFkYWJsZSBDb3JyZXNwb25kaW5nIFNvdXJjZSB1bmRlciB0aGUg dGVybXMgb2YgdGhpcyBMaWNlbnNlLAppbiBvbmUgb2YgdGhlc2Ugd2F5czoKCiAgICBhKSBDb252 ZXkgdGhlIG9iamVjdCBjb2RlIGluLCBvciBlbWJvZGllZCBpbiwgYSBwaHlzaWNhbCBwcm9kdWN0 CiAgICAoaW5jbHVkaW5nIGEgcGh5c2ljYWwgZGlzdHJpYnV0aW9uIG1lZGl1bSksIGFjY29tcGFu aWVkIGJ5IHRoZQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgZml4ZWQgb24gYSBkdXJhYmxlIHBo eXNpY2FsIG1lZGl1bQogICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFu Z2UuCgogICAgYikgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEg cGh5c2ljYWwgcHJvZHVjdAogICAgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBt ZWRpdW0pLCBhY2NvbXBhbmllZCBieSBhCiAgICB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQg bGVhc3QgdGhyZWUgeWVhcnMgYW5kIHZhbGlkIGZvciBhcwogICAgbG9uZyBhcyB5b3Ugb2ZmZXIg c3BhcmUgcGFydHMgb3IgY3VzdG9tZXIgc3VwcG9ydCBmb3IgdGhhdCBwcm9kdWN0CiAgICBtb2Rl bCwgdG8gZ2l2ZSBhbnlvbmUgd2hvIHBvc3Nlc3NlcyB0aGUgb2JqZWN0IGNvZGUgZWl0aGVyICgx KSBhCiAgICBjb3B5IG9mIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYWxsIHRoZSBzb2Z0 d2FyZSBpbiB0aGUKICAgIHByb2R1Y3QgdGhhdCBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSwg b24gYSBkdXJhYmxlIHBoeXNpY2FsCiAgICBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29m dHdhcmUgaW50ZXJjaGFuZ2UsIGZvciBhIHByaWNlIG5vCiAgICBtb3JlIHRoYW4geW91ciByZWFz b25hYmxlIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHRoaXMKICAgIGNvbnZleWluZyBv ZiBzb3VyY2UsIG9yICgyKSBhY2Nlc3MgdG8gY29weSB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291 cmNlIGZyb20gYSBuZXR3b3JrIHNlcnZlciBhdCBubyBjaGFyZ2UuCgogICAgYykgQ29udmV5IGlu ZGl2aWR1YWwgY29waWVzIG9mIHRoZSBvYmplY3QgY29kZSB3aXRoIGEgY29weSBvZiB0aGUKICAg IHdyaXR0ZW4gb2ZmZXIgdG8gcHJvdmlkZSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBUaGlz CiAgICBhbHRlcm5hdGl2ZSBpcyBhbGxvd2VkIG9ubHkgb2NjYXNpb25hbGx5IGFuZCBub25jb21t ZXJjaWFsbHksIGFuZAogICAgb25seSBpZiB5b3UgcmVjZWl2ZWQgdGhlIG9iamVjdCBjb2RlIHdp dGggc3VjaCBhbiBvZmZlciwgaW4gYWNjb3JkCiAgICB3aXRoIHN1YnNlY3Rpb24gNmIuCgogICAg ZCkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBieSBvZmZlcmluZyBhY2Nlc3MgZnJvbSBhIGRlc2ln bmF0ZWQKICAgIHBsYWNlIChncmF0aXMgb3IgZm9yIGEgY2hhcmdlKSwgYW5kIG9mZmVyIGVxdWl2 YWxlbnQgYWNjZXNzIHRvIHRoZQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgaW4gdGhlIHNhbWUg d2F5IHRocm91Z2ggdGhlIHNhbWUgcGxhY2UgYXQgbm8KICAgIGZ1cnRoZXIgY2hhcmdlLiAgWW91 IG5lZWQgbm90IHJlcXVpcmUgcmVjaXBpZW50cyB0byBjb3B5IHRoZQogICAgQ29ycmVzcG9uZGlu ZyBTb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuICBJZiB0aGUgcGxhY2UgdG8KICAg IGNvcHkgdGhlIG9iamVjdCBjb2RlIGlzIGEgbmV0d29yayBzZXJ2ZXIsIHRoZSBDb3JyZXNwb25k aW5nIFNvdXJjZQogICAgbWF5IGJlIG9uIGEgZGlmZmVyZW50IHNlcnZlciAob3BlcmF0ZWQgYnkg eW91IG9yIGEgdGhpcmQgcGFydHkpCiAgICB0aGF0IHN1cHBvcnRzIGVxdWl2YWxlbnQgY29weWlu ZyBmYWNpbGl0aWVzLCBwcm92aWRlZCB5b3UgbWFpbnRhaW4KICAgIGNsZWFyIGRpcmVjdGlvbnMg bmV4dCB0byB0aGUgb2JqZWN0IGNvZGUgc2F5aW5nIHdoZXJlIHRvIGZpbmQgdGhlCiAgICBDb3Jy ZXNwb25kaW5nIFNvdXJjZS4gIFJlZ2FyZGxlc3Mgb2Ygd2hhdCBzZXJ2ZXIgaG9zdHMgdGhlCiAg ICBDb3JyZXNwb25kaW5nIFNvdXJjZSwgeW91IHJlbWFpbiBvYmxpZ2F0ZWQgdG8gZW5zdXJlIHRo YXQgaXQgaXMKICAgIGF2YWlsYWJsZSBmb3IgYXMgbG9uZyBhcyBuZWVkZWQgdG8gc2F0aXNmeSB0 aGVzZSByZXF1aXJlbWVudHMuCgogICAgZSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSB1c2luZyBw ZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uLCBwcm92aWRlZAogICAgeW91IGluZm9ybSBvdGhlciBw ZWVycyB3aGVyZSB0aGUgb2JqZWN0IGNvZGUgYW5kIENvcnJlc3BvbmRpbmcKICAgIFNvdXJjZSBv ZiB0aGUgd29yayBhcmUgYmVpbmcgb2ZmZXJlZCB0byB0aGUgZ2VuZXJhbCBwdWJsaWMgYXQgbm8K ICAgIGNoYXJnZSB1bmRlciBzdWJzZWN0aW9uIDZkLgoKICBBIHNlcGFyYWJsZSBwb3J0aW9uIG9m IHRoZSBvYmplY3QgY29kZSwgd2hvc2Ugc291cmNlIGNvZGUgaXMgZXhjbHVkZWQKZnJvbSB0aGUg Q29ycmVzcG9uZGluZyBTb3VyY2UgYXMgYSBTeXN0ZW0gTGlicmFyeSwgbmVlZCBub3QgYmUKaW5j bHVkZWQgaW4gY29udmV5aW5nIHRoZSBvYmplY3QgY29kZSB3b3JrLgoKICBBICJVc2VyIFByb2R1 Y3QiIGlzIGVpdGhlciAoMSkgYSAiY29uc3VtZXIgcHJvZHVjdCIsIHdoaWNoIG1lYW5zIGFueQp0 YW5naWJsZSBwZXJzb25hbCBwcm9wZXJ0eSB3aGljaCBpcyBub3JtYWxseSB1c2VkIGZvciBwZXJz b25hbCwgZmFtaWx5LApvciBob3VzZWhvbGQgcHVycG9zZXMsIG9yICgyKSBhbnl0aGluZyBkZXNp Z25lZCBvciBzb2xkIGZvciBpbmNvcnBvcmF0aW9uCmludG8gYSBkd2VsbGluZy4gIEluIGRldGVy bWluaW5nIHdoZXRoZXIgYSBwcm9kdWN0IGlzIGEgY29uc3VtZXIgcHJvZHVjdCwKZG91YnRmdWwg Y2FzZXMgc2hhbGwgYmUgcmVzb2x2ZWQgaW4gZmF2b3Igb2YgY292ZXJhZ2UuICBGb3IgYSBwYXJ0 aWN1bGFyCnByb2R1Y3QgcmVjZWl2ZWQgYnkgYSBwYXJ0aWN1bGFyIHVzZXIsICJub3JtYWxseSB1 c2VkIiByZWZlcnMgdG8gYQp0eXBpY2FsIG9yIGNvbW1vbiB1c2Ugb2YgdGhhdCBjbGFzcyBvZiBw cm9kdWN0LCByZWdhcmRsZXNzIG9mIHRoZSBzdGF0dXMKb2YgdGhlIHBhcnRpY3VsYXIgdXNlciBv ciBvZiB0aGUgd2F5IGluIHdoaWNoIHRoZSBwYXJ0aWN1bGFyIHVzZXIKYWN0dWFsbHkgdXNlcywg b3IgZXhwZWN0cyBvciBpcyBleHBlY3RlZCB0byB1c2UsIHRoZSBwcm9kdWN0LiAgQSBwcm9kdWN0 CmlzIGEgY29uc3VtZXIgcHJvZHVjdCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHByb2R1Y3Qg aGFzIHN1YnN0YW50aWFsCmNvbW1lcmNpYWwsIGluZHVzdHJpYWwgb3Igbm9uLWNvbnN1bWVyIHVz ZXMsIHVubGVzcyBzdWNoIHVzZXMgcmVwcmVzZW50CnRoZSBvbmx5IHNpZ25pZmljYW50IG1vZGUg b2YgdXNlIG9mIHRoZSBwcm9kdWN0LgoKICAiSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIiBmb3Ig YSBVc2VyIFByb2R1Y3QgbWVhbnMgYW55IG1ldGhvZHMsCnByb2NlZHVyZXMsIGF1dGhvcml6YXRp b24ga2V5cywgb3Igb3RoZXIgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gaW5zdGFsbAphbmQgZXhl Y3V0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBhIGNvdmVyZWQgd29yayBpbiB0aGF0IFVzZXIgUHJv ZHVjdCBmcm9tCmEgbW9kaWZpZWQgdmVyc2lvbiBvZiBpdHMgQ29ycmVzcG9uZGluZyBTb3VyY2Uu ICBUaGUgaW5mb3JtYXRpb24gbXVzdApzdWZmaWNlIHRvIGVuc3VyZSB0aGF0IHRoZSBjb250aW51 ZWQgZnVuY3Rpb25pbmcgb2YgdGhlIG1vZGlmaWVkIG9iamVjdApjb2RlIGlzIGluIG5vIGNhc2Ug cHJldmVudGVkIG9yIGludGVyZmVyZWQgd2l0aCBzb2xlbHkgYmVjYXVzZQptb2RpZmljYXRpb24g aGFzIGJlZW4gbWFkZS4KCiAgSWYgeW91IGNvbnZleSBhbiBvYmplY3QgY29kZSB3b3JrIHVuZGVy IHRoaXMgc2VjdGlvbiBpbiwgb3Igd2l0aCwgb3IKc3BlY2lmaWNhbGx5IGZvciB1c2UgaW4sIGEg VXNlciBQcm9kdWN0LCBhbmQgdGhlIGNvbnZleWluZyBvY2N1cnMgYXMKcGFydCBvZiBhIHRyYW5z YWN0aW9uIGluIHdoaWNoIHRoZSByaWdodCBvZiBwb3NzZXNzaW9uIGFuZCB1c2Ugb2YgdGhlClVz ZXIgUHJvZHVjdCBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgcmVjaXBpZW50IGluIHBlcnBldHVpdHkg b3IgZm9yIGEKZml4ZWQgdGVybSAocmVnYXJkbGVzcyBvZiBob3cgdGhlIHRyYW5zYWN0aW9uIGlz IGNoYXJhY3Rlcml6ZWQpLCB0aGUKQ29ycmVzcG9uZGluZyBTb3VyY2UgY29udmV5ZWQgdW5kZXIg dGhpcyBzZWN0aW9uIG11c3QgYmUgYWNjb21wYW5pZWQKYnkgdGhlIEluc3RhbGxhdGlvbiBJbmZv cm1hdGlvbi4gIEJ1dCB0aGlzIHJlcXVpcmVtZW50IGRvZXMgbm90IGFwcGx5CmlmIG5laXRoZXIg eW91IG5vciBhbnkgdGhpcmQgcGFydHkgcmV0YWlucyB0aGUgYWJpbGl0eSB0byBpbnN0YWxsCm1v ZGlmaWVkIG9iamVjdCBjb2RlIG9uIHRoZSBVc2VyIFByb2R1Y3QgKGZvciBleGFtcGxlLCB0aGUg d29yayBoYXMKYmVlbiBpbnN0YWxsZWQgaW4gUk9NKS4KCiAgVGhlIHJlcXVpcmVtZW50IHRvIHBy b3ZpZGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIGRvZXMgbm90IGluY2x1ZGUgYQpyZXF1aXJl bWVudCB0byBjb250aW51ZSB0byBwcm92aWRlIHN1cHBvcnQgc2VydmljZSwgd2FycmFudHksIG9y IHVwZGF0ZXMKZm9yIGEgd29yayB0aGF0IGhhcyBiZWVuIG1vZGlmaWVkIG9yIGluc3RhbGxlZCBi eSB0aGUgcmVjaXBpZW50LCBvciBmb3IKdGhlIFVzZXIgUHJvZHVjdCBpbiB3aGljaCBpdCBoYXMg YmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQuICBBY2Nlc3MgdG8gYQpuZXR3b3JrIG1heSBiZSBk ZW5pZWQgd2hlbiB0aGUgbW9kaWZpY2F0aW9uIGl0c2VsZiBtYXRlcmlhbGx5IGFuZAphZHZlcnNl bHkgYWZmZWN0cyB0aGUgb3BlcmF0aW9uIG9mIHRoZSBuZXR3b3JrIG9yIHZpb2xhdGVzIHRoZSBy dWxlcyBhbmQKcHJvdG9jb2xzIGZvciBjb21tdW5pY2F0aW9uIGFjcm9zcyB0aGUgbmV0d29yay4K CiAgQ29ycmVzcG9uZGluZyBTb3VyY2UgY29udmV5ZWQsIGFuZCBJbnN0YWxsYXRpb24gSW5mb3Jt YXRpb24gcHJvdmlkZWQsCmluIGFjY29yZCB3aXRoIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGluIGEg Zm9ybWF0IHRoYXQgaXMgcHVibGljbHkKZG9jdW1lbnRlZCAoYW5kIHdpdGggYW4gaW1wbGVtZW50 YXRpb24gYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgaW4Kc291cmNlIGNvZGUgZm9ybSksIGFuZCBt dXN0IHJlcXVpcmUgbm8gc3BlY2lhbCBwYXNzd29yZCBvciBrZXkgZm9yCnVucGFja2luZywgcmVh ZGluZyBvciBjb3B5aW5nLgoKICA3LiBBZGRpdGlvbmFsIFRlcm1zLgoKICAiQWRkaXRpb25hbCBw ZXJtaXNzaW9ucyIgYXJlIHRlcm1zIHRoYXQgc3VwcGxlbWVudCB0aGUgdGVybXMgb2YgdGhpcwpM aWNlbnNlIGJ5IG1ha2luZyBleGNlcHRpb25zIGZyb20gb25lIG9yIG1vcmUgb2YgaXRzIGNvbmRp dGlvbnMuCkFkZGl0aW9uYWwgcGVybWlzc2lvbnMgdGhhdCBhcmUgYXBwbGljYWJsZSB0byB0aGUg ZW50aXJlIFByb2dyYW0gc2hhbGwKYmUgdHJlYXRlZCBhcyB0aG91Z2ggdGhleSB3ZXJlIGluY2x1 ZGVkIGluIHRoaXMgTGljZW5zZSwgdG8gdGhlIGV4dGVudAp0aGF0IHRoZXkgYXJlIHZhbGlkIHVu ZGVyIGFwcGxpY2FibGUgbGF3LiAgSWYgYWRkaXRpb25hbCBwZXJtaXNzaW9ucwphcHBseSBvbmx5 IHRvIHBhcnQgb2YgdGhlIFByb2dyYW0sIHRoYXQgcGFydCBtYXkgYmUgdXNlZCBzZXBhcmF0ZWx5 CnVuZGVyIHRob3NlIHBlcm1pc3Npb25zLCBidXQgdGhlIGVudGlyZSBQcm9ncmFtIHJlbWFpbnMg Z292ZXJuZWQgYnkKdGhpcyBMaWNlbnNlIHdpdGhvdXQgcmVnYXJkIHRvIHRoZSBhZGRpdGlvbmFs IHBlcm1pc3Npb25zLgoKICBXaGVuIHlvdSBjb252ZXkgYSBjb3B5IG9mIGEgY292ZXJlZCB3b3Jr LCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uCnJlbW92ZSBhbnkgYWRkaXRpb25hbCBwZXJtaXNzaW9u cyBmcm9tIHRoYXQgY29weSwgb3IgZnJvbSBhbnkgcGFydCBvZgppdC4gIChBZGRpdGlvbmFsIHBl cm1pc3Npb25zIG1heSBiZSB3cml0dGVuIHRvIHJlcXVpcmUgdGhlaXIgb3duCnJlbW92YWwgaW4g Y2VydGFpbiBjYXNlcyB3aGVuIHlvdSBtb2RpZnkgdGhlIHdvcmsuKSAgWW91IG1heSBwbGFjZQph ZGRpdGlvbmFsIHBlcm1pc3Npb25zIG9uIG1hdGVyaWFsLCBhZGRlZCBieSB5b3UgdG8gYSBjb3Zl cmVkIHdvcmssCmZvciB3aGljaCB5b3UgaGF2ZSBvciBjYW4gZ2l2ZSBhcHByb3ByaWF0ZSBjb3B5 cmlnaHQgcGVybWlzc2lvbi4KCiAgTm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBwcm92aXNpb24g b2YgdGhpcyBMaWNlbnNlLCBmb3IgbWF0ZXJpYWwgeW91CmFkZCB0byBhIGNvdmVyZWQgd29yaywg eW91IG1heSAoaWYgYXV0aG9yaXplZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlcnMgb2YKdGhhdCBt YXRlcmlhbCkgc3VwcGxlbWVudCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggdGVybXM6 CgogICAgYSkgRGlzY2xhaW1pbmcgd2FycmFudHkgb3IgbGltaXRpbmcgbGlhYmlsaXR5IGRpZmZl cmVudGx5IGZyb20gdGhlCiAgICB0ZXJtcyBvZiBzZWN0aW9ucyAxNSBhbmQgMTYgb2YgdGhpcyBM aWNlbnNlOyBvcgoKICAgIGIpIFJlcXVpcmluZyBwcmVzZXJ2YXRpb24gb2Ygc3BlY2lmaWVkIHJl YXNvbmFibGUgbGVnYWwgbm90aWNlcyBvcgogICAgYXV0aG9yIGF0dHJpYnV0aW9ucyBpbiB0aGF0 IG1hdGVyaWFsIG9yIGluIHRoZSBBcHByb3ByaWF0ZSBMZWdhbAogICAgTm90aWNlcyBkaXNwbGF5 ZWQgYnkgd29ya3MgY29udGFpbmluZyBpdDsgb3IKCiAgICBjKSBQcm9oaWJpdGluZyBtaXNyZXBy ZXNlbnRhdGlvbiBvZiB0aGUgb3JpZ2luIG9mIHRoYXQgbWF0ZXJpYWwsIG9yCiAgICByZXF1aXJp bmcgdGhhdCBtb2RpZmllZCB2ZXJzaW9ucyBvZiBzdWNoIG1hdGVyaWFsIGJlIG1hcmtlZCBpbgog ICAgcmVhc29uYWJsZSB3YXlzIGFzIGRpZmZlcmVudCBmcm9tIHRoZSBvcmlnaW5hbCB2ZXJzaW9u OyBvcgoKICAgIGQpIExpbWl0aW5nIHRoZSB1c2UgZm9yIHB1YmxpY2l0eSBwdXJwb3NlcyBvZiBu YW1lcyBvZiBsaWNlbnNvcnMgb3IKICAgIGF1dGhvcnMgb2YgdGhlIG1hdGVyaWFsOyBvcgoKICAg IGUpIERlY2xpbmluZyB0byBncmFudCByaWdodHMgdW5kZXIgdHJhZGVtYXJrIGxhdyBmb3IgdXNl IG9mIHNvbWUKICAgIHRyYWRlIG5hbWVzLCB0cmFkZW1hcmtzLCBvciBzZXJ2aWNlIG1hcmtzOyBv cgoKICAgIGYpIFJlcXVpcmluZyBpbmRlbW5pZmljYXRpb24gb2YgbGljZW5zb3JzIGFuZCBhdXRo b3JzIG9mIHRoYXQKICAgIG1hdGVyaWFsIGJ5IGFueW9uZSB3aG8gY29udmV5cyB0aGUgbWF0ZXJp YWwgKG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mCiAgICBpdCkgd2l0aCBjb250cmFjdHVhbCBhc3N1 bXB0aW9ucyBvZiBsaWFiaWxpdHkgdG8gdGhlIHJlY2lwaWVudCwgZm9yCiAgICBhbnkgbGlhYmls aXR5IHRoYXQgdGhlc2UgY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgZGlyZWN0bHkgaW1wb3NlIG9u CiAgICB0aG9zZSBsaWNlbnNvcnMgYW5kIGF1dGhvcnMuCgogIEFsbCBvdGhlciBub24tcGVybWlz c2l2ZSBhZGRpdGlvbmFsIHRlcm1zIGFyZSBjb25zaWRlcmVkICJmdXJ0aGVyCnJlc3RyaWN0aW9u cyIgd2l0aGluIHRoZSBtZWFuaW5nIG9mIHNlY3Rpb24gMTAuICBJZiB0aGUgUHJvZ3JhbSBhcyB5 b3UKcmVjZWl2ZWQgaXQsIG9yIGFueSBwYXJ0IG9mIGl0LCBjb250YWlucyBhIG5vdGljZSBzdGF0 aW5nIHRoYXQgaXQgaXMKZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggYSB0ZXJt IHRoYXQgaXMgYSBmdXJ0aGVyCnJlc3RyaWN0aW9uLCB5b3UgbWF5IHJlbW92ZSB0aGF0IHRlcm0u ICBJZiBhIGxpY2Vuc2UgZG9jdW1lbnQgY29udGFpbnMKYSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGJ1 dCBwZXJtaXRzIHJlbGljZW5zaW5nIG9yIGNvbnZleWluZyB1bmRlciB0aGlzCkxpY2Vuc2UsIHlv dSBtYXkgYWRkIHRvIGEgY292ZXJlZCB3b3JrIG1hdGVyaWFsIGdvdmVybmVkIGJ5IHRoZSB0ZXJt cwpvZiB0aGF0IGxpY2Vuc2UgZG9jdW1lbnQsIHByb3ZpZGVkIHRoYXQgdGhlIGZ1cnRoZXIgcmVz dHJpY3Rpb24gZG9lcwpub3Qgc3Vydml2ZSBzdWNoIHJlbGljZW5zaW5nIG9yIGNvbnZleWluZy4K CiAgSWYgeW91IGFkZCB0ZXJtcyB0byBhIGNvdmVyZWQgd29yayBpbiBhY2NvcmQgd2l0aCB0aGlz IHNlY3Rpb24sIHlvdQptdXN0IHBsYWNlLCBpbiB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzLCBh IHN0YXRlbWVudCBvZiB0aGUKYWRkaXRpb25hbCB0ZXJtcyB0aGF0IGFwcGx5IHRvIHRob3NlIGZp bGVzLCBvciBhIG5vdGljZSBpbmRpY2F0aW5nCndoZXJlIHRvIGZpbmQgdGhlIGFwcGxpY2FibGUg dGVybXMuCgogIEFkZGl0aW9uYWwgdGVybXMsIHBlcm1pc3NpdmUgb3Igbm9uLXBlcm1pc3NpdmUs IG1heSBiZSBzdGF0ZWQgaW4gdGhlCmZvcm0gb2YgYSBzZXBhcmF0ZWx5IHdyaXR0ZW4gbGljZW5z ZSwgb3Igc3RhdGVkIGFzIGV4Y2VwdGlvbnM7CnRoZSBhYm92ZSByZXF1aXJlbWVudHMgYXBwbHkg ZWl0aGVyIHdheS4KCiAgOC4gVGVybWluYXRpb24uCgogIFlvdSBtYXkgbm90IHByb3BhZ2F0ZSBv ciBtb2RpZnkgYSBjb3ZlcmVkIHdvcmsgZXhjZXB0IGFzIGV4cHJlc3NseQpwcm92aWRlZCB1bmRl ciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gcHJvcGFnYXRlIG9yCm1v ZGlmeSBpdCBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJp Z2h0cyB1bmRlcgp0aGlzIExpY2Vuc2UgKGluY2x1ZGluZyBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdy YW50ZWQgdW5kZXIgdGhlIHRoaXJkCnBhcmFncmFwaCBvZiBzZWN0aW9uIDExKS4KCiAgSG93ZXZl ciwgaWYgeW91IGNlYXNlIGFsbCB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlLCB0aGVuIHlvdXIK bGljZW5zZSBmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzIHJlaW5zdGF0ZWQg KGEpCnByb3Zpc2lvbmFsbHksIHVubGVzcyBhbmQgdW50aWwgdGhlIGNvcHlyaWdodCBob2xkZXIg ZXhwbGljaXRseSBhbmQKZmluYWxseSB0ZXJtaW5hdGVzIHlvdXIgbGljZW5zZSwgYW5kIChiKSBw ZXJtYW5lbnRseSwgaWYgdGhlIGNvcHlyaWdodApob2xkZXIgZmFpbHMgdG8gbm90aWZ5IHlvdSBv ZiB0aGUgdmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucwpwcmlvciB0byA2MCBkYXlz IGFmdGVyIHRoZSBjZXNzYXRpb24uCgogIE1vcmVvdmVyLCB5b3VyIGxpY2Vuc2UgZnJvbSBhIHBh cnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcwpyZWluc3RhdGVkIHBlcm1hbmVudGx5IGlmIHRo ZSBjb3B5cmlnaHQgaG9sZGVyIG5vdGlmaWVzIHlvdSBvZiB0aGUKdmlvbGF0aW9uIGJ5IHNvbWUg cmVhc29uYWJsZSBtZWFucywgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB5b3UgaGF2ZQpyZWNlaXZl ZCBub3RpY2Ugb2YgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSAoZm9yIGFueSB3b3JrKSBmcm9t IHRoYXQKY29weXJpZ2h0IGhvbGRlciwgYW5kIHlvdSBjdXJlIHRoZSB2aW9sYXRpb24gcHJpb3Ig dG8gMzAgZGF5cyBhZnRlcgp5b3VyIHJlY2VpcHQgb2YgdGhlIG5vdGljZS4KCiAgVGVybWluYXRp b24gb2YgeW91ciByaWdodHMgdW5kZXIgdGhpcyBzZWN0aW9uIGRvZXMgbm90IHRlcm1pbmF0ZSB0 aGUKbGljZW5zZXMgb2YgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMgb3IgcmlnaHRz IGZyb20geW91IHVuZGVyCnRoaXMgTGljZW5zZS4gIElmIHlvdXIgcmlnaHRzIGhhdmUgYmVlbiB0 ZXJtaW5hdGVkIGFuZCBub3QgcGVybWFuZW50bHkKcmVpbnN0YXRlZCwgeW91IGRvIG5vdCBxdWFs aWZ5IHRvIHJlY2VpdmUgbmV3IGxpY2Vuc2VzIGZvciB0aGUgc2FtZQptYXRlcmlhbCB1bmRlciBz ZWN0aW9uIDEwLgoKICA5LiBBY2NlcHRhbmNlIE5vdCBSZXF1aXJlZCBmb3IgSGF2aW5nIENvcGll cy4KCiAgWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSBpbiBvcmRl ciB0byByZWNlaXZlIG9yCnJ1biBhIGNvcHkgb2YgdGhlIFByb2dyYW0uICBBbmNpbGxhcnkgcHJv cGFnYXRpb24gb2YgYSBjb3ZlcmVkIHdvcmsKb2NjdXJyaW5nIHNvbGVseSBhcyBhIGNvbnNlcXVl bmNlIG9mIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24KdG8gcmVjZWl2ZSBhIGNvcHkg bGlrZXdpc2UgZG9lcyBub3QgcmVxdWlyZSBhY2NlcHRhbmNlLiAgSG93ZXZlciwKbm90aGluZyBv dGhlciB0aGFuIHRoaXMgTGljZW5zZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gcHJvcGFnYXRl IG9yCm1vZGlmeSBhbnkgY292ZXJlZCB3b3JrLiAgVGhlc2UgYWN0aW9ucyBpbmZyaW5nZSBjb3B5 cmlnaHQgaWYgeW91IGRvCm5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieSBt b2RpZnlpbmcgb3IgcHJvcGFnYXRpbmcgYQpjb3ZlcmVkIHdvcmssIHlvdSBpbmRpY2F0ZSB5b3Vy IGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLgoKICAxMC4gQXV0b21hdGljIExp Y2Vuc2luZyBvZiBEb3duc3RyZWFtIFJlY2lwaWVudHMuCgogIEVhY2ggdGltZSB5b3UgY29udmV5 IGEgY292ZXJlZCB3b3JrLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkKcmVjZWl2ZXMgYSBs aWNlbnNlIGZyb20gdGhlIG9yaWdpbmFsIGxpY2Vuc29ycywgdG8gcnVuLCBtb2RpZnkgYW5kCnBy b3BhZ2F0ZSB0aGF0IHdvcmssIHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLiAgWW91IGFyZSBub3Qg cmVzcG9uc2libGUKZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0 aCB0aGlzIExpY2Vuc2UuCgogIEFuICJlbnRpdHkgdHJhbnNhY3Rpb24iIGlzIGEgdHJhbnNhY3Rp b24gdHJhbnNmZXJyaW5nIGNvbnRyb2wgb2YgYW4Kb3JnYW5pemF0aW9uLCBvciBzdWJzdGFudGlh bGx5IGFsbCBhc3NldHMgb2Ygb25lLCBvciBzdWJkaXZpZGluZyBhbgpvcmdhbml6YXRpb24sIG9y IG1lcmdpbmcgb3JnYW5pemF0aW9ucy4gIElmIHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZAp3b3Jr IHJlc3VsdHMgZnJvbSBhbiBlbnRpdHkgdHJhbnNhY3Rpb24sIGVhY2ggcGFydHkgdG8gdGhhdAp0 cmFuc2FjdGlvbiB3aG8gcmVjZWl2ZXMgYSBjb3B5IG9mIHRoZSB3b3JrIGFsc28gcmVjZWl2ZXMg d2hhdGV2ZXIKbGljZW5zZXMgdG8gdGhlIHdvcmsgdGhlIHBhcnR5J3MgcHJlZGVjZXNzb3IgaW4g aW50ZXJlc3QgaGFkIG9yIGNvdWxkCmdpdmUgdW5kZXIgdGhlIHByZXZpb3VzIHBhcmFncmFwaCwg cGx1cyBhIHJpZ2h0IHRvIHBvc3Nlc3Npb24gb2YgdGhlCkNvcnJlc3BvbmRpbmcgU291cmNlIG9m IHRoZSB3b3JrIGZyb20gdGhlIHByZWRlY2Vzc29yIGluIGludGVyZXN0LCBpZgp0aGUgcHJlZGVj ZXNzb3IgaGFzIGl0IG9yIGNhbiBnZXQgaXQgd2l0aCByZWFzb25hYmxlIGVmZm9ydHMuCgogIFlv dSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIGV4ZXJjaXNl IG9mIHRoZQpyaWdodHMgZ3JhbnRlZCBvciBhZmZpcm1lZCB1bmRlciB0aGlzIExpY2Vuc2UuICBG b3IgZXhhbXBsZSwgeW91IG1heQpub3QgaW1wb3NlIGEgbGljZW5zZSBmZWUsIHJveWFsdHksIG9y IG90aGVyIGNoYXJnZSBmb3IgZXhlcmNpc2Ugb2YKcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBM aWNlbnNlLCBhbmQgeW91IG1heSBub3QgaW5pdGlhdGUgbGl0aWdhdGlvbgooaW5jbHVkaW5nIGEg Y3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdAph bnkgcGF0ZW50IGNsYWltIGlzIGluZnJpbmdlZCBieSBtYWtpbmcsIHVzaW5nLCBzZWxsaW5nLCBv ZmZlcmluZyBmb3IKc2FsZSwgb3IgaW1wb3J0aW5nIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9u IG9mIGl0LgoKICAxMS4gUGF0ZW50cy4KCiAgQSAiY29udHJpYnV0b3IiIGlzIGEgY29weXJpZ2h0 IGhvbGRlciB3aG8gYXV0aG9yaXplcyB1c2UgdW5kZXIgdGhpcwpMaWNlbnNlIG9mIHRoZSBQcm9n cmFtIG9yIGEgd29yayBvbiB3aGljaCB0aGUgUHJvZ3JhbSBpcyBiYXNlZC4gIFRoZQp3b3JrIHRo dXMgbGljZW5zZWQgaXMgY2FsbGVkIHRoZSBjb250cmlidXRvcidzICJjb250cmlidXRvciB2ZXJz aW9uIi4KCiAgQSBjb250cmlidXRvcidzICJlc3NlbnRpYWwgcGF0ZW50IGNsYWltcyIgYXJlIGFs bCBwYXRlbnQgY2xhaW1zCm93bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIGNvbnRyaWJ1dG9yLCB3 aGV0aGVyIGFscmVhZHkgYWNxdWlyZWQgb3IKaGVyZWFmdGVyIGFjcXVpcmVkLCB0aGF0IHdvdWxk IGJlIGluZnJpbmdlZCBieSBzb21lIG1hbm5lciwgcGVybWl0dGVkCmJ5IHRoaXMgTGljZW5zZSwg b2YgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBpdHMgY29udHJpYnV0b3IgdmVyc2lvbiwKYnV0 IGRvIG5vdCBpbmNsdWRlIGNsYWltcyB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBvbmx5IGFzIGEK Y29uc2VxdWVuY2Ugb2YgZnVydGhlciBtb2RpZmljYXRpb24gb2YgdGhlIGNvbnRyaWJ1dG9yIHZl cnNpb24uICBGb3IKcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgaW5jbHVk ZXMgdGhlIHJpZ2h0IHRvIGdyYW50CnBhdGVudCBzdWJsaWNlbnNlcyBpbiBhIG1hbm5lciBjb25z aXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZgp0aGlzIExpY2Vuc2UuCgogIEVhY2ggY29u dHJpYnV0b3IgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1m cmVlCnBhdGVudCBsaWNlbnNlIHVuZGVyIHRoZSBjb250cmlidXRvcidzIGVzc2VudGlhbCBwYXRl bnQgY2xhaW1zLCB0bwptYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQgYW5k IG90aGVyd2lzZSBydW4sIG1vZGlmeSBhbmQKcHJvcGFnYXRlIHRoZSBjb250ZW50cyBvZiBpdHMg Y29udHJpYnV0b3IgdmVyc2lvbi4KCiAgSW4gdGhlIGZvbGxvd2luZyB0aHJlZSBwYXJhZ3JhcGhz LCBhICJwYXRlbnQgbGljZW5zZSIgaXMgYW55IGV4cHJlc3MKYWdyZWVtZW50IG9yIGNvbW1pdG1l bnQsIGhvd2V2ZXIgZGVub21pbmF0ZWQsIG5vdCB0byBlbmZvcmNlIGEgcGF0ZW50CihzdWNoIGFz IGFuIGV4cHJlc3MgcGVybWlzc2lvbiB0byBwcmFjdGljZSBhIHBhdGVudCBvciBjb3ZlbmFudCBu b3QgdG8Kc3VlIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50KS4gIFRvICJncmFudCIgc3VjaCBhIHBh dGVudCBsaWNlbnNlIHRvIGEKcGFydHkgbWVhbnMgdG8gbWFrZSBzdWNoIGFuIGFncmVlbWVudCBv ciBjb21taXRtZW50IG5vdCB0byBlbmZvcmNlIGEKcGF0ZW50IGFnYWluc3QgdGhlIHBhcnR5LgoK ICBJZiB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCBrbm93aW5nbHkgcmVseWluZyBvbiBhIHBh dGVudCBsaWNlbnNlLAphbmQgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGlz IG5vdCBhdmFpbGFibGUgZm9yIGFueW9uZQp0byBjb3B5LCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgdGhyb3VnaCBhCnB1YmxpY2x5IGF2YWlsYWJs ZSBuZXR3b3JrIHNlcnZlciBvciBvdGhlciByZWFkaWx5IGFjY2Vzc2libGUgbWVhbnMsCnRoZW4g eW91IG11c3QgZWl0aGVyICgxKSBjYXVzZSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdG8gYmUg c28KYXZhaWxhYmxlLCBvciAoMikgYXJyYW5nZSB0byBkZXByaXZlIHlvdXJzZWxmIG9mIHRoZSBi ZW5lZml0IG9mIHRoZQpwYXRlbnQgbGljZW5zZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHdvcmssIG9y ICgzKSBhcnJhbmdlLCBpbiBhIG1hbm5lcgpjb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50 cyBvZiB0aGlzIExpY2Vuc2UsIHRvIGV4dGVuZCB0aGUgcGF0ZW50CmxpY2Vuc2UgdG8gZG93bnN0 cmVhbSByZWNpcGllbnRzLiAgIktub3dpbmdseSByZWx5aW5nIiBtZWFucyB5b3UgaGF2ZQphY3R1 YWwga25vd2xlZGdlIHRoYXQsIGJ1dCBmb3IgdGhlIHBhdGVudCBsaWNlbnNlLCB5b3VyIGNvbnZl eWluZyB0aGUKY292ZXJlZCB3b3JrIGluIGEgY291bnRyeSwgb3IgeW91ciByZWNpcGllbnQncyB1 c2Ugb2YgdGhlIGNvdmVyZWQgd29yawppbiBhIGNvdW50cnksIHdvdWxkIGluZnJpbmdlIG9uZSBv ciBtb3JlIGlkZW50aWZpYWJsZSBwYXRlbnRzIGluIHRoYXQKY291bnRyeSB0aGF0IHlvdSBoYXZl IHJlYXNvbiB0byBiZWxpZXZlIGFyZSB2YWxpZC4KCiAgSWYsIHB1cnN1YW50IHRvIG9yIGluIGNv bm5lY3Rpb24gd2l0aCBhIHNpbmdsZSB0cmFuc2FjdGlvbiBvcgphcnJhbmdlbWVudCwgeW91IGNv bnZleSwgb3IgcHJvcGFnYXRlIGJ5IHByb2N1cmluZyBjb252ZXlhbmNlIG9mLCBhCmNvdmVyZWQg d29yaywgYW5kIGdyYW50IGEgcGF0ZW50IGxpY2Vuc2UgdG8gc29tZSBvZiB0aGUgcGFydGllcwpy ZWNlaXZpbmcgdGhlIGNvdmVyZWQgd29yayBhdXRob3JpemluZyB0aGVtIHRvIHVzZSwgcHJvcGFn YXRlLCBtb2RpZnkKb3IgY29udmV5IGEgc3BlY2lmaWMgY29weSBvZiB0aGUgY292ZXJlZCB3b3Jr LCB0aGVuIHRoZSBwYXRlbnQgbGljZW5zZQp5b3UgZ3JhbnQgaXMgYXV0b21hdGljYWxseSBleHRl bmRlZCB0byBhbGwgcmVjaXBpZW50cyBvZiB0aGUgY292ZXJlZAp3b3JrIGFuZCB3b3JrcyBiYXNl ZCBvbiBpdC4KCiAgQSBwYXRlbnQgbGljZW5zZSBpcyAiZGlzY3JpbWluYXRvcnkiIGlmIGl0IGRv ZXMgbm90IGluY2x1ZGUgd2l0aGluCnRoZSBzY29wZSBvZiBpdHMgY292ZXJhZ2UsIHByb2hpYml0 cyB0aGUgZXhlcmNpc2Ugb2YsIG9yIGlzCmNvbmRpdGlvbmVkIG9uIHRoZSBub24tZXhlcmNpc2Ug b2Ygb25lIG9yIG1vcmUgb2YgdGhlIHJpZ2h0cyB0aGF0IGFyZQpzcGVjaWZpY2FsbHkgZ3JhbnRl ZCB1bmRlciB0aGlzIExpY2Vuc2UuICBZb3UgbWF5IG5vdCBjb252ZXkgYSBjb3ZlcmVkCndvcmsg aWYgeW91IGFyZSBhIHBhcnR5IHRvIGFuIGFycmFuZ2VtZW50IHdpdGggYSB0aGlyZCBwYXJ0eSB0 aGF0IGlzCmluIHRoZSBidXNpbmVzcyBvZiBkaXN0cmlidXRpbmcgc29mdHdhcmUsIHVuZGVyIHdo aWNoIHlvdSBtYWtlIHBheW1lbnQKdG8gdGhlIHRoaXJkIHBhcnR5IGJhc2VkIG9uIHRoZSBleHRl bnQgb2YgeW91ciBhY3Rpdml0eSBvZiBjb252ZXlpbmcKdGhlIHdvcmssIGFuZCB1bmRlciB3aGlj aCB0aGUgdGhpcmQgcGFydHkgZ3JhbnRzLCB0byBhbnkgb2YgdGhlCnBhcnRpZXMgd2hvIHdvdWxk IHJlY2VpdmUgdGhlIGNvdmVyZWQgd29yayBmcm9tIHlvdSwgYSBkaXNjcmltaW5hdG9yeQpwYXRl bnQgbGljZW5zZSAoYSkgaW4gY29ubmVjdGlvbiB3aXRoIGNvcGllcyBvZiB0aGUgY292ZXJlZCB3 b3JrCmNvbnZleWVkIGJ5IHlvdSAob3IgY29waWVzIG1hZGUgZnJvbSB0aG9zZSBjb3BpZXMpLCBv ciAoYikgcHJpbWFyaWx5CmZvciBhbmQgaW4gY29ubmVjdGlvbiB3aXRoIHNwZWNpZmljIHByb2R1 Y3RzIG9yIGNvbXBpbGF0aW9ucyB0aGF0CmNvbnRhaW4gdGhlIGNvdmVyZWQgd29yaywgdW5sZXNz IHlvdSBlbnRlcmVkIGludG8gdGhhdCBhcnJhbmdlbWVudCwKb3IgdGhhdCBwYXRlbnQgbGljZW5z ZSB3YXMgZ3JhbnRlZCwgcHJpb3IgdG8gMjggTWFyY2ggMjAwNy4KCiAgTm90aGluZyBpbiB0aGlz IExpY2Vuc2Ugc2hhbGwgYmUgY29uc3RydWVkIGFzIGV4Y2x1ZGluZyBvciBsaW1pdGluZwphbnkg aW1wbGllZCBsaWNlbnNlIG9yIG90aGVyIGRlZmVuc2VzIHRvIGluZnJpbmdlbWVudCB0aGF0IG1h eQpvdGhlcndpc2UgYmUgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhcHBsaWNhYmxlIHBhdGVudCBs YXcuCgogIDEyLiBObyBTdXJyZW5kZXIgb2YgT3RoZXJzJyBGcmVlZG9tLgoKICBJZiBjb25kaXRp b25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50 IG9yCm90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGlj ZW5zZSwgdGhleSBkbyBub3QKZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMg TGljZW5zZS4gIElmIHlvdSBjYW5ub3QgY29udmV5IGEKY292ZXJlZCB3b3JrIHNvIGFzIHRvIHNh dGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCkxpY2Vuc2Ug YW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5j ZSB5b3UgbWF5Cm5vdCBjb252ZXkgaXQgYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBhZ3Jl ZSB0byB0ZXJtcyB0aGF0IG9ibGlnYXRlIHlvdQp0byBjb2xsZWN0IGEgcm95YWx0eSBmb3IgZnVy dGhlciBjb252ZXlpbmcgZnJvbSB0aG9zZSB0byB3aG9tIHlvdSBjb252ZXkKdGhlIFByb2dyYW0s IHRoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIHRob3NlIHRlcm1zIGFuZCB0aGlz CkxpY2Vuc2Ugd291bGQgYmUgdG8gcmVmcmFpbiBlbnRpcmVseSBmcm9tIGNvbnZleWluZyB0aGUg UHJvZ3JhbS4KCiAgMTMuIFVzZSB3aXRoIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UuCgogIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGlj ZW5zZSwgeW91IGhhdmUKcGVybWlzc2lvbiB0byBsaW5rIG9yIGNvbWJpbmUgYW55IGNvdmVyZWQg d29yayB3aXRoIGEgd29yayBsaWNlbnNlZAp1bmRlciB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBBZmZl cm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnRvIGEgc2luZ2xlCmNvbWJpbmVkIHdvcmssIGFu ZCB0byBjb252ZXkgdGhlIHJlc3VsdGluZyB3b3JrLiAgVGhlIHRlcm1zIG9mIHRoaXMKTGljZW5z ZSB3aWxsIGNvbnRpbnVlIHRvIGFwcGx5IHRvIHRoZSBwYXJ0IHdoaWNoIGlzIHRoZSBjb3ZlcmVk IHdvcmssCmJ1dCB0aGUgc3BlY2lhbCByZXF1aXJlbWVudHMgb2YgdGhlIEdOVSBBZmZlcm8gR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSwKc2VjdGlvbiAxMywgY29uY2VybmluZyBpbnRlcmFjdGlvbiB0 aHJvdWdoIGEgbmV0d29yayB3aWxsIGFwcGx5IHRvIHRoZQpjb21iaW5hdGlvbiBhcyBzdWNoLgoK ICAxNC4gUmV2aXNlZCBWZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UuCgogIFRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9m CnRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2gg bmV3IHZlcnNpb25zIHdpbGwKYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVy c2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCmFkZHJlc3MgbmV3IHByb2JsZW1zIG9y IGNvbmNlcm5zLgoKICBFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJz aW9uIG51bWJlci4gIElmIHRoZQpQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgY2VydGFpbiBudW1i ZXJlZCB2ZXJzaW9uIG9mIHRoZSBHTlUgR2VuZXJhbApQdWJsaWMgTGljZW5zZSAib3IgYW55IGxh dGVyIHZlcnNpb24iIGFwcGxpZXMgdG8gaXQsIHlvdSBoYXZlIHRoZQpvcHRpb24gb2YgZm9sbG93 aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCBudW1iZXJlZAp2ZXJz aW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZQpGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24g bnVtYmVyIG9mIHRoZQpHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgeW91IG1heSBjaG9vc2Ug YW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQKYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bi4KCiAgSWYgdGhlIFByb2dyYW0gc3BlY2lmaWVzIHRoYXQgYSBwcm94eSBjYW4gZGVjaWRlIHdo aWNoIGZ1dHVyZQp2ZXJzaW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgY2Fu IGJlIHVzZWQsIHRoYXQgcHJveHkncwpwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2Yg YSB2ZXJzaW9uIHBlcm1hbmVudGx5IGF1dGhvcml6ZXMgeW91CnRvIGNob29zZSB0aGF0IHZlcnNp b24gZm9yIHRoZSBQcm9ncmFtLgoKICBMYXRlciBsaWNlbnNlIHZlcnNpb25zIG1heSBnaXZlIHlv dSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudApwZXJtaXNzaW9ucy4gIEhvd2V2ZXIsIG5vIGFkZGl0 aW9uYWwgb2JsaWdhdGlvbnMgYXJlIGltcG9zZWQgb24gYW55CmF1dGhvciBvciBjb3B5cmlnaHQg aG9sZGVyIGFzIGEgcmVzdWx0IG9mIHlvdXIgY2hvb3NpbmcgdG8gZm9sbG93IGEKbGF0ZXIgdmVy c2lvbi4KCiAgMTUuIERpc2NsYWltZXIgb2YgV2FycmFudHkuCgogIFRIRVJFIElTIE5PIFdBUlJB TlRZIEZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkKQVBQTElDQUJM RSBMQVcuICBFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlS SUdIVApIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIFBST0dSQU0gIkFT IElTIiBXSVRIT1VUIFdBUlJBTlRZCk9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElN UExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLApUSEUgSU1QTElFRCBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSClBVUlBP U0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9G IFRIRSBQUk9HUkFNCklTIFdJVEggWU9VLiAgU0hPVUxEIFRIRSBQUk9HUkFNIFBST1ZFIERFRkVD VElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRgpBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQ QUlSIE9SIENPUlJFQ1RJT04uCgogIDE2LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4KCiAgSU4g Tk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJ TiBXUklUSU5HCldJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBX SE8gTU9ESUZJRVMgQU5EL09SIENPTlZFWVMKVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZF LCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZCkdFTkVSQUwsIFNQ RUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9G IFRIRQpVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBO T1QgTElNSVRFRCBUTyBMT1NTIE9GCkRBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VS QVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJEClBBUlRJRVMgT1IgQSBGQUlM VVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgUFJPR1JBTVMpLApF VkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhF IFBPU1NJQklMSVRZIE9GClNVQ0ggREFNQUdFUy4KCiAgMTcuIEludGVycHJldGF0aW9uIG9mIFNl Y3Rpb25zIDE1IGFuZCAxNi4KCiAgSWYgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgYW5kIGxp bWl0YXRpb24gb2YgbGlhYmlsaXR5IHByb3ZpZGVkCmFib3ZlIGNhbm5vdCBiZSBnaXZlbiBsb2Nh bCBsZWdhbCBlZmZlY3QgYWNjb3JkaW5nIHRvIHRoZWlyIHRlcm1zLApyZXZpZXdpbmcgY291cnRz IHNoYWxsIGFwcGx5IGxvY2FsIGxhdyB0aGF0IG1vc3QgY2xvc2VseSBhcHByb3hpbWF0ZXMKYW4g YWJzb2x1dGUgd2FpdmVyIG9mIGFsbCBjaXZpbCBsaWFiaWxpdHkgaW4gY29ubmVjdGlvbiB3aXRo IHRoZQpQcm9ncmFtLCB1bmxlc3MgYSB3YXJyYW50eSBvciBhc3N1bXB0aW9uIG9mIGxpYWJpbGl0 eSBhY2NvbXBhbmllcyBhCmNvcHkgb2YgdGhlIFByb2dyYW0gaW4gcmV0dXJuIGZvciBhIGZlZS4K CiAgICAgICAgICAgICAgICAgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUwoKICAgICAg ICAgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCgogIElm IHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUg Z3JlYXRlc3QKcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hp ZXZlIHRoaXMgaXMgdG8gbWFrZSBpdApmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiBy ZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KCiAgVG8gZG8gc28sIGF0 dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QK dG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBl ZmZlY3RpdmVseQpzdGF0ZSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxl IHNob3VsZCBoYXZlIGF0IGxlYXN0CnRoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIg dG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgoKICAgIDxvbmUgbGluZSB0byBnaXZl IHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CiAg ICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgoKICAgIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieQogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVy IHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCgogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCiAgICBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICAgYWxv bmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xp Y2Vuc2VzLz4uCgpBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkg ZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KCiAgSWYgdGhlIHByb2dyYW0gZG9lcyB0ZXJtaW5h bCBpbnRlcmFjdGlvbiwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydApub3RpY2UgbGlrZSB0aGlzIHdo ZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CgogICAgPHByb2dyYW0+ICBDb3B5 cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgogICAgVGhpcyBwcm9ncmFtIGNvbWVz IHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4K ICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3Ry aWJ1dGUgaXQKICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3Ig ZGV0YWlscy4KClRoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMn IHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQpwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZS4gIE9mIGNvdXJzZSwgeW91ciBwcm9ncmFtJ3MgY29tbWFuZHMKbWlnaHQgYmUgZGlm ZmVyZW50OyBmb3IgYSBHVUkgaW50ZXJmYWNlLCB5b3Ugd291bGQgdXNlIGFuICJhYm91dCBib3gi LgoKICBZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEg cHJvZ3JhbW1lcikgb3Igc2Nob29sLAppZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2Ns YWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYgbmVjZXNzYXJ5LgpGb3IgbW9yZSBpbmZvcm1hdGlv biBvbiB0aGlzLCBhbmQgaG93IHRvIGFwcGx5IGFuZCBmb2xsb3cgdGhlIEdOVSBHUEwsIHNlZQo8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCgogIFRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0KaW50byBw cm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGli cmFyeSwgeW91Cm1heSBjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBw cm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aAp0aGUgbGlicmFyeS4gIElmIHRoaXMgaXMgd2hh dCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKUHVibGljIExpY2Vu c2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuICBCdXQgZmlyc3QsIHBsZWFzZSByZWFkCjxodHRw Oi8vd3d3LmdudS5vcmcvcGhpbG9zb3BoeS93aHktbm90LWxncGwuaHRtbD4uCgAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABk c2xpZGUtMC41LjQuMC4yMDI0MTEyMy42Mjc0OS8uZGlyLWxvY2Fscy5lbAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY0NAAwMDAxNzUw ADAwMDE3NTAAMDAwMDAwMDA0MTYAMTQ2NTY0MzYzMzMAMDE1MzAyACAwAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAcGhpAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAABwaGkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs7 OyBEaXJlY3RvcnkgTG9jYWwgVmFyaWFibGVzICAgICAgICAgICAtKi0gbm8tYnl0ZS1jb21waWxl OiB0OyAtKi0KOzs7IEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSAoaW5mbyAiKGVtYWNzKSBEaXJl Y3RvcnkgVmFyaWFibGVzIikKCigoZW1hY3MtbGlzcC1tb2RlCiAgKGZpbGwtY29sdW1uIC4gNzgp CiAgKHNlbnRlbmNlLWVuZC1kb3VibGUtc3BhY2UgLiB0KQogIChzaG93LXRyYWlsaW5nLXdoaXRl c3BhY2UgLiB0KQogIChpbmRlbnQtdGFicy1tb2RlIC4gbmlsKSkpCgAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZHNs aWRlLTAuNS40LjAuMjAyNDExMjMuNjI3NDkvUkVBRE1FLm1kAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA2NjQAMDAwMTc1MAAw MDAxNzUwADAwMDAwMDczNDUyADE0NzIwMzEzMzA2ADAxNDEyNgAgMAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHBoaQAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAcGhpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8IS0t ICEhIVRISVMgRklMRSBIQVMgQkVFTiBHRU5FUkFURUQhISEgRWRpdCBSRUFETUUub3JnIC0tPgoK aHR0cHM6Ly9naXRodWIuY29tL3Bvc2l0cm9uLXNvbHV0aW9ucy9kc2xpZGUvYXNzZXRzLzczNzEw OTMzLzA2YTY2ZTQyLWExNzItNDhiYS05NjhmLTVmNWIxOTg5YTg2OAoKPGEgaHJlZj0iaHR0cHM6 Ly9tZWxwYS5vcmcvIy9kc2xpZGUiPjxpbWcgc3JjPSJodHRwczovL21lbHBhLm9yZy9wYWNrYWdl cy9kc2xpZGUtYmFkZ2Uuc3ZnIiBhbHQ9Im1lbHBhIHBhY2thZ2UiPjwvYT4gPGEgaHJlZj0iaHR0 cHM6Ly9zdGFibGUubWVscGEub3JnLyMvZHNsaWRlIj48aW1nIHNyYz0iaHR0cHM6Ly9zdGFibGUu bWVscGEub3JnL3BhY2thZ2VzL2RzbGlkZS1iYWRnZS5zdmciIGFsdD0ibWVscGEgc3RhYmxlIHBh Y2thZ2UiPjwvYT4KPGEgaHJlZj0iaHR0cHM6Ly9lbHBhLm5vbmdudS5vcmcvbm9uZ251L2RzbGlk ZS5odG1sIj48aW1nIHNyYz0iaHR0cHM6Ly9lbHBhLm5vbmdudS5vcmcvbm9uZ251L2RzbGlkZS5z dmciIGFsdD0iTm9uLUdOVSBFTFBBIj48L2E+CgoKIyBQcmVzZW50IE9yZyBEb2N1bWVudHMg8J+m hAoKLSAgIFBlci1oZWFkaW5nIGNvbmZpZ3VyYWJsZSBiZWhhdmlvcgotICAgTmVzdGVkIG9yIGlu ZGVwZW5kZW50IGNoaWxkIHNsaWRlcwotICAgSGVhZGVyIHdpdGggYnJlYWRjcnVtYnMgZ2VuZXJh dGVkIGZyb20gZG9jdW1lbnQga2V5d29yZHMKLSAgIEFjdGlvbnMgdGhhdCBjb25zdW1lIHR5cGlj YWwgb3JnIGRhdGEgaW4gc21hcnQgd2F5cwoKCiMjIEZ1bGx5IFByb2dyYW1tYWJsZSAg4pyoCgot ICAgU2NyaXB0IHN0ZXBzIGluIHlvdXIgcHJlc2VudGF0aW9uIHdpdGggT3JnIGJhYmVsIGJsb2Nr cwotICAgSW5jb3Jwb3JhdGUgKiphbnl0aGluZyoqIEVtYWNzIGRvZXMgaW50byBhIHByZXNlbnRh dGlvbgotICAgQ29udmVuaWVudCBBUEkgZm9yIHF1aWNrbHkgd3JpdGluZyByZWxpYWJsZSBjdXN0 b20gYWN0aW9ucyBmb3IgcmV1c2UKCgojIyBTdGF0dXMg8J+boO+4jwoKVmVyc2lvbiAwLjUuNCDw n5G3IFN1YnNjcmliZSB0byBQb3NpdHJvbidzIFtZb3VUdWJlXShodHRwczovL3d3dy55b3V0dWJl LmNvbS9AUG9zaXRyb24tZ3Y3ZG8pIGZvciB1cGRhdGVzIGFuZCByZWxhdGVkIGRlbW9uc3RyYXRp b25zLgoKLSAgIFN0YWJpbGl6aW5nIHRoZSBBUEkgYW5kIG5hbWluZyAoZXN0aW1hdGVkIDk4JSBz dGFibGUpCi0gICBHYXRoZXJpbmcgdXNlciBmZWVkYmFjayAmIGV4cGVyaWVuY2UgdG8gcGlucG9p bnQgYWN0dWFsIHVzZSBwYXR0ZXJucwotICAgQWNjZXB0aW5nIFBSJ3MgYW5kIGlzc3VlIHJlcG9y dHMKLSAgIFNvbWUgYmVoYXZpb3JzIG1heSBiZSBhZHZlcnRpc2VkIGFzIHdvcmtpbmcgYWxyZWFk eSB3aGVuIHRoZXkgYXJlIG9ubHkgOTAlIGltcGxlbWVudGVkLiBJIGhhdmUgbm8gaWRlYSB3aGF0 IHlvdSB3YW50LiAqKkZpbGUgaXNzdWVzKiouCgoKIyBJbnN0YWxsYXRpb24KCmBgYGVsaXNwCjs7 IEZyb20gTUVMUEEgb3IgRUxQQQoodXNlLXBhY2thZ2UgZHNsaWRlKQoKOzsgcGFja2FnZS12Ywoo cGFja2FnZS12Yy1pbnN0YWxsCiAnKGRzbGlkZQogICA6dXJsICJodHRwczovL2dpdGh1Yi5jb20v cG9zaXRyb24tc29sdXRpb25zL2RzbGlkZS5naXQiKSkKCjs7IHVzaW5nIGVscGFjYSdzIHdpdGgg ZXhwbGljaXQgcmVjaXBlCih1c2UtcGFja2FnZSBkc2xpZGUKICAgIDplbHBhY2EgKGRzbGlkZSA6 aG9zdCBnaXRodWIKICAgICAgICAgICAgICAgICAgICA6cmVwbyAicG9zaXRyb24tc29sdXRpb25z L2RzbGlkZSIpKQoKOzsgc3RyYWlnaHQgd2l0aCBleHBsaWNpdCByZWNpcGUKKHVzZS1wYWNrYWdl IGRzbGlkZQogICAgOnN0cmFpZ2h0IChkc2xpZGUgOnR5cGUgZ2l0IDpob3N0IGdpdGh1YgogICAg ICAgICAgICAgICAgICAgICAgOnJlcG8gInBvc2l0cm9uLXNvbHV0aW9ucy9kc2xpZGUiKSkKCjs7 IG9yIHVzZSBtYW51YWwgbG9hZC1wYXRoICYgcmVxdWlyZSwgeW91IGJyYXZlIHlhayBzaGF2ZXIK YGBgCgoKIyMgVHJ5IEl0IE91dAoKV2l0aCBqdXN0IGRlZmF1bHRzLCBydW4gYGRzbGlkZS1kZWNr LXN0YXJ0YCBvbiB5b3VyIGV4aXN0aW5nIGRvY3VtZW50cy4gWW91IGNhbiBsb2FkIHRoZSBleGFt cGxlcyBpbiB0aGUgWy4vdGVzdC9kZW1vLm9yZ10oLi90ZXN0L2RlbW8ubWQpIGZpbGUgdG8gc2Vl IGEgc2hvd2Nhc2Ugb2YgY29uZmlndXJhdGlvbiBiZWhhdmlvci4KClRoZSBkZWZhdWx0IGtleW1h cCB1c2VzIGFycm93IGtleXMuIExlZnQgYW5kIHJpZ2h0IGFyZSBgZHNsaWRlLWRlY2stZm9yd2Fy ZGAgYW5kIGBkc2xpZGUtZGVjay1iYWNrd2FyZGAuIFVwIGlzIGBkc2xpZGUtZGVjay1zdGFydGAg YW5kIHdpbGwgc2hvdyB0aGUgY29udGVudHMuIERvd24gaXMgYGRzbGlkZS1kZWNrLXN0b3BgIGFu ZCB3aWxsIHN0b3AgdGhlIHNsaWRlIHNob3cuCgoKIyBGZWF0dXJlcwoKCiMjIFNpbXBsZSBVc2Vy IEludGVyZmFjZQoKRnVsbHkgcHJvZ3JhbW1hYmxlIHNlcXVlbmNlcyBiZWhpbmQgYSB0d28tYnV0 dG9uIHByZXNlbnRhdGlvbiBpbnRlcmZhY2U6CgotICAgYGRzbGlkZS1kZWNrLWZvcndhcmRgCi0g ICBgZHNsaWRlLWRlY2stYmFja3dhcmRgCgoKIyMgQ29udGVudHMgTmF2aWdhdGlvbgoKQ2FsbCBg ZHNsaWRlLWNvbnRlbnRzYCB0byBzaG93IGEgY29udGVudHMgb3ZlcnZpZXcuIENhbGxpbmcgYGRz bGlkZS1kZWNrLWZvcndhcmRgIGFuZCBgZHNsaWRlLWRlY2stYmFja3dhcmRgIGluIHRoZSBjb250 ZW50cyBjYW4gcXVpY2tseSBtb3ZlIHRocm91Z2ggaGVhZGluZ3MuIENhbGwgYGRzbGlkZS1kZWNr LXN0YXJ0YCBhZ2FpbiB0byByZXN1bWUgdGhlIHByZXNlbnRhdGlvbiBmcm9tIHRoYXQgcG9pbnQu CgoKIyMgTmFycmF0ZSBXaGlsZSBQcmVzZW50aW5nCgpDaGVjayBvdXQgYGRzbGlkZS1kZWNrLWRl dmVsb3BgLiBZb3UgY2FuIHNlZSB5b3VyIGhpZGRlbiBjb21tZW50cyBhbmQgdGhlIGFwcHJveGlt YXRlIHByb2dyZXNzIGluZGljYXRpb25zLiBCYWJlbCBhY3Rpb25zIHdpbGwgaGlnaGxpZ2h0IGJs b2NrcyBhcyB0aGV5IGV4ZWN1dGUsIHNob3dpbmcgeW91IHdoYXQganVzdCBoYXBwZW5lZC4KCgoj IyBIaWRlIE1hcmt1cAoKQnkgZGVmYXVsdCwgdGhlIGBkc2xpZGUtYWN0aW9uLWhpZGUtbWFya3Vw YCBhY3Rpb24gaXMgY29uZmlndXJlZCBpbiBgZHNsaWRlLWRlZmF1bHQtYWN0aW9uc2AuIExvb2tz IGNsZWFuIG91dCBvZiB0aGUgYm94LiBDb21tZW50ZWQgYW5kIGA6bm9zbGlkZTpgIG9yIGA6bm9l eHBvcnQ6YCBoZWFkaW5ncyBhcmUgZmlsdGVyZWQuIFRvZG9zIGFuZCB0YWdzIGFyZSBoaWRkZW4u CgoKIyMgSW5kZXBlbmRlbnQgQnVmZmVyIFN0YXRlCgpUaGUgYWN0dWFsIGRpc3BsYXkgaXMgZG9u ZSBpbiBhbiBpbmRpcmVjdCBidWZmZXIuIFlvdXIgaG9va3MgYW5kIGN1c3RvbWl6YXRpb25zIGZv ciBwcmVzZW50YXRpb24gd2lsbCBub3QgcG9sbHV0ZSB5b3VyIGVkaXRpbmcgYnVmZmVyLiBEaXJ0 eSBzdGF0ZSB3aWxsIG5vdCBwaWxlIHVwIGluIHlvdXIgcHJlc2VudGF0aW9uIGJ1ZmZlciwgZ3Jl YXRseSBpbmNyZWFzaW5nIHJlbGlhYmlsaXR5IGV2ZW4gaWYgeW91ciBjdXN0b20gRWxpc3Agc2Ny aXB0aW5nIGlzIHNsb3BweSDwn5KpLgoKCiMgVGFibGUgb2YgQ29udGVudHMKCi0gICBbQ3JlYXRp bmddKCNDcmVhdGluZykKICAgIC0gICBbQWN0aW9uc10oI0FjdGlvbnMpCiAgICAtICAgW0FkZGlu ZyBBY3Rpb25zXSgjQWRkaW5nLUFjdGlvbnMpCiAgICAtICAgW0FjdGlvbiBBcmd1bWVudHNdKCNB Y3Rpb24tQXJndW1lbnRzKQogICAgLSAgIFtBbm5vdGF0aW5nIEVsZW1lbnRzXSgjQW5ub3RhdGlu Zy1FbGVtZW50cykKICAgIC0gICBbQmFiZWwgU2NyaXB0aW5nXSgjQmFiZWwtU2NyaXB0aW5nKQog ICAgLSAgIFtIaWRpbmcgTWFya3VwXSgjSGlkaW5nLU1hcmt1cCkKICAgIC0gICBbRmlsdGVyaW5n IEhlYWRpbmdzXSgjRmlsdGVyaW5nLUhlYWRpbmdzKQogICAgLSAgIFtIZWFkZXIgS2V5d29yZHNd KCNIZWFkZXItS2V5d29yZHMpCiAgICAtICAgW0ZpbGUgTG9jYWwgVmFyaWFibGVzXSgjRmlsZS1M b2NhbC1WYXJpYWJsZXMpCi0gICBbUHJlc2VudGluZ10oI1ByZXNlbnRpbmcpCiAgICAtICAgW1R3 byBCdXR0b24gSW50ZXJmYWNlXSgjVHdvLUJ1dHRvbi1JbnRlcmZhY2UpCiAgICAtICAgW0NvbnRl bnRzIEludGVyZmFjZV0oI0NvbnRlbnRzLUludGVyZmFjZSkKICAgIC0gICBbTmFycmF0aW5nXSgj TmFycmF0aW5nKQogICAgLSAgIFtDdXJzb3IgVmlzaWJpbGl0eV0oI0N1cnNvci1WaXNpYmlsaXR5 KQotICAgW0NvbmZpZ3VyaW5nXSgjQ29uZmlndXJpbmcpCiAgICAtICAgW0JpbmRpbmddKCNCaW5k aW5nKQogICAgLSAgIFtIb29rc10oI0hvb2tzKQogICAgLSAgIFtTdGVlemluZyBPcmddKCNTdGVl emluZy1PcmcpCi0gICBbRXh0ZW5kaW5nXSgjRXh0ZW5kaW5nKQogICAgLSAgIFtDcmVhdGluZyBB Y3Rpb25zXSgjQ3JlYXRpbmctQWN0aW9ucykKICAgIC0gICBbQSBDdXN0b20gQWN0aW9uXSgjQS1D dXN0b20tQWN0aW9uKQogICAgLSAgIFtEZWZhdWx0IENsYXNzZXNdKCNEZWZhdWx0LUNsYXNzZXMp Ci0gICBbSGFja2luZ10oI0hhY2tpbmcpCiAgICAtICAgW09iamVjdHMgJiBPd25lcnNoaXBdKCNP YmplY3RzLSYtT3duZXJzaGlwKQogICAgLSAgIFtTdGF0ZWZ1bCBTZXF1ZW5jZV0oI1N0YXRlZnVs LVNlcXVlbmNlKQogICAgLSAgIFtGbG93IENvbnRyb2xdKCNGbG93LUNvbnRyb2wpCiAgICAtICAg W0luc3RhbnRpYXRpbmcgU2xpZGVzXSgjSW5zdGFudGlhdGluZy1TbGlkZXMpCi0gICBbUGFja2Fn ZSBQYWlyaW5nc10oI1BhY2thZ2UtUGFpcmluZ3MpCiAgICAtICAgW09yZyBNb2Rlcm5dKCNPcmct TW9kZXJuKQogICAgLSAgIFtPcmcgQXBwZWFyXSgjT3JnLUFwcGVhcikKICAgIC0gICBbTWFzdGVy IG9mIENlcmVtb25pZXNdKCNNYXN0ZXItb2YtQ2VyZW1vbmllcykKICAgIC0gICBbT3BlbiBCcm9h ZGNhc3RlciBTb2Z0d2FyZV0oI09wZW4tQnJvYWRjYXN0ZXItU29mdHdhcmUpCiAgICAtICAgW21v b20uZWxdKCNtb29tLmVsKQotICAgW0NvbnRyaWJ1dGluZ10oI0NvbnRyaWJ1dGluZykKICAgIC0g ICBbV29yayBJbiBQcm9ncmVzcyDwn5qnXSgjV29yay1Jbi1Qcm9ncmVzcy3wn5qnKQotICAgW1Ro YW5rc10oI1RoYW5rcykKCgojIENyZWF0aW5nCgpNYWtpbmcgYW4gb3JnIGRvY3VtZW50IGludG8g YSBwcmVzZW50YXRpb24uCgoKIyMgQWN0aW9ucwoKQnkgZGVmYXVsdCwgeW91IGp1c3QgZ2V0IG9u ZSBzbGlkZSBwZXIgaGVhZGluZywgYSBoZWFkZXIsIGFuZCBzb21lIGFuaW1hdGlvbi4gVGhpcyBp cyBub3QgdmVyeSBleGNpdGluZy4gWW91IG5lZWQgdG8gYWRkIGFjdGlvbnMgdG8gc2xpZGVzIHRv IGNvbnN1bWUgdGhlaXIgc2VjdGlvbiBjb250ZW50IGluIGEgbW9yZSBlbmdhZ2luZyB3YXkuCgpU aGVyZSBhcmUgdHdvIGtpbmRzIG9mIGFjdGlvbnM6CgotICAgYFNsaWRlIGFjdGlvbnNgOiBtb3N0 bHkgcmVzcG9uc2libGUgZm9yIG5hcnJvd2luZyB0byBhIHNsaWRlIGFuZCB0aGVuIGhhbmRsaW5n IHRoZSBjaGlsZCBoZWFkaW5ncywgZWl0aGVyIGlubGluZSBvciBhcyBzZXBhcmF0ZSBzbGlkZXMK LSAgIGBTZWN0aW9uIGFjdGlvbnNgOiB3b3JrIG9uIHRoZSBjb250ZW50IGluIHRoZSBoZWFkaW5n J3Mgc2VjdGlvbi4KClRvIGJyb3dzZSBhbGwgYWN0aW9ucywgYmVjYXVzZSB0aGV5IGFyZSBhbGwg RUlFSU8gY2xhc3NlcywgeW91IGNhbiB1c2UgYGVpZWlvLWJyb3dzZWAgYW5kIHNlZSB0aGUgYWN0 aW9ucyBkZXNjZW5kIGZyb20gYGRzbGlkZS1hY3Rpb25gLgoKYGBgCistLWRzbGlkZS1zdGF0ZWZ1 bC1zZXF1ZW5jZQogICAgICstLWRzbGlkZS1hY3Rpb24KICAgICAgICAgICstLWRzbGlkZS1hY3Rp b24tcHJvcGVydGl6ZQogICAgICAgICAgKy0tZHNsaWRlLWFjdGlvbi1pbWFnZQogICAgICAgICAg Ky0tZHNsaWRlLWFjdGlvbi1iYWJlbAogICAgICAgICAgKy0tZHNsaWRlLWFjdGlvbi1pdGVtLXJl dmVhbAogICAgICAgICAgKy0tZHNsaWRlLWFjdGlvbi1oaWRlLW1hcmt1cAogICAgICAgICAgKy0t ZHNsaWRlLXNsaWRlLWFjdGlvbgogICAgICAgICAgICAgICArLS1kc2xpZGUtc2xpZGUtYWN0aW9u LWV2ZXJ5LWNoaWxkCiAgICAgICAgICAgICAgICstLWRzbGlkZS1zbGlkZS1hY3Rpb24taW5saW5l CiAgICAgICAgICAgICAgICstLWRzbGlkZS1zbGlkZS1hY3Rpb24tY2hpbGQKICAgICAgICAgICAg ICAgKy0tZHNsaWRlLXNsaWRlLWFjdGlvbi1mbGF0CmBgYAoKCiMjIEFkZGluZyBBY3Rpb25zCgpC eSBkZWZhdWx0LCBldmVyeSBzbGlkZSBoYXMgdHdvIGFjdGlvbnMsIGNvbmZpZ3VyYWJsZSBpbiBg ZHNsaWRlLWRlZmF1bHQtYWN0aW9uc2A6CgotICAgYGRzbGlkZS1hY3Rpb24tcHJvcGVydGl6ZWAg Zm9yIGFkZGluZyB0ZXh0IHByb3BlcnRpZXMgdG8gYXJiaXRyYXJ5IGVsZW1lbnRzCi0gICBgZHNs aWRlLWFjdGlvbi1oaWRlLW1hcmt1cGAgdG8gaGlkZSBrZXl3b3JkcywgdG9kbyBzdGF0ZXMsIGFu ZCB0YWdzLCBhbGxvd2luZyB5b3UgdG8gaGF2ZSB0aGVzZSB0aGluZ3MgaW4geW91ciBzb3VyY2Ug d2l0aG91dCB0aGVtIGNsdXR0ZXJpbmcgdGhlIHByZXNlbnRhdGlvbgoKQWN0aW9ucyBtdXN0IGJl IGFkZGVkIHRvIGEgc2xpZGUgdXNpbmcgdGhlIHNsaWRlJ3MgcHJvcGVydHkgZHJhd2VyLgoKLSAg IGBEU0xJREVfU0xJREVfQUNUSU9OYDogVXN1YWxseSBuYXJyb3dzIHRvIHRoZSBzbGlkZSBhbmQg Y3JlYXRlcyBjaGlsZHJlbiBmcm9tIGNoaWxkIGhlYWRpbmdzLiBMaWZlY3ljbGUgZW5jbG9zZXMg dGhlIHNlY3Rpb24gYWN0aW9ucy4KLSAgIGBEU0xJREVfQUNUSU9OUzpgIE1vc3QgY29tbW9ubHkg Y3VzdG9taXplZC4gWW91IGNhbiBsaXN0IG11bHRpcGxlIGFjdGlvbnMuIEVhY2ggb25lIHdpbGwg c3RlcCB0aHJvdWdoIGl0cyBmb3J3YXJkIGFuZCBiYWNrd2FyZCBzdGVwcy4KClJlZ3VsYXIgT3Jn IE1vZGUgbWFya3VwIGlzIHVzZWQgdG8gYWRkIGFjdGlvbnMgdG8gaGVhZGluZ3MuICBTZWUgbW9y ZSBleGFtcGxlcyBpbiB0aGUgW1suLi90ZXN0XV0gZGlyZWN0b3J5LgoKYGBgb3JnCiogRnVsbCBT Y3JlZW4gSW1hZ2VzCjpQUk9QRVJUSUVTOgo6RFNMSURFX0FDVElPTlM6IGRzbGlkZS1hY3Rpb24t aW1hZ2VzCjpFTkQ6CiMrYXR0cl9odG1sOiA6d2lkdGggNTAlCltbLi9pbWFnZXMvZW1hY3NlbjQu anBlZ11dIFtbLi9pbWFnZXMvYmVmb3JlLWdvb2dsZTMuanBlZ11dCmBgYAoKCiMjIEFjdGlvbiBB cmd1bWVudHMKCk1hbnkgYWN0aW9ucyB1bmRlcnN0YW5kIGFyZ3VtZW50cywgYWxsb3dpbmcgdHVu aW5nIG9mIHNpbWlsYXIgYmVoYXZpb3JzIGZyb20gdGhlIHNhbWUgY2xhc3MuCgpUbyB2aWV3IGFu IGFjdGlvbidzIGFyZ3VtZW50cywgY2FsbCBgZGVzY3JpYmUtc3ltYm9sYCBvbiBpdC4gQW55IHNs b3QgZGVmaW5pdGlvbiB1c3VhbGx5IGhhcyB0aGUgc2FtZSBgOmluaXRhcmdgIGFuZCB3aWxsIGJl IHVuZGVyc3Rvb2Qgd2hlbiBhZGRlZCBhcyBhIHBsaXN0LXN0eWxlIGFyZ3VtZW50LgoKQ29uZmln dXJpbmcgdGhlIHNsb3QgaXMgZG9uZSBieSBhZGRpbmcgcGxpc3Qtc3R5bGUgcHJvcGVydGllcyBh ZnRlciB0aGUgY2xhc3MgbmFtZToKCmBgYG9yZwo6UFJPUEVSVElFUzoKOkRTTElERV9BQ1RJT05T OiBkc2xpZGUtYWN0aW9uLWl0ZW0tcmV2ZWFsIDppbmxpbmUgdAo6RU5EOgpgYGAKCllvdSBjYW4g YWxzbyB1c2UgInByb3BlcnR5KyIgc3ludGF4IHRvIGFkZCB0byBhIHByb3BlcnR5LCBhbmQgdGhl c2UgYWNjZXB0IHBsaXN0IGFyZ3VtZW50cyB0b286CgpgYGBvcmcKOlBST1BFUlRJRVM6CjpEU0xJ REVfQUNUSU9OUzogZHNsaWRlLWFjdGlvbi1iYWJlbAo6RFNMSURFX0FDVElPTlMrOiBkc2xpZGUt YWN0aW9uLWltYWdlcyA6ZnVsbC1mcmFtZSB0CjpFTkQ6CmBgYAoK8J+apyBUaGUgY3VycmVudCBw bGlzdCByZWFkIGltcGxlbWVudGF0aW9uIHNwbGl0cyB0aGUgc3RyaW5nIHJhdGhlciB0aGFuIHVz aW5nIGByZWFkLXN0cmluZ2AgYW5kIGlzIHRoZXJlZm9yZSBub3Qgc21hcnQgZW5vdWdoIHRvIHBh cnNlIGxpc3RzIGFzIGFyZ3VtZW50cy4gSG93ZXZlciBgZHNsaWRlLWFjdGlvbi1wcm9wZXJ0aXpl YCBkZW1vbnN0cmF0ZXMgZG9pbmcgdGhpcyBjb3JyZWN0bHkgYW5kIHNob3dzIHRoYXQgaXQgd2ls bCBiZSBwb3NzaWJsZSBpZiBuZWVkZWQuCgoKIyMgQW5ub3RhdGluZyBFbGVtZW50cwoKU29tZSBh Y3Rpb25zLCBzdWNoIGFzIGBkc2xpZGUtYWN0aW9uLXByb3BlcnRpemVgLCBjYW4ndCBkZWNpZGUg d2hpY2ggZWxlbWVudHMgdG8gb3BlcmF0ZSBvbiBvciB3aGF0IHRvIGRvIHdpdGggdGhlIGVsZW1l bnQuIFlvdSBjYW4gYWRkIHNvbWUgbWV0YSBkYXRhIHRvIGFuIGVsZW1lbnQgdXNpbmcgYW4gKiph ZmZpbGlhdGVkIGtleXdvcmQqKi4KCuKaoO+4jyBJZiB5b3UgYXJlIGV4dGVuZGluZyBhbiBhY3Rp b24gYW5kIHdhbnQgdG8gY3JlYXRlIHlvdXIgb3duIGFmZmlsaWF0ZWQga2V5d29yZCwgdGhleSBt dXN0IHN0YXJ0IHdpdGggYGF0dHJgIG9yIGVsc2UgdGhlIHBhcnNlciB3aWxsIG5vdCBjb25zaWRl ciB0aGVtIGFmZmlsaWF0ZWQhCgpgYGBvcmcKKiBGYW5jeSBUZXh0CjpQUk9QRVJUSUVTOgo6RFNM SURFX0FDVElPTlM6IGRzbGlkZS1hY3Rpb24tcHJvcGVydGl6ZQo6RU5EOgpBZGQgdGV4dCBwcm9w ZXJ0aWVzIHRvIGFuIGVsZW1lbnQgdXNpbmcgdGhlID1hdHRyX2RzbGlkZV9wcm9wZXJ0aXplPSBh ZmZpbGlhdGVkIGtleXdvcmQuICBObyBxdW90aW5nIGlzIHJlcXVpcmVkLiAgTGlzdHMgd2lsbCBi ZSBpbnRlcnByZXRlZCBhcyBzdWNoLgoKIythdHRyX2RzbGlkZV9wcm9wZXJ0aXplOiBmYWNlICg6 YmFja2dyb3VuZCAiI2RkZGRmZiIgOmZvcmVncm91bmQgIiMwMDAwMDAiIDp3ZWlnaHQgYm9sZCA6 aGVpZ2h0IDIuMCkKVGhpcyBpcyBzb21lIGZhbmN5IHRleHQKYGBgCgoKIyMgQmFiZWwgU2NyaXB0 aW5nCgpZb3UgY2FuIHdyaXRlIGN1c3RvbSBzY3JpcHRzIGludG8geW91ciBwcmVzZW50YXRpb24g YXMgT3JnIEJhYmVsIGJsb2Nrcy4gVGhlc2UgY2FuIGJlIGV4ZWN1dGVkIHdpdGggdGhlIGBkc2xp ZGUtYWN0aW9uLWJhYmVsYCBhY3Rpb24uCgpCeSBkZWZhdWx0IGJsb2NrcyBvbmx5IGV4ZWN1dGUg Z29pbmcgZm9yd2FyZCwgb25lIGJsb2NrIHBlciBzdGVwLiBZb3UgbmVlZCB0byBsYWJlbCB5b3Vy IGJsb2NrcyB3aXRoIGxpZmVjeWNsZSBtZXRob2RzIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8g Z28gZm9yd2FyZHMgYW5kIGJhY2t3YXJkcyBvciBleGVjdXRlIHRoZW0gYXQgdGhlIGJlZ2lubmlu ZyBvciBlbmQgb2YgYSBzbGlkZS4gU2VlIHRoZSBgZHNsaWRlLWFjdGlvbi1iYWJlbGAgY2xhc3Mg YW5kIGV4YW1wbGVzIGluIFsuL3Rlc3QvZGVtby5vcmddKC4vdGVzdC9kZW1vLm1kKS4KClRoZSBg IythdHRyX2RzbGlkZTpgIGFmZmlsaWF0ZWQga2V5d29yZCBpcyB1c2VkIHRvIGNvbmZpZ3VyZSB3 aGljaCBtZXRob2RzIHdpbGwgcnVuIHRoZSBibG9jay4gQmxvY2sgbGFiZWxzIHRoYXQgYXJlIHVu ZGVyc3Rvb2Q6CgotICAgYGJlZ2luYCBhbmQgYGVuZGAgYXJlIHJ1biB3aGVuIHRoZSBzbGlkZSBp cyBpbnN0YW50aWF0ZWQsIGdvaW5nIGZvcndhcmQgYW5kIGJhY2t3YXJkIHJlc3BlY3RpdmVseS4g WW91IGNhbiBoYXZlIHNldmVyYWwgYmxvY2tzIHdpdGggdGhlc2UgbWV0aG9kcywgYW5kIHRoZXkg d2lsbCBiZSBydW4gZnJvbSAqKnRvcC10by1ib3R0b20qKiBhbHdheXMsIG1ha2luZyBpdCBlYXNp ZXIgdG8gcmUtdXNlIGNvZGUgdXN1YWxseS4KCi0gICBgZmluYWxgIGlzIG9ubHkgY2FsbGVkIHdo ZW4gbm8gcHJvZ3Jlc3MgY2FuIGJlIG1hZGUgb3IgaWYgdGhlIHByZXNlbnRhdGlvbiBpcyBzdG9w cGVkLgoKLSAgIGBmb3J3YXJkYCBhbmQgYGJhY2t3YXJkYCBhcmUgc2VsZi1leHBsYW5hdG9yeS4g UG9zaXRpb24geW91ciBgYmFja3dhcmRgIGJsb2NrcyAqKmFib3ZlKiogYW55IGJsb2NrIHRoYXQg dGhleSB1bmRvCgotICAgYGJvdGhgIHJ1bnMgZWl0aGVyIGRpcmVjdGlvbi4gSXQgd2lsbCBub3Qg cmVwZWF0IGluIHBsYWNlIHdoZW4gcmV2ZXJzaW5nLiBVc2Ugc2VwZXJhdGUgYGZvcndhcmRgIGFu ZCBgYmFja3dhcmRgIGJsb2NrcyBmb3IgdGhhdCDwn5KhCgpUaGUgYmFiZWwgYWN0aW9uIGFsc28g dW5kZXJzdGFuZHMgcmVndWxhciBiYWJlbCBvcHRpb25zIHN1Y2ggYXMgYDpleHBvcnRzYCBhbmQg YDpyZXN1bHRzYC4gRXhwb3J0cyBub25lIHdpbGwgbWFrZSB0aGUgYmxvY2sgaW52aXNpYmxlLiBS ZXN1bHRzIGNvbnRyb2xzIHdoZXRoZXIgcmVzdWx0cyB3aWxsIGJlIHByaW50ZWQgaW50byB0aGUg YnVmZmVyIG9yIG5vdC4KCgojIyMgU3RlcCBDYWxsYmFja3MKClNlZSBgZHNsaWRlLXB1c2gtc3Rl cGAgZm9yIGluc2VydGluZyBhcmJpdHJhcnkgY2FsbGJhY2tzIHRoYXQgY2FuIGZ1bmN0aW9uIGFz IHN0ZXBzLiBVbmxlc3MgeW91ciBhY3Rpb24gcGVyZm9ybXMgc3RhdGUgdHJhY2tpbmcgdG8gZGVj aWRlIHdoZW4gdG8gY29uc3VtZSBgZHNsaWRlLWRlY2stZm9yd2FyZGAgYW5kIGBkc2xpZGUtZGVj ay1iYWNrd2FyZGAgaXRzZWxmLCBhIGNhbGxiYWNrIG1heSBiZSBlYXNpZXIuIFVzaW5nIGBkc2xp ZGUtcHVzaC1zdGVwYCBpcyBhbHNvIG9uZSB3YXkgdG8gb3B0aW9uYWxseSBhZGQgYSBzdGVwIGNh bGxiYWNrIGZyb20gYSBiYWJlbCBibG9jay4KCgojIyBIaWRpbmcgTWFya3VwCgpEc2xpZGUgdXNl cyBhIGxvdCBvZiBtYXJrdXAgdGhhdCB3b3VsZCBub3QgbG9vayBnb29kIGluIGEgcHJlc2VudGF0 aW9uLiBJdCBhbHNvIGZpbHRlcnMgaXQgYnkgZGVmYXVsdCB1c2luZyBgZHNsaWRlLWFjdGlvbi1o aWRlLW1hcmt1cGAuIFlvdSBjYW4gYWRqdXN0IHRoZSB0eXBlcyB1c2luZyBgZHNsaWRlLWhpZGUt bWFya3VwLXR5cGVzYAoKCiMjIyBIaWRpbmcgVG9kb3MgYW5kIFRhZ3MKCmBkc2xpZGUtYWN0aW9u LWhpZGUtbWFya3VwYCB3aWxsIGFsc28gaGlkZSB0b2RvcyBhbmQgdGFncy4gWW91IGNhbiBtb2Rp Zml5IHRoaXMgd2l0aCBgZHNsaWRlLWhpZGUtdG9kb2AgYW5kIGBkc2xpZGUtaGlkZS10YWdzYC4K CgojIyBGaWx0ZXJpbmcgSGVhZGluZ3MKCi0gICBBbnkgaGVhZGluZyB3aXRoIGBDT01NRU5UYCBk aXJlY3RseSBhZnRlciB0aGUgc3RhcnMgd2lsbCBiZSBza2lwcGVkCi0gICBBbnkgaGVhZGluZyB3 aXRoIHRoZSBgOm5vc2xpZGU6YCBvciBgOm5vZXhwb3J0OmAgdGFncyB3aWxsIGJlIHNraXBwZWQK ClVzZSB0aGlzIHdoZW4geW91ciBoZWFkaW5ncyBhcmUgd29yay1pbi1wcm9ncmVzcyBhbmQgeW91 IHJ1biBvdXQgb2YgdGltZSBvbiBGcmlkYXkgYmVmb3JlIHRoZSBmZWF0dXJlIGRlbW8gbWVldGlu Zy4gSGF2ZSBzb21lIGNvbnRlbnQgdGhhdCBpcyB1c2VkIG9ubHkgaW4gc29tZSBleHBvcnRzPyBV c2UgYDpub3NsaWRlOmAuCgoKIyMgSGVhZGVyIEtleXdvcmRzCgpJZiBgZHNsaWRlLWhlYWRlcmAg aXMgY29uZmlndXJlZCwgdGhlIGtleXdvcmRzIGZvciB0aGUgZG9jdW1lbnQgdGl0bGUsIGVtYWls LCBhbmQgYXV0aG9yIGV0YyB3aWxsIGJlIHVzZWQgdG8gZ2VuZXJhdGUgYW4gb2theSBoZWFkZXIu CgpgYGBvcmcKIyssdGl0bGU6CURvbWFpbiBTcGVjaWZpYyBzTElERXMKIythdXRob3I6CVBvc2l0 cm9uCiMrZW1haWw6CWNvbnRhY3RAcG9zaXRyb24uc29sdXRpb25zCmBgYAoKCiMjIEZpbGUgTG9j YWwgVmFyaWFibGVzCgpEb24ndCBmb3JnZXQgdGhhdCBpZiB5b3UgbmVlZCBhIGN1c3RvbWl6ZSB2 YXJpYWJsZSBvbmx5IHNldCBpbiBhIHBhcnRpY3VsYXIgcHJlc2VudGF0aW9uLCB5b3UgY2FuIHVz ZSBmaWxlIGxvY2FsIHZhcmlhYmxlcy4gTm90IGV2ZXJ5IHNldHRpbmcgbmVlZHMgYSBrZXl3b3Jk IG9yIGJhYmVsIGJsb2NrIGludGVncmF0aW9uLgoKYGBgb3JnCiMgTG9jYWwgVmFyaWFibGVzOgoj IGRzbGlkZS1oZWFkZXI6IG5pbAojIEVuZDoKYGBgCgoKIyBQcmVzZW50aW5nCgpIb3cgdG8gY29u dHJvbCBhbmQgdmlldyB5b3VyIHByZXNlbnRhdGlvbi4KCgojIyBUd28gQnV0dG9uIEludGVyZmFj ZQoKUHJlc2VudGF0aW9ucyB0ZW5kIHRvIGJlIG9yZ2FuaXplZCBpbnRvIGEgc2NyaXB0ZWQgbGlu ZWFyIHNlcXVlbmNlLiBXZSB3YW50IHRvIGNvbnRyb2wgdGhlIGVudGlyZSBwcmVzZW50YXRpb24g c2VxdWVuY2UgbW9zdGx5IHdpdGggdHdvIGJ1dHRvbnMsIGZvcndhcmRzIGFuZCBiYWNrd2FyZHMu CgpUaGUgY29udHJvbGxlcnMgZm9yIHByZXNlbnRpbmcgdXN1YWxseSBoYXZlIHZlcnkgZmV3IGJ1 dHRvbnMuIERzbGlkZSB3YXMgZGVzaWduZWQgd2l0aCB0aGlzIHVzYWdlIHBhdHRlcm4gaW4gbWlu ZCBhbmQgY2FuIG1vc3RseSBiZSBjb250cm9sbGVkIGJ5IHR3byBjb21tYW5kcy4KCi0gICBgZHNs aWRlLWRlY2stZm9yd2FyZGAKCi0gICBgZHNsaWRlLWRlY2stYmFja3dhcmRgCgpNYW55IGNvbnRy b2xsZXJzIGFsc28gaGF2ZSBhICJwbGF5IiBidXR0b24gb3Igc2ltaWxhci4gSXQncyByZWNvbW1l bmRlZCB0byBtYXAgdGhpcyB0byBgZHNsaWRlLWRlY2stc3RhcnRgLgoK8J+apyBJdCBpcyBpbnRl bmRlZCB0byBvdmVybG9hZCBgZHNsaWRlLWRlY2stc3RhcnRgIGZ1cnRoZXIgdG8gaW1wbGVtZW50 ICJzZWNvbmRhcnkiIGFjdGlvbnMgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIG5vbi1saW5lYXJseS4K ClRoZXJlIGlzIGxpa2VseSBubyBnb29kIHBsYWNlIHRvIGJpbmQgYGRzbGlkZS1kZWNrLXN0b3Bg LCBidXQgaXQncyBub3QgY3JpdGljYWwuIFlvdSBjYW4gZG8gZXZlcnl0aGluZyB3aXRoIGp1c3Qg dGhyZWUgYnV0dG9ucy4KCgojIyBDb250ZW50cyBJbnRlcmZhY2UKCk5hdmlnYXRlIHlvdXIgcHJl c2VudGF0aW9uIGZhc3RlciB3aGVuIGFuc3dlcmluZyBxdWVzdGlvbnMuIFRoZSBjb250ZW50cyBp bnRlcmZhY2UgaXMgYSB2aWV3IG9mIHRvcC1sZXZlbCBoZWFkaW5ncy4gSXQgb3ZlcmxvYWRzIHRo ZSBwcmVzZW50YXRpb24gY29udHJvbHMgdG8gbmF2aWdhdGUuCgpUbyBlbnRlciB0aGUgY29udGVu dHMsIGNhbGwgYGRzbGlkZS1kZWNrLXN0YXJ0YCB3aGVuIGEgcHJlc2VudGF0aW9uIGlzIGFscmVh ZHkgYWN0aXZlLgoKLSAgIGBkc2xpZGUtZGVjay1zdGFydGAgd2lsbCByZXN1bWUgdGhlIHByZXNl bnRhdGlvbiBhdCB0aGF0IGhlYWRpbmcKLSAgIGBkc2xpZGUtZGVjay1zdG9wYCB3aWxsIHNpbWls YXJseSBleGl0IHRoZSBjb250ZW50cyB2aWV3Ci0gICBgZHNsaWRlLWRlY2stZm9yd2FyZGAgYW5k IGBkc2xpZGUtZGVjay1iYWNrd2FyZGAgbW92ZSBiZXR3ZWVuIHRvcCBsZXZlbCBoZWFkaW5ncy4K CgojIyBOYXJyYXRpbmcKClRoZSBwcmVzZW50YXRpb24geW91IHNlZSBpcyBhIGNsb25lZCBbaW5k aXJlY3QgYnVmZmVyXShpbmZvOmVsaXNwI0luZGlyZWN0IEJ1ZmZlcnMpIG9mIHlvdXIgb3JnIG1v ZGUgYnVmZmVyLiBUaGUgRWxpc3Agc3RhdGUgYW5kIG92ZXJsYXlzIGFyZSBpbmRlcGVuZGVudC4g VGhlcmUgYXJlIHR3byBrZXkgYWR2YW50YWdlczoKCi0gICBBbnkgc3RhdGUgeW91IGNyZWF0ZSBp biB0aGUgcHJlc2VudGF0aW9uIHdpbGwgbm90IHBvbGx1dGUgdGhlIG9yZyBtb2RlIGJ1ZmZlciB5 b3UgYXJlIGVkaXRpbmcKLSAgIFdlIGNhbiBkaXNwbGF5IHRoZSBzb3VyY2UgZm9yIHRoZSBwcmVz ZW50YXRpb24gc2ltdWx0YW5lb3VzbHkKCmBkc2xpZGUtZGVjay1kZXZlbG9wYCB3aWxsIGF0dGVt cHQgdG8gZGlzcGxheSBib3RoIHRoZSBwcmVzZW50YXRpb24gYW5kIHNvdXJjZSBzaW11bHRhbmVv dXNseS4gV2hlbmV2ZXIgdGhlIHNvdXJjZSBpcyB2aXNpYmxlLCBoaWdobGlnaHRzIHdpbGwgYmUg YXBwbGllZCB0byBpbmRpY2F0ZSB3aGVyZSB0aGUgcHJlc2VudGF0aW9uIGlzIGF0LiAqKlRoaXMg aXMgZXNwZWNpYWxseSBoZWxwZnVsIGZvciBpbmNsdWRpbmcgcHJlc2VudGF0aW9uIG5vdGVzIGlu IGNvbW1lbnRzLCB3aGljaCBhcmUgaGlkZGVuIGJ5IGRlZmF1bHQqKi4KClRvIGxlYXZlIGEgY29t bWVudCBmb3IgeW91cnNlbGYgaW4gdGhlIHByZXNlbnRhdGlvbiBzb3VyY2UsIGp1c3QgYWRkIGEg Y29tbWVudCBibG9jayBvciBjb21tZW50IGxpbmU6CgpgYGBvcmcKIyBUaGlzIGlzIGFsc28gYSBj b21tZW50CgojK2JlZ2luX2NvbW1lbnQKVGhpcyBpcyBhIGNvbW1lbnQgdGhhdCBvbmx5IEkgY2Fu IHNlZSB3aGlsZSBwcmVzZW50aW5nLCBvbmx5IHdoZW4gSSBsb29rIGF0IG15IGJhc2UgYnVmZmVy IHdoaWxlIHNoYXJpbmcgYW5vdGhlciBmcmFtZS4KIytlbmRfY29tbWVudApgYGAKCllvdSBjYW4g YWxzbyBzd2l0Y2ggYSB3aW5kb3cgdG8gdGhlIGJhc2UgYnVmZmVyIG1hbnVhbGx5LiBUaGF0J3Mg YWxtb3N0IGFsbCBgZHNsaWRlLWRlY2stZGV2ZWxvcGAgZG9lcy4KCgojIyBDdXJzb3IgVmlzaWJp bGl0eQoKQnkgZGVmYXVsdCwgdGhlIGN1cnNvciBpcyBoaWRkZW4gaW4gdGhlIHByZXNlbnRhdGlv biBidWZmZXIgdXNpbmcgYGRzbGlkZS1jdXJzb3ItaGlkZWAuIFlvdSBjYW4gY2FsbCBgZHNsaWRl LWN1cnNvci1yZXN0b3JlYCBpZiB5b3UgbmVlZCBpdC4KCgojIENvbmZpZ3VyaW5nCgpCZSBzdXJl IHRvIGNoZWNrIGBNLXhgIGBjdXN0b21pemUtZ3JvdXBgIGBkc2xpZGVgIHRvIHNlZSBhbGwgZGVj bGFyZWQgY3VzdG9tIHZhcmlhYmxlcy4gQWxsIG9mIHRoZSB2YXJpYWJsZXMgYXJlIGNvbmZpZ3Vy ZWQgdG8gcmVjb21tZW5kZWQgZGVmYXVsdHMgZXhjZXB0IGhvb2tzLCB3aGljaCB3b3VsZCBkZXBl bmQgb24gb3RoZXIgcGFja2FnZXMgdXN1YWxseS4KCk1hbnkgc2V0dGluZ3MgY2FuIGJlIGNvbmZp Z3VyZWQgYXQ6CgotICAgZ2xvYmFsIGxldmVsIHRocm91Z2ggY3VzdG9taXplIHZhcmlhYmxlcwot ICAgZG9jdW1lbnQgbGV2ZWwgdGhyb3VnaCBrZXl3b3JkcwotICAgc2xpZGUgbGV2ZWwgdGhyb3Vn aCB0aGUgcHJvcGVydHkgZHJhd2VyCgoKIyMgQmluZGluZwoKWW91IGxpa2VseSB3YW50IHRvIHN0 YXJ0IHRoZSBtb2RlIHZpYSBgZHNsaWRlLWRlY2stc3RhcnRgLiBPbmNlIHRoZSBtb2RlIHN0YXJ0 cywgaXQgY3JlYXRlcyBhbiBpbmRpcmVjdCBidWZmZXIgdG8gZGlzcGxheSB0aGUgc2xpZGVzIGFu ZCB0aGVuIGNhbGxzIGBkc2xpZGUtZGVjay1zdGFydC1mdW5jdGlvbmAgb25jZSB0aGUgbW9kZSBp cyBhY3RpdmUgYW5kIGV2ZXJ5dGhpbmcgaXMgaW5pdGlhbGl6ZWQsIHNvIHlvdSBjYW4gY3VzdG9t aXplIHN0YXJ0dXAgYmVoYXZpb3IuCgpBbGwgY29tbWFuZHMgYmVnaW4gd2l0aCBgZHNsaWRlLWRl Y2tgIPCfkqEKCmBgYGVsaXNwCihrZXltYXAtc2V0IG9yZy1tb2RlLW1hcCAiPGY1PiIgIydkc2xp ZGUtZGVjay1zdGFydCkKYGBgCgpPbmNlIHRoZSBnbG9iYWwgbWlub3IgbW9kZSwgYGRzbGlkZS1t b2RlYCBpcyBhY3RpdmUsIGFkZGl0aW9uYWwgYmluZGluZ3MgaW4gYGRzbGlkZS1tb2RlLW1hcGAg YXJlIGFjdGl2ZSBpbiBldmVyeSBidWZmZXIgc28gdGhhdCB5b3UgY2FuIGludGVncmF0ZSBvdGhl ciBidWZmZXJzIGludG8geW91ciBwcmVzZW50YXRpb24uIChUcmFja2luZyB3aGljaCBidWZmZXJz IGFyZSBwYXJ0IG9mIGEgcHJlc2VudGF0aW9uIGlzIHN0aWxsIGEgdG9waWMgdW5kZXIgY29uc2lk ZXJhdGlvbiDwn5qnKQoKCiMjIyBTZWNvbmRhcnkgQ29tbWFuZHMg8J+apwoKQmVjYXVzZSB5b3Ug bWlnaHQgd2FudCB0byBwbGF5IGEgdmlkZW8gb3IgdGFrZSBhIGJyYW5jaCBpbiB0aGUgcHJlc2Vu dGF0aW9uIGFuZCB0aGVuIGV4aXQgdGhhdCBicmFuY2gsIHRoZSBwbGFuIGlzIHRvIG92ZXJsb2Fk IHRoZSBgZHNsaWRlLWRlY2stc3RhcnRgIGJpbmRpbmcgd2l0aGluIHByZXNlbnRhdGlvbnMgdG8g ZW50ZXIgLyBleGl0IHRoZXNlIGJyYW5jaGVzLgoKCiMjIEhvb2tzCgpCZXdhcmUgb2YgdXNpbmcg dGhlIG5vcm1hbCBgZHNsaWRlLW1vZGUtaG9va2Ag8J+YsSBiZWNhdXNlIGl0IHJ1bnMgKippbiB0 aGUgYmFzZSBidWZmZXIqKiDimqDvuI8uIElmIHlvdSByZW1hcCBmYWNlcyBvciBhZGQgYSBidW5j aCBvZiBzdHlsaW5nLCBpdCB3aWxsIGJlIGNvcGllZCB0byB0aGUgaW5kaXJlY3QgYnVmZmVyIGJ1 dCB0aGVuIGxpbmdlciBpbiB5b3VyIGJhc2UgYnVmZmVyLiBJbnN0ZWFkLCB1c2UgYGRzbGlkZS1z dGFydC1ob29rYC4g8J+SoQoKLSAgIGBkc2xpZGUtc3RhcnQtaG9va2AgaXMgcnVuIGluIHRoZSBp bmRpcmVjdCBidWZmZXIgYWZ0ZXIgaXQgaXMgc2V0IGl0LiBUaGlzIGlzIHdoYXQgeW91IHdhbnQu Ci0gICBgZHNsaWRlLXN0b3AtaG9va2AgaXMgcnVuIGluIHRoZSBiYXNlIGJ1ZmZlciBiZWNhdXNl IHRoZSBpbmRpcmVjdCBidWZmZXIgaXMgYWxyZWFkeSBkZWFkLgotICAgYGRzbGlkZS1jb250ZW50 cy1ob29rYCBpcyBydW4gYWZ0ZXIgc3dpdGNoaW5nIHRvIGNvbnRlbnRzLiBJdCBydW5zIGluIHRo ZSBzbGlkZSBidWZmZXIuCi0gICBgZHNsaWRlLW5hcnJvdy1ob29rYCBpcyBydW4gYWZ0ZXIgbmFy cm93aW5nLCB1c3VhbGx5IGFmdGVyIGEgc2xpZGUgaXMgc3RhcnRlZAotICAgYGRzbGlkZS1hZnRl ci1sYXN0LXNsaWRlLWhvb2tgIGlzIHJ1biB3aGVuIHRoZSB1c2VyIHRyaWVzIHRvIGdvIGZvcndh cmQgYnV0IHRoZXJlIGFyZSBubyBtb3JlIHNsaWRlcy4gWW91IGNhbiB1c2UgdGhpcyB0byBpbXBs ZW1lbnQgYSBmaW5hbCBmZWVkYmFjayBiZWZvcmUgcXVpdHRpbmcgb3IgYWRkIGBkc2xpZGUtZGVj ay1zdG9wYCB0byBleGl0IHdpdGhvdXQgZmVlZGJhY2suCiAgICAKICAgIEFub3RoZXIgb3B0aW9u IGlzIHRvIHVzZSBgZHNsaWRlLXB1c2gtc3RlcGAgdG8gcHVzaCBhIGNhbGxiYWNrIHRoYXQgd2ls bCBvbmx5IHJ1biB3aGVuIGNhbGxlZCBnb2luZyBmb3J3YXJkLgoKYGBgZWxpc3AKKGRlZnVuIG15 LXN0b3AtaWYtZm9yd2FyZCAoKQogIChkc2xpZGUtcHVzaC1zdGVwIChsYW1iZGEgKGRpcmVjdGlv bikKICAgICAgICAgICAgICAgICAgKHdoZW4gKGVxIGRpcmVjdGlvbiAnZm9yd2FyZCkKICAgICAg ICAgICAgICAgICAgICA7OyBCZSBzdXJlIHRvIHJldHVybiB0IG9yIHRoZSBjYWxsYmFjayB3b24n dCBjb3VudCBhcyBhCiAgICAgICAgICAgICAgICAgICAgOzsgc3RlcCBhbmQgdGhlIGhvb2sgd2ls bCBydW4gYWdhaW4uCiAgICAgICAgICAgICAgICAgICAgKHByb2cxIHQgKGRzbGlkZS1kZWNrLXN0 b3ApKSkpKSkKCihzZXRxIGRzbGlkZS1hZnRlci1sYXN0LXNsaWRlLWhvb2sgIydteS1zdG9wLWlm LWZvcndhcmQpCmBgYAoKCiMjIyBQZXItU2xpZGUgQWN0aW9ucwoK8J+SoSBJZiB5b3Ugd2FudCB0 byBkbyBzb21ldGhpbmcgb24gZWFjaCBzbGlkZSBvciBzcGVjaWZpYyBzbGlkZXMsIGJlZm9yZSB1 c2luZyBob29rcywgaW5zdGVhZCBjb25zaWRlciB1c2luZyBhY3Rpb25zLgoKU2VlIHRoZSBgZHNs aWRlLWFjdGlvbi1oaWRlLW1hcmt1cGAgd2hpY2ggaXMgYnkgZGVmYXVsdCBhZGRlZCB0byBgZHNs aWRlLWRlZmF1bHQtYWN0aW9uc2AgYW5kIGhpZGVzIG1hcmt1cCBvbiBldmVyeSBzbGlkZS4gVGhl IGxpZmVjeWNsZSBvZiBhY3Rpb25zIGFuZCB0aGVpciBtZXRob2RzIGZvciBvYnRhaW5pbmcgdGhl IGN1cnJlbnQgc2xpZGUncyBoZWFkaW5nIG1ha2UgdGhlbSB2ZXJ5IGdvb2QgZm9yIHBlci1zbGlk ZSBiZWhhdmlvci4KCgojIyBTdGVlemluZyBPcmcKCk5vdCB1bmlxdWUgdG8gZHNsaWRlLCBpZiB5 b3Ugd2FudCBtb3JlIHByb2Zlc3Npb25hbCBsb29raW5nIHJlc3VsdHMsIHlvdSB3aWxsIGxpa2Vs eSBuZWVkIHRvIG1ha2UgeW91ciBvcmcgYSBiaXQgcHJldHRpZXIuCgpUaGUgc2V0dXAgdXNlZCBm b3IgdGhlIFBvc2l0cm9uJ3MgWW91VHViZSBkZW1vcyBpcyBub3QgbXVjaCBtb3JlIGNvbXBsZXgg dGhhbiB0aGlzIHdlbGwtZG9jdW1lbnRlZCBzZXR1cCBieSBbU3lzdGVtIENyYWZ0ZXJzXShodHRw czovL3N5c3RlbWNyYWZ0ZXJzLm5ldC9lbWFjcy10aXBzL3ByZXNlbnRhdGlvbnMtd2l0aC1vcmct cHJlc2VudC8pLiBBbHNvIHNlZSBQcm90J3MgW2Z1cnRoZXJdKGh0dHBzOi8vcHJvdGVzaWxhb3Mu Y29tL2NvZGVsb2cvMjAyMC0wNy0xNy1lbWFjcy1taXhlZC1mb250cy1vcmcvKSBkb2N1bWVudGF0 aW9uIG9uIGN1c3RvbWl6aW5nIG9yZyBtb2RlIGZhY2VzIGFuZCBmb250cy4KCkluIHNob3J0LCB1 c2U6CgotICAgYG9yZy1tb2Rlcm5gCi0gICBgb3JnLWFwcGVhcmAKLSAgIGBuZXJkLWljb25zYCBm b3IgbW9yZSBjaGVlc3kg7piyKEVtYWNzIGxvZ28pCi0gICBBbmQgc2V0IHRoZSBmYWNlcyBmb3Ig b3JnIGhlYWRpbmdzIGFuZCBkb2N1bWVudCB0aXRsZS4KCkRvbid0IGZvcmdldCBidWlsdC1pbiBg ZW1vamktc2VhcmNoYCBhbmQgc2VhcmNoaW5nIGBpbnNlcnQtY2hhcmAuCgpQb3NpdHJvbiBpcyBj aGVhdGluZyBhbmQgYWxzbyBhcHBseSBjdXN0b20gbGluZS1zcGFjaW5nIGFuZCBsaW5lLWhlaWdo dC4gV2hpbGUgUHNpb25pYyBtYWludGFpbnMgYSBjdXN0b20gYG9yZy1tb2Rlcm5gLCB1c2luZyBj dXN0b20gc3BhY2luZyBldmVyeXdoZXJlIGZpZ2h0cyB3aXRoIGB2aXN1YWwtbGluZS1tb2RlYCBj dXJyZW50bHkuCgoKIyBFeHRlbmRpbmcKClRoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBwcm92 aWRlIGFuIG92ZXJ2aWV3IGZvciBleHRlbmRpbmcgZHNsaWRlIGNsYXNzZXMgb3IgaGFja2luZyBv biBkc2xpZGUgaXRzZWxmLgoKCiMjIENyZWF0aW5nIEFjdGlvbnMKCkFjdGlvbnMgYXJlIHRoZSBy aWdodCBjaG9pY2Ugd2hlbiB5b3UgbmVlZCBjdXN0b20gYmVoYXZpb3IgdGhhdCB5b3Ugd2FudCB0 byByZS11c2UuIEFjdGlvbnMgY2FuIGJlIGNvbmZpZ3VyZWQgd2l0aCBhcmd1bWVudHMuIFRoZXkg aW1wbGVtZW50IHRoZSBzdGF0ZWZ1bCBzZXF1ZW5jZSBsaWZlY3ljbGUuIEZvciBvbmUtb2ZmIHNv bHV0aW9ucywgeW91IHByb2JhYmx5IGp1c3Qgd2FudCBhIGJhYmVsIGJsb2NrLgoKRmlyc3QgY2hv b3NlIHlvdXIgYWN0aW9uIHR5cGU6CgotICAgT3ZlcnJpZGUgYGRzbGlkZS1zbGlkZS1hY3Rpb25g IHRvIGNyZWF0ZSBhIHNsaWRlIGFjdGlvbi4gWW91ciBhY3Rpb24gd2lsbCBjb250cm9sIHRoZSBk aXNwbGF5IG9mIHRoZSBzbGlkZSBhbmQgaXRzIGNoaWxkcmVuLCB1c3VhbGx5IGNvbnRyb2xsaW5n IHRoZSBuYXJyb3cgc3RhdGUgYW5kIGFkZGluZyBvciByZW1vdmluZyBvdmVybGF5cyBmcm9tIGNo aWxkcmVuLgoKLSAgIE92ZXJyaWRlIGBkc2xpZGUtYWN0aW9uYCB0byBjcmVhdGUgYW4gYWN0aW9u IHRoYXQgd29ya3MgbWFpbmx5IG9uIGEgaGVhZGluZydzIHNlY3Rpb24gY29udGVudC4KCk92ZXJy aWRlIG1ldGhvZHMgYXMgYXBwcm9wcmlhdGUsIGNvbmZpZ3VyZSBhIGhlYWRpbmcgdG8gdXNlIHlv dXIgYWN0aW9uLCBhbmQgeW91J3JlIGRvbmUuIFNvbWUgYWN0aW9ucywgc3VjaCBhcyBgZHNsaWRl LWFjdGlvbi1wcm9wZXJ0aXplYCBvbmx5IHdvcmsgd2hlbiBzb21lIG9mIHRoZSBzZWN0aW9uIGRh dGEgaXMgYW5ub3RhdGVkLgoKCiMjIEEgQ3VzdG9tIEFjdGlvbgoKVGhlIGBkc2xpZGUtc2VjdGlv bi1uZXh0YCBhbmQgYGRzbGlkZS1zZWN0aW9uLXByZXZpb3VzYCBtZXRob2QgZG9jdW1lbnRhdGlv biBhcmUgdmVyeSBoZWxwZnVsIGJlaGF2aW9yIGZvciBxdWlja2x5IHdyaXRpbmcgY3VzdG9tIGFj dGlvbnMuIFRoZXkgYWR2YW5jZSB0aGUgYWN0aW9uJ3MgYDptYXJrZXJgIGZvcndhcmRzIGFuZCBi YWNrd2FyZHMgdG8gdGhlIG5leHQgbWF0Y2hpbmcgZWxlbWVudCBhbmQgcmV0dXJuIHRoYXQgZWxl bWVudCBzbyB3ZSBjYW4gZG8gc29tZXRoaW5nIHdpdGggaXQuCgotICAgZGVjbGFyZSBhIGNsYXNz Ci0gICBvdmVycmlkZSBhIGZldyBtZXRob2RzCi0gICBub3cgeW91IHRvbyBjYW4gcGFpbnQgdGhl IHBhcmFncmFwaHMgcmVkCgpFeGFtcGxlIGNvZGU6CgpgYGBlbGlzcAooZGVmY2xhc3MgZHNsaWRl LWFjdGlvbi1yZWQtcGFyYWdyYXBocyAoZHNsaWRlLWFjdGlvbikKICAoKG92ZXJsYXlzIDppbml0 Zm9ybSBuaWwpKQogICJQYWludCB0aGUgcGFyYWdyYXBocyByZWQsIG9uZSBieSBvbmUuIikKCjs7 IERlZmF1bHQgbm8tb3AgYGRzbGlkZS1iZWdpbicgaXMgc3VmZmljaWVudAoKOzsgRGVmYXVsdCBp bXBsZW1lbnRhdGlvbiBvZiBgZHNsaWRlLWVuZCcsIHdoaWNoIGp1c3QgcGxheXMgZm9yd2FyZCB0 byB0aGUgZW5kLAo7OyBpcyB3ZWxsLWJlaGF2ZWQgd2l0aCB0aGlzIGNsYXNzLgoKOzsgUmVtb3Zl IGFueSByZW1haW5pbmcgb3ZlcmxheXMgd2hlbiBjYWxsaW5nIGZpbmFsLgooY2wtZGVmbWV0aG9k IGRzbGlkZS1maW5hbCA6YWZ0ZXIgKChvYmogZHNsaWRlLWFjdGlvbi1yZWQtcGFyYWdyYXBocykp CiAgKG1hcGMgIydkZWxldGUtb3ZlcmxheSAob3JlZiBvYmogb3ZlcmxheXMpKSkKCjs7IEZpbmQg dGhlIG5leHQgcGFyYWdyYXBoIGFuZCBhZGQgYW4gb3ZlcmxheSBpZiBpdCBleGlzdHMKKGNsLWRl Zm1ldGhvZCBkc2xpZGUtZm9yd2FyZCAoKG9iaiBkc2xpZGUtYWN0aW9uLXJlZC1wYXJhZ3JhcGhz KSkKICAod2hlbi1sZXQgKChwYXJhZ3JhcGggKGRzbGlkZS1zZWN0aW9uLW5leHQgb2JqICdwYXJh Z3JhcGgpKSkKICAgIChsZXQqICgoYmVnIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6YmVnaW4gcGFy YWdyYXBoKSkKICAgICAgICAgICAoZW5kIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6ZW5kIHBhcmFn cmFwaCkpCiAgICAgICAgICAgKG5ldy1vdmVybGF5IChtYWtlLW92ZXJsYXkgYmVnIGVuZCkpKQog ICAgICAob3ZlcmxheS1wdXQgbmV3LW92ZXJsYXkgJ2ZhY2UgJ2Vycm9yKQogICAgICAocHVzaCBu ZXctb3ZlcmxheSAob3JlZiBvYmogb3ZlcmxheXMpKQogICAgICA7OyBSZXR1cm4gbm9uLW5pbCB0 byBpbmRpY2F0ZSBwcm9ncmVzcyB3YXMgbWFkZS4gIFRoaXMgYWxzbyBpbmZvcm1zIHRoZQogICAg ICA7OyBoaWdobGlnaHQgd2hlbiBmb2xsb3dpbmcgdGhlIHNsaWRlcyBpbiB0aGUgYmFzZSBidWZm ZXIuCiAgICAgIGJlZykpKQoKKGNsLWRlZm1ldGhvZCBkc2xpZGUtYmFja3dhcmQgKChvYmogZHNs aWRlLWFjdGlvbi1yZWQtcGFyYWdyYXBocykpCiAgKHdoZW4tbGV0KiAoKG92ZXJsYXkgKHBvcCAo b3JlZiBvYmogb3ZlcmxheXMpKSkpCiAgICAoZGVsZXRlLW92ZXJsYXkgb3ZlcmxheSkKICAgIDs7 IElmIHRoZXJlIGlzIGEgcHJlY2VkaW5nIG92ZXJsYXksIG1vdmUgdG8gaXRzIGJlZ2lubmluZyBl bHNlIG1vdmUgdG8gdGhlCiAgICA7OyBiZWdpbm5pbmcgb2YgdGhlIGhlYWRpbmcuCiAgICAoaWYt bGV0ICgob3ZlcmxheSAoY2FyIChvcmVmIG9iaiBvdmVybGF5cykpKSkKICAgICAgICAoZHNsaWRl LW1hcmtlciBvYmogKG92ZXJsYXktc3RhcnQgb3ZlcmxheSkpCiAgICAgIChkc2xpZGUtbWFya2Vy IG9iaiAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmJlZ2luIChkc2xpZGUtaGVhZGluZyBvYmopKSkp KSkKYGBgCgoKIyMgRGVmYXVsdCBDbGFzc2VzCgpUaGUgZGVjayBhbmQgc2xpZGUgY2xhc3MgYXMg d2VsbCBhcyBhY3Rpb25zIGNhbiBiZSBzdWItY2xhc3NlZC4gVXNlIHRoZSBleGlzdGluZyBzdWIt Y2xhc3NlcyBvZiBhY3Rpb25zIGFzIGV4YW1wbGUgY29kZSBmb3Igd3JpdGluZyBvdGhlciBjbGFz c2VzLiBTZWUgdGhlIFtlaWVpbyNUb3BdKGluZm86ZWllaW8jVG9wKSBtYW51YWwgZm9yIGV4cGxh bmF0aW9uIG9mIE9PUCBpbiBFbGlzcC4KCi0gICBgQWN0aW9uYDogQ3JlYXRpbmcgbmV3IGFjdGlv biBzdWJjbGFzc2VzIGFyZSBhbiBlZmZpY2llbnQgd2F5IHRvIHBlcmZvcm0gc2ltaWxhciBvcGVy YXRpb25zIG9uIHR5cGljYWwga2luZHMgb2Ygb3JnIGRhdGEuCi0gICBgU2xpZGU6YCBTbGlkZXMg Y2FuIGJlIGNvbmZpZ3VyZWQgZXh0ZW5zaXZlbHkgYnkgY2hhbmdpbmcgdGhlaXIgYWN0aW9ucy4g SG93ZXZlciwgZm9yIG1vcmUgdmVydGljYWwgY29vcGVyYXRpb24gYmV0d2VlbiBzbGlkZXMgb3Ig Y29vcGVyYXRpb24gYW1vbmcgYWN0aW9ucywgZXh0ZW5kZWQgc2xpZGVzIGNvdWxkIGJlIHVzZWZ1 bC4KLSAgIGBEZWNrYDogSWYgdGhlIGNvcmUgbWV0aG9kcyBvZiB0aGUgZGVjayBhcmUgaW5zdWZm aWNpZW50LCBleHRlbnNpb24gaXMgYW5vdGhlciBvcHRpb24gYmVzaWRlcyBhZHZpY2UsIGhvb2tz LCBhbmQgbW9kaWZ5aW5nIHRoZSBzb3VyY2UuCiAgICAKICAgIElmIHlvdSBzdXNwZWN0IHlvdSBt aWdodCBuZWVkIHRvIHN1Yi1jbGFzcyB0aGUgYGRzbGlkZS1zbGlkZWAgb3IgYGRzbGlkZS1kZWNr YCwgcGxlYXNlIGZpbGUgYW4gaXNzdWUgYmVjYXVzZSB5b3VyIHVzZSBjYXNlIGlzIHByb2JhYmx5 IGludGVyZXN0aW5nLgoKCiMgSGFja2luZwoKVGhpcyBzZWN0aW9uIHByb3ZpZGVzIHJlYWxseSBo aWdoLWxldmVsIHN1bW1hcnkgb2YgdGhlIGNvZGUncyBtYWpvciBkZXNpZ24gY2hvaWNlcyB0byBw cmVwYXJlIGZvciBkaXZpbmcgaW50byBzb3VyY2UuCgoKIyMgT2JqZWN0cyAmIE93bmVyc2hpcAoK T3JnIG1vZGUgdXNlcyB0cmVlcy4gUHJlc2VudGF0aW9ucyBhcmUgbGluZWFyIHNlcXVlbmNlcy4g V2UgY2FuIGVpdGhlciB0cmF2ZXJzZSB0aGUgdHJlZSBvciBmbGF0dGVuIGl0LiBEc2xpZGUgY2hv c2UgdG8gdHJhdmVyc2UuIFRoaXMgZGVzaWduIGFsbG93ZWQgaW1wbGVtZW50aW5nIGZlYXR1cmVz IHN1Y2ggYXMgYGRzbGlkZS1zbGlkZS1hY3Rpb24tZWFjaC1jaGlsZGAuIFRoZSBjaGlsZHJlbiBv ZiBzdWNoIGEgcGFyZW50IHNsaWRlIGV4aXN0IHNpbXVsdGFuZW91c2x5LiBBIGNvbnNlcXVlbmNl IG9mIHRoZSBjaG9pY2Ugbm90IHRvIGZsYXR0ZW4gaXMgdGhhdCBwYXJlbnRzIG93biB0aGVpciBj aGlsZHJlbi4gVGhlIGxpZmVjeWNsZSBvZiBhIHBhcmVudCBhbHdheXMgZW5jb21wYXNzZXMgaXRz IGNoaWxkLgoKLSAgIFRoZSBkZWNrIG9iamVjdCBpcyB0aGUgcm9vdCBvZiBhbGwgZnVuY3Rpb25h bGl0eSBhbmQgbWFueSBjb21tYW5kcyBkZWxlZ2F0ZSB0aHJvdWdoIGl0Ci0gICBUaGUgZGVjayBv d25zIHNsaWRlcywgd2hpY2ggb3duIGFjdGlvbnMKLSAgIFNsaWRlIGFjdGlvbnMgbWF5IGZ1cnRo ZXIgb3duIGNoaWxkIHNsaWRlcwoKCiMjIFN0YXRlZnVsIFNlcXVlbmNlCgpQcmVzZW50YXRpb25z IGFyZSBzdXBwb3NlZCB0byBiZSBsaW5lYXIgc2VxdWVuY2VzLiBIb3dldmVyLCB0aGV5IG1heSBy ZXF1aXJlIHNldHVwIGFuZCB0ZWFyZG93bi4gVGhpcyBpcyB0aGUgInN0YXRlZnVsIiBwYXJ0IG9m IGEgYGRzbGlkZS1zdGF0ZWZ1bC1zZXF1ZW5jZWAuCgpJZiBhbGwgc2VxdWVuY2VzIHdlcmUgaWRl bXBvdGVudCwgd2Ugd291bGQganVzdCBpbXBsZW1lbnQgYGRzbGlkZS1mb3J3YXJkYCBhbmQgYGRz bGlkZS1iYWNrd2FyZGAuIFRoZSByZWFzb24gdGhpcyB3YXMgbm90IGRvbmUgaXMgYmVjYXVzZSB0 aG9zZSBtZXRob2RzIHdvdWxkIGhhdmUgdG8gZGlmZmVyZW50aWF0ZSBjYWxscyB0byBwZXJmb3Jt IHNldHVwIHZlcnN1cyBhdHRlbXB0aW5nIHRvIG1ha2UgcHJvZ3Jlc3MgYW5kIGNvdW50aW5nIGFz IHN0ZXBzLiBJdCB3YXMgZXh0cmVtZWx5IHRyaWNreSwgYW5kIHNvIHNldHVwIGFuZCB0ZWFyZG93 biB3ZXJlIHNwbGl0IGludG8gdGhyZWUgbWV0aG9kcy4KClRoaXMgc2V0dXAgYW5kIHRlYXJkb3du IGNhbiBoYXBwZW4gaW4gYm90aCBkaXJlY3Rpb25zLCBzbyB0aGVyZSBpcyBgZHNsaWRlLWJlZ2lu YCBhbmQgYGRzbGlkZS1lbmRgLiBUaGUgbGF0dGVyIGNvbW1vbmx5IGNhbGxzIHRoZSBmb3JtZXIg YW5kIHRoZW4gYWR2YW5jZXMgdGhlIHN0YXRlIHRvIHRoZSBlbmQsIGJ1dCBzb21lIG1vcmUgb3B0 aW1hbCBzZXR1cHMgYXJlIHBvc3NpYmxlIGFuZCBhbHJlYWR5IGluIHVzZS4KClNsaWRlcyBtYXkg YmUgZGlzcG9zZWQgb2YgYWZ0ZXIgdGhleSBubyBsb25nZXIgbWFrZSBwcm9ncmVzcy4gVG8gZW5z dXJlIHRoaXMgZmluYWxpemF0aW9uIGhhcHBlbnMsIHRoZSBwYXJlbnQgY2FsbHMgYGRzbGlkZS1m aW5hbGAuCgoKIyMjIEFjdGlvbnMKCkFjdGlvbnMgbGl2ZSBvbiB0aGUgc2xpZGUuIFRoZXkgaW1w bGVtZW50IHN0YXRlZnVsIHNlcXVlbmNlLiBUaGVyZSBhcmUgdHdvIGtpbmRzIG9mIGFjdGlvbnM6 CgotICAgQWN0aW9uOiBBIHJlZ3VsYXIgYWN0aW9uIHVzdWFsbHkgd29ya3Mgb24gdGhlIHNlY3Rp b24gY29udGVudHMuCi0gICBTbGlkZSBBY3Rpb246IEEgc2xpZGUgYWN0aW9uIHVzdWFsbHkgd2ls bCBuYXJyb3cgdG8gaXRzIG93biBjb250ZW50cy4gSXQgY2FuIGNyZWF0ZSBuZXcgc2xpZGVzIGJ5 IGNhbGxpbmcgYGRzbGlkZS0tbWFrZS1zbGlkZWAsIHdoZXJlIGl0IGNhbiBvdmVycmlkZSB0aGVt IHRvIHByZXZlbnQgdGhlbSBmcm9tIG5hcnJvd2luZy4gVGhlIHNsaWRlIGFjdGlvbiBpcyBhbHdh eXMgY2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIgYWN0aW9uLCB3aGV0aGVyIGdvaW5nIGluIGZvcndh cmQgb3IgcmV2ZXJzZS4KCgojIyBGbG93IENvbnRyb2wKCkRlY2tzLCBzbGlkZXMsIGFuZCBhY3Rp b25zIGltcGxlbWVudCB0aGUgYGRzbGlkZS1zdGF0ZWZ1bC1zZXF1ZW5jZWAgaW50ZXJmYWNlLiBP biBlYWNoIGNhbGwgdG8gYGRzbGlkZS1kZWNrLWZvcndhcmRgIG9yIGBkc2xpZGUtZGVjay1iYWNr d2FyZGAsIHRoZSBkZWNrIHJlY2VpdmVzIHRoZSBmaXJzdCBjYWxsIHRvIGl0cyBgZHNsaWRlLWZv cndhcmRgIG1ldGhvZC4KCkZpcnN0LCB0aGUgZGVjayB3aWxsIGNoZWNrIGZvciBhbnkgc3RlcCBj YWxsYmFja3MuIFRoZXNlIGFyZSBhZGRlZCB3aXRoIGBkc2xpZGUtcHVzaC1zdGVwYC4gVGhlIGRl Y2sgZGVsZWdhdGVzIHRoaXMgdG8gdGhlIHNsaWRlLiBUaGUgc2xpZGUgbWF5IGRlbGVnYXRlIGRv d24gdG8gYW4gYWN0aW9uLCB3aGljaCBtYXkgZGVsZWdhdGUgdG8gYSBzbGlkZS4KCkluIHRoZSBt b3N0IGJhc2ljIGNhc2UsIGVhY2ggZGVsZWdhdGUgd2lsbCB0cnkgYWxsIG9mIGl0cyBhY3Rpb25z IHVudGlsIG9uZSByZXR1cm5zIG5vbi1uaWwuIFRoZSBkZWxlZ2F0ZSByZXR1cm5zIHRoZSBmaXJz dCBub24tbmlsbCByZXN1bHQsIGluZGljYXRpbmcgdGhhdCBwcm9ncmVzcyB3YXMgbWFkZS4gSWYg dGhlIGRlbGVnYXRlIHJldHVybnMgbmlsLCBpdCBtZWFucyBpdCB3YXMgdW5hYmxlIHRvIG1ha2Ug cHJvZ3Jlc3MsIGFuZCBzbyB0aGUgY2FsbGVyIHdpbGwgaW5zdGVhZCB0cnkgaXRzIG93biBuZXh0 IGFjdGlvbi4KCldoZW5ldmVyIGFsbCBzbGlkZXMgYW5kIGFjdGlvbnMgcmV0dXJuIG5pbCBhbGwg dGhlIHdheSBiYWNrIHVwIHRvIHRoZSBkZWNrLCBpdCBsb29rcyBmb3IgYSBuZXh0IG9yIHByZXZp b3VzIHRvcC1sZXZlbCBoZWFkaW5nIHRvIG1ha2UgaW50byBhIHNsaWRlLiBJZiBub25lIGlzIGZv dW5kLCBpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgdXNlciBpcyBhdCB0aGUgYmVnaW5uaW5nIG9yIGVu ZCBvZiB0aGUgcHJlc2VudGF0aW9uLgoKVGhlIGRlY2sgb2JqZWN0IGFuZCBzbGlkZSBhY3Rpb25z IGZyZXF1ZW50bHkgY3JlYXRlIG5ldyBjaGlsZHJlbiBmcm9tIG9yZyBoZWFkaW5ncy4gVGhleSBj YWxsIHRoZWlyIGBkc2xpZGUtYmVnaW5gIG9yIGBkc2xpZGUtZW5kYCBtZXRob2RzIHJpZ2h0IGFm dGVyIHRoYXQuIElmIHRoZXNlIG1ldGhvZHMgZG9uJ3QgaW5kaWNhdGUgcHJvZ3Jlc3MsIHRoZSBg ZHNsaWRlLWZvcndhcmRgIG9yIGBkc2xpZGUtYmFja2AgbWV0aG9kIHdpbGwgYmUgY2FsbGVkLgoK CiMjIEluc3RhbnRpYXRpbmcgU2xpZGVzCgpTbGlkZXMgYXJlIGNyZWF0ZWQgYnkgY2FsbGluZyBg ZHNsaWRlLS1tYWtlLXNsaWRlYCB3aXRoIGFuIG9yZyBlbGVtZW50IGZvciBhIGhlYWRpbmcuIFRo aXMgZnVuY3Rpb24gaW50ZXJwcmV0cyB0aGUgY2xhc3MgbmFtZSBhbmQgYXJndW1lbnRzIGZvciB0 aGUgbmV3IHNsaWRlIGFuZCBpbnN0YW50aWF0ZXMgdGhlIG9iamVjdC4KClRoZSBkZWZhdWx0IGNs YXNzZXMgYW5kIGFjdGlvbnMgY2FuIGJlIGNvbmZpZ3VyZWQgYXQgdGhlIGRvY3VtZW50IG9yIGN1 c3RvbWl6ZSBsZXZlbC4gU2V0IHRoZSBgRFNMSURFX0RFQ0tfQ0xBU1NgIGFuZCBgRFNMSURFX1NM SURFX0NMQVNTYCBhcyB3ZWxsIGFzIG90aGVyIHByb3BlcnRpZXMgdGhhdCB3b3JrIGF0IHRoZSBo ZWFkaW5nIGxldmVsLiBUaGUgb3JkZXIgb2YgcHJlY2VkZW5jZSAoKipOb3QgZnVsbHkgaW1wbGVt ZW50ZWQqKiDwn5qnKToKCi0gICBQcm9wZXJ0eSBkZWZpbml0aW9uIG9mIHRoZSBjdXJyZW50IGhl YWRpbmcKLSAgIFByb3BlcnR5IGRlZmluaXRpb24gaW4gdGhlIGRvY3VtZW50Ci0gICBDdXN0b21p emUgdmFyaWFibGUKCmBkc2xpZGUtLW1ha2Utc2xpZGVgIHdpbGwgbG9vayBpbiBvcmRlciBmb3Ig dGhlIGhpZ2hlc3QgcHJlY2VkZW5jZSBzZXR0aW5nIGFuZCB0aGVuIGluc3RhbnRpYXRlIHRoZSBj bGFzcyB3aXRoIHRoYXQgdmFsdWUgaW4gdGhlIHNsb3QuCgoKIyBQYWNrYWdlIFBhaXJpbmdzCgpU aGVzZSBhcmUgc29tZSBwYWNrYWdlcyB0aGF0IGFyZSBsaWtlbHkgdG8gZmluZCB1c2UgYWxvbmdz aWRlIGRzbGlkZS4KCgojIyBPcmcgTW9kZXJuCgpCdWxsZXRzIGFuZCBtYW55IHByZXR0aWZpY2F0 aW9ucyBvZiBjb21tb24gb3JnIG1hcmt1cHMuIFRoZSBtYXJrdXAgdGhhdCB5b3UgZG9uJ3QgaGlk ZSBsb29rcyBiZXR0ZXIgd2l0aCBvcmcgbW9kZXJuLgoKCiMjIE9yZyBBcHBlYXIKCk5ldmVyIHdv cnJ5IGFib3V0IHR1cm5pbmcgb24gcHJldHR5IGxpbmtzIGZvciBhIHByZXNlbnRhdGlvbi4gRWRp dCB0aGVtIGJ5IGp1c3QgbW92aW5nIHRoZSBwb2ludCBpbnNpZGUuCgoKIyMgTWFzdGVyIG9mIENl cmVtb25pZXMKClRoZSBbbWFzdGVyLW9mLWNlcmVtb25pZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9w b3NpdHJvbi1zb2x1dGlvbnMvbWFzdGVyLW9mLWNlcmVtb25pZXMpIHBhY2thZ2UgaXMgcHJpbWFy aWx5IHVzZWQgZm9yIGl0cyBgbW9jLWZvY3VzYCBjb21tYW5kIHdoaWNoIGlzb2xhdGVzIHNtYWxs IHNuaXBwZXRzIG9mIGJ1ZmZlciB0ZXh0IHRvIG1ha2UgZnVsbHNjcmVlbiBhbmQgcHJldHR5LiBZ b3UgY2FuIHNhdmUgcmVwbGF5IHRoZXNlIHNuaXBwZXRzIHdpdGhvdXQgaGF2aW5nIGFjY2VzcyB0 byBhIHNvdXJjZSBidWZmZXIuCgpDaGVjayB0aGUgZnVsbCBjb21tYW5kcyBieSBwcmVzc2luZyBg aGAgZHVyaW5nIGZvY3VzLiBZb3UgY2FuIGhpZ2hsaWdodCBhIHJlZ2lvbiwgc2F2ZSBhbiBleHBy ZXNzaW9uIHRvIHBsYXliYWNrIGEgY29kZSBzbmlwcGV0IHdpdGhvdXQgdGhlIGJ1ZmZlciBvcGVu IGV0Yy4KCgojIyBPcGVuIEJyb2FkY2FzdGVyIFNvZnR3YXJlCgpTYWNoYSBDaHVhIGhhcyB3cml0 dGVuIGFuIE9CUyBwbHVnaW4gaW50ZWdyYXRpb24gaGVscGZ1bCBmb3IgdmlkZW8gaW50ZWdyYXRp b24gW29icy13ZWJzb2NrZXQtZWxdKGh0dHBzOi8vZ2l0aHViLmNvbS9zYWNoYWMvb2JzLXdlYnNv Y2tldC1lbCkuCgoKIyMgbW9vbS5lbAoKVGhlIFttb29tXShodHRwczovL2dpdGh1Yi5jb20vdGFr YXhwL21vb20jb3JnLW1vZGUtb3JnLXRyZWUtc2xpZGUpIHBhY2thZ2UgY29udGFpbnMgc29tZSBj b21tYW5kcyBmb3IgcmVzaXppbmcgdGV4dCBhbmQgcmVwb3NpdGlvbmluZyBmcmFtZXMuCgoKIyBD b250cmlidXRpbmcKCi0gICBTaW5jZSB5b3UgbGlrZWx5IGp1c3QgbmVlZCBzb21ldGhpbmcgdG8g bWFnaWNhbGx5IGhhcHBlbiwgdGhlIHJlY29tbWVuZGVkIG9wdGlvbiBpcyB0byBwbGFjZSBhIGhh bWJ1cmdlciBpbiB0aGUgW2hhbWJ1cmdlciBqYXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29y cy9wb3NpdHJvbi1zb2x1dGlvbnMpIGFuZCBmaWxlIGFuIGlzc3VlLgotICAgSWYgeW91IGRvIGhh dmUgdGltZSwgZXhjZWxsZW50LiBIYXBweSB0byBzdXBwb3J0IHlvdXIgUFIncyBhbmQgcHJvdmlk ZSBjb250ZXh0IGFib3V0IHRoZSBhcmNoaXRlY3R1cmUgYW5kIGJlaGF2aW9yLgoKCiMjIFdvcmsg SW4gUHJvZ3Jlc3Mg8J+apwoKT3BlbiBpc3N1ZXMgYW5kIGdpdmUgZmVlZGJhY2sgb24gZmVhdHVy ZSByZXF1ZXN0cy4gQ29udHJpYnV0aW9ucyB3ZWxjb21lLgoKCiMjIyBTbGlkZSBBY3Rpb24gUHJl Y2VkZW5jZQoKV2hlbiBhIHNsaWRlIGlzIGNyZWF0ZWQgaW4gYGRzbGlkZS1tYWtlLXNsaWRlYCwg aXQgY2FuIG9idGFpbiB0aGVtIGZyb20gc2V2ZXJhbCBwbGFjZXM6CgotICAgcGFzc2VkIGluIGFy Z3VtZW50cywgYXMgc2xpZGUgYWN0aW9ucyBkbyB0byBwcmV2ZW50IGNoaWxkcmVuIGZyb20gdHJ5 aW5nIHRvIGRpc3BsYXkgdGhlbXNlbHZlcwotICAgcHJvcGVydGllcywgaG93IHNsaWRlcyBhcmUg dXN1YWxseSBjb25maWd1cmVkCi0gICBjdXN0b21pemUgdmFyaWFibGVzIHRoYXQgc2V0IHRoZSBk ZWZhdWx0IGFjdGlvbnMuCgpUaGUgb3JkZXIgb2YgcHJlY2VkZW5jZSBhbmQgY2FwYWJpbGl0eSB0 byBvdmVycmlkZSBvcHRpb25zIGlzIHN0aWxsIHByZXR0eSBpbW1hdHVyZS4KCgojIyMgU2Vjb25k YXJ5IENvbW1hbmRzCgpTZWUgdGhlIHNlY3Rpb24gYWJvdXQgYmluZGluZ3MgZm9yIGNvbnRleHQu IFZpZGVvIHBsYXkgb3Igb3RoZXIgc2l0dWF0aW9ucyB3aGVyZSB0aGUgcHJlc2VudGF0aW9uIG1p Z2h0IGJyYW5jaCBzaG91bGQgYmUgc3VwcG9ydGVkIGJ5IG92ZXJsb2FkaW5nIHRoZSBiZWhhdmlv ciBvZiBgZHNsaWRlLWRlY2stc3RhcnRgLiBJIHRoaW5rIHRoaXMgY29tbWFuZCB3aWxsIHR1cm4g aW50byBgZHNsaWRlLWRlY2stc2Vjb25kYXJ5YCBpbiB0aGUgYGRzbGlkZS1tb2RlLW1hcGAuCgoK IyMjIGBkc2xpZGUtZ290b2AsIHN0YXJ0aW5nIGZyb20gcG9pbnQKClNpbmNlIG5vdCBtYW55IGFj dGlvbnMgY3VycmVudGx5IGhhdmUgaW1wbGVtZW50ZWQgdGhpcyB2ZXJ5IGFjY3VyYXRlbHksIHBs YXlpbmcgZnJvbSBwb2ludCBpcyBsaWtlbHkgbm90IHRoYXQgYWNjdXJhdGUuIFByb2dyZXNzIHVw ZGF0aW5nIGluIHRoZSBiYXNlIGJ1ZmZlciBpcyBhbHNvIGN1cnJlbnRseSBvbmx5IGF0IHRoZSBz bGlkZSBsZXZlbCBvZiBncmFudWxhcml0eS4KCgojIyMgQWZmaWxpYXRlZCBCdWZmZXJzCgpUaGVy ZSBpcyBubyB0cmFja2luZyB3aGV0aGVyIGEgYnVmZmVyIGlzIHBhcnQgb2YgdGhlIHByZXNlbnRh dGlvbiBvciBub3QuIEhvdyB3b3VsZCBhIGJ1ZmZlciBiZWNvbWUgb25lPyBTaG91bGQgaXQgYmUg aW1wbGljaXQ/IFdpdGhvdXQgYW55IHNvcnQgb2YgdHJhY2tpbmcsIHRoZSBjb25zZXF1ZW5jZSBp cyB0aGF0IGhhdmluZyBhIHByZXNlbnRhdGlvbiBvcGVuIGxlYXZlcyB0aGUgbWlub3IgbW9kZSBi aW5kaW5ncyBob3QuIFRoZXNlIGNvbW1hbmRzIGRvIHdlaXJkIHRoaW5ncyB3aGVuIHJ1biBmcm9t IHRoZXNlIHNpdHVhdGlvbnMsIGVzcGVjaWFsbHkgaWYgcnVubmluZyBiYWJlbCBzY3JpcHRzLCBz byBzb21lIGtpbmQgb2YgZmlyc3QtY2xhc3MgYnVmZmVyIGFmZmlsaWF0aW9uIHNlZW1zIG5lY2Vz c2FyeS4KCgojIyMgTm9uLUdyYXBoaWMgRGlzcGxheQoKRm9yIHRlcm1pbmFscywgdGhlIGxpbmUt aGVpZ2h0IGJhc2VkIHNsaWRlLWluIGVmZmVjdCBpcyBub3Qgc3VwcG9ydGVkLgoKCiMjIyBJbXBy b3BlciBMZXZlbHMKCkNoaWxkcmVuIHdpdGggbm8gcGFyZW50cyBvciBtaXNzaW5nIGEgbGV2ZWwg YXJlIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIGFuZCBsaWtlbHkgY2F1c2UgYmFkIGJlaGF2aW9y LgoKCiMjIyBDb3VudGluZyBTbGlkZXMKCkVzcGVjaWFsbHkgaWYgc2xpZGVzIGxhdW5jaCBzdWIt c2VxdWVuY2VzLCBhbmQgdGhleSBkbyBpdCBmcm9tIExpc3AsIHRoaXMgaXMgaGFyZC4gQnVmZmVy IHNsaWRlcyBhbmQgYWxzbyBzbGlkZSBhY3Rpb25zIG1ha2UgaXQgc29tZXdoYXQgYW1iaWd1b3Vz LiBDb3VudGluZyB0cmVlcyBvciB0cmFja2luZyB0aGUgcG9pbnQgbWlnaHQgYmUgZWFzaWVyLiBB IGBjaGlsZHJlbmAgbWV0aG9kIGZvciBzZXF1ZW5jZXMgd29ya3MgYXMgbG9uZyBhcyBzZXF1ZW5j ZXMgYWN0dWFsbHkgaW1wbGVtZW50IGl0LgoKCiMjIyBOb24tT3JnIFNlcXVlbmNlcwoKVGhlcmUn cyBubyBjb25jcmV0ZSByZWFzb24gd2h5IHByZXNlbnRhdGlvbnMgbmVlZCB0byBzdGFydCB3aXRo IE9yZyBtb2RlIGJ1ZmZlcnMuIFRoZSBkZWNrIG9iamVjdCBjb3VsZCBoYXZlIGl0cyBvcmctc3Bl Y2lmaWMgZnVuY3Rpb25hbGl0eSBwdXNoZWQgZG93biB0byBhbiBvcmctbW9kZSBjbGFzcy4gVGhl IG9ubHkgcmVxdWlyZW1lbnQgaXMgdG8gYmUgYWJsZSB0byBoeWRyYXRlIHNvbWUgc3RhdGVmdWwg c2VxdWVuY2VzLCB3aGljaCBtYXkgaHlkcmF0ZSBhbmQgY2FsbCBpbnRvIHN1Yi1zZXF1ZW5jZXMs IG1lYW5pbmcgYW55dGhpbmcgaXMgcHJldHR5IHRyaXZpYWxseSBwb3NzaWJsZS4KCgojIFRoYW5r cwoKVGhpcyBwYWNrYWdlIGlzIGEgZGlyZWN0IGRlc2NlbmRhbnQgb2YgVGFrYWFraSBJU0hJS0FX QSdzIFtvcmctdHJlZS1zbGlkZV0oaHR0cHM6Ly9naXRodWIuY29tL3Rha2F4cC9vcmctdHJlZS1z bGlkZSkgcGFja2FnZS4gTWFueSBvZiB0aGUgaWRlYXMgYW5kIHNvbWUgb2YgdGhlIGltcGxlbWVu dGF0aW9ucyB3ZXJlIGVpdGhlciBpbmhlcml0ZWQgb3IgaW5zcGlyZWQgYnkgaWRlYXMgZnJvbSB0 aGF0IHBhY2thZ2UuIFRoaXMgcGFja2FnZSB3b3VsZCBub3QgZXhpc3Qgd2l0aG91dCB0aGUgaW5z cGlyYXRpb24uIFRoYW5rcyB0byBldmVyeW9uZSB3aG8gY29udHJpYnV0ZWQgb24gb3JnLXRyZWUt c2xpZGUuCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkc2xpZGUt MC41LjQuMC4yMDI0MTEyMy42Mjc0OS9kc2xpZGUuZWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY2NAAwMDAxNzUwADAwMDE3 NTAAMDAwMDAzNzU3NzQAMTQ3MjAzMTMzMDYAMDE0NDUxACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAcGhpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAABwaGkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs7OyBkc2xp ZGUuZWwgLS0tIERvbWFpbiBTcGVjaWZpYyBzTElERXMuIEEgcHJlc2VudGF0aW9uIGZyYW1ld29y ayAtKi0gbGV4aWNhbC1iaW5kaW5nOiB0OyAtKi0KOzsKOzsgQ29weXJpZ2h0IChDKSAyMDExLTIw MjMgVGFrYWFraSBJU0hJS0FXQQo7OyBDb3B5cmlnaHQgKEMpIDIwMjQgUG9zaXRyb24KOzsKOzsg QXV0aG9yOiBQb3NpdHJvbiA8Y29udGFjdEBwb3NpdHJvbi5zb2x1dGlvbnM+Cjs7IFZlcnNpb246 IDAuNS40Cjs7IFBhY2thZ2UtUmVxdWlyZXM6ICgoZW1hY3MgIjI5LjIiKSkKOzsgTWFpbnRhaW5l cjogUG9zaXRyb24gPGNvbnRhY3RAcG9zaXRyb24uc29sdXRpb25zPgo7OyBVUkw6IGh0dHBzOi8v Z2l0aHViLmNvbS9wb3NpdHJvbi1zb2x1dGlvbnMvZHNsaWRlCjs7IEtleXdvcmRzOiBjb252ZW5p ZW5jZSwgb3JnLW1vZGUsIHByZXNlbnRhdGlvbiwgbmFycm93aW5nCjs7Cjs7IENvbW1pdHRlcnM6 IFRha2Fha2kgSVNISUtBV0EgPHRha2F4cCBhdCBpZWVlIGRvdCBvcmc+Cjs7ICAgICAgICAgICAg IFl1dWtpIEFSSVNBV0EgKEB1ay1hcikKOzsgICAgICAgICAgICAgRXJpYyBTIEZyYWdhCjs7ICAg ICAgICAgICAgIEVpa2UgS2V0dG5lcgo7OyAgICAgICAgICAgICBTdGVmYW5vIEJFTk5BVEkKOzsg ICAgICAgICAgICAgTWF0dXMgR29samVyCjs7ICAgICAgICAgICAgIEJvcnVjaCBCYXVtCjs7Cjs7 IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5Cjs7IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cjs7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCjs7IChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCjs7Cjs7IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo7OyBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo7OyBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCjs7IEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCjs7Cjs7IFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl Cjs7IGFsb25nIHdpdGggR05VIEVtYWNzOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwg d3JpdGUgdG8gdGhlCjs7IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKOzsgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCgo7 OzsgQ29tbWVudGFyeToKCjs7IERTTCBJREUgYnVpbGRzIHByZXNlbnRhdGlvbnMgb24gdG9wIG9m IG9yZyBtb2RlIGRvY3VtZW50cy4gIEl0IGludGVncmF0ZXMKOzsgd2l0aCBhcmJpdHJhcnkgYnVm ZmVycyBhbmQgb3JnIGJhYmVsLCBtYWtpbmcgYW55dGhpbmcgRW1hY3MgY2FuIGRvIGVhc3kgdG8K OzsgaW5jb3Jwb3JhdGUgaW50byBhIHByZXNlbnRhdGlvbi4gIEhlYWRlcnMgYXJlIGNvbmZpZ3Vy ZWQgd2l0aCBleHRlbnNpYmxlCjs7IGFjdGlvbnMuICBDdXN0b20gc3RlcHMgY2FuIGJlIHNjcmlw dGVkIHdpdGggYmFiZWwgYmxvY2tzIG9yIG1hZGUgaW50bwo7OyByZXVzYWJsZSBjdXN0b20gYWN0 aW9ucy4gIERTTCBJREUgYWNoaWV2ZXMgYSBnb29kIHJlc3VsdCB3aXRoIG5vIHByZXBhcmF0aW9u Cjs7IGJ1dCBjYW4gYWNoaWV2ZSBhbnl0aGluZyBFbWFjcyBjYW4gZGlzcGxheSBpZiB5b3UgbmVl ZCBpdCB0by4KOzsKOzsgU2VlIHRoZSBSRUFETUUgZm9yIG1vcmUgZGV0YWlsZWQgaW5zdHJ1Y3Rp b25zLgo7Owo7OyBUaGVyZSBhcmUgZXhhbXBsZXMgb2YgdXNpbmcgdGhlIGZlYXR1cmVzIHdpdGhp biB0aGUgdGVzdCBkaXJlY3RvcnkuCjs7Cjs7IFJlcXVpcmVtZW50Ogo7OyAgICBvcmctbW9kZSA5 LjYuMjkgb3IgaGlnaGVyIHZlcnNpb24KOzsgICAgVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBv cmctbW9kZSBpcyByZWNvbW1lbmRlZC4KOzsgICAgICAgICAgICAgICAgICAgICAgKHNlZSBodHRw czovL29yZ21vZGUub3JnLykKOzsKOzsgVXNhZ2U6Cjs7ICAgIDEuIE9wZW4gYW4gb3JnLW1vZGUg ZmlsZQo7OyAgICAyLiBSdW4gYGRzbGlkZS1kZWNrLXN0YXJ0Jwo7OyAgICAzLiBVc2UgYXJyb3cg a2V5cy4gIFNlZSBgZHNsaWRlLW1vZGUtbWFwJwo7Owo7OyBOb3RlOgo7OyAgICAtIEN1c3RvbWl6 ZSB2YXJpYWJsZXMsIE0teCBjdXN0b21pemUtZ3JvdXAgUkVUIGRzbGlkZSBSRVQKOzsKOzsgVGhl IGNvZGUgb3V0bGluZSBpcyBhcyBmb2xsb3dzOgo7Owo7OyAxLiBDbGFzcyBpbnRlcmZhY2UgZGVm aW5pdGlvbnMgZm9yIHN0YXRlZnVsIHNlcXVlbmNlLCBkZWNrIChyb290IHNlcXVlbmNlKSwKOzsg c2xpZGUsIGFuZCBhY3Rpb25zIChzZXF1ZW5jZXMgdGhhdCBydW4gd2l0aGluIHNsaWRlcykuCjs7 Cjs7IDIuIE9yZyBlbGVtZW50IG1hcHBpbmcgaW1wbGVtZW50YXRpb25zIHRoYXQgYXJlIHByaXZh dGUgYnV0IGV4cG9zZWQgcHVibGljbHkKOzsgb24gc2xpZGUgYWN0aW9ucyBhbmQgZWxzZXdoZXJl IGJlY2F1c2UgdGhleSBhcmUgc3VwZXIgdXNlZnVsLgo7Owo7OyAzLiBNaXNjZWxsYW5lb3VzIGlt cGxlbWVudGF0aW9uIGRldGFpbHMgb2YgcGFyc2luZyBhcmd1bWVudHMsIGRlYnVnIHByaW50aW5n LAo7OyBoZWFkZXIsIGFuaW1hdGlvbiBldGMuCjs7Cjs7IDQuIExpZmVjeWNsZSBvZiB0aGUgbW9k ZSwgc3dpdGNoaW5nIGJldHdlZW4gYmFzZSBidWZmZXIsIGNvbnRlbnRzLCBhbmQKOzsgc2xpZGVz LCB1c2VyIGludGVyZmFjZSBjb21tYW5kcy4KOzsKOzsgRm9yIHVzZXJzLCB5b3UgbWlnaHQgd2Fu dCB0byBjcmVhdGUgeW91ciBvd24gYWN0aW9ucywgc28gY2hlY2sgYGRzbGlkZS1hY3Rpb24nCjs7 IGFuZCBpdHMgc3ViLWNsYXNzZXMuICBSZWFkIHRoZSBtYW51YWwgb24gYChpbmZvIFwiKGVpZWlv KSBcVG9wIiknCjs7Cjs7IFRoZSBgZHNsaWRlLWRlY2snIGNsYXNzIGNvbnRhaW5zIHNvbWUgZnVu Y3Rpb25zIHJlbGF0ZWQgdG8gYWRkaW5nIGNhbGxiYWNrcyBvcgo7OyBlbnRlcmluZyBjdXN0b20g c2VxdWVuY2VzLgo7Owo7OyBGb3IgaGFja2VycyB3aXNoaW5nIHRvIGV4dGVuZCB0aGUgY29kZSwg aW4gYWRkaXRpb24sIHlvdSB3aWxsIHdhbnQgdG8gY2hlY2sKOzsgYGRzbGlkZS0tbWFrZS1zbGlk ZScgaWYgeW91IHdhbnQgeW91ciBzbGlkZXMgdG8gaHlkcmF0ZSBhY3Rpb25zIGRpZmZlcmVudGx5 Lgo7OyBBbHNvIHBheSB2ZXJ5IGNsb3NlIGF0dGVudGlvbiB0byBgZHNsaWRlLXN0YXRlZnVsLXNl cXVlbmNlJyBhbmQgaG93IHNlcXVlbmNlcwo7OyBhbmQgc3RlcHMgY2FuIGJlIHB1c2hlZC4KOzsK OzsgVGhpcyBwYWNrYWdlIGlzIGEgZm9yayBhbmQgbW9zdGx5IGNvbXBsZXRlIHJlLXdyaXRlIG9m IG9yZy10cmVlLXNsaWRlIGJ5Cjs7IFRha2Fha2kgSVNISUtBV0EuICBUaGFua3MgdG8gZXZlcnlv bmUgd2hvIHdvcmtlZCBvbiBvcmctdHJlZS1zbGlkZSBvdmVyIHRoZQo7OyB5ZWFycy4gIFRoZSBp bXBsZW1lbnRhdGlvbiBpZGVhcyBhbmQgZmVhdHVyZXMgb2Ygb3JnLXRyZWUtc2xpZGUgd2VyZSBh IGdyZWF0Cjs7IGluc3BpcmF0aW9uIGZvciB0aGlzIHBhY2thZ2UuCgo7OzsgQ29kZToKCihyZXF1 aXJlICdpbWFnZS1tb2RlKQoocmVxdWlyZSAnZWllaW8pCihyZXF1aXJlICdvcmctZWxlbWVudCkK KHJlcXVpcmUgJ29yZy1mb2xkKQoocmVxdWlyZSAnZmFjZS1yZW1hcCkKCihldmFsLXdoZW4tY29t cGlsZSAocmVxdWlyZSAnY2wtbGliKSkKCihkZWZncm91cCBkc2xpZGUgbmlsCiAgIlVzZXIgdmFy aWFibGVzIGZvciBgZHNsaWRlJy4iCiAgOmdyb3VwICdvdXRsaW5lcykKCihkZWZjdXN0b20gZHNs aWRlLWJhc2UtZm9sbG93cy1zbGlkZSB0CiAgIk5vbi1uaWwgbW92ZXMgdGhlIGJhc2UgYnVmZmVy IHBvaW50IHRvIHRoZSBjdXJyZW50IHNsaWRlLgpUaGlzIGhhcHBlbnMgd2hldGhlciB0aGUgYnVm ZmVyIGlzIHZpc2libGUgb3Igbm90LiIKICA6dHlwZSAnYm9vbGVhbikKCihkZWZjdXN0b20gZHNs aWRlLXN0YXJ0LWZyb20gJ3BvaW50CiAgIldoZW4gc3RhcnRpbmcsIGJlZ2luIGF0IGBwb2ludCcg YGZpcnN0JyBzbGlkZS4KQW55IG90aGVyIHZhbHVlIGlzIGVxdWl2YWxlbnQgdG8gYGZpcnN0Jy4K CklmIHRoZSBjb250ZW50cyBhcmUgc2hvd24gZmlyc3QsIHRoZSBwb2ludCB3aWxsIGJlIG9uIHRo ZQpjb25maWd1cmVkIHNsaWRlLgoKVGhpcyBvbmx5IGhhcyBlZmZlY3Qgd2hlbiBzdGFydGluZyB0 aGUgbW9kZSBvciBjb21tYW5kcyB0aGF0CmltcGxpY2l0bHkgc3RhcnQgdGhlIG1vZGUuCgotIGBm aXJzdCc6IEFsd2F5cyBiZWdpbiB0aGUgc2xpZGVzaG93IGZyb20gdGhlIHZlcnkgZmlyc3Qgc2xp ZGUuCgotIGBwb2ludCc6IHRoZSBzbGlkZXNob3cgYWx3YXlzIGJlZ2lucyBhdCB0aGUgc2xpZGUg dW5kZXIgcG9pbnQuCgpJZiB5b3UganVzdCB3YW50IHRvIG5hdmlnYXRlIHNsaWRlcyB3aXRoIHRo ZSBwb2ludCwgeW91IHNob3VsZAp1c2UgdGhlIGNvbnRlbnRzIG1vZGUgYnkgY2FsbGluZyBgZHNs aWRlLWRlY2stc3RhcnQnIGluIGEKcHJlc2VudGF0aW9uIHRoYXQgaXMgYWxyZWFkeSBzdGFydGVk LiIKICA6dHlwZSAnKGNob2ljZSAoY29uc3QgOnRhZyAiRmlyc3Qgc2xpZGUiIGZpcnN0KQogICAg ICAgICAgICAgICAgIChjb25zdCA6dGFnICJTbGlkZSBhdCBwb2ludCIgcG9pbnQpKSkKCihkZWZj dXN0b20gZHNsaWRlLXN0YXJ0LWZ1bmN0aW9uICMnZHNsaWRlLWRpc3BsYXktc2xpZGVzCiAgIldo ZW4gc3RhcnRpbmcgdGhlIG1vZGUsIHRoaXMgaXMgdGhlIGRlZmF1bHQgc3RhcnRpbmcgZnVuY3Rp b24uCkl0IHNob3VsZCB1c3VhbGx5IGNhbGwgYGRzbGlkZS1kaXNwbGF5LXNsaWRlcycgb3IKYGRz bGlkZS1kaXNwbGF5LWNvbnRlbnRzJy4gIFlvdSBjYW4gYnVpbGQgY29tbWFuZHMgdGhhdAp1c2Ug YGxldCcgYmluZGluZyB0byB0ZW1wb3JhcmlseSBzZXQgdGhpcyB2YXJpYWJsZSBpbiBvcmRlciB0 bwpzdGFydCB3aXRoIGEgc3BlY2lmaWMgc3RhcnRpbmcgZnVuY3Rpb24uIgogIDp0eXBlICdmdW5j dGlvbikKCihkZWZjdXN0b20gZHNsaWRlLWhlYWRlciB0CiAgIlRoZSBzdGF0dXMgb2YgZGlzcGxh eWluZyB0aGUgc2xpZGUgaGVhZGVyLiIKICA6dHlwZSAnYm9vbGVhbikKCihkZWZjdXN0b20gZHNs aWRlLWhlYWRlciB0CiAgIkRpc3BsYXkgaGVhZGVyIGluIGNvbnRlbnRzIGJ1ZmZlci4KV2hlbiB0 aGlzIGlzIGRpc2FibGVkLCB0aGUga2V5d29yZHMgZm9yIHRpdGxlIGV0YyB3aWxsIHJlbWFpbgp2 aXNpYmxlLCBhbGJlaXQgc2Nyb2xsZWQgYXdheSBiZWNhdXNlIG9mIGhvdyBgb3JnLW92ZXJ2aWV3 Jwp3b3Jrcy4iCiAgOnR5cGUgJ2Jvb2xlYW4pCgooZGVmY3VzdG9tIGRzbGlkZS1oZWFkZXItZnVu IG5pbAogICJDdXN0b20gZnVuY3Rpb24gdG8gb3ZlcnJpZGUgaGVhZGluZyBnZW5lcmF0aW9uLgpU aGUgZnVuY3Rpb24geW91IGRlZmluZSBzaG91bGQgYWNjZXB0IHR3byBhcmd1bWVudHM6CgotIENM RUFOVVA6IG1lYW5pbmcgdG8gZGVsZXRlIGFueSBzdGF0ZSB0aGF0IHdhcyBjcmVhdGVkIGZvciBh bgogIGV4aXN0aW5nIGhlYWRlci4KCi0gb3B0aW9uYWwgQlJFQURDUlVNQlM6IGluZGljYXRpbmcg aWYgY3JlYXRpbmcgYnJlYWRjcnVtYnMgaXMKICBhcHByb3ByaWF0ZSBvciBub3QsIHN1Y2ggYXMg d2hlbiBkaXNwbGF5aW5nIHRoZSBjb250ZW50cyB2aWV3LgoK8J+apyBUaGlzIG9wdGlvbiBpcyBl eHBlcmltZW50YWwgYW5kIHRoZSBzaWduYXR1cmUgaXMgc3ViamVjdCB0bwpjaGFuZ2UuCgpXaGVu IG5pbCwgdGhlIGhlYWRlciBpcyBnZW5lcmF0ZWQgYnkgdGhlIGRlZmF1bHQKYGRzbGlkZS1tYWtl LWhlYWRlcicsIHdoaWNoIHJlc3BlY3RzIG1hbnkgY3VzdG9taXplIG9wdGlvbnMuCkhvd2V2ZXIs IHlvdSBtYXkgZmluZCBpdCBmYXN0ZXIgdG8gY29tcGxldGVseSByZXBsYWNlIHRoaXMKZnVuY3Rp b24gdG8gZ2V0IGV4YWN0bHkgd2hhdCB5b3Ugd2FudC4iCiAgOnR5cGUgJ2Z1bmN0aW9uKQoKKGRl ZmN1c3RvbSBkc2xpZGUtaGVhZGVyLWF1dGhvciB0CiAgIlNob3cgdGhlIGVtYWlsIGluIHRoZSBo ZWFkZXIuCklmIHRoZXJlIGlzIGEgIythdXRob3I6IGtleXdvcmQsIGl0IHdpbGwgYmUgdXNlZC4i CiAgOnR5cGUgJ2Jvb2xlYW4pCgooZGVmY3VzdG9tIGRzbGlkZS1oZWFkZXItZW1haWwgdAogICJT aG93IHRoZSBlbWFpbCBpbiB0aGUgaGVhZGVyLgpJZiB0aGVyZSBpcyBhICMrZW1haWw6IGtleXdv cmQsIGl0IHdpbGwgYmUgdXNlZC4iCiAgOnR5cGUgJ2Jvb2xlYW4pCgooZGVmY3VzdG9tIGRzbGlk ZS1oZWFkZXItZGF0ZSB0CiAgIlNob3cgdGhlIGRhdGUgaW4gdGhlIGhlYWRlci4KSWYgdGhlcmUg aXMgYSAjK2RhdGU6IGtleXdvcmQsIGl0IHdpbGwgYmUgdXNlZC4KVGhlIGN1cnJlbnQgdGltZSB3 aWxsIGJlIHVzZWQgYXMgYSBmYWxsYmFjay4iCiAgOnR5cGUgJ2Jvb2xlYW4pCgooZGVmY3VzdG9t IGRzbGlkZS1tYXJnaW4tdGl0bGUtYWJvdmUgMC41CiAgIk1hcmdpbiBiZXR3ZWVuIGhlYWRlciB0 aXRsZSBhbmQgdGhlIHRvcCBvZiB0aGUgd2luZG93LgpDYW4gYmUgYSBmbG9hdCBvciBpbnRlZ2Vy LiIKICA6dHlwZSAnbnVtYmVyKQoKKGRlZmN1c3RvbSBkc2xpZGUtbWFyZ2luLXRpdGxlLWJlbG93 IDAuNQogICJNYXJnaW4gYmV0d2VlbiB0aXRsZSBhbmQgb3RoZXIgaGVhZGVyIGluZm8uCkNhbiBi ZSBhIGZsb2F0IG9yIGludGVnZXIuIgogIDp0eXBlICdudW1iZXIpCgooZGVmY3VzdG9tIGRzbGlk ZS1tYXJnaW4tY29udGVudCAxLjUKICAiTWFyZ2luIGJldHdlZW4gdGhlIHNsaWRlIGhlYWRlciBh bmQgaXRzIGNvbnRlbnQuCkNhbiBiZSBhIGZsb2F0IG9yIGludGVnZXIuIgogIDp0eXBlICdudW1i ZXIpCgooZGVmY3VzdG9tIGRzbGlkZS1zbGlkZS1pbi1lZmZlY3QgdAogICJVc2luZyBhIHZpc3Vh bCBlZmZlY3Qgb2Ygc2xpZGUtaW4gZm9yIGRpc3BsYXlpbmcgdHJlZXMuIgogIDp0eXBlICdib29s ZWFuKQoKKGRlZmN1c3RvbSBkc2xpZGUtc2xpZGUtaW4tYmxhbmstbGluZXMgMTUKICAiTGluZSBo ZWlnaHQgb2YgdGhlIHNsaWRlLWluIGVmZmVjdC4iCiAgOnR5cGUgJ251bWJlcikKCihkZWZjdXN0 b20gZHNsaWRlLWZlZWRiYWNrLW1lc3NhZ2VzCiAgJyg6c3RhcnQgIlN0YXJ0ISDilrYiCiAgICA6 Zm9yd2FyZCAiRm9yd2FyZCDihpIiCiAgICA6YmFja3dhcmQgIuKGkCBCYWNrd2FyZCIKICAgIDpj b250ZW50cyAiQ29udGVudHMg4piwIgogICAgOnN0b3AgIlN0b3Ag4pagIgogICAgOmFmdGVyLWxh c3Qtc2xpZGUgIk5vIG1vcmUgc2xpZGVzISIpCiAgIkZlZWRiYWNrIG1lc3NhZ2VzIGZvciBzbGlk ZSBjb250cm9scy4KVHVybiBvZmYgYnkgc2V0dGluZyB0byBuaWwuICBQbGlzdCBrZXlzIGFuZCB3 aGVyZSB0aGV5IGFyZSB1c2VkOgoKLSA6c3RhcnQgYGRzbGlkZS1kZWNrLXN0YXJ0JwoKLSA6Zm9y d2FyZCBgZHNsaWRlLWRlY2stZm9yd2FyZCcKCi0gOmJhY2t3YXJkIGBkc2xpZGUtZGVjay1iYWNr d2FyZCcKCi0gOmNvbnRlbnRzIGBkc2xpZGUtZGlzcGxheS1jb250ZW50cycKCi0gOnN0b3AgYGRz bGlkZS1kZWNrLXN0b3AnCgotIDphZnRlci1sYXN0LXNsaWRlOiBzZWUgYGFmdGVyLWxhc3Qtc2xp ZGUtaG9vayciCiAgOnR5cGUgJ3BsaXN0CiAgOm9wdGlvbnMgJygoOnN0YXJ0IHN0cmluZykKICAg ICAgICAgICAgICg6Zm9yd2FyZCBzdHJpbmcpCiAgICAgICAgICAgICAoOmJhY2t3YXJkIHN0cmlu ZykKICAgICAgICAgICAgICg6Y29udGVudHMgc3RyaW5nKQogICAgICAgICAgICAgKDpzdG9wIHN0 cmluZykKICAgICAgICAgICAgICg6YWZ0ZXItbGFzdC1zbGlkZSBzdHJpbmcpKSkKCihkZWZjdXN0 b20gZHNsaWRlLWJyZWFkY3J1bWItZmFjZSAnKDppbmhlcml0IG9yZy1sZXZlbC04KQogICJGYWNl IGFkZGVkIHRvIHRoZSBsaXN0IG9mIGZhY2VzIGZvciBicmVhZGNydW1icy4KVGhpcyBjYW4gYmUg YSBmYWNlIG5hbWUgc3ltYm9sIG9yIGFuIGFub255bW91cyBmYWNlIHNwZWMuICBJdAp3aWxsIGJl IGFkZGVkIHRvIHRoZSBmYWNlIGxpc3QsIG1lYW5pbmcgaXQgdGhlIG9yaWdpbmFsIGZhY2Uncwpw cm9wZXJ0aWVzIHJlbWFpbiB1bmxlc3Mgc2hhZG93ZWQuIgogIDp0eXBlICdmYWNlKQoKKGRlZmN1 c3RvbSBkc2xpZGUtYnJlYWRjcnVtYi1zZXBhcmF0b3IgIiDwn6KSICIKICAiRGVsaW1pdGVyIGZv ciBicmVhZGNydW1icyBvciBuaWwgdG8gdHVybiBvZmYgYnJlYWRjcnVtYnMuIgogIDp0eXBlICco Y2hvaWNlIChjb25zdCA6dGFnICJEb24ndCBkaXNwbGF5IGJyZWFkY3J1bWJzIiBuaWwpCiAgICAg ICAgICAgICAgICAgKHN0cmluZyA6dGFnICJEZWxpbWl0ZXIiKSkpCgooZGVmY3VzdG9tIGRzbGlk ZS1icmVhZGNydW1icy1oaWRlLXRvZG8tc3RhdGUgdAogICJJZiBub24tbmlsLCBoaWRlIFRPRE8g c3RhdGVzIGluIHRoZSBicmVhZGNydW1icy4iCiAgOnR5cGUgJ2Jvb2xlYW4pCgooZGVmY3VzdG9t IGRzbGlkZS1oaWRlLXRvZG8gbmlsCiAgIklmIG5vbi1uaWwsIGhpZGUgVE9ETyBzdGF0ZXMgaW4g aGVhZGluZ3MuIgogIDp0eXBlICdib29sZWFuKQoKKGRlZmN1c3RvbSBkc2xpZGUtaGlkZS10YWdz IG5pbAogICJJZiBub24tbmlsLCBoaWRlIHRhZ3MgaW4gaGVhZGluZ3MuIgogIDp0eXBlICdib29s ZWFuKQoKKGRlZmN1c3RvbSBkc2xpZGUtYW5pbWF0aW9uLWR1cmF0aW9uIDEuMAogICJIb3cgbG9u ZyBzbGlkZSBpbiB0YWtlcy4iCiAgOnR5cGUgJ251bWJlcikKCihkZWZjdXN0b20gZHNsaWRlLWFu aW1hdGlvbi1mcmFtZS1kdXJhdGlvbiAoLyAxLjAgNjAuMCkKICAiTGVuZ3RoIGJldHdlZW4gdXBk YXRlcy4KSW5jcmVhc2UgaWYgeW91ciBzby1jYWxsZWQgbWFjaGluZSBoYXMgdHJvdWJsZSBkcmF3 aW5nLiIKICA6dHlwZSAnbnVtYmVyKQoKKGRlZmN1c3RvbSBkc2xpZGUtc3RhcnQtaG9vayAnKGRz bGlkZS1jdXJzb3ItaGlkZSkKICAiUnVucyBhZnRlciB0aGUgc2xpZGUgYnVmZmVyIGlzIGNyZWF0 ZWQgYnV0IGJlZm9yZSBmaXJzdCBzbGlkZS4KQnVmZmVyIGlzIHdpZGVuZWQgYW5kIGZ1bGx5IHZp c2libGUuIgogIDp0eXBlICdob29rKQoKKGRlZmN1c3RvbSBkc2xpZGUtc3RvcC1ob29rIG5pbAog ICJSdW5zIGluIHRoZSBiYXNlIGJ1ZmZlciBhZnRlciBzdG9wcGluZy4iCiAgOnR5cGUgJ2hvb2sp CgooZGVmY3VzdG9tIGRzbGlkZS1uYXJyb3ctaG9vayBuaWwKICAiUnVucyB3aGVuZXZlciB0aGUg c2xpZGUgYnVmZmVyIHJlc3RyaWN0aW9uIGlzIHVwZGF0ZWQuClVzZSB0aGlzIGhvb2sgZm9yIGJl aGF2aW9ycyB0aGF0IGFmZmVjdCB0aGUgZGlzcGxheWVkIHJlZ2lvbi4KU2xpZGVzIGFuZCBzZXF1 ZW5jZXMgdGhhdCBkbyBub3QgZGlzcGxheSB0aGVtc2VsdmVzIG9yIG9ubHkKYWZmZWN0IGRpc3Bs YXkgaW4gYW5vdGhlciBidWZmZXIgd2lsbCBub3QgdHJpZ2dlciB0aGlzIGhvb2suIgogIDp0eXBl ICdob29rKQoKKGRlZmN1c3RvbSBkc2xpZGUtY29udGVudHMtaG9vayBuaWwKICAiUnVucyBsYXN0 IGFmdGVyIHN3aXRjaGluZyB0byBjb250ZW50cy4iCiAgOnR5cGUgJ2hvb2spCgooZGVmY3VzdG9t IGRzbGlkZS1hZnRlci1sYXN0LXNsaWRlLWhvb2sgJygpCiAgIlJ1biB3aGVuIGZvcndhcmQgaXMg Y2FsbGVkIGJ1dCB0aGVyZSBpcyBubyBuZXh0IHNsaWRlLgpUaGlzIGNhbiBlaXRoZXIgcHJvdmlk ZSBmZWVkYmFjayBvciBxdWl0IGltbWVkaWF0ZWx5IGV0Yy4KQ29uc2lkZXIgdXNpbmcgYGRzbGlk ZS1wdXNoLXN0ZXAnIGFuZCB3cml0aW5nIGEgY2FsbGJhY2sgdGhhdApvbmx5IHJlYWN0cyB0byB0 aGUgYGZvcndhcmQnIHN0YXRlLiAgVGhpcyBjYWxsYmFjayB3aWxsIHRoZW4gb25seQpydW4gaWYg dGhlIHVzZXIgaW1tZWRpYXRlbHkgY2FsbHMgYGRzbGlkZS1kZWNrLWZvcndhcmQnCmFnYWluLiAg YGRzbGlkZS1kZWNrLXN0b3AnIGlzIGFub3RoZXIgZ29vZCBjaG9pY2UuIgogIDp0eXBlICdob29r KQoKKGRlZmN1c3RvbSBkc2xpZGUtZGVmYXVsdC1zbGlkZS1hY3Rpb24gIydkc2xpZGUtc2xpZGUt YWN0aW9uLWNoaWxkCiAgIkFjdGlvbiBjbGFzcyB3aXRoIGxpZmVjeWNsZSBhcm91bmQgdGhlIHNl Y3Rpb24gYWN0aW9ucy4KV2hlbiBzdGVwcGluZyBmb3J3YXJkIG9yIGJhY2t3YXJkLCBpdCBpcyBj YWxsZWQgYmVmb3JlIGFueQpzZWN0aW9uIGFjdGlvbi4gIEl0J3Mgbm9ybWFsIHB1cnBvc2UgaXMg dG8gdXBkYXRlIHRoZSBidWZmZXIKcmVzdHJpY3Rpb24gYmVmb3JlIHNlY3Rpb24gYWN0aW9ucyBh cmUgcnVuLgoKWW91IGNhbiBjb25maWd1cmUgdGhpcyBwZXItaGVhZGluZyBieSBzZXR0aW5nIHRo ZQpTTElERV9BQ1RJT04ga2V5d29yZC4gIFlvdSBjYW4gY29uZmlndXJlIGl0IGZvcgp0aGUgZG9j dW1lbnQgZGVmYXVsdCBieSBhZGRpbmcgYW4gU0xJREVfQUNUSU9OCmtleXdvcmQuIgogIDp0eXBl ICdmdW5jdGlvbikKCjs7IFRPRE8gdGVzdCB0aGUgdXNlIG9mIHBsaXN0IGFyZ3MKKGRlZmN1c3Rv bSBkc2xpZGUtZGVmYXVsdC1hY3Rpb25zICcoZHNsaWRlLWFjdGlvbi1oaWRlLW1hcmt1cAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc2xpZGUtYWN0aW9uLXByb3BlcnRpemUp CiAgIkFjdGlvbnMgdGhhdCBydW4gd2l0aGluIHRoZSBzZWN0aW9uIGRpc3BsYXkgYWN0aW9uIGxp ZmVjeWNsZS4KSXQncyB2YWx1ZSBpcyBhIGxpc3Qgb2Ygc3ltYm9sIGBkc2xpZGUtYWN0aW9uJyBz dWItY2xhc3NlcyBvciAoQ0xBU1MgLiBBUkdTKQpmb3JtcyB3aGVyZSBBUkdTIGlzIGEgcGxpc3Qu ICBFYWNoIHN1YmNsYXNzIHdpbGwgYmUgaW5zdGFudGlhdGVkCmludG8gYW4gYWN0aW9uIG9iamVj dC4gIFNlZSB0aGUgc3ltYm9sIGBkc2xpZGUtYWN0aW9uJyBjbGFzcyBhbmQgaXRzIG1ldGhvZHMK dG8gbGVhcm4gYWJvdXQgd3JpdGluZyBjdXN0b20gYWN0aW9ucy4KCk1hbnkgc2VjdGlvbiBhY3Rp b25zIGFyZSBuby1vcCB3aGVuZXZlciB0aGUgY29udGVudCBkb2Vzbid0CmNvbnRhaW4gYW55IGVs ZW1lbnRzIHRoZXkgYWN0IG9uLiAgWW91IGNhbiBhZGQgY2xhc3NlcyB0byB0aGlzCmxpc3QgaW4g b3JkZXIgdG8gaGF2ZSBkZWZhdWx0IGJlaGF2aW9ycyBmb3Igc29tZSBvcmcgZWxlbWVudHMuCgpZ b3UgY2FuIGNvbmZpZ3VyZSB0aGlzIHBlci1oZWFkaW5nIGJ5IHNldHRpbmcgdGhlIERTTElERV9B Q1RJT05TCmtleXdvcmQuICBZb3UgY2FuIGNvbmZpZ3VyZSBpdCBmb3IgdGhlIGRvY3VtZW50IGRl ZmF1bHQgYnkgYWRkaW5nCmFuIERTTElERV9BQ1RJT05TIGtleXdvcmQuIgogIDp0eXBlICcobGlz dCBmdW5jdGlvbikpCgooZGVmY3VzdG9tIGRzbGlkZS1kZWZhdWx0LWNsYXNzICdkc2xpZGUtc2xp ZGUKICAiQSBjbGFzcyB0byBtb3JlIGRlZXBseSBtb2RpZnkgc2xpZGUgYmVoYXZpb3IuClZhbHVl IHNob3VsZCBiZSBhIGN1c3RvbSBjbGFzcyBleHRlbmRpbmcgYGRzbGlkZScuICBZb3UgY2FuCm92 ZXJyaWRlIG1ldGhvZHMgaWYgdGhlIGJ1aWx0LWluIGltcGxlbWVudGF0aW9uIGlzIGluc3VmZmlj aWVudC4KQ29uc2lkZXIgdXBzdHJlYW1pbmcgY2hhbmdlcy4KCllvdSBjYW4gY29uZmlndXJlIHRo aXMgcGVyIGhlYWRpbmcgYnkgc2V0dGluZyB0aGUgRFNMSURFX0NMQVNTCnByb3BlcnR5LiAgWW91 IGNhbiBjb25maWd1cmUgaXQgZm9yIHRoZSBkb2N1bWVudCBkZWZhdWx0IGJ5CmFkZGluZyBhbiBE U0xJREVfQ0xBU1Mga2V5d29yZC4iCiAgOnR5cGUgJ3N5bWJvbCkKCihkZWZjdXN0b20gZHNsaWRl LWRlZmF1bHQtZGVjay1jbGFzcyAnZHNsaWRlLWRlY2sKICAiQSBjbGFzcyB0byBtb3JlIGRlZXBs eSBtb2RpZnkgb3ZlcmFsbCBkZWNrIGJlaGF2aW9yLgpWYWx1ZSBzaG91bGQgYmUgYSBjdXN0b20g Y2xhc3MgZXh0ZW5kaW5nIHN5bWJvbCBgZHNsaWRlLWRlY2snLgpVc2UgdGhpcyB0byBtb2RpZnkg dGhlIHJvb3QtbGV2ZWwgYmVoYXZpb3JzLCBpbmNsdWRpbmcgc3dpdGNoaW5nCnRvIGNoaWxkcmVu IGFuZCBmaW5kaW5nIHNpYmxpbmdzLiAgWW91IGNhbiBjb25maWd1cmUgdGhpcyBmb3IgdGhlCmRv Y3VtZW50IGJ5IGFkZGluZyB0aGUgRFNMSURFX1JPT1RfQ0xBU1Mga2V5d29yZC4iCiAgOnR5cGUg J3N5bWJvbCkKCihkZWZjdXN0b20gZHNsaWRlLWRlZmF1bHQtZmlsdGVyICMnZHNsaWRlLWJ1aWx0 LWluLWZpbHRlcgogICJBIGZ1bmN0aW9uIHVzZWQgdG8gY2FsbCBuZXh0IG9uIGNoaWxkcmVuLgpU aGUgZnVuY3Rpb24gdXNlZCBhcyBhY3Rpb25zIHNob3VsZCBhY2NlcHQgYW4gb3JnIGVsZW1lbnQs IGEKYGhlYWRsaW5lJyB0eXBlIGVsZW1lbnQgYW5kIHJldHVybiBpdCBpZiBpdCBpcyBhIHZhbGlk IGhlYWRpbmcgb3IKcmV0dXJuIG5pbCBpZiBpdCBzaG91bGQgYmUgc2tpcHBlZC4KCllvdSBjYW4g Y29uZmlndXJlIHRoaXMgcGVyIGhlYWRpbmcgYnkgc2V0dGluZyB0aGUgRFNMSURFX0ZJTFRFUgpr ZXl3b3JkLiAgWW91IGNhbiBjb25maWd1cmUgaXQgZm9yIHRoZSBkb2N1bWVudCBkZWZhdWx0IGJ5 IGFkZGluZwphbiBEU0xJREVfRklMVEVSIGtleXdvcmQuIgogIDp0eXBlICdmdW5jdGlvbikKCjs7 IFRPRE8gY2FuIGFsc28gcHJvYmFibHkgYmUgb2JqZWN0cy4gIFVzZSBjYXNlPwooZGVmY3VzdG9t IGRzbGlkZS1oaWRlLW1hcmt1cC10eXBlcyAnKGNvbW1lbnQKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb21tZW50LWJsb2NrCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZHJhd2VyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cHJvcGVydHktZHJhd2VyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5 d29yZCkKICAiRGVmYXVsdCB0eXBlcyB0byBiZSBoaWRkZW4gYnkgYGRzbGlkZS1hY3Rpb24taGlk ZS1tYXJrdXAnLgpDYW4gYmUgYW55IGVsZW1lbnQgaW4gYG9yZy1lbGVtZW50LWFsbC1lbGVtZW50 cycuIgogIDp0eXBlICcocmVwZWF0IHN5bWJvbCkpCgooZGVmY3VzdG9tIGRzbGlkZS1jb250ZW50 cy1zZWxlY3Rpb24taGlnaGxpZ2h0IHQKICAiU2hvdyBhIGhpZ2hsaWdodCBvbiB0aGUgc2VsZWN0 ZWQgaGVhZGxpbmUuClRoaXMgaXMgdXNlZnVsIGlmIHlvdSBoYXZlIHNvbWUgc3VidGxlIGN1cnNv ciBmZWF0dXJlIGVuYWJsZWQgZm9yCnlvdXIgcHJlc2VudGF0aW9uIGFuZCB3b3VsZG4ndCBvdGhl cndpc2Uga25vdyB3aGF0IGxpbmUgeW91IGFyZQpvbiBpbiB0aGUgY29udGVudHMgdmlldy4gIFRo ZSBkZWZhdWx0IGlzIGFsc28ganVzdCBhIHdheSBtb3JlCm9idmlvdXMgZGlzcGxheSBzdHlsZS4i CiAgOnR5cGUgJ2Jvb2xlYW4pCgooZGVmZmFjZSBkc2xpZGUtY29udGVudHMtc2VsZWN0aW9uLWZh Y2UKICAnKCh0IDppbmhlcml0IG9yZy1sZXZlbC0xIDppbnZlcnNlLXZpZGVvIHQgOmV4dGVuZCB0 KSkKICAiRmFjZSBmb3IgaGlnaGxpZ2h0aW5nIHRoZSBjdXJyZW50IHNsaWRlIHJvb3QuIikKCihk ZWZmYWNlIGRzbGlkZS1oaWdobGlnaHQKICAnKCh0IDppbmhlcml0IGhsLWxpbmUpKQogICJGYWNl IHVzZWQgaW4gYmFzZSBidWZmZXIgdG8gaGlnaGxpZ2h0IHByb2dyZXNzLgpTZWUgYGRzbGlkZS1i YXNlLWZvbGxvd3Mtc2xpZGUnLiIpCgooZGVmZmFjZSBkc2xpZGUtYmFiZWwtc3VjY2Vzcy1oaWdo bGlnaHQKICAnKCh0IDppbmhlcml0IGhsLWxpbmUpKQogICJUZW1wb3JhcmlseSBoaWdobGlnaHQg YmFiZWwgYmxvY2tzIHRoYXQgc3VjY2VlZGVkLiIpCgooZGVmZmFjZSBkc2xpZGUtYmFiZWwtZXJy b3ItaGlnaGxpZ2h0CiAgJygodCA6aW5oZXJpdCBlcnJvcikpCiAgIlRlbXBvcmFyaWx5IGhpZ2hs aWdodCBiYWJlbCBibG9ja3MgdGhhdCBmYWlsZWQuIikKCihkZWZ2YXIgZHNsaWRlLS1kZWJ1ZyBu aWwKICAiU2V0IHRvIHQgZm9yIGxvZ2dpbmcgc2xpZGVzIGFuZCBhY3Rpb25zLiIpCgooZGVmdmFy IGRzbGlkZS0tYW5pbWF0aW9uLXRpbWVycyBuaWwpCihkZWZ2YXItbG9jYWwgZHNsaWRlLS1hbmlt YXRpb24tb3ZlcmxheXMgbmlsKQoKOzsgVGVsbCB0aGUgY29tcGlsZXIgdGhhdCB0aGVzZSB2YXJp YWJsZXMgZXhpc3QKKGRlZnZhciBkc2xpZGUtbW9kZSkKCihkZWZ2YXIgZHNsaWRlLS1kZWNrIG5p bAogICJBY3RpdmUgZGVjayBvYmplY3QuClRoaXMgaXMgZ2xvYmFsLiAgSWYgYSBwcmVzZW50YXRp b24gaXMgYWN0aXZlLCB5b3UgY2FuIGxvb2sgYXQgdGhpcyB2YXJpYWJsZSB0bwpjb29yZGluYXRl IHdpdGggaXQuIikKCihkZWZ2YXIgZHNsaWRlLW92ZXJsYXlzIG5pbAogICJPdmVybGF5cyB1c2Vk IHRvIGhpZGUgb3IgY2hhbmdlIGNvbnRlbnRzIGRpc3BsYXkuClRoZXNlIGFyZSBjbGVhbmVkIHVw IHdoZW4gdGhlIHJlc3RyaWN0aW9uIGlzIGNoYW5nZWQgb3Igd2hlbiBzd2l0Y2hpbmcKYmV0d2Vl biBjb250ZW50cyBhbmQgc2xpZGVzLiIpCgooZGVmdmFyIGRzbGlkZS0tc3RlcC1vdmVybGF5cyBu aWwKICAiT3ZlcmxheXMgdGhhdCBvbmx5IGxpdmUgZm9yIG9uZSBzdGVwLiIpCgooZGVmdmFyIGRz bGlkZS0taGVhZGVyLW92ZXJsYXkgbmlsCiAgIkZsYWcgdG8gY2hlY2sgdGhlIHN0YXR1cyBvZiBv dmVybGF5IGZvciBhIHNsaWRlIGhlYWRlci4iKQoKOzsgU2hvdWxkbid0IG5lZWQgb25lIHBlciBi dWZmZXIKKGRlZnZhciBkc2xpZGUtLWNvbnRlbnRzLWhsLWxpbmUtb3ZlcmxheSBuaWwKICAiSGln aGxpZ2h0cyBzZWxlY3RlZCBoZWFkaW5nIGluIGNvbnRlbnRzIHZpZXcuIikKCihkZWZjb25zdCBk c2xpZGUtLWRpc3BsYXktYWN0aW9ucwogICcoZGlzcGxheS1idWZmZXItc2FtZS13aW5kb3cgZGlz cGxheS1idWZmZXItaW4tcHJldmlvdXMtd2luZG93KQogICJDb25maWd1cmUgYGRpc3BsYXktYnVm ZmVyLWFsaXN0JyB0byBvdmVycmlkZS4iKQoKOzsgKiBDbGFzc2VzCjs7IC0gYGRzbGlkZS1kZWNr JzogaXMgdGhlIGZpcnN0IHRoaW5nIGNhbGxlZCBpbnRvIGJ5IGBkc2xpZGUtZGVjay1mb3J3YXJk JyBhbmQKOzsgICBgZHNsaWRlLWRlY2stYmFja3dhcmQnLiAgSXQgY2hvb3NlcyByb290IGhlYWRp bmdzIHRvIGh5ZHJhdGUgYXMgc2xpZGVzIGFuZCBmb3J3YXJkcwo7OyAgIHRoZXNlIGNvbW1hbmRz IGludG8gdGhlIHNsaWRlcy4KOzsKOzsgLSBgZHNsaWRlLXNsaWRlJzogaW50ZXJwcmV0cyBhbiBv cmcgaGVhZGluZyBpbnRvIHNvbWUgYWN0aW9ucyBhbmQgY29vcmRpbmF0ZXMKOzsgICBmb3J3YXJk aW5nIGNhbGxzIGludG8gYWN0aW9ucyBpbiB0aGUgY29ycmVjdCBvcmRlci4gIFRocm91Z2ggdGhl aXIgYWN0aW9ucywKOzsgICBzbGlkZXMgbWF5IGZvcndhcmQgY2FsbHMgaW50byBvdGhlciBzbGlk ZXMuCjs7Cjs7IC0gYGRzbGlkZS1hY3Rpb24nOiBkb2VzIG1vc3Qgb2YgdGhlIGFjdHVhbCB3b3Jr IG9mIG5hcnJvd2luZywgaGlkaW5nLAo7OyAgIGFuaW1hdGluZywgZXhlY3V0aW5nIGJhYmVsIGV0 Yy4gIEFjdGlvbnMgd2l0aCBgc2xpZGUtYWN0aW9uJyBpbiB0aGVpciBuYW1lCjs7ICAgbGlrZWx5 IGh5ZHJhdGUgY2hpbGQgc2xpZGVzIGFuZCBmb3J3YXJkIGNhbGxzIGludG8gdGhlbS4KCjs7IFRo ZSBnZW5lcmljIGZ1bmN0aW9ucyBiZWxvdyBhcmUgdGhlIG1vc3QgaW1wb3J0YW50IGludGVyZmFj ZXMgZm9yIGFsbCBoYWNraW5nCjs7IG9mIHRoaXMgcGFja2FnZS4KOzsKOzsgVGhlIGRvbWFpbiBt b2RlbCBmaXJzdCBtdXN0IGRlc2NyaWJlIGEgbGluZWFyIHNlcXVlbmNlIG9mIHN0ZXBzIHRoYXQg dGhlIHVzZXIKOzsgdHJhdmVyc2VzIGJvdGggZm9yd2FyZCBhbmQgYmFja3dhcmQuCjs7Cjs7IFRo ZXJlIGFyZSBzb21lIHN0YXRlcyB0aGF0IG1heSBuZWVkIHRvIGJlIHNldCB1cCBvciB0b3JuIGRv d24gYXQgdGhlCjs7IGJvdW5kYXJpZXMgb2YgdGhlIHNlcXVlbmNlLiAgVGhlc2UgYXJlIGhhbmRs ZWQgYnkgdGhyZWUgbWV0aG9kczoKOzsgLSBgZHNsaWRlLWJlZ2luJwo7OyAtIGBkc2xpZGUtZW5k Jwo7OyAtIGBkc2xpZGUtZmluYWwnCjs7Cjs7IGBkc2xpZGUtZW5kJyBpcyBlc3NlbnRpYWxseSBi ZWdpbiBmb3IgZ29pbmcgaW4gcmV2ZXJzZS4gIFVzdWFsbHkgdGhpcyBpcyB0aGUKOzsgc2FtZSBh cyBjYWxsaW5nIGJlZ2luIGFuZCB0aGVuIHN0ZXBwaW5nIGZvcndhcmQgdW50aWwgbm8gbW9yZSBw cm9ncmVzcyBpcwo7OyBtYWRlLiAgSG93ZXZlciBkb2luZyBpdCB0aGlzIHdheSB3b3VsZCBiZSB1 bmFibGUgdG8gYXZvaWQgZXh0cmEgd29yayBhbmQKOzsgY291bGQgZXZlbiBjcmVhdGUgaGVhZGFj aGVzIHdoZW4gaW1wbGVtZW50aW5nIHNlcXVlbmNlcyB0aGF0IHNob3VsZG4ndCB1c2UKOzsgcmV2 ZXJzZSB0byB1bi1leGVjdXRlIHRoZSBmb3J3YXJkcyBzdGVwcyBvciBpbiBjYXNlcyB3aGVyZSBp bXBsZW1lbnRpbmcgdGhpcwo7OyBpcyB0b28gY29tcGxleCB0byBwYXkgb2ZmIHRvIHRoZSB1c2Vy LiAgRm9yIHRoZXNlIHJlYXNvbnMsIHRoZSBpbXBsZW1lbnRhdGlvbgo7OyBvZiBgZHNsaWRlLWVu ZCcgaXMgbGVmdCB1cCB0byB0aGUgdXNlci4KOzsKOzsgYGRzbGlkZS1nb3RvJyBlc3NlbnRpYWxs eSBpcyBqdXN0IGEgY2FyZWZ1bCB1c2Ugb2YgZm9yd2FyZC4gIElmIGV2ZXJ5IGZvcndhcmQKOzsg c3RlcCBwcm9wZXJseSByZXBvcnRzIGl0cyBtYXhpbXVtIGV4dGVudCBvZiBwcm9ncmVzcywgd2Ug Y2FuIHVzZSBmb3J3YXJkIGFuZAo7OyBiZWdpbiB0byBpbXBsZW1lbnQgZXZlcnkgZ290by4KOzsK OzsgRmluYWxseSwgYGRzbGlkZS1mb3J3YXJkJyBhbmQgYGRzbGlkZS1iYWNrd2FyZCcgc2hvdWxk IG5hdmlnYXRlIHRoZSBzdGF0ZXMKOzsgYmV0d2VlbiBiZWdpbiBvciBlbmQgYW5kIGZpbmFsLiAg VGhleSBqdXN0IHJldHVybiBub24tbmlsIHVudGlsIHRoZXkgYXJlCjs7IGRvbmUuICBUaGUgY2Fs bGVyIGRvZXNuJ3QgY2FyZSBhYm91dCB0aGUgaW1wbGVtZW50YXRpb24sIGFuZCB0aGF0IGlzIHdo eQo7OyBFSUVJTyBpcyB1c2VkLgo7Owo7OyBTdWItc2VxdWVuY2VzIGNhbiByZWx5IG9uIHRoZSBw YXJlbnQgc3RhdGUgdG8gZXhpc3QgZm9yIHRoZWlyIGVudGlyZQo7OyBsaWZldGltZS4gVGhlIHBh cmVudCBzZXF1ZW5jZSB3aWxsIG5vdCBjYWxsIGl0cyBvd24gYGRzbGlkZS1maW5hbCcgdW50aWwK OzsgYWZ0ZXIgaXQgaGFzIGNhbGxlZCB0aGUgc3ViLXNlcXVlbmNlJ3MgYGRzbGlkZS1maW5hbCcu Cjs7Cjs7IFN1Yi1zZXF1ZW5jZXMgY3VycmVudGx5IGRvbid0IGhhdmUgYW55IGZpcnN0LWNsYXNz IGV4dGVuc2libGUgc3VwcG9ydCBmb3IKOzsgZW50ZXJpbmcgb3IgZXhpdGluZyB0aGUgc3ViLXNl cXVlbmNlLiAgU3VjaCBjb29wZXJhdGlvbiBpcyBwcmVzZW50IGluIGxpbWl0ZWQKOzsgYW1vdW50 cyB0byBsaW1pdCBjb3VwbGluZyB0aGUgcGFyZW50IGFuZCBjaGlsZCBzZXF1ZW5jZXMuCjs7Cjs7 IEEgbGF6eSBpbXBsZW1lbnRlciBjYW4gZm9yZWdvIG1ldGhvZHMgYnkgZGVsZWdhdGluZyB0aGVt IHRvIHNpbXBsZXIKOzsgaWRlbXBvdGVudCBtZXRob2RzLCBzdWNoIGFzIHVzaW5nIGFuIGlkZW1w b3RlbnQgYmVnaW4gZm9yIGJhY2t3YXJkLiAgV2l0aAo7OyBhIG1heGltdW0gb2Ygc2l4IG1ldGhv ZHMgYW5kIGEgbWluaW11bSBvZiB0d28sIGp1c3QgYmVnaW4gYW5kIGZvcndhcmQsIHlvdQo7OyBo YXZlIGVub3VnaCBiZWhhdmlvciB0byBwcm9wZXJseSBmaXQgdGhlIHVzZXIgaW50ZXJmYWNlLgoK KGNsLWRlZmdlbmVyaWMgZHNsaWRlLWJlZ2luIChvYmopCiAgIlNldCB1cCB0aGUgaW5pdGlhbCBz dGF0ZSBvZiBPQkogd2hlbiBnb2luZyBmb3J3YXJkLgpUaGUgc2VxdWVuY2UgaXMgYmVpbmcgZW50 ZXJlZCBmcm9tIGl0cyBiZWdpbm5pbmcuCgpSZXR1cm4gdmFsdWVzIGFyZSBpZ25vcmVkLiAgYGRz bGlkZS1iZWdpbicgYWx3YXlzIGNvdW50cyBhcyBhCnN0ZXAgYmVjYXVzZSBpdCdzIGEgcmVzdWx0 IG9mIGEgbmlsIHJldHVybiBmcm9tCmBkc2xpZGUtZGVjay1mb3J3YXJkJy4KClRoaXMgbWV0aG9k IHNob3VsZCB3b3JrIHRvZ2V0aGVyIHdpdGggYGRzbGlkZS1lbmQnIGFuZApgZHNsaWRlLWZpbmFs JyB0byBlbnN1cmUgY29uc2lzdGVudGx5IHZhbGlkIHN0YXRlIGZvcgpgZHNsaWRlLWRlY2stZm9y d2FyZCcgYW5kIGBkc2xpZGUtZGVjay1iYWNrd2FyZCcuIikKCihjbC1kZWZnZW5lcmljIGRzbGlk ZS1lbmQgKG9iaikKICAiU2V0IHVwIHRoZSBpbml0aWFsIHN0YXRlIG9mIE9CSiB3aGVuIGdvaW5n IGJhY2t3YXJkLgpUaGUgc2VxdWVuY2UgaXMgYmVpbmcgZW50ZXJlZCBmcm9tIHRoZSBlbmQuCgpS ZXR1cm4gdmFsdWVzIGFyZSBpZ25vcmVkLiAgYGRzbGlkZS1lbmQnIGFsd2F5cyBjb3VudHMgYXMg YSBzdGVwCmJlY2F1c2UgaXQncyBhIHJlc3VsdCBvZiBhIG5pbCByZXR1cm4gZnJvbQpgZHNsaWRl LWRlY2stYmFja3dhcmQnLgoKVGhlIGZpcnN0IGpvYiBvZiB0aGlzIG1ldGhvZCBpcyB0byBwZXJm b3JtIHNldHVwLCBwb3NzaWJseSBieQpqdXN0IGNhbGxpbmcgYmVnaW4gc2luY2UgdGhleSBsaWtl bHkgaGF2ZSBzaW1pbGFyIHNpZGUtZWZmZWN0cy4KClNlY29uZCwgdGhpcyBtZXRob2Qgc2hvdWxk IHJlYWNoIHRoZSBzdGF0ZSB0aGF0IGlzIGVxdWl2YWxlbnQgdG8KaWYgdGhlIHVzZXIgY2FsbGVk IGZvcndhcmQgdW50aWwgbm8gbW9yZSBwcm9ncmVzcyBjb3VsZCBiZSBtYWRlLgoKVGhlIGRlZmF1 bHQgaW1wbGVtZW50YXRpb24gY2FsbHMgYGRzbGlkZS1iZWdpbicgYW5kIHRoZW4gY2FsbHMKYGRz bGlkZS1mb3J3YXJkJyB1bnRpbCBubyBtb3JlIHByb2dyZXNzIGNhbiBiZSBtYWRlLiAgSWYgdGhp cyBpcwppbmFwcHJvcHJpYXRlLCBpdCBzaG91bGQgYmUgb3ZlcnJpZGRlbi4KCkluIGNhc2VzIHdo ZXJlIHlvdSBkb24ndCBuZWVkIGEgcmVhbCBiYWNrd2FyZCBpbXBsZW1lbnRhdGlvbiBvcgpwcm9n cmVzc2luZyBiYWNrd2FyZHMgd291bGQgaGF2ZSBubyBzZW5zaWJsZSBiZWhhdmlvciwgeW91IGNh bgpkZWxlZ2F0ZSB0aGlzIHRvIGBkc2xpZGUtYmVnaW4nIGFuZCBwb3NzaWJseSBkZWxlZ2F0ZQpg ZHNsaWRlLWRlY2stYmFja3dhcmQnIHRvIGBkc2xpZGUtZGVjay1mb3J3YXJkJywgcmVzdWx0aW5n IGluIGEKc2VxdWVuY2UgdGhhdCBhbHdheXMgc3RhcnRzIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGFs d2F5cyBwcm9jZWVkcwp0byB0aGUgZW5kLiAgRm9yIGEgc2luZ2xlIHN0ZXAgc2VxdWVuY2UgdGhh dCBoYXMgaWRlbnRpY2FsIGVmZmVjdAppbiBib3RoIGRpcmVjdGlvbnMsIHRoaXMgaXMgYXBwcm9w cmlhdGUuCgpUaGlzIG1ldGhvZCBzaG91bGQgd29yayB0b2dldGhlciB3aXRoIGBkc2xpZGUtZW5k JyBhbmQKYGRzbGlkZS1maW5hbCcgdG8gZW5zdXJlIGNvbnNpc3RlbnRseSB2YWxpZCBzdGF0ZSBm b3IKYGRzbGlkZS1kZWNrLWZvcndhcmQnIGFuZCBgZHNsaWRlLWRlY2stYmFja3dhcmQnIikKCihj bC1kZWZnZW5lcmljIGRzbGlkZS1maW5hbCAob2JqKQogICJDbGVhbiB1cCBhbnkgcmVtYWluaW5n IHN0YXRlIG9mIE9CSi4KSW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIGNsZWFuIHVwIGFueSBzdGF0 ZSB0aGF0IHdvdWxkIGludGVyZmVyZQp3aXRoIHRoZSBzZXF1ZW5jZSBzdWNjZWVkaW5nIHdoZW4g cnVuIGFnYWluLiAgSWYgeW91ciBzZXF1ZW5jZQppbXBsZW1lbnRzIHJlYWwgYmFja3dhcmQgYmVo YXZpb3IsCgpBbGwgc2lkZS1lZmZlY3RzIGFuZCBzdGF0ZXMgY3JlYXRlZCBieSBzdGVwcyBpbiB0 aGUgc2VxdWVuY2Ugb3IKdGhlIGBkc2xpZGUtYmVnaW4nIGFuZCBgZHNsaWRlLWVuZCcgbWV0aG9k cyBtdXN0IGJlIGNsZWFuZWQgdXAgb3IKb3RoZXJ3aXNlIG1hbmFnZWQgb3IgZWxzZSBgZHNsaWRl LWJhY2t3YXJkJyBhbmQgb3RoZXIgc2VxdWVuY2VzCm9mIHJ1bm5pbmcgYSBwcmVzZW50YXRpb24g d2lsbCBiZSBicml0dGxlIGFuZCBsaWtlbHkgZmFpbCB3aGVuCnJlLXJ1bi4iKQoKKGNsLWRlZmdl bmVyaWMgZHNsaWRlLWZvcndhcmQgKG9iaikKICAiQWR2YW5jZSBPQkogZm9yd2FyZCBieSBvbmUg c3RlcC4KVGhlIHJldHVybiB2YWx1ZSBoYXMgbWVhbmluZyB0byB0aGUgZGVjazoKCi0gdDogcHJv Z3Jlc3Mgd2FzIG1hZGUKCi0gYSBwb2ludDogcHJvZ3Jlc3Mgd2FzIG1hZGUgdXAgdG8gYSBzcGVj aWZpYyBidWZmZXIgbG9jYXRpb24KCi0gbmlsOiBubyBwcm9ncmVzcyBjb3VsZCBiZSBtYWRlLgoK Rm9yIHNlcXVlbmNlcyB0aGF0IGRvbid0IG1ha2UgcHJvZ3Jlc3MgaW4gYSBidWZmZXIsIHJldHVy bmluZyB0CmlzIGZpbmUuICBSZXR1cm5pbmcgYSBwb2ludCBvZiBwcm9ncmVzcyBpcyBuZWNlc3Nh cnkgZm9yIHRoZQpkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIGBkc2xpZGUtZ290bycuCgrimqAg RXZlcnkgc2VxdWVuY2UgcmVwZWF0ZWQgY2FsbHMgdG8gb2YgYGRzbGlkZS1mb3J3YXJkJyBzaG91 bGQKcmV0dXJuIG5pbCBhdCBzb21lIHBvaW50IG9yIGVsc2UgaW5maW5pdGUgbG9vcHMgd2lsbCBy ZXN1bHQuIikKCihjbC1kZWZnZW5lcmljIGRzbGlkZS1iYWNrd2FyZCAob2JqKQogICJBZHZhbmNl IE9CSiBiYWNrd2FyZCBieSBvbmUgc3RlcC4KVGhlIHJldHVybiB2YWx1ZSBoYXMgbWVhbmluZyB0 byB0aGUgZGVjazoKCi0gdDogcHJvZ3Jlc3Mgd2FzIG1hZGUKCi0gYSBwb2ludDogcHJvZ3Jlc3Mg d2FzIG1hZGUgdXAgdG8gYSBzcGVjaWZpYyBidWZmZXIgbG9jYXRpb24KCi0gbmlsOiBubyBwcm9n cmVzcyBjb3VsZCBiZSBtYWRlLgoKRm9yIHNlcXVlbmNlcyB0aGF0IGRvbid0IG1ha2UgcHJvZ3Jl c3MgaW4gYSBidWZmZXIsIHJldHVybmluZyB0CmlzIGZpbmUuICBSZXR1cm5pbmcgYSBwb2ludCBv ZiBwcm9ncmVzcyBpcyBuZWNlc3NhcnkgZm9yIHRoZQpkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9m IGBkc2xpZGUtZ290bycuCgrimqAgRXZlcnkgc2VxdWVuY2Ugb2YgcmVwZWF0ZWQgY2FsbHMgdG8g YGRzbGlkZS1iYWNrd2FyZCcgc2hvdWxkCnJldHVybiBuaWwgYXQgc29tZSBwb2ludCBvciBlbHNl IGluZmluaXRlIGxvb3BzIHdpbGwgcmVzdWx0LiIpCgooY2wtZGVmZ2VuZXJpYyBkc2xpZGUtZ290 byAob2JqIHBvaW50KQogICJBZHZhbmNlIE9CSiBmb3J3YXJkIGJleW9uZCBQT0lOVC4KVGhpcyBt ZXRob2QgY2FuIHVzdWFsbHkgYmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mCmBkc2xpZGUtZm9yd2Fy ZCcgYnkgYWR2YW5jaW5nIHVudGlsIFBPSU5UIGlzIGV4Y2VlZGVkLiAgUmV0dXJuCm5pbCBpZiBQ T0lOVCB3YXMgbm90IGV4Y2VlZGVkLiAgUmV0dXJuIG5vbi1uaWwgaWYgdGhlIHNlbnNlIG9mCnBy b2dyZXNzIGV4Y2VlZHMgUE9JTlQuICBVc3VhbGx5LCBzbGlkZSBhY3Rpb25zIHdpbGwgYmUKcmVz cG9uc2libGUgZm9yIGRldGVybWluaW5nIGlmIHRoZSBQT0lOVCBiZWxvbmdzIHRvIHRoaXMgc2xp ZGUgb3IKb25lIG9mIGl0cyBjaGlsZCBzbGlkZXMsIGFuZCB0aGUgc2xpZGUgd2lsbCBqdXN0IGFz ayB0aGUgY2hpbGQKYWN0aW9uLiIpCgo7OyAqKiBTdGF0ZWZ1bCBTZXF1ZW5jZQooZGVmY2xhc3Mg ZHNsaWRlLXN0YXRlZnVsLXNlcXVlbmNlICgpICgpCiAgIkFuIGludGVyZmFjZSBkZWZpbml0aW9u IGZvciBsaW5lYXIgc2VxdWVuY2VzIG9mIHN0ZXBzLgpUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNz LgoKVGhlIHNlcXVlbmNlIGNhbiBiZSB0cmF2ZXJzZWQgZm9yd2FyZHMgYW5kIGJhY2t3YXJkLiAg YGJlZ2luJyBhbmQKYGZvd2FyZCcgYXJlIGNvbmp1Z2F0ZXMgb2YgYGVuZCcgYW5kICdiYWNrd2Fy ZCcuCgpCZWNhdXNlIHRoZSBzZXF1ZW5jZSBzdGVwcyBtYXkgcmVseSBvbiBzb21lIHNldHVwIGFu ZCBzaG91bGQKcGVyZm9ybSBuZWNlc3NhcnkgdGVhcmRvd24sIHRoZSBzdGF0ZWZ1bCBzZXF1ZW5j ZSBwcm92aWRlcyBgYmVnaW4nCmBlbmQnIGFuZCBgZmluYWwnIG1ldGhvZHMuCgpJdCBjYW4gYWxz byBiZSBpbmRleGVkIGJ5IGhpZ2gtbGV2ZWwgbmF2aWdhdGlvbiBjb21tYW5kcy4gIFRoZQppbXBs ZW1lbnRhdGlvbiBvZiBgZHNsaWRlLWdvdG8nIFNlcXVlbmNlcyBjYW4gcnVuIGFzCnN1Yi1zZXF1 ZW5jZXMsIHdoZXJlIG9uZSBzZXF1ZW5jZSBjYWxscyBpbnRvIGFub3RoZXIuICDwn5qnIFRoaXMK Y2FwYWJpbGl0eSBpcyBsYXJnZWx5IHVuaW1wbGVtZW50ZWQsIGJ1dCBjb21wYXRpYmxlIHdpdGgg ZXhpc3RpbmcKd29yay4KCkNsYXNzZXMgdGhhdCB3aXNoIHRvIGltcGxlbWVudCB0aGUgc3RhdGVm dWwgc2VxdWVuY2UgaW50ZXJmYWNlCmp1c3QgbmVlZCB0byBzdXBwb3J0IGEgZmV3IG1ldGhvZHMg YW5kIHRoZW4gcmVseSBvbiB0aGUgZ2VuZXJpYwppbXBsZW1lbnRhdGlvbnMgZm9yIHRoZSByZXN0 LCB1bmxlc3MgdGhleSB3YW50IHRvIG9wdGltaXplIG9yCnNpbXBsaWZ5IHRoZWlyIGltcGxlbWVu dGF0aW9uLiIKICA6YWJzdHJhY3QgdCkKCihjbC1kZWZtZXRob2QgZHNsaWRlLWJlZ2luICgoXyBk c2xpZGUtc3RhdGVmdWwtc2VxdWVuY2UpKSkKCihjbC1kZWZtZXRob2QgZHNsaWRlLWVuZCAoKG9i aiBkc2xpZGUtc3RhdGVmdWwtc2VxdWVuY2UpKQogIChsZXQgKChwcm9ncmVzcyB0KSkKICAgICh3 aGlsZSBwcm9ncmVzcwogICAgICAoc2V0cSBwcm9ncmVzcyAoZHNsaWRlLWZvcndhcmQgb2JqKSkp KSkKCihjbC1kZWZtZXRob2QgZHNsaWRlLWZvcndhcmQgKChfIGRzbGlkZS1zdGF0ZWZ1bC1zZXF1 ZW5jZSkpKQoKKGNsLWRlZm1ldGhvZCBkc2xpZGUtYmFja3dhcmQgKChfIGRzbGlkZS1zdGF0ZWZ1 bC1zZXF1ZW5jZSkpKQoKKGNsLWRlZm1ldGhvZCBkc2xpZGUtZmluYWwgKChfIGRzbGlkZS1zdGF0 ZWZ1bC1zZXF1ZW5jZSkpKQoKKGNsLWRlZm1ldGhvZCBkc2xpZGUtZ290byAoKG9iaiBkc2xpZGUt c3RhdGVmdWwtc2VxdWVuY2UpIHBvaW50KQogICh1bmxlc3MgKGVxICdza2lwIChkc2xpZGUtYmVn aW4gb2JqKSkKICAgIChsZXQgKGV4Y2VlZGVkIChhZHZhbmNlZCB0KSkKICAgICAgKHdoaWxlIChh bmQgYWR2YW5jZWQgKG5vdCBleGNlZWRlZCkpCiAgICAgICAgKGxldCAoKHByb2dyZXNzIChkc2xp ZGUtZm9yd2FyZCBvYmopKSkKICAgICAgICAgIChpZiAoYW5kIChudW1iZXJwIHByb2dyZXNzKQog ICAgICAgICAgICAgICAgICAgKD49IHByb2dyZXNzIHBvaW50KSkKICAgICAgICAgICAgICAoc2V0 cSBleGNlZWRlZCB0KQogICAgICAgICAgICAoc2V0cSBhZHZhbmNlZCBwcm9ncmVzcykpKSkpKSkK Cjs7ICoqIFBhcmVudAo7OyBUT0RPIHRoaXMgY2xhc3MgaXMga2luZCBvZiBoYWxmLWJha2VkLiAg SXQgd2FzIGludGVuZGVkIHRvIHdyYXAgdXAgdGhlCjs7IGZpbHRlcmluZyBmdW5jdGlvbmFsaXR5 IGFuZCBuZWVkaW5nIHRvIGZpbmQgbmV4dCBhbmQgcHJldmlvdXMgY2hpbGRyZW4uCjs7IE5lZWRz IGFjdHVhbCB1c2FnZSB0byBiZWNvbWUgbWF0dXJlLgooZGVmY2xhc3MgZHNsaWRlLXBhcmVudCAo KQogICgoZmlsdGVyCiAgICA6aW5pdGZvcm0gbmlsCiAgICA6aW5pdGFyZyA6ZmlsdGVyCiAgICA6 ZG9jdW1lbnRhdGlvbiAiRnVuY3Rpb24gdG8gZmlsdGVyIGNoaWxkIGhlYWRpbmdzLiIpKQogICJD bGFzcyBmb3Igb2JqZWN0cyB0aGF0IGNvbnRhaW4gY2hpbGRyZW4uIikKCjs7IFRPRE8gaGlnaGx5 IGluZGlyZWN0IGFuZCBkZWxlZ2F0ZXMgZG93biB0byBhIHJlYWxseSBjcmFwcHkgaW1wbGVtZW50 YXRpb24KOzsgdGhhdCBub2JvZHkgZWxzZSBzaG91bGQgZXZlciB3YW50IHRvIHVzZQooY2wtZGVm bWV0aG9kIGRzbGlkZS1uZXh0LWNoaWxkICgob2JqIGRzbGlkZS1wYXJlbnQpIGNoaWxkKQogICJH ZXQgdGhlIG5leHQgdW5maWx0ZXJlZCBDSElMRCBvZiBPQkouIgogIChkc2xpZGUtbmV4dC1zaWJs aW5nCiAgIGNoaWxkIChvcmVmIG9iaiBmaWx0ZXIpKSkKCihjbC1kZWZtZXRob2QgZHNsaWRlLXBy ZXZpb3VzLWNoaWxkICgob2JqIGRzbGlkZS1wYXJlbnQpIGNoaWxkKQogICJHZXQgdGhlIHByZXZp b3VzIHVuZmlsdGVyZWQgQ0hJTEQgb2YgT0JKLiIKICAoZHNsaWRlLXByZXZpb3VzLXNpYmxpbmcK ICAgY2hpbGQgKG9yZWYgb2JqIGZpbHRlcikpKQoKOzsgKiogRGVjawo7OyBUT0RPIGV4dHJhY3Qg bm9uLW9yZy1zcGVjaWZpYyBiZWhhdmlvciB0byBzZXF1ZW5jZS1yb290IGNsYXNzLgooZGVmY2xh c3MgZHNsaWRlLWRlY2sgKGRzbGlkZS1wYXJlbnQpCiAgKChzbGlkZQogICAgOmluaXRmb3JtIG5p bAogICAgOmRvY3VtZW50YXRpb24gIlRoZSBhY3RpdmUgc2VxdWVuY2Ugb3Igc2xpZGUuClRoaXMg aXMgcHJvYmFibHkgYSBgZHNsaWRlLXNsaWRlJyBvYmplY3QsIGJ1dCBhbnl0aGluZwp0aGF0IGlt cGxlbWVudHMgYGRzbGlkZS1zdGF0ZWZ1bC1zZXF1ZW5jZScgd2lsbCBwcm9iYWJseQp3b3JrIGFz IHdlbGwuIikKICAgKGJhc2UtYnVmZmVyCiAgICA6aW5pdGZvcm0gbmlsIDppbml0YXJnIDpiYXNl LWJ1ZmZlcgogICAgOmRvY3VtZW50YXRpb24gIlNvdXJjZSBvZiB0aGUgc2xpZGUgZGVjay4iKQog ICAoc2xpZGUtYnVmZmVyCiAgICA6aW5pdGZvcm0gbmlsIDppbml0YXJnIDpzbGlkZS1idWZmZXIK ICAgIDpkb2N1bWVudGF0aW9uICJJbmRpcmVjdCBidWZmZXIgdXNlZCB0byBkaXNwbGF5IHNsaWRl cyBpbi4iKQogICAod2luZG93LWNvbmZpZwogICAgOmluaXRmb3JtIG5pbCA6aW5pdGFyZyA6d2lu ZG93LWNvbmZpZwogICAgOmRvY3VtZW50YXRpb24iV2luZG93IGNvbmZpZ3VyYXRpb24gZm9yIHJl c3RvcmluZyBhZnRlciBzdG9wLiIpCiAgIDs7IFRPRE8gdGhpcyBpbXBsZW1lbnRhdGlvbiBkb2Vz bid0IHdvcmsgaWYgbW9yZSBpbmRpcmVjdCBidWZmZXJzIGFyZSB1c2VkLgogICAoc2xpZGUtYnVm ZmVyLXN0YXRlCiAgICA6aW5pdGZvcm0gbmlsCiAgICA6ZG9jdW1lbnRhdGlvbiAiSW5pdGlhdGVk IGJ5IGRpc3BsYXkgYWN0aW9ucyB0byBgY29udGVudHMnIG9yIGBzbGlkZXMnLiIpCiAgIChzdGVw LWNhbGxiYWNrcwogICAgOmluaXRmb3JtIG5pbAogICAgOmRvY3VtZW50YXRpb24gIlN0ZXBzIHRv IHJ1biBiZWZvcmUgbmV4dCBzdGVwcy4KRk9STSBpcyBqdXN0IGEgbGlzdCBhcyBzdGVwcyB3aWxs IGFsd2F5cyBiZSBydW4gYmVmb3JlIGFueQpzZXF1ZW5jZSBlbmRzIG9yIG1ha2VzIHByb2dyZXNz Li4iKSkKCiAgIlJvb3Qgc2VxdWVuY2UgdGhhdCBkaXNwYXRjaGVzIGNvbW1hbmRzIHRvIHNsaWRl cy4KSG9sZHMgc3RhdGVzIHN1Y2ggYXMgdGhvc2UgbmVlZGVkIHdoZW4gc3dpdGNoaW5nIGJldHdl ZW4gc2xpZGVzCmFuZCBjb250ZW50cy4gIElzIHJlc3BvbnNpYmxlIGZvciBwaWNraW5nIHJvb3Qg aGVhZGluZ3MgYW5kIGh5ZHJhdGluZyB0aGVtIGludG8Kc2xpZGVzIGFuZCB0aGVpciBhY3Rpb25z LgoKQ2xhc3MgY2FuIGJlIG92ZXJyaWRkZW4gdG8gYWZmZWN0IHJvb3QgYmVoYXZpb3JzLiAgU2Vl CmBkc2xpZGUtZGVmYXVsdC1kZWNrLWNsYXNzJyIpCgooY2wtZGVmbWV0aG9kIGRzbGlkZS1iZWdp biAoKG9iaiBkc2xpZGUtZGVjaykpCiAgIkluaXRpYWxpemUgdGhlIGZpcnN0IHNsaWRlIG9mIE9C Si4iCiAgKHVubGVzcyAob3JlZiBvYmogc2xpZGUpCiAgICA7OyBDYWxscyBpbXBsaWVkIGZyb20g b3RoZXIgY29tbWFuZHMgc2hvdWxkIGhhdmUgc3RhcnRlZCB0aGUgbGlmZWN5Y2xlIGFscmVhZHkK ICAgIChlcnJvciAiTm8gc2xpZGUgc2VsZWN0ZWQiKSkKCiAgOzsgVE9ETyBUaGlzIGxpbmUgaXMg Y3JpdGljYWwgdG8gc3RhcnRpbmcgdXAgdGhlIHN0YXRlIG1hY2hpbmUuICBTbGlkZXMKICA7OyBh cmUgc3RpbGwgaW5mZXJyaW5nIHRoZWlyIG5lZWQgdG8gbmFycm93LgogIChuYXJyb3ctdG8tcmVn aW9uIChwb2ludCkgKHBvaW50KSkgICAgOyBzaWduYWwgdG8gc2xpZGUgdG8gZHJhdyBpdHNlbGYK ICAoZHNsaWRlLWJlZ2luIChvcmVmIG9iaiBzbGlkZSkpKQoKKGNsLWRlZm1ldGhvZCBkc2xpZGUt ZW5kICgoXyBkc2xpZGUtZGVjaykpCiAgKGVycm9yICJEZWNrIGhhcyBubyB2YWxpZCBjb25jZXB0 IG9mIHN0YXJ0aW5nIGF0IHRoZSBlbmQiKSkKCihjbC1kZWZtZXRob2QgZHNsaWRlLWZpbmFsICgo b2JqIGRzbGlkZS1kZWNrKSkKICAod2hlbi1sZXQgKChzbGlkZSAob3JlZiBvYmogc2xpZGUpKSkK ICAgIChkc2xpZGUtZmluYWwgc2xpZGUpKSkKCjs7IERlY2sgZm9yd2FyZCAmIGJhY2t3YXJkIG1l dGhvZHMgYXJlIHRoZSBlbnRyeSBwb2ludCBmb3IgdXNlciBmb3J3YXJkIGFuZAo7OyBiYWNrd2Fy ZCBjb21tYW5kcy4gIFRoZXkgZGVsZWdhdGUgb3V0IHRvIHNsaWRlcywgd2hpY2ggbWF5IHRlbGVz Y29wZSBpbnRvCjs7IHRoZWlyIGNoaWxkcmVuIGluIG9yZGVyIHRvIG1ha2UgcHJvZ3Jlc3MuCjs7 Cjs7IEl0IG1ha2UgcmVxdWlyZSBzZXZlcmFsIHRyaXBzIHRocm91Z2ggdGhlIGJlaGF2aW9yIHRv IGNvbnN1bWUgY2FsbGJhY2tzIHRoYXQKOzsgYXJlIHJ1biBmb3IgZWZmZWN0IG9yIGFyZSBuby1v cCwgdGhpbmdzIHRoYXQgZG9uJ3QgY291bnQgYXMgc3RlcHMgb3IgYXJlCjs7IHNsaWRlcyB0aGF0 IGRlY2lkZSBhdCBydW50aW1lIHRvIGJlIHNraXBwZWQuCjs7Cjs7IEluIHNob3J0LCBsb29wIHRo cm91Z2ggd2hhdGV2ZXIgbmV4dCBzdGVwcyBhbmQgY2FsbGJhY2tzIHdlcmUgcHVzaGVkIG9udG8g dGhlCjs7IHN0YWNrLiAgV2hlbiBvbmUgb2YgdGhlbSBtYWtlcyBwcm9ncmVzcywgd2UncmUgZG9u ZS4KCihjbC1kZWZtZXRob2QgZHNsaWRlLWZvcndhcmQgKChvYmogZHNsaWRlLWRlY2spKQogICh1 bmxlc3MgKG9yZWYgb2JqIHNsaWRlKQogICAgOzsgQ2FsbHMgaW1wbGllZCBmcm9tIG90aGVyIGNv bW1hbmRzIHNob3VsZCBoYXZlIHN0YXJ0ZWQgdGhlIGxpZmVjeWNsZQogICAgOzsgYWxyZWFkeQog ICAgKGVycm9yICJObyBzbGlkZSB3YXMgc2V0IikpCgogIChsZXQgKChpbmhpYml0LXJlZGlzcGxh eSB0KQogICAgICAgIChvbGQtcG9pbnQtbWluIChwb2ludC1taW4pKQogICAgICAgIHByb2dyZXNz CiAgICAgICAgcmVhY2hlZC1lbmQpCiAgICAod2hpbGUgZHNsaWRlLS1zdGVwLW92ZXJsYXlzCiAg ICAgIChkZWxldGUtb3ZlcmxheSAocG9wIGRzbGlkZS0tc3RlcC1vdmVybGF5cykpKQoKICAgIDs7 IEJ1cm4gdXAgYSBzdGVwIGNhbGxiYWNrIHVudGlsIG9uZSByZXR1cm5zIG5vbi1uaWwKICAgICh3 aGVuLWxldCAoKHN0ZXBzIChvcmVmIG9iaiBzdGVwLWNhbGxiYWNrcykpKQogICAgICAod2hpbGUg KGFuZCAobm90IHByb2dyZXNzKQogICAgICAgICAgICAgICAgICBzdGVwcykKICAgICAgICAoc2V0 cSBwcm9ncmVzcyAoZnVuY2FsbCAocG9wIHN0ZXBzKSAnZm9yd2FyZCkpKQogICAgICAob3NldCBv Ymogc3RlcC1jYWxsYmFja3Mgc3RlcHMpKQoKICAgICh3aGlsZSAobm90IChvciBwcm9ncmVzcyBy ZWFjaGVkLWVuZCkpCiAgICAgIChsZXQqICgoY3VycmVudC1zbGlkZSAob3JlZiBvYmogc2xpZGUp KQogICAgICAgICAgICAgKHJlc3VsdCAoZHNsaWRlLWZvcndhcmQgY3VycmVudC1zbGlkZSkpCiAg ICAgICAgICAgICBuZXh0LXNsaWRlKQoKICAgICAgICAoaWYgcmVzdWx0CiAgICAgICAgICAgIChz ZXRxIHByb2dyZXNzIHJlc3VsdCkKICAgICAgICAgIDs7IENoZWNrIGlmIHRoZXJlIGlzIGEgbmV4 dCBzaWJsaW5nLgogICAgICAgICAgKGlmLWxldCAoKG5leHQtY2hpbGQgKGRzbGlkZS1uZXh0LWNo aWxkIG9iaiBjdXJyZW50LXNsaWRlKSkpCiAgICAgICAgICAgICAgKHNldHEgbmV4dC1zbGlkZSBu ZXh0LWNoaWxkKQogICAgICAgICAgICAoc2V0cSByZWFjaGVkLWVuZCB0KSkpCgogICAgICAgICh1 bmxlc3MgbmV4dC1zbGlkZQogICAgICAgICAgKGRzbGlkZS0tZGVidWcgY3VycmVudC1zbGlkZSAo Zm9ybWF0ICJmb3J3YXJkOiAlcyIgcHJvZ3Jlc3MpKSkKCiAgICAgICAgKHdoZW4gbmV4dC1zbGlk ZQogICAgICAgICAgKGRzbGlkZS0tZGVidWcgbmV4dC1zbGlkZSAic3dpdGNoaW5nIHRvIHNpYmxp bmciKQogICAgICAgICAgKG9zZXQgb2JqIHNsaWRlIG5leHQtc2xpZGUpCiAgICAgICAgICAoZHNs aWRlLWZpbmFsIGN1cnJlbnQtc2xpZGUpCgogICAgICAgICAgKGRzbGlkZS1iZWdpbiBuZXh0LXNs aWRlKQogICAgICAgICAgOzsgQmVnaW4gY291bnRzIGFzIGEgc3RlcAogICAgICAgICAgKHNldHEg cHJvZ3Jlc3MgbmV4dC1zbGlkZSkpKSkKCiAgICA7OyBBIGxvdCBvZiBwcm9ncmVzcyBtYXkgaGF2 ZSBoYXBwZW5lZCwgYnV0IHRoZXJlIHdpbGwgYmUgb25seSBvbmUgZmVlZGJhY2sKICAgIDs7IG1l c3NhZ2UuCiAgICAod2hlbiBwcm9ncmVzcwogICAgICAoZHNsaWRlLS1mZWVkYmFjayA6Zm9yd2Fy ZCkKICAgICAgKGRzbGlkZS0tZm9sbG93IHByb2dyZXNzIChub3QgKD0gb2xkLXBvaW50LW1pbiAo cG9pbnQtbWluKSkpKSkKCiAgICAod2hlbiByZWFjaGVkLWVuZAogICAgICAoZHNsaWRlLS1mZWVk YmFjayA6YWZ0ZXItbGFzdC1zbGlkZSkKICAgICAgKHJ1bi1ob29rcyAnZHNsaWRlLWFmdGVyLWxh c3Qtc2xpZGUtaG9vaykpKSkKCihjbC1kZWZtZXRob2QgZHNsaWRlLWJhY2t3YXJkICgob2JqIGRz bGlkZS1kZWNrKSkKICAodW5sZXNzIChvcmVmIG9iaiBzbGlkZSkKICAgIDs7IENhbGxzIGltcGxp ZWQgZnJvbSBvdGhlciBjb21tYW5kcyBzaG91bGQgaGF2ZSBzdGFydGVkIHRoZSBsaWZlY3ljbGUK ICAgIDs7IGFscmVhZHkKICAgIChlcnJvciAiTm8gc2xpZGUgd2FzIHNldCIpKQoKICA7OyBHb2lu ZyBiYWNrd2FyZCBpcyBhbG1vc3QgdGhlIHNhbWUgYXMgZ29pbmcgZm9yd2FyZC4gIFRoZSBiaWcg ZGlmZmVyZW5jZSBpcwogIDs7IHRoYXQgd2hlbiBhIHNsaWRlIGlzIGluc3RhbnRpYXRlZCwgaXQg bmVlZHMgdG8gYmUgc2VudCB0byBpdHMgZW5kLiAgVXN1YWxseQogIDs7IHRoZSBkZWZhdWx0IGlt cGxlbWVudGF0aW9uLCB3aGljaCBjYWxscyBmb3J3YXJkIHVudGlsIHByb2dyZXNzIGlzCiAgOzsg ZXhoYXVzdGVkLCBpcyBmaW5lLiAgQ2VydGFpbiBhY3Rpb25zIHdpdGggc2lkZS1lZmZlY3RzIG1h eSBub3QgbGlrZSB0aGlzLAogIDs7IGFuZCB0aGV5IHNob3VsZCBpbXBsZW1lbnQgYW4gYWN0dWFs IGBkc2xpZGUtZW5kJyBtZXRob2QgYXMgd2VsbCBhcwogIDs7IGlkZW1wb3RlbnQgYGRzbGlkZS1i ZWdpbicgYW5kIGBkc2xpZGUtZmluYWwnIGlmIGFueSBzdXBwb3J0IGZvciBnb2luZwogIDs7IGJh Y2t3YXJkcyBpcyBkZXNpcmFibGUuCgogIChsZXQgKChpbmhpYml0LXJlZGlzcGxheSB0KQogICAg ICAgIChvbGQtcG9pbnQtbWluIChwb2ludC1taW4pKQogICAgICAgIHByb2dyZXNzCiAgICAgICAg cmVhY2hlZC1iZWdpbm5pbmcpCiAgICAod2hpbGUgZHNsaWRlLS1zdGVwLW92ZXJsYXlzCiAgICAg IChkZWxldGUtb3ZlcmxheSAocG9wIGRzbGlkZS0tc3RlcC1vdmVybGF5cykpKQoKICAgIDs7IEJ1 cm4gdXAgYSBzdGVwIGNhbGxiYWNrIHVudGlsIG9uZSByZXR1cm5zIG5vbi1uaWwKICAgICh3aGVu LWxldCAoKHN0ZXBzIChhbmQgKHNsb3QtYm91bmRwIG9iaiAnc3RlcC1jYWxsYmFja3MpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIChvcmVmIG9iaiBzdGVwLWNhbGxiYWNrcykpKSkKICAgICAg KHdoaWxlIChhbmQgKG5vdCBwcm9ncmVzcykKICAgICAgICAgICAgICAgICAgc3RlcHMpCiAgICAg ICAgKHNldHEgcHJvZ3Jlc3MgKGZ1bmNhbGwgKHBvcCBzdGVwcykgJ2JhY2t3YXJkKSkpCiAgICAg IChvc2V0IG9iaiBzdGVwLWNhbGxiYWNrcyBzdGVwcykpCgogICAgKHdoaWxlIChub3QgKG9yIHBy b2dyZXNzIHJlYWNoZWQtYmVnaW5uaW5nKSkKICAgICAgKGxldCogKChjdXJyZW50LXNsaWRlIChv cmVmIG9iaiBzbGlkZSkpCiAgICAgICAgICAgICAocmVzdWx0IChkc2xpZGUtYmFja3dhcmQgY3Vy cmVudC1zbGlkZSkpCiAgICAgICAgICAgICBwcmV2aW91cy1zbGlkZSkKCiAgICAgICAgKGlmIHJl c3VsdAogICAgICAgICAgICAoc2V0cSBwcm9ncmVzcyByZXN1bHQpCiAgICAgICAgICA7OyBDaGVj ayBpZiB0aGVyZSBpcyBhIHByZXZpb3VzIHNpYmxpbmcuCiAgICAgICAgICAoaWYtbGV0ICgocHJl dmlvdXMtY2hpbGQgKGRzbGlkZS1wcmV2aW91cy1jaGlsZAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBvYmogY3VycmVudC1zbGlkZSkpKQogICAgICAgICAgICAgIChzZXRxIHBy ZXZpb3VzLXNsaWRlIHByZXZpb3VzLWNoaWxkKQogICAgICAgICAgICAoc2V0cSByZWFjaGVkLWJl Z2lubmluZyB0KSkpCgogICAgICAgICh1bmxlc3MgcHJldmlvdXMtc2xpZGUKICAgICAgICAgIChk c2xpZGUtLWRlYnVnIGN1cnJlbnQtc2xpZGUgKGZvcm1hdCAiZm9yd2FyZDogJXMiIHByb2dyZXNz KSkpCgogICAgICAgICh3aGVuIHByZXZpb3VzLXNsaWRlCiAgICAgICAgICAoZHNsaWRlLS1kZWJ1 ZyBwcmV2aW91cy1zbGlkZSAic3dpdGNoaW5nIHRvIHNpYmxpbmciKQogICAgICAgICAgKG9zZXQg b2JqIHNsaWRlIHByZXZpb3VzLXNsaWRlKQogICAgICAgICAgKGRzbGlkZS1maW5hbCBjdXJyZW50 LXNsaWRlKQoKICAgICAgICAgIDs7IGVuZCBjb3VudHMgYXMgYSBzdGVwLgogICAgICAgICAgKGRz bGlkZS1lbmQgcHJldmlvdXMtc2xpZGUpCiAgICAgICAgICAoc2V0cSBwcm9ncmVzcyBwcmV2aW91 cy1zbGlkZSkpKSkKCiAgICA7OyBBIGxvdCBvZiBwcm9ncmVzcyBtYXkgaGF2ZSBoYXBwZW5lZCwg YnV0IHRoZXJlIHdpbGwgYmUgb25seSBvbmUgZmVlZGJhY2sKICAgIDs7IG1lc3NhZ2UuCiAgICAo Y29uZCAocHJvZ3Jlc3MKICAgICAgICAgICAoZHNsaWRlLS1mZWVkYmFjayA6YmFja3dhcmQpCiAg ICAgICAgICAgKGRzbGlkZS0tZm9sbG93IHByb2dyZXNzIChub3QgKD0gb2xkLXBvaW50LW1pbiAo cG9pbnQtbWluKSkpKSkKICAgICAgICAgIChyZWFjaGVkLWJlZ2lubmluZwogICAgICAgICAgICh1 c2VyLWVycm9yICJObyBtb3JlIHByZXZpb3VzIHNsaWRlcyEiKSkpKSkKCihjbC1kZWZtZXRob2Qg ZHNsaWRlLS1maWx0ZXItZnVuY3Rpb24gKChvYmogZHNsaWRlLWRlY2spKQogIChvcmVmIG9iaiBm aWx0ZXIpKQoKKGNsLWRlZm1ldGhvZCBkc2xpZGUtLWNob29zZS1zbGlkZSAoKG9iaiBkc2xpZGUt ZGVjaykgaG93KQogICJTZXQgdGhlIGN1cnJlbnQgc2xpZGUgb2YgT0JKLCBhY2NvcmRpbmcgdG8g SE9XLiIKICAobGV0ICgoZmlsdGVyIChvcmVmIG9iaiBmaWx0ZXIpKSkKICAgIChwY2FzZSBob3cK ICAgICAgKCdmaXJzdCAob3NldCBvYmogc2xpZGUgKGRzbGlkZS0tbWFrZS1zbGlkZQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGRzbGlkZS0tZG9jdW1lbnQtZmlyc3QtaGVhZGluZyBm aWx0ZXIpKSkpCiAgICAgICgnY29udGVudHMgKG9zZXQgb2JqIHNsaWRlIChkc2xpZGUtLW1ha2Ut c2xpZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkc2xpZGUtLXJvb3QtaGVh ZGluZy1hdC1wb2ludAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciAo cG9pbnQpKSkpKQogICAgICAoJ3BvaW50CiAgICAgICAobGV0ICgoYmFzZS1wb2ludCAod2l0aC1j dXJyZW50LWJ1ZmZlciAob3JlZiBvYmogYmFzZS1idWZmZXIpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIChwb2ludCkpKSkKICAgICAgICAgOzsgVE9ETyBpbXBsZW1lbnQgbG9va2luZyBpbnNp ZGUgdGhlIHNsaWRlcyB1c2luZyBgZ290bycgYW5kIHJlY292ZXIKICAgICAgICAgOzsgdGhlIGNo aWxkIHdpdGggYSBwb2ludCBhcmd1bWVudC4KICAgICAgICAgKG9zZXQgb2JqIHNsaWRlCiAgICAg ICAgICAgICAgIChkc2xpZGUtLW1ha2Utc2xpZGUKICAgICAgICAgICAgICAgIChkc2xpZGUtLXJv b3QtaGVhZGluZy1hdC1wb2ludCBmaWx0ZXIgYmFzZS1wb2ludCkpKSkpKSkpCgooY2wtZGVmbWV0 aG9kIGRzbGlkZS1kZWNrLWxpdmUtcCAoKG9iaiBkc2xpZGUtZGVjaykpCiAgIkNoZWNrIGlmIGFs bCBvZiBPQkoncyBidWZmZXJzIGFyZSBhbGl2ZSBvciBjYW4gYmUgcmVjb3ZlcmVkLiIKICA7OyBU T0RPIGluIHNvbWUgY2lyY3Vtc3RhbmNlcywgYW4gaW5kaXJlY3QgYnVmZmVyIG1pZ2h0IGV4aXN0 LCBidXQgd2Ugc2hvdWxkCiAgOzsgcHJvYmFibHkga2lsbCBpdCBpZiBpdCB3YXMgY3JlYXRlZCBv dXRzaWRlIHRoZSBjdXJyZW50IGluc3RhbmNlJ3MgbGlmZWN5Y2xlCiAgKGFuZCAoYnVmZmVyLWxp dmUtcCAob3JlZiBvYmogYmFzZS1idWZmZXIpKQogICAgICAgKGJ1ZmZlci1saXZlLXAgKG9yZWYg b2JqIHNsaWRlLWJ1ZmZlcikpCiAgICAgICAoZXEgKG9yZWYgb2JqIGJhc2UtYnVmZmVyKSAoYnVm ZmVyLWJhc2UtYnVmZmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yZWYg b2JqIHNsaWRlLWJ1ZmZlcikpKSkpCgooZGVmdW4gZHNsaWRlLXB1c2gtd2luZG93LWNvbmZpZyAo Jm9wdGlvbmFsIHN0ZXApCiAgIlNhdmUgdGhlIHdpbmRvdyBjb25maWd1cmF0aW9uIGFuZCBuYXJy b3dpbmcgZm9yIHJlc3RvcmF0aW9uLgoKT3B0aW9uYWwgU1RFUCBhcmd1bWVudCB3aWxsIGRlY2lk ZSBpZiB0aGUgY2FsbGJhY2sgY291bnRzIGFzIGEgc3RlcCBvciB3aWxsCnJldHVybiBuaWwgc28g dGhhdCBpdCBpcyBvbmx5IHJ1biBmb3IgZWZmZWN0cy4iCiAgKGxldCAoKHdpbmRvdy1jb25maWcg KGN1cnJlbnQtd2luZG93LWNvbmZpZ3VyYXRpb24pKSkKICAgIChkc2xpZGUtcHVzaC1zdGVwCiAg ICAgKGxhbWJkYSAoXykgKHByb2cxIHN0ZXAgKHNldC13aW5kb3ctY29uZmlndXJhdGlvbiB3aW5k b3ctY29uZmlnKSkpKSkpCgooZGVmdW4gZHNsaWRlLXB1c2gtc3RlcCAoZnVuKQogICJSdW4gRlVO IGFzIG5leHQgc3RlcC4KRlVOIGlzIGEgZnVuY3Rpb24gb2YgYSBzaW5nbGUgb3B0aW9uYWwgYXJn dW1lbnQsIGBmb3J3YXJkJyBvcgpgYmFja3dhcmQnLiAgbmlsIGluZGljYXRlcyB0aGF0IHRoZSBj YWxsYmFjayBpcyBiZWluZyBjbGVhbmVkIHVwLAp1c3VhbGx5IHRvIHF1aXQgdGhlIHByZXNlbnRh dGlvbiBvciBjaGFuZ2UgdG8gY29udGVudHMuCgpUaGUgcmV0dXJuIHZhbHVlIGlzIGludGVycHJl dGVkIGFzIHByb2dyZXNzLCBzbyByZXR1cm4gbm9uLW5pbCBpZgp5b3Ugd2FudCBGVU4gdG8gY291 bnQgYXMgYSBzdGVwIG9yIG5pbCBpZiBGVU4gaXMgb25seSBydW4gZm9yCmVmZmVjdHMuCgpJZiB5 b3UgbmVlZCBtdWx0aXBsZSBzdGVwcywgY29uc2lkZXIgYWRkaW5nIHN0ZXBzIGluc2lkZSBvZiBG VU4KZm9yIHJlY3Vyc2l2ZSBkeW5hbWljIHN0ZXBzIHJhdGhlciB0aGFuIGFkZGluZyBhIGxvdCBv ZiBzdGVwcyBhdApvbmNlLCB3aGljaCByZXF1aXJlcyB0aGUgZnVuY3Rpb25zIHRvIGJlIHJlbW92 ZWQgb3IgcmV0dXJuIG5pbC4iCiAgKHVubGVzcyAoZHNsaWRlLWxpdmUtcCkKICAgIChlcnJvciAi Tm8gYWN0aXZlIGRlY2siKSkKICAocHVzaCBmdW4gKG9yZWYgZHNsaWRlLS1kZWNrIHN0ZXAtY2Fs bGJhY2tzKSkpCgo7OyAqIFNsaWRlCihkZWZjbGFzcyBkc2xpZGUtc2xpZGUgKGRzbGlkZS1wYXJl bnQgZHNsaWRlLXN0YXRlZnVsLXNlcXVlbmNlKQogICgoc2xpZGUtYWN0aW9uCiAgICA6aW5pdGZv cm0gbmlsIDppbml0YXJnIDpzbGlkZS1hY3Rpb24KICAgIDpkb2N1bWVudGF0aW9uICJPdXRlcm1v c3QgYWN0aW9uIHRoYXQgc2V0cyB1cCBmb3Igc2VjdGlvbiBhY3Rpb25zLgpUeXBpY2FsbHkgbmFy cm93cywgc2hvd3MgdGhlIGhlYWRlciwgY3JlYXRlcyBzbGlkZXMgZnJvbSBjaGlsZApoZWFkaW5n cyBldGMuICBCZWNhdXNlIG5hcnJvd2luZyBhbmQgY2hpbGRyZW4gYXJlIG5lY2Vzc2FyaWx5CmNv dXBsZWQsIHRoZSBzbGlkZSBhY3Rpb24gY29udHJvbHMgaG93IGNoaWxkcmVuIHNsaWRlcyBhcmUK Y3JlYXRlZC4gIFNlZSBgZHNsaWRlLWRlZmF1bHQtc2xpZGUtYWN0aW9uJy4iKQogICAoc2VjdGlv bi1hY3Rpb25zCiAgICA6aW5pdGZvcm0gbmlsIDppbml0YXJnIDpzZWN0aW9uLWFjdGlvbnMKICAg IDpkb2N1bWVudGF0aW9uICJUeXBpY2FsIGFjdGlvbnMgdGhhdCB3b3JrIG9uIHRoZSBzZWN0aW9u LgpMaXZlIHdpdGhpbiBzbGlkZSBhY3Rpb24gbGlmZWN5Y2xlLiAgU2VlCmBkc2xpZGUtZGVmYXVs dC1hY3Rpb25zJy4iKQogICAoYmVnaW4KICAgIDppbml0Zm9ybSBuaWwgOmluaXRhcmcgOmJlZ2lu CiAgICA6ZG9jdW1lbnRhdGlvbiAiTWFya2VyIGZvciByZXRyaWV2aW5nIHRoaXMgaGVhZGluZydz IG9yZyBlbGVtZW50LiIpKQogICJTdG9yZXMgYW5kIGNvb3JkaW5hdGVzIHRoZSBhY3Rpb25zIG9m IGEgaGVhZGluZy4KVGhlIGxpZmUtY3ljbGVzIG9mIGFjdGlvbnMgdGhhdCBydW4gZm9yIGEgaGVh ZGluZyBvdmVybGFwLCBhbmQKdGhlIHNsaWRlIG9iamVjdCBjb29yZGluYXRlcyB0aGlzIG92ZXJs YXAuICBJdCBkZWxlZ2F0ZXMgdGhlCmBzdGF0ZWZ1bC1zZXF1ZW5jZScgY2FsbHMgaW50byB0aGUg YWN0aW9ucyBpbiB0aGUgYXBwcm9wcmlhdGUKb3JkZXIuIikKCihjbC1kZWZtZXRob2QgZHNsaWRl LWJlZ2luICgob2JqIGRzbGlkZS1zbGlkZSkpCiAgKGxldCogKChzbGlkZS1hY3Rpb24gKG9yZWYg b2JqIHNsaWRlLWFjdGlvbikpCiAgICAgICAgIChwcm9ncmVzcyAod2hlbiBzbGlkZS1hY3Rpb24g KGRzbGlkZS1iZWdpbiBzbGlkZS1hY3Rpb24pKSkpCiAgICAobWFwYyAjJ2RzbGlkZS1iZWdpbiAo b3JlZiBvYmogc2VjdGlvbi1hY3Rpb25zKSkKICAgIChpZiBzbGlkZS1hY3Rpb24gcHJvZ3Jlc3MK ICAgICAgKGRzbGlkZS1mb3J3YXJkIG9iaikpKSkKCihjbC1kZWZtZXRob2QgZHNsaWRlLWVuZCAo KG9iaiBkc2xpZGUtc2xpZGUpKQogIChsZXQqICgoc2xpZGUtYWN0aW9uIChvcmVmIG9iaiBzbGlk ZS1hY3Rpb24pKQogICAgICAgICAocHJvZ3Jlc3MgKGRzbGlkZS1lbmQgc2xpZGUtYWN0aW9uKSkp CiAgICA7OyBGYWlybHkgY2VydGFpbiB0aGUgb3JkZXJpbmcgb2Ygc2xpZGUgYW5kIHNlY3Rpb24g YWN0aW9ucyB3b24ndCBub3JtYWxseQogICAgOzsgbWF0dGVyIGZvciBgZHNsaWRlLWVuZCcsIGJ1 dCB0aGlzIG9yZGVyaW5nIG1hdGNoZXMgdGhlIHNpdHVhdGlvbiB0aGF0IHdvdWxkCiAgICA7OyBv Y2N1ciBpZiB0aGUgdXNlciBqdXN0IGNhbGxlZCBgZHNsaWRlLWZvcndhcmQnIHJlcGVhdGVkbHks IGFuZCB3ZSB3YW50IHRoZQogICAgOzsgZW5kIHN0YXRlIHRvIGJlIGFzIGNsb3NlIHRvICJub3Jt YWwiIGFzIHBvc3NpYmxlLgogICAgKG1hcGMgIydkc2xpZGUtZW5kIChvcmVmIG9iaiBzZWN0aW9u LWFjdGlvbnMpKQogICAgKGlmIHNsaWRlLWFjdGlvbiBwcm9ncmVzcwogICAgICAoZHNsaWRlLWJh Y2t3YXJkIG9iaikpKSkKCihjbC1kZWZtZXRob2QgZHNsaWRlLWZpbmFsICgob2JqIGRzbGlkZS1z bGlkZSkpCiAgOzsgVGhlIG9yZGVyIHRoYXQgdGhlc2UgYXJlIGNhbGxlZCBzaG91bGRuJ3QgbWF0 dGVyLiAgTm8gdXNlIGNhc2UgZm9yIGNvdXBsaW5nCiAgOzsgZGlmZmVyZW50IGZpbmFscywgYnV0 IHRoZSBndWFyYW50ZWUgaXMgdGhhdCB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBzbGlkZQogIDs7IGFj dGlvbnMgZW5jb21wYXNzIHRoZSBzZWN0aW9uIGFjdGlvbnMKICAobWFwYyAjJ2RzbGlkZS1maW5h bCAob3JlZiBvYmogc2VjdGlvbi1hY3Rpb25zKSkKICAod2hlbi1sZXQgKChzbGlkZS1hY3Rpb24g KG9yZWYgb2JqIHNsaWRlLWFjdGlvbikpKQogICAgKGRzbGlkZS1maW5hbCBzbGlkZS1hY3Rpb24p KQogIDs7IENsZWFuIHVwIGhlYWRpbmcgbWFya2VyLCB3aGljaCBpcyBzaGFyZWQgYnkgY2hpbGRy ZW4KICAoc2V0LW1hcmtlciAob3JlZiBvYmogYmVnaW4pIG5pbCkpCgooY2wtZGVmbWV0aG9kIGRz bGlkZS1mb3J3YXJkICgob2JqIGRzbGlkZS1zbGlkZSkpCiAgKG9yIChkc2xpZGUtLW1hcC1maW5k ICMnZHNsaWRlLWZvcndhcmQgKG9yZWYgb2JqIHNlY3Rpb24tYWN0aW9ucykpCiAgICAgICh3aGVu LWxldCAoKHNsaWRlLWFjdGlvbiAob3JlZiBvYmogc2xpZGUtYWN0aW9uKSkpCiAgICAgICAgKGRz bGlkZS1mb3J3YXJkIHNsaWRlLWFjdGlvbikpKSkKCihjbC1kZWZtZXRob2QgZHNsaWRlLWJhY2t3 YXJkICgob2JqIGRzbGlkZS1zbGlkZSkpCiAgKG9yICh3aGVuLWxldCAoKHNsaWRlLWFjdGlvbiAo b3JlZiBvYmogc2xpZGUtYWN0aW9uKSkpCiAgICAgICAgKGRzbGlkZS1iYWNrd2FyZCBzbGlkZS1h Y3Rpb24pKQogICAgICAoZHNsaWRlLS1tYXAtZmluZCAjJ2RzbGlkZS1iYWNrd2FyZCAob3JlZiBv Ymogc2VjdGlvbi1hY3Rpb25zKSkpKQoKKGNsLWRlZmdlbmVyaWMgZHNsaWRlLS1tYXAtZmluZCAo cHJlZCBzZXF1ZW5jZSkKICAiRmluZCBmaXJzdCBub24tbmlsIHJldHVybiB2YWx1ZSBmcm9tIG1h cHBpbmcgUFJFRCBvdmVyIFNFUVVFTkNFLiIKICAobGV0IChmb3VuZCkKICAgICh3aGlsZSAoYW5k IHNlcXVlbmNlIChub3QgZm91bmQpKQogICAgICAoc2V0cSBmb3VuZCAoZnVuY2FsbCBwcmVkIChw b3Agc2VxdWVuY2UpKSkpCiAgICBmb3VuZCkpCgo7OyBgZHNsaWRlLS1tYWtlLXNsaWRlJyBpcyB2 ZXJ5IGNyaXRpY2FsIHRvIHRoZSB1c2VyLWZhY2luZyBjb25maWd1cmF0aW9uIGFuZAo7OyBoYWNr ZXItZmFjaW5nIGNhcGFiaWxpdGllcyBhbmQgQVBJLiAgU2xpZGVzIGFyZSBoeWRyYXRlZCBmcm9t IG9yZyBtb2RlCjs7IGhlYWRpbmdzLiAgV2UgY2FuIHByZXR0eSBtdWNoIGRpdmlkZSB0aGUgbGlr ZWx5IHVzZXIgbmVlZHMgaW50byBlaXRoZXIgd2hhdAo7OyB0byBkbyB3aXRoIHRoZSBzZWN0aW9u IGFuZCB3aGF0IHRvIGRvIHdpdGggdGhlIGNoaWxkIGhlYWRpbmdzLgo7Owo7OyBUaGUgY29udGVu dHMgbmVlZHMgdG8gYmUgbmFycm93ZWQgdG8sIGFuZCB0aGlzIG5hcnJvd2luZyBtdXN0IGJlIHBl cmZvcm1lZAo7OyBib3RoIGZvcndhcmRzIGFuZCBiYWNrd2FyZHMuICBOYXJyb3dpbmcgYW5kIHRo ZSBoYW5kbGluZyBvZiBjaGlsZHJlbiBhcmUKOzsgdXN1YWxseSBjb3VwbGVkLCBzbyBjb250cm9s IG92ZXIgdGhlIHJlc3RyaWN0aW9uIGFuZCB0aGUgY2hpbGQgaGVhZGluZ3MgaXMKOzsgY29tYmlu ZWQgaW50byBvbmUgc2xpZGUgYWN0aW9uLiAgVGhpcyBhY3Rpb24gaXMgcnVuIG91dHNpZGUgb2Yg c2VjdGlvbgo7OyBhY3Rpb25zLCBlbmFibGluZwo7Owo7OyBCb3RoIHNsaWRlIGFjdGlvbnMgYW5k IHVzZXIgY29uZmlndXJhdGlvbiBoYXZlIGRlbW9uc3RyYXRlZCBhIGxhcmdlIGJlbmVmaXQKOzsg ZnJvbSBiZWluZyBhYmxlIHRvIHNsaWdodGx5IGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgYWN0aW9u cy4gIFRoaXMgaXMgd2h5Cjs7IGBkc2xpZGUtLW1ha2Utc2xpZGUnIHN1cHBvcnRzIHBsaXN0IGFy Z3VtZW50cyB3aGVuIGh5ZHJhdGluZyBmcm9tIG9yZwo7OyBwcm9wZXJ0aWVzIGFuZCB3aHkgc2xp ZGUgYWN0aW9ucyB0aGF0IGNyZWF0ZSBzbGlkZXMgY2FuIHBhc3MgdGhlc2UgaW4gdmlhCjs7IGBh cmdzJy4KCihkZWZ1biBkc2xpZGUtLW1ha2Utc2xpZGUgKGhlYWRpbmcgJnJlc3QgYXJncykKICAi SHlkcmF0ZSBhIHNsaWRlIG9iamVjdCBmcm9tIGEgSEVBRElORyBlbGVtZW50LgpNYW55IG9wdGlv bmFsIEFSR1MuICBTZWUgY29kZS4iCiAgOzsgU2hhcmUgdGhlIGJlZ2lubmluZyBtYXJrZXIgYWNy b3NzIGFsbCBhY3Rpb25zLiAgSXQncyBub3QgdW5pcXVlIGFuZAogIDs7IHNob3VsZG4ndCBtb3Zl LgogIDs7IFRPRE8gQ29uc29saWRhdGUgZXhwbGljaXQgbmlsIGluZGljYXRpb24gYXJvdW5kIHdo YXRldmVyIGlzIHN0YW5kYXJkCiAgOzsgVE9ETyBIYXZlbid0IG5lZWRlZCB0byBzcGVjaWZ5IHNl Y3Rpb24gYWN0aW9ucyBmcm9tIHRoZSBwYXJlbnQgeWV0IGFjdGlvbnMuCiAgKGxldCogKChiZWdp bi1wb3NpdGlvbiAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmJlZ2luIGhlYWRpbmcpKQogICAgICAg ICAoYmVnaW4gKG1ha2UtbWFya2VyKSkKICAgICAgICAgKGlubGluZSAocGxpc3QtZ2V0IGFyZ3Mg OmlubGluZSkpCiAgICAgICAgIDs7IHNsaWRlIGFjdGlvbiBjbGFzcyBjYW4gYmUgYG5vbmUnIGZv ciBleHBsaWNpdCBuaWwKICAgICAgICAgKHNsaWRlLWFjdGlvbi1jbGFzcyAocGxpc3QtZ2V0IGFy Z3MgOnNsaWRlLWFjdGlvbikpCiAgICAgICAgIChzbGlkZS1hY3Rpb24tYXJncyAocGxpc3QtZ2V0 IGFyZ3MgOnNsaWRlLWFjdGlvbi1hcmdzKSkpCgogICAgKHNldC1tYXJrZXIgYmVnaW4gYmVnaW4t cG9zaXRpb24gKGN1cnJlbnQtYnVmZmVyKSkKCiAgICA7OyBIeWRyYXRlIHRoZSBzbGlkZSdzIGNv bmZpZ3VyYXRpb24gYXMgY2xhc3NlcyBhbmQgYXJndW1lbnRzIGFuZCB0aGVuCiAgICA7OyBpbnN0 YW50aWF0ZSB0aGVtIGFsbC4KICAgIChsZXQqICgoa2V5d29yZHMgKG9yZy1jb2xsZWN0LWtleXdv cmRzCiAgICAgICAgICAgICAgICAgICAgICAnKCJEU0xJREVfU0xJREVfQUNUSU9OIgogICAgICAg ICAgICAgICAgICAgICAgICAiRFNMSURFX0FDVElPTlMiCiAgICAgICAgICAgICAgICAgICAgICAg ICJEU0xJREVfRklMVEVSIgogICAgICAgICAgICAgICAgICAgICAgICAiRFNMSURFX0NMQVNTIikp KQoKICAgICAgICAgICAoYXJncyBgKDppbmxpbmUgLGlubGluZSkpCgogICAgICAgICAgIDs7IFRP RE8ganVzdCBtdW5nZWQgdGhpcyBhIGJpdCBmb3IgZXhwbGljaXQgbmlsIGhhbmRsaW5nLiAgTWln aHQKICAgICAgICAgICA7OyBzdGlsbCBoYXZlIHByZWNlZGVuY2Ugd3JvbmcuICBJZiB0aGVyZSBp cyBhbnkgc3RyaW5nIHNldCBpbiBhbnkKICAgICAgICAgICA7OyBwcm9wZXJ0eSwgdGhlIGRlZmF1 bHQgdmFsdWUgc2hvdWxkbid0IGJlIHVzZWQuCiAgICAgICAgICAgKHNsaWRlLWFjdGlvbi1jbGFz cwogICAgICAgICAgICAob3Igc2xpZGUtYWN0aW9uLWNsYXNzCiAgICAgICAgICAgICAgICAoaWYt bGV0ICgoZGVjbGFyZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgKG9yZy1lbGVtZW50 LXByb3BlcnR5IDpEU0xJREVfU0xJREVfQUNUSU9OIGhlYWRpbmcpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChjZHIgKGFzc29jLXN0cmluZyAiRFNMSURFX1NMSURFX0FDVElPTiIKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmRzKSkp KSkKICAgICAgICAgICAgICAgICAgICAoZHNsaWRlLS1wYXJzZS1jbGFzcy13aXRoLWFyZ3MgZGVj bGFyZWQpCiAgICAgICAgICAgICAgICAgIGRzbGlkZS1kZWZhdWx0LXNsaWRlLWFjdGlvbikpKQoK ICAgICAgICAgICA7OyBUT0RPIHByZWNlZGVuY2VzIGFyZSBvdXQgb2Ygd2Fjay4gIEhlYWRpbmcg cHJvcGVydHkgc2hvdWxkIHdpbgogICAgICAgICAgIDs7IHZlcnN1cyBjaGlsZCBoZWFkaW5nLCBk b2N1bWVudCwgb3IgZGVmYXVsdAogICAgICAgICAgIChzbGlkZS1hY3Rpb24gKHdoZW4gKGFuZCBz bGlkZS1hY3Rpb24tY2xhc3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5v dCAoZXEgc2xpZGUtYWN0aW9uLWNsYXNzICdub25lKSkpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIChpZiAoY29uc3Agc2xpZGUtYWN0aW9uLWNsYXNzKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGFwcGx5IChjYXIgc2xpZGUtYWN0aW9uLWNsYXNzKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDpiZWdpbiBiZWdpbgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDptYXJrZXIgKGNvcHktbWFya2VyIGJlZ2luKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChhcHBlbmQgYXJncwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGUtYWN0aW9uLWFyZ3MKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjZHIgc2xpZGUtYWN0aW9uLWNsYXNz KSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFwcGx5IHNsaWRlLWFjdGlvbi1jbGFz cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6YmVnaW4gYmVnaW4KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOm1hcmtlciAoY29weS1tYXJrZXIgYmVnaW4p CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhcHBlbmQgYXJncwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlLWFjdGlvbi1hcmdzKSkp KSkKCiAgICAgICAgICAgOzsgVE9ETyBhY3Rpb24gYXJndW1lbnRzIG1pZ2h0IG1ha2Ugc2Vuc2Us IHN1Y2ggYXMgdGVsbGluZyBuZXN0ZWQKICAgICAgICAgICA7OyBlbGVtZW50cyBub3QgdG8gYW5p bWF0ZS4gIEl0J3MgcmVhbGx5IGhhcmQgZm9yIHRoZW0gdG8gaW5mZXIgYmVpbmcKICAgICAgICAg ICA7OyBpbiBhbiBpbmxpbmUgY2hpbGQgdmVyc3VzIGFuIGluZGVwZW5kZW50IHNsaWRlLCBldmVu IGJ5IGxvb2tpbmcgYXQKICAgICAgICAgICA7OyB0aGUgcmVzdHJpY3Rpb24uCiAgICAgICAgICAg KHNlY3Rpb24tYWN0aW9uLWNsYXNzZXMKICAgICAgICAgICAgKGFwcGVuZCAoZHNsaWRlLS1wYXJz ZS1jbGFzc2VzLXdpdGgtYXJncwogICAgICAgICAgICAgICAgICAgICAob3IgKG9yZy1lbGVtZW50 LXByb3BlcnR5IDpEU0xJREVfQUNUSU9OUyBoZWFkaW5nKQogICAgICAgICAgICAgICAgICAgICAg ICAgKGNkciAoYXNzb2Mtc3RyaW5nICJEU0xJREVfQUNUSU9OUyIga2V5d29yZHMpKSkpCiAgICAg ICAgICAgICAgICAgICAgZHNsaWRlLWRlZmF1bHQtYWN0aW9ucykpCiAgICAgICAgICAgKHNlY3Rp b24tYWN0aW9ucwogICAgICAgICAgICAobWFwY2FyCiAgICAgICAgICAgICAobGFtYmRhIChjKSAo YW5kIGMgKGFwcGx5IChpZiAoY29uc3AgYykgKGNhciBjKSBjKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOmJlZ2luIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA6bWFya2VyIChjb3B5LW1hcmtlciBiZWdpbikKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChhcHBlbmQgYXJncyAoY2RyLXNhZmUgYykpKSkpCiAgICAgICAgICAgICBzZWN0 aW9uLWFjdGlvbi1jbGFzc2VzKSkKCiAgICAgICAgICAgKGZpbHRlcgogICAgICAgICAgICAob3Ig KGRzbGlkZS0tZmlsdGVyCiAgICAgICAgICAgICAgICAgKG9yIChvcmctZWxlbWVudC1wcm9wZXJ0 eSA6RFNMSURFX0ZJTFRFUiBoZWFkaW5nKQogICAgICAgICAgICAgICAgICAgICAoY2RyIChhc3Nv Yy1zdHJpbmcgIkRTTElERV9GSUxURVIiIGtleXdvcmRzKSkpKQogICAgICAgICAgICAgICAgZHNs aWRlLWRlZmF1bHQtZmlsdGVyKSkKICAgICAgICAgICAoY2xhc3MKICAgICAgICAgICAgKG9yIChk c2xpZGUtLXBhcnNlLWNsYXNzLXdpdGgtYXJncwogICAgICAgICAgICAgICAgIChvciAob3JnLWVs ZW1lbnQtcHJvcGVydHkgOkRTTElERV9DTEFTUyBoZWFkaW5nKQogICAgICAgICAgICAgICAgICAg ICAoY2RyIChhc3NvYy1zdHJpbmcgIkRTTElERV9DTEFTUyIKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGtleXdvcmRzKSkpKQogICAgICAgICAgICAgICAgZHNsaWRlLWRl ZmF1bHQtY2xhc3MpKSkKCiAgICAgIChsZXQgKChzbGlkZSAoYXBwbHkgKGlmIChjb25zcCBjbGFz cykgKGNhciBjbGFzcykgY2xhc3MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgOnNsaWRlLWFj dGlvbiBzbGlkZS1hY3Rpb24KICAgICAgICAgICAgICAgICAgICAgICAgICA6c2VjdGlvbi1hY3Rp b25zIHNlY3Rpb24tYWN0aW9ucwogICAgICAgICAgICAgICAgICAgICAgICAgIDpmaWx0ZXIgZmls dGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgOmJlZ2luIGJlZ2luCiAgICAgICAgICAgICAg ICAgICAgICAgICAgKHdoZW4gKGNvbnNwIGNsYXNzKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGNkciBjbGFzcykpKSkpCiAgICAgICAgc2xpZGUpKSkpCgooY2wtZGVmbWV0aG9kIGRzbGlk ZS1uZXh0LXNpYmxpbmcgKChvYmogZHNsaWRlLXNsaWRlKSBmaWx0ZXIpCiAgKHdoZW4tbGV0KiAo KGhlYWRpbmcgKGRzbGlkZS1oZWFkaW5nIG9iaikpCiAgICAgICAgICAgICAgKG5leHQtaGVhZGlu ZyAoZHNsaWRlLS1uZXh0LXNpYmxpbmcgaGVhZGluZyBmaWx0ZXIpKSkKICAgIChkc2xpZGUtLW1h a2Utc2xpZGUgbmV4dC1oZWFkaW5nKSkpCgooY2wtZGVmbWV0aG9kIGRzbGlkZS1wcmV2aW91cy1z aWJsaW5nICgob2JqIGRzbGlkZS1zbGlkZSkgZmlsdGVyKQogICh3aGVuLWxldCogKChoZWFkaW5n IChkc2xpZGUtaGVhZGluZyBvYmopKQogICAgICAgICAgICAgIChwcmV2aW91cy1oZWFkaW5nIChk c2xpZGUtLXByZXZpb3VzLXNpYmxpbmcgaGVhZGluZyBmaWx0ZXIpKSkKICAgIChkc2xpZGUtLW1h a2Utc2xpZGUgcHJldmlvdXMtaGVhZGluZykpKQoKKGNsLWRlZm1ldGhvZCBkc2xpZGUtaGVhZGlu ZyAoKG9iaiBkc2xpZGUtc2xpZGUpKQogICJSZXR1cm4gdGhlIE9CSidzIGhlYWRpbmcgZWxlbWVu dC4iCiAgKG9yZy1lbGVtZW50LWF0LXBvaW50IChvcmVmIG9iaiBiZWdpbikpKQoKOzsgKiBBY3Rp b25zCjs7OyBQcmUtYnVpbHQgQWN0aW9ucyA7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OwoKOzsgQWN0aW9ucyBhcmUgc3RhdGVmdWwgc2VxdWVu Y2VzLiAgVGhleSBsaXZlIG9uIGEgc2xpZGUuICBUaGV5IHVzdWFsbHkgd29yayBvbgo7OyBlaXRo ZXIgdGhlIHNlY3Rpb24gb3IgdGhlIGNoaWxkcmVuLCBidXQgdGhlcmUgaXMgbm8gcmVxdWlyZW1l bnQgdGhhdCB0aGV5IGFyZQo7OyBleGNsdXNpdmUgdG8gZWl0aGVyLgo7Owo7OyBUaGUgbWFya2Vy IHNsb3QsIGBkc2xpZGUtbWFya2VyJyBtZXRob2QsIGFuZCBgZHNsaWRlLXNlY3Rpb24tbmV4dCcg YW5kCjs7IGBkc2xpZGUtc2VjdGlvbi1wcmV2aW91cycgYXJlIG9mIHBhcnRpY3VsYXIgdXRpbGl0 eSBmb3IgIm1hcHBpbmciIG92ZXIKOzsgZWxlbWVudHMgYXMgdGhlIHVzZXIgY2FsbHMgYGRzbGlk ZS1kZWNrLWZvcndhcmQnLgo7Owo7OyBTbGlkZSBhY3Rpb25zIHNob3VsZCBjb21wb3NlIHdpdGgg c2VjdGlvbiBhY3Rpb25zLCBzdWNoCjs7IGFzIGEgcm91bmQtcm9iaW4gc2xpZGUgYWN0aW9uIGN5 Y2xpbmcgdGhyb3VnaCBlYWNoIGNoaWxkJ3MgYWN0aW9uJ3MgZm9yd2FyZAo7OyBhbmQgYmFja3dh cmQgbWV0aG9kcy4KCjs7ICoqIEJhc2UgQWN0aW9uCihkZWZjbGFzcyBkc2xpZGUtYWN0aW9uIChk c2xpZGUtc3RhdGVmdWwtc2VxdWVuY2UpCiAgKChiZWdpbgogICAgOmluaXRmb3JtIG5pbAogICAg OmluaXRhcmcgOmJlZ2luCiAgICA6ZG9jdW1lbnRhdGlvbiAiTWFya2VyIGZvciBiZWdpbm5pbmcg b2YgaGVhZGluZy4gIFVzZWQgdG8KcmUtaHlkcmF0ZSB0aGUgb3JnIGVsZW1lbnQgZm9yIHVzZSBp biBtYXBwaW5nIG92ZXIgdGhlIHNlY3Rpb24gZXRjLiIpCiAgIChtYXJrZXIKICAgIDppbml0Zm9y bSBuaWwKICAgIDppbml0YXJnIDptYXJrZXIKICAgIDpkb2N1bWVudGF0aW9uICJNYXJrZXIgdXNl ZCB0byB0cmFjayBwcm9ncmVzcy4KSXQgaXMgaW5pdGlhbGl6ZWQgdG8gdGhlIHNhbWUgdmFsdWUg YXMgdGhlIGBiZWdpbicgc2xvdC4iKQogICAoaW5saW5lCiAgICA6aW5pdGZvcm0gbmlsCiAgICA6 aW5pdGFyZyA6aW5saW5lCiAgICA6ZG9jdW1lbnRhdGlvbiAiRHJhdyBhcyBpZiBzdXJyb3VuZGVk IGJ5IG90aGVyIGNvbnRlbnRzLgpUaGlzIG9wdGlvbiBhbGxvd3MgYWN0aW9ucyB0aGF0IHBlcmZv cm0gc29tZSBhbmltYXRpb24gdG8gZGVncmFkZQp0byBzb21lIHRlY2huaXF1ZSB0aGF0IHdvcmtz IHdpdGggY29udGVudHMgYWJvdmUgYW5kIGJlbG93LiIpKQogICJCYXNlIGNsYXNzIGZvciBtb3N0 IHNsaWRlIGFjdGlvbnMgdGhhdCB3b3JrIG9uIGEgaGVhZGluZydzIGNvbnRlbnRzLiIKICA6YWJz dHJhY3QgdCkKCihjbC1kZWZtZXRob2QgZHNsaWRlLWhlYWRpbmcgKChvYmogZHNsaWRlLWFjdGlv bikpCiAgIlJldHVybiB0aGUgT0JKJ3MgaGVhZGluZyBlbGVtZW50LiIKICAobGV0ICgoaGVhZGlu ZyAob3JnLWVsZW1lbnQtYXQtcG9pbnQgKG9yZWYgb2JqIGJlZ2luKSkpKQogICAgKGlmIChlcSAo b3JnLWVsZW1lbnQtdHlwZSBoZWFkaW5nKSAnaGVhZGxpbmUpCiAgICAgICAgaGVhZGluZwogICAg ICAoZXJyb3IgIkJlZ2luIG1hcmtlciBubyBsb25nZXIgcG9pbnRzIGF0IGEgaGVhZGluZyIpKSkp CgooY2wtZGVmZ2VuZXJpYyBkc2xpZGUtbWFya2VyIChvYmogcG9tKQogICAgIkdldCBvciBzZXQg T0JKJ3MgcHJvZ3Jlc3MgbWFya2VyIHRvIG9wdGlvbmFsIFBPTS4KRXJyb3JzIHdoZW4gYXNrZWQg Zm9yIGEgbWFya2VyIGJlZm9yZSBvbmUgaGFzIGJlZW4gc2V0LiIpCgooY2wtZGVmbWV0aG9kIGRz bGlkZS1tYXJrZXIgKChvYmogZHNsaWRlLWFjdGlvbikgJm9wdGlvbmFsIHBvbSkKICAobGV0ICgo bWFya2VyIChvciAob3JlZiBvYmogbWFya2VyKQogICAgICAgICAgICAgICAgICAgIChwY2FzZSAo dHlwZS1vZiBwb20pCiAgICAgICAgICAgICAgICAgICAgICAoJ21hcmtlciBwb20pCiAgICAgICAg ICAgICAgICAgICAgICAoJ2ludGVnZXIgKHNldC1tYXJrZXIgKG1ha2UtbWFya2VyKSBwb20pKQog ICAgICAgICAgICAgICAgICAgICAgKCdzeW1ib2wgbmlsKSkpKSkKICAgICh3aGVuIChhbmQgbWFy a2VyIHBvbSkKICAgICAgKHNldC1tYXJrZXIgbWFya2VyIHBvbSkpCiAgICAoaWYgKGFuZCBtYXJr ZXIgKG1hcmtlci1idWZmZXIgbWFya2VyKSkKICAgICAgICAobWFya2VyLXBvc2l0aW9uIChvc2V0 IG9iaiBtYXJrZXIgbWFya2VyKSkKICAgICAgKGVycm9yICJObyBtYXJrZXIgd2FzIGluaXRpYWxp emVkIikpKSkKCihjbC1kZWZnZW5lcmljIGRzbGlkZS1zZWN0aW9uLW5leHQgKG9iaiB0eXBlCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvcHRpb25hbCBwcmVkIHJldmVyc2Ut aW4tcGxhY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvIG5vLXJl Y3Vyc2lvbikKICAiUmV0dXJuIE9CSidzIG5leHQgZWxlbWVudCBvZiBUWVBFLgpPbmx5IG1hdGNo ZXMgZWxlbWVudHMgYmVnaW5uaW5nIGFmdGVyIHRoZSBtYXJrZXIgc3RvcmVkIGluIHRoZQphY3Rp b24gT0JKLiAgTW92ZXMgdGhlIG1hcmtlciBmb3J3YXJkIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhl Cm1hdGNoZWQgZWxlbWVudCBvciB0byB0aGUgZW5kIG9mIGhlYWRpbmcuCgpPcHRpb25hbCBSRVZF UlNFLUlOLVBMQUNFIGlzIHVzZWQgd2hlbiBjaGFuZ2luZyBkaXJlY3Rpb25zIHNob3VsZApyZXR1 cm4gdGhlIHNhbWUgZWxlbWVudCwgbWVhbmluZyB5b3VyIGFjdGlvbiByZXZlcnNlcyBpbi1wbGFj ZS4KaGlkaW5nIGFuZCByZXZlYWxpbmcgbGlzdCBpdGVtcyB3b3JrcyB0aGlzIHdheS4gIFdoZW4g bm9uLW5pbCwKbWF0Y2hlcyBjYW4gaW5jbHVkZSBlbGVtZW50cyBzdGFydGluZyBhdCB0aGUgYWN0 aW9uJ3MgbWFya2VyLCBhbmQKdGhlIG1hcmtlciBpcyBtb3ZlZCB0byB0aGUgZW5kIHJhdGhlciB0 aGFuIGJlZ2lubmluZyBvZiBhbgplbGVtZW50LgoKVGhlIGFjdGlvbidzIG1hcmtlciBpcyBtb3Zl ZCB0byB0aGUgZW5kIG9mIHRoZSBoZWFkaW5nIGlmIG5vCm1hdGNoaW5nIGVsZW1lbnQgaXMgZm91 bmQuICBUaGlzIGFsbG93cyBhIHN1YnNlcXVlbnQgYmFja3dhcmRzCnN0ZXAgdG8gcHJvY2VzcyB0 aGUgbGFzdCBlbGVtZW50LgoKT3B0aW9uYWwgUFJFRCBJTkZPIGFuZCBOTy1SRUNVUlNJT04gYXJl IHRoZSBzYW1lIGFzIGZvcgpgZHNsaWRlLWNvbnRlbnRzLW1hcCcuIikKCihjbC1kZWZtZXRob2Qg ZHNsaWRlLXNlY3Rpb24tbmV4dCAoKG9iaiBkc2xpZGUtYWN0aW9uKSB0eXBlCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJm9wdGlvbmFsIHByZWQgcmV2ZXJzZS1pbi1wbGFjZQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mbyBuby1yZWN1cnNpb24pCiAg KGlmLWxldCAoKG5leHQgKGRzbGlkZS0tc2VjdGlvbi1uZXh0CiAgICAgICAgICAgICAgICAgIChk c2xpZGUtaGVhZGluZyBvYmopIHR5cGUgKGRzbGlkZS1tYXJrZXIgb2JqKQogICAgICAgICAgICAg ICAgICBwcmVkIHJldmVyc2UtaW4tcGxhY2UgaW5mbyBuby1yZWN1cnNpb24pKSkKICAgICAgKHBy b2cxIG5leHQKICAgICAgICAoZHNsaWRlLW1hcmtlciBvYmogKG9yZy1lbGVtZW50LXByb3BlcnR5 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgcmV2ZXJzZS1pbi1wbGFjZSA6ZW5kIDpi ZWdpbikgbmV4dCkpKQogICAgKGRzbGlkZS1tYXJrZXIgb2JqIChvcmctZWxlbWVudC1wcm9wZXJ0 eSA6ZW5kIChkc2xpZGUtaGVhZGluZyBvYmopKSkKICAgIG5pbCkpCgooY2wtZGVmZ2VuZXJpYyBk c2xpZGUtc2VjdGlvbi1wcmV2aW91cyAob2JqIHR5cGUKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZvcHRpb25hbCBwcmVkIHJldmVyc2UtaW4tcGxhY2UKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mbyBuby1yZWN1cnNpb24pCiAgIlJl dHVybiBwcmV2aW91cyBlbGVtZW50IG9mIFRZUEUuCk9ubHkgbWF0Y2hlcyBlbGVtZW50cyBiZWdp bm5pbmcgYmVmb3JlIHRoZSBtYXJrZXIgc3RvcmVkIGluIHRoZQphY3Rpb24sIE9CSi4gIE1vdmVz IHRoZSBtYXJrZXIgYmFja3dhcmQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUKcmV0dXJuZWQgZWxl bWVudCBvciB0aGUgYmVnaW5uaW5nIG9mIE9CSidzIGhlYWRpbmcuCgpPcHRpb25hbCBSRVZFUlNF LUlOLVBMQUNFIGlzIHVzZWQgd2hlbiBjaGFuZ2luZyBkaXJlY3Rpb25zIHNob3VsZApyZXR1cm4g dGhlIHNhbWUgZWxlbWVudCwgbWVhbmluZyB5b3VyIGFjdGlvbiByZXZlcnNlcyBpbi1wbGFjZS4K aGlkaW5nIGFuZCByZXZlYWxpbmcgbGlzdCBpdGVtcyB3b3JrcyB0aGlzIHdheS4gIFdoZW4gbm9u LW5pbCwKbWF0Y2hlcyBjYW4gaW5jbHVkZSBlbGVtZW50cyBzdGFydGluZyBhdCB0aGUgYWN0aW9u J3MgbWFya2VyLgoKTWFya2VyIGlzIG1vdmVkIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGhlYWRp bmcgaWYgbm8gbWF0Y2hpbmcKZWxlbWVudCBpcyBmb3VuZC4gIFRoaXMgYWxsb3dzIGFjdGlvbnMg dG8gZGlmZmVyZW50aWF0ZSB0aGUgYmVnaW4Kc3RhdGUgZnJvbSBiZWluZyBhdCB0aGUgZmlyc3Qg bWF0Y2hpbmcgZWxlbWVudC4KCk9wdGlvbmFsIFBSRUQgSU5GTyBhbmQgTk8tUkVDVVJTSU9OIGFy ZSB0aGUgc2FtZSBhcyBmb3IKYGRzbGlkZS1jb250ZW50cy1tYXAnLiIpCgooY2wtZGVmbWV0aG9k IGRzbGlkZS1zZWN0aW9uLXByZXZpb3VzICgob2JqIGRzbGlkZS1hY3Rpb24pIHR5cGUKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9wdGlvbmFsIHByZWQgcmV2ZXJzZS1p bi1wbGFjZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8gbm8t cmVjdXJzaW9uKQogIChpZi1sZXQgKChwcmV2aW91cyAoZHNsaWRlLS1zZWN0aW9uLXByZXZpb3Vz CiAgICAgICAgICAgICAgICAgICAgICAoZHNsaWRlLWhlYWRpbmcgb2JqKSB0eXBlIChkc2xpZGUt bWFya2VyIG9iaikKICAgICAgICAgICAgICAgICAgICAgIHByZWQgcmV2ZXJzZS1pbi1wbGFjZSBp bmZvIG5vLXJlY3Vyc2lvbikpKQogICAgICAocHJvZzEgcHJldmlvdXMKICAgICAgICAoZHNsaWRl LW1hcmtlciBvYmogKG9yZy1lbGVtZW50LXByb3BlcnR5IDpiZWdpbiBwcmV2aW91cykpKQogICAg KGRzbGlkZS1tYXJrZXIgb2JqIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6YmVnaW4gKGRzbGlkZS1o ZWFkaW5nIG9iaikpKQogICAgbmlsKSkKCihjbC1kZWZnZW5lcmljIGRzbGlkZS1zZWN0aW9uLW1h cCAob2JqIHR5cGUgZnVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9wdGlv bmFsIGluZm8gZmlyc3QtbWF0Y2ggbm8tcmVjdXJzaW9uKQogICAgICAiTWFwIEZVTiBvdmVyIFRZ UEUgZWxlbWVudHMgaW4gT0JKJ3MgaGVhZGluZydzIHNlY3Rpb24uCk9wdGlvbmFsIFBSRUQgSU5G TyBGSVJTVC1NQVRDSCBhbmQgTk8tUkVDVVJTSU9OIGFyZSB0aGUgc2FtZSBhcwpmb3IgYGRzbGlk ZS1jb250ZW50cy1tYXAnLiIpCgooY2wtZGVmbWV0aG9kIGRzbGlkZS1zZWN0aW9uLW1hcCAoKG9i aiBkc2xpZGUtYWN0aW9uKSB0eXBlIGZ1bgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJm9wdGlvbmFsIGluZm8gZmlyc3QtbWF0Y2ggbm8tcmVjdXJzaW9uKQogIChkc2xpZGUtLXNl Y3Rpb24tbWFwCiAgIChkc2xpZGUtaGVhZGluZyBvYmopCiAgIHR5cGUgZnVuIGluZm8gZmlyc3Qt bWF0Y2ggbm8tcmVjdXJzaW9uKSkKCjs7IGJlZ2luIGFuZCBlbmQgYXJlIHVzaW5nIHRoZSBkZWZh dWx0cyBmcm9tIGBkc2xpZGUtc3RhdGVmdWwtc2VxdWVuY2UnLgo7OyBvdmVycmlkZSB3aGVuIGV4 dGVuZGluZyBuZXcgYWN0aW9ucyBpZiBpbmFwcHJvcHJpYXRlLgoKKGNsLWRlZm1ldGhvZCBkc2xp ZGUtZmluYWwgKChvYmogZHNsaWRlLWFjdGlvbikpCiAgKHdoZW4tbGV0ICgobWFya2VyIChvcmVm IG9iaiBtYXJrZXIpKSkKICAgIChzZXQtbWFya2VyIG1hcmtlciBuaWwpKSkKCjs7ICoqIEhpZGUg TWFya3VwIEFjdGlvbgo7OyBUT0RPIGFsbG93IGNvbmZpZ3VyYXRpb24gdmlhIHBsaXN0IGFyZ3MK OzsgVE9ETyBwcmVjZWRlbmNlIG9yZGVyIG9mIGRlZmF1bHQgYWN0aW9ucwooZGVmY2xhc3MgZHNs aWRlLWFjdGlvbi1oaWRlLW1hcmt1cCAoZHNsaWRlLWFjdGlvbikgKCkKICAiSGlkZXMgZWxlbWVu dCBiYXNlZCBvbiB0eXBlLiIpCgooY2wtZGVmbWV0aG9kIGRzbGlkZS1iZWdpbiAoKG9iaiBkc2xp ZGUtYWN0aW9uLWhpZGUtbWFya3VwKSkKICAoZHNsaWRlLXNlY3Rpb24tbWFwIG9iaiBkc2xpZGUt aGlkZS1tYXJrdXAtdHlwZXMKICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKGUpIChwdXNo IChkc2xpZGUtaGlkZS1lbGVtZW50IGUpIGRzbGlkZS1vdmVybGF5cykpKQoKICA7OyBIaWRlIHRh Z3MgYW5kIHRvZG8ga2V5d29yZHMKICAod2hlbiAob3IgZHNsaWRlLWhpZGUtdGFncyBkc2xpZGUt aGlkZS10b2RvKQogICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgIChnb3RvLWNoYXIgKG9yZy1lbGVt ZW50LXByb3BlcnR5IDpiZWdpbiAoZHNsaWRlLWhlYWRpbmcgb2JqKSkpCiAgICAgIChvcmctaGVh ZGluZy1jb21wb25lbnRzKSkpCiAgKHdoZW4gZHNsaWRlLWhpZGUtdG9kbwogICAgKHdoZW4tbGV0 KiAoKHRvZG8tYmVnIChtYXRjaC1iZWdpbm5pbmcgMikpCiAgICAgICAgICAgICAgICAob3Zlcmxh eSAobWFrZS1vdmVybGF5ICgxLSB0b2RvLWJlZykgKG1hdGNoLWVuZCAyKSkpKQogICAgICAob3Zl cmxheS1wdXQgb3ZlcmxheSAnaW52aXNpYmxlIHQpCiAgICAgIChwdXNoIG92ZXJsYXkgZHNsaWRl LW92ZXJsYXlzKSkpCiAgKHdoZW4gZHNsaWRlLWhpZGUtdGFncwogICAgKHdoZW4tbGV0KiAoKHRh Z3MtYmVnIChtYXRjaC1iZWdpbm5pbmcgNSkpCiAgICAgICAgICAgICAgICAob3ZlcmxheSAobWFr ZS1vdmVybGF5ICgxLSB0YWdzLWJlZykgKG1hdGNoLWVuZCA1KSkpKQogICAgICAob3ZlcmxheS1w dXQgb3ZlcmxheSAnaW52aXNpYmxlIHQpCiAgICAgIChwdXNoIG92ZXJsYXkgZHNsaWRlLW92ZXJs YXlzKSkpCgogIDs7IE9vb29oISByaWdodCwgeWVhaCwgdGhlIGVsZW1lbnQgcGFyc2VyIGRvZXNu J3QgZ2l2ZSB5b3UgYWZmaWxpYXRlZCBrZXl3b3JkcwogIDs7IHdoZW4geW91IGFzayBmb3Iga2V5 d29yZHMuICBBcyBtdWNoIHNlbnNlIGFzIHRoYXQgd291bGQgbWFrZSwgdGhlIG9ubHkKICA7OyB0 ZWNobmlxdWUgSSd2ZSBmb3VuZCBmb3IgdGhpcyBpcyBmYWxsaW5nIGJhY2sgdG8gcmVnZXguCiAg KHdoZW4gKG1lbWJlciAna2V5d29yZCBkc2xpZGUtaGlkZS1tYXJrdXAtdHlwZXMpCiAgICAoc2F2 ZS1leGN1cnNpb24KICAgICAgKGxldCAoKGJvdW5kIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6ZW5k IChkc2xpZGUtaGVhZGluZyBvYmopKSkpCiAgICAgICAgKGdvdG8tY2hhciAob3JlZiBvYmogYmVn aW4pKQogICAgICAgICh3aGlsZSAocmUtc2VhcmNoLWZvcndhcmQgb3JnLWtleXdvcmQtcmVnZXhw IGJvdW5kIHQpCiAgICAgICAgICAobGV0ICgob3ZlcmxheSAobWFrZS1vdmVybGF5IChtYXRjaC1i ZWdpbm5pbmcgMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNo LWVuZCAwKSkpKQogICAgICAgICAgICAob3ZlcmxheS1wdXQgb3ZlcmxheSAnaW52aXNpYmxlIHQp CiAgICAgICAgICAgIChwdXNoIGRzbGlkZS1vdmVybGF5cyBvdmVybGF5KSkpKSkpKQoKKGNsLWRl Zm1ldGhvZCBkc2xpZGUtZW5kICgob2JqIGRzbGlkZS1hY3Rpb24taGlkZS1tYXJrdXApKQogIChk c2xpZGUtYmVnaW4gb2JqKSkKCjs7ICoqIFRleHQgUHJvcGVydHkgQWN0aW9uCjs7IEludGVycHJl dCB0ZXh0IHByb3BlcnRpZXMgdmlhIGFmZmlsaWF0ZWQga2V5d29yZCBpbnRvIHRleHQgcHJvcGVy dGllcyBmb3IKOzsgbW9yZSBjb250cm9sIG92ZXIgdGV4dCBkaXNwbGF5IG9uIHNsaWRlcy4KCihk ZWZjbGFzcyBkc2xpZGUtYWN0aW9uLXByb3BlcnRpemUgKGRzbGlkZS1hY3Rpb24pICgpCiAgIklu dGVycHJldCBhZmZpbGlhdGVkIGtleXdvcmRzIGludG8gdGV4dCBwcm9wZXJ0aWVzLiIpCgooY2wt ZGVmbWV0aG9kIGRzbGlkZS1iZWdpbiAoKG9iaiBkc2xpZGUtYWN0aW9uLXByb3BlcnRpemUpKQog IChkc2xpZGUtc2VjdGlvbi1tYXAKICAgb2JqIHQKICAgKGxhbWJkYSAoZSkKICAgICAod2hlbi1s ZXQgKChwcm9wcyAob3JnLWVsZW1lbnQtcHJvcGVydHkKICAgICAgICAgICAgICAgICAgICAgICAg OmF0dHJfZHNsaWRlX3Byb3BlcnRpemUgZSkpKQogICAgICAgKGxldCAoKG92ZXJsYXkgKG1ha2Ut b3ZlcmxheSAob3JnLWVsZW1lbnQtcHJvcGVydHkgOnBvc3QtYWZmaWxpYXRlZCBlKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmVuZCBl KSkpCiAgICAgICAgICAgICAocHJvcHMgKGNhciBwcm9wcykpICAgICAgICA7IFRPRE8gbXVsdGkt dmFsdWUgc3VwcG9ydAogICAgICAgICAgICAgKG9mZnNldCAwKSkKICAgICAgICAgKHdoaWxlIG9m ZnNldAogICAgICAgICAgIChsZXQqICgocHJvcCAoaWdub3JlLWVycm9yIGVuZC1vZi1maWxlCiAg ICAgICAgICAgICAgICAgICAgICAgICAgKHJlYWQtZnJvbS1zdHJpbmcgcHJvcHMgb2Zmc2V0KSkp CiAgICAgICAgICAgICAgICAgICh2YWx1ZSAoaWdub3JlLWVycm9yIGVuZC1vZi1maWxlCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIChyZWFkLWZyb20tc3RyaW5nIHByb3BzIChjZHIgcHJvcCkp KSkpCiAgICAgICAgICAgICAoaWYgKGFuZCBwcm9wIHZhbHVlKQogICAgICAgICAgICAgICAgIChw cm9nbiAob3ZlcmxheS1wdXQgb3ZlcmxheSAoY2FyIHByb3ApIChjYXIgdmFsdWUpKQogICAgICAg ICAgICAgICAgICAgICAgICAoc2V0cSBvZmZzZXQgKGNkciB2YWx1ZSkpKQogICAgICAgICAgICAg ICAoc2V0cSBvZmZzZXQgbmlsKSkpKQogICAgICAgICAocHVzaCBvdmVybGF5IGRzbGlkZS1vdmVy bGF5cykpKSkpKQoKKGNsLWRlZm1ldGhvZCBkc2xpZGUtZW5kICgob2JqIGRzbGlkZS1hY3Rpb24t cHJvcGVydGl6ZSkpCiAgKGRzbGlkZS1iZWdpbiBvYmopKQoKOzsgKiogSXRlbSBSZXZlYWwgQWN0 aW9uCjs7IFJldmVhbCBpdGVtcyBoYXMgYSBzb21ld2hhdCBmdW4gaW1wbGVtZW50YXRpb24uICBU aGUgZW5kIHN0YXRlIGlzIGFjdHVhbGx5Cjs7IHNpbXBsZXIgdGhhbiB0aGUgYmVnaW4gc3RhdGUu ICBHb2luZyBmb3J3YXJkLCB3ZSBtdXN0IHJlbW92ZSBvdmVybGF5cyBhbmQKOzsgYW5pbWF0ZSBp dGVtcy4gIEdvaW5nIGJhY2t3YXJkLCB3ZSBhZGQgb3ZlcmxheXMuICBXaGVuIHN0YXJ0aW5nIGF0 IHRoZSBlbmQsCjs7IHRoZXJlIGFyZSBubyBvdmVybGF5cywgYnV0IHdoZW4gc3RhcnRpbmcgYXQg dGhlIGJlZ2lubmluZywgYWxsIGl0ZW1zIGFyZQo7OyBjb25jZWFsZWQgYnkgb3ZlcmxheXMKKGRl ZmNsYXNzIGRzbGlkZS1hY3Rpb24taXRlbS1yZXZlYWwgKGRzbGlkZS1hY3Rpb24pCiAgKChvdmVy bGF5cwogICAgOmluaXRmb3JtIG5pbCkpCiAgIkhpZGUgYWxsIGl0ZW1zIGFuZCB0aGVuIHJldmVh bCB0aGVtIG9uZSBieSBvbmUuIikKCihjbC1kZWZtZXRob2QgZHNsaWRlLWJlZ2luIDphZnRlciAo KG9iaiBkc2xpZGUtYWN0aW9uLWl0ZW0tcmV2ZWFsKSkKICAob3NldCBvYmogb3ZlcmxheXMKICAg ICAgICAoZHNsaWRlLXNlY3Rpb24tbWFwCiAgICAgICAgIG9iaiAnaXRlbSAobGFtYmRhIChlKSAo ZHNsaWRlLWhpZGUtZWxlbWVudCBlIChvcmVmIG9iaiBpbmxpbmUpKSkpKSkKCihjbC1kZWZtZXRo b2QgZHNsaWRlLWVuZCAoKG9iaiBkc2xpZGUtYWN0aW9uLWl0ZW0tcmV2ZWFsKSkKICAoZHNsaWRl LW1hcmtlciBvYmogKG9yZy1lbGVtZW50LXByb3BlcnR5IDplbmQgKGRzbGlkZS1oZWFkaW5nIG9i aikpKSkKCihjbC1kZWZtZXRob2QgZHNsaWRlLWZpbmFsIDphZnRlciAoKG9iaiBkc2xpZGUtYWN0 aW9uLWl0ZW0tcmV2ZWFsKSkKICAobWFwYyAjJ2RlbGV0ZS1vdmVybGF5IChvcmVmIG9iaiBvdmVy bGF5cykpKQoKOzsgVE9ETyBPdmVybGF5IGludGVyc2VjdGlvbiBjb3VsZCBiZSBjb25zb2xpZGF0 ZWQgZm9yIHVzZSBpbiBvdGhlciBhY3Rpb25zLgooY2wtZGVmbWV0aG9kIGRzbGlkZS1mb3J3YXJk ICgob2JqIGRzbGlkZS1hY3Rpb24taXRlbS1yZXZlYWwpKQogIDs7ICBJdGVtIHJldmVhbCAvIGhp ZGUgcmVwZWF0cyBpbiBwbGFjZSwgc28gd2UgcGFzcyBhIGZpbmFsIHQgdG8KICA7OyAgYGRzbGlk ZS1zZWN0aW9uLW5leHQnLgogICh3aGVuLWxldCogKChuZXh0LWl0ZW0gKGRzbGlkZS1zZWN0aW9u LW5leHQgb2JqICdpdGVtIG5pbCB0KSkKICAgICAgICAgICAgICAocHJvZ3Jlc3MgKG9yZy1lbGVt ZW50LXByb3BlcnR5IDpiZWdpbiBuZXh0LWl0ZW0pKSkKICAgIChsZXQgKChpdGVtLW92ZXJsYXlz IChzZXEtaW50ZXJzZWN0aW9uIChvcmVmIG9iaiBvdmVybGF5cykKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChvdmVybGF5cy1hdCAob3JnLWVsZW1lbnQtcHJvcGVy dHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOmJlZ2luIG5leHQtaXRlbSkpKSkpCiAgICAgIChvc2V0IG9iaiBvdmVybGF5cyAoc2VxLWRp ZmZlcmVuY2UgKG9yZWYgb2JqIG92ZXJsYXlzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGl0ZW0tb3ZlcmxheXMpKQogICAgICAod2hlbiBkc2xpZGUtc2xpZGUtaW4t ZWZmZWN0CiAgICAgICAgKGlmIChvcmVmIG9iaiBpbmxpbmUpCiAgICAgICAgICAgIChtYXBjICMn ZHNsaWRlLWFuaW1hdGlvbi1wZWVsIGl0ZW0tb3ZlcmxheXMpCiAgICAgICAgICAoZHNsaWRlLWFu aW1hdGlvbi1zZXR1cCAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmJlZ2luIG5leHQtaXRlbSkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6ZW5k IG5leHQtaXRlbSkpCiAgICAgICAgICA7OyBCZWNhdXNlIHRoZSB1c2VyIG1pZ2h0IGFkZCBpdGVt cyBldGMsIGFuZCB0byBhdm9pZCB0aGUgbmVlZCBmb3IKICAgICAgICAgIDs7IGtleXMgbWF0Y2hp bmcgaXRlbXMgdG8gb3VyIG92ZXJsYXlzLCB3ZSBpbnRlcnNlY3Qgb3ZlcmxheXMgd2UgYXJlCiAg ICAgICAgICA7OyBtYW5hZ2luZyB3aXRoIG92ZXJsYXlzIGZvdW5kIGF0IHBvaW50LCB3aGljaCBj b3VsZCBpbmNsdWRlIG92ZXJsYXlzCiAgICAgICAgICA7OyBmcm9tIHNvbWUgb3RoZXIgYWN0aW9u CiAgICAgICAgICAobWFwYyAjJ2RlbGV0ZS1vdmVybGF5IGl0ZW0tb3ZlcmxheXMpKSkpCiAgICA7 OyByZXR1cm4gcHJvZ3Jlc3MKICAgIHByb2dyZXNzKSkKCihjbC1kZWZtZXRob2QgZHNsaWRlLWJh Y2t3YXJkICgob2JqIGRzbGlkZS1hY3Rpb24taXRlbS1yZXZlYWwpKQogICh3aGVuLWxldCAoKHBy ZXZpb3VzLWl0ZW0gKGRzbGlkZS1zZWN0aW9uLXByZXZpb3VzIG9iaiAnaXRlbSkpCiAgICAgICAg ICAgICAocHJvZ3Jlc3MgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpiZWdpbiBwcmV2aW91cy1pdGVt KSkpCiAgICAocHVzaCAoZHNsaWRlLWhpZGUtZWxlbWVudCBwcmV2aW91cy1pdGVtIChvcmVmIG9i aiBpbmxpbmUpKQogICAgICAgICAgKG9yZWYgb2JqIG92ZXJsYXlzKSkKICAgIDs7IHJldHVybiBw cm9ncmVzcwogICAgcHJvZ3Jlc3MpKQoKOzsgKiogQmFiZWwgQWN0aW9uCgo7OyBUT0RPIGVuYWJs ZSBhYm9ydGluZyBhZnRlciBhIGZhaWx1cmUuICBSaWdodCBub3cgdGhlcmUgaXMgYSBiZWhhdmlv ciB0byBhc2sKOzsgdG8gdmlzaXQgYSBibG9jawooZGVmY2xhc3MgZHNsaWRlLWFjdGlvbi1iYWJl bCAoZHNsaWRlLWFjdGlvbikKICAoKHJlbW92ZS1yZXN1bHRzCiAgICA6aW5pdGZvcm0gdAogICAg OmluaXRhcmcgOnJlbW92ZS1yZXN1bHRzCiAgICA6ZGVzY3JpcHRpb24gIlJlbW92ZSByZXN1bHRz IHdoZW4gZW50ZXJpbmcgc2xpZGVzIPCfmqcuCkV4cGVyaW1lbnRhbC4gIEZpbGUgYW4gaXNzdWUg aWYgeW91IHNlZSBzb21ldGhpbmcgd2VpcmQuICBUaGVyZSdzCmEgbG90IG9mIGJlaGF2aW9ycyB0 aGF0IGNvdWxkIHBvdGVudGlhbGx5IHJlYWN0IHRvIHRoaXMgb3B0aW9uLgpDdXJyZW50bHkgb25s eSBibG9ja3Mgd2l0aCByZXN1bHRzIHNldCB0byByZXBsYWNlIGFyZSByZW1vdmVkIGFuZApvbmx5 IHdoZW4gZW50ZXJpbmcgYSBzbGlkZS4gIE90aGVyIG9wdGlvbnMgc2VlbSB0byBzdWdnZXN0CnJl c3VsdHMgc2hvdWxkIG5vdCBiZSByZW1vdmVkIG9yIHdpbGwgbmV2ZXIgYmUgd3JpdHRlbiB0byB0 aGUKYnVmZmVyIGFueXdheS4iKSkKICAiRXhlY3V0ZSBzb3VyY2UgYmxvY2tzIGFzIHN0ZXBzLgpC eSBkZWZhdWx0IGJsb2NrcyBleGVjdXRlIG9uZSBieSBvbmUgd2l0aCBmb3J3YXJkLiAgWW91IGNh biBtYXJrIGEgYmxvY2sgdG8KYmUgc3BlY2lhbCB3aXRoIHRoZSBrZXl3b3JkOgoKLSAjK2F0dHJf ZHNsaWRlOiBiZWdpbgoKLSAjK2F0dHJfZHNsaWRlOiBmb3J3YXJkCgotICMrYXR0cl9kc2xpZGU6 IGJhY2t3YXJkCgotICMrYXR0cl9kc2xpZGU6IGJvdGgKCi0gIythdHRyX2RzbGlkZTogZW5kCgot ICMrYXR0cl9kc2xpZGU6IGZpbmFsCgpPdGhlciB0aGFuIGJvdGgsIHdoaWNoIGV4ZWN1dGVzIGlu IGVpdGhlciBzdGVwIGRpcmVjdGlvbiwKdGhlc2Uga2V5d29yZHMgY29ycmVzcG9uZCB0byB0aGUg bm9ybWFsIG1ldGhvZHMgb2YgdGhlIHN0YXRlZnVsCnNlcXVlbmNlIGNsYXNzLiAgQmxvY2tzIHdp dGggbWV0aG9kIGJlZ2luLCBlbmQsIGFuZCBmaW5hbCBhcmUgYWxsCmV4ZWN1dGVkIGR1cmluZyB0 aGUgY29ycmVzcG9uZGluZyBtZXRob2QgYW5kIGRvIG5vdCBjb3VudCBhcwpzdGVwcy4iKQoKCihk ZWZ1biBkc2xpZGUtLXJlbW92ZS1iYWJlbC1yZXN1bHRzIChzcmMtYmxvY2spCiAgIlJlbW92ZSBy ZXN1bHRzIGlmIGJsb2NrIGlzIGNvbmZpZ3VyZWQgbm90IHRvIHBlcnNpc3QgdGhlbS4iCiAgKHNh dmUtZXhjdXJzaW9uCiAgICAoZ290by1jaGFyIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6YmVnaW4g c3JjLWJsb2NrKSkKICAgIChsZXQgKChhcmdzIChvcmctYmFiZWwtcGFyc2UtaGVhZGVyLWFyZ3Vt ZW50cwogICAgICAgICAgICAgICAgIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6cGFyYW1ldGVycyBz cmMtYmxvY2spKSkpCiAgICAgIDs7IFRPRE8gQWRkIGFueSBvdGhlciB2YWx1ZXMgdGhhdCBuZWVk IHJlc3VsdHMgcmVtb3ZhbC4KICAgICAgKHdoZW4gKG1lbWJlciAoY2RyIChhc3NxIDpyZXN1bHRz IGFyZ3MpKQogICAgICAgICAgICAgICAgICAgICcoInJlcGxhY2UiIG5pbCkpCiAgICAgICAgKG9y Zy1iYWJlbC1yZW1vdmUtcmVzdWx0KSkpKSkKCihjbC1kZWZtZXRob2QgZHNsaWRlLS1jbGVhci1h bGwtcmVzdWx0cyAoKG9iaiBkc2xpZGUtYWN0aW9uLWJhYmVsKSkKICAoZHNsaWRlLXNlY3Rpb24t bWFwIG9iaiAnc3JjLWJsb2NrCiAgICAgICAgICAgICAgICAgICAgICAjJ2RzbGlkZS0tcmVtb3Zl LWJhYmVsLXJlc3VsdHMpKQoKKGNsLWRlZm1ldGhvZCBkc2xpZGUtLWhpZGUtbm9uLWV4cG9ydHMg KChvYmogZHNsaWRlLWFjdGlvbi1iYWJlbCkpCiAgKGRzbGlkZS1zZWN0aW9uLW1hcAogICBvYmog J3NyYy1ibG9jawogICAobGFtYmRhIChlKQogICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAgKGdv dG8tY2hhciAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmJlZ2luIGUpKQogICAgICAgKGxldCAoKGFy Z3MgKG9yZy1iYWJlbC1wYXJzZS1oZWFkZXItYXJndW1lbnRzCiAgICAgICAgICAgICAgICAgICAg KG9yZy1lbGVtZW50LXByb3BlcnR5IDpwYXJhbWV0ZXJzIGUpKSkpCiAgICAgICAgICh3aGVuICht ZW1iZXIgKGNkciAoYXNzcSA6ZXhwb3J0cyBhcmdzKSkKICAgICAgICAgICAgICAgICAgICAgICAn KCJub25lIiAicmVzdWx0cyIpKQogICAgICAgICAgIChsZXQgKChvdmVybGF5IChkc2xpZGUtaGlk ZS1lbGVtZW50IGUpKSkKICAgICAgICAgICAgIChvdmVybGF5LXB1dCBvdmVybGF5ICdkc2xpZGUt YmFiZWwtZXhwb3J0LWNvbnRyb2wgdCkKICAgICAgICAgICAgIDs7IHNyYy1ibG9jayBlbGVtZW50 cyBkbyBub3QgYXBwZWFyIHRvIGNvbnRhaW4gdGhlaXIgcmVzdWx0cywgc28gaXQKICAgICAgICAg ICAgIDs7IHNlZW1zIHdlIGRvIG5vdCBuZWVkIHRvIHVuLWhpZGUgdGhlIHJlc3VsdHMuCiAgICAg ICAgICAgICAocHVzaCBvdmVybGF5IGRzbGlkZS1vdmVybGF5cykpKSkpKSkpCgooZGVmdW4gZHNs aWRlLS1tZXRob2QtYmxvY2stcHJlZCAobWV0aG9kLW5hbWVzICZvcHRpb25hbCB1bm5hbWVkKQog ICJSZXR1cm4gYSBwcmVkaWNhdGUgdG8gbWF0Y2ggdGhlIE1FVEhPRC1OQU1FUy4KT3B0aW9uYWwg VU5OQU1FRCB3aWxsIHJldHVybiB1bm5hbWVkIGJsb2NrcyBhcyB3ZWxsLiIKICAobGFtYmRhIChi bG9jaykKICAgIChpZi1sZXQqICgoYWxsLW5hbWVzIChjYXIgKG9yZy1lbGVtZW50LXByb3BlcnR5 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6YXR0cl9kc2xpZGUgYmxvY2spKSkKICAg ICAgICAgICAgICAobmFtZXMgKHN0cmluZy1zcGxpdCBhbGwtbmFtZXMpKSkKICAgICAgICAod2hl biAoc2VxLWludGVyc2VjdGlvbiBtZXRob2QtbmFtZXMgbmFtZXMpCiAgICAgICAgICBibG9jaykK ICAgICAgKHdoZW4gdW5uYW1lZAogICAgICAgIGJsb2NrKSkpKQoKOzsgRXhlY3V0aW5nIGJhYmVs IHNlZW1zIHRvIHdpZGVuIGFuZCBhbHNvIGNyZWF0ZXMgbWVzc2FnZXMsIGFuZCB0aGlzIHdvdWxk Cjs7IHJlc3VsdCBpbiBmbGFzaGluZy4gIFJlLWRpc3BsYXkgaXMgaW5oaWJpdGVkIGF0IHRoZSBk ZWNrIGxldmVsIHRvIHByZXZlbnQKOzsgdGhlc2UgdW5wbGVhc2FudHJpZXMuICBUaGUgZG93bnNp ZGUgb2YganVzdCBpbmhpYml0aW5nIHJlLWRpc3BsYXkgdW50aWwgYWZ0ZXIKOzsgdGhlIGNhbGwg aXMgdGhhdCBpZiByZS1kaXNwbGF5IGlzIG5lZWRlZCwgc3VjaCBhcyBpZiBjYWxsaW5nIGBzbGVl cC1mb3InIGluIGEKOzsgbG9vcCwgdGhlbiBubyB1cGRhdGVzIHdpbGwgYmUgdmlzaWJsZS4gIEhv d2V2ZXIsIHRoZSB1c2VyIHNob3VsZCByZWFsbHkKOzsgaGFuZGxlIHRoaXMgd2l0aCBhIHRpbWVy IG9yIHByb2Nlc3Mgb3V0cHV0IGFuZCBwcm9jZXNzIHNlbnRpbmVsIGV0Yy4KKGRlZnVuIGRzbGlk ZS0tYmxvY2stZXhlY3V0ZSAoYmxvY2stZWxlbWVudCkKICAobGV0KiAoKGJsb2NrLWJlZ2luIChv cmctZWxlbWVudC1wcm9wZXJ0eSA6YmVnaW4gYmxvY2stZWxlbWVudCkpCiAgICAgICAgIChibG9j ay1lbmQgKG9yZy1lbGVtZW50LXByb3BlcnR5IDplbmQgYmxvY2stZWxlbWVudCkpCiAgICAgICAg IChibG9jay1tYXJrZXIgKGNvcHktbWFya2VyIGJsb2NrLWJlZ2luKSkKICAgICAgICAgKGFyZ3Mg KG9yZy1iYWJlbC1wYXJzZS1oZWFkZXItYXJndW1lbnRzCiAgICAgICAgICAgICAgICAob3JnLWVs ZW1lbnQtcHJvcGVydHkgOnBhcmFtZXRlcnMgYmxvY2stZWxlbWVudCkpKQogICAgICAgICAoZXhw b3J0LW92ZXJsYXlzIChzZXEtZmlsdGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChsYW1i ZGEgKG8pIChvdmVybGF5LWdldCBvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJ2RzbGlkZS1iYWJlbC1leHBvcnQtY29udHJvbCkpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIChvdmVybGF5cy1pbiBibG9jay1iZWdpbiBibG9jay1lbmQpKSkpCiAgICAo c2F2ZS1leGN1cnNpb24KICAgICAgKHdpdGhvdXQtcmVzdHJpY3Rpb24KICAgICAgICAoZ290by1j aGFyIGJsb2NrLWJlZ2luKQogICAgICAgIChjb25kaXRpb24tY2FzZSB1c2VyLXdyb3RlLWZsYWt5 LWJhYmVsCiAgICAgICAgICAgIDs7IHQgZm9yIGRvbid0IGNhY2hlLiAgV2UgbGlrZWx5IHdhbnQg ZWZmZWN0cwogICAgICAgICAgICAocHJvZ24KICAgICAgICAgICAgICAob3JnLWJhYmVsLWV4ZWN1 dGUtc3JjLWJsb2NrIHQpCiAgICAgICAgICAgICAgOzsgYmxvY2sgbG9jYXRpb24gY291bGQgYmUg dXBkYXRlZAogICAgICAgICAgICAgIChzZXRxIGJsb2NrLWVsZW1lbnQgKG9yZy1lbGVtZW50LWF0 LXBvaW50IGJsb2NrLW1hcmtlcikpCiAgICAgICAgICAgICAgKHNldHEgYmxvY2stYmVnaW4KICAg ICAgICAgICAgICAgICAgICAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmJlZ2luIGJsb2NrLWVsZW1l bnQpKQogICAgICAgICAgICAgIChzZXRxIGJsb2NrLWVuZCAob3JnLWVsZW1lbnQtcHJvcGVydHkg OmVuZCBibG9jay1lbGVtZW50KSkKICAgICAgICAgICAgICAoZHNsaWRlLS1iYXNlLWJ1ZmZlci1o aWdobGlnaHQtcmVnaW9uCiAgICAgICAgICAgICAgIGJsb2NrLWJlZ2luIGJsb2NrLWVuZCAnZHNs aWRlLWJhYmVsLXN1Y2Nlc3MtaGlnaGxpZ2h0KQogICAgICAgICAgICAgIDs7IHVwZGF0ZWQgaGlk aW5nIG92ZXJsYXlzIHRvIG5vdCBvYnNjdXJlIHJlc3VsdHMKICAgICAgICAgICAgICAod2hlbiAo c3RyaW5nPSAoY2RyIChhc3NxIDpleHBvcnRzIGFyZ3MpKSAicmVzdWx0cyIpCiAgICAgICAgICAg ICAgICAobWFwYyAobGFtYmRhIChvdmVybGF5KQogICAgICAgICAgICAgICAgICAgICAgICAobW92 ZS1vdmVybGF5IG92ZXJsYXkgYmxvY2stYmVnaW4gYmxvY2stZW5kKSkKICAgICAgICAgICAgICAg ICAgICAgIGV4cG9ydC1vdmVybGF5cykpKQogICAgICAgICAgKChkZWJ1ZyBlcnJvcikKICAgICAg ICAgICAoZHNsaWRlLS1iYXNlLWJ1ZmZlci1oaWdobGlnaHQtcmVnaW9uCiAgICAgICAgICAgIGJs b2NrLWJlZ2luIGJsb2NrLWVuZCAnZHNsaWRlLWJhYmVsLWVycm9yLWhpZ2hsaWdodCkKICAgICAg ICAgICA7OyBUT0RPIGNvbnNvbGlkYXRlIG1vdmluZyB0aGUgcG9pbnQgJiB3aW5kb3cgcG9pbnRz IGluIGJhc2UgYnVmZmVyCiAgICAgICAgICAgOzsgWFhYIG91dCBvZiBzdGVwIHdpdGggb3RoZXIg YnVmZmVyIG1vdmVtZW50CiAgICAgICAgICAgKHNldC1idWZmZXIgKG9yZWYgZHNsaWRlLS1kZWNr IGJhc2UtYnVmZmVyKSkKICAgICAgICAgICAoZ290by1jaGFyIGJsb2NrLWJlZ2luKQogICAgICAg ICAgIChpZi1sZXQgKCh3aW5kb3dzIChnZXQtYnVmZmVyLXdpbmRvdy1saXN0KSkpCiAgICAgICAg ICAgICAgIChwcm9nbgogICAgICAgICAgICAgICAgIChtYXBjIChsYW1iZGEgKHcpIChzZXQtd2lu ZG93LXBvaW50IHcgYmxvY2stYmVnaW4pKSB3aW5kb3dzKQogICAgICAgICAgICAgICAgIChzZWxl Y3Qtd2luZG93IChjYXIgd2luZG93cykpKQogICAgICAgICAgICAgOzsgVE9ETyBhc2tpbmcgYHkt b3Itbi1wJyBkZWZpZXMgdGhlIHR3by1idXR0b24gaW50ZXJmYWNlCiAgICAgICAgICAgICAod2hl biAoeS1vci1uLXAgIkJsb2NrIGZhaWxlZC4gIFZpc2l0IGZhaWxlZCBibG9jaz8iKQogICAgICAg ICAgICAgICAoc3dpdGNoLXRvLWJ1ZmZlciAob3JlZiBkc2xpZGUtLWRlY2sgYmFzZS1idWZmZXIp KQogICAgICAgICAgICAgICAoZ290by1jaGFyIGJsb2NrLWJlZ2luKQogICAgICAgICAgICAgICA7 OyBUT0RPIHJlbW92ZSBvdmVybGF5cyBhZnRlciBvbmUgY29tbWFuZCwgbGlrZSBwdWxzZQogICAg ICAgICAgICAgICAocmVjZW50ZXIpKSkKICAgICAgICAgICA7OyBUT0RPIG9wdGlvbiB0byB0cnkg YWdhaW4gLyBza2lwCiAgICAgICAgICAgOzsgVE9ETyBpbnRlZ3JhdGUgd2l0aCBkc2xpZGUtLWRl YnVnCiAgICAgICAgICAgKGVycm9yICJCYWJlbCBibG9jayBhdCAlcyBmYWlsZWQ6ICVzIgogICAg ICAgICAgICAgICAgICAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmJlZ2luIGJsb2NrLWVsZW1lbnQp CiAgICAgICAgICAgICAgICAgIHVzZXItd3JvdGUtZmxha3ktYmFiZWwpKSkpKSkpCgooY2wtZGVm bWV0aG9kIGRzbGlkZS0tZ2V0LWJsb2NrcyAoKG9iaiBkc2xpZGUtYWN0aW9uLWJhYmVsKSAmb3B0 aW9uYWwgbWV0aG9kLW5hbWUpCiAgIlJldHVybiBPQkoncyBibG9jayB3aXRoIGtleXdvcmQgdmFs dWUgTUVUSE9ELU5BTUUuClRoZSBhZmZpbGlhdGVkIGtleXdvcmRzIGxvb2sgbGlrZToKCiMrYXR0 cl9kc2xpZGU6IE1FVEhPRC1OQU1FIE1FVEhPRC1OQU1FIE1FVEhPRC1OQU1FCgpUaGUgcG9zc2li bGUgdmFsdWVzIGZvciBNRVRIT0QtTkFNRSBjb3JyZXNwb25kIHRvIHRoZQpzdGF0ZWZ1bC1zZXF1 ZW5jZSBjbGFzcyBtZXRob2RzLiAgTUVUSE9ELU5BTUUgaXMgYSBzdHJpbmcuIgogIChsZXQgKChw cmVkaWNhdGUgKGRzbGlkZS0tbWV0aG9kLWJsb2NrLXByZWQgKGxpc3QgbWV0aG9kLW5hbWUpKSkp CiAgICAoZHNsaWRlLXNlY3Rpb24tbWFwIG9iaiAnc3JjLWJsb2NrIHByZWRpY2F0ZSkpKQoKKGNs LWRlZm1ldGhvZCBkc2xpZGUtZm9yd2FyZCAoKG9iaiBkc2xpZGUtYWN0aW9uLWJhYmVsKSkKICAo d2hlbi1sZXQqICgocHJlZGljYXRlIChkc2xpZGUtLW1ldGhvZC1ibG9jay1wcmVkCiAgICAgICAg ICAgICAgICAgICAgICAgICAgJygiZm9yd2FyZCIgImJvdGgiKSB0KSkKICAgICAgICAgICAgICAo bmV4dCAoZHNsaWRlLXNlY3Rpb24tbmV4dCBvYmogJ3NyYy1ibG9jayBwcmVkaWNhdGUpKSkKICAg IChkc2xpZGUtLWJsb2NrLWV4ZWN1dGUgbmV4dCkKICAgIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6 YmVnaW4gbmV4dCkpKQoKKGNsLWRlZm1ldGhvZCBkc2xpZGUtYmFja3dhcmQgKChvYmogZHNsaWRl LWFjdGlvbi1iYWJlbCkpCiAgKHdoZW4tbGV0KiAoKHByZWRpY2F0ZSAoZHNsaWRlLS1tZXRob2Qt YmxvY2stcHJlZAogICAgICAgICAgICAgICAgICAgICAgICAgICcoImJhY2t3YXJkIiAiYm90aCIp KSkKICAgICAgICAgICAgICAocHJldiAoZHNsaWRlLXNlY3Rpb24tcHJldmlvdXMgb2JqICdzcmMt YmxvY2sgcHJlZGljYXRlKSkpCiAgICAoZHNsaWRlLS1ibG9jay1leGVjdXRlIHByZXYpCiAgICAo b3JnLWVsZW1lbnQtcHJvcGVydHkgOmJlZ2luIHByZXYpKSkKCihjbC1kZWZtZXRob2QgZHNsaWRl LWJlZ2luICgob2JqIGRzbGlkZS1hY3Rpb24tYmFiZWwpKQogICh3aGVuIChvcmVmIG9iaiByZW1v dmUtcmVzdWx0cykKICAgIChkc2xpZGUtLWNsZWFyLWFsbC1yZXN1bHRzIG9iaikpCiAgKGRzbGlk ZS0taGlkZS1ub24tZXhwb3J0cyBvYmopCiAgKHdoZW4tbGV0ICgoYmxvY2stZWxlbWVudHMgKGRz bGlkZS0tZ2V0LWJsb2NrcyBvYmogImJlZ2luIikpKQogICAgKG1hcGMgIydkc2xpZGUtLWJsb2Nr LWV4ZWN1dGUgYmxvY2stZWxlbWVudHMpKSkKCihjbC1kZWZtZXRob2QgZHNsaWRlLWVuZCAoKG9i aiBkc2xpZGUtYWN0aW9uLWJhYmVsKSkKICA7OyBEbyBub3QgdXNlIHRoZSBkZWZhdWx0IGltcGxl bWVudGF0aW9uIGJlY2F1c2UgaXQgd2lsbCBwbGF5IGFsbCBibG9ja3MKICA7OyBmb3J3YXJkLgog ICh3aGVuIChvcmVmIG9iaiByZW1vdmUtcmVzdWx0cykKICAgIChkc2xpZGUtLWNsZWFyLWFsbC1y ZXN1bHRzIG9iaikpCiAgKGRzbGlkZS0taGlkZS1ub24tZXhwb3J0cyBvYmopCiAgKGRzbGlkZS1t YXJrZXIgb2JqIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6ZW5kIChkc2xpZGUtaGVhZGluZyBvYmop KSkKICAod2hlbi1sZXQgKChibG9jay1lbGVtZW50cyAoZHNsaWRlLS1nZXQtYmxvY2tzIG9iaiAi ZW5kIikpKQogICAgKG1hcGMgIydkc2xpZGUtLWJsb2NrLWV4ZWN1dGUgYmxvY2stZWxlbWVudHMp KSkKCihjbC1kZWZtZXRob2QgZHNsaWRlLWZpbmFsIDphZnRlciAoKG9iaiBkc2xpZGUtYWN0aW9u LWJhYmVsKSkKICAod2hlbi1sZXQgKChibG9jay1lbGVtZW50cyAoZHNsaWRlLS1nZXQtYmxvY2tz IG9iaiAiZmluYWwiKSkpCiAgICAobWFwYyAjJ2RzbGlkZS0tYmxvY2stZXhlY3V0ZSBibG9jay1l bGVtZW50cykpCiAgKHdoZW4gKG9yZWYgb2JqIHJlbW92ZS1yZXN1bHRzKQogICAgKGRzbGlkZS0t Y2xlYXItYWxsLXJlc3VsdHMgb2JqKSkpCgo7OyAqKiBJbWFnZSBBY3Rpb24KCihkZWZjbGFzcyBk c2xpZGUtYWN0aW9uLWltYWdlIChkc2xpZGUtYWN0aW9uKQogICgoa2lsbC1idWZmZXIKICAgIDpp bml0Zm9ybSBuaWwKICAgIDppbml0YXJnIDpraWxsLWJ1ZmZlcgogICAgOmRvY3VtZW50YXRpb24g IktpbGwgdGhlIGJ1ZmZlci4gIERlZmF1bHQgbmlsIGp1c3QgYnVyaWVzIGl0LiIpCiAgIChzbGlk ZS1kaXNwbGF5CiAgICA6aW5pdGZvcm0gdAogICAgOmluaXRhcmcgOnNsaWRlLWRpc3BsYXkKICAg IDpkb2N1bWVudGF0aW9uICJTaG93IGltYWdlcyBpbmxpbmUgb24gdGhlIHNsaWRlLgp0IC0gYmFz aWNhbGx5IHRoZSBzYW1lIGFzIGNhbGxpbmcgYG9yZy1kaXNwbGF5LWlubGluZS1pbWFnZXMnLgpy ZXZlYWwgLSBpbWFnZXMgd2lsbCBiZSByZXZlYWxlZCBvbmUgYnkgb25lLgpuaWwgLSBkbyBub3Qg c2hvdyBpbWFnZXMgb24gdGhlIHNsaWRlLiIpCiAgIChzdGFuZGFsb25lLWRpc3BsYXkKICAgIDpp bml0Zm9ybSB0CiAgICA6aW5pdGFyZyA6c3RhbmRhbG9uZS1kaXNwbGF5CiAgICA6ZG9jdW1lbnRh dGlvbiAiU2hvdyBpbWFnZXMgaW4gdGhlaXIgb3duIGJ1ZmZlci4KdCAtIHNhbWUgYXMgd2luZG93 Lgp3aW5kb3cgLSB1c2UganVzdCB0aGUgY3VycmVudCB3aW5kb3cKZnVsbC1mcmFtZSAtIHVzZSB0 aGUgZW50aXJlIGZyYW1lIHRvIHNob3cgdGhlIGltYWdlLgpuaWwgLSBkbyBub3Qgc2hvdyBpbWFn ZXMgaW4gdGhlaXIgb3duIGJ1ZmZlci4iKQogICAoaGlkZS1tb2RlLWxpbmUKICAgIDppbml0Zm9y bSB0CiAgICA6aW5pdGFyZyA6aGlkZS1tb2RlLWxpbmUKICAgIDpkb2N1bWVudGF0aW9uICJUdXJu IG9uIGBoaWRlLW1vZGUtbGluZS1tb2RlJy4KT25seSBhZmZlY3RzIHN0YW5kYWxvbmUtZGlzcGxh eS4iKQogICAoaW5jbHVkZS1saW5rZWQKICAgIDppbml0Zm9ybSBuaWwKICAgIDppbml0YXJnIDpp bmNsdWRlLWxpbmtlZAogICAgOmRvY3VtZW50YXRpb24gIkxvYWRzIGxpbmtlZCBpbWFnZXMuICBT ZWUgYG9yZy1kaXNwbGF5LWlubGluZS1pbWFnZXMnLiIpCiAgIChyZWZyZXNoCiAgICA6aW5pdGZv cm0gbmlsCiAgICA6aW5pdGFyZyA6cmVmcmVzaAogICAgOmRvY3VtZW50YXRpb24gIlJlbG9hZCBp bWFnZXMuICBTZWUgYG9yZy1kaXNwbGF5LWlubGluZS1pbWFnZXMnLiIpCiAgIChvdmVybGF5cwog ICAgOmluaXRmb3JtIG5pbAogICAgOmRvY3VtZW50YXRpb24gIk92ZXJsYXlzIHVzZWQgdG8gaGlk ZSBpbWFnZXMgZm9yIHJldmVhbC4iKSkKICAiU2hvdyBpbWFnZXMuIikKCihjbC1kZWZtZXRob2Qg ZHNsaWRlLWJlZ2luICgob2JqIGRzbGlkZS1hY3Rpb24taW1hZ2UpKQogIChpZiAob3JlZiBvYmog c2xpZGUtZGlzcGxheSkKICAgICAgKHByb2duCiAgICAgICAgKG9yZy1kaXNwbGF5LWlubGluZS1p bWFnZXMKICAgICAgICAgKG9yZWYgb2JqIGluY2x1ZGUtbGlua2VkKQogICAgICAgICAob3JlZiBv YmogcmVmcmVzaCkKICAgICAgICAgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpiZWdpbiAoZHNsaWRl LWhlYWRpbmcgb2JqKSkKICAgICAgICAgKG9yZy1lbGVtZW50LXByb3BlcnR5IDplbmQgKGRzbGlk ZS1oZWFkaW5nIG9iaikpKQogICAgICAgIDs7IFdoZW4gcmV2ZWFsaW5nLCBrZWVwIHRyYWNrIG9m IG91ciBvdmVybGF5cwogICAgICAgICh3aGVuIChlcSAob3JlZiBvYmogc2xpZGUtZGlzcGxheSkg J3JldmVhbCkKICAgICAgICAgIChkc2xpZGUtc2VjdGlvbi1tYXAKICAgICAgICAgICBvYmogJ2xp bmsKICAgICAgICAgICAobGFtYmRhIChlKQogICAgICAgICAgICAgKGxldCAoKG92ZXJsYXkgKG1h a2Utb3ZlcmxheQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxLSAob3JnLWVsZW1lbnQt cHJvcGVydHkgOmJlZ2luIGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcmctZWxl bWVudC1wcm9wZXJ0eSA6ZW5kIGUpKSkpCiAgICAgICAgICAgICAgIChvdmVybGF5LXB1dCBvdmVy bGF5ICdpbnZpc2libGUgdCkKICAgICAgICAgICAgICAgKHB1c2ggb3ZlcmxheSAob3JlZiBvYmog b3ZlcmxheXMpKSkpKSkpCiAgICA7OyBJZiBqdXN0IGhpZGluZyB0aGUgaW1hZ2VzLCBkdW1wIHRo ZSBvdmVybGF5cyBpbnRvIGBkc2xpZGUtb3ZlcmxheXMnLgogICAgKGRzbGlkZS1zZWN0aW9uLW1h cAogICAgIG9iaiAnbGluawogICAgIChsYW1iZGEgKGUpCiAgICAgICAobGV0ICgob3ZlcmxheSAo bWFrZS1vdmVybGF5CiAgICAgICAgICAgICAgICAgICAgICAgKDEtIChvcmctZWxlbWVudC1wcm9w ZXJ0eSA6YmVnaW4gZSkpCiAgICAgICAgICAgICAgICAgICAgICAgKG9yZy1lbGVtZW50LXByb3Bl cnR5IDplbmQgZSkpKSkKICAgICAgICAgKG92ZXJsYXktcHV0IG92ZXJsYXkgJ2ludmlzaWJsZSB0 KQogICAgICAgICAob3ZlcmxheS1wdXQgb3ZlcmxheSAncHJpb3JpdHkgMTAwMCkKICAgICAgICAg KHB1c2ggb3ZlcmxheSBkc2xpZGUtb3ZlcmxheXMpKSkpKSkKCjs7IFRPRE8gaW1wbGVtZW50YXRp b24gcmVsaWVzIG9uIG9yZyBsaW5rIG9wZW5pbmcuICBEb2VzIG5vdCBjaGVjayBmb3IgZmlsZSBv cgo7OyBjaGVjayB0aGF0IGltYWdlIG1vZGUgZGlzcGxheXMgdGhlIGxpbmsgY29ycmVjdGx5Lgo7 OyBUT0RPIG1ha2UgaXQganVzdCBhIGxpbmsgYWN0aW9uPwooY2wtZGVmbWV0aG9kIGRzbGlkZS1m b3J3YXJkICgob2JqIGRzbGlkZS1hY3Rpb24taW1hZ2UpKQogIDs7IFdoZW4ganVzdCByZXZlYWxp bmcgaW1hZ2VzIHdpdGhvdXQgZG9pbmcgc3RhbmRhbG9uZSBkaXNwbGF5LCB3ZSBjYW4KICA7OyBy ZXZlcnNlIGluIHBsYWNlLCBoaWRpbmcgYW5kIHNob3dpbmcgdGhlIHNhbWUgaW1hZ2Ugd2hlbiBj aGFuZ2luZwogIDs7IGRpcmVjdGlvbnMuICBXaGVuIGRvaW5nIHN0YW5kYWxvbmUgYnV0IG5vdCBy ZXZlYWwsIHdlIGRvIG5vdCByZXZlcnNlIGluCiAgOzsgcGxhY2UgYXQgYWxsLiAgV2hlbiBjb21i aW5pbmcgc3RhbmRhbG9uZSBhbmQgcmV2ZWFsLCB0aGUgc3RhbmRhbG9uZQogIDs7IGNhbGxiYWNr IGltcGxlbWVudHMgcmV2ZXJzZS1pbi1wbGFjZSBieSBpdHNlbGYuCiAgKGxldCogKChzdGFuZGFs b25lLWRpc3BsYXkgKG9yZWYgb2JqIHN0YW5kYWxvbmUtZGlzcGxheSkpCiAgICAgICAgIChzbGlk ZS1kaXNwbGF5IChvcmVmIG9iaiBzbGlkZS1kaXNwbGF5KSkKICAgICAgICAgKGluLXBsYWNlIChh bmQgKGVxIHNsaWRlLWRpc3BsYXkgJ3JldmVhbCkKICAgICAgICAgICAgICAgICAgICAgICAgKG51 bGwgc3RhbmRhbG9uZS1kaXNwbGF5KSkpKQogICAgKHdoZW4tbGV0ICgobGluayAoZHNsaWRlLXNl Y3Rpb24tbmV4dCBvYmogJ2xpbmsgbmlsIGluLXBsYWNlKSkpCiAgICAgIDs7IFNob3cgdGhlIGlt YWdlIHN0YW5kYWxvbmUKICAgICAgKHdoZW4gKG1lbWJlciBzdGFuZGFsb25lLWRpc3BsYXkgJyhm dWxsLWZyYW1lIHdpbmRvdyB0KSkKICAgICAgICAoZHNsaWRlLXB1c2gtd2luZG93LWNvbmZpZyBu aWwpCiAgICAgICAgOzsgVE9ETyBzdWNjZXNzIGRldGVjdGlvbgogICAgICAgIChsZXQgKChvcmct bGluay1mcmFtZS1zZXR1cCAnKChmaWxlIC4gZmluZC1maWxlKSkpCiAgICAgICAgICAgICAgKGRp c3BsYXktYnVmZmVyLW92ZXJyaWRpbmctYWN0aW9uCiAgICAgICAgICAgICAgICh3aGVuIChlcSBz dGFuZGFsb25lLWRpc3BsYXkgJ2Z1bGwtZnJhbWUpCiAgICAgICAgICAgICAgICAgJyhkaXNwbGF5 LWJ1ZmZlci1mdWxsLWZyYW1lKSkpKQogICAgICAgICAgKG9yZy1saW5rLW9wZW4gbGluaykpCiAg ICAgICAgKHdoZW4gKGVxIChidWZmZXItbG9jYWwtdmFsdWUgJ21ham9yLW1vZGUgKGN1cnJlbnQt YnVmZmVyKSkgJ2ltYWdlLW1vZGUpCiAgICAgICAgICAod2hlbiAob3JlZiBvYmogaGlkZS1tb2Rl LWxpbmUpCiAgICAgICAgICAgICh3aGVuIChhbmQgKHJlcXVpcmUgJ2hpZGUtbW9kZS1saW5lIG5p bCB0KQogICAgICAgICAgICAgICAgICAgICAgIChmYm91bmRwICdoaWRlLW1vZGUtbGluZS1tb2Rl KSkKICAgICAgICAgICAgICAoaGlkZS1tb2RlLWxpbmUtbW9kZSAxKSkpCiAgICAgICAgICAoaW1h Z2UtdHJhbnNmb3JtLWZpdC10by13aW5kb3cpCiAgICAgICAgICAobGV0ICgoaW1hZ2UtYnVmZmVy IChjdXJyZW50LWJ1ZmZlcikpKQogICAgICAgICAgICAoZHNsaWRlLXB1c2gtc3RlcAogICAgICAg ICAgICAgKGxhbWJkYSAoZGlyZWN0aW9uKQogICAgICAgICAgICAgICAod2hlbiAoYnVmZmVyLWxp dmUtcCBpbWFnZS1idWZmZXIpCiAgICAgICAgICAgICAgICAgKGlmIChvcmVmIG9iaiBraWxsLWJ1 ZmZlcikKICAgICAgICAgICAgICAgICAgICAgKGtpbGwtYnVmZmVyIGltYWdlLWJ1ZmZlcikKICAg ICAgICAgICAgICAgICAgIChidXJ5LWJ1ZmZlciBpbWFnZS1idWZmZXIpKSkKICAgICAgICAgICAg ICAgOzsgSWYgbm90IGRvaW5nIHJldmVhbCwgcmV0dXJuIG5pbCB0byBub3QgY291bnQgYXMgYSBz dGVwLgogICAgICAgICAgICAgICA7OyBJZiBkb2luZyByZXZlYWwsIGdvaW5nIGJhY2t3YXJkcyBu ZWVkcyB0byBjb3VudCBhcyBhIHN0ZXAuCiAgICAgICAgICAgICAgICh3aGVuIChlcSBzbGlkZS1k aXNwbGF5ICdyZXZlYWwpCiAgICAgICAgICAgICAgICAgKGVxIGRpcmVjdGlvbiAnYmFja3dhcmQp KSkpKSkpCgogICAgICA7OyBXaGVuIHJldmVhbGluZyBpbWFnZXMsIGlmIG9uZSBvZiBvdXIgb3Zl cmxheXMgaXMgaGlkaW5nIHRoaXMgaW1hZ2UsCiAgICAgIDs7IHJlbW92ZSBpdC4KICAgICAgKHdo ZW4gKGVxIChvcmVmIG9iaiBzbGlkZS1kaXNwbGF5KSAncmV2ZWFsKQogICAgICAgIChsZXQgKChs aW5rLW92ZXJsYXlzIChzZXEtaW50ZXJzZWN0aW9uIChvcmVmIG9iaiBvdmVybGF5cykKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3ZlcmxheXMtYXQgKG9y Zy1lbGVtZW50LXByb3BlcnR5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA6YmVnaW4gbGluaykpKSkpCiAgICAgICAgICAob3NldCBv Ymogb3ZlcmxheXMgKHNlcS1kaWZmZXJlbmNlIChvcmVmIG9iaiBvdmVybGF5cykgbGluay1vdmVy bGF5cykpCiAgICAgICAgICAobWFwYyAjJ2RlbGV0ZS1vdmVybGF5IGxpbmstb3ZlcmxheXMpKSkK CiAgICAgIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6ZW5kIGxpbmspKSkpCgooY2wtZGVmbWV0aG9k IGRzbGlkZS1iYWNrd2FyZCAoKG9iaiBkc2xpZGUtYWN0aW9uLWltYWdlKSkKICA7OyBXaGVuIGp1 c3QgcmV2ZWFsaW5nIGltYWdlcyB3aXRob3V0IGRvaW5nIHN0YW5kYWxvbmUgZGlzcGxheSwgd2Ug Y2FuCiAgOzsgcmV2ZXJzZSBpbiBwbGFjZSwgaGlkaW5nIGFuZCBzaG93aW5nIHRoZSBzYW1lIGlt YWdlIHdoZW4gY2hhbmdpbmcKICA7OyBkaXJlY3Rpb25zLiAgV2hlbiBkb2luZyBzdGFuZGFsb25l IGJ1dCBub3QgcmV2ZWFsLCB3ZSBkbyBub3QgcmV2ZXJzZSBpbgogIDs7IHBsYWNlIGF0IGFsbC4g IFdoZW4gY29tYmluaW5nIHN0YW5kYWxvbmUgYW5kIHJldmVhbCwgdGhlIHN0YW5kYWxvbmUKICA7 OyBjYWxsYmFjayBpbXBsZW1lbnRzIHJldmVyc2UtaW4tcGxhY2UgYnkgaXRzZWxmLgogIChsZXQq ICgoc3RhbmRhbG9uZS1kaXNwbGF5IChvcmVmIG9iaiBzdGFuZGFsb25lLWRpc3BsYXkpKQogICAg ICAgICAoc2xpZGUtZGlzcGxheSAob3JlZiBvYmogc2xpZGUtZGlzcGxheSkpKQogICAgKHdoZW4t bGV0ICgobGluayAoZHNsaWRlLXNlY3Rpb24tcHJldmlvdXMgb2JqICdsaW5rIG5pbCkpKQogICAg ICAod2hlbiAobWVtYmVyIHN0YW5kYWxvbmUtZGlzcGxheSAnKGZ1bGwtZnJhbWUgd2luZG93IHQp KQogICAgICAgIChkc2xpZGUtcHVzaC13aW5kb3ctY29uZmlnIG5pbCkKICAgICAgICA7OyBUT0RP IHN1Y2Nlc3MgZGV0ZWN0aW9uCiAgICAgICAgKGxldCAoKG9yZy1saW5rLWZyYW1lLXNldHVwICco KGZpbGUgLiBmaW5kLWZpbGUpKSkKICAgICAgICAgICAgICAoZGlzcGxheS1idWZmZXItb3ZlcnJp ZGluZy1hY3Rpb24KICAgICAgICAgICAgICAgKHdoZW4gKGVxIHN0YW5kYWxvbmUtZGlzcGxheSAn ZnVsbC1mcmFtZSkKICAgICAgICAgICAgICAgICAnKGRpc3BsYXktYnVmZmVyLWZ1bGwtZnJhbWUp KSkpCiAgICAgICAgICAob3JnLWxpbmstb3BlbiBsaW5rKSkKICAgICAgICAod2hlbiAoZXEgKGJ1 ZmZlci1sb2NhbC12YWx1ZSAnbWFqb3ItbW9kZSAoY3VycmVudC1idWZmZXIpKQogICAgICAgICAg ICAgICAgICAnaW1hZ2UtbW9kZSkKICAgICAgICAgICh3aGVuIChvcmVmIG9iaiBoaWRlLW1vZGUt bGluZSkKICAgICAgICAgICAgKHdoZW4gKGFuZCAocmVxdWlyZSAnaGlkZS1tb2RlLWxpbmUgbmls IHQpCiAgICAgICAgICAgICAgICAgICAgICAgKGZib3VuZHAgJ2hpZGUtbW9kZS1saW5lLW1vZGUp KQogICAgICAgICAgICAgIChoaWRlLW1vZGUtbGluZS1tb2RlIDEpKSkKICAgICAgICAgIChpbWFn ZS10cmFuc2Zvcm0tZml0LXRvLXdpbmRvdykKICAgICAgICAgIChsZXQgKChpbWFnZS1idWZmZXIg KGN1cnJlbnQtYnVmZmVyKSkpCiAgICAgICAgICAgIChkc2xpZGUtcHVzaC1zdGVwCiAgICAgICAg ICAgICAobGFtYmRhIChfKQogICAgICAgICAgICAgICAod2hlbiAoYnVmZmVyLWxpdmUtcCBpbWFn ZS1idWZmZXIpCiAgICAgICAgICAgICAgICAgKGlmIChvcmVmIG9iaiBraWxsLWJ1ZmZlcikKICAg ICAgICAgICAgICAgICAgICAgKGtpbGwtYnVmZmVyIGltYWdlLWJ1ZmZlcikKICAgICAgICAgICAg ICAgICAgIChidXJ5LWJ1ZmZlciBpbWFnZS1idWZmZXIpKSkpKSkpKQogICAgICAod2hlbiAoZXEg c2xpZGUtZGlzcGxheSAncmV2ZWFsKQogICAgICAgIChsZXQgKChvdmVybGF5IChtYWtlLW92ZXJs YXkKICAgICAgICAgICAgICAgICAgICAgICAgKDEtIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6YmVn aW4gbGluaykpCiAgICAgICAgICAgICAgICAgICAgICAgIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6 ZW5kIGxpbmspKSkpCiAgICAgICAgICAob3ZlcmxheS1wdXQgb3ZlcmxheSAnaW52aXNpYmxlIHQp CiAgICAgICAgICAob3ZlcmxheS1wdXQgb3ZlcmxheSAncHJpb3JpdHkgMTAwMCkKICAgICAgICAg IChwdXNoIG92ZXJsYXkgKG9yZWYgb2JqIG92ZXJsYXlzKSkpKQogICAgICAob3JnLWVsZW1lbnQt cHJvcGVydHkgOmJlZ2luIGxpbmspKSkpCgooY2wtZGVmbWV0aG9kIGRzbGlkZS1maW5hbCA6YWZ0 ZXIgKChvYmogZHNsaWRlLWFjdGlvbi1pbWFnZSkpCiAgKG1hcGMgIydkZWxldGUtb3ZlcmxheSAo b3JlZiBvYmogb3ZlcmxheXMpKSkKCihjbC1kZWZtZXRob2QgZHNsaWRlLWVuZCAoKG9iaiBkc2xp ZGUtYWN0aW9uLWltYWdlKSkKICAoZHNsaWRlLW1hcmtlciBvYmogKG9yZy1lbGVtZW50LXByb3Bl cnR5IDplbmQgKGRzbGlkZS1oZWFkaW5nIG9iaikpKQogIChpZiAob3JlZiBvYmogc2xpZGUtZGlz cGxheSkKICAgICAgKHByb2duCiAgICAgICAgKG9yZy1kaXNwbGF5LWlubGluZS1pbWFnZXMKICAg ICAgICAgKG9yZWYgb2JqIGluY2x1ZGUtbGlua2VkKQogICAgICAgICAob3JlZiBvYmogcmVmcmVz aCkKICAgICAgICAgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpiZWdpbiAoZHNsaWRlLWhlYWRpbmcg b2JqKSkKICAgICAgICAgKG9yZy1lbGVtZW50LXByb3BlcnR5IDplbmQgKGRzbGlkZS1oZWFkaW5n IG9iaikpKSkKICAgIDs7IElmIGp1c3QgaGlkaW5nIHRoZSBpbWFnZXMsIGR1bXAgdGhlIG92ZXJs YXlzIGludG8gYGRzbGlkZS1vdmVybGF5cycuCiAgICAoZHNsaWRlLXNlY3Rpb24tbWFwCiAgICAg b2JqICdsaW5rCiAgICAgKGxhbWJkYSAoZSkKICAgICAgIChsZXQgKChvdmVybGF5IChtYWtlLW92 ZXJsYXkKICAgICAgICAgICAgICAgICAgICAgICAoMS0gKG9yZy1lbGVtZW50LXByb3BlcnR5IDpi ZWdpbiBlKSkKICAgICAgICAgICAgICAgICAgICAgICAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmVu ZCBlKSkpKQogICAgICAgICAob3ZlcmxheS1wdXQgb3ZlcmxheSAnaW52aXNpYmxlIHQpCiAgICAg ICAgIChvdmVybGF5LXB1dCBvdmVybGF5ICdwcmlvcml0eSAxMDAwKQogICAgICAgICAocHVzaCBv dmVybGF5IGRzbGlkZS1vdmVybGF5cykpKSkpKQoKOzsgKiBTbGlkZSBBY3Rpb25zCjs7IEEgc2xp ZGUgYWN0aW9uIHdpbGwgZ2VuZXJhbGx5IGNvbnRyb2wgdGhlIHJlc3RyaWN0aW9uLCBoeWRyYXRl IGNoaWxkcmVuLCBhbmQKOzsgcGFzcyB0aHJvdWdoIGBkc2xpZGUtc3RhdGVmdWwtc2VxdWVuY2Un IGNhbGxzIHRvIGNoaWxkcmVuLiAgVGhlcmUgY291bGQgYmUKOzsgbXVsdGlwbGUgY2hpbGRyZW4u ICBDaGlsZHJlbiB0aGF0IGFyZSBkaXNwbGF5ZWQgaW4gdGhlIHNhbWUgcmVzdHJpY3Rpb24gYXMK OzsgdGhlIHBhcmVudCB3aWxsIGJlIGh5ZHJhdGVkIHdpdGggYSBub24tbmlsIGBpbmxpbmUnIHNs b3QgdmFsdWUsIHdoaWNoIHRlbGxzCjs7IHRoZW0gbm90IHRvIHRyeSB0byBtYW5hZ2UgdGhlIHJl c3RyaWN0aW9uIG9uIHRoZWlyIG93bi4gIFRoaXMgYWxzbyBtYWtlcwo7OyB0aGVpciBzZWN0aW9u IGFjdGlvbnMgaW5saW5lLgoKKGRlZmNsYXNzIGRzbGlkZS1zbGlkZS1hY3Rpb24gKGRzbGlkZS1h Y3Rpb24pCiAgKChicmVhZGNydW1icwogICAgOmluaXRmb3JtIHQKICAgIDppbml0YXJnIDpicmVh ZGNydW1icwogICAgOmRvY3VtZW50YXRpb24gIlNob3cgYnJlYWRjcnVtYnMgaW4gdGhlIGhlYWRl ci4iKQogICAoaGVhZGVyCiAgICA6aW5pdGZvcm0gdAogICAgOmluaXRhcmcgOmhlYWRlcgogICAg OmRvY3VtZW50YXRpb24gIlNob3cgaGVhZGVyLiIpKQogICJCYXNlIGNsYXNzIGZvciBzbGlkZSBh Y3Rpb25zLiIKICA6YWJzdHJhY3QgdCkKCihjbC1kZWZnZW5lcmljIGRzbGlkZS1uYXJyb3cgKG9i aiAmb3B0aW9uYWwgd2l0aC1jaGlsZHJlbikKICAiTmFycm93IHRvIE9CSidzIGhlYWRpbmcKT3B0 aW9uYWwgV0lUSC1DSElMRFJFTiB3aWxsIGluY2x1ZGUgdGhlIGNoaWxkIGhlYWRpbmdzIGluIHRo ZQpyZXN0cmljdGlvbi4KCklubGluZSBjaGlsZHJlbiBoYXZlIHRoZWlyIGBpbmxpbmUnIHNsb3Qg c2V0IHRvIG5vbi1uaWwgYW5kIHdpbGwKbm90IGF0dGVtcHQgdG8gbmFycm93IGF0IGFsbC4KClRo aXMgZnVuY3Rpb24gbXVzdCByZXR1cm4gbmlsIHdoZW4gaXQgcGVyZm9ybXMgbm8gdXBkYXRlIHRv IHRoZQpyZXN0cmljdGlvbiwgbWVhbmluZyBubyBwcm9ncmVzcyB3YXMgbWFkZS4iKQoKKGNsLWRl Zm1ldGhvZCBkc2xpZGUtbmFycm93ICgob2JqIGRzbGlkZS1zbGlkZS1hY3Rpb24pCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJm9wdGlvbmFsIHdpdGgtY2hpbGRyZW4pCiAgKHVubGVzcyAo b3JlZiBvYmogaW5saW5lKQogICAgKGxldCogKChoZWFkaW5nIChkc2xpZGUtaGVhZGluZyBvYmop KQogICAgICAgICAgIChiZWdpbiAob3JlZiBvYmogYmVnaW4pKQogICAgICAgICAgIChlbmQgKGlm IHdpdGgtY2hpbGRyZW4KICAgICAgICAgICAgICAgICAgICAob3JnLWVsZW1lbnQtcHJvcGVydHkg OmVuZCBoZWFkaW5nKQogICAgICAgICAgICAgICAgICAoZHNsaWRlLS1zZWN0aW9uLWVuZCBoZWFk aW5nKSkpKQogICAgICAodW5sZXNzIChhbmQgKDw9IChwb2ludC1taW4pIGJlZ2luKQogICAgICAg ICAgICAgICAgICAgKD49IChwb2ludC1tYXgpIGVuZCkpCiAgICAgICAgOzsgUmVzdHJpY3Rpb24g Y2hhbmdlcyBhcmUgYSBnb29kIG1vbWVudCB0byBjbGVhbiB1cCBvdmVybGF5cyBkdW1wZWQKICAg ICAgICA7OyBpbnRvIGBkc2xpZGUtb3ZlcmxheXMnLiAg4pqg77iPIEhvd2V2ZXIsIHRoaXMgZG9l c24ndCBwcm9wZXJseSBoYW5kbGUKICAgICAgICA7OyB0aGUgY2FzZSB0aGF0IHRoZSBuZXcgcmVz dHJpY3Rpb24gY29udGFpbnMgdGhlIG9sZCByZXN0cmljdGlvbiwKICAgICAgICA7OyBtZWFuaW5n IHNvbWUgb2YgdGhlIGV4aXN0aW5nIG92ZXJsYXlzIG1heSBzdGlsbCBiZSBuZWNlc3NhcnkuICBU aGlzCiAgICAgICAgOzsgc2hvdWxkIGJlIGdvb2QgZm9yIG5vdyBzaW5jZSB0aGVyZSBhcmUgbm8g a25vd24gY2FzZXMgd2hlcmUgdGhpcwogICAgICAgIDs7IGVkZ2UgY2FzZSBpcyByZWFjaGVkLgog ICAgICAgICh3aGlsZSBkc2xpZGUtb3ZlcmxheXMKICAgICAgICAgIChkZWxldGUtb3ZlcmxheSAo cG9wIGRzbGlkZS1vdmVybGF5cykpKQogICAgICAgIChuYXJyb3ctdG8tcmVnaW9uIGJlZ2luIGVu ZCkKICAgICAgICAoZHNsaWRlLWhpZGUtZmlsdGVyZWQtY2hpbGRyZW4gb2JqKQogICAgICAgICh3 aGVuIChhbmQgZHNsaWRlLXNsaWRlLWluLWVmZmVjdAogICAgICAgICAgICAgICAgICAgKG5vdCAo b3JlZiBvYmogaW5saW5lKSkpCiAgICAgICAgICAoZHNsaWRlLWFuaW1hdGlvbi1zZXR1cCBiZWdp biBlbmQpKQogICAgICAgIChydW4taG9va3MgJ2RzbGlkZS1uYXJyb3ctaG9vaykKICAgICAgICA7 OyBUT0RPIG9wdGlvbiBwcmVjZWRlbmNlLiAgQWN0aW9ucyB3aWxsIG5lZWQgdG8gaW5pdGlhbGl6 ZSB0byB0aGUKICAgICAgICA7OyBnbG9iYWwgdmFsdWUgYW5kIHRoZW4gcmVmaW5lIHdpdGggZXhw bGljaXQgcGVyLXNsaWRlIG9wdGlvbnMuCiAgICAgICAgKHdoZW4gZHNsaWRlLWhlYWRlcgogICAg ICAgICAgKGxldCAoKGRzbGlkZS1oZWFkZXIgKG9yZWYgb2JqIGhlYWRlcikpKQogICAgICAgICAg ICAoZnVuY2FsbCAob3IgZHNsaWRlLWhlYWRlci1mdW4KICAgICAgICAgICAgICAgICAgICAgICAg ICMnZHNsaWRlLW1ha2UtaGVhZGVyKQogICAgICAgICAgICAgICAgICAgICBuaWwgKG9yZWYgb2Jq IGJyZWFkY3J1bWJzKSkpKQogICAgICAgIChtYXBjCiAgICAgICAgIChsYW1iZGEgKHcpIChzZXQt d2luZG93LXBvaW50IHcgKHBvaW50LW1pbikpKSA7IHJlc2V0IHRoZSBzY3JvbGwKICAgICAgICAg KGdldC1idWZmZXItd2luZG93LWxpc3QgKGN1cnJlbnQtYnVmZmVyKSBuaWwgdCkpCiAgICAgICAg OzsgUmV0dXJuIHByb2dyZXNzCiAgICAgICAgYmVnaW4pKSkpCgooY2wtZGVmZ2VuZXJpYyBkc2xp ZGUtaGlkZS1maWx0ZXJlZC1jaGlsZHJlbiAob2JqKQogICJIaWRlIGFsbCBjaGlsZHJlbiB0aGF0 IHdpbGwgYmUgc2tpcHBlZC4KU2VlIGBkc2xpZGUtZGVmYXVsdC1maWx0ZXInIGFuZCByZWxhdGVk IHNldHRpbmdzLiAgU2luY2UgdGhlc2UgY2hpbGRyZW4gd2lsbApiZSBtb3N0bHkgc2tpcHBlZCBi eSBzdWJzZXF1ZW50IGxvZ2ljLCB3ZSBqdXN0IGNvdmVyIHRoZW0gd2l0aCBvdmVybGF5cyBzbwp0 aGV5IGNhbiBiZSBpZ25vcmVkIGZvciB0aGUgc2xpZGUncyBsaWZlY3ljbGUuIikKCjs7IFRPRE8g Y29uc29saWRhdGUgbWFwcGluZyBvdmVyIGNoaWxkIGhlYWRpbmdzCihjbC1kZWZtZXRob2QgZHNs aWRlLWhpZGUtZmlsdGVyZWQtY2hpbGRyZW4gKChvYmogZHNsaWRlLXNsaWRlLWFjdGlvbikpCiAg KGxldCogKChmaWx0ZXIgKGRzbGlkZS0tZmlsdGVyLWZ1bmN0aW9uIGRzbGlkZS0tZGVjaykpCiAg ICAgICAgIChoZWFkaW5nIChkc2xpZGUtaGVhZGluZyBvYmopKQogICAgICAgICAodGFyZ2V0LWxl dmVsICgxKyAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmxldmVsIGhlYWRpbmcpKSkpCiAgICAoZHNs aWRlLS1jb250ZW50cy1tYXAKICAgICBoZWFkaW5nICdoZWFkbGluZQogICAgIChsYW1iZGEgKGNo aWxkKQogICAgICAgKGFuZCAoPSB0YXJnZXQtbGV2ZWwKICAgICAgICAgICAgICAgKG9yZy1lbGVt ZW50LXByb3BlcnR5IDpsZXZlbCBjaGlsZCkpCiAgICAgICAgICAgIChub3QgKGZ1bmNhbGwgZmls dGVyIGNoaWxkKSkKICAgICAgICAgICAgKHB1c2ggKGRzbGlkZS1oaWRlLWVsZW1lbnQgY2hpbGQp IGRzbGlkZS1vdmVybGF5cykpKSkpKQoKKGNsLWRlZmdlbmVyaWMgZHNsaWRlLWNoaWxkLW5leHQg KG9iaiAmb3B0aW9uYWwgcmV2ZXJzZS1pbi1wbGFjZSkKICAiUmV0dXJuIHRoZSBuZXh0IGRpcmVj dCBjaGlsZCBoZWFkaW5nIGVsZW1lbnQuCk9ubHkgbWF0Y2hlcyBoZWFkaW5ncyBiZWdpbm5pbmcg YWZ0ZXIgdGhlIG1hcmtlciBzdG9yZWQgaW4gdGhlCmFjdGlvbiBPQkouICBNb3ZlcyB0aGUgbWFy a2VyIGZvcndhcmQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUKbWF0Y2hlZCBoZWFkaW5nIG9yIHRv IHRoZSBlbmQgb2YgaGVhZGluZy4KCk9wdGlvbmFsIFJFVkVSU0UtSU4tUExBQ0UgaXMgdXNlZCB3 aGVuIGNoYW5naW5nIGRpcmVjdGlvbnMgc2hvdWxkCnJldHVybiB0aGUgc2FtZSBoZWFkaW5nLCBt ZWFuaW5nIHlvdXIgYWN0aW9uIHJldmVyc2VzIGluLXBsYWNlLgpIaWRpbmcgYW5kIHJldmVhbGlu ZyBsaXN0IGl0ZW1zIHdvcmtzIHRoaXMgd2F5LiAgV2hlbiBub24tbmlsLAptYXRjaGVzIGNhbiBp bmNsdWRlIGhlYWRpbmdzIHN0YXJ0aW5nIGF0IHRoZSBhY3Rpb24ncyBtYXJrZXIsIGFuZAp0aGUg bWFya2VyIGlzIG1vdmVkIHRvIHRoZSBlbmQgcmF0aGVyIHRoYW4gYmVnaW5uaW5nIG9mIGFuCmhl YWRpbmcuCgpUaGUgYWN0aW9uJ3MgbWFya2VyIGlzIG1vdmVkIHRvIHRoZSBlbmQgb2YgdGhlIGhl YWRpbmcgaWYgbm8KbWF0Y2hpbmcgaGVhZGluZyBpcyBmb3VuZC4gIFRoaXMgYWxsb3dzIGEgc3Vi c2VxdWVudCBiYWNrd2FyZHMKc3RlcCB0byBwcm9jZXNzIHRoZSBtb3N0IHJlY2VudGx5IHZpc2l0 ZWQgaGVhZGluZy4iKQoKKGNsLWRlZm1ldGhvZCBkc2xpZGUtY2hpbGQtbmV4dCAoKG9iaiBkc2xp ZGUtc2xpZGUtYWN0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3B0aW9u YWwgcmV2ZXJzZS1pbi1wbGFjZSkKICAobGV0KiAoKGZpbHRlciAoZHNsaWRlLS1maWx0ZXItZnVu Y3Rpb24gZHNsaWRlLS1kZWNrKSkKICAgICAgICAgKG1hcmtlciAoZHNsaWRlLW1hcmtlciBvYmop KQogICAgICAgICAoaGVhZGluZyAoZHNsaWRlLWhlYWRpbmcgb2JqKSkKICAgICAgICAgKHRhcmdl dC1sZXZlbCAoMSsgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpsZXZlbCBoZWFkaW5nKSkpCiAgICAg ICAgIChuZXh0IChkc2xpZGUtLWNvbnRlbnRzLW1hcAogICAgICAgICAgICAgICAgaGVhZGluZyAn aGVhZGxpbmUKICAgICAgICAgICAgICAgIChsYW1iZGEgKGNoaWxkKQogICAgICAgICAgICAgICAg ICAoYW5kICg9IHRhcmdldC1sZXZlbAogICAgICAgICAgICAgICAgICAgICAgICAgIChvcmctZWxl bWVudC1wcm9wZXJ0eSA6bGV2ZWwgY2hpbGQpKQogICAgICAgICAgICAgICAgICAgICAgIChmdW5j YWxsIGZpbHRlciBjaGlsZCkKICAgICAgICAgICAgICAgICAgICAgICAoZnVuY2FsbCAoaWYgcmV2 ZXJzZS1pbi1wbGFjZSAjJz49ICMnPikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo b3JnLWVsZW1lbnQtcHJvcGVydHkgOmJlZ2luIGNoaWxkKSBtYXJrZXIpCiAgICAgICAgICAgICAg ICAgICAgICAgY2hpbGQpKQogICAgICAgICAgICAgICAgbmlsIHQpKSkKICAgIChpZiBuZXh0CiAg ICAgICAgKHByb2cxIG5leHQKICAgICAgICAgIChkc2xpZGUtbWFya2VyIG9iaiAob3JnLWVsZW1l bnQtcHJvcGVydHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIHJldmVyc2UtaW4t cGxhY2UgOmVuZCA6YmVnaW4pIG5leHQpKSkKICAgICAgKHByb2cxIG5pbAogICAgICAgIChkc2xp ZGUtbWFya2VyIG9iaiAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmVuZCAoZHNsaWRlLWhlYWRpbmcg b2JqKSkpKSkpKQoKKGNsLWRlZmdlbmVyaWMgZHNsaWRlLWNoaWxkLXByZXZpb3VzIChvYmogJm9w dGlvbmFsIHJldmVyc2UtaW4tcGxhY2UpCiAgIlJldHVybiB0aGUgcHJldmlvdXMgZGlyZWN0IGNo aWxkIGhlYWRpbmcgZWxlbWVudC4KT25seSBtYXRjaGVzIGNoaWxkIGhlYWRpbmdzIGJlZ2lubmlu ZyBiZWZvcmUgdGhlIG1hcmtlciBzdG9yZWQgaW4KdGhlIGFjdGlvbiwgT0JKLiAgTW92ZXMgdGhl IG1hcmtlciBiYWNrd2FyZCB0byB0aGUgYmVnaW5uaW5nIG9mCnRoZSByZXR1cm5lZCBoZWFkaW5n IG9yIHRoZSBiZWdpbm5pbmcgb2YgT0JKJ3MgaGVhZGluZy4KCk9wdGlvbmFsIFJFVkVSU0UtSU4t UExBQ0UgaXMgdXNlZCB3aGVuIGNoYW5naW5nIGRpcmVjdGlvbnMgc2hvdWxkCnJldHVybiB0aGUg c2FtZSBoZWFkaW5nLCBtZWFuaW5nIHlvdXIgYWN0aW9uIHJldmVyc2VzIGluLXBsYWNlLgpoaWRp bmcgYW5kIHJldmVhbGluZyBsaXN0IGl0ZW1zIHdvcmtzIHRoaXMgd2F5LiAgV2hlbiBub24tbmls LAptYXRjaGVzIGNhbiBpbmNsdWRlIGhlYWRpbmdzIHN0YXJ0aW5nIGF0IHRoZSBhY3Rpb24ncyBt YXJrZXIuCgpNYXJrZXIgaXMgbW92ZWQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgaGVhZGluZyBp ZiBubyBtYXRjaGluZwpoZWFkaW5nIGlzIGZvdW5kLiAgVGhpcyBhbGxvd3MgYWN0aW9ucyB0byBk aWZmZXJlbnRpYXRlIHRoZSBiZWdpbgpzdGF0ZSBmcm9tIGJlaW5nIGF0IHRoZSBmaXJzdCBjaGls ZCBoZWFkaW5nLiIpCgooY2wtZGVmbWV0aG9kIGRzbGlkZS1jaGlsZC1wcmV2aW91cyAoKG9iaiBk c2xpZGUtc2xpZGUtYWN0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Jm9wdGlvbmFsIHJldmVyc2UtaW4tcGxhY2UpCiAgKGxldCogKChmaWx0ZXIgKGRzbGlkZS0tZmls dGVyLWZ1bmN0aW9uIGRzbGlkZS0tZGVjaykpCiAgICAgICAgIChtYXJrZXIgKGRzbGlkZS1tYXJr ZXIgb2JqKSkKICAgICAgICAgKGhlYWRpbmcgKGRzbGlkZS1oZWFkaW5nIG9iaikpCiAgICAgICAg ICh0YXJnZXQtbGV2ZWwgKDErIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6bGV2ZWwgaGVhZGluZykp KQogICAgICAgICA7OyBXZSBoYXZlIHRvIGdldCBhbGwgdGhlIGNoaWxkcmVuIGFuZCBmaW5kIHRo ZSBsYXN0IG1hdGNoCiAgICAgICAgIChuZXh0IChjYXIKICAgICAgICAgICAgICAgIChsYXN0CiAg ICAgICAgICAgICAgICAgKGRzbGlkZS0tY29udGVudHMtbWFwCiAgICAgICAgICAgICAgICAgIGhl YWRpbmcgJ2hlYWRsaW5lCiAgICAgICAgICAgICAgICAgIChsYW1iZGEgKGNoaWxkKQogICAgICAg ICAgICAgICAgICAgIChhbmQgKD0gdGFyZ2V0LWxldmVsIChvcmctZWxlbWVudC1wcm9wZXJ0eQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6bGV2ZWwgY2hpbGQpKQog ICAgICAgICAgICAgICAgICAgICAgICAgKGZ1bmNhbGwgZmlsdGVyIGNoaWxkKQogICAgICAgICAg ICAgICAgICAgICAgICAgKGZ1bmNhbGwKICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgcmV2 ZXJzZS1pbi1wbGFjZSAjJzw9ICMnPCkKICAgICAgICAgICAgICAgICAgICAgICAgICAob3JnLWVs ZW1lbnQtcHJvcGVydHkgOmJlZ2luIGNoaWxkKSBtYXJrZXIpCiAgICAgICAgICAgICAgICAgICAg ICAgICBjaGlsZCkpKSkpKSkKICAgIChpZiBuZXh0CiAgICAgICAgKHByb2cxIG5leHQKICAgICAg ICAgIChkc2xpZGUtbWFya2VyIG9iaiAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmJlZ2luIG5leHQp KSkKICAgICAgKHByb2cxIG5pbAogICAgICAgIChkc2xpZGUtbWFya2VyIG9iaiAob3JnLWVsZW1l bnQtcHJvcGVydHkgOmJlZ2luIChkc2xpZGUtaGVhZGluZyBvYmopKSkpKSkpCgo7OyAqKiBGbGF0 IFNsaWRlIEFjdGlvbgooZGVmY2xhc3MgZHNsaWRlLXNsaWRlLWFjdGlvbi1mbGF0IChkc2xpZGUt c2xpZGUtYWN0aW9uKSAoKQogICJObyBjaGlsZCBzbGlkZXMgYXJlIGNyZWF0ZWQgYXQgYWxsLgpO YXJyb3dpbmcgZGVmYXVsdHMgdG8gdGhlIGVudGlyZSBzdWJ0cmVlIikKCihjbC1kZWZtZXRob2Qg ZHNsaWRlLWJlZ2luICgob2JqIGRzbGlkZS1zbGlkZS1hY3Rpb24tZmxhdCkpCiAgKGRzbGlkZS1u YXJyb3cgb2JqIHQpKQoKKGNsLWRlZm1ldGhvZCBkc2xpZGUtZW5kICgob2JqIGRzbGlkZS1zbGlk ZS1hY3Rpb24tZmxhdCkpCiAgKGRzbGlkZS1uYXJyb3cgb2JqIHQpKQoKOzsgKiogRGVmYXVsdCBT bGlkZSBBY3Rpb24KKGRlZmNsYXNzIGRzbGlkZS1zbGlkZS1hY3Rpb24tY2hpbGQgKGRzbGlkZS1z bGlkZS1hY3Rpb24pCiAgKChjaGlsZAogICAgOmluaXRmb3JtIG5pbAogICAgOmRvY3VtZW50YXRp b24gIkN1cnJlbnQgY2hpbGQuIikpCiAgIkRlZmF1bHQgc2xpZGUgYWN0aW9uLgpDaGlsZCBoZWFk aW5ncyBiZWNvbWUgaW5kZXBlbmRlbnQgc2xpZGVzLiIpCgooY2wtZGVmbWV0aG9kIGRzbGlkZS1i ZWdpbiAoKG9iaiBkc2xpZGUtc2xpZGUtYWN0aW9uLWNoaWxkKSkKICAoZHNsaWRlLW5hcnJvdyBv YmopKQoKKGNsLWRlZm1ldGhvZCBkc2xpZGUtZm9yd2FyZCAoKG9iaiBkc2xpZGUtc2xpZGUtYWN0 aW9uLWNoaWxkKSkKICA7OyBGb3IgY2hpbGQgc2xpZGVzLCB3ZSBtYWtlIGEgc2xpZGUgb3V0IG9m IHRoZSBuZXh0IGNoaWxkIGhlYWRpbmcgYW5kIGFkdmFuY2UKICA7OyBvdXIgcHJvZ3Jlc3MgZm9y d2FyZCB0byB0aGUgZW5kIG9mIHRoYXQgY2hpbGQKICAob3IgKHdoZW4tbGV0ICgoY2hpbGQgKG9y ZWYgb2JqIGNoaWxkKSkpCiAgICAgICAgKGlmLWxldCAoKHByb2dyZXNzIChkc2xpZGUtZm9yd2Fy ZCBjaGlsZCkpKQogICAgICAgICAgICBwcm9ncmVzcwogICAgICAgICAgKGRzbGlkZS1maW5hbCBj aGlsZCkKICAgICAgICAgIChvc2V0IG9iaiBjaGlsZCBuaWwpKSkKICAgICAgKHdoZW4tbGV0ICgo Y2hpbGQtaGVhZGluZyAoZHNsaWRlLWNoaWxkLW5leHQgb2JqKSkpCiAgICAgICAgOzsgVE9ETyB0 cmFuc2l0aXZlIGFjdGlvbiBjdXN0b21pemF0aW9uCiAgICAgICAgKGxldCAoKGNoaWxkIChkc2xp ZGUtLW1ha2Utc2xpZGUgY2hpbGQtaGVhZGluZykpKQogICAgICAgICAgKGRzbGlkZS1iZWdpbiBj aGlsZCkKICAgICAgICAgIChvc2V0IG9iaiBjaGlsZCBjaGlsZCkKICAgICAgICAgIChvcmVmIGNo aWxkIGJlZ2luKSkpKSkKCihjbC1kZWZtZXRob2QgZHNsaWRlLWJhY2t3YXJkICgob2JqIGRzbGlk ZS1zbGlkZS1hY3Rpb24tY2hpbGQpKQogIDs7IEZvciBjaGlsZCBzbGlkZXMsIHdlIG1ha2UgYSBz bGlkZSBvdXQgb2YgdGhlIHByZXZpb3VzIGNoaWxkIGhlYWRpbmcgYW5kCiAgOzsgYWR2YW5jZSBv dXIgcHJvZ3Jlc3MgYmFja3dhcmQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGF0IGNoaWxkLiAgSWYg dGhlcmUgYXJlCiAgOzsgbm8gbW9yZSBjaGlsZHJlbiwgd2UgbmFycm93IGJhY2sgdG8gT0JKJ3Mg aGVhZGluZwogIChvciAod2hlbi1sZXQgKChjaGlsZCAob3JlZiBvYmogY2hpbGQpKSkKICAgICAg ICAoaWYtbGV0ICgocHJvZ3Jlc3MgKGRzbGlkZS1iYWNrd2FyZCBjaGlsZCkpKQogICAgICAgICAg ICBwcm9ncmVzcwogICAgICAgICAgKGRzbGlkZS1maW5hbCBjaGlsZCkKICAgICAgICAgIChvc2V0 IG9iaiBjaGlsZCBuaWwpKSkKICAgICAgKGlmLWxldCAoKGNoaWxkLWhlYWRpbmcgKGRzbGlkZS1j aGlsZC1wcmV2aW91cyBvYmopKSkKICAgICAgICAgIDs7IFRPRE8gdHJhbnNpdGl2ZSBhY3Rpb24g Y3VzdG9taXphdGlvbgogICAgICAgICAgKGxldCAoKGNoaWxkIChkc2xpZGUtLW1ha2Utc2xpZGUg Y2hpbGQtaGVhZGluZykpKQogICAgICAgICAgICAoZHNsaWRlLWVuZCBjaGlsZCkKICAgICAgICAg ICAgKG9zZXQgb2JqIGNoaWxkIGNoaWxkKQogICAgICAgICAgICAob3JlZiBjaGlsZCBiZWdpbikp CiAgICAgICAgKGRzbGlkZS1uYXJyb3cgb2JqKSkpKQoKKGNsLWRlZm1ldGhvZCBkc2xpZGUtZW5k ICgob2JqIGRzbGlkZS1zbGlkZS1hY3Rpb24tY2hpbGQpKQogIChkc2xpZGUtbWFya2VyIG9iaiAo b3JnLWVsZW1lbnQtcHJvcGVydHkgOmVuZCAoZHNsaWRlLWhlYWRpbmcgb2JqKSkpCiAgKGxldCAo KHBvaW50LW1pbiAocG9pbnQtbWluKSkKICAgICAgICAocG9pbnQtbWF4IChwb2ludC1tYXgpKSkK ICAgIDs7IFRPRE8gZXhpc3RpbmcgaGlkZGVuIGJhYmVsIGtpbmQgb2YgYSBoYWNrCiAgICAoaWYt bGV0ICgoY2hpbGQgKGRzbGlkZS1jaGlsZC1wcmV2aW91cyBvYmopKSkKICAgICAgICAobGV0ICgo Y2hpbGQgKGRzbGlkZS0tbWFrZS1zbGlkZSBjaGlsZCkpKQogICAgICAgICAgKG9zZXQgb2JqIGNo aWxkIGNoaWxkKQogICAgICAgICAgKGRzbGlkZS1lbmQgY2hpbGQpCiAgICAgICAgICAod2hlbiAo YW5kICg9IHBvaW50LW1pbiAocG9pbnQtbWluKSkKICAgICAgICAgICAgICAgICAgICAgKD0gcG9p bnQtbWF4IChwb2ludC1tYXgpKSkKICAgICAgICAgICAgKGRzbGlkZS1uYXJyb3cgb2JqKSkpCiAg ICAgIChkc2xpZGUtbmFycm93IG9iaikpKSkKCihjbC1kZWZtZXRob2QgZHNsaWRlLWZpbmFsIDph ZnRlciAoKG9iaiBkc2xpZGUtc2xpZGUtYWN0aW9uLWNoaWxkKSkKICAod2hlbi1sZXQgKChjaGls ZCAob3JlZiBvYmogY2hpbGQpKSkKICAgIChkc2xpZGUtZmluYWwgY2hpbGQpKSkKCjs7ICoqIElu bGluZSBTbGlkZSBBY3Rpb24KOzsgVE9ETyByb3VuZC1yb2JpbgoKKGRlZmNsYXNzIGRzbGlkZS1z bGlkZS1hY3Rpb24taW5saW5lIChkc2xpZGUtc2xpZGUtYWN0aW9uKQogICgob3ZlcmxheXMKICAg IDppbml0Zm9ybSBuaWwpCiAgIChjaGlsZHJlbgogICAgOmluaXRmb3JtIG5pbAogICAgOmRvY3Vt ZW50YXRpb24gIkNoaWxkcmVuIHRoYXQgaGF2ZSBiZWVuIGluc3RhbnRpYXRlZC4iKSkKICAiRGlz cGxheSBjaGlsZHJlbiBpbmxpbmUgd2l0aCB0aGUgcGFyZW50LiIpCgooY2wtZGVmbWV0aG9kIGRz bGlkZS1iZWdpbiAoKG9iaiBkc2xpZGUtc2xpZGUtYWN0aW9uLWlubGluZSkpCiAgKGRzbGlkZS1u YXJyb3cgb2JqIHQpCiAgKGxldCAoKGxldmVsICgxKyAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmxl dmVsIChkc2xpZGUtaGVhZGluZyBvYmopKSkpKQogICAgKG9zZXQgb2JqIG92ZXJsYXlzCiAgICAg ICAgICAoZHNsaWRlLS1jb250ZW50cy1tYXAKICAgICAgICAgICAoZHNsaWRlLWhlYWRpbmcgb2Jq KSAnaGVhZGxpbmUKICAgICAgICAgICAobGFtYmRhIChlKQogICAgICAgICAgICAgKHdoZW4gKD0g KG9yZy1lbGVtZW50LXByb3BlcnR5IDpsZXZlbCBlKSBsZXZlbCkKICAgICAgICAgICAgICAgKGRz bGlkZS1oaWRlLWVsZW1lbnQgZSkpKSkpKSkKCihjbC1kZWZtZXRob2QgZHNsaWRlLWZvcndhcmQg KChvYmogZHNsaWRlLXNsaWRlLWFjdGlvbi1pbmxpbmUpKQogIChsZXQgKHByb2dyZXNzIGV4aGF1 c3RlZCkKICAgICh3aGlsZSAobm90IChvciBwcm9ncmVzcyBleGhhdXN0ZWQpKQogICAgICA7OyBG aXJzdCB0cnkgdGhlIG1vc3QgcmVjZW50bHkgYWRkZWQgY2hpbGQKICAgICAgKHNldHEgcHJvZ3Jl c3MgKHdoZW4tbGV0KiAoKGNoaWxkIChjYXIgKG9yZWYgb2JqIGNoaWxkcmVuKSkpKQogICAgICAg ICAgICAgICAgICAgICAgIChkc2xpZGUtZm9yd2FyZCBjaGlsZCkpKQogICAgICA7OyBJZiB0aGUg Y2hpbGQgZGlkbid0IG1ha2UgcHJvZ3Jlc3MsIHRyeSB0byBsb2FkIHVwIHRoZSBuZXh0IGNoaWxk CiAgICAgICh1bmxlc3MgcHJvZ3Jlc3MKICAgICAgICAoaWYtbGV0KiAoKGNoaWxkLWhlYWRpbmcg KGRzbGlkZS1jaGlsZC1uZXh0IG9iaikpCiAgICAgICAgICAgICAgICAgIChjaGlsZCAoZHNsaWRl LS1tYWtlLXNsaWRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQtaGVhZGluZwogICAg ICAgICAgICAgICAgICAgICAgICAgIDpzbGlkZS1hY3Rpb24gJ2RzbGlkZS1zbGlkZS1hY3Rpb24t aW5saW5lCiAgICAgICAgICAgICAgICAgICAgICAgICAgOmlubGluZSB0KSkpCiAgICAgICAgICAg IChwcm9nbgogICAgICAgICAgICAgIChtYXBjICMnZGVsZXRlLW92ZXJsYXkKICAgICAgICAgICAg ICAgICAgICAoc2VxLWludGVyc2VjdGlvbiAob3JlZiBvYmogb3ZlcmxheXMpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKG92ZXJsYXlzLWF0IChvcmctZWxlbWVudC1wcm9w ZXJ0eQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OmJlZ2luCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjaGlsZC1oZWFkaW5nKSkpKQogICAgICAgICAgICAgIChkc2xpZGUtYmVnaW4gY2hpbGQpCiAg ICAgICAgICAgICAgKHdoZW4gZHNsaWRlLXNsaWRlLWluLWVmZmVjdAogICAgICAgICAgICAgICAg KGRzbGlkZS1hbmltYXRpb24tc2V0dXAKICAgICAgICAgICAgICAgICAob3JnLWVsZW1lbnQtcHJv cGVydHkgOmJlZ2luIGNoaWxkLWhlYWRpbmcpCiAgICAgICAgICAgICAgICAgKG9yZy1lbGVtZW50 LXByb3BlcnR5IDplbmQgY2hpbGQtaGVhZGluZykpKQogICAgICAgICAgICAgIChzZXRxIHByb2dy ZXNzIGNoaWxkKQogICAgICAgICAgICAgIChwdXNoIGNoaWxkIChvcmVmIG9iaiBjaGlsZHJlbikp KQogICAgICAgICAgKHNldHEgZXhoYXVzdGVkIHQpKSkpCiAgICBwcm9ncmVzcykpCgooY2wtZGVm bWV0aG9kIGRzbGlkZS1iYWNrd2FyZCAoKG9iaiBkc2xpZGUtc2xpZGUtYWN0aW9uLWlubGluZSkp CiAgKGxldCAocHJvZ3Jlc3MpCiAgICAod2hpbGUgKGFuZCAob3JlZiBvYmogY2hpbGRyZW4pIChu b3QgcHJvZ3Jlc3MpKQogICAgICA7OyBGaXJzdCB0cnkgdGhlIG1vc3QgcmVjZW50bHkgYWRkZWQg Y2hpbGQKICAgICAgKHNldHEgcHJvZ3Jlc3MgKHdoZW4tbGV0KiAoKGNoaWxkIChjYXIgKG9yZWYg b2JqIGNoaWxkcmVuKSkpKQogICAgICAgICAgICAgICAgICAgICAgIChkc2xpZGUtYmFja3dhcmQg Y2hpbGQpKSkKCiAgICAgIDs7IElmIHRoZSBjaGlsZCBkaWRuJ3QgbWFrZSBwcm9ncmVzcywgaGlk ZSBpdCB3aXRoIGFuIG92ZXJsYXkKICAgICAgKHVubGVzcyBwcm9ncmVzcwogICAgICAgIChsZXQq ICgoZmluaXNoZWQgKHBvcCAob3JlZiBvYmogY2hpbGRyZW4pKSkKICAgICAgICAgICAgICAgKGhl YWRpbmcgKGRzbGlkZS1oZWFkaW5nIGZpbmlzaGVkKSkpCiAgICAgICAgICAoZHNsaWRlLWNoaWxk LXByZXZpb3VzIG9iaikgOyBmb3IgbWFya2VyIGVmZmVjdHMg8J+SoQogICAgICAgICAgKHB1c2gg KGRzbGlkZS1oaWRlLWVsZW1lbnQgaGVhZGluZykgKG9yZWYgb2JqIG92ZXJsYXlzKSkKICAgICAg ICAgIChkc2xpZGUtZmluYWwgZmluaXNoZWQpCiAgICAgICAgICAoc2V0cSBwcm9ncmVzcyAob3Ig KGNhciAob3JlZiBvYmogY2hpbGRyZW4pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChk c2xpZGUtaGVhZGluZyBvYmopKSkpKSkKICAgIHByb2dyZXNzKSkKCihjbC1kZWZtZXRob2QgZHNs aWRlLWVuZCAoKG9iaiBkc2xpZGUtc2xpZGUtYWN0aW9uLWlubGluZSkpCiAgKGRzbGlkZS1uYXJy b3cgb2JqIHQpCiAgKGRzbGlkZS1tYXJrZXIgb2JqIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6YmVn aW4gKGRzbGlkZS1oZWFkaW5nIG9iaikpKQogIChsZXQgKGV4aGF1c3RlZCkKICAgICh3aGlsZSAo bm90IGV4aGF1c3RlZCkKICAgICAgOzsgSWYgdGhlIGNoaWxkIGRpZG4ndCBtYWtlIHByb2dyZXNz LCB0cnkgdG8gbG9hZCB1cCB0aGUgbmV4dCBjaGlsZAogICAgICAoaWYtbGV0KiAoKGNoaWxkLWhl YWRpbmcgKGRzbGlkZS1jaGlsZC1uZXh0IG9iaikpKQogICAgICAgICAgKGxldCogKChjaGlsZCAo ZHNsaWRlLS1tYWtlLXNsaWRlCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC1oZWFkaW5n CiAgICAgICAgICAgICAgICAgICAgICAgICA6c2xpZGUtYWN0aW9uICdkc2xpZGUtc2xpZGUtYWN0 aW9uLWlubGluZQogICAgICAgICAgICAgICAgICAgICAgICAgOmlubGluZSB0KSkpCiAgICAgICAg ICAgIChsZXQgKChkc2xpZGUtc2xpZGUtaW4tZWZmZWN0IG5pbCkpCiAgICAgICAgICAgICAgKGRz bGlkZS1lbmQgY2hpbGQpKQogICAgICAgICAgICAocHVzaCBjaGlsZCAob3JlZiBvYmogY2hpbGRy ZW4pKSkKICAgICAgICAoc2V0cSBleGhhdXN0ZWQgdCkpKSkpCgooY2wtZGVmbWV0aG9kIGRzbGlk ZS1maW5hbCA6YWZ0ZXIgKChvYmogZHNsaWRlLXNsaWRlLWFjdGlvbi1pbmxpbmUpKQogIChtYXBj ICMnZGVsZXRlLW92ZXJsYXkgKG9yZWYgb2JqIG92ZXJsYXlzKSkKICAobWFwYyAjJ2RzbGlkZS1m aW5hbCAob3JlZiBvYmogY2hpbGRyZW4pKSkKCjs7ICoqIEV2ZXJ5IENoaWxkIEFjdGlvbgooZGVm Y2xhc3MgZHNsaWRlLXNsaWRlLWFjdGlvbi1ldmVyeS1jaGlsZCAoZHNsaWRlLXNsaWRlLWFjdGlv bikKICAoKG92ZXJsYXkKICAgIDppbml0Zm9ybSBuaWwpCiAgIChjaGlsZHJlbgogICAgOmluaXRm b3JtIG5pbAogICAgOmRvY3VtZW50YXRpb24gIkNoaWxkcmVuIHRoYXQgaGF2ZSBiZWVuIGluc3Rh bnRpYXRlZC4iKSkKICAiRGlzcGxheSBjaGlsZHJlbiBpbmxpbmUgYW5kIHN0ZXAgZXZlcnkgY2hp bGQgYXQgb25jZS4iKQoKKGNsLWRlZm1ldGhvZCBkc2xpZGUtYmVnaW4gKChvYmogZHNsaWRlLXNs aWRlLWFjdGlvbi1ldmVyeS1jaGlsZCkpCiAgKGRzbGlkZS1uYXJyb3cgb2JqIHQpCiAgKG9zZXQg b2JqIG92ZXJsYXkgKGRzbGlkZS1oaWRlLWNoaWxkcmVuIChkc2xpZGUtaGVhZGluZyBvYmopKSkp Cgo7OyBUT0RPIG11bHRpLXByb2dyZXNzLCBsaWtlIGJhYmVsIGJsb2NrcwooY2wtZGVmbWV0aG9k IGRzbGlkZS1mb3J3YXJkICgob2JqIGRzbGlkZS1zbGlkZS1hY3Rpb24tZXZlcnktY2hpbGQpKQog IChsZXQgKChwcm9ncmVzcykpCiAgICAod2hpbGUtbGV0ICgoY2hpbGQtaGVhZGluZyAoZHNsaWRl LWNoaWxkLW5leHQgb2JqKSkKICAgICAgICAgICAgICAgIChjaGlsZCAoZHNsaWRlLS1tYWtlLXNs aWRlCiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLWhlYWRpbmcKICAgICAgICAgICAgICAg ICAgICAgICAgOnNsaWRlLWFjdGlvbiAnZHNsaWRlLXNsaWRlLWFjdGlvbi1ldmVyeS1jaGlsZAog ICAgICAgICAgICAgICAgICAgICAgICA6aW5saW5lIHQpKSkKICAgICAgKGRzbGlkZS1iZWdpbiBj aGlsZCkKICAgICAgOzsgVE9ETyBpbmxpbmUgYW5pbWF0ZSBpbgogICAgICAoc2V0cSBwcm9ncmVz cyBjaGlsZCkKICAgICAgKHB1c2ggY2hpbGQgKG9yZWYgb2JqIGNoaWxkcmVuKSkpCiAgICAod2hl biBwcm9ncmVzcwogICAgICAoZGVsZXRlLW92ZXJsYXkgKG9yZWYgb2JqIG92ZXJsYXkpKQogICAg ICAob3NldCBvYmogb3ZlcmxheSBuaWwpKQogICAgKHVubGVzcyBwcm9ncmVzcwogICAgICAobGV0 ICgocHJvZ3Jlc3NlcyAobWFwY2FyICMnZHNsaWRlLWZvcndhcmQKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAob3JlZiBvYmogY2hpbGRyZW4pKSkpCiAgICAgICAgKHNldHEgcHJvZ3Jl c3MgKHNlcS1maXJzdCBwcm9ncmVzc2VzKSkpKQogICAgcHJvZ3Jlc3MpKQoKKGNsLWRlZm1ldGhv ZCBkc2xpZGUtYmFja3dhcmQgKChvYmogZHNsaWRlLXNsaWRlLWFjdGlvbi1ldmVyeS1jaGlsZCkp CiAgKGxldCAocHJvZ3Jlc3MpCiAgICAobGV0ICgocHJvZ3Jlc3NlcyAobWFwY2FyICMnZHNsaWRl LWJhY2t3YXJkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcmVmIG9iaiBjaGlsZHJl bikpKSkKICAgICAgKHNldHEgcHJvZ3Jlc3MgKHNlcS1maXJzdCBwcm9ncmVzc2VzKSkpCiAgICAo dW5sZXNzIHByb2dyZXNzCiAgICAgIChvc2V0IG9iaiBvdmVybGF5IChkc2xpZGUtaGlkZS1jaGls ZHJlbiAoZHNsaWRlLWhlYWRpbmcgb2JqKSkpCiAgICAgIChtYXBjICMnZHNsaWRlLWZpbmFsIChv cmVmIG9iaiBjaGlsZHJlbikpCiAgICAgIChvc2V0IG9iaiBjaGlsZHJlbiBuaWwpCiAgICAgIDs7 IFRPRE8ganVzdCBub3RpY2VkIHRoYXQgdGhlIG1hcmtlciBtZXRob2QgY291bGQgc3RvcmUgYSBt YXJrZXIgdGhhdCBpcwogICAgICA7OyBzaGFyZWQsIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBhY3Rp b25zIGNsb2JiZXJpbmcgZWFjaCBvdGhlcidzIHNlbnNlIG9mCiAgICAgIDs7IHByb2dyZXNzLiDi mKLvuI8KICAgICAgKHNldC1tYXJrZXIgKG9yZWYgb2JqIG1hcmtlcikgbmlsKQogICAgICAoZHNs aWRlLW1hcmtlciBvYmogKGNvcHktbWFya2VyIChvcmVmIG9iaiBiZWdpbikpKSkKICAgIHByb2dy ZXNzKSkKCihjbC1kZWZtZXRob2QgZHNsaWRlLWVuZCAoKG9iaiBkc2xpZGUtc2xpZGUtYWN0aW9u LWV2ZXJ5LWNoaWxkKSkKICAoZHNsaWRlLW5hcnJvdyBvYmogdCkKICAod2hpbGUtbGV0ICgoY2hp bGQtaGVhZGluZyAoZHNsaWRlLWNoaWxkLW5leHQgb2JqKSkpCiAgICAocHVzaCAoZHNsaWRlLS1t YWtlLXNsaWRlCiAgICAgICAgICAgY2hpbGQtaGVhZGluZwogICAgICAgICAgIDpzbGlkZS1hY3Rp b24gJ2RzbGlkZS1zbGlkZS1hY3Rpb24tZXZlcnktY2hpbGQKICAgICAgICAgICA6aW5saW5lIHQp CiAgICAgICAgICAob3JlZiBvYmogY2hpbGRyZW4pKSkKICAobWFwYyAjJ2RzbGlkZS1lbmQgKG9y ZWYgb2JqIGNoaWxkcmVuKSkpCgooY2wtZGVmbWV0aG9kIGRzbGlkZS1maW5hbCA6YWZ0ZXIgKChv YmogZHNsaWRlLXNsaWRlLWFjdGlvbi1ldmVyeS1jaGlsZCkpCiAgKHdoZW4tbGV0ICgob3Zlcmxh eSAob3JlZiBvYmogb3ZlcmxheSkpKQogICAgKGRlbGV0ZS1vdmVybGF5IG92ZXJsYXkpKQogICht YXBjICMnZHNsaWRlLWZpbmFsIChvcmVmIG9iaiBjaGlsZHJlbikpKQoKOzsgKiBGaWx0ZXJzCihk ZWZ1biBkc2xpZGUtYnVpbHQtaW4tZmlsdGVyIChoZWFkaW5nKQogICJIRUFESU5HIGlzIGFuIG9y ZyBlbGVtZW50LgpSZXR1cm4gdGhlIGhlYWRpbmcgdW5sZXNzIGl0J3MgZmlsdGVyZWQuIgogICh1 bmxlc3MKICAgICAgKG9yIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6Y29tbWVudGVkcCBoZWFkaW5n KQogICAgICAgICAgKGxldCAoKHRhZ3MgKG9yZy1lbGVtZW50LXByb3BlcnR5IDp0YWdzIGhlYWRp bmcpKSkKICAgICAgICAgICAgKG9yIChtZW1iZXIgIm5vc2xpZGUiIHRhZ3MpCiAgICAgICAgICAg ICAgICAobWVtYmVyICJub2V4cG9ydCIgdGFncykpKSkKICAgIGhlYWRpbmcpKQoKOzsgKiBIaWRp bmcgRWxlbWVudHMKCjs7IFVzZSBvZiB0aGUgaGlkZS0qIGZ1bmN0aW9ucyBhc3N1bWVzIHRoZSB0 cmVlIGlzIHdpdGhpbiB0aGUgYnVmZmVyIG5hcnJvd2luZwo7OyByZXN0cmljdGlvbiBhbmQgYWxz byBub3QgZm9sZGVkLiAgVHJ5IGBvcmctZm9sZC1zaG93LXN1YnRyZWUnIGFuZAo7OyBgb3JnLWN5 Y2xlLXRyZWUnIGJlZm9yZSBjYWxsaW5nIGlmIHN0cmFuZ2UgYmVoYXZpb3IgaXMgb2JzZXJ2ZWQu CgooZGVmdW4gZHNsaWRlLWhpZGUtcmVnaW9uIChiZWcgZW5kICZvcHRpb25hbCBrZWVwLWZpbGwp CiAgIlJldHVybiBvdmVybGF5IGhpZGluZyByZWdpb24gYmV0d2VlbiBCRUcgYW5kIEVORC4KT3B0 aW9uYWwgS0VFUC1GSUxMIHdpbGwgb2JzY3VyZSBidXQgbm90IGNoYW5nZSB0aGUgY29udGVudHMg b2YgdGV4dCwga2VlcGluZwppdHMgaGVpZ2h0IGFuZCB3aWR0aCBmb3IgZmlsbGluZyBpbiBvdGhl ciBjb250ZW50LiIKICAobGV0ICgob3YgKG1ha2Utb3ZlcmxheSBiZWcgZW5kKSkpCiAgICAoaWYg a2VlcC1maWxsCiAgICAgICAgKGxldCAoKGJhY2tncm91bmQgKGZhY2UtYXR0cmlidXRlICdkZWZh dWx0IDpiYWNrZ3JvdW5kKSkpCiAgICAgICAgICAob3ZlcmxheS1wdXQgb3YgJ2ZhY2UgYCg6Zm9y ZWdyb3VuZCAsYmFja2dyb3VuZCA6YmFja2dyb3VuZCAsYmFja2dyb3VuZCkpKQogICAgICAob3Zl cmxheS1wdXQgb3YgJ2Rpc3BsYXkgIiIpKQogICAgb3YpKQoKKGRlZnVuIGRzbGlkZS1oaWRlLWVs ZW1lbnQgKGVsZW1lbnQgJm9wdGlvbmFsIGtlZXAtZmlsbCkKICAiUmV0dXJuIGFuIG92ZXJsYXkg dGhhdCB3aWxsIGhpZGUgRUxFTUVOVC4KRWxlbWVudCBpcyBhbiBvcmcgZWxlbWVudC5PcHRpb25h bCBLRUVQLUZJTEwgd2lsbCBvYnNjdXJlIGJ1dCBub3QKY2hhbmdlIHRoZSBjb250ZW50cyBvZiB0 ZXh0LCBrZWVwaW5nIGl0cyBoZWlnaHQgYW5kIHdpZHRoIGZvcgpmaWxsaW5nIGluIG90aGVyIGNv bnRlbnQuIgogIChkc2xpZGUtaGlkZS1yZWdpb24KICAgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpi ZWdpbiBlbGVtZW50KQogICAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmVuZCBlbGVtZW50KQogICBr ZWVwLWZpbGwpKQoKKGRlZnVuIGRzbGlkZS1oaWRlLWl0ZW0gKGl0ZW0gJm9wdGlvbmFsIGtlZXAt ZmlsbCkKICAiUmV0dXJuIGFuIG92ZXJsYXkgdGhhdCBoaWRlcyBJVEVNLgpTZWUgYG9yZy1pdGVt LXN0cnVjdCcgZm9yIHN0cnVjdHVyZSBvZiBJVEVNLiAgTm90ZSwgdGhpcyBoaWRlcwp0aGUgZW50 aXJlIGl0ZW0sIHdoaWNoIG1heSBjb250YWluIHN1Yi1pdGVtcywgYnV0IHJldmVhbGluZwpjaGls ZHJlbiBvZiBhIGhpZGRlbiBwYXJlbnQgZG9lc24ndCByZWFsbHkgbWFrZSBzZW5zZS4KCk9wdGlv bmFsIEtFRVAtRklMTCB3aWxsIG9ic2N1cmUgYnV0IG5vdCBjaGFuZ2UgdGhlIGNvbnRlbnRzIG9m IHRleHQsIGtlZXBpbmcKaXRzIGhlaWdodCBhbmQgd2lkdGggZm9yIGZpbGxpbmcgaW4gb3RoZXIg Y29udGVudC4iCiAgKGRzbGlkZS1oaWRlLXJlZ2lvbgogICAoY2FyIGl0ZW0pIChjYXIgKGxhc3Qg aXRlbSkpIGtlZXAtZmlsbCkpCgooZGVmdW4gZHNsaWRlLWhpZGUtY29udGVudHMgKGVsZW1lbnQg Jm9wdGlvbmFsIGtlZXAtZmlsbCkKICAiUmV0dXJuIGFuIG92ZXJsYXkgdGhhdCBoaWRlcyB0aGUg Y29udGVudHMgb2YgRUxFTUVOVC4KRWxlbWVudCBpcyBhbiBvcmcgZWxlbWVudC4gIFlvdSBzaG91 bGQgcHJvYmFibHkgbm90IHVzZSB0aGlzIG9uCmhlYWRpbmdzIGJlY2F1c2UgdGhlaXIgY29udGVu dHMgaW5jbHVkZXMgdGhlIHNlY3Rpb25zIGFuZCB0aGUKY2hpbGRyZW4uICBTZWUgYGRzbGlkZS1o aWRlLXNlY3Rpb24nIGFuZCBgZHNsaWRlLWhpZGUtY2hpbGRyZW4nLgoKT3B0aW9uYWwgS0VFUC1G SUxMIHdpbGwgb2JzY3VyZSBidXQgbm90IGNoYW5nZSB0aGUgY29udGVudHMgb2YgdGV4dCwga2Vl cGluZwppdHMgaGVpZ2h0IGFuZCB3aWR0aCBmb3IgZmlsbGluZyBpbiBvdGhlciBjb250ZW50LiIK ICAoZHNsaWRlLWhpZGUtcmVnaW9uIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6Y29udGVudHMtYmVn aW4gZWxlbWVudCkKICAgICAgICAgICAgICAgICAgKG9yZy1lbGVtZW50LXByb3BlcnR5IDplbmQg ZWxlbWVudCkKICAgICAgICAgICAgICAgICAga2VlcC1maWxsKSkKCihkZWZ1biBkc2xpZGUtaGlk ZS1zZWN0aW9uIChoZWFkaW5nICZvcHRpb25hbCBrZWVwLWZpbGwpCiAgIlJldHVybiBhbiBvdmVy bGF5IHRoYXQgaGlkZXMgdGhlIHNlY3Rpb24gb2YgSEVBRElORy4KSEVBRElORyBpcyBhIGhlYWRs aW5lIHR5cGUgb3JnIGVsZW1lbnQuCgpPcHRpb25hbCBLRUVQLUZJTEwgd2lsbCBvYnNjdXJlIGJ1 dCBub3QgY2hhbmdlIHRoZSBjb250ZW50cyBvZiB0ZXh0LCBrZWVwaW5nCml0cyBoZWlnaHQgYW5k IHdpZHRoIGZvciBmaWxsaW5nIGluIG90aGVyIGNvbnRlbnQuIgogIChkc2xpZGUtaGlkZS1yZWdp b24KICAgKGRzbGlkZS0tc2VjdGlvbi1iZWdpbiBoZWFkaW5nKQogICAoZHNsaWRlLS1zZWN0aW9u LWVuZCBoZWFkaW5nKQogICBrZWVwLWZpbGwpKQoKKGRlZnVuIGRzbGlkZS1oaWRlLWNoaWxkcmVu IChoZWFkaW5nICZvcHRpb25hbCBrZWVwLWZpbGwpCiAgIlJldHVybiBhbiBvdmVybGF5IHRoYXQg aGlkZXMgdGhlIGNoaWxkcmVuIG9mIEhFQURJTkcuCkhFQURJTkcgaXMgYSBoZWFkbGluZSB0eXBl IG9yZyBlbGVtZW50LgoKT3B0aW9uYWwgS0VFUC1GSUxMIHdpbGwgb2JzY3VyZSBidXQgbm90IGNo YW5nZSB0aGUgY29udGVudHMgb2YgdGV4dCwga2VlcGluZwppdHMgaGVpZ2h0IGFuZCB3aWR0aCBm b3IgZmlsbGluZyBpbiBvdGhlciBjb250ZW50LiIKICAoZHNsaWRlLWhpZGUtcmVnaW9uCiAgIChk c2xpZGUtLXNlY3Rpb24tZW5kIGhlYWRpbmcpCiAgIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6ZW5k IGhlYWRpbmcpCiAgIGtlZXAtZmlsbCkpCgo7OyAqIEVsZW1lbnQgTWFwcGluZwoKOzsgRnVuY3Rp b25zIG9mIGhlYWRpbmdzIGFyZSBwcml2YXRlIHNvIHRoYXQgY29ycmVzcG9uZGluZyBzbGlkZSBt ZXRob2RzIGNhbiBiZQo7OyBwdWJsaWMuICBQcml2YXRlIG1ldGhvZHMgd2l0aCBwdWJsaWMgY291 bnRlcnBhcnRzIGFyZSBhdCBsZWFzdCBhcyBzdGFibGUgYXMKOzsgdGhlIHB1YmxpYyBtZXRob2Qu CgooZGVmdW4gZHNsaWRlLS1tYXAKICAgIChlbGVtZW50IHR5cGUgZnVuICZvcHRpb25hbCBpbmZv IGZpcnN0LW1hdGNoIG5vLXJlY3Vyc2lvbikKICAiTWFwIEZVTiBvdmVyIHRoZSBjb250ZW50cyBv ZiB0aGUgRUxFTUVOVCBtYXRjaGluZyBUWVBFLgpJTkZPLCBGSVJTVC1NQVRDSCwgYW5kIE5PLVJF Q1VSU0lPTiBhcmUgZGVzY3JpYmVkIGluCmBvcmctZWxlbWVudC1tYXAnLiIKICAobGV0ICgodHlw ZSAoaWYgKG9yIChsaXN0cCB0eXBlKSAoZXEgdCB0eXBlKSkKICAgICAgICAgICAgICAgICAgdHlw ZQogICAgICAgICAgICAgICAgKGxpc3QgdHlwZSkpKSkKICAgIChzYXZlLWV4Y3Vyc2lvbgogICAg ICAoc2F2ZS1yZXN0cmljdGlvbgogICAgICAgIChuYXJyb3ctdG8tcmVnaW9uIChvcmctZWxlbWVu dC1wcm9wZXJ0eSA6YmVnaW4gZWxlbWVudCkKICAgICAgICAgICAgICAgICAgICAgICAgICAob3Jn LWVsZW1lbnQtcHJvcGVydHkgOmVuZCBlbGVtZW50KSkKICAgICAgICAobGV0ICgoZGF0YSAob3Jn LWVsZW1lbnQtcGFyc2UtYnVmZmVyKSkpCiAgICAgICAgICAob3JnLWVsZW1lbnQtbWFwIGRhdGEg dHlwZSBmdW4gaW5mbwogICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdC1tYXRjaCBuby1y ZWN1cnNpb24pKSkpKSkKCihkZWZ1biBkc2xpZGUtLWNvbnRlbnRzLW1hcAogICAgKGVsZW1lbnQg dHlwZSBmdW4gJm9wdGlvbmFsIGluZm8gZmlyc3QtbWF0Y2ggbm8tcmVjdXJzaW9uKQogICJNYXAg RlVOIG92ZXIgdGhlIGNvbnRlbnRzIG9mIHRoZSBFTEVNRU5UIG1hdGNoaW5nIFRZUEUuCklORk8s IEZJUlNULU1BVENILCBhbmQgTk8tUkVDVVJTSU9OIGFyZSBkZXNjcmliZWQgaW4KYG9yZy1lbGVt ZW50LW1hcCcuIgogIChsZXQgKCh0eXBlIChpZiAobGlzdHAgdHlwZSkgdHlwZSAobGlzdCB0eXBl KSkpKQogICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgIChzYXZlLXJlc3RyaWN0aW9uCiAgICAgICAg KHdoZW4tbGV0ICgoYmVnaW4gKG9yZy1lbGVtZW50LXByb3BlcnR5IDpjb250ZW50cy1iZWdpbiBl bGVtZW50KSkKICAgICAgICAgICAgICAgICAgIChlbmQgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpj b250ZW50cy1lbmQgZWxlbWVudCkpKQogICAgICAgICAgKG5hcnJvdy10by1yZWdpb24gYmVnaW4g ZW5kKQogICAgICAgICAgKGxldCAoKGRhdGEgKG9yZy1lbGVtZW50LXBhcnNlLWJ1ZmZlcikpKQog ICAgICAgICAgICAob3JnLWVsZW1lbnQtbWFwIGRhdGEgdHlwZSBmdW4gaW5mbwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZpcnN0LW1hdGNoIG5vLXJlY3Vyc2lvbikpKSkpKSkKCihkZWZ1 biBkc2xpZGUtLXNlY3Rpb24tbWFwCiAgICAoaGVhZGluZyB0eXBlIGZ1biAmb3B0aW9uYWwgaW5m byBmaXJzdC1tYXRjaCBuby1yZWN1cnNpb24pCiAgIk1hcCBGVU4gb3ZlciBlbGVtZW50cyBtYXRj aGluZyBUWVBFIGluIHRoZSBTRUNUSU9OIG9mIEhFQURJTkcuClRoaXMgaW5jbHVkZXMgYWxsIHRl eHQgdXAgdG8gdGhlIGZpcnN0IGNoaWxkLiAgSU5GTywgRklSU1QtTUFUQ0gsCmFuZCBOTy1SRUNV UlNJT04gYXJlIGRlc2NyaWJlZCBpbiBgb3JnLWVsZW1lbnQtbWFwJy4iCiAgKHdoZW4tbGV0ICgo c2VjdGlvbiAoZHNsaWRlLS1zZWN0aW9uIGhlYWRpbmcpKSkKICAgIChkc2xpZGUtLW1hcCBzZWN0 aW9uIHR5cGUgZnVuIGluZm8KICAgICAgICAgICAgICAgICBmaXJzdC1tYXRjaCBuby1yZWN1cnNp b24pKSkKCihkZWZ1biBkc2xpZGUtLXNlY3Rpb24tbmV4dAogICAgKGhlYWRpbmcgdHlwZSBhZnRl ciAmb3B0aW9uYWwgcHJlZCBpbmNsdXNpdmUgaW5mbyBuby1yZWN1cnNpb24pCiAgIlJldHVybiBI RUFESU5HJ3MgbmV4dCBlbGVtZW50IG9mIFRZUEUuCkJ5IGRlZmF1bHQsIG1hdGNoZXMgb25seSBh ZnRlciBBRlRFUiBidXQgd2l0aCBvcHRpb25hbCBJTkNMVVNJVkUsCmFsc28gaW5jbHVkZXMgbWF0 Y2hlcyBhdCBBRlRFUi4KClBSRUQsIElORk8sIEZJUlNULU1BVENILCBhbmQgTk8tUkVDVVJTSU9O IGFyZSBkZXNjcmliZWQgaW4KYG9yZy1lbGVtZW50LW1hcCcuIgogIChsZXQqICgoY29tYmluZWQt cHJlZAogICAgICAgICAgKGRzbGlkZS1hbmQgcHJlZAogICAgICAgICAgICAgICAgICAgICAgKGxh bWJkYSAoZSkgKGZ1bmNhbGwgKGlmIGluY2x1c2l2ZSAgIyc+PSAgIyc+KQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6YmVnaW4gZSkg YWZ0ZXIpKSkpKQogICAgKGRzbGlkZS0tc2VjdGlvbi1tYXAKICAgICBoZWFkaW5nIHR5cGUgY29t YmluZWQtcHJlZCBpbmZvIHQgbm8tcmVjdXJzaW9uKSkpCgooZGVmdW4gZHNsaWRlLS1zZWN0aW9u LXByZXZpb3VzCiAgICAoaGVhZGluZyB0eXBlIGJlZm9yZSAmb3B0aW9uYWwgcHJlZCBpbmNsdXNp dmUgaW5mbyBuby1yZWN1cnNpb24pCiAgIlJldHVybiBIRUFESU5HJ3MgcHJldmlvdXMgZWxlbWVu dCBvZiBUWVBFLgpCeSBkZWZhdWx0LCBtYXRjaGVzIG9ubHkgYmVmb3JlIEJFRk9SRSBidXQgd2l0 aCBvcHRpb25hbApJTkNMVVNJVkUsIGFsc28gaW5jbHVkZXMgbWF0Y2hlcyBhdCBCRUZPUkUuCgpQ UkVELCBJTkZPLCBGSVJTVC1NQVRDSCwgYW5kIE5PLVJFQ1VSU0lPTiBhcmUgZGVzY3JpYmVkIGlu CmBvcmctZWxlbWVudC1tYXAnLiIKICAobGV0KiAoKGNvbWJpbmVkLXByZWQgKGRzbGlkZS1hbmQK ICAgICAgICAgICAgICAgICAgICAgICAgIHByZWQKICAgICAgICAgICAgICAgICAgICAgICAgIChs YW1iZGEgKGUpIChmdW5jYWxsIChpZiBpbmNsdXNpdmUgIyc8PSAjJzwpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpiZWdpbiBl KSBiZWZvcmUpKSkpKQogICAgOzsgV2UgY2FuJ3QgbWFwIGluIHJldmVyc2UsIHNvIGp1c3QgcmV0 cmlldmUgYWxsIG1hdGNoZWQgZWxlbWVudHMgYW5kCiAgICA7OyByZXR1cm4gdGhlIGxhc3Qgb25l LgogICAgKGNhciAobGFzdCAoZHNsaWRlLS1zZWN0aW9uLW1hcAogICAgICAgICAgICAgICAgaGVh ZGluZyB0eXBlIGNvbWJpbmVkLXByZWQgaW5mbyBuaWwgbm8tcmVjdXJzaW9uKSkpKSkKCihkZWZ1 biBkc2xpZGUtLXNlY3Rpb24gKGhlYWRpbmcpCiAgIkdldCB0aGUgc2VjdGlvbiBvZiBhIEhFQURJ TkcuIgogIChkc2xpZGUtLW1hcAogICBoZWFkaW5nICdzZWN0aW9uICMnaWRlbnRpdHkgbmlsIHQg dCkpCgooZGVmdW4gZHNsaWRlLS1zZWN0aW9uLWJlZ2luIChoZWFkaW5nKQogICJBbHdheXMgcmV0 dXJuIGEgcG9pbnQsIGV2ZW4gaWYgSEVBRElORyBpcyBlbXB0eS4iCiAgKGlmLWxldCAoKHNlY3Rp b24gKGRzbGlkZS0tbWFwCiAgICAgICAgICAgICAgICAgICAgIGhlYWRpbmcgJ3NlY3Rpb24gIydp ZGVudGl0eSBuaWwgdCB0KSkpCiAgICAgIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6YmVnaW4gc2Vj dGlvbikKICAgIChvciAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmNvbnRlbnRzLWJlZ2luIGhlYWRp bmcpCiAgICAgICAgKG9yZy1lbGVtZW50LXByb3BlcnR5IDplbmQgaGVhZGluZykpKSkKCihkZWZ1 biBkc2xpZGUtLXNlY3Rpb24tZW5kIChoZWFkaW5nKQogICJBbHdheXMgcmV0dXJuIGEgcG9pbnQs IGV2ZW4gaWYgSEVBRElORyBpcyBlbXB0eS4iCiAgKGxldCAoKG5vdC1zZWxmIChsYW1iZGEgKGUp ICh1bmxlc3MgKGVxdWFsIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6YmVnaW4gZSkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6YmVn aW4gaGVhZGluZykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGUpKSkpCiAgICAoaWYtbGV0 ICgoc2VjdGlvbi1vci1oZWFkaW5nIChkc2xpZGUtLW1hcAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaGVhZGluZyAnKGhlYWRsaW5lIHNlY3Rpb24pCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBub3Qtc2VsZiBuaWwgdCB0KSkpCiAgICAgICAgKGlmIChlcSAob3Jn LWVsZW1lbnQtdHlwZSBzZWN0aW9uLW9yLWhlYWRpbmcpCiAgICAgICAgICAgICAgICAnaGVhZGxp bmUpCiAgICAgICAgICAgIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6YmVnaW4gc2VjdGlvbi1vci1o ZWFkaW5nKQogICAgICAgICAgKG9yZy1lbGVtZW50LXByb3BlcnR5IDplbmQgc2VjdGlvbi1vci1o ZWFkaW5nKSkKICAgICAgKG9yCiAgICAgICAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmNvbnRlbnRz LWJlZ2luIGhlYWRpbmcpCiAgICAgICAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmVuZCBoZWFkaW5n KSkpKSkKCihkZWZ1biBkc2xpZGUtLXByZXZpb3VzLXNpYmxpbmcgKGhlYWRpbmcgJm9wdGlvbmFs IHByZWRpY2F0ZSkKICAiUmV0dXJuIHRoZSBwcmV2aW91cyBzaWJsaW5nIEhFQURJTkcgaWYgaXQg ZXhpc3RzLgpQUkVESUNBVEUgc2hvdWxkIGFjY2VwdCBhbiBFTEVNRU5UIGFuZCByZXR1cm4gbm9u LW5pbC4iCiAgKHdpdGhvdXQtcmVzdHJpY3Rpb24KICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAo Z290by1jaGFyIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6YmVnaW4gaGVhZGluZykpCiAgICAgIChs ZXQqICgocHJlZGljYXRlIChvciBwcmVkaWNhdGUgIydpZGVudGl0eSkpCiAgICAgICAgICAgICAo Z29hbC1sZXZlbCAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmxldmVsIGhlYWRpbmcpKQogICAgICAg ICAgICAgKGxldmVsIGdvYWwtbGV2ZWwpCiAgICAgICAgICAgICBmb3VuZCkKICAgICAgICAod2hp bGUgKGFuZCAobm90IChib2JwKSkKICAgICAgICAgICAgICAgICAgICAobm90IGZvdW5kKQogICAg ICAgICAgICAgICAgICAgICg+PSBsZXZlbCBnb2FsLWxldmVsKQogICAgICAgICAgICAgICAgICAg IChyZS1zZWFyY2gtYmFja3dhcmQgb3JnLWhlYWRpbmctcmVnZXhwIG5pbCB0KSkKICAgICAgICAg IChnb3RvLWNoYXIgKG1hdGNoLWJlZ2lubmluZyAwKSkKICAgICAgICAgIChsZXQgKChlbGVtZW50 IChvcmctZWxlbWVudC1hdC1wb2ludCkpKQogICAgICAgICAgICAoc2V0cSBsZXZlbCAob3JnLWVs ZW1lbnQtcHJvcGVydHkgOmxldmVsIGVsZW1lbnQpKQogICAgICAgICAgICAoc2V0cSBmb3VuZCAo YW5kICg9IGxldmVsIGdvYWwtbGV2ZWwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZ1 bmNhbGwgcHJlZGljYXRlIGVsZW1lbnQpKSkpKQogICAgICAgIGZvdW5kKSkpKQoKKGRlZnVuIGRz bGlkZS0tbmV4dC1zaWJsaW5nIChoZWFkaW5nICZvcHRpb25hbCBwcmVkaWNhdGUpCiAgIlJldHVy biB0aGUgbmV4dCBzaWJsaW5nIEhFQURJTkcgaWYgaXQgZXhpc3RzLgpQUkVESUNBVEUgc2hvdWxk IGFjY2VwdCBhbiBFTEVNRU5UIGFuZCByZXR1cm4gbm9uLW5pbC4iCiAgKHdpdGhvdXQtcmVzdHJp Y3Rpb24KICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAoZ290by1jaGFyIChvcmctZWxlbWVudC1w cm9wZXJ0eSA6ZW5kIGhlYWRpbmcpKQogICAgICAobGV0KiAoKHByZWRpY2F0ZSAob3IgcHJlZGlj YXRlICMnaWRlbnRpdHkpKQogICAgICAgICAgICAgKGdvYWwtbGV2ZWwgKG9yZy1lbGVtZW50LXBy b3BlcnR5IDpsZXZlbCBoZWFkaW5nKSkKICAgICAgICAgICAgIChsZXZlbCBnb2FsLWxldmVsKQog ICAgICAgICAgICAgZm91bmQpCiAgICAgICAgKHdoaWxlIChhbmQgKG5vdCAoZW9icCkpCiAgICAg ICAgICAgICAgICAgICAgKG5vdCBmb3VuZCkKICAgICAgICAgICAgICAgICAgICAoPj0gbGV2ZWwg Z29hbC1sZXZlbCkKICAgICAgICAgICAgICAgICAgICAocmUtc2VhcmNoLWZvcndhcmQgb3JnLWhl YWRpbmctcmVnZXhwIG5pbCB0KSkKICAgICAgICAgIChnb3RvLWNoYXIgKG1hdGNoLWJlZ2lubmlu ZyAwKSkKICAgICAgICAgIChsZXQgKChlbGVtZW50IChvcmctZWxlbWVudC1hdC1wb2ludCkpKQog ICAgICAgICAgICAoc2V0cSBsZXZlbCAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmxldmVsIGVsZW1l bnQpKQogICAgICAgICAgICAoc2V0cSBmb3VuZCAoYW5kICg9IGxldmVsIGdvYWwtbGV2ZWwpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZ1bmNhbGwgcHJlZGljYXRlIGVsZW1lbnQpKSkp CiAgICAgICAgICAoZ290by1jaGFyIChtYXRjaC1lbmQgMCkpKQogICAgICAgIGZvdW5kKSkpKQoK OzsgVE9ETyBzbywgZXhhY3RseSB3aGVuIGFyZSB5b3UgcGFzc2luZyBpbiB0eXBlcyDwn6ShPwoo ZGVmdW4gZHNsaWRlLXR5cGUtcCAoZWxlbWVudC1vci10eXBlIHR5cGUpCiAgIkNoZWNrIGVsZW1l bnQgVFlQRS4KRUxFTUVOVC1PUi1UWVBFIGNhbiBiZSBhIHR5cGUgc3ltYm9sIG9yIGFuIG9yZyBl bGVtZW50LiAgVFlQRSBjYW4KYmUgYSBsaXN0IG9mIHR5cGVzIG9yIGEgdHlwZSBmcm9tIGBvcmct ZWxlbWVudC1hbGwtZWxlbWVudHMuJyIKICAod2hlbi1sZXQgKChlbGVtZW50LXR5cGUgKG9yICh3 aGVuIChzeW1ib2xwIGVsZW1lbnQtb3ItdHlwZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZWxlbWVudC1vci10eXBlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFu ZCBlbGVtZW50LW9yLXR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9y Zy1lbGVtZW50LXR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1l bnQtb3ItdHlwZSkpKSkpCiAgICAoaWYgKGxpc3RwIHR5cGUpCiAgICAgICAgKG1lbWJlciBlbGVt ZW50LXR5cGUgdHlwZSkKICAgICAgKGVxIGVsZW1lbnQtdHlwZSB0eXBlKSkpKQoKOzsgVE9ETyBj cnVmdAooZGVmdW4gZHNsaWRlLS1oZWFkaW5nLXAgKGVsZW1lbnQpCiAgKGRzbGlkZS10eXBlLXAg ZWxlbWVudCAnaGVhZGxpbmUpKQoKKGRlZnVuIGRzbGlkZS0tZWxlbWVudC1yb290IChlbGVtZW50 ICZvcHRpb25hbCB0eXBlKQogICJHZXQgdGhlIHJvb3QgcGFyZW50IG9mIEVMRU1FTlQgb2YgVFlQ RS4KVFlQRSBpcyBhIGxpc3Qgb3IgdHlwZSBzeW1ib2wuICBQYXJlbnRzIG5vdCBvZiBUWVBFIHdp bGwgYmUKc2tpcHBlZCBhbmQgdGhlIGxhc3QgbWF0Y2hpbmcgcGFyZW50IHdpbGwgYmUgcmV0dXJu ZWQuICBFTEVNRU5UCmNvdWxkIGJlIHRoZSByb290LiIKICAobGV0IChmb3VuZCkKICAgICh3aGls ZSBlbGVtZW50CiAgICAgICh3aGVuIChvciAobm90IHR5cGUpIChkc2xpZGUtdHlwZS1wIGVsZW1l bnQgdHlwZSkpCiAgICAgICAgKHNldHEgZm91bmQgZWxlbWVudCkpCiAgICAgIChzZXRxIGVsZW1l bnQgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpwYXJlbnQgZWxlbWVudCkpKQogICAgZm91bmQpKQoK KGRlZnVuIGRzbGlkZS0tZG9jdW1lbnQtZmlyc3QtaGVhZGluZyAoZmlsdGVyKQogICJSZXR1cm4g dGhlIGZpcnN0IGhlYWRpbmcgZWxlbWVudCBpbiB0aGUgYnVmZmVyLiIKICAoc2F2ZS1yZXN0cmlj dGlvbgogICAgKHdpZGVuKQogICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgIChsZXQgKChidWZmZXIt aW52aXNpYmlsaXR5LXNwZWMgbmlsKQogICAgICAgICAgICBmb3VuZCkKICAgICAgICAoZ290by1j aGFyIChwb2ludC1taW4pKQogICAgICAgICh3aGlsZSAoYW5kIChub3QgZm91bmQpCiAgICAgICAg ICAgICAgICAgICAgKG5vdCAoZW9icCkpCiAgICAgICAgICAgICAgICAgICAgKHJlLXNlYXJjaC1m b3J3YXJkIG9yZy1oZWFkaW5nLXJlZ2V4cCBuaWwgdCkpCiAgICAgICAgICAoZ290by1jaGFyICht YXRjaC1iZWdpbm5pbmcgMCkpCiAgICAgICAgICAobGV0ICgoaGVhZGluZyAob3JnLWVsZW1lbnQt YXQtcG9pbnQpKSkKICAgICAgICAgICAgKHNldHEgZm91bmQgKGZ1bmNhbGwgZmlsdGVyIGhlYWRp bmcpKSkpCiAgICAgICAgZm91bmQpKSkpCgooZGVmdW4gZHNsaWRlLS1yb290LWhlYWRpbmctYXQt cG9pbnQgKGZpbHRlciAmb3B0aW9uYWwgcG9pbnQpCiAgIlJldHVybiB0aGUgcm9vdCBoZWFkaW5n IGlmIHRoZSBQT0lOVCBpcyBjb250YWluZWQgYnkgb25lLiIKICAoc2F2ZS1leGN1cnNpb24KICAg ICh3aGVuIHBvaW50IChnb3RvLWNoYXIgcG9pbnQpKQogICAgKGxldCogKChlbGVtZW50IChvcmct ZWxlbWVudC1hdC1wb2ludCkpCiAgICAgICAgICAgKHBhcmVudCAob3IgKGRzbGlkZS0tZWxlbWVu dC1yb290IGVsZW1lbnQgJ2hlYWRsaW5lKQogICAgICAgICAgICAgICAgICAgICAgIChkc2xpZGUt LWRvY3VtZW50LWZpcnN0LWhlYWRpbmcgZmlsdGVyKSkpKQogICAgICAoaWYgKGZ1bmNhbGwgZmls dGVyIHBhcmVudCkKICAgICAgICAgIHBhcmVudAogICAgICAgIChvciAoZHNsaWRlLS1uZXh0LXNp YmxpbmcgcGFyZW50IGZpbHRlcikKICAgICAgICAgICAgKGRzbGlkZS0tcHJldmlvdXMtc2libGlu ZyBwYXJlbnQgZmlsdGVyKSkpKSkpCgooZGVmdW4gZHNsaWRlLWFuZCAoJnJlc3QgcHJlZGljYXRl cykKICAiQ29tYmluZSBQUkVESUNBVEVTIGZvciBmaWx0ZXJpbmcgZWxlbWVudHMuCkVhY2ggcHJl ZGljYXRlIHNob3VsZCB0YWtlIG9uZSBhcmd1bWVudCwgYW4gb3JnIGVsZW1lbnQuIgogIChsYW1i ZGEgKGVsZW1lbnQpCiAgICAoc2VxLXJlZHVjZQogICAgIChsYW1iZGEgKGJlZ2luIHByZWQpCiAg ICAgICAoYW5kIChvciAobm90IHByZWQpCiAgICAgICAgICAgICAgICAoYW5kIGJlZ2luIChmdW5j YWxsIHByZWQgYmVnaW4pKSkKICAgICAgICAgICAgYmVnaW4pKQogICAgIHByZWRpY2F0ZXMgZWxl bWVudCkpKQoKOzsgKiBTbGlkZSBIZWFkZXIKCjs7IFRoZXNlIHZhcmlhYmxlcyB3ZXJlIGJyb3Vn aHQgZm9yd2FyZCBmcm9tIG9yZy10cmVlLXNsaWRlLiAgVGhlcmUncyBub3QKOzsgc3VmZmljaWVu dCByZWFzb24gdG8gdXBncmFkZSB0aGVtIHRvIGN1c3RvbWl6ZSB2YXJpYWJsZXMgbm9yIHJlbW92 ZS4KCjs7IFRPRE8gdGhlc2UgY2FuIGJlIHVzZWQgYWNyb3NzIGJ1ZmZlcnMgd2hlbiBzZXQgYmVm b3JlIGNsb25pbmcgaW5kaXJlY3QKOzsgYnVmZmVycywgYnV0IHRoYXQncyBhIGNvaW5jaWRlbmNl LCBub3QgbmVjZXNzYXJpbHkgYSBkZXNpZ24gY2hvaWNlLgooZGVmdmFyLWxvY2FsIGRzbGlkZS10 aXRsZSBuaWwKICAiUHJlc2VudGF0aW9uIHRpdGxlLgpJZiB5b3UgaGF2ZSBcIiMrdGl0bGU6XCIg bGluZSBpbiB5b3VyIG9yZyBidWZmZXIsIGl0IHdpbCBiZSB1c2VkCmFzIGEgdGl0bGUgb2YgdGhl IHNsaWRlLiAgSWYgdGhlIGJ1ZmZlciBoYXMgbm8gXCIjK3RpdGxlOlwiIGxpbmUsCnRoZSBuYW1l IG9mIGN1cnJlbnQgYnVmZmVyIHdpbGwgYmUgZGlzcGxheWVkLiIpCgooZGVmdmFyLWxvY2FsIGRz bGlkZS1lbWFpbCBuaWwKICAiRW1haWwgYWRkcmVzcy4KSWYgeW91IGhhdmUgXCIjK2VtYWlsOlwi IGxpbmUgaW4geW91ciBvcmcgYnVmZmVyLCBpdCB3aWxsIGJlIHVzZWQKYXMgYW4gYWRkcmVzcyBv ZiB0aGUgc2xpZGUuIikKCihkZWZ2YXItbG9jYWwgZHNsaWRlLWF1dGhvciBuaWwKICAiQXV0aG9y IG5hbWUuCklmIHlvdSBoYXZlIFwiIythdXRob3I6XCIgbGluZSBpbiB5b3VyIG9yZyBidWZmZXIs IGl0IHdpbGwgYmUKdXNlZCBhcyBhIG5hbWUgb2YgdGhlIHNsaWRlIGF1dGhvci4iKQoKKGRlZnZh ci1sb2NhbCBkc2xpZGUtZGF0ZSBuaWwKICAiRGF0ZS4KSWYgeW91IGhhdmUgXCIjK2RhdGU6XCIg bGluZSBpbiB5b3VyIG9yZyBidWZmZXIsIGl0IHdpbGwgYmUgdXNlZAphcyB0aGUgZGF0ZS4iKQoK KGRlZnVuIGRzbGlkZS1tYWtlLWhlYWRlciAoY2xlYW51cCAmb3B0aW9uYWwgYnJlYWRjcnVtYnMp CiAgIkRyYXcgYSBoZWFkZXIgZm9yIHRoZSBmaXJzdCB0cmVlIGluIHRoZSByZXN0cmljdGlvbi4K Q0xFQU5VUCBpcyBub24tbmlsIGlmIHdlIGFyZSBvbmx5IGNsZWFuaW5nIHVwIHN0YXRlLgoKU2V0 IG9wdGlvbmFsIEJSRUFEQ1JVTUJTIHRvIG5vbi1uaWwgdG8gY3JlYXRlIGJyZWFkY3J1bWJzLiAg VGhlCmltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhlIGJ1ZmZlciBpcyByZXN0cmljdGVkIGFuZCB0 aGF0IHRoZXJlIGlzCmEgZmlyc3QgdHJlZS4gIFlvdSBtYXkgdXNlIGBkc2xpZGUtb3ZlcmxheXMn IHRvIGJlbmVmaXQKZnJvbSBleGlzdGluZyBzdGF0ZSBjbGVhbnVwLiIKICAod2hlbiBkc2xpZGUt LWhlYWRlci1vdmVybGF5CiAgICAgICAgKGRlbGV0ZS1vdmVybGF5IGRzbGlkZS0taGVhZGVyLW92 ZXJsYXkpKQoKICAodW5sZXNzIGNsZWFudXAKICAgIDs7IFVzZSBvZiBwb2ludC1taW4gaXMgYW4g aW1wbGVtZW50YXRpb24gYXNzdW1wdGlvbiwgdGhhdCB0aGUgaGVhZGVyIGlzIGFsd2F5cwogICAg OzsgYXQgdGhlIHZlcnkgdG9wIG9mIHRoZSBuYXJyb3dlZCByZWdpb24gYW5kIG5ldmVyIHdhbnRl ZCBhbnl3aGVyZSBlbHNlLgogICAgKHNldHEgZHNsaWRlLS1oZWFkZXItb3ZlcmxheQogICAgICAg ICAgKG1ha2Utb3ZlcmxheSAocG9pbnQtbWluKSAoKyAxIChwb2ludC1taW4pKSkpCgogICAgKGxl dCogKChrZXl3b3JkcyAob3JnLWNvbGxlY3Qta2V5d29yZHMKICAgICAgICAgICAgICAgICAgICAg ICcoIlRJVExFIiAiRU1BSUwiICJBVVRIT1IiICJEQVRFIikpKQogICAgICAgICAgICh0aXRsZSAo b3IgZHNsaWRlLXRpdGxlCiAgICAgICAgICAgICAgICAgICAgICAoY2FkciAoYXNzb2Mtc3RyaW5n ICJUSVRMRSIga2V5d29yZHMpKQogICAgICAgICAgICAgICAgICAgICAgKGJ1ZmZlci1uYW1lKSkp CiAgICAgICAgICAgKGF1dGhvciAob3IgZHNsaWRlLWF1dGhvcgogICAgICAgICAgICAgICAgICAg ICAgIChjYWRyIChhc3NvYyAiQVVUSE9SIiBrZXl3b3JkcykpKSkKICAgICAgICAgICAoZGF0ZSAo b3IgZHNsaWRlLWRhdGUKICAgICAgICAgICAgICAgICAgICAgKGNhZHIgKGFzc29jLXN0cmluZyAi REFURSIga2V5d29yZHMpKQogICAgICAgICAgICAgICAgICAgICAoZm9ybWF0LXRpbWUtc3RyaW5n ICIlWS0lbS0lZCIpKSkKICAgICAgICAgICAoZW1haWwgKHdoZW4tbGV0ICgoZW1haWwgKG9yIGRz bGlkZS1lbWFpbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhZHIg KGFzc29jLXN0cmluZyAiRU1BSUwiIGtleXdvcmRzKSkpKSkKICAgICAgICAgICAgICAgICAgICAo Y29uY2F0ICI8IiBlbWFpbCAiPiIpKSkKICAgICAgICAgICAoaW5mby1saW5lIChjb25jYXQKICAg ICAgICAgICAgICAgICAgICAgICAod2hlbiAoYW5kICBkc2xpZGUtaGVhZGVyLWRhdGUgZGF0ZSkK ICAgICAgICAgICAgICAgICAgICAgICAgIChkc2xpZGUtLWluZm8tZmFjZSAoY29uY2F0IGRhdGUg IiAgIikpKQogICAgICAgICAgICAgICAgICAgICAgICh3aGVuIChhbmQgIGRzbGlkZS1oZWFkZXIt YXV0aG9yIGF1dGhvcikKICAgICAgICAgICAgICAgICAgICAgICAgIChkc2xpZGUtLWluZm8tZmFj ZSAoY29uY2F0IGF1dGhvciAiICAiKSkpCiAgICAgICAgICAgICAgICAgICAgICAgKHdoZW4gKGFu ZCAgZHNsaWRlLWhlYWRlci1lbWFpbCBlbWFpbCkKICAgICAgICAgICAgICAgICAgICAgICAgIChk c2xpZGUtLWluZm8tZmFjZSAoY29uY2F0IGVtYWlsICIgICIpKSkpKQogICAgICAgICAgIChpbmZv LWxpbmUgKHdoZW4gaW5mby1saW5lCiAgICAgICAgICAgICAgICAgICAgICAgIChjb25jYXQgaW5m by1saW5lIChkc2xpZGUtLWluZm8tZmFjZSAiXG4iKSkpKSkKCiAgICAgIDs7ICBUaGUgY2FsbHMg dG8gYHByb3BlcnRpemUnIGFyZSBuZWVkZWQgaW4gY2FzZSB0aGUgc3RyaW5ncyBhcmUKICAgICAg OzsgIHNwZWNpZmllZCB3aXRob3V0IHByb3BlcnRpZXMgdGhleSBub3JtYWxseSB3b3VsZCBoYXZl IHdoZW4gZ2F0aGVyZWQKICAgICAgOzsgIGZyb20gdGhlIGZvbnRpZmllZCBidWZmZXIgdGV4dC4K ICAgICAgKGlmIGRzbGlkZS1oZWFkZXIKICAgICAgICAgIChvdmVybGF5LXB1dAogICAgICAgICAg IGRzbGlkZS0taGVhZGVyLW92ZXJsYXkgJ2JlZm9yZS1zdHJpbmcKICAgICAgICAgICAoY29uY2F0 IChkc2xpZGUtLW1hcmdpbi1saW5lcyBkc2xpZGUtbWFyZ2luLXRpdGxlLWFib3ZlKQogICAgICAg ICAgICAgICAgICAgKHByb3BlcnRpemUgdGl0bGUgJ2ZhY2UgJyhvcmctZG9jdW1lbnQtdGl0bGUg ZGVmYXVsdCkpCiAgICAgICAgICAgICAgICAgICAoZHNsaWRlLS1tYXJnaW4tbGluZXMgZHNsaWRl LW1hcmdpbi10aXRsZS1iZWxvdykKICAgICAgICAgICAgICAgICAgIGluZm8tbGluZQogICAgICAg ICAgICAgICAgICAgKHdoZW4gKGFuZCBicmVhZGNydW1icwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkc2xpZGUtYnJlYWRjcnVtYi1zZXBhcmF0b3IpCiAgICAgICAgICAgICAgICAgICAg IChjb25jYXQgKGRzbGlkZS0tZ2V0LXBhcmVudHMKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZHNsaWRlLWJyZWFkY3J1bWItc2VwYXJhdG9yKSkpCiAgICAgICAgICAgICAgICAgICAoZHNs aWRlLS1pbmZvLWZhY2UgIlxuIikKICAgICAgICAgICAgICAgICAgIChkc2xpZGUtLW1hcmdpbi1s aW5lcyBkc2xpZGUtbWFyZ2luLWNvbnRlbnQpKSkKCiAgICAgICAgKG92ZXJsYXktcHV0IGRzbGlk ZS0taGVhZGVyLW92ZXJsYXkgJ2JlZm9yZS1zdHJpbmcKICAgICAgICAgICAgICAgICAgICAgKGRz bGlkZS0tbWFyZ2luLWxpbmVzIGRzbGlkZS1tYXJnaW4tY29udGVudCkpKSkpKQoKKGRlZnVuIGRz bGlkZS0taW5mby1mYWNlIChzKQogIChwcm9nMSBzIChhZGQtZmFjZS10ZXh0LXByb3BlcnR5CiAg ICAgICAgICAgIDAgKGxlbmd0aCBzKSAnKG9yZy1kb2N1bWVudC1pbmZvIGRlZmF1bHQpIHQgcykp KQoKKGRlZnVuIGRzbGlkZS0tbWFyZ2luLWxpbmVzIChsaW5lcykKICAoZHNsaWRlLS1pbmZvLWZh Y2UKICAgKGlmIChkaXNwbGF5LWdyYXBoaWMtcCkKICAgICAgIChwcm9wZXJ0aXplICJcbiIKICAg ICAgICAgICAgICAgICAgICdsaW5lLWhlaWdodCAoZmxvYXQgbGluZXMpCiAgICAgICAgICAgICAg ICAgICAnZmFjZSAod2hlbiAoPCBsaW5lcyAxLjApCiAgICAgICAgICAgICAgICAgICAgICAgICAg IChsaXN0IDpoZWlnaHQgbGluZXMpKSkKICAgICAobWFrZS1zdHJpbmcgKGZsb29yIGxpbmVzKSA/ XG4pKSkpCgooZGVmdW4gZHNsaWRlLS1icmVhZGNydW1icy1yZWR1Y2VyIChkZWxpbSkKICAobGFt YmRhIChwcmV2aW91cyBuZXh0KQogICAgKGlmIChub3QgcHJldmlvdXMpIG5leHQKICAgICAgKGxl dCAoKHByb3BzICh0ZXh0LXByb3BlcnRpZXMtYXQgKDEtIChsZW5ndGggcHJldmlvdXMpKSBwcmV2 aW91cykpKQogICAgICAgIChjb25jYXQgcHJldmlvdXMgKGFwcGx5ICMncHJvcGVydGl6ZSBkZWxp bSBwcm9wcykKICAgICAgICAgICAgICAgIG5leHQpKSkpKQoKOzsgVE9ETyB1c2UgZWxlbWVudCBB UEkKKGRlZnVuIGRzbGlkZS0tZ2V0LXBhcmVudHMgKGRlbGltKQogICJHZXQgcGFyZW50IGhlYWRp bmdzIGFuZCBjb25jYXQgdGhlbSB3aXRoIERFTElNLiIKICA7OyBUaGUgaW1wbGVtZW50YXRpb24g aGVyZSB1c2VzIHRoZSByZWdleCAmIHBvaW50LWJhc2VkIHRlY2huaXF1ZXMgc28gdGhhdAogIDs7 IHdlJ3JlIGV4dHJhY3RpbmcgYnVmZmVyIHN0cmluZ3MsIHdoaWNoIHNhdmVzIHVzIGZyb20gaGF2 aW5nIHRvIHJlLXN0eWxlCiAgOzsgdGhlbSB0byBtYXRjaCB3aGF0ZXZlciBpcyBpbiB0aGUgYnVm ZmVyLgogIChzYXZlLWV4Y3Vyc2lvbgogICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKICAgIChz YXZlLXJlc3RyaWN0aW9uCiAgICAgICh3aWRlbikKICAgICAgKGxldCAoKHBhcmVudHMgbmlsKQog ICAgICAgICAgICAocmVkdWNlciAoZHNsaWRlLS1icmVhZGNydW1icy1yZWR1Y2VyIGRlbGltKSkp CiAgICAgICAgKHdoaWxlIChvcmctdXAtaGVhZGluZy1zYWZlKQogICAgICAgICAgKHB1c2ggKG9y Zy1nZXQtaGVhZGluZwogICAgICAgICAgICAgICAgICduby10YWdzCiAgICAgICAgICAgICAgICAg ZHNsaWRlLWJyZWFkY3J1bWJzLWhpZGUtdG9kby1zdGF0ZSkKICAgICAgICAgICAgICAgIHBhcmVu dHMpKQogICAgICAgIChsZXQgKChicmVhZGNydW1icyAoc2VxLXJlZHVjZSByZWR1Y2VyIHBhcmVu dHMgbmlsKSkpCiAgICAgICAgICAod2hlbiBkc2xpZGUtYnJlYWRjcnVtYi1mYWNlCiAgICAgICAg ICAgIChhZGQtZmFjZS10ZXh0LXByb3BlcnR5IDAgKGxlbmd0aCBicmVhZGNydW1icykKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHNsaWRlLWJyZWFkY3J1bWItZmFjZQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaWwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWRjcnVtYnMpKQogICAgICAgICAgYnJlYWRjcnVtYnMpKSkpKQoK OzsgKiBBbmltYXRpb24KCihkZWZ1biBkc2xpZGUtYW5pbWF0aW9uLXBlZWwgKG92ZXJsYXkpCiAg IlBlZWwgYXdheSBhbmQgZGVsZXRlIE9WRVJMQVkuIgogIChsZXQgKCh0aW1lciAodGltZXItY3Jl YXRlKSkKICAgICAgICAocGVlbC1yYXRlICgvIGRzbGlkZS1hbmltYXRpb24tZHVyYXRpb24KICAg ICAgICAgICAgICAgICAgICAgIChtYXggMSAoLSAob3ZlcmxheS1lbmQgb3ZlcmxheSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAob3ZlcmxheS1zdGFydCBvdmVybGF5KSkpKSkpCiAg ICAocHVzaCB0aW1lciBkc2xpZGUtLWFuaW1hdGlvbi10aW1lcnMpCiAgICAocHVzaCBvdmVybGF5 IGRzbGlkZS0tYW5pbWF0aW9uLW92ZXJsYXlzKQogICAgKHRpbWVyLXNldC10aW1lIHRpbWVyIChj dXJyZW50LXRpbWUpIHBlZWwtcmF0ZSkKICAgICh0aW1lci1zZXQtZnVuY3Rpb24gdGltZXIgIydk c2xpZGUtLWFuaW1hdGUtcGVlbAogICAgICAgICAgICAgICAgICAgICAgICAobGlzdCB0aW1lciBv dmVybGF5KSkKICAgICh0aW1lci1hY3RpdmF0ZSB0aW1lcikpKQoKOzsgVE9ETyBtb3ZlIHJlc3Bl Y3QgZm9yIGFuaW1hdGlvbiB2YXJpYWJsZXMgaW50byB0aGlzIGZ1bmN0aW9uLiAgQ3JlYXRlIGEK Ozsgc2Vuc2libGUgaW50ZWdyYXRpb24gYmV0d2VlbiBzbGlkaW5nIGFuZCBwZWVsaW5nIGFuaW1h dGlvbi4gIEFkZCBhIGN1c3RvbWl6ZSBpbnRlcmZhY2UuCjs7IFRPRE8gU3VwcG9ydCBub24tZ3Jh cGhpY2FsCjs7IFRPRE8gVXNlci1wcm92aWRlZCBhbmltYXRpb24gb3ZlcnJpZGUgZnVuY3Rpb24K KGRlZnVuIGRzbGlkZS1hbmltYXRpb24tc2V0dXAgKGJlZyBlbmQpCiAgIlNsaWRlIGluIHRoZSBy ZWdpb24gZnJvbSBCRUcgdG8gRU5ELgpFdmVyeXRoaW5nIGFmdGVyIEJFRyB3aWxsIGJlIGFuaW1h dGVkLiAgVGhlIHJlZ2lvbiBiZXR3ZWVuIEJFRwphbmQgdGhlIHZhbHVlIG9mIGBwb2ludC1tYXgn IHNob3VsZCBjb250YWluIGEgbmV3bGluZSBzb21ld2hlcmUuIgogIChkc2xpZGUtLWVuc3VyZS1z bGlkZS1idWZmZXIpCiAgKHdpdGhvdXQtcmVzdHJpY3Rpb24KICAgIChsZXQqICgoYnVmZmVyLWlu dmlzaWJpbGl0eS1zcGVjIG5pbCkKICAgICAgICAgICAodGltZXIgKHRpbWVyLWNyZWF0ZSkpCiAg ICAgICAgICAgKGdvYWwtdGltZSAodGltZS1hZGQgKGN1cnJlbnQtdGltZSkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkc2xpZGUtYW5pbWF0aW9uLWR1cmF0aW9uKSkKICAgICAgICAg ICAobmV3bGluZS1yZWdpb24gKHNhdmUtbWF0Y2gtZGF0YQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdv dG8tY2hhciBiZWcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgKHJlLXNlYXJj aC1mb3J3YXJkICJcbiIgZW5kIHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGxpc3QgKG1hdGNoLWJlZ2lubmluZyAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChtYXRjaC1lbmQgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChlcnJvciAiTm8gbmV3bGluZSBpbiByZWdpb24iKSkpKSkKICAgICAgICAgICAob3ZlcmxheSAo YXBwbHkgIydtYWtlLW92ZXJsYXkgbmV3bGluZS1yZWdpb24pKQogICAgICAgICAgIChpbml0aWFs LWxpbmUtaGVpZ2h0CiAgICAgICAgICAgIChvciAocGxpc3QtZ2V0CiAgICAgICAgICAgICAgICAg KHRleHQtcHJvcGVydGllcy1hdCAoY2FyIG5ld2xpbmUtcmVnaW9uKSkKICAgICAgICAgICAgICAg ICAnbGluZS1oZWlnaHQpCiAgICAgICAgICAgICAgICAxLjApKSkKICAgICAgKG92ZXJsYXktcHV0 IG92ZXJsYXkgJ2xpbmUtaGVpZ2h0IChmbG9hdCBkc2xpZGUtc2xpZGUtaW4tYmxhbmstbGluZXMp KQogICAgICAob3ZlcmxheS1wdXQgb3ZlcmxheSAncHJpb3JpdHkgMTApCiAgICAgIChwdXNoIHRp bWVyIGRzbGlkZS0tYW5pbWF0aW9uLXRpbWVycykKICAgICAgKHB1c2ggb3ZlcmxheSBkc2xpZGUt LWFuaW1hdGlvbi1vdmVybGF5cykKICAgICAgKHRpbWVyLXNldC10aW1lIHRpbWVyIChjdXJyZW50 LXRpbWUpCiAgICAgICAgICAgICAgICAgICAgICBkc2xpZGUtYW5pbWF0aW9uLWZyYW1lLWR1cmF0 aW9uKQogICAgICAodGltZXItc2V0LWZ1bmN0aW9uIHRpbWVyICMnZHNsaWRlLS1hbmltYXRlCiAg ICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3QgdGltZXIgZ29hbC10aW1lIG92ZXJsYXkgaW5p dGlhbC1saW5lLWhlaWdodCkpCiAgICAgICh0aW1lci1hY3RpdmF0ZSB0aW1lcikpKSkKCihkZWZ1 biBkc2xpZGUtLWFuaW1hdGUgKHRpbWVyIGdvYWwtdGltZSBvdmVybGF5IGluaXRpYWwtbGluZS1o ZWlnaHQpCiAgKGlmICh0aW1lLWxlc3MtcCBnb2FsLXRpbWUgKGN1cnJlbnQtdGltZSkpCiAgICAg IChwcm9nbiAoY2FuY2VsLXRpbWVyIHRpbWVyKQogICAgICAgICAgICAgKHNldHEgZHNsaWRlLS1h bmltYXRpb24tdGltZXJzCiAgICAgICAgICAgICAgICAgICAoZGVscSB0aW1lciBkc2xpZGUtLWFu aW1hdGlvbi10aW1lcnMpKQogICAgICAgICAgICAgKGRlbGV0ZS1vdmVybGF5IG92ZXJsYXkpCiAg ICAgICAgICAgICAoc2V0cSBkc2xpZGUtLWFuaW1hdGlvbi1vdmVybGF5cwogICAgICAgICAgICAg ICAgICAgKGRlbHEgb3ZlcmxheSBkc2xpZGUtLWFuaW1hdGlvbi1vdmVybGF5cykpKQogICAgKGxl dCogKChkaWZmICh0aW1lLXRvLXNlY29uZHMgKHRpbWUtc3VidHJhY3QgZ29hbC10aW1lIChjdXJy ZW50LXRpbWUpKSkpCiAgICAgICAgICAgKGZyYWN0aW9uIChleHB0ICgvIGRpZmYgZHNsaWRlLWFu aW1hdGlvbi1kdXJhdGlvbikgNS4wKSkKICAgICAgICAgICAobGluZXMgZHNsaWRlLXNsaWRlLWlu LWJsYW5rLWxpbmVzKQogICAgICAgICAgIChsaW5lLWhlaWdodCAoKyBpbml0aWFsLWxpbmUtaGVp Z2h0ICgqIGxpbmVzIGZyYWN0aW9uKSkpKQogICAgICAob3ZlcmxheS1wdXQgb3ZlcmxheSAnbGlu ZS1oZWlnaHQgbGluZS1oZWlnaHQpKSkpCgooZGVmdW4gZHNsaWRlLS1hbmltYXRlLXBlZWwgKHRp bWVyIG92ZXJsYXkpCiAgKGxldCAoKHN0YXJ0IChvdmVybGF5LXN0YXJ0IG92ZXJsYXkpKQogICAg ICAgIChlbmQgKG92ZXJsYXktZW5kIG92ZXJsYXkpKSkKICAgIChtb3ZlLW92ZXJsYXkgb3Zlcmxh eSAoMSsgc3RhcnQpIGVuZCkKICAgICh3aGVuICg9ICgxKyBzdGFydCkgZW5kKQogICAgICAoY2Fu Y2VsLXRpbWVyIHRpbWVyKQogICAgICAoc2V0cSBkc2xpZGUtLWFuaW1hdGlvbi10aW1lcnMKICAg ICAgICAgICAgKGRlbHEgdGltZXIgZHNsaWRlLS1hbmltYXRpb24tdGltZXJzKSkKICAgICAgOzsg VE9ETyBldmFwb3JhdGlvbj8KICAgICAgKGRlbGV0ZS1vdmVybGF5IG92ZXJsYXkpCiAgICAgIChz ZXRxIGRzbGlkZS0tYW5pbWF0aW9uLW92ZXJsYXlzCiAgICAgICAgICAgIChkZWxxIG92ZXJsYXkg ZHNsaWRlLS1hbmltYXRpb24tb3ZlcmxheXMpKSkpKQoKOzsgSWYgeW91IHdhbnQgdG8gbWFrZSBh IGN1c3RvbSBhbmltYXRpb24sIGp1c3QgbWFrZSBzdXJlIHRoYXQgaXQgaXMgY2xlYW5lZCB1cAo7 OyBieSB0aGlzIGZ1bmN0aW9uLiAgVGltZXJzIGdvIGluIGBkc2xpZGUtLWFuaW1hdGlvbi10aW1l cnMnLiAgT3ZlcmxheXMgZ28gaW4KOzsgYGRzbGlkZS0tYW5pbWF0aW9uLW92ZXJsYXlzJy4KKGRl ZnVuIGRzbGlkZS0tYW5pbWF0aW9uLWNsZWFudXAgKCkKICAod2hpbGUgZHNsaWRlLS1hbmltYXRp b24tdGltZXJzCiAgICAoY2FuY2VsLXRpbWVyIChwb3AgZHNsaWRlLS1hbmltYXRpb24tdGltZXJz KSkpCiAgKHdoaWxlIGRzbGlkZS0tYW5pbWF0aW9uLW92ZXJsYXlzCiAgICAoZGVsZXRlLW92ZXJs YXkgKHBvcCBkc2xpZGUtLWFuaW1hdGlvbi1vdmVybGF5cykpKSkKCjs7ICogQXNzb3J0ZWQgSW1w bGVtZW50YXRpb24gRGV0YWlscwoKKGRlZnVuIGRzbGlkZS0tZGVidWcgKHNsaWRlICZvcHRpb25h bCBzaXR1YXRpb24pCiAgKHdoZW4gZHNsaWRlLS1kZWJ1ZwogICAgKGxldCogKChoZWFkaW5nIChk c2xpZGUtaGVhZGluZyBzbGlkZSkpCiAgICAgICAgICAgKGhlYWRsaW5lLWJlZ2luIChvcmctZWxl bWVudC1wcm9wZXJ0eSA6YmVnaW4gaGVhZGluZykpCiAgICAgICAgICAgKGhlYWRsaW5lLWVuZCAo b3IgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpjb250ZW50cy1iZWdpbiBoZWFkaW5nKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6ZW5kIGhlYWRpbmcp KSkKICAgICAgICAgICAoc2l0dWF0aW9uIChvciBzaXR1YXRpb24KICAgICAgICAgICAgICAgICAg ICAgICAgICAiZHNsaWRlLS1kZWJ1ZyIpKSkKICAgICAgKG1lc3NhZ2UgIiVzIGJlZ2luOiAlcyBo ZWFkaW5nOiAlcyIKICAgICAgICAgICAgICAgc2l0dWF0aW9uCiAgICAgICAgICAgICAgIChtYXJr ZXItcG9zaXRpb24gKG9yZWYgc2xpZGUgYmVnaW4pKQogICAgICAgICAgICAgICAoc2F2ZS1yZXN0 cmljdGlvbgogICAgICAgICAgICAgICAgICh3aWRlbikKICAgICAgICAgICAgICAgICAoYnVmZmVy LXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzCiAgICAgICAgICAgICAgICAgIGhlYWRsaW5lLWJlZ2lu ICgxLSBoZWFkbGluZS1lbmQpKSkpKSkpCgooZGVmdW4gZHNsaWRlLS1jbGVhbnVwLXN0YXRlICgp CiAgIkNsZWFuIHVwIHN0YXRlcyBiZXR3ZWVuIGNvbnRlbnRzIGFuZCBzbGlkZXMuIgogICh3aGVu IGRzbGlkZS1oZWFkZXIKICAgIChmdW5jYWxsIChvciBkc2xpZGUtaGVhZGVyLWZ1bgogICAgICAg ICAgICAgICAgICMnZHNsaWRlLW1ha2UtaGVhZGVyKQogICAgICAgICAgICAgdCBuaWwpKQogIChk c2xpZGUtLWRlbGV0ZS1vdmVybGF5cykKICAoZHNsaWRlLS1hbmltYXRpb24tY2xlYW51cCkKICA7 OyBUT0RPIG9yZWYgJiBvc2V0IG91dHNpZGUgb2YgY2xhc3MKICAobWFwYyAobGFtYmRhIChmKSAo ZnVuY2FsbCBmIG5pbCkpCiAgICAgICAgKG9yZWYgZHNsaWRlLS1kZWNrIHN0ZXAtY2FsbGJhY2tz KSkKICAob3NldCBkc2xpZGUtLWRlY2sgc3RlcC1jYWxsYmFja3MgbmlsKQogIChyZW1vdmUtaG9v ayAncG9zdC1jb21tYW5kLWhvb2sgIydkc2xpZGUtLWNvbnRlbnRzLWhsLWxpbmUgdCkpCgooZGVm dW4gZHNsaWRlLS1lbnN1cmUtZGVjayAoKQogICJQcmVwYXJlIGZvciBzdGFydGluZyB0aGUgbWlu b3IgbW9kZS4KQ2FsbCB0aGlzIHdoZW4gd3JpdGluZyBjb21tYW5kcyB0aGF0IGNvdWxkIGJlIGNh bGxlZCBiZWZvcmUgb3IKYWZ0ZXIgYSBkZWNrIGV4aXN0cyBidXQgc2hvdWxkIGNyZWF0ZSBhIGRl Y2sgaWYgaXQgZG9lcyBub3QgZXhpc3QuCgpJbiBmdW5jdGlvbnMgdGhhdCBzaG91bGQgb25seSBi ZSBjYWxsZWQgd2hlbiBhIGRlY2sgaXMgYWxpdmUgYW5kCmFzc29jaWF0ZWQgd2l0aCB0aGUgY3Vy cmVudCBidWZmZXIsIHVzZSBgZHNsaWRlLWxpdmUtcCcKYW5kIHRocm93IGFuIGVycm9yIGlmIGl0 J3Mgbm90IGxpdmUuCgpUaGlzIGZ1bmN0aW9uIHNldHMgdXAgdGhlIGRlY2suICBNYW55IG9wZXJh dGlvbnMgc3VjaCBhcyBjYWxsaW5nCmhvb2tzIG11c3Qgb2NjdXIgaW4gdGhlIGRlY2sncyA6c2xp ZGUtYnVmZmVyLiIKICAodW5sZXNzIChkc2xpZGUtbGl2ZS1wKQogICAgOzsgUHJldmVudCBzdGFy dGluZyB3aXRoaW4gaW5kaXJlY3QgYnVmZmVycwogICAgKHdoZW4gKGJ1ZmZlci1iYXNlLWJ1ZmZl ciAoY3VycmVudC1idWZmZXIpKQogICAgICAoZXJyb3IgIkJ1ZmZlciBpcyBpbmRpcmVjdCBidXQg ZGVjayBpcyBhbHJlYWR5IGxpdmUiKSkKCiAgICA7OyBUT0RPIGNoZWNrIGFzc3VtZWQgaW5pdGlh bCBjb25kaXRpb25zCiAgICAobGV0KiAoKGJhc2UtYnVmZmVyIChjdXJyZW50LWJ1ZmZlcikpCiAg ICAgICAgICAgKHNsaWRlLWJ1ZmZlci1uYW1lIChmb3JtYXQgIipkZWNrOiAlcyoiIChidWZmZXIt bmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YmFzZS1idWZmZXIpKSkpCgogICAgICA7OyBzdGFsZSBidWZmZXJzIGxpa2VseSBpbmRpY2F0ZSBh biBpc3N1ZQogICAgICAod2hlbi1sZXQgKChzdGFsZS1idWZmZXIgKGdldC1idWZmZXIgc2xpZGUt YnVmZmVyLW5hbWUpKSkKICAgICAgICAoZGlzcGxheS13YXJuaW5nICcoZHNsaWRlIGRzbGlkZS0t ZW5zdXJlLWRlY2spCiAgICAgICAgICAgICAgICAgICAgICAgICAiU3RhbGUgZGVjayBidWZmZXIg d2FzIGtpbGxlZCIpCiAgICAgICAgKGtpbGwtYnVmZmVyIHNsaWRlLWJ1ZmZlci1uYW1lKSkKCiAg ICAgIChsZXQqICgoY2xhc3MgKG9yIChpbnRlcm4tc29mdCAoZHNsaWRlLS1rZXl3b3JkLXZhbHVl CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRTTElERV9ERUNLX0NMQVNT IikpCiAgICAgICAgICAgICAgICAgICAgICAgIGRzbGlkZS1kZWZhdWx0LWRlY2stY2xhc3MKICAg ICAgICAgICAgICAgICAgICAgICAgJ2RzbGlkZS1kZWNrKSkKICAgICAgICAgICAgIDs7IFRPRE8g ZGV0ZWN0IG1pc2NvbmZpZ3VyYXRpb24KICAgICAgICAgICAgIChmaWx0ZXIgKG9yIChpbnRlcm4t c29mdCAoZHNsaWRlLS1rZXl3b3JkLXZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJEU0xJREVfRklMVEVSIikpCiAgICAgICAgICAgICAgICAgICAgICAgICAjJ2Rz bGlkZS1idWlsdC1pbi1maWx0ZXIpKQogICAgICAgICAgICAgKHdpbmRvdy1jb25maWcgKGN1cnJl bnQtd2luZG93LWNvbmZpZ3VyYXRpb24pKQogICAgICAgICAgICAgKHNsaWRlLWJ1ZmZlciAoY2xv bmUtaW5kaXJlY3QtYnVmZmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGlkZS1idWZm ZXItbmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmlsKSkKICAgICAgICAgICAgIChk ZWNrIChhcHBseSBjbGFzcwogICAgICAgICAgICAgICAgICAgICAgICAgIDpiYXNlLWJ1ZmZlciBi YXNlLWJ1ZmZlcgogICAgICAgICAgICAgICAgICAgICAgICAgIDpzbGlkZS1idWZmZXIgc2xpZGUt YnVmZmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgOndpbmRvdy1jb25maWcgd2luZG93LWNv bmZpZwogICAgICAgICAgICAgICAgICAgICAgICAgIDpmaWx0ZXIgZmlsdGVyCiAgICAgICAgICAg ICAgICAgICAgICAgICAgbmlsKSkpCiAgICAgICAgKHNldHEgZHNsaWRlLS1kZWNrIGRlY2spCiAg ICAgICAgKGRpc3BsYXktYnVmZmVyIHNsaWRlLWJ1ZmZlciBkc2xpZGUtLWRpc3BsYXktYWN0aW9u cykKICAgICAgICAoc2V0LWJ1ZmZlciBzbGlkZS1idWZmZXIpCgogICAgICAgICh3aWRlbikKICAg ICAgICAob3JnLWZvbGQtc2hvdy1hbGwpCiAgICAgICAgOzsgRW50ZXIgdGhlIHN0YXRlIG1vZGVs CiAgICAgICAgKGRzbGlkZS0tY2hvb3NlLXNsaWRlIGRlY2sgZHNsaWRlLXN0YXJ0LWZyb20pKSkp KQoKKGRlZnVuIGRzbGlkZS0tc2hvd2luZy1jb250ZW50cy1wICgpCiAgIlJldHVybiB0IGlmIGN1 cnJlbnQgYnVmZmVyIGlzIGRpc3BsYXlpbmcgY29udGVudHMuIgogIChhbmQgZHNsaWRlLS1kZWNr CiAgICAgICAoZXEgKGN1cnJlbnQtYnVmZmVyKSAob3JlZiBkc2xpZGUtLWRlY2sgc2xpZGUtYnVm ZmVyKSkKICAgICAgIChlcSAnY29udGVudHMgKG9yZWYgZHNsaWRlLS1kZWNrIHNsaWRlLWJ1ZmZl ci1zdGF0ZSkpKSkKCihkZWZ1biBkc2xpZGUtLXNob3dpbmctc2xpZGVzLXAgKCkKICAiUmV0dXJu IHQgaWYgY3VycmVudCBidWZmZXIgaXMgZGlzcGxheWluZyBjb250ZW50cy4iCiAgKGFuZCBkc2xp ZGUtLWRlY2sKICAgICAgIChlcSAoY3VycmVudC1idWZmZXIpIChvcmVmIGRzbGlkZS0tZGVjayBz bGlkZS1idWZmZXIpKQogICAgICAgKGVxICdzbGlkZXMgKG9yZWYgZHNsaWRlLS1kZWNrIHNsaWRl LWJ1ZmZlci1zdGF0ZSkpKSkKCihkZWZ1biBkc2xpZGUtLWRlbGV0ZS1vdmVybGF5cyAoKQogICJE ZWxldGUgY29udGVudCBvdmVybGF5cy4iCiAgKHdoaWxlIGRzbGlkZS1vdmVybGF5cwogICAgKGRl bGV0ZS1vdmVybGF5IChwb3AgZHNsaWRlLW92ZXJsYXlzKSkpCiAgKHdoaWxlIGRzbGlkZS0tc3Rl cC1vdmVybGF5cwogICAgKGRlbGV0ZS1vdmVybGF5IChwb3AgZHNsaWRlLS1zdGVwLW92ZXJsYXlz KSkpCiAgKHdoZW4gZHNsaWRlLS1jb250ZW50cy1obC1saW5lLW92ZXJsYXkKICAgIChkZWxldGUt b3ZlcmxheSBkc2xpZGUtLWNvbnRlbnRzLWhsLWxpbmUtb3ZlcmxheSkpCiAgKHNldHEgZHNsaWRl LS1jb250ZW50cy1obC1saW5lLW92ZXJsYXkgbmlsKSkKCihkZWZ1biBkc2xpZGUtLWVuc3VyZS1z bGlkZS1idWZmZXIgKCZvcHRpb25hbCBkaXNwbGF5KQogICJTd2l0Y2ggdG8gdGhlIHNsaWRlIGJ1 ZmZlci4KVXNlIHRoaXMgaW4gZnVuY3Rpb25zIHdoaWNoIG11c3QgcnVuIGluIHRoZSBzbGlkZSBi dWZmZXIgYnV0CmNvdWxkIGJlIGNhbGxlZCBmcm9tIGFub3RoZXIgYnVmZmVyLiBPcHRpb25hbCBE SVNQTEFZIHdpbGwgYWxzbwplbnN1cmUgdGhhdCB0aGUgc2xpZGUgYnVmZmVyIGlzIHZpc2libGUu IgogICh1bmxlc3MgKGRzbGlkZS1saXZlLXApCiAgICAoZXJyb3IgIkxpdmUgZGVjayBub3QgZm91 bmQiKSkKICAoaWYgZGlzcGxheQogICAgICAobGV0ICgoc2xpZGUtYnVmZmVyIChvcmVmIGRzbGlk ZS0tZGVjayBzbGlkZS1idWZmZXIpKSkKICAgICAgICA7OyBUT0RPIHJlcXVpcmVzIGZ1cnRoZXIg dGFtaW5nIGlmIHVzZXIgaXMgdXNpbmcgbXVsdGlwbGUgZnJhbWVzLCBzdWNoCiAgICAgICAgOzsg YXMgZGlzcGxheWluZyBzb21lIGluZm9ybWF0aW9uIG9uIGEgcHJvamVjdG9yIGFuZCBvdGhlciBp bmZvcm1hdGlvbgogICAgICAgIDs7IG9uIGFub3RoZXIgZnJhbWUKICAgICAgICAodW5sZXNzIChn ZXQtYnVmZmVyLXdpbmRvdyBzbGlkZS1idWZmZXIpCiAgICAgICAgICAoZGlzcGxheS1idWZmZXIg c2xpZGUtYnVmZmVyIGRzbGlkZS0tZGlzcGxheS1hY3Rpb25zKSkpCiAgICAoc2V0LWJ1ZmZlciAo b3JlZiBkc2xpZGUtLWRlY2sgc2xpZGUtYnVmZmVyKSkpKQoKKGRlZnVuIGRzbGlkZS0ta2V5d29y ZC12YWx1ZSAoa2V5KQogICJHZXQgdmFsdWVzIGxpa2UgIytLRVkgZnJvbSBkb2N1bWVudCBrZXl3 b3Jkcy4iCiAgKGNhZHIgKGFzc29jLXN0cmluZyBrZXkgKG9yZy1jb2xsZWN0LWtleXdvcmRzIChs aXN0IGtleSkpKSkpCgooZGVmdW4gZHNsaWRlLS1mZWVkYmFjayAoa2V5KQogICJTaG93IGZlZWRi YWNrIG1lc3NhZ2UgZm9yIEtFWS4KU2VlIGBkc2xpZGUtZmVlZGJhY2stbWVzc2FnZXMnLiAgVGhp cyBwcm92aWRlcyBFeHBsaWNpdCBmZWVkYmFjawpmb3IgY29tbWFuZHMgd2l0aG91dCB2aXNpYmxl IHNpZGUgZWZmZWN0cy4iCiAgKHdoZW4tbGV0ICgoZmVlZGJhY2sgKHBsaXN0LWdldCBkc2xpZGUt ZmVlZGJhY2stbWVzc2FnZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSkp KQogICAgKGxldCAoKG1lc3NhZ2UtbG9nLW1heCBuaWwpKQogICAgICAobWVzc2FnZSAiJXMiIGZl ZWRiYWNrKSkpKQoKOzsgVE9ETyB0aGVzZSBjb3VsZCBjaGVjayBmb3IgaW5oZXJpdGFuY2UgZnJv bSBzb21lIGJhc2UgY2xhc3MsIHdoaWNoIHdvdWxkIHNhdmUKOzsgcGVvcGxlIHdobyB3cml0ZSBh Y3Rpb24gbmFtZXMgaW4gdGhlIGNsYXNzIHByb3BlcnR5IGV0Yy4KKGRlZnVuIGRzbGlkZS0tY2xh c3NlcyAoY2xhc3MtbmFtZXMpCiAgIkNMQVNTLU5BTUVTIGlzIGEgc3RyaW5nIHRoYXQgbWlnaHQg Y29udGFpbiBjbGFzcyBuYW1lcy4iCiAgKHdoZW4gY2xhc3MtbmFtZXMKICAgIChsZXQgKChjbGFz cy1uYW1lcyAoaWYgKHN0cmluZ3AgY2xhc3MtbmFtZXMpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIChzdHJpbmctc3BsaXQgY2xhc3MtbmFtZXMpCiAgICAgICAgICAgICAgICAgICAgICAgICBj bGFzcy1uYW1lcykpKQogICAgICAoY2wtbG9vcCBmb3IgbmFtZSBpbiBjbGFzcy1uYW1lcwogICAg ICAgICAgICAgICBmb3Igc3ltYm9sID0gKG9yICh3aGVuIChzeW1ib2xwIG5hbWUpIG5hbWUpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludGVybi1zb2Z0IG5hbWUpKQogICAgICAg ICAgICAgICBpZiAoZ2V0IHN5bWJvbCAnY2wtLWNsYXNzKQogICAgICAgICAgICAgICBjb2xsZWN0 IHN5bWJvbAogICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgIGRvIChkaXNwbGF5LXdh cm5pbmcKICAgICAgICAgICAgICAgICAgICcoZHNsaWRlCiAgICAgICAgICAgICAgICAgICAgIGRz bGlkZS1jbGFzcwogICAgICAgICAgICAgICAgICAgICBkc2xpZGUtZmlsdGVyKQogICAgICAgICAg ICAgICAgICAgKGZvcm1hdCAiQ2xhc3MgbmFtZSBub3QgYSBjbGFzczogJXMiIG5hbWUpKSkpKSkK CihkZWZ1biBkc2xpZGUtLWZpbHRlciAoZmlsdGVyLW5hbWUpCiAgIkZJTFRFUi1OQU1FIGlzIGEg c3RyaW5nIHRoYXQgbWlnaHQgY29udGFpbiBhIGZpbHRlciBuYW1lLiIKICAod2hlbi1sZXQgKChz eW1ib2wgKG9yIChhbmQgKHN5bWJvbHAgZmlsdGVyLW5hbWUpIGZpbHRlci1uYW1lKQogICAgICAg ICAgICAgICAgICAgICAgICAgKGludGVybi1zb2Z0IGZpbHRlci1uYW1lKSkpKQogICAgKGlmIChm dW5jdGlvbnAgc3ltYm9sKQogICAgICAgIHN5bWJvbAogICAgICAoZGlzcGxheS13YXJuaW5nCiAg ICAgICAnKGRzbGlkZQogICAgICAgICBkc2xpZGUtY2xhc3MKICAgICAgICAgZHNsaWRlLWZpbHRl cikKICAgICAgIChmb3JtYXQgIkZpbHRlciBuYW1lIG5vdCBhIGZ1bmN0aW9uOiAlcyIgZmlsdGVy LW5hbWUpKSkpKQoKKGRlZnVuIGRzbGlkZS0tcGFyc2UtY2xhc3Mtd2l0aC1hcmdzIChwcm9wZXJ0 eS1kYXRhKQogICh1bmxlc3MgKHN0cmluZz0gIm5pbCIgcHJvcGVydHktZGF0YSkKICAgIChsZXQg KChjbGFzc2VzLXdpdGgtYXJncwogICAgICAgICAgIChkc2xpZGUtLXBhcnNlLWNsYXNzZXMtd2l0 aC1hcmdzIHByb3BlcnR5LWRhdGEpKSkKICAgICAgKHByb2cxIChjYXIgY2xhc3Nlcy13aXRoLWFy Z3MpCiAgICAgICAgKHVubGVzcyAoPSAxIChsZW5ndGggY2xhc3Nlcy13aXRoLWFyZ3MpKQogICAg ICAgICAgKGRpc3BsYXktd2FybmluZyAnKGRzbGlkZSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGZvcm1hdCAiT25seSBvbmUgY2xhc3NlcyBhbGxvd2VkOiAlcyIKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoY2RyIGNsYXNzZXMtd2l0aC1hcmdzKSkpKSkpKSkKCihkZWZ1 biBkc2xpZGUtLWtleXdvcmQtc3ltYm9sLXAgKHN0cmluZykKICAoZXEgMCAoc3RyaW5nLW1hdGNo LXAgIjpcXCg/Olxcc3dcXHxcXHNfXFwpKyQiIHN0cmluZykpKQoKKGRlZnVuIGRzbGlkZS0tcGFy c2UtY2xhc3Nlcy13aXRoLWFyZ3MgKHByb3BlcnR5LWRhdGEpCiAgOzsgVG8gc3VwcG9ydCBvcmcn cyBtdWx0aXBsZS12YWx1ZSBwcm9wZXJ0aWVzLCB3ZSB3YW50IHRvIHBhcnNlIGEgc3RyaW5nIHRo YXQKICA7OyBsb29rcyBsaWtlICJjbGFzcy1uYW1lIDphcmcgdmFsIGNsYXNzLW5hbWUgOmFyZyB2 YWwgOmFyZyB2YWwiLCBiYXNpY2FsbHkgYQogIDs7IHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGVp dGhlciBjbGFzcyBuYW1lcyBvciBrZXktdmFsdWUgcGFpcnMgdGhhdCBhcmUKICA7OyBhcmd1bWVu dHMgZm9yIHRob3NlIGNsYXNzZXMgZHVyaW5nIGluc3RhbnRpYXRpb24uICBUaGUgcmVzdWx0IGlz IGEgZm9ybSBvZgogIDs7ICgoQ0xBU1MgLiBBUkdTKSkgd2hlcmUgQVJHUyBpcyBhIHBsaXN0Lgog ICh1bmxlc3MgKHN0cmluZz0gIm5pbCIgcHJvcGVydHktZGF0YSkKICAgIChsZXQgKCh0b2tlbnMg KHNwbGl0LXN0cmluZyBwcm9wZXJ0eS1kYXRhKSkKICAgICAgICAgIGNsYXNzZXMtd2l0aC1hcmdz CiAgICAgICAgICBjbGFzcy13aXRoLWFyZ3MpCiAgICAgIChjb25kaXRpb24tY2FzZSBlcnIKICAg ICAgICAgICh3aGlsZS1sZXQgKCh0b2tlbiAocG9wIHRva2VucykpCiAgICAgICAgICAgICAgICAg ICAgICAoY2xhc3MgKGRzbGlkZS0tY2xhc3MgdG9rZW4gdCkpKQogICAgICAgICAgICA7OyBwZWFr IGZvciBhIGtleSB0byBkZWNpZGUgaWYgd2UgY29udGludWUgcGFyc2luZyBhcyBhcmdzIGdvIGJh Y2sKICAgICAgICAgICAgOzsgdG8gcGFyc2luZyBhcyBjbGFzcyBuYW1lcwogICAgICAgICAgICAo cHVzaCBjbGFzcyBjbGFzcy13aXRoLWFyZ3MpCiAgICAgICAgICAgICh3aGlsZS1sZXQgKCh0b2tl biAoY2FyIHRva2VucykpCiAgICAgICAgICAgICAgICAgICAgICAgICh0b2tlbnAgKGRzbGlkZS0t a2V5d29yZC1zeW1ib2wtcCB0b2tlbikpKQogICAgICAgICAgICAgIDs7IGBpbnRlcm4tc29mdCcg b25seSBjcmVhdGVzIHRoZSBzeW1ib2wgaWYgaXQgY29ycmVzcG9uZHMgdG8gYW4KICAgICAgICAg ICAgICA7OyBleGlzdGluZyBjbGFzcyAoYW1vbmcgb3RoZXIgdGhpbmdzKQogICAgICAgICAgICAg IChwdXNoIChpbnRlcm4tc29mdCAocG9wIHRva2VucykpIGNsYXNzLXdpdGgtYXJncykKICAgICAg ICAgICAgICAobGV0ICgodmFsIChwb3AgdG9rZW5zKSkpCiAgICAgICAgICAgICAgICAocHVzaCAo Y2FyIChyZWFkLWZyb20tc3RyaW5nIHZhbCkpIGNsYXNzLXdpdGgtYXJncykpKQogICAgICAgICAg ICAocHVzaCAocmV2ZXJzZSBjbGFzcy13aXRoLWFyZ3MpIGNsYXNzZXMtd2l0aC1hcmdzKQogICAg ICAgICAgICAoc2V0cSBjbGFzcy13aXRoLWFyZ3MgbmlsKSkKICAgICAgICAod3JvbmctdHlwZS1h cmd1bWVudAogICAgICAgICAoZGlzcGxheS13YXJuaW5nCiAgICAgICAgICAnKGRzbGlkZSkgKGNk ciBlcnIpKSkpCiAgICAgIChyZXZlcnNlIGNsYXNzZXMtd2l0aC1hcmdzKSkpKQoKOzsgVGhpcyBz aG91bGQgbm90IGludGVycHJldCBuaWwncyBzcGVjaWFsbHkgYmVjYXVzZSB0aGF0IHNob3VsZCBo ZSBoYW5kbGVkCjs7IHVwc3RyZWFtIGJ5IHRoZSBwYXJzZSBmdW5jdGlvbnMKKGRlZnVuIGRzbGlk ZS0tY2xhc3MgKGNsYXNzLW5hbWUgJm9wdGlvbmFsIHNpZ25hbCkKICAiQ0xBU1MtTkFNRSBpcyBh IHN0cmluZyBvciBzeW1ib2wgdGhhdCBzaG91bGQgYmUgYSBjbGFzcyBuYW1lLgpPcHRpb25hbCBT SUdOQUwgaWYgeW91IHdhbnQgdG8gcHJvY2VzcyBgd3JvbmctdHlwZS1hcmd1bWVudCcgaW4KdGhl IGNhbGxlci4iCiAgKGxldCogKChzeW1ib2wgKG9yICh3aGVuIChzeW1ib2xwIGNsYXNzLW5hbWUp CiAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MtbmFtZSkKICAgICAgICAgICAgICAgICAgICAg KGludGVybi1zb2Z0IGNsYXNzLW5hbWUpKSkKICAgICAgICAgKGNsYXNzICh3aGVuIChnZXQgc3lt Ym9sICdjbC0tY2xhc3MpIHN5bWJvbCkpKQogICAgKGlmIChhbmQgY2xhc3Mgc3ltYm9sKQogICAg ICAgIHN5bWJvbAogICAgICAoaWYgc2lnbmFsCiAgICAgICAgICAoc2lnbmFsICd3cm9uZy10eXBl LWFyZ3VtZW50CiAgICAgICAgICAgICAgICAgIChmb3JtYXQgIkNsYXNzIG5hbWUgbm90IGEgY2xh c3M6ICVzIiBjbGFzcy1uYW1lKSkKICAgICAgICAoZGlzcGxheS13YXJuaW5nCiAgICAgICAgICco ZHNsaWRlKQogICAgICAgICAoZm9ybWF0ICJDbGFzcyBuYW1lIG5vdCBhIGNsYXNzOiAlcyIgY2xh c3MtbmFtZSkpCiAgICAgICAgbmlsKSkpKQoKOzsgKiBDb250ZW50cyBIaWdobGlnaHQgTGluZQoK OzsgQmFzaWNhbGx5IHdlIG5lZWQgdG8gdXNlIHRoZSBwb3N0LWNvbW1hbmQgaG9vayB0byB1cGRh dGUgYSBsaW5lIHdpdGggb3VyCjs7IGhhbmR5LWRhbmR5IGZhY2UuICBUaGlzIGlzIGJhc2ljYWxs eSBqdXN0IGEgbGVzcyBmZWF0dXJlLWZ1bCByZS1pbXBsZW1lbnRhdGlvbgo7OyBvZiBobC1saW5l LiAgaGwtbGluZSBpcyBraW5kIG9mIHN1YnRsZSBhbmQgd29ya3MgYWNyb3NzIGFsbCBidWZmZXJz LiAgVGhpcyBpcwo7OyBzYWZlciBhbmQgZGVmYXVsdHMgdG8gdGhlIGZhY2UgYXR0cmlidXRlLCA6 aW52ZXJzZS12aWRlbywgd2hpY2ggaXMgc3VwZXIgaGlnaAo7OyBjb250cmFzdCwgZ29vZCB3aGVu IG5hdmlnYXRpbmcgc2xpZGUgaGVhZGxpbmVzIGxpa2UgYSBtZW51LgooZGVmdW4gZHNsaWRlLS1j b250ZW50cy1obC1saW5lICgpCiAgKHVubGVzcyBkc2xpZGUtLWNvbnRlbnRzLWhsLWxpbmUtb3Zl cmxheQogICAgKHNldHEgZHNsaWRlLS1jb250ZW50cy1obC1saW5lLW92ZXJsYXkKICAgICAgICAg IChtYWtlLW92ZXJsYXkgKHBvaW50KSAocG9pbnQpKSkKICAgIChvdmVybGF5LXB1dCBkc2xpZGUt LWNvbnRlbnRzLWhsLWxpbmUtb3ZlcmxheQogICAgICAgICAgICAgICAgICdmYWNlICdkc2xpZGUt Y29udGVudHMtc2VsZWN0aW9uLWZhY2UpCiAgICAob3ZlcmxheS1wdXQgZHNsaWRlLS1jb250ZW50 cy1obC1saW5lLW92ZXJsYXkKICAgICAgICAgICAgICAgICAncHJpb3JpdHkgMTApKQogICh3aGVu LWxldCAoKGVsZW1lbnQgKG9yZy1lbGVtZW50LWF0LXBvaW50KSkpCiAgICAoc2V0ZiAob3Zlcmxh eS1zdGFydCBkc2xpZGUtLWNvbnRlbnRzLWhsLWxpbmUtb3ZlcmxheSkKICAgICAgICAgIChvcmct ZWxlbWVudC1wcm9wZXJ0eSA6YmVnaW4gZWxlbWVudCkpCiAgICAoc2V0ZiAob3ZlcmxheS1lbmQg ZHNsaWRlLS1jb250ZW50cy1obC1saW5lLW92ZXJsYXkpCiAgICAgICAgICAob3JnLWVsZW1lbnQt cHJvcGVydHkgOmVuZCBlbGVtZW50KSkpKQoKOzsgKiBMaWZlY3ljbGUKCihkZWZ2YXIta2V5bWFw IGRzbGlkZS1tb2RlLW1hcAogIDpkb2MgIlRoZSBrZXltYXAgZm9yIGBkc2xpZGUtbW9kZScuIgog ICI8bGVmdD4iICMnZHNsaWRlLWRlY2stYmFja3dhcmQKICAiPHJpZ2h0PiIgIydkc2xpZGUtZGVj ay1mb3J3YXJkCiAgIjx1cD4iICMnZHNsaWRlLWRlY2stc3RhcnQKICAiPGRvd24+IiAjJ2RzbGlk ZS1kZWNrLXN0b3ApCgo7OzsjIyNhdXRvbG9hZAooZGVmaW5lLW1pbm9yLW1vZGUgZHNsaWRlLW1v ZGUKICAiQSBwcmVzZW50YXRpb24gdG9vbCBmb3IgT3JnIE1vZGUuIgogIDppbnRlcmFjdGl2ZSBu aWwKICA6Z2xvYmFsIHQKICAodW5sZXNzIChlcSAnb3JnLW1vZGUgKGJ1ZmZlci1sb2NhbC12YWx1 ZQogICAgICAgICAgICAgICAgICAgICAgICAgJ21ham9yLW1vZGUgKGN1cnJlbnQtYnVmZmVyKSkp CiAgICAodXNlci1lcnJvciAiTm90IGFuIG9yZyBidWZmZXIiKQogICAgKGRzbGlkZS1tb2RlIC0x KSkKICAoY29uZCAoZHNsaWRlLW1vZGUKICAgICAgICAgOzsgQ3JlYXRlIHRoZSBpbmRpcmVjdCBi dWZmZXIgYW5kIGxpbmsgaXQgdmlhIHRoZSBkZWNrIG9iamVjdC4KICAgICAgICAgKGRzbGlkZS0t ZW5zdXJlLWRlY2spCiAgICAgICAgIChmdW5jYWxsIChvciBkc2xpZGUtc3RhcnQtZnVuY3Rpb24g Iydkc2xpZGUtZGlzcGxheS1zbGlkZXMpKQogICAgICAgICAocnVuLWhvb2tzICdkc2xpZGUtc3Rh cnQtaG9vaykKICAgICAgICAgKGRzbGlkZS0tZmVlZGJhY2sgOnN0YXJ0KSkKICAgICAgICAodAog ICAgICAgICAoZHNsaWRlLS1zdG9wKSkpKQoKKGRlZnVuIGRzbGlkZS1saXZlLXAgKCkKICAiQ2hl Y2sgaWYgYSBkZWNrIGlzIGFzc29jaWF0ZWQgc28gdGhhdCBjb21tYW5kcyBjYW4gY29tcGxldGUu IgogIChhbmQgZHNsaWRlLW1vZGUKICAgICAgIGRzbGlkZS0tZGVjawogICAgICAgKGRzbGlkZS1k ZWNrLWxpdmUtcCBkc2xpZGUtLWRlY2spKSkKCihkZWZ1biBkc2xpZGUtZGlzcGxheS1zbGlkZXMg KCkKICAoZHNsaWRlLS1lbnN1cmUtc2xpZGUtYnVmZmVyIHQpCiAgKGRzbGlkZS0tY2xlYW51cC1z dGF0ZSkKICAob3NldCBkc2xpZGUtLWRlY2sgc2xpZGUtYnVmZmVyLXN0YXRlICdzbGlkZXMpCiAg KHdpZGVuKQogIChvcmctZm9sZC1zaG93LWFsbCkKICAoZHNsaWRlLWJlZ2luIGRzbGlkZS0tZGVj aykpCgooZGVmdW4gZHNsaWRlLWRpc3BsYXktZGV2ZWxvcCAoKQogIChsZXQgKChzbGlkZS1idWZm ZXIgKG9yZWYgZHNsaWRlLS1kZWNrIHNsaWRlLWJ1ZmZlcikpKQogICAgKHVubGVzcyAoYW5kIChn ZXQtYnVmZmVyLXdpbmRvdyBzbGlkZS1idWZmZXIpCiAgICAgICAgICAgICAgICAgKGRzbGlkZS0t c2hvd2luZy1zbGlkZXMtcCkpCiAgICAgIChkc2xpZGUtZGlzcGxheS1zbGlkZXMpKSkKICAobGV0 ICgoYmFzZS1idWZmZXIgKG9yZWYgZHNsaWRlLS1kZWNrIGJhc2UtYnVmZmVyKSkpCiAgICAodW5s ZXNzIChnZXQtYnVmZmVyLXdpbmRvdyBiYXNlLWJ1ZmZlcikKICAgICAgKGRpc3BsYXktYnVmZmVy IGJhc2UtYnVmZmVyICdkaXNwbGF5LWJ1ZmZlci1wb3AtdXAtd2luZG93KSkpKQoKKGRlZnVuIGRz bGlkZS0tYmFzZS1idWZmZXItaGlnaGxpZ2h0LXJlZ2lvbiAoYmVnIGVuZCAmb3B0aW9uYWwgZmFj ZSkKICAiUHVsc2UgcmVnaW9uIGJldHdlZW4gQkVHIGFuZCBFTkQgaW4gYmFzZSBidWZmZXIuCk9w dGlvbmFsIEZBQ0UgZGVmYXVsdHMgdG8gYGRzbGlkZS1oaWdobGlnaHQnLiIKICAodW5sZXNzIChk c2xpZGUtbGl2ZS1wKQogICAgKGVycm9yICJMaXZlIGRlY2sgbm90IGZvdW5kIikpCiAgKGxldCAo KGJ1ZmZlciAoY3VycmVudC1idWZmZXIpKQogICAgICAgIChmYWNlIChvciBmYWNlICdkc2xpZGUt aGlnaGxpZ2h0KSkpCiAgICAoc2V0LWJ1ZmZlciAob3JlZiBkc2xpZGUtLWRlY2sgYmFzZS1idWZm ZXIpKQogICAgKGxldCAoKG92ZXJsYXkgKG1ha2Utb3ZlcmxheSBiZWcgZW5kKSkpCiAgICAgIChv dmVybGF5LXB1dCBvdmVybGF5ICdmYWNlIGZhY2UpCiAgICAgIChwdXNoIG92ZXJsYXkgZHNsaWRl LS1zdGVwLW92ZXJsYXlzKSkKICAgIChzZXQtYnVmZmVyIGJ1ZmZlcikpKQoKKGRlZnVuIGRzbGlk ZS0tYmFzZS1idWZmZXItaGlnaGxpZ2h0LWxpbmUgKCZvcHRpb25hbCBwb3MgZmFjZSkKICAiSGln aGxpZ2h0IGxpbmUgY29udGFpbmluZyBQT1Mgb3IgY3VycmVudCBwb2ludC4KT3B0aW9uYWwgRkFD RSBkZWZhdWx0cyB0byBgZHNsaWRlLWhpZ2hsaWdodCcuIgogICh1bmxlc3MgKGRzbGlkZS1saXZl LXApCiAgICAoZXJyb3IgIkxpdmUgZGVjayBub3QgZm91bmQiKSkKICAobGV0ICgoYnVmZmVyIChj dXJyZW50LWJ1ZmZlcikpCiAgICAgICAgKGZhY2UgKG9yIGZhY2UgJ2RzbGlkZS1oaWdobGlnaHQp KSkKICAgIChzZXQtYnVmZmVyIChvcmVmIGRzbGlkZS0tZGVjayBiYXNlLWJ1ZmZlcikpCiAgICAo c2F2ZS1leGN1cnNpb24KICAgICAgKHdoZW4gcG9zIChnb3RvLWNoYXIgcG9zKSkKICAgICAgKGxl dCogKChiZWcgKHByb2duICh2ZXJ0aWNhbC1tb3Rpb24gMCkgKHBvaW50KSkpCiAgICAgICAgICAg ICAoZW5kIChwcm9nbiAodmVydGljYWwtbW90aW9uIDEpIChwb2ludCkpKQogICAgICAgICAgICAg KG92ZXJsYXkgKG1ha2Utb3ZlcmxheSBiZWcgZW5kKSkpCiAgICAgICAgKG92ZXJsYXktcHV0IG92 ZXJsYXkgJ2ZhY2UgZmFjZSkKICAgICAgICAocHVzaCBvdmVybGF5IGRzbGlkZS0tc3RlcC1vdmVy bGF5cykpKQogICAgKHNldC1idWZmZXIgYnVmZmVyKSkpCgo7OyBUT0RPIHVzZSB0aGlzIHRvIGlt cGxlbWVudCBgZHNsaWRlLWdvdG8nCihkZWZ1biBkc2xpZGUtLWZvbGxvdyAocHJvZ3Jlc3MgJm9w dGlvbmFsIHNjcm9sbCkKICAiU2V0IHRoZSBiYXNlIGJ1ZmZlciB3aW5kb3cgcG9pbnQgdG8gUFJP R1JFU1MuClBST0dSRVNTIGlzIGEgc2xpZGUgb2JqZWN0LCBtYXJrZXIsIGJ1ZmZlciBwb3NpdGlv biwgb3JnIGVsZW1lbnQsCm9yZyBvYmplY3Qgb3IgYm9vbGVhbiAod2hpY2ggd2lsbCBiZSBpZ25v cmVkKS4gIE9wdGlvbmFsIHNjcm9sbAp3aWxsIGFkdmFuY2UgdGhlIHdpbmRvd3MgdG8gdGhlIGN1 cnJlbnQgYnVmZmVyIHJlc3RyaWN0aW9uIgogICh1bmxlc3MgKGRzbGlkZS1saXZlLXApCiAgICAo ZXJyb3IgIkxpdmUgZGVjayBub3QgZm91bmQiKSkKICAobGV0ICgocG9zIChjb25kICgoaW50ZWdl cnAgcHJvZ3Jlc3MpIHByb2dyZXNzKQogICAgICAgICAgICAgICAgICAgKChlaWVpby1vYmplY3Qt cCBwcm9ncmVzcykKICAgICAgICAgICAgICAgICAgICAobWFya2VyLXBvc2l0aW9uIChvcmVmIHBy b2dyZXNzIGJlZ2luKSkpCiAgICAgICAgICAgICAgICAgICAoKG1hcmtlcnAgcHJvZ3Jlc3MpICht YXJrZXItcG9zaXRpb24gcHJvZ3Jlc3MpKQogICAgICAgICAgICAgICAgICAgKChhbmQgKGxpc3Rw IHByb2dyZXNzKQogICAgICAgICAgICAgICAgICAgICAgICAgKG9yIChtZW1iZXIgKGNhciBwcm9n cmVzcykgb3JnLWVsZW1lbnQtYWxsLWVsZW1lbnRzKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChtZW1iZXIgKGNhciBwcm9ncmVzcykgb3JnLWVsZW1lbnQtYWxsLW9iamVjdHMpKSkKICAg ICAgICAgICAgICAgICAgICAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmJlZ2luIHByb2dyZXNzKSkp KQogICAgICAgIHNsaWRlLWJ1ZmZlci1wb2ludC1taW4pCiAgICAod2hlbiAoYW5kIChub3QgKGJv b2xlYW5wIHByb2dyZXNzKSkgKG51bGwgcG9zKSkKICAgICAgKG1lc3NhZ2UgIkluY29tcHJlaGVu c2libGUgcHJvZ3Jlc3MgcmVwb3J0ZWQ6ICVzIiBwcm9ncmVzcykpCiAgICAod2hlbiAoYW5kIHBv cyBkc2xpZGUtYmFzZS1mb2xsb3dzLXNsaWRlKQogICAgICAoc2V0LWJ1ZmZlciAob3JlZiBkc2xp ZGUtLWRlY2sgc2xpZGUtYnVmZmVyKSkKICAgICAgKHNldHEgc2xpZGUtYnVmZmVyLXBvaW50LW1p biAocG9pbnQtbWluKSkKICAgICAgKHNldC1idWZmZXIgKG9yZWYgZHNsaWRlLS1kZWNrIGJhc2Ut YnVmZmVyKSkKICAgICAgKHVubGVzcyAoYW5kICg+PSBwb3MgKHBvaW50LW1pbikpCiAgICAgICAg ICAgICAgICAgICAoPD0gcG9zIChwb2ludC1tYXgpKSkKICAgICAgICAod2lkZW4pKQogICAgICAo Z290by1jaGFyIHBvcykKICAgICAgKGRzbGlkZS0tYmFzZS1idWZmZXItaGlnaGxpZ2h0LWxpbmUp CiAgICAgIDs7IFRPRE8gbWF5YmUgb25seSB0d28gb2YgdGhlc2UgYXJlIGFjdHVhbGx5IG5lY2Vz c2FyeQogICAgICAob3JnLWZvbGQtc2hvdy1jb250ZXh0KQogICAgICAob3JnLWZvbGQtc2hvdy1l bnRyeSkKICAgICAgKG9yZy1mb2xkLXNob3ctc3VidHJlZSkKICAgICAgKHdoZW4tbGV0ICgod2lu ZG93cyAoZ2V0LWJ1ZmZlci13aW5kb3ctbGlzdCAoY3VycmVudC1idWZmZXIpIG5pbCB0KSkpCiAg ICAgICAgKG1hcGMgKGxhbWJkYSAodykKICAgICAgICAgICAgICAgIChzZXQtd2luZG93LXBvaW50 IHcgcG9zKQogICAgICAgICAgICAgICAgKHdoZW4gc2Nyb2xsCiAgICAgICAgICAgICAgICAgICh3 aXRoLXNlbGVjdGVkLXdpbmRvdyB3CiAgICAgICAgICAgICAgICAgICAgKGdvdG8tY2hhciBzbGlk ZS1idWZmZXItcG9pbnQtbWluKQogICAgICAgICAgICAgICAgICAgIDs7IFRPRE8gMTAgaXMgY29t cGxldGVseSBhcmJpdHJhcnkKICAgICAgICAgICAgICAgICAgICAocmVjZW50ZXIgMTApKSkpCiAg ICAgICAgICAgICAgd2luZG93cykpCiAgICAgIChzZXQtYnVmZmVyIChvcmVmIGRzbGlkZS0tZGVj ayBzbGlkZS1idWZmZXIpKSkpKQoKKGRlZnVuIGRzbGlkZS1kaXNwbGF5LWNvbnRlbnRzICgpCiAg IlN3aXRjaCB0byBzaG93aW5nIGNvbnRlbnRzIGluIHRoZSBzbGlkZSBidWZmZXIuClRoaXMgaXMg YSB2YWxpZCBgZHNsaWRlLXN0YXJ0LWZ1bmN0aW9uJyBhbmQgd2lsbCBzdGFydAplYWNoIHNsaWRl IHNob3cgZnJvbSB0aGUgY29udGVudHMgdmlldy4iCiAgKGRzbGlkZS0tZW5zdXJlLXNsaWRlLWJ1 ZmZlciB0KQogIChkc2xpZGUtZmluYWwgZHNsaWRlLS1kZWNrKQogIChkc2xpZGUtLWNsZWFudXAt c3RhdGUpCiAgKG9zZXQgZHNsaWRlLS1kZWNrIHNsaWRlLWJ1ZmZlci1zdGF0ZSAnY29udGVudHMp CiAgKHdpZGVuKQogIChvcmctb3ZlcnZpZXcpCiAgKGxldCAoKGRhdGEgKG9yZy1lbGVtZW50LXBh cnNlLWJ1ZmZlcikpCiAgICAgICAgKGZpbHRlciAoZHNsaWRlLS1maWx0ZXItZnVuY3Rpb24gZHNs aWRlLS1kZWNrKSkpCiAgICA7OyBoaWRlIGZpbHRlcmVkIGhlYWRpbmdzCiAgICAob3JnLWVsZW1l bnQtbWFwIGRhdGEgJ2hlYWRsaW5lCiAgICAgIChsYW1iZGEgKGUpCiAgICAgICAgKHVubGVzcyAo ZnVuY2FsbCBmaWx0ZXIgZSkKICAgICAgICAgIChsZXQgKChvdmVybGF5IChtYWtlLW92ZXJsYXkK ICAgICAgICAgICAgICAgICAgICAgICAgICAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmJlZ2luIGUp CiAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yZy1lbGVtZW50LXByb3BlcnR5IDplbmQgZSkp KSkKICAgICAgICAgICAgKG92ZXJsYXktcHV0IG92ZXJsYXkgJ2Rpc3BsYXkgIlxuIikKICAgICAg ICAgICAgKHB1c2ggb3ZlcmxheSBkc2xpZGUtb3ZlcmxheXMpKSkpCiAgICAgIG5pbCBuaWwgdCkK ICAgIChnb3RvLWNoYXIKICAgICAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmJlZ2luIChkc2xpZGUt LXJvb3QtaGVhZGluZy1hdC1wb2ludCBmaWx0ZXIpKSkKICAgIChyZWNlbnRlcikKCiAgICAoaWYt bGV0ICgoZmlyc3QgKGRzbGlkZS0tZG9jdW1lbnQtZmlyc3QtaGVhZGluZyBmaWx0ZXIpKSkKICAg ICAgICAobmFycm93LXRvLXJlZ2lvbiAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmJlZ2luIGZpcnN0 KQogICAgICAgICAgICAgICAgICAgICAgICAgIChwb2ludC1tYXgpKQogICAgICA7OyBObyBmaXJz dCBoZWFkaW5nLiAgSnVzdCBoZWFkZXIuICBFbXB0eSBjb250ZW50cy4KICAgICAgKG5hcnJvdy10 by1yZWdpb24gKHBvaW50LW1heCkKICAgICAgICAgICAgICAgICAgICAgICAgKHBvaW50LW1heCkp KSkKICAocnVuLWhvb2tzICdkc2xpZGUtbmFycm93LWhvb2spCiAgKHdoZW4gZHNsaWRlLWhlYWRl cgogICAgKGZ1bmNhbGwgKG9yIGRzbGlkZS1oZWFkZXItZnVuICMnZHNsaWRlLW1ha2UtaGVhZGVy KSBuaWwgbmlsKSkKCiAgKHdoZW4gZHNsaWRlLWNvbnRlbnRzLXNlbGVjdGlvbi1oaWdobGlnaHQK ICAgIChhZGQtaG9vayAncG9zdC1jb21tYW5kLWhvb2sgIydkc2xpZGUtLWNvbnRlbnRzLWhsLWxp bmUgbmlsIHQpKQoKICAoZHNsaWRlLS1mZWVkYmFjayA6Y29udGVudHMpCiAgKHJ1bi1ob29rcyAn ZHNsaWRlLWNvbnRlbnRzLWhvb2spKQoKKGRlZnVuIGRzbGlkZS0tc3RvcCAoKQogICJTdG9wIHRo ZSBwcmVzZW50YXRpb24gZW50aXJlbHkuCktpbGxzIHRoZSBpbmRpcmVjdCBidWZmZXIsIGZvcmdl dHMgdGhlIGRlY2ssIGFuZCBkaXNwbGF5cyB0aGUKc291cmNlIGJ1ZmZlci4iCiAgKGludGVyYWN0 aXZlKQogICh3aGVuLWxldCogKChkZWNrIGRzbGlkZS0tZGVjaykKICAgICAgICAgICAgICAoc2xp ZGUtYnVmZmVyIChvcmVmIGRlY2sgc2xpZGUtYnVmZmVyKSkKICAgICAgICAgICAgICAoYmFzZS1i dWZmZXIgKG9yZWYgZGVjayBiYXNlLWJ1ZmZlcikpKQogICAgKHdpdGgtZGVtb3RlZC1lcnJvcnMg IkRlY2sgZmluYWxpemF0aW9uIGZhaWxlZDogJXMiCiAgICAgIChkc2xpZGUtZmluYWwgZHNsaWRl LS1kZWNrKSkKICAgIDs7IEFuaW1hdGlvbiB0aW1lcnMgZXNwZWNpYWxseSBzaG91bGQgYmUgc3Rv cHBlZAogICAgKGRzbGlkZS0tY2xlYW51cC1zdGF0ZSkKICAgICh3aGVuIHNsaWRlLWJ1ZmZlcgog ICAgICAoa2lsbC1idWZmZXIgc2xpZGUtYnVmZmVyKSkKICAgIChkaXNwbGF5LWJ1ZmZlciBiYXNl LWJ1ZmZlciBkc2xpZGUtLWRpc3BsYXktYWN0aW9ucykKICAgIChzZXQtYnVmZmVyIGJhc2UtYnVm ZmVyKQogICAgKHJlY2VudGVyICh3aW5kb3ctaGVpZ2h0KSkKICAgIChzZXRxIGRzbGlkZS0tZGVj ayBuaWwpCiAgICAod2hlbiBkc2xpZGUtbW9kZQogICAgICAoZHNsaWRlLW1vZGUgLTEpKQogICAg KHJ1bi1ob29rcyAnZHNsaWRlLXN0b3AtaG9vaykKICAgIChkc2xpZGUtLWZlZWRiYWNrIDpzdG9w KSkpCgooZGVmdW4gZHNsaWRlLWN1cnNvci1oaWRlICgpCiAgIkhpZGUgdGhlIGN1cnNvciBjb21w bGV0ZWx5LgpDYWxsIGBkc2xpZGUtY3Vyc29yLXJlc3RvcmUnIHRvIHJldmVydC4iCiAgKGludGVy YWN0aXZlKQogIChzZXRxLWxvY2FsIGJsaW5rLWN1cnNvci1hbGlzdCAnKChuaWwgLiBuaWwpKSkK ICAoc2V0cS1sb2NhbCBjdXJzb3ItdHlwZSBuaWwpKQoKKGRlZnVuIGRzbGlkZS1jdXJzb3ItcmVz dG9yZSAoKQogICJIaWRlIHRoZSBjdXJzb3IgY29tcGxldGVseS4KQ2FsbCBgZHNsaWRlLWN1cnNv ci1yZXN0b3JlJyB0byByZXZlcnQuIgogIChpbnRlcmFjdGl2ZSkKICAoc2V0cS1sb2NhbCBibGlu ay1jdXJzb3ItYWxpc3QgKGRlZmF1bHQtdmFsdWUgJ2JsaW5rLWN1cnNvci1hbGlzdCkpCiAgKHNl dHEtbG9jYWwgY3Vyc29yLXR5cGUgKGRlZmF1bHQtdmFsdWUgJ2N1cnNvci10eXBlKSkpCgo7OyAq IFVzZXIgQ29tbWFuZHMKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBkc2xpZGUtZGVjay1zdG9wICgp CiAgIlN0b3AgdGhlIHByZXNlbnRhdGlvbi4KSXQgaXMgcmVjb21tZW5kZWQgdG8gbm90IGJpbmQg dGhpcyB0byBhIGNvbnRyb2xsZXIgYnV0dG9uIHVubGVzcwp5b3UgaGF2ZSBmaXZlIGJ1dHRvbnMg b3Igd2lsbCB1c2UgdGhlIGRpc3BsYXkgYnV0dG9uIHRvIHN0b3AgYW5kCmNhbiByZWxpYWJseSBz ZWxlY3QgZGlzcGxheXMgdmlhIG90aGVyIG1lYW5zLiIKICAoaW50ZXJhY3RpdmUpCiAgKGRzbGlk ZS0tc3RvcCkpCgo7OyBUT0RPIG1ha2Ugc2Vjb25kYXJ5IGFjdGlvbnMgc3VwcG9ydGVkCjs7OyMj I2F1dG9sb2FkCihkZWZ1biBkc2xpZGUtZGVjay1zdGFydCAoKQogICJTdGFydCBwcmVzZW50YXRp b24gb3Igc2Vjb25kYXJ5IGFjdGlvbi4KSXQgaXMgcmVjb21tZW5kZWQgdG8gYmluZCB0aGlzIGlu IHRoZSBgb3JnLW1vZGUtbWFwJy4gIEl0IHN0YXJ0cwp0aGUgbW9kZSBpZiB0aGUgbW9kZSBpcyBp bmFjdGl2ZS4KCkl0IGlzIGFsc28gcmVjb21tZW5kZWQgdG8gYmluZCB0aGlzIHRvIHRoZSBwbGF5 IGJ1dHRvbiBvbiBhCnByZXNlbnRhdGlvbiBjb250cm9sbGVyLiAgSXRzIGJlaGF2aW9yIHdpbGwg YmUgb3ZlcmxvYWRlZCB3aXRoIGEKc2Vjb25kYXJ5IGFjdGlvbiwgc3VjaCBhcyBwbGF5aW5nIGEg dmlkZW8gb24gdGhlIHNsaWRlLCBpZiBvbmUgaXMKYXZhaWxhYmxlLiAgVGhlIGRlZmF1bHQgc2Vj b25kYXJ5IHRhc2sgaXMgdGhlIGNvbnRlbnRzIHZpZXcuCgpUT0RPIEFkZCBzdXBwb3J0IGZvciBh cmJpdHJhcnkgc2Vjb25kYXJ5IHRhc2tzIGxpa2UgcGxheWluZyBhCnZpZGVvIG9yIGN1c3RvbSBh Y3Rpb25zLiIKICAoaW50ZXJhY3RpdmUpCiAgKGlmIChkc2xpZGUtbGl2ZS1wKQogICAgICAoaWYg KGdldC1idWZmZXItd2luZG93IChvcmVmIGRzbGlkZS0tZGVjayBzbGlkZS1idWZmZXIpKQogICAg ICAgICAgKHByb2duCiAgICAgICAgICAgIChkc2xpZGUtLWVuc3VyZS1zbGlkZS1idWZmZXIpCiAg ICAgICAgICAgIChpZiAoZHNsaWRlLS1zaG93aW5nLXNsaWRlcy1wKQogICAgICAgICAgICAgICAg OzsgVE9ETyBjaGVjayBmb3Igc2Vjb25kYXJ5IHRhc2sgaGVyZQogICAgICAgICAgICAgICAgKGRz bGlkZS1kaXNwbGF5LWNvbnRlbnRzKQogICAgICAgICAgICAgIChkc2xpZGUtLWNob29zZS1zbGlk ZSBkc2xpZGUtLWRlY2sgJ2NvbnRlbnRzKQogICAgICAgICAgICAgIChkc2xpZGUtZGlzcGxheS1z bGlkZXMpKSkKICAgICAgICAoZHNsaWRlLS1lbnN1cmUtc2xpZGUtYnVmZmVyIHQpKQogICAgKGxl dCAoKGRzbGlkZS1zdGFydC1mdW5jdGlvbiAjJ2RzbGlkZS1kaXNwbGF5LXNsaWRlcykpCiAgICAg IChkc2xpZGUtbW9kZSAxKSkpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGRzbGlkZS1kZWNrLWRl dmVsb3AgKCkKICAiU2hvdyBib3RoIHRoZSBiYXNlIGFuZCBzbGlkZSBidWZmZXIuIgogIChpbnRl cmFjdGl2ZSkKICAobGV0ICgobWFqb3ItbW9kZSAoYnVmZmVyLWxvY2FsLXZhbHVlICdtYWpvci1t b2RlIChjdXJyZW50LWJ1ZmZlcikpKSkKICAgICh1bmxlc3MgKG9yIChkc2xpZGUtbGl2ZS1wKSAo ZGVyaXZlZC1tb2RlLXAgJ29yZy1tb2RlKSkKICAgICAgKHVzZXItZXJyb3IgIk5vdCBhbiBvcmcg YnVmZmVyIGFuZCBubyBvdGhlciBsaXZlIHByZXNlbnRhdGlvbiIpKQogICAgKGlmIChkc2xpZGUt bGl2ZS1wKQogICAgICAgIDs7ICBzaG93IHRoZSBjb3JyZWN0IGJ1ZmZlcnMKICAgICAgICAoZHNs aWRlLWRpc3BsYXktZGV2ZWxvcCkKICAgICAgKGxldCAoKGRzbGlkZS1zdGFydC1mdW5jdGlvbiAj J2RzbGlkZS1kaXNwbGF5LWRldmVsb3ApKQogICAgICAgIChkc2xpZGUtbW9kZSAxKSkpKSkKCjs7 OyMjI2F1dG9sb2FkCihkZWZ1biBkc2xpZGUtZGVjay1mb3J3YXJkICgpCiAgIkFkdmFuY2Ugc2xp ZGVzaG93IGZvcndhcmQuIgogIChpbnRlcmFjdGl2ZSkKICA7OyBUT0RPIHRoaXMgZG9lcyBub3Qg ZGlzcGxheSB0aGUgYnVmZmVyIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhbnkgYnVmZmVyCiAgOzsg dHJhY2tpbmcgeWV0LiAgQmFiZWwgaW50ZWdyYXRpb25zIHdpdGggb3RoZXIgYnVmZmVycyBtdXN0 IHRha2UgY2FyZSwgYXMKICA7OyBtdXN0IHByZXNlbnRlcnMuCiAgKGRzbGlkZS0tZW5zdXJlLXNs aWRlLWJ1ZmZlcikKICAoaWYgKGRzbGlkZS0tc2hvd2luZy1jb250ZW50cy1wKQogICAgICAobGV0 KiAoKGZpbHRlciAoZHNsaWRlLS1maWx0ZXItZnVuY3Rpb24gZHNsaWRlLS1kZWNrKSkKICAgICAg ICAgICAgIChjdXJyZW50IChkc2xpZGUtLXJvb3QtaGVhZGluZy1hdC1wb2ludCBmaWx0ZXIpKQog ICAgICAgICAgICAgKG5leHQgKGRzbGlkZS0tbmV4dC1zaWJsaW5nIGN1cnJlbnQgZmlsdGVyKSkp CiAgICAgICAgKGlmIG5leHQKICAgICAgICAgICAgKGdvdG8tY2hhciAob3JnLWVsZW1lbnQtcHJv cGVydHkgOmJlZ2luIG5leHQpKQogICAgICAgICAgKG1lc3NhZ2UgIk5vIG1vcmUgc2xpZGVzISIp KQogICAgICAgICh3aGlsZSBkc2xpZGUtLXN0ZXAtb3ZlcmxheXMKICAgICAgICAgIChkZWxldGUt b3ZlcmxheSAocG9wIGRzbGlkZS0tc3RlcC1vdmVybGF5cykpKQogICAgICAgIChkc2xpZGUtLWZv bGxvdyAocG9pbnQpKSkKICAgIChkc2xpZGUtLWVuc3VyZS1zbGlkZS1idWZmZXIpCiAgICAoaWYg KGVxIChvcmVmIGRzbGlkZS0tZGVjayBiYXNlLWJ1ZmZlcikKICAgICAgICAgICAgKHdpbmRvdy1i dWZmZXIgKHNlbGVjdGVkLXdpbmRvdykpKQogICAgICAgIChpZi1sZXQgKCh3aW5kb3cgKGdldC1i dWZmZXItd2luZG93CiAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yZWYgZHNsaWRlLS1kZWNr IHNsaWRlLWJ1ZmZlcikpKSkKICAgICAgICAgICAgKHdpdGgtc2VsZWN0ZWQtd2luZG93IHdpbmRv dwogICAgICAgICAgICAgIChkc2xpZGUtZm9yd2FyZCBkc2xpZGUtLWRlY2spKSkKICAgICAgKGRz bGlkZS1mb3J3YXJkIGRzbGlkZS0tZGVjaykpKSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBkc2xp ZGUtZGVjay1iYWNrd2FyZCAoKQogICJBZHZhbmNlIHNsaWRlc2hvdyBiYWNrd2FyZC4iCiAgKGlu dGVyYWN0aXZlKQogIDs7IFRPRE8gdGhpcyBkb2VzIG5vdCBkaXNwbGF5IHRoZSBidWZmZXIgYmVj YXVzZSB3ZSBkb24ndCBoYXZlIGFueSBidWZmZXIKICA7OyB0cmFja2luZyB5ZXQuICBCYWJlbCBp bnRlZ3JhdGlvbnMgd2l0aCBvdGhlciBidWZmZXJzIG11c3QgdGFrZSBjYXJlLCBhcwogIDs7IG11 c3QgcHJlc2VudGVycy4KICAoZHNsaWRlLS1lbnN1cmUtc2xpZGUtYnVmZmVyKQogIChpZiAoZHNs aWRlLS1zaG93aW5nLWNvbnRlbnRzLXApCiAgICAgIChwcm9nbiAobGV0KiAoKGZpbHRlciAoZHNs aWRlLS1maWx0ZXItZnVuY3Rpb24gZHNsaWRlLS1kZWNrKSkKICAgICAgICAgICAgICAgICAgICAo Y3VycmVudCAoZHNsaWRlLS1yb290LWhlYWRpbmctYXQtcG9pbnQgZmlsdGVyKSkKICAgICAgICAg ICAgICAgICAgICAocHJldmlvdXMgKGRzbGlkZS0tcHJldmlvdXMtc2libGluZyBjdXJyZW50IGZp bHRlcikpKQogICAgICAgICAgICAgICAoaWYgcHJldmlvdXMKICAgICAgICAgICAgICAgICAgIChn b3RvLWNoYXIgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpiZWdpbiBwcmV2aW91cykpCiAgICAgICAg ICAgICAgICAgKG1lc3NhZ2UgIk5vIHByZXZpb3VzIHNsaWRlISIpKSkKICAgICAgICAgICAgICh3 aGlsZSBkc2xpZGUtLXN0ZXAtb3ZlcmxheXMKICAgICAgICAgICAgICAgKGRlbGV0ZS1vdmVybGF5 IChwb3AgZHNsaWRlLS1zdGVwLW92ZXJsYXlzKSkpCiAgICAgICAgICAgICAoZHNsaWRlLS1mb2xs b3cgKHBvaW50KSkpCiAgICAoZHNsaWRlLS1lbnN1cmUtc2xpZGUtYnVmZmVyKQogICAgKGRzbGlk ZS1iYWNrd2FyZCBkc2xpZGUtLWRlY2spKSkKCihwcm92aWRlICdkc2xpZGUpCgo7OzsgZHNsaWRl LmVsIGVuZHMgaGVyZQoKOzsgTG9jYWwgVmFyaWFibGVzOgo7OyBvdXRsaW5lLXJlZ2V4cDogIjs7 IFxcKCorXFwpIgo7OyBFbmQ6CgAAAABkc2xpZGUtMC41LjQuMC4yMDI0MTEyMy42Mjc0OS9kaXIA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAMDAwMDY2NAAwMDAxNzUwADAwMDE3NTAAMDAwMDAwMDExMzYAMTQ3MjA3MDQxNTEA MDEzMzQwACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFy ICAAcGhpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwaGkAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFRoaXMgaXMgdGhlIGZpbGUgLi4uL2luZm8vZGlyLCB3aGlj aCBjb250YWlucyB0aGUKdG9wbW9zdCBub2RlIG9mIHRoZSBJbmZvIGhpZXJhcmNoeSwgY2FsbGVk IChkaXIpVG9wLgpUaGUgZmlyc3QgdGltZSB5b3UgaW52b2tlIEluZm8geW91IHN0YXJ0IG9mZiBs b29raW5nIGF0IHRoaXMgbm9kZS4KHwpGaWxlOiBkaXIsCU5vZGU6IFRvcAlUaGlzIGlzIHRoZSB0 b3Agb2YgdGhlIElORk8gdHJlZQoKICBUaGlzICh0aGUgRGlyZWN0b3J5IG5vZGUpIGdpdmVzIGEg bWVudSBvZiBtYWpvciB0b3BpY3MuCiAgVHlwaW5nICJxIiBleGl0cywgIkgiIGxpc3RzIGFsbCBJ bmZvIGNvbW1hbmRzLCAiZCIgcmV0dXJucyBoZXJlLAogICJoIiBnaXZlcyBhIHByaW1lciBmb3Ig Zmlyc3QtdGltZXJzLAogICJtRW1hY3M8UmV0dXJuPiIgdmlzaXRzIHRoZSBFbWFjcyBtYW51YWws IGV0Yy4KCiAgSW4gRW1hY3MsIHlvdSBjYW4gY2xpY2sgbW91c2UgYnV0dG9uIDIgb24gYSBtZW51 IGl0ZW0gb3IgY3Jvc3MgcmVmZXJlbmNlCiAgdG8gc2VsZWN0IGl0LgoKKiBNZW51OgoKRW1hY3MK KiBEc2xpZGU6IChkc2xpZGUpLiAgICAgICAgICAgICBBIHByZXNlbnRhdGlvbiBmcmFtZXdvcmsu CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAABkc2xpZGUtMC41LjQuMC4yMDI0MTEyMy42Mjc0OS9kc2xpZGUt cGtnLmVsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAMDAwMDY2NAAwMDAxNzUwADAwMDE3NTAAMDAwMDAwMDA3MzUAMTQ3MjA3MDQxNTEAMDE1 MjEwACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAA cGhpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwaGkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAADs7IEdlbmVyYXRlZCBwYWNrYWdlIGRlc2NyaXB0aW9uIGZyb20g ZHNsaWRlLmVsICAtKi0gbm8tYnl0ZS1jb21waWxlOiB0IC0qLQooZGVmaW5lLXBhY2thZ2UgImRz bGlkZSIgIjAuNS40LjAuMjAyNDExMjMuNjI3NDkiICJEb21haW4gU3BlY2lmaWMgc0xJREVzLiBB IHByZXNlbnRhdGlvbiBmcmFtZXdvcmsiICcoKGVtYWNzICIyOS4yIikpIDpjb21taXQgImRlZTI5 MGUxYzQxZmRjYWEzYmU1MDhmODQ3NmIzY2EzYTVlNTZlZDEiIDphdXRob3JzICcoKCJQb3NpdHJv biIgLiAiY29udGFjdEBwb3NpdHJvbi5zb2x1dGlvbnMiKSkgOm1haW50YWluZXIgJygiUG9zaXRy b24iIC4gImNvbnRhY3RAcG9zaXRyb24uc29sdXRpb25zIikgOmtleXdvcmRzICcoImNvbnZlbmll bmNlIiAib3JnLW1vZGUiICJwcmVzZW50YXRpb24iICJuYXJyb3dpbmciKSA6dXJsICJodHRwczov L2dpdGh1Yi5jb20vcG9zaXRyb24tc29sdXRpb25zL2RzbGlkZSIpCgAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAZHNsaWRlLTAuNS40LjAuMjAyNDExMjMuNjI3NDkvLmVscGFpZ25v cmUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAADAwMDA2NDQAMDAwMTc1MAAwMDAxNzUwADAwMDAwMDAwMDE0ADE0NjU2NDM2MzMzADAxNDc3 MQAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHBo aQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcGhpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAuZ2l0aHViCnRlc3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAGRzbGlkZS0wLjUuNC4wLjIwMjQxMTIzLjYyNzQ5L2RvYy8AAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAwMDAwNzU1ADAwMDE3NTAAMDAwMTc1MAAwMDAwMDAwMDAwMAAxNDcyMDcwNDE1MQAwMTM0MDEA IDUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIABwaGkA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBoaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAZHNsaWRlLTAuNS40LjAuMjAyNDExMjMuNjI3NDkvZG9jL2RzbGlkZS50 ZXhpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ADAwMDA2NjQAMDAwMTc1MAAwMDAxNzUwADAwMDAwMjI1MDczADE0NzIwNzA0MTUxADAxNTU1MwAg MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHBoaQAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcGhpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAABcaW5wdXQgdGV4aW5mbyAgICBAYyAtKi0gdGV4aW5mbyAtKi0KQGMgJSoq c3RhcnQgb2YgaGVhZGVyCkBzZXRmaWxlbmFtZSBkc2xpZGUuaW5mbwpAc2V0dGl0bGUgRG9tYWlu IFNwZWNpZmljIHNMSURFcwpAZG9jdW1lbnRlbmNvZGluZyBVVEYtOApAZG9jdW1lbnRsYW5ndWFn ZSBlbgpAY29tbWVudCAhISFUSElTIEZJTEUgSEFTIEJFRU4gR0VORVJBVEVEISEhIEVkaXQgbWFu dWFsLm9yZyBpbnN0ZWFkIQpAYyAlKiplbmQgb2YgaGVhZGVyCgpAY29weWluZwpHTlUgR0VORVJB TCBQVUJMSUMgTElDRU5TRQogICBWZXJzaW9uIDNAY29tbWF7fSAyOSBKdW5lIDIwMDcKCkNvcHly aWdodCAoQykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb25AY29tbWF7fSBJbmMuIEB1cmVm e2h0dHA6Ly9mc2Yub3JnL30KRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3Ry aWJ1dGUgdmVyYmF0aW0gY29waWVzCm9mIHRoaXMgbGljZW5zZSBkb2N1bWVudEBjb21tYXt9IGJ1 dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KClByZWFtYmxlCgogIFRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBpcyBhIGZyZWVAY29tbWF7fSBjb3B5bGVmdCBsaWNlbnNlIGZvcgpz b2Z0d2FyZSBhbmQgb3RoZXIga2luZHMgb2Ygd29ya3MuCgogIFRoZSBsaWNlbnNlcyBmb3IgbW9z dCBzb2Z0d2FyZSBhbmQgb3RoZXIgcHJhY3RpY2FsIHdvcmtzIGFyZSBkZXNpZ25lZAp0byB0YWtl IGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgdGhlIHdvcmtzLiAgQnkgY29u dHJhc3RAY29tbWF7fQp0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW50ZW5kZWQg dG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0bwpzaGFyZSBhbmQgY2hhbmdlIGFsbCB2ZXJzaW9u cyBvZiBhIHByb2dyYW0tLXRvIG1ha2Ugc3VyZSBpdCByZW1haW5zIGZyZWUKc29mdHdhcmUgZm9y IGFsbCBpdHMgdXNlcnMuICBXZUBjb21tYXt9IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb25A Y29tbWF7fSB1c2UgdGhlCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3N0IG9mIG91 ciBzb2Z0d2FyZTsgaXQgYXBwbGllcyBhbHNvIHRvCmFueSBvdGhlciB3b3JrIHJlbGVhc2VkIHRo aXMgd2F5IGJ5IGl0cyBhdXRob3JzLiAgWW91IGNhbiBhcHBseSBpdCB0bwp5b3VyIHByb2dyYW1z QGNvbW1he30gdG9vLgoKICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmVAY29tbWF7fSB3 ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb21AY29tbWF7fSBub3QKcHJpY2UuICBPdXIgR2VuZXJh bCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQpoYXZl IHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBj aGFyZ2UgZm9yCnRoZW0gaWYgeW91IHdpc2gpQGNvbW1he30gdGhhdCB5b3UgcmVjZWl2ZSBzb3Vy Y2UgY29kZSBvciBjYW4gZ2V0IGl0IGlmIHlvdQp3YW50IGl0QGNvbW1he30gdGhhdCB5b3UgY2Fu IGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcKZnJlZSBwcm9n cmFtc0Bjb21tYXt9IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgoK ICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzQGNvbW1he30gd2UgbmVlZCB0byBwcmV2ZW50IG90aGVy cyBmcm9tIGRlbnlpbmcgeW91CnRoZXNlIHJpZ2h0cyBvciBhc2tpbmcgeW91IHRvIHN1cnJlbmRl ciB0aGUgcmlnaHRzLiAgVGhlcmVmb3JlQGNvbW1he30geW91IGhhdmUKY2VydGFpbiByZXNwb25z aWJpbGl0aWVzIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmVAY29tbWF7 fSBvciBpZgp5b3UgbW9kaWZ5IGl0OiByZXNwb25zaWJpbGl0aWVzIHRvIHJlc3BlY3QgdGhlIGZy ZWVkb20gb2Ygb3RoZXJzLgoKICBGb3IgZXhhbXBsZUBjb21tYXt9IGlmIHlvdSBkaXN0cmlidXRl IGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbUBjb21tYXt9IHdoZXRoZXIKZ3JhdGlzIG9yIGZvciBh IGZlZUBjb21tYXt9IHlvdSBtdXN0IHBhc3Mgb24gdG8gdGhlIHJlY2lwaWVudHMgdGhlIHNhbWUK ZnJlZWRvbXMgdGhhdCB5b3UgcmVjZWl2ZWQuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5 QGNvbW1he30gdG9vQGNvbW1he30gcmVjZWl2ZQpvciBjYW4gZ2V0IHRoZSBzb3VyY2UgY29kZS4g IEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleQprbm93IHRoZWlyIHJp Z2h0cy4KCiAgRGV2ZWxvcGVycyB0aGF0IHVzZSB0aGUgR05VIEdQTCBwcm90ZWN0IHlvdXIgcmln aHRzIHdpdGggdHdvIHN0ZXBzOgooMSkgYXNzZXJ0IGNvcHlyaWdodCBvbiB0aGUgc29mdHdhcmVA Y29tbWF7fSBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIExpY2Vuc2UKZ2l2aW5nIHlvdSBsZWdhbCBw ZXJtaXNzaW9uIHRvIGNvcHlAY29tbWF7fSBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgaXQuCgog IEZvciB0aGUgZGV2ZWxvcGVycycgYW5kIGF1dGhvcnMnIHByb3RlY3Rpb25AY29tbWF7fSB0aGUg R1BMIGNsZWFybHkgZXhwbGFpbnMKdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBm cmVlIHNvZnR3YXJlLiAgRm9yIGJvdGggdXNlcnMnIGFuZAphdXRob3JzJyBzYWtlQGNvbW1he30g dGhlIEdQTCByZXF1aXJlcyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIGJlIG1hcmtlZCBhcwpjaGFu Z2VkQGNvbW1he30gc28gdGhhdCB0aGVpciBwcm9ibGVtcyB3aWxsIG5vdCBiZSBhdHRyaWJ1dGVk IGVycm9uZW91c2x5IHRvCmF1dGhvcnMgb2YgcHJldmlvdXMgdmVyc2lvbnMuCgogIFNvbWUgZGV2 aWNlcyBhcmUgZGVzaWduZWQgdG8gZGVueSB1c2VycyBhY2Nlc3MgdG8gaW5zdGFsbCBvciBydW4K bW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlIHNvZnR3YXJlIGluc2lkZSB0aGVtQGNvbW1he30gYWx0 aG91Z2ggdGhlIG1hbnVmYWN0dXJlcgpjYW4gZG8gc28uICBUaGlzIGlzIGZ1bmRhbWVudGFsbHkg aW5jb21wYXRpYmxlIHdpdGggdGhlIGFpbSBvZgpwcm90ZWN0aW5nIHVzZXJzJyBmcmVlZG9tIHRv IGNoYW5nZSB0aGUgc29mdHdhcmUuICBUaGUgc3lzdGVtYXRpYwpwYXR0ZXJuIG9mIHN1Y2ggYWJ1 c2Ugb2NjdXJzIGluIHRoZSBhcmVhIG9mIHByb2R1Y3RzIGZvciBpbmRpdmlkdWFscyB0bwp1c2VA Y29tbWF7fSB3aGljaCBpcyBwcmVjaXNlbHkgd2hlcmUgaXQgaXMgbW9zdCB1bmFjY2VwdGFibGUu ICBUaGVyZWZvcmVAY29tbWF7fSB3ZQpoYXZlIGRlc2lnbmVkIHRoaXMgdmVyc2lvbiBvZiB0aGUg R1BMIHRvIHByb2hpYml0IHRoZSBwcmFjdGljZSBmb3IgdGhvc2UKcHJvZHVjdHMuICBJZiBzdWNo IHByb2JsZW1zIGFyaXNlIHN1YnN0YW50aWFsbHkgaW4gb3RoZXIgZG9tYWluc0Bjb21tYXt9IHdl CnN0YW5kIHJlYWR5IHRvIGV4dGVuZCB0aGlzIHByb3Zpc2lvbiB0byB0aG9zZSBkb21haW5zIGlu IGZ1dHVyZSB2ZXJzaW9ucwpvZiB0aGUgR1BMQGNvbW1he30gYXMgbmVlZGVkIHRvIHByb3RlY3Qg dGhlIGZyZWVkb20gb2YgdXNlcnMuCgogIEZpbmFsbHlAY29tbWF7fSBldmVyeSBwcm9ncmFtIGlz IHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZSBwYXRlbnRzLgpTdGF0ZXMgc2hvdWxk IG5vdCBhbGxvdyBwYXRlbnRzIHRvIHJlc3RyaWN0IGRldmVsb3BtZW50IGFuZCB1c2Ugb2YKc29m dHdhcmUgb24gZ2VuZXJhbC1wdXJwb3NlIGNvbXB1dGVyc0Bjb21tYXt9IGJ1dCBpbiB0aG9zZSB0 aGF0IGRvQGNvbW1he30gd2Ugd2lzaCB0bwphdm9pZCB0aGUgc3BlY2lhbCBkYW5nZXIgdGhhdCBw YXRlbnRzIGFwcGxpZWQgdG8gYSBmcmVlIHByb2dyYW0gY291bGQKbWFrZSBpdCBlZmZlY3RpdmVs eSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpc0Bjb21tYXt9IHRoZSBHUEwgYXNzdXJlcyB0 aGF0CnBhdGVudHMgY2Fubm90IGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBwcm9ncmFtIG5vbi1mcmVl LgoKICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZ0Bjb21tYXt9 IGRpc3RyaWJ1dGlvbiBhbmQKbW9kaWZpY2F0aW9uIGZvbGxvdy4KClRFUk1TIEFORCBDT05ESVRJ T05TCgpAZW51bWVyYXRlCkBpdGVtCkRlZmluaXRpb25zLgpAZW5kIGVudW1lcmF0ZQoKYGBUaGlz IExpY2Vuc2UnJyByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZS4KCiAgYGBDb3B5cmlnaHQnJyBhbHNvIG1lYW5zIGNvcHlyaWdodC1saWtlIGxhd3Mg dGhhdCBhcHBseSB0byBvdGhlciBraW5kcyBvZgp3b3Jrc0Bjb21tYXt9IHN1Y2ggYXMgc2VtaWNv bmR1Y3RvciBtYXNrcy4KCiAgYGBUaGUgUHJvZ3JhbScnIHJlZmVycyB0byBhbnkgY29weXJpZ2h0 YWJsZSB3b3JrIGxpY2Vuc2VkIHVuZGVyIHRoaXMKTGljZW5zZS4gIEVhY2ggbGljZW5zZWUgaXMg YWRkcmVzc2VkIGFzIGBgeW91JycuICBgYExpY2Vuc2VlcycnIGFuZApgYHJlY2lwaWVudHMnJyBt YXkgYmUgaW5kaXZpZHVhbHMgb3Igb3JnYW5pemF0aW9ucy4KCiAgVG8gYGBtb2RpZnknJyBhIHdv cmsgbWVhbnMgdG8gY29weSBmcm9tIG9yIGFkYXB0IGFsbCBvciBwYXJ0IG9mIHRoZSB3b3JrCmlu IGEgZmFzaGlvbiByZXF1aXJpbmcgY29weXJpZ2h0IHBlcm1pc3Npb25AY29tbWF7fSBvdGhlciB0 aGFuIHRoZSBtYWtpbmcgb2YgYW4KZXhhY3QgY29weS4gIFRoZSByZXN1bHRpbmcgd29yayBpcyBj YWxsZWQgYSBgYG1vZGlmaWVkIHZlcnNpb24nJyBvZiB0aGUKZWFybGllciB3b3JrIG9yIGEgd29y ayBgYGJhc2VkIG9uJycgdGhlIGVhcmxpZXIgd29yay4KCiAgQSBgYGNvdmVyZWQgd29yaycnIG1l YW5zIGVpdGhlciB0aGUgdW5tb2RpZmllZCBQcm9ncmFtIG9yIGEgd29yayBiYXNlZApvbiB0aGUg UHJvZ3JhbS4KCiAgVG8gYGBwcm9wYWdhdGUnJyBhIHdvcmsgbWVhbnMgdG8gZG8gYW55dGhpbmcg d2l0aCBpdCB0aGF0QGNvbW1he30gd2l0aG91dApwZXJtaXNzaW9uQGNvbW1he30gd291bGQgbWFr ZSB5b3UgZGlyZWN0bHkgb3Igc2Vjb25kYXJpbHkgbGlhYmxlIGZvcgppbmZyaW5nZW1lbnQgdW5k ZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3QGNvbW1he30gZXhjZXB0IGV4ZWN1dGluZyBpdCBv biBhCmNvbXB1dGVyIG9yIG1vZGlmeWluZyBhIHByaXZhdGUgY29weS4gIFByb3BhZ2F0aW9uIGlu Y2x1ZGVzIGNvcHlpbmdAY29tbWF7fQpkaXN0cmlidXRpb24gKHdpdGggb3Igd2l0aG91dCBtb2Rp ZmljYXRpb24pQGNvbW1he30gbWFraW5nIGF2YWlsYWJsZSB0byB0aGUKcHVibGljQGNvbW1he30g YW5kIGluIHNvbWUgY291bnRyaWVzIG90aGVyIGFjdGl2aXRpZXMgYXMgd2VsbC4KCiAgVG8gYGBj b252ZXknJyBhIHdvcmsgbWVhbnMgYW55IGtpbmQgb2YgcHJvcGFnYXRpb24gdGhhdCBlbmFibGVz IG90aGVyCnBhcnRpZXMgdG8gbWFrZSBvciByZWNlaXZlIGNvcGllcy4gIE1lcmUgaW50ZXJhY3Rp b24gd2l0aCBhIHVzZXIgdGhyb3VnaAphIGNvbXB1dGVyIG5ldHdvcmtAY29tbWF7fSB3aXRoIG5v IHRyYW5zZmVyIG9mIGEgY29weUBjb21tYXt9IGlzIG5vdCBjb252ZXlpbmcuCgogIEFuIGludGVy YWN0aXZlIHVzZXIgaW50ZXJmYWNlIGRpc3BsYXlzIGBgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNl cycnCnRvIHRoZSBleHRlbnQgdGhhdCBpdCBpbmNsdWRlcyBhIGNvbnZlbmllbnQgYW5kIHByb21p bmVudGx5IHZpc2libGUKZmVhdHVyZSB0aGF0ICgxKSBkaXNwbGF5cyBhbiBhcHByb3ByaWF0ZSBj b3B5cmlnaHQgbm90aWNlQGNvbW1he30gYW5kICgyKQp0ZWxscyB0aGUgdXNlciB0aGF0IHRoZXJl IGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgd29yayAoZXhjZXB0IHRvIHRoZQpleHRlbnQgdGhhdCB3 YXJyYW50aWVzIGFyZSBwcm92aWRlZClAY29tbWF7fSB0aGF0IGxpY2Vuc2VlcyBtYXkgY29udmV5 IHRoZQp3b3JrIHVuZGVyIHRoaXMgTGljZW5zZUBjb21tYXt9IGFuZCBob3cgdG8gdmlldyBhIGNv cHkgb2YgdGhpcyBMaWNlbnNlLiAgSWYKdGhlIGludGVyZmFjZSBwcmVzZW50cyBhIGxpc3Qgb2Yg dXNlciBjb21tYW5kcyBvciBvcHRpb25zQGNvbW1he30gc3VjaCBhcyBhCm1lbnVAY29tbWF7fSBh IHByb21pbmVudCBpdGVtIGluIHRoZSBsaXN0IG1lZXRzIHRoaXMgY3JpdGVyaW9uLgoKQGVudW1l cmF0ZQpAaXRlbQpTb3VyY2UgQ29kZS4KQGVuZCBlbnVtZXJhdGUKCiAgVGhlIGBgc291cmNlIGNv ZGUnJyBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yawpmb3Ig bWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBgYE9iamVjdCBjb2RlJycgbWVhbnMgYW55IG5v bi1zb3VyY2UKZm9ybSBvZiBhIHdvcmsuCgogIEEgYGBTdGFuZGFyZCBJbnRlcmZhY2UnJyBtZWFu cyBhbiBpbnRlcmZhY2UgdGhhdCBlaXRoZXIgaXMgYW4gb2ZmaWNpYWwKc3RhbmRhcmQgZGVmaW5l ZCBieSBhIHJlY29nbml6ZWQgc3RhbmRhcmRzIGJvZHlAY29tbWF7fSBvckBjb21tYXt9IGluIHRo ZSBjYXNlIG9mCmludGVyZmFjZXMgc3BlY2lmaWVkIGZvciBhIHBhcnRpY3VsYXIgcHJvZ3JhbW1p bmcgbGFuZ3VhZ2VAY29tbWF7fSBvbmUgdGhhdAppcyB3aWRlbHkgdXNlZCBhbW9uZyBkZXZlbG9w ZXJzIHdvcmtpbmcgaW4gdGhhdCBsYW5ndWFnZS4KCiAgVGhlIGBgU3lzdGVtIExpYnJhcmllcycn IG9mIGFuIGV4ZWN1dGFibGUgd29yayBpbmNsdWRlIGFueXRoaW5nQGNvbW1he30gb3RoZXIKdGhh biB0aGUgd29yayBhcyBhIHdob2xlQGNvbW1he30gdGhhdCAoYSkgaXMgaW5jbHVkZWQgaW4gdGhl IG5vcm1hbCBmb3JtIG9mCnBhY2thZ2luZyBhIE1ham9yIENvbXBvbmVudEBjb21tYXt9IGJ1dCB3 aGljaCBpcyBub3QgcGFydCBvZiB0aGF0IE1ham9yCkNvbXBvbmVudEBjb21tYXt9IGFuZCAoYikg c2VydmVzIG9ubHkgdG8gZW5hYmxlIHVzZSBvZiB0aGUgd29yayB3aXRoIHRoYXQKTWFqb3IgQ29t cG9uZW50QGNvbW1he30gb3IgdG8gaW1wbGVtZW50IGEgU3RhbmRhcmQgSW50ZXJmYWNlIGZvciB3 aGljaCBhbgppbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBpbiBzb3Vy Y2UgY29kZSBmb3JtLiAgQQpgYE1ham9yIENvbXBvbmVudCcnQGNvbW1he30gaW4gdGhpcyBjb250 ZXh0QGNvbW1he30gbWVhbnMgYSBtYWpvciBlc3NlbnRpYWwgY29tcG9uZW50CihrZXJuZWxAY29t bWF7fSB3aW5kb3cgc3lzdGVtQGNvbW1he30gYW5kIHNvIG9uKSBvZiB0aGUgc3BlY2lmaWMgb3Bl cmF0aW5nIHN5c3RlbQooaWYgYW55KSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSB3b3JrIHJ1bnNA Y29tbWF7fSBvciBhIGNvbXBpbGVyIHVzZWQgdG8KcHJvZHVjZSB0aGUgd29ya0Bjb21tYXt9IG9y IGFuIG9iamVjdCBjb2RlIGludGVycHJldGVyIHVzZWQgdG8gcnVuIGl0LgoKICBUaGUgYGBDb3Jy ZXNwb25kaW5nIFNvdXJjZScnIGZvciBhIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSBtZWFucyBh bGwKdGhlIHNvdXJjZSBjb2RlIG5lZWRlZCB0byBnZW5lcmF0ZUBjb21tYXt9IGluc3RhbGxAY29t bWF7fSBhbmQgKGZvciBhbiBleGVjdXRhYmxlCndvcmspIHJ1biB0aGUgb2JqZWN0IGNvZGUgYW5k IHRvIG1vZGlmeSB0aGUgd29ya0Bjb21tYXt9IGluY2x1ZGluZyBzY3JpcHRzIHRvCmNvbnRyb2wg dGhvc2UgYWN0aXZpdGllcy4gIEhvd2V2ZXJAY29tbWF7fSBpdCBkb2VzIG5vdCBpbmNsdWRlIHRo ZSB3b3JrJ3MKU3lzdGVtIExpYnJhcmllc0Bjb21tYXt9IG9yIGdlbmVyYWwtcHVycG9zZSB0b29s cyBvciBnZW5lcmFsbHkgYXZhaWxhYmxlIGZyZWUKcHJvZ3JhbXMgd2hpY2ggYXJlIHVzZWQgdW5t b2RpZmllZCBpbiBwZXJmb3JtaW5nIHRob3NlIGFjdGl2aXRpZXMgYnV0CndoaWNoIGFyZSBub3Qg cGFydCBvZiB0aGUgd29yay4gIEZvciBleGFtcGxlQGNvbW1he30gQ29ycmVzcG9uZGluZyBTb3Vy Y2UKaW5jbHVkZXMgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMgYXNzb2NpYXRlZCB3aXRoIHNv dXJjZSBmaWxlcyBmb3IKdGhlIHdvcmtAY29tbWF7fSBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBz aGFyZWQgbGlicmFyaWVzIGFuZCBkeW5hbWljYWxseQpsaW5rZWQgc3VicHJvZ3JhbXMgdGhhdCB0 aGUgd29yayBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcmVxdWlyZUBjb21tYXt9CnN1Y2gg YXMgYnkgaW50aW1hdGUgZGF0YSBjb21tdW5pY2F0aW9uIG9yIGNvbnRyb2wgZmxvdyBiZXR3ZWVu IHRob3NlCnN1YnByb2dyYW1zIGFuZCBvdGhlciBwYXJ0cyBvZiB0aGUgd29yay4KCiAgVGhlIENv cnJlc3BvbmRpbmcgU291cmNlIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCB1c2Vycwpj YW4gcmVnZW5lcmF0ZSBhdXRvbWF0aWNhbGx5IGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIENvcnJl c3BvbmRpbmcKU291cmNlLgoKICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGEgd29yayBp biBzb3VyY2UgY29kZSBmb3JtIGlzIHRoYXQKc2FtZSB3b3JrLgoKQGVudW1lcmF0ZQpAaXRlbQpC YXNpYyBQZXJtaXNzaW9ucy4KQGVuZCBlbnVtZXJhdGUKCiAgQWxsIHJpZ2h0cyBncmFudGVkIHVu ZGVyIHRoaXMgTGljZW5zZSBhcmUgZ3JhbnRlZCBmb3IgdGhlIHRlcm0gb2YKY29weXJpZ2h0IG9u IHRoZSBQcm9ncmFtQGNvbW1he30gYW5kIGFyZSBpcnJldm9jYWJsZSBwcm92aWRlZCB0aGUgc3Rh dGVkCmNvbmRpdGlvbnMgYXJlIG1ldC4gIFRoaXMgTGljZW5zZSBleHBsaWNpdGx5IGFmZmlybXMg eW91ciB1bmxpbWl0ZWQKcGVybWlzc2lvbiB0byBydW4gdGhlIHVubW9kaWZpZWQgUHJvZ3JhbS4g IFRoZSBvdXRwdXQgZnJvbSBydW5uaW5nIGEKY292ZXJlZCB3b3JrIGlzIGNvdmVyZWQgYnkgdGhp cyBMaWNlbnNlIG9ubHkgaWYgdGhlIG91dHB1dEBjb21tYXt9IGdpdmVuIGl0cwpjb250ZW50QGNv bW1he30gY29uc3RpdHV0ZXMgYSBjb3ZlcmVkIHdvcmsuICBUaGlzIExpY2Vuc2UgYWNrbm93bGVk Z2VzIHlvdXIKcmlnaHRzIG9mIGZhaXIgdXNlIG9yIG90aGVyIGVxdWl2YWxlbnRAY29tbWF7fSBh cyBwcm92aWRlZCBieSBjb3B5cmlnaHQgbGF3LgoKICBZb3UgbWF5IG1ha2VAY29tbWF7fSBydW4g YW5kIHByb3BhZ2F0ZSBjb3ZlcmVkIHdvcmtzIHRoYXQgeW91IGRvIG5vdApjb252ZXlAY29tbWF7 fSB3aXRob3V0IGNvbmRpdGlvbnMgc28gbG9uZyBhcyB5b3VyIGxpY2Vuc2Ugb3RoZXJ3aXNlIHJl bWFpbnMKaW4gZm9yY2UuICBZb3UgbWF5IGNvbnZleSBjb3ZlcmVkIHdvcmtzIHRvIG90aGVycyBm b3IgdGhlIHNvbGUgcHVycG9zZQpvZiBoYXZpbmcgdGhlbSBtYWtlIG1vZGlmaWNhdGlvbnMgZXhj bHVzaXZlbHkgZm9yIHlvdUBjb21tYXt9IG9yIHByb3ZpZGUgeW91CndpdGggZmFjaWxpdGllcyBm b3IgcnVubmluZyB0aG9zZSB3b3Jrc0Bjb21tYXt9IHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3 aXRoCnRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW4gY29udmV5aW5nIGFsbCBtYXRlcmlhbCBm b3Igd2hpY2ggeW91IGRvCm5vdCBjb250cm9sIGNvcHlyaWdodC4gIFRob3NlIHRodXMgbWFraW5n IG9yIHJ1bm5pbmcgdGhlIGNvdmVyZWQgd29ya3MKZm9yIHlvdSBtdXN0IGRvIHNvIGV4Y2x1c2l2 ZWx5IG9uIHlvdXIgYmVoYWxmQGNvbW1he30gdW5kZXIgeW91ciBkaXJlY3Rpb24KYW5kIGNvbnRy b2xAY29tbWF7fSBvbiB0ZXJtcyB0aGF0IHByb2hpYml0IHRoZW0gZnJvbSBtYWtpbmcgYW55IGNv cGllcyBvZgp5b3VyIGNvcHlyaWdodGVkIG1hdGVyaWFsIG91dHNpZGUgdGhlaXIgcmVsYXRpb25z aGlwIHdpdGggeW91LgoKICBDb252ZXlpbmcgdW5kZXIgYW55IG90aGVyIGNpcmN1bXN0YW5jZXMg aXMgcGVybWl0dGVkIHNvbGVseSB1bmRlcgp0aGUgY29uZGl0aW9ucyBzdGF0ZWQgYmVsb3cuICBT dWJsaWNlbnNpbmcgaXMgbm90IGFsbG93ZWQ7IHNlY3Rpb24gMTAKbWFrZXMgaXQgdW5uZWNlc3Nh cnkuCgpAZW51bWVyYXRlCkBpdGVtClByb3RlY3RpbmcgVXNlcnMnIExlZ2FsIFJpZ2h0cyBGcm9t IEFudGktQ2lyY3VtdmVudGlvbiBMYXcuCkBlbmQgZW51bWVyYXRlCgogIE5vIGNvdmVyZWQgd29y ayBzaGFsbCBiZSBkZWVtZWQgcGFydCBvZiBhbiBlZmZlY3RpdmUgdGVjaG5vbG9naWNhbAptZWFz dXJlIHVuZGVyIGFueSBhcHBsaWNhYmxlIGxhdyBmdWxmaWxsaW5nIG9ibGlnYXRpb25zIHVuZGVy IGFydGljbGUKMTEgb2YgdGhlIFdJUE8gY29weXJpZ2h0IHRyZWF0eSBhZG9wdGVkIG9uIDIwIERl Y2VtYmVyIDE5OTZAY29tbWF7fSBvcgpzaW1pbGFyIGxhd3MgcHJvaGliaXRpbmcgb3IgcmVzdHJp Y3RpbmcgY2lyY3VtdmVudGlvbiBvZiBzdWNoCm1lYXN1cmVzLgoKICBXaGVuIHlvdSBjb252ZXkg YSBjb3ZlcmVkIHdvcmtAY29tbWF7fSB5b3Ugd2FpdmUgYW55IGxlZ2FsIHBvd2VyIHRvIGZvcmJp ZApjaXJjdW12ZW50aW9uIG9mIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdG8gdGhlIGV4dGVudCBz dWNoIGNpcmN1bXZlbnRpb24KaXMgZWZmZWN0ZWQgYnkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIg dGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0bwp0aGUgY292ZXJlZCB3b3JrQGNvbW1he30gYW5k IHlvdSBkaXNjbGFpbSBhbnkgaW50ZW50aW9uIHRvIGxpbWl0IG9wZXJhdGlvbiBvcgptb2RpZmlj YXRpb24gb2YgdGhlIHdvcmsgYXMgYSBtZWFucyBvZiBlbmZvcmNpbmdAY29tbWF7fSBhZ2FpbnN0 IHRoZSB3b3JrJ3MKdXNlcnNAY29tbWF7fSB5b3VyIG9yIHRoaXJkIHBhcnRpZXMnIGxlZ2FsIHJp Z2h0cyB0byBmb3JiaWQgY2lyY3VtdmVudGlvbiBvZgp0ZWNobm9sb2dpY2FsIG1lYXN1cmVzLgoK QGVudW1lcmF0ZQpAaXRlbQpDb252ZXlpbmcgVmVyYmF0aW0gQ29waWVzLgpAZW5kIGVudW1lcmF0 ZQoKICBZb3UgbWF5IGNvbnZleSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncyBzb3Vy Y2UgY29kZSBhcyB5b3UKcmVjZWl2ZSBpdEBjb21tYXt9IGluIGFueSBtZWRpdW1AY29tbWF7fSBw cm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZAphcHByb3ByaWF0ZWx5IHB1Ymxpc2gg b24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2U7CmtlZXAgaW50YWN0 IGFsbCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFueQpub24tcGVybWlz c2l2ZSB0ZXJtcyBhZGRlZCBpbiBhY2NvcmQgd2l0aCBzZWN0aW9uIDcgYXBwbHkgdG8gdGhlIGNv ZGU7CmtlZXAgaW50YWN0IGFsbCBub3RpY2VzIG9mIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50 eTsgYW5kIGdpdmUgYWxsCnJlY2lwaWVudHMgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3 aXRoIHRoZSBQcm9ncmFtLgoKICBZb3UgbWF5IGNoYXJnZSBhbnkgcHJpY2Ugb3Igbm8gcHJpY2Ug Zm9yIGVhY2ggY29weSB0aGF0IHlvdSBjb252ZXlAY29tbWF7fQphbmQgeW91IG1heSBvZmZlciBz dXBwb3J0IG9yIHdhcnJhbnR5IHByb3RlY3Rpb24gZm9yIGEgZmVlLgoKQGVudW1lcmF0ZQpAaXRl bQpDb252ZXlpbmcgTW9kaWZpZWQgU291cmNlIFZlcnNpb25zLgpAZW5kIGVudW1lcmF0ZQoKICBZ b3UgbWF5IGNvbnZleSBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW1AY29tbWF7fSBvciB0aGUg bW9kaWZpY2F0aW9ucyB0bwpwcm9kdWNlIGl0IGZyb20gdGhlIFByb2dyYW1AY29tbWF7fSBpbiB0 aGUgZm9ybSBvZiBzb3VyY2UgY29kZSB1bmRlciB0aGUKdGVybXMgb2Ygc2VjdGlvbiA0QGNvbW1h e30gcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgoK YSkgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91 IG1vZGlmaWVkCml0QGNvbW1he30gYW5kIGdpdmluZyBhIHJlbGV2YW50IGRhdGUuCgpiKSBUaGUg d29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBpdCBpcwpyZWxl YXNlZCB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBjb25kaXRpb25zIGFkZGVkIHVuZGVyIHNl Y3Rpb24KQGVudW1lcmF0ZQpAaXRlbQpUaGlzIHJlcXVpcmVtZW50IG1vZGlmaWVzIHRoZSByZXF1 aXJlbWVudCBpbiBzZWN0aW9uIDQgdG8KQGVuZCBlbnVtZXJhdGUKYGBrZWVwIGludGFjdCBhbGwg bm90aWNlcycnLgoKYykgWW91IG11c3QgbGljZW5zZSB0aGUgZW50aXJlIHdvcmtAY29tbWF7fSBh cyBhIHdob2xlQGNvbW1he30gdW5kZXIgdGhpcwpMaWNlbnNlIHRvIGFueW9uZSB3aG8gY29tZXMg aW50byBwb3NzZXNzaW9uIG9mIGEgY29weS4gIFRoaXMKTGljZW5zZSB3aWxsIHRoZXJlZm9yZSBh cHBseUBjb21tYXt9IGFsb25nIHdpdGggYW55IGFwcGxpY2FibGUgc2VjdGlvbiA3CmFkZGl0aW9u YWwgdGVybXNAY29tbWF7fSB0byB0aGUgd2hvbGUgb2YgdGhlIHdvcmtAY29tbWF7fSBhbmQgYWxs IGl0cyBwYXJ0c0Bjb21tYXt9CnJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkgYXJlIHBhY2thZ2VkLiAg VGhpcyBMaWNlbnNlIGdpdmVzIG5vCnBlcm1pc3Npb24gdG8gbGljZW5zZSB0aGUgd29yayBpbiBh bnkgb3RoZXIgd2F5QGNvbW1he30gYnV0IGl0IGRvZXMgbm90CmludmFsaWRhdGUgc3VjaCBwZXJt aXNzaW9uIGlmIHlvdSBoYXZlIHNlcGFyYXRlbHkgcmVjZWl2ZWQgaXQuCgpkKSBJZiB0aGUgd29y ayBoYXMgaW50ZXJhY3RpdmUgdXNlciBpbnRlcmZhY2VzQGNvbW1he30gZWFjaCBtdXN0IGRpc3Bs YXkKQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlczsgaG93ZXZlckBjb21tYXt9IGlmIHRoZSBQcm9n cmFtIGhhcyBpbnRlcmFjdGl2ZQppbnRlcmZhY2VzIHRoYXQgZG8gbm90IGRpc3BsYXkgQXBwcm9w cmlhdGUgTGVnYWwgTm90aWNlc0Bjb21tYXt9IHlvdXIKd29yayBuZWVkIG5vdCBtYWtlIHRoZW0g ZG8gc28uCgogIEEgY29tcGlsYXRpb24gb2YgYSBjb3ZlcmVkIHdvcmsgd2l0aCBvdGhlciBzZXBh cmF0ZSBhbmQgaW5kZXBlbmRlbnQKd29ya3NAY29tbWF7fSB3aGljaCBhcmUgbm90IGJ5IHRoZWly IG5hdHVyZSBleHRlbnNpb25zIG9mIHRoZSBjb3ZlcmVkIHdvcmtAY29tbWF7fQphbmQgd2hpY2gg YXJlIG5vdCBjb21iaW5lZCB3aXRoIGl0IHN1Y2ggYXMgdG8gZm9ybSBhIGxhcmdlciBwcm9ncmFt QGNvbW1he30KaW4gb3Igb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBt ZWRpdW1AY29tbWF7fSBpcyBjYWxsZWQgYW4KYGBhZ2dyZWdhdGUnJyBpZiB0aGUgY29tcGlsYXRp b24gYW5kIGl0cyByZXN1bHRpbmcgY29weXJpZ2h0IGFyZSBub3QKdXNlZCB0byBsaW1pdCB0aGUg YWNjZXNzIG9yIGxlZ2FsIHJpZ2h0cyBvZiB0aGUgY29tcGlsYXRpb24ncyB1c2VycwpiZXlvbmQg d2hhdCB0aGUgaW5kaXZpZHVhbCB3b3JrcyBwZXJtaXQuICBJbmNsdXNpb24gb2YgYSBjb3ZlcmVk IHdvcmsKaW4gYW4gYWdncmVnYXRlIGRvZXMgbm90IGNhdXNlIHRoaXMgTGljZW5zZSB0byBhcHBs eSB0byB0aGUgb3RoZXIKcGFydHMgb2YgdGhlIGFnZ3JlZ2F0ZS4KCkBlbnVtZXJhdGUKQGl0ZW0K Q29udmV5aW5nIE5vbi1Tb3VyY2UgRm9ybXMuCkBlbmQgZW51bWVyYXRlCgogIFlvdSBtYXkgY29u dmV5IGEgY292ZXJlZCB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zCm9m IHNlY3Rpb25zIDQgYW5kIDVAY29tbWF7fSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGNvbnZleSB0 aGUKbWFjaGluZS1yZWFkYWJsZSBDb3JyZXNwb25kaW5nIFNvdXJjZSB1bmRlciB0aGUgdGVybXMg b2YgdGhpcyBMaWNlbnNlQGNvbW1he30KaW4gb25lIG9mIHRoZXNlIHdheXM6CgphKSBDb252ZXkg dGhlIG9iamVjdCBjb2RlIGluQGNvbW1he30gb3IgZW1ib2RpZWQgaW5AY29tbWF7fSBhIHBoeXNp Y2FsIHByb2R1Y3QKKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pQGNv bW1he30gYWNjb21wYW5pZWQgYnkgdGhlCkNvcnJlc3BvbmRpbmcgU291cmNlIGZpeGVkIG9uIGEg ZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0KY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50 ZXJjaGFuZ2UuCgpiKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIGluQGNvbW1he30gb3IgZW1ib2Rp ZWQgaW5AY29tbWF7fSBhIHBoeXNpY2FsIHByb2R1Y3QKKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRp c3RyaWJ1dGlvbiBtZWRpdW0pQGNvbW1he30gYWNjb21wYW5pZWQgYnkgYQp3cml0dGVuIG9mZmVy QGNvbW1he30gdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzIGFuZCB2YWxpZCBmb3IgYXMK bG9uZyBhcyB5b3Ugb2ZmZXIgc3BhcmUgcGFydHMgb3IgY3VzdG9tZXIgc3VwcG9ydCBmb3IgdGhh dCBwcm9kdWN0Cm1vZGVsQGNvbW1he30gdG8gZ2l2ZSBhbnlvbmUgd2hvIHBvc3Nlc3NlcyB0aGUg b2JqZWN0IGNvZGUgZWl0aGVyICgxKSBhCmNvcHkgb2YgdGhlIENvcnJlc3BvbmRpbmcgU291cmNl IGZvciBhbGwgdGhlIHNvZnR3YXJlIGluIHRoZQpwcm9kdWN0IHRoYXQgaXMgY292ZXJlZCBieSB0 aGlzIExpY2Vuc2VAY29tbWF7fSBvbiBhIGR1cmFibGUgcGh5c2ljYWwKbWVkaXVtIGN1c3RvbWFy aWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlQGNvbW1he30gZm9yIGEgcHJpY2Ugbm8K bW9yZSB0aGFuIHlvdXIgcmVhc29uYWJsZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyB0 aGlzCmNvbnZleWluZyBvZiBzb3VyY2VAY29tbWF7fSBvciAoMikgYWNjZXNzIHRvIGNvcHkgdGhl CkNvcnJlc3BvbmRpbmcgU291cmNlIGZyb20gYSBuZXR3b3JrIHNlcnZlciBhdCBubyBjaGFyZ2Uu CgpjKSBDb252ZXkgaW5kaXZpZHVhbCBjb3BpZXMgb2YgdGhlIG9iamVjdCBjb2RlIHdpdGggYSBj b3B5IG9mIHRoZQp3cml0dGVuIG9mZmVyIHRvIHByb3ZpZGUgdGhlIENvcnJlc3BvbmRpbmcgU291 cmNlLiAgVGhpcwphbHRlcm5hdGl2ZSBpcyBhbGxvd2VkIG9ubHkgb2NjYXNpb25hbGx5IGFuZCBu b25jb21tZXJjaWFsbHlAY29tbWF7fSBhbmQKb25seSBpZiB5b3UgcmVjZWl2ZWQgdGhlIG9iamVj dCBjb2RlIHdpdGggc3VjaCBhbiBvZmZlckBjb21tYXt9IGluIGFjY29yZAp3aXRoIHN1YnNlY3Rp b24gNmIuCgpkKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIGJ5IG9mZmVyaW5nIGFjY2VzcyBmcm9t IGEgZGVzaWduYXRlZApwbGFjZSAoZ3JhdGlzIG9yIGZvciBhIGNoYXJnZSlAY29tbWF7fSBhbmQg b2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gdGhlCkNvcnJlc3BvbmRpbmcgU291cmNlIGluIHRo ZSBzYW1lIHdheSB0aHJvdWdoIHRoZSBzYW1lIHBsYWNlIGF0IG5vCmZ1cnRoZXIgY2hhcmdlLiAg WW91IG5lZWQgbm90IHJlcXVpcmUgcmVjaXBpZW50cyB0byBjb3B5IHRoZQpDb3JyZXNwb25kaW5n IFNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4gIElmIHRoZSBwbGFjZSB0bwpjb3B5 IHRoZSBvYmplY3QgY29kZSBpcyBhIG5ldHdvcmsgc2VydmVyQGNvbW1he30gdGhlIENvcnJlc3Bv bmRpbmcgU291cmNlCm1heSBiZSBvbiBhIGRpZmZlcmVudCBzZXJ2ZXIgKG9wZXJhdGVkIGJ5IHlv dSBvciBhIHRoaXJkIHBhcnR5KQp0aGF0IHN1cHBvcnRzIGVxdWl2YWxlbnQgY29weWluZyBmYWNp bGl0aWVzQGNvbW1he30gcHJvdmlkZWQgeW91IG1haW50YWluCmNsZWFyIGRpcmVjdGlvbnMgbmV4 dCB0byB0aGUgb2JqZWN0IGNvZGUgc2F5aW5nIHdoZXJlIHRvIGZpbmQgdGhlCkNvcnJlc3BvbmRp bmcgU291cmNlLiAgUmVnYXJkbGVzcyBvZiB3aGF0IHNlcnZlciBob3N0cyB0aGUKQ29ycmVzcG9u ZGluZyBTb3VyY2VAY29tbWF7fSB5b3UgcmVtYWluIG9ibGlnYXRlZCB0byBlbnN1cmUgdGhhdCBp dCBpcwphdmFpbGFibGUgZm9yIGFzIGxvbmcgYXMgbmVlZGVkIHRvIHNhdGlzZnkgdGhlc2UgcmVx dWlyZW1lbnRzLgoKZSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSB1c2luZyBwZWVyLXRvLXBlZXIg dHJhbnNtaXNzaW9uQGNvbW1he30gcHJvdmlkZWQKeW91IGluZm9ybSBvdGhlciBwZWVycyB3aGVy ZSB0aGUgb2JqZWN0IGNvZGUgYW5kIENvcnJlc3BvbmRpbmcKU291cmNlIG9mIHRoZSB3b3JrIGFy ZSBiZWluZyBvZmZlcmVkIHRvIHRoZSBnZW5lcmFsIHB1YmxpYyBhdCBubwpjaGFyZ2UgdW5kZXIg c3Vic2VjdGlvbiA2ZC4KCiAgQSBzZXBhcmFibGUgcG9ydGlvbiBvZiB0aGUgb2JqZWN0IGNvZGVA Y29tbWF7fSB3aG9zZSBzb3VyY2UgY29kZSBpcyBleGNsdWRlZApmcm9tIHRoZSBDb3JyZXNwb25k aW5nIFNvdXJjZSBhcyBhIFN5c3RlbSBMaWJyYXJ5QGNvbW1he30gbmVlZCBub3QgYmUKaW5jbHVk ZWQgaW4gY29udmV5aW5nIHRoZSBvYmplY3QgY29kZSB3b3JrLgoKICBBIGBgVXNlciBQcm9kdWN0 JycgaXMgZWl0aGVyICgxKSBhIGBgY29uc3VtZXIgcHJvZHVjdCcnQGNvbW1he30gd2hpY2ggbWVh bnMgYW55CnRhbmdpYmxlIHBlcnNvbmFsIHByb3BlcnR5IHdoaWNoIGlzIG5vcm1hbGx5IHVzZWQg Zm9yIHBlcnNvbmFsQGNvbW1he30gZmFtaWx5QGNvbW1he30Kb3IgaG91c2Vob2xkIHB1cnBvc2Vz QGNvbW1he30gb3IgKDIpIGFueXRoaW5nIGRlc2lnbmVkIG9yIHNvbGQgZm9yIGluY29ycG9yYXRp b24KaW50byBhIGR3ZWxsaW5nLiAgSW4gZGV0ZXJtaW5pbmcgd2hldGhlciBhIHByb2R1Y3QgaXMg YSBjb25zdW1lciBwcm9kdWN0QGNvbW1he30KZG91YnRmdWwgY2FzZXMgc2hhbGwgYmUgcmVzb2x2 ZWQgaW4gZmF2b3Igb2YgY292ZXJhZ2UuICBGb3IgYSBwYXJ0aWN1bGFyCnByb2R1Y3QgcmVjZWl2 ZWQgYnkgYSBwYXJ0aWN1bGFyIHVzZXJAY29tbWF7fSBgYG5vcm1hbGx5IHVzZWQnJyByZWZlcnMg dG8gYQp0eXBpY2FsIG9yIGNvbW1vbiB1c2Ugb2YgdGhhdCBjbGFzcyBvZiBwcm9kdWN0QGNvbW1h e30gcmVnYXJkbGVzcyBvZiB0aGUgc3RhdHVzCm9mIHRoZSBwYXJ0aWN1bGFyIHVzZXIgb3Igb2Yg dGhlIHdheSBpbiB3aGljaCB0aGUgcGFydGljdWxhciB1c2VyCmFjdHVhbGx5IHVzZXNAY29tbWF7 fSBvciBleHBlY3RzIG9yIGlzIGV4cGVjdGVkIHRvIHVzZUBjb21tYXt9IHRoZSBwcm9kdWN0LiAg QSBwcm9kdWN0CmlzIGEgY29uc3VtZXIgcHJvZHVjdCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhl IHByb2R1Y3QgaGFzIHN1YnN0YW50aWFsCmNvbW1lcmNpYWxAY29tbWF7fSBpbmR1c3RyaWFsIG9y IG5vbi1jb25zdW1lciB1c2VzQGNvbW1he30gdW5sZXNzIHN1Y2ggdXNlcyByZXByZXNlbnQKdGhl IG9ubHkgc2lnbmlmaWNhbnQgbW9kZSBvZiB1c2Ugb2YgdGhlIHByb2R1Y3QuCgogIGBgSW5zdGFs bGF0aW9uIEluZm9ybWF0aW9uJycgZm9yIGEgVXNlciBQcm9kdWN0IG1lYW5zIGFueSBtZXRob2Rz QGNvbW1he30KcHJvY2VkdXJlc0Bjb21tYXt9IGF1dGhvcml6YXRpb24ga2V5c0Bjb21tYXt9IG9y IG90aGVyIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGluc3RhbGwKYW5kIGV4ZWN1dGUgbW9kaWZp ZWQgdmVyc2lvbnMgb2YgYSBjb3ZlcmVkIHdvcmsgaW4gdGhhdCBVc2VyIFByb2R1Y3QgZnJvbQph IG1vZGlmaWVkIHZlcnNpb24gb2YgaXRzIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhlIGluZm9y bWF0aW9uIG11c3QKc3VmZmljZSB0byBlbnN1cmUgdGhhdCB0aGUgY29udGludWVkIGZ1bmN0aW9u aW5nIG9mIHRoZSBtb2RpZmllZCBvYmplY3QKY29kZSBpcyBpbiBubyBjYXNlIHByZXZlbnRlZCBv ciBpbnRlcmZlcmVkIHdpdGggc29sZWx5IGJlY2F1c2UKbW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1h ZGUuCgogIElmIHlvdSBjb252ZXkgYW4gb2JqZWN0IGNvZGUgd29yayB1bmRlciB0aGlzIHNlY3Rp b24gaW5AY29tbWF7fSBvciB3aXRoQGNvbW1he30gb3IKc3BlY2lmaWNhbGx5IGZvciB1c2UgaW5A Y29tbWF7fSBhIFVzZXIgUHJvZHVjdEBjb21tYXt9IGFuZCB0aGUgY29udmV5aW5nIG9jY3VycyBh cwpwYXJ0IG9mIGEgdHJhbnNhY3Rpb24gaW4gd2hpY2ggdGhlIHJpZ2h0IG9mIHBvc3Nlc3Npb24g YW5kIHVzZSBvZiB0aGUKVXNlciBQcm9kdWN0IGlzIHRyYW5zZmVycmVkIHRvIHRoZSByZWNpcGll bnQgaW4gcGVycGV0dWl0eSBvciBmb3IgYQpmaXhlZCB0ZXJtIChyZWdhcmRsZXNzIG9mIGhvdyB0 aGUgdHJhbnNhY3Rpb24gaXMgY2hhcmFjdGVyaXplZClAY29tbWF7fSB0aGUKQ29ycmVzcG9uZGlu ZyBTb3VyY2UgY29udmV5ZWQgdW5kZXIgdGhpcyBzZWN0aW9uIG11c3QgYmUgYWNjb21wYW5pZWQK YnkgdGhlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbi4gIEJ1dCB0aGlzIHJlcXVpcmVtZW50IGRv ZXMgbm90IGFwcGx5CmlmIG5laXRoZXIgeW91IG5vciBhbnkgdGhpcmQgcGFydHkgcmV0YWlucyB0 aGUgYWJpbGl0eSB0byBpbnN0YWxsCm1vZGlmaWVkIG9iamVjdCBjb2RlIG9uIHRoZSBVc2VyIFBy b2R1Y3QgKGZvciBleGFtcGxlQGNvbW1he30gdGhlIHdvcmsgaGFzCmJlZW4gaW5zdGFsbGVkIGlu IFJPTSkuCgogIFRoZSByZXF1aXJlbWVudCB0byBwcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1h dGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEKcmVxdWlyZW1lbnQgdG8gY29udGludWUgdG8gcHJvdmlk ZSBzdXBwb3J0IHNlcnZpY2VAY29tbWF7fSB3YXJyYW50eUBjb21tYXt9IG9yIHVwZGF0ZXMKZm9y IGEgd29yayB0aGF0IGhhcyBiZWVuIG1vZGlmaWVkIG9yIGluc3RhbGxlZCBieSB0aGUgcmVjaXBp ZW50QGNvbW1he30gb3IgZm9yCnRoZSBVc2VyIFByb2R1Y3QgaW4gd2hpY2ggaXQgaGFzIGJlZW4g bW9kaWZpZWQgb3IgaW5zdGFsbGVkLiAgQWNjZXNzIHRvIGEKbmV0d29yayBtYXkgYmUgZGVuaWVk IHdoZW4gdGhlIG1vZGlmaWNhdGlvbiBpdHNlbGYgbWF0ZXJpYWxseSBhbmQKYWR2ZXJzZWx5IGFm ZmVjdHMgdGhlIG9wZXJhdGlvbiBvZiB0aGUgbmV0d29yayBvciB2aW9sYXRlcyB0aGUgcnVsZXMg YW5kCnByb3RvY29scyBmb3IgY29tbXVuaWNhdGlvbiBhY3Jvc3MgdGhlIG5ldHdvcmsuCgogIENv cnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkQGNvbW1he30gYW5kIEluc3RhbGxhdGlvbiBJbmZv cm1hdGlvbiBwcm92aWRlZEBjb21tYXt9CmluIGFjY29yZCB3aXRoIHRoaXMgc2VjdGlvbiBtdXN0 IGJlIGluIGEgZm9ybWF0IHRoYXQgaXMgcHVibGljbHkKZG9jdW1lbnRlZCAoYW5kIHdpdGggYW4g aW1wbGVtZW50YXRpb24gYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgaW4Kc291cmNlIGNvZGUgZm9y bSlAY29tbWF7fSBhbmQgbXVzdCByZXF1aXJlIG5vIHNwZWNpYWwgcGFzc3dvcmQgb3Iga2V5IGZv cgp1bnBhY2tpbmdAY29tbWF7fSByZWFkaW5nIG9yIGNvcHlpbmcuCgpAZW51bWVyYXRlCkBpdGVt CkFkZGl0aW9uYWwgVGVybXMuCkBlbmQgZW51bWVyYXRlCgogIGBgQWRkaXRpb25hbCBwZXJtaXNz aW9ucycnIGFyZSB0ZXJtcyB0aGF0IHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMKTGljZW5z ZSBieSBtYWtpbmcgZXhjZXB0aW9ucyBmcm9tIG9uZSBvciBtb3JlIG9mIGl0cyBjb25kaXRpb25z LgpBZGRpdGlvbmFsIHBlcm1pc3Npb25zIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlIGVudGly ZSBQcm9ncmFtIHNoYWxsCmJlIHRyZWF0ZWQgYXMgdGhvdWdoIHRoZXkgd2VyZSBpbmNsdWRlZCBp biB0aGlzIExpY2Vuc2VAY29tbWF7fSB0byB0aGUgZXh0ZW50CnRoYXQgdGhleSBhcmUgdmFsaWQg dW5kZXIgYXBwbGljYWJsZSBsYXcuICBJZiBhZGRpdGlvbmFsIHBlcm1pc3Npb25zCmFwcGx5IG9u bHkgdG8gcGFydCBvZiB0aGUgUHJvZ3JhbUBjb21tYXt9IHRoYXQgcGFydCBtYXkgYmUgdXNlZCBz ZXBhcmF0ZWx5CnVuZGVyIHRob3NlIHBlcm1pc3Npb25zQGNvbW1he30gYnV0IHRoZSBlbnRpcmUg UHJvZ3JhbSByZW1haW5zIGdvdmVybmVkIGJ5CnRoaXMgTGljZW5zZSB3aXRob3V0IHJlZ2FyZCB0 byB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucy4KCiAgV2hlbiB5b3UgY29udmV5IGEgY29weSBv ZiBhIGNvdmVyZWQgd29ya0Bjb21tYXt9IHlvdSBtYXkgYXQgeW91ciBvcHRpb24KcmVtb3ZlIGFu eSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIGZyb20gdGhhdCBjb3B5QGNvbW1he30gb3IgZnJvbSBh bnkgcGFydCBvZgppdC4gIChBZGRpdGlvbmFsIHBlcm1pc3Npb25zIG1heSBiZSB3cml0dGVuIHRv IHJlcXVpcmUgdGhlaXIgb3duCnJlbW92YWwgaW4gY2VydGFpbiBjYXNlcyB3aGVuIHlvdSBtb2Rp ZnkgdGhlIHdvcmsuKSAgWW91IG1heSBwbGFjZQphZGRpdGlvbmFsIHBlcm1pc3Npb25zIG9uIG1h dGVyaWFsQGNvbW1he30gYWRkZWQgYnkgeW91IHRvIGEgY292ZXJlZCB3b3JrQGNvbW1he30KZm9y IHdoaWNoIHlvdSBoYXZlIG9yIGNhbiBnaXZlIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBwZXJtaXNz aW9uLgoKICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vu c2VAY29tbWF7fSBmb3IgbWF0ZXJpYWwgeW91CmFkZCB0byBhIGNvdmVyZWQgd29ya0Bjb21tYXt9 IHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mCnRoYXQg bWF0ZXJpYWwpIHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRlcm1z OgoKYSkgRGlzY2xhaW1pbmcgd2FycmFudHkgb3IgbGltaXRpbmcgbGlhYmlsaXR5IGRpZmZlcmVu dGx5IGZyb20gdGhlCnRlcm1zIG9mIHNlY3Rpb25zIDE1IGFuZCAxNiBvZiB0aGlzIExpY2Vuc2U7 IG9yCgpiKSBSZXF1aXJpbmcgcHJlc2VydmF0aW9uIG9mIHNwZWNpZmllZCByZWFzb25hYmxlIGxl Z2FsIG5vdGljZXMgb3IKYXV0aG9yIGF0dHJpYnV0aW9ucyBpbiB0aGF0IG1hdGVyaWFsIG9yIGlu IHRoZSBBcHByb3ByaWF0ZSBMZWdhbApOb3RpY2VzIGRpc3BsYXllZCBieSB3b3JrcyBjb250YWlu aW5nIGl0OyBvcgoKYykgUHJvaGliaXRpbmcgbWlzcmVwcmVzZW50YXRpb24gb2YgdGhlIG9yaWdp biBvZiB0aGF0IG1hdGVyaWFsQGNvbW1he30gb3IKcmVxdWlyaW5nIHRoYXQgbW9kaWZpZWQgdmVy c2lvbnMgb2Ygc3VjaCBtYXRlcmlhbCBiZSBtYXJrZWQgaW4KcmVhc29uYWJsZSB3YXlzIGFzIGRp ZmZlcmVudCBmcm9tIHRoZSBvcmlnaW5hbCB2ZXJzaW9uOyBvcgoKZCkgTGltaXRpbmcgdGhlIHVz ZSBmb3IgcHVibGljaXR5IHB1cnBvc2VzIG9mIG5hbWVzIG9mIGxpY2Vuc29ycyBvcgphdXRob3Jz IG9mIHRoZSBtYXRlcmlhbDsgb3IKCmUpIERlY2xpbmluZyB0byBncmFudCByaWdodHMgdW5kZXIg dHJhZGVtYXJrIGxhdyBmb3IgdXNlIG9mIHNvbWUKdHJhZGUgbmFtZXNAY29tbWF7fSB0cmFkZW1h cmtzQGNvbW1he30gb3Igc2VydmljZSBtYXJrczsgb3IKCmYpIFJlcXVpcmluZyBpbmRlbW5pZmlj YXRpb24gb2YgbGljZW5zb3JzIGFuZCBhdXRob3JzIG9mIHRoYXQKbWF0ZXJpYWwgYnkgYW55b25l IHdobyBjb252ZXlzIHRoZSBtYXRlcmlhbCAob3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YKaXQpIHdp dGggY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgb2YgbGlhYmlsaXR5IHRvIHRoZSByZWNpcGllbnRA Y29tbWF7fSBmb3IKYW55IGxpYWJpbGl0eSB0aGF0IHRoZXNlIGNvbnRyYWN0dWFsIGFzc3VtcHRp b25zIGRpcmVjdGx5IGltcG9zZSBvbgp0aG9zZSBsaWNlbnNvcnMgYW5kIGF1dGhvcnMuCgogIEFs bCBvdGhlciBub24tcGVybWlzc2l2ZSBhZGRpdGlvbmFsIHRlcm1zIGFyZSBjb25zaWRlcmVkIGBg ZnVydGhlcgpyZXN0cmljdGlvbnMnJyB3aXRoaW4gdGhlIG1lYW5pbmcgb2Ygc2VjdGlvbiAxMC4g IElmIHRoZSBQcm9ncmFtIGFzIHlvdQpyZWNlaXZlZCBpdEBjb21tYXt9IG9yIGFueSBwYXJ0IG9m IGl0QGNvbW1he30gY29udGFpbnMgYSBub3RpY2Ugc3RhdGluZyB0aGF0IGl0IGlzCmdvdmVybmVk IGJ5IHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIGEgdGVybSB0aGF0IGlzIGEgZnVydGhlcgpyZXN0 cmljdGlvbkBjb21tYXt9IHlvdSBtYXkgcmVtb3ZlIHRoYXQgdGVybS4gIElmIGEgbGljZW5zZSBk b2N1bWVudCBjb250YWlucwphIGZ1cnRoZXIgcmVzdHJpY3Rpb24gYnV0IHBlcm1pdHMgcmVsaWNl bnNpbmcgb3IgY29udmV5aW5nIHVuZGVyIHRoaXMKTGljZW5zZUBjb21tYXt9IHlvdSBtYXkgYWRk IHRvIGEgY292ZXJlZCB3b3JrIG1hdGVyaWFsIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcwpvZiB0aGF0 IGxpY2Vuc2UgZG9jdW1lbnRAY29tbWF7fSBwcm92aWRlZCB0aGF0IHRoZSBmdXJ0aGVyIHJlc3Ry aWN0aW9uIGRvZXMKbm90IHN1cnZpdmUgc3VjaCByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcuCgog IElmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGggdGhpcyBz ZWN0aW9uQGNvbW1he30geW91Cm11c3QgcGxhY2VAY29tbWF7fSBpbiB0aGUgcmVsZXZhbnQgc291 cmNlIGZpbGVzQGNvbW1he30gYSBzdGF0ZW1lbnQgb2YgdGhlCmFkZGl0aW9uYWwgdGVybXMgdGhh dCBhcHBseSB0byB0aG9zZSBmaWxlc0Bjb21tYXt9IG9yIGEgbm90aWNlIGluZGljYXRpbmcKd2hl cmUgdG8gZmluZCB0aGUgYXBwbGljYWJsZSB0ZXJtcy4KCiAgQWRkaXRpb25hbCB0ZXJtc0Bjb21t YXt9IHBlcm1pc3NpdmUgb3Igbm9uLXBlcm1pc3NpdmVAY29tbWF7fSBtYXkgYmUgc3RhdGVkIGlu IHRoZQpmb3JtIG9mIGEgc2VwYXJhdGVseSB3cml0dGVuIGxpY2Vuc2VAY29tbWF7fSBvciBzdGF0 ZWQgYXMgZXhjZXB0aW9uczsKdGhlIGFib3ZlIHJlcXVpcmVtZW50cyBhcHBseSBlaXRoZXIgd2F5 LgoKQGVudW1lcmF0ZQpAaXRlbQpUZXJtaW5hdGlvbi4KQGVuZCBlbnVtZXJhdGUKCiAgWW91IG1h eSBub3QgcHJvcGFnYXRlIG9yIG1vZGlmeSBhIGNvdmVyZWQgd29yayBleGNlcHQgYXMgZXhwcmVz c2x5CnByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0IG90aGVyd2lzZSB0 byBwcm9wYWdhdGUgb3IKbW9kaWZ5IGl0IGlzIHZvaWRAY29tbWF7fSBhbmQgd2lsbCBhdXRvbWF0 aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlcgp0aGlzIExpY2Vuc2UgKGluY2x1ZGlu ZyBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgdW5kZXIgdGhlIHRoaXJkCnBhcmFncmFwaCBv ZiBzZWN0aW9uIDExKS4KCiAgSG93ZXZlckBjb21tYXt9IGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0 aW9uIG9mIHRoaXMgTGljZW5zZUBjb21tYXt9IHRoZW4geW91cgpsaWNlbnNlIGZyb20gYSBwYXJ0 aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMgcmVpbnN0YXRlZCAoYSkKcHJvdmlzaW9uYWxseUBj b21tYXt9IHVubGVzcyBhbmQgdW50aWwgdGhlIGNvcHlyaWdodCBob2xkZXIgZXhwbGljaXRseSBh bmQKZmluYWxseSB0ZXJtaW5hdGVzIHlvdXIgbGljZW5zZUBjb21tYXt9IGFuZCAoYikgcGVybWFu ZW50bHlAY29tbWF7fSBpZiB0aGUgY29weXJpZ2h0CmhvbGRlciBmYWlscyB0byBub3RpZnkgeW91 IG9mIHRoZSB2aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxlIG1lYW5zCnByaW9yIHRvIDYwIGRh eXMgYWZ0ZXIgdGhlIGNlc3NhdGlvbi4KCiAgTW9yZW92ZXJAY29tbWF7fSB5b3VyIGxpY2Vuc2Ug ZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcwpyZWluc3RhdGVkIHBlcm1hbmVu dGx5IGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vdGlmaWVzIHlvdSBvZiB0aGUKdmlvbGF0aW9u IGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFuc0Bjb21tYXt9IHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUg eW91IGhhdmUKcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZv ciBhbnkgd29yaykgZnJvbSB0aGF0CmNvcHlyaWdodCBob2xkZXJAY29tbWF7fSBhbmQgeW91IGN1 cmUgdGhlIHZpb2xhdGlvbiBwcmlvciB0byAzMCBkYXlzIGFmdGVyCnlvdXIgcmVjZWlwdCBvZiB0 aGUgbm90aWNlLgoKICBUZXJtaW5hdGlvbiBvZiB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIHNlY3Rp b24gZG9lcyBub3QgdGVybWluYXRlIHRoZQpsaWNlbnNlcyBvZiBwYXJ0aWVzIHdobyBoYXZlIHJl Y2VpdmVkIGNvcGllcyBvciByaWdodHMgZnJvbSB5b3UgdW5kZXIKdGhpcyBMaWNlbnNlLiAgSWYg eW91ciByaWdodHMgaGF2ZSBiZWVuIHRlcm1pbmF0ZWQgYW5kIG5vdCBwZXJtYW5lbnRseQpyZWlu c3RhdGVkQGNvbW1he30geW91IGRvIG5vdCBxdWFsaWZ5IHRvIHJlY2VpdmUgbmV3IGxpY2Vuc2Vz IGZvciB0aGUgc2FtZQptYXRlcmlhbCB1bmRlciBzZWN0aW9uIDEwLgoKQGVudW1lcmF0ZQpAaXRl bQpBY2NlcHRhbmNlIE5vdCBSZXF1aXJlZCBmb3IgSGF2aW5nIENvcGllcy4KQGVuZCBlbnVtZXJh dGUKCiAgWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSBpbiBvcmRl ciB0byByZWNlaXZlIG9yCnJ1biBhIGNvcHkgb2YgdGhlIFByb2dyYW0uICBBbmNpbGxhcnkgcHJv cGFnYXRpb24gb2YgYSBjb3ZlcmVkIHdvcmsKb2NjdXJyaW5nIHNvbGVseSBhcyBhIGNvbnNlcXVl bmNlIG9mIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24KdG8gcmVjZWl2ZSBhIGNvcHkg bGlrZXdpc2UgZG9lcyBub3QgcmVxdWlyZSBhY2NlcHRhbmNlLiAgSG93ZXZlckBjb21tYXt9Cm5v dGhpbmcgb3RoZXIgdGhhbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHBy b3BhZ2F0ZSBvcgptb2RpZnkgYW55IGNvdmVyZWQgd29yay4gIFRoZXNlIGFjdGlvbnMgaW5mcmlu Z2UgY29weXJpZ2h0IGlmIHlvdSBkbwpub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9y ZUBjb21tYXt9IGJ5IG1vZGlmeWluZyBvciBwcm9wYWdhdGluZyBhCmNvdmVyZWQgd29ya0Bjb21t YXt9IHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNv LgoKQGVudW1lcmF0ZQpAaXRlbQpBdXRvbWF0aWMgTGljZW5zaW5nIG9mIERvd25zdHJlYW0gUmVj aXBpZW50cy4KQGVuZCBlbnVtZXJhdGUKCiAgRWFjaCB0aW1lIHlvdSBjb252ZXkgYSBjb3ZlcmVk IHdvcmtAY29tbWF7fSB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkKcmVjZWl2ZXMgYSBsaWNl bnNlIGZyb20gdGhlIG9yaWdpbmFsIGxpY2Vuc29yc0Bjb21tYXt9IHRvIHJ1bkBjb21tYXt9IG1v ZGlmeSBhbmQKcHJvcGFnYXRlIHRoYXQgd29ya0Bjb21tYXt9IHN1YmplY3QgdG8gdGhpcyBMaWNl bnNlLiAgWW91IGFyZSBub3QgcmVzcG9uc2libGUKZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5 IHRoaXJkIHBhcnRpZXMgd2l0aCB0aGlzIExpY2Vuc2UuCgogIEFuIGBgZW50aXR5IHRyYW5zYWN0 aW9uJycgaXMgYSB0cmFuc2FjdGlvbiB0cmFuc2ZlcnJpbmcgY29udHJvbCBvZiBhbgpvcmdhbml6 YXRpb25AY29tbWF7fSBvciBzdWJzdGFudGlhbGx5IGFsbCBhc3NldHMgb2Ygb25lQGNvbW1he30g b3Igc3ViZGl2aWRpbmcgYW4Kb3JnYW5pemF0aW9uQGNvbW1he30gb3IgbWVyZ2luZyBvcmdhbml6 YXRpb25zLiAgSWYgcHJvcGFnYXRpb24gb2YgYSBjb3ZlcmVkCndvcmsgcmVzdWx0cyBmcm9tIGFu IGVudGl0eSB0cmFuc2FjdGlvbkBjb21tYXt9IGVhY2ggcGFydHkgdG8gdGhhdAp0cmFuc2FjdGlv biB3aG8gcmVjZWl2ZXMgYSBjb3B5IG9mIHRoZSB3b3JrIGFsc28gcmVjZWl2ZXMgd2hhdGV2ZXIK bGljZW5zZXMgdG8gdGhlIHdvcmsgdGhlIHBhcnR5J3MgcHJlZGVjZXNzb3IgaW4gaW50ZXJlc3Qg aGFkIG9yIGNvdWxkCmdpdmUgdW5kZXIgdGhlIHByZXZpb3VzIHBhcmFncmFwaEBjb21tYXt9IHBs dXMgYSByaWdodCB0byBwb3NzZXNzaW9uIG9mIHRoZQpDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0 aGUgd29yayBmcm9tIHRoZSBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdEBjb21tYXt9IGlmCnRoZSBw cmVkZWNlc3NvciBoYXMgaXQgb3IgY2FuIGdldCBpdCB3aXRoIHJlYXNvbmFibGUgZWZmb3J0cy4K CiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgZXhl cmNpc2Ugb2YgdGhlCnJpZ2h0cyBncmFudGVkIG9yIGFmZmlybWVkIHVuZGVyIHRoaXMgTGljZW5z ZS4gIEZvciBleGFtcGxlQGNvbW1he30geW91IG1heQpub3QgaW1wb3NlIGEgbGljZW5zZSBmZWVA Y29tbWF7fSByb3lhbHR5QGNvbW1he30gb3Igb3RoZXIgY2hhcmdlIGZvciBleGVyY2lzZSBvZgpy aWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2VAY29tbWF7fSBhbmQgeW91IG1heSBub3Qg aW5pdGlhdGUgbGl0aWdhdGlvbgooaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNs YWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdAphbnkgcGF0ZW50IGNsYWltIGlzIGluZnJp bmdlZCBieSBtYWtpbmdAY29tbWF7fSB1c2luZ0Bjb21tYXt9IHNlbGxpbmdAY29tbWF7fSBvZmZl cmluZyBmb3IKc2FsZUBjb21tYXt9IG9yIGltcG9ydGluZyB0aGUgUHJvZ3JhbSBvciBhbnkgcG9y dGlvbiBvZiBpdC4KCkBlbnVtZXJhdGUKQGl0ZW0KUGF0ZW50cy4KQGVuZCBlbnVtZXJhdGUKCiAg QSBgYGNvbnRyaWJ1dG9yJycgaXMgYSBjb3B5cmlnaHQgaG9sZGVyIHdobyBhdXRob3JpemVzIHVz ZSB1bmRlciB0aGlzCkxpY2Vuc2Ugb2YgdGhlIFByb2dyYW0gb3IgYSB3b3JrIG9uIHdoaWNoIHRo ZSBQcm9ncmFtIGlzIGJhc2VkLiAgVGhlCndvcmsgdGh1cyBsaWNlbnNlZCBpcyBjYWxsZWQgdGhl IGNvbnRyaWJ1dG9yJ3MgYGBjb250cmlidXRvciB2ZXJzaW9uJycuCgogIEEgY29udHJpYnV0b3In cyBgYGVzc2VudGlhbCBwYXRlbnQgY2xhaW1zJycgYXJlIGFsbCBwYXRlbnQgY2xhaW1zCm93bmVk IG9yIGNvbnRyb2xsZWQgYnkgdGhlIGNvbnRyaWJ1dG9yQGNvbW1he30gd2hldGhlciBhbHJlYWR5 IGFjcXVpcmVkIG9yCmhlcmVhZnRlciBhY3F1aXJlZEBjb21tYXt9IHRoYXQgd291bGQgYmUgaW5m cmluZ2VkIGJ5IHNvbWUgbWFubmVyQGNvbW1he30gcGVybWl0dGVkCmJ5IHRoaXMgTGljZW5zZUBj b21tYXt9IG9mIG1ha2luZ0Bjb21tYXt9IHVzaW5nQGNvbW1he30gb3Igc2VsbGluZyBpdHMgY29u dHJpYnV0b3IgdmVyc2lvbkBjb21tYXt9CmJ1dCBkbyBub3QgaW5jbHVkZSBjbGFpbXMgdGhhdCB3 b3VsZCBiZSBpbmZyaW5nZWQgb25seSBhcyBhCmNvbnNlcXVlbmNlIG9mIGZ1cnRoZXIgbW9kaWZp Y2F0aW9uIG9mIHRoZSBjb250cmlidXRvciB2ZXJzaW9uLiAgRm9yCnB1cnBvc2VzIG9mIHRoaXMg ZGVmaW5pdGlvbkBjb21tYXt9IGBgY29udHJvbCcnIGluY2x1ZGVzIHRoZSByaWdodCB0byBncmFu dApwYXRlbnQgc3VibGljZW5zZXMgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHRoZSByZXF1 aXJlbWVudHMgb2YKdGhpcyBMaWNlbnNlLgoKICBFYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3Ug YSBub24tZXhjbHVzaXZlQGNvbW1he30gd29ybGR3aWRlQGNvbW1he30gcm95YWx0eS1mcmVlCnBh dGVudCBsaWNlbnNlIHVuZGVyIHRoZSBjb250cmlidXRvcidzIGVzc2VudGlhbCBwYXRlbnQgY2xh aW1zQGNvbW1he30gdG8KbWFrZUBjb21tYXt9IHVzZUBjb21tYXt9IHNlbGxAY29tbWF7fSBvZmZl ciBmb3Igc2FsZUBjb21tYXt9IGltcG9ydCBhbmQgb3RoZXJ3aXNlIHJ1bkBjb21tYXt9IG1vZGlm eSBhbmQKcHJvcGFnYXRlIHRoZSBjb250ZW50cyBvZiBpdHMgY29udHJpYnV0b3IgdmVyc2lvbi4K CiAgSW4gdGhlIGZvbGxvd2luZyB0aHJlZSBwYXJhZ3JhcGhzQGNvbW1he30gYSBgYHBhdGVudCBs aWNlbnNlJycgaXMgYW55IGV4cHJlc3MKYWdyZWVtZW50IG9yIGNvbW1pdG1lbnRAY29tbWF7fSBo b3dldmVyIGRlbm9taW5hdGVkQGNvbW1he30gbm90IHRvIGVuZm9yY2UgYSBwYXRlbnQKKHN1Y2gg YXMgYW4gZXhwcmVzcyBwZXJtaXNzaW9uIHRvIHByYWN0aWNlIGEgcGF0ZW50IG9yIGNvdmVuYW50 IG5vdCB0bwpzdWUgZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQpLiAgVG8gYGBncmFudCcnIHN1Y2gg YSBwYXRlbnQgbGljZW5zZSB0byBhCnBhcnR5IG1lYW5zIHRvIG1ha2Ugc3VjaCBhbiBhZ3JlZW1l bnQgb3IgY29tbWl0bWVudCBub3QgdG8gZW5mb3JjZSBhCnBhdGVudCBhZ2FpbnN0IHRoZSBwYXJ0 eS4KCiAgSWYgeW91IGNvbnZleSBhIGNvdmVyZWQgd29ya0Bjb21tYXt9IGtub3dpbmdseSByZWx5 aW5nIG9uIGEgcGF0ZW50IGxpY2Vuc2VAY29tbWF7fQphbmQgdGhlIENvcnJlc3BvbmRpbmcgU291 cmNlIG9mIHRoZSB3b3JrIGlzIG5vdCBhdmFpbGFibGUgZm9yIGFueW9uZQp0byBjb3B5QGNvbW1h e30gZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2VAY29t bWF7fSB0aHJvdWdoIGEKcHVibGljbHkgYXZhaWxhYmxlIG5ldHdvcmsgc2VydmVyIG9yIG90aGVy IHJlYWRpbHkgYWNjZXNzaWJsZSBtZWFuc0Bjb21tYXt9CnRoZW4geW91IG11c3QgZWl0aGVyICgx KSBjYXVzZSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdG8gYmUgc28KYXZhaWxhYmxlQGNvbW1h e30gb3IgKDIpIGFycmFuZ2UgdG8gZGVwcml2ZSB5b3Vyc2VsZiBvZiB0aGUgYmVuZWZpdCBvZiB0 aGUKcGF0ZW50IGxpY2Vuc2UgZm9yIHRoaXMgcGFydGljdWxhciB3b3JrQGNvbW1he30gb3IgKDMp IGFycmFuZ2VAY29tbWF7fSBpbiBhIG1hbm5lcgpjb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVt ZW50cyBvZiB0aGlzIExpY2Vuc2VAY29tbWF7fSB0byBleHRlbmQgdGhlIHBhdGVudApsaWNlbnNl IHRvIGRvd25zdHJlYW0gcmVjaXBpZW50cy4gIGBgS25vd2luZ2x5IHJlbHlpbmcnJyBtZWFucyB5 b3UgaGF2ZQphY3R1YWwga25vd2xlZGdlIHRoYXRAY29tbWF7fSBidXQgZm9yIHRoZSBwYXRlbnQg bGljZW5zZUBjb21tYXt9IHlvdXIgY29udmV5aW5nIHRoZQpjb3ZlcmVkIHdvcmsgaW4gYSBjb3Vu dHJ5QGNvbW1he30gb3IgeW91ciByZWNpcGllbnQncyB1c2Ugb2YgdGhlIGNvdmVyZWQgd29yawpp biBhIGNvdW50cnlAY29tbWF7fSB3b3VsZCBpbmZyaW5nZSBvbmUgb3IgbW9yZSBpZGVudGlmaWFi bGUgcGF0ZW50cyBpbiB0aGF0CmNvdW50cnkgdGhhdCB5b3UgaGF2ZSByZWFzb24gdG8gYmVsaWV2 ZSBhcmUgdmFsaWQuCgogIElmQGNvbW1he30gcHVyc3VhbnQgdG8gb3IgaW4gY29ubmVjdGlvbiB3 aXRoIGEgc2luZ2xlIHRyYW5zYWN0aW9uIG9yCmFycmFuZ2VtZW50QGNvbW1he30geW91IGNvbnZl eUBjb21tYXt9IG9yIHByb3BhZ2F0ZSBieSBwcm9jdXJpbmcgY29udmV5YW5jZSBvZkBjb21tYXt9 IGEKY292ZXJlZCB3b3JrQGNvbW1he30gYW5kIGdyYW50IGEgcGF0ZW50IGxpY2Vuc2UgdG8gc29t ZSBvZiB0aGUgcGFydGllcwpyZWNlaXZpbmcgdGhlIGNvdmVyZWQgd29yayBhdXRob3JpemluZyB0 aGVtIHRvIHVzZUBjb21tYXt9IHByb3BhZ2F0ZUBjb21tYXt9IG1vZGlmeQpvciBjb252ZXkgYSBz cGVjaWZpYyBjb3B5IG9mIHRoZSBjb3ZlcmVkIHdvcmtAY29tbWF7fSB0aGVuIHRoZSBwYXRlbnQg bGljZW5zZQp5b3UgZ3JhbnQgaXMgYXV0b21hdGljYWxseSBleHRlbmRlZCB0byBhbGwgcmVjaXBp ZW50cyBvZiB0aGUgY292ZXJlZAp3b3JrIGFuZCB3b3JrcyBiYXNlZCBvbiBpdC4KCiAgQSBwYXRl bnQgbGljZW5zZSBpcyBgYGRpc2NyaW1pbmF0b3J5JycgaWYgaXQgZG9lcyBub3QgaW5jbHVkZSB3 aXRoaW4KdGhlIHNjb3BlIG9mIGl0cyBjb3ZlcmFnZUBjb21tYXt9IHByb2hpYml0cyB0aGUgZXhl cmNpc2Ugb2ZAY29tbWF7fSBvciBpcwpjb25kaXRpb25lZCBvbiB0aGUgbm9uLWV4ZXJjaXNlIG9m IG9uZSBvciBtb3JlIG9mIHRoZSByaWdodHMgdGhhdCBhcmUKc3BlY2lmaWNhbGx5IGdyYW50ZWQg dW5kZXIgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgY29udmV5IGEgY292ZXJlZAp3b3JrIGlm IHlvdSBhcmUgYSBwYXJ0eSB0byBhbiBhcnJhbmdlbWVudCB3aXRoIGEgdGhpcmQgcGFydHkgdGhh dCBpcwppbiB0aGUgYnVzaW5lc3Mgb2YgZGlzdHJpYnV0aW5nIHNvZnR3YXJlQGNvbW1he30gdW5k ZXIgd2hpY2ggeW91IG1ha2UgcGF5bWVudAp0byB0aGUgdGhpcmQgcGFydHkgYmFzZWQgb24gdGhl IGV4dGVudCBvZiB5b3VyIGFjdGl2aXR5IG9mIGNvbnZleWluZwp0aGUgd29ya0Bjb21tYXt9IGFu ZCB1bmRlciB3aGljaCB0aGUgdGhpcmQgcGFydHkgZ3JhbnRzQGNvbW1he30gdG8gYW55IG9mIHRo ZQpwYXJ0aWVzIHdobyB3b3VsZCByZWNlaXZlIHRoZSBjb3ZlcmVkIHdvcmsgZnJvbSB5b3VAY29t bWF7fSBhIGRpc2NyaW1pbmF0b3J5CnBhdGVudCBsaWNlbnNlIChhKSBpbiBjb25uZWN0aW9uIHdp dGggY29waWVzIG9mIHRoZSBjb3ZlcmVkIHdvcmsKY29udmV5ZWQgYnkgeW91IChvciBjb3BpZXMg bWFkZSBmcm9tIHRob3NlIGNvcGllcylAY29tbWF7fSBvciAoYikgcHJpbWFyaWx5CmZvciBhbmQg aW4gY29ubmVjdGlvbiB3aXRoIHNwZWNpZmljIHByb2R1Y3RzIG9yIGNvbXBpbGF0aW9ucyB0aGF0 CmNvbnRhaW4gdGhlIGNvdmVyZWQgd29ya0Bjb21tYXt9IHVubGVzcyB5b3UgZW50ZXJlZCBpbnRv IHRoYXQgYXJyYW5nZW1lbnRAY29tbWF7fQpvciB0aGF0IHBhdGVudCBsaWNlbnNlIHdhcyBncmFu dGVkQGNvbW1he30gcHJpb3IgdG8gMjggTWFyY2ggMjAwNy4KCiAgTm90aGluZyBpbiB0aGlzIExp Y2Vuc2Ugc2hhbGwgYmUgY29uc3RydWVkIGFzIGV4Y2x1ZGluZyBvciBsaW1pdGluZwphbnkgaW1w bGllZCBsaWNlbnNlIG9yIG90aGVyIGRlZmVuc2VzIHRvIGluZnJpbmdlbWVudCB0aGF0IG1heQpv dGhlcndpc2UgYmUgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhcHBsaWNhYmxlIHBhdGVudCBsYXcu CgpAZW51bWVyYXRlCkBpdGVtCk5vIFN1cnJlbmRlciBvZiBPdGhlcnMnIEZyZWVkb20uCkBlbmQg ZW51bWVyYXRlCgogIElmIGNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5 IGNvdXJ0IG9yZGVyQGNvbW1he30gYWdyZWVtZW50IG9yCm90aGVyd2lzZSkgdGhhdCBjb250cmFk aWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZUBjb21tYXt9IHRoZXkgZG8gbm90CmV4 Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fu bm90IGNvbnZleSBhCmNvdmVyZWQgd29yayBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5 IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcwpMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGlu ZW50IG9ibGlnYXRpb25zQGNvbW1he30gdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdSBtYXkKbm90 IGNvbnZleSBpdCBhdCBhbGwuICBGb3IgZXhhbXBsZUBjb21tYXt9IGlmIHlvdSBhZ3JlZSB0byB0 ZXJtcyB0aGF0IG9ibGlnYXRlIHlvdQp0byBjb2xsZWN0IGEgcm95YWx0eSBmb3IgZnVydGhlciBj b252ZXlpbmcgZnJvbSB0aG9zZSB0byB3aG9tIHlvdSBjb252ZXkKdGhlIFByb2dyYW1AY29tbWF7 fSB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCB0aG9zZSB0ZXJtcyBhbmQgdGhp cwpMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBjb252ZXlpbmcgdGhl IFByb2dyYW0uCgpAZW51bWVyYXRlCkBpdGVtClVzZSB3aXRoIHRoZSBHTlUgQWZmZXJvIEdlbmVy YWwgUHVibGljIExpY2Vuc2UuCkBlbmQgZW51bWVyYXRlCgogIE5vdHdpdGhzdGFuZGluZyBhbnkg b3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZUBjb21tYXt9IHlvdSBoYXZlCnBlcm1pc3Np b24gdG8gbGluayBvciBjb21iaW5lIGFueSBjb3ZlcmVkIHdvcmsgd2l0aCBhIHdvcmsgbGljZW5z ZWQKdW5kZXIgdmVyc2lvbiAzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgaW50byBhIHNpbmdsZQpjb21iaW5lZCB3b3JrQGNvbW1he30gYW5kIHRvIGNvbnZleSB0aGUg cmVzdWx0aW5nIHdvcmsuICBUaGUgdGVybXMgb2YgdGhpcwpMaWNlbnNlIHdpbGwgY29udGludWUg dG8gYXBwbHkgdG8gdGhlIHBhcnQgd2hpY2ggaXMgdGhlIGNvdmVyZWQgd29ya0Bjb21tYXt9CmJ1 dCB0aGUgc3BlY2lhbCByZXF1aXJlbWVudHMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJs aWMgTGljZW5zZUBjb21tYXt9CnNlY3Rpb24gMTNAY29tbWF7fSBjb25jZXJuaW5nIGludGVyYWN0 aW9uIHRocm91Z2ggYSBuZXR3b3JrIHdpbGwgYXBwbHkgdG8gdGhlCmNvbWJpbmF0aW9uIGFzIHN1 Y2guCgpAZW51bWVyYXRlCkBpdGVtClJldmlzZWQgVmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlLgpA ZW5kIGVudW1lcmF0ZQoKICBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNo IHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZgp0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCmJlIHNpbWls YXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb25AY29tbWF7fSBidXQgbWF5IGRpZmZl ciBpbiBkZXRhaWwgdG8KYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCgogIEVhY2gg dmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhl ClByb2dyYW0gc3BlY2lmaWVzIHRoYXQgYSBjZXJ0YWluIG51bWJlcmVkIHZlcnNpb24gb2YgdGhl IEdOVSBHZW5lcmFsClB1YmxpYyBMaWNlbnNlIGBgb3IgYW55IGxhdGVyIHZlcnNpb24nJyBhcHBs aWVzIHRvIGl0QGNvbW1he30geW91IGhhdmUgdGhlCm9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRl cm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IG51bWJlcmVkCnZlcnNpb24gb3Igb2Yg YW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCkZvdW5kYXRp b24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2Yg dGhlCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlQGNvbW1he30geW91IG1heSBjaG9vc2UgYW55 IHZlcnNpb24gZXZlciBwdWJsaXNoZWQKYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K CiAgSWYgdGhlIFByb2dyYW0gc3BlY2lmaWVzIHRoYXQgYSBwcm94eSBjYW4gZGVjaWRlIHdoaWNo IGZ1dHVyZQp2ZXJzaW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgY2FuIGJl IHVzZWRAY29tbWF7fSB0aGF0IHByb3h5J3MKcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNl IG9mIGEgdmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdQp0byBjaG9vc2UgdGhhdCB2 ZXJzaW9uIGZvciB0aGUgUHJvZ3JhbS4KCiAgTGF0ZXIgbGljZW5zZSB2ZXJzaW9ucyBtYXkgZ2l2 ZSB5b3UgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQKcGVybWlzc2lvbnMuICBIb3dldmVyQGNvbW1h e30gbm8gYWRkaXRpb25hbCBvYmxpZ2F0aW9ucyBhcmUgaW1wb3NlZCBvbiBhbnkKYXV0aG9yIG9y IGNvcHlyaWdodCBob2xkZXIgYXMgYSByZXN1bHQgb2YgeW91ciBjaG9vc2luZyB0byBmb2xsb3cg YQpsYXRlciB2ZXJzaW9uLgoKQGVudW1lcmF0ZQpAaXRlbQpEaXNjbGFpbWVyIG9mIFdhcnJhbnR5 LgpAZW5kIGVudW1lcmF0ZQoKICBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU1A Y29tbWF7fSBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWQpBUFBMSUNBQkxFIExBV0AuICBFWENF UFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVApIT0xERVJT IEFORC9PUiBPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIFBST0dSQU0gYGBBUyBJUycnIFdJVEhP VVQgV0FSUkFOVFkKT0YgQU5ZIEtJTkRAY29tbWF7fSBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJ RURAY29tbWF7fSBJTkNMVURJTkdAY29tbWF7fSBCVVQgTk9UIExJTUlURUQgVE9AY29tbWF7fQpU SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSClBVUlBPU0VALiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZ IEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTQpJUyBXSVRIIFlPVUAuICBTSE9VTEQgVEhF IFBST0dSQU0gUFJPVkUgREVGRUNUSVZFQGNvbW1he30gWU9VIEFTU1VNRSBUSEUgQ09TVCBPRgpB TEwgTkVDRVNTQVJZIFNFUlZJQ0lOR0Bjb21tYXt9IFJFUEFJUiBPUiBDT1JSRUNUSU9OQC4KCkBl bnVtZXJhdGUKQGl0ZW0KTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCkBlbmQgZW51bWVyYXRlCgog IElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQg VE8gSU4gV1JJVElORwpXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSQGNvbW1he30gT1IgQU5ZIE9U SEVSIFBBUlRZIFdITyBNT0RJRklFUyBBTkQvT1IgQ09OVkVZUwpUSEUgUFJPR1JBTSBBUyBQRVJN SVRURUQgQUJPVkVAY29tbWF7fSBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTQGNvbW1he30g SU5DTFVESU5HIEFOWQpHRU5FUkFMQGNvbW1he30gU1BFQ0lBTEBjb21tYXt9IElOQ0lERU5UQUwg T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRQpVU0UgT1IgSU5BQklM SVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NT IE9GCkRBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNU QUlORUQgQlkgWU9VIE9SIFRISVJEClBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFN IFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgUFJPR1JBTVMpQGNvbW1he30KRVZFTiBJRiBTVUNI IEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU WSBPRgpTVUNIIERBTUFHRVNALgoKQGVudW1lcmF0ZQpAaXRlbQpJbnRlcnByZXRhdGlvbiBvZiBT ZWN0aW9ucyAxNSBhbmQgMTYuCkBlbmQgZW51bWVyYXRlCgogIElmIHRoZSBkaXNjbGFpbWVyIG9m IHdhcnJhbnR5IGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBwcm92aWRlZAphYm92ZSBjYW5u b3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtc0Bj b21tYXt9CnJldmlld2luZyBjb3VydHMgc2hhbGwgYXBwbHkgbG9jYWwgbGF3IHRoYXQgbW9zdCBj bG9zZWx5IGFwcHJveGltYXRlcwphbiBhYnNvbHV0ZSB3YWl2ZXIgb2YgYWxsIGNpdmlsIGxpYWJp bGl0eSBpbiBjb25uZWN0aW9uIHdpdGggdGhlClByb2dyYW1AY29tbWF7fSB1bmxlc3MgYSB3YXJy YW50eSBvciBhc3N1bXB0aW9uIG9mIGxpYWJpbGl0eSBhY2NvbXBhbmllcyBhCmNvcHkgb2YgdGhl IFByb2dyYW0gaW4gcmV0dXJuIGZvciBhIGZlZS4KCkVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9O UwoKSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCgogIElmIHlv dSBkZXZlbG9wIGEgbmV3IHByb2dyYW1AY29tbWF7fSBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2Yg dGhlIGdyZWF0ZXN0CnBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljQGNvbW1he30gdGhlIGJlc3Qg d2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CmZyZWUgc29mdHdhcmUgd2hpY2ggZXZl cnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgoKICBU byBkbyBzb0Bjb21tYXt9IGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dy YW0uICBJdCBpcyBzYWZlc3QKdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291 cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQpzdGF0ZSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJh bnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0CnRoZSBgYGNvcHlyaWdodCcn IGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCgo8 b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3 aGF0IGl0IGRvZXMuPgpDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgoKVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbkBjb21tYXt9 IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2VAY29tbWF7fSBvcgooYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgoKVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWxAY29tbWF7fQpidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VALiAgU2VlIHRoZQpHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgoKWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKYWxvbmcgd2l0 aCB0aGlzIHByb2dyYW0uICBJZiBub3RAY29tbWF7fSBzZWUgQHVyZWZ7aHR0cDovL3d3dy5nbnUu b3JnL2xpY2Vuc2VzL30uCgpBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5 b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KCiAgSWYgdGhlIHByb2dyYW0gZG9lcyB0 ZXJtaW5hbCBpbnRlcmFjdGlvbkBjb21tYXt9IG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQKbm90aWNl IGxpa2UgdGhpcyB3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgoKPHByb2dy YW0+ICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgpUaGlzIHByb2dyYW0g Y29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93 IHcnLgpUaGlzIGlzIGZyZWUgc29mdHdhcmVAY29tbWF7fSBhbmQgeW91IGFyZSB3ZWxjb21lIHRv IHJlZGlzdHJpYnV0ZSBpdAp1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycg Zm9yIGRldGFpbHMuCgpUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hv dyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UuICBPZiBjb3Vyc2VAY29tbWF7fSB5b3VyIHByb2dyYW0ncyBjb21tYW5kcwpt aWdodCBiZSBkaWZmZXJlbnQ7IGZvciBhIEdVSSBpbnRlcmZhY2VAY29tbWF7fSB5b3Ugd291bGQg dXNlIGFuIGBgYWJvdXQgYm94JycuCgogIFlvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3ll ciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciBzY2hvb2xAY29tbWF7fQppZiBhbnlA Y29tbWF7fSB0byBzaWduIGEgYGBjb3B5cmlnaHQgZGlzY2xhaW1lcicnIGZvciB0aGUgcHJvZ3Jh bUBjb21tYXt9IGlmIG5lY2Vzc2FyeS4KRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpc0Bjb21t YXt9IGFuZCBob3cgdG8gYXBwbHkgYW5kIGZvbGxvdyB0aGUgR05VIEdQTEBjb21tYXt9IHNlZQpA dXJlZntodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvfS4KCiAgVGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbQpp bnRvIHByb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGlu ZSBsaWJyYXJ5QGNvbW1he30geW91Cm1heSBjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJt aXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aAp0aGUgbGlicmFyeS4gIElm IHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkb0Bjb21tYXt9IHVzZSB0aGUgR05VIExlc3NlciBH ZW5lcmFsClB1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLiAgQnV0IGZpcnN0 QGNvbW1he30gcGxlYXNlIHJlYWQKQHVyZWZ7aHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkv d2h5LW5vdC1sZ3BsLmh0bWx9LgpAZW5kIGNvcHlpbmcKCkBkaXJjYXRlZ29yeSBFbWFjcwpAZGly ZW50cnkKKiBEc2xpZGU6IChkc2xpZGUpLiAgICAgQSBwcmVzZW50YXRpb24gZnJhbWV3b3JrLgpA ZW5kIGRpcmVudHJ5CgpAZmluYWxvdXQKQHRpdGxlcGFnZQpAdGl0bGUgRG9tYWluIFNwZWNpZmlj IHNMSURFcwpAc3VidGl0bGUgZm9yIHZlcnNpb24KQHBhZ2UKQHZza2lwIDBwdCBwbHVzIDFmaWxs bApAaW5zZXJ0Y29weWluZwpAZW5kIHRpdGxlcGFnZQoKQGNvbnRlbnRzCgpAaWZub3R0ZXgKQG5v ZGUgVG9wCkB0b3AgRG9tYWluIFNwZWNpZmljIHNMSURFcwpAZW5kIGlmbm90dGV4CgpAbWVudQoq IEludHJvZHVjdGlvbjo6ICAgICAgICAgICAgICAgICBXaHkgWW91IEhlYXJ0IERTTCBJREUKKiBH bG9zc2FyeTo6ICAgICAgICAgICAgICAgICAgICAgV29yZHMgV2UgSW52ZW50ZWQKKiBDcmVhdGlu Zzo6ICAgICAgICAgICAgICAgICAgICAgTWFraW5nIE9yZyBEb2N1bWVudHMgSW50byBQcmVzZW50 YXRpb25zCiogUHJlc2VudGluZzo6ICAgICAgICAgICAgICAgICAgIENvbnRyb2xsaW5nIHRoZSBQ cmVzZW50YXRpb24KKiBDb25maWd1cmluZzo6ICAgICAgICAgICAgICAgICAgR2xvYmFsIFNldHRp bmdzCiogRXh0ZW5kaW5nOjogICAgICAgICAgICAgICAgICAgIFJldXNpbmcgRHNsaWRlIENsYXNz ZXMKKiBIYWNraW5nOjogICAgICAgICAgICAgICAgICAgICAgSGlnaC1sZXZlbCBEZXNpZ24gU3Vt bWFyeQoqIENvbnRyaWJ1dGluZzo6ICAgICAgICAgICAgICAgICBHaXZlIG1lIGhhbWJ1cmdlcnMK KiBUaGFua3M6OiAgICAgICAgICAgICAgICAgICAgICAgQW5kIEFja25vd2xlZGdlbWVudHMKKiBQ cm9udW5jaWF0aW9uOjogICAgICAgICAgICAgICAgQnV0Y2hlciBpdCBSaWdodAoqIEluZGljZXM6 OgoKQGRldGFpbG1lbnUKLS0tIFRoZSBEZXRhaWxlZCBOb2RlIExpc3RpbmcgLS0tCgpJbnRyb2R1 Y3Rpb24KCiogRGVzaWduIEdvYWxzOjogICAgICAgICAgICAgICAgIFRoaW5ncyBIb3BlZnVsbHkg QWNoaWV2ZWQKKiBTdHJlbmd0aHM6OiAgICAgICAgICAgICAgICAgICAgV2hlbiBEc2xpZGUgaXMg UGVyZmVjdAoKR2xvc3NhcnkKCiogT3JnIE1vZGUgVGVybXM6OiAgICAgICAgICAgICAgIE9uZXMg WW91IE1pZ2h0IE5vdCBLbm93CgpDcmVhdGluZwoKKiBBY3Rpb25zOjogICAgICAgICAgICAgICAg ICAgICAgT3ZlcnZpZXcKKiBBZGRpbmcgQWN0aW9uczo6ICAgICAgICAgICAgICAgTWFraW5nIENv bnRlbnQgRG8gU3R1ZmYKKiBBY3Rpb24gQXJndW1lbnRzOjogICAgICAgICAgICAgVHdlYWtpbmcg QmVoYXZpb3IKKiBBbm5vdGF0aW5nIEVsZW1lbnRzOjogICAgICAgICAgVGVsbGluZyBBY3Rpb25z IFdoYXQgYW5kIFdoZXJlCiogQmFiZWwgU2NyaXB0aW5nOjogICAgICAgICAgICAgIEZ1bGx5IFBy b2dyYW1tYWJsZSBTdGVwcwoqIEhpZGluZyBNYXJrdXA6OiAgICAgICAgICAgICAgICBObyBNb3Jl IFVnbHkKKiBGaWx0ZXJpbmcgSGVhZGluZ3M6OiAgICAgICAgICAgSXQncyBOb3QgRG9uZSBZZXQK KiBIZWFkZXIgS2V5d29yZHM6OiAgICAgICAgICAgICAgVGl0bGUsIEF1dGhvciwgRW1haWwKKiBG aWxlIExvY2FsIFZhcmlhYmxlczo6ICAgICAgICAgRG9uJ3QgRm9yZ2V0IEZyZWUgTHVuY2gKCkJh YmVsIFNjcmlwdGluZwoKKiBTdGVwIENhbGxiYWNrczo6CgpIaWRpbmcgTWFya3VwCgoqIEhpZGlu ZyBUb2RvcyBhbmQgVGFnczo6CgpQcmVzZW50aW5nCgoqIFR3byBCdXR0b24gSW50ZXJmYWNlOjog ICAgICAgICBJdHMgQWxsIEZvcndhcmRzIGFuZCBCYWNrd2FyZHMKKiBDb250ZW50cyBJbnRlcmZh Y2U6OiAgICAgICAgICAgTmF2aWdhdGluZyBGYXN0ZXIKKiBOYXJyYXRpbmc6OiAgICAgICAgICAg ICAgICAgICAgQW5kIERlYnVnZ2luZyBMaXZlCiogQ3Vyc29yIFZpc2liaWxpdHk6OgoKQ29uZmln dXJpbmcKCiogQmluZGluZzo6CiogSG9va3M6OgoqIFN0ZWV6aW5nIE9yZzo6ICAgICAgICAgICAg ICAgICBNYWtpbmcgaXQgUHJldHR5CgpCaW5kaW5nCgoqIFNlY29uZGFyeSBDb21tYW5kcyDwn5qn OjoKCkhvb2tzCgoqIFBlci1TbGlkZSBBY3Rpb25zOjoKCkV4dGVuZGluZwoKKiBDcmVhdGluZyBB Y3Rpb25zOjogICAgICAgICAgICAgT3ZlcnZpZXcKKiBBIEN1c3RvbSBBY3Rpb246OiAgICAgICAg ICAgICAgRXhhbXBsZSBDbGFzcwoqIERlZmF1bHQgQ2xhc3Nlczo6ICAgICAgICAgICAgICBPdmVy cmlkaW5nIHRoZSBHdXRzCgpIYWNraW5nCgoqIE9iamVjdHMgJiBPd25lcnNoaXA6OgoqIFN0YXRl ZnVsIFNlcXVlbmNlOjoKKiBGbG93IENvbnRyb2w6OgoqIEluc3RhbnRpYXRpbmcgU2xpZGVzOjoK ClN0YXRlZnVsIFNlcXVlbmNlCgoqIEFjdGlvbnM6IEFjdGlvbnMgKDEpLiAKCkNvbnRyaWJ1dGlu ZwoKKiBXb3JrIEluIFByb2dyZXNzIPCfmqc6OgoKV29yayBJbiBQcm9ncmVzcyDwn5qnCgoqIFNs aWRlIEFjdGlvbiBQcmVjZWRlbmNlOjoKKiBTZWNvbmRhcnkgQ29tbWFuZHM6OgoqIEBjb2Rle2Rz bGlkZS1nb3RvfUBjb21tYXt9IHN0YXJ0aW5nIGZyb20gcG9pbnQ6OgoqIEFmZmlsaWF0ZWQgQnVm ZmVyczo6CiogTm9uLUdyYXBoaWMgRGlzcGxheTo6CiogSW1wcm9wZXIgTGV2ZWxzOjoKKiBDb3Vu dGluZyBTbGlkZXM6OgoqIE5vbi1PcmcgU2VxdWVuY2VzOjoKCkluZGljZXMKCiogQ29tbWFuZCBh bmQgRnVuY3Rpb24gaW5kZXg6OgoqIENvbmNlcHQgaW5kZXg6OgoqIFZhcmlhYmxlIGluZGV4OjoK CkBlbmQgZGV0YWlsbWVudQpAZW5kIG1lbnUKCkBub2RlIEludHJvZHVjdGlvbgpAY2hhcHRlciBJ bnRyb2R1Y3Rpb24KCkRzbGlkZSBpcyBkZXNpZ25lZCBmb3IgY29uZHVjdGluZyBwcmVzZW50YXRp b25zIGluIEVtYWNzLiAgQWJzdHJhY3RseUBjb21tYXt9IGEgcHJlc2VudGF0aW9uIGlzIGEgc2Ny aXB0ZWQgc2VxdWVuY2Ugb2YgY29udGVudC4gIE9yZyBtb2RlIGRvY3VtZW50cyBhcmUgdGhlIHBy aW1hcnkgbWVhbnMgb2YgZW5jb2RpbmcgdGhlc2Ugc2VxdWVuY2VzIGZvciBkc2xpZGUuCgpXaGF0 IGRzbGlkZSBwcmltYXJpbHkgYWRkcyB0byBFbWFjcyBhbmQgT3JnIE1vZGU6CgpAaXRlbWl6ZQpA aXRlbQpTaW1wbGlmaWVkIHVzZXIgaW50ZXJmYWNlIHN1aXRhYmxlIGZvciBhIHByZXNlbnRhdGlv biByZW1vdGUgY29udHJvbGxlcgpAaXRlbQpEYXRhIG1vZGVsIHRoYXQgYWRhcHRzIEVtYWNzIHRv IHRoaXMgaW50ZXJmYWNlCkBpdGVtCk1ldGhvZCBvZiBhdHRhY2hpbmcgcmV1c2FibGVAY29tbWF7 fSBjb25maWd1cmFibGUgcHJvZ3JhbW1lZCBiZWhhdmlvciB0byBvcmcgbW9kZSBjb250ZW50CkBp dGVtCkV4dGVuc2libGUgZnJhbWV3b3JrIGZvciBjcmVhdGluZyBjdXN0b20gcHJvZ3JhbW1lZCBi ZWhhdmlvcgpAaXRlbQpQcmVzZW50ZXIgdG9vbHMgc3VjaCBhcyB2aWV3aW5nIGhpZGRlbiBjb250 ZW50IGludmlzaWJsZSB0byB0aGUgYXVkaWVuY2UKQGVuZCBpdGVtaXplCgpAbWVudQoqIERlc2ln biBHb2Fsczo6ICAgICAgICAgICAgICAgICBUaGluZ3MgSG9wZWZ1bGx5IEFjaGlldmVkCiogU3Ry ZW5ndGhzOjogICAgICAgICAgICAgICAgICAgIFdoZW4gRHNsaWRlIGlzIFBlcmZlY3QKQGVuZCBt ZW51CgpAbm9kZSBEZXNpZ24gR29hbHMKQHNlY3Rpb24gRGVzaWduIEdvYWxzCgpHcmFudWxhciBj b25maWd1cmFiaWxpdHkgd2FzIHRoZSBmaXJzdCBnb2FsLiAgRHNsaWRlJ3MgcHJlZGVjZXNzb3JA Y29tbWF7fSBAY29kZXtvcmctdHJlZS1zbGlkZX1AY29tbWF7fSBjb3VsZCBvbmx5IGJlIGNvbmZp Z3VyZWQgYXQgdGhlIGxldmVsIG9mIHRoZSBlbnRpcmUgZG9jdW1lbnRAY29tbWF7fSB1c2luZyBj dXN0b21pemUgdmFyaWFibGVzLgoKUHJvZ3JhbW1hYmlsaXR5IHF1aWNrbHkgYmVjYW1lIHByaW1h cnkgbW90aXZhdGlvbiB0byBkZXZlbG9wIGRzbGlkZSBmdXJ0aGVyLiAgT3JnIGJhYmVsIGJsb2Nr cyBjYW4gYmUgdXNlZCBhcyBzdGVwcyBvZiBhIGRzbGlkZSBwcmVzZW50YXRpb24uICBCeSBzY3Jp cHRpbmcgRW1hY3MgdmlhIEVsaXNwIHdpdGhpbiBvcmcgYmFiZWwgYmxvY2tzQGNvbW1he30gYmVj YXVzZSBFbWFjcyBzaXRzIG9uIHRvcCBvZiBhbGwgeW91ciBvdGhlciBwcm9ncmFtbWluZyB0b29s cyBhbmQgc3ViLXByb2Nlc3Nlc0Bjb21tYXt9IHNvIGRvZXMgZHNsaWRlLiAgVGhlIGFjdGlvbiBz eXN0ZW0gaXMgYSBmcmFtZXdvcmsgZm9yIGF0dGFjaGluZyByZXVzYWJsZUBjb21tYXt9IGNvbmZp Z3VyYWJsZSBwcm9ncmFtbWVkIGJlaGF2aW9yIHRvIG11bHRpcGxlIGhlYWRpbmdzLgoKSGlnaCBw cm9kdWN0aXZpdHkgd2FzIGFub3RoZXIgZ29hbC4gIFdpdGggYSBkZWNlbnQgb3JnIGNvbmZpZ3Vy YXRpb25AY29tbWF7fSB1c2UgYmFzaWMgbWFya3VwIHRvIG9idGFpbiBhIGRlY2VudCBwcmVzZW50 YXRpb24uICBPcmcgbW9kZSdzIHByb3BlcnRpZXMgYW5kIGtleXdvcmRzIGFyZSB1c2VkIHRvIGF0 dGFjaCBhbmQgY29uZmlndXJlIHJldXNhYmxlIGJlaGF2aW9yIHRvIHNsaWRlcy4gIERzbGlkZSBy ZXNwZWN0cyBleHBvcnQgc2V0dGluZ3NAY29tbWF7fSBhbGxvd2luZyBjb250ZW50IHRvIHZhcnkg YmV0d2VlbiBwcmVzZW50YXRpb24gYW5kIGV4cG9ydC4gIFlvdSBjYW4gdXNlIHRoZSBwcmVzZW50 YXRpb24gb3JnIGRvY3VtZW50IGl0c2VsZiB0aGUgc2FtZSB3YXkgeW91IHVzZSBvdGhlciBvcmcg ZG9jdW1lbnRzQGNvbW1he30gdG8gc3RvcmUgYW5kIG9yZ2FuaXplIGluZm9ybWF0aW9uLgoKQG5v ZGUgU3RyZW5ndGhzCkBzZWN0aW9uIFN0cmVuZ3RocwoKRHNsaWRlIGlzIHBhcnRpY3VsYXJseSBn b29kIGZvciBwcmVzZW50YXRpb25zIHRoYXQgYXJlIGZvciBpbnRlcm5hbCB1c2Ugb3IgaW50ZW5k ZWQgZm9yIGNsb3NlZCBhdWRpZW5jZXNAY29tbWF7fSB3aGVyZSB0aGUgcG9saXNoIHRoYXQgd291 bGQgYmUgZGlyZWN0ZWQgYXQgZW5kIGNvbnN1bWVycyBpcyB1bm5lZWRlZCBhbmQgY291bGQgZXZl biBiZSBzZWVuIGFzIGFuIGluYXBwcm9wcmlhdGUgZXhwZW5zZSBvZiB0aW1lOgoKQGl0ZW1pemUK QGl0ZW0KVGVjaCBkZW1vcwpAaXRlbQpFYXJseSBzdGFnZSBzdGFydHVwIHBpdGNoZXMKQGl0ZW0K Q29uZHVjdGluZyB0ZWFtIG1lZXRpbmdzCkBlbmQgaXRlbWl6ZQoKQG5vZGUgR2xvc3NhcnkKQGNo YXB0ZXIgR2xvc3NhcnkKCkBpdGVtaXplCkBpdGVtCkBzYW1we0RlY2t9OiBhbiBvYmplY3QgdGhh dCBpcyB1c2VkIHRvIHJlbGF0ZSB0aGUgZGlzcGxheSBhbmQgYmFzZSBidWZmZXIgYW5kIGlzIHRo ZSByb290IG9mIGFsbCBzZXF1ZW5jZXMuICBJdCdzIGFub3RoZXIgd29yZCBmb3IgYGBwcmVzZW50 YXRpb24nJyBvciBQVEAuCkBpdGVtCkBzYW1we1NsaWRlfTogYW4gb2JqZWN0IHRoYXQgaW50ZXJw cmV0cyBhbiBvcmcgaGVhZGluZyB0byBoeWRyYXRlIGl0cyBhY3Rpb25zCkBpdGVtCkBzYW1we0Fj dGlvbn06IGFuIG9iamVjdCB0aGF0IHJlc3BvbmRzIHRvIEBjb2Rle2RzbGlkZS1kZWNrLWZvcndh cmR9IGFuZCBAY29kZXtkc2xpZGUtZGVjay1iYWNrd2FyZH0gY2FsbHMgYW5kIGltcGxlbWVudHMg bGlmZWN5Y2xlIG1ldGhvZHMgdG8gaW5pdGlhbGl6ZSBhbmQgY2xlYW4gdXAgc3RhdGUKQGl0ZW1p emUKQGl0ZW0KQHNhbXB7U2xpZGUgQWN0aW9ufTogYW4gYWN0aW9uIHN1YmNsYXNzIHRoYXQgaGFu ZGxlcyBpbml0aWFsIGRpc3BsYXkgb2YgdGhlIHNsaWRlIGFuZCBjcmVhdGlvbiBvZiBjaGlsZCBz bGlkZXMgZnJvbSBzdWItaGVhZGluZ3MuCkBpdGVtCkBzYW1we1NlY3Rpb24gQWN0aW9uc306IGFj dGlvbnMgdGhhdCB0eXBpY2FsbHkgY29udHJvbCB0aGUgZGlzcGxheSBhbmQgYmVoYXZpb3Igb2Yg YSBoZWFkaW5nJ3Mgc2VjdGlvbkBjb21tYXt9IHRoZSByZWdpb24gYmV0d2VlbiB0aGUgaGVhZGxp bmUgYW5kIGNoaWxkIGhlYWRpbmdzLgpAZW5kIGl0ZW1pemUKQGl0ZW0KQHNhbXB7U3RlcH06IGEg c2luZ2xlIGNhbGwgdG8gQGNvZGV7ZHNsaWRlLWRlY2stZm93YXJkfSBvciBAY29kZXtkc2xpZGUt ZGVjay1iYWNrd2FyZH1AY29tbWF7fSB1c3VhbGx5IGRlbGVnYXRlZCBkb3duIHRvIEBjb2Rle2Rz bGlkZS1mb3J3YXJkfSBhbmQgQGNvZGV7ZHNsaWRlLWJhY2t3YXJkfSBtZXRob2RzCkBpdGVtCkBz YW1we0NvbnRlbnRzfTogQSB2aWV3IG9mIHRoZSBmb2xkZWQgdG9wLWxldmVsIGhlYWRpbmdzIHRo YXQgaXMgdXNlZCBmb3IgcXVpY2tseSBuYXZpZ2F0aW5nIGJldHdlZW4gaGVhZGluZ3MgZHVyaW5n IGEgcHJlc2VudGF0aW9uLgpAaXRlbQpAc2FtcHtTbGlkZSBCdWZmZXJ9OiB0aGUgc2xpZGVzIGFy ZSBzaG93biBpbiBhbiBpbmRpcmVjdCBidWZmZXIgdGhhdCBpcyBjbG9uZWQgZnJvbSB5b3VyIG9y ZyBkb2N1bWVudCBidWZmZXIuICBUaGUgc291cmNlIGlzIGNhbGxlZCB0aGUgQHN0cm9uZ3tiYXNl IGJ1ZmZlcn0uICBDaGVjayBmb3IgdGhlIEBzYW1we2RlY2s6IG15LXByZXNlbnRhdGlvbi5vcmd9 IGJ1ZmZlciBuYW1lLgpAaXRlbWl6ZQpAaXRlbQpJbmRpcmVjdCBidWZmZXIgYW5kIEBzYW1we3Ns aWRlLWJ1ZmZlcn0gYXJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5CkBpdGVtCkJhc2UgYnVmZmVyIG9y IEBzYW1we2Jhc2UtYnVmZmVyfSBpcyB1c2VkIHByZXR0eSBleGNsdXNpdmVseQpAZW5kIGl0ZW1p emUKQGl0ZW0KQHNhbXB7U3RhdGVmdWwgU2VxdWVuY2V9OiBAY29kZXtkc2xpZGUtc3RhdGVmdWwt c2VxdWVuY2V9IGlzIGFuIGludGVyZmFjZSB0aGF0IG90aGVyIGNsYXNzZXMgaW1wbGVtZW50IHdo ZW4gdGhleSB3aWxsIHJlY2VpdmUgZGVsZWdhdGVkIGNvbW1hbmRzIGZyb20gdGhlIHVzZXIuCkBl bmQgaXRlbWl6ZQoKQG1lbnUKKiBPcmcgTW9kZSBUZXJtczo6ICAgICAgICAgICAgICAgT25lcyBZ b3UgTWlnaHQgTm90IEtub3cKQGVuZCBtZW51CgpAbm9kZSBPcmcgTW9kZSBUZXJtcwpAc2VjdGlv biBPcmcgTW9kZSBUZXJtcwoKU2VsZWN0IG9yZyBtb2RlIHRlcm1zIG1vcmUgZnJlcXVlbnRseSB1 c2VkIGJ5IGRzbGlkZS4gIERvbid0IG1pc3MgQHJlZntPcmcgU3ludGF4LE9yZyBTeW50YXggKG9y ZyksLG9yZyx9LgoKQGl0ZW1pemUKQGl0ZW0KQHNhbXB7RWxlbWVudH06IG9yZyBkb2N1bWVudHMg YXJlIHBhcnNlZCBpbnRvIGVsZW1lbnRzIGFuZCBvYmplY3RzLiAgSGVhZGluZ3NAY29tbWF7fSBw bGFpbiBsaXN0c0Bjb21tYXt9IGFuZCBibG9ja3MgYXJlIGV4YW1wbGVzIG9mIGVsZW1lbnRzLiAg U2VlIHRoZSBAdXJlZntodHRwczovL29yZ21vZGUub3JnL3dvcmcvZGV2L29yZy1lbGVtZW50LWFw aS5odG1sLCBvcmcgZWxlbWVudCBhcGl9IGRvY3VtZW50YXRpb24uICBEc2xpZGUgbWFrZXMgaGVh dnkgdXNlIG9mIG9yZydzIGVsZW1lbnQgcGFyc2VyIHRvIGltcGxlbWVudCBpdHMgZmVhdHVyZXMu CkBpdGVtCkBzYW1we0tleXdvcmR9OiBBIHNpbmdsZSBAc2FtcHsjK2tleXdvcmRfc3R5bGU6fSBs aW5lIHVzZWQgdG8gc3BlY2lmeSBzb21lIG9wdGlvbgpAaXRlbQpAc2FtcHtBZmZpbGF0ZWQga2V5 d29yZH06IEEgQHNhbXB7IythdHRyX2tleXdvcmRfc3R5bGU6fSBsaW5lIHRoYXQgZGlyZWN0bHkg cHJlY2VlZHMgYW4gZWxlbWVudCBhbmQgaXMgdXNlZCB0byBhZGQgbWV0YWRhdGEgdG8gYXJiaXRy YXJ5IG9yZyBlbGVtZW50cwpAaXRlbQpAc2FtcHtQcm9wZXJ0eX06IE1ldGEgZGF0YSBhdHRhY2hl ZCB0byBoZWFkaW5ncy4gU2VlIEByZWZ7UHJvcGVydHkgU3ludGF4LFByb3BlcnR5IFN5bnRheCAo b3JnKSwsb3JnLH0KQGVuZCBpdGVtaXplCgpAbm9kZSBDcmVhdGluZwpAY2hhcHRlciBDcmVhdGlu ZwoKTWFraW5nIGFuIG9yZyBkb2N1bWVudCBpbnRvIGEgcHJlc2VudGF0aW9uLgoKQG1lbnUKKiBB Y3Rpb25zOjogICAgICAgICAgICAgICAgICAgICAgT3ZlcnZpZXcKKiBBZGRpbmcgQWN0aW9uczo6 ICAgICAgICAgICAgICAgTWFraW5nIENvbnRlbnQgRG8gU3R1ZmYKKiBBY3Rpb24gQXJndW1lbnRz OjogICAgICAgICAgICAgVHdlYWtpbmcgQmVoYXZpb3IKKiBBbm5vdGF0aW5nIEVsZW1lbnRzOjog ICAgICAgICAgVGVsbGluZyBBY3Rpb25zIFdoYXQgYW5kIFdoZXJlCiogQmFiZWwgU2NyaXB0aW5n OjogICAgICAgICAgICAgIEZ1bGx5IFByb2dyYW1tYWJsZSBTdGVwcwoqIEhpZGluZyBNYXJrdXA6 OiAgICAgICAgICAgICAgICBObyBNb3JlIFVnbHkKKiBGaWx0ZXJpbmcgSGVhZGluZ3M6OiAgICAg ICAgICAgSXQncyBOb3QgRG9uZSBZZXQKKiBIZWFkZXIgS2V5d29yZHM6OiAgICAgICAgICAgICAg VGl0bGUsIEF1dGhvciwgRW1haWwKKiBGaWxlIExvY2FsIFZhcmlhYmxlczo6ICAgICAgICAgRG9u J3QgRm9yZ2V0IEZyZWUgTHVuY2gKQGVuZCBtZW51CgpAbm9kZSBBY3Rpb25zCkBzZWN0aW9uIEFj dGlvbnMKCkJ5IGRlZmF1bHRAY29tbWF7fSB5b3UganVzdCBnZXQgb25lIHNsaWRlIHBlciBoZWFk aW5nQGNvbW1he30gYSBoZWFkZXJAY29tbWF7fSBhbmQgc29tZSBhbmltYXRpb24uICBUaGlzIGlz IG5vdCB2ZXJ5IGV4Y2l0aW5nLiAgWW91IG5lZWQgdG8gYWRkIGFjdGlvbnMgdG8gc2xpZGVzIHRv IGNvbnN1bWUgdGhlaXIgc2VjdGlvbiBjb250ZW50IGluIGEgbW9yZSBlbmdhZ2luZyB3YXkuCgpU aGVyZSBhcmUgdHdvIGtpbmRzIG9mIGFjdGlvbnM6CkBpdGVtaXplCkBpdGVtCkBzYW1we1NsaWRl IGFjdGlvbnN9OiBtb3N0bHkgcmVzcG9uc2libGUgZm9yIG5hcnJvd2luZyB0byBhIHNsaWRlIGFu ZCB0aGVuIGhhbmRsaW5nIHRoZSBjaGlsZCBoZWFkaW5nc0Bjb21tYXt9IGVpdGhlciBpbmxpbmUg b3IgYXMgc2VwYXJhdGUgc2xpZGVzCkBpdGVtCkBzYW1we1NlY3Rpb24gYWN0aW9uc306IHdvcmsg b24gdGhlIGNvbnRlbnQgaW4gdGhlIGhlYWRpbmcncyBzZWN0aW9uLgpAZW5kIGl0ZW1pemUKClRv IGJyb3dzZSBhbGwgYWN0aW9uc0Bjb21tYXt9IGJlY2F1c2UgdGhleSBhcmUgYWxsIEVJRUlPIGNs YXNzZXNAY29tbWF7fSB5b3UgY2FuIHVzZSBAY29kZXtlaWVpby1icm93c2V9IGFuZCBzZWUgdGhl IGFjdGlvbnMgZGVzY2VuZCBmcm9tIEBjb2Rle2RzbGlkZS1hY3Rpb259LgoKQGV4YW1wbGUKKy0t ZHNsaWRlLXN0YXRlZnVsLXNlcXVlbmNlCiAgICAgKy0tZHNsaWRlLWFjdGlvbgogICAgICAgICAg Ky0tZHNsaWRlLWFjdGlvbi1wcm9wZXJ0aXplCiAgICAgICAgICArLS1kc2xpZGUtYWN0aW9uLWlt YWdlCiAgICAgICAgICArLS1kc2xpZGUtYWN0aW9uLWJhYmVsCiAgICAgICAgICArLS1kc2xpZGUt YWN0aW9uLWl0ZW0tcmV2ZWFsCiAgICAgICAgICArLS1kc2xpZGUtYWN0aW9uLWhpZGUtbWFya3Vw CiAgICAgICAgICArLS1kc2xpZGUtc2xpZGUtYWN0aW9uCiAgICAgICAgICAgICAgICstLWRzbGlk ZS1zbGlkZS1hY3Rpb24tZXZlcnktY2hpbGQKICAgICAgICAgICAgICAgKy0tZHNsaWRlLXNsaWRl LWFjdGlvbi1pbmxpbmUKICAgICAgICAgICAgICAgKy0tZHNsaWRlLXNsaWRlLWFjdGlvbi1jaGls ZAogICAgICAgICAgICAgICArLS1kc2xpZGUtc2xpZGUtYWN0aW9uLWZsYXQKQGVuZCBleGFtcGxl CgpAbm9kZSBBZGRpbmcgQWN0aW9ucwpAc2VjdGlvbiBBZGRpbmcgQWN0aW9ucwoKQHZpbmRleCBk c2xpZGUtZGVmYXVsdC1hY3Rpb25zCkJ5IGRlZmF1bHRAY29tbWF7fSBldmVyeSBzbGlkZSBoYXMg dHdvIGFjdGlvbnNAY29tbWF7fSBjb25maWd1cmFibGUgaW4gQGNvZGV7ZHNsaWRlLWRlZmF1bHQt YWN0aW9uc306CkBpdGVtaXplCkBpdGVtCkBjb2Rle2RzbGlkZS1hY3Rpb24tcHJvcGVydGl6ZX0g Zm9yIGFkZGluZyB0ZXh0IHByb3BlcnRpZXMgdG8gYXJiaXRyYXJ5IGVsZW1lbnRzCkBpdGVtCkBj b2Rle2RzbGlkZS1hY3Rpb24taGlkZS1tYXJrdXB9IHRvIGhpZGUga2V5d29yZHNAY29tbWF7fSB0 b2RvIHN0YXRlc0Bjb21tYXt9IGFuZCB0YWdzQGNvbW1he30gYWxsb3dpbmcgeW91IHRvIGhhdmUg dGhlc2UgdGhpbmdzIGluIHlvdXIgc291cmNlIHdpdGhvdXQgdGhlbSBjbHV0dGVyaW5nIHRoZSBw cmVzZW50YXRpb24KQGVuZCBpdGVtaXplCgpBY3Rpb25zIG11c3QgYmUgYWRkZWQgdG8gYSBzbGlk ZSB1c2luZyB0aGUgc2xpZGUncyBwcm9wZXJ0eSBkcmF3ZXIuCgpAaXRlbWl6ZQpAaXRlbQpAc2Ft cHtEU0xJREVfU0xJREVfQUNUSU9OfTogVXN1YWxseSBuYXJyb3dzIHRvIHRoZSBzbGlkZSBhbmQg Y3JlYXRlcyBjaGlsZHJlbiBmcm9tIGNoaWxkIGhlYWRpbmdzLiAgTGlmZWN5Y2xlIGVuY2xvc2Vz IHRoZSBzZWN0aW9uIGFjdGlvbnMuCkBpdGVtCkBzYW1we0RTTElERV9BQ1RJT05TOn0gTW9zdCBj b21tb25seSBjdXN0b21pemVkLiAgWW91IGNhbiBsaXN0IG11bHRpcGxlIGFjdGlvbnMuICBFYWNo IG9uZSB3aWxsIHN0ZXAgdGhyb3VnaCBpdHMgZm9yd2FyZCBhbmQgYmFja3dhcmQgc3RlcHMuCkBl bmQgaXRlbWl6ZQoKQGV4YW1wbGUKKiBGdWxsIFNjcmVlbiBJbWFnZXMKOlBST1BFUlRJRVM6CjpE U0xJREVfQUNUSU9OUzogZHNsaWRlLWFjdGlvbi1pbWFnZXMKOkVORDoKIythdHRyX2h0bWw6IDp3 aWR0aCA1MCUKW1suL2ltYWdlcy9lbWFjc2VuNC5qcGVnXV0gW1suL2ltYWdlcy9iZWZvcmUtZ29v Z2xlMy5qcGVnXV0KQGVuZCBleGFtcGxlCgpAbm9kZSBBY3Rpb24gQXJndW1lbnRzCkBzZWN0aW9u IEFjdGlvbiBBcmd1bWVudHMKCk1hbnkgYWN0aW9ucyB1bmRlcnN0YW5kIGFyZ3VtZW50c0Bjb21t YXt9IGFsbG93aW5nIHR1bmluZyBvZiBzaW1pbGFyIGJlaGF2aW9ycyBmcm9tIHRoZSBzYW1lIGNs YXNzLgoKVG8gdmlldyBhbiBhY3Rpb24ncyBhcmd1bWVudHNAY29tbWF7fSBjYWxsIEBjb2Rle2Rl c2NyaWJlLXN5bWJvbH0gb24gaXQuICBBbnkgc2xvdCBkZWZpbml0aW9uIHVzdWFsbHkgaGFzIHRo ZSBzYW1lIEBzYW1wezppbml0YXJnfSBhbmQgd2lsbCBiZSB1bmRlcnN0b29kIHdoZW4gYWRkZWQg YXMgYSBwbGlzdC1zdHlsZSBhcmd1bWVudC4KCkNvbmZpZ3VyaW5nIHRoZSBzbG90IGlzIGRvbmUg YnkgYWRkaW5nIHBsaXN0LXN0eWxlIHByb3BlcnRpZXMgYWZ0ZXIgdGhlIGNsYXNzIG5hbWU6CgpA ZXhhbXBsZQo6UFJPUEVSVElFUzoKOkRTTElERV9BQ1RJT05TOiBkc2xpZGUtYWN0aW9uLWl0ZW0t cmV2ZWFsIDppbmxpbmUgdAo6RU5EOgpAZW5kIGV4YW1wbGUKCllvdSBjYW4gYWxzbyB1c2UgYGBw cm9wZXJ0eSsnJyBzeW50YXggdG8gYWRkIHRvIGEgcHJvcGVydHlAY29tbWF7fSBhbmQgdGhlc2Ug YWNjZXB0IHBsaXN0IGFyZ3VtZW50cyB0b286CgpAZXhhbXBsZQo6UFJPUEVSVElFUzoKOkRTTElE RV9BQ1RJT05TOiBkc2xpZGUtYWN0aW9uLWJhYmVsCjpEU0xJREVfQUNUSU9OUys6IGRzbGlkZS1h Y3Rpb24taW1hZ2VzIDpmdWxsLWZyYW1lIHQKOkVORDoKQGVuZCBleGFtcGxlCgrwn5qnIFRoZSBj dXJyZW50IHBsaXN0IHJlYWQgaW1wbGVtZW50YXRpb24gc3BsaXRzIHRoZSBzdHJpbmcgcmF0aGVy IHRoYW4gdXNpbmcgQGNvZGV7cmVhZC1zdHJpbmd9IGFuZCBpcyB0aGVyZWZvcmUgbm90IHNtYXJ0 IGVub3VnaCB0byBwYXJzZSBsaXN0cyBhcyBhcmd1bWVudHMuICBIb3dldmVyIEBjb2Rle2RzbGlk ZS1hY3Rpb24tcHJvcGVydGl6ZX0gZGVtb25zdHJhdGVzIGRvaW5nIHRoaXMgY29ycmVjdGx5IGFu ZCBzaG93cyB0aGF0IGl0IHdpbGwgYmUgcG9zc2libGUgaWYgbmVlZGVkLgoKQG5vZGUgQW5ub3Rh dGluZyBFbGVtZW50cwpAc2VjdGlvbiBBbm5vdGF0aW5nIEVsZW1lbnRzCgpTb21lIGFjdGlvbnNA Y29tbWF7fSBzdWNoIGFzIEBjb2Rle2RzbGlkZS1hY3Rpb24tcHJvcGVydGl6ZX1AY29tbWF7fSBj YW4ndCBkZWNpZGUgd2hpY2ggZWxlbWVudHMgdG8gb3BlcmF0ZSBvbiBvciB3aGF0IHRvIGRvIHdp dGggdGhlIGVsZW1lbnQuICBZb3UgY2FuIGFkZCBzb21lIG1ldGEgZGF0YSB0byBhbiBlbGVtZW50 IHVzaW5nIGFuIEBzdHJvbmd7YWZmaWxpYXRlZCBrZXl3b3JkfS4KCuKaoO+4jyBJZiB5b3UgYXJl IGV4dGVuZGluZyBhbiBhY3Rpb24gYW5kIHdhbnQgdG8gY3JlYXRlIHlvdXIgb3duIGFmZmlsaWF0 ZWQga2V5d29yZEBjb21tYXt9IHRoZXkgIG11c3Qgc3RhcnQgd2l0aCBAc2FtcHthdHRyfSBvciBl bHNlIHRoZSBwYXJzZXIgd2lsbCBub3QgY29uc2lkZXIgdGhlbSBhZmZpbGlhdGVkIQoKQGV4YW1w bGUKKiBGYW5jeSBUZXh0CjpQUk9QRVJUSUVTOgo6RFNMSURFX0FDVElPTlM6IGRzbGlkZS1hY3Rp b24tcHJvcGVydGl6ZQo6RU5EOgpBZGQgdGV4dCBwcm9wZXJ0aWVzIHRvIGFuIGVsZW1lbnQgdXNp bmcgdGhlID1hdHRyX2RzbGlkZV9wcm9wZXJ0aXplPSBhZmZpbGlhdGVkIGtleXdvcmQuICBObyBx dW90aW5nIGlzIHJlcXVpcmVkLiAgTGlzdHMgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBzdWNoLgoK IythdHRyX2RzbGlkZV9wcm9wZXJ0aXplOiBmYWNlICg6YmFja2dyb3VuZCAiI2RkZGRmZiIgOmZv cmVncm91bmQgIiMwMDAwMDAiIDp3ZWlnaHQgYm9sZCA6aGVpZ2h0IDIuMCkKVGhpcyBpcyBzb21l IGZhbmN5IHRleHQKQGVuZCBleGFtcGxlCgpAbm9kZSBCYWJlbCBTY3JpcHRpbmcKQHNlY3Rpb24g QmFiZWwgU2NyaXB0aW5nCgpAZmluZGV4IGRzbGlkZS1hY3Rpb24tYmFiZWwKQGNpbmRleCBzY3Jp cHRpbmcgYmFiZWwgc3RlcHMKWW91IGNhbiB3cml0ZSBjdXN0b20gc2NyaXB0cyBpbnRvIHlvdXIg cHJlc2VudGF0aW9uIGFzIE9yZyBCYWJlbCBibG9ja3MuICBUaGVzZSBjYW4gYmUgZXhlY3V0ZWQg d2l0aCB0aGUgQGNvZGV7ZHNsaWRlLWFjdGlvbi1iYWJlbH0gYWN0aW9uLgoKQnkgZGVmYXVsdCBi bG9ja3Mgb25seSBleGVjdXRlIGdvaW5nIGZvcndhcmRAY29tbWF7fSBvbmUgYmxvY2sgcGVyIHN0 ZXAuICBZb3UgbmVlZCB0byBsYWJlbCB5b3VyIGJsb2NrcyB3aXRoIGxpZmVjeWNsZSBtZXRob2Rz IGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gZ28gZm9yd2FyZHMgYW5kIGJhY2t3YXJkcyBvciBl eGVjdXRlIHRoZW0gYXQgdGhlIGJlZ2lubmluZyBvciBlbmQgb2YgYSBzbGlkZS4gIFNlZSB0aGUg QGNvZGV7ZHNsaWRlLWFjdGlvbi1iYWJlbH0gY2xhc3MgYW5kIGV4YW1wbGVzIGluIEB1cmVmey4v dGVzdC9kZW1vLm9yZywgLi90ZXN0L2RlbW8ub3JnfS4KClRoZSBAc2FtcHsjK2F0dHJfZHNsaWRl On0gYWZmaWxpYXRlZCBrZXl3b3JkIGlzIHVzZWQgdG8gY29uZmlndXJlIHdoaWNoIG1ldGhvZHMg d2lsbCBydW4gdGhlIGJsb2NrLiAgQmxvY2sgbGFiZWxzIHRoYXQgYXJlIHVuZGVyc3Rvb2Q6CgpA aXRlbWl6ZQpAaXRlbQpAc2FtcHtiZWdpbn0gYW5kIEBzYW1we2VuZH0gYXJlIHJ1biB3aGVuIHRo ZSBzbGlkZSBpcyBpbnN0YW50aWF0ZWRAY29tbWF7fSBnb2luZyBmb3J3YXJkIGFuZCBiYWNrd2Fy ZCByZXNwZWN0aXZlbHkuICBZb3UgY2FuIGhhdmUgc2V2ZXJhbCBibG9ja3Mgd2l0aCB0aGVzZSBt ZXRob2RzQGNvbW1he30gYW5kIHRoZXkgd2lsbCBiZSBydW4gZnJvbSBAc3Ryb25ne3RvcC10by1i b3R0b219IGFsd2F5c0Bjb21tYXt9IG1ha2luZyBpdCBlYXNpZXIgdG8gcmUtdXNlIGNvZGUgdXN1 YWxseS4KCkBpdGVtCkBzYW1we2ZpbmFsfSBpcyBvbmx5IGNhbGxlZCB3aGVuIG5vIHByb2dyZXNz IGNhbiBiZSBtYWRlIG9yIGlmIHRoZSBwcmVzZW50YXRpb24gaXMgc3RvcHBlZC4KCkBpdGVtCkBz YW1we2ZvcndhcmR9IGFuZCBAc2FtcHtiYWNrd2FyZH0gYXJlIHNlbGYtZXhwbGFuYXRvcnkuICBQ b3NpdGlvbiB5b3VyIEBzYW1we2JhY2t3YXJkfSBibG9ja3MgQHN0cm9uZ3thYm92ZX0gYW55IGJs b2NrIHRoYXQgdGhleSB1bmRvCgpAaXRlbQpAc2FtcHtib3RofSBydW5zIGVpdGhlciBkaXJlY3Rp b24uICBJdCB3aWxsIG5vdCByZXBlYXQgaW4gcGxhY2Ugd2hlbiByZXZlcnNpbmcuICBVc2Ugc2Vw ZXJhdGUgQHNhbXB7Zm9yd2FyZH0gYW5kIEBzYW1we2JhY2t3YXJkfSBibG9ja3MgZm9yIHRoYXQg 8J+SoQpAZW5kIGl0ZW1pemUKClRoZSBiYWJlbCBhY3Rpb24gYWxzbyB1bmRlcnN0YW5kcyByZWd1 bGFyIGJhYmVsIG9wdGlvbnMgc3VjaCBhcyBAc2FtcHs6ZXhwb3J0c30gYW5kIEBzYW1wezpyZXN1 bHRzfS4gIEV4cG9ydHMgbm9uZSB3aWxsIG1ha2UgdGhlIGJsb2NrIGludmlzaWJsZS4gIFJlc3Vs dHMgY29udHJvbHMgd2hldGhlciByZXN1bHRzIHdpbGwgYmUgcHJpbnRlZCBpbnRvIHRoZSBidWZm ZXIgb3Igbm90LgoKQG1lbnUKKiBTdGVwIENhbGxiYWNrczo6CkBlbmQgbWVudQoKQG5vZGUgU3Rl cCBDYWxsYmFja3MKQHN1YnNlY3Rpb24gU3RlcCBDYWxsYmFja3MKCkBmaW5kZXggZHNsaWRlLXB1 c2gtc3RlcApAY2luZGV4IHB1c2hpbmcgc3RlcHMKU2VlIEBjb2Rle2RzbGlkZS1wdXNoLXN0ZXB9 IGZvciBpbnNlcnRpbmcgYXJiaXRyYXJ5IGNhbGxiYWNrcyB0aGF0IGNhbiBmdW5jdGlvbiBhcyBz dGVwcy4gIFVubGVzcyB5b3VyIGFjdGlvbiBwZXJmb3JtcyBzdGF0ZSB0cmFja2luZyB0byBkZWNp ZGUgd2hlbiB0byBjb25zdW1lIEBjb2Rle2RzbGlkZS1kZWNrLWZvcndhcmR9IGFuZCBAY29kZXtk c2xpZGUtZGVjay1iYWNrd2FyZH0gaXRzZWxmQGNvbW1he30gYSBjYWxsYmFjayBtYXkgYmUgZWFz aWVyLiAgVXNpbmcgQGNvZGV7ZHNsaWRlLXB1c2gtc3RlcH0gaXMgYWxzbyBvbmUgd2F5IHRvIG9w dGlvbmFsbHkgYWRkIGEgc3RlcCBjYWxsYmFjayBmcm9tIGEgYmFiZWwgYmxvY2suCgpAbm9kZSBI aWRpbmcgTWFya3VwCkBzZWN0aW9uIEhpZGluZyBNYXJrdXAKCkBmaW5kZXggZHNsaWRlLWFjdGlv bi1oaWRlLW1hcmt1cApAdmluZGV4IGRzbGlkZS1oaWRlLW1hcmt1cC10eXBlcwpEc2xpZGUgdXNl cyBhIGxvdCBvZiBtYXJrdXAgdGhhdCB3b3VsZCBub3QgbG9vayBnb29kIGluIGEgcHJlc2VudGF0 aW9uLiAgSXQgYWxzbyBmaWx0ZXJzIGl0IGJ5IGRlZmF1bHQgdXNpbmcgQGNvZGV7ZHNsaWRlLWFj dGlvbi1oaWRlLW1hcmt1cH0uICBZb3UgY2FuIGFkanVzdCB0aGUgdHlwZXMgdXNpbmcgQGNvZGV7 ZHNsaWRlLWhpZGUtbWFya3VwLXR5cGVzfQoKQG1lbnUKKiBIaWRpbmcgVG9kb3MgYW5kIFRhZ3M6 OgpAZW5kIG1lbnUKCkBub2RlIEhpZGluZyBUb2RvcyBhbmQgVGFncwpAc3Vic2VjdGlvbiBIaWRp bmcgVG9kb3MgYW5kIFRhZ3MKCkB2aW5kZXggZHNsaWRlLWhpZGUtdG9kbwpAdmluZGV4IGRzbGlk ZS1oaWRlLXRhZ3MKQGNvZGV7ZHNsaWRlLWFjdGlvbi1oaWRlLW1hcmt1cH0gd2lsbCBhbHNvIGhp ZGUgdG9kb3MgYW5kIHRhZ3MuICBZb3UgY2FuIG1vZGlmaXkgdGhpcyB3aXRoIEBjb2Rle2RzbGlk ZS1oaWRlLXRvZG99IGFuZCBAY29kZXtkc2xpZGUtaGlkZS10YWdzfS4KCkBub2RlIEZpbHRlcmlu ZyBIZWFkaW5ncwpAc2VjdGlvbiBGaWx0ZXJpbmcgSGVhZGluZ3MKCkBjaW5kZXggY29tbWVudGVk IGhlYWRpbmdzCkBpdGVtaXplCkBpdGVtCkFueSBoZWFkaW5nIHdpdGggQHNhbXB7Q09NTUVOVH0g ZGlyZWN0bHkgYWZ0ZXIgdGhlIHN0YXJzIHdpbGwgYmUgc2tpcHBlZApAaXRlbQpBbnkgaGVhZGlu ZyB3aXRoIHRoZSBAc2FtcHs6bm9zbGlkZTp9IG9yIEBzYW1wezpub2V4cG9ydDp9IHRhZ3Mgd2ls bCBiZSBza2lwcGVkCkBlbmQgaXRlbWl6ZQoKVXNlIHRoaXMgd2hlbiB5b3VyIGhlYWRpbmdzIGFy ZSB3b3JrLWluLXByb2dyZXNzIGFuZCB5b3UgcnVuIG91dCBvZiB0aW1lIG9uIEZyaWRheSBiZWZv cmUgdGhlIGZlYXR1cmUgZGVtbyBtZWV0aW5nLiAgSGF2ZSBzb21lIGNvbnRlbnQgdGhhdCBpcyB1 c2VkIG9ubHkgaW4gc29tZSBleHBvcnRzPyAgVXNlIEBzYW1wezpub3NsaWRlOn0uCgpAbm9kZSBI ZWFkZXIgS2V5d29yZHMKQHNlY3Rpb24gSGVhZGVyIEtleXdvcmRzCgpAdmluZGV4IGRzbGlkZS1o ZWFkZXIKSWYgQGNvZGV7ZHNsaWRlLWhlYWRlcn0gaXMgY29uZmlndXJlZEBjb21tYXt9IHRoZSBr ZXl3b3JkcyBmb3IgdGhlIGRvY3VtZW50IHRpdGxlQGNvbW1he30gZW1haWxAY29tbWF7fSBhbmQg YXV0aG9yIGV0YyB3aWxsIGJlIHVzZWQgdG8gZ2VuZXJhdGUgYW4gb2theSBoZWFkZXIuCgpAZXhh bXBsZQojK0Bjb21tYXt9dGl0bGU6ICAgICAgICBEb21haW4gU3BlY2lmaWMgc0xJREVzCiMrYXV0 aG9yOiAgICAgICAgUG9zaXRyb24KIytlbWFpbDogICAgICAgIGNvbnRhY3RAQHBvc2l0cm9uLnNv bHV0aW9ucwpAZW5kIGV4YW1wbGUKCkBub2RlIEZpbGUgTG9jYWwgVmFyaWFibGVzCkBzZWN0aW9u IEZpbGUgTG9jYWwgVmFyaWFibGVzCgpEb24ndCBmb3JnZXQgdGhhdCBpZiB5b3UgbmVlZCBhIGN1 c3RvbWl6ZSB2YXJpYWJsZSBvbmx5IHNldCBpbiBhIHBhcnRpY3VsYXIgcHJlc2VudGF0aW9uQGNv bW1he30geW91IGNhbiB1c2UgZmlsZSBsb2NhbCB2YXJpYWJsZXMuICBOb3QgZXZlcnkgc2V0dGlu ZyBuZWVkcyBhIGtleXdvcmQgb3IgYmFiZWwgYmxvY2sgaW50ZWdyYXRpb24uCgpAZXhhbXBsZQoj IExvY2FsIFZhcmlhYmxlczoKIyBkc2xpZGUtaGVhZGVyOiBuaWwKIyBFbmQ6CkBlbmQgZXhhbXBs ZQoKQG5vZGUgUHJlc2VudGluZwpAY2hhcHRlciBQcmVzZW50aW5nCgpIb3cgdG8gY29udHJvbCBh bmQgdmlldyB5b3VyIHByZXNlbnRhdGlvbi4KCkBtZW51CiogVHdvIEJ1dHRvbiBJbnRlcmZhY2U6 OiAgICAgICAgIEl0cyBBbGwgRm9yd2FyZHMgYW5kIEJhY2t3YXJkcwoqIENvbnRlbnRzIEludGVy ZmFjZTo6ICAgICAgICAgICBOYXZpZ2F0aW5nIEZhc3RlcgoqIE5hcnJhdGluZzo6ICAgICAgICAg ICAgICAgICAgICBBbmQgRGVidWdnaW5nIExpdmUKKiBDdXJzb3IgVmlzaWJpbGl0eTo6CkBlbmQg bWVudQoKQG5vZGUgVHdvIEJ1dHRvbiBJbnRlcmZhY2UKQHNlY3Rpb24gVHdvIEJ1dHRvbiBJbnRl cmZhY2UKClByZXNlbnRhdGlvbnMgdGVuZCB0byBiZSBvcmdhbml6ZWQgaW50byBhIHNjcmlwdGVk IGxpbmVhciBzZXF1ZW5jZS4gIFdlIHdhbnQgdG8gY29udHJvbCB0aGUgZW50aXJlIHByZXNlbnRh dGlvbiBzZXF1ZW5jZSBtb3N0bHkgd2l0aCB0d28gYnV0dG9uc0Bjb21tYXt9IGZvcndhcmRzIGFu ZCBiYWNrd2FyZHMuCgpUaGUgY29udHJvbGxlcnMgZm9yIHByZXNlbnRpbmcgdXN1YWxseSBoYXZl IHZlcnkgZmV3IGJ1dHRvbnMuICBEc2xpZGUgd2FzIGRlc2lnbmVkIHdpdGggdGhpcyB1c2FnZSBw YXR0ZXJuIGluIG1pbmQgYW5kIGNhbiBtb3N0bHkgYmUgY29udHJvbGxlZCBieSB0d28gY29tbWFu ZHMuCgpAZmluZGV4IGRzbGlkZS1kZWNrLWZvcndhcmQKQGl0ZW1pemUKQGl0ZW0KQGNvZGV7ZHNs aWRlLWRlY2stZm9yd2FyZH0KQGVuZCBpdGVtaXplCkBmaW5kZXggZHNsaWRlLWRlY2stYmFja3dh cmQKQGl0ZW1pemUKQGl0ZW0KQGNvZGV7ZHNsaWRlLWRlY2stYmFja3dhcmR9CkBlbmQgaXRlbWl6 ZQoKQGZpbmRleCBkc2xpZGUtZGVjay1zdGFydApNYW55IGNvbnRyb2xsZXJzIGFsc28gaGF2ZSBh IGBgcGxheScnIGJ1dHRvbiBvciBzaW1pbGFyLiAgSXQncyByZWNvbW1lbmRlZCB0byBtYXAgdGhp cyB0byBAY29kZXtkc2xpZGUtZGVjay1zdGFydH0uCgrwn5qnIEl0IGlzIGludGVuZGVkIHRvIG92 ZXJsb2FkIEBjb2Rle2RzbGlkZS1kZWNrLXN0YXJ0fSBmdXJ0aGVyIHRvIGltcGxlbWVudCBgYHNl Y29uZGFyeScnIGFjdGlvbnMgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIG5vbi1saW5lYXJseS4KCkBm aW5kZXggZHNsaWRlLWRlY2stc3RvcApUaGVyZSBpcyBsaWtlbHkgbm8gZ29vZCBwbGFjZSB0byBi aW5kIEBjb2Rle2RzbGlkZS1kZWNrLXN0b3B9QGNvbW1he30gYnV0IGl0J3Mgbm90IGNyaXRpY2Fs LiAgWW91IGNhbiBkbyBldmVyeXRoaW5nIHdpdGgganVzdCB0aHJlZSBidXR0b25zLgoKQG5vZGUg Q29udGVudHMgSW50ZXJmYWNlCkBzZWN0aW9uIENvbnRlbnRzIEludGVyZmFjZQoKTmF2aWdhdGUg eW91ciBwcmVzZW50YXRpb24gZmFzdGVyIHdoZW4gYW5zd2VyaW5nIHF1ZXN0aW9ucy4gIFRoZSBj b250ZW50cyBpbnRlcmZhY2UgaXMgYSB2aWV3IG9mIHRvcC1sZXZlbCBoZWFkaW5ncy4gIEl0IG92 ZXJsb2FkcyB0aGUgcHJlc2VudGF0aW9uIGNvbnRyb2xzIHRvIG5hdmlnYXRlLgoKVG8gZW50ZXIg dGhlIGNvbnRlbnRzQGNvbW1he30gY2FsbCBAY29kZXtkc2xpZGUtZGVjay1zdGFydH0gd2hlbiBh IHByZXNlbnRhdGlvbiBpcyBhbHJlYWR5IGFjdGl2ZS4KCkBpdGVtaXplCkBpdGVtCkBjb2Rle2Rz bGlkZS1kZWNrLXN0YXJ0fSB3aWxsIHJlc3VtZSB0aGUgcHJlc2VudGF0aW9uIGF0IHRoYXQgaGVh ZGluZwpAaXRlbQpAY29kZXtkc2xpZGUtZGVjay1zdG9wfSB3aWxsIHNpbWlsYXJseSBleGl0IHRo ZSBjb250ZW50cyB2aWV3CkBpdGVtCkBjb2Rle2RzbGlkZS1kZWNrLWZvcndhcmR9IGFuZCBAY29k ZXtkc2xpZGUtZGVjay1iYWNrd2FyZH0gbW92ZSBiZXR3ZWVuIHRvcCBsZXZlbCBoZWFkaW5ncy4K QGVuZCBpdGVtaXplCgpAbm9kZSBOYXJyYXRpbmcKQHNlY3Rpb24gTmFycmF0aW5nCgpUaGUgcHJl c2VudGF0aW9uIHlvdSBzZWUgaXMgYSBjbG9uZWQgQHJlZntJbmRpcmVjdCBCdWZmZXJzLGluZGly ZWN0IGJ1ZmZlciwsZWxpc3AsfSBvZiB5b3VyIG9yZyBtb2RlIGJ1ZmZlci4gVGhlIEVsaXNwIHN0 YXRlIGFuZCBvdmVybGF5cyBhcmUgaW5kZXBlbmRlbnQuIFRoZXJlIGFyZSB0d28ga2V5IGFkdmFu dGFnZXM6CgpAaXRlbWl6ZQpAaXRlbQpBbnkgc3RhdGUgeW91IGNyZWF0ZSBpbiB0aGUgcHJlc2Vu dGF0aW9uIHdpbGwgbm90IHBvbGx1dGUgdGhlIG9yZyBtb2RlIGJ1ZmZlciB5b3UgYXJlIGVkaXRp bmcKQGl0ZW0KV2UgY2FuIGRpc3BsYXkgdGhlIHNvdXJjZSBmb3IgdGhlIHByZXNlbnRhdGlvbiBz aW11bHRhbmVvdXNseQpAZW5kIGl0ZW1pemUKCkBmaW5kZXggZHNsaWRlLWRlY2stZGV2ZWxvcApA Y29kZXtkc2xpZGUtZGVjay1kZXZlbG9wfSB3aWxsIGF0dGVtcHQgdG8gZGlzcGxheSBib3RoIHRo ZSBwcmVzZW50YXRpb24gYW5kIHNvdXJjZSBzaW11bHRhbmVvdXNseS4gIFdoZW5ldmVyIHRoZSBz b3VyY2UgaXMgdmlzaWJsZUBjb21tYXt9IGhpZ2hsaWdodHMgd2lsbCBiZSBhcHBsaWVkIHRvIGlu ZGljYXRlIHdoZXJlIHRoZSBwcmVzZW50YXRpb24gaXMgYXQuICBAc3Ryb25ne1RoaXMgaXMgZXNw ZWNpYWxseSBoZWxwZnVsIGZvciBpbmNsdWRpbmcgcHJlc2VudGF0aW9uIG5vdGVzIGluIGNvbW1l bnRzQGNvbW1he30gd2hpY2ggYXJlIGhpZGRlbiBieSBkZWZhdWx0fS4KClRvIGxlYXZlIGEgY29t bWVudCBmb3IgeW91cnNlbGYgaW4gdGhlIHByZXNlbnRhdGlvbiBzb3VyY2VAY29tbWF7fSBqdXN0 IGFkZCBhIGNvbW1lbnQgYmxvY2sgb3IgY29tbWVudCBsaW5lOgoKQGV4YW1wbGUKIyBUaGlzIGlz IGFsc28gYSBjb21tZW50CgojK2JlZ2luX2NvbW1lbnQKVGhpcyBpcyBhIGNvbW1lbnQgdGhhdCBv bmx5IEkgY2FuIHNlZSB3aGlsZSBwcmVzZW50aW5nQGNvbW1he30gb25seSB3aGVuIEkgbG9vayBh dCBteSBiYXNlIGJ1ZmZlciB3aGlsZSBzaGFyaW5nIGFub3RoZXIgZnJhbWUuCiMrZW5kX2NvbW1l bnQKQGVuZCBleGFtcGxlCgpZb3UgY2FuIGFsc28gc3dpdGNoIGEgd2luZG93IHRvIHRoZSBiYXNl IGJ1ZmZlciBtYW51YWxseS4gIFRoYXQncyBhbG1vc3QgYWxsIEBjb2Rle2RzbGlkZS1kZWNrLWRl dmVsb3B9IGRvZXMuCgpAbm9kZSBDdXJzb3IgVmlzaWJpbGl0eQpAc2VjdGlvbiBDdXJzb3IgVmlz aWJpbGl0eQoKQGZpbmRleCBkc2xpZGUtY3Vyc29yLWhpZGUKQGZpbmRleCBkc2xpZGUtY3Vyc29y LXJlc3RvcmUKQnkgZGVmYXVsdEBjb21tYXt9IHRoZSBjdXJzb3IgaXMgaGlkZGVuIGluIHRoZSBw cmVzZW50YXRpb24gYnVmZmVyIHVzaW5nIEBjb2Rle2RzbGlkZS1jdXJzb3ItaGlkZX0uICBZb3Ug Y2FuIGNhbGwgQGNvZGV7ZHNsaWRlLWN1cnNvci1yZXN0b3JlfSBpZiB5b3UgbmVlZCBpdC4KCkBu b2RlIENvbmZpZ3VyaW5nCkBjaGFwdGVyIENvbmZpZ3VyaW5nCgpCZSBzdXJlIHRvIGNoZWNrIEBz YW1we00teH0gQGNvZGV7Y3VzdG9taXplLWdyb3VwfSBAc2FtcHtkc2xpZGV9IHRvIHNlZSBhbGwg ZGVjbGFyZWQgY3VzdG9tIHZhcmlhYmxlcy4gQWxsIG9mIHRoZSB2YXJpYWJsZXMgYXJlIGNvbmZp Z3VyZWQgdG8gcmVjb21tZW5kZWQgZGVmYXVsdHMgZXhjZXB0IGhvb2tzQGNvbW1he30gd2hpY2gg d291bGQgZGVwZW5kIG9uIG90aGVyIHBhY2thZ2VzIHVzdWFsbHkuCgpNYW55IHNldHRpbmdzIGNh biBiZSBjb25maWd1cmVkIGF0OgpAaXRlbWl6ZQpAaXRlbQpnbG9iYWwgbGV2ZWwgdGhyb3VnaCBj dXN0b21pemUgdmFyaWFibGVzCkBpdGVtCmRvY3VtZW50IGxldmVsIHRocm91Z2gga2V5d29yZHMK QGl0ZW0Kc2xpZGUgbGV2ZWwgdGhyb3VnaCB0aGUgcHJvcGVydHkgZHJhd2VyCkBlbmQgaXRlbWl6 ZQoKQG1lbnUKKiBCaW5kaW5nOjoKKiBIb29rczo6CiogU3RlZXppbmcgT3JnOjogICAgICAgICAg ICAgICAgIE1ha2luZyBpdCBQcmV0dHkKQGVuZCBtZW51CgpAbm9kZSBCaW5kaW5nCkBzZWN0aW9u IEJpbmRpbmcKCllvdSBsaWtlbHkgd2FudCB0byBzdGFydCB0aGUgbW9kZSB2aWEgQGNvZGV7ZHNs aWRlLWRlY2stc3RhcnR9LiAgT25jZSB0aGUgbW9kZSBzdGFydHNAY29tbWF7fSBpdCBjcmVhdGVz IGFuIGluZGlyZWN0IGJ1ZmZlciB0byBkaXNwbGF5IHRoZSBzbGlkZXMgYW5kIHRoZW4gY2FsbHMg QGNvZGV7ZHNsaWRlLWRlY2stc3RhcnQtZnVuY3Rpb259IG9uY2UgdGhlIG1vZGUgaXMgYWN0aXZl IGFuZCBldmVyeXRoaW5nIGlzIGluaXRpYWxpemVkQGNvbW1he30gc28geW91IGNhbiBjdXN0b21p emUgc3RhcnR1cCBiZWhhdmlvci4KCkFsbCBjb21tYW5kcyBiZWdpbiB3aXRoIEBjb2Rle2RzbGlk ZS1kZWNrfSDwn5KhCkBsaXNwCihrZXltYXAtc2V0IG9yZy1tb2RlLW1hcCAiPGY1PiIgIydkc2xp ZGUtZGVjay1zdGFydCkKQGVuZCBsaXNwCk9uY2UgdGhlIGdsb2JhbCBtaW5vciBtb2RlQGNvbW1h e30gQGNvZGV7ZHNsaWRlLW1vZGV9IGlzIGFjdGl2ZUBjb21tYXt9IGFkZGl0aW9uYWwgYmluZGlu Z3MgaW4gQGNvZGV7ZHNsaWRlLW1vZGUtbWFwfSBhcmUgYWN0aXZlIGluIGV2ZXJ5IGJ1ZmZlciBz byB0aGF0IHlvdSBjYW4gaW50ZWdyYXRlIG90aGVyIGJ1ZmZlcnMgaW50byB5b3VyIHByZXNlbnRh dGlvbi4gIChUcmFja2luZyB3aGljaCBidWZmZXJzIGFyZSBwYXJ0IG9mIGEgcHJlc2VudGF0aW9u IGlzICBzdGlsbCBhIHRvcGljIHVuZGVyIGNvbnNpZGVyYXRpb24g8J+apykKCkBtZW51CiogU2Vj b25kYXJ5IENvbW1hbmRzIPCfmqc6OgpAZW5kIG1lbnUKCkBub2RlIFNlY29uZGFyeSBDb21tYW5k cyDwn5qnCkBzdWJzZWN0aW9uIFNlY29uZGFyeSBDb21tYW5kcyDwn5qnCgpCZWNhdXNlIHlvdSBt aWdodCB3YW50IHRvIHBsYXkgYSB2aWRlbyBvciB0YWtlIGEgYnJhbmNoIGluIHRoZSBwcmVzZW50 YXRpb24gYW5kIHRoZW4gZXhpdCB0aGF0IGJyYW5jaEBjb21tYXt9IHRoZSBwbGFuIGlzIHRvIG92 ZXJsb2FkIHRoZSBAY29kZXtkc2xpZGUtZGVjay1zdGFydH0gYmluZGluZyB3aXRoaW4gcHJlc2Vu dGF0aW9ucyB0byBlbnRlciAvIGV4aXQgdGhlc2UgYnJhbmNoZXMuCgpAbm9kZSBIb29rcwpAc2Vj dGlvbiBIb29rcwoKQmV3YXJlIG9mIHVzaW5nIHRoZSBub3JtYWwgQGNvZGV7ZHNsaWRlLW1vZGUt aG9va30g8J+YsSBiZWNhdXNlIGl0IHJ1bnMgQHN0cm9uZ3tpbiB0aGUgYmFzZSBidWZmZXJ9IOKa oO+4jy4gIElmIHlvdSByZW1hcCBmYWNlcyBvciBhZGQgYSBidW5jaCBvZiBzdHlsaW5nQGNvbW1h e30gaXQgd2lsbCBiZSBjb3BpZWQgdG8gdGhlIGluZGlyZWN0IGJ1ZmZlciBidXQgdGhlbiBsaW5n ZXIgaW4geW91ciBiYXNlIGJ1ZmZlci4gIEluc3RlYWRAY29tbWF7fSB1c2UgQGNvZGV7ZHNsaWRl LXN0YXJ0LWhvb2t9LiDwn5KhCgpAaXRlbWl6ZQpAaXRlbQpAY29kZXtkc2xpZGUtc3RhcnQtaG9v a30gaXMgcnVuIGluIHRoZSBpbmRpcmVjdCBidWZmZXIgYWZ0ZXIgaXQgaXMgc2V0IGl0LiAgVGhp cyBpcyB3aGF0IHlvdSB3YW50LgpAaXRlbQpAY29kZXtkc2xpZGUtc3RvcC1ob29rfSBpcyBydW4g aW4gdGhlIGJhc2UgYnVmZmVyIGJlY2F1c2UgdGhlIGluZGlyZWN0IGJ1ZmZlciBpcyBhbHJlYWR5 IGRlYWQuCkBpdGVtCkBjb2Rle2RzbGlkZS1jb250ZW50cy1ob29rfSBpcyBydW4gYWZ0ZXIgc3dp dGNoaW5nIHRvIGNvbnRlbnRzLiAgSXQgcnVucyBpbiB0aGUgc2xpZGUgYnVmZmVyLgpAaXRlbQpA Y29kZXtkc2xpZGUtbmFycm93LWhvb2t9IGlzIHJ1biBhZnRlciBuYXJyb3dpbmdAY29tbWF7fSB1 c3VhbGx5IGFmdGVyIGEgc2xpZGUgaXMgc3RhcnRlZApAaXRlbQpAY29kZXtkc2xpZGUtYWZ0ZXIt bGFzdC1zbGlkZS1ob29rfSBpcyBydW4gd2hlbiB0aGUgdXNlciB0cmllcyB0byBnbyBmb3J3YXJk IGJ1dCB0aGVyZSBhcmUgbm8gbW9yZSBzbGlkZXMuICBZb3UgY2FuIHVzZSB0aGlzIHRvIGltcGxl bWVudCBhIGZpbmFsIGZlZWRiYWNrIGJlZm9yZSBxdWl0dGluZyBvciBhZGQgQGNvZGV7ZHNsaWRl LWRlY2stc3RvcH0gdG8gZXhpdCB3aXRob3V0IGZlZWRiYWNrLgoKQW5vdGhlciBvcHRpb24gaXMg dG8gdXNlIEBjb2Rle2RzbGlkZS1wdXNoLXN0ZXB9IHRvIHB1c2ggYSBjYWxsYmFjayB0aGF0IHdp bGwgb25seSBydW4gd2hlbiBjYWxsZWQgZ29pbmcgZm9yd2FyZC4KQGVuZCBpdGVtaXplCgpAbGlz cAooZGVmdW4gbXktc3RvcC1pZi1mb3J3YXJkICgpCiAgKGRzbGlkZS1wdXNoLXN0ZXAgKGxhbWJk YSAoZGlyZWN0aW9uKQogICAgICAgICAgICAgICAgICAod2hlbiAoZXEgZGlyZWN0aW9uICdmb3J3 YXJkKQogICAgICAgICAgICAgICAgICAgIDs7IEJlIHN1cmUgdG8gcmV0dXJuIHQgb3IgdGhlIGNh bGxiYWNrIHdvbid0IGNvdW50IGFzIGEKICAgICAgICAgICAgICAgICAgICA7OyBzdGVwIGFuZCB0 aGUgaG9vayB3aWxsIHJ1biBhZ2Fpbi4KICAgICAgICAgICAgICAgICAgICAocHJvZzEgdCAoZHNs aWRlLWRlY2stc3RvcCkpKSkpKQoKKHNldHEgZHNsaWRlLWFmdGVyLWxhc3Qtc2xpZGUtaG9vayAj J215LXN0b3AtaWYtZm9yd2FyZCkKQGVuZCBsaXNwCgpAbWVudQoqIFBlci1TbGlkZSBBY3Rpb25z OjoKQGVuZCBtZW51CgpAbm9kZSBQZXItU2xpZGUgQWN0aW9ucwpAc3Vic2VjdGlvbiBQZXItU2xp ZGUgQWN0aW9ucwoK8J+SoSBJZiB5b3Ugd2FudCB0byBkbyBzb21ldGhpbmcgb24gZWFjaCBzbGlk ZSBvciBzcGVjaWZpYyBzbGlkZXNAY29tbWF7fSBiZWZvcmUgdXNpbmcgaG9va3NAY29tbWF7fSBp bnN0ZWFkIGNvbnNpZGVyIHVzaW5nIGFjdGlvbnMuCgpTZWUgdGhlIEBjb2Rle2RzbGlkZS1hY3Rp b24taGlkZS1tYXJrdXB9IHdoaWNoIGlzIGJ5IGRlZmF1bHQgYWRkZWQgdG8gQGNvZGV7ZHNsaWRl LWRlZmF1bHQtYWN0aW9uc30gYW5kIGhpZGVzIG1hcmt1cCBvbiBldmVyeSBzbGlkZS4gIFRoZSBs aWZlY3ljbGUgb2YgYWN0aW9ucyBhbmQgdGhlaXIgbWV0aG9kcyBmb3Igb2J0YWluaW5nIHRoZSBj dXJyZW50IHNsaWRlJ3MgaGVhZGluZyBtYWtlIHRoZW0gdmVyeSBnb29kIGZvciBwZXItc2xpZGUg YmVoYXZpb3IuCgpAbm9kZSBTdGVlemluZyBPcmcKQHNlY3Rpb24gU3RlZXppbmcgT3JnCgpOb3Qg dW5pcXVlIHRvIGRzbGlkZUBjb21tYXt9IGlmIHlvdSB3YW50IG1vcmUgcHJvZmVzc2lvbmFsIGxv b2tpbmcgcmVzdWx0c0Bjb21tYXt9IHlvdSB3aWxsIGxpa2VseSBuZWVkIHRvIG1ha2UgeW91ciBv cmcgYSBiaXQgcHJldHRpZXIuCgpUaGUgc2V0dXAgdXNlZCBmb3IgdGhlIFBvc2l0cm9uJ3MgWW91 VHViZSBkZW1vcyBpcyBub3QgbXVjaCBtb3JlIGNvbXBsZXggdGhhbiB0aGlzIHdlbGwtZG9jdW1l bnRlZCBzZXR1cCBieSBAdXJlZntodHRwczovL3N5c3RlbWNyYWZ0ZXJzLm5ldC9lbWFjcy10aXBz L3ByZXNlbnRhdGlvbnMtd2l0aC1vcmctcHJlc2VudC8sIFN5c3RlbSBDcmFmdGVyc30uICBBbHNv IHNlZSBQcm90J3MgQHVyZWZ7aHR0cHM6Ly9wcm90ZXNpbGFvcy5jb20vY29kZWxvZy8yMDIwLTA3 LTE3LWVtYWNzLW1peGVkLWZvbnRzLW9yZy8sIGZ1cnRoZXJ9IGRvY3VtZW50YXRpb24gb24gY3Vz dG9taXppbmcgb3JnIG1vZGUgZmFjZXMgYW5kIGZvbnRzLgoKSW4gc2hvcnRAY29tbWF7fSB1c2U6 CkBpdGVtaXplCkBpdGVtCkBjb2Rle29yZy1tb2Rlcm59CkBpdGVtCkBjb2Rle29yZy1hcHBlYXJ9 CkBpdGVtCkBjb2Rle25lcmQtaWNvbnN9IGZvciBtb3JlIGNoZWVzeSDumLIoRW1hY3MgbG9nbykK QGl0ZW0KQW5kIHNldCB0aGUgZmFjZXMgZm9yIG9yZyBoZWFkaW5ncyBhbmQgZG9jdW1lbnQgdGl0 bGUuCkBlbmQgaXRlbWl6ZQoKRG9uJ3QgZm9yZ2V0IGJ1aWx0LWluIEBjb2Rle2Vtb2ppLXNlYXJj aH0gYW5kIHNlYXJjaGluZyBAY29kZXtpbnNlcnQtY2hhcn0uCgpQb3NpdHJvbiBpcyBjaGVhdGlu ZyBhbmQgYWxzbyBhcHBseSBjdXN0b20gbGluZS1zcGFjaW5nIGFuZCBsaW5lLWhlaWdodC4gIFdo aWxlIFBzaW9uaWMgbWFpbnRhaW5zIGEgY3VzdG9tIEBjb2Rle29yZy1tb2Rlcm59QGNvbW1he30g dXNpbmcgY3VzdG9tIHNwYWNpbmcgZXZlcnl3aGVyZSBmaWdodHMgd2l0aCBAY29kZXt2aXN1YWwt bGluZS1tb2RlfSBjdXJyZW50bHkuCgpAbm9kZSBFeHRlbmRpbmcKQGNoYXB0ZXIgRXh0ZW5kaW5n CgpUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBhbiBvdmVydmlldyBmb3IgZXh0 ZW5kaW5nIGRzbGlkZSBjbGFzc2VzIG9yIGhhY2tpbmcgb24gZHNsaWRlIGl0c2VsZi4KCkBtZW51 CiogQ3JlYXRpbmcgQWN0aW9uczo6ICAgICAgICAgICAgIE92ZXJ2aWV3CiogQSBDdXN0b20gQWN0 aW9uOjogICAgICAgICAgICAgIEV4YW1wbGUgQ2xhc3MKKiBEZWZhdWx0IENsYXNzZXM6OiAgICAg ICAgICAgICAgT3ZlcnJpZGluZyB0aGUgR3V0cwpAZW5kIG1lbnUKCkBub2RlIENyZWF0aW5nIEFj dGlvbnMKQHNlY3Rpb24gQ3JlYXRpbmcgQWN0aW9ucwoKQWN0aW9ucyBhcmUgdGhlIHJpZ2h0IGNo b2ljZSB3aGVuIHlvdSBuZWVkIGN1c3RvbSBiZWhhdmlvciB0aGF0IHlvdSB3YW50IHRvIHJlLXVz ZS4gIEFjdGlvbnMgY2FuIGJlIGNvbmZpZ3VyZWQgd2l0aCBhcmd1bWVudHMuICBUaGV5IGltcGxl bWVudCB0aGUgc3RhdGVmdWwgc2VxdWVuY2UgbGlmZWN5Y2xlLiAgRm9yIG9uZS1vZmYgc29sdXRp b25zQGNvbW1he30geW91IHByb2JhYmx5IGp1c3Qgd2FudCBhIGJhYmVsIGJsb2NrLgoKRmlyc3Qg Y2hvb3NlIHlvdXIgYWN0aW9uIHR5cGU6CgpAZmluZGV4IGRzbGlkZS1zbGlkZS1hY3Rpb24KQGl0 ZW1pemUKQGl0ZW0KT3ZlcnJpZGUgQGNvZGV7ZHNsaWRlLXNsaWRlLWFjdGlvbn0gdG8gY3JlYXRl IGEgc2xpZGUgYWN0aW9uLiAgWW91ciBhY3Rpb24gd2lsbCBjb250cm9sIHRoZSBkaXNwbGF5IG9m IHRoZSBzbGlkZSBhbmQgaXRzIGNoaWxkcmVuQGNvbW1he30gdXN1YWxseSBjb250cm9sbGluZyB0 aGUgbmFycm93IHN0YXRlIGFuZCBhZGRpbmcgb3IgcmVtb3Zpbmcgb3ZlcmxheXMgZnJvbSBjaGls ZHJlbi4KQGVuZCBpdGVtaXplCkBmaW5kZXggZHNsaWRlLWFjdGlvbgpAaXRlbWl6ZQpAaXRlbQpP dmVycmlkZSBAY29kZXtkc2xpZGUtYWN0aW9ufSB0byBjcmVhdGUgYW4gYWN0aW9uIHRoYXQgd29y a3MgbWFpbmx5IG9uIGEgaGVhZGluZydzIHNlY3Rpb24gY29udGVudC4KQGVuZCBpdGVtaXplCgpP dmVycmlkZSBtZXRob2RzIGFzIGFwcHJvcHJpYXRlQGNvbW1he30gY29uZmlndXJlIGEgaGVhZGlu ZyB0byB1c2UgeW91ciBhY3Rpb25AY29tbWF7fSBhbmQgeW91J3JlIGRvbmUuICBTb21lIGFjdGlv bnNAY29tbWF7fSBzdWNoIGFzIEBjb2Rle2RzbGlkZS1hY3Rpb24tcHJvcGVydGl6ZX0gb25seSB3 b3JrIHdoZW4gc29tZSBvZiB0aGUgc2VjdGlvbiBkYXRhIGlzIGFubm90YXRlZC4KCkBub2RlIEEg Q3VzdG9tIEFjdGlvbgpAc2VjdGlvbiBBIEN1c3RvbSBBY3Rpb24KCkBmaW5kZXggZHNsaWRlLXNl Y3Rpb24tbmV4dApAZmluZGV4IGRzbGlkZS1zZWN0aW9uLXByZXZpb3VzClRoZSBAY29kZXtkc2xp ZGUtc2VjdGlvbi1uZXh0fSAgYW5kIEBjb2Rle2RzbGlkZS1zZWN0aW9uLXByZXZpb3VzfSBtZXRo b2QgZG9jdW1lbnRhdGlvbiBhcmUgdmVyeSBoZWxwZnVsIGJlaGF2aW9yIGZvciBxdWlja2x5IHdy aXRpbmcgY3VzdG9tIGFjdGlvbnMuICBUaGV5IGFkdmFuY2UgdGhlIGFjdGlvbidzIEBzYW1wezpt YXJrZXJ9IGZvcndhcmRzIGFuZCBiYWNrd2FyZHMgdG8gdGhlIG5leHQgbWF0Y2hpbmcgZWxlbWVu dCBhbmQgcmV0dXJuIHRoYXQgZWxlbWVudCBzbyB3ZSBjYW4gZG8gc29tZXRoaW5nIHdpdGggaXQu CgpAaXRlbWl6ZQpAaXRlbQpkZWNsYXJlIGEgY2xhc3MKQGl0ZW0Kb3ZlcnJpZGUgYSBmZXcgbWV0 aG9kcwpAaXRlbQpub3cgeW91IHRvbyBjYW4gcGFpbnQgdGhlIHBhcmFncmFwaHMgcmVkCkBlbmQg aXRlbWl6ZQoKRXhhbXBsZSBjb2RlOgoKQGxpc3AKKGRlZmNsYXNzIGRzbGlkZS1hY3Rpb24tcmVk LXBhcmFncmFwaHMgKGRzbGlkZS1hY3Rpb24pCiAgKChvdmVybGF5cyA6aW5pdGZvcm0gbmlsKSkK ICAiUGFpbnQgdGhlIHBhcmFncmFwaHMgcmVkQGNvbW1he30gb25lIGJ5IG9uZS4iKQoKOzsgRGVm YXVsdCBuby1vcCBgZHNsaWRlLWJlZ2luJyBpcyBzdWZmaWNpZW50Cgo7OyBEZWZhdWx0IGltcGxl bWVudGF0aW9uIG9mIGBkc2xpZGUtZW5kJ0Bjb21tYXt9IHdoaWNoIGp1c3QgcGxheXMgZm9yd2Fy ZCB0byB0aGUgZW5kQGNvbW1he30KOzsgaXMgd2VsbC1iZWhhdmVkIHdpdGggdGhpcyBjbGFzcy4K Cjs7IFJlbW92ZSBhbnkgcmVtYWluaW5nIG92ZXJsYXlzIHdoZW4gY2FsbGluZyBmaW5hbC4KKGNs LWRlZm1ldGhvZCBkc2xpZGUtZmluYWwgOmFmdGVyICgob2JqIGRzbGlkZS1hY3Rpb24tcmVkLXBh cmFncmFwaHMpKQogIChtYXBjICMnZGVsZXRlLW92ZXJsYXkgKG9yZWYgb2JqIG92ZXJsYXlzKSkp Cgo7OyBGaW5kIHRoZSBuZXh0IHBhcmFncmFwaCBhbmQgYWRkIGFuIG92ZXJsYXkgaWYgaXQgZXhp c3RzCihjbC1kZWZtZXRob2QgZHNsaWRlLWZvcndhcmQgKChvYmogZHNsaWRlLWFjdGlvbi1yZWQt cGFyYWdyYXBocykpCiAgKHdoZW4tbGV0ICgocGFyYWdyYXBoIChkc2xpZGUtc2VjdGlvbi1uZXh0 IG9iaiAncGFyYWdyYXBoKSkpCiAgICAobGV0KiAoKGJlZyAob3JnLWVsZW1lbnQtcHJvcGVydHkg OmJlZ2luIHBhcmFncmFwaCkpCiAgICAgICAgICAgKGVuZCAob3JnLWVsZW1lbnQtcHJvcGVydHkg OmVuZCBwYXJhZ3JhcGgpKQogICAgICAgICAgIChuZXctb3ZlcmxheSAobWFrZS1vdmVybGF5IGJl ZyBlbmQpKSkKICAgICAgKG92ZXJsYXktcHV0IG5ldy1vdmVybGF5ICdmYWNlICdlcnJvcikKICAg ICAgKHB1c2ggbmV3LW92ZXJsYXkgKG9yZWYgb2JqIG92ZXJsYXlzKSkKICAgICAgOzsgUmV0dXJu IG5vbi1uaWwgdG8gaW5kaWNhdGUgcHJvZ3Jlc3Mgd2FzIG1hZGUuICBUaGlzIGFsc28gaW5mb3Jt cyB0aGUKICAgICAgOzsgaGlnaGxpZ2h0IHdoZW4gZm9sbG93aW5nIHRoZSBzbGlkZXMgaW4gdGhl IGJhc2UgYnVmZmVyLgogICAgICBiZWcpKSkKCihjbC1kZWZtZXRob2QgZHNsaWRlLWJhY2t3YXJk ICgob2JqIGRzbGlkZS1hY3Rpb24tcmVkLXBhcmFncmFwaHMpKQogICh3aGVuLWxldCogKChvdmVy bGF5IChwb3AgKG9yZWYgb2JqIG92ZXJsYXlzKSkpKQogICAgKGRlbGV0ZS1vdmVybGF5IG92ZXJs YXkpCiAgICA7OyBJZiB0aGVyZSBpcyBhIHByZWNlZGluZyBvdmVybGF5QGNvbW1he30gbW92ZSB0 byBpdHMgYmVnaW5uaW5nIGVsc2UgbW92ZSB0byB0aGUKICAgIDs7IGJlZ2lubmluZyBvZiB0aGUg aGVhZGluZy4KICAgIChpZi1sZXQgKChvdmVybGF5IChjYXIgKG9yZWYgb2JqIG92ZXJsYXlzKSkp KQogICAgICAgIChkc2xpZGUtbWFya2VyIG9iaiAob3ZlcmxheS1zdGFydCBvdmVybGF5KSkKICAg ICAgKGRzbGlkZS1tYXJrZXIgb2JqIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6YmVnaW4gKGRzbGlk ZS1oZWFkaW5nIG9iaikpKSkpKQpAZW5kIGxpc3AKCkBub2RlIERlZmF1bHQgQ2xhc3NlcwpAc2Vj dGlvbiBEZWZhdWx0IENsYXNzZXMKClRoZSBkZWNrIGFuZCBzbGlkZSBjbGFzcyBhcyB3ZWxsIGFz IGFjdGlvbnMgY2FuIGJlIHN1Yi1jbGFzc2VkLiAgVXNlIHRoZSBleGlzdGluZyBzdWItY2xhc3Nl cyBvZiBhY3Rpb25zIGFzIGV4YW1wbGUgY29kZSBmb3Igd3JpdGluZyBvdGhlciBjbGFzc2VzLiAg U2VlIHRoZSBAcmVme1RvcCxlaWVpbyNUb3AsLGVpZWlvLH0gbWFudWFsIGZvciBleHBsYW5hdGlv biBvZiBPT1AgaW4gRWxpc3AuCgpAaXRlbWl6ZQpAaXRlbQpAc2FtcHtBY3Rpb259OiAgQ3JlYXRp bmcgbmV3IGFjdGlvbiBzdWJjbGFzc2VzIGFyZSBhbiBlZmZpY2llbnQgd2F5IHRvIHBlcmZvcm0g c2ltaWxhciBvcGVyYXRpb25zIG9uIHR5cGljYWwga2luZHMgb2Ygb3JnIGRhdGEuCkBpdGVtCkBz YW1we1NsaWRlOn0gIFNsaWRlcyBjYW4gYmUgY29uZmlndXJlZCBleHRlbnNpdmVseSBieSBjaGFu Z2luZyB0aGVpciBhY3Rpb25zLiAgSG93ZXZlckBjb21tYXt9IGZvciBtb3JlIHZlcnRpY2FsIGNv b3BlcmF0aW9uIGJldHdlZW4gc2xpZGVzIG9yIGNvb3BlcmF0aW9uIGFtb25nIGFjdGlvbnNAY29t bWF7fSBleHRlbmRlZCBzbGlkZXMgY291bGQgYmUgdXNlZnVsLgpAaXRlbQpAc2FtcHtEZWNrfTog IElmIHRoZSBjb3JlIG1ldGhvZHMgb2YgdGhlIGRlY2sgYXJlIGluc3VmZmljaWVudEBjb21tYXt9 IGV4dGVuc2lvbiBpcyBhbm90aGVyIG9wdGlvbiBiZXNpZGVzIGFkdmljZUBjb21tYXt9IGhvb2tz QGNvbW1he30gYW5kIG1vZGlmeWluZyB0aGUgc291cmNlLgoKSWYgeW91IHN1c3BlY3QgeW91IG1p Z2h0IG5lZWQgdG8gc3ViLWNsYXNzIHRoZSBAY29kZXtkc2xpZGUtc2xpZGV9IG9yIEBjb2Rle2Rz bGlkZS1kZWNrfUBjb21tYXt9IHBsZWFzZSBmaWxlIGFuIGlzc3VlIGJlY2F1c2UgeW91ciB1c2Ug Y2FzZSBpcyBwcm9iYWJseSBpbnRlcmVzdGluZy4KQGVuZCBpdGVtaXplCgpAbm9kZSBIYWNraW5n CkBjaGFwdGVyIEhhY2tpbmcKClRoaXMgc2VjdGlvbiBwcm92aWRlcyByZWFsbHkgaGlnaC1sZXZl bCBzdW1tYXJ5IG9mIHRoZSBjb2RlJ3MgbWFqb3IgZGVzaWduIGNob2ljZXMgdG8gcHJlcGFyZSBm b3IgZGl2aW5nIGludG8gc291cmNlLgoKQG1lbnUKKiBPYmplY3RzICYgT3duZXJzaGlwOjoKKiBT dGF0ZWZ1bCBTZXF1ZW5jZTo6CiogRmxvdyBDb250cm9sOjoKKiBJbnN0YW50aWF0aW5nIFNsaWRl czo6CkBlbmQgbWVudQoKQG5vZGUgT2JqZWN0cyAmIE93bmVyc2hpcApAc2VjdGlvbiBPYmplY3Rz ICYgT3duZXJzaGlwCgpPcmcgbW9kZSB1c2VzIHRyZWVzLiAgUHJlc2VudGF0aW9ucyBhcmUgbGlu ZWFyIHNlcXVlbmNlcy4gIFdlIGNhbiBlaXRoZXIgdHJhdmVyc2UgdGhlIHRyZWUgb3IgZmxhdHRl biBpdC4gIERzbGlkZSBjaG9zZSB0byB0cmF2ZXJzZS4gIFRoaXMgZGVzaWduIGFsbG93ZWQgaW1w bGVtZW50aW5nIGZlYXR1cmVzIHN1Y2ggYXMgQGNvZGV7ZHNsaWRlLXNsaWRlLWFjdGlvbi1lYWNo LWNoaWxkfS4gIFRoZSBjaGlsZHJlbiBvZiBzdWNoIGEgcGFyZW50IHNsaWRlIGV4aXN0IHNpbXVs dGFuZW91c2x5LiAgQSBjb25zZXF1ZW5jZSBvZiB0aGUgY2hvaWNlIG5vdCB0byBmbGF0dGVuIGlz IHRoYXQgcGFyZW50cyBvd24gdGhlaXIgY2hpbGRyZW4uICBUaGUgbGlmZWN5Y2xlIG9mIGEgcGFy ZW50IGFsd2F5cyBlbmNvbXBhc3NlcyBpdHMgY2hpbGQuCgpAaXRlbWl6ZQpAaXRlbQpUaGUgZGVj ayBvYmplY3QgaXMgdGhlIHJvb3Qgb2YgYWxsIGZ1bmN0aW9uYWxpdHkgYW5kIG1hbnkgY29tbWFu ZHMgZGVsZWdhdGUgdGhyb3VnaCBpdApAaXRlbQpUaGUgZGVjayBvd25zIHNsaWRlc0Bjb21tYXt9 IHdoaWNoIG93biBhY3Rpb25zCkBpdGVtClNsaWRlIGFjdGlvbnMgbWF5IGZ1cnRoZXIgb3duIGNo aWxkIHNsaWRlcwpAZW5kIGl0ZW1pemUKCkBub2RlIFN0YXRlZnVsIFNlcXVlbmNlCkBzZWN0aW9u IFN0YXRlZnVsIFNlcXVlbmNlCgpAZmluZGV4IGRzbGlkZS1zdGF0ZWZ1bC1zZXF1ZW5jZQpQcmVz ZW50YXRpb25zIGFyZSBzdXBwb3NlZCB0byBiZSBsaW5lYXIgc2VxdWVuY2VzLiAgSG93ZXZlckBj b21tYXt9IHRoZXkgbWF5IHJlcXVpcmUgc2V0dXAgYW5kIHRlYXJkb3duLiAgVGhpcyBpcyB0aGUg YGBzdGF0ZWZ1bCcnIHBhcnQgb2YgYSBAY29kZXtkc2xpZGUtc3RhdGVmdWwtc2VxdWVuY2V9LgoK QGZpbmRleCBkc2xpZGUtZm9yd2FyZApAZmluZGV4IGRzbGlkZS1iYWNrd2FyZApJZiBhbGwgc2Vx dWVuY2VzIHdlcmUgaWRlbXBvdGVudEBjb21tYXt9IHdlIHdvdWxkIGp1c3QgaW1wbGVtZW50IEBj b2Rle2RzbGlkZS1mb3J3YXJkfSBhbmQgQGNvZGV7ZHNsaWRlLWJhY2t3YXJkfS4gVGhlIHJlYXNv biB0aGlzIHdhcyBub3QgZG9uZSBpcyBiZWNhdXNlIHRob3NlIG1ldGhvZHMgd291bGQgaGF2ZSB0 byBkaWZmZXJlbnRpYXRlIGNhbGxzIHRvIHBlcmZvcm0gc2V0dXAgdmVyc3VzIGF0dGVtcHRpbmcg dG8gbWFrZSBwcm9ncmVzcyBhbmQgY291bnRpbmcgYXMgc3RlcHMuICBJdCB3YXMgZXh0cmVtZWx5 IHRyaWNreUBjb21tYXt9IGFuZCBzbyBzZXR1cCBhbmQgdGVhcmRvd24gd2VyZSBzcGxpdCBpbnRv IHRocmVlIG1ldGhvZHMuCgpAZmluZGV4IGRzbGlkZS1iZWdpbgpAZmluZGV4IGRzbGlkZS1lbmQK VGhpcyBzZXR1cCBhbmQgdGVhcmRvd24gY2FuIGhhcHBlbiBpbiBib3RoIGRpcmVjdGlvbnNAY29t bWF7fSBzbyB0aGVyZSBpcyBAY29kZXtkc2xpZGUtYmVnaW59IGFuZCBAY29kZXtkc2xpZGUtZW5k fS4gIFRoZSBsYXR0ZXIgY29tbW9ubHkgY2FsbHMgdGhlIGZvcm1lciBhbmQgdGhlbiBhZHZhbmNl cyB0aGUgc3RhdGUgdG8gdGhlIGVuZEBjb21tYXt9IGJ1dCBzb21lIG1vcmUgb3B0aW1hbCBzZXR1 cHMgYXJlIHBvc3NpYmxlIGFuZCBhbHJlYWR5IGluIHVzZS4KCkBmaW5kZXggZHNsaWRlLWZpbmFs ClNsaWRlcyBtYXkgYmUgZGlzcG9zZWQgb2YgYWZ0ZXIgdGhleSBubyBsb25nZXIgbWFrZSBwcm9n cmVzcy4gIFRvIGVuc3VyZSB0aGlzIGZpbmFsaXphdGlvbiBoYXBwZW5zQGNvbW1he30gdGhlIHBh cmVudCBjYWxscyBAY29kZXtkc2xpZGUtZmluYWx9LgoKQG1lbnUKKiBBY3Rpb25zOiBBY3Rpb25z ICgxKS4gCkBlbmQgbWVudQoKQG5vZGUgQWN0aW9ucyAoMSkKQHN1YnNlY3Rpb24gQWN0aW9ucwoK QWN0aW9ucyBsaXZlIG9uIHRoZSBzbGlkZS4gIFRoZXkgaW1wbGVtZW50IHN0YXRlZnVsIHNlcXVl bmNlLiAgVGhlcmUgYXJlIHR3byBraW5kcyBvZiBhY3Rpb25zOgoKQGl0ZW1pemUKQGl0ZW0KQWN0 aW9uOiBBIHJlZ3VsYXIgYWN0aW9uIHVzdWFsbHkgd29ya3Mgb24gdGhlIHNlY3Rpb24gY29udGVu dHMuCkBpdGVtClNsaWRlIEFjdGlvbjogQSBzbGlkZSBhY3Rpb24gdXN1YWxseSB3aWxsIG5hcnJv dyB0byBpdHMgb3duIGNvbnRlbnRzLiAgSXQgY2FuIGNyZWF0ZSBuZXcgc2xpZGVzIGJ5IGNhbGxp bmcgQGNvZGV7ZHNsaWRlLS1tYWtlLXNsaWRlfUBjb21tYXt9IHdoZXJlIGl0IGNhbiBvdmVycmlk ZSB0aGVtIHRvIHByZXZlbnQgdGhlbSBmcm9tIG5hcnJvd2luZy4gIFRoZSBzbGlkZSBhY3Rpb24g aXMgYWx3YXlzIGNhbGxlZCBiZWZvcmUgYW55IG90aGVyIGFjdGlvbkBjb21tYXt9IHdoZXRoZXIg Z29pbmcgaW4gZm9yd2FyZCBvciByZXZlcnNlLgpAZW5kIGl0ZW1pemUKCkBub2RlIEZsb3cgQ29u dHJvbApAc2VjdGlvbiBGbG93IENvbnRyb2wKCkRlY2tzQGNvbW1he30gc2xpZGVzQGNvbW1he30g YW5kIGFjdGlvbnMgaW1wbGVtZW50IHRoZSBAY29kZXtkc2xpZGUtc3RhdGVmdWwtc2VxdWVuY2V9 IGludGVyZmFjZS4gIE9uIGVhY2ggY2FsbCB0byBAY29kZXtkc2xpZGUtZGVjay1mb3J3YXJkfSBv ciBAY29kZXtkc2xpZGUtZGVjay1iYWNrd2FyZH1AY29tbWF7fSB0aGUgZGVjayByZWNlaXZlcyB0 aGUgZmlyc3QgY2FsbCB0byBpdHMgQGNvZGV7ZHNsaWRlLWZvcndhcmR9IG1ldGhvZC4KCkZpcnN0 QGNvbW1he30gdGhlIGRlY2sgd2lsbCBjaGVjayBmb3IgYW55IHN0ZXAgY2FsbGJhY2tzLiAgVGhl c2UgYXJlIGFkZGVkIHdpdGggQGNvZGV7ZHNsaWRlLXB1c2gtc3RlcH0uIFRoZSBkZWNrIGRlbGVn YXRlcyB0aGlzIHRvIHRoZSBzbGlkZS4gIFRoZSBzbGlkZSBtYXkgZGVsZWdhdGUgZG93biB0byBh biBhY3Rpb25AY29tbWF7fSB3aGljaCBtYXkgZGVsZWdhdGUgdG8gYSBzbGlkZS4KCkluIHRoZSBt b3N0IGJhc2ljIGNhc2VAY29tbWF7fSBlYWNoIGRlbGVnYXRlIHdpbGwgdHJ5IGFsbCBvZiBpdHMg YWN0aW9ucyB1bnRpbCBvbmUgcmV0dXJucyBub24tbmlsLiAgVGhlIGRlbGVnYXRlIHJldHVybnMg dGhlIGZpcnN0IG5vbi1uaWxsIHJlc3VsdEBjb21tYXt9IGluZGljYXRpbmcgdGhhdCBwcm9ncmVz cyB3YXMgbWFkZS4gIElmIHRoZSBkZWxlZ2F0ZSByZXR1cm5zIG5pbEBjb21tYXt9IGl0IG1lYW5z IGl0IHdhcyB1bmFibGUgdG8gbWFrZSBwcm9ncmVzc0Bjb21tYXt9IGFuZCBzbyB0aGUgY2FsbGVy IHdpbGwgaW5zdGVhZCB0cnkgaXRzIG93biBuZXh0IGFjdGlvbi4KCldoZW5ldmVyIGFsbCBzbGlk ZXMgYW5kIGFjdGlvbnMgcmV0dXJuIG5pbCBhbGwgdGhlIHdheSBiYWNrIHVwIHRvIHRoZSBkZWNr QGNvbW1he30gaXQgbG9va3MgZm9yIGEgbmV4dCBvciBwcmV2aW91cyB0b3AtbGV2ZWwgaGVhZGlu ZyB0byBtYWtlIGludG8gYSBzbGlkZS4gIElmIG5vbmUgaXMgZm91bmRAY29tbWF7fSBpdCBpbmRp Y2F0ZXMgdGhhdCB0aGUgdXNlciBpcyBhdCB0aGUgYmVnaW5uaW5nIG9yIGVuZCBvZiB0aGUgcHJl c2VudGF0aW9uLgoKVGhlIGRlY2sgb2JqZWN0IGFuZCBzbGlkZSBhY3Rpb25zIGZyZXF1ZW50bHkg Y3JlYXRlIG5ldyBjaGlsZHJlbiBmcm9tIG9yZyBoZWFkaW5ncy4gIFRoZXkgY2FsbCB0aGVpciBA Y29kZXtkc2xpZGUtYmVnaW59IG9yIEBjb2Rle2RzbGlkZS1lbmR9IG1ldGhvZHMgcmlnaHQgYWZ0 ZXIgdGhhdC4gIElmIHRoZXNlIG1ldGhvZHMgZG9uJ3QgaW5kaWNhdGUgcHJvZ3Jlc3NAY29tbWF7 fSB0aGUgQGNvZGV7ZHNsaWRlLWZvcndhcmR9IG9yIEBjb2Rle2RzbGlkZS1iYWNrfSBtZXRob2Qg d2lsbCBiZSBjYWxsZWQuCgpAbm9kZSBJbnN0YW50aWF0aW5nIFNsaWRlcwpAc2VjdGlvbiBJbnN0 YW50aWF0aW5nIFNsaWRlcwoKQGZpbmRleCBkc2xpZGUtLW1ha2Utc2xpZGUKU2xpZGVzIGFyZSBj cmVhdGVkIGJ5IGNhbGxpbmcgQGNvZGV7ZHNsaWRlLS1tYWtlLXNsaWRlfSB3aXRoIGFuIG9yZyBl bGVtZW50IGZvciBhIGhlYWRpbmcuICBUaGlzIGZ1bmN0aW9uIGludGVycHJldHMgdGhlIGNsYXNz IG5hbWUgYW5kIGFyZ3VtZW50cyBmb3IgdGhlIG5ldyBzbGlkZSBhbmQgaW5zdGFudGlhdGVzIHRo ZSBvYmplY3QuCgpUaGUgZGVmYXVsdCBjbGFzc2VzIGFuZCBhY3Rpb25zIGNhbiBiZSBjb25maWd1 cmVkIGF0IHRoZSBkb2N1bWVudCBvciBjdXN0b21pemUgbGV2ZWwuICBTZXQgdGhlIEBzYW1we0RT TElERV9ERUNLX0NMQVNTfSBhbmQgQHNhbXB7RFNMSURFX1NMSURFX0NMQVNTfSBhcyB3ZWxsIGFz IG90aGVyIHByb3BlcnRpZXMgdGhhdCB3b3JrIGF0IHRoZSBoZWFkaW5nIGxldmVsLiAgVGhlIG9y ZGVyIG9mIHByZWNlZGVuY2UgKEBzdHJvbmd7Tm90IGZ1bGx5IGltcGxlbWVudGVkfSDwn5qnKToK CkBpdGVtaXplCkBpdGVtClByb3BlcnR5IGRlZmluaXRpb24gb2YgdGhlIGN1cnJlbnQgaGVhZGlu ZwpAaXRlbQpQcm9wZXJ0eSBkZWZpbml0aW9uIGluIHRoZSBkb2N1bWVudApAaXRlbQpDdXN0b21p emUgdmFyaWFibGUKQGVuZCBpdGVtaXplCgpAY29kZXtkc2xpZGUtLW1ha2Utc2xpZGV9IHdpbGwg bG9vayBpbiBvcmRlciBmb3IgdGhlIGhpZ2hlc3QgcHJlY2VkZW5jZSBzZXR0aW5nIGFuZCB0aGVu IGluc3RhbnRpYXRlIHRoZSBjbGFzcyB3aXRoIHRoYXQgdmFsdWUgaW4gdGhlIHNsb3QuCgpAbm9k ZSBDb250cmlidXRpbmcKQGNoYXB0ZXIgQ29udHJpYnV0aW5nCgpAaXRlbWl6ZQpAaXRlbQpTaW5j ZSB5b3UgbGlrZWx5IGp1c3QgbmVlZCBzb21ldGhpbmcgdG8gbWFnaWNhbGx5IGhhcHBlbkBjb21t YXt9IHRoZSByZWNvbW1lbmRlZCBvcHRpb24gaXMgdG8gcGxhY2UgYSBoYW1idXJnZXIgaW4gdGhl IEB1cmVme2h0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9wb3NpdHJvbi1zb2x1dGlvbnMsIGhh bWJ1cmdlciBqYXJ9IGFuZCBmaWxlIGFuIGlzc3VlLgpAaXRlbQpJZiB5b3UgZG8gaGF2ZSB0aW1l QGNvbW1he30gZXhjZWxsZW50LiAgSGFwcHkgdG8gc3VwcG9ydCB5b3VyIFBSJ3MgYW5kIHByb3Zp ZGUgY29udGV4dCBhYm91dCB0aGUgYXJjaGl0ZWN0dXJlIGFuZCBiZWhhdmlvci4KQGVuZCBpdGVt aXplCgpAbWVudQoqIFdvcmsgSW4gUHJvZ3Jlc3Mg8J+apzo6CkBlbmQgbWVudQoKQG5vZGUgV29y ayBJbiBQcm9ncmVzcyDwn5qnCkBzZWN0aW9uIFdvcmsgSW4gUHJvZ3Jlc3Mg8J+apwoKT3BlbiBp c3N1ZXMgYW5kIGdpdmUgZmVlZGJhY2sgb24gZmVhdHVyZSByZXF1ZXN0cy4gIENvbnRyaWJ1dGlv bnMgd2VsY29tZS4KCkBtZW51CiogU2xpZGUgQWN0aW9uIFByZWNlZGVuY2U6OgoqIFNlY29uZGFy eSBDb21tYW5kczo6CiogQGNvZGV7ZHNsaWRlLWdvdG99QGNvbW1he30gc3RhcnRpbmcgZnJvbSBw b2ludDo6CiogQWZmaWxpYXRlZCBCdWZmZXJzOjoKKiBOb24tR3JhcGhpYyBEaXNwbGF5OjoKKiBJ bXByb3BlciBMZXZlbHM6OgoqIENvdW50aW5nIFNsaWRlczo6CiogTm9uLU9yZyBTZXF1ZW5jZXM6 OgpAZW5kIG1lbnUKCkBub2RlIFNsaWRlIEFjdGlvbiBQcmVjZWRlbmNlCkBzdWJzZWN0aW9uIFNs aWRlIEFjdGlvbiBQcmVjZWRlbmNlCgpXaGVuIGEgc2xpZGUgaXMgY3JlYXRlZCBpbiBAY29kZXtk c2xpZGUtbWFrZS1zbGlkZX1AY29tbWF7fSBpdCBjYW4gb2J0YWluIHRoZW0gZnJvbSBzZXZlcmFs IHBsYWNlczoKQGl0ZW1pemUKQGl0ZW0KcGFzc2VkIGluIGFyZ3VtZW50c0Bjb21tYXt9IGFzIHNs aWRlIGFjdGlvbnMgZG8gdG8gcHJldmVudCBjaGlsZHJlbiBmcm9tIHRyeWluZyB0byBkaXNwbGF5 IHRoZW1zZWx2ZXMKQGl0ZW0KcHJvcGVydGllc0Bjb21tYXt9IGhvdyBzbGlkZXMgYXJlIHVzdWFs bHkgY29uZmlndXJlZApAaXRlbQpjdXN0b21pemUgdmFyaWFibGVzIHRoYXQgc2V0IHRoZSBkZWZh dWx0IGFjdGlvbnMuCkBlbmQgaXRlbWl6ZQpUaGUgb3JkZXIgb2YgcHJlY2VkZW5jZSBhbmQgY2Fw YWJpbGl0eSB0byBvdmVycmlkZSBvcHRpb25zIGlzIHN0aWxsIHByZXR0eSBpbW1hdHVyZS4KCkBu b2RlIFNlY29uZGFyeSBDb21tYW5kcwpAc3Vic2VjdGlvbiBTZWNvbmRhcnkgQ29tbWFuZHMKClNl ZSB0aGUgc2VjdGlvbiBhYm91dCBiaW5kaW5ncyBmb3IgY29udGV4dC4gIFZpZGVvIHBsYXkgb3Ig b3RoZXIgc2l0dWF0aW9ucyB3aGVyZSB0aGUgcHJlc2VudGF0aW9uIG1pZ2h0IGJyYW5jaCBzaG91 bGQgYmUgc3VwcG9ydGVkIGJ5IG92ZXJsb2FkaW5nIHRoZSBiZWhhdmlvciBvZiBAY29kZXtkc2xp ZGUtZGVjay1zdGFydH0uICBJIHRoaW5rIHRoaXMgY29tbWFuZCB3aWxsIHR1cm4gaW50byBAY29k ZXtkc2xpZGUtZGVjay1zZWNvbmRhcnl9IGluIHRoZSBAY29kZXtkc2xpZGUtbW9kZS1tYXB9LgoK QG5vZGUgQGNvZGV7ZHNsaWRlLWdvdG99QGNvbW1he30gc3RhcnRpbmcgZnJvbSBwb2ludApAc3Vi c2VjdGlvbiBAY29kZXtkc2xpZGUtZ290b31AY29tbWF7fSBzdGFydGluZyBmcm9tIHBvaW50CgpT aW5jZSBub3QgbWFueSBhY3Rpb25zIGN1cnJlbnRseSBoYXZlIGltcGxlbWVudGVkIHRoaXMgdmVy eSBhY2N1cmF0ZWx5QGNvbW1he30gcGxheWluZyBmcm9tIHBvaW50IGlzIGxpa2VseSBub3QgdGhh dCBhY2N1cmF0ZS4gIFByb2dyZXNzIHVwZGF0aW5nIGluIHRoZSBiYXNlIGJ1ZmZlciBpcyBhbHNv IGN1cnJlbnRseSBvbmx5IGF0IHRoZSBzbGlkZSBsZXZlbCBvZiBncmFudWxhcml0eS4KCkBub2Rl IEFmZmlsaWF0ZWQgQnVmZmVycwpAc3Vic2VjdGlvbiBBZmZpbGlhdGVkIEJ1ZmZlcnMKClRoZXJl IGlzIG5vIHRyYWNraW5nIHdoZXRoZXIgYSBidWZmZXIgaXMgcGFydCBvZiB0aGUgcHJlc2VudGF0 aW9uIG9yIG5vdC4gIEhvdyB3b3VsZCBhIGJ1ZmZlciBiZWNvbWUgb25lPyAgU2hvdWxkIGl0IGJl IGltcGxpY2l0PyAgV2l0aG91dCBhbnkgc29ydCBvZiB0cmFja2luZ0Bjb21tYXt9IHRoZSBjb25z ZXF1ZW5jZSBpcyB0aGF0IGhhdmluZyBhIHByZXNlbnRhdGlvbiBvcGVuIGxlYXZlcyB0aGUgbWlu b3IgbW9kZSBiaW5kaW5ncyBob3QuICBUaGVzZSBjb21tYW5kcyBkbyB3ZWlyZCB0aGluZ3Mgd2hl biBydW4gZnJvbSB0aGVzZSBzaXR1YXRpb25zQGNvbW1he30gZXNwZWNpYWxseSBpZiBydW5uaW5n IGJhYmVsIHNjcmlwdHNAY29tbWF7fSBzbyBzb21lIGtpbmQgb2YgZmlyc3QtY2xhc3MgYnVmZmVy IGFmZmlsaWF0aW9uIHNlZW1zIG5lY2Vzc2FyeS4KCkBub2RlIE5vbi1HcmFwaGljIERpc3BsYXkK QHN1YnNlY3Rpb24gTm9uLUdyYXBoaWMgRGlzcGxheQoKRm9yIHRlcm1pbmFsc0Bjb21tYXt9IHRo ZSBsaW5lLWhlaWdodCBiYXNlZCBzbGlkZS1pbiBlZmZlY3QgaXMgbm90IHN1cHBvcnRlZC4KCkBu b2RlIEltcHJvcGVyIExldmVscwpAc3Vic2VjdGlvbiBJbXByb3BlciBMZXZlbHMKCkNoaWxkcmVu IHdpdGggbm8gcGFyZW50cyBvciBtaXNzaW5nIGEgbGV2ZWwgYXJlIGN1cnJlbnRseSBub3Qgc3Vw cG9ydGVkIGFuZCBsaWtlbHkgY2F1c2UgYmFkIGJlaGF2aW9yLgoKQG5vZGUgQ291bnRpbmcgU2xp ZGVzCkBzdWJzZWN0aW9uIENvdW50aW5nIFNsaWRlcwoKRXNwZWNpYWxseSBpZiBzbGlkZXMgbGF1 bmNoIHN1Yi1zZXF1ZW5jZXNAY29tbWF7fSBhbmQgdGhleSBkbyBpdCBmcm9tIExpc3BAY29tbWF7 fSB0aGlzIGlzIGhhcmQuICBCdWZmZXIgc2xpZGVzIGFuZCBhbHNvIHNsaWRlIGFjdGlvbnMgbWFr ZSBpdCBzb21ld2hhdCBhbWJpZ3VvdXMuICBDb3VudGluZyB0cmVlcyBvciB0cmFja2luZyB0aGUg cG9pbnQgbWlnaHQgYmUgZWFzaWVyLiAgQSBAY29kZXtjaGlsZHJlbn0gbWV0aG9kIGZvciBzZXF1 ZW5jZXMgd29ya3MgYXMgbG9uZyBhcyBzZXF1ZW5jZXMgYWN0dWFsbHkgaW1wbGVtZW50IGl0LgoK QG5vZGUgTm9uLU9yZyBTZXF1ZW5jZXMKQHN1YnNlY3Rpb24gTm9uLU9yZyBTZXF1ZW5jZXMKClRo ZXJlJ3Mgbm8gY29uY3JldGUgcmVhc29uIHdoeSBwcmVzZW50YXRpb25zIG5lZWQgdG8gc3RhcnQg d2l0aCBPcmcgbW9kZSBidWZmZXJzLiAgVGhlIGRlY2sgb2JqZWN0IGNvdWxkIGhhdmUgaXRzIG9y Zy1zcGVjaWZpYyBmdW5jdGlvbmFsaXR5IHB1c2hlZCBkb3duIHRvIGFuIG9yZy1tb2RlIGNsYXNz LiAgVGhlIG9ubHkgcmVxdWlyZW1lbnQgaXMgdG8gYmUgYWJsZSB0byBoeWRyYXRlIHNvbWUgc3Rh dGVmdWwgc2VxdWVuY2VzQGNvbW1he30gd2hpY2ggbWF5IGh5ZHJhdGUgYW5kIGNhbGwgaW50byBz dWItc2VxdWVuY2VzQGNvbW1he30gbWVhbmluZyBhbnl0aGluZyBpcyBwcmV0dHkgdHJpdmlhbGx5 IHBvc3NpYmxlLgoKQG5vZGUgVGhhbmtzCkBjaGFwdGVyIFRoYW5rcwoKVGhpcyBwYWNrYWdlIGlz IGEgZGlyZWN0IGRlc2NlbmRhbnQgb2YgVGFrYWFraSBJU0hJS0FXQSdzIEB1cmVme2h0dHBzOi8v Z2l0aHViLmNvbS90YWtheHAvb3JnLXRyZWUtc2xpZGUsIG9yZy10cmVlLXNsaWRlfSBwYWNrYWdl LiAgTWFueSBvZiB0aGUgaWRlYXMgYW5kIHNvbWUgb2YgdGhlIGltcGxlbWVudGF0aW9ucyB3ZXJl IGVpdGhlciBpbmhlcml0ZWQgb3IgaW5zcGlyZWQgYnkgaWRlYXMgZnJvbSB0aGF0IHBhY2thZ2Uu ICBUaGlzIHBhY2thZ2Ugd291bGQgbm90IGV4aXN0IHdpdGhvdXQgdGhlIGluc3BpcmF0aW9uLiAg VGhhbmtzIHRvIGV2ZXJ5b25lIHdobyBjb250cmlidXRlZCBvbiBvcmctdHJlZS1zbGlkZS4KCkBu b2RlIFByb251bmNpYXRpb24KQGNoYXB0ZXIgUHJvbnVuY2lhdGlvbgoKV2hpbGUgaXQgbWF5IGhh dmUgYmVlbiBzcG9rZW4gbWFueSB0aW1lcyBiZWZvcmVAY29tbWF7fSBsZXQgaXQgYmUgb2ZmaWNp YWwgdGhhdCB0aGVyZSBpcyBubyBjb3JyZWN0IHdheSB0byBwcm9ub3VuY2UgRFNMIElERUAuICBI ZXJlIGFyZSBzb21lIG9wdGlvbnM6CgpAaXRlbWl6ZQpAaXRlbQpELVMtTCBJLUQtRTogYXMgaWYg aXQgaXMgYW4gSURFIGZvciBkZXNpZ25pbmcgRFNMc0Bjb21tYXt9IGNsZWFybHkgZmFsc2UgYW5k IHByZXRlbnRpb3VzIHNvdW5kaW5nQGNvbW1he30gYnV0IHRob3NlIHdobyBrZWVwIHNjb3JlIGxv c2UgZm9yIGJlaW5nIHRvbyBhbnhpb3VzIHRvIHdpbgpAaXRlbQpEJ3NsaWRlOiBwZXJoYXBzQGNv bW1he30gYGB0aGUgc2xpZGUnJwpAaXRlbQpERUVFIHNsaWRlOiBXZSBhcmUgZ29pbmcgdW4gdW4t c2xpZGUgeW91ciBzbGlkZS4gIFBvd2VycG9pbnQgaXMgbm8gbW9yZS4gIEVtYWNzIGhhcyB0cml1 bXBoZWQgb3ZlciB0aGUgYm9hcmQgcm9vbSBhdCBsYXN0CkBlbmQgaXRlbWl6ZQoKUGxlYXNlIHNw cmVhZCB0aGVzZSBhbmQgb3RoZXIgaW50ZW50aW9uYWxseSB3cm9uZ2Z1bCBwcm9udW5jaWF0aW9u cyB0byBwcm90ZWN0IHRob3NlIHdobyBoYXZlIG9ubHkgZXZlciByZWFkIHRoZSBuYW1lIGZyb20g cGVyc2VjdXRpb24gYnkgc2VsZi1hbm5vaW50ZWQgaW4tZ3JvdXBzIHdobyBjbGFpbSB0byBrbm93 IHRoZSBjb3JyZWN0IHdheSB0byBwcm9ub3VuY2UgdGhpcyBtYWRlIHVwIHdvcmQuCgpAbm9kZSBJ bmRpY2VzCkBjaGFwdGVyIEluZGljZXMKCkBtZW51CiogQ29tbWFuZCBhbmQgRnVuY3Rpb24gaW5k ZXg6OgoqIENvbmNlcHQgaW5kZXg6OgoqIFZhcmlhYmxlIGluZGV4OjoKQGVuZCBtZW51CgpAbm9k ZSBDb21tYW5kIGFuZCBGdW5jdGlvbiBpbmRleApAc2VjdGlvbiBDb21tYW5kIGFuZCBGdW5jdGlv biBpbmRleAoKQHByaW50aW5kZXggZm4KCkBub2RlIENvbmNlcHQgaW5kZXgKQHNlY3Rpb24gQ29u Y2VwdCBpbmRleAoKQHByaW50aW5kZXggY3AKCkBub2RlIFZhcmlhYmxlIGluZGV4CkBzZWN0aW9u IFZhcmlhYmxlIGluZGV4CgpAcHJpbnRpbmRleCB2cgoKQGJ5ZQoAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkc2xpZGUtMC41LjQuMC4yMDI0MTEy My42Mjc0OS9kb2MvUkVBRE1FLm9yZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY2NAAwMDAxNzUwADAwMDE3NTAAMDAwMDAwMTI2MzYA MTQ3MjAzMTMzMDYAMDE1MDU3ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAHVzdGFyICAAcGhpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwaGkAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMrdGl0bGU6CURvbWFpbiBTcGVjaWZp YyBzTElERXMKIythdXRob3I6CVBvc2l0cm9uCiMrZW1haWw6CWNvbnRhY3RAcG9zaXRyb24uc29s dXRpb25zCgojK2V4cG9ydF9maWxlX25hbWU6IC4uL1JFQURNRS5tZAojK29wdGlvbnM6IHRvYzpu aWwgYnJva2VuLWxpbmtzOm5pbCBudW06bmlsCgojK2JlZ2luX2V4cG9ydCBodG1sCjwhLS0gISEh VEhJUyBGSUxFIEhBUyBCRUVOIEdFTkVSQVRFRCEhISBFZGl0IFJFQURNRS5vcmcgLS0+CiMrZW5k X2V4cG9ydAoKIytiZWdpbl9leHBvcnQgbWFya2Rvd24KaHR0cHM6Ly9naXRodWIuY29tL3Bvc2l0 cm9uLXNvbHV0aW9ucy9kc2xpZGUvYXNzZXRzLzczNzEwOTMzLzA2YTY2ZTQyLWExNzItNDhiYS05 NjhmLTVmNWIxOTg5YTg2OAojK2VuZF9leHBvcnQKCiMrYmVnaW5fZXhwb3J0IGh0bWwKPGEgaHJl Zj0iaHR0cHM6Ly9tZWxwYS5vcmcvIy9kc2xpZGUiPjxpbWcgc3JjPSJodHRwczovL21lbHBhLm9y Zy9wYWNrYWdlcy9kc2xpZGUtYmFkZ2Uuc3ZnIiBhbHQ9Im1lbHBhIHBhY2thZ2UiPjwvYT4gPGEg aHJlZj0iaHR0cHM6Ly9zdGFibGUubWVscGEub3JnLyMvZHNsaWRlIj48aW1nIHNyYz0iaHR0cHM6 Ly9zdGFibGUubWVscGEub3JnL3BhY2thZ2VzL2RzbGlkZS1iYWRnZS5zdmciIGFsdD0ibWVscGEg c3RhYmxlIHBhY2thZ2UiPjwvYT4KPGEgaHJlZj0iaHR0cHM6Ly9lbHBhLm5vbmdudS5vcmcvbm9u Z251L2RzbGlkZS5odG1sIj48aW1nIHNyYz0iaHR0cHM6Ly9lbHBhLm5vbmdudS5vcmcvbm9uZ251 L2RzbGlkZS5zdmciIGFsdD0iTm9uLUdOVSBFTFBBIj48L2E+CiMrZW5kX2V4cG9ydAoKKiBQcmVz ZW50IE9yZyBEb2N1bWVudHMg8J+mhAo6UFJPUEVSVElFUzoKOlVOTlVNQkVSRUQ6IG5vdG9jCjpF TkQ6Ci0gUGVyLWhlYWRpbmcgY29uZmlndXJhYmxlIGJlaGF2aW9yCi0gTmVzdGVkIG9yIGluZGVw ZW5kZW50IGNoaWxkIHNsaWRlcwotIEhlYWRlciB3aXRoIGJyZWFkY3J1bWJzIGdlbmVyYXRlZCBm cm9tIGRvY3VtZW50IGtleXdvcmRzCi0gQWN0aW9ucyB0aGF0IGNvbnN1bWUgdHlwaWNhbCBvcmcg ZGF0YSBpbiBzbWFydCB3YXlzCioqIEZ1bGx5IFByb2dyYW1tYWJsZSAg4pyoCi0gU2NyaXB0IHN0 ZXBzIGluIHlvdXIgcHJlc2VudGF0aW9uIHdpdGggT3JnIGJhYmVsIGJsb2NrcwotIEluY29ycG9y YXRlICphbnl0aGluZyogRW1hY3MgZG9lcyBpbnRvIGEgcHJlc2VudGF0aW9uCi0gQ29udmVuaWVu dCBBUEkgZm9yIHF1aWNrbHkgd3JpdGluZyByZWxpYWJsZSBjdXN0b20gYWN0aW9ucyBmb3IgcmV1 c2UKKiogU3RhdHVzIPCfm6DvuI8KVmVyc2lvbiAwLjUuNCDwn5G3ICBTdWJzY3JpYmUgdG8gUG9z aXRyb24ncyBbW2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BQb3NpdHJvbi1ndjdkb11bWW91VHVi ZV1dIGZvciB1cGRhdGVzIGFuZCByZWxhdGVkIGRlbW9uc3RyYXRpb25zLgotIFN0YWJpbGl6aW5n IHRoZSBBUEkgYW5kIG5hbWluZyAoZXN0aW1hdGVkIDk4JSBzdGFibGUpCi0gR2F0aGVyaW5nIHVz ZXIgZmVlZGJhY2sgJiBleHBlcmllbmNlIHRvIHBpbnBvaW50IGFjdHVhbCB1c2UgcGF0dGVybnMK LSBBY2NlcHRpbmcgUFIncyBhbmQgaXNzdWUgcmVwb3J0cwotIFNvbWUgYmVoYXZpb3JzIG1heSBi ZSBhZHZlcnRpc2VkIGFzIHdvcmtpbmcgYWxyZWFkeSB3aGVuIHRoZXkgYXJlIG9ubHkgOTAlIGlt cGxlbWVudGVkLiAgSSBoYXZlIG5vIGlkZWEgd2hhdCB5b3Ugd2FudC4gICpGaWxlIGlzc3Vlcyou CiogSW5zdGFsbGF0aW9uCjpQUk9QRVJUSUVTOgo6VU5OVU1CRVJFRDogbm90b2MKOkVORDoKICMr YmVnaW5fc3JjIGVsaXNwCiAgIDs7IEZyb20gTUVMUEEgb3IgRUxQQQogICAodXNlLXBhY2thZ2Ug ZHNsaWRlKQoKICAgOzsgcGFja2FnZS12YwogICAocGFja2FnZS12Yy1pbnN0YWxsCiAgICAnKGRz bGlkZQogICAgICA6dXJsICJodHRwczovL2dpdGh1Yi5jb20vcG9zaXRyb24tc29sdXRpb25zL2Rz bGlkZS5naXQiKSkKCiAgIDs7IHVzaW5nIGVscGFjYSdzIHdpdGggZXhwbGljaXQgcmVjaXBlCiAg ICh1c2UtcGFja2FnZSBkc2xpZGUKICAgICAgIDplbHBhY2EgKGRzbGlkZSA6aG9zdCBnaXRodWIK ICAgICAgICAgICAgICAgICAgICAgICA6cmVwbyAicG9zaXRyb24tc29sdXRpb25zL2RzbGlkZSIp KQoKICAgOzsgc3RyYWlnaHQgd2l0aCBleHBsaWNpdCByZWNpcGUKICAgKHVzZS1wYWNrYWdlIGRz bGlkZQogICAgICAgOnN0cmFpZ2h0IChkc2xpZGUgOnR5cGUgZ2l0IDpob3N0IGdpdGh1YgogICAg ICAgICAgICAgICAgICAgICAgICAgOnJlcG8gInBvc2l0cm9uLXNvbHV0aW9ucy9kc2xpZGUiKSkK CiAgIDs7IG9yIHVzZSBtYW51YWwgbG9hZC1wYXRoICYgcmVxdWlyZSwgeW91IGJyYXZlIHlhayBz aGF2ZXIKICMrZW5kX3NyYwoqKiBUcnkgSXQgT3V0CldpdGgganVzdCBkZWZhdWx0cywgcnVuIH5k c2xpZGUtZGVjay1zdGFydH4gb24geW91ciBleGlzdGluZyBkb2N1bWVudHMuICBZb3UgY2FuIGxv YWQgdGhlIGV4YW1wbGVzIGluIHRoZSBbW2ZpbGU6Li90ZXN0L2RlbW8ub3JnXVsuL3Rlc3QvZGVt by5vcmddXSBmaWxlIHRvIHNlZSBhIHNob3djYXNlIG9mIGNvbmZpZ3VyYXRpb24gYmVoYXZpb3Iu CgpUaGUgZGVmYXVsdCBrZXltYXAgdXNlcyBhcnJvdyBrZXlzLiAgTGVmdCBhbmQgcmlnaHQgYXJl IH5kc2xpZGUtZGVjay1mb3J3YXJkfiBhbmQgfmRzbGlkZS1kZWNrLWJhY2t3YXJkfi4gIFVwIGlz IH5kc2xpZGUtZGVjay1zdGFydH4gYW5kIHdpbGwgc2hvdyB0aGUgY29udGVudHMuICBEb3duIGlz IH5kc2xpZGUtZGVjay1zdG9wfiBhbmQgd2lsbCBzdG9wIHRoZSBzbGlkZSBzaG93LgoqIEZlYXR1 cmVzCjpQUk9QRVJUSUVTOgo6VU5OVU1CRVJFRDogbm90b2MKOkVORDoKKiogU2ltcGxlIFVzZXIg SW50ZXJmYWNlCkZ1bGx5IHByb2dyYW1tYWJsZSBzZXF1ZW5jZXMgYmVoaW5kIGEgdHdvLWJ1dHRv biBwcmVzZW50YXRpb24gaW50ZXJmYWNlOgotIH5kc2xpZGUtZGVjay1mb3J3YXJkfgotIH5kc2xp ZGUtZGVjay1iYWNrd2FyZH4KKiogQ29udGVudHMgTmF2aWdhdGlvbgpDYWxsIH5kc2xpZGUtY29u dGVudHN+IHRvIHNob3cgYSBjb250ZW50cyBvdmVydmlldy4gIENhbGxpbmcgfmRzbGlkZS1kZWNr LWZvcndhcmR+IGFuZCB+ZHNsaWRlLWRlY2stYmFja3dhcmR+IGluIHRoZSBjb250ZW50cyBjYW4g cXVpY2tseSBtb3ZlIHRocm91Z2ggaGVhZGluZ3MuICBDYWxsIH5kc2xpZGUtZGVjay1zdGFydH4g YWdhaW4gdG8gcmVzdW1lIHRoZSBwcmVzZW50YXRpb24gZnJvbSB0aGF0IHBvaW50LgoqKiBOYXJy YXRlIFdoaWxlIFByZXNlbnRpbmcKQ2hlY2sgb3V0IH5kc2xpZGUtZGVjay1kZXZlbG9wfi4gIFlv dSBjYW4gc2VlIHlvdXIgaGlkZGVuIGNvbW1lbnRzIGFuZCB0aGUgYXBwcm94aW1hdGUgcHJvZ3Jl c3MgaW5kaWNhdGlvbnMuICBCYWJlbCBhY3Rpb25zIHdpbGwgaGlnaGxpZ2h0IGJsb2NrcyBhcyB0 aGV5IGV4ZWN1dGUsIHNob3dpbmcgeW91IHdoYXQganVzdCBoYXBwZW5lZC4KKiogSGlkZSBNYXJr dXAKQnkgZGVmYXVsdCwgdGhlIH5kc2xpZGUtYWN0aW9uLWhpZGUtbWFya3VwfiBhY3Rpb24gaXMg Y29uZmlndXJlZCBpbiB+ZHNsaWRlLWRlZmF1bHQtYWN0aW9uc34uICBMb29rcyBjbGVhbiBvdXQg b2YgdGhlIGJveC4gIENvbW1lbnRlZCBhbmQgPTpub3NsaWRlOj0gb3IgPTpub2V4cG9ydDo9IGhl YWRpbmdzIGFyZSBmaWx0ZXJlZC4gIFRvZG9zIGFuZCB0YWdzIGFyZSBoaWRkZW4uCioqIEluZGVw ZW5kZW50IEJ1ZmZlciBTdGF0ZQpUaGUgYWN0dWFsIGRpc3BsYXkgaXMgZG9uZSBpbiBhbiBpbmRp cmVjdCBidWZmZXIuICBZb3VyIGhvb2tzIGFuZCBjdXN0b21pemF0aW9ucyBmb3IgcHJlc2VudGF0 aW9uIHdpbGwgbm90IHBvbGx1dGUgeW91ciBlZGl0aW5nIGJ1ZmZlci4gIERpcnR5IHN0YXRlIHdp bGwgbm90IHBpbGUgdXAgaW4geW91ciBwcmVzZW50YXRpb24gYnVmZmVyLCBncmVhdGx5IGluY3Jl YXNpbmcgcmVsaWFiaWxpdHkgZXZlbiBpZiB5b3VyIGN1c3RvbSBFbGlzcCBzY3JpcHRpbmcgaXMg c2xvcHB5IPCfkqkuCgojK3RvYzogaGVhZGxpbmVzIDIKCiMraW5jbHVkZTogIm1hbnVhbC5vcmc6 OipDcmVhdGluZyIgOm1pbmxldmVsIDEKIytpbmNsdWRlOiAibWFudWFsLm9yZzo6KlByZXNlbnRp bmciIDptaW5sZXZlbCAxCiMraW5jbHVkZTogIm1hbnVhbC5vcmc6OipDb25maWd1cmluZyIgOm1p bmxldmVsIDEKIytpbmNsdWRlOiAibWFudWFsLm9yZzo6KkV4dGVuZGluZyIgOm1pbmxldmVsIDEK IytpbmNsdWRlOiAibWFudWFsLm9yZzo6KkhhY2tpbmciIDptaW5sZXZlbCAxCiogUGFja2FnZSBQ YWlyaW5ncwpUaGVzZSBhcmUgc29tZSBwYWNrYWdlcyB0aGF0IGFyZSBsaWtlbHkgdG8gZmluZCB1 c2UgYWxvbmdzaWRlIGRzbGlkZS4KKiogT3JnIE1vZGVybgpCdWxsZXRzIGFuZCBtYW55IHByZXR0 aWZpY2F0aW9ucyBvZiBjb21tb24gb3JnIG1hcmt1cHMuICBUaGUgbWFya3VwIHRoYXQgeW91IGRv bid0IGhpZGUgbG9va3MgYmV0dGVyIHdpdGggb3JnIG1vZGVybi4KKiogT3JnIEFwcGVhcgpOZXZl ciB3b3JyeSBhYm91dCB0dXJuaW5nIG9uIHByZXR0eSBsaW5rcyBmb3IgYSBwcmVzZW50YXRpb24u ICBFZGl0IHRoZW0gYnkganVzdCBtb3ZpbmcgdGhlIHBvaW50IGluc2lkZS4KKiogTWFzdGVyIG9m IENlcmVtb25pZXMKVGhlIFtbaHR0cHM6Ly9naXRodWIuY29tL3Bvc2l0cm9uLXNvbHV0aW9ucy9t YXN0ZXItb2YtY2VyZW1vbmllc11bbWFzdGVyLW9mLWNlcmVtb25pZXNdXSBwYWNrYWdlIGlzIHBy aW1hcmlseSB1c2VkIGZvciBpdHMgfm1vYy1mb2N1c34gY29tbWFuZCB3aGljaCBpc29sYXRlcyBz bWFsbCBzbmlwcGV0cyBvZiBidWZmZXIgdGV4dCB0byBtYWtlIGZ1bGxzY3JlZW4gYW5kIHByZXR0 eS4gIFlvdSBjYW4gc2F2ZSByZXBsYXkgdGhlc2Ugc25pcHBldHMgd2l0aG91dCBoYXZpbmcgYWNj ZXNzIHRvIGEgc291cmNlIGJ1ZmZlci4KCkNoZWNrIHRoZSBmdWxsIGNvbW1hbmRzIGJ5IHByZXNz aW5nID1oPSBkdXJpbmcgZm9jdXMuICBZb3UgY2FuIGhpZ2hsaWdodCBhIHJlZ2lvbiwgc2F2ZSBh biBleHByZXNzaW9uIHRvIHBsYXliYWNrIGEgY29kZSBzbmlwcGV0IHdpdGhvdXQgdGhlIGJ1ZmZl ciBvcGVuIGV0Yy4KKiogT3BlbiBCcm9hZGNhc3RlciBTb2Z0d2FyZQpTYWNoYSBDaHVhIGhhcyB3 cml0dGVuIGFuIE9CUyBwbHVnaW4gaW50ZWdyYXRpb24gaGVscGZ1bCBmb3IgdmlkZW8gaW50ZWdy YXRpb24gW1todHRwczovL2dpdGh1Yi5jb20vc2FjaGFjL29icy13ZWJzb2NrZXQtZWxdW29icy13 ZWJzb2NrZXQtZWxdXS4KKiogbW9vbS5lbApUaGUgW1todHRwczovL2dpdGh1Yi5jb20vdGFrYXhw L21vb20jb3JnLW1vZGUtb3JnLXRyZWUtc2xpZGVdW21vb21dXSBwYWNrYWdlIGNvbnRhaW5zIHNv bWUgY29tbWFuZHMgZm9yIHJlc2l6aW5nIHRleHQgYW5kIHJlcG9zaXRpb25pbmcgZnJhbWVzLgoK IytpbmNsdWRlOiAibWFudWFsLm9yZzo6KkNvbnRyaWJ1dGluZyIgOm1pbmxldmVsIDEKIytpbmNs dWRlOiAibWFudWFsLm9yZzo6KlRoYW5rcyIgOm1pbmxldmVsIDEKAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkc2xpZGUtMC41LjQuMC4yMDI0MTEyMy42Mjc0OS9kb2Mv bWFudWFsLm9yZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAMDAwMDY2NAAwMDAxNzUwADAwMDE3NTAAMDAwMDAxMDAyMjEAMTQ3MjA3MDQxNTEA MDE1MzY1ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFy ICAAcGhpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwaGkAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAACMrdGl0bGU6IERvbWFpbiBTcGVjaWZpYyBzTElERXMKIytz dWJ0aXRsZTogZm9yIHZlcnNpb24ge3t7cGFja2FnZS12ZXJzaW9ufX19CiMrYXV0aG9yOiB7e3tw YWNrYWdlLWF1dGhvcn19fQojK2VtYWlsOiB7e3twYWNrYWdlLWVtYWlsfX19CiMrZGF0ZTogMjAy NC17e3t5ZWFyfX19CiMrcHJvcGVydHk6IGhlYWRlci1hcmdzIDpldmFsIG5vYAojK29wdGlvbnM6 IGJyb2tlbi1saW5rczpuaWwgXG46bmlsIDo6dCB8OnQgXjpuaWwgLTp0IGY6dCAqOnQgPDp0IGU6 dCAnOnQKIytvcHRpb25zOiBkOm5pbCB0b2RvOm5pbCBwcmk6bmlsIHRhZ3M6bm90LWluLXRvYyBz dGF0Om5pbAojK2xhbmd1YWdlOiBlbgojK2V4cG9ydF9maWxlX25hbWU6IGRzbGlkZS50ZXhpCiMr dGV4aW5mb19kaXJfY2F0ZWdvcnk6IEVtYWNzCiMrdGV4aW5mb19kaXJfdGl0bGU6IERzbGlkZTog KGRzbGlkZSkuCiMrdGV4aW5mb19kaXJfZGVzYzogQSBwcmVzZW50YXRpb24gZnJhbWV3b3JrCiMr bWFjcm86IHBhY2thZ2UtdmVyc2lvbiAoZXZhbCAoaWYgKHJlcXVpcmUgJ2VyayBuaWwgdCkgKGVy ay1wYWNrYWdlLXZlcnNpb24pICIwLjQuMCIpKQojK21hY3JvOiBwYWNrYWdlLWF1dGhvciAoZXZh bCAoaWYgKHJlcXVpcmUgJ2VyayBuaWwgdCkgKGVyay1wYWNrYWdlLWF1dGhvcikgIlBvc2l0cm9u IikpCiMrbWFjcm86IHBhY2thZ2UtZW1haWwgKGV2YWwgKGlmIChyZXF1aXJlICdlcmsgbmlsIHQp IChlcmstcGFja2FnZS1lbWFpbCAiY29udGFjdEBwb3NpdHJvbi5zb2x1dGlvbnMiKSkpCiMrbWFj cm86IHllYXIgKGV2YWwgKGZvcm1hdC10aW1lLXN0cmluZyAiJVkiKSkKIyt0ZXhpbmZvX2hlYWRl cjogQGNvbW1lbnQgISEhVEhJUyBGSUxFIEhBUyBCRUVOIEdFTkVSQVRFRCEhISBFZGl0IG1hbnVh bC5vcmcgaW5zdGVhZCEKCiogSW50cm9kdWN0aW9uCjpQUk9QRVJUSUVTOgo6REVTQ1JJUFRJT046 IFdoeSBZb3UgSGVhcnQgRFNMIElERQo6RU5EOgpEc2xpZGUgaXMgZGVzaWduZWQgZm9yIGNvbmR1 Y3RpbmcgcHJlc2VudGF0aW9ucyBpbiBFbWFjcy4gIEFic3RyYWN0bHksIGEgcHJlc2VudGF0aW9u IGlzIGEgc2NyaXB0ZWQgc2VxdWVuY2Ugb2YgY29udGVudC4gIE9yZyBtb2RlIGRvY3VtZW50cyBh cmUgdGhlIHByaW1hcnkgbWVhbnMgb2YgZW5jb2RpbmcgdGhlc2Ugc2VxdWVuY2VzIGZvciBkc2xp ZGUuCgpXaGF0IGRzbGlkZSBwcmltYXJpbHkgYWRkcyB0byBFbWFjcyBhbmQgT3JnIE1vZGU6Cgot IFNpbXBsaWZpZWQgdXNlciBpbnRlcmZhY2Ugc3VpdGFibGUgZm9yIGEgcHJlc2VudGF0aW9uIHJl bW90ZSBjb250cm9sbGVyCi0gRGF0YSBtb2RlbCB0aGF0IGFkYXB0cyBFbWFjcyB0byB0aGlzIGlu dGVyZmFjZQotIE1ldGhvZCBvZiBhdHRhY2hpbmcgcmV1c2FibGUsIGNvbmZpZ3VyYWJsZSBwcm9n cmFtbWVkIGJlaGF2aW9yIHRvIG9yZyBtb2RlIGNvbnRlbnQKLSBFeHRlbnNpYmxlIGZyYW1ld29y ayBmb3IgY3JlYXRpbmcgY3VzdG9tIHByb2dyYW1tZWQgYmVoYXZpb3IKLSBQcmVzZW50ZXIgdG9v bHMgc3VjaCBhcyB2aWV3aW5nIGhpZGRlbiBjb250ZW50IGludmlzaWJsZSB0byB0aGUgYXVkaWVu Y2UKKiogRGVzaWduIEdvYWxzCjpQUk9QRVJUSUVTOgo6REVTQ1JJUFRJT046IFRoaW5ncyBIb3Bl ZnVsbHkgQWNoaWV2ZWQKOkVORDoKR3JhbnVsYXIgY29uZmlndXJhYmlsaXR5IHdhcyB0aGUgZmly c3QgZ29hbC4gIERzbGlkZSdzIHByZWRlY2Vzc29yLCB+b3JnLXRyZWUtc2xpZGV+LCBjb3VsZCBv bmx5IGJlIGNvbmZpZ3VyZWQgYXQgdGhlIGxldmVsIG9mIHRoZSBlbnRpcmUgZG9jdW1lbnQsIHVz aW5nIGN1c3RvbWl6ZSB2YXJpYWJsZXMuCgpQcm9ncmFtbWFiaWxpdHkgcXVpY2tseSBiZWNhbWUg cHJpbWFyeSBtb3RpdmF0aW9uIHRvIGRldmVsb3AgZHNsaWRlIGZ1cnRoZXIuICBPcmcgYmFiZWwg YmxvY2tzIGNhbiBiZSB1c2VkIGFzIHN0ZXBzIG9mIGEgZHNsaWRlIHByZXNlbnRhdGlvbi4gIEJ5 IHNjcmlwdGluZyBFbWFjcyB2aWEgRWxpc3Agd2l0aGluIG9yZyBiYWJlbCBibG9ja3MsIGJlY2F1 c2UgRW1hY3Mgc2l0cyBvbiB0b3Agb2YgYWxsIHlvdXIgb3RoZXIgcHJvZ3JhbW1pbmcgdG9vbHMg YW5kIHN1Yi1wcm9jZXNzZXMsIHNvIGRvZXMgZHNsaWRlLiAgVGhlIGFjdGlvbiBzeXN0ZW0gaXMg YSBmcmFtZXdvcmsgZm9yIGF0dGFjaGluZyByZXVzYWJsZSwgY29uZmlndXJhYmxlIHByb2dyYW1t ZWQgYmVoYXZpb3IgdG8gbXVsdGlwbGUgaGVhZGluZ3MuCgpIaWdoIHByb2R1Y3Rpdml0eSB3YXMg YW5vdGhlciBnb2FsLiAgV2l0aCBhIGRlY2VudCBvcmcgY29uZmlndXJhdGlvbiwgdXNlIGJhc2lj IG1hcmt1cCB0byBvYnRhaW4gYSBkZWNlbnQgcHJlc2VudGF0aW9uLiAgT3JnIG1vZGUncyBwcm9w ZXJ0aWVzIGFuZCBrZXl3b3JkcyBhcmUgdXNlZCB0byBhdHRhY2ggYW5kIGNvbmZpZ3VyZSByZXVz YWJsZSBiZWhhdmlvciB0byBzbGlkZXMuICBEc2xpZGUgcmVzcGVjdHMgZXhwb3J0IHNldHRpbmdz LCBhbGxvd2luZyBjb250ZW50IHRvIHZhcnkgYmV0d2VlbiBwcmVzZW50YXRpb24gYW5kIGV4cG9y dC4gIFlvdSBjYW4gdXNlIHRoZSBwcmVzZW50YXRpb24gb3JnIGRvY3VtZW50IGl0c2VsZiB0aGUg c2FtZSB3YXkgeW91IHVzZSBvdGhlciBvcmcgZG9jdW1lbnRzLCB0byBzdG9yZSBhbmQgb3JnYW5p emUgaW5mb3JtYXRpb24uCioqIFN0cmVuZ3Rocwo6UFJPUEVSVElFUzoKOkRFU0NSSVBUSU9OOiBX aGVuIERzbGlkZSBpcyBQZXJmZWN0CjpFTkQ6CkRzbGlkZSBpcyBwYXJ0aWN1bGFybHkgZ29vZCBm b3IgcHJlc2VudGF0aW9ucyB0aGF0IGFyZSBmb3IgaW50ZXJuYWwgdXNlIG9yIGludGVuZGVkIGZv ciBjbG9zZWQgYXVkaWVuY2VzLCB3aGVyZSB0aGUgcG9saXNoIHRoYXQgd291bGQgYmUgZGlyZWN0 ZWQgYXQgZW5kIGNvbnN1bWVycyBpcyB1bm5lZWRlZCBhbmQgY291bGQgZXZlbiBiZSBzZWVuIGFz IGFuIGluYXBwcm9wcmlhdGUgZXhwZW5zZSBvZiB0aW1lOgoKLSBUZWNoIGRlbW9zCi0gRWFybHkg c3RhZ2Ugc3RhcnR1cCBwaXRjaGVzCi0gQ29uZHVjdGluZyB0ZWFtIG1lZXRpbmdzCiogR2xvc3Nh cnkKOlBST1BFUlRJRVM6CjpERVNDUklQVElPTjogV29yZHMgV2UgSW52ZW50ZWQKOkVORDoKLSA9 RGVjaz06IGFuIG9iamVjdCB0aGF0IGlzIHVzZWQgdG8gcmVsYXRlIHRoZSBkaXNwbGF5IGFuZCBi YXNlIGJ1ZmZlciBhbmQgaXMgdGhlIHJvb3Qgb2YgYWxsIHNlcXVlbmNlcy4gIEl0J3MgYW5vdGhl ciB3b3JkIGZvciAicHJlc2VudGF0aW9uIiBvciBQVC4KLSA9U2xpZGU9OiBhbiBvYmplY3QgdGhh dCBpbnRlcnByZXRzIGFuIG9yZyBoZWFkaW5nIHRvIGh5ZHJhdGUgaXRzIGFjdGlvbnMKLSA9QWN0 aW9uPTogYW4gb2JqZWN0IHRoYXQgcmVzcG9uZHMgdG8gfmRzbGlkZS1kZWNrLWZvcndhcmR+IGFu ZCB+ZHNsaWRlLWRlY2stYmFja3dhcmR+IGNhbGxzIGFuZCBpbXBsZW1lbnRzIGxpZmVjeWNsZSBt ZXRob2RzIHRvIGluaXRpYWxpemUgYW5kIGNsZWFuIHVwIHN0YXRlCiAgKyA9U2xpZGUgQWN0aW9u PTogYW4gYWN0aW9uIHN1YmNsYXNzIHRoYXQgaGFuZGxlcyBpbml0aWFsIGRpc3BsYXkgb2YgdGhl IHNsaWRlIGFuZCBjcmVhdGlvbiBvZiBjaGlsZCBzbGlkZXMgZnJvbSBzdWItaGVhZGluZ3MuCiAg KyA9U2VjdGlvbiBBY3Rpb25zPTogYWN0aW9ucyB0aGF0IHR5cGljYWxseSBjb250cm9sIHRoZSBk aXNwbGF5IGFuZCBiZWhhdmlvciBvZiBhIGhlYWRpbmcncyBzZWN0aW9uLCB0aGUgcmVnaW9uIGJl dHdlZW4gdGhlIGhlYWRsaW5lIGFuZCBjaGlsZCBoZWFkaW5ncy4KLSA9U3RlcD06IGEgc2luZ2xl IGNhbGwgdG8gfmRzbGlkZS1kZWNrLWZvd2FyZH4gb3IgfmRzbGlkZS1kZWNrLWJhY2t3YXJkfiwg dXN1YWxseSBkZWxlZ2F0ZWQgZG93biB0byB+ZHNsaWRlLWZvcndhcmR+IGFuZCB+ZHNsaWRlLWJh Y2t3YXJkfiBtZXRob2RzCi0gPUNvbnRlbnRzPTogQSB2aWV3IG9mIHRoZSBmb2xkZWQgdG9wLWxl dmVsIGhlYWRpbmdzIHRoYXQgaXMgdXNlZCBmb3IgcXVpY2tseSBuYXZpZ2F0aW5nIGJldHdlZW4g aGVhZGluZ3MgZHVyaW5nIGEgcHJlc2VudGF0aW9uLgotID1TbGlkZSBCdWZmZXI9OiB0aGUgc2xp ZGVzIGFyZSBzaG93biBpbiBhbiBpbmRpcmVjdCBidWZmZXIgdGhhdCBpcyBjbG9uZWQgZnJvbSB5 b3VyIG9yZyBkb2N1bWVudCBidWZmZXIuICBUaGUgc291cmNlIGlzIGNhbGxlZCB0aGUgKmJhc2Ug YnVmZmVyKi4gIENoZWNrIGZvciB0aGUgPWRlY2s6IG15LXByZXNlbnRhdGlvbi5vcmc9IGJ1ZmZl ciBuYW1lLgogICsgSW5kaXJlY3QgYnVmZmVyIGFuZCA9c2xpZGUtYnVmZmVyPSBhcmUgdXNlZCBp bnRlcmNoYW5nZWFibHkKICArIEJhc2UgYnVmZmVyIG9yID1iYXNlLWJ1ZmZlcj0gaXMgdXNlZCBw cmV0dHkgZXhjbHVzaXZlbHkKLSA9U3RhdGVmdWwgU2VxdWVuY2U9OiB+ZHNsaWRlLXN0YXRlZnVs LXNlcXVlbmNlfiBpcyBhbiBpbnRlcmZhY2UgdGhhdCBvdGhlciBjbGFzc2VzIGltcGxlbWVudCB3 aGVuIHRoZXkgd2lsbCByZWNlaXZlIGRlbGVnYXRlZCBjb21tYW5kcyBmcm9tIHRoZSB1c2VyLgoq KiBPcmcgTW9kZSBUZXJtcwo6UFJPUEVSVElFUzoKOkRFU0NSSVBUSU9OOiBPbmVzIFlvdSBNaWdo dCBOb3QgS25vdwo6RU5EOgpTZWxlY3Qgb3JnIG1vZGUgdGVybXMgbW9yZSBmcmVxdWVudGx5IHVz ZWQgYnkgZHNsaWRlLiAgRG9uJ3QgbWlzcyBbW2luZm86b3JnI09yZyBTeW50YXhdW09yZyBTeW50 YXggKG9yZyldXS4KCi0gPUVsZW1lbnQ9OiBvcmcgZG9jdW1lbnRzIGFyZSBwYXJzZWQgaW50byBl bGVtZW50cyBhbmQgb2JqZWN0cy4gIEhlYWRpbmdzLCBwbGFpbiBsaXN0cywgYW5kIGJsb2NrcyBh cmUgZXhhbXBsZXMgb2YgZWxlbWVudHMuICBTZWUgdGhlIFtbaHR0cHM6Ly9vcmdtb2RlLm9yZy93 b3JnL2Rldi9vcmctZWxlbWVudC1hcGkuaHRtbF1bb3JnIGVsZW1lbnQgYXBpXV0gZG9jdW1lbnRh dGlvbi4gIERzbGlkZSBtYWtlcyBoZWF2eSB1c2Ugb2Ygb3JnJ3MgZWxlbWVudCBwYXJzZXIgdG8g aW1wbGVtZW50IGl0cyBmZWF0dXJlcy4KLSA9S2V5d29yZD06IEEgc2luZ2xlID0jK2tleXdvcmRf c3R5bGU6PSBsaW5lIHVzZWQgdG8gc3BlY2lmeSBzb21lIG9wdGlvbgotID1BZmZpbGF0ZWQga2V5 d29yZD06IEEgPSMrYXR0cl9rZXl3b3JkX3N0eWxlOj0gbGluZSB0aGF0IGRpcmVjdGx5IHByZWNl ZWRzIGFuIGVsZW1lbnQgYW5kIGlzIHVzZWQgdG8gYWRkIG1ldGFkYXRhIHRvIGFyYml0cmFyeSBv cmcgZWxlbWVudHMKLSA9UHJvcGVydHk9OiBNZXRhIGRhdGEgYXR0YWNoZWQgdG8gaGVhZGluZ3Mu IFNlZSBbW2luZm86b3JnI1Byb3BlcnR5IFN5bnRheF1bUHJvcGVydHkgU3ludGF4IChvcmcpXV0K KiBDcmVhdGluZwo6UFJPUEVSVElFUzoKOkRFU0NSSVBUSU9OOiBNYWtpbmcgT3JnIERvY3VtZW50 cyBJbnRvIFByZXNlbnRhdGlvbnMKOkVORDoKTWFraW5nIGFuIG9yZyBkb2N1bWVudCBpbnRvIGEg cHJlc2VudGF0aW9uLgoqKiBBY3Rpb25zCjpQUk9QRVJUSUVTOgo6REVTQ1JJUFRJT046IE92ZXJ2 aWV3CjpFTkQ6CkJ5IGRlZmF1bHQsIHlvdSBqdXN0IGdldCBvbmUgc2xpZGUgcGVyIGhlYWRpbmcs IGEgaGVhZGVyLCBhbmQgc29tZSBhbmltYXRpb24uICBUaGlzIGlzIG5vdCB2ZXJ5IGV4Y2l0aW5n LiAgWW91IG5lZWQgdG8gYWRkIGFjdGlvbnMgdG8gc2xpZGVzIHRvIGNvbnN1bWUgdGhlaXIgc2Vj dGlvbiBjb250ZW50IGluIGEgbW9yZSBlbmdhZ2luZyB3YXkuCgpUaGVyZSBhcmUgdHdvIGtpbmRz IG9mIGFjdGlvbnM6Ci0gPVNsaWRlIGFjdGlvbnM9OiBtb3N0bHkgcmVzcG9uc2libGUgZm9yIG5h cnJvd2luZyB0byBhIHNsaWRlIGFuZCB0aGVuIGhhbmRsaW5nIHRoZSBjaGlsZCBoZWFkaW5ncywg ZWl0aGVyIGlubGluZSBvciBhcyBzZXBhcmF0ZSBzbGlkZXMKLSA9U2VjdGlvbiBhY3Rpb25zPTog d29yayBvbiB0aGUgY29udGVudCBpbiB0aGUgaGVhZGluZydzIHNlY3Rpb24uCgpUbyBicm93c2Ug YWxsIGFjdGlvbnMsIGJlY2F1c2UgdGhleSBhcmUgYWxsIEVJRUlPIGNsYXNzZXMsIHlvdSBjYW4g dXNlIH5laWVpby1icm93c2V+IGFuZCBzZWUgdGhlIGFjdGlvbnMgZGVzY2VuZCBmcm9tIH5kc2xp ZGUtYWN0aW9ufi4KCiMrYmVnaW5fc3JjCiAgKy0tZHNsaWRlLXN0YXRlZnVsLXNlcXVlbmNlCiAg ICAgICArLS1kc2xpZGUtYWN0aW9uCiAgICAgICAgICAgICstLWRzbGlkZS1hY3Rpb24tcHJvcGVy dGl6ZQogICAgICAgICAgICArLS1kc2xpZGUtYWN0aW9uLWltYWdlCiAgICAgICAgICAgICstLWRz bGlkZS1hY3Rpb24tYmFiZWwKICAgICAgICAgICAgKy0tZHNsaWRlLWFjdGlvbi1pdGVtLXJldmVh bAogICAgICAgICAgICArLS1kc2xpZGUtYWN0aW9uLWhpZGUtbWFya3VwCiAgICAgICAgICAgICst LWRzbGlkZS1zbGlkZS1hY3Rpb24KICAgICAgICAgICAgICAgICArLS1kc2xpZGUtc2xpZGUtYWN0 aW9uLWV2ZXJ5LWNoaWxkCiAgICAgICAgICAgICAgICAgKy0tZHNsaWRlLXNsaWRlLWFjdGlvbi1p bmxpbmUKICAgICAgICAgICAgICAgICArLS1kc2xpZGUtc2xpZGUtYWN0aW9uLWNoaWxkCiAgICAg ICAgICAgICAgICAgKy0tZHNsaWRlLXNsaWRlLWFjdGlvbi1mbGF0CiMrZW5kX3NyYwoqKiBBZGRp bmcgQWN0aW9ucwo6UFJPUEVSVElFUzoKOkRFU0NSSVBUSU9OOiBNYWtpbmcgQ29udGVudCBEbyBT dHVmZgo6RU5EOgojK3ZpbmRleDogZHNsaWRlLWRlZmF1bHQtYWN0aW9ucwpCeSBkZWZhdWx0LCBl dmVyeSBzbGlkZSBoYXMgdHdvIGFjdGlvbnMsIGNvbmZpZ3VyYWJsZSBpbiB+ZHNsaWRlLWRlZmF1 bHQtYWN0aW9uc346Ci0gfmRzbGlkZS1hY3Rpb24tcHJvcGVydGl6ZX4gZm9yIGFkZGluZyB0ZXh0 IHByb3BlcnRpZXMgdG8gYXJiaXRyYXJ5IGVsZW1lbnRzCi0gfmRzbGlkZS1hY3Rpb24taGlkZS1t YXJrdXB+IHRvIGhpZGUga2V5d29yZHMsIHRvZG8gc3RhdGVzLCBhbmQgdGFncywgYWxsb3dpbmcg eW91IHRvIGhhdmUgdGhlc2UgdGhpbmdzIGluIHlvdXIgc291cmNlIHdpdGhvdXQgdGhlbSBjbHV0 dGVyaW5nIHRoZSBwcmVzZW50YXRpb24KCkFjdGlvbnMgbXVzdCBiZSBhZGRlZCB0byBhIHNsaWRl IHVzaW5nIHRoZSBzbGlkZSdzIHByb3BlcnR5IGRyYXdlci4KCi0gPURTTElERV9TTElERV9BQ1RJ T049OiBVc3VhbGx5IG5hcnJvd3MgdG8gdGhlIHNsaWRlIGFuZCBjcmVhdGVzIGNoaWxkcmVuIGZy b20gY2hpbGQgaGVhZGluZ3MuICBMaWZlY3ljbGUgZW5jbG9zZXMgdGhlIHNlY3Rpb24gYWN0aW9u cy4KLSA9RFNMSURFX0FDVElPTlM6PSBNb3N0IGNvbW1vbmx5IGN1c3RvbWl6ZWQuICBZb3UgY2Fu IGxpc3QgbXVsdGlwbGUgYWN0aW9ucy4gIEVhY2ggb25lIHdpbGwgc3RlcCB0aHJvdWdoIGl0cyBm b3J3YXJkIGFuZCBiYWNrd2FyZCBzdGVwcy4KCiMrYmVnaW5fZXhwb3J0IGh0bWwKUmVndWxhciBP cmcgTW9kZSBtYXJrdXAgaXMgdXNlZCB0byBhZGQgYWN0aW9ucyB0byBoZWFkaW5ncy4gIFNlZSBt b3JlIGV4YW1wbGVzIGluIHRoZSBbWy4uL3Rlc3RdXSBkaXJlY3RvcnkuCiMrZW5kX2V4cG9ydAoK IytiZWdpbl9zcmMgb3JnCiAgLCogRnVsbCBTY3JlZW4gSW1hZ2VzCiAgOlBST1BFUlRJRVM6CiAg OkRTTElERV9BQ1RJT05TOiBkc2xpZGUtYWN0aW9uLWltYWdlcwogIDpFTkQ6CiAgLCMrYXR0cl9o dG1sOiA6d2lkdGggNTAlCiAgW1suL2ltYWdlcy9lbWFjc2VuNC5qcGVnXV0gW1suL2ltYWdlcy9i ZWZvcmUtZ29vZ2xlMy5qcGVnXV0KIytlbmRfc3JjCioqIEFjdGlvbiBBcmd1bWVudHMKOlBST1BF UlRJRVM6CjpERVNDUklQVElPTjogVHdlYWtpbmcgQmVoYXZpb3IKOkVORDoKTWFueSBhY3Rpb25z IHVuZGVyc3RhbmQgYXJndW1lbnRzLCBhbGxvd2luZyB0dW5pbmcgb2Ygc2ltaWxhciBiZWhhdmlv cnMgZnJvbSB0aGUgc2FtZSBjbGFzcy4KClRvIHZpZXcgYW4gYWN0aW9uJ3MgYXJndW1lbnRzLCBj YWxsIH5kZXNjcmliZS1zeW1ib2x+IG9uIGl0LiAgQW55IHNsb3QgZGVmaW5pdGlvbiB1c3VhbGx5 IGhhcyB0aGUgc2FtZSA9OmluaXRhcmc9IGFuZCB3aWxsIGJlIHVuZGVyc3Rvb2Qgd2hlbiBhZGRl ZCBhcyBhIHBsaXN0LXN0eWxlIGFyZ3VtZW50LgoKQ29uZmlndXJpbmcgdGhlIHNsb3QgaXMgZG9u ZSBieSBhZGRpbmcgcGxpc3Qtc3R5bGUgcHJvcGVydGllcyBhZnRlciB0aGUgY2xhc3MgbmFtZToK CiMrYmVnaW5fc3JjIG9yZwogIDpQUk9QRVJUSUVTOgogIDpEU0xJREVfQUNUSU9OUzogZHNsaWRl LWFjdGlvbi1pdGVtLXJldmVhbCA6aW5saW5lIHQKICA6RU5EOgojK2VuZF9zcmMKCllvdSBjYW4g YWxzbyB1c2UgInByb3BlcnR5KyIgc3ludGF4IHRvIGFkZCB0byBhIHByb3BlcnR5LCBhbmQgdGhl c2UgYWNjZXB0IHBsaXN0IGFyZ3VtZW50cyB0b286CgojK2JlZ2luX3NyYyBvcmcKICA6UFJPUEVS VElFUzoKICA6RFNMSURFX0FDVElPTlM6IGRzbGlkZS1hY3Rpb24tYmFiZWwKICA6RFNMSURFX0FD VElPTlMrOiBkc2xpZGUtYWN0aW9uLWltYWdlcyA6ZnVsbC1mcmFtZSB0CiAgOkVORDoKIytlbmRf c3JjCgrwn5qnIFRoZSBjdXJyZW50IHBsaXN0IHJlYWQgaW1wbGVtZW50YXRpb24gc3BsaXRzIHRo ZSBzdHJpbmcgcmF0aGVyIHRoYW4gdXNpbmcgfnJlYWQtc3RyaW5nfiBhbmQgaXMgdGhlcmVmb3Jl IG5vdCBzbWFydCBlbm91Z2ggdG8gcGFyc2UgbGlzdHMgYXMgYXJndW1lbnRzLiAgSG93ZXZlciB+ ZHNsaWRlLWFjdGlvbi1wcm9wZXJ0aXplfiBkZW1vbnN0cmF0ZXMgZG9pbmcgdGhpcyBjb3JyZWN0 bHkgYW5kIHNob3dzIHRoYXQgaXQgd2lsbCBiZSBwb3NzaWJsZSBpZiBuZWVkZWQuCioqIEFubm90 YXRpbmcgRWxlbWVudHMKOlBST1BFUlRJRVM6CjpERVNDUklQVElPTjogVGVsbGluZyBBY3Rpb25z IFdoYXQgYW5kIFdoZXJlCjpFTkQ6ClNvbWUgYWN0aW9ucywgc3VjaCBhcyB+ZHNsaWRlLWFjdGlv bi1wcm9wZXJ0aXplfiwgY2FuJ3QgZGVjaWRlIHdoaWNoIGVsZW1lbnRzIHRvIG9wZXJhdGUgb24g b3Igd2hhdCB0byBkbyB3aXRoIHRoZSBlbGVtZW50LiAgWW91IGNhbiBhZGQgc29tZSBtZXRhIGRh dGEgdG8gYW4gZWxlbWVudCB1c2luZyBhbiAqYWZmaWxpYXRlZCBrZXl3b3JkKi4KCuKaoO+4jyBJ ZiB5b3UgYXJlIGV4dGVuZGluZyBhbiBhY3Rpb24gYW5kIHdhbnQgdG8gY3JlYXRlIHlvdXIgb3du IGFmZmlsaWF0ZWQga2V5d29yZCwgdGhleSAgbXVzdCBzdGFydCB3aXRoID1hdHRyPSBvciBlbHNl IHRoZSBwYXJzZXIgd2lsbCBub3QgY29uc2lkZXIgdGhlbSBhZmZpbGlhdGVkIQoKIytiZWdpbl9z cmMgb3JnCiAgLCogRmFuY3kgVGV4dAogIDpQUk9QRVJUSUVTOgogIDpEU0xJREVfQUNUSU9OUzog ZHNsaWRlLWFjdGlvbi1wcm9wZXJ0aXplCiAgOkVORDoKICBBZGQgdGV4dCBwcm9wZXJ0aWVzIHRv IGFuIGVsZW1lbnQgdXNpbmcgdGhlID1hdHRyX2RzbGlkZV9wcm9wZXJ0aXplPSBhZmZpbGlhdGVk IGtleXdvcmQuICBObyBxdW90aW5nIGlzIHJlcXVpcmVkLiAgTGlzdHMgd2lsbCBiZSBpbnRlcnBy ZXRlZCBhcyBzdWNoLgoKICAsIythdHRyX2RzbGlkZV9wcm9wZXJ0aXplOiBmYWNlICg6YmFja2dy b3VuZCAiI2RkZGRmZiIgOmZvcmVncm91bmQgIiMwMDAwMDAiIDp3ZWlnaHQgYm9sZCA6aGVpZ2h0 IDIuMCkKICBUaGlzIGlzIHNvbWUgZmFuY3kgdGV4dAojK2VuZF9zcmMKKiogQmFiZWwgU2NyaXB0 aW5nCjpQUk9QRVJUSUVTOgo6REVTQ1JJUFRJT046IEZ1bGx5IFByb2dyYW1tYWJsZSBTdGVwcwo6 RU5EOgojK2ZpbmRleDogZHNsaWRlLWFjdGlvbi1iYWJlbAojK2NpbmRleDogc2NyaXB0aW5nIGJh YmVsIHN0ZXBzCllvdSBjYW4gd3JpdGUgY3VzdG9tIHNjcmlwdHMgaW50byB5b3VyIHByZXNlbnRh dGlvbiBhcyBPcmcgQmFiZWwgYmxvY2tzLiAgVGhlc2UgY2FuIGJlIGV4ZWN1dGVkIHdpdGggdGhl IH5kc2xpZGUtYWN0aW9uLWJhYmVsfiBhY3Rpb24uCgpCeSBkZWZhdWx0IGJsb2NrcyBvbmx5IGV4 ZWN1dGUgZ29pbmcgZm9yd2FyZCwgb25lIGJsb2NrIHBlciBzdGVwLiAgWW91IG5lZWQgdG8gbGFi ZWwgeW91ciBibG9ja3Mgd2l0aCBsaWZlY3ljbGUgbWV0aG9kcyBpZiB5b3Ugd2FudCB0byBiZSBh YmxlIHRvIGdvIGZvcndhcmRzIGFuZCBiYWNrd2FyZHMgb3IgZXhlY3V0ZSB0aGVtIGF0IHRoZSBi ZWdpbm5pbmcgb3IgZW5kIG9mIGEgc2xpZGUuICBTZWUgdGhlIH5kc2xpZGUtYWN0aW9uLWJhYmVs fiBjbGFzcyBhbmQgZXhhbXBsZXMgaW4gW1tmaWxlOi4vdGVzdC9kZW1vLm9yZ11bLi90ZXN0L2Rl bW8ub3JnXV0uCgpUaGUgPSMrYXR0cl9kc2xpZGU6PSBhZmZpbGlhdGVkIGtleXdvcmQgaXMgdXNl ZCB0byBjb25maWd1cmUgd2hpY2ggbWV0aG9kcyB3aWxsIHJ1biB0aGUgYmxvY2suICBCbG9jayBs YWJlbHMgdGhhdCBhcmUgdW5kZXJzdG9vZDoKCi0gPWJlZ2luPSBhbmQgPWVuZD0gYXJlIHJ1biB3 aGVuIHRoZSBzbGlkZSBpcyBpbnN0YW50aWF0ZWQsIGdvaW5nIGZvcndhcmQgYW5kIGJhY2t3YXJk IHJlc3BlY3RpdmVseS4gIFlvdSBjYW4gaGF2ZSBzZXZlcmFsIGJsb2NrcyB3aXRoIHRoZXNlIG1l dGhvZHMsIGFuZCB0aGV5IHdpbGwgYmUgcnVuIGZyb20gKnRvcC10by1ib3R0b20qIGFsd2F5cywg bWFraW5nIGl0IGVhc2llciB0byByZS11c2UgY29kZSB1c3VhbGx5LgoKLSA9ZmluYWw9IGlzIG9u bHkgY2FsbGVkIHdoZW4gbm8gcHJvZ3Jlc3MgY2FuIGJlIG1hZGUgb3IgaWYgdGhlIHByZXNlbnRh dGlvbiBpcyBzdG9wcGVkLgoKLSA9Zm9yd2FyZD0gYW5kID1iYWNrd2FyZD0gYXJlIHNlbGYtZXhw bGFuYXRvcnkuICBQb3NpdGlvbiB5b3VyID1iYWNrd2FyZD0gYmxvY2tzICphYm92ZSogYW55IGJs b2NrIHRoYXQgdGhleSB1bmRvCgotID1ib3RoPSBydW5zIGVpdGhlciBkaXJlY3Rpb24uICBJdCB3 aWxsIG5vdCByZXBlYXQgaW4gcGxhY2Ugd2hlbiByZXZlcnNpbmcuICBVc2Ugc2VwZXJhdGUgPWZv cndhcmQ9IGFuZCA9YmFja3dhcmQ9IGJsb2NrcyBmb3IgdGhhdCDwn5KhCgpUaGUgYmFiZWwgYWN0 aW9uIGFsc28gdW5kZXJzdGFuZHMgcmVndWxhciBiYWJlbCBvcHRpb25zIHN1Y2ggYXMgPTpleHBv cnRzPSBhbmQgPTpyZXN1bHRzPS4gIEV4cG9ydHMgbm9uZSB3aWxsIG1ha2UgdGhlIGJsb2NrIGlu dmlzaWJsZS4gIFJlc3VsdHMgY29udHJvbHMgd2hldGhlciByZXN1bHRzIHdpbGwgYmUgcHJpbnRl ZCBpbnRvIHRoZSBidWZmZXIgb3Igbm90LgoqKiogU3RlcCBDYWxsYmFja3MKIytmaW5kZXg6IGRz bGlkZS1wdXNoLXN0ZXAKIytjaW5kZXg6IHB1c2hpbmcgc3RlcHMKU2VlIH5kc2xpZGUtcHVzaC1z dGVwfiBmb3IgaW5zZXJ0aW5nIGFyYml0cmFyeSBjYWxsYmFja3MgdGhhdCBjYW4gZnVuY3Rpb24g YXMgc3RlcHMuICBVbmxlc3MgeW91ciBhY3Rpb24gcGVyZm9ybXMgc3RhdGUgdHJhY2tpbmcgdG8g ZGVjaWRlIHdoZW4gdG8gY29uc3VtZSB+ZHNsaWRlLWRlY2stZm9yd2FyZH4gYW5kIH5kc2xpZGUt ZGVjay1iYWNrd2FyZH4gaXRzZWxmLCBhIGNhbGxiYWNrIG1heSBiZSBlYXNpZXIuICBVc2luZyB+ ZHNsaWRlLXB1c2gtc3RlcH4gaXMgYWxzbyBvbmUgd2F5IHRvIG9wdGlvbmFsbHkgYWRkIGEgc3Rl cCBjYWxsYmFjayBmcm9tIGEgYmFiZWwgYmxvY2suCioqIEhpZGluZyBNYXJrdXAKOlBST1BFUlRJ RVM6CjpERVNDUklQVElPTjogTm8gTW9yZSBVZ2x5CjpFTkQ6CiMrZmluZGV4OiBkc2xpZGUtYWN0 aW9uLWhpZGUtbWFya3VwCiMrdmluZGV4OiBkc2xpZGUtaGlkZS1tYXJrdXAtdHlwZXMKRHNsaWRl IHVzZXMgYSBsb3Qgb2YgbWFya3VwIHRoYXQgd291bGQgbm90IGxvb2sgZ29vZCBpbiBhIHByZXNl bnRhdGlvbi4gIEl0IGFsc28gZmlsdGVycyBpdCBieSBkZWZhdWx0IHVzaW5nIH5kc2xpZGUtYWN0 aW9uLWhpZGUtbWFya3Vwfi4gIFlvdSBjYW4gYWRqdXN0IHRoZSB0eXBlcyB1c2luZyB+ZHNsaWRl LWhpZGUtbWFya3VwLXR5cGVzfgoqKiogSGlkaW5nIFRvZG9zIGFuZCBUYWdzCiMrdmluZGV4OiBk c2xpZGUtaGlkZS10b2RvCiMrdmluZGV4OiBkc2xpZGUtaGlkZS10YWdzCn5kc2xpZGUtYWN0aW9u LWhpZGUtbWFya3VwfiB3aWxsIGFsc28gaGlkZSB0b2RvcyBhbmQgdGFncy4gIFlvdSBjYW4gbW9k aWZpeSB0aGlzIHdpdGggfmRzbGlkZS1oaWRlLXRvZG9+IGFuZCB+ZHNsaWRlLWhpZGUtdGFnc34u CioqIEZpbHRlcmluZyBIZWFkaW5ncwo6UFJPUEVSVElFUzoKOkRFU0NSSVBUSU9OOiBJdCdzIE5v dCBEb25lIFlldAo6RU5EOgojK2NpbmRleDogY29tbWVudGVkIGhlYWRpbmdzCi0gQW55IGhlYWRp bmcgd2l0aCA9Q09NTUVOVD0gZGlyZWN0bHkgYWZ0ZXIgdGhlIHN0YXJzIHdpbGwgYmUgc2tpcHBl ZAotIEFueSBoZWFkaW5nIHdpdGggdGhlID06bm9zbGlkZTo9IG9yID06bm9leHBvcnQ6PSB0YWdz IHdpbGwgYmUgc2tpcHBlZAoKVXNlIHRoaXMgd2hlbiB5b3VyIGhlYWRpbmdzIGFyZSB3b3JrLWlu LXByb2dyZXNzIGFuZCB5b3UgcnVuIG91dCBvZiB0aW1lIG9uIEZyaWRheSBiZWZvcmUgdGhlIGZl YXR1cmUgZGVtbyBtZWV0aW5nLiAgSGF2ZSBzb21lIGNvbnRlbnQgdGhhdCBpcyB1c2VkIG9ubHkg aW4gc29tZSBleHBvcnRzPyAgVXNlID06bm9zbGlkZTo9LgoqKiBIZWFkZXIgS2V5d29yZHMKOlBS T1BFUlRJRVM6CjpERVNDUklQVElPTjogVGl0bGUsIEF1dGhvciwgRW1haWwKOkVORDoKIyt2aW5k ZXg6IGRzbGlkZS1oZWFkZXIKSWYgfmRzbGlkZS1oZWFkZXJ+IGlzIGNvbmZpZ3VyZWQsIHRoZSBr ZXl3b3JkcyBmb3IgdGhlIGRvY3VtZW50IHRpdGxlLCBlbWFpbCwgYW5kIGF1dGhvciBldGMgd2ls bCBiZSB1c2VkIHRvIGdlbmVyYXRlIGFuIG9rYXkgaGVhZGVyLgoKIytiZWdpbl9zcmMgb3JnCiAg IyssdGl0bGU6CURvbWFpbiBTcGVjaWZpYyBzTElERXMKICAsIythdXRob3I6CVBvc2l0cm9uCiAg LCMrZW1haWw6CWNvbnRhY3RAcG9zaXRyb24uc29sdXRpb25zCiMrZW5kX3NyYwoqKiBGaWxlIExv Y2FsIFZhcmlhYmxlcwo6UFJPUEVSVElFUzoKOkRFU0NSSVBUSU9OOiBEb24ndCBGb3JnZXQgRnJl ZSBMdW5jaAo6RU5EOgpEb24ndCBmb3JnZXQgdGhhdCBpZiB5b3UgbmVlZCBhIGN1c3RvbWl6ZSB2 YXJpYWJsZSBvbmx5IHNldCBpbiBhIHBhcnRpY3VsYXIgcHJlc2VudGF0aW9uLCB5b3UgY2FuIHVz ZSBmaWxlIGxvY2FsIHZhcmlhYmxlcy4gIE5vdCBldmVyeSBzZXR0aW5nIG5lZWRzIGEga2V5d29y ZCBvciBiYWJlbCBibG9jayBpbnRlZ3JhdGlvbi4KCiMrYmVnaW5fc3JjIG9yZwogICMgTG9jYWwg VmFyaWFibGVzOgogICMgZHNsaWRlLWhlYWRlcjogbmlsCiAgIyBFbmQ6CiMrZW5kX3NyYwoqIFBy ZXNlbnRpbmcKOlBST1BFUlRJRVM6CjpERVNDUklQVElPTjogQ29udHJvbGxpbmcgdGhlIFByZXNl bnRhdGlvbgo6RU5EOgpIb3cgdG8gY29udHJvbCBhbmQgdmlldyB5b3VyIHByZXNlbnRhdGlvbi4K KiogVHdvIEJ1dHRvbiBJbnRlcmZhY2UKOlBST1BFUlRJRVM6CjpERVNDUklQVElPTjogSXRzIEFs bCBGb3J3YXJkcyBhbmQgQmFja3dhcmRzCjpFTkQ6ClByZXNlbnRhdGlvbnMgdGVuZCB0byBiZSBv cmdhbml6ZWQgaW50byBhIHNjcmlwdGVkIGxpbmVhciBzZXF1ZW5jZS4gIFdlIHdhbnQgdG8gY29u dHJvbCB0aGUgZW50aXJlIHByZXNlbnRhdGlvbiBzZXF1ZW5jZSBtb3N0bHkgd2l0aCB0d28gYnV0 dG9ucywgZm9yd2FyZHMgYW5kIGJhY2t3YXJkcy4KClRoZSBjb250cm9sbGVycyBmb3IgcHJlc2Vu dGluZyB1c3VhbGx5IGhhdmUgdmVyeSBmZXcgYnV0dG9ucy4gIERzbGlkZSB3YXMgZGVzaWduZWQg d2l0aCB0aGlzIHVzYWdlIHBhdHRlcm4gaW4gbWluZCBhbmQgY2FuIG1vc3RseSBiZSBjb250cm9s bGVkIGJ5IHR3byBjb21tYW5kcy4KCiMrZmluZGV4OiBkc2xpZGUtZGVjay1mb3J3YXJkCi0gfmRz bGlkZS1kZWNrLWZvcndhcmR+CiMrZmluZGV4OiBkc2xpZGUtZGVjay1iYWNrd2FyZAotIH5kc2xp ZGUtZGVjay1iYWNrd2FyZH4KCiMrZmluZGV4OiBkc2xpZGUtZGVjay1zdGFydApNYW55IGNvbnRy b2xsZXJzIGFsc28gaGF2ZSBhICJwbGF5IiBidXR0b24gb3Igc2ltaWxhci4gIEl0J3MgcmVjb21t ZW5kZWQgdG8gbWFwIHRoaXMgdG8gfmRzbGlkZS1kZWNrLXN0YXJ0fi4KCvCfmqcgSXQgaXMgaW50 ZW5kZWQgdG8gb3ZlcmxvYWQgfmRzbGlkZS1kZWNrLXN0YXJ0fiBmdXJ0aGVyIHRvIGltcGxlbWVu dCAic2Vjb25kYXJ5IiBhY3Rpb25zIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBub24tbGluZWFybHku CgojK2ZpbmRleDogZHNsaWRlLWRlY2stc3RvcApUaGVyZSBpcyBsaWtlbHkgbm8gZ29vZCBwbGFj ZSB0byBiaW5kIH5kc2xpZGUtZGVjay1zdG9wfiwgYnV0IGl0J3Mgbm90IGNyaXRpY2FsLiAgWW91 IGNhbiBkbyBldmVyeXRoaW5nIHdpdGgganVzdCB0aHJlZSBidXR0b25zLgoqKiBDb250ZW50cyBJ bnRlcmZhY2UKOlBST1BFUlRJRVM6CjpERVNDUklQVElPTjogTmF2aWdhdGluZyBGYXN0ZXIKOkVO RDoKTmF2aWdhdGUgeW91ciBwcmVzZW50YXRpb24gZmFzdGVyIHdoZW4gYW5zd2VyaW5nIHF1ZXN0 aW9ucy4gIFRoZSBjb250ZW50cyBpbnRlcmZhY2UgaXMgYSB2aWV3IG9mIHRvcC1sZXZlbCBoZWFk aW5ncy4gIEl0IG92ZXJsb2FkcyB0aGUgcHJlc2VudGF0aW9uIGNvbnRyb2xzIHRvIG5hdmlnYXRl LgoKVG8gZW50ZXIgdGhlIGNvbnRlbnRzLCBjYWxsIH5kc2xpZGUtZGVjay1zdGFydH4gd2hlbiBh IHByZXNlbnRhdGlvbiBpcyBhbHJlYWR5IGFjdGl2ZS4KCi0gfmRzbGlkZS1kZWNrLXN0YXJ0fiB3 aWxsIHJlc3VtZSB0aGUgcHJlc2VudGF0aW9uIGF0IHRoYXQgaGVhZGluZwotIH5kc2xpZGUtZGVj ay1zdG9wfiB3aWxsIHNpbWlsYXJseSBleGl0IHRoZSBjb250ZW50cyB2aWV3Ci0gfmRzbGlkZS1k ZWNrLWZvcndhcmR+IGFuZCB+ZHNsaWRlLWRlY2stYmFja3dhcmR+IG1vdmUgYmV0d2VlbiB0b3Ag bGV2ZWwgaGVhZGluZ3MuCioqIE5hcnJhdGluZwo6UFJPUEVSVElFUzoKOkRFU0NSSVBUSU9OOiBB bmQgRGVidWdnaW5nIExpdmUKOkVORDoKVGhlIHByZXNlbnRhdGlvbiB5b3Ugc2VlIGlzIGEgY2xv bmVkIFtbaW5mbzplbGlzcCNJbmRpcmVjdCBCdWZmZXJzXVtpbmRpcmVjdCBidWZmZXJdXSBvZiB5 b3VyIG9yZyBtb2RlIGJ1ZmZlci4gVGhlIEVsaXNwIHN0YXRlIGFuZCBvdmVybGF5cyBhcmUgaW5k ZXBlbmRlbnQuIFRoZXJlIGFyZSB0d28ga2V5IGFkdmFudGFnZXM6CgotIEFueSBzdGF0ZSB5b3Ug Y3JlYXRlIGluIHRoZSBwcmVzZW50YXRpb24gd2lsbCBub3QgcG9sbHV0ZSB0aGUgb3JnIG1vZGUg YnVmZmVyIHlvdSBhcmUgZWRpdGluZwotIFdlIGNhbiBkaXNwbGF5IHRoZSBzb3VyY2UgZm9yIHRo ZSBwcmVzZW50YXRpb24gc2ltdWx0YW5lb3VzbHkKCiMrZmluZGV4OiBkc2xpZGUtZGVjay1kZXZl bG9wCn5kc2xpZGUtZGVjay1kZXZlbG9wfiB3aWxsIGF0dGVtcHQgdG8gZGlzcGxheSBib3RoIHRo ZSBwcmVzZW50YXRpb24gYW5kIHNvdXJjZSBzaW11bHRhbmVvdXNseS4gIFdoZW5ldmVyIHRoZSBz b3VyY2UgaXMgdmlzaWJsZSwgaGlnaGxpZ2h0cyB3aWxsIGJlIGFwcGxpZWQgdG8gaW5kaWNhdGUg d2hlcmUgdGhlIHByZXNlbnRhdGlvbiBpcyBhdC4gICpUaGlzIGlzIGVzcGVjaWFsbHkgaGVscGZ1 bCBmb3IgaW5jbHVkaW5nIHByZXNlbnRhdGlvbiBub3RlcyBpbiBjb21tZW50cywgd2hpY2ggYXJl IGhpZGRlbiBieSBkZWZhdWx0Ki4KClRvIGxlYXZlIGEgY29tbWVudCBmb3IgeW91cnNlbGYgaW4g dGhlIHByZXNlbnRhdGlvbiBzb3VyY2UsIGp1c3QgYWRkIGEgY29tbWVudCBibG9jayBvciBjb21t ZW50IGxpbmU6CgojK2JlZ2luX3NyYyBvcmcKICAjIFRoaXMgaXMgYWxzbyBhIGNvbW1lbnQKCiAg LCMrYmVnaW5fY29tbWVudAogIFRoaXMgaXMgYSBjb21tZW50IHRoYXQgb25seSBJIGNhbiBzZWUg d2hpbGUgcHJlc2VudGluZywgb25seSB3aGVuIEkgbG9vayBhdCBteSBiYXNlIGJ1ZmZlciB3aGls ZSBzaGFyaW5nIGFub3RoZXIgZnJhbWUuCiAgLCMrZW5kX2NvbW1lbnQKIytlbmRfc3JjCgpZb3Ug Y2FuIGFsc28gc3dpdGNoIGEgd2luZG93IHRvIHRoZSBiYXNlIGJ1ZmZlciBtYW51YWxseS4gIFRo YXQncyBhbG1vc3QgYWxsIH5kc2xpZGUtZGVjay1kZXZlbG9wfiBkb2VzLgoqKiBDdXJzb3IgVmlz aWJpbGl0eQojK2ZpbmRleDogZHNsaWRlLWN1cnNvci1oaWRlCiMrZmluZGV4OiBkc2xpZGUtY3Vy c29yLXJlc3RvcmUKQnkgZGVmYXVsdCwgdGhlIGN1cnNvciBpcyBoaWRkZW4gaW4gdGhlIHByZXNl bnRhdGlvbiBidWZmZXIgdXNpbmcgfmRzbGlkZS1jdXJzb3ItaGlkZX4uICBZb3UgY2FuIGNhbGwg fmRzbGlkZS1jdXJzb3ItcmVzdG9yZX4gaWYgeW91IG5lZWQgaXQuCiogQ29uZmlndXJpbmcKOlBS T1BFUlRJRVM6CjpERVNDUklQVElPTjogR2xvYmFsIFNldHRpbmdzCjpFTkQ6CkJlIHN1cmUgdG8g Y2hlY2sgPU0teD0gfmN1c3RvbWl6ZS1ncm91cH4gPWRzbGlkZT0gdG8gc2VlIGFsbCBkZWNsYXJl ZCBjdXN0b20gdmFyaWFibGVzLiBBbGwgb2YgdGhlIHZhcmlhYmxlcyBhcmUgY29uZmlndXJlZCB0 byByZWNvbW1lbmRlZCBkZWZhdWx0cyBleGNlcHQgaG9va3MsIHdoaWNoIHdvdWxkIGRlcGVuZCBv biBvdGhlciBwYWNrYWdlcyB1c3VhbGx5LgoKTWFueSBzZXR0aW5ncyBjYW4gYmUgY29uZmlndXJl ZCBhdDoKLSBnbG9iYWwgbGV2ZWwgdGhyb3VnaCBjdXN0b21pemUgdmFyaWFibGVzCi0gZG9jdW1l bnQgbGV2ZWwgdGhyb3VnaCBrZXl3b3JkcwotIHNsaWRlIGxldmVsIHRocm91Z2ggdGhlIHByb3Bl cnR5IGRyYXdlcgoqKiBCaW5kaW5nCllvdSBsaWtlbHkgd2FudCB0byBzdGFydCB0aGUgbW9kZSB2 aWEgfmRzbGlkZS1kZWNrLXN0YXJ0fi4gIE9uY2UgdGhlIG1vZGUgc3RhcnRzLCBpdCBjcmVhdGVz IGFuIGluZGlyZWN0IGJ1ZmZlciB0byBkaXNwbGF5IHRoZSBzbGlkZXMgYW5kIHRoZW4gY2FsbHMg fmRzbGlkZS1kZWNrLXN0YXJ0LWZ1bmN0aW9ufiBvbmNlIHRoZSBtb2RlIGlzIGFjdGl2ZSBhbmQg ZXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCwgc28geW91IGNhbiBjdXN0b21pemUgc3RhcnR1cCBi ZWhhdmlvci4KCkFsbCBjb21tYW5kcyBiZWdpbiB3aXRoIH5kc2xpZGUtZGVja34g8J+SoQojK2Jl Z2luX3NyYyBlbGlzcAogIChrZXltYXAtc2V0IG9yZy1tb2RlLW1hcCAiPGY1PiIgIydkc2xpZGUt ZGVjay1zdGFydCkKIytlbmRfc3JjCk9uY2UgdGhlIGdsb2JhbCBtaW5vciBtb2RlLCB+ZHNsaWRl LW1vZGV+IGlzIGFjdGl2ZSwgYWRkaXRpb25hbCBiaW5kaW5ncyBpbiB+ZHNsaWRlLW1vZGUtbWFw fiBhcmUgYWN0aXZlIGluIGV2ZXJ5IGJ1ZmZlciBzbyB0aGF0IHlvdSBjYW4gaW50ZWdyYXRlIG90 aGVyIGJ1ZmZlcnMgaW50byB5b3VyIHByZXNlbnRhdGlvbi4gIChUcmFja2luZyB3aGljaCBidWZm ZXJzIGFyZSBwYXJ0IG9mIGEgcHJlc2VudGF0aW9uIGlzICBzdGlsbCBhIHRvcGljIHVuZGVyIGNv bnNpZGVyYXRpb24g8J+apykKKioqIFNlY29uZGFyeSBDb21tYW5kcyDwn5qnCkJlY2F1c2UgeW91 IG1pZ2h0IHdhbnQgdG8gcGxheSBhIHZpZGVvIG9yIHRha2UgYSBicmFuY2ggaW4gdGhlIHByZXNl bnRhdGlvbiBhbmQgdGhlbiBleGl0IHRoYXQgYnJhbmNoLCB0aGUgcGxhbiBpcyB0byBvdmVybG9h ZCB0aGUgfmRzbGlkZS1kZWNrLXN0YXJ0fiBiaW5kaW5nIHdpdGhpbiBwcmVzZW50YXRpb25zIHRv IGVudGVyIC8gZXhpdCB0aGVzZSBicmFuY2hlcy4KKiogSG9va3MKQmV3YXJlIG9mIHVzaW5nIHRo ZSBub3JtYWwgfmRzbGlkZS1tb2RlLWhvb2t+IPCfmLEgYmVjYXVzZSBpdCBydW5zICppbiB0aGUg YmFzZSBidWZmZXIqIOKaoO+4jy4gIElmIHlvdSByZW1hcCBmYWNlcyBvciBhZGQgYSBidW5jaCBv ZiBzdHlsaW5nLCBpdCB3aWxsIGJlIGNvcGllZCB0byB0aGUgaW5kaXJlY3QgYnVmZmVyIGJ1dCB0 aGVuIGxpbmdlciBpbiB5b3VyIGJhc2UgYnVmZmVyLiAgSW5zdGVhZCwgdXNlIH5kc2xpZGUtc3Rh cnQtaG9va34uIPCfkqEKCi0gfmRzbGlkZS1zdGFydC1ob29rfiBpcyBydW4gaW4gdGhlIGluZGly ZWN0IGJ1ZmZlciBhZnRlciBpdCBpcyBzZXQgaXQuICBUaGlzIGlzIHdoYXQgeW91IHdhbnQuCi0g fmRzbGlkZS1zdG9wLWhvb2t+IGlzIHJ1biBpbiB0aGUgYmFzZSBidWZmZXIgYmVjYXVzZSB0aGUg aW5kaXJlY3QgYnVmZmVyIGlzIGFscmVhZHkgZGVhZC4KLSB+ZHNsaWRlLWNvbnRlbnRzLWhvb2t+ IGlzIHJ1biBhZnRlciBzd2l0Y2hpbmcgdG8gY29udGVudHMuICBJdCBydW5zIGluIHRoZSBzbGlk ZSBidWZmZXIuCi0gfmRzbGlkZS1uYXJyb3ctaG9va34gaXMgcnVuIGFmdGVyIG5hcnJvd2luZywg dXN1YWxseSBhZnRlciBhIHNsaWRlIGlzIHN0YXJ0ZWQKLSB+ZHNsaWRlLWFmdGVyLWxhc3Qtc2xp ZGUtaG9va34gaXMgcnVuIHdoZW4gdGhlIHVzZXIgdHJpZXMgdG8gZ28gZm9yd2FyZCBidXQgdGhl cmUgYXJlIG5vIG1vcmUgc2xpZGVzLiAgWW91IGNhbiB1c2UgdGhpcyB0byBpbXBsZW1lbnQgYSBm aW5hbCBmZWVkYmFjayBiZWZvcmUgcXVpdHRpbmcgb3IgYWRkIH5kc2xpZGUtZGVjay1zdG9wfiB0 byBleGl0IHdpdGhvdXQgZmVlZGJhY2suCgogIEFub3RoZXIgb3B0aW9uIGlzIHRvIHVzZSB+ZHNs aWRlLXB1c2gtc3RlcH4gdG8gcHVzaCBhIGNhbGxiYWNrIHRoYXQgd2lsbCBvbmx5IHJ1biB3aGVu IGNhbGxlZCBnb2luZyBmb3J3YXJkLgoKIytiZWdpbl9zcmMgZWxpc3AKICAoZGVmdW4gbXktc3Rv cC1pZi1mb3J3YXJkICgpCiAgICAoZHNsaWRlLXB1c2gtc3RlcCAobGFtYmRhIChkaXJlY3Rpb24p CiAgICAgICAgICAgICAgICAgICAgKHdoZW4gKGVxIGRpcmVjdGlvbiAnZm9yd2FyZCkKICAgICAg ICAgICAgICAgICAgICAgIDs7IEJlIHN1cmUgdG8gcmV0dXJuIHQgb3IgdGhlIGNhbGxiYWNrIHdv bid0IGNvdW50IGFzIGEKICAgICAgICAgICAgICAgICAgICAgIDs7IHN0ZXAgYW5kIHRoZSBob29r IHdpbGwgcnVuIGFnYWluLgogICAgICAgICAgICAgICAgICAgICAgKHByb2cxIHQgKGRzbGlkZS1k ZWNrLXN0b3ApKSkpKSkKCiAgKHNldHEgZHNsaWRlLWFmdGVyLWxhc3Qtc2xpZGUtaG9vayAjJ215 LXN0b3AtaWYtZm9yd2FyZCkKIytlbmRfc3JjCioqKiBQZXItU2xpZGUgQWN0aW9ucwrwn5KhIElm IHlvdSB3YW50IHRvIGRvIHNvbWV0aGluZyBvbiBlYWNoIHNsaWRlIG9yIHNwZWNpZmljIHNsaWRl cywgYmVmb3JlIHVzaW5nIGhvb2tzLCBpbnN0ZWFkIGNvbnNpZGVyIHVzaW5nIGFjdGlvbnMuCgpT ZWUgdGhlIH5kc2xpZGUtYWN0aW9uLWhpZGUtbWFya3VwfiB3aGljaCBpcyBieSBkZWZhdWx0IGFk ZGVkIHRvIH5kc2xpZGUtZGVmYXVsdC1hY3Rpb25zfiBhbmQgaGlkZXMgbWFya3VwIG9uIGV2ZXJ5 IHNsaWRlLiAgVGhlIGxpZmVjeWNsZSBvZiBhY3Rpb25zIGFuZCB0aGVpciBtZXRob2RzIGZvciBv YnRhaW5pbmcgdGhlIGN1cnJlbnQgc2xpZGUncyBoZWFkaW5nIG1ha2UgdGhlbSB2ZXJ5IGdvb2Qg Zm9yIHBlci1zbGlkZSBiZWhhdmlvci4KKiogU3RlZXppbmcgT3JnCjpQUk9QRVJUSUVTOgo6REVT Q1JJUFRJT046IE1ha2luZyBpdCBQcmV0dHkKOkVORDoKTm90IHVuaXF1ZSB0byBkc2xpZGUsIGlm IHlvdSB3YW50IG1vcmUgcHJvZmVzc2lvbmFsIGxvb2tpbmcgcmVzdWx0cywgeW91IHdpbGwgbGlr ZWx5IG5lZWQgdG8gbWFrZSB5b3VyIG9yZyBhIGJpdCBwcmV0dGllci4KClRoZSBzZXR1cCB1c2Vk IGZvciB0aGUgUG9zaXRyb24ncyBZb3VUdWJlIGRlbW9zIGlzIG5vdCBtdWNoIG1vcmUgY29tcGxl eCB0aGFuIHRoaXMgd2VsbC1kb2N1bWVudGVkIHNldHVwIGJ5IFtbaHR0cHM6Ly9zeXN0ZW1jcmFm dGVycy5uZXQvZW1hY3MtdGlwcy9wcmVzZW50YXRpb25zLXdpdGgtb3JnLXByZXNlbnQvXVtTeXN0 ZW0gQ3JhZnRlcnNdXS4gIEFsc28gc2VlIFByb3QncyBbW2h0dHBzOi8vcHJvdGVzaWxhb3MuY29t L2NvZGVsb2cvMjAyMC0wNy0xNy1lbWFjcy1taXhlZC1mb250cy1vcmcvXVtmdXJ0aGVyXV0gZG9j dW1lbnRhdGlvbiBvbiBjdXN0b21pemluZyBvcmcgbW9kZSBmYWNlcyBhbmQgZm9udHMuCgpJbiBz aG9ydCwgdXNlOgotIH5vcmctbW9kZXJufgotIH5vcmctYXBwZWFyfgotIH5uZXJkLWljb25zfiBm b3IgbW9yZSBjaGVlc3kg7piyKEVtYWNzIGxvZ28pCi0gQW5kIHNldCB0aGUgZmFjZXMgZm9yIG9y ZyBoZWFkaW5ncyBhbmQgZG9jdW1lbnQgdGl0bGUuCgpEb24ndCBmb3JnZXQgYnVpbHQtaW4gfmVt b2ppLXNlYXJjaH4gYW5kIHNlYXJjaGluZyB+aW5zZXJ0LWNoYXJ+LgoKUG9zaXRyb24gaXMgY2hl YXRpbmcgYW5kIGFsc28gYXBwbHkgY3VzdG9tIGxpbmUtc3BhY2luZyBhbmQgbGluZS1oZWlnaHQu ICBXaGlsZSBQc2lvbmljIG1haW50YWlucyBhIGN1c3RvbSB+b3JnLW1vZGVybn4sIHVzaW5nIGN1 c3RvbSBzcGFjaW5nIGV2ZXJ5d2hlcmUgZmlnaHRzIHdpdGggfnZpc3VhbC1saW5lLW1vZGV+IGN1 cnJlbnRseS4KKiBFeHRlbmRpbmcKOlBST1BFUlRJRVM6CjpERVNDUklQVElPTjogUmV1c2luZyBE c2xpZGUgQ2xhc3Nlcwo6RU5EOgpUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBh biBvdmVydmlldyBmb3IgZXh0ZW5kaW5nIGRzbGlkZSBjbGFzc2VzIG9yIGhhY2tpbmcgb24gZHNs aWRlIGl0c2VsZi4KKiogQ3JlYXRpbmcgQWN0aW9ucwo6UFJPUEVSVElFUzoKOkRFU0NSSVBUSU9O OiBPdmVydmlldwo6RU5EOgpBY3Rpb25zIGFyZSB0aGUgcmlnaHQgY2hvaWNlIHdoZW4geW91IG5l ZWQgY3VzdG9tIGJlaGF2aW9yIHRoYXQgeW91IHdhbnQgdG8gcmUtdXNlLiAgQWN0aW9ucyBjYW4g YmUgY29uZmlndXJlZCB3aXRoIGFyZ3VtZW50cy4gIFRoZXkgaW1wbGVtZW50IHRoZSBzdGF0ZWZ1 bCBzZXF1ZW5jZSBsaWZlY3ljbGUuICBGb3Igb25lLW9mZiBzb2x1dGlvbnMsIHlvdSBwcm9iYWJs eSBqdXN0IHdhbnQgYSBiYWJlbCBibG9jay4KCkZpcnN0IGNob29zZSB5b3VyIGFjdGlvbiB0eXBl OgoKIytmaW5kZXg6IGRzbGlkZS1zbGlkZS1hY3Rpb24KLSBPdmVycmlkZSB+ZHNsaWRlLXNsaWRl LWFjdGlvbn4gdG8gY3JlYXRlIGEgc2xpZGUgYWN0aW9uLiAgWW91ciBhY3Rpb24gd2lsbCBjb250 cm9sIHRoZSBkaXNwbGF5IG9mIHRoZSBzbGlkZSBhbmQgaXRzIGNoaWxkcmVuLCB1c3VhbGx5IGNv bnRyb2xsaW5nIHRoZSBuYXJyb3cgc3RhdGUgYW5kIGFkZGluZyBvciByZW1vdmluZyBvdmVybGF5 cyBmcm9tIGNoaWxkcmVuLgojK2ZpbmRleDogZHNsaWRlLWFjdGlvbgotIE92ZXJyaWRlIH5kc2xp ZGUtYWN0aW9ufiB0byBjcmVhdGUgYW4gYWN0aW9uIHRoYXQgd29ya3MgbWFpbmx5IG9uIGEgaGVh ZGluZydzIHNlY3Rpb24gY29udGVudC4KCk92ZXJyaWRlIG1ldGhvZHMgYXMgYXBwcm9wcmlhdGUs IGNvbmZpZ3VyZSBhIGhlYWRpbmcgdG8gdXNlIHlvdXIgYWN0aW9uLCBhbmQgeW91J3JlIGRvbmUu ICBTb21lIGFjdGlvbnMsIHN1Y2ggYXMgfmRzbGlkZS1hY3Rpb24tcHJvcGVydGl6ZX4gb25seSB3 b3JrIHdoZW4gc29tZSBvZiB0aGUgc2VjdGlvbiBkYXRhIGlzIGFubm90YXRlZC4KKiogQSBDdXN0 b20gQWN0aW9uCjpQUk9QRVJUSUVTOgo6REVTQ1JJUFRJT046IEV4YW1wbGUgQ2xhc3MKOkVORDoK IytmaW5kZXg6IGRzbGlkZS1zZWN0aW9uLW5leHQKIytmaW5kZXg6IGRzbGlkZS1zZWN0aW9uLXBy ZXZpb3VzClRoZSB+ZHNsaWRlLXNlY3Rpb24tbmV4dH4gIGFuZCB+ZHNsaWRlLXNlY3Rpb24tcHJl dmlvdXN+IG1ldGhvZCBkb2N1bWVudGF0aW9uIGFyZSB2ZXJ5IGhlbHBmdWwgYmVoYXZpb3IgZm9y IHF1aWNrbHkgd3JpdGluZyBjdXN0b20gYWN0aW9ucy4gIFRoZXkgYWR2YW5jZSB0aGUgYWN0aW9u J3MgPTptYXJrZXI9IGZvcndhcmRzIGFuZCBiYWNrd2FyZHMgdG8gdGhlIG5leHQgbWF0Y2hpbmcg ZWxlbWVudCBhbmQgcmV0dXJuIHRoYXQgZWxlbWVudCBzbyB3ZSBjYW4gZG8gc29tZXRoaW5nIHdp dGggaXQuCgotIGRlY2xhcmUgYSBjbGFzcwotIG92ZXJyaWRlIGEgZmV3IG1ldGhvZHMKLSBub3cg eW91IHRvbyBjYW4gcGFpbnQgdGhlIHBhcmFncmFwaHMgcmVkCgpFeGFtcGxlIGNvZGU6CgojK2Jl Z2luX3NyYyBlbGlzcAogIChkZWZjbGFzcyBkc2xpZGUtYWN0aW9uLXJlZC1wYXJhZ3JhcGhzIChk c2xpZGUtYWN0aW9uKQogICAgKChvdmVybGF5cyA6aW5pdGZvcm0gbmlsKSkKICAgICJQYWludCB0 aGUgcGFyYWdyYXBocyByZWQsIG9uZSBieSBvbmUuIikKCiAgOzsgRGVmYXVsdCBuby1vcCBgZHNs aWRlLWJlZ2luJyBpcyBzdWZmaWNpZW50CgogIDs7IERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2Yg YGRzbGlkZS1lbmQnLCB3aGljaCBqdXN0IHBsYXlzIGZvcndhcmQgdG8gdGhlIGVuZCwKICA7OyBp cyB3ZWxsLWJlaGF2ZWQgd2l0aCB0aGlzIGNsYXNzLgoKICA7OyBSZW1vdmUgYW55IHJlbWFpbmlu ZyBvdmVybGF5cyB3aGVuIGNhbGxpbmcgZmluYWwuCiAgKGNsLWRlZm1ldGhvZCBkc2xpZGUtZmlu YWwgOmFmdGVyICgob2JqIGRzbGlkZS1hY3Rpb24tcmVkLXBhcmFncmFwaHMpKQogICAgKG1hcGMg IydkZWxldGUtb3ZlcmxheSAob3JlZiBvYmogb3ZlcmxheXMpKSkKCiAgOzsgRmluZCB0aGUgbmV4 dCBwYXJhZ3JhcGggYW5kIGFkZCBhbiBvdmVybGF5IGlmIGl0IGV4aXN0cwogIChjbC1kZWZtZXRo b2QgZHNsaWRlLWZvcndhcmQgKChvYmogZHNsaWRlLWFjdGlvbi1yZWQtcGFyYWdyYXBocykpCiAg ICAod2hlbi1sZXQgKChwYXJhZ3JhcGggKGRzbGlkZS1zZWN0aW9uLW5leHQgb2JqICdwYXJhZ3Jh cGgpKSkKICAgICAgKGxldCogKChiZWcgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpiZWdpbiBwYXJh Z3JhcGgpKQogICAgICAgICAgICAgKGVuZCAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmVuZCBwYXJh Z3JhcGgpKQogICAgICAgICAgICAgKG5ldy1vdmVybGF5IChtYWtlLW92ZXJsYXkgYmVnIGVuZCkp KQogICAgICAgIChvdmVybGF5LXB1dCBuZXctb3ZlcmxheSAnZmFjZSAnZXJyb3IpCiAgICAgICAg KHB1c2ggbmV3LW92ZXJsYXkgKG9yZWYgb2JqIG92ZXJsYXlzKSkKICAgICAgICA7OyBSZXR1cm4g bm9uLW5pbCB0byBpbmRpY2F0ZSBwcm9ncmVzcyB3YXMgbWFkZS4gIFRoaXMgYWxzbyBpbmZvcm1z IHRoZQogICAgICAgIDs7IGhpZ2hsaWdodCB3aGVuIGZvbGxvd2luZyB0aGUgc2xpZGVzIGluIHRo ZSBiYXNlIGJ1ZmZlci4KICAgICAgICBiZWcpKSkKCiAgKGNsLWRlZm1ldGhvZCBkc2xpZGUtYmFj a3dhcmQgKChvYmogZHNsaWRlLWFjdGlvbi1yZWQtcGFyYWdyYXBocykpCiAgICAod2hlbi1sZXQq ICgob3ZlcmxheSAocG9wIChvcmVmIG9iaiBvdmVybGF5cykpKSkKICAgICAgKGRlbGV0ZS1vdmVy bGF5IG92ZXJsYXkpCiAgICAgIDs7IElmIHRoZXJlIGlzIGEgcHJlY2VkaW5nIG92ZXJsYXksIG1v dmUgdG8gaXRzIGJlZ2lubmluZyBlbHNlIG1vdmUgdG8gdGhlCiAgICAgIDs7IGJlZ2lubmluZyBv ZiB0aGUgaGVhZGluZy4KICAgICAgKGlmLWxldCAoKG92ZXJsYXkgKGNhciAob3JlZiBvYmogb3Zl cmxheXMpKSkpCiAgICAgICAgICAoZHNsaWRlLW1hcmtlciBvYmogKG92ZXJsYXktc3RhcnQgb3Zl cmxheSkpCiAgICAgICAgKGRzbGlkZS1tYXJrZXIgb2JqIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6 YmVnaW4gKGRzbGlkZS1oZWFkaW5nIG9iaikpKSkpKQojK2VuZF9zcmMKKiogRGVmYXVsdCBDbGFz c2VzCjpQUk9QRVJUSUVTOgo6REVTQ1JJUFRJT046IE92ZXJyaWRpbmcgdGhlIEd1dHMKOkVORDoK VGhlIGRlY2sgYW5kIHNsaWRlIGNsYXNzIGFzIHdlbGwgYXMgYWN0aW9ucyBjYW4gYmUgc3ViLWNs YXNzZWQuICBVc2UgdGhlIGV4aXN0aW5nIHN1Yi1jbGFzc2VzIG9mIGFjdGlvbnMgYXMgZXhhbXBs ZSBjb2RlIGZvciB3cml0aW5nIG90aGVyIGNsYXNzZXMuICBTZWUgdGhlIFtbaW5mbzplaWVpbyNU b3BdW2VpZWlvI1RvcF1dIG1hbnVhbCBmb3IgZXhwbGFuYXRpb24gb2YgT09QIGluIEVsaXNwLgoK LSA9QWN0aW9uPTogIENyZWF0aW5nIG5ldyBhY3Rpb24gc3ViY2xhc3NlcyBhcmUgYW4gZWZmaWNp ZW50IHdheSB0byBwZXJmb3JtIHNpbWlsYXIgb3BlcmF0aW9ucyBvbiB0eXBpY2FsIGtpbmRzIG9m IG9yZyBkYXRhLgotID1TbGlkZTo9ICBTbGlkZXMgY2FuIGJlIGNvbmZpZ3VyZWQgZXh0ZW5zaXZl bHkgYnkgY2hhbmdpbmcgdGhlaXIgYWN0aW9ucy4gIEhvd2V2ZXIsIGZvciBtb3JlIHZlcnRpY2Fs IGNvb3BlcmF0aW9uIGJldHdlZW4gc2xpZGVzIG9yIGNvb3BlcmF0aW9uIGFtb25nIGFjdGlvbnMs IGV4dGVuZGVkIHNsaWRlcyBjb3VsZCBiZSB1c2VmdWwuCi0gPURlY2s9OiAgSWYgdGhlIGNvcmUg bWV0aG9kcyBvZiB0aGUgZGVjayBhcmUgaW5zdWZmaWNpZW50LCBleHRlbnNpb24gaXMgYW5vdGhl ciBvcHRpb24gYmVzaWRlcyBhZHZpY2UsIGhvb2tzLCBhbmQgbW9kaWZ5aW5nIHRoZSBzb3VyY2Uu CgogIElmIHlvdSBzdXNwZWN0IHlvdSBtaWdodCBuZWVkIHRvIHN1Yi1jbGFzcyB0aGUgfmRzbGlk ZS1zbGlkZX4gb3IgfmRzbGlkZS1kZWNrfiwgcGxlYXNlIGZpbGUgYW4gaXNzdWUgYmVjYXVzZSB5 b3VyIHVzZSBjYXNlIGlzIHByb2JhYmx5IGludGVyZXN0aW5nLgoqIEhhY2tpbmcKOlBST1BFUlRJ RVM6CjpERVNDUklQVElPTjogSGlnaC1sZXZlbCBEZXNpZ24gU3VtbWFyeQo6RU5EOgpUaGlzIHNl Y3Rpb24gcHJvdmlkZXMgcmVhbGx5IGhpZ2gtbGV2ZWwgc3VtbWFyeSBvZiB0aGUgY29kZSdzIG1h am9yIGRlc2lnbiBjaG9pY2VzIHRvIHByZXBhcmUgZm9yIGRpdmluZyBpbnRvIHNvdXJjZS4KKiog T2JqZWN0cyAmIE93bmVyc2hpcApPcmcgbW9kZSB1c2VzIHRyZWVzLiAgUHJlc2VudGF0aW9ucyBh cmUgbGluZWFyIHNlcXVlbmNlcy4gIFdlIGNhbiBlaXRoZXIgdHJhdmVyc2UgdGhlIHRyZWUgb3Ig ZmxhdHRlbiBpdC4gIERzbGlkZSBjaG9zZSB0byB0cmF2ZXJzZS4gIFRoaXMgZGVzaWduIGFsbG93 ZWQgaW1wbGVtZW50aW5nIGZlYXR1cmVzIHN1Y2ggYXMgfmRzbGlkZS1zbGlkZS1hY3Rpb24tZWFj aC1jaGlsZH4uICBUaGUgY2hpbGRyZW4gb2Ygc3VjaCBhIHBhcmVudCBzbGlkZSBleGlzdCBzaW11 bHRhbmVvdXNseS4gIEEgY29uc2VxdWVuY2Ugb2YgdGhlIGNob2ljZSBub3QgdG8gZmxhdHRlbiBp cyB0aGF0IHBhcmVudHMgb3duIHRoZWlyIGNoaWxkcmVuLiAgVGhlIGxpZmVjeWNsZSBvZiBhIHBh cmVudCBhbHdheXMgZW5jb21wYXNzZXMgaXRzIGNoaWxkLgoKLSBUaGUgZGVjayBvYmplY3QgaXMg dGhlIHJvb3Qgb2YgYWxsIGZ1bmN0aW9uYWxpdHkgYW5kIG1hbnkgY29tbWFuZHMgZGVsZWdhdGUg dGhyb3VnaCBpdAotIFRoZSBkZWNrIG93bnMgc2xpZGVzLCB3aGljaCBvd24gYWN0aW9ucwotIFNs aWRlIGFjdGlvbnMgbWF5IGZ1cnRoZXIgb3duIGNoaWxkIHNsaWRlcwoqKiBTdGF0ZWZ1bCBTZXF1 ZW5jZQojK2ZpbmRleDogZHNsaWRlLXN0YXRlZnVsLXNlcXVlbmNlClByZXNlbnRhdGlvbnMgYXJl IHN1cHBvc2VkIHRvIGJlIGxpbmVhciBzZXF1ZW5jZXMuICBIb3dldmVyLCB0aGV5IG1heSByZXF1 aXJlIHNldHVwIGFuZCB0ZWFyZG93bi4gIFRoaXMgaXMgdGhlICJzdGF0ZWZ1bCIgcGFydCBvZiBh IH5kc2xpZGUtc3RhdGVmdWwtc2VxdWVuY2V+LgoKIytmaW5kZXg6IGRzbGlkZS1mb3J3YXJkCiMr ZmluZGV4OiBkc2xpZGUtYmFja3dhcmQKSWYgYWxsIHNlcXVlbmNlcyB3ZXJlIGlkZW1wb3RlbnQs IHdlIHdvdWxkIGp1c3QgaW1wbGVtZW50IH5kc2xpZGUtZm9yd2FyZH4gYW5kIH5kc2xpZGUtYmFj a3dhcmR+LiBUaGUgcmVhc29uIHRoaXMgd2FzIG5vdCBkb25lIGlzIGJlY2F1c2UgdGhvc2UgbWV0 aG9kcyB3b3VsZCBoYXZlIHRvIGRpZmZlcmVudGlhdGUgY2FsbHMgdG8gcGVyZm9ybSBzZXR1cCB2 ZXJzdXMgYXR0ZW1wdGluZyB0byBtYWtlIHByb2dyZXNzIGFuZCBjb3VudGluZyBhcyBzdGVwcy4g IEl0IHdhcyBleHRyZW1lbHkgdHJpY2t5LCBhbmQgc28gc2V0dXAgYW5kIHRlYXJkb3duIHdlcmUg c3BsaXQgaW50byB0aHJlZSBtZXRob2RzLgoKIytmaW5kZXg6IGRzbGlkZS1iZWdpbgojK2ZpbmRl eDogZHNsaWRlLWVuZApUaGlzIHNldHVwIGFuZCB0ZWFyZG93biBjYW4gaGFwcGVuIGluIGJvdGgg ZGlyZWN0aW9ucywgc28gdGhlcmUgaXMgfmRzbGlkZS1iZWdpbn4gYW5kIH5kc2xpZGUtZW5kfi4g IFRoZSBsYXR0ZXIgY29tbW9ubHkgY2FsbHMgdGhlIGZvcm1lciBhbmQgdGhlbiBhZHZhbmNlcyB0 aGUgc3RhdGUgdG8gdGhlIGVuZCwgYnV0IHNvbWUgbW9yZSBvcHRpbWFsIHNldHVwcyBhcmUgcG9z c2libGUgYW5kIGFscmVhZHkgaW4gdXNlLgoKIytmaW5kZXg6IGRzbGlkZS1maW5hbApTbGlkZXMg bWF5IGJlIGRpc3Bvc2VkIG9mIGFmdGVyIHRoZXkgbm8gbG9uZ2VyIG1ha2UgcHJvZ3Jlc3MuICBU byBlbnN1cmUgdGhpcyBmaW5hbGl6YXRpb24gaGFwcGVucywgdGhlIHBhcmVudCBjYWxscyB+ZHNs aWRlLWZpbmFsfi4KKioqIEFjdGlvbnMKQWN0aW9ucyBsaXZlIG9uIHRoZSBzbGlkZS4gIFRoZXkg aW1wbGVtZW50IHN0YXRlZnVsIHNlcXVlbmNlLiAgVGhlcmUgYXJlIHR3byBraW5kcyBvZiBhY3Rp b25zOgoKLSBBY3Rpb246IEEgcmVndWxhciBhY3Rpb24gdXN1YWxseSB3b3JrcyBvbiB0aGUgc2Vj dGlvbiBjb250ZW50cy4KLSBTbGlkZSBBY3Rpb246IEEgc2xpZGUgYWN0aW9uIHVzdWFsbHkgd2ls bCBuYXJyb3cgdG8gaXRzIG93biBjb250ZW50cy4gIEl0IGNhbiBjcmVhdGUgbmV3IHNsaWRlcyBi eSBjYWxsaW5nIH5kc2xpZGUtLW1ha2Utc2xpZGV+LCB3aGVyZSBpdCBjYW4gb3ZlcnJpZGUgdGhl bSB0byBwcmV2ZW50IHRoZW0gZnJvbSBuYXJyb3dpbmcuICBUaGUgc2xpZGUgYWN0aW9uIGlzIGFs d2F5cyBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciBhY3Rpb24sIHdoZXRoZXIgZ29pbmcgaW4gZm9y d2FyZCBvciByZXZlcnNlLgoqKiBGbG93IENvbnRyb2wKRGVja3MsIHNsaWRlcywgYW5kIGFjdGlv bnMgaW1wbGVtZW50IHRoZSB+ZHNsaWRlLXN0YXRlZnVsLXNlcXVlbmNlfiBpbnRlcmZhY2UuICBP biBlYWNoIGNhbGwgdG8gfmRzbGlkZS1kZWNrLWZvcndhcmR+IG9yIH5kc2xpZGUtZGVjay1iYWNr d2FyZH4sIHRoZSBkZWNrIHJlY2VpdmVzIHRoZSBmaXJzdCBjYWxsIHRvIGl0cyB+ZHNsaWRlLWZv cndhcmR+IG1ldGhvZC4KCkZpcnN0LCB0aGUgZGVjayB3aWxsIGNoZWNrIGZvciBhbnkgc3RlcCBj YWxsYmFja3MuICBUaGVzZSBhcmUgYWRkZWQgd2l0aCB+ZHNsaWRlLXB1c2gtc3RlcH4uIFRoZSBk ZWNrIGRlbGVnYXRlcyB0aGlzIHRvIHRoZSBzbGlkZS4gIFRoZSBzbGlkZSBtYXkgZGVsZWdhdGUg ZG93biB0byBhbiBhY3Rpb24sIHdoaWNoIG1heSBkZWxlZ2F0ZSB0byBhIHNsaWRlLgoKSW4gdGhl IG1vc3QgYmFzaWMgY2FzZSwgZWFjaCBkZWxlZ2F0ZSB3aWxsIHRyeSBhbGwgb2YgaXRzIGFjdGlv bnMgdW50aWwgb25lIHJldHVybnMgbm9uLW5pbC4gIFRoZSBkZWxlZ2F0ZSByZXR1cm5zIHRoZSBm aXJzdCBub24tbmlsbCByZXN1bHQsIGluZGljYXRpbmcgdGhhdCBwcm9ncmVzcyB3YXMgbWFkZS4g IElmIHRoZSBkZWxlZ2F0ZSByZXR1cm5zIG5pbCwgaXQgbWVhbnMgaXQgd2FzIHVuYWJsZSB0byBt YWtlIHByb2dyZXNzLCBhbmQgc28gdGhlIGNhbGxlciB3aWxsIGluc3RlYWQgdHJ5IGl0cyBvd24g bmV4dCBhY3Rpb24uCgpXaGVuZXZlciBhbGwgc2xpZGVzIGFuZCBhY3Rpb25zIHJldHVybiBuaWwg YWxsIHRoZSB3YXkgYmFjayB1cCB0byB0aGUgZGVjaywgaXQgbG9va3MgZm9yIGEgbmV4dCBvciBw cmV2aW91cyB0b3AtbGV2ZWwgaGVhZGluZyB0byBtYWtlIGludG8gYSBzbGlkZS4gIElmIG5vbmUg aXMgZm91bmQsIGl0IGluZGljYXRlcyB0aGF0IHRoZSB1c2VyIGlzIGF0IHRoZSBiZWdpbm5pbmcg b3IgZW5kIG9mIHRoZSBwcmVzZW50YXRpb24uCgpUaGUgZGVjayBvYmplY3QgYW5kIHNsaWRlIGFj dGlvbnMgZnJlcXVlbnRseSBjcmVhdGUgbmV3IGNoaWxkcmVuIGZyb20gb3JnIGhlYWRpbmdzLiAg VGhleSBjYWxsIHRoZWlyIH5kc2xpZGUtYmVnaW5+IG9yIH5kc2xpZGUtZW5kfiBtZXRob2RzIHJp Z2h0IGFmdGVyIHRoYXQuICBJZiB0aGVzZSBtZXRob2RzIGRvbid0IGluZGljYXRlIHByb2dyZXNz LCB0aGUgfmRzbGlkZS1mb3J3YXJkfiBvciB+ZHNsaWRlLWJhY2t+IG1ldGhvZCB3aWxsIGJlIGNh bGxlZC4KKiogSW5zdGFudGlhdGluZyBTbGlkZXMKIytmaW5kZXg6IGRzbGlkZS0tbWFrZS1zbGlk ZQpTbGlkZXMgYXJlIGNyZWF0ZWQgYnkgY2FsbGluZyB+ZHNsaWRlLS1tYWtlLXNsaWRlfiB3aXRo IGFuIG9yZyBlbGVtZW50IGZvciBhIGhlYWRpbmcuICBUaGlzIGZ1bmN0aW9uIGludGVycHJldHMg dGhlIGNsYXNzIG5hbWUgYW5kIGFyZ3VtZW50cyBmb3IgdGhlIG5ldyBzbGlkZSBhbmQgaW5zdGFu dGlhdGVzIHRoZSBvYmplY3QuCgpUaGUgZGVmYXVsdCBjbGFzc2VzIGFuZCBhY3Rpb25zIGNhbiBi ZSBjb25maWd1cmVkIGF0IHRoZSBkb2N1bWVudCBvciBjdXN0b21pemUgbGV2ZWwuICBTZXQgdGhl ID1EU0xJREVfREVDS19DTEFTUz0gYW5kID1EU0xJREVfU0xJREVfQ0xBU1M9IGFzIHdlbGwgYXMg b3RoZXIgcHJvcGVydGllcyB0aGF0IHdvcmsgYXQgdGhlIGhlYWRpbmcgbGV2ZWwuICBUaGUgb3Jk ZXIgb2YgcHJlY2VkZW5jZSAoKk5vdCBmdWxseSBpbXBsZW1lbnRlZCog8J+apyk6CgotIFByb3Bl cnR5IGRlZmluaXRpb24gb2YgdGhlIGN1cnJlbnQgaGVhZGluZwotIFByb3BlcnR5IGRlZmluaXRp b24gaW4gdGhlIGRvY3VtZW50Ci0gQ3VzdG9taXplIHZhcmlhYmxlCgp+ZHNsaWRlLS1tYWtlLXNs aWRlfiB3aWxsIGxvb2sgaW4gb3JkZXIgZm9yIHRoZSBoaWdoZXN0IHByZWNlZGVuY2Ugc2V0dGlu ZyBhbmQgdGhlbiBpbnN0YW50aWF0ZSB0aGUgY2xhc3Mgd2l0aCB0aGF0IHZhbHVlIGluIHRoZSBz bG90LgoqIENvbnRyaWJ1dGluZwo6UFJPUEVSVElFUzoKOkRFU0NSSVBUSU9OOiBHaXZlIG1lIGhh bWJ1cmdlcnMKOkVORDoKLSBTaW5jZSB5b3UgbGlrZWx5IGp1c3QgbmVlZCBzb21ldGhpbmcgdG8g bWFnaWNhbGx5IGhhcHBlbiwgdGhlIHJlY29tbWVuZGVkIG9wdGlvbiBpcyB0byBwbGFjZSBhIGhh bWJ1cmdlciBpbiB0aGUgW1todHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvcG9zaXRyb24tc29s dXRpb25zXVtoYW1idXJnZXIgamFyXV0gYW5kIGZpbGUgYW4gaXNzdWUuCi0gSWYgeW91IGRvIGhh dmUgdGltZSwgZXhjZWxsZW50LiAgSGFwcHkgdG8gc3VwcG9ydCB5b3VyIFBSJ3MgYW5kIHByb3Zp ZGUgY29udGV4dCBhYm91dCB0aGUgYXJjaGl0ZWN0dXJlIGFuZCBiZWhhdmlvci4KKiogV29yayBJ biBQcm9ncmVzcyDwn5qnCk9wZW4gaXNzdWVzIGFuZCBnaXZlIGZlZWRiYWNrIG9uIGZlYXR1cmUg cmVxdWVzdHMuICBDb250cmlidXRpb25zIHdlbGNvbWUuCioqKiBTbGlkZSBBY3Rpb24gUHJlY2Vk ZW5jZQpXaGVuIGEgc2xpZGUgaXMgY3JlYXRlZCBpbiB+ZHNsaWRlLW1ha2Utc2xpZGV+LCBpdCBj YW4gb2J0YWluIHRoZW0gZnJvbSBzZXZlcmFsIHBsYWNlczoKLSBwYXNzZWQgaW4gYXJndW1lbnRz LCBhcyBzbGlkZSBhY3Rpb25zIGRvIHRvIHByZXZlbnQgY2hpbGRyZW4gZnJvbSB0cnlpbmcgdG8g ZGlzcGxheSB0aGVtc2VsdmVzCi0gcHJvcGVydGllcywgaG93IHNsaWRlcyBhcmUgdXN1YWxseSBj b25maWd1cmVkCi0gY3VzdG9taXplIHZhcmlhYmxlcyB0aGF0IHNldCB0aGUgZGVmYXVsdCBhY3Rp b25zLgpUaGUgb3JkZXIgb2YgcHJlY2VkZW5jZSBhbmQgY2FwYWJpbGl0eSB0byBvdmVycmlkZSBv cHRpb25zIGlzIHN0aWxsIHByZXR0eSBpbW1hdHVyZS4KKioqIFNlY29uZGFyeSBDb21tYW5kcwpT ZWUgdGhlIHNlY3Rpb24gYWJvdXQgYmluZGluZ3MgZm9yIGNvbnRleHQuICBWaWRlbyBwbGF5IG9y IG90aGVyIHNpdHVhdGlvbnMgd2hlcmUgdGhlIHByZXNlbnRhdGlvbiBtaWdodCBicmFuY2ggc2hv dWxkIGJlIHN1cHBvcnRlZCBieSBvdmVybG9hZGluZyB0aGUgYmVoYXZpb3Igb2YgfmRzbGlkZS1k ZWNrLXN0YXJ0fi4gIEkgdGhpbmsgdGhpcyBjb21tYW5kIHdpbGwgdHVybiBpbnRvIH5kc2xpZGUt ZGVjay1zZWNvbmRhcnl+IGluIHRoZSB+ZHNsaWRlLW1vZGUtbWFwfi4KKioqIH5kc2xpZGUtZ290 b34sIHN0YXJ0aW5nIGZyb20gcG9pbnQKU2luY2Ugbm90IG1hbnkgYWN0aW9ucyBjdXJyZW50bHkg aGF2ZSBpbXBsZW1lbnRlZCB0aGlzIHZlcnkgYWNjdXJhdGVseSwgcGxheWluZyBmcm9tIHBvaW50 IGlzIGxpa2VseSBub3QgdGhhdCBhY2N1cmF0ZS4gIFByb2dyZXNzIHVwZGF0aW5nIGluIHRoZSBi YXNlIGJ1ZmZlciBpcyBhbHNvIGN1cnJlbnRseSBvbmx5IGF0IHRoZSBzbGlkZSBsZXZlbCBvZiBn cmFudWxhcml0eS4KKioqIEFmZmlsaWF0ZWQgQnVmZmVycwpUaGVyZSBpcyBubyB0cmFja2luZyB3 aGV0aGVyIGEgYnVmZmVyIGlzIHBhcnQgb2YgdGhlIHByZXNlbnRhdGlvbiBvciBub3QuICBIb3cg d291bGQgYSBidWZmZXIgYmVjb21lIG9uZT8gIFNob3VsZCBpdCBiZSBpbXBsaWNpdD8gIFdpdGhv dXQgYW55IHNvcnQgb2YgdHJhY2tpbmcsIHRoZSBjb25zZXF1ZW5jZSBpcyB0aGF0IGhhdmluZyBh IHByZXNlbnRhdGlvbiBvcGVuIGxlYXZlcyB0aGUgbWlub3IgbW9kZSBiaW5kaW5ncyBob3QuICBU aGVzZSBjb21tYW5kcyBkbyB3ZWlyZCB0aGluZ3Mgd2hlbiBydW4gZnJvbSB0aGVzZSBzaXR1YXRp b25zLCBlc3BlY2lhbGx5IGlmIHJ1bm5pbmcgYmFiZWwgc2NyaXB0cywgc28gc29tZSBraW5kIG9m IGZpcnN0LWNsYXNzIGJ1ZmZlciBhZmZpbGlhdGlvbiBzZWVtcyBuZWNlc3NhcnkuCioqKiBOb24t R3JhcGhpYyBEaXNwbGF5CkZvciB0ZXJtaW5hbHMsIHRoZSBsaW5lLWhlaWdodCBiYXNlZCBzbGlk ZS1pbiBlZmZlY3QgaXMgbm90IHN1cHBvcnRlZC4KKioqIEltcHJvcGVyIExldmVscwpDaGlsZHJl biB3aXRoIG5vIHBhcmVudHMgb3IgbWlzc2luZyBhIGxldmVsIGFyZSBjdXJyZW50bHkgbm90IHN1 cHBvcnRlZCBhbmQgbGlrZWx5IGNhdXNlIGJhZCBiZWhhdmlvci4KKioqIENvdW50aW5nIFNsaWRl cwpFc3BlY2lhbGx5IGlmIHNsaWRlcyBsYXVuY2ggc3ViLXNlcXVlbmNlcywgYW5kIHRoZXkgZG8g aXQgZnJvbSBMaXNwLCB0aGlzIGlzIGhhcmQuICBCdWZmZXIgc2xpZGVzIGFuZCBhbHNvIHNsaWRl IGFjdGlvbnMgbWFrZSBpdCBzb21ld2hhdCBhbWJpZ3VvdXMuICBDb3VudGluZyB0cmVlcyBvciB0 cmFja2luZyB0aGUgcG9pbnQgbWlnaHQgYmUgZWFzaWVyLiAgQSB+Y2hpbGRyZW5+IG1ldGhvZCBm b3Igc2VxdWVuY2VzIHdvcmtzIGFzIGxvbmcgYXMgc2VxdWVuY2VzIGFjdHVhbGx5IGltcGxlbWVu dCBpdC4KKioqIE5vbi1PcmcgU2VxdWVuY2VzClRoZXJlJ3Mgbm8gY29uY3JldGUgcmVhc29uIHdo eSBwcmVzZW50YXRpb25zIG5lZWQgdG8gc3RhcnQgd2l0aCBPcmcgbW9kZSBidWZmZXJzLiAgVGhl IGRlY2sgb2JqZWN0IGNvdWxkIGhhdmUgaXRzIG9yZy1zcGVjaWZpYyBmdW5jdGlvbmFsaXR5IHB1 c2hlZCBkb3duIHRvIGFuIG9yZy1tb2RlIGNsYXNzLiAgVGhlIG9ubHkgcmVxdWlyZW1lbnQgaXMg dG8gYmUgYWJsZSB0byBoeWRyYXRlIHNvbWUgc3RhdGVmdWwgc2VxdWVuY2VzLCB3aGljaCBtYXkg aHlkcmF0ZSBhbmQgY2FsbCBpbnRvIHN1Yi1zZXF1ZW5jZXMsIG1lYW5pbmcgYW55dGhpbmcgaXMg cHJldHR5IHRyaXZpYWxseSBwb3NzaWJsZS4KKiBUaGFua3MKOlBST1BFUlRJRVM6CjpERVNDUklQ VElPTjogQW5kIEFja25vd2xlZGdlbWVudHMKOkVORDoKVGhpcyBwYWNrYWdlIGlzIGEgZGlyZWN0 IGRlc2NlbmRhbnQgb2YgVGFrYWFraSBJU0hJS0FXQSdzIFtbaHR0cHM6Ly9naXRodWIuY29tL3Rh a2F4cC9vcmctdHJlZS1zbGlkZV1bb3JnLXRyZWUtc2xpZGVdXSBwYWNrYWdlLiAgTWFueSBvZiB0 aGUgaWRlYXMgYW5kIHNvbWUgb2YgdGhlIGltcGxlbWVudGF0aW9ucyB3ZXJlIGVpdGhlciBpbmhl cml0ZWQgb3IgaW5zcGlyZWQgYnkgaWRlYXMgZnJvbSB0aGF0IHBhY2thZ2UuICBUaGlzIHBhY2th Z2Ugd291bGQgbm90IGV4aXN0IHdpdGhvdXQgdGhlIGluc3BpcmF0aW9uLiAgVGhhbmtzIHRvIGV2 ZXJ5b25lIHdobyBjb250cmlidXRlZCBvbiBvcmctdHJlZS1zbGlkZS4KKiBQcm9udW5jaWF0aW9u CjpQUk9QRVJUSUVTOgo6REVTQ1JJUFRJT046IEJ1dGNoZXIgaXQgUmlnaHQKOkVORDoKV2hpbGUg aXQgbWF5IGhhdmUgYmVlbiBzcG9rZW4gbWFueSB0aW1lcyBiZWZvcmUsIGxldCBpdCBiZSBvZmZp Y2lhbCB0aGF0IHRoZXJlIGlzIG5vIGNvcnJlY3Qgd2F5IHRvIHByb25vdW5jZSBEU0wgSURFLiAg SGVyZSBhcmUgc29tZSBvcHRpb25zOgoKLSBELVMtTCBJLUQtRTogYXMgaWYgaXQgaXMgYW4gSURF IGZvciBkZXNpZ25pbmcgRFNMcywgY2xlYXJseSBmYWxzZSBhbmQgcHJldGVudGlvdXMgc291bmRp bmcsIGJ1dCB0aG9zZSB3aG8ga2VlcCBzY29yZSBsb3NlIGZvciBiZWluZyB0b28gYW54aW91cyB0 byB3aW4KLSBEJ3NsaWRlOiBwZXJoYXBzLCAidGhlIHNsaWRlIgotIERFRUUgc2xpZGU6IFdlIGFy ZSBnb2luZyB1biB1bi1zbGlkZSB5b3VyIHNsaWRlLiAgUG93ZXJwb2ludCBpcyBubyBtb3JlLiAg RW1hY3MgaGFzIHRyaXVtcGhlZCBvdmVyIHRoZSBib2FyZCByb29tIGF0IGxhc3QKClBsZWFzZSBz cHJlYWQgdGhlc2UgYW5kIG90aGVyIGludGVudGlvbmFsbHkgd3JvbmdmdWwgcHJvbnVuY2lhdGlv bnMgdG8gcHJvdGVjdCB0aG9zZSB3aG8gaGF2ZSBvbmx5IGV2ZXIgcmVhZCB0aGUgbmFtZSBmcm9t IHBlcnNlY3V0aW9uIGJ5IHNlbGYtYW5ub2ludGVkIGluLWdyb3VwcyB3aG8gY2xhaW0gdG8ga25v dyB0aGUgY29ycmVjdCB3YXkgdG8gcHJvbm91bmNlIHRoaXMgbWFkZSB1cCB3b3JkLgoqIEluZGlj ZXMKKiogQ29tbWFuZCBhbmQgRnVuY3Rpb24gaW5kZXgKOlBST1BFUlRJRVM6CjpJTkRFWDogZm4K OkVORDoKCioqIENvbmNlcHQgaW5kZXgKOlBST1BFUlRJRVM6CjpJTkRFWDogY3AKOkVORDoKCioq IFZhcmlhYmxlIGluZGV4CjpQUk9QRVJUSUVTOgo6SU5ERVg6IHZyCjpFTkQ6CgoqIENvcHlpbmcK OlBST1BFUlRJRVM6CjpDT1BZSU5HOiB0CjpFTkQ6CgojK2luY2x1ZGU6ICIuLi9DT1BZSU5HIgoK IyBMb2NhbCBWYXJpYWJsZXM6CiMgYWZ0ZXItc2F2ZS1ob29rOiAobGFtYmRhICgpICh3aGVuIChy ZXF1aXJlICdlcmsgbmlsIHQpIChlcmstZXhwb3J0LWRvY3MpKSkKIyBFbmQ6CgAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== --=-=-=--