From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Jackson Subject: [PATCH v6] scripts/add_maintainers.pl: New script Date: Tue, 15 May 2018 18:23:28 +0100 Message-ID: <1526405008-9236-1-git-send-email-ian.jackson@eu.citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1fIdfr-0004CE-MO for xen-devel@lists.xenproject.org; Tue, 15 May 2018 17:23:43 +0000 List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Juergen Gross , Lars Kurth , Stefano Stabellini , Wei Liu , George Dunlap , Andrew Cooper , Ian Jackson , Tim Deegan , Julien Grall , Jan Beulich List-Id: xen-devel@lists.xenproject.org RnJvbTogTGFycyBLdXJ0aCA8bGFycy5rdXJ0aEBjaXRyaXguY29tPgoKVGhpcyBwcm92aWRlcyBh IG11Y2ggYmV0dGVyIHdvcmtmbG93IHdoZW4gdXNpbmcgZ2l0IGZvcm1hdC1wYXRjaCBhbmQKZ2l0 IHNlbmQtZW1haWwsIHdpdGggZ2V0X21haW50YWluZXIucGwuCgpUaGUgdG9vbCBjb3ZlcnMgc3Rl cCAyIG9mIHRoZSBmb2xsb3dpbmcgd29ya2Zsb3cKCiAgU3RlcCAxOiBnaXQgZm9ybWF0LXBhdGNo IC4uLiAtbyA8cGF0Y2hkaXI+IC4uLgogIFN0ZXAgMjogLi9zY3JpcHRzL2FkZF9tYWludGFpbmVy cy5wbCAtZCA8cGF0Y2hkaXI+CiAgICAgICAgICBUaGlzIG92ZXJ3cml0ZXMgICoucGF0Y2ggZmls ZXMgaW4gPHBhdGNoZGlyPgogIFN0ZXAgMzogZ2l0IHNlbmQtZW1haWwgLXRvIHhlbi1kZXZlbEBs aXN0cy54ZW5wcm9qZWN0Lm9yZyA8cGF0Y2hkaXI+LyoucGF0Y2h4bQoKSSBtYW51YWxseSB0ZXN0 ZWQgYWxsIG9wdGlvbnMgYW5kIHRoZSBtb3N0IGNvbW1vbiBjb21iaW5hdGlvbnMKb24gTWFjLgoK Q2hhbmdlcyBzaW5jZSB2MToKLSBBZGRlZCBSQUIgKGluZGljYXRlZCBieSBKdWVyZ2VuIG9uIElS QyB0aGF0IHRoaXMgaXMgT0spCi0gUmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2VzCi0gUmVuYW1l ZCAtLXByZWZpeCB0byAtLXJlcm9sbC1jb3VudAotIENsZWFuZWQgdXAgc2hvcnQgb3B0aW9ucyAt diwgLi4uIHRvIGJlIGluIGxpbmUgd2l0aCBnaXQKLSBBZGRlZCAtLXRhZ3N8LXQgb3B0aW9uIHRv IGFkZCBBQiwgUkFCIGFuZCBSQiBlbWFpbHMgdG8gQ0MgbGlzdAotIEFkZGVkIC0taW5zZXJ0fC1p IG1vZGUgdG8gYWxsb3cgZm9yIHBlb3BsZSBhZGRpbmcgQ0NzIHRvIGNvbW1pdCBtZXNzYWdlCiAg aW5zdGVhZCBvZiB0aGUgZS1tYWlsIGhlYWRlciAodGhlIGhlYWRlciBpcyB0aGUgZGVmYXVsdCkK LSBNb3ZlZCBjb21tb24gY29kZSBpbnRvIGZ1bmN0aW9ucwotIEFkZGVkIGxvZ2ljLCBzdWNoIHRo YXQgdGhlIHRvb2wgb25seSBpbnNlcnQncyBUbzogYW5kIENjOiBzdGF0ZW1lbnRzCiAgd2hpY2gg d2VyZSBub3QgdGhlcmUgYmVmb3JlLCBhbGxvd2luZyBmb3IgcnVubmluZyB0aGUgdG9vbCBtdWx0 aXBsZSB0aW1lcwogIG9uIHRoZSBzYW1lIDxwYXRjaGRpcj4KCkNoYW5nZXMgc2luY2UgdjI6Ci0g RGVsZXRlZCAtLXZlcnNpb24gYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSBBZGRlZCBzdWJy b3V0aW5lIHByb3RvdHlwZXMKLSBSZW1vdmVkIEFUIGFuZCBAbGlzdHMgZGVjbGFyYXRpb24gYW5k IHVzZWQgXEAgaW4gbGl0ZXJhbHMKLSBDaGFuZ2VkIHVzYWdlIG1lc3NhZ2UgYW5kIG9wdGlvbnMg YmFzZWQgb24gZmVlZGJhY2sKLSBJbXByb3ZlZCBlcnJvciBoYW5kbGluZwotIFJlbW92ZWQgb2Nj dXJhbmNlcyBvZiBpbmRleCgpIGFuZCByZXBsYWNlZCB3aXRoIHJlZ2V4Ci0gUmVtb3ZlZCBub24t cGVybCBpZGlvbXMKLSBNb3ZlZCB1bmlxIHN0YXRlbWVudHMgdG8gbm9ybWFsaXplIGFuZCBhZGRl ZCBpbmZvIG9uIHdoYXQgbm9ybWFsaXplIGRvZXMKLSBSZWFkIEw6IHRhZ3MgZnJvbSBNQUlOVEFJ TkVSUyBmaWxlIGluc3RlYWQgb2YgdXNpbmcgaGV1cmlzdGljCi0gRml4ZWQgaXNzdWVzIHJlbGF0 ZWQgdG8gbWV0YWNoYXJhY3RlcnMgaW4gZ2V0bWFpbnRhaW5lcnMoKQotIEFsbG93IG11bHRpcGxl IC1hIHwgLS1hcmcgdmFsdWVzIChiZWNhdXNlIG9mIHRoaXMgcmVuYW1lZCAtLWFyZ3MpCi0gSWRl bnRpZnkgdGFncyB2aWEgcmVnZXgKLSBDQydzIGZyb20gdGFncyBhcmUgb25seSBpbnNlcnRlZCBp biB0aGUgbWFpbCBoZWFkZXIsIG5ldmVyIHRoZSBib2R5Ci0gVGhhdCBpcyB1bmxlc3MgdGhlIG5l dyBvcHRpb24gLS10YWdzY2MgaXMgdXNlZAotIEFkZGVkIHBvbGljeSBwcm9jZXNzaW5nIHdoaWNo IGluY2x1ZGVzIHJld29ya2luZyBpbnNlcnQoKQotIFJlcGxhY2VkIC1pfC0taW5zZXJ0IHdpdGgg LXB8LS1pbnNwYXRjaCBhbmQgLWN8LS1pbnNjb3ZlciBub3cgdXNpbmcgcG9saWNpZXMKLSBBZGRl ZCBuZXcgcG9saWNpZXMgdG8gY292ZXIgZm9yIGFsbCB1c2VyIHJlcXVlc3RzCi0gUmV3cm90ZSBo ZWxwIG1lc3NhZ2UgdG8gY2VudGVyIGFyb3VuZCB1c2FnZSBvZiBwb2xpY2llcwotIFJlb3JkZXJl ZCBzb21lIGNvZGUgKGUuZy4gaGVscCBzdHJpbmcgZmlyc3QgdG8gbWFrZSBjb2RlIG1vcmUgZWFz aWx5IHJlYWRhYmxlKQoKQ2hhbmdlcyBzaW5jZSB2MzoKLSBNYWRlIGhlbHAgbWVzc2FnZSBjbGVh cmVyCi0gUmVwbGFjZWQgUFJPQ0VTU0lORyBQT0xJQ1kgd2l0aCBMT0NBVElPTgotIFJlbmFtZWQg LS1pbnNwYXRjaCAodG9wfGNjYm9keXxjYy0tLXxub25lKSB8IC1wICh0b3B8Y2Nib2R5fGNjLS0t fG5vbmUpCiAgdG8gLS1wYXRjaGNjIChoZWFkZXJ8Y29tbWl0fGNvbW1lbnR8bm9uZSkgfCAtcCAo aGVhZGVyfGNvbW1pdHxjb21tZW50fG5vbmUpCi0gUmVuYW1lZCAtLWluc2NvdmVyICh0b3B8Y2Nl bmR8bm9uZSkgfCAtYyAodG9wfGNjZW5kfG5vbmUpCiAgdG8gLS1jb3ZlcmNjIChoZWFkZXJ8ZW5k fG5vbmUpIHwgLWMgKGhlYWRlcnxlbmR8bm9uZSkKLSBSZW5hbWVkIHZhcmlhYmxlcyBhbmQgZnVu Y3Rpb25zIGluIHRoZSBjb2RlIHRvIG1hdGNoIHRoZSBvcHRpb25zCi0gQ2hhbmdlZCAkcGF0Y2hf cHJlZml4IHByb2Nlc3NpbmcKLSBDaGFuZ2VkIHNlYXJjaCBleHByZXNzaW9uIGZvciBpZGVudGlm eWluZyBjb3ZlciBsZXR0ZXJzCi0gUmVuYW1lZCAkcmVhZG1haWxpbmdsaXN0cyB0byAkZ2V0bWFp bGluZ2xpc3RzX2RvbmUKLSBVc2UgYXJyYXkgZm9ybSBvZiBvcGVuCi0gTW9yZSBmaWxlIGVycm9y IGhhbmRsaW5nICh1c2luZyBJTzo6SGFuZGxlKQotIEZpeGVkIGJ1Z2d5IEFORCBpbiBpZiBzdGF0 ZW1lbnQKLSBSZW1vdmVkIGNoZWNrIHdoZXRoZXIgZ2V0bWFpbnRhaW5lcnMgZXhpc3RzIGZvciBm dXR1cmUgcHJvb2ZpbmcKLSBBZGQgbG9naWMgdG8gd29yayBvdXQgLS1yZXJvbGwtY291bnQKCkNo YW5nZXMgc2luY2UgdjQ6Ci0gU3RyaXAgc29tZSB0cmFpbGluZyB3aGl0ZXNwYWNlIGZyb20gdGhl IGNvZGUKLSB3cml0ZWZpbGUoKSBub3cgdXNlcyB0aGUgLnRtcC1hbmQtcmVuYW1lIHBhdHRlcm4g dG8gYXZvaWQgZGF0YSBsb3NzCi0gUHJvdmlkZSAtLWdldC1tYWludGFpbmVycz0gb3B0aW9uIHRv IHNwZWNpZnkgcmVwbGFjZW1lbnQgZm9yCiAgZ2V0X21haW50YWluZXJzLnBsLiAgVGhpcyBpcyB1 c2VmdWwgZm9yIElhbidzIHVzZWNhc2UsIHNpbmNlIGl0CiAgYWxsb3dzIC0tZ2V0LW1haW50YWlu ZXJzPXRydWUsIHRvIGF2b2lkIGFkZGluZyBhbnkgTUFJTlRBSU5FUlMtYmFzZWQKICBpbmZvIGFu eXdoZXJlIHdoaWxlIHN0aWxsIGFkZGluZyBvdGhlciBDQ3MgKGVnIGZyb20gLXQpIGV2ZXJ5d2hl cmUuCi0gUmVmYWN0b3Igbm9ybWFsaXplKCkgc29tZXdoYXQgc28gdGhhdCBpdCB1c2VzIG9ubHkg JXNlZW4sIGFuZAogIGRvZXMgbm90IGFueSBsb25nZXIgbW9kaWZ5IGl0cyBhcmd1bWVudCBhcnJh eXMuCi0gRGUtZHVwZSBjYXNlLWluc2Vuc2l0aXZlbHkgKGJ5IG1ha2luZyBub3JtYWxpemUgdXNl IGxjKS4KCkNoYW5nZXMgc2luY2UgdjU6Ci0gQWRkIG1lbnRpb24gb2YgLS1nZXQtbWFpbnRhaW5l cnMsIGFuZCBpdHMgYmVzdCB1c2UgY2FzZSwgdG8gLS1oZWxwCiAgb3V0cHV0LiAgKE1vdmUgJGdl dF9tYWludGFpbmVyIHVwIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgaGVyZS4pCgpDYzogQW5kcmV3 IENvb3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbT4KQ2M6IEdlb3JnZSBEdW5sYXAgPEdl b3JnZS5EdW5sYXBAZXUuY2l0cml4LmNvbT4KQ2M6IElhbiBKYWNrc29uIDxpYW4uamFja3NvbkBl dS5jaXRyaXguY29tPgpDYzogSmFuIEJldWxpY2ggPGpiZXVsaWNoQHN1c2UuY29tPgpDYzogSnVs aWVuIEdyYWxsIDxqdWxpZW4uZ3JhbGxAYXJtLmNvbT4KQ2M6IEtvbnJhZCBSemVzenV0ZWsgV2ls ayA8a29ucmFkLndpbGtAb3JhY2xlLmNvbT4KQ2M6IFN0ZWZhbm8gU3RhYmVsbGluaSA8c3N0YWJl bGxpbmlAa2VybmVsLm9yZz4KQ2M6IFRpbSBEZWVnYW4gPHRpbUB4ZW4ub3JnPgpDYzogV2VpIExp dSA8d2VpLmxpdTJAY2l0cml4LmNvbT4KU2lnbmVkLW9mZi1ieTogTGFycyBLdXJ0aCA8bGFycy5r dXJ0aEBjaXRyaXguY29tPgpSZWxlYXNlLWFja2VkLWJ5OiBKdWVyZ2VuIEdyb3NzIDxqZ3Jvc3NA c3VzZS5jb20+ClNpZ25lZC1vZmYtYnk6IElhbiBKYWNrc29uIDxJYW4uSmFja3NvbkBldS5jaXRy aXguY29tPgpBY2tlZC1ieTogTGFycyBLdXJ0aCA8bGFycy5rdXJ0aEBjaXRyaXguY29tPgotLS0K IHNjcmlwdHMvYWRkX21haW50YWluZXJzLnBsIHwgNTU1ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDU1NSBpbnNlcnRpb25zKCsp CiBjcmVhdGUgbW9kZSAxMDA3NTUgc2NyaXB0cy9hZGRfbWFpbnRhaW5lcnMucGwKCmRpZmYgLS1n aXQgYS9zY3JpcHRzL2FkZF9tYWludGFpbmVycy5wbCBiL3NjcmlwdHMvYWRkX21haW50YWluZXJz LnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk5ZTQ3MjQKLS0tIC9kZXYv bnVsbAorKysgYi9zY3JpcHRzL2FkZF9tYWludGFpbmVycy5wbApAQCAtMCwwICsxLDU1NSBAQAor IyEvdXNyL2Jpbi9wZXJsIC13CisjIChjKSAyMDE4LCBMYXJzIEt1cnRoIDxsYXJzLmt1cnRoQGNp dHJpeC5jb20+CisjCisjIEFkZCBtYWludGFpbmVycyB0byBwYXRjaGVzIGdlbmVyYXRlZCB3aXRo IGdpdCBmb3JtYXQtcGF0Y2gKKyMKKyMgVXNhZ2U6IHBlcmwgc2NyaXB0cy9hZGRfbWFpbnRhaW5l cnMucGwgW09QVElPTlNdIC1wYXRjaGRpciA8cGF0Y2hkaXI+CisjCisjIFByZXJlcXVpc2l0ZXM6 IEV4ZWN1dGUKKyMgICAgICAgICAgICAgICAgZ2l0IGZvcm1hdC1wYXRjaCAuLi4gLW8gPHBhdGNo ZGlyPiAuLi4KKyMKKyMgICAgICAgICAgICAgICAgLi9zY3JpcHRzL2dldF9tYWludGFpbmVyLnBs IGlzIHByZXNlbnQgaW4gdGhlIHRyZWUKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyCisKK3VzZSBzdHJpY3Q7CisKK3VzZSBHZXRv cHQ6OkxvbmcgcXcoOmNvbmZpZyBub19hdXRvX2FiYnJldik7Cit1c2UgRmlsZTo6QmFzZW5hbWU7 Cit1c2UgTGlzdDo6TW9yZVV0aWxzIHF3KHVuaXEpOwordXNlIElPOjpIYW5kbGU7CisKK3N1YiBn ZXRtYWludGFpbmVycyAoJCQkKTsKK3N1YiBnZXR0YWdzZnJvbXBhdGNoICgkJCQ7JCk7CitzdWIg bm9ybWFsaXplICgkJCk7CitzdWIgaW5zZXJ0ICgkJCQkKTsKK3N1YiBoYXN0YWcgKCQkKTsKKwor IyBUb29sIFZhcmlhYmxlcworbXkgJGdldF9tYWludGFpbmVyICAgICAgPSAiLi9zY3JpcHRzL2dl dF9tYWludGFpbmVyLnBsIjsKKworbXkgJHRvb2wgPSAkMDsKK215ICR1c2FnZSA9IDw8RU9UOwor T1BUSU9OUzoKKy0tLS0tLS0tCitVU0FHRTogJHRvb2wgW29wdGlvbnNdICgtLXBhdGNoZGlyIHwg LWQpIDxwYXRjaGRpcj4KKworICAtLXJlcm9sbC1jb3VudCA8bj4gfCAtdiA8bj4KKyAgICBDaG9v c2UgcGF0Y2ggZmlsZXMgZm9yIHNwZWNpZmljIHZlcnNpb24uIFRoaXMgcmVzdWx0cyBpbnRvIHRo ZQorICAgIGZvbGxvd2luZyBmaWx0ZXJzIG9uIDxwYXRjaGRpcj4KKyAgICAwOiBkZWZhdWx0IC0g Ki5wYXRjaAorICAgID4xOiB2PG4+Ki5wYXRjaAorCisgIC0tcGF0Y2hjYyAoaGVhZGVyfGNvbW1p dHxjb21tZW50fG5vbmUpIHwgLXAgKGhlYWRlcnxjb21taXR8Y29tbWVudHxub25lKQorCisgICAg SW5zZXJ0IENDIGxpbmVzIGludG8gKi5wYXRjaCBmaWxlcyBpbiB0aGUgc3BlY2lmaWVkIGxvY2F0 aW9uLgorICAgIFdoZW4gYG5vbmVgIGlzIHNwZWNpZmllZCwgdGhlICoucGF0Y2ggZmlsZXMgYXJl IG5vdCBjaGFuZ2VkLgorICAgIFNlZSBMT0NBVElPTlMgZm9yIGEgZGVmaW5pdGlvbiBvZiB0aGUg dmFyaW91cyBsb2NhdGlvbnMuCisKKyAgICBUaGUgZGVmYXVsdCBpcyBgaGVhZGVyYC4KKworICAt LWNvdmVyY2MgKGhlYWRlcnxlbmR8bm9uZSkgfCAtYyAoaGVhZGVyfGVuZHxub25lKQorCisgICAg SW5zZXJ0IENDIGxpbmVzIGludG8gY292ZXIgbGV0dGVyIGluIHRoZSBzcGVjaWZpZWQgbG9jYXRp b24uIFNlZQorICAgIFdoZW4gYG5vbmVgIGlzIHNwZWNpZmllZCwgdGhlIGNvdmVyIGxldHRlciBp cyBub3QgY2hhbmdlZC4KKyAgICBMT0NBVElPTlMgZm9yIGEgZGVmaW5pdGlvbiBvZiB0aGUgdmFy aW91cyBsb2NhdGlvbnMuCisKKyAgICBUaGUgZGVmYXVsdCBpcyBgaGVhZGVyYC4KKworICAtLXRh Z3NjYworCisgICAgSW4gYWRkaXRpb24gdG8gdGhlIG91dHB1dCBvZiBnZXRfbWFpbnRhaW5lci5w bCwgaW5jbHVkZSBlbWFpbAorICAgIGFkZHJlc3NlcyBmcm9tIGNvbW1pdCB0YWdzIChlLmcuLCBS ZXZpZXdlZC1ieSwgVGVzdGVkLWJ5LCAuLi4pIGluCisgICAgdGhlIGxpc3Qgb2YgQ0MgbGluZXMg dG8gaW5zZXJ0LgorCisgICAgVGhlc2UgZXh0cmEgbGluZXMgd2lsbCBiZSBpbnNlcnRlZCBhcyBz cGVjaWZpZWQgYnkgdGhlIC0tcGF0Y2hjYworICAgIGFuZCAtLWNvdmVyY2Mgb3B0aW9ucy4gV2hl biB1c2VkIHdpdGggYC0tcGF0Y2hjYyBjb21taXRgLAorICAgIHRoaXMgd2lsbCBkdXBsaWNhdGUg ZS1tYWlsIGFkZHJlc3NlcyBpbiB0aGUgY29tbWl0IG1lc3NhZ2UuCisKKyAgLS10YWdzIHwgLXQK KworICAgIEFzIGFib3ZlLCBidXQgdGhlIGluc2VydCBsb2NhdGlvbiBpcyBzcGVjaWFsLWNhc2Vk OiBlLW1haWwgYWRkcmVzc2VzCisgICAgd2lsbCBhbHdheXMgYmUgaW5zZXJ0ZWQgaW50byB0aGUg YGhlYWRlcmAgb2YgcGF0Y2hlcyBhbmQgdGhlIGNvdmVyIGxldHRlci4KKworICAtLWdldC1tYWlu dGFpbmVycz08cHJvZ3JhbT4KKworICAgIFJ1biA8cHJvZ3JhbT4gaW5zdGVhZCBvZiAkZ2V0X21h aW50YWluZXIuCisgICAgKFBhc3NpbmcgYHRydWVgIGZvciA8cHJvZ3JhbT4gc3VwcHJlc3NlcyB0 aGUgdXN1YWwgY29tcHV0YXRpb24KKyAgICBvZiBDQ3MsIGZyb20gZmlsZXMgdG91Y2hlZCBieSBw YXRjaGVzIGFuZCBNQUlOVEFJTkVSUy4pCisKKyAgLS1hcmcgPGFyZ3VtZW50PiB8IC1hIDxhcmd1 bWVudD4gLi4uCisgICAgQXJndW1lbnRzIHBhc3NlZCBvbiB0byBnZXRfbWFpbnRhaW5lci5wbAor ICAgIFRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzLCBlLmcuIC1hIDxhMT4g LWEgPGEyPiAuLi4KKworICAtLXZlcmJvc2UKKyAgICBTaG93IG1vcmUgb3V0cHV0CisKKyAgLS1o ZWxwIHwgLWgKKyAgICBTaG93IHRoaXMgaGVscCBpbmZvcm1hdGlvbgorCitMT0NBVElPTlM6Cist LS0tLS0tLS0tCisKKyAgKi5wYXRjaCBhbmQgY292ZXIgbGV0dGVycyBmaWxlcyBjb25zaXN0IG9m IHNldmVyYWwgc2VjdGlvbnMgcmVsZXZhbnQKKyAgIHRvIHByb2Nlc3Npbmc6CisKKyAgPGhlYWRl cj46ICBUaGlzIGlzIHRoZSBlbWFpbCBoZWFkZXIgY29udGFpbmluZyBlbWFpbCByZWxhdGVkIGlu Zm9ybWF0aW9uCisgICAgICAgICAgICAgSXQgZW5kcyB3aXRoIHRoZSBTdWJqZWN0OiBsaW5lCisK KyAgPGNvbW1pdD46IFRoaXMgaXMgdGhlIGVtYWlsIGJvZHkgdGhhdCBlbmRzIHVwIGluIHRoZSBj b21taXQgbWVzc2FnZS4KKyAgICAgICAgICAgICBJdCBlbmRzIHdpdGggLS0tLiAgQ0MgbGluZXMg YWRkZWQgaGVyZSB3aWxsIGJlIGNoZWNrZWQKKyAgICAgICAgICAgICBpbnRvIHRoZSBnaXQgdHJl ZSBvbiBjb21taXQuICBPbmx5IGFwcGxpY2FibGUgdG8gbm9ybWFsCisgICAgICAgICAgICAgcGF0 Y2ggZmlsZXMuCisKKyAgPGNvbW1lbnQ+OiBUaGlzIGlzIHRoZSAnY29tbWVudCBmb3IgcmV2aWV3 ZXJzJyBzZWN0aW9uLCBhZnRlciB0aGUKKyAgICAgICAgICAgICAtLS0gYnV0IGJlZm9yZSB0aGUg ZGlmZiBhY3R1YWxseSBzdGFydHMuIENDcyBhZGRlZCBoZXJlCisgICAgICAgICAgICAgYXJlIHBy b2Nlc3NlZCBieSBnaXQgc2VuZC1lbWFpbCwgYnV0IGFyZSBub3QgY2hlY2tlZCBpbnRvCisgICAg ICAgICAgICAgdGhlIGdpdCB0cmVlIG9uIGNvbW1pdC4gIE9ubHkgYXBwbGljYWJsZSB0byBub3Jt YWwgcGF0Y2gKKyAgICAgICAgICAgICBmaWxlcy4KKworICA8ZW5kPjogICAgIFRoZSBwYXJ0IG9m IGEgY292ZXIgbGV0dGVyIGp1c3QgYmVmb3JlIGAtLSBgICh3aGljaCBub3JtYWxseQorICAgICAg ICAgICAgIGJlZ2lucyBhIGRpZmZzdGF0KS4gIE9ubHkgYXBwbGljYWJsZSB0byBjb3ZlciBsZXR0 ZXJzLgorCisgIERFRkFVTFQgQkVIQVZJT1VSOgorICAtLS0tLS0tLS0tLS0tLS0tLS0KKyAgKiBn ZXRfbWFpbnRhaW5lciBpcyBjYWxsZWQgb24gZWFjaCBwYXRjaCB0byBmaW5kIGVtYWlsIGFkZHJl c3NlcworICAgIG9mIG1haW50YWluZXJzL3Jldmlld2VycyBmb3IgdGhhdCBwYXRjaAorICAqIEFs bCBvZiB0aGUgYWJvdmUgYWRkcmVzc2VzIGFyZSBhZGRlZCB0byB0aGUgQ0MgbWFpbCBoZWFkZXJz CisgICAgb2YgZWFjaCBwYXRjaAorICAqIEFsbCBvZiB0aGUgYWJvdmUgYWRkcmVzc2VzIGFyZSBh ZGRlZCB0byB0aGUgQ0MgbWFpbCBoZWFkZXJzCisgICAgb2YgdGhlIGNvdmVyIGxldHRlcgorCitX T1JLRkxPVzoKKy0tLS0tLS0tLQorICBUaGlzIHNjcmlwdCBpcyBpbnRlbmRlZCB0byBiZSB1c2Vk IGFzIHBhcnQgb2YgdGhlIGZvbGxvd2luZyB3b3JrZmxvdworCisgIFN0ZXAgMTogZ2l0IGZvcm1h dC1wYXRjaCAuLi4gLW8gPHBhdGNoZGlyPiAuLi4KKyAgU3RlcCAyOiAuL3NjcmlwdHMvYWRkX21h aW50YWluZXJzLnBsIC1kIDxwYXRjaGRpcj4KKyAgICAgICAgICBUaGlzIG92ZXJ3cml0ZXMgKi5w YXRjaCBmaWxlcyBpbiA8cGF0Y2hkaXI+IGJ1dCBtYWtlcyBhIGJhY2t1cAorICBTdGVwIDM6IGdp dCBzZW5kLWVtYWlsIC10byB4ZW4tZGV2ZWxcQGxpc3RzLnhlbnByb2plY3Qub3JnIDxwYXRjaGRp cj4vKi5wYXRjaAorRU9UCisKKyMgQ29uc3RhbnRzIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBM T0NBVElPTlMKKworIyBDb25zdGFudHMgZm9yIC1wfC0tcGF0Y2hjYyBhbmQgLWN8LS1jb3ZlcmNj IG9wdGlvbiBwcm9jZXNzaW5nCitteSBAcGxvY2F0aW9ucz0gKCJoZWFkZXIiLCAiY29tbWl0Iiwg ImNvbW1lbnQiLCAibm9uZSIpOworbXkgQGNsb2NhdGlvbnM9ICgiaGVhZGVyIiwgImVuZCIsICJu b25lIik7CisKKyMgSGFzaCBpcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCBtb2RlIHZhbHVlIG1h cHMgb250byB3aGljaCBzZWFyY2ggc3RyaW5nCitteSAlaW5zc2VhcmNoID0gKAorICAgICJoZWFk ZXIiICA9PiAiRGF0ZToiLCAgICAgICAgICAjIEluc2VydCBiZWZvcmUgRGF0ZToKKyAgICAiY29t bWl0IiAgPT4gIlNpZ25lZC1vZmYtYnk6IiwgIyBJbnNlcnQgYmVmb3JlIFNpZ25lZC1vZmYtYnk6 CisgICAgImNvbW1lbnQiID0+ICItLS0iLCAgICAgICAgICAgICMgSW5zZXJ0IGFmdGVyIC0tLQor ICAgICJlbmQiICAgICA9PiAiLS0gIiwgICAgICAgICAgICAjIEluc2VydCBiZWZvcmUgJy0tICcK Kyk7CisKKyMgSGFzaCBpcyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIGZvciBhIGdpdmVuIG1v ZGUgd2UgaW5zZXJ0IENDcyBhZnRlcgorIyB0aGUgc2VhcmNoIHN0cmluZyBvciBiZWZvcmUKK215 ICVpbnNhZnRlciA9ICgKKyAgICAiaGVhZGVyIiAgPT4gMCwKKyAgICAiY29tbWl0IiAgPT4gMCwK KyAgICAiY29tbWVudCIgPT4gMSwKKyAgICAiZW5kIiAgICAgPT4gMCwKKyk7CisKKyMgVGhlIGZv bGxvd2luZyBzdWJyb3V0aW5lcyB0YWtlIGEgYXJlZmVyZW5jZSB0byBhcnJheXMgb2YKKyMgLSBA aGVhZGVyOiBjb250YWlucyBDQ3MgZnJvbSAqLWJ5OiB0YWdzIGFuZCBUT3MgZnJvbSBtYWlsaW5n IGxpc3RzCisjIC0gQGNjOiAgY29udGFpbnMgYWxsIG90aGVyIENDJ3MKKyMgSXQgd2lsbCB0aGVu IGFwcGx5IHRoZSBjb3JlY3QgbG9jYXRpb25zIG9uIHRoZSBpbnB1dCBmaWxlCisKK3N1YiBhcHBs eWxvY2F0aW9uX2hlYWRlciAoJCQkKSB7CisgICAgbXkgKCRmaWxlLCAkcmhlYWRlciwgJHJjYykg PSBAXzsKKyAgICBteSAkaW5zZXJ0ID0gam9pbigiXG4iLCB1bmlxIChAJHJoZWFkZXIsIEAkcmNj KSk7CisgICAgaW5zZXJ0KCRmaWxlICwgJGluc2VydCwgJGluc3NlYXJjaHtoZWFkZXJ9LCAkaW5z YWZ0ZXJ7aGVhZGVyfSk7Cit9CisKK3N1YiBhcHBseW1peGVkbG9jYXRpb24gKCQkJCQpIHsKKyAg ICBteSAoJGZpbGUsICRyaGVhZGVyLCAkcmNjLCAkbW9kZSkgPSBAXzsKKyAgICBteSAkaGVhZGVy ID0gam9pbigiXG4iLCBAJHJoZWFkZXIpOworICAgIG15ICRjYyAgPSBqb2luKCJcbiIsIEAkcmNj KTsKKyAgICAjIEluc2VydCBzbmlwcGV0cyBpbnRvIGZpbGVzCisgICAgaW5zZXJ0KCRmaWxlICwg JGNjLCAkaW5zc2VhcmNoeyRtb2RlfSwgJGluc2FmdGVyeyRtb2RlfSk7CisgICAgIyBUaGUgaGVh ZGVyCisgICAgaW5zZXJ0KCRmaWxlICwgJGhlYWRlciwgJGluc3NlYXJjaHtoZWFkZXJ9LCAkaW5z YWZ0ZXJ7aGVhZGVyfSk7Cit9CisKK3N1YiBhcHBseWxvY2F0aW9uX2NvbW1pdCgkJCQpIHsKKyAg ICBteSAoJGZpbGUsICRyaGVhZGVyLCAkcmNjKSA9IEBfOworICAgIGFwcGx5bWl4ZWRsb2NhdGlv bigkZmlsZSwgJHJoZWFkZXIsICRyY2MsICJjb21taXQiKTsKK30KKworIyBVc2UgYSBkaWZmZXJl bnQgbmFtZSB0byBtYWtlIHN1cmUgcGVybCBkb2Vzbid0IHRocm93IGEgc3ludGF4IGVycm9yCitz dWIgYXBwbHlsb2NhdGlvbl9jb21tZW50ICgkJCQpIHsKKyAgICBteSAoJGZpbGUsICRyaGVhZGVy LCAkcmNjKSA9IEBfOworICAgIGFwcGx5bWl4ZWRsb2NhdGlvbigkZmlsZSwgJHJoZWFkZXIsICRy Y2MsICJjb21tZW50Iik7Cit9CisKK3N1YiBhcHBseWxvY2F0aW9uX2VuZCAoJCQkKSB7CisgICAg bXkgKCRmaWxlLCAkcmhlYWRlciwgJHJjYykgPSBAXzsKKyAgICBhcHBseW1peGVkbG9jYXRpb24o JGZpbGUsICRyaGVhZGVyLCAkcmNjLCAiZW5kIik7Cit9CisKK3N1YiBhcHBseWxvY2F0aW9uX25v bmUgKCQkJCkgeworICAgIHJldHVybjsKK30KKworIyBIYXNoIGZvciBsb2NhdGlvbiBmdW5jdGlv bnMKK215ICVhcHBseWxvY2F0aW9uID0gKAorICAgICJoZWFkZXIiICA9PiBcJmFwcGx5bG9jYXRp b25faGVhZGVyLAorICAgICJjb21taXQiICA9PiBcJmFwcGx5bG9jYXRpb25fY29tbWl0LAorICAg ICJjb21tZW50IiA9PiBcJmFwcGx5bG9jYXRpb25fY29tbWVudCwKKyAgICAiZW5kIiAgICAgPT4g XCZhcHBseWxvY2F0aW9uX2VuZCwKKyAgICAibm9uZSIgICAgPT4gXCZhcHBseWxvY2F0aW9uX25v bmUsCispOworCisjIEFyZ3VtZW50cyAvIE9wdGlvbnMKK215ICRoZWxwID0gMDsKK215ICRwYXRj aF9kaXIgPSAwOworbXkgQGdldF9tYWludGFpbmVyX2FyZ3MgPSAoKTsKK215ICR2ZXJib3NlID0g MDsKK215ICRyZXJvbGxjb3VudCA9IDA7CitteSAkdGFncyA9IDA7CitteSAkdGFnc2NjID0gMDsK K215ICRwbG9jYXRpb24gPSAiaGVhZGVyIjsKK215ICRjbG9jYXRpb24gPSAiaGVhZGVyIjsKKwor IyBDb25zdGFudHMKKyMgS2VlcCB0aGVzZSBhcyBjb25zdGFudHMsIGluIGNhc2Ugd2Ugd2FudCB0 byBtYWtlIHRoZXNlIGNvbmZpZ3VyYWJsZQorIyBpbiBmdXR1cmUKK215ICRDQyAgICAgICAgICAg ICAgICAgID0gIkNjOiI7ICMgTm90ZTogZ2l0LXNlbmQtbWFpbCByZXF1aXJlcyBDYzoKK215ICRU TyAgICAgICAgICAgICAgICAgID0gIlRvOiI7CitteSAkY292ZXJfbGV0dGVyICAgICAgICA9ICIw MDAwLWNvdmVyLWxldHRlci5wYXRjaCI7CitteSAkcGF0Y2hfZXh0ICAgICAgICAgICA9ICIucGF0 Y2giOworbXkgJG1haW50YWluZXJzICAgICAgICAgPSAiTUFJTlRBSU5FUlMiOworCitpZiAoIUdl dE9wdGlvbnMoCisgICAgICAgICAgICAgICAgJ2R8cGF0Y2hkaXI9cycgICAgID0+IFwkcGF0Y2hf ZGlyLAorICAgICAgICAgICAgICAgICd2fHJlcm9sbC1jb3VudD1pJyA9PiBcJHJlcm9sbGNvdW50 LAorICAgICAgICAgICAgICAgICdwfHBhdGNoY2M9cycgICAgICA9PiBcJHBsb2NhdGlvbiwKKyAg ICAgICAgICAgICAgICAnY3xjb3ZlcmNjPXMnICAgICAgPT4gXCRjbG9jYXRpb24sCisgICAgICAg ICAgICAgICAgJ3R8dGFncycgICAgICAgICAgID0+IFwkdGFncywKKyAgICAgICAgICAgICAgICAn dGFnc2NjJyAgICAgICAgICAgPT4gXCR0YWdzY2MsCisgICAgICAgICAgICAgICAgJ2F8YXJnPXMn ICAgICAgICAgID0+IFxAZ2V0X21haW50YWluZXJfYXJncywKKyAgICAgICAgICAgICAgICAnZ2V0 LW1haW50YWluZXJzPXMnID0+IFwkZ2V0X21haW50YWluZXIsCisgICAgICAgICAgICAgICAgJ3Zl cmJvc2UnICAgICAgICAgID0+IFwkdmVyYm9zZSwKKyAgICAgICAgICAgICAgICAnaHxoZWxwJyAg ICAgICAgICAgPT4gXCRoZWxwLAorICAgICAgICAgICAgICAgICkpIHsKKyAgICBkaWUgIiR0b29s OiBpbnZhbGlkIGFyZ3VtZW50IC0gdXNlIC0taGVscCBpZiBuZWNlc3NhcnlcbiI7Cit9CisKK2lm ICgkaGVscCkgeworICAgIHByaW50ICR1c2FnZTsKKyAgICBleGl0IDA7Cit9CisKK2lmICghJHBh dGNoX2RpcikgeworICAgIGRpZSAiJHRvb2w6IERpcmVjdG9yeSAtZHwtLXBhdGNoZGlyIG5vdCBz cGVjaWZpZWRcbiI7Cit9CisKK2lmICghIC1lICRwYXRjaF9kaXIpIHsKKyAgICBkaWUgIiR0b29s OiBEaXJlY3RvcnkgJHBhdGNoX2RpciBkb2VzIG5vdCBleGlzdFxuIjsKK30KKworIyBDYWxjdWxh dGUgdGhlICRwYXRjaF9wcmVmaXgKK215ICRwYXRjaF9wcmVmaXggPSAiIjsKK2lmICgkcmVyb2xs Y291bnQgPT0gMCkgeworICAgICMgSWYgdGhlIHVzZXIgZGlkbid0IHNwZWNpZnkgLXYgYW5kIHdl IGFyZSBoZXJlLCB0aGVuCisgICAgIyAtIGVpdGhlciB0aGUgZGlyZWN0b3J5IGlzIGVtcHR5Cisg ICAgIyAtIG9yIGl0IGNvbnRhaW5zIHNvbWUgdmVyc2lvbiBvZiBhIHBhdGNoCisgICAgIyBJbiB0 aGlzIGNhc2Ugd2Ugc2VhcmNoIGZvciB0aGUgZmlyc3QgcGF0Y2ggYW5kCisgICAgIyB3b3JrIG91 dCB0aGUgdmVyc2lvbgorICAgICQhPTA7CisgICAgbXkgQGNvdmVybGV0dGVycyA9IGdsb2IoJHBh dGNoX2Rpci4nLyonLiRwYXRjaF9leHQpOworICAgIGlmICghJCEgJiYgc2NhbGFyIEBjb3Zlcmxl dHRlcnMpIHsKKyAgICAgICAgaWYgKCRjb3ZlcmxldHRlcnNbMF0gPX4gL1wvdihbMC05XSspLVxR JGNvdmVyX2xldHRlclxFLykgeworICAgICAgICAgICAgJHJlcm9sbGNvdW50ID0gJDE7CisgICAg ICAgIH0KKyAgICB9Cit9CitpZiAoJHJlcm9sbGNvdW50ID4gMCkgeworICAgICRwYXRjaF9wcmVm aXggPSAidiIuJHJlcm9sbGNvdW50LiItIjsKK30KKworaWYgKCAhIGdyZXAgJF8gZXEgJHBsb2Nh dGlvbiwgQHBsb2NhdGlvbnMpIHsKKyAgICBkaWUgIiR0b29sOiBJbnZhbGlkIC1wfC0tcGF0Y2hj YyB2YWx1ZVxuIjsKK30KK2lmICggISBncmVwICRfIGVxICRjbG9jYXRpb24sIEBjbG9jYXRpb25z KSB7CisgICAgZGllICIkdG9vbDogSW52YWxpZCAtY3wtLWNvdmVyY2MgdmFsdWVcbiI7Cit9CisK KyMgR2V0IHRoZSBsaXN0IG9mIHBhdGNoZXMKK215ICRoYXNfY292ZXJfbGV0dGVyID0gMDsKK215 ICRjb3Zlcl9sZXR0ZXJfZmlsZTsKK215ICRwYXR0ZXJuID0gJHBhdGNoX2Rpci4nLycuJHBhdGNo X3ByZWZpeC4nWzAtOV1bMC05XVswLTldWzAtOV0qJy4kcGF0Y2hfZXh0OworCiskIT0wOworbXkg QHBhdGNoZXMgPSBnbG9iKCRwYXR0ZXJuKTsKK2lmICgkISkgeworICAgIGRpZSAiJHRvb2w6IERp cmVjdG9yeSAkcGF0Y2hfZGlyIGNvbnRhaW5zIG5vIHBhdGNoZXNcbiI7Cit9CitpZiAoIXNjYWxh ciBAcGF0Y2hlcykgeworICAgIGRpZSAiJHRvb2w6IERpcmVjdG9yeSAkcGF0Y2hfZGlyIGNvbnRh aW5zIG5vIG1hdGNoaW5nIHBhdGNoZXMuXG4iLgorICAgICAgICAgIlBsZWFzZSB0cnkgLS1yZXJv bGwtY291bnQgPG4+IHwgLXYgPG4+XG4iOworfQorCisjIERvIHRoZSBhY3R1YWwgcHJvY2Vzc2lu ZworbXkgJGZpbGU7CitteSBAY29tYmluZWRfaGVhZGVyOworbXkgQGNvbWJpbmVkX2NjOworCitm b3JlYWNoIG15ICRmaWxlIChAcGF0Y2hlcykgeworICAgIGlmICgkZmlsZSA9fiAvXC9cUSRwYXRj aF9wcmVmaXgkY292ZXJfbGV0dGVyXEUvKSB7CisgICAgICAgICRoYXNfY292ZXJfbGV0dGVyID0g MTsKKyAgICAgICAgJGNvdmVyX2xldHRlcl9maWxlID0gJGZpbGU7CisgICAgfSBlbHNlIHsKKyAg ICAgICAgbXkgQGhlYWRlcjsgICAgICMgVG86IGxpc3RzIHJldHVybmVkIGJ5IGdldF9tYWludGFp bmVycy5wbAorICAgICAgICBteSBAaGVhZGVycGF0Y2g7IyBUbzogZW50cmllcyBpbiAqLnBhdGNo CisgICAgICAgICAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgICAgICAgICAjIEFs c28gaW5jbHVkZXMgQ0MncyBmcm9tIHRhZ3MgYXMgd2UgZG8gbm90IHdhbnQKKyAgICAgICAgICAg ICAgICAgICAgICAgICMgZW50cmllcyBpbiB0aGUgYm9keSBzdWNoIGFzCisgICAgICAgICAgICAg ICAgICAgICAgICAjIENDOiBsYXJzLmt1cnRoQGNpdHJpeC5jb20KKyAgICAgICAgICAgICAgICAg ICAgICAgICMgLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAjIFRlc3RlZC1ieTogbGFycy5r dXJ0aEBjaXRyaXguY29tCisKKyAgICAgICAgbXkgQGNjOyAgICAgICAgICMgQ2M6IG1haW50YWlu ZXJzIHJldHVybmVkIGJ5IGdldF9tYWludGFpbmVycy5wbAorICAgICAgICBteSBAY2NwYXRjaDsg ICAgIyBDYzogZW50cmllcyBpbiAqLnBhdGNoCisgICAgICAgIG15IEBleHRyYXBhdGNoOyAjIENj OiBmb3IgQUIsIFJCLCBSQUIgaW4gKi5wYXRjaAorCisgICAgICAgIHByaW50ICJQcm9jZXNzaW5n OiAiLmJhc2VuYW1lKCRmaWxlKS4iXG4iOworCisgICAgICAgICMgUmVhZCB0YWdzIGZyb20gb3V0 cHV0IG9mIGdldF9tYWludGFpbmVycy5wbAorICAgICAgICAjIExpc3RzIGdvIGludG8gQGhlYWRl ciBhbmQgZXZlcnl0aGluZyBlbHNlIGludG8gQGNjCisgICAgICAgIGdldG1haW50YWluZXJzKCRm aWxlLCBcQGhlYWRlciwgXEBjYyk7CisKKyAgICAgICAgIyBSZWFkIGFsbCBsaW5lcyB3aXRoIEND ICYgVE8gZnJvbSB0aGUgcGF0Y2ggZmlsZSAodGhlc2Ugd2lsbAorICAgICAgICAjIGxpa2VseSBj b21lIGZyb20gdGhlIGNvbW1pdCBtZXNzYWdlKS4gQWxzbyByZWFkIHRhZ3MuCisgICAgICAgIGdl dHRhZ3Nmcm9tcGF0Y2goJGZpbGUsIFxAaGVhZGVycGF0Y2gsIFxAY2NwYXRjaCwgXEBleHRyYXBh dGNoKTsKKworICAgICAgICAjIFdpdGggLXR8LS10YWdzIG9ubHkgYWRkIEBleHRyYXBhdGNoIHRv IEBoZWFkZXIgYW5kIEBjb21iaW5lZF9oZWFkZXIKKyAgICAgICAgIyBXaXRoIC0tdGFnc2NjIHRy ZWF0IHRhZ3MgYXMgQ0MgdGhhdCBjYW1lIGZyb20gdGhlICoucGF0Y2ggZmlsZQorICAgICAgICBp ZiAoJHRhZ3MgJiYgISR0YWdzY2MpIHsKKyAgICAgICAgICAgICMgQ29weSB0aGVzZSBhbHdheXMg b250byB0aGUgVE8gcmVsYXRlZCBhcnJheXMKKyAgICAgICAgICAgIHB1c2ggQGhlYWRlciwgQGV4 dHJhcGF0Y2g7CisgICAgICAgICAgICBwdXNoIEBjb21iaW5lZF9oZWFkZXIsIEBleHRyYXBhdGNo OworICAgICAgICB9IGVsc2lmICgkdGFnc2NjKSB7CisgICAgICAgICAgICAjIFRyZWF0IHRoZXNl IGFzIGlmIHRoZXkgY2FtZSBmcm9tIENDJ3MKKyAgICAgICAgICAgIHB1c2ggQGNjcGF0Y2gsIEBl eHRyYXBhdGNoOworICAgICAgICAgICAgcHVzaCBAY29tYmluZWRfY2MsIEBleHRyYXBhdGNoOwor ICAgICAgICB9CisKKyAgICAgICAgIyBJbiB0aGlzIHNlY3Rpb24gd2Ugbm9ybWFsaXplIHRoZSBs aXN0cy4gV2UgcmVtb3ZlIGVudHJpZXMKKyAgICAgICAgIyB0aGF0IGFyZSBhbHJlYWR5IGluIHRo ZSBwYXRjaCwgZnJvbSBAY2MgYW5kIEB0bworICAgICAgICBteSBAaGVhZGVyX29ubHkgPSBub3Jt YWxpemUoXEBoZWFkZXIsIFxAaGVhZGVycGF0Y2gpOworICAgICAgICBteSBAY2Nfb25seSAgPSBu b3JtYWxpemUoXEBjYywgXEBjY3BhdGNoKTsKKworICAgICAgICAjIEFwcGx5IHRoZSBsb2NhdGlv bgorICAgICAgICAkYXBwbHlsb2NhdGlvbnskcGxvY2F0aW9ufSgkZmlsZSwgXEBoZWFkZXJfb25s eSwgXEBjY19vbmx5KTsKKyAgICB9Cit9CisKKyMgRGVhbCB3aXRoIHRoZSBjb3ZlciBsZXR0ZXIK K2lmICgkaGFzX2NvdmVyX2xldHRlcikgeworICAgIG15IEBoZWFkZXJwYXRjaDsgICAjIEVudHJp ZXMgaW5zZXJ0ZWQgYXQgdGhlIGhlYWRlcgorICAgIG15IEBjY3BhdGNoOyAgICAjIENjOiBlbnRy aWVzIGluICoucGF0Y2gKKworICAgIHByaW50ICJQcm9jZXNzaW5nOiAiLmJhc2VuYW1lKCRjb3Zl cl9sZXR0ZXJfZmlsZSkuIlxuIjsKKworICAgICMgUmVhZCBhbGwgbGluZXMgd2l0aCBDQyAmIFRP IGZyb20gdGhlIHBhdGNoIGZpbGUgc3VjaCB0aGF0IHN1YnNlcXVlbnQKKyAgICAjIGNhbGxzIGRv bid0IGxlYWQgdG8gZHVwbGljYXRpb24KKyAgICBnZXR0YWdzZnJvbXBhdGNoKCRjb3Zlcl9sZXR0 ZXJfZmlsZSwgXEBoZWFkZXJwYXRjaCwgXEBjY3BhdGNoKTsKKworICAgICMgSW4gdGhpcyBzZWN0 aW9uIHdlIG5vcm1hbGl6ZSB0aGUgbGlzdHMuIFdlIHJlbW92ZSBlbnRyaWVzCisgICAgIyB0aGF0 IGFyZSBhbHJlYWR5IGluIHRoZSBwYXRjaCwgZnJvbSBAY2MgYW5kIEB0bworICAgIG15IEBoZWFk ZXJfb25seSA9IG5vcm1hbGl6ZShcQGNvbWJpbmVkX2hlYWRlciwgXEBoZWFkZXJwYXRjaCk7Cisg ICAgbXkgQGNjX29ubHkgID0gbm9ybWFsaXplKFxAY29tYmluZWRfY2MsIFxAY2NwYXRjaCk7CisK KyAgICAjIEFwcGx5IHRoZSBsb2NhdGlvbgorICAgICRhcHBseWxvY2F0aW9ueyRjbG9jYXRpb259 KCRjb3Zlcl9sZXR0ZXJfZmlsZSwgXEBoZWFkZXJfb25seSwgXEBjY19vbmx5KTsKKworICAgIHBy aW50ICJcbkRvbid0IGZvcmdldCB0byBhZGQgdGhlIHN1YmplY3QgYW5kIG1lc3NhZ2UgdG8gIi4K KyAgICAgICAgICAkY292ZXJfbGV0dGVyX2ZpbGUuIlxuIjsKK30KKworcHJpbnQgIlRoZW4gcGVy Zm9ybTpcbiIuCisgICAgICAiZ2l0IHNlbmQtZW1haWwgLXRvIHhlbi1kZXZlbFxAbGlzdHMueGVu cHJvamVjdC5vcmcgIi4KKyAgICAgICRwYXRjaF9kaXIuJy8nLiRwYXRjaF9wcmVmaXguIioucGF0 Y2giLiJcbiI7CisKK2V4aXQgMDsKKworbXkgJGdldG1haWxpbmdsaXN0c19kb25lID0gMDsKK215 IEBtYWlsaW5nbGlzdHMgPSAoKTsKKworc3ViIGdldG1haWxpbmdsaXN0cyAoKSB7CisgICAjIFJl YWQgbWFpbGluZyBsaXN0IGZyb20gTUFJTlRBSU5FUlMgZmlsZSBhbmQgY29weQorICAgIyBhIGxp c3Qgb2YgZS1tYWlsIGFkZHJlc3NlcyB0byBAbWFpbGluZ2xpc3RzCisgICAgaWYgKCEkZ2V0bWFp bGluZ2xpc3RzX2RvbmUpIHsKKyAgICAgICAgaWYgKC1lICRtYWludGFpbmVycykgeworICAgICAg ICAgICAgbXkgJGZoOworICAgICAgICAgICAgbXkgJGxpbmU7CisgICAgICAgICAgICBvcGVuKCRm aCwgIjwiLCAkbWFpbnRhaW5lcnMpIG9yIGRpZSAkITsKKyAgICAgICAgICAgIHdoaWxlIChteSAk bGluZSA9IDwkZmg+KSB7CisgICAgICAgICAgICAgICAgY2hvbXAgJGxpbmU7CisgICAgICAgICAg ICAgICAgaWYgKCRsaW5lID1+IC9eTDpbWzpibGFuazpdXSsvbSkgeworICAgICAgICAgICAgICAg ICAgIHB1c2ggQG1haWxpbmdsaXN0cywgJCc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgfQorICAgICAgICAgICAgJGZoLT5lcnJvciBhbmQgZGllICQhOworICAgICAgICAgICAgY2xv c2UgJGZoIG9yIGRpZSAkITsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50ICJX YXJuaW5nOiBmaWxlICckbWFpbnRhaW5lcnMnIGRvZXMgbm90IGV4aXN0XG4iOworICAgICAgICAg ICAgcHJpbnQgIldhcm5pbmc6IE1haWxpbmcgbGlzdHMgd2lsbCBiZSB0cmVhdGVkIGFzIENDJ3Nc biI7CisgICAgICAgIH0KKyAgICAjIERvbid0IHRyeSBhZ2FpbiwgZXZlbiBpZiB0aGUgTUFJTlRB SU5FUlMgZmlsZSBkb2VzIG5vdCBleGlzdAorICAgICRnZXRtYWlsaW5nbGlzdHNfZG9uZSA9IDE7 CisgICAgIyBSZW1vdmUgYW55IGR1cGxpY2F0ZXMKKyAgICBAbWFpbGluZ2xpc3RzID0gdW5pcSBA bWFpbGluZ2xpc3RzOworICAgIH0KK30KKworc3ViIGlzbWFpbGluZ2xpc3QgKCQpIHsKKyAgICBt eSAoJGNoZWNrKSA9IEBfOworICAgICMgR2V0IHRoZSBtYWlsaW5nIGxpc3QgaW5mb3JtYXRpb24K KyAgICBnZXRtYWlsaW5nbGlzdHMoKTsKKyAgICAjIERvIHRoZSBjaGVjaworICAgIGlmICggZ3Jl cCB7ICRfIGVxICRjaGVja30gQG1haWxpbmdsaXN0cykgeworICAgICAgICByZXR1cm4gMTsKKyAg ICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N1YiBnZXRtYWludGFpbmVycyAoJCQkKSB7CisgICAg bXkgKCRmaWxlLCAkcnRvLCAkcmNjKSA9IEBfOworICAgIG15ICRmaDsKKyAgICBvcGVuKCRmaCwg Ii18IiwgJGdldF9tYWludGFpbmVyLCBAZ2V0X21haW50YWluZXJfYXJncywgJy1mJywgJGZpbGUp CisgICAgICAgIG9yIGRpZSAiRmFpbGVkIHRvIG9wZW4gJyRnZXRfbWFpbnRhaW5lcidcbiI7Cisg ICAgd2hpbGUobXkgJGxpbmUgPSA8JGZoPikgeworICAgICAgICBjaG9tcCAkbGluZTsKKyAgICAg ICAgIyBLZWVwIGxpc3RzIGFuZCBDQydzIHNlcGFyYXRlbHkgYXMgd2UgZG9udCB3YW50IHRoZW0g aW4KKyAgICAgICAgIyB0aGUgY29tbWl0IG1lc3NhZ2UgdW5kZXIgYSBDYzogbGluZQorICAgICAg ICBpZiAoaXNtYWlsaW5nbGlzdCgkbGluZSkpIHsKKyAgICAgICAgICAgIHB1c2ggQCRydG8sICRU Ty4iICIuJGxpbmU7CisgICAgICAgICAgICBwdXNoIEBjb21iaW5lZF9oZWFkZXIsICRUTy4iICIu JGxpbmU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwdXNoIEAkcmNjLCAkQ0MuIiAi LiRsaW5lOworICAgICAgICAgICAgcHVzaCBAY29tYmluZWRfY2MsICRDQy4iICIuJGxpbmU7Cisg ICAgICAgIH0KKyAgICB9CisgICAgJGZoLT5lcnJvciBhbmQgZGllICQhOworICAgIGNsb3NlICRm aCBvciBkaWUgJCE7Cit9CisKK3N1YiBnZXR0YWdzZnJvbXBhdGNoICgkJCQ7JCkgeworICAgIG15 ICgkZmlsZSwgJHJ0bywgJHJjYywgJHJleHRyYSkgPSBAXzsKKyAgICBteSAkZmg7CisKKyAgICBv cGVuKCRmaCwgIjwiLCAkZmlsZSkKKyAgICAgICAgb3IgZGllICJGYWlsZWQgdG8gb3BlbiAnJGZp bGUnXG4iOworICAgIHdoaWxlKG15ICRsaW5lID0gPCRmaD4pIHsKKyAgICAgICAgY2hvbXAgJGxp bmU7CisgICAgICAgIG15ICRubGluZTsKKworICAgICAgICBpZiAoaGFzdGFnKCRsaW5lLCAkVE8p KSB7CisgICAgICAgICAgICBwdXNoIEAkcnRvLCAkbGluZTsKKyAgICAgICAgICAgIHB1c2ggQGNv bWJpbmVkX2hlYWRlciwgJGxpbmU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGhhc3RhZygkbGlu ZSwgJENDKSkgeworICAgICAgICAgICAgcHVzaCBAJHJjYywgJGxpbmU7CisgICAgICAgICAgICBw dXNoIEBjb21iaW5lZF9jYywgJGxpbmU7CisgICAgICAgIH0KKyAgICAgICAgIyBJZiB0aGVyZSBp cyBhbiAkcmV4dHJhLCB0aGVuIGdldCB2YXJpb3VzIHRhZ3MgYW5kIGFkZAorICAgICAgICAjIGVt YWlsIGFkZHJlc3NlcyB0byB0aGUgQ0MgbGlzdAorICAgICAgICBpZiAoJHJleHRyYSAmJiAkbGlu ZSA9fiAvXlstMC05YS16XSstYnk6W1s6Ymxhbms6XV0rL21pKSB7CisgICAgICAgICAgICBwdXNo IEAkcmV4dHJhLCAkQ0MuIiAiLiQnOworICAgICAgICB9CisgICAgfQorICAgICRmaC0+ZXJyb3Ig YW5kIGRpZSAkITsKKyAgICBjbG9zZSAkZmggb3IgZGllICQhOworfQorCitzdWIgaGFzdGFnICgk JCkgeworICAgIG15ICgkbGluZSwgJHRhZykgPSBAXzsKKyAgICBpZiAoJGxpbmUgPX4gbXteXFEk dGFnXEV9aSkgeworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisK K3N1YiBub3JtYWxpemUgKCQkKSB7CisgICAgbXkgKCRyYSwgJHJiKSA9IEBfOworICAgICMgVGhp cyBmdW5jdGlvbiBpcyB1c2VkIHRvIG5vcm1hbGl6ZSBsaXN0cyBvZiB0YWdzIG9yIENDIC8gVE8g bGlzdHMKKyAgICAjIEl0IHJldHVybnMgYSBsaXN0IG9mIHRoZSB1bmlxdWUgZWxlbWVudHMKKyAg ICAjIGluIEAkcmEsIGV4Y2x1ZGluZyBhbnkgd2hpY2ggYXJlIGluIEAkcmIuCisgICAgIyBDb21w YXJpc29ucyBhcmUgY2FzZS1pbnNlbnNpdGl2ZS4KKyAgICBteSBAYW9ubHkgPSAoKTsKKyAgICBt eSAlc2VlbjsKKyAgICBteSAkaXRlbTsKKworICAgIGZvcmVhY2ggJGl0ZW0gKEAkcmIpIHsKKyAg ICAgICAgJHNlZW57bGMoJGl0ZW0pfSA9IDE7CisgICAgfQorICAgIGZvcmVhY2ggJGl0ZW0gKEAk cmEpIHsKKyAgICAgICAgdW5sZXNzICgkc2VlbntsYygkaXRlbSl9KyspIHsKKyAgICAgICAgICAg ICMgaXQncyBub3QgaW4gJXNlZW4sIHNvIGFkZCB0byBAYW9ubHkKKyAgICAgICAgICAgIHB1c2gg QGFvbmx5LCAkaXRlbTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBAYW9ubHk7Cit9 CisKK3N1YiByZWFkZmlsZSAoJCkgeworICAgIG15ICgkZmlsZSkgPSBAXzsKKyAgICBteSAkZmg7 CisgICAgbXkgJGNvbnRlbnQ7CisgICAgb3BlbigkZmgsICI8IiwgJGZpbGUpCisgICAgICAgICBv ciBkaWUgIkNvdWxkIG5vdCBvcGVuIGZpbGUgJyRmaWxlJyAkISI7CisgICAgJGNvbnRlbnQgPSBk byB7IGxvY2FsICQvOyA8JGZoPiB9OworICAgICRmaC0+ZXJyb3IgYW5kIGRpZSAkITsKKyAgICBj bG9zZSAkZmggb3IgZGllICQhOworCisgICAgcmV0dXJuICRjb250ZW50OworfQorCitzdWIgd3Jp dGVmaWxlICgkJCkgeworICAgIG15ICgkY29udGVudCwgJGZpbGUpID0gQF87CisgICAgbXkgJGZo OworICAgIG9wZW4oJGZoLCAiPiIsICIkZmlsZS50bXAiKQorICAgICAgICAgb3IgZGllICJDb3Vs ZCBub3Qgb3BlbiBmaWxlICckZmlsZS50bXAnICQhIjsKKyAgICBwcmludCAkZmggJGNvbnRlbnQg b3IgZGllICQhOworICAgIGNsb3NlICRmaCBvciBkaWUgJCE7CisgICAgcmVuYW1lICIkZmlsZS50 bXAiLCAkZmlsZSBvciBkaWUgIkNvdWxkIG5vdCByZW5hbWUgJyRmaWxlJyBpbnRvIHBsYWNlICQh IjsKK30KKworc3ViIGluc2VydCAoJCQkJCkgeworICAgIG15ICgkZmlsZSwgJGluc2VydCwgJGRl bGltaXRlciwgJGluc2FmdGVyKSA9IEBfOworICAgIG15ICRjb250ZW50OworCisgICAgaWYgKCRp bnNlcnQgZXEgIiIpIHsKKyAgICAgICAgIyBOb3RoaW5nIHRvIGluc2VydAorICAgICAgICByZXR1 cm47CisgICAgfQorICAgICMgUmVhZCBmaWxlCisgICAgJGNvbnRlbnQgPSByZWFkZmlsZSgkZmls ZSkgb3IgZGllICQhOworCisgICAgIyBTcGxpdCB0aGUgc3RyaW5nIGFuZCBnZW5lcmF0ZSBuZXcg Y29udGVudAorICAgIGlmICgkY29udGVudCA9fiAvXlxRJGRlbGltaXRlclxFL21pKSB7CisgICAg ICAgIGlmICgkaW5zYWZ0ZXIpIHsKKyAgICAgICAgICAgIHdyaXRlZmlsZSgkYC4kZGVsaW1pdGVy LiJcbiIuJGluc2VydC4iXG4iLiQnLCAkZmlsZSk7CisKKyAgICAgICAgICAgIGlmICgkdmVyYm9z ZSkgeworICAgICAgICAgICAgICAgIHByaW50ICJcbkluc2VydGVkIGludG8gIi5iYXNlbmFtZSgk ZmlsZSkuJyBhZnRlciAiJy4KKyAgICAgICAgICAgICAgICAgICAgICAkZGVsaW1pdGVyLiInIi4i XG4tLS0tLVxuIi4kaW5zZXJ0LiJcbi0tLS0tXG4iOworICAgICAgICAgICAgfQorICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgd3JpdGVmaWxlKCRgLiRpbnNlcnQuIlxuIi4kZGVsaW1pdGVy LiQnLCAkZmlsZSk7CisKKyAgICAgICAgICAgIGlmICgkdmVyYm9zZSkgeworICAgICAgICAgICAg ICAgIHByaW50ICJcbkluc2VydGVkIGludG8gIi5iYXNlbmFtZSgkZmlsZSkuJyBiZWZvcmUgIicu CisgICAgICAgICAgICAgICAgICAgICAgJGRlbGltaXRlci4iJyIuIlxuLS0tLS1cbiIuJGluc2Vy dC4iXG4tLS0tLVxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfSBlbHNlIHsK KyAgICAgICBwcmludCAiRXJyb3I6IERpZG4ndCBmaW5kICckZGVsaW1pdGVyJyBpbiAnJGZpbGUn XG4iOworICAgIH0KK30KLS0gCjIuMS40CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMu eGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3Rp bmZvL3hlbi1kZXZlbA==