Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id AFE99C433FE for ; Fri, 10 Dec 2021 17:07:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S244381AbhLJRKn (ORCPT ); Fri, 10 Dec 2021 12:10:43 -0500 Received: from mx07-001d1705.pphosted.com ([185.132.183.11]:58974 "EHLO mx07-001d1705.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243639AbhLJRKm (ORCPT ); Fri, 10 Dec 2021 12:10:42 -0500 Received: from pps.filterd (m0209329.ppops.net [127.0.0.1]) by mx08-001d1705.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BAFWB4X003232; Fri, 10 Dec 2021 17:06:45 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sony.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-transfer-encoding : mime-version; s=S1; bh=LJvFKVJbVhgZCnOdZLsOmif2DEVDPgjleOJsNut8yfw=; b=Qq1NN7NQ/a2OcNs+iiLbEKqW4vd4lHwwpK3gMzVjSG5+sCh+k8eUiJC8yvGQ6eXmf+SX 6ritSvOE/UHg5Mq/BBqN9QPPa+P2pAZ0ZYzfXrZ2k5R+0lZRYjPegSZ5quKI484fMM8H w48InWCmnpnkORnGw2QM+IKmj+6AqRsn5rhNTHS2EB9kfniwZt7FzcfGTXnxvO78oxSo WAlZ9XIv+OckSEX9EXpTO5jHcSwkHG6R9CYBwvHYWxNH2paJgZdckG+fyDHAkrgg+JQo CG09TH64kb/qy4qp9FfMcwSNxGO3XrilKlxB/uhzgr9KPVNx4Zx1LLVk6Xel4Syg6mMD qg== Received: from nam12-mw2-obe.outbound.protection.outlook.com (mail-mw2nam12lp2040.outbound.protection.outlook.com [104.47.66.40]) by mx08-001d1705.pphosted.com with ESMTP id 3ctjuta45p-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 10 Dec 2021 17:06:45 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kcDSHPAMkGCzmTQq8n7vUk32HFRmoYgIl86lc4Rr7x2SCPFKZaHwDTUsBVwYuwMkTjfDziXKLC9bjAgMxAnMmE9tfbrRm8PghrzuQ42Un0wL/p45YhtLL9CQ4FCrOycDvX5Z5987Ar91D4sd07MzPz1REZY52STY70IbHvtQNljqizzcGx63MuzgOutkLbm9QVJjpxdveaKTx2WRC2iCDDusJZFSYmaqg0l9t3t8y9aiHQyrrwzdR20uyR6u4d6RdEBA99uKQWB7O0p+9gTAfyXkfhGX9rcDrJuFLRaWeAKPquhrrj9r5JMyy9HoFaAMQ/WLlEeFq6Tnarc/L2dU8w== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=LJvFKVJbVhgZCnOdZLsOmif2DEVDPgjleOJsNut8yfw=; b=Hy2WvTgNUOcsvupUA3Eey15oAGEmbz7i4su87nxBXBa8oqY5JgpGhfQMsGbw7gE/40H6GpY3xbQtFYtEpKerqyaGnb4gyHRK/n1yFnOwn0E2tOJmir8/kaTirVYBh879SQOmicrTKu+3J6IcordewiuoLNJDl6n2bJSg53j5wbw+f7MyFzgFF59SPoWO0CO3vgMm0b8EiM4KQOqeeTHINejNfGcGDlDxdBLIeSA615i/j16ZtzIkGebkVIsK+tav82Pr+bmowvwtplJ23UkQBml3Fvg0sPwLLtTt9h9qA4ythxDzBlz8XFw1G8SswJsc6g4PW4LJqi1rpZ0gX2Oq4A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=sony.com; dmarc=pass action=none header.from=sony.com; dkim=pass header.d=sony.com; arc=none Received: from BYAPR13MB2503.namprd13.prod.outlook.com (2603:10b6:a02:cd::33) by BY5PR13MB3378.namprd13.prod.outlook.com (2603:10b6:a03:1a4::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4778.9; Fri, 10 Dec 2021 17:06:40 +0000 Received: from BYAPR13MB2503.namprd13.prod.outlook.com ([fe80::88c2:9770:40f:4f8]) by BYAPR13MB2503.namprd13.prod.outlook.com ([fe80::88c2:9770:40f:4f8%7]) with mapi id 15.20.4778.013; Fri, 10 Dec 2021 17:06:40 +0000 From: To: , , , , CC: , , , Subject: RE: [PATCH v3 5/7] Documentation: KUnit: Rework writing page to focus on writing tests Thread-Topic: [PATCH v3 5/7] Documentation: KUnit: Rework writing page to focus on writing tests Thread-Index: AQHX7YbSZRJ/YOxeLUa8s56BrxITY6wr9DMA Date: Fri, 10 Dec 2021 17:06:40 +0000 Message-ID: References: <20211210052812.1998578-1-sharinder@google.com> <20211210052812.1998578-6-sharinder@google.com> In-Reply-To: <20211210052812.1998578-6-sharinder@google.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 2d6e5131-e51b-4a92-392c-08d9bbff6f28 x-ms-traffictypediagnostic: BY5PR13MB3378:EE_ x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: aLsbK+IQajzADSr30NMo1DEVz4y/9S1wr8gDsdR21NkuKd1xDWuseweHXf5ZmlIRaWXD3+RtqWkCgRgVoujH8yBHT/ASLlfGLid+uBI22mZihOUHAQEQ6hi7It1ocXyme4qWdZJRzI71kqQAy+Y/lQjzL3OL04uOonpbncRriR3Mp0kYI5604RR6CvgmVDwGoN58+h+ApQQwpK3H3GMHJlkKwHq+w3KxsY9/HuC8V997Q1LXB0Va47ui6kLxBO6JSrrRF4tpIBQkc906xo0S6P+k6x7D7CaGZN176KoFqATV/I9JXdeU/Y+9jnanoQZLfvmF5YeyOdGSCor6VjQUYgklgklHhW6AlgamikWODWEAB9yFYheXHpufaaGTALAb+6FvWYW4WGE+igauJufe8lSFcJaFlQ1HSui/hiySdn5R20VALAe7C3AxQMJTQkTzIbcMHR5XxHBdhtOI1IBjW1LyaWscRLXG0aBo3ycCylsMbHytcuzlrsuX9YPprDAmAFbXqIIqNcpoo8SXgl20imwkWT3MO1+L7B3lywgAri70MfnbaYhoIm1altRbrRYdfafh/V4Eu4eGOgGMhu5Tyr6P0YIB6QJS7NIMGwvDVuZ+Ai3Bd00yoryVCYvEVStPrtRTLw4HLv3zIsXX6hy/Kvopjx/3s7INwkqcbHrX6NVqckxfrXPhQ2+4VMM07ie08lsgwMrrtCfkhjF9UTjZlJcysK8bs+M9MRhQrotHKwOPCzx9wBLtNZcuxKTQEXoPoXRfc2tz/FAE1BRO45u2aGngy3Jzy3+SYDgGBOx6BAiQTRwl2y8TokK1ncwiHvTh x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR13MB2503.namprd13.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(4636009)(366004)(9686003)(122000001)(76116006)(2906002)(55016003)(26005)(54906003)(71200400001)(186003)(8936002)(66946007)(5660300002)(30864003)(38100700002)(86362001)(64756008)(66556008)(66476007)(8676002)(508600001)(6506007)(52536014)(66446008)(316002)(33656002)(4326008)(7696005)(83380400001)(82960400001)(38070700005)(110136005)(431254002)(579004)(559001)(20210929001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?dFUwenVsYWtUMlFOOVYweGNxdnlCVEoyaUZ5bzJwczRVbWplVmVydXAwMUVu?= =?utf-8?B?UmlRQlBLT2F0MGpUd2Y0MkhCRmg3R2FtdWVpNUtQdG1hRjdkUGpvZmsxY1lu?= =?utf-8?B?aTczRkZuZERuRWtNMzE0RkJxSno1K0Y1L3krZDR6Q1pHMENBSVNGQS9Oa1lr?= =?utf-8?B?NGVmZm9TRXZJekEzdHlkSml5N0prQm43NjgxbkFsV2hRajFhUDVCZWdzejdL?= =?utf-8?B?UStGWjIzbzJuZndBUVBxMWl6VUswUWp0SkFJbUhWNmFGei95TzBwRnpYLysx?= =?utf-8?B?cXowZDI5L3RZMkxEaUdSb2RDcDQ0T1dQZWkxS1RRRGN6cGRIcmcwTENyUTA5?= =?utf-8?B?QVpVYmRxNDBIMEs5ZjdiWTlpNWhTZ2RMQU1JKzVBV0I3aVlUazF1TUhhek1E?= =?utf-8?B?U2VNWkpRbHRzQS8wZ3VMOFBPZGIraTlSY2ZTeXFDNnUvSzU5S01ncHpwVGxs?= =?utf-8?B?Ukp4bGZ1dDJFNWNhM1VFakdiZG92N0hGcjVCRkRlcXZ4Q2pYbkthYmVoS01N?= =?utf-8?B?dFdaK3VMYnhWZnVyU2k5Qko3Y28vendMMWdqclhtNHJCblVhMVQ2VzV3TVdp?= =?utf-8?B?MjIrMS93aklFaDhGdHdvaWkxTmlWb2hrNTdCTnM1NXpGVDhvbjBvQ2pmdFMy?= =?utf-8?B?ZHdaNmZVRkRKUTBvRmlDMXM4SmlLUUtOMkxlWFc5endKRzlFTTJpVlhwbVVX?= =?utf-8?B?UUdna1k0bHFSNWt6TWpBakxzbzRjR0ozeVl1ZlFUWms3RTFrZm80KzhWUmR6?= =?utf-8?B?QmVVUnlsY2JhR3hYMkJIUVRwQUVlMFROTDhoei9IZklmSVlVNXFvcFRBdG5G?= =?utf-8?B?WlFtMDZja3dIMHlib3JqeDl1YkxwR05IS0hWck1paVgrRkdIbG1sSng5VElG?= =?utf-8?B?Sm1tMDUxYmViRWk0RjVQQzFhR2U0ZjNBRnhJUktrVkxCcFBUUmV6M2liMmFL?= =?utf-8?B?L2l0Y2QySVRodFlxdlVIc2U3OEZ0Y0YyREowWHQ5YVBqeGxJQzVrMjdMY2JK?= =?utf-8?B?SzhwOWV3YzY3cVQ5eGNBSjBsdDFhZld1dGswN05KVXRlZzdDSVdFRlJxenZ3?= =?utf-8?B?NDVCSzl1Z0d1RGlKQ0JNc0ExODZDem1wcmp5SHp1WXFtZ2NnTllZRXNaSkhQ?= =?utf-8?B?dkdicnFkT3ZGSWxjMkJTaWxIdnhuWUJYUm1DRW9BVjNPbGNvMjJsN21HUUVr?= =?utf-8?B?b1VybFFsZUZ2NTJDNVoyN29JUjFBUXpaY2Q4T25RM2tYRUNQVmR6Yk91b3RM?= =?utf-8?B?Y2JCVEpUMWl5Zm5BU2x0cHpjZWlXTGM1ZTZqUm54bWRiVkNZRWF3dGdJUGRK?= =?utf-8?B?c2xXL0MySng0aWtCTm5Mc0w2RFdFcTh1aG03OCtFVDVsT2k5Z21aV29tSWJH?= =?utf-8?B?UUJUZVBFT0pid2gzQmVCc2REQjJjMkFYa3NYUmticWdlSHFCVU9qelFFQThU?= =?utf-8?B?dks2bjd5YXEwYUF2KzJSOWZyY1cvSGU0OHNHNWhibkNKRnVyVTRIK1E0QU5a?= =?utf-8?B?blBBc2hOdG93N29FV1JSSVNOU210UnZVdXM4b0FyU05pUzJxRGx1NGFuTG9p?= =?utf-8?B?K1Jubm5hMWZpVmVFU1VKUFhBSzBVNUgwUFI3dERobWF3ekorb2RLdlVkZlh1?= =?utf-8?B?cXBlUllvU2pxcWUvRitQQVpHSWRSN202SDdMZHVVNUxqdGROek01ZGlQREZv?= =?utf-8?B?NHVUQWUva0xoUG80WDQrTGVxc2RTaGpQYlhDNWlxbjA0dXJUd2JtUVlnbU5n?= =?utf-8?B?Z28rMGgvQnFTdHhNZmV2K1lZUi9BOGJISjZ1RUtJQTFrVnJmMHVSbGJkVm5O?= =?utf-8?B?RUEzZWZvOENQSFNIazlQcS9QSk5Yd3lWM3lNeGExVURmamI1K2ZLS3grNTlK?= =?utf-8?B?dm16L2IxMEtUNTV1THZlMjg4OFhRMTZuMFRFVGVsSmZsSW1mZit3RXFXeHdE?= =?utf-8?B?ZUhRK1phdTdBQktPRFRnZDdqTnNkYlMxYWVBYm5SZ1gyT3JMUlNFZjJabHZP?= =?utf-8?B?UXZUL1Z4Tkh2ZG0xNDlhb0thUWs1VUFRbmZ0WDJYTUJUOGxYR1hqaG5DZ2Q2?= =?utf-8?B?T2NxZnRjdEZzaDNNM2VjRDNQS2o4WC85cSs4czJNMmNYRnZhSHJaUGFFUTV5?= =?utf-8?B?WDRXTkxGSFpncnE3VHU0SlJVL09vVXo1NDg5T1pVUTFjazVZV2dQZWFPOEdH?= =?utf-8?Q?ebX+XHcamC8Lr6IJhpqDYsM=3D?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: sony.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BYAPR13MB2503.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2d6e5131-e51b-4a92-392c-08d9bbff6f28 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Dec 2021 17:06:40.3648 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 66c65d8a-9158-4521-a2d8-664963db48e4 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: oLRnw6LI4OeFq6ua4M32FUmByWpku/GLX3cbpteBrgoozslouryq5qV+TpGb5wVBffZ9ewDXZCFxZxT9dCHQ/w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR13MB3378 X-Proofpoint-GUID: y6bq9tH27beT-w3UfpDttkqMSEyKPD54 X-Proofpoint-ORIG-GUID: y6bq9tH27beT-w3UfpDttkqMSEyKPD54 X-Sony-Outbound-GUID: y6bq9tH27beT-w3UfpDttkqMSEyKPD54 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.790,Hydra:6.0.425,FMLib:17.11.62.513 definitions=2021-12-10_06,2021-12-10_01,2021-12-02_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 spamscore=0 malwarescore=0 suspectscore=0 adultscore=0 phishscore=0 lowpriorityscore=0 mlxscore=0 bulkscore=0 impostorscore=0 clxscore=1015 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112100096 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSGFyaW5kZXIgU2luZ2gg PHNoYXJpbmRlckBnb29nbGUuY29tPg0KPiANCj4gV2Ugbm93IGhhdmUgZGVkaWNhdGVkIHBhZ2Vz IG9uIHJ1bm5pbmcgdGVzdHMuIFRoZXJlZm9yZSByZWZvY3VzIHRoZQ0KPiB1c2FnZSBwYWdlIG9u IHdyaXRpbmcgdGVzdHMgYW5kIGFkZCBjb250ZW50IGZyb20gdGlwcyBwYWdlIGFuZA0KPiBpbmZv cm1hdGlvbiBvbiBvdGhlciBhcmNoaXRlY3R1cmVzLg0KPiANCj4gU2lnbmVkLW9mZi1ieTogSGFy aW5kZXIgU2luZ2ggPHNoYXJpbmRlckBnb29nbGUuY29tPg0KPiAtLS0NCj4gIERvY3VtZW50YXRp b24vZGV2LXRvb2xzL2t1bml0L2luZGV4LnJzdCB8ICAgMiArLQ0KPiAgRG9jdW1lbnRhdGlvbi9k ZXYtdG9vbHMva3VuaXQvc3RhcnQucnN0IHwgICAyICstDQo+ICBEb2N1bWVudGF0aW9uL2Rldi10 b29scy9rdW5pdC91c2FnZS5yc3QgfCA1NzggKysrKysrKysrKystLS0tLS0tLS0tLS0tDQo+ICAz IGZpbGVzIGNoYW5nZWQsIDI1NSBpbnNlcnRpb25zKCspLCAzMjcgZGVsZXRpb25zKC0pDQo+IA0K PiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvaW5kZXgucnN0IGIv RG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvaW5kZXgucnN0DQo+IGluZGV4IGY5ZjM3OTk3 YjU4Yy4uNTk1MjA1MzQ4ZDJkIDEwMDY0NA0KPiAtLS0gYS9Eb2N1bWVudGF0aW9uL2Rldi10b29s cy9rdW5pdC9pbmRleC5yc3QNCj4gKysrIGIvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQv aW5kZXgucnN0DQo+IEBAIC0xMDIsNyArMTAyLDcgQEAgSG93IGRvIEkgdXNlIGl0Pw0KPiAgKiAg IERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0L2FyY2hpdGVjdHVyZS5yc3QgLSBLVW5pdCBh cmNoaXRlY3R1cmUuDQo+ICAqICAgRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvcnVuX3dy YXBwZXIucnN0IC0gcnVuIGt1bml0X3Rvb2wuDQo+ICAqICAgRG9jdW1lbnRhdGlvbi9kZXYtdG9v bHMva3VuaXQvcnVuX21hbnVhbC5yc3QgLSBydW4gdGVzdHMgd2l0aG91dCBrdW5pdF90b29sLg0K PiAtKiAgIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0L3VzYWdlLnJzdCAtIEtVbml0IGZl YXR1cmVzLg0KPiArKiAgIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0L3VzYWdlLnJzdCAt IHdyaXRlIHRlc3RzLg0KPiAgKiAgIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0L3RpcHMu cnN0IC0gYmVzdCBwcmFjdGljZXMgd2l0aA0KPiAgICAgIGV4YW1wbGVzLg0KPiAgKiAgIERvY3Vt ZW50YXRpb24vZGV2LXRvb2xzL2t1bml0L2FwaS9pbmRleC5yc3QgLSBLVW5pdCBBUElzDQo+IGRp ZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC9zdGFydC5yc3QgYi9Eb2N1 bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC9zdGFydC5yc3QNCj4gaW5kZXggYWYxM2Y0NDNjOTc2 Li5hODU4YWIwMDk5NDQgMTAwNjQ0DQo+IC0tLSBhL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1 bml0L3N0YXJ0LnJzdA0KPiArKysgYi9Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC9zdGFy dC5yc3QNCj4gQEAgLTI0Myw3ICsyNDMsNyBAQCBOZXh0IFN0ZXBzDQo+ICAqICAgRG9jdW1lbnRh dGlvbi9kZXYtdG9vbHMva3VuaXQvYXJjaGl0ZWN0dXJlLnJzdCAtIEtVbml0IGFyY2hpdGVjdHVy ZS4NCj4gICogICBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC9ydW5fd3JhcHBlci5yc3Qg LSBydW4ga3VuaXRfdG9vbC4NCj4gICogICBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC9y dW5fbWFudWFsLnJzdCAtIHJ1biB0ZXN0cyB3aXRob3V0IGt1bml0X3Rvb2wuDQo+IC0qICAgRG9j dW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvdXNhZ2UucnN0IC0gS1VuaXQgZmVhdHVyZXMuDQo+ ICsqICAgRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvdXNhZ2UucnN0IC0gd3JpdGUgdGVz dHMuDQo+ICAqICAgRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvdGlwcy5yc3QgLSBiZXN0 IHByYWN0aWNlcyB3aXRoDQo+ICAgICAgZXhhbXBsZXMuDQo+ICAqICAgRG9jdW1lbnRhdGlvbi9k ZXYtdG9vbHMva3VuaXQvYXBpL2luZGV4LnJzdCAtIEtVbml0IEFQSXMNCj4gZGlmZiAtLWdpdCBh L0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0L3VzYWdlLnJzdCBiL0RvY3VtZW50YXRpb24v ZGV2LXRvb2xzL2t1bml0L3VzYWdlLnJzdA0KPiBpbmRleCA2M2YxYmI4OWViZjUuLjE4NDdhNzI5 ZGFmMiAxMDA2NDQNCj4gLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvdXNhZ2Uu cnN0DQo+ICsrKyBiL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0L3VzYWdlLnJzdA0KPiBA QCAtMSw1NyArMSwxMyBAQA0KPiAgLi4gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAN Cj4gDQo+IC09PT09PT09PT09PQ0KPiAtVXNpbmcgS1VuaXQNCj4gLT09PT09PT09PT09DQo+IC0N Cj4gLVRoZSBwdXJwb3NlIG9mIHRoaXMgZG9jdW1lbnQgaXMgdG8gZGVzY3JpYmUgd2hhdCBLVW5p dCBpcywgaG93IGl0IHdvcmtzLCBob3cgaXQNCj4gLWlzIGludGVuZGVkIHRvIGJlIHVzZWQsIGFu ZCBhbGwgdGhlIGNvbmNlcHRzIGFuZCB0ZXJtaW5vbG9neSB0aGF0IGFyZSBuZWVkZWQgdG8NCj4g LXVuZGVyc3RhbmQgaXQuIFRoaXMgZ3VpZGUgYXNzdW1lcyBhIHdvcmtpbmcga25vd2xlZGdlIG9m IHRoZSBMaW51eCBrZXJuZWwgYW5kDQo+IC1zb21lIGJhc2ljIGtub3dsZWRnZSBvZiB0ZXN0aW5n Lg0KPiAtDQo+IC1Gb3IgYSBoaWdoIGxldmVsIGludHJvZHVjdGlvbiB0byBLVW5pdCwgaW5jbHVk aW5nIHNldHRpbmcgdXAgS1VuaXQgZm9yIHlvdXINCj4gLXByb2plY3QsIHNlZSBEb2N1bWVudGF0 aW9uL2Rldi10b29scy9rdW5pdC9zdGFydC5yc3QuDQo+IC0NCj4gLU9yZ2FuaXphdGlvbiBvZiB0 aGlzIGRvY3VtZW50DQo+IC09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiAtDQo+IC1U aGlzIGRvY3VtZW50IGlzIG9yZ2FuaXplZCBpbnRvIHR3byBtYWluIHNlY3Rpb25zOiBUZXN0aW5n IGFuZCBDb21tb24gUGF0dGVybnMuDQo+IC1UaGUgZmlyc3QgY292ZXJzIHdoYXQgdW5pdCB0ZXN0 cyBhcmUgYW5kIGhvdyB0byB1c2UgS1VuaXQgdG8gd3JpdGUgdGhlbS4gVGhlDQo+IC1zZWNvbmQg Y292ZXJzIGNvbW1vbiB0ZXN0aW5nIHBhdHRlcm5zLCBlLmcuIGhvdyB0byBpc29sYXRlIGNvZGUg YW5kIG1ha2UgaXQNCj4gLXBvc3NpYmxlIHRvIHVuaXQgdGVzdCBjb2RlIHRoYXQgd2FzIG90aGVy d2lzZSB1bi11bml0LXRlc3RhYmxlLg0KPiAtDQo+IC1UZXN0aW5nDQo+IC09PT09PT09DQo+IC0N Cj4gLVdoYXQgaXMgS1VuaXQ/DQo+IC0tLS0tLS0tLS0tLS0tLQ0KPiAtDQo+IC0iSyIgaXMgc2hv cnQgZm9yICJrZXJuZWwiIHNvICJLVW5pdCIgaXMgdGhlICIoTGludXgpIEtlcm5lbCBVbml0IFRl c3RpbmcNCj4gLUZyYW1ld29yay4iIEtVbml0IGlzIGludGVuZGVkIGZpcnN0IGFuZCBmb3JlbW9z dCBmb3Igd3JpdGluZyB1bml0IHRlc3RzOyBpdCBpcw0KPiAtZ2VuZXJhbCBlbm91Z2ggdGhhdCBp dCBjYW4gYmUgdXNlZCB0byB3cml0ZSBpbnRlZ3JhdGlvbiB0ZXN0czsgaG93ZXZlciwgdGhpcyBp cw0KPiAtYSBzZWNvbmRhcnkgZ29hbC4gS1VuaXQgaGFzIG5vIGFtYml0aW9uIG9mIGJlaW5nIHRo ZSBvbmx5IHRlc3RpbmcgZnJhbWV3b3JrIGZvcg0KPiAtdGhlIGtlcm5lbDsgZm9yIGV4YW1wbGUs IGl0IGRvZXMgbm90IGludGVuZCB0byBiZSBhbiBlbmQtdG8tZW5kIHRlc3RpbmcNCj4gLWZyYW1l d29yay4NCj4gLQ0KPiAtV2hhdCBpcyBVbml0IFRlc3Rpbmc/DQo+IC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCj4gLQ0KPiAtQSBgdW5pdCB0ZXN0IDxodHRwczovL21hcnRpbmZvd2xlci5jb20vYmxp a2kvVW5pdFRlc3QuaHRtbD5gXyBpcyBhIHRlc3QgdGhhdA0KPiAtdGVzdHMgY29kZSBhdCB0aGUg c21hbGxlc3QgcG9zc2libGUgc2NvcGUsIGEgKnVuaXQqIG9mIGNvZGUuIEluIHRoZSBDDQo+IC1w cm9ncmFtbWluZyBsYW5ndWFnZSB0aGF0J3MgYSBmdW5jdGlvbi4NCj4gLQ0KPiAtVW5pdCB0ZXN0 cyBzaG91bGQgYmUgd3JpdHRlbiBmb3IgYWxsIHRoZSBwdWJsaWNseSBleHBvc2VkIGZ1bmN0aW9u cyBpbiBhDQo+IC1jb21waWxhdGlvbiB1bml0OyBzbyB0aGF0IGlzIGFsbCB0aGUgZnVuY3Rpb25z IHRoYXQgYXJlIGV4cG9ydGVkIGluIGVpdGhlciBhDQo+IC0qY2xhc3MqIChkZWZpbmVkIGJlbG93 KSBvciBhbGwgZnVuY3Rpb25zIHdoaWNoIGFyZSAqKm5vdCoqIHN0YXRpYy4NCj4gLQ0KPiAgV3Jp dGluZyBUZXN0cw0KPiAtLS0tLS0tLS0tLS0tLQ0KPiArPT09PT09PT09PT09PQ0KPiANCj4gIFRl c3QgQ2FzZXMNCj4gLX5+fn5+fn5+fn4NCj4gKy0tLS0tLS0tLS0NCj4gDQo+ICBUaGUgZnVuZGFt ZW50YWwgdW5pdCBpbiBLVW5pdCBpcyB0aGUgdGVzdCBjYXNlLiBBIHRlc3QgY2FzZSBpcyBhIGZ1 bmN0aW9uIHdpdGgNCj4gLXRoZSBzaWduYXR1cmUgYGB2b2lkICgqKShzdHJ1Y3Qga3VuaXQgKnRl c3QpYGAuIEl0IGNhbGxzIGEgZnVuY3Rpb24gdG8gYmUgdGVzdGVkDQo+ICt0aGUgc2lnbmF0dXJl IGBgdm9pZCAoKikoc3RydWN0IGt1bml0ICp0ZXN0KWBgLiBJdCBjYWxscyB0aGUgZnVuY3Rpb24g dW5kZXIgdGVzdA0KPiAgYW5kIHRoZW4gc2V0cyAqZXhwZWN0YXRpb25zKiBmb3Igd2hhdCBzaG91 bGQgaGFwcGVuLiBGb3IgZXhhbXBsZToNCj4gDQo+ICAuLiBjb2RlLWJsb2NrOjogYw0KPiBAQCAt NjUsMTggKzIxLDE5IEBAIGFuZCB0aGVuIHNldHMgKmV4cGVjdGF0aW9ucyogZm9yIHdoYXQgc2hv dWxkIGhhcHBlbi4gRm9yIGV4YW1wbGU6DQo+ICAJCUtVTklUX0ZBSUwodGVzdCwgIlRoaXMgdGVz dCBuZXZlciBwYXNzZXMuIik7DQo+ICAJfQ0KPiANCj4gLUluIHRoZSBhYm92ZSBleGFtcGxlIGBg ZXhhbXBsZV90ZXN0X3N1Y2Nlc3NgYCBhbHdheXMgcGFzc2VzIGJlY2F1c2UgaXQgZG9lcw0KPiAt bm90aGluZzsgbm8gZXhwZWN0YXRpb25zIGFyZSBzZXQsIHNvIGFsbCBleHBlY3RhdGlvbnMgcGFz cy4gT24gdGhlIG90aGVyIGhhbmQNCj4gLWBgZXhhbXBsZV90ZXN0X2ZhaWx1cmVgYCBhbHdheXMg ZmFpbHMgYmVjYXVzZSBpdCBjYWxscyBgYEtVTklUX0ZBSUxgYCwgd2hpY2ggaXMNCj4gLWEgc3Bl Y2lhbCBleHBlY3RhdGlvbiB0aGF0IGxvZ3MgYSBtZXNzYWdlIGFuZCBjYXVzZXMgdGhlIHRlc3Qg Y2FzZSB0byBmYWlsLg0KPiArSW4gdGhlIGFib3ZlIGV4YW1wbGUsIGBgZXhhbXBsZV90ZXN0X3N1 Y2Nlc3NgYCBhbHdheXMgcGFzc2VzIGJlY2F1c2UgaXQgZG9lcw0KPiArbm90aGluZzsgbm8gZXhw ZWN0YXRpb25zIGFyZSBzZXQsIGFuZCB0aGVyZWZvcmUgYWxsIGV4cGVjdGF0aW9ucyBwYXNzLiBP biB0aGUNCj4gK290aGVyIGhhbmQgYGBleGFtcGxlX3Rlc3RfZmFpbHVyZWBgIGFsd2F5cyBmYWls cyBiZWNhdXNlIGl0IGNhbGxzIGBgS1VOSVRfRkFJTGBgLA0KPiArd2hpY2ggaXMgYSBzcGVjaWFs IGV4cGVjdGF0aW9uIHRoYXQgbG9ncyBhIG1lc3NhZ2UgYW5kIGNhdXNlcyB0aGUgdGVzdCBjYXNl IHRvDQo+ICtmYWlsLg0KPiANCj4gIEV4cGVjdGF0aW9ucw0KPiAgfn5+fn5+fn5+fn5+DQo+IC1B biAqZXhwZWN0YXRpb24qIGlzIGEgd2F5IHRvIHNwZWNpZnkgdGhhdCB5b3UgZXhwZWN0IGEgcGll Y2Ugb2YgY29kZSB0byBkbw0KPiAtc29tZXRoaW5nIGluIGEgdGVzdC4gQW4gZXhwZWN0YXRpb24g aXMgY2FsbGVkIGxpa2UgYSBmdW5jdGlvbi4gQSB0ZXN0IGlzIG1hZGUNCj4gLWJ5IHNldHRpbmcg ZXhwZWN0YXRpb25zIGFib3V0IHRoZSBiZWhhdmlvciBvZiBhIHBpZWNlIG9mIGNvZGUgdW5kZXIg dGVzdDsgd2hlbg0KPiAtb25lIG9yIG1vcmUgb2YgdGhlIGV4cGVjdGF0aW9ucyBmYWlsLCB0aGUg dGVzdCBjYXNlIGZhaWxzIGFuZCBpbmZvcm1hdGlvbiBhYm91dA0KPiAtdGhlIGZhaWx1cmUgaXMg bG9nZ2VkLiBGb3IgZXhhbXBsZToNCj4gK0FuICpleHBlY3RhdGlvbiogc3BlY2lmaWVzIHRoYXQg d2UgZXhwZWN0IGEgcGllY2Ugb2YgY29kZSB0byBkbyBzb21ldGhpbmcgaW4gYQ0KPiArdGVzdC4g QW4gZXhwZWN0YXRpb24gaXMgY2FsbGVkIGxpa2UgYSBmdW5jdGlvbi4gQSB0ZXN0IGlzIG1hZGUg Ynkgc2V0dGluZw0KPiArZXhwZWN0YXRpb25zIGFib3V0IHRoZSBiZWhhdmlvciBvZiBhIHBpZWNl IG9mIGNvZGUgdW5kZXIgdGVzdC4gV2hlbiBvbmUgb3IgbW9yZQ0KPiArZXhwZWN0YXRpb25zIGZh aWwsIHRoZSB0ZXN0IGNhc2UgZmFpbHMgYW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmYWlsdXJl IGlzDQo+ICtsb2dnZWQuIEZvciBleGFtcGxlOg0KPiANCj4gIC4uIGNvZGUtYmxvY2s6OiBjDQo+ IA0KPiBAQCAtODYsMjkgKzQzLDI4IEBAIHRoZSBmYWlsdXJlIGlzIGxvZ2dlZC4gRm9yIGV4YW1w bGU6DQo+ICAJCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCAyLCBhZGQoMSwgMSkpOw0KPiAgCX0NCj4g DQo+IC1JbiB0aGUgYWJvdmUgZXhhbXBsZSBgYGFkZF90ZXN0X2Jhc2ljYGAgbWFrZXMgYSBudW1i ZXIgb2YgYXNzZXJ0aW9ucyBhYm91dCB0aGUNCj4gLWJlaGF2aW9yIG9mIGEgZnVuY3Rpb24gY2Fs bGVkIGBgYWRkYGA7IHRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgYWx3YXlzIG9mIHR5cGUNCj4gLWBg c3RydWN0IGt1bml0ICpgYCwgd2hpY2ggY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1 cnJlbnQgdGVzdCBjb250ZXh0Ow0KPiAtdGhlIHNlY29uZCBwYXJhbWV0ZXIsIGluIHRoaXMgY2Fz ZSwgaXMgd2hhdCB0aGUgdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmU7IHRoZQ0KPiArSW4gdGhlIGFi b3ZlIGV4YW1wbGUsIGBgYWRkX3Rlc3RfYmFzaWNgYCBtYWtlcyBhIG51bWJlciBvZiBhc3NlcnRp b25zIGFib3V0IHRoZQ0KPiArYmVoYXZpb3Igb2YgYSBmdW5jdGlvbiBjYWxsZWQgYGBhZGRgYC4g VGhlIGZpcnN0IHBhcmFtZXRlciBpcyBhbHdheXMgb2YgdHlwZQ0KPiArYGBzdHJ1Y3Qga3VuaXQg KmBgLCB3aGljaCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCB0ZXN0IGNv bnRleHQuDQo+ICtUaGUgc2Vjb25kIHBhcmFtZXRlciwgaW4gdGhpcyBjYXNlLCBpcyB3aGF0IHRo ZSB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZS4gVGhlDQo+ICBsYXN0IHZhbHVlIGlzIHdoYXQgdGhl IHZhbHVlIGFjdHVhbGx5IGlzLiBJZiBgYGFkZGBgIHBhc3NlcyBhbGwgb2YgdGhlc2UNCj4gIGV4 cGVjdGF0aW9ucywgdGhlIHRlc3QgY2FzZSwgYGBhZGRfdGVzdF9iYXNpY2BgIHdpbGwgcGFzczsg aWYgYW55IG9uZSBvZiB0aGVzZQ0KPiAgZXhwZWN0YXRpb25zIGZhaWxzLCB0aGUgdGVzdCBjYXNl IHdpbGwgZmFpbC4NCj4gDQo+IC1JdCBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGF0IGEg dGVzdCBjYXNlICpmYWlscyogd2hlbiBhbnkgZXhwZWN0YXRpb24gaXMNCj4gLXZpb2xhdGVkOyBo b3dldmVyLCB0aGUgdGVzdCB3aWxsIGNvbnRpbnVlIHJ1bm5pbmcsIHBvdGVudGlhbGx5IHRyeWlu ZyBvdGhlcg0KPiAtZXhwZWN0YXRpb25zIHVudGlsIHRoZSB0ZXN0IGNhc2UgZW5kcyBvciBpcyBv dGhlcndpc2UgdGVybWluYXRlZC4gVGhpcyBpcyBhcw0KPiAtb3Bwb3NlZCB0byAqYXNzZXJ0aW9u cyogd2hpY2ggYXJlIGRpc2N1c3NlZCBsYXRlci4NCj4gK0EgdGVzdCBjYXNlICpmYWlscyogd2hl biBhbnkgZXhwZWN0YXRpb24gaXMgdmlvbGF0ZWQ7IGhvd2V2ZXIsIHRoZSB0ZXN0IHdpbGwNCj4g K2NvbnRpbnVlIHRvIHJ1biwgYW5kIHRyeSBvdGhlciBleHBlY3RhdGlvbnMgdW50aWwgdGhlIHRl c3QgY2FzZSBlbmRzIG9yIGlzDQo+ICtvdGhlcndpc2UgdGVybWluYXRlZC4gVGhpcyBpcyBhcyBv cHBvc2VkIHRvICphc3NlcnRpb25zKiB3aGljaCBhcmUgZGlzY3Vzc2VkDQo+ICtsYXRlci4NCj4g DQo+IC1UbyBsZWFybiBhYm91dCBtb3JlIGV4cGVjdGF0aW9ucyBzdXBwb3J0ZWQgYnkgS1VuaXQs IHNlZQ0KPiAtRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvYXBpL3Rlc3QucnN0Lg0KPiAr VG8gbGVhcm4gYWJvdXQgbW9yZSBLVW5pdCBleHBlY3RhdGlvbnMsIHNlZSBEb2N1bWVudGF0aW9u L2Rldi10b29scy9rdW5pdC9hcGkvdGVzdC5yc3QuDQo+IA0KPiAgLi4gbm90ZTo6DQo+IC0gICBB IHNpbmdsZSB0ZXN0IGNhc2Ugc2hvdWxkIGJlIHByZXR0eSBzaG9ydCwgcHJldHR5IGVhc3kgdG8g dW5kZXJzdGFuZCwNCj4gLSAgIGZvY3VzZWQgb24gYSBzaW5nbGUgYmVoYXZpb3IuDQo+ICsgICBB IHNpbmdsZSB0ZXN0IGNhc2Ugc2hvdWxkIGJlIHNob3J0LCBlYXN5IHRvIHVuZGVyc3RhbmQsIGFu ZCBmb2N1c2VkIG9uIGENCj4gKyAgIHNpbmdsZSBiZWhhdmlvci4NCj4gDQo+IC1Gb3IgZXhhbXBs ZSwgaWYgd2Ugd2FudGVkIHRvIHByb3Blcmx5IHRlc3QgdGhlIGFkZCBmdW5jdGlvbiBhYm92ZSwg d2Ugd291bGQNCj4gLWNyZWF0ZSBhZGRpdGlvbmFsIHRlc3RzIGNhc2VzIHdoaWNoIHdvdWxkIGVh Y2ggdGVzdCBhIGRpZmZlcmVudCBwcm9wZXJ0eSB0aGF0IGFuDQo+IC1hZGQgZnVuY3Rpb24gc2hv dWxkIGhhdmUgbGlrZSB0aGlzOg0KPiArRm9yIGV4YW1wbGUsIGlmIHdlIHdhbnQgdG8gcmlnb3Jv dXNseSB0ZXN0IHRoZSBgYGFkZGBgIGZ1bmN0aW9uIGFib3ZlLCBjcmVhdGUNCj4gK2FkZGl0aW9u YWwgdGVzdHMgY2FzZXMgd2hpY2ggd291bGQgdGVzdCBlYWNoIHByb3BlcnR5IHRoYXQgYW4gYGBh ZGRgYCBmdW5jdGlvbg0KPiArc2hvdWxkIGhhdmUgYXMgc2hvd24gYmVsb3c6DQo+IA0KPiAgLi4g Y29kZS1ibG9jazo6IGMNCj4gDQo+IEBAIC0xMzQsNTYgKzkwLDQzIEBAIGFkZCBmdW5jdGlvbiBz aG91bGQgaGF2ZSBsaWtlIHRoaXM6DQo+ICAJCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBJTlRfTUlO LCBhZGQoSU5UX01BWCwgMSkpOw0KPiAgCX0NCj4gDQo+IC1Ob3RpY2UgaG93IGl0IGlzIGltbWVk aWF0ZWx5IG9idmlvdXMgd2hhdCBhbGwgdGhlIHByb3BlcnRpZXMgdGhhdCB3ZSBhcmUgdGVzdGlu Zw0KPiAtZm9yIGFyZS4NCj4gLQ0KPiAgQXNzZXJ0aW9ucw0KPiAgfn5+fn5+fn5+fg0KPiANCj4g LUtVbml0IGFsc28gaGFzIHRoZSBjb25jZXB0IG9mIGFuICphc3NlcnRpb24qLiBBbiBhc3NlcnRp b24gaXMganVzdCBsaWtlIGFuDQo+IC1leHBlY3RhdGlvbiBleGNlcHQgdGhlIGFzc2VydGlvbiBp bW1lZGlhdGVseSB0ZXJtaW5hdGVzIHRoZSB0ZXN0IGNhc2UgaWYgaXQgaXMNCj4gLW5vdCBzYXRp c2ZpZWQuDQo+IC0NCj4gLUZvciBleGFtcGxlOg0KPiArQW4gYXNzZXJ0aW9uIGlzIGxpa2UgYW4g ZXhwZWN0YXRpb24sIGV4Y2VwdCB0aGF0IHRoZSBhc3NlcnRpb24gaW1tZWRpYXRlbHkNCj4gK3Rl cm1pbmF0ZXMgdGhlIHRlc3QgY2FzZSBpZiB0aGUgY29uZGl0aW9uIGlzIG5vdCBzYXRpc2ZpZWQu IEZvciBleGFtcGxlOg0KPiANCj4gIC4uIGNvZGUtYmxvY2s6OiBjDQo+IA0KPiAtCXN0YXRpYyB2 b2lkIG1vY2tfdGVzdF9kb19leHBlY3RfZGVmYXVsdF9yZXR1cm4oc3RydWN0IGt1bml0ICp0ZXN0 KQ0KPiArCXN0YXRpYyB2b2lkIHRlc3Rfc29ydChzdHJ1Y3Qga3VuaXQgKnRlc3QpDQo+ICAJew0K PiAtCQlzdHJ1Y3QgbW9ja190ZXN0X2NvbnRleHQgKmN0eCA9IHRlc3QtPnByaXY7DQo+IC0JCXN0 cnVjdCBtb2NrICptb2NrID0gY3R4LT5tb2NrOw0KPiAtCQlpbnQgcGFyYW0wID0gNSwgcGFyYW0x ID0gLTU7DQo+IC0JCWNvbnN0IGNoYXIgKnR3b19wYXJhbV90eXBlc1tdID0geyJpbnQiLCAiaW50 In07DQo+IC0JCWNvbnN0IHZvaWQgKnR3b19wYXJhbXNbXSA9IHsmcGFyYW0wLCAmcGFyYW0xfTsN Cj4gLQkJY29uc3Qgdm9pZCAqcmV0Ow0KPiAtDQo+IC0JCXJldCA9IG1vY2stPmRvX2V4cGVjdCht b2NrLA0KPiAtCQkJCSAgICAgICJ0ZXN0X3ByaW50ayIsIHRlc3RfcHJpbnRrLA0KPiAtCQkJCSAg ICAgIHR3b19wYXJhbV90eXBlcywgdHdvX3BhcmFtcywNCj4gLQkJCQkgICAgICBBUlJBWV9TSVpF KHR3b19wYXJhbXMpKTsNCj4gLQkJS1VOSVRfQVNTRVJUX05PVF9FUlJfT1JfTlVMTCh0ZXN0LCBy ZXQpOw0KPiAtCQlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgLTQsICooKGludCAqKSByZXQpKTsNCj4g KwkJaW50ICphLCBpLCByID0gMTsNCj4gKwkJYSA9IGt1bml0X2ttYWxsb2NfYXJyYXkodGVzdCwg VEVTVF9MRU4sIHNpemVvZigqYSksIEdGUF9LRVJORUwpOw0KPiArCQlLVU5JVF9BU1NFUlRfTk9U X0VSUl9PUl9OVUxMKHRlc3QsIGEpOw0KPiArCQlmb3IgKGkgPSAwOyBpIDwgVEVTVF9MRU47IGkr Kykgew0KPiArCQkJciA9IChyICogNzI1ODYxKSAlIDY1OTk7DQo+ICsJCQlhW2ldID0gcjsNCj4g KwkJfQ0KPiArCQlzb3J0KGEsIFRFU1RfTEVOLCBzaXplb2YoKmEpLCBjbXBpbnQsIE5VTEwpOw0K PiArCQlmb3IgKGkgPSAwOyBpIDwgVEVTVF9MRU4tMTsgaSsrKQ0KPiArCQkJS1VOSVRfRVhQRUNU X0xFKHRlc3QsIGFbaV0sIGFbaSArIDFdKTsNCj4gIAl9DQo+IA0KPiAtSW4gdGhpcyBleGFtcGxl LCB0aGUgbWV0aG9kIHVuZGVyIHRlc3Qgc2hvdWxkIHJldHVybiBhIHBvaW50ZXIgdG8gYSB2YWx1 ZSwgc28NCj4gLWlmIHRoZSBwb2ludGVyIHJldHVybmVkIGJ5IHRoZSBtZXRob2QgaXMgbnVsbCBv ciBhbiBlcnJubywgd2UgZG9uJ3Qgd2FudCB0bw0KPiAtYm90aGVyIGNvbnRpbnVpbmcgdGhlIHRl c3Qgc2luY2UgdGhlIGZvbGxvd2luZyBleHBlY3RhdGlvbiBjb3VsZCBjcmFzaCB0aGUgdGVzdA0K PiAtY2FzZS4gYEFTU0VSVF9OT1RfRVJSX09SX05VTEwoLi4uKWAgYWxsb3dzIHVzIHRvIGJhaWwg b3V0IG9mIHRoZSB0ZXN0IGNhc2UgaWYNCj4gLXRoZSBhcHByb3ByaWF0ZSBjb25kaXRpb25zIGhh dmUgbm90IGJlZW4gc2F0aXNmaWVkIHRvIGNvbXBsZXRlIHRoZSB0ZXN0Lg0KPiArSW4gdGhpcyBl eGFtcGxlLCB0aGUgbWV0aG9kIHVuZGVyIHRlc3Qgc2hvdWxkIHJldHVybiBwb2ludGVyIHRvIGEg dmFsdWUuIElmIHRoZQ0KPiArcG9pbnRlciByZXR1cm5zIG51bGwgb3IgYW4gZXJybm8sIHdlIHdh bnQgdG8gc3RvcCB0aGUgdGVzdCBzaW5jZSB0aGUgZm9sbG93aW5nDQo+ICtleHBlY3RhdGlvbiBj b3VsZCBjcmFzaCB0aGUgdGVzdCBjYXNlLiBgQVNTRVJUX05PVF9FUlJfT1JfTlVMTCguLi4pYCBh bGxvd3MgdXMNCj4gK3RvIGJhaWwgb3V0IG9mIHRoZSB0ZXN0IGNhc2UgaWYgdGhlIGFwcHJvcHJp YXRlIGNvbmRpdGlvbnMgYXJlIG5vdCBzYXRpc2ZpZWQgdG8NCj4gK2NvbXBsZXRlIHRoZSB0ZXN0 Lg0KPiANCj4gIFRlc3QgU3VpdGVzDQo+ICB+fn5+fn5+fn5+fg0KPiANCj4gLU5vdyBvYnZpb3Vz bHkgb25lIHVuaXQgdGVzdCBpc24ndCB2ZXJ5IGhlbHBmdWw7IHRoZSBwb3dlciBjb21lcyBmcm9t IGhhdmluZw0KPiAtbWFueSB0ZXN0IGNhc2VzIGNvdmVyaW5nIGFsbCBvZiBhIHVuaXQncyBiZWhh dmlvcnMuIENvbnNlcXVlbnRseSBpdCBpcyBjb21tb24NCj4gLXRvIGhhdmUgbWFueSAqc2ltaWxh ciogdGVzdHM7IGluIG9yZGVyIHRvIHJlZHVjZSBkdXBsaWNhdGlvbiBpbiB0aGVzZSBjbG9zZWx5 DQo+IC1yZWxhdGVkIHRlc3RzIG1vc3QgdW5pdCB0ZXN0aW5nIGZyYW1ld29ya3MgLSBpbmNsdWRp bmcgS1VuaXQgLSBwcm92aWRlIHRoZQ0KPiAtY29uY2VwdCBvZiBhICp0ZXN0IHN1aXRlKi4gQSAq dGVzdCBzdWl0ZSogaXMganVzdCBhIGNvbGxlY3Rpb24gb2YgdGVzdCBjYXNlcw0KPiAtZm9yIGEg dW5pdCBvZiBjb2RlIHdpdGggYSBzZXQgdXAgZnVuY3Rpb24gdGhhdCBnZXRzIGludm9rZWQgYmVm b3JlIGV2ZXJ5IHRlc3QNCj4gLWNhc2UgYW5kIHRoZW4gYSB0ZWFyIGRvd24gZnVuY3Rpb24gdGhh dCBnZXRzIGludm9rZWQgYWZ0ZXIgZXZlcnkgdGVzdCBjYXNlDQo+IC1jb21wbGV0ZXMuDQo+IC0N Cj4gLUV4YW1wbGU6DQo+ICtXZSBuZWVkIG1hbnkgdGVzdCBjYXNlcyBjb3ZlcmluZyBhbGwgdGhl IHVuaXQncyBiZWhhdmlvcnMuIEl0IGlzIGNvbW1vbiB0byBoYXZlDQo+ICttYW55IHNpbWlsYXIg dGVzdHMuIEluIG9yZGVyIHRvIHJlZHVjZSBkdXBsaWNhdGlvbiBpbiB0aGVzZSBjbG9zZWx5IHJl bGF0ZWQNCj4gK3Rlc3RzLCBtb3N0IHVuaXQgdGVzdGluZyBmcmFtZXdvcmtzIChpbmNsdWRpbmcg S1VuaXQpIHByb3ZpZGUgdGhlIGNvbmNlcHQgb2YgYQ0KPiArKnRlc3Qgc3VpdGUqLiBBIHRlc3Qg c3VpdGUgaXMgYSBjb2xsZWN0aW9uIG9mIHRlc3QgY2FzZXMgZm9yIGEgdW5pdCBvZiBjb2RlDQo+ ICt3aXRoIGEgc2V0dXAgZnVuY3Rpb24gdGhhdCBnZXRzIGludm9rZWQgYmVmb3JlIGV2ZXJ5IHRl c3QgY2FzZSBhbmQgdGhlbiBhIHRlYXINCj4gK2Rvd24gZnVuY3Rpb24gdGhhdCBnZXRzIGludm9r ZWQgYWZ0ZXIgZXZlcnkgdGVzdCBjYXNlIGNvbXBsZXRlcy4gRm9yIGV4YW1wbGU6DQo+IA0KPiAg Li4gY29kZS1ibG9jazo6IGMNCj4gDQo+IEBAIC0yMDIsMjMgKzE0NSw0OCBAQCBFeGFtcGxlOg0K PiAgCX07DQo+ICAJa3VuaXRfdGVzdF9zdWl0ZShleGFtcGxlX3Rlc3Rfc3VpdGUpOw0KPiANCj4g LUluIHRoZSBhYm92ZSBleGFtcGxlIHRoZSB0ZXN0IHN1aXRlLCBgYGV4YW1wbGVfdGVzdF9zdWl0 ZWBgLCB3b3VsZCBydW4gdGhlIHRlc3QNCj4gLWNhc2VzIGBgZXhhbXBsZV90ZXN0X2Zvb2BgLCBg YGV4YW1wbGVfdGVzdF9iYXJgYCwgYW5kIGBgZXhhbXBsZV90ZXN0X2JhemBgOw0KPiAtZWFjaCB3 b3VsZCBoYXZlIGBgZXhhbXBsZV90ZXN0X2luaXRgYCBjYWxsZWQgaW1tZWRpYXRlbHkgYmVmb3Jl IGl0IGFuZCB3b3VsZA0KPiAtaGF2ZSBgYGV4YW1wbGVfdGVzdF9leGl0YGAgY2FsbGVkIGltbWVk aWF0ZWx5IGFmdGVyIGl0Lg0KPiArSW4gdGhlIGFib3ZlIGV4YW1wbGUsIHRoZSB0ZXN0IHN1aXRl IGBgZXhhbXBsZV90ZXN0X3N1aXRlYGAgd291bGQgcnVuIHRoZSB0ZXN0DQo+ICtjYXNlcyBgYGV4 YW1wbGVfdGVzdF9mb29gYCwgYGBleGFtcGxlX3Rlc3RfYmFyYGAsIGFuZCBgYGV4YW1wbGVfdGVz dF9iYXpgYC4gRWFjaA0KPiArd291bGQgaGF2ZSBgYGV4YW1wbGVfdGVzdF9pbml0YGAgY2FsbGVk IGltbWVkaWF0ZWx5IGJlZm9yZSBpdCBhbmQNCj4gK2BgZXhhbXBsZV90ZXN0X2V4aXRgYCBjYWxs ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgaXQuDQo+ICBgYGt1bml0X3Rlc3Rfc3VpdGUoZXhhbXBsZV90 ZXN0X3N1aXRlKWBgIHJlZ2lzdGVycyB0aGUgdGVzdCBzdWl0ZSB3aXRoIHRoZQ0KPiAgS1VuaXQg dGVzdCBmcmFtZXdvcmsuDQo+IA0KPiAgLi4gbm90ZTo6DQo+IC0gICBBIHRlc3QgY2FzZSB3aWxs IG9ubHkgYmUgcnVuIGlmIGl0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIHRlc3Qgc3VpdGUuDQo+ICsg ICBBIHRlc3QgY2FzZSB3aWxsIG9ubHkgcnVuIGlmIGl0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIHRl c3Qgc3VpdGUuDQo+ICsNCj4gK2Bga3VuaXRfdGVzdF9zdWl0ZSguLi4pYGAgaXMgYSBtYWNybyB3 aGljaCB0ZWxscyB0aGUgbGlua2VyIHRvIHB1dCB0aGUNCj4gK3NwZWNpZmllZCB0ZXN0IHN1aXRl IGluIGEgc3BlY2lhbCBsaW5rZXIgc2VjdGlvbiBzbyB0aGF0IGl0IGNhbiBiZSBydW4gYnkgS1Vu aXQNCj4gK2VpdGhlciBhZnRlciBgYGxhdGVfaW5pdGBgLCBvciB3aGVuIHRoZSB0ZXN0IG1vZHVs ZSBpcyBsb2FkZWQgKGlmIHRoZSB0ZXN0IHdhcw0KPiArYnVpbHQgYXMgYSBtb2R1bGUpLg0KPiAr DQo+ICtGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1 bml0L2FwaS90ZXN0LnJzdC4NCj4gKw0KPiArV3JpdGluZyBUZXN0cyBGb3IgT3RoZXIgQXJjaGl0 ZWN0dXJlcw0KPiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiArDQo+ ICtJdCBpcyBiZXR0ZXIgdG8gd3JpdGUgdGVzdHMgdGhhdCBydW4gb24gVU1MIHRvIHRlc3RzIHRo YXQgb25seSBydW4gdW5kZXIgYQ0KPiArcGFydGljdWxhciBhcmNoaXRlY3R1cmUuIEl0IGlzIGJl dHRlciB0byB3cml0ZSB0ZXN0cyB0aGF0IHJ1biB1bmRlciBRRU1VIG9yDQo+ICthbm90aGVyIGVh c3kgdG8gb2J0YWluIChhbmQgbW9uZXRhcmlseSBmcmVlKSB0byBvYnRhaW4gc29mdHdhcmUgZW52 aXJvbm1lbnQNCg0KWW91IHNob3VsZCByZW1vdmUgdGhlIHNlY29uZCAidG8gb2J0YWluIiBhYm92 ZS4NCg0KPiArdG8gYSBzcGVjaWZpYyBwaWVjZSBvZiBoYXJkd2FyZS4NCj4gDQo+IC1gYGt1bml0 X3Rlc3Rfc3VpdGUoLi4uKWBgIGlzIGEgbWFjcm8gd2hpY2ggdGVsbHMgdGhlIGxpbmtlciB0byBw dXQgdGhlIHNwZWNpZmllZA0KPiAtdGVzdCBzdWl0ZSBpbiBhIHNwZWNpYWwgbGlua2VyIHNlY3Rp b24gc28gdGhhdCBpdCBjYW4gYmUgcnVuIGJ5IEtVbml0IGVpdGhlcg0KPiAtYWZ0ZXIgbGF0ZV9p bml0LCBvciB3aGVuIHRoZSB0ZXN0IG1vZHVsZSBpcyBsb2FkZWQgKGRlcGVuZGluZyBvbiB3aGV0 aGVyIHRoZQ0KPiAtdGVzdCB3YXMgYnVpbHQgaW4gb3Igbm90KS4NCj4gK05ldmVydGhlbGVzcywg dGhlcmUgYXJlIHN0aWxsIHZhbGlkIHJlYXNvbnMgdG8gd3JpdGUgYSB0ZXN0IHRoYXQgaXMgYXJj aGl0ZWN0dXJlDQo+ICtvciBoYXJkd2FyZSBzcGVjaWZpYy4gRm9yIGV4YW1wbGUsIHdlIG1pZ2h0 IHdhbnQgdG8gdGVzdCBjb2RlIHRoYXQgcmVhbGx5DQo+ICtiZWxvbmdzIGluIGBgYXJjaC9zb21l LWFyY2gvKmBgLiBFdmVuIHNvLCB0cnkgdG8gd3JpdGUgdGhlIHRlc3Qgc28gdGhhdCBpdCBkb2Vz DQo+ICtub3QgZGVwZW5kIG9uIHBoeXNpY2FsIGhhcmR3YXJlLiBTb21lIG9mIG91ciB0ZXN0IGNh c2VzIG1heSBub3QgbmVlZCBoYXJkd2FyZSwNCj4gK29ubHkgZmV3IHRlc3RzIGFjdHVhbGx5IHJl cXVpcmUgdGhlIGhhcmR3YXJlIHRvIHRlc3QgaXQuIFdoZW4gaGFyZHdhcmUgaXMgbm90DQo+ICth dmFpbGFibGUsIGluc3RlYWQgb2YgZGlzYWJsaW5nIHRlc3RzLCB3ZSBjYW4gc2tpcCB0aGVtLg0K PiANCj4gLUZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZXNlIHR5cGVzIG9mIHRoaW5ncyBzZWUg dGhlDQo+IC1Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC9hcGkvdGVzdC5yc3QuDQo+ICtO b3cgdGhhdCB3ZSBoYXZlIG5hcnJvd2VkIGRvd24gZXhhY3RseSB3aGF0IGJpdHMgYXJlIGhhcmR3 YXJlIHNwZWNpZmljLCB0aGUNCj4gK2FjdHVhbCBwcm9jZWR1cmUgZm9yIHdyaXRpbmcgYW5kIHJ1 bm5pbmcgdGhlIHRlc3RzIGlzIHNhbWUgYXMgd3JpdGluZyBub3JtYWwNCj4gK0tVbml0IHRlc3Rz Lg0KPiArDQo+ICsuLiBpbXBvcnRhbnQ6Og0KPiArICAgV2UgbWF5IGhhdmUgdG8gcmVzZXQgaGFy ZHdhcmUgc3RhdGUuIElmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCB3ZSBtYXkgb25seQ0KPiArICAg YmUgYWJsZSB0byBydW4gb25lIHRlc3QgY2FzZSBwZXIgaW52b2NhdGlvbi4NCj4gKw0KPiArLi4g VE9ETyhicmVuZGFuaGlnZ2luc0Bnb29nbGUuY29tKTogQWRkIGFuIGFjdHVhbCBleGFtcGxlIG9m IGFuIGFyY2hpdGVjdHVyZS0NCj4gKyAgIGRlcGVuZGVudCBLVW5pdCB0ZXN0Lg0KPiANCj4gIENv bW1vbiBQYXR0ZXJucw0KPiAgPT09PT09PT09PT09PT09DQo+IEBAIC0yMjYsNDMgKzE5NCwzOSBA QCBDb21tb24gUGF0dGVybnMNCj4gIElzb2xhdGluZyBCZWhhdmlvcg0KPiAgLS0tLS0tLS0tLS0t LS0tLS0tDQo+IA0KPiAtVGhlIG1vc3QgaW1wb3J0YW50IGFzcGVjdCBvZiB1bml0IHRlc3Rpbmcg dGhhdCBvdGhlciBmb3JtcyBvZiB0ZXN0aW5nIGRvIG5vdA0KPiAtcHJvdmlkZSBpcyB0aGUgYWJp bGl0eSB0byBsaW1pdCB0aGUgYW1vdW50IG9mIGNvZGUgdW5kZXIgdGVzdCB0byBhIHNpbmdsZSB1 bml0Lg0KPiAtSW4gcHJhY3RpY2UsIHRoaXMgaXMgb25seSBwb3NzaWJsZSBieSBiZWluZyBhYmxl IHRvIGNvbnRyb2wgd2hhdCBjb2RlIGdldHMgcnVuDQo+IC13aGVuIHRoZSB1bml0IHVuZGVyIHRl c3QgY2FsbHMgYSBmdW5jdGlvbiBhbmQgdGhpcyBpcyB1c3VhbGx5IGFjY29tcGxpc2hlZA0KPiAt dGhyb3VnaCBzb21lIHNvcnQgb2YgaW5kaXJlY3Rpb24gd2hlcmUgYSBmdW5jdGlvbiBpcyBleHBv c2VkIGFzIHBhcnQgb2YgYW4gQVBJDQo+IC1zdWNoIHRoYXQgdGhlIGRlZmluaXRpb24gb2YgdGhh dCBmdW5jdGlvbiBjYW4gYmUgY2hhbmdlZCB3aXRob3V0IGFmZmVjdGluZyB0aGUNCj4gLXJlc3Qg b2YgdGhlIGNvZGUgYmFzZS4gSW4gdGhlIGtlcm5lbCB0aGlzIHByaW1hcmlseSBjb21lcyBmcm9t IHR3byBjb25zdHJ1Y3RzLA0KPiAtY2xhc3Nlcywgc3RydWN0cyB0aGF0IGNvbnRhaW4gZnVuY3Rp b24gcG9pbnRlcnMgdGhhdCBhcmUgcHJvdmlkZWQgYnkgdGhlDQo+IC1pbXBsZW1lbnRlciwgYW5k IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmdW5jdGlvbnMgd2hpY2ggaGF2ZSBkZWZpbml0aW9ucyBz ZWxlY3RlZA0KPiAtYXQgY29tcGlsZSB0aW1lLg0KPiArVW5pdCB0ZXN0aW5nIGxpbWl0cyB0aGUg YW1vdW50IG9mIGNvZGUgdW5kZXIgdGVzdCB0byBhIHNpbmdsZSB1bml0LiBJdCBjb250cm9scw0K PiArd2hhdCBjb2RlIGdldHMgcnVuIHdoZW4gdGhlIHVuaXQgdW5kZXIgdGVzdCBjYWxscyBhIGZ1 bmN0aW9uLiBXaGVyZSBhIGZ1bmN0aW9uDQo+ICtpcyBleHBvc2VkIGFzIHBhcnQgb2YgYW4gQVBJ IHN1Y2ggdGhhdCB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IGZ1bmN0aW9uIGNhbiBiZQ0KPiArY2hh bmdlZCB3aXRob3V0IGFmZmVjdGluZyB0aGUgcmVzdCBvZiB0aGUgY29kZSBiYXNlLiBJbiB0aGUg a2VybmVsLCB0aGlzIGNvbWVzDQo+ICtmcm9tIHR3byBjb25zdHJ1Y3RzOiBjbGFzc2VzLCB3aGlj aCBhcmUgc3RydWN0cyB0aGF0IGNvbnRhaW4gZnVuY3Rpb24gcG9pbnRlcnMNCj4gK3Byb3ZpZGVk IGJ5IHRoZSBpbXBsZW1lbnRlciwgYW5kIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmdW5jdGlvbnMs IHdoaWNoIGhhdmUNCj4gK2RlZmluaXRpb25zIHNlbGVjdGVkIGF0IGNvbXBpbGUgdGltZS4NCj4g DQo+ICBDbGFzc2VzDQo+ICB+fn5+fn5+DQo+IA0KPiAgQ2xhc3NlcyBhcmUgbm90IGEgY29uc3Ry dWN0IHRoYXQgaXMgYnVpbHQgaW50byB0aGUgQyBwcm9ncmFtbWluZyBsYW5ndWFnZTsNCj4gLWhv d2V2ZXIsIGl0IGlzIGFuIGVhc2lseSBkZXJpdmVkIGNvbmNlcHQuIEFjY29yZGluZ2x5LCBwcmV0 dHkgbXVjaCBldmVyeSBwcm9qZWN0DQo+IC10aGF0IGRvZXMgbm90IHVzZSBhIHN0YW5kYXJkaXpl ZCBvYmplY3Qgb3JpZW50ZWQgbGlicmFyeSAobGlrZSBHTk9NRSdzIEdPYmplY3QpDQo+IC1oYXMg dGhlaXIgb3duIHNsaWdodGx5IGRpZmZlcmVudCB3YXkgb2YgZG9pbmcgb2JqZWN0IG9yaWVudGVk IHByb2dyYW1taW5nOyB0aGUNCj4gLUxpbnV4IGtlcm5lbCBpcyBubyBleGNlcHRpb24uDQo+ICto b3dldmVyLCBpdCBpcyBhbiBlYXNpbHkgZGVyaXZlZCBjb25jZXB0LiBBY2NvcmRpbmdseSwgaW4g bW9zdCBjYXNlcywgZXZlcnkNCj4gK3Byb2plY3QgdGhhdCBkb2VzIG5vdCB1c2UgYSBzdGFuZGFy ZGl6ZWQgb2JqZWN0IG9yaWVudGVkIGxpYnJhcnkgKGxpa2UgR05PTUUncw0KPiArR09iamVjdCkg aGFzIHRoZWlyIG93biBzbGlnaHRseSBkaWZmZXJlbnQgd2F5IG9mIGRvaW5nIG9iamVjdCBvcmll bnRlZA0KPiArcHJvZ3JhbW1pbmc7IHRoZSBMaW51eCBrZXJuZWwgaXMgbm8gZXhjZXB0aW9uLg0K PiANCj4gIFRoZSBjZW50cmFsIGNvbmNlcHQgaW4ga2VybmVsIG9iamVjdCBvcmllbnRlZCBwcm9n cmFtbWluZyBpcyB0aGUgY2xhc3MuIEluIHRoZQ0KPiAga2VybmVsLCBhICpjbGFzcyogaXMgYSBz dHJ1Y3QgdGhhdCBjb250YWlucyBmdW5jdGlvbiBwb2ludGVycy4gVGhpcyBjcmVhdGVzIGENCj4g IGNvbnRyYWN0IGJldHdlZW4gKmltcGxlbWVudGVycyogYW5kICp1c2Vycyogc2luY2UgaXQgZm9y Y2VzIHRoZW0gdG8gdXNlIHRoZQ0KPiAtc2FtZSBmdW5jdGlvbiBzaWduYXR1cmUgd2l0aG91dCBo YXZpbmcgdG8gY2FsbCB0aGUgZnVuY3Rpb24gZGlyZWN0bHkuIEluIG9yZGVyDQo+IC1mb3IgaXQg dG8gdHJ1bHkgYmUgYSBjbGFzcywgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzIG11c3Qgc3BlY2lmeSB0 aGF0IGEgcG9pbnRlcg0KPiAtdG8gdGhlIGNsYXNzLCBrbm93biBhcyBhICpjbGFzcyBoYW5kbGUq LCBiZSBvbmUgb2YgdGhlIHBhcmFtZXRlcnM7IHRoaXMgbWFrZXMNCj4gLWl0IHBvc3NpYmxlIGZv ciB0aGUgbWVtYmVyIGZ1bmN0aW9ucyAoYWxzbyBrbm93biBhcyAqbWV0aG9kcyopIHRvIGhhdmUg YWNjZXNzDQo+IC10byBtZW1iZXIgdmFyaWFibGVzIChtb3JlIGNvbW1vbmx5IGtub3duIGFzICpm aWVsZHMqKSBhbGxvd2luZyB0aGUgc2FtZQ0KPiAtaW1wbGVtZW50YXRpb24gdG8gaGF2ZSBtdWx0 aXBsZSAqaW5zdGFuY2VzKi4NCj4gLQ0KPiAtVHlwaWNhbGx5IGEgY2xhc3MgY2FuIGJlICpvdmVy cmlkZGVuKiBieSAqY2hpbGQgY2xhc3NlcyogYnkgZW1iZWRkaW5nIHRoZQ0KPiAtKnBhcmVudCBj bGFzcyogaW4gdGhlIGNoaWxkIGNsYXNzLiBUaGVuIHdoZW4gYSBtZXRob2QgcHJvdmlkZWQgYnkg dGhlIGNoaWxkDQo+IC1jbGFzcyBpcyBjYWxsZWQsIHRoZSBjaGlsZCBpbXBsZW1lbnRhdGlvbiBr bm93cyB0aGF0IHRoZSBwb2ludGVyIHBhc3NlZCB0byBpdCBpcw0KPiAtb2YgYSBwYXJlbnQgY29u dGFpbmVkIHdpdGhpbiB0aGUgY2hpbGQ7IGJlY2F1c2Ugb2YgdGhpcywgdGhlIGNoaWxkIGNhbiBj b21wdXRlDQo+IC10aGUgcG9pbnRlciB0byBpdHNlbGYgYmVjYXVzZSB0aGUgcG9pbnRlciB0byB0 aGUgcGFyZW50IGlzIGFsd2F5cyBhIGZpeGVkIG9mZnNldA0KPiAtZnJvbSB0aGUgcG9pbnRlciB0 byB0aGUgY2hpbGQ7IHRoaXMgb2Zmc2V0IGlzIHRoZSBvZmZzZXQgb2YgdGhlIHBhcmVudCBjb250 YWluZWQNCj4gLWluIHRoZSBjaGlsZCBzdHJ1Y3QuIEZvciBleGFtcGxlOg0KPiArc2FtZSBmdW5j dGlvbiBzaWduYXR1cmUgd2l0aG91dCBoYXZpbmcgdG8gY2FsbCB0aGUgZnVuY3Rpb24gZGlyZWN0 bHkuIFRvIGJlIGENCj4gK2NsYXNzLCB0aGUgZnVuY3Rpb24gcG9pbnRlcnMgbXVzdCBzcGVjaWZ5 IHRoYXQgYSBwb2ludGVyIHRvIHRoZSBjbGFzcywga25vd24gYXMNCj4gK2EgKmNsYXNzIGhhbmRs ZSosIGJlIG9uZSBvZiB0aGUgcGFyYW1ldGVycy4gVGh1cyB0aGUgbWVtYmVyIGZ1bmN0aW9ucyAo YWxzbw0KPiAra25vd24gYXMgKm1ldGhvZHMqKSBoYXZlIGFjY2VzcyB0byBtZW1iZXIgdmFyaWFi bGVzIChhbHNvIGtub3duIGFzICpmaWVsZHMqKQ0KPiArYWxsb3dpbmcgdGhlIHNhbWUgaW1wbGVt ZW50YXRpb24gdG8gaGF2ZSBtdWx0aXBsZSAqaW5zdGFuY2VzKi4NCj4gKw0KPiArQSBjbGFzcyBj YW4gYmUgKm92ZXJyaWRkZW4qIGJ5ICpjaGlsZCBjbGFzc2VzKiBieSBlbWJlZGRpbmcgdGhlICpw YXJlbnQgY2xhc3MqDQo+ICtpbiB0aGUgY2hpbGQgY2xhc3MuIFRoZW4gd2hlbiB0aGUgY2hpbGQg Y2xhc3MgKm1ldGhvZCogaXMgY2FsbGVkLCB0aGUgY2hpbGQNCj4gK2ltcGxlbWVudGF0aW9uIGtu b3dzIHRoYXQgdGhlIHBvaW50ZXIgcGFzc2VkIHRvIGl0IGlzIG9mIGEgcGFyZW50IGNvbnRhaW5l ZA0KPiArd2l0aGluIHRoZSBjaGlsZC4gVGh1cywgdGhlIGNoaWxkIGNhbiBjb21wdXRlIHRoZSBw b2ludGVyIHRvIGl0c2VsZiBiZWNhdXNlIHRoZQ0KPiArcG9pbnRlciB0byB0aGUgcGFyZW50IGlz IGFsd2F5cyBhIGZpeGVkIG9mZnNldCBmcm9tIHRoZSBwb2ludGVyIHRvIHRoZSBjaGlsZC4NCj4g K1RoaXMgb2Zmc2V0IGlzIHRoZSBvZmZzZXQgb2YgdGhlIHBhcmVudCBjb250YWluZWQgaW4gdGhl IGNoaWxkIHN0cnVjdC4gRm9yDQo+ICtleGFtcGxlOg0KPiANCj4gIC4uIGNvZGUtYmxvY2s6OiBj DQo+IA0KPiBAQCAtMjkwLDggKzI1NCw4IEBAIGluIHRoZSBjaGlsZCBzdHJ1Y3QuIEZvciBleGFt cGxlOg0KPiAgCQlzZWxmLT53aWR0aCA9IHdpZHRoOw0KPiAgCX0NCj4gDQo+IC1JbiB0aGlzIGV4 YW1wbGUgKGFzIGluIG1vc3Qga2VybmVsIGNvZGUpIHRoZSBvcGVyYXRpb24gb2YgY29tcHV0aW5n IHRoZSBwb2ludGVyDQo+IC10byB0aGUgY2hpbGQgZnJvbSB0aGUgcG9pbnRlciB0byB0aGUgcGFy ZW50IGlzIGRvbmUgYnkgYGBjb250YWluZXJfb2ZgYC4NCj4gK0luIHRoaXMgZXhhbXBsZSwgY29t cHV0aW5nIHRoZSBwb2ludGVyIHRvIHRoZSBjaGlsZCBmcm9tIHRoZSBwb2ludGVyIHRvIHRoZQ0K PiArcGFyZW50IGlzIGRvbmUgYnkgYGBjb250YWluZXJfb2ZgYC4NCj4gDQo+ICBGYWtpbmcgQ2xh c3Nlcw0KPiAgfn5+fn5+fn5+fn5+fn4NCj4gQEAgLTMwMCwxNCArMjY0LDExIEBAIEluIG9yZGVy IHRvIHVuaXQgdGVzdCBhIHBpZWNlIG9mIGNvZGUgdGhhdCBjYWxscyBhIG1ldGhvZCBpbiBhIGNs YXNzLCB0aGUNCj4gIGJlaGF2aW9yIG9mIHRoZSBtZXRob2QgbXVzdCBiZSBjb250cm9sbGFibGUs IG90aGVyd2lzZSB0aGUgdGVzdCBjZWFzZXMgdG8gYmUgYQ0KPiAgdW5pdCB0ZXN0IGFuZCBiZWNv bWVzIGFuIGludGVncmF0aW9uIHRlc3QuDQo+IA0KPiAtQSBmYWtlIGp1c3QgcHJvdmlkZXMgYW4g aW1wbGVtZW50YXRpb24gb2YgYSBwaWVjZSBvZiBjb2RlIHRoYXQgaXMgZGlmZmVyZW50IHRoYW4N Cj4gLXdoYXQgcnVucyBpbiBhIHByb2R1Y3Rpb24gaW5zdGFuY2UsIGJ1dCBiZWhhdmVzIGlkZW50 aWNhbGx5IGZyb20gdGhlIHN0YW5kcG9pbnQNCj4gLW9mIHRoZSBjYWxsZXJzOyB0aGlzIGlzIHVz dWFsbHkgZG9uZSB0byByZXBsYWNlIGEgZGVwZW5kZW5jeSB0aGF0IGlzIGhhcmQgdG8NCj4gLWRl YWwgd2l0aCwgb3IgaXMgc2xvdy4NCj4gLQ0KPiAtQSBnb29kIGV4YW1wbGUgZm9yIHRoaXMgbWln aHQgYmUgaW1wbGVtZW50aW5nIGEgZmFrZSBFRVBST00gdGhhdCBqdXN0IHN0b3JlcyB0aGUNCj4g LSJjb250ZW50cyIgaW4gYW4gaW50ZXJuYWwgYnVmZmVyLiBGb3IgZXhhbXBsZSwgbGV0J3MgYXNz dW1lIHdlIGhhdmUgYSBjbGFzcyB0aGF0DQo+IC1yZXByZXNlbnRzIGFuIEVFUFJPTToNCj4gK0Eg ZmFrZSBjbGFzcyBpbXBsZW1lbnRzIGEgcGllY2Ugb2YgY29kZSB0aGF0IGlzIGRpZmZlcmVudCB0 aGFuIHdoYXQgcnVucyBpbiBhDQo+ICtwcm9kdWN0aW9uIGluc3RhbmNlLCBidXQgYmVoYXZlcyBp ZGVudGljYWwgZnJvbSB0aGUgc3RhbmRwb2ludCBvZiB0aGUgY2FsbGVycy4NCj4gK1RoaXMgaXMg ZG9uZSB0byByZXBsYWNlIGEgZGVwZW5kZW5jeSB0aGF0IGlzIGhhcmQgdG8gZGVhbCB3aXRoLCBv ciBpcyBzbG93LiBGb3INCj4gK2V4YW1wbGUsIGltcGxlbWVudGluZyBhIGZha2UgRUVQUk9NIHRo YXQgc3RvcmVzIHRoZSAiY29udGVudHMiIGluIGFuDQo+ICtpbnRlcm5hbCBidWZmZXIuIEFzc3Vt ZSB3ZSBoYXZlIGEgY2xhc3MgdGhhdCByZXByZXNlbnRzIGFuIEVFUFJPTToNCj4gDQo+ICAuLiBj b2RlLWJsb2NrOjogYw0KPiANCj4gQEAgLTMxNiw3ICsyNzcsNyBAQCByZXByZXNlbnRzIGFuIEVF UFJPTToNCj4gIAkJc3NpemVfdCAoKndyaXRlKShzdHJ1Y3QgZWVwcm9tICp0aGlzLCBzaXplX3Qg b2Zmc2V0LCBjb25zdCBjaGFyICpidWZmZXIsIHNpemVfdCBjb3VudCk7DQo+ICAJfTsNCj4gDQo+ IC1BbmQgd2Ugd2FudCB0byB0ZXN0IHNvbWUgY29kZSB0aGF0IGJ1ZmZlcnMgd3JpdGVzIHRvIHRo ZSBFRVBST006DQo+ICtBbmQgd2Ugd2FudCB0byB0ZXN0IGNvZGUgdGhhdCBidWZmZXJzIHdyaXRl cyB0byB0aGUgRUVQUk9NOg0KPiANCj4gIC4uIGNvZGUtYmxvY2s6OiBjDQo+IA0KPiBAQCAtMzI5 LDcgKzI5MCw3IEBAIEFuZCB3ZSB3YW50IHRvIHRlc3Qgc29tZSBjb2RlIHRoYXQgYnVmZmVycyB3 cml0ZXMgdG8gdGhlIEVFUFJPTToNCj4gIAlzdHJ1Y3QgZWVwcm9tX2J1ZmZlciAqbmV3X2VlcHJv bV9idWZmZXIoc3RydWN0IGVlcHJvbSAqZWVwcm9tKTsNCj4gIAl2b2lkIGRlc3Ryb3lfZWVwcm9t X2J1ZmZlcihzdHJ1Y3QgZWVwcm9tICplZXByb20pOw0KPiANCj4gLVdlIGNhbiBlYXNpbHkgdGVz dCB0aGlzIGNvZGUgYnkgKmZha2luZyBvdXQqIHRoZSB1bmRlcmx5aW5nIEVFUFJPTToNCj4gK1dl IGNhbiB0ZXN0IHRoaXMgY29kZSBieSAqZmFraW5nIG91dCogdGhlIHVuZGVybHlpbmcgRUVQUk9N Og0KPiANCj4gIC4uIGNvZGUtYmxvY2s6OiBjDQo+IA0KPiBAQCAtNDU2LDE0ICs0MTcsMTQgQEAg V2UgY2FuIG5vdyB1c2UgaXQgdG8gdGVzdCBgYHN0cnVjdCBlZXByb21fYnVmZmVyYGA6DQo+ICAJ CWRlc3Ryb3lfZWVwcm9tX2J1ZmZlcihjdHgtPmVlcHJvbV9idWZmZXIpOw0KPiAgCX0NCj4gDQo+ IC1UZXN0aW5nIGFnYWluc3QgbXVsdGlwbGUgaW5wdXRzDQo+ICtUZXN0aW5nIEFnYWluc3QgTXVs dGlwbGUgSW5wdXRzDQo+ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+IA0KPiAt VGVzdGluZyBqdXN0IGEgZmV3IGlucHV0cyBtaWdodCBub3QgYmUgZW5vdWdoIHRvIGhhdmUgY29u ZmlkZW5jZSB0aGF0IHRoZSBjb2RlDQo+IC13b3JrcyBjb3JyZWN0bHksIGUuZy4gZm9yIGEgaGFz aCBmdW5jdGlvbi4NCj4gK1Rlc3RpbmcganVzdCBhIGZldyBpbnB1dHMgaXMgbm90IGVub3VnaCB0 byBlbnN1cmUgdGhhdCB0aGUgY29kZSB3b3JrcyBjb3JyZWN0bHksDQo+ICtmb3IgZXhhbXBsZTog dGVzdGluZyBhIGhhc2ggZnVuY3Rpb24uDQo+IA0KPiAtSW4gc3VjaCBjYXNlcywgaXQgY2FuIGJl IGhlbHBmdWwgdG8gaGF2ZSBhIGhlbHBlciBtYWNybyBvciBmdW5jdGlvbiwgZS5nLiB0aGlzDQo+ IC1maWN0aXRpb3VzIGV4YW1wbGUgZm9yIGBgc2hhMXN1bSgxKWBgDQo+ICtXZSBjYW4gd3JpdGUg YSBoZWxwZXIgbWFjcm8gb3IgZnVuY3Rpb24uIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGVh Y2ggaW5wdXQuDQo+ICtGb3IgZXhhbXBsZSwgdG8gdGVzdCBgYHNoYTFzdW0oMSlgYCwgd2UgY2Fu IHdyaXRlOg0KPiANCj4gIC4uIGNvZGUtYmxvY2s6OiBjDQo+IA0KPiBAQCAtNDc1LDE2ICs0MzYs MTUgQEAgZmljdGl0aW91cyBleGFtcGxlIGZvciBgYHNoYTFzdW0oMSlgYA0KPiAgCVRFU1RfU0hB MSgiaGVsbG8gd29ybGQiLCAgIjJhYWU2YzM1Yzk0ZmNmYjQxNWRiZTk1ZjQwOGI5Y2U5MWVlODQ2 ZWQiKTsNCj4gIAlURVNUX1NIQTEoImhlbGxvIHdvcmxkISIsICI0MzBjZTM0ZDAyMDcyNGVkNzVh MTk2ZGZjMmFkNjdjNzc3NzJkMTY5Iik7DQo+IA0KPiArTm90ZSB0aGUgdXNlIG9mIHRoZSBgYF9N U0dgYCB2ZXJzaW9uIG9mIGBgS1VOSVRfRVhQRUNUX1NUUkVRYGAgdG8gcHJpbnQgYSBtb3JlDQo+ ICtkZXRhaWxlZCBlcnJvciBhbmQgbWFrZSB0aGUgYXNzZXJ0aW9ucyBjbGVhcmVyIHdpdGhpbiB0 aGUgaGVscGVyIG1hY3Jvcy4NCj4gDQo+IC1Ob3RlIHRoZSB1c2Ugb2YgYGBLVU5JVF9FWFBFQ1Rf U1RSRVFfTVNHYGAgdG8gZ2l2ZSBtb3JlIGNvbnRleHQgd2hlbiBpdCBmYWlscw0KPiAtYW5kIG1h a2UgaXQgZWFzaWVyIHRvIHRyYWNrIGRvd24uIChZZXMsIGluIHRoaXMgZXhhbXBsZSwgYGB3YW50 YGAgaXMgbGlrZWx5DQo+IC1nb2luZyB0byBiZSB1bmlxdWUgZW5vdWdoIG9uIGl0cyBvd24pLg0K PiArVGhlIGBgX01TR2BgIHZhcmlhbnRzIGFyZSB1c2VmdWwgd2hlbiB0aGUgc2FtZSBleHBlY3Rh dGlvbiBpcyBjYWxsZWQgbXVsdGlwbGUNCj4gK3RpbWVzIChpbiBhIGxvb3Agb3IgaGVscGVyIGZ1 bmN0aW9uKSBhbmQgdGh1cyB0aGUgbGluZSBudW1iZXIgaXMgbm90IGVub3VnaCB0bw0KPiAraWRl bnRpZnkgd2hhdCBmYWlsZWQsIGFzIHNob3duIGJlbG93Lg0KPiANCj4gLVRoZSBgYF9NU0dgYCB2 YXJpYW50cyBhcmUgZXZlbiBtb3JlIHVzZWZ1bCB3aGVuIHRoZSBzYW1lIGV4cGVjdGF0aW9uIGlz IGNhbGxlZA0KPiAtbXVsdGlwbGUgdGltZXMgKGluIGEgbG9vcCBvciBoZWxwZXIgZnVuY3Rpb24p IGFuZCB0aHVzIHRoZSBsaW5lIG51bWJlciBpc24ndA0KPiAtZW5vdWdoIHRvIGlkZW50aWZ5IHdo YXQgZmFpbGVkLCBsaWtlIGJlbG93Lg0KPiAtDQo+IC1JbiBzb21lIGNhc2VzLCBpdCBjYW4gYmUg aGVscGZ1bCB0byB3cml0ZSBhICp0YWJsZS1kcml2ZW4gdGVzdCogaW5zdGVhZCwgZS5nLg0KPiAr SW4gY29tcGxpY2F0ZWQgY2FzZXMsIHdlIHJlY29tbWVuZCB1c2luZyBhICp0YWJsZS1kcml2ZW4g dGVzdCogY29tcGFyZWQgdG8gdGhlDQo+ICtoZWxwZXIgbWFjcm8gdmFyaWF0aW9uLCBmb3IgZXhh bXBsZToNCj4gDQo+ICAuLiBjb2RlLWJsb2NrOjogYw0KPiANCj4gQEAgLTUxMywxNyArNDczLDE4 IEBAIEluIHNvbWUgY2FzZXMsIGl0IGNhbiBiZSBoZWxwZnVsIHRvIHdyaXRlIGEgKnRhYmxlLWRy aXZlbiB0ZXN0KiBpbnN0ZWFkLCBlLmcuDQo+ICAJfQ0KPiANCj4gDQo+IC1UaGVyZSdzIG1vcmUg Ym9pbGVycGxhdGUgaW52b2x2ZWQsIGJ1dCBpdCBjYW46DQo+ICtUaGVyZSBpcyBtb3JlIGJvaWxl cnBsYXRlIGNvZGUgaW52b2x2ZWQsIGJ1dCBpdCBjYW46DQo+ICsNCj4gKyogYmUgbW9yZSByZWFk YWJsZSB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBpbnB1dHMvb3V0cHV0cyAoZHVlIHRvIGZpZWxk IG5hbWVzKS4NCj4gDQo+IC0qIGJlIG1vcmUgcmVhZGFibGUgd2hlbiB0aGVyZSBhcmUgbXVsdGlw bGUgaW5wdXRzL291dHB1dHMgdGhhbmtzIHRvIGZpZWxkIG5hbWVzLA0KPiArICAqIEZvciBleGFt cGxlLCBzZWUgYGBmcy9leHQ0L2lub2RlLXRlc3QuY2BgLg0KPiANCj4gLSAgKiBFLmcuIHNlZSBg YGZzL2V4dDQvaW5vZGUtdGVzdC5jYGAgZm9yIGFuIGV4YW1wbGUgb2YgYm90aC4NCj4gLSogcmVk dWNlIGR1cGxpY2F0aW9uIGlmIHRlc3QgY2FzZXMgY2FuIGJlIHNoYXJlZCBhY3Jvc3MgbXVsdGlw bGUgdGVzdHMuDQo+ICsqIHJlZHVjZSBkdXBsaWNhdGlvbiBpZiB0ZXN0IGNhc2VzIGFyZSBzaGFy ZWQgYWNyb3NzIG11bHRpcGxlIHRlc3RzLg0KPiANCj4gLSAgKiBFLmcuIGlmIHdlIHdhbnRlZCB0 byBhbHNvIHRlc3QgYGBzaGEyNTZzdW1gYCwgd2UgY291bGQgYWRkIGEgYGBzaGEyNTZgYA0KPiAr ICAqIEZvciBleGFtcGxlOiBpZiB3ZSB3YW50IHRvIHRlc3QgYGBzaGEyNTZzdW1gYCwgd2UgY291 bGQgYWRkIGEgYGBzaGEyNTZgYA0KPiAgICAgIGZpZWxkIGFuZCByZXVzZSBgYGNhc2VzYGAuDQo+ IA0KPiAtKiBiZSBjb252ZXJ0ZWQgdG8gYSAicGFyYW1ldGVyaXplZCB0ZXN0Iiwgc2VlIGJlbG93 Lg0KPiArKiBiZSBjb252ZXJ0ZWQgdG8gYSAicGFyYW1ldGVyaXplZCB0ZXN0Ii4NCj4gDQo+ICBQ YXJhbWV0ZXJpemVkIFRlc3RpbmcNCj4gIH5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KPiBAQCAtNTMx LDcgKzQ5Miw3IEBAIFBhcmFtZXRlcml6ZWQgVGVzdGluZw0KPiAgVGhlIHRhYmxlLWRyaXZlbiB0 ZXN0aW5nIHBhdHRlcm4gaXMgY29tbW9uIGVub3VnaCB0aGF0IEtVbml0IGhhcyBzcGVjaWFsDQo+ ICBzdXBwb3J0IGZvciBpdC4NCj4gDQo+IC1SZXVzaW5nIHRoZSBzYW1lIGBgY2FzZXNgYCBhcnJh eSBmcm9tIGFib3ZlLCB3ZSBjYW4gd3JpdGUgdGhlIHRlc3QgYXMgYQ0KPiArQnkgcmV1c2luZyB0 aGUgc2FtZSBgYGNhc2VzYGAgYXJyYXkgZnJvbSBhYm92ZSwgd2UgY2FuIHdyaXRlIHRoZSB0ZXN0 IGFzIGENCj4gICJwYXJhbWV0ZXJpemVkIHRlc3QiIHdpdGggdGhlIGZvbGxvd2luZy4NCj4gDQo+ ICAuLiBjb2RlLWJsb2NrOjogYw0KPiBAQCAtNTgyLDE5MyArNTQzLDE2MCBAQCBSZXVzaW5nIHRo ZSBzYW1lIGBgY2FzZXNgYCBhcnJheSBmcm9tIGFib3ZlLCB3ZSBjYW4gd3JpdGUgdGhlIHRlc3Qg YXMgYQ0KPiANCj4gIC4uIF9rdW5pdC1vbi1ub24tdW1sOg0KPiANCj4gLUtVbml0IG9uIG5vbi1V TUwgYXJjaGl0ZWN0dXJlcw0KPiAtPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+IC0N Cj4gLUJ5IGRlZmF1bHQgS1VuaXQgdXNlcyBVTUwgYXMgYSB3YXkgdG8gcHJvdmlkZSBkZXBlbmRl bmNpZXMgZm9yIGNvZGUgdW5kZXIgdGVzdC4NCj4gLVVuZGVyIG1vc3QgY2lyY3Vtc3RhbmNlcyBL VW5pdCdzIHVzYWdlIG9mIFVNTCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbg0KPiAtaW1wbGVtZW50 YXRpb24gZGV0YWlsIG9mIGhvdyBLVW5pdCB3b3JrcyB1bmRlciB0aGUgaG9vZC4gTmV2ZXJ0aGVs ZXNzLCB0aGVyZQ0KPiAtYXJlIGluc3RhbmNlcyB3aGVyZSBiZWluZyBhYmxlIHRvIHJ1biBhcmNo aXRlY3R1cmUtc3BlY2lmaWMgY29kZSBvciB0ZXN0DQo+IC1hZ2FpbnN0IHJlYWwgaGFyZHdhcmUg aXMgZGVzaXJhYmxlLiBGb3IgdGhlc2UgcmVhc29ucyBLVW5pdCBzdXBwb3J0cyBydW5uaW5nIG9u DQo+IC1vdGhlciBhcmNoaXRlY3R1cmVzLg0KPiAtDQo+IC1SdW5uaW5nIGV4aXN0aW5nIEtVbml0 IHRlc3RzIG9uIG5vbi1VTUwgYXJjaGl0ZWN0dXJlcw0KPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gK0V4aXRpbmcgRWFybHkgb24gRmFp bGVkIEV4cGVjdGF0aW9ucw0KPiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQo+IA0KPiAtVGhlcmUgYXJlIHNvbWUgc3BlY2lhbCBjb25zaWRlcmF0aW9ucyB3aGVuIHJ1bm5p bmcgZXhpc3RpbmcgS1VuaXQgdGVzdHMgb24NCj4gLW5vbi1VTUwgYXJjaGl0ZWN0dXJlczoNCj4g K1dlIGNhbiB1c2UgYGBLVU5JVF9FWFBFQ1RfRVFgYCB0byBtYXJrIHRoZSB0ZXN0IGFzIGZhaWxl ZCBhbmQgY29udGludWUNCj4gK2V4ZWN1dGlvbi4gIEluIHNvbWUgY2FzZXMsIGl0IGlzIHVuc2Fm ZSB0byBjb250aW51ZS4gV2UgY2FuIHVzZSB0aGUNCj4gK2BgS1VOSVRfQVNTRVJUYGAgdmFyaWFu dCB0byBleGl0IG9uIGZhaWx1cmUuDQo+IA0KPiAtKiAgIEhhcmR3YXJlIG1heSBub3QgYmUgZGV0 ZXJtaW5pc3RpYywgc28gYSB0ZXN0IHRoYXQgYWx3YXlzIHBhc3NlcyBvciBmYWlscw0KPiAtICAg IHdoZW4gcnVuIHVuZGVyIFVNTCBtYXkgbm90IGFsd2F5cyBkbyBzbyBvbiByZWFsIGhhcmR3YXJl Lg0KPiAtKiAgIEhhcmR3YXJlIGFuZCBWTSBlbnZpcm9ubWVudHMgbWF5IG5vdCBiZSBoZXJtZXRp Yy4gS1VuaXQgdHJpZXMgaXRzIGJlc3QgdG8NCj4gLSAgICBwcm92aWRlIGEgaGVybWV0aWMgZW52 aXJvbm1lbnQgdG8gcnVuIHRlc3RzOyBob3dldmVyLCBpdCBjYW5ub3QgbWFuYWdlIHN0YXRlDQo+ IC0gICAgdGhhdCBpdCBkb2Vzbid0IGtub3cgYWJvdXQgb3V0c2lkZSBvZiB0aGUga2VybmVsLiBD b25zZXF1ZW50bHksIHRlc3RzIHRoYXQNCj4gLSAgICBtYXkgYmUgaGVybWV0aWMgb24gVU1MIG1h eSBub3QgYmUgaGVybWV0aWMgb24gb3RoZXIgYXJjaGl0ZWN0dXJlcy4NCj4gLSogICBTb21lIGZl YXR1cmVzIGFuZCB0b29saW5nIG1heSBub3QgYmUgc3VwcG9ydGVkIG91dHNpZGUgb2YgVU1MLg0K PiAtKiAgIEhhcmR3YXJlIGFuZCBWTXMgYXJlIHNsb3dlciB0aGFuIFVNTC4NCj4gKy4uIGNvZGUt YmxvY2s6OiBjDQo+IA0KPiAtTm9uZSBvZiB0aGVzZSBhcmUgcmVhc29ucyBub3QgdG8gcnVuIHlv dXIgS1VuaXQgdGVzdHMgb24gcmVhbCBoYXJkd2FyZTsgdGhleSBhcmUNCj4gLW9ubHkgdGhpbmdz IHRvIGJlIGF3YXJlIG9mIHdoZW4gZG9pbmcgc28uDQo+ICsJdm9pZCBleGFtcGxlX3Rlc3RfdXNl cl9hbGxvY19mdW5jdGlvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpDQo+ICsJew0KPiArCQl2b2lkICpv YmplY3QgPSBhbGxvY19zb21lX29iamVjdF9mb3JfbWUoKTsNCj4gDQo+IC1DdXJyZW50bHksIHRo ZSBLVW5pdCBXcmFwcGVyIChgYHRvb2xzL3Rlc3Rpbmcva3VuaXQva3VuaXQucHlgYCkgKGFrYQ0K PiAta3VuaXRfdG9vbCkgb25seSBmdWxseSBzdXBwb3J0cyBydW5uaW5nIHRlc3RzIGluc2lkZSBv ZiBVTUwgYW5kIFFFTVU7IGhvd2V2ZXIsDQo+IC10aGlzIGlzIG9ubHkgZHVlIHRvIG91ciBvd24g dGltZSBsaW1pdGF0aW9ucyBhcyBodW1hbnMgd29ya2luZyBvbiBLVW5pdC4gSXQgaXMNCj4gLWVu dGlyZWx5IHBvc3NpYmxlIHRvIHN1cHBvcnQgb3RoZXIgZW11bGF0b3JzIGFuZCBldmVuIGFjdHVh bCBoYXJkd2FyZSwgYnV0IGZvcg0KPiAtbm93IFFFTVUgYW5kIFVNTCBpcyB3aGF0IGlzIGZ1bGx5 IHN1cHBvcnRlZCB3aXRoaW4gdGhlIEtVbml0IFdyYXBwZXIuIEFnYWluLCB0bw0KPiAtYmUgY2xl YXIsIHRoaXMgaXMganVzdCB0aGUgV3JhcHBlci4gVGhlIGFjdHVhbHkgS1VuaXQgdGVzdHMgYW5k IHRoZSBLVW5pdA0KPiAtbGlicmFyeSB0aGV5IGFyZSB3cml0dGVuIGluIGlzIGZ1bGx5IGFyY2hp dGVjdHVyZSBhZ25vc3RpYyBhbmQgY2FuIGJlIHVzZWQgaW4NCj4gLXZpcnR1YWxseSBhbnkgc2V0 dXAsIHlvdSBqdXN0IHdvbid0IGhhdmUgdGhlIGJlbmVmaXQgb2YgdHlwaW5nIGEgc2luZ2xlIGNv bW1hbmQNCj4gLW91dCBvZiB0aGUgYm94IGFuZCBoYXZpbmcgZXZlcnl0aGluZyBtYWdpY2FsbHkg d29yayBwZXJmZWN0bHkuDQo+ICsJCS8qIE1ha2Ugc3VyZSB3ZSBnb3QgYSB2YWxpZCBwb2ludGVy IGJhY2suICovDQo+ICsJCUtVTklUX0FTU0VSVF9OT1RfRVJSX09SX05VTEwodGVzdCwgb2JqZWN0 KTsNCj4gKwkJZG9fc29tZXRoaW5nX3dpdGhfb2JqZWN0KG9iamVjdCk7DQo+ICsJfQ0KPiANCj4g LUFnYWluLCBhbGwgY29yZSBLVW5pdCBmcmFtZXdvcmsgZmVhdHVyZXMgYXJlIGZ1bGx5IHN1cHBv cnRlZCBvbiBhbGwNCj4gLWFyY2hpdGVjdHVyZXMsIGFuZCB1c2luZyB0aGVtIGlzIHN0cmFpZ2h0 Zm9yd2FyZDogTW9zdCBwb3B1bGFyIGFyY2hpdGVjdHVyZXMNCj4gLWFyZSBzdXBwb3J0ZWQgZGly ZWN0bHkgaW4gdGhlIEtVbml0IFdyYXBwZXIgdmlhIFFFTVUuIEN1cnJlbnRseSwgc3VwcG9ydGVk DQo+IC1hcmNoaXRlY3R1cmVzIG9uIFFFTVUgaW5jbHVkZToNCj4gK0FsbG9jYXRpbmcgTWVtb3J5 DQo+ICstLS0tLS0tLS0tLS0tLS0tLQ0KPiANCj4gLSogICBpMzg2DQo+IC0qICAgeDg2XzY0DQo+ IC0qICAgYXJtDQo+IC0qICAgYXJtNjQNCj4gLSogICBhbHBoYQ0KPiAtKiAgIHBvd2VycGMNCj4g LSogICByaXNjdg0KPiAtKiAgIHMzOTANCj4gLSogICBzcGFyYw0KPiArV2hlcmUgeW91IG1pZ2h0 IHVzZSBgYGt6YWxsb2NgYCwgeW91IGNhbiBpbnN0ZWFkIHVzZSBgYGt1bml0X2t6YWxsb2NgYCBh cyBLVW5pdA0KPiArd2lsbCB0aGVuIGVuc3VyZSB0aGF0IHRoZSBtZW1vcnkgaXMgZnJlZWQgb25j ZSB0aGUgdGVzdCBjb21wbGV0ZXMuDQo+IA0KPiAtSW4gb3JkZXIgdG8gcnVuIEtVbml0IHRlc3Rz IG9uIG9uZSBvZiB0aGVzZSBhcmNoaXRlY3R1cmVzIHZpYSBRRU1VIHdpdGggdGhlDQo+IC1LVW5p dCB3cmFwcGVyLCBhbGwgeW91IG5lZWQgdG8gZG8gaXMgc3BlY2lmeSB0aGUgZmxhZ3MgYGAtLWFy Y2hgYCBhbmQNCj4gLWBgLS1jcm9zc19jb21waWxlYGAgd2hlbiBpbnZva2luZyB0aGUgS1VuaXQg V3JhcHBlci4gRm9yIGV4YW1wbGUsIHdlIGNvdWxkIHJ1bg0KPiAtdGhlIGRlZmF1bHQgS1VuaXQg dGVzdHMgb24gQVJNIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyIChhc3N1bWluZyB3ZSBoYXZlIGFu IEFSTQ0KPiAtdG9vbGNoYWluIGluc3RhbGxlZCk6DQo+ICtUaGlzIGlzIHVzZWZ1bCBiZWNhdXNl IGl0IGxldHMgdXMgdXNlIHRoZSBgYEtVTklUX0FTU0VSVF9FUWBgIG1hY3JvcyB0byBleGl0DQo+ ICtlYXJseSBmcm9tIGEgdGVzdCB3aXRob3V0IGhhdmluZyB0byB3b3JyeSBhYm91dCByZW1lbWJl cmluZyB0byBjYWxsIGBga2ZyZWVgYC4NCj4gK0ZvciBleGFtcGxlOg0KPiANCj4gLS4uIGNvZGUt YmxvY2s6OiBiYXNoDQo+ICsuLiBjb2RlLWJsb2NrOjogYw0KPiANCj4gLQl0b29scy90ZXN0aW5n L2t1bml0L2t1bml0LnB5IHJ1biAtLXRpbWVvdXQ9NjAgLS1qb2JzPTEyIC0tYXJjaD1hcm0gLS1j cm9zc19jb21waWxlPWFybS1saW51eC1nbnVlYWJpaGYtDQo+ICsJdm9pZCBleGFtcGxlX3Rlc3Rf YWxsb2NhdGlvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpDQo+ICsJew0KPiArCQljaGFyICpidWZmZXIg PSBrdW5pdF9remFsbG9jKHRlc3QsIDE2LCBHRlBfS0VSTkVMKTsNCj4gKwkJLyogRW5zdXJlIGFs bG9jYXRpb24gc3VjY2VlZGVkLiAqLw0KPiArCQlLVU5JVF9BU1NFUlRfTk9UX0VSUl9PUl9OVUxM KHRlc3QsIGJ1ZmZlcik7DQo+IA0KPiAtQWx0ZXJuYXRpdmVseSwgaWYgeW91IHdhbnQgdG8gcnVu IHlvdXIgdGVzdHMgb24gcmVhbCBoYXJkd2FyZSBvciBpbiBzb21lIG90aGVyDQo+IC1lbXVsYXRp b24gZW52aXJvbm1lbnQsIGFsbCB5b3UgbmVlZCB0byBkbyBpcyB0byB0YWtlIHlvdXIga3VuaXRj b25maWcsIHlvdXINCj4gLUtjb25maWcgb3B0aW9ucyBmb3IgdGhlIHRlc3RzIHlvdSB3b3VsZCBs aWtlIHRvIHJ1biwgYW5kIG1lcmdlIHRoZW0gaW50bw0KPiAtd2hhdGV2ZXIgY29uZmlnIHlvdXIg YXJlIHVzaW5nIGZvciB5b3VyIHBsYXRmb3JtLiBUaGF0J3MgaXQhDQo+ICsJCUtVTklUX0FTU0VS VF9TVFJFUSh0ZXN0LCBidWZmZXIsICIiKTsNCj4gKwl9DQo+IA0KPiAtRm9yIGV4YW1wbGUsIGxl dCdzIHNheSB5b3UgaGF2ZSB0aGUgZm9sbG93aW5nIGt1bml0Y29uZmlnOg0KPiANCj4gLS4uIGNv ZGUtYmxvY2s6OiBub25lDQo+ICtUZXN0aW5nIFN0YXRpYyBGdW5jdGlvbnMNCj4gKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KPiANCj4gLQlDT05GSUdfS1VOSVQ9eQ0KPiAtCUNPTkZJR19LVU5J VF9FWEFNUExFX1RFU1Q9eQ0KPiArSWYgd2UgZG8gbm90IHdhbnQgdG8gZXhwb3NlIGZ1bmN0aW9u cyBvciB2YXJpYWJsZXMgZm9yIHRlc3RpbmcsIG9uZSBvcHRpb24gaXMgdG8NCj4gK2NvbmRpdGlv bmFsbHkgYGAjaW5jbHVkZWBgIHRoZSB0ZXN0IGZpbGUgYXQgdGhlIGVuZCBvZiB5b3VyIC5jIGZp bGUuIEZvcg0KPiArZXhhbXBsZToNCj4gDQo+IC1JZiB5b3Ugd2FudGVkIHRvIHJ1biB0aGlzIHRl c3Qgb24gYW4geDg2IFZNLCB5b3UgbWlnaHQgYWRkIHRoZSBmb2xsb3dpbmcgY29uZmlnDQo+IC1v cHRpb25zIHRvIHlvdXIgYGAuY29uZmlnYGA6DQo+ICsuLiBjb2RlLWJsb2NrOjogYw0KPiANCj4g LS4uIGNvZGUtYmxvY2s6OiBub25lDQo+ICsJLyogSW4gbXlfZmlsZS5jICovDQo+IA0KPiAtCUNP TkZJR19LVU5JVD15DQo+IC0JQ09ORklHX0tVTklUX0VYQU1QTEVfVEVTVD15DQo+IC0JQ09ORklH X1NFUklBTF84MjUwPXkNCj4gLQlDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15DQo+ICsJc3Rh dGljIGludCBkb19pbnRlcmVzdGluZ190aGluZygpOw0KPiANCj4gLUFsbCB0aGVzZSBuZXcgb3B0 aW9ucyBkbyBpcyBlbmFibGUgc3VwcG9ydCBmb3IgYSBjb21tb24gc2VyaWFsIGNvbnNvbGUgbmVl ZGVkDQo+IC1mb3IgbG9nZ2luZy4NCj4gKwkjaWZkZWYgQ09ORklHX01ZX0tVTklUX1RFU1QNCj4g KwkjaW5jbHVkZSAibXlfa3VuaXRfdGVzdC5jIg0KPiArCSNlbmRpZg0KPiANCj4gLU5leHQsIHlv dSBjb3VsZCBidWlsZCBhIGtlcm5lbCB3aXRoIHRoZXNlIHRlc3RzIGFzIGZvbGxvd3M6DQo+ICtJ bmplY3RpbmcgVGVzdC1Pbmx5IENvZGUNCj4gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiAN Cj4gK1NpbWlsYXIgdG8gYXMgc2hvd24gYWJvdmUsIHdlIGNhbiBhZGQgdGVzdC1zcGVjaWZpYyBs b2dpYy4gRm9yIGV4YW1wbGU6DQo+IA0KPiAtLi4gY29kZS1ibG9jazo6IGJhc2gNCj4gKy4uIGNv ZGUtYmxvY2s6OiBjDQo+IA0KPiAtCW1ha2UgQVJDSD14ODYgb2xkZGVmY29uZmlnDQo+IC0JbWFr ZSBBUkNIPXg4Ng0KPiArCS8qIEluIG15X2ZpbGUuaCAqLw0KPiANCj4gLU9uY2UgeW91IGhhdmUg YnVpbHQgYSBrZXJuZWwsIHlvdSBjb3VsZCBydW4gaXQgb24gUUVNVSBhcyBmb2xsb3dzOg0KPiAr CSNpZmRlZiBDT05GSUdfTVlfS1VOSVRfVEVTVA0KPiArCS8qIERlZmluZWQgaW4gbXlfa3VuaXRf dGVzdC5jICovDQo+ICsJdm9pZCB0ZXN0X29ubHlfaG9vayh2b2lkKTsNCj4gKwkjZWxzZQ0KPiAr CXZvaWQgdGVzdF9vbmx5X2hvb2sodm9pZCkgeyB9DQo+ICsJI2VuZGlmDQo+IA0KPiAtLi4gY29k ZS1ibG9jazo6IGJhc2gNCj4gK1RoaXMgdGVzdC1vbmx5IGNvZGUgY2FuIGJlIG1hZGUgbW9yZSB1 c2VmdWwgYnkgYWNjZXNzaW5nIHRoZSBjdXJyZW50IGBga3VuaXRfdGVzdGBgDQo+ICthcyBzaG93 biBpbiBuZXh0IHNlY3Rpb246ICpBY2Nlc3NpbmcgVGhlIEN1cnJlbnQgVGVzdCouDQo+IA0KPiAt CXFlbXUtc3lzdGVtLXg4Nl82NCAtZW5hYmxlLWt2bSBcDQo+IC0JCQkgICAtbSAxMDI0IFwNCj4g LQkJCSAgIC1rZXJuZWwgYXJjaC94ODZfNjQvYm9vdC9iekltYWdlIFwNCj4gLQkJCSAgIC1hcHBl bmQgJ2NvbnNvbGU9dHR5UzAnIFwNCj4gLQkJCSAgIC0tbm9ncmFwaGljDQo+ICtBY2Nlc3Npbmcg VGhlIEN1cnJlbnQgVGVzdA0KPiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gDQo+IC1J bnRlcnNwZXJzZWQgaW4gdGhlIGtlcm5lbCBsb2dzIHlvdSBtaWdodCBzZWUgdGhlIGZvbGxvd2lu ZzoNCj4gK0luIHNvbWUgY2FzZXMsIHdlIG5lZWQgdG8gY2FsbCB0ZXN0LW9ubHkgY29kZSBmcm9t IG91dHNpZGUgdGhlIHRlc3QgZmlsZS4NCj4gK0ZvciBleGFtcGxlLCBzZWUgZXhhbXBsZSBpbiBz ZWN0aW9uICpJbmplY3RpbmcgVGVzdC1Pbmx5IENvZGUqIG9yIGlmDQo+ICt3ZSBhcmUgcHJvdmlk aW5nIGEgZmFrZSBpbXBsZW1lbnRhdGlvbiBvZiBhbiBvcHMgc3RydWN0LiBVc2luZw0KPiArYGBr dW5pdF90ZXN0YGAgZmllbGQgaW4gYGB0YXNrX3N0cnVjdGBgLCB3ZSBjYW4gYWNjZXNzIGl0IHZp YQ0KPiArYGBjdXJyZW50LT5rdW5pdF90ZXN0YGAuDQo+IA0KPiAtLi4gY29kZS1ibG9jazo6IG5v bmUNCj4gK1RoZSBleGFtcGxlIGJlbG93IGluY2x1ZGVzIGhvdyB0byBpbXBsZW1lbnQgIm1vY2tp bmciOg0KPiANCj4gLQlUQVAgdmVyc2lvbiAxNA0KPiAtCQkjIFN1YnRlc3Q6IGV4YW1wbGUNCj4g LQkJMS4uMQ0KPiAtCQkjIGV4YW1wbGVfc2ltcGxlX3Rlc3Q6IGluaXRpYWxpemluZw0KPiAtCQlv ayAxIC0gZXhhbXBsZV9zaW1wbGVfdGVzdA0KPiAtCW9rIDEgLSBleGFtcGxlDQo+ICsuLiBjb2Rl LWJsb2NrOjogYw0KPiANCj4gLUNvbmdyYXR1bGF0aW9ucywgeW91IGp1c3QgcmFuIGEgS1VuaXQg dGVzdCBvbiB0aGUgeDg2IGFyY2hpdGVjdHVyZSENCj4gKwkjaW5jbHVkZSA8bGludXgvc2NoZWQu aD4gLyogZm9yIGN1cnJlbnQgKi8NCj4gDQo+IC1JbiBhIHNpbWlsYXIgbWFubmVyLCBrdW5pdCBh bmQga3VuaXQgdGVzdHMgY2FuIGFsc28gYmUgYnVpbHQgYXMgbW9kdWxlcywNCj4gLXNvIGlmIHlv dSB3YW50ZWQgdG8gcnVuIHRlc3RzIGluIHRoaXMgd2F5IHlvdSBtaWdodCBhZGQgdGhlIGZvbGxv d2luZyBjb25maWcNCj4gLW9wdGlvbnMgdG8geW91ciBgYC5jb25maWdgYDoNCj4gKwlzdHJ1Y3Qg dGVzdF9kYXRhIHsNCj4gKwkJaW50IGZvb19yZXN1bHQ7DQo+ICsJCWludCB3YW50X2Zvb19jYWxs ZWRfd2l0aDsNCj4gKwl9Ow0KPiANCj4gLS4uIGNvZGUtYmxvY2s6OiBub25lDQo+ICsJc3RhdGlj IGludCBmYWtlX2ZvbyhpbnQgYXJnKQ0KPiArCXsNCj4gKwkJc3RydWN0IGt1bml0ICp0ZXN0ID0g Y3VycmVudC0+a3VuaXRfdGVzdDsNCj4gKwkJc3RydWN0IHRlc3RfZGF0YSAqdGVzdF9kYXRhID0g dGVzdC0+cHJpdjsNCj4gDQo+IC0JQ09ORklHX0tVTklUPW0NCj4gLQlDT05GSUdfS1VOSVRfRVhB TVBMRV9URVNUPW0NCj4gKwkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHRlc3RfZGF0YS0+d2FudF9m b29fY2FsbGVkX3dpdGgsIGFyZyk7DQo+ICsJCXJldHVybiB0ZXN0X2RhdGEtPmZvb19yZXN1bHQ7 DQo+ICsJfQ0KPiANCj4gLU9uY2UgdGhlIGtlcm5lbCBpcyBidWlsdCBhbmQgaW5zdGFsbGVkLCBh IHNpbXBsZQ0KPiArCXN0YXRpYyB2b2lkIGV4YW1wbGVfc2ltcGxlX3Rlc3Qoc3RydWN0IGt1bml0 ICp0ZXN0KQ0KPiArCXsNCj4gKwkJLyogQXNzdW1lIHByaXYgKHByaXZhdGUsIGEgbWVtYmVyIHVz ZWQgdG8gcGFzcyB0ZXN0IGRhdGEgZnJvbQ0KPiArCQkgKiB0aGUgaW5pdCBmdW5jdGlvbikgaXMg YWxsb2NhdGVkIGluIHRoZSBzdWl0ZSdzIC5pbml0ICovDQo+ICsJCXN0cnVjdCB0ZXN0X2RhdGEg KnRlc3RfZGF0YSA9IHRlc3QtPnByaXY7DQo+IA0KPiAtLi4gY29kZS1ibG9jazo6IGJhc2gNCj4g KwkJdGVzdF9kYXRhLT5mb29fcmVzdWx0ID0gNDI7DQo+ICsJCXRlc3RfZGF0YS0+d2FudF9mb29f Y2FsbGVkX3dpdGggPSAxOw0KPiANCj4gLQltb2Rwcm9iZSBleGFtcGxlLXRlc3QNCj4gKwkJLyog SW4gYSByZWFsIHRlc3QsIHdlJ2QgcHJvYmFibHkgcGFzcyBhIHBvaW50ZXIgdG8gZmFrZV9mb28g c29tZXdoZXJlDQo+ICsJCSAqIGxpa2UgYW4gb3BzIHN0cnVjdCwgZXRjLiBpbnN0ZWFkIG9mIGNh bGxpbmcgaXQgZGlyZWN0bHkuICovDQo+ICsJCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBmYWtlX2Zv bygxKSwgNDIpOw0KPiArCX0NCj4gDQo+IC0uLi53aWxsIHJ1biB0aGUgdGVzdHMuDQo+ICtJbiB0 aGlzIGV4YW1wbGUsIHdlIGFyZSB1c2luZyB0aGUgYGBwcml2YGAgbWVtYmVyIG9mIGBgc3RydWN0 IGt1bml0YGAgYXMgYSB3YXkNCj4gK29mIHBhc3NpbmcgZGF0YSB0byB0aGUgdGVzdCBmcm9tIHRo ZSBpbml0IGZ1bmN0aW9uLiBJbiBnZW5lcmFsIGBgcHJpdmBgIGlzDQo+ICtwb2ludGVyIHRoYXQg Y2FuIGJlIHVzZWQgZm9yIGFueSB1c2VyIGRhdGEuIFRoaXMgaXMgcHJlZmVycmVkIG92ZXIgc3Rh dGljDQo+ICt2YXJpYWJsZXMsIGFzIGl0IGF2b2lkcyBjb25jdXJyZW5jeSBpc3N1ZXMuDQo+IA0K PiAtLi4gbm90ZTo6DQo+IC0gICBOb3RlIHRoYXQgeW91IHNob3VsZCBtYWtlIHN1cmUgeW91ciB0 ZXN0IGRlcGVuZHMgb24gYGBLVU5JVD15YGAgaW4gS2NvbmZpZw0KPiAtICAgaWYgdGhlIHRlc3Qg ZG9lcyBub3Qgc3VwcG9ydCBtb2R1bGUgYnVpbGQuICBPdGhlcndpc2UsIGl0IHdpbGwgdHJpZ2dl cg0KPiAtICAgY29tcGlsZSBlcnJvcnMgaWYgYGBDT05GSUdfS1VOSVRgYCBpcyBgYG1gYC4NCj4g K0hhZCB3ZSB3YW50ZWQgc29tZXRoaW5nIG1vcmUgZmxleGlibGUsIHdlIGNvdWxkIGhhdmUgdXNl ZCBhIG5hbWVkIGBga3VuaXRfcmVzb3VyY2VgYC4NCj4gK0VhY2ggdGVzdCBjYW4gaGF2ZSBtdWx0 aXBsZSByZXNvdXJjZXMgd2hpY2ggaGF2ZSBzdHJpbmcgbmFtZXMgcHJvdmlkaW5nIHRoZSBzYW1l DQo+ICtmbGV4aWJpbGl0eSBhcyBhIGBgcHJpdmBgIG1lbWJlciwgYnV0IGFsc28sIGZvciBleGFt cGxlLCBhbGxvd2luZyBoZWxwZXINCj4gK2Z1bmN0aW9ucyB0byBjcmVhdGUgcmVzb3VyY2VzIHdp dGhvdXQgY29uZmxpY3Rpbmcgd2l0aCBlYWNoIG90aGVyLiBJdCBpcyBhbHNvDQo+ICtwb3NzaWJs ZSB0byBkZWZpbmUgYSBjbGVhbiB1cCBmdW5jdGlvbiBmb3IgZWFjaCByZXNvdXJjZSwgbWFraW5n IGl0IGVhc3kgdG8NCj4gK2F2b2lkIHJlc291cmNlIGxlYWtzLiBGb3IgbW9yZSBpbmZvcm1hdGlv biwgc2VlIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0L2FwaS90ZXN0LnJzdC4NCg0KVGhp cyBpcyBtdWNoIGNsZWFyZXIuICBUaGFua3MuDQoNCj4gDQo+IC1Xcml0aW5nIG5ldyB0ZXN0cyBm b3Igb3RoZXIgYXJjaGl0ZWN0dXJlcw0KPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCj4gK0ZhaWxpbmcgVGhlIEN1cnJlbnQgVGVzdA0KPiArLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQo+IA0KPiAtVGhlIGZpcnN0IHRoaW5nIHlvdSBtdXN0IGRvIGlzIGFzayB5 b3Vyc2VsZiB3aGV0aGVyIGl0IGlzIG5lY2Vzc2FyeSB0byB3cml0ZSBhDQo+IC1LVW5pdCB0ZXN0 IGZvciBhIHNwZWNpZmljIGFyY2hpdGVjdHVyZSwgYW5kIHRoZW4gd2hldGhlciBpdCBpcyBuZWNl c3NhcnkgdG8NCj4gLXdyaXRlIHRoYXQgdGVzdCBmb3IgYSBwYXJ0aWN1bGFyIHBpZWNlIG9mIGhh cmR3YXJlLiBJbiBnZW5lcmFsLCB3cml0aW5nIGEgdGVzdA0KPiAtdGhhdCBkZXBlbmRzIG9uIGhh dmluZyBhY2Nlc3MgdG8gYSBwYXJ0aWN1bGFyIHBpZWNlIG9mIGhhcmR3YXJlIG9yIHNvZnR3YXJl IChub3QNCj4gLWluY2x1ZGVkIGluIHRoZSBMaW51eCBzb3VyY2UgcmVwbykgc2hvdWxkIGJlIGF2 b2lkZWQgYXQgYWxsIGNvc3RzLg0KPiArSWYgd2Ugd2FudCB0byBmYWlsIHRoZSBjdXJyZW50IHRl c3QsIHdlIGNhbiB1c2UgYGBrdW5pdF9mYWlsX2N1cnJlbnRfdGVzdChmbXQsIGFyZ3MuLi4pYGAN Cj4gK3doaWNoIGlzIGRlZmluZWQgaW4gYGA8a3VuaXQvdGVzdC1idWcuaD5gYCBhbmQgZG9lcyBu b3QgcmVxdWlyZSBwdWxsaW5nIGluIGBgPGt1bml0L3Rlc3QuaD5gYC4NCj4gK0ZvciBleGFtcGxl LCB3ZSBoYXZlIGFuIG9wdGlvbiB0byBlbmFibGUgc29tZSBleHRyYSBkZWJ1ZyBjaGVja3Mgb24g c29tZSBkYXRhDQo+ICtzdHJ1Y3R1cmVzIGFzIHNob3duIGJlbG93Og0KPiANCj4gLUV2ZW4gaWYg eW91IG9ubHkgZXZlciBwbGFuIG9uIHJ1bm5pbmcgeW91ciBLVW5pdCB0ZXN0IG9uIHlvdXIgaGFy ZHdhcmUNCj4gLWNvbmZpZ3VyYXRpb24sIG90aGVyIHBlb3BsZSBtYXkgd2FudCB0byBydW4geW91 ciB0ZXN0cyBhbmQgbWF5IG5vdCBoYXZlIGFjY2Vzcw0KPiAtdG8geW91ciBoYXJkd2FyZS4gSWYg eW91IHdyaXRlIHlvdXIgdGVzdCB0byBydW4gb24gVU1MLCB0aGVuIGFueW9uZSBjYW4gcnVuIHlv dXINCj4gLXRlc3RzIHdpdGhvdXQga25vd2luZyBhbnl0aGluZyBhYm91dCB5b3VyIHBhcnRpY3Vs YXIgc2V0dXAsIGFuZCB5b3UgY2FuIHN0aWxsDQo+IC1ydW4geW91ciB0ZXN0cyBvbiB5b3VyIGhh cmR3YXJlIHNldHVwIGp1c3QgYnkgY29tcGlsaW5nIGZvciB5b3VyIGFyY2hpdGVjdHVyZS4NCj4g Ky4uIGNvZGUtYmxvY2s6OiBjDQo+IA0KPiAtLi4gaW1wb3J0YW50OjoNCj4gLSAgIEFsd2F5cyBw cmVmZXIgdGVzdHMgdGhhdCBydW4gb24gVU1MIHRvIHRlc3RzIHRoYXQgb25seSBydW4gdW5kZXIg YSBwYXJ0aWN1bGFyDQo+IC0gICBhcmNoaXRlY3R1cmUsIGFuZCBhbHdheXMgcHJlZmVyIHRlc3Rz IHRoYXQgcnVuIHVuZGVyIFFFTVUgb3IgYW5vdGhlciBlYXN5DQo+IC0gICAoYW5kIG1vbmV0YXJp bHkgZnJlZSkgdG8gb2J0YWluIHNvZnR3YXJlIGVudmlyb25tZW50IHRvIGEgc3BlY2lmaWMgcGll Y2Ugb2YNCj4gLSAgIGhhcmR3YXJlLg0KPiAtDQo+IC1OZXZlcnRoZWxlc3MsIHRoZXJlIGFyZSBz dGlsbCB2YWxpZCByZWFzb25zIHRvIHdyaXRlIGFuIGFyY2hpdGVjdHVyZSBvciBoYXJkd2FyZQ0K PiAtc3BlY2lmaWMgdGVzdDogZm9yIGV4YW1wbGUsIHlvdSBtaWdodCB3YW50IHRvIHRlc3Qgc29t ZSBjb2RlIHRoYXQgcmVhbGx5IGJlbG9uZ3MNCj4gLWluIGBgYXJjaC9zb21lLWFyY2gvKmBgLiBF dmVuIHNvLCB0cnkgeW91ciBiZXN0IHRvIHdyaXRlIHRoZSB0ZXN0IHNvIHRoYXQgaXQNCj4gLWRv ZXMgbm90IGRlcGVuZCBvbiBwaHlzaWNhbCBoYXJkd2FyZTogaWYgc29tZSBvZiB5b3VyIHRlc3Qg Y2FzZXMgZG9uJ3QgbmVlZCB0aGUNCj4gLWhhcmR3YXJlLCBvbmx5IHJlcXVpcmUgdGhlIGhhcmR3 YXJlIGZvciB0ZXN0cyB0aGF0IGFjdHVhbGx5IG5lZWQgaXQuDQo+IC0NCj4gLU5vdyB0aGF0IHlv dSBoYXZlIG5hcnJvd2VkIGRvd24gZXhhY3RseSB3aGF0IGJpdHMgYXJlIGhhcmR3YXJlIHNwZWNp ZmljLCB0aGUNCj4gLWFjdHVhbCBwcm9jZWR1cmUgZm9yIHdyaXRpbmcgYW5kIHJ1bm5pbmcgdGhl IHRlc3RzIGlzIHByZXR0eSBtdWNoIHRoZSBzYW1lIGFzDQo+IC13cml0aW5nIG5vcm1hbCBLVW5p dCB0ZXN0cy4gT25lIHNwZWNpYWwgY2F2ZWF0IGlzIHRoYXQgeW91IGhhdmUgdG8gcmVzZXQNCj4g LWhhcmR3YXJlIHN0YXRlIGluIGJldHdlZW4gdGVzdCBjYXNlczsgaWYgdGhpcyBpcyBub3QgcG9z c2libGUsIHlvdSBtYXkgb25seSBiZQ0KPiAtYWJsZSB0byBydW4gb25lIHRlc3QgY2FzZSBwZXIg aW52b2NhdGlvbi4NCj4gKwkjaW5jbHVkZSA8a3VuaXQvdGVzdC1idWcuaD4NCj4gDQo+IC0uLiBU T0RPKGJyZW5kYW5oaWdnaW5zQGdvb2dsZS5jb20pOiBBZGQgYW4gYWN0dWFsIGV4YW1wbGUgb2Yg YW4gYXJjaGl0ZWN0dXJlLQ0KPiAtICAgZGVwZW5kZW50IEtVbml0IHRlc3QuDQo+ICsJI2lmZGVm IENPTkZJR19FWFRSQV9ERUJVR19DSEVDS1MNCj4gKwlzdGF0aWMgdm9pZCB2YWxpZGF0ZV9teV9k YXRhKHN0cnVjdCBkYXRhICpkYXRhKQ0KPiArCXsNCj4gKwkJaWYgKGlzX3ZhbGlkKGRhdGEpKQ0K PiArCQkJcmV0dXJuOw0KPiANCj4gLUtVbml0IGRlYnVnZnMgcmVwcmVzZW50YXRpb24NCj4gLT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0NCj4gLVdoZW4ga3VuaXQgdGVzdCBzdWl0ZXMgYXJl IGluaXRpYWxpemVkLCB0aGV5IGNyZWF0ZSBhbiBhc3NvY2lhdGVkIGRpcmVjdG9yeQ0KPiAtaW4g YGAvc3lzL2tlcm5lbC9kZWJ1Zy9rdW5pdC88dGVzdC1zdWl0ZT5gYC4gIFRoZSBkaXJlY3Rvcnkg Y29udGFpbnMgb25lIGZpbGUNCj4gKwkJa3VuaXRfZmFpbF9jdXJyZW50X3Rlc3QoImRhdGEgJXAg aXMgaW52YWxpZCIsIGRhdGEpOw0KPiANCj4gLS0gcmVzdWx0czogImNhdCByZXN1bHRzIiBkaXNw bGF5cyByZXN1bHRzIG9mIGVhY2ggdGVzdCBjYXNlIGFuZCB0aGUgcmVzdWx0cw0KPiAtICBvZiB0 aGUgZW50aXJlIHN1aXRlIGZvciB0aGUgbGFzdCB0ZXN0IHJ1bi4NCj4gKwkJLyogTm9ybWFsLCBu b24tS1VuaXQsIGVycm9yIHJlcG9ydGluZyBjb2RlIGhlcmUuICovDQo+ICsJfQ0KPiArCSNlbHNl DQo+ICsJc3RhdGljIHZvaWQgbXlfZGVidWdfZnVuY3Rpb24odm9pZCkgeyB9DQo+ICsJI2VuZGlm DQo+IA0KPiAtVGhlIGRlYnVnZnMgcmVwcmVzZW50YXRpb24gaXMgcHJpbWFyaWx5IG9mIHVzZSB3 aGVuIGt1bml0IHRlc3Qgc3VpdGVzIGFyZQ0KPiAtcnVuIGluIGEgbmF0aXZlIGVudmlyb25tZW50 LCBlaXRoZXIgYXMgbW9kdWxlcyBvciBidWlsdGluLiAgSGF2aW5nIGEgd2F5DQo+IC10byBkaXNw bGF5IHJlc3VsdHMgbGlrZSB0aGlzIGlzIHZhbHVhYmxlIGFzIG90aGVyd2lzZSByZXN1bHRzIGNh biBiZQ0KPiAtaW50ZXJtaXhlZCB3aXRoIG90aGVyIGV2ZW50cyBpbiBkbWVzZyBvdXRwdXQuICBU aGUgbWF4aW11bSBzaXplIG9mIGVhY2gNCj4gLXJlc3VsdHMgZmlsZSBpcyBLVU5JVF9MT0dfU0la RSBieXRlcyAoZGVmaW5lZCBpbiBgYGluY2x1ZGUva3VuaXQvdGVzdC5oYGApLg0KPiAtLQ0KPiAy LjM0LjEuMTczLmc3NmFhOGJjMmQwLWdvb2cNCg0KV2l0aCB0aGUgb25lIHN1Z2dlc3RlZCBjaGFu Z2UsIHlvdSBjYW4gYWRkIFJldmlld2VkLWJ5OiBmb3IgbWUuDQoNCkkgZGlkIGEgcXVpY2sgcGFz cyBvdmVyIHBhdGNoZXMgMS00IChpbiB0aGlzIHYzIHNlcmllcyksIGFuZCBkaWRuJ3Qgc2VlIGFu eSBpc3N1ZXMuDQogLS0gVGltDQoNCg==