From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.5 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 50430C31E44 for ; Fri, 14 Jun 2019 09:06:16 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 0E60720866 for ; Fri, 14 Jun 2019 09:06:16 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="aKo4BvLg" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0E60720866 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:49464 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hbiA3-000609-D0 for qemu-devel@archiver.kernel.org; Fri, 14 Jun 2019 05:06:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34476) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hbi8g-0004se-Dd for qemu-devel@nongnu.org; Fri, 14 Jun 2019 05:04:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hbi8a-0000v0-NB for qemu-devel@nongnu.org; Fri, 14 Jun 2019 05:04:48 -0400 Received: from mail-eopbgr70095.outbound.protection.outlook.com ([40.107.7.95]:36618 helo=EUR04-HE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hbi8J-0000jT-DW; Fri, 14 Jun 2019 05:04:29 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=TytjNLPrHEkWG1goeHLvYizTTRSQnXhoqAE5F0pqOD0=; b=aKo4BvLgzXJhIrALFXjpOsM1LsTdCce58CGCBcYPKj6vjfC8RdHw1FiKbfF4qtUkwHjm0OsLuvzzSH5mFmFjG0eMI8mwR5njyPghgWIcOc37Ik99AYF0KeiYHrue7EdPH9iwhk6nB/PF0qgkRWI9jhQc0tRQiaR/Vx1cma1bowU= Received: from AM0PR08MB3572.eurprd08.prod.outlook.com (20.177.110.153) by AM0PR08MB4163.eurprd08.prod.outlook.com (20.178.119.204) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1987.10; Fri, 14 Jun 2019 09:04:22 +0000 Received: from AM0PR08MB3572.eurprd08.prod.outlook.com ([fe80::d064:530:c7:ad76]) by AM0PR08MB3572.eurprd08.prod.outlook.com ([fe80::d064:530:c7:ad76%6]) with mapi id 15.20.1987.012; Fri, 14 Jun 2019 09:04:22 +0000 From: Vladimir Sementsov-Ogievskiy To: Max Reitz , "qemu-devel@nongnu.org" , "qemu-block@nongnu.org" Thread-Topic: [PATCH v8 4/7] block: introduce backup-top filter driver Thread-Index: AQHVFjXHKN4zfc/OLkS/ttIGgp7hZ6aZ1OmAgAEe94A= Date: Fri, 14 Jun 2019 09:04:22 +0000 Message-ID: <7b401fba-36dd-d80e-966a-15fdd72ac335@virtuozzo.com> References: <20190529154654.95870-1-vsementsov@virtuozzo.com> <20190529154654.95870-5-vsementsov@virtuozzo.com> In-Reply-To: Accept-Language: ru-RU, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: HE1PR05CA0379.eurprd05.prod.outlook.com (2603:10a6:7:94::38) To AM0PR08MB3572.eurprd08.prod.outlook.com (2603:10a6:208:e1::25) authentication-results: spf=none (sender IP is ) smtp.mailfrom=vsementsov@virtuozzo.com; x-ms-exchange-messagesentrepresentingtype: 1 x-tagtoolbar-keys: D20190614120419546 x-originating-ip: [185.231.240.5] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 4c4c4d42-6beb-48e2-0a5a-08d6f0a74a5c x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(2017052603328)(7193020); SRVR:AM0PR08MB4163; x-ms-traffictypediagnostic: AM0PR08MB4163: x-ms-exchange-purlcount: 1 x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:3276; x-forefront-prvs: 0068C7E410 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(346002)(136003)(376002)(366004)(39850400004)(396003)(199004)(189003)(52314003)(3846002)(53936002)(76176011)(5660300002)(2906002)(52116002)(66066001)(478600001)(2201001)(6436002)(31696002)(110136005)(86362001)(6306002)(6512007)(6486002)(54906003)(316002)(53946003)(99286004)(6116002)(14444005)(186003)(30864003)(26005)(53546011)(386003)(6506007)(102836004)(25786009)(36756003)(71190400001)(5024004)(256004)(4326008)(71200400001)(2501003)(73956011)(66946007)(81166006)(486006)(8936002)(446003)(68736007)(14454004)(8676002)(81156014)(31686004)(11346002)(66446008)(305945005)(66476007)(476003)(64756008)(66556008)(2616005)(229853002)(6246003)(7736002)(2004002)(579004); DIR:OUT; SFP:1102; SCL:1; SRVR:AM0PR08MB4163; H:AM0PR08MB3572.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: EJyxIBkVMaPjWtR52bcboI6SBB0d7T2qfD+kxd4NKb7KBFN51YD5Ex1yJ7Z4dnW1uSE+VeLMI8ld2zQ08tKamY64NOA9HEZOqQhy+dpr+1w+iOfZYSjUOLUTD4Wgk9riDpcfqDQJJQ6VUq8fYC0d/WlvbPuk/UcpcVRO9e+FJmTg9NkvHbQNlApkrfniAwNEYkPXUrgrl3LFrV0ygRdPECNG7ah7ABWgAldhqrbJEs3apPh1r29rk0XK+uvBCl1uRLRStGgPFSDSZEcfa699SiUPxZ9OZWu2xwrDqhWROmbgt2Ty+z1YEbvDzj5C3aiT1elUDVFkgwWcxAP9p7wHofKVWAaI4Hj606IKSYCkDRhi6qz8a4DIs40aJiWDQbjKQDtEn1Me/wBD4y+FnNUNsmqj5F/NpOwJuvHlwnKrVpo= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4c4c4d42-6beb-48e2-0a5a-08d6f0a74a5c X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Jun 2019 09:04:22.1182 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: vsementsov@virtuozzo.com X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB4163 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.7.95 Subject: Re: [Qemu-devel] [PATCH v8 4/7] block: introduce backup-top filter driver X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "fam@euphon.net" , "kwolf@redhat.com" , Denis Lunev , "stefanha@redhat.com" , "jsnow@redhat.com" Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" MTMuMDYuMjAxOSAxODo1NywgTWF4IFJlaXR6IHdyb3RlOg0KPiBPbiAyOS4wNS4xOSAxNzo0Niwg VmxhZGltaXIgU2VtZW50c292LU9naWV2c2tpeSB3cm90ZToNCj4+IEJhY2t1cC10b3AgZmlsdGVy IGRvZXMgY29weS1iZWZvcmUtd3JpdGUgb3BlcmF0aW9uLiBJdCBzaG91bGQgYmUNCj4+IGluc2Vy dGVkIGFib3ZlIGFjdGl2ZSBkaXNrIGFuZCBoYXMgYSB0YXJnZXQgbm9kZSBmb3IgQ0JXLCBsaWtl IHRoZQ0KPj4gZm9sbG93aW5nOg0KPj4NCj4+ICAgICAgKy0tLS0tLS0rDQo+PiAgICAgIHwgR3Vl c3QgfA0KPj4gICAgICArLS0tLS0tLSsNCj4+ICAgICAgICAgIHxyLHcNCj4+ICAgICAgICAgIHYN Cj4+ICAgICAgKy0tLS0tLS0tLS0tLSsgIHRhcmdldCAgICstLS0tLS0tLS0tLS0tLS0rDQo+PiAg ICAgIHwgYmFja3VwX3RvcCB8LS0tLS0tLS0tLT58IHRhcmdldChxY293MikgfA0KPj4gICAgICAr LS0tLS0tLS0tLS0tKyAgIENCVyAgICAgKy0tLS0tLS0tLS0tLS0tLSsNCj4+ICAgICAgICAgIHwN Cj4+IGJhY2tpbmcgfHIsdw0KPj4gICAgICAgICAgdg0KPj4gICAgICArLS0tLS0tLS0tLS0tLSsN Cj4+ICAgICAgfCBBY3RpdmUgZGlzayB8DQo+PiAgICAgICstLS0tLS0tLS0tLS0tKw0KPj4NCj4+ IFRoZSBkcml2ZXIgd2lsbCBiZSB1c2VkIGluIGJhY2t1cCBpbnN0ZWFkIG9mIHdyaXRlLW5vdGlm aWVycy4NCj4+DQo+PiBTaWduZWQtb2ZmLWJ5OiBWbGFkaW1pciBTZW1lbnRzb3YtT2dpZXZza2l5 IDx2c2VtZW50c292QHZpcnR1b3p6by5jb20+DQo+PiAtLS0NCj4+ICAgYmxvY2svYmFja3VwLXRv cC5oICB8ICA2NCArKysrKysrKysNCj4+ICAgYmxvY2svYmFja3VwLXRvcC5jICB8IDMyMiArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPj4gICBibG9jay9NYWtl ZmlsZS5vYmpzIHwgICAyICsNCj4+ICAgMyBmaWxlcyBjaGFuZ2VkLCAzODggaW5zZXJ0aW9ucygr KQ0KPj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgYmxvY2svYmFja3VwLXRvcC5oDQo+PiAgIGNyZWF0 ZSBtb2RlIDEwMDY0NCBibG9jay9iYWNrdXAtdG9wLmMNCj4+DQo+PiBkaWZmIC0tZ2l0IGEvYmxv Y2svYmFja3VwLXRvcC5oIGIvYmxvY2svYmFja3VwLXRvcC5oDQo+PiBuZXcgZmlsZSBtb2RlIDEw MDY0NA0KPj4gaW5kZXggMDAwMDAwMDAwMC4uNzg4ZTE4YzM1OA0KPj4gLS0tIC9kZXYvbnVsbA0K Pj4gKysrIGIvYmxvY2svYmFja3VwLXRvcC5oDQo+PiBAQCAtMCwwICsxLDY0IEBADQo+PiArLyoN Cj4+ICsgKiBiYWNrdXAtdG9wIGZpbHRlciBkcml2ZXINCj4+ICsgKg0KPj4gKyAqIFRoZSBkcml2 ZXIgcGVyZm9ybXMgQ29weS1CZWZvcmUtV3JpdGUgKENCVykgb3BlcmF0aW9uOiBpdCBpcyBpbmpl Y3RlZCBhYm92ZQ0KPj4gKyAqIHNvbWUgbm9kZSwgYW5kIGJlZm9yZSBlYWNoIHdyaXRlIGl0IGNv cGllcyBfb2xkXyBkYXRhIHRvIHRoZSB0YXJnZXQgbm9kZS4NCj4+ICsgKg0KPj4gKyAqIENvcHly aWdodCAoYykgMjAxOCBWaXJ0dW96em8gSW50ZXJuYXRpb25hbCBHbWJILiBBbGwgcmlnaHRzIHJl c2VydmVkLg0KPj4gKyAqDQo+PiArICogQXV0aG9yOg0KPj4gKyAqICBTZW1lbnRzb3YtT2dpZXZz a2l5IFZsYWRpbWlyIDx2c2VtZW50c292QHZpcnR1b3p6by5jb20+DQo+PiArICoNCj4+ICsgKiBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQ0KPj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQo+PiArICogdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCj4+ICsgKiAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KPj4gKyAqDQo+PiArICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws DQo+PiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YNCj4+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQo+PiArICogR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCj4+ICsgKg0KPj4gKyAqIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQo+PiArICog YWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvPi4NCj4+ICsgKi8NCj4+ICsNCj4+ICsjaWZuZGVmIEJBQ0tVUF9UT1BfSA0KPj4g KyNkZWZpbmUgQkFDS1VQX1RPUF9IDQo+PiArDQo+PiArI2luY2x1ZGUgInFlbXUvb3NkZXAuaCIN Cj4+ICsNCj4+ICsjaW5jbHVkZSAiYmxvY2svYmxvY2tfaW50LmgiDQo+PiArDQo+PiArdHlwZWRl ZiB2b2lkICgqQmFja3VwVG9wUHJvZ3Jlc3NDYWxsYmFjaykodWludDY0X3QgZG9uZSwgdm9pZCAq b3BhcXVlKTsNCj4+ICt0eXBlZGVmIHN0cnVjdCBCRFJWQmFja3VwVG9wU3RhdGUgew0KPj4gKyAg ICBIQml0bWFwICpjb3B5X2JpdG1hcDsgLyogd2hhdCBzaG91bGQgYmUgY29waWVkIHRvIEB0YXJn ZXQgb24gZ3Vlc3Qgd3JpdGUuICovDQo+PiArICAgIEJkcnZDaGlsZCAqdGFyZ2V0Ow0KPj4gKw0K Pj4gKyAgICBCYWNrdXBUb3BQcm9ncmVzc0NhbGxiYWNrIHByb2dyZXNzX2NiOw0KPj4gKyAgICB2 b2lkICpwcm9ncmVzc19vcGFxdWU7DQo+PiArfSBCRFJWQmFja3VwVG9wU3RhdGU7DQo+PiArDQo+ PiArLyoNCj4+ICsgKiBiZHJ2X2JhY2t1cF90b3BfYXBwZW5kDQo+PiArICoNCj4+ICsgKiBBcHBl bmQgYmFja3VwX3RvcCBmaWx0ZXIgbm9kZSBhYm92ZSBAc291cmNlIG5vZGUuIEB0YXJnZXQgbm9k ZSB3aWxsIHJlY2VpdmUNCj4+ICsgKiB0aGUgZGF0YSBiYWNrZWQgdXAgZHVyaW5nIENCRSBvcGVy YXRpb25zLiBOZXcgZmlsdGVyIHRvZ2V0aGVyIHdpdGggQHRhcmdldA0KPj4gKyAqIG5vZGUgYXJl IGF0dGFjaGVkIHRvIEBzb3VyY2UgYWlvIGNvbnRleHQuDQo+PiArICoNCj4+ICsgKiBUaGUgcmVz dWx0aW5nIGZpbHRlciBub2RlIGlzIGltcGxpY2l0Lg0KPiANCj4gV2h5PyAgSXTigJlzIGp1c3Qg YXMgZWFzeSBmb3IgdGhlIGNhbGxlciB0byBqdXN0IG1ha2UgaXQgaW1wbGljaXQgaWYgaXQNCj4g c2hvdWxkIGJlLiAgKEFuZCB1c3VhbGx5IHRoZSBjYWxsZXIgc2hvdWxkIGRlY2lkZSB0aGF0LikN Cg0KUGVyc29uYWxseSwgSSBkb24ndCBrbm93IHdoYXQgYXJlIHRoZSByZWFzb25zIGZvciBmaWx0 ZXJzIHRvIGJpIGltcGxpY2l0IG9yIG5vdCwNCkkganVzdCBtYWRlIGl0IGxpa2Ugb3RoZXIgam9i LWZpbHRlcnMuLiBJIGNhbiBtb3ZlIG1ha2luZy1pbXBsaWNpdCB0byB0aGUgY2FsbGVyDQpvciBk cm9wIGl0IGF0IGFsbCAoaWYgaXQgd2lsbCB3b3JrKS4NCg0KPiANCj4+ICsgKg0KPj4gKyAqIEBj b3B5X2JpdG1hcCBzZWxlY3RzIHJlZ2lvbnMgd2hpY2ggbmVlZHMgQ0JXLiBGdXJ0aGVybW9yZSwg YmFja3VwX3RvcCB3aWxsDQo+PiArICogdXNlIGV4YWN0bHkgdGhpcyBiaXRtYXAsIHNvIGl0IG1h eSBiZSB1c2VkIHRvIGNvbnRyb2wgYmFja3VwX3RvcCBiZWhhdmlvcg0KPj4gKyAqIGR5bmFtaWNh bGx5LiBDYWxsZXIgc2hvdWxkIG5vdCByZWxlYXNlIEBjb3B5X2JpdG1hcCBkdXJpbmcgbGlmZS10 aW1lIG9mDQo+PiArICogYmFja3VwX3RvcC4gUHJvZ3Jlc3MgaXMgdHJhY2tlZCBieSBjYWxsaW5n IEBwcm9ncmVzc19jYiBmdW5jdGlvbi4NCj4+ICsgKi8NCj4+ICtCbG9ja0RyaXZlclN0YXRlICpi ZHJ2X2JhY2t1cF90b3BfYXBwZW5kKA0KPj4gKyAgICAgICAgQmxvY2tEcml2ZXJTdGF0ZSAqc291 cmNlLCBCbG9ja0RyaXZlclN0YXRlICp0YXJnZXQsDQo+PiArICAgICAgICBIQml0bWFwICpjb3B5 X2JpdG1hcCwgRXJyb3IgKiplcnJwKTsNCj4+ICt2b2lkIGJkcnZfYmFja3VwX3RvcF9zZXRfcHJv Z3Jlc3NfY2FsbGJhY2soDQo+PiArICAgICAgICBCbG9ja0RyaXZlclN0YXRlICpicywgQmFja3Vw VG9wUHJvZ3Jlc3NDYWxsYmFjayBwcm9ncmVzc19jYiwNCj4+ICsgICAgICAgIHZvaWQgKnByb2dy ZXNzX29wYXF1ZSk7DQo+PiArdm9pZCBiZHJ2X2JhY2t1cF90b3BfZHJvcChCbG9ja0RyaXZlclN0 YXRlICpicyk7DQo+PiArDQo+PiArI2VuZGlmIC8qIEJBQ0tVUF9UT1BfSCAqLw0KPj4gZGlmZiAt LWdpdCBhL2Jsb2NrL2JhY2t1cC10b3AuYyBiL2Jsb2NrL2JhY2t1cC10b3AuYw0KPj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4+IGluZGV4IDAwMDAwMDAwMDAuLjFkYWEwMmY1MzkNCj4+IC0tLSAv ZGV2L251bGwNCj4+ICsrKyBiL2Jsb2NrL2JhY2t1cC10b3AuYw0KPj4gQEAgLTAsMCArMSwzMjIg QEANCj4+ICsvKg0KPj4gKyAqIGJhY2t1cC10b3AgZmlsdGVyIGRyaXZlcg0KPj4gKyAqDQo+PiAr ICogVGhlIGRyaXZlciBwZXJmb3JtcyBDb3B5LUJlZm9yZS1Xcml0ZSAoQ0JXKSBvcGVyYXRpb246 IGl0IGlzIGluamVjdGVkIGFib3ZlDQo+PiArICogc29tZSBub2RlLCBhbmQgYmVmb3JlIGVhY2gg d3JpdGUgaXQgY29waWVzIF9vbGRfIGRhdGEgdG8gdGhlIHRhcmdldCBub2RlLg0KPj4gKyAqDQo+ PiArICogQ29weXJpZ2h0IChjKSAyMDE4IFZpcnR1b3p6byBJbnRlcm5hdGlvbmFsIEdtYkguIEFs bCByaWdodHMgcmVzZXJ2ZWQuDQo+PiArICoNCj4+ICsgKiBBdXRob3I6DQo+PiArICogIFNlbWVu dHNvdi1PZ2lldnNraXkgVmxhZGltaXIgPHZzZW1lbnRzb3ZAdmlydHVvenpvLmNvbT4NCj4+ICsg Kg0KPj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQo+PiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCj4+ICsgKiB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv cg0KPj4gKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQo+PiArICoNCj4+ ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwNCj4+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KPj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCj4+ICsgKiBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KPj4gKyAqDQo+PiArICogWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UNCj4+ICsgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93 d3cuZ251Lm9yZy9saWNlbnNlcy8+Lg0KPj4gKyAqLw0KPj4gKw0KPj4gKyNpbmNsdWRlICJxZW11 L29zZGVwLmgiDQo+PiArDQo+PiArI2luY2x1ZGUgInFlbXUvY3V0aWxzLmgiDQo+PiArI2luY2x1 ZGUgInFhcGkvZXJyb3IuaCINCj4+ICsjaW5jbHVkZSAiYmxvY2svYmxvY2tfaW50LmgiDQo+PiAr I2luY2x1ZGUgImJsb2NrL3FkaWN0LmgiDQo+PiArDQo+PiArI2luY2x1ZGUgImJsb2NrL2JhY2t1 cC10b3AuaCINCj4+ICsNCj4+ICtzdGF0aWMgY29yb3V0aW5lX2ZuIGludCBiYWNrdXBfdG9wX2Nv X3ByZWFkdigNCj4+ICsgICAgICAgIEJsb2NrRHJpdmVyU3RhdGUgKmJzLCB1aW50NjRfdCBvZmZz ZXQsIHVpbnQ2NF90IGJ5dGVzLA0KPj4gKyAgICAgICAgUUVNVUlPVmVjdG9yICpxaW92LCBpbnQg ZmxhZ3MpDQo+PiArew0KPj4gKyAgICAvKg0KPj4gKyAgICAgKiBGZWF0dXJlcyB0byBiZSBpbXBs ZW1lbnRlZDoNCj4+ICsgICAgICogRjEuIENPUi4gc2F2ZSByZWFkIGRhdGEgdG8gZmxlZWNpbmcg dGFyZ2V0IGZvciBmYXN0IGFjY2Vzcw0KPj4gKyAgICAgKiAgICAgKHRvIHJlZHVjZSByZWFkcyku IFRoaXMgcG9zc2libHkgbWF5IGJlIGRvbmUgd2l0aCB1c2Ugb2YgY29weS1vbi1yZWFkDQo+PiAr ICAgICAqICAgICBmaWx0ZXIsIGJ1dCB3ZSBuZWVkIGFuIGFiaWxpdHkgdG8gbWFrZSBDT1IgcmVx dWVzdHMgb3B0aW9uYWw6IGZvcg0KPj4gKyAgICAgKiAgICAgZXhhbXBsZSwgaWYgdGFyZ2V0IGlz IGEgcmFtLWNhY2hlLCBhbmQgaWYgaXQgaXMgZnVsbCBub3csIHdlIHNob3VsZA0KPj4gKyAgICAg KiAgICAgc2tpcCBkb2luZyBDT1IgcmVxdWVzdCwgYXMgaXQgaXMgYWN0dWFsbHkgbm90IG5lY2Vz c2FyeS4NCj4+ICsgICAgICoNCj4+ICsgICAgICogRjIuIEZlYXR1cmUgZm9yIGd1ZXN0OiByZWFk IGZyb20gZmxlZWNpbmcgdGFyZ2V0IGlmIGRhdGEgaXMgaW4gcmFtLWNhY2hlDQo+PiArICAgICAq ICAgICBhbmQgaXMgdW5jaGFuZ2VkDQo+PiArICAgICAqLw0KPj4gKw0KPj4gKyAgICByZXR1cm4g YmRydl9jb19wcmVhZHYoYnMtPmJhY2tpbmcsIG9mZnNldCwgYnl0ZXMsIHFpb3YsIGZsYWdzKTsN Cj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGNvcm91dGluZV9mbiBpbnQgYmFja3VwX3RvcF9jYnco QmxvY2tEcml2ZXJTdGF0ZSAqYnMsIHVpbnQ2NF90IG9mZnNldCwNCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBieXRlcykNCj4+ICt7DQo+PiArICAg IGludCByZXQgPSAwOw0KPj4gKyAgICBCRFJWQmFja3VwVG9wU3RhdGUgKnMgPSBicy0+b3BhcXVl Ow0KPj4gKyAgICB1aW50NjRfdCBncmFuID0gMVVMIDw8IGhiaXRtYXBfZ3JhbnVsYXJpdHkocy0+ Y29weV9iaXRtYXApOw0KPj4gKyAgICB1aW50NjRfdCBlbmQgPSBRRU1VX0FMSUdOX1VQKG9mZnNl dCArIGJ5dGVzLCBncmFuKTsNCj4+ICsgICAgdWludDY0X3Qgb2ZmID0gUUVNVV9BTElHTl9ET1dO KG9mZnNldCwgZ3JhbiksIGxlbjsNCj4gDQo+IFRoZSDigJwsIGxlbuKAnSBpcyBhIGJpdCB3ZWly ZGx5IHBsYWNlZCB0aGVyZSwgd2h5IG5vdCBkZWZpbmUgaXQgb24gYQ0KPiBzZXBhcmF0ZSBsaW5l IGFzICJ1aW50NjRfdCBsZW4gPSBlbmQgLSBvZmYiPw0KPiANCj4+ICsgICAgdm9pZCAqYnVmID0g cWVtdV9ibG9ja2FsaWduKGJzLCBlbmQgLSBvZmYpOw0KPj4gKw0KPj4gKyAgICAvKg0KPj4gKyAg ICAgKiBGZWF0dXJlcyB0byBiZSBpbXBsZW1lbnRlZDoNCj4+ICsgICAgICogRjMuIHBhcmFsbGVs aXplIGNvcHlpbmcgbG9vcA0KPj4gKyAgICAgKiBGNC4gZGV0ZWN0IHplcm9lcyA/IG9yLCBvdGhl cndpc2UsIGRyb3AgZGV0ZWN0IHplcm9lcyBmcm9tIGJhY2t1cCBjb2RlDQo+PiArICAgICAqICAg ICBhbmQganVzdCBlbmFibGUgemVyb2VzIGRldGVjdGluZyBvbiB0YXJnZXQNCj4+ICsgICAgICog RjUuIHVzZSBibG9ja19zdGF0dXMgPw0KPj4gKyAgICAgKiBGNi4gZG9uJ3QgY29weSBjbHVzdGVy cyB3aGljaCBhcmUgYWxyZWFkeSBjYWNoZWQgYnkgQ09SIFtzZWUgRjFdDQo+PiArICAgICAqIEY3 LiBpZiB0YXJnZXQgaXMgcmFtLWNhY2hlIGFuZCBpdCBpcyBmdWxsLCB0aGVyZSBzaG91bGQgYmUg YSBwb3NzaWJpbGl0eQ0KPj4gKyAgICAgKiAgICAgdG8gZHJvcCBub3QgbmVjZXNzYXJ5IGRhdGEg KGNhY2hlZCBieSBDT1IgW3NlZSBGMV0pIHRvIGhhbmRsZSBDQlcNCj4+ICsgICAgICogICAgIGZh c3QuDQo+IA0KPiBBbHNvIOKAnGRyb3AgQkRSVl9SRVFfU0VSSUFMSVNJTkcgZnJvbSB3cml0ZXMg dG8gcy0+dGFyZ2V0IHVubGVzcyBuZWNlc3NhcnnigJ0/DQoNCmhtbSwgeWVzLiBJdCBtYXkgYmUg YSBmaWx0ZXIgcGFyYW1ldGVyLCBzZXJpYWxpemUgd3JpdGVzIG9yIG5vdC4NCg0KPiANCj4+ICsg ICAgICovDQo+PiArDQo+PiArICAgIGxlbiA9IGVuZCAtIG9mZjsNCj4+ICsgICAgd2hpbGUgKGhi aXRtYXBfbmV4dF9kaXJ0eV9hcmVhKHMtPmNvcHlfYml0bWFwLCAmb2ZmLCAmbGVuKSkgew0KPj4g KyAgICAgICAgaGJpdG1hcF9yZXNldChzLT5jb3B5X2JpdG1hcCwgb2ZmLCBsZW4pOw0KPj4gKw0K Pj4gKyAgICAgICAgcmV0ID0gYmRydl9jb19wcmVhZChicy0+YmFja2luZywgb2ZmLCBsZW4sIGJ1 ZiwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRSVl9SRVFfTk9fU0VSSUFMSVNJ TkcpOw0KPj4gKyAgICAgICAgaWYgKHJldCA8IDApIHsNCj4+ICsgICAgICAgICAgICBoYml0bWFw X3NldChzLT5jb3B5X2JpdG1hcCwgb2ZmLCBsZW4pOw0KPj4gKyAgICAgICAgICAgIGdvdG8gb3V0 Ow0KPj4gKyAgICAgICAgfQ0KPj4gKw0KPj4gKyAgICAgICAgcmV0ID0gYmRydl9jb19wd3JpdGUo cy0+dGFyZ2V0LCBvZmYsIGxlbiwgYnVmLCBCRFJWX1JFUV9TRVJJQUxJU0lORyk7DQo+PiArICAg ICAgICBpZiAocmV0IDwgMCkgew0KPj4gKyAgICAgICAgICAgIGhiaXRtYXBfc2V0KHMtPmNvcHlf Yml0bWFwLCBvZmYsIGxlbik7DQo+PiArICAgICAgICAgICAgZ290byBvdXQ7DQo+PiArICAgICAg ICB9DQo+PiArDQo+PiArICAgICAgICBpZiAocy0+cHJvZ3Jlc3NfY2IpIHsNCj4+ICsgICAgICAg ICAgICBzLT5wcm9ncmVzc19jYihsZW4sIHMtPnByb2dyZXNzX29wYXF1ZSk7DQo+PiArICAgICAg ICB9DQo+PiArICAgICAgICBvZmYgKz0gbGVuOw0KPj4gKyAgICAgICAgaWYgKG9mZiA+PSBlbmQp IHsNCj4+ICsgICAgICAgICAgICBicmVhazsNCj4+ICsgICAgICAgIH0NCj4+ICsgICAgICAgIGxl biA9IGVuZCAtIG9mZjsNCj4+ICsgICAgfQ0KPj4gKw0KPj4gK291dDoNCj4+ICsgICAgcWVtdV92 ZnJlZShidWYpOw0KPj4gKw0KPj4gKyAgICAvKg0KPj4gKyAgICAgKiBGOC4gd2UgZmFpbCBndWVz dCByZXF1ZXN0IGluIGNhc2Ugb2YgZXJyb3IuIFdlIGNhbiBhbHRlciBpdCBieQ0KPj4gKyAgICAg KiBwb3NzaWJpbGl0eSB0byBmYWlsIGNvcHlpbmcgcHJvY2VzcyBpbnN0ZWFkLCBvciByZXRyeSBz ZXZlcmFsIHRpbWVzLCBvcg0KPj4gKyAgICAgKiBtYXkgYmUgZ3Vlc3QgcGF1c2UsIGV0Yy4NCj4+ ICsgICAgICovDQo+PiArICAgIHJldHVybiByZXQ7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBp bnQgY29yb3V0aW5lX2ZuIGJhY2t1cF90b3BfY29fcGRpc2NhcmQoQmxvY2tEcml2ZXJTdGF0ZSAq YnMsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQ2NF90IG9mZnNldCwgaW50IGJ5dGVzKQ0KPj4gK3sNCj4+ICsgICAgaW50IHJldCA9IGJhY2t1 cF90b3BfY2J3KGJzLCBvZmZzZXQsIGJ5dGVzKTsNCj4+ICsgICAgaWYgKHJldCA8IDApIHsNCj4+ ICsgICAgICAgIHJldHVybiByZXQ7DQo+PiArICAgIH0NCj4+ICsNCj4+ICsgICAgLyoNCj4+ICsg ICAgICogRmVhdHVyZXMgdG8gYmUgaW1wbGVtZW50ZWQ6DQo+PiArICAgICAqIEY5LiBwb3NzaWJp bGl0eSBvZiBsYXp5IGRpc2NhcmQ6IGp1c3QgZGVmZXIgdGhlIGRpc2NhcmQgYWZ0ZXIgZmxlZWNp bmcNCj4+ICsgICAgICogICAgIGNvbXBsZXRpb24uIElmIHdyaXRlIChvciBuZXcgZGlzY2FyZCkg b2NjdXJzIHRvIHRoZSBzYW1lIGFyZWEsIGp1c3QNCj4+ICsgICAgICogICAgIGRyb3AgZGVmZXJy ZWQgZGlzY2FyZC4NCj4+ICsgICAgICovDQo+PiArDQo+PiArICAgIHJldHVybiBiZHJ2X2NvX3Bk aXNjYXJkKGJzLT5iYWNraW5nLCBvZmZzZXQsIGJ5dGVzKTsNCj4+ICt9DQo+PiArDQo+PiArc3Rh dGljIGludCBjb3JvdXRpbmVfZm4gYmFja3VwX3RvcF9jb19wd3JpdGVfemVyb2VzKEJsb2NrRHJp dmVyU3RhdGUgKmJzLA0KPj4gKyAgICAgICAgaW50NjRfdCBvZmZzZXQsIGludCBieXRlcywgQmRy dlJlcXVlc3RGbGFncyBmbGFncykNCj4+ICt7DQo+PiArICAgIGludCByZXQgPSBiYWNrdXBfdG9w X2Nidyhicywgb2Zmc2V0LCBieXRlcyk7DQo+PiArICAgIGlmIChyZXQgPCAwKSB7DQo+PiArICAg ICAgICByZXR1cm4gcmV0Ow0KPj4gKyAgICB9DQo+PiArDQo+PiArICAgIHJldHVybiBiZHJ2X2Nv X3B3cml0ZV96ZXJvZXMoYnMtPmJhY2tpbmcsIG9mZnNldCwgYnl0ZXMsIGZsYWdzKTsNCj4+ICt9 DQo+PiArDQo+PiArc3RhdGljIGNvcm91dGluZV9mbiBpbnQgYmFja3VwX3RvcF9jb19wd3JpdGV2 KEJsb2NrRHJpdmVyU3RhdGUgKmJzLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1aW50NjRfdCBvZmZzZXQsDQo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGJ5dGVzLA0KPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRRU1VSU9WZWN0b3IgKnFpb3Ys IGludCBmbGFncykNCj4+ICt7DQo+PiArICAgIGlmICghKGZsYWdzICYgQkRSVl9SRVFfV1JJVEVf VU5DSEFOR0VEKSkgew0KPj4gKyAgICAgICAgaW50IHJldCA9IGJhY2t1cF90b3BfY2J3KGJzLCBv ZmZzZXQsIGJ5dGVzKTsNCj4+ICsgICAgICAgIGlmIChyZXQgPCAwKSB7DQo+PiArICAgICAgICAg ICAgcmV0dXJuIHJldDsNCj4+ICsgICAgICAgIH0NCj4+ICsgICAgfQ0KPj4gKw0KPj4gKyAgICBy ZXR1cm4gYmRydl9jb19wd3JpdGV2KGJzLT5iYWNraW5nLCBvZmZzZXQsIGJ5dGVzLCBxaW92LCBm bGFncyk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgY29yb3V0aW5lX2ZuIGJhY2t1cF90 b3BfY29fZmx1c2goQmxvY2tEcml2ZXJTdGF0ZSAqYnMpDQo+PiArew0KPj4gKyAgICBpZiAoIWJz LT5iYWNraW5nKSB7DQo+PiArICAgICAgICByZXR1cm4gMDsNCj4+ICsgICAgfQ0KPj4gKw0KPj4g KyAgICByZXR1cm4gYmRydl9jb19mbHVzaChicy0+YmFja2luZy0+YnMpOw0KPiANCj4gU2hvdWxk IHdlIGZsdXNoIHRoZSB0YXJnZXQsIHRvbz8NCg0KSG0sIHlvdSd2ZSBhc2tlZCBpdCBhbHJlYWR5 LCBvbiBwcmV2aW91cyB2ZXJzaW9uIDopIEJhY2t1cCBkb24ndCBkbyBpdCwNCnNvIEkganVzdCBr ZWVwIG9sZCBiZWhhdmlvci4gQW5kIHdoYXQgaXMgdGhlIHJlYXNvbiB0byBmbHVzaCBiYWNrdXAg dGFyZ2V0DQpvbiBhbnkgZ3Vlc3QgZmx1c2g/DQoNCj4gDQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRp YyB2b2lkIGJhY2t1cF90b3BfcmVmcmVzaF9maWxlbmFtZShCbG9ja0RyaXZlclN0YXRlICpicykN Cj4+ICt7DQo+PiArICAgIGlmIChicy0+YmFja2luZyA9PSBOVUxMKSB7DQo+PiArICAgICAgICAv Kg0KPj4gKyAgICAgICAgICogd2UgY2FuIGJlIGhlcmUgYWZ0ZXIgZmFpbGVkIGJkcnZfYXR0YWNo X2NoaWxkIGluDQo+PiArICAgICAgICAgKiBiZHJ2X3NldF9iYWNraW5nX2hkDQo+PiArICAgICAg ICAgKi8NCj4+ICsgICAgICAgIHJldHVybjsNCj4+ICsgICAgfQ0KPj4gKyAgICBiZHJ2X3JlZnJl c2hfZmlsZW5hbWUoYnMtPmJhY2tpbmctPmJzKTsNCj4gDQo+IGJkcnZfcmVmcmVzaF9maWxlbmFt ZSgpIHNob3VsZCBoYXZlIGRvbmUgdGhpcyBhbHJlYWR5Lg0KPiANCj4+ICsgICAgcHN0cmNweShi cy0+ZXhhY3RfZmlsZW5hbWUsIHNpemVvZihicy0+ZXhhY3RfZmlsZW5hbWUpLA0KPj4gKyAgICAg ICAgICAgIGJzLT5iYWNraW5nLT5icy0+ZmlsZW5hbWUpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0 aWMgdm9pZCBiYWNrdXBfdG9wX2NoaWxkX3Blcm0oQmxvY2tEcml2ZXJTdGF0ZSAqYnMsIEJkcnZD aGlsZCAqYywNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmRy dkNoaWxkUm9sZSAqcm9sZSwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QmxvY2tSZW9wZW5RdWV1ZSAqcmVvcGVuX3F1ZXVlLA0KPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1aW50NjRfdCBwZXJtLCB1aW50NjRfdCBzaGFyZWQsDQo+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90ICpucGVybSwgdWludDY0X3QgKm5z aGFyZWQpDQo+PiArew0KPj4gKyAgICAvKg0KPj4gKyAgICAgKiBXZSBoYXZlIEhCaXRtYXAgaW4g dGhlIHN0YXRlLCBpdHMgc2l6ZSBpcyBmaXhlZCwgc28gd2UgbmV2ZXIgYWxsb3cNCj4+ICsgICAg ICogcmVzaXplLg0KPj4gKyAgICAgKi8NCj4+ICsgICAgdWludDY0X3QgcncgPSBCTEtfUEVSTV9D T05TSVNURU5UX1JFQUQgfCBCTEtfUEVSTV9XUklURV9VTkNIQU5HRUQgfA0KPj4gKyAgICAgICAg ICAgICAgICAgIEJMS19QRVJNX1dSSVRFOw0KPj4gKw0KPj4gKyAgICBiZHJ2X2ZpbHRlcl9kZWZh dWx0X3Blcm1zKGJzLCBjLCByb2xlLCByZW9wZW5fcXVldWUsIHBlcm0sIHNoYXJlZCwNCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucGVybSwgbnNoYXJlZCk7DQo+PiArDQo+PiAr ICAgICpucGVybSA9ICpucGVybSAmIHJ3Ow0KPj4gKyAgICAqbnNoYXJlZCA9ICpuc2hhcmVkICYg cnc7DQo+IA0KPiBTb21laG93LCB0aGF0IGJkcnZfZmlsdGVyX2RlZmF1bHRfcGVybSgpIGNhbGwg ZG9lc27igJl0IG1ha2UgdGhpcyBmdW5jdGlvbg0KPiBlYXNpZXIgZm9yIG1lLg0KPiANCj4gSXQg c2VlbXMgbGlrZSB0aGlzIGlzIGJhc2ljYWxseSBqdXN0IOKAnCpucGVybSA9IHBlcm0gJiByd+KA nSBhbmQNCj4g4oCcKm5zaGFyZWQgPSBzaGFyZWQgJiByd+KAnS4NCj4gDQo+PiArDQo+PiArICAg IGlmIChyb2xlID09ICZjaGlsZF9maWxlKSB7DQo+PiArICAgICAgICAvKg0KPj4gKyAgICAgICAg ICogVGFyZ2V0IGNoaWxkDQo+PiArICAgICAgICAgKg0KPj4gKyAgICAgICAgICogU2hhcmUgd3Jp dGUgdG8gdGFyZ2V0IChjaGlsZF9maWxlKSwgdG8gbm90IGludGVyZmVyZQ0KPj4gKyAgICAgICAg ICogd2l0aCBndWVzdCB3cml0ZXMgdG8gaXRzIGRpc2sgd2hpY2ggbWF5IGJlIGluIHRhcmdldCBi YWNraW5nIGNoYWluLg0KPj4gKyAgICAgICAgICovDQo+PiArICAgICAgICBpZiAocGVybSAmIEJM S19QRVJNX1dSSVRFKSB7DQo+PiArICAgICAgICAgICAgKm5zaGFyZWQgPSAqbnNoYXJlZCB8IEJM S19QRVJNX1dSSVRFOw0KPiANCj4gV2h5IG5vdCBhbHdheXMgc2hhcmUgV1JJVEUgb24gdGhlIHRh cmdldD8NCg0KSG1tLCBpdCdzIGEgYmFkIHRoaW5nIHRvIHNoYXJlIHdyaXRlcyBvbiB0YXJnZXQs IHNvIEknbSB0cnlpbmcgdG8gcmVkdWNlIG51bWJlciBvZg0KY2FzZXMgd2hlbiB3ZSBoYXZlIHNo YXJlIGl0Lg0KDQo+IA0KPj4gKyAgICAgICAgfQ0KPj4gKyAgICB9IGVsc2Ugew0KPj4gKyAgICAg ICAgLyogU291cmNlIGNoaWxkICovDQo+PiArICAgICAgICBpZiAocGVybSAmIEJMS19QRVJNX1dS SVRFKSB7DQo+IA0KPiBPciBXUklURV9VTkNIQU5HRUQsIG5vPw0KDQpXaHk/IFdlIGRvbid0IG5l ZWQgZG9pbmcgQ0JXIGZvciB1bmNoYW5nZWQgd3JpdGUuDQoNCj4gDQo+PiArICAgICAgICAgICAg Km5wZXJtID0gKm5wZXJtIHwgQkxLX1BFUk1fQ09OU0lTVEVOVF9SRUFEOw0KPj4gKyAgICAgICAg fQ0KPj4gKyAgICAgICAgKm5zaGFyZWQgPQ0KPj4gKyAgICAgICAgICAgICpuc2hhcmVkICYgKEJM S19QRVJNX0NPTlNJU1RFTlRfUkVBRCB8IEJMS19QRVJNX1dSSVRFX1VOQ0hBTkdFRCk7DQo+IA0K PiBBbmQgaGVyZSBpdCBpc27igJl0IOKAnCpuc2hhcmVkID0gc2hhcmVkICYgcnfigJ0gYnV0IOKA nHJ3ICYgfldSSVRF4oCdLg0KPiANCj4gSSBmZWVsIGxpa2UgdGhpcyBmdW5jdGlvbiB3b3VsZCBi ZSBzaW1wbGVyIGlmIHlvdSBqdXN0IHNldCAqbnBlcm0gYW5kDQo+ICpuc2hhcmVkIHNlcGFyYXRl bHkgaW4gdGhlIHR3byBicmFuY2hlcyBvZiB0aGlzIGNvbmRpdGlvbiwgd2l0aG91dA0KPiBzZXR0 aW5nIGEg4oCcZGVmYXVsdOKAnSBmaXJzdC4NCg0KT2ssIEknbGwgdHJ5DQoNCj4gDQo+PiArICAg IH0NCj4+ICt9DQo+PiArDQo+PiArQmxvY2tEcml2ZXIgYmRydl9iYWNrdXBfdG9wX2ZpbHRlciA9 IHsNCj4+ICsgICAgLmZvcm1hdF9uYW1lID0gImJhY2t1cC10b3AiLA0KPj4gKyAgICAuaW5zdGFu Y2Vfc2l6ZSA9IHNpemVvZihCRFJWQmFja3VwVG9wU3RhdGUpLA0KPj4gKw0KPj4gKyAgICAuYmRy dl9jb19wcmVhZHYgICAgICAgICAgICAgPSBiYWNrdXBfdG9wX2NvX3ByZWFkdiwNCj4+ICsgICAg LmJkcnZfY29fcHdyaXRldiAgICAgICAgICAgID0gYmFja3VwX3RvcF9jb19wd3JpdGV2LA0KPj4g KyAgICAuYmRydl9jb19wd3JpdGVfemVyb2VzICAgICAgPSBiYWNrdXBfdG9wX2NvX3B3cml0ZV96 ZXJvZXMsDQo+PiArICAgIC5iZHJ2X2NvX3BkaXNjYXJkICAgICAgICAgICA9IGJhY2t1cF90b3Bf Y29fcGRpc2NhcmQsDQo+PiArICAgIC5iZHJ2X2NvX2ZsdXNoICAgICAgICAgICAgICA9IGJhY2t1 cF90b3BfY29fZmx1c2gsDQo+PiArDQo+PiArICAgIC5iZHJ2X2NvX2Jsb2NrX3N0YXR1cyAgICAg ICA9IGJkcnZfY29fYmxvY2tfc3RhdHVzX2Zyb21fYmFja2luZywNCj4+ICsNCj4+ICsgICAgLmJk cnZfcmVmcmVzaF9maWxlbmFtZSAgICAgID0gYmFja3VwX3RvcF9yZWZyZXNoX2ZpbGVuYW1lLA0K Pj4gKw0KPj4gKyAgICAuYmRydl9jaGlsZF9wZXJtICAgICAgICAgICAgPSBiYWNrdXBfdG9wX2No aWxkX3Blcm0sDQo+PiArDQo+PiArICAgIC5pc19maWx0ZXIgPSB0cnVlLA0KPj4gK307DQo+PiAr DQo+PiArQmxvY2tEcml2ZXJTdGF0ZSAqYmRydl9iYWNrdXBfdG9wX2FwcGVuZChCbG9ja0RyaXZl clN0YXRlICpzb3VyY2UsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBCbG9ja0RyaXZlclN0YXRlICp0YXJnZXQsDQo+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBIQml0bWFwICpjb3B5X2JpdG1hcCwNCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycm9yICoqZXJycCkNCj4+ICt7DQo+PiAr ICAgIEVycm9yICpsb2NhbF9lcnIgPSBOVUxMOw0KPj4gKyAgICBCRFJWQmFja3VwVG9wU3RhdGUg KnN0YXRlOw0KPj4gKyAgICBCbG9ja0RyaXZlclN0YXRlICp0b3AgPSBiZHJ2X25ld19vcGVuX2Ry aXZlcigmYmRydl9iYWNrdXBfdG9wX2ZpbHRlciwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgQkRSVl9PX1JEV1IsIGVycnApOw0KPj4g Kw0KPj4gKyAgICBpZiAoIXRvcCkgew0KPj4gKyAgICAgICAgcmV0dXJuIE5VTEw7DQo+PiArICAg IH0NCj4+ICsNCj4+ICsgICAgdG9wLT5pbXBsaWNpdCA9IHRydWU7DQo+IA0KPiBBcyBJIHNhaWQg YWJvdmUsIEkgdGhpbmsgdGhlIGNhbGxlciBzaG91bGQgc2V0IHRoaXMuDQo+IA0KPj4gKyAgICB0 b3AtPnRvdGFsX3NlY3RvcnMgPSBzb3VyY2UtPnRvdGFsX3NlY3RvcnM7DQo+PiArICAgIHRvcC0+ Ymwub3B0X21lbV9hbGlnbm1lbnQgPSBNQVgoYmRydl9vcHRfbWVtX2FsaWduKHNvdXJjZSksDQo+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmRydl9vcHRfbWVtX2FsaWdu KHRhcmdldCkpOw0KPj4gKyAgICB0b3AtPm9wYXF1ZSA9IHN0YXRlID0gZ19uZXcwKEJEUlZCYWNr dXBUb3BTdGF0ZSwgMSk7DQo+PiArICAgIHN0YXRlLT5jb3B5X2JpdG1hcCA9IGNvcHlfYml0bWFw Ow0KPj4gKw0KPj4gKyAgICBiZHJ2X3JlZih0YXJnZXQpOw0KPj4gKyAgICBzdGF0ZS0+dGFyZ2V0 ID0gYmRydl9hdHRhY2hfY2hpbGQodG9wLCB0YXJnZXQsICJ0YXJnZXQiLCAmY2hpbGRfZmlsZSwg ZXJycCk7DQo+PiArICAgIGlmICghc3RhdGUtPnRhcmdldCkgew0KPj4gKyAgICAgICAgYmRydl91 bnJlZih0YXJnZXQpOw0KPj4gKyAgICAgICAgYmRydl91bnJlZih0b3ApOw0KPj4gKyAgICAgICAg cmV0dXJuIE5VTEw7DQo+PiArICAgIH0NCj4+ICsNCj4+ICsgICAgYmRydl9zZXRfYWlvX2NvbnRl eHQodG9wLCBiZHJ2X2dldF9haW9fY29udGV4dChzb3VyY2UpKTsNCj4+ICsgICAgYmRydl9zZXRf YWlvX2NvbnRleHQodGFyZ2V0LCBiZHJ2X2dldF9haW9fY29udGV4dChzb3VyY2UpKTsNCj4gDQo+ IEkgc3VwcG9zZSB0aGVzZSBjYWxscyBhcmVu4oCZdCBuZWNlc3NhcnkgYW55bW9yZSAoY29tcGFy ZSBkMGVlMDIwNGY0MDA5KS4NCg0KSG1tLCBzZWUgaXQsIGFncmVlLg0KDQo+ICAgKEnigJltIG5v dCBmdWxseSBzdXJlLCB0aG91Z2guICBJbiBhbnkgY2FzZSwgdGhleSB3b3VsZCBuZWVkIHRvIGJl DQo+IGJkcnZfdHJ5X3NldF9haW9fY29udGV4dCgpIGlmIHRoZXkgd2VyZSBzdGlsbCBuZWNlc3Nh cnkuKQ0KPiANCj4+ICsNCj4+ICsgICAgYmRydl9kcmFpbmVkX2JlZ2luKHNvdXJjZSk7DQo+PiAr DQo+PiArICAgIGJkcnZfcmVmKHRvcCk7DQo+PiArICAgIGJkcnZfYXBwZW5kKHRvcCwgc291cmNl LCAmbG9jYWxfZXJyKTsNCj4+ICsgICAgaWYgKGxvY2FsX2Vycikgew0KPj4gKyAgICAgICAgZXJy b3JfcHJlcGVuZCgmbG9jYWxfZXJyLCAiQ2Fubm90IGFwcGVuZCBiYWNrdXAtdG9wIGZpbHRlcjog Iik7DQo+PiArICAgIH0NCj4+ICsNCj4+ICsgICAgYmRydl9kcmFpbmVkX2VuZChzb3VyY2UpOw0K Pj4gKw0KPj4gKyAgICBpZiAobG9jYWxfZXJyKSB7DQo+PiArICAgICAgICBiZHJ2X3VucmVmX2No aWxkKHRvcCwgc3RhdGUtPnRhcmdldCk7DQo+PiArICAgICAgICBiZHJ2X3VucmVmKHRvcCk7DQo+ PiArICAgICAgICBlcnJvcl9wcm9wYWdhdGUoZXJycCwgbG9jYWxfZXJyKTsNCj4+ICsgICAgICAg IHJldHVybiBOVUxMOw0KPj4gKyAgICB9DQo+PiArDQo+PiArICAgIHJldHVybiB0b3A7DQo+PiAr fQ0KPiANCj4gSSBndWVzcyBpdCB3b3VsZCBiZSBuaWNlIGlmIGl0IHVzZXJzIGNvdWxkIGJsb2Nr ZGV2LWFkZCBhIGJhY2t1cC10b3ANCj4gbm9kZSB0byBiYXNpY2FsbHkgZ2V0IGEgYmFja3VwIHdp dGggc3luYz1ub25lLg0KPiANCj4gKFRoZSBiZHJ2X29wZW4gaW1wbGVtZW50YXRpb24gc2hvdWxk IHRoZW4gY3JlYXRlIGEgbmV3IGJpdG1hcCBhbmQNCj4gaW5pdGlhbGl6ZSBpdCB0byBiZSBmdWxs eSBzZXQuKQ0KPiANCj4gQnV0IG1heWJlIGl0IHdvdWxkbuKAmXQgYmUgc28gbmljZSBhbmQgSSBq dXN0IGhhdmUgZmV2ZXJpc2ggZHJlYW1zLg0KDQpXaGVuIHNlcmllcyBiZWd1biwgSSB3YXMgdHJ5 aW5nIHRvIG1ha2UgZXhhY3RseSB0aGlzIC0gdXNlci1hdmFpbGFibGUgZmlsdGVyLA0Kd2hpY2gg bWF5IGJlIHVzZWQgaW4gc2VwYXJhdGUsIGJ1dCB5b3Ugd2FzIGFnYWluc3QpDQoNCk1heWJlLCBu b3QgdG90YWxseSBhZ2FpbnN0LCBidXQgSSBkZWNpZGVkIG5vdCB0byBhcmd1ZSBsb25nLCBhbmQg aW5zdGVhZCBtYWtlDQpmaWx0ZXIgaW1wbGljaXQgYW5kIGRyb3AgcHVibGljIGFwaSAobGlrZSBt aXJyb3IgYW5kIGNvbW1pdCBmaWx0ZXJzKSwgYnV0IHBsYWNlIGl0DQppbiBhIHNlcGFyYXRlIGZp bGUgKG5vIG9uZSB3aWxsIGFyZ3VlIGFnYWluc3QgcHV0dGluZyBsYXJnZSBlbm91Z2ggYW5kIGNv bXBsZXRlDQpuZXcgZmVhdHVyZSwgcmVwcmVzZW50ZWQgYnkgb2JqZWN0IGludG8gYSBzZXBhcmF0 ZSBmaWxlIDopLiBBbmQgdGhpcyBhY3R1YWxseQ0KbWFrZXMgaXQgZWFzeSB0byBwdWJsaXNoIHRo aXMgZmlsdGVyIGF0IHNvbWUgbW9tZW50LiBBbmQgbm93IEkgdGhpbmsgaXQgd2FzDQpnb29kIGRl Y2lzaW9uIGFueXdheSwgYXMgd2UgcG9zdHBvbmVkIGFyZ3VpbmcgYXJvdW5kIEFQSSBhbmQgYXJv dW5kIHNoYXJlZCBkaXJ0eQ0KYml0bWFwcy4NCg0KU28gcHVibGlzaGluZyB0aGUgZmlsdGVyIGlz IGZ1dHVyZSBzdGVwLg0KDQo+IA0KPj4gK3ZvaWQgYmRydl9iYWNrdXBfdG9wX3NldF9wcm9ncmVz c19jYWxsYmFjaygNCj4+ICsgICAgICAgIEJsb2NrRHJpdmVyU3RhdGUgKmJzLCBCYWNrdXBUb3BQ cm9ncmVzc0NhbGxiYWNrIHByb2dyZXNzX2NiLA0KPj4gKyAgICAgICAgdm9pZCAqcHJvZ3Jlc3Nf b3BhcXVlKQ0KPj4gK3sNCj4+ICsgICAgQkRSVkJhY2t1cFRvcFN0YXRlICpzID0gYnMtPm9wYXF1 ZTsNCj4+ICsNCj4+ICsgICAgcy0+cHJvZ3Jlc3NfY2IgPSBwcm9ncmVzc19jYjsNCj4+ICsgICAg cy0+cHJvZ3Jlc3Nfb3BhcXVlID0gcHJvZ3Jlc3Nfb3BhcXVlOw0KPj4gK30NCj4+ICsNCj4+ICt2 b2lkIGJkcnZfYmFja3VwX3RvcF9kcm9wKEJsb2NrRHJpdmVyU3RhdGUgKmJzKQ0KPj4gK3sNCj4+ ICsgICAgQkRSVkJhY2t1cFRvcFN0YXRlICpzID0gYnMtPm9wYXF1ZTsNCj4+ICsgICAgQWlvQ29u dGV4dCAqYWlvX2NvbnRleHQgPSBiZHJ2X2dldF9haW9fY29udGV4dChicyk7DQo+PiArDQo+PiAr ICAgIGFpb19jb250ZXh0X2FjcXVpcmUoYWlvX2NvbnRleHQpOw0KPj4gKw0KPj4gKyAgICBiZHJ2 X2RyYWluZWRfYmVnaW4oYnMpOw0KPj4gKw0KPj4gKyAgICBiZHJ2X2NoaWxkX3RyeV9zZXRfcGVy bShicy0+YmFja2luZywgMCwgQkxLX1BFUk1fQUxMLCAmZXJyb3JfYWJvcnQpOw0KPiANCj4gUHJl LWV4aXN0aW5nIGluIG90aGVyIGpvYnMsIGJ1dCBJIHRoaW5rIGNhbGxpbmcgdGhpcyBmdW5jdGlv biBpcw0KPiBkYW5nZXJvdXMuICAoV2hpY2ggaXMgd2h5IEkgcmVtb3ZlIGl0IGluIG15IOKAnGJs b2NrOiBJZ25vcmUgbG9vc2VuaW5nDQo+IHBlcm0gcmVzdHJpY3Rpb25zIGZhaWx1cmVz4oCdIHNl cmllcy4pDQoNCkhtbSwgZ29vZCB0aGluZy4uIFNob3VsZCBJIHJlYmFzZSBvbiBpdD8NCg0KPiAN Cj4+ICsgICAgYmRydl9yZXBsYWNlX25vZGUoYnMsIGJhY2tpbmdfYnMoYnMpLCAmZXJyb3JfYWJv cnQpOw0KPj4gKyAgICBiZHJ2X3NldF9iYWNraW5nX2hkKGJzLCBOVUxMLCAmZXJyb3JfYWJvcnQp Ow0KPiANCj4gSSB0aGluayBzb21lIG9mIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGluIGEgLmJk cnZfY2xvc2UoKQ0KPiBpbXBsZW1lbnRhdGlvbiwgZm9yIGV4YW1wbGUgdGhpcyBiZHJ2X3NldF9i YWNraW5nX2hkKCkgY2FsbC4NCg0KV2h5PyBXZSBkb24ndCBoYXZlIC5iZHJ2X29wZW4sIHNvIHdo eSB0byBoYXZlIC5iZHJ2X2Nsb3NlPyBJIHRoaW5rLCB3aGVuDQp3ZSBwdWJsaXNoIHRoaXMgZmls dGVyIG1vc3Qgb2YgX2FkZCgpIGFuZCBfZHJvcCgpIHdpbGwgYmUgcmVmYWN0b3JlZCB0bw0Kb3Bl bigpIGFuZCBjbG9zZSgpLiBJcyB0aGVyZSBhIHJlYWwgcmVhc29uIHRvIGltcGxlbWVudCAuY2xv c2UoKSBub3c/DQoNCj4gDQo+PiArICAgIGJkcnZfZHJhaW5lZF9lbmQoYnMpOw0KPj4gKw0KPj4g KyAgICBpZiAocy0+dGFyZ2V0KSB7DQo+PiArICAgICAgICBiZHJ2X3VucmVmX2NoaWxkKGJzLCBz LT50YXJnZXQpOw0KPiANCj4gQW5kIHRoaXMuICBXZWxsLCBuZWl0aGVyIG5lZWRzIHRvIGJlIGlu IGEgLmJkcnZfY2xvc2UoKSBpbXBsZW1lbnRhdGlvbiwNCj4gYWN0dWFsbHksIGJlY2F1c2UgYmRy dl9jbG9zZSgpIHdpbGwganVzdCBkbyBpdCBieSBpdHNlbGYuDQo+IA0KPiBJIHN1cHBvc2UgeW91 4oCZcmUgdHJ5aW5nIHRvIHJlbW92ZSB0aGUgY2hpbGRyZW4gc28gdGhlIG5vZGUgaXMgbm8gbG9u Z2VyDQo+IHVzYWJsZSBhZnRlciB0aGlzIHBvaW50OyBidXQgdGhhdCBpc27igJl0IHF1aXRlIHJp Z2h0LCB0aGVuLiAgVGhlIGZpbHRlcg0KPiBmdW5jdGlvbnMgc3RpbGwgcmVmZXIgdG8gcy0+dGFy Z2V0IGFuZCBicy0+YmFja2luZywgc28geW91IG5lZWQgdG8gc3RvcA0KPiB0aGVtIGZyb20gZG9p bmcgYW55dGhpbmcgdGhlbi4NCj4gDQo+IEF0IHRoaXMgcG9pbnQsIHlvdSBtaWdodCBhcyB3ZWxs IGFkZCBhIHZhcmlhYmxlIHRvIEJEUlZCYWNrdXBUb3BTdGF0ZQ0KPiB0aGF0IHNheXMgd2hldGhl ciB0aGUgZmlsdGVyIGlzIHN0aWxsIHN1cHBvc2VkIHRvIGJlIHVzYWJsZSAobGlrZSB0aGUNCj4g 4oCcc3RvcOKAnSB2YXJpYWJsZSBJIGFkZGVkIHRvIG1pcnJvciBpbiDigJxibG9jay9taXJyb3I6 IEZpeCBjaGlsZA0KPiBwZXJtaXNzaW9uc+KAnSkuICBJZiBzbywgdGhlIHBlcm1pc3Npb24gZnVu Y3Rpb24gc2hvdWxkIHNpZ25hbCAwL0FMTCBmb3INCj4gdGhlIHBlcm1pc3Npb25zIG9uIGJhY2tp bmcgKGFuZCBwcm9iYWJseSB0YXJnZXQpLCBhbmQgYWxsIGZpbHRlcg0KPiBmdW5jdGlvbnMgYWx3 YXlzIGltbWVkaWF0ZWx5IHJldHVybiBhbiBlcnJvci4NCj4gDQo+IFNvIEkgZG9u4oCZdCB0aGlu ayBiYWNraW5nIGFuZCB0YXJnZXQgbmVlZCB0byBiZSByZW1vdmVkIGhlcmUuICBXZSBjYW4NCj4g d2FpdCBmb3IgdGhhdCB1bnRpbCBiZHJ2X2Nsb3NlKCksIGJ1dCB3ZSBzaG91bGQgZW5zdXJlIHRo YXQgdGhlIGZpbHRlcg0KPiByZWFsbHkgaXMgdW51c2FibGUgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBo YXMgYmVlbiBjYWxsZWQuDQoNCk9rLCB0aGFuayB5b3UgZm9yIHJldmlld2luZyENCg0KPiANCj4g TWF4DQo+IA0KPj4gKyAgICB9DQo+PiArICAgIGJkcnZfdW5yZWYoYnMpOw0KPj4gKw0KPj4gKyAg ICBhaW9fY29udGV4dF9yZWxlYXNlKGFpb19jb250ZXh0KTsNCj4+ICt9DQo+PiBkaWZmIC0tZ2l0 IGEvYmxvY2svTWFrZWZpbGUub2JqcyBiL2Jsb2NrL01ha2VmaWxlLm9ianMNCj4+IGluZGV4IGFl MTE2MDVjOWYuLmRmYmRmZTZhYjQgMTAwNjQ0DQo+PiAtLS0gYS9ibG9jay9NYWtlZmlsZS5vYmpz DQo+PiArKysgYi9ibG9jay9NYWtlZmlsZS5vYmpzDQo+PiBAQCAtNDAsNiArNDAsOCBAQCBibG9j ay1vYmoteSArPSB0aHJvdHRsZS5vIGNvcHktb24tcmVhZC5vDQo+PiAgIA0KPj4gICBibG9jay1v YmoteSArPSBjcnlwdG8ubw0KPj4gICANCj4+ICtibG9jay1vYmoteSArPSBiYWNrdXAtdG9wLm8N Cj4+ICsNCj4+ICAgY29tbW9uLW9iai15ICs9IHN0cmVhbS5vDQo+PiAgIA0KPj4gICBuZnMuby1s aWJzICAgICAgICAgOj0gJChMSUJORlNfTElCUykNCj4+DQo+IA0KPiANCg0KDQotLSANCkJlc3Qg cmVnYXJkcywNClZsYWRpbWlyDQo=