From mboxrd@z Thu Jan 1 00:00:00 1970 From: ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org (Eric W. Biederman) Subject: Re: For review: user_namespace(7) man page Date: Sat, 30 Aug 2014 16:53:11 -0500 Message-ID: <87d2bhfxvc.fsf@x220.int.ebiederm.org> References: <53F5310A.5080503@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <53F5310A.5080503-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> (Michael Kerrisk's message of "Wed, 20 Aug 2014 18:36:42 -0500") List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: containers-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org Errors-To: containers-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org To: "Michael Kerrisk (man-pages)" Cc: "linux-man-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" , richard.weinberger-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, lkml , Andy Lutomirski List-Id: linux-man@vger.kernel.org Ik1pY2hhZWwgS2VycmlzayAobWFuLXBhZ2VzKSIgPG10ay5tYW5wYWdlc0BnbWFpbC5jb20+IHdy aXRlczoKCj4gSGVsbG8gRXJpYyBldCBhbC4sCj4KPiBGb3IgdmFyaW91cyByZWFzb25zLCBteSB3 b3JrIG9uIHRoZSBuYW1lc3BhY2VzIG1hbiBwYWdlcyAKPiBmZWxsIG9mZiB0aGUgdGFibGUgYSB3 aGlsZSBiYWNrLiBOZXZlcnRoZWxlc3MsIHRoZSBwYWdlcyBoYXZlCj4gYmVlbiBjbG9zZSB0byBj b21wbGV0aW9uIGZvciBhIHdoaWxlIG5vdywgYW5kIEkgcmVjZW50bHkgcmVzdGFydGVkLAo+IGlu IGFuIGVmZm9ydCB0byBmaW5pc2ggdGhlbS4gQXMgeW91IGFsc28gbm90ZWQgdG8gbWUgZjJmLCB0 aGVyZSBoYXZlCj4gYmVlbiByZWNlbnRseSBiZWVuIHNvbWUgc21hbGwgbmFtZXNwYWNlIGNoYW5n ZXMgdGhhdCB5b3UgbWF5IGFmZmVjdAo+IHRoZSBjb250ZW50IG9mIHRoZSBwYWdlcy4gVGhlcmVm b3JlLCBJJ2xsIHRha2UgdGhlIG9wcG9ydHVuaXR5IHRvCj4gc2VuZCB0aGUgbmFtZXNwYWNlLXJl bGF0ZWQgcGFnZXMgb3V0IGZvciBmdXJ0aGVyIChmaW5hbD8pIHJldmlldy4KPgo+IFNvLCBoZXJl LCBJIHN0YXJ0IHdpdGggdGhlIHVzZXJfbmFtZXNwYWNlcyg3KSBwYWdlLCB3aGljaCBpcyBzaG93 biAKPiBpbiByZW5kZXJlZCBmb3JtIGJlbG93LCB3aXRoIHNvdXJjZSBhdHRhY2hlZCB0byB0aGlz IG1haWwuIEknbGwKPiBzZW5kIHZhcmlvdXMgb3RoZXIgcGFnZXMgaW4gZm9sbG93LW9uIG1haWxz Lgo+Cj4gUmV2aWV3IGNvbW1lbnRzL3N1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudHMgLyBidWcg Zml4ZXMgd2VsY29tZS4KPgo+IENoZWVycywKPgo+IE1pY2hhZWwKPgo+ID09Cj4KPiBOQU1FCj4g ICAgICAgIHVzZXJfbmFtZXNwYWNlcyAtIG92ZXJ2aWV3IG9mIExpbnV4IHVzZXJfbmFtZXNwYWNl cwo+Cj4gREVTQ1JJUFRJT04KPiAgICAgICAgRm9yIGFuIG92ZXJ2aWV3IG9mIG5hbWVzcGFjZXMs IHNlZSBuYW1lc3BhY2VzKDcpLgo+Cj4gICAgICAgIFVzZXIgICBuYW1lc3BhY2VzICAgaXNvbGF0 ZSAgIHNlY3VyaXR5LXJlbGF0ZWQgICBpZGVudGlmaWVycyAgYW5kCj4gICAgICAgIGF0dHJpYnV0 ZXMsIGluIHBhcnRpY3VsYXIsIHVzZXIgSURzIGFuZCBncm91cCAgSURzICAoc2VlICBjcmVkZW7i gJAKPiAgICAgICAgdGlhbHMoNyksIHRoZSByb290IGRpcmVjdG9yeSwga2V5cyAoc2VlIGtleWN0 bCgyKSksIGFuZCBjYXBhYmlsaeKAkAo+ICAgICAgICB0aWVzIChzZWUgY2FwYWJpbGl0aWVzKDcp KS4gIEEgcHJvY2VzcydzIHVzZXIgYW5kIGdyb3VwICBJRHMgIGNhbgo+ICAgICAgICBiZSBkaWZm ZXJlbnQgaW5zaWRlIGFuZCBvdXRzaWRlIGEgdXNlciBuYW1lc3BhY2UuICBJbiBwYXJ0aWN1bGFy LAo+ICAgICAgICBhIHByb2Nlc3MgY2FuIGhhdmUgYSBub3JtYWwgdW5wcml2aWxlZ2VkIHVzZXIg SUQgb3V0c2lkZSAgYSAgdXNlcgo+ICAgICAgICBuYW1lc3BhY2Ugd2hpbGUgYXQgdGhlIHNhbWUg dGltZSBoYXZpbmcgYSB1c2VyIElEIG9mIDAgaW5zaWRlIHRoZQo+ICAgICAgICBuYW1lc3BhY2U7 IGluIG90aGVyIHdvcmRzLCB0aGUgcHJvY2VzcyBoYXMgIGZ1bGwgIHByaXZpbGVnZXMgIGZvcgo+ ICAgICAgICBvcGVyYXRpb25zICBpbnNpZGUgIHRoZSAgdXNlciAgbmFtZXNwYWNlLCBidXQgaXMg dW5wcml2aWxlZ2VkIGZvcgo+ICAgICAgICBvcGVyYXRpb25zIG91dHNpZGUgdGhlIG5hbWVzcGFj ZS4KPgo+ICAgIE5lc3RlZCBuYW1lc3BhY2VzLCBuYW1lc3BhY2UgbWVtYmVyc2hpcAo+ICAgICAg ICBVc2VyIG5hbWVzcGFjZXMgY2FuIGJlIG5lc3RlZDsgIHRoYXQgIGlzLCAgZWFjaCAgdXNlciAg bmFtZXNwYWNl4oCUCj4gICAgICAgIGV4Y2VwdCAgdGhlICBpbml0aWFsICAoInJvb3QiKSBuYW1l c3BhY2XigJRoYXMgYSBwYXJlbnQgdXNlciBuYW1lc+KAkAo+ICAgICAgICBwYWNlLCBhbmQgY2Fu IGhhdmUgemVybyBvciBtb3JlIGNoaWxkIHVzZXIgbmFtZXNwYWNlcy4gIFRoZSAgcGFy4oCQCj4g ICAgICAgIGVudCB1c2VyIG5hbWVzcGFjZSBpcyB0aGUgdXNlciBuYW1lc3BhY2Ugb2YgdGhlIHBy b2Nlc3MgdGhhdCBjcmXigJAKPiAgICAgICAgYXRlcyB0aGUgdXNlciBuYW1lc3BhY2UgdmlhIGEg Y2FsbCB0byB1bnNoYXJlKDIpIG9yIGNsb25lKDIpIHdpdGgKPiAgICAgICAgdGhlIENMT05FX05F V1VTRVIgZmxhZy4KPgo+ICAgICAgICBUaGUga2VybmVsIGltcG9zZXMgKHNpbmNlIHZlcnNpb24g My4xMSkgYSBsaW1pdCBvZiAzMiBuZXN0ZWQgbGV24oCQCj4gICAgICAgIGVscyBvZiB1c2VyIG5h bWVzcGFjZXMuICBDYWxscyB0byAgdW5zaGFyZSgyKSAgb3IgIGNsb25lKDIpICB0aGF0Cj4gICAg ICAgIHdvdWxkIGNhdXNlIHRoaXMgbGltaXQgdG8gYmUgZXhjZWVkZWQgZmFpbCB3aXRoIHRoZSBl cnJvciBFVVNFUlMuCj4KPiAgICAgICAgRWFjaCAgcHJvY2VzcyAgaXMgIGEgIG1lbWJlciAgb2Yg IGV4YWN0bHkgIG9uZSB1c2VyIG5hbWVzcGFjZS4gIEEKPiAgICAgICAgcHJvY2VzcyBjcmVhdGVk IHZpYSBmb3JrKDIpIG9yIGNsb25lKDIpIHdpdGhvdXQgdGhlIENMT05FX05FV1VTRVIKPiAgICAg ICAgZmxhZyAgaXMgIGEgIG1lbWJlciAgb2YgdGhlIHNhbWUgdXNlciBuYW1lc3BhY2UgYXMgaXRz IHBhcmVudC4KPiAgICAgICAgQQogICAgICAgICAgIF4gc2luZ2xlLXRocmVhZGVkCgpCZWNhdXNl IG9mIGNocm9vdCBhbmQgb3RoZXIgdGhpbmdzIG11bHRpLXRocmVhZGVkIHByb2Nlc3NlcyBhcmUg bm90CmFsbG93ZWQgdG8gam9pbiBhIHVzZXIgbmFtZXNwYWNlLiAgRm9yIHRoZSBkb2N1bWVudGF0 aW9uIGp1c3Qgc2F5aW5nCnNpbmdsZS10aHJlYWRlZCBzb3VuZHMgbGlrZSBlbm91Z2ggaGVyZS4K Cj4gICAgICAgIHByb2Nlc3MgY2FuIGpvaW4gYW5vdGhlciB1c2VyIG5hbWVzcGFjZSB3aXRoIHNl dG5zKDIpIGlmICBpdCAgaGFzCj4gICAgICAgIHRoZSAgQ0FQX1NZU19BRE1JTiAgaW4gIHRoYXQg bmFtZXNwYWNlOyB1cG9uIGRvaW5nIHNvLCBpdCBnYWlucyBhCj4gICAgICAgIGZ1bGwgc2V0IG9m IGNhcGFiaWxpdGllcyBpbiB0aGF0IG5hbWVzcGFjZS4KPgo+ICAgICAgICBBIGNhbGwgdG8gY2xv bmUoMikgb3IgIHVuc2hhcmUoMikgIHdpdGggIHRoZSAgQ0xPTkVfTkVXVVNFUiAgZmxhZwo+ICAg ICAgICBtYWtlcyAgdGhlICBuZXcgIGNoaWxkICBwcm9jZXNzIChmb3IgY2xvbmUoMikpIG9yIHRo ZSBjYWxsZXIgKGZvcgo+ICAgICAgICB1bnNoYXJlKDIpKSBhIG1lbWJlciBvZiB0aGUgbmV3IHVz ZXIgIG5hbWVzcGFjZSAgY3JlYXRlZCAgYnkgIHRoZQo+ICAgICAgICBjYWxsLgo+Cj4gICAgQ2Fw YWJpbGl0aWVzCj4gICAgICAgIFRoZSBjaGlsZCBwcm9jZXNzIGNyZWF0ZWQgYnkgY2xvbmUoMikg d2l0aCB0aGUgQ0xPTkVfTkVXVVNFUiBmbGFnCj4gICAgICAgIHN0YXJ0cyBvdXQgd2l0aCBhIGNv bXBsZXRlIHNldCBvZiBjYXBhYmlsaXRpZXMgaW4gIHRoZSAgbmV3ICB1c2VyCj4gICAgICAgIG5h bWVzcGFjZS4gIExpa2V3aXNlLCBhIHByb2Nlc3MgdGhhdCBjcmVhdGVzIGEgbmV3IHVzZXIgbmFt ZXNwYWNlCj4gICAgICAgIHVzaW5nIHVuc2hhcmUoMikgIG9yICBqb2lucyAgYW4gIGV4aXN0aW5n ICB1c2VyICBuYW1lc3BhY2UgIHVzaW5nCj4gICAgICAgIHNldG5zKDIpICBnYWlucyBhIGZ1bGwg c2V0IG9mIGNhcGFiaWxpdGllcyBpbiB0aGF0IG5hbWVzcGFjZS4gIE9uCj4gICAgICAgIHRoZSBv dGhlciBoYW5kLCB0aGF0IHByb2Nlc3MgaGFzIG5vIGNhcGFiaWxpdGllcyAgaW4gIHRoZSAgcGFy ZW50Cj4gICAgICAgIChpbiAgdGhlIGNhc2Ugb2YgY2xvbmUoMikpIG9yIHByZXZpb3VzIChpbiB0 aGUgY2FzZSBvZiB1bnNoYXJlKDIpCj4gICAgICAgIGFuZCBzZXRucygyKSkgdXNlciBuYW1lc3Bh Y2UsIGV2ZW4gaWYgdGhlIG5ldyBuYW1lc3BhY2UgIGlzICBjcmXigJAKPiAgICAgICAgYXRlZCAg b3IgIGpvaW5lZCBieSB0aGUgcm9vdCB1c2VyIChpLmUuLCBhIHByb2Nlc3Mgd2l0aCB1c2VyIElE IDAKPiAgICAgICAgaW4gdGhlIHJvb3QgbmFtZXNwYWNlKS4KPgo+ICAgICAgICBOb3RlIHRoYXQg YSBjYWxsIHRvIGV4ZWN2ZSgyKSB3aWxsIGNhdXNlIGEgcHJvY2VzcyAgdG8gIGxvc2UgIGFueQo+ ICAgICAgICBjYXBhYmlsaXRpZXMgdGhhdCBpdCBoYXMsIHVubGVzcyBpdCBoYXMgYSB1c2VyIElE IG9mIDAgd2l0aGluIHRoZQo+ICAgICAgICBuYW1lc3BhY2UuICBTZWUgdGhlIGRpc2N1c3Npb24g b2YgdXNlciAgYW5kICBncm91cCAgSUQgIG1hcHBpbmdzLAo+ICAgICAgICBiZWxvdy4KPgo+ICAg ICAgICBBICAgY2FsbCAgIHRvICAgY2xvbmUoMiksICAgdW5zaGFyZSgyKSwgIG9yICBzZXRucygy KSAgdXNpbmcgIHRoZQo+ICAgICAgICBDTE9ORV9ORVdVU0VSIGZsYWcgc2V0cyB0aGUgICJzZWN1 cmViaXRzIiAgZmxhZ3MgIChzZWUgIGNhcGFiaWxp4oCQCj4gICAgICAgIHRpZXMoNykpICB0byAg dGhlaXIgIGRlZmF1bHQgIHZhbHVlcyAgKGFsbCBmbGFncyBkaXNhYmxlZCkgaW4gdGhlCj4gICAg ICAgIGNoaWxkIChmb3IgY2xvbmUoMikpIG9yIGNhbGxlciAgKGZvciAgdW5zaGFyZSgyKSwgIG9y ICBzZXRucygyKSkuCj4gICAgICAgIE5vdGUgIHRoYXQgIGJlY2F1c2UgIHRoZSBjYWxsZXIgbm8g bG9uZ2VyIGhhcyBjYXBhYmlsaXRpZXMgaW4gaXRzCj4gICAgICAgIG9yaWdpbmFsIHVzZXIgbmFt ZXNwYWNlIGFmdGVyIGEgY2FsbCB0byBzZXRucygyKSwgaXQgaXMgbm90ICBwb3PigJAKPiAgICAg ICAgc2libGUgZm9yIGEgcHJvY2VzcyB0byByZXNldCBpdHMgInNlY3VyZWJpdHMiIGZsYWdzIHdo aWxlIHJldGFpbuKAkAo+ICAgICAgICBpbmcgaXRzIHVzZXIgbmFtZXNwYWNlIG1lbWJlcnNoaXAg YnkgdXNpbmcgIGEgIHBhaXIgIG9mICBzZXRucygyKQo+ICAgICAgICBjYWxscyAgdG8gIG1vdmUg IHRvIGFub3RoZXIgdXNlciBuYW1lc3BhY2UgYW5kIHRoZW4gcmV0dXJuIHRvIGl0cwo+ICAgICAg ICBvcmlnaW5hbCB1c2VyIG5hbWVzcGFjZS4KPgo+ICAgICAgICBIYXZpbmcgYSBjYXBhYmlsaXR5 IGluc2lkZSBhIHVzZXIgbmFtZXNwYWNlIHBlcm1pdHMgYSBwcm9jZXNzICB0bwo+ICAgICAgICBw ZXJmb3JtICBvcGVyYXRpb25zICAodGhhdCAgcmVxdWlyZSAgcHJpdmlsZWdlKSBvbmx5IG9uIHJl c291cmNlcwo+ICAgICAgICBnb3Zlcm5lZCBieSB0aGF0IG5hbWVzcGFjZS4gIFRoZSBydWxlcyBm b3IgZGV0ZXJtaW5pbmcgd2hldGhlciBvcgo+ICAgICAgICBub3QgYSBwcm9jZXNzIGhhcyBhIGNh cGFiaWxpdHkgaW4gYSBwYXJ0aWN1bGFyIHVzZXIgbmFtZXNwYWNlIGFyZQo+ICAgICAgICBhcyBm b2xsb3dzOgo+Cj4gICAgICAgIDEuIEEgcHJvY2VzcyBoYXMgYSBjYXBhYmlsaXR5IGluc2lkZSBh IHVzZXIgbmFtZXNwYWNlIGlmIGl0IGlzICBhCj4gICAgICAgICAgIG1lbWJlciAgb2YgIHRoYXQg IG5hbWVzcGFjZSAgYW5kICBpdCBoYXMgdGhlIGNhcGFiaWxpdHkgaW4gaXRzCj4gICAgICAgICAg IGVmZmVjdGl2ZSBjYXBhYmlsaXR5IHNldC4gIEEgcHJvY2VzcyBjYW4gZ2FpbiBjYXBhYmlsaXRp ZXMgIGluCj4gICAgICAgICAgIGl0cyBlZmZlY3RpdmUgY2FwYWJpbGl0eSBzZXQgaW4gdmFyaW91 cyB3YXlzLiAgRm9yIGV4YW1wbGUsIGl0Cj4gICAgICAgICAgIG1heSBleGVjdXRlIGEgc2V0LXVz ZXItSUQgcHJvZ3JhbSBvciBhbiBleGVjdXRhYmxlIHdpdGggIGFzc2/igJAKPiAgICAgICAgICAg Y2lhdGVkICBmaWxlICBjYXBhYmlsaXRpZXMuICAgSW4gIGFkZGl0aW9uLCBhIHByb2Nlc3MgbWF5 IGdhaW4KPiAgICAgICAgICAgY2FwYWJpbGl0aWVzICB2aWEgIHRoZSAgZWZmZWN0ICBvZiAgY2xv bmUoMiksICB1bnNoYXJlKDIpLCAgb3IKPiAgICAgICAgICAgc2V0bnMoMiksIGFzIGFscmVhZHkg ZGVzY3JpYmVkLgo+Cj4gICAgICAgIDIuIElmIGEgcHJvY2VzcyBoYXMgYSBjYXBhYmlsaXR5IGlu IGEgdXNlciBuYW1lc3BhY2UsIHRoZW4gaXQgaGFzCj4gICAgICAgICAgIHRoYXQgY2FwYWJpbGl0 eSBpbiBhbGwgY2hpbGQgKGFuZCBmdXJ0aGVyIHJlbW92ZWQgIGRlc2NlbmRhbnQpCj4gICAgICAg ICAgIG5hbWVzcGFjZXMgYXMgd2VsbC4KPgo+ICAgICAgICAzLiBXaGVuICBhICB1c2VyICBuYW1l c3BhY2UgIGlzICBjcmVhdGVkLCAgdGhlIGtlcm5lbCByZWNvcmRzIHRoZQo+ICAgICAgICAgICBl ZmZlY3RpdmUgdXNlciBJRCBvZiB0aGUgY3JlYXRpbmcgcHJvY2VzcyBhcyBiZWluZyB0aGUgIm93 bmVyIgo+ICAgICAgICAgICBvZiB0aGUgbmFtZXNwYWNlLiAgQSBwcm9jZXNzIHRoYXQgcmVzaWRl cyBpbiB0aGUgcGFyZW50IG9mIHRoZQo+ICAgICAgICAgICB1c2VyIG5hbWVzcGFjZSBhbmQgd2hv c2UgZWZmZWN0aXZlIHVzZXIgSUQgbWF0Y2hlcyAgdGhlICBvd25lcgo+ICAgICAgICAgICBvZiAg dGhlICBuYW1lc3BhY2UgIGhhcyBhbGwgY2FwYWJpbGl0aWVzIGluIHRoZSBuYW1lc3BhY2UuICBC eQo+ICAgICAgICAgICB2aXJ0dWUgb2YgdGhlIHByZXZpb3VzIHJ1bGUsIHRoaXMgbWVhbnMgdGhh dCB0aGUgIHByb2Nlc3MgIGhhcwo+ICAgICAgICAgICBhbGwgY2FwYWJpbGl0aWVzIGluIGFsbCBm dXJ0aGVyIHJlbW92ZWQgZGVzY2VuZGFudCB1c2VyIG5hbWVz4oCQCj4gICAgICAgICAgIHBhY2Vz IGFzIHdlbGwuCj4KPiAgICBJbnRlcmFjdGlvbiBvZiB1c2VyIG5hbWVzcGFjZXMgYW5kIG90aGVy IHR5cGVzIG9mIG5hbWVzcGFjZXMKPiAgICAgICAgU3RhcnRpbmcgaW4gTGludXggMy44LCB1bnBy aXZpbGVnZWQgIHByb2Nlc3NlcyAgY2FuICBjcmVhdGUgIHVzZXIKPiAgICAgICAgbmFtZXNwYWNl cywgIGFuZCBtb3VudCwgUElELCBJUEMsIG5ldHdvcmssIGFuZCBVVFMgbmFtZXNwYWNlcyBjYW4K PiAgICAgICAgYmUgY3JlYXRlZCB3aXRoIGp1c3QgdGhlIENBUF9TWVNfQURNSU4gY2FwYWJpbGl0 eSBpbiB0aGUgY2FsbGVyJ3MKPiAgICAgICAgdXNlciBuYW1lc3BhY2UuCj4KPiAgICAgICAgSWYg IENMT05FX05FV1VTRVIgIGlzIHNwZWNpZmllZCBhbG9uZyB3aXRoIG90aGVyIENMT05FX05FVyog ZmxhZ3MKPiAgICAgICAgaW4gYSBzaW5nbGUgY2xvbmUoMikgb3IgdW5zaGFyZSgyKSBjYWxsLCB0 aGUgIHVzZXIgIG5hbWVzcGFjZSAgaXMKPiAgICAgICAgZ3VhcmFudGVlZCAgdG8gIGJlICBjcmVh dGVkIGZpcnN0LCBnaXZpbmcgdGhlIGNoaWxkIChjbG9uZSgyKSkgb3IKPiAgICAgICAgY2FsbGVy ICh1bnNoYXJlKDIpKSBwcml2aWxlZ2VzIG92ZXIgdGhlIHJlbWFpbmluZyBuYW1lc3BhY2VzIGNy ZeKAkAo+ICAgICAgICBhdGVkIGJ5IHRoZSBjYWxsLiAgVGh1cywgaXQgaXMgcG9zc2libGUgZm9y IGFuIHVucHJpdmlsZWdlZCBjYWxs4oCQCj4gICAgICAgIGVyIHRvIHNwZWNpZnkgdGhpcyBjb21i aW5hdGlvbiBvZiBmbGFncy4KPgo+ICAgICAgICBXaGVuIGEgbmV3IElQQywgbW91bnQsIG5ldHdv cmssIFBJRCwgb3IgVVRTIG5hbWVzcGFjZSBpcyAgY3JlYXRlZAo+ICAgICAgICB2aWEgY2xvbmUo Mikgb3IgdW5zaGFyZSgyKSwgdGhlIGtlcm5lbCByZWNvcmRzIHRoZSB1c2VyIG5hbWVzcGFjZQo+ ICAgICAgICBvZiB0aGUgY3JlYXRpbmcgcHJvY2VzcyBhZ2FpbnN0IHRoZSBuZXcgbmFtZXNwYWNl LiAgKFRoaXMgYXNzb2Np4oCQCj4gICAgICAgIGF0aW9uICBjYW4ndCAgYmUgIGNoYW5nZWQuKSAg IFdoZW4gYSBwcm9jZXNzIGluIHRoZSBuZXcgbmFtZXNwYWNlCj4gICAgICAgIHN1YnNlcXVlbnRs eSAgcGVyZm9ybXMgIHByaXZpbGVnZWQgIG9wZXJhdGlvbnMgIHRoYXQgIG9wZXJhdGUgIG9uCj4g ICAgICAgIGdsb2JhbCByZXNvdXJjZXMgaXNvbGF0ZWQgYnkgdGhlIG5hbWVzcGFjZSwgdGhlIHBl cm1pc3Npb24gY2hlY2tzCj4gICAgICAgIGFyZSBwZXJmb3JtZWQgYWNjb3JkaW5nIHRvIHRoZSBw cm9jZXNzJ3MgY2FwYWJpbGl0aWVzIGluIHRoZSB1c2VyCj4gICAgICAgIG5hbWVzcGFjZSB0aGF0 IHRoZSBrZXJuZWwgYXNzb2NpYXRlZCB3aXRoIHRoZSBuZXcgbmFtZXNwYWNlLgoKUmVzdHJpY3Rp b25zIG9uIG1vdW50IG5hbWVzcGFjZXMuCgotIEEgbW91bnQgbmFtZXNwYWNlIGhhcyBhIG93bmVy IHVzZXIgbmFtZXNwYWNlLiAgQSBtb3VudCBuYW1lc3BhY2Ugd2hvc2UKICBvd25lciB1c2VyIG5h bWVzcGFjZSBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgb3dlcm5lciB1c2VyIG5hbWVzcGFjZSBvZgog IGl0J3MgcGFyZW50IG1vdW50IG5hbWVzcGFjZSBpcyBjb25zaWRlcmVkIGEgbGVzcyBwcml2aWxl Z2VkIG1vdW50CiAgbmFtZXNwYWNlLgoKLSBXaGVuIGNyZWF0aW5nIGEgbGVzcyBwcml2aWxlZ2Vk IG1vdW50IG5hbWVzcGFjZSBzaGFyZWQgbW91bnRzIGFyZQogIHJlZHVjZWQgdG8gc2xhdmUgbW91 bnRzLiAgVGhpcyBlbnN1cmVzIHRoYXQgbWFwcGluZ3MgcGVyZm9ybWVkIGluIGxlc3MKICBwcml2 aWxlZ2VkIG1vdW50IG5hbWVzcGFjZXMgd2lsbCBub3QgcHJvcG9nYXRlIHRvIG1vcmUgcHJpdmll bGdlZAogIG1vdW50IG5hbWVzcGFjZXMuCgotIE1vdW50cyB0aGF0IGNvbWUgYXMgYSBzaW5nbGUg dW5pdCBmcm9tIG1vcmUgcHJpdmlsZWdlZCBtb3VudCBhcmUKICBsb2NrZWQgdG9nZXRoZXIgYW5k IG1heSBub3QgYmUgc2VwYXJhdGVkIGluIGEgbGVzcyBwcml2aWVsZ2VkIG1vdW50CiAgbmFtZXNw YWNlLgoKLSBUaGUgbW91bnQgZmxhZ3MgcmVhZG9ubHksIG5vZGV2LCBub3N1aWQsIG5vZXhlYywg YW5kIHRoZSBtb3VudCBhdGltZQogIHNldHRpbmdzIHdoZW4gcHJvcG9nYXRlZCBmcm9tIGEgbW9y ZSBwcml2aWVsZ2VkIHRvIGEgbGVzcyBwcml2aWxlZ2VkCiAgbW91bnQgbmFtZXNwYWNlIGJlY29t ZSBsb2NrZWQsIGFuZCBtYXkgbm90IGJlIGNoYW5nZWQgaW4gdGhlIGxlc3MKICBwcml2aWVsZ2Vk IG1vdW50IG5hbWVzcGFjZS4KCi0gKEFzIG9mIDMuMTgtcmMxIChpbiB0b2RheXMgQWwgVmlyb3Mg dmZzLmdpdCNmb3ItbmV4dCB0cmVlKSkgQSBmaWxlIG9yCiAgZGlyZWN0b3J5IHRoYXQgaXMgYSBt b3VudHBvaW50IGluIG9uZSBuYW1lc3BhY2UgdGhhdCBpcyBub3QgYSBtb3VudAogIHBvaW50IGlu IGFub3RoZXIgbmFtZXNwYWNlLCBtYXkgYmUgcmVuYW1lZCwgdW5saW5rZWQsIG9yIHJtZGlyZWQg aW4KICB0aGUgbW91bnQgbmFtZXNwYWNlIGluIHdoaWNoIGl0IGlzIG5vdCBhIG1vdW50IG5hbWVz cGFjZSBpZiB0aGUKICBvcmRpbmFyeSBwZXJtaXNzaW9uIGNoZWNrcyBwYXNzLgoKICBQcmV2aW91 c2x5IGF0dGVtcGluZyB0byBybWRpciwgdW5saW5rIG9yIHJlbmFtZSBhIGZpbGUgb3IgZGlyZWN0 b3J5CiAgdGhhdCB3YXMgYSBtb3VudCBwb2ludCBpbiBhbm90aGVyIG1vdW50IG5hbWVzcGFjZSB3 b3VsZCByZXN1bHQgaW4KICAtRUJVU1kuICBUaGlzIGJlaGF2aW9yIGhhZCB0ZWNobmljYWwgcHJv YmxlbXMgb2YgZW5mb3JjZW1lbnQgKG5mcykKICBhbmQgcmVzdWx0ZWQgaW4gYSBuaWNlIGRlbmlh bCBvZiBzZXJ2aWFsIGF0dGFjayBhZ2FpbnN0IG1vcmUKICBwcml2aWxlZ2VkIHVzZXJzLiAgKEFr YSBwcmV2ZW50aW5nIGluZGl2aWR1YWwgZmlsZXMgZnJvbSBiZWluZyB1cGRhdGVkCiAgYnkgYmlu ZCBtb3VudGluZyBvbiB0b3Agb2YgdGhlbSkuCgo+ICAgIFVzZXIgYW5kIGdyb3VwIElEIG1hcHBp bmdzOiB1aWRfbWFwIGFuZCBnaWRfbWFwCj4gICAgICAgIFdoZW4gYSB1c2VyIG5hbWVzcGFjZSBp cyBjcmVhdGVkLCBpdCBzdGFydHMgb3V0IHdpdGhvdXQgYSBtYXBwaW5nCj4gICAgICAgIG9mIHVz ZXIgSURzIChncm91cCAgSURzKSAgdG8gIHRoZSAgcGFyZW50ICB1c2VyICBuYW1lc3BhY2UuICAg VGhlCj4gICAgICAgIC9wcm9jL1twaWRdL3VpZF9tYXAgICBhbmQgIC9wcm9jL1twaWRdL2dpZF9t YXAgIGZpbGVzICAoYXZhaWxhYmxlCj4gICAgICAgIHNpbmNlIExpbnV4IDMuNSkgZXhwb3NlIHRo ZSAgbWFwcGluZ3MgIGZvciAgdXNlciAgYW5kICBncm91cCAgSURzCj4gICAgICAgIGluc2lkZSAg dGhlICB1c2VyIG5hbWVzcGFjZSBmb3IgdGhlIHByb2Nlc3MgcGlkLiAgVGhlc2UgZmlsZXMgY2Fu Cj4gICAgICAgIGJlIHJlYWQgdG8gdmlldyB0aGUgbWFwcGluZ3MgaW4gYSB1c2VyIG5hbWVzcGFj ZSBhbmQgIHdyaXR0ZW4gIHRvCj4gICAgICAgIChvbmNlKSB0byBkZWZpbmUgdGhlIG1hcHBpbmdz Lgo+Cj4gICAgICAgIFRoZSAgZGVzY3JpcHRpb24gaW4gdGhlIGZvbGxvd2luZyBwYXJhZ3JhcGhz IGV4cGxhaW5zIHRoZSBkZXRhaWxzCj4gICAgICAgIGZvciB1aWRfbWFwOyBnaWRfbWFwIGlzIGV4 YWN0bHkgdGhlIHNhbWUsIGJ1dCAgZWFjaCAgaW5zdGFuY2UgIG9mCj4gICAgICAgICJ1c2VyIElE IiBpcyByZXBsYWNlZCBieSAiZ3JvdXAgSUQiLgo+Cj4gICAgICAgIFRoZSAgdWlkX21hcCAgZmls ZSAgZXhwb3NlcyB0aGUgbWFwcGluZyBvZiB1c2VyIElEcyBmcm9tIHRoZSB1c2VyCj4gICAgICAg IG5hbWVzcGFjZSBvZiB0aGUgcHJvY2VzcyBwaWQgdG8gdGhlIHVzZXIgbmFtZXNwYWNlIG9mIHRo ZSBwcm9jZXNzCj4gICAgICAgIHRoYXQgIG9wZW5lZCAgdWlkX21hcCAgKGJ1dCAgc2VlICBhICBx dWFsaWZpY2F0aW9uICB0byB0aGlzIHBvaW50Cj4gICAgICAgIGJlbG93KS4gIEluIG90aGVyIHdv cmRzLCBwcm9jZXNzZXMgdGhhdCAgYXJlICBpbiAgZGlmZmVyZW50ICB1c2VyCj4gICAgICAgIG5h bWVzcGFjZXMgIHdpbGwgIHBvdGVudGlhbGx5ICBzZWUgIGRpZmZlcmVudCB2YWx1ZXMgd2hlbiBy ZWFkaW5nCj4gICAgICAgIGZyb20gYSBwYXJ0aWN1bGFyIHVpZF9tYXAgZmlsZSwgZGVwZW5kaW5n IG9uIHRoZSB1c2VyIElEIG1hcHBpbmdzCj4gICAgICAgIGZvciB0aGUgdXNlciBuYW1lc3BhY2Vz IG9mIHRoZSByZWFkaW5nIHByb2Nlc3Nlcy4KPgo+ICAgICAgICBFYWNoICBsaW5lICBpbiAgdGhl ICB1aWRfbWFwIGZpbGUgc3BlY2lmaWVzIGEgMS10by0xIG1hcHBpbmcgb2YgYQo+ICAgICAgICBy YW5nZSBvZiBjb250aWd1b3VzIHVzZXIgSURzIGJldHdlZW4gdHdvIHVzZXIgbmFtZXNwYWNlcy4g ICAoV2hlbgo+ICAgICAgICBhICB1c2VyICBuYW1lc3BhY2UgIGlzICBmaXJzdCAgY3JlYXRlZCwg dGhpcyBmaWxlIGlzIGVtcHR5LikgIFRoZQo+ICAgICAgICBzcGVjaWZpY2F0aW9uIGluIGVhY2gg bGluZSB0YWtlcyB0aGUgZm9ybSBvZiB0aHJlZSBudW1iZXJzIGRlbGlt4oCQCj4gICAgICAgIGl0 ZWQgIGJ5IHdoaXRlIHNwYWNlLiAgVGhlIGZpcnN0IHR3byBudW1iZXJzIHNwZWNpZnkgdGhlIHN0 YXJ0aW5nCj4gICAgICAgIHVzZXIgSUQgaW4gZWFjaCBvZiB0aGUgdHdvIHVzZXIgIG5hbWVzcGFj ZXMuICAgVGhlICB0aGlyZCAgbnVtYmVyCj4gICAgICAgIHNwZWNpZmllcyAgdGhlIGxlbmd0aCBv ZiB0aGUgbWFwcGVkIHJhbmdlLiAgSW4gZGV0YWlsLCB0aGUgZmllbGRzCj4gICAgICAgIGFyZSBp bnRlcnByZXRlZCBhcyBmb2xsb3dzOgo+Cj4gICAgICAgICgxKSBUaGUgc3RhcnQgb2YgdGhlIHJh bmdlIG9mIHVzZXIgSURzIGluIHRoZSB1c2VyICBuYW1lc3BhY2UgIG9mCj4gICAgICAgICAgICB0 aGUgcHJvY2VzcyBwaWQuCj4KPiAgICAgICAgKDIpIFRoZSAgc3RhcnQgIG9mICB0aGUgIHJhbmdl ICBvZiB1c2VyIElEcyB0byB3aGljaCB0aGUgdXNlciBJRHMKPiAgICAgICAgICAgIHNwZWNpZmll ZCBieSBmaWVsZCBvbmUgbWFwLiAgSG93ICBmaWVsZCAgdHdvICBpcyAgaW50ZXJwcmV0ZWQKPiAg ICAgICAgICAgIGRlcGVuZHMgIG9uICB3aGV0aGVyICB0aGUgcHJvY2VzcyB0aGF0IG9wZW5lZCB1 aWRfbWFwIGFuZCB0aGUKPiAgICAgICAgICAgIHByb2Nlc3MgcGlkIGFyZSBpbiB0aGUgc2FtZSB1 c2VyIG5hbWVzcGFjZSwgYXMgZm9sbG93czoKPgo+ICAgICAgICAgICAgYSkgSWYgdGhlIHR3byBw cm9jZXNzZXMgYXJlICBpbiAgZGlmZmVyZW50ICB1c2VyICBuYW1lc3BhY2VzOgo+ICAgICAgICAg ICAgICAgZmllbGQgIHR3byBpcyB0aGUgc3RhcnQgb2YgYSByYW5nZSBvZiB1c2VyIElEcyBpbiB0 aGUgdXNlcgo+ICAgICAgICAgICAgICAgbmFtZXNwYWNlIG9mIHRoZSBwcm9jZXNzIHRoYXQgb3Bl bmVkIHVpZF9tYXAuCj4KPiAgICAgICAgICAgIGIpIElmIHRoZSB0d28gcHJvY2Vzc2VzIGFyZSBp biB0aGUgc2FtZSB1c2VyIG5hbWVzcGFjZTogZmllbGQKPiAgICAgICAgICAgICAgIHR3byAgaXMg IHRoZSAgc3RhcnQgb2YgdGhlIHJhbmdlIG9mIHVzZXIgSURzIGluIHRoZSBwYXJlbnQKPiAgICAg ICAgICAgICAgIHVzZXIgbmFtZXNwYWNlIG9mIHRoZSBwcm9jZXNzIHBpZC4gIFRoaXMgY2FzZSBl bmFibGVzICB0aGUKPiAgICAgICAgICAgICAgIG9wZW5lciAgb2YgIHVpZF9tYXAgICh0aGUgIGNv bW1vbiAgY2FzZSAgaGVyZSAgaXMgIG9wZW5pbmcKPiAgICAgICAgICAgICAgIC9wcm9jL3NlbGYv dWlkX21hcCkgdG8gc2VlIHRoZSBtYXBwaW5nIG9mICB1c2VyICBJRHMgIGludG8KPiAgICAgICAg ICAgICAgIHRoZSAgdXNlciAgbmFtZXNwYWNlIG9mIHRoZSBwcm9jZXNzIHRoYXQgY3JlYXRlZCB0 aGlzIHVzZXIKPiAgICAgICAgICAgICAgIG5hbWVzcGFjZS4KPgo+ICAgICAgICAoMykgVGhlIGxl bmd0aCBvZiB0aGUgcmFuZ2Ugb2YgdXNlciBJRHMgdGhhdCAgaXMgIG1hcHBlZCAgYmV0d2Vlbgo+ ICAgICAgICAgICAgdGhlIHR3byB1c2VyIG5hbWVzcGFjZXMuCj4KPiAgICAgICAgU3lzdGVtICBj YWxscyAgdGhhdCAgcmV0dXJuICB1c2VyICBJRHMgIChncm91cCAgSURzKeKAlGZvciBleGFtcGxl LAo+ICAgICAgICBnZXR1aWQoMiksIGdldGdpZCgyKSwgYW5kIHRoZSBjcmVkZW50aWFsIGZpZWxk cyBpbiB0aGUgIHN0cnVjdHVyZQo+ICAgICAgICByZXR1cm5lZCBieSBzdGF0KDIp4oCUcmV0dXJu IHRoZSB1c2VyIElEIChncm91cCBJRCkgbWFwcGVkIGludG8gdGhlCj4gICAgICAgIGNhbGxlcidz IHVzZXIgbmFtZXNwYWNlLgo+Cj4gICAgICAgIFdoZW4gYSBwcm9jZXNzIGFjY2Vzc2VzIGEgZmls ZSwgaXRzIHVzZXIgYW5kIGdyb3VwIElEcyBhcmUgbWFwcGVkCj4gICAgICAgIGludG8gIHRoZSAg aW5pdGlhbCAgdXNlciAgbmFtZXNwYWNlIGZvciB0aGUgcHVycG9zZSBvZiBwZXJtaXNzaW9uCj4g ICAgICAgIGNoZWNraW5nIGFuZCBhc3NpZ25pbmcgSURzIHdoZW4gY3JlYXRpbmcgYSBmaWxlLiAg V2hlbiBhICBwcm9jZXNzCj4gICAgICAgIHJldHJpZXZlcyBmaWxlIHVzZXIgYW5kIGdyb3VwIElE cyB2aWEgc3RhdCgyKSwgdGhlIElEcyBhcmUgbWFwcGVkCj4gICAgICAgIGluIHRoZSBvcHBvc2l0 ZSBkaXJlY3Rpb24sIHRvICBwcm9kdWNlICB2YWx1ZXMgIHJlbGF0aXZlICB0byAgdGhlCj4gICAg ICAgIHByb2Nlc3MgdXNlciBhbmQgZ3JvdXAgSUQgbWFwcGluZ3MuCj4KPiAgICAgICAgVGhlIGlu aXRpYWwgdXNlciBuYW1lc3BhY2UgaGFzIG5vIHBhcmVudCBuYW1lc3BhY2UsIGJ1dCwgZm9yIGNv buKAkAo+ICAgICAgICBzaXN0ZW5jeSwgdGhlIGtlcm5lbCBwcm92aWRlcyBkdW1teSB1c2VyICBh bmQgIGdyb3VwICBJRCAgbWFwcGluZwo+ICAgICAgICBmaWxlcyAgZm9yICB0aGlzIG5hbWVzcGFj ZS4gIExvb2tpbmcgYXQgdGhlIHVpZF9tYXAgZmlsZSAoZ2lkX21hcAo+ICAgICAgICBpcyB0aGUg c2FtZSkgZnJvbSBhIHNoZWxsIGluIHRoZSBpbml0aWFsIG5hbWVzcGFjZSBzaG93czoKPgo+ICAg ICAgICAgICAgJCBjYXQgL3Byb2MvJCQvdWlkX21hcAo+ICAgICAgICAgICAgICAgICAgICAgMCAg ICAgICAgICAwIDQyOTQ5NjcyOTUKPgo+ICAgICAgICBUaGlzIG1hcHBpbmcgdGVsbHMgdXMgdGhh dCB0aGUgcmFuZ2Ugc3RhcnRpbmcgYXQgIHVzZXIgIElEICAwICBpbgo+ICAgICAgICB0aGlzIG5h bWVzcGFjZSBtYXBzIHRvIGEgcmFuZ2Ugc3RhcnRpbmcgYXQgMCBpbiB0aGUgKG5vbmV4aXN0ZW50 KQo+ICAgICAgICBwYXJlbnQgbmFtZXNwYWNlLCBhbmQgdGhlIGxlbmd0aCBvZiAgdGhlICByYW5n ZSAgaXMgIHRoZSAgbGFyZ2VzdAo+ICAgICAgICAzMi1iaXQgdW5zaWduZWQgaW50ZWdlci4KCldo aWNoIGRlbGliZXJhdGVseSBsZWF2ZXMgNDI5NDk2NzI5NSAzMmJpdCAoLTEpIHVubWFwcGVkLiAg KHVpZF90KS0xIGlzCnVzZWQgaW4gc2V2ZXJhbCBpbnRlcmZhY2VzIChsaWtlIHNldHJldWlkKSBh cyBhIHdheSB0byBzcGVjaWZ5IG5vIHVpZApsZWF2aW5nIGl0IHVubWFwcGVkIGFuZCB1bnVzdWFi bGUgZ3VhcmFudGVlcyB0aGF0IHRoZXJlIHdpbGwgYmUgbm8KY29uZnVzaW9uIHdoZW4gdXNpbmcg dGhvc2Uga2VybmVsIG1ldGhvZHMuCgo+ICAgIERlZmluaW5nIHVzZXIgYW5kIGdyb3VwIElEIG1h cHBpbmdzOiB3cml0aW5nIHRvIHVpZF9tYXAgYW5kIGdpZF9tYXAKPiAgICAgICAgQWZ0ZXIgIHRo ZSAgY3JlYXRpb24gb2YgYSBuZXcgdXNlciBuYW1lc3BhY2UsIHRoZSB1aWRfbWFwIGZpbGUgb2YK PiAgICAgICAgb25lIG9mIHRoZSBwcm9jZXNzZXMgaW4gdGhlIG5hbWVzcGFjZSBtYXkgYmUgd3Jp dHRlbiB0byAgb25jZSAgdG8KPiAgICAgICAgZGVmaW5lICB0aGUgIG1hcHBpbmcgIG9mICB1c2Vy IElEcyBpbiB0aGUgbmV3IHVzZXIgbmFtZXNwYWNlLiAgQW4KPiAgICAgICAgYXR0ZW1wdCB0byB3 cml0ZSBtb3JlIHRoYW4gb25jZSB0byAgYSAgdWlkX21hcCAgZmlsZSAgaW4gIGEgIHVzZXIKPiAg ICAgICAgbmFtZXNwYWNlICBmYWlscyAgd2l0aCAgdGhlIGVycm9yIEVQRVJNLiAgU2ltaWxhciBy dWxlcyBhcHBseSBmb3IKPiAgICAgICAgZ2lkX21hcCBmaWxlcy4KPgo+ICAgICAgICBUaGUgbGlu ZXMgd3JpdHRlbiB0byB1aWRfbWFwIChnaWRfbWFwKSBtdXN0IGNvbmZvcm0gdG8gIHRoZSAgZm9s 4oCQCj4gICAgICAgIGxvd2luZyBydWxlczoKPgo+ICAgICAgICAqICBUaGUgIHRocmVlICBmaWVs ZHMgIG11c3QgIGJlIHZhbGlkIG51bWJlcnMsIGFuZCB0aGUgbGFzdCBmaWVsZAo+ICAgICAgICAg ICBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLgo+Cj4gICAgICAgICogIExpbmVzIGFyZSB0ZXJtaW5h dGVkIGJ5IG5ld2xpbmUgY2hhcmFjdGVycy4KPgo+ICAgICAgICAqICBUaGVyZSBpcyBhbiAoYXJi aXRyYXJ5KSBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mICBsaW5lcyAgaW4gIHRoZQo+ICAgICAgICAg ICBmaWxlLiAgQXMgYXQgTGludXggMy44LCB0aGUgbGltaXQgaXMgZml2ZSBsaW5lcy4gIEluIGFk ZGl0aW9uLAo+ICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gdG8gdGhlIGZp bGUgbXVzdCBiZSBsZXNzIHRoYW4gIHRoZQo+ICAgICAgICAgICBzeXN0ZW0gcGFnZSBzaXplLCBh bmQgdGhlIHdyaXRlIG11c3QgYmUgcGVyZm9ybWVkIGF0IHRoZSBzdGFydAo+ICAgICAgICAgICBv ZiB0aGUgZmlsZSAoaS5lLiwgbHNlZWsoMikgYW5kIHB3cml0ZSgyKSAgY2FuJ3QgIGJlICB1c2Vk ICB0bwo+ICAgICAgICAgICB3cml0ZSB0byBub256ZXJvIG9mZnNldHMgaW4gdGhlIGZpbGUpLgo+ Cj4gICAgICAgICogIFRoZSAgcmFuZ2Ugb2YgdXNlciBJRHMgKGdyb3VwIElEcykgc3BlY2lmaWVk IGluIGVhY2ggbGluZSBjYW7igJAKPiAgICAgICAgICAgbm90IG92ZXJsYXAgd2l0aCB0aGUgcmFu Z2VzIGluIGFueSBvdGhlciBsaW5lcy4gIEluICB0aGUgIGluaeKAkAo+ICAgICAgICAgICB0aWFs ICBpbXBsZW1lbnRhdGlvbiAgKExpbnV4IDMuOCksIHRoaXMgcmVxdWlyZW1lbnQgd2FzIHNhdGlz 4oCQCj4gICAgICAgICAgIGZpZWQgYnkgYSBzaW1wbGlzdGljIGltcGxlbWVudGF0aW9uIHRoYXQg aW1wb3NlZCAgdGhlICBmdXJ0aGVyCj4gICAgICAgICAgIHJlcXVpcmVtZW50ICB0aGF0ICB0aGUg IHZhbHVlcyAgaW4gYm90aCBmaWVsZCAxIGFuZCBmaWVsZCAyIG9mCj4gICAgICAgICAgIHN1Y2Nl c3NpdmUgbGluZXMgbXVzdCBiZSBpbiBhc2NlbmRpbmcgbnVtZXJpY2FsICBvcmRlciwgIHdoaWNo Cj4gICAgICAgICAgIHByZXZlbnRlZCBzb21lIG90aGVyd2lzZSB2YWxpZCBtYXBzIGZyb20gYmVp bmcgY3JlYXRlZC4gIExpbnV4Cj4gICAgICAgICAgIDMuOSBhbmQgbGF0ZXIgZml4IHRoaXMgbGlt aXRhdGlvbiwgYWxsb3dpbmcgYW55IHZhbGlkICBzZXQgIG9mCj4gICAgICAgICAgIG5vbm92ZXJs YXBwaW5nIG1hcHMuCj4KPiAgICAgICAgKiAgQXQgbGVhc3Qgb25lIGxpbmUgbXVzdCBiZSB3cml0 dGVuIHRvIHRoZSBmaWxlLgo+Cj4gICAgICAgIFdyaXRlcyB0aGF0IHZpb2xhdGUgdGhlIGFib3Zl IHJ1bGVzIGZhaWwgd2l0aCB0aGUgZXJyb3IgRUlOVkFMLgo+Cj4gICAgICAgIEluICBvcmRlciAg Zm9yICBhICBwcm9jZXNzICB0byAgd3JpdGUgIHRvIHRoZSAvcHJvYy9bcGlkXS91aWRfbWFwCj4g ICAgICAgICgvcHJvYy9bcGlkXS9naWRfbWFwKSBmaWxlLCBhbGwgIG9mICB0aGUgIGZvbGxvd2lu ZyAgcmVxdWlyZW1lbnRzCj4gICAgICAgIG11c3QgYmUgbWV0Ogo+Cj4gICAgICAgIDEuIFRoZSAg d3JpdGluZyAgcHJvY2VzcyAgbXVzdCAgaGF2ZSAgdGhlIENBUF9TRVRVSUQgKENBUF9TRVRHSUQp Cj4gICAgICAgICAgIGNhcGFiaWxpdHkgaW4gdGhlIHVzZXIgbmFtZXNwYWNlIG9mIHRoZSBwcm9j ZXNzIHBpZC4KPgo+ICAgICAgICAyLiBUaGUgd3JpdGluZyBwcm9jZXNzIG11c3QgYmUgaW4gZWl0 aGVyIHRoZSAgdXNlciAgbmFtZXNwYWNlICBvZgo+ICAgICAgICAgICB0aGUgIHByb2Nlc3MgIHBp ZCAgb3IgIGluc2lkZSB0aGUgcGFyZW50IHVzZXIgbmFtZXNwYWNlIG9mIHRoZQo+ICAgICAgICAg ICBwcm9jZXNzIHBpZC4KPgo+ICAgICAgICAzLiBUaGUgbWFwcGVkIHVzZXIgSURzIChncm91cCBJ RHMpIG11c3QgaW4gdHVybiBoYXZlIGEgbWFwcGluZyBpbgo+ICAgICAgICAgICB0aGUgcGFyZW50 IHVzZXIgbmFtZXNwYWNlLgo+Cj4gICAgICAgIDQuIE9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRy dWU6Cj4KPiAgICAgICAgICAgKiAgVGhlICBkYXRhIHdyaXR0ZW4gdG8gdWlkX21hcCAoZ2lkX21h cCkgY29uc2lzdHMgb2YgYSBzaW5nbGUKPiAgICAgICAgICAgICAgbGluZSB0aGF0IG1hcHMgdGhl IHdyaXRpbmcgIHByb2Nlc3MncyAgZmlsZXN5c3RlbSAgdXNlciAgSUQKPiAgICAgICAgICAgICAg KGdyb3VwIElEKSBpbiB0aGUgcGFyZW50IHVzZXIgbmFtZXNwYWNlIHRvIGEgdXNlciBJRCAoZ3Jv dXAKPiAgICAgICAgICAgICAgSUQpIGluIHRoZSB1c2VyIG5hbWVzcGFjZS4gIFRoZSB1c3VhbCAg Y2FzZSAgaGVyZSAgaXMgIHRoYXQKPiAgICAgICAgICAgICAgdGhpcyAgc2luZ2xlICBsaW5lICBw cm92aWRlcyAgYSAgbWFwcGluZyBmb3IgdXNlciBJRCBvZiB0aGUKPiAgICAgICAgICAgICAgcHJv Y2VzcyB0aGF0IGNyZWF0ZWQgdGhlIG5hbWVzcGFjZS4KPgo+ICAgICAgICAgICAqICBUaGUgcHJv Y2VzcyBoYXMgdGhlIENBUF9TRVRVSUQgKENBUF9TRVRHSUQpICBjYXBhYmlsaXR5ICBpbgo+ICAg ICAgICAgICAgICB0aGUgIHBhcmVudCB1c2VyIG5hbWVzcGFjZS4gIFRodXMsIGEgcHJpdmlsZWdl ZCBwcm9jZXNzIGNhbgo+ICAgICAgICAgICAgICBtYWtlIG1hcHBpbmdzIHRvIGFyYml0cmFyeSB1 c2VyIElEcyAoZ3JvdXAgSURzKSBpbiB0aGUgcGFy4oCQCj4gICAgICAgICAgICAgIGVudCB1c2Vy IG5hbWVzcGFjZS4KPgo+ICAgICAgICBXcml0ZXMgdGhhdCB2aW9sYXRlIHRoZSBhYm92ZSBydWxl cyBmYWlsIHdpdGggdGhlIGVycm9yIEVQRVJNLgo+Cj4gICAgVW5tYXBwZWQgdXNlciBhbmQgZ3Jv dXAgSURzCj4gICAgICAgIFRoZXJlIGFyZSB2YXJpb3VzIHBsYWNlcyB3aGVyZSBhbiB1bm1hcHBl ZCB1c2VyIElEIChncm91cCBJRCkgbWF5Cj4gICAgICAgIGJlIGV4cG9zZWQgdG8gdXNlciBzcGFj ZS4gIEZvciBleGFtcGxlLCB0aGUgZmlyc3QgIHByb2Nlc3MgIGluICBhCj4gICAgICAgIG5ldyB1 c2VyIG5hbWVzcGFjZSBtYXkgY2FsbCBnZXR1aWQoKSBiZWZvcmUgYSB1c2VyIElEIG1hcHBpbmcg aGFzCj4gICAgICAgIGJlZW4gZGVmaW5lZCBmb3IgdGhlIG5hbWVzcGFjZS4gIEluIG1vc3Qgc3Vj aCBjYXNlcywgYW4gIHVubWFwcGVkCj4gICAgICAgIHVzZXIgIElEICBpcyAgY29udmVydGVkICB0 byAgdGhlIG92ZXJmbG93IHVzZXIgSUQgKGdyb3VwIElEKTsgdGhlCj4gICAgICAgIGRlZmF1bHQg dmFsdWUgZm9yIHRoZSBvdmVyZmxvdyB1c2VyIElEIChncm91cCBJRCkgaXMgNjU1MzQuICAgU2Vl Cj4gICAgICAgIHRoZSAgICAgZGVzY3JpcHRpb25zICAgIG9mICAgIC9wcm9jL3N5cy9rZXJuZWwv b3ZlcmZsb3d1aWQgICAgYW5kCj4gICAgICAgIC9wcm9jL3N5cy9rZXJuZWwvb3ZlcmZsb3dnaWQg aW4gcHJvYyg1KS4KPgo+ICAgICAgICBUaGUgY2FzZXMgd2hlcmUgdW5tYXBwZWQgSURzIGFyZSBt YXBwZWQgaW4gdGhpcyAgZmFzaGlvbiAgaW5jbHVkZQo+ICAgICAgICBzeXN0ZW0gY2FsbHMgdGhh dCByZXR1cm4gdXNlciBJRHMgKGdldHVpZCgyKSBnZXRnaWQoMiksIGFuZCBzaW1p4oCQCj4gICAg ICAgIGxhciksIGNyZWRlbnRpYWxzIHBhc3NlZCBvdmVyIGEgVU5JWCBkb21haW4gIHNvY2tldCwg IGNyZWRlbnRpYWxzCj4gICAgICAgIHJldHVybmVkICBieSAgc3RhdCgyKSwgIHdhaXRpZCgyKSwg IGFuZCAgdGhlICBTeXN0ZW0gIFYgSVBDICJjdGwiCj4gICAgICAgIElQQ19TVEFUIG9wZXJhdGlv bnMsIGNyZWRlbnRpYWxzIGV4cG9zZWQgYnkgL3Byb2MvUElEL3N0YXR1cyAgYW5kCj4gICAgICAg IHRoZSBmaWxlcyBpbiAvcHJvYy9zeXN2aXBjLyosIGNyZWRlbnRpYWxzIHJldHVybmVkIHZpYSB0 aGUgc2lfdWlkCj4gICAgICAgIGZpZWxkIGluIHRoZSBzaWdpbmZvX3QgcmVjZWl2ZWQgd2l0aCBh IHNpZ25hbCAoc2VlIHNpZ2FjdGlvbigyKSksCj4gICAgICAgIGNyZWRlbnRpYWxzIHdyaXR0ZW4g dG8gdGhlIHByb2Nlc3MgYWNjb3VudGluZyBmaWxlIChzZWUgYWNjdCg1KSksCj4gICAgICAgIGFu ZCBjcmVkZW50aWFscyByZXR1cm5lZCB3aXRoIFBPU0lYIG1lc3NhZ2UgIHF1ZXVlICBub3RpZmlj YXRpb25zCj4gICAgICAgIChzZWUgbXFfbm90aWZ5KDMpKS4KPgo+ICAgICAgICBUaGVyZSAgaXMg IG9uZSBub3RhYmxlIGNhc2Ugd2hlcmUgdW5tYXBwZWQgdXNlciBhbmQgZ3JvdXAgSURzIGFyZQo+ ICAgICAgICBub3QgY29udmVydGVkIHRvIHRoZSBjb3JyZXNwb25kaW5nIG92ZXJmbG93IElEIHZh bHVlLiAgV2hlbiB2aWV34oCQCj4gICAgICAgIGluZyAgYSAgdWlkX21hcCAgb3IgZ2lkX21hcCBm aWxlIGluIHdoaWNoIHRoZXJlIGlzIG5vIG1hcHBpbmcgZm9yCj4gICAgICAgIHRoZSBzZWNvbmQg ZmllbGQsIHRoYXQgZmllbGQgaXMgZGlzcGxheWVkIGFzIDQyOTQ5NjcyOTUgKC0xIGFzIGFuCj4g ICAgICAgIHVuc2lnbmVkIGludGVnZXIpOwo+Cj4gICAgU2V0LXVzZXItSUQgYW5kIHNldC1ncm91 cC1JRCBwcm9ncmFtcwo+ICAgICAgICBXaGVuICBhICBwcm9jZXNzICBpbnNpZGUgIGEgdXNlciBu YW1lc3BhY2UgZXhlY3V0ZXMgYSBzZXQtdXNlci1JRAo+ICAgICAgICAoc2V0LWdyb3VwLUlEKSBw cm9ncmFtLCB0aGUgcHJvY2VzcydzIGVmZmVjdGl2ZSB1c2VyICAoZ3JvdXApICBJRAo+ICAgICAg ICBpbnNpZGUgIHRoZSAgbmFtZXNwYWNlIGlzIGNoYW5nZWQgdG8gd2hhdGV2ZXIgdmFsdWUgaXMg bWFwcGVkIGZvcgo+ICAgICAgICB0aGUgdXNlciAoZ3JvdXApIElEIG9mIHRoZSBmaWxlLiAgSG93 ZXZlciwgaWYgZWl0aGVyIHRoZSB1c2VyICBvcgo+ICAgICAgICB0aGUgZ3JvdXAgSUQgb2YgdGhl IGZpbGUgaGFzIG5vIG1hcHBpbmcgaW5zaWRlIHRoZSBuYW1lc3BhY2UsIHRoZQo+ICAgICAgICBz ZXQtdXNlci1JRCAoc2V0LWdyb3VwLUlEKSBiaXQgaXMgc2lsZW50bHkgaWdub3JlZDogdGhlIG5l dyAgcHJv4oCQCj4gICAgICAgIGdyYW0gIGlzIGV4ZWN1dGVkLCBidXQgdGhlIHByb2Nlc3MncyBl ZmZlY3RpdmUgdXNlciAoZ3JvdXApIElEIGlzCj4gICAgICAgIGxlZnQgdW5jaGFuZ2VkLiAgKFRo aXMgbWlycm9ycyB0aGUgc2VtYW50aWNzIG9mIGV4ZWN1dGluZyBhICBzZXQtCj4gICAgICAgIHVz ZXItSUQgb3Igc2V0LWdyb3VwLUlEIHByb2dyYW0gdGhhdCByZXNpZGVzIG9uIGEgZmlsZXN5c3Rl bSB0aGF0Cj4gICAgICAgIHdhcyBtb3VudGVkIHdpdGggdGhlIE1TX05PU1VJRCBmbGFnLCBhcyBk ZXNjcmliZWQgaW4gbW91bnQoMikuKQo+Cj4gICAgTWlzY2VsbGFuZW91cwo+ICAgICAgICBXaGVu IGEgcHJvY2VzcydzIHVzZXIgYW5kIGdyb3VwIElEcyBhcmUgcGFzc2VkIG92ZXIgYSBVTklYIGRv bWFpbgo+ICAgICAgICBzb2NrZXQgIHRvICBhICBwcm9jZXNzICBpbiAgYSAgZGlmZmVyZW50ICB1 c2VyIG5hbWVzcGFjZSAoc2VlIHRoZQo+ICAgICAgICBkZXNjcmlwdGlvbiBvZiBTQ01fQ1JFREVO VElBTFMgaW4gdW5peCg3KSksIHRoZXkgIGFyZSAgdHJhbnNsYXRlZAo+ICAgICAgICBpbnRvIHRo ZSBjb3JyZXNwb25kaW5nIHZhbHVlcyBhcyBwZXIgdGhlIHJlY2VpdmluZyBwcm9jZXNzJ3MgdXNl cgo+ICAgICAgICBhbmQgZ3JvdXAgSUQgbWFwcGluZ3MuCj4KPiBDT05GT1JNSU5HIFRPCj4gICAg ICAgIE5hbWVzcGFjZXMgYXJlIGEgTGludXgtc3BlY2lmaWMgZmVhdHVyZS4KPgo+IE5PVEVTCj4g ICAgICAgIE92ZXIgdGhlIHllYXJzLCB0aGVyZSBoYXZlIGJlZW4gYSBsb3Qgb2YgZmVhdHVyZXMg dGhhdCBoYXZlICBiZWVuCj4gICAgICAgIGFkZGVkICB0byAgdGhlIExpbnV4IGtlcm5lbCB0aGF0 IGhhdmUgYmVlbiBtYWRlIGF2YWlsYWJsZSBvbmx5IHRvCj4gICAgICAgIHByaXZpbGVnZWQgdXNl cnMgYmVjYXVzZSBvZiB0aGVpciBwb3RlbnRpYWwgdG8gY29uZnVzZSAgc2V0LXVzZXItCj4gICAg ICAgIElELXJvb3QgIGFwcGxpY2F0aW9ucy4gICBJbiBnZW5lcmFsLCBpdCBiZWNvbWVzIHNhZmUg dG8gYWxsb3cgdGhlCj4gICAgICAgIHJvb3QgdXNlciBpbiBhIHVzZXIgbmFtZXNwYWNlIHRvIHVz ZSB0aG9zZSBmZWF0dXJlcyBiZWNhdXNlIGl0IGlzCj4gICAgICAgIGltcG9zc2libGUsICB3aGls ZSAgaW4gIGEgIHVzZXIgbmFtZXNwYWNlLCB0byBnYWluIG1vcmUgcHJpdmlsZWdlCj4gICAgICAg IHRoYW4gdGhlIHJvb3QgdXNlciBvZiBhIHVzZXIgbmFtZXNwYWNlIGhhcy4KPgo+ICAgIEF2YWls YWJpbGl0eQo+ICAgICAgICBVc2Ugb2YgdXNlciBuYW1lc3BhY2VzIHJlcXVpcmVzIGEga2VybmVs IHRoYXQgaXMgY29uZmlndXJlZCAgd2l0aAo+ICAgICAgICB0aGUgIENPTkZJR19VU0VSX05TIG9w dGlvbi4gIFVzZXIgbmFtZXNwYWNlcyByZXF1aXJlIHN1cHBvcnQgaW4gYQo+ICAgICAgICByYW5n ZSBvZiBzdWJzeXN0ZW1zIGFjcm9zcyB0aGUga2VybmVsLiAgV2hlbiBhbiB1bnN1cHBvcnRlZCAg c3Vi4oCQCj4gICAgICAgIHN5c3RlbSAgaXMgY29uZmlndXJlZCBpbnRvIHRoZSBrZXJuZWwsIGl0 IGlzIG5vdCBwb3NzaWJsZSB0byBjb27igJAKPiAgICAgICAgZmlndXJlIHVzZXIgbmFtZXNwYWNl cyBzdXBwb3J0Lgo+Cj4gICAgICAgIEFzIGF0IExpbnV4IDMuOCwgbW9zdCByZWxldmFudCBzdWJz eXN0ZW1zIHN1cHBvcnRlZCAgdXNlciAgbmFtZXPigJAKPiAgICAgICAgcGFjZXMsICBidXQgIGEg bnVtYmVyIG9mIGZpbGVzeXN0ZW1zIGRpZCBub3QgaGF2ZSB0aGUgaW5mcmFzdHJ1Y+KAkAo+ICAg ICAgICB0dXJlIG5lZWRlZCB0byBtYXAgdXNlciBhbmQgZ3JvdXAgSURzICBiZXR3ZWVuICB1c2Vy ICBuYW1lc3BhY2VzLgo+ICAgICAgICBMaW51eCAgMy45ICBhZGRlZCB0aGUgcmVxdWlyZWQgaW5m cmFzdHJ1Y3R1cmUgc3VwcG9ydCBmb3IgbWFueSBvZgo+ICAgICAgICB0aGUgcmVtYWluaW5nIHVu c3VwcG9ydGVkIGZpbGVzeXN0ZW1zIChQbGFuIDkgKDlQKSwgIEFuZHJldyAgRmlsZQo+ICAgICAg ICBTeXN0ZW0gIChBRlMpLCAgQ2VwaCwgIENJRlMsICBDT0RBLCAgTkZTLCBhbmQgT0NGUzIpLiAg TGludXggMy4xMQo+ICAgICAgICBhZGRlZCBzdXBwb3J0IHRoZSBsYXN0IG9mIHRoZSB1bnN1cHBv cnRlZCBtYWpvciBmaWxlc3lzdGVtcywgWEZTLgo+Cj4gRVhBTVBMRQo+ICAgICAgICBUaGUgcHJv Z3JhbSBiZWxvdyBpcyBkZXNpZ25lZCB0byBhbGxvdyAgZXhwZXJpbWVudGluZyAgd2l0aCAgdXNl cgo+ICAgICAgICBuYW1lc3BhY2VzLCAgYXMgIHdlbGwgIGFzICBvdGhlciB0eXBlcyBvZiBuYW1l c3BhY2VzLiAgSXQgY3JlYXRlcwo+ICAgICAgICBuYW1lc3BhY2VzIGFzIHNwZWNpZmllZCBieSBj b21tYW5kLWxpbmUgb3B0aW9ucyBhbmQgdGhlbiBleGVjdXRlcwo+ICAgICAgICBhICBjb21tYW5k ICBpbnNpZGUgIHRob3NlICBuYW1lc3BhY2VzLiAgIFRoZSBjb21tZW50cyBhbmQgdXNhZ2UoKQo+ ICAgICAgICBmdW5jdGlvbiBpbnNpZGUgdGhlIHByb2dyYW0gcHJvdmlkZSBhICBmdWxsICBleHBs YW5hdGlvbiAgb2YgIHRoZQo+ICAgICAgICBwcm9ncmFtLiAgVGhlIGZvbGxvd2luZyBzaGVsbCBz ZXNzaW9uIGRlbW9uc3RyYXRlcyBpdHMgdXNlLgo+Cj4gICAgICAgIEZpcnN0LCB3ZSBsb29rIGF0 IHRoZSBydW4tdGltZSBlbnZpcm9ubWVudDoKPgo+ICAgICAgICAgICAgJCB1bmFtZSAtcnMgICAg ICMgTmVlZCBMaW51eCAzLjggb3IgbGF0ZXIKPiAgICAgICAgICAgIExpbnV4IDMuOC4wCj4gICAg ICAgICAgICAkIGlkIC11ICAgICAgICAgIyBSdW5uaW5nIGFzIHVucHJpdmlsZWdlZCB1c2VyCj4g ICAgICAgICAgICAxMDAwCj4gICAgICAgICAgICAkIGlkIC1nCj4gICAgICAgICAgICAxMDAwCj4K PiAgICAgICAgTm93ICBzdGFydCBhIG5ldyBzaGVsbCBpbiBuZXcgdXNlciAoLVUpLCBtb3VudCAo LW0pLCBhbmQgUElEICgtcCkKPiAgICAgICAgbmFtZXNwYWNlcywgd2l0aCB1c2VyIElEICgtTSkg YW5kIGdyb3VwIElEICgtRykgMTAwMCBtYXBwZWQgdG8gIDAKPiAgICAgICAgaW5zaWRlIHRoZSB1 c2VyIG5hbWVzcGFjZToKPgo+ICAgICAgICAgICAgJCAuL3VzZXJuc19jaGlsZF9leGVjIC1wIC1t IC1VIC1NICcwIDEwMDAgMScgLUcgJzAgMTAwMCAxJyBiYXNoCj4KPiAgICAgICAgVGhlICBzaGVs bCAgaGFzIFBJRCAxLCBiZWNhdXNlIGl0IGlzIHRoZSBmaXJzdCBwcm9jZXNzIGluIHRoZSBuZXcK PiAgICAgICAgUElEIG5hbWVzcGFjZToKPgo+ICAgICAgICAgICAgYmFzaCQgZWNobyAkJAo+ICAg ICAgICAgICAgMQo+Cj4gICAgICAgIEluc2lkZSB0aGUgdXNlciBuYW1lc3BhY2UsIHRoZSBzaGVs bCBoYXMgdXNlciBhbmQgZ3JvdXAgSUQgMCwgYW5kCj4gICAgICAgIGEgZnVsbCBzZXQgb2YgcGVy bWl0dGVkIGFuZCBlZmZlY3RpdmUgY2FwYWJpbGl0aWVzOgo+Cj4gICAgICAgICAgICBiYXNoJCBj YXQgL3Byb2MvJCQvc3RhdHVzIHwgZWdyZXAgJ15bVUddaWQnCj4gICAgICAgICAgICBVaWQ6IDAg ICAgMCAgICAwICAgIDAKPiAgICAgICAgICAgIEdpZDogMCAgICAwICAgIDAgICAgMAo+ICAgICAg ICAgICAgYmFzaCQgY2F0IC9wcm9jLyQkL3N0YXR1cyB8IGVncmVwICdeQ2FwKFBybXxJbmh8RWZm KScKPiAgICAgICAgICAgIENhcEluaDogICAwMDAwMDAwMDAwMDAwMDAwCj4gICAgICAgICAgICBD YXBQcm06ICAgMDAwMDAwMWZmZmZmZmZmZgo+ICAgICAgICAgICAgQ2FwRWZmOiAgIDAwMDAwMDFm ZmZmZmZmZmYKPgo+ICAgICAgICBNb3VudGluZyAgYSBuZXcgL3Byb2MgZmlsZXN5c3RlbSBhbmQg bGlzdGluZyBhbGwgb2YgdGhlIHByb2Nlc3Nlcwo+ICAgICAgICB2aXNpYmxlIGluIHRoZSBuZXcg UElEIG5hbWVzcGFjZSBzaG93cyB0aGF0IHRoZSBzaGVsbCAgY2FuJ3QgIHNlZQo+ICAgICAgICBh bnkgcHJvY2Vzc2VzIG91dHNpZGUgdGhlIFBJRCBuYW1lc3BhY2U6Cj4KPiAgICAgICAgICAgIGJh c2gkIG1vdW50IC10IHByb2MgcHJvYyAvcHJvYwo+ICAgICAgICAgICAgYmFzaCQgcHMgYXgKPiAg ICAgICAgICAgICAgUElEIFRUWSAgICAgIFNUQVQgICBUSU1FIENPTU1BTkQKPiAgICAgICAgICAg ICAgICAxIHB0cy8zICAgIFMgICAgICAwOjAwIGJhc2gKPiAgICAgICAgICAgICAgIDIyIHB0cy8z ICAgIFIrICAgICAwOjAwIHBzIGF4Cj4KPiAgICBQcm9ncmFtIHNvdXJjZQo+Cj4gICAgICAgIC8q IHVzZXJuc19jaGlsZF9leGVjLmMKPgo+ICAgICAgICAgICBMaWNlbnNlZCB1bmRlciBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSB2MiBvciBsYXRlcgo+Cj4gICAgICAgICAgIENyZWF0ZSBhIGNo aWxkIHByb2Nlc3MgdGhhdCBleGVjdXRlcyBhIHNoZWxsIGNvbW1hbmQgaW4gbmV3Cj4gICAgICAg ICAgIG5hbWVzcGFjZShzKTsgYWxsb3cgVUlEIGFuZCBHSUQgbWFwcGluZ3MgdG8gYmUgc3BlY2lm aWVkIHdoZW4KPiAgICAgICAgICAgY3JlYXRpbmcgYSB1c2VyIG5hbWVzcGFjZS4KPiAgICAgICAg Ki8KPiAgICAgICAgI2RlZmluZSBfR05VX1NPVVJDRQo+ICAgICAgICAjaW5jbHVkZSA8c2NoZWQu aD4KPiAgICAgICAgI2luY2x1ZGUgPHVuaXN0ZC5oPgo+ICAgICAgICAjaW5jbHVkZSA8c3RkbGli Lmg+Cj4gICAgICAgICNpbmNsdWRlIDxzeXMvd2FpdC5oPgo+ICAgICAgICAjaW5jbHVkZSA8c2ln bmFsLmg+Cj4gICAgICAgICNpbmNsdWRlIDxmY250bC5oPgo+ICAgICAgICAjaW5jbHVkZSA8c3Rk aW8uaD4KPiAgICAgICAgI2luY2x1ZGUgPHN0cmluZy5oPgo+ICAgICAgICAjaW5jbHVkZSA8bGlt aXRzLmg+Cj4gICAgICAgICNpbmNsdWRlIDxlcnJuby5oPgo+Cj4gICAgICAgIC8qIEEgc2ltcGxl IGVycm9yLWhhbmRsaW5nIGZ1bmN0aW9uOiBwcmludCBhbiBlcnJvciBtZXNzYWdlIGJhc2VkCj4g ICAgICAgICAgIG9uIHRoZSB2YWx1ZSBpbiAnZXJybm8nIGFuZCB0ZXJtaW5hdGUgdGhlIGNhbGxp bmcgcHJvY2VzcyAqLwo+Cj4gICAgICAgICNkZWZpbmUgZXJyRXhpdChtc2cpICAgIGRvIHsgcGVy cm9yKG1zZyk7IGV4aXQoRVhJVF9GQUlMVVJFKTsgXAo+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9IHdoaWxlICgwKQo+Cj4gICAgICAgIHN0cnVjdCBjaGlsZF9hcmdzIHsKPiAgICAg ICAgICAgIGNoYXIgKiphcmd2OyAgICAgICAgLyogQ29tbWFuZCB0byBiZSBleGVjdXRlZCBieSBj aGlsZCwgd2l0aCBhcmdzICovCj4gICAgICAgICAgICBpbnQgICAgcGlwZV9mZFsyXTsgIC8qIFBp cGUgdXNlZCB0byBzeW5jaHJvbml6ZSBwYXJlbnQgYW5kIGNoaWxkICovCj4gICAgICAgIH07Cj4K PiAgICAgICAgc3RhdGljIGludCB2ZXJib3NlOwo+Cj4gICAgICAgIHN0YXRpYyB2b2lkCj4gICAg ICAgIHVzYWdlKGNoYXIgKnBuYW1lKQo+ICAgICAgICB7Cj4gICAgICAgICAgICBmcHJpbnRmKHN0 ZGVyciwgIlVzYWdlOiAlcyBbb3B0aW9uc10gY21kIFthcmcuLi5dXG5cbiIsIHBuYW1lKTsKPiAg ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ3JlYXRlIGEgY2hpbGQgcHJvY2VzcyB0aGF0IGV4 ZWN1dGVzIGEgc2hlbGwgIgo+ICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCBpbiBhIG5ldyB1 c2VyIG5hbWVzcGFjZSxcbiIKPiAgICAgICAgICAgICAgICAgICAgImFuZCBwb3NzaWJseSBhbHNv IG90aGVyIG5ldyBuYW1lc3BhY2UocykuXG5cbiIpOwo+ICAgICAgICAgICAgZnByaW50ZihzdGRl cnIsICJPcHRpb25zIGNhbiBiZTpcblxuIik7Cj4gICAgICAgICNkZWZpbmUgZnBlKHN0cikgZnBy aW50ZihzdGRlcnIsICIgICAgJXMiLCBzdHIpOwo+ICAgICAgICAgICAgZnBlKCItaSAgICAgICAg ICBOZXcgSVBDIG5hbWVzcGFjZVxuIik7Cj4gICAgICAgICAgICBmcGUoIi1tICAgICAgICAgIE5l dyBtb3VudCBuYW1lc3BhY2VcbiIpOwo+ICAgICAgICAgICAgZnBlKCItbiAgICAgICAgICBOZXcg bmV0d29yayBuYW1lc3BhY2VcbiIpOwo+ICAgICAgICAgICAgZnBlKCItcCAgICAgICAgICBOZXcg UElEIG5hbWVzcGFjZVxuIik7Cj4gICAgICAgICAgICBmcGUoIi11ICAgICAgICAgIE5ldyBVVFMg bmFtZXNwYWNlXG4iKTsKPiAgICAgICAgICAgIGZwZSgiLVUgICAgICAgICAgTmV3IHVzZXIgbmFt ZXNwYWNlXG4iKTsKPiAgICAgICAgICAgIGZwZSgiLU0gdWlkX21hcCAgU3BlY2lmeSBVSUQgbWFw IGZvciB1c2VyIG5hbWVzcGFjZVxuIik7Cj4gICAgICAgICAgICBmcGUoIi1HIGdpZF9tYXAgIFNw ZWNpZnkgR0lEIG1hcCBmb3IgdXNlciBuYW1lc3BhY2VcbiIpOwo+ICAgICAgICAgICAgZnBlKCIt eiAgICAgICAgICBNYXAgdXNlcidzIFVJRCBhbmQgR0lEIHRvIDAgaW4gdXNlciBuYW1lc3BhY2Vc biIpOwo+ICAgICAgICAgICAgZnBlKCIgICAgICAgICAgICAoZXF1aXZhbGVudCB0bzogLU0gJzAg PHVpZD4gMScgLUcgJzAgPGdpZD4gMScpXG4iKTsKPiAgICAgICAgICAgIGZwZSgiLXYgICAgICAg ICAgRGlzcGxheSB2ZXJib3NlIG1lc3NhZ2VzXG4iKTsKPiAgICAgICAgICAgIGZwZSgiXG4iKTsK PiAgICAgICAgICAgIGZwZSgiSWYgLXosIC1NLCBvciAtRyBpcyBzcGVjaWZpZWQsIC1VIGlzIHJl cXVpcmVkLlxuIik7Cj4gICAgICAgICAgICBmcGUoIkl0IGlzIG5vdCBwZXJtaXR0ZWQgdG8gc3Bl Y2lmeSBib3RoIC16IGFuZCBlaXRoZXIgLU0gb3IgLUcuXG4iKTsKPiAgICAgICAgICAgIGZwZSgi XG4iKTsKPiAgICAgICAgICAgIGZwZSgiTWFwIHN0cmluZ3MgZm9yIC1NIGFuZCAtRyBjb25zaXN0 IG9mIHJlY29yZHMgb2YgdGhlIGZvcm06XG4iKTsKPiAgICAgICAgICAgIGZwZSgiXG4iKTsKPiAg ICAgICAgICAgIGZwZSgiICAgIElELWluc2lkZS1ucyAgIElELW91dHNpZGUtbnMgICBsZW5cbiIp Owo+ICAgICAgICAgICAgZnBlKCJcbiIpOwo+ICAgICAgICAgICAgZnBlKCJBIG1hcCBzdHJpbmcg Y2FuIGNvbnRhaW4gbXVsdGlwbGUgcmVjb3Jkcywgc2VwYXJhdGVkIgo+ICAgICAgICAgICAgICAg ICIgYnkgY29tbWFzO1xuIik7Cj4gICAgICAgICAgICBmcGUoInRoZSBjb21tYXMgYXJlIHJlcGxh Y2VkIGJ5IG5ld2xpbmVzIGJlZm9yZSB3cml0aW5nIgo+ICAgICAgICAgICAgICAgICIgdG8gbWFw IGZpbGVzLlxuIik7Cj4KPiAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKPiAgICAgICAg fQo+Cj4gICAgICAgIC8qIFVwZGF0ZSB0aGUgbWFwcGluZyBmaWxlICdtYXBfZmlsZScsIHdpdGgg dGhlIHZhbHVlIHByb3ZpZGVkIGluCj4gICAgICAgICAgICdtYXBwaW5nJywgYSBzdHJpbmcgdGhh dCBkZWZpbmVzIGEgVUlEIG9yIEdJRCBtYXBwaW5nLiBBIFVJRCBvcgo+ICAgICAgICAgICBHSUQg bWFwcGluZyBjb25zaXN0cyBvZiBvbmUgb3IgbW9yZSBuZXdsaW5lLWRlbGltaXRlZCByZWNvcmRz Cj4gICAgICAgICAgIG9mIHRoZSBmb3JtOgo+Cj4gICAgICAgICAgICAgICBJRF9pbnNpZGUtbnMg ICAgSUQtb3V0c2lkZS1ucyAgIGxlbmd0aAo+Cj4gICAgICAgICAgIFJlcXVpcmluZyB0aGUgdXNl ciB0byBzdXBwbHkgYSBzdHJpbmcgdGhhdCBjb250YWlucyBuZXdsaW5lcyBpcwo+ICAgICAgICAg ICBvZiBjb3Vyc2UgaW5jb252ZW5pZW50IGZvciBjb21tYW5kLWxpbmUgdXNlLiBUaHVzLCB3ZSBw ZXJtaXQgdGhlCj4gICAgICAgICAgIHVzZSBvZiBjb21tYXMgdG8gZGVsaW1pdCByZWNvcmRzIGlu IHRoaXMgc3RyaW5nLCBhbmQgcmVwbGFjZSB0aGVtCj4gICAgICAgICAgIHdpdGggbmV3bGluZXMg YmVmb3JlIHdyaXRpbmcgdGhlIHN0cmluZyB0byB0aGUgZmlsZS4gKi8KPgo+ICAgICAgICBzdGF0 aWMgdm9pZAo+ICAgICAgICB1cGRhdGVfbWFwKGNoYXIgKm1hcHBpbmcsIGNoYXIgKm1hcF9maWxl KQo+ICAgICAgICB7Cj4gICAgICAgICAgICBpbnQgZmQsIGo7Cj4gICAgICAgICAgICBzaXplX3Qg bWFwX2xlbjsgICAgIC8qIExlbmd0aCBvZiAnbWFwcGluZycgKi8KPgo+ICAgICAgICAgICAgLyog UmVwbGFjZSBjb21tYXMgaW4gbWFwcGluZyBzdHJpbmcgd2l0aCBuZXdsaW5lcyAqLwo+Cj4gICAg ICAgICAgICBtYXBfbGVuID0gc3RybGVuKG1hcHBpbmcpOwo+ICAgICAgICAgICAgZm9yIChqID0g MDsgaiA8IG1hcF9sZW47IGorKykKPiAgICAgICAgICAgICAgICBpZiAobWFwcGluZ1tqXSA9PSAn LCcpCj4gICAgICAgICAgICAgICAgICAgIG1hcHBpbmdbal0gPSAnXG4nOwo+Cj4gICAgICAgICAg ICBmZCA9IG9wZW4obWFwX2ZpbGUsIE9fUkRXUik7Cj4gICAgICAgICAgICBpZiAoZmQgPT0gLTEp IHsKPiAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBvcGVuICVzOiAlc1xu IiwgbWFwX2ZpbGUsCj4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpOwo+ ICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKPiAgICAgICAgICAgIH0KPgo+ICAg ICAgICAgICAgaWYgKHdyaXRlKGZkLCBtYXBwaW5nLCBtYXBfbGVuKSAhPSBtYXBfbGVuKSB7Cj4g ICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogd3JpdGUgJXM6ICVzXG4iLCBt YXBfZmlsZSwKPiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSk7Cj4gICAg ICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwo+ICAgICAgICAgICAgfQo+Cj4gICAgICAg ICAgICBjbG9zZShmZCk7Cj4gICAgICAgIH0KPgo+ICAgICAgICBzdGF0aWMgaW50ICAgICAgICAg ICAgICAvKiBTdGFydCBmdW5jdGlvbiBmb3IgY2xvbmVkIGNoaWxkICovCj4gICAgICAgIGNoaWxk RnVuYyh2b2lkICphcmcpCj4gICAgICAgIHsKPiAgICAgICAgICAgIHN0cnVjdCBjaGlsZF9hcmdz ICphcmdzID0gKHN0cnVjdCBjaGlsZF9hcmdzICopIGFyZzsKPiAgICAgICAgICAgIGNoYXIgY2g7 Cj4KPiAgICAgICAgICAgIC8qIFdhaXQgdW50aWwgdGhlIHBhcmVudCBoYXMgdXBkYXRlZCB0aGUg VUlEIGFuZCBHSUQgbWFwcGluZ3MuCj4gICAgICAgICAgICAgICBTZWUgdGhlIGNvbW1lbnQgaW4g bWFpbigpLiBXZSB3YWl0IGZvciBlbmQgb2YgZmlsZSBvbiBhCj4gICAgICAgICAgICAgICBwaXBl IHRoYXQgd2lsbCBiZSBjbG9zZWQgYnkgdGhlIHBhcmVudCBwcm9jZXNzIG9uY2UgaXQgaGFzCj4g ICAgICAgICAgICAgICB1cGRhdGVkIHRoZSBtYXBwaW5ncy4gKi8KPgo+ICAgICAgICAgICAgY2xv c2UoYXJncy0+cGlwZV9mZFsxXSk7ICAgIC8qIENsb3NlIG91ciBkZXNjcmlwdG9yIGZvciB0aGUg d3JpdGUKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgb2Yg dGhlIHBpcGUgc28gdGhhdCB3ZSBzZWUgRU9GCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgd2hlbiBwYXJlbnQgY2xvc2VzIGl0cyBkZXNjcmlwdG9yICovCj4gICAg ICAgICAgICBpZiAocmVhZChhcmdzLT5waXBlX2ZkWzBdLCAmY2gsIDEpICE9IDApIHsKPiAgICAg ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKPiAgICAgICAgICAgICAgICAgICAgICAgICJGYWls dXJlIGluIGNoaWxkOiByZWFkIGZyb20gcGlwZSByZXR1cm5lZCAhPSAwXG4iKTsKPiAgICAgICAg ICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Cj4gICAgICAgICAgICB9Cj4KPiAgICAgICAgICAg IC8qIEV4ZWN1dGUgYSBzaGVsbCBjb21tYW5kICovCj4KPiAgICAgICAgICAgIHByaW50ZigiQWJv dXQgdG8gZXhlYyAlc1xuIiwgYXJncy0+YXJndlswXSk7Cj4gICAgICAgICAgICBleGVjdnAoYXJn cy0+YXJndlswXSwgYXJncy0+YXJndik7Cj4gICAgICAgICAgICBlcnJFeGl0KCJleGVjdnAiKTsK PiAgICAgICAgfQo+Cj4gICAgICAgICNkZWZpbmUgU1RBQ0tfU0laRSAoMTAyNCAqIDEwMjQpCj4K PiAgICAgICAgc3RhdGljIGNoYXIgY2hpbGRfc3RhY2tbU1RBQ0tfU0laRV07ICAgIC8qIFNwYWNl IGZvciBjaGlsZCdzIHN0YWNrICovCj4KPiAgICAgICAgaW50Cj4gICAgICAgIG1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKPiAgICAgICAgewo+ICAgICAgICAgICAgaW50IGZsYWdzLCBvcHQs IG1hcF96ZXJvOwo+ICAgICAgICAgICAgcGlkX3QgY2hpbGRfcGlkOwo+ICAgICAgICAgICAgc3Ry dWN0IGNoaWxkX2FyZ3MgYXJnczsKPiAgICAgICAgICAgIGNoYXIgKnVpZF9tYXAsICpnaWRfbWFw Owo+ICAgICAgICAgICAgY29uc3QgaW50IE1BUF9CVUZfU0laRSA9IDEwMDsKPiAgICAgICAgICAg IGNoYXIgbWFwX2J1ZltNQVBfQlVGX1NJWkVdOwo+ICAgICAgICAgICAgY2hhciBtYXBfcGF0aFtQ QVRIX01BWF07Cj4KPiAgICAgICAgICAgIC8qIFBhcnNlIGNvbW1hbmQtbGluZSBvcHRpb25zLiBU aGUgaW5pdGlhbCAnKycgY2hhcmFjdGVyIGluCj4gICAgICAgICAgICAgICB0aGUgZmluYWwgZ2V0 b3B0KCkgYXJndW1lbnQgcHJldmVudHMgR05VLXN0eWxlIHBlcm11dGF0aW9uCj4gICAgICAgICAg ICAgICBvZiBjb21tYW5kLWxpbmUgb3B0aW9ucy4gVGhhdCdzIHVzZWZ1bCwgc2luY2Ugc29tZXRp bWVzCj4gICAgICAgICAgICAgICB0aGUgJ2NvbW1hbmQnIHRvIGJlIGV4ZWN1dGVkIGJ5IHRoaXMg cHJvZ3JhbSBpdHNlbGYKPiAgICAgICAgICAgICAgIGhhcyBjb21tYW5kLWxpbmUgb3B0aW9ucy4g V2UgZG9uJ3Qgd2FudCBnZXRvcHQoKSB0byB0cmVhdAo+ICAgICAgICAgICAgICAgdGhvc2UgYXMg b3B0aW9ucyB0byB0aGlzIHByb2dyYW0uICovCj4KPiAgICAgICAgICAgIGZsYWdzID0gMDsKPiAg ICAgICAgICAgIHZlcmJvc2UgPSAwOwo+ICAgICAgICAgICAgZ2lkX21hcCA9IE5VTEw7Cj4gICAg ICAgICAgICB1aWRfbWFwID0gTlVMTDsKPiAgICAgICAgICAgIG1hcF96ZXJvID0gMDsKPiAgICAg ICAgICAgIHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICIraW1ucHVVTTpHOnp2Iikp ICE9IC0xKSB7Cj4gICAgICAgICAgICAgICAgc3dpdGNoIChvcHQpIHsKPiAgICAgICAgICAgICAg ICBjYXNlICdpJzogZmxhZ3MgfD0gQ0xPTkVfTkVXSVBDOyAgICAgICAgYnJlYWs7Cj4gICAgICAg ICAgICAgICAgY2FzZSAnbSc6IGZsYWdzIHw9IENMT05FX05FV05TOyAgICAgICAgIGJyZWFrOwo+ ICAgICAgICAgICAgICAgIGNhc2UgJ24nOiBmbGFncyB8PSBDTE9ORV9ORVdORVQ7ICAgICAgICBi cmVhazsKPiAgICAgICAgICAgICAgICBjYXNlICdwJzogZmxhZ3MgfD0gQ0xPTkVfTkVXUElEOyAg ICAgICAgYnJlYWs7Cj4gICAgICAgICAgICAgICAgY2FzZSAndSc6IGZsYWdzIHw9IENMT05FX05F V1VUUzsgICAgICAgIGJyZWFrOwo+ICAgICAgICAgICAgICAgIGNhc2UgJ3YnOiB2ZXJib3NlID0g MTsgICAgICAgICAgICAgICAgICBicmVhazsKPiAgICAgICAgICAgICAgICBjYXNlICd6JzogbWFw X3plcm8gPSAxOyAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gICAgICAgICAgICAgICAgY2FzZSAn TSc6IHVpZF9tYXAgPSBvcHRhcmc7ICAgICAgICAgICAgIGJyZWFrOwo+ICAgICAgICAgICAgICAg IGNhc2UgJ0cnOiBnaWRfbWFwID0gb3B0YXJnOyAgICAgICAgICAgICBicmVhazsKPiAgICAgICAg ICAgICAgICBjYXNlICdVJzogZmxhZ3MgfD0gQ0xPTkVfTkVXVVNFUjsgICAgICAgYnJlYWs7Cj4g ICAgICAgICAgICAgICAgZGVmYXVsdDogIHVzYWdlKGFyZ3ZbMF0pOwo+ICAgICAgICAgICAgICAg IH0KPiAgICAgICAgICAgIH0KPgo+ICAgICAgICAgICAgLyogLU0gb3IgLUcgd2l0aG91dCAtVSBp cyBub25zZW5zaWNhbCAqLwo+Cj4gICAgICAgICAgICBpZiAoKCh1aWRfbWFwICE9IE5VTEwgfHwg Z2lkX21hcCAhPSBOVUxMIHx8IG1hcF96ZXJvKSAmJgo+ICAgICAgICAgICAgICAgICAgICAgICAg IShmbGFncyAmIENMT05FX05FV1VTRVIpKSB8fAo+ICAgICAgICAgICAgICAgICAgICAobWFwX3pl cm8gJiYgKHVpZF9tYXAgIT0gTlVMTCB8fCBnaWRfbWFwICE9IE5VTEwpKSkKPiAgICAgICAgICAg ICAgICB1c2FnZShhcmd2WzBdKTsKPgo+ICAgICAgICAgICAgYXJncy5hcmd2ID0gJmFyZ3Zbb3B0 aW5kXTsKPgo+ICAgICAgICAgICAgLyogV2UgdXNlIGEgcGlwZSB0byBzeW5jaHJvbml6ZSB0aGUg cGFyZW50IGFuZCBjaGlsZCwgaW4gb3JkZXIgdG8KPiAgICAgICAgICAgICAgIGVuc3VyZSB0aGF0 IHRoZSBwYXJlbnQgc2V0cyB0aGUgVUlEIGFuZCBHSUQgbWFwcyBiZWZvcmUgdGhlIGNoaWxkCj4g ICAgICAgICAgICAgICBjYWxscyBleGVjdmUoKS4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGNoaWxk IG1haW50YWlucyBpdHMKPiAgICAgICAgICAgICAgIGNhcGFiaWxpdGllcyBkdXJpbmcgdGhlIGV4 ZWN2ZSgpIGluIHRoZSBjb21tb24gY2FzZSB3aGVyZSB3ZQo+ICAgICAgICAgICAgICAgd2FudCB0 byBtYXAgdGhlIGNoaWxkJ3MgZWZmZWN0aXZlIHVzZXIgSUQgdG8gMCBpbiB0aGUgbmV3IHVzZXIK PiAgICAgICAgICAgICAgIG5hbWVzcGFjZS4gV2l0aG91dCB0aGlzIHN5bmNocm9uaXphdGlvbiwg dGhlIGNoaWxkIHdvdWxkIGxvc2UKPiAgICAgICAgICAgICAgIGl0cyBjYXBhYmlsaXRpZXMgaWYg aXQgcGVyZm9ybWVkIGFuIGV4ZWN2ZSgpIHdpdGggbm9uemVybwo+ICAgICAgICAgICAgICAgdXNl ciBJRHMgKHNlZSB0aGUgY2FwYWJpbGl0aWVzKDcpIG1hbiBwYWdlIGZvciBkZXRhaWxzIG9mIHRo ZQo+ICAgICAgICAgICAgICAgdHJhbnNmb3JtYXRpb24gb2YgYSBwcm9jZXNzJ3MgY2FwYWJpbGl0 aWVzIGR1cmluZyBleGVjdmUoKSkuICovCj4KPiAgICAgICAgICAgIGlmIChwaXBlKGFyZ3MucGlw ZV9mZCkgPT0gLTEpCj4gICAgICAgICAgICAgICAgZXJyRXhpdCgicGlwZSIpOwo+Cj4gICAgICAg ICAgICAvKiBDcmVhdGUgdGhlIGNoaWxkIGluIG5ldyBuYW1lc3BhY2UocykgKi8KPgo+ICAgICAg ICAgICAgY2hpbGRfcGlkID0gY2xvbmUoY2hpbGRGdW5jLCBjaGlsZF9zdGFjayArIFNUQUNLX1NJ WkUsCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyB8IFNJR0NITEQsICZhcmdz KTsKPiAgICAgICAgICAgIGlmIChjaGlsZF9waWQgPT0gLTEpCj4gICAgICAgICAgICAgICAgZXJy RXhpdCgiY2xvbmUiKTsKPgo+ICAgICAgICAgICAgLyogUGFyZW50IGZhbGxzIHRocm91Z2ggdG8g aGVyZSAqLwo+Cj4gICAgICAgICAgICBpZiAodmVyYm9zZSkKPiAgICAgICAgICAgICAgICBwcmlu dGYoIiVzOiBQSUQgb2YgY2hpbGQgY3JlYXRlZCBieSBjbG9uZSgpIGlzICVsZFxuIiwKPiAgICAg ICAgICAgICAgICAgICAgICAgIGFyZ3ZbMF0sIChsb25nKSBjaGlsZF9waWQpOwo+Cj4gICAgICAg ICAgICAvKiBVcGRhdGUgdGhlIFVJRCBhbmQgR0lEIG1hcHMgaW4gdGhlIGNoaWxkICovCj4KPiAg ICAgICAgICAgIGlmICh1aWRfbWFwICE9IE5VTEwgfHwgbWFwX3plcm8pIHsKPiAgICAgICAgICAg ICAgICBzbnByaW50ZihtYXBfcGF0aCwgUEFUSF9NQVgsICIvcHJvYy8lbGQvdWlkX21hcCIsCj4g ICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgY2hpbGRfcGlkKTsKPiAgICAgICAgICAgICAg ICBpZiAobWFwX3plcm8pIHsKPiAgICAgICAgICAgICAgICAgICAgc25wcmludGYobWFwX2J1Ziwg TUFQX0JVRl9TSVpFLCAiMCAlbGQgMSIsIChsb25nKSBnZXR1aWQoKSk7Cj4gICAgICAgICAgICAg ICAgICAgIHVpZF9tYXAgPSBtYXBfYnVmOwo+ICAgICAgICAgICAgICAgIH0KPiAgICAgICAgICAg ICAgICB1cGRhdGVfbWFwKHVpZF9tYXAsIG1hcF9wYXRoKTsKPiAgICAgICAgICAgIH0KPiAgICAg ICAgICAgIGlmIChnaWRfbWFwICE9IE5VTEwgfHwgbWFwX3plcm8pIHsKPiAgICAgICAgICAgICAg ICBzbnByaW50ZihtYXBfcGF0aCwgUEFUSF9NQVgsICIvcHJvYy8lbGQvZ2lkX21hcCIsCj4gICAg ICAgICAgICAgICAgICAgICAgICAobG9uZykgY2hpbGRfcGlkKTsKPiAgICAgICAgICAgICAgICBp ZiAobWFwX3plcm8pIHsKPiAgICAgICAgICAgICAgICAgICAgc25wcmludGYobWFwX2J1ZiwgTUFQ X0JVRl9TSVpFLCAiMCAlbGQgMSIsIChsb25nKSBnZXRnaWQoKSk7Cj4gICAgICAgICAgICAgICAg ICAgIGdpZF9tYXAgPSBtYXBfYnVmOwo+ICAgICAgICAgICAgICAgIH0KPiAgICAgICAgICAgICAg ICB1cGRhdGVfbWFwKGdpZF9tYXAsIG1hcF9wYXRoKTsKPiAgICAgICAgICAgIH0KPgo+ICAgICAg ICAgICAgLyogQ2xvc2UgdGhlIHdyaXRlIGVuZCBvZiB0aGUgcGlwZSwgdG8gc2lnbmFsIHRvIHRo ZSBjaGlsZCB0aGF0IHdlCj4gICAgICAgICAgICAgICBoYXZlIHVwZGF0ZWQgdGhlIFVJRCBhbmQg R0lEIG1hcHMgKi8KPgo+ICAgICAgICAgICAgY2xvc2UoYXJncy5waXBlX2ZkWzFdKTsKPgo+ICAg ICAgICAgICAgaWYgKHdhaXRwaWQoY2hpbGRfcGlkLCBOVUxMLCAwKSA9PSAtMSkgICAgICAvKiBX YWl0IGZvciBjaGlsZCAqLwo+ICAgICAgICAgICAgICAgIGVyckV4aXQoIndhaXRwaWQiKTsKPgo+ ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCj4gICAgICAgICAgICAgICAgcHJpbnRmKCIlczogdGVy bWluYXRpbmdcbiIsIGFyZ3ZbMF0pOwo+Cj4gICAgICAgICAgICBleGl0KEVYSVRfU1VDQ0VTUyk7 Cj4gICAgICAgIH0KPgo+IFNFRSBBTFNPCj4gICAgICAgIG5ld2dpZG1hcCgxKSwgICBuZXd1aWRt YXAoMSksICAgY2xvbmUoMiksICBzZXRucygyKSwgIHVuc2hhcmUoMiksCj4gICAgICAgIHByb2Mo NSksIHN1YmdpZCg1KSwgc3VidWlkKDUpLCAgY3JlZGVudGlhbHMoNyksICBjYXBhYmlsaXRpZXMo NyksCj4gICAgICAgIG5hbWVzcGFjZXMoNyksIHBpZF9uYW1lc3BhY2VzKDcpCj4KPiAgICAgICAg VGhlICBrZXJuZWwgIHNvdXJjZSAgZmlsZSAgRG9jdW1lbnRhdGlvbi9uYW1lc3BhY2VzL3Jlc291 cmNlLWNvbuKAkAo+ICAgICAgICB0cm9sLnR4dC4KCgpFcmljCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCkNvbnRhaW5lcnMgbWFpbGluZyBsaXN0CkNvbnRh aW5lcnNAbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eGZvdW5k YXRpb24ub3JnL21haWxtYW4vbGlzdGluZm8vY29udGFpbmVycw==