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 44F5945516 for ; Mon, 31 Jul 2023 21:52:05 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3F8DF68C24A; Tue, 1 Aug 2023 00:52:02 +0300 (EEST) Received: from mail-lf1-f52.google.com (mail-lf1-f52.google.com [209.85.167.52]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C4B6468BD6B for ; Tue, 1 Aug 2023 00:51:55 +0300 (EEST) Received: by mail-lf1-f52.google.com with SMTP id 2adb3069b0e04-4fe0e34f498so7789537e87.2 for ; Mon, 31 Jul 2023 14:51:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1690840314; x=1691445114; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=+ErQcqbpxE7Nd9B3oDcV0AKsv1fcYqnZCnXp4iBnVSk=; b=gYPjjur9rWH3dCQd2SnaSYj22I8RtoG+MkN0+6dcprpyYytP+9OQOcq34k3bIEYvcC WNJBWK2yk8T3gQMIzk912atEUSIW124gv4spWBm9FM83vJoM2HrcE3BxRBzq7l0ixvfY eI9vN7ZI8821fLC+cAlFeoc5NTwASSfAJpBc+PpD7PGFwZCXs5Q3jVcXKe+P8q1Vl9Ix ETnTzPc8XrE/DYdHRN13QuXeVStdoUS7bCSMK3Z51sWYyWBt5yW9dlqzd5QrVO+sviLQ Qe2RTssf3hKM3bFERpLq1tMPjxYskXFdbtxJgmepoftkCbC7WgRUVnkf9w2piAxm7Syc KPZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690840314; x=1691445114; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+ErQcqbpxE7Nd9B3oDcV0AKsv1fcYqnZCnXp4iBnVSk=; b=b0/RqRCscueZczq1Wrdf3vnaaiyyJoZ+46JPG30y61M8wU4SJrOTOTCpAwhgOwFmsU huMbVKH1j32yRoCLlQnf1hcwCKMo/BXBzwgXV0/u3PvFBpqd7l4+nrDnlN4ZFEKIrzJW hnYVMtLQq/iRs4hPS6SQeK8M5TYgAJTxe2+G/8MAuksOhe0xua49USPmtyqZztz2WMHp i8qAtRouo7w0KUznFj5fVHmzhEZWGD5T6GQUkhKh3F0/rut7glGTmNKBCVf/QyeURj3u XWkWjprF+dfhpmG8TWk3WZ3t8RLtwniPuQGkK/eRiRmpE9TOqnHUPTJHwx0cWzaf91oC +Z3g== X-Gm-Message-State: ABy/qLZ0G/fMVH4antXNvGdUG0QG2Gp/Eilxsx0jrn1O85s1UQxAY7zV B/eZ6APWRYs3LtVwGdez+T5Lian+qjVimpkDGoc98PHjjEnPRe4B X-Google-Smtp-Source: APBJJlFsmsKwM+WTipbkOVJNwAXHJEnjBNECgSc98iHSWRehsNPnfgnSz0joOvmjbVQDsezyO/dwFVjXzcqG3Dpk8mM= X-Received: by 2002:a05:6512:ba7:b0:4f8:49a8:a0e2 with SMTP id b39-20020a0565120ba700b004f849a8a0e2mr1015851lfv.16.1690840313744; Mon, 31 Jul 2023 14:51:53 -0700 (PDT) MIME-Version: 1.0 References: <20230718031203.87803-1-fei.w.wang@intel.com> <20230718031203.87803-6-fei.w.wang@intel.com> In-Reply-To: From: Neal Gompa Date: Mon, 31 Jul 2023 22:51:17 +0100 Message-ID: To: FFmpeg development discussions and patches Subject: Re: [FFmpeg-devel] [PATCH v2 6/6] lavc/vaapi_encode: Add VAAPI AV1 encoder 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: Fei Wang 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: T24gTW9uLCBKdWwgMzEsIDIwMjMgYXQgOTowNOKAr1BNIE5lYWwgR29tcGEgPG5nb21wYTEzQGdt YWlsLmNvbT4gd3JvdGU6Cj4KPiBPbiBUdWUsIEp1bCAxOCwgMjAyMyBhdCA0OjEz4oCvQU0gRmVp IFdhbmcKPiA8ZmVpLncud2FuZy1hdC1pbnRlbC5jb21AZmZtcGVnLm9yZz4gd3JvdGU6Cj4gPgo+ ID4gU2lnbmVkLW9mZi1ieTogRmVpIFdhbmcgPGZlaS53LndhbmdAaW50ZWwuY29tPgo+ID4gLS0t Cj4gPiB1cGRhdGUKPiA+IDEuIHNldCBjb2xvcl9yYW5nZSBpbiBzZXF1ZW5jZSBoZWFkZXIuCj4g Pgo+ID4gIENoYW5nZWxvZyAgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCj4gPiAgY29uZmln dXJlICAgICAgICAgICAgICAgICAgICAgfCAgICAzICsKPiA+ICBkb2MvZW5jb2RlcnMudGV4aSAg ICAgICAgICAgICB8ICAgMTMgKwo+ID4gIGxpYmF2Y29kZWMvTWFrZWZpbGUgICAgICAgICAgIHwg ICAgMSArCj4gPiAgbGliYXZjb2RlYy9hbGxjb2RlY3MuYyAgICAgICAgfCAgICAxICsKPiA+ICBs aWJhdmNvZGVjL3ZhYXBpX2VuY29kZS5jICAgICB8ICAxMjUgKysrLQo+ID4gIGxpYmF2Y29kZWMv dmFhcGlfZW5jb2RlLmggICAgIHwgICAxMiArCj4gPiAgbGliYXZjb2RlYy92YWFwaV9lbmNvZGVf YXYxLmMgfCAxMjI5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4gIDggZmls ZXMgY2hhbmdlZCwgMTM2NyBpbnNlcnRpb25zKCspLCAxOCBkZWxldGlvbnMoLSkKPiA+ICBjcmVh dGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy92YWFwaV9lbmNvZGVfYXYxLmMKPiA+Cj4gPiBkaWZm IC0tZ2l0IGEvQ2hhbmdlbG9nIGIvQ2hhbmdlbG9nCj4gPiBpbmRleCAzODc2MDgyODQ0Li43YWU5 Yjg1ZDUyIDEwMDY0NAo+ID4gLS0tIGEvQ2hhbmdlbG9nCj4gPiArKysgYi9DaGFuZ2Vsb2cKPiA+ IEBAIC0yNSw2ICsyNSw3IEBAIHZlcnNpb24gPG5leHQ+Ogo+ID4gIC0gUmF3IFZWQyBiaXRzdHJl YW0gcGFyc2VyLCBtdXhlciBhbmQgZGVtdXhlcgo+ID4gIC0gQml0c3RyZWFtIGZpbHRlciBmb3Ig ZWRpdGluZyBtZXRhZGF0YSBpbiBWVkMgc3RyZWFtcwo+ID4gIC0gQml0c3RyZWFtIGZpbHRlciBm b3IgY29udmVydGluZyBWVkMgZnJvbSBNUDQgdG8gQW5uZXggQgo+ID4gKy0gVkFBUEkgQVYxIGVu Y29kZXIKPiA+Cj4gPiAgdmVyc2lvbiA2LjA6Cj4gPiAgLSBSYWRpYW5jZSBIRFIgaW1hZ2Ugc3Vw cG9ydAo+ID4gZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQo+ID4gaW5kZXggYjAx OGFiZjEzOS4uZmJjNzI5YjVjNiAxMDA3NTUKPiA+IC0tLSBhL2NvbmZpZ3VyZQo+ID4gKysrIGIv Y29uZmlndXJlCj4gPiBAQCAtMzMyMyw2ICszMzIzLDggQEAgYXYxX3Fzdl9kZWNvZGVyX3NlbGVj dD0icXN2ZGVjIgo+ID4gIGF2MV9xc3ZfZW5jb2Rlcl9zZWxlY3Q9InFzdmVuYyIKPiA+ICBhdjFf cXN2X2VuY29kZXJfZGVwcz0ibGlidnBsIgo+ID4gIGF2MV9hbWZfZW5jb2Rlcl9kZXBzPSJhbWYi Cj4gPiArYXYxX3ZhYXBpX2VuY29kZXJfZGVwcz0iVkFFbmNQaWN0dXJlUGFyYW1ldGVyQnVmZmVy QVYxIgo+ID4gK2F2MV92YWFwaV9lbmNvZGVyX3NlbGVjdD0iY2JzX2F2MSB2YWFwaV9lbmNvZGUi Cj4gPgo+ID4gICMgcGFyc2Vycwo+ID4gIGFhY19wYXJzZXJfc2VsZWN0PSJhZHRzX2hlYWRlciBt cGVnNGF1ZGlvIgo+ID4gQEAgLTcxMDQsNiArNzEwNiw3IEBAIGlmIGVuYWJsZWQgdmFhcGk7IHRo ZW4KPiA+ICAgICAgY2hlY2tfdHlwZSAidmEvdmEuaCB2YS92YV9lbmNfanBlZy5oIiAiVkFFbmNQ aWN0dXJlUGFyYW1ldGVyQnVmZmVySlBFRyIKPiA+ICAgICAgY2hlY2tfdHlwZSAidmEvdmEuaCB2 YS92YV9lbmNfdnA4LmgiICAiVkFFbmNQaWN0dXJlUGFyYW1ldGVyQnVmZmVyVlA4Igo+ID4gICAg ICBjaGVja190eXBlICJ2YS92YS5oIHZhL3ZhX2VuY192cDkuaCIgICJWQUVuY1BpY3R1cmVQYXJh bWV0ZXJCdWZmZXJWUDkiCj4gPiArICAgIGNoZWNrX3R5cGUgInZhL3ZhLmggdmEvdmFfZW5jX2F2 MS5oIiAgIlZBRW5jUGljdHVyZVBhcmFtZXRlckJ1ZmZlckFWMSIKPiA+ICBmaQo+ID4KPiA+ICBp ZiBlbmFibGVkX2FsbCBvcGVuY2wgbGliZHJtIDsgdGhlbgo+ID4gZGlmZiAtLWdpdCBhL2RvYy9l bmNvZGVycy50ZXhpIGIvZG9jL2VuY29kZXJzLnRleGkKPiA+IGluZGV4IDI1ZDZiN2YwOWUuLmZi MzMxZWJkOGUgMTAwNjQ0Cj4gPiAtLS0gYS9kb2MvZW5jb2RlcnMudGV4aQo+ID4gKysrIGIvZG9j L2VuY29kZXJzLnRleGkKPiA+IEBAIC0zOTkxLDYgKzM5OTEsMTkgQEAgQXZlcmFnZSB2YXJpYWJs ZSBiaXRyYXRlLgo+ID4gIEVhY2ggZW5jb2RlciBhbHNvIGhhcyBpdHMgb3duIHNwZWNpZmljIG9w dGlvbnM6Cj4gPiAgQHRhYmxlIEBvcHRpb24KPiA+Cj4gPiArQGl0ZW0gYXYxX3ZhYXBpCj4gPiAr QG9wdGlvbntwcm9maWxlfSBzZXRzIHRoZSB2YWx1ZSBvZiBAZW1waHtzZXFfcHJvZmlsZX0uCj4g PiArQG9wdGlvbnt0aWVyfSBzZXRzIHRoZSB2YWx1ZSBvZiBAZW1waHtzZXFfdGllcn0uCj4gPiAr QG9wdGlvbntsZXZlbH0gc2V0cyB0aGUgdmFsdWUgb2YgQGVtcGh7c2VxX2xldmVsX2lkeH0uCj4g PiArCj4gPiArQHRhYmxlIEBvcHRpb24KPiA+ICtAaXRlbSB0aWxlcwo+ID4gK1NldCB0aGUgbnVt YmVyIG9mIHRpbGVzIHRvIGVuY29kZSB0aGUgaW5wdXQgdmlkZW8gd2l0aCwgYXMgY29sdW1ucyB4 IHJvd3MuCj4gPiArKGRlZmF1bHQgaXMgMXgxKS4KPiA+ICtAaXRlbSB0aWxlX2dyb3Vwcwo+ID4g K1NldCB0aWxlIGdyb3VwcyBudW1iZXIgKGRlZmF1bHQgaXMgMSkuCj4gPiArQGVuZCB0YWJsZQo+ ID4gKwo+ID4gIEBpdGVtIGgyNjRfdmFhcGkKPiA+ICBAb3B0aW9ue3Byb2ZpbGV9IHNldHMgdGhl IHZhbHVlIG9mIEBlbXBoe3Byb2ZpbGVfaWRjfSBhbmQgdGhlIEBlbXBoe2NvbnN0cmFpbnRfc2V0 Kl9mbGFnfXMuCj4gPiAgQG9wdGlvbntsZXZlbH0gc2V0cyB0aGUgdmFsdWUgb2YgQGVtcGh7bGV2 ZWxfaWRjfS4KPiA+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL01ha2VmaWxlIGIvbGliYXZjb2Rl Yy9NYWtlZmlsZQo+ID4gaW5kZXggM2NkNTk5N2U2NC4uZmUxZTZhYTk5ZCAxMDA2NDQKPiA+IC0t LSBhL2xpYmF2Y29kZWMvTWFrZWZpbGUKPiA+ICsrKyBiL2xpYmF2Y29kZWMvTWFrZWZpbGUKPiA+ IEBAIC0yNTksNiArMjU5LDcgQEAgT0JKUy0kKENPTkZJR19BVjFfTUVESUFDT0RFQ19ERUNPREVS KSAgKz0gbWVkaWFjb2RlY2RlYy5vCj4gPiAgT0JKUy0kKENPTkZJR19BVjFfTUVESUFDT0RFQ19F TkNPREVSKSAgKz0gbWVkaWFjb2RlY2VuYy5vCj4gPiAgT0JKUy0kKENPTkZJR19BVjFfTlZFTkNf RU5DT0RFUikgICAgICAgKz0gbnZlbmNfYXYxLm8gbnZlbmMubwo+ID4gIE9CSlMtJChDT05GSUdf QVYxX1FTVl9FTkNPREVSKSAgICAgICAgICs9IHFzdmVuY19hdjEubwo+ID4gK09CSlMtJChDT05G SUdfQVYxX1ZBQVBJX0VOQ09ERVIpICAgICAgICs9IHZhYXBpX2VuY29kZV9hdjEubyBhdjFfcHJv ZmlsZV9sZXZlbC5vCj4gPiAgT0JKUy0kKENPTkZJR19BVlJOX0RFQ09ERVIpICAgICAgICAgICAg Kz0gYXZybmRlYy5vCj4gPiAgT0JKUy0kKENPTkZJR19BVlJQX0RFQ09ERVIpICAgICAgICAgICAg Kz0gcjIxMGRlYy5vCj4gPiAgT0JKUy0kKENPTkZJR19BVlJQX0VOQ09ERVIpICAgICAgICAgICAg Kz0gcjIxMGVuYy5vCj4gPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9hbGxjb2RlY3MuYyBiL2xp YmF2Y29kZWMvYWxsY29kZWNzLmMKPiA+IGluZGV4IDg3NzVkMTVhNGYuLmM0M2MxZDdiNDggMTAw NjQ0Cj4gPiAtLS0gYS9saWJhdmNvZGVjL2FsbGNvZGVjcy5jCj4gPiArKysgYi9saWJhdmNvZGVj L2FsbGNvZGVjcy5jCj4gPiBAQCAtODQ0LDYgKzg0NCw3IEBAIGV4dGVybiBjb25zdCBGRkNvZGVj IGZmX2F2MV9udmVuY19lbmNvZGVyOwo+ID4gIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2F2MV9x c3ZfZGVjb2RlcjsKPiA+ICBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9hdjFfcXN2X2VuY29kZXI7 Cj4gPiAgZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfYXYxX2FtZl9lbmNvZGVyOwo+ID4gK2V4dGVy biBjb25zdCBGRkNvZGVjIGZmX2F2MV92YWFwaV9lbmNvZGVyOwo+ID4gIGV4dGVybiBjb25zdCBG RkNvZGVjIGZmX2xpYm9wZW5oMjY0X2VuY29kZXI7Cj4gPiAgZXh0ZXJuIGNvbnN0IEZGQ29kZWMg ZmZfbGlib3BlbmgyNjRfZGVjb2RlcjsKPiA+ICBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9oMjY0 X2FtZl9lbmNvZGVyOwo+ID4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdmFhcGlfZW5jb2RlLmMg Yi9saWJhdmNvZGVjL3ZhYXBpX2VuY29kZS5jCj4gPiBpbmRleCAyNjA0ZjEyYjllLi4yOTA3ZTE1 OWZiIDEwMDY0NAo+ID4gLS0tIGEvbGliYXZjb2RlYy92YWFwaV9lbmNvZGUuYwo+ID4gKysrIGIv bGliYXZjb2RlYy92YWFwaV9lbmNvZGUuYwo+ID4gQEAgLTY2OSw2ICs2NjksMTUgQEAgc3RhdGlj IGludCB2YWFwaV9lbmNvZGVfc2V0X291dHB1dF90aW1lc3RhbXAoQVZDb2RlY0NvbnRleHQgKmF2 Y3R4LAo+ID4gIHsKPiA+ICAgICAgVkFBUElFbmNvZGVDb250ZXh0ICpjdHggPSBhdmN0eC0+cHJp dl9kYXRhOwo+ID4KPiA+ICsgICAgLy8gQVYxIHBhY2tzIFAgZnJhbWUgYW5kIG5leHQgQiBmcmFt ZSBpbnRvIG9uZSBwa3QsIGFuZCB1c2VzIHRoZSBvdGhlcgo+ID4gKyAgICAvLyByZXBlYXQgZnJh bWUgaGVhZGVyIHBrdCBhdCB0aGUgZGlzcGxheSBvcmRlciBwb3NpdGlvbiBvZiB0aGUgUCBmcmFt ZQo+ID4gKyAgICAvLyB0byBpbmRpY2F0ZSBpdHMgZnJhbWUgaW5kZXguIEVhY2ggZnJhbWUgaGFz IGEgY29ycmVzcG9uZGluZyBwa3QgaW4gaXRzCj4gPiArICAgIC8vIGRpc3BsYXkgb3JkZXIgcG9z aXRpb24uIFNvIGRvbid0IG5lZWQgdG8gY29uc2lkZXIgZGVsYXkgZm9yIEFWMSB0aW1lc3RhbXAu Cj4gPiArICAgIGlmIChhdmN0eC0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfQVYxKSB7Cj4gPiAr ICAgICAgICBwa3QtPmR0cyA9IHBrdC0+cHRzIC0gY3R4LT5kdHNfcHRzX2RpZmY7Cj4gPiArICAg ICAgICByZXR1cm4gMDsKPiA+ICsgICAgfQo+ID4gKwo+ID4gICAgICBpZiAoY3R4LT5vdXRwdXRf ZGVsYXkgPT0gMCkgewo+ID4gICAgICAgICAgcGt0LT5kdHMgPSBwa3QtPnB0czsKPiA+ICAgICAg fSBlbHNlIGlmIChwaWMtPmVuY29kZV9vcmRlciA8IGN0eC0+ZGVjb2RlX2RlbGF5KSB7Cj4gPiBA QCAtNjg5LDkgKzY5OCwxMCBAQCBzdGF0aWMgaW50IHZhYXBpX2VuY29kZV9vdXRwdXQoQVZDb2Rl Y0NvbnRleHQgKmF2Y3R4LAo+ID4gIHsKPiA+ICAgICAgVkFBUElFbmNvZGVDb250ZXh0ICpjdHgg PSBhdmN0eC0+cHJpdl9kYXRhOwo+ID4gICAgICBWQUNvZGVkQnVmZmVyU2VnbWVudCAqYnVmX2xp c3QsICpidWY7Cj4gPiAtICAgIFZBU3RhdHVzIHZhczsKPiA+ICsgICAgQVZQYWNrZXQgKnBrdF9w dHIgPSBwa3Q7Cj4gPiAgICAgIGludCB0b3RhbF9zaXplID0gMDsKPiA+ICAgICAgdWludDhfdCAq cHRyOwo+ID4gKyAgICBWQVN0YXR1cyB2YXM7Cj4gPiAgICAgIGludCBlcnI7Cj4gPgo+ID4gICAg ICBlcnIgPSB2YWFwaV9lbmNvZGVfd2FpdChhdmN0eCwgcGljKTsKPiA+IEBAIC03MTEsMTEgKzcy MSw1MiBAQCBzdGF0aWMgaW50IHZhYXBpX2VuY29kZV9vdXRwdXQoQVZDb2RlY0NvbnRleHQgKmF2 Y3R4LAo+ID4gICAgICBmb3IgKGJ1ZiA9IGJ1Zl9saXN0OyBidWY7IGJ1ZiA9IGJ1Zi0+bmV4dCkK PiA+ICAgICAgICAgIHRvdGFsX3NpemUgKz0gYnVmLT5zaXplOwo+ID4KPiA+IC0gICAgZXJyID0g ZmZfZ2V0X2VuY29kZV9idWZmZXIoYXZjdHgsIHBrdCwgdG90YWxfc2l6ZSwgMCk7Cj4gPiAtICAg IHB0ciA9IHBrdC0+ZGF0YTsKPiA+ICsgICAgLyoqIHJlcGFjayBhdjEgY29kZWQgZnJhbWUgZm9y IG5vdCBkaXNwbGF5IGFuZCByZXBlYXQgZnJhbWVzICovCj4gPiArICAgIGlmIChhdmN0eC0+Y29k ZWNfaWQgPT0gQVZfQ09ERUNfSURfQVYxKSB7Cj4gPiArICAgICAgICBpbnQgZGlzcGxheV9mcmFt ZSA9IHBpYy0+ZGlzcGxheV9vcmRlciA8PSBwaWMtPmVuY29kZV9vcmRlcjsKPiA+Cj4gPiAtICAg IGlmIChlcnIgPCAwKQo+ID4gLSAgICAgICAgZ290byBmYWlsX21hcHBlZDsKPiA+ICsgICAgICAg IGlmIChkaXNwbGF5X2ZyYW1lKSB7Cj4gPiArICAgICAgICAgICAgdG90YWxfc2l6ZSArPSBjdHgt PmhlYWRlcl9kYXRhX3NpemU7Cj4gPiArICAgICAgICAgICAgZXJyID0gZmZfZ2V0X2VuY29kZV9i dWZmZXIoYXZjdHgsIHBrdCwgdG90YWxfc2l6ZSwgMCk7Cj4gPiArICAgICAgICAgICAgaWYgKGVy ciA8IDApCj4gPiArICAgICAgICAgICAgICAgIGdvdG8gZmFpbF9tYXBwZWQ7Cj4gPiArICAgICAg ICAgICAgcHRyID0gcGt0LT5kYXRhOwo+ID4gKwo+ID4gKyAgICAgICAgICAgIGlmIChjdHgtPmhl YWRlcl9kYXRhX3NpemUpIHsKPiA+ICsgICAgICAgICAgICAgICAgbWVtY3B5KHB0ciwgY3R4LT5o ZWFkZXJfZGF0YSwgY3R4LT5oZWFkZXJfZGF0YV9zaXplKTsKPiA+ICsgICAgICAgICAgICAgICAg cHRyICs9IGN0eC0+aGVhZGVyX2RhdGFfc2l6ZTsKPiA+ICsgICAgICAgICAgICAgICAgY3R4LT5o ZWFkZXJfZGF0YV9zaXplID0gMDsKPiA+ICsgICAgICAgICAgICB9Cj4gPiArICAgICAgICB9IGVs c2Ugewo+ID4gKyAgICAgICAgICAgIGN0eC0+aGVhZGVyX2RhdGEgPSBhdl9yZWFsbG9jKGN0eC0+ aGVhZGVyX2RhdGEsIHRvdGFsX3NpemUpOwo+ID4gKyAgICAgICAgICAgIGlmICghY3R4LT5oZWFk ZXJfZGF0YSkgewo+ID4gKyAgICAgICAgICAgICAgICBlcnIgPSBBVkVSUk9SKEVOT01FTSk7Cj4g PiArICAgICAgICAgICAgICAgIGdvdG8gZmFpbF9tYXBwZWQ7Cj4gPiArICAgICAgICAgICAgfQo+ ID4gKyAgICAgICAgICAgIHB0ciA9IGN0eC0+aGVhZGVyX2RhdGE7Cj4gPiArICAgICAgICAgICAg Y3R4LT5oZWFkZXJfZGF0YV9zaXplID0gdG90YWxfc2l6ZTsKPiA+ICsKPiA+ICsgICAgICAgICAg ICBpZiAocGljLT50YWlsX3NpemUpIHsKPiA+ICsgICAgICAgICAgICAgICAgaWYgKGN0eC0+dGFp bF9wa3QtPnNpemUpIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgIGVyciA9IEFWRVJST1IoQVZF UlJPUl9CVUcpOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsX21hcHBlZDsKPiA+ ICsgICAgICAgICAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgICBlcnIgPSBmZl9n ZXRfZW5jb2RlX2J1ZmZlcihhdmN0eCwgY3R4LT50YWlsX3BrdCwgcGljLT50YWlsX3NpemUsIDAp Owo+ID4gKyAgICAgICAgICAgICAgICBpZiAoZXJyIDwgMCkKPiA+ICsgICAgICAgICAgICAgICAg ICAgIGdvdG8gZmFpbF9tYXBwZWQ7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgIG1lbWNweShj dHgtPnRhaWxfcGt0LT5kYXRhLCBwaWMtPnRhaWxfZGF0YSwgcGljLT50YWlsX3NpemUpOwo+ID4g KyAgICAgICAgICAgICAgICBwa3RfcHRyID0gY3R4LT50YWlsX3BrdDsKPiA+ICsgICAgICAgICAg ICB9Cj4gPiArICAgICAgICB9Cj4gPiArICAgIH0gZWxzZSB7Cj4gPiArICAgICAgICBlcnIgPSBm Zl9nZXRfZW5jb2RlX2J1ZmZlcihhdmN0eCwgcGt0LCB0b3RhbF9zaXplLCAwKTsKPiA+ICsgICAg ICAgIHB0ciA9IHBrdC0+ZGF0YTsKPiA+ICsKPiA+ICsgICAgICAgIGlmIChlcnIgPCAwKQo+ID4g KyAgICAgICAgICAgIGdvdG8gZmFpbF9tYXBwZWQ7Cj4gPiArICAgIH0KPiA+Cj4gPiAgICAgIGZv ciAoYnVmID0gYnVmX2xpc3Q7IGJ1ZjsgYnVmID0gYnVmLT5uZXh0KSB7Cj4gPiAgICAgICAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIk91dHB1dCBidWZmZXI6ICV1IGJ5dGVzICIKPiA+ IEBAIC03MjYsMTAgKzc3NywxMCBAQCBzdGF0aWMgaW50IHZhYXBpX2VuY29kZV9vdXRwdXQoQVZD b2RlY0NvbnRleHQgKmF2Y3R4LAo+ID4gICAgICB9Cj4gPgo+ID4gICAgICBpZiAocGljLT50eXBl ID09IFBJQ1RVUkVfVFlQRV9JRFIpCj4gPiAtICAgICAgICBwa3QtPmZsYWdzIHw9IEFWX1BLVF9G TEFHX0tFWTsKPiA+ICsgICAgICAgIHBrdF9wdHItPmZsYWdzIHw9IEFWX1BLVF9GTEFHX0tFWTsK PiA+Cj4gPiAtICAgIHBrdC0+cHRzID0gcGljLT5wdHM7Cj4gPiAtICAgIHBrdC0+ZHVyYXRpb24g PSBwaWMtPmR1cmF0aW9uOwo+ID4gKyAgICBwa3RfcHRyLT5wdHMgPSBwaWMtPnB0czsKPiA+ICsg ICAgcGt0X3B0ci0+ZHVyYXRpb24gPSBwaWMtPmR1cmF0aW9uOwo+ID4KPiA+ICAgICAgdmFzID0g dmFVbm1hcEJ1ZmZlcihjdHgtPmh3Y3R4LT5kaXNwbGF5LCBwaWMtPm91dHB1dF9idWZmZXIpOwo+ ID4gICAgICBpZiAodmFzICE9IFZBX1NUQVRVU19TVUNDRVNTKSB7Cj4gPiBAQCAtNzQyLDggKzc5 Myw4IEBAIHN0YXRpYyBpbnQgdmFhcGlfZW5jb2RlX291dHB1dChBVkNvZGVjQ29udGV4dCAqYXZj dHgsCj4gPiAgICAgIC8vIGZvciBuby1kZWxheSBlbmNvZGVycyB0aGlzIGlzIGhhbmRsZWQgaW4g Z2VuZXJpYyBjb2RlYwo+ID4gICAgICBpZiAoYXZjdHgtPmNvZGVjLT5jYXBhYmlsaXRpZXMgJiBB Vl9DT0RFQ19DQVBfREVMQVkgJiYKPiA+ICAgICAgICAgIGF2Y3R4LT5mbGFncyAmIEFWX0NPREVD X0ZMQUdfQ09QWV9PUEFRVUUpIHsKPiA+IC0gICAgICAgIHBrdC0+b3BhcXVlICAgICA9IHBpYy0+ b3BhcXVlOwo+ID4gLSAgICAgICAgcGt0LT5vcGFxdWVfcmVmID0gcGljLT5vcGFxdWVfcmVmOwo+ ID4gKyAgICAgICAgcGt0X3B0ci0+b3BhcXVlICAgICA9IHBpYy0+b3BhcXVlOwo+ID4gKyAgICAg ICAgcGt0X3B0ci0+b3BhcXVlX3JlZiA9IHBpYy0+b3BhcXVlX3JlZjsKPiA+ICAgICAgICAgIHBp Yy0+b3BhcXVlX3JlZiA9IE5VTEw7Cj4gPiAgICAgIH0KPiA+Cj4gPiBAQCAtNzUyLDYgKzgwMyw5 IEBAIHN0YXRpYyBpbnQgdmFhcGlfZW5jb2RlX291dHB1dChBVkNvZGVjQ29udGV4dCAqYXZjdHgs Cj4gPgo+ID4gICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIk91dHB1dCByZWFkIGZv ciBwaWMgJSJQUklkNjQiLyUiUFJJZDY0Ii5cbiIsCj4gPiAgICAgICAgICAgICBwaWMtPmRpc3Bs YXlfb3JkZXIsIHBpYy0+ZW5jb2RlX29yZGVyKTsKPiA+ICsKPiA+ICsgICAgdmFhcGlfZW5jb2Rl X3NldF9vdXRwdXRfdGltZXN0YW1wKGF2Y3R4LCBwaWMsIHBrdF9wdHIpOwo+ID4gKwo+ID4gICAg ICByZXR1cm4gMDsKPiA+Cj4gPiAgZmFpbF9tYXBwZWQ6Cj4gPiBAQCAtMTEyOCw5ICsxMTgyLDE5 IEBAIHN0YXRpYyBpbnQgdmFhcGlfZW5jb2RlX3BpY2tfbmV4dChBVkNvZGVjQ29udGV4dCAqYXZj dHgsCj4gPgo+ID4gICAgICB2YWFwaV9lbmNvZGVfYWRkX3JlZihhdmN0eCwgcGljLCBwaWMsIDAs IDEsIDApOwo+ID4gICAgICBpZiAocGljLT50eXBlICE9IFBJQ1RVUkVfVFlQRV9JRFIpIHsKPiA+ IC0gICAgICAgIHZhYXBpX2VuY29kZV9hZGRfcmVmKGF2Y3R4LCBwaWMsIHN0YXJ0LAo+ID4gLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGljLT50eXBlID09IFBJQ1RVUkVfVFlQRV9QLAo+ ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYl9jb3VudGVyID4gMCwgMCk7Cj4gPiAr ICAgICAgICAvLyBUT0RPOiBhcHBseSBib3RoIHByZXZpb3VzIGFuZCBmb3J3YXJkIG11bHRpIHJl ZmVyZW5jZSBmb3IgYWxsIHZhYXBpIGVuY29kZXJzLgo+ID4gKyAgICAgICAgLy8gQW5kIEwwL0wx IHJlZmVyZW5jZSBmcmFtZSBudW1iZXIgY2FuIGJlIHNldCBkeW5hbWljYWxseSB0aHJvdWdoIHF1 ZXJ5Cj4gPiArICAgICAgICAvLyBWQUNvbmZpZ0F0dHJpYkVuY01heFJlZkZyYW1lcyBhdHRyaWJ1 dGUuCj4gPiArICAgICAgICBpZiAoYXZjdHgtPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0FWMSkg ewo+ID4gKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjdHgtPm5iX25leHRfcHJldjsgaSsr KQo+ID4gKyAgICAgICAgICAgICAgICB2YWFwaV9lbmNvZGVfYWRkX3JlZihhdmN0eCwgcGljLCBj dHgtPm5leHRfcHJldltpXSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGljLT50eXBlID09IFBJQ1RVUkVfVFlQRV9QLAo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBiX2NvdW50ZXIgPiAwLCAwKTsKPiA+ICsgICAgICAgIH0gZWxzZQo+ ID4gKyAgICAgICAgICAgIHZhYXBpX2VuY29kZV9hZGRfcmVmKGF2Y3R4LCBwaWMsIHN0YXJ0LAo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpYy0+dHlwZSA9PSBQSUNUVVJF X1RZUEVfUCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiX2NvdW50ZXIg PiAwLCAwKTsKPiA+ICsKPiA+ICAgICAgICAgIHZhYXBpX2VuY29kZV9hZGRfcmVmKGF2Y3R4LCBw aWMsIGN0eC0+bmV4dF9wcmV2W2N0eC0+bmJfbmV4dF9wcmV2IC0gMV0sIDAsIDAsIDEpOwo+ID4g ICAgICB9Cj4gPgo+ID4gQEAgLTEyOTIsNiArMTM1NiwxOSBAQCBpbnQgZmZfdmFhcGlfZW5jb2Rl X3JlY2VpdmVfcGFja2V0KEFWQ29kZWNDb250ZXh0ICphdmN0eCwgQVZQYWNrZXQgKnBrdCkKPiA+ ICAgICAgQVZGcmFtZSAqZnJhbWUgPSBjdHgtPmZyYW1lOwo+ID4gICAgICBpbnQgZXJyOwo+ID4K PiA+ICtzdGFydDoKPiA+ICsgICAgLyoqIGlmIG5vIEIgZnJhbWUgYmVmb3JlIHJlcGVhdCBQIGZy YW1lLCBzZW50IHJlcGVhdCBQIGZyYW1lIG91dC4gKi8KPiA+ICsgICAgaWYgKGF2Y3R4LT5jb2Rl Y19pZCA9PSBBVl9DT0RFQ19JRF9BVjEgJiYgY3R4LT50YWlsX3BrdC0+c2l6ZSkgewo+ID4gKyAg ICAgICAgZm9yIChWQUFQSUVuY29kZVBpY3R1cmUgKnRtcCA9IGN0eC0+cGljX3N0YXJ0OyB0bXA7 IHRtcCA9IHRtcC0+bmV4dCkgewo+ID4gKyAgICAgICAgICAgIGlmICh0bXAtPnR5cGUgPT0gUElD VFVSRV9UWVBFX0IgJiYgdG1wLT5wdHMgPCBjdHgtPnRhaWxfcGt0LT5wdHMpCj4gPiArICAgICAg ICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgICAgICAgIGVsc2UgaWYgKCF0bXAtPm5leHQpIHsK PiA+ICsgICAgICAgICAgICAgICAgYXZfcGFja2V0X21vdmVfcmVmKHBrdCwgY3R4LT50YWlsX3Br dCk7Cj4gPiArICAgICAgICAgICAgICAgIGdvdG8gZW5kOwo+ID4gKyAgICAgICAgICAgIH0KPiA+ ICsgICAgICAgIH0KPiA+ICsgICAgfQo+ID4gKwo+ID4gICAgICBlcnIgPSBmZl9lbmNvZGVfZ2V0 X2ZyYW1lKGF2Y3R4LCBmcmFtZSk7Cj4gPiAgICAgIGlmIChlcnIgPCAwICYmIGVyciAhPSBBVkVS Uk9SX0VPRikKPiA+ICAgICAgICAgIHJldHVybiBlcnI7Cj4gPiBAQCAtMTM1NiwxNyArMTQzMywy MSBAQCBpbnQgZmZfdmFhcGlfZW5jb2RlX3JlY2VpdmVfcGFja2V0KEFWQ29kZWNDb250ZXh0ICph dmN0eCwgQVZQYWNrZXQgKnBrdCkKPiA+ICAgICAgICAgIHJldHVybiBlcnI7Cj4gPiAgICAgIH0K PiA+Cj4gPiAtICAgIHZhYXBpX2VuY29kZV9zZXRfb3V0cHV0X3RpbWVzdGFtcChhdmN0eCwgcGlj LCBwa3QpOwo+ID4gLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIk91dHB1dCBwYWNr ZXQ6IHB0cyAlIlBSSWQ2NCIsIGR0cyAlIlBSSWQ2NCIsICIKPiA+IC0gICAgICAgICAgICJzaXpl ICV1IGJ5dGVzLlxuIiwgcGt0LT5wdHMsIHBrdC0+ZHRzLCBwa3QtPnNpemUpOwo+ID4gLQo+ID4g ICAgICBjdHgtPm91dHB1dF9vcmRlciA9IHBpYy0+ZW5jb2RlX29yZGVyOwo+ID4gICAgICB2YWFw aV9lbmNvZGVfY2xlYXJfb2xkKGF2Y3R4KTsKPiA+Cj4gPiArICAgIC8qKiBsb29wIHRvIGdldCBh biBhdmFpbGFibGUgcGt0IGluIGVuY29kZXIgZmx1c2hpbmcuICovCj4gPiArICAgIGlmIChjdHgt PmVuZF9vZl9zdHJlYW0gJiYgIXBrdC0+c2l6ZSkKPiA+ICsgICAgICAgIGdvdG8gc3RhcnQ7Cj4g PiArCj4gPiArZW5kOgo+ID4gKyAgICBpZiAocGt0LT5zaXplKQo+ID4gKyAgICAgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfREVCVUcsICJPdXRwdXQgcGFja2V0OiBwdHMgJSJQUklkNjQiLCBkdHMg JSJQUklkNjQiLCAiCj4gPiArICAgICAgICAgICAgICAgInNpemUgJXUgYnl0ZXMuXG4iLCBwa3Qt PnB0cywgcGt0LT5kdHMsIHBrdC0+c2l6ZSk7Cj4gPiArCj4gPiAgICAgIHJldHVybiAwOwo+ID4g IH0KPiA+Cj4gPiAtCj4gPiAgc3RhdGljIGF2X2NvbGQgdm9pZCB2YWFwaV9lbmNvZGVfYWRkX2ds b2JhbF9wYXJhbShBVkNvZGVjQ29udGV4dCAqYXZjdHgsIGludCB0eXBlLAo+ID4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYnVmZmVyLCBz aXplX3Qgc2l6ZSkKPiA+ICB7Cj4gPiBAQCAtMjY2Nyw2ICsyNzQ4LDEyIEBAIGF2X2NvbGQgaW50 IGZmX3ZhYXBpX2VuY29kZV9pbml0KEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiA+ICAgICAgY3R4 LT5kZXZpY2UgPSAoQVZIV0RldmljZUNvbnRleHQqKWN0eC0+ZGV2aWNlX3JlZi0+ZGF0YTsKPiA+ ICAgICAgY3R4LT5od2N0eCA9IGN0eC0+ZGV2aWNlLT5od2N0eDsKPiA+Cj4gPiArICAgIGN0eC0+ dGFpbF9wa3QgPSBhdl9wYWNrZXRfYWxsb2MoKTsKPiA+ICsgICAgaWYgKCFjdHgtPnRhaWxfcGt0 KSB7Cj4gPiArICAgICAgICBlcnIgPSBBVkVSUk9SKEVOT01FTSk7Cj4gPiArICAgICAgICBnb3Rv IGZhaWw7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICAgICAgZXJyID0gdmFhcGlfZW5jb2RlX3Byb2Zp bGVfZW50cnlwb2ludChhdmN0eCk7Cj4gPiAgICAgIGlmIChlcnIgPCAwKQo+ID4gICAgICAgICAg Z290byBmYWlsOwo+ID4gQEAgLTI4NTksOSArMjk0NiwxMSBAQCBhdl9jb2xkIGludCBmZl92YWFw aV9lbmNvZGVfY2xvc2UoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQo+ID4gICAgICB9Cj4gPgo+ID4g ICAgICBhdl9mcmFtZV9mcmVlKCZjdHgtPmZyYW1lKTsKPiA+ICsgICAgYXZfcGFja2V0X2ZyZWUo JmN0eC0+dGFpbF9wa3QpOwo+ID4KPiA+ICAgICAgYXZfZnJlZXAoJmN0eC0+Y29kZWNfc2VxdWVu Y2VfcGFyYW1zKTsKPiA+ICAgICAgYXZfZnJlZXAoJmN0eC0+Y29kZWNfcGljdHVyZV9wYXJhbXMp Owo+ID4gKyAgICBhdl9mcmVlcCgmY3R4LT5oZWFkZXJfZGF0YSk7Cj4gPiAgICAgIGF2X2ZpZm9f ZnJlZXAyKCZjdHgtPmVuY29kZV9maWZvKTsKPiA+Cj4gPiAgICAgIGF2X2J1ZmZlcl91bnJlZigm Y3R4LT5yZWNvbl9mcmFtZXNfcmVmKTsKPiA+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3ZhYXBp X2VuY29kZS5oIGIvbGliYXZjb2RlYy92YWFwaV9lbmNvZGUuaAo+ID4gaW5kZXggZDU0NTJhMzdi My4uMDNkZjhkNmQ0NiAxMDA2NDQKPiA+IC0tLSBhL2xpYmF2Y29kZWMvdmFhcGlfZW5jb2RlLmgK PiA+ICsrKyBiL2xpYmF2Y29kZWMvdmFhcGlfZW5jb2RlLmgKPiA+IEBAIC0xMzMsNiArMTMzLDEx IEBAIHR5cGVkZWYgc3RydWN0IFZBQVBJRW5jb2RlUGljdHVyZSB7Cj4gPgo+ID4gICAgICBpbnQg ICAgICAgICAgbmJfc2xpY2VzOwo+ID4gICAgICBWQUFQSUVuY29kZVNsaWNlICpzbGljZXM7Cj4g PiArCj4gPiArICAgIC8qKiBUYWlsIGRhdGEgb2YgY3VycmVudCBwaWMsIHVzZWQgb25seSBmb3Ig cmVwZWF0IGhlYWRlciBvZiBBVjEuICovCj4gPiArICAgIGNoYXIgdGFpbF9kYXRhW01BWF9QQVJB TV9CVUZGRVJfU0laRV07Cj4gPiArICAgIC8qKiBCeXRlIGxlbmd0aCBvZiB0YWlsX2RhdGEuICov Cj4gPiArICAgIHNpemVfdCB0YWlsX3NpemU7Cj4gPiAgfSBWQUFQSUVuY29kZVBpY3R1cmU7Cj4g Pgo+ID4gIHR5cGVkZWYgc3RydWN0IFZBQVBJRW5jb2RlUHJvZmlsZSB7Cj4gPiBAQCAtMzY3LDYg KzM3MiwxMyBAQCB0eXBlZGVmIHN0cnVjdCBWQUFQSUVuY29kZUNvbnRleHQgewo+ID4gICAgICBB VkZpZm8gICAgICAgICAgKmVuY29kZV9maWZvOwo+ID4gICAgICAvLyBNYXggbnVtYmVyIG9mIGZy YW1lIGJ1ZmZlcmVkIGluIGVuY29kZXIuCj4gPiAgICAgIGludCAgICAgICAgICAgICBhc3luY19k ZXB0aDsKPiA+ICsKPiA+ICsgICAgLyoqIEhlYWQgZGF0YSBmb3IgY3VycmVudCBvdXRwdXQgcGt0 LCB1c2VkIG9ubHkgZm9yIEFWMS4gKi8KPiA+ICsgICAgdm9pZCAgKmhlYWRlcl9kYXRhOwo+ID4g KyAgICBzaXplX3QgaGVhZGVyX2RhdGFfc2l6ZTsKPiA+ICsKPiA+ICsgICAgLyoqIFN0b3JlIGF2 MSByZXBlYXQgZnJhbWUgaGVhZGVyIHBrdC4gKi8KPiA+ICsgICAgQVZQYWNrZXQgKnRhaWxfcGt0 Owo+ID4gIH0gVkFBUElFbmNvZGVDb250ZXh0Owo+ID4KPiA+ICBlbnVtIHsKPiA+IGRpZmYgLS1n aXQgYS9saWJhdmNvZGVjL3ZhYXBpX2VuY29kZV9hdjEuYyBiL2xpYmF2Y29kZWMvdmFhcGlfZW5j b2RlX2F2MS5jCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMDAwMC4u Nzc4YzViMzVjNwo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvbGliYXZjb2RlYy92YWFwaV9l bmNvZGVfYXYxLmMKPiA+IEBAIC0wLDAgKzEsMTIyOSBAQAo+ID4gKy8qCj4gPiArICogQ29weXJp Z2h0IChjKSAyMDIzIEludGVsIENvcnBvcmF0aW9uCj4gPiArICoKPiA+ICsgKiBUaGlzIGZpbGUg aXMgcGFydCBvZiBGRm1wZWcuCj4gPiArICoKPiA+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4gPiArICogbW9kaWZ5IGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ID4gKyAqIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgo+ ID4gKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgo+ID4gKyAqCj4gPiArICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gPiArICogYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiA+ICsgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlIEdOVQo+ID4gKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCj4gPiArICoKPiA+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gPiArICogTGljZW5zZSBhbG9uZyB3aXRo IEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+ID4gKyAqIEZvdW5k YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg MDIxMTAtMTMwMSBVU0EKPiA+ICsgKi8KPiA+ICsKPiA+ICsjaW5jbHVkZSA8dmEvdmEuaD4KPiA+ ICsjaW5jbHVkZSA8dmEvdmFfZW5jX2F2MS5oPgo+ID4gKwo+ID4gKyNpbmNsdWRlICJsaWJhdnV0 aWwvcGl4ZGVzYy5oIgo+ID4gKyNpbmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiCj4gPiArCj4gPiAr I2luY2x1ZGUgImNic19hdjEuaCIKPiA+ICsjaW5jbHVkZSAicHV0X2JpdHMuaCIKPiA+ICsjaW5j bHVkZSAiY29kZWNfaW50ZXJuYWwuaCIKPiA+ICsjaW5jbHVkZSAiYXYxX3Byb2ZpbGVfbGV2ZWwu aCIKPiA+ICsjaW5jbHVkZSAidmFhcGlfZW5jb2RlLmgiCj4gPiArCj4gPiArI2RlZmluZSBBVjFf TUFYX1FVQU5UIDI1NQo+ID4gKwo+ID4gK3R5cGVkZWYgc3RydWN0IFZBQVBJRW5jb2RlQVYxUGlj dHVyZSB7Cj4gPiArICAgIGludDY0X3QgbGFzdF9pZHJfZnJhbWU7Cj4gPiArICAgIGludCBzbG90 Owo+ID4gK30gVkFBUElFbmNvZGVBVjFQaWN0dXJlOwo+ID4gKwo+ID4gK3R5cGVkZWYgc3RydWN0 IFZBQVBJRW5jb2RlQVYxQ29udGV4dCB7Cj4gPiArICAgIFZBQVBJRW5jb2RlQ29udGV4dCBjb21t b247Cj4gPiArICAgIEFWMVJhd09CVSBzaDsgLyoqPCBzZXF1ZW5jZSBoZWFkZXIuKi8KPiA+ICsg ICAgQVYxUmF3T0JVIGZoOyAvKio8IGZyYW1lIGhlYWRlci4qLwo+ID4gKyAgICBDb2RlZEJpdHN0 cmVhbUNvbnRleHQgKmNiYzsKPiA+ICsgICAgQ29kZWRCaXRzdHJlYW1GcmFnbWVudCBjdXJyZW50 X29idTsKPiA+ICsgICAgVkFDb25maWdBdHRyaWJWYWxFbmNBVjEgYXR0cjsKPiA+ICsgICAgVkFD b25maWdBdHRyaWJWYWxFbmNBVjFFeHQxIGF0dHJfZXh0MTsKPiA+ICsgICAgVkFDb25maWdBdHRy aWJWYWxFbmNBVjFFeHQyIGF0dHJfZXh0MjsKPiA+ICsKPiA+ICsgICAgY2hhciBzaF9kYXRhW01B WF9QQVJBTV9CVUZGRVJfU0laRV07IC8qKjwgY29kZWQgc2VxdWVuY2UgaGVhZGVyIGRhdGEuICov Cj4gPiArICAgIHNpemVfdCBzaF9kYXRhX2xlbjsgLyoqPCBiaXQgbGVuZ3RoIG9mIHNoX2RhdGEu ICovCj4gPiArICAgIGNoYXIgZmhfZGF0YVtNQVhfUEFSQU1fQlVGRkVSX1NJWkVdOyAvKio8IGNv ZGVkIGZyYW1lIGhlYWRlciBkYXRhLiAqLwo+ID4gKyAgICBzaXplX3QgZmhfZGF0YV9sZW47IC8q KjwgYml0IGxlbmd0aCBvZiBmaF9kYXRhLiAqLwo+ID4gKwo+ID4gKyAgICB1aW50OF90IHVuaWZv cm1fdGlsZTsKPiA+ICsgICAgdWludDhfdCB1c2VfMTI4eDEyOF9zdXBlcmJsb2NrOwo+ID4gKyAg ICBpbnQgc2JfY29sczsKPiA+ICsgICAgaW50IHNiX3Jvd3M7Cj4gPiArICAgIGludCB0aWxlX2Nv bHNfbG9nMjsKPiA+ICsgICAgaW50IHRpbGVfcm93c19sb2cyOwo+ID4gKyAgICBpbnQgbWF4X3Rp bGVfd2lkdGhfc2I7Cj4gPiArICAgIGludCBtYXhfdGlsZV9oZWlnaHRfc2I7Cj4gPiArICAgIHVp bnQ4X3Qgd2lkdGhfaW5fc2JzX21pbnVzXzFbQVYxX01BWF9USUxFX0NPTFNdOwo+ID4gKyAgICB1 aW50OF90IGhlaWdodF9pbl9zYnNfbWludXNfMVtBVjFfTUFYX1RJTEVfUk9XU107Cj4gPiArCj4g PiArICAgIGludCBtaW5fbG9nMl90aWxlX2NvbHM7Cj4gPiArICAgIGludCBtYXhfbG9nMl90aWxl X2NvbHM7Cj4gPiArICAgIGludCBtaW5fbG9nMl90aWxlX3Jvd3M7Cj4gPiArICAgIGludCBtYXhf bG9nMl90aWxlX3Jvd3M7Cj4gPiArCj4gPiArICAgIGludCBxX2lkeF9pZHI7Cj4gPiArICAgIGlu dCBxX2lkeF9wOwo+ID4gKyAgICBpbnQgcV9pZHhfYjsKPiA+ICsKPiA+ICsgICAgLyoqIHVzZXIg b3B0aW9ucyAqLwo+ID4gKyAgICBpbnQgcHJvZmlsZTsKPiA+ICsgICAgaW50IGxldmVsOwo+ID4g KyAgICBpbnQgdGllcjsKPiA+ICsgICAgaW50IHRpbGVfY29scywgdGlsZV9yb3dzOwo+ID4gKyAg ICBpbnQgdGlsZV9ncm91cHM7Cj4gPiArfSBWQUFQSUVuY29kZUFWMUNvbnRleHQ7Cj4gPiArCj4g PiArc3RhdGljIGF2X2NvbGQgaW50IHZhYXBpX2VuY29kZV9hdjFfY29uZmlndXJlKEFWQ29kZWND b250ZXh0ICphdmN0eCkKPiA+ICt7Cj4gPiArICAgIFZBQVBJRW5jb2RlQ29udGV4dCAgICAgKmN0 eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gPiArICAgIFZBQVBJRW5jb2RlQVYxQ29udGV4dCAqcHJp diA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gPiArICAgIGludCByZXQ7Cj4gPiArCj4gPiArICAgIHJl dCA9IGZmX2Nic19pbml0KCZwcml2LT5jYmMsIEFWX0NPREVDX0lEX0FWMSwgYXZjdHgpOwo+ID4g KyAgICBpZiAocmV0IDwgMCkKPiA+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gPiArCj4gPiArICAg IGlmIChjdHgtPnJjX21vZGUtPnF1YWxpdHkpIHsKPiA+ICsgICAgICAgIHByaXYtPnFfaWR4X3Ag PSBhdl9jbGlwKGN0eC0+cmNfcXVhbGl0eSwgMCwgQVYxX01BWF9RVUFOVCk7Cj4gPiArICAgICAg ICBpZiAoZmFicyhhdmN0eC0+aV9xdWFudF9mYWN0b3IpID4gMC4wKQo+ID4gKyAgICAgICAgICAg IHByaXYtPnFfaWR4X2lkciA9Cj4gPiArICAgICAgICAgICAgICAgIGF2X2NsaXAoKGZhYnMoYXZj dHgtPmlfcXVhbnRfZmFjdG9yKSAqIHByaXYtPnFfaWR4X3AgICsKPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgYXZjdHgtPmlfcXVhbnRfb2Zmc2V0KSArIDAuNSwKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAwLCBBVjFfTUFYX1FVQU5UKTsKPiA+ICsgICAgICAgIGVsc2UKPiA+ICsg ICAgICAgICAgICBwcml2LT5xX2lkeF9pZHIgPSBwcml2LT5xX2lkeF9wOwo+ID4gKwo+ID4gKyAg ICAgICAgaWYgKGZhYnMoYXZjdHgtPmJfcXVhbnRfZmFjdG9yKSA+IDAuMCkKPiA+ICsgICAgICAg ICAgICBwcml2LT5xX2lkeF9iID0KPiA+ICsgICAgICAgICAgICAgICAgYXZfY2xpcCgoZmFicyhh dmN0eC0+Yl9xdWFudF9mYWN0b3IpICogcHJpdi0+cV9pZHhfcCAgKwo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICBhdmN0eC0+Yl9xdWFudF9vZmZzZXQpICsgMC41LAo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgIDAsIEFWMV9NQVhfUVVBTlQpOwo+ID4gKyAgICAgICAgZWxzZQo+ID4g KyAgICAgICAgICAgIHByaXYtPnFfaWR4X2IgPSBwcml2LT5xX2lkeF9wOwo+ID4gKyAgICB9IGVs c2Ugewo+ID4gKyAgICAgICAgLyoqIEFyYml0cmFyeSB2YWx1ZSAqLwo+ID4gKyAgICAgICAgcHJp di0+cV9pZHhfaWRyID0gcHJpdi0+cV9pZHhfcCA9IHByaXYtPnFfaWR4X2IgPSAxMjg7Cj4gPiAr ICAgIH0KPiA+ICsKPiA+ICsgICAgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBp bnQgdmFhcGlfZW5jb2RlX2F2MV9hZGRfb2J1KEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlZEJpdHN0cmVhbUZyYWdtZW50 ICphdSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHR5 cGUsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqb2J1X3Vu aXQpCj4gPiArewo+ID4gKyAgICBpbnQgcmV0Owo+ID4gKwo+ID4gKyAgICByZXQgPSBmZl9jYnNf aW5zZXJ0X3VuaXRfY29udGVudChhdSwgLTEsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHR5cGUsIG9idV91bml0LCBOVUxMKTsKPiA+ICsgICAgaWYgKHJldCA8IDAp IHsKPiA+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGFk ZCBPQlUgdW5pdDogIgo+ID4gKyAgICAgICAgICAgICAgICJ0eXBlID0gJWQuXG4iLCB0eXBlKTsK PiA+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgcmV0dXJu IDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgdmFhcGlfZW5jb2RlX2F2MV93cml0ZV9v YnUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2hhciAqZGF0YSwgc2l6ZV90ICpkYXRhX2xlbiwKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVkQml0c3RyZWFtRnJhZ21lbnQgKmJzKQo+ ID4gK3sKPiA+ICsgICAgVkFBUElFbmNvZGVBVjFDb250ZXh0ICpwcml2ID0gYXZjdHgtPnByaXZf ZGF0YTsKPiA+ICsgICAgaW50IHJldDsKPiA+ICsKPiA+ICsgICAgcmV0ID0gZmZfY2JzX3dyaXRl X2ZyYWdtZW50X2RhdGEocHJpdi0+Y2JjLCBicyk7Cj4gPiArICAgIGlmIChyZXQgPCAwKSB7Cj4g PiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byB3cml0ZSBw YWNrZWQgaGVhZGVyLlxuIik7Cj4gPiArICAgICAgICByZXR1cm4gcmV0Owo+ID4gKyAgICB9Cj4g PiArCj4gPiArICAgIGlmICgoc2l6ZV90KTggKiBNQVhfUEFSQU1fQlVGRkVSX1NJWkUgPCA4ICog YnMtPmRhdGFfc2l6ZSAtIGJzLT5kYXRhX2JpdF9wYWRkaW5nKSB7Cj4gPiArICAgICAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkFjY2VzcyB1bml0IHRvbyBsYXJnZTogIgo+ID4gKyAg ICAgICAgICAgICAgICIlenUgPCAlenUuXG4iLCAoc2l6ZV90KTggKiBNQVhfUEFSQU1fQlVGRkVS X1NJWkUsCj4gPiArICAgICAgICAgICAgICAgOCAqIGJzLT5kYXRhX3NpemUgLSBicy0+ZGF0YV9i aXRfcGFkZGluZyk7Cj4gPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9TUEMpOwo+ID4gKyAg ICB9Cj4gPiArCj4gPiArICAgIG1lbWNweShkYXRhLCBicy0+ZGF0YSwgYnMtPmRhdGFfc2l6ZSk7 Cj4gPiArICAgICpkYXRhX2xlbiA9IDggKiBicy0+ZGF0YV9zaXplIC0gYnMtPmRhdGFfYml0X3Bh ZGRpbmc7Cj4gPiArCj4gPiArICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMg aW50IGdldF9yZWxhdGl2ZV9kaXN0KGNvbnN0IEFWMVJhd1NlcXVlbmNlSGVhZGVyICpzZXEsCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQg aW50IGIpCj4gPiArewo+ID4gKyAgICB1bnNpZ25lZCBpbnQgZGlmZiwgbTsKPiA+ICsgICAgaWYg KCFzZXEtPmVuYWJsZV9vcmRlcl9oaW50KQo+ID4gKyAgICAgICAgcmV0dXJuIDA7Cj4gPiArICAg IGRpZmYgPSBhIC0gYjsKPiA+ICsgICAgbSA9IDEgPDwgc2VxLT5vcmRlcl9oaW50X2JpdHNfbWlu dXNfMTsKPiA+ICsgICAgZGlmZiA9IChkaWZmICYgKG0gLSAxKSkgLSAoZGlmZiAmIG0pOwo+ID4g KyAgICByZXR1cm4gZGlmZjsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCB3cml0ZV9ucyhQ dXRCaXRDb250ZXh0ICpwYmMsIHVpbnQzMl90IG4sIHVpbnQzMl90IHZhbHVlKQo+ID4gK3sKPiA+ ICsgICAgdWludDMyX3QgdywgbSwgdiwgZXh0cmFfYml0Owo+ID4gKwo+ID4gKyAgICB3ID0gYXZf bG9nMihuKSArIDE7Cj4gPiArICAgIG0gPSAoMSA8PCB3KSAtIG47Cj4gPiArCj4gPiArICAgIGlm ICh2YWx1ZSA8IG0pIHsKPiA+ICsgICAgICAgIHYgPSB2YWx1ZTsKPiA+ICsgICAgICAgIHB1dF9i aXRzKHBiYywgdyAtIDEsIHYpOwo+ID4gKyAgICB9IGVsc2Ugewo+ID4gKyAgICAgICAgdiA9IG0g KyAoKHZhbHVlIC0gbSkgPj4gMSk7Cj4gPiArICAgICAgICBleHRyYV9iaXQgPSAodmFsdWUgLSBt KSAmIDE7Cj4gPiArICAgICAgICBwdXRfYml0cyhwYmMsIHcgLSAxLCB2KTsKPiA+ICsgICAgICAg IHB1dF9iaXRzKHBiYywgMSwgZXh0cmFfYml0KTsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBy ZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICogVGhpcyBBUEkgcHJvdmlkZSB0 aGUgbWlubXVtIGltcGxlbWVudGlvbiBhY2NvcmRpbmcgY3VycmVudCBlbmFibGVkIGZlYXR1cmVz Cj4gPiArICogaW4gZnJhbWUgaGVhZGVyLiBJZiBtb3JlIGZlYXR1cmVzIHdpbGwgZW5hYmxlIGlu IGZ1cnR1cmUsIHBsZWFzZSBtYWtlIHN1cmUKPiA+ICsgKiB0aGUgcmVsYXRpdmUgZmxhZ3Mgb2Yg ZmVhdHVyZXMgc2hvdWxkIGJlIHBhY2tlZCBjb3JyZWN0bHkgaW50byBmcmFtZSBoZWFkZXIKPiA+ ICsgKiBvYnUgaW4gdGhpcyBBUEkuCj4gPiArICovCj4gPiArc3RhdGljIGludCB2YWFwaV9lbmNv ZGVfYXYxX3dyaXRlX2ZyYW1lX2hlYWRlcihBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUFQSUVuY29kZVBp Y3R1cmUgKnBpYywKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNoYXIgKmRhdGEsIHNpemVfdCAqZGF0YV9sZW4pCj4gPiArewo+ID4gKyAgICBWQUFQ SUVuY29kZUNvbnRleHQgICAgICAgICAgICAgICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+ID4g KyAgICBWQUFQSUVuY29kZUFWMUNvbnRleHQgICAgICAgICAgKnByaXYgPSBhdmN0eC0+cHJpdl9k YXRhOwo+ID4gKyAgICBBVjFSYXdPQlUgICAgICAgICAgICAgICAgICAgICpmaF9vYnUgPSAmcHJp di0+Zmg7Cj4gPiArICAgIEFWMVJhd09CVSAgICAgICAgICAgICAgICAgICAgKnNoX29idSA9ICZw cml2LT5zaDsKPiA+ICsgICAgQVYxUmF3RnJhbWVIZWFkZXIgICAgICAgICAgICAgICAgKmZoID0g JmZoX29idS0+b2J1LmZyYW1lLmhlYWRlcjsKPiA+ICsgICAgQVYxUmF3U2VxdWVuY2VIZWFkZXIg ICAgICAgICAgICAgKnNoID0gJnNoX29idS0+b2J1LnNlcXVlbmNlX2hlYWRlcjsKPiA+ICsgICAg VkFFbmNQaWN0dXJlUGFyYW1ldGVyQnVmZmVyQVYxICp2cGljID0gcGljLT5jb2RlY19waWN0dXJl X3BhcmFtczsKPiA+ICsgICAgUHV0Qml0Q29udGV4dCBwYmMsIHBiY190bXA7Cj4gPiArICAgIHVp bnQ4X3QgYnl0ZTsKPiA+ICsgICAgaW50IHFpbmRleCwgY29kZWRfbG9zc2xlc3M7Cj4gPiArICAg IGludCBpZF9sZW4sIGZyYW1lX2lzX2ludHJhLCBza2lwX21vZGVfYWxsb3dlZDsKPiA+ICsgICAg aW50IHN0YXJ0LCBwYXlsb2FkX2JpdHMsIG9idV9zaXplLCBvYnVfc2l6ZV9sZW47Cj4gPiArICAg IGludCBxaW5kZXhfb2Zmc2V0LCBsb29wZmlsdGVyX29mZnNldDsKPiA+ICsgICAgaW50IGNkZWZf c3RhcnRfb2Zmc2V0LCBjZGVmX2VuZF9vZmZzZXQ7Cj4gPiArICAgIGludCBpOwo+ID4gKwo+ID4g KyAgICBpbml0X3B1dF9iaXRzKCZwYmMsIGRhdGEsIE1BWF9QQVJBTV9CVUZGRVJfU0laRSk7Cj4g PiArCj4gPiArICAgIC8qKiBvYnUgaGVhZGVyICovCj4gPiArICAgIHB1dF9iaXRzKCZwYmMsIDEs IGZoX29idS0+aGVhZGVyLm9idV9mb3JiaWRkZW5fYml0KTsKPiA+ICsgICAgcHV0X2JpdHMoJnBi YywgNCwgZmhfb2J1LT5oZWFkZXIub2J1X3R5cGUpOwo+ID4gKyAgICBwdXRfYml0cygmcGJjLCAx LCBmaF9vYnUtPmhlYWRlci5vYnVfZXh0ZW5zaW9uX2ZsYWcpOwo+ID4gKyAgICBwdXRfYml0cygm cGJjLCAxLCBmaF9vYnUtPmhlYWRlci5vYnVfaGFzX3NpemVfZmllbGQpOwo+ID4gKyAgICBwdXRf Yml0cygmcGJjLCAxLCBmaF9vYnUtPmhlYWRlci5vYnVfcmVzZXJ2ZWRfMWJpdCk7Cj4gPiArCj4g PiArICAgIC8qKiByZWNvcmQgcGJjIHN0YXR1cyB0byByZS13cml0ZSBvYnUgc2l6ZSBsYXRlci4g Ki8KPiA+ICsgICAgaWYgKGZoX29idS0+aGVhZGVyLm9idV9oYXNfc2l6ZV9maWVsZCkgewo+ID4g KyAgICAgICAgcGJjX3RtcCA9IHBiYzsKPiA+ICsgICAgICAgIHB1dF9iaXRzMzIoJnBiYywgMCk7 Cj4gPiArICAgICAgICBwdXRfYml0czMyKCZwYmMsIDApOwo+ID4gKyAgICB9Cj4gPiArCj4gPiAr ICAgIHN0YXJ0ID0gcHV0X2JpdHNfY291bnQoJnBiYyk7Cj4gPiArCj4gPiArICAgIC8qKiB1bmNv bXByZXNzZWRfaGVhZGVyKCkgKi8KPiA+ICsgICAgaWYgKHNoLT5mcmFtZV9pZF9udW1iZXJzX3By ZXNlbnRfZmxhZykKPiA+ICsgICAgICAgIGlkX2xlbiA9IHNoLT5hZGRpdGlvbmFsX2ZyYW1lX2lk X2xlbmd0aF9taW51c18xICsKPiA+ICsgICAgICAgICAgICAgICAgIHNoLT5kZWx0YV9mcmFtZV9p ZF9sZW5ndGhfbWludXNfMiArIDM7Cj4gPiArCj4gPiArICAgIGZyYW1lX2lzX2ludHJhID0gKGZo LT5mcmFtZV90eXBlID09IEFWMV9GUkFNRV9LRVkgfHwKPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgZmgtPmZyYW1lX3R5cGUgPT0gQVYxX0ZSQU1FX0lOVFJBX09OTFkpOwo+ID4gKyAgICBpZiAo IXNoLT5yZWR1Y2VkX3N0aWxsX3BpY3R1cmVfaGVhZGVyKSB7Cj4gPiArICAgICAgICBwdXRfYml0 cygmcGJjLCAxLCBmaC0+c2hvd19leGlzdGluZ19mcmFtZSk7Cj4gPiArICAgICAgICBpZiAoZmgt PnNob3dfZXhpc3RpbmdfZnJhbWUpIHsKPiA+ICsgICAgICAgICAgICBwdXRfYml0cygmcGJjLCAz LCBmaC0+ZnJhbWVfdG9fc2hvd19tYXBfaWR4KTsKPiA+ICsgICAgICAgICAgICBnb3RvIHRyYWls aW5nX2JpdHM7Cj4gPiArICAgICAgICB9Cj4gPiArICAgICAgICBpZiAoc2gtPmZyYW1lX2lkX251 bWJlcnNfcHJlc2VudF9mbGFnKQo+ID4gKyAgICAgICAgICAgIHB1dF9iaXRzKCZwYmMsIGlkX2xl biwgZmgtPmRpc3BsYXlfZnJhbWVfaWQpOwo+ID4gKwo+ID4gKyAgICAgICAgcHV0X2JpdHMoJnBi YywgMiwgZmgtPmZyYW1lX3R5cGUpOwo+ID4gKyAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgt PnNob3dfZnJhbWUpOwo+ID4gKyAgICAgICAgaWYgKCFmaC0+c2hvd19mcmFtZSkKPiA+ICsgICAg ICAgICAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+c2hvd2FibGVfZnJhbWUpOwo+ID4gKwo+ID4g KyAgICAgICAgaWYgKCEoZmgtPmZyYW1lX3R5cGUgPT0gQVYxX0ZSQU1FX1NXSVRDSCB8fAo+ID4g KyAgICAgICAgICAgIChmaC0+ZnJhbWVfdHlwZSA9PSBBVjFfRlJBTUVfS0VZICYmIGZoLT5zaG93 X2ZyYW1lKSkpCj4gPiArICAgICAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPmVycm9yX3Jl c2lsaWVudF9tb2RlKTsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBwdXRfYml0cygmcGJjLCAx LCBmaC0+ZGlzYWJsZV9jZGZfdXBkYXRlKTsKPiA+ICsgICAgaWYgKHNoLT5zZXFfZm9yY2Vfc2Ny ZWVuX2NvbnRlbnRfdG9vbHMgPT0gQVYxX1NFTEVDVF9TQ1JFRU5fQ09OVEVOVF9UT09MUykKPiA+ ICsgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoLT5hbGxvd19zY3JlZW5fY29udGVudF90b29s cyk7Cj4gPiArCj4gPiArICAgIGlmIChmaC0+YWxsb3dfc2NyZWVuX2NvbnRlbnRfdG9vbHMgJiYg c2gtPnNlcV9mb3JjZV9pbnRlZ2VyX212ID09IEFWMV9TRUxFQ1RfSU5URUdFUl9NVikKPiA+ICsg ICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoLT5mb3JjZV9pbnRlZ2VyX212KTsKPiA+ICsKPiA+ ICsgICAgaWYgKHNoLT5mcmFtZV9pZF9udW1iZXJzX3ByZXNlbnRfZmxhZykKPiA+ICsgICAgICAg IHB1dF9iaXRzKCZwYmMsIGlkX2xlbiwgZmgtPmN1cnJlbnRfZnJhbWVfaWQpOwo+ID4gKwo+ID4g KyAgICBpZiAoZmgtPmZyYW1lX3R5cGUgIT0gQVYxX0ZSQU1FX1NXSVRDSCAmJiAhc2gtPnJlZHVj ZWRfc3RpbGxfcGljdHVyZV9oZWFkZXIpCj4gPiArICAgICAgICBwdXRfYml0cygmcGJjLCAxLCBm aC0+ZnJhbWVfc2l6ZV9vdmVycmlkZV9mbGFnKTsKPiA+ICsKPiA+ICsgICAgaWYgKHNoLT5lbmFi bGVfb3JkZXJfaGludCkKPiA+ICsgICAgICAgIHB1dF9iaXRzKCZwYmMsIHNoLT5vcmRlcl9oaW50 X2JpdHNfbWludXNfMSArIDEsIGZoLT5vcmRlcl9oaW50KTsKPiA+ICsKPiA+ICsgICAgaWYgKCEo ZnJhbWVfaXNfaW50cmEgfHwgZmgtPmVycm9yX3Jlc2lsaWVudF9tb2RlKSkKPiA+ICsgICAgICAg IHB1dF9iaXRzKCZwYmMsIDMsIGZoLT5wcmltYXJ5X3JlZl9mcmFtZSk7Cj4gPiArCj4gPiArICAg IGlmICghKGZoLT5mcmFtZV90eXBlID09IEFWMV9GUkFNRV9TV0lUQ0ggfHwKPiA+ICsgICAgICAg IGZoLT5mcmFtZV90eXBlID09IEFWMV9GUkFNRV9LRVkgJiYgZmgtPnNob3dfZnJhbWUpKQo+ID4g KyAgICAgICAgcHV0X2JpdHMoJnBiYywgOCwgZmgtPnJlZnJlc2hfZnJhbWVfZmxhZ3MpOwo+ID4g Kwo+ID4gKyAgICBpZiAoZnJhbWVfaXNfaW50cmEpIHsKPiA+ICsgICAgICAgIC8qKiByZW5kZXJf c2l6ZSgpICovCj4gPiArICAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPnJlbmRlcl9hbmRf ZnJhbWVfc2l6ZV9kaWZmZXJlbnQpOwo+ID4gKyAgICB9IGVsc2Ugewo+ID4gKyAgICAgICAgaWYg KCFmcmFtZV9pc19pbnRyYSAmJiBzaC0+ZW5hYmxlX29yZGVyX2hpbnQpCj4gPiArICAgICAgICAg ICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPmZyYW1lX3JlZnNfc2hvcnRfc2lnbmFsaW5nKTsKPiA+ ICsKPiA+ICsgICAgICAgIGZvciAoaSA9IDA7IGkgPCBBVjFfUkVGU19QRVJfRlJBTUU7IGkrKykg ewo+ID4gKyAgICAgICAgICAgIGlmICghZmgtPmZyYW1lX3JlZnNfc2hvcnRfc2lnbmFsaW5nKQo+ ID4gKyAgICAgICAgICAgICAgICBwdXRfYml0cygmcGJjLCAzLCBmaC0+cmVmX2ZyYW1lX2lkeFtp XSk7Cj4gPiArICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICBpZiAoIShmaC0+ZnJhbWVfc2l6 ZV9vdmVycmlkZV9mbGFnICYmICFmaC0+ZXJyb3JfcmVzaWxpZW50X21vZGUpKQo+ID4gKyAgICAg ICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoLT5yZW5kZXJfYW5kX2ZyYW1lX3NpemVfZGlmZmVy ZW50KTsKPiA+ICsKPiA+ICsgICAgICAgIGlmICghZmgtPmZvcmNlX2ludGVnZXJfbXYpCj4gPiAr ICAgICAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPmFsbG93X2hpZ2hfcHJlY2lzaW9uX212 KTsKPiA+ICsKPiA+ICsgICAgICAgIC8qKiByZWFkX2ludGVycG9sYXRpb25fZmlsdGVyKCkgKi8K PiA+ICsgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoLT5pc19maWx0ZXJfc3dpdGNoYWJsZSk7 Cj4gPiArICAgICAgICBpZiAoIWZoLT5pc19maWx0ZXJfc3dpdGNoYWJsZSkKPiA+ICsgICAgICAg ICAgICBwdXRfYml0cygmcGJjLCAyLCBmaC0+aW50ZXJwb2xhdGlvbl9maWx0ZXIpOwo+ID4gKwo+ ID4gKyAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPmlzX21vdGlvbl9tb2RlX3N3aXRjaGFi bGUpOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGlmICghKHNoLT5yZWR1Y2VkX3N0aWxsX3Bp Y3R1cmVfaGVhZGVyIHx8IGZoLT5kaXNhYmxlX2NkZl91cGRhdGUpKQo+ID4gKyAgICAgICAgcHV0 X2JpdHMoJnBiYywgMSwgZmgtPmRpc2FibGVfZnJhbWVfZW5kX3VwZGF0ZV9jZGYpOwo+ID4gKwo+ ID4gKyAgICAvKiogdGlsZV9pbmZvKCkgKi8KPiA+ICsgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgt PnVuaWZvcm1fdGlsZV9zcGFjaW5nX2ZsYWcpOwo+ID4gKyAgICBpZiAoZmgtPnVuaWZvcm1fdGls ZV9zcGFjaW5nX2ZsYWcpIHsKPiA+ICsgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcml2LT50aWxl X2NvbHNfbG9nMiAtIHByaXYtPm1pbl9sb2cyX3RpbGVfY29sczsgaSsrKSB7Cj4gPiArICAgICAg ICAgICAgcHV0X2JpdHMoJnBiYywgMSwgMSk7Cj4gPiArICAgICAgICB9Cj4gPiArICAgICAgICBp ZiAocHJpdi0+dGlsZV9jb2xzX2xvZzIgPCBwcml2LT5tYXhfbG9nMl90aWxlX2NvbHMpCj4gPiAr ICAgICAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgMCk7Cj4gPiArCj4gPiArICAgICAgICBmb3Ig KGkgPSAwOyBpIDwgcHJpdi0+dGlsZV9yb3dzX2xvZzIgLSBwcml2LT5taW5fbG9nMl90aWxlX3Jv d3M7IGkrKykgewo+ID4gKyAgICAgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIDEpOwo+ID4gKyAg ICAgICAgfQo+ID4gKyAgICAgICAgaWYgKHByaXYtPnRpbGVfcm93c19sb2cyIDwgcHJpdi0+bWF4 X2xvZzJfdGlsZV9yb3dzKQo+ID4gKyAgICAgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIDApOwo+ ID4gKyAgICB9IGVsc2Ugewo+ID4gKyAgICAgICAgaW50IHN0YXJ0X3NiID0gMDsKPiA+ICsgICAg ICAgIGludCBtYXhfd2lkdGgsIG1heF9oZWlnaHQ7Cj4gPiArICAgICAgICBmb3IgKGkgPSAwOyBz dGFydF9zYiA8IHByaXYtPnNiX2NvbHM7IGkrKykgewo+ID4gKyAgICAgICAgICAgIG1heF93aWR0 aCA9IEZGTUlOKHByaXYtPnNiX2NvbHMgLSBzdGFydF9zYiwgcHJpdi0+bWF4X3RpbGVfd2lkdGhf c2IpOwo+ID4gKyAgICAgICAgICAgIHdyaXRlX25zKCZwYmMsIG1heF93aWR0aCwgZmgtPndpZHRo X2luX3Nic19taW51c18xW2ldKTsKPiA+ICsgICAgICAgICAgICBzdGFydF9zYiArPSBmaC0+d2lk dGhfaW5fc2JzX21pbnVzXzFbaV0gKyAxOwo+ID4gKyAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAg ICAgc3RhcnRfc2IgPSAwOwo+ID4gKyAgICAgICAgZm9yIChpID0gMDsgc3RhcnRfc2IgPCBwcml2 LT5zYl9yb3dzOyBpKyspIHsKPiA+ICsgICAgICAgICAgICBtYXhfaGVpZ2h0ID0gRkZNSU4ocHJp di0+c2Jfcm93cyAtIHN0YXJ0X3NiLCBwcml2LT5tYXhfdGlsZV9oZWlnaHRfc2IpOwo+ID4gKyAg ICAgICAgICAgIHdyaXRlX25zKCZwYmMsIG1heF9oZWlnaHQsIGZoLT5oZWlnaHRfaW5fc2JzX21p bnVzXzFbaV0pOwo+ID4gKyAgICAgICAgICAgIHN0YXJ0X3NiICs9IGZoLT5oZWlnaHRfaW5fc2Jz X21pbnVzXzFbaV0gKyAxOwo+ID4gKyAgICAgICAgfQo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAg IGlmIChwcml2LT50aWxlX2NvbHNfbG9nMiB8fCBwcml2LT50aWxlX3Jvd3NfbG9nMikgewo+ID4g KyAgICAgICAgcHV0X2JpdHMoJnBiYywgcHJpdi0+dGlsZV9jb2xzX2xvZzIgKyBwcml2LT50aWxl X3Jvd3NfbG9nMiwgZmgtPmNvbnRleHRfdXBkYXRlX3RpbGVfaWQpOwo+ID4gKyAgICAgICAgcHV0 X2JpdHMoJnBiYywgMiwgZmgtPnRpbGVfc2l6ZV9ieXRlc19taW51czEpOwo+ID4gKyAgICB9Cj4g PiArCj4gPiArICAgIHFpbmRleF9vZmZzZXQgPSBwdXRfYml0c19jb3VudCgmcGJjKTsKPiA+ICsg ICAgLyoqIHF1YW50aXphdGlvbl9wYXJhbXMoKSAqLwo+ID4gKyAgICBwdXRfYml0cygmcGJjLCA4 LCBmaC0+YmFzZV9xX2lkeCk7Cj4gPiArICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoLT5kZWx0YV9x X3lfZGMpOwo+ID4gKyAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+ZGVsdGFfcV91X2RjKTsKPiA+ ICsgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPmRlbHRhX3FfdV9hYyk7Cj4gPiArICAgIHB1dF9i aXRzKCZwYmMsIDEsIGZoLT51c2luZ19xbWF0cml4KTsKPiA+ICsKPiA+ICsgICAgLyoqIHNlZ21l bnRhdGlvbl9wYXJhbXMoKSAqLwo+ID4gKyAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+c2VnbWVu dGF0aW9uX2VuYWJsZWQpOwo+ID4gKwo+ID4gKyAgICAvKiogZGVsdGFfcV9wYXJhbXMoKSAqLwo+ ID4gKyAgICBpZiAoZmgtPmJhc2VfcV9pZHgpCj4gPiArICAgICAgICBwdXRfYml0cygmcGJjLCAx LCBmaC0+ZGVsdGFfcV9wcmVzZW50KTsKPiA+ICsgICAgaWYgKGZoLT5kZWx0YV9xX3ByZXNlbnQp Cj4gPiArICAgICAgICBwdXRfYml0cygmcGJjLCAyLCBmaC0+ZGVsdGFfcV9yZXMpOwo+ID4gKwo+ ID4gKyAgICAvKiogZGVsdGFfbGZfcGFyYW1zKCkgKi8KPiA+ICsgICAgaWYgKGZoLT5kZWx0YV9x X3ByZXNlbnQpIHsKPiA+ICsgICAgICAgIGlmICghZmgtPmFsbG93X2ludHJhYmMpCj4gPiArICAg ICAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPmRlbHRhX2xmX3ByZXNlbnQpOwo+ID4gKyAg ICAgICAgaWYgKGZoLT5kZWx0YV9sZl9wcmVzZW50KSB7Cj4gPiArICAgICAgICAgICAgcHV0X2Jp dHMoJnBiYywgMiwgZmgtPmRlbHRhX2xmX3Jlcyk7Cj4gPiArICAgICAgICAgICAgcHV0X2JpdHMo JnBiYywgMSwgZmgtPmRlbHRhX2xmX211bHRpKTsKPiA+ICsgICAgICAgIH0KPiA+ICsgICAgfQo+ ID4gKwo+ID4gKyAgICAvKiogY29kZWxvc3NsZXNzICovCj4gPiArICAgIGNvZGVkX2xvc3NsZXNz ID0gMTsKPiA+ICsgICAgZm9yIChpID0gMDsgaSA8IEFWMV9NQVhfU0VHTUVOVFM7IGkrKykgewo+ ID4gKyAgICAgICAgaWYgKGZoLT5zZWdtZW50YXRpb25fZW5hYmxlZCAmJiBmaC0+ZmVhdHVyZV9l bmFibGVkW2ldW0FWMV9TRUdfTFZMX0FMVF9RXSkKPiA+ICsgICAgICAgICAgICBxaW5kZXggPSBm aC0+YmFzZV9xX2lkeCArIGZoLT5mZWF0dXJlX3ZhbHVlW2ldW0FWMV9TRUdfTFZMX0FMVF9RXTsK PiA+ICsgICAgICAgIGVsc2UKPiA+ICsgICAgICAgICAgICBxaW5kZXggPSBmaC0+YmFzZV9xX2lk eDsKPiA+ICsgICAgICAgIHFpbmRleCA9IGF2X2NsaXBfdWludHAyKHFpbmRleCwgOCk7Cj4gPiAr Cj4gPiArICAgICAgICBpZiAocWluZGV4IHx8IGZoLT5kZWx0YV9xX3lfZGMgfHwgZmgtPmRlbHRh X3FfdV9hYyB8fCBmaC0+ZGVsdGFfcV91X2RjIHx8Cj4gPiArICAgICAgICAgICAgZmgtPmRlbHRh X3Ffdl9hYyB8fCBmaC0+ZGVsdGFfcV92X2RjKQo+ID4gKyAgICAgICAgICAgIGNvZGVkX2xvc3Ns ZXNzID0gMDsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBsb29wZmlsdGVyX29mZnNldCA9IHB1 dF9iaXRzX2NvdW50KCZwYmMpOwo+ID4gKyAgICAvKiogbG9vcF9maWx0ZXJfcGFyYW1zKCkgKi8K PiA+ICsgICAgaWYgKCEoY29kZWRfbG9zc2xlc3MgfHwgZmgtPmFsbG93X2ludHJhYmMpKSB7Cj4g PiArICAgICAgICBwdXRfYml0cygmcGJjLCA2LCBmaC0+bG9vcF9maWx0ZXJfbGV2ZWxbMF0pOwo+ ID4gKyAgICAgICAgcHV0X2JpdHMoJnBiYywgNiwgZmgtPmxvb3BfZmlsdGVyX2xldmVsWzFdKTsK PiA+ICsgICAgICAgIGlmIChmaC0+bG9vcF9maWx0ZXJfbGV2ZWxbMF0gfHwgZmgtPmxvb3BfZmls dGVyX2xldmVsWzFdKSB7Cj4gPiArICAgICAgICAgICAgcHV0X2JpdHMoJnBiYywgNiwgZmgtPmxv b3BfZmlsdGVyX2xldmVsWzJdKTsKPiA+ICsgICAgICAgICAgICBwdXRfYml0cygmcGJjLCA2LCBm aC0+bG9vcF9maWx0ZXJfbGV2ZWxbM10pOwo+ID4gKyAgICAgICAgfQo+ID4gKyAgICAgICAgcHV0 X2JpdHMoJnBiYywgMywgZmgtPmxvb3BfZmlsdGVyX3NoYXJwbmVzcyk7Cj4gPiArICAgICAgICBw dXRfYml0cygmcGJjLCAxLCBmaC0+bG9vcF9maWx0ZXJfZGVsdGFfZW5hYmxlZCk7Cj4gPiArICAg IH0KPiA+ICsKPiA+ICsgICAgY2RlZl9zdGFydF9vZmZzZXQgPSBwdXRfYml0c19jb3VudCgmcGJj KTsKPiA+ICsgICAgLyoqIGNkZWZfcGFyYW1zKCkgKi8KPiA+ICsgICAgaWYgKCEoY29kZWRfbG9z c2xlc3MgfHwgZmgtPmFsbG93X2ludHJhYmMgfHwgIXNoLT5lbmFibGVfY2RlZikpIHsKPiA+ICsg ICAgICAgIHB1dF9iaXRzKCZwYmMsIDIsIGZoLT5jZGVmX2RhbXBpbmdfbWludXNfMyk7Cj4gPiAr ICAgICAgICBwdXRfYml0cygmcGJjLCAyLCBmaC0+Y2RlZl9iaXRzKTsKPiA+ICsgICAgICAgIGZv ciAoaSA9IDA7IGkgPCAoMSA8PCBmaC0+Y2RlZl9iaXRzKTsgaSsrKSB7Cj4gPiArICAgICAgICAg ICAgcHV0X2JpdHMoJnBiYywgNCwgZmgtPmNkZWZfeV9wcmlfc3RyZW5ndGhbaV0pOwo+ID4gKyAg ICAgICAgICAgIHB1dF9iaXRzKCZwYmMsIDIsIGZoLT5jZGVmX3lfc2VjX3N0cmVuZ3RoW2ldKTsK PiA+ICsgICAgICAgICAgICBwdXRfYml0cygmcGJjLCA0LCBmaC0+Y2RlZl91dl9wcmlfc3RyZW5n dGhbaV0pOwo+ID4gKyAgICAgICAgICAgIHB1dF9iaXRzKCZwYmMsIDIsIGZoLT5jZGVmX3V2X3Nl Y19zdHJlbmd0aFtpXSk7Cj4gPiArICAgICAgICB9Cj4gPiArICAgIH0KPiA+ICsgICAgY2RlZl9l bmRfb2Zmc2V0ID0gcHV0X2JpdHNfY291bnQoJnBiYyk7Cj4gPiArCj4gPiArICAgIC8qKiByZWFk X3R4X21vZGUoKSAqLwo+ID4gKyAgICBpZiAoZmgtPnR4X21vZGUgPT0gQVYxX1RYX01PREVfU0VM RUNUKQo+ID4gKyAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgMSk7Cj4gPiArICAgIGVsc2UKPiA+ ICsgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIDApOwo+ID4gKwo+ID4gKyAgICAvKiogZnJhbWVf cmVmZXJlbmNlX21vZGUoKSAqLwo+ID4gKyAgICBpZiAoIWZyYW1lX2lzX2ludHJhKQo+ID4gKyAg ICAgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPnJlZmVyZW5jZV9zZWxlY3QpOwo+ID4gKwo+ID4g KyAgICAvKiogc2tpcF9tb2RlX3BhcmFtcygpICovCj4gPiArICAgIGlmIChmcmFtZV9pc19pbnRy YSB8fCAhZmgtPnJlZmVyZW5jZV9zZWxlY3QgfHwgIXNoLT5lbmFibGVfb3JkZXJfaGludCkKPiA+ ICsgICAgICAgIHNraXBfbW9kZV9hbGxvd2VkID0gMDsKPiA+ICsgICAgZWxzZSB7Cj4gPiArICAg ICAgICBpbnQgZm9yd2FyZF9pZHgsIGJhY2t3YXJkX2lkeDsKPiA+ICsgICAgICAgIGludCByZWZf aGludCwgZm9yd2FyZF9oaW50LCBiYWNrd2FyZF9oaW50Owo+ID4gKwo+ID4gKyAgICAgICAgZm9y d2FyZF9pZHggPSAtMTsKPiA+ICsgICAgICAgIGJhY2t3YXJkX2lkeCA9IC0xOwo+ID4gKwo+ID4g KyAgICAgICAgZm9yIChpID0gMDsgaSA8IEFWMV9SRUZTX1BFUl9GUkFNRTsgaSsrKSB7Cj4gPiAr ICAgICAgICAgICAgcmVmX2hpbnQgPSBmaC0+cmVmX29yZGVyX2hpbnRbZmgtPnJlZl9mcmFtZV9p ZHhbaV1dOwo+ID4gKyAgICAgICAgICAgIGlmIChnZXRfcmVsYXRpdmVfZGlzdChzaCwgcmVmX2hp bnQsIGZoLT5vcmRlcl9oaW50KSA8IDApIHsKPiA+ICsgICAgICAgICAgICAgICAgaWYgKGZvcndh cmRfaWR4IDwgMCB8fCBnZXRfcmVsYXRpdmVfZGlzdChzaCwgcmVmX2hpbnQsIGZvcndhcmRfaWR4 KSA+IDApIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaWR4ID0gaTsKPiA+ICsg ICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaGludCA9IHJlZl9oaW50Owo+ID4gKyAgICAgICAg ICAgICAgICB9Cj4gPiArICAgICAgICAgICAgfSBlbHNlIGlmIChnZXRfcmVsYXRpdmVfZGlzdChz aCwgcmVmX2hpbnQsIGZoLT5vcmRlcl9oaW50KSA+IDApIHsKPiA+ICsgICAgICAgICAgICAgICAg aWYgKGJhY2t3YXJkX2lkeCA8IDAgfHwgZ2V0X3JlbGF0aXZlX2Rpc3Qoc2gsIHJlZl9oaW50LCBi YWNrd2FyZF9oaW50KSA8IDApIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgIGJhY2t3YXJkX2lk eCA9IGk7Cj4gPiArICAgICAgICAgICAgICAgICAgICBiYWNrd2FyZF9oaW50ID0gcmVmX2hpbnQ7 Cj4gPiArICAgICAgICAgICAgICAgIH0KPiA+ICsgICAgICAgICAgICB9Cj4gPiArICAgICAgICB9 Cj4gPiArICAgICAgICBpZiAoZm9yd2FyZF9pZHggPCAwKQo+ID4gKyAgICAgICAgICAgIHNraXBf bW9kZV9hbGxvd2VkID0gMDsKPiA+ICsgICAgICAgIGVsc2UgaWYgKGJhY2t3YXJkX2lkeCA+PSAw KQo+ID4gKyAgICAgICAgICAgIHNraXBfbW9kZV9hbGxvd2VkID0gMTsKPiA+ICsgICAgICAgIGVs c2Ugewo+ID4gKyAgICAgICAgICAgIGludCBzZWNvbmRfZm9yd2FyZF9pZHgsIHNlY29uZF9mb3J3 YXJkX2hpbnQ7Cj4gPiArICAgICAgICAgICAgc2Vjb25kX2ZvcndhcmRfaWR4ID0gLTE7Cj4gPiAr ICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IEFWMV9SRUZTX1BFUl9GUkFNRTsgaSsrKSB7Cj4g PiArICAgICAgICAgICAgICAgIHJlZl9oaW50ID0gZmgtPnJlZl9vcmRlcl9oaW50W2ZoLT5yZWZf ZnJhbWVfaWR4W2ldXTsKPiA+ICsgICAgICAgICAgICAgICAgaWYgKGdldF9yZWxhdGl2ZV9kaXN0 KHNoLCByZWZfaGludCwgZm9yd2FyZF9oaW50KSA8IDApIHsKPiA+ICsgICAgICAgICAgICAgICAg ICAgIGlmIChzZWNvbmRfZm9yd2FyZF9pZHggPCAwIHx8IGdldF9yZWxhdGl2ZV9kaXN0KHNoLCBy ZWZfaGludCwgc2Vjb25kX2ZvcndhcmRfaGludCkgPiAwKXsKPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICBzZWNvbmRfZm9yd2FyZF9pZHggPSBpOwo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgIHNlY29uZF9mb3J3YXJkX2hpbnQgPSByZWZfaGludDsKPiA+ICsgICAgICAgICAgICAgICAg ICAgIH0KPiA+ICsgICAgICAgICAgICAgICAgfQo+ID4gKyAgICAgICAgICAgIH0KPiA+ICsgICAg ICAgICAgICBpZiAoc2Vjb25kX2ZvcndhcmRfaWR4IDwgMCkKPiA+ICsgICAgICAgICAgICAgICAg c2tpcF9tb2RlX2FsbG93ZWQgPSAwOwo+ID4gKyAgICAgICAgICAgIGVsc2UKPiA+ICsgICAgICAg ICAgICAgICAgc2tpcF9tb2RlX2FsbG93ZWQgPSAxOwo+ID4gKyAgICAgICAgfQo+ID4gKyAgICB9 Cj4gPiArCj4gPiArICAgIGlmIChza2lwX21vZGVfYWxsb3dlZCkKPiA+ICsgICAgICAgIHB1dF9i aXRzKCZwYmMsIDEsIGZoLT5za2lwX21vZGVfcHJlc2VudCk7Cj4gPiArCj4gPiArICAgIHB1dF9i aXRzKCZwYmMsIDEsIGZoLT5yZWR1Y2VkX3R4X3NldCk7Cj4gPiArCj4gPiArICAgIC8qKiBnbG9i YWxfbW90aW9uX3BhcmFtcygpICovCj4gPiArICAgIGlmICghZnJhbWVfaXNfaW50cmEpIHsKPiA+ ICsgICAgICAgIGZvciAoaSA9IEFWMV9SRUZfRlJBTUVfTEFTVDsgaSA8PSBBVjFfUkVGX0ZSQU1F X0FMVFJFRjsgaSsrKSB7Cj4gPiArICAgICAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPmlz X2dsb2JhbFtpXSk7Cj4gPiArICAgICAgICAgICAgaWYgKGZoLT5pc19nbG9iYWxbaV0pIHsKPiA+ ICsgICAgICAgICAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPmlzX3JvdF96b29tW2ldKTsK PiA+ICsgICAgICAgICAgICAgICAgaWYgKCFmaC0+aXNfcm90X3pvb21baV0pCj4gPiArICAgICAg ICAgICAgICAgICAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+aXNfdHJhbnNsYXRpb25baV0pOwo+ ID4gKyAgICAgICAgICAgIH0KPiA+ICsgICAgICAgIH0KPiA+ICsgICAgfQo+ID4gKwo+ID4gK3Ry YWlsaW5nX2JpdHM6Cj4gPiArICAgIHBheWxvYWRfYml0cyA9IHB1dF9iaXRzX2NvdW50KCZwYmMp IC0gc3RhcnQ7Cj4gPiArCj4gPiArICAgIC8qKiB0cmFpbGluZ19iaXRzKCkgKi8KPiA+ICsgICAg cHV0X2JpdHMoJnBiYywgMSwgMSk7Cj4gPiArICAgIG9idV9zaXplID0gKHB1dF9iaXRzX2NvdW50 KCZwYmMpIC0gc3RhcnQgKyA3KSAvIDg7Cj4gPiArICAgIGZvciAoaSA9IDA7IGkgPCBvYnVfc2l6 ZSAqIDggLSBwYXlsb2FkX2JpdHMgLSAxOyBpKyspCj4gPiArICAgICAgICBwdXRfYml0cygmcGJj LCAxLCAwKTsKPiA+ICsKPiA+ICsgICAgZmx1c2hfcHV0X2JpdHMoJnBiYyk7Cj4gPiArICAgICpk YXRhX2xlbiA9IHB1dF9iaXRzX2NvdW50KCZwYmMpOwo+ID4gKwo+ID4gKyAgICAvKiogdXBkYXRl IG9idSBzaXplIGluIGJpdHN0cmVhbSAqLwo+ID4gKyAgICBpZiAoZmhfb2J1LT5oZWFkZXIub2J1 X2hhc19zaXplX2ZpZWxkKSB7Cj4gPiArICAgICAgICBvYnVfc2l6ZV9sZW4gPSBwcml2LT5hdHRy X2V4dDIuYml0cy5vYnVfc2l6ZV9ieXRlc19taW51czEgKyAxOwo+ID4gKyAgICAgICAgZm9yIChp ID0gMDsgaSA8IG9idV9zaXplX2xlbjsgaSsrKSB7Cj4gPiArICAgICAgICAgICAgYnl0ZSA9IG9i dV9zaXplID4+ICg3ICogaSkgJiAweDdmOwo+ID4gKyAgICAgICAgICAgIGlmIChpIDwgb2J1X3Np emVfbGVuIC0gMSkKPiA+ICsgICAgICAgICAgICAgICAgYnl0ZSB8PSAweDgwOwo+ID4gKyAgICAg ICAgICAgIHB1dF9iaXRzKCZwYmNfdG1wLCA4LCBieXRlKTsKPiA+ICsgICAgICAgIH0KPiA+ICsg ICAgICAgIGZsdXNoX3B1dF9iaXRzKCZwYmNfdG1wKTsKPiA+ICsgICAgICAgIG1lbW1vdmUocGJj X3RtcC5idWZfcHRyLCBwYmNfdG1wLmJ1Zl9wdHIgKyAoOCAtIG9idV9zaXplX2xlbiksIG9idV9z aXplKTsKPiA+ICsgICAgICAgICpkYXRhX2xlbiAtPSAoOCAtIG9idV9zaXplX2xlbikgKiA4Owo+ ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGlmIChmaC0+c2hvd19leGlzdGluZ19mcmFtZSkKPiA+ ICsgICAgICAgIHJldHVybiAwOwo+ID4gKwo+ID4gKyAgICBpZiAoIShjdHgtPnZhX3JjX21vZGUg JiBWQV9SQ19DUVApKSB7Cj4gPiArICAgICAgICB2cGljLT5taW5fYmFzZV9xaW5kZXggPSBhdl9j bGlwKGF2Y3R4LT5xbWluLCAxLCBBVjFfTUFYX1FVQU5UKTsKPiA+ICsgICAgICAgIHZwaWMtPm1h eF9iYXNlX3FpbmRleCA9IGF2X2NsaXAoYXZjdHgtPnFtYXgsIDEsIEFWMV9NQVhfUVVBTlQpOwo+ ID4gKwo+ID4gKyAgICAgICAgdnBpYy0+Yml0X29mZnNldF9xaW5kZXggICAgICAgICAgICA9IHFp bmRleF9vZmZzZXQgLSAoOCAtIG9idV9zaXplX2xlbikgKiA4Owo+ID4gKyAgICAgICAgdnBpYy0+ Yml0X29mZnNldF9sb29wZmlsdGVyX3BhcmFtcyA9IGxvb3BmaWx0ZXJfb2Zmc2V0IC0gKDggLSBv YnVfc2l6ZV9sZW4pICogODsKPiA+ICsgICAgICAgIHZwaWMtPmJpdF9vZmZzZXRfY2RlZl9wYXJh bXMgICAgICAgPSBjZGVmX3N0YXJ0X29mZnNldCAtICg4IC0gb2J1X3NpemVfbGVuKSAqIDg7Cj4g PiArICAgICAgICB2cGljLT5zaXplX2luX2JpdHNfY2RlZl9wYXJhbXMgICAgID0gY2RlZl9lbmRf b2Zmc2V0IC0gY2RlZl9zdGFydF9vZmZzZXQ7Cj4gPiArICAgICAgICB2cGljLT5zaXplX2luX2Jp dHNfZnJhbWVfaGRyX29idSAgID0gKmRhdGFfbGVuOwo+ID4gKwo+ID4gKyAgICAgICAgdnBpYy0+ Ynl0ZV9vZmZzZXRfZnJhbWVfaGRyX29idV9zaXplID0gKCgocGljLT50eXBlID09IFBJQ1RVUkVf VFlQRV9JRFIpID8KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHByaXYtPnNoX2RhdGFfbGVuIC8gOCA6IDApICsKPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaF9vYnUtPmhlYWRlci5vYnVfZXh0ZW5z aW9uX2ZsYWcgPwo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMiA6IDEpKTsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICByZXR1cm4gMDsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIGludCB0aWxlX2xvZzIoaW50IGJsa1NpemUsIGludCB0YXJnZXQp IHsKPiA+ICsgICAgaW50IGs7Cj4gPiArICAgIGZvciAoayA9IDA7IChibGtTaXplIDw8IGspIDwg dGFyZ2V0OyBrKyspOwo+ID4gKyAgICByZXR1cm4gazsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGlj IGludCB2YWFwaV9lbmNvZGVfYXYxX3NldF90aWxlKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiA+ ICt7Cj4gPiArICAgIFZBQVBJRW5jb2RlQVYxQ29udGV4dCAqcHJpdiA9IGF2Y3R4LT5wcml2X2Rh dGE7Cj4gPiArICAgIGludCBtaV9jb2xzLCBtaV9yb3dzLCBzYl9zaGlmdCwgc2Jfc2l6ZTsKPiA+ ICsgICAgaW50IG1heF90aWxlX2FyZWFfc2IsIG1heF90aWxlX2FyZWFfc2JfdmFyaWVkOwo+ID4g KyAgICBpbnQgdGlsZV93aWR0aF9zYiwgdGlsZV9oZWlnaHRfc2IsIHdpZGVzdF90aWxlX3NiOwo+ ID4gKyAgICBpbnQgbWluX2xvZzJfdGlsZXM7Cj4gPiArICAgIGludCB0aWxlX3Jvd3NfdG1wLCBp Owo+ID4gKwo+ID4gKyAgICBpZiAocHJpdi0+dGlsZV9jb2xzID4gQVYxX01BWF9USUxFX0NPTFMg fHwKPiA+ICsgICAgICAgIHByaXYtPnRpbGVfcm93cyA+IEFWMV9NQVhfVElMRV9ST1dTKSB7Cj4g PiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgdGlsZSBudW1i ZXIgJWR4JWQsIHNob3VsZCBsZXNzIHRoYW4gJWR4JWQuXG4iLAo+ID4gKyAgICAgICAgICAgICAg IHByaXYtPnRpbGVfY29scywgcHJpdi0+dGlsZV9yb3dzLCBBVjFfTUFYX1RJTEVfQ09MUywgQVYx X01BWF9USUxFX1JPV1MpOwo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiA+ ICsgICAgfQo+ID4gKwo+ID4gKyAgICBtaV9jb2xzID0gMiAqICgoYXZjdHgtPndpZHRoICsgNykg Pj4gMyk7Cj4gPiArICAgIG1pX3Jvd3MgPSAyICogKChhdmN0eC0+aGVpZ2h0ICsgNykgPj4gMyk7 Cj4gPiArICAgIHByaXYtPnNiX2NvbHMgPSBwcml2LT51c2VfMTI4eDEyOF9zdXBlcmJsb2NrID8K PiA+ICsgICAgICAgICAgICAgICAgICAgICgobWlfY29scyArIDMxKSA+PiA1KSA6ICgobWlfY29s cyArIDE1KSA+PiA0KTsKPiA+ICsgICAgcHJpdi0+c2Jfcm93cyA9IHByaXYtPnVzZV8xMjh4MTI4 X3N1cGVyYmxvY2sgPwo+ID4gKyAgICAgICAgICAgICAgICAgICAgKChtaV9yb3dzICsgMzEpID4+ IDUpIDogKChtaV9yb3dzICsgMTUpID4+IDQpOwo+ID4gKyAgICBzYl9zaGlmdCA9IHByaXYtPnVz ZV8xMjh4MTI4X3N1cGVyYmxvY2sgPyA1IDogNDsKPiA+ICsgICAgc2Jfc2l6ZSAgPSBzYl9zaGlm dCArIDI7Cj4gPiArICAgIHByaXYtPm1heF90aWxlX3dpZHRoX3NiID0gQVYxX01BWF9USUxFX1dJ RFRIID4+IHNiX3NpemU7Cj4gPiArICAgIG1heF90aWxlX2FyZWFfc2IgPSBBVjFfTUFYX1RJTEVf QVJFQSAgPj4gKDIgKiBzYl9zaXplKTsKPiA+ICsKPiA+ICsgICAgcHJpdi0+bWluX2xvZzJfdGls ZV9jb2xzID0gdGlsZV9sb2cyKHByaXYtPm1heF90aWxlX3dpZHRoX3NiLCBwcml2LT5zYl9jb2xz KTsKPiA+ICsgICAgcHJpdi0+bWF4X2xvZzJfdGlsZV9jb2xzID0gdGlsZV9sb2cyKDEsIEZGTUlO KHByaXYtPnNiX2NvbHMsIEFWMV9NQVhfVElMRV9DT0xTKSk7Cj4gPiArICAgIHByaXYtPm1heF9s b2cyX3RpbGVfcm93cyA9IHRpbGVfbG9nMigxLCBGRk1JTihwcml2LT5zYl9yb3dzLCBBVjFfTUFY X1RJTEVfUk9XUykpOwo+ID4gKyAgICBtaW5fbG9nMl90aWxlcyA9IEZGTUFYKHByaXYtPm1pbl9s b2cyX3RpbGVfY29scywKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlX2xvZzIo bWF4X3RpbGVfYXJlYV9zYiwgcHJpdi0+c2Jfcm93cyAqIHByaXYtPnNiX2NvbHMpKTsKPiA+ICsK PiA+ICsgICAgaWYgKHByaXYtPnRpbGVfY29scyAhPSBhdl9jbGlwKHByaXYtPnRpbGVfY29scywg KHByaXYtPnNiX2NvbHMgKyBwcml2LT5tYXhfdGlsZV93aWR0aF9zYiAtIDEpIC8gcHJpdi0+bWF4 X3RpbGVfd2lkdGhfc2IsIHByaXYtPnNiX2NvbHMpKSB7Cj4gPiArICAgICAgICBwcml2LT50aWxl X2NvbHMgPSBhdl9jbGlwKHByaXYtPnRpbGVfY29scywgKHByaXYtPnNiX2NvbHMgKyBwcml2LT5t YXhfdGlsZV93aWR0aF9zYiAtIDEpIC8gcHJpdi0+bWF4X3RpbGVfd2lkdGhfc2IsIHByaXYtPnNi X2NvbHMpOwo+ID4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfV0FSTklORywgIkludmFs aWQgdGlsZSBjb2xzLCBjb3JyZWN0IHRvICVkLlxuIiwgcHJpdi0+dGlsZV9jb2xzKTsKPiA+ICsg ICAgfQo+ID4gKwo+ID4gKyAgICBwcml2LT50aWxlX2NvbHNfbG9nMiA9IHRpbGVfbG9nMigxLCBw cml2LT50aWxlX2NvbHMpOwo+ID4gKyAgICB0aWxlX3dpZHRoX3NiID0gKHByaXYtPnNiX2NvbHMg KyAoMSA8PCBwcml2LT50aWxlX2NvbHNfbG9nMikgLSAxKSA+Pgo+ID4gKyAgICAgICAgICAgICAg ICAgICAgcHJpdi0+dGlsZV9jb2xzX2xvZzI7Cj4gPiArCj4gPiArICAgIGlmIChwcml2LT50aWxl X3Jvd3MgPiBwcml2LT5zYl9yb3dzKSB7Cj4gPiArICAgICAgICBwcml2LT50aWxlX3Jvd3MgPSBw cml2LT5zYl9yb3dzOwo+ID4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfV0FSTklORywg IkludmFsaWQgdGlsZSByb3dzLCBjb3JyZWN0IHRvICVkLlxuIiwgcHJpdi0+dGlsZV9yb3dzKTsK PiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBmb3IgKHRpbGVfcm93c190bXAgPSBwcml2LT50aWxl X3Jvd3M7IHRpbGVfcm93c190bXAgPD0gcHJpdi0+c2Jfcm93cyAmJiB0aWxlX3Jvd3NfdG1wIDw9 IEFWMV9NQVhfVElMRV9ST1dTOyB0aWxlX3Jvd3NfdG1wKyspIHsKPiA+ICsgICAgICAgIC8qKiB0 cnkgdW5pZm9ybWVkIHRpbGUuICovCj4gPiArICAgICAgICBwcml2LT50aWxlX3Jvd3NfbG9nMiA9 IHRpbGVfbG9nMigxLCB0aWxlX3Jvd3NfdG1wKTsKPiA+ICsgICAgICAgIGlmICgocHJpdi0+c2Jf Y29scyArIHRpbGVfd2lkdGhfc2IgLSAxKSAvIHRpbGVfd2lkdGhfc2IgPT0gcHJpdi0+dGlsZV9j b2xzKSB7Cj4gPiArICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHByaXYtPnRpbGVfY29scyAt IDE7IGkrKykKPiA+ICsgICAgICAgICAgICAgICAgcHJpdi0+d2lkdGhfaW5fc2JzX21pbnVzXzFb aV0gPSB0aWxlX3dpZHRoX3NiIC0gMTsKPiA+ICsgICAgICAgICAgICBwcml2LT53aWR0aF9pbl9z YnNfbWludXNfMVtpXSA9IHByaXYtPnNiX2NvbHMgLSAocHJpdi0+dGlsZV9jb2xzIC0gMSkgKiB0 aWxlX3dpZHRoX3NiIC0gMTsKPiA+ICsKPiA+ICsgICAgICAgICAgICB0aWxlX2hlaWdodF9zYiA9 IChwcml2LT5zYl9yb3dzICsgKDEgPDwgcHJpdi0+dGlsZV9yb3dzX2xvZzIpIC0gMSkgPj4KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPnRpbGVfcm93c19sb2cyOwo+ID4g Kwo+ID4gKyAgICAgICAgICAgIGlmICgocHJpdi0+c2Jfcm93cyArIHRpbGVfaGVpZ2h0X3NiIC0g MSkgLyB0aWxlX2hlaWdodF9zYiA9PSB0aWxlX3Jvd3NfdG1wICYmCj4gPiArICAgICAgICAgICAg ICAgIHRpbGVfaGVpZ2h0X3NiIDw9IG1heF90aWxlX2FyZWFfc2IgLyB0aWxlX3dpZHRoX3NiKSB7 Cj4gPiArICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aWxlX3Jvd3NfdG1wIC0gMTsg aSsrKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgcHJpdi0+aGVpZ2h0X2luX3Nic19taW51c18x W2ldID0gdGlsZV9oZWlnaHRfc2IgLSAxOwo+ID4gKyAgICAgICAgICAgICAgICBwcml2LT5oZWln aHRfaW5fc2JzX21pbnVzXzFbaV0gPSBwcml2LT5zYl9yb3dzIC0gKHRpbGVfcm93c190bXAgLSAx KSAqIHRpbGVfaGVpZ2h0X3NiIC0gMTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAgcHJpdi0+ dW5pZm9ybV90aWxlID0gMTsKPiA+ICsgICAgICAgICAgICAgICAgcHJpdi0+bWluX2xvZzJfdGls ZV9yb3dzID0gRkZNQVgobWluX2xvZzJfdGlsZXMgLSBwcml2LT50aWxlX2NvbHNfbG9nMiwgMCk7 Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgICAgICAgIH0KPiA+ ICsgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgIC8qKiB0cnkgbm9uLXVuaWZvcm1lZCB0aWxl LiAqLwo+ID4gKyAgICAgICAgd2lkZXN0X3RpbGVfc2IgPSAwOwo+ID4gKyAgICAgICAgZm9yIChp ID0gMDsgaSA8IHByaXYtPnRpbGVfY29sczsgaSsrKSB7Cj4gPiArICAgICAgICAgICAgcHJpdi0+ d2lkdGhfaW5fc2JzX21pbnVzXzFbaV0gPSAoaSArIDEpICogcHJpdi0+c2JfY29scyAvIHByaXYt PnRpbGVfY29scyAtIGkgKiBwcml2LT5zYl9jb2xzIC8gcHJpdi0+dGlsZV9jb2xzIC0gMTsKPiA+ ICsgICAgICAgICAgICB3aWRlc3RfdGlsZV9zYiA9IEZGTUFYKHdpZGVzdF90aWxlX3NiLCBwcml2 LT53aWR0aF9pbl9zYnNfbWludXNfMVtpXSArIDEpOwo+ID4gKyAgICAgICAgfQo+ID4gKwo+ID4g KyAgICAgICAgaWYgKG1pbl9sb2cyX3RpbGVzKQo+ID4gKyAgICAgICAgICAgIG1heF90aWxlX2Fy ZWFfc2JfdmFyaWVkID0gKHByaXYtPnNiX3Jvd3MgKiBwcml2LT5zYl9jb2xzKSA+PiAobWluX2xv ZzJfdGlsZXMgKyAxKTsKPiA+ICsgICAgICAgIGVsc2UKPiA+ICsgICAgICAgICAgICBtYXhfdGls ZV9hcmVhX3NiX3ZhcmllZCA9IHByaXYtPnNiX3Jvd3MgKiBwcml2LT5zYl9jb2xzOwo+ID4gKyAg ICAgICAgcHJpdi0+bWF4X3RpbGVfaGVpZ2h0X3NiID0gRkZNQVgoMSwgbWF4X3RpbGVfYXJlYV9z Yl92YXJpZWQgLyB3aWRlc3RfdGlsZV9zYik7Cj4gPiArCj4gPiArICAgICAgICBpZiAodGlsZV9y b3dzX3RtcCA9PSBhdl9jbGlwKHRpbGVfcm93c190bXAsIChwcml2LT5zYl9yb3dzICsgcHJpdi0+ bWF4X3RpbGVfaGVpZ2h0X3NiIC0gMSkgLyBwcml2LT5tYXhfdGlsZV9oZWlnaHRfc2IsIHByaXYt PnNiX3Jvd3MpKSB7Cj4gPiArICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRpbGVfcm93c190 bXA7IGkrKykKPiA+ICsgICAgICAgICAgICAgICAgcHJpdi0+aGVpZ2h0X2luX3Nic19taW51c18x W2ldID0gKGkgKyAxKSAqIHByaXYtPnNiX3Jvd3MgLyB0aWxlX3Jvd3NfdG1wIC0gaSAqIHByaXYt PnNiX3Jvd3MgLyB0aWxlX3Jvd3NfdG1wIC0gMTsKPiA+ICsKPiA+ICsgICAgICAgICAgICBicmVh azsKPiA+ICsgICAgICAgIH0KPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBpZiAocHJpdi0+dGls ZV9yb3dzICE9IHRpbGVfcm93c190bXApIHsKPiA+ICsgICAgICAgIHByaXYtPnRpbGVfcm93cyA9 IHRpbGVfcm93c190bXA7Cj4gPiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19XQVJOSU5H LCAiSW52YWxpZCB0aWxlIHJvd3MsIGNvcnJlY3QgdG8gJWQuXG4iLCBwcml2LT50aWxlX3Jvd3Mp Owo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIC8qKiBjaGVjayBpZiB0aWxlIGNvbHMvcm93cyBp cyBzdXBwb3J0ZWQgYnkgZHJpdmVyLiAqLwo+ID4gKyAgICBpZiAocHJpdi0+YXR0cl9leHQyLmJp dHMubWF4X3RpbGVfbnVtX21pbnVzMSkgewo+ID4gKyAgICAgICAgaWYgKChwcml2LT50aWxlX2Nv bHMgKiBwcml2LT50aWxlX3Jvd3MgLSAxKSA+IHByaXYtPmF0dHJfZXh0Mi5iaXRzLm1heF90aWxl X251bV9taW51czEpIHsKPiA+ICsgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJP UiwgIlVuc3VwcG9ydGVkIHRpbGUgbnVtICVkICogJWQgPSAlZCBieSBkcml2ZXIsICIKPiA+ICsg ICAgICAgICAgICAgICAgICAgInNob3VsZCBiZSBsZXNzIHRoYW4gJWQuXG4iLCBwcml2LT50aWxl X2NvbHMsIHByaXYtPnRpbGVfcm93cywKPiA+ICsgICAgICAgICAgICAgICAgICAgcHJpdi0+dGls ZV9jb2xzICogcHJpdi0+dGlsZV9yb3dzLAo+ID4gKyAgICAgICAgICAgICAgICAgICBwcml2LT5h dHRyX2V4dDIuYml0cy5tYXhfdGlsZV9udW1fbWludXMxICsgMSk7Cj4gPiArICAgICAgICAgICAg cmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiA+ICsgICAgICAgIH0KPiA+ICsgICAgfQo+ID4gKyAg ICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIlNldHRpbmcgdGlsZSBjb2xzL3Jvd3MgdG8g JWQvJWQuXG4iLAo+ID4gKyAgICAgICAgICAgcHJpdi0+dGlsZV9jb2xzLCBwcml2LT50aWxlX3Jv d3MpOwo+ID4gKwo+ID4gKyAgICAvKiogY2hlY2sgaWYgdGlsZSBncm91cCBudW1iZXJzIGlzIHZh bGlkLiAqLwo+ID4gKyAgICBpZiAocHJpdi0+dGlsZV9ncm91cHMgPiBwcml2LT50aWxlX2NvbHMg KiBwcml2LT50aWxlX3Jvd3MpIHsKPiA+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1dB Uk5JTkcsICJJbnZhbGlkIHRpbGUgZ3JvdXBzIG51bWJlciAlZCwgIgo+ID4gKyAgICAgICAgImNv cnJlY3QgdG8gJWQuXG4iLCBwcml2LT50aWxlX2dyb3VwcywgcHJpdi0+dGlsZV9jb2xzICogcHJp di0+dGlsZV9yb3dzKTsKPiA+ICsgICAgICAgIHByaXYtPnRpbGVfZ3JvdXBzID0gcHJpdi0+dGls ZV9jb2xzICogcHJpdi0+dGlsZV9yb3dzOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIHJldHVy biAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHZhYXBpX2VuY29kZV9hdjFfd3JpdGVf c2VxdWVuY2VfaGVhZGVyKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmRhdGEsIHNpemVfdCAq ZGF0YV9sZW4pCj4gPiArewo+ID4gKyAgICBWQUFQSUVuY29kZUFWMUNvbnRleHQgKnByaXYgPSBh dmN0eC0+cHJpdl9kYXRhOwo+ID4gKwo+ID4gKyAgICBtZW1jcHkoZGF0YSwgJnByaXYtPnNoX2Rh dGEsIE1BWF9QQVJBTV9CVUZGRVJfU0laRSAqIHNpemVvZihjaGFyKSk7Cj4gPiArICAgICpkYXRh X2xlbiA9IHByaXYtPnNoX2RhdGFfbGVuOwo+ID4gKwo+ID4gKyAgICByZXR1cm4gMDsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIGludCB2YWFwaV9lbmNvZGVfYXYxX2luaXRfc2VxdWVuY2VfcGFy YW1zKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiA+ICt7Cj4gPiArICAgIFZBQVBJRW5jb2RlQ29u dGV4dCAgICAgICAgICAgICAgICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+ID4gKyAgICBWQUFQ SUVuY29kZUFWMUNvbnRleHQgICAgICAgICAgICpwcml2ID0gYXZjdHgtPnByaXZfZGF0YTsKPiA+ ICsgICAgQVYxUmF3T0JVICAgICAgICAgICAgICAgICAgICAgKnNoX29idSA9ICZwcml2LT5zaDsK PiA+ICsgICAgQVYxUmF3U2VxdWVuY2VIZWFkZXIgICAgICAgICAgICAgICpzaCA9ICZzaF9vYnUt Pm9idS5zZXF1ZW5jZV9oZWFkZXI7Cj4gPiArICAgIFZBRW5jU2VxdWVuY2VQYXJhbWV0ZXJCdWZm ZXJBVjEgKnZzZXEgPSBjdHgtPmNvZGVjX3NlcXVlbmNlX3BhcmFtczsKPiA+ICsgICAgQ29kZWRC aXRzdHJlYW1GcmFnbWVudCAgICAgICAgICAgKm9idSA9ICZwcml2LT5jdXJyZW50X29idTsKPiA+ ICsgICAgY29uc3QgQVZQaXhGbXREZXNjcmlwdG9yICpkZXNjOwo+ID4gKyAgICBpbnQgcmV0Owo+ ID4gKwo+ID4gKyAgICBtZW1zZXQoc2hfb2J1LCAwLCBzaXplb2YoKnNoX29idSkpOwo+ID4gKyAg ICBzaF9vYnUtPmhlYWRlci5vYnVfdHlwZSA9IEFWMV9PQlVfU0VRVUVOQ0VfSEVBREVSOwo+ID4g Kwo+ID4gKyAgICBkZXNjID0gYXZfcGl4X2ZtdF9kZXNjX2dldChwcml2LT5jb21tb24uaW5wdXRf ZnJhbWVzLT5zd19mb3JtYXQpOwo+ID4gKyAgICBhdl9hc3NlcnQwKGRlc2MpOwo+ID4gKwo+ID4g KyAgICBzaC0+c2VxX3Byb2ZpbGUgID0gYXZjdHgtPnByb2ZpbGU7Cj4gPiArICAgIGlmICghc2gt PnNlcV9mb3JjZV9zY3JlZW5fY29udGVudF90b29scykKPiA+ICsgICAgICAgIHNoLT5zZXFfZm9y Y2VfaW50ZWdlcl9tdiA9IEFWMV9TRUxFQ1RfSU5URUdFUl9NVjsKPiA+ICsgICAgc2gtPmZyYW1l X3dpZHRoX2JpdHNfbWludXNfMSAgPSBhdl9sb2cyKGF2Y3R4LT53aWR0aCk7Cj4gPiArICAgIHNo LT5mcmFtZV9oZWlnaHRfYml0c19taW51c18xID0gYXZfbG9nMihhdmN0eC0+aGVpZ2h0KTsKPiA+ ICsgICAgc2gtPm1heF9mcmFtZV93aWR0aF9taW51c18xICAgPSBhdmN0eC0+d2lkdGggLSAxOwo+ ID4gKyAgICBzaC0+bWF4X2ZyYW1lX2hlaWdodF9taW51c18xICA9IGF2Y3R4LT5oZWlnaHQgLSAx Owo+ID4gKyAgICBzaC0+c2VxX3RpZXJbMF0gICAgICAgICAgICAgICA9IHByaXYtPnRpZXI7Cj4g PiArICAgIC8qKiBlbmFibGUgb3JkZXIgaGludCBhbmQgcmVzZXJ2ZSBtYXhpbXVtIDggYml0cyBm b3IgaXQgYnkgZGVmYXVsdC4gKi8KPiA+ICsgICAgc2gtPmVuYWJsZV9vcmRlcl9oaW50ICAgICAg ICAgPSAxOwo+ID4gKyAgICBzaC0+b3JkZXJfaGludF9iaXRzX21pbnVzXzEgICA9IDc7Cj4gPiAr Cj4gPiArICAgIHNoLT5jb2xvcl9jb25maWcgPSAoQVYxUmF3Q29sb3JDb25maWcpIHsKPiA+ICsg ICAgICAgIC5oaWdoX2JpdGRlcHRoICAgICAgICAgICAgICAgICAgPSBkZXNjLT5jb21wWzBdLmRl cHRoID09IDggPyAwIDogMSwKPiA+ICsgICAgICAgIC5jb2xvcl9wcmltYXJpZXMgICAgICAgICAg ICAgICAgPSBhdmN0eC0+Y29sb3JfcHJpbWFyaWVzLAo+ID4gKyAgICAgICAgLnRyYW5zZmVyX2No YXJhY3RlcmlzdGljcyAgICAgICA9IGF2Y3R4LT5jb2xvcl90cmMsCj4gPiArICAgICAgICAubWF0 cml4X2NvZWZmaWNpZW50cyAgICAgICAgICAgID0gYXZjdHgtPmNvbG9yc3BhY2UsCj4gPiArICAg ICAgICAuY29sb3JfZGVzY3JpcHRpb25fcHJlc2VudF9mbGFnID0gKGF2Y3R4LT5jb2xvcl9wcmlt YXJpZXMgIT0gQVZDT0xfUFJJX1VOU1BFQ0lGSUVEIHx8Cj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGF2Y3R4LT5jb2xvcl90cmMgICAgICAgIT0gQVZDT0xf VFJDX1VOU1BFQ0lGSUVEIHx8Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGF2Y3R4LT5jb2xvcnNwYWNlICAgICAgIT0gQVZDT0xfU1BDX1VOU1BFQ0lGSUVE KSwKPiA+ICsgICAgICAgIC5jb2xvcl9yYW5nZSAgICAgICAgICAgICAgICAgICAgPSBhdmN0eC0+ Y29sb3JfcmFuZ2UgPT0gQVZDT0xfUkFOR0VfSlBFRywKPiA+ICsgICAgICAgIC5zdWJzYW1wbGlu Z194ICAgICAgICAgICAgICAgICAgPSBkZXNjLT5sb2cyX2Nocm9tYV93LAo+ID4gKyAgICAgICAg LnN1YnNhbXBsaW5nX3kgICAgICAgICAgICAgICAgICA9IGRlc2MtPmxvZzJfY2hyb21hX2gsCj4g PiArICAgIH07Cj4gPiArCj4gPiArICAgIGlmIChhdmN0eC0+bGV2ZWwgIT0gRkZfTEVWRUxfVU5L Tk9XTikgewo+ID4gKyAgICAgICAgc2gtPnNlcV9sZXZlbF9pZHhbMF0gPSBhdmN0eC0+bGV2ZWw7 Cj4gPiArICAgIH0gZWxzZSB7Cj4gPiArICAgICAgICBjb25zdCBBVjFMZXZlbERlc2NyaXB0b3Ig KmxldmVsOwo+ID4gKyAgICAgICAgZmxvYXQgZnJhbWVyYXRlOwo+ID4gKwo+ID4gKyAgICAgICAg aWYgKGF2Y3R4LT5mcmFtZXJhdGUubnVtID4gMCAmJiBhdmN0eC0+ZnJhbWVyYXRlLmRlbiA+IDAp Cj4gPiArICAgICAgICAgICAgZnJhbWVyYXRlID0gYXZjdHgtPmZyYW1lcmF0ZS5udW0gLyBhdmN0 eC0+ZnJhbWVyYXRlLmRlbjsKPiA+ICsgICAgICAgIGVsc2UKPiA+ICsgICAgICAgICAgICBmcmFt ZXJhdGUgPSAwOwo+ID4gKwo+ID4gKyAgICAgICAgbGV2ZWwgPSBmZl9hdjFfZ3Vlc3NfbGV2ZWwo YXZjdHgtPmJpdF9yYXRlLCBwcml2LT50aWVyLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY3R4LT5zdXJmYWNlX3dpZHRoLCBjdHgtPnN1cmZhY2VfaGVpZ2h0LAo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+dGlsZV9yb3dzICogcHJp di0+dGlsZV9jb2xzLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJp di0+dGlsZV9jb2xzLCBmcmFtZXJhdGUpOwo+ID4gKyAgICAgICAgaWYgKGxldmVsKSB7Cj4gPiAr ICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIlVzaW5nIGxldmVsICVz LlxuIiwgbGV2ZWwtPm5hbWUpOwo+ID4gKyAgICAgICAgICAgIHNoLT5zZXFfbGV2ZWxfaWR4WzBd ID0gbGV2ZWwtPmxldmVsX2lkeDsKPiA+ICsgICAgICAgIH0gZWxzZSB7Cj4gPiArICAgICAgICAg ICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIlN0cmVhbSB3aWxsIG5vdCBjb25mb3Jt IHRvICIKPiA+ICsgICAgICAgICAgICAgICAgICAgImFueSBub3JtYWwgbGV2ZWwsIHVzaW5nIGxl dmVsIDYuMyBieSBkZWZhdWx0LlxuIik7Cj4gPiArICAgICAgICAgICAgc2gtPnNlcV9sZXZlbF9p ZHhbMF0gPSAxOTsKPiA+ICsgICAgICAgICAgICBzaC0+c2VxX3RpZXJbMF0gPSAxOwo+ID4gKyAg ICAgICAgfQo+ID4gKyAgICB9Cj4gPiArICAgIHZzZXEtPnNlcV9wcm9maWxlICAgICAgICAgICAg ID0gc2gtPnNlcV9wcm9maWxlOwo+ID4gKyAgICB2c2VxLT5zZXFfbGV2ZWxfaWR4ICAgICAgICAg ICA9IHNoLT5zZXFfbGV2ZWxfaWR4WzBdOwo+ID4gKyAgICB2c2VxLT5zZXFfdGllciAgICAgICAg ICAgICAgICA9IHNoLT5zZXFfdGllclswXTsKPiA+ICsgICAgdnNlcS0+b3JkZXJfaGludF9iaXRz X21pbnVzXzEgPSBzaC0+b3JkZXJfaGludF9iaXRzX21pbnVzXzE7Cj4gPiArICAgIHZzZXEtPmlu dHJhX3BlcmlvZCAgICAgICAgICAgID0gY3R4LT5nb3Bfc2l6ZTsKPiA+ICsgICAgdnNlcS0+aXBf cGVyaW9kICAgICAgICAgICAgICAgPSBjdHgtPmJfcGVyX3AgKyAxOwo+ID4gKwo+ID4gKyAgICB2 c2VxLT5zZXFfZmllbGRzLmJpdHMuZW5hYmxlX29yZGVyX2hpbnQgPSBzaC0+ZW5hYmxlX29yZGVy X2hpbnQ7Cj4gPiArCj4gPiArICAgIGlmICghKGN0eC0+dmFfcmNfbW9kZSAmIFZBX1JDX0NRUCkp IHsKPiA+ICsgICAgICAgIHZzZXEtPmJpdHNfcGVyX3NlY29uZCA9IGN0eC0+dmFfYml0X3JhdGU7 Cj4gPiArICAgICAgICB2c2VxLT5zZXFfZmllbGRzLmJpdHMuZW5hYmxlX2NkZWYgPSBzaC0+ZW5h YmxlX2NkZWYgPSAxOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIHJldCA9IHZhYXBpX2VuY29k ZV9hdjFfYWRkX29idShhdmN0eCwgb2J1LCBBVjFfT0JVX1NFUVVFTkNFX0hFQURFUiwgJnByaXYt PnNoKTsKPiA+ICsgICAgaWYgKHJldCA8IDApCj4gPiArICAgICAgICBnb3RvIGVuZDsKPiA+ICsK PiA+ICsgICAgcmV0ID0gdmFhcGlfZW5jb2RlX2F2MV93cml0ZV9vYnUoYXZjdHgsIHByaXYtPnNo X2RhdGEsICZwcml2LT5zaF9kYXRhX2xlbiwgb2J1KTsKPiA+ICsgICAgaWYgKHJldCA8IDApCj4g PiArICAgICAgICBnb3RvIGVuZDsKPiA+ICsKPiA+ICtlbmQ6Cj4gPiArICAgIGZmX2Nic19mcmFn bWVudF9yZXNldChvYnUpOwo+ID4gKyAgICByZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgaW50IHZhYXBpX2VuY29kZV9hdjFfaW5pdF9waWN0dXJlX3BhcmFtcyhBVkNvZGVjQ29u dGV4dCAqYXZjdHgsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVkFBUElFbmNvZGVQaWN0dXJlICpwaWMpCj4gPiArewo+ID4gKyAgICBWQUFQSUVu Y29kZUFWMUNvbnRleHQgICAgICAgICAgKnByaXYgPSBhdmN0eC0+cHJpdl9kYXRhOwo+ID4gKyAg ICBWQUFQSUVuY29kZUFWMVBpY3R1cmUgICAgICAgICAgKmhwaWMgPSBwaWMtPnByaXZfZGF0YTsK PiA+ICsgICAgQVYxUmF3T0JVICAgICAgICAgICAgICAgICAgICAqZmhfb2J1ID0gJnByaXYtPmZo Owo+ID4gKyAgICBBVjFSYXdGcmFtZUhlYWRlciAgICAgICAgICAgICAgICAqZmggPSAmZmhfb2J1 LT5vYnUuZnJhbWUuaGVhZGVyOwo+ID4gKyAgICBWQUVuY1BpY3R1cmVQYXJhbWV0ZXJCdWZmZXJB VjEgKnZwaWMgPSBwaWMtPmNvZGVjX3BpY3R1cmVfcGFyYW1zOwo+ID4gKyAgICBDb2RlZEJpdHN0 cmVhbUZyYWdtZW50ICAgICAgICAgICpvYnUgPSAmcHJpdi0+Y3VycmVudF9vYnU7Cj4gPiArICAg IFZBQVBJRW5jb2RlUGljdHVyZSAgICAqcmVmOwo+ID4gKyAgICBWQUFQSUVuY29kZUFWMVBpY3R1 cmUgKmhyZWY7Cj4gPiArICAgIGludCBzbG90LCBpOwo+ID4gKyAgICBpbnQgcmV0Owo+ID4gKyAg ICBzdGF0aWMgY29uc3QgaW50OF90IGRlZmF1bHRfbG9vcF9maWx0ZXJfcmVmX2RlbHRhc1tBVjFf VE9UQUxfUkVGU19QRVJfRlJBTUVdID0KPiA+ICsgICAgICAgIHsgMSwgMCwgMCwgMCwgLTEsIDAs IC0xLCAtMSB9Owo+ID4gKwo+ID4gKyAgICBtZW1zZXQoZmhfb2J1LCAwLCBzaXplb2YoKmZoX29i dSkpOwo+ID4gKyAgICBwaWMtPm5iX3NsaWNlcyA9IHByaXYtPnRpbGVfZ3JvdXBzOwo+ID4gKyAg ICBmaF9vYnUtPmhlYWRlci5vYnVfdHlwZSA9IEFWMV9PQlVfRlJBTUVfSEVBREVSOwo+ID4gKyAg ICBmaF9vYnUtPmhlYWRlci5vYnVfaGFzX3NpemVfZmllbGQgPSAxOwo+ID4gKwo+ID4gKyAgICBz d2l0Y2ggKHBpYy0+dHlwZSkgewo+ID4gKyAgICBjYXNlIFBJQ1RVUkVfVFlQRV9JRFI6Cj4gPiAr ICAgICAgICBhdl9hc3NlcnQwKHBpYy0+bmJfcmVmc1swXSA9PSAwIHx8IHBpYy0+bmJfcmVmc1sx XSk7Cj4gPiArICAgICAgICBmaC0+ZnJhbWVfdHlwZSA9IEFWMV9GUkFNRV9LRVk7Cj4gPiArICAg ICAgICBmaC0+cmVmcmVzaF9mcmFtZV9mbGFncyA9IDB4RkY7Cj4gPiArICAgICAgICBmaC0+YmFz ZV9xX2lkeCA9IHByaXYtPnFfaWR4X2lkcjsKPiA+ICsgICAgICAgIGhwaWMtPnNsb3QgPSAwOwo+ ID4gKyAgICAgICAgaHBpYy0+bGFzdF9pZHJfZnJhbWUgPSBwaWMtPmRpc3BsYXlfb3JkZXI7Cj4g PiArICAgICAgICBicmVhazsKPiA+ICsgICAgY2FzZSBQSUNUVVJFX1RZUEVfUDoKPiA+ICsgICAg ICAgIGF2X2Fzc2VydDAocGljLT5uYl9yZWZzWzBdKTsKPiA+ICsgICAgICAgIGZoLT5mcmFtZV90 eXBlID0gQVYxX0ZSQU1FX0lOVEVSOwo+ID4gKyAgICAgICAgZmgtPmJhc2VfcV9pZHggPSBwcml2 LT5xX2lkeF9wOwo+ID4gKyAgICAgICAgcmVmID0gcGljLT5yZWZzWzBdW3BpYy0+bmJfcmVmc1sw XSAtIDFdOwo+ID4gKyAgICAgICAgaHJlZiA9IHJlZi0+cHJpdl9kYXRhOwo+ID4gKyAgICAgICAg aHBpYy0+c2xvdCA9ICFocmVmLT5zbG90Owo+ID4gKyAgICAgICAgaHBpYy0+bGFzdF9pZHJfZnJh bWUgPSBocmVmLT5sYXN0X2lkcl9mcmFtZTsKPiA+ICsgICAgICAgIGZoLT5yZWZyZXNoX2ZyYW1l X2ZsYWdzID0gMSA8PCBocGljLT5zbG90Owo+ID4gKwo+ID4gKyAgICAgICAgLyoqIHNldCB0aGUg bmVhcmVzdCBmcmFtZSBpbiBMMCBhcyBhbGwgcmVmZXJlbmNlIGZyYW1lLiAqLwo+ID4gKyAgICAg ICAgZm9yIChpID0gMDsgaSA8IEFWMV9SRUZTX1BFUl9GUkFNRTsgaSsrKSB7Cj4gPiArICAgICAg ICAgICAgZmgtPnJlZl9mcmFtZV9pZHhbaV0gPSBocmVmLT5zbG90Owo+ID4gKyAgICAgICAgfQo+ ID4gKyAgICAgICAgZmgtPnByaW1hcnlfcmVmX2ZyYW1lID0gaHJlZi0+c2xvdDsKPiA+ICsgICAg ICAgIGZoLT5yZWZfb3JkZXJfaGludFtocmVmLT5zbG90XSA9IHJlZi0+ZGlzcGxheV9vcmRlciAt IGhyZWYtPmxhc3RfaWRyX2ZyYW1lOwo+ID4gKyAgICAgICAgdnBpYy0+cmVmX2ZyYW1lX2N0cmxf bDAuZmllbGRzLnNlYXJjaF9pZHgwID0gQVYxX1JFRl9GUkFNRV9MQVNUOwo+ID4gKwo+ID4gKyAg ICAgICAgLyoqIHNldCB0aGUgMm5kIG5lYXJlc3QgZnJhbWUgaW4gTDAgYXMgR29sZGVuIGZyYW1l LiAqLwo+ID4gKyAgICAgICAgaWYgKHBpYy0+bmJfcmVmc1swXSA+IDEpIHsKPiA+ICsgICAgICAg ICAgICByZWYgPSBwaWMtPnJlZnNbMF1bcGljLT5uYl9yZWZzWzBdIC0gMl07Cj4gPiArICAgICAg ICAgICAgaHJlZiA9IHJlZi0+cHJpdl9kYXRhOwo+ID4gKyAgICAgICAgICAgIGZoLT5yZWZfZnJh bWVfaWR4WzNdID0gaHJlZi0+c2xvdDsKPiA+ICsgICAgICAgICAgICBmaC0+cmVmX29yZGVyX2hp bnRbaHJlZi0+c2xvdF0gPSByZWYtPmRpc3BsYXlfb3JkZXIgLSBocmVmLT5sYXN0X2lkcl9mcmFt ZTsKPiA+ICsgICAgICAgICAgICB2cGljLT5yZWZfZnJhbWVfY3RybF9sMC5maWVsZHMuc2VhcmNo X2lkeDEgPSBBVjFfUkVGX0ZSQU1FX0dPTERFTjsKPiA+ICsgICAgICAgIH0KPiA+ICsgICAgICAg IGJyZWFrOwo+ID4gKyAgICBjYXNlIFBJQ1RVUkVfVFlQRV9COgo+ID4gKyAgICAgICAgYXZfYXNz ZXJ0MChwaWMtPm5iX3JlZnNbMF0gJiYgcGljLT5uYl9yZWZzWzFdKTsKPiA+ICsgICAgICAgIGZo LT5mcmFtZV90eXBlID0gQVYxX0ZSQU1FX0lOVEVSOwo+ID4gKyAgICAgICAgZmgtPmJhc2VfcV9p ZHggPSBwcml2LT5xX2lkeF9iOwo+ID4gKyAgICAgICAgZmgtPnJlZnJlc2hfZnJhbWVfZmxhZ3Mg PSAweDA7Cj4gPiArICAgICAgICBmaC0+cmVmZXJlbmNlX3NlbGVjdCA9IDE7Cj4gPiArCj4gPiAr ICAgICAgICAvKiogQiBmcmFtZSB3aWxsIG5vdCBiZSByZWZlcmVuY2VkLCBkaXNhYmxlIGl0cyBy ZWNvbiBmcmFtZS4gKi8KPiA+ICsgICAgICAgIHZwaWMtPnBpY3R1cmVfZmxhZ3MuYml0cy5kaXNh YmxlX2ZyYW1lX3JlY29uID0gMTsKPiA+ICsKPiA+ICsgICAgICAgIC8qKiBVc2UgTEFTVF9GUkFN RSBhbmQgQldEUkVGX0ZSQU1FIGZvciByZWZlcmVuY2UuICovCj4gPiArICAgICAgICB2cGljLT5y ZWZfZnJhbWVfY3RybF9sMC5maWVsZHMuc2VhcmNoX2lkeDAgPSBBVjFfUkVGX0ZSQU1FX0xBU1Q7 Cj4gPiArICAgICAgICB2cGljLT5yZWZfZnJhbWVfY3RybF9sMS5maWVsZHMuc2VhcmNoX2lkeDAg PSBBVjFfUkVGX0ZSQU1FX0JXRFJFRjsKPiA+ICsKPiA+ICsgICAgICAgIHJlZiAgICAgICAgICAg ICAgICAgICAgICAgICAgICA9IHBpYy0+cmVmc1swXVtwaWMtPm5iX3JlZnNbMF0gLSAxXTsKPiA+ ICsgICAgICAgIGhyZWYgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHJlZi0+cHJpdl9kYXRh Owo+ID4gKyAgICAgICAgaHBpYy0+bGFzdF9pZHJfZnJhbWUgICAgICAgICAgID0gaHJlZi0+bGFz dF9pZHJfZnJhbWU7Cj4gPiArICAgICAgICBmaC0+cHJpbWFyeV9yZWZfZnJhbWUgICAgICAgICAg PSBocmVmLT5zbG90Owo+ID4gKyAgICAgICAgZmgtPnJlZl9vcmRlcl9oaW50W2hyZWYtPnNsb3Rd ID0gcmVmLT5kaXNwbGF5X29yZGVyIC0gaHJlZi0+bGFzdF9pZHJfZnJhbWU7Cj4gPiArICAgICAg ICBmb3IgKGkgPSAwOyBpIDwgQVYxX1JFRl9GUkFNRV9HT0xERU47IGkrKykgewo+ID4gKyAgICAg ICAgICAgIGZoLT5yZWZfZnJhbWVfaWR4W2ldID0gaHJlZi0+c2xvdDsKPiA+ICsgICAgICAgIH0K PiA+ICsKPiA+ICsgICAgICAgIHJlZiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHBpYy0+ cmVmc1sxXVtwaWMtPm5iX3JlZnNbMV0gLSAxXTsKPiA+ICsgICAgICAgIGhyZWYgICAgICAgICAg ICAgICAgICAgICAgICAgICA9IHJlZi0+cHJpdl9kYXRhOwo+ID4gKyAgICAgICAgZmgtPnJlZl9v cmRlcl9oaW50W2hyZWYtPnNsb3RdID0gcmVmLT5kaXNwbGF5X29yZGVyIC0gaHJlZi0+bGFzdF9p ZHJfZnJhbWU7Cj4gPiArICAgICAgICBmb3IgKGkgPSBBVjFfUkVGX0ZSQU1FX0dPTERFTjsgaSA8 IEFWMV9SRUZTX1BFUl9GUkFNRTsgaSsrKSB7Cj4gPiArICAgICAgICAgICAgZmgtPnJlZl9mcmFt ZV9pZHhbaV0gPSBocmVmLT5zbG90Owo+ID4gKyAgICAgICAgfQo+ID4gKyAgICAgICAgYnJlYWs7 Cj4gPiArICAgIGRlZmF1bHQ6Cj4gPiArICAgICAgICBhdl9hc3NlcnQwKDAgJiYgImludmFsaWQg cGljdHVyZSB0eXBlIik7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgZmgtPnNob3dfZnJhbWUg ICAgICAgICAgICAgICAgPSBwaWMtPmRpc3BsYXlfb3JkZXIgPD0gcGljLT5lbmNvZGVfb3JkZXI7 Cj4gPiArICAgIGZoLT5zaG93YWJsZV9mcmFtZSAgICAgICAgICAgID0gZmgtPmZyYW1lX3R5cGUg IT0gQVYxX0ZSQU1FX0tFWTsKPiA+ICsgICAgZmgtPmZyYW1lX3dpZHRoX21pbnVzXzEgICAgICAg PSBhdmN0eC0+d2lkdGggLSAxOwo+ID4gKyAgICBmaC0+ZnJhbWVfaGVpZ2h0X21pbnVzXzEgICAg ICA9IGF2Y3R4LT5oZWlnaHQgLSAxOwo+ID4gKyAgICBmaC0+cmVuZGVyX3dpZHRoX21pbnVzXzEg ICAgICA9IGZoLT5mcmFtZV93aWR0aF9taW51c18xOwo+ID4gKyAgICBmaC0+cmVuZGVyX2hlaWdo dF9taW51c18xICAgICA9IGZoLT5mcmFtZV9oZWlnaHRfbWludXNfMTsKPiA+ICsgICAgZmgtPm9y ZGVyX2hpbnQgICAgICAgICAgICAgICAgPSBwaWMtPmRpc3BsYXlfb3JkZXIgLSBocGljLT5sYXN0 X2lkcl9mcmFtZTsKPiA+ICsgICAgZmgtPnRpbGVfY29scyAgICAgICAgICAgICAgICAgPSBwcml2 LT50aWxlX2NvbHM7Cj4gPiArICAgIGZoLT50aWxlX3Jvd3MgICAgICAgICAgICAgICAgID0gcHJp di0+dGlsZV9yb3dzOwo+ID4gKyAgICBmaC0+dGlsZV9jb2xzX2xvZzIgICAgICAgICAgICA9IHBy aXYtPnRpbGVfY29sc19sb2cyOwo+ID4gKyAgICBmaC0+dGlsZV9yb3dzX2xvZzIgICAgICAgICAg ICA9IHByaXYtPnRpbGVfcm93c19sb2cyOwo+ID4gKyAgICBmaC0+dW5pZm9ybV90aWxlX3NwYWNp bmdfZmxhZyA9IHByaXYtPnVuaWZvcm1fdGlsZTsKPiA+ICsgICAgZmgtPnRpbGVfc2l6ZV9ieXRl c19taW51czEgICAgPSBwcml2LT5hdHRyX2V4dDIuYml0cy50aWxlX3NpemVfYnl0ZXNfbWludXMx Owo+ID4gKyAgICBmaC0+cmVkdWNlZF90eF9zZXQgICAgICAgICAgICA9IDE7Cj4gPiArCj4gPiAr ICAgIC8qKiBpZ25vcmUgT05MWV80eDQgbW9kZSBmb3IgY29kZWRsb3NzbGVzcyBpcyBub3QgZnVs bHkgaW1wbGVtZW50ZWQuICovCj4gPiArICAgIGlmIChwcml2LT5hdHRyX2V4dDIuYml0cy50eF9t b2RlX3N1cHBvcnQgJiAweDA0KQo+ID4gKyAgICAgICAgZmgtPnR4X21vZGUgPSBBVjFfVFhfTU9E RV9TRUxFQ1Q7Cj4gPiArICAgIGVsc2UgaWYgKHByaXYtPmF0dHJfZXh0Mi5iaXRzLnR4X21vZGVf c3VwcG9ydCAmIDB4MDIpCj4gPiArICAgICAgICBmaC0+dHhfbW9kZSA9IEFWMV9UWF9NT0RFX0xB UkdFU1Q7Cj4gPiArICAgIGVsc2UKPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7 Cj4gPiArCj4gPiArICAgIGZvciAoaSA9IDA7IGkgPCBmaC0+dGlsZV9jb2xzOyBpKyspCj4gPiAr ICAgICAgICBmaC0+d2lkdGhfaW5fc2JzX21pbnVzXzFbaV0gPSB2cGljLT53aWR0aF9pbl9zYnNf bWludXNfMVtpXSA9IHByaXYtPndpZHRoX2luX3Nic19taW51c18xW2ldOwo+ID4gKwo+ID4gKyAg ICBmb3IgKGkgPSAwOyBpIDwgZmgtPnRpbGVfcm93czsgaSsrKQo+ID4gKyAgICAgICAgZmgtPmhl aWdodF9pbl9zYnNfbWludXNfMVtpXSA9IHZwaWMtPmhlaWdodF9pbl9zYnNfbWludXNfMVtpXSA9 IHByaXYtPmhlaWdodF9pbl9zYnNfbWludXNfMVtpXTsKPiA+ICsKPiA+ICsgICAgbWVtY3B5KGZo LT5sb29wX2ZpbHRlcl9yZWZfZGVsdGFzLCBkZWZhdWx0X2xvb3BfZmlsdGVyX3JlZl9kZWx0YXMs Cj4gPiArICAgICAgICAgICBBVjFfVE9UQUxfUkVGU19QRVJfRlJBTUUgKiBzaXplb2YoaW50OF90 KSk7Cj4gPiArCj4gPiArICAgIGlmIChmaC0+ZnJhbWVfdHlwZSA9PSBBVjFfRlJBTUVfS0VZICYm IGZoLT5zaG93X2ZyYW1lKSB7Cj4gPiArICAgICAgICBmaC0+ZXJyb3JfcmVzaWxpZW50X21vZGUg PSAxOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGlmIChmaC0+ZnJhbWVfdHlwZSA9PSBBVjFf RlJBTUVfS0VZIHx8IGZoLT5lcnJvcl9yZXNpbGllbnRfbW9kZSkKPiA+ICsgICAgICAgIGZoLT5w cmltYXJ5X3JlZl9mcmFtZSA9IEFWMV9QUklNQVJZX1JFRl9OT05FOwo+ID4gKwo+ID4gKyAgICB2 cGljLT5iYXNlX3FpbmRleCAgICAgICAgICA9IGZoLT5iYXNlX3FfaWR4Owo+ID4gKyAgICB2cGlj LT5mcmFtZV93aWR0aF9taW51c18xICA9IGZoLT5mcmFtZV93aWR0aF9taW51c18xOwo+ID4gKyAg ICB2cGljLT5mcmFtZV9oZWlnaHRfbWludXNfMSA9IGZoLT5mcmFtZV9oZWlnaHRfbWludXNfMTsK PiA+ICsgICAgdnBpYy0+cHJpbWFyeV9yZWZfZnJhbWUgICAgPSBmaC0+cHJpbWFyeV9yZWZfZnJh bWU7Cj4gPiArICAgIHZwaWMtPnJlY29uc3RydWN0ZWRfZnJhbWUgID0gcGljLT5yZWNvbl9zdXJm YWNlOwo+ID4gKyAgICB2cGljLT5jb2RlZF9idWYgICAgICAgICAgICA9IHBpYy0+b3V0cHV0X2J1 ZmZlcjsKPiA+ICsgICAgdnBpYy0+dGlsZV9jb2xzICAgICAgICAgICAgPSBmaC0+dGlsZV9jb2xz Owo+ID4gKyAgICB2cGljLT50aWxlX3Jvd3MgICAgICAgICAgICA9IGZoLT50aWxlX3Jvd3M7Cj4g PiArICAgIHZwaWMtPm9yZGVyX2hpbnQgICAgICAgICAgID0gZmgtPm9yZGVyX2hpbnQ7Cj4gPiAr I2lmIFZBX0NIRUNLX1ZFUlNJT04oMSwgMTUsIDApCj4gPiArICAgIHZwaWMtPnJlZnJlc2hfZnJh bWVfZmxhZ3MgID0gZmgtPnJlZnJlc2hfZnJhbWVfZmxhZ3M7Cj4gPiArI2VuZGlmCj4gPiArCj4g PiArICAgIHZwaWMtPnBpY3R1cmVfZmxhZ3MuYml0cy5lbmFibGVfZnJhbWVfb2J1ICAgICA9IDA7 Cj4gPiArICAgIHZwaWMtPnBpY3R1cmVfZmxhZ3MuYml0cy5mcmFtZV90eXBlICAgICAgICAgICA9 IGZoLT5mcmFtZV90eXBlOwo+ID4gKyAgICB2cGljLT5waWN0dXJlX2ZsYWdzLmJpdHMucmVkdWNl ZF90eF9zZXQgICAgICAgPSBmaC0+cmVkdWNlZF90eF9zZXQ7Cj4gPiArICAgIHZwaWMtPnBpY3R1 cmVfZmxhZ3MuYml0cy5lcnJvcl9yZXNpbGllbnRfbW9kZSA9IGZoLT5lcnJvcl9yZXNpbGllbnRf bW9kZTsKPiA+ICsKPiA+ICsgICAgLyoqIGxldCBkcml2ZXIgZGVjaWRlIHRvIHVzZSBzaW5nbGUg b3IgY29tcG91bmQgcmVmZXJlbmNlIHByZWRpY3Rpb24gbW9kZS4gKi8KPiA+ICsgICAgdnBpYy0+ bW9kZV9jb250cm9sX2ZsYWdzLmJpdHMucmVmZXJlbmNlX21vZGUgPSBmaC0+cmVmZXJlbmNlX3Nl bGVjdCA/IDIgOiAwOwo+ID4gKyAgICB2cGljLT5tb2RlX2NvbnRyb2xfZmxhZ3MuYml0cy50eF9t b2RlID0gZmgtPnR4X21vZGU7Cj4gPiArCj4gPiArICAgIHZwaWMtPnRpbGVfZ3JvdXBfb2J1X2hk cl9pbmZvLmJpdHMub2J1X2hhc19zaXplX2ZpZWxkID0gMTsKPiA+ICsKPiA+ICsgICAgLyoqIHNl dCByZWZlcmVuY2UuICovCj4gPiArICAgIGZvciAoaSA9IDA7IGkgPCBBVjFfUkVGU19QRVJfRlJB TUU7IGkrKykKPiA+ICsgICAgICAgIHZwaWMtPnJlZl9mcmFtZV9pZHhbaV0gPSBmaC0+cmVmX2Zy YW1lX2lkeFtpXTsKPiA+ICsKPiA+ICsgICAgZm9yIChpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1T KHZwaWMtPnJlZmVyZW5jZV9mcmFtZXMpOyBpKyspCj4gPiArICAgICAgICB2cGljLT5yZWZlcmVu Y2VfZnJhbWVzW2ldID0gVkFfSU5WQUxJRF9TVVJGQUNFOwo+ID4gKwo+ID4gKyAgICBmb3IgKGkg PSAwOyBpIDwgTUFYX1JFRkVSRU5DRV9MSVNUX05VTTsgaSsrKSB7Cj4gPiArICAgICAgICBmb3Ig KGludCBqID0gMDsgaiA8IHBpYy0+bmJfcmVmc1tpXTsgaisrKSB7Cj4gPiArICAgICAgICAgICAg VkFBUElFbmNvZGVQaWN0dXJlICpyZWZfcGljID0gcGljLT5yZWZzW2ldW2pdOwo+ID4gKwo+ID4g KyAgICAgICAgICAgIHNsb3QgPSAoKFZBQVBJRW5jb2RlQVYxUGljdHVyZSopcmVmX3BpYy0+cHJp dl9kYXRhKS0+c2xvdDsKPiA+ICsgICAgICAgICAgICBhdl9hc3NlcnQwKHZwaWMtPnJlZmVyZW5j ZV9mcmFtZXNbc2xvdF0gPT0gVkFfSU5WQUxJRF9TVVJGQUNFKTsKPiA+ICsKPiA+ICsgICAgICAg ICAgICB2cGljLT5yZWZlcmVuY2VfZnJhbWVzW3Nsb3RdID0gcmVmX3BpYy0+cmVjb25fc3VyZmFj ZTsKPiA+ICsgICAgICAgIH0KPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICAvKiogcGFjayBmcmFt ZSBoZWFkZXIsIGFuZCBzZXQgdmEgcGFyYW1zIG9mZnNldCBsaWtlIGJpdF9vZmZzZXRfcWluZGV4 IGV0Yy4gKi8KPiA+ICsgICAgcmV0ID0gdmFhcGlfZW5jb2RlX2F2MV93cml0ZV9mcmFtZV9oZWFk ZXIoYXZjdHgsIHBpYywgcHJpdi0+ZmhfZGF0YSwgJnByaXYtPmZoX2RhdGFfbGVuKTsKPiA+ICsg ICAgaWYgKHJldCA8IDApCj4gPiArICAgICAgICBnb3RvIGVuZDsKPiA+ICsKPiA+ICtlbmQ6Cj4g PiArICAgIGZmX2Nic19mcmFnbWVudF9yZXNldChvYnUpOwo+ID4gKyAgICByZXR1cm4gcmV0Owo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHZhYXBpX2VuY29kZV9hdjFfaW5pdF9zbGljZV9w YXJhbXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBWQUFQSUVuY29kZVBpY3R1cmUgKnBpYywKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFBUElFbmNvZGVTbGlj ZSAqc2xpY2UpCj4gPiArewo+ID4gKyAgICBWQUFQSUVuY29kZUFWMUNvbnRleHQgICAgICAqcHJp diA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gPiArICAgIFZBRW5jVGlsZUdyb3VwQnVmZmVyQVYxICAq dnNsaWNlID0gc2xpY2UtPmNvZGVjX3NsaWNlX3BhcmFtczsKPiA+ICsgICAgQ29kZWRCaXRzdHJl YW1BVjFDb250ZXh0ICAqY2JjdHggPSBwcml2LT5jYmMtPnByaXZfZGF0YTsKPiA+ICsgICAgaW50 IGRpdjsKPiA+ICsKPiA+ICsgICAgLyoqIFNldCB0aWxlIGdyb3VwIGluZm8uICovCj4gPiArICAg IGRpdiA9IHByaXYtPnRpbGVfY29scyAqIHByaXYtPnRpbGVfcm93cyAvIHByaXYtPnRpbGVfZ3Jv dXBzOwo+ID4gKyAgICB2c2xpY2UtPnRnX3N0YXJ0ID0gc2xpY2UtPmluZGV4ICogZGl2Owo+ID4g KyAgICBpZiAoc2xpY2UtPmluZGV4ID09IChwcml2LT50aWxlX2dyb3VwcyAtIDEpKSB7Cj4gPiAr ICAgICAgICB2c2xpY2UtPnRnX2VuZCA9IHByaXYtPnRpbGVfY29scyAqIHByaXYtPnRpbGVfcm93 cyAtIDE7Cj4gPiArICAgICAgICBjYmN0eC0+c2Vlbl9mcmFtZV9oZWFkZXIgPSAwOwo+ID4gKyAg ICB9IGVsc2Ugewo+ID4gKyAgICAgICAgdnNsaWNlLT50Z19lbmQgPSAoc2xpY2UtPmluZGV4ICsg MSkgKiBkaXYgLSAxOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIHJldHVybiAwOwo+ID4gK30K PiA+ICsKPiA+ICtzdGF0aWMgaW50IHZhYXBpX2VuY29kZV9hdjFfd3JpdGVfcGljdHVyZV9oZWFk ZXIoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBWQUFQSUVuY29kZVBpY3R1cmUgKnBpYywKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZGF0YSwg c2l6ZV90ICpkYXRhX2xlbikKPiA+ICt7Cj4gPiArICAgIFZBQVBJRW5jb2RlQVYxQ29udGV4dCAg ICAgKnByaXYgPSBhdmN0eC0+cHJpdl9kYXRhOwo+ID4gKyAgICBDb2RlZEJpdHN0cmVhbUZyYWdt ZW50ICAgICAqb2J1ID0gJnByaXYtPmN1cnJlbnRfb2J1Owo+ID4gKyAgICBBVjFSYXdPQlUgICAg ICAgICAgICAgICAqZmhfb2J1ID0gJnByaXYtPmZoOwo+ID4gKyAgICBBVjFSYXdGcmFtZUhlYWRl ciAgICAgICAqcmVwX2ZoID0gJmZoX29idS0+b2J1LmZyYW1lX2hlYWRlcjsKPiA+ICsgICAgVkFB UElFbmNvZGVBVjFQaWN0dXJlICpocmVmOwo+ID4gKyAgICBpbnQgcmV0ID0gMDsKPiA+ICsKPiA+ ICsgICAgcGljLT50YWlsX3NpemUgPSAwOwo+ID4gKyAgICAvKiogUGFjayByZXBlYXQgZnJhbWUg aGVhZGVyLiAqLwo+ID4gKyAgICBpZiAocGljLT5kaXNwbGF5X29yZGVyID4gcGljLT5lbmNvZGVf b3JkZXIpIHsKPiA+ICsgICAgICAgIG1lbXNldChmaF9vYnUsIDAsIHNpemVvZigqZmhfb2J1KSk7 Cj4gPiArICAgICAgICBocmVmID0gcGljLT5yZWZzWzBdW3BpYy0+bmJfcmVmc1swXSAtIDFdLT5w cml2X2RhdGE7Cj4gPiArICAgICAgICBmaF9vYnUtPmhlYWRlci5vYnVfdHlwZSA9IEFWMV9PQlVf RlJBTUVfSEVBREVSOwo+ID4gKyAgICAgICAgZmhfb2J1LT5oZWFkZXIub2J1X2hhc19zaXplX2Zp ZWxkID0gMTsKPiA+ICsKPiA+ICsgICAgICAgIHJlcF9maC0+c2hvd19leGlzdGluZ19mcmFtZSAg ID0gMTsKPiA+ICsgICAgICAgIHJlcF9maC0+ZnJhbWVfdG9fc2hvd19tYXBfaWR4ID0gaHJlZi0+ c2xvdCA9PSAwOwo+ID4gKyAgICAgICAgcmVwX2ZoLT5mcmFtZV90eXBlICAgICAgICAgICAgPSBB VjFfRlJBTUVfSU5URVI7Cj4gPiArICAgICAgICByZXBfZmgtPmZyYW1lX3dpZHRoX21pbnVzXzEg ICA9IGF2Y3R4LT53aWR0aCAtIDE7Cj4gPiArICAgICAgICByZXBfZmgtPmZyYW1lX2hlaWdodF9t aW51c18xICA9IGF2Y3R4LT5oZWlnaHQgLSAxOwo+ID4gKyAgICAgICAgcmVwX2ZoLT5yZW5kZXJf d2lkdGhfbWludXNfMSAgPSByZXBfZmgtPmZyYW1lX3dpZHRoX21pbnVzXzE7Cj4gPiArICAgICAg ICByZXBfZmgtPnJlbmRlcl9oZWlnaHRfbWludXNfMSA9IHJlcF9maC0+ZnJhbWVfaGVpZ2h0X21p bnVzXzE7Cj4gPiArCj4gPiArICAgICAgICByZXQgPSB2YWFwaV9lbmNvZGVfYXYxX3dyaXRlX2Zy YW1lX2hlYWRlcihhdmN0eCwgcGljLCBwaWMtPnRhaWxfZGF0YSwgJnBpYy0+dGFpbF9zaXplKTsK PiA+ICsgICAgICAgIGlmIChyZXQgPCAwKQo+ID4gKyAgICAgICAgICAgIGdvdG8gZW5kOwo+ID4g Kwo+ID4gKyAgICAgICAgcGljLT50YWlsX3NpemUgLz0gODsKPiA+ICsgICAgfQo+ID4gKwo+ID4g KyAgICBtZW1jcHkoZGF0YSwgJnByaXYtPmZoX2RhdGEsIE1BWF9QQVJBTV9CVUZGRVJfU0laRSAq IHNpemVvZihjaGFyKSk7Cj4gPiArICAgICpkYXRhX2xlbiA9IHByaXYtPmZoX2RhdGFfbGVuOwo+ ID4gKwo+ID4gK2VuZDoKPiA+ICsgICAgZmZfY2JzX2ZyYWdtZW50X3Jlc2V0KG9idSk7Cj4gPiAr ICAgIHJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBWQUFQSUVuY29k ZVByb2ZpbGUgdmFhcGlfZW5jb2RlX2F2MV9wcm9maWxlc1tdID0gewo+ID4gKyAgICB7IEZGX1BS T0ZJTEVfQVYxX01BSU4sICA4LCAzLCAxLCAxLCBWQVByb2ZpbGVBVjFQcm9maWxlMCB9LAo+ID4g KyAgICB7IEZGX1BST0ZJTEVfQVYxX01BSU4sIDEwLCAzLCAxLCAxLCBWQVByb2ZpbGVBVjFQcm9m aWxlMCB9LAo+ID4gKyAgICB7IEZGX1BST0ZJTEVfVU5LTk9XTiB9Cj4gPiArfTsKPiA+ICsKPiA+ ICtzdGF0aWMgY29uc3QgVkFBUElFbmNvZGVUeXBlIHZhYXBpX2VuY29kZV90eXBlX2F2MSA9IHsK PiA+ICsgICAgLnByb2ZpbGVzICAgICAgICA9IHZhYXBpX2VuY29kZV9hdjFfcHJvZmlsZXMsCj4g PiArICAgIC5mbGFncyAgICAgICAgICAgPSBGTEFHX0JfUElDVFVSRVMsCj4gPiArICAgIC5kZWZh dWx0X3F1YWxpdHkgPSAyNSwKPiA+ICsgICAgLmNvbmZpZ3VyZSAgICAgICA9ICZ2YWFwaV9lbmNv ZGVfYXYxX2NvbmZpZ3VyZSwKPiA+ICsKPiA+ICsgICAgLnNlcXVlbmNlX2hlYWRlcl90eXBlICA9 IFZBRW5jUGFja2VkSGVhZGVyU2VxdWVuY2UsCj4gPiArICAgIC5zZXF1ZW5jZV9wYXJhbXNfc2l6 ZSAgPSBzaXplb2YoVkFFbmNTZXF1ZW5jZVBhcmFtZXRlckJ1ZmZlckFWMSksCj4gPiArICAgIC5p bml0X3NlcXVlbmNlX3BhcmFtcyAgPSAmdmFhcGlfZW5jb2RlX2F2MV9pbml0X3NlcXVlbmNlX3Bh cmFtcywKPiA+ICsgICAgLndyaXRlX3NlcXVlbmNlX2hlYWRlciA9ICZ2YWFwaV9lbmNvZGVfYXYx X3dyaXRlX3NlcXVlbmNlX2hlYWRlciwKPiA+ICsKPiA+ICsgICAgLnBpY3R1cmVfcHJpdl9kYXRh X3NpemUgPSBzaXplb2YoVkFBUElFbmNvZGVBVjFQaWN0dXJlKSwKPiA+ICsgICAgLnBpY3R1cmVf aGVhZGVyX3R5cGUgICAgPSBWQUVuY1BhY2tlZEhlYWRlclBpY3R1cmUsCj4gPiArICAgIC5waWN0 dXJlX3BhcmFtc19zaXplICAgID0gc2l6ZW9mKFZBRW5jUGljdHVyZVBhcmFtZXRlckJ1ZmZlckFW MSksCj4gPiArICAgIC5pbml0X3BpY3R1cmVfcGFyYW1zICAgID0gJnZhYXBpX2VuY29kZV9hdjFf aW5pdF9waWN0dXJlX3BhcmFtcywKPiA+ICsgICAgLndyaXRlX3BpY3R1cmVfaGVhZGVyICAgPSAm dmFhcGlfZW5jb2RlX2F2MV93cml0ZV9waWN0dXJlX2hlYWRlciwKPiA+ICsKPiA+ICsgICAgLnNs aWNlX3BhcmFtc19zaXplID0gc2l6ZW9mKFZBRW5jVGlsZUdyb3VwQnVmZmVyQVYxKSwKPiA+ICsg ICAgLmluaXRfc2xpY2VfcGFyYW1zID0gJnZhYXBpX2VuY29kZV9hdjFfaW5pdF9zbGljZV9wYXJh bXMsCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgYXZfY29sZCBpbnQgdmFhcGlfZW5jb2RlX2F2 MV9pbml0KEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiA+ICt7Cj4gPiArICAgIFZBQVBJRW5jb2Rl Q29udGV4dCAgICAgICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+ID4gKyAgICBWQUFQSUVuY29k ZUFWMUNvbnRleHQgICpwcml2ID0gYXZjdHgtPnByaXZfZGF0YTsKPiA+ICsgICAgVkFDb25maWdB dHRyaWIgYXR0cjsKPiA+ICsgICAgVkFTdGF0dXMgdmFzOwo+ID4gKyAgICBpbnQgcmV0Owo+ID4g Kwo+ID4gKyAgICBjdHgtPmNvZGVjID0gJnZhYXBpX2VuY29kZV90eXBlX2F2MTsKPiA+ICsKPiA+ ICsgICAgY3R4LT5kZXNpcmVkX3BhY2tlZF9oZWFkZXJzID0KPiA+ICsgICAgICAgIFZBX0VOQ19Q QUNLRURfSEVBREVSX1NFUVVFTkNFIHwKPiA+ICsgICAgICAgIFZBX0VOQ19QQUNLRURfSEVBREVS X1BJQ1RVUkU7Cj4gPiArCj4gPiArICAgIGlmIChhdmN0eC0+cHJvZmlsZSA9PSBGRl9QUk9GSUxF X1VOS05PV04pCj4gPiArICAgICAgICBhdmN0eC0+cHJvZmlsZSA9IHByaXYtPnByb2ZpbGU7Cj4g PiArICAgIGlmIChhdmN0eC0+bGV2ZWwgPT0gRkZfTEVWRUxfVU5LTk9XTikKPiA+ICsgICAgICAg IGF2Y3R4LT5sZXZlbCA9IHByaXYtPmxldmVsOwo+ID4gKwo+ID4gKyAgICBpZiAoYXZjdHgtPmxl dmVsICE9IEZGX0xFVkVMX1VOS05PV04gJiYgYXZjdHgtPmxldmVsICYgfjB4MWYpIHsKPiA+ICsg ICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBsZXZlbCAlZFxuIiwg YXZjdHgtPmxldmVsKTsKPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gPiAr ICAgIH0KPiA+ICsKPiA+ICsgICAgcmV0ID0gZmZfdmFhcGlfZW5jb2RlX2luaXQoYXZjdHgpOwo+ ID4gKyAgICBpZiAocmV0IDwgMCkKPiA+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gPiArCj4gPiAr ICAgIGF0dHIudHlwZSA9IFZBQ29uZmlnQXR0cmliRW5jQVYxOwo+ID4gKyAgICB2YXMgPSB2YUdl dENvbmZpZ0F0dHJpYnV0ZXMoY3R4LT5od2N0eC0+ZGlzcGxheSwKPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGN0eC0+dmFfcHJvZmlsZSwKPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGN0eC0+dmFfZW50cnlwb2ludCwKPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZhdHRyLCAxKTsKPiA+ICsgICAgaWYgKHZhcyAhPSBWQV9TVEFUVVNf U1VDQ0VTUykgewo+ID4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWls ZWQgdG8gcXVlcnkgIgo+ID4gKyAgICAgICAgICAgICAgICJjb25maWcgYXR0cmlidXRlOiAlZCAo JXMpLlxuIiwgdmFzLCB2YUVycm9yU3RyKHZhcykpOwo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJS T1JfRVhURVJOQUw7Cj4gPiArICAgIH0gZWxzZSBpZiAoYXR0ci52YWx1ZSA9PSBWQV9BVFRSSUJf Tk9UX1NVUFBPUlRFRCkgewo+ID4gKyAgICAgICAgcHJpdi0+YXR0ci52YWx1ZSA9IDA7Cj4gPiAr ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19XQVJOSU5HLCAiQXR0cmlidXRlIHR5cGU6JWQg aXMgbm90ICIKPiA+ICsgICAgICAgICAgICAgICAic3VwcG9ydGVkLlxuIiwgYXR0ci50eXBlKTsK PiA+ICsgICAgfSBlbHNlIHsKPiA+ICsgICAgICAgIHByaXYtPmF0dHIudmFsdWUgPSBhdHRyLnZh bHVlOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGF0dHIudHlwZSA9IFZBQ29uZmlnQXR0cmli RW5jQVYxRXh0MTsKPiA+ICsgICAgdmFzID0gdmFHZXRDb25maWdBdHRyaWJ1dGVzKGN0eC0+aHdj dHgtPmRpc3BsYXksCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnZh X3Byb2ZpbGUsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnZhX2Vu dHJ5cG9pbnQsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXR0ciwgMSk7 Cj4gPiArICAgIGlmICh2YXMgIT0gVkFfU1RBVFVTX1NVQ0NFU1MpIHsKPiA+ICsgICAgICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIHF1ZXJ5ICIKPiA+ICsgICAgICAg ICAgICAgICAiY29uZmlnIGF0dHJpYnV0ZTogJWQgKCVzKS5cbiIsIHZhcywgdmFFcnJvclN0cih2 YXMpKTsKPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ID4gKyAgICB9IGVs c2UgaWYgKGF0dHIudmFsdWUgPT0gVkFfQVRUUklCX05PVF9TVVBQT1JURUQpIHsKPiA+ICsgICAg ICAgIHByaXYtPmF0dHJfZXh0MS52YWx1ZSA9IDA7Cj4gPiArICAgICAgICBhdl9sb2coYXZjdHgs IEFWX0xPR19XQVJOSU5HLCAiQXR0cmlidXRlIHR5cGU6JWQgaXMgbm90ICIKPiA+ICsgICAgICAg ICAgICAgICAic3VwcG9ydGVkLlxuIiwgYXR0ci50eXBlKTsKPiA+ICsgICAgfSBlbHNlIHsKPiA+ ICsgICAgICAgIHByaXYtPmF0dHJfZXh0MS52YWx1ZSA9IGF0dHIudmFsdWU7Cj4gPiArICAgIH0K PiA+ICsKPiA+ICsgICAgLyoqIFRoaXMgYXR0ciBwcm92aWRlcyBlc3NlbnRpYWwgaW5kaWNhdG9y cywgcmV0dXJuIGVycm9yIGlmIG5vdCBzdXBwb3J0LiAqLwo+ID4gKyAgICBhdHRyLnR5cGUgPSBW QUNvbmZpZ0F0dHJpYkVuY0FWMUV4dDI7Cj4gPiArICAgIHZhcyA9IHZhR2V0Q29uZmlnQXR0cmli dXRlcyhjdHgtPmh3Y3R4LT5kaXNwbGF5LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY3R4LT52YV9wcm9maWxlLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY3R4LT52YV9lbnRyeXBvaW50LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJmF0dHIsIDEpOwo+ID4gKyAgICBpZiAodmFzICE9IFZBX1NUQVRVU19TVUNDRVNTIHx8IGF0 dHIudmFsdWUgPT0gVkFfQVRUUklCX05PVF9TVVBQT1JURUQpIHsKPiA+ICsgICAgICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIHF1ZXJ5ICIKPiA+ICsgICAgICAgICAg ICAgICAiY29uZmlnIGF0dHJpYnV0ZTogJWQgKCVzKS5cbiIsIHZhcywgdmFFcnJvclN0cih2YXMp KTsKPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ID4gKyAgICB9IGVsc2Ug ewo+ID4gKyAgICAgICAgcHJpdi0+YXR0cl9leHQyLnZhbHVlID0gYXR0ci52YWx1ZTsKPiA+ICsg ICAgfQo+ID4gKwo+ID4gKyAgICByZXQgPSB2YWFwaV9lbmNvZGVfYXYxX3NldF90aWxlKGF2Y3R4 KTsKPiA+ICsgICAgaWYgKHJldCA8IDApCj4gPiArICAgICAgICByZXR1cm4gcmV0Owo+ID4gKwo+ ID4gKyAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGF2X2NvbGQgaW50IHZh YXBpX2VuY29kZV9hdjFfY2xvc2UoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQo+ID4gK3sKPiA+ICsg ICAgVkFBUElFbmNvZGVBVjFDb250ZXh0ICpwcml2ID0gYXZjdHgtPnByaXZfZGF0YTsKPiA+ICsK PiA+ICsgICAgZmZfY2JzX2ZyYWdtZW50X2ZyZWUoJnByaXYtPmN1cnJlbnRfb2J1KTsKPiA+ICsg ICAgZmZfY2JzX2Nsb3NlKCZwcml2LT5jYmMpOwo+ID4gKwo+ID4gKyAgICByZXR1cm4gZmZfdmFh cGlfZW5jb2RlX2Nsb3NlKGF2Y3R4KTsKPiA+ICt9Cj4gPiArCj4gPiArI2RlZmluZSBPRkZTRVQo eCkgb2Zmc2V0b2YoVkFBUElFbmNvZGVBVjFDb250ZXh0LCB4KQo+ID4gKyNkZWZpbmUgRkxBR1Mg KEFWX09QVF9GTEFHX1ZJREVPX1BBUkFNIHwgQVZfT1BUX0ZMQUdfRU5DT0RJTkdfUEFSQU0pCj4g PiArCj4gPiArc3RhdGljIGNvbnN0IEFWT3B0aW9uIHZhYXBpX2VuY29kZV9hdjFfb3B0aW9uc1td ID0gewo+ID4gKyAgICBWQUFQSV9FTkNPREVfQ09NTU9OX09QVElPTlMsCj4gPiArICAgIFZBQVBJ X0VOQ09ERV9SQ19PUFRJT05TLAo+ID4gKyAgICB7ICJwcm9maWxlIiwgIlNldCBwcm9maWxlIChz ZXFfcHJvZmlsZSkiLAo+ID4gKyAgICAgIE9GRlNFVChwcm9maWxlKSwgQVZfT1BUX1RZUEVfSU5U LAo+ID4gKyAgICAgIHsgLmk2NCA9IEZGX1BST0ZJTEVfVU5LTk9XTiB9LCBGRl9QUk9GSUxFX1VO S05PV04sIDB4ZmYsIEZMQUdTLCAicHJvZmlsZSIgfSwKPiA+ICsKPiA+ICsjZGVmaW5lIFBST0ZJ TEUobmFtZSwgdmFsdWUpICBuYW1lLCBOVUxMLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgXAo+ID4g KyAgICB7IC5pNjQgPSB2YWx1ZSB9LCAwLCAwLCBGTEFHUywgInByb2ZpbGUiCj4gPiArICAgIHsg UFJPRklMRSgibWFpbiIsICAgICAgICAgICAgICAgRkZfUFJPRklMRV9BVjFfTUFJTikgfSwKPiA+ ICsgICAgeyBQUk9GSUxFKCJoaWdoIiwgICAgICAgICAgICAgICBGRl9QUk9GSUxFX0FWMV9ISUdI KSB9LAo+ID4gKyAgICB7IFBST0ZJTEUoInByb2Zlc3Npb25hbCIsICAgICAgIEZGX1BST0ZJTEVf QVYxX1BST0ZFU1NJT05BTCkgfSwKPiA+ICsjdW5kZWYgUFJPRklMRQo+ID4gKwo+ID4gKyAgICB7 ICJ0aWVyIiwgIlNldCB0aWVyIChzZXFfdGllcikiLAo+ID4gKyAgICAgIE9GRlNFVCh0aWVyKSwg QVZfT1BUX1RZUEVfSU5ULCB7IC5pNjQgPSAwIH0sIDAsIDEsIEZMQUdTLCAidGllciIgfSwKPiA+ ICsgICAgeyAibWFpbiIsIE5VTEwsIDAsIEFWX09QVF9UWVBFX0NPTlNULAo+ID4gKyAgICAgIHsg Lmk2NCA9IDAgfSwgMCwgMCwgRkxBR1MsICJ0aWVyIiB9LAo+ID4gKyAgICB7ICJoaWdoIiwgTlVM TCwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsCj4gPiArICAgICAgeyAuaTY0ID0gMSB9LCAwLCAwLCBG TEFHUywgInRpZXIiIH0sCj4gPiArICAgIHsgImxldmVsIiwgIlNldCBsZXZlbCAoc2VxX2xldmVs X2lkeCkiLAo+ID4gKyAgICAgIE9GRlNFVChsZXZlbCksIEFWX09QVF9UWVBFX0lOVCwKPiA+ICsg ICAgICB7IC5pNjQgPSBGRl9MRVZFTF9VTktOT1dOIH0sIEZGX0xFVkVMX1VOS05PV04sIDB4MWYs IEZMQUdTLCAibGV2ZWwiIH0sCj4gPiArCj4gPiArI2RlZmluZSBMRVZFTChuYW1lLCB2YWx1ZSkg bmFtZSwgTlVMTCwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIFwKPiA+ICsgICAgICB7IC5pNjQgPSB2 YWx1ZSB9LCAwLCAwLCBGTEFHUywgImxldmVsIgo+ID4gKyAgICB7IExFVkVMKCIyLjAiLCAgMCkg fSwKPiA+ICsgICAgeyBMRVZFTCgiMi4xIiwgIDEpIH0sCj4gPiArICAgIHsgTEVWRUwoIjMuMCIs ICA0KSB9LAo+ID4gKyAgICB7IExFVkVMKCIzLjEiLCAgNSkgfSwKPiA+ICsgICAgeyBMRVZFTCgi NC4wIiwgIDgpIH0sCj4gPiArICAgIHsgTEVWRUwoIjQuMSIsICA5KSB9LAo+ID4gKyAgICB7IExF VkVMKCI1LjAiLCAxMikgfSwKPiA+ICsgICAgeyBMRVZFTCgiNS4xIiwgMTMpIH0sCj4gPiArICAg IHsgTEVWRUwoIjUuMiIsIDE0KSB9LAo+ID4gKyAgICB7IExFVkVMKCI1LjMiLCAxNSkgfSwKPiA+ ICsgICAgeyBMRVZFTCgiNi4wIiwgMTYpIH0sCj4gPiArICAgIHsgTEVWRUwoIjYuMSIsIDE3KSB9 LAo+ID4gKyAgICB7IExFVkVMKCI2LjIiLCAxOCkgfSwKPiA+ICsgICAgeyBMRVZFTCgiNi4zIiwg MTkpIH0sCj4gPiArI3VuZGVmIExFVkVMCj4gPiArCj4gPiArICAgIHsgInRpbGVzIiwgIlRpbGUg Y29sdW1ucyB4IHJvd3MiLAo+ID4gKyAgICAgIE9GRlNFVCh0aWxlX2NvbHMpLCBBVl9PUFRfVFlQ RV9JTUFHRV9TSVpFLCB7IC5zdHIgPSAiMXgxIiB9LCAxLCBBVjFfTUFYX1RJTEVfQ09MUywgRkxB R1MgfSwKPiA+ICsgICAgeyAidGlsZV9ncm91cHMiLCAiTnVtYmVyIG9mIHRpbGUgZ3JvdXBzIGZv ciBlbmNvZGluZyIsCj4gPiArICAgICAgT0ZGU0VUKHRpbGVfZ3JvdXBzKSwgQVZfT1BUX1RZUEVf SU5ULCB7IC5pNjQgPSAxIH0sIDEsIEFWMV9NQVhfVElMRV9ST1dTICogQVYxX01BWF9USUxFX0NP TFMsIEZMQUdTIH0sCj4gPiArCj4gPiArICAgIHsgTlVMTCB9LAo+ID4gK307Cj4gPiArCj4gPiAr c3RhdGljIGNvbnN0IEZGQ29kZWNEZWZhdWx0IHZhYXBpX2VuY29kZV9hdjFfZGVmYXVsdHNbXSA9 IHsKPiA+ICsgICAgeyAiYiIsICAgICAgICAgICAgICAiMCIgICB9LAo+ID4gKyAgICB7ICJiZiIs ICAgICAgICAgICAgICI3IiAgIH0sCj4gPiArICAgIHsgImciLCAgICAgICAgICAgICAgIjEyMCIg fSwKPiA+ICsgICAgeyAicW1pbiIsICAgICAgICAgICAiMSIgICB9LAo+ID4gKyAgICB7ICJxbWF4 IiwgICAgICAgICAgICIyNTUiIH0sCj4gPiArICAgIHsgTlVMTCB9LAo+ID4gK307Cj4gPiArCj4g PiArc3RhdGljIGNvbnN0IEFWQ2xhc3MgdmFhcGlfZW5jb2RlX2F2MV9jbGFzcyA9IHsKPiA+ICsg ICAgLmNsYXNzX25hbWUgPSAiYXYxX3ZhYXBpIiwKPiA+ICsgICAgLml0ZW1fbmFtZSAgPSBhdl9k ZWZhdWx0X2l0ZW1fbmFtZSwKPiA+ICsgICAgLm9wdGlvbiAgICAgPSB2YWFwaV9lbmNvZGVfYXYx X29wdGlvbnMsCj4gPiArICAgIC52ZXJzaW9uICAgID0gTElCQVZVVElMX1ZFUlNJT05fSU5ULAo+ ID4gK307Cj4gPiArCj4gPiArY29uc3QgRkZDb2RlYyBmZl9hdjFfdmFhcGlfZW5jb2RlciA9IHsK PiA+ICsgICAgLnAubmFtZSAgICAgICAgID0gImF2MV92YWFwaSIsCj4gPiArICAgIENPREVDX0xP TkdfTkFNRSgiQVYxIChWQUFQSSkiKSwKPiA+ICsgICAgLnAudHlwZSAgICAgICAgID0gQVZNRURJ QV9UWVBFX1ZJREVPLAo+ID4gKyAgICAucC5pZCAgICAgICAgICAgPSBBVl9DT0RFQ19JRF9BVjEs Cj4gPiArICAgIC5wcml2X2RhdGFfc2l6ZSA9IHNpemVvZihWQUFQSUVuY29kZUFWMUNvbnRleHQp LAo+ID4gKyAgICAuaW5pdCAgICAgICAgICAgPSAmdmFhcGlfZW5jb2RlX2F2MV9pbml0LAo+ID4g KyAgICBGRl9DT0RFQ19SRUNFSVZFX1BBQ0tFVF9DQigmZmZfdmFhcGlfZW5jb2RlX3JlY2VpdmVf cGFja2V0KSwKPiA+ICsgICAgLmNsb3NlICAgICAgICAgID0gJnZhYXBpX2VuY29kZV9hdjFfY2xv c2UsCj4gPiArICAgIC5wLnByaXZfY2xhc3MgICA9ICZ2YWFwaV9lbmNvZGVfYXYxX2NsYXNzLAo+ ID4gKyAgICAucC5jYXBhYmlsaXRpZXMgPSBBVl9DT0RFQ19DQVBfREVMQVkgfCBBVl9DT0RFQ19D QVBfSEFSRFdBUkUgfAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICBBVl9DT0RFQ19DQVBfRFIx IHwgQVZfQ09ERUNfQ0FQX0VOQ09ERVJfUkVPUkRFUkVEX09QQVFVRSwKPiA+ICsgICAgLmNhcHNf aW50ZXJuYWwgID0gRkZfQ09ERUNfQ0FQX05PVF9JTklUX1RIUkVBRFNBRkUgfAo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICBGRl9DT0RFQ19DQVBfSU5JVF9DTEVBTlVQLAo+ID4gKyAgICAuZGVm YXVsdHMgICAgICAgPSB2YWFwaV9lbmNvZGVfYXYxX2RlZmF1bHRzLAo+ID4gKyAgICAucC5waXhf Zm10cyA9IChjb25zdCBlbnVtIEFWUGl4ZWxGb3JtYXRbXSkgewo+ID4gKyAgICAgICAgQVZfUElY X0ZNVF9WQUFQSSwKPiA+ICsgICAgICAgIEFWX1BJWF9GTVRfTk9ORSwKPiA+ICsgICAgfSwKPiA+ ICsgICAgLmh3X2NvbmZpZ3MgICAgID0gZmZfdmFhcGlfZW5jb2RlX2h3X2NvbmZpZ3MsCj4gPiAr ICAgIC5wLndyYXBwZXJfbmFtZSA9ICJ2YWFwaSIsCj4gPiArfTsKPiA+IC0tCj4gPiAyLjI1LjEK PiA+Cj4KPiBTZWVtcyBzZW5zaWJsZSwgYnV0IHlvdXIgc2VuZGVyIGFkZHJlc3MgZ290IHJld3Jp dHRlbi4gWW91IG1pZ2h0IHdhbnQKPiB0byBhZGQgYW4gYWRkaXRpb25hbAo+Cj4gRnJvbTogRmVp IFdhbmcgPGZlaS53LndhbmdAaW50ZWwuY29tPgo+Cj4gYXQgdGhlIHRvcCBvZiB5b3VyIGNvbW1p dCBtZXNzYWdlIGJvZHkgaWYgeW91IGNhbid0IGdldCB0aGUgIkZyb20iCj4gZmllbGQgaW4gdGhl IGVtYWlscyB0byBiZSBzZXQgcHJvcGVybHkgd2hlbiB5b3Ugc2VuZCB0byB0aGUgbGlzdC4KPgo+ IE90aGVyd2lzZSB0aGUgcGF0Y2ggc2VyaWVzIExHVE0uIEkgZG9uJ3QgaGF2ZSBhbnkgaGFyZHdh cmUgdG8gZXhlcmNpc2UKPiB0aGlzIGNvZGUgd2l0aCB0aG91Z2gsIHNvIHRoYXQgbWFrZXMgcmV2 aWV3aW5nIGl0cyBiZWhhdmlvciBhIGxpdHRsZQo+IHRvdWdoLgo+Cj4gUmVnYXJkbGVzcywgSSBj YW4gYXQgbGVhc3QgYWNrIGl0Lgo+Cj4gQWNrZWQtYnk6IE5lYWwgR29tcGEgPG5nb21wYTEzQGdt YWlsLmNvbT4KPgoKT29wcywgZm9yZ290IHRvIGFjdHVhbGx5IENDIHlvdSBmb3IgdGhpcy4KCgoK LS0gCuecn+Wun+OBr+OBhOOBpOOCguS4gOOBpO+8gS8gQWx3YXlzLCB0aGVyZSdzIG9ubHkgb25l IHRydXRoIQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpm Zm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8v ZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUs IHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5v cmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==