From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 36B7AD41C35 for ; Thu, 14 Nov 2024 04:16:52 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tBRHC-0000gw-Qg; Wed, 13 Nov 2024 23:16:14 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tBRGn-0000An-HV for qemu-devel@nongnu.org; Wed, 13 Nov 2024 23:15:58 -0500 Received: from mail-pj1-x102c.google.com ([2607:f8b0:4864:20::102c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1tBRGe-0004c2-42 for qemu-devel@nongnu.org; Wed, 13 Nov 2024 23:15:47 -0500 Received: by mail-pj1-x102c.google.com with SMTP id 98e67ed59e1d1-2e2e87153a3so159921a91.3 for ; Wed, 13 Nov 2024 20:15:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1731557738; x=1732162538; darn=nongnu.org; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=GthwAEO8kfmu9vezz+4GpTcsJ9q/o3v767gk0MDp60U=; b=T11orG0ciOgz4k9m/XI6ZQGnPH5kGgQtSadNKvDviPn2JO6Z7dTTGQgVi90OKU9sdf dfWwZtUH2URUgMbVvidGkKaSbyH7iw+o6vQOFbxdihmbypjTjoEpsvYAYNr2sn1mfHvd TagIw921XehK+Wiw5bjqZQvwUQSOooapRUjYnh9CeHdXgbBRxRgxb7TxQJIgBL7dRAn2 TVyZfBwKfirV4ANhD5eQMkVB299jN0YtNiNLNFzRXYEWCTHXUo5JrdD8hCvoSZ3LxbUB XJhaPwfdZCa0wUvvuZmBDdoTUlHiF/dBQypgt6aeiJcGJov5sm03c0oPnUXtQWVmMWZs 2Feg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1731557738; x=1732162538; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=GthwAEO8kfmu9vezz+4GpTcsJ9q/o3v767gk0MDp60U=; b=UHOu6Llrsx0JKbPGaN1o6u+b2lgkp7G2xlBPbPFpvH8wjNFbc+vYQnmPaGGiEISU7H MiIs9e1KvQlWXPVnXa8ia8b98/DOPWBANKZlay7GE2D5Ez1t5emhxiQgDaBgKi0D+6Id ZQlTmlcsYs0C5HfIA0ReBFtq/X3nlVfHWDEZTbRQxFYzady4vJlWIsbrE1zYhj4vcqpr W7CsFIpanZEiJfpoCa2/qizjKPcdtGHwLo9/H/a7hVShVTRkJo0+OcL7XoIkl09KcTzs AtM6ALYGImeEQTY9fx7qy8QaJ/HW+bGf2njBzG1jtyTLX96dgYOhvRXnLdzwXXAWICpM VyCw== X-Forwarded-Encrypted: i=1; AJvYcCWh8vUI19NEXOMy6E4i9lNNU2ePofj1GueWlJ+3/P68LFaIwASSwgvvtdRrDSeACuXyO4tCU0ZUGYdj@nongnu.org X-Gm-Message-State: AOJu0YxX/K7kjA1I93rqRcnqSadtQlzgpLoveXUTofqs93d/L5MTkPTW UveULDST1ctCWCwmbQrYEKqnw0rlOVfTTinwxk548iR0dHU6zthTMVsFBoslgXo= X-Google-Smtp-Source: AGHT+IFmoNK+cztWkOk1alV8uVDSUsKvhakXUbHpXGNqxk4zra7C25KXDTwUehGV01e0HRjZShMpHg== X-Received: by 2002:a17:90b:2c8b:b0:2d3:c9bb:9cd7 with SMTP id 98e67ed59e1d1-2ea06a61e44mr777661a91.36.1731557738351; Wed, 13 Nov 2024 20:15:38 -0800 (PST) Received: from [192.168.1.67] (216-180-64-156.dyn.novuscom.net. [216.180.64.156]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2ea06f9c699sm223252a91.38.2024.11.13.20.15.37 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 13 Nov 2024 20:15:37 -0800 (PST) Message-ID: <3d92b90c-9188-4b2d-8f03-d5d49a11a355@linaro.org> Date: Wed, 13 Nov 2024 20:15:36 -0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 21/24] exec: Extract CPU physical memory API to 'sysemu/physmem-target.h' Content-Language: en-US To: =?UTF-8?Q?Philippe_Mathieu-Daud=C3=A9?= , Paolo Bonzini , Richard Henderson , Anton Johansson , qemu-devel@nongnu.org Cc: qemu-ppc@nongnu.org, Thomas Huth , qemu-arm@nongnu.org, Peter Xu , qemu-riscv@nongnu.org, David Hildenbrand , Peter Maydell , =?UTF-8?Q?Alex_Benn=C3=A9e?= , qemu-s390x@nongnu.org References: <20241114011310.3615-1-philmd@linaro.org> <20241114011310.3615-22-philmd@linaro.org> From: Pierrick Bouvier In-Reply-To: <20241114011310.3615-22-philmd@linaro.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 Received-SPF: pass client-ip=2607:f8b0:4864:20::102c; envelope-from=pierrick.bouvier@linaro.org; helo=mail-pj1-x102c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org T24gMTEvMTMvMjQgMTc6MTMsIFBoaWxpcHBlIE1hdGhpZXUtRGF1ZMOpIHdyb3RlOg0KPiBJ biBvcmRlciB0byBrZWVwICJleGVjL3JhbV9hZGRyLmgiIGZvY3VzZWQgb24gKHRhcmdldA0K PiBhZ25vc3RpYykgbWV0aG9kcyByZWxhdGVkIHRvIHRoZSByYW1fYWRkcl90IHR5cGUsIG1v dmUNCj4gYWxsICh0YXJnZXQgc3BlY2lmaWMpIENQVSBwaHlzaWNhbCBtZW1vcnkgQVBJIHRv IGEgbmV3DQo+ICJzeXNlbXUvcGh5c21lbS10YXJnZXQuaCIgaGVhZGVyLg0KPiANCj4gU2ln bmVkLW9mZi1ieTogUGhpbGlwcGUgTWF0aGlldS1EYXVkw6kgPHBoaWxtZEBsaW5hcm8ub3Jn Pg0KPiAtLS0NCj4gICBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEg Kw0KPiAgIGluY2x1ZGUvZXhlYy9yYW1fYWRkci5oICAgICAgICAgICB8IDQ4MyArLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ICAgaW5jbHVkZS9zeXNlbXUvcGh5c21lbS10YXJn ZXQuaCAgIHwgNTA2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiAgIGFjY2Vs L2t2bS9rdm0tYWxsLmMgICAgICAgICAgICAgICB8ICAgMSArDQo+ICAgYWNjZWwvdGNnL2Nw dXRsYi5jICAgICAgICAgICAgICAgIHwgICAxICsNCj4gICBhY2NlbC90Y2cvdHJhbnNsYXRl LWFsbC5jICAgICAgICAgfCAgIDEgKw0KPiAgIGh3L3BwYy9zcGFwci5jICAgICAgICAgICAg ICAgICAgICB8ICAgMSArDQo+ICAgaHcvcHBjL3NwYXByX2NhcHMuYyAgICAgICAgICAgICAg IHwgICAxICsNCj4gICBody9wcGMvc3BhcHJfcGNpLmMgICAgICAgICAgICAgICAgfCAgIDEg Kw0KPiAgIGh3L3JlbW90ZS9tZW1vcnkuYyAgICAgICAgICAgICAgICB8ICAgMSArDQo+ICAg aHcvcmVtb3RlL3Byb3h5LW1lbW9yeS1saXN0ZW5lci5jIHwgICAxICsNCj4gICBody9zMzkw eC9zMzkwLXN0YXR0cmliLWt2bS5jICAgICAgfCAgIDEgKw0KPiAgIGh3L3MzOTB4L3MzOTAt c3RhdHRyaWIuYyAgICAgICAgICB8ICAgMSArDQo+ICAgaHcvczM5MHgvczM5MC12aXJ0aW8t Y2N3LmMgICAgICAgIHwgICAxICsNCj4gICBody92ZmlvL2NvbW1vbi5jICAgICAgICAgICAg ICAgICAgfCAgIDEgKw0KPiAgIGh3L3ZmaW8vY29udGFpbmVyLmMgICAgICAgICAgICAgICB8 ICAgMSArDQo+ICAgaHcvdmZpby9pb21tdWZkLmMgICAgICAgICAgICAgICAgIHwgICAxICsN Cj4gICBody92ZmlvL21pZ3JhdGlvbi5jICAgICAgICAgICAgICAgfCAgIDEgKw0KPiAgIGh3 L3ZmaW8vc3BhcHIuYyAgICAgICAgICAgICAgICAgICB8ICAgMSArDQo+ICAgaHcvdmlydGlv L3ZpcnRpby1tZW0uYyAgICAgICAgICAgIHwgICAxICsNCj4gICBtaWdyYXRpb24vcmFtLmMg ICAgICAgICAgICAgICAgICAgfCAgIDEgKw0KPiAgIHBsdWdpbnMvYXBpLmMgICAgICAgICAg ICAgICAgICAgICB8ICAgMSArDQo+ICAgc3lzdGVtL21lbW9yeS5jICAgICAgICAgICAgICAg ICAgIHwgICAxICsNCj4gICBzeXN0ZW0vcGh5c21lbS5jICAgICAgICAgICAgICAgICAgfCAg IDEgKw0KPiAgIHRhcmdldC9hcm0vdGNnL210ZV9oZWxwZXIuYyAgICAgICB8ICAgMSArDQo+ ICAgdGFyZ2V0L3BwYy9rdm0uYyAgICAgICAgICAgICAgICAgIHwgICAxICsNCj4gICB0YXJn ZXQvczM5MHgva3ZtL2t2bS5jICAgICAgICAgICAgfCAgIDEgKw0KPiAgIDI3IGZpbGVzIGNo YW5nZWQsIDUzMiBpbnNlcnRpb25zKCspLCA0ODIgZGVsZXRpb25zKC0pDQo+ICAgY3JlYXRl IG1vZGUgMTAwNjQ0IGluY2x1ZGUvc3lzZW11L3BoeXNtZW0tdGFyZ2V0LmgNCj4gDQo+IGRp ZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTDQo+IGluZGV4IDA5NTQyMGY4 YjAuLjAwMjdlNTZmYTUgMTAwNjQ0DQo+IC0tLSBhL01BSU5UQUlORVJTDQo+ICsrKyBiL01B SU5UQUlORVJTDQo+IEBAIC0zMDI3LDYgKzMwMjcsNyBAQCBGOiBpbmNsdWRlL2V4ZWMvbWVt b3J5LmgNCj4gICBGOiBpbmNsdWRlL2V4ZWMvcmFtX2FkZHIuaA0KPiAgIEY6IGluY2x1ZGUv ZXhlYy9yYW1ibG9jay5oDQo+ICAgRjogaW5jbHVkZS9zeXNlbXUvbWVtb3J5X21hcHBpbmcu aA0KPiArRjogaW5jbHVkZS9zeXNlbXUvcGh5c21lbS10YXJnZXQuaA0KPiAgIEY6IHN5c3Rl bS9kbWEtaGVscGVycy5jDQo+ICAgRjogc3lzdGVtL2lvcG9ydC5jDQo+ICAgRjogc3lzdGVt L21lbW9yeS5jDQo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2V4ZWMvcmFtX2FkZHIuaCBiL2lu Y2x1ZGUvZXhlYy9yYW1fYWRkci5oDQo+IGluZGV4IGI2ZDU1NTE1NDkuLjgwZjZkYzc1NjQg MTAwNjQ0DQo+IC0tLSBhL2luY2x1ZGUvZXhlYy9yYW1fYWRkci5oDQo+ICsrKyBiL2luY2x1 ZGUvZXhlYy9yYW1fYWRkci5oDQo+IEBAIC0yMCw4MiArMjAsNiBAQA0KPiAgICNkZWZpbmUg UkFNX0FERFJfSA0KPiAgIA0KPiAgICNpZm5kZWYgQ09ORklHX1VTRVJfT05MWQ0KPiAtI2lu Y2x1ZGUgImNwdS5oIg0KPiAtI2luY2x1ZGUgInN5c2VtdS94ZW4uaCINCj4gLSNpbmNsdWRl ICJzeXNlbXUvdGNnLmgiDQo+IC0jaW5jbHVkZSAiZXhlYy9jcHV0bGIuaCINCj4gLSNpbmNs dWRlICJleGVjL3JhbWxpc3QuaCINCj4gLSNpbmNsdWRlICJleGVjL3JhbWJsb2NrLmgiDQo+ IC0jaW5jbHVkZSAiZXhlYy9leGVjLWFsbC5oIg0KPiAtI2luY2x1ZGUgInFlbXUvcmN1Lmgi DQo+IC0NCj4gLWV4dGVybiB1aW50NjRfdCB0b3RhbF9kaXJ0eV9wYWdlczsNCj4gLQ0KPiAt LyoqDQo+IC0gKiBjbGVhcl9ibWFwX3NpemU6IGNhbGN1bGF0ZSBjbGVhciBiaXRtYXAgc2l6 ZQ0KPiAtICoNCj4gLSAqIEBwYWdlczogbnVtYmVyIG9mIGd1ZXN0IHBhZ2VzDQo+IC0gKiBA c2hpZnQ6IGd1ZXN0IHBhZ2UgbnVtYmVyIHNoaWZ0DQo+IC0gKg0KPiAtICogUmV0dXJuczog bnVtYmVyIG9mIGJpdHMgZm9yIHRoZSBjbGVhciBiaXRtYXANCj4gLSAqLw0KPiAtc3RhdGlj IGlubGluZSBsb25nIGNsZWFyX2JtYXBfc2l6ZSh1aW50NjRfdCBwYWdlcywgdWludDhfdCBz aGlmdCkNCj4gLXsNCj4gLSAgICByZXR1cm4gRElWX1JPVU5EX1VQKHBhZ2VzLCAxVUwgPDwg c2hpZnQpOw0KPiAtfQ0KPiAtDQo+IC0vKioNCj4gLSAqIGNsZWFyX2JtYXBfc2V0OiBzZXQg Y2xlYXIgYml0bWFwIGZvciB0aGUgcGFnZSByYW5nZS4gIE11c3QgYmUgd2l0aA0KPiAtICog Yml0bWFwX211dGV4IGhlbGQuDQo+IC0gKg0KPiAtICogQHJiOiB0aGUgcmFtYmxvY2sgdG8g b3BlcmF0ZSBvbg0KPiAtICogQHN0YXJ0OiB0aGUgc3RhcnQgcGFnZSBudW1iZXINCj4gLSAq IEBzaXplOiBudW1iZXIgb2YgcGFnZXMgdG8gc2V0IGluIHRoZSBiaXRtYXANCj4gLSAqDQo+ IC0gKiBSZXR1cm5zOiBOb25lDQo+IC0gKi8NCj4gLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVh cl9ibWFwX3NldChSQU1CbG9jayAqcmIsIHVpbnQ2NF90IHN0YXJ0LA0KPiAtICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IG5wYWdlcykNCj4gLXsNCj4gLSAg ICB1aW50OF90IHNoaWZ0ID0gcmItPmNsZWFyX2JtYXBfc2hpZnQ7DQo+IC0NCj4gLSAgICBi aXRtYXBfc2V0KHJiLT5jbGVhcl9ibWFwLCBzdGFydCA+PiBzaGlmdCwgY2xlYXJfYm1hcF9z aXplKG5wYWdlcywgc2hpZnQpKTsNCj4gLX0NCj4gLQ0KPiAtLyoqDQo+IC0gKiBjbGVhcl9i bWFwX3Rlc3RfYW5kX2NsZWFyOiB0ZXN0IGNsZWFyIGJpdG1hcCBmb3IgdGhlIHBhZ2UsIGNs ZWFyIGlmIHNldC4NCj4gLSAqIE11c3QgYmUgd2l0aCBiaXRtYXBfbXV0ZXggaGVsZC4NCj4g LSAqDQo+IC0gKiBAcmI6IHRoZSByYW1ibG9jayB0byBvcGVyYXRlIG9uDQo+IC0gKiBAcGFn ZTogdGhlIHBhZ2UgbnVtYmVyIHRvIGNoZWNrDQo+IC0gKg0KPiAtICogUmV0dXJuczogdHJ1 ZSBpZiB0aGUgYml0IHdhcyBzZXQsIGZhbHNlIG90aGVyd2lzZQ0KPiAtICovDQo+IC1zdGF0 aWMgaW5saW5lIGJvb2wgY2xlYXJfYm1hcF90ZXN0X2FuZF9jbGVhcihSQU1CbG9jayAqcmIs IHVpbnQ2NF90IHBhZ2UpDQo+IC17DQo+IC0gICAgdWludDhfdCBzaGlmdCA9IHJiLT5jbGVh cl9ibWFwX3NoaWZ0Ow0KPiAtDQo+IC0gICAgcmV0dXJuIGJpdG1hcF90ZXN0X2FuZF9jbGVh cihyYi0+Y2xlYXJfYm1hcCwgcGFnZSA+PiBzaGlmdCwgMSk7DQo+IC19DQo+IC0NCj4gLXN0 YXRpYyBpbmxpbmUgYm9vbCBvZmZzZXRfaW5fcmFtYmxvY2soUkFNQmxvY2sgKmIsIHJhbV9h ZGRyX3Qgb2Zmc2V0KQ0KPiAtew0KPiAtICAgIHJldHVybiAoYiAmJiBiLT5ob3N0ICYmIG9m ZnNldCA8IGItPnVzZWRfbGVuZ3RoKSA/IHRydWUgOiBmYWxzZTsNCj4gLX0NCj4gLQ0KPiAt c3RhdGljIGlubGluZSB2b2lkICpyYW1ibG9ja19wdHIoUkFNQmxvY2sgKmJsb2NrLCByYW1f YWRkcl90IG9mZnNldCkNCj4gLXsNCj4gLSAgICBhc3NlcnQob2Zmc2V0X2luX3JhbWJsb2Nr KGJsb2NrLCBvZmZzZXQpKTsNCj4gLSAgICByZXR1cm4gKGNoYXIgKilibG9jay0+aG9zdCAr IG9mZnNldDsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGlu dCByYW1ibG9ja19yZWN2X2JpdG1hcF9vZmZzZXQodm9pZCAqaG9zdF9hZGRyLA0KPiAtICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUkFNQmxvY2sgKnJiKQ0KPiAtew0KPiAtICAgIHVpbnQ2NF90IGhvc3RfYWRkcl9vZmZz ZXQgPQ0KPiAtICAgICAgICAgICAgKHVpbnQ2NF90KSh1aW50cHRyX3QpKGhvc3RfYWRkciAt ICh2b2lkICopcmItPmhvc3QpOw0KPiAtICAgIHJldHVybiBob3N0X2FkZHJfb2Zmc2V0ID4+ IFRBUkdFVF9QQUdFX0JJVFM7DQo+IC19DQo+ICAgDQo+ICAgYm9vbCByYW1ibG9ja19pc19w bWVtKFJBTUJsb2NrICpyYik7DQo+ICAgDQo+IEBAIC0xNDMsNDExICs2Nyw2IEBAIGludCBx ZW11X3JhbV9yZXNpemUoUkFNQmxvY2sgKmJsb2NrLCByYW1fYWRkcl90IG5ld3NpemUsIEVy cm9yICoqZXJycCk7DQo+ICAgDQo+ICAgdm9pZCBxZW11X3JhbV9tc3luYyhSQU1CbG9jayAq YmxvY2ssIHJhbV9hZGRyX3Qgc3RhcnQsIHJhbV9hZGRyX3QgbGVuZ3RoKTsNCj4gICANCj4g LS8qIENsZWFyIHdob2xlIGJsb2NrIG9mIG1lbSAqLw0KPiAtc3RhdGljIGlubGluZSB2b2lk IHFlbXVfcmFtX2Jsb2NrX3dyaXRlYmFjayhSQU1CbG9jayAqYmxvY2spDQo+IC17DQo+IC0g ICAgcWVtdV9yYW1fbXN5bmMoYmxvY2ssIDAsIGJsb2NrLT51c2VkX2xlbmd0aCk7DQo+IC19 DQo+ICsjZW5kaWYgLyogQ09ORklHX1VTRVJfT05MWSAqLw0KPiAgIA0KPiAtI2RlZmluZSBE SVJUWV9DTElFTlRTX0FMTCAgICAgKCgxIDw8IERJUlRZX01FTU9SWV9OVU0pIC0gMSkNCj4g LSNkZWZpbmUgRElSVFlfQ0xJRU5UU19OT0NPREUgIChESVJUWV9DTElFTlRTX0FMTCAmIH4o MSA8PCBESVJUWV9NRU1PUllfQ09ERSkpDQo+IC0NCj4gLXN0YXRpYyBpbmxpbmUgYm9vbCBj cHVfcGh5c2ljYWxfbWVtb3J5X2dldF9kaXJ0eShyYW1fYWRkcl90IHN0YXJ0LA0KPiAtICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbV9hZGRy X3QgbGVuZ3RoLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGNsaWVudCkNCj4gLXsNCj4gLSAgICBEaXJ0eU1lbW9yeUJs b2NrcyAqYmxvY2tzOw0KPiAtICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBwYWdlOw0KPiAtICAg IHVuc2lnbmVkIGxvbmcgaWR4LCBvZmZzZXQsIGJhc2U7DQo+IC0gICAgYm9vbCBkaXJ0eSA9 IGZhbHNlOw0KPiAtDQo+IC0gICAgYXNzZXJ0KGNsaWVudCA8IERJUlRZX01FTU9SWV9OVU0p Ow0KPiAtDQo+IC0gICAgZW5kID0gVEFSR0VUX1BBR0VfQUxJR04oc3RhcnQgKyBsZW5ndGgp ID4+IFRBUkdFVF9QQUdFX0JJVFM7DQo+IC0gICAgcGFnZSA9IHN0YXJ0ID4+IFRBUkdFVF9Q QUdFX0JJVFM7DQo+IC0NCj4gLSAgICBXSVRIX1JDVV9SRUFEX0xPQ0tfR1VBUkQoKSB7DQo+ IC0gICAgICAgIGJsb2NrcyA9IHFhdG9taWNfcmN1X3JlYWQoJnJhbV9saXN0LmRpcnR5X21l bW9yeVtjbGllbnRdKTsNCj4gLQ0KPiAtICAgICAgICBpZHggPSBwYWdlIC8gRElSVFlfTUVN T1JZX0JMT0NLX1NJWkU7DQo+IC0gICAgICAgIG9mZnNldCA9IHBhZ2UgJSBESVJUWV9NRU1P UllfQkxPQ0tfU0laRTsNCj4gLSAgICAgICAgYmFzZSA9IHBhZ2UgLSBvZmZzZXQ7DQo+IC0g ICAgICAgIHdoaWxlIChwYWdlIDwgZW5kKSB7DQo+IC0gICAgICAgICAgICB1bnNpZ25lZCBs b25nIG5leHQgPSBNSU4oZW5kLCBiYXNlICsgRElSVFlfTUVNT1JZX0JMT0NLX1NJWkUpOw0K PiAtICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBudW0gPSBuZXh0IC0gYmFzZTsNCj4gLSAg ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZm91bmQgPSBmaW5kX25leHRfYml0KGJsb2Nrcy0+ YmxvY2tzW2lkeF0sDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBudW0sIG9mZnNldCk7DQo+IC0gICAgICAgICAgICBpZiAoZm91bmQgPCBu dW0pIHsNCj4gLSAgICAgICAgICAgICAgICBkaXJ0eSA9IHRydWU7DQo+IC0gICAgICAgICAg ICAgICAgYnJlYWs7DQo+IC0gICAgICAgICAgICB9DQo+IC0NCj4gLSAgICAgICAgICAgIHBh Z2UgPSBuZXh0Ow0KPiAtICAgICAgICAgICAgaWR4Kys7DQo+IC0gICAgICAgICAgICBvZmZz ZXQgPSAwOw0KPiAtICAgICAgICAgICAgYmFzZSArPSBESVJUWV9NRU1PUllfQkxPQ0tfU0la RTsNCj4gLSAgICAgICAgfQ0KPiAtICAgIH0NCj4gLQ0KPiAtICAgIHJldHVybiBkaXJ0eTsN Cj4gLX0NCj4gLQ0KPiAtc3RhdGljIGlubGluZSBib29sIGNwdV9waHlzaWNhbF9tZW1vcnlf YWxsX2RpcnR5KHJhbV9hZGRyX3Qgc3RhcnQsDQo+IC0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFtX2FkZHJfdCBsZW5ndGgsDQo+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg Y2xpZW50KQ0KPiAtew0KPiAtICAgIERpcnR5TWVtb3J5QmxvY2tzICpibG9ja3M7DQo+IC0g ICAgdW5zaWduZWQgbG9uZyBlbmQsIHBhZ2U7DQo+IC0gICAgdW5zaWduZWQgbG9uZyBpZHgs IG9mZnNldCwgYmFzZTsNCj4gLSAgICBib29sIGRpcnR5ID0gdHJ1ZTsNCj4gLQ0KPiAtICAg IGFzc2VydChjbGllbnQgPCBESVJUWV9NRU1PUllfTlVNKTsNCj4gLQ0KPiAtICAgIGVuZCA9 IFRBUkdFVF9QQUdFX0FMSUdOKHN0YXJ0ICsgbGVuZ3RoKSA+PiBUQVJHRVRfUEFHRV9CSVRT Ow0KPiAtICAgIHBhZ2UgPSBzdGFydCA+PiBUQVJHRVRfUEFHRV9CSVRTOw0KPiAtDQo+IC0g ICAgUkNVX1JFQURfTE9DS19HVUFSRCgpOw0KPiAtDQo+IC0gICAgYmxvY2tzID0gcWF0b21p Y19yY3VfcmVhZCgmcmFtX2xpc3QuZGlydHlfbWVtb3J5W2NsaWVudF0pOw0KPiAtDQo+IC0g ICAgaWR4ID0gcGFnZSAvIERJUlRZX01FTU9SWV9CTE9DS19TSVpFOw0KPiAtICAgIG9mZnNl dCA9IHBhZ2UgJSBESVJUWV9NRU1PUllfQkxPQ0tfU0laRTsNCj4gLSAgICBiYXNlID0gcGFn ZSAtIG9mZnNldDsNCj4gLSAgICB3aGlsZSAocGFnZSA8IGVuZCkgew0KPiAtICAgICAgICB1 bnNpZ25lZCBsb25nIG5leHQgPSBNSU4oZW5kLCBiYXNlICsgRElSVFlfTUVNT1JZX0JMT0NL X1NJWkUpOw0KPiAtICAgICAgICB1bnNpZ25lZCBsb25nIG51bSA9IG5leHQgLSBiYXNlOw0K PiAtICAgICAgICB1bnNpZ25lZCBsb25nIGZvdW5kID0gZmluZF9uZXh0X3plcm9fYml0KGJs b2Nrcy0+YmxvY2tzW2lkeF0sIG51bSwgb2Zmc2V0KTsNCj4gLSAgICAgICAgaWYgKGZvdW5k IDwgbnVtKSB7DQo+IC0gICAgICAgICAgICBkaXJ0eSA9IGZhbHNlOw0KPiAtICAgICAgICAg ICAgYnJlYWs7DQo+IC0gICAgICAgIH0NCj4gLQ0KPiAtICAgICAgICBwYWdlID0gbmV4dDsN Cj4gLSAgICAgICAgaWR4Kys7DQo+IC0gICAgICAgIG9mZnNldCA9IDA7DQo+IC0gICAgICAg IGJhc2UgKz0gRElSVFlfTUVNT1JZX0JMT0NLX1NJWkU7DQo+IC0gICAgfQ0KPiAtDQo+IC0g ICAgcmV0dXJuIGRpcnR5Ow0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgaW5saW5lIGJvb2wgY3B1 X3BoeXNpY2FsX21lbW9yeV9nZXRfZGlydHlfZmxhZyhyYW1fYWRkcl90IGFkZHIsDQo+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBjbGllbnQpDQo+IC17DQo+IC0gICAgcmV0dXJuIGNwdV9waHlzaWNhbF9tZW1v cnlfZ2V0X2RpcnR5KGFkZHIsIDEsIGNsaWVudCk7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBp bmxpbmUgYm9vbCBjcHVfcGh5c2ljYWxfbWVtb3J5X2lzX2NsZWFuKHJhbV9hZGRyX3QgYWRk cikNCj4gLXsNCj4gLSAgICBib29sIHZnYSA9IGNwdV9waHlzaWNhbF9tZW1vcnlfZ2V0X2Rp cnR5X2ZsYWcoYWRkciwgRElSVFlfTUVNT1JZX1ZHQSk7DQo+IC0gICAgYm9vbCBjb2RlID0g Y3B1X3BoeXNpY2FsX21lbW9yeV9nZXRfZGlydHlfZmxhZyhhZGRyLCBESVJUWV9NRU1PUllf Q09ERSk7DQo+IC0gICAgYm9vbCBtaWdyYXRpb24gPQ0KPiAtICAgICAgICBjcHVfcGh5c2lj YWxfbWVtb3J5X2dldF9kaXJ0eV9mbGFnKGFkZHIsIERJUlRZX01FTU9SWV9NSUdSQVRJT04p Ow0KPiAtICAgIHJldHVybiAhKHZnYSAmJiBjb2RlICYmIG1pZ3JhdGlvbik7DQo+IC19DQo+ IC0NCj4gLXN0YXRpYyBpbmxpbmUgdWludDhfdCBjcHVfcGh5c2ljYWxfbWVtb3J5X3Jhbmdl X2luY2x1ZGVzX2NsZWFuKHJhbV9hZGRyX3Qgc3RhcnQsDQo+IC0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW1fYWRk cl90IGxlbmd0aCwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgbWFzaykNCj4gLXsNCj4gLSAgICB1 aW50OF90IHJldCA9IDA7DQo+IC0NCj4gLSAgICBpZiAobWFzayAmICgxIDw8IERJUlRZX01F TU9SWV9WR0EpICYmDQo+IC0gICAgICAgICFjcHVfcGh5c2ljYWxfbWVtb3J5X2FsbF9kaXJ0 eShzdGFydCwgbGVuZ3RoLCBESVJUWV9NRU1PUllfVkdBKSkgew0KPiAtICAgICAgICByZXQg fD0gKDEgPDwgRElSVFlfTUVNT1JZX1ZHQSk7DQo+IC0gICAgfQ0KPiAtICAgIGlmIChtYXNr ICYgKDEgPDwgRElSVFlfTUVNT1JZX0NPREUpICYmDQo+IC0gICAgICAgICFjcHVfcGh5c2lj YWxfbWVtb3J5X2FsbF9kaXJ0eShzdGFydCwgbGVuZ3RoLCBESVJUWV9NRU1PUllfQ09ERSkp IHsNCj4gLSAgICAgICAgcmV0IHw9ICgxIDw8IERJUlRZX01FTU9SWV9DT0RFKTsNCj4gLSAg ICB9DQo+IC0gICAgaWYgKG1hc2sgJiAoMSA8PCBESVJUWV9NRU1PUllfTUlHUkFUSU9OKSAm Jg0KPiAtICAgICAgICAhY3B1X3BoeXNpY2FsX21lbW9yeV9hbGxfZGlydHkoc3RhcnQsIGxl bmd0aCwgRElSVFlfTUVNT1JZX01JR1JBVElPTikpIHsNCj4gLSAgICAgICAgcmV0IHw9ICgx IDw8IERJUlRZX01FTU9SWV9NSUdSQVRJT04pOw0KPiAtICAgIH0NCj4gLSAgICByZXR1cm4g cmV0Ow0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgaW5saW5lIHZvaWQgY3B1X3BoeXNpY2FsX21l bW9yeV9zZXRfZGlydHlfZmxhZyhyYW1fYWRkcl90IGFkZHIsDQo+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjbGll bnQpDQo+IC17DQo+IC0gICAgdW5zaWduZWQgbG9uZyBwYWdlLCBpZHgsIG9mZnNldDsNCj4g LSAgICBEaXJ0eU1lbW9yeUJsb2NrcyAqYmxvY2tzOw0KPiAtDQo+IC0gICAgYXNzZXJ0KGNs aWVudCA8IERJUlRZX01FTU9SWV9OVU0pOw0KPiAtDQo+IC0gICAgcGFnZSA9IGFkZHIgPj4g VEFSR0VUX1BBR0VfQklUUzsNCj4gLSAgICBpZHggPSBwYWdlIC8gRElSVFlfTUVNT1JZX0JM T0NLX1NJWkU7DQo+IC0gICAgb2Zmc2V0ID0gcGFnZSAlIERJUlRZX01FTU9SWV9CTE9DS19T SVpFOw0KPiAtDQo+IC0gICAgUkNVX1JFQURfTE9DS19HVUFSRCgpOw0KPiAtDQo+IC0gICAg YmxvY2tzID0gcWF0b21pY19yY3VfcmVhZCgmcmFtX2xpc3QuZGlydHlfbWVtb3J5W2NsaWVu dF0pOw0KPiAtDQo+IC0gICAgc2V0X2JpdF9hdG9taWMob2Zmc2V0LCBibG9ja3MtPmJsb2Nr c1tpZHhdKTsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIGlubGluZSB2b2lkIGNwdV9waHlzaWNh bF9tZW1vcnlfc2V0X2RpcnR5X3JhbmdlKHJhbV9hZGRyX3Qgc3RhcnQsDQo+IC0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFtX2Fk ZHJfdCBsZW5ndGgsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdWludDhfdCBtYXNrKQ0KPiAtew0KPiAtICAgIERpcnR5TWVt b3J5QmxvY2tzICpibG9ja3NbRElSVFlfTUVNT1JZX05VTV07DQo+IC0gICAgdW5zaWduZWQg bG9uZyBlbmQsIHBhZ2U7DQo+IC0gICAgdW5zaWduZWQgbG9uZyBpZHgsIG9mZnNldCwgYmFz ZTsNCj4gLSAgICBpbnQgaTsNCj4gLQ0KPiAtICAgIGlmICghbWFzayAmJiAheGVuX2VuYWJs ZWQoKSkgew0KPiAtICAgICAgICByZXR1cm47DQo+IC0gICAgfQ0KPiAtDQo+IC0gICAgZW5k ID0gVEFSR0VUX1BBR0VfQUxJR04oc3RhcnQgKyBsZW5ndGgpID4+IFRBUkdFVF9QQUdFX0JJ VFM7DQo+IC0gICAgcGFnZSA9IHN0YXJ0ID4+IFRBUkdFVF9QQUdFX0JJVFM7DQo+IC0NCj4g LSAgICBXSVRIX1JDVV9SRUFEX0xPQ0tfR1VBUkQoKSB7DQo+IC0gICAgICAgIGZvciAoaSA9 IDA7IGkgPCBESVJUWV9NRU1PUllfTlVNOyBpKyspIHsNCj4gLSAgICAgICAgICAgIGJsb2Nr c1tpXSA9IHFhdG9taWNfcmN1X3JlYWQoJnJhbV9saXN0LmRpcnR5X21lbW9yeVtpXSk7DQo+ IC0gICAgICAgIH0NCj4gLQ0KPiAtICAgICAgICBpZHggPSBwYWdlIC8gRElSVFlfTUVNT1JZ X0JMT0NLX1NJWkU7DQo+IC0gICAgICAgIG9mZnNldCA9IHBhZ2UgJSBESVJUWV9NRU1PUllf QkxPQ0tfU0laRTsNCj4gLSAgICAgICAgYmFzZSA9IHBhZ2UgLSBvZmZzZXQ7DQo+IC0gICAg ICAgIHdoaWxlIChwYWdlIDwgZW5kKSB7DQo+IC0gICAgICAgICAgICB1bnNpZ25lZCBsb25n IG5leHQgPSBNSU4oZW5kLCBiYXNlICsgRElSVFlfTUVNT1JZX0JMT0NLX1NJWkUpOw0KPiAt DQo+IC0gICAgICAgICAgICBpZiAobGlrZWx5KG1hc2sgJiAoMSA8PCBESVJUWV9NRU1PUllf TUlHUkFUSU9OKSkpIHsNCj4gLSAgICAgICAgICAgICAgICBiaXRtYXBfc2V0X2F0b21pYyhi bG9ja3NbRElSVFlfTUVNT1JZX01JR1JBVElPTl0tPmJsb2Nrc1tpZHhdLA0KPiAtICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCwgbmV4dCAtIHBhZ2UpOw0KPiAt ICAgICAgICAgICAgfQ0KPiAtICAgICAgICAgICAgaWYgKHVubGlrZWx5KG1hc2sgJiAoMSA8 PCBESVJUWV9NRU1PUllfVkdBKSkpIHsNCj4gLSAgICAgICAgICAgICAgICBiaXRtYXBfc2V0 X2F0b21pYyhibG9ja3NbRElSVFlfTUVNT1JZX1ZHQV0tPmJsb2Nrc1tpZHhdLA0KPiAtICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCwgbmV4dCAtIHBhZ2UpOw0K PiAtICAgICAgICAgICAgfQ0KPiAtICAgICAgICAgICAgaWYgKHVubGlrZWx5KG1hc2sgJiAo MSA8PCBESVJUWV9NRU1PUllfQ09ERSkpKSB7DQo+IC0gICAgICAgICAgICAgICAgYml0bWFw X3NldF9hdG9taWMoYmxvY2tzW0RJUlRZX01FTU9SWV9DT0RFXS0+YmxvY2tzW2lkeF0sDQo+ IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LCBuZXh0IC0gcGFn ZSk7DQo+IC0gICAgICAgICAgICB9DQo+IC0NCj4gLSAgICAgICAgICAgIHBhZ2UgPSBuZXh0 Ow0KPiAtICAgICAgICAgICAgaWR4Kys7DQo+IC0gICAgICAgICAgICBvZmZzZXQgPSAwOw0K PiAtICAgICAgICAgICAgYmFzZSArPSBESVJUWV9NRU1PUllfQkxPQ0tfU0laRTsNCj4gLSAg ICAgICAgfQ0KPiAtICAgIH0NCj4gLQ0KPiAtICAgIHhlbl9odm1fbW9kaWZpZWRfbWVtb3J5 KHN0YXJ0LCBsZW5ndGgpOw0KPiAtfQ0KPiAtDQo+IC0jaWYgIWRlZmluZWQoX1dJTjMyKQ0K PiAtDQo+IC0vKg0KPiAtICogQ29udHJhcnkgdG8gY3B1X3BoeXNpY2FsX21lbW9yeV9zeW5j X2RpcnR5X2JpdG1hcCgpIHRoaXMgZnVuY3Rpb24gcmV0dXJucw0KPiAtICogdGhlIG51bWJl ciBvZiBkaXJ0eSBwYWdlcyBpbiBAYml0bWFwIHBhc3NlZCBhcyBhcmd1bWVudC4gT24gdGhl IG90aGVyIGhhbmQsDQo+IC0gKiBjcHVfcGh5c2ljYWxfbWVtb3J5X3N5bmNfZGlydHlfYml0 bWFwKCkgcmV0dXJucyBuZXdseSBkaXJ0aWVkIHBhZ2VzIHRoYXQNCj4gLSAqIHdlcmVuJ3Qg c2V0IGluIHRoZSBnbG9iYWwgbWlncmF0aW9uIGJpdG1hcC4NCj4gLSAqLw0KPiAtc3RhdGlj IGlubGluZQ0KPiAtdWludDY0X3QgY3B1X3BoeXNpY2FsX21lbW9yeV9zZXRfZGlydHlfbGVi aXRtYXAodW5zaWduZWQgbG9uZyAqYml0bWFwLA0KPiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFtX2FkZHJfdCBzdGFydCwNCj4gLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbV9hZGRyX3Qg cGFnZXMpDQo+IC17DQo+IC0gICAgdW5zaWduZWQgbG9uZyBpLCBqOw0KPiAtICAgIHVuc2ln bmVkIGxvbmcgcGFnZV9udW1iZXIsIGMsIG5iaXRzOw0KPiAtICAgIGh3YWRkciBhZGRyOw0K PiAtICAgIHJhbV9hZGRyX3QgcmFtX2FkZHI7DQo+IC0gICAgdWludDY0X3QgbnVtX2RpcnR5 ID0gMDsNCj4gLSAgICB1bnNpZ25lZCBsb25nIGxlbiA9IChwYWdlcyArIEhPU1RfTE9OR19C SVRTIC0gMSkgLyBIT1NUX0xPTkdfQklUUzsNCj4gLSAgICB1bnNpZ25lZCBsb25nIGhwcmF0 aW8gPSBxZW11X3JlYWxfaG9zdF9wYWdlX3NpemUoKSAvIFRBUkdFVF9QQUdFX1NJWkU7DQo+ IC0gICAgdW5zaWduZWQgbG9uZyBwYWdlID0gQklUX1dPUkQoc3RhcnQgPj4gVEFSR0VUX1BB R0VfQklUUyk7DQo+IC0NCj4gLSAgICAvKiBzdGFydCBhZGRyZXNzIGlzIGFsaWduZWQgYXQg dGhlIHN0YXJ0IG9mIGEgd29yZD8gKi8NCj4gLSAgICBpZiAoKCgocGFnZSAqIEJJVFNfUEVS X0xPTkcpIDw8IFRBUkdFVF9QQUdFX0JJVFMpID09IHN0YXJ0KSAmJg0KPiAtICAgICAgICAo aHByYXRpbyA9PSAxKSkgew0KPiAtICAgICAgICB1bnNpZ25lZCBsb25nICoqYmxvY2tzW0RJ UlRZX01FTU9SWV9OVU1dOw0KPiAtICAgICAgICB1bnNpZ25lZCBsb25nIGlkeDsNCj4gLSAg ICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQ7DQo+IC0gICAgICAgIGxvbmcgazsNCj4gLSAg ICAgICAgbG9uZyBuciA9IEJJVFNfVE9fTE9OR1MocGFnZXMpOw0KPiAtDQo+IC0gICAgICAg IGlkeCA9IChzdGFydCA+PiBUQVJHRVRfUEFHRV9CSVRTKSAvIERJUlRZX01FTU9SWV9CTE9D S19TSVpFOw0KPiAtICAgICAgICBvZmZzZXQgPSBCSVRfV09SRCgoc3RhcnQgPj4gVEFSR0VU X1BBR0VfQklUUykgJQ0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICBESVJUWV9NRU1P UllfQkxPQ0tfU0laRSk7DQo+IC0NCj4gLSAgICAgICAgV0lUSF9SQ1VfUkVBRF9MT0NLX0dV QVJEKCkgew0KPiAtICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IERJUlRZX01FTU9SWV9O VU07IGkrKykgew0KPiAtICAgICAgICAgICAgICAgIGJsb2Nrc1tpXSA9DQo+IC0gICAgICAg ICAgICAgICAgICAgIHFhdG9taWNfcmN1X3JlYWQoJnJhbV9saXN0LmRpcnR5X21lbW9yeVtp XSktPmJsb2NrczsNCj4gLSAgICAgICAgICAgIH0NCj4gLQ0KPiAtICAgICAgICAgICAgZm9y IChrID0gMDsgayA8IG5yOyBrKyspIHsNCj4gLSAgICAgICAgICAgICAgICBpZiAoYml0bWFw W2tdKSB7DQo+IC0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdGVtcCA9IGxl dWxfdG9fY3B1KGJpdG1hcFtrXSk7DQo+IC0NCj4gLSAgICAgICAgICAgICAgICAgICAgbmJp dHMgPSBjdHBvcGwodGVtcCk7DQo+IC0gICAgICAgICAgICAgICAgICAgIHFhdG9taWNfb3Io JmJsb2Nrc1tESVJUWV9NRU1PUllfVkdBXVtpZHhdW29mZnNldF0sIHRlbXApOw0KPiAtDQo+ IC0gICAgICAgICAgICAgICAgICAgIGlmIChnbG9iYWxfZGlydHlfdHJhY2tpbmcpIHsNCj4g LSAgICAgICAgICAgICAgICAgICAgICAgIHFhdG9taWNfb3IoDQo+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZibG9ja3NbRElSVFlfTUVNT1JZX01JR1JBVElPTl1baWR4 XVtvZmZzZXRdLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wKTsN Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmxpa2VseSgNCj4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBnbG9iYWxfZGlydHlfdHJhY2tpbmcgJiBHTE9CQUxfRElS VFlfRElSVFlfUkFURSkpIHsNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3Rh bF9kaXJ0eV9wYWdlcyArPSBuYml0czsNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgIH0N Cj4gLSAgICAgICAgICAgICAgICAgICAgfQ0KPiAtDQo+IC0gICAgICAgICAgICAgICAgICAg IG51bV9kaXJ0eSArPSBuYml0czsNCj4gLQ0KPiAtICAgICAgICAgICAgICAgICAgICBpZiAo dGNnX2VuYWJsZWQoKSkgew0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgcWF0b21pY19v cigmYmxvY2tzW0RJUlRZX01FTU9SWV9DT0RFXVtpZHhdW29mZnNldF0sDQo+IC0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXApOw0KPiAtICAgICAgICAgICAgICAg ICAgICB9DQo+IC0gICAgICAgICAgICAgICAgfQ0KPiAtDQo+IC0gICAgICAgICAgICAgICAg aWYgKCsrb2Zmc2V0ID49IEJJVFNfVE9fTE9OR1MoRElSVFlfTUVNT1JZX0JMT0NLX1NJWkUp KSB7DQo+IC0gICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IDA7DQo+IC0gICAgICAgICAg ICAgICAgICAgIGlkeCsrOw0KPiAtICAgICAgICAgICAgICAgIH0NCj4gLSAgICAgICAgICAg IH0NCj4gLSAgICAgICAgfQ0KPiAtDQo+IC0gICAgICAgIHhlbl9odm1fbW9kaWZpZWRfbWVt b3J5KHN0YXJ0LCBwYWdlcyA8PCBUQVJHRVRfUEFHRV9CSVRTKTsNCj4gLSAgICB9IGVsc2Ug ew0KPiAtICAgICAgICB1aW50OF90IGNsaWVudHMgPSB0Y2dfZW5hYmxlZCgpID8gRElSVFlf Q0xJRU5UU19BTEwgOiBESVJUWV9DTElFTlRTX05PQ09ERTsNCj4gLQ0KPiAtICAgICAgICBp ZiAoIWdsb2JhbF9kaXJ0eV90cmFja2luZykgew0KPiAtICAgICAgICAgICAgY2xpZW50cyAm PSB+KDEgPDwgRElSVFlfTUVNT1JZX01JR1JBVElPTik7DQo+IC0gICAgICAgIH0NCj4gLQ0K PiAtICAgICAgICAvKg0KPiAtICAgICAgICAgKiBiaXRtYXAtdHJhdmVsaW5nIGlzIGZhc3Rl ciB0aGFuIG1lbW9yeS10cmF2ZWxpbmcgKGZvciBhZGRyLi4uKQ0KPiAtICAgICAgICAgKiBl c3BlY2lhbGx5IHdoZW4gbW9zdCBvZiB0aGUgbWVtb3J5IGlzIG5vdCBkaXJ0eS4NCj4gLSAg ICAgICAgICovDQo+IC0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgew0KPiAt ICAgICAgICAgICAgaWYgKGJpdG1hcFtpXSAhPSAwKSB7DQo+IC0gICAgICAgICAgICAgICAg YyA9IGxldWxfdG9fY3B1KGJpdG1hcFtpXSk7DQo+IC0gICAgICAgICAgICAgICAgbmJpdHMg PSBjdHBvcGwoYyk7DQo+IC0gICAgICAgICAgICAgICAgaWYgKHVubGlrZWx5KGdsb2JhbF9k aXJ0eV90cmFja2luZyAmIEdMT0JBTF9ESVJUWV9ESVJUWV9SQVRFKSkgew0KPiAtICAgICAg ICAgICAgICAgICAgICB0b3RhbF9kaXJ0eV9wYWdlcyArPSBuYml0czsNCj4gLSAgICAgICAg ICAgICAgICB9DQo+IC0gICAgICAgICAgICAgICAgbnVtX2RpcnR5ICs9IG5iaXRzOw0KPiAt ICAgICAgICAgICAgICAgIGRvIHsNCj4gLSAgICAgICAgICAgICAgICAgICAgaiA9IGN0emwo Yyk7DQo+IC0gICAgICAgICAgICAgICAgICAgIGMgJj0gfigxdWwgPDwgaik7DQo+IC0gICAg ICAgICAgICAgICAgICAgIHBhZ2VfbnVtYmVyID0gKGkgKiBIT1NUX0xPTkdfQklUUyArIGop ICogaHByYXRpbzsNCj4gLSAgICAgICAgICAgICAgICAgICAgYWRkciA9IHBhZ2VfbnVtYmVy ICogVEFSR0VUX1BBR0VfU0laRTsNCj4gLSAgICAgICAgICAgICAgICAgICAgcmFtX2FkZHIg PSBzdGFydCArIGFkZHI7DQo+IC0gICAgICAgICAgICAgICAgICAgIGNwdV9waHlzaWNhbF9t ZW1vcnlfc2V0X2RpcnR5X3JhbmdlKHJhbV9hZGRyLA0KPiAtICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVEFSR0VUX1BBR0VfU0laRSAqIGhwcmF0aW8sIGNsaWVu dHMpOw0KPiAtICAgICAgICAgICAgICAgIH0gd2hpbGUgKGMgIT0gMCk7DQo+IC0gICAgICAg ICAgICB9DQo+IC0gICAgICAgIH0NCj4gLSAgICB9DQo+IC0NCj4gLSAgICByZXR1cm4gbnVt X2RpcnR5Ow0KPiAtfQ0KPiAtI2VuZGlmIC8qIG5vdCBfV0lOMzIgKi8NCj4gLQ0KPiAtc3Rh dGljIGlubGluZSB2b2lkIGNwdV9waHlzaWNhbF9tZW1vcnlfZGlydHlfYml0c19jbGVhcmVk KHJhbV9hZGRyX3Qgc3RhcnQsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFtX2FkZHJfdCBsZW5ndGgpDQo+IC17DQo+ IC0gICAgaWYgKHRjZ19lbmFibGVkKCkpIHsNCj4gLSAgICAgICAgdGxiX3Jlc2V0X2RpcnR5 X3JhbmdlX2FsbChzdGFydCwgbGVuZ3RoKTsNCj4gLSAgICB9DQo+IC0NCj4gLX0NCj4gLWJv b2wgY3B1X3BoeXNpY2FsX21lbW9yeV90ZXN0X2FuZF9jbGVhcl9kaXJ0eShyYW1fYWRkcl90 IHN0YXJ0LA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJhbV9hZGRyX3QgbGVuZ3RoLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNsaWVudCk7DQo+IC0NCj4gLURpcnR5Qml0 bWFwU25hcHNob3QgKmNwdV9waHlzaWNhbF9tZW1vcnlfc25hcHNob3RfYW5kX2NsZWFyX2Rp cnR5DQo+IC0gICAgKE1lbW9yeVJlZ2lvbiAqbXIsIGh3YWRkciBvZmZzZXQsIGh3YWRkciBs ZW5ndGgsIHVuc2lnbmVkIGNsaWVudCk7DQo+IC0NCj4gLWJvb2wgY3B1X3BoeXNpY2FsX21l bW9yeV9zbmFwc2hvdF9nZXRfZGlydHkoRGlydHlCaXRtYXBTbmFwc2hvdCAqc25hcCwNCj4g LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFtX2FkZHJf dCBzdGFydCwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmFtX2FkZHJfdCBsZW5ndGgpOw0KPiAtDQo+IC1zdGF0aWMgaW5saW5lIHZvaWQgY3B1 X3BoeXNpY2FsX21lbW9yeV9jbGVhcl9kaXJ0eV9yYW5nZShyYW1fYWRkcl90IHN0YXJ0LA0K PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcmFtX2FkZHJfdCBsZW5ndGgpDQo+IC17DQo+IC0gICAgY3B1X3BoeXNpY2FsX21l bW9yeV90ZXN0X2FuZF9jbGVhcl9kaXJ0eShzdGFydCwgbGVuZ3RoLCBESVJUWV9NRU1PUllf TUlHUkFUSU9OKTsNCj4gLSAgICBjcHVfcGh5c2ljYWxfbWVtb3J5X3Rlc3RfYW5kX2NsZWFy X2RpcnR5KHN0YXJ0LCBsZW5ndGgsIERJUlRZX01FTU9SWV9WR0EpOw0KPiAtICAgIGNwdV9w aHlzaWNhbF9tZW1vcnlfdGVzdF9hbmRfY2xlYXJfZGlydHkoc3RhcnQsIGxlbmd0aCwgRElS VFlfTUVNT1JZX0NPREUpOw0KPiAtfQ0KPiAtDQo+IC0NCj4gLS8qIENhbGxlZCB3aXRoIFJD VSBjcml0aWNhbCBzZWN0aW9uICovDQo+IC1zdGF0aWMgaW5saW5lDQo+IC11aW50NjRfdCBj cHVfcGh5c2ljYWxfbWVtb3J5X3N5bmNfZGlydHlfYml0bWFwKFJBTUJsb2NrICpyYiwNCj4g LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFtX2Fk ZHJfdCBzdGFydCwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmFtX2FkZHJfdCBsZW5ndGgpDQo+IC17DQo+IC0gICAgcmFtX2FkZHJfdCBh ZGRyOw0KPiAtICAgIHVuc2lnbmVkIGxvbmcgd29yZCA9IEJJVF9XT1JEKChzdGFydCArIHJi LT5vZmZzZXQpID4+IFRBUkdFVF9QQUdFX0JJVFMpOw0KPiAtICAgIHVpbnQ2NF90IG51bV9k aXJ0eSA9IDA7DQo+IC0gICAgdW5zaWduZWQgbG9uZyAqZGVzdCA9IHJiLT5ibWFwOw0KPiAt DQo+IC0gICAgLyogc3RhcnQgYWRkcmVzcyBhbmQgbGVuZ3RoIGlzIGFsaWduZWQgYXQgdGhl IHN0YXJ0IG9mIGEgd29yZD8gKi8NCj4gLSAgICBpZiAoKCh3b3JkICogQklUU19QRVJfTE9O RykgPDwgVEFSR0VUX1BBR0VfQklUUykgPT0NCj4gLSAgICAgICAgIChzdGFydCArIHJiLT5v ZmZzZXQpICYmDQo+IC0gICAgICAgICEobGVuZ3RoICYgKChCSVRTX1BFUl9MT05HIDw8IFRB UkdFVF9QQUdFX0JJVFMpIC0gMSkpKSB7DQo+IC0gICAgICAgIGludCBrOw0KPiAtICAgICAg ICBpbnQgbnIgPSBCSVRTX1RPX0xPTkdTKGxlbmd0aCA+PiBUQVJHRVRfUEFHRV9CSVRTKTsN Cj4gLSAgICAgICAgdW5zaWduZWQgbG9uZyAqIGNvbnN0ICpzcmM7DQo+IC0gICAgICAgIHVu c2lnbmVkIGxvbmcgaWR4ID0gKHdvcmQgKiBCSVRTX1BFUl9MT05HKSAvIERJUlRZX01FTU9S WV9CTE9DS19TSVpFOw0KPiAtICAgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCA9IEJJVF9X T1JEKCh3b3JkICogQklUU19QRVJfTE9ORykgJQ0KPiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIERJUlRZX01FTU9SWV9CTE9DS19TSVpFKTsNCj4gLSAgICAg ICAgdW5zaWduZWQgbG9uZyBwYWdlID0gQklUX1dPUkQoc3RhcnQgPj4gVEFSR0VUX1BBR0Vf QklUUyk7DQo+IC0NCj4gLSAgICAgICAgc3JjID0gcWF0b21pY19yY3VfcmVhZCgNCj4gLSAg ICAgICAgICAgICAgICAmcmFtX2xpc3QuZGlydHlfbWVtb3J5W0RJUlRZX01FTU9SWV9NSUdS QVRJT05dKS0+YmxvY2tzOw0KPiAtDQo+IC0gICAgICAgIGZvciAoayA9IHBhZ2U7IGsgPCBw YWdlICsgbnI7IGsrKykgew0KPiAtICAgICAgICAgICAgaWYgKHNyY1tpZHhdW29mZnNldF0p IHsNCj4gLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGJpdHMgPSBxYXRvbWljX3hj aGcoJnNyY1tpZHhdW29mZnNldF0sIDApOw0KPiAtICAgICAgICAgICAgICAgIHVuc2lnbmVk IGxvbmcgbmV3X2RpcnR5Ow0KPiAtICAgICAgICAgICAgICAgIG5ld19kaXJ0eSA9IH5kZXN0 W2tdOw0KPiAtICAgICAgICAgICAgICAgIGRlc3Rba10gfD0gYml0czsNCj4gLSAgICAgICAg ICAgICAgICBuZXdfZGlydHkgJj0gYml0czsNCj4gLSAgICAgICAgICAgICAgICBudW1fZGly dHkgKz0gY3Rwb3BsKG5ld19kaXJ0eSk7DQo+IC0gICAgICAgICAgICB9DQo+IC0NCj4gLSAg ICAgICAgICAgIGlmICgrK29mZnNldCA+PSBCSVRTX1RPX0xPTkdTKERJUlRZX01FTU9SWV9C TE9DS19TSVpFKSkgew0KPiAtICAgICAgICAgICAgICAgIG9mZnNldCA9IDA7DQo+IC0gICAg ICAgICAgICAgICAgaWR4Kys7DQo+IC0gICAgICAgICAgICB9DQo+IC0gICAgICAgIH0NCj4g LSAgICAgICAgaWYgKG51bV9kaXJ0eSkgew0KPiAtICAgICAgICAgICAgY3B1X3BoeXNpY2Fs X21lbW9yeV9kaXJ0eV9iaXRzX2NsZWFyZWQoc3RhcnQsIGxlbmd0aCk7DQo+IC0gICAgICAg IH0NCj4gLQ0KPiAtICAgICAgICBpZiAocmItPmNsZWFyX2JtYXApIHsNCj4gLSAgICAgICAg ICAgIC8qDQo+IC0gICAgICAgICAgICAgKiBQb3N0cG9uZSB0aGUgZGlydHkgYml0bWFwIGNs ZWFyIHRvIHRoZSBwb2ludCBiZWZvcmUgd2UNCj4gLSAgICAgICAgICAgICAqIHJlYWxseSBz ZW5kIHRoZSBwYWdlcywgYWxzbyB3ZSB3aWxsIHNwbGl0IHRoZSBjbGVhcg0KPiAtICAgICAg ICAgICAgICogZGlydHkgcHJvY2VkdXJlIGludG8gc21hbGxlciBjaHVua3MuDQo+IC0gICAg ICAgICAgICAgKi8NCj4gLSAgICAgICAgICAgIGNsZWFyX2JtYXBfc2V0KHJiLCBzdGFydCA+ PiBUQVJHRVRfUEFHRV9CSVRTLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVu Z3RoID4+IFRBUkdFVF9QQUdFX0JJVFMpOw0KPiAtICAgICAgICB9IGVsc2Ugew0KPiAtICAg ICAgICAgICAgLyogU2xvdyBwYXRoIC0gc3RpbGwgZG8gdGhhdCBpbiBhIGh1Z2UgY2h1bmsg Ki8NCj4gLSAgICAgICAgICAgIG1lbW9yeV9yZWdpb25fY2xlYXJfZGlydHlfYml0bWFwKHJi LT5tciwgc3RhcnQsIGxlbmd0aCk7DQo+IC0gICAgICAgIH0NCj4gLSAgICB9IGVsc2Ugew0K PiAtICAgICAgICByYW1fYWRkcl90IG9mZnNldCA9IHJiLT5vZmZzZXQ7DQo+IC0NCj4gLSAg ICAgICAgZm9yIChhZGRyID0gMDsgYWRkciA8IGxlbmd0aDsgYWRkciArPSBUQVJHRVRfUEFH RV9TSVpFKSB7DQo+IC0gICAgICAgICAgICBpZiAoY3B1X3BoeXNpY2FsX21lbW9yeV90ZXN0 X2FuZF9jbGVhcl9kaXJ0eSgNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ICsg YWRkciArIG9mZnNldCwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgIFRBUkdFVF9QQUdF X1NJWkUsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICBESVJUWV9NRU1PUllfTUlHUkFU SU9OKSkgew0KPiAtICAgICAgICAgICAgICAgIGxvbmcgayA9IChzdGFydCArIGFkZHIpID4+ IFRBUkdFVF9QQUdFX0JJVFM7DQo+IC0gICAgICAgICAgICAgICAgaWYgKCF0ZXN0X2FuZF9z ZXRfYml0KGssIGRlc3QpKSB7DQo+IC0gICAgICAgICAgICAgICAgICAgIG51bV9kaXJ0eSsr Ow0KPiAtICAgICAgICAgICAgICAgIH0NCj4gLSAgICAgICAgICAgIH0NCj4gLSAgICAgICAg fQ0KPiAtICAgIH0NCj4gLQ0KPiAtICAgIHJldHVybiBudW1fZGlydHk7DQo+IC19DQo+IC0j ZW5kaWYNCj4gICAjZW5kaWYNCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvc3lzZW11L3BoeXNt ZW0tdGFyZ2V0LmggYi9pbmNsdWRlL3N5c2VtdS9waHlzbWVtLXRhcmdldC5oDQo+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLmIzMGM0MmRhNjANCj4gLS0t IC9kZXYvbnVsbA0KPiArKysgYi9pbmNsdWRlL3N5c2VtdS9waHlzbWVtLXRhcmdldC5oDQo+ IEBAIC0wLDAgKzEsNTA2IEBADQo+ICsvKg0KPiArICogRGVjbGFyYXRpb25zIGZvciBjcHUg cGh5c2ljYWwgbWVtb3J5IGZ1bmN0aW9ucw0KPiArICoNCj4gKyAqIENvcHlyaWdodCAyMDEx IFJlZCBIYXQsIEluYy4gYW5kL29yIGl0cyBhZmZpbGlhdGVzDQo+ICsgKg0KPiArICogQXV0 aG9yczoNCj4gKyAqICBBdmkgS2l2aXR5IDxhdmlAcmVkaGF0LmNvbT4NCj4gKyAqDQo+ICsg KiBUaGlzIHdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BM LCB2ZXJzaW9uIDIgb3INCj4gKyAqIGxhdGVyLiAgU2VlIHRoZSBDT1BZSU5HIGZpbGUgaW4g dGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuDQo+ICsgKg0KPiArICovDQo+ICsNCj4gKy8qDQo+ ICsgKiBUaGlzIGhlYWRlciBpcyBmb3IgdXNlIGJ5IGV4ZWMuYyBhbmQgbWVtb3J5LmMgT05M WS4gIERvIG5vdCBpbmNsdWRlIGl0Lg0KPiArICogVGhlIGZ1bmN0aW9ucyBkZWNsYXJlZCBo ZXJlIHdpbGwgYmUgcmVtb3ZlZCBzb29uLg0KPiArICovDQo+ICsNCj4gKyNpZm5kZWYgUkFN X0FERFJfVEFSR0VUX0gNCj4gKyNkZWZpbmUgUkFNX0FERFJfVEFSR0VUX0gNCj4gKw0KPiAr I2luY2x1ZGUgImNwdS5oIg0KPiArI2luY2x1ZGUgInN5c2VtdS94ZW4uaCINCj4gKyNpbmNs dWRlICJzeXNlbXUvdGNnLmgiDQo+ICsjaW5jbHVkZSAiZXhlYy9jcHV0bGIuaCINCj4gKyNp bmNsdWRlICJleGVjL3JhbV9hZGRyLmgiDQo+ICsjaW5jbHVkZSAiZXhlYy9yYW1saXN0Lmgi DQo+ICsjaW5jbHVkZSAiZXhlYy9yYW1ibG9jay5oIg0KPiArI2luY2x1ZGUgInFlbXUvcmN1 LmgiDQo+ICsNCj4gK2V4dGVybiB1aW50NjRfdCB0b3RhbF9kaXJ0eV9wYWdlczsNCj4gKw0K PiArLyoqDQo+ICsgKiBjbGVhcl9ibWFwX3NpemU6IGNhbGN1bGF0ZSBjbGVhciBiaXRtYXAg c2l6ZQ0KPiArICoNCj4gKyAqIEBwYWdlczogbnVtYmVyIG9mIGd1ZXN0IHBhZ2VzDQo+ICsg KiBAc2hpZnQ6IGd1ZXN0IHBhZ2UgbnVtYmVyIHNoaWZ0DQo+ICsgKg0KPiArICogUmV0dXJu czogbnVtYmVyIG9mIGJpdHMgZm9yIHRoZSBjbGVhciBiaXRtYXANCj4gKyAqLw0KPiArc3Rh dGljIGlubGluZSBsb25nIGNsZWFyX2JtYXBfc2l6ZSh1aW50NjRfdCBwYWdlcywgdWludDhf dCBzaGlmdCkNCj4gK3sNCj4gKyAgICByZXR1cm4gRElWX1JPVU5EX1VQKHBhZ2VzLCAxVUwg PDwgc2hpZnQpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGNsZWFyX2JtYXBfc2V0OiBz ZXQgY2xlYXIgYml0bWFwIGZvciB0aGUgcGFnZSByYW5nZS4gIE11c3QgYmUgd2l0aA0KPiAr ICogYml0bWFwX211dGV4IGhlbGQuDQo+ICsgKg0KPiArICogQHJiOiB0aGUgcmFtYmxvY2sg dG8gb3BlcmF0ZSBvbg0KPiArICogQHN0YXJ0OiB0aGUgc3RhcnQgcGFnZSBudW1iZXINCj4g KyAqIEBzaXplOiBudW1iZXIgb2YgcGFnZXMgdG8gc2V0IGluIHRoZSBiaXRtYXANCj4gKyAq DQo+ICsgKiBSZXR1cm5zOiBOb25lDQo+ICsgKi8NCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBj bGVhcl9ibWFwX3NldChSQU1CbG9jayAqcmIsIHVpbnQ2NF90IHN0YXJ0LA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IG5wYWdlcykNCj4gK3sNCj4g KyAgICB1aW50OF90IHNoaWZ0ID0gcmItPmNsZWFyX2JtYXBfc2hpZnQ7DQo+ICsNCj4gKyAg ICBiaXRtYXBfc2V0KHJiLT5jbGVhcl9ibWFwLCBzdGFydCA+PiBzaGlmdCwgY2xlYXJfYm1h cF9zaXplKG5wYWdlcywgc2hpZnQpKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBjbGVh cl9ibWFwX3Rlc3RfYW5kX2NsZWFyOiB0ZXN0IGNsZWFyIGJpdG1hcCBmb3IgdGhlIHBhZ2Us IGNsZWFyIGlmIHNldC4NCj4gKyAqIE11c3QgYmUgd2l0aCBiaXRtYXBfbXV0ZXggaGVsZC4N Cj4gKyAqDQo+ICsgKiBAcmI6IHRoZSByYW1ibG9jayB0byBvcGVyYXRlIG9uDQo+ICsgKiBA cGFnZTogdGhlIHBhZ2UgbnVtYmVyIHRvIGNoZWNrDQo+ICsgKg0KPiArICogUmV0dXJuczog dHJ1ZSBpZiB0aGUgYml0IHdhcyBzZXQsIGZhbHNlIG90aGVyd2lzZQ0KPiArICovDQo+ICtz dGF0aWMgaW5saW5lIGJvb2wgY2xlYXJfYm1hcF90ZXN0X2FuZF9jbGVhcihSQU1CbG9jayAq cmIsIHVpbnQ2NF90IHBhZ2UpDQo+ICt7DQo+ICsgICAgdWludDhfdCBzaGlmdCA9IHJiLT5j bGVhcl9ibWFwX3NoaWZ0Ow0KPiArDQo+ICsgICAgcmV0dXJuIGJpdG1hcF90ZXN0X2FuZF9j bGVhcihyYi0+Y2xlYXJfYm1hcCwgcGFnZSA+PiBzaGlmdCwgMSk7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBpbmxpbmUgYm9vbCBvZmZzZXRfaW5fcmFtYmxvY2soUkFNQmxvY2sgKmIsIHJh bV9hZGRyX3Qgb2Zmc2V0KQ0KPiArew0KPiArICAgIHJldHVybiAoYiAmJiBiLT5ob3N0ICYm IG9mZnNldCA8IGItPnVzZWRfbGVuZ3RoKSA/IHRydWUgOiBmYWxzZTsNCj4gK30NCj4gKw0K PiArc3RhdGljIGlubGluZSB2b2lkICpyYW1ibG9ja19wdHIoUkFNQmxvY2sgKmJsb2NrLCBy YW1fYWRkcl90IG9mZnNldCkNCj4gK3sNCj4gKyAgICBhc3NlcnQob2Zmc2V0X2luX3JhbWJs b2NrKGJsb2NrLCBvZmZzZXQpKTsNCj4gKyAgICByZXR1cm4gKGNoYXIgKilibG9jay0+aG9z dCArIG9mZnNldDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25n IGludCByYW1ibG9ja19yZWN2X2JpdG1hcF9vZmZzZXQodm9pZCAqaG9zdF9hZGRyLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUkFNQmxvY2sgKnJiKQ0KPiArew0KPiArICAgIHVpbnQ2NF90IGhvc3RfYWRkcl9v ZmZzZXQgPQ0KPiArICAgICAgICAgICAgKHVpbnQ2NF90KSh1aW50cHRyX3QpKGhvc3RfYWRk ciAtICh2b2lkICopcmItPmhvc3QpOw0KPiArICAgIHJldHVybiBob3N0X2FkZHJfb2Zmc2V0 ID4+IFRBUkdFVF9QQUdFX0JJVFM7DQo+ICt9DQo+ICsNCj4gKy8qIENsZWFyIHdob2xlIGJs b2NrIG9mIG1lbSAqLw0KPiArc3RhdGljIGlubGluZSB2b2lkIHFlbXVfcmFtX2Jsb2NrX3dy aXRlYmFjayhSQU1CbG9jayAqYmxvY2spDQo+ICt7DQo+ICsgICAgcWVtdV9yYW1fbXN5bmMo YmxvY2ssIDAsIGJsb2NrLT51c2VkX2xlbmd0aCk7DQo+ICt9DQo+ICsNCj4gKyNkZWZpbmUg RElSVFlfQ0xJRU5UU19BTEwgICAgICgoMSA8PCBESVJUWV9NRU1PUllfTlVNKSAtIDEpDQo+ ICsjZGVmaW5lIERJUlRZX0NMSUVOVFNfTk9DT0RFICAoRElSVFlfQ0xJRU5UU19BTEwgJiB+ KDEgPDwgRElSVFlfTUVNT1JZX0NPREUpKQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIGJvb2wg Y3B1X3BoeXNpY2FsX21lbW9yeV9nZXRfZGlydHkocmFtX2FkZHJfdCBzdGFydCwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW1fYWRk cl90IGxlbmd0aCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBjbGllbnQpDQo+ICt7DQo+ICsgICAgRGlydHlNZW1vcnlC bG9ja3MgKmJsb2NrczsNCj4gKyAgICB1bnNpZ25lZCBsb25nIGVuZCwgcGFnZTsNCj4gKyAg ICB1bnNpZ25lZCBsb25nIGlkeCwgb2Zmc2V0LCBiYXNlOw0KPiArICAgIGJvb2wgZGlydHkg PSBmYWxzZTsNCj4gKw0KPiArICAgIGFzc2VydChjbGllbnQgPCBESVJUWV9NRU1PUllfTlVN KTsNCj4gKw0KPiArICAgIGVuZCA9IFRBUkdFVF9QQUdFX0FMSUdOKHN0YXJ0ICsgbGVuZ3Ro KSA+PiBUQVJHRVRfUEFHRV9CSVRTOw0KPiArICAgIHBhZ2UgPSBzdGFydCA+PiBUQVJHRVRf UEFHRV9CSVRTOw0KPiArDQo+ICsgICAgV0lUSF9SQ1VfUkVBRF9MT0NLX0dVQVJEKCkgew0K PiArICAgICAgICBibG9ja3MgPSBxYXRvbWljX3JjdV9yZWFkKCZyYW1fbGlzdC5kaXJ0eV9t ZW1vcnlbY2xpZW50XSk7DQo+ICsNCj4gKyAgICAgICAgaWR4ID0gcGFnZSAvIERJUlRZX01F TU9SWV9CTE9DS19TSVpFOw0KPiArICAgICAgICBvZmZzZXQgPSBwYWdlICUgRElSVFlfTUVN T1JZX0JMT0NLX1NJWkU7DQo+ICsgICAgICAgIGJhc2UgPSBwYWdlIC0gb2Zmc2V0Ow0KPiAr ICAgICAgICB3aGlsZSAocGFnZSA8IGVuZCkgew0KPiArICAgICAgICAgICAgdW5zaWduZWQg bG9uZyBuZXh0ID0gTUlOKGVuZCwgYmFzZSArIERJUlRZX01FTU9SWV9CTE9DS19TSVpFKTsN Cj4gKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbnVtID0gbmV4dCAtIGJhc2U7DQo+ICsg ICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZvdW5kID0gZmluZF9uZXh0X2JpdChibG9ja3Mt PmJsb2Nrc1tpZHhdLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnVtLCBvZmZzZXQpOw0KPiArICAgICAgICAgICAgaWYgKGZvdW5kIDwg bnVtKSB7DQo+ICsgICAgICAgICAgICAgICAgZGlydHkgPSB0cnVlOw0KPiArICAgICAgICAg ICAgICAgIGJyZWFrOw0KPiArICAgICAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgICAgICBw YWdlID0gbmV4dDsNCj4gKyAgICAgICAgICAgIGlkeCsrOw0KPiArICAgICAgICAgICAgb2Zm c2V0ID0gMDsNCj4gKyAgICAgICAgICAgIGJhc2UgKz0gRElSVFlfTUVNT1JZX0JMT0NLX1NJ WkU7DQo+ICsgICAgICAgIH0NCj4gKyAgICB9DQo+ICsNCj4gKyAgICByZXR1cm4gZGlydHk7 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBjcHVfcGh5c2ljYWxfbWVtb3J5 X2FsbF9kaXJ0eShyYW1fYWRkcl90IHN0YXJ0LA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbV9hZGRyX3QgbGVuZ3RoLA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGNsaWVudCkNCj4gK3sNCj4gKyAgICBEaXJ0eU1lbW9yeUJsb2NrcyAqYmxvY2tzOw0KPiAr ICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBwYWdlOw0KPiArICAgIHVuc2lnbmVkIGxvbmcgaWR4 LCBvZmZzZXQsIGJhc2U7DQo+ICsgICAgYm9vbCBkaXJ0eSA9IHRydWU7DQo+ICsNCj4gKyAg ICBhc3NlcnQoY2xpZW50IDwgRElSVFlfTUVNT1JZX05VTSk7DQo+ICsNCj4gKyAgICBlbmQg PSBUQVJHRVRfUEFHRV9BTElHTihzdGFydCArIGxlbmd0aCkgPj4gVEFSR0VUX1BBR0VfQklU UzsNCj4gKyAgICBwYWdlID0gc3RhcnQgPj4gVEFSR0VUX1BBR0VfQklUUzsNCj4gKw0KPiAr ICAgIFJDVV9SRUFEX0xPQ0tfR1VBUkQoKTsNCj4gKw0KPiArICAgIGJsb2NrcyA9IHFhdG9t aWNfcmN1X3JlYWQoJnJhbV9saXN0LmRpcnR5X21lbW9yeVtjbGllbnRdKTsNCj4gKw0KPiAr ICAgIGlkeCA9IHBhZ2UgLyBESVJUWV9NRU1PUllfQkxPQ0tfU0laRTsNCj4gKyAgICBvZmZz ZXQgPSBwYWdlICUgRElSVFlfTUVNT1JZX0JMT0NLX1NJWkU7DQo+ICsgICAgYmFzZSA9IHBh Z2UgLSBvZmZzZXQ7DQo+ICsgICAgd2hpbGUgKHBhZ2UgPCBlbmQpIHsNCj4gKyAgICAgICAg dW5zaWduZWQgbG9uZyBuZXh0ID0gTUlOKGVuZCwgYmFzZSArIERJUlRZX01FTU9SWV9CTE9D S19TSVpFKTsNCj4gKyAgICAgICAgdW5zaWduZWQgbG9uZyBudW0gPSBuZXh0IC0gYmFzZTsN Cj4gKyAgICAgICAgdW5zaWduZWQgbG9uZyBmb3VuZCA9IGZpbmRfbmV4dF96ZXJvX2JpdChi bG9ja3MtPmJsb2Nrc1tpZHhdLCBudW0sIG9mZnNldCk7DQo+ICsgICAgICAgIGlmIChmb3Vu ZCA8IG51bSkgew0KPiArICAgICAgICAgICAgZGlydHkgPSBmYWxzZTsNCj4gKyAgICAgICAg ICAgIGJyZWFrOw0KPiArICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgcGFnZSA9IG5leHQ7 DQo+ICsgICAgICAgIGlkeCsrOw0KPiArICAgICAgICBvZmZzZXQgPSAwOw0KPiArICAgICAg ICBiYXNlICs9IERJUlRZX01FTU9SWV9CTE9DS19TSVpFOw0KPiArICAgIH0NCj4gKw0KPiAr ICAgIHJldHVybiBkaXJ0eTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSBib29sIGNw dV9waHlzaWNhbF9tZW1vcnlfZ2V0X2RpcnR5X2ZsYWcocmFtX2FkZHJfdCBhZGRyLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgY2xpZW50KQ0KPiArew0KPiArICAgIHJldHVybiBjcHVfcGh5c2ljYWxfbWVt b3J5X2dldF9kaXJ0eShhZGRyLCAxLCBjbGllbnQpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg aW5saW5lIGJvb2wgY3B1X3BoeXNpY2FsX21lbW9yeV9pc19jbGVhbihyYW1fYWRkcl90IGFk ZHIpDQo+ICt7DQo+ICsgICAgYm9vbCB2Z2EgPSBjcHVfcGh5c2ljYWxfbWVtb3J5X2dldF9k aXJ0eV9mbGFnKGFkZHIsIERJUlRZX01FTU9SWV9WR0EpOw0KPiArICAgIGJvb2wgY29kZSA9 IGNwdV9waHlzaWNhbF9tZW1vcnlfZ2V0X2RpcnR5X2ZsYWcoYWRkciwgRElSVFlfTUVNT1JZ X0NPREUpOw0KPiArICAgIGJvb2wgbWlncmF0aW9uID0NCj4gKyAgICAgICAgY3B1X3BoeXNp Y2FsX21lbW9yeV9nZXRfZGlydHlfZmxhZyhhZGRyLCBESVJUWV9NRU1PUllfTUlHUkFUSU9O KTsNCj4gKyAgICByZXR1cm4gISh2Z2EgJiYgY29kZSAmJiBtaWdyYXRpb24pOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgaW5saW5lIHVpbnQ4X3QgY3B1X3BoeXNpY2FsX21lbW9yeV9yYW5n ZV9pbmNsdWRlc19jbGVhbihyYW1fYWRkcl90IHN0YXJ0LA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFtX2Fk ZHJfdCBsZW5ndGgsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IG1hc2spDQo+ICt7DQo+ICsgICAg dWludDhfdCByZXQgPSAwOw0KPiArDQo+ICsgICAgaWYgKG1hc2sgJiAoMSA8PCBESVJUWV9N RU1PUllfVkdBKSAmJg0KPiArICAgICAgICAhY3B1X3BoeXNpY2FsX21lbW9yeV9hbGxfZGly dHkoc3RhcnQsIGxlbmd0aCwgRElSVFlfTUVNT1JZX1ZHQSkpIHsNCj4gKyAgICAgICAgcmV0 IHw9ICgxIDw8IERJUlRZX01FTU9SWV9WR0EpOw0KPiArICAgIH0NCj4gKyAgICBpZiAobWFz ayAmICgxIDw8IERJUlRZX01FTU9SWV9DT0RFKSAmJg0KPiArICAgICAgICAhY3B1X3BoeXNp Y2FsX21lbW9yeV9hbGxfZGlydHkoc3RhcnQsIGxlbmd0aCwgRElSVFlfTUVNT1JZX0NPREUp KSB7DQo+ICsgICAgICAgIHJldCB8PSAoMSA8PCBESVJUWV9NRU1PUllfQ09ERSk7DQo+ICsg ICAgfQ0KPiArICAgIGlmIChtYXNrICYgKDEgPDwgRElSVFlfTUVNT1JZX01JR1JBVElPTikg JiYNCj4gKyAgICAgICAgIWNwdV9waHlzaWNhbF9tZW1vcnlfYWxsX2RpcnR5KHN0YXJ0LCBs ZW5ndGgsIERJUlRZX01FTU9SWV9NSUdSQVRJT04pKSB7DQo+ICsgICAgICAgIHJldCB8PSAo MSA8PCBESVJUWV9NRU1PUllfTUlHUkFUSU9OKTsNCj4gKyAgICB9DQo+ICsgICAgcmV0dXJu IHJldDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lkIGNwdV9waHlzaWNhbF9t ZW1vcnlfc2V0X2RpcnR5X2ZsYWcocmFtX2FkZHJfdCBhZGRyLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2xp ZW50KQ0KPiArew0KPiArICAgIHVuc2lnbmVkIGxvbmcgcGFnZSwgaWR4LCBvZmZzZXQ7DQo+ ICsgICAgRGlydHlNZW1vcnlCbG9ja3MgKmJsb2NrczsNCj4gKw0KPiArICAgIGFzc2VydChj bGllbnQgPCBESVJUWV9NRU1PUllfTlVNKTsNCj4gKw0KPiArICAgIHBhZ2UgPSBhZGRyID4+ IFRBUkdFVF9QQUdFX0JJVFM7DQo+ICsgICAgaWR4ID0gcGFnZSAvIERJUlRZX01FTU9SWV9C TE9DS19TSVpFOw0KPiArICAgIG9mZnNldCA9IHBhZ2UgJSBESVJUWV9NRU1PUllfQkxPQ0tf U0laRTsNCj4gKw0KPiArICAgIFJDVV9SRUFEX0xPQ0tfR1VBUkQoKTsNCj4gKw0KPiArICAg IGJsb2NrcyA9IHFhdG9taWNfcmN1X3JlYWQoJnJhbV9saXN0LmRpcnR5X21lbW9yeVtjbGll bnRdKTsNCj4gKw0KPiArICAgIHNldF9iaXRfYXRvbWljKG9mZnNldCwgYmxvY2tzLT5ibG9j a3NbaWR4XSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBjcHVfcGh5c2lj YWxfbWVtb3J5X3NldF9kaXJ0eV9yYW5nZShyYW1fYWRkcl90IHN0YXJ0LA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbV9h ZGRyX3QgbGVuZ3RoLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgbWFzaykNCj4gK3sNCj4gKyAgICBEaXJ0eU1l bW9yeUJsb2NrcyAqYmxvY2tzW0RJUlRZX01FTU9SWV9OVU1dOw0KPiArICAgIHVuc2lnbmVk IGxvbmcgZW5kLCBwYWdlOw0KPiArICAgIHVuc2lnbmVkIGxvbmcgaWR4LCBvZmZzZXQsIGJh c2U7DQo+ICsgICAgaW50IGk7DQo+ICsNCj4gKyAgICBpZiAoIW1hc2sgJiYgIXhlbl9lbmFi bGVkKCkpIHsNCj4gKyAgICAgICAgcmV0dXJuOw0KPiArICAgIH0NCj4gKw0KPiArICAgIGVu ZCA9IFRBUkdFVF9QQUdFX0FMSUdOKHN0YXJ0ICsgbGVuZ3RoKSA+PiBUQVJHRVRfUEFHRV9C SVRTOw0KPiArICAgIHBhZ2UgPSBzdGFydCA+PiBUQVJHRVRfUEFHRV9CSVRTOw0KPiArDQo+ ICsgICAgV0lUSF9SQ1VfUkVBRF9MT0NLX0dVQVJEKCkgew0KPiArICAgICAgICBmb3IgKGkg PSAwOyBpIDwgRElSVFlfTUVNT1JZX05VTTsgaSsrKSB7DQo+ICsgICAgICAgICAgICBibG9j a3NbaV0gPSBxYXRvbWljX3JjdV9yZWFkKCZyYW1fbGlzdC5kaXJ0eV9tZW1vcnlbaV0pOw0K PiArICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgaWR4ID0gcGFnZSAvIERJUlRZX01FTU9S WV9CTE9DS19TSVpFOw0KPiArICAgICAgICBvZmZzZXQgPSBwYWdlICUgRElSVFlfTUVNT1JZ X0JMT0NLX1NJWkU7DQo+ICsgICAgICAgIGJhc2UgPSBwYWdlIC0gb2Zmc2V0Ow0KPiArICAg ICAgICB3aGlsZSAocGFnZSA8IGVuZCkgew0KPiArICAgICAgICAgICAgdW5zaWduZWQgbG9u ZyBuZXh0ID0gTUlOKGVuZCwgYmFzZSArIERJUlRZX01FTU9SWV9CTE9DS19TSVpFKTsNCj4g Kw0KPiArICAgICAgICAgICAgaWYgKGxpa2VseShtYXNrICYgKDEgPDwgRElSVFlfTUVNT1JZ X01JR1JBVElPTikpKSB7DQo+ICsgICAgICAgICAgICAgICAgYml0bWFwX3NldF9hdG9taWMo YmxvY2tzW0RJUlRZX01FTU9SWV9NSUdSQVRJT05dLT5ibG9ja3NbaWR4XSwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQsIG5leHQgLSBwYWdlKTsNCj4g KyAgICAgICAgICAgIH0NCj4gKyAgICAgICAgICAgIGlmICh1bmxpa2VseShtYXNrICYgKDEg PDwgRElSVFlfTUVNT1JZX1ZHQSkpKSB7DQo+ICsgICAgICAgICAgICAgICAgYml0bWFwX3Nl dF9hdG9taWMoYmxvY2tzW0RJUlRZX01FTU9SWV9WR0FdLT5ibG9ja3NbaWR4XSwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQsIG5leHQgLSBwYWdlKTsN Cj4gKyAgICAgICAgICAgIH0NCj4gKyAgICAgICAgICAgIGlmICh1bmxpa2VseShtYXNrICYg KDEgPDwgRElSVFlfTUVNT1JZX0NPREUpKSkgew0KPiArICAgICAgICAgICAgICAgIGJpdG1h cF9zZXRfYXRvbWljKGJsb2Nrc1tESVJUWV9NRU1PUllfQ09ERV0tPmJsb2Nrc1tpZHhdLA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCwgbmV4dCAtIHBh Z2UpOw0KPiArICAgICAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgICAgICBwYWdlID0gbmV4 dDsNCj4gKyAgICAgICAgICAgIGlkeCsrOw0KPiArICAgICAgICAgICAgb2Zmc2V0ID0gMDsN Cj4gKyAgICAgICAgICAgIGJhc2UgKz0gRElSVFlfTUVNT1JZX0JMT0NLX1NJWkU7DQo+ICsg ICAgICAgIH0NCj4gKyAgICB9DQo+ICsNCj4gKyAgICB4ZW5faHZtX21vZGlmaWVkX21lbW9y eShzdGFydCwgbGVuZ3RoKTsNCj4gK30NCj4gKw0KPiArI2lmICFkZWZpbmVkKF9XSU4zMikN Cj4gKw0KPiArLyoNCj4gKyAqIENvbnRyYXJ5IHRvIGNwdV9waHlzaWNhbF9tZW1vcnlfc3lu Y19kaXJ0eV9iaXRtYXAoKSB0aGlzIGZ1bmN0aW9uIHJldHVybnMNCj4gKyAqIHRoZSBudW1i ZXIgb2YgZGlydHkgcGFnZXMgaW4gQGJpdG1hcCBwYXNzZWQgYXMgYXJndW1lbnQuIE9uIHRo ZSBvdGhlciBoYW5kLA0KPiArICogY3B1X3BoeXNpY2FsX21lbW9yeV9zeW5jX2RpcnR5X2Jp dG1hcCgpIHJldHVybnMgbmV3bHkgZGlydGllZCBwYWdlcyB0aGF0DQo+ICsgKiB3ZXJlbid0 IHNldCBpbiB0aGUgZ2xvYmFsIG1pZ3JhdGlvbiBiaXRtYXAuDQo+ICsgKi8NCj4gK3N0YXRp YyBpbmxpbmUNCj4gK3VpbnQ2NF90IGNwdV9waHlzaWNhbF9tZW1vcnlfc2V0X2RpcnR5X2xl Yml0bWFwKHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbV9hZGRyX3Qgc3RhcnQsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW1fYWRkcl90 IHBhZ2VzKQ0KPiArew0KPiArICAgIHVuc2lnbmVkIGxvbmcgaSwgajsNCj4gKyAgICB1bnNp Z25lZCBsb25nIHBhZ2VfbnVtYmVyLCBjLCBuYml0czsNCj4gKyAgICBod2FkZHIgYWRkcjsN Cj4gKyAgICByYW1fYWRkcl90IHJhbV9hZGRyOw0KPiArICAgIHVpbnQ2NF90IG51bV9kaXJ0 eSA9IDA7DQo+ICsgICAgdW5zaWduZWQgbG9uZyBsZW4gPSAocGFnZXMgKyBIT1NUX0xPTkdf QklUUyAtIDEpIC8gSE9TVF9MT05HX0JJVFM7DQo+ICsgICAgdW5zaWduZWQgbG9uZyBocHJh dGlvID0gcWVtdV9yZWFsX2hvc3RfcGFnZV9zaXplKCkgLyBUQVJHRVRfUEFHRV9TSVpFOw0K PiArICAgIHVuc2lnbmVkIGxvbmcgcGFnZSA9IEJJVF9XT1JEKHN0YXJ0ID4+IFRBUkdFVF9Q QUdFX0JJVFMpOw0KPiArDQo+ICsgICAgLyogc3RhcnQgYWRkcmVzcyBpcyBhbGlnbmVkIGF0 IHRoZSBzdGFydCBvZiBhIHdvcmQ/ICovDQo+ICsgICAgaWYgKCgoKHBhZ2UgKiBCSVRTX1BF Ul9MT05HKSA8PCBUQVJHRVRfUEFHRV9CSVRTKSA9PSBzdGFydCkgJiYNCj4gKyAgICAgICAg KGhwcmF0aW8gPT0gMSkpIHsNCj4gKyAgICAgICAgdW5zaWduZWQgbG9uZyAqKmJsb2Nrc1tE SVJUWV9NRU1PUllfTlVNXTsNCj4gKyAgICAgICAgdW5zaWduZWQgbG9uZyBpZHg7DQo+ICsg ICAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0Ow0KPiArICAgICAgICBsb25nIGs7DQo+ICsg ICAgICAgIGxvbmcgbnIgPSBCSVRTX1RPX0xPTkdTKHBhZ2VzKTsNCj4gKw0KPiArICAgICAg ICBpZHggPSAoc3RhcnQgPj4gVEFSR0VUX1BBR0VfQklUUykgLyBESVJUWV9NRU1PUllfQkxP Q0tfU0laRTsNCj4gKyAgICAgICAgb2Zmc2V0ID0gQklUX1dPUkQoKHN0YXJ0ID4+IFRBUkdF VF9QQUdFX0JJVFMpICUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgRElSVFlfTUVN T1JZX0JMT0NLX1NJWkUpOw0KPiArDQo+ICsgICAgICAgIFdJVEhfUkNVX1JFQURfTE9DS19H VUFSRCgpIHsNCj4gKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBESVJUWV9NRU1PUllf TlVNOyBpKyspIHsNCj4gKyAgICAgICAgICAgICAgICBibG9ja3NbaV0gPQ0KPiArICAgICAg ICAgICAgICAgICAgICBxYXRvbWljX3JjdV9yZWFkKCZyYW1fbGlzdC5kaXJ0eV9tZW1vcnlb aV0pLT5ibG9ja3M7DQo+ICsgICAgICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgICAgIGZv ciAoayA9IDA7IGsgPCBucjsgaysrKSB7DQo+ICsgICAgICAgICAgICAgICAgaWYgKGJpdG1h cFtrXSkgew0KPiArICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHRlbXAgPSBs ZXVsX3RvX2NwdShiaXRtYXBba10pOw0KPiArDQo+ICsgICAgICAgICAgICAgICAgICAgIG5i aXRzID0gY3Rwb3BsKHRlbXApOw0KPiArICAgICAgICAgICAgICAgICAgICBxYXRvbWljX29y KCZibG9ja3NbRElSVFlfTUVNT1JZX1ZHQV1baWR4XVtvZmZzZXRdLCB0ZW1wKTsNCj4gKw0K PiArICAgICAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsX2RpcnR5X3RyYWNraW5nKSB7DQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICBxYXRvbWljX29yKA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmYmxvY2tzW0RJUlRZX01FTU9SWV9NSUdSQVRJT05dW2lk eF1bb2Zmc2V0XSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCk7 DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5saWtlbHkoDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsX2RpcnR5X3RyYWNraW5nICYgR0xPQkFMX0RJ UlRZX0RJUlRZX1JBVEUpKSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90 YWxfZGlydHlfcGFnZXMgKz0gbmJpdHM7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICB9 DQo+ICsgICAgICAgICAgICAgICAgICAgIH0NCj4gKw0KPiArICAgICAgICAgICAgICAgICAg ICBudW1fZGlydHkgKz0gbmJpdHM7DQo+ICsNCj4gKyAgICAgICAgICAgICAgICAgICAgaWYg KHRjZ19lbmFibGVkKCkpIHsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHFhdG9taWNf b3IoJmJsb2Nrc1tESVJUWV9NRU1PUllfQ09ERV1baWR4XVtvZmZzZXRdLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wKTsNCj4gKyAgICAgICAgICAgICAg ICAgICAgfQ0KPiArICAgICAgICAgICAgICAgIH0NCj4gKw0KPiArICAgICAgICAgICAgICAg IGlmICgrK29mZnNldCA+PSBCSVRTX1RPX0xPTkdTKERJUlRZX01FTU9SWV9CTE9DS19TSVpF KSkgew0KPiArICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAwOw0KPiArICAgICAgICAg ICAgICAgICAgICBpZHgrKzsNCj4gKyAgICAgICAgICAgICAgICB9DQo+ICsgICAgICAgICAg ICB9DQo+ICsgICAgICAgIH0NCj4gKw0KPiArICAgICAgICB4ZW5faHZtX21vZGlmaWVkX21l bW9yeShzdGFydCwgcGFnZXMgPDwgVEFSR0VUX1BBR0VfQklUUyk7DQo+ICsgICAgfSBlbHNl IHsNCj4gKyAgICAgICAgdWludDhfdCBjbGllbnRzID0gdGNnX2VuYWJsZWQoKSA/IERJUlRZ X0NMSUVOVFNfQUxMIDogRElSVFlfQ0xJRU5UU19OT0NPREU7DQo+ICsNCj4gKyAgICAgICAg aWYgKCFnbG9iYWxfZGlydHlfdHJhY2tpbmcpIHsNCj4gKyAgICAgICAgICAgIGNsaWVudHMg Jj0gfigxIDw8IERJUlRZX01FTU9SWV9NSUdSQVRJT04pOw0KPiArICAgICAgICB9DQo+ICsN Cj4gKyAgICAgICAgLyoNCj4gKyAgICAgICAgICogYml0bWFwLXRyYXZlbGluZyBpcyBmYXN0 ZXIgdGhhbiBtZW1vcnktdHJhdmVsaW5nIChmb3IgYWRkci4uLikNCj4gKyAgICAgICAgICog ZXNwZWNpYWxseSB3aGVuIG1vc3Qgb2YgdGhlIG1lbW9yeSBpcyBub3QgZGlydHkuDQo+ICsg ICAgICAgICAqLw0KPiArICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsNCj4g KyAgICAgICAgICAgIGlmIChiaXRtYXBbaV0gIT0gMCkgew0KPiArICAgICAgICAgICAgICAg IGMgPSBsZXVsX3RvX2NwdShiaXRtYXBbaV0pOw0KPiArICAgICAgICAgICAgICAgIG5iaXRz ID0gY3Rwb3BsKGMpOw0KPiArICAgICAgICAgICAgICAgIGlmICh1bmxpa2VseShnbG9iYWxf ZGlydHlfdHJhY2tpbmcgJiBHTE9CQUxfRElSVFlfRElSVFlfUkFURSkpIHsNCj4gKyAgICAg ICAgICAgICAgICAgICAgdG90YWxfZGlydHlfcGFnZXMgKz0gbmJpdHM7DQo+ICsgICAgICAg ICAgICAgICAgfQ0KPiArICAgICAgICAgICAgICAgIG51bV9kaXJ0eSArPSBuYml0czsNCj4g KyAgICAgICAgICAgICAgICBkbyB7DQo+ICsgICAgICAgICAgICAgICAgICAgIGogPSBjdHps KGMpOw0KPiArICAgICAgICAgICAgICAgICAgICBjICY9IH4oMXVsIDw8IGopOw0KPiArICAg ICAgICAgICAgICAgICAgICBwYWdlX251bWJlciA9IChpICogSE9TVF9MT05HX0JJVFMgKyBq KSAqIGhwcmF0aW87DQo+ICsgICAgICAgICAgICAgICAgICAgIGFkZHIgPSBwYWdlX251bWJl ciAqIFRBUkdFVF9QQUdFX1NJWkU7DQo+ICsgICAgICAgICAgICAgICAgICAgIHJhbV9hZGRy ID0gc3RhcnQgKyBhZGRyOw0KPiArICAgICAgICAgICAgICAgICAgICBjcHVfcGh5c2ljYWxf bWVtb3J5X3NldF9kaXJ0eV9yYW5nZShyYW1fYWRkciwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFRBUkdFVF9QQUdFX1NJWkUgKiBocHJhdGlvLCBjbGll bnRzKTsNCj4gKyAgICAgICAgICAgICAgICB9IHdoaWxlIChjICE9IDApOw0KPiArICAgICAg ICAgICAgfQ0KPiArICAgICAgICB9DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgcmV0dXJuIG51 bV9kaXJ0eTsNCj4gK30NCj4gKyNlbmRpZiAvKiBub3QgX1dJTjMyICovDQo+ICsNCj4gK3N0 YXRpYyBpbmxpbmUgdm9pZCBjcHVfcGh5c2ljYWxfbWVtb3J5X2RpcnR5X2JpdHNfY2xlYXJl ZChyYW1fYWRkcl90IHN0YXJ0LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbV9hZGRyX3QgbGVuZ3RoKQ0KPiArew0K PiArICAgIGlmICh0Y2dfZW5hYmxlZCgpKSB7DQo+ICsgICAgICAgIHRsYl9yZXNldF9kaXJ0 eV9yYW5nZV9hbGwoc3RhcnQsIGxlbmd0aCk7DQo+ICsgICAgfQ0KPiArDQo+ICt9DQo+ICti b29sIGNwdV9waHlzaWNhbF9tZW1vcnlfdGVzdF9hbmRfY2xlYXJfZGlydHkocmFtX2FkZHJf dCBzdGFydCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICByYW1fYWRkcl90IGxlbmd0aCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjbGllbnQpOw0KPiArDQo+ICtEaXJ0eUJp dG1hcFNuYXBzaG90ICpjcHVfcGh5c2ljYWxfbWVtb3J5X3NuYXBzaG90X2FuZF9jbGVhcl9k aXJ0eQ0KPiArICAgIChNZW1vcnlSZWdpb24gKm1yLCBod2FkZHIgb2Zmc2V0LCBod2FkZHIg bGVuZ3RoLCB1bnNpZ25lZCBjbGllbnQpOw0KPiArDQo+ICtib29sIGNwdV9waHlzaWNhbF9t ZW1vcnlfc25hcHNob3RfZ2V0X2RpcnR5KERpcnR5Qml0bWFwU25hcHNob3QgKnNuYXAsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbV9hZGRy X3Qgc3RhcnQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJhbV9hZGRyX3QgbGVuZ3RoKTsNCj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lkIGNw dV9waHlzaWNhbF9tZW1vcnlfY2xlYXJfZGlydHlfcmFuZ2UocmFtX2FkZHJfdCBzdGFydCwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJhbV9hZGRyX3QgbGVuZ3RoKQ0KPiArew0KPiArICAgIGNwdV9waHlzaWNhbF9t ZW1vcnlfdGVzdF9hbmRfY2xlYXJfZGlydHkoc3RhcnQsIGxlbmd0aCwgRElSVFlfTUVNT1JZ X01JR1JBVElPTik7DQo+ICsgICAgY3B1X3BoeXNpY2FsX21lbW9yeV90ZXN0X2FuZF9jbGVh cl9kaXJ0eShzdGFydCwgbGVuZ3RoLCBESVJUWV9NRU1PUllfVkdBKTsNCj4gKyAgICBjcHVf cGh5c2ljYWxfbWVtb3J5X3Rlc3RfYW5kX2NsZWFyX2RpcnR5KHN0YXJ0LCBsZW5ndGgsIERJ UlRZX01FTU9SWV9DT0RFKTsNCj4gK30NCj4gKw0KPiArDQo+ICsvKiBDYWxsZWQgd2l0aCBS Q1UgY3JpdGljYWwgc2VjdGlvbiAqLw0KPiArc3RhdGljIGlubGluZQ0KPiArdWludDY0X3Qg Y3B1X3BoeXNpY2FsX21lbW9yeV9zeW5jX2RpcnR5X2JpdG1hcChSQU1CbG9jayAqcmIsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbV9h ZGRyX3Qgc3RhcnQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJhbV9hZGRyX3QgbGVuZ3RoKQ0KPiArew0KPiArICAgIHJhbV9hZGRyX3Qg YWRkcjsNCj4gKyAgICB1bnNpZ25lZCBsb25nIHdvcmQgPSBCSVRfV09SRCgoc3RhcnQgKyBy Yi0+b2Zmc2V0KSA+PiBUQVJHRVRfUEFHRV9CSVRTKTsNCj4gKyAgICB1aW50NjRfdCBudW1f ZGlydHkgPSAwOw0KPiArICAgIHVuc2lnbmVkIGxvbmcgKmRlc3QgPSByYi0+Ym1hcDsNCj4g Kw0KPiArICAgIC8qIHN0YXJ0IGFkZHJlc3MgYW5kIGxlbmd0aCBpcyBhbGlnbmVkIGF0IHRo ZSBzdGFydCBvZiBhIHdvcmQ/ICovDQo+ICsgICAgaWYgKCgod29yZCAqIEJJVFNfUEVSX0xP TkcpIDw8IFRBUkdFVF9QQUdFX0JJVFMpID09DQo+ICsgICAgICAgICAoc3RhcnQgKyByYi0+ b2Zmc2V0KSAmJg0KPiArICAgICAgICAhKGxlbmd0aCAmICgoQklUU19QRVJfTE9ORyA8PCBU QVJHRVRfUEFHRV9CSVRTKSAtIDEpKSkgew0KPiArICAgICAgICBpbnQgazsNCj4gKyAgICAg ICAgaW50IG5yID0gQklUU19UT19MT05HUyhsZW5ndGggPj4gVEFSR0VUX1BBR0VfQklUUyk7 DQo+ICsgICAgICAgIHVuc2lnbmVkIGxvbmcgKiBjb25zdCAqc3JjOw0KPiArICAgICAgICB1 bnNpZ25lZCBsb25nIGlkeCA9ICh3b3JkICogQklUU19QRVJfTE9ORykgLyBESVJUWV9NRU1P UllfQkxPQ0tfU0laRTsNCj4gKyAgICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBCSVRf V09SRCgod29yZCAqIEJJVFNfUEVSX0xPTkcpICUNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBESVJUWV9NRU1PUllfQkxPQ0tfU0laRSk7DQo+ICsgICAg ICAgIHVuc2lnbmVkIGxvbmcgcGFnZSA9IEJJVF9XT1JEKHN0YXJ0ID4+IFRBUkdFVF9QQUdF X0JJVFMpOw0KPiArDQo+ICsgICAgICAgIHNyYyA9IHFhdG9taWNfcmN1X3JlYWQoDQo+ICsg ICAgICAgICAgICAgICAgJnJhbV9saXN0LmRpcnR5X21lbW9yeVtESVJUWV9NRU1PUllfTUlH UkFUSU9OXSktPmJsb2NrczsNCj4gKw0KPiArICAgICAgICBmb3IgKGsgPSBwYWdlOyBrIDwg cGFnZSArIG5yOyBrKyspIHsNCj4gKyAgICAgICAgICAgIGlmIChzcmNbaWR4XVtvZmZzZXRd KSB7DQo+ICsgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBiaXRzID0gcWF0b21pY194 Y2hnKCZzcmNbaWR4XVtvZmZzZXRdLCAwKTsNCj4gKyAgICAgICAgICAgICAgICB1bnNpZ25l ZCBsb25nIG5ld19kaXJ0eTsNCj4gKyAgICAgICAgICAgICAgICBuZXdfZGlydHkgPSB+ZGVz dFtrXTsNCj4gKyAgICAgICAgICAgICAgICBkZXN0W2tdIHw9IGJpdHM7DQo+ICsgICAgICAg ICAgICAgICAgbmV3X2RpcnR5ICY9IGJpdHM7DQo+ICsgICAgICAgICAgICAgICAgbnVtX2Rp cnR5ICs9IGN0cG9wbChuZXdfZGlydHkpOw0KPiArICAgICAgICAgICAgfQ0KPiArDQo+ICsg ICAgICAgICAgICBpZiAoKytvZmZzZXQgPj0gQklUU19UT19MT05HUyhESVJUWV9NRU1PUllf QkxPQ0tfU0laRSkpIHsNCj4gKyAgICAgICAgICAgICAgICBvZmZzZXQgPSAwOw0KPiArICAg ICAgICAgICAgICAgIGlkeCsrOw0KPiArICAgICAgICAgICAgfQ0KPiArICAgICAgICB9DQo+ ICsgICAgICAgIGlmIChudW1fZGlydHkpIHsNCj4gKyAgICAgICAgICAgIGNwdV9waHlzaWNh bF9tZW1vcnlfZGlydHlfYml0c19jbGVhcmVkKHN0YXJ0LCBsZW5ndGgpOw0KPiArICAgICAg ICB9DQo+ICsNCj4gKyAgICAgICAgaWYgKHJiLT5jbGVhcl9ibWFwKSB7DQo+ICsgICAgICAg ICAgICAvKg0KPiArICAgICAgICAgICAgICogUG9zdHBvbmUgdGhlIGRpcnR5IGJpdG1hcCBj bGVhciB0byB0aGUgcG9pbnQgYmVmb3JlIHdlDQo+ICsgICAgICAgICAgICAgKiByZWFsbHkg c2VuZCB0aGUgcGFnZXMsIGFsc28gd2Ugd2lsbCBzcGxpdCB0aGUgY2xlYXINCj4gKyAgICAg ICAgICAgICAqIGRpcnR5IHByb2NlZHVyZSBpbnRvIHNtYWxsZXIgY2h1bmtzLg0KPiArICAg ICAgICAgICAgICovDQo+ICsgICAgICAgICAgICBjbGVhcl9ibWFwX3NldChyYiwgc3RhcnQg Pj4gVEFSR0VUX1BBR0VfQklUUywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxl bmd0aCA+PiBUQVJHRVRfUEFHRV9CSVRTKTsNCj4gKyAgICAgICAgfSBlbHNlIHsNCj4gKyAg ICAgICAgICAgIC8qIFNsb3cgcGF0aCAtIHN0aWxsIGRvIHRoYXQgaW4gYSBodWdlIGNodW5r ICovDQo+ICsgICAgICAgICAgICBtZW1vcnlfcmVnaW9uX2NsZWFyX2RpcnR5X2JpdG1hcChy Yi0+bXIsIHN0YXJ0LCBsZW5ndGgpOw0KPiArICAgICAgICB9DQo+ICsgICAgfSBlbHNlIHsN Cj4gKyAgICAgICAgcmFtX2FkZHJfdCBvZmZzZXQgPSByYi0+b2Zmc2V0Ow0KPiArDQo+ICsg ICAgICAgIGZvciAoYWRkciA9IDA7IGFkZHIgPCBsZW5ndGg7IGFkZHIgKz0gVEFSR0VUX1BB R0VfU0laRSkgew0KPiArICAgICAgICAgICAgaWYgKGNwdV9waHlzaWNhbF9tZW1vcnlfdGVz dF9hbmRfY2xlYXJfZGlydHkoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCAr IGFkZHIgKyBvZmZzZXQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICBUQVJHRVRfUEFH RV9TSVpFLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgRElSVFlfTUVNT1JZX01JR1JB VElPTikpIHsNCj4gKyAgICAgICAgICAgICAgICBsb25nIGsgPSAoc3RhcnQgKyBhZGRyKSA+ PiBUQVJHRVRfUEFHRV9CSVRTOw0KPiArICAgICAgICAgICAgICAgIGlmICghdGVzdF9hbmRf c2V0X2JpdChrLCBkZXN0KSkgew0KPiArICAgICAgICAgICAgICAgICAgICBudW1fZGlydHkr KzsNCj4gKyAgICAgICAgICAgICAgICB9DQo+ICsgICAgICAgICAgICB9DQo+ICsgICAgICAg IH0NCj4gKyAgICB9DQo+ICsNCj4gKyAgICByZXR1cm4gbnVtX2RpcnR5Ow0KPiArfQ0KPiAr DQo+ICsjZW5kaWYNCj4gZGlmZiAtLWdpdCBhL2FjY2VsL2t2bS9rdm0tYWxsLmMgYi9hY2Nl bC9rdm0va3ZtLWFsbC5jDQo+IGluZGV4IDgwMWNmZjE2YTUuLmE4MDU0NzAwNmIgMTAwNjQ0 DQo+IC0tLSBhL2FjY2VsL2t2bS9rdm0tYWxsLmMNCj4gKysrIGIvYWNjZWwva3ZtL2t2bS1h bGwuYw0KPiBAQCAtMzUsNiArMzUsNyBAQA0KPiAgICNpbmNsdWRlICJxZW11L2Jzd2FwLmgi DQo+ICAgI2luY2x1ZGUgImV4ZWMvbWVtb3J5LmgiDQo+ICAgI2luY2x1ZGUgImV4ZWMvcmFt X2FkZHIuaCINCj4gKyNpbmNsdWRlICJzeXNlbXUvcGh5c21lbS10YXJnZXQuaCINCj4gICAj aW5jbHVkZSAicWVtdS9ldmVudF9ub3RpZmllci5oIg0KPiAgICNpbmNsdWRlICJxZW11L21h aW4tbG9vcC5oIg0KPiAgICNpbmNsdWRlICJ0cmFjZS5oIg0KPiBkaWZmIC0tZ2l0IGEvYWNj ZWwvdGNnL2NwdXRsYi5jIGIvYWNjZWwvdGNnL2NwdXRsYi5jDQo+IGluZGV4IGRiYTQ4MzFj ZDEuLmQ0YjM4MTY0MWMgMTAwNjQ0DQo+IC0tLSBhL2FjY2VsL3RjZy9jcHV0bGIuYw0KPiAr KysgYi9hY2NlbC90Y2cvY3B1dGxiLmMNCj4gQEAgLTI4LDYgKzI4LDcgQEANCj4gICAjaW5j bHVkZSAiZXhlYy90Yi1mbHVzaC5oIg0KPiAgICNpbmNsdWRlICJleGVjL21lbW9yeS1pbnRl cm5hbC5oIg0KPiAgICNpbmNsdWRlICJleGVjL3JhbV9hZGRyLmgiDQo+ICsjaW5jbHVkZSAi c3lzZW11L3BoeXNtZW0tdGFyZ2V0LmgiDQo+ICAgI2luY2x1ZGUgImV4ZWMvbW11LWFjY2Vz cy10eXBlLmgiDQo+ICAgI2luY2x1ZGUgImV4ZWMvdGxiLWNvbW1vbi5oIg0KPiAgICNpbmNs dWRlICJleGVjL3ZhZGRyLmgiDQo+IGRpZmYgLS1naXQgYS9hY2NlbC90Y2cvdHJhbnNsYXRl LWFsbC5jIGIvYWNjZWwvdGNnL3RyYW5zbGF0ZS1hbGwuYw0KPiBpbmRleCBmZGY2ZDhhYzE5 Li40ODAxNWJlODI5IDEwMDY0NA0KPiAtLS0gYS9hY2NlbC90Y2cvdHJhbnNsYXRlLWFsbC5j DQo+ICsrKyBiL2FjY2VsL3RjZy90cmFuc2xhdGUtYWxsLmMNCj4gQEAgLTQxLDYgKzQxLDcg QEANCj4gICAjZW5kaWYNCj4gICAjZWxzZQ0KPiAgICNpbmNsdWRlICJleGVjL3JhbV9hZGRy LmgiDQo+ICsjaW5jbHVkZSAic3lzZW11L3BoeXNtZW0tdGFyZ2V0LmgiDQo+ICAgI2VuZGlm DQo+ICAgDQo+ICAgI2luY2x1ZGUgImV4ZWMvY3B1dGxiLmgiDQo+IGRpZmYgLS1naXQgYS9o dy9wcGMvc3BhcHIuYyBiL2h3L3BwYy9zcGFwci5jDQo+IGluZGV4IDVjMDIwMzdjNTYuLmE5 ODMzNTMwYzcgMTAwNjQ0DQo+IC0tLSBhL2h3L3BwYy9zcGFwci5jDQo+ICsrKyBiL2h3L3Bw Yy9zcGFwci5jDQo+IEBAIC03NSw2ICs3NSw3IEBADQo+ICAgI2luY2x1ZGUgImh3L3ZpcnRp by92aG9zdC1zY3NpLWNvbW1vbi5oIg0KPiAgIA0KPiAgICNpbmNsdWRlICJleGVjL3JhbV9h ZGRyLmgiDQo+ICsjaW5jbHVkZSAic3lzZW11L3BoeXNtZW0tdGFyZ2V0LmgiDQo+ICAgI2lu Y2x1ZGUgImV4ZWMvY29uZmlkZW50aWFsLWd1ZXN0LXN1cHBvcnQuaCINCj4gICAjaW5jbHVk ZSAiaHcvdXNiLmgiDQo+ICAgI2luY2x1ZGUgInFlbXUvY29uZmlnLWZpbGUuaCINCj4gZGlm ZiAtLWdpdCBhL2h3L3BwYy9zcGFwcl9jYXBzLmMgYi9ody9wcGMvc3BhcHJfY2Fwcy5jDQo+ IGluZGV4IDJmNzQ5MjM1NjAuLjVlZWY3NDc1YzEgMTAwNjQ0DQo+IC0tLSBhL2h3L3BwYy9z cGFwcl9jYXBzLmMNCj4gKysrIGIvaHcvcHBjL3NwYXByX2NhcHMuYw0KPiBAQCAtMjgsNiAr MjgsNyBAQA0KPiAgICNpbmNsdWRlICJxYXBpL3Zpc2l0b3IuaCINCj4gICAjaW5jbHVkZSAi c3lzZW11L2h3X2FjY2VsLmgiDQo+ICAgI2luY2x1ZGUgImV4ZWMvcmFtX2FkZHIuaCINCj4g KyNpbmNsdWRlICJzeXNlbXUvcGh5c21lbS10YXJnZXQuaCINCj4gICAjaW5jbHVkZSAidGFy Z2V0L3BwYy9jcHUuaCINCj4gICAjaW5jbHVkZSAidGFyZ2V0L3BwYy9tbXUtaGFzaDY0Lmgi DQo+ICAgI2luY2x1ZGUgImNwdS1tb2RlbHMuaCINCj4gZGlmZiAtLWdpdCBhL2h3L3BwYy9z cGFwcl9wY2kuYyBiL2h3L3BwYy9zcGFwcl9wY2kuYw0KPiBpbmRleCA3ZTI0MDg0NjczLi5h OTFmZWExMzA0IDEwMDY0NA0KPiAtLS0gYS9ody9wcGMvc3BhcHJfcGNpLmMNCj4gKysrIGIv aHcvcHBjL3NwYXByX3BjaS5jDQo+IEBAIC0zNSw2ICszNSw3IEBADQo+ICAgI2luY2x1ZGUg Imh3L3BwYy9zcGFwci5oIg0KPiAgICNpbmNsdWRlICJody9wY2ktaG9zdC9zcGFwci5oIg0K PiAgICNpbmNsdWRlICJleGVjL3JhbV9hZGRyLmgiDQo+ICsjaW5jbHVkZSAic3lzZW11L3Bo eXNtZW0tdGFyZ2V0LmgiDQo+ICAgI2luY2x1ZGUgPGxpYmZkdC5oPg0KPiAgICNpbmNsdWRl ICJ0cmFjZS5oIg0KPiAgICNpbmNsdWRlICJxZW11L2Vycm9yLXJlcG9ydC5oIg0KPiBkaWZm IC0tZ2l0IGEvaHcvcmVtb3RlL21lbW9yeS5jIGIvaHcvcmVtb3RlL21lbW9yeS5jDQo+IGlu ZGV4IDZkNjBkYTkxZTAuLjBhZjJhMmYzZmUgMTAwNjQ0DQo+IC0tLSBhL2h3L3JlbW90ZS9t ZW1vcnkuYw0KPiArKysgYi9ody9yZW1vdGUvbWVtb3J5LmMNCj4gQEAgLTEyLDYgKzEyLDcg QEANCj4gICANCj4gICAjaW5jbHVkZSAiaHcvcmVtb3RlL21lbW9yeS5oIg0KPiAgICNpbmNs dWRlICJleGVjL3JhbV9hZGRyLmgiDQo+ICsjaW5jbHVkZSAic3lzZW11L3BoeXNtZW0tdGFy Z2V0LmgiDQo+ICAgI2luY2x1ZGUgInFhcGkvZXJyb3IuaCINCj4gICANCj4gICBzdGF0aWMg dm9pZCByZW1vdGVfc3lzbWVtX3Jlc2V0KHZvaWQpDQo+IGRpZmYgLS1naXQgYS9ody9yZW1v dGUvcHJveHktbWVtb3J5LWxpc3RlbmVyLmMgYi9ody9yZW1vdGUvcHJveHktbWVtb3J5LWxp c3RlbmVyLmMNCj4gaW5kZXggYTkyNmY2MWViZS4uMzk0ODc1MWVkNyAxMDA2NDQNCj4gLS0t IGEvaHcvcmVtb3RlL3Byb3h5LW1lbW9yeS1saXN0ZW5lci5jDQo+ICsrKyBiL2h3L3JlbW90 ZS9wcm94eS1tZW1vcnktbGlzdGVuZXIuYw0KPiBAQCAtMTMsNiArMTMsNyBAQA0KPiAgICNp bmNsdWRlICJleGVjL21lbW9yeS5oIg0KPiAgICNpbmNsdWRlICJleGVjL2NwdS1jb21tb24u aCINCj4gICAjaW5jbHVkZSAiZXhlYy9yYW1fYWRkci5oIg0KPiArI2luY2x1ZGUgInN5c2Vt dS9waHlzbWVtLXRhcmdldC5oIg0KPiAgICNpbmNsdWRlICJxYXBpL2Vycm9yLmgiDQo+ICAg I2luY2x1ZGUgInFlbXUvZXJyb3ItcmVwb3J0LmgiDQo+ICAgI2luY2x1ZGUgImh3L3JlbW90 ZS9tcHFlbXUtbGluay5oIg0KPiBkaWZmIC0tZ2l0IGEvaHcvczM5MHgvczM5MC1zdGF0dHJp Yi1rdm0uYyBiL2h3L3MzOTB4L3MzOTAtc3RhdHRyaWIta3ZtLmMNCj4gaW5kZXggZWVhYTgx MTA5OC4uYjQ5NWQ4MTI5NiAxMDA2NDQNCj4gLS0tIGEvaHcvczM5MHgvczM5MC1zdGF0dHJp Yi1rdm0uYw0KPiArKysgYi9ody9zMzkweC9zMzkwLXN0YXR0cmliLWt2bS5jDQo+IEBAIC0x Niw2ICsxNiw3IEBADQo+ICAgI2luY2x1ZGUgInFlbXUvZXJyb3ItcmVwb3J0LmgiDQo+ICAg I2luY2x1ZGUgInN5c2VtdS9rdm0uaCINCj4gICAjaW5jbHVkZSAiZXhlYy9yYW1fYWRkci5o Ig0KPiArI2luY2x1ZGUgInN5c2VtdS9waHlzbWVtLXRhcmdldC5oIg0KPiAgICNpbmNsdWRl ICJrdm0va3ZtX3MzOTB4LmgiDQo+ICAgI2luY2x1ZGUgInFhcGkvZXJyb3IuaCINCj4gICAN Cj4gZGlmZiAtLWdpdCBhL2h3L3MzOTB4L3MzOTAtc3RhdHRyaWIuYyBiL2h3L3MzOTB4L3Mz OTAtc3RhdHRyaWIuYw0KPiBpbmRleCBjNDI1OWI1MzI3Li5mZTc5NDVlODU2IDEwMDY0NA0K PiAtLS0gYS9ody9zMzkweC9zMzkwLXN0YXR0cmliLmMNCj4gKysrIGIvaHcvczM5MHgvczM5 MC1zdGF0dHJpYi5jDQo+IEBAIC0xNyw2ICsxNyw3IEBADQo+ICAgI2luY2x1ZGUgImh3L3Mz OTB4L3N0b3JhZ2UtYXR0cmlidXRlcy5oIg0KPiAgICNpbmNsdWRlICJxZW11L2Vycm9yLXJl cG9ydC5oIg0KPiAgICNpbmNsdWRlICJleGVjL3JhbV9hZGRyLmgiDQo+ICsjaW5jbHVkZSAi c3lzZW11L3BoeXNtZW0tdGFyZ2V0LmgiDQo+ICAgI2luY2x1ZGUgInFhcGkvZXJyb3IuaCIN Cj4gICAjaW5jbHVkZSAicWFwaS9xbXAvcWRpY3QuaCINCj4gICAjaW5jbHVkZSAiY3B1Lmgi DQo+IGRpZmYgLS1naXQgYS9ody9zMzkweC9zMzkwLXZpcnRpby1jY3cuYyBiL2h3L3MzOTB4 L3MzOTAtdmlydGlvLWNjdy5jDQo+IGluZGV4IGZlMDNmNzE2ZjMuLjViNmZlMWExOGEgMTAw NjQ0DQo+IC0tLSBhL2h3L3MzOTB4L3MzOTAtdmlydGlvLWNjdy5jDQo+ICsrKyBiL2h3L3Mz OTB4L3MzOTAtdmlydGlvLWNjdy5jDQo+IEBAIC0xNCw2ICsxNCw3IEBADQo+ICAgI2luY2x1 ZGUgInFlbXUvb3NkZXAuaCINCj4gICAjaW5jbHVkZSAicWFwaS9lcnJvci5oIg0KPiAgICNp bmNsdWRlICJleGVjL3JhbV9hZGRyLmgiDQo+ICsjaW5jbHVkZSAic3lzZW11L3BoeXNtZW0t dGFyZ2V0LmgiDQo+ICAgI2luY2x1ZGUgImV4ZWMvY29uZmlkZW50aWFsLWd1ZXN0LXN1cHBv cnQuaCINCj4gICAjaW5jbHVkZSAiaHcvYm9hcmRzLmgiDQo+ICAgI2luY2x1ZGUgImh3L3Mz OTB4L3MzOTAtdmlydGlvLWhjYWxsLmgiDQo+IGRpZmYgLS1naXQgYS9ody92ZmlvL2NvbW1v bi5jIGIvaHcvdmZpby9jb21tb24uYw0KPiBpbmRleCBkY2VmNDRmZTU1Li4yZTdhMDJjZDRi IDEwMDY0NA0KPiAtLS0gYS9ody92ZmlvL2NvbW1vbi5jDQo+ICsrKyBiL2h3L3ZmaW8vY29t bW9uLmMNCj4gQEAgLTMwLDYgKzMwLDcgQEANCj4gICAjaW5jbHVkZSAiZXhlYy9hZGRyZXNz LXNwYWNlcy5oIg0KPiAgICNpbmNsdWRlICJleGVjL21lbW9yeS5oIg0KPiAgICNpbmNsdWRl ICJleGVjL3JhbV9hZGRyLmgiDQo+ICsjaW5jbHVkZSAic3lzZW11L3BoeXNtZW0tdGFyZ2V0 LmgiDQo+ICAgI2luY2x1ZGUgImh3L2h3LmgiDQo+ICAgI2luY2x1ZGUgInFlbXUvZXJyb3It cmVwb3J0LmgiDQo+ICAgI2luY2x1ZGUgInFlbXUvbWFpbi1sb29wLmgiDQo+IGRpZmYgLS1n aXQgYS9ody92ZmlvL2NvbnRhaW5lci5jIGIvaHcvdmZpby9jb250YWluZXIuYw0KPiBpbmRl eCA5Y2NkYjYzOWFjLi5mMGJjOWU4YzJiIDEwMDY0NA0KPiAtLS0gYS9ody92ZmlvL2NvbnRh aW5lci5jDQo+ICsrKyBiL2h3L3ZmaW8vY29udGFpbmVyLmMNCj4gQEAgLTI2LDYgKzI2LDcg QEANCj4gICAjaW5jbHVkZSAiZXhlYy9hZGRyZXNzLXNwYWNlcy5oIg0KPiAgICNpbmNsdWRl ICJleGVjL21lbW9yeS5oIg0KPiAgICNpbmNsdWRlICJleGVjL3JhbV9hZGRyLmgiDQo+ICsj aW5jbHVkZSAic3lzZW11L3BoeXNtZW0tdGFyZ2V0LmgiDQo+ICAgI2luY2x1ZGUgInFlbXUv ZXJyb3ItcmVwb3J0LmgiDQo+ICAgI2luY2x1ZGUgInFlbXUvcmFuZ2UuaCINCj4gICAjaW5j bHVkZSAic3lzZW11L3Jlc2V0LmgiDQo+IGRpZmYgLS1naXQgYS9ody92ZmlvL2lvbW11ZmQu YyBiL2h3L3ZmaW8vaW9tbXVmZC5jDQo+IGluZGV4IGU3YmVjZTRlYTEuLjEyMGM4MmYzZGUg MTAwNjQ0DQo+IC0tLSBhL2h3L3ZmaW8vaW9tbXVmZC5jDQo+ICsrKyBiL2h3L3ZmaW8vaW9t bXVmZC5jDQo+IEBAIC0yNiw2ICsyNiw3IEBADQo+ICAgI2luY2x1ZGUgInFlbXUvY2hhcmRl dl9vcGVuLmgiDQo+ICAgI2luY2x1ZGUgInBjaS5oIg0KPiAgICNpbmNsdWRlICJleGVjL3Jh bV9hZGRyLmgiDQo+ICsjaW5jbHVkZSAic3lzZW11L3BoeXNtZW0tdGFyZ2V0LmgiDQo+ICAg DQo+ICAgc3RhdGljIGludCBpb21tdWZkX2NkZXZfbWFwKGNvbnN0IFZGSU9Db250YWluZXJC YXNlICpiY29udGFpbmVyLCBod2FkZHIgaW92YSwNCj4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmFtX2FkZHJfdCBzaXplLCB2b2lkICp2YWRkciwgYm9vbCByZWFkb25seSkN Cj4gZGlmZiAtLWdpdCBhL2h3L3ZmaW8vbWlncmF0aW9uLmMgYi9ody92ZmlvL21pZ3JhdGlv bi5jDQo+IGluZGV4IDAxYWExMTAxM2UuLmY1Njk4ZWVhZTAgMTAwNjQ0DQo+IC0tLSBhL2h3 L3ZmaW8vbWlncmF0aW9uLmMNCj4gKysrIGIvaHcvdmZpby9taWdyYXRpb24uYw0KPiBAQCAt MjcsNiArMjcsNyBAQA0KPiAgICNpbmNsdWRlICJxYXBpL3FhcGktZXZlbnRzLXZmaW8uaCIN Cj4gICAjaW5jbHVkZSAiZXhlYy9yYW1saXN0LmgiDQo+ICAgI2luY2x1ZGUgImV4ZWMvcmFt X2FkZHIuaCINCj4gKyNpbmNsdWRlICJzeXNlbXUvcGh5c21lbS10YXJnZXQuaCINCj4gICAj aW5jbHVkZSAicGNpLmgiDQo+ICAgI2luY2x1ZGUgInRyYWNlLmgiDQo+ICAgI2luY2x1ZGUg Imh3L2h3LmgiDQo+IGRpZmYgLS1naXQgYS9ody92ZmlvL3NwYXByLmMgYi9ody92ZmlvL3Nw YXByLmMNCj4gaW5kZXggMDE4YmQyMDQ4MS4uOTgwMTQ3MzM4YSAxMDA2NDQNCj4gLS0tIGEv aHcvdmZpby9zcGFwci5jDQo+ICsrKyBiL2h3L3ZmaW8vc3BhcHIuYw0KPiBAQCAtMjAsNiAr MjAsNyBAQA0KPiAgICNpbmNsdWRlICJody92ZmlvL3ZmaW8tY29tbW9uLmgiDQo+ICAgI2lu Y2x1ZGUgImh3L2h3LmgiDQo+ICAgI2luY2x1ZGUgImV4ZWMvcmFtX2FkZHIuaCINCj4gKyNp bmNsdWRlICJzeXNlbXUvcGh5c21lbS10YXJnZXQuaCINCj4gICAjaW5jbHVkZSAicWVtdS9l cnJvci1yZXBvcnQuaCINCj4gICAjaW5jbHVkZSAicWFwaS9lcnJvci5oIg0KPiAgICNpbmNs dWRlICJ0cmFjZS5oIg0KPiBkaWZmIC0tZ2l0IGEvaHcvdmlydGlvL3ZpcnRpby1tZW0uYyBi L2h3L3ZpcnRpby92aXJ0aW8tbWVtLmMNCj4gaW5kZXggODBhZGE4OTU1MS4uZGFlOTRkYmJk ZSAxMDA2NDQNCj4gLS0tIGEvaHcvdmlydGlvL3ZpcnRpby1tZW0uYw0KPiArKysgYi9ody92 aXJ0aW8vdmlydGlvLW1lbS5jDQo+IEBAIC0yNSw2ICsyNSw3IEBADQo+ICAgI2luY2x1ZGUg InFhcGkvZXJyb3IuaCINCj4gICAjaW5jbHVkZSAicWFwaS92aXNpdG9yLmgiDQo+ICAgI2lu Y2x1ZGUgImV4ZWMvcmFtX2FkZHIuaCINCj4gKyNpbmNsdWRlICJzeXNlbXUvcGh5c21lbS10 YXJnZXQuaCINCj4gICAjaW5jbHVkZSAibWlncmF0aW9uL21pc2MuaCINCj4gICAjaW5jbHVk ZSAiaHcvYm9hcmRzLmgiDQo+ICAgI2luY2x1ZGUgImh3L3FkZXYtcHJvcGVydGllcy5oIg0K PiBkaWZmIC0tZ2l0IGEvbWlncmF0aW9uL3JhbS5jIGIvbWlncmF0aW9uL3JhbS5jDQo+IGlu ZGV4IDA1ZmY5ZWIzMjguLjgyYzQ0ZTgyMTMgMTAwNjQ0DQo+IC0tLSBhL21pZ3JhdGlvbi9y YW0uYw0KPiArKysgYi9taWdyYXRpb24vcmFtLmMNCj4gQEAgLTQ5LDYgKzQ5LDcgQEANCj4g ICAjaW5jbHVkZSAicWFwaS9xbXAvcWVycm9yLmgiDQo+ICAgI2luY2x1ZGUgInRyYWNlLmgi DQo+ICAgI2luY2x1ZGUgImV4ZWMvcmFtX2FkZHIuaCINCj4gKyNpbmNsdWRlICJzeXNlbXUv cGh5c21lbS10YXJnZXQuaCINCj4gICAjaW5jbHVkZSAiZXhlYy90YXJnZXRfcGFnZS5oIg0K PiAgICNpbmNsdWRlICJxZW11L3JjdV9xdWV1ZS5oIg0KPiAgICNpbmNsdWRlICJtaWdyYXRp b24vY29sby5oIg0KPiBkaWZmIC0tZ2l0IGEvcGx1Z2lucy9hcGkuYyBiL3BsdWdpbnMvYXBp LmMNCj4gaW5kZXggMjRlYTY0ZTJkZS4uNzdiNTVjZmY3NCAxMDA2NDQNCj4gLS0tIGEvcGx1 Z2lucy9hcGkuYw0KPiArKysgYi9wbHVnaW5zL2FwaS5jDQo+IEBAIC01MCw2ICs1MCw3IEBA DQo+ICAgI2luY2x1ZGUgInFhcGkvZXJyb3IuaCINCj4gICAjaW5jbHVkZSAibWlncmF0aW9u L2Jsb2NrZXIuaCINCj4gICAjaW5jbHVkZSAiZXhlYy9yYW1fYWRkci5oIg0KPiArI2luY2x1 ZGUgInN5c2VtdS9waHlzbWVtLXRhcmdldC5oIg0KPiAgICNpbmNsdWRlICJxZW11L3BsdWdp bi1tZW1vcnkuaCINCj4gICAjaW5jbHVkZSAiaHcvYm9hcmRzLmgiDQo+ICAgI2Vsc2UNCj4g ZGlmZiAtLWdpdCBhL3N5c3RlbS9tZW1vcnkuYyBiL3N5c3RlbS9tZW1vcnkuYw0KPiBpbmRl eCA4NWY2ODM0Y2IzLi43ZWFlMWJiZGE3IDEwMDY0NA0KPiAtLS0gYS9zeXN0ZW0vbWVtb3J5 LmMNCj4gKysrIGIvc3lzdGVtL21lbW9yeS5jDQo+IEBAIC0yNyw2ICsyNyw3IEBADQo+ICAg DQo+ICAgI2luY2x1ZGUgImV4ZWMvbWVtb3J5LWludGVybmFsLmgiDQo+ICAgI2luY2x1ZGUg ImV4ZWMvcmFtX2FkZHIuaCINCj4gKyNpbmNsdWRlICJzeXNlbXUvcGh5c21lbS10YXJnZXQu aCINCj4gICAjaW5jbHVkZSAic3lzZW11L2t2bS5oIg0KPiAgICNpbmNsdWRlICJzeXNlbXUv cnVuc3RhdGUuaCINCj4gICAjaW5jbHVkZSAic3lzZW11L3RjZy5oIg0KPiBkaWZmIC0tZ2l0 IGEvc3lzdGVtL3BoeXNtZW0uYyBiL3N5c3RlbS9waHlzbWVtLmMNCj4gaW5kZXggM2Y5Mzdh NWU1OC4uMjZjZmI4NDQ1NCAxMDA2NDQNCj4gLS0tIGEvc3lzdGVtL3BoeXNtZW0uYw0KPiAr KysgYi9zeXN0ZW0vcGh5c21lbS5jDQo+IEBAIC02Nyw2ICs2Nyw3IEBADQo+ICAgDQo+ICAg I2luY2x1ZGUgImV4ZWMvbWVtb3J5LWludGVybmFsLmgiDQo+ICAgI2luY2x1ZGUgImV4ZWMv cmFtX2FkZHIuaCINCj4gKyNpbmNsdWRlICJzeXNlbXUvcGh5c21lbS10YXJnZXQuaCINCj4g ICANCj4gICAjaW5jbHVkZSAicWVtdS9wbWVtLmgiDQo+ICAgDQo+IGRpZmYgLS1naXQgYS90 YXJnZXQvYXJtL3RjZy9tdGVfaGVscGVyLmMgYi90YXJnZXQvYXJtL3RjZy9tdGVfaGVscGVy LmMNCj4gaW5kZXggYjAxN2IyNmQwNy4uMDk1MGExYzZmMSAxMDA2NDQNCj4gLS0tIGEvdGFy Z2V0L2FybS90Y2cvbXRlX2hlbHBlci5jDQo+ICsrKyBiL3RhcmdldC9hcm0vdGNnL210ZV9o ZWxwZXIuYw0KPiBAQCAtMjUsNiArMjUsNyBAQA0KPiAgICNpbmNsdWRlICJleGVjL3BhZ2Ut cHJvdGVjdGlvbi5oIg0KPiAgICNpZm5kZWYgQ09ORklHX1VTRVJfT05MWQ0KPiAgICNpbmNs dWRlICJleGVjL3JhbV9hZGRyLmgiDQo+ICsjaW5jbHVkZSAic3lzZW11L3BoeXNtZW0tdGFy Z2V0LmgiDQo+ICAgI2VuZGlmDQo+ICAgI2luY2x1ZGUgImV4ZWMvY3B1X2xkc3QuaCINCj4g ICAjaW5jbHVkZSAiZXhlYy9oZWxwZXItcHJvdG8uaCINCj4gZGlmZiAtLWdpdCBhL3Rhcmdl dC9wcGMva3ZtLmMgYi90YXJnZXQvcHBjL2t2bS5jDQo+IGluZGV4IDNlZmMyOGYxOGIuLmY3 NjQ5MzE0MjYgMTAwNjQ0DQo+IC0tLSBhL3RhcmdldC9wcGMva3ZtLmMNCj4gKysrIGIvdGFy Z2V0L3BwYy9rdm0uYw0KPiBAQCAtNDIsNiArNDIsNyBAQA0KPiAgICNpbmNsdWRlICJnZGJz dHViL2VudW1zLmgiDQo+ICAgI2luY2x1ZGUgImV4ZWMvbWVtYXR0cnMuaCINCj4gICAjaW5j bHVkZSAiZXhlYy9yYW1fYWRkci5oIg0KPiArI2luY2x1ZGUgInN5c2VtdS9waHlzbWVtLXRh cmdldC5oIg0KPiAgICNpbmNsdWRlICJzeXNlbXUvaG9zdG1lbS5oIg0KPiAgICNpbmNsdWRl ICJxZW11L2N1dGlscy5oIg0KPiAgICNpbmNsdWRlICJxZW11L21haW4tbG9vcC5oIg0KPiBk aWZmIC0tZ2l0IGEvdGFyZ2V0L3MzOTB4L2t2bS9rdm0uYyBiL3RhcmdldC9zMzkweC9rdm0v a3ZtLmMNCj4gaW5kZXggOGZmZTAxNTlkOC4uYzgwNDVkODczYyAxMDA2NDQNCj4gLS0tIGEv dGFyZ2V0L3MzOTB4L2t2bS9rdm0uYw0KPiArKysgYi90YXJnZXQvczM5MHgva3ZtL2t2bS5j DQo+IEBAIC00Miw2ICs0Miw3IEBADQo+ICAgI2luY2x1ZGUgInN5c2VtdS9kZXZpY2VfdHJl ZS5oIg0KPiAgICNpbmNsdWRlICJnZGJzdHViL2VudW1zLmgiDQo+ICAgI2luY2x1ZGUgImV4 ZWMvcmFtX2FkZHIuaCINCj4gKyNpbmNsdWRlICJzeXNlbXUvcGh5c21lbS10YXJnZXQuaCIN Cj4gICAjaW5jbHVkZSAidHJhY2UuaCINCj4gICAjaW5jbHVkZSAiaHcvczM5MHgvczM5MC1w Y2ktaW5zdC5oIg0KPiAgICNpbmNsdWRlICJody9zMzkweC9zMzkwLXBjaS1idXMuaCINCg0K V2l0aCB0aGUgZml4IG9uIGhlYWRlciBndWFyZCwNClJldmlld2VkLWJ5OiBQaWVycmljayBC b3V2aWVyIDxwaWVycmljay5ib3V2aWVyQGxpbmFyby5vcmc+DQoNCg==