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 3290F46B24 for ; Fri, 4 Aug 2023 06:00:05 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C946B68C3D6; Fri, 4 Aug 2023 09:00:01 +0300 (EEST) Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.151]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E58E668C507 for ; Fri, 4 Aug 2023 08:59:53 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1691128799; x=1722664799; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=juiRZCFLQBiYmlr+1a95kaaxPgJ74G5ceUYkYfHbDqM=; b=SqM+j5RNlLwzWC7V7R9TEzFw2pbZdl7X4qLTOBRilDQewAwzArZuVv0s zko7XoYnk4bEBYa5OAcmVS9fsYg5kaPziic1qSj/92kR8EjjUWQO0hawa nRSc4EUaLUkFHLJnaoztOSlDxFpKgIc+ZMwIKJXuSdtnOmMcM/ai1M/q2 ZE6CeFSQdQVvuUM+10kOxt23sOo30ppsKR4f7QfwmtdsHgxyt6W7Fhqms daQelza+u6u+f7QEkLgrbskWnl7LaKnLCFgSuI+fGq7lZ8d0lHJUWGrLO kPZSGVvKDuW0D2ojWLeb2ueXCtOaTDKAnzBvLfEZx+UpMZPJuWZXiwWGT Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10791"; a="350376718" X-IronPort-AV: E=Sophos;i="6.01,254,1684825200"; d="scan'208";a="350376718" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Aug 2023 22:59:42 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10791"; a="706844146" X-IronPort-AV: E=Sophos;i="6.01,254,1684825200"; d="scan'208";a="706844146" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by orsmga006.jf.intel.com with ESMTP; 03 Aug 2023 22:59:42 -0700 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) 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.2507.27; Thu, 3 Aug 2023 22:59:42 -0700 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) 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; Thu, 3 Aug 2023 22:59:42 -0700 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.168) 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.2507.27; Thu, 3 Aug 2023 22:59:41 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FcTnDcexegKEvtDx3E8KsPlw0If2naqwyITfagdP97+G9aDw6S5c1htQS1mwwF+zOUyWYQ7uiCEFG67CG/WVRIW2QnLcafM8HXPgZnG1CzBiBUEDM0F/+d2uzKtXBLnY+TtIY6CewhGeWVZM3srnYmCP4oNL6x7D003DPZUA/BON1KavHFJPp/AGzO8OP9MZsB4eP0KhpMhsf9OrguB0ff+aUB5+IPDHXRS3ahkByVcfRt3+qWCV08VvsWIILbwHh24mAGUsro72MUFXHcxVBJXQkf1htzJdS0f65gdSCsUtNXW6+0Y7UjC6WyLuxS887Xn2LTETqKouY66LksQ+gA== 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=juiRZCFLQBiYmlr+1a95kaaxPgJ74G5ceUYkYfHbDqM=; b=GrRWdFmpFSmm79qDu/oleK2IpNVzxASOrIXG5zVWAbV8zCd+PQ92FGcilkzreQ0IooKAhCwrlABUsa+/kJjRQy2BBWOEwi86hVURI0HhVtk7VQxUwR6xiDShYel+cY55Y6aQfqTg/CedhK/+Q589mwLPy0lS2vSmSdSECbHaw1ZtDK89z+5jkLMhkcPr4o9lne0gdTzr0zUobVbE5HKPDEUJuiEr+l8WeSjlv2ceG1AjoU8X7M2ATta1EbC3pYTJO2PxO+esnAnm4FErmdCQF2Bh9SXtrKCH/YoYhxQACkb1y4mnY9oYoTSXnjy7j+R4IxXTEppZ24lMsUjRvHgHoQ== 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 SA0PR11MB4752.namprd11.prod.outlook.com (2603:10b6:806:99::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6652.21; Fri, 4 Aug 2023 05:59:37 +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.021; Fri, 4 Aug 2023 05:59:36 +0000 From: "Xiang, Haihao" To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [FFmpeg-devel] [PATCH v4 1/9] libavutil: add hwcontext_d3d12va and AV_PIX_FMT_D3D12 Thread-Index: AQHZuijODfajpKUCJE2pa8NTPG6/V6/ZvVsA Date: Fri, 4 Aug 2023 05:59:35 +0000 Message-ID: <03652142f1d017f13d8a870629f1a8a1ba032ff4.camel@intel.com> References: <20230719100202.1584-1-tong1.wu@intel.com> In-Reply-To: <20230719100202.1584-1-tong1.wu@intel.com> 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-0ubuntu1 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_|SA0PR11MB4752:EE_ x-ms-office365-filtering-correlation-id: f8c8928e-ea74-4f89-caa1-08db94affb96 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: A/km+DgeI6OND5z+RVp6pqNixekXk7aiSH81GuolJubqNrg0LKDcSu6bWUkXjrycLnWIKH/LBOsWiFbzaNfkLdIHCXG0Iqmrcj+GTIEJT0B+YiaO8HyWceHKtKVBrGqeGEuQZxklfRTBq2iW5Z9Gv/Ljzo/XCZkUiJZrgNrZvD8GDdyKiC0SnF3DXK6U5IcEiqzFGQC9c0U8VkLMXI5CX+yT/bcsXtDV9vWCTSmK8ixVqx7lB59B4uII3RZsmXLSLJpAT88wSO/xRRkIk3lRJIKG7sKMw3ZyacejuBLpP0/R4JGKAH7cejmEmwNOF6I8Gm3HbAfM/OgtZclvYRwsmtGt2bvLP4BqhYSECOsRqEdD8gmiYtmZJlhDYz8g6U/N5mBV/mb4pDlmcL4JF+6utFIFoX3XOY9g5K41UZZGXXpVA6B2IOLcA8VjWtsDsQHxgyYODQMzisbhcV8D14UPrLh7U8T9RQtNOCVayzFTb5AmMuhV76rqI80ViTNsVPHPboACUGtoBmMxMTmKwDMvJpkzhcbAgjxeLGqo36thx4LTaiKwv04wyONyCghAX3qmCoGXcvMZviShciA5fV7PCGmKd5j+w7kP5olyU8d6mOLKNjXyNKZmuM9ODRlC+gM4MDosQRPVTyLVy7HsGdnw1g== 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)(39860400002)(136003)(376002)(366004)(346002)(396003)(451199021)(1800799003)(186006)(6486002)(38070700005)(6512007)(966005)(86362001)(71200400001)(6506007)(26005)(107886003)(36756003)(2616005)(83380400001)(38100700002)(122000001)(82960400001)(19627235002)(5660300002)(41300700001)(8936002)(8676002)(4326008)(6916009)(64756008)(66446008)(2906002)(91956017)(76116006)(66556008)(66946007)(30864003)(316002)(66899021)(45080400002)(478600001)(54906003)(66476007)(2004002)(579004)(559001)(309714004); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?UDdSOW9uUDVaZHp2NDZ3amlWTCthNldhSnR3dmNOOHVWODh0c0pQQjBPU3FI?= =?utf-8?B?R2g5cnlqbFAreTVEZS9OUmkwbXdnYnFBcWFSV2Y0WFlGR2hNTVZIRTNhQjFW?= =?utf-8?B?VjdpSTlmd2NMa2FpaXJ5VUZRN0VQT2JCYkhuZzVoVmRBdGtqOWxMU2RYWXRD?= =?utf-8?B?MHNnMjU0Y1hOZnV0WU1ibUtTaWFLQWszVkVaUmFVNldIQ2plUk9QS3pBY1ZZ?= =?utf-8?B?cWlkdVlNQnZUYVBVSllBZXhVZFNxWFhlZGFQVC91MXU2NEJtZXE2OTVXcXJQ?= =?utf-8?B?K2QwQ1V6YlFPNEIxVU9EcFo0OHAwSW1BUFdUSnBYY05DMHFHNVRnUGpIdDFu?= =?utf-8?B?NGxNeml4NVZzbnhhRm5LWjFQQnVINUFiWStFUWVoeVd4bmpaSlhvdzZRdlRr?= =?utf-8?B?a3BjNUxwUE9hZmpBbU5nWWhad0VLWFd1MUJxTFhya2VSeGpGS0xtQnNnWlBM?= =?utf-8?B?U01ubXFsb0dmQ2hzalRhRXQzZ2FlSmNhdGt0QnNVZFZBZUpISkZocTZPZms4?= =?utf-8?B?LzBTZTd6R2Y2Uyt0WXFXLzhxR1FPVStWM0tuUDN2S2lEcFZsUVBSV3Z4WjZq?= =?utf-8?B?UE10cDF4QXVEcDN4bE5NRllNQmxjdWFwdlRLZFVLRGdFQVl6QkpvWWp5L3RC?= =?utf-8?B?c0ZKQ0svaTdyaHhVbmg5Wm9jaTk2SlF4cVQ0ZnBRY1ErY0YvSG4wTXVZVytm?= =?utf-8?B?NFJaTDU5aGYzQ3dhU2pRREFZZUQvMXlFck1JVGMyUkg4SzhLeTI0Y01odkd4?= =?utf-8?B?NXB2N1NvZnI2anJzdGpvRmd5SVdEUFRLTVVNVnplNy9leTUzS1gzNlpwR0V3?= =?utf-8?B?UldLdU9mT0dRU3NzL2tsWUl2WFp4UWxadFFPNHdvMWxOWldNYmc1YTJZcGlx?= =?utf-8?B?ejBkZFpFbUJUbkRKNHN3bDlUcUQvcHc3VmRacklHS203VDFzWngvanlMSlN2?= =?utf-8?B?YXZ2TnQ3YUtUSnV3eno4anhvYmpKc2JyRTlNNXprOEo2UTI5dmpwM0c1OWVO?= =?utf-8?B?K2dFWXZHeVIvaXRJSU9hYzRudXBvZndobnBqeTV4ODBSK3NQWXN3ZmMxMnFL?= =?utf-8?B?dHRxV0o2bW03NGJJdXhoaFB4UldUMmFMUUZPOGttVFZ1RkFQQXFTMDN5dTNv?= =?utf-8?B?aUlqRml6U3VPZ1V6bUZLT1kwZ0N4b0N1TktsMnR2ZnhwQ09rMHp1WHlOQ0t4?= =?utf-8?B?RmxOc05mMldVdGQ4TnhOTW1Ic0tCcHRNdHdod3Y2MXNVQnRjTThySTZyOXZU?= =?utf-8?B?dlF6UjBOTkZhZWlobEJrT2l0N2Z5enhrMFc0cDVSV2h0eU5tNWRRT1hOYmx0?= =?utf-8?B?TWxBM05rMm8xenZseTZaZnNUVFQ1eXhiaGVsTDlDd0szUlBCTVJ6KzV3dUQ5?= =?utf-8?B?QWcvbEVNRTI3OGdSTU8rdjNRbG5ycDloTGdNTS9NR09GVlZxUnplVnRpc084?= =?utf-8?B?WGlFMVlZRDMxSGtCMzhjc3laMXhyYTdWY2F2UkVhby9hL2FOMldKUFFFNThC?= =?utf-8?B?QXFhandNNkloVDM0QWZnekphSVFFc0dFWUV1WTdZeTFRMGNiYjJmVDhEd3lU?= =?utf-8?B?Tko2KzlOc2I0bDVkVzBNZmdXd29XbXlZNVdKcGtFU1RzUjRZUFU0QjcxQWpS?= =?utf-8?B?MDNMbDRZZCtTY1ZRbUFKN3NMZ2dBYzBEUnY4c245Ylh3Ui9iNmZLM0g2VkNx?= =?utf-8?B?c21PQVNDTHJnYzltNUhGK0p2K1FBcUsyN3pUMGtIbjFRVm5pR1ovZTJOSlhP?= =?utf-8?B?ZWlPYVB3Yk1vU3JqMlUxdDFOdW53a0J6cTBaUTlaM2Y4S2d6TTRIbU95a3JE?= =?utf-8?B?NmVDM0RnNU9yaElpeTVCVjFrRldsKythOHRTWXdHZlp2T2szN2dvRWRlUGta?= =?utf-8?B?VXFsVTRScmdNUDNpRDRDNmxGMyswMUhYbXhhSEIwSDlheFBkRVJDM1drUWVu?= =?utf-8?B?dkdxWXV5aU9ENWVyUnFETGdhKyt6TlVSbnB2anR2dFBQamlFRnJFSWNaaUtN?= =?utf-8?B?cmdRd2RDcFp4a1VXWk8rSFRmUjFuK045dmptUk94bzM1RGNjUVM1eUNRQzNW?= =?utf-8?B?Nk9DT0JEa2psWmNLM3AvMmhEVEE2cG1TQXVQNGhvTGh5Z00weWpBeVFwRkdP?= =?utf-8?B?L0h0Q2tjalVkWHltUHQrKzJSeWlkc3ZjQUFSbUhQbkRGK3RHOU1IeU5HZnZ0?= =?utf-8?B?bkE9PQ==?= Content-ID: <03E6CF01C9494C4387D6F345603505B9@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: f8c8928e-ea74-4f89-caa1-08db94affb96 X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Aug 2023 05:59:36.3812 (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: K1+GOxUuAn1Dvhyj3mWQ2hIgIAwYNqQ39Fyr8Gbhe7ziHFXKt9AuC7/u0C6JGLsGXZImjG8SFN2goFdDzbOvrA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR11MB4752 X-OriginatorOrg: intel.com Subject: Re: [FFmpeg-devel] [PATCH v4 1/9] libavutil: add hwcontext_d3d12va and AV_PIX_FMT_D3D12 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 Cc: "Wu, Tong1" , "toqsxw@outlook.com" 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: T24gV28sIDIwMjMtMDctMTkgYXQgMTg6MDEgKzA4MDAsIFRvbmcgV3Ugd3JvdGU6Cj4gRnJvbTog V3UgSmlhbmh1YSA8dG9xc3h3QG91dGxvb2suY29tPgo+IAo+IFNpZ25lZC1vZmYtYnk6IFd1IEpp YW5odWEgPHRvcXN4d0BvdXRsb29rLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBUb25nIFd1IDx0b25n MS53dUBpbnRlbC5jb20+Cj4gLS0tCj4gwqBjb25maWd1cmXCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDUgKwo+IMKgZG9jL0FQ SWNoYW5nZXPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg fMKgwqAgNyArCj4gwqBsaWJhdnV0aWwvTWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHzCoMKgIDMgKwo+IMKgbGliYXZ1dGlsL2h3Y29udGV4dC5jwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCA0ICsKPiDCoGxpYmF2dXRpbC9od2Nv bnRleHQuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMSArCj4gwqBs aWJhdnV0aWwvaHdjb250ZXh0X2QzZDEydmEuY8KgwqDCoMKgwqDCoMKgwqDCoCB8IDcwMiArKysr KysrKysrKysrKysrKysrKysrKysrCj4gwqBsaWJhdnV0aWwvaHdjb250ZXh0X2QzZDEydmEuaMKg wqDCoMKgwqDCoMKgwqDCoCB8IDE2NyArKysrKysKPiDCoGxpYmF2dXRpbC9od2NvbnRleHRfZDNk MTJ2YV9pbnRlcm5hbC5oIHzCoCA1NCArKwo+IMKgbGliYXZ1dGlsL2h3Y29udGV4dF9pbnRlcm5h bC5owqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAxICsKPiDCoGxpYmF2dXRpbC9waXhkZXNjLmPCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCA0ICsKPiDCoGxpYmF2dXRp bC9waXhmbXQuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAg OSArCj4gwqBsaWJhdnV0aWwvdGVzdHMvaHdkZXZpY2UuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB8wqDCoCAyICsKPiDCoDEyIGZpbGVzIGNoYW5nZWQsIDk1OSBpbnNlcnRpb25zKCspCj4gwqBj cmVhdGUgbW9kZSAxMDA2NDQgbGliYXZ1dGlsL2h3Y29udGV4dF9kM2QxMnZhLmMKPiDCoGNyZWF0 ZSBtb2RlIDEwMDY0NCBsaWJhdnV0aWwvaHdjb250ZXh0X2QzZDEydmEuaAo+IMKgY3JlYXRlIG1v ZGUgMTAwNjQ0IGxpYmF2dXRpbC9od2NvbnRleHRfZDNkMTJ2YV9pbnRlcm5hbC5oCj4gCj4gZGlm ZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQo+IGluZGV4IGIwMThhYmYxMzkuLjVjYmRh ODNkNGQgMTAwNzU1Cj4gLS0tIGEvY29uZmlndXJlCj4gKysrIGIvY29uZmlndXJlCj4gQEAgLTMz OCw2ICszMzgsNyBAQCBFeHRlcm5hbCBsaWJyYXJ5IHN1cHBvcnQ6Cj4gwqDCoCAtLWRpc2FibGUt Y3VkYS1sbHZtwqDCoMKgwqDCoCBkaXNhYmxlIENVREEgY29tcGlsYXRpb24gdXNpbmcgY2xhbmcg W2F1dG9kZXRlY3RdCj4gwqDCoCAtLWRpc2FibGUtY3V2aWTCoMKgwqDCoMKgwqDCoMKgwqAgZGlz YWJsZSBOdmlkaWEgQ1VWSUQgc3VwcG9ydCBbYXV0b2RldGVjdF0KPiDCoMKgIC0tZGlzYWJsZS1k M2QxMXZhwqDCoMKgwqDCoMKgwqAgZGlzYWJsZSBNaWNyb3NvZnQgRGlyZWN0M0QgMTEgdmlkZW8g YWNjZWxlcmF0aW9uCj4gY29kZSBbYXV0b2RldGVjdF0KPiArwqAgLS1kaXNhYmxlLWQzZDEydmHC oMKgwqDCoMKgwqDCoCBkaXNhYmxlIE1pY3Jvc29mdCBEaXJlY3QzRCAxMiB2aWRlbyBhY2NlbGVy YXRpb24KPiBjb2RlIFthdXRvZGV0ZWN0XQo+IMKgwqAgLS1kaXNhYmxlLWR4dmEywqDCoMKgwqDC oMKgwqDCoMKgIGRpc2FibGUgTWljcm9zb2Z0IERpcmVjdFggOSB2aWRlbyBhY2NlbGVyYXRpb24K PiBjb2RlIFthdXRvZGV0ZWN0XQo+IMKgwqAgLS1kaXNhYmxlLWZmbnZjb2RlY8KgwqDCoMKgwqAg ZGlzYWJsZSBkeW5hbWljYWxseSBsaW5rZWQgTnZpZGlhIGNvZGUKPiBbYXV0b2RldGVjdF0KPiDC oMKgIC0tZW5hYmxlLWxpYmRybcKgwqDCoMKgwqDCoMKgwqDCoCBlbmFibGUgRFJNIGNvZGUgKExp bnV4KSBbbm9dCj4gQEAgLTE5MjYsNiArMTkyNyw3IEBAIEhXQUNDRUxfQVVUT0RFVEVDVF9MSUJS QVJZX0xJU1Q9Igo+IMKgwqDCoMKgIGN1ZGFfbGx2bQo+IMKgwqDCoMKgIGN1dmlkCj4gwqDCoMKg wqAgZDNkMTF2YQo+ICvCoMKgwqAgZDNkMTJ2YQo+IMKgwqDCoMKgIGR4dmEyCj4gwqDCoMKgwqAg ZmZudmNvZGVjCj4gwqDCoMKgwqAgbnZkZWMKPiBAQCAtMzA1NCw2ICszMDU2LDcgQEAgY3J5c3Rh bGhkX2RlcHM9ImxpYmNyeXN0YWxoZF9saWJjcnlzdGFsaGRfaWZfaCIKPiDCoGN1ZGFfZGVwcz0i ZmZudmNvZGVjIgo+IMKgY3V2aWRfZGVwcz0iZmZudmNvZGVjIgo+IMKgZDNkMTF2YV9kZXBzPSJk eHZhX2ggSUQzRDExVmlkZW9EZWNvZGVyIElEM0QxMVZpZGVvQ29udGV4dCIKPiArZDNkMTJ2YV9k ZXBzPSJkeHZhX2ggSUQzRDEyRGV2aWNlIElEM0QxMlZpZGVvRGVjb2RlciIKPiDCoGR4dmEyX2Rl cHM9ImR4dmEyYXBpX2ggRFhWQTJfQ29uZmlnUGljdHVyZURlY29kZSBvbGUzMiB1c2VyMzIiCj4g wqBmZm52Y29kZWNfZGVwc19hbnk9ImxpYmRsIExvYWRMaWJyYXJ5Igo+IMKgbWVkaWFjb2RlY19k ZXBzPSJhbmRyb2lkIgo+IEBAIC02NTQxLDYgKzY1NDQsOCBAQCBjaGVja190eXBlICJ3aW5kb3dz LmggZHhnaTFfMi5oIiAiSURYR0lPdXRwdXQxIgo+IMKgY2hlY2tfdHlwZSAid2luZG93cy5oIGR4 Z2kxXzUuaCIgIklEWEdJT3V0cHV0NSIKPiDCoGNoZWNrX3R5cGUgIndpbmRvd3MuaCBkM2QxMS5o IiAiSUQzRDExVmlkZW9EZWNvZGVyIgo+IMKgY2hlY2tfdHlwZSAid2luZG93cy5oIGQzZDExLmgi ICJJRDNEMTFWaWRlb0NvbnRleHQiCj4gK2NoZWNrX3R5cGUgIndpbmRvd3MuaCBkM2QxMi5oIiAi SUQzRDEyRGV2aWNlIgo+ICtjaGVja190eXBlICJ3aW5kb3dzLmggZDNkMTJ2aWRlby5oIiAiSUQz RDEyVmlkZW9EZWNvZGVyIgo+IMKgY2hlY2tfdHlwZSAid2luZG93cy5oIiAiRFBJX0FXQVJFTkVT U19DT05URVhUIiAtRF9XSU4zMl9XSU5OVD0weDBBMDAKPiDCoGNoZWNrX3R5cGUgImQzZDkuaCBk eHZhMmFwaS5oIiBEWFZBMl9Db25maWdQaWN0dXJlRGVjb2RlIC0KPiBEX1dJTjMyX1dJTk5UPTB4 MDYwMgo+IMKgY2hlY2tfZnVuY19oZWFkZXJzIG1mYXBpLmggTUZDcmVhdGVBbGlnbmVkTWVtb3J5 QnVmZmVyIC1sbWZwbGF0Cj4gZGlmZiAtLWdpdCBhL2RvYy9BUEljaGFuZ2VzIGIvZG9jL0FQSWNo YW5nZXMKPiBpbmRleCA1YWZlOGJjYjc1Li5jMTRhYjBiMzk0IDEwMDY0NAo+IC0tLSBhL2RvYy9B UEljaGFuZ2VzCj4gKysrIGIvZG9jL0FQSWNoYW5nZXMKPiBAQCAtMiw2ICsyLDEzIEBAIFRoZSBs YXN0IHZlcnNpb24gaW5jcmVhc2VzIG9mIGFsbCBsaWJyYXJpZXMgd2VyZSBvbiAyMDIzLTAyLQo+ IDA5Cj4gwqAKPiDCoEFQSSBjaGFuZ2VzLCBtb3N0IHJlY2VudCBmaXJzdDoKPiDCoAo+ICsyMDIz LTA3LXh4IC0geHh4eHh4eHh4eCAtIGxhdnUgNTguMTUuMTAwIC0gcGl4Zm10LmggaHdjb250ZXh0 LmgKPiBod2NvbnRleHRfZDNkMTJ2YS5oCj4gK8KgIEFkZCBBVl9IV0RFVklDRV9UWVBFX0QzRDEy VkEgYW5kIEFWX1BJWF9GTVRfRDNEMTIuCj4gK8KgIEFkZCBBVkQzRDEyVkFEZXZpY2VDb250ZXh0 LCBBVkQzRDEyVkFTeW5jQ29udGV4dCwgQVZEM0QxMkZyYW1lRGVzY3JpcHRvciwKPiArwqAgYW5k IEFWRDNEMTJWQUZyYW1lc0NvbnRleHQuCj4gK8KgIEFkZCBhdl9kM2QxMnZhX21hcF9zd190b19o d19mb3JtYXQsIGF2X2QzZDEydmFfY3JlYXRlX3N5bmNfY29udGV4dCwKPiArwqAgYXZfZDNkMTJ2 YV9yZWxlYXNlX3N5bmNfY29udGV4dCwgYXZfZDNkMTJ2YV93YWl0X2lkbGUsIGFuZAo+IGF2X2Qz ZDEydmFfd2FpdF9xdWV1ZV9pZGxlLgo+ICsKPiDCoDIwMjMtMDcteHggLSB4eHh4eHh4eHh4IC0g bGF2YyA2MCAtIGF2Y29kZWMuaAo+IMKgwqAgRGVwcmVjYXRlIEFWX0NPREVDX0ZMQUdfRFJPUENI QU5HRUQgd2l0aG91dCByZXBsYWNlbWVudC4KPiDCoAo+IGRpZmYgLS1naXQgYS9saWJhdnV0aWwv TWFrZWZpbGUgYi9saWJhdnV0aWwvTWFrZWZpbGUKPiBpbmRleCBiZDljNmY5ZTMyLi40MGQ0OWQ3 NmRkIDEwMDY0NAo+IC0tLSBhL2xpYmF2dXRpbC9NYWtlZmlsZQo+ICsrKyBiL2xpYmF2dXRpbC9N YWtlZmlsZQo+IEBAIC00MSw2ICs0MSw3IEBAIEhFQURFUlMgPQo+IGFkbGVyMzIuaMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFwKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoCBod2NvbnRleHQuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgXAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgIGh3Y29udGV4dF9jdWRhLmjCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgIGh3Y29udGV4 dF9kM2QxMXZhLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+ICvCoMKgwqDCoMKgwqDC oMKgwqAgaHdjb250ZXh0X2QzZDEydmEuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcCj4g wqDCoMKgwqDCoMKgwqDCoMKgwqAgaHdjb250ZXh0X2RybS5owqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgXAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgIGh3Y29udGV4dF9keHZhMi5o wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAg aHdjb250ZXh0X3Fzdi5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+IEBA IC0xODYsNiArMTg3LDcgQEAgT0JKUyA9Cj4gYWRsZXIzMi5vwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+IMKgCj4gwqBPQkpTLSQoQ09ORklH X0NVREEpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBod2NvbnRl eHRfY3VkYS5vCj4gwqBPQkpTLSQoQ09ORklHX0QzRDExVkEpwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCArPSBod2NvbnRleHRfZDNkMTF2YS5vCj4gK09CSlMtJChDT05GSUdfRDNE MTJWQSnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IGh3Y29udGV4dF9kM2Qx MnZhLm8KPiDCoE9CSlMtJChDT05GSUdfRFhWQTIpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgKz0gaHdjb250ZXh0X2R4dmEyLm8KPiDCoE9CSlMtJChDT05GSUdfTElCRFJN KcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBod2NvbnRleHRfZHJtLm8K PiDCoE9CSlMtJChDT05GSUdfTUFDT1NfS1BFUkYpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Kz0gbWFjb3Nfa3BlcmYubwo+IEBAIC0yMDksNiArMjExLDcgQEAgU0tJUEhFQURFUlMtJChIQVZF X0NVREFfSCnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0gaHdjb250ZXh0X2N1ZGEuaAo+IMKg U0tJUEhFQURFUlMtJChDT05GSUdfQ1VEQSnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0gaHdj b250ZXh0X2N1ZGFfaW50ZXJuYWwuaMKgwqDCoMKgIFwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgY3VkYV9jaGVjay5oCj4gwqBTS0lQSEVBREVSUy0kKENPTkZJR19EM0QxMVZBKcKgwqDC oMKgwqDCoMKgwqDCoCArPSBod2NvbnRleHRfZDNkMTF2YS5oCj4gK1NLSVBIRUFERVJTLSQoQ09O RklHX0QzRDEyVkEpwqDCoMKgwqDCoMKgwqDCoMKgICs9IGh3Y29udGV4dF9kM2QxMnZhLmgKPiDC oFNLSVBIRUFERVJTLSQoQ09ORklHX0RYVkEyKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0gaHdj b250ZXh0X2R4dmEyLmgKPiDCoFNLSVBIRUFERVJTLSQoQ09ORklHX1FTVinCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCArPSBod2NvbnRleHRfcXN2LmgKPiDCoFNLSVBIRUFERVJTLSQoQ09ORklH X09QRU5DTCnCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBod2NvbnRleHRfb3BlbmNsLmgKPiBkaWZm IC0tZ2l0IGEvbGliYXZ1dGlsL2h3Y29udGV4dC5jIGIvbGliYXZ1dGlsL2h3Y29udGV4dC5jCj4g aW5kZXggMzM5NjU5ODI2OS4uMDQwNzBiYzNjMyAxMDA2NDQKPiAtLS0gYS9saWJhdnV0aWwvaHdj b250ZXh0LmMKPiArKysgYi9saWJhdnV0aWwvaHdjb250ZXh0LmMKPiBAQCAtMzYsNiArMzYsOSBA QCBzdGF0aWMgY29uc3QgSFdDb250ZXh0VHlwZSAqIGNvbnN0IGh3X3RhYmxlW10gPSB7Cj4gwqAj aWYgQ09ORklHX0QzRDExVkEKPiDCoMKgwqDCoCAmZmZfaHdjb250ZXh0X3R5cGVfZDNkMTF2YSwK PiDCoCNlbmRpZgo+ICsjaWYgQ09ORklHX0QzRDEyVkEKPiArwqDCoMKgICZmZl9od2NvbnRleHRf dHlwZV9kM2QxMnZhLAo+ICsjZW5kaWYKPiDCoCNpZiBDT05GSUdfTElCRFJNCj4gwqDCoMKgwqAg JmZmX2h3Y29udGV4dF90eXBlX2RybSwKPiDCoCNlbmRpZgo+IEBAIC03MSw2ICs3NCw3IEBAIHN0 YXRpYyBjb25zdCBjaGFyICpjb25zdCBod190eXBlX25hbWVzW10gPSB7Cj4gwqDCoMKgwqAgW0FW X0hXREVWSUNFX1RZUEVfRFJNXcKgwqDCoCA9ICJkcm0iLAo+IMKgwqDCoMKgIFtBVl9IV0RFVklD RV9UWVBFX0RYVkEyXcKgID0gImR4dmEyIiwKPiDCoMKgwqDCoCBbQVZfSFdERVZJQ0VfVFlQRV9E M0QxMVZBXSA9ICJkM2QxMXZhIiwKPiArwqDCoMKgIFtBVl9IV0RFVklDRV9UWVBFX0QzRDEyVkFd ID0gImQzZDEydmEiLAo+IMKgwqDCoMKgIFtBVl9IV0RFVklDRV9UWVBFX09QRU5DTF0gPSAib3Bl bmNsIiwKPiDCoMKgwqDCoCBbQVZfSFdERVZJQ0VfVFlQRV9RU1ZdwqDCoMKgID0gInFzdiIsCj4g wqDCoMKgwqAgW0FWX0hXREVWSUNFX1RZUEVfVkFBUEldwqAgPSAidmFhcGkiLAo+IGRpZmYgLS1n aXQgYS9saWJhdnV0aWwvaHdjb250ZXh0LmggYi9saWJhdnV0aWwvaHdjb250ZXh0LmgKPiBpbmRl eCA3ZmYwOGM4NjA4Li4yYjMzNzIxYTk3IDEwMDY0NAo+IC0tLSBhL2xpYmF2dXRpbC9od2NvbnRl eHQuaAo+ICsrKyBiL2xpYmF2dXRpbC9od2NvbnRleHQuaAo+IEBAIC0zNyw2ICszNyw3IEBAIGVu dW0gQVZIV0RldmljZVR5cGUgewo+IMKgwqDCoMKgIEFWX0hXREVWSUNFX1RZUEVfT1BFTkNMLAo+ IMKgwqDCoMKgIEFWX0hXREVWSUNFX1RZUEVfTUVESUFDT0RFQywKPiDCoMKgwqDCoCBBVl9IV0RF VklDRV9UWVBFX1ZVTEtBTiwKPiArwqDCoMKgIEFWX0hXREVWSUNFX1RZUEVfRDNEMTJWQSwKPiDC oH07Cj4gwqAKPiDCoHR5cGVkZWYgc3RydWN0IEFWSFdEZXZpY2VJbnRlcm5hbCBBVkhXRGV2aWNl SW50ZXJuYWw7Cj4gZGlmZiAtLWdpdCBhL2xpYmF2dXRpbC9od2NvbnRleHRfZDNkMTJ2YS5jIGIv bGliYXZ1dGlsL2h3Y29udGV4dF9kM2QxMnZhLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGlu ZGV4IDAwMDAwMDAwMDAuLjQ4YzMzOWYyNGEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGliYXZ1 dGlsL2h3Y29udGV4dF9kM2QxMnZhLmMKPiBAQCAtMCwwICsxLDcwMiBAQAo+ICsvKgo+ICsgKiBE aXJlY3QzRCAxMiBIVyBhY2NlbGVyYXRpb24uCj4gKyAqCj4gKyAqIGNvcHlyaWdodCAoYykgMjAy Mi0yMDIzIFd1IEppYW5odWEgPHRvcXN4d0BvdXRsb29rLmNvbT4KPiArICoKPiArICogVGhpcyBm aWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCj4gKyAq IHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLsKgIFNlZSB0aGUgR05VCj4gKyAq IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqCj4g KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0 ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+ICsgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEKPiBVU0EKPiArICov Cj4gKwo+ICsjaW5jbHVkZSAiY29uZmlnLmgiCj4gKyNpbmNsdWRlICJjb21tb24uaCIKPiArI2lu Y2x1ZGUgImh3Y29udGV4dC5oIgo+ICsjaW5jbHVkZSAiaHdjb250ZXh0X2ludGVybmFsLmgiCj4g KyNpbmNsdWRlICJod2NvbnRleHRfZDNkMTJ2YV9pbnRlcm5hbC5oIgo+ICsjaW5jbHVkZSAiaHdj b250ZXh0X2QzZDEydmEuaCIKPiArI2luY2x1ZGUgImltZ3V0aWxzLmgiCj4gKyNpbmNsdWRlICJw aXhkZXNjLmgiCj4gKyNpbmNsdWRlICJwaXhmbXQuaCIKPiArI2luY2x1ZGUgInRocmVhZC5oIgo+ ICsjaW5jbHVkZSAiY29tcGF0L3czMmRsZmNuLmgiCj4gKyNpbmNsdWRlIDxkeGdpMV8zLmg+Cj4g Kwo+ICt0eXBlZGVmIEhSRVNVTFQoV0lOQVBJICpQRk5fQ1JFQVRFX0RYR0lfRkFDVE9SWTIpKFVJ TlQgRmxhZ3MsIFJFRklJRCByaWlkLAo+IHZvaWQgKipwcEZhY3RvcnkpOwo+ICsKPiArc3RhdGlj IEFWT25jZSBmdW5jdGlvbnNfbG9hZGVkID0gQVZfT05DRV9JTklUOwo+ICsKPiArc3RhdGljIFBG Tl9DUkVBVEVfRFhHSV9GQUNUT1JZMiBkM2QxMnZhX2NyZWF0ZV9keGdpX2ZhY3RvcnkyOwo+ICtz dGF0aWMgUEZOX0QzRDEyX0NSRUFURV9ERVZJQ0UgZDNkMTJ2YV9jcmVhdGVfZGV2aWNlOwo+ICtz dGF0aWMgUEZOX0QzRDEyX0dFVF9ERUJVR19JTlRFUkZBQ0UgZDNkMTJ2YV9nZXRfZGVidWdfaW50 ZXJmYWNlOwo+ICsKPiArc3RhdGljIGF2X2NvbGQgdm9pZCBsb2FkX2Z1bmN0aW9ucyh2b2lkKQo+ ICt7Cj4gKyNpZiAhSEFWRV9VV1AKPiArwqDCoMKgIC8vIFdlIGxldCB0aGVzZSAibGVhayIgLSB0 aGlzIGlzIGZpbmUsIGFzIHVubG9hZGluZyBoYXMgbm8gZ3JlYXQgYmVuZWZpdCwKPiBhbmQKPiAr wqDCoMKgIC8vIFdpbmRvd3Mgd2lsbCBtYXJrIGEgRExMIGFzIGxvYWRlZCBmb3JldmVyIGlmIGl0 cyBpbnRlcm5hbCByZWZjb3VudAo+IG92ZXJmbG93cwo+ICvCoMKgwqAgLy8gZnJvbSB0b28gbWFu eSBMb2FkTGlicmFyeSBjYWxscy4KPiArwqDCoMKgIEhBTkRMRSBkM2RsaWIsIGR4Z2lsaWI7Cj4g Kwo+ICvCoMKgwqAgZDNkbGliwqAgPSBkbG9wZW4oImQzZDEyLmRsbCIsIDApOwo+ICvCoMKgwqAg ZHhnaWxpYiA9IGRsb3BlbigiZHhnaS5kbGwiLCAwKTsKPiArwqDCoMKgIGlmICghZDNkbGliIHx8 ICFkeGdpbGliKQo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4gKwo+ICvCoMKgwqAgZDNkMTJ2 YV9jcmVhdGVfZGV2aWNlID0gKFBGTl9EM0QxMl9DUkVBVEVfREVWSUNFKUdldFByb2NBZGRyZXNz KGQzZGxpYiwKPiAiRDNEMTJDcmVhdGVEZXZpY2UiKTsKPiArwqDCoMKgIGQzZDEydmFfY3JlYXRl X2R4Z2lfZmFjdG9yeTIgPQo+IChQRk5fQ1JFQVRFX0RYR0lfRkFDVE9SWTIpR2V0UHJvY0FkZHJl c3MoZHhnaWxpYiwgIkNyZWF0ZURYR0lGYWN0b3J5MiIpOwo+ICvCoMKgwqAgZDNkMTJ2YV9nZXRf ZGVidWdfaW50ZXJmYWNlID0KPiAoUEZOX0QzRDEyX0dFVF9ERUJVR19JTlRFUkZBQ0UpR2V0UHJv Y0FkZHJlc3MoZDNkbGliLAo+ICJEM0QxMkdldERlYnVnSW50ZXJmYWNlIik7Cj4gKyNlbHNlCj4g K8KgwqDCoCBkM2QxMnZhX2NyZWF0ZV9kZXZpY2UgPSAoUEZOX0QzRDExX0NSRUFURV9ERVZJQ0Up IEQzRDExQ3JlYXRlRGV2aWNlOwo+ICvCoMKgwqAgZDNkMTJ2YV9jcmVhdGVfZHhnaV9mYWN0b3J5 MiA9IChQRk5fQ1JFQVRFX0RYR0lfRkFDVE9SWTIpCj4gQ3JlYXRlRFhHSUZhY3RvcnkyOwo+ICvC oMKgwqAgZDNkMTJ2YV9nZXRfZGVidWdfaW50ZXJmYWNlID0gKFBGTl9EM0QxMl9HRVRfREVCVUdf SU5URVJGQUNFKQo+IEQzRDEyR2V0RGVidWdJbnRlcmZhY2U7Cj4gKyNlbmRpZgo+ICt9Cj4gKwo+ ICt0eXBlZGVmIHN0cnVjdCBEM0QxMlZBRnJhbWVzQ29udGV4dCB7Cj4gK8KgwqDCoCBJRDNEMTJS ZXNvdXJjZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKnN0YWdpbmdfYnVmZmVyOwo+ICvCoMKgwqAg SUQzRDEyQ29tbWFuZFF1ZXVlwqDCoMKgwqDCoMKgwqAgKmNvbW1hbmRfcXVldWU7Cj4gK8KgwqDC oCBJRDNEMTJDb21tYW5kQWxsb2NhdG9ywqDCoMKgICpjb21tYW5kX2FsbG9jYXRvcjsKPiArwqDC oMKgIElEM0QxMkdyYXBoaWNzQ29tbWFuZExpc3QgKmNvbW1hbmRfbGlzdDsKPiArwqDCoMKgIEFW RDNEMTJWQVN5bmNDb250ZXh0wqDCoMKgwqDCoCAqc3luY19jdHg7Cj4gK8KgwqDCoCBpbnTCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG5iX3N1cmZhY2VzOwo+ ICvCoMKgwqAgaW50wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBuYl9zdXJmYWNlc191c2VkOwo+ICvCoMKgwqAgRFhHSV9GT1JNQVTCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZm9ybWF0Owo+ICvCoMKgwqAgVUlOVMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGx1bWFfY29tcG9uZW50X3NpemU7Cj4gK30gRDNEMTJW QUZyYW1lc0NvbnRleHQ7Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHsKPiArwqDCoMKgIERY R0lfRk9STUFUIGQzZF9mb3JtYXQ7Cj4gK8KgwqDCoCBlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2Zt dDsKPiArfSBzdXBwb3J0ZWRfZm9ybWF0c1tdID0gewo+ICvCoMKgwqAgeyBEWEdJX0ZPUk1BVF9O VjEyLCBBVl9QSVhfRk1UX05WMTIgfSwKPiArwqDCoMKgIHsgRFhHSV9GT1JNQVRfUDAxMCwgQVZf UElYX0ZNVF9QMDEwIH0sCj4gK307Cj4gKwo+ICtEWEdJX0ZPUk1BVCBhdl9kM2QxMnZhX21hcF9z d190b19od19mb3JtYXQoZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXQpCj4gK3sKPiArwqDCoMKg IHN3aXRjaCAocGl4X2ZtdCkgewo+ICvCoMKgwqAgY2FzZSBBVl9QSVhfRk1UX05WMTI6cmV0dXJu IERYR0lfRk9STUFUX05WMTI7Cj4gK8KgwqDCoCBjYXNlIEFWX1BJWF9GTVRfUDAxMDpyZXR1cm4g RFhHSV9GT1JNQVRfUDAxMDsKPiArwqDCoMKgIGRlZmF1bHQ6wqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHJldHVybiBEWEdJX0ZPUk1BVF9VTktOT1dOOwo+ICvCoMKgwqAgfQo+ICt9Cj4gKwo+ICtp bnQgYXZfZDNkMTJ2YV9zeW5jX2NvbnRleHRfYWxsb2MoQVZEM0QxMlZBRGV2aWNlQ29udGV4dCAq Y3R4LAo+IEFWRDNEMTJWQVN5bmNDb250ZXh0ICoqcHN5bmNfY3R4KQo+ICt7Cj4gK8KgwqDCoCBB VkQzRDEyVkFTeW5jQ29udGV4dCAqc3luY19jdHg7Cj4gKwo+ICvCoMKgwqAgc3luY19jdHggPSBh dl9tYWxsb2N6KHNpemVvZihBVkQzRDEyVkFTeW5jQ29udGV4dCkpOwo+ICvCoMKgwqAgaWYgKCFz eW5jX2N0eCkKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiArCj4g K8KgwqDCoCBEWF9DSEVDSyhJRDNEMTJEZXZpY2VfQ3JlYXRlRmVuY2UoY3R4LT5kZXZpY2UsIHN5 bmNfY3R4LT5mZW5jZV92YWx1ZSwKPiBEM0QxMl9GRU5DRV9GTEFHX05PTkUsICZJSURfSUQzRDEy RmVuY2UsICZzeW5jX2N0eC0+ZmVuY2UpKTsKPiArCj4gK8KgwqDCoCBzeW5jX2N0eC0+ZXZlbnQg PSBDcmVhdGVFdmVudChOVUxMLCBGQUxTRSwgRkFMU0UsIE5VTEwpOwo+ICvCoMKgwqAgaWYgKCFz eW5jX2N0eC0+ZXZlbnQpCj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZmFpbDsKPiArCj4gK8KgwqDC oCAqcHN5bmNfY3R4ID0gc3luY19jdHg7Cj4gKwo+ICvCoMKgwqAgcmV0dXJuIDA7Cj4gKwo+ICtm YWlsOgo+ICvCoMKgwqAgRDNEMTJfT0JKRUNUX1JFTEVBU0Uoc3luY19jdHgtPmZlbmNlKTsKPiAr wqDCoMKgIGF2X2ZyZWVwKCZzeW5jX2N0eCk7Cj4gK8KgwqDCoCByZXR1cm4gQVZFUlJPUihFSU5W QUwpOwo+ICt9Cj4gKwo+ICt2b2lkIGF2X2QzZDEydmFfc3luY19jb250ZXh0X2ZyZWUoQVZEM0Qx MlZBU3luY0NvbnRleHQgKipwc3luY19jdHgpCj4gK3sKPiArwqDCoMKgIEFWRDNEMTJWQVN5bmND b250ZXh0ICpzeW5jX2N0eCA9ICpwc3luY19jdHg7Cj4gK8KgwqDCoCBpZiAoIXBzeW5jX2N0eCB8 fCAhc3luY19jdHgpCj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybjsKCllvdSBzaG91bGQgY2hlY2sg cHN5bmNfY3R4IGZvciBOVUxMIGJlZm9yZSBkZXJlZmVyZW5jaW5nIGl0LiAKCj4gKwo+ICvCoMKg wqAgYXZfZDNkMTJ2YV93YWl0X2lkbGUoc3luY19jdHgpOwo+ICsKPiArwqDCoMKgIEQzRDEyX09C SkVDVF9SRUxFQVNFKHN5bmNfY3R4LT5mZW5jZSk7Cj4gKwo+ICvCoMKgwqAgaWYgKHN5bmNfY3R4 LT5ldmVudCkKPiArwqDCoMKgwqDCoMKgwqAgQ2xvc2VIYW5kbGUoc3luY19jdHgtPmV2ZW50KTsK PiArCj4gK8KgwqDCoCBhdl9mcmVlcChwc3luY19jdHgpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IGF2X2QzZDEydmFfd2FpdF9mb3JfZmVuY2VfdmFsdWUoQVZEM0QxMlZBU3luY0NvbnRleHQgKnN5 bmNfY3R4LAo+IHVpbnQ2NF90IGZlbmNlX3ZhbHVlKQo+ICt7Cj4gK8KgwqDCoCB1aW50NjRfdCBj b21wbGV0aW9uID0gSUQzRDEyRmVuY2VfR2V0Q29tcGxldGVkVmFsdWUoc3luY19jdHgtPmZlbmNl KTsKPiArwqDCoMKgIGlmIChjb21wbGV0aW9uIDwgZmVuY2VfdmFsdWUpIHsKPiArwqDCoMKgwqDC oMKgwqAgaWYgKEZBSUxFRChJRDNEMTJGZW5jZV9TZXRFdmVudE9uQ29tcGxldGlvbihzeW5jX2N0 eC0+ZmVuY2UsCj4gZmVuY2VfdmFsdWUsIHN5bmNfY3R4LT5ldmVudCkpKQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDC oCBXYWl0Rm9yU2luZ2xlT2JqZWN0RXgoc3luY19jdHgtPmV2ZW50LCBJTkZJTklURSwgRkFMU0Up Owo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtpbnQgYXZf ZDNkMTJ2YV93YWl0X2lkbGUoQVZEM0QxMlZBU3luY0NvbnRleHQgKmN0eCkKPiArewo+ICvCoMKg wqAgcmV0dXJuIGF2X2QzZDEydmFfd2FpdF9mb3JfZmVuY2VfdmFsdWUoY3R4LCBjdHgtPmZlbmNl X3ZhbHVlKTsKPiArfQo+ICsKPiAraW50IGF2X2QzZDEydmFfd2FpdF9xdWV1ZV9pZGxlKEFWRDNE MTJWQVN5bmNDb250ZXh0ICpzeW5jX2N0eCwKPiBJRDNEMTJDb21tYW5kUXVldWUgKmNvbW1hbmRf cXVldWUpCj4gK3sKPiArwqDCoMKgIERYX0NIRUNLKElEM0QxMkNvbW1hbmRRdWV1ZV9TaWduYWwo Y29tbWFuZF9xdWV1ZSwgc3luY19jdHgtPmZlbmNlLAo+ICsrc3luY19jdHgtPmZlbmNlX3ZhbHVl KSk7Cj4gK8KgwqDCoCByZXR1cm4gYXZfZDNkMTJ2YV93YWl0X2lkbGUoc3luY19jdHgpOwo+ICsK PiArZmFpbDoKPiArwqDCoMKgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbmxpbmUgaW50IGNyZWF0ZV9yZXNvdXJjZShJRDNEMTJEZXZpY2UgKmRldmljZSwgY29u c3QKPiBEM0QxMl9SRVNPVVJDRV9ERVNDICpkZXNjLCBEM0QxMl9SRVNPVVJDRV9TVEFURVMgc3Rh dGVzLCBJRDNEMTJSZXNvdXJjZQo+ICoqcHBSZXNvdXJjZSwgaW50IGlzX3JlYWRfYmFjaykKPiAr ewo+ICvCoMKgwqAgRDNEMTJfSEVBUF9QUk9QRVJUSUVTIHByb3BzID0gewo+ICvCoMKgwqDCoMKg wqDCoCAuVHlwZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gaXNfcmVhZF9iYWNr ID8gRDNEMTJfSEVBUF9UWVBFX1JFQURCQUNLIDoKPiBEM0QxMl9IRUFQX1RZUEVfREVGQVVMVCwK PiArwqDCoMKgwqDCoMKgwqAgLkNQVVBhZ2VQcm9wZXJ0ecKgwqDCoMKgwqAgPSBEM0QxMl9DUFVf UEFHRV9QUk9QRVJUWV9VTktOT1dOLAo+ICvCoMKgwqDCoMKgwqDCoCAuTWVtb3J5UG9vbFByZWZl cmVuY2UgPSBEM0QxMl9NRU1PUllfUE9PTF9VTktOT1dOLAo+ICvCoMKgwqDCoMKgwqDCoCAuQ3Jl YXRpb25Ob2RlTWFza8KgwqDCoMKgID0gMCwKPiArwqDCoMKgwqDCoMKgwqAgLlZpc2libGVOb2Rl TWFza8KgwqDCoMKgwqAgPSAwLAo+ICvCoMKgwqAgfTsKPiArCj4gK8KgwqDCoCBpZiAoRkFJTEVE KElEM0QxMkRldmljZV9DcmVhdGVDb21taXR0ZWRSZXNvdXJjZShkZXZpY2UsICZwcm9wcywKPiBE M0QxMl9IRUFQX0ZMQUdfTk9ORSwgZGVzYywKPiArwqDCoMKgwqDCoMKgwqAgc3RhdGVzLCBOVUxM LCAmSUlEX0lEM0QxMlJlc291cmNlLCBwcFJlc291cmNlKSkpCj4gK8KgwqDCoMKgwqDCoMKgIHJl dHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gKwo+ICvCoMKgwqAgcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgZDNkMTJ2YV9jcmVhdGVfc3RhZ2luZ19idWZmZXJfcmVzb3VyY2UoQVZIV0Zy YW1lc0NvbnRleHQgKmN0eCkKPiArewo+ICvCoMKgwqAgQVZEM0QxMlZBRGV2aWNlQ29udGV4dCAq ZGV2aWNlX2h3Y3R4ID0gY3R4LT5kZXZpY2VfY3R4LT5od2N0eDsKPiArwqDCoMKgIEQzRDEyVkFG cmFtZXNDb250ZXh0wqDCoCAqc8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBjdHgtPmludGVybmFs LT5wcml2Owo+ICsKPiArwqDCoMKgIEQzRDEyX1JFU09VUkNFX0RFU0MgZGVzYyA9IHsKPiArwqDC oMKgwqDCoMKgwqAgLkRpbWVuc2lvbsKgwqDCoMKgwqDCoMKgwqDCoCA9IEQzRDEyX1JFU09VUkNF X0RJTUVOU0lPTl9CVUZGRVIsCj4gK8KgwqDCoMKgwqDCoMKgIC5BbGlnbm1lbnTCoMKgwqDCoMKg wqDCoMKgwqAgPSAwLAo+ICvCoMKgwqDCoMKgwqDCoCAuV2lkdGjCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCA9IDAsCj4gK8KgwqDCoMKgwqDCoMKgIC5IZWlnaHTCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgPSAxLAo+ICvCoMKgwqDCoMKgwqDCoCAuRGVwdGhPckFycmF5U2l6ZcKgwqAgPSAxLAo+ ICvCoMKgwqDCoMKgwqDCoCAuTWlwTGV2ZWxzwqDCoMKgwqDCoMKgwqDCoMKgID0gMSwKPiArwqDC oMKgwqDCoMKgwqAgLkZvcm1hdMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IERYR0lfRk9STUFU X1VOS05PV04sCj4gK8KgwqDCoMKgwqDCoMKgIC5TYW1wbGVEZXNjwqDCoMKgwqDCoMKgwqDCoCA9 IHsgLkNvdW50ID0gMSwgLlF1YWxpdHkgPSAwIH0sCj4gK8KgwqDCoMKgwqDCoMKgIC5MYXlvdXTC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBEM0QxMl9URVhUVVJFX0xBWU9VVF9ST1dfTUFKT1Is Cj4gK8KgwqDCoMKgwqDCoMKgIC5GbGFnc8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gRDNE MTJfUkVTT1VSQ0VfRkxBR19OT05FLAo+ICvCoMKgwqAgfTsKPiArCj4gK8KgwqDCoCBzLT5sdW1h X2NvbXBvbmVudF9zaXplID0gRkZBTElHTihjdHgtPndpZHRoICogKHMtPmZvcm1hdCA9PQo+IERY R0lfRk9STUFUX1AwMTAgPyAyIDogMSksIEQzRDEyX1RFWFRVUkVfREFUQV9QSVRDSF9BTElHTk1F TlQpICogY3R4LT5oZWlnaHQ7Cj4gK8KgwqDCoCBkZXNjLldpZHRoID0gcy0+bHVtYV9jb21wb25l bnRfc2l6ZSArIChzLT5sdW1hX2NvbXBvbmVudF9zaXplID4+IDEpOwo+ICsKPiArwqDCoMKgIHJl dHVybiBjcmVhdGVfcmVzb3VyY2UoZGV2aWNlX2h3Y3R4LT5kZXZpY2UsICZkZXNjLAo+IEQzRDEy X1JFU09VUkNFX1NUQVRFX0NPUFlfREVTVCwgJnMtPnN0YWdpbmdfYnVmZmVyLCAxKTsKPiArfQo+ ICsKPiArc3RhdGljIGludCBkM2QxMnZhX2NyZWF0ZV9oZWxwZXJfb2JqZWN0cyhBVkhXRnJhbWVz Q29udGV4dCAqY3R4KQo+ICt7Cj4gK8KgwqDCoCBBVkQzRDEyVkFEZXZpY2VDb250ZXh0ICpkZXZp Y2VfaHdjdHggPSBjdHgtPmRldmljZV9jdHgtPmh3Y3R4Owo+ICvCoMKgwqAgRDNEMTJWQUZyYW1l c0NvbnRleHTCoMKgICpzwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IGN0eC0+aW50ZXJuYWwtPnBy aXY7Cj4gKwo+ICvCoMKgwqAgRDNEMTJfQ09NTUFORF9RVUVVRV9ERVNDIHF1ZXVlX2Rlc2MgPSB7 Cj4gK8KgwqDCoMKgwqDCoMKgIC5UeXBlwqDCoMKgwqAgPSBEM0QxMl9DT01NQU5EX0xJU1RfVFlQ RV9DT1BZLAo+ICvCoMKgwqDCoMKgwqDCoCAuUHJpb3JpdHkgPSAwLAo+ICvCoMKgwqDCoMKgwqDC oCAuTm9kZU1hc2sgPSAwLAo+ICvCoMKgwqAgfTsKPiArCj4gK8KgwqDCoCBpbnQgcmV0ID0gZDNk MTJ2YV9jcmVhdGVfc3RhZ2luZ19idWZmZXJfcmVzb3VyY2UoY3R4KTsKPiArwqDCoMKgIGlmIChy ZXQgPCAwKQo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+ICsKPiArwqDCoMKgIHJldCA9 IGF2X2QzZDEydmFfc3luY19jb250ZXh0X2FsbG9jKGRldmljZV9od2N0eCwgJnMtPnN5bmNfY3R4 KTsKPiArwqDCoMKgIGlmIChyZXQgPCAwKQo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+ ICsKPiArwqDCoMKgIERYX0NIRUNLKElEM0QxMkRldmljZV9DcmVhdGVDb21tYW5kUXVldWUoZGV2 aWNlX2h3Y3R4LT5kZXZpY2UsCj4gJnF1ZXVlX2Rlc2MsCj4gK8KgwqDCoMKgwqDCoMKgICZJSURf SUQzRDEyQ29tbWFuZFF1ZXVlLCAmcy0+Y29tbWFuZF9xdWV1ZSkpOwo+ICsKPiArwqDCoMKgIERY X0NIRUNLKElEM0QxMkRldmljZV9DcmVhdGVDb21tYW5kQWxsb2NhdG9yKGRldmljZV9od2N0eC0+ ZGV2aWNlLAo+IHF1ZXVlX2Rlc2MuVHlwZSwKPiArwqDCoMKgwqDCoMKgwqAgJklJRF9JRDNEMTJD b21tYW5kQWxsb2NhdG9yLCAmcy0+Y29tbWFuZF9hbGxvY2F0b3IpKTsKPiArCj4gK8KgwqDCoCBE WF9DSEVDSyhJRDNEMTJEZXZpY2VfQ3JlYXRlQ29tbWFuZExpc3QoZGV2aWNlX2h3Y3R4LT5kZXZp Y2UsIDAsCj4gcXVldWVfZGVzYy5UeXBlLAo+ICvCoMKgwqDCoMKgwqDCoCBzLT5jb21tYW5kX2Fs bG9jYXRvciwgTlVMTCwgJklJRF9JRDNEMTJHcmFwaGljc0NvbW1hbmRMaXN0LCAmcy0KPiA+Y29t bWFuZF9saXN0KSk7Cj4gKwo+ICvCoMKgwqAgRFhfQ0hFQ0soSUQzRDEyR3JhcGhpY3NDb21tYW5k TGlzdF9DbG9zZShzLT5jb21tYW5kX2xpc3QpKTsKPiArCj4gK8KgwqDCoCBJRDNEMTJDb21tYW5k UXVldWVfRXhlY3V0ZUNvbW1hbmRMaXN0cyhzLT5jb21tYW5kX3F1ZXVlLCAxLAo+IChJRDNEMTJD b21tYW5kTGlzdCAqKikmcy0+Y29tbWFuZF9saXN0KTsKPiArCj4gK8KgwqDCoCByZXR1cm4gYXZf ZDNkMTJ2YV93YWl0X3F1ZXVlX2lkbGUocy0+c3luY19jdHgsIHMtPmNvbW1hbmRfcXVldWUpOwo+ ICsKPiArZmFpbDoKPiArwqDCoMKgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGQzZDEydmFfZnJhbWVzX3VuaW5pdChBVkhXRnJhbWVzQ29udGV4dCAqY3R4 KQo+ICt7Cj4gK8KgwqDCoCBBVkQzRDEyVkFGcmFtZXNDb250ZXh0ICpmcmFtZXNfaHdjdHggPSBj dHgtPmh3Y3R4Owo+ICvCoMKgwqAgRDNEMTJWQUZyYW1lc0NvbnRleHTCoMKgICpzwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCA9IGN0eC0+aW50ZXJuYWwtPnByaXY7Cj4gKwo+ICvCoMKgwqAgYXZfZDNk MTJ2YV9zeW5jX2NvbnRleHRfZnJlZSgmcy0+c3luY19jdHgpOwo+ICsKPiArwqDCoMKgIEQzRDEy X09CSkVDVF9SRUxFQVNFKHMtPnN0YWdpbmdfYnVmZmVyKTsKPiArwqDCoMKgIEQzRDEyX09CSkVD VF9SRUxFQVNFKHMtPmNvbW1hbmRfYWxsb2NhdG9yKTsKPiArwqDCoMKgIEQzRDEyX09CSkVDVF9S RUxFQVNFKHMtPmNvbW1hbmRfbGlzdCk7Cj4gK8KgwqDCoCBEM0QxMl9PQkpFQ1RfUkVMRUFTRShz LT5jb21tYW5kX3F1ZXVlKTsKPiArCj4gK8KgwqDCoCBhdl9mcmVlcCgmZnJhbWVzX2h3Y3R4LT50 ZXh0dXJlX2luZm9zKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBkM2QxMnZhX2ZyYW1lc19nZXRf Y29uc3RyYWludHMoQVZIV0RldmljZUNvbnRleHQgKmN0eCwgY29uc3Qgdm9pZAo+ICpod2NvbmZp ZywgQVZIV0ZyYW1lc0NvbnN0cmFpbnRzICpjb25zdHJhaW50cykKPiArewo+ICvCoMKgwqAgSFJF U1VMVCBocjsKPiArwqDCoMKgIGludCBuYl9zd19mb3JtYXRzID0gMDsKPiArwqDCoMKgIEFWRDNE MTJWQURldmljZUNvbnRleHQgKmRldmljZV9od2N0eCA9IGN0eC0+aHdjdHg7Cj4gKwo+ICvCoMKg wqAgY29uc3RyYWludHMtPnZhbGlkX3N3X2Zvcm1hdHMgPQo+IGF2X21hbGxvY19hcnJheShGRl9B UlJBWV9FTEVNUyhzdXBwb3J0ZWRfZm9ybWF0cykgKyAxLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZW9mKCpjb25zdHJhaW50cy0KPiA+dmFsaWRf c3dfZm9ybWF0cykpOwo+ICvCoMKgwqAgaWYgKCFjb25zdHJhaW50cy0+dmFsaWRfc3dfZm9ybWF0 cykKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiArCj4gK8KgwqDC oCBmb3IgKGludCBpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKHN1cHBvcnRlZF9mb3JtYXRzKTsg aSsrKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIEQzRDEyX0ZFQVRVUkVfREFUQV9GT1JNQVRfU1VQUE9S VCBmb3JtYXRfc3VwcG9ydCA9IHsKPiBzdXBwb3J0ZWRfZm9ybWF0c1tpXS5kM2RfZm9ybWF0IH07 Cj4gK8KgwqDCoMKgwqDCoMKgIGhyID0gSUQzRDEyRGV2aWNlX0NoZWNrRmVhdHVyZVN1cHBvcnQo ZGV2aWNlX2h3Y3R4LT5kZXZpY2UsCj4gRDNEMTJfRkVBVFVSRV9GT1JNQVRfU1VQUE9SVCwgJmZv cm1hdF9zdXBwb3J0LCBzaXplb2YoZm9ybWF0X3N1cHBvcnQpKTsKPiArwqDCoMKgwqDCoMKgwqAg aWYgKFNVQ0NFRURFRChocikgJiYgKGZvcm1hdF9zdXBwb3J0LlN1cHBvcnQxICYKPiBEM0QxMl9G T1JNQVRfU1VQUE9SVDFfVEVYVFVSRTJEKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25z dHJhaW50cy0+dmFsaWRfc3dfZm9ybWF0c1tuYl9zd19mb3JtYXRzKytdID0KPiBzdXBwb3J0ZWRf Zm9ybWF0c1tpXS5waXhfZm10Owo+ICvCoMKgwqAgfQo+ICvCoMKgwqAgY29uc3RyYWludHMtPnZh bGlkX3N3X2Zvcm1hdHNbbmJfc3dfZm9ybWF0c10gPSBBVl9QSVhfRk1UX05PTkU7Cj4gKwo+ICvC oMKgwqAgY29uc3RyYWludHMtPnZhbGlkX2h3X2Zvcm1hdHMgPSBhdl9tYWxsb2NfYXJyYXkoMiwg c2l6ZW9mKCpjb25zdHJhaW50cy0KPiA+dmFsaWRfaHdfZm9ybWF0cykpOwo+ICvCoMKgwqAgaWYg KCFjb25zdHJhaW50cy0+dmFsaWRfaHdfZm9ybWF0cykKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu IEFWRVJST1IoRU5PTUVNKTsKPiArCj4gK8KgwqDCoCBjb25zdHJhaW50cy0+dmFsaWRfaHdfZm9y bWF0c1swXSA9IEFWX1BJWF9GTVRfRDNEMTI7Cj4gK8KgwqDCoCBjb25zdHJhaW50cy0+dmFsaWRf aHdfZm9ybWF0c1sxXSA9IEFWX1BJWF9GTVRfTk9ORTsKPiArCj4gK8KgwqDCoCByZXR1cm4gMDsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgZnJlZV90ZXh0dXJlKHZvaWQgKm9wYXF1ZSwgdWludDhf dCAqZGF0YSkKPiArewo+ICvCoMKgwqAgQVZEM0QxMkZyYW1lRGVzY3JpcHRvciAqZGVzYyA9IChB VkQzRDEyRnJhbWVEZXNjcmlwdG9yICopZGF0YTsKPiArCj4gK8KgwqDCoCBpZiAoZGVzYy0+c3lu Y19jdHgpCj4gK8KgwqDCoMKgwqDCoMKgIGF2X2QzZDEydmFfc3luY19jb250ZXh0X2ZyZWUoJmRl c2MtPnN5bmNfY3R4KTsKPiArCj4gK8KgwqDCoCBEM0QxMl9PQkpFQ1RfUkVMRUFTRShkZXNjLT50 ZXh0dXJlKTsKPiArwqDCoMKgIGF2X2ZyZWVwKCZkYXRhKTsKPiArfQo+ICsKPiArc3RhdGljIEFW QnVmZmVyUmVmICp3cmFwX3RleHR1cmVfYnVmKEFWSFdGcmFtZXNDb250ZXh0ICpjdHgsIElEM0Qx MlJlc291cmNlCj4gKnRleHR1cmUsIEFWRDNEMTJWQVN5bmNDb250ZXh0ICpzeW5jX2N0eCkKPiAr ewo+ICvCoMKgwqAgQVZCdWZmZXJSZWYgKmJ1ZjsKPiArwqDCoMKgIEQzRDEyVkFGcmFtZXNDb250 ZXh0wqDCoCAqc8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBjdHgtPmludGVybmFsLT5wcml2Owo+ ICvCoMKgwqAgQVZEM0QxMlZBRnJhbWVzQ29udGV4dCAqZnJhbWVzX2h3Y3R4ID0gY3R4LT5od2N0 eDsKPiArCj4gK8KgwqDCoCBBVkQzRDEyRnJhbWVEZXNjcmlwdG9yICpkZXNjID0gYXZfbWFsbG9j eihzaXplb2YoKmRlc2MpKTsKPiArwqDCoMKgIGlmICghZGVzYykKPiArwqDCoMKgwqDCoMKgwqAg Z290byBmYWlsOwo+ICsKPiArwqDCoMKgIGlmIChzLT5uYl9zdXJmYWNlcyA8PSBzLT5uYl9zdXJm YWNlc191c2VkKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGZyYW1lc19od2N0eC0+dGV4dHVyZV9pbmZv cyA9IGF2X3JlYWxsb2NfZihmcmFtZXNfaHdjdHgtCj4gPnRleHR1cmVfaW5mb3MsCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcy0+bmJfc3VyZmFjZXNfdXNl ZCArIDEsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6 ZW9mKCpmcmFtZXNfaHdjdHgtCj4gPnRleHR1cmVfaW5mb3MpKTsKPiArwqDCoMKgwqDCoMKgwqAg aWYgKCFmcmFtZXNfaHdjdHgtPnRleHR1cmVfaW5mb3MpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZ290byBmYWlsOwoKZGVzYyBpcyBub3QgZnJlZWQgaW4gdGhlIGVycm9yIHBhdGguCgo+ICvC oMKgwqDCoMKgwqDCoCBzLT5uYl9zdXJmYWNlcyA9IHMtPm5iX3N1cmZhY2VzX3VzZWQgKyAxOwo+ ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIGRlc2MtPnRleHR1cmXCoCA9IHRleHR1cmU7Cj4gK8Kg wqDCoCBkZXNjLT5pbmRleMKgwqDCoCA9IHMtPm5iX3N1cmZhY2VzX3VzZWQ7Cj4gK8KgwqDCoCBk ZXNjLT5zeW5jX2N0eCA9IHN5bmNfY3R4Owo+ICsKPiArwqDCoMKgIGZyYW1lc19od2N0eC0+dGV4 dHVyZV9pbmZvc1tzLT5uYl9zdXJmYWNlc191c2VkXS50ZXh0dXJlwqAgPSB0ZXh0dXJlOwo+ICvC oMKgwqAgZnJhbWVzX2h3Y3R4LT50ZXh0dXJlX2luZm9zW3MtPm5iX3N1cmZhY2VzX3VzZWRdLmlu ZGV4wqDCoMKgID0gZGVzYy0+aW5kZXg7Cj4gK8KgwqDCoCBmcmFtZXNfaHdjdHgtPnRleHR1cmVf aW5mb3Nbcy0+bmJfc3VyZmFjZXNfdXNlZF0uc3luY19jdHggPSBzeW5jX2N0eDsKPiArwqDCoMKg IHMtPm5iX3N1cmZhY2VzX3VzZWQrKzsKPiArCj4gK8KgwqDCoCBidWYgPSBhdl9idWZmZXJfY3Jl YXRlKCh1aW50OF90ICopZGVzYywgc2l6ZW9mKGRlc2MpLCBmcmVlX3RleHR1cmUsCj4gdGV4dHVy ZSwgMCk7Cj4gK8KgwqDCoCBpZiAoIWJ1Zikgewo+ICvCoMKgwqDCoMKgwqDCoCBEM0QxMl9PQkpF Q1RfUkVMRUFTRSh0ZXh0dXJlKTsKPiArwqDCoMKgwqDCoMKgwqAgYXZfZnJlZXAoJmRlc2MpOwoK V2h5IGlzIHN5bmNfY3R4IG5vdCBmcmVlZCBoZXJlIGhvd2V2ZXIgaXQgaXMgZnJlZWQgaW4gYW5v dGhlciBlcnJvciBwYXRoID8gCgoKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5VTEw7Cj4gK8Kg wqDCoCB9Cj4gKwo+ICvCoMKgwqAgcmV0dXJuIGJ1ZjsKPiArCj4gK2ZhaWw6Cj4gK8KgwqDCoCBE M0QxMl9PQkpFQ1RfUkVMRUFTRSh0ZXh0dXJlKTsKPiArwqDCoMKgIGF2X2QzZDEydmFfc3luY19j b250ZXh0X2ZyZWUoJnN5bmNfY3R4KTsKPiArwqDCoMKgIHJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgQVZCdWZmZXJSZWYgKmQzZDEydmFfcG9vbF9hbGxvYyh2b2lkICpvcGFxdWUsIHNp emVfdCBzaXplKQo+ICt7Cj4gK8KgwqDCoCBBVkhXRnJhbWVzQ29udGV4dMKgwqDCoMKgwqAgKmN0 eMKgwqDCoMKgwqDCoMKgwqDCoCA9IChBVkhXRnJhbWVzQ29udGV4dCAqKW9wYXF1ZTsKPiArwqDC oMKgIEQzRDEyVkFGcmFtZXNDb250ZXh0wqDCoCAqc8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBj dHgtPmludGVybmFsLT5wcml2Owo+ICvCoMKgwqAgQVZEM0QxMlZBRnJhbWVzQ29udGV4dCAqaHdj dHjCoMKgwqDCoMKgwqDCoCA9IGN0eC0+aHdjdHg7Cj4gK8KgwqDCoCBBVkQzRDEyVkFEZXZpY2VD b250ZXh0ICpkZXZpY2VfaHdjdHggPSBjdHgtPmRldmljZV9jdHgtPmh3Y3R4Owo+ICsKPiArwqDC oMKgIGludCByZXQ7Cj4gK8KgwqDCoCBJRDNEMTJSZXNvdXJjZSAqdGV4dHVyZTsKPiArwqDCoMKg IEFWRDNEMTJWQVN5bmNDb250ZXh0ICpzeW5jX2N0eDsKPiArCj4gK8KgwqDCoCBEM0QxMl9SRVNP VVJDRV9ERVNDIGRlc2MgPSB7Cj4gK8KgwqDCoMKgwqDCoMKgIC5EaW1lbnNpb27CoMKgwqDCoMKg wqDCoCA9IEQzRDEyX1JFU09VUkNFX0RJTUVOU0lPTl9URVhUVVJFMkQsCj4gK8KgwqDCoMKgwqDC oMKgIC5BbGlnbm1lbnTCoMKgwqDCoMKgwqDCoCA9IDAsCj4gK8KgwqDCoMKgwqDCoMKgIC5XaWR0 aMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBjdHgtPndpZHRoLAo+ICvCoMKgwqDCoMKgwqDCoCAu SGVpZ2h0wqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBjdHgtPmhlaWdodCwKPiArwqDCoMKgwqDCoMKg wqAgLkRlcHRoT3JBcnJheVNpemUgPSAxLAo+ICvCoMKgwqDCoMKgwqDCoCAuTWlwTGV2ZWxzwqDC oMKgwqDCoMKgwqAgPSAxLAo+ICvCoMKgwqDCoMKgwqDCoCAuRm9ybWF0wqDCoMKgwqDCoMKgwqDC oMKgwqAgPSBzLT5mb3JtYXQsCj4gK8KgwqDCoMKgwqDCoMKgIC5TYW1wbGVEZXNjwqDCoMKgwqDC oMKgID0gey5Db3VudCA9IDEsIC5RdWFsaXR5ID0gMCB9LAo+ICvCoMKgwqDCoMKgwqDCoCAuTGF5 b3V0wqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBEM0QxMl9URVhUVVJFX0xBWU9VVF9VTktOT1dOLAo+ ICvCoMKgwqDCoMKgwqDCoCAuRmxhZ3PCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gRDNEMTJfUkVT T1VSQ0VfRkxBR19OT05FLAo+ICvCoMKgwqAgfTsKPiArCj4gK8KgwqDCoCBpZiAocy0+bmJfc3Vy ZmFjZXNfdXNlZCA+PSBjdHgtPmluaXRpYWxfcG9vbF9zaXplKSB7Cj4gK8KgwqDCoMKgwqDCoMKg IGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlN0YXRpYyBzdXJmYWNlIHBvb2wgc2l6ZSBleGNl ZWRlZC5cbiIpOwo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gTlVMTDsKPiArwqDCoMKgIH0KPiAr Cj4gK8KgwqDCoCByZXQgPSBjcmVhdGVfcmVzb3VyY2UoZGV2aWNlX2h3Y3R4LT5kZXZpY2UsICZk ZXNjLAo+IEQzRDEyX1JFU09VUkNFX1NUQVRFX0NPTU1PTiwgJnRleHR1cmUsIDApOwo+ICvCoMKg wqAgaWYgKHJldCA8IDApCj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBOVUxMOwo+ICsKPiArwqDC oMKgIHJldCA9IGF2X2QzZDEydmFfc3luY19jb250ZXh0X2FsbG9jKGRldmljZV9od2N0eCwgJnN5 bmNfY3R4KTsKPiArwqDCoMKgIGlmIChyZXQgPCAwKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIEQzRDEy X09CSkVDVF9SRUxFQVNFKHRleHR1cmUpCgpQbGVhc2UgYWRkICc7JyBhdCB0aGUgZW5kCgo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBOVUxMOwoKUGxlYXNlIGtlZW4gdGhlIHNhbWUg aW5kZW50YXRpb24uCgoKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCByZXR1cm4gd3JhcF90ZXh0 dXJlX2J1ZihjdHgsIHRleHR1cmUsIHN5bmNfY3R4KTsKPiArfQo+ICsKPiArc3RhdGljIGludCBk M2QxMnZhX2ZyYW1lc19pbml0KEFWSFdGcmFtZXNDb250ZXh0ICpjdHgpCj4gK3sKPiArwqDCoMKg IEFWRDNEMTJWQUZyYW1lc0NvbnRleHQgKmh3Y3R4wqDCoMKgwqDCoMKgwqAgPSBjdHgtPmh3Y3R4 Owo+ICvCoMKgwqAgQVZEM0QxMlZBRGV2aWNlQ29udGV4dCAqZGV2aWNlX2h3Y3R4ID0gY3R4LT5k ZXZpY2VfY3R4LT5od2N0eDsKPiArwqDCoMKgIEQzRDEyVkFGcmFtZXNDb250ZXh0wqDCoCAqc8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBjdHgtPmludGVybmFsLT5wcml2Owo+ICsKPiArwqDCoMKg IGludCBpOwo+ICsKPiArwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBGRl9BUlJBWV9FTEVNUyhzdXBw b3J0ZWRfZm9ybWF0cyk7IGkrKykgewo+ICvCoMKgwqDCoMKgwqDCoCBpZiAoY3R4LT5zd19mb3Jt YXQgPT0gc3VwcG9ydGVkX2Zvcm1hdHNbaV0ucGl4X2ZtdCkgewo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHMtPmZvcm1hdCA9IHN1cHBvcnRlZF9mb3JtYXRzW2ldLmQzZF9mb3JtYXQ7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4gK8KgwqDCoMKgwqDCoMKgIH0KPiArwqDCoMKg IH0KPiArwqDCoMKgIGlmIChpID09IEZGX0FSUkFZX0VMRU1TKHN1cHBvcnRlZF9mb3JtYXRzKSkg ewo+ICvCoMKgwqDCoMKgwqDCoCBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJVbnN1cHBvcnRl ZCBwaXhlbCBmb3JtYXQ6ICVzXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2 X2dldF9waXhfZm10X25hbWUoY3R4LT5zd19mb3JtYXQpKTsKPiArwqDCoMKgwqDCoMKgwqAgcmV0 dXJuIEFWRVJST1IoRUlOVkFMKTsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCBod2N0eC0+dGV4 dHVyZV9pbmZvcyA9IGF2X3JlYWxsb2NfZihOVUxMLCBjdHgtPmluaXRpYWxfcG9vbF9zaXplLAo+ IHNpemVvZigqaHdjdHgtPnRleHR1cmVfaW5mb3MpKTsKPiArwqDCoMKgIGlmICghaHdjdHgtPnRl eHR1cmVfaW5mb3MpCj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4g Kwo+ICvCoMKgwqAgbWVtc2V0KGh3Y3R4LT50ZXh0dXJlX2luZm9zLCAwLCBjdHgtPmluaXRpYWxf cG9vbF9zaXplICogc2l6ZW9mKCpod2N0eC0KPiA+dGV4dHVyZV9pbmZvcykpOwo+ICvCoMKgwqAg cy0+bmJfc3VyZmFjZXMgPSBjdHgtPmluaXRpYWxfcG9vbF9zaXplOwo+ICsKPiArwqDCoMKgIGN0 eC0+aW50ZXJuYWwtPnBvb2xfaW50ZXJuYWwgPQo+IGF2X2J1ZmZlcl9wb29sX2luaXQyKHNpemVv ZihBVkQzRDEyRnJhbWVEZXNjcmlwdG9yKSwKPiArwqDCoMKgwqDCoMKgwqAgY3R4LCBkM2QxMnZh X3Bvb2xfYWxsb2MsIE5VTEwpOwo+ICsKPiArwqDCoMKgIGlmICghY3R4LT5pbnRlcm5hbC0+cG9v bF9pbnRlcm5hbCkKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiAr Cj4gK8KgwqDCoCByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkM2QxMnZhX2dldF9i dWZmZXIoQVZIV0ZyYW1lc0NvbnRleHQgKmN0eCwgQVZGcmFtZSAqZnJhbWUpCj4gK3sKPiArwqDC oMKgIGludCByZXQ7Cj4gK8KgwqDCoCBBVkQzRDEyRnJhbWVEZXNjcmlwdG9yICpkZXNjOwo+ICsK PiArwqDCoMKgIGZyYW1lLT5idWZbMF0gPSBhdl9idWZmZXJfcG9vbF9nZXQoY3R4LT5wb29sKTsK PiArwqDCoMKgIGlmICghZnJhbWUtPmJ1ZlswXSkKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFW RVJST1IoRU5PTUVNKTsKPiArCj4gK8KgwqDCoCByZXQgPSBhdl9pbWFnZV9maWxsX2FycmF5cyhm cmFtZS0+ZGF0YSwgZnJhbWUtPmxpbmVzaXplLCBmcmFtZS0+YnVmWzBdLQo+ID5kYXRhLAo+ICvC oMKgwqDCoMKgwqDCoCBjdHgtPnN3X2Zvcm1hdCwgY3R4LT53aWR0aCwgY3R4LT5oZWlnaHQsCj4g RDNEMTJfVEVYVFVSRV9EQVRBX1BJVENIX0FMSUdOTUVOVCk7Cj4gK8KgwqDCoCBpZiAocmV0IDwg MCkKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPiArCj4gK8KgwqDCoCBkZXNjID0gKEFW RDNEMTJGcmFtZURlc2NyaXB0b3IgKilmcmFtZS0+YnVmWzBdLT5kYXRhOwo+ICvCoMKgwqAgZnJh bWUtPmRhdGFbMF0gPSAodWludDhfdCAqKWRlc2MtPnRleHR1cmU7Cj4gK8KgwqDCoCBmcmFtZS0+ ZGF0YVsxXSA9ICh1aW50OF90ICopZGVzYy0+aW5kZXg7Cj4gK8KgwqDCoCBmcmFtZS0+ZGF0YVsy XSA9ICh1aW50OF90ICopZGVzYy0+c3luY19jdHg7Cj4gKwo+ICvCoMKgwqAgZnJhbWUtPmZvcm1h dMKgID0gQVZfUElYX0ZNVF9EM0QxMjsKPiArwqDCoMKgIGZyYW1lLT53aWR0aMKgwqAgPSBjdHgt PndpZHRoOwo+ICvCoMKgwqAgZnJhbWUtPmhlaWdodMKgID0gY3R4LT5oZWlnaHQ7Cj4gKwo+ICvC oMKgwqAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZDNkMTJ2YV90cmFuc2Zlcl9n ZXRfZm9ybWF0cyhBVkhXRnJhbWVzQ29udGV4dCAqY3R4LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZW51bSBBVkhXRnJhbWVUcmFuc2ZlckRpcmVjdGlvbiBkaXIsCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBlbnVtIEFWUGl4ZWxGb3JtYXQgKipmb3JtYXRzKQo+ICt7Cj4gK8KgwqDCoCBEM0Qx MlZBRnJhbWVzQ29udGV4dCAqcyA9IGN0eC0+aW50ZXJuYWwtPnByaXY7Cj4gK8KgwqDCoCBlbnVt IEFWUGl4ZWxGb3JtYXQgKmZtdHM7Cj4gKwo+ICvCoMKgwqAgZm10cyA9IGF2X21hbGxvY19hcnJh eSgyLCBzaXplb2YoKmZtdHMpKTsKPiArwqDCoMKgIGlmICghZm10cykKPiArwqDCoMKgwqDCoMKg wqAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiArCj4gK8KgwqDCoCBmbXRzWzBdID0gY3R4LT5z d19mb3JtYXQ7Cj4gK8KgwqDCoCBmbXRzWzFdID0gQVZfUElYX0ZNVF9OT05FOwo+ICsKPiArwqDC oMKgICpmb3JtYXRzID0gZm10czsKPiArCj4gK8KgwqDCoCByZXR1cm4gMDsKPiArfQo+ICsKPiAr c3RhdGljIGludCBkM2QxMnZhX3RyYW5zZmVyX2RhdGEoQVZIV0ZyYW1lc0NvbnRleHQgKmN0eCwg QVZGcmFtZSAqZHN0LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IEFWRnJhbWUgKnNyYykKPiArewo+ICvCoMKg wqAgQVZEM0QxMlZBRGV2aWNlQ29udGV4dCAqaHdjdHjCoMKgwqDCoMKgwqDCoCA9IGN0eC0+ZGV2 aWNlX2N0eC0+aHdjdHg7Cj4gK8KgwqDCoCBBVkQzRDEyVkFGcmFtZXNDb250ZXh0ICpmcmFtZXNf aHdjdHggPSBjdHgtPmh3Y3R4Owo+ICvCoMKgwqAgRDNEMTJWQUZyYW1lc0NvbnRleHTCoMKgICpz wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IGN0eC0+aW50ZXJuYWwtPnByaXY7Cj4gKwo+ICvCoMKg wqAgaW50IHJldDsKPiArwqDCoMKgIGludCBkb3dubG9hZCA9IHNyYy0+Zm9ybWF0ID09IEFWX1BJ WF9GTVRfRDNEMTI7Cj4gK8KgwqDCoCBjb25zdCBBVkZyYW1lICpmcmFtZSA9IGRvd25sb2FkID8g c3JjIDogZHN0Owo+ICvCoMKgwqAgY29uc3QgQVZGcmFtZSAqb3RoZXIgPSBkb3dubG9hZCA/IGRz dCA6IHNyYzsKPiArCj4gK8KgwqDCoCBJRDNEMTJSZXNvdXJjZcKgwqDCoMKgwqDCoCAqdGV4dHVy ZcKgID0gKElEM0QxMlJlc291cmNlICopwqDCoMKgwqDCoCBmcmFtZS0+ZGF0YVswXTsKPiArwqDC oMKgIGludMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbmRleMKgwqDCoCA9 IChpbnRwdHJfdCnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmcmFtZS0+ZGF0YVsxXTsKPiAr wqDCoMKgIEFWRDNEMTJWQVN5bmNDb250ZXh0ICpzeW5jX2N0eCA9IChBVkQzRDEyVkFTeW5jQ29u dGV4dCAqKWZyYW1lLT5kYXRhWzJdOwo+ICsKPiArwqDCoMKgIHVpbnQ4X3QgKm1hcHBlZF9kYXRh Owo+ICvCoMKgwqAgdWludDhfdCAqZGF0YVs0XTsKPiArwqDCoMKgIGludCBsaW5lc2l6ZXNbNF07 Cj4gKwo+ICvCoMKgwqAgRDNEMTJfVEVYVFVSRV9DT1BZX0xPQ0FUSU9OIHN0YWdpbmdfeV9sb2Nh dGlvbjsKPiArwqDCoMKgIEQzRDEyX1RFWFRVUkVfQ09QWV9MT0NBVElPTiBzdGFnaW5nX3V2X2xv Y2F0aW9uOwo+ICsKPiArwqDCoMKgIEQzRDEyX1RFWFRVUkVfQ09QWV9MT0NBVElPTiB0ZXh0dXJl X3lfbG9jYXRpb24gPSB7Cj4gK8KgwqDCoMKgwqDCoMKgIC5wUmVzb3VyY2XCoMKgwqDCoMKgwqDC oCA9IHRleHR1cmUsCj4gK8KgwqDCoMKgwqDCoMKgIC5UeXBlwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgID0gRDNEMTJfVEVYVFVSRV9DT1BZX1RZUEVfU1VCUkVTT1VSQ0VfSU5ERVgsCj4gK8KgwqDC oMKgwqDCoMKgIC5TdWJyZXNvdXJjZUluZGV4ID0gMCwKPiArwqDCoMKgIH07Cj4gKwo+ICvCoMKg wqAgRDNEMTJfVEVYVFVSRV9DT1BZX0xPQ0FUSU9OIHRleHR1cmVfdXZfbG9jYXRpb24gPSB7Cj4g K8KgwqDCoMKgwqDCoMKgIC5wUmVzb3VyY2XCoMKgwqDCoMKgwqDCoCA9IHRleHR1cmUsCj4gK8Kg wqDCoMKgwqDCoMKgIC5UeXBlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gRDNEMTJfVEVYVFVS RV9DT1BZX1RZUEVfU1VCUkVTT1VSQ0VfSU5ERVgsCj4gK8KgwqDCoMKgwqDCoMKgIC5TdWJyZXNv dXJjZUluZGV4ID0gMSwKPiArwqDCoMKgIH07Cj4gKwo+ICvCoMKgwqAgRDNEMTJfUkVTT1VSQ0Vf QkFSUklFUiBiYXJyaWVyID0gewo+ICvCoMKgwqDCoMKgwqDCoCAuVHlwZcKgID0gRDNEMTJfUkVT T1VSQ0VfQkFSUklFUl9UWVBFX1RSQU5TSVRJT04sCj4gK8KgwqDCoMKgwqDCoMKgIC5GbGFncyA9 IEQzRDEyX1JFU09VUkNFX0JBUlJJRVJfRkxBR19OT05FLAo+ICvCoMKgwqDCoMKgwqDCoCAuVHJh bnNpdGlvbiA9IHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAucFJlc291cmNlwqDCoCA9IHRl eHR1cmUsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLlN0YXRlQmVmb3JlID0gRDNEMTJfUkVT T1VSQ0VfU1RBVEVfQ09NTU9OLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5TdGF0ZUFmdGVy wqAgPSBEM0QxMl9SRVNPVVJDRV9TVEFURV9DT1BZX1NPVVJDRSwKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAuU3VicmVzb3VyY2UgPSBEM0QxMl9SRVNPVVJDRV9CQVJSSUVSX0FMTF9TVUJSRVNP VVJDRVMsCj4gK8KgwqDCoMKgwqDCoMKgIH0KPiArwqDCoMKgIH07Cj4gKwo+ICvCoMKgwqAgcy0+ Zm9ybWF0ID0gYXZfZDNkMTJ2YV9tYXBfc3dfdG9faHdfZm9ybWF0KGN0eC0+c3dfZm9ybWF0KTsK PiArCj4gK8KgwqDCoCBpZiAoZnJhbWUtPmh3X2ZyYW1lc19jdHgtPmRhdGEgIT0gKHVpbnQ4X3Qg KiljdHggfHwgb3RoZXItPmZvcm1hdCAhPSBjdHgtCj4gPnN3X2Zvcm1hdCkKPiArwqDCoMKgwqDC oMKgwqAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiArCj4gK8KgwqDCoCBpZiAoIXMtPmNvbW1h bmRfcXVldWUpIHsKPiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gZDNkMTJ2YV9jcmVhdGVfaGVscGVy X29iamVjdHMoY3R4KTsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKHJldCA8IDApCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCBmb3Ig KGludCBpID0gMDsgaSA8IDQ7IGkrKykKPiArwqDCoMKgwqDCoMKgwqAgbGluZXNpemVzW2ldID0g RkZBTElHTihmcmFtZS0+d2lkdGggKiAocy0+Zm9ybWF0ID09IERYR0lfRk9STUFUX1AwMTAKPiA/ IDIgOiAxKSwgRDNEMTJfVEVYVFVSRV9EQVRBX1BJVENIX0FMSUdOTUVOVCk7Cj4gKwo+ICvCoMKg wqAgc3RhZ2luZ195X2xvY2F0aW9uID0gKEQzRDEyX1RFWFRVUkVfQ09QWV9MT0NBVElPTikgewo+ ICvCoMKgwqDCoMKgwqDCoCAucFJlc291cmNlID0gcy0+c3RhZ2luZ19idWZmZXIsCj4gK8KgwqDC oMKgwqDCoMKgIC5UeXBlwqDCoMKgwqDCoCA9IEQzRDEyX1RFWFRVUkVfQ09QWV9UWVBFX1BMQUNF RF9GT09UUFJJTlQsCj4gK8KgwqDCoMKgwqDCoMKgIC5QbGFjZWRGb290cHJpbnQgPSB7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgLk9mZnNldCA9IDAsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgLkZvb3RwcmludCA9IHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5Gb3Jt YXTCoMKgID0gcy0+Zm9ybWF0ID09IERYR0lfRk9STUFUX1AwMTAgPwo+IERYR0lfRk9STUFUX1Ix Nl9VTk9STSA6IERYR0lfRk9STUFUX1I4X1VOT1JNLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgLldpZHRowqDCoMKgID0gY3R4LT53aWR0aCwKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIC5IZWlnaHTCoMKgID0gY3R4LT5oZWlnaHQsCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAuRGVwdGjCoMKgwqAgPSAxLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgLlJvd1BpdGNoID0gbGluZXNpemVzWzBdLAo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIH0sCj4gK8KgwqDCoMKgwqDCoMKgIH0sCj4gK8KgwqDCoCB9Owo+ICsKPiArwqDCoMKg IHN0YWdpbmdfdXZfbG9jYXRpb24gPSAoRDNEMTJfVEVYVFVSRV9DT1BZX0xPQ0FUSU9OKSB7Cj4g K8KgwqDCoMKgwqDCoMKgIC5wUmVzb3VyY2UgPSBzLT5zdGFnaW5nX2J1ZmZlciwKPiArwqDCoMKg wqDCoMKgwqAgLlR5cGXCoMKgwqDCoMKgID0gRDNEMTJfVEVYVFVSRV9DT1BZX1RZUEVfUExBQ0VE X0ZPT1RQUklOVCwKPiArwqDCoMKgwqDCoMKgwqAgLlBsYWNlZEZvb3RwcmludCA9IHsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAuT2Zmc2V0ID0gcy0+bHVtYV9jb21wb25lbnRfc2l6ZSwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAuRm9vdHByaW50ID0gewo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgLkZvcm1hdMKgwqAgPSBzLT5mb3JtYXQgPT0gRFhHSV9GT1JNQVRfUDAx MCA/Cj4gRFhHSV9GT1JNQVRfUjE2RzE2X1VOT1JNIDogRFhHSV9GT1JNQVRfUjhHOF9VTk9STSwK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5XaWR0aMKgwqDCoCA9IGN0eC0+d2lk dGjCoCA+PiAxLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLkhlaWdodMKgwqAg PSBjdHgtPmhlaWdodCA+PiAxLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLkRl cHRowqDCoMKgID0gMSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5Sb3dQaXRj aCA9IGxpbmVzaXplc1swXSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9LAo+ICvCoMKgwqDC oMKgwqDCoCB9LAo+ICvCoMKgwqAgfTsKPiArCj4gK8KgwqDCoCBEWF9DSEVDSyhJRDNEMTJDb21t YW5kQWxsb2NhdG9yX1Jlc2V0KHMtPmNvbW1hbmRfYWxsb2NhdG9yKSk7Cj4gKwo+ICvCoMKgwqAg RFhfQ0hFQ0soSUQzRDEyR3JhcGhpY3NDb21tYW5kTGlzdF9SZXNldChzLT5jb21tYW5kX2xpc3Qs IHMtCj4gPmNvbW1hbmRfYWxsb2NhdG9yLCBOVUxMKSk7Cj4gKwo+ICvCoMKgwqAgaWYgKGRvd25s b2FkKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIElEM0QxMkdyYXBoaWNzQ29tbWFuZExpc3RfUmVzb3Vy Y2VCYXJyaWVyKHMtPmNvbW1hbmRfbGlzdCwgMSwKPiAmYmFycmllcik7Cj4gKwo+ICvCoMKgwqDC oMKgwqDCoCBJRDNEMTJHcmFwaGljc0NvbW1hbmRMaXN0X0NvcHlUZXh0dXJlUmVnaW9uKHMtPmNv bW1hbmRfbGlzdCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmc3RhZ2luZ195X2xvY2F0aW9u LCAwLCAwLCAwLCAmdGV4dHVyZV95X2xvY2F0aW9uLCBOVUxMKTsKPiArCj4gK8KgwqDCoMKgwqDC oMKgIElEM0QxMkdyYXBoaWNzQ29tbWFuZExpc3RfQ29weVRleHR1cmVSZWdpb24ocy0+Y29tbWFu ZF9saXN0LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZzdGFnaW5nX3V2X2xvY2F0aW9uLCAw LCAwLCAwLCAmdGV4dHVyZV91dl9sb2NhdGlvbiwgTlVMTCk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDC oCBiYXJyaWVyLlRyYW5zaXRpb24uU3RhdGVCZWZvcmUgPSBiYXJyaWVyLlRyYW5zaXRpb24uU3Rh dGVBZnRlcjsKPiArwqDCoMKgwqDCoMKgwqAgYmFycmllci5UcmFuc2l0aW9uLlN0YXRlQWZ0ZXIg PSBEM0QxMl9SRVNPVVJDRV9TVEFURV9DT01NT047Cj4gK8KgwqDCoMKgwqDCoMKgIElEM0QxMkdy YXBoaWNzQ29tbWFuZExpc3RfUmVzb3VyY2VCYXJyaWVyKHMtPmNvbW1hbmRfbGlzdCwgMSwKPiAm YmFycmllcik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBEWF9DSEVDSyhJRDNEMTJHcmFwaGljc0Nv bW1hbmRMaXN0X0Nsb3NlKHMtPmNvbW1hbmRfbGlzdCkpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAg aWYgKCFod2N0eC0+c3luYykKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBEWF9DSEVDSyhJRDNE MTJDb21tYW5kUXVldWVfV2FpdChzLT5jb21tYW5kX3F1ZXVlLCBzeW5jX2N0eC0KPiA+ZmVuY2Us IHN5bmNfY3R4LT5mZW5jZV92YWx1ZSkpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAgSUQzRDEyQ29t bWFuZFF1ZXVlX0V4ZWN1dGVDb21tYW5kTGlzdHMocy0+Y29tbWFuZF9xdWV1ZSwgMSwKPiAoSUQz RDEyQ29tbWFuZExpc3QgKiopJnMtPmNvbW1hbmRfbGlzdCk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDC oCByZXQgPSBhdl9kM2QxMnZhX3dhaXRfcXVldWVfaWRsZShzLT5zeW5jX2N0eCwgcy0+Y29tbWFu ZF9xdWV1ZSk7Cj4gK8KgwqDCoMKgwqDCoMKgIGlmIChyZXQpCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgcmV0dXJuIHJldDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgIERYX0NIRUNLKElEM0QxMlJl c291cmNlX01hcChzLT5zdGFnaW5nX2J1ZmZlciwgMCwgTlVMTCwKPiAmbWFwcGVkX2RhdGEpKTsK PiArwqDCoMKgwqDCoMKgwqAgYXZfaW1hZ2VfZmlsbF9wb2ludGVycyhkYXRhLCBjdHgtPnN3X2Zv cm1hdCwgY3R4LT5oZWlnaHQsCj4gbWFwcGVkX2RhdGEsIGxpbmVzaXplcyk7Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoCBhdl9pbWFnZV9jb3B5KGRzdC0+ZGF0YSwgZHN0LT5saW5lc2l6ZSwgZGF0YSwg bGluZXNpemVzLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGN0eC0+c3dfZm9ybWF0LCBjdHgt PndpZHRoLCBjdHgtPmhlaWdodCk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBJRDNEMTJSZXNvdXJj ZV9Vbm1hcChzLT5zdGFnaW5nX2J1ZmZlciwgMCwgTlVMTCk7Cj4gK8KgwqDCoCB9IGVsc2Ugewo+ ICvCoMKgwqDCoMKgwqDCoCBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJUcmFuc2ZlciBkYXRh IHRvIEFWX1BJWF9GTVRfRDNEMTIgaXMgbm90Cj4gc3VwcG9ydGVkIHlldCFcbiIpOwo+ICvCoMKg wqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ICvCoMKgwqAgfQo+ICsKPiArwqDC oMKgIHJldHVybiAwOwo+ICsKPiArZmFpbDoKPiArwqDCoMKgIHJldHVybiBBVkVSUk9SKEVJTlZB TCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZDNkMTJ2YV9kZXZpY2VfaW5pdChBVkhXRGV2aWNl Q29udGV4dCAqaHdkZXYpCj4gK3sKPiArwqDCoMKgIEFWRDNEMTJWQURldmljZUNvbnRleHQgKmN0 eCA9IGh3ZGV2LT5od2N0eDsKPiArCj4gK8KgwqDCoCBpZiAoIWN0eC0+dmlkZW9fZGV2aWNlKQo+ ICvCoMKgwqDCoMKgwqDCoCBEWF9DSEVDSyhJRDNEMTJEZXZpY2VfUXVlcnlJbnRlcmZhY2UoY3R4 LT5kZXZpY2UsCj4gJklJRF9JRDNEMTJWaWRlb0RldmljZSwgKHZvaWQgKiopJmN0eC0+dmlkZW9f ZGV2aWNlKSk7Cj4gKwo+ICvCoMKgwqAgcmV0dXJuIDA7Cj4gKwo+ICtmYWlsOgo+ICvCoMKgwqAg cmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZDNkMTJ2YV9k ZXZpY2VfdW5pbml0KEFWSFdEZXZpY2VDb250ZXh0ICpod2RldikKPiArewo+ICvCoMKgwqAgQVZE M0QxMlZBRGV2aWNlQ29udGV4dCAqZGV2aWNlX2h3Y3R4ID0gaHdkZXYtPmh3Y3R4Owo+ICsKPiAr wqDCoMKgIEQzRDEyX09CSkVDVF9SRUxFQVNFKGRldmljZV9od2N0eC0+dmlkZW9fZGV2aWNlKTsK PiArwqDCoMKgIEQzRDEyX09CSkVDVF9SRUxFQVNFKGRldmljZV9od2N0eC0+ZGV2aWNlKTsKPiAr fQo+ICsKPiArc3RhdGljIGludCBkM2QxMnZhX2RldmljZV9jcmVhdGUoQVZIV0RldmljZUNvbnRl eHQgKmN0eCwgY29uc3QgY2hhciAqZGV2aWNlLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFWRGljdGlvbmFyeSAqb3B0 cywgaW50IGZsYWdzKQo+ICt7Cj4gK8KgwqDCoCBBVkQzRDEyVkFEZXZpY2VDb250ZXh0ICpkZXZp Y2VfaHdjdHggPSBjdHgtPmh3Y3R4Owo+ICsKPiArwqDCoMKgIEhSRVNVTFQgaHI7Cj4gK8KgwqDC oCBVSU5UIGNyZWF0ZV9mbGFncyA9IDA7Cj4gK8KgwqDCoCBJRFhHSUFkYXB0ZXIgKnBBZGFwdGVy ID0gTlVMTDsKPiArCj4gK8KgwqDCoCBpbnQgcmV0Owo+ICvCoMKgwqAgaW50IGlzX2RlYnVnwqDC oMKgwqDCoMKgID0gISFhdl9kaWN0X2dldChvcHRzLCAiZGVidWciLCBOVUxMLCAwKTsKPiArwqDC oMKgIGRldmljZV9od2N0eC0+c3luYyA9ICEhYXZfZGljdF9nZXQob3B0cywgInN5bmMiLMKgIE5V TEwsIDApOwo+ICsKPiArwqDCoMKgIGlmICgocmV0ID0gZmZfdGhyZWFkX29uY2UoJmZ1bmN0aW9u c19sb2FkZWQsIGxvYWRfZnVuY3Rpb25zKSkgIT0gMCkKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu IEFWRVJST1JfVU5LTk9XTjsKPiArCj4gK8KgwqDCoCBpZiAoaXNfZGVidWcpIHsKPiArwqDCoMKg wqDCoMKgwqAgSUQzRDEyRGVidWcgKnBEZWJ1ZzsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKGQzZDEy dmFfZ2V0X2RlYnVnX2ludGVyZmFjZSAmJgo+IFNVQ0NFRURFRChkM2QxMnZhX2dldF9kZWJ1Z19p bnRlcmZhY2UoJklJRF9JRDNEMTJEZWJ1ZywgJnBEZWJ1ZykpKSB7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgY3JlYXRlX2ZsYWdzIHw9IERYR0lfQ1JFQVRFX0ZBQ1RPUllfREVCVUc7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgSUQzRDEyRGVidWdfRW5hYmxlRGVidWdMYXllcihwRGVidWcp Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEQzRDEyX09CSkVDVF9SRUxFQVNFKHBEZWJ1Zyk7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZfbG9nKGN0eCwgQVZfTE9HX0lORk8sICJEM0Qx MiBkZWJ1ZyBsYXllciBpcyBlbmFibGVkIVxuIik7Cj4gK8KgwqDCoMKgwqDCoMKgIH0KPiArwqDC oMKgIH0KPiArCj4gK8KgwqDCoCBpZiAoIWRldmljZV9od2N0eC0+ZGV2aWNlKSB7Cj4gK8KgwqDC oMKgwqDCoMKgIElEWEdJRmFjdG9yeTIgKnBEWEdJRmFjdG9yeSA9IE5VTEw7Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoCBpZiAoIWQzZDEydmFfY3JlYXRlX2RldmljZSB8fCAhZDNkMTJ2YV9jcmVhdGVf ZHhnaV9mYWN0b3J5Mikgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2xvZyhjdHgsIEFW X0xPR19FUlJPUiwgIkZhaWxlZCB0byBsb2FkIEQzRDEyIGxpYnJhcnkgb3IgaXRzCj4gZnVuY3Rp b25zXG4iKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUl9VTktOT1dO Owo+ICvCoMKgwqDCoMKgwqDCoCB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBociA9IGQzZDEydmFf Y3JlYXRlX2R4Z2lfZmFjdG9yeTIoY3JlYXRlX2ZsYWdzLCAmSUlEX0lEWEdJRmFjdG9yeTIsCj4g KHZvaWQgKiopJnBEWEdJRmFjdG9yeSk7Cj4gK8KgwqDCoMKgwqDCoMKgIGlmIChTVUNDRUVERUQo aHIpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IGFkYXB0ZXIgPSBkZXZpY2UgPyBh dG9pKGRldmljZSkgOiAwOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChGQUlMRUQoSURY R0lGYWN0b3J5Ml9FbnVtQWRhcHRlcnMocERYR0lGYWN0b3J5LCBhZGFwdGVyLAo+ICZwQWRhcHRl cikpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcEFkYXB0ZXIgPSBOVUxMOwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIElEWEdJRmFjdG9yeTJfUmVsZWFzZShwRFhHSUZhY3Rv cnkpOwo+ICvCoMKgwqDCoMKgwqDCoCB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBpZiAocEFkYXB0 ZXIpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBEWEdJX0FEQVBURVJfREVTQyBkZXNjOwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGhyID0gSURYR0lBZGFwdGVyMl9HZXREZXNjKHBBZGFw dGVyLCAmZGVzYyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCFGQUlMRUQoaHIpKSB7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9sb2coY3R4LCBBVl9MT0dfSU5G TywgIlVzaW5nIGRldmljZSAlMDR4OiUwNHggKCVscykuXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXNjLlZlbmRvcklkLCBkZXNjLkRldmljZUlk LCBkZXNjLkRlc2NyaXB0aW9uKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4gK8KgwqDC oMKgwqDCoMKgIH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgIGhyID0gZDNkMTJ2YV9jcmVhdGVfZGV2 aWNlKChJVW5rbm93biAqKXBBZGFwdGVyLAo+IEQzRF9GRUFUVVJFX0xFVkVMXzEyXzAsICZJSURf SUQzRDEyRGV2aWNlLCAmZGV2aWNlX2h3Y3R4LT5kZXZpY2UpOwo+ICvCoMKgwqDCoMKgwqDCoCBE M0QxMl9PQkpFQ1RfUkVMRUFTRShwQWRhcHRlcik7Cj4gK8KgwqDCoMKgwqDCoMKgIGlmIChGQUlM RUQoaHIpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZfbG9nKGN0eCwgQVZfTE9HX0VS Uk9SLCAiRmFpbGVkIHRvIGNyZWF0ZSBEaXJlY3RYM0QgMTIgZGV2aWNlCj4gKCVseClcbiIsIChs b25nKWhyKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUl9VTktOT1dO Owo+ICvCoMKgwqDCoMKgwqDCoCB9Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgcmV0dXJuIDA7 Cj4gK30KPiArCj4gK2NvbnN0IEhXQ29udGV4dFR5cGUgZmZfaHdjb250ZXh0X3R5cGVfZDNkMTJ2 YSA9IHsKPiArwqDCoMKgIC50eXBlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ID0gQVZfSFdERVZJQ0VfVFlQRV9EM0QxMlZBLAo+ICvCoMKgwqAgLm5hbWXCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSAiRDNEMTJWQSIsCj4gKwo+ICvCoMKgwqAgLmRldmlj ZV9od2N0eF9zaXplwqDCoMKgwqDCoCA9IHNpemVvZihBVkQzRDEyVkFEZXZpY2VDb250ZXh0KSwK PiArwqDCoMKgIC5mcmFtZXNfaHdjdHhfc2l6ZcKgwqDCoMKgwqAgPSBzaXplb2YoQVZEM0QxMlZB RnJhbWVzQ29udGV4dCksCj4gK8KgwqDCoCAuZnJhbWVzX3ByaXZfc2l6ZcKgwqDCoMKgwqDCoCA9 IHNpemVvZihEM0QxMlZBRnJhbWVzQ29udGV4dCksCj4gKwo+ICvCoMKgwqAgLmRldmljZV9jcmVh dGXCoMKgwqDCoMKgwqDCoMKgwqAgPSBkM2QxMnZhX2RldmljZV9jcmVhdGUsCj4gK8KgwqDCoCAu ZGV2aWNlX2luaXTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gZDNkMTJ2YV9kZXZpY2VfaW5pdCwK PiArwqDCoMKgIC5kZXZpY2VfdW5pbml0wqDCoMKgwqDCoMKgwqDCoMKgID0gZDNkMTJ2YV9kZXZp Y2VfdW5pbml0LAo+ICvCoMKgwqAgLmZyYW1lc19nZXRfY29uc3RyYWludHMgPSBkM2QxMnZhX2Zy YW1lc19nZXRfY29uc3RyYWludHMsCj4gK8KgwqDCoCAuZnJhbWVzX2luaXTCoMKgwqDCoMKgwqDC oMKgwqDCoMKgID0gZDNkMTJ2YV9mcmFtZXNfaW5pdCwKPiArwqDCoMKgIC5mcmFtZXNfdW5pbml0 wqDCoMKgwqDCoMKgwqDCoMKgID0gZDNkMTJ2YV9mcmFtZXNfdW5pbml0LAo+ICvCoMKgwqAgLmZy YW1lc19nZXRfYnVmZmVywqDCoMKgwqDCoCA9IGQzZDEydmFfZ2V0X2J1ZmZlciwKPiArwqDCoMKg IC50cmFuc2Zlcl9nZXRfZm9ybWF0c8KgwqAgPSBkM2QxMnZhX3RyYW5zZmVyX2dldF9mb3JtYXRz LAo+ICvCoMKgwqAgLnRyYW5zZmVyX2RhdGFfdG/CoMKgwqDCoMKgwqAgPSBkM2QxMnZhX3RyYW5z ZmVyX2RhdGEsCj4gK8KgwqDCoCAudHJhbnNmZXJfZGF0YV9mcm9twqDCoMKgwqAgPSBkM2QxMnZh X3RyYW5zZmVyX2RhdGEsCj4gKwo+ICvCoMKgwqAgLnBpeF9mbXRzwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCA9IChjb25zdCBlbnVtIEFWUGl4ZWxGb3JtYXRbXSl7IEFWX1BJWF9GTVRfRDNE MTIsCj4gQVZfUElYX0ZNVF9OT05FIH0sCj4gK307Cj4gZGlmZiAtLWdpdCBhL2xpYmF2dXRpbC9o d2NvbnRleHRfZDNkMTJ2YS5oIGIvbGliYXZ1dGlsL2h3Y29udGV4dF9kM2QxMnZhLmgKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAuLjA2MGY2OTJkMTEKPiAtLS0gL2Rl di9udWxsCj4gKysrIGIvbGliYXZ1dGlsL2h3Y29udGV4dF9kM2QxMnZhLmgKPiBAQCAtMCwwICsx LDE2NyBAQAo+ICsvKgo+ICsgKiBEaXJlY3QzRCAxMiBIVyBhY2NlbGVyYXRpb24uCj4gKyAqCj4g KyAqIGNvcHlyaWdodCAoYykgMjAyMi0yMDIzIFd1IEppYW5odWEgPHRvcXN4d0BvdXRsb29rLmNv bT4KPiArICoKPiArICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+ICsgKgo+ICsgKiBG Rm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4g KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMKPiArICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyCj4gKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK PiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LsKgIFNlZSB0aGUgR05VCj4gKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCj4gKyAqCj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhbG9uZyB3aXRo IEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+ICsgKiBGb3VuZGF0 aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAy MTEwLTEzMDEKPiBVU0EKPiArICovCj4gKwo+ICsjaWZuZGVmIEFWVVRJTF9IV0NPTlRFWFRfRDNE MTJWQV9ICj4gKyNkZWZpbmUgQVZVVElMX0hXQ09OVEVYVF9EM0QxMlZBX0gKPiArCj4gKy8qKgo+ ICsgKiBAZmlsZQo+ICsgKiBBbiBBUEktc3BlY2lmaWMgaGVhZGVyIGZvciBBVl9IV0RFVklDRV9U WVBFX0QzRDEyVkEuCj4gKyAqCgpEb2VzIEQzRDEyVkEgc3VwcG9ydCBkeW5hbWljIGZyYW1lIHBv b2xzID8gSSB0aGluayBpdCBpcyBiZXR0ZXIgdG8gZG9jdW1lbnQgaXQKZXhwbGljaXRseS4KClRo YW5rcwpIYWloYW8KCgo+ICsgKi8KPiArI2luY2x1ZGUgPHN0ZGludC5oPgo+ICsjaW5jbHVkZSA8 aW5pdGd1aWQuaD4KPiArI2luY2x1ZGUgPGQzZDEyLmg+Cj4gKyNpbmNsdWRlIDxkM2QxMnZpZGVv Lmg+Cj4gKwo+ICsvKioKPiArICogQGJyaWVmIFRoaXMgc3RydWN0IGlzIGFsbG9jYXRlZCBhcyBB VkhXRGV2aWNlQ29udGV4dC5od2N0eAo+ICsgKgo+ICsgKi8KPiArdHlwZWRlZiBzdHJ1Y3QgQVZE M0QxMlZBRGV2aWNlQ29udGV4dCB7Cj4gK8KgwqDCoCAvKioKPiArwqDCoMKgwqAgKiBEZXZpY2Ug dXNlZCBmb3Igb2JqZWN0cyBjcmVhdGlvbiBhbmQgYWNjZXNzLiBUaGlzIGNhbiBhbHNvIGJlCj4g K8KgwqDCoMKgICogdXNlZCB0byBzZXQgdGhlIGxpYmF2Y29kZWMgZGVjb2RpbmcgZGV2aWNlLgo+ ICvCoMKgwqDCoCAqCj4gK8KgwqDCoMKgICogQ2FuIGJlIHNldCBieSB0aGUgdXNlci4gVGhpcyBp cyB0aGUgb25seSBtYW5kYXRvcnkgZmllbGQgLSB0aGUgb3RoZXIKPiArwqDCoMKgwqAgKiBkZXZp Y2UgY29udGV4dCBmaWVsZHMgYXJlIHNldCBmcm9tIHRoaXMgYW5kIGFyZSBhdmFpbGFibGUgZm9y Cj4gY29udmVuaWVuY2UuCj4gK8KgwqDCoMKgICoKPiArwqDCoMKgwqAgKiBEZWFsbG9jYXRpbmcg dGhlIEFWSFdEZXZpY2VDb250ZXh0IHdpbGwgYWx3YXlzIHJlbGVhc2UgdGhpcyBpbnRlcmZhY2Us Cj4gK8KgwqDCoMKgICogYW5kIGl0IGRvZXMgbm90IG1hdHRlciB3aGV0aGVyIGl0IHdhcyB1c2Vy LWFsbG9jYXRlZC4KPiArwqDCoMKgwqAgKi8KPiArwqDCoMKgIElEM0QxMkRldmljZSAqZGV2aWNl Owo+ICsKPiArwqDCoMKgIC8qKgo+ICvCoMKgwqDCoCAqIElmIHVuc2V0LCB0aGlzIHdpbGwgYmUg c2V0IGZyb20gdGhlIGRldmljZSBmaWVsZCBvbiBpbml0Lgo+ICvCoMKgwqDCoCAqCj4gK8KgwqDC oMKgICogRGVhbGxvY2F0aW5nIHRoZSBBVkhXRGV2aWNlQ29udGV4dCB3aWxsIGFsd2F5cyByZWxl YXNlIHRoaXMgaW50ZXJmYWNlLAo+ICvCoMKgwqDCoCAqIGFuZCBpdCBkb2VzIG5vdCBtYXR0ZXIg d2hldGhlciBpdCB3YXMgdXNlci1hbGxvY2F0ZWQuCj4gK8KgwqDCoMKgICovCj4gK8KgwqDCoCBJ RDNEMTJWaWRlb0RldmljZSAqdmlkZW9fZGV2aWNlOwo+ICsKPiArwqDCoMKgIC8qKgo+ICvCoMKg wqDCoCAqIFNwZWNpZmVkIGJ5IHN5bmM9MSB3aGVuIGluaXQgZDNkMTJ2YQo+ICvCoMKgwqDCoCAq Cj4gK8KgwqDCoMKgICogRXhlY3V0ZSBjb21tYW5kcyBhcyBzeW5jIG1vZGUKPiArwqDCoMKgwqAg Ki8KPiArwqDCoMKgIGludCBzeW5jOwo+ICt9IEFWRDNEMTJWQURldmljZUNvbnRleHQ7Cj4gKwo+ ICsvKioKPiArICogQGJyaWVmIFRoaXMgc3RydWN0IGlzIHVzZWQgdG8gc3luYyBkM2QxMiBleGVj dXRpb24KPiArICoKPiArICovCj4gK3R5cGVkZWYgc3RydWN0IEFWRDNEMTJWQVN5bmNDb250ZXh0 IHsKPiArwqDCoMKgIC8qKgo+ICvCoMKgwqDCoCAqIEQzRDEyIGZlbmNlIG9iamVjdAo+ICvCoMKg wqDCoCAqLwo+ICvCoMKgwqAgSUQzRDEyRmVuY2UgKmZlbmNlOwo+ICsKPiArwqDCoMKgIC8qKgo+ ICvCoMKgwqDCoCAqIEEgaGFuZGxlIHRvIHRoZSBldmVudCBvYmplY3QKPiArwqDCoMKgwqAgKi8K PiArwqDCoMKgIEhBTkRMRSBldmVudDsKPiArCj4gK8KgwqDCoCAvKioKPiArwqDCoMKgwqAgKiBU aGUgZmVuY2UgdmFsdWUgdXNlZCBmb3Igc3luYwo+ICvCoMKgwqDCoCAqLwo+ICvCoMKgwqAgdWlu dDY0X3QgZmVuY2VfdmFsdWU7Cj4gK30gQVZEM0QxMlZBU3luY0NvbnRleHQ7Cj4gKwo+ICsvKioK PiArICogQGJyaWVmIEQzRDEyIGZyYW1lIGRlc2NyaXB0b3IgZm9yIHBvb2wgYWxsb2NhdGlvbi4K PiArICoKPiArICovCj4gK3R5cGVkZWYgc3RydWN0IEFWRDNEMTJGcmFtZURlc2NyaXB0b3Igewo+ ICvCoMKgwqAgLyoqCj4gK8KgwqDCoMKgICogVGhlIHRleHR1cmUgaW4gd2hpY2ggdGhlIGZyYW1l IGlzIGxvY2F0ZWQuIFRoZSByZWZlcmVuY2UgY291bnQgaXMKPiArwqDCoMKgwqAgKiBtYW5hZ2Vk IGJ5IHRoZSBBVkJ1ZmZlclJlZiwgYW5kIGRlc3Ryb3lpbmcgdGhlIHJlZmVyZW5jZSB3aWxsIHJl bGVhc2UKPiArwqDCoMKgwqAgKiB0aGUgaW50ZXJmYWNlLgo+ICvCoMKgwqDCoCAqCj4gK8KgwqDC oMKgICogTm9ybWFsbHkgc3RvcmVkIGluIEFWRnJhbWUuZGF0YVswXS4KPiArwqDCoMKgwqAgKi8K PiArwqDCoMKgIElEM0QxMlJlc291cmNlICp0ZXh0dXJlOwo+ICsKPiArwqDCoMKgIC8qKgo+ICvC oMKgwqDCoCAqIFRoZSBpbmRleCBpbnRvIHRoZSBhcnJheSB0ZXh0dXJlIGVsZW1lbnQgcmVwcmVz ZW50aW5nIHRoZSBmcmFtZQo+ICvCoMKgwqDCoCAqCj4gK8KgwqDCoMKgICogTm9ybWFsbHkgc3Rv cmVkIGluIEFWRnJhbWUuZGF0YVsxXSAoY2FzdCBmcm9tIGludHB0cl90KS4KPiArwqDCoMKgwqAg Ki8KPiArwqDCoMKgIGludHB0cl90IGluZGV4Owo+ICsKPiArwqDCoMKgIC8qKgo+ICvCoMKgwqDC oCAqIFRoZSBzeW5jIGNvbnRleHQgZm9yIHRoZSB0ZXh0dXJlCj4gK8KgwqDCoMKgICoKPiArwqDC oMKgwqAgKiBVc2UgYXZfZDNkMTJ2YV93YWl0X2lkbGUoc3luY19jdHgpIHRvIGVuc3VyZSB0aGUg ZGVjb2Rpbmcgb3IgZW5jb2RpbmcKPiBoYXZlIGJlZW4gZmluaXNlZAo+ICvCoMKgwqDCoCAqIEBz ZWU6Cj4gaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2VuLXVzL3dpbmRvd3Mvd2luMzIvbWVk Zm91bmQvZGlyZWN0M2QtMTItdmlkZW8tb3ZlcnZpZXcjZGlyZWN0eC0xMi1mZW5jZXMKPiArwqDC oMKgwqAgKgo+ICvCoMKgwqDCoCAqIE5vcm1hbGx5IHN0b3JlZCBpbiBBVkZyYW1lLmRhdGFbMl0u Cj4gK8KgwqDCoMKgICovCj4gK8KgwqDCoCBBVkQzRDEyVkFTeW5jQ29udGV4dCAqc3luY19jdHg7 Cj4gK30gQVZEM0QxMkZyYW1lRGVzY3JpcHRvcjsKPiArCj4gKy8qKgo+ICsgKiBAYnJpZWYgVGhp cyBzdHJ1Y3QgaXMgYWxsb2NhdGVkIGFzIEFWSFdGcmFtZXNDb250ZXh0Lmh3Y3R4Cj4gKyAqCj4g KyAqLwo+ICt0eXBlZGVmIHN0cnVjdCBBVkQzRDEyVkFGcmFtZXNDb250ZXh0IHsKPiArwqDCoMKg IC8qKgo+ICvCoMKgwqDCoCAqIFRoZSBzYW1lIGltcGxlbWVudGF0aW9uIGFzIGQzZDExdmEKPiAr wqDCoMKgwqAgKiBUaGlzIGZpZWxkIGlzIG5vdCBhYmxlIHRvIGJlIHVzZXItYWxsb2NhdGVkIGF0 IHRoZSBwcmVzZW50Lgo+ICvCoMKgwqDCoCAqLwo+ICvCoMKgwqAgQVZEM0QxMkZyYW1lRGVzY3Jp cHRvciAqdGV4dHVyZV9pbmZvczsKPiArfSBBVkQzRDEyVkFGcmFtZXNDb250ZXh0Owo+ICsKPiAr LyoqCj4gKyAqIEBicmllZiBNYXAgc3cgcGl4ZWwgZm9ybWF0IHRvIGQzZDEyIGZvcm1hdAo+ICsg Kgo+ICsgKiBAcmV0dXJuIGQzZDEyIHNwZWNpZmllZCBmb3JtYXQKPiArICovCj4gK0RYR0lfRk9S TUFUIGF2X2QzZDEydmFfbWFwX3N3X3RvX2h3X2Zvcm1hdChlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4 X2ZtdCk7Cj4gKwo+ICsvKioKPiArICogQGJyaWVmIEFsbG9jYXRlIGFuIEFWRDNEMTJWQVN5bmND b250ZXh0Cj4gKyAqCj4gKyAqIEByZXR1cm4gRXJyb3IgY29kZSAocmV0IDwgMCBpZiBmYWlsZWQp Cj4gKyAqLwo+ICtpbnQgYXZfZDNkMTJ2YV9zeW5jX2NvbnRleHRfYWxsb2MoQVZEM0QxMlZBRGV2 aWNlQ29udGV4dCAqY3R4LAo+IEFWRDNEMTJWQVN5bmNDb250ZXh0ICoqc3luY19jdHgpOwo+ICsK PiArLyoqCj4gKyAqIEBicmllZiBGcmVlIGFuIEFWRDNEMTJWQVN5bmNDb250ZXh0Cj4gKyAqLwo+ ICt2b2lkIGF2X2QzZDEydmFfc3luY19jb250ZXh0X2ZyZWUoQVZEM0QxMlZBU3luY0NvbnRleHQg KipzeW5jX2N0eCk7Cj4gKwo+ICsvKioKPiArICogQGJyaWVmIFdhaXQgZm9yIHRoZSBzeW5jIGNv bnRleHQgdG8gdGhlIGlkbGUgc3RhdGUKPiArICoKPiArICogQHJldHVybiBFcnJvciBjb2RlIChy ZXQgPCAwIGlmIGZhaWxlZCkKPiArICovCj4gK2ludCBhdl9kM2QxMnZhX3dhaXRfaWRsZShBVkQz RDEyVkFTeW5jQ29udGV4dCAqc3luY19jdHgpOwo+ICsKPiArLyoqCj4gKyAqIEBicmllZiBXYWl0 IGZvciBhIHNwZWNpZmllZCBjb21tYW5kIHF1ZXVlIHRvIHRoZSBpZGxlIHN0YXRlCj4gKyAqCj4g KyAqIEByZXR1cm4gRXJyb3IgY29kZSAocmV0IDwgMCBpZiBmYWlsZWQpCj4gKyAqLwo+ICtpbnQg YXZfZDNkMTJ2YV93YWl0X3F1ZXVlX2lkbGUoQVZEM0QxMlZBU3luY0NvbnRleHQgKnN5bmNfY3R4 LAo+IElEM0QxMkNvbW1hbmRRdWV1ZSAqY29tbWFuZF9xdWV1ZSk7Cj4gKwo+ICsjZW5kaWYgLyog QVZVVElMX0hXQ09OVEVYVF9EM0QxMlZBX0ggKi8KPiBkaWZmIC0tZ2l0IGEvbGliYXZ1dGlsL2h3 Y29udGV4dF9kM2QxMnZhX2ludGVybmFsLmgKPiBiL2xpYmF2dXRpbC9od2NvbnRleHRfZDNkMTJ2 YV9pbnRlcm5hbC5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwLi5l ZWVlZjg1Y2Y0Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYmF2dXRpbC9od2NvbnRleHRfZDNk MTJ2YV9pbnRlcm5hbC5oCj4gQEAgLTAsMCArMSw1NCBAQAo+ICsvKgo+ICsgKiBEaXJlY3QzRCAx MiBIVyBhY2NlbGVyYXRpb24uCj4gKyAqCj4gKyAqIGNvcHlyaWdodCAoYykgMjAyMi0yMDIzIFd1 IEppYW5odWEgPHRvcXN4d0BvdXRsb29rLmNvbT4KPiArICoKPiArICogVGhpcyBmaWxlIGlzIHBh cnQgb2YgRkZtcGVnLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCj4gKyAqIHZlcnNpb24g Mi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u Lgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLsKgIFNlZSB0aGUgR05VCj4gKyAqIExlc3NlciBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqCj4gKyAqIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs aWMKPiArICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUg RnJlZSBTb2Z0d2FyZQo+ICsgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEKPiBVU0EKPiArICovCj4gKwo+ICsj aWZuZGVmIEFWVVRJTF9IV0NPTlRFWFRfRDNEMTJWQV9JTlRFUk5BTF9ICj4gKyNkZWZpbmUgQVZV VElMX0hXQ09OVEVYVF9EM0QxMlZBX0lOVEVSTkFMX0gKPiArCj4gKy8qKgo+ICsgKiBAZGVmIENP QkpNQUNST1MKPiArICoKPiArICogQGJyaWVmIEVuYWJsZSBDIHN0eWxlIGludGVyZmFjZSBmb3Ig RDNEMTIKPiArICovCj4gKyNpZm5kZWYgQ09CSk1BQ1JPUwo+ICsjZGVmaW5lIENPQkpNQUNST1MK PiArI2VuZGlmCj4gKwo+ICsvKioKPiArICogQGRlZiBEWF9DSEVDSwo+ICsgKgo+ICsgKiBAYnJp ZWYgQSBjaGVjayBtYWNybyB1c2VkIGJ5IEQzRDEyIGZ1bmN0aW9ucyBoaWdobHkgZnJlcXVlbnRs eQo+ICsgKi8KPiArI2RlZmluZSBEWF9DSEVDSyhocikgaWYgKEZBSUxFRChocikpIHsgXAo+ICvC oMKgwqAgZ290byBmYWlsOyBcCj4gK30KPiArCj4gKy8qKgo+ICsgKiBAZGVmIEQzRDEyX09CSkVD VF9SRUxFQVNFCj4gKyAqCj4gKyAqIEBicmllZiBBIHJlbGVhc2UgbWFjcm8gdXNlZCBieSBEM0Qx MiBvYmplY3RzIGhpZ2hseSBmcmVxdWVudGx5Cj4gKyAqLwo+ICsjZGVmaW5lIEQzRDEyX09CSkVD VF9SRUxFQVNFKHBJbnRlcmZhY2UpIGlmIChwSW50ZXJmYWNlKSB7IFwKPiArwqDCoMKgIElVbmtu b3duX1JlbGVhc2UoKElVbmtub3duICopcEludGVyZmFjZSk7IFwKPiArwqDCoMKgIHBJbnRlcmZh Y2UgPSBOVUxMOyBcCj4gK30KPiArCj4gKyNlbmRpZiAvKiBBVlVUSUxfSFdDT05URVhUX0QzRDEy VkFfSU5URVJOQUxfSCAqLwo+IFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo+IGRpZmYgLS1n aXQgYS9saWJhdnV0aWwvaHdjb250ZXh0X2ludGVybmFsLmggYi9saWJhdnV0aWwvaHdjb250ZXh0 X2ludGVybmFsLmgKPiBpbmRleCBlNjI2NjQ5NGFjLi40ZGY1MTZlZTZhIDEwMDY0NAo+IC0tLSBh L2xpYmF2dXRpbC9od2NvbnRleHRfaW50ZXJuYWwuaAo+ICsrKyBiL2xpYmF2dXRpbC9od2NvbnRl eHRfaW50ZXJuYWwuaAo+IEBAIC0xNjUsNiArMTY1LDcgQEAgaW50IGZmX2h3ZnJhbWVfbWFwX3Jl cGxhY2UoQVZGcmFtZSAqZHN0LCBjb25zdCBBVkZyYW1lCj4gKnNyYyk7Cj4gwqAKPiDCoGV4dGVy biBjb25zdCBIV0NvbnRleHRUeXBlIGZmX2h3Y29udGV4dF90eXBlX2N1ZGE7Cj4gwqBleHRlcm4g Y29uc3QgSFdDb250ZXh0VHlwZSBmZl9od2NvbnRleHRfdHlwZV9kM2QxMXZhOwo+ICtleHRlcm4g Y29uc3QgSFdDb250ZXh0VHlwZSBmZl9od2NvbnRleHRfdHlwZV9kM2QxMnZhOwo+IMKgZXh0ZXJu IGNvbnN0IEhXQ29udGV4dFR5cGUgZmZfaHdjb250ZXh0X3R5cGVfZHJtOwo+IMKgZXh0ZXJuIGNv bnN0IEhXQ29udGV4dFR5cGUgZmZfaHdjb250ZXh0X3R5cGVfZHh2YTI7Cj4gwqBleHRlcm4gY29u c3QgSFdDb250ZXh0VHlwZSBmZl9od2NvbnRleHRfdHlwZV9vcGVuY2w7Cj4gZGlmZiAtLWdpdCBh L2xpYmF2dXRpbC9waXhkZXNjLmMgYi9saWJhdnV0aWwvcGl4ZGVzYy5jCj4gaW5kZXggZTFlMGRk MmE5ZS4uMDlmY2E1ZWYxOSAxMDA2NDQKPiAtLS0gYS9saWJhdnV0aWwvcGl4ZGVzYy5jCj4gKysr IGIvbGliYXZ1dGlsL3BpeGRlc2MuYwo+IEBAIC0yMjgzLDYgKzIyODMsMTAgQEAgc3RhdGljIGNv bnN0IEFWUGl4Rm10RGVzY3JpcHRvcgo+IGF2X3BpeF9mbXRfZGVzY3JpcHRvcnNbQVZfUElYX0ZN VF9OQl0gPSB7Cj4gwqDCoMKgwqDCoMKgwqDCoCAubmFtZSA9ICJkM2QxMSIsCj4gwqDCoMKgwqDC oMKgwqDCoCAuZmxhZ3MgPSBBVl9QSVhfRk1UX0ZMQUdfSFdBQ0NFTCwKPiDCoMKgwqDCoCB9LAo+ ICvCoMKgwqAgW0FWX1BJWF9GTVRfRDNEMTJdID0gewo+ICvCoMKgwqDCoMKgwqDCoCAubmFtZSA9 ICJkM2QxMiIsCj4gK8KgwqDCoMKgwqDCoMKgIC5mbGFncyA9IEFWX1BJWF9GTVRfRkxBR19IV0FD Q0VMLAo+ICvCoMKgwqAgfSwKPiDCoMKgwqDCoCBbQVZfUElYX0ZNVF9HQlJQRjMyQkVdID0gewo+ IMKgwqDCoMKgwqDCoMKgwqAgLm5hbWUgPSAiZ2JycGYzMmJlIiwKPiDCoMKgwqDCoMKgwqDCoMKg IC5uYl9jb21wb25lbnRzID0gMywKPiBkaWZmIC0tZ2l0IGEvbGliYXZ1dGlsL3BpeGZtdC5oIGIv bGliYXZ1dGlsL3BpeGZtdC5oCj4gaW5kZXggNjNlMDdiYTY0Zi4uMWYwYWIyYTIzYyAxMDA2NDQK PiAtLS0gYS9saWJhdnV0aWwvcGl4Zm10LmgKPiArKysgYi9saWJhdnV0aWwvcGl4Zm10LmgKPiBA QCAtNDI2LDYgKzQyNiwxNSBAQCBlbnVtIEFWUGl4ZWxGb3JtYXQgewo+IMKgwqDCoMKgIEFWX1BJ WF9GTVRfUDQxMkJFLMKgwqDCoMKgwqAgLy8vPCBpbnRlcmxlYXZlZCBjaHJvbWEgWVVWIDQ6NDo0 LCAzNmJwcCwgZGF0YSBpbgo+IHRoZSBoaWdoIGJpdHMsIGJpZy1lbmRpYW4KPiDCoMKgwqDCoCBB Vl9QSVhfRk1UX1A0MTJMRSzCoMKgwqDCoMKgIC8vLzwgaW50ZXJsZWF2ZWQgY2hyb21hIFlVViA0 OjQ6NCwgMzZicHAsIGRhdGEgaW4KPiB0aGUgaGlnaCBiaXRzLCBsaXR0bGUtZW5kaWFuCj4gwqAK PiArwqDCoMKgIC8qKgo+ICvCoMKgwqDCoCAqIEhhcmR3YXJlIHN1cmZhY2VzIGZvciBEaXJlY3Qz RCAxMi4KPiArwqDCoMKgwqAgKgo+ICvCoMKgwqDCoCAqIGRhdGFbMF0gY29udGFpbnMgYSBJRDNE MTJSZXNvdXJjZSBwb2ludGVyLgo+ICvCoMKgwqDCoCAqIGRhdGFbMV0gY29udGFpbnMgdGhlIHJl c291cmNlIGFycmF5IGluZGV4IG9mIHRoZSBmcmFtZSBhcyBpbnRwdHJfdC4KPiArwqDCoMKgwqAg KiBkYXRhWzJdIGNvbnRhaW5zIHRoZSBzeW5jIGNvbnRleHQgZm9yIGN1cnJlbnQgcmVzb3VyY2UK PiArwqDCoMKgwqAgKi8KPiArwqDCoMKgIEFWX1BJWF9GTVRfRDNEMTIsCj4gKwo+IMKgwqDCoMKg IEFWX1BJWF9GTVRfTkLCoMKgwqDCoMKgwqDCoMKgIC8vLzwgbnVtYmVyIG9mIHBpeGVsIGZvcm1h dHMsIERPIE5PVCBVU0UgVEhJUyBpZgo+IHlvdSB3YW50IHRvIGxpbmsgd2l0aCBzaGFyZWQgbGli YXYqIGJlY2F1c2UgdGhlIG51bWJlciBvZiBmb3JtYXRzIG1pZ2h0IGRpZmZlcgo+IGJldHdlZW4g dmVyc2lvbnMKPiDCoH07Cj4gwqAKPiBkaWZmIC0tZ2l0IGEvbGliYXZ1dGlsL3Rlc3RzL2h3ZGV2 aWNlLmMgYi9saWJhdnV0aWwvdGVzdHMvaHdkZXZpY2UuYwo+IGluZGV4IGM1NzU4NjYxM2EuLjlk Nzk2NGY5ZWUgMTAwNjQ0Cj4gLS0tIGEvbGliYXZ1dGlsL3Rlc3RzL2h3ZGV2aWNlLmMKPiArKysg Yi9saWJhdnV0aWwvdGVzdHMvaHdkZXZpY2UuYwo+IEBAIC0xMzcsNiArMTM3LDggQEAgc3RhdGlj IGNvbnN0IHN0cnVjdCB7Cj4gwqDCoMKgwqDCoMKgIHsgIjAiLCAiMSIsICIyIiB9IH0sCj4gwqDC oMKgwqAgeyBBVl9IV0RFVklDRV9UWVBFX0QzRDExVkEsCj4gwqDCoMKgwqDCoMKgIHsgIjAiLCAi MSIsICIyIiB9IH0sCj4gK8KgwqDCoCB7IEFWX0hXREVWSUNFX1RZUEVfRDNEMTJWQSwKPiArwqDC oMKgwqDCoCB7ICIwIiwgIjEiLCAiMiIgfSB9LAo+IMKgwqDCoMKgIHsgQVZfSFdERVZJQ0VfVFlQ RV9PUEVOQ0wsCj4gwqDCoMKgwqDCoMKgIHsgIjAuMCIsICIwLjEiLCAiMS4wIiwgIjEuMSIgfSB9 LAo+IMKgwqDCoMKgIHsgQVZfSFdERVZJQ0VfVFlQRV9WQUFQSSwKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QK ZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGlu Zm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1h aWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2Ny aWJlIi4K