Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wF3re-004hyb-1u for pgsql-hackers@arkaria.postgresql.org; Tue, 21 Apr 2026 05:41:40 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wF3rd-006NwA-2w for pgsql-hackers@arkaria.postgresql.org; Tue, 21 Apr 2026 05:41:37 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wF3rd-006Nvr-0f for pgsql-hackers@lists.postgresql.org; Tue, 21 Apr 2026 05:41:37 +0000 Received: from forward101d.mail.yandex.net ([178.154.239.212]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1wF3rW-00000002FSA-2SzY for pgsql-hackers@postgresql.org; Tue, 21 Apr 2026 05:41:36 +0000 Received: from mail-nwsmtp-smtp-production-main-80.klg.yp-c.yandex.net (mail-nwsmtp-smtp-production-main-80.klg.yp-c.yandex.net [IPv6:2a02:6b8:c42:3cca:0:640:f0e1:0]) by forward101d.mail.yandex.net (Yandex) with ESMTPS id 0B3B8C0096; Tue, 21 Apr 2026 08:41:29 +0300 (MSK) Received: by mail-nwsmtp-smtp-production-main-80.klg.yp-c.yandex.net (smtp) with ESMTPSA id QfK5xd5QuSw0-3NNbS1l2; Tue, 21 Apr 2026 08:41:28 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tantorlabs.com; s=mail; t=1776750088; bh=teumb2UiVIc6mhgy6NU4/LNsGkci1Mr5tHc8bC/eth0=; h=In-Reply-To:References:To:Subject:Message-ID:Date:From; b=QNw+DgID5XdX05RdXvyqJqtrgYOSb1CCUNVEtploD337pKOjBFD8cuY7++qv+lYTy xAW4jiOJSubFN84K+DrmiTikAHEK4I9n+eCpVjlf2gnvxO8/QalrGkeGw4CkVM8LuL POWEDao0avbqbGKFeYEnFjWdVeGG+ye8oNuTc1RA= Authentication-Results: mail-nwsmtp-smtp-production-main-80.klg.yp-c.yandex.net; dkim=pass header.i=@tantorlabs.com Content-Type: multipart/mixed; boundary="------------lw8OY0FkiJnrHVFMGb70Aea3" Message-ID: <380a9035-54e3-4ee2-bdde-fe7526c34b6a@tantorlabs.com> Date: Tue, 21 Apr 2026 13:41:25 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Compress prune/freeze records with Delta Frame of Reference algorithm To: Heikki Linnakangas , Andres Freund , PostgreSQL Hackers , Andrey Borodin References: <9d79f4b9-1a1c-4177-bdfa-3df9a5171db9@iki.fi> Content-Language: en-US From: Evgeny Voropaev In-Reply-To: <9d79f4b9-1a1c-4177-bdfa-3df9a5171db9@iki.fi> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------lw8OY0FkiJnrHVFMGb70Aea3 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hello hackers, > Can this DFoR code replace integerset.c easily? Can we use it for > the vacuum dead TID list? For GIN posting lists? Where else? Heikki, thank you for your attention and proposals. I'm learning areas you proposed to be developed. This took time, since I am not adept at them. Last week I also have been developing the DFoR patch to support unsorted sequences. That's why there was the delay in answering. About GIN. Since GIN exploits TIDs sequences and saves it on the disk, it can be the most appropriate candidate to be developed with DFoR. About the dead TID list. If I'm not mistaken, the dead TID list exists only in RAM and never on the disk or in the network. So, what is the advantage supposed to be achieved due to using compression in the dead TID list? About the GiST vacuuming and the use of integerset in it. The integerset implements a tree in addition to compression. DFoR now performs only compression. Moreover the size of a pack is flexible (varying), which must become an issue for its usage in the tree. It needs more thorough further elaboration to be developed. So what do you think about improving GIN by means of DFOR? Should I try? Best regards, Evgeny Voropaev, Tantor Labs, LLC. P.S. In the v12 version of the patch: - implemented the DFOR compression for unsorted sequences; - implemented the compression of frozen and redirected tuple offsets in the prune/freeze WAL record - ignored header checking of header templates from DFOR file set; - rebased onto 9b43e6793b0. --------------lw8OY0FkiJnrHVFMGb70Aea3 Content-Type: text/x-patch; charset=UTF-8; name="v12-0001-Implement-vect-and-uniqsortvect-containers-and-b.patch" Content-Disposition: attachment; filename*0="v12-0001-Implement-vect-and-uniqsortvect-containers-and-b.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA3OGY0YTgwOTg4NTI2NGFkYTQ4NWY4ZTlhZTgwZTE5MmUxOTdkOWI5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBFdmdlbnkgVm9yb3BhZXYgPGV2b3JvcEBnbWFpbC5j b20+CkRhdGU6IE1vbiwgMTMgQXByIDIwMjYgMjA6MTI6NTUgKzA4MDAKU3ViamVjdDogW1BB VENIIHYxMiAxLzVdIEltcGxlbWVudCB2ZWN0IGFuZCB1bmlxc29ydHZlY3QgY29udGFpbmVy cyBhbmQKIGJpdHBhY2sgYWxnb3JpdGhtcy4KClRoZSB2ZWN0IGNvbnRhaW5lciBzdG9yZXMg YXJyYXlzIG9mIGludGVnZXJzIGFuZCBwcm92aWRlcyBhIHNldCBvZgphbGdvcml0aG1zIGlt cGxlbWVudGluZyBlc3NlbnRpYWwgb3BlcmF0aW9ucyBvbiB0aGUgY29udGFpbmVkIGFycmF5 LApzdWNoIGFzIGluaXRpYWxpemF0aW9uLCBhcHBlbmRpbmcsIGluc2VydGluZywgYW5kIGNs ZWFyaW5nLgoKVGhlIHVuaXFzb3J0dmVjdCBjb250YWluZXIgaXMgYmFzZWQgb24gdGhlIHZl Y3QgdHlwZSBidXQgYXNzdW1lcyB0aGF0Cml0cyBlbGVtZW50cyBhcmUgc29ydGVkIGFuZCB1 bmlxdWUuIEluIGFkZGl0aW9uIHRvIHRoZSBhbGdvcml0aG1zCnByb3ZpZGVkIGJ5IHZlY3Qs IHVuaXFzb3J0dmVjdCBpbXBsZW1lbnRzIGJpbmFyeSBzZWFyY2ggYW5kIHRoZQpzcGVjaWFs aXplZCBpbnNlcnRpb24gcm91dGluZS4KClRoZSBjb250YWluZXJzIHN1cHBvcnQgYm90aCBl eHRlcm5hbCBtZW1vcnkgcHJvdmlkZWQgYnkgYSBjYWxsZXIgYW5kCmF1dG9tYXRpY2FsbHkg bWFuYWdlZCBtZW1vcnkgdXNpbmcgbWFsbG9jLCBQb3N0Z3JlcydzIHBhbGxvYywgb3Igc2lt aWxhcgphbGxvY2F0aW9uIGZ1bmN0aW9ucy4gQSBjb250YWluZXIncyBzdHJhdGVneSByZWdh cmRpbmcgbWVtb3J5IG1hbmFnZW1lbnQKbXVzdCBiZSBzZXQgYXQgY29udGFpbmVyIGluaXRp YWxpemF0aW9uLCBhbmQgYWxsIHN1YnNlcXVlbnQgb3BlcmF0aW9ucwpob25vciB0aGlzIGNv bmZpZ3VyYXRpb24uIEZvciBleGFtcGxlLCBhIGNhbGxlciBjYW4gcGxhY2UgYSBidWZmZXIg b24KdGhlIHN0YWNrIHRvIGF2b2lkIGhlYXAgYWxsb2NhdGlvbiBhbmQgcGFzcyB0aGUgYnVm ZmVyIHRvIGEgdmVjdG9yCmluc3RhbmNlLCB3aGljaCByZXN1bHRzIGluIHRoZSB2ZWN0b3Ig cGVyZm9ybXMgbm8gZHluYW1pYyBhbGxvY2F0aW9uLgoKVGhpcyBjb21taXQgYWxzbyBpbnRy b2R1Y2VzIHRoZSBiaXRwYWNrIHVuaXQsIHdoaWNoIHByb3ZpZGVzIGFsZ29yaXRobXMKZm9y IGRlbnNlIGJpdC1sZXZlbCBwYWNraW5nIGFuZCB1bnBhY2tpbmcuIFRoZSBiaXRwYWNrIHVu aXQgZG9lcyBub3QKdXNlIGR5bmFtaWMgbWVtb3J5LgoKRWFjaCB1bml0ICh2ZWN0LCBiaXRw YWNrKSBpcyBpbXBsZW1lbnRlZCBhcyBhIHNldCBvZiB0ZW1wbGF0ZXMgdGhhdAphbGxvd3Mg ZGV2ZWxvcGVycyB0byBnZW5lcmF0ZSBzcGVjaWFsaXplZCBzb2x1dGlvbnMgZm9yIGFueSBp bnRlZ2VyIHR5cGUKKHVpbnQ4LCBpbnQ4LCB1aW50MTYsIGludDE2LCBhbmQgc28gb24pLiBU aGUgdW5pdHMgYml0cGFja191MTYgYW5kCnZlY3RfdTE2IHN1cHBvcnRpbmcgdGhlIHVpbnQx Nl90IHR5cGUgYXJlIGFsc28gcHJvdmlkZWQgYnkgdGhpcyBjb21taXQuCgpBdXRob3I6IEV2 Z2VueSBWb3JvcGFldiA8ZXZnZW55LnZvcm9wYWV2QHRhbnRvcmxhYnMuY29tPiA8ZXZvcm9w QGdtYWlsLmNvbT4KUmV2aWV3ZWQgYnk6IEFuZHJleSBCb3JvZGluIDx4NG1tbUB5YW5kZXgt dGVhbS5ydT4KLS0tCiBzcmMvYmFja2VuZC9saWIvTWFrZWZpbGUgICAgICAgICAgICAgICB8 ICAgNSArCiBzcmMvYmFja2VuZC9saWIvTWFrZWZpbGUuZGZvciAgICAgICAgICB8ICAgNSAr CiBzcmMvYmFja2VuZC9saWIvYml0cGFja190ZW1wbC5jICAgICAgICB8IDE1NiArKysrKysr KysrKysrCiBzcmMvYmFja2VuZC9saWIvYml0cGFja191MTYuYyAgICAgICAgICB8ICAgOCAr CiBzcmMvYmFja2VuZC9saWIvbWVzb24uYnVpbGQgICAgICAgICAgICB8ICAgNyArCiBzcmMv YmFja2VuZC9saWIvdmVjdF90ZW1wbC5jICAgICAgICAgICB8IDMwMSArKysrKysrKysrKysr KysrKysrKysrKysrCiBzcmMvYmFja2VuZC9saWIvdmVjdF91MTYuYyAgICAgICAgICAgICB8 ICAgOCArCiBzcmMvaW5jbHVkZS9jLmggICAgICAgICAgICAgICAgICAgICAgICB8ICAgNCAr CiBzcmMvaW5jbHVkZS9saWIvYml0cGFja190ZW1wbC5oICAgICAgICB8ICAxNCArKwogc3Jj L2luY2x1ZGUvbGliL2JpdHBhY2tfdGVtcGxfc3RhcGxlLmggfCAgNTcgKysrKysKIHNyYy9p bmNsdWRlL2xpYi9iaXRwYWNrX3RlbXBsX3VuZGVmLmggIHwgICA1ICsKIHNyYy9pbmNsdWRl L2xpYi9iaXRwYWNrX3UxNi5oICAgICAgICAgIHwgIDEyICsKIHNyYy9pbmNsdWRlL2xpYi9i aXRwYWNrX3UxNl9jb25maWcuaCAgIHwgICA2ICsKIHNyYy9pbmNsdWRlL2xpYi92ZWN0X3Rl bXBsLmggICAgICAgICAgIHwgIDI3ICsrKwogc3JjL2luY2x1ZGUvbGliL3ZlY3RfdGVtcGxf c3RhcGxlLmggICAgfCAxNDAgKysrKysrKysrKysrCiBzcmMvaW5jbHVkZS9saWIvdmVjdF90 ZW1wbF91bmRlZi5oICAgICB8ICAyNSArKwogc3JjL2luY2x1ZGUvbGliL3ZlY3RfdTE2Lmgg ICAgICAgICAgICAgfCAgMTEgKwogc3JjL2luY2x1ZGUvbGliL3ZlY3RfdTE2X2NvbmZpZy5o ICAgICAgfCAgMTAgKwogc3JjL3Rvb2xzL3BnaW5jbHVkZS9oZWFkZXJzY2hlY2sgICAgICAg fCAgIDkgKwogMTkgZmlsZXMgY2hhbmdlZCwgODEwIGluc2VydGlvbnMoKykKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvYmFja2VuZC9saWIvTWFrZWZpbGUuZGZvcgogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy9iYWNrZW5kL2xpYi9iaXRwYWNrX3RlbXBsLmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBzcmMvYmFja2VuZC9saWIvYml0cGFja191MTYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy9iYWNrZW5kL2xpYi92ZWN0X3RlbXBsLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv YmFja2VuZC9saWIvdmVjdF91MTYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRl L2xpYi9iaXRwYWNrX3RlbXBsLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9s aWIvYml0cGFja190ZW1wbF9zdGFwbGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNs dWRlL2xpYi9iaXRwYWNrX3RlbXBsX3VuZGVmLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv aW5jbHVkZS9saWIvYml0cGFja191MTYuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNs dWRlL2xpYi9iaXRwYWNrX3UxNl9jb25maWcuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9p bmNsdWRlL2xpYi92ZWN0X3RlbXBsLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVk ZS9saWIvdmVjdF90ZW1wbF9zdGFwbGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNs dWRlL2xpYi92ZWN0X3RlbXBsX3VuZGVmLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5j bHVkZS9saWIvdmVjdF91MTYuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL2xp Yi92ZWN0X3UxNl9jb25maWcuaAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xpYi9NYWtl ZmlsZSBiL3NyYy9iYWNrZW5kL2xpYi9NYWtlZmlsZQppbmRleCBiNmNlZmQ5Y2NhMC4uNzQx NjdiYzllNGMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2xpYi9NYWtlZmlsZQorKysgYi9z cmMvYmFja2VuZC9saWIvTWFrZWZpbGUKQEAgLTEyLDYgKzEyLDggQEAgc3ViZGlyID0gc3Jj L2JhY2tlbmQvbGliCiB0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLgogaW5jbHVkZSAkKHRvcF9i dWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAogCitpbmNsdWRlIE1ha2VmaWxlLmRmb3IK KwogT0JKUyA9IFwKIAliaXBhcnRpdGVfbWF0Y2gubyBcCiAJYmxvb21maWx0ZXIubyBcCkBA IC0yMiw1ICsyNCw4IEBAIE9CSlMgPSBcCiAJa25hcHNhY2subyBcCiAJcGFpcmluZ2hlYXAu byBcCiAJcmJ0cmVlLm8gXAorCSQoT0JKU19ERk9SKSBcCisKK0NQUEZMQUdTIDo9IC1JJCh0 b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9saWIgJChDUFBGTEFHUykKIAogaW5jbHVkZSAkKHRv cF9zcmNkaXIpL3NyYy9iYWNrZW5kL2NvbW1vbi5tawpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvbGliL01ha2VmaWxlLmRmb3IgYi9zcmMvYmFja2VuZC9saWIvTWFrZWZpbGUuZGZvcgpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjkzYzZlNzg2NDQKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9saWIvTWFrZWZpbGUuZGZvcgpAQCAtMCww ICsxLDUgQEAKKyMgTWFrZWZpbGUuZGZvcgorCitPQkpTX0RGT1IgOj0gXAorCWJpdHBhY2tf dTE2Lm8gXAorCXZlY3RfdTE2Lm8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xpYi9iaXRw YWNrX3RlbXBsLmMgYi9zcmMvYmFja2VuZC9saWIvYml0cGFja190ZW1wbC5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41MzZmZDYwNGFiMgotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy9iYWNrZW5kL2xpYi9iaXRwYWNrX3RlbXBsLmMKQEAgLTAsMCArMSwx NTYgQEAKKy8qCisgKiBiaXRwYWNrX3RlbXBsLmMKKyAqCisgKiBUaGUgQklUUEFDSyB1bml0 IGltcGxlbWVudHMgcm91dGluZXMgcGVydGFpbmluZyB0byBiaXQtcGFja2luZy4gVGhlIGJp dHBhY2sKKyAqIHVuaXQgYWxsb3cgaGlnaGVyLWxldmVsIGZ1bmN0aW9ucyB0byBjcmVhdGUg aGlnaC1kZW5zaXR5IGFycmF5cyBwYWNrZWQKKyAqIGJpdC1ieS1iaXQuIEluIGdlbmVyYWws IHdpZHRoIG9mIGVhY2ggaXRlbSBpbiBhIGJpdHBhY2tlZCBhcnJheSBjYW4gdmFyeSBhbmQK KyAqIGhhdmUgbm90IHRvIGJlIG9mIGZpeGVkIHNpemUsIGl0ZW1zIGNhbiBoYXZlIGRpZmZl cmVudCBsZW5ndGguCisgKi8KKworI2luY2x1ZGUgImxpYi9iaXRwYWNrX3RlbXBsX3N0YXBs ZS5oIgorCitpdGVtX3Qgd2lkdGhfZnJvbV92YWwoaXRlbV90IHZhbCk7CitpdGVtX3Qgd2lk dGhfdG9fbWFzayhzaXplX3Qgd2lkdGgpOworc2l6ZV90IGJpdHBhY2tfcGFjayh1aW50OF90 ICpwYWNrLCBzaXplX3QgY2FyZXQsIGl0ZW1fdCBpdGVtLAorCQkJCQlzaXplX3Qgc3pJdGVt V2lkdGgpOworaXRlbV90IGJpdHBhY2tfdW5wYWNrKGNvbnN0IHVpbnQ4X3QgKnBhY2ssIHNp emVfdCAqY2FyZXQsIHNpemVfdCBzekl0ZW1XaWR0aCk7CisKKy8qCisgKiBTaW5jZSB3aWR0 aCBvZiBpdGVtX3QgY2Fubm90IGJlIG1vcmUgdGhhbiBsZW5ndGggb2YgaXRlbV90CisgKiBs ZyhNQVgoaXRlbV90KSkrMSwgd2UgdXNlIHRoZSBpdGVtX3QgdHlwZSBmb3IgcmV0dXJuZWQg dmFsdWUKKyAqLworaXRlbV90Cit3aWR0aF9mcm9tX3ZhbChpdGVtX3QgdmFsKQoreworCWl0 ZW1fdCB3aWR0aCA9IDA7CisKKwl3aGlsZSAodmFsKSB7CisJCXdpZHRoKys7CisJCXZhbCA9 IHZhbCA+PiAxOworCX0KKworCXJldHVybiB3aWR0aCA9PSAwID8gMSA6IHdpZHRoOworfQor CitpdGVtX3QKK3dpZHRoX3RvX21hc2soc2l6ZV90IHdpZHRoKQoreworCXNpemVfdCBtYXNr ID0gMDsKKworCUFzc2VydCh3aWR0aCAhPSAwKTsKKwlBc3NlcnQod2lkdGggPD0gc2l6ZW9m KGl0ZW1fdCkgKiA4KTsKKworCWlmIChsaWtlbHkod2lkdGggPCBzaXplb2Yoc2l6ZV90KSkp CisJCW1hc2sgPSAoMSA8PCB3aWR0aCkgLSAxOworCWVsc2UKKwkJd2hpbGUgKHdpZHRoLS0p CisJCQltYXNrID0gKG1hc2sgPDwgMSkgfCAxOworCisJcmV0dXJuIChpdGVtX3QpbWFzazsK K30KKworc2l6ZV90CitiaXRwYWNrX3BhY2sodWludDhfdCAqcGFjaywgc2l6ZV90IGNhcmV0 LCBpdGVtX3QgaXRlbSwgc2l6ZV90IHN6SXRlbVdpZHRoKQoreworCXNpemVfdCBzekl0ZW1X aWR0aFRvR28gPSBzekl0ZW1XaWR0aDsKKwlpdGVtX3QgaXRtTWFza1RvR28gPSB3aWR0aF90 b19tYXNrKHN6SXRlbVdpZHRoKTsKKworCXdoaWxlIChzekl0ZW1XaWR0aFRvR28gPiAwKSB7 CisJCXNpemVfdCBjbnRTYXZlZEJpdHM7CisJCXNpemVfdCBieXRlID0gY2FyZXQgLyA4Owor CQlzaXplX3Qgb2ZmID0gY2FyZXQgJSA4OworCQl1aW50OF90IHViQ2h1bmsgPSAodWludDhf dClpdGVtIDw8IG9mZjsKKwkJaXRlbV90IGl0bUNodW5rTWFzayA9IGl0bU1hc2tUb0dvIDw8 IG9mZjsKKwkJLyoKKwkJICogQXBwbHlpbmcgY2h1bmsgdXNpbmcgdGhlIG1hc2suIFNldHRp bmcgYml0cyB0byBvbmUgYW5kIHJlc2V0dGluZyBiaXRzCisJCSAqIHRvIHplcm8gaXMgb25s eSBpbiBzY29wZXMgZGVmaW5lZCBieSB0aGUgbWFzay4gWmVyb2luZyBvZiBiaXRzCisJCSAq IGFjY29yZGluZyB0byBhIG1hc2ssIHdlIGNhbiB1c2UgZXZlbiBhIHBhY2sgbm90IGJlZW4g bnVsbGVkIGluCisJCSAqIGFkdmFuY2UuCisJCSAqLworCQlwYWNrW2J5dGVdIHw9ICh1YkNo dW5rICYgaXRtQ2h1bmtNYXNrKTsKKwkJcGFja1tieXRlXSAmPSAodWJDaHVuayB8IH5pdG1D aHVua01hc2spOworCQljbnRTYXZlZEJpdHMgPSAoOCAtIG9mZiA+IHN6SXRlbVdpZHRoVG9H bykgPworCQkJc3pJdGVtV2lkdGhUb0dvIDoKKwkJCTggLSBvZmY7IC8vIG51bWJlciBvZiBz YXZlZCBiaXRzCisJCXN6SXRlbVdpZHRoVG9HbyAtPSBjbnRTYXZlZEJpdHM7CisJCWNhcmV0 ICs9IGNudFNhdmVkQml0czsKKwkJaXRlbSA9IGl0ZW0gPj4gY250U2F2ZWRCaXRzOworCQlp dG1NYXNrVG9HbyA9IGl0bU1hc2tUb0dvID4+IGNudFNhdmVkQml0czsKKwl9CisJcmV0dXJu IGNhcmV0OworfQorCitpdGVtX3QKK2JpdHBhY2tfdW5wYWNrKGNvbnN0IHVpbnQ4X3QgKnBh Y2ssIHNpemVfdCAqY2FyZXQsIHNpemVfdCB3aWRJdGVtKQoreworCXNpemVfdCBzekl0ZW1D YXJldDsKKwlzaXplX3Qgc3pJdGVtV2lkdGhUb0dvOworCXVpbnQ4X3QgaXRlbVtzaXplb2Yo aXRlbV90KV07IC8qIHNpemUgb2YgaXRlbSBhcnJheSAqLworCisJc2l6ZV90IHN6UGFja0J5 dGU7CisJc2l6ZV90IHN6UGFja09mZjsKKwlzaXplX3Qgc3pJdGVtQnl0ZTsKKwlzaXplX3Qg c3pJdGVtT2ZmOworCXVpbnQ4X3QgdWJDaHVuazsKKworCXN6SXRlbUNhcmV0ID0gMDsKKwlz ekl0ZW1XaWR0aFRvR28gPSB3aWRJdGVtOworCW1lbXNldChpdGVtLCAwLCBzaXplb2YoaXRl bV90KSk7CisKKwl3aGlsZSAoc3pJdGVtV2lkdGhUb0dvID4gMCkgeworCQlzaXplX3Qgc3pD aHVua1NpemU7CisJCXNpemVfdCBzekNodW5rTG93U2l6ZSwgc3pDaHVua0hpZ2hTaXplOwor CisJCXN6UGFja0J5dGUgPSAqY2FyZXQgLyA4OworCQlzelBhY2tPZmYgPSAqY2FyZXQgJSA4 OworCQlzekl0ZW1CeXRlID0gc3pJdGVtQ2FyZXQgLyA4OworCQlzekl0ZW1PZmYgPSBzekl0 ZW1DYXJldCAlIDg7CisKKwkJdWJDaHVuayA9IHBhY2tbc3pQYWNrQnl0ZV0gPj4gc3pQYWNr T2ZmOworCisJCXN6Q2h1bmtTaXplID0gOCAtIHN6UGFja09mZjsKKwkJaWYgKHN6SXRlbVdp ZHRoVG9HbyA8IHN6Q2h1bmtTaXplKSB7CisJCQlzekNodW5rU2l6ZSA9IHN6SXRlbVdpZHRo VG9HbzsKKwkJCXViQ2h1bmsgPSB1YkNodW5rICYgKHVpbnQ4X3Qpd2lkdGhfdG9fbWFzayhz ekl0ZW1XaWR0aFRvR28pOworCQl9CisKKwkJaWYgKHN6Q2h1bmtTaXplID4gKDggLSBzekl0 ZW1PZmYpKSAvKiBGcmVlIHNwYWNlIG9mIGl0ZW1bc3pJdGVtQnl0ZV0gKi8KKwkJeworCQkJ c3pDaHVua0xvd1NpemUgPSA4IC0gc3pJdGVtT2ZmOworCQkJc3pDaHVua0hpZ2hTaXplID0g c3pDaHVua1NpemUgLSBzekNodW5rTG93U2l6ZTsKKwkJfSBlbHNlIHsKKwkJCXN6Q2h1bmtM b3dTaXplID0gc3pDaHVua1NpemU7CisJCQlzekNodW5rSGlnaFNpemUgPSAwOworCQl9CisK KwkJaXRlbVtzekl0ZW1CeXRlXSB8PSB1YkNodW5rIDw8IHN6SXRlbU9mZjsgLyogY2h1bmtf bG93ICovCisKKwkJaWYgKHN6Q2h1bmtIaWdoU2l6ZSAhPSAwKSB7CisJCQlBc3NlcnQoKHN6 SXRlbUJ5dGUgKyAxKSA8IHNpemVvZihpdGVtX3QpKTsgLyogc2l6ZSBvZiBpdGVtIGFycmF5 ICovCisJCQlpdGVtW3N6SXRlbUJ5dGUgKyAxXSB8PSB1YkNodW5rID4+IHN6Q2h1bmtMb3dT aXplOyAvKiBjaHVua19oaWdoICovCisJCX0KKworCQkqY2FyZXQgKz0gc3pDaHVua1NpemU7 CisJCXN6SXRlbUNhcmV0ICs9IHN6Q2h1bmtTaXplOworCQlzekl0ZW1XaWR0aFRvR28gLT0g c3pDaHVua1NpemU7CisJfQorCisJLyoKKwkgKiBSZW9yZGVyaW5nIGJ5dGVzIGluIGFjY29y ZGFuY2Ugd2l0aCBlbmRpYW5uZXNzIG9mIHRoZSBzeXN0ZW0uCisJICoKKwkgKiBIZXJlIGZv ciBhIExpdHRsZS1lbmRpYW4gc3lzdGVtIHdlIGNhbiBhdm9pZCByZW9yZGVyaW5nLCBidXQg aW4gc3VjaCBhCisJICogY2FzZSB3ZSBuZWVkIHRvIGtlZXAgdGhlIGl0ZW0gYXJyYXkgYWxp Z25lZCB3aXRoIGl0ZW1fdCB0eXBlLCBidXQgd2UgZG8KKwkgKiBub3Qga2VlcC4KKwkgKi8K Kwl7CisJCXNpemVfdCBqID0gMTsKKwkJaXRlbV90IHZhbCA9IGl0ZW1bc2l6ZW9mKGl0ZW1f dCkgLSBqXTsKKwkJd2hpbGUgKCsraiA8PSBzaXplb2YoaXRlbV90KSkgeworCQkJdmFsID0g dmFsIDw8IDg7CisJCQl2YWwgfD0gaXRlbVtzaXplb2YoaXRlbV90KSAtIGpdOworCQl9CisJ CXJldHVybiB2YWw7CisJfQorfQorCisjaW5jbHVkZSAibGliL2JpdHBhY2tfdGVtcGxfdW5k ZWYuaCIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xpYi9iaXRwYWNrX3UxNi5jIGIvc3Jj L2JhY2tlbmQvbGliL2JpdHBhY2tfdTE2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLmFlMmVlNmQ2YmIyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tl bmQvbGliL2JpdHBhY2tfdTE2LmMKQEAgLTAsMCArMSw4IEBACisvKgorICogRmlsZTogYml0 cGFja191MTYuYworICovCisKKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KKyNpbmNsdWRlICJs aWIvYml0cGFja191MTZfY29uZmlnLmgiCisjaW5jbHVkZSAiYml0cGFja190ZW1wbC5jIgor LyogY2xhbmctZm9ybWF0IG9uICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9saWIvbWVz b24uYnVpbGQgYi9zcmMvYmFja2VuZC9saWIvbWVzb24uYnVpbGQKaW5kZXggOGUzOGZiMjBm MTcuLjA5ODRiZDBlM2Y2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9saWIvbWVzb24uYnVp bGQKKysrIGIvc3JjL2JhY2tlbmQvbGliL21lc29uLmJ1aWxkCkBAIC0xLDUgKzEsMTAgQEAK ICMgQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCiAKK2Rmb3Jfc291cmNlcyA9IGZpbGVzKAorICAnYml0cGFja191MTYuYycs CisgICd2ZWN0X3UxNi5jJworKQorCiBiYWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMoCiAgICdi aXBhcnRpdGVfbWF0Y2guYycsCiAgICdibG9vbWZpbHRlci5jJywKQEAgLTExLDMgKzE2LDUg QEAgYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAogICAncGFpcmluZ2hlYXAuYycsCiAgICdy YnRyZWUuYycsCiApCisKK2JhY2tlbmRfc291cmNlcyArPSBkZm9yX3NvdXJjZXMKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2xpYi92ZWN0X3RlbXBsLmMgYi9zcmMvYmFja2VuZC9saWIv dmVjdF90ZW1wbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41 MjcxM2MzOWQzYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2xpYi92ZWN0X3Rl bXBsLmMKQEAgLTAsMCArMSwzMDEgQEAKKy8qCisgKiBGaWxlOiB2ZWN0X3RlbXBsLmMKKyAq LworCisjaW5jbHVkZSAibGliL3ZlY3RfdGVtcGxfc3RhcGxlLmgiCisKKy8qCisgKiBWZWN0 b3IncyBmdW5jdGlvbnMKKyAqIEtlZXAgdGhpcyBzZWN0aW9uIGVxdWFsIHRvIHRoZSBzYW1l IHNlY3Rpb24gaW4gdmVjdF90ZW1wbC5oCisgKi8KKy8qCisgKiBDYWxsZXIgaGFzIHRvIGNv bnRyb2wgd2hldGhlciB2ZWN0b3IgdXNlIG91dGVyIG1lbW9yeSBwcm92aWRlZCBieSBjYWxs ZXIgb3IKKyAqIG1hbmFnZSBtZW1vcnkgYWxsb2NhdGlvbiBhdXRvbWF0aWNhbGx5LCB3aGlj aCBkZWZpbmVzIHdoZXRoZXIgdmVjdF9pbnNlcnQsCisgKiB2ZWN0X2FwcGVuZCBhbmQgb3Ro ZXIgZnVuY3Rpb25zIG9mIHRoZSB2ZWN0b3IgY29udGFpbmVyIGF1dG9tYXRpY2FsbHkgbWFu Z2UKKyAqIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24gb3Igbm90LgorICovCisKK2ludCB2 ZWN0X2luaXQodmVjdF90ICp2LCBzaXplX3QgY2FwLCBpdGVtX3Qgb3V0ZXJfbWVtW10pOwor aW50IHZlY3RfZmlsbCh2ZWN0X3QgKnYsIHNpemVfdCBjbnQsIGNvbnN0IGl0ZW1fdCBpbltd KTsKK2ludCB2ZWN0X3Jlc2VydmUodmVjdF90ICp2LCBzaXplX3Qgc3pOZXdDYXApOworaW50 IHZlY3RfYXBwZW5kKHZlY3RfdCAqdmVjdCwgaXRlbV90IHZhbCk7Cit2b2lkIHZlY3RfcHJp bnQoY29uc3QgdmVjdF90ICphKTsKK2ludCB2ZWN0X2NvbXBhcmUoY29uc3QgdmVjdF90ICph LCBjb25zdCB2ZWN0X3QgKmIpOworaW50IHZlY3RfaW5zZXJ0KHZlY3RfdCAqdiwgc2l6ZV90 IHBvcywgaXRlbV90IHZhbCk7Cit2b2lkIHZlY3RfY2xlYXIodmVjdF90ICp2KTsKKworLyoK KyAqIFVuaXF1ZSBzb3J0ZWQgdmVjdG9yJ3MgZnVuY3Rpb25zCisgKiBLZWVwIHRoaXMgc2Vj dGlvbiBlcXVhbCB0byB0aGUgc2FtZSBzZWN0aW9uIGluIHZlY3RfdGVtcGwuaAorICovCit1 c3ZfaW5zX3Jlc190IHVzdl9pbnNlcnQodW5pcXNvcnR2ZWN0X3QgKmEsIGl0ZW1fdCB2YWwp OwordXN2X3NyY2hfcmVzX3QgdXN2X3NlYXJjaChjb25zdCB1bmlxc29ydHZlY3RfdCAqdXN2 LCBpdGVtX3QgdmFsKTsKKworaW50Cit2ZWN0X2luaXQodmVjdF90ICp2LCBzaXplX3QgY2Fw LCBpdGVtX3Qgb3V0ZXJfbWVtW10pCit7CisJaWYgKHYgPT0gTlVMTCkKKwkJZ290byB2ZWN0 X2luaXRfZXJyb3I7CisKKwl2LT5jYXAgPSBjYXA7CisJdi0+Y250ID0gMDsKKworCWlmIChv dXRlcl9tZW0gIT0gTlVMTCkKKwl7CisJCXYtPm1lbV9pc19vdXRlciA9IHRydWU7CisJCXYt Pm0gPSBvdXRlcl9tZW07CisJfQorCWVsc2UKKwl7CisJCXYtPm1lbV9pc19vdXRlciA9IGZh bHNlOworCQlpZiAoY2FwID09IDApCisJCQl2LT5tID0gTlVMTDsKKwkJZWxzZQorCQl7CisJ CQl2LT5tID0gKGl0ZW1fdCAqKVZFQ1RfTUFMTE9DKGNhcCAqIHNpemVvZihpdGVtX3QpKTsK KwkJCWlmICh2LT5tID09IE5VTEwpCisJCQkJZ290byB2ZWN0X2luaXRfZXJyb3I7CisJCX0K Kwl9CisKKwkvKiB2ZWN0X2luaXRfb2s6ICovCisJcmV0dXJuIDA7Cit2ZWN0X2luaXRfZXJy b3I6CisJbWVtc2V0KHYsIDAsIHNpemVvZih2ZWN0X3QpKTsKKwlyZXR1cm4gLTE7Cit9CisK K2ludAordmVjdF9maWxsKHZlY3RfdCAqdiwgc2l6ZV90IGNudCwgY29uc3QgaXRlbV90IGlu W10pCit7CisJaWYgKHYgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJaWYgKGNudCA9PSAw KQorCXsKKwkJdmVjdF9jbGVhcih2KTsKKwkJcmV0dXJuIDA7CisJfQorCisJZm9yIChzaXpl X3QgaiA9IDA7IGogPCBjbnQ7IGorKykKKwl7CisJCWlmICh2ZWN0X2FwcGVuZCh2LCBpbltq XSkgIT0gMCkKKwkJeworCQkJdmVjdF9jbGVhcih2KTsKKwkJCXJldHVybiAtMTsKKwkJfQor CX0KKwlyZXR1cm4gMDsKK30KKworaW50Cit2ZWN0X3Jlc2VydmUodmVjdF90ICp2LCBzaXpl X3Qgc3pOZXdDYXApCit7CisJaXRlbV90ICptTmV3OworCisJaWYgKHYgPT0gTlVMTCkKKwkJ cmV0dXJuIC0xOworCisJaWYgKHYtPm1lbV9pc19vdXRlcikKKwkJcmV0dXJuIC0xOworCisJ aWYgKHN6TmV3Q2FwIDw9IHYtPmNhcCkKKwkJcmV0dXJuIDA7CisKKwltTmV3ID0gKGl0ZW1f dCAqKSBWRUNUX01BTExPQyhzaXplb2YoaXRlbV90KSAqIHN6TmV3Q2FwKTsKKworCWlmICht TmV3ID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCWlmKHYtPm0gPT0gTlVMTCAmJiB2LT5j bnQgIT0gMCkKKwkJcmV0dXJuIC0xOworCisJaWYodi0+bSAhPSBOVUxMICYmIHYtPmNudCAh PSAwKQorCQltZW1jcHkobU5ldywgdi0+bSwgdi0+Y250ICogc2l6ZW9mKGl0ZW1fdCkpOwor CisJVkVDVF9GUkVFKHYtPm0pOworCXYtPm0gPSBtTmV3OworCXYtPmNhcCA9IHN6TmV3Q2Fw OworCXJldHVybiAwOworfQorCitpbnQKK3ZlY3RfYXBwZW5kKHZlY3RfdCAqdmVjdCwgaXRl bV90IHZhbCkKK3sKKwlpZiAodmVjdCA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlpZiAo dmVjdC0+Y250ICsgMSA+IHZlY3QtPmNhcCkKKwl7CisJCWlmICh2ZWN0LT5tZW1faXNfb3V0 ZXIpCisJCQlyZXR1cm4gLTE7CisJCWVsc2UKKwkJCXZlY3RfcmVzZXJ2ZSh2ZWN0LCB2ZWN0 LT5jYXAgKyBWRUNUX01FTUFMTE9DU1RFUCk7CisJfQorCisJdmVjdC0+bVt2ZWN0LT5jbnRd ID0gdmFsOworCXZlY3QtPmNudCsrOworCXJldHVybiAwOworfQorCit2b2lkCit2ZWN0X3By aW50KGNvbnN0IHZlY3RfdCAqYSkKK3sKKwlmb3IgKHNpemVfdCBqID0gMDsgaiA8IGEtPmNu dDsgaisrKQorCQlwcmludGYoIiUiIFZFQ1RfSVRFTV9GT1JNQVRfU1BFQ0lGSUVSICIgIiwg YS0+bVtqXSk7CisKKwlwcmludGYoIlxuIik7Cit9CisKK2ludAordmVjdF9jb21wYXJlKGNv bnN0IHZlY3RfdCAqYSwgY29uc3QgdmVjdF90ICpiKQoreworCWlmIChhID09IE5VTEwgfHwg YiA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoYS0+Y250ICE9IGItPmNudCkKKwkJ cmV0dXJuIC0xOworCisJZm9yIChzaXplX3QgaiA9IDA7IGogPCBhLT5jbnQ7IGorKykKKwkJ aWYgKGEtPm1bal0gIT0gYi0+bVtqXSkKKwkJCXJldHVybiAtMTsKKworCXJldHVybiAwOwor fQorCitpbnQKK3ZlY3RfaW5zZXJ0KHZlY3RfdCAqdiwgc2l6ZV90IHBvcywgaXRlbV90IHZh bCkKK3sKKwlpZiAodi0+Y2FwIDwgdi0+Y250ICsgMSAmJgorCQkodi0+bWVtX2lzX291dGVy IHx8IHZlY3RfcmVzZXJ2ZSh2LCB2LT5jYXAgKyBWRUNUX01FTUFMTE9DU1RFUCkgIT0gMCkp CisJCXJldHVybiAtMTsKKworCS8qCisJICogSWYgbmVlZCwgbW92ZSByaWdodCBmcm9tIHBv cyBpbmNsdWRpbmcgcG9zLiBCZWNhdXNlCisJICogbmVpdGhlciBzdGRsaWIncyBub3IgUE9T SVgncyBkb2N1bWVudGF0aW9uIGRlZmluZXMgdGhlCisJICogYmVoYXZpb3VyIG9mIG1lbW1v dmUgaW4gY2FzZSBvZiBjb3VudD0wLCB3ZSBjaGVjayBpdCBieQorCSAqIG91cnNlbHZlcy4K KwkgKi8KKwlpZiAodi0+Y250IC0gcG9zID4gMCkKKwkJbWVtbW92ZSgmdi0+bVtwb3MgKyAx XSwgJnYtPm1bcG9zXSwgKHYtPmNudCAtIHBvcykgKiBzaXplb2YoaXRlbV90KSk7CisKKwl2 LT5tW3Bvc10gPSB2YWw7CisJdi0+Y250Kys7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQKK3Zl Y3RfY2xlYXIodmVjdF90ICp2KQoreworCWlmICh2ID09IE5VTEwpCisJCXJldHVybjsKKwor CWlmICghdi0+bWVtX2lzX291dGVyKQorCQlWRUNUX0ZSRUUodi0+bSk7CisKKwltZW1zZXQo diwgMCwgc2l6ZW9mKHZlY3RfdCkpOworfQorCit1c3Zfc3JjaF9yZXNfdAordXN2X3NlYXJj aChjb25zdCB1bmlxc29ydHZlY3RfdCAqdXN2LCBpdGVtX3QgdmFsKQoreworCXNpemVfdCBp LCBsLCBnOworCXVzdl9zcmNoX3Jlc190IHJlczsKKworCWlmICh1c3YgPT0gTlVMTCB8fCAo dXN2LT5tID09IE5VTEwgJiYgKCh1c3YtPmNudCAhPSAwKSB8fCB1c3YtPmNhcCAhPSAwKSkp IHsKKwkJcmVzLnN0ID0gVVNWX1NSQ0hfRVJST1I7CisJCXJldHVybiByZXM7CisJfQorCisJ aWYgKHVzdi0+Y250ID09IDApIHsKKwkJcmVzLnBvcyA9IDA7CisJCXJlcy5zdCA9IFVTVl9T UkNIX0VNUFRZOworCQlyZXR1cm4gcmVzOworCX0KKworCWlmICh2YWwgPCB1c3YtPm1bMF0p IHsKKwkJcmVzLnBvcyA9IDA7CisJCXJlcy5zdCA9IFVTVl9TUkNIX05PVF9GT1VORF9TTUFM TEVTVDsKKwkJcmV0dXJuIHJlczsKKwl9CisKKwlpZiAodmFsID4gdXN2LT5tW3Vzdi0+Y250 IC0gMV0pIHsKKwkJcmVzLnBvcyA9IHVzdi0+Y250IC0gMTsKKwkJcmVzLnN0ID0gVVNWX1NS Q0hfTk9UX0ZPVU5EX0xBUkdFU1Q7CisJCXJldHVybiByZXM7CisJfQorCisJbCA9IDA7CisJ ZyA9IHVzdi0+Y250IC0gMTsKKworCXdoaWxlIChnIC0gbCA+IDEpIHsKKwkJaSA9IGwgKyAo ZyAtIGwpIC8gMjsKKwkJaWYgKHZhbCA9PSB1c3YtPm1baV0pIHsKKwkJCXJlcy5wb3MgPSBp OworCQkJcmVzLnN0ID0gVVNWX1NSQ0hfRk9VTkQ7CisJCQlyZXR1cm4gcmVzOworCQl9IGVs c2UgaWYgKHZhbCA+IHVzdi0+bVtpXSkgeworCQkJbCA9IGk7CisJCX0gZWxzZSAvLyB2YWwg PD0gdXN2LT5tW2ldCisJCXsKKwkJCWcgPSBpOworCQl9CisJfQorCS8qCisJICogV2hlbiBz Y29wZXMgbCBhbmQgZyBhcmUgbmVpZ2hib3VycyAoICBnLWwgPSAxKQorCSAqLworCWlmICh2 YWwgPT0gdXN2LT5tW2ddKSB7CisJCXJlcy5wb3MgPSBnOworCQlyZXMuc3QgPSBVU1ZfU1JD SF9GT1VORDsKKwkJcmV0dXJuIHJlczsKKwl9IGVsc2UgaWYgKHZhbCA9PSB1c3YtPm1bbF0p IHsKKwkJcmVzLnBvcyA9IGw7CisJCXJlcy5zdCA9IFVTVl9TUkNIX0ZPVU5EOworCQlyZXR1 cm4gcmVzOworCX0KKworCXJlcy5wb3MgPSBnOworCXJlcy5zdCA9IFVTVl9TUkNIX05PVF9G T1VORDsKKwlyZXR1cm4gcmVzOworfQorCisvKgorICogSU5TRVJUCisgKiByZWNlaXZlcyBh IHZhbHVlLCBjaGVja3Mgd2hldGhlciBhbiB1bmlxdWUgc29ydGVkIHZhbHVlcyB2ZWN0b3Ig Y29udGFpbnMKKyAqIHRoaXMgdmFsdWUuIElmIG5vdCwgaW5zZXJ0cyBuZXcgdmFsdWUsIHJl dGFpbmluZyBzb3J0ZWQgb3JkZXIuCisgKi8KK3Vzdl9pbnNfcmVzX3QKK3Vzdl9pbnNlcnQo dW5pcXNvcnR2ZWN0X3QgKmEsIGl0ZW1fdCB2YWwpCit7CisJdXN2X3NyY2hfcmVzX3Qgc2Vh cmNoOworCXVzdl9pbnNfcmVzX3QgaW5zZXJ0OworCisJQXNzZXJ0KGEgIT0gTlVMTCk7CisK KwlzZWFyY2ggPSB1c3Zfc2VhcmNoKGEsIHZhbCk7CisJaWYgKHNlYXJjaC5zdCA9PSBVU1Zf U1JDSF9GT1VORCkgeworCQlpbnNlcnQuc3QgPSBVU1ZfSU5TX0VYSVNUUzsKKwkJaW5zZXJ0 LnBvcyA9IHNlYXJjaC5wb3M7CisJCXJldHVybiBpbnNlcnQ7CisJfSBlbHNlIGlmIChzZWFy Y2guc3QgPT0gVVNWX1NSQ0hfTk9UX0ZPVU5EX1NNQUxMRVNUIHx8CisJCQkgICBzZWFyY2gu c3QgPT0gVVNWX1NSQ0hfTk9UX0ZPVU5EKSB7CisJCWluc2VydC5wb3MgPSBzZWFyY2gucG9z OworCX0gZWxzZSBpZiAoc2VhcmNoLnN0ID09IFVTVl9TUkNIX0VNUFRZIHx8CisJCQkgICBz ZWFyY2guc3QgPT0gVVNWX1NSQ0hfTk9UX0ZPVU5EX0xBUkdFU1QpIHsKKwkJLyogSW4gY2Fz ZSB3aGVuIHZhbHVlIGlzIG1vcmUgdGhhbiBsYXJnZXN0OiBwb3MgPSBhLT5jbnQgPSBzZWFy Y2guZyArIDEuCisJCSAqLworCQkvKiBJbiBjYXNlIG9mIGVtcHR5IHZlY3RvcjogcG9zID0g YS0+Y250ID0gMC4gKi8KKwkJaW5zZXJ0LnBvcyA9IGEtPmNudDsKKwl9IGVsc2UgLyogVVNW X1NSQ0hfRVJST1Igb3IgdW5rbm93biByZXN1bHQgKi8KKwl7CisJCWluc2VydC5zdCA9IFVT Vl9JTlNfRVJST1I7CisJCXJldHVybiBpbnNlcnQ7CisJfQorCisJaW5zZXJ0LnN0ID0gdmVj dF9pbnNlcnQoYSwgaW5zZXJ0LnBvcywgdmFsKQorCT09IDAgPyBVU1ZfSU5TX05FVyA6IFVT Vl9JTlNfRVJST1I7CisKKwlyZXR1cm4gaW5zZXJ0OworfQorCisjaW5jbHVkZSAibGliL3Zl Y3RfdGVtcGxfdW5kZWYuaCIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xpYi92ZWN0X3Ux Ni5jIGIvc3JjL2JhY2tlbmQvbGliL3ZlY3RfdTE2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjBhYjhlMjI0YzdhCi0tLSAvZGV2L251bGwKKysrIGIvc3Jj L2JhY2tlbmQvbGliL3ZlY3RfdTE2LmMKQEAgLTAsMCArMSw4IEBACisvKgorICogRmlsZTog dmVjdF91MTYuYworICovCisKKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KKyNpbmNsdWRlICJs aWIvdmVjdF91MTZfY29uZmlnLmgiCisjaW5jbHVkZSAidmVjdF90ZW1wbC5jIgorLyogY2xh bmctZm9ybWF0IG9uICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jLmggYi9zcmMvaW5j bHVkZS9jLmgKaW5kZXggOTdlZDhjNjNmNWUuLjYyN2JjMzMxZjAyIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9jLmgKKysrIGIvc3JjL2luY2x1ZGUvYy5oCkBAIC01MDUsNiArNTA1LDEw IEBAIGV4dGVybiAiQysrIgogI2RlZmluZSBDcHBBc1N0cmluZyhpZGVudGlmaWVyKSAjaWRl bnRpZmllcgogI2RlZmluZSBDcHBBc1N0cmluZzIoeCkJCQlDcHBBc1N0cmluZyh4KQogI2Rl ZmluZSBDcHBDb25jYXQoeCwgeSkJCQl4IyN5CisjZGVmaW5lIENwcENvbmNhdDIoeCwgeSkJ CUNwcENvbmNhdCh4LCB5KQorCisjZGVmaW5lIENwcENvbmNhdFRyaXBsZSh4LCB5LCB6KQl4 IyN5IyN6CisjZGVmaW5lIENwcENvbmNhdFRyaXBsZTIoYSwgYiwgYykJQ3BwQ29uY2F0VHJp cGxlKGEsIGIsIGMpCiAKIC8qCiAgKiBWQV9BUkdTX05BUkdTCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9saWIvYml0cGFja190ZW1wbC5oIGIvc3JjL2luY2x1ZGUvbGliL2JpdHBhY2tf dGVtcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjA4Y2Fm MmIwZTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9saWIvYml0cGFja190ZW1w bC5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qCisgKiBiaXRwYWNrX3RlbXBsLmgKKyAqCisgKi8K KworI2luY2x1ZGUgImJpdHBhY2tfdGVtcGxfc3RhcGxlLmgiCisKK2V4dGVybiBpdGVtX3Qg d2lkdGhfZnJvbV92YWwoaXRlbV90IHZhbCk7CitleHRlcm4gaXRlbV90IHdpZHRoX3RvX21h c2soc2l6ZV90IHdpZHRoKTsKK2V4dGVybiBzaXplX3QgYml0cGFja19wYWNrKHVpbnQ4X3Qg KnBhY2ssIHNpemVfdCBjYXJldCwgaXRlbV90IGl0ZW0sCisJCQkJCQkgICBzaXplX3Qgc3pJ dGVtV2lkdGgpOworZXh0ZXJuIGl0ZW1fdCBiaXRwYWNrX3VucGFjayhjb25zdCB1aW50OF90 ICpwYWNrLCBzaXplX3QgKmNhcmV0LCBzaXplX3Qgc3pJdGVtV2lkdGgpOworCisjaW5jbHVk ZSAiYml0cGFja190ZW1wbF91bmRlZi5oIgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGli L2JpdHBhY2tfdGVtcGxfc3RhcGxlLmggYi9zcmMvaW5jbHVkZS9saWIvYml0cGFja190ZW1w bF9zdGFwbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzhl ZjMyODUwMDQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9saWIvYml0cGFja190 ZW1wbF9zdGFwbGUuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogRmlsZTogYml0cGFja190 ZW1wbF9zdGFwbGUuaAorICovCisKKyNpbmNsdWRlICJjLmgiCisKKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioKKyAqIE5PTlJFVVNBQkxFIENPREUsIGFsbG93ZWQgdG8gYmUgaW5jbHVk ZWQgb25seSBvbmNlCisgKgorICogVGhpcyBjb2RlIHNob3VsZCBhcHBlYXIgb25seSBvbmNl IGluIGEgZmlsZSAob3IgaW4gYSBjaGFpbiBvZiBmaWxlcykKKyAqIGluY2x1ZGluZyB0aGlz IGhlYWRlciB3aXRoICNpbmNsdWRlLiBTbywgd2UgcHJvdGVjdCBpdCBmcm9tIGR1cGxpY2F0 ZXMgYnkKKyAqIG1lYW5zIG9mIG1hY3JvCisgKgorICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LworI2lmbmRlZiBfQklUUEFDS19URU1QTF9TVEFQTEVfSF9VTklRVUVfQ09ERV8KKyNkZWZp bmUgX0JJVFBBQ0tfVEVNUExfU1RBUExFX0hfVU5JUVVFX0NPREVfCisKKy8qIE5vIGNvZGUg aGVyZSB5ZXQgKi8KKworI2VuZGlmIC8qIF9CSVRQQUNLX1RFTVBMX1NUQVBMRV9IX1VOSVFV RV9DT0RFXyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFbmQgb2YgQ29k ZSwgYWxsb3dlZCB0byBiZSBpbmNsdWRlZCBvbmx5IG9uY2UKKyAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUkVVU0FCTEUgQ09E RQorICoKKyAqIFRoaXMgY29kZSBjYW4gYmUgcmV1c2VkIHdpdGggI2luY2x1ZGUgZGlyZWN0 aXZlIGluIGEgZmlsZSBpZiBCSVRQQUNLX01BUktFUgorICogcmVkZWZpbmVkLiBUaGlzIGFs bG93IGNyZWF0aW9uIG9mIHNldmVyYWwgdHlwZXMgb2YgdmVjdG9ycyB3aXRoIGRpZmZlcmVu dAorICogdHlwZXMgb2YgbWVtYmVycy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CisKKyNpZm5kZWYgQklUUEFDS19JVEVNX1RZUEUKKyNlcnJvciAiQklUUEFDS19JVEVNX1RZ UEUgbWFjcm8gaXMgaW5kZWZpbmVkLiIKKyNlbmRpZgorI2lmbmRlZiBCSVRQQUNLX01BUktF UgorI2Vycm9yICJCSVRQQUNLX01BUktFUiBtYWNybyBpcyBpbmRlZmluZWQuIgorI2VuZGlm CisKKyNkZWZpbmUgaXRlbV90CQkgICBCSVRQQUNLX0lURU1fVFlQRQorI2RlZmluZSB3aWR0 aF9mcm9tX3ZhbCBDcHBDb25jYXRUcmlwbGUyKHdpZHRoXywgQklUUEFDS19NQVJLRVIsIF9m cm9tX3ZhbCkKKyNkZWZpbmUgd2lkdGhfdG9fbWFzayAgQ3BwQ29uY2F0VHJpcGxlMih3aWR0 aF8sIEJJVFBBQ0tfTUFSS0VSLCBfdG9fbWFzaykKKyNkZWZpbmUgYml0cGFja19wYWNrICAg Q3BwQ29uY2F0VHJpcGxlMihiaXRwYWNrXywgQklUUEFDS19NQVJLRVIsIF9wYWNrKQorI2Rl ZmluZSBiaXRwYWNrX3VucGFjayBDcHBDb25jYXRUcmlwbGUyKGJpdHBhY2tfLCBCSVRQQUNL X01BUktFUiwgX3VucGFjaykKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRW5k IG9mIFJldXNhYmxlIENvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAq IERvbid0IGZvcmdldCB0byBpbmNsdWRlIHRoaXMgY29kZSBpbiB5b3VyIGZpbGUgdGhhdCB1 c2VzIHRoaXMgaGVhZGVyCisgKgorICogI2luY2x1ZGUgImxpYi9iaXRwYWNrX3RlbXBsX3Vu ZGVmLmgiCisgKgorICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9saWIvYml0cGFja190 ZW1wbF91bmRlZi5oIGIvc3JjL2luY2x1ZGUvbGliL2JpdHBhY2tfdGVtcGxfdW5kZWYuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWJmODY0ZmZhMTUKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9saWIvYml0cGFja190ZW1wbF91bmRlZi5o CkBAIC0wLDAgKzEsNSBAQAorI3VuZGVmIGl0ZW1fdAorI3VuZGVmIHdpZHRoX2Zyb21fdmFs CisjdW5kZWYgd2lkdGhfdG9fbWFzaworI3VuZGVmIGJpdHBhY2tfcGFjaworI3VuZGVmIGJp dHBhY2tfdW5wYWNrCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9saWIvYml0cGFja191MTYu aCBiL3NyYy9pbmNsdWRlL2xpYi9iaXRwYWNrX3UxNi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi40NWZiNmM0YjE3YgotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy9pbmNsdWRlL2xpYi9iaXRwYWNrX3UxNi5oCkBAIC0wLDAgKzEsMTIgQEAKKy8qCisgKiBi aXRwYWNrLmgKKyAqLworI2lmbmRlZiBfQklUUEFDS19VMTZfSF8KKyNkZWZpbmUgX0JJVFBB Q0tfVTE2X0hfCisKKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KKyNpbmNsdWRlICJiaXRwYWNr X3UxNl9jb25maWcuaCIKKyNpbmNsdWRlICJiaXRwYWNrX3RlbXBsLmgiCisvKiBjbGFuZy1m b3JtYXQgb24gKi8KKworI2VuZGlmIC8qIF9CSVRQQUNLX1UxNl9IXyAqLwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvbGliL2JpdHBhY2tfdTE2X2NvbmZpZy5oIGIvc3JjL2luY2x1ZGUv bGliL2JpdHBhY2tfdTE2X2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi45ZTZjNjRkNGZlZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRl L2xpYi9iaXRwYWNrX3UxNl9jb25maWcuaApAQCAtMCwwICsxLDYgQEAKKy8qCisgKiBGaWxl OiB2ZWN0X3UxNl9jb25maWcuaAorICovCisKKyNkZWZpbmUgQklUUEFDS19JVEVNX1RZUEUg dWludDE2X3QKKyNkZWZpbmUgQklUUEFDS19NQVJLRVIJICB1MTYKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2xpYi92ZWN0X3RlbXBsLmggYi9zcmMvaW5jbHVkZS9saWIvdmVjdF90ZW1w bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44ZWVjNmYwNjRi MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2xpYi92ZWN0X3RlbXBsLmgKQEAg LTAsMCArMSwyNyBAQAorLyoKKyAqIEZpbGU6IHZlY3RfdGVtcGwuaAorICovCisKKyNpbmNs dWRlICJ2ZWN0X3RlbXBsX3N0YXBsZS5oIgorCisvKgorICogVmVjdG9yJ3MgZnVuY3Rpb25z CisgKiBLZWVwIHRoaXMgc2VjdGlvbiBlcXVhbCB0byB0aGUgc2FtZSBzZWN0aW9uIGluIHZl Y3RfdGVtcGwuYworICovCitleHRlcm4gaW50IHZlY3RfaW5pdCh2ZWN0X3QgKnYsIHNpemVf dCBjYXAsIGl0ZW1fdCBleHRlcm5hbF9tZW1vcnlbXSk7CitleHRlcm4gaW50IHZlY3RfZmls bCh2ZWN0X3QgKnYsIHNpemVfdCBjbnQsIGNvbnN0IGl0ZW1fdCAqaW4pOworZXh0ZXJuIGlu dCB2ZWN0X3Jlc2VydmUodmVjdF90ICp2LCBzaXplX3Qgc3pOZXdDYXApOworZXh0ZXJuIGlu dCB2ZWN0X2FwcGVuZCh2ZWN0X3QgKnZlY3QsIGl0ZW1fdCB2YWwpOworZXh0ZXJuIHZvaWQg dmVjdF9wcmludChjb25zdCB2ZWN0X3QgKmEpOworZXh0ZXJuIGludCB2ZWN0X2NvbXBhcmUo Y29uc3QgdmVjdF90ICphLCBjb25zdCB2ZWN0X3QgKmIpOworZXh0ZXJuIGludCB2ZWN0X2lu c2VydCh2ZWN0X3QgKnYsIHNpemVfdCBwb3MsIGl0ZW1fdCB2YWwpOworZXh0ZXJuIHZvaWQg dmVjdF9jbGVhcih2ZWN0X3QgKnYpOworCisvKgorICogVW5pcXVlIHNvcnRlZCB2ZWN0b3In cyBmdW5jdGlvbnMKKyAqIEtlZXAgdGhpcyBzZWN0aW9uIGVxdWFsIHRvIHRoZSBzYW1lIHNl Y3Rpb24gaW4gdmVjdF90ZW1wbC5jCisgKi8KK2V4dGVybiB1c3ZfaW5zX3Jlc190IHVzdl9p bnNlcnQodW5pcXNvcnR2ZWN0X3QgKmEsIGl0ZW1fdCB2YWwpOworZXh0ZXJuIHVzdl9zcmNo X3Jlc190IHVzdl9zZWFyY2goY29uc3QgdW5pcXNvcnR2ZWN0X3QgKnVzdiwgaXRlbV90IHZh bCk7CisKKyNpbmNsdWRlICJ2ZWN0X3RlbXBsX3VuZGVmLmgiClwgTm8gbmV3bGluZSBhdCBl bmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGliL3ZlY3RfdGVtcGxfc3Rh cGxlLmggYi9zcmMvaW5jbHVkZS9saWIvdmVjdF90ZW1wbF9zdGFwbGUuaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjE5MmM2ZDgyYTMKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvaW5jbHVkZS9saWIvdmVjdF90ZW1wbF9zdGFwbGUuaApAQCAtMCwwICsx LDE0MCBAQAorLyoKKyAqIEZpbGU6IHZlY3Rfc3RhcGxlX3RlbXBsLmgKKyAqLworCisjaW5j bHVkZSAiYy5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBOT05SRVVTQUJM RSBDT0RFLCBhbGxvd2VkIHRvIGJlIGluY2x1ZGVkIG9ubHkgb25jZQorICoKKyAqIFRoaXMg Y29kZSBzaG91bGQgYXBwZWFyIG9ubHkgb25jZSBpbiBhIGZpbGUgKG9yIGluIGEgY2hhaW4g b2YgZmlsZXMpCisgKiBpbmNsdWRpbmcgdGhpcyBoZWFkZXIgd2l0aCAjaW5jbHVkZS4gU28s IHdlIHByb3RlY3QgaXQgZnJvbSBkdXBsaWNhdGVzIGJ5CisgKiBtZWFucyBvZiBtYWNybwor ICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1ZFQ1RfU1RBUExFX1RF TVBMX0hfVU5JUVVFX0NPREVfCisjZGVmaW5lIF9WRUNUX1NUQVBMRV9URU1QTF9IX1VOSVFV RV9DT0RFXworCisvKgorICogU0VBUkNIIGluIFZlY3RvciBvZiBVbmlxdWUgU29ydGVkIG1l bWJlcnMKKyAqLwordHlwZWRlZiBlbnVtCit7CisJVVNWX1NSQ0hfRVJST1IgPSAtMSwKKwlV U1ZfU1JDSF9GT1VORCA9IDAsCisJVVNWX1NSQ0hfRU1QVFksCisJVVNWX1NSQ0hfTk9UX0ZP VU5ELAorCVVTVl9TUkNIX05PVF9GT1VORF9TTUFMTEVTVCwKKwlVU1ZfU1JDSF9OT1RfRk9V TkRfTEFSR0VTVAorfSB1c3Zfc3JjaF9zdGF0X3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisJ dXN2X3NyY2hfc3RhdF90IHN0OworCXNpemVfdCBwb3M7IC8qIHBvc2l0aW9uIChpbmRleCkg b2YgYSBtZW1iZXIgdGhhdCBpcyBlcXVhbCB0byBzZWFyY2hlZCB2YWx1ZQorCQkJCSAqIG9y IHRoYXQgaXMgbmVhcmVzdCBncmVhdGVyIG1lbWJlciAqLworfSB1c3Zfc3JjaF9yZXNfdDsK KworLyoKKyAqIElOU0VSVCAgaW4gVmVjdG9yIG9mIFVuaXF1ZSBTb3J0ZWQgbWVtYmVycwor ICovCit0eXBlZGVmIGVudW0KK3sKKwlVU1ZfSU5TX0VSUk9SID0gLTEsCisJVVNWX0lOU19F WElTVFMgPSAwLAorCVVTVl9JTlNfTkVXCit9IHVzdl9pbnNfc3RhdF90OworCit0eXBlZGVm IHN0cnVjdAoreworCXVzdl9pbnNfc3RhdF90IHN0OworCXNpemVfdCBwb3M7IC8qIHBvc2l0 aW9uIChpbmRleCkgb2YgYSBtZW1iZXIgdGhhdCB3YXMgaW5zZXJ0ZWQgb3IgdGhhdCBwcm92 ZWQKKwkJCQkgKiB0byBiZSBlcXVhbCB0byBpbnNlcnRlZCB2YWx1ZQorCQkJCSAqLworfSB1 c3ZfaW5zX3Jlc190OworCisjZW5kaWYgLyogX1ZFQ1RfU1RBUExFX1RFTVBMX0hfVU5JUVVF X0NPREVfICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVuZCBvZiBDb2Rl LCBhbGxvd2VkIHRvIGJlIGluY2x1ZGVkIG9ubHkgb25jZQorICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSRVVTQUJMRSBDT0RF CisgKgorICogVGhpcyBjb2RlIGNhbiBiZSByZXVzZWQgd2l0aCAjaW5jbHVkZSBkaXJlY3Rp dmUgaW4gYSBmaWxlIGlmIFZFQ1RfTUFSS0VSCisgKiByZWRlZmluZWQuIFRoaXMgYWxsb3cg Y3JlYXRpb24gb2Ygc2V2ZXJhbCB0eXBlcyBvZiB2ZWN0b3JzIHdpdGggZGlmZmVyZW50Cisg KiB0eXBlcyBvZiBtZW1iZXJzLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwor I2lmbmRlZiBWRUNUX0lURU1fVFlQRQorI2Vycm9yICJWRUNUX0lURU1fVFlQRSBtYWNybyBp cyBpbmRlZmluZWQuIgorI2VuZGlmCisKKyNpZm5kZWYgVkVDVF9JVEVNX0ZPUk1BVF9TUEVD SUZJRVIKKyNlcnJvciAiVkVDVF9JVEVNX0ZPUk1BVF9TUEVDSUZJRVIgbWFjcm8gaXMgaW5k ZWZpbmVkLiIKKyNlbmRpZgorCisjaWZuZGVmIFZFQ1RfTUFSS0VSCisjZXJyb3IgIlZFQ1Rf TUFSS0VSIG1hY3JvIGlzIGluZGVmaW5lZC4iCisjZW5kaWYKKworI2lmbmRlZiBWRUNUX01F TUFMTE9DU1RFUAorI2Vycm9yICJWRUNUX01FTUFMTE9DU1RFUCBtYWNybyBpcyBpbmRlZmlu ZWQuIgorI2VuZGlmCisKKyNpZm5kZWYgVkVDVF9NQUxMT0MKKyNlcnJvciAiVkVDVF9NQUxM T0MgbWFjcm8gaXMgaW5kZWZpbmVkLiIKKyNlbmRpZgorCisjaWZuZGVmIFZFQ1RfRlJFRQor I2Vycm9yICJWRUNUX0ZSRUUgbWFjcm8gaXMgaW5kZWZpbmVkLiIKKyNlbmRpZgorCisvKgor ICogVGhlIFZlY3RvciB0eXBlIGl0c2VsZiwKKyAqIFRoZSBWZWN0b3Igb2YgVW5pcXVlIFNv cnRlZCBJdGVtcyB0eXBlCisgKiBhbmQgdGhlIEl0ZW0gdHlwZQorICoKKyAqIEluIGZhY3Qs IHZlY3RvcnMncyBuYW1lcyBsb29rcyBsaWtlIHZlY3RfdTE2X3Qgd2hlcmU6CisgKiAgICAg dmVjdF8gLSBjb21tb24gcHJlZml4LAorICogICAgIHUxNiAtIG1hcmtlciwKKyAqICAgICBf dCAtIHN1ZmZpeAorICovCisjZGVmaW5lIHZlY3RfdAkJICAgQ3BwQ29uY2F0VHJpcGxlMih2 ZWN0XywgVkVDVF9NQVJLRVIsIF90KQorI2RlZmluZSB1bmlxc29ydHZlY3RfdCBDcHBDb25j YXRUcmlwbGUyKHVuaXFzb3J0dmVjdF8sIFZFQ1RfTUFSS0VSLCBfdCkKKyNkZWZpbmUgaXRl bV90CQkgICBWRUNUX0lURU1fVFlQRQorCit0eXBlZGVmIHN0cnVjdAoreworCXNpemVfdCBj bnQ7CQkgICAvKiBudW1iZXIgb2YgaXRlbXMgKi8KKwlzaXplX3QgY2FwOwkJICAgLyogY2Fw YWNpdHkgKi8KKwlib29sIG1lbV9pc19vdXRlcjsgLyogZmxhZyBhYm91dCBhbiBleHRlcm5h bCBtZW1vcnkgaXMgdXNlZCAqLworCWl0ZW1fdCAqbTsJCSAgIC8qIGl0ZW1zIChtZW1iZXJz KSAqLworfSB2ZWN0X3Q7CisKK3R5cGVkZWYgdmVjdF90IHVuaXFzb3J0dmVjdF90OworCisj ZGVmaW5lIHZlY3RfaW5pdAkJICAgQ3BwQ29uY2F0VHJpcGxlMih2ZWN0XywgVkVDVF9NQVJL RVIsIF9pbml0KQorI2RlZmluZSB2ZWN0X2ZpbGwJCSAgIENwcENvbmNhdFRyaXBsZTIodmVj dF8sIFZFQ1RfTUFSS0VSLCBfZmlsbCkKKyNkZWZpbmUgdmVjdF9yZXNlcnZlCSAgIENwcENv bmNhdFRyaXBsZTIodmVjdF8sIFZFQ1RfTUFSS0VSLCBfcmVzZXJ2ZSkKKyNkZWZpbmUgdmVj dF9hcHBlbmQJCSAgIENwcENvbmNhdFRyaXBsZTIodmVjdF8sIFZFQ1RfTUFSS0VSLCBfYXBw ZW5kKQorI2RlZmluZSB2ZWN0X3ByaW50CQkgICBDcHBDb25jYXRUcmlwbGUyKHZlY3RfLCBW RUNUX01BUktFUiwgX3ByaW50KQorI2RlZmluZSB2ZWN0X2NvbXBhcmUJICAgQ3BwQ29uY2F0 VHJpcGxlMih2ZWN0XywgVkVDVF9NQVJLRVIsIF9jb21wYXJlKQorI2RlZmluZSB2ZWN0X2lu c2VydAkJICAgQ3BwQ29uY2F0VHJpcGxlMih2ZWN0XywgVkVDVF9NQVJLRVIsIF9pbnNlcnQp CisjZGVmaW5lIHZlY3RfY2xlYXIJCSAgIENwcENvbmNhdFRyaXBsZTIodmVjdF8sIFZFQ1Rf TUFSS0VSLCBfY2xlYXIpCisKKyNkZWZpbmUgdXN2X2luc2VydCBDcHBDb25jYXRUcmlwbGUy KHVzdl8sIFZFQ1RfTUFSS0VSLCBfaW5zZXJ0KQorI2RlZmluZSB1c3Zfc2VhcmNoIENwcENv bmNhdFRyaXBsZTIodXN2XywgVkVDVF9NQVJLRVIsIF9zZWFyY2gpCisKKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKKyAqIEVuZCBvZiBSZXVzYWJsZSBDb2RlCisgKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCisKKy8qCisgKiBEb24ndCBmb3JnZXQgdG8gaW5jbHVkZQorICogCQkj aW5jbHVkZSAidmVjdF90ZW1wbF91bmRlZi5oIgorICogaW4geW91ciBmaWxlIHRoYXQgdXNl cyB0aGlzIGhlYWRlcgorICoKKyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGliL3Zl Y3RfdGVtcGxfdW5kZWYuaCBiL3NyYy9pbmNsdWRlL2xpYi92ZWN0X3RlbXBsX3VuZGVmLmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjU5YjY5ZjE4Yjk5Ci0t LSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvbGliL3ZlY3RfdGVtcGxfdW5kZWYuaApA QCAtMCwwICsxLDI1IEBACisvKgorICogRmlsZTogdmVjdF91bmRlZi5oCisgKi8KKworI3Vu ZGVmIHZlY3RfdAorI3VuZGVmIHVuaXFzb3J0dmVjdF90CisjdW5kZWYgaXRlbV90CisKKyN1 bmRlZiBWRUNUX0lURU1fVFlQRQorI3VuZGVmIFZFQ1RfTUFSS0VSCisjdW5kZWYgVkVDVF9D cHBDb25jYXRUcmlwbGUyCisKKyN1bmRlZiB2ZWN0X2luaXQKKyN1bmRlZiB2ZWN0X2ZpbGwK KyN1bmRlZiB2ZWN0X3Jlc2VydmUKKyN1bmRlZiB2ZWN0X2FwcGVuZAorI3VuZGVmIHZlY3Rf cHJpbnQKKyN1bmRlZiB2ZWN0X2NvbXBhcmUKKyN1bmRlZiB2ZWN0X2luc2VydAorI3VuZGVm IHZlY3RfY2xlYXIKKworI3VuZGVmIHVzdl9pbnNlcnQKKyN1bmRlZiB1c3Zfc2VhcmNoCisK KyN1bmRlZiBWRUNUX1BSSV9GT1JNQVRfU1BFQ0lGSUVSClwgTm8gbmV3bGluZSBhdCBlbmQg b2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGliL3ZlY3RfdTE2LmggYi9zcmMv aW5jbHVkZS9saWIvdmVjdF91MTYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uNDUzY2ViNmI0MTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9s aWIvdmVjdF91MTYuaApAQCAtMCwwICsxLDExIEBACisvKgorICogRmlsZTogdmVjdF91MTYu aAorICovCisKKyNpZm5kZWYgX1ZFQ1RfVTE2X0hfCisjZGVmaW5lIF9WRUNUX1UxNl9IXwor CisjaW5jbHVkZSAidmVjdF91MTZfY29uZmlnLmgiCisjaW5jbHVkZSAidmVjdF90ZW1wbC5o IgorCisjZW5kaWYgLy9fVkVDVF9VMTZfSF8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2xp Yi92ZWN0X3UxNl9jb25maWcuaCBiL3NyYy9pbmNsdWRlL2xpYi92ZWN0X3UxNl9jb25maWcu aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTNhOTMyODRlOGYK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9saWIvdmVjdF91MTZfY29uZmlnLmgK QEAgLTAsMCArMSwxMCBAQAorLyoKKyAqIEZpbGU6IHZlY3RfdTE2X2NvbmZpZy5oCisgKi8K KworI2RlZmluZSBWRUNUX0lURU1fVFlQRQkJCSAgIHVpbnQxNl90CisjZGVmaW5lIFZFQ1Rf SVRFTV9GT1JNQVRfU1BFQ0lGSUVSIFBSSXUxNgorI2RlZmluZSBWRUNUX01BUktFUgkJCQkg ICB1MTYKKyNkZWZpbmUgVkVDVF9NRU1BTExPQ1NURVAJCSAgIDUKKyNkZWZpbmUgVkVDVF9N QUxMT0MJCQkJICAgbWFsbG9jCisjZGVmaW5lIFZFQ1RfRlJFRQkJCQkgICBmcmVlCmRpZmYg LS1naXQgYS9zcmMvdG9vbHMvcGdpbmNsdWRlL2hlYWRlcnNjaGVjayBiL3NyYy90b29scy9w Z2luY2x1ZGUvaGVhZGVyc2NoZWNrCmluZGV4IDc4NWQ2Zjg2N2FkLi5lOTc5ZDBhNzQzNiAx MDA3NTUKLS0tIGEvc3JjL3Rvb2xzL3BnaW5jbHVkZS9oZWFkZXJzY2hlY2sKKysrIGIvc3Jj L3Rvb2xzL3BnaW5jbHVkZS9oZWFkZXJzY2hlY2sKQEAgLTE1OCw2ICsxNTgsMTUgQEAgZG8K IAogCXRlc3QgIiRmIiA9IHNyYy9pbnRlcmZhY2VzL2xpYnBxL29hdXRoLWRlYnVnLmggJiYg Y29udGludWUKIAorCSMgVGhlc2UgZmlsZXMgYXJlIHRlbXBsYXRlcyBhbmQgY2Fubm90IGJl IGluY2x1ZGVkIHN0YW5kYWxvbmUKKwl0ZXN0ICIkZiIgPSBzcmMvaW5jbHVkZS9saWIvYml0 cGFja190ZW1wbC5oICYmIGNvbnRpbnVlCisJdGVzdCAiJGYiID0gc3JjL2luY2x1ZGUvbGli L2JpdHBhY2tfdGVtcGxfc3RhcGxlLmggJiYgY29udGludWUKKwl0ZXN0ICIkZiIgPSBzcmMv aW5jbHVkZS9saWIvYml0cGFja190ZW1wbF91bmRlZi5oICYmIGNvbnRpbnVlCisKKwl0ZXN0 ICIkZiIgPSBzcmMvaW5jbHVkZS9saWIvdmVjdF90ZW1wbC5oICYmIGNvbnRpbnVlCisJdGVz dCAiJGYiID0gc3JjL2luY2x1ZGUvbGliL3ZlY3RfdGVtcGxfc3RhcGxlLmggJiYgY29udGlu dWUKKwl0ZXN0ICIkZiIgPSBzcmMvaW5jbHVkZS9saWIvdmVjdF90ZW1wbF91bmRlZi5oICYm IGNvbnRpbnVlCisKIAkjIFdlIGNhbid0IG1ha2UgdGhlc2UgQmlzb24gb3V0cHV0IGZpbGVz IGNvbXBpbGFibGUgc3RhbmRhbG9uZQogCSMgd2l0aG91dCB1c2luZyAiJWNvZGUgcmVxdWly ZSIsIHdoaWNoIG9sZCBCaXNvbiB2ZXJzaW9ucyBsYWNrLgogCSMgcGFyc2VyL2dyYW0uaCB3 aWxsIGJlIGluY2x1ZGVkIGJ5IHBhcnNlci9ncmFtcGFyc2UuaCBhbnl3YXkuCi0tIAoyLjUz LjAKCg== --------------lw8OY0FkiJnrHVFMGb70Aea3 Content-Type: text/x-patch; charset=UTF-8; name="v12-0002-Tests-of-vect-and-uniqsortvect-containers-and-of.patch" Content-Disposition: attachment; filename*0="v12-0002-Tests-of-vect-and-uniqsortvect-containers-and-of.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAxNmNjYzMzMGViMzI5YjUyYjA4NWJkMzRkYTYyZWI3NzljYTFmYWNhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBFdmdlbnkgVm9yb3BhZXYgPGV2b3JvcEBnbWFpbC5j b20+CkRhdGU6IE1vbiwgMTMgQXByIDIwMjYgMjA6MTg6NDIgKzA4MDAKU3ViamVjdDogW1BB VENIIHYxMiAyLzVdIFRlc3RzIG9mIHZlY3QgYW5kIHVuaXFzb3J0dmVjdCBjb250YWluZXJz IGFuZCBvZgogYml0cGFjayBhbGdvcml0aG1zLgoKVW5pdCB0ZXN0cyBmb3IgdGhlIHZlY3Qg YW5kIHRoZSBiaXRwYWNrIHVuaXRzIGFyZSBpbWxlbWVudGVkLiBVbml0IHRlc3RzCmFyZSBp bXBsZW1lbnRlZCBhcyBiaW5hcnkgYXBwbGljYXRpb25zIHdyaXR0ZW4gaW4gQyBsYW5ndWFn ZSAoRUxGCmV4ZWN1dGFibGVzKSB0aGF0IHN1cHBvcnQgdGhlIFRBUCBwcm90b2NvbCBhbmQg YXJlIHJ1biB1c2luZyB0aGUgUHJvdmUKdXRpbGl0eS4KClRoZSBuZXcgTWFrZWZpbGUgdGFy Z2V0LCBjaGVjay11bml0LCBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIFBvc3RncmVTUUwKYnVp bGQgc3lzdGVtIGFuZCBhbGxvd3MgcnVubmluZyB0aGUgdW5pdCB0ZXN0cyB1c2luZyB0aGUg Y29tbWFuZCAnbWFrZQpjaGVjay11bml0Jy4KCkF1dGhvcjogRXZnZW55IFZvcm9wYWV2IDxl dmdlbnkudm9yb3BhZXZAdGFudG9ybGFicy5jb20+IDxldm9yb3BAZ21haWwuY29tPgpSZXZp ZXdlZCBieTogQW5kcmV5IEJvcm9kaW4gPHg0bW1tQHlhbmRleC10ZWFtLnJ1PgotLS0KIEdO VW1ha2VmaWxlLmluICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL01ha2Vm aWxlLmdsb2JhbC5pbiAgICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL3Rlc3QvTWFrZWZp bGUgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9kZm9yLy5naXRpZ25v cmUgICAgICAgICAgICAgIHwgICAzICsKIHNyYy90ZXN0L2Rmb3IvTWFrZWZpbGUgICAgICAg ICAgICAgICAgfCAgNTQgKysrKwogc3JjL3Rlc3QvZGZvci9tZXNvbi5idWlsZCAgICAgICAg ICAgICB8ICA2MiArKysrCiBzcmMvdGVzdC9kZm9yL3Rlc3QuaCAgICAgICAgICAgICAgICAg IHwgIDMxICsrCiBzcmMvdGVzdC9kZm9yL3Rlc3RfYml0cGFja191MTYuYyAgICAgIHwgMzU3 ICsrKysrKysrKysrKysrKysrKysrKysKIHNyYy90ZXN0L2Rmb3IvdGVzdF91bmlxc29ydHZl Y3RfdTE2LmMgfCAyNjMgKysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvZGZvci90ZXN0X3Zl Y3RfdTE2LmMgICAgICAgICB8IDE2OCArKysrKysrKysrCiBzcmMvdGVzdC9saWJ0YXAvLmdp dGlnbm9yZSAgICAgICAgICAgIHwgIDEzICsKIHNyYy90ZXN0L2xpYnRhcC8udHJhdmlzLnlt bCAgICAgICAgICAgfCAgMTMgKwogc3JjL3Rlc3QvbGlidGFwL0NPUFlJTkcgICAgICAgICAg ICAgICB8IDE2NSArKysrKysrKysrCiBzcmMvdGVzdC9saWJ0YXAvSU5TVEFMTCAgICAgICAg ICAgICAgIHwgIDQxICsrKwogc3JjL3Rlc3QvbGlidGFwL01ha2VmaWxlICAgICAgICAgICAg ICB8ICA3MyArKysrKwogc3JjL3Rlc3QvbGlidGFwL01ha2VmaWxlLndpbiAgICAgICAgICB8 ICAzNyArKysKIHNyYy90ZXN0L2xpYnRhcC9SRUFETUUubWQgICAgICAgICAgICAgfCAyNjgg KysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvbGlidGFwL3RhcC5jICAgICAgICAgICAgICAg ICB8IDQyMSArKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvbGlidGFwL3Rh cC5oICAgICAgICAgICAgICAgICB8IDExNSArKysrKysrCiBzcmMvdGVzdC9tZXNvbi5idWls ZCAgICAgICAgICAgICAgICAgIHwgICAxICsKIDIwIGZpbGVzIGNoYW5nZWQsIDIwODggaW5z ZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0 L2Rmb3IvLmdpdGlnbm9yZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L2Rmb3IvTWFr ZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9kZm9yL21lc29uLmJ1aWxkCiBj cmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvZGZvci90ZXN0LmgKIGNyZWF0ZSBtb2RlIDEw MDY0NCBzcmMvdGVzdC9kZm9yL3Rlc3RfYml0cGFja191MTYuYwogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy90ZXN0L2Rmb3IvdGVzdF91bmlxc29ydHZlY3RfdTE2LmMKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvdGVzdC9kZm9yL3Rlc3RfdmVjdF91MTYuYwogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy90ZXN0L2xpYnRhcC8uZ2l0aWdub3JlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Jj L3Rlc3QvbGlidGFwLy50cmF2aXMueW1sCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qv bGlidGFwL0NPUFlJTkcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9saWJ0YXAvSU5T VEFMTAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L2xpYnRhcC9NYWtlZmlsZQogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L2xpYnRhcC9NYWtlZmlsZS53aW4KIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvdGVzdC9saWJ0YXAvUkVBRE1FLm1kCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL3Rlc3QvbGlidGFwL3RhcC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qv bGlidGFwL3RhcC5oCgpkaWZmIC0tZ2l0IGEvR05VbWFrZWZpbGUuaW4gYi9HTlVtYWtlZmls ZS5pbgppbmRleCBjZjZlNzU5NDg2ZS4uM2Q5YTQyZDZhZDQgMTAwNjQ0Ci0tLSBhL0dOVW1h a2VmaWxlLmluCisrKyBiL0dOVW1ha2VmaWxlLmluCkBAIC02OSw2ICs2OSw3IEBAIGNoZWNr IGNoZWNrLXRlc3RzIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stcGFyYWxsZWwgaW5zdGFs bGNoZWNrLXRlc3RzOiBzdWJtYWtlCiAJJChNQUtFKSAtQyBzcmMvdGVzdC9yZWdyZXNzICRA CiAKICQoY2FsbCByZWN1cnNlLGNoZWNrLXdvcmxkLHNyYy90ZXN0IHNyYy9wbCBzcmMvaW50 ZXJmYWNlcyBjb250cmliIHNyYy9iaW4gc3JjL3Rvb2xzL3BnX2JzZF9pbmRlbnQsY2hlY2sp CiskKGNhbGwgcmVjdXJzZSxjaGVjay11bml0LHNyYy90ZXN0LGNoZWNrLXVuaXQpCiAkKGNh bGwgcmVjdXJzZSxjaGVja3ByZXAsICBzcmMvdGVzdCBzcmMvcGwgc3JjL2ludGVyZmFjZXMg Y29udHJpYiBzcmMvYmluKQogCiAkKGNhbGwgcmVjdXJzZSxpbnN0YWxsY2hlY2std29ybGQs c3JjL3Rlc3Qgc3JjL3BsIHNyYy9pbnRlcmZhY2VzIGNvbnRyaWIgc3JjL2JpbixpbnN0YWxs Y2hlY2spCmRpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuZ2xvYmFsLmluIGIvc3JjL01ha2Vm aWxlLmdsb2JhbC5pbgppbmRleCBjZWYxYWQ3Zjg3ZC4uMGI2YTIyYmUxOGIgMTAwNjQ0Ci0t LSBhL3NyYy9NYWtlZmlsZS5nbG9iYWwuaW4KKysrIGIvc3JjL01ha2VmaWxlLmdsb2JhbC5p bgpAQCAtMTksNyArMTksNyBAQAogIwogIyBNZXRhIGNvbmZpZ3VyYXRpb24KIAotc3RhbmRh cmRfdGFyZ2V0cyA9IGFsbCBpbnN0YWxsIGluc3RhbGxkaXJzIHVuaW5zdGFsbCBjbGVhbiBk aXN0Y2xlYW4gY292ZXJhZ2UgY2hlY2sgY2hlY2twcmVwIGluc3RhbGxjaGVjayBpbml0LXBv IHVwZGF0ZS1wbworc3RhbmRhcmRfdGFyZ2V0cyA9IGFsbCBpbnN0YWxsIGluc3RhbGxkaXJz IHVuaW5zdGFsbCBjbGVhbiBkaXN0Y2xlYW4gY292ZXJhZ2UgY2hlY2sgY2hlY2twcmVwIGlu c3RhbGxjaGVjayBjaGVjay11bml0IGluaXQtcG8gdXBkYXRlLXBvCiAjIHRoZXNlIHRhcmdl dHMgc2hvdWxkIHJlY3Vyc2UgZXZlbiBpbnRvIHN1YmRpcmVjdG9yaWVzIG5vdCBiZWluZyBi dWlsdDoKIHN0YW5kYXJkX2Fsd2F5c190YXJnZXRzID0gY2xlYW4gZGlzdGNsZWFuCiAKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L01ha2VmaWxlIGIvc3JjL3Rlc3QvTWFrZWZpbGUKaW5kZXgg M2ViMGEwNmFiYjQuLmFiYThkYjFmNDgzIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9NYWtlZmls ZQorKysgYi9zcmMvdGVzdC9NYWtlZmlsZQpAQCAtMTQsNiArMTQsNyBAQCBpbmNsdWRlICQo dG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCiAKIFNVQkRJUlMgPSBcCiAJYXV0 aGVudGljYXRpb24gXAorCWRmb3IgXAogCWlzb2xhdGlvbiBcCiAJbW9kdWxlcyBcCiAJcGVy bCBcCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9kZm9yLy5naXRpZ25vcmUgYi9zcmMvdGVzdC9k Zm9yLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LjBkNzdhNTEyMTZiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvZGZvci8uZ2l0aWdu b3JlCkBAIC0wLDAgKzEsMyBAQAordGVzdF9iaXRwYWNrX3UxNgordGVzdF91bmlxc29ydHZl Y3RfdTE2Cit0ZXN0X3ZlY3RfdTE2CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9kZm9yL01ha2Vm aWxlIGIvc3JjL3Rlc3QvZGZvci9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uNGZjOWY0YmMxYmEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVz dC9kZm9yL01ha2VmaWxlCkBAIC0wLDAgKzEsNTQgQEAKKyMtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisjIEZpbGU6IHNyYy90ZXN0L2Rmb3IvTWFrZWZpbGUKKyMtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisKK3N1YmRpciA9IHNyYy90ZXN0L2Rmb3IKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uCitk Zm9yX2RpciA6PSAkKHRvcF9idWlsZGRpcikvc3JjL2JhY2tlbmQvbGliCisKK2luY2x1ZGUg JChkZm9yX2RpcikvTWFrZWZpbGUuZGZvcgorCisjIEVuc3VyZSBkZXBlbmRlbmN5IHRyYWNr aW5nIHdvcmtzCitPQkpTICs9ICQoT0JKU19ERk9SKQorCitpbmNsdWRlICQodG9wX2J1aWxk ZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCisKKyMgVGhpcyBmaXhlcyBhIHByb2JsZW0gaW4g c29tZSBDSSBqb2JzCitERVBESVIgPz0gIi5kZXBzIgorCisjIE9iamVjdCBmaWxlcyBvZiB2 ZWN0LCBiaXRwYWNrIGFuZCBkZm9yIHVzZWQgYnkgdGhlc2UgdW5pdC10ZXN0cyBhcmUgaW4g dGhlIHNhbWUKKyMgZGlyZWN0b3J5IGFzIHRoaXMgTWFrZWZpbGUuIFRlc3RzIGRvbid0IHVz ZSBvbmVzIGZyb20gc3JjL2JhY2tlbmQvbGliIGFuZCBjb21waWxlCisjIGRpZmZlcmVudCBv bmVzIGZvciB0aGVtc2VsdmVzLgorJChpbmZvIFVzZSBPQkpTX0RGT1I9JChPQkpTX0RGT1Ip IGZyb20gY3VycmVudCBkaXJlY3RvcnkgJChzdWJkaXIpLiBcCisgICAgICAgVGhleSBhcmUg YnVpbHQgb24gc291cmNlcyBmcm9tICQoZGZvcl9kaXIpKQorCiskKE9CSlNfREZPUik6ICUu bzogJChkZm9yX2RpcikvJS5jCisJQGlmIHRlc3QgISAtZCAkKERFUERJUik7IHRoZW4gbWtk aXIgLXAgJChERVBESVIpOyBmaQorCSQoQ0MpICQoQ0ZMQUdTKSAkKENQUEZMQUdTKSAtREZS T05URU5EIFwKKwkJLWMgJDwgXAorCQktTU1EIC1NUCAtTUYgJChERVBESVIpLyQobm90ZGly ICQ8Oi5jPS5QbykgXAorCQktbyAkQAorCitMSUJUQVBfT0JKUyA9ICQodG9wX2J1aWxkZGly KS9zcmMvdGVzdC9saWJ0YXAvdGFwLm8KKworVEVTVFM9IHRlc3RfdmVjdF91MTYgXAorICAg ICAgIHRlc3RfdW5pcXNvcnR2ZWN0X3UxNiBcCisgICAgICAgdGVzdF9iaXRwYWNrX3UxNgor CiskKFRFU1RTOiU9JS5vKTogQ1BQRkxBR1MgKz0gLUkkKHRvcF9idWlsZGRpcikvc3JjL3Rl c3QgLURGUk9OVEVORAorCithbGw6ICQoVEVTVFMpCisKKyQoVEVTVFMpOiAlOiAlLm8gJChM SUJUQVBfT0JKUykgJChPQkpTX0RGT1IpCisJJChDQykgJChDRkxBR1MpICQoQ1BQRkxBR1Mp ICReICQoTERGTEFHUykgJChMSUJTKSAtbyAkQCQoWCkKKworY2hlY2stdW5pdDogJChURVNU UykKKwllY2hvICIjICsrKyBVbml0IHRlc3RzIGluICQoc3ViZGlyKSArKysiICYmIFwKKwlj ZCAkKHRvcF9idWlsZGRpcikvJChzdWJkaXIpICYmIFwKKwkgICAkKFBST1ZFKSAkKFBST1ZF X0ZMQUdTKSBcCisJICAgIC12ICQoYWRkcHJlZml4IC4vLCQoaWYgJChQUk9WRV9URVNUUyks ICQoUFJPVkVfVEVTVFMpLCAkKFRFU1RTKSkpCisKK2NoZWNrOiBjaGVjay11bml0CisKK2Ns ZWFuIGRpc3RjbGVhbjoKKwlybSAtcmYgJChURVNUUykgKi5vCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9kZm9yL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvZGZvci9tZXNvbi5idWlsZApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uY2U3NjJjNTI0MzAKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvdGVzdC9kZm9yL21lc29uLmJ1aWxkCkBAIC0wLDAgKzEsNjIg QEAKK2Rmb3JfZGlyID0gam9pbl9wYXRocyhtZXNvbi5wcm9qZWN0X3NvdXJjZV9yb290KCks ICdzcmMvYmFja2VuZC9saWInKQorCisjIE9iamVjdCBmaWxlcyBvZiB2ZWN0LCBiaXRwYWNr IGFuZCBkZm9yIHVzZWQgYnkgdGhlc2UgdW5pdC10ZXN0cyBhcmUgaW4gdGhlIHNhbWUKKyMg ZGlyZWN0b3J5IGFzIHRoaXMgbWVzb24uYnVpbGQuIFRlc3RzIGRvbid0IHVzZSBvbmVzIGZy b20gc3JjL2JhY2tlbmQvbGliIGFuZAorIyBjb21waWxlIGRpZmZlcmVudCBvbmVzIGZvciB0 aGVtc2VsdmVzLiBJbiBNZXNvbi9OaW5qYSBidWlsZCBzeXN0ZW0gd2UgdW5pdGUKKyMgdGhl bSBpbnRvIGEgc3RhdGljIGxpYnJhcnkuCisKK2Rmb3Jfc291cmNlcyA9IGZpbGVzKAorICBq b2luX3BhdGhzKGRmb3JfZGlyLCAndmVjdF91MTYuYycpLAorICBqb2luX3BhdGhzKGRmb3Jf ZGlyLCAnYml0cGFja191MTYuYycpLAorKQorCitkZm9yX3Rlc3RfbGliID0gc3RhdGljX2xp YnJhcnkoCisgICdkZm9yX3Rlc3RfbGliJywKKyAgZGZvcl9zb3VyY2VzLAorICBpbmNsdWRl X2RpcmVjdG9yaWVzOiBbCisgICAgaW5jbHVkZV9kaXJlY3RvcmllcygnLi4vLi4vLi4nKSwg IyB0b3BfYnVpbGRkaXIKKyAgICBpbmNsdWRlX2RpcmVjdG9yaWVzKCcuLi8nKSwgICAgICAj IHNyYy90ZXN0CisgICAgcG9zdGdyZXNfaW5jLCAgICAgICAgICAgICAgICAgICAgIyBzcmMv aW5jbHVkZSBoZXJlCisgIF0sCisgIGNfYXJnczogWyctREZST05URU5EJ10sCispCisKKyMg V2UgYWxzbyBidWlsZCBsaWJ0YXAgYXMgYSBzdGF0aWMgbGlicmFyeQorCitsaWJ0YXAgPSBz dGF0aWNfbGlicmFyeSgKKyAgJ3RhcCcsCisgICcuLi8uLi90ZXN0L2xpYnRhcC90YXAuYycs CisgIGluY2x1ZGVfZGlyZWN0b3JpZXM6CisgICAgaW5jbHVkZV9kaXJlY3RvcmllcygnLi4v Li4vLi4nKSwgIyB0b3BfYnVpbGRkaXIKKykKKworIyBFYWNoIHRlc3QgaXMgYW4gRUxGIGV4 ZWN1dGFibGUKKwordGVzdF9uYW1lcyA9IFsKKyAgJ3Rlc3RfdmVjdF91MTYnLAorICAndGVz dF91bmlxc29ydHZlY3RfdTE2JywKKyAgJ3Rlc3RfYml0cGFja191MTYnLAorXQorCitmb3Jl YWNoIHQgOiB0ZXN0X25hbWVzCisgIGV4ZSA9IGV4ZWN1dGFibGUoCisgICAgdCwKKyAgICB0 ICsgJy5jJywKKyAgICBsaW5rX3dpdGg6IFsKKyAgICAgIGRmb3JfdGVzdF9saWIsCisgICAg ICBsaWJ0YXAsCisgICAgICBjb21tb25fc3RhdGljLCAjIFByb3ZpZGVzIHBnX3ByaW50ZiBh bmQgb3RoZXIgY29tbW9uIHV0aWxpdGllcworICAgICAgcGdwb3J0X3N0YXRpYywgICAgIyBQ cm92aWRlcyBPUy1wb3J0YWJpbGl0eSBmdW5jdGlvbnMKKyAgICBdLAorCWRlcGVuZGVuY2ll czogW29zX2RlcHMsIGxpYmludGxdLAorICAgIGluY2x1ZGVfZGlyZWN0b3JpZXM6IFsKKyAg ICAgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJy4uLy4uLy4uJyksICMgdG9wX2J1aWxkZGlyCisg ICAgICBpbmNsdWRlX2RpcmVjdG9yaWVzKCcuLi8nKSwgICAgICAjIHNyYy90ZXN0CisgICAg ICBwb3N0Z3Jlc19pbmMsICAgICAgICAgICAgICAgICAgICAjIHNyYy9pbmNsdWRlIGhlcmUK KyAgICBdLAorICAgICMgQmFja2VuZCBjb2RlIG9mdGVuIHJlcXVpcmVzIHRoZXNlIGFyZ3Vt ZW50cyB0byBpZGVudGlmeSBhcyBiYWNrZW5kCisgICAgY19hcmdzOiBbJy1ERlJPTlRFTkQn XSwKKyAgKQorCisgIHRlc3QodCwgZXhlLCBzdWl0ZTogJ2Rmb3InKQorZW5kZm9yZWFjaApk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvZGZvci90ZXN0LmggYi9zcmMvdGVzdC9kZm9yL3Rlc3Qu aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjZjNTRhYWQ5NWYK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9kZm9yL3Rlc3QuaApAQCAtMCwwICsxLDMx IEBACisKKy8qCisgKiB0ZXN0LmgKKyAqLworI2lmbmRlZiBfVEVTVF9IXworI2RlZmluZSBf VEVTVF9IXworCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgor CitzdGF0aWMgaW5saW5lIHZvaWQKK3Rlc3RfcHJpbnRfdThfYXJyYXkoc2l6ZV90IGNudCwg dWludDhfdCBhcnJbXSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlwcmludGYoIiVzKGhleCk6 IHsgIiwgbmFtZSk7CisJZm9yIChzaXplX3QgaiA9IDA7IGogPCBjbnQgLSAxOyBqKyspCisJ CXByaW50ZigiJTAyIiBQUkl4OCAiLCAiLCBhcnJbal0pOworCisJcHJpbnRmKCIlMDIiIFBS SXg4ICIgfVxuIiwgYXJyW2NudCAtIDFdKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit0 ZXN0X3ByaW50X3UxNl9hcnJheShzaXplX3QgY250LCB1aW50MTZfdCBhcnJbXSwgY29uc3Qg Y2hhciAqbmFtZSkKK3sKKwlwcmludGYoIiVzKGhleCk6IHsgIiwgbmFtZSk7CisJZm9yIChz aXplX3QgaiA9IDA7IGogPCBjbnQgLSAxOyBqKyspCisJCXByaW50ZigiJTA0IiBQUkl4MTYg IiwgIiwgYXJyW2pdKTsKKworCXByaW50ZigiJTA0IiBQUkl4MTYgIn1cbiIsIGFycltjbnQg LSAxXSk7Cit9CisKKyNlbmRpZiAvKiBfVEVTVF9IXyAqLwpcIE5vIG5ld2xpbmUgYXQgZW5k IG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2Rmb3IvdGVzdF9iaXRwYWNrX3UxNi5j IGIvc3JjL3Rlc3QvZGZvci90ZXN0X2JpdHBhY2tfdTE2LmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLmRhODRiYjJmMjJlCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL3Rlc3QvZGZvci90ZXN0X2JpdHBhY2tfdTE2LmMKQEAgLTAsMCArMSwzNTcgQEAKKy8q CisgKiB0ZXN0X2JpdHBhY2suYworICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1 ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibGliL2JpdHBhY2tfdTE2LmgiCisjaW5jbHVk ZSAibGliL3ZlY3RfdTE2LmgiCisjaW5jbHVkZSAibGlidGFwL3RhcC5oIgorCitpbnQKK21h aW4odm9pZCkKK3sKKwlwbGFuKDE5NSk7CisJcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09XG4iKTsKKwlwcmludGYoIlRlc3QgTUFTSyBBTkQgV0lE VEggQ0FMQ1VMQVRJT05cbiIpOworCXsKKwkJY21wX29rKDEsICI9PSIsICh1aW50MTZfdCl3 aWR0aF91MTZfZnJvbV92YWwoMHgwMCksCisJCQkgICAiV2lkdGggb2YgMDAgaXMgZXF1YWwg dG8gMSBiaXQuIik7CisJCWNtcF9vaygyLCAiPT0iLCAodWludDE2X3Qpd2lkdGhfdTE2X2Zy b21fdmFsKDB4MDIpLAorCQkJICAgIldpZHRoIG9mIDAyIGlzIGVxdWFsIHRvIDIgYml0cy4i KTsKKwkJY21wX29rKDIsICI9PSIsICh1aW50MTZfdCl3aWR0aF91MTZfZnJvbV92YWwoMHgw MiksCisJCQkgICAiV2lkdGggb2YgMDIgaXMgZXF1YWwgdG8gMiBiaXRzLiIpOworCQljbXBf b2soMiwgIj09IiwgKHVpbnQxNl90KXdpZHRoX3UxNl9mcm9tX3ZhbCgweDAzKSwKKwkJCSAg ICJXaWR0aCBvZiAwMyBpcyBlcXVhbCB0byAyIGJpdHMuIik7CisJCWNtcF9vaygzLCAiPT0i LCAodWludDE2X3Qpd2lkdGhfdTE2X2Zyb21fdmFsKDB4MDQpLAorCQkJICAgIldpZHRoIG9m IDA0IGlzIGVxdWFsIHRvIDMgYml0cy4iKTsKKwkJY21wX29rKDMsICI9PSIsICh1aW50MTZf dCl3aWR0aF91MTZfZnJvbV92YWwoMHgwNSksCisJCQkgICAiV2lkdGggb2YgMDUgaXMgZXF1 YWwgdG8gMyBiaXRzLiIpOworCQljbXBfb2soNCwgIj09IiwgKHVpbnQxNl90KXdpZHRoX3Ux Nl9mcm9tX3ZhbCgweDA4KSwKKwkJCSAgICJXaWR0aCBvZiAwOCBpcyBlcXVhbCB0byA0IGJp dHMuIik7CisJCWNtcF9vayg0LCAiPT0iLCAodWludDE2X3Qpd2lkdGhfdTE2X2Zyb21fdmFs KDB4MEEpLAorCQkJICAgIldpZHRoIG9mIDEwIGlzIGVxdWFsIHRvIDQgYml0cy4iKTsKKwkJ Y21wX29rKDQsICI9PSIsICh1aW50MTZfdCl3aWR0aF91MTZfZnJvbV92YWwoMHgwRiksCisJ CQkgICAiV2lkdGggb2YgMTUgaXMgZXF1YWwgdG8gNCBiaXRzLiIpOworCQljbXBfb2soNSwg Ij09IiwgKHVpbnQxNl90KXdpZHRoX3UxNl9mcm9tX3ZhbCgweDEwKSwKKwkJCSAgICJXaWR0 aCBvZiAxNiBpcyBlcXVhbCB0byA1IGJpdHMuIik7CisJCWNtcF9vayg1LCAiPT0iLCAodWlu dDE2X3Qpd2lkdGhfdTE2X2Zyb21fdmFsKDB4MUYpLAorCQkJICAgIldpZHRoIG9mIDMxIGlz IGVxdWFsIHRvIDUgYml0cy4iKTsKKwkJY21wX29rKDYsICI9PSIsICh1aW50MTZfdCl3aWR0 aF91MTZfZnJvbV92YWwoMHgyMCksCisJCQkgICAiV2lkdGggb2YgMzIgaXMgZXF1YWwgdG8g NiBiaXRzLiIpOworCQljbXBfb2soNywgIj09IiwgKHVpbnQxNl90KXdpZHRoX3UxNl9mcm9t X3ZhbCgweDQwKSwKKwkJCSAgICJXaWR0aCBvZiA2NCBpcyBlcXVhbCB0byA3IGJpdHMuIik7 CisJCWNtcF9vayg4LCAiPT0iLCAodWludDE2X3Qpd2lkdGhfdTE2X2Zyb21fdmFsKDB4ODAp LAorCQkJICAgIldpZHRoIG9mIDEyOCBpcyBlcXVhbCB0byA4IGJpdHMuIik7CisJCWNtcF9v aygxMywgIj09IiwgKHVpbnQxNl90KXdpZHRoX3UxNl9mcm9tX3ZhbCgweDEwMDApLAorCQkJ ICAgIldpZHRoIG9mIDB4MDEwMDAgaXMgZXF1YWwgdG8gMTMgYml0cy4iKTsKKwkJY21wX29r KDE2LCAiPT0iLCAodWludDE2X3Qpd2lkdGhfdTE2X2Zyb21fdmFsKDB4OEFCQyksCisJCQkg ICAiV2lkdGggb2YgMHgwOEFCQyBpcyBlcXVhbCB0byAxNSBiaXRzLiIpOworCisJCWNtcF9v aygweDEsICI9PSIsICh1aW50MTZfdCl3aWR0aF91MTZfdG9fbWFzaygxKSwKKwkJCSAgICJN YXNrIGZyb20gd2lkdGggMSBpcyAwMDAwMDAwMShiaW4pLiIpOworCQljbXBfb2soMHgzLCAi PT0iLCAodWludDE2X3Qpd2lkdGhfdTE2X3RvX21hc2soMiksCisJCQkgICAiTWFzayBmcm9t IHdpZHRoIDIgaXMgMDAwMDAwMTEoYmluKS4iKTsKKwkJY21wX29rKDB4NywgIj09IiwgKHVp bnQxNl90KXdpZHRoX3UxNl90b19tYXNrKDMpLAorCQkJICAgIk1hc2sgZnJvbSB3aWR0aCAz IGlzIDAwMDAwMTExKGJpbikuIik7CisJCWNtcF9vaygweDNGRiwgIj09IiwgKHVpbnQxNl90 KXdpZHRoX3UxNl90b19tYXNrKDEwKSwKKwkJCSAgICJNYXNrIGZyb20gd2lkdGggMTAgaXMg MHgzRkYoYmluKS4iKTsKKwkJY21wX29rKDB4N0ZGRiwgIj09IiwgKHVpbnQxNl90KXdpZHRo X3UxNl90b19tYXNrKDE1KSwKKwkJCSAgICJNYXNrIGZyb20gd2lkdGggMTUgaXMgMHg3RkZG KGJpbikuIik7CisJCWNtcF9vaygweEZGRkYsICI9PSIsICh1aW50MTZfdCl3aWR0aF91MTZf dG9fbWFzaygxNiksCisJCQkgICAiTWFzayBmcm9tIHdpZHRoIDE2IGlzIDB4RkZGRihiaW4p LiIpOworCX0KKwlwcmludGYoIlRlc3QgTUFTSyBBTkQgV0lEVEggQ0FMQ1VMQVRJT04gUEFT U0VEXG4iKTsKKwlwcmludGYoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT1cblxuIik7CisKKwlwcmludGYoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT1cbiIpOworCXByaW50ZigiVGVzdCBCSVRQQUNLIFBBQ0tJTkdcbiIpOwor CXsKKyNkZWZpbmUgU0laRU9GUEFDSyA2MFUKKwkJdWludDhfdCBwYWNrW1NJWkVPRlBBQ0td OworCQlzaXplX3QgY2FyZXQgPSAwOworCQltZW1zZXQocGFjaywgMCwgU0laRU9GUEFDSyk7 CisJCS8qCisJCSAqIFNpbmNlIHdlIGltcGxlbWVudGVkIHRoZSBudWxpZnlpbmcgb2YgYml0 cyBhY2NvcmRpbmcgdG8gYSBtYXNrIChzZWUKKwkJICogdGhlIGJpdHBhY2sgZnVuY3Rpb24p LCB3ZSBjYW4gdXNlIGV2ZW4gYSBwYWNrIG5vdCBwcmVwYXJlZCBpbiBhZHZhbmNlCisJCSAq IGFuZCBjb21wcmlzaW5nIGdhcmJhZ2UuIEJ1dCB3ZSB3YW50IHRvIGNoZWNrIHZhbHVlIG9m IGVhY2ggYnl0ZSBvZgorCQkgKiB0aGUgcGFjayBpbiB0aGlzIHRlc3QgYW5kIHdlIHNpbXBs aWZ5IHRoaXMgdGFzayBieSB1c2luZyBhIHplcm9lZAorCQkgKiBwYWNrLgorCQkgKi8KKwor CQlmb3IgKGludCBqID0gMDsgaiA8IDg7IGorKykgeworCQkJY2FyZXQgPSBiaXRwYWNrX3Ux Nl9wYWNrKHBhY2ssIGNhcmV0LCAxLCAxKTsKKwkJCWNhcmV0ID0gYml0cGFja191MTZfcGFj ayhwYWNrLCBjYXJldCwgMCwgMSk7CisJCX0KKwkJY21wX29rKDE2LCAiPT0iLCBjYXJldCwg IkNhcmV0ID0gMTYuIik7CisJCWNtcF9vaygweDU1LCAiPT0iLCBwYWNrWzBdLCAiU2F2ZWQg Yml0LWJ5LWJpdDogZmlyc3QgYnl0ZSBpcyAweDU1LiIpOworCQljbXBfb2soMHg1NSwgIj09 IiwgcGFja1sxXSwgIlNhdmVkIGJpdC1ieS1iaXQ6IHNlY29uZCBieXRlIGlzIDB4NTUuIik7 CisKKwkJZm9yIChpbnQgaiA9IDA7IGogPCA4OyBqKyspIHsKKwkJCWNhcmV0ID0gYml0cGFj a191MTZfcGFjayhwYWNrLCBjYXJldCwgMHgwMiAvKiAxMChiaW4pICovLCAyKTsKKwkJfQor CisJCWNtcF9vaygzMiwgIj09IiwgY2FyZXQsICJDYXJldCA9IDMyLiIpOworCQljbXBfb2so MHhBQSwgIj09IiwgcGFja1syXSwKKwkJCSAgICJTYXZlZCB3aXRoIHR3by1iaXQgd2lkdGg6 IGZpcnN0IGJ5dGUgaXMgMHhBQS4iKTsKKwkJY21wX29rKDB4QUEsICI9PSIsIHBhY2tbM10s CisJCQkgICAiU2F2ZWQgd2l0aCB0d28tYml0IHdpZHRoOiBzZWNvbmQgYnl0ZSBpcyAweEFB LiIpOworCisJCWZvciAoaW50IGogPSAwOyBqIDwgODsgaisrKSB7CisJCQljYXJldCA9IGJp dHBhY2tfdTE2X3BhY2socGFjaywgY2FyZXQsIDB4MDUgLyogMTAxKGJpbikgKi8sIDMpOwor CQkJY2FyZXQgPSBiaXRwYWNrX3UxNl9wYWNrKHBhY2ssIGNhcmV0LCAweDAyIC8qIDAxMChi aW4pICovLCAzKTsKKwkJfQorCisJCWNtcF9vayg4MCwgIj09IiwgY2FyZXQsICJDYXJldCA9 IDgwLiIpOworCQljbXBfb2soMHg1NSwgIj09IiwgcGFja1s0XSwKKwkJCSAgICJTYXZlZCB3 aXRoIHRocmVlLWJpdCB3aWR0aDogZmlyc3QgYnl0ZSBpcyAweDU1LiIpOworCQljbXBfb2so MHg1NSwgIj09IiwgcGFja1s1XSwKKwkJCSAgICJTYXZlZCB3aXRoIHRocmVlLWJpdCB3aWR0 aDogc2Vjb25kIGJ5dGUgaXMgMHg1NS4iKTsKKwkJY21wX29rKDB4NTUsICI9PSIsIHBhY2tb Nl0sCisJCQkgICAiU2F2ZWQgd2l0aCB0aHJlZS1iaXQgd2lkdGg6IHNlY29uZCBieXRlIGlz IDB4NTUuIik7CisJCWNtcF9vaygweDU1LCAiPT0iLCBwYWNrWzddLAorCQkJICAgIlNhdmVk IHdpdGggdGhyZWUtYml0IHdpZHRoOiBmaXJzdCBieXRlIGlzIDB4NTUuIik7CisJCWNtcF9v aygweDU1LCAiPT0iLCBwYWNrWzhdLAorCQkJICAgIlNhdmVkIHdpdGggdGhyZWUtYml0IHdp ZHRoOiBzZWNvbmQgYnl0ZSBpcyAweDU1LiIpOworCQljbXBfb2soMHg1NSwgIj09IiwgcGFj a1s5XSwKKwkJCSAgICJTYXZlZCB3aXRoIHRocmVlLWJpdCB3aWR0aDogc2Vjb25kIGJ5dGUg aXMgMHg1NS4iKTsKKworCQljYXJldCA9IGJpdHBhY2tfdTE2X3BhY2socGFjaywgY2FyZXQs IDB4MEIsIDQpOworCQljYXJldCA9IGJpdHBhY2tfdTE2X3BhY2socGFjaywgY2FyZXQsIDB4 MEMsIDQpOworCQljYXJldCA9IGJpdHBhY2tfdTE2X3BhY2socGFjaywgY2FyZXQsIDB4MEQs IDQpOworCQljYXJldCA9IGJpdHBhY2tfdTE2X3BhY2socGFjaywgY2FyZXQsIDB4MEUsIDQp OworCisJCWNtcF9vayg5NiwgIj09IiwgY2FyZXQsICJDYXJldCA9IDk2LiIpOworCQljbXBf b2soMHhDQiwgIj09IiwgcGFja1sxMF0sCisJCQkgICAiU2F2ZWQgd2l0aCBmb3VyLWJpdCB3 aWR0aDogZmlyc3QgYnl0ZSBpcyAweENCLiIpOworCQljbXBfb2soMHhFRCwgIj09IiwgcGFj a1sxMV0sCisJCQkgICAiU2F2ZWQgd2l0aCBmb3VyLWJpdCB3aWR0aDogc2Vjb25kIGJ5dGUg aXMgMHhFRC4iKTsKKworCQlmb3IgKGludCBqID0gMDsgaiA8IDg7IGorKykgeworCQkJY2Fy ZXQgPSBiaXRwYWNrX3UxNl9wYWNrKHBhY2ssIGNhcmV0LCAweDA3IC8qIDAwMTExYiAqLywg NSk7CisJCX0KKworCQljbXBfb2soMTM2LCAiPT0iLCBjYXJldCwgIkNhcmV0ID0gMTM2LiIp OworCQljbXBfb2soMHhFNywgIj09IiwgcGFja1sxMl0sCisJCQkgICAiU2F2ZWQgd2l0aCBm aXZlLWJpdCB3aWR0aDogZmlyc3QgYnl0ZSBpcyAweEU3LiIpOworCQljbXBfb2soMHg5Qywg Ij09IiwgcGFja1sxM10sCisJCQkgICAiU2F2ZWQgd2l0aCBmaXZlLWJpdCB3aWR0aDogc2Vj b25kIGJ5dGUgaXMgMHg5Qy4iKTsKKwkJY21wX29rKDB4NzMsICI9PSIsIHBhY2tbMTRdLAor CQkJICAgIlNhdmVkIHdpdGggZml2ZS1iaXQgd2lkdGg6IHRoaXJkIGJ5dGUgaXMgMHg3My4i KTsKKwkJY21wX29rKDB4Q0UsICI9PSIsIHBhY2tbMTVdLAorCQkJICAgIlNhdmVkIHdpdGgg Zml2ZS1iaXQgd2lkdGg6IGZvdXJ0aCBieXRlIGlzIDB4Q0UuIik7CisJCWNtcF9vaygweDM5 LCAiPT0iLCBwYWNrWzE2XSwKKwkJCSAgICJTYXZlZCB3aXRoIGZpdmUtYml0IHdpZHRoOiBm aWZ0aCBieXRlIGlzIDB4MzkuIik7CisKKwkJZm9yIChpbnQgaiA9IDA7IGogPCA0OyBqKysp CisJCQljYXJldCA9IGJpdHBhY2tfdTE2X3BhY2socGFjaywgY2FyZXQsIDB4MDcgLyogMDAw MTExYiAqLywgNik7CisKKwkJY21wX29rKDE2MCwgIj09IiwgY2FyZXQsICJDYXJldCA9IDE2 MC4iKTsKKwkJY21wX29rKDB4QzcsICI9PSIsIHBhY2tbMTddLAorCQkJICAgIlNhdmVkIHdp dGggc2l4LWJpdCB3aWR0aDogZmlyc3QgYnl0ZSBpcyAweEM3LiIpOworCQljbXBfb2soMHg3 MSwgIj09IiwgcGFja1sxOF0sCisJCQkgICAiU2F2ZWQgd2l0aCBzaXgtYml0IHdpZHRoOiBz ZWNvbmQgYnl0ZSBpcyAweDcxLiIpOworCQljbXBfb2soMHgxQywgIj09IiwgcGFja1sxOV0s CisJCQkgICAiU2F2ZWQgd2l0aCBzaXgtYml0IHdpZHRoOiB0aGlyZCBieXRlIGlzIDB4MUMu Iik7CisKKwkJZm9yIChpbnQgaiA9IDA7IGogPCA4OyBqKyspCisJCQljYXJldCA9IGJpdHBh Y2tfdTE2X3BhY2socGFjaywgY2FyZXQsIDB4NTcgLyogMTAxMDExMWIgKi8sIDcpOworCisJ CWNtcF9vaygyMTYsICI9PSIsIGNhcmV0LCAiQ2FyZXQgPSAyMTYuIik7CisJCWNtcF9vaygw eEQ3LCAiPT0iLCBwYWNrWzIwXSwKKwkJCSAgICJTYXZlZCB3aXRoIHNldmVuLWJpdCB3aWR0 aDogYnl0ZTEgaXMgMHhENy4iKTsKKwkJY21wX29rKDB4RUIsICI9PSIsIHBhY2tbMjFdLAor CQkJICAgIlNhdmVkIHdpdGggc2V2ZW4tYml0IHdpZHRoOiBieXRlMiBpcyAweEVCLiIpOwor CQljbXBfb2soMHhGNSwgIj09IiwgcGFja1syMl0sCisJCQkgICAiU2F2ZWQgd2l0aCBzZXZl bi1iaXQgd2lkdGg6IGJ5dGUzIGlzIDB4RjUuIik7CisJCWNtcF9vaygweDdBLCAiPT0iLCBw YWNrWzIzXSwKKwkJCSAgICJTYXZlZCB3aXRoIHNldmVuLWJpdCB3aWR0aDogYnl0ZTQgaXMg MHg3QS4iKTsKKwkJY21wX29rKDB4QkQsICI9PSIsIHBhY2tbMjRdLAorCQkJICAgIlNhdmVk IHdpdGggc2V2ZW4tYml0IHdpZHRoOiBieXRlNSBpcyAweEJELiIpOworCQljbXBfb2soMHg1 RSwgIj09IiwgcGFja1syNV0sCisJCQkgICAiU2F2ZWQgd2l0aCBzZXZlbi1iaXQgd2lkdGg6 IGJ5dGU2IGlzIDB4NUUuIik7CisJCWNtcF9vaygweEFGLCAiPT0iLCBwYWNrWzI2XSwKKwkJ CSAgICJTYXZlZCB3aXRoIHNldmVuLWJpdCB3aWR0aDogYnl0ZTcgaXMgMHhBRi4iKTsKKwor CQljYXJldCA9IGJpdHBhY2tfdTE2X3BhY2socGFjaywgY2FyZXQsIDB4QkEsIDgpOworCQlj YXJldCA9IGJpdHBhY2tfdTE2X3BhY2socGFjaywgY2FyZXQsIDB4REMsIDgpOworCQljYXJl dCA9IGJpdHBhY2tfdTE2X3BhY2socGFjaywgY2FyZXQsIDB4RkUsIDgpOworCisJCWNtcF9v aygyNDAsICI9PSIsIGNhcmV0LCAiQ2FyZXQgPSAyNDAuIik7CisJCWNtcF9vaygweEJBLCAi PT0iLCBwYWNrWzI3XSwKKwkJCSAgICJTYXZlZCB3aXRoIGVpZ2h0LWJpdCB3aWR0aDogYnl0 ZTEgaXMgMHhCQS4iKTsKKwkJY21wX29rKDB4REMsICI9PSIsIHBhY2tbMjhdLAorCQkJICAg IlNhdmVkIHdpdGggZWlnaHQtYml0IHdpZHRoOiBieXRlMiBpcyAweERDLiIpOworCQljbXBf b2soMHhGRSwgIj09IiwgcGFja1syOV0sCisJCQkgICAiU2F2ZWQgd2l0aCBlaWdodC1iaXQg d2lkdGg6IGJ5dGUzIGlzIDB4RkUuIik7CisKKwkJY2FyZXQgPSBiaXRwYWNrX3UxNl9wYWNr KAorCQkJcGFjaywgY2FyZXQsIDB4MDAsCisJCQk0KTsgLyogbW92ZSB0byA0IGJpdCBmb3Ig ZnVuIGFuZCBhZ2FpbiBjb250aW51ZSB3aXRoIDgtYml0IHdpZHRoICovCisJCWNhcmV0ID0g Yml0cGFja191MTZfcGFjayhwYWNrLCBjYXJldCwgMHgzMiwgOCk7CisJCWNhcmV0ID0gYml0 cGFja191MTZfcGFjayhwYWNrLCBjYXJldCwgMHg1NCwgOCk7CisJCWNhcmV0ID0gYml0cGFj a191MTZfcGFjayhwYWNrLCBjYXJldCwgMHg3NiwgOCk7CisJCWNhcmV0ID0gYml0cGFja191 MTZfcGFjayhwYWNrLCBjYXJldCwgMHg5OCwgOCk7CisKKwkJY21wX29rKDI3NiwgIj09Iiwg Y2FyZXQsICJDYXJldCA9IDI3Ni4iKTsKKwkJY21wX29rKDB4MjAsICI9PSIsIHBhY2tbMzBd LAorCQkJICAgIlNhdmVkIHdpdGggZWlnaHQtYml0IHdpZHRoIGJ1dCBzaGlmdGVkIGJ5IDQ6 IGlzIDB4MjAuIik7CisJCWNtcF9vaygweDQzLCAiPT0iLCBwYWNrWzMxXSwKKwkJCSAgICJT YXZlZCB3aXRoIGVpZ2h0LWJpdCB3aWR0aCBidXQgc2hpZnRlZCBieSA0OiBpcyAweDQzLiIp OworCQljbXBfb2soMHg2NSwgIj09IiwgcGFja1szMl0sCisJCQkgICAiU2F2ZWQgd2l0aCBl aWdodC1iaXQgd2lkdGggYnV0IHNoaWZ0ZWQgYnkgNDogaXMgMHg2NS4iKTsKKwkJY21wX29r KDB4ODcsICI9PSIsIHBhY2tbMzNdLAorCQkJICAgIlNhdmVkIHdpdGggZWlnaHQtYml0IHdp ZHRoIGJ1dCBzaGlmdGVkIGJ5IDQ6IGlzIDB4ODcuIik7CisJCWNtcF9vaygweDA5LCAiPT0i LCBwYWNrWzM0XSwKKwkJCSAgICJTYXZlZCB3aXRoIGVpZ2h0LWJpdCB3aWR0aCBidXQgc2hp ZnRlZCBieSA0OiBpcyAweDA5LiIpOworCisJCWNhcmV0ID0gYml0cGFja191MTZfcGFjaygK KwkJCXBhY2ssIGNhcmV0LCAweDAwLAorCQkJNCk7IC8qIG1vdmUgdG8gNCBiaXQgZm9yIGZ1 biBhbmQgYWdhaW4gY29udGludWUgd2l0aCA4LWJpdCB3aWR0aCAqLworCQljbXBfb2soMjgw LCAiPT0iLCBjYXJldCwgIkNhcmV0ID0gMjgwLiIpOworCQljbXBfb2soMHgwOSwgIj09Iiwg cGFja1szNF0sCisJCQkgICAiQWRkZWQgcGFkZGluZyAweDAsIHdpZHRoPTQuIEJ5dGUgaW4g cGFjayBpcyBzdGlsbCAweDA5LiIpOworCisJCWZvciAoaW50IGogPSAwOyBqIDwgMzsgaisr KQorCQkJY2FyZXQgPSBiaXRwYWNrX3UxNl9wYWNrKHBhY2ssIGNhcmV0LCAweDE2NzEgLyog MTAxMTAwMTExMDAwMWIgKi8sCisJCQkJCQkJCQkgMTMpOworCisJCWNtcF9vaygzMTksICI9 PSIsIGNhcmV0LCAiQ2FyZXQgPSAzMTkuIik7CisJCWNtcF9vaygweDcxLCAiPT0iLCBwYWNr WzM1XSwgIlNhdmVkIHdpdGggdGhpcnRlZW4tYml0IHdpZHRoOiBpcyAweDcxLiIpOworCQlj bXBfb2soMHgzNiwgIj09IiwgcGFja1szNl0sICJTYXZlZCB3aXRoIHRoaXJ0ZWVuLWJpdCB3 aWR0aDogaXMgMHgzNi4iKTsKKwkJY21wX29rKDB4Q0UsICI9PSIsIHBhY2tbMzddLCAiU2F2 ZWQgd2l0aCB0aGlydGVlbi1iaXQgd2lkdGg6IGlzIDB4Q0UuIik7CisJCWNtcF9vaygweEM2 LCAiPT0iLCBwYWNrWzM4XSwgIlNhdmVkIHdpdGggdGhpcnRlZW4tYml0IHdpZHRoOiBpcyAw eEM2LiIpOworCQljbXBfb2soMHg1OSwgIj09IiwgcGFja1szOV0sICJTYXZlZCB3aXRoIHRo aXJ0ZWVuLWJpdCB3aWR0aDogaXMgMHg1OS4iKTsKKworCQljYXJldCA9IGJpdHBhY2tfdTE2 X3BhY2socGFjaywgY2FyZXQsIDB4MSAvKiBQQURESU5HICovLCAxKTsKKwkJY21wX29rKDMy MCwgIj09IiwgY2FyZXQsICJDYXJldCA9IDMyMC4iKTsKKwkJY21wX29rKDB4RDksICI9PSIs IHBhY2tbMzldLAorCQkJICAgIkFmdGVyIHBhZGRpbmcgd2l0aCAweDAxLCB3PTE6IDB4NTkg LT4gMHhEOS4iKTsKKworCQlmb3IgKGludCBqID0gMDsgaiA8IDU7IGorKykKKwkJCWNhcmV0 ID0gYml0cGFja191MTZfcGFjayhwYWNrLCBjYXJldCwgMHhDREVGLCAxNik7CisKKwkJY21w X29rKDQwMCwgIj09IiwgY2FyZXQsICJDYXJldCA9IDQwMC4iKTsKKwkJZm9yIChpbnQgaSA9 IDQwOyBpIDwgNTA7KSB7CisJCQljbXBfb2soMHhFRiwgIj09IiwgcGFja1tpKytdLCAiUGFj a2VkIHdpdGggd2lkdGg9MTYuIDB4RUYuIik7CisJCQljbXBfb2soMHhDRCwgIj09IiwgcGFj a1tpKytdLCAiUGFja2VkIHdpdGggd2lkdGg9MTYuIDB4Qy4iKTsKKwkJfQorCisJCWNhcmV0 ID0gYml0cGFja191MTZfcGFjayhwYWNrLCBjYXJldCwKKwkJCQkJCQkJIDB4MCAvKiBQQURE SU5HIGluIG9yZGVyIHRvIHNoaWZ0IGJ5IDEgYml0Ki8sCisJCQkJCQkJCSAxKTsKKwkJY21w X29rKDQwMSwgIj09IiwgY2FyZXQsICJDYXJldCA9IDQwMS4iKTsKKworCQlmb3IgKGludCBq ID0gMDsgaiA8IDM7IGorKykKKwkJCWNhcmV0ID0gYml0cGFja191MTZfcGFjayhwYWNrLCBj YXJldCwgMHg1NTU1LCAxNik7CisKKwkJY21wX29rKDQ0OSwgIj09IiwgY2FyZXQsICJDYXJl dCA9IDQwMS4iKTsKKwkJZm9yIChpbnQgaSA9IDUwOyBpIDwgNTY7KQorCQkJY21wX29rKDB4 QUEsICI9PSIsIHBhY2tbaSsrXSwKKwkJCQkgICAiMTYtYml0IHZhbHVlIHNhdmVkIHdpdGgg c2hpZnQgYnkgMSBiaXQgMHg1NS0+MHhBQS4iKTsKKworCQljbXBfb2soMHgwLCAiPT0iLCBw YWNrWzU2XSwgIjEgaGlnaGVyIGJpdCBpcyBhbG9uZSAuIik7CisKKwkJcHJpbnRmKCJUZXN0 IEJJVFBBQ0sgUEFDS0lORyBQQVNTRURcbiIpOworCQlwcmludGYoIj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuIik7CisKKwkJcHJpbnRmKCI9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKKwkJcHJpbnRmKCJUZXN0 IEJJVFBBQ0sgVU5QQUNLSU5HXG4iKTsKKworCQljYXJldCA9IDA7CisKKwkJZm9yIChpbnQg aiA9IDA7IGogPCA4OyBqKyspIHsKKwkJCWNtcF9vaygweDAxLCAiPT0iLCBiaXRwYWNrX3Ux Nl91bnBhY2socGFjaywgJmNhcmV0LCAxKSk7CisJCQljbXBfb2soMHgwMCwgIj09IiwgYml0 cGFja191MTZfdW5wYWNrKHBhY2ssICZjYXJldCwgMSkpOworCQl9CisJCWNtcF9vayhjYXJl dCwgIj09IiwgMTYpOworCisJCWZvciAoaW50IGogPSAwOyBqIDwgODsgaisrKQorCQkJY21w X29rKDB4MDIsICI9PSIsIGJpdHBhY2tfdTE2X3VucGFjayhwYWNrLCAmY2FyZXQsIDIpKTsK KworCQljbXBfb2soMzIsICI9PSIsIGNhcmV0LCAiQ2FyZXQgPSAzMi4iKTsKKworCQlmb3Ig KGludCBqID0gMDsgaiA8IDg7IGorKykgeworCQkJY21wX29rKDB4MDUsICI9PSIsIGJpdHBh Y2tfdTE2X3VucGFjayhwYWNrLCAmY2FyZXQsIDMpKTsKKwkJCWNtcF9vaygweDAyLCAiPT0i LCBiaXRwYWNrX3UxNl91bnBhY2socGFjaywgJmNhcmV0LCAzKSk7CisJCX0KKwkJY21wX29r KDgwLCAiPT0iLCBjYXJldCwgIkNhcmV0ID0gODAuIik7CisKKwkJY21wX29rKDB4MEIsICI9 PSIsIGJpdHBhY2tfdTE2X3VucGFjayhwYWNrLCAmY2FyZXQsIDQpKTsKKwkJY21wX29rKDB4 MEMsICI9PSIsIGJpdHBhY2tfdTE2X3VucGFjayhwYWNrLCAmY2FyZXQsIDQpKTsKKwkJY21w X29rKDB4MEQsICI9PSIsIGJpdHBhY2tfdTE2X3VucGFjayhwYWNrLCAmY2FyZXQsIDQpKTsK KwkJY21wX29rKDB4MEUsICI9PSIsIGJpdHBhY2tfdTE2X3VucGFjayhwYWNrLCAmY2FyZXQs IDQpKTsKKworCQljbXBfb2soOTYsICI9PSIsIGNhcmV0LCAiQ2FyZXQgPSA5Ni4iKTsKKwor CQlmb3IgKGludCBqID0gMDsgaiA8IDg7IGorKykKKwkJCWNtcF9vaygweDA3LCAiPT0iLCBi aXRwYWNrX3UxNl91bnBhY2socGFjaywgJmNhcmV0LCA1KSwKKwkJCQkgICAid2lkdGg9NSwg dmFsPTAwMTExYiIpOworCisJCWNtcF9vaygxMzYsICI9PSIsIGNhcmV0LCAiQ2FyZXQgPSAx MzYuIik7CisKKwkJZm9yIChpbnQgaiA9IDA7IGogPCA0OyBqKyspCisJCQljbXBfb2soMHgw NywgIj09IiwgYml0cGFja191MTZfdW5wYWNrKHBhY2ssICZjYXJldCwgNiksCisJCQkJICAg IndpZHRoPTYsIHZhbD0wMDAxMTFiIik7CisKKwkJY21wX29rKDE2MCwgIj09IiwgY2FyZXQs ICJDYXJldCA9IDE2MC4iKTsKKworCQlmb3IgKGludCBqID0gMDsgaiA8IDg7IGorKykKKwkJ CWNtcF9vaygweDU3LCAiPT0iLCBiaXRwYWNrX3UxNl91bnBhY2socGFjaywgJmNhcmV0LCA3 KSwKKwkJCQkgICAid2lkdGg9NywgdmFsPTEwMTAxMTFiICgweDU3KSIpOworCisJCWNtcF9v aygyMTYsICI9PSIsIGNhcmV0LCAiQ2FyZXQgPSAyMTYuIik7CisKKwkJY21wX29rKDB4QkEs ICI9PSIsIGJpdHBhY2tfdTE2X3VucGFjayhwYWNrLCAmY2FyZXQsIDgpLAorCQkJICAgIndp ZHRoPTgsIHZhbD0weEJBIik7CisJCWNtcF9vaygweERDLCAiPT0iLCBiaXRwYWNrX3UxNl91 bnBhY2socGFjaywgJmNhcmV0LCA4KSwKKwkJCSAgICJ3aWR0aD04LCB2YWw9MHhEQyIpOwor CQljbXBfb2soMHhGRSwgIj09IiwgYml0cGFja191MTZfdW5wYWNrKHBhY2ssICZjYXJldCwg OCksCisJCQkgICAid2lkdGg9OCwgdmFsPTB4RkUiKTsKKworCQljbXBfb2soMjQwLCAiPT0i LCBjYXJldCwgIkNhcmV0ID0gMjQwLiIpOworCisJCWNtcF9vaygweDAsICI9PSIsIGJpdHBh Y2tfdTE2X3VucGFjayhwYWNrLCAmY2FyZXQsIDQpLAorCQkJICAgIndpZHRoPTQsIHZhbD0w eDAsIGZvciBmdW4iKTsKKworCQljbXBfb2soMHgzMiwgIj09IiwgYml0cGFja191MTZfdW5w YWNrKHBhY2ssICZjYXJldCwgOCksCisJCQkgICAid2lkdGg9OCwgdmFsPTB4MzIiKTsKKwkJ Y21wX29rKDB4NTQsICI9PSIsIGJpdHBhY2tfdTE2X3VucGFjayhwYWNrLCAmY2FyZXQsIDgp LAorCQkJICAgIndpZHRoPTgsIHZhbD0weDU0Iik7CisJCWNtcF9vaygweDc2LCAiPT0iLCBi aXRwYWNrX3UxNl91bnBhY2socGFjaywgJmNhcmV0LCA4KSwKKwkJCSAgICJ3aWR0aD04LCB2 YWw9MHg3NiIpOworCQljbXBfb2soMHg5OCwgIj09IiwgYml0cGFja191MTZfdW5wYWNrKHBh Y2ssICZjYXJldCwgOCksCisJCQkgICAid2lkdGg9OCwgdmFsPTB4OTgiKTsKKworCQljbXBf b2soMHgwLCAiPT0iLCBiaXRwYWNrX3UxNl91bnBhY2socGFjaywgJmNhcmV0LCA0KSwKKwkJ CSAgICJ3aWR0aD00LCB2YWw9MHgwLCBmb3IgZnVuIHBhZGRpbmcgYWdhaW4iKTsKKworCQlm b3IgKGludCBqID0gMDsgaiA8IDM7IGorKykKKwkJCWNtcF9vaygweDE2NzEsICI9PSIsIGJp dHBhY2tfdTE2X3VucGFjayhwYWNrLCAmY2FyZXQsIDEzKSwKKwkJCQkgICAid2lkdGg9MTMs IHZhbD0weDE2NzEgKDEwMTEwMDExMTAwMDFiKSIpOworCisJCWNtcF9vaygzMTksICI9PSIs IGNhcmV0LCAiQ2FyZXQgPSAzMTkuIik7CisKKwkJY21wX29rKDB4MSwgIj09IiwgYml0cGFj a191MTZfdW5wYWNrKHBhY2ssICZjYXJldCwgMSksCisJCQkgICAid2lkdGg9MSwgdmFsPTB4 MSIpOworCQljbXBfb2soMzIwLCAiPT0iLCBjYXJldCwgIkNhcmV0ID0gMzIwLiIpOworCisJ CWZvciAoaW50IGogPSAwOyBqIDwgNTsgaisrKQorCQkJY21wX29rKDB4Q0RFRiwgIj09Iiwg Yml0cGFja191MTZfdW5wYWNrKHBhY2ssICZjYXJldCwgMTYpLAorCQkJCSAgICIxOC1iaXQg dmFsdWUgYWxsaWduZWQgd2l0aCBieXRlcyBpbiBwYWNrLiIpOworCisJCWNtcF9vayg0MDAs ICI9PSIsIGNhcmV0LCAiQ2FyZXQgPSA0MDAuIik7CisJCWNtcF9vaygweDAsICI9PSIsIGJp dHBhY2tfdTE2X3VucGFjayhwYWNrLCAmY2FyZXQsIDEpLAorCQkJICAgIjEtYml0IHdpZHRo IHZhbHVlIChwYWRkaW5nIGZvciBzaGlmdCkuIik7CisJCWNtcF9vayg0MDEsICI9PSIsIGNh cmV0LCAiQ2FyZXQgPSA0MDEuIik7CisKKwkJZm9yIChpbnQgaiA9IDA7IGogPCAzOyBqKysp CisJCQljbXBfb2soMHg1NTU1LCAiPT0iLCBiaXRwYWNrX3UxNl91bnBhY2socGFjaywgJmNh cmV0LCAxNiksCisJCQkJICAgIjE2LWJpdCB3aWR0aCB2YWx1ZSBzaGlmdGVkIGJ5IDEgYml0 LiIpOworCisJCWNtcF9vayg0NDksICI9PSIsIGNhcmV0LCAiQ2FyZXQgPSA0NDkuIik7CisJ fQorCisJZG9uZV90ZXN0aW5nKCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9kZm9yL3Rl c3RfdW5pcXNvcnR2ZWN0X3UxNi5jIGIvc3JjL3Rlc3QvZGZvci90ZXN0X3VuaXFzb3J0dmVj dF91MTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNGRkY2U4 YjBiM2QKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9kZm9yL3Rlc3RfdW5pcXNvcnR2 ZWN0X3UxNi5jCkBAIC0wLDAgKzEsMjYzIEBACisvKgorICogdGVzdF91bmlxc29ydHZlY3Qu YworICovCisKKyNpbmNsdWRlICJsaWIvdmVjdF91MTYuaCIKKyNpbmNsdWRlICJsaWJ0YXAv dGFwLmgiCisKK2ludCB0ZXN0X3VzdihzaXplX3Qgc3JjX2NudCwgdWludDE2X3QgKnNyY19p biwgc2l6ZV90IGV4cGVjdGVkX2NudCwKKwkJCSB1aW50MTZfdCAqZXhwZWN0ZWRfaW4pOwor CitpbnQKK3Rlc3RfdXN2KHNpemVfdCBzcmNfY250LCB1aW50MTZfdCAqc3JjX2luLCBzaXpl X3QgZXhwZWN0ZWRfY250LAorCQkgdWludDE2X3QgKmV4cGVjdGVkX2luKQoreworCWludCBy ZXN1bHQgPSAtMTsKKwl2ZWN0X3UxNl90IHNyYzsKKwl2ZWN0X3UxNl90IGV4cGVjdGVkOwor CXVuaXFzb3J0dmVjdF91MTZfdCB4OworCisJdmVjdF91MTZfaW5pdCgmc3JjLCBzcmNfY250 LCBOVUxMKTsKKwl2ZWN0X3UxNl9maWxsKCZzcmMsIHNyY19jbnQsIHNyY19pbik7CisKKwl2 ZWN0X3UxNl9pbml0KCZleHBlY3RlZCwgMCwgTlVMTCk7CisJdmVjdF91MTZfZmlsbCgmZXhw ZWN0ZWQsIGV4cGVjdGVkX2NudCwgZXhwZWN0ZWRfaW4pOworCisJdmVjdF91MTZfaW5pdCgm eCwgMCwgTlVMTCk7CisKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNyY19jbnQ7IGkrKykK KwkJdXN2X3UxNl9pbnNlcnQoJngsIHNyYy5tW2ldKTsKKworCXJlc3VsdCA9IHZlY3RfdTE2 X2NvbXBhcmUoJngsICZleHBlY3RlZCk7CisKKwl2ZWN0X3UxNl9jbGVhcigmeCk7CisJdmVj dF91MTZfY2xlYXIoJmV4cGVjdGVkKTsKKwl2ZWN0X3UxNl9jbGVhcigmc3JjKTsKKwlyZXR1 cm4gcmVzdWx0OworfQorCitpbnQKK21haW4odm9pZCkKK3sKKwlwbGFuKDU2KTsKKworCXBy aW50ZigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CisJ cHJpbnRmKCJUZXN0IENSRUFURSBBTkQgREVTVFJPWSBTT1JURUQgVU5JUVVFIFZFQ1RPUiAo RU1QVFkpXG4iKTsKKwl7CisJCXVuaXFzb3J0dmVjdF91MTZfdCB1c3Y7CisJCXNpemVfdCBj YXBhY2l0eSA9IDEwOworCQl2ZWN0X3UxNl9pbml0KCZ1c3YsIGNhcGFjaXR5LCBOVUxMKTsK KwkJY21wX29rKHVzdi5jYXAsICI9PSIsIGNhcGFjaXR5LAorCQkJICAgIlZlY3RvcnMgY2Fw YWNpdHkgaXMgZXF1YWwgdG8gcmVxdWVzdGVkIG9uZSIpOworCQljbXBfb2sodXN2LmNudCwg Ij09IiwgMCwgIk5vIG1lbWJlcnMgaW4gdmVjdG9yIik7CisJCW9rKHVzdi5tICE9IE5VTEws ICJBcnJheSBmb3IgbWVtYmVycyBpcyByZXNlcnZlZCIpOworCisJCXZlY3RfdTE2X2NsZWFy KCZ1c3YpOworCX0KKwlwcmludGYoIlRlc3QgQ1JFQVRFIEFORCBERVNUUk9ZIFNPUlRFRCBV TklRVUUgVkVDVE9SIChFTVBUWSkgUEFTU0VEXG4iKTsKKwlwcmludGYoIj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuIik7CisKKwlwcmludGYoIj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworCXByaW50ZigiVGVz dCBTRUFSQ0ggSU4gVU5JUVVFIFNPUlQgVkVDVFxuIik7CisJeworCQl1bmlxc29ydHZlY3Rf dTE2X3QgdXN2OworCQl1c3Zfc3JjaF9yZXNfdCBzcmNoOworCQl1aW50MTZfdCBpbnB1dFs0 XSA9IHsgNSwgMTAsIDIwLCAzMCB9OworCisJCXZlY3RfdTE2X2luaXQoJnVzdiwgMCwgTlVM TCk7CisKKwkJZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyBpKyspCisJCQl1c3ZfdTE2X2lu c2VydCgmdXN2LCBpbnB1dFtpXSk7CisKKwkJc3JjaCA9IHVzdl91MTZfc2VhcmNoKCZ1c3Ys IDApOworCQljbXBfb2soc3JjaC5zdCwgIj09IiwgVVNWX1NSQ0hfTk9UX0ZPVU5EX1NNQUxM RVNULAorCQkJICAgIk5vdCBmb3VuZCwgc21hbGxlc3QiKTsKKwkJY21wX29rKHNyY2gucG9z LCAiPT0iLCAwLCAiUG9zID0wIik7CisKKwkJc3JjaCA9IHVzdl91MTZfc2VhcmNoKCZ1c3Ys IDEpOworCQljbXBfb2soc3JjaC5zdCwgIj09IiwgVVNWX1NSQ0hfTk9UX0ZPVU5EX1NNQUxM RVNULAorCQkJICAgIk5vdCBmb3VuZCwgc21hbGxlc3QiKTsKKwkJY21wX29rKHNyY2gucG9z LCAiPT0iLCAwLCAiUG9zID0wIik7CisKKwkJc3JjaCA9IHVzdl91MTZfc2VhcmNoKCZ1c3Ys IDUpOworCQljbXBfb2soc3JjaC5zdCwgIj09IiwgVVNWX1NSQ0hfRk9VTkQsICJGb3VuZCIp OworCQljbXBfb2soc3JjaC5wb3MsICI9PSIsIDAsICJQb3MgPTAiKTsKKworCQlzcmNoID0g dXN2X3UxNl9zZWFyY2goJnVzdiwgNik7CisJCWNtcF9vayhzcmNoLnN0LCAiPT0iLCBVU1Zf U1JDSF9OT1RfRk9VTkQsICJOb3QgZm91bmQiKTsKKwkJY21wX29rKHNyY2gucG9zLCAiPT0i LCAxLCAiUG9zID0xIik7CisKKwkJc3JjaCA9IHVzdl91MTZfc2VhcmNoKCZ1c3YsIDEwKTsK KwkJY21wX29rKHNyY2guc3QsICI9PSIsIFVTVl9TUkNIX0ZPVU5ELCAiRm91bmQiKTsKKwkJ Y21wX29rKHNyY2gucG9zLCAiPT0iLCAxLCAiUG9zID0xIik7CisKKwkJc3JjaCA9IHVzdl91 MTZfc2VhcmNoKCZ1c3YsIDE1KTsKKwkJY21wX29rKHNyY2guc3QsICI9PSIsIFVTVl9TUkNI X05PVF9GT1VORCwgIk5vdCBmb3VuZCIpOworCQljbXBfb2soc3JjaC5wb3MsICI9PSIsIDIs ICJQb3MgPTIiKTsKKworCQlzcmNoID0gdXN2X3UxNl9zZWFyY2goJnVzdiwgMjApOworCQlj bXBfb2soc3JjaC5zdCwgIj09IiwgVVNWX1NSQ0hfRk9VTkQsICJGb3VuZCIpOworCQljbXBf b2soc3JjaC5wb3MsICI9PSIsIDIsICJQb3MgPTIiKTsKKworCQlzcmNoID0gdXN2X3UxNl9z ZWFyY2goJnVzdiwgMjUpOworCQljbXBfb2soc3JjaC5zdCwgIj09IiwgVVNWX1NSQ0hfTk9U X0ZPVU5ELCAiTm90IGZvdW5kIik7CisJCWNtcF9vayhzcmNoLnBvcywgIj09IiwgMywgIlBv cyA9MyIpOworCisJCXNyY2ggPSB1c3ZfdTE2X3NlYXJjaCgmdXN2LCAzMCk7CisJCWNtcF9v ayhzcmNoLnN0LCAiPT0iLCBVU1ZfU1JDSF9GT1VORCwgIkZvdW5kIik7CisJCWNtcF9vayhz cmNoLnBvcywgIj09IiwgMywgIlBvcyA9MiIpOworCisJCXNyY2ggPSB1c3ZfdTE2X3NlYXJj aCgmdXN2LCA0NSk7CisJCWNtcF9vayhzcmNoLnN0LCAiPT0iLCBVU1ZfU1JDSF9OT1RfRk9V TkRfTEFSR0VTVCwgIk5vdCBmb3VuZCwgbGFyZ2VzdCIpOworCQljbXBfb2soc3JjaC5wb3Ms ICI9PSIsIDMsICJQb3MgPTMiKTsKKworCQl2ZWN0X3UxNl9jbGVhcigmdXN2KTsKKwl9CisJ eworCQl1bmlxc29ydHZlY3RfdTE2X3QgdXN2OworCQl1c3Zfc3JjaF9yZXNfdCBzcmNoOwor CQl1aW50MTZfdCBpbnB1dFszXSA9IHsgNSwgMTAsIDIwIH07CisJCXVpbnQxNl90IGJ1Zlsz XTsgLyogb3ZlcmluZHVsZ2UgaW4gdGVzdGluZyB0aGUgb3V0ZXIgbWVtb3J5IHZlY3RvciAq LworCisJCXZlY3RfdTE2X2luaXQoJnVzdiwgMywgYnVmKTsKKworCQlmb3IgKHNpemVfdCBp ID0gMDsgaSA8IDM7IGkrKykKKwkJCXVzdl91MTZfaW5zZXJ0KCZ1c3YsIGlucHV0W2ldKTsK KworCQlzcmNoID0gdXN2X3UxNl9zZWFyY2goJnVzdiwgMCk7CisJCWNtcF9vayhzcmNoLnN0 LCAiPT0iLCBVU1ZfU1JDSF9OT1RfRk9VTkRfU01BTExFU1QsCisJCQkgICAiTm90IGZvdW5k LCBzbWFsbGVzdCIpOworCQljbXBfb2soc3JjaC5wb3MsICI9PSIsIDAsICJQb3MgPTAiKTsK KworCQlzcmNoID0gdXN2X3UxNl9zZWFyY2goJnVzdiwgNSk7CisJCWNtcF9vayhzcmNoLnN0 LCAiPT0iLCBVU1ZfU1JDSF9GT1VORCwgIkZvdW5kIik7CisJCWNtcF9vayhzcmNoLnBvcywg Ij09IiwgMCwgIlBvcyA9MCIpOworCisJCXNyY2ggPSB1c3ZfdTE2X3NlYXJjaCgmdXN2LCA2 KTsKKwkJY21wX29rKHNyY2guc3QsICI9PSIsIFVTVl9TUkNIX05PVF9GT1VORCwgIk5vdCBm b3VuZCIpOworCQljbXBfb2soc3JjaC5wb3MsICI9PSIsIDEsICJQb3MgPTEiKTsKKworCQlz cmNoID0gdXN2X3UxNl9zZWFyY2goJnVzdiwgMTApOworCQljbXBfb2soc3JjaC5zdCwgIj09 IiwgVVNWX1NSQ0hfRk9VTkQsICJGb3VuZCIpOworCQljbXBfb2soc3JjaC5wb3MsICI9PSIs IDEsICJQb3MgPTEiKTsKKworCQlzcmNoID0gdXN2X3UxNl9zZWFyY2goJnVzdiwgMTUpOwor CQljbXBfb2soc3JjaC5zdCwgIj09IiwgVVNWX1NSQ0hfTk9UX0ZPVU5ELCAiTm90IGZvdW5k Iik7CisJCWNtcF9vayhzcmNoLnBvcywgIj09IiwgMiwgIlBvcyA9MiIpOworCisJCS8qCisJ CSAqIFdoZW4gc2NvcGVzIGwgYW5kIGcgYXJlIG5laWdoYm91cnMgKGctbD0xKSBidXQKKwkJ ICogdmFsPT1tW2ddIGluc3RlYWQgb2YgdmFsPT1tW2xdLgorCQkgKi8KKwkJc3JjaCA9IHVz dl91MTZfc2VhcmNoKCZ1c3YsIDIwKTsKKwkJY21wX29rKHNyY2guc3QsICI9PSIsIFVTVl9T UkNIX0ZPVU5ELCAiRm91bmQiKTsKKwkJY21wX29rKHNyY2gucG9zLCAiPT0iLCAyLCAiUG9z ID0yIik7CisKKwkJc3JjaCA9IHVzdl91MTZfc2VhcmNoKCZ1c3YsIDIxKTsKKwkJY21wX29r KHNyY2guc3QsICI9PSIsIFVTVl9TUkNIX05PVF9GT1VORF9MQVJHRVNULCAiTm90IGZvdW5k LCBsYXJnZXN0Iik7CisJCWNtcF9vayhzcmNoLnBvcywgIj09IiwgMiwgIlBvcyA9MiIpOwor CisJCXZlY3RfdTE2X2NsZWFyKCZ1c3YpOworCX0KKwl7IC8qIHNpbmdsZSBtZW1iZXIqLwor CisJCXVuaXFzb3J0dmVjdF91MTZfdCB1c3Y7CisJCXVzdl9zcmNoX3Jlc190IHNyY2g7CisK KwkJdmVjdF91MTZfaW5pdCgmdXN2LCAzLCBOVUxMKTsKKworCQl1c3ZfdTE2X2luc2VydCgm dXN2LCA1KTsgLyogVGhlIG9ubHkgaXRlbSBpbiBsaXN0IGlzIDUgKi8KKworCQlzcmNoID0g dXN2X3UxNl9zZWFyY2goJnVzdiwgMCk7CisJCWNtcF9vayhzcmNoLnN0LCAiPT0iLCBVU1Zf U1JDSF9OT1RfRk9VTkRfU01BTExFU1QsCisJCQkgICAiTm90IGZvdW5kLCBzbWFsbGVzdCIp OworCQljbXBfb2soc3JjaC5wb3MsICI9PSIsIDAsICJQb3MgPTAiKTsKKworCQlzcmNoID0g dXN2X3UxNl9zZWFyY2goJnVzdiwgNSk7CisJCWNtcF9vayhzcmNoLnN0LCAiPT0iLCBVU1Zf U1JDSF9GT1VORCwgIkZvdW5kIik7CisJCWNtcF9vayhzcmNoLnBvcywgIj09IiwgMCwgIlBv cyA9MCIpOworCisJCXNyY2ggPSB1c3ZfdTE2X3NlYXJjaCgmdXN2LCA2KTsKKwkJY21wX29r KHNyY2guc3QsICI9PSIsIFVTVl9TUkNIX05PVF9GT1VORF9MQVJHRVNULCAiTm90IGZvdW5k LCBsYXJnZXN0Iik7CisJCWNtcF9vayhzcmNoLnBvcywgIj09IiwgMCwgIlBvcyA9MiIpOwor CisJCXZlY3RfdTE2X2NsZWFyKCZ1c3YpOworCX0KKwl7IC8qIGVtcHR5IHZlY3RvciovCisK KwkJdW5pcXNvcnR2ZWN0X3UxNl90IHVzdjsKKwkJdXN2X3NyY2hfcmVzX3Qgc3JjaDsKKwor CQl2ZWN0X3UxNl9pbml0KCZ1c3YsIDEsIE5VTEwpOworCisJCXNyY2ggPSB1c3ZfdTE2X3Nl YXJjaCgmdXN2LCAwKTsKKwkJY21wX29rKHNyY2guc3QsICI9PSIsIFVTVl9TUkNIX0VNUFRZ LCAiVmVjdG9yIGlzIGVtcHR5LiIpOworCQljbXBfb2soc3JjaC5wb3MsICI9PSIsIDAsICJQ b3MgPTAiKTsKKworCQlzcmNoID0gdXN2X3UxNl9zZWFyY2goJnVzdiwgNCk7CisJCWNtcF9v ayhzcmNoLnN0LCAiPT0iLCBVU1ZfU1JDSF9FTVBUWSwgIlZlY3RvciBpcyBlbXB0eS4iKTsK KwkJY21wX29rKHNyY2gucG9zLCAiPT0iLCAwLCAiUG9zID0wIik7CisKKwkJc3JjaCA9IHVz dl91MTZfc2VhcmNoKCZ1c3YsIDUpOworCQljbXBfb2soc3JjaC5zdCwgIj09IiwgVVNWX1NS Q0hfRU1QVFksICJWZWN0b3IgaXMgZW1wdHkuIik7CisJCWNtcF9vayhzcmNoLnBvcywgIj09 IiwgMCwgIlBvcyA9MCIpOworCisJCXNyY2ggPSB1c3ZfdTE2X3NlYXJjaCgmdXN2LCA2KTsK KwkJY21wX29rKHNyY2guc3QsICI9PSIsIFVTVl9TUkNIX0VNUFRZLCAiVmVjdG9yIGlzIGVt cHR5LiIpOworCQljbXBfb2soc3JjaC5wb3MsICI9PSIsIDAsICJQb3MgPTAiKTsKKworCQl2 ZWN0X3UxNl9jbGVhcigmdXN2KTsKKwl9CisJcHJpbnRmKCJUZXN0IFNFQVJDSCBJTiBVTklR VUUgU09SVCBWRUNUIFBBU1NFRC5cbiIpOworCXByaW50ZigiPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PVxuXG4iKTsKKworCXByaW50ZigiPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CisJcHJpbnRmKCJUZXN0IEVSUk9S IE9OIE5PIFZFQ1RPUiBGT1IgU0VBUkNISU5HXG4iKTsKKwl7CisJCXVzdl9zcmNoX3Jlc190 IHNyY2g7CisJCXNyY2ggPSB1c3ZfdTE2X3NlYXJjaChOVUxMLCAwKTsKKwkJY21wX29rKHNy Y2guc3QsICI9PSIsIFVTVl9TUkNIX0VSUk9SLAorCQkJICAgIkVycm9yOiBubyB2ZWN0b3Ig KGVtcHR5IHBvaW50ZXIgb24gdmVjdHJvcikuIik7CisJfQorCXsKKwkJdW5pcXNvcnR2ZWN0 X3UxNl90IHVzdjsKKwkJdXN2X3NyY2hfcmVzX3Qgc3JjaDsKKwkJdmVjdF91MTZfaW5pdCgm dXN2LCAwLCBOVUxMKTsKKworCQlzcmNoID0gdXN2X3UxNl9zZWFyY2goJnVzdiwgMCk7CisJ CWNtcF9vayhzcmNoLnN0LCAiPT0iLCBVU1ZfU1JDSF9FTVBUWSwKKwkJCSAgICJTZWFyY2gg aW4gZW1wdHkgdmVjdG9yIGlzIG5vdCBhbiBlcnJvci4iKTsKKworCQl2ZWN0X3UxNl9jbGVh cigmdXN2KTsKKwl9CisJcHJpbnRmKCJUZXN0IEVSUk9SIE9OIE5PIFZFQ1RPUiBGT1IgU0VB UkNISU5HIFBBU1NFRFxuIik7CisJcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09XG5cbiIpOworCisJcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09XG4iKTsKKwlwcmludGYoIlRlc3QgQ1JFQVRFRCBWRUNU T1JTIEFSRSBTT1JURUQgQU5EIFVOSVFVRVxuIik7CisJeworCQljbXBfb2soCisJCQkwLCAi PT0iLAorCQkJdGVzdF91c3YoMTAsICh1aW50MTZfdFtdKSB7IDAsIDEsIDIsIDMsIDQsIDUs IDYsIDcsIDgsIDkgfSwgLy8gc3JjCisJCQkJCSAxMCwKKwkJCQkJICh1aW50MTZfdFtdKSB7 IDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDkgfSksIC8vIGV4cGVjdGVkCisJCQkiVW5p cXVlIHNvcnRlZCB2ZWN0b3IgcmVtYWlucyB0aGUgc2FtZS4iKTsKKworCQljbXBfb2soMCwg Ij09IiwKKwkJCSAgIHRlc3RfdXN2KDEwLAorCQkJCQkJKHVpbnQxNl90W10pIHsgMCwgMSwg MiwgMywgNCwgNSwgMywgNywgNSwgOSB9LCAvLyBzcmMKKwkJCQkJCTgsICh1aW50MTZfdFtd KSB7IDAsIDEsIDIsIDMsIDQsIDUsIDcsIDkgfSksIC8vIGV4cGVjdGVkCisJCQkgICAiRHVw bGljYXRlcyBhcmUgcmVtb3ZlZC4iKTsKKworCQljbXBfb2soCisJCQkwLCAiPT0iLAorCQkJ dGVzdF91c3YoMTAsICh1aW50MTZfdFtdKSB7IDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEs IDAgfSwgLy8gc3JjCisJCQkJCSAxMCwKKwkJCQkJICh1aW50MTZfdFtdKSB7IDAsIDEsIDIs IDMsIDQsIDUsIDYsIDcsIDgsIDkgfSksIC8vIGV4cGVjdGVkCisJCQkiVW5zb3J0ZWQgYmVj YW1lIHNvcnRlZC4iKTsKKwl9CisJcHJpbnRmKCJUZXN0IENSRUFURUQgVkVDVE9SUyBBUkUg U09SVEVEIEFORCBVTklRVUUgUEFTU0VEXG4iKTsKKwlwcmludGYoIj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuIik7CisKKwlkb25lX3Rlc3RpbmcoKTsK K30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2Rmb3IvdGVzdF92ZWN0X3UxNi5jIGIvc3JjL3Rl c3QvZGZvci90ZXN0X3ZlY3RfdTE2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjAwZWZlN2RjY2JlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvZGZv ci90ZXN0X3ZlY3RfdTE2LmMKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiB0ZXN0X3ZlY3Rf dTE2LmMKKyAqLworCisjaW5jbHVkZSAibGlidGFwL3RhcC5oIgorI2luY2x1ZGUgImxpYi92 ZWN0X3UxNi5oIgorCitpbnQKK21haW4odm9pZCkKK3sKKwlwbGFuKDM1KTsKKworCXByaW50 ZigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CisJcHJp bnRmKCJUZXN0IElOSVQgQU5EIENMRUFSIFZFQ1RPUlxuIik7CisJeworCQl2ZWN0X3UxNl90 IHY7CisJCXNpemVfdCBjYXBhY2l0eSA9IDEwOworCQljbXBfb2soMCwgIj09IiwgdmVjdF91 MTZfaW5pdCgmdiwgY2FwYWNpdHksIE5VTEwpLAorCQkJICAgIlJlc3VsdCBvZiB2ZWN0X2lu aXQgaXMgMCIpOworCisJCWNtcF9vayh2LmNhcCwgIj09IiwgY2FwYWNpdHksCisJCQkgICAi VmVjdG9ycyBjYXBhY2l0eSBpcyBlcXVhbCB0byByZXF1ZXN0ZWQgb25lIik7CisJCWNtcF9v ayh2LmNudCwgIj09IiwgMCwgIk5vIG1lbWJlcnMgaW4gdmVjdG9yIik7CisJCW9rKHYubSAh PSBOVUxMLCAiQXJyYXkgZm9yIG1lbWJlcnMgaXMgcmVzZXJ2ZWQiKTsKKwkJY21wX29rKHYu bWVtX2lzX291dGVyLCAiPT0iLCBmYWxzZSwgIlZlY3RvciBkb2VzIG5vdCB1c2Ugb3V0ZXIg bWVtb3J5Iik7CisKKwkJdmVjdF91MTZfY2xlYXIoJnYpOworCisJCWNtcF9vayh2LmNhcCwg Ij09IiwgMCwgIlZlY3RvcnMgY2FwYWNpdHkgaXMgMCBhZnRlciBjbGVhbnVwIik7CisJCWNt cF9vayh2LmNudCwgIj09IiwgMCwgIk5vIG1lbWJlcnMgaW4gdmVjdG9yIGFmdGVyIGNsZWFu dXAiKTsKKwkJb2sodi5tID09IE5VTEwsICJBcnJheSBmb3IgbWVtYmVycyBpcyBhYnNlbnQi KTsKKwkJY21wX29rKHYubWVtX2lzX291dGVyLCAiPT0iLCBmYWxzZSwgIlZlY3RvciBkb2Vz IG5vdCB1c2Ugb3V0ZXIgbWVtb3J5Iik7CisJfQorCXByaW50ZigiVGVzdCBJTklUIEFORCBD TEVBUiBWRUNUT1IgUEFTU0VEXG4iKTsKKwlwcmludGYoIj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT1cblxuIik7CisKKwlwcmludGYoIj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworCXByaW50ZigiVGVzdCBJTklUIEFO RCBGSUxMIFZFQ1RPUlxuIik7CisJeworCQl2ZWN0X3UxNl90IHY7CisJCXNpemVfdCBjYXBh Y2l0eSA9IDEwOworCQljb25zdCB1aW50MTZfdCB2YWxzW10gPSB7IDAsIDEsIDIsIDMsIDQs IDUsIDYsIDcsIDgsIDkgfTsKKworCQljbXBfb2soMCwgIj09IiwgdmVjdF91MTZfaW5pdCgm diwgY2FwYWNpdHksIE5VTEwpLAorCQkJICAgIlJlc3VsdCBvZiB2ZWN0X2luaXQgaXMgMCIp OworCQljbXBfb2soMCwgIj09IiwgdmVjdF91MTZfZmlsbCgmdiwgY2FwYWNpdHksIHZhbHMp LAorCQkJICAgIlJlc3VsdCBvZiB2ZWN0X2ZpbGwgaXMgMCIpOworCisJCWNtcF9vayh2LmNh cCwgIj09IiwgY2FwYWNpdHksCisJCQkgICAiVmVjdG9ycyBjYXBhY2l0eSBpcyBlcXVhbCB0 byByZXF1ZXN0ZWQgb25lIik7CisJCW9rKHYubSAhPSBOVUxMLCAiQXJyYXkgZm9yIG1lbWJl cnMgaXMgcmVzZXJ2ZWQiKTsKKwkJY21wX29rKHYuY250LCAiPT0iLCBjYXBhY2l0eSwgIk1l bWJlcnMgYXJlIGluIHZlY3Rvci4iKTsKKwkJeworCQkJaW50IGVxdWFsID0gMDsKKwkJCWZv ciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FwYWNpdHk7IGkrKykgeworCQkJCWlmICh2Lm1baV0g PT0gaSkKKwkJCQkJZXF1YWwgPSBlcXVhbCArIDE7CisJCQkJZWxzZQorCQkJCQlicmVhazsK KwkJCX0KKwkJCWNtcF9vayhlcXVhbCwgIj09IiwgMTAsICJNZW1iZXJzIGFyZSBjb3JyZWN0 Iik7CisJCX0KKwkJdmVjdF91MTZfY2xlYXIoJnYpOworCX0KKwlwcmludGYoIlRlc3QgSU5J VCBBTkQgRklMTCBWRUNUT1IgUEFTU0VEXG4iKTsKKwlwcmludGYoIj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuIik7CisKKwlwcmludGYoIj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworCXByaW50ZigiVGVzdCBJ TklUIEFORCBGSUxMIFZFQ1RPUiB3aXRoIHplcm8gY2FwY2FpdHlcbiIpOworCXsKKwkJdmVj dF91MTZfdCB2OworCQlzaXplX3QgY2FwYWNpdHkgPSAwOworCisJCWNtcF9vaygwLCAiPT0i LCB2ZWN0X3UxNl9pbml0KCZ2LCBjYXBhY2l0eSwgTlVMTCksCisJCQkgICAiUmVzdWx0IG9m IHZlY3RfaW5pdCBpcyAwIik7CisJCWNtcF9vaygwLCAiPT0iLCB2ZWN0X3UxNl9maWxsKCZ2 LCBjYXBhY2l0eSwgTlVMTCksCisJCQkgICAiUmVzdWx0IG9mIHZlY3RfZmlsbCBpcyAwIik7 CisKKwkJY21wX29rKHYuY2FwLCAiPT0iLCAwLCAiVmVjdG9yJ3MgY2FwYWNpdHkgaXMgemVy byIpOworCQlvayh2Lm0gPT0gTlVMTCwKKwkJICAgIlBvaW50ZXIgdG8gbWVtYmVycyBpcyBO VUxMIChhcnJheSBmb3IgbWVtYmVycyBpcyBub3QgcmVzZXJ2ZWQpIik7CisJCW9rKHYuY250 ID09IDAsICJDb3VudGVyIG9mIG1lbWJlcnMgaXMgemVyby4iKTsKKwkJdmVjdF91MTZfY2xl YXIoJnYpOworCX0KKwl7CisJCXZlY3RfdTE2X3QgdjsKKwkJc2l6ZV90IGNhcGFjaXR5ID0g MTA7CisJCWNvbnN0IHVpbnQxNl90IHZhbHNbXSA9IHsgMCwgMSwgMiwgMywgNCwgNSwgNiwg NywgOCwgOSB9OworCisJCWNtcF9vaygwLCAiPT0iLCB2ZWN0X3UxNl9pbml0KCZ2LCAwLCBO VUxMKSwgIlJlc3VsdCBvZiB2ZWN0X2luaXQgaXMgMCIpOworCQljbXBfb2soMCwgIj09Iiwg dmVjdF91MTZfZmlsbCgmdiwgY2FwYWNpdHksIHZhbHMpLAorCQkJICAgIlJlc3VsdCBvZiB2 ZWN0X2ZpbGwgaXMgMCIpOworCisJCWNtcF9vayh2LmNhcCwgIj09IiwgY2FwYWNpdHksCisJ CQkgICAiVmVjdG9yJ3MgY2FwYWNpdHkgaXMgbm90IHplcm8gYWZ0ZXIgZmlsbGluZyIpOwor CQlvayh2Lm0gIT0gTlVMTCwKKwkJICAgIlBvaW50ZXIgdG8gbWVtYmVycyBpcyBub3QgTlVM TCBmYXRlciBmaWxsaW5nIChhcnJheSBmb3IgbWVtYmVycyBoYXMgYmVlbiByZXNlcnZlZCki KTsKKwkJb2sodi5jbnQgPT0gY2FwYWNpdHksICJDb3VudGVyIG9mIG1lbWJlcnMgaXMgbm90 IHplcm8gYWZ0ZXIgZmlsbGluZy4iKTsKKwkJdmVjdF91MTZfY2xlYXIoJnYpOworCX0KKwlw cmludGYoIlRlc3QgSU5JVCBBTkQgRklMTCBWRUNUT1Igd2l0aCB6ZXJvIGNhcGNhaXR5IGlz IGZpbmlzaGVkXG4iKTsKKwlwcmludGYoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT1cblxuIik7CisKKwlwcmludGYoIj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT1cbiIpOworCXByaW50ZigiVGVzdCBDT01QQVJFIFZFQ1RPUlNc biIpOworCXsKKwkJdmVjdF91MTZfdCBhLCBiLCBjLCBkOworCisJCXVpbnQxNl90IGF2YWxz W10gPSB7IDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDkgfTsKKwkJdWludDE2X3QgYnZh bHNbXSA9IHsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSB9OworCQl1aW50MTZfdCBj dmFsc1tdID0geyAxLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5IH07CisJCXVpbnQxNl90 IGR2YWxzW10gPSB7IDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDggfTsKKworCQl2ZWN0X3Ux Nl9pbml0KCZhLCAwLCBOVUxMKTsKKwkJdmVjdF91MTZfaW5pdCgmYiwgMCwgTlVMTCk7CisJ CXZlY3RfdTE2X2luaXQoJmMsIDAsIE5VTEwpOworCQl2ZWN0X3UxNl9pbml0KCZkLCAwLCBO VUxMKTsKKworCQl2ZWN0X3UxNl9maWxsKCZhLCAxMCwgYXZhbHMpOworCQl2ZWN0X3UxNl9m aWxsKCZiLCAxMCwgYnZhbHMpOworCQl2ZWN0X3UxNl9maWxsKCZjLCAxMCwgY3ZhbHMpOwor CQl2ZWN0X3UxNl9maWxsKCZkLCA5LCBkdmFscyk7CisKKwkJY21wX29rKDAsICI9PSIsIHZl Y3RfdTE2X2NvbXBhcmUoJmEsICZiKSwgIlZlY3RvcnMgYXJlIGVxdWFsIik7CisJCWNtcF9v aygtMSwgIj09IiwgdmVjdF91MTZfY29tcGFyZSgmYSwgJmMpLAorCQkJICAgIlZlY3RvcnMg YXJlIG5vdCBlcXVhbCBiZWNhdXNlIG9mIHZhbHVlIG9mIG1lbWJlcnMiKTsKKwkJY21wX29r KC0xLCAiPT0iLCB2ZWN0X3UxNl9jb21wYXJlKCZhLCAmZCksCisJCQkgICAiVmVjdG9ycyBh cmUgbm90IGVxdWFsIGJlY2F1c2Ugb2YgbnVtYmVyIG9mIG1lbWJlcnMiKTsKKwl9CisJcHJp bnRmKCJUZXN0IENPTVBBUkUgVkVDVE9SUyBpcyBmaW5pc2hlZC4gXG4iKTsKKwlwcmludGYo Ij09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuIik7CisKKwlw cmludGYoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOwor CXByaW50ZigiVGVzdCBWRUNUT1IgV0lUSCBPVVRFUiBNRU1PUllcbiIpOworCXsKKyNkZWZp bmUgVkVDVF9DQVAgMTAwCisJCXZlY3RfdTE2X3QgdmVjdDsKKwkJdWludDE2X3QgYnVmW1ZF Q1RfQ0FQXTsgLyogdWludDE2X3QgaXMgdGhlIGl0ZW0ncyB0eXBlICovCisJCXZlY3RfdTE2 X2luaXQoJnZlY3QsIFZFQ1RfQ0FQLCBidWYpOworCQljbXBfb2soCisJCQl2ZWN0LmNhcCwg Ij09IiwgVkVDVF9DQVAsCisJCQkiSW5pdGlhbGlzYXRpb24gb2YgdmVjdG9yIGhhdmluZyBl eHRlcm5hbCBtZW1vcnkgcmVzdWx0ZWQgaW4gcHJvcGVyIGNhcGFjaXR5LiIpOworCQljbXBf b2soCisJCQl2ZWN0LmNudCwgIj09IiwgMCwKKwkJCSJJbml0aWFsaXNhdGlvbiBvZiB2ZWN0 b3IgaGF2aW5nIGV4dGVybmFsIG1lbW9yeSByZXN1bHRlZCBpbiBwcm9wZXIgbnVtYmVyIG9m IGl0ZW1zLiIpOworCQlvaygoKHZvaWQgKil2ZWN0Lm0gPT0gKHZvaWQgKilidWYpLAorCQkg ICAiSW5pdGlhbGlzYXRpb24gb2YgdmVjdG9yIGhhdmluZyBleHRlcm5hbCBtZW1vcnkgc2V0 IGJ1ZiB0byB2ZWN0LT5tLiIpOworCQlvayh2ZWN0Lm1lbV9pc19vdXRlciwKKwkJICAgIklu aXRpYWxpc2F0aW9uIG9mIHZlY3RvciBoYXZpbmcgZXh0ZXJuYWwgbWVtb3J5IHNldCBtZW1f aXNfb3V0ZXIgZmxhZy4iKTsKKworCQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IFZFQ1RfQ0FQ OyBpKyspCisJCXsKKwkJCWlmICh2ZWN0X3UxNl9hcHBlbmQoJnZlY3QsIGkpICE9IDApCisJ CQkJZmFpbCgKKwkJCQkJIkVSUk9SOiBOZXcgdmFsdWUgY2FuJ3QgYmUgYXBwZW5kZWQgaW50 byB2ZWN0b3IgaGF2aW5nIGV4dGVybmFsIG1lbW9yeS4iKTsKKwkJfQorCQlwYXNzKAorCQkJ IkFsbCB2YWx1ZXMgaGF2ZSBiZWVuIGFwcGVuZGVkIGludG8gdmVjdG9yIGhhdmluZyBleHRl cm5hbCBtZW1vcnkuIik7CisKKwkJY21wX29rKHZlY3QuY250LCAiPT0iLCBWRUNUX0NBUCwg IlZlY3RvciBpcyBmdWxsLiIpOworCQljbXBfb2sodmVjdF91MTZfYXBwZW5kKCZ2ZWN0LCBW RUNUX0NBUCksICI9PSIsIC0xLAorCQkJICAgIk9uY2UgdmVjdG9yIGlzIGZ1bGwsIGV4dHJh IGl0ZW0gY2FuJ3QgYmUgYXBwZW5kZWQuIik7CisJfQorCXByaW50ZigiVGVzdCBWRUNUT1Ig V0lUSCBPVVRFUiBNRU1PUlkgaXMgZmluaXNoZWRcbiIpOworCXByaW50ZigiPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CisKKwlkb25lX3Rlc3Rpbmco KTsKK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2xpYnRhcC8uZ2l0aWdub3JlIGIvc3JjL3Rl c3QvbGlidGFwLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjJjOTVkMDQ2YzdkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbGlidGFw Ly5naXRpZ25vcmUKQEAgLTAsMCArMSwxMyBAQAorL3QvKgorIS90LyouKgorL3QvKi5leGUK Ky90LyouZ290CisqLmEKKyoubG8KKyoubworKi5zbworKi5wYwordXNyLworKi5zdz8KKy8u ZGVwcworLy5kaXJzdGFtcApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbGlidGFwLy50cmF2aXMu eW1sIGIvc3JjL3Rlc3QvbGlidGFwLy50cmF2aXMueW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi42Zjk4MDllMWI5OQotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy90ZXN0L2xpYnRhcC8udHJhdmlzLnltbApAQCAtMCwwICsxLDEzIEBACitsYW5ndWFnZTog YworCitjb21waWxlcjoKKyAgLSBnY2MKKyAgLSBjbGFuZworCitiZWZvcmVfaW5zdGFsbDog c3VkbyBhcHQtZ2V0IGluc3RhbGwgLXkgbGlidGVzdC1kaWZmZXJlbmNlcy1wZXJsCisKK2lu c3RhbGw6IG1ha2UgQ0M9JENDIGluc3RhbGwKKworc2NyaXB0OiBtYWtlIENDPSRDQyB0ZXN0 CisKK2FmdGVyX3NjcmlwdDogbWFrZSB1bmluc3RhbGwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L2xpYnRhcC9DT1BZSU5HIGIvc3JjL3Rlc3QvbGlidGFwL0NPUFlJTkcKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjY1YzVjYTg4YTY3Ci0tLSAvZGV2L251bGwK KysrIGIvc3JjL3Rlc3QvbGlidGFwL0NPUFlJTkcKQEAgLTAsMCArMSwxNjUgQEAKKyAgICAg ICAgICAgICAgICAgICBHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgICAg ICAgICAgICAgICAgICAgICAgVmVyc2lvbiAzLCAyOSBKdW5lIDIwMDcKKworIENvcHlyaWdo dCAoQykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gPGh0dHA6Ly9mc2Yu b3JnLz4KKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2 ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2lu ZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCisgIFRoaXMgdmVyc2lvbiBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluY29ycG9yYXRlcwordGhlIHRlcm1zIGFu ZCBjb25kaXRpb25zIG9mIHZlcnNpb24gMyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCitM aWNlbnNlLCBzdXBwbGVtZW50ZWQgYnkgdGhlIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgbGlz dGVkIGJlbG93LgorCisgIDAuIEFkZGl0aW9uYWwgRGVmaW5pdGlvbnMuCisKKyAgQXMgdXNl ZCBoZXJlaW4sICJ0aGlzIExpY2Vuc2UiIHJlZmVycyB0byB2ZXJzaW9uIDMgb2YgdGhlIEdO VSBMZXNzZXIKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgIkdOVSBHUEwiIHJl ZmVycyB0byB2ZXJzaW9uIDMgb2YgdGhlIEdOVQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4K KworICAiVGhlIExpYnJhcnkiIHJlZmVycyB0byBhIGNvdmVyZWQgd29yayBnb3Zlcm5lZCBi eSB0aGlzIExpY2Vuc2UsCitvdGhlciB0aGFuIGFuIEFwcGxpY2F0aW9uIG9yIGEgQ29tYmlu ZWQgV29yayBhcyBkZWZpbmVkIGJlbG93LgorCisgIEFuICJBcHBsaWNhdGlvbiIgaXMgYW55 IHdvcmsgdGhhdCBtYWtlcyB1c2Ugb2YgYW4gaW50ZXJmYWNlIHByb3ZpZGVkCitieSB0aGUg TGlicmFyeSwgYnV0IHdoaWNoIGlzIG5vdCBvdGhlcndpc2UgYmFzZWQgb24gdGhlIExpYnJh cnkuCitEZWZpbmluZyBhIHN1YmNsYXNzIG9mIGEgY2xhc3MgZGVmaW5lZCBieSB0aGUgTGli cmFyeSBpcyBkZWVtZWQgYSBtb2RlCitvZiB1c2luZyBhbiBpbnRlcmZhY2UgcHJvdmlkZWQg YnkgdGhlIExpYnJhcnkuCisKKyAgQSAiQ29tYmluZWQgV29yayIgaXMgYSB3b3JrIHByb2R1 Y2VkIGJ5IGNvbWJpbmluZyBvciBsaW5raW5nIGFuCitBcHBsaWNhdGlvbiB3aXRoIHRoZSBM aWJyYXJ5LiAgVGhlIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGlicmFyeQord2l0aCB3 aGljaCB0aGUgQ29tYmluZWQgV29yayB3YXMgbWFkZSBpcyBhbHNvIGNhbGxlZCB0aGUgIkxp bmtlZAorVmVyc2lvbiIuCisKKyAgVGhlICJNaW5pbWFsIENvcnJlc3BvbmRpbmcgU291cmNl IiBmb3IgYSBDb21iaW5lZCBXb3JrIG1lYW5zIHRoZQorQ29ycmVzcG9uZGluZyBTb3VyY2Ug Zm9yIHRoZSBDb21iaW5lZCBXb3JrLCBleGNsdWRpbmcgYW55IHNvdXJjZSBjb2RlCitmb3Ig cG9ydGlvbnMgb2YgdGhlIENvbWJpbmVkIFdvcmsgdGhhdCwgY29uc2lkZXJlZCBpbiBpc29s YXRpb24sIGFyZQorYmFzZWQgb24gdGhlIEFwcGxpY2F0aW9uLCBhbmQgbm90IG9uIHRoZSBM aW5rZWQgVmVyc2lvbi4KKworICBUaGUgIkNvcnJlc3BvbmRpbmcgQXBwbGljYXRpb24gQ29k ZSIgZm9yIGEgQ29tYmluZWQgV29yayBtZWFucyB0aGUKK29iamVjdCBjb2RlIGFuZC9vciBz b3VyY2UgY29kZSBmb3IgdGhlIEFwcGxpY2F0aW9uLCBpbmNsdWRpbmcgYW55IGRhdGEKK2Fu ZCB1dGlsaXR5IHByb2dyYW1zIG5lZWRlZCBmb3IgcmVwcm9kdWNpbmcgdGhlIENvbWJpbmVk IFdvcmsgZnJvbSB0aGUKK0FwcGxpY2F0aW9uLCBidXQgZXhjbHVkaW5nIHRoZSBTeXN0ZW0g TGlicmFyaWVzIG9mIHRoZSBDb21iaW5lZCBXb3JrLgorCisgIDEuIEV4Y2VwdGlvbiB0byBT ZWN0aW9uIDMgb2YgdGhlIEdOVSBHUEwuCisKKyAgWW91IG1heSBjb252ZXkgYSBjb3ZlcmVk IHdvcmsgdW5kZXIgc2VjdGlvbnMgMyBhbmQgNCBvZiB0aGlzIExpY2Vuc2UKK3dpdGhvdXQg YmVpbmcgYm91bmQgYnkgc2VjdGlvbiAzIG9mIHRoZSBHTlUgR1BMLgorCisgIDIuIENvbnZl eWluZyBNb2RpZmllZCBWZXJzaW9ucy4KKworICBJZiB5b3UgbW9kaWZ5IGEgY29weSBvZiB0 aGUgTGlicmFyeSwgYW5kLCBpbiB5b3VyIG1vZGlmaWNhdGlvbnMsIGEKK2ZhY2lsaXR5IHJl ZmVycyB0byBhIGZ1bmN0aW9uIG9yIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gQXBwbGlj YXRpb24KK3RoYXQgdXNlcyB0aGUgZmFjaWxpdHkgKG90aGVyIHRoYW4gYXMgYW4gYXJndW1l bnQgcGFzc2VkIHdoZW4gdGhlCitmYWNpbGl0eSBpcyBpbnZva2VkKSwgdGhlbiB5b3UgbWF5 IGNvbnZleSBhIGNvcHkgb2YgdGhlIG1vZGlmaWVkCit2ZXJzaW9uOgorCisgICBhKSB1bmRl ciB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgeW91IG1ha2UgYSBnb29kIGZhaXRoIGVm Zm9ydCB0bworICAgZW5zdXJlIHRoYXQsIGluIHRoZSBldmVudCBhbiBBcHBsaWNhdGlvbiBk b2VzIG5vdCBzdXBwbHkgdGhlCisgICBmdW5jdGlvbiBvciBkYXRhLCB0aGUgZmFjaWxpdHkg c3RpbGwgb3BlcmF0ZXMsIGFuZCBwZXJmb3JtcworICAgd2hhdGV2ZXIgcGFydCBvZiBpdHMg cHVycG9zZSByZW1haW5zIG1lYW5pbmdmdWwsIG9yCisKKyAgIGIpIHVuZGVyIHRoZSBHTlUg R1BMLCB3aXRoIG5vbmUgb2YgdGhlIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgb2YKKyAgIHRo aXMgTGljZW5zZSBhcHBsaWNhYmxlIHRvIHRoYXQgY29weS4KKworICAzLiBPYmplY3QgQ29k ZSBJbmNvcnBvcmF0aW5nIE1hdGVyaWFsIGZyb20gTGlicmFyeSBIZWFkZXIgRmlsZXMuCisK KyAgVGhlIG9iamVjdCBjb2RlIGZvcm0gb2YgYW4gQXBwbGljYXRpb24gbWF5IGluY29ycG9y YXRlIG1hdGVyaWFsIGZyb20KK2EgaGVhZGVyIGZpbGUgdGhhdCBpcyBwYXJ0IG9mIHRoZSBM aWJyYXJ5LiAgWW91IG1heSBjb252ZXkgc3VjaCBvYmplY3QKK2NvZGUgdW5kZXIgdGVybXMg b2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQsIGlmIHRoZSBpbmNvcnBvcmF0ZWQKK21h dGVyaWFsIGlzIG5vdCBsaW1pdGVkIHRvIG51bWVyaWNhbCBwYXJhbWV0ZXJzLCBkYXRhIHN0 cnVjdHVyZQorbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBvciBzbWFsbCBtYWNyb3MsIGlubGlu ZSBmdW5jdGlvbnMgYW5kIHRlbXBsYXRlcworKHRlbiBvciBmZXdlciBsaW5lcyBpbiBsZW5n dGgpLCB5b3UgZG8gYm90aCBvZiB0aGUgZm9sbG93aW5nOgorCisgICBhKSBHaXZlIHByb21p bmVudCBub3RpY2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlIG9iamVjdCBjb2RlIHRoYXQgdGhl CisgICBMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0 cyB1c2UgYXJlCisgICBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KKworICAgYikgQWNjb21w YW55IHRoZSBvYmplY3QgY29kZSB3aXRoIGEgY29weSBvZiB0aGUgR05VIEdQTCBhbmQgdGhp cyBsaWNlbnNlCisgICBkb2N1bWVudC4KKworICA0LiBDb21iaW5lZCBXb3Jrcy4KKworICBZ b3UgbWF5IGNvbnZleSBhIENvbWJpbmVkIFdvcmsgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9p Y2UgdGhhdCwKK3Rha2VuIHRvZ2V0aGVyLCBlZmZlY3RpdmVseSBkbyBub3QgcmVzdHJpY3Qg bW9kaWZpY2F0aW9uIG9mIHRoZQorcG9ydGlvbnMgb2YgdGhlIExpYnJhcnkgY29udGFpbmVk IGluIHRoZSBDb21iaW5lZCBXb3JrIGFuZCByZXZlcnNlCitlbmdpbmVlcmluZyBmb3IgZGVi dWdnaW5nIHN1Y2ggbW9kaWZpY2F0aW9ucywgaWYgeW91IGFsc28gZG8gZWFjaCBvZgordGhl IGZvbGxvd2luZzoKKworICAgYSkgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggZWFjaCBj b3B5IG9mIHRoZSBDb21iaW5lZCBXb3JrIHRoYXQKKyAgIHRoZSBMaWJyYXJ5IGlzIHVzZWQg aW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlCisgICBjb3ZlcmVk IGJ5IHRoaXMgTGljZW5zZS4KKworICAgYikgQWNjb21wYW55IHRoZSBDb21iaW5lZCBXb3Jr IHdpdGggYSBjb3B5IG9mIHRoZSBHTlUgR1BMIGFuZCB0aGlzIGxpY2Vuc2UKKyAgIGRvY3Vt ZW50LgorCisgICBjKSBGb3IgYSBDb21iaW5lZCBXb3JrIHRoYXQgZGlzcGxheXMgY29weXJp Z2h0IG5vdGljZXMgZHVyaW5nCisgICBleGVjdXRpb24sIGluY2x1ZGUgdGhlIGNvcHlyaWdo dCBub3RpY2UgZm9yIHRoZSBMaWJyYXJ5IGFtb25nCisgICB0aGVzZSBub3RpY2VzLCBhcyB3 ZWxsIGFzIGEgcmVmZXJlbmNlIGRpcmVjdGluZyB0aGUgdXNlciB0byB0aGUKKyAgIGNvcGll cyBvZiB0aGUgR05VIEdQTCBhbmQgdGhpcyBsaWNlbnNlIGRvY3VtZW50LgorCisgICBkKSBE byBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgICAgIDApIENvbnZleSB0aGUgTWluaW1h bCBDb3JyZXNwb25kaW5nIFNvdXJjZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcworICAgICAg IExpY2Vuc2UsIGFuZCB0aGUgQ29ycmVzcG9uZGluZyBBcHBsaWNhdGlvbiBDb2RlIGluIGEg Zm9ybQorICAgICAgIHN1aXRhYmxlIGZvciwgYW5kIHVuZGVyIHRlcm1zIHRoYXQgcGVybWl0 LCB0aGUgdXNlciB0bworICAgICAgIHJlY29tYmluZSBvciByZWxpbmsgdGhlIEFwcGxpY2F0 aW9uIHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mCisgICAgICAgdGhlIExpbmtlZCBWZXJz aW9uIHRvIHByb2R1Y2UgYSBtb2RpZmllZCBDb21iaW5lZCBXb3JrLCBpbiB0aGUKKyAgICAg ICBtYW5uZXIgc3BlY2lmaWVkIGJ5IHNlY3Rpb24gNiBvZiB0aGUgR05VIEdQTCBmb3IgY29u dmV5aW5nCisgICAgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UuCisKKyAgICAgICAxKSBVc2Ug YSBzdWl0YWJsZSBzaGFyZWQgbGlicmFyeSBtZWNoYW5pc20gZm9yIGxpbmtpbmcgd2l0aCB0 aGUKKyAgICAgICBMaWJyYXJ5LiAgQSBzdWl0YWJsZSBtZWNoYW5pc20gaXMgb25lIHRoYXQg KGEpIHVzZXMgYXQgcnVuIHRpbWUKKyAgICAgICBhIGNvcHkgb2YgdGhlIExpYnJhcnkgYWxy ZWFkeSBwcmVzZW50IG9uIHRoZSB1c2VyJ3MgY29tcHV0ZXIKKyAgICAgICBzeXN0ZW0sIGFu ZCAoYikgd2lsbCBvcGVyYXRlIHByb3Blcmx5IHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uCisg ICAgICAgb2YgdGhlIExpYnJhcnkgdGhhdCBpcyBpbnRlcmZhY2UtY29tcGF0aWJsZSB3aXRo IHRoZSBMaW5rZWQKKyAgICAgICBWZXJzaW9uLgorCisgICBlKSBQcm92aWRlIEluc3RhbGxh dGlvbiBJbmZvcm1hdGlvbiwgYnV0IG9ubHkgaWYgeW91IHdvdWxkIG90aGVyd2lzZQorICAg YmUgcmVxdWlyZWQgdG8gcHJvdmlkZSBzdWNoIGluZm9ybWF0aW9uIHVuZGVyIHNlY3Rpb24g NiBvZiB0aGUKKyAgIEdOVSBHUEwsIGFuZCBvbmx5IHRvIHRoZSBleHRlbnQgdGhhdCBzdWNo IGluZm9ybWF0aW9uIGlzCisgICBuZWNlc3NhcnkgdG8gaW5zdGFsbCBhbmQgZXhlY3V0ZSBh IG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlCisgICBDb21iaW5lZCBXb3JrIHByb2R1Y2VkIGJ5 IHJlY29tYmluaW5nIG9yIHJlbGlua2luZyB0aGUKKyAgIEFwcGxpY2F0aW9uIHdpdGggYSBt b2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaW5rZWQgVmVyc2lvbi4gKElmCisgICB5b3UgdXNl IG9wdGlvbiA0ZDAsIHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24gbXVzdCBhY2NvbXBh bnkKKyAgIHRoZSBNaW5pbWFsIENvcnJlc3BvbmRpbmcgU291cmNlIGFuZCBDb3JyZXNwb25k aW5nIEFwcGxpY2F0aW9uCisgICBDb2RlLiBJZiB5b3UgdXNlIG9wdGlvbiA0ZDEsIHlvdSBt dXN0IHByb3ZpZGUgdGhlIEluc3RhbGxhdGlvbgorICAgSW5mb3JtYXRpb24gaW4gdGhlIG1h bm5lciBzcGVjaWZpZWQgYnkgc2VjdGlvbiA2IG9mIHRoZSBHTlUgR1BMCisgICBmb3IgY29u dmV5aW5nIENvcnJlc3BvbmRpbmcgU291cmNlLikKKworICA1LiBDb21iaW5lZCBMaWJyYXJp ZXMuCisKKyAgWW91IG1heSBwbGFjZSBsaWJyYXJ5IGZhY2lsaXRpZXMgdGhhdCBhcmUgYSB3 b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSBzaWRlIGJ5IHNpZGUgaW4gYSBzaW5nbGUgbGli cmFyeSB0b2dldGhlciB3aXRoIG90aGVyIGxpYnJhcnkKK2ZhY2lsaXRpZXMgdGhhdCBhcmUg bm90IEFwcGxpY2F0aW9ucyBhbmQgYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoaXMKK0xpY2Vuc2Us IGFuZCBjb252ZXkgc3VjaCBhIGNvbWJpbmVkIGxpYnJhcnkgdW5kZXIgdGVybXMgb2YgeW91 cgorY2hvaWNlLCBpZiB5b3UgZG8gYm90aCBvZiB0aGUgZm9sbG93aW5nOgorCisgICBhKSBB Y2NvbXBhbnkgdGhlIGNvbWJpbmVkIGxpYnJhcnkgd2l0aCBhIGNvcHkgb2YgdGhlIHNhbWUg d29yayBiYXNlZAorICAgb24gdGhlIExpYnJhcnksIHVuY29tYmluZWQgd2l0aCBhbnkgb3Ro ZXIgbGlicmFyeSBmYWNpbGl0aWVzLAorICAgY29udmV5ZWQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoaXMgTGljZW5zZS4KKworICAgYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhl IGNvbWJpbmVkIGxpYnJhcnkgdGhhdCBwYXJ0IG9mIGl0CisgICBpcyBhIHdvcmsgYmFzZWQg b24gdGhlIExpYnJhcnksIGFuZCBleHBsYWluaW5nIHdoZXJlIHRvIGZpbmQgdGhlCisgICBh Y2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCisKKyAgNi4g UmV2aXNlZCBWZXJzaW9ucyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlLgorCisgIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2 aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBTdWNoIG5ldwordmVyc2lvbnMgd2ls bCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5 CitkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5z LgorCisgIEVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24g bnVtYmVyLiBJZiB0aGUKK0xpYnJhcnkgYXMgeW91IHJlY2VpdmVkIGl0IHNwZWNpZmllcyB0 aGF0IGEgY2VydGFpbiBudW1iZXJlZCB2ZXJzaW9uCitvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlICJvciBhbnkgbGF0ZXIgdmVyc2lvbiIKK2FwcGxpZXMgdG8g aXQsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQKK2Nv bmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgcHVibGlzaGVkIHZlcnNpb24gb3Igb2YgYW55IGxh dGVyIHZlcnNpb24KK3B1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LiBJZiB0aGUgTGlicmFyeSBhcyB5b3UKK3JlY2VpdmVkIGl0IGRvZXMgbm90IHNwZWNpZnkg YSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgR05VIExlc3NlcgorR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gb2YgdGhlIEdOVSBMZXNzZXIKK0dl bmVyYWwgUHVibGljIExpY2Vuc2UgZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbi4KKworICBJZiB0aGUgTGlicmFyeSBhcyB5b3UgcmVjZWl2ZWQgaXQg c3BlY2lmaWVzIHRoYXQgYSBwcm94eSBjYW4gZGVjaWRlCit3aGV0aGVyIGZ1dHVyZSB2ZXJz aW9ucyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHNoYWxsCith cHBseSwgdGhhdCBwcm94eSdzIHB1YmxpYyBzdGF0ZW1lbnQgb2YgYWNjZXB0YW5jZSBvZiBh bnkgdmVyc2lvbiBpcworcGVybWFuZW50IGF1dGhvcml6YXRpb24gZm9yIHlvdSB0byBjaG9v c2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUKK0xpYnJhcnkuCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9saWJ0YXAvSU5TVEFMTCBiL3NyYy90ZXN0L2xpYnRhcC9JTlNUQUxMCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41YjJjNzZkZjNkNwotLS0gL2Rldi9udWxs CisrKyBiL3NyYy90ZXN0L2xpYnRhcC9JTlNUQUxMCkBAIC0wLDAgKzEsNDEgQEAKK1RvIGlu c3RhbGwgbGlidGFwIG9uIGEgVW5peC1saWtlIHN5c3RlbToKKworICAgICQgbWFrZQorICAg ICQgbWFrZSBjaGVjaworICAgICQgbWFrZSBpbnN0YWxsCisKK1RvIGNvbXBpbGUgd2l0aCBn Y2MgLWFuc2ksIHJ1bjoKKworICAgICQgQU5TST0xIG1ha2UKKworVG8gaW5zdGFsbCB0byBh IGRpZmZlcmVudCBkaXJlY3RvcnkgdGhhbiAvdXNyL2xvY2FsLCBzdXBwbHkgdGhlCitQUkVG SVggdmFyaWFibGUgdG8gbWFrZToKKworICAgICQgUFJFRklYPS91c3IgbWFrZSBpbnN0YWxs CisKK09uIFdpbmRvd3MsIHRoZSBsaWJyYXJ5IGNhbiBiZSBjcmVhdGVkIGJ5IGZpcnN0IHNl dHRpbmcgdXAgdGhlCitjb3JyZWN0IGRldmVsb3BtZW50IGVudmlyb25tZW50IHZhcmlhYmxl cy4gVXN1YWxseSB0aGlzIGlzIGRvbmUgYnkKK3J1bm5pbmcgdmN2YXJzMzIuYmF0IGluY2x1 ZGVkIGluIHRoZSBWaXN1YWwgU3R1ZGlvIGRpc3RyaWJ1dGlvbi4KK1lvdSBzaG91bGQgYWxz byBpbnN0YWxsIGdudSBtYWtlIHdoaWNoIGNhbiBiZSBmb3VuZCBhdAoraHR0cDovL2dudXdp bjMyLnNvdXJjZWZvcmdlLm5ldC9wYWNrYWdlcy9tYWtlLmh0bS4gT25jZSB0aGlzIGlzCitk b25lLCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gcnVuIHRoZSBmb2xsb3dpbmc6CisKKyAgICA+ IG1ha2UgLWYgTWFrZWZpbGUud2luCisKK0lmIHlvdSB3YW50IHRvIHVzZSBpdCBkaXJlY3Rs eSBpbiBhbm90aGVyIHByb2plY3QsIHlvdSBjYW4gY29weSB0YXAuYworYW5kIHRhcC5oIHRo ZXJlIGFuZCBpdCBzaG91bGRuJ3QgaGF2ZSBhIHByb2JsZW0gY29tcGlsaW5nLgorCisgICAg JCBscworICAgIHRhcC5jIHRhcC5oIHRlc3QuYworICAgICQgY2F0IHRlc3QuYworICAgICNp bmNsdWRlICJ0YXAuaCIKKyAgICBpbnQgbWFpbiAoKSB7CisgICAgICAgIHBsYW4oMSk7Cisg ICAgICAgIG9rKDUwICsgNSwgImZvbyAlcyIsICJiYXIiKTsKKyAgICAgICAgZG9uZV90ZXN0 aW5nKCk7CisgICAgfQorICAgICQgZ2NjIHRlc3QuYyB0YXAuYworICAgICQgYS5vdXQKKyAg ICAxLi4xCisgICAgb2sgMSAtIGZvbyBiYXIKKwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbGli dGFwL01ha2VmaWxlIGIvc3JjL3Rlc3QvbGlidGFwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mMDIwYzI4MzlhOAotLS0gL2Rldi9udWxsCisr KyBiL3NyYy90ZXN0L2xpYnRhcC9NYWtlZmlsZQpAQCAtMCwwICsxLDczIEBACitDQyA/PSBn Y2MKK0NGTEFHUyArPSAtV2FsbCAtSS4gLWZQSUMKK1BSRUZJWCA/PSAkKERFU1RESVIpL3Vz ci9sb2NhbAorVEVTVFMgPSAkKHBhdHN1YnN0ICUuYywgJSwgJCh3aWxkY2FyZCB0LyouYykp CisKK2lmZGVmIEFOU0kKKwkjIC1EX0JTRF9TT1VSQ0UgZm9yIE1BUF9BTk9OWU1PVVMKKwlD RkxBR1MgKz0gLWFuc2kgLURfQlNEX1NPVVJDRQorCUxETElCUyArPSAtbGJzZC1jb21wYXQK K2VuZGlmCisKKyU6CisJJChDQykgJChMREZMQUdTKSAkKFRBUkdFVF9BUkNIKSAkKGZpbHRl ciAlLm8gJS5hICUuc28sICReKSAkKExETElCUykgLW8gJEAKKworJS5vOgorCSQoQ0MpICQo Q0ZMQUdTKSAkKENQUEZMQUdTKSAkKFRBUkdFVF9BUkNIKSAtYyAkKGZpbHRlciAlLmMsICRe KSAkKExETElCUykgLW8gJEAKKworJS5hOgorCSQoQVIpIHJjcyAkQCAkKGZpbHRlciAlLm8s ICReKQorCislLnNvOgorCSQoQ0MpIC1zaGFyZWQgJChMREZMQUdTKSAkKFRBUkdFVF9BUkNI KSAkKGZpbHRlciAlLm8sICReKSAkKExETElCUykgLW8gJEAKKworYWxsOiBsaWJ0YXAuYSBs aWJ0YXAuc28gdGFwLnBjIHRlc3RzCisKK3RhcC5wYzoKKwlAZWNobyBnZW5lcmF0aW5nIHRh cC5wYworCUBlY2hvICdwcmVmaXg9JyQoUFJFRklYKSA+IHRhcC5wYworCUBlY2hvICdleGVj X3ByZWZpeD0kJHtwcmVmaXh9JyA+PiB0YXAucGMKKwlAZWNobyAnbGliZGlyPSQke3ByZWZp eH0vbGliJyA+PiB0YXAucGMKKwlAZWNobyAnaW5jbHVkZWRpcj0kJHtwcmVmaXh9L2luY2x1 ZGUnID4+IHRhcC5wYworCUBlY2hvICcnID4+IHRhcC5wYworCUBlY2hvICdOYW1lOiBsaWJ0 YXAnID4+IHRhcC5wYworCUBlY2hvICdEZXNjcmlwdGlvbjogV3JpdGUgdGVzdHMgaW4gQycg Pj4gdGFwLnBjCisJQGVjaG8gJ1ZlcnNpb246IDAuMS4wJyA+PiB0YXAucGMKKwlAZWNobyAn VVJMOiBodHRwczovL2dpdGh1Yi5jb20vem9yZ25heC9saWJ0YXAnID4+IHRhcC5wYworCUBl Y2hvICdMaWJzOiAtTCQke2xpYmRpcn0gLWx0YXAnID4+IHRhcC5wYworCUBlY2hvICdDZmxh Z3M6IC1JJCR7aW5jbHVkZWRpcn0nID4+IHRhcC5wYworCitsaWJ0YXAuYTogdGFwLm8KKwor bGlidGFwLnNvOiB0YXAubworCit0YXAubzogdGFwLmMgdGFwLmgKKwordGVzdHM6ICQoVEVT VFMpCisKKyQoVEVTVFMpOiAlOiAlLm8gbGlidGFwLmEKKworJChwYXRzdWJzdCAlLCAlLm8s ICQoVEVTVFMpKTogJS5vOiAlLmMgdGFwLmgKKwkkKENDKSAkKENGTEFHUykgLU8wICQoQ1BQ RkxBR1MpICQoVEFSR0VUX0FSQ0gpIC1jICQoZmlsdGVyICUuYywgJF4pICQoTERMSUJTKSAt byAkQAorCitjbGVhbjoKKwlybSAtcmYgKi5vIHQvKi5vIHRhcC5wYyBsaWJ0YXAuYSBsaWJ0 YXAuc28gJChURVNUUykKKworaW5zdGFsbDogbGlidGFwLmEgdGFwLmggbGlidGFwLnNvIHRh cC5wYworCW1rZGlyIC1wICQoUFJFRklYKS9saWIgJChQUkVGSVgpL2luY2x1ZGUgJChQUkVG SVgpL2xpYi9wa2djb25maWcKKwlpbnN0YWxsIC1jIGxpYnRhcC5hICQoUFJFRklYKS9saWIK KwlpbnN0YWxsIC1jIGxpYnRhcC5zbyAkKFBSRUZJWCkvbGliCisJaW5zdGFsbCAtYyB0YXAu cGMgJChQUkVGSVgpL2xpYi9wa2djb25maWcKKwlpbnN0YWxsIC1jIHRhcC5oICQoUFJFRklY KS9pbmNsdWRlCisKK3VuaW5zdGFsbDoKKwlybSAkKFBSRUZJWCkvbGliL2xpYnRhcC5hICQo UFJFRklYKS9saWIvbGlidGFwLnNvICQoUFJFRklYKS9pbmNsdWRlL3RhcC5oCisKK2Rpc3Q6 CisJcm0gbGlidGFwLnppcAorCXppcCAtciBsaWJ0YXAgKgorCitjaGVjayB0ZXN0OiBhbGwK KwkuL3QvdGVzdAorCisuUEhPTlk6IGFsbCBjbGVhbiBpbnN0YWxsIHVuaW5zdGFsbCBkaXN0 IGNoZWNrIHRlc3QgdGVzdHMKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2xpYnRhcC9NYWtlZmls ZS53aW4gYi9zcmMvdGVzdC9saWJ0YXAvTWFrZWZpbGUud2luCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42OTRkNjc5YTFiMQotLS0gL2Rldi9udWxsCisrKyBi L3NyYy90ZXN0L2xpYnRhcC9NYWtlZmlsZS53aW4KQEAgLTAsMCArMSwzNyBAQAorQ0ZMQUdT ID0gL1ppIC9XYWxsIC93ZDQyNTUgL3dkNDk5NiAvd2Q0MTI3IC93ZDQ4MjAgL3dkNDEwMCAv d2Q0NjE5IFwKKwkJIC93ZDQ1MTQgL3dkNDY2OCAvSS4KK0NDID0gY2wgL25vbG9nbworVEVT VFMgPSAkKHBhdHN1YnN0ICUuYywgJS5leGUsICQod2lsZGNhcmQgdC8qLmMpKQorCislLmV4 ZToKKwkkKENDKSAkKExERkxBR1MpICQoZmlsdGVyICUub2JqICUubGliICUuZGxsLCAkXikg JChMRExJQlMpIC9GZSAkQAorCislLm86CisJJChDQykgJChDRkxBR1MpICQoQ1BQRkxBR1Mp IC9jICQoZmlsdGVyICUuYywgJF4pICQoTERMSUJTKSAvRm8gJEAKKworJS5saWI6CisJbGli IC9ub2xvZ28gL291dDokQCAkKGZpbHRlciAlLm9iaiwgJF4pCisKKyUuZGxsOgorCWxpYiAv bm9sb2dvIC9vdXQ6JEAgJChmaWx0ZXIgJS5vYmosICReKQorCithbGw6IHRhcC5saWIgdGVz dHMKKwordGFwLmxpYjogdGFwLm9iagorCit0YXAub2JqOiB0YXAuYyB0YXAuaAorCit0ZXN0 czogJChURVNUUykKKworJChURVNUUyk6ICUuZXhlOiAlLm9iaiB0YXAubGliCisKKyQocGF0 c3Vic3QgJS5leGUsICUub2JqLCAkKFRFU1RTKSk6ICUub2JqOiAlLmMgdGFwLmgKKworY2xl YW46CisJcm0gLXJmICoub2JqIHQvKi5vYmogdGFwLmxpYiAkKFRFU1RTKQorCitjaGVjayB0 ZXN0OiBhbGwKKwlwcm92ZQorCisuUEhPTlk6IGFsbCBjbGVhbiBjaGVjayB0ZXN0IHRlc3Rz CisKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2xpYnRhcC9SRUFETUUubWQgYi9zcmMvdGVzdC9s aWJ0YXAvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li41MzMyZDUyNmMwOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L2xpYnRhcC9SRUFE TUUubWQKQEAgLTAsMCArMSwyNjggQEAKK05BTUUKKz09PT0KKworbGlidGFwIC0gV3JpdGUg dGVzdHMgaW4gQworCitTWU5PUFNJUworPT09PT09PT0KKworICAgICNpbmNsdWRlIDx0YXAu aD4KKworICAgIGludCBtYWluICgpIHsKKyAgICAgICAgcGxhbig1KTsKKyAgICAgICAgaW50 IGJyb256ZSA9IDEsIHNpbHZlciA9IDIsIGdvbGQgPSAzOworICAgICAgICBvayhicm9uemUg PCBzaWx2ZXIsICJicm9uemUgaXMgbGVzcyB0aGFuIHNpbHZlciIpOworICAgICAgICBvayhi cm9uemUgPiBzaWx2ZXIsICJub3QgcXVpdGUiKTsKKyAgICAgICAgaXMoImdvbGQiLCAiZ29s ZCIsICJnb2xkIGlzIGdvbGQiKTsKKyAgICAgICAgY21wX29rKHNpbHZlciwgIjwiLCBnb2xk LCAiJWQgPD0gJWQiLCBzaWx2ZXIsIGdvbGQpOworICAgICAgICBsaWtlKCJwbGF0aW51bSIs ICIuKmludW0iLCAicGxhdGludW0gbWF0Y2hlcyAuKmludW0iKTsKKyAgICAgICAgZG9uZV90 ZXN0aW5nKCk7CisgICAgfQorCityZXN1bHRzIGluOgorCisgICAgMS4uNQorICAgIG9rIDEg LSBicm9uemUgaXMgbGVzcyB0aGFuIHNpbHZlcgorICAgIG5vdCBvayAyIC0gbm90IHF1aXRl CisgICAgIyAgIEZhaWxlZCB0ZXN0ICdub3QgcXVpdGUnCisgICAgIyAgIGF0IHQvc3lub3Bz aXMuYyBsaW5lIDcuCisgICAgb2sgMyAtIGdvbGQgaXMgZ29sZAorICAgIG9rIDQgLSAyIDw9 IDMKKyAgICBvayA1IC0gcGxhdGludW0gbWF0Y2hlcyAuKmludW0KKyAgICAjIExvb2tzIGxp a2UgeW91IGZhaWxlZCAxIHRlc3Qgb2YgNSBydW4uCisKK0RFU0NSSVBUSU9OCis9PT09PT09 PT09PQorCit0YXAgaXMgYW4gZWFzeSB0byByZWFkIGFuZCBlYXN5IHRvIHdyaXRlIHdheSBv ZiBjcmVhdGluZyB0ZXN0cyBmb3IKK3lvdXIgc29mdHdhcmUuIFRoaXMgbGlicmFyeSBjcmVh dGVzIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvCitnZW5lcmF0ZSBpdCBmb3IgeW91 ciBDIHByb2dyYW1zLiBJdCBpcyBpbXBsZW1lbnRlZCB1c2luZyBtYWNyb3MKK3RoYXQgaW5j bHVkZSBmaWxlIGFuZCBsaW5lIGluZm8gYXV0b21hdGljYWxseSwgYW5kIG1ha2VzIGl0IHNv IHRoYXQKK3RoZSBmb3JtYXQgbWVzc2FnZSBvZiBlYWNoIHRlc3QgaXMgb3B0aW9uYWwuIEl0 IGlzIG1vc3RseSBiYXNlZCBvbgordGhlIFRlc3Q6Ok1vcmUgUGVybCBtb2R1bGUuCisKK0lO U1RBTEwKKz09PT09PT0KKworT24gKipVbml4Kiogc3lzdGVtczoKKworICAgICQgbWFrZQor ICAgICQgbWFrZSBpbnN0YWxsCisKK0ZvciBtb3JlIGRldGFpbGVkIGluc3RhbGxhdGlvbiBp bnN0cnVjdGlvbnMgKGVnLCBmb3IgKipXaW5kb3dzKiopLCBzZWUgYElOU1RBTExgLgorCitG VU5DVElPTlMKKz09PT09PT09PQorCistICAgcGxhbih0ZXN0cykKKy0gICBwbGFuKE5PX1BM QU4pCistICAgcGxhbihTS0lQX0FMTCk7CistICAgcGxhbihTS0lQX0FMTCwgZm10LCAuLi4p CisKKyAgICBVc2UgdGhpcyB0byBzdGFydCBhIHNlcmllcyBvZiB0ZXN0cy4gV2hlbiB5b3Ug a25vdyBob3cgbWFueSB0ZXN0cyB0aGVyZQorICAgIHdpbGwgYmUsIHlvdSBjYW4gcHV0IGEg bnVtYmVyIGFzIGEgbnVtYmVyIG9mIHRlc3RzIHlvdSBleHBlY3QgdG8gcnVuLiBJZgorICAg IHlvdSBkbyBub3Qga25vdyBob3cgbWFueSB0ZXN0cyB0aGVyZSB3aWxsIGJlLCB5b3UgY2Fu IHVzZSBwbGFuKE5PX1BMQU4pCisgICAgb3Igbm90IGNhbGwgdGhpcyBmdW5jdGlvbi4gV2hl biB5b3UgcGFzcyBpdCBhIG51bWJlciBvZiB0ZXN0cyB0byBydW4sIGEKKyAgICBtZXNzYWdl IHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZyB3aWxsIGFwcGVhciBpbiB0aGUgb3V0cHV0Ogor CisgICAgICAgIDEuLjUKKworICAgIElmIHlvdSBwYXNzIGl0IFNLSVBfQUxMLCB0aGUgd2hv bGUgdGVzdCB3aWxsIGJlIHNraXBwZWQuCisKKy0gICBvayh0ZXN0KQorLSAgIG9rKHRlc3Qs IGZtdCwgLi4uKQorCisgICAgU3BlY2lmeSBhIHRlc3QuIHRoZSB0ZXN0IGNhbiBiZSBhbnkg c3RhdGVtZW50IHJldHVybmluZyBhIHRydWUgb3IgZmFsc2UKKyAgICB2YWx1ZS4gWW91IG1h eSBvcHRpb25hbGx5IHBhc3MgYSBmb3JtYXQgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHRlc3Qu CisKKyAgICAgICAgb2sociA9IHJlYWRlcl9uZXcoIk9mIE1pY2UgYW5kIE1lbiIpLCAiY3Jl YXRlIGEgbmV3IHJlYWRlciIpOworICAgICAgICBvayhyZWFkZXJfZ29fdG9fcGFnZShyLCA1 NSksICJjYW4gdHVybiB0aGUgcGFnZSIpOworICAgICAgICBvayhyLT5wYWdlID09IDU1LCAi cGFnZSB0dXJuZWQgdG8gdGhlIHJpZ2h0IG9uZSIpOworCisgICAgU2hvdWxkIHByaW50IG91 dDoKKworICAgICAgICBvayAxIC0gY3JlYXRlIGEgbmV3IHJlYWRlcgorICAgICAgICBvayAy IC0gY2FuIHR1cm4gdGhlIHBhZ2UKKyAgICAgICAgb2sgMyAtIHBhZ2UgdHVybmVkIHRvIHRo ZSByaWdodCBvbmUKKworICAgIE9uIGZhaWx1cmUsIGEgZGlhZ25vc3RpYyBtZXNzYWdlIHdp bGwgYmUgcHJpbnRlZCBvdXQuCisKKyAgICAgICAgbm90IG9rIDMgLSBwYWdlIHR1cm5lZCB0 byB0aGUgcmlnaHQgb25lCisgICAgICAgICMgICBGYWlsZWQgdGVzdCAncGFnZSB0dXJuZWQg dG8gdGhlIHJpZ2h0IG9uZScKKyAgICAgICAgIyAgIGF0IHJlYWRlci5jIGxpbmUgMTMuCisK Ky0gICBpcyhnb3QsIGV4cGVjdGVkKQorLSAgIGlzKGdvdCwgZXhwZWN0ZWQsIGZtdCwgLi4u KQorLSAgIGlzbnQoZ290LCB1bmV4cGVjdGVkKQorLSAgIGlzbnQoZ290LCB1bmV4cGVjdGVk LCBmbXQsIC4uLikKKworICAgIFRlc3RzIHRoYXQgdGhlIHN0cmluZyB5b3UgZ290IGlzIHdo YXQgeW91IGV4cGVjdGVkLiB3aXRoIGlzbnQsIGl0IGlzIHRoZQorICAgIHJldmVyc2UuCisK KyAgICAgICAgaXMoInRoaXMiLCAidGhhdCIsICJ0aGlzIGlzIHRoYXQiKTsKKworICAgIHBy aW50czoKKworICAgICAgICBub3Qgb2sgMSAtIHRoaXMgaXMgdGhhdAorICAgICAgICAjICAg RmFpbGVkIHRlc3QgJ3RoaXMgaXMgdGhhdCcKKyAgICAgICAgIyAgIGF0IGlzLmMgbGluZSA2 LgorICAgICAgICAjICAgICAgICAgIGdvdDogJ3RoaXMnCisgICAgICAgICMgICAgIGV4cGVj dGVkOiAndGhhdCcKKworLSAgIGNtcF9vayhhLCBvcCwgYikKKy0gICBjbXBfb2soYSwgb3As IGIsIGZtdCwgLi4uKQorCisgICAgQ29tcGFyZXMgdHdvIGludHMgd2l0aCBhbnkgYmluYXJ5 IG9wZXJhdG9yIHRoYXQgZG9lc24ndCByZXF1aXJlIGFuIGx2YWx1ZS4KKyAgICBUaGlzIGlz IG5pY2UgdG8gdXNlIHNpbmNlIGl0IHByb3ZpZGVzIGEgYmV0dGVyIGVycm9yIG1lc3NhZ2Ug dGhhbiBhbgorICAgIGVxdWl2YWxlbnQgb2suCisKKyAgICAgICAgY21wX29rKDQyMCwgIj4i LCA2NjYpOworCisgICAgcHJpbnRzOgorCisgICAgICAgIG5vdCBvayAxCisgICAgICAgICMg ICBGYWlsZWQgdGVzdCBhdCBjbXBvay5jIGxpbmUgNS4KKyAgICAgICAgIyAgICAgNDIwCisg ICAgICAgICMgICAgICAgICA+CisgICAgICAgICMgICAgIDY2NgorCistICAgY21wX21lbShn b3QsIGV4cGVjdGVkLCBuKQorLSAgIGNtcF9tZW0oZ290LCBleHBlY3RlZCwgbiwgZm10LCAu Li4pCisKKyAgICBUZXN0cyB0aGF0IHRoZSBmaXJzdCBuIGJ5dGVzIG9mIHRoZSBtZW1vcnkg eW91IGdvdCBpcyB3aGF0IHlvdSBleHBlY3RlZC4KKyAgICBOVUxMIHBvaW50ZXJzIGZvciBn b3QgYW5kIGV4cGVjdGVkIGFyZSBoYW5kbGVkIChpZiBlaXRoZXIgaXMgTlVMTCwKKyAgICB0 aGUgdGVzdCBmYWlscyksIGJ1dCB5b3UgbmVlZCB0byBlbnN1cmUgbiBpcyBub3QgdG9vIGxh cmdlLgorCisgICAgICAgIGNoYXIgKmEgPSAiZm9vIjsKKyAgICAgICAgY2hhciAqYiA9ICJi YXIiOworICAgICAgICBjbXBfbWVtKGEsIGIsIDMpCisKKyAgICBwcmludHMKKworICAgICAg ICBub3Qgb2sgMQorICAgICAgICAjICAgRmFpbGVkIHRlc3QgYXQgdC9jbXBfbWVtLmMgbGlu ZSA5LgorICAgICAgICAjICAgICBEaWZmZXJlbmNlIHN0YXJ0cyBhdCBvZmZzZXQgMAorICAg ICAgICAjICAgICAgICAgIGdvdDogMHg2NgorICAgICAgICAjICAgICBleHBlY3RlZDogMHg2 MgorCistICAgbGlrZShnb3QsIGV4cGVjdGVkKQorLSAgIGxpa2UoZ290LCBleHBlY3RlZCwg Zm10LCAuLi4pCistICAgdW5saWtlKGdvdCwgdW5leHBlY3RlZCkKKy0gICB1bmxpa2UoZ290 LCB1bmV4cGVjdGVkLCBmbXQsIC4uLikKKworICAgIFRlc3RzIHRoYXQgdGhlIHN0cmluZyB5 b3UgZ290IG1hdGNoZXMgdGhlIGV4cGVjdGVkIGV4dGVuZGVkIFBPU0lYIHJlZ2V4LgorICAg IHVubGlrZSBpcyB0aGUgcmV2ZXJzZS4gVGhlc2UgbWFjcm9zIGFyZSB0aGUgZXF1aXZhbGVu dCBvZiBhIHNraXAgb24KKyAgICBXaW5kb3dzLgorCisgICAgICAgIGxpa2UoInN0cmFuZ2Vy IiwgIl5zLihyKS4qXFwxJCIsICJtYXRjaGVzIHRoZSByZWdleCIpOworCisgICAgcHJpbnRz OgorCisgICAgICAgIG9rIDEgLSBtYXRjaGVzIHRoZSByZWdleAorCistICAgcGFzcygpCist ICAgcGFzcyhmbXQsIC4uLikKKy0gICBmYWlsKCkKKy0gICBmYWlsKGZtdCwgLi4uKQorCisg ICAgU3BlY2l5IHRoYXQgYSB0ZXN0IHN1Y2NlZWRlZCBvciBmYWlsZWQuIFVzZSB0aGVzZSB3 aGVuIHRoZSBzdGF0ZW1lbnQgaXMKKyAgICBsb25nZXIgdGhhbiB5b3UgY2FuIGZpdCBpbnRv IHRoZSBhcmd1bWVudCBnaXZlbiB0byBhbiBvaygpIHRlc3QuCisKKy0gICBkaWVzX29rKGNv ZGUpCistICAgZGllc19vayhjb2RlLCBmbXQsIC4uLikKKy0gICBsaXZlc19vayhjb2RlKQor LSAgIGxpdmVzX29rKGNvZGUsIGZtdCwgLi4uKQorCisgICAgVGVzdHMgd2hldGhlciB0aGUg Z2l2ZW4gY29kZSBjYXVzZXMgeW91ciBwcm9ncmFtIHRvIGV4aXQuIFRoZSBjb2RlIGdldHMK KyAgICBwYXNzZWQgdG8gYSBtYWNybyB0aGF0IHdpbGwgdGVzdCBpdCBpbiBhIGZvcmtlZCBw cm9jZXNzLiBJZiB0aGUgY29kZQorICAgIHN1Y2NlZWRzIGl0IHdpbGwgYmUgZXhlY3V0ZWQg aW4gdGhlIHBhcmVudCBwcm9jZXNzLiBZb3UgY2FuIHRlc3QgdGhpbmdzCisgICAgbGlrZSBw YXNzaW5nIGEgZnVuY3Rpb24gYSBudWxsIHBvaW50ZXIgYW5kIG1ha2Ugc3VyZSBpdCBkb2Vz bnQKKyAgICBkZXJlZmVyZW5jZSBpdCBhbmQgY3Jhc2guCisKKyAgICAgICAgZGllc19vayh7 YWJvcnQoKTt9LCAiYWJvcnQgZG9lcyBjbG9zZSB5b3VyIHByb2dyYW0iKTsKKyAgICAgICAg ZGllc19vayh7aW50IHggPSAwLzA7fSwgImRpdmlkZSBieSB6ZXJvIGNyYXNoIik7CisgICAg ICAgIGxpdmVzX29rKHtwb3coMy4wLCA1LjApO30sICJub3RoaW5nIHdyb25nIHdpdGggdGFr aW5nIDMqKjUiKTsKKworICAgIE9uIFdpbmRvd3MsIHRoZXNlIG1hY3JvcyBhcmUgdGhlIGVx dWl2YWxlbnQgb2YgYSBza2lwLgorCistICAgZG9uZV90ZXN0aW5nKCkKKworICAgIFN1bW1h cml6ZXMgdGhlIHRlc3RzIHRoYXQgb2NjdXJyZWQgYW5kIGV4aXRzIHRoZSBtYWluIGZ1bmN0 aW9uLiBJZgorICAgIHRoZXJlIHdhcyBubyBwbGFuLCBpdCB3aWxsIHByaW50IG91dCB0aGUg bnVtYmVyIG9mIHRlc3RzIGFzLgorCisgICAgICAgIDEuLjUKKworICAgIEl0IHdpbGwgYWxz byBwcmludCBhIGRpYWdub3N0aWMgbWVzc2FnZSBhYm91dCBob3cgbWFueQorICAgIGZhaWx1 cmVzIHRoZXJlIHdlcmUuCisKKyAgICAgICAgIyBMb29rcyBsaWtlIHlvdSBmYWlsZWQgMiB0 ZXN0cyBvZiAzIHJ1bi4KKworICAgIElmIGFsbCBwbGFubmVkIHRlc3RzIHdlcmUgc3VjY2Vz c2Z1bCwgaXQgd2lsbCByZXR1cm4gMC4gSWYgYW55CisgICAgdGVzdCBmYWlscywgaXQgd2ls bCByZXR1cm4gMS4gSWYgdGhleSBhbGwgcGFzc2VkLCBidXQgdGhlcmUKKyAgICB3ZXJlIG1p c3NpbmcgdGVzdHMsIGl0IHdpbGwgcmV0dXJuIDIuCisKKy0gICBkaWFnKGZtdCwgLi4uKQor CisgICAgcHJpbnQgb3V0IGEgbWVzc2FnZSB0byB0aGUgdGFwIG91dHB1dCBvbiBzdGRvdXQu IEVhY2ggbGluZSBpcworICAgIHByZWNlZWRlZCBieSBhICIjICIgc28gdGhhdCB5b3Uga25v dyBpdHMgYSBkaWFnbm9zdGljIG1lc3NhZ2UuCisKKyAgICAgICAgZGlhZygiVGhpcyBpc1xu YSBkaWFnXG50byBkZXNjcmliZVxuc29tZXRoaW5nLiIpOworCisgICAgcHJpbnRzOgorCisg ICAgICAgICMgVGhpcyBpcworICAgICAgICAjIGEgZGlhZworICAgICAgICAjIHRvIGRlc2Ny aWJlCisgICAgICAgICMgc29tZXRoaW5nCisKKyAgICBvaygpIGFuZCB0aGlzIGZ1bmN0aW9u IHJldHVybiBhbiBpbnQgc28geW91IGNhbiB1c2UgaXQgbGlrZToKKworICAgICAgICBvaygw KSB8fCBkaWFnKCJkb2ghIik7CisKKy0gICBza2lwKHRlc3QsIG4pCistICAgc2tpcCh0ZXN0 LCBuLCBmbXQsIC4uLikKKy0gICBlbmRfc2tpcAorCisgICAgU2tpcCBhIHNlcmllcyBvZiBu IHRlc3RzIGlmIHRlc3QgaXMgdHJ1ZS4gWW91IG1heSBnaXZlIGEgcmVhc29uIHdoeSB5b3Ug YXJlCisgICAgc2tpcHBpbmcgdGhlbSBvciBub3QuIFRoZSAocG9zc2libHkpIHNraXBwZWQg dGVzdHMgbXVzdCBvY2N1ciBiZXR3ZWVuIHRoZQorICAgIHNraXAgYW5kIGVuZF9za2lwIG1h Y3Jvcy4KKworICAgICAgICBza2lwKFRSVUUsIDIpOworICAgICAgICBvaygxKTsKKyAgICAg ICAgb2soMCk7CisgICAgICAgIGVuZF9za2lwOworCisgICAgcHJpbnRzOgorCisgICAgICAg IG9rIDEgIyBza2lwCisgICAgICAgIG9rIDIgIyBza2lwCisKKy0gICB0b2RvKCkKKy0gICB0 b2RvKGZtdCwgLi4uKQorLSAgIGVuZF90b2RvCisKKyAgICBTcGVjaWZpZXMgYSBzZXJpZXMg b2YgdGVzdHMgdGhhdCB5b3UgZXhwZWN0IHRvIGZhaWwgYmVjYXVzZSB0aGV5IGFyZSBub3QK KyAgICB5ZXQgaW1wbGVtZW50ZWQuCisKKyAgICAgICAgdG9kbygpCisgICAgICAgIG9rKDAp OworICAgICAgICBlbmRfdG9kbzsKKworICAgIHByaW50czoKKworICAgICAgICBub3Qgb2sg MSAjIFRPRE8KKyAgICAgICAgIyAgIEZhaWxlZCAoVE9ETykgdGVzdCBhdCB0b2RvLmMgbGlu ZSA3CisKKy0gICBCQUlMX09VVCgpCistICAgQkFJTF9PVVQoZm10LCAuLi4pCisKKyAgICBJ bW1lZGlhdGVseSBzdG9wcyBhbGwgdGVzdGluZy4KKworICAgICAgICBCQUlMX09VVCgiQ2Fu J3QgZ28gbm8gZnVydGhlciIpOworCisgICAgcHJpbnRzCisKKyAgICAgICAgQmFpbCBvdXQh ICBDYW4ndCBnbyBubyBmdXJ0aGVyCisKKyAgICBhbmQgZXhpdHMgd2l0aCAyNTUuCisKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L2xpYnRhcC90YXAuYyBiL3NyYy90ZXN0L2xpYnRhcC90YXAu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTA2ZTQwMDAxNTYK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9saWJ0YXAvdGFwLmMKQEAgLTAsMCArMSw0 MjEgQEAKKy8qCitsaWJ0YXAgLSBXcml0ZSB0ZXN0cyBpbiBDCitDb3B5cmlnaHQgMjAxMiBK YWtlIEdlbGJtYW4gPGdlbGJtYW5AZ21haWwuY29tPgorVGhpcyBmaWxlIGlzIGxpY2Vuc2Vk IHVuZGVyIHRoZSBMR1BMCisqLworCisjZGVmaW5lIF9ERUZBVUxUX1NPVVJDRSAxCisKKyNp bmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxp Yi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAidGFwLmgiCisKKyNpZm5k ZWYgX1dJTjMyCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFt Lmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKworI2luY2x1ZGUgPHJlZ2V4Lmg+CisKKyNp Zm5kZWYgTUFQX0FOT05ZTU9VUworI2lmZGVmIE1BUF9BTk9OCisjZGVmaW5lIE1BUF9BTk9O WU1PVVMgTUFQX0FOT04KKyNlbHNlCisjZXJyb3IgIlN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0 IG1hcHBpbmcgYW5vbnltb3VzIHBhZ2VzIgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCisj aWYgZGVmaW5lZChfX0dOVUNfXykgfHwgZGVmaW5lZChfX2NsYW5nX18pCisjZGVmaW5lIFBS SU5URl9BVFRSKGZtdGFyZywgZmlyc3R2YXJhcmcpIF9fYXR0cmlidXRlX18oKGZvcm1hdChw cmludGYsIGZtdGFyZywgZmlyc3R2YXJhcmcpKSkKKyNlbHNlCisjZGVmaW5lIFBSSU5URl9B VFRSKGZtdGFyZywgZmlyc3R2YXJhcmcpCisjZW5kaWYKKworc3RhdGljIGludCBleHBlY3Rl ZF90ZXN0cyA9IE5PX1BMQU47CitzdGF0aWMgaW50IGZhaWxlZF90ZXN0czsKK3N0YXRpYyBp bnQgY3VycmVudF90ZXN0Oworc3RhdGljIGNoYXIgKnRvZG9fbWVzZzsKKworc3RhdGljIGNo YXIgKnZzdHJkdXBmKGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKSBQUklOVEZfQVRU UigxLDApOworCit2b2lkIHRhcF9wbGFuKGludCB0ZXN0cywgY29uc3QgY2hhciAqZm10LCAu Li4pIFBSSU5URl9BVFRSKDIsIDMpOworCitpbnQgdm9rX2F0X2xvYyhjb25zdCBjaGFyICpm aWxlLCBpbnQgbGluZSwgaW50IHRlc3QsIGNvbnN0IGNoYXIgKmZtdCwKKwkJCSAgIHZhX2xp c3QgYXJncykgUFJJTlRGX0FUVFIoNCwwKTsKKworaW50IG9rX2F0X2xvYyhjb25zdCBjaGFy ICpmaWxlLCBpbnQgbGluZSwgaW50IHRlc3QsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCVBS SU5URl9BVFRSKDQsIDUpOworCitpbnQgaXNfYXRfbG9jKGNvbnN0IGNoYXIgKmZpbGUsIGlu dCBsaW5lLCBjb25zdCBjaGFyICpnb3QsIGNvbnN0IGNoYXIgKmV4cGVjdGVkLAorCQkJICBj b25zdCBjaGFyICpmbXQsIC4uLikgUFJJTlRGX0FUVFIoNSwgNik7CisKK2ludCBpc250X2F0 X2xvYyhjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZ290LAorCQkJ CWNvbnN0IGNoYXIgKmV4cGVjdGVkLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKwlQUklOVEZf QVRUUig1LCA2KTsKKworaW50IGNtcF9va19hdF9sb2MoY29uc3QgY2hhciAqZmlsZSwgaW50 IGxpbmUsIGludCBhLCBjb25zdCBjaGFyICpvcCwgaW50IGIsCisJCQkJICBjb25zdCBjaGFy ICpmbXQsIC4uLikKKwlQUklOVEZfQVRUUig2LCA3KTsKKworaW50IGNtcF9tZW1fYXRfbG9j KGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCB2b2lkICpnb3QsCisJCQkJICAg Y29uc3Qgdm9pZCAqZXhwZWN0ZWQsIHNpemVfdCBuLCBjb25zdCBjaGFyICpmbXQsIC4uLikK KwlQUklOVEZfQVRUUig2LCA3KTsKKworaW50IGRpYWcoY29uc3QgY2hhciAqZm10LCAuLi4p IFBSSU5URl9BVFRSKDEsIDIpOworCitpbnQgYmFpbF9vdXQoaW50IGlnbm9yZSwgY29uc3Qg Y2hhciAqZm10LCAuLi4pCisJUFJJTlRGX0FUVFIoMiwgMyk7CisKK3ZvaWQgdGFwX3NraXAo aW50IG4sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCVBSSU5URl9BVFRSKDIsIDMpOworCit2 b2lkIHRhcF90b2RvKGludCBpZ25vcmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCVBSSU5U Rl9BVFRSKDIsIDMpOworCitpbnQgbGlrZV9hdF9sb2MoaW50IGZvcl9tYXRjaCwgY29uc3Qg Y2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmdvdCwKKwkJCQljb25zdCBjaGFy ICpleHBlY3RlZCwgY29uc3QgY2hhciAqZm10LCAuLi4pCisJUFJJTlRGX0FUVFIoNiwgNyk7 CisKK3N0YXRpYyBjaGFyICoKK3ZzdHJkdXBmKGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBh cmdzKQoreworCWNoYXIgKnN0cjsKKwlpbnQgc2l6ZTsKKwl2YV9saXN0IGFyZ3MyOworCXZh X2NvcHkoYXJnczIsIGFyZ3MpOworCWlmICghZm10KQorCQlmbXQgPSAiIjsKKwlzaXplID0g dnNucHJpbnRmKE5VTEwsIDAsIGZtdCwgYXJnczIpICsgMjsKKwlzdHIgPSBtYWxsb2Moc2l6 ZSk7CisJaWYgKCFzdHIpIHsKKwkJcGVycm9yKCJtYWxsb2MgZXJyb3IiKTsKKwkJZXhpdCgx KTsKKwl9CisJdnNwcmludGYoc3RyLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzMik7CisJ cmV0dXJuIHN0cjsKK30KKwordm9pZAordGFwX3BsYW4oaW50IHRlc3RzLCBjb25zdCBjaGFy ICpmbXQsIC4uLikKK3sKKwlleHBlY3RlZF90ZXN0cyA9IHRlc3RzOworCWlmICh0ZXN0cyA9 PSBTS0lQX0FMTCkgeworCQljaGFyICp3aHk7CisJCXZhX2xpc3QgYXJnczsKKwkJdmFfc3Rh cnQoYXJncywgZm10KTsKKwkJd2h5ID0gdnN0cmR1cGYoZm10LCBhcmdzKTsKKwkJdmFfZW5k KGFyZ3MpOworCQlwcmludGYoIjEuLjAgIik7CisJCWRpYWcoIlNLSVAgJXNcbiIsIHdoeSk7 CisJCWV4aXQoMCk7CisJfQorCWlmICh0ZXN0cyAhPSBOT19QTEFOKSB7CisJCXByaW50Zigi MS4uJWRcbiIsIHRlc3RzKTsKKwl9Cit9CisKK2ludAordm9rX2F0X2xvYyhjb25zdCBjaGFy ICpmaWxlLCBpbnQgbGluZSwgaW50IHRlc3QsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBh cmdzKQoreworCWNoYXIgKm5hbWUgPSB2c3RyZHVwZihmbXQsIGFyZ3MpOworCWlmICghdGVz dCkgeworCQlwcmludGYoIm5vdCAiKTsKKwl9CisJcHJpbnRmKCJvayAlZCIsICsrY3VycmVu dF90ZXN0KTsKKwlpZiAoKm5hbWUpCisJCXByaW50ZigiIC0gJXMiLCBuYW1lKTsKKwlpZiAo dG9kb19tZXNnKSB7CisJCXByaW50ZigiICMgVE9ETyIpOworCQlpZiAoKnRvZG9fbWVzZykK KwkJCXByaW50ZigiICVzIiwgdG9kb19tZXNnKTsKKwl9CisJcHJpbnRmKCJcbiIpOworCWlm ICghdGVzdCkgeworCQlwcmludGYoIiMgICBGYWlsZWQgIik7CisJCWlmICh0b2RvX21lc2cp CisJCQlwcmludGYoIihUT0RPKSAiKTsKKwkJcHJpbnRmKCJ0ZXN0ICIpOworCQlpZiAoKm5h bWUpCisJCQlwcmludGYoIiclcydcbiMgICAiLCBuYW1lKTsKKwkJcHJpbnRmKCJhdCAlcyBs aW5lICVkLlxuIiwgZmlsZSwgbGluZSk7CisJCWlmICghdG9kb19tZXNnKQorCQkJZmFpbGVk X3Rlc3RzKys7CisJfQorCWZyZWUobmFtZSk7CisJcmV0dXJuIHRlc3Q7Cit9CisKK2ludAor b2tfYXRfbG9jKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBpbnQgdGVzdCwgY29uc3Qg Y2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCXZhX3N0YXJ0KGFyZ3MsIGZt dCk7CisJdm9rX2F0X2xvYyhmaWxlLCBsaW5lLCB0ZXN0LCBmbXQsIGFyZ3MpOworCXZhX2Vu ZChhcmdzKTsKKwlyZXR1cm4gdGVzdDsKK30KKworc3RhdGljIGludAorbXlzdHJjbXAoY29u c3QgY2hhciAqYSwgY29uc3QgY2hhciAqYikKK3sKKwlyZXR1cm4gYSA9PSBiID8gMCA6ICFh ID8gLTEgOiAhYiA/IDEgOiBzdHJjbXAoYSwgYik7Cit9CisKKyNkZWZpbmUgZXEoYSwgYikg KCFteXN0cmNtcChhLCBiKSkKKyNkZWZpbmUgbmUoYSwgYikgKG15c3RyY21wKGEsIGIpKQor CitpbnQKK2lzX2F0X2xvYyhjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hh ciAqZ290LCBjb25zdCBjaGFyICpleHBlY3RlZCwKKwkJICBjb25zdCBjaGFyICpmbXQsIC4u LikKK3sKKwlpbnQgdGVzdCA9IGVxKGdvdCwgZXhwZWN0ZWQpOworCXZhX2xpc3QgYXJnczsK Kwl2YV9zdGFydChhcmdzLCBmbXQpOworCXZva19hdF9sb2MoZmlsZSwgbGluZSwgdGVzdCwg Zm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisJaWYgKCF0ZXN0KSB7CisJCWRpYWcoIiAg ICAgICAgIGdvdDogJyVzJyIsIGdvdCk7CisJCWRpYWcoIiAgICBleHBlY3RlZDogJyVzJyIs IGV4cGVjdGVkKTsKKwl9CisJcmV0dXJuIHRlc3Q7Cit9CisKK2ludAoraXNudF9hdF9sb2Mo Y29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmdvdCwgY29uc3QgY2hh ciAqZXhwZWN0ZWQsCisJCQljb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQgdGVzdCA9 IG5lKGdvdCwgZXhwZWN0ZWQpOworCXZhX2xpc3QgYXJnczsKKwl2YV9zdGFydChhcmdzLCBm bXQpOworCXZva19hdF9sb2MoZmlsZSwgbGluZSwgdGVzdCwgZm10LCBhcmdzKTsKKwl2YV9l bmQoYXJncyk7CisJaWYgKCF0ZXN0KSB7CisJCWRpYWcoIiAgICAgICAgIGdvdDogJyVzJyIs IGdvdCk7CisJCWRpYWcoIiAgICBleHBlY3RlZDogYW55dGhpbmcgZWxzZSIpOworCX0KKwly ZXR1cm4gdGVzdDsKK30KKworaW50CitjbXBfb2tfYXRfbG9jKGNvbnN0IGNoYXIgKmZpbGUs IGludCBsaW5lLCBpbnQgYSwgY29uc3QgY2hhciAqb3AsIGludCBiLAorCQkJICBjb25zdCBj aGFyICpmbXQsIC4uLikKK3sKKwlpbnQgdGVzdCA9IGVxKG9wLCAifHwiKSA/IGEgfHwgYiA6 CisJCWVxKG9wLCAiJiYiKQkJPyBhICYmIGIgOgorCQllcShvcCwgInwiKQkJCT8gYSB8IGIg OgorCQllcShvcCwgIl4iKQkJCT8gYSBeIGIgOgorCQllcShvcCwgIiYiKQkJCT8gYSAmIGIg OgorCQllcShvcCwgIj09IikJCT8gYSA9PSBiIDoKKwkJZXEob3AsICIhPSIpCQk/IGEgIT0g YiA6CisJCWVxKG9wLCAiPCIpCQkJPyBhIDwgYiA6CisJCWVxKG9wLCAiPiIpCQkJPyBhID4g YiA6CisJCWVxKG9wLCAiPD0iKQkJPyBhIDw9IGIgOgorCQllcShvcCwgIj49IikJCT8gYSA+ PSBiIDoKKwkJZXEob3AsICI8PCIpCQk/IGEgPDwgYiA6CisJCWVxKG9wLCAiPj4iKQkJPyBh ID4+IGIgOgorCQllcShvcCwgIisiKQkJCT8gYSArIGIgOgorCQllcShvcCwgIi0iKQkJCT8g YSAtIGIgOgorCQllcShvcCwgIioiKQkJCT8gYSAqIGIgOgorCQllcShvcCwgIi8iKQkJCT8g YSAvIGIgOgorCQllcShvcCwgIiUiKQkJCT8gYSAlIGIgOgorCQkJCQkJCSAgZGlhZygidW5y ZWNvZ25pemVkIG9wZXJhdG9yICclcyciLCBvcCk7CisJdmFfbGlzdCBhcmdzOworCXZhX3N0 YXJ0KGFyZ3MsIGZtdCk7CisJdm9rX2F0X2xvYyhmaWxlLCBsaW5lLCB0ZXN0LCBmbXQsIGFy Z3MpOworCXZhX2VuZChhcmdzKTsKKwlpZiAoIXRlc3QpIHsKKwkJZGlhZygiICAgICVkIiwg YSk7CisJCWRpYWcoIiAgICAgICAgJXMiLCBvcCk7CisJCWRpYWcoIiAgICAlZCIsIGIpOwor CX0KKwlyZXR1cm4gdGVzdDsKK30KKworc3RhdGljIGludAorZmluZF9tZW1fZGlmZihjb25z dCBjaGFyICphLCBjb25zdCBjaGFyICpiLCBzaXplX3Qgbiwgc2l6ZV90ICpvZmZzZXQpCit7 CisJc2l6ZV90IGk7CisJaWYgKGEgPT0gYikKKwkJcmV0dXJuIDA7CisJaWYgKCFhIHx8ICFi KQorCQlyZXR1cm4gMjsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWlmIChhW2ld ICE9IGJbaV0pIHsKKwkJCSpvZmZzZXQgPSBpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisJ cmV0dXJuIDA7Cit9CisKK2ludAorY21wX21lbV9hdF9sb2MoY29uc3QgY2hhciAqZmlsZSwg aW50IGxpbmUsIGNvbnN0IHZvaWQgKmdvdCwKKwkJCSAgIGNvbnN0IHZvaWQgKmV4cGVjdGVk LCBzaXplX3QgbiwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJc2l6ZV90IG9mZnNldDsK KwlpbnQgZGlmZiA9IGZpbmRfbWVtX2RpZmYoZ290LCBleHBlY3RlZCwgbiwgJm9mZnNldCk7 CisJdmFfbGlzdCBhcmdzOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJdm9rX2F0X2xvYyhm aWxlLCBsaW5lLCAhZGlmZiwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisJaWYgKGRp ZmYgPT0gMSkgeworCQlkaWFnKCIgICAgRGlmZmVyZW5jZSBzdGFydHMgYXQgb2Zmc2V0ICVs dSIsIG9mZnNldCk7CisJCWRpYWcoIiAgICAgICAgIGdvdDogMHglMDJ4IiwgKChjb25zdCB1 bnNpZ25lZCBjaGFyICopZ290KVtvZmZzZXRdKTsKKwkJZGlhZygiICAgIGV4cGVjdGVkOiAw eCUwMngiLCAoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilleHBlY3RlZClbb2Zmc2V0XSk7CisJ fSBlbHNlIGlmIChkaWZmID09IDIpIHsKKwkJZGlhZygiICAgICAgICAgZ290OiAlcyIsIGdv dCA/ICJub3QgTlVMTCIgOiAiTlVMTCIpOworCQlkaWFnKCIgICAgZXhwZWN0ZWQ6ICVzIiwg ZXhwZWN0ZWQgPyAibm90IE5VTEwiIDogIk5VTEwiKTsKKwl9CisJcmV0dXJuICFkaWZmOwor fQorCitpbnQKK2RpYWcoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdz OworCWNoYXIgKm1lc2csICpsaW5lOworCWludCBpOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7 CisJaWYgKCFmbXQpIHsKKwkJdmFfZW5kKGFyZ3MpOworCQlyZXR1cm4gMDsKKwl9CisJbWVz ZyA9IHZzdHJkdXBmKGZtdCwgYXJncyk7CisJbGluZSA9IG1lc2c7CisJZm9yIChpID0gMDsg KmxpbmU7IGkrKykgeworCQljaGFyIGMgPSBtZXNnW2ldOworCQlpZiAoIWMgfHwgYyA9PSAn XG4nKSB7CisJCQltZXNnW2ldID0gJ1wwJzsKKwkJCXByaW50ZigiIyAlc1xuIiwgbGluZSk7 CisJCQlpZiAoIWMpCisJCQkJYnJlYWs7CisJCQltZXNnW2ldID0gYzsKKwkJCWxpbmUgPSBt ZXNnICsgaSArIDE7CisJCX0KKwl9CisJZnJlZShtZXNnKTsKKwl2YV9lbmQoYXJncyk7CisJ cmV0dXJuIDA7Cit9CisKK2ludAorZXhpdF9zdGF0dXModm9pZCkKK3sKKwlpbnQgcmV0dmFs ID0gMDsKKwlpZiAoZXhwZWN0ZWRfdGVzdHMgPT0gTk9fUExBTikgeworCQlwcmludGYoIjEu LiVkXG4iLCBjdXJyZW50X3Rlc3QpOworCX0gZWxzZSBpZiAoY3VycmVudF90ZXN0ICE9IGV4 cGVjdGVkX3Rlc3RzKSB7CisJCWRpYWcoIkxvb2tzIGxpa2UgeW91IHBsYW5uZWQgJWQgdGVz dCVzIGJ1dCByYW4gJWQuIiwgZXhwZWN0ZWRfdGVzdHMsCisJCQkgZXhwZWN0ZWRfdGVzdHMg PiAxID8gInMiIDogIiIsIGN1cnJlbnRfdGVzdCk7CisJCXJldHZhbCA9IDI7CisJfQorCWlm IChmYWlsZWRfdGVzdHMpIHsKKwkJZGlhZygiTG9va3MgbGlrZSB5b3UgZmFpbGVkICVkIHRl c3QlcyBvZiAlZCBydW4uIiwgZmFpbGVkX3Rlc3RzLAorCQkJIGZhaWxlZF90ZXN0cyA+IDEg PyAicyIgOiAiIiwgY3VycmVudF90ZXN0KTsKKwkJcmV0dmFsID0gMTsKKwl9CisJcmV0dXJu IHJldHZhbDsKK30KKworaW50CitiYWlsX291dChpbnQgaWdub3JlLCBjb25zdCBjaGFyICpm bXQsIC4uLikKK3sKKwl2YV9saXN0IGFyZ3M7CisJKHZvaWQpaWdub3JlOworCXZhX3N0YXJ0 KGFyZ3MsIGZtdCk7CisJcHJpbnRmKCJCYWlsIG91dCEgICIpOworCXZwcmludGYoZm10LCBh cmdzKTsKKwlwcmludGYoIlxuIik7CisJdmFfZW5kKGFyZ3MpOworCWV4aXQoMjU1KTsKKwly ZXR1cm4gMDsKK30KKwordm9pZAordGFwX3NraXAoaW50IG4sIGNvbnN0IGNoYXIgKmZtdCwg Li4uKQoreworCWNoYXIgKndoeTsKKwl2YV9saXN0IGFyZ3M7CisJdmFfc3RhcnQoYXJncywg Zm10KTsKKwl3aHkgPSB2c3RyZHVwZihmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKwl3 aGlsZSAobi0tID4gMCkgeworCQlwcmludGYoIm9rICVkICIsICsrY3VycmVudF90ZXN0KTsK KwkJZGlhZygic2tpcCAlc1xuIiwgd2h5KTsKKwl9CisJZnJlZSh3aHkpOworfQorCit2b2lk Cit0YXBfdG9kbyhpbnQgaWdub3JlLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9s aXN0IGFyZ3M7CisJKHZvaWQpaWdub3JlOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJdG9k b19tZXNnID0gdnN0cmR1cGYoZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7Cit9CisKK3Zv aWQKK3RhcF9lbmRfdG9kbyh2b2lkKQoreworCWZyZWUodG9kb19tZXNnKTsKKwl0b2RvX21l c2cgPSBOVUxMOworfQorCisjaWZuZGVmIF9XSU4zMgorLyogQ3JlYXRlIGEgc2hhcmVkIG1l bW9yeSBpbnQgdG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIGEgcGllY2Ugb2YgY29kZSBleGVj dXRlZAorZGllcy4gdG8gYmUgdXNlZCBpbiB0aGUgZGllc19vayBhbmQgbGl2ZXNfb2sgbWFj cm9zLiAgKi8KK2ludAordGFwX3Rlc3RfZGllZChpbnQgc3RhdHVzKQoreworCXN0YXRpYyBp bnQgKnRlc3RfZGllZCA9IE5VTEw7CisJaW50IHByZXY7CisJaWYgKCF0ZXN0X2RpZWQpIHsK KwkJdGVzdF9kaWVkID0gbW1hcCgwLCBzaXplb2YoaW50KSwgUFJPVF9SRUFEIHwgUFJPVF9X UklURSwKKwkJCQkJCSBNQVBfU0hBUkVEIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApOworCQkq dGVzdF9kaWVkID0gMDsKKwl9CisJcHJldiA9ICp0ZXN0X2RpZWQ7CisJKnRlc3RfZGllZCA9 IHN0YXR1czsKKwlyZXR1cm4gcHJldjsKK30KKworaW50CitsaWtlX2F0X2xvYyhpbnQgZm9y X21hdGNoLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZ290LAor CQkJY29uc3QgY2hhciAqZXhwZWN0ZWQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCWlu dCB0ZXN0OworCXJlZ2V4X3QgcmU7CisJdmFfbGlzdCBhcmdzOworCWludCBlcnIgPSByZWdj b21wKCZyZSwgZXhwZWN0ZWQsIFJFR19FWFRFTkRFRCk7CisJaWYgKGVycikgeworCQljaGFy IGVycmJ1ZlsyNTZdOworCQlyZWdlcnJvcihlcnIsICZyZSwgZXJyYnVmLCBzaXplb2YgZXJy YnVmKTsKKwkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gY29tcGlsZSByZWdleCAnJXMn OiAlcyBhdCAlcyBsaW5lICVkXG4iLAorCQkJCWV4cGVjdGVkLCBlcnJidWYsIGZpbGUsIGxp bmUpOworCQlleGl0KDI1NSk7CisJfQorCWVyciA9IHJlZ2V4ZWMoJnJlLCBnb3QsIDAsIE5V TEwsIDApOworCXJlZ2ZyZWUoJnJlKTsKKwl0ZXN0ID0gZm9yX21hdGNoID8gIWVyciA6IGVy cjsKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCXZva19hdF9sb2MoZmlsZSwgbGluZSwgdGVz dCwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisJaWYgKCF0ZXN0KSB7CisJCWlmIChm b3JfbWF0Y2gpIHsKKwkJCWRpYWcoIiAgICAgICAgICAgICAgICAgICAnJXMnIiwgZ290KTsK KwkJCWRpYWcoIiAgICBkb2Vzbid0IG1hdGNoOiAnJXMnIiwgZXhwZWN0ZWQpOworCQl9IGVs c2UgeworCQkJZGlhZygiICAgICAgICAgICAgICAgICAgICclcyciLCBnb3QpOworCQkJZGlh ZygiICAgICAgICAgIG1hdGNoZXM6ICclcyciLCBleHBlY3RlZCk7CisJCX0KKwl9CisJcmV0 dXJuIHRlc3Q7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2xpYnRhcC90YXAu aCBiL3NyYy90ZXN0L2xpYnRhcC90YXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uZTM2NmE2YWZmZGMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9s aWJ0YXAvdGFwLmgKQEAgLTAsMCArMSwxMTUgQEAKKy8qCitsaWJ0YXAgLSBXcml0ZSB0ZXN0 cyBpbiBDCitDb3B5cmlnaHQgMjAxMiBKYWtlIEdlbGJtYW4gPGdlbGJtYW5AZ21haWwuY29t PgorVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBMR1BMCisqLworCisjaWZuZGVm IF9fVEFQX0hfXworI2RlZmluZSBfX1RBUF9IX18KKworI2lmZGVmIF9fY3BsdXNwbHVzCitl eHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWZuZGVmIHZhX2NvcHkKKyNpZmRlZiBfX3ZhX2Nv cHkKKyNkZWZpbmUgdmFfY29weSBfX3ZhX2NvcHkKKyNlbHNlCisjZGVmaW5lIHZhX2NvcHko ZCwgcykgKChkKSA9IChzKSkKKyNlbmRpZgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5o PgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCitpbnQgICAg IHZva19hdF9sb2MgICAgICAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGludCB0ZXN0 LCBjb25zdCBjaGFyICpmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCBh cmdzKTsKK2ludCAgICAgb2tfYXRfbG9jICAgICAgIChjb25zdCBjaGFyICpmaWxlLCBpbnQg bGluZSwgaW50IHRlc3QsIGNvbnN0IGNoYXIgKmZtdCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAuLi4pOworaW50ICAgICBpc19hdF9sb2MgICAgICAgKGNvbnN0IGNoYXIgKmZpbGUs IGludCBsaW5lLCBjb25zdCBjaGFyICpnb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciAqZXhwZWN0ZWQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK2ludCAgICAg aXNudF9hdF9sb2MgICAgIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hh ciAqZ290LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmV4cGVjdGVk LCBjb25zdCBjaGFyICpmbXQsIC4uLik7CitpbnQgICAgIGNtcF9va19hdF9sb2MgICAoY29u c3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGludCBhLCBjb25zdCBjaGFyICpvcCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgYiwgY29uc3QgY2hhciAqZm10LCAuLi4pOworaW50 ICAgICBjbXBfbWVtX2F0X2xvYyAgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25z dCB2b2lkICpnb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqZXhw ZWN0ZWQsIHNpemVfdCBuLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CitpbnQgICAgIGJhaWxf b3V0ICAgICAgICAoaW50IGlnbm9yZSwgY29uc3QgY2hhciAqZm10LCAuLi4pOwordm9pZCAg ICB0YXBfcGxhbiAgICAgICAgKGludCB0ZXN0cywgY29uc3QgY2hhciAqZm10LCAuLi4pOwor aW50ICAgICBkaWFnICAgICAgICAgICAgKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK2ludCAg ICAgZXhpdF9zdGF0dXMgICAgICh2b2lkKTsKK3ZvaWQgICAgdGFwX3NraXAgICAgICAgIChp bnQgbiwgY29uc3QgY2hhciAqZm10LCAuLi4pOwordm9pZCAgICB0YXBfdG9kbyAgICAgICAg KGludCBpZ25vcmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK3ZvaWQgICAgdGFwX2VuZF90 b2RvICAgICh2b2lkKTsKKworI2RlZmluZSBOT19QTEFOICAgICAgICAgIC0xCisjZGVmaW5l IFNLSVBfQUxMICAgICAgICAgLTIKKyNkZWZpbmUgb2soLi4uKSAgICAgICAgICBva19hdF9s b2MoX19GSUxFX18sIF9fTElORV9fLCBfX1ZBX0FSR1NfXywgTlVMTCkKKyNkZWZpbmUgaXMo Li4uKSAgICAgICAgICBpc19hdF9sb2MoX19GSUxFX18sIF9fTElORV9fLCBfX1ZBX0FSR1Nf XywgTlVMTCkKKyNkZWZpbmUgaXNudCguLi4pICAgICAgICBpc250X2F0X2xvYyhfX0ZJTEVf XywgX19MSU5FX18sIF9fVkFfQVJHU19fLCBOVUxMKQorI2RlZmluZSBjbXBfb2soLi4uKSAg ICAgIGNtcF9va19hdF9sb2MoX19GSUxFX18sIF9fTElORV9fLCBfX1ZBX0FSR1NfXywgTlVM TCkKKyNkZWZpbmUgY21wX21lbSguLi4pICAgICBjbXBfbWVtX2F0X2xvYyhfX0ZJTEVfXywg X19MSU5FX18sIF9fVkFfQVJHU19fLCBOVUxMKQorI2RlZmluZSBwbGFuKC4uLikgICAgICAg IHRhcF9wbGFuKF9fVkFfQVJHU19fLCBOVUxMKQorI2RlZmluZSBkb25lX3Rlc3RpbmcoKSAg IHJldHVybiBleGl0X3N0YXR1cygpCisjZGVmaW5lIEJBSUxfT1VUKC4uLikgICAgYmFpbF9v dXQoMCwgIiIgX19WQV9BUkdTX18sIE5VTEwpCisjZGVmaW5lIHBhc3MoLi4uKSAgICAgICAg b2soMSwgIiIgX19WQV9BUkdTX18pCisjZGVmaW5lIGZhaWwoLi4uKSAgICAgICAgb2soMCwg IiIgX19WQV9BUkdTX18pCisKKyNkZWZpbmUgc2tpcCh0ZXN0LCAuLi4pICBkbyB7aWYgKHRl c3QpIHt0YXBfc2tpcChfX1ZBX0FSR1NfXywgTlVMTCk7IGJyZWFrO30KKyNkZWZpbmUgZW5k X3NraXAgICAgICAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIHRvZG8oLi4uKSAgICAgICAg dGFwX3RvZG8oMCwgIiIgX19WQV9BUkdTX18sIE5VTEwpCisjZGVmaW5lIGVuZF90b2RvICAg ICAgICAgdGFwX2VuZF90b2RvKCkKKworI2RlZmluZSBkaWVzX29rKC4uLikgICAgIGRpZXNf b2tfY29tbW9uKDEsIF9fVkFfQVJHU19fKQorI2RlZmluZSBsaXZlc19vayguLi4pICAgIGRp ZXNfb2tfY29tbW9uKDAsIF9fVkFfQVJHU19fKQorCisjaWZkZWYgX1dJTjMyCisjZGVmaW5l IGxpa2UoLi4uKSAgICAgICAgdGFwX3NraXAoMSwgImxpa2UgaXMgbm90IGltcGxlbWVudGVk IG9uIFdpbmRvd3MiKQorI2RlZmluZSB1bmxpa2UoLi4uKSAgICAgIHRhcF9za2lwKDEsICJ1 bmxpa2UgaXMgbm90IGltcGxlbWVudGVkIG9uIFdpbmRvd3MiKQorI2RlZmluZSBkaWVzX29r X2NvbW1vbiguLi4pIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0YXBfc2tpcCgxLCAi RGVhdGggZGV0ZWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgb24gV2luZG93cyIpCisjZWxzZQor I2RlZmluZSBsaWtlKC4uLikgICAgICAgIGxpa2VfYXRfbG9jKDEsIF9fRklMRV9fLCBfX0xJ TkVfXywgX19WQV9BUkdTX18sIE5VTEwpCisjZGVmaW5lIHVubGlrZSguLi4pICAgICAgbGlr ZV9hdF9sb2MoMCwgX19GSUxFX18sIF9fTElORV9fLCBfX1ZBX0FSR1NfXywgTlVMTCkKK2lu dCAgICAgbGlrZV9hdF9sb2MgICAgIChpbnQgZm9yX21hdGNoLCBjb25zdCBjaGFyICpmaWxl LCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpnb3Qs IGNvbnN0IGNoYXIgKmV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKmZtdCwgLi4uKTsKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMv dHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgoraW50IHRhcF90ZXN0X2RpZWQgKGlu dCBzdGF0dXMpOworI2RlZmluZSBkaWVzX29rX2NvbW1vbihmb3JfZGVhdGgsIGNvZGUsIC4u LikgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpbnQgY3BpZDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpbnQgaXRf ZGllZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg ICB0YXBfdGVzdF9kaWVkKDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgICAgICBjcGlkID0gZm9yaygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgICAgICBzd2l0Y2ggKGNwaWQpIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgICAgICBjYXNlIC0xOiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcGVycm9yKCJmb3Jr IGVycm9yIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZXhp dCgxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg ICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgICAgICAgICAgY2xvc2UoMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgICAgICAgICAgY2xvc2UoMik7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgY29kZSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgdGFwX3Rlc3RfZGll ZCgwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZXhp dCgwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgICAgICBpZiAod2FpdHBpZChjcGlkLCBOVUxMLCAwKSA8IDApIHsgICAgICAgICAg ICAgICAgICAgXAorICAgICAgICAgICAgcGVycm9yKCJ3YWl0cGlkIGVycm9yIik7ICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZXhpdCgxKTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpdF9kaWVk ID0gdGFwX3Rlc3RfZGllZCgwKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg ICBpZiAoIWl0X2RpZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgICAgICAgICAge2NvZGV9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgICAgICBvayhmb3JfZGVhdGggPyBpdF9kaWVkIDogIWl0X2RpZWQs ICIiIF9fVkFfQVJHU19fKTsgXAorICAgIH0gd2hpbGUgKDApCisjZW5kaWYKKworI2lmZGVm IF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21lc29uLmJ1aWxkCmluZGV4IGNkNDVjYmY1N2Zi Li42NGZhNzUxYTVhNSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbWVzb24uYnVpbGQKKysrIGIv c3JjL3Rlc3QvbWVzb24uYnVpbGQKQEAgLTgsNiArOCw3IEBAIHN1YmRpcigncG9zdG1hc3Rl cicpCiBzdWJkaXIoJ3JlY292ZXJ5JykKIHN1YmRpcignc3Vic2NyaXB0aW9uJykKIHN1YmRp cignbW9kdWxlcycpCitzdWJkaXIoJ2Rmb3InKQogCiBpZiBzc2wuZm91bmQoKQogICBzdWJk aXIoJ3NzbCcpCi0tIAoyLjUzLjAKCg== --------------lw8OY0FkiJnrHVFMGb70Aea3 Content-Type: text/x-patch; charset=UTF-8; name="v12-0003-Implement-Delta-Frame-of-Reference-compression.patch" Content-Disposition: attachment; filename*0="v12-0003-Implement-Delta-Frame-of-Reference-compression.patc"; filename*1="h" Content-Transfer-Encoding: base64 RnJvbSAzNGU3MWNmZWY0YWZiMzE2Y2Q3MjlhMzUwY2JmOWVmNWM2MGQ5ZWMwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBFdmdlbnkgVm9yb3BhZXYgPGV2b3JvcEBnbWFpbC5j b20+CkRhdGU6IE1vbiwgMTMgQXByIDIwMjYgMjM6MTU6MzQgKzA4MDAKU3ViamVjdDogW1BB VENIIHYxMiAzLzVdIEltcGxlbWVudCBEZWx0YSBGcmFtZSBvZiBSZWZlcmVuY2UgY29tcHJl c3Npb24uCgpJbXBsZW1lbnQgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobSBiYXNlZCBvbiB0 aGUgRGVsdGEgRnJhbWUgb2YKUmVmZXJlbmNlIHRlY2huaXF1ZSAoREZPUikuCgpUaGUgY3Vy cmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgREZPUiBhbGdvcml0aG0gc3VwcG9ydHMgaXRl bXMgb2YKdW5zaWduZWQgaW50ZWdlciB0eXBlcy4gVGhlIHR5cGUgb2YgYW4gaXRlbSBpcyBk ZWZpbmVkIHdpdGggdGhlCml0ZW1fdCBtYWNyby4KClRoZSBjb21wcmVzc2VkIHBhY2sgY29t cHJpc2VzIHRocmVlIHBhcnRzOgogICAgLSBkZWx0YXM7CiAgICAtIGV4Y2VwdGlvbnMgcG9z aXRpb25zLgogICAgLSBleGNlcHRpb25zOwpFYWNoIG9mIHRoZW0gaXMgYSBkZW5zaWx5IGJp dC1wYWNrZWQgc2VxdWVuY2UuCgpUaGUgZGVsdGEgaXMgYSBkaWZmZXJlbmNlIGJldHdlZW4g dGhlIGN1cnJlbnQgaXRlbSBhbmQgdGhlIHByZXZpb3VzIG9uZS4gVGhlCmRlbHRhIG9mIHRo ZSBmaXJzdCBpdGVtICh0aGUgaXRlbSBoYXZpbmcgdGhlIHplcm8gaW5kZXgpIGlzIGl0cyBh Y3R1YWwgdmFsdWU6CmRlbHRhWzBdID0gbVswXS0wID0gbVswXS4gU2VyaWFsaXNlZCBkZWx0 YXMgaXMgYSBzZXF1ZW5jZSBvZiBiaXRzLiBFYWNoCnNlcmlhbGlzZWQgZGVsdGEgaW4gJ2Rl bHRhcycgaGFzIGEgZml4ZWQgYml0IHdpZHRoLiBJZiB0aGUgZGVsdGEncyB3aWR0aApleGNl ZWRzIHRoZSBhbGxvd2VkIHNpemUgb2YgYSBkZWx0YSBpbiAnZGVsdGFzJywgdGhlIGhpZ2hl ciBiaXRzIG9mIHRoaXMKZGVsdGEgaXMgcHV0IGludG8gZXhjZXB0aW9ucywgaXRzIHBvc2l0 aW9ucyBpcyBzYXZlZCBpbnRvIHRoZSAnZXhjZXB0b24KcG9zaXRpb25zJyBzZWN0aW9uLiBV c2FnZSBvZiBleGNlcHRpb25zIGNhbiBiZSBkZWxpYmVyYXRlbHkgdHVybmVkIG9mZi4KCkRG b1Igc3VwcG9ydHMgYm90aCBleHRlcm5hbCBtZW1vcnkgKG91dGVyIG1lbW9yeSkgcHJvdmlk ZWQgYnkgYSBjYWxsZXIKYW5kIGF1dG9tYXRpY2FsbHkgbWFuYWdlZCBtZW1vcnksIGFsbG9j YXRlZCBieSBtZWFucyBvZiBtYWxsb2MsIHBhbGxvYwpvciBzaW1pbGFyIGZ1bmN0aW9ucy4g TWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiBtdXN0IGJlIGRlZmluZWQKZHVyaW5n IGluaXRpYWxpemF0aW9uLiBBbGwgc3Vic2VxdWVudCBvcGVyYXRpb25zIGZvbGxvdyB0aGlz CmNvbmZpZ3VyYXRpb24uIEZvciBleGFtcGxlLCBhIGNhbGxlciBjYW4gcGxhY2UgYSBidWZm ZXIgb24gdGhlIHN0YWNrIHRvCmF2b2lkIGhlYXAgYWxsb2NhdGlvbiBhbmQgcGFzcyB0aGUg YnVmZmVyIHRvIGEgREZvUiB1bml0LiBBcyBhIHJlc3VsdCwKdGhlIHBhY2tpbmcgYW5kIHVu cGFja2luZyBwcm9jZXNzZXMgZXhjbHVkZSBkeW5hbWljIGFsbG9jYXRpb24uCgpUaGUgREZv UiB1bml0IGlzIGltcGxlbWVudGVkIGFzIGEgc2V0IG9mIHRlbXBsYXRlcy4gRGV2ZWxvcGVy cyBjYW4KZ2VuZXJhdGUgREZvUiBpbXBsZW1lbnRhdGlvbnMgZm9yIGFueSB1bnNpZ25lZCBp bnRlZ2VyIHR5cGUgKHVpbnQ4X3QsCnVpbnQxNl90LCB1aW50MzJfdCwgdWludDY0X3QpLiBU aGUgZGZvcl91MTYgdW5pdCBpcyBpbXBsZW1lbnRlZC4KCkF1dGhvcjogRXZnZW55IFZvcm9w YWV2IDxldmdlbnkudm9yb3BhZXZAdGFudG9ybGFicy5jb20+IDxldm9yb3BAZ21haWwuY29t PgpSZXZpZXdlZCBieTogQW5kcmV5IEJvcm9kaW4gPHg0bW1tQHlhbmRleC10ZWFtLnJ1Pgot LS0KIHNyYy9iYWNrZW5kL2xpYi9NYWtlZmlsZS5kZm9yICAgICAgIHwgICAxICsKIHNyYy9i YWNrZW5kL2xpYi9kZm9yX3RlbXBsLmMgICAgICAgIHwgNzIyICsrKysrKysrKysrKysrKysr KysrKysrKysrKysKIHNyYy9iYWNrZW5kL2xpYi9kZm9yX3UxNi5jICAgICAgICAgIHwgICA4 ICsKIHNyYy9iYWNrZW5kL2xpYi9tZXNvbi5idWlsZCAgICAgICAgIHwgICAxICsKIHNyYy9p bmNsdWRlL2xpYi9kZm9yX3RlbXBsLmggICAgICAgIHwgIDI3ICsrCiBzcmMvaW5jbHVkZS9s aWIvZGZvcl90ZW1wbF9zdGFwbGUuaCB8IDEyNiArKysrKwogc3JjL2luY2x1ZGUvbGliL2Rm b3JfdGVtcGxfdW5kZWYuaCAgfCAgMjggKysKIHNyYy9pbmNsdWRlL2xpYi9kZm9yX3UxNi5o ICAgICAgICAgIHwgIDEzICsKIHNyYy9pbmNsdWRlL2xpYi9kZm9yX3UxNl9jb25maWcuaCAg IHwgICA0ICsKIDkgZmlsZXMgY2hhbmdlZCwgOTMwIGluc2VydGlvbnMoKykKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvYmFja2VuZC9saWIvZGZvcl90ZW1wbC5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL2JhY2tlbmQvbGliL2Rmb3JfdTE2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvaW5jbHVkZS9saWIvZGZvcl90ZW1wbC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2lu Y2x1ZGUvbGliL2Rmb3JfdGVtcGxfc3RhcGxlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv aW5jbHVkZS9saWIvZGZvcl90ZW1wbF91bmRlZi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Jj L2luY2x1ZGUvbGliL2Rmb3JfdTE2LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVk ZS9saWIvZGZvcl91MTZfY29uZmlnLmgKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9saWIv TWFrZWZpbGUuZGZvciBiL3NyYy9iYWNrZW5kL2xpYi9NYWtlZmlsZS5kZm9yCmluZGV4IGI5 M2M2ZTc4NjQ0Li5iZWI3MDM1ZjE1NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbGliL01h a2VmaWxlLmRmb3IKKysrIGIvc3JjL2JhY2tlbmQvbGliL01ha2VmaWxlLmRmb3IKQEAgLTIs NCArMiw1IEBACiAKIE9CSlNfREZPUiA6PSBcCiAJYml0cGFja191MTYubyBcCisJZGZvcl91 MTYubyBcCiAJdmVjdF91MTYubwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbGliL2Rmb3Jf dGVtcGwuYyBiL3NyYy9iYWNrZW5kL2xpYi9kZm9yX3RlbXBsLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ4MjgwYjJiOWMxCi0tLSAvZGV2L251bGwKKysr IGIvc3JjL2JhY2tlbmQvbGliL2Rmb3JfdGVtcGwuYwpAQCAtMCwwICsxLDcyMiBAQAorLyoK KyAqIGRmb3JfdGVtcGwuYworICoKKyAqIEltcGxlbWVudCB0aGUgdmFyaWFudCBvZiB0aGUg RnJhbWUgb2YgUmVmZXJlbmNlIHdpdGggRGVsdGEKKyAqIGNvbnRhaW5lciBhbmQgY29ycmVz cG9uZGluZyBhbGdvcml0aG1zLgorICoKKyAqIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9u IG9mIERGT1IgYWxnb3JpdGhtIHN1cHBvcnRzIGl0ZW1zIG9mIHVuc2lnbmVkCisgKiBpbnRl Z2VyIHR5cGUuIFRoZSB0eXBlIG9mIG9yaWdpbmFsIGl0ZW1zIGlzIGRlZmluZWQgd2l0aCB0 aGUgaXRlbV90IG1hY3JvLgorICoKKyAqIFRoZSBjb21wcmVzc2VkIHBhY2sgY29tcHJpc2Vz IHRocmVlIHBhcnRzOgorICogICAgIC0gZGVsdGFzIChsZWFzdCBzaWduaWZpY2FudCBiaXRz IG9mIGRlbHRhcyk7CisgKiAgICAgLSBleGNlcHRpb25zIHBvc2l0aW9ucy4KKyAqICAgICAt IGV4Y2VwdGlvbnMgKG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiBkZWx0YXMpOworICogRWFj aCBvZiB0aGVtIGlzIGEgZGVuc2lseSBiaXQtcGFja2VkIHNlcXVlbmNlLgorICoKKyAqIFRo ZSBkZWx0YSBpcyBhIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgY3VycmVudCBpdGVtIGFuZCB0 aGUgcHJldmlvdXMgb25lLiBUaGUKKyAqIGRlbHRhIG9mIHRoZSBmaXJzdCBpdGVtICh0aGUg aXRlbSBoYXZpbmcgdGhlIHplcm8gaW5kZXgpIGlzIGl0cyBhY3R1YWwgdmFsdWU6CisgKiBk ZWx0YVswXSA9IG1bMF0tMCA9IG1bMF0uIEEgc2VyaWFsaXNlZCBkZWx0YSBpcyBhIHNlcXVl bmNlIG9mIGJpdHMuIEVhY2gKKyAqIHNlcmlhbGlzZWQgZGVsdGEgaW4gJ2RlbHRhcycgaGFz IGEgZml4ZWQgYml0IHdpZHRoLiBJZiB0aGUgZGVsdGEncyB3aWR0aAorICogZXhjZWVkcyBz b21lIGNyaXRpY2FsIHNpemUsIGRlZmluZWQgZHVyaW5nIGFuYWx5emluZywgdGhlIGhpZ2hl ciBiaXRzIG9mIHRoaXMKKyAqIGRlbHRhIGlzIHB1dCBpbnRvIGV4Y2VwdGlvbnMsIHdoaWNo IHBvc2l0aW9uIGlzIHNhdmVkIGludG8gdGhlICdleGNlcHRvbgorICogcG9zaXRpb25zJyBz ZWN0aW9uLiBVc2FnZSBvZiBleGNlcHRpb25zIGNhbiBiZSBkZWxpYmVyYXRlbHkgdHVybmVk IG9mZi4KKyAqCisgKiBJZiBzaWduZWQgZGVsdGFzIGFyZSB1c2VkLCB0aGUgbW9kdWxlIG9m IGEgZGVsdGEgaXMgcmVwcmVzZW50ZWQgYnkgbW9zdAorICogc2lnaW5pZmljYW50IGJpdHMg YW5kIHRoZSBzaWduIGlzIHNhdmVkIGFzIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQ6IDAg LQorICogZGVsdGEgaXMgcG9zaXRpdmUsIDEgLSBkZWx0YSBpcyBuZWdhdGl2ZS4KKyAqCisg KiBERm9SIHN1cHBvcnRzIGJvdGggZXh0ZXJuYWwgbWVtb3J5IChvdXRlciBtZW1vcnkpIHBy b3ZpZGVkIGJ5IGEgY2FsbGVyCisgKiBhbmQgYXV0b21hdGljYWxseSBtYW5hZ2VkIG1lbW9y eSwgYWxsb2NhdGVkIGJ5IG1lYW5zIG9mIG1hbGxvYywgcGFsbG9jCisgKiBvciBzaW1pbGFy IGZ1bmN0aW9ucy4gTWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiBtdXN0IGJlIGRl ZmluZWQKKyAqIGR1cmluZyBpbml0aWFsaXphdGlvbi4gQWxsIHN1YnNlcXVlbnQgb3BlcmF0 aW9ucyBmb2xsb3cgdGhpcworICogY29uZmlndXJhdGlvbi4gRm9yIGV4YW1wbGUsIGEgY2Fs bGVyIGNhbiBwbGFjZSBhIGJ1ZmZlciBvbiB0aGUgc3RhY2sgdG8KKyAqIGF2b2lkIGhlYXAg YWxsb2NhdGlvbiBhbmQgcGFzcyB0aGUgYnVmZmVyIHRvIGEgREZvUiB1bml0LiBBcyBhIHJl c3VsdCwKKyAqIHRoZSBwYWNraW5nIGFuZCB1bnBhY2tpbmcgcHJvY2Vzc2VzIGV4Y2x1ZGUg ZHluYW1pYyBhbGxvY2F0aW9uLgorICoKKyAqIFRoZSBERm9SIHVuaXQgaXMgaW1wbGVtZW50 ZWQgYXMgYSBzZXQgb2YgdGVtcGxhdGVzLiBEZXZlbG9wZXJzIGNhbgorICogZ2VuZXJhdGUg REZvUiBpbXBsZW1lbnRhdGlvbnMgZm9yIGFueSB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgKHVp bnQ4X3QsCisgKiB1aW50MTZfdCwgdWludDMyX3QsIHVpbnQ2NF90KS4KKyAqLworCisjaW5j bHVkZSAibGliL2Rmb3JfdGVtcGxfc3RhcGxlLmgiCisKK2ludCBkZm9yX2NhbGNfZGVsdGFz KHNpemVfdCBjbnQsIGNvbnN0IGl0ZW1fdCBhcnJbXSwgdmVjdF90ICp2RGVsdGFzLAorCQkJ CQkgdW5pcXNvcnR2ZWN0X3QgKnVzdkRlbHRhV2lkdGhzLCB2ZWN0X3QgKnZXaWR0aENvdW50 ZXJzLAorCQkJCQkgYm9vbCAqc2lnbik7CisKK2ludCBkZm9yX2NhbGNfd2lkdGgoc2l6ZV90 IGNudERlbHRhLAorCQkJCQljb25zdCB1bmlxc29ydHZlY3RfdCAqdXN2RGVsdGFXaWR0aHMs CisJCQkJCWNvbnN0IHZlY3RfdCAqdldpZHRoQ291bnRlcnMsIHNpemVfdCAqd2lkdGgsCisJ CQkJCXNpemVfdCAqY250RXhjZXB0aW9ucyk7CisKK2ludCBkZm9yX2FuYWx5emUoc2l6ZV90 IGNudCwgY29uc3QgaXRlbV90IGFycltdLAorCQkJIGRmb3JfbWV0YV90ICpkZm9yLCB2ZWN0 X3QgKnZEZWx0YXMsCisJCQkgdW5pcXNvcnR2ZWN0X3QgKnVzdkV4Y1Bvcyk7CisKK2ludCBk Zm9yX3BhY2soc2l6ZV90IGNudCwgY29uc3QgaXRlbV90IGFycltdLCBleGNhbGdfdCBpc0V4 Y1VzYWdlLAorCQkJICBkZm9yX21ldGFfdCAqZGZvciwgc2l6ZV90IGJ1ZlNpemUsIHVpbnQ4 X3QgYnVmW10pOworCitpbnQgZGZvcl91bnBhY2soY29uc3QgZGZvcl9tZXRhX3QgKmRmb3Is IHVuaXFzb3J0dmVjdF90ICp2VmFscywgc2l6ZV90IGJ1ZlNpemUsCisJCQkJdWludDhfdCBi dWZbXSk7CisKK3ZvaWQgZGZvcl9jbGVhcl9tZXRhKGRmb3JfbWV0YV90ICpkZm9yKTsKKwor ZGZvcl9zdGF0c190IGRmb3JfY2FsY19zdGF0cyhkZm9yX21ldGFfdCBkZm9yKTsKKworc2l6 ZV90IGRmb3JfY2FsY19uYnl0ZXMoZGZvcl9tZXRhX3QgZGZvcik7CisKKy8qCisgKiBDYWxj dWxhdGUgZGVsdGFzCisgKgorICogdldpZHRoQ291bnRlcnMgYmVpbmcgZXF1YWwgdG8gTlVM TCBtZWFucyAnRG8gbm90IGNhbGN1bGF0ZSBjb3VudHMgb2Ygd2lkdGhzJy4KKyAqIEluIHRo aXMgY2FzZSB1c3ZEZWx0YVdpZHRoIGNvbXByaXNlIG9ubHkgb25lIG1lbWJlciBtWzBdIHdo aWNoIHNhdmVzIG1heAorICogd2lkdGggb2YgZGVsdGEsIHdoaWNoIGNhbiBiZSB1c2VkIGJ5 IGNhbGxlci4KKyAqCisgKiBUaGUgdmFsdWUgb2YgdGhlIHNpZ25lZF9kZWx0YXMgYXJndW1l bnQgY2FuIGJlIGNoYW5nZWQgYnkgdGhpcyBmdW5jdGlvbiBmcm9tCisgKiBmYWxzZSB0byB0 cnVlLCBidXQgbm90IHZpY2UgdmVyc2EuIE9uY2Ugc2lnbmVkX2RlbHRhcyBpcyBzZXQgdG8g dHJ1ZSwgaXQgY2Fubm90CisgKiBiZSBjaGFuZ2VkLgorICovCitpbnQKK2Rmb3JfY2FsY19k ZWx0YXMoc2l6ZV90IGNudCwgY29uc3QgaXRlbV90IGFycltdLCB2ZWN0X3QgKnZEZWx0YXMs CisJCQkJIHVuaXFzb3J0dmVjdF90ICp1c3ZEZWx0YVdpZHRocywgdmVjdF90ICp2V2lkdGhD b3VudGVycywKKwkJCQkgYm9vbCAqc2lnbmVkRGVsdGFzKQoreworCWl0ZW1fdCBkZWx0YTsK KwlpdGVtX3QgcHJldjsgLyogdmFsdWUgb2YgcHJldmlvdXMgbnVtYmVyKi8KKwlzaXplX3Qg d2lkdGg7CisJc2l6ZV90IG1heEl0ZW1XaWR0aDsKKwlpdGVtX3QgbWF4SXRlbU1hc2s7CisJ aXRlbV90IG1heE1vZHVsdXNPZkRlbHRhOworCisJdXN2X2luc19yZXNfdCBpbnNXaWR0aElu c2VydDsKKworCWlmICh2RGVsdGFzID09IE5VTEwgfHwgdXN2RGVsdGFXaWR0aHMgPT0gTlVM TCB8fCBzaWduZWREZWx0YXMgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJdmVjdF9jbGVh cih2RGVsdGFzKTsKKwl2ZWN0X2NsZWFyKHVzdkRlbHRhV2lkdGhzKTsKKworCWlmICh2V2lk dGhDb3VudGVycyA9PSBOVUxMKQorCQl1c3ZfaW5zZXJ0KHVzdkRlbHRhV2lkdGhzLCAwKTsK KwllbHNlCisJCXZlY3RfY2xlYXIodldpZHRoQ291bnRlcnMpOworCisJLyoKKwkgKiBXZSB1 c2UgdGhlIG1heGltdW0gcG9zc2libGUgaXRlbSB3aWR0aCBoZXJlIHdoaWNoIGlzIGVxdWFs IHJvIHRoZSB3aWR0aAorCSAqIG9mIGl0ZW1fdC4gVE9ETzogd2UgY2FuIGFuYWx5emUgaXRl bXMgYW5kIGNhbGN1bGF0ZSB0aGUgcmVhbCBtYXggaXRlbQorCSAqIHdpZHRoLiBUaGlzIG11 c3QgaW1wcm92ZSBjb21wcmVzc2lvbiByYXRpby4KKwkgKi8KKwltYXhJdGVtV2lkdGggPSBz aXplb2YoaXRlbV90KSAqIDg7CisJbWF4SXRlbU1hc2sgPSB3aWR0aF90b19tYXNrKG1heEl0 ZW1XaWR0aCk7CisJbWF4TW9kdWx1c09mRGVsdGEgPSAoKnNpZ25lZERlbHRhcykgPyBtYXhJ dGVtTWFzayA+PiAxIDogbWF4SXRlbU1hc2s7CisKKwlwcmV2ID0gMDsKKwlmb3IgKHNpemVf dCBqID0gMDsgaiA8IGNudDsgaisrKQorCXsKKwkJYm9vbCBuZWdEZWx0YSA9IGFycltqXSA8 IHByZXY7CisKKwkJaWYgKG5lZ0RlbHRhKQorCQl7CisJCQlpZiAodW5saWtlbHkoKnNpZ25l ZERlbHRhcyA9PSBmYWxzZSkpCisJCQl7IC8qIFJlY2FsY3VsYXRlIGFsbCBkZWx0YXMgYXMg c2lnbmVkLiAqLworCQkJCSpzaWduZWREZWx0YXMgPSB0cnVlOworCQkJCXJldHVybiBkZm9y X2NhbGNfZGVsdGFzKGNudCwgYXJyLCB2RGVsdGFzLCB1c3ZEZWx0YVdpZHRocywKKwkJCQkJ CQkJCQl2V2lkdGhDb3VudGVycywgc2lnbmVkRGVsdGFzKTsKKwkJCX0KKwkJCUFzc2VydCgq c2lnbmVkRGVsdGFzID09IHRydWUpOworCQkJZGVsdGEgPSBwcmV2IC0gYXJyW2pdOworCQl9 CisJCWVsc2UKKwkJCWRlbHRhID0gYXJyW2pdIC0gcHJldjsKKworCQlpZiAoZGVsdGEgPiBt YXhNb2R1bHVzT2ZEZWx0YSkKKwkJeworCQkJQXNzZXJ0KCpzaWduZWREZWx0YXMgPT0gdHJ1 ZSk7CisJCQkvKiBVc2UgdHJpY2sgd2l0aCBvdmVybGFwcGluZyBoZXJlICovCisJCQlkZWx0 YSA9IG1heEl0ZW1NYXNrIC0gZGVsdGEgKyAxOworCQkJbmVnRGVsdGEgPSAhbmVnRGVsdGE7 CisJCX0KKworCQlBc3NlcnQoZGVsdGEgPD0gbWF4TW9kdWx1c09mRGVsdGEpOworCisJCWlm ICgqc2lnbmVkRGVsdGFzID09IHRydWUpCisJCXsKKwkJCXVpbnQ4IHNpZ25Db2RlID0gKG5l Z0RlbHRhKSA/IDEgOiAwOworCQkJZGVsdGEgPSBkZWx0YSA8PCAxIHwgc2lnbkNvZGU7CisJ CQl3aWR0aCA9IChkZWx0YSA9PSAwKSA/IDIgOiB3aWR0aF9mcm9tX3ZhbChkZWx0YSk7CisJ CX0KKwkJZWxzZQorCQkJd2lkdGggPSB3aWR0aF9mcm9tX3ZhbChkZWx0YSk7CisKKwkJdmVj dF9hcHBlbmQodkRlbHRhcywgZGVsdGEpOworCisJCWlmICh2V2lkdGhDb3VudGVycyA9PSBO VUxMKQorCQl7CisJCQlpZiAodXN2RGVsdGFXaWR0aHMtPm1bMF0gPCB3aWR0aCkKKwkJCQl1 c3ZEZWx0YVdpZHRocy0+bVswXSA9IHdpZHRoOworCQl9CisJCWVsc2UKKwkJeworCQkJaW5z V2lkdGhJbnNlcnQgPSB1c3ZfaW5zZXJ0KHVzdkRlbHRhV2lkdGhzLCB3aWR0aCk7CisKKwkJ CWlmIChpbnNXaWR0aEluc2VydC5zdCA9PSBVU1ZfSU5TX05FVykKKwkJCQl2ZWN0X2luc2Vy dCh2V2lkdGhDb3VudGVycywgaW5zV2lkdGhJbnNlcnQucG9zLCAoaXRlbV90KTEpOworCQkJ ZWxzZSBpZiAoaW5zV2lkdGhJbnNlcnQuc3QgPT0gVVNWX0lOU19FWElTVFMpCisJCQkJdldp ZHRoQ291bnRlcnMtPm1baW5zV2lkdGhJbnNlcnQucG9zXSsrOworCQkJZWxzZQorCQkJCXJl dHVybiAtMTsKKwkJfQorCQlwcmV2ID0gYXJyW2pdOworCX0KKwlyZXR1cm4gMDsKK30KKwor LyoKKyAqIENhbGN1bGF0ZSB3aWR0aCBvZiBzaG9ydCBkZWx0YXMsIHdpZHRoIG9mIGV4Y2Vw dGlvbnMsIGFuZCBudW1iZXIgb2YKKyAqIGV4Y2VwdGlvbnMKKyAqLworaW50CitkZm9yX2Nh bGNfd2lkdGgoc2l6ZV90IGNudERlbHRhLCBjb25zdCB1bmlxc29ydHZlY3RfdCAqdXN2RGVs dGFXaWR0aHMsCisJCQkJY29uc3QgdmVjdF90ICp2V2lkdGhDb3VudGVycywgc2l6ZV90ICp3 aWR0aCwKKwkJCQlzaXplX3QgKmNudEV4Y2VwdGlvbnMpCit7CisjZGVmaW5lIE1JTl9ERUxU QVNfUVVBTlRJVFlfQUxMT1dJTkdfRVhDRVBUSU9OUyA0CisKKwlzaXplX3QgY250U2hvcnRE ZWx0YXM7IC8qIG51bWJlciBvZiBkZWx0YXMgcHJlc2VudGVkIHdpdGhvdXQgZXhjZXB0aW9u cyAqLworCXNpemVfdCBpbmR4V2lkdGg7CS8qIHRoZSB3aWR0aCBvZiBzaG9ydCBkZWx0YXMg KGluZGV4IGZyb20gdldpZHRoQ291bnRlcnMKKwkJCQkJCSAqIChhbmQgZnJvbSB2RGVsdGFX aWR0aCBhY2NvcmRpbmdseSkKKwkJCQkJCSAqLworCWlmICh1c3ZEZWx0YVdpZHRocyA9PSBO VUxMIHx8IHZXaWR0aENvdW50ZXJzID09IE5VTEwgfHwgd2lkdGggPT0gTlVMTCB8fAorCQlj bnRFeGNlcHRpb25zID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCWNudFNob3J0RGVsdGFz ID0gY250RGVsdGE7CisJaW5keFdpZHRoID0gdXN2RGVsdGFXaWR0aHMtPmNudCAtIDE7IC8q IGNvdW50ZXIgaW50byBpbmRleCAqLworCSpjbnRFeGNlcHRpb25zID0gMDsKKworCS8qCisJ ICogSGVyZSB3ZSB0cnkgdG8gZGVjcmVhc2UgdGhlIHdpZHRoIG9mIHNob3J0IGRlbHRhcyBp biBvcmRlciB0byBjb21wcmVzcworCSAqIHRoZSBhcnJheSBvZiBkZWx0YXMgaW4gdGhlIG1l YW50aW1lIHdlIGFyZSBlYWdlciB0byBjb3ZlciBubyBsZXNzIHRoYW4KKwkgKiA5MCUgb2Yg ZGVsdGFzIHdlIGhhdmUuIEl0IGlzIGFuIGhldXJpc3RpYyBhbmFseXNpcyBiYXNlZCBvbiB0 aGUKKwkgKiBzdWdnZXN0aW9uICJubyBsZXNzIHRoYW4gOTAlIG9mIGRlbHRhcyB3ZSBoYXZl Ii4KKwkgKgorCSAqIFRPRE86IGFuYWx5emluZyB3ZSBtaWdodCB3YW50IGNhbHVsYXRlIHRo ZSBmdWxsIHNpemUgb2YgdGhlIHBhY2sgZm9yIGVhY2gKKwkgKiB2YXJpYW50IG9mIHRoZSB3 aWR0aC4KKwkgKi8KKwlpZiAoY250RGVsdGEgPj0gTUlOX0RFTFRBU19RVUFOVElUWV9BTExP V0lOR19FWENFUFRJT05TKSB7CisJCXNpemVfdCBzek1pbkNvdmVyYWdlOyAvKiB0aHJlc2hv bGQgKi8KKwkJc2l6ZV90IGo7CisKKwkJaWYgKGNudERlbHRhID49IDEwKQorCQkJc3pNaW5D b3ZlcmFnZSA9IGNudERlbHRhIC0gY250RGVsdGEgLyAxMDsKKwkJZWxzZQorCQkJc3pNaW5D b3ZlcmFnZSA9IGNudERlbHRhIC0gMTsKKworCQlqID0gaW5keFdpZHRoOworCisJCXdoaWxl IChqID4gMCkgeworCQkJaWYgKGNudFNob3J0RGVsdGFzIC0gdldpZHRoQ291bnRlcnMtPm1b al0gPCBzek1pbkNvdmVyYWdlKQorCQkJCWJyZWFrOworCisJCQljbnRTaG9ydERlbHRhcyAt PSB2V2lkdGhDb3VudGVycy0+bVtqXTsKKwkJCWotLTsKKwkJCWluZHhXaWR0aCA9IGo7CisJ CX0KKwkJKmNudEV4Y2VwdGlvbnMgPSBjbnREZWx0YSAtIGNudFNob3J0RGVsdGFzOworCX0K KworCSp3aWR0aCA9IHVzdkRlbHRhV2lkdGhzLT5tW2luZHhXaWR0aF07CisJcmV0dXJuIDA7 Cit9CisKKy8qCisgKiBkZm9yX2FuYWx5emUKKyAqIEFuYWx5emUgaW5wdXQgYXJyYXksIGNh bGN1bGF0ZSBkZWx0YXMgYW5kIHRoZWlyIHdpZHRoLCBkZWZpbmUgZXhjZXB0aW9ucyBhbmQK KyAqIHRoZWlyIHBvc2l0aW9ucy4gUmV0dXJucyB0aGVtIHRocm91Z2ggdGhlIGRmb3IsIHZE ZWx0YXMsIHVzdkV4Y1Bvcy4gSWYKKyAqIHVzdkV4Y1BvcyA9PSBOVUxMIC0gZG9uJ3QgY2Fs Y3VsYXRlIGV4Y2VwdGlvbnMuCisgKgorICogZGZvcl9hbmFseXplIGZ1bmN0aW9uIGRvZXMg bm90IHVzZSBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIGZvciBpdHMKKyAqIGxvY2FsIGNv bnRhaW5lcnMuCisgKgorICogQSBjYWxsZXIgaGFzIHRvIGNvbnRyb2wgd2hldGhlciB2RGVs dGFzIGFuZCB1c3ZFeGNQb3MgdXNlIG91dGVyIG1lbW9yeQorICogcHJvdmlkZWQgYnkgY2Fs bGVyIG9yIG1hbmFnZSBtZW1vcnkgYWxsb2NhdGlvbiBhdXRvbWF0aWNhbGx5LCB3aGljaCBk ZWZpbmVzCisgKiB3aGV0aGVyIHZlY3RfaW5zZXJ0IGFuZCB2ZWN0X2FwcGVuZCBmdW5jdGlv bnMsIGludm9rZWQgZnJvbSBoZXJlLCB1c2UgZHluYW1pYworICogbWVtb3J5IG9yIG5vdC4K KyAqCisgKiBBIGNhbGxlciBzaG91bGQgdGFrZSBpbnRvIGFjY291bnQgdGhhdCBkZm9yX21l dGFfdCBkZm9yIGFyZSBnb2luZyB0byBiZQorICogbnVsbGlmaWVkIGluIHRoaXMgZnVuY3Rp b24sIHNvIGl0IHNob3VsZCBub3QgaGF2ZSBhbnkgbWVhbmluZ2Z1bGwgZGF0YSBieQorICog c3RhcnQgb2YgZGZvcl9hbmFseXplLCBlc3BlY2lhbGx5IGl0cyBwYWNrIGZpZWxkIHNob3Vs ZCBub3QgYmUgdXNlZCBhcyBhCisgKiBwb2ludGVyIG9uIGR5bmFtaWMgbWVtb3J5LCBvdGhl cndpc2UgbWVtb3J5IGxlYWthZ2UgaXMgcG9zc2libGUuCisgKgorICovCitpbnQKK2Rmb3Jf YW5hbHl6ZShzaXplX3QgY250LCBjb25zdCBpdGVtX3QgYXJyW10sIC8qIGlucHV0ICovCisJ CQkgZGZvcl9tZXRhX3QgKmRmb3IsIHZlY3RfdCAqdkRlbHRhcywKKwkJCSB1bmlxc29ydHZl Y3RfdCAqdXN2RXhjUG9zKSAvKiBvdXRwdXQgKi8KK3sKKyNkZWZpbmUgREVMVEFfV0lEVEhf TUFYX05VTUJFUiAoc2l6ZW9mKGl0ZW1fdCkgKiA4KQorCXVuaXFzb3J0dmVjdF90IHVzdkRl bHRhV2lkdGhzOworCWl0ZW1fdCBidWZEZWx0YVdpZHRoW0RFTFRBX1dJRFRIX01BWF9OVU1C RVJdOworCXZlY3RfdCB2V2lkdGhDb3VudGVyczsKKwlpdGVtX3QgYnVmV2lkdGhDb3VudGVy c1tERUxUQV9XSURUSF9NQVhfTlVNQkVSXTsKKwlpdGVtX3QgbWFzazsKKwlpbnQgcmVzID0g LTE7CisKKwlleGNhbGdfdCBpc0V4Y1VzYWdlID0gKHVzdkV4Y1BvcyA9PSBOVUxMKSA/IERG T1JfRVhDX0RPTlRfVVNFIDoKKwkJCQkJCQkJCQkJCURGT1JfRVhDX1VTRTsKKworCWlmIChk Zm9yID09IE5VTEwpCisJCWdvdG8gZGZvcl9hbmFseXplX2Vycm9yOworCisJbWVtc2V0KGRm b3IsIDAsIHNpemVvZihkZm9yX21ldGFfdCkpOworCisJaWYgKGNudCA9PSAwKQorCQkvKiBk Zm9yLT5pdGVtX2NudCA9IDA7ICovIC8qIGl0J3MgYmVlbiBhbHJlYWR5IGRvbmUgd2l0aCBt ZW1zZXQgKi8KKwkJZ290byBkZm9yX2FuYWx5emVfcmV0OworCWVsc2UgaWYgKGFyciA9PSBO VUxMKQorCQlnb3RvIGRmb3JfYW5hbHl6ZV9lcnJvcjsKKworCWlmICgwICE9IHZlY3RfaW5p dCgmdXN2RGVsdGFXaWR0aHMsIERFTFRBX1dJRFRIX01BWF9OVU1CRVIsIGJ1ZkRlbHRhV2lk dGgpKQorCQlnb3RvIGRmb3JfYW5hbHl6ZV9lcnJvcjsKKworCWlmIChpc0V4Y1VzYWdlID09 IERGT1JfRVhDX1VTRSkKKwl7CisJCWlmICgwICE9CisJCQl2ZWN0X2luaXQoJnZXaWR0aENv dW50ZXJzLCBERUxUQV9XSURUSF9NQVhfTlVNQkVSLAorCQkJCQkgIGJ1ZldpZHRoQ291bnRl cnMpKQorCQkJZ290byBkZm9yX2FuYWx5emVfZXJyb3I7CisJfQorCisJZGZvci0+aXRlbV9j bnQgPSBjbnQ7CisJZGZvci0+c2lnbmVkX2RlbHRhcyA9IGZhbHNlOworCWlmICgwICE9CisJ CWRmb3JfY2FsY19kZWx0YXMoZGZvci0+aXRlbV9jbnQsIGFyciwgdkRlbHRhcywgJnVzdkRl bHRhV2lkdGhzLAorCQkJCQkJIChpc0V4Y1VzYWdlID09IERGT1JfRVhDX1VTRSkgPyAmdldp ZHRoQ291bnRlcnMgOiBOVUxMLAorCQkJCQkJICZkZm9yLT5zaWduZWRfZGVsdGFzKSkKKwkJ Z290byBkZm9yX2FuYWx5emVfZXJyb3I7CisKKwlBc3NlcnQoY250ID09IHZEZWx0YXMtPmNu dCk7CisJQXNzZXJ0KHVzdkRlbHRhV2lkdGhzLmNudCA+IDApOworCisJaWYgKGlzRXhjVXNh Z2UgPT0gREZPUl9FWENfVVNFKQorCXsKKwkJaWYgKDAgIT0KKwkJCWRmb3JfY2FsY193aWR0 aCh2RGVsdGFzLT5jbnQsICZ1c3ZEZWx0YVdpZHRocywgJnZXaWR0aENvdW50ZXJzLAorCQkJ CQkJCSZkZm9yLT5kZWx0YV93aWQsICZkZm9yLT5leGNfY250KSkKKwkJCWdvdG8gZGZvcl9h bmFseXplX2Vycm9yOworCX0KKwllbHNlCisJeworCQlkZm9yLT5kZWx0YV93aWQgPQorCQkJ dXN2RGVsdGFXaWR0aHMubVt1c3ZEZWx0YVdpZHRocy5jbnQgLSAxXTsgLyogbWF4IHdpZHRo ICovCisJCWRmb3ItPmV4Y19jbnQgPSAwOworCX0KKworCWRmb3ItPmV4Y193aWQgPSB1c3ZE ZWx0YVdpZHRocy5tW3VzdkRlbHRhV2lkdGhzLmNudCAtIDFdIC0gZGZvci0+ZGVsdGFfd2lk OworCisJLyogQSBtYXNrIGxvb2tzIGxpa2UgMDAwMTExMS4gSXQgaXMgYWxzbyB0aGUgbWF4 IHZhbHVlIG9mIGEgc2hvcnQgZGVsdGEgKi8KKwltYXNrID0gd2lkdGhfdG9fbWFzayhkZm9y LT5kZWx0YV93aWQpOworCisJZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2RGVsdGFzLT5jbnQ7 IGkrKykKKwl7CisJCWlmICh2RGVsdGFzLT5tW2ldID4gbWFzaykKKwkJeworCQkJQXNzZXJ0 KGlzRXhjVXNhZ2UgPT0gREZPUl9FWENfVVNFKTsKKwkJCWlmICgwICE9IHZlY3RfYXBwZW5k KHVzdkV4Y1BvcywgKGl0ZW1fdClpKSkKKwkJCQlnb3RvIGRmb3JfYW5hbHl6ZV9lcnJvcjsK KwkJfQorCX0KKwlBc3NlcnQoZGZvci0+ZGVsdGFfd2lkICsgZGZvci0+ZXhjX3dpZCA8PSBz aXplb2YoaXRlbV90KSAqIDgpOworCXJlcyA9IDA7CitkZm9yX2FuYWx5emVfcmV0OgorCXJl dHVybiByZXM7CitkZm9yX2FuYWx5emVfZXJyb3I6CisJLyogZGZvcl9hbmFseXplIGRvZXNu J3QgYWZmZWN0IHRoZSBwYWNrIGZpZWxkIChkb2Vzbid0IGFsbG9jYXRlLCBkZWxldGUgb3IK KwkgKiBvdGhlcndpc2UpLCBzbyB3ZSBjYW4gbnVsbGlmeSB0aGUgd2hvbGUgZGZvciBhbmQg aXQKKwkgKiBpcyBzYWZlLCBubyBsZWFrYWdlICovCisJbWVtc2V0KGRmb3IsIDAsIHNpemVv ZihkZm9yX21ldGFfdCkpOworCXJlcyA9IC0xOworCWdvdG8gZGZvcl9hbmFseXplX3JldDsK K30KKworLyoKKyAqIGRmb3JfcGFjaworICoKKyAqIFRoZSBpbnB1dCBhcnJheSBhcnIgaGFz IHRvIGJlIHNvcnRlZC4KKyAqCisgKiBJZiBhIGNhbGxlciBuZWVkcyB0byBhdm9pZCB1c2lu ZyBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uLCB0aGV5IGhhdmUgdG8KKyAqIHByb3ZpZGUg dGhlIGV4dGVybmFsIG1lbW9yeSBidWZmZXIuIFRoZSBzaXplIG9mIHRoaXMgYnVmZmVyIHNo b3VsZCBiZSBub3QKKyAqIGxlc3MgdGhhbiA0ICogY250ICogc2l6ZW9mKGl0ZW1fdCkuIEl0 IHdpbGwgYmUgdXNlZCBmb3IgYXJyYXlzIHBvaW50ZWQgYnkKKyAqICooZGZvci0+cGFjayks ICoodkRlbHRhcy0+bSksICoodkV4Y1Bvc0RlbHRhcy0+bSksICoodXN2RXhjUG9zLT5tKS4K KyAqCisgKiBJZiBkeW5hbWljIGFsbG9jYXRpb24gaGFzIGJlZW4gdXNlZCBieSB0aGUgZGZv cl9wYWNrLCBhIGNhbGxlciBoYXMgdG8gZnJlZQorICogdGhlIHBpZWNlIG9mIG1lbW9yeSBw b2ludGVkIGJ5IGRmb3ItPnBhY2ssIHNpbmNlIGl0IGlzIGFsb2NhdGVkIGJ5IHRoZQorICog ZGZvcl9wYWNrIHdpdGggREZPUl9NQUxMT0MuIEZyZWVpbmcgaGFzIHRvIGJlIHBlcmZvcm1l ZCBieSBmdW5jdGlvbgorICogY29uZm9ybWluZyB0byBERk9SX01BTExPQyAocGFpcmVkIHdp dGggaXQpLiBGb3IgaW5zdGFuY2UsIGlmIERGT1JfTUFMTE9DIGlzCisgKiBtYWxsb2MsIHRo YW4gbWVtb3J5IHNob3VsZCBiZSBmcmVlZCBieSBmcmVlLgorICovCitpbnQKK2Rmb3JfcGFj ayhzaXplX3QgY250LCBjb25zdCBpdGVtX3QgYXJyW10sIGV4Y2FsZ190IGlzRXhjVXNhZ2Us CisJCSAgZGZvcl9tZXRhX3QgKmRmb3IsIHNpemVfdCBidWZTaXplLCB1aW50OF90IGJ1Zltd KQoreworCWludCByZXM7CisJdmVjdF90IHZEZWx0YXMgPSB7IDAgfTsKKwl2ZWN0X3QgdkV4 Y1Bvc0RlbHRhcyA9IHsgMCB9OworCXVuaXFzb3J0dmVjdF90IHVzdkV4Y1BvcyA9IHsgMCB9 OworCisJaWYgKGRmb3IgPT0gTlVMTCB8fAorCQkoYnVmU2l6ZSAhPSAwICYmIGJ1ZlNpemUg PCA0ICogY250ICogc2l6ZW9mKGl0ZW1fdCkpKQorCXsKKwkJZ290byBkZm9yX3BhY2tfZXJy b3I7CisJfQorCisJLyoKKwkgKiBXZSBkb24ndCBuZWVkIGl0IGhlcmU6CisJICogCQkJbWVt c2V0KGRmb3IsIDAsIHNpemVvZihkZm9yX21ldGFfdCkpLgorCSAqIEl0IGlzIGdvaW5nIHRv IGJlIGRvbmUgaW4gZGZvcl9hbmFseXplLgorCSAqLworCisJeworCQlpdGVtX3QgKmRlbHRh QnVmID0gTlVMTDsKKwkJaXRlbV90ICpleGNQb3NEZWx0YXNCdWYgPSBOVUxMOworCQlpdGVt X3QgKmV4Y1Bvc0J1ZiA9IE5VTEw7CisKKwkJaW50IHJlczEgPSAwOworCQlpbnQgcmVzMiA9 IDA7CisJCWludCByZXMzID0gMDsKKworCQlpZiAoYnVmU2l6ZSAhPSAwKQorCQl7CisJCQkv KiBTdGVwIG92ZXIgdGhlIG1heGltYWwgYWxsb3dlZCBERm9SIHBhY2sgc2l6ZSAqLworCQkJ ZGVsdGFCdWYJCT0gKGl0ZW1fdCopKGJ1ZiArIGNudCAqIHNpemVvZihpdGVtX3QpKTsKKwkJ CWV4Y1Bvc0RlbHRhc0J1ZiA9IChpdGVtX3QqKShidWYgKyBjbnQgKiBzaXplb2YoaXRlbV90 KSAqIDIpOworCQkJZXhjUG9zQnVmCQk9IChpdGVtX3QqKShidWYgKyBjbnQgKiBzaXplb2Yo aXRlbV90KSAqIDMpOworCQl9CisKKwkJLyogU2V0dXAgY29udGFpbmVycyB3aXRoIG91dGVy IG1lbW9yeSAqLworCQlyZXMxID0gdmVjdF9pbml0KCZ2RGVsdGFzLCBjbnQsIGRlbHRhQnVm KTsKKworCQlpZiAoaXNFeGNVc2FnZSkKKwkJeworCQkJcmVzMiA9IHZlY3RfaW5pdCgmdkV4 Y1Bvc0RlbHRhcywgY250LCBleGNQb3NEZWx0YXNCdWYpOworCQkJcmVzMyA9IHZlY3RfaW5p dCgmdXN2RXhjUG9zLCBjbnQsIGV4Y1Bvc0J1Zik7CisJCX0KKworCQlpZiAocmVzMSAhPSAw IHx8IHJlczIgIT0gMCB8fCByZXMzICE9IDApCisJCQlnb3RvIGRmb3JfcGFja19lcnJvcjsK Kwl9CisKKwlpZiAoMCAhPQorCQlkZm9yX2FuYWx5emUoY250LCBhcnIsIGRmb3IsICZ2RGVs dGFzLAorCQkJCQkgKGlzRXhjVXNhZ2UgPT0gREZPUl9FWENfVVNFKSA/ICZ1c3ZFeGNQb3Mg OiBOVUxMKSkKKwkJZ290byBkZm9yX3BhY2tfZXJyb3I7CisKKwlpZiAoZGZvci0+ZXhjX2Nu dCAhPSAwKQorCXsKKwkJLyogV2UgdHJlYXQgZXhjZXB0aW9uIHBvc2l0aW9ucyBhcyBhIHNv cnRlZCBzZXF1ZW5jZSwgYXBwbHkgdGhlCisJCSAqIERGb1IgYWxnb3JpdGhtIHRvIGl0LCBh bmQgc2F2ZSBub3QgdGhlaXIgYWJzb2x1dGUgdmFsdWVzIGJ1dCB0aGVpcgorCQkgKiBkZWx0 YXMuICovCisJCWRmb3JfbWV0YV90IGRmb3JFeGNQb3M7CisJCUFzc2VydChkZm9yLT5leGNf Y250ID09IHVzdkV4Y1Bvcy5jbnQpOworCQlpZiAoMCAhPQorCQkJZGZvcl9hbmFseXplKHVz dkV4Y1Bvcy5jbnQsIHVzdkV4Y1Bvcy5tLCAmZGZvckV4Y1BvcywKKwkJCQkJCSAmdkV4Y1Bv c0RlbHRhcywgTlVMTCkpCisJCQlnb3RvIGRmb3JfcGFja19lcnJvcjsKKworCQlBc3NlcnQo ZGZvci0+ZXhjX2NudCA9PSB2RXhjUG9zRGVsdGFzLmNudCk7CisJCUFzc2VydChkZm9yLT5l eGNfY250ID09IGRmb3JFeGNQb3MuaXRlbV9jbnQpOworCisJCWRmb3ItPmV4Y19wb3Nfd2lk ID0gZGZvckV4Y1Bvcy5kZWx0YV93aWQ7CisJfQorCWVsc2UKKwl7CisJCUFzc2VydCh1c3ZF eGNQb3MuY250ID09IDApOyAvKiB1c3ZFeGNQb3MgaGFzIHRvIHJlbWFpbiB6ZXJvZWQuICov CisJCUFzc2VydChkZm9yLT5leGNfd2lkID09IDApOyAvKiBObyBleGNlcHRpb25zLCBubyBl eGNlcHRpb25zJyB3aWR0aC4gKi8KKwkJQXNzZXJ0KGRmb3ItPmV4Y19wb3Nfd2lkID09IDAp OyAvKiBObyBleGNlcHRpb25zJyBwb3NpdGlvbnMgd2lkdGggdG9vLiAqLworCX0KKworCS8q IGRmb3JfcGFjayBzZXJpYWxpc2F0aW9uIHBhY2tpbmcgKi8KKwl7CisJCS8qIGluZGV4IG9m IHRoZSBuZXh0IGZyZWUgYml0IHRvIGJlIHVzZWQ6ICovCisJCXNpemVfdCBkOyAvKiAtIGJ5 IGEgZGVsdGEgKi8KKwkJc2l6ZV90IGU7IC8qIC0gYnkgYW4gZXhjZXB0aW9uICovCisJCXNp emVfdCBwOyAvKiAtIGJ5IGFuIGV4Y2VwdGlvbiBwb3NpdGlvbiAqLworCQlpdGVtX3QgbWFz azsKKwkJZGZvcl9zdGF0c190IHN0YXRzOworCQlzaXplX3QgajsKKworCQlzdGF0cyA9IGRm b3JfY2FsY19zdGF0cygqZGZvcik7CisJCWRmb3ItPm5ieXRlcyA9IGRmb3JfY2FsY19uYnl0 ZXMoKmRmb3IpOworCisJCWlmIChidWZTaXplICE9IDApCisJCXsKKwkJCS8qIE1heCBzaXpl IG9mIHRoZSBkZm9yLT5wYWNrIGlzIGNudCAqIHNpemVvZihzaXplX3QpICovCisJCQlkZm9y LT5wYWNrID0gYnVmOworCQkJZGZvci0+b3V0ZXJfbWVtID0gdHJ1ZTsKKwkJCWlmIChkZm9y LT5uYnl0ZXMgPiBjbnQgKiBzaXplb2Yoc2l6ZV90KSkKKwkJCQlnb3RvIGRmb3JfcGFja19l cnJvcjsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIElmIGEgYnVmZmVyIHdhcyBub3QgcHJv dmlkZWQgYnkgY2FsbGVyIHdlIGFsbG9jYXRlIGl0IGJ5CisJCQkgKiBvdXJzZWx2ZXMKKwkJ CSAqLworCQkJZGZvci0+cGFjayA9ICh1aW50OF90ICopREZPUl9NQUxMT0MoKGRmb3ItPm5i eXRlcykpOworCisJCQlkZm9yLT5vdXRlcl9tZW0gPSBmYWxzZTsKKwkJfQorCisJCWlmIChk Zm9yLT5wYWNrID09IE5VTEwpCisJCQlnb3RvIGRmb3JfcGFja19lcnJvcjsKKworCQltZW1z ZXQoZGZvci0+cGFjaywgMCwgZGZvci0+bmJ5dGVzKTsKKworCQkvKiBpbmRleCBvZiB0aGUg bmV4dCBmcmVlIGJpdCB0byBiZSB1c2VkOiAqLworCQlkID0gMDsJCQkJCQkJLyogLSBieSBh IGRlbHRhICovCisJCWUgPSBzdGF0cy5kZWx0YV9wYWNrX25iaXRzOwkJLyogLSBieSBhbiBl eGNlcHRpb24gKi8KKwkJcCA9IGUgKyBzdGF0cy5leGNfcGFja19uYml0czsJLyogLSBieSBh biBleGNlcHRpb24gcG9zaXRpb24gaW5kZXggKi8KKwkJLyogQSBtYXNrIGxvb2tzIGxpa2Ug MDAwMTExMS4gSXQgaXMgYWxzbyB0aGUKKwkJICogbWF4IHZhbHVlIG9mIGEgc2hvcnQgZGVs dGEgKi8KKwkJbWFzayA9IHdpZHRoX3RvX21hc2soZGZvci0+ZGVsdGFfd2lkKTsKKworCQlq ID0gMDsKKwkJZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2RGVsdGFzLmNudDsgaSsrKQorCQl7 CisJCQlkID0gYml0cGFja19wYWNrKGRmb3ItPnBhY2ssIGQsIHZEZWx0YXMubVtpXSAmIG1h c2ssCisJCQkJCQkJIGRmb3ItPmRlbHRhX3dpZCk7CisKKwkJCWlmICh2RGVsdGFzLm1baV0g PiBtYXNrKQorCQkJeworCQkJCUFzc2VydChpc0V4Y1VzYWdlID09IERGT1JfRVhDX1VTRSk7 CisJCQkJQXNzZXJ0KHVzdkV4Y1Bvcy5tW2pdID09IGkpOworCQkJCUFzc2VydChqIDwgdXN2 RXhjUG9zLmNudCk7CisJCQkJQXNzZXJ0KGogPCB2RXhjUG9zRGVsdGFzLmNudCk7CisJCQkJ QXNzZXJ0KGRmb3ItPmV4Y193aWQgIT0gMCk7CisJCQkJQXNzZXJ0KGRmb3ItPmV4Y19wb3Nf d2lkICE9IDApOworCisJCQkJZSA9IGJpdHBhY2tfcGFjayhkZm9yLT5wYWNrLCBlLCB2RGVs dGFzLm1baV0gPj4gZGZvci0+ZGVsdGFfd2lkLAorCQkJCQkJCQkgZGZvci0+ZXhjX3dpZCk7 CisJCQkJcCA9IGJpdHBhY2tfcGFjayhkZm9yLT5wYWNrLCBwLCB2RXhjUG9zRGVsdGFzLm1b al0sIGRmb3ItPmV4Y19wb3Nfd2lkKTsKKwkJCQlqKys7CisJCQl9CisJCX0KKworCQlpZiAo aXNFeGNVc2FnZSA9PSBERk9SX0VYQ19VU0UpCisJCQlBc3NlcnQoaiA9PSB1c3ZFeGNQb3Mu Y250KTsKKwkJZWxzZQorCQkJQXNzZXJ0KGogPT0gMCk7CisKKwkJQXNzZXJ0KGQgPT0gc3Rh dHMuZGVsdGFfcGFja19uYml0cyk7CisJCUFzc2VydChlID09IHN0YXRzLmRlbHRhX3BhY2tf bmJpdHMgKyBzdGF0cy5leGNfcGFja19uYml0cyk7CisJCUFzc2VydChwID09CisJCQkgICBz dGF0cy5kZWx0YV9wYWNrX25iaXRzICsgc3RhdHMuZXhjX3BhY2tfbmJpdHMgKworCQkJCSAg IHN0YXRzLmV4Y19wb3NfcGFja19uYml0cyk7CisJCXJlcyA9IDA7CisJfQorZGZvcl9wYWNr X3JldDoKKwl2ZWN0X2NsZWFyKCZ1c3ZFeGNQb3MpOworCXZlY3RfY2xlYXIoJnZFeGNQb3NE ZWx0YXMpOworCXZlY3RfY2xlYXIoJnZEZWx0YXMpOworCXJldHVybiByZXM7CitkZm9yX3Bh Y2tfZXJyb3I6CisJaWYgKGRmb3IgIT0gTlVMTCkKKwkJZGZvcl9jbGVhcl9tZXRhKGRmb3Ip OworCXJlcyA9IC0xOworCWdvdG8gZGZvcl9wYWNrX3JldDsKK30KKworLyoKKyAqIGRmb3Jf dW5wYWNrCisgKgorICogSWYgYSBjYWxsZXIgbmVlZHMgdG8gYXZvaWQgdXNpbmcgZHluYW1p YyBtZW1vcnkgYWxsb2NhdGlvbiwgdGhleSBoYXZlIHRvOgorICogMSkgcHJvdmlkZSB0aGUg ZXh0ZXJuYWwgbWVtb3J5IGJ1ZmZlci4gVGhlIHNpemUgb2YgdGhpcyBidWZmZXIgc2hvdWxk IGJlIG5vdAorICogICAgbGVzcyB0aGFuOgorICogICAgICAgIAkyICogZGZvci5pdGVtX2Nu dCAqIHNpemVvZihpdGVtX3QpICsgMiAqIGRmb3IuZXhjX2NudCAqIHNpemVvZihpdGVtX3Qp CisgKgorICogMikgdGhlIHZWYWxzIHZlY3RvciBoYXMgdG8gYmUgY3JlYXRlZCBidXQgbXVz dCBub3QgYmUgaW5pdGlhbGlzZWQuIFRoZQorICogICAgZGZvcl91bnBhY2sgc2V0cyB2VmFs cyBpbiB0aGUgJ291dGVyIG1lbW9yeScgcmVnaW1lbiBhbmQgd2lsbCBzZXQgdlZhbC0+bQor ICogICAgdG8gYnVmLgorICoKKyAqIFByb3ZpZGVkIGR5bmFtaWMgYWxsb2NhdGlvbiBpcyB1 c2VkIGJ5IHRoZSBkZm9yX3VucGFjaywgYSBjYWxsZXIgd2lsbCBoYXZlIHRvCisgKiBmcmVl IHRoZSBwaWVjZSBvZiBtZW1vcnkgcG9pbnRlZCBieSB2VmFscy0+bSwgdXNpbmcgdmVjdF9j bGVhcigmdlZhbHMpLgorICoKKyAqIEFyZSB0aGUgb3V0ZXIgbWVtb3J5IGlzIHVzZWQKKyAq LworaW50CitkZm9yX3VucGFjayhjb25zdCBkZm9yX21ldGFfdCAqZGZvciwgdW5pcXNvcnR2 ZWN0X3QgKnZWYWxzLCBzaXplX3QgYnVmU2l6ZSwKKwkJCXVpbnQ4X3QgYnVmW10pCit7CisJ aW50IHJlcyA9IC0xOworCXNpemVfdCBzekRlbHRhUGFjazsKKwl2ZWN0X3QgdkV4Y3MgPSB7 IDAgfTsKKwl2ZWN0X3QgdkV4Y1Bvc3MgPSB7IDAgfTsKKwlleGNhbGdfdCBpc0V4Y1VzYWdl ID0gKGRmb3ItPmV4Y19jbnQgPT0gMCkgPyBERk9SX0VYQ19ET05UX1VTRSA6CisJCQkJCQkJ CQkJCQkgREZPUl9FWENfVVNFOworCisJaWYgKHZWYWxzID09IE5VTEwpCisJCWdvdG8gZGZv cl91bnBhY2tfZXJyb3I7CisKKwlpZiAoYnVmU2l6ZSAhPSAwICYmCisJCWJ1ZlNpemUgPCAo MiAqIGRmb3ItPml0ZW1fY250ICogc2l6ZW9mKGl0ZW1fdCkgKworCQkJCSAgIDIgKiBkZm9y LT5leGNfY250ICogc2l6ZW9mKGl0ZW1fdCkpKQorCQlnb3RvIGRmb3JfdW5wYWNrX2Vycm9y OworCisJc3pEZWx0YVBhY2sgPSBkZm9yLT5kZWx0YV93aWQgKiBkZm9yLT5pdGVtX2NudDsK KworCXsKKwkJdWludDhfdCAqdmFsc0J1ZiA9IE5VTEw7CisJCWlmIChidWZTaXplICE9IDAp CisJCQl2YWxzQnVmID0gYnVmOworCisJCWlmICh2ZWN0X2luaXQodlZhbHMsIGRmb3ItPml0 ZW1fY250LCAoaXRlbV90ICopdmFsc0J1ZikgIT0gMCkKKwkJCWdvdG8gZGZvcl91bnBhY2tf ZXJyb3I7CisJfQorCisJLyogQ2FsY3VsYXRlIGV4Y2VwdGlvbnMgKi8KKwlpZiAoaXNFeGNV c2FnZSA9PSBERk9SX0VYQ19VU0UpCisJeworCQlzaXplX3Qgc3pFeGNQYWNrOworCQlzaXpl X3QgY3JFeGM7IC8qIGNhcmV0IChjdXJzb3IpICovCisJCXNpemVfdCBjclBvczsgLyogY2Fy ZXQgKGN1cnNvcikgKi8KKworCQl1aW50OF90ICpleGNCdWYgPSBOVUxMOworCQl1aW50OF90 ICpleGNQb3NzQnVmID0gTlVMTDsKKworCQlpbnQgcmVzMSA9IDA7CisJCWludCByZXMyID0g MDsKKworCQlzekV4Y1BhY2sgPSBkZm9yLT5leGNfY250ICogZGZvci0+ZXhjX3dpZDsKKwkJ Y3JFeGMgPSBzekRlbHRhUGFjazsKKwkJY3JQb3MgPSBjckV4YyArIHN6RXhjUGFjazsKKwor CQlpZiAoYnVmU2l6ZSAhPSAwKQorCQl7CisJCQkvKiBzdGVwIG92ZXIgdGhlIG1lbW9yeSBv Y2N1cGllZCBieSB2VmFscyAqLworCQkJZXhjQnVmID0gYnVmICsgZGZvci0+aXRlbV9jbnQg KiBzaXplb2YoaXRlbV90KTsKKwkJCWV4Y1Bvc3NCdWYgPSBleGNCdWYgKyBkZm9yLT5leGNf Y250ICogc2l6ZW9mKGl0ZW1fdCk7CisJCX0KKworCQlyZXMxID0gdmVjdF9pbml0KCZ2RXhj cywgZGZvci0+ZXhjX2NudCwgKGl0ZW1fdCAqKWV4Y0J1Zik7CisJCXJlczIgPSB2ZWN0X2lu aXQoJnZFeGNQb3NzLCBkZm9yLT5leGNfY250LCAoaXRlbV90ICopZXhjUG9zc0J1Zik7CisK KwkJaWYgKHJlczEgIT0gMCB8fCByZXMyICE9IDApCisJCQlnb3RvIGRmb3JfdW5wYWNrX2Vy cm9yOworCisKKwkJZm9yIChzaXplX3QgcG9zRXhjID0gMCwgaiA9IDA7IGogPCBkZm9yLT5l eGNfY250OyBqKyspCisJCXsKKwkJCWl0ZW1fdCBkZWx0YVBvczsKKwkJCXJlczEgPSB2ZWN0 X2FwcGVuZCgmdkV4Y3MsCisJCQkJCQkJICAgYml0cGFja191bnBhY2soZGZvci0+cGFjaywg JmNyRXhjLAorCQkJCQkJCQkJCQkgIGRmb3ItPmV4Y193aWQpKTsKKwkJCS8qIENhbGN1bGF0 ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGV4Y2VwdGlvbiBmcm9tIHRoZSBkZWx0YSBvZiB0aGUK KwkJCSAqIHBvc2l0aW9uIG9mIHRoZSBleGNlcHRpb24gKi8KKwkJCWRlbHRhUG9zID0gYml0 cGFja191bnBhY2soZGZvci0+cGFjaywgJmNyUG9zLCBkZm9yLT5leGNfcG9zX3dpZCk7CisJ CQlwb3NFeGMgKz0gZGVsdGFQb3M7CisJCQlyZXMyID0gdmVjdF9hcHBlbmQoJnZFeGNQb3Nz LCBwb3NFeGMpOworCQkJaWYgKHJlczEgIT0gMCB8fCByZXMyICE9IDApCisJCQkJZ290byBk Zm9yX3VucGFja19lcnJvcjsKKwkJfQorCQlBc3NlcnQoY3JFeGMgPT0gc3pEZWx0YVBhY2sg KyBzekV4Y1BhY2spOworCQlBc3NlcnQoY3JQb3MgPT0KKwkJCSAgIHN6RGVsdGFQYWNrICsg c3pFeGNQYWNrICsgZGZvci0+ZXhjX3Bvc193aWQgKiBkZm9yLT5leGNfY250KTsKKwl9CisK Kwl7IC8qIFVucGFjayBkZWx0YXMgYW5kIGNhbGN1bGF0ZSB0YXJnZXQgdmFsdWVzICovCisJ CWl0ZW1fdCBkZWx0YTsKKwkJYm9vbCBuZWdEZWx0YSA9IGZhbHNlOworCQlpdGVtX3QgcHJl diA9IDA7CisJCXNpemVfdCBqID0gMDsgLyogaW5kZXggb2YgYW4gZXhjZXB0aW9uIGFuZCBp dHMgcG9zaXRpb24gaW4gdmVjdG9ycyAqLworCQlzaXplX3QgY3JEZWx0YSA9IDA7CisKKwkJ c2l6ZV90IG1heEl0ZW1XaWR0aDsKKwkJaXRlbV90IG1heEl0ZW1NYXNrOworCisJCW1heEl0 ZW1XaWR0aCA9IHNpemVvZihpdGVtX3QpICogODsKKwkJbWF4SXRlbU1hc2sgPSB3aWR0aF90 b19tYXNrKG1heEl0ZW1XaWR0aCk7CisKKwkJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkZm9y LT5pdGVtX2NudDsgaSsrKQorCQl7CisJCQlkZWx0YSA9IGJpdHBhY2tfdW5wYWNrKGRmb3It PnBhY2ssICZjckRlbHRhLCBkZm9yLT5kZWx0YV93aWQpOworCisJCQlpZiAoaXNFeGNVc2Fn ZSA9PSBERk9SX0VYQ19VU0UgJiYKKwkJCQlqIDwgdkV4Y3MuY250ICYmCisJCQkJaSA9PSB2 RXhjUG9zcy5tW2pdKQorCQkJeworCQkJCUFzc2VydChqIDwgZGZvci0+ZXhjX2NudCk7CisJ CQkJZGVsdGEgfD0gdkV4Y3MubVtqXSA8PCBkZm9yLT5kZWx0YV93aWQ7CisJCQkJaisrOwor CQkJfQorCisJCQlpZihkZm9yLT5zaWduZWRfZGVsdGFzKQorCQkJeworCQkJCW5lZ0RlbHRh ID0gZGVsdGEgJiAweDAxOworCQkJCWRlbHRhID4+PSAxOworCQkJCWlmICgobmVnRGVsdGEg JiYgcHJldiA8IGRlbHRhKSB8fAorCQkJCQkoIW5lZ0RlbHRhICYmIGRlbHRhID4gbWF4SXRl bU1hc2sgLSBwcmV2KSkKKwkJCQl7CisJCQkJCWRlbHRhID0gbWF4SXRlbU1hc2sgLSBkZWx0 YSArIDE7CisJCQkJCW5lZ0RlbHRhID0gIW5lZ0RlbHRhOworCQkJCX0KKwkJCX0KKworCQkJ aWYgKG5lZ0RlbHRhKQorCQkJCXByZXYgLT0gZGVsdGE7CisJCQllbHNlCisJCQkJcHJldiAr PSBkZWx0YTsKKworCQkJdmVjdF9hcHBlbmQodlZhbHMsIHByZXYpOworCQl9CisJCUFzc2Vy dChjckRlbHRhID09IHN6RGVsdGFQYWNrKTsKKwkJcmVzID0gMDsKKwl9CisKK2Rmb3JfdW5w YWNrX3JldDoKKwl2ZWN0X2NsZWFyKCZ2RXhjUG9zcyk7CisJdmVjdF9jbGVhcigmdkV4Y3Mp OworCXJldHVybiByZXM7CitkZm9yX3VucGFja19lcnJvcjoKKwl2ZWN0X2NsZWFyKHZWYWxz KTsKKwlyZXMgPSAtMTsKKwlnb3RvIGRmb3JfdW5wYWNrX3JldDsKK30KKwordm9pZAorZGZv cl9jbGVhcl9tZXRhKGRmb3JfbWV0YV90ICptZXRhKQoreworCWlmIChtZXRhID09IE5VTEwp CisJCXJldHVybjsKKworCWlmIChtZXRhLT5wYWNrICE9IE5VTEwgJiYgIW1ldGEtPm91dGVy X21lbSkKKwkJREZPUl9GUkVFKG1ldGEtPnBhY2spOworCisJbWVtc2V0KG1ldGEsIDAsIHNp emVvZihkZm9yX21ldGFfdCkpOworfQorCitkZm9yX3N0YXRzX3QKK2Rmb3JfY2FsY19zdGF0 cyhkZm9yX21ldGFfdCBkZm9yKQoreworCWRmb3Jfc3RhdHNfdCBzdGF0OworCXNpemVfdCBu Ynl0ZXM7CisJc3RhdC5kZWx0YV9wYWNrX25iaXRzID0gZGZvci5kZWx0YV93aWQgKiBkZm9y Lml0ZW1fY250OworCXN0YXQuZXhjX3BhY2tfbmJpdHMgPSBkZm9yLmV4Y193aWQgKiBkZm9y LmV4Y19jbnQ7CisJc3RhdC5leGNfcG9zX3BhY2tfbmJpdHMgPSBkZm9yLmV4Y19wb3Nfd2lk ICogZGZvci5leGNfY250OworCisJc3RhdC5uYml0cyA9IHN0YXQuZGVsdGFfcGFja19uYml0 cyArIHN0YXQuZXhjX3BhY2tfbmJpdHMgKyBzdGF0LmV4Y19wb3NfcGFja19uYml0czsKKwor CS8qIElmIHRoZSBkaXZpc2lvbiByZXN1bHRzIGluIHRoZSByZW1haW5kZXIsIHdlIHVzZSBh biBhZGRpdGlvbmFsCisJICogYnl0ZSAqLworCW5ieXRlcyA9IChzdGF0Lm5iaXRzICsgNykg LyA4OworCXN0YXQucmF0aW8gPSAoZmxvYXQpKHNpemVvZihpdGVtX3QpICogZGZvci5pdGVt X2NudCkgLyAoZmxvYXQpbmJ5dGVzOworCisJcmV0dXJuIHN0YXQ7Cit9CisKK3NpemVfdCBk Zm9yX2NhbGNfbmJ5dGVzKGRmb3JfbWV0YV90IGRmb3IpCit7CisJZGZvcl9zdGF0c190IHN0 YXQ7CisJc3RhdCA9IGRmb3JfY2FsY19zdGF0cyhkZm9yKTsKKwlyZXR1cm4gKHN0YXQubmJp dHMgKyA3KSAvIDg7Cit9CisKKyNpbmNsdWRlICJsaWIvZGZvcl90ZW1wbF91bmRlZi5oIgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbGliL2Rmb3JfdTE2LmMgYi9zcmMvYmFja2VuZC9s aWIvZGZvcl91MTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u ZjcwNTFmNTU5MjUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9saWIvZGZvcl91 MTYuYwpAQCAtMCwwICsxLDggQEAKKy8qCisgKiBGaWxlOiBkZm9yX3UxNi5jCisgKi8KKwor LyogY2xhbmctZm9ybWF0IG9mZiAqLworI2luY2x1ZGUgImxpYi9kZm9yX3UxNl9jb25maWcu aCIKKyNpbmNsdWRlICJkZm9yX3RlbXBsLmMiCisvKiBjbGFuZy1mb3JtYXQgb24gKi8KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xpYi9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL2xp Yi9tZXNvbi5idWlsZAppbmRleCAwOTg0YmQwZTNmNi4uN2Y2NzMwZWZiYTEgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2xpYi9tZXNvbi5idWlsZAorKysgYi9zcmMvYmFja2VuZC9saWIv bWVzb24uYnVpbGQKQEAgLTIsNiArMiw3IEBACiAKIGRmb3Jfc291cmNlcyA9IGZpbGVzKAog ICAnYml0cGFja191MTYuYycsCisgICdkZm9yX3UxNi5jJywKICAgJ3ZlY3RfdTE2LmMnCiAp CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2xpYi9kZm9yX3RlbXBsLmggYi9zcmMvaW5j bHVkZS9saWIvZGZvcl90ZW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi44YWE0OTdkZmFhZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2xp Yi9kZm9yX3RlbXBsLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIEZpbGU6IGRmb3JfdGVt cGwuaAorICovCisjaW5jbHVkZSAiZGZvcl90ZW1wbF9zdGFwbGUuaCIKKworZXh0ZXJuIGlu dCBkZm9yX2NhbGNfZGVsdGFzKHNpemVfdCBjbnQsIGNvbnN0IGl0ZW1fdCBhcnJbXSwgdmVj dF90ICp2RGVsdGFzLAorCQkJCQkJCXVuaXFzb3J0dmVjdF90ICp1c3ZEZWx0YVdpZHRocywK KwkJCQkJCQl2ZWN0X3QgKnZXaWR0aENvdW50ZXJzLCBib29sICpzaWduKTsKKworZXh0ZXJu IGludCBkZm9yX2NhbGNfd2lkdGgoc2l6ZV90IGNudERlbHRhLAorCQkJCQkJICAgY29uc3Qg dW5pcXNvcnR2ZWN0X3QgKnVzdkRlbHRhV2lkdGhzLAorCQkJCQkJICAgY29uc3QgdmVjdF90 ICp2V2lkdGhDb3VudGVycywgc2l6ZV90ICp3aWR0aCwKKwkJCQkJCSAgIHNpemVfdCAqY250 RXhjZXB0aW9ucyk7CisKK2V4dGVybiBpbnQgZGZvcl9wYWNrKHNpemVfdCBjbnQsIGNvbnN0 IGl0ZW1fdCBhcnJbXSwgZXhjYWxnX3QgaXNFeGNVc2FnZSwKKwkJCQkJIGRmb3JfbWV0YV90 ICpkZm9yLCBzaXplX3QgYnVmU2l6ZSwgdWludDhfdCBidWZbXSk7CisKK2V4dGVybiBpbnQg ZGZvcl91bnBhY2soY29uc3QgZGZvcl9tZXRhX3QgKmRmb3IsIHVuaXFzb3J0dmVjdF90ICp2 VmFscywKKwkJCQkJICAgc2l6ZV90IGJ1ZlNpemUsIHVpbnQ4X3QgYnVmW10pOworCitleHRl cm4gdm9pZCBkZm9yX2NsZWFyX21ldGEoZGZvcl9tZXRhX3QgKmRmb3IpOworCitleHRlcm4g ZGZvcl9zdGF0c190IGRmb3JfY2FsY19zdGF0cyhkZm9yX21ldGFfdCBkZm9yKTsKKworZXh0 ZXJuIHNpemVfdCBkZm9yX2NhbGNfbmJ5dGVzKGRmb3JfbWV0YV90IGRmb3IpOworCisjaW5j bHVkZSAiZGZvcl90ZW1wbF91bmRlZi5oIgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGli L2Rmb3JfdGVtcGxfc3RhcGxlLmggYi9zcmMvaW5jbHVkZS9saWIvZGZvcl90ZW1wbF9zdGFw bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTQ3ZjZjYjNh MzMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9saWIvZGZvcl90ZW1wbF9zdGFw bGUuaApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIEZpbGU6IGRmb3Jfc3RhcGxlX3RlbXBs LmgKKyAqLworCisjaW5jbHVkZSAiYy5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq CisgKiBOT05SRVVTQUJMRSBDT0RFLCBhbGxvd2VkIHRvIGJlIGluY2x1ZGVkIG9ubHkgb25j ZQorICoKKyAqIFRoaXMgY29kZSBzaG91bGQgYXBwZWFyIG9ubHkgb25jZSBpbiBhIGZpbGUg KG9yIGluIGEgY2hhaW4gb2YgZmlsZXMpCisgKiBpbmNsdWRpbmcgdGhpcyBoZWFkZXIgd2l0 aCAjaW5jbHVkZS4gU28sIHdlIHByb3RlY3QgaXQgZnJvbSBkdXBsaWNhdGVzIGJ5CisgKiBt ZWFucyBvZiBtYWNybworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYg X0RGT1JfU1RBUExFX1RFTVBMX0hfVU5JUVVFX0NPREVfCisjZGVmaW5lIF9ERk9SX1NUQVBM RV9URU1QTF9IX1VOSVFVRV9DT0RFXworCit0eXBlZGVmIHN0cnVjdCB7CisJc2l6ZV90IGl0 ZW1fY250OworCXNpemVfdCBkZWx0YV93aWQ7CisJc2l6ZV90IGV4Y19jbnQ7CisJc2l6ZV90 IGV4Y193aWQ7CisJc2l6ZV90IGV4Y19wb3Nfd2lkOworCXNpemVfdCBuYnl0ZXM7IC8qIHNp emUgb2YgcGFjayBpbiBieXRlcyAqLworCXVpbnQ4X3QgKnBhY2s7CisJYm9vbCBvdXRlcl9t ZW07CisJYm9vbCBzaWduZWRfZGVsdGFzOworfSBkZm9yX21ldGFfdDsKKwordHlwZWRlZiBz dHJ1Y3QgeworCXNpemVfdCBuYml0czsgIC8qIHNpemUgb2YgcGFjayBpbiBiaXRzIHVzZWQg aW4gZmFjdCAqLworCXNpemVfdCBkZWx0YV9wYWNrX25iaXRzOyAvKiBpbiBiaXRzICovCisJ c2l6ZV90IGV4Y19wYWNrX25iaXRzOyAvKiBpbiBiaXRzICovCisJc2l6ZV90IGV4Y19wb3Nf cGFja19uYml0czsgLyogaW4gYml0cyAqLworCWZsb2F0IHJhdGlvOyAgLyogY29tcHJlc3Np b24gcmF0aW8gKi8KK30gZGZvcl9zdGF0c190OworCit0eXBlZGVmIGVudW0geworCURGT1Jf RVhDX0RPTlRfVVNFID0gMCwKKwlERk9SX0VYQ19VU0UgPSAxCit9IGV4Y2FsZ190OworCisj ZW5kaWYgLyogX0RGT1JfU1RBUExFX1RFTVBMX0hfVU5JUVVFX0NPREVfICovCisKKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioKKyAqIEVuZCBvZiBDb2RlLCBhbGxvd2VkIHRvIGJlIGlu Y2x1ZGVkIG9ubHkgb25jZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCisgKiBSRVVTQUJMRSBDT0RFCisgKgorICogVGhpcyBjb2Rl IGNhbiBiZSByZXVzZWQgd2l0aCAjaW5jbHVkZSBkaXJlY3RpdmUgaW4gYSBmaWxlIGlmIERG T1JfTUFSS0VSIGlzCisgKiByZWRlZmluZWQuIFRoaXMgYWxsb3dzIGNyZWF0aW9uIG9mIHNl dmVyYWwgdHlwZXMgb2YgdmVjdG9ycyB3aXRoIGRpZmZlcmVudAorICogdHlwZXMgb2YgbWVt YmVycy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgREZPUl9J VEVNX1RZUEUKKyNlcnJvciAiREZPUl9JVEVNX1RZUEUgbWFjcm8gaXMgaW5kZWZpbmVkLiIK KyNlbmRpZgorCisjaWZuZGVmIERGT1JfTUFSS0VSCisjZXJyb3IgIkRGT1JfTUFSS0VSIG1h Y3JvIGlzIGluZGVmaW5lZC4iCisjZW5kaWYKKworI2lmbmRlZiBERk9SX01BTExPQworI2Vy cm9yICJERk9SX01BTExPQyBtYWNybyBpcyBpbmRlZmluZWQuIgorI2VuZGlmCisKKyNpZm5k ZWYgREZPUl9GUkVFCisjZXJyb3IgIkRGT1JfRlJFRSBtYWNybyBpcyBpbmRlZmluZWQuIgor I2VuZGlmCisKKyNkZWZpbmUgTUFLRV9IRUFERVJfTkFNRSh2LCBtKSBDcHBBc1N0cmluZzIo Q3BwQ29uY2F0Mih2LCBtKS5oKQorCisvKgorICogSGVhZGVycyBmcm9tIHZlY3QgYW5kIGJp dHBhY2sgdW5pdHMKKyAqCisgKiBFeGFtcGxlOiBkZm9yX3UxNi5jIGFuZCBkZm9yX3UxNi5o IG5lZWQgdmVjdF91MTYuaCBhbmQgYml0cGFja191MTYuaAorICovCisjaW5jbHVkZSBNQUtF X0hFQURFUl9OQU1FKGxpYi92ZWN0XywgREZPUl9NQVJLRVIpCisjaW5jbHVkZSBNQUtFX0hF QURFUl9OQU1FKGxpYi9iaXRwYWNrXywgREZPUl9NQVJLRVIpCisKKy8qIFR5cGVzICovCisj ZGVmaW5lIGl0ZW1fdAkJICAgREZPUl9JVEVNX1RZUEUKKyNkZWZpbmUgdmVjdF90CQkgICBD cHBDb25jYXRUcmlwbGUyKHZlY3RfLCBERk9SX01BUktFUiwgX3QpCisjZGVmaW5lIHVuaXFz b3J0dmVjdF90IENwcENvbmNhdFRyaXBsZTIodW5pcXNvcnR2ZWN0XywgREZPUl9NQVJLRVIs IF90KQorCisvKiBGdW5jdGlvbnMgKi8KKyNkZWZpbmUgZGZvcl9jYWxjX2RlbHRhcyBDcHBD b25jYXRUcmlwbGUyKGRmb3JfLCBERk9SX01BUktFUiwgX2NhbGNfZGVsdGFzKQorI2RlZmlu ZSBkZm9yX2NhbGNfd2lkdGgJIENwcENvbmNhdFRyaXBsZTIoZGZvcl8sIERGT1JfTUFSS0VS LCBfY2FsY193aWR0aCkKKyNkZWZpbmUgZGZvcl9wYWNrCQkgQ3BwQ29uY2F0VHJpcGxlMihk Zm9yXywgREZPUl9NQVJLRVIsIF9wYWNrKQorI2RlZmluZSBkZm9yX3VucGFjawkJIENwcENv bmNhdFRyaXBsZTIoZGZvcl8sIERGT1JfTUFSS0VSLCBfdW5wYWNrKQorI2RlZmluZSBkZm9y X2FuYWx5emUJIENwcENvbmNhdFRyaXBsZTIoZGZvcl8sIERGT1JfTUFSS0VSLCBfYW5hbHl6 ZSkKKyNkZWZpbmUgZGZvcl9jbGVhcl9tZXRhCSBDcHBDb25jYXRUcmlwbGUyKGRmb3JfLCBE Rk9SX01BUktFUiwgX2NsZWFyX21ldGEpCisjZGVmaW5lIGRmb3JfY2FsY19zdGF0cwkgQ3Bw Q29uY2F0VHJpcGxlMihkZm9yXywgREZPUl9NQVJLRVIsIF9jYWxjX3N0YXRzKQorI2RlZmlu ZSBkZm9yX2NhbGNfbmJ5dGVzIENwcENvbmNhdFRyaXBsZTIoZGZvcl8sIERGT1JfTUFSS0VS LCBfY2FsY19uYnl0ZXMpCisKKy8qIEZ1bmN0aW9ucyBvZiB0aGUgdmVjdCB1bml0ICovCisj ZGVmaW5lIHZlY3RfaW5pdAkJICAgQ3BwQ29uY2F0VHJpcGxlMih2ZWN0XywgREZPUl9NQVJL RVIsIF9pbml0KQorI2RlZmluZSB2ZWN0X2ZpbGwJCSAgIENwcENvbmNhdFRyaXBsZTIodmVj dF8sIERGT1JfTUFSS0VSLCBfZmlsbCkKKyNkZWZpbmUgdmVjdF9yZXNlcnZlCSAgIENwcENv bmNhdFRyaXBsZTIodmVjdF8sIERGT1JfTUFSS0VSLCBfcmVzZXJ2ZSkKKyNkZWZpbmUgdmVj dF9hcHBlbmQJCSAgIENwcENvbmNhdFRyaXBsZTIodmVjdF8sIERGT1JfTUFSS0VSLCBfYXBw ZW5kKQorI2RlZmluZSB2ZWN0X3ByaW50CQkgICBDcHBDb25jYXRUcmlwbGUyKHZlY3RfLCBE Rk9SX01BUktFUiwgX3ByaW50KQorI2RlZmluZSB2ZWN0X2NvbXBhcmUJICAgQ3BwQ29uY2F0 VHJpcGxlMih2ZWN0XywgREZPUl9NQVJLRVIsIF9jb21wYXJlKQorI2RlZmluZSB2ZWN0X2lu c2VydAkJICAgQ3BwQ29uY2F0VHJpcGxlMih2ZWN0XywgREZPUl9NQVJLRVIsIF9pbnNlcnQp CisjZGVmaW5lIHZlY3RfY2xlYXIJCSAgIENwcENvbmNhdFRyaXBsZTIodmVjdF8sIERGT1Jf TUFSS0VSLCBfY2xlYXIpCisKKyNkZWZpbmUgdXN2X2luc2VydAkJICAgQ3BwQ29uY2F0VHJp cGxlMih1c3ZfLCBERk9SX01BUktFUiwgX2luc2VydCkKKyNkZWZpbmUgdXN2X3NlYXJjaAkJ ICAgQ3BwQ29uY2F0VHJpcGxlMih1c3ZfLCBERk9SX01BUktFUiwgX3NlYXJjaCkKKworLyog RnVuY3Rpb25zIG9mIHRoZSBiaXRwYWNrIHVuaXQgKi8KKyNkZWZpbmUgd2lkdGhfZnJvbV92 YWwgQ3BwQ29uY2F0VHJpcGxlMih3aWR0aF8sIERGT1JfTUFSS0VSLCBfZnJvbV92YWwpCisj ZGVmaW5lIHdpZHRoX3RvX21hc2sgIENwcENvbmNhdFRyaXBsZTIod2lkdGhfLCBERk9SX01B UktFUiwgX3RvX21hc2spCisjZGVmaW5lIGJpdHBhY2tfcGFjayAgIENwcENvbmNhdFRyaXBs ZTIoYml0cGFja18sIERGT1JfTUFSS0VSLCBfcGFjaykKKyNkZWZpbmUgYml0cGFja191bnBh Y2sgQ3BwQ29uY2F0VHJpcGxlMihiaXRwYWNrXywgREZPUl9NQVJLRVIsIF91bnBhY2spCisK Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVuZCBvZiBSZXVzYWJsZSBDb2RlCisg KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBEb24ndCBmb3JnZXQgdG8gaW5j bHVkZSB0aGlzIGNvZGUgaW4geW91ciBmaWxlIHRoYXQgdXNlcyB0aGlzIGhlYWRlcgorICog ICAgICNpbmNsdWRlICJkZm9yX3RlbXBsX3VuZGVmLmgiCisgKgorICovCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9saWIvZGZvcl90ZW1wbF91bmRlZi5oIGIvc3JjL2luY2x1ZGUvbGli L2Rmb3JfdGVtcGxfdW5kZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uN2EyMmVhOTc3MWYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9saWIv ZGZvcl90ZW1wbF91bmRlZi5oCkBAIC0wLDAgKzEsMjggQEAKKyN1bmRlZiBpdGVtX3QKKyN1 bmRlZiB2ZWN0X3QKKyN1bmRlZiB1bmlxc29ydHZlY3RfdAorCisjdW5kZWYgZGZvcl9jYWxj X2RlbHRhcworI3VuZGVmIGRmb3JfY2FsY193aWR0aAorI3VuZGVmIGRmb3JfcGFjaworI3Vu ZGVmIGRmb3JfdW5wYWNrCisjdW5kZWYgZGZvcl9hbmFseXplCisjdW5kZWYgZGZvcl9jYWxj X3N0YXRzCisjdW5kZWYgZGZvcl9jYWxjX25ieXRlcworCisjdW5kZWYgdmVjdF9pbml0Cisj dW5kZWYgdmVjdF9maWxsCisjdW5kZWYgdmVjdF9yZXNlcnZlCisjdW5kZWYgdmVjdF9hcHBl bmQKKyN1bmRlZiB2ZWN0X3ByaW50CisjdW5kZWYgdmVjdF9jb21wYXJlCisjdW5kZWYgdmVj dF9pbnNlcnQKKyN1bmRlZiB2ZWN0X2NsZWFyCisKKyN1bmRlZiB1c3ZfaW5zZXJ0CisjdW5k ZWYgdXN2X3NlYXJjaAorCisjdW5kZWYgd2lkdGhfZnJvbV92YWwKKyN1bmRlZiB3aWR0aF90 b19tYXNrCisjdW5kZWYgYml0cGFja19wYWNrCisjdW5kZWYgYml0cGFja191bnBhY2sKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2xpYi9kZm9yX3UxNi5oIGIvc3JjL2luY2x1ZGUvbGli L2Rmb3JfdTE2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjcx NmM5OWRiYzU1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvbGliL2Rmb3JfdTE2 LmgKQEAgLTAsMCArMSwxMyBAQAorLyoKKyAqIEZpbGU6IGRmb3JfdTE2LmgKKyAqLworCisj aWZuZGVmIF9ERk9SX1UxNl9IXworI2RlZmluZSBfREZPUl9VMTZfSF8KKworLyogY2xhbmct Zm9ybWF0IG9mZiAqLworI2luY2x1ZGUgImRmb3JfdTE2X2NvbmZpZy5oIgorI2luY2x1ZGUg ImRmb3JfdGVtcGwuaCIKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLworCisjZW5kaWYgLyogX0RG T1JfVTE2X0hfICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9saWIvZGZvcl91MTZfY29u ZmlnLmggYi9zcmMvaW5jbHVkZS9saWIvZGZvcl91MTZfY29uZmlnLmgKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjc1MTkzN2FjNTEzCi0tLSAvZGV2L251bGwK KysrIGIvc3JjL2luY2x1ZGUvbGliL2Rmb3JfdTE2X2NvbmZpZy5oCkBAIC0wLDAgKzEsNCBA QAorI2RlZmluZSBERk9SX0lURU1fVFlQRSB1aW50MTZfdAorI2RlZmluZSBERk9SX01BUktF UgkgICB1MTYKKyNkZWZpbmUgREZPUl9NQUxMT0MJICAgbWFsbG9jCisjZGVmaW5lIERGT1Jf RlJFRQkgICBmcmVlCi0tIAoyLjUzLjAKCg== --------------lw8OY0FkiJnrHVFMGb70Aea3 Content-Type: text/x-patch; charset=UTF-8; name="v12-0004-Tests-for-Delta-Frame-of-Reference-unit.patch" Content-Disposition: attachment; filename="v12-0004-Tests-for-Delta-Frame-of-Reference-unit.patch" Content-Transfer-Encoding: base64 RnJvbSA4YTE4NzU0MTkwNGZkZmU2MTRkMTk0YzEwYjc2NWIxMTgyM2VmMjM3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBFdmdlbnkgVm9yb3BhZXYgPGV2b3JvcEBnbWFpbC5j b20+CkRhdGU6IE1vbiwgMTMgQXByIDIwMjYgMjM6MTg6MDcgKzA4MDAKU3ViamVjdDogW1BB VENIIHYxMiA0LzVdIFRlc3RzIGZvciBEZWx0YSBGcmFtZSBvZiBSZWZlcmVuY2UgdW5pdC4K ClRoZSB1bml0IHRlc3QgaXMgaW1wbGVtZW50ZWQgYXMgYSBDIHByb2dyYW0gKEVMRiBleGVj dXRhYmxlKS4gVGhlIHRlc3QKY2FuIGJlIHJ1biB3aXRoIHRoZSAnbWFrZSBjaGVjay11bml0 Jy4gVGVzdHMgc3VwcG9ydCB0aGUgVEFQIHByb3RvY29sCmFuZCBhcmUgZXhlY3V0ZWQgdXNp bmcgdGhlIFByb3ZlIHV0aWxpdHkuCgpBdXRob3I6IEV2Z2VueSBWb3JvcGFldiA8ZXZnZW55 LnZvcm9wYWV2QHRhbnRvcmxhYnMuY29tPiA8ZXZvcm9wQGdtYWlsLmNvbT4KUmV2aWV3ZWQg Ynk6IEFuZHJleSBCb3JvZGluIDx4NG1tbUB5YW5kZXgtdGVhbS5ydT4KLS0tCiBzcmMvdGVz dC9kZm9yLy5naXRpZ25vcmUgICAgICB8ICAgMSArCiBzcmMvdGVzdC9kZm9yL01ha2VmaWxl ICAgICAgICB8ICAgMyArLQogc3JjL3Rlc3QvZGZvci9tZXNvbi5idWlsZCAgICAgfCAgIDIg Kwogc3JjL3Rlc3QvZGZvci90ZXN0X2Rmb3JfdTE2LmMgfCA1MzYgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCA1NDEgaW5zZXJ0aW9ucygr KSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L2Rmb3IvdGVz dF9kZm9yX3UxNi5jCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvZGZvci8uZ2l0aWdub3JlIGIv c3JjL3Rlc3QvZGZvci8uZ2l0aWdub3JlCmluZGV4IDBkNzdhNTEyMTZiLi40NDdlOTVjMGMw OSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvZGZvci8uZ2l0aWdub3JlCisrKyBiL3NyYy90ZXN0 L2Rmb3IvLmdpdGlnbm9yZQpAQCAtMSwzICsxLDQgQEAKIHRlc3RfYml0cGFja191MTYKK3Rl c3RfZGZvcl91MTYKIHRlc3RfdW5pcXNvcnR2ZWN0X3UxNgogdGVzdF92ZWN0X3UxNgpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvZGZvci9NYWtlZmlsZSBiL3NyYy90ZXN0L2Rmb3IvTWFrZWZp bGUKaW5kZXggNGZjOWY0YmMxYmEuLjJjYTk4Zjc2YTBmIDEwMDY0NAotLS0gYS9zcmMvdGVz dC9kZm9yL01ha2VmaWxlCisrKyBiL3NyYy90ZXN0L2Rmb3IvTWFrZWZpbGUKQEAgLTMzLDcg KzMzLDggQEAgTElCVEFQX09CSlMgPSAkKHRvcF9idWlsZGRpcikvc3JjL3Rlc3QvbGlidGFw L3RhcC5vCiAKIFRFU1RTPSB0ZXN0X3ZlY3RfdTE2IFwKICAgICAgICB0ZXN0X3VuaXFzb3J0 dmVjdF91MTYgXAotICAgICAgIHRlc3RfYml0cGFja191MTYKKyAgICAgICB0ZXN0X2JpdHBh Y2tfdTE2IFwKKyAgICAgICB0ZXN0X2Rmb3JfdTE2CiAKICQoVEVTVFM6JT0lLm8pOiBDUFBG TEFHUyArPSAtSSQodG9wX2J1aWxkZGlyKS9zcmMvdGVzdCAtREZST05URU5ECiAKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L2Rmb3IvbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9kZm9yL21lc29u LmJ1aWxkCmluZGV4IGNlNzYyYzUyNDMwLi40YTc2MGFiNjhmYSAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvZGZvci9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVzdC9kZm9yL21lc29uLmJ1aWxk CkBAIC04LDYgKzgsNyBAQCBkZm9yX2RpciA9IGpvaW5fcGF0aHMobWVzb24ucHJvamVjdF9z b3VyY2Vfcm9vdCgpLCAnc3JjL2JhY2tlbmQvbGliJykKIGRmb3Jfc291cmNlcyA9IGZpbGVz KAogICBqb2luX3BhdGhzKGRmb3JfZGlyLCAndmVjdF91MTYuYycpLAogICBqb2luX3BhdGhz KGRmb3JfZGlyLCAnYml0cGFja191MTYuYycpLAorICBqb2luX3BhdGhzKGRmb3JfZGlyLCAn ZGZvcl91MTYuYycpLAogKQogCiBkZm9yX3Rlc3RfbGliID0gc3RhdGljX2xpYnJhcnkoCkBA IC0zNiw2ICszNyw3IEBAIHRlc3RfbmFtZXMgPSBbCiAgICd0ZXN0X3ZlY3RfdTE2JywKICAg J3Rlc3RfdW5pcXNvcnR2ZWN0X3UxNicsCiAgICd0ZXN0X2JpdHBhY2tfdTE2JywKKyAgJ3Rl c3RfZGZvcl91MTYnLAogXQogCiBmb3JlYWNoIHQgOiB0ZXN0X25hbWVzCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9kZm9yL3Rlc3RfZGZvcl91MTYuYyBiL3NyYy90ZXN0L2Rmb3IvdGVzdF9k Zm9yX3UxNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lZmE5 MWUzZTZjOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L2Rmb3IvdGVzdF9kZm9yX3Ux Ni5jCkBAIC0wLDAgKzEsNTM2IEBACisvKgorICogdGVzdF9kZm9yLmMKKyAqLworCisjaW5j bHVkZSAibGliL2JpdHBhY2tfdTE2LmgiCisjaW5jbHVkZSAibGliL2Rmb3JfdTE2LmgiCisj aW5jbHVkZSAibGliL3ZlY3RfdTE2LmgiCisjaW5jbHVkZSAibGlidGFwL3RhcC5oIgorI2lu Y2x1ZGUgInRlc3QuaCIKKwordm9pZCB0ZXN0X2RlbHRhX2NhbGN1bGF0aW9uKHNpemVfdCBj bnQsIHVpbnQxNl90IGluQXJyW10sIHNpemVfdCBjbnREZWx0YSwKKwkJCQkJCQl1aW50MTZf dCBtYXJEZWx0YXNFeHBlY3RlZFtdLCBzaXplX3QgY250V2lkdGgsCisJCQkJCQkJdWludDE2 X3QgbWFyV2lkdGhzRXhwZWN0ZWRbXSwgc2l6ZV90IGNudFN0YXQsCisJCQkJCQkJdWludDE2 X3QgbWFyV2lkdGhzU3RhdEV4cGVjdGVkW10sCisJCQkJCQkJYm9vbCBkZWx0YVNpbmVkbmVz c1JlcXVlc3RlZCwKKwkJCQkJCQlib29sIGRlbHRhU2luZWRuZXNzRXhwZWN0ZWQpOworCit2 b2lkIHRlc3RfY2FsY19leGNlcHRpb25zKHNpemVfdCBudW1EZWx0YXMsIHNpemVfdCBudW1X aWR0aHMsCisJCQkJCQkgIHVpbnQxNl90IG1hcldpZHRoc1tdLCBzaXplX3QgbnVtQ291bnRz LAorCQkJCQkJICB1aW50MTZfdCBtYXJDb3VudHNbXSwgc2l6ZV90IHN6QXdhaXRlZFdpZHRo LAorCQkJCQkJICBzaXplX3QgY250QXdhaXRlZEV4Y0NvdW50KTsKKwordm9pZCB0ZXN0X2Rm b3Ioc2l6ZV90IGNudCwgdWludDE2X3QgYXJyW10sIGV4Y2FsZ190IGlzRXhjVXNhZ2UsCisJ CQkgICBzaXplX3Qgd2lkRGVsdGFBd2FpdGVkLCBzaXplX3QgY250RXhjQ250QXdhaXRlZCwK KwkJCSAgIHNpemVfdCB3aWRFeGNXaWRBd2FpdGVkLCBzaXplX3Qgd2lkRXhjUG9zV2lkQXdh aXRlZCwKKwkJCSAgIHNpemVfdCBjbnRCaXRzQ291bnRBd2FpdGVkLCBzaXplX3QgY250Qnl0 ZUNvdW50QXdhaXRlZCwKKwkJCSAgIGZsb2F0IGZsTWluUmF0aW9Bd2FpdGVkLCB1aW50OF90 IHU4YXJQYWNrQXdhaXRlZFtdKTsKKwordm9pZAordGVzdF9kZWx0YV9jYWxjdWxhdGlvbihz aXplX3QgY250LCB1aW50MTZfdCBpbkFycltdLAorCQkJCQkgICBzaXplX3QgY250RGVsdGEs IHVpbnQxNl90IG1hckRlbHRhc0V4cGVjdGVkW10sCisJCQkJCSAgIHNpemVfdCBjbnRXaWR0 aCwgdWludDE2X3QgbWFyV2lkdGhzRXhwZWN0ZWRbXSwKKwkJCQkJICAgc2l6ZV90IGNudFN0 YXQsIHVpbnQxNl90IG1hcldpZHRoc1N0YXRFeHBlY3RlZFtdLAorCQkJCQkgICBib29sIGRl bHRhU2lnbmVkbmVzc1JlcXVlc3RlZCwKKwkJCQkJICAgYm9vbCBkZWx0YVNpZ25lZG5lc3NF eHBlY3RlZCkKK3sKKwl2ZWN0X3UxNl90IHZEZWx0YXM7CisJdmVjdF91MTZfdCB2V2lkdGhD b3VudGVyczsKKwl1bmlxc29ydHZlY3RfdTE2X3QgdXN2RGVsdGFXaWR0aHM7CisJdmVjdF91 MTZfdCBhd2FpdGVkOworCWludCByZXM7CisJYm9vbCBkZWx0YVNpZ25lZG5lc3M7CisKKwlw cmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LVxuIik7CisJcHJpbnRmKCJUZXN0XG4iKTsKKwlwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisKKwlwcmludGYoIiAgaW5B cnI6Iik7CisJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjbnQ7IGkrKykKKwkJcHJpbnRmKCIg JXUiLCAodWludDMyX3QpaW5BcnJbaV0pOworCXByaW50ZigiXG4iKTsKKworCXZlY3RfdTE2 X2luaXQoJnZEZWx0YXMsIDAsIE5VTEwpOworCXZlY3RfdTE2X2luaXQoJnVzdkRlbHRhV2lk dGhzLCAwLCBOVUxMKTsKKwl2ZWN0X3UxNl9pbml0KCZ2V2lkdGhDb3VudGVycywgMCwgTlVM TCk7CisKKwlkZWx0YVNpZ25lZG5lc3MgPSBkZWx0YVNpZ25lZG5lc3NSZXF1ZXN0ZWQ7CisJ LyogVGVzdGVkIGZ1bmN0aW9uICovCisJcmVzID0gZGZvcl91MTZfY2FsY19kZWx0YXMoY250 LCBpbkFyciwgJnZEZWx0YXMsICZ1c3ZEZWx0YVdpZHRocywKKwkJCQkJCQkgICAmdldpZHRo Q291bnRlcnMsICZkZWx0YVNpZ25lZG5lc3MpOworCWNtcF9vayhyZXMsICI9PSIsIDApOwor CisJcHJpbnRmKCIgIERlbHRhIGV4cGVjdGVkOiIpOworCWZvciAoc2l6ZV90IGkgPSAwOyBp IDwgY250RGVsdGE7IGkrKykKKwkJcHJpbnRmKCIgJXUiLCAodWludDMyX3QpbWFyRGVsdGFz RXhwZWN0ZWRbaV0pOworCXByaW50ZigiXG4iKTsKKworCXByaW50ZigiICBEZWx0YSBmYWN0 OiAgICAiKTsKKwl2ZWN0X3UxNl9wcmludCgmdkRlbHRhcyk7CisKKwljbXBfb2sodkRlbHRh cy5jbnQsICI9PSIsIGNudCwgIlRoZSBEZWx0YSBjb3VudCBpcyBPSy4iKTsKKwl2ZWN0X3Ux Nl9pbml0KCZhd2FpdGVkLCAwLCBOVUxMKTsKKwl2ZWN0X3UxNl9maWxsKCZhd2FpdGVkLCBj bnQsIG1hckRlbHRhc0V4cGVjdGVkKTsKKwljbXBfb2soZGVsdGFTaWduZWRuZXNzLCAiPT0i LCBkZWx0YVNpZ25lZG5lc3NFeHBlY3RlZCwgIlRoZSBzaWduZWRuZXNzIHJlc3VsdCBpcyBP Sy4iKTsKKwljbXBfb2sodmVjdF91MTZfY29tcGFyZSgmdkRlbHRhcywgJmF3YWl0ZWQpLCAi PT0iLCAwLAorCQkgICAiQWxsIGRlbHRhcyBhcmUgY2FsY3VsYXRlZCBwcm9wZXJseSIpOwor CXZlY3RfdTE2X2NsZWFyKCZhd2FpdGVkKTsKKworCXByaW50ZigiICBXaWR0aCBleHBlY3Rl ZDoiKTsKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNudFdpZHRoOyBpKyspCisJCXByaW50 ZigiICV1IiwgKHVpbnQzMl90KW1hcldpZHRoc0V4cGVjdGVkW2ldKTsKKwlwcmludGYoIlxu Iik7CisKKwlwcmludGYoIiAgV2lkdGggZmFjdDogICAgIik7CisJdmVjdF91MTZfcHJpbnQo JnVzdkRlbHRhV2lkdGhzKTsKKworCWNtcF9vayh1c3ZEZWx0YVdpZHRocy5jbnQsICI9PSIs IGNudFdpZHRoLCAiVGhlIFdpZHRoIGNvdW50IGlzIE9LLiIpOworCisJLyogZG9uJ3QgcmVh bGx5IG5lZWQgaW5pdGlhbGlzYXRpb24gYWZ0ZXIgdmVjdF9jbGVhbiBoYXZpbmcgYmVlbiBk b25lCisJICogYWJvdmUqLworCS8qIHZlY3RfdTE2X2luaXQoJmF3YWl0ZWQsIDAsIE5VTEwp OyAqLworCisJdmVjdF91MTZfZmlsbCgmYXdhaXRlZCwgY250V2lkdGgsIG1hcldpZHRoc0V4 cGVjdGVkKTsKKwljbXBfb2sodmVjdF91MTZfY29tcGFyZSgmdXN2RGVsdGFXaWR0aHMsICZh d2FpdGVkKSwgIj09IiwgMCwKKwkJICAgIkFsbCBkZWx0YSB3aWR0aHMgaXMgT0suIik7CisJ dmVjdF91MTZfY2xlYXIoJmF3YWl0ZWQpOworCisJcHJpbnRmKCIgIERlbHRhcyBzdGF0aXN0 aWNzIGV4cGVjdGVkOiIpOworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY250U3RhdDsgaSsr KQorCQlwcmludGYoIiAldSIsICh1aW50MzJfdCltYXJXaWR0aHNTdGF0RXhwZWN0ZWRbaV0p OworCXByaW50ZigiXG4iKTsKKworCXByaW50ZigiICBEZWx0YXMgc3RhdGlzdGljcyBzdGF0 aXN0aWNzIGZhY3Q6ICAgICIpOworCXZlY3RfdTE2X3ByaW50KCZ2V2lkdGhDb3VudGVycyk7 CisKKwljbXBfb2soCisJCXVzdkRlbHRhV2lkdGhzLmNudCwgIj09IiwgdldpZHRoQ291bnRl cnMuY250LAorCQkiVGhlIGNvdW50IG9mIHN0YXRpc3RpY3Mgb2Ygd2lkdGhzIGlzIGVxdWFs IHRvIHRoZSBjb3VudCBvZiB3aWR0aHMuIik7CisKKwkvKiBkb24ndCByZWFsbHkgbmVlZCBp bml0aWFsaXNhdGlvbiBhZnRlciB2ZWN0X2NsZWFuIGhhcyBiZWVuIGRvbmUKKwkgKiBhYm92 ZSovCisJdmVjdF91MTZfZmlsbCgmYXdhaXRlZCwgY250U3RhdCwgbWFyV2lkdGhzU3RhdEV4 cGVjdGVkKTsKKwljbXBfb2sodmVjdF91MTZfY29tcGFyZSgmdldpZHRoQ291bnRlcnMsICZh d2FpdGVkKSwgIj09IiwgMCwKKwkJICAgIldpZHRoIHN0YXRpc3RpY3MgaXMgT0suIik7CisJ dmVjdF91MTZfY2xlYXIoJmF3YWl0ZWQpOworCisJdmVjdF91MTZfY2xlYXIoJnZEZWx0YXMp OworCXZlY3RfdTE2X2NsZWFyKCZ1c3ZEZWx0YVdpZHRocyk7CisJdmVjdF91MTZfY2xlYXIo JnZXaWR0aENvdW50ZXJzKTsKK30KKwordm9pZAordGVzdF9jYWxjX2V4Y2VwdGlvbnMoc2l6 ZV90IG51bURlbHRhcywgc2l6ZV90IG51bVdpZHRocywgdWludDE2X3QgbWFyV2lkdGhzW10s CisJCQkJCSBzaXplX3QgbnVtQ291bnRzLCB1aW50MTZfdCBtYXJDb3VudHNbXSwKKwkJCQkJ IHNpemVfdCBzekF3YWl0ZWRXaWR0aCwgc2l6ZV90IGNudEF3YWl0ZWRFeGNDb3VudCkKK3sK KwlpbnQgcmVzOworCXZlY3RfdTE2X3QgdldpZHRoQ291bnRlcnM7CisJdW5pcXNvcnR2ZWN0 X3UxNl90IHVzdkRlbHRhV2lkdGhzOworCXNpemVfdCB3aWR0aCwgY250RXhjZXB0aW9uczsK KworCXZlY3RfdTE2X2luaXQoJnVzdkRlbHRhV2lkdGhzLCAwLCBOVUxMKTsKKwl2ZWN0X3Ux Nl9maWxsKCZ1c3ZEZWx0YVdpZHRocywgbnVtV2lkdGhzLCBtYXJXaWR0aHMpOworCisJdmVj dF91MTZfaW5pdCgmdldpZHRoQ291bnRlcnMsIDAsIE5VTEwpOworCXZlY3RfdTE2X2ZpbGwo JnZXaWR0aENvdW50ZXJzLCBudW1Db3VudHMsIG1hckNvdW50cyk7CisKKwlyZXMgPSBkZm9y X3UxNl9jYWxjX3dpZHRoKG51bURlbHRhcywgJnVzdkRlbHRhV2lkdGhzLCAmdldpZHRoQ291 bnRlcnMsCisJCQkJCQkJICAmd2lkdGgsICZjbnRFeGNlcHRpb25zKTsKKwljbXBfb2socmVz LCAiPT0iLCAwKTsKKwljbXBfb2sod2lkdGgsICI9PSIsIHN6QXdhaXRlZFdpZHRoLCAiV2lk dGggaXMgT0suIik7CisJY21wX29rKGNudEV4Y2VwdGlvbnMsICI9PSIsIGNudEF3YWl0ZWRF eGNDb3VudCwgIkV4Y2VwdGlvbnMgbnVtIGlzIE9LIik7CisKKwl2ZWN0X3UxNl9jbGVhcigm dXN2RGVsdGFXaWR0aHMpOworCXZlY3RfdTE2X2NsZWFyKCZ2V2lkdGhDb3VudGVycyk7Cit9 CisKK3ZvaWQKK3Rlc3RfZGZvcihzaXplX3QgY250LCB1aW50MTZfdCBhcnJbXSwgZXhjYWxn X3QgaXNFeGNVc2FnZSwKKwkJICBzaXplX3Qgd2lkRGVsdGFXaWR0aEF3YWl0ZWQsIHNpemVf dCBjbnRFeGNDbnRBd2FpdGVkLAorCQkgIHNpemVfdCB3aWRFeGNXaWRBd2FpdGVkLCBzaXpl X3Qgd2lkRXhjUG9zV2lkQXdhaXRlZCwKKwkJICBzaXplX3QgY250Qml0c0NvdW50QXdhaXRl ZCwgc2l6ZV90IGNudEJ5dGVDb3VudEF3YWl0ZWQsCisJCSAgZmxvYXQgZmxNaW5SYXRpb0F3 YWl0ZWQsIHVpbnQ4X3QgdThhclBhY2tBd2FpdGVkW10pCit7CisJaW50IHJlczsKKwlkZm9y X21ldGFfdCBkZm9yOworCWRmb3Jfc3RhdHNfdCBzdGF0czsKKwl1bmlxc29ydHZlY3RfdTE2 X3QgZXh0cmFjdGVkOworCisJcmVzID0gZGZvcl91MTZfcGFjayhjbnQsIGFyciwgaXNFeGNV c2FnZSwgJmRmb3IsIDAsIE5VTEwpOworCWNtcF9vayhyZXMsICI9PSIsIDAsICJkZm9yX3Bh Y2sgZnVuYyBoYXMgcHJvY2Vzc2VkIE9LLiIpOworCWNtcF9vayhkZm9yLml0ZW1fY250LCAi PT0iLCBjbnQsICJDb3VudCBvZiBkZWx0YXMgaXMgT0suIik7CisJY21wX29rKGRmb3IuZGVs dGFfd2lkLCAiPT0iLCB3aWREZWx0YVdpZHRoQXdhaXRlZCwgIkRlbHRhIHdpZHRoIGlzIE9L LiIpOworCWNtcF9vayhkZm9yLmV4Y19jbnQsICI9PSIsIGNudEV4Y0NudEF3YWl0ZWQsICJF eGNlcHRpb24gY291bnQgaXMgT0suIik7CisJY21wX29rKGRmb3IuZXhjX3dpZCwgIj09Iiwg d2lkRXhjV2lkQXdhaXRlZCwgIkV4Y2VwdGlvbiB3aWR0aCBpcyBPSy4iKTsKKwljbXBfb2so ZGZvci5leGNfcG9zX3dpZCwgIj09Iiwgd2lkRXhjUG9zV2lkQXdhaXRlZCwKKwkJICAgIkV4 Y2VwdGlvbiBwb3NpdGlvbiB3aWR0aCBpcyBPSy4iKTsKKwlvayhkZm9yLnBhY2sgIT0gTlVM TCwgIlBhY2sgaXMgY3JlYXRlZCAobm90IE5VTEwpLiIpOworCisJc3RhdHMgPSBkZm9yX3Ux Nl9jYWxjX3N0YXRzKGRmb3IpOworCWNtcF9vayhzdGF0cy5uYml0cywgIj09IiwgY250Qml0 c0NvdW50QXdhaXRlZCwgIkJpdHMgY291bnQgaXMgT0suIik7CisJY21wX29rKGRmb3IubmJ5 dGVzLCAiPT0iLCBjbnRCeXRlQ291bnRBd2FpdGVkLCAiQnl0ZXMgY291bnQgaXMgT0suIik7 CisJb2soc3RhdHMucmF0aW8gPiBmbE1pblJhdGlvQXdhaXRlZCwgIkNvbXByZXNzaW9uIHJh dGlvIGlzIE9LLiIpOworCisJaWYgKHU4YXJQYWNrQXdhaXRlZCAhPSBOVUxMKQorCQlvaygw ID09IG1lbWNtcChkZm9yLnBhY2ssIHU4YXJQYWNrQXdhaXRlZCwgY250Qnl0ZUNvdW50QXdh aXRlZCksCisJCSAgICJQYWNrIGNvbnRlbnQgaXMgT0suIik7CisJZWxzZQorCQlvaygwID09 IDAsICJQYWNrIGNvbnRlbnQgY2hlY2sgaXMgc2tpcHBlZC4iKTsKKworCXRlc3RfcHJpbnRf dTE2X2FycmF5KGNudCwgKHVpbnQxNl90ICopYXJyLCAiXG5cbk9yaWdpbmFsIGludGVnZXIg YXJyYXkiKTsKKwl0ZXN0X3ByaW50X3U4X2FycmF5KGRmb3IubmJ5dGVzLCBkZm9yLnBhY2ss ICJDb21wcmVzc2VkIGludGVnZXIgYXJyYXkiKTsKKwlwcmludGYoIkNvbXByZXNzaW9uIHJh dGlvOiVmXG5cbiIsIHN0YXRzLnJhdGlvKTsKKworCXZlY3RfdTE2X2luaXQoJmV4dHJhY3Rl ZCwgMCwgTlVMTCk7CisKKwlkZm9yX3UxNl91bnBhY2soJmRmb3IsICZleHRyYWN0ZWQsIDAs IE5VTEwpOworCWNtcF9vayhleHRyYWN0ZWQuY250LCAiPT0iLCBjbnQsICJFeHRyYWN0ZWQg Y291bnQgaXMgT0siKTsKKwljbXBfb2soMCwgIj09IiwgbWVtY21wKGFyciwgZXh0cmFjdGVk Lm0sIGNudCksCisJCSAgICJFeHRyYWN0ZWQgYXJyYXkgaXMgZXF1YWwgdG8gb3JpZ2luYWwi KTsKKworCWZyZWUoZGZvci5wYWNrKTsKKwl2ZWN0X3UxNl9jbGVhcigmZXh0cmFjdGVkKTsK K30KKworaW50CittYWluKHZvaWQpCit7CisJcGxhbigyNjcpOworCisJcHJpbnRmKCI9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKKwlwcmludGYoIlRl c3QgREVMVEEgQ0FMQ1VMQVRJT04gZm9yIHNvcnRlZCBzZXF1ZW5jZXMgXG4iKTsKKwl7CisJ CS8qIFNvcnRlZCBzZXF1ZW5jZXMgKi8KKwkJdGVzdF9kZWx0YV9jYWxjdWxhdGlvbigKKwkJ CTEwLCAodWludDE2X3RbXSkgeyAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5IH0sIC8q IGluQXJyICovCisJCQkxMCwKKwkJCSh1aW50MTZfdFtdKSB7IDAsIDEsIDEsIDEsIDEsIDEs IDEsIDEsIDEsIDEgfSwgLyogbWFyRGVsdGFzRXhwZWN0ZWQgKi8KKwkJCTEsICh1aW50MTZf dFtdKSB7IDEgfSwgLyogbWFyV2lkdGhzRXhwZWN0ZWQgKi8KKwkJCTEsICh1aW50MTZfdFtd KSB7IDEwIH0sIC8qIG1hcldpZHRoc1N0YXRFeHBlY3RlZCAqLworCQkJZmFsc2UsIC8qIGRl bHRhU2lnbmVkbmVzcyByZXF1ZXN0ZWQgKi8KKwkJCWZhbHNlICAvKiBkZWx0YVNpZ25lZG5l c3MgZXhwZWN0ZWQgKi8pOworCisJCXRlc3RfZGVsdGFfY2FsY3VsYXRpb24oCisJCQkxMCwg KHVpbnQxNl90W10pIHsgMSwgMywgNSwgNywgOSwgMTEsIDEzLCAxNSwgMTcsIDE5IH0sIC8q IGluQXJyICovCisJCQkxMCwKKwkJCSh1aW50MTZfdFtdKSB7IDEsIDIsIDIsIDIsIDIsIDIs IDIsIDIsIDIsIDIgfSwgLyogbWFyRGVsdGFzRXhwZWN0ZWQqLworCQkJMiwgKHVpbnQxNl90 W10pIHsgMSwgMiB9LCAvKiBtYXJXaWR0aHNFeHBlY3RlZCAqLworCQkJMiwgKHVpbnQxNl90 W10pIHsgMSwgOSB9LCAvKiBtYXJXaWR0aHNTdGF0RXhwZWN0ZWQgKi8KKwkJCWZhbHNlLCAv KiBkZWx0YVNpZ25lZG5lc3MgcmVxdWVzdGVkICovCisJCQlmYWxzZSAgLyogZGVsdGFTaWdu ZWRuZXNzIGV4cGVjdGVkICovKTsKKworCQl0ZXN0X2RlbHRhX2NhbGN1bGF0aW9uKAorCQkJ MTQsCisJCQkodWludDE2X3RbXSkgeyAxMDAsIDIwMCwgMzAwLCA0MDAsIDQwMSwgNDAyLCA0 MDMsIDQwNCwgNDA2LCA0MDgsCisJCQkJCQkgICA0MTAsIDQxMiwgNDE0LCA0MTYgfSwgLyog aW5BcnIgKi8KKwkJCTE0LAorCQkJKHVpbnQxNl90W10pIHsgMTAwLCAxMDAsIDEwMCwgMTAw LCAxLCAxLCAxLCAxLCAyLCAyLCAyLCAyLCAyLCAyIH0sCisJCQkJCQkJCQkJIC8qIG1hckRl bHRhc0V4cGVjdGVkKi8KKwkJCTMsICh1aW50MTZfdFtdKSB7IDEsIDIsIDcgfSwgLyogbWFy V2lkdGhzRXhwZWN0ZWQgKi8KKwkJCTMsICh1aW50MTZfdFtdKSB7IDQsIDYsIDQgfSwgLyog bWFyV2lkdGhzU3RhdEV4cGVjdGVkICovCisJCQlmYWxzZSwgLyogZGVsdGFTaWduZWRuZXNz IHJlcXVlc3RlZCAqLworCQkJZmFsc2UgIC8qIGRlbHRhU2lnbmVkbmVzcyBleHBlY3RlZCAq Lyk7CisKKwkJdGVzdF9kZWx0YV9jYWxjdWxhdGlvbigxLCAodWludDE2X3RbXSkgeyAxMjMg fSwgLyogaW5BcnIgKi8KKwkJCQkJCQkgICAxLCAodWludDE2X3RbXSkgeyAxMjMgfSwgLyog bWFyRGVsdGFzRXhwZWN0ZWQqLworCQkJCQkJCSAgIDEsICh1aW50MTZfdFtdKSB7IDcgfSwJ LyogbWFyV2lkdGhzRXhwZWN0ZWQgKi8KKwkJCQkJCQkgICAxLAorCQkJCQkJCSAgICh1aW50 MTZfdFtdKSB7IDEgfSwgLyogbWFyV2lkdGhzU3RhdEV4cGVjdGVkICovCisJCQkJCQkJICAg ZmFsc2UsIC8qIGRlbHRhU2lnbmVkbmVzcyByZXF1ZXN0ZWQgKi8KKwkJCQkJCQkgICBmYWxz ZSAgLyogZGVsdGFTaWduZWRuZXNzIGV4cGVjdGVkICovKTsKKworCQl0ZXN0X2RlbHRhX2Nh bGN1bGF0aW9uKDAsIE5VTEwsIC8qIGluQXJyICovCisJCQkJCQkJICAgMCwgTlVMTCwgLyog bWFyRGVsdGFzRXhwZWN0ZWQqLworCQkJCQkJCSAgIDAsIE5VTEwsIC8qIG1hcldpZHRoc0V4 cGVjdGVkICovCisJCQkJCQkJICAgMCwgTlVMTCwgLyogbWFyV2lkdGhzU3RhdEV4cGVjdGVk ICovCisJCQkJCQkJICAgZmFsc2UsIC8qIGRlbHRhU2lnbmVkbmVzcyByZXF1ZXN0ZWQgKi8K KwkJCQkJCQkgICBmYWxzZSAgLyogZGVsdGFTaWduZWRuZXNzIGV4cGVjdGVkICovKTsKKwor CXByaW50ZigiVGVzdCBERUxUQSBDQUxDVUxBVElPTiBmb3Igc29ydGVkIHNlcXVlbmNlcyBQ QVNTRUQgXG4iKTsKKwlwcmludGYoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT1cblxuIik7CisKKwlwcmludGYoIj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT1cbiIpOworCXByaW50ZigiVGVzdCBERUxUQSBDQUxDVUxBVElPTiBm b3IgdW5zb3J0ZWQgc2VxdWVuY2VzIGFuZCB0ZXN0IFNJR05FRE5FU1MgXG4iKTsKKworCQkv KiBVbnNvcnRlZCBzZXF1ZW5jZXMgKi8KKwkJdGVzdF9kZWx0YV9jYWxjdWxhdGlvbigKKwkJ CTEwLCAodWludDE2X3RbXSkgeyAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5IH0sIC8q IGluQXJyICovCisJCQkxMCwKKwkJCSh1aW50MTZfdFtdKSB7IDB4MCwgMHgyLCAweDIsIDB4 MiwgMHgyLCAweDIsIDB4MiwgMHgyLCAweDIsIDB4MiB9LAkvKiBtYXJEZWx0YXNFeHBlY3Rl ZCovCisJCQkJCS8qQklOOiAgMDAsICAxMCwgIDEwLCAgMTAsICAxMCwgIDEwLCAgMTAsICAx MCwgIDEwLCAgMTAgKi8KKwkJCQkJLypERUM6ICArMCwgICsxLCAgKzEsICArMSwgICsxLCAg KzEsICArMSwgICsxLCAgKzEsICArMSAqLworCQkJMSwgKHVpbnQxNl90W10pIHsgMiB9LCAv KiBtYXJXaWR0aHNFeHBlY3RlZCAqLworCQkJMSwgKHVpbnQxNl90W10pIHsgMTAgfSwgLyog bWFyV2lkdGhzU3RhdEV4cGVjdGVkICovCisJCQl0cnVlLCAvKiBkZWx0YVNpZ25lZG5lc3Mg cmVxdWVzdGVkICovCisJCQl0cnVlICAvKiBkZWx0YVNpZ25lZG5lc3MgZXhwZWN0ZWQgKi8p OworCisJCXRlc3RfZGVsdGFfY2FsY3VsYXRpb24oCisJCQkxMCwgKHVpbnQxNl90W10pIHsg MCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgNyB9LCAvKiBpbkFyciAqLworCQkJMTAsCisJ CQkodWludDE2X3RbXSkgeyAwLCAgMiwgIDIsICAyLCAgMiwgIDIsICAyLCAgMiwgIDIsICAz IH0sCS8qIG1hckRlbHRhc0V4cGVjdGVkKi8KKwkJCQkJLypCSU46IDAwLCAxMCwgMTAsIDEw LCAxMCwgMTAsIDEwLCAxMCwgMTAsIDExICovCisJCQkJCS8qREVDOiArMCwgKzEsICsxLCAr MSwgKzEsICsxLCArMSwgKzEsICsxLCAtMSAqLworCQkJMSwgKHVpbnQxNl90W10pIHsgMiB9 LCAvKiBtYXJXaWR0aHNFeHBlY3RlZCAqLworCQkJMSwgKHVpbnQxNl90W10pIHsgMTAgfSwg LyogbWFyV2lkdGhzU3RhdEV4cGVjdGVkICovCisJCQlmYWxzZSwgLyogZGVsdGFTaWduZWRu ZXNzIHJlcXVlc3RlZCAqLworCQkJdHJ1ZSAgLyogZGVsdGFTaWduZWRuZXNzIGV4cGVjdGVk ICovKTsKKworCQl0ZXN0X2RlbHRhX2NhbGN1bGF0aW9uKAorCQkJMTAsICh1aW50MTZfdFtd KSB7IDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDcgfSwgLyogaW5BcnIgKi8KKwkJCTEw LAorCQkJKHVpbnQxNl90W10pIHsgMCwgIDIsICAyLCAgMiwgIDIsICAyLCAgMiwgIDIsICAy LCAgMyB9LAkvKiBtYXJEZWx0YXNFeHBlY3RlZCovCisJCQkJCS8qQklOOiAwMCwgMTAsIDEw LCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMSAqLworCQkJCQkvKkRFQzogKzAsICsxLCAr MSwgKzEsICsxLCArMSwgKzEsICsxLCArMSwgLTEgKi8KKwkJCTEsICh1aW50MTZfdFtdKSB7 IDIgfSwgLyogbWFyV2lkdGhzRXhwZWN0ZWQgKi8KKwkJCTEsICh1aW50MTZfdFtdKSB7IDEw IH0sIC8qIG1hcldpZHRoc1N0YXRFeHBlY3RlZCAqLworCQkJdHJ1ZSwgLyogZGVsdGFTaWdu ZWRuZXNzIHJlcXVlc3RlZCAqLworCQkJdHJ1ZSAgLyogZGVsdGFTaWduZWRuZXNzIGV4cGVj dGVkICovKTsKKworCQl0ZXN0X2RlbHRhX2NhbGN1bGF0aW9uKAorCQkJMTAsICh1aW50MTZf dFtdKSB7IDEsIDMsIDUsIDMsIDUsIDcsIDksIDExLCAxMywgMTUgfSwgLyogaW5BcnIgKi8K KwkJCTEwLAorCQkJKHVpbnQxNl90W10pIHsgMHgyLCAweDQsIDB4NCwgMHg1LCAweDQsIDB4 NCwgMHg0LCAweDQsIDB4NCwgMHg0IH0sIC8qIG1hckRlbHRhc0V4cGVjdGVkKi8KKwkJCQkJ LypCSU46ICAxMCwgMTAwLCAxMDAsIDEwMSwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEw MCAqLworCQkJCQkvKkRFQzogKzEsICArMiwgICsyLCAgLTIsICArMiwgICsyLCAgKzIsICAr MiwgICsyLCAgKzIgKi8KKwkJCTIsICh1aW50MTZfdFtdKSB7IDIsIDMgfSwgLyogbWFyV2lk dGhzRXhwZWN0ZWQgKi8KKwkJCTIsICh1aW50MTZfdFtdKSB7IDEsIDkgfSwgLyogbWFyV2lk dGhzU3RhdEV4cGVjdGVkICovCisJCQlmYWxzZSwgLyogZGVsdGFTaWduZWRuZXNzIHJlcXVl c3RlZCAqLworCQkJdHJ1ZSAgLyogZGVsdGFTaWduZWRuZXNzIGV4cGVjdGVkICovKTsKKwkJ dGVzdF9kZWx0YV9jYWxjdWxhdGlvbigKKwkJCTE0LAorCQkJKHVpbnQxNl90W10pIHsgMTAw LCAyMDAsIDMwMCwgNDAwLCA0MDEsIDQwMiwgNDAzLCA0MDQsIDQwNiwgNDA4LAorCQkJCQkJ ICAgNDEwLCA0MTIsIDQxNCwgNDEyIH0sIC8qIGluQXJyICovCisJCQkxNCwKKwkJCSh1aW50 MTZfdFtdKSB7IDIwMCwgMjAwLCAyMDAsIDIwMCwgMiwgMiwgMiwgMiwgNCwgNCwgNCwgNCwg NCwgNSB9LCAvKiBtYXJEZWx0YXNFeHBlY3RlZCBjb2RlKi8KKwkJCQkJLyogREVDOiArMTAw LCArMTAwLCArMTAwLCArMSwgKzEsICsxLCArMSwgKzEsICsyLCArMiwgKzIsICsyLCArMiwg LTIgKi8KKwkJCTMsICh1aW50MTZfdFtdKSB7IDIsIDMsIDggfSwgLyogbWFyV2lkdGhzRXhw ZWN0ZWQgKi8KKwkJCTMsICh1aW50MTZfdFtdKSB7IDQsIDYsIDQgfSwgLyogbWFyV2lkdGhz U3RhdEV4cGVjdGVkICovCisJCQlmYWxzZSwgLyogZGVsdGFTaWduZWRuZXNzIHJlcXVlc3Rl ZCAqLworCQkJdHJ1ZSAgLyogZGVsdGFTaWduZWRuZXNzIGV4cGVjdGVkICovKTsKKworCQl0 ZXN0X2RlbHRhX2NhbGN1bGF0aW9uKDEsICh1aW50MTZfdFtdKSB7IDEyMyB9LCAvKiBpbkFy ciAqLworCQkJCQkJCSAgIDEsICh1aW50MTZfdFtdKSB7IDI0NiB9LCAvKiBtYXJEZWx0YXNF eHBlY3RlZCovCisJCQkJCQkJICAgMSwgKHVpbnQxNl90W10pIHsgOCB9LAkvKiBtYXJXaWR0 aHNFeHBlY3RlZCAqLworCQkJCQkJCSAgIDEsICh1aW50MTZfdFtdKSB7IDEgfSwgLyogbWFy V2lkdGhzU3RhdEV4cGVjdGVkICovCisJCQkJCQkJICAgdHJ1ZSwgLyogZGVsdGFTaWduZWRu ZXNzIHJlcXVlc3RlZCAqLworCQkJCQkJCSAgIHRydWUgIC8qIGRlbHRhU2lnbmVkbmVzcyBl eHBlY3RlZCAqLyk7CisKKwkJdGVzdF9kZWx0YV9jYWxjdWxhdGlvbigwLCBOVUxMLCAvKiBp bkFyciAqLworCQkJCQkJCSAgIDAsIE5VTEwsIC8qIG1hckRlbHRhc0V4cGVjdGVkKi8KKwkJ CQkJCQkgICAwLCBOVUxMLCAvKiBtYXJXaWR0aHNFeHBlY3RlZCAqLworCQkJCQkJCSAgIDAs IE5VTEwsIC8qIG1hcldpZHRoc1N0YXRFeHBlY3RlZCAqLworCQkJCQkJCSAgIHRydWUsIC8q IGRlbHRhU2lnbmVkbmVzcyByZXF1ZXN0ZWQgKi8KKwkJCQkJCQkgICB0cnVlICAvKiBkZWx0 YVNpZ25lZG5lc3MgZXhwZWN0ZWQgKi8pOworCisJcHJpbnRmKCJUZXN0IERFTFRBIENBTENV TEFUSU9OIGZvciB1bnNvcnRlZCBzZXF1ZW5jZXMgYW5kIHRlc3QgU0lHTkVETkVTUyBQQVNT RURcbiIpOworCXByaW50ZigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PVxuXG4iKTsKKworCXByaW50ZigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PVxuIik7CisJcHJpbnRmKCJUZXN0IERFTFRBIENBTENVTEFUSU9OIGZvciB1 bnNvcnRlZCBzZXF1ZW5jZXMgYW5kIHRlc3QgT1ZFUkxBUFBJTkcgdHJpY2sgXG4iKTsKKwor CQl0ZXN0X2RlbHRhX2NhbGN1bGF0aW9uKDEsICh1aW50MTZfdFtdKSB7IDMzMDAwIH0sIC8q IGluQXJyICovCisJCQkJCQkJICAgMSwgKHVpbnQxNl90W10pIHsgMzMwMDAgfSwgLyogbWFy RGVsdGFzRXhwZWN0ZWQqLworCQkJCQkJCSAgIDEsICh1aW50MTZfdFtdKSB7IDE2IH0sCS8q IG1hcldpZHRoc0V4cGVjdGVkICovCisJCQkJCQkJICAgMSwgKHVpbnQxNl90W10pIHsgMSB9 LCAvKiBtYXJXaWR0aHNTdGF0RXhwZWN0ZWQgKi8KKwkJCQkJCQkgICBmYWxzZSwgLyogZGVs dGFTaWduZWRuZXNzIHJlcXVlc3RlZCAqLworCQkJCQkJCSAgIGZhbHNlICAvKiBkZWx0YVNp Z25lZG5lc3MgZXhwZWN0ZWQgKi8pOworCisJCXRlc3RfZGVsdGFfY2FsY3VsYXRpb24oMSwg KHVpbnQxNl90W10pIHsgMzMwMDAgfSwgLyogaW5BcnIgKi8KKwkJCQkJCQkJLyogNjU1MzUg LSAzMzAwMCArIDEgPSAzMjUzNiA9IDB4N0YxOAorCQkJCQkJCQkgICAtMzI1MzYgPSAoMHg3 RjE4IDw8IDEpICsgMSA9IDB4RkUzMSA9IDY1MDczICovCisJCQkJCQkJICAgMSwgKHVpbnQx Nl90W10pIHsgMHhGRTMxIH0sIC8qIG1hckRlbHRhc0V4cGVjdGVkKi8KKwkJCQkJCQkgICAx LCAodWludDE2X3RbXSkgeyAxNiB9LAkvKiBtYXJXaWR0aHNFeHBlY3RlZCAqLworCQkJCQkJ CSAgIDEsICh1aW50MTZfdFtdKSB7IDEgfSwgLyogbWFyV2lkdGhzU3RhdEV4cGVjdGVkICov CisJCQkJCQkJICAgdHJ1ZSwgLyogZGVsdGFTaWduZWRuZXNzIHJlcXVlc3RlZCAqLworCQkJ CQkJCSAgIHRydWUgIC8qIGRlbHRhU2lnbmVkbmVzcyBleHBlY3RlZCAqLyk7CisKKwkJdGVz dF9kZWx0YV9jYWxjdWxhdGlvbigyLCAodWludDE2X3RbXSkgeyAwLCAzMzAwMCB9LCAvKiBp bkFyciAqLworCQkJCQkJCSAgIDIsICh1aW50MTZfdFtdKSB7IDAsIDMzMDAwIH0sIC8qIG1h ckRlbHRhc0V4cGVjdGVkKi8KKwkJCQkJCQkgICAyLCAodWludDE2X3RbXSkgeyAxLCAxNiB9 LAkvKiBtYXJXaWR0aHNFeHBlY3RlZCAqLworCQkJCQkJCSAgIDIsICh1aW50MTZfdFtdKSB7 IDEsIDEgfSwgLyogbWFyV2lkdGhzU3RhdEV4cGVjdGVkICovCisJCQkJCQkJICAgZmFsc2Us IC8qIGRlbHRhU2lnbmVkbmVzcyByZXF1ZXN0ZWQgKi8KKwkJCQkJCQkgICBmYWxzZSAgLyog ZGVsdGFTaWduZWRuZXNzIGV4cGVjdGVkICovKTsKKworCQl0ZXN0X2RlbHRhX2NhbGN1bGF0 aW9uKDIsICh1aW50MTZfdFtdKSB7IDMzMDAwLCAwIH0sIC8qIGluQXJyICovCisJCQkJCQkJ CS8qIDY1NTM1IC0gMzMwMDAgKyAxID0gMzI1MzYgPSAweDdGMTg7CisJCQkJCQkJCSAgICgw eDdGMTggPDwgMSkgPSAweEZFMzAgPSA2NTA3MjsKKwkJCQkJCQkJICAgLTMyNTM2ID0gKDB4 N0YxOCA8PCAxKSB8IDEgPSAweEZFMzEgPSA2NTA3MyAqLworCQkJCQkJCSAgIDIsICh1aW50 MTZfdFtdKSB7IDB4RkUzMSwgMHhGRTMwIH0sIC8qIG1hckRlbHRhc0V4cGVjdGVkKi8KKwkJ CQkJCQkgICAxLCAodWludDE2X3RbXSkgeyAxNiB9LAkvKiBtYXJXaWR0aHNFeHBlY3RlZCAq LworCQkJCQkJCSAgIDEsICh1aW50MTZfdFtdKSB7IDIgfSwgLyogbWFyV2lkdGhzU3RhdEV4 cGVjdGVkICovCisJCQkJCQkJICAgZmFsc2UsIC8qIGRlbHRhU2lnbmVkbmVzcyByZXF1ZXN0 ZWQgKi8KKwkJCQkJCQkgICB0cnVlICAvKiBkZWx0YVNpZ25lZG5lc3MgZXhwZWN0ZWQgKi8p OworCisJCXRlc3RfZGVsdGFfY2FsY3VsYXRpb24oMTYsICh1aW50MTZfdFtdKSB7IDAsIDEs IDAsIDMsIDQsIDUsIDYsIDcsCisJCQkJCQkJCQkJCQkgIDgsIDksIDEwLCAxMSwgMTIsIDEz LCAxNCwgNjU1MzQgfSwgLyogaW5BcnIgKi8KKwkJCQkJCQkgICAxNiwgKHVpbnQxNl90W10p IHsgMHgwLCAweDIsIDB4MywgMHg2LCAweDIsIDB4MiwgMHgyLCAweDIsCisJCQkJCQkJCQkJ CQkgIDB4MiwgMHgyLCAweDIsIDB4MiwgMHgyLCAweDIsIDB4MiwgMHgyMSB9LCAvKiBtYXJE ZWx0YXNFeHBlY3RlZCovCisJCQkJCQkJICAgMywgKHVpbnQxNl90W10pIHsgIDIsIDMsIDYg fSwgLyogbWFyV2lkdGhzRXhwZWN0ZWQgKi8KKwkJCQkJCQkgICAzLCAodWludDE2X3RbXSkg eyAxNCwgMSwgMSB9LCAvKiBtYXJXaWR0aHNTdGF0RXhwZWN0ZWQgKi8KKwkJCQkJCQkgICBm YWxzZSwgLyogZGVsdGFTaWduZWRuZXNzIHJlcXVlc3RlZCAqLworCQkJCQkJCSAgIHRydWUg IC8qIGRlbHRhU2lnbmVkbmVzcyBleHBlY3RlZCAqLyk7CisKKwlwcmludGYoIlRlc3QgREVM VEEgQ0FMQ1VMQVRJT04gZm9yIHVuc29ydGVkIHNlcXVlbmNlcyBhbmQgdGVzdCBPVkVSTEFQ UElORyB0cmljayBQQVNTRUQgXG4iKTsKKwlwcmludGYoIj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT1cblxuIik7CisJfQorCisJcHJpbnRmKCI9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKKwlwcmludGYoIlRlc3QgRVhD RVBUSU9OUyBDQUxDVUxBVElPTlxuIik7CisKKwl0ZXN0X2NhbGNfZXhjZXB0aW9ucygxNCwg MywgKHVpbnQxNl90W10pIHsgMSwgMiwgNyB9LCAvKiB3aWR0aHMgb2YgZGVsdGFzKi8KKwkJ CQkJCSAzLCAodWludDE2X3RbXSkgeyA0LCA2LCA0IH0sCSAgLyogc3RhdGlzdGljcyBvbiB3 aWR0aHMgKi8KKwkJCQkJCSA3LAkgLyogd2lkdGggb2Ygc2hvcnQgZGVsdGFzICovCisJCQkJ CQkgMCk7IC8qIG51bWJlciBvZiBleGNlcHRpb25zKi8KKworCXRlc3RfY2FsY19leGNlcHRp b25zKDE0LCAzLCAodWludDE2X3RbXSkgeyAxLCAyLCA3IH0sIC8qIHdpZHRocyAqLworCQkJ CQkJIDMsICh1aW50MTZfdFtdKSB7IDYsIDcsIDEgfSwJICAvKiBzdGF0ICovCisJCQkJCQkg MiwgMSk7IC8qIHNob3J0IGRlbHRhcyB3aWR0aCwgZXhjZXB0aW9ucyBjb3VudCovCisKKwl0 ZXN0X2NhbGNfZXhjZXB0aW9ucyg0MCwgMywgKHVpbnQxNl90W10pIHsgNSwgNiwgMTIgfSwg Lyogd2lkdGhzICovCisJCQkJCQkgMywgKHVpbnQxNl90W10pIHsgMzYsIDIsIDIgfSwJICAg Lyogc3RhdCAqLworCQkJCQkJIDUsIDQpOyAvKiBzaG9ydCBkZWx0YXMgd2lkdGgsIGV4Y2Vw dGlvbnMgY291bnQqLworCisJdGVzdF9jYWxjX2V4Y2VwdGlvbnMoNDAsIDQsICh1aW50MTZf dFtdKSB7IDUsIDYsIDcsIDEyIH0sIDQsCisJCQkJCQkgKHVpbnQxNl90W10pIHsgMzYsIDEs IDEsIDIgfSwgNSwgNCk7CisKKwl0ZXN0X2NhbGNfZXhjZXB0aW9ucyg0MCwgNCwgKHVpbnQx Nl90W10pIHsgNSwgNiwgNywgMTIgfSwgNCwKKwkJCQkJCSAodWludDE2X3RbXSkgeyAzNSwg MSwgMiwgMiB9LCA2LCA0KTsKKworCXRlc3RfY2FsY19leGNlcHRpb25zKDQwLCA0LCAodWlu dDE2X3RbXSkgeyA1LCA2LCA3LCAxMiB9LCA0LAorCQkJCQkJICh1aW50MTZfdFtdKSB7IDM0 LCAxLCAyLCAzIH0sIDcsIDMpOworCisJdGVzdF9jYWxjX2V4Y2VwdGlvbnMoNDAsIDQsICh1 aW50MTZfdFtdKSB7IDUsIDYsIDcsIDEyIH0sIDQsCisJCQkJCQkgKHVpbnQxNl90W10pIHsg MSwgMzQsIDIsIDMgfSwgNywgMyk7CisKKwl0ZXN0X2NhbGNfZXhjZXB0aW9ucyg0MCwgNCwg KHVpbnQxNl90W10pIHsgNSwgNiwgNywgMTIgfSwgNCwKKwkJCQkJCSAodWludDE2X3RbXSkg eyAxLCAzMywgMiwgNCB9LCA3LCA0KTsKKworCXRlc3RfY2FsY19leGNlcHRpb25zKDQwLCA0 LCAodWludDE2X3RbXSkgeyA1LCA2LCA3LCAxMiB9LCA0LAorCQkJCQkJICh1aW50MTZfdFtd KSB7IDEsIDMyLCAyLCA1IH0sIDEyLCAwKTsKKworCXByaW50ZigiVGVzdCBFWENFUFRJT05T IENBTENVTEFUSU9OIFBBU1NFRFxuIik7CisJcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09XG5cbiIpOworCisJcHJpbnRmKCI9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKKwlwcmludGYoIlRlc3QgREVMVEEg RlJBTUUgT0YgUkVGRVJFTkNFUyBQQUNLSU5HXG4iKTsKKworCXRlc3RfZGZvcigxNiwKKwkJ CSAgKHVpbnQxNl90W10pIHsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDEx LCAxMiwgMTMsIDE0LAorCQkJCQkJCSAxNSB9LCAvKiBjbnQsIGFycmF5ICovCisJCQkgIERG T1JfRVhDX0RPTlRfVVNFLCAgIC8qIGZsYWcgb24gdXNlIG9mIGV4Y2VwdGlvbnMgKi8KKwkJ CSAgMSwJCQkJICAgLyogYXdhaXRlZCB3aWR0aCBvZiBzaG9ydCBkZWx0YXMgKi8KKwkJCSAg MCwJCQkJICAgLyogYXdhaXRlZCBjb3VudCBvZiBleGNlcHRpb25zICovCisJCQkgIDAsCQkJ CSAgIC8qIGF3YWl0ZWQgZXhjZXB0aW9uIHdpZHRoKi8KKwkJCSAgMCwJCQkJICAgLyogYXdh aXRlZCBleGNlcHRpb24gcG9zaXRpb24gd2lkdGgqLworCQkJICAxNiwJCQkJICAgLyogYXdh aXRlZCBiaXRzIGNvdW50ICovCisJCQkgIDIsCQkJCSAgIC8qIGNudEJ5dGVDb3VudEF3YWl0 ZWQgKi8KKwkJCSAgMTUuOTksIC8qIGF3YWl0ZWQgcmF0aW8gbWluIHZhbHVlIChyYXRpbyA+ PSAxNS45OSkgKi8KKwkJCSAgKHVpbnQ4X3RbXSkgeyAweEZFLCAweEZGIH0pOworCisJdGVz dF9kZm9yKDE2LAorCQkJICAodWludDE2X3RbXSkgeyAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3 LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsCisJCQkJCQkJIDE1IH0sIC8qIGNudCwgYXJy YXkgKi8KKwkJCSAgREZPUl9FWENfVVNFLCAvKiBmbGFnIG9uIHVzZSBvZiBleGNlcHRpb25z ICovCisJCQkgIDEsCQkJLyogYXdhaXRlZCB3aWR0aCBvZiBzaG9ydCBkZWx0YXMgKi8KKwkJ CSAgMCwJCQkvKiBhd2FpdGVkIGNvdW50IG9mIGV4Y2VwdGlvbnMgKi8KKwkJCSAgMCwJCQkv KiBhd2FpdGVkIGV4Y2VwdGlvbiB3aWR0aCovCisJCQkgIDAsCQkJLyogYXdhaXRlZCBleGNl cHRpb24gcG9zaXRpb24gd2lkdGgqLworCQkJICAxNiwJCQkvKiBhd2FpdGVkIGJpdHMgY291 bnQgKi8KKwkJCSAgMiwJCQkvKiBjbnRCeXRlQ291bnRBd2FpdGVkICovCisJCQkgIDE1Ljk5 LAkJLyogYXdhaXRlZCByYXRpbyBtaW4gdmFsdWUgKHJhdGlvID49IDE1Ljk5KSAqLworCQkJ ICAodWludDhfdFtdKSB7IDB4RkUsIDB4RkYgfSk7CisKKwl0ZXN0X2Rmb3IoMTYsCisJCQkg ICh1aW50MTZfdFtdKSB7IDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwg MTIsIDEzLCAxNCwKKwkJCQkJCQkgMTAyMyB9LCAvKiBjbnQsIGFycmF5ICovCisJCQkgIERG T1JfRVhDX0RPTlRfVVNFLAkgLyogZmxhZyBvbiB1c2Ugb2YgZXhjZXB0aW9ucyAqLworCQkJ ICAxMCwJCQkJCSAvKiBhd2FpdGVkIHdpZHRoIG9mIHNob3J0IGRlbHRhcyAqLworCQkJICAw LAkJCQkJIC8qIGF3YWl0ZWQgY291bnQgb2YgZXhjZXB0aW9ucyAqLworCQkJICAwLAkJCQkJ IC8qIGF3YWl0ZWQgZXhjZXB0aW9uIHdpZHRoKi8KKwkJCSAgMCwJCQkJCSAvKiBhd2FpdGVk IGV4Y2VwdGlvbiBwb3NpdGlvbiB3aWR0aCovCisJCQkgIDEwICogMTYsCQkJCSAvKiBhd2Fp dGVkIGJpdHMgY291bnQgKi8KKwkJCSAgMjAsCQkJCQkgLyogYXdhaXRlZCBieXRlcyBjb3Vu dCAqLworCQkJICAxLjUsCQkJCQkgLyogYXdhaXRlZCByYXRpbyBtaW4gdmFsdWUgKi8KKwkJ CSAgKHVpbnQ4X3RbXSkgeyAweDAwLCAweDA0LCAweDEwLCAweDQwLCAweDAwLCAweDAxLCAw eDA0LAorCQkJCQkJCTB4MTAsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDQsIDB4MTAsIDB4NDAs CisJCQkJCQkJMHgwMCwgMHgwMSwgMHgwNCwgMHgxMCwgMHg0MCwgMHhGQyB9KTsKKworCXRl c3RfZGZvcigxNiwKKwkJCSAgKHVpbnQxNl90W10pIHsgMCwgMSwgMiwgMywgNCwgNSwgNiwg NywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LAorCQkJCQkJCSAxMDIzIH0sIC8qIGNudCwg YXJyYXkgKi8KKwkJCSAgREZPUl9FWENfVVNFLAkJCSAvKiBmbGFnIG9uIHVzZSBvZiBleGNl cHRpb25zICovCisJCQkgIDEsCQkJCQkgLyogYXdhaXRlZCB3aWR0aCBvZiBzaG9ydCBkZWx0 YXMgKi8KKwkJCSAgMSwJCQkJCSAvKiBhd2FpdGVkIGNvdW50IG9mIGV4Y2VwdGlvbnMgKi8K KwkJCSAgOSwJCQkJCSAvKiBhd2FpdGVkIGV4Y2VwdGlvbiB3aWR0aCovCisJCQkgIDQsCQkJ CQkgLyogYXdhaXRlZCBleGNlcHRpb24gcG9zaXRpb24gd2lkdGgqLworCQkJICAxNiAqIDEg KyA5ICsgNCwJCSAvKiBhd2FpdGVkIGJpdHMgY291bnQgKi8KKwkJCSAgNCwJCQkJCSAvKiBh d2FpdGVkIGJ5dGVzIGNvdW50ICovCisJCQkgIDcuOTksCQkJCQkgLyogYXdhaXRlZCByYXRp byBtaW4gdmFsdWUgKi8KKwkJCSAgKHVpbnQ4X3RbXSkgeyAweEZFLCAweEZGLCAweEY4LCAw eDFGIH0pOworCisJdGVzdF9kZm9yKDMwLCAvKiBjbnQgKi8KKwkJCQkJICAodWludDE2X3Rb XSkgeyAwLCAxLCAyLCAzLCA0LAorCQkJCQkJCQkJIDUsIDYsIDcsIDgsIDksCisgIC8qIGRl bHRhPTIsIHBvcz0xMCwgZGVsdGFwb3M9MTAgKi8gMTEsIDEyLCAxMywgMTQsIDE1LAorCQkJ CQkJCQkJIDE2LCAxNywgMTgsIDE5LCAyMCwKKwkJCQkJCQkJCSAyMSwgMjIsIDIzLCAyNCwg MjUsCisgIC8qIGRlbHRhPTMsIHBvcz0yNSwgZGVsdGFwb3M9MTUgKi8gMjgsIDI5LCAzMCwg MzEsCisgIC8qIGRlbHRhPTMsIHBvcz0yOSwgZGVsdGFwb3M9NCAqLwkgMzQgfSwgIAkJCQkv KiBhcnJheSAqLworCQkJICBERk9SX0VYQ19VU0UsCQkJICAvKiBmbGFnIG9uIHVzZSBvZiBl eGNlcHRpb25zICovCisJCQkgIDEsCQkJCQkgIC8qIGF3YWl0ZWQgd2lkdGggb2Ygc2hvcnQg ZGVsdGFzICovCisJCQkgIDMsCQkJCQkgIC8qIGF3YWl0ZWQgY291bnQgb2YgZXhjZXB0aW9u cyAqLworCQkJICAxLAkJCQkJICAvKiBhd2FpdGVkIGV4Y2VwdGlvbiB3aWR0aCovCisJCQkg IDQsCQkJCQkgIC8qIGF3YWl0ZWQgZXhjZXB0aW9uIHBvc2l0aW9uIHdpZHRoKi8KKwkJCSAg MzAgKiAxICsgMyAqIDEgKyAzICogNCwgLyogYXdhaXRlZCBiaXRzIGNvdW50ICovCisJCQkg IDYsCQkJCQkgIC8qIGF3YWl0ZWQgYnl0ZXMgY291bnQgKi8KKwkJCSAgOS45OSwJCQkJCSAg LyogYXdhaXRlZCByYXRpbyBtaW4gdmFsdWUgKi8KKwkJCSAgKHVpbnQ4X3RbXSkgeyAweEZF LCAweEZCLCAweEZGLCAweEZGLCAweEY1LCAweDA5IH0pOworCisJLyogVW5zb3J0ZWQgc2Vx dWVuY2VzICovCisJdGVzdF9kZm9yKDE2LAorCQkJICAodWludDE2X3RbXSkgeyAwLCAxLCAy LCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsCisJCQkJCQkJIDEz IH0sIC8qIGNudCwgYXJyYXkgKi8KKwkJCSAgREZPUl9FWENfRE9OVF9VU0UsICAgLyogZmxh ZyBvbiB1c2Ugb2YgZXhjZXB0aW9ucyAqLworCQkJICAyLAkJCQkgICAvKiBhd2FpdGVkIHdp ZHRoIG9mIHNob3J0IGRlbHRhcyAqLworCQkJICAwLAkJCQkgICAvKiBhd2FpdGVkIGNvdW50 IG9mIGV4Y2VwdGlvbnMgKi8KKwkJCSAgMCwJCQkJICAgLyogYXdhaXRlZCBleGNlcHRpb24g d2lkdGgqLworCQkJICAwLAkJCQkgICAvKiBhd2FpdGVkIGV4Y2VwdGlvbiBwb3NpdGlvbiB3 aWR0aCovCisJCQkgIDMyLAkJCQkgICAvKiBhd2FpdGVkIGJpdHMgY291bnQgKi8KKwkJCSAg NCwJCQkJICAgLyogY250Qnl0ZUNvdW50QXdhaXRlZCAqLworCQkJICA3Ljk5LCAvKiBhd2Fp dGVkIHJhdGlvIG1pbiB2YWx1ZSAocmF0aW8gPj0gNy45OSkgKi8KKwkJCSAgKHVpbnQ4X3Rb XSkgeyAweEE4LCAweEFBLCAweEFBLCAweEVBIH0pOworCisJLyogVGVzdCB0aGUgZGVjb2Rp bmcgYWxnb3JpdGhtIGZvciB0aGUgb3ZlcmxhcCB0cmljayAqLworCXRlc3RfZGZvcigxNiwK KwkJCSAgKHVpbnQxNl90W10pIHsgMCwgMSwgNjU1MzUsIDIsIDQsIDUsIDYsIDcsIDgsIDks IDEwLCAxMSwgMTIsIDEzLCAxNCwKKwkJCQkJCQkgMTUgfSwgLyogY250LCBhcnJheSAqLwor CQkJICBERk9SX0VYQ19ET05UX1VTRSwgICAvKiBmbGFnIG9uIHVzZSBvZiBleGNlcHRpb25z ICovCisJCQkgIDMsCQkJCSAgIC8qIGF3YWl0ZWQgd2lkdGggb2Ygc2hvcnQgZGVsdGFzICov CisJCQkgIDAsCQkJCSAgIC8qIGF3YWl0ZWQgY291bnQgb2YgZXhjZXB0aW9ucyAqLworCQkJ ICAwLAkJCQkgICAvKiBhd2FpdGVkIGV4Y2VwdGlvbiB3aWR0aCovCisJCQkgIDAsCQkJCSAg IC8qIGF3YWl0ZWQgZXhjZXB0aW9uIHBvc2l0aW9uIHdpZHRoKi8KKwkJCSAgNDgsCQkJCSAg IC8qIGF3YWl0ZWQgYml0cyBjb3VudCAqLworCQkJICA2LAkJCQkgICAvKiBjbnRCeXRlQ291 bnRBd2FpdGVkICovCisJCQkgIDQsIC8qIGF3YWl0ZWQgcmF0aW8gbWluIHZhbHVlICovCisJ CQkgICh1aW50OF90W10pIHsgMHg1MCwgMHg0ZCwgMHg0OSwgMHg5MiwgMHgyNCwgMHg0OSB9 KTsKKworCS8qIFRoZSBuZXh0IHRlc3QgZG9lcyBub3QgcmVzdWx0IGluIGFjdGl2YXRpb24g b2YgdGhlIG92ZXJsYXAgdHJpY2sgc2luY2UKKwl0aGUgc2VxdWVuY2UgaXMgc29ydGVkLiAq LworCXRlc3RfZGZvcigxNiwKKwkJCSAgKHVpbnQxNl90W10pIHsgMCwgMSwgMiwgMywgNCwg NSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCA2NTUzNSB9LCAvKiBjbnQsIGFy cmF5ICovCisJCQkgIERGT1JfRVhDX0RPTlRfVVNFLCAgIC8qIGZsYWcgb24gdXNlIG9mIGV4 Y2VwdGlvbnMgKi8KKwkJCSAgMTYsCQkJCSAgIC8qIGF3YWl0ZWQgd2lkdGggb2Ygc2hvcnQg ZGVsdGFzICovCisJCQkgIDAsCQkJCSAgIC8qIGF3YWl0ZWQgY291bnQgb2YgZXhjZXB0aW9u cyAqLworCQkJICAwLAkJCQkgICAvKiBhd2FpdGVkIGV4Y2VwdGlvbiB3aWR0aCovCisJCQkg IDAsCQkJCSAgIC8qIGF3YWl0ZWQgZXhjZXB0aW9uIHBvc2l0aW9uIHdpZHRoKi8KKwkJCSAg MjU2LAkJCQkgICAvKiBhd2FpdGVkIGJpdHMgY291bnQgKi8KKwkJCSAgMzIsCQkJCSAgIC8q IGNudEJ5dGVDb3VudEF3YWl0ZWQgKi8KKwkJCSAgMC45OTk5LAkJCSAgIC8qIGF3YWl0ZWQg cmF0aW8gbWluIHZhbHVlID0gMSAqLworCQkJICAodWludDhfdFtdKSB7IDAwLCAwMCwgMDEs IDAwLCAwMSwgMDAsIDAxLCAwMCwgMDEsIDAwLCAwMSwgMDAsIDAxLCAwMCwgMDEsIDAwLCAw MSwgMDAsIDAxLCAwMCwgMDEsIDAwLCAwMSwgMDAsIDAxLCAwMCwgMDEsIDAwLCAwMSwgMDAs IDB4ZjEsIDB4ZmYgfSk7CisKKwlwcmludGYoIlRlc3QgREVMVEEgRlJBTUUgT0YgUkVGRVJF TkNFUyBQQUNLSU5HIFBBU1NFRFxuIik7CisJcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09XG5cbiIpOworCisJZG9uZV90ZXN0aW5nKCk7Cit9Ci0t IAoyLjUzLjAKCg== --------------lw8OY0FkiJnrHVFMGb70Aea3 Content-Type: text/x-patch; charset=UTF-8; name="v12-0005-Use-Delta-Frame-of-Reference-DFoR-to-compress-pr.patch" Content-Disposition: attachment; filename*0="v12-0005-Use-Delta-Frame-of-Reference-DFoR-to-compress-pr.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAxZmI3ZGFhNDdkZWNjNmNmNWNiMzNhMWExMjIzYTM1MjA2MGE5ODYyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBFdmdlbnkgVm9yb3BhZXYgPGV2b3JvcEBnbWFpbC5j b20+CkRhdGU6IEZyaSwgMjAgTWFyIDIwMjYgMTc6MzA6MjIgKzA4MDAKU3ViamVjdDogW1BB VENIIHYxMiA1LzVdIFVzZSBEZWx0YSBGcmFtZSBvZiBSZWZlcmVuY2UgKERGb1IpIHRvIGNv bXByZXNzCiBwcnVuZS9mcmVlemUgcmVjb3Jkcy4KCkEgcHJ1bmUvZnJlZXplIHJlY29yZCBj b250YWlucyBmb3VyIHNlcXVlbmNlcyBvZiBpbnRlZ2VycyByZXByZXNlbnRpbmcKZnJvemVu LCByZWRpcmVjdGVkLCB1bnVzZWQsIGFuZCBkZWFkIHR1cGxlcy4gVXNpbmcgREZvUiBhbGdv cml0aG1zLCB0aGUKYHVudXNlZGAgYW5kIGBkZWFkYCBzZXF1ZW5jZXMgYXJlIG5vdyBjb21w cmVzc2VkLiBUaGUgYGZyb3plbmAKYW5kIGByZWRpcmVjdGVkYCBzZXF1ZW5jZXMgY2Fubm90 IGJlIGNvbXByZXNzZWQgYmVjYXVzZSB0aGUgb3JkZXIgb2YKdGhlaXIgZWxlbWVudHMgaXMg c2lnbmlmaWNhbnQsIGFuZCBERm9SIGRvZXMgbm90IHN1cHBvcnQgdW5zb3J0ZWQKc2VxdWVu Y2VzIHlldC4gVGhlIHRoZW9yZXRpY2FsIGNvbXByZXNzaW9uIHJhdGlvIGZvciBkZm9yX3Ux NiBjYW4gcmVhY2gKdXAgdG8gMTYuCgpUaGUgbmV3IEdVQyB3YWxfcHJ1bmVfZGZvcl9jb21w cmVzc2lvbiBjb250cm9scyAoZW5hYmxlcyBvcgpkaXNhYmxlcykgY29tcHJlc3Npb24gZm9y IHBydW5lL2ZyZWV6ZSByZWNvcmRzLgoKQW4gaW50ZWdyYWwgVEFQIHRlc3QsIDA1Ml9wcnVu ZV9kZm9yX2NvbXByZXNzaW9uLnBsLCBoYXMgYmVlbgppbXBsZW1lbnRlZC4gSXQgZGVtb25z dHJhdGVzIGFuIGF2ZXJhZ2UgY29tcHJlc3Npb24gcmF0aW8gb2YgYXQgbGVhc3QgNQp3aGVu IGFuYWx5emluZyBwcnVuZS9mcmVlemUgcmVjb3JkcyBpbiBwcmFjdGljZS4KCkF1dGhvcjog RXZnZW55IFZvcm9wYWV2IDxldmdlbnkudm9yb3BhZXZAdGFudG9ybGFicy5jb20+IDxldm9y b3BAZ21haWwuY29tPgpSZXZpZXdlZCBieTogQW5kcmV5IEJvcm9kaW4gPHg0bW1tQHlhbmRl eC10ZWFtLnJ1PgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV94bG9nLmMg ICAgICAgICB8ICAyMSArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvcHJ1bmVoZWFwLmMg ICAgICAgICAgIHwgMjA5ICsrKysrKysrKysrLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdy ZGVzYy9NYWtlZmlsZSAgICAgICAgICB8ICAgMSArCiAuLi4vYWNjZXNzL3JtZ3JkZXNjL2hl YXBhbV94bG9nX2Rmb3IuYyAgICAgICAgfCAxMTQgKysrKysrKwogc3JjL2JhY2tlbmQvYWNj ZXNzL3JtZ3JkZXNjL2hlYXBkZXNjLmMgICAgICAgIHwgIDk0ICsrKystLQogc3JjL2JhY2tl bmQvYWNjZXNzL3JtZ3JkZXNjL21lc29uLmJ1aWxkICAgICAgIHwgICAxICsKIHNyYy9iYWNr ZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0ICAgICB8ICAgNyArCiBzcmMvYmFj a2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYyAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIHwgICAyICsKIHNyYy9i aW4vcGdfd2FsZHVtcC8uZ2l0aWdub3JlICAgICAgICAgICAgICAgICB8ICAgOSArCiBzcmMv YmluL3BnX3dhbGR1bXAvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgfCAgMjYgKy0KIHNy Yy9iaW4vcGdfd2FsZHVtcC9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICB8ICAgMSArCiBz cmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtX3hsb2cuaCAgICAgICAgICAgICAgfCAgMTAgKy0K IHNyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW1feGxvZ19kZm9yLmggICAgICAgICB8IDE0NCAr KysrKysrKysKIHNyYy90ZXN0L2Rmb3IvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgMiArCiAuLi4vcmVjb3ZlcnkvdC8wNTJfcHJ1bmVfZGZvcl9jb21wcmVzc2lvbi5w bCAgfCAyODMgKysrKysrKysrKysrKysrKysrCiAxNiBmaWxlcyBjaGFuZ2VkLCA4NjYgaW5z ZXJ0aW9ucygrKSwgNTkgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jh Y2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2hlYXBhbV94bG9nX2Rmb3IuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW1feGxvZ19kZm9yLmgKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvdGVzdC9yZWNvdmVyeS90LzA1Ml9wcnVuZV9kZm9yX2NvbXByZXNz aW9uLnBsCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX3hs b2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV94bG9nLmMKaW5kZXggOWVk NzAyNGU4MTQuLjFkNDRjZjk2NjkyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW1feGxvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBh bV94bG9nLmMKQEAgLTE2LDYgKzE2LDcgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy9idWZtYXNr LmgiCiAjaW5jbHVkZSAiYWNjZXNzL2hlYXBhbS5oIgorI2luY2x1ZGUgImFjY2Vzcy9oZWFw YW1feGxvZ19kZm9yLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3Zpc2liaWxpdHltYXAuaCIKICNp bmNsdWRlICJhY2Nlc3MveGxvZy5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9ndXRpbHMuaCIK QEAgLTEwNSwxMiArMTA2LDI2IEBAIGhlYXBfeGxvZ19wcnVuZV9mcmVlemUoWExvZ1JlYWRl clN0YXRlICpyZWNvcmQpCiAJCU9mZnNldE51bWJlciAqZnJ6X29mZnNldHM7CiAJCWNoYXIJ ICAgKmRhdGFwdHIgPSBYTG9nUmVjR2V0QmxvY2tEYXRhKHJlY29yZCwgMCwgJmRhdGFsZW4p OwogCQlib29sCQlkb19wcnVuZTsKKwkJY2hhcgkJKmN1cnNvciBQR19VU0VEX0ZPUl9BU1NF UlRTX09OTFk7CiAKLQkJaGVhcF94bG9nX2Rlc2VyaWFsaXplX3BydW5lX2FuZF9mcmVlemUo ZGF0YXB0ciwgeGxyZWMuZmxhZ3MsCisJCS8qCisJCSAqIFByb3ZpZGUgREZvUiB1bnBhY2tp bmcgd2l0aCBvdXRlciBidWZmZXJzLiAzIGJ1ZmZlciBwYXJ0cyBhcmUKKwkJICogZm9yIHNh dmluZyB0aGUgcmVkaXJlY3RlZCwgdGhlIGRlYWQgYW5kIHRoZSB1bnVzZWQgdHVwbGUgb2Zm c2V0cy4KKwkJICogQWRkaXRpb25hbCB0aHJlZSBwYXJ0cyBhcmUgZm9yIGludGVybmFsIG5l ZWRzIG9mIHRoZSBkZm9yX3VucGFjaworCQkgKiBmdW5jdGlvbi4KKwkJICovCisJCXVuaW9u CisJCXsKKwkJCWludDMyIGFsaWduX21lOyAvKiBGb3JjZXMgNC1ieXRlIGFsaWdubWVudCAq LworCQkJdWludDggZGZvcl9idWZbNiAqIERGT1JfQlVGX1BBUlRfU0laRV07CisJCX0gZGZv cl9idWZfYWxpZ25lZDsKKworCQljdXJzb3IgPSBoZWFwX3hsb2dfZGVzZXJpYWxpemVfcHJ1 bmVfYW5kX2ZyZWV6ZShkYXRhcHRyLCB4bHJlYy5mbGFncywKIAkJCQkJCQkJCQkJICAgJm5w bGFucywgJnBsYW5zLCAmZnJ6X29mZnNldHMsCiAJCQkJCQkJCQkJCSAgICZucmVkaXJlY3Rl ZCwgJnJlZGlyZWN0ZWQsCiAJCQkJCQkJCQkJCSAgICZuZGVhZCwgJm5vd2RlYWQsCi0JCQkJ CQkJCQkJCSAgICZudW51c2VkLCAmbm93dW51c2VkKTsKKwkJCQkJCQkJCQkJICAgJm51bnVz ZWQsICZub3d1bnVzZWQsCisJCQkJCQkJCQkJCSAgIGRmb3JfYnVmX2FsaWduZWQuZGZvcl9i dWYpOwogCiAJCWRvX3BydW5lID0gbnJlZGlyZWN0ZWQgPiAwIHx8IG5kZWFkID4gMCB8fCBu dW51c2VkID4gMDsKIApAQCAtMTU2LDcgKzE3MSw3IEBAIGhlYXBfeGxvZ19wcnVuZV9mcmVl emUoWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJCX0KIAogCQkvKiBUaGVyZSBzaG91bGQg YmUgbm8gbW9yZSBkYXRhICovCi0JCUFzc2VydCgoY2hhciAqKSBmcnpfb2Zmc2V0cyA9PSBk YXRhcHRyICsgZGF0YWxlbik7CisJCUFzc2VydChjdXJzb3IgPT0gZGF0YXB0ciArIGRhdGFs ZW4pOwogCiAJCS8qCiAJCSAqIFRoZSBjcml0aWNhbCBpbnRlZ3JpdHkgcmVxdWlyZW1lbnQg aGVyZSBpcyB0aGF0IHdlIG11c3QgbmV2ZXIgZW5kCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9wcnVuZWhlYXAuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3By dW5laGVhcC5jCmluZGV4IDc0YzM1NWJlMjE5Li45OTRlN2I1N2MzNSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvcHJ1bmVoZWFwLmMKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvcHJ1bmVoZWFwLmMKQEAgLTE2LDYgKzE2LDcgQEAKIAogI2luY2x1ZGUg ImFjY2Vzcy9oZWFwYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MvaGVhcGFtX3hsb2cuaCIKKyNp bmNsdWRlICJhY2Nlc3MvaGVhcGFtX3hsb2dfZGZvci5oIgogI2luY2x1ZGUgImFjY2Vzcy9o dHVwX2RldGFpbHMuaCIKICNpbmNsdWRlICJhY2Nlc3MvbXVsdGl4YWN0LmgiCiAjaW5jbHVk ZSAiYWNjZXNzL3RyYW5zYW0uaCIKQEAgLTIzOCw3ICsyMzksNiBAQCBzdGF0aWMgYm9vbCBo ZWFwX3BhZ2Vfd2lsbF9mcmVlemUoYm9vbCBkaWRfdHVwbGVfaGludF9mcGksIGJvb2wgZG9f cHJ1bmUsIGJvb2wgZAogc3RhdGljIGJvb2wgaGVhcF9wYWdlX3dpbGxfc2V0X3ZtKFBydW5l U3RhdGUgKnByc3RhdGUsIFBydW5lUmVhc29uIHJlYXNvbiwKIAkJCQkJCQkJICBib29sIGRv X3BydW5lLCBib29sIGRvX2ZyZWV6ZSk7CiAKLQogLyoKICAqIE9wdGlvbmFsbHkgcHJ1bmUg YW5kIHJlcGFpciBmcmFnbWVudGF0aW9uIGluIHRoZSBzcGVjaWZpZWQgcGFnZS4KICAqCkBA IC0yNTI5LDYgKzI1MjksMjQgQEAgaGVhcF9sb2dfZnJlZXplX3BsYW4oSGVhcFR1cGxlRnJl ZXplICp0dXBsZXMsIGludCBudHVwbGVzLAogCXJldHVybiBucGxhbnM7CiB9CiAKKy8qCisg KiBDb21wYXJhdG9yIGZvciBvZmZzZXRzLgorICovCitzdGF0aWMgaW50CitvZmZzZXRfY21w KGNvbnN0IHZvaWQgKmFyZzEsIGNvbnN0IHZvaWQgKmFyZzIpCit7CisJY29uc3QgT2Zmc2V0 TnVtYmVyICpvZmZzZXQxID0gYXJnMTsKKwljb25zdCBPZmZzZXROdW1iZXIgKm9mZnNldDIg PSBhcmcyOworCXJldHVybiAoKm9mZnNldDEgPiAqb2Zmc2V0MikgLSAoKm9mZnNldDEgPCAq b2Zmc2V0Mik7Cit9CisKKyNkZWZpbmUgU1RfU09SVCBzb3J0X29mZnNldHMKKyNkZWZpbmUg U1RfRUxFTUVOVF9UWVBFX1ZPSUQKKyNkZWZpbmUgU1RfQ09NUEFSRShhLCBiKSBvZmZzZXRf Y21wKGEsIGIpCisjZGVmaW5lIFNUX1NDT1BFIHN0YXRpYworI2RlZmluZSBTVF9ERUZJTkUK KyNpbmNsdWRlICJsaWIvc29ydF90ZW1wbGF0ZS5oIgorCiAvKgogICogV3JpdGUgYW4gWExP R19IRUFQMl9QUlVORSogV0FMIHJlY29yZAogICoKQEAgLTI1ODYsMTEgKzI2MDQsNDUgQEAg bG9nX2hlYXBfcHJ1bmVfYW5kX2ZyZWV6ZShSZWxhdGlvbiByZWxhdGlvbiwgQnVmZmVyIGJ1 ZmZlciwKIAlib29sCQlkb19zZXRfdm0gPSB2bWZsYWdzICYgVklTSUJJTElUWU1BUF9WQUxJ RF9CSVRTOwogCWJvb2wJCWhlYXBfZnBpX2FsbG93ZWQgPSB0cnVlOwogCisJZGZvcl9tZXRh X3QgZnJvemVuX21ldGEgPSB7MH07CisJZGZvcl9tZXRhX3QgcmVkaXJlY3RlZF9tZXRhID0g ezB9OworCWRmb3JfbWV0YV90IGRlYWRfbWV0YSA9IHswfTsKKwlkZm9yX21ldGFfdCB1bnVz ZWRfbWV0YSA9IHswfTsKKworCXVpbnQ4IGZyb3plbl9tZXRhX3BhY2tbTUFYX1BBQ0tFRF9N RVRBX1NJWkVdOworCXVpbnQ4IHJlZGlyZWN0ZWRfbWV0YV9wYWNrW01BWF9QQUNLRURfTUVU QV9TSVpFXTsKKwl1aW50OCBkZWFkX21ldGFfcGFja1tNQVhfUEFDS0VEX01FVEFfU0laRV07 CisJdWludDggdW51c2VkX21ldGFfcGFja1tNQVhfUEFDS0VEX01FVEFfU0laRV07CisKKwkv KgorCSAqIFNpbmNlIHRoaXMgY29kZSBpcyBydW4gaW4gYSBjcml0aWNhbCBzZWN0aW9uIHdl IGNhbid0IHVzZSBkeW5hbWljCisJICogYWxsb2NhdGlvbiBkdXJpbmcgREZvUiBwYWNraW5n LCBidXQgd2UgY2FuIHVzZSBidWZmZXJzIGFsbG9jYXRlZCBpbiB0aGUKKwkgKiBzdGFjay4g V2UgbmVlZCBhdCBtYXhpbXVtOgorCSAqIDEpIDQgKiBERk9SX0JVRl9QQVJUX1NJWkUKKwkg KiAgICAgICAgLSBmb3IgNCBwYWNrZWQgc2VxdWVuY2VzOiBmcm96ZW4sIHJlZGlyZWN0ZWQs IGRlYWQsIHVudXNlZAorCSAqIDIpIDMgKiBERk9SX0JVRl9QQVJUX1NJWkUKKwkgKiAJCSAg LSBmb3IgaW50ZXJuYWwgbmVlZHMgb2YgdGhlIGRmb3JfcGFjayBmdW5jdGlvbi4KKwkgKgor CSAqIE92ZXJhbGwsIDcgKiBERk9SX0JVRl9QQVJUX1NJWkUKKwkgKi8KKwl1bmlvbgorCXsK KwkJaW50MzIgYWxpZ25fbWU7IC8qIEZvcmNlcyA0LWJ5dGUgYWxpZ25tZW50ICovCisJCXVp bnQ4IGRmb3JfYnVmWzcgKiBERk9SX0JVRl9QQVJUX1NJWkVdOworCX0gZGZvcl9idWZfYWxp Z25lZDsKKwogCUFzc2VydCgodm1mbGFncyAmIFZJU0lCSUxJVFlNQVBfVkFMSURfQklUUykg PT0gdm1mbGFncyk7CiAKIAl4bHJlYy5mbGFncyA9IDA7CiAJcmVnYnVmX2ZsYWdzX2hlYXAg PSBSRUdCVUZfU1RBTkRBUkQ7CiAKKwkvKiBIZXVyaXN0aWNhbGx5IGVzdGltYXRlZCB0aHJl c2hvbGQgZm9yIHR1cm5pbmcgb24gREZvUiBjb21wcmVzc2lvbiAqLworCWlmICh3YWxfcHJ1 bmVfZGZvcl9jb21wcmVzc2lvbiAmJgorCQkobnJlZGlyZWN0ZWQgPiA1IHx8IG5kZWFkID4g OSB8fCBudW51c2VkID4gOSB8fCBuZnJvemVuID4gOSkpCisJeworCQl4bHJlYy5mbGFncyB8 PSBYTEhQX0RGT1JfQ09NUFJFU1NFRDsKKwl9CisKIAkvKgogCSAqIFdlIGNhbiBhdm9pZCBh biBGUEkgb2YgdGhlIGhlYXAgcGFnZSBpZiB0aGUgb25seSBtb2RpZmljYXRpb24gd2UgYXJl CiAJICogbWFraW5nIHRvIGl0IGlzIHRvIHNldCBQRF9BTExfVklTSUJMRSBhbmQgY2hlY2tz dW1zL3dhbF9sb2dfaGludHMgYXJlCkBAIC0yNjIyLDYgKzI2NzQsMTAgQEAgbG9nX2hlYXBf cHJ1bmVfYW5kX2ZyZWV6ZShSZWxhdGlvbiByZWxhdGlvbiwgQnVmZmVyIGJ1ZmZlciwKIAlp ZiAoZG9fc2V0X3ZtKQogCQlYTG9nUmVnaXN0ZXJCdWZmZXIoMSwgdm1idWZmZXIsIDApOwog CisJLyoKKwkgKiB4bGhwX2ZyZWV6ZV9wbGFucyBpcyBhcnJheSBvZiBzdHJ1Y3R1cmVzIGFu ZCBpcyBub3QgYSBzZXF1ZW5jZQorCSAqIG9mIGludGVnZXJzLCB0aGF0IGlzIHdoeSB3ZSBj YW5ub3QgdXNlIERGb1IgY29tcHJlc3Npb24gaGVyZS4KKwkgKi8KIAlpZiAobmZyb3plbiA+ IDApCiAJewogCQlpbnQJCQlucGxhbnM7CkBAIC0yNjQwLDM5ICsyNjk2LDEzOCBAQCBsb2df aGVhcF9wcnVuZV9hbmRfZnJlZXplKFJlbGF0aW9uIHJlbGF0aW9uLCBCdWZmZXIgYnVmZmVy LAogCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDAsIHBsYW5zLAogCQkJCQkJCXNpemVvZih4bGhw X2ZyZWV6ZV9wbGFuKSAqIG5wbGFucyk7CiAJfQotCWlmIChucmVkaXJlY3RlZCA+IDApCi0J ewotCQl4bHJlYy5mbGFncyB8PSBYTEhQX0hBU19SRURJUkVDVElPTlM7CiAKLQkJcmVkaXJl Y3RfaXRlbXMubnRhcmdldHMgPSBucmVkaXJlY3RlZDsKLQkJWExvZ1JlZ2lzdGVyQnVmRGF0 YSgwLCAmcmVkaXJlY3RfaXRlbXMsCi0JCQkJCQkJb2Zmc2V0b2YoeGxocF9wcnVuZV9pdGVt cywgZGF0YSkpOwotCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDAsIHJlZGlyZWN0ZWQsCi0JCQkJ CQkJc2l6ZW9mKE9mZnNldE51bWJlclsyXSkgKiBucmVkaXJlY3RlZCk7Ci0JfQotCWlmIChu ZGVhZCA+IDApCisJaWYgKCh4bHJlYy5mbGFncyAmIFhMSFBfREZPUl9DT01QUkVTU0VEKSAh PSAwKQogCXsKLQkJeGxyZWMuZmxhZ3MgfD0gWExIUF9IQVNfREVBRF9JVEVNUzsKKwkJaW50 IGZyb3plbl9wYWNrX3JlcyA9IDA7CisJCWludCByZWRpcmVjdGVkX3BhY2tfcmVzID0gMDsK KwkJaW50IGRlYWRfcGFja19yZXMgPSAwOworCQlpbnQgdW51c2VkX3BhY2tfcmVzID0gMDsK KworCQlpZiAobmZyb3plbiA+IDApCisJCXsKKwkJCWZyb3plbl9wYWNrX3JlcyA9IGRmb3Jf dTE2X3BhY2sobmZyb3plbiwgZnJ6X29mZnNldHMsCisJCQkJCQkJCQkJCURGT1JfRVhDX1VT RSwgJmZyb3plbl9tZXRhLAorCQkJCQkJCQkJCQk0ICogREZPUl9CVUZfUEFSVF9TSVpFLAor CQkJCQkJCQkJCQlkZm9yX2J1Zl9hbGlnbmVkLmRmb3JfYnVmICsKKwkJCQkJCQkJCQkJCTMg KiBERk9SX0JVRl9QQVJUX1NJWkUpOworCQl9CisKKwkJaWYgKG5yZWRpcmVjdGVkID4gMCkK KwkJeworCQkJcmVkaXJlY3RlZF9wYWNrX3JlcyA9IGRmb3JfdTE2X3BhY2sobnJlZGlyZWN0 ZWQgKiAyLCByZWRpcmVjdGVkLAorCQkJCQkJCQkJCQkJREZPUl9FWENfVVNFLCAmcmVkaXJl Y3RlZF9tZXRhLAorCQkJCQkJCQkJCQkJNCAqIERGT1JfQlVGX1BBUlRfU0laRSwKKwkJCQkJ CQkJCQkJCWRmb3JfYnVmX2FsaWduZWQuZGZvcl9idWYpOworCQl9CisKKwkJaWYgKG5kZWFk ID4gMCkKKwkJeworCQkJc29ydF9vZmZzZXRzKGRlYWQsIG5kZWFkLCBzaXplb2YoT2Zmc2V0 TnVtYmVyKSk7CisJCQlkZWFkX3BhY2tfcmVzID0gZGZvcl91MTZfcGFjayhuZGVhZCwgZGVh ZCwgREZPUl9FWENfVVNFLCAmZGVhZF9tZXRhLAorCQkJCQkJCQkJCSAgNCAqIERGT1JfQlVG X1BBUlRfU0laRSwKKwkJCQkJCQkJCQkgIGRmb3JfYnVmX2FsaWduZWQuZGZvcl9idWYgKwor CQkJCQkJCQkJCQkgIERGT1JfQlVGX1BBUlRfU0laRSk7CisJCX0KKworCQlpZiAobnVudXNl ZCA+IDApCisJCXsKKwkJCXNvcnRfb2Zmc2V0cyh1bnVzZWQsIG51bnVzZWQsIHNpemVvZihP ZmZzZXROdW1iZXIpKTsKKwkJCXVudXNlZF9wYWNrX3JlcyA9IGRmb3JfdTE2X3BhY2sobnVu dXNlZCwgdW51c2VkLCBERk9SX0VYQ19VU0UsCisJCQkJCQkJCQkJCSZ1bnVzZWRfbWV0YSwK KwkJCQkJCQkJCQkJNCAqIERGT1JfQlVGX1BBUlRfU0laRSwKKwkJCQkJCQkJCQkJZGZvcl9i dWZfYWxpZ25lZC5kZm9yX2J1ZiArCisJCQkJCQkJCQkJCQkyICogREZPUl9CVUZfUEFSVF9T SVpFKTsKKwkJfQorCisJCWlmIChmcm96ZW5fcGFja19yZXMgPT0gMCAmJiByZWRpcmVjdGVk X3BhY2tfcmVzID09IDAgJiYKKwkJCWRlYWRfcGFja19yZXMgPT0gMCAmJiB1bnVzZWRfcGFj a19yZXMgPT0gMCkKKwkJeworCQkJLyogQWxsIHN0YWdlcyBvZiBwYWNraW5nIGhhdmUgc3Vj Y2VlZGVkLiBXZSBjYW4gc2F2ZSBERm9SIHBhY2tldHMKKwkJCSAqIGludG8gdGhlIGxvZy4g Ki8KKwkJCXNpemVfdCBtZXRhX3BhY2tfc3o7CisKKwkJCWlmIChuZnJvemVuID4gMCkKKwkJ CXsKKwkJCQltZXRhX3BhY2tfc3ogPSBsb2dfaGVhcF9wcnVuZV9hbmRfZnJlZXplX3BhY2tf bWV0YSgKKwkJCQkJJmZyb3plbl9tZXRhLCBmcm96ZW5fbWV0YV9wYWNrKTsKKworCQkJCVhM b2dSZWdpc3RlckJ1ZkRhdGEoMCwgJmZyb3plbl9tZXRhX3BhY2ssIG1ldGFfcGFja19zeik7 CisJCQkJWExvZ1JlZ2lzdGVyQnVmRGF0YSgwLCBmcm96ZW5fbWV0YS5wYWNrLCBmcm96ZW5f bWV0YS5uYnl0ZXMpOworCQkJfQorCQkJaWYgKG5yZWRpcmVjdGVkID4gMCkKKwkJCXsKKwkJ CQl4bHJlYy5mbGFncyB8PSBYTEhQX0hBU19SRURJUkVDVElPTlM7CisKKwkJCQltZXRhX3Bh Y2tfc3ogPSBsb2dfaGVhcF9wcnVuZV9hbmRfZnJlZXplX3BhY2tfbWV0YSgKKwkJCQkJJnJl ZGlyZWN0ZWRfbWV0YSwgcmVkaXJlY3RlZF9tZXRhX3BhY2spOworCisJCQkJWExvZ1JlZ2lz dGVyQnVmRGF0YSgwLCAmcmVkaXJlY3RlZF9tZXRhX3BhY2ssIG1ldGFfcGFja19zeik7CisJ CQkJWExvZ1JlZ2lzdGVyQnVmRGF0YSgwLCByZWRpcmVjdGVkX21ldGEucGFjaywKKwkJCQkJ CQkJCXJlZGlyZWN0ZWRfbWV0YS5uYnl0ZXMpOworCQkJfQorCQkJaWYgKG5kZWFkID4gMCkK KwkJCXsKKwkJCQl4bHJlYy5mbGFncyB8PSBYTEhQX0hBU19ERUFEX0lURU1TOworCisJCQkJ bWV0YV9wYWNrX3N6ID0gbG9nX2hlYXBfcHJ1bmVfYW5kX2ZyZWV6ZV9wYWNrX21ldGEoCisJ CQkJCSZkZWFkX21ldGEsIGRlYWRfbWV0YV9wYWNrKTsKKworCQkJCVhMb2dSZWdpc3RlckJ1 ZkRhdGEoMCwgJmRlYWRfbWV0YV9wYWNrLCBtZXRhX3BhY2tfc3opOworCQkJCVhMb2dSZWdp c3RlckJ1ZkRhdGEoMCwgZGVhZF9tZXRhLnBhY2ssIGRlYWRfbWV0YS5uYnl0ZXMpOworCQkJ fQorCQkJaWYgKG51bnVzZWQgPiAwKQorCQkJeworCQkJCXhscmVjLmZsYWdzIHw9IFhMSFBf SEFTX05PV19VTlVTRURfSVRFTVM7CiAKLQkJZGVhZF9pdGVtcy5udGFyZ2V0cyA9IG5kZWFk OwotCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDAsICZkZWFkX2l0ZW1zLAotCQkJCQkJCW9mZnNl dG9mKHhsaHBfcHJ1bmVfaXRlbXMsIGRhdGEpKTsKLQkJWExvZ1JlZ2lzdGVyQnVmRGF0YSgw LCBkZWFkLAotCQkJCQkJCXNpemVvZihPZmZzZXROdW1iZXIpICogbmRlYWQpOworCQkJCW1l dGFfcGFja19zeiA9IGxvZ19oZWFwX3BydW5lX2FuZF9mcmVlemVfcGFja19tZXRhKAorCQkJ CQkmdW51c2VkX21ldGEsIHVudXNlZF9tZXRhX3BhY2spOworCisJCQkJWExvZ1JlZ2lzdGVy QnVmRGF0YSgwLCAmdW51c2VkX21ldGFfcGFjaywgbWV0YV9wYWNrX3N6KTsKKwkJCQlYTG9n UmVnaXN0ZXJCdWZEYXRhKDAsIHVudXNlZF9tZXRhLnBhY2ssIHVudXNlZF9tZXRhLm5ieXRl cyk7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBPdGhlcndpc2UsIHdlIGNhbid0 IHVzZSBERm9SIGNvbXByZXNzaW9uICovCisJCQl4bHJlYy5mbGFncyAmPSB+WExIUF9ERk9S X0NPTVBSRVNTRUQ7CisJCX0KIAl9Ci0JaWYgKG51bnVzZWQgPiAwKQorCisJaWYgKCh4bHJl Yy5mbGFncyAmIFhMSFBfREZPUl9DT01QUkVTU0VEKSA9PSAwKQogCXsKLQkJeGxyZWMuZmxh Z3MgfD0gWExIUF9IQVNfTk9XX1VOVVNFRF9JVEVNUzsKKwkJaWYgKG5mcm96ZW4gPiAwKQor CQkJWExvZ1JlZ2lzdGVyQnVmRGF0YSgwLCBmcnpfb2Zmc2V0cywKKwkJCQkJCQkJc2l6ZW9m KE9mZnNldE51bWJlcikgKiBuZnJvemVuKTsKKwkJaWYgKG5yZWRpcmVjdGVkID4gMCkKKwkJ eworCQkJeGxyZWMuZmxhZ3MgfD0gWExIUF9IQVNfUkVESVJFQ1RJT05TOwogCi0JCXVudXNl ZF9pdGVtcy5udGFyZ2V0cyA9IG51bnVzZWQ7Ci0JCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMCwg JnVudXNlZF9pdGVtcywKLQkJCQkJCQlvZmZzZXRvZih4bGhwX3BydW5lX2l0ZW1zLCBkYXRh KSk7Ci0JCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMCwgdW51c2VkLAotCQkJCQkJCXNpemVvZihP ZmZzZXROdW1iZXIpICogbnVudXNlZCk7CisJCQlyZWRpcmVjdF9pdGVtcy5udGFyZ2V0cyA9 IG5yZWRpcmVjdGVkOworCQkJWExvZ1JlZ2lzdGVyQnVmRGF0YSgwLCAmcmVkaXJlY3RfaXRl bXMsCisJCQkJCQkJCW9mZnNldG9mKHhsaHBfcHJ1bmVfaXRlbXMsIGRhdGEpKTsKKwkJCVhM b2dSZWdpc3RlckJ1ZkRhdGEoMCwgcmVkaXJlY3RlZCwKKwkJCQkJCQkJc2l6ZW9mKE9mZnNl dE51bWJlclsyXSkgKiBucmVkaXJlY3RlZCk7CisJCX0KKwkJaWYgKG5kZWFkID4gMCkKKwkJ eworCQkJeGxyZWMuZmxhZ3MgfD0gWExIUF9IQVNfREVBRF9JVEVNUzsKKworCQkJZGVhZF9p dGVtcy5udGFyZ2V0cyA9IG5kZWFkOworCQkJWExvZ1JlZ2lzdGVyQnVmRGF0YSgwLCAmZGVh ZF9pdGVtcywKKwkJCQkJCQkJb2Zmc2V0b2YoeGxocF9wcnVuZV9pdGVtcywgZGF0YSkpOwor CQkJWExvZ1JlZ2lzdGVyQnVmRGF0YSgwLCBkZWFkLCBzaXplb2YoT2Zmc2V0TnVtYmVyKSAq IG5kZWFkKTsKKwkJfQorCQlpZiAobnVudXNlZCA+IDApCisJCXsKKwkJCXhscmVjLmZsYWdz IHw9IFhMSFBfSEFTX05PV19VTlVTRURfSVRFTVM7CisKKwkJCXVudXNlZF9pdGVtcy5udGFy Z2V0cyA9IG51bnVzZWQ7CisJCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDAsICZ1bnVzZWRfaXRl bXMsCisJCQkJCQkJCW9mZnNldG9mKHhsaHBfcHJ1bmVfaXRlbXMsIGRhdGEpKTsKKwkJCVhM b2dSZWdpc3RlckJ1ZkRhdGEoMCwgdW51c2VkLCBzaXplb2YoT2Zmc2V0TnVtYmVyKSAqIG51 bnVzZWQpOworCQl9CiAJfQotCWlmIChuZnJvemVuID4gMCkKLQkJWExvZ1JlZ2lzdGVyQnVm RGF0YSgwLCBmcnpfb2Zmc2V0cywKLQkJCQkJCQlzaXplb2YoT2Zmc2V0TnVtYmVyKSAqIG5m cm96ZW4pOwogCiAJLyoKIAkgKiBQcmVwYXJlIHRoZSBtYWluIHhsX2hlYXBfcHJ1bmUgcmVj b3JkLiAgV2UgYWxyZWFkeSBzZXQgdGhlIFhMSFBfSEFTXyoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9y bWdyZGVzYy9NYWtlZmlsZQppbmRleCBjZDk1ZWVjMzdmMS4uNDllOWM0NjE0NWYgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZQorKysgYi9zcmMv YmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUKQEAgLTE3LDYgKzE3LDcgQEAgT0JK UyA9IFwKIAlnaW5kZXNjLm8gXAogCWdpc3RkZXNjLm8gXAogCWhhc2hkZXNjLm8gXAorCWhl YXBhbV94bG9nX2Rmb3IubyBcCiAJaGVhcGRlc2MubyBcCiAJbG9naWNhbG1zZ2Rlc2MubyBc CiAJbXhhY3RkZXNjLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3Jk ZXNjL2hlYXBhbV94bG9nX2Rmb3IuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9o ZWFwYW1feGxvZ19kZm9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLmJjMzhlNGEyNTU1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3JtZ3JkZXNjL2hlYXBhbV94bG9nX2Rmb3IuYwpAQCAtMCwwICsxLDExNCBAQAorI2luY2x1 ZGUgImxpYi9iaXRwYWNrX3UxNi5oIgorI2luY2x1ZGUgImFjY2Vzcy9oZWFwYW1feGxvZ19k Zm9yLmgiCisKK2Jvb2wgd2FsX3BydW5lX2Rmb3JfY29tcHJlc3Npb24gPSB0cnVlOworCitz aXplX3QKK2xvZ19oZWFwX3BydW5lX2FuZF9mcmVlemVfcGFja19tZXRhKGNvbnN0IGRmb3Jf bWV0YV90ICptZXRhLCB1aW50OCBidWZbXSkKK3sKKwlzaXplX3QgY2FyZXQgPSAwOworCWNh cmV0ID0gYml0cGFja191MTZfcGFjayhidWYsIGNhcmV0LCBtZXRhLT5pdGVtX2NudCwKKwkJ CQkJCQkgWExIUEZfTUVUQV9JVEVNX0NPVU5UX1NaKTsKKwljYXJldCA9IGJpdHBhY2tfdTE2 X3BhY2soYnVmLCBjYXJldCwgbWV0YS0+ZGVsdGFfd2lkLAorCQkJCQkJCSBYTEhQRl9NRVRB X0RFTFRBX1dJRFRIX1NaKTsKKwljYXJldCA9IGJpdHBhY2tfdTE2X3BhY2soYnVmLCBjYXJl dCwgKG1ldGEtPnNpZ25lZF9kZWx0YXMgPT0gMCkgPyAwIDogMSwKKwkJCQkJCQkgWExIUEZf TUVUQV9TSUdORURERUxUQVNfRkxBR19TWik7CisJY2FyZXQgPSBiaXRwYWNrX3UxNl9wYWNr KGJ1ZiwgY2FyZXQsIChtZXRhLT5leGNfY250ID09IDApID8gMCA6IDEsCisJCQkJCQkJIFhM SFBGX01FVEFfRVhDRVBUSU9OX0ZMQUdfU1opOworCWlmIChtZXRhLT5leGNfY250ICE9IDAp CisJeworCQljYXJldCA9IGJpdHBhY2tfdTE2X3BhY2soYnVmLCBjYXJldCwgbWV0YS0+ZXhj X2NudCwKKwkJCQkJCQkJIFhMSFBGX01FVEFfRVhDRVBUSU9OX0NPVU5UX1NaKTsKKwkJY2Fy ZXQgPSBiaXRwYWNrX3UxNl9wYWNrKGJ1ZiwgY2FyZXQsIG1ldGEtPmV4Y193aWQsCisJCQkJ CQkJCSBYTEhQRl9NRVRBX0VYQ0VQVElPTl9XSURUSF9TWik7CisJCWNhcmV0ID0gYml0cGFj a191MTZfcGFjayhidWYsIGNhcmV0LCBtZXRhLT5leGNfcG9zX3dpZCwKKwkJCQkJCQkJIFhM SFBGX01FVEFfRVhDRVBUSU9OX1BPU0lUSU9OX1dJRFRIX1NaKTsKKwl9CisJQXNzZXJ0KG1l dGEtPml0ZW1fY250ICE9IDApOworCUFzc2VydChtZXRhLT5kZWx0YV93aWQgIT0gMCk7CisJ QXNzZXJ0KG1ldGEtPm5ieXRlcyAhPSAwKTsKKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJ TkcKKwl7CisJCWRmb3JfbWV0YV90IGNoZWNrZXI7CisJCWxvZ19oZWFwX3BydW5lX2FuZF9m cmVlemVfdW5wYWNrX21ldGEoJmNoZWNrZXIsIGJ1Zik7CisJCUFzc2VydChtZXRhLT5pdGVt X2NudCA9PSBjaGVja2VyLml0ZW1fY250KTsKKwkJQXNzZXJ0KG1ldGEtPmRlbHRhX3dpZCA9 PSBjaGVja2VyLmRlbHRhX3dpZCk7CisJCUFzc2VydChtZXRhLT5zaWduZWRfZGVsdGFzID09 IGNoZWNrZXIuc2lnbmVkX2RlbHRhcyk7CisJCUFzc2VydChtZXRhLT5leGNfY250ID09IGNo ZWNrZXIuZXhjX2NudCk7CisJCUFzc2VydChtZXRhLT5leGNfd2lkID09IGNoZWNrZXIuZXhj X3dpZCk7CisJCUFzc2VydChtZXRhLT5leGNfcG9zX3dpZCA9PSBjaGVja2VyLmV4Y19wb3Nf d2lkKTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gKGNhcmV0ICsgNykgLyA4OyAvKiB0aGUgbGVu Z3RoIG9mIHBhY2tlZCBkZm9yX21ldGEsIGluIGJ5dGVzKi8KK30KKworc2l6ZV90Citsb2df aGVhcF9wcnVuZV9hbmRfZnJlZXplX3VucGFja19tZXRhKGRmb3JfbWV0YV90ICptZXRhLAor CQkJCQkJCQkJICBjb25zdCB1aW50OCBwYWNrZWRfbWV0YVtdKQoreworCXNpemVfdCBjYXJl dCA9IDA7CisJYm9vbCBleGM7CisKKwltZXRhLT5pdGVtX2NudCA9IGJpdHBhY2tfdTE2X3Vu cGFjayhwYWNrZWRfbWV0YSwgJmNhcmV0LAorCQkJCQkJCQkJCVhMSFBGX01FVEFfSVRFTV9D T1VOVF9TWik7CisJbWV0YS0+ZGVsdGFfd2lkID0gYml0cGFja191MTZfdW5wYWNrKHBhY2tl ZF9tZXRhLCAmY2FyZXQsCisJCQkJCQkJCQkJIFhMSFBGX01FVEFfREVMVEFfV0lEVEhfU1op OworCW1ldGEtPnNpZ25lZF9kZWx0YXMgPSBiaXRwYWNrX3UxNl91bnBhY2socGFja2VkX21l dGEsICZjYXJldCwKKwkJCQkJCQkJCQkJIFhMSFBGX01FVEFfU0lHTkVEREVMVEFTX0ZMQUdf U1opOworCWV4YyA9IGJpdHBhY2tfdTE2X3VucGFjayhwYWNrZWRfbWV0YSwgJmNhcmV0LCBY TEhQRl9NRVRBX0VYQ0VQVElPTl9GTEFHX1NaKTsKKworCWlmIChleGMpCisJeworCQltZXRh LT5leGNfY250ID0gYml0cGFja191MTZfdW5wYWNrKHBhY2tlZF9tZXRhLCAmY2FyZXQsCisJ CQkJCQkJCQkJIFhMSFBGX01FVEFfRVhDRVBUSU9OX0NPVU5UX1NaKTsKKwkJbWV0YS0+ZXhj X3dpZCA9IGJpdHBhY2tfdTE2X3VucGFjayhwYWNrZWRfbWV0YSwgJmNhcmV0LAorCQkJCQkJ CQkJCSBYTEhQRl9NRVRBX0VYQ0VQVElPTl9XSURUSF9TWik7CisJCW1ldGEtPmV4Y19wb3Nf d2lkID0KKwkJCWJpdHBhY2tfdTE2X3VucGFjayhwYWNrZWRfbWV0YSwgJmNhcmV0LAorCQkJ CQkJCSAgIFhMSFBGX01FVEFfRVhDRVBUSU9OX1BPU0lUSU9OX1dJRFRIX1NaKTsKKwl9CisJ ZWxzZQorCXsKKwkJbWV0YS0+ZXhjX2NudCA9IDA7CisJCW1ldGEtPmV4Y193aWQgPSAwOwor CQltZXRhLT5leGNfcG9zX3dpZCA9IDA7CisJfQorCW1ldGEtPm5ieXRlcyA9IGRmb3JfdTE2 X2NhbGNfbmJ5dGVzKCptZXRhKTsKKworCUFzc2VydChtZXRhLT5pdGVtX2NudCAhPSAwKTsK KwlBc3NlcnQobWV0YS0+ZGVsdGFfd2lkICE9IDApOworCUFzc2VydChtZXRhLT5uYnl0ZXMg IT0gMCk7CisKKwlyZXR1cm4gKGNhcmV0ICsgNykgLyA4OworfQorCit2b2lkCitoZWFwX3hs b2dfZGVzZXJpYWxpemVfZGZvcihjaGFyICoqY3Vyc29yLCBpbnQgKm5pdGVtcywKKwkJCQkJ CSAgIE9mZnNldE51bWJlciAqKml0ZW1zLAorCQkJCQkJICAgdWludDggZGZvcl9idWZbXSkK K3sKKwlkZm9yX21ldGFfdCBkZm9yID0gezB9OworCXNpemVfdCBwYWNrZWRfbWV0YV9uYnl0 ZXM7CisJdW5pcXNvcnR2ZWN0X3UxNl90IHZlY3Q7CisKKwlwYWNrZWRfbWV0YV9uYnl0ZXMg PQorCQlsb2dfaGVhcF9wcnVuZV9hbmRfZnJlZXplX3VucGFja19tZXRhKCZkZm9yLCAodWlu dDgqKSAqY3Vyc29yKTsKKworCSpjdXJzb3IgKz0gcGFja2VkX21ldGFfbmJ5dGVzOworCisJ ZGZvci5wYWNrID0gKHVpbnQ4ICopKmN1cnNvcjsKKwlkZm9yX3UxNl91bnBhY2soJmRmb3Is ICZ2ZWN0LCA0ICogREZPUl9CVUZfUEFSVF9TSVpFLAorCQkJCQlkZm9yX2J1Zik7CisKKwkq Y3Vyc29yICs9IGRmb3IubmJ5dGVzOworCisJQXNzZXJ0KGRmb3IubmJ5dGVzICE9IDApOwor CisJQXNzZXJ0KHZlY3QuY250ICE9IDApOworCUFzc2VydCh2ZWN0Lm1lbV9pc19vdXRlciA9 PSB0cnVlKTsKKwlBc3NlcnQoKHZvaWQqKXZlY3QubSA9PSAodm9pZCopZGZvcl9idWYpOwor CisJKm5pdGVtcyA9IHZlY3QuY250OworCSppdGVtcyA9IHZlY3QubTsKK30KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9oZWFwZGVzYy5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3JtZ3JkZXNjL2hlYXBkZXNjLmMKaW5kZXggNzVhZTZmOWQzNzUuLmE0NDVi MjFlZDM2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvaGVhcGRl c2MuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvaGVhcGRlc2MuYwpAQCAt MTUsNiArMTUsNyBAQAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKICNpbmNsdWRlICJhY2Nl c3MvaGVhcGFtX3hsb2cuaCIKKyNpbmNsdWRlICJhY2Nlc3MvaGVhcGFtX3hsb2dfZGZvci5o IgogI2luY2x1ZGUgImFjY2Vzcy9ybWdyZGVzY191dGlscy5oIgogI2luY2x1ZGUgImFjY2Vz cy92aXNpYmlsaXR5bWFwZGVmcy5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3RhbmRieWRlZnMu aCIKQEAgLTEwMiwxNyArMTAzLDE5IEBAIHBsYW5fZWxlbV9kZXNjKFN0cmluZ0luZm8gYnVm LCB2b2lkICpwbGFuLCB2b2lkICpkYXRhKQogICogVGhpcyBpcyBpbiBoZWFwZGVzYy5jIHNv IGl0IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBoZWFwMl9yZWRvIGFuZCBoZWFwMl9kZXNjCiAg KiBjb2RlLCB0aGUgbGF0dGVyIG9mIHdoaWNoIGlzIHVzZWQgaW4gZnJvbnRlbmQgKHBnX3dh bGR1bXApIGNvZGUuCiAgKi8KLXZvaWQKK2NoYXIgKgogaGVhcF94bG9nX2Rlc2VyaWFsaXpl X3BydW5lX2FuZF9mcmVlemUoY2hhciAqY3Vyc29yLCB1aW50MTYgZmxhZ3MsCiAJCQkJCQkJ CQkgICBpbnQgKm5wbGFucywgeGxocF9mcmVlemVfcGxhbiAqKnBsYW5zLAogCQkJCQkJCQkJ ICAgT2Zmc2V0TnVtYmVyICoqZnJ6X29mZnNldHMsCiAJCQkJCQkJCQkgICBpbnQgKm5yZWRp cmVjdGVkLCBPZmZzZXROdW1iZXIgKipyZWRpcmVjdGVkLAogCQkJCQkJCQkJICAgaW50ICpu ZGVhZCwgT2Zmc2V0TnVtYmVyICoqbm93ZGVhZCwKLQkJCQkJCQkJCSAgIGludCAqbnVudXNl ZCwgT2Zmc2V0TnVtYmVyICoqbm93dW51c2VkKQorCQkJCQkJCQkJICAgaW50ICpudW51c2Vk LCBPZmZzZXROdW1iZXIgKipub3d1bnVzZWQsCisJCQkJCQkJCQkgICB1aW50OCBkZm9yX2J1 ZltdKQogewogCWlmIChmbGFncyAmIFhMSFBfSEFTX0ZSRUVaRV9QTEFOUykKIAl7Ci0JCXhs aHBfZnJlZXplX3BsYW5zICpmcmVlemVfcGxhbnMgPSAoeGxocF9mcmVlemVfcGxhbnMgKikg Y3Vyc29yOworCQlpbnQgbmZyb3plbiA9IDA7CisJCXhsaHBfZnJlZXplX3BsYW5zICpmcmVl emVfcGxhbnMgPSAoeGxocF9mcmVlemVfcGxhbnMgKiljdXJzb3I7CiAKIAkJKm5wbGFucyA9 IGZyZWV6ZV9wbGFucy0+bnBsYW5zOwogCQlBc3NlcnQoKm5wbGFucyA+IDApOwpAQCAtMTIw LDYgKzEyMywyMCBAQCBoZWFwX3hsb2dfZGVzZXJpYWxpemVfcHJ1bmVfYW5kX2ZyZWV6ZShj aGFyICpjdXJzb3IsIHVpbnQxNiBmbGFncywKIAogCQljdXJzb3IgKz0gb2Zmc2V0b2YoeGxo cF9mcmVlemVfcGxhbnMsIHBsYW5zKTsKIAkJY3Vyc29yICs9IHNpemVvZih4bGhwX2ZyZWV6 ZV9wbGFuKSAqICpucGxhbnM7CisKKwkJaWYoZmxhZ3MgJiBYTEhQX0RGT1JfQ09NUFJFU1NF RCkKKwkJeworCQkJaGVhcF94bG9nX2Rlc2VyaWFsaXplX2Rmb3IoJmN1cnNvciwgJm5mcm96 ZW4sIGZyel9vZmZzZXRzLAorCQkJCQkJCQkJICAgZGZvcl9idWYpOworCQl9CisJCWVsc2UK KwkJeworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCAqbnBsYW5zOyBpKyspCisJCQkJbmZyb3pl biArPSAoKnBsYW5zKVtpXS5udHVwbGVzOworCisJCQkqZnJ6X29mZnNldHMgPSAoT2Zmc2V0 TnVtYmVyICopIGN1cnNvcjsKKwkJCWN1cnNvciArPSBzaXplb2YoT2Zmc2V0TnVtYmVyKSAq IG5mcm96ZW47CisJCX0KIAl9CiAJZWxzZQogCXsKQEAgLTEyOSwxNCArMTQ2LDI1IEBAIGhl YXBfeGxvZ19kZXNlcmlhbGl6ZV9wcnVuZV9hbmRfZnJlZXplKGNoYXIgKmN1cnNvciwgdWlu dDE2IGZsYWdzLAogCiAJaWYgKGZsYWdzICYgWExIUF9IQVNfUkVESVJFQ1RJT05TKQogCXsK LQkJeGxocF9wcnVuZV9pdGVtcyAqc3VicmVjb3JkID0gKHhsaHBfcHJ1bmVfaXRlbXMgKikg Y3Vyc29yOworCQlpZihmbGFncyAmIFhMSFBfREZPUl9DT01QUkVTU0VEKQorCQl7CisJCQlo ZWFwX3hsb2dfZGVzZXJpYWxpemVfZGZvcigmY3Vyc29yLCBucmVkaXJlY3RlZCwgcmVkaXJl Y3RlZCwKKwkJCQkJCQkJCSAgIGRmb3JfYnVmICsgREZPUl9CVUZfUEFSVF9TSVpFKTsKKwkJ CUFzc2VydCgqbnJlZGlyZWN0ZWQgJSAyID09IDApOworCQkJKm5yZWRpcmVjdGVkIC89IDI7 CisJCX0KKwkJZWxzZQorCQl7CisJCQl4bGhwX3BydW5lX2l0ZW1zICpzdWJyZWNvcmQgPSAo eGxocF9wcnVuZV9pdGVtcyAqKSBjdXJzb3I7CisKKwkJCSpucmVkaXJlY3RlZCA9IHN1YnJl Y29yZC0+bnRhcmdldHM7CisJCQlBc3NlcnQoKm5yZWRpcmVjdGVkID4gMCk7CisJCQkqcmVk aXJlY3RlZCA9ICZzdWJyZWNvcmQtPmRhdGFbMF07CiAKLQkJKm5yZWRpcmVjdGVkID0gc3Vi cmVjb3JkLT5udGFyZ2V0czsKLQkJQXNzZXJ0KCpucmVkaXJlY3RlZCA+IDApOwotCQkqcmVk aXJlY3RlZCA9ICZzdWJyZWNvcmQtPmRhdGFbMF07CisJCQljdXJzb3IgKz0gb2Zmc2V0b2Yo eGxocF9wcnVuZV9pdGVtcywgZGF0YSk7CisJCQljdXJzb3IgKz0gc2l6ZW9mKE9mZnNldE51 bWJlclsyXSkgKiAqbnJlZGlyZWN0ZWQ7CiAKLQkJY3Vyc29yICs9IG9mZnNldG9mKHhsaHBf cHJ1bmVfaXRlbXMsIGRhdGEpOwotCQljdXJzb3IgKz0gc2l6ZW9mKE9mZnNldE51bWJlclsy XSkgKiAqbnJlZGlyZWN0ZWQ7CisJCX0KIAl9CiAJZWxzZQogCXsKQEAgLTE0NiwxNCArMTc0 LDIyIEBAIGhlYXBfeGxvZ19kZXNlcmlhbGl6ZV9wcnVuZV9hbmRfZnJlZXplKGNoYXIgKmN1 cnNvciwgdWludDE2IGZsYWdzLAogCiAJaWYgKGZsYWdzICYgWExIUF9IQVNfREVBRF9JVEVN UykKIAl7Ci0JCXhsaHBfcHJ1bmVfaXRlbXMgKnN1YnJlY29yZCA9ICh4bGhwX3BydW5lX2l0 ZW1zICopIGN1cnNvcjsKKwkJaWYoZmxhZ3MgJiBYTEhQX0RGT1JfQ09NUFJFU1NFRCkKKwkJ eworCQkJaGVhcF94bG9nX2Rlc2VyaWFsaXplX2Rmb3IoJmN1cnNvciwgbmRlYWQsIG5vd2Rl YWQsCisJCQkJCQkJCQkgICBkZm9yX2J1ZiArIDIgKiBERk9SX0JVRl9QQVJUX1NJWkUpOwor CQl9CisJCWVsc2UKKwkJeworCQkJeGxocF9wcnVuZV9pdGVtcyAqc3VicmVjb3JkID0gKHhs aHBfcHJ1bmVfaXRlbXMgKikgY3Vyc29yOwogCi0JCSpuZGVhZCA9IHN1YnJlY29yZC0+bnRh cmdldHM7Ci0JCUFzc2VydCgqbmRlYWQgPiAwKTsKLQkJKm5vd2RlYWQgPSBzdWJyZWNvcmQt PmRhdGE7CisJCQkqbmRlYWQgPSBzdWJyZWNvcmQtPm50YXJnZXRzOworCQkJQXNzZXJ0KCpu ZGVhZCA+IDApOworCQkJKm5vd2RlYWQgPSBzdWJyZWNvcmQtPmRhdGE7CiAKLQkJY3Vyc29y ICs9IG9mZnNldG9mKHhsaHBfcHJ1bmVfaXRlbXMsIGRhdGEpOwotCQljdXJzb3IgKz0gc2l6 ZW9mKE9mZnNldE51bWJlcikgKiAqbmRlYWQ7CisJCQljdXJzb3IgKz0gb2Zmc2V0b2YoeGxo cF9wcnVuZV9pdGVtcywgZGF0YSk7CisJCQljdXJzb3IgKz0gc2l6ZW9mKE9mZnNldE51bWJl cikgKiAqbmRlYWQ7CisJCX0KIAl9CiAJZWxzZQogCXsKQEAgLTE2MywyMiArMTk5LDI5IEBA IGhlYXBfeGxvZ19kZXNlcmlhbGl6ZV9wcnVuZV9hbmRfZnJlZXplKGNoYXIgKmN1cnNvciwg dWludDE2IGZsYWdzLAogCiAJaWYgKGZsYWdzICYgWExIUF9IQVNfTk9XX1VOVVNFRF9JVEVN UykKIAl7Ci0JCXhsaHBfcHJ1bmVfaXRlbXMgKnN1YnJlY29yZCA9ICh4bGhwX3BydW5lX2l0 ZW1zICopIGN1cnNvcjsKKwkJaWYgKGZsYWdzICYgWExIUF9ERk9SX0NPTVBSRVNTRUQpCisJ CXsKKwkJCWhlYXBfeGxvZ19kZXNlcmlhbGl6ZV9kZm9yKCZjdXJzb3IsIG51bnVzZWQsIG5v d3VudXNlZCwKKwkJCQkJCQkJCSAgIGRmb3JfYnVmICsgMyAqIERGT1JfQlVGX1BBUlRfU0la RSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQl4bGhwX3BydW5lX2l0ZW1zICpzdWJyZWNvcmQg PSAoeGxocF9wcnVuZV9pdGVtcyAqKSBjdXJzb3I7CiAKLQkJKm51bnVzZWQgPSBzdWJyZWNv cmQtPm50YXJnZXRzOwotCQlBc3NlcnQoKm51bnVzZWQgPiAwKTsKLQkJKm5vd3VudXNlZCA9 IHN1YnJlY29yZC0+ZGF0YTsKKwkJCSpudW51c2VkID0gc3VicmVjb3JkLT5udGFyZ2V0czsK KwkJCUFzc2VydCgqbnVudXNlZCA+IDApOworCQkJKm5vd3VudXNlZCA9IHN1YnJlY29yZC0+ ZGF0YTsKIAotCQljdXJzb3IgKz0gb2Zmc2V0b2YoeGxocF9wcnVuZV9pdGVtcywgZGF0YSk7 Ci0JCWN1cnNvciArPSBzaXplb2YoT2Zmc2V0TnVtYmVyKSAqICpudW51c2VkOworCQkJY3Vy c29yICs9IG9mZnNldG9mKHhsaHBfcHJ1bmVfaXRlbXMsIGRhdGEpOworCQkJY3Vyc29yICs9 IHNpemVvZihPZmZzZXROdW1iZXIpICogKm51bnVzZWQ7CisJCX0KIAl9CiAJZWxzZQogCXsK IAkJKm51bnVzZWQgPSAwOwogCQkqbm93dW51c2VkID0gTlVMTDsKIAl9Ci0KLQkqZnJ6X29m ZnNldHMgPSAoT2Zmc2V0TnVtYmVyICopIGN1cnNvcjsKKwlyZXR1cm4gY3Vyc29yOwogfQog CiB2b2lkCkBAIC0zMDksMTMgKzM1MiwxNiBAQCBoZWFwMl9kZXNjKFN0cmluZ0luZm8gYnVm LCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAkJCXhsaHBfZnJlZXplX3BsYW4gKnBsYW5z OwogCQkJT2Zmc2V0TnVtYmVyICpmcnpfb2Zmc2V0czsKIAorCQkJdWludDggZGZvcl9idWZb NSAqIERGT1JfQlVGX1BBUlRfU0laRV07CisKIAkJCWNoYXIJICAgKmN1cnNvciA9IFhMb2dS ZWNHZXRCbG9ja0RhdGEocmVjb3JkLCAwLCAmZGF0YWxlbik7CiAKIAkJCWhlYXBfeGxvZ19k ZXNlcmlhbGl6ZV9wcnVuZV9hbmRfZnJlZXplKGN1cnNvciwgeGxyZWMtPmZsYWdzLAogCQkJ CQkJCQkJCQkJICAgJm5wbGFucywgJnBsYW5zLCAmZnJ6X29mZnNldHMsCiAJCQkJCQkJCQkJ CQkgICAmbnJlZGlyZWN0ZWQsICZyZWRpcmVjdGVkLAogCQkJCQkJCQkJCQkJICAgJm5kZWFk LCAmbm93ZGVhZCwKLQkJCQkJCQkJCQkJCSAgICZudW51c2VkLCAmbm93dW51c2VkKTsKKwkJ CQkJCQkJCQkJCSAgICZudW51c2VkLCAmbm93dW51c2VkLAorCQkJCQkJCQkJCQkJICAgZGZv cl9idWYpOwogCiAJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiwgbnBsYW5zOiAldSwgbnJl ZGlyZWN0ZWQ6ICV1LCBuZGVhZDogJXUsIG51bnVzZWQ6ICV1IiwKIAkJCQkJCQkgbnBsYW5z LCBucmVkaXJlY3RlZCwgbmRlYWQsIG51bnVzZWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL3JtZ3JkZXNjL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Jt Z3JkZXNjL21lc29uLmJ1aWxkCmluZGV4IGQ5MDAwY2NkOWZkLi42Y2VlYTQ1MTRlYyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL21lc29uLmJ1aWxkCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9tZXNvbi5idWlsZApAQCAtMTEsNiArMTEs NyBAQCBybWdyX2Rlc2Nfc291cmNlcyA9IGZpbGVzKAogICAnZ2lzdGRlc2MuYycsCiAgICdo YXNoZGVzYy5jJywKICAgJ2hlYXBkZXNjLmMnLAorICAnaGVhcGFtX3hsb2dfZGZvci5jJywK ICAgJ2xvZ2ljYWxtc2dkZXNjLmMnLAogICAnbXhhY3RkZXNjLmMnLAogICAnbmJ0ZGVzYy5j JywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMu ZGF0IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKaW5kZXgg ODNhZjU5NGQ0YWYuLmM1M2UyOTIxYzAxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNj L2d1Y19wYXJhbWV0ZXJzLmRhdApAQCAtMzUwNyw2ICszNTA3LDEzIEBACiAgIGJvb3RfdmFs ID0+ICdmYWxzZScsCiB9LAogCit7IG5hbWUgPT4gJ3dhbF9wcnVuZV9kZm9yX2NvbXByZXNz aW9uJywgdHlwZSA9PiAnYm9vbCcsIGNvbnRleHQgPT4gJ1BHQ19TVVNFVCcsIGdyb3VwID0+ ICdXQUxfU0VUVElOR1MnLAorICBzaG9ydF9kZXNjID0+ICdDb21wcmVzcyBkZWFkIGFuZCB1 bnVzZWQgb2Zmc2V0IGFycmF5cyBhdCBQUlVORS9GUkVFWkUgV0FMIHJlY29yZHMgdXNpbmcg REZPUi4nLAorICBsb25nX2Rlc2MgPT4gJ0VuYWJsZXMgY29tcHJlc3Npb24gb2YgZGVhZCBh bmQgdW51c2VkIE9mZnNldE51bWJlciBhcnJheXMgc3RvcmVkIGluIGhlYXAgUFJVTkUvRlJF RVpFIFdBTCByZWNvcmRzIHVzaW5nIGN1c3RvbWlzZWQgZGVsdGEgZnJhbWUtb2YtcmVmZXJl bmNlIGVuY29kaW5nLicsCisgIHZhcmlhYmxlID0+ICd3YWxfcHJ1bmVfZGZvcl9jb21wcmVz c2lvbicsCisgIGJvb3RfdmFsID0+ICd0cnVlJworfSwKKwogeyBuYW1lID0+ICd3YWxfcmVj ZWl2ZXJfY3JlYXRlX3RlbXBfc2xvdCcsIHR5cGUgPT4gJ2Jvb2wnLCBjb250ZXh0ID0+ICdQ R0NfU0lHSFVQJywgZ3JvdXAgPT4gJ1JFUExJQ0FUSU9OX1NUQU5EQlknLAogICBzaG9ydF9k ZXNjID0+ICdTZXRzIHdoZXRoZXIgYSBXQUwgcmVjZWl2ZXIgc2hvdWxkIGNyZWF0ZSBhIHRl bXBvcmFyeSByZXBsaWNhdGlvbiBzbG90IGlmIG5vIHBlcm1hbmVudCBzbG90IGlzIGNvbmZp Z3VyZWQuJywKICAgdmFyaWFibGUgPT4gJ3dhbF9yZWNlaXZlcl9jcmVhdGVfdGVtcF9zbG90 JywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jIGIv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKaW5kZXggMjkwY2NiYzU0M2Uu LmJlZTYwYjJlYmNkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190 YWJsZXMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwpAQCAt MzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL2NvbW1pdF90cy5oIgogI2luY2x1 ZGUgImFjY2Vzcy9naW4uaCIKKyNpbmNsdWRlICJhY2Nlc3MvaGVhcGFtX3hsb2dfZGZvci5o IgogI2luY2x1ZGUgImFjY2Vzcy9zbHJ1LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RvYXN0X2Nv bXByZXNzaW9uLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3R3b3BoYXNlLmgiCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgYi9zcmMv YmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKaW5kZXggYWMzOGNk ZGFhZjkuLjQxNTJlNzg5ZWUxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNj L3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9w b3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC0yNjMsNiArMjYzLDggQEAKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChjaGFuZ2UgcmVxdWlyZXMgcmVzdGFy dCkKICN3YWxfY29tcHJlc3Npb24gPSBvZmYgICAgICAgICAgICAgICAgICAjIGVuYWJsZXMg Y29tcHJlc3Npb24gb2YgZnVsbC1wYWdlIHdyaXRlczsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjIG9mZiwgcGdseiwgbHo0LCB6c3RkLCBvciBvbgorI3dh bF9wcnVuZV9kZm9yX2NvbXByZXNzaW9uID0gdHJ1ZSAgICAgICMgQ29tcHJlc3MgZGVhZCBh bmQgdW51c2VkIG9mZnNldCBhcnJheXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAjIGF0IFBSVU5FL0ZSRUVaRSBXQUwgcmVjb3JkcyB1c2luZyBERk9SLgog I3dhbF9pbml0X3plcm8gPSBvbiAgICAgICAgICAgICAgICAgICAgICMgemVyby1maWxsIG5l dyBXQUwgZmlsZXMKICN3YWxfcmVjeWNsZSA9IG9uICAgICAgICAgICAgICAgICAgICAgICAj IHJlY3ljbGUgV0FMIGZpbGVzCiAjd2FsX2J1ZmZlcnMgPSAtMSAgICAgICAgICAgICAgICAg ICAgICAgIyBtaW4gMzJrQiwgLTEgc2V0cyBiYXNlZCBvbiBzaGFyZWRfYnVmZmVycwpkaWZm IC0tZ2l0IGEvc3JjL2Jpbi9wZ193YWxkdW1wLy5naXRpZ25vcmUgYi9zcmMvYmluL3BnX3dh bGR1bXAvLmdpdGlnbm9yZQppbmRleCBlYzUxZjQxYzc2Ny4uYTNjMDI0NDZiOWQgMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcGdfd2FsZHVtcC8uZ2l0aWdub3JlCisrKyBiL3NyYy9iaW4vcGdf d2FsZHVtcC8uZ2l0aWdub3JlCkBAIC0xMCw2ICsxMCw3IEBACiAvZ2lzdGRlc2MuYwogL2hh c2hkZXNjLmMKIC9oZWFwZGVzYy5jCisvaGVhcGFtX3hsb2dfZGZvci5jCiAvbG9naWNhbG1z Z2Rlc2MuYwogL214YWN0ZGVzYy5jCiAvbmJ0ZGVzYy5jCkBAIC0yOCw1ICsyOSwxMyBAQAog L3hsb2dyZWFkZXIuYwogL3hsb2dzdGF0cy5jCiAKKyMgU291cmNlIGZpbGVzIGNvcGllZCBm cm9tIHNyYy9iYWNrZW5kL2xpYgorL2JpdHBhY2tfdGVtcGwuYworL2JpdHBhY2tfdTE2LmMK Ky9kZm9yX3RlbXBsLmMKKy9kZm9yX3UxNi5jCisvdmVjdF90ZW1wbC5jCisvdmVjdF91MTYu YworCiAjIEdlbmVyYXRlZCBieSB0ZXN0IHN1aXRlCiAvdG1wX2NoZWNrLwpkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ193YWxkdW1wL01ha2VmaWxlIGIvc3JjL2Jpbi9wZ193YWxkdW1wL01h a2VmaWxlCmluZGV4IGFhYmI4NzU2NmEyLi41ZTUyMWMxZTgyMiAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wZ193YWxkdW1wL01ha2VmaWxlCisrKyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9NYWtl ZmlsZQpAQCAtOCw4ICs4LDkgQEAgZXhwb3J0IFRBUgogCiBzdWJkaXIgPSBzcmMvYmluL3Bn X3dhbGR1bXAKIHRvcF9idWlsZGRpciA9IC4uLy4uLy4uCi1pbmNsdWRlICQodG9wX2J1aWxk ZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCitkZm9yX2RpciA6PSAkKHRvcF9idWlsZGRpcikv c3JjL2JhY2tlbmQvbGliCiAKK2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmls ZS5nbG9iYWwKIE9CSlMgPSBcCiAJJChSTUdSREVTQ09CSlMpIFwKIAkkKFdJTjMyUkVTKSBc CkBAIC0yMCwxMCArMjEsMTMgQEAgT0JKUyA9IFwKIAl4bG9ncmVhZGVyLm8gXAogCXhsb2dz dGF0cy5vCiAKK2luY2x1ZGUgJChkZm9yX2RpcikvTWFrZWZpbGUuZGZvcgorT0JKUyArPSAk KE9CSlNfREZPUikKKwogb3ZlcnJpZGUgQ1BQRkxBR1MgOj0gLURGUk9OVEVORCAtSSQobGli cHFfc3JjZGlyKSAkKENQUEZMQUdTKQogTERGTEFHU19JTlRFUk5BTCArPSAtTCQodG9wX2J1 aWxkZGlyKS9zcmMvZmVfdXRpbHMgLWxwZ2ZldXRpbHMKIAotUk1HUkRFU0NTT1VSQ0VTID0g JChzb3J0ICQobm90ZGlyICQod2lsZGNhcmQgJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9h Y2Nlc3Mvcm1ncmRlc2MvKmRlc2MqLmMpKSkKK1JNR1JERVNDU09VUkNFUyA9ICQoc29ydCAk KG5vdGRpciAkKHdpbGRjYXJkICQodG9wX3NyY2Rpcikvc3JjL2JhY2tlbmQvYWNjZXNzL3Jt Z3JkZXNjLypkZXNjKi5jKSkpIGhlYXBhbV94bG9nX2Rmb3IuYwogUk1HUkRFU0NPQkpTID0g JChwYXRzdWJzdCAlLmMsJS5vLCQoUk1HUkRFU0NTT1VSQ0VTKSkKIAogCkBAIC0zMiw2ICsz NiwyNCBAQCBhbGw6IHBnX3dhbGR1bXAKIHBnX3dhbGR1bXA6ICQoT0JKUykgfCBzdWJtYWtl LWxpYnBncG9ydAogCSQoQ0MpICQoQ0ZMQUdTKSAkXiAkKExERkxBR1MpICQoTERGTEFHU19F WCkgJChMSUJTKSAtbyAkQCQoWCkKIAorYml0cGFja190ZW1wbC5jOiAlIDogJCh0b3Bfc3Jj ZGlyKS9zcmMvYmFja2VuZC9saWIvJQorCXJtIC1mICRAICYmICQoTE5fUykgJDwgLgorCiti aXRwYWNrX3UxNi5jOiAlIDogJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9saWIvJSBiaXRw YWNrX3RlbXBsLmMKKwlybSAtZiAkQCAmJiAkKExOX1MpICQ8IC4KKworZGZvcl90ZW1wbC5j OiAlIDogJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9saWIvJQorCXJtIC1mICRAICYmICQo TE5fUykgJDwgLgorCitkZm9yX3UxNi5jOiAlIDogJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2Vu ZC9saWIvJSBkZm9yX3RlbXBsLmMKKwlybSAtZiAkQCAmJiAkKExOX1MpICQ8IC4KKwordmVj dF90ZW1wbC5jOiAlIDogJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9saWIvJQorCXJtIC1m ICRAICYmICQoTE5fUykgJDwgLgorCit2ZWN0X3UxNi5jOiAlIDogJCh0b3Bfc3JjZGlyKS9z cmMvYmFja2VuZC9saWIvJSB2ZWN0X3RlbXBsLmMKKwlybSAtZiAkQCAmJiAkKExOX1MpICQ8 IC4KKwogeGxvZ3JlYWRlci5jOiAlIDogJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS8lCiAJcm0gLWYgJEAgJiYgJChMTl9TKSAkPCAuCiAKZGlmZiAtLWdpdCBh L3NyYy9iaW4vcGdfd2FsZHVtcC9tZXNvbi5idWlsZCBiL3NyYy9iaW4vcGdfd2FsZHVtcC9t ZXNvbi5idWlsZAppbmRleCA1Mjk2ZjIxYjgyYy4uYzMzYmU4ODcxMmMgMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcGdfd2FsZHVtcC9tZXNvbi5idWlsZAorKysgYi9zcmMvYmluL3BnX3dhbGR1 bXAvbWVzb24uYnVpbGQKQEAgLTEwLDYgKzEwLDcgQEAgcGdfd2FsZHVtcF9zb3VyY2VzID0g ZmlsZXMoCiBwZ193YWxkdW1wX3NvdXJjZXMgKz0gcm1ncl9kZXNjX3NvdXJjZXMKIHBnX3dh bGR1bXBfc291cmNlcyArPSB4bG9ncmVhZGVyX3NvdXJjZXMKIHBnX3dhbGR1bXBfc291cmNl cyArPSBmaWxlcygnLi4vLi4vYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nc3RhdHMuYycp CitwZ193YWxkdW1wX3NvdXJjZXMgKz0gZGZvcl9zb3VyY2VzCiAKIGlmIGhvc3Rfc3lzdGVt ID09ICd3aW5kb3dzJwogICBwZ193YWxkdW1wX3NvdXJjZXMgKz0gcmNfYmluX2dlbi5wcm9j ZXNzKHdpbjMydmVyX3JjLCBleHRyYV9hcmdzOiBbCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvaGVhcGFtX3hsb2cuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW1feGxv Zy5oCmluZGV4IGZkY2E3ZDgyMWM4Li4yMjMzZmY3ZDEwOCAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL2hlYXBhbV94bG9nLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hl YXBhbV94bG9nLmgKQEAgLTE1LDYgKzE1LDcgQEAKICNkZWZpbmUgSEVBUEFNX1hMT0dfSAog CiAjaW5jbHVkZSAiYWNjZXNzL2h0dXAuaCIKKyNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRh aWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dyZWFkZXIuaCIKICNpbmNsdWRlICJsaWIv c3RyaW5naW5mby5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmLmgiCkBAIC0zNDEsNiArMzQy LDggQEAgdHlwZWRlZiBzdHJ1Y3QgeGxfaGVhcF9wcnVuZQogI2RlZmluZQkJWExIUF9WTV9B TExfVklTSUJMRQkJCSgxIDw8IDgpCiAjZGVmaW5lCQlYTEhQX1ZNX0FMTF9GUk9aRU4JCQko MSA8PCA5KQogCisjZGVmaW5lCQlYTEhQX0RGT1JfQ09NUFJFU1NFRAkJKDEgPDwgMTApCisK IC8qCiAgKiB4bGhwX2ZyZWV6ZV9wbGFuIGRlc2NyaWJlcyBob3cgdG8gZnJlZXplIGEgZ3Jv dXAgb2Ygb25lIG9yIG1vcmUgaGVhcCB0dXBsZXMKICAqIChhcHBlYXJzIGluIHhsX2hlYXBf cHJ1bmUncyB4bGhwX2ZyZWV6ZV9wbGFucyBzdWItcmVjb3JkKQpAQCAtNDg5LDExICs0OTIs MTIgQEAgZXh0ZXJuIGNvbnN0IGNoYXIgKmhlYXAyX2lkZW50aWZ5KHVpbnQ4IGluZm8pOwog ZXh0ZXJuIHZvaWQgaGVhcF94bG9nX2xvZ2ljYWxfcmV3cml0ZShYTG9nUmVhZGVyU3RhdGUg KnIpOwogCiAvKiBpbiBoZWFwZGVzYy5jLCBzbyBpdCBjYW4gYmUgc2hhcmVkIGJldHdlZW4g ZnJvbnRlbmQvYmFja2VuZCBjb2RlICovCi1leHRlcm4gdm9pZCBoZWFwX3hsb2dfZGVzZXJp YWxpemVfcHJ1bmVfYW5kX2ZyZWV6ZShjaGFyICpjdXJzb3IsIHVpbnQxNiBmbGFncywKK2V4 dGVybiBjaGFyICogaGVhcF94bG9nX2Rlc2VyaWFsaXplX3BydW5lX2FuZF9mcmVlemUoY2hh ciAqY3Vyc29yLCB1aW50MTYgZmxhZ3MsCiAJCQkJCQkJCQkJCQkgICBpbnQgKm5wbGFucywg eGxocF9mcmVlemVfcGxhbiAqKnBsYW5zLAogCQkJCQkJCQkJCQkJICAgT2Zmc2V0TnVtYmVy ICoqZnJ6X29mZnNldHMsCiAJCQkJCQkJCQkJCQkgICBpbnQgKm5yZWRpcmVjdGVkLCBPZmZz ZXROdW1iZXIgKipyZWRpcmVjdGVkLAogCQkJCQkJCQkJCQkJICAgaW50ICpuZGVhZCwgT2Zm c2V0TnVtYmVyICoqbm93ZGVhZCwKLQkJCQkJCQkJCQkJCSAgIGludCAqbnVudXNlZCwgT2Zm c2V0TnVtYmVyICoqbm93dW51c2VkKTsKKwkJCQkJCQkJCQkJCSAgIGludCAqbnVudXNlZCwg T2Zmc2V0TnVtYmVyICoqbm93dW51c2VkLAorCQkJCQkJCQkJCQkJICAgdWludDggZGZvcl9i dWZbXSk7CiAKLSNlbmRpZgkJCQkJCQkvKiBIRUFQQU1fWExPR19IICovCisjZW5kaWYJCQkJ CQkJLyogSEVBUEFNX1hMT0dfSCAqLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW1feGxvZ19kZm9yLmggYi9zcmMv aW5jbHVkZS9hY2Nlc3MvaGVhcGFtX3hsb2dfZGZvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi5iMTY5Njk2ZTliYwotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW1feGxvZ19kZm9yLmgKQEAgLTAsMCArMSwxNDQgQEAK KyNpZm5kZWYgSEVBUEFNX1hMT0dfREZPUl9ICisjZGVmaW5lIEhFQVBBTV9YTE9HX0RGT1Jf SAorCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy9odHVwX2Rl dGFpbHMuaCIKKyNpbmNsdWRlICJsaWIvZGZvcl91MTYuaCIKKyNpbmNsdWRlICJzdG9yYWdl L2J1ZnBhZ2UuaCIKKworLyoKKyAqIERGb1IncyBtZXRhIGJsb2NrIGZvciBQUlVORS9GUkVF WkUgcmVjb3JkCisgKgorICogQSBtZXRhIGJsb2NrIGNvbnRhaW5zIHBhcmFtZXRlcnMgcmVx dWlyZWQgZm9yIGRlY29tcHJlc3Npb24gb2YgdGhlIGZvbGxvd2luZworICogREZvUiBwYWNr LiBJdCBpcyBkZW5zZWx5IGJpdC1wYWNrZWQuIElmIHRoZSBleGNlcHRpb24gZmxhZyBpcyB6 ZXJvLCBmaWVsZHMKKyAqIHBlcnRhaW5pbmcgdG8gZXhjZXB0aW9ucyBpcyBhYnNlbnQsIHdo aWNoIG1lYW5zIHRoYXQgREZvUiBwYWNrIGRvZXMgbm90CisgKiBjb250YWluIGV4Y2VwdGlv bnMuIENhbGN1bGF0aW9uIG9mIGZpZWxkIHdpZHRocyB0YWtlcyBpbnRvIGFjY291bnQKKyAq IG5leHQgY29uc2lkZXJhdGlvbnM6CisgKgorICogTWF4IEl0ZW0gQ291bnQgc2hvdWxkIGJl IG1vcmUgb3IgZXF1YWwgdG8gTWF4SGVhcFR1cGxlc1BlclBhZ2UgKiAyLiBXZQorICogbXVs dGlwbHkgaXQgYnkgMiBzaW5jZSB0aGUgc2VxdWVuY2Ugb2YgcmVkaXJlY3RlZCB0dXBsZSBv ZmZzZXRzIGhhdmUgYSBwYWlyCisgKiBvZiBvZmZzZXRzIGZvciBlYWNoIHJlZGlyZWN0aW9u IGFuZCBpbiB0aGUgd29yc3QgY2FzZSB3ZSBjYW4gaGF2ZSBhbGwgdHVwbGVzCisgKiByZWRp cmVjdGVkLgorICoKKyAqIFNpbmNlIHdlIGNhbid0IGNhbGN1bGF0ZSBNYXhIZWFwVHVwbGVz UGVyUGFnZSBvbiBwcmVwcm9jZXNzb3IKKyAqIHN0YWdlLCB3ZSBpbnRlbnRpb25hbGx5IG92 ZXJlc3RpbWF0ZSBpdCBhczoKKyAqICAgICAgIE1heCBJdGVtIENvdW50ID4gQkxDS1NaIC8g TWluIFR1cGxlIFNpemUgPSBCTENLU1ogLyAyNAorICogdG8gcHJvdmlkZSBhIG1hcmdpbi4g SW4gZ2VuZXJhbCwgZGVwZW5kaW5nIG9uIEJMQ0tTWiwgaXQgc2hvdWxkIG5vdCByZXN1bHQg aW4KKyAqIERGb1IgbWV0YSBibG9jayBvdmVyaGVhZC4KKyAqIEZvciBpbnN0YW5jZSwgZm9y IGEgYmxvY2sgc2l6ZSBvZiAzMjc2OCwgd2UgaGF2ZSBNYXggSXRlbSBDb3VudCBvbiBhIHBh Z2UgPSAxMzY2LiBSZWRpcmVjdGVkIHNlcXVlbmNlcyBjYW4gYW5kCisgKiBpdCBuZWVkcyAx MSBiaXRzIHdpZHRoIGZpZWxkLgorICoKKyAqIFNpemUgb2YgZmllbGQgSXRlbSBDb3VudDoK KyAqICAgICAgIElURU1fQ09VTlRfU1ogPSBsb2cyKE1heEl0ZW1Db3VudCkgKiAyLgorICog V2UgbXUKKyAqCisgKiBNYXhpbXVtIERlbHRhIFdpZHRoIGlzIGVxdWFsIHRvIElURU1fQ09V TlRfU1ouIFNvIERFTFRBX1dJRFRIX1NaIGluIGEgREZvUgorICogbWV0YSBibG9jayBjYW4g YmUgY2FsY3VsYXRlZCBhczoKKyAqICAgICAgREVMVEFfV0lEVEhfU1ogPj0gbG9nMihNYXgg RGVsdGEgV2lkdGgpID0gbG9nMihJVEVNX0NPVU5UX1NaKQorICoKKyAqIE1heCBFeGNlcHRp b24gQ291bnQgPSAwLjEgKiBNYXhJdGVtQ291bnQsIGFjY29yZGluZyB0byBERm9SIGFsZ29y aXRobSB3aGljaAorICogZ3VhcmFudGVlcyB0aGF0IG5vdCBsZXNzIHRoYW4gOTAlIG9mIGl0 ZW1zIHdpbGwgYmUgY292ZXJlZCB3aXRob3V0IHVzaW5nCisgKiBleGNlcHRpb25zLiBTbzoK KyAqICAgICAgRVhDRVBUSU9OX0NPVU5UX1NaID49IGxvZzIoMC4xICogTWF4SXRlbUNvdW50 KS4KKyAqCisgKiBBbiBleGNlcHRpb24gaXMgcGFydCBvZiBhIGRlbHRhLCBleGNlZWRpbmcg Y2hvb3NlbiBkZWx0YSB3aWR0aC4gRXhjZXB0aW9uIGlzCisgKiBzYXZlZCBpbiBzZXBhcmF0 ZWQgcGFydCBvZiBERm9SIHBhY2sgYW5kLCBzaW5jZSBkZWx0YSB3aWR0aCBpcyBub3QgbGVz cworICogdGhhbiAxOgorICogICAgRVhDRVBUSU9OX1dJRFRIX1NaID49IGxvZzIoTWF4IERl bHRhIFdpZHRoIC0gMSkgPSBsb2cyKElURU1fQ09VTlRfU1ogLSAxKS4KKyAqCisgKiBBbiBl eGNlcHRpb24ncyBwb3NpdGlvbiBzaG93cyB0aGUgcG9zaXRpb24gb2Ygb2YgYSBkZWx0YSB0 byB3aWNoIHRoZQorICogZXhjZXB0aW9uIGhhcyB0byBiZSBhcHBsaWVkLiBWYWx1ZXMgb2Yg YW4gZXhjZXB0aW9uIHBvc2l0aW9uIG11c3QgY292ZXIgdGhlCisgKiBzYW1lIHZhbHVlIHJh bmdlIGFzIGFuIEl0ZW0gQ291bnQsIHNvIHRoZSBNYXggV2lkdGggb2YgYW4gRXhjZXB0aW9u IFBvc2l0aW9uCisgKiBpcyBlcXVhbCB0byB3aWR0aCBvZiBEZWx0YS4gQ29uc2VxdWVudGx5 LCB0aGUgc2l6ZSBvZiBFeGNlcHRpb24gUG9zaXRpb24KKyAqIFdpZHRoIGNhbGN1bGF0ZWQg YXM6CisgKiAgICAgRVhDRVBUSU9OX1BPU0lUSU9OX1dJRFRIX1NJWkUgPSBsb2cyKE1heCBE ZWx0YSBXaWR0aCkgPSBERUxUQV9XSURUSF9TWgorICoKKyAqIEZvciBleGFtcGxlLCBNZXRh IGZvciBCTENLU1ogZXF1YWwgdG8gMzI3NjggaGFzIG5leHQgc2l6ZXMgb2YgZmllbGQKKyAq IHwgc2VjdC4gfCBieXRlIHwgYml0cyAgICAgIHwgICBwYXJhbSAgICAgICAgICAgIHwgIHNp emUgIHwgcmFuZ2Ugb2YgdmFsdWVzIHwKKyAqIHwtLS0tLS0tfC0tLS0tLXwtLS0tLS0tLS0t LXwtLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwKKyAq IHwgIG1haW4gfCAwLCAxIHwgMC0xMSAgICAgIHwgaXRlbSBjb3VudCAgICAgICAgIHwgMTIg Yml0IHwgMS4uLjI3MzAgICAgICAgIHwKKyAqIHwgIG1haW4gfCAgICAxIHwgMTItMTUgICAg IHwgZGVsdGEgd2lkdGggICAgICAgIHwgIDQgYml0IHwgMS4uLjEyICAgICAgICAgIHwKKyAq IHwgIG1haW4gfCAgICAyIHwgMTYgICAgICAgIHwgc2lnbmVkIGRlbHRhcyBmbGFnIHwgIDEg Yml0IHwgMC4uLjEgICAgICAgICAgIHwKKyAqIHwgIG1haW4gfCAgICAyIHwgMTcgICAgICAg IHwgZXhjZXB0aW9uIGZsYWcgICAgIHwgIDEgYml0IHwgMC4uLjEgICAgICAgICAgIHwKKyAq IHwgZXh0cmEgfCAyLCAzIHwgMTgtMjYgICAgIHwgZXhjZXB0aW9uIGNvdW50ICAgIHwgIDkg Yml0IHwgMS4uLjI3NCAgICAgICAgIHwKKyAqIHwgZXh0cmEgfCAgICAzIHwgMjctMjkgICAg IHwgZXhjZXB0aW9uIHdpZHRoICAgIHwgIDQgYml0IHwgMS4uLjExICAgICAgICAgIHwKKyAq IHwgZXh0cmEgfCAzLCA0IHwgMzAtMzMgICAgIHwgZXhjZXB0IHBvcy4gd2lkdGggIHwgIDQg Yml0IHwgMS4uLjEyICAgICAgICAgIHwKKyAqLworCisvKgorICogVGhlIHNpemVzIG9mIGZp ZWxkcyBpbiB0aGUgY29tcHJlc3NlZCBERm9SIE1ldGEgc3RydWN0dXJlIG9mIGFuCisgKiBY TE9HX0hFQVAyX1BSVU5FKiByZWNvcmQuCisgKi8KKyNpZiBCTENLU1ogPT0gMzI3NjgKKyNk ZWZpbmUgWExIUEZfTUVUQV9JVEVNX0NPVU5UX1NaICAxMgorI2RlZmluZSBYTEhQRl9NRVRB X0RFTFRBX1dJRFRIX1NaIDQKKyNlbGlmIEJMQ0tTWiA9PSAxNjM4NAorI2RlZmluZSBYTEhQ Rl9NRVRBX0lURU1fQ09VTlRfU1ogIDExCisjZGVmaW5lIFhMSFBGX01FVEFfREVMVEFfV0lE VEhfU1ogNAorI2VsaWYgQkxDS1NaID09IDgxOTIKKyNkZWZpbmUgWExIUEZfTUVUQV9JVEVN X0NPVU5UX1NaICAxMAorI2RlZmluZSBYTEhQRl9NRVRBX0RFTFRBX1dJRFRIX1NaIDQKKyNl bGlmIEJMQ0tTWiA9PSA0MDk2CisjZGVmaW5lIFhMSFBGX01FVEFfSVRFTV9DT1VOVF9TWiAg OQorI2RlZmluZSBYTEhQRl9NRVRBX0RFTFRBX1dJRFRIX1NaIDQKKyNlbGlmIEJMQ0tTWiA9 PSAyMDQ4CisjZGVmaW5lIFhMSFBGX01FVEFfSVRFTV9DT1VOVF9TWiAgOAorI2RlZmluZSBY TEhQRl9NRVRBX0RFTFRBX1dJRFRIX1NaIDQKKyNlbGlmIEJMQ0tTWiA9PSAxMDI0CisjZGVm aW5lIFhMSFBGX01FVEFfSVRFTV9DT1VOVF9TWiAgNworI2RlZmluZSBYTEhQRl9NRVRBX0RF TFRBX1dJRFRIX1NaIDMKKyNlbGlmIEJMQ0tTWiA9PSA1MTIKKyNkZWZpbmUgWExIUEZfTUVU QV9JVEVNX0NPVU5UX1NaICA2CisjZGVmaW5lIFhMSFBGX01FVEFfREVMVEFfV0lEVEhfU1og MworI2VsaWYgQkxDS1NaID09IDI1NgorI2RlZmluZSBYTEhQRl9NRVRBX0lURU1fQ09VTlRf U1ogIDUKKyNkZWZpbmUgWExIUEZfTUVUQV9ERUxUQV9XSURUSF9TWiAzCisjZWxpZiBCTENL U1ogPT0gMTI4CisjZGVmaW5lIFhMSFBGX01FVEFfSVRFTV9DT1VOVF9TWiAgNAorI2RlZmlu ZSBYTEhQRl9NRVRBX0RFTFRBX1dJRFRIX1NaIDIKKyNlbGlmIEJMQ0tTWiA9PSA2NAorI2Rl ZmluZSBYTEhQRl9NRVRBX0lURU1fQ09VTlRfU1ogIDMKKyNkZWZpbmUgWExIUEZfTUVUQV9E RUxUQV9XSURUSF9TWiAyCisjZWxzZQorI2Vycm9yICJVbnN1cHBvcnRlZCBCTENLU1ogaW4g WExvZyBIZWFwIEFuZCBQcnVuZS4iCisjZW5kaWYKKworI2RlZmluZSBYTEhQRl9NRVRBX1NJ R05FRERFTFRBU19GTEFHX1NaIDEgLyogRmxhZyBhYm91dCBzaWduZWRuZXNzIG9mIGRlbHRh cyAqLworCisjZGVmaW5lIFhMSFBGX01FVEFfRVhDRVBUSU9OX0ZMQUdfU1ogMSAvKiBGbGFn IGFib3V0IEV4dHJhIFNlY3Rpb24gcHJlc2VuY2UgKi8KKworLyogU2l6ZSBvZiBFeGNlcHRp b24gQ291bnQgZmllbGQgKi8KKyNpZiBYTEhQRl9NRVRBX0lURU1fQ09VTlRfU1ogPiA2Cisj ZGVmaW5lIFhMSFBGX01FVEFfRVhDRVBUSU9OX0NPVU5UX1NaIFhMSFBGX01FVEFfSVRFTV9D T1VOVF9TWiAtIDMKKyNlbHNlCisjZGVmaW5lIFhMSFBGX01FVEFfRVhDRVBUSU9OX0NPVU5U X1NaIFhMSFBGX01FVEFfSVRFTV9DT1VOVF9TWiAzCisjZW5kaWYKKworI2RlZmluZSBYTEhQ Rl9NRVRBX0VYQ0VQVElPTl9XSURUSF9TWiBcCisJWExIUEZfTUVUQV9ERUxUQV9XSURUSF9T WiAvKiBTaXplIG9mIEV4Y2VwdGlvbiBXaWR0aCBmaWVsZCAqLworCisjZGVmaW5lIFhMSFBG X01FVEFfRVhDRVBUSU9OX1BPU0lUSU9OX1dJRFRIX1NaIFwKKwlYTEhQRl9NRVRBX0RFTFRB X1dJRFRIX1NaIC8qIFNpemUgb2YgRXhjZXB0aW9uIFBvc2l0aW9uIHdpZHRoIGZpZWxkICov CisKKy8qIE1heGltYWwgc2l6ZSBvZiBwYWNrZWQgbWV0YSAqLworI2RlZmluZSBNQVhfUEFD S0VEX01FVEFfU0laRSBcCisJKFhMSFBGX01FVEFfSVRFTV9DT1VOVF9TWiArIFhMSFBGX01F VEFfREVMVEFfV0lEVEhfU1ogKyAgICAgICAgICAgICAgICAgIFwKKwkgWExIUEZfTUVUQV9F WENFUFRJT05fRkxBR19TWiArIFhMSFBGX01FVEFfRVhDRVBUSU9OX1BPU0lUSU9OX1dJRFRI X1NaICsgXAorCSBYTEhQRl9NRVRBX0VYQ0VQVElPTl9XSURUSF9TWiArIFhMSFBGX01FVEFf RVhDRVBUSU9OX0NPVU5UX1NaICsgNykgLyA4CisKKy8qIFRoZSBzaXplIG9mIGEgdHlwaWNh bCBjaHVuayBvZiBtZW1vcnkgdXNlZCBieSBkZm9yX3BhY2sgKi8KKyNkZWZpbmUgREZPUl9C VUZfUEFSVF9TSVpFIE1heEhlYXBUdXBsZXNQZXJQYWdlICogc2l6ZW9mKHVpbnQxNikKKwor ZXh0ZXJuIGJvb2wgd2FsX3BydW5lX2Rmb3JfY29tcHJlc3Npb247IC8qIEdVQyAqLworCitl eHRlcm4gc2l6ZV90IGxvZ19oZWFwX3BydW5lX2FuZF9mcmVlemVfcGFja19tZXRhKGNvbnN0 IGRmb3JfbWV0YV90ICptZXRhLAorCQkJCQkJCQkJCQkJICB1aW50OCBidWZbXSk7CisKK2V4 dGVybiBzaXplX3QgbG9nX2hlYXBfcHJ1bmVfYW5kX2ZyZWV6ZV91bnBhY2tfbWV0YShkZm9y X21ldGFfdCAqbWV0YSwKKwkJCQkJCQkJCQkJCQljb25zdCB1aW50OCBwYWNrZWRfbWV0YVtd KTsKKworZXh0ZXJuIHZvaWQgaGVhcF94bG9nX2Rlc2VyaWFsaXplX2Rmb3IoY2hhciAqKmN1 cnNvciwgaW50ICpuaXRlbXMsCisJCQkJCQkJCQkgICBPZmZzZXROdW1iZXIgKippdGVtcywg dWludDggZGZvcl9idWZbXSk7CisKKyNlbmRpZgkJCQkJCQkvKiBIRUFQQU1fWExPR19ERk9S X0ggKi8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9kZm9yL01ha2VmaWxlIGIvc3JjL3Rlc3QvZGZvci9NYWtlZmlsZQppbmRleCAyY2E5OGY3 NmEwZi4uZjdhMjg3YTFkM2IgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L2Rmb3IvTWFrZWZpbGUK KysrIGIvc3JjL3Rlc3QvZGZvci9NYWtlZmlsZQpAQCAtNDgsNiArNDgsOCBAQCBjaGVjay11 bml0OiAkKFRFU1RTKQogCWNkICQodG9wX2J1aWxkZGlyKS8kKHN1YmRpcikgJiYgXAogCSAg ICQoUFJPVkUpICQoUFJPVkVfRkxBR1MpIFwKIAkgICAgLXYgJChhZGRwcmVmaXggLi8sJChp ZiAkKFBST1ZFX1RFU1RTKSwgJChQUk9WRV9URVNUUyksICQoVEVTVFMpKSkKKyMgVGhlIGV4 YW1wbGUgb2YgdXNpbmcgdGhlIGNoZWNrLXVuaXQgcnVsZToKKyMJCW1ha2UgY2hlY2stdW5p dCBQUk9WRV9URVNUUz0ndGVzdF9kZm9yX3UxNicgUFJPVkVfRkxBR1M9Jy0tdmVyYm9zZScK IAogY2hlY2s6IGNoZWNrLXVuaXQKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3Zlcnkv dC8wNTJfcHJ1bmVfZGZvcl9jb21wcmVzc2lvbi5wbCBiL3NyYy90ZXN0L3JlY292ZXJ5L3Qv MDUyX3BydW5lX2Rmb3JfY29tcHJlc3Npb24ucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLjk1MTQ3OGZiYmQzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rl c3QvcmVjb3ZlcnkvdC8wNTJfcHJ1bmVfZGZvcl9jb21wcmVzc2lvbi5wbApAQCAtMCwwICsx LDI4MyBAQAordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBQb3N0Z3JlU1FMOjpU ZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6 Ok1vcmU7CisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisjIFdvcmtsb2FkIGdlbmVyYXRpbmcgZGVhZCB0dXBsZXMg YW5kIFBSVU5FIFdBTAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N1YiBnZW5lcmF0ZV9wcnVuZV93b3JrbG9hZAor eworCW15ICgkbm9kZSwgJHdvcmtsb2FkKSA9IEBfOworCisKKwlteSAkc3RhcnRfbHNuOwor CW15ICRlbmRfbHNuOworCisJaWYgKCR3b3JrbG9hZCBlcSAidmFjdXVtX3dpdGhfaW5kZXgi CisJCXx8ICR3b3JrbG9hZCBlcSAidmFjdXVtX25vX2luZGV4IikKKwl7CisJCSRub2RlLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgcXsKKwkJCUNSRUFURSBUQUJMRSB0X3BydW5lICgKKwkJ CQlpZCBpbnQsCisJCQkJdmFsIHRleHQKKwkJCSkgV0lUSCAoZmlsbGZhY3RvciA9IDEwMCwg YXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworCQl9KTsKKworCQkkbm9kZS0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsIHF7CisJCQlTRVQgdmFjdXVtX2ZyZWV6ZV9taW5fYWdlID0gMDsK KwkJCVNFVCB2YWN1dW1fZnJlZXplX3RhYmxlX2FnZSA9IDA7CisJCX0pOworCisJCSMgLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkjIFBoYXNlIDE6IElOU0VSVAorCQkjIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBx eworCQkJSU5TRVJUIElOVE8gdF9wcnVuZQorCQkJU0VMRUNUIGcsICd4JworCQkJRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwzMDAwMDAwKSBnOworCQl9KTsKKworCQkjIE9wdGlvbmFsIGlu ZGV4CisJCWlmICgkd29ya2xvYWQgZXEgInZhY3V1bV93aXRoX2luZGV4IikKKwkJeworCQkJ JG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxeworCQkJCUNSRUFURSBJTkRFWCBPTiB0 X3BydW5lKGlkKTsKKwkJCX0pOworCQl9CisJCSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorCQkjIFBoYXNlIDI6IERFTEVURSArIFZBQ1VVTQorCQkjIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKwkJJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxeworCQkJREVMRVRF IEZST00gdF9wcnVuZQorCQkJV0hFUkUgaWQgJSA1MDAgPD4gMDsKKwkJfSk7CisKKwkJIyBG b3JjZSBXQUwgZmx1c2ggYW5kIGNhcHR1cmUgTFNOCisJCSRzdGFydF9sc24gPSAkbm9kZS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHF7CisJCQlTRUxFQ1QgcGdfY3VycmVudF93YWxfZmx1 c2hfbHNuKCk7CisJCX0pOworCisJCSMgVkFDVVVNIGN5Y2xlcyB0byB0cmlnZ2VyIFBSVU5F CisJCWZvciBteSAkaSAoMS4uMykKKwkJeworCQkJJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCBxeyBWQUNVVU0gRlJFRVpFIHRfcHJ1bmU7IH0pOworCQl9CisKKwkJJGVuZF9sc24g PSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHF7CisJCQlTRUxFQ1QgcGdfY3VycmVu dF93YWxfZmx1c2hfbHNuKCk7CisJCX0pOworCX0KKwllbHNlCisJeworCQlkaWUgIldvcmts b2FkIGlzIG5vdCBkZWZpbmVkOiB3b3JrbG9hZD0kd29ya2xvYWQiOworCX0KKworCWNob21w KCRzdGFydF9sc24pOworCXByaW50ICJDYXB0dXJlZCBzdGFydCBMU046ICRzdGFydF9sc25c biI7CisJY2hvbXAoJGVuZF9sc24pOworCXByaW50ICJDYXB0dXJlZCBlbmQgTFNOOiAkZW5k X2xzblxuIjsKKworCXJldHVybiAoJHN0YXJ0X2xzbiwgJGVuZF9sc24pOworfQorCisjIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIyBXQUwgYW5hbHl6ZXIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdWIgY29sbGVjdF93YWxfc3RhdHMK K3sKKwlteSAoJG5vZGUsICRzdGFydF9sc24sICRlbmRfbHNuKSA9IEBfOworCisJbXkgJHdh bF9kaXIgPSAkbm9kZS0+ZGF0YV9kaXIgLiAiL3BnX3dhbCI7CisKKwlwcmludCAid2FsX2Rp cj0iIC4gJHdhbF9kaXIgLiAiXG4iOworCXByaW50ICJjb2xsZWN0X3dhbF9zdGF0czogc3Rh cnRfbHNuPSRzdGFydF9sc25cbiI7CisJcHJpbnQgImNvbGxlY3Rfd2FsX3N0YXRzOiBlbmRf bHNuPSRlbmRfbHNuXG4iOworCisJbXkgJGNtZDsKKworCWlmIChkZWZpbmVkICRlbmRfbHNu ICYmICRlbmRfbHNuIG5lICcnKQorCXsKKwkJJGNtZCA9ICJwZ193YWxkdW1wIC1wICR3YWxf ZGlyIC1zICRzdGFydF9sc24gLWUgJGVuZF9sc24gMj4vZGV2L251bGwiOworCX0KKwllbHNl CisJeworCQkkY21kID0gInBnX3dhbGR1bXAgLXAgJHdhbF9kaXIgLXMgJHN0YXJ0X2xzbiAy Pi9kZXYvbnVsbCI7CisJfQorCisJbXkgQGxpbmVzID0gYCRjbWRgOworCisJIyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisJIyBDb3VudGVycworCSMgLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorCW15ICR0b3RhbF9yZWNvcmRzID0gMDsKKwlteSAkdG90YWxfYnl0ZXMgICA9 IDA7CisKKwlteSAkcHJ1bmVfcmVjb3JkcyA9IDA7CisJbXkgJHBydW5lX2J5dGVzICAgPSAw OworCisJZm9yZWFjaCBteSAkbGluZSAoQGxpbmVzKQorCXsKKwkJIyBFeHRyYWN0IHRvdGFs IHJlY29yZCBzaXplCisJCWlmICgkbGluZSA9fiAvbGVuIFwocmVjXC90b3RcKTpccypcZCtc L1xzKihcZCspLykKKwkJeworCQkJbXkgJHNpemUgPSAkMTsKKworCQkJJHRvdGFsX3JlY29y ZHMrKzsKKwkJCSR0b3RhbF9ieXRlcyArPSAkc2l6ZTsKKworCQkJIyBQUlVORS1zcGVjaWZp YyB0cmFja2luZworCQkJaWYgKCRsaW5lID1+IC9QUlVORV9WQUNVVU1fU0NBTi8pCisJCQl7 CisJCQkJJHBydW5lX3JlY29yZHMrKzsKKwkJCQkkcHJ1bmVfYnl0ZXMgKz0gJHNpemU7CisJ CQl9CisJCX0KKwl9CisKKwlpZiAoJHRvdGFsX3JlY29yZHMgPT0gMCkKKwl7CisJCWRpZSAi Tm8gV0FMIHJlY29yZHMgZm91bmQgaW4gcmFuZ2UgJHN0YXJ0X2xzbiDihpIgJGVuZF9sc24i OworCX0KKworCXByaW50ICJUT1RBTDogcmVjb3Jkcz0kdG90YWxfcmVjb3JkczsgYnl0ZXM9 JHRvdGFsX2J5dGVzXG4iOworCXByaW50ICJQUlVORTogcmVjb3Jkcz0kcHJ1bmVfcmVjb3Jk czsgYnl0ZXM9JHBydW5lX2J5dGVzXG4iOworCisJcmV0dXJuIHsKKwkJdG90YWxfcmVjb3Jk cyA9PiAkdG90YWxfcmVjb3JkcywKKwkJdG90YWxfYnl0ZXMgICA9PiAkdG90YWxfYnl0ZXMs CisJCXBydW5lX3JlY29yZHMgPT4gJHBydW5lX3JlY29yZHMsCisJCXBydW5lX2J5dGVzICAg PT4gJHBydW5lX2J5dGVzLAorCX07Cit9CisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJ1biB0ZXN0IG9uIGEg ZnJlc2ggY2x1c3RlcgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N1YiBydW5fY2x1c3Rlcl90ZXN0Cit7CisJbXkg KCRuYW1lLCAkY29tcHJlc3Npb24sICR3b3JrbG9hZCkgPSBAXzsKKworCW15ICRub2RlID0g UG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCRuYW1lKTsKKworCSRub2RlLT5pbml0 OworCisJJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCBxcXsKKwkJd2Fs X2xldmVsID0gcmVwbGljYQorCQlhdXRvdmFjdXVtID0gb2ZmCisJCXdhbF9wcnVuZV9kZm9y X2NvbXByZXNzaW9uID0gJGNvbXByZXNzaW9uCisgCQl3YWxfa2VlcF9zaXplID0gJzFHQicK KwkJbWF4X3dhbF9zaXplID0gJzIwR0InCisJfSk7CisKKwkkbm9kZS0+c3RhcnQ7CisKKwlt eSAoJHN0YXJ0X2xzbiwgJGVuZF9sc24pID0gZ2VuZXJhdGVfcHJ1bmVfd29ya2xvYWQoJG5v ZGUsICR3b3JrbG9hZCk7CisKKwkkbm9kZS0+c3RvcDsKKworCXJldHVybiBjb2xsZWN0X3dh bF9zdGF0cygkbm9kZSwgJHN0YXJ0X2xzbiwgJGVuZF9sc24pOworfQorCisjIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IyBGb3JtYXR0aW5nIGhlbHBlcnMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3N1YiBfcGN0X3JlZHVjdGlvbgor eworCW15ICgkYmVmb3JlLCAkYWZ0ZXIpID0gQF87CisJcmV0dXJuICJOL0EiIGlmICRiZWZv cmUgPT0gMDsKKworCW15ICRwY3QgPSAxMDAgKiAoJGJlZm9yZSAtICRhZnRlcikgLyAkYmVm b3JlOworCXJldHVybiBzcHJpbnRmKCIlZCUlIiwgaW50KCRwY3QgKyAwLjUpKTsKK30KKwor c3ViIF9yYXRpbworeworCW15ICgkYmVmb3JlLCAkYWZ0ZXIpID0gQF87CisJcmV0dXJuICJO L0EiIGlmICRhZnRlciA9PSAwOworCisJbXkgJHIgPSAkYmVmb3JlIC8gJGFmdGVyOworCXJl dHVybiBzcHJpbnRmKCIlLjFmeCIsICRyKTsKK30KKworIyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVwb3J0OiB0 b3RhbCBXQUwgc3RhdHMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdWIgcmVwb3J0X3dhbF9kaWZmCit7CisJbXkg KCRvZmYsICRvbikgPSBAXzsKKworCW15ICRiX2J5dGVzID0gJG9mZi0+e3RvdGFsX2J5dGVz fTsKKwlteSAkYV9ieXRlcyA9ICRvbi0+e3RvdGFsX2J5dGVzfTsKKworCXByaW50ZiAiJS0y MHMgJTE3cyAlMTdzICUxMXNcbiIsCisJCSItIiB4IDIwLCAiLSIgeCAxNywgIi0iIHggMTcs ICItIiB4IDExOworCisJcHJpbnRmICIlLTIwcyAlMTdzICUxN3MgJTExc1xuIiwKKwkJIiIs ICJERk9SIG9mZiwgYnl0ZXMiLCAiREZPUiBvbiwgYnl0ZXMiLCAiUmVkdWN0aW9uIjsKKwor CXByaW50ZiAiJS0yMHMgJTE3cyAlMTdzICUxMXNcbiIsCisJCSItIiB4IDIwLCAiLSIgeCAx NywgIi0iIHggMTcsICItIiB4IDExOworCisJcHJpbnRmICIlLTIwcyAlMTdkICUxN2QgJTEx c1xuIiwKKwkJIldBTCB0b3RhbCBzaXplIiwKKwkJJG9mZi0+e3RvdGFsX2J5dGVzfSwKKwkJ JG9uLT57dG90YWxfYnl0ZXN9LAorCQlfcGN0X3JlZHVjdGlvbigkb2ZmLT57dG90YWxfYnl0 ZXN9LCAkb24tPnt0b3RhbF9ieXRlc30pOworCisJcHJpbnRmICIlLTIwcyAlMTdkICUxN2Qg JTExc1xuXG4iLAorCQkiUHJ1bmUgcmVjb3JkcyBzaXplIiwKKwkJJG9mZi0+e3BydW5lX2J5 dGVzfSwKKwkJJG9uLT57cHJ1bmVfYnl0ZXN9LAorCQlfcmF0aW8oJG9mZi0+e3BydW5lX2J5 dGVzfSwgJG9uLT57cHJ1bmVfYnl0ZXN9KTsKK30KKworIyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2NlbmFyaW8g MTogVkFDVVVNIHdpdGhvdXQgaW5kZXgKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitteSAkb2ZmX25vaWR4ID0gcnVu X2NsdXN0ZXJfdGVzdCgicHJ1bmVfb2ZmX25vaWR4IiwgIm9mZiIsICJ2YWN1dW1fbm9faW5k ZXgiKTsKK215ICRvbl9ub2lkeCAgPSBydW5fY2x1c3Rlcl90ZXN0KCJwcnVuZV9vbl9ub2lk eCIsICAib24iLCAgInZhY3V1bV9ub19pbmRleCIpOworCitjbXBfb2soCisJJG9mZl9ub2lk eC0+e3BydW5lX2J5dGVzfSwKKwknPicsCisJJG9uX25vaWR4LT57cHJ1bmVfYnl0ZXN9LAor CSdERk9SIHJlZHVjZXMgdGhlIFBSVU5FIFdBTCBzaXplIG9uIHZhY3V1bWluZyBhIHRhYmxl IGhhdmluZyBubyBpbmRleC4nCispOworCitjbXBfb2soCisJJG9mZl9ub2lkeC0+e3RvdGFs X2J5dGVzfSwKKwknPicsCisJJG9uX25vaWR4LT57dG90YWxfYnl0ZXN9LAorCSdERk9SIHJl ZHVjZXMgdGhlIHRvdGFsIFdBTCBzaXplIG9uIHZhY3V1bWluZyBhIHRhYmxlIGhhdmluZyBu byBpbmRleC4nCispOworCitwcmludCAiXG5cbj09PSBWQUNVVU0gKHRhYmxlIHdpdGggbm8g aW5kZXgpID09PVxuIjsKK3JlcG9ydF93YWxfZGlmZigkb2ZmX25vaWR4LCAkb25fbm9pZHgp OworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIyBTY2VuYXJpbyAyOiBWQUNVVU0gd2l0aCBpbmRleAorIyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KK215ICRvZmZfaWR4ID0gcnVuX2NsdXN0ZXJfdGVzdCgicHJ1bmVfb2ZmX2lkeCIsICJv ZmYiLCAidmFjdXVtX3dpdGhfaW5kZXgiKTsKK215ICRvbl9pZHggID0gcnVuX2NsdXN0ZXJf dGVzdCgicHJ1bmVfb25faWR4IiwgICJvbiIsICAidmFjdXVtX3dpdGhfaW5kZXgiKTsKKwor Y21wX29rKAorCSRvZmZfaWR4LT57cHJ1bmVfYnl0ZXN9LAorCSc+JywKKwkkb25faWR4LT57 cHJ1bmVfYnl0ZXN9LAorCSdERk9SIHJlZHVjZXMgdGhlIFBSVU5FIFdBTCBzaXplIG9uIHZh Y3V1bWluZyBhIHRhYmxlIGhhdmluZyBhbiBpbmRleC4nCispOworCitjbXBfb2soCisJJG9m Zl9pZHgtPnt0b3RhbF9ieXRlc30sCisJJz49JywKKwkkb25faWR4LT57dG90YWxfYnl0ZXN9 LAorCSdERk9SIHJlZHVjZXMgdGhlIHRvdGFsIFdBTCBzaXplIG9uIHZhY3V1bWluZyBhIHRh YmxlIGhhdmluZyBhbiBpbmRleC4nCispOworCitwcmludCAiXG5cbj09PSBWQUNVVU0gKHRh YmxlIHdpdGggaW5kZXgpID09PVxuIjsKK3JlcG9ydF93YWxfZGlmZigkb2ZmX2lkeCwgJG9u X2lkeCk7CisKK2RvbmVfdGVzdGluZygpOwotLSAKMi41My4wCgo= --------------lw8OY0FkiJnrHVFMGb70Aea3--