From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id C4EC146D72 for ; Thu, 10 Aug 2023 05:27:22 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5326868C867; Thu, 10 Aug 2023 08:27:19 +0300 (EEST) Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.151]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BFADA68C81F for ; Thu, 10 Aug 2023 08:27:10 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1691645236; x=1723181236; h=from:to:subject:date:message-id:references:in-reply-to: content-id:content-transfer-encoding:mime-version; bh=bqLG2aFRkfxr+yhoLh0A32RFyUT7/5o3vlObMT3UshU=; b=ZVOWl+NWxjoDLNy0fu6T/QLAAXU7ZNncx6Db9pYgkqIdcB+v7LLCsP2g eoxL3ANNSt8OmllRHzkKJKyKMUQMKuDB3IpFanM1rJ79inDCdG3q2b0bA o4oXNGcXQt3ANqvRwvdxyqktDqaQvWSYIAxyujRcQJ6uZocv/2cZAUuEP dcAJ4luD0uQUIk3+VEOLZX+fEI2FUoDtYxl/271x0B/Tu3uOEvD+dS574 VGpVP/czKx48uy+xEvkFTJHw8BaQc+IdWAhrBZPRAe+vP9jqJEW1YS9Rw 7UsEhCGMXTXnp3A3nNWiBz/7jB6zQdGmHYnyfGiA6+RDUW2rzJ7K0u//j Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10797"; a="351603803" X-IronPort-AV: E=Sophos;i="6.01,161,1684825200"; d="scan'208";a="351603803" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Aug 2023 22:25:46 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10797"; a="761675592" X-IronPort-AV: E=Sophos;i="6.01,161,1684825200"; d="scan'208";a="761675592" Received: from orsmsx603.amr.corp.intel.com ([10.22.229.16]) by orsmga008.jf.intel.com with ESMTP; 09 Aug 2023 22:25:46 -0700 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Wed, 9 Aug 2023 22:25:46 -0700 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx610.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27 via Frontend Transport; Wed, 9 Aug 2023 22:25:46 -0700 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (104.47.55.100) by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.27; Wed, 9 Aug 2023 22:25:45 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ZXwUIz425ECVQvSd20fVG17Hanimvdnaz6goNnHqas0U84/mVDZ9tPWgpGQzMug8U2g+VtIuaY835FvHR3MjvtQniZ8GoHCk4lYL6cbNTKUhltVs2p0LU98av0XdXwvTRNoJVZOVCLqlnIyx/J2tu9rIyUm3lzPjsbtiWiw8fgFWPZJy9XW94jZGBD9EGBvUCTm0OEDoRKCnFzwtTEftR+3/+ZKezNQBJWKfsBkR3PQQSrMi4a9JJ02Z0D3tnPXlo4Hn+OMge9+MKP0b/yLEhW1o5Gj8nsAmGeNHDSZtqOc761BUeGh6jYwXqJQTQ1N98PvNHcV7LJVV6y+svjF4Iw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=bqLG2aFRkfxr+yhoLh0A32RFyUT7/5o3vlObMT3UshU=; b=Y/XR7cxsDpBze+Z8hX7ttCZNMGdhXJ7L59TTJ7Dd+sIZD4Qy6cy4guL1J3yDGo2wEPFH3ig/QQIV1zMIu2SmnsLKIp3quRBx99zIvB0GXUq1426bPDU1B0Gp6Jb7l2Tk6/Q+LkVp13ElaHjXDl1QDNPHrC9l36F1KpHHKoRMW+305JWjW3RUqoCc9ZAeZOCqlY0yqsOy7cNv8SiVVL8An1lrvDNtM16/1BKVYKlFOa13oYVT/wgUYhjx3iIIPi1p1OjWj5ZEYTrHsDXUwbbpbsuxcXIII5gVv7Phvj4dhVbWnGpyOgyGxpY/38cl/SHbYuRmTiZsjckAYTBF450+4g== 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 Received: from BN9PR11MB5515.namprd11.prod.outlook.com (2603:10b6:408:104::8) by MW4PR11MB6810.namprd11.prod.outlook.com (2603:10b6:303:207::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6652.30; Thu, 10 Aug 2023 05:25:42 +0000 Received: from BN9PR11MB5515.namprd11.prod.outlook.com ([fe80::7502:5d29:13b8:cdb3]) by BN9PR11MB5515.namprd11.prod.outlook.com ([fe80::7502:5d29:13b8:cdb3%4]) with mapi id 15.20.6652.029; Thu, 10 Aug 2023 05:25:42 +0000 From: "Xiang, Haihao" To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [FFmpeg-devel] [PATCH v3] avcodec/cbs_vp8: Add support for VP8 codec bitstream READ methods Thread-Index: AdmG0tDk62vH8netRBa3ofDAEGXBAAS5O13gAlgjf2AIDxZUIAH9nTCA Date: Thu, 10 Aug 2023 05:25:42 +0000 Message-ID: <4c26b5cceb1a5e8f935e4d6dafe365b35c4b2c88.camel@intel.com> References: In-Reply-To: Accept-Language: en-AS, zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.44.4-0ubuntu2 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: BN9PR11MB5515:EE_|MW4PR11MB6810:EE_ x-ms-office365-filtering-correlation-id: 48c302ad-79ba-407e-ea13-08db99623de6 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: m16UkG8i6+6gl9KMMBse+tT8nrnTX3HjlPtua2Vr+0rKdEwJLlZgCO1NMC1ObLD0ymcI3yW6idwbRMheh9s1MMmJALSZAuXYySspi2KqS0ND3ThVAhOll9tvNPj/AJqc+CIh/ts3w2j2DjrNwenqF+3zUDrM4lh5nRRhiAZc2untyw3eTg6uJf2xBfBvxjJ2ValPezFeQBolEsJwCT+z8Xvry/zezDdSXJi9qGyuilcLj1An8jAFVTm5EwUIUDvGMwQXgkA+Ypej6AGpCdAIbT46ya1z6YkRq4BO7+341Lg5KUmf0JPbt3d1Mh9PSuzsfo0wObR0qkurbl14GYKF96iauX40808fWRxczhe+3jP5oV4CM9Sys+6uUzD85Ih24c/murVQBdV6sXs/UUfk2PTFm+cAziLSCqMrITPd2hZU9f8ep0+vh9Dwv7d1UbJhkz9zmJ4/9RFFae7IgKs9pvzKppE2FQlaktzDTny3eiFYgW2HWNTU52WGUc56ZFGNULpXneiU8VZehauXC/J4D7E231JoeXeM6nFpIZChflD/7TBbxruqZcchdH8KEQiMccgGdG3wXgu/LRgec7w/qTkLKWHuIhB+k4q2SGOvJcogvztLaxGo8Aninp8s+ZITDv9inF1Vj+1un2IbXUkRQQ== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BN9PR11MB5515.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(376002)(39860400002)(366004)(396003)(346002)(136003)(186006)(1800799006)(451199021)(91956017)(6512007)(66476007)(64756008)(66446008)(66556008)(76116006)(66946007)(71200400001)(8676002)(6486002)(8936002)(5660300002)(478600001)(66899021)(30864003)(41300700001)(316002)(19627235002)(6916009)(53546011)(6506007)(26005)(2906002)(2616005)(82960400001)(122000001)(38100700002)(83380400001)(36756003)(38070700005)(86362001)(2004002)(579004)(559001); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?SklPNXJXcGE3UW5tc2V6alR6RzZMeE13SXJQV0lhYTFkMWxXSWNXTVJQcVNS?= =?utf-8?B?bzdBZnpZcU9DeCtrbWs2U3hsWkhvd1JZUzNVTFRvcjZGTVFkZVhYTnF3N3Y1?= =?utf-8?B?c3VJNURQdG5sTHErelFMNTJVTzcyNFVOdmUvV2VNK1pWOGg3bjYwSGZRVlhm?= =?utf-8?B?ZUx3cWt3NER3bWVyeTN4VmFudlg5b2dPZ2ZoL2pOM3d3REZlaGI3WTFhYmZ5?= =?utf-8?B?dGM0TmRMdU5SU25KNDh0Y2tOV2hqTXJSRGdmVHFqNFVKZTh5c1JOdlNJMk1k?= =?utf-8?B?dllrVWZQc0hnSWh1b1ZCbWo5bkhER0ZxMDBOS1dHTE9YSkY3d0JEUFdObjBv?= =?utf-8?B?bkJuamswNmRLanJVQ2ZWT25DYVJHdnllemwrREwweXVudEFrVmFJUHRiU3FU?= =?utf-8?B?NWV6ZjJ4ZzYvU3lCSGRKdHczZW9QeUU2dU9xckE3VmJtdVZhUXgvdlVhYm94?= =?utf-8?B?cjNTZXBpcEkzM0FLMDcwNmRjdE85UUdZWnphZ0o4MktuMkpFZ2JFTE5wZytC?= =?utf-8?B?VlQwVldKSVplYlR2cGwzUmM2aTdHTnB2a01lM0NDT2lrTVByOVpNSW04NHlO?= =?utf-8?B?LzRnNnVmbm0wYU9QNUNlTHl6cGg5bUVBc3JnMWRIbFhyYVV4aTBGUXV1eWJK?= =?utf-8?B?eXQxQ2NjU1BPUHJ1b01jci85STFRUUFDOHREUmVsbnJ4Q3RJOS90a2k4U0Ez?= =?utf-8?B?OUovZm04eTdFNzhIY29GR1RVSjM1Q1J1NUxmZFlDM3FIOExnV2ljMFpXTXdS?= =?utf-8?B?UTRzejhRT25taHhjSXpRUHgxdWVDZ2diQ2t2Q0d1QUhJblk0NkRUUjVHbEI5?= =?utf-8?B?SUEvczJrcGJrNEdqTE1CQ2NMUU9odlBTaThxRUFBSlBib1BQUzdNR2JKc05l?= =?utf-8?B?ZEY4bGR4Z25tQ3ozMkFXZEpRc3ZjOE9uZFZROW5XSzNndDVMb3BlYnZsM2xx?= =?utf-8?B?TUFheUxKNC9WS2RmUTZBZGtBNy9MbFh5VTBGVGJHSndpWHFUZ2p4TFNwUjNU?= =?utf-8?B?RGp2bGpDRGF6d1Z6bkJmYTVadkN3dzVycUxOc0VIOGVMZUZRQkFFRk92RzQy?= =?utf-8?B?dHMwTEJlem5IZ2ZuKy9FUmhqZ3ZabWhzdUc2aWFPdlhma3p1MjQ4VXJYYlBW?= =?utf-8?B?Y1A0aHhPaFhmK3gwRnBkOFF2Um9ZbEFGTnc2b1VHak05MHBOWlpqamt5cVM0?= =?utf-8?B?NjVXZ29NeUJsRHVVelRGQUhUR2JuY2RWODU4NGt6TU84WnkzU3VOTEQ0K29t?= =?utf-8?B?UGFQTlpDK2daNmV6KzBVeUhnam9ob2MwajNGUmJLRDlLV2VGQU9tL1p6OE1E?= =?utf-8?B?QWhCbEErQXdEY1p6Z0ZDTC9Uay9hdVI3K20wZGo4VzVRMzRmc3RVNVFvblVN?= =?utf-8?B?UlRBd1ZSQzU4dWxGRURqaXFaSDgvajl5WTkvU3JoWmt0SzJyUmloalZ5L0dm?= =?utf-8?B?ZkN2Qm1OblVtZTNtRnl3eVhTeWdYRURPYkdGbzMxNUw0OWowc0ZidEZOVFNT?= =?utf-8?B?eE1wZ2trRitjNWcrU09JdlRodlhQUXFFNUhGODUyRGdUM2R5dnQydU14U0cr?= =?utf-8?B?b1A0dDJLMGlMRko4bUIyZDFHeVFlclo3NDUrTGxyZHhWc1NnRlp3UjM1UzM3?= =?utf-8?B?Wld3ZzBKUFp5ejVFS3ZMSnZhbW4yU0FZR0JiS2ltUzd4Z0lCNDl0VTllWDNX?= =?utf-8?B?YVZkMzZZdWMwTjN6ZXhVSVRZYnZiTnIyendRRXg1alRZVmhMUkJIRUFXZmt5?= =?utf-8?B?WUpEenhzcVN5Mk9qcDB4YkRsM0ZSNy9PQ2kwZTZMbVRkQWozL3JjbG1udk1a?= =?utf-8?B?Y2dGY0dqOFJEQTY0bHNCTndSNnIyQk5FTSs1ZW84allWLy9hTUZNUXVrcHV4?= =?utf-8?B?YjNXSzVuaTNBTzJxN2ZuTklvbnJjaGZyam1xZDhHbmVEcWlrL1ZENlRlQ3ZK?= =?utf-8?B?VzVBWVN0NER2ZjRJY3V6NlJiMy9nZzFHQVFxNzgwdXVORklEckZvcTJiUGhN?= =?utf-8?B?ekgxQVhYMGlFVUJ1YTBhMHhVNHZrd3lsYkI3T3kxb0ozRFJLakVlWFV5R2pJ?= =?utf-8?B?eGFpdzY1OHRMc2NrQ1V1NjJBTGd2dExRSjJ1TnVaYXhhVElseUo3cXZLUjBi?= =?utf-8?B?bUF0WGVvTG9LUFg3S0gwdlIzNHhOWDROazdjNFY2VmUxclpRaUE5UVFlUzFS?= =?utf-8?B?WkE9PQ==?= Content-ID: <02D1006128C1CE4BAC3142FE19A2915C@namprd11.prod.outlook.com> MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BN9PR11MB5515.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 48c302ad-79ba-407e-ea13-08db99623de6 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Aug 2023 05:25:42.7193 (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: f4f+8jFoo1UlREKeKvhO8yRzFeZqEyq6C3kidNfsVVcL3KZr+cOiTZ79ZXURENC91N/EBfAoKAyElZa90T3ypA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR11MB6810 X-OriginatorOrg: intel.com Subject: Re: [FFmpeg-devel] [PATCH v3] avcodec/cbs_vp8: Add support for VP8 codec bitstream READ methods X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: T24gTWEsIDIwMjMtMDctMzEgYXQgMDI6MTQgKzAwMDAsIERhaSwgSmlhbmh1aSBKIHdyb3RlOgo+ IAo+IAo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPiA+IEZyb206IGZmbXBlZy1kZXZl bCA8ZmZtcGVnLWRldmVsLWJvdW5jZXNAZmZtcGVnLm9yZz4gT24gQmVoYWxmIE9mIERhaSwKPiA+ IEppYW5odWkgSgo+ID4gU2VudDogVHVlc2RheSwgSnVuZSAyMCwgMjAyMyA5OjQyIEFNCj4gPiBU bzogRkZtcGVnIGRldmVsb3BtZW50IGRpc2N1c3Npb25zIGFuZCBwYXRjaGVzIDxmZm1wZWctZGV2 ZWxAZmZtcGVnLm9yZz4KPiA+IFN1YmplY3Q6IFJlOiBbRkZtcGVnLWRldmVsXSBbUEFUQ0ggdjNd IGF2Y29kZWMvY2JzX3ZwODogQWRkIHN1cHBvcnQgZm9yIFZQOAo+ID4gY29kZWMgYml0c3RyZWFt IFJFQUQgbWV0aG9kcwo+ID4gCj4gPiAKPiA+IAo+ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2Ut LS0tLQo+ID4gPiBGcm9tOiBEYWksIEppYW5odWkgSgo+ID4gPiBTZW50OiBUaHVyc2RheSwgSnVu ZSA4LCAyMDIzIDExOjE4IEFNCj4gPiA+IFRvOiBGRm1wZWcgZGV2ZWxvcG1lbnQgZGlzY3Vzc2lv bnMgYW5kIHBhdGNoZXMKPiA+ID4gPGZmbXBlZy1kZXZlbEBmZm1wZWcub3JnPgo+ID4gPiBTdWJq ZWN0OiBSRTogW1BBVENIIHYzXSBhdmNvZGVjL2Nic192cDg6IEFkZCBzdXBwb3J0IGZvciBWUDgg Y29kZWMKPiA+ID4gYml0c3RyZWFtIFJFQUQgbWV0aG9kcwo+ID4gPiAKPiA+ID4gCj4gPiA+IAo+ ID4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4gPiA+ID4gRnJvbTogZmZtcGVnLWRl dmVsIDxmZm1wZWctZGV2ZWwtYm91bmNlc0BmZm1wZWcub3JnPiBPbiBCZWhhbGYgT2YKPiA+ID4g PiBEYWksIEppYW5odWkgSgo+ID4gPiA+IFNlbnQ6IFR1ZXNkYXksIE1heSAzMCwgMjAyMyA0OjAw IFBNCj4gPiA+ID4gVG86IGZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCj4gPiA+ID4gU3ViamVjdDog W0ZGbXBlZy1kZXZlbF0gW1BBVENIIHYzXSBhdmNvZGVjL2Nic192cDg6IEFkZCBzdXBwb3J0IGZv cgo+ID4gPiA+IFZQOCBjb2RlYyBiaXRzdHJlYW0gUkVBRCBtZXRob2RzCj4gPiA+ID4gCj4gPiA+ ID4gVGhpcyBjb21taXQgYWRkcyBWUDggaW50byBjYnMgc3VwcG9ydGVkIGNvZGVjIGxpc3QsIGFu ZCBlbmFibGVzIHRoZQo+ID4gPiA+IGB0cmFjZV9oZWFkZXJzYCBiaXRzdHJlYW0gZmlsdGVycyB0 byBzdXBwb3J0IFZQOCwgYmVzaWRlcyBleGlzdGluZwo+ID4gPiA+IEFWMSwgSC4yNjQsCj4gPiA+ ID4gSC4yNjUgYW5kIFZQOS4gSXQgY2FuIGJlIHVzZWZ1bCB0byBkZWJ1ZyBWUDggc3RyZWFtIGlz c3Vlcy4KPiA+ID4gPiAKPiA+ID4gPiBPbmx5IHRoZSBSRUFEIG1ldGhvZHMgYHJlYWRfdW5pdGAg YW5kIGBzcGxpdF9mcmFnbWVudGAgYXJlCj4gPiA+ID4gaW1wbGVtZW50ZWQsIHRoZSBXUklURSBt ZXRob2RzIGB3cml0ZV91bml0YCBhbmQgYGFzc2VtYmxlX2ZyYWdtZW50YAo+ID4gPiA+IHJldHVy biBgQVZFUlJPUl9QQVRDSFdFTENPTUVgIGVycm9yIGNvZGUuIEl0IGlzIGJlY2F1c2UgdGhlIENC UyBWUDgKPiA+ID4gPiBXUklURSBpcyB1bmxpa2VseSB1c2VkIGJ5IGFueSBhcHBsaWNhdGlvbnMg YXQgdGhlIG1vbWVudC4gVGhlIFdSSVRFCj4gPiA+ID4gbWV0aG9kcyBjYW4gYmUgYWRkZWQgbGF0 ZXIgaWYgdGhlcmUgYXJlIHJlYWwgcmVxdWlybWVudHMuCj4gPiA+ID4gCj4gPiA+ID4gVEVTVFM6 IGZmbXBlZyAtaSBmYXRlLXN1aXRlL3ZwOC9mcmFtZV9zaXplX2NoYW5nZS53ZWJtIC12Y29kZWMg Y29weQo+ID4gPiA+IC1ic2Y6diB0cmFjZV9oZWFkZXJzIC1mIG51bGwgLQo+ID4gPiA+IAo+ID4g PiA+IFNpZ25lZC1vZmYtYnk6IEppYW5odWkgRGFpIDxqaWFuaHVpLmouZGFpQGludGVsLmNvbT4K PiA+ID4gPiAtLS0KPiA+ID4gPiDCoGNvbmZpZ3VyZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCA0ICstCj4gPiA+ID4gwqBsaWJhdmNv ZGVjL01ha2VmaWxlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAxICsK PiA+ID4gPiDCoGxpYmF2Y29kZWMvY2JzLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHzCoMKgIDYgKwo+ID4gPiA+IMKgbGliYXZjb2RlYy9jYnNfaW50ZXJuYWwuaMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMSArCj4gPiA+ID4gwqBsaWJhdmNvZGVjL2Nic192 cDguY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwgMzYwICsrKysrKysrKysrKysr KysrKysrKysrKysrKwo+ID4gPiA+IMKgbGliYXZjb2RlYy9jYnNfdnA4LmjCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCB8IDExMiArKysrKysrKysKPiA+ID4gPiDCoGxpYmF2Y29kZWMv Y2JzX3ZwOF9zeW50YXhfdGVtcGxhdGUuYyB8IDIyNCArKysrKysrKysrKysrKysrKwo+ID4gPiA+ IMKgNyBmaWxlcyBjaGFuZ2VkLCA3MDcgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKcKgIGNy ZWF0ZSBtb2RlCj4gPiA+ID4gMTAwNjQ0IGxpYmF2Y29kZWMvY2JzX3ZwOC5jwqAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGxpYmF2Y29kZWMvY2JzX3ZwOC5oCj4gPiA+ID4gY3JlYXRlIG1vZGUKPiA+ID4g PiAxMDA2NDQgbGliYXZjb2RlYy9jYnNfdnA4X3N5bnRheF90ZW1wbGF0ZS5jCj4gPiA+ID4gCj4g PiA+ID4gZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQo+ID4gPiA+IGluZGV4IGJi N2JlNjc2NzYuLmI4OTYwZDI2MzkgMTAwNzU1Cj4gPiA+ID4gLS0tIGEvY29uZmlndXJlCj4gPiA+ ID4gKysrIGIvY29uZmlndXJlCj4gPiA+ID4gQEAgLTI0MzIsNiArMjQzMiw3IEBAIENPTkZJR19F WFRSQT0iCj4gPiA+ID4gwqDCoMKgwqAgY2JzX2gyNjUKPiA+ID4gPiDCoMKgwqDCoCBjYnNfanBl Zwo+ID4gPiA+IMKgwqDCoMKgIGNic19tcGVnMgo+ID4gPiA+ICvCoMKgwqAgY2JzX3ZwOAo+ID4g PiA+IMKgwqDCoMKgIGNic192cDkKPiA+ID4gPiDCoMKgwqDCoCBkZWZsYXRlX3dyYXBwZXIKPiA+ ID4gPiDCoMKgwqDCoCBkaXJhY19wYXJzZQo+ID4gPiA+IEBAIC0yNzEzLDYgKzI3MTQsNyBAQCBj YnNfaDI2NF9zZWxlY3Q9ImNicyIKPiA+ID4gPiDCoGNic19oMjY1X3NlbGVjdD0iY2JzIgo+ID4g PiA+IMKgY2JzX2pwZWdfc2VsZWN0PSJjYnMiCj4gPiA+ID4gwqBjYnNfbXBlZzJfc2VsZWN0PSJj YnMiCj4gPiA+ID4gK2Nic192cDhfc2VsZWN0PSJjYnMiCj4gPiA+ID4gwqBjYnNfdnA5X3NlbGVj dD0iY2JzIgo+ID4gPiA+IMKgZGN0X3NlbGVjdD0icmRmdCIKPiA+ID4gPiDCoGRlZmxhdGVfd3Jh cHBlcl9kZXBzPSJ6bGliIgo+ID4gPiA+IEBAIC0zMjg0LDcgKzMyODYsNyBAQCBoMjY0X3JlZHVu ZGFudF9wcHNfYnNmX3NlbGVjdD0iY2JzX2gyNjQiCj4gPiA+ID4gwqBoZXZjX21ldGFkYXRhX2Jz Zl9zZWxlY3Q9ImNic19oMjY1Igo+ID4gPiA+IMKgbWpwZWcyanBlZ19ic2Zfc2VsZWN0PSJqcGVn dGFibGVzIgo+ID4gPiA+IMKgbXBlZzJfbWV0YWRhdGFfYnNmX3NlbGVjdD0iY2JzX21wZWcyIgo+ ID4gPiA+IC10cmFjZV9oZWFkZXJzX2JzZl9zZWxlY3Q9ImNicyIKPiA+ID4gPiArdHJhY2VfaGVh ZGVyc19ic2Zfc2VsZWN0PSJjYnMgY2JzX3ZwOCIKPiA+ID4gPiDCoHZwOV9tZXRhZGF0YV9ic2Zf c2VsZWN0PSJjYnNfdnA5Igo+ID4gPiA+IAo+ID4gPiA+IMKgIyBleHRlcm5hbCBsaWJyYXJpZXMK PiA+ID4gPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9NYWtlZmlsZSBiL2xpYmF2Y29kZWMvTWFr ZWZpbGUgaW5kZXgKPiA+ID4gPiAzY2Y0NDQ0YjdlLi4xYzRmMGRhMWQyIDEwMDY0NAo+ID4gPiA+ IC0tLSBhL2xpYmF2Y29kZWMvTWFrZWZpbGUKPiA+ID4gPiArKysgYi9saWJhdmNvZGVjL01ha2Vm aWxlCj4gPiA+ID4gQEAgLTc4LDYgKzc4LDcgQEAgT0JKUy0kKENPTkZJR19DQlNfSDI2NCnCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0gY2JzX2gyNjQ1Lm8KPiA+ID4gPiBjYnNfc2Vp Lm8gaDI2NDVfcGFyc2Uubwo+ID4gPiA+IMKgT0JKUy0kKENPTkZJR19DQlNfSDI2NSnCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0gY2JzX2gyNjQ1Lm8gY2JzX3NlaS5vCj4gPiBoMjY0 NV9wYXJzZS5vCj4gPiA+ID4gwqBPQkpTLSQoQ09ORklHX0NCU19KUEVHKcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCArPSBjYnNfanBlZy5vCj4gPiA+ID4gwqBPQkpTLSQoQ09ORklHX0NC U19NUEVHMinCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IGNic19tcGVnMi5vCj4gPiA+ ID4gK09CSlMtJChDT05GSUdfQ0JTX1ZQOCnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCArPSBjYnNfdnA4Lm8gdnB4X3JhYy5vCj4gPiA+ID4gwqBPQkpTLSQoQ09ORklHX0NCU19WUDkp wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0gY2JzX3ZwOS5vCj4gPiA+ID4gwqBP QkpTLSQoQ09ORklHX0NSWVNUQUxIRCnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IGNy eXN0YWxoZC5vCj4gPiA+ID4gwqBPQkpTLSQoQ09ORklHX0RDVCnCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IGRjdC5vIGRjdDMyX2ZpeGVkLm8KPiA+ID4gPiBkY3Qz Ml9mbG9hdC5vCj4gPiA+ID4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvY2JzLmMgYi9saWJhdmNv ZGVjL2Nicy5jIGluZGV4Cj4gPiA+ID4gNTA0MTk3ZTA2ZC4uYzc3MTEwYWJiMQo+ID4gPiA+IDEw MDY0NAo+ID4gPiA+IC0tLSBhL2xpYmF2Y29kZWMvY2JzLmMKPiA+ID4gPiArKysgYi9saWJhdmNv ZGVjL2Nicy5jCj4gPiA+ID4gQEAgLTQ2LDYgKzQ2LDkgQEAgc3RhdGljIGNvbnN0IENvZGVkQml0 c3RyZWFtVHlwZSAqY29uc3QKPiA+ID4gPiBjYnNfdHlwZV90YWJsZVtdID0ge8KgICNpZiBDT05G SUdfQ0JTX01QRUcyCj4gPiA+ID4gwqDCoMKgwqAgJmZmX2Nic190eXBlX21wZWcyLAo+ID4gPiA+ IMKgI2VuZGlmCj4gPiA+ID4gKyNpZiBDT05GSUdfQ0JTX1ZQOAo+ID4gPiA+ICvCoMKgwqAgJmZm X2Nic190eXBlX3ZwOCwKPiA+ID4gPiArI2VuZGlmCj4gPiA+ID4gwqAjaWYgQ09ORklHX0NCU19W UDkKPiA+ID4gPiDCoMKgwqDCoCAmZmZfY2JzX3R5cGVfdnA5LAo+ID4gPiA+IMKgI2VuZGlmCj4g PiA+ID4gQEAgLTY3LDYgKzcwLDkgQEAgY29uc3QgZW51bSBBVkNvZGVjSUQgZmZfY2JzX2FsbF9j b2RlY19pZHNbXSA9IHsKPiA+ID4gPiAjaWYKPiA+ID4gPiBDT05GSUdfQ0JTX01QRUcyCj4gPiA+ ID4gwqDCoMKgwqAgQVZfQ09ERUNfSURfTVBFRzJWSURFTywKPiA+ID4gPiDCoCNlbmRpZgo+ID4g PiA+ICsjaWYgQ09ORklHX0NCU19WUDgKPiA+ID4gPiArwqDCoMKgIEFWX0NPREVDX0lEX1ZQOCwK PiA+ID4gPiArI2VuZGlmCj4gPiA+ID4gwqAjaWYgQ09ORklHX0NCU19WUDkKPiA+ID4gPiDCoMKg wqDCoCBBVl9DT0RFQ19JRF9WUDksCj4gPiA+ID4gwqAjZW5kaWYKPiA+ID4gPiBkaWZmIC0tZ2l0 IGEvbGliYXZjb2RlYy9jYnNfaW50ZXJuYWwuaCBiL2xpYmF2Y29kZWMvY2JzX2ludGVybmFsLmgK PiA+ID4gPiBpbmRleAo+ID4gPiA+IGU1ODVjNzc5MzQuLmJlYWY4NTA1ZDEgMTAwNjQ0Cj4gPiA+ ID4gLS0tIGEvbGliYXZjb2RlYy9jYnNfaW50ZXJuYWwuaAo+ID4gPiA+ICsrKyBiL2xpYmF2Y29k ZWMvY2JzX2ludGVybmFsLmgKPiA+ID4gPiBAQCAtMjQ3LDYgKzI0Nyw3IEBAIGV4dGVybiBjb25z dCBDb2RlZEJpdHN0cmVhbVR5cGUKPiA+ID4gPiBmZl9jYnNfdHlwZV9oMjY0OyBleHRlcm4gY29u c3QgQ29kZWRCaXRzdHJlYW1UeXBlIGZmX2Nic190eXBlX2gyNjU7Cj4gPiA+ID4gZXh0ZXJuIGNv bnN0IENvZGVkQml0c3RyZWFtVHlwZSBmZl9jYnNfdHlwZV9qcGVnO8KgIGV4dGVybiBjb25zdAo+ ID4gPiA+IENvZGVkQml0c3RyZWFtVHlwZSBmZl9jYnNfdHlwZV9tcGVnMjsKPiA+ID4gPiArZXh0 ZXJuIGNvbnN0IENvZGVkQml0c3RyZWFtVHlwZSBmZl9jYnNfdHlwZV92cDg7Cj4gPiA+ID4gwqBl eHRlcm4gY29uc3QgQ29kZWRCaXRzdHJlYW1UeXBlIGZmX2Nic190eXBlX3ZwOTsKPiA+ID4gPiAK PiA+ID4gPiAKPiA+ID4gPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9jYnNfdnA4LmMgYi9saWJh dmNvZGVjL2Nic192cDguYyBuZXcgZmlsZQo+ID4gPiA+IG1vZGUKPiA+ID4gPiAxMDA2NDQgaW5k ZXggMDAwMDAwMDAwMC4uYTg5MDU5MGNkOQo+ID4gPiA+IC0tLSAvZGV2L251bGwKPiA+ID4gPiAr KysgYi9saWJhdmNvZGVjL2Nic192cDguYwo+ID4gPiA+IEBAIC0wLDAgKzEsMzYwIEBACj4gPiA+ ID4gKy8qCj4gPiA+ID4gKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPiA+ID4gPiAr ICoKPiA+ID4gPiArICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vcgo+ID4gPiA+ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gPiA+ID4gKyAqIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgo+ID4gPiA+ICsgKiB2 ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KPiA+ID4gPiArICoKPiA+ID4gPiArICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gPiA+ID4gKyAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gPiA+ ID4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS7CoCBTZWUgdGhlCj4gPiA+ID4gK0dOVQo+ID4gPiA+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ID4gPiA+ICsgKgo+ID4gPiA+ICsgKiBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi bGljCj4gPiA+ID4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUg dG8gdGhlIEZyZWUgU29mdHdhcmUKPiA+ID4gPiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQo+ID4gPiA+ICswMjExMC0xMzAx IFVTQcKgICovCj4gPiA+ID4gKwo+ID4gPiA+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2F2YXNzZXJ0 LmgiCj4gPiA+ID4gKwo+ID4gPiA+ICsjaW5jbHVkZSAiY2JzLmgiCj4gPiA+ID4gKyNpbmNsdWRl ICJjYnNfaW50ZXJuYWwuaCIKPiA+ID4gPiArI2luY2x1ZGUgImNic192cDguaCIKPiA+ID4gPiAr Cj4gPiA+ID4gKyNpbmNsdWRlICJ2cDhkYXRhLmgiCj4gPiA+ID4gKwo+ID4gPiA+ICsvLyBXcmFw IG9mIFZQWFJhbmdlQ29kZXIgdG8gc3VwcG9ydCBzaXplIGNoZWNrLgo+ID4gPiA+ICt0eXBlZGVm IHN0cnVjdCBDQlNWUDhSYW5nZUNvZGVyIHsKPiA+ID4gPiArwqDCoMKgIFZQWFJhbmdlQ29kZXIg YzsKPiA+ID4gPiArwqDCoMKgIGNvbnN0IHVpbnQ4X3QgKmJ1ZmZlcjsKPiA+ID4gPiArwqDCoMKg IGludCBidWZmZXJfc2l6ZTsKPiA+ID4gPiArfSBDQlNWUDhSYW5nZUNvZGVyOwo+ID4gPiA+ICsK PiA+ID4gPiArc3RhdGljIGludCBjYnNfdnA4X3JlYWRfdW5zaWduZWQoQ29kZWRCaXRzdHJlYW1D b250ZXh0ICpjdHgsCj4gPiA+ID4gK0dldEJpdENvbnRleHQKPiA+ID4gPiAqZ2JjLAo+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGludCB3aWR0aCwgY29uc3QgY2hhciAqbmFtZSwKPiA+ID4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBj b25zdCBpbnQgKnN1YnNjcmlwdHMsIHVpbnQzMl90Cj4gPiA+ID4gKyp3cml0ZV90bykgewo+ID4g PiA+ICvCoMKgwqAgaW50IHBvczsKPiA+ID4gPiArwqDCoMKgIHVpbnQzMl90IHZhbHVlOwo+ID4g PiA+ICsKPiA+ID4gPiArwqDCoMKgIGF2X2Fzc2VydDAod2lkdGggPiAwICYmIHdpZHRoIDw9IDI0 KTsKPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoCBpZiAoZ2V0X2JpdHNfbGVmdChnYmMpIDwgd2lk dGgpIHsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgYXZfbG9nKGN0eC0+bG9nX2N0eCwgQVZfTE9H X0VSUk9SLCAiSW52YWxpZCB2YWx1ZToKPiA+ID4gPiArIGJpdHN0cmVhbQo+ID4gPiBlbmRlZC5c biIpOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsK PiA+ID4gPiArwqDCoMKgIH0KPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoCBwb3PCoMKgID0gZ2V0 X2JpdHNfY291bnQoZ2JjKTsKPiA+ID4gPiArwqDCoMKgIHZhbHVlID0gZ2V0X2JpdHNfbGUoZ2Jj LCB3aWR0aCk7Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqAgaWYgKGN0eC0+dHJhY2VfZW5hYmxl KSB7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgIGludCBpOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oCBjaGFyIGJpdHNbMzNdOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCBmb3IgKGkgPSAwOyBpIDwg d2lkdGg7IGkrKykKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBiaXRzW2ldID0gdmFs dWUgPj4gKHdpZHRoIC0gaSAtIDEpICYgMSA/ICcxJyA6ICcwJzsKPiA+ID4gPiArwqDCoMKgwqDC oMKgwqAgYml0c1tpXSA9IDA7Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCBmZl9j YnNfdHJhY2Vfc3ludGF4X2VsZW1lbnQoY3R4LCBwb3MsIG5hbWUsIHN1YnNjcmlwdHMsIGJpdHMs Cj4gPiA+ID4gdmFsdWUpOwo+ID4gPiA+ICvCoMKgwqAgfQo+ID4gPiA+ICsKPiA+ID4gPiArwqDC oMKgICp3cml0ZV90byA9IHZhbHVlOwo+ID4gPiA+ICvCoMKgwqAgcmV0dXJuIDA7Cj4gPiA+ID4g K30KPiA+ID4gPiArCj4gPiA+ID4gK3N0YXRpYyBpbnQgY2JzX3ZwOF9pbml0X3JhbmdlX2RlY29k ZXIoQ0JTVlA4UmFuZ2VDb2RlciAqcmFjLCBjb25zdAo+ID4gPiA+ICt1aW50OF90Cj4gPiA+ID4g KmJ1ZiwKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IGJ1Zl9zaXplKSB7Cj4gPiA+ID4g K8KgwqDCoCBpbnQgZXJyOwo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgIGVyciA9IGZmX3ZweF9p bml0X3JhbmdlX2RlY29kZXIoJnJhYy0+YywgYnVmLCBidWZfc2l6ZSk7Cj4gPiA+ID4gK8KgwqDC oCBpZiAoZXJyIDwgMCkKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGVycjsKPiA+ID4g PiArCj4gPiA+ID4gK8KgwqDCoCByYWMtPmJ1ZmZlcsKgwqDCoMKgwqAgPSBidWY7Cj4gPiA+ID4g K8KgwqDCoCByYWMtPmJ1ZmZlcl9zaXplID0gYnVmX3NpemU7Cj4gPiA+ID4gK8KgwqDCoCByZXR1 cm4gMDsKPiA+ID4gPiArfQo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIGF2X3VudXNlZCBpbnQg Y2JzX3ZwOF9yYWNfZ2V0KENCU1ZQOFJhbmdlQ29kZXIgKnJhYywgaW50Cj4gPiA+ID4gK3dpZHRo KSB7Cj4gPiA+ID4gK8KgwqDCoCBpbnQgdmFsdWUgPSAwOwo+ID4gPiA+ICsKPiA+ID4gPiArwqDC oMKgIHdoaWxlICh3aWR0aC0tKQo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCB2YWx1ZSA9ICh2YWx1 ZSA8PCAxKSB8IHZweF9yYWNfZ2V0X3Byb2IoJnJhYy0+YywgMTI4KTsKPiA+ID4gPiArCj4gPiA+ ID4gK8KgwqDCoCByZXR1cm4gdmFsdWU7Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4gPiA+ID4gK3N0 YXRpYyBpbnQgY2JzX3ZwOF9yYWNfZ2V0X3Byb2JfYnJhbmNoeShDQlNWUDhSYW5nZUNvZGVyICpy YWMsIGludAo+ID4gPiA+ICtwcm9iKSB7Cj4gPiA+ID4gK8KgwqDCoCByZXR1cm4gdnB4X3JhY19n ZXRfcHJvYl9icmFuY2h5KCZyYWMtPmMsIHByb2IpOyB9Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0 aWMgaW50IGNic192cDhfcmFjX2dldF9iaXRzX2NvdW50KENCU1ZQOFJhbmdlQ29kZXIgKnJhYykg ewo+ID4gPiA+ICvCoMKgwqAgaW50IGJpdHNfY291bnQgPSAocmFjLT5jLmJ1ZmZlciAtIHJhYy0+ YnVmZmVyKSAqIDg7Cj4gPiA+ID4gK8KgwqDCoCBiaXRzX2NvdW50ICs9IHJhYy0+Yy5iaXRzOwo+ ID4gPiA+ICvCoMKgwqAgcmV0dXJuIGJpdHNfY291bnQ7Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4g PiA+ID4gK3N0YXRpYyBpbnQgY2JzX3ZwOF9yYWNfcmVhZF91bnNpZ25lZChDb2RlZEJpdHN0cmVh bUNvbnRleHQgKmN0eCwKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIENCU1ZQOFJhbmdlQ29kZXIg KnJhYywgaW50IHdpZHRoLAo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3QgY2hhciAqbmFt ZSwgY29uc3QgaW50Cj4gPiA+ID4gKnN1YnNjcmlwdHMsCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB1aW50MzJfdCAqd3JpdGVfdG8pIHsKPiA+ID4gPiArwqDCoMKgIENvZGVkQml0c3RyZWFtVlA4 Q29udGV4dCAqdnA4ID0gY3R4LT5wcml2X2RhdGE7Cj4gPiA+ID4gK8KgwqDCoCB1aW50MzJfdCB2 YWx1ZTsKPiA+ID4gPiArwqDCoMKgIGludCBwb3M7Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqAg YXZfYXNzZXJ0MCh3aWR0aCA+PSAwICYmIHdpZHRoIDw9IDgpOwo+ID4gPiA+ICsKPiA+ID4gPiAr wqDCoMKgIGlmICh2cHhfcmFjX2lzX2VuZCgmcmFjLT5jKSkgewo+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoCBhdl9sb2coY3R4LT5sb2dfY3R4LCBBVl9MT0dfRVJST1IsCj4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgIkludmFsaWQgdmFsdWUgYXQgIgo+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICIlczogYml0c3RyZWFtIGVuZGVkLlxuIiwKPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBuYW1lKTsKPiA+ID4gPiArwqDCoMKgwqDCoMKg wqAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gPiA+ID4gK8KgwqDCoCB9Cj4gPiA+ID4g Kwo+ID4gPiA+ICvCoMKgwqAgcG9zID0gY2JzX3ZwOF9yYWNfZ2V0X2JpdHNfY291bnQocmFjKTsK PiA+ID4gPiArwqDCoMKgIGlmIChwb3MgPiByYWMtPmJ1ZmZlcl9zaXplICogOCkgewo+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoCBhdl9sb2coY3R4LT5sb2dfY3R4LCBBVl9MT0dfRVJST1IsCj4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIkludmFsaWQgdmFsdWUgYXQgIgo+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICIlczogYml0c3RyZWFtIGVuZGVkLlxu IiwKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBuYW1lKTsKPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gPiA+ID4gK8KgwqDC oCB9Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqAgcG9zICs9IHZwOC0+dW5jb21wcmVzc2VkX2hl YWRlcl9zaXplICogODsKPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoCB2YWx1ZSA9IGNic192cDhf cmFjX2dldChyYWMsIHdpZHRoKTsKPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoCBpZiAoY3R4LT50 cmFjZV9lbmFibGUpIHsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgY2hhciBiaXRzWzMzXSA9ICIt IjsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgZmZfY2JzX3RyYWNlX3N5bnRheF9lbGVtZW50KGN0 eCwgcG9zLCBuYW1lLCBzdWJzY3JpcHRzLCBiaXRzLAo+ID4gPiA+IHZhbHVlKTsKPiA+ID4gPiAr wqDCoMKgIH0KPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoCAqd3JpdGVfdG8gPSB2YWx1ZTsKPiA+ ID4gPiArwqDCoMKgIHJldHVybiAwOwo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0 aWMgaW50IGNic192cDhfcmFjX3JlYWRfc2lnbmVkKENvZGVkQml0c3RyZWFtQ29udGV4dCAqY3R4 LAo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBDQlNWUDhSYW5nZUNvZGVyICpyYWMsIGludCB3aWR0aCwK PiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgaW50Cj4gPiA+ID4g KnN1YnNjcmlwdHMsCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludDMyX3QgKndyaXRlX3RvKSB7Cj4g PiA+ID4gK8KgwqDCoCBDb2RlZEJpdHN0cmVhbVZQOENvbnRleHQgKnZwOCA9IGN0eC0+cHJpdl9k YXRhOwo+ID4gPiA+ICvCoMKgwqAgaW50MzJfdCB2YWx1ZTsKPiA+ID4gPiArwqDCoMKgIGludCBw b3M7Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqAgYXZfYXNzZXJ0MCh3aWR0aCA+PSAwICYmIHdp ZHRoIDw9IDgpOwo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgIGlmICh2cHhfcmFjX2lzX2VuZCgm cmFjLT5jKSkgewo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCBhdl9sb2coY3R4LT5sb2dfY3R4LCBB Vl9MT0dfRVJST1IsCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIkludmFs aWQgdmFsdWUgYXQgIgo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICIlczog Yml0c3RyZWFtIGVuZGVkLlxuIiwKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBuYW1lKTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERB VEE7Cj4gPiA+ID4gK8KgwqDCoCB9Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqAgcG9zID0gY2Jz X3ZwOF9yYWNfZ2V0X2JpdHNfY291bnQocmFjKTsKPiA+ID4gPiArwqDCoMKgIGlmIChwb3MgPiBy YWMtPmJ1ZmZlcl9zaXplICogOCkgewo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCBhdl9sb2coY3R4 LT5sb2dfY3R4LCBBVl9MT0dfRVJST1IsCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgIkludmFsaWQgdmFsdWUgYXQgIgo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICIlczogYml0c3RyZWFtIGVuZGVkLlxuIiwKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBuYW1lKTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJS T1JfSU5WQUxJRERBVEE7Cj4gPiA+ID4gK8KgwqDCoCB9Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKg wqAgcG9zICs9IHZwOC0+dW5jb21wcmVzc2VkX2hlYWRlcl9zaXplICogODsKPiA+ID4gPiArCj4g PiA+ID4gK8KgwqDCoCB2YWx1ZSA9IGNic192cDhfcmFjX2dldChyYWMsIHdpZHRoKTsKPiA+ID4g PiArwqDCoMKgIGlmIChjYnNfdnA4X3JhY19nZXQocmFjLCAxKSkKPiA+ID4gPiArwqDCoMKgwqDC oMKgwqAgdmFsdWUgPSAtdmFsdWU7Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqAgaWYgKGN0eC0+ dHJhY2VfZW5hYmxlKSB7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgIGNoYXIgYml0c1szM10gPSAi LSI7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgIGZmX2Nic190cmFjZV9zeW50YXhfZWxlbWVudChj dHgsIHBvcywgbmFtZSwgc3Vic2NyaXB0cywgYml0cywKPiA+ID4gPiB2YWx1ZSk7Cj4gPiA+ID4g K8KgwqDCoCB9Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqAgKndyaXRlX3RvID0gdmFsdWU7Cj4g PiA+ID4gK8KgwqDCoCByZXR1cm4gMDsKPiA+ID4gPiArfQo+ID4gPiA+ICsKPiA+ID4gPiArI2Rl ZmluZSBIRUFERVIobmFtZSkgXAo+ID4gPiA+ICvCoMKgwqAgZG8geyBcCj4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgIGZmX2Nic190cmFjZV9oZWFkZXIoY3R4LCBuYW1lKTsgXAo+ID4gPiA+ICvCoMKg wqAgfSB3aGlsZSAoMCkKPiA+ID4gPiArCj4gPiA+ID4gKyNkZWZpbmUgQ0hFQ0soY2FsbCkgXAo+ ID4gPiA+ICvCoMKgwqAgZG8geyBcCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgIGludCBlcnIgPSAo Y2FsbCk7IFwKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgaWYgKGVyciA8IDApIFwKPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gZXJyOyBcCj4gPiA+ID4gK8KgwqDCoCB9IHdo aWxlICgwKQo+ID4gPiA+ICsKPiA+ID4gPiArI2RlZmluZSBGVU5DX05BTUUocncsIGNvZGVjLCBu YW1lKSBjYnNfIyNjb2RlYyMjXyMjcncjI18jI25hbWUKPiA+ID4gPiAjZGVmaW5lCj4gPiA+ID4g K0ZVTkNfVlA4KHJ3LCBuYW1lKSBGVU5DX05BTUUocncsIHZwOCwgbmFtZSkgI2RlZmluZSBGVU5D KG5hbWUpCj4gPiA+ID4gK0ZVTkNfVlA4KFJFQURXUklURSwgbmFtZSkKPiA+ID4gPiArCj4gPiA+ ID4gKyNkZWZpbmUgU1VCU0NSSVBUUyhzdWJzLCAuLi4pIFwKPiA+ID4gPiArwqDCoMKgIChzdWJz ID4gMCA/ICgoaW50W3N1YnMgKyAxXSl7c3VicywgX19WQV9BUkdTX199KSA6IE5VTEwpCj4gPiA+ ID4gKwo+ID4gPiA+ICsjZGVmaW5lIGYod2lkdGgsIG5hbWUpIHhmKHdpZHRoLCBuYW1lLCAwKQo+ ID4gPiA+ICsKPiA+ID4gPiArI2RlZmluZSByYWNfZih3aWR0aCwgbmFtZSkgcmFjX3Vuc2lnbmVk X3N1YnMod2lkdGgsIG5hbWUsIDApCj4gPiA+ID4gKyNkZWZpbmUgcmFjX3Mod2lkdGgsIG5hbWUp IHJhY19zaWduZWRfc3Vicyh3aWR0aCwgbmFtZSwgMCkgI2RlZmluZQo+ID4gPiA+ICtyYWNfZnMo d2lkdGgsIG5hbWUsIHN1YnMsIC4uLikgXAo+ID4gPiA+ICvCoMKgwqAgcmFjX3Vuc2lnbmVkX3N1 YnMod2lkdGgsIG5hbWUsIHN1YnMsIF9fVkFfQVJHU19fKSAjZGVmaW5lCj4gPiA+ID4gK3JhY19z cyh3aWR0aCwgbmFtZSwgc3VicywgLi4uKSBcCj4gPiA+ID4gK8KgwqDCoCByYWNfc2lnbmVkX3N1 YnMod2lkdGgsIG5hbWUsIHN1YnMsIF9fVkFfQVJHU19fKQo+ID4gPiA+ICsKPiA+ID4gPiArI2Rl ZmluZSBSRUFECj4gPiA+ID4gKyNkZWZpbmUgUkVBRFdSSVRFIHJlYWQKPiA+ID4gPiArI2RlZmlu ZSBSV0NvbnRleHQgR2V0Qml0Q29udGV4dAo+ID4gPiA+ICsKPiA+ID4gPiArI2RlZmluZSB4Zih3 aWR0aCwgbmFtZSwgc3VicywgLi4uKSBcCj4gPiA+ID4gK8KgwqDCoCBkbyB7IFwKPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqAgdWludDMyX3QgdmFsdWU7IFwKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAg Q0hFQ0soY2JzX3ZwOF9yZWFkX3Vuc2lnbmVkKGN0eCwgcncsIHdpZHRoLCAjbmFtZSwgXAo+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIFNVQlNDUklQVFMoc3VicywgX19WQV9BUkdTX18pLAo+ID4gPiA+ ICZ2YWx1ZSkpOyBcCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgIGN1cnJlbnQtPm5hbWUgPSB2YWx1 ZTsgXAo+ID4gPiA+ICvCoMKgwqAgfSB3aGlsZSAoMCkKPiA+ID4gPiArCj4gPiA+ID4gKyNkZWZp bmUgZml4ZWQod2lkdGgsIG5hbWUsIHZhbHVlKSBcCj4gPiA+ID4gK8KgwqDCoCBkbyB7IFwKPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqAgYXZfdW51c2VkIHVpbnQzMl90IGZpeGVkX3ZhbHVlOyBcCj4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgIENIRUNLKGZmX2Nic19yZWFkX3Vuc2lnbmVkKGN0eCwgcncs IHdpZHRoLCAjbmFtZSwgMCwKPiA+ID4gPiAmZml4ZWRfdmFsdWUsIFwKPiA+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgdmFsdWUsIHZhbHVlKSk7IFwKPiA+ID4gPiArwqDCoMKgIH0gd2hpbGUgKDApCj4gPiA+ ID4gKwo+ID4gPiA+ICsjZGVmaW5lIHJhY191bnNpZ25lZF9zdWJzKHdpZHRoLCBuYW1lLCBzdWJz LCAuLi4pIFwKPiA+ID4gPiArwqDCoMKgIGRvIHsgXAo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCB1 aW50MzJfdCB2YWx1ZTsgXAo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCBDSEVDSyhjYnNfdnA4X3Jh Y19yZWFkX3Vuc2lnbmVkKCBcCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY3R4LCBy YWMsIHdpZHRoLCAjbmFtZSwgU1VCU0NSSVBUUyhzdWJzLCBfX1ZBX0FSR1NfXyksCj4gPiA+ID4g JnZhbHVlKSk7IFwKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgY3VycmVudC0+bmFtZSA9IHZhbHVl OyBcCj4gPiA+ID4gK8KgwqDCoCB9IHdoaWxlICgwKQo+ID4gPiA+ICsKPiA+ID4gPiArI2RlZmlu ZSByYWNfc2lnbmVkX3N1YnMod2lkdGgsIG5hbWUsIHN1YnMsIC4uLikgXAo+ID4gPiA+ICvCoMKg wqAgZG8geyBcCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgIGludDMyX3QgdmFsdWU7IFwKPiA+ID4g PiArwqDCoMKgwqDCoMKgwqAgQ0hFQ0soY2JzX3ZwOF9yYWNfcmVhZF9zaWduZWQoY3R4LCByYWMs IHdpZHRoLCAjbmFtZSwgXAo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBTVUJTQ1JJUFRTKHN1 YnMsIF9fVkFfQVJHU19fKSwKPiA+ID4gPiAmdmFsdWUpKTsgXAo+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoCBjdXJyZW50LT5uYW1lID0gdmFsdWU7IFwKPiA+ID4gPiArwqDCoMKgIH0gd2hpbGUgKDAp Cj4gPiA+ID4gKwo+ID4gPiA+ICsjaW5jbHVkZSAiY2JzX3ZwOF9zeW50YXhfdGVtcGxhdGUuYyIK PiA+ID4gPiArCj4gPiA+ID4gK3N0YXRpYyBpbnQgY2JzX3ZwOF9zcGxpdF9mcmFnbWVudChDb2Rl ZEJpdHN0cmVhbUNvbnRleHQgKmN0eCwKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIENvZGVkQml0c3RyZWFt RnJhZ21lbnQgKmZyYWcsIGludAo+ID4gPiA+ICtoZWFkZXIpIHsKPiA+ID4gPiArwqDCoMKgIGlu dCBlcnI7Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqAgaWYgKGZyYWctPmRhdGFfc2l6ZSA9PSAw KQo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiA+ ID4gPiArCj4gPiA+ID4gK8KgwqDCoCBlcnIgPSBmZl9jYnNfYXBwZW5kX3VuaXRfZGF0YShmcmFn LCAwLCBmcmFnLT5kYXRhLCBmcmFnLT5kYXRhX3NpemUsCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmcmFn LT5kYXRhX3JlZik7Cj4gPiA+ID4gK8KgwqDCoCBpZiAoZXJyIDwgMCkKPiA+ID4gPiArwqDCoMKg wqDCoMKgwqAgcmV0dXJuIGVycjsKPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoCByZXR1cm4gMDsK PiA+ID4gPiArfQo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIGludCBjYnNfdnA4X3JlYWRfdW5p dChDb2RlZEJpdHN0cmVhbUNvbnRleHQgKmN0eCwKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQ29kZWRCaXRzdHJlYW1Vbml0 ICp1bml0KSB7Cj4gPiA+ID4gK8KgwqDCoCBDb2RlZEJpdHN0cmVhbVZQOENvbnRleHQgKnZwOCA9 IGN0eC0+cHJpdl9kYXRhOwo+ID4gPiA+ICvCoMKgwqAgVlA4UmF3RnJhbWUgKmZyYW1lOwo+ID4g PiA+ICvCoMKgwqAgR2V0Qml0Q29udGV4dCBnYmM7Cj4gPiA+ID4gK8KgwqDCoCBDQlNWUDhSYW5n ZUNvZGVyIHJhYzsKPiA+ID4gPiArwqDCoMKgIGludCBlcnIsIHBvczsKPiA+ID4gPiArCj4gPiA+ ID4gK8KgwqDCoCBlcnIgPSBmZl9jYnNfYWxsb2NfdW5pdF9jb250ZW50KGN0eCwgdW5pdCk7Cj4g PiA+ID4gK8KgwqDCoCBpZiAoZXJyIDwgMCkKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu IGVycjsKPiA+ID4gPiArwqDCoMKgIGZyYW1lID0gdW5pdC0+Y29udGVudDsKPiA+ID4gPiArCj4g PiA+ID4gK8KgwqDCoCAvLyBDcmVhdGUgR2V0Qml0Q29udGV4dCBmb3IgdW5jb21wcmVzc2VkIGhl YWRlci4KPiA+ID4gPiArwqDCoMKgIGVyciA9IGluaXRfZ2V0X2JpdHM4X2xlKCZnYmMsIHVuaXQt PmRhdGEsIDggKiB1bml0LT5kYXRhX3NpemUpOwo+ID4gPiA+ICvCoMKgwqAgaWYgKGVyciA8IDAp Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBlcnI7Cj4gPiA+ID4gKwo+ID4gPiA+ICvC oMKgwqAgZXJyID0gY2JzX3ZwOF9yZWFkX3VuY29tcHJlc3NlZF9oZWFkZXIoY3R4LCAmZ2JjLCBm cmFtZSk7Cj4gPiA+ID4gK8KgwqDCoCBpZiAoZXJyIDwgMCkKPiA+ID4gPiArwqDCoMKgwqDCoMKg wqAgcmV0dXJuIGVycjsKPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoCBwb3MgPSBnZXRfYml0c19j b3VudCgmZ2JjKTsKPiA+ID4gPiArwqDCoMKgIGF2X2Fzc2VydDAocG9zICUgOCA9PSAwKTsKPiA+ ID4gPiArwqDCoMKgIHBvcyAvPSA4Owo+ID4gPiA+ICvCoMKgwqAgYXZfYXNzZXJ0MChwb3MgPD0g dW5pdC0+ZGF0YV9zaXplKTsKPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoCBpZiAocG9zID09IHVu aXQtPmRhdGFfc2l6ZSkKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1JfSU5W QUxJRERBVEE7Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqAgdnA4LT51bmNvbXByZXNzZWRfaGVh ZGVyX3NpemUgPSBwb3M7Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqAgLy8gQ3JlYXRlIHJhbmdl IGRlY29kZXIgZm9yIGNvbXByZXNzZWQgaGVhZGVyLgo+ID4gPiA+ICvCoMKgwqAgZXJyID0gY2Jz X3ZwOF9pbml0X3JhbmdlX2RlY29kZXIoCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgICZyYWMsIHVu aXQtPmRhdGEgKyBwb3MsIGZyYW1lLQo+ID4gPiA+ID5oZWFkZXIuZmlyc3RfcGFydGl0aW9uX2xl bmd0aF9pbl9ieXRlcyk7Cj4gPiA+ID4gK8KgwqDCoCBpZiAoZXJyIDwgMCkKPiA+ID4gPiArwqDC oMKgwqDCoMKgwqAgcmV0dXJuIGVycjsKPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoCBlcnIgPSBj YnNfdnA4X3JlYWRfY29tcHJlc3NlZF9oZWFkZXIoY3R4LCAmcmFjLCBmcmFtZSk7Cj4gPiA+ID4g K8KgwqDCoCBpZiAoZXJyIDwgMCkKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGVycjsK PiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoCBwb3MgPSBjYnNfdnA4X3JhY19nZXRfYml0c19jb3Vu dCgmcmFjKTsKPiA+ID4gPiArwqDCoMKgIGlmIChwb3MgPiByYWMuYnVmZmVyX3NpemUgKiA4KQo+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiA+ID4g PiArCj4gPiA+ID4gK8KgwqDCoCBmcmFtZS0+ZGF0YV9yZWYgPSBhdl9idWZmZXJfcmVmKHVuaXQt PmRhdGFfcmVmKTsKPiA+ID4gPiArwqDCoMKgIGlmICghZnJhbWUtPmRhdGFfcmVmKQo+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ID4gPiA+ICsKPiA+ID4g PiArwqDCoMKgIGZyYW1lLT5kYXRhwqDCoMKgwqDCoCA9IHVuaXQtPmRhdGEgKyBwb3M7Cj4gPiA+ ID4gK8KgwqDCoCBmcmFtZS0+ZGF0YV9zaXplID0gdW5pdC0+ZGF0YV9zaXplIC0gcG9zOwo+ID4g PiA+ICsKPiA+ID4gPiArwqDCoMKgIHJldHVybiAwOwo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4g PiA+ICtzdGF0aWMgaW50IGNic192cDhfd3JpdGVfdW5pdChDb2RlZEJpdHN0cmVhbUNvbnRleHQg KmN0eCwKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBDb2RlZEJpdHN0cmVhbVVuaXQgKnVuaXQsCj4gPiA+ID4gK1B1dEJp dENvbnRleHQKPiA+ID4gPiArKnBiYykgewo+ID4gPiA+ICvCoMKgwqAgcmV0dXJuIEFWRVJST1Jf UEFUQ0hXRUxDT01FOwo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0aWMgaW50IGNi c192cDhfYXNzZW1ibGVfZnJhZ21lbnQoQ29kZWRCaXRzdHJlYW1Db250ZXh0ICpjdHgsCj4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBDb2RlZEJpdHN0cmVhbUZyYWdtZW50ICpmcmFnKSB7Cj4gPiA+ ID4gK8KgwqDCoCByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7Cj4gPiA+ID4gK30KPiA+ID4g PiArCj4gPiA+ID4gK3N0YXRpYyB2b2lkIGNic192cDhfZmx1c2goQ29kZWRCaXRzdHJlYW1Db250 ZXh0ICpjdHgpIHsKPiA+ID4gPiArwqDCoMKgIENvZGVkQml0c3RyZWFtVlA4Q29udGV4dCAqdnA4 ID0gY3R4LT5wcml2X2RhdGE7Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqAgdnA4LT51bmNvbXBy ZXNzZWRfaGVhZGVyX3NpemUgPSAwOyB9Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0aWMgY29uc3Qg Q29kZWRCaXRzdHJlYW1Vbml0VHlwZURlc2NyaXB0b3IgY2JzX3ZwOF91bml0X3R5cGVzW10gPSB7 Cj4gPiA+ID4gK8KgwqDCoCBDQlNfVU5JVF9UWVBFX0lOVEVSTkFMX1JFRigwLCBWUDhSYXdGcmFt ZSwgZGF0YSksCj4gPiA+ID4gK8KgwqDCoCBDQlNfVU5JVF9UWVBFX0VORF9PRl9MSVNUfTsKPiA+ ID4gPiArCj4gPiA+ID4gK2NvbnN0IENvZGVkQml0c3RyZWFtVHlwZSBmZl9jYnNfdHlwZV92cDgg PSB7Cj4gPiA+ID4gK8KgwqDCoCAuY29kZWNfaWTCoMKgwqDCoMKgwqDCoMKgwqAgPSBBVl9DT0RF Q19JRF9WUDgsCj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqAgLnByaXZfZGF0YV9zaXplwqDCoMKg ID0gc2l6ZW9mKENvZGVkQml0c3RyZWFtVlA4Q29udGV4dCksCj4gPiA+ID4gKwo+ID4gPiA+ICvC oMKgwqAgLnVuaXRfdHlwZXPCoMKgwqDCoMKgwqDCoCA9IGNic192cDhfdW5pdF90eXBlcywKPiA+ ID4gPiArCj4gPiA+ID4gK8KgwqDCoCAuc3BsaXRfZnJhZ21lbnTCoMKgwqAgPSAmY2JzX3ZwOF9z cGxpdF9mcmFnbWVudCwKPiA+ID4gPiArwqDCoMKgIC5yZWFkX3VuaXTCoMKgwqDCoMKgwqDCoMKg ID0gJmNic192cDhfcmVhZF91bml0LAo+ID4gPiA+ICvCoMKgwqAgLndyaXRlX3VuaXTCoMKgwqDC oMKgwqDCoCA9ICZjYnNfdnA4X3dyaXRlX3VuaXQsCj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqAg LmZsdXNowqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gJmNic192cDhfZmx1c2gsCj4gPiA+ID4g Kwo+ID4gPiA+ICvCoMKgwqAgLmFzc2VtYmxlX2ZyYWdtZW50ID0gJmNic192cDhfYXNzZW1ibGVf ZnJhZ21lbnQsIH07Cj4gPiA+ID4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvY2JzX3ZwOC5oIGIv bGliYXZjb2RlYy9jYnNfdnA4LmggbmV3IGZpbGUKPiA+ID4gPiBtb2RlCj4gPiA+ID4gMTAwNjQ0 IGluZGV4IDAwMDAwMDAwMDAuLjBiZmE0NjVmZjcKPiA+ID4gPiAtLS0gL2Rldi9udWxsCj4gPiA+ ID4gKysrIGIvbGliYXZjb2RlYy9jYnNfdnA4LmgKPiA+ID4gPiBAQCAtMCwwICsxLDExMiBAQAo+ ID4gPiA+ICsvKgo+ID4gPiA+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gPiA+ ID4gKyAqCj4gPiA+ID4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IKPiA+ID4gPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ID4gPiA+ICsgKiBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPiA+ID4gPiAr ICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCj4gPiA+ID4gKyAqCj4gPiA+ID4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ID4gPiA+ICsgKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ ID4gPiA+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuwqAgU2VlIHRoZQo+ID4gPiA+ICtHTlUKPiA+ID4gPiArICogTGVzc2VyIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiA+ID4gPiArICoKPiA+ID4gPiArICog WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYwo+ID4gPiA+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdy aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4gPiA+ID4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUx IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKPiA+ID4gPiArMDIxMTAt MTMwMSBVU0HCoCAqLwo+ID4gPiA+ICsKPiA+ID4gPiArI2lmbmRlZiBBVkNPREVDX0NCU19WUDhf SAo+ID4gPiA+ICsjZGVmaW5lIEFWQ09ERUNfQ0JTX1ZQOF9ICj4gPiA+ID4gKwo+ID4gPiA+ICsj aW5jbHVkZSA8c3RkZGVmLmg+Cj4gPiA+ID4gKyNpbmNsdWRlIDxzdGRpbnQuaD4KPiA+ID4gPiAr Cj4gPiA+ID4gKyNpbmNsdWRlICJjYnMuaCIKPiA+ID4gPiArI2luY2x1ZGUgInZweF9yYWMuaCIK PiA+ID4gPiArCj4gPiA+ID4gK2VudW0gewo+ID4gPiA+ICvCoMKgwqAgVlA4X1NUQVJUX0NPREVf MCA9IDB4OUQsCj4gPiA+ID4gK8KgwqDCoCBWUDhfU1RBUlRfQ09ERV8xID0gMHgwMSwKPiA+ID4g PiArwqDCoMKgIFZQOF9TVEFSVF9DT0RFXzIgPSAweDJBLAo+ID4gPiA+ICt9Owo+ID4gPiA+ICsK PiA+ID4gPiArZW51bSB7Cj4gPiA+ID4gK8KgwqDCoCBWUDhfS0VZX0ZSQU1FwqDCoMKgwqAgPSAw LAo+ID4gPiA+ICvCoMKgwqAgVlA4X05PTl9LRVlfRlJBTUUgPSAxLAo+ID4gPiA+ICt9Owo+ID4g PiA+ICsKPiA+ID4gPiArdHlwZWRlZiBzdHJ1Y3QgVlA4UmF3RnJhbWVIZWFkZXIgewo+ID4gPiA+ ICvCoMKgwqAgLy8gZnJhbWUgdGFnCj4gPiA+ID4gK8KgwqDCoCB1aW50OF90IGZyYW1lX3R5cGU7 Cj4gPiA+ID4gK8KgwqDCoCB1aW50OF90IHByb2ZpbGU7Cj4gPiA+ID4gK8KgwqDCoCB1aW50OF90 IHNob3dfZnJhbWU7Cj4gPiA+ID4gK8KgwqDCoCB1aW50MzJfdCBmaXJzdF9wYXJ0aXRpb25fbGVu Z3RoX2luX2J5dGVzOwo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgIHVpbnQxNl90IHdpZHRoOwo+ ID4gPiA+ICvCoMKgwqAgdWludDhfdCBob3Jpem9udGFsX3NjYWxlOwo+ID4gPiA+ICvCoMKgwqAg dWludDE2X3QgaGVpZ2h0Owo+ID4gPiA+ICvCoMKgwqAgdWludDhfdCB2ZXJ0aWNhbF9zY2FsZTsK PiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoCAvLyBmcmFtZSBoZWFkZXIKPiA+ID4gPiArwqDCoMKg IHVpbnQ4X3QgY29sb3Jfc3BhY2U7Cj4gPiA+ID4gK8KgwqDCoCB1aW50OF90IGNsYW1waW5nX3R5 cGU7Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqAgLy8gc2VnbWVudGF0aW9uCj4gPiA+ID4gK8Kg wqDCoCB1aW50OF90IHNlZ21lbnRhdGlvbl9lbmFibGVkOwo+ID4gPiA+ICvCoMKgwqAgdWludDhf dCB1cGRhdGVfc2VnbWVudF9tYXA7Cj4gPiA+ID4gK8KgwqDCoCB1aW50OF90IHVwZGF0ZV9zZWdt ZW50X2ZlYXR1cmVfZGF0YTsKPiA+ID4gPiArwqDCoMKgIHVpbnQ4X3Qgc2VnbWVudF9mZWF0dXJl X21vZGU7Cj4gPiA+ID4gK8KgwqDCoCBpbnQ4X3Qgc2VnbWVudF91cGRhdGVfcXBbNF07Cj4gPiA+ ID4gK8KgwqDCoCBpbnQ4X3Qgc2VnbWVudF91cGRhdGVfbG9vcF9maWx0ZXJfbGV2ZWxbNF07Cj4g PiA+ID4gK8KgwqDCoCB1aW50OF90IHNlZ21lbnRfdXBkYXRlX3Byb2JzWzNdOwo+ID4gPiA+ICsK PiA+ID4gPiArwqDCoMKgIC8vIGxvb3AgZmlsdGVyCj4gPiA+ID4gK8KgwqDCoCB1aW50OF90IGxv b3BfZmlsdGVyX3R5cGU7Cj4gPiA+ID4gK8KgwqDCoCB1aW50OF90IGxvb3BfZmlsdGVyX2xldmVs Owo+ID4gPiA+ICvCoMKgwqAgdWludDhfdCBsb29wX2ZpbHRlcl9zaGFycG5lc3M7Cj4gPiA+ID4g K8KgwqDCoCB1aW50OF90IG1vZGVfcmVmX2xmX2RlbHRhX2VuYWJsZWQ7Cj4gPiA+ID4gK8KgwqDC oCBpbnQ4X3QgcmVmX2xmX2RlbHRhc1s0XTsKPiA+ID4gPiArwqDCoMKgIGludDhfdCBtb2RlX2xm X2RlbHRhc1s0XTsKPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoCB1aW50OF90IGxvZzJfdG9rZW5f cGFydGl0aW9uczsKPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoCAvLyBxcAo+ID4gPiA+ICvCoMKg wqAgdWludDhfdCBiYXNlX3FpbmRleDsKPiA+ID4gPiArwqDCoMKgIGludDhfdCB5MWRjX2RlbHRh X3E7Cj4gPiA+ID4gK8KgwqDCoCBpbnQ4X3QgeTJkY19kZWx0YV9xOwo+ID4gPiA+ICvCoMKgwqAg aW50OF90IHkyYWNfZGVsdGFfcTsKPiA+ID4gPiArwqDCoMKgIGludDhfdCB1dmRjX2RlbHRhX3E7 Cj4gPiA+ID4gK8KgwqDCoCBpbnQ4X3QgdXZhY19kZWx0YV9xOwo+ID4gPiA+ICsKPiA+ID4gPiAr wqDCoMKgIC8vIHJlZgo+ID4gPiA+ICvCoMKgwqAgdWludDhfdCByZWZyZXNoX2dvbGRlbl9mcmFt ZTsKPiA+ID4gPiArwqDCoMKgIHVpbnQ4X3QgcmVmcmVzaF9hbHRlcm5hdGVfZnJhbWU7Cj4gPiA+ ID4gK8KgwqDCoCB1aW50OF90IHJlZl9mcmFtZV9zaWduX2JpYXNfZ29sZGVuOwo+ID4gPiA+ICvC oMKgwqAgdWludDhfdCByZWZfZnJhbWVfc2lnbl9iaWFzX2FsdGVybmF0ZTsKPiA+ID4gPiArwqDC oMKgIHVpbnQ4X3QgcmVmcmVzaF9sYXN0X2ZyYW1lOwo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKg IC8vIHRva2VuIHByb2JzCj4gPiA+ID4gK8KgwqDCoCB1aW50OF90IHJlZnJlc2hfZW50cm9weV9w cm9iczsKPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoCB1aW50OF90IG1iX25vX3NraXBfY29lZmY7 Cj4gPiA+ID4gK8KgwqDCoCB1aW50OF90IHByb2Jfc2tpcF9mYWxzZTsKPiA+ID4gPiArCj4gPiA+ ID4gK8KgwqDCoCB1aW50OF90IHByb2JfaW50cmE7Cj4gPiA+ID4gK8KgwqDCoCB1aW50OF90IHBy b2JfbGFzdDsKPiA+ID4gPiArwqDCoMKgIHVpbnQ4X3QgcHJvYl9nb2xkZW47Cj4gPiA+ID4gK30g VlA4UmF3RnJhbWVIZWFkZXI7Cj4gPiA+ID4gKwo+ID4gPiA+ICt0eXBlZGVmIHN0cnVjdCBWUDhS YXdGcmFtZSB7Cj4gPiA+ID4gK8KgwqDCoCBWUDhSYXdGcmFtZUhlYWRlciBoZWFkZXI7Cj4gPiA+ ID4gKwo+ID4gPiA+ICvCoMKgwqAgdWludDhfdCAqZGF0YTsKPiA+ID4gPiArwqDCoMKgIEFWQnVm ZmVyUmVmICpkYXRhX3JlZjsKPiA+ID4gPiArwqDCoMKgIHNpemVfdCBkYXRhX3NpemU7Cj4gPiA+ ID4gK30gVlA4UmF3RnJhbWU7Cj4gPiA+ID4gKwo+ID4gPiA+ICt0eXBlZGVmIHN0cnVjdCBDb2Rl ZEJpdHN0cmVhbVZQOENvbnRleHQgewo+ID4gPiA+ICvCoMKgwqAgdWludDMyX3QgdW5jb21wcmVz c2VkX2hlYWRlcl9zaXplOyB9IENvZGVkQml0c3RyZWFtVlA4Q29udGV4dDsKPiA+ID4gPiArCj4g PiA+ID4gKyNlbmRpZiAvKiBBVkNPREVDX0NCU19WUDhfSCAqLwo+ID4gPiA+IGRpZmYgLS1naXQg YS9saWJhdmNvZGVjL2Nic192cDhfc3ludGF4X3RlbXBsYXRlLmMKPiA+ID4gPiBiL2xpYmF2Y29k ZWMvY2JzX3ZwOF9zeW50YXhfdGVtcGxhdGUuYwo+ID4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4gPiA+ID4gaW5kZXggMDAwMDAwMDAwMC4uNWFiMDM0YTE2NAo+ID4gPiA+IC0tLSAvZGV2L251 bGwKPiA+ID4gPiArKysgYi9saWJhdmNvZGVjL2Nic192cDhfc3ludGF4X3RlbXBsYXRlLmMKPiA+ ID4gPiBAQCAtMCwwICsxLDIyNCBAQAo+ID4gPiA+ICsvKgo+ID4gPiA+ICsgKiBUaGlzIGZpbGUg aXMgcGFydCBvZiBGRm1wZWcuCj4gPiA+ID4gKyAqCj4gPiA+ID4gKyAqIEZGbXBlZyBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiA+ID4gPiArICogbW9k aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ ID4gPiA+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIKPiA+ID4gPiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9y IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gPiA+ID4gKyAqCj4gPiA+ID4g KyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAo+ID4gPiA+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ID4gPiA+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuwqAgU2VlIHRoZQo+ID4gPiA+ICtHTlUKPiA+ ID4gPiArICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K PiA+ID4gPiArICoKPiA+ID4gPiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ID4gPiA+ICsgKiBMaWNlbnNlIGFsb25n IHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4gPiA+ID4g KyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv c3RvbiwgTUEKPiA+ID4gPiArMDIxMTAtMTMwMSBVU0HCoCAqLwo+ID4gPiA+ICsKPiA+ID4gPiAr c3RhdGljIGludCBGVU5DKHVwZGF0ZV9zZWdtZW50YXRpb24pKENvZGVkQml0c3RyZWFtQ29udGV4 dCAqY3R4LAo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQ0JTVlA4UmFuZ2VDb2RlciAqcmFjLAo+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgVlA4UmF3RnJhbWVIZWFkZXIgKmN1cnJlbnQpIHsKPiA+ ID4gPiArwqDCoMKgIHJhY19mKDEsIHVwZGF0ZV9zZWdtZW50X21hcCk7Cj4gPiA+ID4gK8KgwqDC oCByYWNfZigxLCB1cGRhdGVfc2VnbWVudF9mZWF0dXJlX2RhdGEpOwo+ID4gPiA+ICsKPiA+ID4g PiArwqDCoMKgIGlmIChjdXJyZW50LT51cGRhdGVfc2VnbWVudF9mZWF0dXJlX2RhdGEpIHsKPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqAgcmFjX2YoMSwgc2VnbWVudF9mZWF0dXJlX21vZGUpOwo+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoCAvLyBxdWFudGl6ZXIKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAg Zm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgaWYgKGNic192cDhfcmFjX2dldChyYWMsIDEpKQo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmFjX3NzKDcsIHNlZ21lbnRfdXBkYXRlX3FwW2ldLCAxLCBpKTsKPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqAgLy8gbG9vcCBmaWx0ZXIKPiA+ID4gPiArwqDCoMKgwqDCoMKg wqAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaWYgKGNic192cDhfcmFjX2dldChyYWMsIDEpKQo+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcmFjX3NzKDYsIHNlZ21lbnRfdXBkYXRlX2xvb3BfZmlsdGVyX2xl dmVsW2ldLCAxLCBpKTsKPiA+ID4gPiArwqDCoMKgIH0KPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDC oCBpZiAoY3VycmVudC0+dXBkYXRlX3NlZ21lbnRfbWFwKSB7Cj4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKQo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGlmIChjYnNfdnA4X3JhY19nZXQocmFjLCAxKSkKPiA+ID4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHJhY19mcyg4LCBzZWdtZW50X3VwZGF0ZV9wcm9ic1tpXSwgMSwg aSk7Cj4gPiA+ID4gK8KgwqDCoCB9Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqAgcmV0dXJuIDA7 Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4gPiA+ID4gK3N0YXRpYyBpbnQgRlVOQyhtb2RlX3JlZl9s Zl9kZWx0YXMpKENvZGVkQml0c3RyZWFtQ29udGV4dCAqY3R4LAo+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIENCU1ZQOFJhbmdlQ29kZXIgKnJhYywKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBWUDhSYXdG cmFtZUhlYWRlciAqY3VycmVudCkgewo+ID4gPiA+ICvCoMKgwqAgcmFjX2YoMSwgbW9kZV9yZWZf bGZfZGVsdGFfZW5hYmxlZCk7Cj4gPiA+ID4gK8KgwqDCoCBpZiAoY3VycmVudC0+bW9kZV9yZWZf bGZfZGVsdGFfZW5hYmxlZCkgewo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCBpZiAoY2JzX3ZwOF9y YWNfZ2V0KHJhYywgMSkpIHsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvLyByZWZf bGZfZGVsdGFzCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZm9yIChpbnQgaSA9IDA7 IGkgPCA0OyBpKyspCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAo Y2JzX3ZwOF9yYWNfZ2V0KHJhYywgMSkpCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHJhY19zcyg2LCByZWZfbGZfZGVsdGFzW2ldLCAxLCBpKTsKPiA+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvLyBtb2RlX2xmX2RlbHRhcwo+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKQo+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGNic192cDhfcmFjX2dldChyYWMsIDEp KQo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByYWNfc3Mo NiwgbW9kZV9sZl9kZWx0YXNbaV0sIDEsIGkpOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCB9Cj4g PiA+ID4gK8KgwqDCoCB9Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqAgcmV0dXJuIDA7Cj4gPiA+ ID4gK30KPiA+ID4gPiArCj4gPiA+ID4gK3N0YXRpYyBpbnQgRlVOQyhxdWFudGl6YXRpb25fcGFy YW1zKShDb2RlZEJpdHN0cmVhbUNvbnRleHQgKmN0eCwKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IENCU1ZQOFJhbmdlQ29kZXIgKnJhYywKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFZQOFJhd0Zy YW1lSGVhZGVyICpjdXJyZW50KSB7Cj4gPiA+ID4gK8KgwqDCoCByYWNfZig3LCBiYXNlX3FpbmRl eCk7Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqAgaWYgKGNic192cDhfcmFjX2dldChyYWMsIDEp KQo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCByYWNfcyg0LCB5MWRjX2RlbHRhX3EpOwo+ID4gPiA+ ICsKPiA+ID4gPiArwqDCoMKgIGlmIChjYnNfdnA4X3JhY19nZXQocmFjLCAxKSkKPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqAgcmFjX3MoNCwgeTJkY19kZWx0YV9xKTsKPiA+ID4gPiArCj4gPiA+ID4g K8KgwqDCoCBpZiAoY2JzX3ZwOF9yYWNfZ2V0KHJhYywgMSkpCj4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgIHJhY19zKDQsIHkyYWNfZGVsdGFfcSk7Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqAgaWYg KGNic192cDhfcmFjX2dldChyYWMsIDEpKQo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCByYWNfcyg0 LCB1dmRjX2RlbHRhX3EpOwo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgIGlmIChjYnNfdnA4X3Jh Y19nZXQocmFjLCAxKSkKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgcmFjX3MoNCwgdXZhY19kZWx0 YV9xKTsKPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoCByZXR1cm4gMDsKPiA+ID4gPiArfQo+ID4g PiA+ICsKPiA+ID4gPiArc3RhdGljIGludCBGVU5DKHVwZGF0ZV90b2tlbl9wcm9icykoQ29kZWRC aXRzdHJlYW1Db250ZXh0ICpjdHgsCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQ0JTVlA4UmFuZ2VD b2RlciAqcmFjLAo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFZQOFJhd0ZyYW1lSGVhZGVyICpjdXJy ZW50KSB7Cj4gPiA+ID4gK8KgwqDCoCBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkgewo+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoCBmb3IgKGludCBqID0gMDsgaiA8IDg7ICsraikgewo+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZvciAoaW50IGsgPSAwOyBrIDwgMzsgKytrKSB7Cj4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb3IgKGludCBsID0gMDsgbCA8 IDExOyArK2wpCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGlmIChjYnNfdnA4X3JhY19nZXRfcHJvYl9icmFuY2h5KAo+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmFjLCB2cDhfdG9rZW5f dXBkYXRlX3Byb2JzW2ldW2pdW2tdW2xdKSkKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjYnNfdnA4X3JhY19nZXQocmFjLCA4KTsKPiA+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgIH0KPiA+ ID4gPiArwqDCoMKgIH0KPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoCByZXR1cm4gMDsKPiA+ID4g PiArfQo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIGludCBGVU5DKHVwZGF0ZV9tdl9wcm9icyko Q29kZWRCaXRzdHJlYW1Db250ZXh0ICpjdHgsCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQ0JTVlA4UmFuZ2VD b2RlciAqcmFjLAo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFZQOFJhd0ZyYW1lSGVhZGVyICpjdXJyZW50KSB7 Cj4gPiA+ID4gK8KgwqDCoCBmb3IgKGludCBpID0gMDsgaSA8IDI7ICsraSkgewo+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoCBmb3IgKGludCBqID0gMDsgaiA8IDE5OyArK2opCj4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgaWYgKGNic192cDhfcmFjX2dldChyYWMsIDEpKQo+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2JzX3ZwOF9yYWNfZ2V0KHJhYywgNyk7Cj4g PiA+ID4gK8KgwqDCoCB9Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqAgcmV0dXJuIDA7Cj4gPiA+ ID4gK30KPiA+ID4gPiArCj4gPiA+ID4gK3N0YXRpYyBpbnQgRlVOQyhmcmFtZV90YWcpKENvZGVk Qml0c3RyZWFtQ29udGV4dCAqY3R4LCBSV0NvbnRleHQgKnJ3LAo+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFZQOFJhd0ZyYW1lSGVh ZGVyICpjdXJyZW50KSB7Cj4gPiA+ID4gK8KgwqDCoCBmKDEsIGZyYW1lX3R5cGUpOwo+ID4gPiA+ ICvCoMKgwqAgZigzLCBwcm9maWxlKTsKPiA+ID4gPiArwqDCoMKgIGYoMSwgc2hvd19mcmFtZSk7 Cj4gPiA+ID4gK8KgwqDCoCBmKDE5LCBmaXJzdF9wYXJ0aXRpb25fbGVuZ3RoX2luX2J5dGVzKTsK PiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoCBpZiAoY3VycmVudC0+ZnJhbWVfdHlwZSA9PSBWUDhf S0VZX0ZSQU1FKSB7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgIGZpeGVkKDgsIHN0YXJ0X2NvZGVf MCwgVlA4X1NUQVJUX0NPREVfMCk7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgIGZpeGVkKDgsIHN0 YXJ0X2NvZGVfMSwgVlA4X1NUQVJUX0NPREVfMSk7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgIGZp eGVkKDgsIHN0YXJ0X2NvZGVfMiwgVlA4X1NUQVJUX0NPREVfMik7Cj4gPiA+ID4gKwo+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoCBmKDE0LCB3aWR0aCk7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgIGYo MiwgaG9yaXpvbnRhbF9zY2FsZSk7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgIGYoMTQsIGhlaWdo dCk7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgIGYoMiwgdmVydGljYWxfc2NhbGUpOwo+ID4gPiA+ ICvCoMKgwqAgfQo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgIHJldHVybiAwOwo+ID4gPiA+ICt9 Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0aWMgaW50IEZVTkMoZnJhbWVfaGVhZGVyKShDb2RlZEJp dHN0cmVhbUNvbnRleHQgKmN0eCwKPiA+ID4gPiBDQlNWUDhSYW5nZUNvZGVyICpyYWMsCj4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgVlA4UmF3RnJhbWVIZWFkZXIgKmN1cnJlbnQpIHsKPiA+ID4gPiArwqDCoMKgIGlmIChj dXJyZW50LT5mcmFtZV90eXBlID09IFZQOF9LRVlfRlJBTUUpIHsKPiA+ID4gPiArwqDCoMKgwqDC oMKgwqAgcmFjX2YoMSwgY29sb3Jfc3BhY2UpOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCByYWNf ZigxLCBjbGFtcGluZ190eXBlKTsKPiA+ID4gPiArwqDCoMKgIH0KPiA+ID4gPiArCj4gPiA+ID4g K8KgwqDCoCByYWNfZigxLCBzZWdtZW50YXRpb25fZW5hYmxlZCk7Cj4gPiA+ID4gK8KgwqDCoCBp ZiAoY3VycmVudC0+c2VnbWVudGF0aW9uX2VuYWJsZWQpCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg IENIRUNLKEZVTkModXBkYXRlX3NlZ21lbnRhdGlvbikoY3R4LCByYWMsIGN1cnJlbnQpKTsKPiA+ ID4gPiArCj4gPiA+ID4gK8KgwqDCoCByYWNfZigxLCBsb29wX2ZpbHRlcl90eXBlKTsKPiA+ID4g PiArwqDCoMKgIHJhY19mKDYsIGxvb3BfZmlsdGVyX2xldmVsKTsKPiA+ID4gPiArwqDCoMKgIHJh Y19mKDMsIGxvb3BfZmlsdGVyX3NoYXJwbmVzcyk7Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqAg Q0hFQ0soRlVOQyhtb2RlX3JlZl9sZl9kZWx0YXMpKGN0eCwgcmFjLCBjdXJyZW50KSk7Cj4gPiA+ ID4gKwo+ID4gPiA+ICvCoMKgwqAgcmFjX2YoMiwgbG9nMl90b2tlbl9wYXJ0aXRpb25zKTsKPiA+ ID4gPiArCj4gPiA+ID4gK8KgwqDCoCBDSEVDSyhGVU5DKHF1YW50aXphdGlvbl9wYXJhbXMpKGN0 eCwgcmFjLCBjdXJyZW50KSk7Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqAgaWYgKGN1cnJlbnQt PmZyYW1lX3R5cGUgIT0gVlA4X0tFWV9GUkFNRSkgewo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCBy YWNfZigxLCByZWZyZXNoX2dvbGRlbl9mcmFtZSk7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgIHJh Y19mKDEsIHJlZnJlc2hfYWx0ZXJuYXRlX2ZyYW1lKTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAg aWYgKCFjdXJyZW50LT5yZWZyZXNoX2dvbGRlbl9mcmFtZSkKPiA+ID4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBjYnNfdnA4X3JhY19nZXQocmFjLCAyKTsKPiA+ID4gPiArwqDCoMKgwqDCoMKg wqAgaWYgKCFjdXJyZW50LT5yZWZyZXNoX2FsdGVybmF0ZV9mcmFtZSkKPiA+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBjYnNfdnA4X3JhY19nZXQocmFjLCAyKTsKPiA+ID4gPiArwqDCoMKg wqDCoMKgwqAgcmFjX2YoMSwgcmVmX2ZyYW1lX3NpZ25fYmlhc19nb2xkZW4pOwo+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoCByYWNfZigxLCByZWZfZnJhbWVfc2lnbl9iaWFzX2FsdGVybmF0ZSk7Cj4g PiA+ID4gK8KgwqDCoCB9Cj4gPiA+ID4gK8KgwqDCoCByYWNfZigxLCByZWZyZXNoX2VudHJvcHlf cHJvYnMpOwo+ID4gPiA+ICvCoMKgwqAgaWYgKGN1cnJlbnQtPmZyYW1lX3R5cGUgIT0gVlA4X0tF WV9GUkFNRSkKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgcmFjX2YoMSwgcmVmcmVzaF9sYXN0X2Zy YW1lKTsKPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoCBDSEVDSyhGVU5DKHVwZGF0ZV90b2tlbl9w cm9icykoY3R4LCByYWMsIGN1cnJlbnQpKTsKPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoCByYWNf ZigxLCBtYl9ub19za2lwX2NvZWZmKTsKPiA+ID4gPiArwqDCoMKgIGlmIChjdXJyZW50LT5tYl9u b19za2lwX2NvZWZmKQo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCByYWNfZig4LCBwcm9iX3NraXBf ZmFsc2UpOwo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgIGlmIChjdXJyZW50LT5mcmFtZV90eXBl ICE9IFZQOF9LRVlfRlJBTUUpIHsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgcmFjX2YoOCwgcHJv Yl9pbnRyYSk7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgIHJhY19mKDgsIHByb2JfbGFzdCk7Cj4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgIHJhY19mKDgsIHByb2JfZ29sZGVuKTsKPiA+ID4gPiArCj4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgIC8vIGludHJhXzE2eDE2X3Byb2IKPiA+ID4gPiArwqDCoMKg wqDCoMKgwqAgaWYgKGNic192cDhfcmFjX2dldChyYWMsIDEpKQo+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKQo+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2JzX3ZwOF9yYWNfZ2V0KHJhYywgOCk7Cj4gPiA+ID4g Kwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCAvLyBpbnRyYV9jaHJvbWFfcHJvYgo+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoCBpZiAoY2JzX3ZwOF9yYWNfZ2V0KHJhYywgMSkpCj4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspCj4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjYnNfdnA4X3JhY19nZXQocmFjLCA4KTsKPiA+ ID4gPiArCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgIENIRUNLKEZVTkModXBkYXRlX212X3Byb2Jz KShjdHgsIHJhYywgY3VycmVudCkpOwo+ID4gPiA+ICvCoMKgwqAgfQo+ID4gPiA+ICsKPiA+ID4g PiArwqDCoMKgIHJldHVybiAwOwo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0aWMg aW50IEZVTkModW5jb21wcmVzc2VkX2hlYWRlcikoQ29kZWRCaXRzdHJlYW1Db250ZXh0ICpjdHgs Cj4gPiA+ID4gUldDb250ZXh0ICpydywKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFZQOFJhd0Zy YW1lICpjdXJyZW50KSB7Cj4gPiA+ID4gK8KgwqDCoCBIRUFERVIoIkZyYW1lIik7Cj4gPiA+ID4g Kwo+ID4gPiA+ICvCoMKgwqAgQ0hFQ0soRlVOQyhmcmFtZV90YWcpKGN0eCwgcncsICZjdXJyZW50 LT5oZWFkZXIpKTsKPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoCByZXR1cm4gMDsKPiA+ID4gPiAr fQo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIGludCBGVU5DKGNvbXByZXNzZWRfaGVhZGVyKShD b2RlZEJpdHN0cmVhbUNvbnRleHQgKmN0eCwKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQ0JTVlA4UmFu Z2VDb2RlciAqcmFjLAo+ID4gPiA+ICtWUDhSYXdGcmFtZQo+ID4gPiA+ICsqY3VycmVudCkgewo+ ID4gPiA+ICvCoMKgwqAgQ0hFQ0soRlVOQyhmcmFtZV9oZWFkZXIpKGN0eCwgcmFjLCAmY3VycmVu dC0+aGVhZGVyKSk7Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqAgcmV0dXJuIDA7Cj4gPiA+ID4g K30KPiA+ID4gPiAtLQo+ID4gPiA+IDIuMjUuMQo+ID4gPiA+IAo+ID4gPiAKPiA+ID4gRnJpZW5k bHkgcGluZyByZXZpZXdzIHRvIHRha2UgYSBsb29rLgo+ID4gCj4gPiBQaW5nIHJldmlld2VyIHRv IHN1Ym1pdCwgaWYgbm8gYWRkaXRpb25hbCBjb21tZW50cy4gVGhhbmtzLAo+IAo+IFBpbmcgcmV2 aWV3ZXJzLCB0aGFua3MuCgpMR1RNLCBJJ2xsIHB1c2ggdGhpcyBpbiBhIGZldyBkYXlzIGlmIHRo ZXJlIGFyZSBubyBjb21tZW50cwoKVGhhbmtzCkhhaWhhbwoKPiAKPiAKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlz dApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0 aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBl bWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJz Y3JpYmUiLgo=