From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=40.107.4.64; helo=eur03-db5-obe.outbound.protection.outlook.com; envelope-from=meenakshi.aggarwal@nxp.com; receiver=edk2-devel@lists.01.org Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-eopbgr40064.outbound.protection.outlook.com [40.107.4.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id CB5B92035BB19 for ; Mon, 13 Nov 2017 20:06:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=kXwORp5oSSnr1gZyfNOo2cPk41KOPfFP6hB2+fjDoNo=; b=KXV2JMwYIYhFrBDx5MeTfGKTEh6LLfnfA+jOL+mvQEG/UaCEmnx5aEpaPcLS5SeKfnrZJ9Q0hmjkmsSeTSaj+j+757y5WnMTPiz4Aq9l1UqVqhyoVzElUTeeLrLMjdijMROLcFV6E+a4Cpi+sRM9vUrQ+xOdglkNEyABrKEXp6E= Received: from DB5PR04MB0998.eurprd04.prod.outlook.com (10.161.199.12) by AM0PR0402MB3331.eurprd04.prod.outlook.com (52.133.44.152) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.20.218.12; Tue, 14 Nov 2017 04:10:15 +0000 Received: from DB5PR04MB0998.eurprd04.prod.outlook.com ([fe80::7964:3b7:763b:63ba]) by DB5PR04MB0998.eurprd04.prod.outlook.com ([fe80::7964:3b7:763b:63ba%13]) with mapi id 15.20.0197.017; Tue, 14 Nov 2017 04:10:14 +0000 From: Meenakshi Aggarwal To: Ard Biesheuvel CC: Leif Lindholm , "Kinney, Michael D" , "edk2-devel@lists.01.org" , Udit Kumar , Varun Sethi Thread-Topic: [PATCH 03/10] Platform/NXP: Add support for Big Endian Mmio APIs Thread-Index: AQHTV6YEIhE8o0BjcUmXCo9PbyGarKMSReaAgAD8HcA= Date: Tue, 14 Nov 2017 04:10:14 +0000 Message-ID: References: <1510065736-9394-1-git-send-email-meenakshi.aggarwal@nxp.com> <1510065736-9394-4-git-send-email-meenakshi.aggarwal@nxp.com> In-Reply-To: Accept-Language: en-GB, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=meenakshi.aggarwal@nxp.com; x-originating-ip: [192.88.169.1] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; AM0PR0402MB3331; 6:FE+iHiPEXqPO/beePuHWCkolNxhHiGlmShf55Rqll65LKnSj0agUdpUPAyRgTT1TkEJUJX7AK8tUabb5WUBEiFcR6Pmggu4hSELDaLcey8K3KalqeKp8InAmVwiOVottKHCN5a3wbQcRCgKLIEsJyO9j26FJaJZrGVsFn8lz2BEDfKC/ws5brdZNiSBW3ud9LqTUcgTw7UQbu3LR8KMxI4529MlDYk+1lMGul7Xyi2Mu8rWA6fiLHO/RKMBQrfdlTUNnL9ES+VDlsEmxMkOv97Du5OSRJdnWWESfT874iKL7XgPy8IKx9erfp+b5uTRzjG94im5ZVHkxI4N0dtiS0gQb2qRXe7ccR/O/4O3R7Zg=; 5:wGWPs7cMTiRtsCrNrU4Ov7LCYtyMp1Vrq/R+HztXg5qP7D0e3VH7PSn86eXIQG+3fpETVxDzhg7pFaq3Z11PuGISUaoTHvRuiSZfd+8/RLVcWc5NujCfkFQrOVwtiPBoYcMX250tU9sTGP3b7zBes63x4jmNVxTS/S7d/qDGEAo=; 24:RfmO9xEkaHde9TO6dj8gPWg0Vf/Hbhqz4fyilmYLX9lnl/7ZA55OrnesPDgS+K2c6djb23HCTiyInNfR1i4GMWwHWDlh5pgnad9j7OocV9s=; 7:OvazD5StEdGfxTHApGytgwG7TmWWGgpOlVfIxDy5uwhspgpJif+4v5zWUq2r1yJkQ4YgGaNruYmjb4s/XiNiYqfbDwOjEVN8tkOfQUl4dpKRe2ZMpQeB/m5t/PV1+hyShDUFWE/ivetErJhESVZn7IHCYyhXX3SwaEe0CmlXwKjyRjQOSUUOyQxtL8WU23m4GSgtGgEqj0/YxeMyYi0DEyWQgph+mPwoYF4evv9X+pFCaCKr4tdYgyFMDzwxNMHf x-ms-exchange-antispam-srfa-diagnostics: SSOS;SSOR; x-forefront-antispam-report: SFV:SKI; SCL:-1; SFV:NSPM; SFS:(10009020)(6009001)(376002)(39860400002)(346002)(13464003)(189002)(24454002)(199003)(14454004)(74316002)(3660700001)(4326008)(25786009)(6306002)(53936002)(101416001)(316002)(68736007)(305945005)(106356001)(99286004)(8676002)(9686003)(53946003)(105586002)(8936002)(3280700002)(7736002)(6246003)(81156014)(16799955002)(81166006)(54356999)(50986999)(76176999)(53546010)(189998001)(229853002)(97736004)(33656002)(6436002)(2950100002)(966005)(5250100002)(6506006)(86362001)(478600001)(54906003)(2906002)(55016002)(6916009)(6116002)(3846002)(7696004)(102836003)(66066001)(45080400002)(5660300001)(2900100001)(579004); DIR:OUT; SFP:1101; SCL:1; SRVR:AM0PR0402MB3331; H:DB5PR04MB0998.eurprd04.prod.outlook.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; x-ms-office365-filtering-correlation-id: 15cb59d5-ab0a-4be9-5918-08d52b159b78 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(48565401081)(2017052603258); SRVR:AM0PR0402MB3331; x-ms-traffictypediagnostic: AM0PR0402MB3331: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(189930954265078)(185117386973197)(162533806227266)(45079756050767)(228905959029699); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(5005006)(8121501046)(93006095)(93001095)(10201501046)(3002001)(3231022)(100000703101)(100105400095)(6055026)(6041248)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(20161123555025)(20161123562025)(20161123558100)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:AM0PR0402MB3331; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:AM0PR0402MB3331; x-forefront-prvs: 04916EA04C received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 15cb59d5-ab0a-4be9-5918-08d52b159b78 X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Nov 2017 04:10:14.3893 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR0402MB3331 Subject: Re: [PATCH 03/10] Platform/NXP: Add support for Big Endian Mmio APIs X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Nov 2017 04:06:17 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogQXJkIEJpZXNoZXV2ZWwg W21haWx0bzphcmQuYmllc2hldXZlbEBsaW5hcm8ub3JnXQ0KPiBTZW50OiBNb25kYXksIE5vdmVt YmVyIDEzLCAyMDE3IDU6NTYgUE0NCj4gVG86IE1lZW5ha3NoaSBBZ2dhcndhbCA8bWVlbmFrc2hp LmFnZ2Fyd2FsQG54cC5jb20+DQo+IENjOiBMZWlmIExpbmRob2xtIDxsZWlmLmxpbmRob2xtQGxp bmFyby5vcmc+OyBLaW5uZXksIE1pY2hhZWwgRA0KPiA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5j b20+OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzsgVWRpdCBLdW1hcg0KPiA8dWRpdC5rdW1hckBu eHAuY29tPjsgVmFydW4gU2V0aGkgPFYuU2V0aGlAbnhwLmNvbT4NCj4gU3ViamVjdDogUmU6IFtQ QVRDSCAwMy8xMF0gUGxhdGZvcm0vTlhQOiBBZGQgc3VwcG9ydCBmb3IgQmlnIEVuZGlhbiBNbWlv DQo+IEFQSXMNCj4gDQo+IE9uIDcgTm92ZW1iZXIgMjAxNyBhdCAxNDo0MiwgTWVlbmFrc2hpIEFn Z2Fyd2FsDQo+IDxtZWVuYWtzaGkuYWdnYXJ3YWxAbnhwLmNvbT4gd3JvdGU6DQo+ID4gVGhpcyBs aWJyYXJ5IGFkZCBzdXBwb3J0cyBmb3IgQkUgcmVhZC93cml0ZSBhbmQgb3RoZXIgTU1JTyBoZWxw ZXINCj4gPiBmdW5jdGlvbi4NCj4gPiBJbiB0aGlzIGRhdGEgc3dhcHBlZCBhZnRlciByZWFkaW5n IGZyb20gTU1JTyBhbmQgYmVmb3JlIHdyaXRlIHVzaW5nDQo+ID4gTU1JTy4NCj4gPiBJdCBjYW4g YmUgdXNlZCBieSBhbnkgbW9kdWxlIHdpdGggQkUgYWRkcmVzcyBzcGFjZS4NCj4gPg0KPiA+IENv bnRyaWJ1dGVkLXVuZGVyOiBUaWFub0NvcmUgQ29udHJpYnV0aW9uIEFncmVlbWVudCAxLjENCj4g PiBTaWduZWQtb2ZmLWJ5OiBNZWVuYWtzaGkgQWdnYXJ3YWwgPG1lZW5ha3NoaS5hZ2dhcndhbEBu eHAuY29tPg0KPiA+IC0tLQ0KPiA+ICBQbGF0Zm9ybS9OWFAvSW5jbHVkZS9MaWJyYXJ5L0JlSW9M aWIuaCAgIHwgMzMyDQo+ICsrKysrKysrKysrKysrKysrKysrKysrKysNCj4gPiAgUGxhdGZvcm0v TlhQL0xpYnJhcnkvQmVJb0xpYi9CZUlvTGliLmMgICB8IDQwMA0KPiArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrDQo+ID4gIFBsYXRmb3JtL05YUC9MaWJyYXJ5L0JlSW9MaWIvQmVJb0xp Yi5pbmYgfCAgMzEgKysrDQo+ID4gIDMgZmlsZXMgY2hhbmdlZCwgNzYzIGluc2VydGlvbnMoKykN Cj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IFBsYXRmb3JtL05YUC9JbmNsdWRlL0xpYnJhcnkvQmVJ b0xpYi5oDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBQbGF0Zm9ybS9OWFAvTGlicmFyeS9CZUlv TGliL0JlSW9MaWIuYw0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgUGxhdGZvcm0vTlhQL0xpYnJh cnkvQmVJb0xpYi9CZUlvTGliLmluZg0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL1BsYXRmb3JtL05Y UC9JbmNsdWRlL0xpYnJhcnkvQmVJb0xpYi5oDQo+ID4gYi9QbGF0Zm9ybS9OWFAvSW5jbHVkZS9M aWJyYXJ5L0JlSW9MaWIuaA0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAw MDAwMC4uMjA5MjYyZA0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9QbGF0Zm9ybS9OWFAv SW5jbHVkZS9MaWJyYXJ5L0JlSW9MaWIuaA0KPiA+IEBAIC0wLDAgKzEsMzMyIEBADQo+ID4gKy8q KiBCZUlvTGliLmgNCj4gPiArICoNCj4gPiArICogIENvcHlyaWdodCAyMDE3IE5YUA0KPiA+ICsg Kg0KPiA+ICsgKiAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0K PiA+ICsgKiAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMg YW5kIGNvbmRpdGlvbnMgb2YNCj4gPiArdGhlIEJTRCBMaWNlbnNlDQo+ID4gKyAqICB3aGljaCBh Y2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlDQo+ID4g K2xpY2Vuc2UgbWF5IGJlIGZvdW5kIGF0DQo+ID4gKyAqDQo+ID4NCj4gK2h0dHBzOi8vZW1lYTAx LnNhZmVsaW5rcy5wcm90ZWN0aW9uLm91dGxvb2suY29tLz91cmw9aHR0cCUzQSUyRiUyRm9wDQo+ IGUNCj4gPiArbnNvdXJjZS5vcmclMkZsaWNlbnNlcyUyRmJzZC0NCj4gbGljZW5zZS5waHAmZGF0 YT0wMiU3QzAxJTdDbWVlbmFrc2hpLmFnZw0KPiA+DQo+ICthcndhbCU0MG54cC5jb20lN0NkMjMz YmQ5NmVhNmM0YzE2NDE2YTA4ZDUyYTkxYmRjYSU3QzY4NmVhMWQzYg0KPiBjMmI0YzZmDQo+ID4N Cj4gK2E5MmNkOTljNWMzMDE2MzUlN0MwJTdDMCU3QzYzNjQ2MTcyNzgwMjAwNDQ4NCZzZGF0YT1r TCUyRk9NZW4NCj4gNjFqZVFsUEcNCj4gPiArM1lLMndBMm9XZ0hGcnlrVk14TFFjUk5BNjNLcyUz RCZyZXNlcnZlZD0wDQo+ID4gKyAqDQo+ID4gKyAqICBIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVE IFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+ID4gK0JBU0lTLA0KPiANCj4g TWlzc2luZyBUIF5eXg0KPiANClRoYW5rcyBmb3IgY2F0Y2hpbmcgdGhpcy4NCg0KPiA+ICsgKiAg V0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVS DQo+IEVYUFJFU1MgT1IgSU1QTElFRC4NCj4gPiArICoNCj4gPiArICoqLw0KPiA+ICsNCj4gPiAr I2lmbmRlZiBfX0JFX0lPTElCX0hfXw0KPiA+ICsjZGVmaW5lIF9fQkVfSU9MSUJfSF9fDQo+ID4g Kw0KPiA+ICsjaW5jbHVkZSA8QmFzZS5oPg0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgTW1pb1Jl YWQ4IGZvciBCaWctRW5kaWFuIG1vZHVsZXMuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSAgQWRkcmVz cyBUaGUgTU1JTyByZWdpc3RlciB0byByZWFkLg0KPiA+ICsNCj4gPiArICBAcmV0dXJuIFRoZSB2 YWx1ZSByZWFkLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1VJTlQ4DQo+ID4gK0VGSUFQSQ0KPiA+ ICtCZU1taW9SZWFkOCAoDQo+ID4gKyAgSU4gIFVJTlROICAgICBBZGRyZXNzDQo+ID4gKyAgKTsN Cj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIE1taW9SZWFkMTYgZm9yIEJpZy1FbmRpYW4gbW9kdWxl cy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtICBBZGRyZXNzIFRoZSBNTUlPIHJlZ2lzdGVyIHRvIHJl YWQuDQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gVGhlIHZhbHVlIHJlYWQuDQo+ID4gKw0KPiA+ICsq Ki8NCj4gPiArVUlOVDE2DQo+ID4gK0VGSUFQSQ0KPiA+ICtCZU1taW9SZWFkMTYgKA0KPiA+ICsg IElOICBVSU5UTiAgICAgQWRkcmVzcw0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiAr ICBNbWlvUmVhZDMyIGZvciBCaWctRW5kaWFuIG1vZHVsZXMuDQo+ID4gKw0KPiA+ICsgIEBwYXJh bSAgQWRkcmVzcyBUaGUgTU1JTyByZWdpc3RlciB0byByZWFkLg0KPiA+ICsNCj4gPiArICBAcmV0 dXJuIFRoZSB2YWx1ZSByZWFkLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1VJTlQzMg0KPiA+ICtF RklBUEkNCj4gPiArQmVNbWlvUmVhZDMyICgNCj4gPiArICBJTiAgVUlOVE4gICAgIEFkZHJlc3MN Cj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgTW1pb1JlYWQ2NCBmb3IgQmlnLUVu ZGlhbiBtb2R1bGVzLg0KPiA+ICsNCj4gPiArICBAcGFyYW0gIEFkZHJlc3MgVGhlIE1NSU8gcmVn aXN0ZXIgdG8gcmVhZC4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBUaGUgdmFsdWUgcmVhZC4NCj4g PiArDQo+ID4gKyoqLw0KPiA+ICtVSU5UNjQNCj4gPiArRUZJQVBJDQo+ID4gK0JlTW1pb1JlYWQ2 NCAoDQo+ID4gKyAgSU4gIFVJTlROICAgICBBZGRyZXNzDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4g Ky8qKg0KPiA+ICsgIE1taW9Xcml0ZTggZm9yIEJpZy1FbmRpYW4gbW9kdWxlcy4NCj4gPiArDQo+ ID4gKyAgQHBhcmFtICBBZGRyZXNzIFRoZSBNTUlPIHJlZ2lzdGVyIHRvIHdyaXRlLg0KPiA+ICsg IEBwYXJhbSAgVmFsdWUgICBUaGUgdmFsdWUgdG8gd3JpdGUgdG8gdGhlIE1NSU8gcmVnaXN0ZXIu DQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArVUlOVDgNCj4gPiArRUZJQVBJDQo+ID4gK0JlTW1pb1dy aXRlOCAoDQo+ID4gKyAgSU4gIFVJTlROICAgICBBZGRyZXNzLA0KPiA+ICsgIElOICBVSU5UOCAg ICAgVmFsdWUNCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgTW1pb1dyaXRlMTYg Zm9yIEJpZy1FbmRpYW4gbW9kdWxlcy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtICBBZGRyZXNzIFRo ZSBNTUlPIHJlZ2lzdGVyIHRvIHdyaXRlLg0KPiA+ICsgIEBwYXJhbSAgVmFsdWUgICBUaGUgdmFs dWUgdG8gd3JpdGUgdG8gdGhlIE1NSU8gcmVnaXN0ZXIuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiAr VUlOVDE2DQo+ID4gK0VGSUFQSQ0KPiA+ICtCZU1taW9Xcml0ZTE2ICgNCj4gPiArICBJTiAgVUlO VE4gICAgIEFkZHJlc3MsDQo+ID4gKyAgSU4gIFVJTlQxNiAgICBWYWx1ZQ0KPiA+ICsgICk7DQo+ ID4gKw0KPiA+ICsvKioNCj4gPiArICBNbWlvV3JpdGUzMiBmb3IgQmlnLUVuZGlhbiBtb2R1bGVz Lg0KPiA+ICsNCj4gPiArICBAcGFyYW0gIEFkZHJlc3MgVGhlIE1NSU8gcmVnaXN0ZXIgdG8gd3Jp dGUuDQo+ID4gKyAgQHBhcmFtICBWYWx1ZSAgIFRoZSB2YWx1ZSB0byB3cml0ZSB0byB0aGUgTU1J TyByZWdpc3Rlci4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtVSU5UMzINCj4gPiArRUZJQVBJDQo+ ID4gK0JlTW1pb1dyaXRlMzIgKA0KPiA+ICsgIElOICBVSU5UTiAgICAgQWRkcmVzcywNCj4gPiAr ICBJTiAgVUlOVDMyICAgIFZhbHVlDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsg IE1taW9Xcml0ZTY0IGZvciBCaWctRW5kaWFuIG1vZHVsZXMuDQo+ID4gKw0KPiA+ICsgIEBwYXJh bSAgQWRkcmVzcyBUaGUgTU1JTyByZWdpc3RlciB0byB3cml0ZS4NCj4gPiArICBAcGFyYW0gIFZh bHVlICAgVGhlIHZhbHVlIHRvIHdyaXRlIHRvIHRoZSBNTUlPIHJlZ2lzdGVyLg0KPiA+ICsNCj4g PiArKiovDQo+ID4gK1VJTlQ2NA0KPiA+ICtFRklBUEkNCj4gPiArQmVNbWlvV3JpdGU2NCAoDQo+ ID4gKyAgSU4gIFVJTlROICAgICBBZGRyZXNzLA0KPiA+ICsgIElOICBVSU5UNjQgICAgVmFsdWUN Cj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgTW1pb0FuZFRoZW5PcjggZm9yIEJp Zy1FbmRpYW4gbW9kdWxlcy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtICBBZGRyZXNzIFRoZSBNTUlP IHJlZ2lzdGVyIHRvIHdyaXRlLg0KPiA+ICsgIEBwYXJhbSAgQW5kRGF0YSBUaGUgdmFsdWUgdG8g QU5EIHdpdGggdGhlIHJlYWQgdmFsdWUgZnJvbSB0aGUgTU1JTw0KPiByZWdpc3Rlci4NCj4gPiAr ICBAcGFyYW0gIE9yRGF0YSAgVGhlIHZhbHVlIHRvIE9SIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUg QU5EIG9wZXJhdGlvbi4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBUaGUgdmFsdWUgd3JpdHRlbiBi YWNrIHRvIHRoZSBNTUlPIHJlZ2lzdGVyLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1VJTlQ4DQo+ ID4gK0VGSUFQSQ0KPiA+ICtCZU1taW9BbmRUaGVuT3I4ICgNCj4gPiArICBJTiAgVUlOVE4gICAg IEFkZHJlc3MsDQo+ID4gKyAgSU4gIFVJTlQ4ICAgICBBbmREYXRhLA0KPiA+ICsgIElOICBVSU5U OCAgICAgT3JEYXRhDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIE1taW9BbmRU aGVuT3IxNiBmb3IgQmlnLUVuZGlhbiBtb2R1bGVzLg0KPiA+ICsNCj4gPiArICBAcGFyYW0gIEFk ZHJlc3MgVGhlIE1NSU8gcmVnaXN0ZXIgdG8gd3JpdGUuDQo+ID4gKyAgQHBhcmFtICBBbmREYXRh IFRoZSB2YWx1ZSB0byBBTkQgd2l0aCB0aGUgcmVhZCB2YWx1ZSBmcm9tIHRoZSBNTUlPDQo+IHJl Z2lzdGVyLg0KPiA+ICsgIEBwYXJhbSAgT3JEYXRhICBUaGUgdmFsdWUgdG8gT1Igd2l0aCB0aGUg cmVzdWx0IG9mIHRoZSBBTkQgb3BlcmF0aW9uLg0KPiA+ICsNCj4gPiArICBAcmV0dXJuIFRoZSB2 YWx1ZSB3cml0dGVuIGJhY2sgdG8gdGhlIE1NSU8gcmVnaXN0ZXIuDQo+ID4gKw0KPiA+ICsqKi8N Cj4gPiArVUlOVDE2DQo+ID4gK0VGSUFQSQ0KPiA+ICtCZU1taW9BbmRUaGVuT3IxNiAoDQo+ID4g KyAgSU4gIFVJTlROICAgICBBZGRyZXNzLA0KPiA+ICsgIElOICBVSU5UMTYgICAgQW5kRGF0YSwN Cj4gPiArICBJTiAgVUlOVDE2ICAgIE9yRGF0YQ0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioN Cj4gPiArICBNbWlvQW5kVGhlbk9yMzIgZm9yIEJpZy1FbmRpYW4gbW9kdWxlcy4NCj4gPiArDQo+ ID4gKyAgQHBhcmFtICBBZGRyZXNzIFRoZSBNTUlPIHJlZ2lzdGVyIHRvIHdyaXRlLg0KPiA+ICsg IEBwYXJhbSAgQW5kRGF0YSBUaGUgdmFsdWUgdG8gQU5EIHdpdGggdGhlIHJlYWQgdmFsdWUgZnJv bSB0aGUgTU1JTw0KPiByZWdpc3Rlci4NCj4gPiArICBAcGFyYW0gIE9yRGF0YSAgVGhlIHZhbHVl IHRvIE9SIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgQU5EIG9wZXJhdGlvbi4NCj4gPiArDQo+ID4g KyAgQHJldHVybiBUaGUgdmFsdWUgd3JpdHRlbiBiYWNrIHRvIHRoZSBNTUlPIHJlZ2lzdGVyLg0K PiA+ICsNCj4gPiArKiovDQo+ID4gK1VJTlQzMg0KPiA+ICtFRklBUEkNCj4gPiArQmVNbWlvQW5k VGhlbk9yMzIgKA0KPiA+ICsgIElOICBVSU5UTiAgICAgQWRkcmVzcywNCj4gPiArICBJTiAgVUlO VDMyICAgIEFuZERhdGEsDQo+ID4gKyAgSU4gIFVJTlQzMiAgICBPckRhdGENCj4gPiArICApOw0K PiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgTW1pb0FuZFRoZW5PcjY0IGZvciBCaWctRW5kaWFuIG1v ZHVsZXMuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSAgQWRkcmVzcyBUaGUgTU1JTyByZWdpc3RlciB0 byB3cml0ZS4NCj4gPiArICBAcGFyYW0gIEFuZERhdGEgVGhlIHZhbHVlIHRvIEFORCB3aXRoIHRo ZSByZWFkIHZhbHVlIGZyb20gdGhlIE1NSU8NCj4gcmVnaXN0ZXIuDQo+ID4gKyAgQHBhcmFtICBP ckRhdGEgIFRoZSB2YWx1ZSB0byBPUiB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIEFORCBvcGVyYXRp b24uDQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gVGhlIHZhbHVlIHdyaXR0ZW4gYmFjayB0byB0aGUg TU1JTyByZWdpc3Rlci4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtVSU5UNjQNCj4gPiArRUZJQVBJ DQo+ID4gK0JlTW1pb0FuZFRoZW5PcjY0ICgNCj4gPiArICBJTiAgVUlOVE4gICAgIEFkZHJlc3Ms DQo+ID4gKyAgSU4gIFVJTlQ2NCAgICBBbmREYXRhLA0KPiA+ICsgIElOICBVSU5UNjQgICAgT3JE YXRhDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIE1taW9PcjggZm9yIEJpZy1F bmRpYW4gbW9kdWxlcy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtICBBZGRyZXNzIFRoZSBNTUlPIHJl Z2lzdGVyIHRvIHdyaXRlLg0KPiA+ICsgIEBwYXJhbSAgT3JEYXRhICBUaGUgdmFsdWUgdG8gT1Ig d2l0aCB0aGUgcmVhZCB2YWx1ZSBmcm9tIHRoZSBNTUlPDQo+IHJlZ2lzdGVyLg0KPiA+ICsNCj4g PiArICBAcmV0dXJuIFRoZSB2YWx1ZSB3cml0dGVuIGJhY2sgdG8gdGhlIE1NSU8gcmVnaXN0ZXIu DQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArVUlOVDgNCj4gPiArRUZJQVBJDQo+ID4gK0JlTW1pb09y OCAoDQo+ID4gKyAgSU4gIFVJTlROICAgICBBZGRyZXNzLA0KPiA+ICsgIElOICBVSU5UOCAgICAg T3JEYXRhDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIE1taW9PcjE2IGZvciBC aWctRW5kaWFuIG1vZHVsZXMuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSAgQWRkcmVzcyBUaGUgTU1J TyByZWdpc3RlciB0byB3cml0ZS4NCj4gPiArICBAcGFyYW0gIE9yRGF0YSAgVGhlIHZhbHVlIHRv IE9SIHdpdGggdGhlIHJlYWQgdmFsdWUgZnJvbSB0aGUgTU1JTw0KPiByZWdpc3Rlci4NCj4gPiAr DQo+ID4gKyAgQHJldHVybiBUaGUgdmFsdWUgd3JpdHRlbiBiYWNrIHRvIHRoZSBNTUlPIHJlZ2lz dGVyLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1VJTlQxNg0KPiA+ICtFRklBUEkNCj4gPiArQmVN bWlvT3IxNiAoDQo+ID4gKyAgSU4gIFVJTlROICAgICBBZGRyZXNzLA0KPiA+ICsgIElOICBVSU5U MTYgICAgT3JEYXRhDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIE1taW9PcjMy IGZvciBCaWctRW5kaWFuIG1vZHVsZXMuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSAgQWRkcmVzcyBU aGUgTU1JTyByZWdpc3RlciB0byB3cml0ZS4NCj4gPiArICBAcGFyYW0gIE9yRGF0YSAgVGhlIHZh bHVlIHRvIE9SIHdpdGggdGhlIHJlYWQgdmFsdWUgZnJvbSB0aGUgTU1JTw0KPiByZWdpc3Rlci4N Cj4gPiArDQo+ID4gKyAgQHJldHVybiBUaGUgdmFsdWUgd3JpdHRlbiBiYWNrIHRvIHRoZSBNTUlP IHJlZ2lzdGVyLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1VJTlQzMg0KPiA+ICtFRklBUEkNCj4g PiArQmVNbWlvT3IzMiAoDQo+ID4gKyAgSU4gIFVJTlROICAgICBBZGRyZXNzLA0KPiA+ICsgIElO ICBVSU5UMzIgICAgT3JEYXRhDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIE1t aW9PcjY0IGZvciBCaWctRW5kaWFuIG1vZHVsZXMuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSAgQWRk cmVzcyBUaGUgTU1JTyByZWdpc3RlciB0byB3cml0ZS4NCj4gPiArICBAcGFyYW0gIE9yRGF0YSAg VGhlIHZhbHVlIHRvIE9SIHdpdGggdGhlIHJlYWQgdmFsdWUgZnJvbSB0aGUgTU1JTw0KPiByZWdp c3Rlci4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBUaGUgdmFsdWUgd3JpdHRlbiBiYWNrIHRvIHRo ZSBNTUlPIHJlZ2lzdGVyLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1VJTlQ2NA0KPiA+ICtFRklB UEkNCj4gPiArQmVNbWlvT3I2NCAoDQo+ID4gKyAgSU4gIFVJTlROICAgICBBZGRyZXNzLA0KPiA+ ICsgIElOICBVSU5UNjQgICAgT3JEYXRhDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgIE1taW9BbmQ4IGZvciBCaWctRW5kaWFuIG1vZHVsZXMuDQo+ID4gKw0KPiA+ICsgIEBwYXJh bSAgQWRkcmVzcyBUaGUgTU1JTyByZWdpc3RlciB0byB3cml0ZS4NCj4gPiArICBAcGFyYW0gIEFu ZERhdGEgVGhlIHZhbHVlIHRvIEFORCB3aXRoIHRoZSByZWFkIHZhbHVlIGZyb20gdGhlIE1NSU8N Cj4gcmVnaXN0ZXIuDQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gVGhlIHZhbHVlIHdyaXR0ZW4gYmFj ayB0byB0aGUgTU1JTyByZWdpc3Rlci4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtVSU5UOA0KPiA+ ICtFRklBUEkNCj4gPiArQmVNbWlvQW5kOCAoDQo+ID4gKyAgSU4gIFVJTlROICAgICBBZGRyZXNz LA0KPiA+ICsgIElOICBVSU5UOCAgICAgQW5kRGF0YQ0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsv KioNCj4gPiArICBNbWlvQW5kMTYgZm9yIEJpZy1FbmRpYW4gbW9kdWxlcy4NCj4gPiArDQo+ID4g KyAgQHBhcmFtICBBZGRyZXNzIFRoZSBNTUlPIHJlZ2lzdGVyIHRvIHdyaXRlLg0KPiA+ICsgIEBw YXJhbSAgQW5kRGF0YSBUaGUgdmFsdWUgdG8gQU5EIHdpdGggdGhlIHJlYWQgdmFsdWUgZnJvbSB0 aGUgTU1JTw0KPiByZWdpc3Rlci4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBUaGUgdmFsdWUgd3Jp dHRlbiBiYWNrIHRvIHRoZSBNTUlPIHJlZ2lzdGVyLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1VJ TlQxNg0KPiA+ICtFRklBUEkNCj4gPiArQmVNbWlvQW5kMTYgKA0KPiA+ICsgIElOICBVSU5UTiAg ICAgQWRkcmVzcywNCj4gPiArICBJTiAgVUlOVDE2ICAgIEFuZERhdGENCj4gPiArICApOw0KPiA+ ICsNCj4gPiArLyoqDQo+ID4gKyAgTW1pb0FuZDMyIGZvciBCaWctRW5kaWFuIG1vZHVsZXMuDQo+ ID4gKw0KPiA+ICsgIEBwYXJhbSAgQWRkcmVzcyBUaGUgTU1JTyByZWdpc3RlciB0byB3cml0ZS4N Cj4gPiArICBAcGFyYW0gIEFuZERhdGEgVGhlIHZhbHVlIHRvIEFORCB3aXRoIHRoZSByZWFkIHZh bHVlIGZyb20gdGhlIE1NSU8NCj4gcmVnaXN0ZXIuDQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gVGhl IHZhbHVlIHdyaXR0ZW4gYmFjayB0byB0aGUgTU1JTyByZWdpc3Rlci4NCj4gPiArDQo+ID4gKyoq Lw0KPiA+ICtVSU5UMzINCj4gPiArRUZJQVBJDQo+ID4gK0JlTW1pb0FuZDMyICgNCj4gPiArICBJ TiAgVUlOVE4gICAgIEFkZHJlc3MsDQo+ID4gKyAgSU4gIFVJTlQzMiAgICBBbmREYXRhDQo+ID4g KyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIE1taW9BbmQ2NCBmb3IgQmlnLUVuZGlhbiBt b2R1bGVzLg0KPiA+ICsNCj4gPiArICBAcGFyYW0gIEFkZHJlc3MgVGhlIE1NSU8gcmVnaXN0ZXIg dG8gd3JpdGUuDQo+ID4gKyAgQHBhcmFtICBBbmREYXRhIFRoZSB2YWx1ZSB0byBBTkQgd2l0aCB0 aGUgcmVhZCB2YWx1ZSBmcm9tIHRoZSBNTUlPDQo+IHJlZ2lzdGVyLg0KPiA+ICsNCj4gPiArICBA cmV0dXJuIFRoZSB2YWx1ZSB3cml0dGVuIGJhY2sgdG8gdGhlIE1NSU8gcmVnaXN0ZXIuDQo+ID4g Kw0KPiA+ICsqKi8NCj4gPiArVUlOVDY0DQo+ID4gK0VGSUFQSQ0KPiA+ICtCZU1taW9BbmQ2NCAo DQo+ID4gKyAgSU4gIFVJTlROICAgICBBZGRyZXNzLA0KPiA+ICsgIElOICBVSU5UNjQgICAgQW5k RGF0YQ0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsjZW5kaWYgLyogX0JFX0lPTElCX0ggKi8NCj4g PiBkaWZmIC0tZ2l0IGEvUGxhdGZvcm0vTlhQL0xpYnJhcnkvQmVJb0xpYi9CZUlvTGliLmMNCj4g PiBiL1BsYXRmb3JtL05YUC9MaWJyYXJ5L0JlSW9MaWIvQmVJb0xpYi5jDQo+ID4gbmV3IGZpbGUg bW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwLi5iNGU3YzkwDQo+ID4gLS0tIC9kZXYvbnVs bA0KPiA+ICsrKyBiL1BsYXRmb3JtL05YUC9MaWJyYXJ5L0JlSW9MaWIvQmVJb0xpYi5jDQo+ID4g QEAgLTAsMCArMSw0MDAgQEANCj4gPiArLyoqIEJlSW9MaWIuYw0KPiA+ICsNCj4gPiArICBQcm92 aWRlIE1NSU8gQVBJcyBmb3IgQkUgbW9kdWxlcy4NCj4gPiArDQo+ID4gKyAgQ29weXJpZ2h0IDIw MTcgTlhQDQo+ID4gKw0KPiA+ICsgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBt YXRlcmlhbHMgIGFyZSBsaWNlbnNlZCBhbmQgbWFkZQ0KPiA+ICsgYXZhaWxhYmxlIHVuZGVyIHRo ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEIExpY2Vuc2UgIHdoaWNoDQo+ID4gKyBh Y2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vu c2UgbWF5IGJlDQo+ID4gKyBmb3VuZCBhdA0KPiA+ICsNCj4gPiArDQo+IGh0dHBzOi8vZW1lYTAx LnNhZmVsaW5rcy5wcm90ZWN0aW9uLm91dGxvb2suY29tLz91cmw9aHR0cCUzQSUyRiUyRm9wDQo+ ID4gKyBlbnNvdXJjZS5vcmclMkZsaWNlbnNlcyUyRmJzZC0NCj4gbGljZW5zZS5waHAmZGF0YT0w MiU3QzAxJTdDbWVlbmFrc2hpLmENCj4gPiArDQo+IGdnYXJ3YWwlNDBueHAuY29tJTdDZDIzM2Jk OTZlYTZjNGMxNjQxNmEwOGQ1MmE5MWJkY2ElN0M2ODZlYTFkMw0KPiBiYzJiNA0KPiA+ICsNCj4g YzZmYTkyY2Q5OWM1YzMwMTYzNSU3QzAlN0MwJTdDNjM2NDYxNzI3ODAyMDA0NDg0JnNkYXRhPWtM JTJGT01lDQo+IG42MWplDQo+ID4gKyBRbFBHM1lLMndBMm9XZ0hGcnlrVk14TFFjUk5BNjNLcyUz RCZyZXNlcnZlZD0wDQo+ID4gKw0KPiA+ICsgIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVO REVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+ID4gKyBCQVNJUywgIFdJVEhPVVQg V0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsDQo+IEVJVEhFUiBFWFBS RVNTIE9SIElNUExJRUQuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxC YXNlLmg+DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VMaWIuaD4NCj4gPiArI2luY2x1ZGUg PExpYnJhcnkvSW9MaWIuaD4NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIE1taW9SZWFkOCBmb3Ig QmlnLUVuZGlhbiBtb2R1bGVzLg0KPiA+ICsNCj4gPiArICBAcGFyYW0gIEFkZHJlc3MgVGhlIE1N SU8gcmVnaXN0ZXIgdG8gcmVhZC4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBUaGUgdmFsdWUgcmVh ZC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtVSU5UOA0KPiA+ICtFRklBUEkNCj4gPiArQmVNbWlv UmVhZDggKA0KPiA+ICsgIElOICBVSU5UTiAgICAgQWRkcmVzcw0KPiA+ICsgICkNCj4gPiArew0K PiA+ICsgIHJldHVybiBNbWlvUmVhZDgoQWRkcmVzcyk7DQo+IA0KPiBQbGVhc2UgcHV0IGEgc3Bh Y2UgYmVmb3JlICgNCj4gDQpPSw0KDQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIE1t aW9SZWFkMTYgZm9yIEJpZy1FbmRpYW4gbW9kdWxlcy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtICBB ZGRyZXNzIFRoZSBNTUlPIHJlZ2lzdGVyIHRvIHJlYWQuDQo+ID4gKw0KPiA+ICsgIEByZXR1cm4g VGhlIHZhbHVlIHJlYWQuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArVUlOVDE2DQo+ID4gK0VGSUFQ SQ0KPiA+ICtCZU1taW9SZWFkMTYgKA0KPiA+ICsgIElOICBVSU5UTiAgICAgQWRkcmVzcw0KPiA+ ICsgICkNCj4gPiArew0KPiA+ICsgIHJldHVybiBTd2FwQnl0ZXMxNihNbWlvUmVhZDE2KEFkZHJl c3MpKTsNCj4gDQo+IGFuZCBoZXJlICgyeCkNCj4gDQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0K PiA+ICsgIE1taW9SZWFkMzIgZm9yIEJpZy1FbmRpYW4gbW9kdWxlcy4NCj4gPiArDQo+ID4gKyAg QHBhcmFtICBBZGRyZXNzIFRoZSBNTUlPIHJlZ2lzdGVyIHRvIHJlYWQuDQo+ID4gKw0KPiA+ICsg IEByZXR1cm4gVGhlIHZhbHVlIHJlYWQuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArVUlOVDMyDQo+ ID4gK0VGSUFQSQ0KPiA+ICtCZU1taW9SZWFkMzIgKA0KPiA+ICsgIElOICBVSU5UTiAgICAgQWRk cmVzcw0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIHJldHVybiBTd2FwQnl0ZXMzMihNbWlvUmVh ZDMyKEFkZHJlc3MpKTsNCj4gDQo+IGV0YyBldGMNCj4gDQo+ID4gK30NCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgIE1taW9SZWFkNjQgZm9yIEJpZy1FbmRpYW4gbW9kdWxlcy4NCj4gPiArDQo+ID4g KyAgQHBhcmFtICBBZGRyZXNzIFRoZSBNTUlPIHJlZ2lzdGVyIHRvIHJlYWQuDQo+ID4gKw0KPiA+ ICsgIEByZXR1cm4gVGhlIHZhbHVlIHJlYWQuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArVUlOVDY0 DQo+ID4gK0VGSUFQSQ0KPiA+ICtCZU1taW9SZWFkNjQgKA0KPiA+ICsgIElOICBVSU5UTiAgICAg QWRkcmVzcw0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIHJldHVybiBTd2FwQnl0ZXM2NChNbWlv UmVhZDY0KEFkZHJlc3MpKTsgfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgTW1pb1dyaXRlOCBm b3IgQmlnLUVuZGlhbiBtb2R1bGVzLg0KPiA+ICsNCj4gPiArICBAcGFyYW0gIEFkZHJlc3MgVGhl IE1NSU8gcmVnaXN0ZXIgdG8gd3JpdGUuDQo+ID4gKyAgQHBhcmFtICBWYWx1ZSAgIFRoZSB2YWx1 ZSB0byB3cml0ZSB0byB0aGUgTU1JTyByZWdpc3Rlci4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtV SU5UOA0KPiA+ICtFRklBUEkNCj4gPiArQmVNbWlvV3JpdGU4ICgNCj4gPiArICBJTiAgVUlOVE4g ICAgIEFkZHJlc3MsDQo+ID4gKyAgSU4gIFVJTlQ4ICAgICBWYWx1ZQ0KPiA+ICsgICkNCj4gPiAr ew0KPiA+ICsgIHJldHVybiBNbWlvV3JpdGU4KEFkZHJlc3MsIFZhbHVlKTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArLyoqDQo+ID4gKyAgTW1pb1dyaXRlMTYgZm9yIEJpZy1FbmRpYW4gbW9kdWxlcy4N Cj4gPiArDQo+ID4gKyAgQHBhcmFtICBBZGRyZXNzIFRoZSBNTUlPIHJlZ2lzdGVyIHRvIHdyaXRl Lg0KPiA+ICsgIEBwYXJhbSAgVmFsdWUgICBUaGUgdmFsdWUgdG8gd3JpdGUgdG8gdGhlIE1NSU8g cmVnaXN0ZXIuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArVUlOVDE2DQo+ID4gK0VGSUFQSQ0KPiA+ ICtCZU1taW9Xcml0ZTE2ICgNCj4gPiArICBJTiAgVUlOVE4gICAgIEFkZHJlc3MsDQo+ID4gKyAg SU4gIFVJTlQxNiAgICBWYWx1ZQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIHJldHVybiBNbWlv V3JpdGUxNihBZGRyZXNzLCBTd2FwQnl0ZXMxNihWYWx1ZSkpOyB9DQo+ID4gKw0KPiA+ICsvKioN Cj4gPiArICBNbWlvV3JpdGUzMiBmb3IgQmlnLUVuZGlhbiBtb2R1bGVzLg0KPiA+ICsNCj4gPiAr ICBAcGFyYW0gIEFkZHJlc3MgVGhlIE1NSU8gcmVnaXN0ZXIgdG8gd3JpdGUuDQo+ID4gKyAgQHBh cmFtICBWYWx1ZSAgIFRoZSB2YWx1ZSB0byB3cml0ZSB0byB0aGUgTU1JTyByZWdpc3Rlci4NCj4g PiArDQo+ID4gKyoqLw0KPiA+ICtVSU5UMzINCj4gPiArRUZJQVBJDQo+ID4gK0JlTW1pb1dyaXRl MzIgKA0KPiA+ICsgIElOICBVSU5UTiAgICAgQWRkcmVzcywNCj4gPiArICBJTiAgVUlOVDMyICAg IFZhbHVlDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgcmV0dXJuIE1taW9Xcml0ZTMyKEFkZHJl c3MsIFN3YXBCeXRlczMyKFZhbHVlKSk7IH0NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIE1taW9X cml0ZTY0IGZvciBCaWctRW5kaWFuIG1vZHVsZXMuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSAgQWRk cmVzcyBUaGUgTU1JTyByZWdpc3RlciB0byB3cml0ZS4NCj4gPiArICBAcGFyYW0gIFZhbHVlICAg VGhlIHZhbHVlIHRvIHdyaXRlIHRvIHRoZSBNTUlPIHJlZ2lzdGVyLg0KPiA+ICsNCj4gPiArKiov DQo+ID4gK1VJTlQ2NA0KPiA+ICtFRklBUEkNCj4gPiArQmVNbWlvV3JpdGU2NCAoDQo+ID4gKyAg SU4gIFVJTlROICAgICBBZGRyZXNzLA0KPiA+ICsgIElOICBVSU5UNjQgICAgVmFsdWUNCj4gPiAr ICApDQo+ID4gK3sNCj4gPiArICByZXR1cm4gTW1pb1dyaXRlNjQoQWRkcmVzcywgU3dhcEJ5dGVz NjQoVmFsdWUpKTsgfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgTW1pb0FuZFRoZW5PcjggZm9y IEJpZy1FbmRpYW4gbW9kdWxlcy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtICBBZGRyZXNzIFRoZSBN TUlPIHJlZ2lzdGVyIHRvIHdyaXRlLg0KPiA+ICsgIEBwYXJhbSAgQW5kRGF0YSBUaGUgdmFsdWUg dG8gQU5EIHdpdGggdGhlIHJlYWQgdmFsdWUgZnJvbSB0aGUgTU1JTw0KPiByZWdpc3Rlci4NCj4g PiArICBAcGFyYW0gIE9yRGF0YSAgVGhlIHZhbHVlIHRvIE9SIHdpdGggdGhlIHJlc3VsdCBvZiB0 aGUgQU5EIG9wZXJhdGlvbi4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBUaGUgdmFsdWUgd3JpdHRl biBiYWNrIHRvIHRoZSBNTUlPIHJlZ2lzdGVyLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1VJTlQ4 DQo+ID4gK0VGSUFQSQ0KPiA+ICtCZU1taW9BbmRUaGVuT3I4ICgNCj4gPiArICBJTiAgVUlOVE4g ICAgIEFkZHJlc3MsDQo+ID4gKyAgSU4gIFVJTlQ4ICAgICBBbmREYXRhLA0KPiA+ICsgIElOICBV SU5UOCAgICAgT3JEYXRhDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgcmV0dXJuIE1taW9BbmRU aGVuT3I4KEFkZHJlc3MsIEFuZERhdGEsIE9yRGF0YSk7IH0NCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgIE1taW9BbmRUaGVuT3IxNiBmb3IgQmlnLUVuZGlhbiBtb2R1bGVzLg0KPiA+ICsNCj4gPiAr ICBAcGFyYW0gIEFkZHJlc3MgVGhlIE1NSU8gcmVnaXN0ZXIgdG8gd3JpdGUuDQo+ID4gKyAgQHBh cmFtICBBbmREYXRhIFRoZSB2YWx1ZSB0byBBTkQgd2l0aCB0aGUgcmVhZCB2YWx1ZSBmcm9tIHRo ZSBNTUlPDQo+IHJlZ2lzdGVyLg0KPiA+ICsgIEBwYXJhbSAgT3JEYXRhICBUaGUgdmFsdWUgdG8g T1Igd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBBTkQgb3BlcmF0aW9uLg0KPiA+ICsNCj4gPiArICBA cmV0dXJuIFRoZSB2YWx1ZSB3cml0dGVuIGJhY2sgdG8gdGhlIE1NSU8gcmVnaXN0ZXIuDQo+ID4g Kw0KPiA+ICsqKi8NCj4gPiArVUlOVDE2DQo+ID4gK0VGSUFQSQ0KPiA+ICtCZU1taW9BbmRUaGVu T3IxNiAoDQo+ID4gKyAgSU4gIFVJTlROICAgICBBZGRyZXNzLA0KPiA+ICsgIElOICBVSU5UMTYg ICAgQW5kRGF0YSwNCj4gPiArICBJTiAgVUlOVDE2ICAgIE9yRGF0YQ0KPiA+ICsgICkNCj4gPiAr ew0KPiA+ICsgIEFuZERhdGEgPSBTd2FwQnl0ZXMxNihBbmREYXRhKTsNCj4gPiArICBPckRhdGEg PSBTd2FwQnl0ZXMxNihPckRhdGEpOw0KPiA+ICsNCj4gPiArICByZXR1cm4gTW1pb0FuZFRoZW5P cjE2KEFkZHJlc3MsIEFuZERhdGEsIE9yRGF0YSk7IH0NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsg IE1taW9BbmRUaGVuT3IzMiBmb3IgQmlnLUVuZGlhbiBtb2R1bGVzLg0KPiA+ICsNCj4gPiArICBA cGFyYW0gIEFkZHJlc3MgVGhlIE1NSU8gcmVnaXN0ZXIgdG8gd3JpdGUuDQo+ID4gKyAgQHBhcmFt ICBBbmREYXRhIFRoZSB2YWx1ZSB0byBBTkQgd2l0aCB0aGUgcmVhZCB2YWx1ZSBmcm9tIHRoZSBN TUlPDQo+IHJlZ2lzdGVyLg0KPiA+ICsgIEBwYXJhbSAgT3JEYXRhICBUaGUgdmFsdWUgdG8gT1Ig d2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBBTkQgb3BlcmF0aW9uLg0KPiA+ICsNCj4gPiArICBAcmV0 dXJuIFRoZSB2YWx1ZSB3cml0dGVuIGJhY2sgdG8gdGhlIE1NSU8gcmVnaXN0ZXIuDQo+ID4gKw0K PiA+ICsqKi8NCj4gPiArVUlOVDMyDQo+ID4gK0VGSUFQSQ0KPiA+ICtCZU1taW9BbmRUaGVuT3Iz MiAoDQo+ID4gKyAgSU4gIFVJTlROICAgICBBZGRyZXNzLA0KPiA+ICsgIElOICBVSU5UMzIgICAg QW5kRGF0YSwNCj4gPiArICBJTiAgVUlOVDMyICAgIE9yRGF0YQ0KPiA+ICsgICkNCj4gPiArew0K PiA+ICsgIEFuZERhdGEgPSBTd2FwQnl0ZXMzMihBbmREYXRhKTsNCj4gPiArICBPckRhdGEgPSBT d2FwQnl0ZXMzMihPckRhdGEpOw0KPiA+ICsNCj4gPiArICByZXR1cm4gTW1pb0FuZFRoZW5PcjMy KEFkZHJlc3MsIEFuZERhdGEsIE9yRGF0YSk7IH0NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIE1t aW9BbmRUaGVuT3I2NCBmb3IgQmlnLUVuZGlhbiBtb2R1bGVzLg0KPiA+ICsNCj4gPiArICBAcGFy YW0gIEFkZHJlc3MgVGhlIE1NSU8gcmVnaXN0ZXIgdG8gd3JpdGUuDQo+ID4gKyAgQHBhcmFtICBB bmREYXRhIFRoZSB2YWx1ZSB0byBBTkQgd2l0aCB0aGUgcmVhZCB2YWx1ZSBmcm9tIHRoZSBNTUlP DQo+IHJlZ2lzdGVyLg0KPiA+ICsgIEBwYXJhbSAgT3JEYXRhICBUaGUgdmFsdWUgdG8gT1Igd2l0 aCB0aGUgcmVzdWx0IG9mIHRoZSBBTkQgb3BlcmF0aW9uLg0KPiA+ICsNCj4gPiArICBAcmV0dXJu IFRoZSB2YWx1ZSB3cml0dGVuIGJhY2sgdG8gdGhlIE1NSU8gcmVnaXN0ZXIuDQo+ID4gKw0KPiA+ ICsqKi8NCj4gPiArVUlOVDY0DQo+ID4gK0VGSUFQSQ0KPiA+ICtCZU1taW9BbmRUaGVuT3I2NCAo DQo+ID4gKyAgSU4gIFVJTlROICAgICBBZGRyZXNzLA0KPiA+ICsgIElOICBVSU5UNjQgICAgQW5k RGF0YSwNCj4gPiArICBJTiAgVUlOVDY0ICAgIE9yRGF0YQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ ICsgIEFuZERhdGEgPSBTd2FwQnl0ZXM2NChBbmREYXRhKTsNCj4gPiArICBPckRhdGEgPSBTd2Fw Qnl0ZXM2NChPckRhdGEpOw0KPiA+ICsNCj4gPiArICByZXR1cm4gTW1pb0FuZFRoZW5PcjY0KEFk ZHJlc3MsIEFuZERhdGEsIE9yRGF0YSk7IH0NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIE1taW9P cjggZm9yIEJpZy1FbmRpYW4gbW9kdWxlcy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtICBBZGRyZXNz IFRoZSBNTUlPIHJlZ2lzdGVyIHRvIHdyaXRlLg0KPiA+ICsgIEBwYXJhbSAgT3JEYXRhICBUaGUg dmFsdWUgdG8gT1Igd2l0aCB0aGUgcmVhZCB2YWx1ZSBmcm9tIHRoZSBNTUlPDQo+IHJlZ2lzdGVy Lg0KPiA+ICsNCj4gPiArICBAcmV0dXJuIFRoZSB2YWx1ZSB3cml0dGVuIGJhY2sgdG8gdGhlIE1N SU8gcmVnaXN0ZXIuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArVUlOVDgNCj4gPiArRUZJQVBJDQo+ ID4gK0JlTW1pb09yOCAoDQo+ID4gKyAgSU4gIFVJTlROICAgICBBZGRyZXNzLA0KPiA+ICsgIElO ICBVSU5UOCAgICAgT3JEYXRhDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgcmV0dXJuIE1taW9P cjgoQWRkcmVzcywgT3JEYXRhKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgTW1p b09yMTYgZm9yIEJpZy1FbmRpYW4gbW9kdWxlcy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtICBBZGRy ZXNzIFRoZSBNTUlPIHJlZ2lzdGVyIHRvIHdyaXRlLg0KPiA+ICsgIEBwYXJhbSAgT3JEYXRhICBU aGUgdmFsdWUgdG8gT1Igd2l0aCB0aGUgcmVhZCB2YWx1ZSBmcm9tIHRoZSBNTUlPDQo+IHJlZ2lz dGVyLg0KPiA+ICsNCj4gPiArICBAcmV0dXJuIFRoZSB2YWx1ZSB3cml0dGVuIGJhY2sgdG8gdGhl IE1NSU8gcmVnaXN0ZXIuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArVUlOVDE2DQo+ID4gK0VGSUFQ SQ0KPiA+ICtCZU1taW9PcjE2ICgNCj4gPiArICBJTiAgVUlOVE4gICAgIEFkZHJlc3MsDQo+ID4g KyAgSU4gIFVJTlQxNiAgICBPckRhdGENCj4gPiArICApDQo+ID4gK3sNCj4gPiArICByZXR1cm4g TW1pb09yMTYoQWRkcmVzcywgU3dhcEJ5dGVzMTYoT3JEYXRhKSk7IH0NCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgIE1taW9PcjMyIGZvciBCaWctRW5kaWFuIG1vZHVsZXMuDQo+ID4gKw0KPiA+ICsg IEBwYXJhbSAgQWRkcmVzcyBUaGUgTU1JTyByZWdpc3RlciB0byB3cml0ZS4NCj4gPiArICBAcGFy YW0gIE9yRGF0YSAgVGhlIHZhbHVlIHRvIE9SIHdpdGggdGhlIHJlYWQgdmFsdWUgZnJvbSB0aGUg TU1JTw0KPiByZWdpc3Rlci4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBUaGUgdmFsdWUgd3JpdHRl biBiYWNrIHRvIHRoZSBNTUlPIHJlZ2lzdGVyLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1VJTlQz Mg0KPiA+ICtFRklBUEkNCj4gPiArQmVNbWlvT3IzMiAoDQo+ID4gKyAgSU4gIFVJTlROICAgICBB ZGRyZXNzLA0KPiA+ICsgIElOICBVSU5UMzIgICAgT3JEYXRhDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ ID4gKyAgcmV0dXJuIE1taW9PcjMyKEFkZHJlc3MsIFN3YXBCeXRlczMyKE9yRGF0YSkpOyB9DQo+ ID4gKw0KPiA+ICsvKioNCj4gPiArICBNbWlvT3I2NCBmb3IgQmlnLUVuZGlhbiBtb2R1bGVzLg0K PiA+ICsNCj4gPiArICBAcGFyYW0gIEFkZHJlc3MgVGhlIE1NSU8gcmVnaXN0ZXIgdG8gd3JpdGUu DQo+ID4gKyAgQHBhcmFtICBPckRhdGEgIFRoZSB2YWx1ZSB0byBPUiB3aXRoIHRoZSByZWFkIHZh bHVlIGZyb20gdGhlIE1NSU8NCj4gcmVnaXN0ZXIuDQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gVGhl IHZhbHVlIHdyaXR0ZW4gYmFjayB0byB0aGUgTU1JTyByZWdpc3Rlci4NCj4gPiArDQo+ID4gKyoq Lw0KPiA+ICtVSU5UNjQNCj4gPiArRUZJQVBJDQo+ID4gK0JlTW1pb09yNjQgKA0KPiA+ICsgIElO ICBVSU5UTiAgICAgQWRkcmVzcywNCj4gPiArICBJTiAgVUlOVDY0ICAgIE9yRGF0YQ0KPiA+ICsg ICkNCj4gPiArew0KPiA+ICsgIHJldHVybiBNbWlvT3I2NChBZGRyZXNzLCBTd2FwQnl0ZXM2NChP ckRhdGEpKTsgfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgTW1pb0FuZDggZm9yIEJpZy1FbmRp YW4gbW9kdWxlcy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtICBBZGRyZXNzIFRoZSBNTUlPIHJlZ2lz dGVyIHRvIHdyaXRlLg0KPiA+ICsgIEBwYXJhbSAgQW5kRGF0YSBUaGUgdmFsdWUgdG8gQU5EIHdp dGggdGhlIHJlYWQgdmFsdWUgZnJvbSB0aGUgTU1JTw0KPiByZWdpc3Rlci4NCj4gPiArDQo+ID4g KyAgQHJldHVybiBUaGUgdmFsdWUgd3JpdHRlbiBiYWNrIHRvIHRoZSBNTUlPIHJlZ2lzdGVyLg0K PiA+ICsNCj4gPiArKiovDQo+ID4gK1VJTlQ4DQo+ID4gK0VGSUFQSQ0KPiA+ICtCZU1taW9BbmQ4 ICgNCj4gPiArICBJTiAgVUlOVE4gICAgIEFkZHJlc3MsDQo+ID4gKyAgSU4gIFVJTlQ4ICAgICBB bmREYXRhDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgcmV0dXJuIE1taW9BbmQ4KEFkZHJlc3Ms IEFuZERhdGEpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBNbWlvQW5kMTYgZm9y IEJpZy1FbmRpYW4gbW9kdWxlcy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtICBBZGRyZXNzIFRoZSBN TUlPIHJlZ2lzdGVyIHRvIHdyaXRlLg0KPiA+ICsgIEBwYXJhbSAgQW5kRGF0YSBUaGUgdmFsdWUg dG8gQU5EIHdpdGggdGhlIHJlYWQgdmFsdWUgZnJvbSB0aGUgTU1JTw0KPiByZWdpc3Rlci4NCj4g PiArDQo+ID4gKyAgQHJldHVybiBUaGUgdmFsdWUgd3JpdHRlbiBiYWNrIHRvIHRoZSBNTUlPIHJl Z2lzdGVyLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1VJTlQxNg0KPiA+ICtFRklBUEkNCj4gPiAr QmVNbWlvQW5kMTYgKA0KPiA+ICsgIElOICBVSU5UTiAgICAgQWRkcmVzcywNCj4gPiArICBJTiAg VUlOVDE2ICAgIEFuZERhdGENCj4gPiArICApDQo+ID4gK3sNCj4gPiArICByZXR1cm4gTW1pb0Fu ZDE2KEFkZHJlc3MsIFN3YXBCeXRlczE2KEFuZERhdGEpKTsgfQ0KPiA+ICsNCj4gPiArLyoqDQo+ ID4gKyAgTW1pb0FuZDMyIGZvciBCaWctRW5kaWFuIG1vZHVsZXMuDQo+ID4gKw0KPiA+ICsgIEBw YXJhbSAgQWRkcmVzcyBUaGUgTU1JTyByZWdpc3RlciB0byB3cml0ZS4NCj4gPiArICBAcGFyYW0g IEFuZERhdGEgVGhlIHZhbHVlIHRvIEFORCB3aXRoIHRoZSByZWFkIHZhbHVlIGZyb20gdGhlIE1N SU8NCj4gcmVnaXN0ZXIuDQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gVGhlIHZhbHVlIHdyaXR0ZW4g YmFjayB0byB0aGUgTU1JTyByZWdpc3Rlci4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtVSU5UMzIN Cj4gPiArRUZJQVBJDQo+ID4gK0JlTW1pb0FuZDMyICgNCj4gPiArICBJTiAgVUlOVE4gICAgIEFk ZHJlc3MsDQo+ID4gKyAgSU4gIFVJTlQzMiAgICBBbmREYXRhDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ ID4gKyAgcmV0dXJuIE1taW9BbmQzMihBZGRyZXNzLCBTd2FwQnl0ZXMzMihBbmREYXRhKSk7IH0N Cj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIE1taW9BbmQ2NCBmb3IgQmlnLUVuZGlhbiBtb2R1bGVz Lg0KPiA+ICsNCj4gPiArICBAcGFyYW0gIEFkZHJlc3MgVGhlIE1NSU8gcmVnaXN0ZXIgdG8gd3Jp dGUuDQo+ID4gKyAgQHBhcmFtICBBbmREYXRhIFRoZSB2YWx1ZSB0byBBTkQgd2l0aCB0aGUgcmVh ZCB2YWx1ZSBmcm9tIHRoZSBNTUlPDQo+IHJlZ2lzdGVyLg0KPiA+ICsNCj4gPiArICBAcmV0dXJu IFRoZSB2YWx1ZSB3cml0dGVuIGJhY2sgdG8gdGhlIE1NSU8gcmVnaXN0ZXIuDQo+ID4gKw0KPiA+ ICsqKi8NCj4gPiArVUlOVDY0DQo+ID4gK0VGSUFQSQ0KPiA+ICtCZU1taW9BbmQ2NCAoDQo+ID4g KyAgSU4gIFVJTlROICAgICBBZGRyZXNzLA0KPiA+ICsgIElOICBVSU5UNjQgICAgQW5kRGF0YQ0K PiA+ICsgICkNCj4gPiArew0KPiA+ICsgIHJldHVybiBNbWlvQW5kNjQoQWRkcmVzcywgU3dhcEJ5 dGVzNjQoQW5kRGF0YSkpOyB9DQo+ID4gZGlmZiAtLWdpdCBhL1BsYXRmb3JtL05YUC9MaWJyYXJ5 L0JlSW9MaWIvQmVJb0xpYi5pbmYNCj4gPiBiL1BsYXRmb3JtL05YUC9MaWJyYXJ5L0JlSW9MaWIv QmVJb0xpYi5pbmYNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAu LmNhNjRkOGYNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvUGxhdGZvcm0vTlhQL0xpYnJh cnkvQmVJb0xpYi9CZUlvTGliLmluZg0KPiA+IEBAIC0wLDAgKzEsMzEgQEANCj4gPiArIyMgQEJl SW9MaWIuaW5mDQo+ID4gKw0KPiA+ICsjICBDb3B5cmlnaHQgMjAxNyBOWFANCj4gPiArIw0KPiA+ ICsjICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzICMgIGFyZSBs aWNlbnNlZCBhbmQNCj4gPiArbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25k aXRpb25zIG9mIHRoZSBCU0QgTGljZW5zZSAjDQo+ID4gK3doaWNoIGFjY29tcGFuaWVzIHRoaXMg ZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZQ0KPiA+ICttYXkgYmUg Zm91bmQgYXQgIw0KPiA+DQo+ICtodHRwczovL2VtZWEwMS5zYWZlbGlua3MucHJvdGVjdGlvbi5v dXRsb29rLmNvbS8/dXJsPWh0dHAlM0ElMkYlMkZvcA0KPiBlDQo+ID4gK25zb3VyY2Uub3JnJTJG bGljZW5zZXMlMkZic2QtDQo+IGxpY2Vuc2UucGhwJmRhdGE9MDIlN0MwMSU3Q21lZW5ha3NoaS5h Z2cNCj4gPg0KPiArYXJ3YWwlNDBueHAuY29tJTdDZDIzM2JkOTZlYTZjNGMxNjQxNmEwOGQ1MmE5 MWJkY2ElN0M2ODZlYTFkM2INCj4gYzJiNGM2Zg0KPiA+DQo+ICthOTJjZDk5YzVjMzAxNjM1JTdD MCU3QzAlN0M2MzY0NjE3Mjc4MDIwMDQ0ODQmc2RhdGE9a0wlMkZPTWVuDQo+IDYxamVRbFBHDQo+ ID4gKzNZSzJ3QTJvV2dIRnJ5a1ZNeExRY1JOQTYzS3MlM0QmcmVzZXJ2ZWQ9MA0KPiA+ICsjDQo+ ID4gKyMgIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBP TiBBTiAiQVMgSVMiDQo+ID4gK0JBU0lTLCAjICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVT RU5UQVRJT05TIE9GIEFOWSBLSU5ELA0KPiBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KPiA+ ICsjDQo+ID4gKyMjDQo+ID4gKw0KPiA+ICtbRGVmaW5lc10NCj4gPiArICBJTkZfVkVSU0lPTiAg ICAgICAgICAgICAgICAgICAgPSAweDAwMDEwMDA1DQo+IA0KPiAweDAwMDEwMDFBDQo+IA0KT0ss IHdpbGwgY29ycmVjdCBpbiBhbGwgcGF0Y2hlcy4NCg0KPiA+ICsgIEJBU0VfTkFNRSAgICAgICAg ICAgICAgICAgICAgICA9IEJlSW9MaWINCj4gPiArICBGSUxFX0dVSUQgICAgICAgICAgICAgICAg ICAgICAgPSAyOGQ3NzMzMy03N2ViLTRmYWYtODczNS0xMzBlNWViM2UzNDMNCj4gPiArICBNT0RV TEVfVFlQRSAgICAgICAgICAgICAgICAgICAgPSBCQVNFDQo+ID4gKyAgVkVSU0lPTl9TVFJJTkcg ICAgICAgICAgICAgICAgID0gMS4wDQo+ID4gKyAgTElCUkFSWV9DTEFTUyAgICAgICAgICAgICAg ICAgID0gQmVJb0xpYg0KPiA+ICsNCj4gPiArW1BhY2thZ2VzXQ0KPiA+ICsgIE1kZU1vZHVsZVBr Zy9NZGVNb2R1bGVQa2cuZGVjDQo+ID4gKyAgTWRlUGtnL01kZVBrZy5kZWMNCj4gPiArDQo+ID4g K1tMaWJyYXJ5Q2xhc3Nlc10NCj4gPiArICBJb0xpYg0KPiA+ICsNCj4gPiArW1NvdXJjZXMuY29t bW9uXQ0KPiA+ICsgIEJlSW9MaWIuYw0KPiA+IC0tDQo+ID4gMS45LjENCj4gPg0K