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 1wF6mX-004kiX-1k for pgsql-hackers@arkaria.postgresql.org; Tue, 21 Apr 2026 08:48:34 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wF6mW-007hFV-2i for pgsql-hackers@arkaria.postgresql.org; Tue, 21 Apr 2026 08:48:32 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wF6mV-007hFI-2f for pgsql-hackers@lists.postgresql.org; Tue, 21 Apr 2026 08:48:32 +0000 Received: from forward500b.mail.yandex.net ([2a02:6b8:c02:900:1:45:d181:d500]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1wF6mG-000000023fU-46Ig for pgsql-hackers@postgresql.org; Tue, 21 Apr 2026 08:48:30 +0000 Received: from mail-nwsmtp-smtp-production-main-74.sas.yp-c.yandex.net (mail-nwsmtp-smtp-production-main-74.sas.yp-c.yandex.net [IPv6:2a02:6b8:c24:1698:0:640:befc:0]) by forward500b.mail.yandex.net (Yandex) with ESMTPS id 64C91C0CFE for ; Tue, 21 Apr 2026 11:48:13 +0300 (MSK) Received: by mail-nwsmtp-smtp-production-main-74.sas.yp-c.yandex.net (smtp) with ESMTPSA id BmNNSP7SVW20-utrXjK74; Tue, 21 Apr 2026 11:48:12 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tantorlabs.com; s=mail; t=1776761292; bh=Sqy2hQqbTsjaeIApQR9M6ipgBTskhib9Y7+ub3QOIxQ=; h=In-Reply-To:References:To:Subject:Message-ID:Date:From; b=BESyNU7REamYxz4Vc0Y+PLWdfuMN+GNoblQWdZ3fC8yGIwGnXr1CxBCiPFBYkFPBm nmUxa4sFOqOyRbRN1ng3gpH/LNi2EdRvL+J5ge2qhA//JP/6xX+xoaynyCFX9AeLXu QCQw7qVvRXPgKU9HyGo2jae2PoeYKkxMTisKHWvs= Authentication-Results: mail-nwsmtp-smtp-production-main-74.sas.yp-c.yandex.net; dkim=pass header.i=@tantorlabs.com Content-Type: multipart/mixed; boundary="------------IX7dx4Q1dvFLkUfBRFR7nqGb" Message-ID: <5cb345a6-7042-4135-ac92-9bfdd42da898@tantorlabs.com> Date: Tue, 21 Apr 2026 16:48:06 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Compress prune/freeze records with Delta Frame of Reference algorithm From: Evgeny Voropaev To: PostgreSQL Hackers References: <9d79f4b9-1a1c-4177-bdfa-3df9a5171db9@iki.fi> <380a9035-54e3-4ee2-bdde-fe7526c34b6a@tantorlabs.com> Content-Language: en-US In-Reply-To: <380a9035-54e3-4ee2-bdde-fe7526c34b6a@tantorlabs.com> 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. --------------IX7dx4Q1dvFLkUfBRFR7nqGb Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Continue fixing CI issues. Rebased onto master's d3bba041543. --------------IX7dx4Q1dvFLkUfBRFR7nqGb Content-Type: text/x-patch; charset=UTF-8; name="v13-0001-Implement-vect-and-uniqsortvect-containers-and-b.patch" Content-Disposition: attachment; filename*0="v13-0001-Implement-vect-and-uniqsortvect-containers-and-b.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA1NWI2ZWRhNzBjNTFmYTNjZGE5NTBhYTIzMDBiMjA0MGIxYzQ3NTY1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBFdmdlbnkgVm9yb3BhZXYgPGV2b3JvcEBnbWFpbC5j b20+CkRhdGU6IE1vbiwgMTMgQXByIDIwMjYgMjA6MTI6NTUgKzA4MDAKU3ViamVjdDogW1BB VENIIHYxMyAxLzVdIEltcGxlbWVudCB2ZWN0IGFuZCB1bmlxc29ydHZlY3QgY29udGFpbmVy 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== --------------IX7dx4Q1dvFLkUfBRFR7nqGb Content-Type: text/x-patch; charset=UTF-8; name="v13-0002-Tests-of-vect-and-uniqsortvect-containers-and-of.patch" Content-Disposition: attachment; filename*0="v13-0002-Tests-of-vect-and-uniqsortvect-containers-and-of.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBjODFhMzMzZmI1YjBjMzc2MTZjMGViZjczZjIxY2QxYzRiMjFhYmIzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBFdmdlbnkgVm9yb3BhZXYgPGV2b3JvcEBnbWFpbC5j b20+CkRhdGU6IE1vbiwgMTMgQXByIDIwMjYgMjA6MTg6NDIgKzA4MDAKU3ViamVjdDogW1BB VENIIHYxMyAyLzVdIFRlc3RzIG9mIHZlY3QgYW5kIHVuaXFzb3J0dmVjdCBjb250YWluZXJz 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== --------------IX7dx4Q1dvFLkUfBRFR7nqGb Content-Type: text/x-patch; charset=UTF-8; name="v13-0003-Implement-Delta-Frame-of-Reference-compression.patch" Content-Disposition: attachment; filename*0="v13-0003-Implement-Delta-Frame-of-Reference-compression.patc"; filename*1="h" Content-Transfer-Encoding: base64 RnJvbSAyOGE1MGMyNWRhNTExZGIwYTU5ZjMyNDMwYWFjMWQ2MmQwMzc5MTc3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBFdmdlbnkgVm9yb3BhZXYgPGV2b3JvcEBnbWFpbC5j b20+CkRhdGU6IE1vbiwgMTMgQXByIDIwMjYgMjM6MTU6MzQgKzA4MDAKU3ViamVjdDogW1BB VENIIHYxMyAzLzVdIEltcGxlbWVudCBEZWx0YSBGcmFtZSBvZiBSZWZlcmVuY2UgY29tcHJl 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 IHwgICA0ICsKIHNyYy90b29scy9wZ2luY2x1ZGUvaGVhZGVyc2NoZWNrICAgIHwgICA0ICsK IDEwIGZpbGVzIGNoYW5nZWQsIDkzNCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL2JhY2tlbmQvbGliL2Rmb3JfdGVtcGwuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy9iYWNrZW5kL2xpYi9kZm9yX3UxNi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1 ZGUvbGliL2Rmb3JfdGVtcGwuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL2xp Yi9kZm9yX3RlbXBsX3N0YXBsZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUv bGliL2Rmb3JfdGVtcGxfdW5kZWYuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRl L2xpYi9kZm9yX3UxNi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvbGliL2Rm b3JfdTE2X2NvbmZpZy5oCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbGliL01ha2VmaWxl LmRmb3IgYi9zcmMvYmFja2VuZC9saWIvTWFrZWZpbGUuZGZvcgppbmRleCBiOTNjNmU3ODY0 NC4uYmViNzAzNWYxNTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2xpYi9NYWtlZmlsZS5k Zm9yCisrKyBiL3NyYy9iYWNrZW5kL2xpYi9NYWtlZmlsZS5kZm9yCkBAIC0yLDQgKzIsNSBA QAogCiBPQkpTX0RGT1IgOj0gXAogCWJpdHBhY2tfdTE2Lm8gXAorCWRmb3JfdTE2Lm8gXAog CXZlY3RfdTE2Lm8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xpYi9kZm9yX3RlbXBsLmMg Yi9zcmMvYmFja2VuZC9saWIvZGZvcl90ZW1wbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi40ODI4MGIyYjljMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9i YWNrZW5kL2xpYi9kZm9yX3RlbXBsLmMKQEAgLTAsMCArMSw3MjIgQEAKKy8qCisgKiBkZm9y X3RlbXBsLmMKKyAqCisgKiBJbXBsZW1lbnQgdGhlIHZhcmlhbnQgb2YgdGhlIEZyYW1lIG9m IFJlZmVyZW5jZSB3aXRoIERlbHRhCisgKiBjb250YWluZXIgYW5kIGNvcnJlc3BvbmRpbmcg YWxnb3JpdGhtcy4KKyAqCisgKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBERk9S IGFsZ29yaXRobSBzdXBwb3J0cyBpdGVtcyBvZiB1bnNpZ25lZAorICogaW50ZWdlciB0eXBl LiBUaGUgdHlwZSBvZiBvcmlnaW5hbCBpdGVtcyBpcyBkZWZpbmVkIHdpdGggdGhlIGl0ZW1f dCBtYWNyby4KKyAqCisgKiBUaGUgY29tcHJlc3NlZCBwYWNrIGNvbXByaXNlcyB0aHJlZSBw YXJ0czoKKyAqICAgICAtIGRlbHRhcyAobGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiBkZWx0 YXMpOworICogICAgIC0gZXhjZXB0aW9ucyBwb3NpdGlvbnMuCisgKiAgICAgLSBleGNlcHRp b25zIChtb3N0IHNpZ25pZmljYW50IGJpdHMgb2YgZGVsdGFzKTsKKyAqIEVhY2ggb2YgdGhl bSBpcyBhIGRlbnNpbHkgYml0LXBhY2tlZCBzZXF1ZW5jZS4KKyAqCisgKiBUaGUgZGVsdGEg aXMgYSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGN1cnJlbnQgaXRlbSBhbmQgdGhlIHByZXZp b3VzIG9uZS4gVGhlCisgKiBkZWx0YSBvZiB0aGUgZmlyc3QgaXRlbSAodGhlIGl0ZW0gaGF2 aW5nIHRoZSB6ZXJvIGluZGV4KSBpcyBpdHMgYWN0dWFsIHZhbHVlOgorICogZGVsdGFbMF0g PSBtWzBdLTAgPSBtWzBdLiBBIHNlcmlhbGlzZWQgZGVsdGEgaXMgYSBzZXF1ZW5jZSBvZiBi aXRzLiBFYWNoCisgKiBzZXJpYWxpc2VkIGRlbHRhIGluICdkZWx0YXMnIGhhcyBhIGZpeGVk IGJpdCB3aWR0aC4gSWYgdGhlIGRlbHRhJ3Mgd2lkdGgKKyAqIGV4Y2VlZHMgc29tZSBjcml0 aWNhbCBzaXplLCBkZWZpbmVkIGR1cmluZyBhbmFseXppbmcsIHRoZSBoaWdoZXIgYml0cyBv ZiB0aGlzCisgKiBkZWx0YSBpcyBwdXQgaW50byBleGNlcHRpb25zLCB3aGljaCBwb3NpdGlv biBpcyBzYXZlZCBpbnRvIHRoZSAnZXhjZXB0b24KKyAqIHBvc2l0aW9ucycgc2VjdGlvbi4g VXNhZ2Ugb2YgZXhjZXB0aW9ucyBjYW4gYmUgZGVsaWJlcmF0ZWx5IHR1cm5lZCBvZmYuCisg KgorICogSWYgc2lnbmVkIGRlbHRhcyBhcmUgdXNlZCwgdGhlIG1vZHVsZSBvZiBhIGRlbHRh IGlzIHJlcHJlc2VudGVkIGJ5IG1vc3QKKyAqIHNpZ2luaWZpY2FudCBiaXRzIGFuZCB0aGUg c2lnbiBpcyBzYXZlZCBhcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0OiAwIC0KKyAqIGRl bHRhIGlzIHBvc2l0aXZlLCAxIC0gZGVsdGEgaXMgbmVnYXRpdmUuCisgKgorICogREZvUiBz dXBwb3J0cyBib3RoIGV4dGVybmFsIG1lbW9yeSAob3V0ZXIgbWVtb3J5KSBwcm92aWRlZCBi eSBhIGNhbGxlcgorICogYW5kIGF1dG9tYXRpY2FsbHkgbWFuYWdlZCBtZW1vcnksIGFsbG9j YXRlZCBieSBtZWFucyBvZiBtYWxsb2MsIHBhbGxvYworICogb3Igc2ltaWxhciBmdW5jdGlv bnMuIE1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24gbXVzdCBiZSBkZWZpbmVkCisg KiBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIEFsbCBzdWJzZXF1ZW50IG9wZXJhdGlvbnMgZm9s bG93IHRoaXMKKyAqIGNvbmZpZ3VyYXRpb24uIEZvciBleGFtcGxlLCBhIGNhbGxlciBjYW4g cGxhY2UgYSBidWZmZXIgb24gdGhlIHN0YWNrIHRvCisgKiBhdm9pZCBoZWFwIGFsbG9jYXRp b24gYW5kIHBhc3MgdGhlIGJ1ZmZlciB0byBhIERGb1IgdW5pdC4gQXMgYSByZXN1bHQsCisg KiB0aGUgcGFja2luZyBhbmQgdW5wYWNraW5nIHByb2Nlc3NlcyBleGNsdWRlIGR5bmFtaWMg YWxsb2NhdGlvbi4KKyAqCisgKiBUaGUgREZvUiB1bml0IGlzIGltcGxlbWVudGVkIGFzIGEg c2V0IG9mIHRlbXBsYXRlcy4gRGV2ZWxvcGVycyBjYW4KKyAqIGdlbmVyYXRlIERGb1IgaW1w bGVtZW50YXRpb25zIGZvciBhbnkgdW5zaWduZWQgaW50ZWdlciB0eXBlICh1aW50OF90LAor ICogdWludDE2X3QsIHVpbnQzMl90LCB1aW50NjRfdCkuCisgKi8KKworI2luY2x1ZGUgImxp Yi9kZm9yX3RlbXBsX3N0YXBsZS5oIgorCitpbnQgZGZvcl9jYWxjX2RlbHRhcyhzaXplX3Qg Y250LCBjb25zdCBpdGVtX3QgYXJyW10sIHZlY3RfdCAqdkRlbHRhcywKKwkJCQkJIHVuaXFz b3J0dmVjdF90ICp1c3ZEZWx0YVdpZHRocywgdmVjdF90ICp2V2lkdGhDb3VudGVycywKKwkJ CQkJIGJvb2wgKnNpZ24pOworCitpbnQgZGZvcl9jYWxjX3dpZHRoKHNpemVfdCBjbnREZWx0 YSwKKwkJCQkJY29uc3QgdW5pcXNvcnR2ZWN0X3QgKnVzdkRlbHRhV2lkdGhzLAorCQkJCQlj b25zdCB2ZWN0X3QgKnZXaWR0aENvdW50ZXJzLCBzaXplX3QgKndpZHRoLAorCQkJCQlzaXpl X3QgKmNudEV4Y2VwdGlvbnMpOworCitpbnQgZGZvcl9hbmFseXplKHNpemVfdCBjbnQsIGNv bnN0IGl0ZW1fdCBhcnJbXSwKKwkJCSBkZm9yX21ldGFfdCAqZGZvciwgdmVjdF90ICp2RGVs dGFzLAorCQkJIHVuaXFzb3J0dmVjdF90ICp1c3ZFeGNQb3MpOworCitpbnQgZGZvcl9wYWNr KHNpemVfdCBjbnQsIGNvbnN0IGl0ZW1fdCBhcnJbXSwgZXhjYWxnX3QgaXNFeGNVc2FnZSwK KwkJCSAgZGZvcl9tZXRhX3QgKmRmb3IsIHNpemVfdCBidWZTaXplLCB1aW50OF90IGJ1Zltd KTsKKworaW50IGRmb3JfdW5wYWNrKGNvbnN0IGRmb3JfbWV0YV90ICpkZm9yLCB1bmlxc29y dHZlY3RfdCAqdlZhbHMsIHNpemVfdCBidWZTaXplLAorCQkJCXVpbnQ4X3QgYnVmW10pOwor Cit2b2lkIGRmb3JfY2xlYXJfbWV0YShkZm9yX21ldGFfdCAqZGZvcik7CisKK2Rmb3Jfc3Rh dHNfdCBkZm9yX2NhbGNfc3RhdHMoZGZvcl9tZXRhX3QgZGZvcik7CisKK3NpemVfdCBkZm9y X2NhbGNfbmJ5dGVzKGRmb3JfbWV0YV90IGRmb3IpOworCisvKgorICogQ2FsY3VsYXRlIGRl bHRhcworICoKKyAqIHZXaWR0aENvdW50ZXJzIGJlaW5nIGVxdWFsIHRvIE5VTEwgbWVhbnMg J0RvIG5vdCBjYWxjdWxhdGUgY291bnRzIG9mIHdpZHRocycuCisgKiBJbiB0aGlzIGNhc2Ug dXN2RGVsdGFXaWR0aCBjb21wcmlzZSBvbmx5IG9uZSBtZW1iZXIgbVswXSB3aGljaCBzYXZl cyBtYXgKKyAqIHdpZHRoIG9mIGRlbHRhLCB3aGljaCBjYW4gYmUgdXNlZCBieSBjYWxsZXIu CisgKgorICogVGhlIHZhbHVlIG9mIHRoZSBzaWduZWRfZGVsdGFzIGFyZ3VtZW50IGNhbiBi ZSBjaGFuZ2VkIGJ5IHRoaXMgZnVuY3Rpb24gZnJvbQorICogZmFsc2UgdG8gdHJ1ZSwgYnV0 IG5vdCB2aWNlIHZlcnNhLiBPbmNlIHNpZ25lZF9kZWx0YXMgaXMgc2V0IHRvIHRydWUsIGl0 IGNhbm5vdAorICogYmUgY2hhbmdlZC4KKyAqLworaW50CitkZm9yX2NhbGNfZGVsdGFzKHNp emVfdCBjbnQsIGNvbnN0IGl0ZW1fdCBhcnJbXSwgdmVjdF90ICp2RGVsdGFzLAorCQkJCSB1 bmlxc29ydHZlY3RfdCAqdXN2RGVsdGFXaWR0aHMsIHZlY3RfdCAqdldpZHRoQ291bnRlcnMs CisJCQkJIGJvb2wgKnNpZ25lZERlbHRhcykKK3sKKwlpdGVtX3QgZGVsdGE7CisJaXRlbV90 IHByZXY7IC8qIHZhbHVlIG9mIHByZXZpb3VzIG51bWJlciovCisJc2l6ZV90IHdpZHRoOwor CXNpemVfdCBtYXhJdGVtV2lkdGg7CisJaXRlbV90IG1heEl0ZW1NYXNrOworCWl0ZW1fdCBt YXhNb2R1bHVzT2ZEZWx0YTsKKworCXVzdl9pbnNfcmVzX3QgaW5zV2lkdGhJbnNlcnQ7CisK KwlpZiAodkRlbHRhcyA9PSBOVUxMIHx8IHVzdkRlbHRhV2lkdGhzID09IE5VTEwgfHwgc2ln bmVkRGVsdGFzID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCXZlY3RfY2xlYXIodkRlbHRh cyk7CisJdmVjdF9jbGVhcih1c3ZEZWx0YVdpZHRocyk7CisKKwlpZiAodldpZHRoQ291bnRl cnMgPT0gTlVMTCkKKwkJdXN2X2luc2VydCh1c3ZEZWx0YVdpZHRocywgMCk7CisJZWxzZQor CQl2ZWN0X2NsZWFyKHZXaWR0aENvdW50ZXJzKTsKKworCS8qCisJICogV2UgdXNlIHRoZSBt YXhpbXVtIHBvc3NpYmxlIGl0ZW0gd2lkdGggaGVyZSB3aGljaCBpcyBlcXVhbCBybyB0aGUg d2lkdGgKKwkgKiBvZiBpdGVtX3QuIFRPRE86IHdlIGNhbiBhbmFseXplIGl0ZW1zIGFuZCBj YWxjdWxhdGUgdGhlIHJlYWwgbWF4IGl0ZW0KKwkgKiB3aWR0aC4gVGhpcyBtdXN0IGltcHJv dmUgY29tcHJlc3Npb24gcmF0aW8uCisJICovCisJbWF4SXRlbVdpZHRoID0gc2l6ZW9mKGl0 ZW1fdCkgKiA4OworCW1heEl0ZW1NYXNrID0gd2lkdGhfdG9fbWFzayhtYXhJdGVtV2lkdGgp OworCW1heE1vZHVsdXNPZkRlbHRhID0gKCpzaWduZWREZWx0YXMpID8gbWF4SXRlbU1hc2sg Pj4gMSA6IG1heEl0ZW1NYXNrOworCisJcHJldiA9IDA7CisJZm9yIChzaXplX3QgaiA9IDA7 IGogPCBjbnQ7IGorKykKKwl7CisJCWJvb2wgbmVnRGVsdGEgPSBhcnJbal0gPCBwcmV2Owor CisJCWlmIChuZWdEZWx0YSkKKwkJeworCQkJaWYgKHVubGlrZWx5KCpzaWduZWREZWx0YXMg PT0gZmFsc2UpKQorCQkJeyAvKiBSZWNhbGN1bGF0ZSBhbGwgZGVsdGFzIGFzIHNpZ25lZC4g Ki8KKwkJCQkqc2lnbmVkRGVsdGFzID0gdHJ1ZTsKKwkJCQlyZXR1cm4gZGZvcl9jYWxjX2Rl bHRhcyhjbnQsIGFyciwgdkRlbHRhcywgdXN2RGVsdGFXaWR0aHMsCisJCQkJCQkJCQkJdldp ZHRoQ291bnRlcnMsIHNpZ25lZERlbHRhcyk7CisJCQl9CisJCQlBc3NlcnQoKnNpZ25lZERl bHRhcyA9PSB0cnVlKTsKKwkJCWRlbHRhID0gcHJldiAtIGFycltqXTsKKwkJfQorCQllbHNl CisJCQlkZWx0YSA9IGFycltqXSAtIHByZXY7CisKKwkJaWYgKGRlbHRhID4gbWF4TW9kdWx1 c09mRGVsdGEpCisJCXsKKwkJCUFzc2VydCgqc2lnbmVkRGVsdGFzID09IHRydWUpOworCQkJ LyogVXNlIHRyaWNrIHdpdGggb3ZlcmxhcHBpbmcgaGVyZSAqLworCQkJZGVsdGEgPSBtYXhJ dGVtTWFzayAtIGRlbHRhICsgMTsKKwkJCW5lZ0RlbHRhID0gIW5lZ0RlbHRhOworCQl9CisK KwkJQXNzZXJ0KGRlbHRhIDw9IG1heE1vZHVsdXNPZkRlbHRhKTsKKworCQlpZiAoKnNpZ25l ZERlbHRhcyA9PSB0cnVlKQorCQl7CisJCQl1aW50OCBzaWduQ29kZSA9IChuZWdEZWx0YSkg PyAxIDogMDsKKwkJCWRlbHRhID0gZGVsdGEgPDwgMSB8IHNpZ25Db2RlOworCQkJd2lkdGgg PSAoZGVsdGEgPT0gMCkgPyAyIDogd2lkdGhfZnJvbV92YWwoZGVsdGEpOworCQl9CisJCWVs c2UKKwkJCXdpZHRoID0gd2lkdGhfZnJvbV92YWwoZGVsdGEpOworCisJCXZlY3RfYXBwZW5k KHZEZWx0YXMsIGRlbHRhKTsKKworCQlpZiAodldpZHRoQ291bnRlcnMgPT0gTlVMTCkKKwkJ eworCQkJaWYgKHVzdkRlbHRhV2lkdGhzLT5tWzBdIDwgd2lkdGgpCisJCQkJdXN2RGVsdGFX aWR0aHMtPm1bMF0gPSB3aWR0aDsKKwkJfQorCQllbHNlCisJCXsKKwkJCWluc1dpZHRoSW5z ZXJ0ID0gdXN2X2luc2VydCh1c3ZEZWx0YVdpZHRocywgd2lkdGgpOworCisJCQlpZiAoaW5z V2lkdGhJbnNlcnQuc3QgPT0gVVNWX0lOU19ORVcpCisJCQkJdmVjdF9pbnNlcnQodldpZHRo Q291bnRlcnMsIGluc1dpZHRoSW5zZXJ0LnBvcywgKGl0ZW1fdCkxKTsKKwkJCWVsc2UgaWYg KGluc1dpZHRoSW5zZXJ0LnN0ID09IFVTVl9JTlNfRVhJU1RTKQorCQkJCXZXaWR0aENvdW50 ZXJzLT5tW2luc1dpZHRoSW5zZXJ0LnBvc10rKzsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gLTE7 CisJCX0KKwkJcHJldiA9IGFycltqXTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBD YWxjdWxhdGUgd2lkdGggb2Ygc2hvcnQgZGVsdGFzLCB3aWR0aCBvZiBleGNlcHRpb25zLCBh bmQgbnVtYmVyIG9mCisgKiBleGNlcHRpb25zCisgKi8KK2ludAorZGZvcl9jYWxjX3dpZHRo KHNpemVfdCBjbnREZWx0YSwgY29uc3QgdW5pcXNvcnR2ZWN0X3QgKnVzdkRlbHRhV2lkdGhz LAorCQkJCWNvbnN0IHZlY3RfdCAqdldpZHRoQ291bnRlcnMsIHNpemVfdCAqd2lkdGgsCisJ CQkJc2l6ZV90ICpjbnRFeGNlcHRpb25zKQoreworI2RlZmluZSBNSU5fREVMVEFTX1FVQU5U SVRZX0FMTE9XSU5HX0VYQ0VQVElPTlMgNAorCisJc2l6ZV90IGNudFNob3J0RGVsdGFzOyAv KiBudW1iZXIgb2YgZGVsdGFzIHByZXNlbnRlZCB3aXRob3V0IGV4Y2VwdGlvbnMgKi8KKwlz aXplX3QgaW5keFdpZHRoOwkvKiB0aGUgd2lkdGggb2Ygc2hvcnQgZGVsdGFzIChpbmRleCBm cm9tIHZXaWR0aENvdW50ZXJzCisJCQkJCQkgKiAoYW5kIGZyb20gdkRlbHRhV2lkdGggYWNj b3JkaW5nbHkpCisJCQkJCQkgKi8KKwlpZiAodXN2RGVsdGFXaWR0aHMgPT0gTlVMTCB8fCB2 V2lkdGhDb3VudGVycyA9PSBOVUxMIHx8IHdpZHRoID09IE5VTEwgfHwKKwkJY250RXhjZXB0 aW9ucyA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwljbnRTaG9ydERlbHRhcyA9IGNudERl bHRhOworCWluZHhXaWR0aCA9IHVzdkRlbHRhV2lkdGhzLT5jbnQgLSAxOyAvKiBjb3VudGVy IGludG8gaW5kZXggKi8KKwkqY250RXhjZXB0aW9ucyA9IDA7CisKKwkvKgorCSAqIEhlcmUg d2UgdHJ5IHRvIGRlY3JlYXNlIHRoZSB3aWR0aCBvZiBzaG9ydCBkZWx0YXMgaW4gb3JkZXIg dG8gY29tcHJlc3MKKwkgKiB0aGUgYXJyYXkgb2YgZGVsdGFzIGluIHRoZSBtZWFudGltZSB3 ZSBhcmUgZWFnZXIgdG8gY292ZXIgbm8gbGVzcyB0aGFuCisJICogOTAlIG9mIGRlbHRhcyB3 ZSBoYXZlLiBJdCBpcyBhbiBoZXVyaXN0aWMgYW5hbHlzaXMgYmFzZWQgb24gdGhlCisJICog c3VnZ2VzdGlvbiAibm8gbGVzcyB0aGFuIDkwJSBvZiBkZWx0YXMgd2UgaGF2ZSIuCisJICoK KwkgKiBUT0RPOiBhbmFseXppbmcgd2UgbWlnaHQgd2FudCBjYWx1bGF0ZSB0aGUgZnVsbCBz aXplIG9mIHRoZSBwYWNrIGZvciBlYWNoCisJICogdmFyaWFudCBvZiB0aGUgd2lkdGguCisJ ICovCisJaWYgKGNudERlbHRhID49IE1JTl9ERUxUQVNfUVVBTlRJVFlfQUxMT1dJTkdfRVhD RVBUSU9OUykgeworCQlzaXplX3Qgc3pNaW5Db3ZlcmFnZTsgLyogdGhyZXNob2xkICovCisJ CXNpemVfdCBqOworCisJCWlmIChjbnREZWx0YSA+PSAxMCkKKwkJCXN6TWluQ292ZXJhZ2Ug PSBjbnREZWx0YSAtIGNudERlbHRhIC8gMTA7CisJCWVsc2UKKwkJCXN6TWluQ292ZXJhZ2Ug PSBjbnREZWx0YSAtIDE7CisKKwkJaiA9IGluZHhXaWR0aDsKKworCQl3aGlsZSAoaiA+IDAp IHsKKwkJCWlmIChjbnRTaG9ydERlbHRhcyAtIHZXaWR0aENvdW50ZXJzLT5tW2pdIDwgc3pN aW5Db3ZlcmFnZSkKKwkJCQlicmVhazsKKworCQkJY250U2hvcnREZWx0YXMgLT0gdldpZHRo Q291bnRlcnMtPm1bal07CisJCQlqLS07CisJCQlpbmR4V2lkdGggPSBqOworCQl9CisJCSpj bnRFeGNlcHRpb25zID0gY250RGVsdGEgLSBjbnRTaG9ydERlbHRhczsKKwl9CisKKwkqd2lk dGggPSB1c3ZEZWx0YVdpZHRocy0+bVtpbmR4V2lkdGhdOworCXJldHVybiAwOworfQorCisv KgorICogZGZvcl9hbmFseXplCisgKiBBbmFseXplIGlucHV0IGFycmF5LCBjYWxjdWxhdGUg ZGVsdGFzIGFuZCB0aGVpciB3aWR0aCwgZGVmaW5lIGV4Y2VwdGlvbnMgYW5kCisgKiB0aGVp ciBwb3NpdGlvbnMuIFJldHVybnMgdGhlbSB0aHJvdWdoIHRoZSBkZm9yLCB2RGVsdGFzLCB1 c3ZFeGNQb3MuIElmCisgKiB1c3ZFeGNQb3MgPT0gTlVMTCAtIGRvbid0IGNhbGN1bGF0ZSBl eGNlcHRpb25zLgorICoKKyAqIGRmb3JfYW5hbHl6ZSBmdW5jdGlvbiBkb2VzIG5vdCB1c2Ug ZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgaXRzCisgKiBsb2NhbCBjb250YWluZXJz LgorICoKKyAqIEEgY2FsbGVyIGhhcyB0byBjb250cm9sIHdoZXRoZXIgdkRlbHRhcyBhbmQg dXN2RXhjUG9zIHVzZSBvdXRlciBtZW1vcnkKKyAqIHByb3ZpZGVkIGJ5IGNhbGxlciBvciBt YW5hZ2UgbWVtb3J5IGFsbG9jYXRpb24gYXV0b21hdGljYWxseSwgd2hpY2ggZGVmaW5lcwor ICogd2hldGhlciB2ZWN0X2luc2VydCBhbmQgdmVjdF9hcHBlbmQgZnVuY3Rpb25zLCBpbnZv a2VkIGZyb20gaGVyZSwgdXNlIGR5bmFtaWMKKyAqIG1lbW9yeSBvciBub3QuCisgKgorICog QSBjYWxsZXIgc2hvdWxkIHRha2UgaW50byBhY2NvdW50IHRoYXQgZGZvcl9tZXRhX3QgZGZv ciBhcmUgZ29pbmcgdG8gYmUKKyAqIG51bGxpZmllZCBpbiB0aGlzIGZ1bmN0aW9uLCBzbyBp dCBzaG91bGQgbm90IGhhdmUgYW55IG1lYW5pbmdmdWxsIGRhdGEgYnkKKyAqIHN0YXJ0IG9m IGRmb3JfYW5hbHl6ZSwgZXNwZWNpYWxseSBpdHMgcGFjayBmaWVsZCBzaG91bGQgbm90IGJl IHVzZWQgYXMgYQorICogcG9pbnRlciBvbiBkeW5hbWljIG1lbW9yeSwgb3RoZXJ3aXNlIG1l bW9yeSBsZWFrYWdlIGlzIHBvc3NpYmxlLgorICoKKyAqLworaW50CitkZm9yX2FuYWx5emUo c2l6ZV90IGNudCwgY29uc3QgaXRlbV90IGFycltdLCAvKiBpbnB1dCAqLworCQkJIGRmb3Jf bWV0YV90ICpkZm9yLCB2ZWN0X3QgKnZEZWx0YXMsCisJCQkgdW5pcXNvcnR2ZWN0X3QgKnVz dkV4Y1BvcykgLyogb3V0cHV0ICovCit7CisjZGVmaW5lIERFTFRBX1dJRFRIX01BWF9OVU1C RVIgKHNpemVvZihpdGVtX3QpICogOCkKKwl1bmlxc29ydHZlY3RfdCB1c3ZEZWx0YVdpZHRo czsKKwlpdGVtX3QgYnVmRGVsdGFXaWR0aFtERUxUQV9XSURUSF9NQVhfTlVNQkVSXTsKKwl2 ZWN0X3QgdldpZHRoQ291bnRlcnM7CisJaXRlbV90IGJ1ZldpZHRoQ291bnRlcnNbREVMVEFf V0lEVEhfTUFYX05VTUJFUl07CisJaXRlbV90IG1hc2s7CisJaW50IHJlcyA9IC0xOworCisJ ZXhjYWxnX3QgaXNFeGNVc2FnZSA9ICh1c3ZFeGNQb3MgPT0gTlVMTCkgPyBERk9SX0VYQ19E T05UX1VTRSA6CisJCQkJCQkJCQkJCQlERk9SX0VYQ19VU0U7CisKKwlpZiAoZGZvciA9PSBO VUxMKQorCQlnb3RvIGRmb3JfYW5hbHl6ZV9lcnJvcjsKKworCW1lbXNldChkZm9yLCAwLCBz aXplb2YoZGZvcl9tZXRhX3QpKTsKKworCWlmIChjbnQgPT0gMCkKKwkJLyogZGZvci0+aXRl bV9jbnQgPSAwOyAqLyAvKiBpdCdzIGJlZW4gYWxyZWFkeSBkb25lIHdpdGggbWVtc2V0ICov CisJCWdvdG8gZGZvcl9hbmFseXplX3JldDsKKwllbHNlIGlmIChhcnIgPT0gTlVMTCkKKwkJ Z290byBkZm9yX2FuYWx5emVfZXJyb3I7CisKKwlpZiAoMCAhPSB2ZWN0X2luaXQoJnVzdkRl bHRhV2lkdGhzLCBERUxUQV9XSURUSF9NQVhfTlVNQkVSLCBidWZEZWx0YVdpZHRoKSkKKwkJ Z290byBkZm9yX2FuYWx5emVfZXJyb3I7CisKKwlpZiAoaXNFeGNVc2FnZSA9PSBERk9SX0VY Q19VU0UpCisJeworCQlpZiAoMCAhPQorCQkJdmVjdF9pbml0KCZ2V2lkdGhDb3VudGVycywg REVMVEFfV0lEVEhfTUFYX05VTUJFUiwKKwkJCQkJICBidWZXaWR0aENvdW50ZXJzKSkKKwkJ CWdvdG8gZGZvcl9hbmFseXplX2Vycm9yOworCX0KKworCWRmb3ItPml0ZW1fY250ID0gY250 OworCWRmb3ItPnNpZ25lZF9kZWx0YXMgPSBmYWxzZTsKKwlpZiAoMCAhPQorCQlkZm9yX2Nh bGNfZGVsdGFzKGRmb3ItPml0ZW1fY250LCBhcnIsIHZEZWx0YXMsICZ1c3ZEZWx0YVdpZHRo cywKKwkJCQkJCSAoaXNFeGNVc2FnZSA9PSBERk9SX0VYQ19VU0UpID8gJnZXaWR0aENvdW50 ZXJzIDogTlVMTCwKKwkJCQkJCSAmZGZvci0+c2lnbmVkX2RlbHRhcykpCisJCWdvdG8gZGZv cl9hbmFseXplX2Vycm9yOworCisJQXNzZXJ0KGNudCA9PSB2RGVsdGFzLT5jbnQpOworCUFz c2VydCh1c3ZEZWx0YVdpZHRocy5jbnQgPiAwKTsKKworCWlmIChpc0V4Y1VzYWdlID09IERG T1JfRVhDX1VTRSkKKwl7CisJCWlmICgwICE9CisJCQlkZm9yX2NhbGNfd2lkdGgodkRlbHRh cy0+Y250LCAmdXN2RGVsdGFXaWR0aHMsICZ2V2lkdGhDb3VudGVycywKKwkJCQkJCQkmZGZv ci0+ZGVsdGFfd2lkLCAmZGZvci0+ZXhjX2NudCkpCisJCQlnb3RvIGRmb3JfYW5hbHl6ZV9l cnJvcjsKKwl9CisJZWxzZQorCXsKKwkJZGZvci0+ZGVsdGFfd2lkID0KKwkJCXVzdkRlbHRh V2lkdGhzLm1bdXN2RGVsdGFXaWR0aHMuY250IC0gMV07IC8qIG1heCB3aWR0aCAqLworCQlk Zm9yLT5leGNfY250ID0gMDsKKwl9CisKKwlkZm9yLT5leGNfd2lkID0gdXN2RGVsdGFXaWR0 aHMubVt1c3ZEZWx0YVdpZHRocy5jbnQgLSAxXSAtIGRmb3ItPmRlbHRhX3dpZDsKKworCS8q IEEgbWFzayBsb29rcyBsaWtlIDAwMDExMTEuIEl0IGlzIGFsc28gdGhlIG1heCB2YWx1ZSBv ZiBhIHNob3J0IGRlbHRhICovCisJbWFzayA9IHdpZHRoX3RvX21hc2soZGZvci0+ZGVsdGFf d2lkKTsKKworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdkRlbHRhcy0+Y250OyBpKyspCisJ eworCQlpZiAodkRlbHRhcy0+bVtpXSA+IG1hc2spCisJCXsKKwkJCUFzc2VydChpc0V4Y1Vz YWdlID09IERGT1JfRVhDX1VTRSk7CisJCQlpZiAoMCAhPSB2ZWN0X2FwcGVuZCh1c3ZFeGNQ b3MsIChpdGVtX3QpaSkpCisJCQkJZ290byBkZm9yX2FuYWx5emVfZXJyb3I7CisJCX0KKwl9 CisJQXNzZXJ0KGRmb3ItPmRlbHRhX3dpZCArIGRmb3ItPmV4Y193aWQgPD0gc2l6ZW9mKGl0 ZW1fdCkgKiA4KTsKKwlyZXMgPSAwOworZGZvcl9hbmFseXplX3JldDoKKwlyZXR1cm4gcmVz OworZGZvcl9hbmFseXplX2Vycm9yOgorCS8qIGRmb3JfYW5hbHl6ZSBkb2Vzbid0IGFmZmVj dCB0aGUgcGFjayBmaWVsZCAoZG9lc24ndCBhbGxvY2F0ZSwgZGVsZXRlIG9yCisJICogb3Ro ZXJ3aXNlKSwgc28gd2UgY2FuIG51bGxpZnkgdGhlIHdob2xlIGRmb3IgYW5kIGl0CisJICog aXMgc2FmZSwgbm8gbGVha2FnZSAqLworCW1lbXNldChkZm9yLCAwLCBzaXplb2YoZGZvcl9t ZXRhX3QpKTsKKwlyZXMgPSAtMTsKKwlnb3RvIGRmb3JfYW5hbHl6ZV9yZXQ7Cit9CisKKy8q CisgKiBkZm9yX3BhY2sKKyAqCisgKiBUaGUgaW5wdXQgYXJyYXkgYXJyIGhhcyB0byBiZSBz b3J0ZWQuCisgKgorICogSWYgYSBjYWxsZXIgbmVlZHMgdG8gYXZvaWQgdXNpbmcgZHluYW1p YyBtZW1vcnkgYWxsb2NhdGlvbiwgdGhleSBoYXZlIHRvCisgKiBwcm92aWRlIHRoZSBleHRl cm5hbCBtZW1vcnkgYnVmZmVyLiBUaGUgc2l6ZSBvZiB0aGlzIGJ1ZmZlciBzaG91bGQgYmUg bm90CisgKiBsZXNzIHRoYW4gNCAqIGNudCAqIHNpemVvZihpdGVtX3QpLiBJdCB3aWxsIGJl IHVzZWQgZm9yIGFycmF5cyBwb2ludGVkIGJ5CisgKiAqKGRmb3ItPnBhY2spLCAqKHZEZWx0 YXMtPm0pLCAqKHZFeGNQb3NEZWx0YXMtPm0pLCAqKHVzdkV4Y1Bvcy0+bSkuCisgKgorICog SWYgZHluYW1pYyBhbGxvY2F0aW9uIGhhcyBiZWVuIHVzZWQgYnkgdGhlIGRmb3JfcGFjaywg YSBjYWxsZXIgaGFzIHRvIGZyZWUKKyAqIHRoZSBwaWVjZSBvZiBtZW1vcnkgcG9pbnRlZCBi eSBkZm9yLT5wYWNrLCBzaW5jZSBpdCBpcyBhbG9jYXRlZCBieSB0aGUKKyAqIGRmb3JfcGFj ayB3aXRoIERGT1JfTUFMTE9DLiBGcmVlaW5nIGhhcyB0byBiZSBwZXJmb3JtZWQgYnkgZnVu Y3Rpb24KKyAqIGNvbmZvcm1pbmcgdG8gREZPUl9NQUxMT0MgKHBhaXJlZCB3aXRoIGl0KS4g Rm9yIGluc3RhbmNlLCBpZiBERk9SX01BTExPQyBpcworICogbWFsbG9jLCB0aGFuIG1lbW9y eSBzaG91bGQgYmUgZnJlZWQgYnkgZnJlZS4KKyAqLworaW50CitkZm9yX3BhY2soc2l6ZV90 IGNudCwgY29uc3QgaXRlbV90IGFycltdLCBleGNhbGdfdCBpc0V4Y1VzYWdlLAorCQkgIGRm b3JfbWV0YV90ICpkZm9yLCBzaXplX3QgYnVmU2l6ZSwgdWludDhfdCBidWZbXSkKK3sKKwlp bnQgcmVzOworCXZlY3RfdCB2RGVsdGFzID0geyAwIH07CisJdmVjdF90IHZFeGNQb3NEZWx0 YXMgPSB7IDAgfTsKKwl1bmlxc29ydHZlY3RfdCB1c3ZFeGNQb3MgPSB7IDAgfTsKKworCWlm IChkZm9yID09IE5VTEwgfHwKKwkJKGJ1ZlNpemUgIT0gMCAmJiBidWZTaXplIDwgNCAqIGNu dCAqIHNpemVvZihpdGVtX3QpKSkKKwl7CisJCWdvdG8gZGZvcl9wYWNrX2Vycm9yOworCX0K KworCS8qCisJICogV2UgZG9uJ3QgbmVlZCBpdCBoZXJlOgorCSAqIAkJCW1lbXNldChkZm9y LCAwLCBzaXplb2YoZGZvcl9tZXRhX3QpKS4KKwkgKiBJdCBpcyBnb2luZyB0byBiZSBkb25l IGluIGRmb3JfYW5hbHl6ZS4KKwkgKi8KKworCXsKKwkJaXRlbV90ICpkZWx0YUJ1ZiA9IE5V TEw7CisJCWl0ZW1fdCAqZXhjUG9zRGVsdGFzQnVmID0gTlVMTDsKKwkJaXRlbV90ICpleGNQ b3NCdWYgPSBOVUxMOworCisJCWludCByZXMxID0gMDsKKwkJaW50IHJlczIgPSAwOworCQlp bnQgcmVzMyA9IDA7CisKKwkJaWYgKGJ1ZlNpemUgIT0gMCkKKwkJeworCQkJLyogU3RlcCBv dmVyIHRoZSBtYXhpbWFsIGFsbG93ZWQgREZvUiBwYWNrIHNpemUgKi8KKwkJCWRlbHRhQnVm CQk9IChpdGVtX3QqKShidWYgKyBjbnQgKiBzaXplb2YoaXRlbV90KSk7CisJCQlleGNQb3NE ZWx0YXNCdWYgPSAoaXRlbV90KikoYnVmICsgY250ICogc2l6ZW9mKGl0ZW1fdCkgKiAyKTsK KwkJCWV4Y1Bvc0J1ZgkJPSAoaXRlbV90KikoYnVmICsgY250ICogc2l6ZW9mKGl0ZW1fdCkg KiAzKTsKKwkJfQorCisJCS8qIFNldHVwIGNvbnRhaW5lcnMgd2l0aCBvdXRlciBtZW1vcnkg Ki8KKwkJcmVzMSA9IHZlY3RfaW5pdCgmdkRlbHRhcywgY250LCBkZWx0YUJ1Zik7CisKKwkJ aWYgKGlzRXhjVXNhZ2UpCisJCXsKKwkJCXJlczIgPSB2ZWN0X2luaXQoJnZFeGNQb3NEZWx0 YXMsIGNudCwgZXhjUG9zRGVsdGFzQnVmKTsKKwkJCXJlczMgPSB2ZWN0X2luaXQoJnVzdkV4 Y1BvcywgY250LCBleGNQb3NCdWYpOworCQl9CisKKwkJaWYgKHJlczEgIT0gMCB8fCByZXMy ICE9IDAgfHwgcmVzMyAhPSAwKQorCQkJZ290byBkZm9yX3BhY2tfZXJyb3I7CisJfQorCisJ aWYgKDAgIT0KKwkJZGZvcl9hbmFseXplKGNudCwgYXJyLCBkZm9yLCAmdkRlbHRhcywKKwkJ CQkJIChpc0V4Y1VzYWdlID09IERGT1JfRVhDX1VTRSkgPyAmdXN2RXhjUG9zIDogTlVMTCkp CisJCWdvdG8gZGZvcl9wYWNrX2Vycm9yOworCisJaWYgKGRmb3ItPmV4Y19jbnQgIT0gMCkK Kwl7CisJCS8qIFdlIHRyZWF0IGV4Y2VwdGlvbiBwb3NpdGlvbnMgYXMgYSBzb3J0ZWQgc2Vx dWVuY2UsIGFwcGx5IHRoZQorCQkgKiBERm9SIGFsZ29yaXRobSB0byBpdCwgYW5kIHNhdmUg bm90IHRoZWlyIGFic29sdXRlIHZhbHVlcyBidXQgdGhlaXIKKwkJICogZGVsdGFzLiAqLwor CQlkZm9yX21ldGFfdCBkZm9yRXhjUG9zOworCQlBc3NlcnQoZGZvci0+ZXhjX2NudCA9PSB1 c3ZFeGNQb3MuY250KTsKKwkJaWYgKDAgIT0KKwkJCWRmb3JfYW5hbHl6ZSh1c3ZFeGNQb3Mu Y250LCB1c3ZFeGNQb3MubSwgJmRmb3JFeGNQb3MsCisJCQkJCQkgJnZFeGNQb3NEZWx0YXMs IE5VTEwpKQorCQkJZ290byBkZm9yX3BhY2tfZXJyb3I7CisKKwkJQXNzZXJ0KGRmb3ItPmV4 Y19jbnQgPT0gdkV4Y1Bvc0RlbHRhcy5jbnQpOworCQlBc3NlcnQoZGZvci0+ZXhjX2NudCA9 PSBkZm9yRXhjUG9zLml0ZW1fY250KTsKKworCQlkZm9yLT5leGNfcG9zX3dpZCA9IGRmb3JF eGNQb3MuZGVsdGFfd2lkOworCX0KKwllbHNlCisJeworCQlBc3NlcnQodXN2RXhjUG9zLmNu dCA9PSAwKTsgLyogdXN2RXhjUG9zIGhhcyB0byByZW1haW4gemVyb2VkLiAqLworCQlBc3Nl cnQoZGZvci0+ZXhjX3dpZCA9PSAwKTsgLyogTm8gZXhjZXB0aW9ucywgbm8gZXhjZXB0aW9u cycgd2lkdGguICovCisJCUFzc2VydChkZm9yLT5leGNfcG9zX3dpZCA9PSAwKTsgLyogTm8g ZXhjZXB0aW9ucycgcG9zaXRpb25zIHdpZHRoIHRvby4gKi8KKwl9CisKKwkvKiBkZm9yX3Bh Y2sgc2VyaWFsaXNhdGlvbiBwYWNraW5nICovCisJeworCQkvKiBpbmRleCBvZiB0aGUgbmV4 dCBmcmVlIGJpdCB0byBiZSB1c2VkOiAqLworCQlzaXplX3QgZDsgLyogLSBieSBhIGRlbHRh ICovCisJCXNpemVfdCBlOyAvKiAtIGJ5IGFuIGV4Y2VwdGlvbiAqLworCQlzaXplX3QgcDsg LyogLSBieSBhbiBleGNlcHRpb24gcG9zaXRpb24gKi8KKwkJaXRlbV90IG1hc2s7CisJCWRm b3Jfc3RhdHNfdCBzdGF0czsKKwkJc2l6ZV90IGo7CisKKwkJc3RhdHMgPSBkZm9yX2NhbGNf c3RhdHMoKmRmb3IpOworCQlkZm9yLT5uYnl0ZXMgPSBkZm9yX2NhbGNfbmJ5dGVzKCpkZm9y KTsKKworCQlpZiAoYnVmU2l6ZSAhPSAwKQorCQl7CisJCQkvKiBNYXggc2l6ZSBvZiB0aGUg ZGZvci0+cGFjayBpcyBjbnQgKiBzaXplb2Yoc2l6ZV90KSAqLworCQkJZGZvci0+cGFjayA9 IGJ1ZjsKKwkJCWRmb3ItPm91dGVyX21lbSA9IHRydWU7CisJCQlpZiAoZGZvci0+bmJ5dGVz ID4gY250ICogc2l6ZW9mKHNpemVfdCkpCisJCQkJZ290byBkZm9yX3BhY2tfZXJyb3I7CisJ CX0KKwkJZWxzZQorCQl7CisJCQkvKiBJZiBhIGJ1ZmZlciB3YXMgbm90IHByb3ZpZGVkIGJ5 IGNhbGxlciB3ZSBhbGxvY2F0ZSBpdCBieQorCQkJICogb3Vyc2VsdmVzCisJCQkgKi8KKwkJ CWRmb3ItPnBhY2sgPSAodWludDhfdCAqKURGT1JfTUFMTE9DKChkZm9yLT5uYnl0ZXMpKTsK KworCQkJZGZvci0+b3V0ZXJfbWVtID0gZmFsc2U7CisJCX0KKworCQlpZiAoZGZvci0+cGFj ayA9PSBOVUxMKQorCQkJZ290byBkZm9yX3BhY2tfZXJyb3I7CisKKwkJbWVtc2V0KGRmb3It PnBhY2ssIDAsIGRmb3ItPm5ieXRlcyk7CisKKwkJLyogaW5kZXggb2YgdGhlIG5leHQgZnJl ZSBiaXQgdG8gYmUgdXNlZDogKi8KKwkJZCA9IDA7CQkJCQkJCS8qIC0gYnkgYSBkZWx0YSAq LworCQllID0gc3RhdHMuZGVsdGFfcGFja19uYml0czsJCS8qIC0gYnkgYW4gZXhjZXB0aW9u ICovCisJCXAgPSBlICsgc3RhdHMuZXhjX3BhY2tfbmJpdHM7CS8qIC0gYnkgYW4gZXhjZXB0 aW9uIHBvc2l0aW9uIGluZGV4ICovCisJCS8qIEEgbWFzayBsb29rcyBsaWtlIDAwMDExMTEu IEl0IGlzIGFsc28gdGhlCisJCSAqIG1heCB2YWx1ZSBvZiBhIHNob3J0IGRlbHRhICovCisJ CW1hc2sgPSB3aWR0aF90b19tYXNrKGRmb3ItPmRlbHRhX3dpZCk7CisKKwkJaiA9IDA7CisJ CWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdkRlbHRhcy5jbnQ7IGkrKykKKwkJeworCQkJZCA9 IGJpdHBhY2tfcGFjayhkZm9yLT5wYWNrLCBkLCB2RGVsdGFzLm1baV0gJiBtYXNrLAorCQkJ CQkJCSBkZm9yLT5kZWx0YV93aWQpOworCisJCQlpZiAodkRlbHRhcy5tW2ldID4gbWFzaykK KwkJCXsKKwkJCQlBc3NlcnQoaXNFeGNVc2FnZSA9PSBERk9SX0VYQ19VU0UpOworCQkJCUFz c2VydCh1c3ZFeGNQb3MubVtqXSA9PSBpKTsKKwkJCQlBc3NlcnQoaiA8IHVzdkV4Y1Bvcy5j bnQpOworCQkJCUFzc2VydChqIDwgdkV4Y1Bvc0RlbHRhcy5jbnQpOworCQkJCUFzc2VydChk Zm9yLT5leGNfd2lkICE9IDApOworCQkJCUFzc2VydChkZm9yLT5leGNfcG9zX3dpZCAhPSAw KTsKKworCQkJCWUgPSBiaXRwYWNrX3BhY2soZGZvci0+cGFjaywgZSwgdkRlbHRhcy5tW2ld ID4+IGRmb3ItPmRlbHRhX3dpZCwKKwkJCQkJCQkJIGRmb3ItPmV4Y193aWQpOworCQkJCXAg PSBiaXRwYWNrX3BhY2soZGZvci0+cGFjaywgcCwgdkV4Y1Bvc0RlbHRhcy5tW2pdLCBkZm9y LT5leGNfcG9zX3dpZCk7CisJCQkJaisrOworCQkJfQorCQl9CisKKwkJaWYgKGlzRXhjVXNh Z2UgPT0gREZPUl9FWENfVVNFKQorCQkJQXNzZXJ0KGogPT0gdXN2RXhjUG9zLmNudCk7CisJ CWVsc2UKKwkJCUFzc2VydChqID09IDApOworCisJCUFzc2VydChkID09IHN0YXRzLmRlbHRh X3BhY2tfbmJpdHMpOworCQlBc3NlcnQoZSA9PSBzdGF0cy5kZWx0YV9wYWNrX25iaXRzICsg c3RhdHMuZXhjX3BhY2tfbmJpdHMpOworCQlBc3NlcnQocCA9PQorCQkJICAgc3RhdHMuZGVs dGFfcGFja19uYml0cyArIHN0YXRzLmV4Y19wYWNrX25iaXRzICsKKwkJCQkgICBzdGF0cy5l eGNfcG9zX3BhY2tfbmJpdHMpOworCQlyZXMgPSAwOworCX0KK2Rmb3JfcGFja19yZXQ6CisJ dmVjdF9jbGVhcigmdXN2RXhjUG9zKTsKKwl2ZWN0X2NsZWFyKCZ2RXhjUG9zRGVsdGFzKTsK Kwl2ZWN0X2NsZWFyKCZ2RGVsdGFzKTsKKwlyZXR1cm4gcmVzOworZGZvcl9wYWNrX2Vycm9y OgorCWlmIChkZm9yICE9IE5VTEwpCisJCWRmb3JfY2xlYXJfbWV0YShkZm9yKTsKKwlyZXMg PSAtMTsKKwlnb3RvIGRmb3JfcGFja19yZXQ7Cit9CisKKy8qCisgKiBkZm9yX3VucGFjawor ICoKKyAqIElmIGEgY2FsbGVyIG5lZWRzIHRvIGF2b2lkIHVzaW5nIGR5bmFtaWMgbWVtb3J5 IGFsbG9jYXRpb24sIHRoZXkgaGF2ZSB0bzoKKyAqIDEpIHByb3ZpZGUgdGhlIGV4dGVybmFs IG1lbW9yeSBidWZmZXIuIFRoZSBzaXplIG9mIHRoaXMgYnVmZmVyIHNob3VsZCBiZSBub3QK KyAqICAgIGxlc3MgdGhhbjoKKyAqICAgICAgICAJMiAqIGRmb3IuaXRlbV9jbnQgKiBzaXpl b2YoaXRlbV90KSArIDIgKiBkZm9yLmV4Y19jbnQgKiBzaXplb2YoaXRlbV90KQorICoKKyAq IDIpIHRoZSB2VmFscyB2ZWN0b3IgaGFzIHRvIGJlIGNyZWF0ZWQgYnV0IG11c3Qgbm90IGJl IGluaXRpYWxpc2VkLiBUaGUKKyAqICAgIGRmb3JfdW5wYWNrIHNldHMgdlZhbHMgaW4gdGhl ICdvdXRlciBtZW1vcnknIHJlZ2ltZW4gYW5kIHdpbGwgc2V0IHZWYWwtPm0KKyAqICAgIHRv IGJ1Zi4KKyAqCisgKiBQcm92aWRlZCBkeW5hbWljIGFsbG9jYXRpb24gaXMgdXNlZCBieSB0 aGUgZGZvcl91bnBhY2ssIGEgY2FsbGVyIHdpbGwgaGF2ZSB0bworICogZnJlZSB0aGUgcGll Y2Ugb2YgbWVtb3J5IHBvaW50ZWQgYnkgdlZhbHMtPm0sIHVzaW5nIHZlY3RfY2xlYXIoJnZW YWxzKS4KKyAqCisgKiBBcmUgdGhlIG91dGVyIG1lbW9yeSBpcyB1c2VkCisgKi8KK2ludAor ZGZvcl91bnBhY2soY29uc3QgZGZvcl9tZXRhX3QgKmRmb3IsIHVuaXFzb3J0dmVjdF90ICp2 VmFscywgc2l6ZV90IGJ1ZlNpemUsCisJCQl1aW50OF90IGJ1ZltdKQoreworCWludCByZXMg PSAtMTsKKwlzaXplX3Qgc3pEZWx0YVBhY2s7CisJdmVjdF90IHZFeGNzID0geyAwIH07CisJ dmVjdF90IHZFeGNQb3NzID0geyAwIH07CisJZXhjYWxnX3QgaXNFeGNVc2FnZSA9IChkZm9y LT5leGNfY250ID09IDApID8gREZPUl9FWENfRE9OVF9VU0UgOgorCQkJCQkJCQkJCQkJIERG T1JfRVhDX1VTRTsKKworCWlmICh2VmFscyA9PSBOVUxMKQorCQlnb3RvIGRmb3JfdW5wYWNr X2Vycm9yOworCisJaWYgKGJ1ZlNpemUgIT0gMCAmJgorCQlidWZTaXplIDwgKDIgKiBkZm9y LT5pdGVtX2NudCAqIHNpemVvZihpdGVtX3QpICsKKwkJCQkgICAyICogZGZvci0+ZXhjX2Nu dCAqIHNpemVvZihpdGVtX3QpKSkKKwkJZ290byBkZm9yX3VucGFja19lcnJvcjsKKworCXN6 RGVsdGFQYWNrID0gZGZvci0+ZGVsdGFfd2lkICogZGZvci0+aXRlbV9jbnQ7CisKKwl7CisJ CXVpbnQ4X3QgKnZhbHNCdWYgPSBOVUxMOworCQlpZiAoYnVmU2l6ZSAhPSAwKQorCQkJdmFs c0J1ZiA9IGJ1ZjsKKworCQlpZiAodmVjdF9pbml0KHZWYWxzLCBkZm9yLT5pdGVtX2NudCwg KGl0ZW1fdCAqKXZhbHNCdWYpICE9IDApCisJCQlnb3RvIGRmb3JfdW5wYWNrX2Vycm9yOwor CX0KKworCS8qIENhbGN1bGF0ZSBleGNlcHRpb25zICovCisJaWYgKGlzRXhjVXNhZ2UgPT0g REZPUl9FWENfVVNFKQorCXsKKwkJc2l6ZV90IHN6RXhjUGFjazsKKwkJc2l6ZV90IGNyRXhj OyAvKiBjYXJldCAoY3Vyc29yKSAqLworCQlzaXplX3QgY3JQb3M7IC8qIGNhcmV0IChjdXJz b3IpICovCisKKwkJdWludDhfdCAqZXhjQnVmID0gTlVMTDsKKwkJdWludDhfdCAqZXhjUG9z c0J1ZiA9IE5VTEw7CisKKwkJaW50IHJlczEgPSAwOworCQlpbnQgcmVzMiA9IDA7CisKKwkJ c3pFeGNQYWNrID0gZGZvci0+ZXhjX2NudCAqIGRmb3ItPmV4Y193aWQ7CisJCWNyRXhjID0g c3pEZWx0YVBhY2s7CisJCWNyUG9zID0gY3JFeGMgKyBzekV4Y1BhY2s7CisKKwkJaWYgKGJ1 ZlNpemUgIT0gMCkKKwkJeworCQkJLyogc3RlcCBvdmVyIHRoZSBtZW1vcnkgb2NjdXBpZWQg YnkgdlZhbHMgKi8KKwkJCWV4Y0J1ZiA9IGJ1ZiArIGRmb3ItPml0ZW1fY250ICogc2l6ZW9m KGl0ZW1fdCk7CisJCQlleGNQb3NzQnVmID0gZXhjQnVmICsgZGZvci0+ZXhjX2NudCAqIHNp emVvZihpdGVtX3QpOworCQl9CisKKwkJcmVzMSA9IHZlY3RfaW5pdCgmdkV4Y3MsIGRmb3It PmV4Y19jbnQsIChpdGVtX3QgKilleGNCdWYpOworCQlyZXMyID0gdmVjdF9pbml0KCZ2RXhj UG9zcywgZGZvci0+ZXhjX2NudCwgKGl0ZW1fdCAqKWV4Y1Bvc3NCdWYpOworCisJCWlmIChy ZXMxICE9IDAgfHwgcmVzMiAhPSAwKQorCQkJZ290byBkZm9yX3VucGFja19lcnJvcjsKKwor CisJCWZvciAoc2l6ZV90IHBvc0V4YyA9IDAsIGogPSAwOyBqIDwgZGZvci0+ZXhjX2NudDsg aisrKQorCQl7CisJCQlpdGVtX3QgZGVsdGFQb3M7CisJCQlyZXMxID0gdmVjdF9hcHBlbmQo JnZFeGNzLAorCQkJCQkJCSAgIGJpdHBhY2tfdW5wYWNrKGRmb3ItPnBhY2ssICZjckV4YywK KwkJCQkJCQkJCQkJICBkZm9yLT5leGNfd2lkKSk7CisJCQkvKiBDYWxjdWxhdGUgdGhlIHBv c2l0aW9uIG9mIHRoZSBleGNlcHRpb24gZnJvbSB0aGUgZGVsdGEgb2YgdGhlCisJCQkgKiBw b3NpdGlvbiBvZiB0aGUgZXhjZXB0aW9uICovCisJCQlkZWx0YVBvcyA9IGJpdHBhY2tfdW5w YWNrKGRmb3ItPnBhY2ssICZjclBvcywgZGZvci0+ZXhjX3Bvc193aWQpOworCQkJcG9zRXhj ICs9IGRlbHRhUG9zOworCQkJcmVzMiA9IHZlY3RfYXBwZW5kKCZ2RXhjUG9zcywgcG9zRXhj KTsKKwkJCWlmIChyZXMxICE9IDAgfHwgcmVzMiAhPSAwKQorCQkJCWdvdG8gZGZvcl91bnBh Y2tfZXJyb3I7CisJCX0KKwkJQXNzZXJ0KGNyRXhjID09IHN6RGVsdGFQYWNrICsgc3pFeGNQ YWNrKTsKKwkJQXNzZXJ0KGNyUG9zID09CisJCQkgICBzekRlbHRhUGFjayArIHN6RXhjUGFj ayArIGRmb3ItPmV4Y19wb3Nfd2lkICogZGZvci0+ZXhjX2NudCk7CisJfQorCisJeyAvKiBV bnBhY2sgZGVsdGFzIGFuZCBjYWxjdWxhdGUgdGFyZ2V0IHZhbHVlcyAqLworCQlpdGVtX3Qg ZGVsdGE7CisJCWJvb2wgbmVnRGVsdGEgPSBmYWxzZTsKKwkJaXRlbV90IHByZXYgPSAwOwor CQlzaXplX3QgaiA9IDA7IC8qIGluZGV4IG9mIGFuIGV4Y2VwdGlvbiBhbmQgaXRzIHBvc2l0 aW9uIGluIHZlY3RvcnMgKi8KKwkJc2l6ZV90IGNyRGVsdGEgPSAwOworCisJCXNpemVfdCBt YXhJdGVtV2lkdGg7CisJCWl0ZW1fdCBtYXhJdGVtTWFzazsKKworCQltYXhJdGVtV2lkdGgg PSBzaXplb2YoaXRlbV90KSAqIDg7CisJCW1heEl0ZW1NYXNrID0gd2lkdGhfdG9fbWFzayht YXhJdGVtV2lkdGgpOworCisJCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGZvci0+aXRlbV9j bnQ7IGkrKykKKwkJeworCQkJZGVsdGEgPSBiaXRwYWNrX3VucGFjayhkZm9yLT5wYWNrLCAm Y3JEZWx0YSwgZGZvci0+ZGVsdGFfd2lkKTsKKworCQkJaWYgKGlzRXhjVXNhZ2UgPT0gREZP Ul9FWENfVVNFICYmCisJCQkJaiA8IHZFeGNzLmNudCAmJgorCQkJCWkgPT0gdkV4Y1Bvc3Mu bVtqXSkKKwkJCXsKKwkJCQlBc3NlcnQoaiA8IGRmb3ItPmV4Y19jbnQpOworCQkJCWRlbHRh IHw9IHZFeGNzLm1bal0gPDwgZGZvci0+ZGVsdGFfd2lkOworCQkJCWorKzsKKwkJCX0KKwor CQkJaWYoZGZvci0+c2lnbmVkX2RlbHRhcykKKwkJCXsKKwkJCQluZWdEZWx0YSA9IGRlbHRh ICYgMHgwMTsKKwkJCQlkZWx0YSA+Pj0gMTsKKwkJCQlpZiAoKG5lZ0RlbHRhICYmIHByZXYg PCBkZWx0YSkgfHwKKwkJCQkJKCFuZWdEZWx0YSAmJiBkZWx0YSA+IG1heEl0ZW1NYXNrIC0g cHJldikpCisJCQkJeworCQkJCQlkZWx0YSA9IG1heEl0ZW1NYXNrIC0gZGVsdGEgKyAxOwor CQkJCQluZWdEZWx0YSA9ICFuZWdEZWx0YTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChuZWdE ZWx0YSkKKwkJCQlwcmV2IC09IGRlbHRhOworCQkJZWxzZQorCQkJCXByZXYgKz0gZGVsdGE7 CisKKwkJCXZlY3RfYXBwZW5kKHZWYWxzLCBwcmV2KTsKKwkJfQorCQlBc3NlcnQoY3JEZWx0 YSA9PSBzekRlbHRhUGFjayk7CisJCXJlcyA9IDA7CisJfQorCitkZm9yX3VucGFja19yZXQ6 CisJdmVjdF9jbGVhcigmdkV4Y1Bvc3MpOworCXZlY3RfY2xlYXIoJnZFeGNzKTsKKwlyZXR1 cm4gcmVzOworZGZvcl91bnBhY2tfZXJyb3I6CisJdmVjdF9jbGVhcih2VmFscyk7CisJcmVz ID0gLTE7CisJZ290byBkZm9yX3VucGFja19yZXQ7Cit9CisKK3ZvaWQKK2Rmb3JfY2xlYXJf bWV0YShkZm9yX21ldGFfdCAqbWV0YSkKK3sKKwlpZiAobWV0YSA9PSBOVUxMKQorCQlyZXR1 cm47CisKKwlpZiAobWV0YS0+cGFjayAhPSBOVUxMICYmICFtZXRhLT5vdXRlcl9tZW0pCisJ CURGT1JfRlJFRShtZXRhLT5wYWNrKTsKKworCW1lbXNldChtZXRhLCAwLCBzaXplb2YoZGZv cl9tZXRhX3QpKTsKK30KKworZGZvcl9zdGF0c190CitkZm9yX2NhbGNfc3RhdHMoZGZvcl9t ZXRhX3QgZGZvcikKK3sKKwlkZm9yX3N0YXRzX3Qgc3RhdDsKKwlzaXplX3QgbmJ5dGVzOwor CXN0YXQuZGVsdGFfcGFja19uYml0cyA9IGRmb3IuZGVsdGFfd2lkICogZGZvci5pdGVtX2Nu dDsKKwlzdGF0LmV4Y19wYWNrX25iaXRzID0gZGZvci5leGNfd2lkICogZGZvci5leGNfY250 OworCXN0YXQuZXhjX3Bvc19wYWNrX25iaXRzID0gZGZvci5leGNfcG9zX3dpZCAqIGRmb3Iu ZXhjX2NudDsKKworCXN0YXQubmJpdHMgPSBzdGF0LmRlbHRhX3BhY2tfbmJpdHMgKyBzdGF0 LmV4Y19wYWNrX25iaXRzICsgc3RhdC5leGNfcG9zX3BhY2tfbmJpdHM7CisKKwkvKiBJZiB0 aGUgZGl2aXNpb24gcmVzdWx0cyBpbiB0aGUgcmVtYWluZGVyLCB3ZSB1c2UgYW4gYWRkaXRp b25hbAorCSAqIGJ5dGUgKi8KKwluYnl0ZXMgPSAoc3RhdC5uYml0cyArIDcpIC8gODsKKwlz dGF0LnJhdGlvID0gKGZsb2F0KShzaXplb2YoaXRlbV90KSAqIGRmb3IuaXRlbV9jbnQpIC8g KGZsb2F0KW5ieXRlczsKKworCXJldHVybiBzdGF0OworfQorCitzaXplX3QgZGZvcl9jYWxj X25ieXRlcyhkZm9yX21ldGFfdCBkZm9yKQoreworCWRmb3Jfc3RhdHNfdCBzdGF0OworCXN0 YXQgPSBkZm9yX2NhbGNfc3RhdHMoZGZvcik7CisJcmV0dXJuIChzdGF0Lm5iaXRzICsgNykg LyA4OworfQorCisjaW5jbHVkZSAibGliL2Rmb3JfdGVtcGxfdW5kZWYuaCIKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2xpYi9kZm9yX3UxNi5jIGIvc3JjL2JhY2tlbmQvbGliL2Rmb3Jf dTE2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmY3MDUxZjU1 OTI1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvbGliL2Rmb3JfdTE2LmMKQEAg LTAsMCArMSw4IEBACisvKgorICogRmlsZTogZGZvcl91MTYuYworICovCisKKy8qIGNsYW5n LWZvcm1hdCBvZmYgKi8KKyNpbmNsdWRlICJsaWIvZGZvcl91MTZfY29uZmlnLmgiCisjaW5j bHVkZSAiZGZvcl90ZW1wbC5jIgorLyogY2xhbmctZm9ybWF0IG9uICovCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9saWIvbWVzb24uYnVpbGQgYi9zcmMvYmFja2VuZC9saWIvbWVzb24u YnVpbGQKaW5kZXggMDk4NGJkMGUzZjYuLjdmNjczMGVmYmExIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9saWIvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvbGliL21lc29uLmJ1 aWxkCkBAIC0yLDYgKzIsNyBAQAogCiBkZm9yX3NvdXJjZXMgPSBmaWxlcygKICAgJ2JpdHBh Y2tfdTE2LmMnLAorICAnZGZvcl91MTYuYycsCiAgICd2ZWN0X3UxNi5jJwogKQogCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9saWIvZGZvcl90ZW1wbC5oIGIvc3JjL2luY2x1ZGUvbGli L2Rmb3JfdGVtcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u OGFhNDk3ZGZhYWUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9saWIvZGZvcl90 ZW1wbC5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBGaWxlOiBkZm9yX3RlbXBsLmgKKyAq LworI2luY2x1ZGUgImRmb3JfdGVtcGxfc3RhcGxlLmgiCisKK2V4dGVybiBpbnQgZGZvcl9j YWxjX2RlbHRhcyhzaXplX3QgY250LCBjb25zdCBpdGVtX3QgYXJyW10sIHZlY3RfdCAqdkRl bHRhcywKKwkJCQkJCQl1bmlxc29ydHZlY3RfdCAqdXN2RGVsdGFXaWR0aHMsCisJCQkJCQkJ dmVjdF90ICp2V2lkdGhDb3VudGVycywgYm9vbCAqc2lnbik7CisKK2V4dGVybiBpbnQgZGZv cl9jYWxjX3dpZHRoKHNpemVfdCBjbnREZWx0YSwKKwkJCQkJCSAgIGNvbnN0IHVuaXFzb3J0 dmVjdF90ICp1c3ZEZWx0YVdpZHRocywKKwkJCQkJCSAgIGNvbnN0IHZlY3RfdCAqdldpZHRo Q291bnRlcnMsIHNpemVfdCAqd2lkdGgsCisJCQkJCQkgICBzaXplX3QgKmNudEV4Y2VwdGlv bnMpOworCitleHRlcm4gaW50IGRmb3JfcGFjayhzaXplX3QgY250LCBjb25zdCBpdGVtX3Qg YXJyW10sIGV4Y2FsZ190IGlzRXhjVXNhZ2UsCisJCQkJCSBkZm9yX21ldGFfdCAqZGZvciwg c2l6ZV90IGJ1ZlNpemUsIHVpbnQ4X3QgYnVmW10pOworCitleHRlcm4gaW50IGRmb3JfdW5w YWNrKGNvbnN0IGRmb3JfbWV0YV90ICpkZm9yLCB1bmlxc29ydHZlY3RfdCAqdlZhbHMsCisJ CQkJCSAgIHNpemVfdCBidWZTaXplLCB1aW50OF90IGJ1ZltdKTsKKworZXh0ZXJuIHZvaWQg ZGZvcl9jbGVhcl9tZXRhKGRmb3JfbWV0YV90ICpkZm9yKTsKKworZXh0ZXJuIGRmb3Jfc3Rh dHNfdCBkZm9yX2NhbGNfc3RhdHMoZGZvcl9tZXRhX3QgZGZvcik7CisKK2V4dGVybiBzaXpl X3QgZGZvcl9jYWxjX25ieXRlcyhkZm9yX21ldGFfdCBkZm9yKTsKKworI2luY2x1ZGUgImRm b3JfdGVtcGxfdW5kZWYuaCIKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2xpYi9kZm9yX3Rl bXBsX3N0YXBsZS5oIGIvc3JjL2luY2x1ZGUvbGliL2Rmb3JfdGVtcGxfc3RhcGxlLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU0N2Y2Y2IzYTMzCi0tLSAv ZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvbGliL2Rmb3JfdGVtcGxfc3RhcGxlLmgKQEAg LTAsMCArMSwxMjYgQEAKKy8qCisgKiBGaWxlOiBkZm9yX3N0YXBsZV90ZW1wbC5oCisgKi8K KworI2luY2x1ZGUgImMuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTk9O UkVVU0FCTEUgQ09ERSwgYWxsb3dlZCB0byBiZSBpbmNsdWRlZCBvbmx5IG9uY2UKKyAqCisg KiBUaGlzIGNvZGUgc2hvdWxkIGFwcGVhciBvbmx5IG9uY2UgaW4gYSBmaWxlIChvciBpbiBh IGNoYWluIG9mIGZpbGVzKQorICogaW5jbHVkaW5nIHRoaXMgaGVhZGVyIHdpdGggI2luY2x1 ZGUuIFNvLCB3ZSBwcm90ZWN0IGl0IGZyb20gZHVwbGljYXRlcyBieQorICogbWVhbnMgb2Yg bWFjcm8KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9ERk9SX1NU QVBMRV9URU1QTF9IX1VOSVFVRV9DT0RFXworI2RlZmluZSBfREZPUl9TVEFQTEVfVEVNUExf SF9VTklRVUVfQ09ERV8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXNpemVfdCBpdGVtX2NudDsK KwlzaXplX3QgZGVsdGFfd2lkOworCXNpemVfdCBleGNfY250OworCXNpemVfdCBleGNfd2lk OworCXNpemVfdCBleGNfcG9zX3dpZDsKKwlzaXplX3QgbmJ5dGVzOyAvKiBzaXplIG9mIHBh Y2sgaW4gYnl0ZXMgKi8KKwl1aW50OF90ICpwYWNrOworCWJvb2wgb3V0ZXJfbWVtOworCWJv b2wgc2lnbmVkX2RlbHRhczsKK30gZGZvcl9tZXRhX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsK KwlzaXplX3QgbmJpdHM7ICAvKiBzaXplIG9mIHBhY2sgaW4gYml0cyB1c2VkIGluIGZhY3Qg Ki8KKwlzaXplX3QgZGVsdGFfcGFja19uYml0czsgLyogaW4gYml0cyAqLworCXNpemVfdCBl eGNfcGFja19uYml0czsgLyogaW4gYml0cyAqLworCXNpemVfdCBleGNfcG9zX3BhY2tfbmJp dHM7IC8qIGluIGJpdHMgKi8KKwlmbG9hdCByYXRpbzsgIC8qIGNvbXByZXNzaW9uIHJhdGlv ICovCit9IGRmb3Jfc3RhdHNfdDsKKwordHlwZWRlZiBlbnVtIHsKKwlERk9SX0VYQ19ET05U X1VTRSA9IDAsCisJREZPUl9FWENfVVNFID0gMQorfSBleGNhbGdfdDsKKworI2VuZGlmIC8q IF9ERk9SX1NUQVBMRV9URU1QTF9IX1VOSVFVRV9DT0RFXyAqLworCisvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCisgKiBFbmQgb2YgQ29kZSwgYWxsb3dlZCB0byBiZSBpbmNsdWRlZCBv bmx5IG9uY2UKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKgorICogUkVVU0FCTEUgQ09ERQorICoKKyAqIFRoaXMgY29kZSBjYW4gYmUg cmV1c2VkIHdpdGggI2luY2x1ZGUgZGlyZWN0aXZlIGluIGEgZmlsZSBpZiBERk9SX01BUktF UiBpcworICogcmVkZWZpbmVkLiBUaGlzIGFsbG93cyBjcmVhdGlvbiBvZiBzZXZlcmFsIHR5 cGVzIG9mIHZlY3RvcnMgd2l0aCBkaWZmZXJlbnQKKyAqIHR5cGVzIG9mIG1lbWJlcnMuCisg KgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIERGT1JfSVRFTV9UWVBF CisjZXJyb3IgIkRGT1JfSVRFTV9UWVBFIG1hY3JvIGlzIGluZGVmaW5lZC4iCisjZW5kaWYK KworI2lmbmRlZiBERk9SX01BUktFUgorI2Vycm9yICJERk9SX01BUktFUiBtYWNybyBpcyBp bmRlZmluZWQuIgorI2VuZGlmCisKKyNpZm5kZWYgREZPUl9NQUxMT0MKKyNlcnJvciAiREZP Ul9NQUxMT0MgbWFjcm8gaXMgaW5kZWZpbmVkLiIKKyNlbmRpZgorCisjaWZuZGVmIERGT1Jf RlJFRQorI2Vycm9yICJERk9SX0ZSRUUgbWFjcm8gaXMgaW5kZWZpbmVkLiIKKyNlbmRpZgor CisjZGVmaW5lIE1BS0VfSEVBREVSX05BTUUodiwgbSkgQ3BwQXNTdHJpbmcyKENwcENvbmNh dDIodiwgbSkuaCkKKworLyoKKyAqIEhlYWRlcnMgZnJvbSB2ZWN0IGFuZCBiaXRwYWNrIHVu aXRzCisgKgorICogRXhhbXBsZTogZGZvcl91MTYuYyBhbmQgZGZvcl91MTYuaCBuZWVkIHZl Y3RfdTE2LmggYW5kIGJpdHBhY2tfdTE2LmgKKyAqLworI2luY2x1ZGUgTUFLRV9IRUFERVJf TkFNRShsaWIvdmVjdF8sIERGT1JfTUFSS0VSKQorI2luY2x1ZGUgTUFLRV9IRUFERVJfTkFN RShsaWIvYml0cGFja18sIERGT1JfTUFSS0VSKQorCisvKiBUeXBlcyAqLworI2RlZmluZSBp dGVtX3QJCSAgIERGT1JfSVRFTV9UWVBFCisjZGVmaW5lIHZlY3RfdAkJICAgQ3BwQ29uY2F0 VHJpcGxlMih2ZWN0XywgREZPUl9NQVJLRVIsIF90KQorI2RlZmluZSB1bmlxc29ydHZlY3Rf dCBDcHBDb25jYXRUcmlwbGUyKHVuaXFzb3J0dmVjdF8sIERGT1JfTUFSS0VSLCBfdCkKKwor LyogRnVuY3Rpb25zICovCisjZGVmaW5lIGRmb3JfY2FsY19kZWx0YXMgQ3BwQ29uY2F0VHJp cGxlMihkZm9yXywgREZPUl9NQVJLRVIsIF9jYWxjX2RlbHRhcykKKyNkZWZpbmUgZGZvcl9j YWxjX3dpZHRoCSBDcHBDb25jYXRUcmlwbGUyKGRmb3JfLCBERk9SX01BUktFUiwgX2NhbGNf d2lkdGgpCisjZGVmaW5lIGRmb3JfcGFjawkJIENwcENvbmNhdFRyaXBsZTIoZGZvcl8sIERG T1JfTUFSS0VSLCBfcGFjaykKKyNkZWZpbmUgZGZvcl91bnBhY2sJCSBDcHBDb25jYXRUcmlw bGUyKGRmb3JfLCBERk9SX01BUktFUiwgX3VucGFjaykKKyNkZWZpbmUgZGZvcl9hbmFseXpl CSBDcHBDb25jYXRUcmlwbGUyKGRmb3JfLCBERk9SX01BUktFUiwgX2FuYWx5emUpCisjZGVm aW5lIGRmb3JfY2xlYXJfbWV0YQkgQ3BwQ29uY2F0VHJpcGxlMihkZm9yXywgREZPUl9NQVJL RVIsIF9jbGVhcl9tZXRhKQorI2RlZmluZSBkZm9yX2NhbGNfc3RhdHMJIENwcENvbmNhdFRy aXBsZTIoZGZvcl8sIERGT1JfTUFSS0VSLCBfY2FsY19zdGF0cykKKyNkZWZpbmUgZGZvcl9j YWxjX25ieXRlcyBDcHBDb25jYXRUcmlwbGUyKGRmb3JfLCBERk9SX01BUktFUiwgX2NhbGNf bmJ5dGVzKQorCisvKiBGdW5jdGlvbnMgb2YgdGhlIHZlY3QgdW5pdCAqLworI2RlZmluZSB2 ZWN0X2luaXQJCSAgIENwcENvbmNhdFRyaXBsZTIodmVjdF8sIERGT1JfTUFSS0VSLCBfaW5p dCkKKyNkZWZpbmUgdmVjdF9maWxsCQkgICBDcHBDb25jYXRUcmlwbGUyKHZlY3RfLCBERk9S X01BUktFUiwgX2ZpbGwpCisjZGVmaW5lIHZlY3RfcmVzZXJ2ZQkgICBDcHBDb25jYXRUcmlw bGUyKHZlY3RfLCBERk9SX01BUktFUiwgX3Jlc2VydmUpCisjZGVmaW5lIHZlY3RfYXBwZW5k CQkgICBDcHBDb25jYXRUcmlwbGUyKHZlY3RfLCBERk9SX01BUktFUiwgX2FwcGVuZCkKKyNk ZWZpbmUgdmVjdF9wcmludAkJICAgQ3BwQ29uY2F0VHJpcGxlMih2ZWN0XywgREZPUl9NQVJL RVIsIF9wcmludCkKKyNkZWZpbmUgdmVjdF9jb21wYXJlCSAgIENwcENvbmNhdFRyaXBsZTIo dmVjdF8sIERGT1JfTUFSS0VSLCBfY29tcGFyZSkKKyNkZWZpbmUgdmVjdF9pbnNlcnQJCSAg IENwcENvbmNhdFRyaXBsZTIodmVjdF8sIERGT1JfTUFSS0VSLCBfaW5zZXJ0KQorI2RlZmlu ZSB2ZWN0X2NsZWFyCQkgICBDcHBDb25jYXRUcmlwbGUyKHZlY3RfLCBERk9SX01BUktFUiwg X2NsZWFyKQorCisjZGVmaW5lIHVzdl9pbnNlcnQJCSAgIENwcENvbmNhdFRyaXBsZTIodXN2 XywgREZPUl9NQVJLRVIsIF9pbnNlcnQpCisjZGVmaW5lIHVzdl9zZWFyY2gJCSAgIENwcENv bmNhdFRyaXBsZTIodXN2XywgREZPUl9NQVJLRVIsIF9zZWFyY2gpCisKKy8qIEZ1bmN0aW9u cyBvZiB0aGUgYml0cGFjayB1bml0ICovCisjZGVmaW5lIHdpZHRoX2Zyb21fdmFsIENwcENv bmNhdFRyaXBsZTIod2lkdGhfLCBERk9SX01BUktFUiwgX2Zyb21fdmFsKQorI2RlZmluZSB3 aWR0aF90b19tYXNrICBDcHBDb25jYXRUcmlwbGUyKHdpZHRoXywgREZPUl9NQVJLRVIsIF90 b19tYXNrKQorI2RlZmluZSBiaXRwYWNrX3BhY2sgICBDcHBDb25jYXRUcmlwbGUyKGJpdHBh Y2tfLCBERk9SX01BUktFUiwgX3BhY2spCisjZGVmaW5lIGJpdHBhY2tfdW5wYWNrIENwcENv bmNhdFRyaXBsZTIoYml0cGFja18sIERGT1JfTUFSS0VSLCBfdW5wYWNrKQorCisvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCisgKiBFbmQgb2YgUmV1c2FibGUgQ29kZQorICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLworCisvKgorICogRG9uJ3QgZm9yZ2V0IHRvIGluY2x1ZGUgdGhp cyBjb2RlIGluIHlvdXIgZmlsZSB0aGF0IHVzZXMgdGhpcyBoZWFkZXIKKyAqICAgICAjaW5j bHVkZSAiZGZvcl90ZW1wbF91bmRlZi5oIgorICoKKyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvbGliL2Rmb3JfdGVtcGxfdW5kZWYuaCBiL3NyYy9pbmNsdWRlL2xpYi9kZm9yX3Rl bXBsX3VuZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjdh MjJlYTk3NzFmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvbGliL2Rmb3JfdGVt cGxfdW5kZWYuaApAQCAtMCwwICsxLDI4IEBACisjdW5kZWYgaXRlbV90CisjdW5kZWYgdmVj dF90CisjdW5kZWYgdW5pcXNvcnR2ZWN0X3QKKworI3VuZGVmIGRmb3JfY2FsY19kZWx0YXMK KyN1bmRlZiBkZm9yX2NhbGNfd2lkdGgKKyN1bmRlZiBkZm9yX3BhY2sKKyN1bmRlZiBkZm9y X3VucGFjaworI3VuZGVmIGRmb3JfYW5hbHl6ZQorI3VuZGVmIGRmb3JfY2FsY19zdGF0cwor I3VuZGVmIGRmb3JfY2FsY19uYnl0ZXMKKworI3VuZGVmIHZlY3RfaW5pdAorI3VuZGVmIHZl Y3RfZmlsbAorI3VuZGVmIHZlY3RfcmVzZXJ2ZQorI3VuZGVmIHZlY3RfYXBwZW5kCisjdW5k ZWYgdmVjdF9wcmludAorI3VuZGVmIHZlY3RfY29tcGFyZQorI3VuZGVmIHZlY3RfaW5zZXJ0 CisjdW5kZWYgdmVjdF9jbGVhcgorCisjdW5kZWYgdXN2X2luc2VydAorI3VuZGVmIHVzdl9z ZWFyY2gKKworI3VuZGVmIHdpZHRoX2Zyb21fdmFsCisjdW5kZWYgd2lkdGhfdG9fbWFzawor I3VuZGVmIGJpdHBhY2tfcGFjaworI3VuZGVmIGJpdHBhY2tfdW5wYWNrCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9saWIvZGZvcl91MTYuaCBiL3NyYy9pbmNsdWRlL2xpYi9kZm9yX3Ux Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43MTZjOTlkYmM1 NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2xpYi9kZm9yX3UxNi5oCkBAIC0w LDAgKzEsMTMgQEAKKy8qCisgKiBGaWxlOiBkZm9yX3UxNi5oCisgKi8KKworI2lmbmRlZiBf REZPUl9VMTZfSF8KKyNkZWZpbmUgX0RGT1JfVTE2X0hfCisKKy8qIGNsYW5nLWZvcm1hdCBv ZmYgKi8KKyNpbmNsdWRlICJkZm9yX3UxNl9jb25maWcuaCIKKyNpbmNsdWRlICJkZm9yX3Rl bXBsLmgiCisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKworI2VuZGlmIC8qIF9ERk9SX1UxNl9I XyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGliL2Rmb3JfdTE2X2NvbmZpZy5oIGIv c3JjL2luY2x1ZGUvbGliL2Rmb3JfdTE2X2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi43NTE5MzdhYzUxMwotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy9pbmNsdWRlL2xpYi9kZm9yX3UxNl9jb25maWcuaApAQCAtMCwwICsxLDQgQEAKKyNkZWZp bmUgREZPUl9JVEVNX1RZUEUgdWludDE2X3QKKyNkZWZpbmUgREZPUl9NQVJLRVIJICAgdTE2 CisjZGVmaW5lIERGT1JfTUFMTE9DCSAgIG1hbGxvYworI2RlZmluZSBERk9SX0ZSRUUJICAg ZnJlZQpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5jbHVkZS9oZWFkZXJzY2hlY2sgYi9z cmMvdG9vbHMvcGdpbmNsdWRlL2hlYWRlcnNjaGVjawppbmRleCBlOTc5ZDBhNzQzNi4uMGFi OGFkMjc2YzcgMTAwNzU1Ci0tLSBhL3NyYy90b29scy9wZ2luY2x1ZGUvaGVhZGVyc2NoZWNr CisrKyBiL3NyYy90b29scy9wZ2luY2x1ZGUvaGVhZGVyc2NoZWNrCkBAIC0xNjMsNiArMTYz LDEwIEBAIGRvCiAJdGVzdCAiJGYiID0gc3JjL2luY2x1ZGUvbGliL2JpdHBhY2tfdGVtcGxf c3RhcGxlLmggJiYgY29udGludWUKIAl0ZXN0ICIkZiIgPSBzcmMvaW5jbHVkZS9saWIvYml0 cGFja190ZW1wbF91bmRlZi5oICYmIGNvbnRpbnVlCiAKKwl0ZXN0ICIkZiIgPSBzcmMvaW5j bHVkZS9saWIvZGZvcl90ZW1wbC5oICYmIGNvbnRpbnVlCisJdGVzdCAiJGYiID0gc3JjL2lu Y2x1ZGUvbGliL2Rmb3JfdGVtcGxfc3RhcGxlLmggJiYgY29udGludWUKKwl0ZXN0ICIkZiIg PSBzcmMvaW5jbHVkZS9saWIvZGZvcl90ZW1wbF91bmRlZi5oICYmIGNvbnRpbnVlCisKIAl0 ZXN0ICIkZiIgPSBzcmMvaW5jbHVkZS9saWIvdmVjdF90ZW1wbC5oICYmIGNvbnRpbnVlCiAJ dGVzdCAiJGYiID0gc3JjL2luY2x1ZGUvbGliL3ZlY3RfdGVtcGxfc3RhcGxlLmggJiYgY29u dGludWUKIAl0ZXN0ICIkZiIgPSBzcmMvaW5jbHVkZS9saWIvdmVjdF90ZW1wbF91bmRlZi5o ICYmIGNvbnRpbnVlCi0tIAoyLjUzLjAKCg== --------------IX7dx4Q1dvFLkUfBRFR7nqGb Content-Type: text/x-patch; charset=UTF-8; name="v13-0004-Tests-for-Delta-Frame-of-Reference-unit.patch" Content-Disposition: attachment; filename="v13-0004-Tests-for-Delta-Frame-of-Reference-unit.patch" Content-Transfer-Encoding: base64 RnJvbSA1ODJhN2U1OTk3ZTlkN2QyZmU3YzMxODI5ZDg1MTU5MjFmYmE1OGFkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBFdmdlbnkgVm9yb3BhZXYgPGV2b3JvcEBnbWFpbC5j b20+CkRhdGU6IE1vbiwgMTMgQXByIDIwMjYgMjM6MTg6MDcgKzA4MDAKU3ViamVjdDogW1BB VENIIHYxMyA0LzVdIFRlc3RzIGZvciBEZWx0YSBGcmFtZSBvZiBSZWZlcmVuY2UgdW5pdC4K 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== --------------IX7dx4Q1dvFLkUfBRFR7nqGb Content-Type: text/x-patch; charset=UTF-8; name="v13-0005-Use-Delta-Frame-of-Reference-DFoR-to-compress-pr.patch" Content-Disposition: attachment; filename*0="v13-0005-Use-Delta-Frame-of-Reference-DFoR-to-compress-pr.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBkYzg0MDIzZjVjOGQ2ZDQzODE4ZjFjZDM3MTk2ZmIwM2NkNWU3ODlkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBFdmdlbnkgVm9yb3BhZXYgPGV2b3JvcEBnbWFpbC5j b20+CkRhdGU6IEZyaSwgMjAgTWFyIDIwMjYgMTc6MzA6MjIgKzA4MDAKU3ViamVjdDogW1BB VENIIHYxMyA1LzVdIFVzZSBEZWx0YSBGcmFtZSBvZiBSZWZlcmVuY2UgKERGb1IpIHRvIGNv 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= --------------IX7dx4Q1dvFLkUfBRFR7nqGb--