From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 19F75C282DC for ; Sun, 2 Jun 2019 21:55:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id AA02627A15 for ; Sun, 2 Jun 2019 21:55:30 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=darbyshire-bryant.me.uk header.i=@darbyshire-bryant.me.uk header.b="uR45VJV3" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726828AbfFBVz3 (ORCPT ); Sun, 2 Jun 2019 17:55:29 -0400 Received: from mail-eopbgr00058.outbound.protection.outlook.com ([40.107.0.58]:64743 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726656AbfFBVz3 (ORCPT ); Sun, 2 Jun 2019 17:55:29 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=darbyshire-bryant.me.uk; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=V4qZJ8RQIFwSEY+rCHwS/9z7wAlHiW9u25/dUhZCqIg=; b=uR45VJV33THcQksT3iS4Ilic8Xz/qmckL3sCEB5girILXdsBISLcZLxwOydQj63EZFEErhDZR14pFweImVGu5hB4fV7nM57VvwMIf5nXxKZvnU7x++h/tfWV9aM9A5+/IJQyamOuFSv4gPPcSgU+2sKHNw9IOBmaT9b6WAcleBg= Received: from VI1PR0302MB2750.eurprd03.prod.outlook.com (10.171.106.21) by VI1PR0302MB2671.eurprd03.prod.outlook.com (10.171.104.144) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1943.17; Sun, 2 Jun 2019 21:55:20 +0000 Received: from VI1PR0302MB2750.eurprd03.prod.outlook.com ([fe80::74:c526:8946:7cf3]) by VI1PR0302MB2750.eurprd03.prod.outlook.com ([fe80::74:c526:8946:7cf3%2]) with mapi id 15.20.1943.018; Sun, 2 Jun 2019 21:55:20 +0000 From: Kevin 'ldir' Darbyshire-Bryant To: =?utf-8?B?VG9rZSBIw7hpbGFuZC1Kw7hyZ2Vuc2Vu?= CC: "netdev@vger.kernel.org" , "stephen@networkplumber.org" Subject: Re: [PATCH RFC iproute2-next v3] tc: add support for action act_ctinfo Thread-Topic: [PATCH RFC iproute2-next v3] tc: add support for action act_ctinfo Thread-Index: AQHVGXQ5yWR0CNYPukqU8auqcmJbhqaI04eAgAAVTYA= Date: Sun, 2 Jun 2019 21:55:20 +0000 Message-ID: <7BF2F86F-2F95-4FCE-87D9-D0D93EE34722@darbyshire-bryant.me.uk> References: <20190531081031.24671-1-ldir.kdb@icloud.com> <20190602185020.40787-1-ldir@darbyshire-bryant.me.uk> <87a7eziuxi.fsf@toke.dk> In-Reply-To: <87a7eziuxi.fsf@toke.dk> Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=ldir@darbyshire-bryant.me.uk; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [2a02:c7f:1268:6500::dc83] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 9dd04156-0d07-42b5-f8bf-08d6e7a501c6 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(7021145)(8989299)(5600148)(711020)(4605104)(1401327)(4534185)(7022145)(4603075)(4627221)(201702281549075)(8990200)(7048125)(7024125)(7027125)(7023125)(2017052603328)(7193020);SRVR:VI1PR0302MB2671; x-ms-traffictypediagnostic: VI1PR0302MB2671: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:1060; x-forefront-prvs: 005671E15D x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(346002)(39830400003)(396003)(376002)(136003)(366004)(199004)(189003)(45080400002)(6246003)(74482002)(476003)(86362001)(14454004)(256004)(14444005)(76116006)(486006)(2906002)(8936002)(33656002)(229853002)(66446008)(46003)(66476007)(53936002)(91956017)(446003)(6916009)(6506007)(53546011)(11346002)(2616005)(186003)(6436002)(82746002)(81156014)(81166006)(6512007)(508600001)(102836004)(66946007)(8676002)(66556008)(73956011)(6486002)(64756008)(25786009)(71200400001)(71190400001)(36756003)(76176011)(83716004)(68736007)(66574012)(316002)(7736002)(30864003)(99286004)(305945005)(6116002)(5660300002)(54906003)(4326008);DIR:OUT;SFP:1101;SCL:1;SRVR:VI1PR0302MB2671;H:VI1PR0302MB2750.eurprd03.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: darbyshire-bryant.me.uk does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: +N7ce33Jp5KMrUB6RtydXIUh5XPd3vpsH9I1L7U+FIi8B9GTZs4LqqwgBhDtH8+MpR6pbWA+RpjqpkeLrggtdRXaSa5FBkRDEilBgaYCiAMd3Boejm0qQmiooKdyfflN5US9s/EJykHmaBvfTf6PsxseEPF2G2R3JOkE/upIcVtKgP6heDR2VPRFZ40y3P4vacp0ym4KXvJsLUTeaDgilWGCW9uUGNMdRxrdbWAftg0mWgHq7mBFJx72l8d4ZmJtQJwg2Rwi+fsgR9FqgjDoy2n3jkLgWoQa0FNC8qH1xDmry3oKZc5g41WphqenLgX36DJR4o8EoV2qqF6UStShzLr7oxFLhSQEQLLUGnjQG8kCqbIvz6OaeIAVIG/uFz1Dh8bkV3jPNMEnJsc1w7qzMsLPfRnSHAxVfRwLm9sA8lM= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: darbyshire-bryant.me.uk X-MS-Exchange-CrossTenant-Network-Message-Id: 9dd04156-0d07-42b5-f8bf-08d6e7a501c6 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Jun 2019 21:55:20.2749 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 9151708b-c553-406f-8e56-694f435154a4 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: kevin@darbyshire-bryant.me.uk X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0302MB2671 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org DQoNCj4gT24gMiBKdW4gMjAxOSwgYXQgMjE6MzksIFRva2UgSMO4aWxhbmQtSsO4cmdlbnNlbiA8 dG9rZUByZWRoYXQuY29tPiB3cm90ZToNCj4gDQo+IEtldmluIERhcmJ5c2hpcmUtQnJ5YW50IDxs ZGlyQGRhcmJ5c2hpcmUtYnJ5YW50Lm1lLnVrPiB3cml0ZXM6DQo+IA0KPj4gY3RpbmZvIGlzIGFu IGFjdGlvbiByZXN0b3JpbmcgZGF0YSBzdG9yZWQgaW4gY29ubnRyYWNrIG1hcmtzIHRvIHZhcmlv dXMNCj4+IGZpZWxkcy4gIEF0IHByZXNlbnQgaXQgaGFzIHR3byBpbmRlcGVuZGVudCBtb2RlcyBv ZiBvcGVyYXRpb24sDQo+PiByZXN0b3JhdGlvbiBvZiBEU0NQIGludG8gSVB2NC92NiBkaWZmc2Vy diBhbmQgcmVzdG9yYXRpb24gb2YgY29ubnRyYWNrDQo+PiBtYXJrcyBpbnRvIHBhY2tldCBza2Ig bWFya3MuDQo+PiANCj4+IEl0IHVuZGVyc3RhbmRzIGEgbnVtYmVyIG9mIHBhcmFtZXRlcnMgc3Bl Y2lmaWMgdG8gdGhpcyBhY3Rpb24gaW4NCj4+IGFkZGl0aW9uYWwgdG8gdGhlIHVzdWFsIGFjdGlv biBzeW50YXguICBFYWNoIG9wZXJhdGluZyBtb2RlIGlzDQo+PiBpbmRlcGVuZGVudCBvZiB0aGUg b3RoZXIgc28gYWxsIG9wdGlvbnMgYXJlIG9wdGlvbmFsLCBob3dldmVyIG5vdA0KPj4gc3BlY2lm eWluZyBhdCBsZWFzdCBvbmUgbW9kZSBpcyBhIGJpdCBwb2ludGxlc3MuDQo+PiANCj4+IFVzYWdl OiAuLi4gY3RpbmZvIFtkc2NwIG1hc2tbL3N0YXRlbWFza11dIFtjcG1hcmsgW21hc2tdXSBbem9u ZSBaT05FXQ0KPj4gCQkgIFtDT05UUk9MXSBbaW5kZXggPElOREVYPl0NCj4gDQo+IFlheSwgYmlr ZXNoZWRkaW5nIHRpbWUhIDopDQoNCkkgc2VlIHlvdXIgYmlrZXNoZWQgYW5kIHJhaXNlIHlvdeKA piBhIGJ1cyBzaGVsdGVyIDotKQ0KDQo+IA0KPiBBcyBJIHNhaWQgaW4gcmVwbHkgdG8gdGhlIGtl cm5lbCBwYXRjaCwgdGhlICJYL1kiIHN5bnRheCB1c3VhbGx5IG1lYW5zDQo+ICI8dmFsdWU+Lzxt YXNrIGFwcGxpZWQgdG8gdmFsdWU+Iiwgd2hlcmUgaGVyZSB0aGV5IGFyZSBqdXN0IHR3bw0KPiBz ZW1pLXJlbGF0ZWQgbWFzayB2YWx1ZXMuIFNvIEkgdGhpbmsgaXQgd291bGQgYmUgYmV0dGVyIHRv IGp1c3QgbWFrZQ0KPiAnc3RhdGVtYXNrJyBpdHMgb3duIHBhcmFtZXRlci4NCg0KSW5zdGVhZCBv ZiBjcmVhdGluZyBhbm90aGVyIGtleXdvcmQgaG93IGFib3V0IHdlIGRyb3AgdGhlIOKAmC/igJgg YW5kDQptYWtlIGl0IGEgc3BhY2Ugc2VwYXJhdGVkIG9wdGlvbmFsIHBhcmFtZXRlciB0byDigJhk c2Nw4oCZPyBlZy4NCg0KVXNhZ2U6IC4uLiBjdGluZm8gW2RzY3AgbWFzayBbc3RhdGVtYXNrXV0g W2NwbWFyayBbbWFza11dIGJsYWggYmxhaA0KDQoNCj4gT3RoZXIgdGhhbiB0aGF0LCBqdXN0IGEg ZmV3IG5pdHMsIGJlbG93Li4uDQo+IA0KPj4gRFNDUCBtb2RlDQo+PiANCj4+IGRzY3AgZW5hYmxl cyBjb3B5aW5nIG9mIGEgRFNDUCBzdG9yZSBpbiB0aGUgY29ubnRyYWNrIG1hcmsgaW50byB0aGUN Cj4+IGlwdjQvdjYgZGlmZnNlcnYgZmllbGQuICBUaGUgbWFzayBpcyBhIDMyYml0IGZpZWxkIGFu ZCBzcGVjaWZpZXMgd2hlcmUNCj4+IGluIHRoZSBjb25udHJhY2sgbWFyayB0aGUgRFNDUCB2YWx1 ZSBpcyBzdG9yZWQuICBJdCBtdXN0IGJlIDYgY29udGlndW91cw0KPj4gYml0cyBsb25nLCBlLmcu IDB4ZmMwMDAwMDAgd291bGQgcmVzdG9yZSB0aGUgRFNDUCBmcm9tIHRoZSB1cHBlciA2IGJpdHMN Cj4+IG9mIHRoZSBjb25udHJhY2sgbWFyay4NCj4+IA0KPj4gVGhlIERTQ1AgY29weWluZyBtYXkg YmUgb3B0aW9uYWxseSBjb250cm9sbGVkIGJ5IGEgc3RhdGVtYXNrLiAgVGhlDQo+PiBzdGF0ZW1h c2sgaXMgYSAzMmJpdCBmaWVsZCwgdXN1YWxseSB3aXRoIGEgc2luZ2xlIGJpdCBzZXQgYW5kIG11 c3Qgbm90DQo+PiBvdmVybGFwIHRoZSBkc2NwIG1hc2suICBUaGUgRFNDUCByZXN0b3JlIG9wZXJh dGlvbiB3aWxsIG9ubHkgdGFrZSBwbGFjZQ0KPj4gaWYgdGhlIGNvcnJlc3BvbmRpbmcgYml0L3Mg aW4gY29ubnRyYWNrIG1hcmsgeWllbGQgYSBub24gemVybyByZXN1bHQuDQo+PiANCj4+IGVnLiBk c2NwIDB4ZmMwMDAwMDAvMHgwMTAwMDAwMCB3b3VsZCByZXRyaWV2ZSB0aGUgRFNDUCBmcm9tIHRo ZSB0b3AgNg0KPj4gYml0cywgd2hpbHN0IHVzaW5nIGJpdCAyNSBhcyBhIGZsYWcgdG8gZG8gc28u ICBCaXQgMjYgaXMgdW51c2VkIGluIHRoaXMNCj4+IGV4YW1wbGUuDQo+PiANCj4+IENQTUFSSyBt b2RlDQo+PiANCj4+IGNwbWFyayBlbmFibGVzIGNvcHlpbmcgb2YgdGhlIGNvbm50cmFjayBtYXJr IHRvIHRoZSBwYWNrZXQgc2tiIG1hcmsuICBJbg0KPj4gdGhpcyBtb2RlIGl0IGlzIGNvbXBsZXRl bHkgZXF1aXZhbGVudCB0byB0aGUgZXhpc3RpbmcgYWN0X2Nvbm5tYXJrLg0KPj4gQWRkaXRpb25h bCBmdW5jdGlvbmFsaXR5IGlzIHByb3ZpZGVkIGJ5IHRoZSBvcHRpb25hbCBtYXNrIHBhcmFtZXRl ciwNCj4+IHdoZXJlYnkgdGhlIHN0b3JlZCBjb25udHJhY2sgbWFyayBpcyBsb2dpY2FsbHkgYW5k ZWQgd2l0aCB0aGUgY3BtYXJrDQo+PiBtYXNrIGJlZm9yZSBiZWluZyBzdG9yZWQgaW50byBza2Ig bWFyay4gIFRoaXMgYWxsb3dzIHNoYXJlZCB1c2FnZSBvZiB0aGUNCj4+IGNvbm50cmFjayBtYXJr IGJldHdlZW4gYXBwbGljYXRpb25zLg0KPj4gDQo+PiBlZy4gY3BtYXJrIDB4MDBmZmZmZmYgd291 bGQgcmVzdG9yZSBvbmx5IHRoZSBsb3dlciAyNCBiaXRzIG9mIHRoZQ0KPj4gY29ubnRyYWNrIG1h cmssIHRodXMgbWF5IGJlIHVzZWZ1bCBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgdXBwZXIgOCBiaXRz DQo+PiBhcmUgdXNlZCBieSB0aGUgRFNDUCBmdW5jdGlvbi4NCj4+IA0KPj4gVXNhZ2U6IC4uLiBj dGluZm8gW2RzY3AgbWFza1svc3RhdGVtYXNrXV0gW2NwbWFyayBbbWFza11dIFt6b25lIFpPTkVd DQo+PiAJCSAgW0NPTlRST0xdIFtpbmRleCA8SU5ERVg+XQ0KPj4gd2hlcmUgOg0KPj4gCWRzY3Ag TUFTSyBpcyB0aGUgYml0bWFzayB0byByZXN0b3JlIERTQ1ANCj4+IAkgICAgIFNUQVRFTUFTSyBp cyB0aGUgYml0bWFzayB0byBkZXRlcm1pbmUgY29uZGl0aW9uYWwgcmVzdG9yaW5nDQo+PiAJY3Bt YXJrIE1BU0sgbWFzayBhcHBsaWVkIHRvIHJlc3RvcmVkIHBhY2tldCBtYXJrDQo+PiAJWk9ORSBp cyB0aGUgY29ubnRyYWNrIHpvbmUNCj4+IAlDT05UUk9MIDo9IHJlY2xhc3NpZnkgfCBwaXBlIHwg ZHJvcCB8IGNvbnRpbnVlIHwgb2sgfA0KPj4gCQkgICBnb3RvIGNoYWluIDxDSEFJTl9JTkRFWD4N Cj4+IA0KPj4gU2lnbmVkLW9mZi1ieTogS2V2aW4gRGFyYnlzaGlyZS1CcnlhbnQgPGxkaXJAZGFy YnlzaGlyZS1icnlhbnQubWUudWs+DQo+PiANCj4+IC0tLQ0KPj4gdjIgLSBmaXggd2hpdGVzcGFj ZSBpc3N1ZSBpbiBwa3RfY2xzDQo+PiAgICAgZml4IG1vc3Qgd2FybmluZ3MgZnJvbSBjaGVja3Bh dGNoIC0gc29tZSBsaW5lcyBzdGlsbCBvdmVyIDgwIGNoYXJzDQo+PiAgICAgZHVlIHRvIGxvbmcg VExWIG5hbWVzLg0KPj4gdjMgLSBmaXggc29tZSBkYW5nbGluZyBlbHNlIHdhcm5pbmdzLg0KPj4g ICAgIHJlZmFjdG9yIHN0YXRzIHByaW50aW5nIHRvIHBsZWFzZSBjaGVja3BhdGNoLg0KPj4gICAg IHNlbmQgem9uZSBUTFYgZXZlbiBpZiBkZWZhdWx0ICcwJyB6b25lLg0KPj4gICAgIG5vdyBjaGVj a3BhdGNoIGNsZWFuIGV2ZW4gdGhvdWdoIEkgdGhpbmsgc29tZSBvZiB0aGUgZm9ybWF0dGluZw0K Pj4gICAgIGlzIGhvcnJpYmxlIDotKQ0KPj4gICAgIHNlbmRpbmcgdmlhIGdvb2dsZSdzIHNtdHAg J2NvcyBNUycgZXhjaGFuZ2Ugb2ZmaWNlMzY1IGFwcGVhcnMNCj4+ICAgICB0byBtYW5nbGUgcGF0 Y2hlcyBmcm9tIGdpdCBzZW5kLWVtYWlsLg0KPiANCj4gQWgsIHNvIGl0IHdhc24ndCBqdXN0IG1l IGhhdmluZyBwcm9ibGVtcyA7KQ0KDQpObywgdGhvdWdoIEnigJltIHN0aWxsIG5vdCBjbGVhciB3 aGF04oCZcyBnb2luZyBvbiBvciB3aGVuIE1pY3Jvc29mdA0KaW1wcm92ZWQodG0pIGl0IDotLw0K DQo+IA0KPj4gaW5jbHVkZS91YXBpL2xpbnV4L3BrdF9jbHMuaCAgICAgICAgICB8ICAgMSArDQo+ PiBpbmNsdWRlL3VhcGkvbGludXgvdGNfYWN0L3RjX2N0aW5mby5oIHwgIDM0ICsrKysNCj4+IHRj L01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKw0KPj4gdGMvbV9jdGlu Zm8uYyAgICAgICAgICAgICAgICAgICAgICAgICB8IDI2MiArKysrKysrKysrKysrKysrKysrKysr KysrKw0KPj4gNCBmaWxlcyBjaGFuZ2VkLCAyOTggaW5zZXJ0aW9ucygrKQ0KPj4gY3JlYXRlIG1v ZGUgMTAwNjQ0IGluY2x1ZGUvdWFwaS9saW51eC90Y19hY3QvdGNfY3RpbmZvLmgNCj4+IGNyZWF0 ZSBtb2RlIDEwMDY0NCB0Yy9tX2N0aW5mby5jDQo+PiANCj4+IGRpZmYgLS1naXQgYS9pbmNsdWRl L3VhcGkvbGludXgvcGt0X2Nscy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3BrdF9jbHMuaA0KPj4g aW5kZXggNTFhMDQ5NmYuLmE5MzY4MGZjIDEwMDY0NA0KPj4gLS0tIGEvaW5jbHVkZS91YXBpL2xp bnV4L3BrdF9jbHMuaA0KPj4gKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3BrdF9jbHMuaA0KPj4g QEAgLTEwNSw2ICsxMDUsNyBAQCBlbnVtIHRjYV9pZCB7DQo+PiAJVENBX0lEX0lGRSA9IFRDQV9B Q1RfSUZFLA0KPj4gCVRDQV9JRF9TQU1QTEUgPSBUQ0FfQUNUX1NBTVBMRSwNCj4+IAkvKiBvdGhl ciBhY3Rpb25zIGdvIGhlcmUgKi8NCj4+ICsJVENBX0lEX0NUSU5GTywNCj4+IAlfX1RDQV9JRF9N QVggPSAyNTUNCj4+IH07DQo+PiANCj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgv dGNfYWN0L3RjX2N0aW5mby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3RjX2FjdC90Y19jdGluZm8u aA0KPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4+IGluZGV4IDAwMDAwMDAwLi5kYTgwM2UwNQ0K Pj4gLS0tIC9kZXYvbnVsbA0KPj4gKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3RjX2FjdC90Y19j dGluZm8uaA0KPj4gQEAgLTAsMCArMSwzNCBAQA0KPj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wIFdJVEggTGludXgtc3lzY2FsbC1ub3RlICovDQo+PiArI2lmbmRlZiBfX1VB UElfVENfQ1RJTkZPX0gNCj4+ICsjZGVmaW5lIF9fVUFQSV9UQ19DVElORk9fSA0KPj4gKw0KPj4g KyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9wa3RfY2xzLmg+ DQo+PiArDQo+PiArc3RydWN0IHRjX2N0aW5mbyB7DQo+PiArCXRjX2dlbjsNCj4+ICt9Ow0KPj4g Kw0KPj4gK2VudW0gew0KPj4gKwlUQ0FfQ1RJTkZPX1VOU1BFQywNCj4+ICsJVENBX0NUSU5GT19Q QUQsDQo+PiArCVRDQV9DVElORk9fVE0sDQo+PiArCVRDQV9DVElORk9fQUNULA0KPj4gKwlUQ0Ff Q1RJTkZPX1pPTkUsDQo+PiArCVRDQV9DVElORk9fUEFSTVNfRFNDUF9NQVNLLA0KPj4gKwlUQ0Ff Q1RJTkZPX1BBUk1TX0RTQ1BfU1RBVEVNQVNLLA0KPj4gKwlUQ0FfQ1RJTkZPX1BBUk1TX0NQTUFS S19NQVNLLA0KPj4gKwlUQ0FfQ1RJTkZPX1NUQVRTX0RTQ1BfU0VULA0KPj4gKwlUQ0FfQ1RJTkZP X1NUQVRTX0RTQ1BfRVJST1IsDQo+PiArCVRDQV9DVElORk9fU1RBVFNfQ1BNQVJLX1NFVCwNCj4+ ICsJX19UQ0FfQ1RJTkZPX01BWA0KPj4gK307DQo+PiArDQo+PiArI2RlZmluZSBUQ0FfQ1RJTkZP X01BWCAoX19UQ0FfQ1RJTkZPX01BWCAtIDEpDQo+PiArDQo+PiArZW51bSB7DQo+PiArCUNUSU5G T19NT0RFX0RTQ1AJPSBCSVQoMCksDQo+PiArCUNUSU5GT19NT0RFX0NQTUFSSwk9IEJJVCgxKQ0K Pj4gK307DQo+PiArDQo+PiArI2VuZGlmDQo+PiBkaWZmIC0tZ2l0IGEvdGMvTWFrZWZpbGUgYi90 Yy9NYWtlZmlsZQ0KPj4gaW5kZXggMWEzMDVjZjQuLjYwYWJkZGVlIDEwMDY0NA0KPj4gLS0tIGEv dGMvTWFrZWZpbGUNCj4+ICsrKyBiL3RjL01ha2VmaWxlDQo+PiBAQCAtNDgsNiArNDgsNyBAQCBU Q01PRFVMRVMgKz0gbV9jc3VtLm8NCj4+IFRDTU9EVUxFUyArPSBtX3NpbXBsZS5vDQo+PiBUQ01P RFVMRVMgKz0gbV92bGFuLm8NCj4+IFRDTU9EVUxFUyArPSBtX2Nvbm5tYXJrLm8NCj4+ICtUQ01P RFVMRVMgKz0gbV9jdGluZm8ubw0KPj4gVENNT0RVTEVTICs9IG1fYnBmLm8NCj4+IFRDTU9EVUxF UyArPSBtX3R1bm5lbF9rZXkubw0KPj4gVENNT0RVTEVTICs9IG1fc2FtcGxlLm8NCj4+IGRpZmYg LS1naXQgYS90Yy9tX2N0aW5mby5jIGIvdGMvbV9jdGluZm8uYw0KPj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQNCj4+IGluZGV4IDAwMDAwMDAwLi5hZjUxMDJiZg0KPj4gLS0tIC9kZXYvbnVsbA0KPj4g KysrIGIvdGMvbV9jdGluZm8uYw0KPj4gQEAgLTAsMCArMSwyNjIgQEANCj4+ICsvKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KPj4gKy8qDQo+PiArICogbV9jdGluZm8uYwkJ bmV0ZmlsdGVyIGN0aW5mbyBtYXJrIGFjdGlvbg0KPj4gKyAqDQo+PiArICogQ29weXJpZ2h0IChj KSAyMDE5IEtldmluIERhcmJ5c2hpcmUtQnJ5YW50IDxsZGlyQGRhcmJ5c2hpcmUtYnJ5YW50Lm1l LnVrPg0KPj4gKyAqLw0KPj4gKw0KPj4gKyNpbmNsdWRlIDxzdGRpby5oPg0KPj4gKyNpbmNsdWRl IDxzdGRsaWIuaD4NCj4+ICsjaW5jbHVkZSA8dW5pc3RkLmg+DQo+PiArI2luY2x1ZGUgPHN0cmlu Zy5oPg0KPj4gKyNpbmNsdWRlICJ1dGlscy5oIg0KPj4gKyNpbmNsdWRlICJ0Y191dGlsLmgiDQo+ PiArI2luY2x1ZGUgPGxpbnV4L3RjX2FjdC90Y19jdGluZm8uaD4NCj4+ICsNCj4+ICtzdGF0aWMg dm9pZA0KPj4gK2V4cGxhaW4odm9pZCkNCj4+ICt7DQo+PiArCWZwcmludGYoc3RkZXJyLA0KPj4g KwkJIlVzYWdlOiAuLi4gY3RpbmZvIFtkc2NwIG1hc2tbL3N0YXRlbWFza11dIFtjcG1hcmsgW21h c2tdXSBbem9uZSBaT05FXSBbQ09OVFJPTF0gW2luZGV4IDxJTkRFWD5dXG4iDQo+PiArCQkid2hl cmUgOlxuIg0KPj4gKwkJIlx0ZHNjcCAgIE1BU0sgYml0bWFzayBsb2NhdGlvbiBvZiBzdG9yZWQg RFNDUFxuIg0KPj4gKwkJIlx0ICAgICAgIFNUQVRFTUFTSyBiaXRtYXNrIHRvIGRldGVybWluZSBj b25kaXRpb25hbCByZXN0b3JpbmdcbiINCj4+ICsJCSJcdGNwbWFyayBNQVNLIG1hc2sgYXBwbGll ZCB0byBtYXJrIG9uIHJlc3RvcmF0aW9uXG4iDQo+PiArCQkiXHRaT05FIGlzIHRoZSBjb25udHJh Y2sgem9uZVxuIg0KPj4gKwkJIlx0Q09OVFJPTCA6PSByZWNsYXNzaWZ5IHwgcGlwZSB8IGRyb3Ag fCBjb250aW51ZSB8IG9rIHxcbiINCj4+ICsJCSJcdCAgICAgICAgICAgZ290byBjaGFpbiA8Q0hB SU5fSU5ERVg+XG4iKTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQNCj4+ICt1c2FnZSh2 b2lkKQ0KPj4gK3sNCj4+ICsJZXhwbGFpbigpOw0KPj4gKwlleGl0KC0xKTsNCj4+ICt9DQo+PiAr DQo+PiArc3RhdGljIGludA0KPj4gK3BhcnNlX2N0aW5mbyhzdHJ1Y3QgYWN0aW9uX3V0aWwgKmEs IGludCAqYXJnY19wLCBjaGFyICoqKmFyZ3ZfcCwgaW50IHRjYV9pZCwNCj4+ICsJICAgICBzdHJ1 Y3Qgbmxtc2doZHIgKm4pDQo+PiArew0KPj4gKwl1bnNpZ25lZCBpbnQgY3BtYXJrbWFzayA9IDAs IGRzY3BtYXNrID0gMCwgZHNjcHN0YXRlbWFzayA9IDA7DQo+PiArCXN0cnVjdCB0Y19jdGluZm8g c2VsID0ge307DQo+PiArCXVuc2lnbmVkIHNob3J0IHpvbmUgPSAwOw0KPj4gKwljaGFyICoqYXJn diA9ICphcmd2X3A7DQo+PiArCXN0cnVjdCBydGF0dHIgKnRhaWw7DQo+PiArCWludCBhcmdjID0g KmFyZ2NfcDsNCj4+ICsJaW50IG9rID0gMDsNCj4+ICsNCj4+ICsJd2hpbGUgKGFyZ2MgPiAwKSB7 DQo+PiArCQlpZiAobWF0Y2hlcygqYXJndiwgImN0aW5mbyIpID09IDApIHsNCj4+ICsJCQlvayA9 IDE7DQo+PiArCQkJYXJnYy0tOw0KPj4gKwkJCWFyZ3YrKzsNCj4+ICsJCX0gZWxzZSBpZiAobWF0 Y2hlcygqYXJndiwgImhlbHAiKSA9PSAwKSB7DQo+PiArCQkJdXNhZ2UoKTsNCj4+ICsJCX0gZWxz ZSB7DQo+PiArCQkJYnJlYWs7DQo+PiArCQl9DQo+PiArDQo+PiArCX0NCj4+ICsNCj4+ICsJaWYg KCFvaykgew0KPj4gKwkJZXhwbGFpbigpOw0KPj4gKwkJcmV0dXJuIC0xOw0KPj4gKwl9DQo+PiAr DQo+PiArCWlmIChhcmdjKSB7DQo+PiArCQlpZiAobWF0Y2hlcygqYXJndiwgImRzY3AiKSA9PSAw KSB7DQo+PiArCQkJTkVYVF9BUkcoKTsNCj4+ICsJCQljaGFyICpzbGFzaDsNCj4+ICsNCj4+ICsJ CQlzbGFzaCA9IHN0cmNocigqYXJndiwgJy8nKTsNCj4+ICsJCQlpZiAoc2xhc2gpDQo+PiArCQkJ CSpzbGFzaCA9ICdcMCc7DQo+PiArCQkJaWYgKGdldF91MzIoJmRzY3BtYXNrLCAqYXJndiwgMCkp IHsNCj4+ICsJCQkJZnByaW50ZihzdGRlcnIsDQo+PiArCQkJCQkiY3RpbmZvOiBJbGxlZ2FsIGRz Y3AgXCJtYXNrXCJcbiIpOw0KPj4gKwkJCQlyZXR1cm4gLTE7DQo+PiArCQkJfQ0KPiANCj4gTm90 IHN0cmljdGx5IG5lY2Vzc2FyeSwgYnV0IHdvdWxkIGl0IGJlIG5pY2VyIHRvIHRoZSB1c2VyIHRv IGRvIHRoZQ0KPiAnbXVzdCBiZSBleGFjdGx5IDYgYml0cycgdGVzdCBoZXJlIGFzIHdlbGwsIGlu IG9yZGVyIHRvIHByb3ZpZGUgYQ0KPiBmcmllbmRsaWVyIGVycm9yIG1lc3NhZ2UgdGhhbiBqdXN0 ICdpbnZhbGlk4oCZPw0KDQpBZ3JlZWQuICBIYXZlIGltcGxlbWVudGVkIHRoYXQgaW4gdjQsIG5l ZWQgdG8gdGVzdCBiZWZvcmUgc2VuZGluZy4uYm90aCBhZnRlcg0Kc2xlZXAgOi0pDQoNCj4gDQo+ IENvdWxkIGFsc28ganVzdCBhZGQgdGhpcyB2aWEgZXh0YWNrIG9uIHRoZSBrZXJuZWwgc2lkZSwg b2YgY291cnNl4oCmDQoNCk1heSBJIHBsZWFzZSBkb2RnZSB0aGF0IHBhcnRpY3VsYXIgYnVsbGV0 IG9uIHRoaXMgb2NjYXNpb24/DQoNCj4gDQo+PiArCQkJaWYgKHNsYXNoICYmIGdldF91MzIoJmRz Y3BzdGF0ZW1hc2ssIHNsYXNoICsgMSwgMCkpIHsNCj4+ICsJCQkJZnByaW50ZihzdGRlcnIsDQo+ PiArCQkJCQkiY3RpbmZvOiBJbGxlZ2FsIGRzY3AgXCJzdGF0ZW1hc2tcIlxuIik7DQo+PiArCQkJ CXJldHVybiAtMTsNCj4+ICsJCQl9DQo+PiArCQkJYXJnYy0tOw0KPj4gKwkJCWFyZ3YrKzsNCj4+ ICsJCX0NCj4+ICsJfQ0KPj4gKw0KPj4gKwkvKiBjcG1hcmsgaGFzIG9wdGlvbmFsIG1hc2sgcGFy YW1ldGVyLCBzbyB0aGUgbmV4dCBhcmcgbWlnaHQgbm90ICAqLw0KPj4gKwkvKiBleGlzdCwgb3Ig aXQgbWlnaHQgYmUgdGhlIG5leHQgb3B0aW9uLCBvciBpdCBtYXkgYWN0dWFsbHkgYmUgYSAqLw0K Pj4gKwkvKiAzMmJpdCBtYXNrICovDQo+PiArCWlmIChhcmdjKSB7DQo+PiArCQlpZiAobWF0Y2hl cygqYXJndiwgImNwbWFyayIpID09IDApIHsNCj4+ICsJCQlpZiAoTkVYVF9BUkdfT0soKSkgew0K Pj4gKwkJCQlORVhUX0FSR19GV0QoKTsNCj4+ICsJCQkJaWYgKCFnZXRfdTMyKCZjcG1hcmttYXNr LCAqYXJndiwgMCkpDQo+PiArCQkJCQlORVhUX0FSR19GV0QoKTsgLyogd2FzIGEgbWFzayAqLw0K Pj4gKwkJCQllbHNlIC8qIG5vdCBhIG1hc2ssIHVzZSBkZWZhdWx0ICovDQo+PiArCQkJCQljcG1h cmttYXNrID0gfjA7DQo+PiArCQkJfSBlbHNlIHsNCj4+ICsJCQkJTkVYVF9BUkdfRldEKCk7DQo+ PiArCQkJfQ0KPj4gKwkJfQ0KPj4gKwl9DQo+PiArDQo+PiArCWlmIChhcmdjKSB7DQo+PiArCQlp ZiAobWF0Y2hlcygqYXJndiwgInpvbmUiKSA9PSAwKSB7DQo+PiArCQkJTkVYVF9BUkcoKTsNCj4+ ICsJCQlpZiAoZ2V0X3UxNigmem9uZSwgKmFyZ3YsIDEwKSkgew0KPj4gKwkJCQlmcHJpbnRmKHN0 ZGVyciwgImN0aW5mbzogSWxsZWdhbCBcInpvbmVcIlxuIik7DQo+PiArCQkJCXJldHVybiAtMTsN Cj4+ICsJCQl9DQo+PiArCQkJYXJnYy0tOw0KPj4gKwkJCWFyZ3YrKzsNCj4+ICsJCX0NCj4+ICsJ fQ0KPj4gKw0KPj4gKwlwYXJzZV9hY3Rpb25fY29udHJvbF9kZmx0KCZhcmdjLCAmYXJndiwgJnNl bC5hY3Rpb24sDQo+PiArCQkJCSAgZmFsc2UsIFRDX0FDVF9QSVBFKTsNCj4+ICsNCj4+ICsJaWYg KGFyZ2MpIHsNCj4+ICsJCWlmIChtYXRjaGVzKCphcmd2LCAiaW5kZXgiKSA9PSAwKSB7DQo+PiAr CQkJTkVYVF9BUkcoKTsNCj4+ICsJCQlpZiAoZ2V0X3UzMigmc2VsLmluZGV4LCAqYXJndiwgMTAp KSB7DQo+PiArCQkJCWZwcmludGYoc3RkZXJyLCAiY3RpbmZvOiBJbGxlZ2FsIFwiaW5kZXhcIlxu Iik7DQo+PiArCQkJCXJldHVybiAtMTsNCj4+ICsJCQl9DQo+PiArCQkJYXJnYy0tOw0KPj4gKwkJ CWFyZ3YrKzsNCj4+ICsJCX0NCj4+ICsJfQ0KPj4gKw0KPj4gKwl0YWlsID0gYWRkYXR0cl9uZXN0 KG4sIE1BWF9NU0csIHRjYV9pZCk7DQo+PiArCWFkZGF0dHJfbChuLCBNQVhfTVNHLCBUQ0FfQ1RJ TkZPX0FDVCwgJnNlbCwgc2l6ZW9mKHNlbCkpOw0KPj4gKwlhZGRhdHRyMTYobiwgTUFYX01TRywg VENBX0NUSU5GT19aT05FLCB6b25lKTsNCj4+ICsNCj4+ICsJaWYgKGRzY3BtYXNrKQ0KPj4gKwkJ YWRkYXR0cjMyKG4sIE1BWF9NU0csDQo+PiArCQkJICBUQ0FfQ1RJTkZPX1BBUk1TX0RTQ1BfTUFT SywgZHNjcG1hc2spOw0KPj4gKw0KPj4gKwlpZiAoZHNjcHN0YXRlbWFzaykNCj4+ICsJCWFkZGF0 dHIzMihuLCBNQVhfTVNHLA0KPj4gKwkJCSAgVENBX0NUSU5GT19QQVJNU19EU0NQX1NUQVRFTUFT SywgZHNjcHN0YXRlbWFzayk7DQo+PiArDQo+PiArCWlmIChjcG1hcmttYXNrKQ0KPj4gKwkJYWRk YXR0cjMyKG4sIE1BWF9NU0csDQo+PiArCQkJICBUQ0FfQ1RJTkZPX1BBUk1TX0NQTUFSS19NQVNL LCBjcG1hcmttYXNrKTsNCj4+ICsNCj4+ICsJYWRkYXR0cl9uZXN0X2VuZChuLCB0YWlsKTsNCj4+ ICsNCj4+ICsJKmFyZ2NfcCA9IGFyZ2M7DQo+PiArCSphcmd2X3AgPSBhcmd2Ow0KPj4gKwlyZXR1 cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQgcHJpbnRfY3RpbmZvX3N0YXRzKEZJ TEUgKmYsIHN0cnVjdCBydGF0dHIgKnRiW1RDQV9DVElORk9fTUFYICsgMV0pDQo+PiArew0KPj4g KwlzdHJ1Y3QgdGNmX3QgKnRtOw0KPj4gKw0KPj4gKwlpZiAodGJbVENBX0NUSU5GT19UTV0pIHsN Cj4+ICsJCXRtID0gUlRBX0RBVEEodGJbVENBX0NUSU5GT19UTV0pOw0KPj4gKw0KPj4gKwkJcHJp bnRfdG0oZiwgdG0pOw0KPj4gKwl9DQo+PiArDQo+PiArCWlmICh0YltUQ0FfQ1RJTkZPX1NUQVRT X0RTQ1BfU0VUXSkNCj4+ICsJCXByaW50X2xsdWludChQUklOVF9BTlksICJkc2Nwc2V0IiwgIiBE U0NQIHNldCAlbGx1IiwNCj4+ICsJCQkgICAgIHJ0YV9nZXRhdHRyX3U2NCh0YltUQ0FfQ1RJTkZP X1NUQVRTX0RTQ1BfU0VUXSkpOw0KPj4gKwlpZiAodGJbVENBX0NUSU5GT19TVEFUU19EU0NQX0VS Uk9SXSkNCj4+ICsJCXByaW50X2xsdWludChQUklOVF9BTlksICJkc2NwZXJyb3IiLCAiIGVycm9y ICVsbHUiLA0KPj4gKwkJCSAgICAgcnRhX2dldGF0dHJfdTY0KHRiW1RDQV9DVElORk9fU1RBVFNf RFNDUF9FUlJPUl0pKTsNCj4+ICsNCj4+ICsJaWYgKHRiW1RDQV9DVElORk9fU1RBVFNfQ1BNQVJL X1NFVF0pDQo+PiArCQlwcmludF9sbHVpbnQoUFJJTlRfQU5ZLCAiY3BtYXJrc2V0IiwgIiBDUE1B Uksgc2V0ICVsbHUiLA0KPj4gKwkJCSAgICAgcnRhX2dldGF0dHJfdTY0KHRiW1RDQV9DVElORk9f U1RBVFNfQ1BNQVJLX1NFVF0pKTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBwcmludF9j dGluZm8oc3RydWN0IGFjdGlvbl91dGlsICphdSwgRklMRSAqZiwgc3RydWN0IHJ0YXR0ciAqYXJn KQ0KPj4gK3sNCj4+ICsJdW5zaWduZWQgaW50IGNwbWFya21hc2sgPSB+MCwgZHNjcG1hc2sgPSAw LCBkc2Nwc3RhdGVtYXNrID0gMDsNCj4+ICsJc3RydWN0IHJ0YXR0ciAqdGJbVENBX0NUSU5GT19N QVggKyAxXTsNCj4+ICsJdW5zaWduZWQgc2hvcnQgem9uZSA9IDA7DQo+PiArCXN0cnVjdCB0Y19j dGluZm8gKmNpOw0KPj4gKw0KPj4gKwlpZiAoYXJnID09IE5VTEwpDQo+PiArCQlyZXR1cm4gLTE7 DQo+PiArDQo+PiArCXBhcnNlX3J0YXR0cl9uZXN0ZWQodGIsIFRDQV9DVElORk9fTUFYLCBhcmcp Ow0KPj4gKwlpZiAoIXRiW1RDQV9DVElORk9fQUNUXSkgew0KPj4gKwkJcHJpbnRfc3RyaW5nKFBS SU5UX0ZQLCBOVUxMLCAiJXMiLA0KPj4gKwkJCSAgICAgIltOVUxMIGN0aW5mbyBhY3Rpb24gcGFy YW1ldGVyc10iKTsNCj4+ICsJCXJldHVybiAtMTsNCj4+ICsJfQ0KPj4gKw0KPj4gKwljaSA9IFJU QV9EQVRBKHRiW1RDQV9DVElORk9fQUNUXSk7DQo+PiArDQo+PiArCWlmICh0YltUQ0FfQ1RJTkZP X1BBUk1TX0RTQ1BfTUFTS10pIHsNCj4+ICsJCWlmIChSVEFfUEFZTE9BRCh0YltUQ0FfQ1RJTkZP X1BBUk1TX0RTQ1BfTUFTS10pID49DQo+PiArCQkgICAgc2l6ZW9mKF9fdTMyKSkNCj4+ICsJCQlk c2NwbWFzayA9IHJ0YV9nZXRhdHRyX3UzMigNCj4+ICsJCQkJCXRiW1RDQV9DVElORk9fUEFSTVNf RFNDUF9NQVNLXSk7DQo+PiArCQllbHNlDQo+PiArCQkJcHJpbnRfc3RyaW5nKFBSSU5UX0ZQLCBO VUxMLCAiJXMiLA0KPj4gKwkJCQkgICAgICJbaW52YWxpZCBkc2NwIG1hc2sgcGFyYW1ldGVyXSIp Ow0KPj4gKwl9DQo+PiArDQo+PiArCWlmICh0YltUQ0FfQ1RJTkZPX1BBUk1TX0RTQ1BfU1RBVEVN QVNLXSkgew0KPj4gKwkJaWYgKFJUQV9QQVlMT0FEKHRiW1RDQV9DVElORk9fUEFSTVNfRFNDUF9T VEFURU1BU0tdKSA+PQ0KPj4gKwkJICAgIHNpemVvZihfX3UzMikpDQo+PiArCQkJZHNjcHN0YXRl bWFzayA9IHJ0YV9nZXRhdHRyX3UzMigNCj4+ICsJCQkJCXRiW1RDQV9DVElORk9fUEFSTVNfRFND UF9TVEFURU1BU0tdKTsNCj4+ICsJCWVsc2UNCj4+ICsJCQlwcmludF9zdHJpbmcoUFJJTlRfRlAs IE5VTEwsICIlcyIsDQo+PiArCQkJCSAgICAgIltpbnZhbGlkIGRzY3Agc3RhdGVtYXNrIHBhcmFt ZXRlcl0iKTsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlpZiAodGJbVENBX0NUSU5GT19QQVJNU19DUE1B UktfTUFTS10pIHsNCj4+ICsJCWlmIChSVEFfUEFZTE9BRCh0YltUQ0FfQ1RJTkZPX1BBUk1TX0NQ TUFSS19NQVNLXSkgPj0NCj4+ICsJCSAgICBzaXplb2YoX191MzIpKQ0KPj4gKwkJCWNwbWFya21h c2sgPSBydGFfZ2V0YXR0cl91MzIoDQo+PiArCQkJCQl0YltUQ0FfQ1RJTkZPX1BBUk1TX0NQTUFS S19NQVNLXSk7DQo+PiArCQllbHNlDQo+PiArCQkJcHJpbnRfc3RyaW5nKFBSSU5UX0ZQLCBOVUxM LCAiJXMiLA0KPj4gKwkJCQkgICAgICJbaW52YWxpZCBjcG1hcmsgbWFzayBwYXJhbWV0ZXJdIik7 DQo+PiArCX0NCj4+ICsNCj4+ICsJaWYgKHRiW1RDQV9DVElORk9fWk9ORV0gJiYgUlRBX1BBWUxP QUQodGJbVENBX0NUSU5GT19aT05FXSkgPj0NCj4+ICsJICAgIHNpemVvZihfX3UxNikpDQo+PiAr CQl6b25lID0gcnRhX2dldGF0dHJfdTE2KHRiW1RDQV9DVElORk9fWk9ORV0pOw0KPj4gKw0KPj4g KwlwcmludF9zdHJpbmcoUFJJTlRfQU5ZLCAia2luZCIsICIlcyAiLCAiY3RpbmZvIik7DQo+PiAr CXByaW50X2h1KFBSSU5UX0FOWSwgInpvbmUiLCAiem9uZSAldSIsIHpvbmUpOw0KPj4gKwlwcmlu dF9hY3Rpb25fY29udHJvbChmLCAiICIsIGNpLT5hY3Rpb24sICIiKTsNCj4+ICsNCj4+ICsJcHJp bnRfc3RyaW5nKFBSSU5UX0ZQLCBOVUxMLCAiJXMiLCBfU0xfKTsNCj4+ICsJcHJpbnRfdWludChQ UklOVF9BTlksICJpbmRleCIsICJcdCBpbmRleCAldSIsIGNpLT5pbmRleCk7DQo+PiArCXByaW50 X2ludChQUklOVF9BTlksICJyZWYiLCAiIHJlZiAlZCIsIGNpLT5yZWZjbnQpOw0KPj4gKwlwcmlu dF9pbnQoUFJJTlRfQU5ZLCAiYmluZCIsICIgYmluZCAlZCIsIGNpLT5iaW5kY250KTsNCj4+ICsN Cj4+ICsJaWYgKHRiW1RDQV9DVElORk9fUEFSTVNfRFNDUF9NQVNLXSkgew0KPj4gKwkJcHJpbnRf MHhoZXgoUFJJTlRfQU5ZLCAiZHNjcG1hc2siLCAiIGRzY3AgJSMwMTBsbHgiLCBkc2NwbWFzayk7 DQo+PiArCQlwcmludF8weGhleChQUklOVF9BTlksICJkc2Nwc3RhdGVtYXNrIiwgIi8lIzAxMGxs eCIsDQo+PiArCQkJICAgIGRzY3BzdGF0ZW1hc2spOw0KPj4gKwl9DQo+PiArDQo+PiArCWlmICh0 YltUQ0FfQ1RJTkZPX1BBUk1TX0NQTUFSS19NQVNLXSkNCj4+ICsJCXByaW50XzB4aGV4KFBSSU5U X0FOWSwgIm1hcmsiLCAiIG1hcmsgJSMwMTBsbHgiLA0KPj4gY3BtYXJrbWFzayk7DQo+IA0KPiBT aG91bGQgYmUgJ2NwbWFyaycgbm90ICdtYXJrJywgbm8/DQoNClllcyBpdCBzaG91bGQuICBUaGUg b25lIHRoYXQgZ290IGF3YXkgLSBzcXVpc2hlZCA6LSkNCg0KVGhhbmtzIGZvciBsb29raW5nIHRo cm91Z2ggbXkgY29kZSwgY2Fu4oCZdCBiZSBhIHBsZWFzYW50IHRhc2ssIGFuZCBzcG90dGluZw0K bXkgYml0cyBvZiBjb2RlIGJsaW5kbmVzcy4NCg0KS2V2aW4NCg0KDQo=