From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by mx.groups.io with SMTP id smtpd.web10.1204.1589821486135362748 for ; Mon, 18 May 2020 10:04:46 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=hNksdQi1; spf=pass (domain: intel.com, ip: 192.55.52.115, mailfrom: michael.d.kinney@intel.com) IronPort-SDR: msdD0sOqE6zE35HI0vIiC/S6n52FfCO/RZNLbSMyFZrPmNgiCpB73q7H4HEy5ZJB92HKSjyKf6 22Z64qi5nxPw== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 May 2020 10:04:45 -0700 IronPort-SDR: 7FzkalgElHpF6MVjmDRZZnvhypm26gYAoU4eR0hLOX2V0dbaLHxvJxPtpZ515gAr4mZGSTfO6u teQ540cCd/7Q== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,407,1583222400"; d="scan'208";a="267581470" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by orsmga006.jf.intel.com with ESMTP; 18 May 2020 10:04:44 -0700 Received: from fmsmsx125.amr.corp.intel.com (10.18.125.40) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.439.0; Mon, 18 May 2020 10:04:25 -0700 Received: from FMSEDG002.ED.cps.intel.com (10.1.192.134) by FMSMSX125.amr.corp.intel.com (10.18.125.40) with Microsoft SMTP Server (TLS) id 14.3.439.0; Mon, 18 May 2020 10:04:24 -0700 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (104.47.55.104) by edgegateway.intel.com (192.55.55.69) with Microsoft SMTP Server (TLS) id 14.3.439.0; Mon, 18 May 2020 10:04:23 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=n7WezyT5R1QZ+5QJnK/LjWXFjY1Dx+BK8/d1T62xj5yLtQs05qZsAAlYgnLnC22cXOoOagtVKp16fWoqi29lCpIbGp1kyntJeFsGx1mrZQqJ4Y46B/fOJhN7Qq6KTUOP50w+eM8w7NMJSracmG2X2C5u0AhjGVMhSxw/rb3SGUZGsy1V6fn7AvXUl4EY7HXBZ03UlNjdYDLZnyqtED7Xd9BIlUNuccCZiRvpE85HHIgWOI7pcotS0ypRvyJCz6FCAZcRhjmvou3+Ok5oWlXlKIJXhTUZeU6JaQbKOgF9uLmdHVr7Y4TOz0fAwV5La7CzjZ8JhFuu4iZpJ/y0wg8uGg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=UtbfUCucFFQSo4/ajohYS9FTQa4R87pCRqtd6KkVe7w=; b=feBZoryvOunQIozjopB6sg63ZeN+1m90JnVukPcg6sIthsrneHk0nXiTO0RSE47qnwK5iDcl/Hd0eThA5eNb1sGgKCrRy8w5+iO6UGHMgCqk2Si8Hl9uFtaT9/DG54Ghsm3+p8zkJHJ3hMmyRWHglNB81KhtxehPKB1BDGIYAI/uPVXcwwpulOmj863LdmPE3P1fawvKRSAGYoXaOc7PiJ4MYWz7EBBdNKA8Uy6fnlGBPVzf6gQe8QmaZ49JWVlBC2D1CoELy8OfrlmnXz+c7x7igFHhEKemRWRkc6ifHBM0gmszaIH7llC8fx2myc67ADPpXN72ZytTzesw28lHaw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=UtbfUCucFFQSo4/ajohYS9FTQa4R87pCRqtd6KkVe7w=; b=hNksdQi1veUbxoAdGRCTXS7tdEmQ4DAHWhf7gmLE76Rvsf8JiTWvMzI32f74C/98wSPYwzugFUWhuXK5M0ft3qjj4RjYcwdGGT6bw5ZJFfZyLARiwQLPyfAm95t/Kn/IVVFSH19A2bNimA0w7nqV7FFP4lcBLHWHftLiDGntu58= Received: from MN2PR11MB4461.namprd11.prod.outlook.com (2603:10b6:208:192::29) by MN2PR11MB4613.namprd11.prod.outlook.com (2603:10b6:208:26d::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3000.25; Mon, 18 May 2020 17:04:20 +0000 Received: from MN2PR11MB4461.namprd11.prod.outlook.com ([fe80::10bc:1a4e:4745:ffc1]) by MN2PR11MB4461.namprd11.prod.outlook.com ([fe80::10bc:1a4e:4745:ffc1%3]) with mapi id 15.20.3000.034; Mon, 18 May 2020 17:04:20 +0000 From: "Michael D Kinney" To: "devel@edk2.groups.io" , "cheptsov@ispras.ru" , "Kinney, Michael D" CC: Andrew Fish , Ard Biesheuvel , Bret Barkelew , "Brian J . Johnson" , "Chiu, Chasel" , "Justen, Jordan L" , Laszlo Ersek , Leif Lindholm , "Gao, Liming" , =?utf-8?B?TWFydmluIEjDpHVzZXI=?= , "Zimmer, Vincent" , "Gao, Zhichao" Subject: Re: [edk2-devel] [PATCH V7 1/1] MdePkg: Fix SafeString performing assertions on runtime checks Thread-Topic: [edk2-devel] [PATCH V7 1/1] MdePkg: Fix SafeString performing assertions on runtime checks Thread-Index: AQHWKhWqAnC6asE4sUKZDVJPNaijmKiuFzgg Date: Mon, 18 May 2020 17:04:20 +0000 Message-ID: References: <20200514173131.38072-1-cheptsov@ispras.ru> <20200514173131.38072-2-cheptsov@ispras.ru> In-Reply-To: <20200514173131.38072-2-cheptsov@ispras.ru> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.2.0.6 authentication-results: edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=none action=none header.from=intel.com; x-originating-ip: [134.134.136.216] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: e38fb7c7-69a3-4803-4794-08d7fb4d81e6 x-ms-traffictypediagnostic: MN2PR11MB4613: x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2733; x-forefront-prvs: 04073E895A x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: YLk3DBUwEhxPwPeVEzI5VkZ7L+xTnexHmLGZ36JLcu1ngSfGe+yv/bUI2AwQbO3xgK4hdkP59x0cIj0FdBFCBO50zxX5cspxElUDSCDhhdzbmI+R7PknPhoUSLHs7A34bkVPjy1y4nmsrN8Ua3BBx/dwC8+llsOnQOXcjkqZp0Gy4wQa+SYKJa/q1LaVAnvnhA5XS9lrGRTqc4gscNGiSkZjagsMnpye8WjlFWmlscCvBB9CDvxkkgQPDiImeCojDNMpdY/HhooCTe+U7/TxtbaMGp7coekpVjKZVBfhHU2TX8wNq7jKyWUL2TPVYRa4syhZEJU0sOOU4r6bT4G1i1BkE7LEusaMitxy/W6i1MV2KZ/dozQAcj7vZMeG7C0ntjEz9fBZ0tUkkD7AiD8NO4fAVJzAkv+h0V3A0uwR9VR194Vs2ZfXYBvsp1jYLMCB58BlMwAh6CuGtT2MPSiLrxHJlyYwdyMD79jREGYM6uzQjkc+No6JML3ojol8sUAJ4g6er5pnMve/u1Gn0KZopA== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR11MB4461.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(366004)(39860400002)(396003)(136003)(376002)(346002)(2906002)(5660300002)(52536014)(4326008)(33656002)(9686003)(66446008)(66476007)(66556008)(64756008)(19627235002)(66946007)(30864003)(55016002)(54906003)(316002)(8676002)(8936002)(107886003)(76116006)(110136005)(7696005)(6506007)(53546011)(86362001)(26005)(186003)(478600001)(71200400001)(966005)(559001)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: UaX7ELnm+hNbZ7jVhaDctUH2Ew2F24EtKC+rRegaGeCeTDkoU18OyLAMyp2YgOk0RusUB8STu/3xjG2e9mdWmuPBLu46uN9X10Dm1T/NLUV7Yt/NB+n6GT2efsgkceOlrsyNnLdH7P+jUaivlp1/nAVZZ0y3VawICpcfZq/IVMO/oJ6TO1GxWeX1hFjS3H/vbKS4VnCn4jxQpqK3dBnuaq6Pn5zLhPZNIX+DZAB9wHFEuu7cs3GGtwVNs6ARboQ8K1skYF7xtlySoa5vZv/RgfKKwdGRZt3cL+0CZXMqZTIa1TlJptob1OC/2nahZhz87hP9hze1h5y001ReBHdw4R0S6u///UcPZwQN65DCIJpJm2Khdw3LCPzGz9KuoijMGufQSCRYsDJ6LtQyT8pxxxPEYJm82FHkwY8+Ad8f/aI8VvI0Ke7zN8uzVynKFZ4OZbyINdYRt+kwWM28rc0TcQb2Mk9nxgsDgmqnMnrVwR9hJehKHxSACU/OZmGs3j6j MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: e38fb7c7-69a3-4803-4794-08d7fb4d81e6 X-MS-Exchange-CrossTenant-originalarrivaltime: 18 May 2020 17:04:20.4801 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 7PuyQbO7G0HSVHfEo2zKO/2TRwE2wv6pGaFh3+nV4G57mu5j/7R5pOV9/SVE3lJe32CUF3GEq4XmrH4+I/Om0mjSXxWFBAMYJj8odhSTKQ0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR11MB4613 Return-Path: michael.d.kinney@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Vml0YWx5LA0KDQpSZXZpZXdlZC1ieTogTWljaGFlbCBEIEtpbm5leSA8bWljaGFlbC5kLmtpbm5l eUBpbnRlbC5jb20+DQoNCkkgYWdyZWUgdGhhdCBjYW4gZ28gaW4gbm93IGZvciB0aGUgc3RhYmxl IHRhZy4NCg0KVGhlIG9ubHkgYWRkaXRpb25hbCBjb21tZW50IEkgaGF2ZSByZWNlaXZlZCBpcyBp ZiBhIERFQlVHKCkgbWVzc2FnZQ0KY2FuIGJlIGFkZGVkIHdoZXJlIHRoZSBBU1NFUlQoKSB3YXMg cmVtb3ZlZC4gIFBlcmhhcHMgb25seSBhdCB0aGUNCkRFQlVHX1ZFUkJPU0UgbGV2ZWwgdGhhdCBp cyBub3QgdXN1YWxseSBlbmFibGVkIGJ5IGRlZmF1bHQuICBBIA0KZGV2ZWxvcGVyIHRoYXQgd2Fu dHMgdG8gc2VlIFNBRkVfU1RSSU5HX0NPTlNUUkFJTlRfQ0hFQ0soKSBjb25kaXRpb25zDQp0aGF0 IGZhaWwgd291bGQgbmVlZCB0byBlbmFibGUgREVCVUdfVkVSQk9TRSBtZXNzYWdlcy4NCg0KVGhh bmtzLA0KDQpNaWtlDQoNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBk ZXZlbEBlZGsyLmdyb3Vwcy5pbyA8ZGV2ZWxAZWRrMi5ncm91cHMuaW8+IE9uDQo+IEJlaGFsZiBP ZiBWaXRhbHkgQ2hlcHRzb3YNCj4gU2VudDogVGh1cnNkYXksIE1heSAxNCwgMjAyMCAxMDozMiBB TQ0KPiBUbzogZGV2ZWxAZWRrMi5ncm91cHMuaW8NCj4gQ2M6IEFuZHJldyBGaXNoIDxhZmlzaEBh cHBsZS5jb20+OyBBcmQgQmllc2hldXZlbA0KPiA8YXJkLmJpZXNoZXV2ZWxAbGluYXJvLm9yZz47 IEJyZXQgQmFya2VsZXcNCj4gPGJyZXQuYmFya2VsZXdAbWljcm9zb2Z0LmNvbT47IEJyaWFuIEog LiBKb2huc29uDQo+IDxicmlhbi5qb2huc29uQGhwZS5jb20+OyBDaGl1LCBDaGFzZWwNCj4gPGNo YXNlbC5jaGl1QGludGVsLmNvbT47IEp1c3RlbiwgSm9yZGFuIEwNCj4gPGpvcmRhbi5sLmp1c3Rl bkBpbnRlbC5jb20+OyBMYXN6bG8gRXJzZWsNCj4gPGxlcnNla0ByZWRoYXQuY29tPjsgTGVpZiBM aW5kaG9sbSA8bGVpZkBudXZpYWluYy5jb20+Ow0KPiBHYW8sIExpbWluZyA8bGltaW5nLmdhb0Bp bnRlbC5jb20+OyBNYXJ2aW4gSMOkdXNlcg0KPiA8bWhhZXVzZXJAb3V0bG9vay5kZT47IEtpbm5l eSwgTWljaGFlbCBEDQo+IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT47IFppbW1lciwgVmlu Y2VudA0KPiA8dmluY2VudC56aW1tZXJAaW50ZWwuY29tPjsgR2FvLCBaaGljaGFvDQo+IDx6aGlj aGFvLmdhb0BpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFtlZGsyLWRldmVsXSBbUEFUQ0ggVjcgMS8x XSBNZGVQa2c6IEZpeA0KPiBTYWZlU3RyaW5nIHBlcmZvcm1pbmcgYXNzZXJ0aW9ucyBvbiBydW50 aW1lIGNoZWNrcw0KPiANCj4gUkVGOg0KPiBodHRwczovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcv c2hvd19idWcuY2dpP2lkPTIwNTQNCj4gDQo+IFJ1bnRpbWUgY2hlY2tzIHJldHVybmVkIHZpYSBz dGF0dXMgcmV0dXJuIGNvZGUgc2hvdWxkDQo+IG5vdCB3b3JrIGFzDQo+IGFzc2VydGlvbnMgdG8g cGVybWl0IHBhcnNpbmcgbm90IHRydXN0ZWQgZGF0YSB3aXRoDQo+IFNhZmVTdHJpbmcNCj4gaW50 ZXJmYWNlcy4NCj4gDQo+IENDOiBBbmRyZXcgRmlzaCA8YWZpc2hAYXBwbGUuY29tPg0KPiBDQzog QXJkIEJpZXNoZXV2ZWwgPGFyZC5iaWVzaGV1dmVsQGxpbmFyby5vcmc+DQo+IENDOiBCcmV0IEJh cmtlbGV3IDxicmV0LmJhcmtlbGV3QG1pY3Jvc29mdC5jb20+DQo+IENDOiBCcmlhbiBKLiBKb2hu c29uIDxicmlhbi5qb2huc29uQGhwZS5jb20+DQo+IENDOiBDaGFzZWwgQ2hpdSA8Y2hhc2VsLmNo aXVAaW50ZWwuY29tPg0KPiBDQzogSm9yZGFuIEp1c3RlbiA8am9yZGFuLmwuanVzdGVuQGludGVs LmNvbT4NCj4gQ0M6IExhc3psbyBFcnNlayA8bGVyc2VrQHJlZGhhdC5jb20+DQo+IENDOiBMZWlm IExpbmRob2xtIDxsZWlmQG51dmlhaW5jLmNvbT4NCj4gQ0M6IExpbWluZyBHYW8gPGxpbWluZy5n YW9AaW50ZWwuY29tPg0KPiBDQzogTWFydmluIEjDpHVzZXIgPG1oYWV1c2VyQG91dGxvb2suZGU+ DQo+IENDOiBNaWtlIEtpbm5leSA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+DQo+IENDOiBW aW5jZW50IFppbW1lciA8dmluY2VudC56aW1tZXJAaW50ZWwuY29tPg0KPiBDQzogWmhpY2hhbyBH YW8gPHpoaWNoYW8uZ2FvQGludGVsLmNvbT4NCj4gU2lnbmVkLW9mZi1ieTogVml0YWx5IENoZXB0 c292IDx2aXQ5Njk2QHByb3Rvbm1haWwuY29tPg0KPiAtLS0NCj4gIE1kZVBrZy9JbmNsdWRlL0xp YnJhcnkvQmFzZUxpYi5oICAgIHwgMTExIC0tLS0tLS0tLS0tLQ0KPiAtLS0tLS0tDQo+ICBNZGVQ a2cvTGlicmFyeS9CYXNlTGliL1NhZmVTdHJpbmcuYyB8IDExMiAtLS0tLS0tLS0tLS0NCj4gLS0t LS0tLS0NCj4gIDIgZmlsZXMgY2hhbmdlZCwgMjIzIGRlbGV0aW9ucygtKQ0KPiANCj4gZGlmZiAt LWdpdCBhL01kZVBrZy9JbmNsdWRlL0xpYnJhcnkvQmFzZUxpYi5oDQo+IGIvTWRlUGtnL0luY2x1 ZGUvTGlicmFyeS9CYXNlTGliLmgNCj4gaW5kZXggZWNhZGZmOGIyMy4uMmMxOTRhZDk0MyAxMDA2 NDQNCj4gLS0tIGEvTWRlUGtnL0luY2x1ZGUvTGlicmFyeS9CYXNlTGliLmgNCj4gKysrIGIvTWRl UGtnL0luY2x1ZGUvTGlicmFyeS9CYXNlTGliLmgNCj4gQEAgLTE4OSw3ICsxODksNiBAQCBTdHJu U2l6ZVMgKA0KPiANCj4gDQo+IA0KPiAgICBJZiBEZXN0aW5hdGlvbiBpcyBub3QgYWxpZ25lZCBv biBhIDE2LWJpdCBib3VuZGFyeSwNCj4gdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAgICBJZiBT b3VyY2UgaXMgbm90IGFsaWduZWQgb24gYSAxNi1iaXQgYm91bmRhcnksIHRoZW4NCj4gQVNTRVJU KCkuDQo+IA0KPiANCj4gLSAgSWYgYW4gZXJyb3Igd291bGQgYmUgcmV0dXJuZWQsIHRoZW4gdGhl IGZ1bmN0aW9uDQo+IHdpbGwgYWxzbyBBU1NFUlQoKS4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAg ICBJZiBhbiBlcnJvciBpcyByZXR1cm5lZCwgdGhlbiB0aGUgRGVzdGluYXRpb24gaXMNCj4gdW5t b2RpZmllZC4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiBAQCAtMjI1LDcgKzIyNCw2IEBAIFN0ckNw eVMgKA0KPiANCj4gDQo+IA0KPiAgICBJZiBMZW5ndGggPiAwIGFuZCBEZXN0aW5hdGlvbiBpcyBu b3QgYWxpZ25lZCBvbiBhDQo+IDE2LWJpdCBib3VuZGFyeSwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+ IA0KPiAgICBJZiBMZW5ndGggPiAwIGFuZCBTb3VyY2UgaXMgbm90IGFsaWduZWQgb24gYSAxNi1i aXQNCj4gYm91bmRhcnksIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gLSAgSWYgYW4gZXJyb3Ig d291bGQgYmUgcmV0dXJuZWQsIHRoZW4gdGhlIGZ1bmN0aW9uDQo+IHdpbGwgYWxzbyBBU1NFUlQo KS4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAgICBJZiBhbiBlcnJvciBpcyByZXR1cm5lZCwgdGhl biB0aGUgRGVzdGluYXRpb24gaXMNCj4gdW5tb2RpZmllZC4NCj4gDQo+IA0KPiANCj4gDQo+IA0K PiBAQCAtMjYzLDcgKzI2MSw2IEBAIFN0cm5DcHlTICgNCj4gDQo+IA0KPiANCj4gICAgSWYgRGVz dGluYXRpb24gaXMgbm90IGFsaWduZWQgb24gYSAxNi1iaXQgYm91bmRhcnksDQo+IHRoZW4gQVNT RVJUKCkuDQo+IA0KPiANCj4gICAgSWYgU291cmNlIGlzIG5vdCBhbGlnbmVkIG9uIGEgMTYtYml0 IGJvdW5kYXJ5LCB0aGVuDQo+IEFTU0VSVCgpLg0KPiANCj4gDQo+IC0gIElmIGFuIGVycm9yIHdv dWxkIGJlIHJldHVybmVkLCB0aGVuIHRoZSBmdW5jdGlvbg0KPiB3aWxsIGFsc28gQVNTRVJUKCku DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gICAgSWYgYW4gZXJyb3IgaXMgcmV0dXJuZWQsIHRoZW4g dGhlIERlc3RpbmF0aW9uIGlzDQo+IHVubW9kaWZpZWQuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g QEAgLTMwMyw3ICszMDAsNiBAQCBTdHJDYXRTICgNCj4gDQo+IA0KPiANCj4gICAgSWYgRGVzdGlu YXRpb24gaXMgbm90IGFsaWduZWQgb24gYSAxNi1iaXQgYm91bmRhcnksDQo+IHRoZW4gQVNTRVJU KCkuDQo+IA0KPiANCj4gICAgSWYgU291cmNlIGlzIG5vdCBhbGlnbmVkIG9uIGEgMTYtYml0IGJv dW5kYXJ5LCB0aGVuDQo+IEFTU0VSVCgpLg0KPiANCj4gDQo+IC0gIElmIGFuIGVycm9yIHdvdWxk IGJlIHJldHVybmVkLCB0aGVuIHRoZSBmdW5jdGlvbg0KPiB3aWxsIGFsc28gQVNTRVJUKCkuDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gICAgSWYgYW4gZXJyb3IgaXMgcmV0dXJuZWQsIHRoZW4gdGhl IERlc3RpbmF0aW9uIGlzDQo+IHVubW9kaWZpZWQuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gQEAg LTM1MCwxMiArMzQ2LDcgQEAgU3RybkNhdFMgKA0KPiAgICBiZSBpZ25vcmVkLiBUaGVuLCB0aGUg ZnVuY3Rpb24gc3RvcHMgYXQgdGhlIGZpcnN0DQo+IGNoYXJhY3RlciB0aGF0IGlzIGEgbm90IGEN Cj4gDQo+IA0KPiAgICB2YWxpZCBkZWNpbWFsIGNoYXJhY3RlciBvciBhIE51bGwtdGVybWluYXRv ciwNCj4gd2hpY2hldmVyIG9uZSBjb21lcyBmaXJzdC4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAt ICBJZiBTdHJpbmcgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtICBJZiBEYXRh IGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gICAgSWYgU3RyaW5nIGlzIG5vdCBh bGlnbmVkIGluIGEgMTYtYml0IGJvdW5kYXJ5LCB0aGVuDQo+IEFTU0VSVCgpLg0KPiANCj4gDQo+ IC0gIElmIFBjZE1heGltdW1Vbmljb2RlU3RyaW5nTGVuZ3RoIGlzIG5vdCB6ZXJvLCBhbmQNCj4g U3RyaW5nIGNvbnRhaW5zIG1vcmUgdGhhbg0KPiANCj4gDQo+IC0gIFBjZE1heGltdW1Vbmljb2Rl U3RyaW5nTGVuZ3RoIFVuaWNvZGUgY2hhcmFjdGVycywNCj4gbm90IGluY2x1ZGluZyB0aGUNCj4g DQo+IA0KPiAtICBOdWxsLXRlcm1pbmF0b3IsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gICAgSWYgU3RyaW5nIGhhcyBubyB2YWxpZCBkZWNpbWFsIGRpZ2l0cyBpbiB0aGUg YWJvdmUNCj4gZm9ybWF0LCB0aGVuIDAgaXMgc3RvcmVkDQo+IA0KPiANCj4gICAgYXQgdGhlIGxv Y2F0aW9uIHBvaW50ZWQgdG8gYnkgRGF0YS4NCj4gDQo+IA0KPiBAQCAtNDA2LDEyICszOTcsNyBA QCBTdHJEZWNpbWFsVG9VaW50blMgKA0KPiAgICBiZSBpZ25vcmVkLiBUaGVuLCB0aGUgZnVuY3Rp b24gc3RvcHMgYXQgdGhlIGZpcnN0DQo+IGNoYXJhY3RlciB0aGF0IGlzIGEgbm90IGENCj4gDQo+ IA0KPiAgICB2YWxpZCBkZWNpbWFsIGNoYXJhY3RlciBvciBhIE51bGwtdGVybWluYXRvciwNCj4g d2hpY2hldmVyIG9uZSBjb21lcyBmaXJzdC4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtICBJZiBT dHJpbmcgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtICBJZiBEYXRhIGlzIE5V TEwsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gICAgSWYgU3RyaW5nIGlzIG5vdCBhbGlnbmVk IGluIGEgMTYtYml0IGJvdW5kYXJ5LCB0aGVuDQo+IEFTU0VSVCgpLg0KPiANCj4gDQo+IC0gIElm IFBjZE1heGltdW1Vbmljb2RlU3RyaW5nTGVuZ3RoIGlzIG5vdCB6ZXJvLCBhbmQNCj4gU3RyaW5n IGNvbnRhaW5zIG1vcmUgdGhhbg0KPiANCj4gDQo+IC0gIFBjZE1heGltdW1Vbmljb2RlU3RyaW5n TGVuZ3RoIFVuaWNvZGUgY2hhcmFjdGVycywNCj4gbm90IGluY2x1ZGluZyB0aGUNCj4gDQo+IA0K PiAtICBOdWxsLXRlcm1pbmF0b3IsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gICAgSWYgU3RyaW5nIGhhcyBubyB2YWxpZCBkZWNpbWFsIGRpZ2l0cyBpbiB0aGUgYWJvdmUN Cj4gZm9ybWF0LCB0aGVuIDAgaXMgc3RvcmVkDQo+IA0KPiANCj4gICAgYXQgdGhlIGxvY2F0aW9u IHBvaW50ZWQgdG8gYnkgRGF0YS4NCj4gDQo+IA0KPiBAQCAtNDY3LDEyICs0NTMsNyBAQCBTdHJE ZWNpbWFsVG9VaW50NjRTICgNCj4gICAgdGhlIGZpcnN0IGNoYXJhY3RlciB0aGF0IGlzIGEgbm90 IGEgdmFsaWQNCj4gaGV4YWRlY2ltYWwgY2hhcmFjdGVyIG9yIE5VTEwsDQo+IA0KPiANCj4gICAg d2hpY2hldmVyIG9uZSBjb21lcyBmaXJzdC4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtICBJZiBT dHJpbmcgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtICBJZiBEYXRhIGlzIE5V TEwsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gICAgSWYgU3RyaW5nIGlzIG5vdCBhbGlnbmVk IGluIGEgMTYtYml0IGJvdW5kYXJ5LCB0aGVuDQo+IEFTU0VSVCgpLg0KPiANCj4gDQo+IC0gIElm IFBjZE1heGltdW1Vbmljb2RlU3RyaW5nTGVuZ3RoIGlzIG5vdCB6ZXJvLCBhbmQNCj4gU3RyaW5n IGNvbnRhaW5zIG1vcmUgdGhhbg0KPiANCj4gDQo+IC0gIFBjZE1heGltdW1Vbmljb2RlU3RyaW5n TGVuZ3RoIFVuaWNvZGUgY2hhcmFjdGVycywNCj4gbm90IGluY2x1ZGluZyB0aGUNCj4gDQo+IA0K PiAtICBOdWxsLXRlcm1pbmF0b3IsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gICAgSWYgU3RyaW5nIGhhcyBubyB2YWxpZCBoZXhhZGVjaW1hbCBkaWdpdHMgaW4gdGhlDQo+ IGFib3ZlIGZvcm1hdCwgdGhlbiAwIGlzDQo+IA0KPiANCj4gICAgc3RvcmVkIGF0IHRoZSBsb2Nh dGlvbiBwb2ludGVkIHRvIGJ5IERhdGEuDQo+IA0KPiANCj4gQEAgLTUyOCwxMiArNTA5LDcgQEAg U3RySGV4VG9VaW50blMgKA0KPiAgICB0aGUgZmlyc3QgY2hhcmFjdGVyIHRoYXQgaXMgYSBub3Qg YSB2YWxpZA0KPiBoZXhhZGVjaW1hbCBjaGFyYWN0ZXIgb3IgTlVMTCwNCj4gDQo+IA0KPiAgICB3 aGljaGV2ZXIgb25lIGNvbWVzIGZpcnN0Lg0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0gIElmIFN0 cmluZyBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0gIElmIERhdGEgaXMgTlVM TCwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAgICBJZiBTdHJpbmcgaXMgbm90IGFsaWduZWQg aW4gYSAxNi1iaXQgYm91bmRhcnksIHRoZW4NCj4gQVNTRVJUKCkuDQo+IA0KPiANCj4gLSAgSWYg UGNkTWF4aW11bVVuaWNvZGVTdHJpbmdMZW5ndGggaXMgbm90IHplcm8sIGFuZA0KPiBTdHJpbmcg Y29udGFpbnMgbW9yZSB0aGFuDQo+IA0KPiANCj4gLSAgUGNkTWF4aW11bVVuaWNvZGVTdHJpbmdM ZW5ndGggVW5pY29kZSBjaGFyYWN0ZXJzLA0KPiBub3QgaW5jbHVkaW5nIHRoZQ0KPiANCj4gDQo+ IC0gIE51bGwtdGVybWluYXRvciwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiANCj4gDQo+IA0K PiAgICBJZiBTdHJpbmcgaGFzIG5vIHZhbGlkIGhleGFkZWNpbWFsIGRpZ2l0cyBpbiB0aGUNCj4g YWJvdmUgZm9ybWF0LCB0aGVuIDAgaXMNCj4gDQo+IA0KPiAgICBzdG9yZWQgYXQgdGhlIGxvY2F0 aW9uIHBvaW50ZWQgdG8gYnkgRGF0YS4NCj4gDQo+IA0KPiBAQCAtNjIyLDggKzU5OCw2IEBAIEFz Y2lpU3RyblNpemVTICgNCj4gDQo+IA0KPiANCj4gICAgVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFy IGFzIHN0cmNweV9zIGRlZmluZWQgaW4gQzExLg0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0gIElm IGFuIGVycm9yIHdvdWxkIGJlIHJldHVybmVkLCB0aGVuIHRoZSBmdW5jdGlvbg0KPiB3aWxsIGFs c28gQVNTRVJUKCkuDQo+IA0KPiANCj4gLQ0KPiANCj4gDQo+ICAgIElmIGFuIGVycm9yIGlzIHJl dHVybmVkLCB0aGVuIHRoZSBEZXN0aW5hdGlvbiBpcw0KPiB1bm1vZGlmaWVkLg0KPiANCj4gDQo+ IA0KPiANCj4gDQo+ICAgIEBwYXJhbSAgRGVzdGluYXRpb24gICAgICAgICAgICAgIEEgcG9pbnRl ciB0byBhDQo+IE51bGwtdGVybWluYXRlZCBBc2NpaSBzdHJpbmcuDQo+IA0KPiANCj4gQEAgLTY1 Niw4ICs2MzAsNiBAQCBBc2NpaVN0ckNweVMgKA0KPiANCj4gDQo+IA0KPiAgICBUaGlzIGZ1bmN0 aW9uIGlzIHNpbWlsYXIgYXMgc3RybmNweV9zIGRlZmluZWQgaW4NCj4gQzExLg0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IC0gIElmIGFuIGVycm9yIHdvdWxkIGJlIHJldHVybmVkLCB0aGVuIHRoZSBm dW5jdGlvbg0KPiB3aWxsIGFsc28gQVNTRVJUKCkuDQo+IA0KPiANCj4gLQ0KPiANCj4gDQo+ICAg IElmIGFuIGVycm9yIGlzIHJldHVybmVkLCB0aGVuIHRoZSBEZXN0aW5hdGlvbiBpcw0KPiB1bm1v ZGlmaWVkLg0KPiANCj4gDQo+IA0KPiANCj4gDQo+ICAgIEBwYXJhbSAgRGVzdGluYXRpb24gICAg ICAgICAgICAgIEEgcG9pbnRlciB0byBhDQo+IE51bGwtdGVybWluYXRlZCBBc2NpaSBzdHJpbmcu DQo+IA0KPiANCj4gQEAgLTY5Miw4ICs2NjQsNiBAQCBBc2NpaVN0cm5DcHlTICgNCj4gDQo+IA0K PiANCj4gICAgVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIGFzIHN0cmNhdF9zIGRlZmluZWQgaW4g QzExLg0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0gIElmIGFuIGVycm9yIHdvdWxkIGJlIHJldHVy bmVkLCB0aGVuIHRoZSBmdW5jdGlvbg0KPiB3aWxsIGFsc28gQVNTRVJUKCkuDQo+IA0KPiANCj4g LQ0KPiANCj4gDQo+ICAgIElmIGFuIGVycm9yIGlzIHJldHVybmVkLCB0aGVuIHRoZSBEZXN0aW5h dGlvbiBpcw0KPiB1bm1vZGlmaWVkLg0KPiANCj4gDQo+IA0KPiANCj4gDQo+ICAgIEBwYXJhbSAg RGVzdGluYXRpb24gICAgICAgICAgICAgIEEgcG9pbnRlciB0byBhDQo+IE51bGwtdGVybWluYXRl ZCBBc2NpaSBzdHJpbmcuDQo+IA0KPiANCj4gQEAgLTczMCw4ICs3MDAsNiBAQCBBc2NpaVN0ckNh dFMgKA0KPiANCj4gDQo+IA0KPiAgICBUaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgYXMgc3RybmNh dF9zIGRlZmluZWQgaW4NCj4gQzExLg0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0gIElmIGFuIGVy cm9yIHdvdWxkIGJlIHJldHVybmVkLCB0aGVuIHRoZSBmdW5jdGlvbg0KPiB3aWxsIGFsc28gQVNT RVJUKCkuDQo+IA0KPiANCj4gLQ0KPiANCj4gDQo+ICAgIElmIGFuIGVycm9yIGlzIHJldHVybmVk LCB0aGVuIHRoZSBEZXN0aW5hdGlvbiBpcw0KPiB1bm1vZGlmaWVkLg0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+ICAgIEBwYXJhbSAgRGVzdGluYXRpb24gICAgICAgICAgICAgIEEgcG9pbnRlciB0byBh DQo+IE51bGwtdGVybWluYXRlZCBBc2NpaSBzdHJpbmcuDQo+IA0KPiANCj4gQEAgLTc3NywxMiAr NzQ1LDYgQEAgQXNjaWlTdHJuQ2F0UyAoDQo+ICAgIGJlIGlnbm9yZWQuIFRoZW4sIHRoZSBmdW5j dGlvbiBzdG9wcyBhdCB0aGUgZmlyc3QNCj4gY2hhcmFjdGVyIHRoYXQgaXMgYSBub3QgYQ0KPiAN Cj4gDQo+ICAgIHZhbGlkIGRlY2ltYWwgY2hhcmFjdGVyIG9yIGEgTnVsbC10ZXJtaW5hdG9yLA0K PiB3aGljaGV2ZXIgb25lIGNvbWVzIGZpcnN0Lg0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0gIElm IFN0cmluZyBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0gIElmIERhdGEgaXMg TlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtICBJZiBQY2RNYXhpbXVtQXNjaWlTdHJp bmdMZW5ndGggaXMgbm90IHplcm8sIGFuZA0KPiBTdHJpbmcgY29udGFpbnMgbW9yZSB0aGFuDQo+ IA0KPiANCj4gLSAgUGNkTWF4aW11bUFzY2lpU3RyaW5nTGVuZ3RoIEFzY2lpIGNoYXJhY3RlcnMs IG5vdA0KPiBpbmNsdWRpbmcgdGhlDQo+IA0KPiANCj4gLSAgTnVsbC10ZXJtaW5hdG9yLCB0aGVu IEFTU0VSVCgpLg0KPiANCj4gDQo+IC0NCj4gDQo+IA0KPiAgICBJZiBTdHJpbmcgaGFzIG5vIHZh bGlkIGRlY2ltYWwgZGlnaXRzIGluIHRoZSBhYm92ZQ0KPiBmb3JtYXQsIHRoZW4gMCBpcyBzdG9y ZWQNCj4gDQo+IA0KPiAgICBhdCB0aGUgbG9jYXRpb24gcG9pbnRlZCB0byBieSBEYXRhLg0KPiAN Cj4gDQo+ICAgIElmIHRoZSBudW1iZXIgcmVwcmVzZW50ZWQgYnkgU3RyaW5nIGV4Y2VlZHMgdGhl DQo+IHJhbmdlIGRlZmluZWQgYnkgVUlOVE4sIHRoZW4NCj4gDQo+IA0KPiBAQCAtODMyLDEyICs3 OTQsNiBAQCBBc2NpaVN0ckRlY2ltYWxUb1VpbnRuUyAoDQo+ICAgIGJlIGlnbm9yZWQuIFRoZW4s IHRoZSBmdW5jdGlvbiBzdG9wcyBhdCB0aGUgZmlyc3QNCj4gY2hhcmFjdGVyIHRoYXQgaXMgYSBu b3QgYQ0KPiANCj4gDQo+ICAgIHZhbGlkIGRlY2ltYWwgY2hhcmFjdGVyIG9yIGEgTnVsbC10ZXJt aW5hdG9yLA0KPiB3aGljaGV2ZXIgb25lIGNvbWVzIGZpcnN0Lg0KPiANCj4gDQo+IA0KPiANCj4g DQo+IC0gIElmIFN0cmluZyBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0gIElm IERhdGEgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtICBJZiBQY2RNYXhpbXVt QXNjaWlTdHJpbmdMZW5ndGggaXMgbm90IHplcm8sIGFuZA0KPiBTdHJpbmcgY29udGFpbnMgbW9y ZSB0aGFuDQo+IA0KPiANCj4gLSAgUGNkTWF4aW11bUFzY2lpU3RyaW5nTGVuZ3RoIEFzY2lpIGNo YXJhY3RlcnMsIG5vdA0KPiBpbmNsdWRpbmcgdGhlDQo+IA0KPiANCj4gLSAgTnVsbC10ZXJtaW5h dG9yLCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0NCj4gDQo+IA0KPiAgICBJZiBTdHJpbmcg aGFzIG5vIHZhbGlkIGRlY2ltYWwgZGlnaXRzIGluIHRoZSBhYm92ZQ0KPiBmb3JtYXQsIHRoZW4g MCBpcyBzdG9yZWQNCj4gDQo+IA0KPiAgICBhdCB0aGUgbG9jYXRpb24gcG9pbnRlZCB0byBieSBE YXRhLg0KPiANCj4gDQo+ICAgIElmIHRoZSBudW1iZXIgcmVwcmVzZW50ZWQgYnkgU3RyaW5nIGV4 Y2VlZHMgdGhlDQo+IHJhbmdlIGRlZmluZWQgYnkgVUlOVDY0LCB0aGVuDQo+IA0KPiANCj4gQEAg LTg5MSwxMiArODQ3LDYgQEAgQXNjaWlTdHJEZWNpbWFsVG9VaW50NjRTICgNCj4gICAgY2hhcmFj dGVyIHRoYXQgaXMgYSBub3QgYSB2YWxpZCBoZXhhZGVjaW1hbA0KPiBjaGFyYWN0ZXIgb3IgTnVs bC10ZXJtaW5hdG9yLA0KPiANCj4gDQo+ICAgIHdoaWNoZXZlciBvbiBjb21lcyBmaXJzdC4NCj4g DQo+IA0KPiANCj4gDQo+IA0KPiAtICBJZiBTdHJpbmcgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4N Cj4gDQo+IA0KPiAtICBJZiBEYXRhIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4g LSAgSWYgUGNkTWF4aW11bUFzY2lpU3RyaW5nTGVuZ3RoIGlzIG5vdCB6ZXJvLCBhbmQNCj4gU3Ry aW5nIGNvbnRhaW5zIG1vcmUgdGhhbg0KPiANCj4gDQo+IC0gIFBjZE1heGltdW1Bc2NpaVN0cmlu Z0xlbmd0aCBBc2NpaSBjaGFyYWN0ZXJzLCBub3QNCj4gaW5jbHVkaW5nIHRoZQ0KPiANCj4gDQo+ IC0gIE51bGwtdGVybWluYXRvciwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtDQo+IA0KPiAN Cj4gICAgSWYgU3RyaW5nIGhhcyBubyB2YWxpZCBoZXhhZGVjaW1hbCBkaWdpdHMgaW4gdGhlDQo+ IGFib3ZlIGZvcm1hdCwgdGhlbiAwIGlzDQo+IA0KPiANCj4gICAgc3RvcmVkIGF0IHRoZSBsb2Nh dGlvbiBwb2ludGVkIHRvIGJ5IERhdGEuDQo+IA0KPiANCj4gICAgSWYgdGhlIG51bWJlciByZXBy ZXNlbnRlZCBieSBTdHJpbmcgZXhjZWVkcyB0aGUNCj4gcmFuZ2UgZGVmaW5lZCBieSBVSU5UTiwg dGhlbg0KPiANCj4gDQo+IEBAIC05NTAsMTIgKzkwMCw2IEBAIEFzY2lpU3RySGV4VG9VaW50blMg KA0KPiAgICBjaGFyYWN0ZXIgdGhhdCBpcyBhIG5vdCBhIHZhbGlkIGhleGFkZWNpbWFsDQo+IGNo YXJhY3RlciBvciBOdWxsLXRlcm1pbmF0b3IsDQo+IA0KPiANCj4gICAgd2hpY2hldmVyIG9uIGNv bWVzIGZpcnN0Lg0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0gIElmIFN0cmluZyBpcyBOVUxMLCB0 aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0gIElmIERhdGEgaXMgTlVMTCwgdGhlbiBBU1NFUlQo KS4NCj4gDQo+IA0KPiAtICBJZiBQY2RNYXhpbXVtQXNjaWlTdHJpbmdMZW5ndGggaXMgbm90IHpl cm8sIGFuZA0KPiBTdHJpbmcgY29udGFpbnMgbW9yZSB0aGFuDQo+IA0KPiANCj4gLSAgUGNkTWF4 aW11bUFzY2lpU3RyaW5nTGVuZ3RoIEFzY2lpIGNoYXJhY3RlcnMsIG5vdA0KPiBpbmNsdWRpbmcg dGhlDQo+IA0KPiANCj4gLSAgTnVsbC10ZXJtaW5hdG9yLCB0aGVuIEFTU0VSVCgpLg0KPiANCj4g DQo+IC0NCj4gDQo+IA0KPiAgICBJZiBTdHJpbmcgaGFzIG5vIHZhbGlkIGhleGFkZWNpbWFsIGRp Z2l0cyBpbiB0aGUNCj4gYWJvdmUgZm9ybWF0LCB0aGVuIDAgaXMNCj4gDQo+IA0KPiAgICBzdG9y ZWQgYXQgdGhlIGxvY2F0aW9uIHBvaW50ZWQgdG8gYnkgRGF0YS4NCj4gDQo+IA0KPiAgICBJZiB0 aGUgbnVtYmVyIHJlcHJlc2VudGVkIGJ5IFN0cmluZyBleGNlZWRzIHRoZQ0KPiByYW5nZSBkZWZp bmVkIGJ5IFVJTlQ2NCwgdGhlbg0KPiANCj4gDQo+IEBAIC0xNTA2LDE2ICsxNDUwLDggQEAgU3Ry SGV4VG9VaW50NjQgKA0KPiAgICAiOjoiIGNhbiBiZSB1c2VkIHRvIGNvbXByZXNzIG9uZSBvciBt b3JlIGdyb3VwcyBvZiBYDQo+IHdoZW4gWCBjb250YWlucyBvbmx5IDAuDQo+IA0KPiANCj4gICAg VGhlICI6OiIgY2FuIG9ubHkgYXBwZWFyIG9uY2UgaW4gdGhlIFN0cmluZy4NCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiAtICBJZiBTdHJpbmcgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0K PiAtDQo+IA0KPiANCj4gLSAgSWYgQWRkcmVzcyBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiAN Cj4gDQo+IC0NCj4gDQo+IA0KPiAgICBJZiBTdHJpbmcgaXMgbm90IGFsaWduZWQgaW4gYSAxNi1i aXQgYm91bmRhcnksIHRoZW4NCj4gQVNTRVJUKCkuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLSAg SWYgUGNkTWF4aW11bVVuaWNvZGVTdHJpbmdMZW5ndGggaXMgbm90IHplcm8sIGFuZA0KPiBTdHJp bmcgY29udGFpbnMgbW9yZSB0aGFuDQo+IA0KPiANCj4gLSAgUGNkTWF4aW11bVVuaWNvZGVTdHJp bmdMZW5ndGggVW5pY29kZSBjaGFyYWN0ZXJzLA0KPiBub3QgaW5jbHVkaW5nIHRoZQ0KPiANCj4g DQo+IC0gIE51bGwtdGVybWluYXRvciwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtDQo+IA0K PiANCj4gICAgSWYgRW5kUG9pbnRlciBpcyBub3QgTlVMTCBhbmQgQWRkcmVzcyBpcyB0cmFuc2xh dGVkDQo+IGZyb20gU3RyaW5nLCBhIHBvaW50ZXINCj4gDQo+IA0KPiAgICB0byB0aGUgY2hhcmFj dGVyIHRoYXQgc3RvcHBlZCB0aGUgc2NhbiBpcyBzdG9yZWQgYXQNCj4gdGhlIGxvY2F0aW9uIHBv aW50ZWQgdG8NCj4gDQo+IA0KPiAgICBieSBFbmRQb2ludGVyLg0KPiANCj4gDQo+IEBAIC0xNTY3 LDE2ICsxNTAzLDggQEAgU3RyVG9JcHY2QWRkcmVzcyAoDQo+ICAgIFdoZW4gL1AgaXMgaW4gdGhl IFN0cmluZywgdGhlIGZ1bmN0aW9uIHN0b3BzIGF0IHRoZQ0KPiBmaXJzdCBjaGFyYWN0ZXIgdGhh dCBpcyBub3QNCj4gDQo+IA0KPiAgICBhIHZhbGlkIGRlY2ltYWwgZGlnaXQgY2hhcmFjdGVyIGFm dGVyIFAgaXMNCj4gY29udmVydGVkLg0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0gIElmIFN0cmlu ZyBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0NCj4gDQo+IA0KPiAtICBJZiBB ZGRyZXNzIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gLQ0KPiANCj4gDQo+ICAg IElmIFN0cmluZyBpcyBub3QgYWxpZ25lZCBpbiBhIDE2LWJpdCBib3VuZGFyeSwgdGhlbg0KPiBB U1NFUlQoKS4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtICBJZiBQY2RNYXhpbXVtVW5pY29kZVN0 cmluZ0xlbmd0aCBpcyBub3QgemVybywgYW5kDQo+IFN0cmluZyBjb250YWlucyBtb3JlIHRoYW4N Cj4gDQo+IA0KPiAtICBQY2RNYXhpbXVtVW5pY29kZVN0cmluZ0xlbmd0aCBVbmljb2RlIGNoYXJh Y3RlcnMsDQo+IG5vdCBpbmNsdWRpbmcgdGhlDQo+IA0KPiANCj4gLSAgTnVsbC10ZXJtaW5hdG9y LCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0NCj4gDQo+IA0KPiAgICBJZiBFbmRQb2ludGVy IGlzIG5vdCBOVUxMIGFuZCBBZGRyZXNzIGlzIHRyYW5zbGF0ZWQNCj4gZnJvbSBTdHJpbmcsIGEg cG9pbnRlcg0KPiANCj4gDQo+ICAgIHRvIHRoZSBjaGFyYWN0ZXIgdGhhdCBzdG9wcGVkIHRoZSBz Y2FuIGlzIHN0b3JlZCBhdA0KPiB0aGUgbG9jYXRpb24gcG9pbnRlZCB0bw0KPiANCj4gDQo+ICAg IGJ5IEVuZFBvaW50ZXIuDQo+IA0KPiANCj4gQEAgLTE2NDAsOCArMTU2OCw2IEBAIFN0clRvSXB2 NEFkZHJlc3MgKA0KPiAgICAgICAgICAgICAgICAgICAgb28gICAgICAgICAgRGF0YTRbNDg6NTVd DQo+IA0KPiANCj4gICAgICAgICAgICAgICAgICAgIHBwICAgICAgICAgIERhdGE0WzU2OjYzXQ0K PiANCj4gDQo+IA0KPiANCj4gDQo+IC0gIElmIFN0cmluZyBpcyBOVUxMLCB0aGVuIEFTU0VSVCgp Lg0KPiANCj4gDQo+IC0gIElmIEd1aWQgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0K PiAgICBJZiBTdHJpbmcgaXMgbm90IGFsaWduZWQgaW4gYSAxNi1iaXQgYm91bmRhcnksIHRoZW4N Cj4gQVNTRVJUKCkuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gICAgQHBhcmFtICBTdHJpbmcgICAg ICAgICAgICAgICAgICAgUG9pbnRlciB0byBhIE51bGwtDQo+IHRlcm1pbmF0ZWQgVW5pY29kZSBz dHJpbmcuDQo+IA0KPiANCj4gQEAgLTE2NzYsMTcgKzE2MDIsNiBAQCBTdHJUb0d1aWQgKA0KPiAN Cj4gDQo+IA0KPiAgICBJZiBTdHJpbmcgaXMgbm90IGFsaWduZWQgaW4gYSAxNi1iaXQgYm91bmRh cnksIHRoZW4NCj4gQVNTRVJUKCkuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLSAgSWYgU3RyaW5n IGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gLQ0KPiANCj4gDQo+IC0gIElmIEJ1 ZmZlciBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0NCj4gDQo+IA0KPiAtICBJ ZiBMZW5ndGggaXMgbm90IG11bHRpcGxlIG9mIDIsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4g LQ0KPiANCj4gDQo+IC0gIElmIFBjZE1heGltdW1Vbmljb2RlU3RyaW5nTGVuZ3RoIGlzIG5vdCB6 ZXJvIGFuZA0KPiBMZW5ndGggaXMgZ3JlYXRlciB0aGFuDQo+IA0KPiANCj4gLSAgUGNkTWF4aW11 bVVuaWNvZGVTdHJpbmdMZW5ndGgsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gLQ0KPiANCj4g DQo+IC0gIElmIE1heEJ1ZmZlclNpemUgaXMgbGVzcyB0aGFuIChMZW5ndGggLyAyKSwgdGhlbg0K PiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtDQo+IA0KPiANCj4gICAgQHBhcmFtICBTdHJpbmcgICAg ICAgICAgICAgICAgICAgUG9pbnRlciB0byBhIE51bGwtDQo+IHRlcm1pbmF0ZWQgVW5pY29kZSBz dHJpbmcuDQo+IA0KPiANCj4gICAgQHBhcmFtICBMZW5ndGggICAgICAgICAgICAgICAgICAgVGhl IG51bWJlciBvZg0KPiBVbmljb2RlIGNoYXJhY3RlcnMgdG8gZGVjb2RlLg0KPiANCj4gDQo+ICAg IEBwYXJhbSAgQnVmZmVyICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlDQo+IGNvbnZl cnRlZCBieXRlcyBhcnJheS4NCj4gDQo+IA0KPiBAQCAtMTc3Nyw3ICsxNjkyLDYgQEAgVW5pY29k ZVN0clRvQXNjaWlTdHIgKA0KPiAgICB0aGUgdXBwZXIgOCBiaXRzLCB0aGVuIEFTU0VSVCgpLg0K PiANCj4gDQo+IA0KPiANCj4gDQo+ICAgIElmIFNvdXJjZSBpcyBub3QgYWxpZ25lZCBvbiBhIDE2 LWJpdCBib3VuZGFyeSwgdGhlbg0KPiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtICBJZiBhbiBlcnJv ciB3b3VsZCBiZSByZXR1cm5lZCwgdGhlbiB0aGUgZnVuY3Rpb24NCj4gd2lsbCBhbHNvIEFTU0VS VCgpLg0KPiANCj4gDQo+IA0KPiANCj4gDQo+ICAgIElmIGFuIGVycm9yIGlzIHJldHVybmVkLCB0 aGVuIHRoZSBEZXN0aW5hdGlvbiBpcw0KPiB1bm1vZGlmaWVkLg0KPiANCj4gDQo+IA0KPiANCj4g DQo+IEBAIC0xODI0LDcgKzE3MzgsNiBAQCBVbmljb2RlU3RyVG9Bc2NpaVN0clMgKA0KPiAgICBJ ZiBhbnkgVW5pY29kZSBjaGFyYWN0ZXJzIGluIFNvdXJjZSBjb250YWluIG5vbi16ZXJvDQo+IHZh bHVlIGluIHRoZSB1cHBlciA4DQo+IA0KPiANCj4gICAgYml0cywgdGhlbiBBU1NFUlQoKS4NCj4g DQo+IA0KPiAgICBJZiBTb3VyY2UgaXMgbm90IGFsaWduZWQgb24gYSAxNi1iaXQgYm91bmRhcnks IHRoZW4NCj4gQVNTRVJUKCkuDQo+IA0KPiANCj4gLSAgSWYgYW4gZXJyb3Igd291bGQgYmUgcmV0 dXJuZWQsIHRoZW4gdGhlIGZ1bmN0aW9uDQo+IHdpbGwgYWxzbyBBU1NFUlQoKS4NCj4gDQo+IA0K PiANCj4gDQo+IA0KPiAgICBJZiBhbiBlcnJvciBpcyByZXR1cm5lZCwgdGhlbiB0aGUgRGVzdGlu YXRpb24gaXMNCj4gdW5tb2RpZmllZC4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiBAQCAtMjM4OCwx MCArMjMwMSw2IEBAIEFzY2lpU3RySGV4VG9VaW50NjQgKA0KPiAgICAiOjoiIGNhbiBiZSB1c2Vk IHRvIGNvbXByZXNzIG9uZSBvciBtb3JlIGdyb3VwcyBvZiBYDQo+IHdoZW4gWCBjb250YWlucyBv bmx5IDAuDQo+IA0KPiANCj4gICAgVGhlICI6OiIgY2FuIG9ubHkgYXBwZWFyIG9uY2UgaW4gdGhl IFN0cmluZy4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtICBJZiBTdHJpbmcgaXMgTlVMTCwgdGhl biBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtDQo+IA0KPiANCj4gLSAgSWYgQWRkcmVzcyBpcyBOVUxM LCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0NCj4gDQo+IA0KPiAgICBJZiBFbmRQb2ludGVy IGlzIG5vdCBOVUxMIGFuZCBBZGRyZXNzIGlzIHRyYW5zbGF0ZWQNCj4gZnJvbSBTdHJpbmcsIGEg cG9pbnRlcg0KPiANCj4gDQo+ICAgIHRvIHRoZSBjaGFyYWN0ZXIgdGhhdCBzdG9wcGVkIHRoZSBz Y2FuIGlzIHN0b3JlZCBhdA0KPiB0aGUgbG9jYXRpb24gcG9pbnRlZCB0bw0KPiANCj4gDQo+ICAg IGJ5IEVuZFBvaW50ZXIuDQo+IA0KPiANCj4gQEAgLTI0NDMsMTAgKzIzNTIsNiBAQCBBc2NpaVN0 clRvSXB2NkFkZHJlc3MgKA0KPiAgICBXaGVuIC9QIGlzIGluIHRoZSBTdHJpbmcsIHRoZSBmdW5j dGlvbiBzdG9wcyBhdCB0aGUNCj4gZmlyc3QgY2hhcmFjdGVyIHRoYXQgaXMgbm90DQo+IA0KPiAN Cj4gICAgYSB2YWxpZCBkZWNpbWFsIGRpZ2l0IGNoYXJhY3RlciBhZnRlciBQIGlzDQo+IGNvbnZl cnRlZC4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtICBJZiBTdHJpbmcgaXMgTlVMTCwgdGhlbiBB U1NFUlQoKS4NCj4gDQo+IA0KPiAtDQo+IA0KPiANCj4gLSAgSWYgQWRkcmVzcyBpcyBOVUxMLCB0 aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0NCj4gDQo+IA0KPiAgICBJZiBFbmRQb2ludGVyIGlz IG5vdCBOVUxMIGFuZCBBZGRyZXNzIGlzIHRyYW5zbGF0ZWQNCj4gZnJvbSBTdHJpbmcsIGEgcG9p bnRlcg0KPiANCj4gDQo+ICAgIHRvIHRoZSBjaGFyYWN0ZXIgdGhhdCBzdG9wcGVkIHRoZSBzY2Fu IGlzIHN0b3JlZCBhdA0KPiB0aGUgbG9jYXRpb24gcG9pbnRlZCB0bw0KPiANCj4gDQo+ICAgIGJ5 IEVuZFBvaW50ZXIuDQo+IA0KPiANCj4gQEAgLTI1MDgsOSArMjQxMyw2IEBAIEFzY2lpU3RyVG9J cHY0QWRkcmVzcyAoDQo+ICAgICAgICAgICAgICAgICAgICBvbyAgICAgICAgICBEYXRhNFs0ODo1 NV0NCj4gDQo+IA0KPiAgICAgICAgICAgICAgICAgICAgcHAgICAgICAgICAgRGF0YTRbNTY6NjNd DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLSAgSWYgU3RyaW5nIGlzIE5VTEwsIHRoZW4gQVNTRVJU KCkuDQo+IA0KPiANCj4gLSAgSWYgR3VpZCBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiANCj4g DQo+IC0NCj4gDQo+IA0KPiAgICBAcGFyYW0gIFN0cmluZyAgICAgICAgICAgICAgICAgICBQb2lu dGVyIHRvIGEgTnVsbC0NCj4gdGVybWluYXRlZCBBU0NJSSBzdHJpbmcuDQo+IA0KPiANCj4gICAg QHBhcmFtICBHdWlkICAgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUNCj4gY29udmVy dGVkIEdVSUQuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gQEAgLTI1NDEsMTcgKzI0NDMsNiBAQCBB c2NpaVN0clRvR3VpZCAoDQo+ICAgIGRlY29kaW5nIHN0b3BzIGFmdGVyIExlbmd0aCBvZiBjaGFy YWN0ZXJzIGFuZA0KPiBvdXRwdXRzIEJ1ZmZlciBjb250YWluaW5nDQo+IA0KPiANCj4gICAgKExl bmd0aCAvIDIpIGJ5dGVzLg0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0gIElmIFN0cmluZyBpcyBO VUxMLCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0NCj4gDQo+IA0KPiAtICBJZiBCdWZmZXIg aXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtDQo+IA0KPiANCj4gLSAgSWYgTGVu Z3RoIGlzIG5vdCBtdWx0aXBsZSBvZiAyLCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0NCj4g DQo+IA0KPiAtICBJZiBQY2RNYXhpbXVtQXNjaWlTdHJpbmdMZW5ndGggaXMgbm90IHplcm8gYW5k DQo+IExlbmd0aCBpcyBncmVhdGVyIHRoYW4NCj4gDQo+IA0KPiAtICBQY2RNYXhpbXVtQXNjaWlT dHJpbmdMZW5ndGgsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gLQ0KPiANCj4gDQo+IC0gIElm IE1heEJ1ZmZlclNpemUgaXMgbGVzcyB0aGFuIChMZW5ndGggLyAyKSwgdGhlbg0KPiBBU1NFUlQo KS4NCj4gDQo+IA0KPiAtDQo+IA0KPiANCj4gICAgQHBhcmFtICBTdHJpbmcgICAgICAgICAgICAg ICAgICAgUG9pbnRlciB0byBhIE51bGwtDQo+IHRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nLg0KPiAN Cj4gDQo+ICAgIEBwYXJhbSAgTGVuZ3RoICAgICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2Yg QVNDSUkNCj4gY2hhcmFjdGVycyB0byBkZWNvZGUuDQo+IA0KPiANCj4gICAgQHBhcmFtICBCdWZm ZXIgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUNCj4gY29udmVydGVkIGJ5dGVzIGFy cmF5Lg0KPiANCj4gDQo+IEBAIC0yNjMyLDcgKzI1MjMsNiBAQCBBc2NpaVN0clRvVW5pY29kZVN0 ciAoDQo+ICAgIGVxdWFsIG9yIGdyZWF0ZXIgdGhhbiAoKEFzY2lpU3RyTGVuIChTb3VyY2UpICsg MSkgKg0KPiBzaXplb2YgKENIQVIxNikpIGluIGJ5dGVzLg0KPiANCj4gDQo+IA0KPiANCj4gDQo+ ICAgIElmIERlc3RpbmF0aW9uIGlzIG5vdCBhbGlnbmVkIG9uIGEgMTYtYml0IGJvdW5kYXJ5LA0K PiB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0gIElmIGFuIGVycm9yIHdvdWxkIGJlIHJldHVy bmVkLCB0aGVuIHRoZSBmdW5jdGlvbg0KPiB3aWxsIGFsc28gQVNTRVJUKCkuDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gICAgSWYgYW4gZXJyb3IgaXMgcmV0dXJuZWQsIHRoZW4gdGhlIERlc3RpbmF0 aW9uIGlzDQo+IHVubW9kaWZpZWQuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gQEAgLTI2NzgsNyAr MjU2OCw2IEBAIEFzY2lpU3RyVG9Vbmljb2RlU3RyUyAoDQo+ICAgICgoTUlOKEFzY2lpU3RyTGVu KFNvdXJjZSksIExlbmd0aCkgKyAxKSAqIHNpemVvZg0KPiAoQ0hBUjgpKSBpbiBieXRlcy4NCj4g DQo+IA0KPiANCj4gDQo+IA0KPiAgICBJZiBEZXN0aW5hdGlvbiBpcyBub3QgYWxpZ25lZCBvbiBh IDE2LWJpdCBib3VuZGFyeSwNCj4gdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtICBJZiBhbiBl cnJvciB3b3VsZCBiZSByZXR1cm5lZCwgdGhlbiB0aGUgZnVuY3Rpb24NCj4gd2lsbCBhbHNvIEFT U0VSVCgpLg0KPiANCj4gDQo+IA0KPiANCj4gDQo+ICAgIElmIGFuIGVycm9yIGlzIHJldHVybmVk LCB0aGVuIERlc3RpbmF0aW9uIGFuZA0KPiBEZXN0aW5hdGlvbkxlbmd0aCBhcmUNCj4gDQo+IA0K PiAgICB1bm1vZGlmaWVkLg0KPiANCj4gDQo+IGRpZmYgLS1naXQgYS9NZGVQa2cvTGlicmFyeS9C YXNlTGliL1NhZmVTdHJpbmcuYw0KPiBiL01kZVBrZy9MaWJyYXJ5L0Jhc2VMaWIvU2FmZVN0cmlu Zy5jDQo+IGluZGV4IDdkYzAzZDJjYWEuLjQxZDkxMzdiODMgMTAwNjQ0DQo+IC0tLSBhL01kZVBr Zy9MaWJyYXJ5L0Jhc2VMaWIvU2FmZVN0cmluZy5jDQo+ICsrKyBiL01kZVBrZy9MaWJyYXJ5L0Jh c2VMaWIvU2FmZVN0cmluZy5jDQo+IEBAIC0xNCw3ICsxNCw2IEBADQo+IA0KPiANCj4gDQo+ICAj ZGVmaW5lIFNBRkVfU1RSSU5HX0NPTlNUUkFJTlRfQ0hFQ0soRXhwcmVzc2lvbiwNCj4gU3RhdHVz KSAgXA0KPiANCj4gDQo+ICAgIGRvIHsgXA0KPiANCj4gDQo+IC0gICAgQVNTRVJUIChFeHByZXNz aW9uKTsgXA0KPiANCj4gDQo+ICAgICAgaWYgKCEoRXhwcmVzc2lvbikpIHsgXA0KPiANCj4gDQo+ ICAgICAgICByZXR1cm4gU3RhdHVzOyBcDQo+IA0KPiANCj4gICAgICB9IFwNCj4gDQo+IA0KPiBA QCAtMTk3LDcgKzE5Niw2IEBAIFN0cm5TaXplUyAoDQo+IA0KPiANCj4gDQo+ICAgIElmIERlc3Rp bmF0aW9uIGlzIG5vdCBhbGlnbmVkIG9uIGEgMTYtYml0IGJvdW5kYXJ5LA0KPiB0aGVuIEFTU0VS VCgpLg0KPiANCj4gDQo+ICAgIElmIFNvdXJjZSBpcyBub3QgYWxpZ25lZCBvbiBhIDE2LWJpdCBi b3VuZGFyeSwgdGhlbg0KPiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtICBJZiBhbiBlcnJvciB3b3Vs ZCBiZSByZXR1cm5lZCwgdGhlbiB0aGUgZnVuY3Rpb24NCj4gd2lsbCBhbHNvIEFTU0VSVCgpLg0K PiANCj4gDQo+IA0KPiANCj4gDQo+ICAgIElmIGFuIGVycm9yIGlzIHJldHVybmVkLCB0aGVuIHRo ZSBEZXN0aW5hdGlvbiBpcw0KPiB1bm1vZGlmaWVkLg0KPiANCj4gDQo+IA0KPiANCj4gDQo+IEBA IC0yNzksNyArMjc3LDYgQEAgU3RyQ3B5UyAoDQo+IA0KPiANCj4gDQo+ICAgIElmIExlbmd0aCA+ IDAgYW5kIERlc3RpbmF0aW9uIGlzIG5vdCBhbGlnbmVkIG9uIGENCj4gMTYtYml0IGJvdW5kYXJ5 LCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+ICAgIElmIExlbmd0aCA+IDAgYW5kIFNvdXJjZSBp cyBub3QgYWxpZ25lZCBvbiBhIDE2LWJpdA0KPiBib3VuZGFyeSwgdGhlbiBBU1NFUlQoKS4NCj4g DQo+IA0KPiAtICBJZiBhbiBlcnJvciB3b3VsZCBiZSByZXR1cm5lZCwgdGhlbiB0aGUgZnVuY3Rp b24NCj4gd2lsbCBhbHNvIEFTU0VSVCgpLg0KPiANCj4gDQo+IA0KPiANCj4gDQo+ICAgIElmIGFu IGVycm9yIGlzIHJldHVybmVkLCB0aGVuIHRoZSBEZXN0aW5hdGlvbiBpcw0KPiB1bm1vZGlmaWVk Lg0KPiANCj4gDQo+IA0KPiANCj4gDQo+IEBAIC0zNzIsNyArMzY5LDYgQEAgU3RybkNweVMgKA0K PiANCj4gDQo+IA0KPiAgICBJZiBEZXN0aW5hdGlvbiBpcyBub3QgYWxpZ25lZCBvbiBhIDE2LWJp dCBib3VuZGFyeSwNCj4gdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAgICBJZiBTb3VyY2UgaXMg bm90IGFsaWduZWQgb24gYSAxNi1iaXQgYm91bmRhcnksIHRoZW4NCj4gQVNTRVJUKCkuDQo+IA0K PiANCj4gLSAgSWYgYW4gZXJyb3Igd291bGQgYmUgcmV0dXJuZWQsIHRoZW4gdGhlIGZ1bmN0aW9u DQo+IHdpbGwgYWxzbyBBU1NFUlQoKS4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAgICBJZiBhbiBl cnJvciBpcyByZXR1cm5lZCwgdGhlbiB0aGUgRGVzdGluYXRpb24gaXMNCj4gdW5tb2RpZmllZC4N Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiBAQCAtNDczLDcgKzQ2OSw2IEBAIFN0ckNhdFMgKA0KPiAN Cj4gDQo+IA0KPiAgICBJZiBEZXN0aW5hdGlvbiBpcyBub3QgYWxpZ25lZCBvbiBhIDE2LWJpdCBi b3VuZGFyeSwNCj4gdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAgICBJZiBTb3VyY2UgaXMgbm90 IGFsaWduZWQgb24gYSAxNi1iaXQgYm91bmRhcnksIHRoZW4NCj4gQVNTRVJUKCkuDQo+IA0KPiAN Cj4gLSAgSWYgYW4gZXJyb3Igd291bGQgYmUgcmV0dXJuZWQsIHRoZW4gdGhlIGZ1bmN0aW9uDQo+ IHdpbGwgYWxzbyBBU1NFUlQoKS4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAgICBJZiBhbiBlcnJv ciBpcyByZXR1cm5lZCwgdGhlbiB0aGUgRGVzdGluYXRpb24gaXMNCj4gdW5tb2RpZmllZC4NCj4g DQo+IA0KPiANCj4gDQo+IA0KPiBAQCAtNTkwLDEyICs1ODUsNyBAQCBTdHJuQ2F0UyAoDQo+ICAg IGJlIGlnbm9yZWQuIFRoZW4sIHRoZSBmdW5jdGlvbiBzdG9wcyBhdCB0aGUgZmlyc3QNCj4gY2hh cmFjdGVyIHRoYXQgaXMgYSBub3QgYQ0KPiANCj4gDQo+ICAgIHZhbGlkIGRlY2ltYWwgY2hhcmFj dGVyIG9yIGEgTnVsbC10ZXJtaW5hdG9yLA0KPiB3aGljaGV2ZXIgb25lIGNvbWVzIGZpcnN0Lg0K PiANCj4gDQo+IA0KPiANCj4gDQo+IC0gIElmIFN0cmluZyBpcyBOVUxMLCB0aGVuIEFTU0VSVCgp Lg0KPiANCj4gDQo+IC0gIElmIERhdGEgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0K PiAgICBJZiBTdHJpbmcgaXMgbm90IGFsaWduZWQgaW4gYSAxNi1iaXQgYm91bmRhcnksIHRoZW4N Cj4gQVNTRVJUKCkuDQo+IA0KPiANCj4gLSAgSWYgUGNkTWF4aW11bVVuaWNvZGVTdHJpbmdMZW5n dGggaXMgbm90IHplcm8sIGFuZA0KPiBTdHJpbmcgY29udGFpbnMgbW9yZSB0aGFuDQo+IA0KPiAN Cj4gLSAgUGNkTWF4aW11bVVuaWNvZGVTdHJpbmdMZW5ndGggVW5pY29kZSBjaGFyYWN0ZXJzLA0K PiBub3QgaW5jbHVkaW5nIHRoZQ0KPiANCj4gDQo+IC0gIE51bGwtdGVybWluYXRvciwgdGhlbiBB U1NFUlQoKS4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAgICBJZiBTdHJpbmcgaGFzIG5vIHZhbGlk IGRlY2ltYWwgZGlnaXRzIGluIHRoZSBhYm92ZQ0KPiBmb3JtYXQsIHRoZW4gMCBpcyBzdG9yZWQN Cj4gDQo+IA0KPiAgICBhdCB0aGUgbG9jYXRpb24gcG9pbnRlZCB0byBieSBEYXRhLg0KPiANCj4g DQo+IEBAIC03MDUsMTIgKzY5NSw3IEBAIFN0ckRlY2ltYWxUb1VpbnRuUyAoDQo+ICAgIGJlIGln bm9yZWQuIFRoZW4sIHRoZSBmdW5jdGlvbiBzdG9wcyBhdCB0aGUgZmlyc3QNCj4gY2hhcmFjdGVy IHRoYXQgaXMgYSBub3QgYQ0KPiANCj4gDQo+ICAgIHZhbGlkIGRlY2ltYWwgY2hhcmFjdGVyIG9y IGEgTnVsbC10ZXJtaW5hdG9yLA0KPiB3aGljaGV2ZXIgb25lIGNvbWVzIGZpcnN0Lg0KPiANCj4g DQo+IA0KPiANCj4gDQo+IC0gIElmIFN0cmluZyBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiAN Cj4gDQo+IC0gIElmIERhdGEgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAgICBJ ZiBTdHJpbmcgaXMgbm90IGFsaWduZWQgaW4gYSAxNi1iaXQgYm91bmRhcnksIHRoZW4NCj4gQVNT RVJUKCkuDQo+IA0KPiANCj4gLSAgSWYgUGNkTWF4aW11bVVuaWNvZGVTdHJpbmdMZW5ndGggaXMg bm90IHplcm8sIGFuZA0KPiBTdHJpbmcgY29udGFpbnMgbW9yZSB0aGFuDQo+IA0KPiANCj4gLSAg UGNkTWF4aW11bVVuaWNvZGVTdHJpbmdMZW5ndGggVW5pY29kZSBjaGFyYWN0ZXJzLA0KPiBub3Qg aW5jbHVkaW5nIHRoZQ0KPiANCj4gDQo+IC0gIE51bGwtdGVybWluYXRvciwgdGhlbiBBU1NFUlQo KS4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAgICBJZiBTdHJpbmcgaGFzIG5vIHZhbGlkIGRlY2lt YWwgZGlnaXRzIGluIHRoZSBhYm92ZQ0KPiBmb3JtYXQsIHRoZW4gMCBpcyBzdG9yZWQNCj4gDQo+ IA0KPiAgICBhdCB0aGUgbG9jYXRpb24gcG9pbnRlZCB0byBieSBEYXRhLg0KPiANCj4gDQo+IEBA IC04MjUsMTIgKzgxMCw3IEBAIFN0ckRlY2ltYWxUb1VpbnQ2NFMgKA0KPiAgICB0aGUgZmlyc3Qg Y2hhcmFjdGVyIHRoYXQgaXMgYSBub3QgYSB2YWxpZA0KPiBoZXhhZGVjaW1hbCBjaGFyYWN0ZXIg b3IgTlVMTCwNCj4gDQo+IA0KPiAgICB3aGljaGV2ZXIgb25lIGNvbWVzIGZpcnN0Lg0KPiANCj4g DQo+IA0KPiANCj4gDQo+IC0gIElmIFN0cmluZyBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiAN Cj4gDQo+IC0gIElmIERhdGEgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAgICBJ ZiBTdHJpbmcgaXMgbm90IGFsaWduZWQgaW4gYSAxNi1iaXQgYm91bmRhcnksIHRoZW4NCj4gQVNT RVJUKCkuDQo+IA0KPiANCj4gLSAgSWYgUGNkTWF4aW11bVVuaWNvZGVTdHJpbmdMZW5ndGggaXMg bm90IHplcm8sIGFuZA0KPiBTdHJpbmcgY29udGFpbnMgbW9yZSB0aGFuDQo+IA0KPiANCj4gLSAg UGNkTWF4aW11bVVuaWNvZGVTdHJpbmdMZW5ndGggVW5pY29kZSBjaGFyYWN0ZXJzLA0KPiBub3Qg aW5jbHVkaW5nIHRoZQ0KPiANCj4gDQo+IC0gIE51bGwtdGVybWluYXRvciwgdGhlbiBBU1NFUlQo KS4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAgICBJZiBTdHJpbmcgaGFzIG5vIHZhbGlkIGhleGFk ZWNpbWFsIGRpZ2l0cyBpbiB0aGUNCj4gYWJvdmUgZm9ybWF0LCB0aGVuIDAgaXMNCj4gDQo+IA0K PiAgICBzdG9yZWQgYXQgdGhlIGxvY2F0aW9uIHBvaW50ZWQgdG8gYnkgRGF0YS4NCj4gDQo+IA0K PiBAQCAtOTU2LDEyICs5MzYsNyBAQCBTdHJIZXhUb1VpbnRuUyAoDQo+ICAgIHRoZSBmaXJzdCBj aGFyYWN0ZXIgdGhhdCBpcyBhIG5vdCBhIHZhbGlkDQo+IGhleGFkZWNpbWFsIGNoYXJhY3RlciBv ciBOVUxMLA0KPiANCj4gDQo+ICAgIHdoaWNoZXZlciBvbmUgY29tZXMgZmlyc3QuDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gLSAgSWYgU3RyaW5nIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+IA0K PiANCj4gLSAgSWYgRGF0YSBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+ICAgIElm IFN0cmluZyBpcyBub3QgYWxpZ25lZCBpbiBhIDE2LWJpdCBib3VuZGFyeSwgdGhlbg0KPiBBU1NF UlQoKS4NCj4gDQo+IA0KPiAtICBJZiBQY2RNYXhpbXVtVW5pY29kZVN0cmluZ0xlbmd0aCBpcyBu b3QgemVybywgYW5kDQo+IFN0cmluZyBjb250YWlucyBtb3JlIHRoYW4NCj4gDQo+IA0KPiAtICBQ Y2RNYXhpbXVtVW5pY29kZVN0cmluZ0xlbmd0aCBVbmljb2RlIGNoYXJhY3RlcnMsDQo+IG5vdCBp bmNsdWRpbmcgdGhlDQo+IA0KPiANCj4gLSAgTnVsbC10ZXJtaW5hdG9yLCB0aGVuIEFTU0VSVCgp Lg0KPiANCj4gDQo+IA0KPiANCj4gDQo+ICAgIElmIFN0cmluZyBoYXMgbm8gdmFsaWQgaGV4YWRl Y2ltYWwgZGlnaXRzIGluIHRoZQ0KPiBhYm92ZSBmb3JtYXQsIHRoZW4gMCBpcw0KPiANCj4gDQo+ ICAgIHN0b3JlZCBhdCB0aGUgbG9jYXRpb24gcG9pbnRlZCB0byBieSBEYXRhLg0KPiANCj4gDQo+ IEBAIC0xMDkxLDE2ICsxMDY2LDggQEAgU3RySGV4VG9VaW50NjRTICgNCj4gICAgIjo6IiBjYW4g YmUgdXNlZCB0byBjb21wcmVzcyBvbmUgb3IgbW9yZSBncm91cHMgb2YgWA0KPiB3aGVuIFggY29u dGFpbnMgb25seSAwLg0KPiANCj4gDQo+ICAgIFRoZSAiOjoiIGNhbiBvbmx5IGFwcGVhciBvbmNl IGluIHRoZSBTdHJpbmcuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLSAgSWYgU3RyaW5nIGlzIE5V TEwsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gLQ0KPiANCj4gDQo+IC0gIElmIEFkZHJlc3Mg aXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtDQo+IA0KPiANCj4gICAgSWYgU3Ry aW5nIGlzIG5vdCBhbGlnbmVkIGluIGEgMTYtYml0IGJvdW5kYXJ5LCB0aGVuDQo+IEFTU0VSVCgp Lg0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0gIElmIFBjZE1heGltdW1Vbmljb2RlU3RyaW5nTGVu Z3RoIGlzIG5vdCB6ZXJvLCBhbmQNCj4gU3RyaW5nIGNvbnRhaW5zIG1vcmUgdGhhbg0KPiANCj4g DQo+IC0gIFBjZE1heGltdW1Vbmljb2RlU3RyaW5nTGVuZ3RoIFVuaWNvZGUgY2hhcmFjdGVycywN Cj4gbm90IGluY2x1ZGluZyB0aGUNCj4gDQo+IA0KPiAtICBOdWxsLXRlcm1pbmF0b3IsIHRoZW4g QVNTRVJUKCkuDQo+IA0KPiANCj4gLQ0KPiANCj4gDQo+ICAgIElmIEVuZFBvaW50ZXIgaXMgbm90 IE5VTEwgYW5kIEFkZHJlc3MgaXMgdHJhbnNsYXRlZA0KPiBmcm9tIFN0cmluZywgYSBwb2ludGVy DQo+IA0KPiANCj4gICAgdG8gdGhlIGNoYXJhY3RlciB0aGF0IHN0b3BwZWQgdGhlIHNjYW4gaXMg c3RvcmVkIGF0DQo+IHRoZSBsb2NhdGlvbiBwb2ludGVkIHRvDQo+IA0KPiANCj4gICAgYnkgRW5k UG9pbnRlci4NCj4gDQo+IA0KPiBAQCAtMTMxNywxNiArMTI4NCw4IEBAIFN0clRvSXB2NkFkZHJl c3MgKA0KPiAgICBXaGVuIC9QIGlzIGluIHRoZSBTdHJpbmcsIHRoZSBmdW5jdGlvbiBzdG9wcyBh dCB0aGUNCj4gZmlyc3QgY2hhcmFjdGVyIHRoYXQgaXMgbm90DQo+IA0KPiANCj4gICAgYSB2YWxp ZCBkZWNpbWFsIGRpZ2l0IGNoYXJhY3RlciBhZnRlciBQIGlzDQo+IGNvbnZlcnRlZC4NCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiAtICBJZiBTdHJpbmcgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4g DQo+IA0KPiAtDQo+IA0KPiANCj4gLSAgSWYgQWRkcmVzcyBpcyBOVUxMLCB0aGVuIEFTU0VSVCgp Lg0KPiANCj4gDQo+IC0NCj4gDQo+IA0KPiAgICBJZiBTdHJpbmcgaXMgbm90IGFsaWduZWQgaW4g YSAxNi1iaXQgYm91bmRhcnksIHRoZW4NCj4gQVNTRVJUKCkuDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gLSAgSWYgUGNkTWF4aW11bVVuaWNvZGVTdHJpbmdMZW5ndGggaXMgbm90IHplcm8sIGFuZA0K PiBTdHJpbmcgY29udGFpbnMgbW9yZSB0aGFuDQo+IA0KPiANCj4gLSAgUGNkTWF4aW11bVVuaWNv ZGVTdHJpbmdMZW5ndGggVW5pY29kZSBjaGFyYWN0ZXJzLA0KPiBub3QgaW5jbHVkaW5nIHRoZQ0K PiANCj4gDQo+IC0gIE51bGwtdGVybWluYXRvciwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAt DQo+IA0KPiANCj4gICAgSWYgRW5kUG9pbnRlciBpcyBub3QgTlVMTCBhbmQgQWRkcmVzcyBpcyB0 cmFuc2xhdGVkDQo+IGZyb20gU3RyaW5nLCBhIHBvaW50ZXINCj4gDQo+IA0KPiAgICB0byB0aGUg Y2hhcmFjdGVyIHRoYXQgc3RvcHBlZCB0aGUgc2NhbiBpcyBzdG9yZWQgYXQNCj4gdGhlIGxvY2F0 aW9uIHBvaW50ZWQgdG8NCj4gDQo+IA0KPiAgICBieSBFbmRQb2ludGVyLg0KPiANCj4gDQo+IEBA IC0xNDgyLDggKzE0NDEsNiBAQCBTdHJUb0lwdjRBZGRyZXNzICgNCj4gICAgICAgICAgICAgICAg ICAgIG9vICAgICAgICAgIERhdGE0WzQ4OjU1XQ0KPiANCj4gDQo+ICAgICAgICAgICAgICAgICAg ICBwcCAgICAgICAgICBEYXRhNFs1Njo2M10NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtICBJZiBT dHJpbmcgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtICBJZiBHdWlkIGlzIE5V TEwsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gICAgSWYgU3RyaW5nIGlzIG5vdCBhbGlnbmVk IGluIGEgMTYtYml0IGJvdW5kYXJ5LCB0aGVuDQo+IEFTU0VSVCgpLg0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+ICAgIEBwYXJhbSAgU3RyaW5nICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gYSBO dWxsLQ0KPiB0ZXJtaW5hdGVkIFVuaWNvZGUgc3RyaW5nLg0KPiANCj4gDQo+IEBAIC0xNTg5LDE3 ICsxNTQ2LDYgQEAgU3RyVG9HdWlkICgNCj4gDQo+IA0KPiANCj4gICAgSWYgU3RyaW5nIGlzIG5v dCBhbGlnbmVkIGluIGEgMTYtYml0IGJvdW5kYXJ5LCB0aGVuDQo+IEFTU0VSVCgpLg0KPiANCj4g DQo+IA0KPiANCj4gDQo+IC0gIElmIFN0cmluZyBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiAN Cj4gDQo+IC0NCj4gDQo+IA0KPiAtICBJZiBCdWZmZXIgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4N Cj4gDQo+IA0KPiAtDQo+IA0KPiANCj4gLSAgSWYgTGVuZ3RoIGlzIG5vdCBtdWx0aXBsZSBvZiAy LCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0NCj4gDQo+IA0KPiAtICBJZiBQY2RNYXhpbXVt VW5pY29kZVN0cmluZ0xlbmd0aCBpcyBub3QgemVybyBhbmQNCj4gTGVuZ3RoIGlzIGdyZWF0ZXIg dGhhbg0KPiANCj4gDQo+IC0gIFBjZE1heGltdW1Vbmljb2RlU3RyaW5nTGVuZ3RoLCB0aGVuIEFT U0VSVCgpLg0KPiANCj4gDQo+IC0NCj4gDQo+IA0KPiAtICBJZiBNYXhCdWZmZXJTaXplIGlzIGxl c3MgdGhhbiAoTGVuZ3RoIC8gMiksIHRoZW4NCj4gQVNTRVJUKCkuDQo+IA0KPiANCj4gLQ0KPiAN Cj4gDQo+ICAgIEBwYXJhbSAgU3RyaW5nICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gYSBO dWxsLQ0KPiB0ZXJtaW5hdGVkIFVuaWNvZGUgc3RyaW5nLg0KPiANCj4gDQo+ICAgIEBwYXJhbSAg TGVuZ3RoICAgICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2YNCj4gVW5pY29kZSBjaGFyYWN0 ZXJzIHRvIGRlY29kZS4NCj4gDQo+IA0KPiAgICBAcGFyYW0gIEJ1ZmZlciAgICAgICAgICAgICAg ICAgICBQb2ludGVyIHRvIHRoZQ0KPiBjb252ZXJ0ZWQgYnl0ZXMgYXJyYXkuDQo+IA0KPiANCj4g QEAgLTE3NzksOCArMTcyNSw2IEBAIEFzY2lpU3RyblNpemVTICgNCj4gDQo+IA0KPiANCj4gICAg VGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIGFzIHN0cmNweV9zIGRlZmluZWQgaW4gQzExLg0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IC0gIElmIGFuIGVycm9yIHdvdWxkIGJlIHJldHVybmVkLCB0aGVu IHRoZSBmdW5jdGlvbg0KPiB3aWxsIGFsc28gQVNTRVJUKCkuDQo+IA0KPiANCj4gLQ0KPiANCj4g DQo+ICAgIElmIGFuIGVycm9yIGlzIHJldHVybmVkLCB0aGVuIHRoZSBEZXN0aW5hdGlvbiBpcw0K PiB1bm1vZGlmaWVkLg0KPiANCj4gDQo+IA0KPiANCj4gDQo+ICAgIEBwYXJhbSAgRGVzdGluYXRp b24gICAgICAgICAgICAgIEEgcG9pbnRlciB0byBhDQo+IE51bGwtdGVybWluYXRlZCBBc2NpaSBz dHJpbmcuDQo+IA0KPiANCj4gQEAgLTE4NTYsOCArMTgwMCw2IEBAIEFzY2lpU3RyQ3B5UyAoDQo+ IA0KPiANCj4gDQo+ICAgIFRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciBhcyBzdHJuY3B5X3MgZGVm aW5lZCBpbg0KPiBDMTEuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLSAgSWYgYW4gZXJyb3Igd291 bGQgYmUgcmV0dXJuZWQsIHRoZW4gdGhlIGZ1bmN0aW9uDQo+IHdpbGwgYWxzbyBBU1NFUlQoKS4N Cj4gDQo+IA0KPiAtDQo+IA0KPiANCj4gICAgSWYgYW4gZXJyb3IgaXMgcmV0dXJuZWQsIHRoZW4g dGhlIERlc3RpbmF0aW9uIGlzDQo+IHVubW9kaWZpZWQuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g ICAgQHBhcmFtICBEZXN0aW5hdGlvbiAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIGENCj4gTnVs bC10ZXJtaW5hdGVkIEFzY2lpIHN0cmluZy4NCj4gDQo+IA0KPiBAQCAtMTk0NCw4ICsxODg2LDYg QEAgQXNjaWlTdHJuQ3B5UyAoDQo+IA0KPiANCj4gDQo+ICAgIFRoaXMgZnVuY3Rpb24gaXMgc2lt aWxhciBhcyBzdHJjYXRfcyBkZWZpbmVkIGluIEMxMS4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAt ICBJZiBhbiBlcnJvciB3b3VsZCBiZSByZXR1cm5lZCwgdGhlbiB0aGUgZnVuY3Rpb24NCj4gd2ls bCBhbHNvIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0NCj4gDQo+IA0KPiAgICBJZiBhbiBlcnJvciBp cyByZXR1cm5lZCwgdGhlbiB0aGUgRGVzdGluYXRpb24gaXMNCj4gdW5tb2RpZmllZC4NCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiAgICBAcGFyYW0gIERlc3RpbmF0aW9uICAgICAgICAgICAgICBBIHBv aW50ZXIgdG8gYQ0KPiBOdWxsLXRlcm1pbmF0ZWQgQXNjaWkgc3RyaW5nLg0KPiANCj4gDQo+IEBA IC0yMDQwLDggKzE5ODAsNiBAQCBBc2NpaVN0ckNhdFMgKA0KPiANCj4gDQo+IA0KPiAgICBUaGlz IGZ1bmN0aW9uIGlzIHNpbWlsYXIgYXMgc3RybmNhdF9zIGRlZmluZWQgaW4NCj4gQzExLg0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IC0gIElmIGFuIGVycm9yIHdvdWxkIGJlIHJldHVybmVkLCB0aGVu IHRoZSBmdW5jdGlvbg0KPiB3aWxsIGFsc28gQVNTRVJUKCkuDQo+IA0KPiANCj4gLQ0KPiANCj4g DQo+ICAgIElmIGFuIGVycm9yIGlzIHJldHVybmVkLCB0aGVuIHRoZSBEZXN0aW5hdGlvbiBpcw0K PiB1bm1vZGlmaWVkLg0KPiANCj4gDQo+IA0KPiANCj4gDQo+ICAgIEBwYXJhbSAgRGVzdGluYXRp b24gICAgICAgICAgICAgIEEgcG9pbnRlciB0byBhDQo+IE51bGwtdGVybWluYXRlZCBBc2NpaSBz dHJpbmcuDQo+IA0KPiANCj4gQEAgLTIxNTQsMTIgKzIwOTIsNiBAQCBBc2NpaVN0cm5DYXRTICgN Cj4gICAgYmUgaWdub3JlZC4gVGhlbiwgdGhlIGZ1bmN0aW9uIHN0b3BzIGF0IHRoZSBmaXJzdA0K PiBjaGFyYWN0ZXIgdGhhdCBpcyBhIG5vdCBhDQo+IA0KPiANCj4gICAgdmFsaWQgZGVjaW1hbCBj aGFyYWN0ZXIgb3IgYSBOdWxsLXRlcm1pbmF0b3IsDQo+IHdoaWNoZXZlciBvbmUgY29tZXMgZmly c3QuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLSAgSWYgU3RyaW5nIGlzIE5VTEwsIHRoZW4gQVNT RVJUKCkuDQo+IA0KPiANCj4gLSAgSWYgRGF0YSBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiAN Cj4gDQo+IC0gIElmIFBjZE1heGltdW1Bc2NpaVN0cmluZ0xlbmd0aCBpcyBub3QgemVybywgYW5k DQo+IFN0cmluZyBjb250YWlucyBtb3JlIHRoYW4NCj4gDQo+IA0KPiAtICBQY2RNYXhpbXVtQXNj aWlTdHJpbmdMZW5ndGggQXNjaWkgY2hhcmFjdGVycywgbm90DQo+IGluY2x1ZGluZyB0aGUNCj4g DQo+IA0KPiAtICBOdWxsLXRlcm1pbmF0b3IsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gLQ0K PiANCj4gDQo+ICAgIElmIFN0cmluZyBoYXMgbm8gdmFsaWQgZGVjaW1hbCBkaWdpdHMgaW4gdGhl IGFib3ZlDQo+IGZvcm1hdCwgdGhlbiAwIGlzIHN0b3JlZA0KPiANCj4gDQo+ICAgIGF0IHRoZSBs b2NhdGlvbiBwb2ludGVkIHRvIGJ5IERhdGEuDQo+IA0KPiANCj4gICAgSWYgdGhlIG51bWJlciBy ZXByZXNlbnRlZCBieSBTdHJpbmcgZXhjZWVkcyB0aGUNCj4gcmFuZ2UgZGVmaW5lZCBieSBVSU5U TiwgdGhlbg0KPiANCj4gDQo+IEBAIC0yMjY2LDEyICsyMTk4LDYgQEAgQXNjaWlTdHJEZWNpbWFs VG9VaW50blMgKA0KPiAgICBiZSBpZ25vcmVkLiBUaGVuLCB0aGUgZnVuY3Rpb24gc3RvcHMgYXQg dGhlIGZpcnN0DQo+IGNoYXJhY3RlciB0aGF0IGlzIGEgbm90IGENCj4gDQo+IA0KPiAgICB2YWxp ZCBkZWNpbWFsIGNoYXJhY3RlciBvciBhIE51bGwtdGVybWluYXRvciwNCj4gd2hpY2hldmVyIG9u ZSBjb21lcyBmaXJzdC4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtICBJZiBTdHJpbmcgaXMgTlVM TCwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtICBJZiBEYXRhIGlzIE5VTEwsIHRoZW4gQVNT RVJUKCkuDQo+IA0KPiANCj4gLSAgSWYgUGNkTWF4aW11bUFzY2lpU3RyaW5nTGVuZ3RoIGlzIG5v dCB6ZXJvLCBhbmQNCj4gU3RyaW5nIGNvbnRhaW5zIG1vcmUgdGhhbg0KPiANCj4gDQo+IC0gIFBj ZE1heGltdW1Bc2NpaVN0cmluZ0xlbmd0aCBBc2NpaSBjaGFyYWN0ZXJzLCBub3QNCj4gaW5jbHVk aW5nIHRoZQ0KPiANCj4gDQo+IC0gIE51bGwtdGVybWluYXRvciwgdGhlbiBBU1NFUlQoKS4NCj4g DQo+IA0KPiAtDQo+IA0KPiANCj4gICAgSWYgU3RyaW5nIGhhcyBubyB2YWxpZCBkZWNpbWFsIGRp Z2l0cyBpbiB0aGUgYWJvdmUNCj4gZm9ybWF0LCB0aGVuIDAgaXMgc3RvcmVkDQo+IA0KPiANCj4g ICAgYXQgdGhlIGxvY2F0aW9uIHBvaW50ZWQgdG8gYnkgRGF0YS4NCj4gDQo+IA0KPiAgICBJZiB0 aGUgbnVtYmVyIHJlcHJlc2VudGVkIGJ5IFN0cmluZyBleGNlZWRzIHRoZQ0KPiByYW5nZSBkZWZp bmVkIGJ5IFVJTlQ2NCwgdGhlbg0KPiANCj4gDQo+IEBAIC0yMzgyLDEyICsyMzA4LDYgQEAgQXNj aWlTdHJEZWNpbWFsVG9VaW50NjRTICgNCj4gICAgY2hhcmFjdGVyIHRoYXQgaXMgYSBub3QgYSB2 YWxpZCBoZXhhZGVjaW1hbA0KPiBjaGFyYWN0ZXIgb3IgTnVsbC10ZXJtaW5hdG9yLA0KPiANCj4g DQo+ICAgIHdoaWNoZXZlciBvbiBjb21lcyBmaXJzdC4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAt ICBJZiBTdHJpbmcgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtICBJZiBEYXRh IGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gLSAgSWYgUGNkTWF4aW11bUFzY2lp U3RyaW5nTGVuZ3RoIGlzIG5vdCB6ZXJvLCBhbmQNCj4gU3RyaW5nIGNvbnRhaW5zIG1vcmUgdGhh bg0KPiANCj4gDQo+IC0gIFBjZE1heGltdW1Bc2NpaVN0cmluZ0xlbmd0aCBBc2NpaSBjaGFyYWN0 ZXJzLCBub3QNCj4gaW5jbHVkaW5nIHRoZQ0KPiANCj4gDQo+IC0gIE51bGwtdGVybWluYXRvciwg dGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtDQo+IA0KPiANCj4gICAgSWYgU3RyaW5nIGhhcyBu byB2YWxpZCBoZXhhZGVjaW1hbCBkaWdpdHMgaW4gdGhlDQo+IGFib3ZlIGZvcm1hdCwgdGhlbiAw IGlzDQo+IA0KPiANCj4gICAgc3RvcmVkIGF0IHRoZSBsb2NhdGlvbiBwb2ludGVkIHRvIGJ5IERh dGEuDQo+IA0KPiANCj4gICAgSWYgdGhlIG51bWJlciByZXByZXNlbnRlZCBieSBTdHJpbmcgZXhj ZWVkcyB0aGUNCj4gcmFuZ2UgZGVmaW5lZCBieSBVSU5UTiwgdGhlbg0KPiANCj4gDQo+IEBAIC0y NTA5LDEyICsyNDI5LDYgQEAgQXNjaWlTdHJIZXhUb1VpbnRuUyAoDQo+ICAgIGNoYXJhY3RlciB0 aGF0IGlzIGEgbm90IGEgdmFsaWQgaGV4YWRlY2ltYWwNCj4gY2hhcmFjdGVyIG9yIE51bGwtdGVy bWluYXRvciwNCj4gDQo+IA0KPiAgICB3aGljaGV2ZXIgb24gY29tZXMgZmlyc3QuDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gLSAgSWYgU3RyaW5nIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+IA0K PiANCj4gLSAgSWYgRGF0YSBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0gIElm IFBjZE1heGltdW1Bc2NpaVN0cmluZ0xlbmd0aCBpcyBub3QgemVybywgYW5kDQo+IFN0cmluZyBj b250YWlucyBtb3JlIHRoYW4NCj4gDQo+IA0KPiAtICBQY2RNYXhpbXVtQXNjaWlTdHJpbmdMZW5n dGggQXNjaWkgY2hhcmFjdGVycywgbm90DQo+IGluY2x1ZGluZyB0aGUNCj4gDQo+IA0KPiAtICBO dWxsLXRlcm1pbmF0b3IsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gLQ0KPiANCj4gDQo+ICAg IElmIFN0cmluZyBoYXMgbm8gdmFsaWQgaGV4YWRlY2ltYWwgZGlnaXRzIGluIHRoZQ0KPiBhYm92 ZSBmb3JtYXQsIHRoZW4gMCBpcw0KPiANCj4gDQo+ICAgIHN0b3JlZCBhdCB0aGUgbG9jYXRpb24g cG9pbnRlZCB0byBieSBEYXRhLg0KPiANCj4gDQo+ICAgIElmIHRoZSBudW1iZXIgcmVwcmVzZW50 ZWQgYnkgU3RyaW5nIGV4Y2VlZHMgdGhlDQo+IHJhbmdlIGRlZmluZWQgYnkgVUlOVDY0LCB0aGVu DQo+IA0KPiANCj4gQEAgLTI2MzUsNyArMjU0OSw2IEBAIEFzY2lpU3RySGV4VG9VaW50NjRTICgN Cj4gICAgdGhlIHVwcGVyIDggYml0cywgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiAgICBJZiBTb3VyY2UgaXMgbm90IGFsaWduZWQgb24gYSAxNi1iaXQgYm91bmRhcnksIHRo ZW4NCj4gQVNTRVJUKCkuDQo+IA0KPiANCj4gLSAgSWYgYW4gZXJyb3Igd291bGQgYmUgcmV0dXJu ZWQsIHRoZW4gdGhlIGZ1bmN0aW9uDQo+IHdpbGwgYWxzbyBBU1NFUlQoKS4NCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiAgICBJZiBhbiBlcnJvciBpcyByZXR1cm5lZCwgdGhlbiB0aGUgRGVzdGluYXRp b24gaXMNCj4gdW5tb2RpZmllZC4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiBAQCAtMjczNSw3ICsy NjQ4LDYgQEAgVW5pY29kZVN0clRvQXNjaWlTdHJTICgNCj4gICAgSWYgYW55IFVuaWNvZGUgY2hh cmFjdGVycyBpbiBTb3VyY2UgY29udGFpbiBub24temVybw0KPiB2YWx1ZSBpbiB0aGUgdXBwZXIg OA0KPiANCj4gDQo+ICAgIGJpdHMsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gICAgSWYgU291 cmNlIGlzIG5vdCBhbGlnbmVkIG9uIGEgMTYtYml0IGJvdW5kYXJ5LCB0aGVuDQo+IEFTU0VSVCgp Lg0KPiANCj4gDQo+IC0gIElmIGFuIGVycm9yIHdvdWxkIGJlIHJldHVybmVkLCB0aGVuIHRoZSBm dW5jdGlvbg0KPiB3aWxsIGFsc28gQVNTRVJUKCkuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gICAg SWYgYW4gZXJyb3IgaXMgcmV0dXJuZWQsIHRoZW4gRGVzdGluYXRpb24gYW5kDQo+IERlc3RpbmF0 aW9uTGVuZ3RoIGFyZQ0KPiANCj4gDQo+ICAgIHVubW9kaWZpZWQuDQo+IA0KPiANCj4gQEAgLTI4 NTUsNyArMjc2Nyw2IEBAIFVuaWNvZGVTdHJuVG9Bc2NpaVN0clMgKA0KPiAgICBlcXVhbCBvciBn cmVhdGVyIHRoYW4gKChBc2NpaVN0ckxlbiAoU291cmNlKSArIDEpICoNCj4gc2l6ZW9mIChDSEFS MTYpKSBpbiBieXRlcy4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAgICBJZiBEZXN0aW5hdGlvbiBp cyBub3QgYWxpZ25lZCBvbiBhIDE2LWJpdCBib3VuZGFyeSwNCj4gdGhlbiBBU1NFUlQoKS4NCj4g DQo+IA0KPiAtICBJZiBhbiBlcnJvciB3b3VsZCBiZSByZXR1cm5lZCwgdGhlbiB0aGUgZnVuY3Rp b24NCj4gd2lsbCBhbHNvIEFTU0VSVCgpLg0KPiANCj4gDQo+IA0KPiANCj4gDQo+ICAgIElmIGFu IGVycm9yIGlzIHJldHVybmVkLCB0aGVuIHRoZSBEZXN0aW5hdGlvbiBpcw0KPiB1bm1vZGlmaWVk Lg0KPiANCj4gDQo+IA0KPiANCj4gDQo+IEBAIC0yOTQ4LDcgKzI4NTksNiBAQCBBc2NpaVN0clRv VW5pY29kZVN0clMgKA0KPiAgICAoKE1JTihBc2NpaVN0ckxlbihTb3VyY2UpLCBMZW5ndGgpICsg MSkgKiBzaXplb2YNCj4gKENIQVI4KSkgaW4gYnl0ZXMuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g ICAgSWYgRGVzdGluYXRpb24gaXMgbm90IGFsaWduZWQgb24gYSAxNi1iaXQgYm91bmRhcnksDQo+ IHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gLSAgSWYgYW4gZXJyb3Igd291bGQgYmUgcmV0dXJu ZWQsIHRoZW4gdGhlIGZ1bmN0aW9uDQo+IHdpbGwgYWxzbyBBU1NFUlQoKS4NCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiAgICBJZiBhbiBlcnJvciBpcyByZXR1cm5lZCwgdGhlbiBEZXN0aW5hdGlvbiBh bmQNCj4gRGVzdGluYXRpb25MZW5ndGggYXJlDQo+IA0KPiANCj4gICAgdW5tb2RpZmllZC4NCj4g DQo+IA0KPiBAQCAtMzA3MiwxMCArMjk4Miw2IEBAIEFzY2lpU3RyblRvVW5pY29kZVN0clMgKA0K PiAgICAiOjoiIGNhbiBiZSB1c2VkIHRvIGNvbXByZXNzIG9uZSBvciBtb3JlIGdyb3VwcyBvZiBY DQo+IHdoZW4gWCBjb250YWlucyBvbmx5IDAuDQo+IA0KPiANCj4gICAgVGhlICI6OiIgY2FuIG9u bHkgYXBwZWFyIG9uY2UgaW4gdGhlIFN0cmluZy4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtICBJ ZiBTdHJpbmcgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtDQo+IA0KPiANCj4g LSAgSWYgQWRkcmVzcyBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0NCj4gDQo+ IA0KPiAgICBJZiBFbmRQb2ludGVyIGlzIG5vdCBOVUxMIGFuZCBBZGRyZXNzIGlzIHRyYW5zbGF0 ZWQNCj4gZnJvbSBTdHJpbmcsIGEgcG9pbnRlcg0KPiANCj4gDQo+ICAgIHRvIHRoZSBjaGFyYWN0 ZXIgdGhhdCBzdG9wcGVkIHRoZSBzY2FuIGlzIHN0b3JlZCBhdA0KPiB0aGUgbG9jYXRpb24gcG9p bnRlZCB0bw0KPiANCj4gDQo+ICAgIGJ5IEVuZFBvaW50ZXIuDQo+IA0KPiANCj4gQEAgLTMyOTEs MTAgKzMxOTcsNiBAQCBBc2NpaVN0clRvSXB2NkFkZHJlc3MgKA0KPiAgICBXaGVuIC9QIGlzIGlu IHRoZSBTdHJpbmcsIHRoZSBmdW5jdGlvbiBzdG9wcyBhdCB0aGUNCj4gZmlyc3QgY2hhcmFjdGVy IHRoYXQgaXMgbm90DQo+IA0KPiANCj4gICAgYSB2YWxpZCBkZWNpbWFsIGRpZ2l0IGNoYXJhY3Rl ciBhZnRlciBQIGlzDQo+IGNvbnZlcnRlZC4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtICBJZiBT dHJpbmcgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtDQo+IA0KPiANCj4gLSAg SWYgQWRkcmVzcyBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0NCj4gDQo+IA0K PiAgICBJZiBFbmRQb2ludGVyIGlzIG5vdCBOVUxMIGFuZCBBZGRyZXNzIGlzIHRyYW5zbGF0ZWQN Cj4gZnJvbSBTdHJpbmcsIGEgcG9pbnRlcg0KPiANCj4gDQo+ICAgIHRvIHRoZSBjaGFyYWN0ZXIg dGhhdCBzdG9wcGVkIHRoZSBzY2FuIGlzIHN0b3JlZCBhdA0KPiB0aGUgbG9jYXRpb24gcG9pbnRl ZCB0bw0KPiANCj4gDQo+ICAgIGJ5IEVuZFBvaW50ZXIuDQo+IA0KPiANCj4gQEAgLTM0NDgsOSAr MzM1MCw2IEBAIEFzY2lpU3RyVG9JcHY0QWRkcmVzcyAoDQo+ICAgICAgICAgICAgICAgICAgICBv byAgICAgICAgICBEYXRhNFs0ODo1NV0NCj4gDQo+IA0KPiAgICAgICAgICAgICAgICAgICAgcHAg ICAgICAgICAgRGF0YTRbNTY6NjNdDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLSAgSWYgU3RyaW5n IGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiANCj4gLSAgSWYgR3VpZCBpcyBOVUxMLCB0 aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0NCj4gDQo+IA0KPiAgICBAcGFyYW0gIFN0cmluZyAg ICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIGEgTnVsbC0NCj4gdGVybWluYXRlZCBBU0NJSSBz dHJpbmcuDQo+IA0KPiANCj4gICAgQHBhcmFtICBHdWlkICAgICAgICAgICAgICAgICAgICAgUG9p bnRlciB0byB0aGUNCj4gY29udmVydGVkIEdVSUQuDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gQEAg LTM1NTAsMTcgKzM0NDksNiBAQCBBc2NpaVN0clRvR3VpZCAoDQo+ICAgIGRlY29kaW5nIHN0b3Bz IGFmdGVyIExlbmd0aCBvZiBjaGFyYWN0ZXJzIGFuZA0KPiBvdXRwdXRzIEJ1ZmZlciBjb250YWlu aW5nDQo+IA0KPiANCj4gICAgKExlbmd0aCAvIDIpIGJ5dGVzLg0KPiANCj4gDQo+IA0KPiANCj4g DQo+IC0gIElmIFN0cmluZyBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiANCj4gDQo+IC0NCj4g DQo+IA0KPiAtICBJZiBCdWZmZXIgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAt DQo+IA0KPiANCj4gLSAgSWYgTGVuZ3RoIGlzIG5vdCBtdWx0aXBsZSBvZiAyLCB0aGVuIEFTU0VS VCgpLg0KPiANCj4gDQo+IC0NCj4gDQo+IA0KPiAtICBJZiBQY2RNYXhpbXVtQXNjaWlTdHJpbmdM ZW5ndGggaXMgbm90IHplcm8gYW5kDQo+IExlbmd0aCBpcyBncmVhdGVyIHRoYW4NCj4gDQo+IA0K PiAtICBQY2RNYXhpbXVtQXNjaWlTdHJpbmdMZW5ndGgsIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiAN Cj4gLQ0KPiANCj4gDQo+IC0gIElmIE1heEJ1ZmZlclNpemUgaXMgbGVzcyB0aGFuIChMZW5ndGgg LyAyKSwgdGhlbg0KPiBBU1NFUlQoKS4NCj4gDQo+IA0KPiAtDQo+IA0KPiANCj4gICAgQHBhcmFt ICBTdHJpbmcgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byBhIE51bGwtDQo+IHRlcm1pbmF0 ZWQgQVNDSUkgc3RyaW5nLg0KPiANCj4gDQo+ICAgIEBwYXJhbSAgTGVuZ3RoICAgICAgICAgICAg ICAgICAgIFRoZSBudW1iZXIgb2YgQVNDSUkNCj4gY2hhcmFjdGVycyB0byBkZWNvZGUuDQo+IA0K PiANCj4gICAgQHBhcmFtICBCdWZmZXIgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUN Cj4gY29udmVydGVkIGJ5dGVzIGFycmF5Lg0KPiANCj4gDQo+IC0tDQo+IDIuMjQuMiAoQXBwbGUg R2l0LTEyNykNCj4gDQo+IA0KPiANCg0K