From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 4D223A052A; Mon, 25 Jan 2021 11:17:11 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C4DE5140E8E; Mon, 25 Jan 2021 11:17:10 +0100 (CET) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by mails.dpdk.org (Postfix) with ESMTP id 2B49E140E82 for ; Mon, 25 Jan 2021 11:17:08 +0100 (CET) IronPort-SDR: /MLRaUyeyJLUWBJvrc25UUPgUMcjNFEpeY0Zm2VHU9lqyVlb749JwP5X5xGwm62KmS/RTLzzpP /pfAbXVRR38g== X-IronPort-AV: E=McAfee;i="6000,8403,9874"; a="264525448" X-IronPort-AV: E=Sophos;i="5.79,373,1602572400"; d="scan'208";a="264525448" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Jan 2021 02:17:07 -0800 IronPort-SDR: n5Sb/kPFrw13/Yg1wZearD+W+f3oKLZWuPcwP1hdMHsfmnuBACb8ZpprqsZdag94HCZ3dogRRZ O9u9vv8ry9QA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.79,373,1602572400"; d="scan'208";a="472007744" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by fmsmga001.fm.intel.com with ESMTP; 25 Jan 2021 02:17:07 -0800 Received: from orsmsx607.amr.corp.intel.com (10.22.229.20) by ORSMSX602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2; Mon, 25 Jan 2021 02:17:06 -0800 Received: from orsmsx602.amr.corp.intel.com (10.22.229.15) by ORSMSX607.amr.corp.intel.com (10.22.229.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 25 Jan 2021 02:17:06 -0800 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2 via Frontend Transport; Mon, 25 Jan 2021 02:17:06 -0800 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.103) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.1713.5; Mon, 25 Jan 2021 02:17:03 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iYiLGk1hy+MqSomEx/4VXNzs0JkvEoMveFzPWwT62o2y3rdzge24YS+SKWu2TFOulVn+H7iEXe4LtGL8YHcNUSckDz23Qz1OknNfAzHfnbQe7a8tAZ5w1NYNqNq+lRiQAdbVsN6/m02vYhXIa7YGCwlQPFgHt6Ng5+U8pRtVYJZRUKWxl5DK6O/VE16nSFE1DDgXC/VdtPQyvO1NyQc3UYLei46DI8fGJKjVdePFdJ8VHF7tkKNRw3ZSo3mfcdvgFgZOlaj/1ZJiIFpgr8YC1SbPJML8475eoIEuQH5VuYSoUusoHq+u8b/SH2/3jJZWKXkd75sqTlTJ5FcZZ3GthA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=T9NaFr4+JJ1Fkz5ny5AyQNGs2HZLpF97ZHixDqVXxBQ=; b=geyoxmh2Uykl2awbkzMaDJP8ObFBuTLkno3e8Nd5N78f7/nuIk+6wHMSqEEdJcaIDK3kWGQHa0VW6jAHlgxAtN45GnpViXUuFCdw0KgbV0Or+4sdrAWIAAtjN8gHpQr7/rF94t+s4yCEapUJfnhJS5X3JvwmZVWMSLVTHyPupd6JJk9MhrF9rqRlxnEtG2UAVK9eOx7BYjaA2qapjkKiTq8260RpB7FHv1rVzwctojMiQnV5vrDyjY1Ju4k1z+jnQUgdduyL5stoZ99BF9Os17vf17WjYbC7EwrGH7AfDeSAi7zqnfITv8EuCllX/lAW23r5+yq6RgFWuCnf8CCIQg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=T9NaFr4+JJ1Fkz5ny5AyQNGs2HZLpF97ZHixDqVXxBQ=; b=CGumGlnEZsxUZdiL/3OZrXCttJUq/wjNU4DZp3nhAlboQaT5NoSWTx2lTGbMNwe2P2qZtC3ZKXi0ao7VuKlVqL+rv4kxrNmwNt36XlC7Nc+Gl9wUMtL9/4UFkv8DrLgIH7Nu10ee3HTCnst7vUHwMNd6dl0YCFXHFjVuNrhaLhA= Received: from BYAPR11MB3301.namprd11.prod.outlook.com (2603:10b6:a03:7f::26) by BYAPR11MB3254.namprd11.prod.outlook.com (2603:10b6:a03:7c::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3763.10; Mon, 25 Jan 2021 10:17:01 +0000 Received: from BYAPR11MB3301.namprd11.prod.outlook.com ([fe80::1152:1426:8a4f:c755]) by BYAPR11MB3301.namprd11.prod.outlook.com ([fe80::1152:1426:8a4f:c755%4]) with mapi id 15.20.3784.017; Mon, 25 Jan 2021 10:17:01 +0000 From: "Ananyev, Konstantin" To: Feifei Wang , Honnappa Nagarahalli CC: "dev@dpdk.org" , nd , nd Thread-Topic: [PATCH v1 3/3] ring: rename and refactor ring library Thread-Index: AQHW14qBH2SQ6bbJJ0qiJgdUKwT3YqozzsbwgAMWaACAAXDRsA== Date: Mon, 25 Jan 2021 10:17:01 +0000 Message-ID: References: <20201221111359.22013-1-feifei.wang2@arm.com> <20201221111359.22013-4-feifei.wang2@arm.com> In-Reply-To: Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.5.1.3 authentication-results: arm.com; dkim=none (message not signed) header.d=none;arm.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [46.7.39.127] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 8862b1f7-0553-44ae-bd4c-08d8c11a5b58 x-ms-traffictypediagnostic: BYAPR11MB3254: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: HQu94//ZQUyA8JQCvcHotnhqHnS/SDa8W7VZ06WYfU86ZlvidAaW/Jg63uYZjX5pbc0AOAkGgoMXVysa5l1VcDIVqeni3d7c0Rw/OOoD5b3F7P2GwNeni6Jtxatb+evtvWweTMxMl51KiGSfAjhyJN2IsJ/ad7OOtlpBF16e3WYbwawMJr8hMu2QMLJzZmE4+iShrn1Wq8Nw+5m4smM6IGqO36pnMj7cnzE2CZychgRlEptQKJnTHq8b6oBxtYuy685AehqoY+QLaPP4sb6VJRNPz1rN9XntwtZQTFrWohn2eGIlT+L5aWr2FqGKd+xY7aVT7PYRrOKjfAgundm1NoinpVvfHK3kEso+dva+lc+JE6K0DXgD+kUscRgWEY4vuzodTXYhK2w45cPIATIAGmjiKeh3u8t5qP+9l8q50kV3L5CiP5IFIX58H/ccMHDIfCrs71jCiSP+tCmj1nyMDQ== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR11MB3301.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(396003)(366004)(376002)(346002)(136003)(39860400002)(26005)(186003)(7696005)(66446008)(66476007)(64756008)(52536014)(5660300002)(2906002)(478600001)(6506007)(66946007)(55016002)(8936002)(9686003)(86362001)(4326008)(966005)(66556008)(54906003)(71200400001)(8676002)(316002)(110136005)(33656002)(30864003)(83380400001)(76116006)(579004)(559001); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata: =?utf-8?B?bHlFTnArWlNGNzVWeG00OFBqdWgvLzlEeEJzTkFDZ2xTcEx1cHJIRHpnQXBV?= =?utf-8?B?NURzdDJQVWwvbGEzajJXd1ZWR0Y4NUw0ZmpEUWZuMjN0T01HbWQxZmREOUs1?= =?utf-8?B?M243di83YVZHaGhZU2pRZnltSXFwb2dnTnlDMjNjZ1lKUU5Vek9QRnhEdHZQ?= =?utf-8?B?d05sTlMvSnJYbTNwT2FVOXFSYWplWmZWNDdaT3ExL0FoV1lZdGN4R3I5aitT?= =?utf-8?B?eCtua3lNU0dkUXhRQi83dEV6SDVMWlRRYXR3QXB2YjRFaXRDYy95NTRFVGo2?= =?utf-8?B?UzdwM2VvRkh6RTVYSjRWK0QxNEVPYUNIeEx0RmRtbXlXbTFvWEFuY1IwYlFE?= =?utf-8?B?UjhieVNXRDUzakhLOG93Y3E5TlArQ01kbDJrOE9HVENubGxsRmcyMTBiZnFl?= =?utf-8?B?NldFTG55cytDTlFlcjNMc2xHUnhPR21hTXdVS3FBTlFhcXFiZXhKdDBjbTZT?= =?utf-8?B?VXkvTlFFMUt2ck9pd05VaXFKU05mTWVBT0tjMGx6R3pGMjQxRVd3UHNjNVBP?= =?utf-8?B?cS9jN2dmL3Nvb2laUGthNVlGMUpORVBnUmJQclVjTHcxZWNiMFVZQ3Q0UWts?= =?utf-8?B?NzhxZ0U0T2hRdkxqenk5cElBdldudnI0UmxWWDhUSWJKQkJJOXNjSHdJcFkx?= =?utf-8?B?enZZcFlGb21FWk9mcXpRbnBaRXcvL05oS01vZmlHbThqTHhUSElsbHl2N3pQ?= =?utf-8?B?SzZ1TmY4d29FMXZ5KytlN3BJcjNNNjUxUjdvdjhnb3J6TDMzVkhkOXltd2JO?= =?utf-8?B?Ym9tY2UxbzZSTENQM3NpMEZLWTdUc1R2OUsxdlNPQkNvWkM3bVdUOThrY1pi?= =?utf-8?B?WkJrb1NjWVBscUMxMlM5djB3VHN6SWhOQWExN3pMVkZEWVNRQ2IzTER4N1V4?= =?utf-8?B?ZldHS2tQcDRtSnlWRll3T29XZGhhZ2xrd21QeVRvd2ZJUm9uL2RXRVBqMHRV?= =?utf-8?B?b1BjNUpQRzdCOGVqSm1jWkFuUy9URnFaMENjSk96YThuT3NNdUVZVjRCMjB1?= =?utf-8?B?UWplMGJJQmdjcVhRZmxwWTlwSVA4UGI3NTlwbk9xN3pwRFp3OEVSeTdJOWNv?= =?utf-8?B?UitkWmxFUWVhZWU4RjJwWXFjaDlsQ0ExM0RZY1BzcU1PWDNnUTEyaXhRRFNm?= =?utf-8?B?eTNUVkx2SC9iWkZuSlFMOUVHbzM4MjhjUTBEb2taM2U2S08wTGJ4Vkc5WTdp?= =?utf-8?B?NEpMWmN5OFhOZWNnZEh0VzBtRmlIMlBlOU42RVYzQlEyQi9sTlJSMWMwWExy?= =?utf-8?B?UE1XK1pzMGExcUl5QStYeGRMcUI3cmlGUkNQTGZ1TUpIaUpYaEg0SFQzYUV1?= =?utf-8?B?Kzhkd3djSXRuTVF5a20xaVkzQllnM1Fjc3U3NGt6WDRoSElWZDlkYkl6V3V0?= =?utf-8?Q?8MTUK6A03kQCkq/u/j/YPyNcRVCo012I=3D?= x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BYAPR11MB3301.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8862b1f7-0553-44ae-bd4c-08d8c11a5b58 X-MS-Exchange-CrossTenant-originalarrivaltime: 25 Jan 2021 10:17:01.6988 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: +pEJz1PKLDLs8SSWIw6DZyo0hEEKOhWPT7HVUMXUT4vHWJ5JLXA5eHGnbrXTjTtVqKDh16S2l7bEDDbiy4BsQYl4IeisRlQELN8lPxtZui4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR11MB3254 X-OriginatorOrg: intel.com Subject: Re: [dpdk-dev] [PATCH v1 3/3] ring: rename and refactor ring library X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" DQoNCkhpIEZlaWZlaSwNCg0KPiA+ID4gRm9yIGxlZ2FjeSBtb2RlcywgcmVuYW1lIHJpbmdfZ2Vu ZXJpYy9jMTEgdG8gcmluZ19nZW5lcmljL2MxMV9wdnQuDQo+ID4gPiBGdXJ0aGVybW9yZSwgYWRk IG5ldyBmaWxlIHJpbmdfZWxlbV9wdnQuaCB3aGljaCBpbmNsdWRlcw0KPiA+ID4gcmluZ19kb19l cS9kZXEgYW5kIHJpbmcgZWxlbWVudCBjb3B5L2RlbGV0ZSBBUElzLg0KPiA+ID4NCj4gPiA+IEZv ciBvdGhlciBtb2RlcywgcmVuYW1lIHh4X2MxMV9tZW0gdG8geHhfZWxlbV9wdnQuIE1vdmUgYWxs IHByaXZhdGUNCj4gPiA+IEFQSXMgaW50byB0aGVzZSBuZXcgaGVhZGVyIGZpbGVzLg0KPiA+ID4N Cj4gPiA+IFN1Z2dlc3RlZC1ieTogSG9ubmFwcGEgTmFnYXJhaGFsbGkgPEhvbm5hcHBhLk5hZ2Fy YWhhbGxpQGFybS5jb20+DQo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBGZWlmZWkgV2FuZyA8ZmVpZmVp LndhbmcyQGFybS5jb20+DQo+ID4gPiBSZXZpZXdlZC1ieTogSG9ubmFwcGEgTmFnYXJhaGFsbGkg PEhvbm5hcHBhLk5hZ2FyYWhhbGxpQGFybS5jb20+DQo+ID4gPiBSZXZpZXdlZC1ieTogUnVpZmVu ZyBXYW5nIDxydWlmZW5nLndhbmdAYXJtLmNvbT4NCj4gPiA+IC0tLQ0KPiA+ID4gIGxpYi9saWJy dGVfcmluZy9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICB8ICAxNSArLQ0KPiA+ID4gIC4u Li97cnRlX3JpbmdfYzExX21lbS5oID0+IHJpbmdfYzExX3B2dC5ofSAgICB8ICAgOSArLQ0KPiA+ ID4gIGxpYi9saWJydGVfcmluZy9yaW5nX2VsZW1fcHZ0LmggICAgICAgICAgICAgICB8IDM4NSAr KysrKysrKysrKysrKysrKysNCj4gPiA+ICAuLi57cnRlX3JpbmdfZ2VuZXJpYy5oID0+IHJpbmdf Z2VuZXJpY19wdnQuaH0gfCAgIDYgKy0NCj4gPiA+ICAuLi5yaW5nX2h0c19jMTFfbWVtLmggPT4g cmluZ19odHNfZWxlbV9wdnQuaH0gfCAgODggKysrLQ0KPiA+ID4gLi4ubmdfcGVla19jMTFfbWVt LmggPT4gcmluZ19wZWVrX2VsZW1fcHZ0Lmh9IHwgIDc1ICsrKy0NCj4gPiA+IC4uLnJpbmdfcnRz X2MxMV9tZW0uaCA9PiByaW5nX3J0c19lbGVtX3B2dC5ofSB8ICA4OCArKystDQo+ID4gPiAgbGli L2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX2VsZW0uaCAgICAgICAgICAgICAgIHwgMzc0ICstLS0tLS0t LS0tLS0tLS0tDQo+ID4gPiAgbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX2h0cy5oICAgICAgICAg ICAgICAgIHwgIDg0ICstLS0NCj4gPiA+ICBsaWIvbGlicnRlX3JpbmcvcnRlX3JpbmdfcGVlay5o ICAgICAgICAgICAgICAgfCAgNzEgKy0tLQ0KPiA+ID4gIGxpYi9saWJydGVfcmluZy9ydGVfcmlu Z19wZWVrX3pjLmggICAgICAgICAgICB8ICAgMiArLQ0KPiA+ID4gIGxpYi9saWJydGVfcmluZy9y dGVfcmluZ19ydHMuaCAgICAgICAgICAgICAgICB8ICA4NCArLS0tDQo+ID4gPiAgMTIgZmlsZXMg Y2hhbmdlZCwgNjQ2IGluc2VydGlvbnMoKyksIDYzNSBkZWxldGlvbnMoLSkgIHJlbmFtZQ0KPiA+ ID4gbGliL2xpYnJ0ZV9yaW5nL3tydGVfcmluZ19jMTFfbWVtLmggPT4gcmluZ19jMTFfcHZ0Lmh9 ICg5NiUpICBjcmVhdGUNCj4gPiA+IG1vZGUgMTAwNjQ0IGxpYi9saWJydGVfcmluZy9yaW5nX2Vs ZW1fcHZ0LmggIHJlbmFtZQ0KPiA+ID4gbGliL2xpYnJ0ZV9yaW5nL3tydGVfcmluZ19nZW5lcmlj LmggPT4gcmluZ19nZW5lcmljX3B2dC5ofSAoOTglKQ0KPiA+ID4gcmVuYW1lIGxpYi9saWJydGVf cmluZy97cnRlX3JpbmdfaHRzX2MxMV9tZW0uaCA9PiByaW5nX2h0c19lbGVtX3B2dC5ofQ0KPiA+ ID4gKDYwJSkgIHJlbmFtZSBsaWIvbGlicnRlX3Jpbmcve3J0ZV9yaW5nX3BlZWtfYzExX21lbS5o ID0+DQo+ID4gPiByaW5nX3BlZWtfZWxlbV9wdnQuaH0gKDYyJSkgIHJlbmFtZQ0KPiA+ID4gbGli L2xpYnJ0ZV9yaW5nL3tydGVfcmluZ19ydHNfYzExX21lbS5oID0+IHJpbmdfcnRzX2VsZW1fcHZ0 Lmh9ICg2MiUpDQo+ID4gPg0KPiA+DQo+ID4gU29ycnksIGJ1dCBJIGRvbid0IHVuZGVyc3RhbmQg dGhlIHB1cnBvc2Ugb2YgdGhhdCBwYXRjaC4NCj4gPiBBcyBJIHJlbWVtYmVyIGJ5IERQREsgbmFt aW5nIGNvbnZlbnRpb24gYWxsIGluc3RhbGxhYmxlIGhlYWRlcnMgc2hvdWxkDQo+ID4gaGF2ZSAn cnRlXycgcHJlZml4LiBTYW1lIGZvciBwdWJsaWMgZGVmaW5lcyAoUlRFXykuDQo+ID4gV2h5IHRv IGFiYW5kb24gaXQgaGVyZT8NCj4gDQo+IFRoaXMgY2hhbmdlIHJlZmVycyB0byB5b3UgYW5kIEhv bm5hcHBhJ3MgZGlzY3Vzc2lvbiBhYm91dCByaW5nOg0KPiBodHRwczovL21haWxzLmRwZGsub3Jn L2FyY2hpdmVzL2Rldi8yMDIwLU1heS8xNjY4MDMuaHRtbA0KPiANCj4gQW5kIGl0IGlzIHRvIHNl cGFyYXRlIHRoZSBleHRlcm5hbCBBUElzIHRoYXQgY2FuIGJlIGNhbGxlZCBieSB1c2VycywNCj4g ZnJvbSBpbnRlcm5hbCBBUElzIHRoYXQgY2Fubm90IGJlIGNhbGxlZCBieSB1c2Vycy4NCj4gVGhl IGludGVybmFsIGZ1bmN0aW9ucyBhcmUgaW5jbHVkZWQgaW4gdGhlIGZpbGVzIHdpdGggeHhfcHZ0 LmguDQoNCkV2ZW4gdGhlc2UgeHhfcHZ0LmggZmlsZXMgY29udGFpbiBpbnRlcm5hbCBBUEkgYW5k IG5vdCBzdXBwb3NlZCB0byBiZSBpbmNsdWRlZCBkaXJlY3RseSwNCnRoZXkgaGF2ZSB0byBiZSBp bnN0YWxsZWQgaW50byBwdWJsaWMgZGlyICg8ZHBkay1pbnN0YWxsLWRpci9pbmNsdWRlKS4NClNv IEkgdGhpbmsgd2UgbmVlZCB0byBrZWVwIERQREsgcHVibGljIHByZWZpeGVzIGZvciB0aGVtIChh bmQgaW5zaWRlIHRoZW0pOg0KcnRlX3h4X3B2dC5oIChfUlRFXykuIA0KDQpLb25zdGFudGluDQoN Cj4gDQo+IEJlc3QgUmVnYXJkcw0KPiBGZWlmZWkNCj4gPg0KPiA+ID4gZGlmZiAtLWdpdCBhL2xp Yi9saWJydGVfcmluZy9tZXNvbi5idWlsZCBiL2xpYi9saWJydGVfcmluZy9tZXNvbi5idWlsZA0K PiA+ID4gaW5kZXggMzZmZGNiNmE1Li45OGVhYzU4MTAgMTAwNjQ0DQo+ID4gPiAtLS0gYS9saWIv bGlicnRlX3JpbmcvbWVzb24uYnVpbGQNCj4gPiA+ICsrKyBiL2xpYi9saWJydGVfcmluZy9tZXNv bi5idWlsZA0KPiA+ID4gQEAgLTIsMTUgKzIsMTYgQEANCj4gPiA+ICAjIENvcHlyaWdodChjKSAy MDE3IEludGVsIENvcnBvcmF0aW9uDQo+ID4gPg0KPiA+ID4gIHNvdXJjZXMgPSBmaWxlcygncnRl X3JpbmcuYycpDQo+ID4gPiAtaGVhZGVycyA9IGZpbGVzKCdydGVfcmluZy5oJywNCj4gPiA+ICto ZWFkZXJzID0gZmlsZXMoJ3JpbmdfYzExX3B2dC5oJywNCj4gPiA+ICsJCSdyaW5nX2VsZW1fcHZ0 LmgnLA0KPiA+ID4gKwkJJ3JpbmdfZ2VuZXJpY19wdnQuaCcsDQo+ID4gPiArCQkncmluZ19odHNf ZWxlbV9wdnQuaCcsDQo+ID4gPiArCQkncmluZ19wZWVrX2VsZW1fcHZ0LmgnLA0KPiA+ID4gKwkJ J3JpbmdfcnRzX2VsZW1fcHZ0LmgnLA0KPiA+ID4gKwkJJ3J0ZV9yaW5nLmgnLA0KPiA+ID4gIAkJ J3J0ZV9yaW5nX2NvcmUuaCcsDQo+ID4gPiAgCQkncnRlX3JpbmdfZWxlbS5oJywNCj4gPiA+IC0J CSdydGVfcmluZ19jMTFfbWVtLmgnLA0KPiA+ID4gLQkJJ3J0ZV9yaW5nX2dlbmVyaWMuaCcsDQo+ ID4gPiAgCQkncnRlX3JpbmdfaHRzLmgnLA0KPiA+ID4gLQkJJ3J0ZV9yaW5nX2h0c19jMTFfbWVt LmgnLA0KPiA+ID4gIAkJJ3J0ZV9yaW5nX3BlZWsuaCcsDQo+ID4gPiAtCQkncnRlX3JpbmdfcGVl a19jMTFfbWVtLmgnLA0KPiA+ID4gIAkJJ3J0ZV9yaW5nX3BlZWtfemMuaCcsDQo+ID4gPiAtCQkn cnRlX3JpbmdfcnRzLmgnLA0KPiA+ID4gLQkJJ3J0ZV9yaW5nX3J0c19jMTFfbWVtLmgnKQ0KPiA+ ID4gKwkJJ3J0ZV9yaW5nX3J0cy5oJykNCj4gPiA+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX3Jp bmcvcnRlX3JpbmdfYzExX21lbS5oDQo+ID4gPiBiL2xpYi9saWJydGVfcmluZy9yaW5nX2MxMV9w dnQuaCBzaW1pbGFyaXR5IGluZGV4IDk2JSByZW5hbWUgZnJvbQ0KPiA+ID4gbGliL2xpYnJ0ZV9y aW5nL3J0ZV9yaW5nX2MxMV9tZW0uaA0KPiA+ID4gcmVuYW1lIHRvIGxpYi9saWJydGVfcmluZy9y aW5nX2MxMV9wdnQuaCBpbmRleCA3ZjVlYmEyNjIuLjlmMmY1MzE4Zg0KPiA+ID4gMTAwNjQ0DQo+ ID4gPiAtLS0gYS9saWIvbGlicnRlX3JpbmcvcnRlX3JpbmdfYzExX21lbS5oDQo+ID4gPiArKysg Yi9saWIvbGlicnRlX3JpbmcvcmluZ19jMTFfcHZ0LmgNCj4gPiA+IEBAIC03LDggKzcsOCBAQA0K PiA+ID4gICAqIFVzZWQgYXMgQlNELTMgTGljZW5zZWQgd2l0aCBwZXJtaXNzaW9uIGZyb20gS2lw IE1hY3kuDQo+ID4gPiAgICovDQo+ID4gPg0KPiA+ID4gLSNpZm5kZWYgX1JURV9SSU5HX0MxMV9N RU1fSF8NCj4gPiA+IC0jZGVmaW5lIF9SVEVfUklOR19DMTFfTUVNX0hfDQo+ID4gPiArI2lmbmRl ZiBfUklOR19DMTFfUFZUX0hfDQo+ID4gPiArI2RlZmluZSBfUklOR19DMTFfUFZUX0hfDQo+ID4g Pg0KPiA+ID4gIHN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQNCj4gPiA+ICBfX3J0ZV9y aW5nX3VwZGF0ZV90YWlsKHN0cnVjdCBydGVfcmluZ19oZWFkdGFpbCAqaHQsIHVpbnQzMl90DQo+ ID4gPiBvbGRfdmFsLCBAQCAtNjksOSArNjksNiBAQCBfX3J0ZV9yaW5nX21vdmVfcHJvZF9oZWFk KHN0cnVjdCBydGVfcmluZw0KPiA+ICpyLCB1bnNpZ25lZCBpbnQgaXNfc3AsDQo+ID4gPiAgCQkv KiBFbnN1cmUgdGhlIGhlYWQgaXMgcmVhZCBiZWZvcmUgdGFpbCAqLw0KPiA+ID4gIAkJX19hdG9t aWNfdGhyZWFkX2ZlbmNlKF9fQVRPTUlDX0FDUVVJUkUpOw0KPiA+ID4NCj4gPiA+IC0JCS8qIGxv YWQtYWNxdWlyZSBzeW5jaHJvbml6ZSB3aXRoIHN0b3JlLXJlbGVhc2Ugb2YgaHQtPnRhaWwNCj4g PiA+IC0JCSAqIGluIHVwZGF0ZV90YWlsLg0KPiA+ID4gLQkJICovDQo+ID4gPiAgCQljb25zX3Rh aWwgPSBfX2F0b21pY19sb2FkX24oJnItPmNvbnMudGFpbCwNCj4gPiA+ICAJCQkJCV9fQVRPTUlD X0FDUVVJUkUpOw0KPiA+ID4NCj4gPiA+IEBAIC0xNzgsNCArMTc1LDQgQEAgX19ydGVfcmluZ19t b3ZlX2NvbnNfaGVhZChzdHJ1Y3QgcnRlX3JpbmcgKnIsIGludA0KPiA+IGlzX3NjLA0KPiA+ID4g IAlyZXR1cm4gbjsNCj4gPiA+ICB9DQo+ID4gPg0KPiA+ID4gLSNlbmRpZiAvKiBfUlRFX1JJTkdf QzExX01FTV9IXyAqLw0KPiA+ID4gKyNlbmRpZiAvKiBfUklOR19DMTFfUFZUX0hfICovDQo+ID4g PiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9yaW5nL3JpbmdfZWxlbV9wdnQuaA0KPiA+ID4gYi9s aWIvbGlicnRlX3JpbmcvcmluZ19lbGVtX3B2dC5oIG5ldyBmaWxlIG1vZGUgMTAwNjQ0IGluZGV4 DQo+ID4gPiAwMDAwMDAwMDAuLjgwMDNlNWVkYw0KPiA+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ID4g KysrIGIvbGliL2xpYnJ0ZV9yaW5nL3JpbmdfZWxlbV9wdnQuaA0KPiA+ID4gQEAgLTAsMCArMSwz ODUgQEANCj4gPiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+ ID4gPiArICoNCj4gPiA+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTcsMjAxOCBIWFQtc2VtaXRlY2gg Q29ycG9yYXRpb24uDQo+ID4gPiArICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgS2lwIE1hY3kg a21hY3lAZnJlZWJzZC5vcmcNCj4gPiA+ICsgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiA+ID4g KyAqIERlcml2ZWQgZnJvbSBGcmVlQlNEJ3MgYnVmcmluZy5oDQo+ID4gPiArICogVXNlZCBhcyBC U0QtMyBMaWNlbnNlZCB3aXRoIHBlcm1pc3Npb24gZnJvbSBLaXAgTWFjeS4NCj4gPiA+ICsgKi8N Cj4gPiA+ICsNCj4gPiA+ICsjaWZuZGVmIF9SSU5HX0VMRU1fUFZUX0hfDQo+ID4gPiArI2RlZmlu ZSBfUklOR19FTEVNX1BWVF9IXw0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNf aW5saW5lIHZvaWQNCj4gPiA+ICtfX3J0ZV9yaW5nX2VucXVldWVfZWxlbXNfMzIoc3RydWN0IHJ0 ZV9yaW5nICpyLCBjb25zdCB1aW50MzJfdCBzaXplLA0KPiA+ID4gKwkJdWludDMyX3QgaWR4LCBj b25zdCB2b2lkICpvYmpfdGFibGUsIHVpbnQzMl90IG4pIHsNCj4gPiA+ICsJdW5zaWduZWQgaW50 IGk7DQo+ID4gPiArCXVpbnQzMl90ICpyaW5nID0gKHVpbnQzMl90ICopJnJbMV07DQo+ID4gPiAr CWNvbnN0IHVpbnQzMl90ICpvYmogPSAoY29uc3QgdWludDMyX3QgKilvYmpfdGFibGU7DQo+ID4g PiArCWlmIChsaWtlbHkoaWR4ICsgbiA8IHNpemUpKSB7DQo+ID4gPiArCQlmb3IgKGkgPSAwOyBp IDwgKG4gJiB+MHg3KTsgaSArPSA4LCBpZHggKz0gOCkgew0KPiA+ID4gKwkJCXJpbmdbaWR4XSA9 IG9ialtpXTsNCj4gPiA+ICsJCQlyaW5nW2lkeCArIDFdID0gb2JqW2kgKyAxXTsNCj4gPiA+ICsJ CQlyaW5nW2lkeCArIDJdID0gb2JqW2kgKyAyXTsNCj4gPiA+ICsJCQlyaW5nW2lkeCArIDNdID0g b2JqW2kgKyAzXTsNCj4gPiA+ICsJCQlyaW5nW2lkeCArIDRdID0gb2JqW2kgKyA0XTsNCj4gPiA+ ICsJCQlyaW5nW2lkeCArIDVdID0gb2JqW2kgKyA1XTsNCj4gPiA+ICsJCQlyaW5nW2lkeCArIDZd ID0gb2JqW2kgKyA2XTsNCj4gPiA+ICsJCQlyaW5nW2lkeCArIDddID0gb2JqW2kgKyA3XTsNCj4g PiA+ICsJCX0NCj4gPiA+ICsJCXN3aXRjaCAobiAmIDB4Nykgew0KPiA+ID4gKwkJY2FzZSA3Og0K PiA+ID4gKwkJCXJpbmdbaWR4KytdID0gb2JqW2krK107IC8qIGZhbGx0aHJvdWdoICovDQo+ID4g PiArCQljYXNlIDY6DQo+ID4gPiArCQkJcmluZ1tpZHgrK10gPSBvYmpbaSsrXTsgLyogZmFsbHRo cm91Z2ggKi8NCj4gPiA+ICsJCWNhc2UgNToNCj4gPiA+ICsJCQlyaW5nW2lkeCsrXSA9IG9ialtp KytdOyAvKiBmYWxsdGhyb3VnaCAqLw0KPiA+ID4gKwkJY2FzZSA0Og0KPiA+ID4gKwkJCXJpbmdb aWR4KytdID0gb2JqW2krK107IC8qIGZhbGx0aHJvdWdoICovDQo+ID4gPiArCQljYXNlIDM6DQo+ ID4gPiArCQkJcmluZ1tpZHgrK10gPSBvYmpbaSsrXTsgLyogZmFsbHRocm91Z2ggKi8NCj4gPiA+ ICsJCWNhc2UgMjoNCj4gPiA+ICsJCQlyaW5nW2lkeCsrXSA9IG9ialtpKytdOyAvKiBmYWxsdGhy b3VnaCAqLw0KPiA+ID4gKwkJY2FzZSAxOg0KPiA+ID4gKwkJCXJpbmdbaWR4KytdID0gb2JqW2kr K107IC8qIGZhbGx0aHJvdWdoICovDQo+ID4gPiArCQl9DQo+ID4gPiArCX0gZWxzZSB7DQo+ID4g PiArCQlmb3IgKGkgPSAwOyBpZHggPCBzaXplOyBpKyssIGlkeCsrKQ0KPiA+ID4gKwkJCXJpbmdb aWR4XSA9IG9ialtpXTsNCj4gPiA+ICsJCS8qIFN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgKi8NCj4g PiA+ICsJCWZvciAoaWR4ID0gMDsgaSA8IG47IGkrKywgaWR4KyspDQo+ID4gPiArCQkJcmluZ1tp ZHhdID0gb2JqW2ldOw0KPiA+ID4gKwl9DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRp YyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQNCj4gPiA+ICtfX3J0ZV9yaW5nX2VucXVldWVfZWxl bXNfNjQoc3RydWN0IHJ0ZV9yaW5nICpyLCB1aW50MzJfdCBwcm9kX2hlYWQsDQo+ID4gPiArCQlj b25zdCB2b2lkICpvYmpfdGFibGUsIHVpbnQzMl90IG4pDQo+ID4gPiArew0KPiA+ID4gKwl1bnNp Z25lZCBpbnQgaTsNCj4gPiA+ICsJY29uc3QgdWludDMyX3Qgc2l6ZSA9IHItPnNpemU7DQo+ID4g PiArCXVpbnQzMl90IGlkeCA9IHByb2RfaGVhZCAmIHItPm1hc2s7DQo+ID4gPiArCXVpbnQ2NF90 ICpyaW5nID0gKHVpbnQ2NF90ICopJnJbMV07DQo+ID4gPiArCWNvbnN0IHVuYWxpZ25lZF91aW50 NjRfdCAqb2JqID0gKGNvbnN0IHVuYWxpZ25lZF91aW50NjRfdA0KPiA+ICopb2JqX3RhYmxlOw0K PiA+ID4gKwlpZiAobGlrZWx5KGlkeCArIG4gPCBzaXplKSkgew0KPiA+ID4gKwkJZm9yIChpID0g MDsgaSA8IChuICYgfjB4Myk7IGkgKz0gNCwgaWR4ICs9IDQpIHsNCj4gPiA+ICsJCQlyaW5nW2lk eF0gPSBvYmpbaV07DQo+ID4gPiArCQkJcmluZ1tpZHggKyAxXSA9IG9ialtpICsgMV07DQo+ID4g PiArCQkJcmluZ1tpZHggKyAyXSA9IG9ialtpICsgMl07DQo+ID4gPiArCQkJcmluZ1tpZHggKyAz XSA9IG9ialtpICsgM107DQo+ID4gPiArCQl9DQo+ID4gPiArCQlzd2l0Y2ggKG4gJiAweDMpIHsN Cj4gPiA+ICsJCWNhc2UgMzoNCj4gPiA+ICsJCQlyaW5nW2lkeCsrXSA9IG9ialtpKytdOyAvKiBm YWxsdGhyb3VnaCAqLw0KPiA+ID4gKwkJY2FzZSAyOg0KPiA+ID4gKwkJCXJpbmdbaWR4KytdID0g b2JqW2krK107IC8qIGZhbGx0aHJvdWdoICovDQo+ID4gPiArCQljYXNlIDE6DQo+ID4gPiArCQkJ cmluZ1tpZHgrK10gPSBvYmpbaSsrXTsNCj4gPiA+ICsJCX0NCj4gPiA+ICsJfSBlbHNlIHsNCj4g PiA+ICsJCWZvciAoaSA9IDA7IGlkeCA8IHNpemU7IGkrKywgaWR4KyspDQo+ID4gPiArCQkJcmlu Z1tpZHhdID0gb2JqW2ldOw0KPiA+ID4gKwkJLyogU3RhcnQgYXQgdGhlIGJlZ2lubmluZyAqLw0K PiA+ID4gKwkJZm9yIChpZHggPSAwOyBpIDwgbjsgaSsrLCBpZHgrKykNCj4gPiA+ICsJCQlyaW5n W2lkeF0gPSBvYmpbaV07DQo+ID4gPiArCX0NCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArc3Rh dGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdm9pZA0KPiA+ID4gK19fcnRlX3JpbmdfZW5xdWV1ZV9l bGVtc18xMjgoc3RydWN0IHJ0ZV9yaW5nICpyLCB1aW50MzJfdCBwcm9kX2hlYWQsDQo+ID4gPiAr CQljb25zdCB2b2lkICpvYmpfdGFibGUsIHVpbnQzMl90IG4pDQo+ID4gPiArew0KPiA+ID4gKwl1 bnNpZ25lZCBpbnQgaTsNCj4gPiA+ICsJY29uc3QgdWludDMyX3Qgc2l6ZSA9IHItPnNpemU7DQo+ ID4gPiArCXVpbnQzMl90IGlkeCA9IHByb2RfaGVhZCAmIHItPm1hc2s7DQo+ID4gPiArCXJ0ZV9p bnQxMjhfdCAqcmluZyA9IChydGVfaW50MTI4X3QgKikmclsxXTsNCj4gPiA+ICsJY29uc3QgcnRl X2ludDEyOF90ICpvYmogPSAoY29uc3QgcnRlX2ludDEyOF90ICopb2JqX3RhYmxlOw0KPiA+ID4g KwlpZiAobGlrZWx5KGlkeCArIG4gPCBzaXplKSkgew0KPiA+ID4gKwkJZm9yIChpID0gMDsgaSA8 IChuICYgfjB4MSk7IGkgKz0gMiwgaWR4ICs9IDIpDQo+ID4gPiArCQkJbWVtY3B5KCh2b2lkICop KHJpbmcgKyBpZHgpLA0KPiA+ID4gKwkJCQkoY29uc3Qgdm9pZCAqKShvYmogKyBpKSwgMzIpOw0K PiA+ID4gKwkJc3dpdGNoIChuICYgMHgxKSB7DQo+ID4gPiArCQljYXNlIDE6DQo+ID4gPiArCQkJ bWVtY3B5KCh2b2lkICopKHJpbmcgKyBpZHgpLA0KPiA+ID4gKwkJCQkoY29uc3Qgdm9pZCAqKShv YmogKyBpKSwgMTYpOw0KPiA+ID4gKwkJfQ0KPiA+ID4gKwl9IGVsc2Ugew0KPiA+ID4gKwkJZm9y IChpID0gMDsgaWR4IDwgc2l6ZTsgaSsrLCBpZHgrKykNCj4gPiA+ICsJCQltZW1jcHkoKHZvaWQg KikocmluZyArIGlkeCksDQo+ID4gPiArCQkJCShjb25zdCB2b2lkICopKG9iaiArIGkpLCAxNik7 DQo+ID4gPiArCQkvKiBTdGFydCBhdCB0aGUgYmVnaW5uaW5nICovDQo+ID4gPiArCQlmb3IgKGlk eCA9IDA7IGkgPCBuOyBpKyssIGlkeCsrKQ0KPiA+ID4gKwkJCW1lbWNweSgodm9pZCAqKShyaW5n ICsgaWR4KSwNCj4gPiA+ICsJCQkJKGNvbnN0IHZvaWQgKikob2JqICsgaSksIDE2KTsNCj4gPiA+ ICsJfQ0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsvKiB0aGUgYWN0dWFsIGVucXVldWUgb2Yg ZWxlbWVudHMgb24gdGhlIHJpbmcuDQo+ID4gPiArICogUGxhY2VkIGhlcmUgc2luY2UgaWRlbnRp Y2FsIGNvZGUgbmVlZGVkIGluIGJvdGgNCj4gPiA+ICsgKiBzaW5nbGUgYW5kIG11bHRpIHByb2R1 Y2VyIGVucXVldWUgZnVuY3Rpb25zLg0KPiA+ID4gKyAqLw0KPiA+ID4gK3N0YXRpYyBfX3J0ZV9h bHdheXNfaW5saW5lIHZvaWQNCj4gPiA+ICtfX3J0ZV9yaW5nX2VucXVldWVfZWxlbXMoc3RydWN0 IHJ0ZV9yaW5nICpyLCB1aW50MzJfdCBwcm9kX2hlYWQsDQo+ID4gPiArCQljb25zdCB2b2lkICpv YmpfdGFibGUsIHVpbnQzMl90IGVzaXplLCB1aW50MzJfdCBudW0pIHsNCj4gPiA+ICsJLyogOEIg YW5kIDE2QiBjb3BpZXMgaW1wbGVtZW50ZWQgaW5kaXZpZHVhbGx5IHRvIHJldGFpbg0KPiA+ID4g KwkgKiB0aGUgY3VycmVudCBwZXJmb3JtYW5jZS4NCj4gPiA+ICsJICovDQo+ID4gPiArCWlmIChl c2l6ZSA9PSA4KQ0KPiA+ID4gKwkJX19ydGVfcmluZ19lbnF1ZXVlX2VsZW1zXzY0KHIsIHByb2Rf aGVhZCwgb2JqX3RhYmxlLA0KPiA+IG51bSk7DQo+ID4gPiArCWVsc2UgaWYgKGVzaXplID09IDE2 KQ0KPiA+ID4gKwkJX19ydGVfcmluZ19lbnF1ZXVlX2VsZW1zXzEyOChyLCBwcm9kX2hlYWQsIG9i al90YWJsZSwNCj4gPiBudW0pOw0KPiA+ID4gKwllbHNlIHsNCj4gPiA+ICsJCXVpbnQzMl90IGlk eCwgc2NhbGUsIG5yX2lkeCwgbnJfbnVtLCBucl9zaXplOw0KPiA+ID4gKw0KPiA+ID4gKwkJLyog Tm9ybWFsaXplIHRvIHVpbnQzMl90ICovDQo+ID4gPiArCQlzY2FsZSA9IGVzaXplIC8gc2l6ZW9m KHVpbnQzMl90KTsNCj4gPiA+ICsJCW5yX251bSA9IG51bSAqIHNjYWxlOw0KPiA+ID4gKwkJaWR4 ID0gcHJvZF9oZWFkICYgci0+bWFzazsNCj4gPiA+ICsJCW5yX2lkeCA9IGlkeCAqIHNjYWxlOw0K PiA+ID4gKwkJbnJfc2l6ZSA9IHItPnNpemUgKiBzY2FsZTsNCj4gPiA+ICsJCV9fcnRlX3Jpbmdf ZW5xdWV1ZV9lbGVtc18zMihyLCBucl9zaXplLCBucl9pZHgsDQo+ID4gPiArCQkJCW9ial90YWJs ZSwgbnJfbnVtKTsNCj4gPiA+ICsJfQ0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMg X19ydGVfYWx3YXlzX2lubGluZSB2b2lkDQo+ID4gPiArX19ydGVfcmluZ19kZXF1ZXVlX2VsZW1z XzMyKHN0cnVjdCBydGVfcmluZyAqciwgY29uc3QgdWludDMyX3Qgc2l6ZSwNCj4gPiA+ICsJCXVp bnQzMl90IGlkeCwgdm9pZCAqb2JqX3RhYmxlLCB1aW50MzJfdCBuKSB7DQo+ID4gPiArCXVuc2ln bmVkIGludCBpOw0KPiA+ID4gKwl1aW50MzJfdCAqcmluZyA9ICh1aW50MzJfdCAqKSZyWzFdOw0K PiA+ID4gKwl1aW50MzJfdCAqb2JqID0gKHVpbnQzMl90ICopb2JqX3RhYmxlOw0KPiA+ID4gKwlp ZiAobGlrZWx5KGlkeCArIG4gPCBzaXplKSkgew0KPiA+ID4gKwkJZm9yIChpID0gMDsgaSA8IChu ICYgfjB4Nyk7IGkgKz0gOCwgaWR4ICs9IDgpIHsNCj4gPiA+ICsJCQlvYmpbaV0gPSByaW5nW2lk eF07DQo+ID4gPiArCQkJb2JqW2kgKyAxXSA9IHJpbmdbaWR4ICsgMV07DQo+ID4gPiArCQkJb2Jq W2kgKyAyXSA9IHJpbmdbaWR4ICsgMl07DQo+ID4gPiArCQkJb2JqW2kgKyAzXSA9IHJpbmdbaWR4 ICsgM107DQo+ID4gPiArCQkJb2JqW2kgKyA0XSA9IHJpbmdbaWR4ICsgNF07DQo+ID4gPiArCQkJ b2JqW2kgKyA1XSA9IHJpbmdbaWR4ICsgNV07DQo+ID4gPiArCQkJb2JqW2kgKyA2XSA9IHJpbmdb aWR4ICsgNl07DQo+ID4gPiArCQkJb2JqW2kgKyA3XSA9IHJpbmdbaWR4ICsgN107DQo+ID4gPiAr CQl9DQo+ID4gPiArCQlzd2l0Y2ggKG4gJiAweDcpIHsNCj4gPiA+ICsJCWNhc2UgNzoNCj4gPiA+ ICsJCQlvYmpbaSsrXSA9IHJpbmdbaWR4KytdOyAvKiBmYWxsdGhyb3VnaCAqLw0KPiA+ID4gKwkJ Y2FzZSA2Og0KPiA+ID4gKwkJCW9ialtpKytdID0gcmluZ1tpZHgrK107IC8qIGZhbGx0aHJvdWdo ICovDQo+ID4gPiArCQljYXNlIDU6DQo+ID4gPiArCQkJb2JqW2krK10gPSByaW5nW2lkeCsrXTsg LyogZmFsbHRocm91Z2ggKi8NCj4gPiA+ICsJCWNhc2UgNDoNCj4gPiA+ICsJCQlvYmpbaSsrXSA9 IHJpbmdbaWR4KytdOyAvKiBmYWxsdGhyb3VnaCAqLw0KPiA+ID4gKwkJY2FzZSAzOg0KPiA+ID4g KwkJCW9ialtpKytdID0gcmluZ1tpZHgrK107IC8qIGZhbGx0aHJvdWdoICovDQo+ID4gPiArCQlj YXNlIDI6DQo+ID4gPiArCQkJb2JqW2krK10gPSByaW5nW2lkeCsrXTsgLyogZmFsbHRocm91Z2gg Ki8NCj4gPiA+ICsJCWNhc2UgMToNCj4gPiA+ICsJCQlvYmpbaSsrXSA9IHJpbmdbaWR4KytdOyAv KiBmYWxsdGhyb3VnaCAqLw0KPiA+ID4gKwkJfQ0KPiA+ID4gKwl9IGVsc2Ugew0KPiA+ID4gKwkJ Zm9yIChpID0gMDsgaWR4IDwgc2l6ZTsgaSsrLCBpZHgrKykNCj4gPiA+ICsJCQlvYmpbaV0gPSBy aW5nW2lkeF07DQo+ID4gPiArCQkvKiBTdGFydCBhdCB0aGUgYmVnaW5uaW5nICovDQo+ID4gPiAr CQlmb3IgKGlkeCA9IDA7IGkgPCBuOyBpKyssIGlkeCsrKQ0KPiA+ID4gKwkJCW9ialtpXSA9IHJp bmdbaWR4XTsNCj4gPiA+ICsJfQ0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgX19y dGVfYWx3YXlzX2lubGluZSB2b2lkDQo+ID4gPiArX19ydGVfcmluZ19kZXF1ZXVlX2VsZW1zXzY0 KHN0cnVjdCBydGVfcmluZyAqciwgdWludDMyX3QgcHJvZF9oZWFkLA0KPiA+ID4gKwkJdm9pZCAq b2JqX3RhYmxlLCB1aW50MzJfdCBuKQ0KPiA+ID4gK3sNCj4gPiA+ICsJdW5zaWduZWQgaW50IGk7 DQo+ID4gPiArCWNvbnN0IHVpbnQzMl90IHNpemUgPSByLT5zaXplOw0KPiA+ID4gKwl1aW50MzJf dCBpZHggPSBwcm9kX2hlYWQgJiByLT5tYXNrOw0KPiA+ID4gKwl1aW50NjRfdCAqcmluZyA9ICh1 aW50NjRfdCAqKSZyWzFdOw0KPiA+ID4gKwl1bmFsaWduZWRfdWludDY0X3QgKm9iaiA9ICh1bmFs aWduZWRfdWludDY0X3QgKilvYmpfdGFibGU7DQo+ID4gPiArCWlmIChsaWtlbHkoaWR4ICsgbiA8 IHNpemUpKSB7DQo+ID4gPiArCQlmb3IgKGkgPSAwOyBpIDwgKG4gJiB+MHgzKTsgaSArPSA0LCBp ZHggKz0gNCkgew0KPiA+ID4gKwkJCW9ialtpXSA9IHJpbmdbaWR4XTsNCj4gPiA+ICsJCQlvYmpb aSArIDFdID0gcmluZ1tpZHggKyAxXTsNCj4gPiA+ICsJCQlvYmpbaSArIDJdID0gcmluZ1tpZHgg KyAyXTsNCj4gPiA+ICsJCQlvYmpbaSArIDNdID0gcmluZ1tpZHggKyAzXTsNCj4gPiA+ICsJCX0N Cj4gPiA+ICsJCXN3aXRjaCAobiAmIDB4Mykgew0KPiA+ID4gKwkJY2FzZSAzOg0KPiA+ID4gKwkJ CW9ialtpKytdID0gcmluZ1tpZHgrK107IC8qIGZhbGx0aHJvdWdoICovDQo+ID4gPiArCQljYXNl IDI6DQo+ID4gPiArCQkJb2JqW2krK10gPSByaW5nW2lkeCsrXTsgLyogZmFsbHRocm91Z2ggKi8N Cj4gPiA+ICsJCWNhc2UgMToNCj4gPiA+ICsJCQlvYmpbaSsrXSA9IHJpbmdbaWR4KytdOyAvKiBm YWxsdGhyb3VnaCAqLw0KPiA+ID4gKwkJfQ0KPiA+ID4gKwl9IGVsc2Ugew0KPiA+ID4gKwkJZm9y IChpID0gMDsgaWR4IDwgc2l6ZTsgaSsrLCBpZHgrKykNCj4gPiA+ICsJCQlvYmpbaV0gPSByaW5n W2lkeF07DQo+ID4gPiArCQkvKiBTdGFydCBhdCB0aGUgYmVnaW5uaW5nICovDQo+ID4gPiArCQlm b3IgKGlkeCA9IDA7IGkgPCBuOyBpKyssIGlkeCsrKQ0KPiA+ID4gKwkJCW9ialtpXSA9IHJpbmdb aWR4XTsNCj4gPiA+ICsJfQ0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgX19ydGVf YWx3YXlzX2lubGluZSB2b2lkDQo+ID4gPiArX19ydGVfcmluZ19kZXF1ZXVlX2VsZW1zXzEyOChz dHJ1Y3QgcnRlX3JpbmcgKnIsIHVpbnQzMl90IHByb2RfaGVhZCwNCj4gPiA+ICsJCXZvaWQgKm9i al90YWJsZSwgdWludDMyX3QgbikNCj4gPiA+ICt7DQo+ID4gPiArCXVuc2lnbmVkIGludCBpOw0K PiA+ID4gKwljb25zdCB1aW50MzJfdCBzaXplID0gci0+c2l6ZTsNCj4gPiA+ICsJdWludDMyX3Qg aWR4ID0gcHJvZF9oZWFkICYgci0+bWFzazsNCj4gPiA+ICsJcnRlX2ludDEyOF90ICpyaW5nID0g KHJ0ZV9pbnQxMjhfdCAqKSZyWzFdOw0KPiA+ID4gKwlydGVfaW50MTI4X3QgKm9iaiA9IChydGVf aW50MTI4X3QgKilvYmpfdGFibGU7DQo+ID4gPiArCWlmIChsaWtlbHkoaWR4ICsgbiA8IHNpemUp KSB7DQo+ID4gPiArCQlmb3IgKGkgPSAwOyBpIDwgKG4gJiB+MHgxKTsgaSArPSAyLCBpZHggKz0g MikNCj4gPiA+ICsJCQltZW1jcHkoKHZvaWQgKikob2JqICsgaSksICh2b2lkICopKHJpbmcgKyBp ZHgpLCAzMik7DQo+ID4gPiArCQlzd2l0Y2ggKG4gJiAweDEpIHsNCj4gPiA+ICsJCWNhc2UgMToN Cj4gPiA+ICsJCQltZW1jcHkoKHZvaWQgKikob2JqICsgaSksICh2b2lkICopKHJpbmcgKyBpZHgp LCAxNik7DQo+ID4gPiArCQl9DQo+ID4gPiArCX0gZWxzZSB7DQo+ID4gPiArCQlmb3IgKGkgPSAw OyBpZHggPCBzaXplOyBpKyssIGlkeCsrKQ0KPiA+ID4gKwkJCW1lbWNweSgodm9pZCAqKShvYmog KyBpKSwgKHZvaWQgKikocmluZyArIGlkeCksIDE2KTsNCj4gPiA+ICsJCS8qIFN0YXJ0IGF0IHRo ZSBiZWdpbm5pbmcgKi8NCj4gPiA+ICsJCWZvciAoaWR4ID0gMDsgaSA8IG47IGkrKywgaWR4Kysp DQo+ID4gPiArCQkJbWVtY3B5KCh2b2lkICopKG9iaiArIGkpLCAodm9pZCAqKShyaW5nICsgaWR4 KSwgMTYpOw0KPiA+ID4gKwl9DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gKy8qIHRoZSBhY3R1 YWwgZGVxdWV1ZSBvZiBlbGVtZW50cyBmcm9tIHRoZSByaW5nLg0KPiA+ID4gKyAqIFBsYWNlZCBo ZXJlIHNpbmNlIGlkZW50aWNhbCBjb2RlIG5lZWRlZCBpbiBib3RoDQo+ID4gPiArICogc2luZ2xl IGFuZCBtdWx0aSBwcm9kdWNlciBlbnF1ZXVlIGZ1bmN0aW9ucy4NCj4gPiA+ICsgKi8NCj4gPiA+ ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2b2lkDQo+ID4gPiArX19ydGVfcmluZ19kZXF1 ZXVlX2VsZW1zKHN0cnVjdCBydGVfcmluZyAqciwgdWludDMyX3QgY29uc19oZWFkLA0KPiA+ID4g KwkJdm9pZCAqb2JqX3RhYmxlLCB1aW50MzJfdCBlc2l6ZSwgdWludDMyX3QgbnVtKSB7DQo+ID4g PiArCS8qIDhCIGFuZCAxNkIgY29waWVzIGltcGxlbWVudGVkIGluZGl2aWR1YWxseSB0byByZXRh aW4NCj4gPiA+ICsJICogdGhlIGN1cnJlbnQgcGVyZm9ybWFuY2UuDQo+ID4gPiArCSAqLw0KPiA+ ID4gKwlpZiAoZXNpemUgPT0gOCkNCj4gPiA+ICsJCV9fcnRlX3JpbmdfZGVxdWV1ZV9lbGVtc182 NChyLCBjb25zX2hlYWQsIG9ial90YWJsZSwNCj4gPiBudW0pOw0KPiA+ID4gKwllbHNlIGlmIChl c2l6ZSA9PSAxNikNCj4gPiA+ICsJCV9fcnRlX3JpbmdfZGVxdWV1ZV9lbGVtc18xMjgociwgY29u c19oZWFkLCBvYmpfdGFibGUsDQo+ID4gbnVtKTsNCj4gPiA+ICsJZWxzZSB7DQo+ID4gPiArCQl1 aW50MzJfdCBpZHgsIHNjYWxlLCBucl9pZHgsIG5yX251bSwgbnJfc2l6ZTsNCj4gPiA+ICsNCj4g PiA+ICsJCS8qIE5vcm1hbGl6ZSB0byB1aW50MzJfdCAqLw0KPiA+ID4gKwkJc2NhbGUgPSBlc2l6 ZSAvIHNpemVvZih1aW50MzJfdCk7DQo+ID4gPiArCQlucl9udW0gPSBudW0gKiBzY2FsZTsNCj4g PiA+ICsJCWlkeCA9IGNvbnNfaGVhZCAmIHItPm1hc2s7DQo+ID4gPiArCQlucl9pZHggPSBpZHgg KiBzY2FsZTsNCj4gPiA+ICsJCW5yX3NpemUgPSByLT5zaXplICogc2NhbGU7DQo+ID4gPiArCQlf X3J0ZV9yaW5nX2RlcXVldWVfZWxlbXNfMzIociwgbnJfc2l6ZSwgbnJfaWR4LA0KPiA+ID4gKwkJ CQlvYmpfdGFibGUsIG5yX251bSk7DQo+ID4gPiArCX0NCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4g PiArLyogQmV0d2VlbiBsb2FkIGFuZCBsb2FkLiB0aGVyZSBtaWdodCBiZSBjcHUgcmVvcmRlciBp biB3ZWFrIG1vZGVsDQo+ID4gPiArICogKHBvd2VycGMvYXJtKS4NCj4gPiA+ICsgKiBUaGVyZSBh cmUgMiBjaG9pY2VzIGZvciB0aGUgdXNlcnMNCj4gPiA+ICsgKiAxLnVzZSBybWIoKSBtZW1vcnkg YmFycmllcg0KPiA+ID4gKyAqIDIudXNlIG9uZS1kaXJlY3Rpb24gbG9hZF9hY3F1aXJlL3N0b3Jl X3JlbGVhc2UgYmFycmllcg0KPiA+ID4gKyAqIEl0IGRlcGVuZHMgb24gcGVyZm9ybWFuY2UgdGVz dCByZXN1bHRzLg0KPiA+ID4gKyAqLw0KPiA+ID4gKyNpZmRlZiBSVEVfVVNFX0MxMV9NRU1fTU9E RUwNCj4gPiA+ICsjaW5jbHVkZSAicmluZ19jMTFfcHZ0LmgiDQo+ID4gPiArI2Vsc2UNCj4gPiA+ ICsjaW5jbHVkZSAicmluZ19nZW5lcmljX3B2dC5oIg0KPiA+ID4gKyNlbmRpZg0KPiA+ID4gKw0K PiA+ID4gKy8qKg0KPiA+ID4gKyAqIEBpbnRlcm5hbCBFbnF1ZXVlIHNldmVyYWwgb2JqZWN0cyBv biB0aGUgcmluZw0KPiA+ID4gKyAqDQo+ID4gPiArICogQHBhcmFtIHINCj4gPiA+ICsgKiAgIEEg cG9pbnRlciB0byB0aGUgcmluZyBzdHJ1Y3R1cmUuDQo+ID4gPiArICogQHBhcmFtIG9ial90YWJs ZQ0KPiA+ID4gKyAqICAgQSBwb2ludGVyIHRvIGEgdGFibGUgb2Ygb2JqZWN0cy4NCj4gPiA+ICsg KiBAcGFyYW0gZXNpemUNCj4gPiA+ICsgKiAgIFRoZSBzaXplIG9mIHJpbmcgZWxlbWVudCwgaW4g Ynl0ZXMuIEl0IG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Lg0KPiA+ID4gKyAqICAgVGhpcyBtdXN0 IGJlIHRoZSBzYW1lIHZhbHVlIHVzZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHJpbmcuIE90aGVyd2lz ZQ0KPiA+ID4gKyAqICAgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZC4NCj4gPiA+ICsgKiBAcGFy YW0gbg0KPiA+ID4gKyAqICAgVGhlIG51bWJlciBvZiBvYmplY3RzIHRvIGFkZCBpbiB0aGUgcmlu ZyBmcm9tIHRoZSBvYmpfdGFibGUuDQo+ID4gPiArICogQHBhcmFtIGJlaGF2aW9yDQo+ID4gPiAr ICogICBSVEVfUklOR19RVUVVRV9GSVhFRDogICAgRW5xdWV1ZSBhIGZpeGVkIG51bWJlciBvZiBp dGVtcyBmcm9tIGENCj4gPiByaW5nDQo+ID4gPiArICogICBSVEVfUklOR19RVUVVRV9WQVJJQUJM RTogRW5xdWV1ZSBhcyBtYW55IGl0ZW1zIGFzIHBvc3NpYmxlDQo+ID4gZnJvbSByaW5nDQo+ID4g PiArICogQHBhcmFtIGlzX3NwDQo+ID4gPiArICogICBJbmRpY2F0ZXMgd2hldGhlciB0byB1c2Ug c2luZ2xlIHByb2R1Y2VyIG9yIG11bHRpLXByb2R1Y2VyIGhlYWQNCj4gPiB1cGRhdGUNCj4gPiA+ ICsgKiBAcGFyYW0gZnJlZV9zcGFjZQ0KPiA+ID4gKyAqICAgcmV0dXJucyB0aGUgYW1vdW50IG9m IHNwYWNlIGFmdGVyIHRoZSBlbnF1ZXVlIG9wZXJhdGlvbiBoYXMgZmluaXNoZWQNCj4gPiA+ICsg KiBAcmV0dXJuDQo+ID4gPiArICogICBBY3R1YWwgbnVtYmVyIG9mIG9iamVjdHMgZW5xdWV1ZWQu DQo+ID4gPiArICogICBJZiBiZWhhdmlvciA9PSBSVEVfUklOR19RVUVVRV9GSVhFRCwgdGhpcyB3 aWxsIGJlIDAgb3IgbiBvbmx5Lg0KPiA+ID4gKyAqLw0KPiA+ID4gK3N0YXRpYyBfX3J0ZV9hbHdh eXNfaW5saW5lIHVuc2lnbmVkIGludA0KPiA+ID4gK19fcnRlX3JpbmdfZG9fZW5xdWV1ZV9lbGVt KHN0cnVjdCBydGVfcmluZyAqciwgY29uc3Qgdm9pZCAqb2JqX3RhYmxlLA0KPiA+ID4gKwkJdW5z aWduZWQgaW50IGVzaXplLCB1bnNpZ25lZCBpbnQgbiwNCj4gPiA+ICsJCWVudW0gcnRlX3Jpbmdf cXVldWVfYmVoYXZpb3IgYmVoYXZpb3IsIHVuc2lnbmVkIGludCBpc19zcCwNCj4gPiA+ICsJCXVu c2lnbmVkIGludCAqZnJlZV9zcGFjZSkNCj4gPiA+ICt7DQo+ID4gPiArCXVpbnQzMl90IHByb2Rf aGVhZCwgcHJvZF9uZXh0Ow0KPiA+ID4gKwl1aW50MzJfdCBmcmVlX2VudHJpZXM7DQo+ID4gPiAr DQo+ID4gPiArCW4gPSBfX3J0ZV9yaW5nX21vdmVfcHJvZF9oZWFkKHIsIGlzX3NwLCBuLCBiZWhh dmlvciwNCj4gPiA+ICsJCQkmcHJvZF9oZWFkLCAmcHJvZF9uZXh0LCAmZnJlZV9lbnRyaWVzKTsN Cj4gPiA+ICsJaWYgKG4gPT0gMCkNCj4gPiA+ICsJCWdvdG8gZW5kOw0KPiA+ID4gKw0KPiA+ID4g KwlfX3J0ZV9yaW5nX2VucXVldWVfZWxlbXMociwgcHJvZF9oZWFkLCBvYmpfdGFibGUsIGVzaXpl LCBuKTsNCj4gPiA+ICsNCj4gPiA+ICsJX19ydGVfcmluZ191cGRhdGVfdGFpbCgmci0+cHJvZCwg cHJvZF9oZWFkLCBwcm9kX25leHQsIGlzX3NwLCAxKTsNCj4gPiA+ICtlbmQ6DQo+ID4gPiArCWlm IChmcmVlX3NwYWNlICE9IE5VTEwpDQo+ID4gPiArCQkqZnJlZV9zcGFjZSA9IGZyZWVfZW50cmll cyAtIG47DQo+ID4gPiArCXJldHVybiBuOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsvKioN Cj4gPiA+ICsgKiBAaW50ZXJuYWwgRGVxdWV1ZSBzZXZlcmFsIG9iamVjdHMgZnJvbSB0aGUgcmlu Zw0KPiA+ID4gKyAqDQo+ID4gPiArICogQHBhcmFtIHINCj4gPiA+ICsgKiAgIEEgcG9pbnRlciB0 byB0aGUgcmluZyBzdHJ1Y3R1cmUuDQo+ID4gPiArICogQHBhcmFtIG9ial90YWJsZQ0KPiA+ID4g KyAqICAgQSBwb2ludGVyIHRvIGEgdGFibGUgb2Ygb2JqZWN0cy4NCj4gPiA+ICsgKiBAcGFyYW0g ZXNpemUNCj4gPiA+ICsgKiAgIFRoZSBzaXplIG9mIHJpbmcgZWxlbWVudCwgaW4gYnl0ZXMuIEl0 IG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Lg0KPiA+ID4gKyAqICAgVGhpcyBtdXN0IGJlIHRoZSBz YW1lIHZhbHVlIHVzZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHJpbmcuIE90aGVyd2lzZQ0KPiA+ID4g KyAqICAgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZC4NCj4gPiA+ICsgKiBAcGFyYW0gbg0KPiA+ ID4gKyAqICAgVGhlIG51bWJlciBvZiBvYmplY3RzIHRvIHB1bGwgZnJvbSB0aGUgcmluZy4NCj4g PiA+ICsgKiBAcGFyYW0gYmVoYXZpb3INCj4gPiA+ICsgKiAgIFJURV9SSU5HX1FVRVVFX0ZJWEVE OiAgICBEZXF1ZXVlIGEgZml4ZWQgbnVtYmVyIG9mIGl0ZW1zIGZyb20gYQ0KPiA+IHJpbmcNCj4g PiA+ICsgKiAgIFJURV9SSU5HX1FVRVVFX1ZBUklBQkxFOiBEZXF1ZXVlIGFzIG1hbnkgaXRlbXMg YXMgcG9zc2libGUNCj4gPiBmcm9tIHJpbmcNCj4gPiA+ICsgKiBAcGFyYW0gaXNfc2MNCj4gPiA+ ICsgKiAgIEluZGljYXRlcyB3aGV0aGVyIHRvIHVzZSBzaW5nbGUgY29uc3VtZXIgb3IgbXVsdGkt Y29uc3VtZXIgaGVhZA0KPiA+IHVwZGF0ZQ0KPiA+ID4gKyAqIEBwYXJhbSBhdmFpbGFibGUNCj4g PiA+ICsgKiAgIHJldHVybnMgdGhlIG51bWJlciBvZiByZW1haW5pbmcgcmluZyBlbnRyaWVzIGFm dGVyIHRoZSBkZXF1ZXVlIGhhcw0KPiA+IGZpbmlzaGVkDQo+ID4gPiArICogQHJldHVybg0KPiA+ ID4gKyAqICAgLSBBY3R1YWwgbnVtYmVyIG9mIG9iamVjdHMgZGVxdWV1ZWQuDQo+ID4gPiArICog ICAgIElmIGJlaGF2aW9yID09IFJURV9SSU5HX1FVRVVFX0ZJWEVELCB0aGlzIHdpbGwgYmUgMCBv ciBuIG9ubHkuDQo+ID4gPiArICovDQo+ID4gPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUg dW5zaWduZWQgaW50DQo+ID4gPiArX19ydGVfcmluZ19kb19kZXF1ZXVlX2VsZW0oc3RydWN0IHJ0 ZV9yaW5nICpyLCB2b2lkICpvYmpfdGFibGUsDQo+ID4gPiArCQl1bnNpZ25lZCBpbnQgZXNpemUs IHVuc2lnbmVkIGludCBuLA0KPiA+ID4gKwkJZW51bSBydGVfcmluZ19xdWV1ZV9iZWhhdmlvciBi ZWhhdmlvciwgdW5zaWduZWQgaW50IGlzX3NjLA0KPiA+ID4gKwkJdW5zaWduZWQgaW50ICphdmFp bGFibGUpDQo+ID4gPiArew0KPiA+ID4gKwl1aW50MzJfdCBjb25zX2hlYWQsIGNvbnNfbmV4dDsN Cj4gPiA+ICsJdWludDMyX3QgZW50cmllczsNCj4gPiA+ICsNCj4gPiA+ICsJbiA9IF9fcnRlX3Jp bmdfbW92ZV9jb25zX2hlYWQociwgKGludClpc19zYywgbiwgYmVoYXZpb3IsDQo+ID4gPiArCQkJ JmNvbnNfaGVhZCwgJmNvbnNfbmV4dCwgJmVudHJpZXMpOw0KPiA+ID4gKwlpZiAobiA9PSAwKQ0K PiA+ID4gKwkJZ290byBlbmQ7DQo+ID4gPiArDQo+ID4gPiArCV9fcnRlX3JpbmdfZGVxdWV1ZV9l bGVtcyhyLCBjb25zX2hlYWQsIG9ial90YWJsZSwgZXNpemUsIG4pOw0KPiA+ID4gKw0KPiA+ID4g KwlfX3J0ZV9yaW5nX3VwZGF0ZV90YWlsKCZyLT5jb25zLCBjb25zX2hlYWQsIGNvbnNfbmV4dCwg aXNfc2MsIDApOw0KPiA+ID4gKw0KPiA+ID4gK2VuZDoNCj4gPiA+ICsJaWYgKGF2YWlsYWJsZSAh PSBOVUxMKQ0KPiA+ID4gKwkJKmF2YWlsYWJsZSA9IGVudHJpZXMgLSBuOw0KPiA+ID4gKwlyZXR1 cm4gbjsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArI2VuZGlmIC8qIF9SSU5HX0VMRU1fUFZU X0hfICovDQo+ID4gPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX2dlbmVy aWMuaA0KPiA+ID4gYi9saWIvbGlicnRlX3JpbmcvcmluZ19nZW5lcmljX3B2dC5oDQo+ID4gPiBz aW1pbGFyaXR5IGluZGV4IDk4JQ0KPiA+ID4gcmVuYW1lIGZyb20gbGliL2xpYnJ0ZV9yaW5nL3J0 ZV9yaW5nX2dlbmVyaWMuaA0KPiA+ID4gcmVuYW1lIHRvIGxpYi9saWJydGVfcmluZy9yaW5nX2dl bmVyaWNfcHZ0LmgNCj4gPiA+IGluZGV4IDM3YzYyYjhkNi4uZmM0NmEyN2IyIDEwMDY0NA0KPiA+ ID4gLS0tIGEvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX2dlbmVyaWMuaA0KPiA+ID4gKysrIGIv bGliL2xpYnJ0ZV9yaW5nL3JpbmdfZ2VuZXJpY19wdnQuaA0KPiA+ID4gQEAgLTcsOCArNyw4IEBA DQo+ID4gPiAgICogVXNlZCBhcyBCU0QtMyBMaWNlbnNlZCB3aXRoIHBlcm1pc3Npb24gZnJvbSBL aXAgTWFjeS4NCj4gPiA+ICAgKi8NCj4gPiA+DQo+ID4gPiAtI2lmbmRlZiBfUlRFX1JJTkdfR0VO RVJJQ19IXw0KPiA+ID4gLSNkZWZpbmUgX1JURV9SSU5HX0dFTkVSSUNfSF8NCj4gPiA+ICsjaWZu ZGVmIF9SSU5HX0dFTkVSSUNfUFZUX0hfDQo+ID4gPiArI2RlZmluZSBfUklOR19HRU5FUklDX1BW VF9IXw0KPiA+ID4NCj4gPiA+ICBzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2b2lkDQo+ID4g PiAgX19ydGVfcmluZ191cGRhdGVfdGFpbChzdHJ1Y3QgcnRlX3JpbmdfaGVhZHRhaWwgKmh0LCB1 aW50MzJfdA0KPiA+ID4gb2xkX3ZhbCwgQEAgLTE3MCw0ICsxNzAsNCBAQCBfX3J0ZV9yaW5nX21v dmVfY29uc19oZWFkKHN0cnVjdA0KPiA+IHJ0ZV9yaW5nICpyLCB1bnNpZ25lZCBpbnQgaXNfc2Ms DQo+ID4gPiAgCXJldHVybiBuOw0KPiA+ID4gIH0NCj4gPiA+DQo+ID4gPiAtI2VuZGlmIC8qIF9S VEVfUklOR19HRU5FUklDX0hfICovDQo+ID4gPiArI2VuZGlmIC8qIF9SSU5HX0dFTkVSSUNfUFZU X0hfICovDQo+ID4gPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX2h0c19j MTFfbWVtLmgNCj4gPiA+IGIvbGliL2xpYnJ0ZV9yaW5nL3JpbmdfaHRzX2VsZW1fcHZ0LmgNCj4g PiA+IHNpbWlsYXJpdHkgaW5kZXggNjAlDQo+ID4gPiByZW5hbWUgZnJvbSBsaWIvbGlicnRlX3Jp bmcvcnRlX3JpbmdfaHRzX2MxMV9tZW0uaA0KPiA+ID4gcmVuYW1lIHRvIGxpYi9saWJydGVfcmlu Zy9yaW5nX2h0c19lbGVtX3B2dC5oDQo+ID4gPiBpbmRleCAxNmU1NGI2ZmYuLjkyNjg3NTBiMCAx MDA2NDQNCj4gPiA+IC0tLSBhL2xpYi9saWJydGVfcmluZy9ydGVfcmluZ19odHNfYzExX21lbS5o DQo+ID4gPiArKysgYi9saWIvbGlicnRlX3JpbmcvcmluZ19odHNfZWxlbV9wdnQuaA0KPiA+ID4g QEAgLTcsOCArNyw4IEBADQo+ID4gPiAgICogVXNlZCBhcyBCU0QtMyBMaWNlbnNlZCB3aXRoIHBl cm1pc3Npb24gZnJvbSBLaXAgTWFjeS4NCj4gPiA+ICAgKi8NCj4gPiA+DQo+ID4gPiAtI2lmbmRl ZiBfUlRFX1JJTkdfSFRTX0MxMV9NRU1fSF8NCj4gPiA+IC0jZGVmaW5lIF9SVEVfUklOR19IVFNf QzExX01FTV9IXw0KPiA+ID4gKyNpZm5kZWYgX1JJTkdfSFRTX0VMRU1fUFZUX0hfDQo+ID4gPiAr I2RlZmluZSBfUklOR19IVFNfRUxFTV9QVlRfSF8NCj4gPiA+DQo+ID4gPiAgLyoqDQo+ID4gPiAg ICogQGZpbGUgcnRlX3JpbmdfaHRzX2MxMV9tZW0uaA0KPiA+ID4gQEAgLTE2MSw0ICsxNjEsODYg QEAgX19ydGVfcmluZ19odHNfbW92ZV9jb25zX2hlYWQoc3RydWN0IHJ0ZV9yaW5nDQo+ID4gKnIs IHVuc2lnbmVkIGludCBudW0sDQo+ID4gPiAgCXJldHVybiBuOw0KPiA+ID4gIH0NCj4gPiA+DQo+ ID4gPiAtI2VuZGlmIC8qIF9SVEVfUklOR19IVFNfQzExX01FTV9IXyAqLw0KPiA+ID4gKy8qKg0K PiA+ID4gKyAqIEBpbnRlcm5hbCBFbnF1ZXVlIHNldmVyYWwgb2JqZWN0cyBvbiB0aGUgSFRTIHJp bmcuDQo+ID4gPiArICoNCj4gPiA+ICsgKiBAcGFyYW0gcg0KPiA+ID4gKyAqICAgQSBwb2ludGVy IHRvIHRoZSByaW5nIHN0cnVjdHVyZS4NCj4gPiA+ICsgKiBAcGFyYW0gb2JqX3RhYmxlDQo+ID4g PiArICogICBBIHBvaW50ZXIgdG8gYSB0YWJsZSBvZiBvYmplY3RzLg0KPiA+ID4gKyAqIEBwYXJh bSBlc2l6ZQ0KPiA+ID4gKyAqICAgVGhlIHNpemUgb2YgcmluZyBlbGVtZW50LCBpbiBieXRlcy4g SXQgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQuDQo+ID4gPiArICogICBUaGlzIG11c3QgYmUgdGhl IHNhbWUgdmFsdWUgdXNlZCB3aGlsZSBjcmVhdGluZyB0aGUgcmluZy4gT3RoZXJ3aXNlDQo+ID4g PiArICogICB0aGUgcmVzdWx0cyBhcmUgdW5kZWZpbmVkLg0KPiA+ID4gKyAqIEBwYXJhbSBuDQo+ ID4gPiArICogICBUaGUgbnVtYmVyIG9mIG9iamVjdHMgdG8gYWRkIGluIHRoZSByaW5nIGZyb20g dGhlIG9ial90YWJsZS4NCj4gPiA+ICsgKiBAcGFyYW0gYmVoYXZpb3INCj4gPiA+ICsgKiAgIFJU RV9SSU5HX1FVRVVFX0ZJWEVEOiAgICBFbnF1ZXVlIGEgZml4ZWQgbnVtYmVyIG9mIGl0ZW1zIGZy b20gYQ0KPiA+IHJpbmcNCj4gPiA+ICsgKiAgIFJURV9SSU5HX1FVRVVFX1ZBUklBQkxFOiBFbnF1 ZXVlIGFzIG1hbnkgaXRlbXMgYXMgcG9zc2libGUNCj4gPiBmcm9tIHJpbmcNCj4gPiA+ICsgKiBA cGFyYW0gZnJlZV9zcGFjZQ0KPiA+ID4gKyAqICAgcmV0dXJucyB0aGUgYW1vdW50IG9mIHNwYWNl IGFmdGVyIHRoZSBlbnF1ZXVlIG9wZXJhdGlvbiBoYXMgZmluaXNoZWQNCj4gPiA+ICsgKiBAcmV0 dXJuDQo+ID4gPiArICogICBBY3R1YWwgbnVtYmVyIG9mIG9iamVjdHMgZW5xdWV1ZWQuDQo+ID4g PiArICogICBJZiBiZWhhdmlvciA9PSBSVEVfUklOR19RVUVVRV9GSVhFRCwgdGhpcyB3aWxsIGJl IDAgb3IgbiBvbmx5Lg0KPiA+ID4gKyAqLw0KPiA+ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5s aW5lIHVuc2lnbmVkIGludA0KPiA+ID4gK19fcnRlX3JpbmdfZG9faHRzX2VucXVldWVfZWxlbShz dHJ1Y3QgcnRlX3JpbmcgKnIsIGNvbnN0IHZvaWQNCj4gPiAqb2JqX3RhYmxlLA0KPiA+ID4gKwl1 aW50MzJfdCBlc2l6ZSwgdWludDMyX3QgbiwgZW51bSBydGVfcmluZ19xdWV1ZV9iZWhhdmlvciBi ZWhhdmlvciwNCj4gPiA+ICsJdWludDMyX3QgKmZyZWVfc3BhY2UpDQo+ID4gPiArew0KPiA+ID4g Kwl1aW50MzJfdCBmcmVlLCBoZWFkOw0KPiA+ID4gKw0KPiA+ID4gKwluID0gIF9fcnRlX3Jpbmdf aHRzX21vdmVfcHJvZF9oZWFkKHIsIG4sIGJlaGF2aW9yLCAmaGVhZCwgJmZyZWUpOw0KPiA+ID4g Kw0KPiA+ID4gKwlpZiAobiAhPSAwKSB7DQo+ID4gPiArCQlfX3J0ZV9yaW5nX2VucXVldWVfZWxl bXMociwgaGVhZCwgb2JqX3RhYmxlLCBlc2l6ZSwgbik7DQo+ID4gPiArCQlfX3J0ZV9yaW5nX2h0 c191cGRhdGVfdGFpbCgmci0+aHRzX3Byb2QsIGhlYWQsIG4sIDEpOw0KPiA+ID4gKwl9DQo+ID4g PiArDQo+ID4gPiArCWlmIChmcmVlX3NwYWNlICE9IE5VTEwpDQo+ID4gPiArCQkqZnJlZV9zcGFj ZSA9IGZyZWUgLSBuOw0KPiA+ID4gKwlyZXR1cm4gbjsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4g PiArLyoqDQo+ID4gPiArICogQGludGVybmFsIERlcXVldWUgc2V2ZXJhbCBvYmplY3RzIGZyb20g dGhlIEhUUyByaW5nLg0KPiA+ID4gKyAqDQo+ID4gPiArICogQHBhcmFtIHINCj4gPiA+ICsgKiAg IEEgcG9pbnRlciB0byB0aGUgcmluZyBzdHJ1Y3R1cmUuDQo+ID4gPiArICogQHBhcmFtIG9ial90 YWJsZQ0KPiA+ID4gKyAqICAgQSBwb2ludGVyIHRvIGEgdGFibGUgb2Ygb2JqZWN0cy4NCj4gPiA+ ICsgKiBAcGFyYW0gZXNpemUNCj4gPiA+ICsgKiAgIFRoZSBzaXplIG9mIHJpbmcgZWxlbWVudCwg aW4gYnl0ZXMuIEl0IG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Lg0KPiA+ID4gKyAqICAgVGhpcyBt dXN0IGJlIHRoZSBzYW1lIHZhbHVlIHVzZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHJpbmcuIE90aGVy d2lzZQ0KPiA+ID4gKyAqICAgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZC4NCj4gPiA+ICsgKiBA cGFyYW0gbg0KPiA+ID4gKyAqICAgVGhlIG51bWJlciBvZiBvYmplY3RzIHRvIHB1bGwgZnJvbSB0 aGUgcmluZy4NCj4gPiA+ICsgKiBAcGFyYW0gYmVoYXZpb3INCj4gPiA+ICsgKiAgIFJURV9SSU5H X1FVRVVFX0ZJWEVEOiAgICBEZXF1ZXVlIGEgZml4ZWQgbnVtYmVyIG9mIGl0ZW1zIGZyb20gYQ0K PiA+IHJpbmcNCj4gPiA+ICsgKiAgIFJURV9SSU5HX1FVRVVFX1ZBUklBQkxFOiBEZXF1ZXVlIGFz IG1hbnkgaXRlbXMgYXMgcG9zc2libGUNCj4gPiBmcm9tIHJpbmcNCj4gPiA+ICsgKiBAcGFyYW0g YXZhaWxhYmxlDQo+ID4gPiArICogICByZXR1cm5zIHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIHJp bmcgZW50cmllcyBhZnRlciB0aGUgZGVxdWV1ZSBoYXMNCj4gPiBmaW5pc2hlZA0KPiA+ID4gKyAq IEByZXR1cm4NCj4gPiA+ICsgKiAgIC0gQWN0dWFsIG51bWJlciBvZiBvYmplY3RzIGRlcXVldWVk Lg0KPiA+ID4gKyAqICAgICBJZiBiZWhhdmlvciA9PSBSVEVfUklOR19RVUVVRV9GSVhFRCwgdGhp cyB3aWxsIGJlIDAgb3IgbiBvbmx5Lg0KPiA+ID4gKyAqLw0KPiA+ID4gK3N0YXRpYyBfX3J0ZV9h bHdheXNfaW5saW5lIHVuc2lnbmVkIGludA0KPiA+ID4gK19fcnRlX3JpbmdfZG9faHRzX2RlcXVl dWVfZWxlbShzdHJ1Y3QgcnRlX3JpbmcgKnIsIHZvaWQgKm9ial90YWJsZSwNCj4gPiA+ICsJdWlu dDMyX3QgZXNpemUsIHVpbnQzMl90IG4sIGVudW0gcnRlX3JpbmdfcXVldWVfYmVoYXZpb3IgYmVo YXZpb3IsDQo+ID4gPiArCXVpbnQzMl90ICphdmFpbGFibGUpDQo+ID4gPiArew0KPiA+ID4gKwl1 aW50MzJfdCBlbnRyaWVzLCBoZWFkOw0KPiA+ID4gKw0KPiA+ID4gKwluID0gX19ydGVfcmluZ19o dHNfbW92ZV9jb25zX2hlYWQociwgbiwgYmVoYXZpb3IsICZoZWFkLA0KPiA+ICZlbnRyaWVzKTsN Cj4gPiA+ICsNCj4gPiA+ICsJaWYgKG4gIT0gMCkgew0KPiA+ID4gKwkJX19ydGVfcmluZ19kZXF1 ZXVlX2VsZW1zKHIsIGhlYWQsIG9ial90YWJsZSwgZXNpemUsIG4pOw0KPiA+ID4gKwkJX19ydGVf cmluZ19odHNfdXBkYXRlX3RhaWwoJnItPmh0c19jb25zLCBoZWFkLCBuLCAwKTsNCj4gPiA+ICsJ fQ0KPiA+ID4gKw0KPiA+ID4gKwlpZiAoYXZhaWxhYmxlICE9IE5VTEwpDQo+ID4gPiArCQkqYXZh aWxhYmxlID0gZW50cmllcyAtIG47DQo+ID4gPiArCXJldHVybiBuOw0KPiA+ID4gK30NCj4gPiA+ ICsNCj4gPiA+ICsjZW5kaWYgLyogX1JJTkdfSFRTX0VMRU1fUFZUX0hfICovDQo+ID4gPiBkaWZm IC0tZ2l0IGEvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX3BlZWtfYzExX21lbS5oDQo+ID4gPiBi L2xpYi9saWJydGVfcmluZy9yaW5nX3BlZWtfZWxlbV9wdnQuaA0KPiA+ID4gc2ltaWxhcml0eSBp bmRleCA2MiUNCj4gPiA+IHJlbmFtZSBmcm9tIGxpYi9saWJydGVfcmluZy9ydGVfcmluZ19wZWVr X2MxMV9tZW0uaA0KPiA+ID4gcmVuYW1lIHRvIGxpYi9saWJydGVfcmluZy9yaW5nX3BlZWtfZWxl bV9wdnQuaA0KPiA+ID4gaW5kZXggMjgzYzdlNzBiLi4xYzU3YmNkZDYgMTAwNjQ0DQo+ID4gPiAt LS0gYS9saWIvbGlicnRlX3JpbmcvcnRlX3JpbmdfcGVla19jMTFfbWVtLmgNCj4gPiA+ICsrKyBi L2xpYi9saWJydGVfcmluZy9yaW5nX3BlZWtfZWxlbV9wdnQuaA0KPiA+ID4gQEAgLTcsOCArNyw4 IEBADQo+ID4gPiAgICogVXNlZCBhcyBCU0QtMyBMaWNlbnNlZCB3aXRoIHBlcm1pc3Npb24gZnJv bSBLaXAgTWFjeS4NCj4gPiA+ICAgKi8NCj4gPiA+DQo+ID4gPiAtI2lmbmRlZiBfUlRFX1JJTkdf UEVFS19DMTFfTUVNX0hfDQo+ID4gPiAtI2RlZmluZSBfUlRFX1JJTkdfUEVFS19DMTFfTUVNX0hf DQo+ID4gPiArI2lmbmRlZiBfUklOR19QRUVLX0VMRU1fUFZUX0hfDQo+ID4gPiArI2RlZmluZSBf UklOR19QRUVLX0VMRU1fUFZUX0hfDQo+ID4gPg0KPiA+ID4gIC8qKg0KPiA+ID4gICAqIEBmaWxl IHJ0ZV9yaW5nX3BlZWtfYzExX21lbS5oDQo+ID4gPiBAQCAtMTA3LDQgKzEwNyw3MyBAQCBfX3J0 ZV9yaW5nX2h0c19zZXRfaGVhZF90YWlsKHN0cnVjdA0KPiA+IHJ0ZV9yaW5nX2h0c19oZWFkdGFp bCAqaHQsIHVpbnQzMl90IHRhaWwsDQo+ID4gPiAgCV9fYXRvbWljX3N0b3JlX24oJmh0LT5odC5y YXcsIHAucmF3LCBfX0FUT01JQ19SRUxFQVNFKTsgIH0NCj4gPiA+DQo+ID4gPiAtI2VuZGlmIC8q IF9SVEVfUklOR19QRUVLX0MxMV9NRU1fSF8gKi8NCj4gPiA+ICsvKioNCj4gPiA+ICsgKiBAaW50 ZXJuYWwgVGhpcyBmdW5jdGlvbiBtb3ZlcyBwcm9kIGhlYWQgdmFsdWUuDQo+ID4gPiArICovDQo+ ID4gPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50DQo+ID4gPiArX19y dGVfcmluZ19kb19lbnF1ZXVlX3N0YXJ0KHN0cnVjdCBydGVfcmluZyAqciwgdWludDMyX3QgbiwN Cj4gPiA+ICsJCWVudW0gcnRlX3JpbmdfcXVldWVfYmVoYXZpb3IgYmVoYXZpb3IsIHVpbnQzMl90 DQo+ID4gKmZyZWVfc3BhY2UpIHsNCj4gPiA+ICsJdWludDMyX3QgZnJlZSwgaGVhZCwgbmV4dDsN Cj4gPiA+ICsNCj4gPiA+ICsJc3dpdGNoIChyLT5wcm9kLnN5bmNfdHlwZSkgew0KPiA+ID4gKwlj YXNlIFJURV9SSU5HX1NZTkNfU1Q6DQo+ID4gPiArCQluID0gX19ydGVfcmluZ19tb3ZlX3Byb2Rf aGVhZChyLCBSVEVfUklOR19TWU5DX1NULCBuLA0KPiA+ID4gKwkJCWJlaGF2aW9yLCAmaGVhZCwg Jm5leHQsICZmcmVlKTsNCj4gPiA+ICsJCWJyZWFrOw0KPiA+ID4gKwljYXNlIFJURV9SSU5HX1NZ TkNfTVRfSFRTOg0KPiA+ID4gKwkJbiA9ICBfX3J0ZV9yaW5nX2h0c19tb3ZlX3Byb2RfaGVhZChy LCBuLCBiZWhhdmlvciwNCj4gPiA+ICsJCQkmaGVhZCwgJmZyZWUpOw0KPiA+ID4gKwkJYnJlYWs7 DQo+ID4gPiArCWNhc2UgUlRFX1JJTkdfU1lOQ19NVDoNCj4gPiA+ICsJY2FzZSBSVEVfUklOR19T WU5DX01UX1JUUzoNCj4gPiA+ICsJZGVmYXVsdDoNCj4gPiA+ICsJCS8qIHVuc3VwcG9ydGVkIG1v ZGUsIHNob3VsZG4ndCBiZSBoZXJlICovDQo+ID4gPiArCQlSVEVfQVNTRVJUKDApOw0KPiA+ID4g KwkJbiA9IDA7DQo+ID4gPiArCQlmcmVlID0gMDsNCj4gPiA+ICsJfQ0KPiA+ID4gKw0KPiA+ID4g KwlpZiAoZnJlZV9zcGFjZSAhPSBOVUxMKQ0KPiA+ID4gKwkJKmZyZWVfc3BhY2UgPSBmcmVlIC0g bjsNCj4gPiA+ICsJcmV0dXJuIG47DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ ID4gKyAqIEBpbnRlcm5hbCBUaGlzIGZ1bmN0aW9uIG1vdmVzIGNvbnMgaGVhZCB2YWx1ZSBhbmQg Y29waWVzIHVwIHRvICpuKg0KPiA+ID4gKyAqIG9iamVjdHMgZnJvbSB0aGUgcmluZyB0byB0aGUg dXNlciBwcm92aWRlZCBvYmpfdGFibGUuDQo+ID4gPiArICovDQo+ID4gPiArc3RhdGljIF9fcnRl X2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50DQo+ID4gPiArX19ydGVfcmluZ19kb19kZXF1ZXVl X3N0YXJ0KHN0cnVjdCBydGVfcmluZyAqciwgdm9pZCAqb2JqX3RhYmxlLA0KPiA+ID4gKwl1aW50 MzJfdCBlc2l6ZSwgdWludDMyX3QgbiwgZW51bSBydGVfcmluZ19xdWV1ZV9iZWhhdmlvciBiZWhh dmlvciwNCj4gPiA+ICsJdWludDMyX3QgKmF2YWlsYWJsZSkNCj4gPiA+ICt7DQo+ID4gPiArCXVp bnQzMl90IGF2YWlsLCBoZWFkLCBuZXh0Ow0KPiA+ID4gKw0KPiA+ID4gKwlzd2l0Y2ggKHItPmNv bnMuc3luY190eXBlKSB7DQo+ID4gPiArCWNhc2UgUlRFX1JJTkdfU1lOQ19TVDoNCj4gPiA+ICsJ CW4gPSBfX3J0ZV9yaW5nX21vdmVfY29uc19oZWFkKHIsIFJURV9SSU5HX1NZTkNfU1QsIG4sDQo+ ID4gPiArCQkJYmVoYXZpb3IsICZoZWFkLCAmbmV4dCwgJmF2YWlsKTsNCj4gPiA+ICsJCWJyZWFr Ow0KPiA+ID4gKwljYXNlIFJURV9SSU5HX1NZTkNfTVRfSFRTOg0KPiA+ID4gKwkJbiA9ICBfX3J0 ZV9yaW5nX2h0c19tb3ZlX2NvbnNfaGVhZChyLCBuLCBiZWhhdmlvciwNCj4gPiA+ICsJCQkmaGVh ZCwgJmF2YWlsKTsNCj4gPiA+ICsJCWJyZWFrOw0KPiA+ID4gKwljYXNlIFJURV9SSU5HX1NZTkNf TVQ6DQo+ID4gPiArCWNhc2UgUlRFX1JJTkdfU1lOQ19NVF9SVFM6DQo+ID4gPiArCWRlZmF1bHQ6 DQo+ID4gPiArCQkvKiB1bnN1cHBvcnRlZCBtb2RlLCBzaG91bGRuJ3QgYmUgaGVyZSAqLw0KPiA+ ID4gKwkJUlRFX0FTU0VSVCgwKTsNCj4gPiA+ICsJCW4gPSAwOw0KPiA+ID4gKwkJYXZhaWwgPSAw Ow0KPiA+ID4gKwl9DQo+ID4gPiArDQo+ID4gPiArCWlmIChuICE9IDApDQo+ID4gPiArCQlfX3J0 ZV9yaW5nX2RlcXVldWVfZWxlbXMociwgaGVhZCwgb2JqX3RhYmxlLCBlc2l6ZSwgbik7DQo+ID4g PiArDQo+ID4gPiArCWlmIChhdmFpbGFibGUgIT0gTlVMTCkNCj4gPiA+ICsJCSphdmFpbGFibGUg PSBhdmFpbCAtIG47DQo+ID4gPiArCXJldHVybiBuOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ ICsjZW5kaWYgLyogX1JJTkdfUEVFS19FTEVNX1BWVF9IXyAqLw0KPiA+ID4gZGlmZiAtLWdpdCBh L2xpYi9saWJydGVfcmluZy9ydGVfcmluZ19ydHNfYzExX21lbS5oDQo+ID4gPiBiL2xpYi9saWJy dGVfcmluZy9yaW5nX3J0c19lbGVtX3B2dC5oDQo+ID4gPiBzaW1pbGFyaXR5IGluZGV4IDYyJQ0K PiA+ID4gcmVuYW1lIGZyb20gbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX3J0c19jMTFfbWVtLmgN Cj4gPiA+IHJlbmFtZSB0byBsaWIvbGlicnRlX3JpbmcvcmluZ19ydHNfZWxlbV9wdnQuaA0KPiA+ ID4gaW5kZXggMzI3ZjIyNzk2Li5jYmNlYzczZWIgMTAwNjQ0DQo+ID4gPiAtLS0gYS9saWIvbGli cnRlX3JpbmcvcnRlX3JpbmdfcnRzX2MxMV9tZW0uaA0KPiA+ID4gKysrIGIvbGliL2xpYnJ0ZV9y aW5nL3JpbmdfcnRzX2VsZW1fcHZ0LmgNCj4gPiA+IEBAIC03LDggKzcsOCBAQA0KPiA+ID4gICAq IFVzZWQgYXMgQlNELTMgTGljZW5zZWQgd2l0aCBwZXJtaXNzaW9uIGZyb20gS2lwIE1hY3kuDQo+ ID4gPiAgICovDQo+ID4gPg0KPiA+ID4gLSNpZm5kZWYgX1JURV9SSU5HX1JUU19DMTFfTUVNX0hf DQo+ID4gPiAtI2RlZmluZSBfUlRFX1JJTkdfUlRTX0MxMV9NRU1fSF8NCj4gPiA+ICsjaWZuZGVm IF9SSU5HX1JUU19FTEVNX1BWVF9IXw0KPiA+ID4gKyNkZWZpbmUgX1JJTkdfUlRTX0VMRU1fUFZU X0hfDQo+ID4gPg0KPiA+ID4gIC8qKg0KPiA+ID4gICAqIEBmaWxlIHJ0ZV9yaW5nX3J0c19jMTFf bWVtLmgNCj4gPiA+IEBAIC0xNzYsNCArMTc2LDg2IEBAIF9fcnRlX3JpbmdfcnRzX21vdmVfY29u c19oZWFkKHN0cnVjdCBydGVfcmluZw0KPiA+ICpyLCB1aW50MzJfdCBudW0sDQo+ID4gPiAgCXJl dHVybiBuOw0KPiA+ID4gIH0NCj4gPiA+DQo+ID4gPiAtI2VuZGlmIC8qIF9SVEVfUklOR19SVFNf QzExX01FTV9IXyAqLw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAqIEBpbnRlcm5hbCBFbnF1ZXVlIHNl dmVyYWwgb2JqZWN0cyBvbiB0aGUgUlRTIHJpbmcuDQo+ID4gPiArICoNCj4gPiA+ICsgKiBAcGFy YW0gcg0KPiA+ID4gKyAqICAgQSBwb2ludGVyIHRvIHRoZSByaW5nIHN0cnVjdHVyZS4NCj4gPiA+ ICsgKiBAcGFyYW0gb2JqX3RhYmxlDQo+ID4gPiArICogICBBIHBvaW50ZXIgdG8gYSB0YWJsZSBv ZiBvYmplY3RzLg0KPiA+ID4gKyAqIEBwYXJhbSBlc2l6ZQ0KPiA+ID4gKyAqICAgVGhlIHNpemUg b2YgcmluZyBlbGVtZW50LCBpbiBieXRlcy4gSXQgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQuDQo+ ID4gPiArICogICBUaGlzIG11c3QgYmUgdGhlIHNhbWUgdmFsdWUgdXNlZCB3aGlsZSBjcmVhdGlu ZyB0aGUgcmluZy4gT3RoZXJ3aXNlDQo+ID4gPiArICogICB0aGUgcmVzdWx0cyBhcmUgdW5kZWZp bmVkLg0KPiA+ID4gKyAqIEBwYXJhbSBuDQo+ID4gPiArICogICBUaGUgbnVtYmVyIG9mIG9iamVj dHMgdG8gYWRkIGluIHRoZSByaW5nIGZyb20gdGhlIG9ial90YWJsZS4NCj4gPiA+ICsgKiBAcGFy YW0gYmVoYXZpb3INCj4gPiA+ICsgKiAgIFJURV9SSU5HX1FVRVVFX0ZJWEVEOiAgICBFbnF1ZXVl IGEgZml4ZWQgbnVtYmVyIG9mIGl0ZW1zIGZyb20gYQ0KPiA+IHJpbmcNCj4gPiA+ICsgKiAgIFJU RV9SSU5HX1FVRVVFX1ZBUklBQkxFOiBFbnF1ZXVlIGFzIG1hbnkgaXRlbXMgYXMgcG9zc2libGUN Cj4gPiBmcm9tIHJpbmcNCj4gPiA+ICsgKiBAcGFyYW0gZnJlZV9zcGFjZQ0KPiA+ID4gKyAqICAg cmV0dXJucyB0aGUgYW1vdW50IG9mIHNwYWNlIGFmdGVyIHRoZSBlbnF1ZXVlIG9wZXJhdGlvbiBo YXMgZmluaXNoZWQNCj4gPiA+ICsgKiBAcmV0dXJuDQo+ID4gPiArICogICBBY3R1YWwgbnVtYmVy IG9mIG9iamVjdHMgZW5xdWV1ZWQuDQo+ID4gPiArICogICBJZiBiZWhhdmlvciA9PSBSVEVfUklO R19RVUVVRV9GSVhFRCwgdGhpcyB3aWxsIGJlIDAgb3IgbiBvbmx5Lg0KPiA+ID4gKyAqLw0KPiA+ ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludA0KPiA+ID4gK19fcnRl X3JpbmdfZG9fcnRzX2VucXVldWVfZWxlbShzdHJ1Y3QgcnRlX3JpbmcgKnIsIGNvbnN0IHZvaWQN Cj4gPiAqb2JqX3RhYmxlLA0KPiA+ID4gKwl1aW50MzJfdCBlc2l6ZSwgdWludDMyX3QgbiwgZW51 bSBydGVfcmluZ19xdWV1ZV9iZWhhdmlvciBiZWhhdmlvciwNCj4gPiA+ICsJdWludDMyX3QgKmZy ZWVfc3BhY2UpDQo+ID4gPiArew0KPiA+ID4gKwl1aW50MzJfdCBmcmVlLCBoZWFkOw0KPiA+ID4g Kw0KPiA+ID4gKwluID0gIF9fcnRlX3JpbmdfcnRzX21vdmVfcHJvZF9oZWFkKHIsIG4sIGJlaGF2 aW9yLCAmaGVhZCwgJmZyZWUpOw0KPiA+ID4gKw0KPiA+ID4gKwlpZiAobiAhPSAwKSB7DQo+ID4g PiArCQlfX3J0ZV9yaW5nX2VucXVldWVfZWxlbXMociwgaGVhZCwgb2JqX3RhYmxlLCBlc2l6ZSwg bik7DQo+ID4gPiArCQlfX3J0ZV9yaW5nX3J0c191cGRhdGVfdGFpbCgmci0+cnRzX3Byb2QpOw0K PiA+ID4gKwl9DQo+ID4gPiArDQo+ID4gPiArCWlmIChmcmVlX3NwYWNlICE9IE5VTEwpDQo+ID4g PiArCQkqZnJlZV9zcGFjZSA9IGZyZWUgLSBuOw0KPiA+ID4gKwlyZXR1cm4gbjsNCj4gPiA+ICt9 DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICogQGludGVybmFsIERlcXVldWUgc2V2ZXJh bCBvYmplY3RzIGZyb20gdGhlIFJUUyByaW5nLg0KPiA+ID4gKyAqDQo+ID4gPiArICogQHBhcmFt IHINCj4gPiA+ICsgKiAgIEEgcG9pbnRlciB0byB0aGUgcmluZyBzdHJ1Y3R1cmUuDQo+ID4gPiAr ICogQHBhcmFtIG9ial90YWJsZQ0KPiA+ID4gKyAqICAgQSBwb2ludGVyIHRvIGEgdGFibGUgb2Yg b2JqZWN0cy4NCj4gPiA+ICsgKiBAcGFyYW0gZXNpemUNCj4gPiA+ICsgKiAgIFRoZSBzaXplIG9m IHJpbmcgZWxlbWVudCwgaW4gYnl0ZXMuIEl0IG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Lg0KPiA+ ID4gKyAqICAgVGhpcyBtdXN0IGJlIHRoZSBzYW1lIHZhbHVlIHVzZWQgd2hpbGUgY3JlYXRpbmcg dGhlIHJpbmcuIE90aGVyd2lzZQ0KPiA+ID4gKyAqICAgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5l ZC4NCj4gPiA+ICsgKiBAcGFyYW0gbg0KPiA+ID4gKyAqICAgVGhlIG51bWJlciBvZiBvYmplY3Rz IHRvIHB1bGwgZnJvbSB0aGUgcmluZy4NCj4gPiA+ICsgKiBAcGFyYW0gYmVoYXZpb3INCj4gPiA+ ICsgKiAgIFJURV9SSU5HX1FVRVVFX0ZJWEVEOiAgICBEZXF1ZXVlIGEgZml4ZWQgbnVtYmVyIG9m IGl0ZW1zIGZyb20gYQ0KPiA+IHJpbmcNCj4gPiA+ICsgKiAgIFJURV9SSU5HX1FVRVVFX1ZBUklB QkxFOiBEZXF1ZXVlIGFzIG1hbnkgaXRlbXMgYXMgcG9zc2libGUNCj4gPiBmcm9tIHJpbmcNCj4g PiA+ICsgKiBAcGFyYW0gYXZhaWxhYmxlDQo+ID4gPiArICogICByZXR1cm5zIHRoZSBudW1iZXIg b2YgcmVtYWluaW5nIHJpbmcgZW50cmllcyBhZnRlciB0aGUgZGVxdWV1ZSBoYXMNCj4gPiBmaW5p c2hlZA0KPiA+ID4gKyAqIEByZXR1cm4NCj4gPiA+ICsgKiAgIC0gQWN0dWFsIG51bWJlciBvZiBv YmplY3RzIGRlcXVldWVkLg0KPiA+ID4gKyAqICAgICBJZiBiZWhhdmlvciA9PSBSVEVfUklOR19R VUVVRV9GSVhFRCwgdGhpcyB3aWxsIGJlIDAgb3IgbiBvbmx5Lg0KPiA+ID4gKyAqLw0KPiA+ID4g K3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludA0KPiA+ID4gK19fcnRlX3Jp bmdfZG9fcnRzX2RlcXVldWVfZWxlbShzdHJ1Y3QgcnRlX3JpbmcgKnIsIHZvaWQgKm9ial90YWJs ZSwNCj4gPiA+ICsJdWludDMyX3QgZXNpemUsIHVpbnQzMl90IG4sIGVudW0gcnRlX3JpbmdfcXVl dWVfYmVoYXZpb3IgYmVoYXZpb3IsDQo+ID4gPiArCXVpbnQzMl90ICphdmFpbGFibGUpDQo+ID4g PiArew0KPiA+ID4gKwl1aW50MzJfdCBlbnRyaWVzLCBoZWFkOw0KPiA+ID4gKw0KPiA+ID4gKwlu ID0gX19ydGVfcmluZ19ydHNfbW92ZV9jb25zX2hlYWQociwgbiwgYmVoYXZpb3IsICZoZWFkLA0K PiA+ICZlbnRyaWVzKTsNCj4gPiA+ICsNCj4gPiA+ICsJaWYgKG4gIT0gMCkgew0KPiA+ID4gKwkJ X19ydGVfcmluZ19kZXF1ZXVlX2VsZW1zKHIsIGhlYWQsIG9ial90YWJsZSwgZXNpemUsIG4pOw0K PiA+ID4gKwkJX19ydGVfcmluZ19ydHNfdXBkYXRlX3RhaWwoJnItPnJ0c19jb25zKTsNCj4gPiA+ ICsJfQ0KPiA+ID4gKw0KPiA+ID4gKwlpZiAoYXZhaWxhYmxlICE9IE5VTEwpDQo+ID4gPiArCQkq YXZhaWxhYmxlID0gZW50cmllcyAtIG47DQo+ID4gPiArCXJldHVybiBuOw0KPiA+ID4gK30NCj4g PiA+ICsNCj4gPiA+ICsjZW5kaWYgLyogX1JJTkdfUlRTX0VMRU1fUFZUX0hfICovDQo+ID4gPiBk aWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX2VsZW0uaA0KPiA+ID4gYi9saWIv bGlicnRlX3JpbmcvcnRlX3JpbmdfZWxlbS5oIGluZGV4IDU3MzQ0ZDQ3ZC4uMTE5YjVjMGI2IDEw MDY0NA0KPiA+ID4gLS0tIGEvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX2VsZW0uaA0KPiA+ID4g KysrIGIvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX2VsZW0uaA0KPiA+ID4gQEAgLTIxLDYgKzIx LDcgQEAgZXh0ZXJuICJDIiB7DQo+ID4gPiAgI2VuZGlmDQo+ID4gPg0KPiA+ID4gICNpbmNsdWRl IDxydGVfcmluZ19jb3JlLmg+DQo+ID4gPiArI2luY2x1ZGUgPHJpbmdfZWxlbV9wdnQuaD4NCj4g PiA+DQo+ID4gPiAgLyoqDQo+ID4gPiAgICogQ2FsY3VsYXRlIHRoZSBtZW1vcnkgc2l6ZSBuZWVk ZWQgZm9yIGEgcmluZyB3aXRoIGdpdmVuIGVsZW1lbnQNCj4gPiA+IHNpemUgQEAgLTEwNSwzNzkg KzEwNiw2IEBAIHNzaXplX3QNCj4gPiBydGVfcmluZ19nZXRfbWVtc2l6ZV9lbGVtKHVuc2lnbmVk DQo+ID4gPiBpbnQgZXNpemUsIHVuc2lnbmVkIGludCBjb3VudCk7ICBzdHJ1Y3QgcnRlX3Jpbmcg KnJ0ZV9yaW5nX2NyZWF0ZV9lbGVtKGNvbnN0DQo+ID4gY2hhciAqbmFtZSwgdW5zaWduZWQgaW50 IGVzaXplLA0KPiA+ID4gIAkJCXVuc2lnbmVkIGludCBjb3VudCwgaW50IHNvY2tldF9pZCwgdW5z aWduZWQgaW50IGZsYWdzKTsNCj4gPiA+DQo+ID4gPiAtc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxp bmUgdm9pZA0KPiA+ID4gLV9fcnRlX3JpbmdfZW5xdWV1ZV9lbGVtc18zMihzdHJ1Y3QgcnRlX3Jp bmcgKnIsIGNvbnN0IHVpbnQzMl90IHNpemUsDQo+ID4gPiAtCQl1aW50MzJfdCBpZHgsIGNvbnN0 IHZvaWQgKm9ial90YWJsZSwgdWludDMyX3QgbikNCj4gPiA+IC17DQo+ID4gPiAtCXVuc2lnbmVk IGludCBpOw0KPiA+ID4gLQl1aW50MzJfdCAqcmluZyA9ICh1aW50MzJfdCAqKSZyWzFdOw0KPiA+ ID4gLQljb25zdCB1aW50MzJfdCAqb2JqID0gKGNvbnN0IHVpbnQzMl90ICopb2JqX3RhYmxlOw0K PiA+ID4gLQlpZiAobGlrZWx5KGlkeCArIG4gPCBzaXplKSkgew0KPiA+ID4gLQkJZm9yIChpID0g MDsgaSA8IChuICYgfjB4Nyk7IGkgKz0gOCwgaWR4ICs9IDgpIHsNCj4gPiA+IC0JCQlyaW5nW2lk eF0gPSBvYmpbaV07DQo+ID4gPiAtCQkJcmluZ1tpZHggKyAxXSA9IG9ialtpICsgMV07DQo+ID4g PiAtCQkJcmluZ1tpZHggKyAyXSA9IG9ialtpICsgMl07DQo+ID4gPiAtCQkJcmluZ1tpZHggKyAz XSA9IG9ialtpICsgM107DQo+ID4gPiAtCQkJcmluZ1tpZHggKyA0XSA9IG9ialtpICsgNF07DQo+ ID4gPiAtCQkJcmluZ1tpZHggKyA1XSA9IG9ialtpICsgNV07DQo+ID4gPiAtCQkJcmluZ1tpZHgg KyA2XSA9IG9ialtpICsgNl07DQo+ID4gPiAtCQkJcmluZ1tpZHggKyA3XSA9IG9ialtpICsgN107 DQo+ID4gPiAtCQl9DQo+ID4gPiAtCQlzd2l0Y2ggKG4gJiAweDcpIHsNCj4gPiA+IC0JCWNhc2Ug NzoNCj4gPiA+IC0JCQlyaW5nW2lkeCsrXSA9IG9ialtpKytdOyAvKiBmYWxsdGhyb3VnaCAqLw0K PiA+ID4gLQkJY2FzZSA2Og0KPiA+ID4gLQkJCXJpbmdbaWR4KytdID0gb2JqW2krK107IC8qIGZh bGx0aHJvdWdoICovDQo+ID4gPiAtCQljYXNlIDU6DQo+ID4gPiAtCQkJcmluZ1tpZHgrK10gPSBv YmpbaSsrXTsgLyogZmFsbHRocm91Z2ggKi8NCj4gPiA+IC0JCWNhc2UgNDoNCj4gPiA+IC0JCQly aW5nW2lkeCsrXSA9IG9ialtpKytdOyAvKiBmYWxsdGhyb3VnaCAqLw0KPiA+ID4gLQkJY2FzZSAz Og0KPiA+ID4gLQkJCXJpbmdbaWR4KytdID0gb2JqW2krK107IC8qIGZhbGx0aHJvdWdoICovDQo+ ID4gPiAtCQljYXNlIDI6DQo+ID4gPiAtCQkJcmluZ1tpZHgrK10gPSBvYmpbaSsrXTsgLyogZmFs bHRocm91Z2ggKi8NCj4gPiA+IC0JCWNhc2UgMToNCj4gPiA+IC0JCQlyaW5nW2lkeCsrXSA9IG9i altpKytdOyAvKiBmYWxsdGhyb3VnaCAqLw0KPiA+ID4gLQkJfQ0KPiA+ID4gLQl9IGVsc2Ugew0K PiA+ID4gLQkJZm9yIChpID0gMDsgaWR4IDwgc2l6ZTsgaSsrLCBpZHgrKykNCj4gPiA+IC0JCQly aW5nW2lkeF0gPSBvYmpbaV07DQo+ID4gPiAtCQkvKiBTdGFydCBhdCB0aGUgYmVnaW5uaW5nICov DQo+ID4gPiAtCQlmb3IgKGlkeCA9IDA7IGkgPCBuOyBpKyssIGlkeCsrKQ0KPiA+ID4gLQkJCXJp bmdbaWR4XSA9IG9ialtpXTsNCj4gPiA+IC0JfQ0KPiA+ID4gLX0NCj4gPiA+IC0NCj4gPiA+IC1z dGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2b2lkDQo+ID4gPiAtX19ydGVfcmluZ19lbnF1ZXVl X2VsZW1zXzY0KHN0cnVjdCBydGVfcmluZyAqciwgdWludDMyX3QgcHJvZF9oZWFkLA0KPiA+ID4g LQkJY29uc3Qgdm9pZCAqb2JqX3RhYmxlLCB1aW50MzJfdCBuKQ0KPiA+ID4gLXsNCj4gPiA+IC0J dW5zaWduZWQgaW50IGk7DQo+ID4gPiAtCWNvbnN0IHVpbnQzMl90IHNpemUgPSByLT5zaXplOw0K PiA+ID4gLQl1aW50MzJfdCBpZHggPSBwcm9kX2hlYWQgJiByLT5tYXNrOw0KPiA+ID4gLQl1aW50 NjRfdCAqcmluZyA9ICh1aW50NjRfdCAqKSZyWzFdOw0KPiA+ID4gLQljb25zdCB1bmFsaWduZWRf dWludDY0X3QgKm9iaiA9IChjb25zdCB1bmFsaWduZWRfdWludDY0X3QNCj4gPiAqKW9ial90YWJs ZTsNCj4gPiA+IC0JaWYgKGxpa2VseShpZHggKyBuIDwgc2l6ZSkpIHsNCj4gPiA+IC0JCWZvciAo aSA9IDA7IGkgPCAobiAmIH4weDMpOyBpICs9IDQsIGlkeCArPSA0KSB7DQo+ID4gPiAtCQkJcmlu Z1tpZHhdID0gb2JqW2ldOw0KPiA+ID4gLQkJCXJpbmdbaWR4ICsgMV0gPSBvYmpbaSArIDFdOw0K PiA+ID4gLQkJCXJpbmdbaWR4ICsgMl0gPSBvYmpbaSArIDJdOw0KPiA+ID4gLQkJCXJpbmdbaWR4 ICsgM10gPSBvYmpbaSArIDNdOw0KPiA+ID4gLQkJfQ0KPiA+ID4gLQkJc3dpdGNoIChuICYgMHgz KSB7DQo+ID4gPiAtCQljYXNlIDM6DQo+ID4gPiAtCQkJcmluZ1tpZHgrK10gPSBvYmpbaSsrXTsg LyogZmFsbHRocm91Z2ggKi8NCj4gPiA+IC0JCWNhc2UgMjoNCj4gPiA+IC0JCQlyaW5nW2lkeCsr XSA9IG9ialtpKytdOyAvKiBmYWxsdGhyb3VnaCAqLw0KPiA+ID4gLQkJY2FzZSAxOg0KPiA+ID4g LQkJCXJpbmdbaWR4KytdID0gb2JqW2krK107DQo+ID4gPiAtCQl9DQo+ID4gPiAtCX0gZWxzZSB7 DQo+ID4gPiAtCQlmb3IgKGkgPSAwOyBpZHggPCBzaXplOyBpKyssIGlkeCsrKQ0KPiA+ID4gLQkJ CXJpbmdbaWR4XSA9IG9ialtpXTsNCj4gPiA+IC0JCS8qIFN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcg Ki8NCj4gPiA+IC0JCWZvciAoaWR4ID0gMDsgaSA8IG47IGkrKywgaWR4KyspDQo+ID4gPiAtCQkJ cmluZ1tpZHhdID0gb2JqW2ldOw0KPiA+ID4gLQl9DQo+ID4gPiAtfQ0KPiA+ID4gLQ0KPiA+ID4g LXN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQNCj4gPiA+IC1fX3J0ZV9yaW5nX2VucXVl dWVfZWxlbXNfMTI4KHN0cnVjdCBydGVfcmluZyAqciwgdWludDMyX3QgcHJvZF9oZWFkLA0KPiA+ ID4gLQkJY29uc3Qgdm9pZCAqb2JqX3RhYmxlLCB1aW50MzJfdCBuKQ0KPiA+ID4gLXsNCj4gPiA+ IC0JdW5zaWduZWQgaW50IGk7DQo+ID4gPiAtCWNvbnN0IHVpbnQzMl90IHNpemUgPSByLT5zaXpl Ow0KPiA+ID4gLQl1aW50MzJfdCBpZHggPSBwcm9kX2hlYWQgJiByLT5tYXNrOw0KPiA+ID4gLQly dGVfaW50MTI4X3QgKnJpbmcgPSAocnRlX2ludDEyOF90ICopJnJbMV07DQo+ID4gPiAtCWNvbnN0 IHJ0ZV9pbnQxMjhfdCAqb2JqID0gKGNvbnN0IHJ0ZV9pbnQxMjhfdCAqKW9ial90YWJsZTsNCj4g PiA+IC0JaWYgKGxpa2VseShpZHggKyBuIDwgc2l6ZSkpIHsNCj4gPiA+IC0JCWZvciAoaSA9IDA7 IGkgPCAobiAmIH4weDEpOyBpICs9IDIsIGlkeCArPSAyKQ0KPiA+ID4gLQkJCW1lbWNweSgodm9p ZCAqKShyaW5nICsgaWR4KSwNCj4gPiA+IC0JCQkJKGNvbnN0IHZvaWQgKikob2JqICsgaSksIDMy KTsNCj4gPiA+IC0JCXN3aXRjaCAobiAmIDB4MSkgew0KPiA+ID4gLQkJY2FzZSAxOg0KPiA+ID4g LQkJCW1lbWNweSgodm9pZCAqKShyaW5nICsgaWR4KSwNCj4gPiA+IC0JCQkJKGNvbnN0IHZvaWQg Kikob2JqICsgaSksIDE2KTsNCj4gPiA+IC0JCX0NCj4gPiA+IC0JfSBlbHNlIHsNCj4gPiA+IC0J CWZvciAoaSA9IDA7IGlkeCA8IHNpemU7IGkrKywgaWR4KyspDQo+ID4gPiAtCQkJbWVtY3B5KCh2 b2lkICopKHJpbmcgKyBpZHgpLA0KPiA+ID4gLQkJCQkoY29uc3Qgdm9pZCAqKShvYmogKyBpKSwg MTYpOw0KPiA+ID4gLQkJLyogU3RhcnQgYXQgdGhlIGJlZ2lubmluZyAqLw0KPiA+ID4gLQkJZm9y IChpZHggPSAwOyBpIDwgbjsgaSsrLCBpZHgrKykNCj4gPiA+IC0JCQltZW1jcHkoKHZvaWQgKiko cmluZyArIGlkeCksDQo+ID4gPiAtCQkJCShjb25zdCB2b2lkICopKG9iaiArIGkpLCAxNik7DQo+ ID4gPiAtCX0NCj4gPiA+IC19DQo+ID4gPiAtDQo+ID4gPiAtLyogdGhlIGFjdHVhbCBlbnF1ZXVl IG9mIGVsZW1lbnRzIG9uIHRoZSByaW5nLg0KPiA+ID4gLSAqIFBsYWNlZCBoZXJlIHNpbmNlIGlk ZW50aWNhbCBjb2RlIG5lZWRlZCBpbiBib3RoDQo+ID4gPiAtICogc2luZ2xlIGFuZCBtdWx0aSBw cm9kdWNlciBlbnF1ZXVlIGZ1bmN0aW9ucy4NCj4gPiA+IC0gKi8NCj4gPiA+IC1zdGF0aWMgX19y dGVfYWx3YXlzX2lubGluZSB2b2lkDQo+ID4gPiAtX19ydGVfcmluZ19lbnF1ZXVlX2VsZW1zKHN0 cnVjdCBydGVfcmluZyAqciwgdWludDMyX3QgcHJvZF9oZWFkLA0KPiA+ID4gLQkJY29uc3Qgdm9p ZCAqb2JqX3RhYmxlLCB1aW50MzJfdCBlc2l6ZSwgdWludDMyX3QgbnVtKQ0KPiA+ID4gLXsNCj4g PiA+IC0JLyogOEIgYW5kIDE2QiBjb3BpZXMgaW1wbGVtZW50ZWQgaW5kaXZpZHVhbGx5IHRvIHJl dGFpbg0KPiA+ID4gLQkgKiB0aGUgY3VycmVudCBwZXJmb3JtYW5jZS4NCj4gPiA+IC0JICovDQo+ ID4gPiAtCWlmIChlc2l6ZSA9PSA4KQ0KPiA+ID4gLQkJX19ydGVfcmluZ19lbnF1ZXVlX2VsZW1z XzY0KHIsIHByb2RfaGVhZCwgb2JqX3RhYmxlLA0KPiA+IG51bSk7DQo+ID4gPiAtCWVsc2UgaWYg KGVzaXplID09IDE2KQ0KPiA+ID4gLQkJX19ydGVfcmluZ19lbnF1ZXVlX2VsZW1zXzEyOChyLCBw cm9kX2hlYWQsIG9ial90YWJsZSwNCj4gPiBudW0pOw0KPiA+ID4gLQllbHNlIHsNCj4gPiA+IC0J CXVpbnQzMl90IGlkeCwgc2NhbGUsIG5yX2lkeCwgbnJfbnVtLCBucl9zaXplOw0KPiA+ID4gLQ0K PiA+ID4gLQkJLyogTm9ybWFsaXplIHRvIHVpbnQzMl90ICovDQo+ID4gPiAtCQlzY2FsZSA9IGVz aXplIC8gc2l6ZW9mKHVpbnQzMl90KTsNCj4gPiA+IC0JCW5yX251bSA9IG51bSAqIHNjYWxlOw0K PiA+ID4gLQkJaWR4ID0gcHJvZF9oZWFkICYgci0+bWFzazsNCj4gPiA+IC0JCW5yX2lkeCA9IGlk eCAqIHNjYWxlOw0KPiA+ID4gLQkJbnJfc2l6ZSA9IHItPnNpemUgKiBzY2FsZTsNCj4gPiA+IC0J CV9fcnRlX3JpbmdfZW5xdWV1ZV9lbGVtc18zMihyLCBucl9zaXplLCBucl9pZHgsDQo+ID4gPiAt CQkJCW9ial90YWJsZSwgbnJfbnVtKTsNCj4gPiA+IC0JfQ0KPiA+ID4gLX0NCj4gPiA+IC0NCj4g PiA+IC1zdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2b2lkDQo+ID4gPiAtX19ydGVfcmluZ19k ZXF1ZXVlX2VsZW1zXzMyKHN0cnVjdCBydGVfcmluZyAqciwgY29uc3QgdWludDMyX3Qgc2l6ZSwN Cj4gPiA+IC0JCXVpbnQzMl90IGlkeCwgdm9pZCAqb2JqX3RhYmxlLCB1aW50MzJfdCBuKQ0KPiA+ ID4gLXsNCj4gPiA+IC0JdW5zaWduZWQgaW50IGk7DQo+ID4gPiAtCXVpbnQzMl90ICpyaW5nID0g KHVpbnQzMl90ICopJnJbMV07DQo+ID4gPiAtCXVpbnQzMl90ICpvYmogPSAodWludDMyX3QgKilv YmpfdGFibGU7DQo+ID4gPiAtCWlmIChsaWtlbHkoaWR4ICsgbiA8IHNpemUpKSB7DQo+ID4gPiAt CQlmb3IgKGkgPSAwOyBpIDwgKG4gJiB+MHg3KTsgaSArPSA4LCBpZHggKz0gOCkgew0KPiA+ID4g LQkJCW9ialtpXSA9IHJpbmdbaWR4XTsNCj4gPiA+IC0JCQlvYmpbaSArIDFdID0gcmluZ1tpZHgg KyAxXTsNCj4gPiA+IC0JCQlvYmpbaSArIDJdID0gcmluZ1tpZHggKyAyXTsNCj4gPiA+IC0JCQlv YmpbaSArIDNdID0gcmluZ1tpZHggKyAzXTsNCj4gPiA+IC0JCQlvYmpbaSArIDRdID0gcmluZ1tp ZHggKyA0XTsNCj4gPiA+IC0JCQlvYmpbaSArIDVdID0gcmluZ1tpZHggKyA1XTsNCj4gPiA+IC0J CQlvYmpbaSArIDZdID0gcmluZ1tpZHggKyA2XTsNCj4gPiA+IC0JCQlvYmpbaSArIDddID0gcmlu Z1tpZHggKyA3XTsNCj4gPiA+IC0JCX0NCj4gPiA+IC0JCXN3aXRjaCAobiAmIDB4Nykgew0KPiA+ ID4gLQkJY2FzZSA3Og0KPiA+ID4gLQkJCW9ialtpKytdID0gcmluZ1tpZHgrK107IC8qIGZhbGx0 aHJvdWdoICovDQo+ID4gPiAtCQljYXNlIDY6DQo+ID4gPiAtCQkJb2JqW2krK10gPSByaW5nW2lk eCsrXTsgLyogZmFsbHRocm91Z2ggKi8NCj4gPiA+IC0JCWNhc2UgNToNCj4gPiA+IC0JCQlvYmpb aSsrXSA9IHJpbmdbaWR4KytdOyAvKiBmYWxsdGhyb3VnaCAqLw0KPiA+ID4gLQkJY2FzZSA0Og0K PiA+ID4gLQkJCW9ialtpKytdID0gcmluZ1tpZHgrK107IC8qIGZhbGx0aHJvdWdoICovDQo+ID4g PiAtCQljYXNlIDM6DQo+ID4gPiAtCQkJb2JqW2krK10gPSByaW5nW2lkeCsrXTsgLyogZmFsbHRo cm91Z2ggKi8NCj4gPiA+IC0JCWNhc2UgMjoNCj4gPiA+IC0JCQlvYmpbaSsrXSA9IHJpbmdbaWR4 KytdOyAvKiBmYWxsdGhyb3VnaCAqLw0KPiA+ID4gLQkJY2FzZSAxOg0KPiA+ID4gLQkJCW9ialtp KytdID0gcmluZ1tpZHgrK107IC8qIGZhbGx0aHJvdWdoICovDQo+ID4gPiAtCQl9DQo+ID4gPiAt CX0gZWxzZSB7DQo+ID4gPiAtCQlmb3IgKGkgPSAwOyBpZHggPCBzaXplOyBpKyssIGlkeCsrKQ0K PiA+ID4gLQkJCW9ialtpXSA9IHJpbmdbaWR4XTsNCj4gPiA+IC0JCS8qIFN0YXJ0IGF0IHRoZSBi ZWdpbm5pbmcgKi8NCj4gPiA+IC0JCWZvciAoaWR4ID0gMDsgaSA8IG47IGkrKywgaWR4KyspDQo+ ID4gPiAtCQkJb2JqW2ldID0gcmluZ1tpZHhdOw0KPiA+ID4gLQl9DQo+ID4gPiAtfQ0KPiA+ID4g LQ0KPiA+ID4gLXN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQNCj4gPiA+IC1fX3J0ZV9y aW5nX2RlcXVldWVfZWxlbXNfNjQoc3RydWN0IHJ0ZV9yaW5nICpyLCB1aW50MzJfdCBwcm9kX2hl YWQsDQo+ID4gPiAtCQl2b2lkICpvYmpfdGFibGUsIHVpbnQzMl90IG4pDQo+ID4gPiAtew0KPiA+ ID4gLQl1bnNpZ25lZCBpbnQgaTsNCj4gPiA+IC0JY29uc3QgdWludDMyX3Qgc2l6ZSA9IHItPnNp emU7DQo+ID4gPiAtCXVpbnQzMl90IGlkeCA9IHByb2RfaGVhZCAmIHItPm1hc2s7DQo+ID4gPiAt CXVpbnQ2NF90ICpyaW5nID0gKHVpbnQ2NF90ICopJnJbMV07DQo+ID4gPiAtCXVuYWxpZ25lZF91 aW50NjRfdCAqb2JqID0gKHVuYWxpZ25lZF91aW50NjRfdCAqKW9ial90YWJsZTsNCj4gPiA+IC0J aWYgKGxpa2VseShpZHggKyBuIDwgc2l6ZSkpIHsNCj4gPiA+IC0JCWZvciAoaSA9IDA7IGkgPCAo biAmIH4weDMpOyBpICs9IDQsIGlkeCArPSA0KSB7DQo+ID4gPiAtCQkJb2JqW2ldID0gcmluZ1tp ZHhdOw0KPiA+ID4gLQkJCW9ialtpICsgMV0gPSByaW5nW2lkeCArIDFdOw0KPiA+ID4gLQkJCW9i altpICsgMl0gPSByaW5nW2lkeCArIDJdOw0KPiA+ID4gLQkJCW9ialtpICsgM10gPSByaW5nW2lk eCArIDNdOw0KPiA+ID4gLQkJfQ0KPiA+ID4gLQkJc3dpdGNoIChuICYgMHgzKSB7DQo+ID4gPiAt CQljYXNlIDM6DQo+ID4gPiAtCQkJb2JqW2krK10gPSByaW5nW2lkeCsrXTsgLyogZmFsbHRocm91 Z2ggKi8NCj4gPiA+IC0JCWNhc2UgMjoNCj4gPiA+IC0JCQlvYmpbaSsrXSA9IHJpbmdbaWR4Kytd OyAvKiBmYWxsdGhyb3VnaCAqLw0KPiA+ID4gLQkJY2FzZSAxOg0KPiA+ID4gLQkJCW9ialtpKytd ID0gcmluZ1tpZHgrK107IC8qIGZhbGx0aHJvdWdoICovDQo+ID4gPiAtCQl9DQo+ID4gPiAtCX0g ZWxzZSB7DQo+ID4gPiAtCQlmb3IgKGkgPSAwOyBpZHggPCBzaXplOyBpKyssIGlkeCsrKQ0KPiA+ ID4gLQkJCW9ialtpXSA9IHJpbmdbaWR4XTsNCj4gPiA+IC0JCS8qIFN0YXJ0IGF0IHRoZSBiZWdp bm5pbmcgKi8NCj4gPiA+IC0JCWZvciAoaWR4ID0gMDsgaSA8IG47IGkrKywgaWR4KyspDQo+ID4g PiAtCQkJb2JqW2ldID0gcmluZ1tpZHhdOw0KPiA+ID4gLQl9DQo+ID4gPiAtfQ0KPiA+ID4gLQ0K PiA+ID4gLXN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQNCj4gPiA+IC1fX3J0ZV9yaW5n X2RlcXVldWVfZWxlbXNfMTI4KHN0cnVjdCBydGVfcmluZyAqciwgdWludDMyX3QgcHJvZF9oZWFk LA0KPiA+ID4gLQkJdm9pZCAqb2JqX3RhYmxlLCB1aW50MzJfdCBuKQ0KPiA+ID4gLXsNCj4gPiA+ IC0JdW5zaWduZWQgaW50IGk7DQo+ID4gPiAtCWNvbnN0IHVpbnQzMl90IHNpemUgPSByLT5zaXpl Ow0KPiA+ID4gLQl1aW50MzJfdCBpZHggPSBwcm9kX2hlYWQgJiByLT5tYXNrOw0KPiA+ID4gLQly dGVfaW50MTI4X3QgKnJpbmcgPSAocnRlX2ludDEyOF90ICopJnJbMV07DQo+ID4gPiAtCXJ0ZV9p bnQxMjhfdCAqb2JqID0gKHJ0ZV9pbnQxMjhfdCAqKW9ial90YWJsZTsNCj4gPiA+IC0JaWYgKGxp a2VseShpZHggKyBuIDwgc2l6ZSkpIHsNCj4gPiA+IC0JCWZvciAoaSA9IDA7IGkgPCAobiAmIH4w eDEpOyBpICs9IDIsIGlkeCArPSAyKQ0KPiA+ID4gLQkJCW1lbWNweSgodm9pZCAqKShvYmogKyBp KSwgKHZvaWQgKikocmluZyArIGlkeCksIDMyKTsNCj4gPiA+IC0JCXN3aXRjaCAobiAmIDB4MSkg ew0KPiA+ID4gLQkJY2FzZSAxOg0KPiA+ID4gLQkJCW1lbWNweSgodm9pZCAqKShvYmogKyBpKSwg KHZvaWQgKikocmluZyArIGlkeCksIDE2KTsNCj4gPiA+IC0JCX0NCj4gPiA+IC0JfSBlbHNlIHsN Cj4gPiA+IC0JCWZvciAoaSA9IDA7IGlkeCA8IHNpemU7IGkrKywgaWR4KyspDQo+ID4gPiAtCQkJ bWVtY3B5KCh2b2lkICopKG9iaiArIGkpLCAodm9pZCAqKShyaW5nICsgaWR4KSwgMTYpOw0KPiA+ ID4gLQkJLyogU3RhcnQgYXQgdGhlIGJlZ2lubmluZyAqLw0KPiA+ID4gLQkJZm9yIChpZHggPSAw OyBpIDwgbjsgaSsrLCBpZHgrKykNCj4gPiA+IC0JCQltZW1jcHkoKHZvaWQgKikob2JqICsgaSks ICh2b2lkICopKHJpbmcgKyBpZHgpLCAxNik7DQo+ID4gPiAtCX0NCj4gPiA+IC19DQo+ID4gPiAt DQo+ID4gPiAtLyogdGhlIGFjdHVhbCBkZXF1ZXVlIG9mIGVsZW1lbnRzIGZyb20gdGhlIHJpbmcu DQo+ID4gPiAtICogUGxhY2VkIGhlcmUgc2luY2UgaWRlbnRpY2FsIGNvZGUgbmVlZGVkIGluIGJv dGgNCj4gPiA+IC0gKiBzaW5nbGUgYW5kIG11bHRpIHByb2R1Y2VyIGVucXVldWUgZnVuY3Rpb25z Lg0KPiA+ID4gLSAqLw0KPiA+ID4gLXN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQNCj4g PiA+IC1fX3J0ZV9yaW5nX2RlcXVldWVfZWxlbXMoc3RydWN0IHJ0ZV9yaW5nICpyLCB1aW50MzJf dCBjb25zX2hlYWQsDQo+ID4gPiAtCQl2b2lkICpvYmpfdGFibGUsIHVpbnQzMl90IGVzaXplLCB1 aW50MzJfdCBudW0pDQo+ID4gPiAtew0KPiA+ID4gLQkvKiA4QiBhbmQgMTZCIGNvcGllcyBpbXBs ZW1lbnRlZCBpbmRpdmlkdWFsbHkgdG8gcmV0YWluDQo+ID4gPiAtCSAqIHRoZSBjdXJyZW50IHBl cmZvcm1hbmNlLg0KPiA+ID4gLQkgKi8NCj4gPiA+IC0JaWYgKGVzaXplID09IDgpDQo+ID4gPiAt CQlfX3J0ZV9yaW5nX2RlcXVldWVfZWxlbXNfNjQociwgY29uc19oZWFkLCBvYmpfdGFibGUsDQo+ ID4gbnVtKTsNCj4gPiA+IC0JZWxzZSBpZiAoZXNpemUgPT0gMTYpDQo+ID4gPiAtCQlfX3J0ZV9y aW5nX2RlcXVldWVfZWxlbXNfMTI4KHIsIGNvbnNfaGVhZCwgb2JqX3RhYmxlLA0KPiA+IG51bSk7 DQo+ID4gPiAtCWVsc2Ugew0KPiA+ID4gLQkJdWludDMyX3QgaWR4LCBzY2FsZSwgbnJfaWR4LCBu cl9udW0sIG5yX3NpemU7DQo+ID4gPiAtDQo+ID4gPiAtCQkvKiBOb3JtYWxpemUgdG8gdWludDMy X3QgKi8NCj4gPiA+IC0JCXNjYWxlID0gZXNpemUgLyBzaXplb2YodWludDMyX3QpOw0KPiA+ID4g LQkJbnJfbnVtID0gbnVtICogc2NhbGU7DQo+ID4gPiAtCQlpZHggPSBjb25zX2hlYWQgJiByLT5t YXNrOw0KPiA+ID4gLQkJbnJfaWR4ID0gaWR4ICogc2NhbGU7DQo+ID4gPiAtCQlucl9zaXplID0g ci0+c2l6ZSAqIHNjYWxlOw0KPiA+ID4gLQkJX19ydGVfcmluZ19kZXF1ZXVlX2VsZW1zXzMyKHIs IG5yX3NpemUsIG5yX2lkeCwNCj4gPiA+IC0JCQkJb2JqX3RhYmxlLCBucl9udW0pOw0KPiA+ID4g LQl9DQo+ID4gPiAtfQ0KPiA+ID4gLQ0KPiA+ID4gLS8qIEJldHdlZW4gbG9hZCBhbmQgbG9hZC4g dGhlcmUgbWlnaHQgYmUgY3B1IHJlb3JkZXIgaW4gd2VhayBtb2RlbA0KPiA+ID4gLSAqIChwb3dl cnBjL2FybSkuDQo+ID4gPiAtICogVGhlcmUgYXJlIDIgY2hvaWNlcyBmb3IgdGhlIHVzZXJzDQo+ ID4gPiAtICogMS51c2Ugcm1iKCkgbWVtb3J5IGJhcnJpZXINCj4gPiA+IC0gKiAyLnVzZSBvbmUt ZGlyZWN0aW9uIGxvYWRfYWNxdWlyZS9zdG9yZV9yZWxlYXNlIGJhcnJpZXINCj4gPiA+IC0gKiBJ dCBkZXBlbmRzIG9uIHBlcmZvcm1hbmNlIHRlc3QgcmVzdWx0cy4NCj4gPiA+IC0gKiBCeSBkZWZh dWx0LCBtb3ZlIGNvbW1vbiBmdW5jdGlvbnMgdG8gcnRlX3JpbmdfZ2VuZXJpYy5oDQo+ID4gPiAt ICovDQo+ID4gPiAtI2lmZGVmIFJURV9VU0VfQzExX01FTV9NT0RFTA0KPiA+ID4gLSNpbmNsdWRl ICJydGVfcmluZ19jMTFfbWVtLmgiDQo+ID4gPiAtI2Vsc2UNCj4gPiA+IC0jaW5jbHVkZSAicnRl X3JpbmdfZ2VuZXJpYy5oIg0KPiA+ID4gLSNlbmRpZg0KPiA+ID4gLQ0KPiA+ID4gLS8qKg0KPiA+ ID4gLSAqIEBpbnRlcm5hbCBFbnF1ZXVlIHNldmVyYWwgb2JqZWN0cyBvbiB0aGUgcmluZw0KPiA+ ID4gLSAqDQo+ID4gPiAtICogQHBhcmFtIHINCj4gPiA+IC0gKiAgIEEgcG9pbnRlciB0byB0aGUg cmluZyBzdHJ1Y3R1cmUuDQo+ID4gPiAtICogQHBhcmFtIG9ial90YWJsZQ0KPiA+ID4gLSAqICAg QSBwb2ludGVyIHRvIGEgdGFibGUgb2Ygb2JqZWN0cy4NCj4gPiA+IC0gKiBAcGFyYW0gZXNpemUN Cj4gPiA+IC0gKiAgIFRoZSBzaXplIG9mIHJpbmcgZWxlbWVudCwgaW4gYnl0ZXMuIEl0IG11c3Qg YmUgYSBtdWx0aXBsZSBvZiA0Lg0KPiA+ID4gLSAqICAgVGhpcyBtdXN0IGJlIHRoZSBzYW1lIHZh bHVlIHVzZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHJpbmcuIE90aGVyd2lzZQ0KPiA+ID4gLSAqICAg dGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZC4NCj4gPiA+IC0gKiBAcGFyYW0gbg0KPiA+ID4gLSAq ICAgVGhlIG51bWJlciBvZiBvYmplY3RzIHRvIGFkZCBpbiB0aGUgcmluZyBmcm9tIHRoZSBvYmpf dGFibGUuDQo+ID4gPiAtICogQHBhcmFtIGJlaGF2aW9yDQo+ID4gPiAtICogICBSVEVfUklOR19R VUVVRV9GSVhFRDogICAgRW5xdWV1ZSBhIGZpeGVkIG51bWJlciBvZiBpdGVtcyBmcm9tIGENCj4g PiByaW5nDQo+ID4gPiAtICogICBSVEVfUklOR19RVUVVRV9WQVJJQUJMRTogRW5xdWV1ZSBhcyBt YW55IGl0ZW1zIGFzIHBvc3NpYmxlDQo+ID4gZnJvbSByaW5nDQo+ID4gPiAtICogQHBhcmFtIGlz X3NwDQo+ID4gPiAtICogICBJbmRpY2F0ZXMgd2hldGhlciB0byB1c2Ugc2luZ2xlIHByb2R1Y2Vy IG9yIG11bHRpLXByb2R1Y2VyIGhlYWQNCj4gPiB1cGRhdGUNCj4gPiA+IC0gKiBAcGFyYW0gZnJl ZV9zcGFjZQ0KPiA+ID4gLSAqICAgcmV0dXJucyB0aGUgYW1vdW50IG9mIHNwYWNlIGFmdGVyIHRo ZSBlbnF1ZXVlIG9wZXJhdGlvbiBoYXMgZmluaXNoZWQNCj4gPiA+IC0gKiBAcmV0dXJuDQo+ID4g PiAtICogICBBY3R1YWwgbnVtYmVyIG9mIG9iamVjdHMgZW5xdWV1ZWQuDQo+ID4gPiAtICogICBJ ZiBiZWhhdmlvciA9PSBSVEVfUklOR19RVUVVRV9GSVhFRCwgdGhpcyB3aWxsIGJlIDAgb3IgbiBv bmx5Lg0KPiA+ID4gLSAqLw0KPiA+ID4gLXN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHVuc2ln bmVkIGludA0KPiA+ID4gLV9fcnRlX3JpbmdfZG9fZW5xdWV1ZV9lbGVtKHN0cnVjdCBydGVfcmlu ZyAqciwgY29uc3Qgdm9pZCAqb2JqX3RhYmxlLA0KPiA+ID4gLQkJdW5zaWduZWQgaW50IGVzaXpl LCB1bnNpZ25lZCBpbnQgbiwNCj4gPiA+IC0JCWVudW0gcnRlX3JpbmdfcXVldWVfYmVoYXZpb3Ig YmVoYXZpb3IsIHVuc2lnbmVkIGludCBpc19zcCwNCj4gPiA+IC0JCXVuc2lnbmVkIGludCAqZnJl ZV9zcGFjZSkNCj4gPiA+IC17DQo+ID4gPiAtCXVpbnQzMl90IHByb2RfaGVhZCwgcHJvZF9uZXh0 Ow0KPiA+ID4gLQl1aW50MzJfdCBmcmVlX2VudHJpZXM7DQo+ID4gPiAtDQo+ID4gPiAtCW4gPSBf X3J0ZV9yaW5nX21vdmVfcHJvZF9oZWFkKHIsIGlzX3NwLCBuLCBiZWhhdmlvciwNCj4gPiA+IC0J CQkmcHJvZF9oZWFkLCAmcHJvZF9uZXh0LCAmZnJlZV9lbnRyaWVzKTsNCj4gPiA+IC0JaWYgKG4g PT0gMCkNCj4gPiA+IC0JCWdvdG8gZW5kOw0KPiA+ID4gLQ0KPiA+ID4gLQlfX3J0ZV9yaW5nX2Vu cXVldWVfZWxlbXMociwgcHJvZF9oZWFkLCBvYmpfdGFibGUsIGVzaXplLCBuKTsNCj4gPiA+IC0N Cj4gPiA+IC0JX19ydGVfcmluZ191cGRhdGVfdGFpbCgmci0+cHJvZCwgcHJvZF9oZWFkLCBwcm9k X25leHQsIGlzX3NwLCAxKTsNCj4gPiA+IC1lbmQ6DQo+ID4gPiAtCWlmIChmcmVlX3NwYWNlICE9 IE5VTEwpDQo+ID4gPiAtCQkqZnJlZV9zcGFjZSA9IGZyZWVfZW50cmllcyAtIG47DQo+ID4gPiAt CXJldHVybiBuOw0KPiA+ID4gLX0NCj4gPiA+IC0NCj4gPiA+IC0vKioNCj4gPiA+IC0gKiBAaW50 ZXJuYWwgRGVxdWV1ZSBzZXZlcmFsIG9iamVjdHMgZnJvbSB0aGUgcmluZw0KPiA+ID4gLSAqDQo+ ID4gPiAtICogQHBhcmFtIHINCj4gPiA+IC0gKiAgIEEgcG9pbnRlciB0byB0aGUgcmluZyBzdHJ1 Y3R1cmUuDQo+ID4gPiAtICogQHBhcmFtIG9ial90YWJsZQ0KPiA+ID4gLSAqICAgQSBwb2ludGVy IHRvIGEgdGFibGUgb2Ygb2JqZWN0cy4NCj4gPiA+IC0gKiBAcGFyYW0gZXNpemUNCj4gPiA+IC0g KiAgIFRoZSBzaXplIG9mIHJpbmcgZWxlbWVudCwgaW4gYnl0ZXMuIEl0IG11c3QgYmUgYSBtdWx0 aXBsZSBvZiA0Lg0KPiA+ID4gLSAqICAgVGhpcyBtdXN0IGJlIHRoZSBzYW1lIHZhbHVlIHVzZWQg d2hpbGUgY3JlYXRpbmcgdGhlIHJpbmcuIE90aGVyd2lzZQ0KPiA+ID4gLSAqICAgdGhlIHJlc3Vs dHMgYXJlIHVuZGVmaW5lZC4NCj4gPiA+IC0gKiBAcGFyYW0gbg0KPiA+ID4gLSAqICAgVGhlIG51 bWJlciBvZiBvYmplY3RzIHRvIHB1bGwgZnJvbSB0aGUgcmluZy4NCj4gPiA+IC0gKiBAcGFyYW0g YmVoYXZpb3INCj4gPiA+IC0gKiAgIFJURV9SSU5HX1FVRVVFX0ZJWEVEOiAgICBEZXF1ZXVlIGEg Zml4ZWQgbnVtYmVyIG9mIGl0ZW1zIGZyb20gYQ0KPiA+IHJpbmcNCj4gPiA+IC0gKiAgIFJURV9S SU5HX1FVRVVFX1ZBUklBQkxFOiBEZXF1ZXVlIGFzIG1hbnkgaXRlbXMgYXMgcG9zc2libGUNCj4g PiBmcm9tIHJpbmcNCj4gPiA+IC0gKiBAcGFyYW0gaXNfc2MNCj4gPiA+IC0gKiAgIEluZGljYXRl cyB3aGV0aGVyIHRvIHVzZSBzaW5nbGUgY29uc3VtZXIgb3IgbXVsdGktY29uc3VtZXIgaGVhZA0K PiA+IHVwZGF0ZQ0KPiA+ID4gLSAqIEBwYXJhbSBhdmFpbGFibGUNCj4gPiA+IC0gKiAgIHJldHVy bnMgdGhlIG51bWJlciBvZiByZW1haW5pbmcgcmluZyBlbnRyaWVzIGFmdGVyIHRoZSBkZXF1ZXVl IGhhcw0KPiA+IGZpbmlzaGVkDQo+ID4gPiAtICogQHJldHVybg0KPiA+ID4gLSAqICAgLSBBY3R1 YWwgbnVtYmVyIG9mIG9iamVjdHMgZGVxdWV1ZWQuDQo+ID4gPiAtICogICAgIElmIGJlaGF2aW9y ID09IFJURV9SSU5HX1FVRVVFX0ZJWEVELCB0aGlzIHdpbGwgYmUgMCBvciBuIG9ubHkuDQo+ID4g PiAtICovDQo+ID4gPiAtc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50DQo+ ID4gPiAtX19ydGVfcmluZ19kb19kZXF1ZXVlX2VsZW0oc3RydWN0IHJ0ZV9yaW5nICpyLCB2b2lk ICpvYmpfdGFibGUsDQo+ID4gPiAtCQl1bnNpZ25lZCBpbnQgZXNpemUsIHVuc2lnbmVkIGludCBu LA0KPiA+ID4gLQkJZW51bSBydGVfcmluZ19xdWV1ZV9iZWhhdmlvciBiZWhhdmlvciwgdW5zaWdu ZWQgaW50IGlzX3NjLA0KPiA+ID4gLQkJdW5zaWduZWQgaW50ICphdmFpbGFibGUpDQo+ID4gPiAt ew0KPiA+ID4gLQl1aW50MzJfdCBjb25zX2hlYWQsIGNvbnNfbmV4dDsNCj4gPiA+IC0JdWludDMy X3QgZW50cmllczsNCj4gPiA+IC0NCj4gPiA+IC0JbiA9IF9fcnRlX3JpbmdfbW92ZV9jb25zX2hl YWQociwgKGludClpc19zYywgbiwgYmVoYXZpb3IsDQo+ID4gPiAtCQkJJmNvbnNfaGVhZCwgJmNv bnNfbmV4dCwgJmVudHJpZXMpOw0KPiA+ID4gLQlpZiAobiA9PSAwKQ0KPiA+ID4gLQkJZ290byBl bmQ7DQo+ID4gPiAtDQo+ID4gPiAtCV9fcnRlX3JpbmdfZGVxdWV1ZV9lbGVtcyhyLCBjb25zX2hl YWQsIG9ial90YWJsZSwgZXNpemUsIG4pOw0KPiA+ID4gLQ0KPiA+ID4gLQlfX3J0ZV9yaW5nX3Vw ZGF0ZV90YWlsKCZyLT5jb25zLCBjb25zX2hlYWQsIGNvbnNfbmV4dCwgaXNfc2MsIDApOw0KPiA+ ID4gLQ0KPiA+ID4gLWVuZDoNCj4gPiA+IC0JaWYgKGF2YWlsYWJsZSAhPSBOVUxMKQ0KPiA+ID4g LQkJKmF2YWlsYWJsZSA9IGVudHJpZXMgLSBuOw0KPiA+ID4gLQlyZXR1cm4gbjsNCj4gPiA+IC19 DQo+ID4gPiAtDQo+ID4gPiAgLyoqDQo+ID4gPiAgICogRW5xdWV1ZSBzZXZlcmFsIG9iamVjdHMg b24gdGhlIHJpbmcgKG11bHRpLXByb2R1Y2VycyBzYWZlKS4NCj4gPiA+ICAgKg0KPiA+ID4gZGlm ZiAtLWdpdCBhL2xpYi9saWJydGVfcmluZy9ydGVfcmluZ19odHMuaA0KPiA+ID4gYi9saWIvbGli cnRlX3JpbmcvcnRlX3JpbmdfaHRzLmggaW5kZXggMzU5YjE1NzcxLi5iZGJkYWZjOWYgMTAwNjQ0 DQo+ID4gPiAtLS0gYS9saWIvbGlicnRlX3JpbmcvcnRlX3JpbmdfaHRzLmgNCj4gPiA+ICsrKyBi L2xpYi9saWJydGVfcmluZy9ydGVfcmluZ19odHMuaA0KPiA+ID4gQEAgLTI5LDg5ICsyOSw3IEBA DQo+ID4gPiAgZXh0ZXJuICJDIiB7DQo+ID4gPiAgI2VuZGlmDQo+ID4gPg0KPiA+ID4gLSNpbmNs dWRlIDxydGVfcmluZ19odHNfYzExX21lbS5oPg0KPiA+ID4gLQ0KPiA+ID4gLS8qKg0KPiA+ID4g LSAqIEBpbnRlcm5hbCBFbnF1ZXVlIHNldmVyYWwgb2JqZWN0cyBvbiB0aGUgSFRTIHJpbmcuDQo+ ID4gPiAtICoNCj4gPiA+IC0gKiBAcGFyYW0gcg0KPiA+ID4gLSAqICAgQSBwb2ludGVyIHRvIHRo ZSByaW5nIHN0cnVjdHVyZS4NCj4gPiA+IC0gKiBAcGFyYW0gb2JqX3RhYmxlDQo+ID4gPiAtICog ICBBIHBvaW50ZXIgdG8gYSB0YWJsZSBvZiBvYmplY3RzLg0KPiA+ID4gLSAqIEBwYXJhbSBlc2l6 ZQ0KPiA+ID4gLSAqICAgVGhlIHNpemUgb2YgcmluZyBlbGVtZW50LCBpbiBieXRlcy4gSXQgbXVz dCBiZSBhIG11bHRpcGxlIG9mIDQuDQo+ID4gPiAtICogICBUaGlzIG11c3QgYmUgdGhlIHNhbWUg dmFsdWUgdXNlZCB3aGlsZSBjcmVhdGluZyB0aGUgcmluZy4gT3RoZXJ3aXNlDQo+ID4gPiAtICog ICB0aGUgcmVzdWx0cyBhcmUgdW5kZWZpbmVkLg0KPiA+ID4gLSAqIEBwYXJhbSBuDQo+ID4gPiAt ICogICBUaGUgbnVtYmVyIG9mIG9iamVjdHMgdG8gYWRkIGluIHRoZSByaW5nIGZyb20gdGhlIG9i al90YWJsZS4NCj4gPiA+IC0gKiBAcGFyYW0gYmVoYXZpb3INCj4gPiA+IC0gKiAgIFJURV9SSU5H X1FVRVVFX0ZJWEVEOiAgICBFbnF1ZXVlIGEgZml4ZWQgbnVtYmVyIG9mIGl0ZW1zIGZyb20gYQ0K PiA+IHJpbmcNCj4gPiA+IC0gKiAgIFJURV9SSU5HX1FVRVVFX1ZBUklBQkxFOiBFbnF1ZXVlIGFz IG1hbnkgaXRlbXMgYXMgcG9zc2libGUNCj4gPiBmcm9tIHJpbmcNCj4gPiA+IC0gKiBAcGFyYW0g ZnJlZV9zcGFjZQ0KPiA+ID4gLSAqICAgcmV0dXJucyB0aGUgYW1vdW50IG9mIHNwYWNlIGFmdGVy IHRoZSBlbnF1ZXVlIG9wZXJhdGlvbiBoYXMgZmluaXNoZWQNCj4gPiA+IC0gKiBAcmV0dXJuDQo+ ID4gPiAtICogICBBY3R1YWwgbnVtYmVyIG9mIG9iamVjdHMgZW5xdWV1ZWQuDQo+ID4gPiAtICog ICBJZiBiZWhhdmlvciA9PSBSVEVfUklOR19RVUVVRV9GSVhFRCwgdGhpcyB3aWxsIGJlIDAgb3Ig biBvbmx5Lg0KPiA+ID4gLSAqLw0KPiA+ID4gLXN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHVu c2lnbmVkIGludA0KPiA+ID4gLV9fcnRlX3JpbmdfZG9faHRzX2VucXVldWVfZWxlbShzdHJ1Y3Qg cnRlX3JpbmcgKnIsIGNvbnN0IHZvaWQNCj4gPiAqb2JqX3RhYmxlLA0KPiA+ID4gLQl1aW50MzJf dCBlc2l6ZSwgdWludDMyX3QgbiwgZW51bSBydGVfcmluZ19xdWV1ZV9iZWhhdmlvciBiZWhhdmlv ciwNCj4gPiA+IC0JdWludDMyX3QgKmZyZWVfc3BhY2UpDQo+ID4gPiAtew0KPiA+ID4gLQl1aW50 MzJfdCBmcmVlLCBoZWFkOw0KPiA+ID4gLQ0KPiA+ID4gLQluID0gIF9fcnRlX3JpbmdfaHRzX21v dmVfcHJvZF9oZWFkKHIsIG4sIGJlaGF2aW9yLCAmaGVhZCwgJmZyZWUpOw0KPiA+ID4gLQ0KPiA+ ID4gLQlpZiAobiAhPSAwKSB7DQo+ID4gPiAtCQlfX3J0ZV9yaW5nX2VucXVldWVfZWxlbXMociwg aGVhZCwgb2JqX3RhYmxlLCBlc2l6ZSwgbik7DQo+ID4gPiAtCQlfX3J0ZV9yaW5nX2h0c191cGRh dGVfdGFpbCgmci0+aHRzX3Byb2QsIGhlYWQsIG4sIDEpOw0KPiA+ID4gLQl9DQo+ID4gPiAtDQo+ ID4gPiAtCWlmIChmcmVlX3NwYWNlICE9IE5VTEwpDQo+ID4gPiAtCQkqZnJlZV9zcGFjZSA9IGZy ZWUgLSBuOw0KPiA+ID4gLQlyZXR1cm4gbjsNCj4gPiA+IC19DQo+ID4gPiAtDQo+ID4gPiAtLyoq DQo+ID4gPiAtICogQGludGVybmFsIERlcXVldWUgc2V2ZXJhbCBvYmplY3RzIGZyb20gdGhlIEhU UyByaW5nLg0KPiA+ID4gLSAqDQo+ID4gPiAtICogQHBhcmFtIHINCj4gPiA+IC0gKiAgIEEgcG9p bnRlciB0byB0aGUgcmluZyBzdHJ1Y3R1cmUuDQo+ID4gPiAtICogQHBhcmFtIG9ial90YWJsZQ0K PiA+ID4gLSAqICAgQSBwb2ludGVyIHRvIGEgdGFibGUgb2Ygb2JqZWN0cy4NCj4gPiA+IC0gKiBA cGFyYW0gZXNpemUNCj4gPiA+IC0gKiAgIFRoZSBzaXplIG9mIHJpbmcgZWxlbWVudCwgaW4gYnl0 ZXMuIEl0IG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Lg0KPiA+ID4gLSAqICAgVGhpcyBtdXN0IGJl IHRoZSBzYW1lIHZhbHVlIHVzZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHJpbmcuIE90aGVyd2lzZQ0K PiA+ID4gLSAqICAgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZC4NCj4gPiA+IC0gKiBAcGFyYW0g bg0KPiA+ID4gLSAqICAgVGhlIG51bWJlciBvZiBvYmplY3RzIHRvIHB1bGwgZnJvbSB0aGUgcmlu Zy4NCj4gPiA+IC0gKiBAcGFyYW0gYmVoYXZpb3INCj4gPiA+IC0gKiAgIFJURV9SSU5HX1FVRVVF X0ZJWEVEOiAgICBEZXF1ZXVlIGEgZml4ZWQgbnVtYmVyIG9mIGl0ZW1zIGZyb20gYQ0KPiA+IHJp bmcNCj4gPiA+IC0gKiAgIFJURV9SSU5HX1FVRVVFX1ZBUklBQkxFOiBEZXF1ZXVlIGFzIG1hbnkg aXRlbXMgYXMgcG9zc2libGUNCj4gPiBmcm9tIHJpbmcNCj4gPiA+IC0gKiBAcGFyYW0gYXZhaWxh YmxlDQo+ID4gPiAtICogICByZXR1cm5zIHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIHJpbmcgZW50 cmllcyBhZnRlciB0aGUgZGVxdWV1ZSBoYXMNCj4gPiBmaW5pc2hlZA0KPiA+ID4gLSAqIEByZXR1 cm4NCj4gPiA+IC0gKiAgIC0gQWN0dWFsIG51bWJlciBvZiBvYmplY3RzIGRlcXVldWVkLg0KPiA+ ID4gLSAqICAgICBJZiBiZWhhdmlvciA9PSBSVEVfUklOR19RVUVVRV9GSVhFRCwgdGhpcyB3aWxs IGJlIDAgb3IgbiBvbmx5Lg0KPiA+ID4gLSAqLw0KPiA+ID4gLXN0YXRpYyBfX3J0ZV9hbHdheXNf aW5saW5lIHVuc2lnbmVkIGludA0KPiA+ID4gLV9fcnRlX3JpbmdfZG9faHRzX2RlcXVldWVfZWxl bShzdHJ1Y3QgcnRlX3JpbmcgKnIsIHZvaWQgKm9ial90YWJsZSwNCj4gPiA+IC0JdWludDMyX3Qg ZXNpemUsIHVpbnQzMl90IG4sIGVudW0gcnRlX3JpbmdfcXVldWVfYmVoYXZpb3IgYmVoYXZpb3Is DQo+ID4gPiAtCXVpbnQzMl90ICphdmFpbGFibGUpDQo+ID4gPiAtew0KPiA+ID4gLQl1aW50MzJf dCBlbnRyaWVzLCBoZWFkOw0KPiA+ID4gLQ0KPiA+ID4gLQluID0gX19ydGVfcmluZ19odHNfbW92 ZV9jb25zX2hlYWQociwgbiwgYmVoYXZpb3IsICZoZWFkLA0KPiA+ICZlbnRyaWVzKTsNCj4gPiA+ IC0NCj4gPiA+IC0JaWYgKG4gIT0gMCkgew0KPiA+ID4gLQkJX19ydGVfcmluZ19kZXF1ZXVlX2Vs ZW1zKHIsIGhlYWQsIG9ial90YWJsZSwgZXNpemUsIG4pOw0KPiA+ID4gLQkJX19ydGVfcmluZ19o dHNfdXBkYXRlX3RhaWwoJnItPmh0c19jb25zLCBoZWFkLCBuLCAwKTsNCj4gPiA+IC0JfQ0KPiA+ ID4gLQ0KPiA+ID4gLQlpZiAoYXZhaWxhYmxlICE9IE5VTEwpDQo+ID4gPiAtCQkqYXZhaWxhYmxl ID0gZW50cmllcyAtIG47DQo+ID4gPiAtCXJldHVybiBuOw0KPiA+ID4gLX0NCj4gPiA+ICsjaW5j bHVkZSA8cmluZ19odHNfZWxlbV9wdnQuaD4NCj4gPiA+DQo+ID4gPiAgLyoqDQo+ID4gPiAgICog RW5xdWV1ZSBzZXZlcmFsIG9iamVjdHMgb24gdGhlIEhUUyByaW5nIChtdWx0aS1wcm9kdWNlcnMg c2FmZSkuDQo+ID4gPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX3BlZWsu aA0KPiA+ID4gYi9saWIvbGlicnRlX3JpbmcvcnRlX3JpbmdfcGVlay5oIGluZGV4IDQ1ZjcwN2Rj Ny4uMGRkNDAyYmU0IDEwMDY0NA0KPiA+ID4gLS0tIGEvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5n X3BlZWsuaA0KPiA+ID4gKysrIGIvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX3BlZWsuaA0KPiA+ ID4gQEAgLTQ4LDM5ICs0OCw3IEBADQo+ID4gPiAgZXh0ZXJuICJDIiB7DQo+ID4gPiAgI2VuZGlm DQo+ID4gPg0KPiA+ID4gLSNpbmNsdWRlIDxydGVfcmluZ19wZWVrX2MxMV9tZW0uaD4NCj4gPiA+ IC0NCj4gPiA+IC0vKioNCj4gPiA+IC0gKiBAaW50ZXJuYWwgVGhpcyBmdW5jdGlvbiBtb3ZlcyBw cm9kIGhlYWQgdmFsdWUuDQo+ID4gPiAtICovDQo+ID4gPiAtc3RhdGljIF9fcnRlX2Fsd2F5c19p bmxpbmUgdW5zaWduZWQgaW50DQo+ID4gPiAtX19ydGVfcmluZ19kb19lbnF1ZXVlX3N0YXJ0KHN0 cnVjdCBydGVfcmluZyAqciwgdWludDMyX3QgbiwNCj4gPiA+IC0JCWVudW0gcnRlX3JpbmdfcXVl dWVfYmVoYXZpb3IgYmVoYXZpb3IsIHVpbnQzMl90DQo+ID4gKmZyZWVfc3BhY2UpDQo+ID4gPiAt ew0KPiA+ID4gLQl1aW50MzJfdCBmcmVlLCBoZWFkLCBuZXh0Ow0KPiA+ID4gLQ0KPiA+ID4gLQlz d2l0Y2ggKHItPnByb2Quc3luY190eXBlKSB7DQo+ID4gPiAtCWNhc2UgUlRFX1JJTkdfU1lOQ19T VDoNCj4gPiA+IC0JCW4gPSBfX3J0ZV9yaW5nX21vdmVfcHJvZF9oZWFkKHIsIFJURV9SSU5HX1NZ TkNfU1QsIG4sDQo+ID4gPiAtCQkJYmVoYXZpb3IsICZoZWFkLCAmbmV4dCwgJmZyZWUpOw0KPiA+ ID4gLQkJYnJlYWs7DQo+ID4gPiAtCWNhc2UgUlRFX1JJTkdfU1lOQ19NVF9IVFM6DQo+ID4gPiAt CQluID0gIF9fcnRlX3JpbmdfaHRzX21vdmVfcHJvZF9oZWFkKHIsIG4sIGJlaGF2aW9yLA0KPiA+ ID4gLQkJCSZoZWFkLCAmZnJlZSk7DQo+ID4gPiAtCQlicmVhazsNCj4gPiA+IC0JY2FzZSBSVEVf UklOR19TWU5DX01UOg0KPiA+ID4gLQljYXNlIFJURV9SSU5HX1NZTkNfTVRfUlRTOg0KPiA+ID4g LQlkZWZhdWx0Og0KPiA+ID4gLQkJLyogdW5zdXBwb3J0ZWQgbW9kZSwgc2hvdWxkbid0IGJlIGhl cmUgKi8NCj4gPiA+IC0JCVJURV9BU1NFUlQoMCk7DQo+ID4gPiAtCQluID0gMDsNCj4gPiA+IC0J CWZyZWUgPSAwOw0KPiA+ID4gLQl9DQo+ID4gPiAtDQo+ID4gPiAtCWlmIChmcmVlX3NwYWNlICE9 IE5VTEwpDQo+ID4gPiAtCQkqZnJlZV9zcGFjZSA9IGZyZWUgLSBuOw0KPiA+ID4gLQlyZXR1cm4g bjsNCj4gPiA+IC19DQo+ID4gPiArI2luY2x1ZGUgPHJpbmdfcGVla19lbGVtX3B2dC5oPg0KPiA+ ID4NCj4gPiA+ICAvKioNCj4gPiA+ICAgKiBTdGFydCB0byBlbnF1ZXVlIHNldmVyYWwgb2JqZWN0 cyBvbiB0aGUgcmluZy4NCj4gPiA+IEBAIC0yNDgsNDMgKzIxNiw2IEBAIHJ0ZV9yaW5nX2VucXVl dWVfZmluaXNoKHN0cnVjdCBydGVfcmluZyAqciwgdm9pZCAqDQo+ID4gY29uc3QgKm9ial90YWJs ZSwNCj4gPiA+ICAJcnRlX3JpbmdfZW5xdWV1ZV9lbGVtX2ZpbmlzaChyLCBvYmpfdGFibGUsIHNp emVvZih1aW50cHRyX3QpLCBuKTsgIH0NCj4gPiA+DQo+ID4gPiAtLyoqDQo+ID4gPiAtICogQGlu dGVybmFsIFRoaXMgZnVuY3Rpb24gbW92ZXMgY29ucyBoZWFkIHZhbHVlIGFuZCBjb3BpZXMgdXAg dG8gKm4qDQo+ID4gPiAtICogb2JqZWN0cyBmcm9tIHRoZSByaW5nIHRvIHRoZSB1c2VyIHByb3Zp ZGVkIG9ial90YWJsZS4NCj4gPiA+IC0gKi8NCj4gPiA+IC1zdGF0aWMgX19ydGVfYWx3YXlzX2lu bGluZSB1bnNpZ25lZCBpbnQNCj4gPiA+IC1fX3J0ZV9yaW5nX2RvX2RlcXVldWVfc3RhcnQoc3Ry dWN0IHJ0ZV9yaW5nICpyLCB2b2lkICpvYmpfdGFibGUsDQo+ID4gPiAtCXVpbnQzMl90IGVzaXpl LCB1aW50MzJfdCBuLCBlbnVtIHJ0ZV9yaW5nX3F1ZXVlX2JlaGF2aW9yIGJlaGF2aW9yLA0KPiA+ ID4gLQl1aW50MzJfdCAqYXZhaWxhYmxlKQ0KPiA+ID4gLXsNCj4gPiA+IC0JdWludDMyX3QgYXZh aWwsIGhlYWQsIG5leHQ7DQo+ID4gPiAtDQo+ID4gPiAtCXN3aXRjaCAoci0+Y29ucy5zeW5jX3R5 cGUpIHsNCj4gPiA+IC0JY2FzZSBSVEVfUklOR19TWU5DX1NUOg0KPiA+ID4gLQkJbiA9IF9fcnRl X3JpbmdfbW92ZV9jb25zX2hlYWQociwgUlRFX1JJTkdfU1lOQ19TVCwgbiwNCj4gPiA+IC0JCQli ZWhhdmlvciwgJmhlYWQsICZuZXh0LCAmYXZhaWwpOw0KPiA+ID4gLQkJYnJlYWs7DQo+ID4gPiAt CWNhc2UgUlRFX1JJTkdfU1lOQ19NVF9IVFM6DQo+ID4gPiAtCQluID0gIF9fcnRlX3JpbmdfaHRz X21vdmVfY29uc19oZWFkKHIsIG4sIGJlaGF2aW9yLA0KPiA+ID4gLQkJCSZoZWFkLCAmYXZhaWwp Ow0KPiA+ID4gLQkJYnJlYWs7DQo+ID4gPiAtCWNhc2UgUlRFX1JJTkdfU1lOQ19NVDoNCj4gPiA+ IC0JY2FzZSBSVEVfUklOR19TWU5DX01UX1JUUzoNCj4gPiA+IC0JZGVmYXVsdDoNCj4gPiA+IC0J CS8qIHVuc3VwcG9ydGVkIG1vZGUsIHNob3VsZG4ndCBiZSBoZXJlICovDQo+ID4gPiAtCQlSVEVf QVNTRVJUKDApOw0KPiA+ID4gLQkJbiA9IDA7DQo+ID4gPiAtCQlhdmFpbCA9IDA7DQo+ID4gPiAt CX0NCj4gPiA+IC0NCj4gPiA+IC0JaWYgKG4gIT0gMCkNCj4gPiA+IC0JCV9fcnRlX3JpbmdfZGVx dWV1ZV9lbGVtcyhyLCBoZWFkLCBvYmpfdGFibGUsIGVzaXplLCBuKTsNCj4gPiA+IC0NCj4gPiA+ IC0JaWYgKGF2YWlsYWJsZSAhPSBOVUxMKQ0KPiA+ID4gLQkJKmF2YWlsYWJsZSA9IGF2YWlsIC0g bjsNCj4gPiA+IC0JcmV0dXJuIG47DQo+ID4gPiAtfQ0KPiA+ID4gLQ0KPiA+ID4gIC8qKg0KPiA+ ID4gICAqIFN0YXJ0IHRvIGRlcXVldWUgc2V2ZXJhbCBvYmplY3RzIGZyb20gdGhlIHJpbmcuDQo+ ID4gPiAgICogTm90ZSB0aGF0IHVzZXIgaGFzIHRvIGNhbGwgYXBwcm9wcmlhdGUgZGVxdWV1ZV9m aW5pc2goKSBkaWZmIC0tZ2l0DQo+ID4gPiBhL2xpYi9saWJydGVfcmluZy9ydGVfcmluZ19wZWVr X3pjLmgNCj4gPiA+IGIvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX3BlZWtfemMuaA0KPiA+ID4g aW5kZXggY2IzYmJkMDY3Li5iYzgyNTJhMTggMTAwNjQ0DQo+ID4gPiAtLS0gYS9saWIvbGlicnRl X3JpbmcvcnRlX3JpbmdfcGVla196Yy5oDQo+ID4gPiArKysgYi9saWIvbGlicnRlX3JpbmcvcnRl X3JpbmdfcGVla196Yy5oDQo+ID4gPiBAQCAtNzIsNyArNzIsNyBAQA0KPiA+ID4gIGV4dGVybiAi QyIgew0KPiA+ID4gICNlbmRpZg0KPiA+ID4NCj4gPiA+IC0jaW5jbHVkZSA8cnRlX3JpbmdfcGVl a19jMTFfbWVtLmg+DQo+ID4gPiArI2luY2x1ZGUgPHJpbmdfcGVla19lbGVtX3B2dC5oPg0KPiA+ ID4NCj4gPiA+ICAvKioNCj4gPiA+ICAgKiBSaW5nIHplcm8tY29weSBpbmZvcm1hdGlvbiBzdHJ1 Y3R1cmUuDQo+ID4gPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX3J0cy5o DQo+ID4gPiBiL2xpYi9saWJydGVfcmluZy9ydGVfcmluZ19ydHMuaCBpbmRleCBhZmMxMmFiZTIu LjgzZDk5MDNlMiAxMDA2NDQNCj4gPiA+IC0tLSBhL2xpYi9saWJydGVfcmluZy9ydGVfcmluZ19y dHMuaA0KPiA+ID4gKysrIGIvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX3J0cy5oDQo+ID4gPiBA QCAtNTYsODkgKzU2LDcgQEANCj4gPiA+ICBleHRlcm4gIkMiIHsNCj4gPiA+ICAjZW5kaWYNCj4g PiA+DQo+ID4gPiAtI2luY2x1ZGUgPHJ0ZV9yaW5nX3J0c19jMTFfbWVtLmg+DQo+ID4gPiAtDQo+ ID4gPiAtLyoqDQo+ID4gPiAtICogQGludGVybmFsIEVucXVldWUgc2V2ZXJhbCBvYmplY3RzIG9u IHRoZSBSVFMgcmluZy4NCj4gPiA+IC0gKg0KPiA+ID4gLSAqIEBwYXJhbSByDQo+ID4gPiAtICog ICBBIHBvaW50ZXIgdG8gdGhlIHJpbmcgc3RydWN0dXJlLg0KPiA+ID4gLSAqIEBwYXJhbSBvYmpf dGFibGUNCj4gPiA+IC0gKiAgIEEgcG9pbnRlciB0byBhIHRhYmxlIG9mIG9iamVjdHMuDQo+ID4g PiAtICogQHBhcmFtIGVzaXplDQo+ID4gPiAtICogICBUaGUgc2l6ZSBvZiByaW5nIGVsZW1lbnQs IGluIGJ5dGVzLiBJdCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNC4NCj4gPiA+IC0gKiAgIFRoaXMg bXVzdCBiZSB0aGUgc2FtZSB2YWx1ZSB1c2VkIHdoaWxlIGNyZWF0aW5nIHRoZSByaW5nLiBPdGhl cndpc2UNCj4gPiA+IC0gKiAgIHRoZSByZXN1bHRzIGFyZSB1bmRlZmluZWQuDQo+ID4gPiAtICog QHBhcmFtIG4NCj4gPiA+IC0gKiAgIFRoZSBudW1iZXIgb2Ygb2JqZWN0cyB0byBhZGQgaW4gdGhl IHJpbmcgZnJvbSB0aGUgb2JqX3RhYmxlLg0KPiA+ID4gLSAqIEBwYXJhbSBiZWhhdmlvcg0KPiA+ ID4gLSAqICAgUlRFX1JJTkdfUVVFVUVfRklYRUQ6ICAgIEVucXVldWUgYSBmaXhlZCBudW1iZXIg b2YgaXRlbXMgZnJvbSBhDQo+ID4gcmluZw0KPiA+ID4gLSAqICAgUlRFX1JJTkdfUVVFVUVfVkFS SUFCTEU6IEVucXVldWUgYXMgbWFueSBpdGVtcyBhcyBwb3NzaWJsZQ0KPiA+IGZyb20gcmluZw0K PiA+ID4gLSAqIEBwYXJhbSBmcmVlX3NwYWNlDQo+ID4gPiAtICogICByZXR1cm5zIHRoZSBhbW91 bnQgb2Ygc3BhY2UgYWZ0ZXIgdGhlIGVucXVldWUgb3BlcmF0aW9uIGhhcyBmaW5pc2hlZA0KPiA+ ID4gLSAqIEByZXR1cm4NCj4gPiA+IC0gKiAgIEFjdHVhbCBudW1iZXIgb2Ygb2JqZWN0cyBlbnF1 ZXVlZC4NCj4gPiA+IC0gKiAgIElmIGJlaGF2aW9yID09IFJURV9SSU5HX1FVRVVFX0ZJWEVELCB0 aGlzIHdpbGwgYmUgMCBvciBuIG9ubHkuDQo+ID4gPiAtICovDQo+ID4gPiAtc3RhdGljIF9fcnRl X2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50DQo+ID4gPiAtX19ydGVfcmluZ19kb19ydHNfZW5x dWV1ZV9lbGVtKHN0cnVjdCBydGVfcmluZyAqciwgY29uc3Qgdm9pZA0KPiA+ICpvYmpfdGFibGUs DQo+ID4gPiAtCXVpbnQzMl90IGVzaXplLCB1aW50MzJfdCBuLCBlbnVtIHJ0ZV9yaW5nX3F1ZXVl X2JlaGF2aW9yIGJlaGF2aW9yLA0KPiA+ID4gLQl1aW50MzJfdCAqZnJlZV9zcGFjZSkNCj4gPiA+ IC17DQo+ID4gPiAtCXVpbnQzMl90IGZyZWUsIGhlYWQ7DQo+ID4gPiAtDQo+ID4gPiAtCW4gPSAg X19ydGVfcmluZ19ydHNfbW92ZV9wcm9kX2hlYWQociwgbiwgYmVoYXZpb3IsICZoZWFkLCAmZnJl ZSk7DQo+ID4gPiAtDQo+ID4gPiAtCWlmIChuICE9IDApIHsNCj4gPiA+IC0JCV9fcnRlX3Jpbmdf ZW5xdWV1ZV9lbGVtcyhyLCBoZWFkLCBvYmpfdGFibGUsIGVzaXplLCBuKTsNCj4gPiA+IC0JCV9f cnRlX3JpbmdfcnRzX3VwZGF0ZV90YWlsKCZyLT5ydHNfcHJvZCk7DQo+ID4gPiAtCX0NCj4gPiA+ IC0NCj4gPiA+IC0JaWYgKGZyZWVfc3BhY2UgIT0gTlVMTCkNCj4gPiA+IC0JCSpmcmVlX3NwYWNl ID0gZnJlZSAtIG47DQo+ID4gPiAtCXJldHVybiBuOw0KPiA+ID4gLX0NCj4gPiA+IC0NCj4gPiA+ IC0vKioNCj4gPiA+IC0gKiBAaW50ZXJuYWwgRGVxdWV1ZSBzZXZlcmFsIG9iamVjdHMgZnJvbSB0 aGUgUlRTIHJpbmcuDQo+ID4gPiAtICoNCj4gPiA+IC0gKiBAcGFyYW0gcg0KPiA+ID4gLSAqICAg QSBwb2ludGVyIHRvIHRoZSByaW5nIHN0cnVjdHVyZS4NCj4gPiA+IC0gKiBAcGFyYW0gb2JqX3Rh YmxlDQo+ID4gPiAtICogICBBIHBvaW50ZXIgdG8gYSB0YWJsZSBvZiBvYmplY3RzLg0KPiA+ID4g LSAqIEBwYXJhbSBlc2l6ZQ0KPiA+ID4gLSAqICAgVGhlIHNpemUgb2YgcmluZyBlbGVtZW50LCBp biBieXRlcy4gSXQgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQuDQo+ID4gPiAtICogICBUaGlzIG11 c3QgYmUgdGhlIHNhbWUgdmFsdWUgdXNlZCB3aGlsZSBjcmVhdGluZyB0aGUgcmluZy4gT3RoZXJ3 aXNlDQo+ID4gPiAtICogICB0aGUgcmVzdWx0cyBhcmUgdW5kZWZpbmVkLg0KPiA+ID4gLSAqIEBw YXJhbSBuDQo+ID4gPiAtICogICBUaGUgbnVtYmVyIG9mIG9iamVjdHMgdG8gcHVsbCBmcm9tIHRo ZSByaW5nLg0KPiA+ID4gLSAqIEBwYXJhbSBiZWhhdmlvcg0KPiA+ID4gLSAqICAgUlRFX1JJTkdf UVVFVUVfRklYRUQ6ICAgIERlcXVldWUgYSBmaXhlZCBudW1iZXIgb2YgaXRlbXMgZnJvbSBhDQo+ ID4gcmluZw0KPiA+ID4gLSAqICAgUlRFX1JJTkdfUVVFVUVfVkFSSUFCTEU6IERlcXVldWUgYXMg bWFueSBpdGVtcyBhcyBwb3NzaWJsZQ0KPiA+IGZyb20gcmluZw0KPiA+ID4gLSAqIEBwYXJhbSBh dmFpbGFibGUNCj4gPiA+IC0gKiAgIHJldHVybnMgdGhlIG51bWJlciBvZiByZW1haW5pbmcgcmlu ZyBlbnRyaWVzIGFmdGVyIHRoZSBkZXF1ZXVlIGhhcw0KPiA+IGZpbmlzaGVkDQo+ID4gPiAtICog QHJldHVybg0KPiA+ID4gLSAqICAgLSBBY3R1YWwgbnVtYmVyIG9mIG9iamVjdHMgZGVxdWV1ZWQu DQo+ID4gPiAtICogICAgIElmIGJlaGF2aW9yID09IFJURV9SSU5HX1FVRVVFX0ZJWEVELCB0aGlz IHdpbGwgYmUgMCBvciBuIG9ubHkuDQo+ID4gPiAtICovDQo+ID4gPiAtc3RhdGljIF9fcnRlX2Fs d2F5c19pbmxpbmUgdW5zaWduZWQgaW50DQo+ID4gPiAtX19ydGVfcmluZ19kb19ydHNfZGVxdWV1 ZV9lbGVtKHN0cnVjdCBydGVfcmluZyAqciwgdm9pZCAqb2JqX3RhYmxlLA0KPiA+ID4gLQl1aW50 MzJfdCBlc2l6ZSwgdWludDMyX3QgbiwgZW51bSBydGVfcmluZ19xdWV1ZV9iZWhhdmlvciBiZWhh dmlvciwNCj4gPiA+IC0JdWludDMyX3QgKmF2YWlsYWJsZSkNCj4gPiA+IC17DQo+ID4gPiAtCXVp bnQzMl90IGVudHJpZXMsIGhlYWQ7DQo+ID4gPiAtDQo+ID4gPiAtCW4gPSBfX3J0ZV9yaW5nX3J0 c19tb3ZlX2NvbnNfaGVhZChyLCBuLCBiZWhhdmlvciwgJmhlYWQsDQo+ID4gJmVudHJpZXMpOw0K PiA+ID4gLQ0KPiA+ID4gLQlpZiAobiAhPSAwKSB7DQo+ID4gPiAtCQlfX3J0ZV9yaW5nX2RlcXVl dWVfZWxlbXMociwgaGVhZCwgb2JqX3RhYmxlLCBlc2l6ZSwgbik7DQo+ID4gPiAtCQlfX3J0ZV9y aW5nX3J0c191cGRhdGVfdGFpbCgmci0+cnRzX2NvbnMpOw0KPiA+ID4gLQl9DQo+ID4gPiAtDQo+ ID4gPiAtCWlmIChhdmFpbGFibGUgIT0gTlVMTCkNCj4gPiA+IC0JCSphdmFpbGFibGUgPSBlbnRy aWVzIC0gbjsNCj4gPiA+IC0JcmV0dXJuIG47DQo+ID4gPiAtfQ0KPiA+ID4gKyNpbmNsdWRlIDxy aW5nX3J0c19lbGVtX3B2dC5oPg0KPiA+ID4NCj4gPiA+ICAvKioNCj4gPiA+ICAgKiBFbnF1ZXVl IHNldmVyYWwgb2JqZWN0cyBvbiB0aGUgUlRTIHJpbmcgKG11bHRpLXByb2R1Y2VycyBzYWZlKS4N Cj4gPiA+IC0tDQo+ID4gPiAyLjE3LjENCg0K