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 1wZDec-000ref-0r for pgsql-hackers@arkaria.postgresql.org; Mon, 15 Jun 2026 20:11:31 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wZDeZ-00DMYR-2h for pgsql-hackers@arkaria.postgresql.org; Mon, 15 Jun 2026 20:11:27 +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 1wZDeY-00DMYJ-2w for pgsql-hackers@lists.postgresql.org; Mon, 15 Jun 2026 20:11:27 +0000 Received: from mail-qk1-x734.google.com ([2607:f8b0:4864:20::734]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wZDeU-00000000X87-0fnW for pgsql-hackers@lists.postgresql.org; Mon, 15 Jun 2026 20:11:25 +0000 Received: by mail-qk1-x734.google.com with SMTP id af79cd13be357-91587626a3eso411866785a.2 for ; Mon, 15 Jun 2026 13:11:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dunslane-net.20251104.gappssmtp.com; s=20251104; t=1781554280; x=1782159080; darn=lists.postgresql.org; h=in-reply-to:autocrypt:content-language:from:references:cc:to :subject:user-agent:mime-version:date:message-id:from:to:cc:subject :date:message-id:reply-to; bh=qqUp60MYPWm0Pe6xYDaCv+1kTbXsTRuk88fai8naTRU=; b=Aq7Hx/MFAZ19hZM54e4Qdo2+Cc+XGEpG8Zo0jU2sC4Y2N3cPIMoi0FD34qnIkAAmxX PFT9nc1Ob1oFoBVI0Grh2kO4se8CrofiQR7AMkXZfLSGLImctaVnsgntnQo2nZrJUX/J ejlpFdwWFpA5ovY/Fl3fckMQMahB07PxrRfws732XnnFXndKyy8LhWtxzdmvyfwfhz1S LtkTNNPgUmlC5+ZSIhxORyXDCZ/Ihii+1sOLLZ167MSm+YGYq4Ui/DgJ8oP9puIC7Xi4 UkH7OeXYEWblFWGMVWiwh7Aw7x/3OhXBkvKGVeofQ93g+CYx8l4WGK/bXmd2wcVsy+CH BFug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781554280; x=1782159080; h=in-reply-to:autocrypt:content-language:from:references:cc:to :subject:user-agent:mime-version:date:message-id:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=qqUp60MYPWm0Pe6xYDaCv+1kTbXsTRuk88fai8naTRU=; b=fmxgVhf5s3r/j9tEX8zTf0r/ks30QtEyB0p1tD0jl/nwf/xB8FdV1ohSb0c97ffMA9 4r743cqwWdYAfM/4V06TwC22lO9aHM4EbCbMN2XqUpeTqrwKNK+2lgI0jsIp8jMswvn5 HpIHu7AfqmgLEjB4uhIiYI89Q9K1X9RRo3ZQDwYZWM1KvcUefhghEpqVhEQi0a2NJv7Q CEL3HUQIkytyU55v18At1lbRE/3tSGDHJJ/Q8g6+zyT+NLZcffbZ7iGjeyGHO5OZu8F7 pGswhPRbNM48PXhoyVLvmBay4TVejEJTFcGq0/4HjCG+U6d2kl5LKINCnotEB93udxqB ZwBA== X-Forwarded-Encrypted: i=1; AFNElJ9tLO29pEJAKBT7nBSu3HTm3CGx11SgZkrrVhL4JoYohiO+XhzGYJAp1uGSCp8XCVYn2S6PrZqqnJ30m9Gz@lists.postgresql.org X-Gm-Message-State: AOJu0YzSX0Q5ydm08wcgco+hJp8PnRBglf4j4eTIyNeELjA/D7q87cV1 pqg+CxUwD+Ep1sOHZN00B9G5LRSwsIr9Wja+GyjCdGFvRYishmlKZ6Ara9zwNm8vXeg= X-Gm-Gg: Acq92OE/M1KJEx0c6gLu+k1Z5hWbYx7/gOvwxRruhMtTh4bWexw0G7qo5oZSi67Xx7W RXeAVCPCdFMs74scVksk2VzGYHaBnTpIlF9z8j/H1Pv8W/k1BHJi20sNfvNqdwClgM8U/YMzhBT tCiKDNpy2vqxbr2+PJY3Q+1G7kTqvUckcFeyeAy8WsuQXVEDYg8Sx28KKzpD6oFvodYXa3n7bAM 1ikgLWF/2XJe2eAFniUHI/CCYsZnq5YJufQJL+gzNnL4BsA+ohRPskDnmtw0vf1BoXVehjNAFBw eDE1YKNGniIzhuQ+yzlhRpaQXm+sgt+ZeSkOkTODxEtgmNGXdaz2r8VZJ5QA9xRFyB6VXHFKIzB bQPBJlGctzMnfzhNPK0ACCqSby14i5/awZgcjqolZZbXcT5RYa/on1S1/DhJ56FS7T7NSwY0a3P 5QDnfRkLQuC32LRmdGtKWn8GGPpKa7wvmVTUKRQcmlAYa0cLKFBS7z4bhrK5lccKnwjN0sRGE= X-Received: by 2002:a05:620a:390c:b0:915:80e8:6f15 with SMTP id af79cd13be357-9161bd38c3fmr2409280585a.40.1781554279945; Mon, 15 Jun 2026 13:11:19 -0700 (PDT) Received: from ?IPV6:2605:a601:a6b0:500:ccb8:56eb:bfc6:86b5? ([2605:a601:a6b0:500:ccb8:56eb:bfc6:86b5]) by smtp.googlemail.com with ESMTPSA id af79cd13be357-91619f2d6a5sm1212774285a.20.2026.06.15.13.11.18 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 15 Jun 2026 13:11:18 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------Pyty8v3hQss00IhQTztI80k0" Message-ID: Date: Mon, 15 Jun 2026 16:11:16 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Non-text mode for pg_dumpall To: Noah Misch Cc: jian he , Mahendra Singh Thalor , tushar , Vaibhav Dalvi , pgsql-hackers@lists.postgresql.org References: <4022765f-38ee-48a3-b246-615b3f8e1c23@dunslane.net> <59d3616f-6d6d-40d5-87e2-e019e350b52d@dunslane.net> <7faf3a59-cfe1-45cb-a972-55e05560b414@dunslane.net> <2e7ada75-422c-4153-9437-ea0ce8d63521@dunslane.net> <84764ef6-2bcb-43f7-9037-d7b589857da9@dunslane.net> <20260607000218.96.noahmisch@microsoft.com> From: Andrew Dunstan Content-Language: en-US Autocrypt: addr=andrew@dunslane.net; keydata= xsBNBE7KWFkBCAClridxur2AIc7eW2AR7izbfp3EnNefie2HbLF0izW5Ik5UjX2HBXBx4syI gY6b0ugohXrr274+baoAlvSbq6cAoQuEVrk5IZFzt20b1Xkx65FwGSEj526yiKLocqkJceSq Xr9xcA5SGY+FZv441chh5SU92v4q6z+6LPpoHOh97ptAVXZYNTtU0LevyvD5lja0TzbvJm6C eFXitJfnm1pLEr0DGJCR/iUOl/N62Kh4855zZC7NHIjQHPOvV5Stz/l5ilDhvGVk+xkXFPys SjZoUr1rXhYLpiyi5sR0X9FHXT0KnGuz1F5ERO7ZTLSSQ6fJwPj6gOk9K+vvoKvoeql5ABEB AAHNJEFuZHJldyBEdW5zdGFuIDxhbmRyZXdAZHVuc2xhbmUubmV0PsLAlwQTAQgAQQIbAwIX gAIZAQULCQgHAwUVCgkICwUWAgMBAAIeBRYhBOQ+WEYd/Hy/RGkVpZn6f8tZ/DuBBQJoGNGd BQkdEO8nAAoJEJn6f8tZ/DuBq74H/jkTR4Zi3stbw+xC7v2u3QozssK7MYPL2AsVfh7OealS h182fiWXpfvmmAB7WUHbhk9GC2RAOnHI/2d2jgKaMLAHsGYOT0YopTVIwRY43fCw/mK67yxc wmDcX+zyKfLaivNbf5A7QPLNwda98bEAMSJ8Sn652Uc6cA8t3uKGsVzbRBQOoYzjgvBCfSrE 9ql3PDNg0l4BfAqabd2f70ZUm9VAMEPrgv/v2xI7M2XiL4g5BVmqLCOwxLM8RMCotCuoweUr VO43DeBCIDwLxotMJKvGWDjBzQYlU1NPUAtNcz/gN9ITUe1VUGjyvGj4u1lxBOcQQUw7l1+T 5moZ4iZxXzvOwE0ETspYWQEIANGc4zQULOxhbqO2dyD51YhqCNRmm9oKWaqf+wmW4tpDe/VV cxAnNizd4LWCHfzpb5cHAtGkOPePMfzWVf6nvdF7d3eglbtf59+zG7O7llV0xSSoFiieQBsr GvqDInXYX/4mRRXMtyhM353/tixC9RWLs1oofyYmCPPXXY7h9R7en3B8BoVrRFcdzlIY/NFN hFGW/9dkEiGjgna2Rk6e15kln4ZvFBWUg23p93w/pqXcxY6+k/8TEk+C4R+M6w7o2PLGOjdZ +kPiUcw5H85zf/yZJwQXzisXaNduwWB6Vads9YC9dj6kPR1c4VGRqAaYL++LAEOqrlvm2Tvq QqZRtnEAEQEAAcLAfAQYAQgAJgIbDBYhBOQ+WEYd/Hy/RGkVpZn6f8tZ/DuBBQJoGNI2BQkd EODdAAoJEJn6f8tZ/DuBfw0IAKTsfD40teP/pp+bsLLMSxPXUYrrprTj7WFB5v61p6dkpSr/ qXmMlyahdxQFaPmfVgVirB1Vk/kHiWNnnGjfUV9nB2Zg9LI0Xb9/ts3LsUiRWXzG3tkMY6XL vsVOxW4XFRND9l2q+WW93aZ1DZl+fqWfYgMvsusFRhmGFOKTRfKPta2Pkv+AhA24N4+PrR5p bU4k2MO8PAGiK8eaYKGFG1bHKuAvoDoF7WXJ3FHxuWqLnKEt4dfOLm5pAe3zq1Lt6q8azT9i QWGpSAK5vQUWQHBHpiDjdPeqKZ6HiAXIIKfSmb+jrvXBqoP+D6/K7rUjG2aXiRtTIAXms9sm VRu7cmw= In-Reply-To: <20260607000218.96.noahmisch@microsoft.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. --------------Pyty8v3hQss00IhQTztI80k0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 2026-06-06 Sa 8:02 PM, Noah Misch wrote: > On Thu, Feb 26, 2026 at 09:02:48AM -0500, Andrew Dunstan wrote: >> pushed with a slight tweak. > Having now reviewed commit 763aaa0, I don't think it's ready to remain part of > v19. While some points from my v18 review are now resolved, other points > still seem unresolved. I didn't find discussion of the unresolved points. I > also see new issues. OK, here's a reversion path. It's a bit messy, and I didn't touch the release notes, but apart from that I think it does the right thing. cheers andrew -- Andrew Dunstan EDB: https://www.enterprisedb.com --------------Pyty8v3hQss00IhQTztI80k0 Content-Type: text/x-patch; charset=UTF-8; name="0001-Revert-non-text-pg_dumpall.patch" Content-Disposition: attachment; filename="0001-Revert-non-text-pg_dumpall.patch" Content-Transfer-Encoding: base64 RnJvbSBmZTZkYTQ2YWZiMDE2ZDlkY2RmMzMwNTEwNTE4NTZhZTYzMGJiNzRkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgRHVuc3RhbiA8YW5kcmV3QGR1bnNsYW5l Lm5ldD4KRGF0ZTogTW9uLCAxNSBKdW4gMjAyNiAxNTo1ODowNCAtMDQwMApTdWJqZWN0OiBb UEFUQ0hdIFJldmVydCBub24tdGV4dCBvdXRwdXQgZm9ybWF0cyBmb3IgcGdfZHVtcGFsbAoK VGhpcyByZXZlcnRzIHRoZSBub24tdGV4dCAoY3VzdG9tL2RpcmVjdG9yeS90YXIpIG91dHB1 dCBmb3JtYXQgc3VwcG9ydApmb3IgcGdfZHVtcGFsbCBhZGRlZCBieSA3NjNhYWEwNmYwMyBh bmQgaXRzIGZlYXR1cmUtc3BlY2lmaWMgZm9sbG93LXVwcywKaW4gbGluZSB3aXRoIE5vYWgg TWlzY2gncyBwb3N0LWNvbW1pdCByZXZpZXcgd2hpY2ggcmVjb21tZW5kcyByZXZlcnRpbmcK YW5kIGZpbmlzaGluZyB0aGUgd29yayB0aHJvdWdoIHRoZSBjb21taXRmZXN0LgoKU2NvcGUg aXMgZGVsaWJlcmF0ZWx5IG1pbmltYWw6IG9ubHkgdGhlIGZlYXR1cmUgaXRzZWxmIGlzIHJl bW92ZWQuCkluZGVwZW5kZW50IGltcHJvdmVtZW50cyB0aGF0IG1lcmVseSB0b3VjaGVkIHRo ZSBzYW1lIGZpbGVzLCBvciB0aGF0IHdlcmUKY29tbWl0dGVkIGFsb25nc2lkZSB0aGUgZmVh dHVyZSBidXQgZG8gbm90IGRlcGVuZCBvbiBpdHMgZGVzaWduLCBhcmUKcHJlc2VydmVkLgoK UmV2ZXJ0ZWQgKHRoZSBmZWF0dXJlKToKCiAgNzYzYWFhMDZmMDMgIEFkZCBub24tdGV4dCBv dXRwdXQgZm9ybWF0cyB0byBwZ19kdW1wYWxsCiAgZDZkOWI5NmI0MDQgIENsZWFuIHVwIG5v ZGVzIHRoYXQgYXJlIG5vIGxvbmdlciBvZiB1c2UgaW4gMDA3X3BnZHVtcGFsbC5wbAogIDAx YzcyOWUwYzdhICBGaXggY2FzdGluZyBhd2F5IGNvbnN0LW5lc3MgaW4gcGdfcmVzdG9yZS5j CiAgYzc1NzJjZDQ4ZDMgIEltcHJvdmUgd3JpdGluZyBtYXAuZGF0IHByZWFtYmxlCiAgM2Mx OTk4M2NjMDggIHBnX3Jlc3RvcmU6IGFkZCAtLW5vLWdsb2JhbHMgb3B0aW9uIHRvIHNraXAg Z2xvYmFscwogIGFiZmY0NDkyZDAyICBGaXggb3B0aW9ucyBsaXN0aW5nIG9mIHBnX3Jlc3Rv cmUgLS1uby1nbG9iYWxzCiAgYmI1M2I4ZDM1OWQgIEZpeCBzbWFsbCBtZW1vcnkgbGVhayBp biBnZXRfZGJuYW1lX29pZF9saXN0X2Zyb21fbWZpbGUoKQogIGE3OTM2NzdlNTdiICBwZ19y ZXN0b3JlOiBSZW1vdmUgZGVhZCBjb2RlIGluIHJlc3RvcmVfYWxsX2RhdGFiYXNlcygpCiAg YTE5OGMyNmRlZGUgIHBnX2R1bXBhbGw6IHNpbXBsaWZ5IGNvZGluZyBvZiBkcm9wREJzKCkK ICBlYzgwMjE1YzAzMyAgcGdfcmVzdG9yZTogUmVtb3ZlIHVubmVjZXNzYXJ5IHN0cmxlbigp IGNhbGxzIGluIG9wdGlvbnMgcGFyc2luZwoKUHJlc2VydmVkIChpbmRlcGVuZGVudCBvZiB0 aGUgZmVhdHVyZSk6CgogIGIyODk4YmFhZjdlICB0aGUgY2hlY2tfbXV0X2V4Y2xfb3B0cygp IGhlbHBlciBpbiBzcmMvZmVfdXRpbHMvb3B0aW9uX3V0aWxzLmMKICAgICAgICAgICAgICAg YW5kIGl0cyB1c2UgaW4gcGdfZHVtcAogIDdjODI4MGVlYjU4ICBwZ19kdW1wJ3MgY29uZmxp Y3Rpbmctb3B0aW9uIHJlZmFjdG9yIChhbmQgdGVzdHMgMDAyLzAwNSkKICBiZTBkMGI0NTdj YiAgcGdfZHVtcGFsbCdzIHJlamVjdGlvbiBvZiAtLWNsZWFuIHRvZ2V0aGVyIHdpdGggLS1k YXRhLW9ubHkKICAgICAgICAgICAgICAgKHJlLWV4cHJlc3NlZCBkaXJlY3RseSwgc2luY2Ug cGdfZHVtcGFsbC5jIGlzIG90aGVyd2lzZQogICAgICAgICAgICAgICByZXR1cm5lZCB0byBp dHMgcHJlLWZlYXR1cmUgc3RhdGUpCiAgNzRiNDQzOGE3MGIgIHRoZSBkYW5nbGluZy1ncmFu dG9yLU9JRCBHUkFOVCBmaXggKGJhY2stcGF0Y2hlZCB0aHJvdWdoIDE2KQogIDI3M2QyNmI3 NWU3LCBkNGNiOWMzNzc2NSAgaW5kZXBlbmRlbnQgcGdfcmVzdG9yZS5zZ21sIGNsYXJpZmlj YXRpb25zCgpCZWNhdXNlIHRoZSBmZWF0dXJlIHJlc3RydWN0dXJlZCBwZ19kdW1wYWxsLmMg YW5kIHBnX3Jlc3RvcmUuYyAocGdfcmVzdG9yZSdzCm1haW4oKSB3YXMgc3BsaXQgaW50byBy ZXN0b3JlX29uZV9kYXRhYmFzZSgpIHBsdXMgYSBkaXNwYXRjaGVyKSBhbmQKaW50ZXJsZWF2 ZWQgaXRzIG9wdGlvbiBjaGVja3Mgd2l0aCB0aGUgY29uZmxpY3Rpbmctb3B0aW9uIHJlZmFj dG9yIGluIHRoZQpzYW1lIHJlZ2lvbnMsIHRoZSBjb3NtZXRpYyBjaGVja19tdXRfZXhjbF9v cHRzKCkgcmVmbG93IG9mIHRob3NlIHR3byBmaWxlcycKb3B0aW9uIGJsb2NrcyBpcyBpbnNl cGFyYWJsZSBmcm9tIHRoZSBmZWF0dXJlIGFuZCBjb21lcyBvdXQgd2l0aCBpdDsgdGhlCmJl aGF2aW9yIGlzIHVuY2hhbmdlZC4gIFRoZSByZXVzYWJsZSBoZWxwZXIgYW5kIHBnX2R1bXAn cyB1c2Ugb2YgaXQgYXJlCnVuYWZmZWN0ZWQuCgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rn ci5lcy9tLzIwMjYwNjA3MDAwMjE4Ljk2Lm5vYWhtaXNjaEBtaWNyb3NvZnQuY29tCi0tLQog ZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwgICAgICAgICAgICB8IDEzNSArLS0K IGRvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sICAgICAgICAgICAgfCAxMjkgKy0t CiBzcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgIHwgICAxIC0K IHNyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jICAgICAgICAgICAgICAgICAgfCAgMTQgLQog c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oICAgICAgICAgICAgICAgICB8ICAgMiArLQog c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jICAgICAgICB8ICA2NyArLQog c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oICAgICAgICB8ICAgMSAtCiBz cmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jICAgICAgICAgICAgIHwgICAyICstCiBz cmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgICAgICAgIHwgICAyICstCiBz cmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jICAgICAgICAgICAgICAgIHwgODYzICsrKyst LS0tLS0tLS0tLS0tLS0tCiBzcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jICAgICAgICAg ICAgICAgIHwgNzc2ICsrLS0tLS0tLS0tLS0tLS0tLQogc3JjL2Jpbi9wZ19kdW1wL3QvMDAx X2Jhc2ljLnBsICAgICAgICAgICAgICB8IDExMiArLS0KIHNyYy9iaW4vcGdfZHVtcC90LzAw NV9wZ19kdW1wX2ZpbHRlcmZpbGUucGwgfCAgIDQgKy0KIHNyYy9iaW4vcGdfZHVtcC90LzAw N19wZ19kdW1wYWxsLnBsICAgICAgICAgfCA2NjEgLS0tLS0tLS0tLS0tLS0tCiBzcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgIHwgICAxIC0KIDE1IGZpbGVz IGNoYW5nZWQsIDI3NSBpbnNlcnRpb25zKCspLCAyNDk1IGRlbGV0aW9ucygtKQogZGVsZXRl IG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfZHVtcC90LzAwN19wZ19kdW1wYWxsLnBsCgpkaWZm IC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwgYi9kb2Mvc3JjL3Nn bWwvcmVmL3BnX2R1bXBhbGwuc2dtbAppbmRleCA1MWM3MDE5ODA5MS4uODgzNGI3ZWMxNDEg MTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCisrKyBiL2Rv Yy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCkBAIC0xNiwxMCArMTYsNyBAQCBQb3N0 Z3JlU1FMIGRvY3VtZW50YXRpb24KIAogIDxyZWZuYW1lZGl2PgogICA8cmVmbmFtZT5wZ19k dW1wYWxsPC9yZWZuYW1lPgotCi0gIDxyZWZwdXJwb3NlPgotICAgZXhwb3J0IGEgPHByb2R1 Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBjbHVzdGVyIGFzIGFu IFNRTCBzY3JpcHQgb3IgdG8gb3RoZXIgZm9ybWF0cwotICA8L3JlZnB1cnBvc2U+CisgIDxy ZWZwdXJwb3NlPmV4dHJhY3QgYSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5h bWU+IGRhdGFiYXNlIGNsdXN0ZXIgaW50byBhIHNjcmlwdCBmaWxlPC9yZWZwdXJwb3NlPgog IDwvcmVmbmFtZWRpdj4KIAogIDxyZWZzeW5vcHNpc2Rpdj4KQEAgLTM2LDMzICszMywxNCBA QCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgPHBhcmE+CiAgICA8YXBwbGljYXRpb24+ cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+IGlzIGEgdXRpbGl0eSBmb3Igd3JpdGluZyBvdXQK ICAgICg8cXVvdGU+ZHVtcGluZzwvcXVvdGU+KSBhbGwgPHByb2R1Y3RuYW1lPlBvc3RncmVT UUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZXMKLSAgIG9mIGEgY2x1c3RlciBpbnRvIGFuIFNR TCBzY3JpcHQgZmlsZSBvciBhbiBhcmNoaXZlLiAgSXQgZG9lcyB0aGlzIGJ5CisgICBvZiBh IGNsdXN0ZXIgaW50byBvbmUgc2NyaXB0IGZpbGUuICBUaGUgc2NyaXB0IGZpbGUgY29udGFp bnMKKyAgIDxhY3JvbnltPlNRTDwvYWNyb255bT4gY29tbWFuZHMgdGhhdCBjYW4gYmUgdXNl ZCBhcyBpbnB1dCB0byA8eHJlZgorICAgbGlua2VuZD0iYXBwLXBzcWwiLz4gdG8gcmVzdG9y ZSB0aGUgZGF0YWJhc2VzLiAgSXQgZG9lcyB0aGlzIGJ5CiAgICBjYWxsaW5nIDx4cmVmIGxp bmtlbmQ9ImFwcC1wZ2R1bXAiLz4gZm9yIGVhY2ggZGF0YWJhc2UgaW4gdGhlIGNsdXN0ZXIu Ci0gICBUaGUgb3V0cHV0IGNvbnRhaW5zIDxhY3JvbnltPlNRTDwvYWNyb255bT4gY29tbWFu ZHMgdGhhdCBjYW4gYmUgdXNlZAotICAgYXMgaW5wdXQgdG8gPHhyZWYgbGlua2VuZD0iYXBw LXBzcWwiLz4gb3IgPHhyZWYgbGlua2VuZD0iYXBwLXBncmVzdG9yZSIvPgotICAgdG8gcmVz dG9yZSB0aGUgZGF0YWJhc2VzLgogICAgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxp Y2F0aW9uPiBhbHNvIGR1bXBzIGdsb2JhbCBvYmplY3RzCiAgICB0aGF0IGFyZSBjb21tb24g dG8gYWxsIGRhdGFiYXNlcywgbmFtZWx5IGRhdGFiYXNlIHJvbGVzLCB0YWJsZXNwYWNlcywK ICAgIGFuZCBwcml2aWxlZ2UgZ3JhbnRzIGZvciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMu CiAgICAoPGFwcGxpY2F0aW9uPnBnX2R1bXA8L2FwcGxpY2F0aW9uPiBkb2VzIG5vdCBzYXZl IHRoZXNlIG9iamVjdHMuKQotICAgVGhlIG9ubHkgcGFydHMgb2YgYSBkYXRhYmFzZSBjbHVz dGVyJ3Mgc3RhdGUgdGhhdAotICAgYXJlIDxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPiBpbmNs dWRlZCBpbiB0aGUgZGVmYXVsdCBvdXRwdXQKLSAgIG9mIDxhcHBsaWNhdGlvbj5wZ19kdW1w YWxsPC9hcHBsaWNhdGlvbj4gYXJlIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzCi0gICBhbmQg YW55IGRhdGFiYXNlIHBhcmFtZXRlciBzZXR0aW5nIGNoYW5nZXMgbWFkZSB3aXRoCi0gICA8 eHJlZiBsaW5rZW5kPSJzcWwtYWx0ZXJzeXN0ZW0iLz4uCi0gIDwvcGFyYT4KLQotICA8cGFy YT4KLSAgIElmIHRoZSBvdXRwdXQgZm9ybWF0IGlzIGEKLSAgIHBsYWluIHRleHQgU1FMIHNj cmlwdCwgaXQgd2lsbCBiZSB3cml0dGVuIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuICBVc2Ug dGhlCi0gICA8b3B0aW9uPi1mPC9vcHRpb24+LzxvcHRpb24+LS1maWxlPC9vcHRpb24+IG9w dGlvbiBvciBzaGVsbCBvcGVyYXRvcnMgdG8KLSAgIHJlZGlyZWN0IGl0IGludG8gYSBmaWxl LgotICA8L3BhcmE+Ci0KLSAgPHBhcmE+Ci0gICBJZiBhbm90aGVyIG91dHB1dCBmb3JtYXQg aXMgc2VsZWN0ZWQsIHRoZSBhcmNoaXZlIHdpbGwgYmUgcGxhY2VkIGluIGEKLSAgIGRpcmVj dG9yeSBuYW1lZCB1c2luZyB0aGUgPG9wdGlvbj4tZjwvb3B0aW9uPi88b3B0aW9uPi0tZmls ZTwvb3B0aW9uPgotICAgb3B0aW9uLCB3aGljaCBpcyByZXF1aXJlZCBpbiB0aGlzIGNhc2Uu CiAgIDwvcGFyYT4KIAogICA8cGFyYT4KQEAgLTczLDYgKzUxLDEyIEBAIFBvc3RncmVTUUwg ZG9jdW1lbnRhdGlvbgogICAgYWxsb3dlZCB0byBhZGQgcm9sZXMgYW5kIGNyZWF0ZSBkYXRh YmFzZXMuCiAgIDwvcGFyYT4KIAorICA8cGFyYT4KKyAgIFRoZSBTUUwgc2NyaXB0IHdpbGwg YmUgd3JpdHRlbiB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAgVXNlIHRoZQorICAgPG9wdGlv bj4tZjwvb3B0aW9uPi88b3B0aW9uPi0tZmlsZTwvb3B0aW9uPiBvcHRpb24gb3Igc2hlbGwg b3BlcmF0b3JzIHRvCisgICByZWRpcmVjdCBpdCBpbnRvIGEgZmlsZS4KKyAgPC9wYXJhPgor CiAgIDxwYXJhPgogICA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+IG5l ZWRzIHRvIGNvbm5lY3Qgc2V2ZXJhbAogICB0aW1lcyB0byB0aGUgPHByb2R1Y3RuYW1lPlBv c3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBzZXJ2ZXIgKG9uY2UgcGVyCkBAIC0xNDcsOTMgKzEz MSwxNiBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgICA8cGFyYT4KICAgICAg ICAgU2VuZCBvdXRwdXQgdG8gdGhlIHNwZWNpZmllZCBmaWxlLiAgSWYgdGhpcyBpcyBvbWl0 dGVkLCB0aGUKICAgICAgICAgc3RhbmRhcmQgb3V0cHV0IGlzIHVzZWQuCi0gICAgICAgIFRo aXMgb3B0aW9uIGNhbiBvbmx5IGJlIG9taXR0ZWQgd2hlbiA8b3B0aW9uPi0tZm9ybWF0PC9v cHRpb24+IGlzIHBsYWluLgogICAgICAgIDwvcGFyYT4KICAgICAgIDwvbGlzdGl0ZW0+CiAg ICAgIDwvdmFybGlzdGVudHJ5PgogCi0gICAgIDx2YXJsaXN0ZW50cnk+Ci0gICAgICA8dGVy bT48b3B0aW9uPi1GIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5mb3JtYXQ8L3Jl cGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KLSAgICAgIDx0ZXJtPjxvcHRpb24+LS1mb3Jt YXQ9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmZvcm1hdDwvcmVwbGFjZWFibGU+ PC9vcHRpb24+PC90ZXJtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgIDxwYXJhPgotICAg ICAgICBTcGVjaWZ5IHRoZSBmb3JtYXQgb2YgZHVtcCBmaWxlcy4gIEluIHBsYWluIGZvcm1h dCwgYWxsIHRoZSBkdW1wIGRhdGEgaXMKLSAgICAgICAgc2VudCBpbiBhIHNpbmdsZSB0ZXh0 IHN0cmVhbS4gVGhpcyBpcyB0aGUgZGVmYXVsdC4KLQotICAgICAgICBJbiBhbGwgb3RoZXIg bW9kZXMsIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4gZmlyc3QgY3Jl YXRlcyB0d28gZmlsZXMsCi0gICAgICAgIDxmaWxlbmFtZT50b2MuZ2xvPC9maWxlbmFtZT4g YW5kIDxmaWxlbmFtZT5tYXAuZGF0PC9maWxlbmFtZT4sIGluIHRoZSBkaXJlY3RvcnkKLSAg ICAgICAgc3BlY2lmaWVkIGJ5IDxvcHRpb24+LS1maWxlPC9vcHRpb24+LgotICAgICAgICBU aGUgZmlyc3QgZmlsZSBjb250YWlucyBnbG9iYWwgZGF0YSAocm9sZXMgYW5kIHRhYmxlc3Bh Y2VzKSBpbiBjdXN0b20gZm9ybWF0LiBUaGUgc2Vjb25kCi0gICAgICAgIGNvbnRhaW5zIGEg bWFwcGluZyBiZXR3ZWVuIGRhdGFiYXNlIE9JRHMgYW5kIG5hbWVzLiBUaGVzZSBmaWxlcyBh cmUgdXNlZCBieQotICAgICAgICA8YXBwbGljYXRpb24+cGdfcmVzdG9yZTwvYXBwbGljYXRp b24+LiBEYXRhIGZvciBpbmRpdmlkdWFsIGRhdGFiYXNlcyBpcyBwbGFjZWQgaW4KLSAgICAg ICAgdGhlIDxmaWxlbmFtZT5kYXRhYmFzZXM8L2ZpbGVuYW1lPiBzdWJkaXJlY3RvcnksIG5h bWVkIHVzaW5nIHRoZSBkYXRhYmFzZSdzIE9JRC4KLQotICAgICAgIDx2YXJpYWJsZWxpc3Q+ Ci0gICAgICAgIDx2YXJsaXN0ZW50cnk+Ci0gICAgICAgICA8dGVybT48bGl0ZXJhbD5kPC9s aXRlcmFsPjwvdGVybT4KLSAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmRpcmVjdG9yeTwvbGl0 ZXJhbD48L3Rlcm0+Ci0gICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgPHBhcmE+Ci0g ICAgICAgICAgIE91dHB1dCBkaXJlY3RvcnktZm9ybWF0IGFyY2hpdmVzIGZvciBlYWNoIGRh dGFiYXNlLAotICAgICAgICAgICBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19yZXN0b3Jl LiBUaGUgZGlyZWN0b3J5Ci0gICAgICAgICAgIHdpbGwgaGF2ZSBkYXRhYmFzZSA8dHlwZT5v aWQ8L3R5cGU+IGFzIGl0cyBuYW1lLgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgIDwv bGlzdGl0ZW0+Ci0gICAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICAgIDx2YXJsaXN0 ZW50cnk+Ci0gICAgICAgICA8dGVybT48bGl0ZXJhbD5wPC9saXRlcmFsPjwvdGVybT4KLSAg ICAgICAgIDx0ZXJtPjxsaXRlcmFsPnBsYWluPC9saXRlcmFsPjwvdGVybT4KLSAgICAgICAg IDxsaXN0aXRlbT4KLSAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgT3V0cHV0IGEgcGxh aW4tdGV4dCBTUUwgc2NyaXB0IGZpbGUgKHRoZSBkZWZhdWx0KS4KLSAgICAgICAgICA8L3Bh cmE+Ci0gICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KLQot ICAgICAgICA8dmFybGlzdGVudHJ5PgotICAgICAgICAgPHRlcm0+PGxpdGVyYWw+YzwvbGl0 ZXJhbD48L3Rlcm0+Ci0gICAgICAgICA8dGVybT48bGl0ZXJhbD5jdXN0b208L2xpdGVyYWw+ PC90ZXJtPgotICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPgotICAgICAg ICAgICBPdXRwdXQgYSBjdXN0b20tZm9ybWF0IGFyY2hpdmUgZm9yIGVhY2ggZGF0YWJhc2Us Ci0gICAgICAgICAgIHN1aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jlc3RvcmUuIFRoZSBh cmNoaXZlCi0gICAgICAgICAgIHdpbGwgYmUgbmFtZWQgPGZpbGVuYW1lPmRib2lkLmRtcDwv ZmlsZW5hbWU+IHdoZXJlIDx0eXBlPmRib2lkPC90eXBlPiBpcyB0aGUKLSAgICAgICAgICAg PHR5cGU+b2lkPC90eXBlPiBvZiB0aGUgZGF0YWJhc2UuCi0gICAgICAgICAgPC9wYXJhPgot ICAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAg ICAgIDx2YXJsaXN0ZW50cnk+Ci0gICAgICAgICA8dGVybT48bGl0ZXJhbD50PC9saXRlcmFs PjwvdGVybT4KLSAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnRhcjwvbGl0ZXJhbD48L3Rlcm0+ Ci0gICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgIE91 dHB1dCBhIHRhci1mb3JtYXQgYXJjaGl2ZSBmb3IgZWFjaCBkYXRhYmFzZSwKLSAgICAgICAg ICAgc3VpdGFibGUgZm9yIGlucHV0IGludG8gcGdfcmVzdG9yZS4gVGhlIGFyY2hpdmUKLSAg ICAgICAgICAgd2lsbCBiZSBuYW1lZCA8ZmlsZW5hbWU+ZGJvaWQudGFyPC9maWxlbmFtZT4g d2hlcmUgPHR5cGU+ZGJvaWQ8L3R5cGU+IGlzIHRoZQotICAgICAgICAgICA8dHlwZT5vaWQ8 L3R5cGU+IG9mIHRoZSBkYXRhYmFzZS4KLSAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICA8 L2xpc3RpdGVtPgotICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgICA8L3Zhcmlh YmxlbGlzdD4KLQotICAgICAgIFNlZSA8eHJlZiBsaW5rZW5kPSJhcHAtcGdkdW1wIi8+IGZv ciBkZXRhaWxzIG9uIGhvdyB0aGUKLSAgICAgICB2YXJpb3VzIG5vbi1wbGFpbi10ZXh0IGFy Y2hpdmUgZm9ybWF0cyB3b3JrLgotCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0 ZW0+Ci0gICAgIDwvdmFybGlzdGVudHJ5PgotCiAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAg ICA8dGVybT48b3B0aW9uPi1nPC9vcHRpb24+PC90ZXJtPgogICAgICAgPHRlcm0+PG9wdGlv bj4tLWdsb2JhbHMtb25seTwvb3B0aW9uPjwvdGVybT4KICAgICAgIDxsaXN0aXRlbT4KICAg ICAgICA8cGFyYT4KICAgICAgICAgRHVtcCBvbmx5IGdsb2JhbCBvYmplY3RzIChyb2xlcyBh bmQgdGFibGVzcGFjZXMpLCBubyBkYXRhYmFzZXMuCi0gICAgICAgIE5vdGU6IDxvcHRpb24+ LS1nbG9iYWxzLW9ubHk8L29wdGlvbj4gY2Fubm90IGJlIHVzZWQgd2l0aAotICAgICAgICA8 b3B0aW9uPi0tY2xlYW48L29wdGlvbj4gd2l0aCBub24tdGV4dCBkdW1wIGZvcm1hdC4KICAg ICAgICA8L3BhcmE+CiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4K QEAgLTEwMjksMjEgKzkzNiwxMyBAQCBleGNsdWRlIGRhdGFiYXNlIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5QQVRURVJOPC9yZXBsYWNlYWJsZT4KICA8cmVmc2VjdDEgaWQ9 ImFwcC1wZy1kdW1wYWxsLWV4Ij4KICAgPHRpdGxlPkV4YW1wbGVzPC90aXRsZT4KICAgPHBh cmE+Ci0gICBUbyBkdW1wIGFsbCBkYXRhYmFzZXMgaW4gcGxhaW4gdGV4dCBmb3JtYXQgKHRo ZSBkZWZhdWx0KToKKyAgIFRvIGR1bXAgYWxsIGRhdGFiYXNlczoKKwogPHNjcmVlbj4KIDxw cm9tcHQ+JDwvcHJvbXB0PiA8dXNlcmlucHV0PnBnX2R1bXBhbGwgJmd0OyBkYi5vdXQ8L3Vz ZXJpbnB1dD4KIDwvc2NyZWVuPgogICA8L3BhcmE+CiAKLSAgPHBhcmE+Ci0gICBUbyBkdW1w IGFsbCBkYXRhYmFzZXMgdXNpbmcgb3RoZXIgZm9ybWF0czoKLTxzY3JlZW4+Ci08cHJvbXB0 PiQ8L3Byb21wdD4gPHVzZXJpbnB1dD5wZ19kdW1wYWxsIC0tZm9ybWF0PWRpcmVjdG9yeSAt ZiBkYi5vdXQ8L3VzZXJpbnB1dD4KLTxwcm9tcHQ+JDwvcHJvbXB0PiA8dXNlcmlucHV0PnBn X2R1bXBhbGwgLS1mb3JtYXQ9Y3VzdG9tIC1mIGRiLm91dDwvdXNlcmlucHV0PgotPHByb21w dD4kPC9wcm9tcHQ+IDx1c2VyaW5wdXQ+cGdfZHVtcGFsbCAtLWZvcm1hdD10YXIgLWYgZGIu b3V0PC91c2VyaW5wdXQ+Ci08L3NjcmVlbj4KLSAgPC9wYXJhPgotCiAgIDxwYXJhPgogICAg VG8gcmVzdG9yZSBkYXRhYmFzZShzKSBmcm9tIHRoaXMgZmlsZSwgeW91IGNhbiB1c2U6CiA8 c2NyZWVuPgpAQCAtMTA1NywxNiArOTU2LDYgQEAgZXhjbHVkZSBkYXRhYmFzZSA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+UEFUVEVSTjwvcmVwbGFjZWFibGU+CiAgICB0aGUg c2NyaXB0IHdpbGwgYXR0ZW1wdCB0byBkcm9wIG90aGVyIGRhdGFiYXNlcyBpbW1lZGlhdGVs eSwgYW5kIHRoYXQKICAgIHdpbGwgZmFpbCBmb3IgdGhlIGRhdGFiYXNlIHlvdSBhcmUgY29u bmVjdGVkIHRvLgogICA8L3BhcmE+Ci0KLSAgPHBhcmE+Ci0gICBJZiB0aGUgZHVtcCB3YXMg dGFrZW4gaW4gYSBub24tcGxhaW4tdGV4dCBmb3JtYXQsIHVzZQotICAgPGFwcGxpY2F0aW9u PnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPiB0byByZXN0b3JlIHRoZSBkYXRhYmFzZXM6Ci08 c2NyZWVuPgotPHByb21wdD4kPC9wcm9tcHQ+IDx1c2VyaW5wdXQ+cGdfcmVzdG9yZSBkYi5v dXQgLWQgcG9zdGdyZXMgLUM8L3VzZXJpbnB1dD4KLTwvc2NyZWVuPgotICAgVGhpcyB3aWxs IHJlc3RvcmUgYWxsIGRhdGFiYXNlcy4gIFRvIHJlc3RvcmUgb25seSBzb21lIGRhdGFiYXNl cywgdXNlCi0gICB0aGUgPG9wdGlvbj4tLWV4Y2x1ZGUtZGF0YWJhc2U8L29wdGlvbj4gb3B0 aW9uIHRvIHNraXAgdGhvc2Ugbm90IHdhbnRlZC4KLSAgPC9wYXJhPgogIDwvcmVmc2VjdDE+ CiAKICA8cmVmc2VjdDE+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3Rv cmUuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sCmluZGV4IDVlNzdk ZGQ1NTZmLi5iNmM1Mjk5YzM2ZSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19y ZXN0b3JlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwKQEAg LTE4LDkgKzE4LDggQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgIDxyZWZuYW1lPnBn X3Jlc3RvcmU8L3JlZm5hbWU+CiAKICAgPHJlZnB1cnBvc2U+Ci0gICByZXN0b3JlIDxwcm9k dWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2VzIGZyb20gYXJjaGl2 ZXMKLSAgIGNyZWF0ZWQgYnkgPGFwcGxpY2F0aW9uPnBnX2R1bXA8L2FwcGxpY2F0aW9uPiBv cgotICAgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPgorICAgcmVzdG9y ZSBhIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2UgZnJv bSBhbgorICAgYXJjaGl2ZSBmaWxlIGNyZWF0ZWQgYnkgPGFwcGxpY2F0aW9uPnBnX2R1bXA8 L2FwcGxpY2F0aW9uPgogICA8L3JlZnB1cnBvc2U+CiAgPC9yZWZuYW1lZGl2PgogCkBAIC0z OSwxNCArMzgsMTMgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAKICAgPHBhcmE+CiAg ICA8YXBwbGljYXRpb24+cGdfcmVzdG9yZTwvYXBwbGljYXRpb24+IGlzIGEgdXRpbGl0eSBm b3IgcmVzdG9yaW5nIGEKLSAgIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFt ZT4gZGF0YWJhc2Ugb3IgY2x1c3RlciBmcm9tIGFuIGFyY2hpdmUKLSAgIGNyZWF0ZWQgYnkg PHhyZWYgbGlua2VuZD0iYXBwLXBnZHVtcCIvPiBvcgotICAgPHhyZWYgbGlua2VuZD0iYXBw LXBnLWR1bXBhbGwiLz4gaW4gb25lIG9mIHRoZSBub24tcGxhaW4tdGV4dAorICAgPHByb2R1 Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBmcm9tIGFuIGFyY2hp dmUKKyAgIGNyZWF0ZWQgYnkgPHhyZWYgbGlua2VuZD0iYXBwLXBnZHVtcCIvPiBpbiBvbmUg b2YgdGhlIG5vbi1wbGFpbi10ZXh0CiAgICBmb3JtYXRzLiAgSXQgd2lsbCBpc3N1ZSB0aGUg Y29tbWFuZHMgbmVjZXNzYXJ5IHRvIHJlY29uc3RydWN0IHRoZQotICAgZGF0YWJhc2Ugb3Ig Y2x1c3RlciB0byB0aGUgc3RhdGUgaXQgd2FzIGluIGF0IHRoZSB0aW1lIGl0IHdhcyBzYXZl ZC4gVGhlCi0gICBhcmNoaXZlcyBhbHNvIGFsbG93IDxhcHBsaWNhdGlvbj5wZ19yZXN0b3Jl PC9hcHBsaWNhdGlvbj4gdG8KKyAgIGRhdGFiYXNlIHRvIHRoZSBzdGF0ZSBpdCB3YXMgaW4g YXQgdGhlIHRpbWUgaXQgd2FzIHNhdmVkLiAgVGhlCisgICBhcmNoaXZlIGZpbGVzIGFsc28g YWxsb3cgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPiB0bwogICAgYmUg c2VsZWN0aXZlIGFib3V0IHdoYXQgaXMgcmVzdG9yZWQsIG9yIGV2ZW4gdG8gcmVvcmRlciB0 aGUgaXRlbXMKLSAgIHByaW9yIHRvIGJlaW5nIHJlc3RvcmVkLiBUaGUgYXJjaGl2ZSBmb3Jt YXRzIGFyZSBkZXNpZ25lZCB0byBiZQorICAgcHJpb3IgdG8gYmVpbmcgcmVzdG9yZWQuIFRo ZSBhcmNoaXZlIGZpbGVzIGFyZSBkZXNpZ25lZCB0byBiZQogICAgcG9ydGFibGUgYWNyb3Nz IGFyY2hpdGVjdHVyZXMuCiAgIDwvcGFyYT4KIApAQCAtNTQsMzQgKzUyLDE0IEBAIFBvc3Rn cmVTUUwgZG9jdW1lbnRhdGlvbgogICAgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxp Y2F0aW9uPiBjYW4gb3BlcmF0ZSBpbiB0d28gbW9kZXMuCiAgICBJZiBhIGRhdGFiYXNlIG5h bWUgaXMgc3BlY2lmaWVkLCA8YXBwbGljYXRpb24+cGdfcmVzdG9yZTwvYXBwbGljYXRpb24+ CiAgICBjb25uZWN0cyB0byB0aGF0IGRhdGFiYXNlIGFuZCByZXN0b3JlcyBhcmNoaXZlIGNv bnRlbnRzIGRpcmVjdGx5IGludG8KLSAgIHRoZSBkYXRhYmFzZS4KLSAgIFdoZW4gcmVzdG9y aW5nIGZyb20gYSBkdW1wIG1hZGUgYnkgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxp Y2F0aW9uPiwKLSAgIGVhY2ggZGF0YWJhc2Ugd2lsbCBiZSBjcmVhdGVkIGFuZCB0aGVuIHRo ZSByZXN0b3JhdGlvbiB3aWxsIGJlIHJ1biBpbiB0aGF0Ci0gICBkYXRhYmFzZS4KLQotICAg T3RoZXJ3aXNlLCB3aGVuIGEgZGF0YWJhc2UgbmFtZSBpcyBub3Qgc3BlY2lmaWVkLCBhIHNj cmlwdCBjb250YWluaW5nIHRoZSBTUUwKLSAgIGNvbW1hbmRzIG5lY2Vzc2FyeSB0byByZWJ1 aWxkIHRoZSBkYXRhYmFzZSBvciBjbHVzdGVyIGlzIGNyZWF0ZWQgYW5kIHdyaXR0ZW4KKyAg IHRoZSBkYXRhYmFzZS4gIE90aGVyd2lzZSwgYSBzY3JpcHQgY29udGFpbmluZyB0aGUgU1FM CisgICBjb21tYW5kcyBuZWNlc3NhcnkgdG8gcmVidWlsZCB0aGUgZGF0YWJhc2UgaXMgY3Jl YXRlZCBhbmQgd3JpdHRlbgogICAgdG8gYSBmaWxlIG9yIHN0YW5kYXJkIG91dHB1dC4gIFRo aXMgc2NyaXB0IG91dHB1dCBpcyBlcXVpdmFsZW50IHRvCi0gICB0aGUgcGxhaW4gdGV4dCBv dXRwdXQgZm9ybWF0IG9mIDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4gb3IK LSAgIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4uCi0KKyAgIHRoZSBw bGFpbiB0ZXh0IG91dHB1dCBmb3JtYXQgb2YgPGFwcGxpY2F0aW9uPnBnX2R1bXA8L2FwcGxp Y2F0aW9uPi4KICAgIFNvbWUgb2YgdGhlIG9wdGlvbnMgY29udHJvbGxpbmcgdGhlIG91dHB1 dCBhcmUgdGhlcmVmb3JlIGFuYWxvZ291cyB0bwogICAgPGFwcGxpY2F0aW9uPnBnX2R1bXA8 L2FwcGxpY2F0aW9uPiBvcHRpb25zLgogICA8L3BhcmE+CiAKLSAgPHBhcmE+Ci0gICBBIG5v bi1wbGFpbi10ZXh0IGFyY2hpdmUgbWFkZSB1c2luZyA8YXBwbGljYXRpb24+cGdfZHVtcGFs bDwvYXBwbGljYXRpb24+Ci0gICBpcyBhIGRpcmVjdG9yeSBjb250YWluaW5nIGEgPGZpbGVu YW1lPnRvYy5nbG88L2ZpbGVuYW1lPiBmaWxlIHdpdGggZ2xvYmFsCi0gICBvYmplY3RzIChy b2xlcyBhbmQgdGFibGVzcGFjZXMpLCBhIDxmaWxlbmFtZT5tYXAuZGF0PC9maWxlbmFtZT4g ZmlsZQotICAgbGlzdGluZyB0aGUgZGF0YWJhc2VzLCBhbmQgYSBzdWJkaXJlY3RvcnkgZm9y IGVhY2ggZGF0YWJhc2UgY29udGFpbmluZwotICAgaXRzIGFyY2hpdmUuICBXaGVuIHJlc3Rv cmluZyBzdWNoIGFuIGFyY2hpdmUsCi0gICA8YXBwbGljYXRpb24+cGdfcmVzdG9yZTwvYXBw bGljYXRpb24+IGZpcnN0IHJlc3RvcmVzIGdsb2JhbCBvYmplY3RzIGZyb20KLSAgIDxmaWxl bmFtZT50b2MuZ2xvPC9maWxlbmFtZT4sIHRoZW4gcHJvY2Vzc2VzIGVhY2ggZGF0YWJhc2Ug bGlzdGVkIGluCi0gICA8ZmlsZW5hbWU+bWFwLmRhdDwvZmlsZW5hbWU+LiAgTGluZXMgaW4g PGZpbGVuYW1lPm1hcC5kYXQ8L2ZpbGVuYW1lPiBjYW4KLSAgIGJlIGNvbW1lbnRlZCBvdXQg d2l0aCA8bGl0ZXJhbD4jPC9saXRlcmFsPiB0byBza2lwIHJlc3RvcmluZyBzcGVjaWZpYwot ICAgZGF0YWJhc2VzLgotICA8L3BhcmE+Ci0KICAgPHBhcmE+CiAgICBPYnZpb3VzbHksIDxh cHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4gY2Fubm90IHJlc3RvcmUgaW5m b3JtYXRpb24KICAgIHRoYXQgaXMgbm90IHByZXNlbnQgaW4gdGhlIGFyY2hpdmUgZmlsZS4g IEZvciBpbnN0YW5jZSwgaWYgdGhlCkBAIC0xNTIsMTIgKzEzMCw2IEBAIFBvc3RncmVTUUwg ZG9jdW1lbnRhdGlvbgogICAgICAgICBpZ25vcmFibGUgZXJyb3IgbWVzc2FnZXMgd2lsbCBi ZSByZXBvcnRlZCwKICAgICAgICAgdW5sZXNzIDxvcHRpb24+LS1pZi1leGlzdHM8L29wdGlv bj4gaXMgYWxzbyBzcGVjaWZpZWQuCiAgICAgICAgPC9wYXJhPgotICAgICAgIDxwYXJhPgot ICAgICAgICBXaGVuIHJlc3RvcmluZyBhIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBs aWNhdGlvbj4gYXJjaGl2ZSwKLSAgICAgICAgPG9wdGlvbj4tLWlmLWV4aXN0czwvb3B0aW9u PiBpcyBpbXBsaWVkIGJ5IDxvcHRpb24+LS1jbGVhbjwvb3B0aW9uPiwKLSAgICAgICAgc2lu Y2UgZ2xvYmFsIG9iamVjdHMgc3VjaCBhcyByb2xlcyBhbmQgdGFibGVzcGFjZXMgbWF5IG5v dCBleGlzdAotICAgICAgICBpbiB0aGUgdGFyZ2V0IGNsdXN0ZXIuCi0gICAgICAgPC9wYXJh PgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKQEAgLTE4MCw4 ICsxNTIsNiBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgICAgY29tbWFuZHMg dGhhdCBtZW50aW9uIHRoaXMgZGF0YWJhc2UuCiAgICAgICAgIEFjY2VzcyBwcml2aWxlZ2Vz IGZvciB0aGUgZGF0YWJhc2UgaXRzZWxmIGFyZSBhbHNvIHJlc3RvcmVkLAogICAgICAgICB1 bmxlc3MgPG9wdGlvbj4tLW5vLWFjbDwvb3B0aW9uPiBpcyBzcGVjaWZpZWQuCi0gICAgICAg IDxvcHRpb24+LS1jcmVhdGU8L29wdGlvbj4gaXMgcmVxdWlyZWQgd2hlbiByZXN0b3Jpbmcg bXVsdGlwbGUgZGF0YWJhc2VzCi0gICAgICAgIGZyb20gYSBub24tcGxhaW4tdGV4dCBhcmNo aXZlIG1hZGUgdXNpbmcgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPi4K ICAgICAgICA8L3BhcmE+CiAKICAgICAgICA8cGFyYT4KQEAgLTI4MiwyOSArMjUyLDYgQEAg UG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zh cmxpc3RlbnRyeT4KIAotICAgICA8dmFybGlzdGVudHJ5PgotICAgICAgPHRlcm0+PG9wdGlv bj4tZzwvb3B0aW9uPjwvdGVybT4KLSAgICAgIDx0ZXJtPjxvcHRpb24+LS1nbG9iYWxzLW9u bHk8L29wdGlvbj48L3Rlcm0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgPHBhcmE+Ci0g ICAgICAgIFJlc3RvcmUgb25seSBnbG9iYWwgb2JqZWN0cyAocm9sZXMgYW5kIHRhYmxlc3Bh Y2VzKSwgbm8gZGF0YWJhc2VzLgotICAgICAgIDwvcGFyYT4KLSAgICAgICA8cGFyYT4KLSAg ICAgICAgVGhpcyBvcHRpb24gaXMgb25seSByZWxldmFudCB3aGVuIHJlc3RvcmluZyBmcm9t IGEgbm9uLXBsYWluLXRleHQgYXJjaGl2ZSBtYWRlIHVzaW5nIDxhcHBsaWNhdGlvbj5wZ19k dW1wYWxsPC9hcHBsaWNhdGlvbj4uCi0gICAgICAgIE5vdGU6IDxvcHRpb24+LS1nbG9iYWxz LW9ubHk8L29wdGlvbj4gY2Fubm90IGJlIHVzZWQgd2l0aAotICAgICAgICA8b3B0aW9uPi0t ZGF0YS1vbmx5PC9vcHRpb24+LAotICAgICAgICA8b3B0aW9uPi0tc2NoZW1hLW9ubHk8L29w dGlvbj4sCi0gICAgICAgIDxvcHRpb24+LS1zdGF0aXN0aWNzLW9ubHk8L29wdGlvbj4sCi0g ICAgICAgIDxvcHRpb24+LS1zdGF0aXN0aWNzPC9vcHRpb24+LAotICAgICAgICA8b3B0aW9u Pi0tbm8tZ2xvYmFsczwvb3B0aW9uPiwKLSAgICAgICAgPG9wdGlvbj4tLWV4aXQtb24tZXJy b3I8L29wdGlvbj4sCi0gICAgICAgIDxvcHRpb24+LS1zaW5nbGUtdHJhbnNhY3Rpb248L29w dGlvbj4sCi0gICAgICAgIDxvcHRpb24+LS1jbGVhbjwvb3B0aW9uPiwgb3IKLSAgICAgICAg PG9wdGlvbj4tLXRyYW5zYWN0aW9uLXNpemU8L29wdGlvbj4uCi0gICAgICAgPC9wYXJhPgot ICAgICAgPC9saXN0aXRlbT4KLSAgICAgPC92YXJsaXN0ZW50cnk+Ci0KICAgICAgPHZhcmxp c3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LUkgPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPmluZGV4PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CiAgICAgICA8 dGVybT48b3B0aW9uPi0taW5kZXg9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmlu ZGV4PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CkBAIC02NDEsMjggKzU4OCw2IEBA IFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92 YXJsaXN0ZW50cnk+CiAKLSAgICAgPHZhcmxpc3RlbnRyeT4KLSAgICAgIDx0ZXJtPjxvcHRp b24+LS1leGNsdWRlLWRhdGFiYXNlPTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5w YXR0ZXJuPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+Ci0gICAgICA8bGlzdGl0ZW0+ Ci0gICAgICAgPHBhcmE+Ci0gICAgICAgIERvIG5vdCByZXN0b3JlIGRhdGFiYXNlcyB3aG9z ZSBuYW1lIG1hdGNoZXMKLSAgICAgICAgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi PnBhdHRlcm48L3JlcGxhY2VhYmxlPi4KLSAgICAgICAgTXVsdGlwbGUgcGF0dGVybnMgY2Fu IGJlIGV4Y2x1ZGVkIGJ5IHdyaXRpbmcgbXVsdGlwbGUKLSAgICAgICAgPG9wdGlvbj4tLWV4 Y2x1ZGUtZGF0YWJhc2U8L29wdGlvbj4gc3dpdGNoZXMuICBUaGUKLSAgICAgICAgPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPiBwYXJhbWV0 ZXIgaXMKLSAgICAgICAgaW50ZXJwcmV0ZWQgYXMgYSBwYXR0ZXJuIGFjY29yZGluZyB0byB0 aGUgc2FtZSBydWxlcyB1c2VkIGJ5Ci0gICAgICAgIDxhcHBsaWNhdGlvbj5wc3FsPC9hcHBs aWNhdGlvbj4ncyA8bGl0ZXJhbD5cZDwvbGl0ZXJhbD4KLSAgICAgICAgY29tbWFuZHMgKHNl ZSA8eHJlZiBsaW5rZW5kPSJhcHAtcHNxbC1wYXR0ZXJucyIvPiksCi0gICAgICAgIHNvIG11 bHRpcGxlIGRhdGFiYXNlcyBjYW4gYWxzbyBiZSBleGNsdWRlZCBieSB3cml0aW5nIHdpbGRj YXJkCi0gICAgICAgIGNoYXJhY3RlcnMgaW4gdGhlIHBhdHRlcm4uICBXaGVuIHVzaW5nIHdp bGRjYXJkcywgYmUgY2FyZWZ1bCB0bwotICAgICAgICBxdW90ZSB0aGUgcGF0dGVybiBpZiBu ZWVkZWQgdG8gcHJldmVudCBzaGVsbCB3aWxkY2FyZCBleHBhbnNpb24uCi0gICAgICAgPC9w YXJhPgotICAgICAgIDxwYXJhPgotICAgICAgICBUaGlzIG9wdGlvbiBpcyBvbmx5IHJlbGV2 YW50IHdoZW4gcmVzdG9yaW5nIGZyb20gYSBub24tcGxhaW4tdGV4dCBhcmNoaXZlIG1hZGUg dXNpbmcgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPi4KLSAgICAgICA8 L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICA8L3Zhcmxpc3RlbnRyeT4KLQogICAg ICA8dmFybGlzdGVudHJ5PgogICAgICAgPHRlcm0+PG9wdGlvbj4tLWZpbHRlcj08cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZmlsZW5hbWU8L3JlcGxhY2VhYmxlPjwvb3B0aW9u PjwvdGVybT4KICAgICAgIDxsaXN0aXRlbT4KQEAgLTc1MSw5ICs2NzYsNyBAQCBQb3N0Z3Jl U1FMIGRvY3VtZW50YXRpb24KICAgICAgICAgaW4gPG9wdGlvbj4tLWNsZWFuPC9vcHRpb24+ IG1vZGUuICBUaGlzIHN1cHByZXNzZXMgPHF1b3RlPmRvZXMgbm90CiAgICAgICAgIGV4aXN0 PC9xdW90ZT4gZXJyb3JzIHRoYXQgbWlnaHQgb3RoZXJ3aXNlIGJlIHJlcG9ydGVkLiAgVGhp cwogICAgICAgICBvcHRpb24gaXMgbm90IHZhbGlkIHVubGVzcyA8b3B0aW9uPi0tY2xlYW48 L29wdGlvbj4gaXMgYWxzbwotICAgICAgICBzcGVjaWZpZWQuICBUaGlzIG9wdGlvbiBpcyBp bXBsaWVkIHdoZW4gcmVzdG9yaW5nIGEKLSAgICAgICAgPGFwcGxpY2F0aW9uPnBnX2R1bXBh bGw8L2FwcGxpY2F0aW9uPiBhcmNoaXZlIHdpdGgKLSAgICAgICAgPG9wdGlvbj4tLWNsZWFu PC9vcHRpb24+LgorICAgICAgICBzcGVjaWZpZWQuCiAgICAgICAgPC9wYXJhPgogICAgICAg PC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CkBAIC04MDAsMjEgKzcyMyw2IEBA IFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92 YXJsaXN0ZW50cnk+CiAKLSAgICAgPHZhcmxpc3RlbnRyeT4KLSAgICAgIDx0ZXJtPjxvcHRp b24+LS1uby1nbG9iYWxzPC9vcHRpb24+PC90ZXJtPgotICAgICAgPGxpc3RpdGVtPgotICAg ICAgIDxwYXJhPgotICAgICAgICBEbyBub3QgcmVzdG9yZSBnbG9iYWwgb2JqZWN0cyAocm9s ZXMgYW5kIHRhYmxlc3BhY2VzKS4gIFdoZW4KLSAgICAgICAgPG9wdGlvbj4tQzwvb3B0aW9u Pi88b3B0aW9uPi0tY3JlYXRlPC9vcHRpb24+IGlzIG5vdCBzcGVjaWZpZWQsCi0gICAgICAg IGRhdGFiYXNlcyB0aGF0IGRvIG5vdCBhbHJlYWR5IGV4aXN0IG9uIHRoZSB0YXJnZXQgc2Vy dmVyIGFyZSBza2lwcGVkLgotICAgICAgIDwvcGFyYT4KLSAgICAgICA8cGFyYT4KLSAgICAg ICAgVGhpcyBvcHRpb24gaXMgb25seSByZWxldmFudCB3aGVuIHJlc3RvcmluZyBmcm9tIGEg bm9uLXBsYWluLXRleHQKLSAgICAgICAgYXJjaGl2ZSBtYWRlIHVzaW5nIDxhcHBsaWNhdGlv bj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4uCi0gICAgICAgPC9wYXJhPgotICAgICAgPC9s aXN0aXRlbT4KLSAgICAgPC92YXJsaXN0ZW50cnk+Ci0KICAgICAgPHZhcmxpc3RlbnRyeT4K ICAgICAgIDx0ZXJtPjxvcHRpb24+LS1uby1wb2xpY2llczwvb3B0aW9uPjwvdGVybT4KICAg ICAgIDxsaXN0aXRlbT4KQEAgLTEyNDAsMjEgKzExNDgsNiBAQCBDUkVBVEUgREFUQUJBU0Ug Zm9vIFdJVEggVEVNUExBVEUgdGVtcGxhdGUwOwogICAgICA8L3BhcmE+CiAgICAgPC9saXN0 aXRlbT4KIAotICAgIDxsaXN0aXRlbT4KLSAgICAgPHBhcmE+Ci0gICAgICBUaGUgZm9sbG93 aW5nIG9wdGlvbnMgY2Fubm90IGJlIHVzZWQgd2hlbiByZXN0b3JpbmcgZnJvbSBhIG5vbi1w bGFpbi10ZXh0Ci0gICAgICBhcmNoaXZlIG1hZGUgdXNpbmcgPGFwcGxpY2F0aW9uPnBnX2R1 bXBhbGw8L2FwcGxpY2F0aW9uPjoKLSAgICAgIDxvcHRpb24+LWEvLS1kYXRhLW9ubHk8L29w dGlvbj4sCi0gICAgICA8b3B0aW9uPi1sLy0tbGlzdDwvb3B0aW9uPiwKLSAgICAgIDxvcHRp b24+LUwvLS11c2UtbGlzdDwvb3B0aW9uPiwKLSAgICAgIDxvcHRpb24+LS1uby1zY2hlbWE8 L29wdGlvbj4sCi0gICAgICA8b3B0aW9uPi0tc3RhdGlzdGljcy1vbmx5PC9vcHRpb24+LCBh bmQKLSAgICAgIDxvcHRpb24+LS1zdHJpY3QtbmFtZXM8L29wdGlvbj4uCi0gICAgICBBbHNv LCBpZiB0aGUgPG9wdGlvbj4tLXNlY3Rpb248L29wdGlvbj4gb3B0aW9uIGlzIHVzZWQsIGl0 IG11c3QKLSAgICAgIGluY2x1ZGUgPG9wdGlvbj5wcmUtZGF0YTwvb3B0aW9uPi4KLSAgICAg PC9wYXJhPgotICAgIDwvbGlzdGl0ZW0+Ci0KICAgIDwvaXRlbWl6ZWRsaXN0PgogICA8L3Bh cmE+CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCBiL3NyYy9i aW4vcGdfZHVtcC9tZXNvbi5idWlsZAppbmRleCA3YzlhNDc1OTYzYi4uNzliZDUwMzY4NDEg MTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZAorKysgYi9zcmMvYmlu L3BnX2R1bXAvbWVzb24uYnVpbGQKQEAgLTEwMyw3ICsxMDMsNiBAQCB0ZXN0cyArPSB7CiAg ICAgICAndC8wMDRfcGdfZHVtcF9wYXJhbGxlbC5wbCcsCiAgICAgICAndC8wMDVfcGdfZHVt cF9maWx0ZXJmaWxlLnBsJywKICAgICAgICd0LzAwNl9wZ19kdW1wX2NvbXByZXNzLnBsJywK LQkgICd0LzAwN19wZ19kdW1wYWxsLnBsJywKICAgICAgICd0LzAxMF9kdW1wX2Nvbm5zdHIu cGwnLAogICAgIF0sCiAgIH0sCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGFyYWxs ZWwuYyBiL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jCmluZGV4IGE3YmVkNWVjY2NmLi43 ZTJlOWY5NThlYSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMKKysr IGIvc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMKQEAgLTMzMywyMCArMzMzLDYgQEAgb25f ZXhpdF9jbG9zZV9hcmNoaXZlKEFyY2hpdmUgKkFIWCkKIAlvbl9leGl0X25pY2VseShhcmNo aXZlX2Nsb3NlX2Nvbm5lY3Rpb24sICZzaHV0ZG93bl9pbmZvKTsKIH0KIAotLyoKLSAqIFVw ZGF0ZSB0aGUgYXJjaGl2ZSBoYW5kbGUgaW4gdGhlIG9uX2V4aXQgY2FsbGJhY2sgcmVnaXN0 ZXJlZCBieQotICogb25fZXhpdF9jbG9zZV9hcmNoaXZlKCkuIFdoZW4gcGdfcmVzdG9yZSBw cm9jZXNzZXMgYSBwZ19kdW1wYWxsIGFyY2hpdmUKLSAqIGNvbnRhaW5pbmcgbXVsdGlwbGUg ZGF0YWJhc2VzLCBlYWNoIGRhdGFiYXNlIGlzIHJlc3RvcmVkIGZyb20gYSBzZXBhcmF0ZQot ICogYXJjaGl2ZS4gQWZ0ZXIgY2xvc2luZyBvbmUgYXJjaGl2ZSBhbmQgb3BlbmluZyB0aGUg bmV4dCwgd2UgdXBkYXRlIHRoZQotICogc2h1dGRvd25faW5mbyB0byByZWZlcmVuY2UgdGhl IG5ldyBhcmNoaXZlIGhhbmRsZSBzbyB0aGUgY2xlYW51cCBjYWxsYmFjawotICogd2lsbCBj bG9zZSB0aGUgY29ycmVjdCBhcmNoaXZlIG9uIGV4aXQuCi0gKi8KLXZvaWQKLXJlcGxhY2Vf b25fZXhpdF9jbG9zZV9hcmNoaXZlKEFyY2hpdmUgKkFIWCkKLXsKLQlzaHV0ZG93bl9pbmZv LkFIWCA9IEFIWDsKLX0KLQogLyoKICAqIG9uX2V4aXRfbmljZWx5IGhhbmRsZXIgZm9yIHNo dXR0aW5nIGRvd24gZGF0YWJhc2UgY29ubmVjdGlvbnMgYW5kCiAgKiB3b3JrZXIgcHJvY2Vz c2VzIGNsZWFubHkuCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgg Yi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgKaW5kZXggMjhlN2ZmNmZhMTYuLmM3YmRk YTFkZWVkIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgKKysrIGIv c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oCkBAIC0zMTMsNyArMzEzLDcgQEAgZXh0ZXJu IHZvaWQgU2V0QXJjaGl2ZU9wdGlvbnMoQXJjaGl2ZSAqQUgsIER1bXBPcHRpb25zICpkb3B0 LCBSZXN0b3JlT3B0aW9ucyAqcm8KIAogZXh0ZXJuIHZvaWQgUHJvY2Vzc0FyY2hpdmVSZXN0 b3JlT3B0aW9ucyhBcmNoaXZlICpBSFgpOwogCi1leHRlcm4gdm9pZCBSZXN0b3JlQXJjaGl2 ZShBcmNoaXZlICpBSFgsIGJvb2wgYXBwZW5kX2RhdGEpOworZXh0ZXJuIHZvaWQgUmVzdG9y ZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKTsKIAogLyogT3BlbiBhbiBleGlzdGluZyBhcmNoaXZl ICovCiBleHRlcm4gQXJjaGl2ZSAqT3BlbkFyY2hpdmUoY29uc3QgY2hhciAqRmlsZVNwZWMs IGNvbnN0IEFyY2hpdmVGb3JtYXQgZm10KTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVt cC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJj aGl2ZXIuYwppbmRleCAyZmQ3NzNhZDg0Zi4uNmQyZjJlYThiNjkgMTAwNjQ0Ci0tLSBhL3Ny Yy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYworKysgYi9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKQEAgLTg3LDcgKzg3LDcgQEAgc3RhdGljIGludAlS ZXN0b3JpbmdUb0RCKEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0YXRpYyB2b2lkIGR1bXBfbG9f YnVmKEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0YXRpYyB2b2lkIGR1bXBUaW1lc3RhbXAoQXJj aGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKm1zZywgdGltZV90IHRpbSk7CiBzdGF0aWMg dm9pZCBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1l LAotCQkJCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25f c3BlYywgYm9vbCBhcHBlbmRfZGF0YSk7CisJCQkJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3Bl Y2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKIHN0YXRpYyBDb21wcmVzc0ZpbGVIYW5k bGUgKlNhdmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgUmVzdG9y ZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NGaWxlSGFuZGxlICpzYXZlZE91 dHB1dCk7CiAKQEAgLTM0MCwxNCArMzQwLDkgQEAgUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0 aW9ucyhBcmNoaXZlICpBSFgpCiAJCVN0cmljdE5hbWVzQ2hlY2socm9wdCk7CiB9CiAKLS8q Ci0gKiBSZXN0b3JlQXJjaGl2ZQotICoKLSAqIElmIGFwcGVuZF9kYXRhIGlzIHNldCwgdGhl biBhcHBlbmQgZGF0YSBpbnRvIGZpbGUgYXMgd2UgYXJlIHJlc3RvcmluZyBkdW1wCi0gKiBv ZiBtdWx0aXBsZSBkYXRhYmFzZXMgd2hpY2ggd2FzIHRha2VuIGJ5IHBnX2R1bXBhbGwuCi0g Ki8KKy8qIFB1YmxpYyAqLwogdm9pZAotUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYLCBi b29sIGFwcGVuZF9kYXRhKQorUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQogewogCUFy Y2hpdmVIYW5kbGUgKkFIID0gKEFyY2hpdmVIYW5kbGUgKikgQUhYOwogCVJlc3RvcmVPcHRp b25zICpyb3B0ID0gQUgtPnB1YmxpYy5yb3B0OwpAQCAtNDY0LDcgKzQ1OSw3IEBAIFJlc3Rv cmVBcmNoaXZlKEFyY2hpdmUgKkFIWCwgYm9vbCBhcHBlbmRfZGF0YSkKIAkgKi8KIAlzYXYg PSBTYXZlT3V0cHV0KEFIKTsKIAlpZiAocm9wdC0+ZmlsZW5hbWUgfHwgcm9wdC0+Y29tcHJl c3Npb25fc3BlYy5hbGdvcml0aG0gIT0gUEdfQ09NUFJFU1NJT05fTk9ORSkKLQkJU2V0T3V0 cHV0KEFILCByb3B0LT5maWxlbmFtZSwgcm9wdC0+Y29tcHJlc3Npb25fc3BlYywgYXBwZW5k X2RhdGEpOworCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCByb3B0LT5jb21wcmVz c2lvbl9zcGVjKTsKIAogCWFocHJpbnRmKEFILCAiLS1cbi0tIFBvc3RncmVTUUwgZGF0YWJh c2UgZHVtcFxuLS1cblxuIik7CiAKQEAgLTc2NywxOSArNzYyLDYgQEAgUmVzdG9yZUFyY2hp dmUoQXJjaGl2ZSAqQUhYLCBib29sIGFwcGVuZF9kYXRhKQogCQkJaWYgKCh0ZS0+cmVxcyAm IChSRVFfU0NIRU1BIHwgUkVRX0RBVEEgfCBSRVFfU1RBVFMpKSA9PSAwKQogCQkJCWNvbnRp bnVlOwkJLyogaWdub3JlIGlmIG5vdCB0byBiZSBkdW1wZWQgYXQgYWxsICovCiAKLQkJCS8q IFNraXAgaWYgbm8tdGFibGVzcGFjZSBpcyBnaXZlbi4gKi8KLQkJCWlmIChyb3B0LT5ub1Rh Ymxlc3BhY2UgJiYgdGUgJiYgdGUtPmRlc2MgJiYKLQkJCQkoc3RyY21wKHRlLT5kZXNjLCAi VEFCTEVTUEFDRSIpID09IDApKQotCQkJCWNvbnRpbnVlOwotCi0JCQkvKgotCQkJICogU2tp cCBEUk9QIERBVEFCQVNFL1JPTEVTL1RBQkxFU1BBQ0UgaWYgd2UgZGlkbid0IHNwZWNpZnkK LQkJCSAqIC0tY2xlYW4KLQkJCSAqLwotCQkJaWYgKCFyb3B0LT5kcm9wU2NoZW1hICYmIHRl ICYmIHRlLT5kZXNjICYmCi0JCQkJc3RyY21wKHRlLT5kZXNjLCAiRFJPUF9HTE9CQUwiKSA9 PSAwKQotCQkJCWNvbnRpbnVlOwotCiAJCQlzd2l0Y2ggKF90b2NFbnRyeVJlc3RvcmVQYXNz KHRlKSkKIAkJCXsKIAkJCQljYXNlIFJFU1RPUkVfUEFTU19NQUlOOgpAQCAtMTMzNSw3ICsx MzE3LDcgQEAgUHJpbnRUT0NTdW1tYXJ5KEFyY2hpdmUgKkFIWCkKIAogCXNhdiA9IFNhdmVP dXRwdXQoQUgpOwogCWlmIChyb3B0LT5maWxlbmFtZSkKLQkJU2V0T3V0cHV0KEFILCByb3B0 LT5maWxlbmFtZSwgb3V0X2NvbXByZXNzaW9uX3NwZWMsIGZhbHNlKTsKKwkJU2V0T3V0cHV0 KEFILCByb3B0LT5maWxlbmFtZSwgb3V0X2NvbXByZXNzaW9uX3NwZWMpOwogCiAJaWYgKHN0 cmZ0aW1lKHN0YW1wX3N0ciwgc2l6ZW9mKHN0YW1wX3N0ciksIFBHRFVNUF9TVFJGVElNRV9G TVQsCiAJCQkJIGxvY2FsdGltZSgmQUgtPmNyZWF0ZURhdGUpKSA9PSAwKQpAQCAtMTcxMCwx NSArMTY5MiwxMSBAQCBhcmNocHJpbnRmKEFyY2hpdmUgKkFILCBjb25zdCBjaGFyICpmbXQs IC4uLikKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFN0dWZmIGJl bG93IGhlcmUgc2hvdWxkIGJlICdwcml2YXRlJyB0byB0aGUgYXJjaGl2ZXIgcm91dGluZXMK LSAqCi0gKiBJZiBhcHBlbmRfZGF0YSBpcyBzZXQsIHRoZW4gYXBwZW5kIGRhdGEgaW50byBm aWxlIGFzIHdlIGFyZSByZXN0b3JpbmcgZHVtcAotICogb2YgbXVsdGlwbGUgZGF0YWJhc2Vz IHdoaWNoIHdhcyB0YWtlbiBieSBwZ19kdW1wYWxsLgogICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCiAKIHN0YXRpYyB2b2lkCiBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAq QUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAotCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNp ZmljYXRpb24gY29tcHJlc3Npb25fc3BlYywKLQkJICBib29sIGFwcGVuZF9kYXRhKQorCQkg IGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKIHsK IAlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSDsKIAljb25zdCBjaGFyICptb2RlOwpAQCAtMTcz OCw3ICsxNzE2LDcgQEAgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFy ICpmaWxlbmFtZSwKIAllbHNlCiAJCWZuID0gZmlsZW5vKHN0ZG91dCk7CiAKLQlpZiAoYXBw ZW5kX2RhdGEgfHwgQUgtPm1vZGUgPT0gYXJjaE1vZGVBcHBlbmQpCisJaWYgKEFILT5tb2Rl ID09IGFyY2hNb2RlQXBwZW5kKQogCQltb2RlID0gUEdfQklOQVJZX0E7CiAJZWxzZQogCQlt b2RlID0gUEdfQklOQVJZX1c7CkBAIC0yNDE0LDcgKzIzOTIsNyBAQCBfYWxsb2NBSChjb25z dCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQsCiAKIAkvKiBpbml0 aWFsaXplIGZvciBiYWNrd2FyZHMgY29tcGF0aWJsZSBzdHJpbmcgcHJvY2Vzc2luZyAqLwog CUFILT5wdWJsaWMuZW5jb2RpbmcgPSAwOwkvKiBQR19TUUxfQVNDSUkgKi8KLQlBSC0+cHVi bGljLnN0ZF9zdHJpbmdzID0gdHJ1ZTsKKwlBSC0+cHVibGljLnN0ZF9zdHJpbmdzID0gZmFs c2U7CiAKIAkvKiBzcWwgZXJyb3IgaGFuZGxpbmcgKi8KIAlBSC0+cHVibGljLmV4aXRfb25f ZXJyb3IgPSB0cnVlOwpAQCAtMzA1MCwxNiArMzAyOCw2IEBAIF90b2NFbnRyeVJlcXVpcmVk KFRvY0VudHJ5ICp0ZSwgdGVTZWN0aW9uIGN1clNlY3Rpb24sIEFyY2hpdmVIYW5kbGUgKkFI KQogCQkJcmV0dXJuIDA7CiAJfQogCi0JLyoKLQkgKiBHbG9iYWwgb2JqZWN0IFRPQyBlbnRy aWVzIChlLmcuLCBST0xFcyBvciBUQUJMRVNQQUNFcykgbXVzdCBub3QgYmUKLQkgKiBpZ25v cmVkLgotCSAqLwotCWlmIChzdHJjbXAodGUtPmRlc2MsICJST0xFIikgPT0gMCB8fAotCQlz dHJjbXAodGUtPmRlc2MsICJST0xFIFBST1BFUlRJRVMiKSA9PSAwIHx8Ci0JCXN0cmNtcCh0 ZS0+ZGVzYywgIlRBQkxFU1BBQ0UiKSA9PSAwIHx8Ci0JCXN0cmNtcCh0ZS0+ZGVzYywgIkRS T1BfR0xPQkFMIikgPT0gMCkKLQkJcmV0dXJuIFJFUV9TQ0hFTUE7Ci0KIAkvKgogCSAqIFBy b2Nlc3MgZXhjbHVzaW9ucyB0aGF0IGFmZmVjdCBjZXJ0YWluIGNsYXNzZXMgb2YgVE9DIGVu dHJpZXMuCiAJICovCkBAIC0zMDk1LDE0ICszMDYzLDYgQEAgX3RvY0VudHJ5UmVxdWlyZWQo VG9jRW50cnkgKnRlLCB0ZVNlY3Rpb24gY3VyU2VjdGlvbiwgQXJjaGl2ZUhhbmRsZSAqQUgp CiAJCWlmIChyb3B0LT5ub19zdWJzY3JpcHRpb25zICYmCiAJCQlzdHJuY21wKHRlLT50YWcs ICJTVUJTQ1JJUFRJT04iLCBzdHJsZW4oIlNVQlNDUklQVElPTiIpKSA9PSAwKQogCQkJcmV0 dXJuIDA7Ci0KLQkJLyoKLQkJICogQ29tbWVudHMgb24gZ2xvYmFsIG9iamVjdHMgKFJPTEVz IG9yIFRBQkxFU1BBQ0VzKSBzaG91bGQgbm90IGJlCi0JCSAqIHNraXBwZWQsIHNpbmNlIGds b2JhbCBvYmplY3RzIHRoZW1zZWx2ZXMgYXJlIG5ldmVyIHNraXBwZWQuCi0JCSAqLwotCQlp ZiAoc3RybmNtcCh0ZS0+dGFnLCAiUk9MRSIsIHN0cmxlbigiUk9MRSIpKSA9PSAwIHx8Ci0J CQlzdHJuY21wKHRlLT50YWcsICJUQUJMRVNQQUNFIiwgc3RybGVuKCJUQUJMRVNQQUNFIikp ID09IDApCi0JCQlyZXR1cm4gUkVRX1NDSEVNQTsKIAl9CiAKIAkvKgpAQCAtMzEzMiwxNCAr MzA5Miw2IEBAIF90b2NFbnRyeVJlcXVpcmVkKFRvY0VudHJ5ICp0ZSwgdGVTZWN0aW9uIGN1 clNlY3Rpb24sIEFyY2hpdmVIYW5kbGUgKkFIKQogCQlpZiAocm9wdC0+bm9fc3Vic2NyaXB0 aW9ucyAmJgogCQkJc3RybmNtcCh0ZS0+dGFnLCAiU1VCU0NSSVBUSU9OIiwgc3RybGVuKCJT VUJTQ1JJUFRJT04iKSkgPT0gMCkKIAkJCXJldHVybiAwOwotCi0JCS8qCi0JCSAqIFNlY3Vy aXR5IGxhYmVscyBvbiBnbG9iYWwgb2JqZWN0cyAoUk9MRXMgb3IgVEFCTEVTUEFDRXMpIHNo b3VsZCBub3QKLQkJICogYmUgc2tpcHBlZCwgc2luY2UgZ2xvYmFsIG9iamVjdHMgdGhlbXNl bHZlcyBhcmUgbmV2ZXIgc2tpcHBlZC4KLQkJICovCi0JCWlmIChzdHJuY21wKHRlLT50YWcs ICJST0xFIiwgc3RybGVuKCJST0xFIikpID09IDAgfHwKLQkJCXN0cm5jbXAodGUtPnRhZywg IlRBQkxFU1BBQ0UiLCBzdHJsZW4oIlRBQkxFU1BBQ0UiKSkgPT0gMCkKLQkJCXJldHVybiBS RVFfU0NIRU1BOwogCX0KIAogCS8qIElmIGl0J3MgYSBzdWJzY3JpcHRpb24sIG1heWJlIGln bm9yZSBpdCAqLwpAQCAtMzkxNSw5ICszODY3LDYgQEAgX2dldE9iamVjdERlc2NyaXB0aW9u KFBRRXhwQnVmZmVyIGJ1ZiwgY29uc3QgVG9jRW50cnkgKnRlKQogCWVsc2UgaWYgKHN0cmNt cCh0eXBlLCAiQ0FTVCIpID09IDAgfHwKIAkJCSBzdHJjbXAodHlwZSwgIkNIRUNLIENPTlNU UkFJTlQiKSA9PSAwIHx8CiAJCQkgc3RyY21wKHR5cGUsICJDT05TVFJBSU5UIikgPT0gMCB8 fAotCQkJIHN0cmNtcCh0eXBlLCAiRFJPUF9HTE9CQUwiKSA9PSAwIHx8Ci0JCQkgc3RyY21w KHR5cGUsICJST0xFIFBST1BFUlRJRVMiKSA9PSAwIHx8Ci0JCQkgc3RyY21wKHR5cGUsICJS T0xFIikgPT0gMCB8fAogCQkJIHN0cmNtcCh0eXBlLCAiREFUQUJBU0UgUFJPUEVSVElFUyIp ID09IDAgfHwKIAkJCSBzdHJjbXAodHlwZSwgIkRFRkFVTFQiKSA9PSAwIHx8CiAJCQkgc3Ry Y21wKHR5cGUsICJGSyBDT05TVFJBSU5UIikgPT0gMCB8fApkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2Jh Y2t1cF9hcmNoaXZlci5oCmluZGV4IDEyMThiZjZhNmExLi5jMTUyOGQ3ODg1MyAxMDA2NDQK LS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCisrKyBiL3NyYy9i aW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaApAQCAtMzk0LDcgKzM5NCw2IEBAIHN0 cnVjdCBfdG9jRW50cnkKIAogZXh0ZXJuIGludAlwYXJhbGxlbF9yZXN0b3JlKEFyY2hpdmVI YW5kbGUgKkFILCBUb2NFbnRyeSAqdGUpOwogZXh0ZXJuIHZvaWQgb25fZXhpdF9jbG9zZV9h cmNoaXZlKEFyY2hpdmUgKkFIWCk7Ci1leHRlcm4gdm9pZCByZXBsYWNlX29uX2V4aXRfY2xv c2VfYXJjaGl2ZShBcmNoaXZlICpBSFgpOwogCiBleHRlcm4gdm9pZCB3YXJuX29yX2V4aXRf aG9ycmlibHkoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBwZ19h dHRyaWJ1dGVfcHJpbnRmKDIsIDMpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAv cGdfYmFja3VwX3Rhci5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYwppbmRl eCBhZTNhN2M4MGNiZi4uNTViMWU0ZTg1ZDAgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVt cC9wZ19iYWNrdXBfdGFyLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIu YwpAQCAtODI2LDcgKzgyNiw3IEBAIF9DbG9zZUFyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgp CiAJCXNhdlZlcmJvc2UgPSBBSC0+cHVibGljLnZlcmJvc2U7CiAJCUFILT5wdWJsaWMudmVy Ym9zZSA9IDA7CiAKLQkJUmVzdG9yZUFyY2hpdmUoKEFyY2hpdmUgKikgQUgsIGZhbHNlKTsK KwkJUmVzdG9yZUFyY2hpdmUoKEFyY2hpdmUgKikgQUgpOwogCiAJCVNldEFyY2hpdmVPcHRp b25zKChBcmNoaXZlICopIEFILCBzYXZEb3B0LCBzYXZSb3B0KTsKIApkaWZmIC0tZ2l0IGEv c3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMK aW5kZXggYTBmN2Y4ZTIxNjguLmM1NjQzN2Q2MDU3IDEwMDY0NAotLS0gYS9zcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAgLTEy NzksNyArMTI3OSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCSAqIHJpZ2h0 IG5vdy4KIAkgKi8KIAlpZiAocGxhaW5UZXh0KQotCQlSZXN0b3JlQXJjaGl2ZShmb3V0LCBm YWxzZSk7CisJCVJlc3RvcmVBcmNoaXZlKGZvdXQpOwogCiAJQ2xvc2VBcmNoaXZlKGZvdXQp OwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jIGIvc3JjL2Jp bi9wZ19kdW1wL3BnX2R1bXBhbGwuYwppbmRleCBjMWY0MzExM2M1My4uYjk2NTNmMGFlZmUg MTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKKysrIGIvc3JjL2Jp bi9wZ19kdW1wL3BnX2R1bXBhbGwuYwpAQCAtMSwyMCArMSwxMyBAQAogLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCiAgKgogICogcGdfZHVtcGFsbC5jCi0gKgkgIHBnX2R1bXBhbGwgZHVtcHMg YWxsIGRhdGFiYXNlcyBhbmQgZ2xvYmFsIG9iamVjdHMgKHJvbGVzIGFuZAotICoJICB0YWJs ZXNwYWNlcykgZnJvbSBhIFBvc3RncmVTUUwgY2x1c3Rlci4KLSAqCi0gKgkgIEZvciB0ZXh0 IGZvcm1hdCBvdXRwdXQsIGdsb2JhbHMgYXJlIHdyaXR0ZW4gZGlyZWN0bHkgYW5kIHBnX2R1 bXAgaXMKLSAqCSAgaW52b2tlZCBmb3IgZWFjaCBkYXRhYmFzZSwgd2l0aCBhbGwgb3V0cHV0 IGdvaW5nIHRvIHN0ZG91dCBvciBhIGZpbGUuCi0gKgotICoJICBGb3Igbm9uLXRleHQgZm9y bWF0cyAoY3VzdG9tLCBkaXJlY3RvcnksIHRhciksIGEgZGlyZWN0b3J5IGlzIGNyZWF0ZWQK LSAqCSAgY29udGFpbmluZyBhIHRvYy5nbG8gZmlsZSB3aXRoIGdsb2JhbCBvYmplY3RzLCBh IG1hcC5kYXQgZmlsZSBtYXBwaW5nCi0gKgkgIGRhdGFiYXNlIE9JRHMgdG8gbmFtZXMsIGFu ZCBhIGRhdGFiYXNlcy8gc3ViZGlyZWN0b3J5IHdpdGggaW5kaXZpZHVhbAotICoJICBwZ19k dW1wIGFyY2hpdmVzIGZvciBlYWNoIGRhdGFiYXNlLgogICoKICAqIFBvcnRpb25zIENvcHly aWdodCAoYykgMTk5Ni0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91 cAogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2 ZXJzaXR5IG9mIENhbGlmb3JuaWEKICAqCisgKiBwZ19kdW1wYWxsIGZvcmNlcyBhbGwgcGdf ZHVtcCBvdXRwdXQgdG8gYmUgdGV4dCwgc2luY2UgaXQgYWxzbyBvdXRwdXRzCisgKiB0ZXh0 IGludG8gdGhlIHNhbWUgb3V0cHV0IHN0cmVhbS4KKyAqCiAgKiBzcmMvYmluL3BnX2R1bXAv cGdfZHVtcGFsbC5jCiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zNCwxMSArMjcs OSBAQAogI2luY2x1ZGUgImNvbW1vbi9zdHJpbmcuaCIKICNpbmNsdWRlICJjb25uZWN0ZGIu aCIKICNpbmNsdWRlICJkdW1wdXRpbHMuaCIKLSNpbmNsdWRlICJmZV91dGlscy9vcHRpb25f dXRpbHMuaCIKICNpbmNsdWRlICJmZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKICNpbmNsdWRl ICJmaWx0ZXIuaCIKICNpbmNsdWRlICJnZXRvcHRfbG9uZy5oIgotI2luY2x1ZGUgInBnX2Jh Y2t1cF9hcmNoaXZlci5oIgogCiAvKiB2ZXJzaW9uIHN0cmluZyB3ZSBleHBlY3QgYmFjayBm cm9tIHBnX2R1bXAgKi8KICNkZWZpbmUgUEdEVU1QX1ZFUlNJT05TVFIgInBnX2R1bXAgKFBv c3RncmVTUUwpICIgUEdfVkVSU0lPTiAiXG4iCkBAIC03NiwxOSArNjcsMTUgQEAgc3RhdGlj IHZvaWQgZHJvcERCcyhQR2Nvbm4gKmNvbm4pOwogc3RhdGljIHZvaWQgZHVtcFVzZXJDb25m aWcoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICp1c2VybmFtZSk7CiBzdGF0aWMgdm9pZCBk dW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubik7CiBzdGF0aWMgdm9pZCBkdW1wVGltZXN0YW1w KGNvbnN0IGNoYXIgKm1zZyk7Ci1zdGF0aWMgaW50CXJ1blBnRHVtcChjb25zdCBjaGFyICpk Ym5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzLCBjaGFyICpkYmZpbGUpOworc3RhdGlj IGludAlydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVf b3B0cyk7CiBzdGF0aWMgdm9pZCBidWlsZFNoU2VjTGFiZWxzKFBHY29ubiAqY29ubiwKIAkJ CQkJCQkgY29uc3QgY2hhciAqY2F0YWxvZ19uYW1lLCBPaWQgb2JqZWN0SWQsCiAJCQkJCQkJ IGNvbnN0IGNoYXIgKm9ianR5cGUsIGNvbnN0IGNoYXIgKm9iam5hbWUsCiAJCQkJCQkJIFBR RXhwQnVmZmVyIGJ1ZmZlcik7CiBzdGF0aWMgdm9pZCBleGVjdXRlQ29tbWFuZChQR2Nvbm4g KmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KTsKLXN0YXRpYyB2b2lkIGNoZWNrX2Zvcl9pbnZh bGlkX2dsb2JhbF9uYW1lcyhQR2Nvbm4gKmNvbm4sCi0JCQkJCQkJCQkJICAgU2ltcGxlU3Ry aW5nTGlzdCAqZXhjbHVkZWRfbmFtZXMpOwogc3RhdGljIHZvaWQgZXhwYW5kX2RibmFtZV9w YXR0ZXJucyhQR2Nvbm4gKmNvbm4sIFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRlcm5zLAogCQkJ CQkJCQkgICBTaW1wbGVTdHJpbmdMaXN0ICpuYW1lcyk7CiBzdGF0aWMgdm9pZCByZWFkX2R1 bXBhbGxfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgU2ltcGxlU3RyaW5nTGlzdCAq cGF0dGVybik7Ci1zdGF0aWMgQXJjaGl2ZUZvcm1hdCBwYXJzZUR1bXBGb3JtYXQoY29uc3Qg Y2hhciAqZm9ybWF0KTsKLXN0YXRpYyBpbnQJY3JlYXRlRHVtcElkKHZvaWQpOwogCiBzdGF0 aWMgY2hhciBwZ19kdW1wX2JpbltNQVhQR1BBVEhdOwogc3RhdGljIFBRRXhwQnVmZmVyIHBn ZHVtcG9wdHM7CkBAIC0xMzYsMTAgKzEyMyw2IEBAIHN0YXRpYyBTaW1wbGVTdHJpbmdMaXN0 IGRhdGFiYXNlX2V4Y2x1ZGVfcGF0dGVybnMgPSB7TlVMTCwgTlVMTH07CiBzdGF0aWMgU2lt cGxlU3RyaW5nTGlzdCBkYXRhYmFzZV9leGNsdWRlX25hbWVzID0ge05VTEwsIE5VTEx9Owog CiBzdGF0aWMgY2hhciAqcmVzdHJpY3Rfa2V5Owotc3RhdGljIEFyY2hpdmUgKmZvdXQgPSBO VUxMOwotc3RhdGljIGludAlkdW1wSWRWYWwgPSAwOwotc3RhdGljIEFyY2hpdmVGb3JtYXQg YXJjaER1bXBGb3JtYXQgPSBhcmNoTnVsbDsKLXN0YXRpYyBjb25zdCBDYXRhbG9nSWQgbmls Q2F0YWxvZ0lkID0gezAsIDB9OwogCiBpbnQKIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKQEAgLTE2NSw3ICsxNDgsNiBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJ CXsicGFzc3dvcmQiLCBub19hcmd1bWVudCwgTlVMTCwgJ1cnfSwKIAkJeyJuby1wcml2aWxl Z2VzIiwgbm9fYXJndW1lbnQsIE5VTEwsICd4J30sCiAJCXsibm8tYWNsIiwgbm9fYXJndW1l bnQsIE5VTEwsICd4J30sCi0JCXsiZm9ybWF0IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEws ICdGJ30sCiAKIAkJLyoKIAkJICogdGhlIGZvbGxvd2luZyBvcHRpb25zIGRvbid0IGhhdmUg YW4gZXF1aXZhbGVudCBzaG9ydCBvcHRpb24gbGV0dGVyCkBAIC0yMTUsMTkgKzE5NywxNiBA QCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJY2hhcgkgICAqcGdkYiA9IE5VTEw7 CiAJY2hhcgkgICAqdXNlX3JvbGUgPSBOVUxMOwogCWNvbnN0IGNoYXIgKmR1bXBlbmNvZGlu ZyA9IE5VTEw7Ci0JY29uc3QgY2hhciAqZm9ybWF0X25hbWUgPSAicCI7CiAJdHJpdmFsdWUJ cHJvbXB0X3Bhc3N3b3JkID0gVFJJX0RFRkFVTFQ7CiAJYm9vbAkJZGF0YV9vbmx5ID0gZmFs c2U7CiAJYm9vbAkJZ2xvYmFsc19vbmx5ID0gZmFsc2U7CiAJYm9vbAkJcm9sZXNfb25seSA9 IGZhbHNlOwotCWJvb2wJCXNjaGVtYV9vbmx5ID0gZmFsc2U7CiAJYm9vbAkJdGFibGVzcGFj ZXNfb25seSA9IGZhbHNlOwogCVBHY29ubgkgICAqY29ubjsKIAlpbnQJCQllbmNvZGluZzsK IAlpbnQJCQljLAogCQkJCXJldDsKIAlpbnQJCQlvcHRpbmRleDsKLQlEdW1wT3B0aW9ucyBk b3B0OwogCiAJcGdfbG9nZ2luZ19pbml0KGFyZ3ZbMF0pOwogCXBnX2xvZ2dpbmdfc2V0X2xl dmVsKFBHX0xPR19XQVJOSU5HKTsKQEAgLTI2NSw5ICsyNDQsOCBAQCBtYWluKGludCBhcmdj LCBjaGFyICphcmd2W10pCiAJfQogCiAJcGdkdW1wb3B0cyA9IGNyZWF0ZVBRRXhwQnVmZmVy KCk7Ci0JSW5pdER1bXBPcHRpb25zKCZkb3B0KTsKIAotCXdoaWxlICgoYyA9IGdldG9wdF9s b25nKGFyZ2MsIGFyZ3YsICJhY2Q6RTpmOkY6Z2g6bDpPcDpyc1M6dFU6dndXeCIsIGxvbmdf b3B0aW9ucywgJm9wdGluZGV4KSkgIT0gLTEpCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmco YXJnYywgYXJndiwgImFjZDpFOmY6Z2g6bDpPcDpyc1M6dFU6dndXeCIsIGxvbmdfb3B0aW9u cywgJm9wdGluZGV4KSkgIT0gLTEpCiAJewogCQlzd2l0Y2ggKGMpCiAJCXsKQEAgLTI5NSw5 ICsyNzMsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQkJYXBwZW5kUFFF eHBCdWZmZXJTdHIocGdkdW1wb3B0cywgIiAtZiAiKTsKIAkJCQlhcHBlbmRTaGVsbFN0cmlu ZyhwZ2R1bXBvcHRzLCBmaWxlbmFtZSk7CiAJCQkJYnJlYWs7Ci0JCQljYXNlICdGJzoKLQkJ CQlmb3JtYXRfbmFtZSA9IHBnX3N0cmR1cChvcHRhcmcpOwotCQkJCWJyZWFrOworCiAJCQlj YXNlICdnJzoKIAkJCQlnbG9iYWxzX29ubHkgPSB0cnVlOwogCQkJCWJyZWFrOwpAQCAtMzIz LDcgKzI5OSw2IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCQlicmVhazsK IAogCQkJY2FzZSAncyc6Ci0JCQkJc2NoZW1hX29ubHkgPSB0cnVlOwogCQkJCWFwcGVuZFBR RXhwQnVmZmVyU3RyKHBnZHVtcG9wdHMsICIgLXMiKTsKIAkJCQlicmVhazsKIApAQCAtMzM4 LDcgKzMxMyw2IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAogCQkJY2FzZSAn VSc6CiAJCQkJcGd1c2VyID0gcGdfc3RyZHVwKG9wdGFyZyk7Ci0JCQkJZG9wdC5jcGFyYW1z LnVzZXJuYW1lID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2Ug J3YnOgpAQCAtNDIxLDc0ICszOTUsNTAgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltd KQogCQlleGl0X25pY2VseSgxKTsKIAl9CiAKLQkvKiAtLWV4Y2x1ZGUtZGF0YWJhc2UgaXMg aW5jb21wYXRpYmxlIHdpdGggZ2xvYmFsICotb25seSBvcHRpb25zICovCi0JY2hlY2tfbXV0 X2V4Y2xfb3B0cyhkYXRhYmFzZV9leGNsdWRlX3BhdHRlcm5zLmhlYWQsICItLWV4Y2x1ZGUt ZGF0YWJhc2UiLAotCQkJCQkJZ2xvYmFsc19vbmx5LCAiLWcvLS1nbG9iYWxzLW9ubHkiLAot CQkJCQkJcm9sZXNfb25seSwgIi1yLy0tcm9sZXMtb25seSIsCi0JCQkJCQl0YWJsZXNwYWNl c19vbmx5LCAiLXQvLS10YWJsZXNwYWNlcy1vbmx5Iik7CisJaWYgKGRhdGFiYXNlX2V4Y2x1 ZGVfcGF0dGVybnMuaGVhZCAhPSBOVUxMICYmCisJCShnbG9iYWxzX29ubHkgfHwgcm9sZXNf b25seSB8fCB0YWJsZXNwYWNlc19vbmx5KSkKKwl7CisJCXBnX2xvZ19lcnJvcigib3B0aW9u ICVzIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggJXMsICVzLCBvciAlcyIsCisJCQkJ CSAiLS1leGNsdWRlLWRhdGFiYXNlIiwKKwkJCQkJICItZy8tLWdsb2JhbHMtb25seSIsICIt ci8tLXJvbGVzLW9ubHkiLCAiLXQvLS10YWJsZXNwYWNlcy1vbmx5Iik7CisJCXBnX2xvZ19l cnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBw cm9nbmFtZSk7CisJCWV4aXRfbmljZWx5KDEpOworCX0KIAotCS8qICotb25seSBvcHRpb25z IGFyZSBpbmNvbXBhdGlibGUgd2l0aCBlYWNoIG90aGVyICovCi0JY2hlY2tfbXV0X2V4Y2xf b3B0cyhkYXRhX29ubHksICItYS8tLWRhdGEtb25seSIsCi0JCQkJCQlnbG9iYWxzX29ubHks ICItZy8tLWdsb2JhbHMtb25seSIsCi0JCQkJCQlyb2xlc19vbmx5LCAiLXIvLS1yb2xlcy1v bmx5IiwKLQkJCQkJCXNjaGVtYV9vbmx5LCAiLXMvLS1zY2hlbWEtb25seSIsCi0JCQkJCQlz dGF0aXN0aWNzX29ubHksICItLXN0YXRpc3RpY3Mtb25seSIsCi0JCQkJCQl0YWJsZXNwYWNl c19vbmx5LCAiLXQvLS10YWJsZXNwYWNlcy1vbmx5Iik7CisJLyogTWFrZSBzdXJlIHRoZSB1 c2VyIGhhc24ndCBzcGVjaWZpZWQgYSBtaXggb2YgZ2xvYmFscy1vbmx5IG9wdGlvbnMgKi8K KwlpZiAoZ2xvYmFsc19vbmx5ICYmIHJvbGVzX29ubHkpCisJeworCQlwZ19sb2dfZXJyb3Io Im9wdGlvbnMgJXMgYW5kICVzIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIiwKKwkJCQkJICIt Zy8tLWdsb2JhbHMtb25seSIsICItci8tLXJvbGVzLW9ubHkiKTsKKwkJcGdfbG9nX2Vycm9y X2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2du YW1lKTsKKwkJZXhpdF9uaWNlbHkoMSk7CisJfQogCi0JLyogLS1uby0qIGFuZCAqLW9ubHkg Zm9yIHNhbWUgdGhpbmcgYXJlIGluY29tcGF0aWJsZSAqLwotCWNoZWNrX211dF9leGNsX29w dHMoZGF0YV9vbmx5LCAiLWEvLS1kYXRhLW9ubHkiLAotCQkJCQkJbm9fZGF0YSwgIi0tbm8t ZGF0YSIpOwotCWNoZWNrX211dF9leGNsX29wdHMoc2NoZW1hX29ubHksICItcy8tLXNjaGVt YS1vbmx5IiwKLQkJCQkJCW5vX3NjaGVtYSwgIi0tbm8tc2NoZW1hIik7Ci0JY2hlY2tfbXV0 X2V4Y2xfb3B0cyhzdGF0aXN0aWNzX29ubHksICItLXN0YXRpc3RpY3Mtb25seSIsCi0JCQkJ CQlub19zdGF0aXN0aWNzLCAiLS1uby1zdGF0aXN0aWNzIik7Ci0KLQkvKiAtLXN0YXRpc3Rp Y3MgYW5kIC0tbm8tc3RhdGlzdGljcyBhcmUgaW5jb21wYXRpYmxlICovCi0JY2hlY2tfbXV0 X2V4Y2xfb3B0cyh3aXRoX3N0YXRpc3RpY3MsICItLXN0YXRpc3RpY3MiLAotCQkJCQkJbm9f c3RhdGlzdGljcywgIi0tbm8tc3RhdGlzdGljcyIpOwotCi0JLyogLS1zdGF0aXN0aWNzIGlz IGluY29tcGF0aWJsZSB3aXRoICotb25seSAoZXhjZXB0IC0tc3RhdGlzdGljcy1vbmx5KSAq LwotCWNoZWNrX211dF9leGNsX29wdHMod2l0aF9zdGF0aXN0aWNzLCAiLS1zdGF0aXN0aWNz IiwKLQkJCQkJCWRhdGFfb25seSwgIi1hLy0tZGF0YS1vbmx5IiwKLQkJCQkJCWdsb2JhbHNf b25seSwgIi1nLy0tZ2xvYmFscy1vbmx5IiwKLQkJCQkJCXJvbGVzX29ubHksICItci8tLXJv bGVzLW9ubHkiLAotCQkJCQkJc2NoZW1hX29ubHksICItcy8tLXNjaGVtYS1vbmx5IiwKLQkJ CQkJCXRhYmxlc3BhY2VzX29ubHksICItdC8tLXRhYmxlc3BhY2VzLW9ubHkiKTsKLQotCS8q IC0tY2xlYW4gYW5kIC0tZGF0YS1vbmx5IGFyZSBpbmNvbXBhdGlibGUgKi8KLQljaGVja19t dXRfZXhjbF9vcHRzKG91dHB1dF9jbGVhbiwgIi1jLy0tY2xlYW4iLAotCQkJCQkJZGF0YV9v bmx5LCAiLWEvLS1kYXRhLW9ubHkiKTsKKwlpZiAoZ2xvYmFsc19vbmx5ICYmIHRhYmxlc3Bh Y2VzX29ubHkpCisJeworCQlwZ19sb2dfZXJyb3IoIm9wdGlvbnMgJXMgYW5kICVzIGNhbm5v dCBiZSB1c2VkIHRvZ2V0aGVyIiwKKwkJCQkJICItZy8tLWdsb2JhbHMtb25seSIsICItdC8t LXRhYmxlc3BhY2VzLW9ubHkiKTsKKwkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0t aGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJZXhpdF9uaWNl bHkoMSk7CisJfQogCiAJaWYgKGlmX2V4aXN0cyAmJiAhb3V0cHV0X2NsZWFuKQogCQlwZ19m YXRhbCgib3B0aW9uICVzIHJlcXVpcmVzIG9wdGlvbiAlcyIsCiAJCQkJICItLWlmLWV4aXN0 cyIsICItYy8tLWNsZWFuIik7CiAKLQkvKiBHZXQgZm9ybWF0IGZvciBkdW1wLiAqLwotCWFy Y2hEdW1wRm9ybWF0ID0gcGFyc2VEdW1wRm9ybWF0KGZvcm1hdF9uYW1lKTsKKwkvKiAtLWNs ZWFuIGFuZCAtLWRhdGEtb25seSBhcmUgaW5jb21wYXRpYmxlICovCisJaWYgKG91dHB1dF9j bGVhbiAmJiBkYXRhX29ubHkpCisJCXBnX2ZhdGFsKCJvcHRpb25zICVzIGFuZCAlcyBjYW5u b3QgYmUgdXNlZCB0b2dldGhlciIsCisJCQkJICItYy8tLWNsZWFuIiwgIi1hLy0tZGF0YS1v bmx5Iik7CiAKLQkvKgotCSAqIElmIGEgbm9uLXBsYWluIGZvcm1hdCBpcyBzcGVjaWZpZWQs IGEgZmlsZSBuYW1lIGlzIGFsc28gcmVxdWlyZWQgYXMgdGhlCi0JICogcGF0aCB0byB0aGUg bWFpbiBkaXJlY3RvcnkuCi0JICovCi0JaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxs ICYmCi0JCSghZmlsZW5hbWUgfHwgc3RyY21wKGZpbGVuYW1lLCAiIikgPT0gMCkpCisJaWYg KHJvbGVzX29ubHkgJiYgdGFibGVzcGFjZXNfb25seSkKIAl7Ci0JCXBnX2xvZ19lcnJvcigi b3B0aW9uICVzPWR8Y3x0IHJlcXVpcmVzIG9wdGlvbiAlcyIsCi0JCQkJCSAiLUYvLS1mb3Jt YXQiLCAiLWYvLS1maWxlIik7CisJCXBnX2xvZ19lcnJvcigib3B0aW9ucyAlcyBhbmQgJXMg Y2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiLAorCQkJCQkgIi1yLy0tcm9sZXMtb25seSIsICIt dC8tLXRhYmxlc3BhY2VzLW9ubHkiKTsKIAkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVz IC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKIAkJZXhpdF9u aWNlbHkoMSk7CiAJfQogCi0JLyogcmVzdHJpY3Qta2V5IGlzIG9ubHkgc3VwcG9ydGVkIHdp dGggLS1mb3JtYXQ9cGxhaW4gKi8KLQlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwg JiYgcmVzdHJpY3Rfa2V5KQotCQlwZ19mYXRhbCgib3B0aW9uICVzIGNhbiBvbmx5IGJlIHVz ZWQgd2l0aCAlcz1wbGFpbiIsCi0JCQkJICItLXJlc3RyaWN0LWtleSIsICItLWZvcm1hdCIp OwotCi0JLyogLS1jbGVhbiBhbmQgLWcvLS1nbG9iYWxzLW9ubHkgY2Fubm90IGJlIHVzZWQg dG9nZXRoZXIgaW4gbm9uLXRleHQgZHVtcCAqLwotCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBh cmNoTnVsbCAmJiBvdXRwdXRfY2xlYW4gJiYgZ2xvYmFsc19vbmx5KQotCQlwZ19mYXRhbCgi b3B0aW9ucyAlcyBhbmQgJXMgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgaW4gbm9uLXRleHQg ZHVtcCIsCi0JCQkJICItLWNsZWFuIiwgIi1nLy0tZ2xvYmFscy1vbmx5Iik7Ci0KIAkvKgog CSAqIElmIHBhc3N3b3JkIHZhbHVlcyBhcmUgbm90IHJlcXVpcmVkIGluIHRoZSBkdW1wLCBz d2l0Y2ggdG8gdXNpbmcKIAkgKiBwZ19yb2xlcyB3aGljaCBpcyBlcXVhbGx5IHVzZWZ1bCwg anVzdCBtb3JlIGxpa2VseSB0byBoYXZlIHVucmVzdHJpY3RlZApAQCAtNTQ5LDI3ICs0OTks NiBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJaWYgKHNlcXVlbmNlX2RhdGEp CiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHBnZHVtcG9wdHMsICIgLS1zZXF1ZW5jZS1kYXRh Iik7CiAKLQkvKgotCSAqIE9wZW4gdGhlIG91dHB1dCBmaWxlIGlmIHJlcXVpcmVkLCBvdGhl cndpc2UgdXNlIHN0ZG91dC4gIElmIHJlcXVpcmVkLAotCSAqIHRoZW4gY3JlYXRlIG5ldyBk aXJlY3RvcnkuCi0JICovCi0JaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQotCXsK LQkJQXNzZXJ0KGZpbGVuYW1lKTsKLQotCQkvKiBDcmVhdGUgbmV3IGRpcmVjdG9yeSBvciBh Y2NlcHQgdGhlIGVtcHR5IGV4aXN0aW5nIGRpcmVjdG9yeS4gKi8KLQkJY3JlYXRlX29yX29w ZW5fZGlyKGZpbGVuYW1lKTsKLQl9Ci0JZWxzZSBpZiAoZmlsZW5hbWUpCi0JewotCQlPUEYg PSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX1cpOwotCQlpZiAoIU9QRikKLQkJCXBnX2Zh dGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwKLQkJCQkJIGZp bGVuYW1lKTsKLQl9Ci0JZWxzZQotCQlPUEYgPSBzdGRvdXQ7Ci0KIAkvKgogCSAqIElmIHlv dSBkb24ndCBwcm92aWRlIGEgcmVzdHJpY3Qga2V5LCBvbmUgd2lsbCBiZSBhcHBvaW50ZWQg Zm9yIHlvdS4KIAkgKi8KQEAgLTYxOSw2ICs1NDgsMTkgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQogCWV4cGFuZF9kYm5hbWVfcGF0dGVybnMoY29ubiwgJmRhdGFiYXNlX2V4 Y2x1ZGVfcGF0dGVybnMsCiAJCQkJCQkgICAmZGF0YWJhc2VfZXhjbHVkZV9uYW1lcyk7CiAK KwkvKgorCSAqIE9wZW4gdGhlIG91dHB1dCBmaWxlIGlmIHJlcXVpcmVkLCBvdGhlcndpc2Ug dXNlIHN0ZG91dAorCSAqLworCWlmIChmaWxlbmFtZSkKKwl7CisJCU9QRiA9IGZvcGVuKGZp bGVuYW1lLCBQR19CSU5BUllfVyk7CisJCWlmICghT1BGKQorCQkJcGdfZmF0YWwoImNvdWxk IG5vdCBvcGVuIG91dHB1dCBmaWxlIFwiJXNcIjogJW0iLAorCQkJCQkgZmlsZW5hbWUpOwor CX0KKwllbHNlCisJCU9QRiA9IHN0ZG91dDsKKwogCS8qCiAJICogU2V0IHRoZSBjbGllbnQg ZW5jb2RpbmcgaWYgcmVxdWVzdGVkLgogCSAqLwpAQCAtNjU2LDEyMSArNTk4LDM1IEBAIG1h aW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlpZiAocXVvdGVfYWxsX2lkZW50aWZpZXJz KQogCQlleGVjdXRlQ29tbWFuZChjb25uLCAiU0VUIHF1b3RlX2FsbF9pZGVudGlmaWVycyA9 IHRydWUiKTsKIAotCS8qIGNyZWF0ZSBhIGFyY2hpdmUgZmlsZSBmb3IgZ2xvYmFsIGNvbW1h bmRzLiAqLwotCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKLQl7Ci0JCVBRRXhw QnVmZmVyIHFyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7Ci0JCWNoYXIJCWdsb2JhbF9wYXRo W01BWFBHUEFUSF07Ci0JCWNvbnN0IGNoYXIgKmVuY25hbWU7Ci0JCXBnX2NvbXByZXNzX3Nw ZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyA9IHswfTsKLQotCQkvKgotCQkgKiBDaGVj ayB0aGF0IG5vIGdsb2JhbCBvYmplY3QgbmFtZXMgY29udGFpbiBuZXdsaW5lcyBvciBjYXJy aWFnZQotCQkgKiByZXR1cm5zLCB3aGljaCB3b3VsZCBicmVhayB0aGUgbWFwLmRhdCBmaWxl IGZvcm1hdC4gIFRoaXMgaXMgb25seQotCQkgKiBuZWVkZWQgZm9yIHNlcnZlcnMgb2xkZXIg dGhhbiB2MTksIHdoaWNoIHN0YXJ0ZWQgcHJvaGliaXRpbmcgc3VjaAotCQkgKiBuYW1lcy4K LQkJICovCi0JCWlmIChzZXJ2ZXJfdmVyc2lvbiA8IDE5MDAwMCkKLQkJCWNoZWNrX2Zvcl9p bnZhbGlkX2dsb2JhbF9uYW1lcyhjb25uLCAmZGF0YWJhc2VfZXhjbHVkZV9uYW1lcyk7Ci0K LQkJLyogU2V0IGZpbGUgcGF0aCBmb3IgZ2xvYmFsIHNxbCBjb21tYW5kcy4gKi8KLQkJc25w cmludGYoZ2xvYmFsX3BhdGgsIE1BWFBHUEFUSCwgIiVzL3RvYy5nbG8iLCBmaWxlbmFtZSk7 Ci0KLQkJLyogT3BlbiB0aGUgb3V0cHV0IGZpbGUgKi8KLQkJZm91dCA9IENyZWF0ZUFyY2hp dmUoZ2xvYmFsX3BhdGgsIGFyY2hDdXN0b20sIGNvbXByZXNzaW9uX3NwZWMsCi0JCQkJCQkJ IGRvc3luYywgYXJjaE1vZGVXcml0ZSwgTlVMTCwgREFUQV9ESVJfU1lOQ19NRVRIT0RfRlNZ TkMpOwotCi0JCS8qIE1ha2UgZHVtcCBvcHRpb25zIGFjY2Vzc2libGUgcmlnaHQgYXdheSAq LwotCQlTZXRBcmNoaXZlT3B0aW9ucyhmb3V0LCAmZG9wdCwgTlVMTCk7Ci0KLQkJKChBcmNo aXZlSGFuZGxlICopIGZvdXQpLT5jb25uZWN0aW9uID0gY29ubjsKLQkJKChBcmNoaXZlSGFu ZGxlICopIGZvdXQpLT5wdWJsaWMubnVtV29ya2VycyA9IDE7Ci0KLQkJLyogUmVnaXN0ZXIg dGhlIGNsZWFudXAgaG9vayAqLwotCQlvbl9leGl0X2Nsb3NlX2FyY2hpdmUoZm91dCk7Ci0K LQkJLyogTGV0IHRoZSBhcmNoaXZlciBrbm93IGhvdyBub2lzeSB0byBiZSAqLwotCQlmb3V0 LT52ZXJib3NlID0gdmVyYm9zZTsKLQotCQkvKgotCQkgKiBXZSBhbGxvdyB0aGUgc2VydmVy IHRvIGJlIGJhY2sgdG8gOS4yLCBhbmQgdXAgdG8gYW55IG1pbm9yIHJlbGVhc2UKLQkJICog b2Ygb3VyIG93biBtYWpvciB2ZXJzaW9uLiAgKFNlZSBhbHNvIHZlcnNpb24gY2hlY2sgaW4K LQkJICogcGdfZHVtcGFsbC5jLikKLQkJICovCi0JCWZvdXQtPm1pblJlbW90ZVZlcnNpb24g PSA5MDIwMDsKLQkJZm91dC0+bWF4UmVtb3RlVmVyc2lvbiA9IChQR19WRVJTSU9OX05VTSAv IDEwMCkgKiAxMDAgKyA5OTsKLQkJZm91dC0+bnVtV29ya2VycyA9IDE7Ci0KLQkJLyogRHVt cCBkZWZhdWx0X3RyYW5zYWN0aW9uX3JlYWRfb25seS4gKi8KLQkJYXBwZW5kUFFFeHBCdWZm ZXJTdHIocXJ5LCAiU0VUIGRlZmF1bHRfdHJhbnNhY3Rpb25fcmVhZF9vbmx5ID0gb2ZmO1xu XG4iKTsKLQkJQXJjaGl2ZUVudHJ5KGZvdXQsCi0JCQkJCSBuaWxDYXRhbG9nSWQsCS8qIGNh dGFsb2cgSUQgKi8KLQkJCQkJIGNyZWF0ZUR1bXBJZCgpLAkvKiBkdW1wIElEICovCi0JCQkJ CSBBUkNISVZFX09QVFMoLnRhZyA9ICJkZWZhdWx0X3RyYW5zYWN0aW9uX3JlYWRfb25seSIs Ci0JCQkJCQkJCSAgLmRlc2NyaXB0aW9uID0gImRlZmF1bHRfdHJhbnNhY3Rpb25fcmVhZF9v bmx5IiwKLQkJCQkJCQkJICAuc2VjdGlvbiA9IFNFQ1RJT05fUFJFX0RBVEEsCi0JCQkJCQkJ CSAgLmNyZWF0ZVN0bXQgPSBxcnktPmRhdGEpKTsKLQkJcmVzZXRQUUV4cEJ1ZmZlcihxcnkp OwotCi0JCS8qIFB1dCB0aGUgY29ycmVjdCBlbmNvZGluZyBpbnRvIHRoZSBhcmNoaXZlICov Ci0JCWVuY25hbWUgPSBwZ19lbmNvZGluZ190b19jaGFyKGVuY29kaW5nKTsKLQotCQlhcHBl bmRQUUV4cEJ1ZmZlclN0cihxcnksICJTRVQgY2xpZW50X2VuY29kaW5nID0gIik7Ci0JCWFw cGVuZFN0cmluZ0xpdGVyYWxBSChxcnksIGVuY25hbWUsIGZvdXQpOwotCQlhcHBlbmRQUUV4 cEJ1ZmZlclN0cihxcnksICI7XG4iKTsKLQkJQXJjaGl2ZUVudHJ5KGZvdXQsCi0JCQkJCSBu aWxDYXRhbG9nSWQsCS8qIGNhdGFsb2cgSUQgKi8KLQkJCQkJIGNyZWF0ZUR1bXBJZCgpLAkv KiBkdW1wIElEICovCi0JCQkJCSBBUkNISVZFX09QVFMoLnRhZyA9ICJjbGllbnRfZW5jb2Rp bmciLAotCQkJCQkJCQkgIC5kZXNjcmlwdGlvbiA9ICJjbGllbnRfZW5jb2RpbmciLAotCQkJ CQkJCQkgIC5zZWN0aW9uID0gU0VDVElPTl9QUkVfREFUQSwKLQkJCQkJCQkJICAuY3JlYXRl U3RtdCA9IHFyeS0+ZGF0YSkpOwotCQlyZXNldFBRRXhwQnVmZmVyKHFyeSk7Ci0KLQkJLyog UHV0IHRoZSBjb3JyZWN0IGVzY2FwZSBzdHJpbmcgYmVoYXZpb3IgaW50byB0aGUgYXJjaGl2 ZS4gKi8KLQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXJ5LCAiU0VUIHN0YW5kYXJkX2NvbmZv cm1pbmdfc3RyaW5ncyA9ICdvbic7XG4iKTsKLQkJQXJjaGl2ZUVudHJ5KGZvdXQsCi0JCQkJ CSBuaWxDYXRhbG9nSWQsCS8qIGNhdGFsb2cgSUQgKi8KLQkJCQkJIGNyZWF0ZUR1bXBJZCgp LAkvKiBkdW1wIElEICovCi0JCQkJCSBBUkNISVZFX09QVFMoLnRhZyA9ICJzdGFuZGFyZF9j b25mb3JtaW5nX3N0cmluZ3MiLAotCQkJCQkJCQkgIC5kZXNjcmlwdGlvbiA9ICJzdGFuZGFy ZF9jb25mb3JtaW5nX3N0cmluZ3MiLAotCQkJCQkJCQkgIC5zZWN0aW9uID0gU0VDVElPTl9Q UkVfREFUQSwKLQkJCQkJCQkJICAuY3JlYXRlU3RtdCA9IHFyeS0+ZGF0YSkpOwotCQlkZXN0 cm95UFFFeHBCdWZmZXIocXJ5KTsKLQl9Ci0JZWxzZQotCXsKLQkJZnByaW50ZihPUEYsICIt LVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGR1bXBcbi0tXG5cbiIpOwotCi0J CWlmICh2ZXJib3NlKQotCQkJZHVtcFRpbWVzdGFtcCgiU3RhcnRlZCBvbiIpOwotCi0JCS8q Ci0JCSAqIEVudGVyIHJlc3RyaWN0ZWQgbW9kZSB0byBibG9jayBhbnkgdW5leHBlY3RlZCBw c3FsIG1ldGEtY29tbWFuZHMuIEEKLQkJICogbWFsaWNpb3VzIHNvdXJjZSBtaWdodCB0cnkg dG8gaW5qZWN0IGEgdmFyaWV0eSBvZiB0aGluZ3MgdmlhIGJvZ3VzCi0JCSAqIHJlc3BvbnNl cyB0byBxdWVyaWVzLiAgV2hpbGUgd2UgY2Fubm90IHByZXZlbnQgc3VjaCBzb3VyY2VzIGZy b20KLQkJICogYWZmZWN0aW5nIHRoZSBkZXN0aW5hdGlvbiBhdCByZXN0b3JlIHRpbWUsIHdl IGNhbiBibG9jayBwc3FsCi0JCSAqIG1ldGEtY29tbWFuZHMgc28gdGhhdCB0aGUgY2xpZW50 IG1hY2hpbmUgdGhhdCBydW5zIHBzcWwgd2l0aCB0aGUKLQkJICogZHVtcCBvdXRwdXQgcmVt YWlucyB1bmFmZmVjdGVkLgotCQkgKi8KLQkJZnByaW50ZihPUEYsICJcXHJlc3RyaWN0ICVz XG5cbiIsIHJlc3RyaWN0X2tleSk7Ci0KLQkJLyoKLQkJICogV2UgdXNlZCB0byBlbWl0IFxj b25uZWN0IHBvc3RncmVzIGhlcmUsIGJ1dCB0aGF0IHNlcnZlZCBubyBwdXJwb3NlCi0JCSAq IG90aGVyIHRoYW4gdG8gYnJlYWsgdGhpbmdzIGZvciBpbnN0YWxsYXRpb25zIHdpdGhvdXQg YSBwb3N0Z3JlcwotCQkgKiBkYXRhYmFzZS4gIEV2ZXJ5dGhpbmcgd2UncmUgcmVzdG9yaW5n IGhlcmUgaXMgYSBnbG9iYWwsIHNvCi0JCSAqIHdoaWNoZXZlciBkYXRhYmFzZSB3ZSdyZSBj b25uZWN0ZWQgdG8gYXQgdGhlIG1vbWVudCBpcyBmaW5lLgotCQkgKi8KLQotCQkvKiBSZXN0 b3JlIHdpbGwgbmVlZCB0byB3cml0ZSB0byB0aGUgdGFyZ2V0IGNsdXN0ZXIgKi8KLQkJZnBy aW50ZihPUEYsICJTRVQgZGVmYXVsdF90cmFuc2FjdGlvbl9yZWFkX29ubHkgPSBvZmY7XG5c biIpOwotCi0JCS8qIFJlcGxpY2F0ZSBlbmNvZGluZyBhbmQgc3RhbmRhcmRfY29uZm9ybWlu Z19zdHJpbmdzIGluIG91dHB1dCAqLwotCQlmcHJpbnRmKE9QRiwgIlNFVCBjbGllbnRfZW5j b2RpbmcgPSAnJXMnO1xuIiwKLQkJCQlwZ19lbmNvZGluZ190b19jaGFyKGVuY29kaW5nKSk7 Ci0JCWZwcmludGYoT1BGLCAiU0VUIHN0YW5kYXJkX2NvbmZvcm1pbmdfc3RyaW5ncyA9IG9u O1xuIik7Ci0JCWZwcmludGYoT1BGLCAiXG4iKTsKLQl9CisJZnByaW50ZihPUEYsICItLVxu LS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGR1bXBcbi0tXG5cbiIpOworCWlmICh2 ZXJib3NlKQorCQlkdW1wVGltZXN0YW1wKCJTdGFydGVkIG9uIik7CisKKwkvKgorCSAqIEVu dGVyIHJlc3RyaWN0ZWQgbW9kZSB0byBibG9jayBhbnkgdW5leHBlY3RlZCBwc3FsIG1ldGEt Y29tbWFuZHMuICBBCisJICogbWFsaWNpb3VzIHNvdXJjZSBtaWdodCB0cnkgdG8gaW5qZWN0 IGEgdmFyaWV0eSBvZiB0aGluZ3MgdmlhIGJvZ3VzCisJICogcmVzcG9uc2VzIHRvIHF1ZXJp ZXMuICBXaGlsZSB3ZSBjYW5ub3QgcHJldmVudCBzdWNoIHNvdXJjZXMgZnJvbQorCSAqIGFm ZmVjdGluZyB0aGUgZGVzdGluYXRpb24gYXQgcmVzdG9yZSB0aW1lLCB3ZSBjYW4gYmxvY2sg cHNxbAorCSAqIG1ldGEtY29tbWFuZHMgc28gdGhhdCB0aGUgY2xpZW50IG1hY2hpbmUgdGhh dCBydW5zIHBzcWwgd2l0aCB0aGUgZHVtcAorCSAqIG91dHB1dCByZW1haW5zIHVuYWZmZWN0 ZWQuCisJICovCisJZnByaW50ZihPUEYsICJcXHJlc3RyaWN0ICVzXG5cbiIsIHJlc3RyaWN0 X2tleSk7CisKKwkvKgorCSAqIFdlIHVzZWQgdG8gZW1pdCBcY29ubmVjdCBwb3N0Z3JlcyBo ZXJlLCBidXQgdGhhdCBzZXJ2ZWQgbm8gcHVycG9zZQorCSAqIG90aGVyIHRoYW4gdG8gYnJl YWsgdGhpbmdzIGZvciBpbnN0YWxsYXRpb25zIHdpdGhvdXQgYSBwb3N0Z3JlcworCSAqIGRh dGFiYXNlLiAgRXZlcnl0aGluZyB3ZSdyZSByZXN0b3JpbmcgaGVyZSBpcyBhIGdsb2JhbCwg c28gd2hpY2hldmVyCisJICogZGF0YWJhc2Ugd2UncmUgY29ubmVjdGVkIHRvIGF0IHRoZSBt b21lbnQgaXMgZmluZS4KKwkgKi8KKworCS8qIFJlc3RvcmUgd2lsbCBuZWVkIHRvIHdyaXRl IHRvIHRoZSB0YXJnZXQgY2x1c3RlciAqLworCWZwcmludGYoT1BGLCAiU0VUIGRlZmF1bHRf dHJhbnNhY3Rpb25fcmVhZF9vbmx5ID0gb2ZmO1xuXG4iKTsKKworCS8qIFJlcGxpY2F0ZSBl bmNvZGluZyBhbmQgc3RhbmRhcmRfY29uZm9ybWluZ19zdHJpbmdzIGluIG91dHB1dCAqLwor CWZwcmludGYoT1BGLCAiU0VUIGNsaWVudF9lbmNvZGluZyA9ICclcyc7XG4iLAorCQkJcGdf ZW5jb2RpbmdfdG9fY2hhcihlbmNvZGluZykpOworCWZwcmludGYoT1BGLCAiU0VUIHN0YW5k YXJkX2NvbmZvcm1pbmdfc3RyaW5ncyA9IG9uO1xuIik7CisJZnByaW50ZihPUEYsICJcbiIp OwogCiAJaWYgKCFkYXRhX29ubHkgJiYgIXN0YXRpc3RpY3Nfb25seSAmJiAhbm9fc2NoZW1h KQogCXsKQEAgLTc3OSwxNCArNjM1LDggQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltd KQogCQkgKiBkZXBlbmRlbmN5IGFuYWx5c2lzIGJlY2F1c2UgZGF0YWJhc2VzIG5ldmVyIGRl cGVuZCBvbiBlYWNoIG90aGVyLAogCQkgKiBhbmQgdGFibGVzcGFjZXMgbmV2ZXIgZGVwZW5k IG9uIGVhY2ggb3RoZXIuICBSb2xlcyBjb3VsZCBoYXZlCiAJCSAqIGdyYW50cyB0byBlYWNo IG90aGVyLCBidXQgRFJPUCBST0xFIHdpbGwgY2xlYW4gdGhvc2UgdXAgc2lsZW50bHkuCi0J CSAqCi0JCSAqIEZvciBub24tdGV4dCBmb3JtYXRzLCBwZ19kdW1wYWxsIHVuY29uZGl0aW9u YWxseSBwcm9jZXNzIC0tY2xlYW4KLQkJICogb3B0aW9uLiBJbiBjb250cmFzdCwgcGdfcmVz dG9yZSBvbmx5IGFwcGxpZXMgaXQgaWYgdGhlIHVzZXIKLQkJICogZXhwbGljaXRseSBwcm92 aWRlcyB0aGUgZmxhZy4gIFRoaXMgZGlzY3JlcGFuY3kgcmVzb2x2ZXMgY29ybmVyCi0JCSAq IGNhc2VzIHdoZXJlIHBnX3Jlc3RvcmUgcmVxdWlyZXMgY2xlYW51cCBpbnN0cnVjdGlvbnMg dGhhdCBtYXkgYmUKLQkJICogbWlzc2luZyBmcm9tIGEgc3RhbmRhcmQgcGdfZHVtcGFsbCBv dXRwdXQuCiAJCSAqLwotCQlpZiAob3V0cHV0X2NsZWFuIHx8IGFyY2hEdW1wRm9ybWF0ICE9 IGFyY2hOdWxsKQorCQlpZiAob3V0cHV0X2NsZWFuKQogCQl7CiAJCQlpZiAoIWdsb2JhbHNf b25seSAmJiAhcm9sZXNfb25seSAmJiAhdGFibGVzcGFjZXNfb25seSkKIAkJCQlkcm9wREJz KGNvbm4pOwpAQCAtODIwLDQ1ICs2NzAsMjggQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdKQogCQkJZHVtcFRhYmxlc3BhY2VzKGNvbm4pOwogCX0KIAotCWlmIChhcmNoRHVtcEZv cm1hdCA9PSBhcmNoTnVsbCkKLQl7Ci0JCS8qCi0JCSAqIEV4aXQgcmVzdHJpY3RlZCBtb2Rl IGp1c3QgYmVmb3JlIGR1bXBpbmcgdGhlIGRhdGFiYXNlcy4gIHBnX2R1bXAKLQkJICogd2ls bCBoYW5kbGUgZW50ZXJpbmcgcmVzdHJpY3RlZCBtb2RlIGFnYWluIGFzIGFwcHJvcHJpYXRl LgotCQkgKi8KLQkJZnByaW50ZihPUEYsICJcXHVucmVzdHJpY3QgJXNcblxuIiwgcmVzdHJp Y3Rfa2V5KTsKLQl9CisJLyoKKwkgKiBFeGl0IHJlc3RyaWN0ZWQgbW9kZSBqdXN0IGJlZm9y ZSBkdW1waW5nIHRoZSBkYXRhYmFzZXMuICBwZ19kdW1wIHdpbGwKKwkgKiBoYW5kbGUgZW50 ZXJpbmcgcmVzdHJpY3RlZCBtb2RlIGFnYWluIGFzIGFwcHJvcHJpYXRlLgorCSAqLworCWZw cmludGYoT1BGLCAiXFx1bnJlc3RyaWN0ICVzXG5cbiIsIHJlc3RyaWN0X2tleSk7CiAKIAlp ZiAoIWdsb2JhbHNfb25seSAmJiAhcm9sZXNfb25seSAmJiAhdGFibGVzcGFjZXNfb25seSkK IAkJZHVtcERhdGFiYXNlcyhjb25uKTsKIAotCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNo TnVsbCkKLQl7Ci0JCVBRZmluaXNoKGNvbm4pOwotCi0JCWlmICh2ZXJib3NlKQotCQkJZHVt cFRpbWVzdGFtcCgiQ29tcGxldGVkIG9uIik7Ci0JCWZwcmludGYoT1BGLCAiLS1cbi0tIFBv c3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBkdW1wIGNvbXBsZXRlXG4tLVxuXG4iKTsKKwlQ UWZpbmlzaChjb25uKTsKIAotCQlpZiAoZmlsZW5hbWUpCi0JCXsKLQkJCWZjbG9zZShPUEYp OworCWlmICh2ZXJib3NlKQorCQlkdW1wVGltZXN0YW1wKCJDb21wbGV0ZWQgb24iKTsKKwlm cHJpbnRmKE9QRiwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgZHVtcCBj b21wbGV0ZVxuLS1cblxuIik7CiAKLQkJCS8qIHN5bmMgdGhlIHJlc3VsdGluZyBmaWxlLCBl cnJvcnMgYXJlIG5vdCBmYXRhbCAqLwotCQkJaWYgKGRvc3luYykKLQkJCQkodm9pZCkgZnN5 bmNfZm5hbWUoZmlsZW5hbWUsIGZhbHNlKTsKLQkJfQotCX0KLQllbHNlCisJaWYgKGZpbGVu YW1lKQogCXsKLQkJUmVzdG9yZU9wdGlvbnMgKnJvcHQ7Ci0KLQkJcm9wdCA9IE5ld1Jlc3Rv cmVPcHRpb25zKCk7Ci0JCVNldEFyY2hpdmVPcHRpb25zKGZvdXQsICZkb3B0LCByb3B0KTsK KwkJZmNsb3NlKE9QRik7CiAKLQkJLyogTWFyayB3aGljaCBlbnRyaWVzIHNob3VsZCBiZSBv dXRwdXQgKi8KLQkJUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhmb3V0KTsKLQkJQ2xv c2VBcmNoaXZlKGZvdXQpOworCQkvKiBzeW5jIHRoZSByZXN1bHRpbmcgZmlsZSwgZXJyb3Jz IGFyZSBub3QgZmF0YWwgKi8KKwkJaWYgKGRvc3luYykKKwkJCSh2b2lkKSBmc3luY19mbmFt ZShmaWxlbmFtZSwgZmFsc2UpOwogCX0KIAogCWV4aXRfbmljZWx5KDApOwpAQCAtODY4LDE0 ICs3MDEsMTIgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogc3RhdGljIHZvaWQK IGhlbHAodm9pZCkKIHsKLQlwcmludGYoXygiJXMgZXhwb3J0cyBhIFBvc3RncmVTUUwgZGF0 YWJhc2UgY2x1c3RlciBhcyBhbiBTUUwgc2NyaXB0IG9yIHRvIG90aGVyIGZvcm1hdHMuXG5c biIpLCBwcm9nbmFtZSk7CisJcHJpbnRmKF8oIiVzIGV4cG9ydHMgYSBQb3N0Z3JlU1FMIGRh dGFiYXNlIGNsdXN0ZXIgYXMgYW4gU1FMIHNjcmlwdC5cblxuIiksIHByb2duYW1lKTsKIAlw cmludGYoXygiVXNhZ2U6XG4iKSk7CiAJcHJpbnRmKF8oIiAgJXMgW09QVElPTl0uLi5cbiIp LCBwcm9nbmFtZSk7CiAKIAlwcmludGYoXygiXG5HZW5lcmFsIG9wdGlvbnM6XG4iKSk7CiAJ cHJpbnRmKF8oIiAgLWYsIC0tZmlsZT1GSUxFTkFNRSAgICAgICAgICBvdXRwdXQgZmlsZSBu YW1lXG4iKSk7Ci0JcHJpbnRmKF8oIiAgLUYsIC0tZm9ybWF0PWN8ZHx0fHAgICAgICAgICBv dXRwdXQgZmlsZSBmb3JtYXQgKGN1c3RvbSwgZGlyZWN0b3J5LCB0YXIsXG4iCi0JCQkgIiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFpbiB0ZXh0IChkZWZhdWx0KSlcbiIp KTsKIAlwcmludGYoXygiICAtdiwgLS12ZXJib3NlICAgICAgICAgICAgICAgIHZlcmJvc2Ug bW9kZVxuIikpOwogCXByaW50ZihfKCIgIC1WLCAtLXZlcnNpb24gICAgICAgICAgICAgICAg b3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24sIHRoZW4gZXhpdFxuIikpOwogCXByaW50Zihf KCIgIC0tbG9jay13YWl0LXRpbWVvdXQ9VElNRU9VVCAgZmFpbCBhZnRlciB3YWl0aW5nIFRJ TUVPVVQgZm9yIGEgdGFibGUgbG9ja1xuIikpOwpAQCAtOTcwLDQ1ICs4MDEsMjQgQEAgZHJv cFJvbGVzKFBHY29ubiAqY29ubikKIAogCWlfcm9sbmFtZSA9IFBRZm51bWJlcihyZXMsICJy b2xuYW1lIik7CiAKLQlpZiAoUFFudHVwbGVzKHJlcykgPiAwICYmIGFyY2hEdW1wRm9ybWF0 ID09IGFyY2hOdWxsKQorCWlmIChQUW50dXBsZXMocmVzKSA+IDApCiAJCWZwcmludGYoT1BG LCAiLS1cbi0tIERyb3Agcm9sZXNcbi0tXG5cbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IFBR bnR1cGxlcyhyZXMpOyBpKyspCiAJewogCQljb25zdCBjaGFyICpyb2xlbmFtZTsKLQkJUFFF eHBCdWZmZXIgZGVsUXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAogCQlyb2xlbmFtZSA9 IFBRZ2V0dmFsdWUocmVzLCBpLCBpX3JvbG5hbWUpOwogCi0JCWlmIChhcmNoRHVtcEZvcm1h dCA9PSBhcmNoTnVsbCkKLQkJewotCQkJYXBwZW5kUFFFeHBCdWZmZXIoZGVsUXJ5LCAiRFJP UCBST0xFICVzJXM7XG4iLAotCQkJCQkJCSAgaWZfZXhpc3RzID8gIklGIEVYSVNUUyAiIDog IiIsCi0JCQkJCQkJICBmbXRJZChyb2xlbmFtZSkpOwotCQkJZnByaW50ZihPUEYsICIlcyIs IGRlbFFyeS0+ZGF0YSk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlhcHBlbmRQUUV4cEJ1ZmZl cihkZWxRcnksICJEUk9QIFJPTEUgSUYgRVhJU1RTICVzO1xuIiwKLQkJCQkJCQkgIGZtdElk KHJvbGVuYW1lKSk7Ci0KLQkJCUFyY2hpdmVFbnRyeShmb3V0LAotCQkJCQkJIG5pbENhdGFs b2dJZCwJLyogY2F0YWxvZyBJRCAqLwotCQkJCQkJIGNyZWF0ZUR1bXBJZCgpLAkvKiBkdW1w IElEICovCi0JCQkJCQkgQVJDSElWRV9PUFRTKC50YWcgPSBwc3ByaW50ZigiUk9MRSAlcyIs IGZtdElkKHJvbGVuYW1lKSksCi0JCQkJCQkJCQkgIC5kZXNjcmlwdGlvbiA9ICJEUk9QX0dM T0JBTCIsCi0JCQkJCQkJCQkgIC5zZWN0aW9uID0gU0VDVElPTl9QUkVfREFUQSwKLQkJCQkJ CQkJCSAgLmNyZWF0ZVN0bXQgPSBkZWxRcnktPmRhdGEpKTsKLQkJfQotCi0JCWRlc3Ryb3lQ UUV4cEJ1ZmZlcihkZWxRcnkpOworCQlmcHJpbnRmKE9QRiwgIkRST1AgUk9MRSAlcyVzO1xu IiwKKwkJCQlpZl9leGlzdHMgPyAiSUYgRVhJU1RTICIgOiAiIiwKKwkJCQlmbXRJZChyb2xl bmFtZSkpOwogCX0KIAogCVBRY2xlYXIocmVzKTsKIAlkZXN0cm95UFFFeHBCdWZmZXIoYnVm KTsKIAotCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKLQkJZnByaW50ZihPUEYs ICJcblxuIik7CisJZnByaW50ZihPUEYsICJcblxuIik7CiB9CiAKIC8qCkBAIC0xMDE4LDgg KzgyOCw2IEBAIHN0YXRpYyB2b2lkCiBkdW1wUm9sZXMoUEdjb25uICpjb25uKQogewogCVBR RXhwQnVmZmVyIGJ1ZiA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7Ci0JUFFFeHBCdWZmZXIgY29t bWVudF9idWYgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwotCVBRRXhwQnVmZmVyIHNlY2xhYmVs X2J1ZiA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CiAJUEdyZXN1bHQgICAqcmVzOwogCWludAkJ CWlfb2lkLAogCQkJCWlfcm9sbmFtZSwKQEAgLTEwOTEsNyArODk5LDcgQEAgZHVtcFJvbGVz KFBHY29ubiAqY29ubikKIAlpX3JvbGNvbW1lbnQgPSBQUWZudW1iZXIocmVzLCAicm9sY29t bWVudCIpOwogCWlfaXNfY3VycmVudF91c2VyID0gUFFmbnVtYmVyKHJlcywgImlzX2N1cnJl bnRfdXNlciIpOwogCi0JaWYgKFBRbnR1cGxlcyhyZXMpID4gMCAmJiBhcmNoRHVtcEZvcm1h dCA9PSBhcmNoTnVsbCkKKwlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQogCQlmcHJpbnRmKE9Q RiwgIi0tXG4tLSBSb2xlc1xuLS1cblxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVw bGVzKHJlcyk7IGkrKykKQEAgLTExMTAsOCArOTE4LDYgQEAgZHVtcFJvbGVzKFBHY29ubiAq Y29ubikKIAkJfQogCiAJCXJlc2V0UFFFeHBCdWZmZXIoYnVmKTsKLQkJcmVzZXRQUUV4cEJ1 ZmZlcihjb21tZW50X2J1Zik7Ci0JCXJlc2V0UFFFeHBCdWZmZXIoc2VjbGFiZWxfYnVmKTsK IAogCQlpZiAoYmluYXJ5X3VwZ3JhZGUpCiAJCXsKQEAgLTExODgsNTMgKzk5NCwxNyBAQCBk dW1wUm9sZXMoUEdjb25uICpjb25uKQogCiAJCWlmICghbm9fY29tbWVudHMgJiYgIVBRZ2V0 aXNudWxsKHJlcywgaSwgaV9yb2xjb21tZW50KSkKIAkJewotCQkJYXBwZW5kUFFFeHBCdWZm ZXIoY29tbWVudF9idWYsICJDT01NRU5UIE9OIFJPTEUgJXMgSVMgIiwgZm10SWQocm9sZW5h bWUpKTsKLQkJCWFwcGVuZFN0cmluZ0xpdGVyYWxDb25uKGNvbW1lbnRfYnVmLCBQUWdldHZh bHVlKHJlcywgaSwgaV9yb2xjb21tZW50KSwgY29ubik7Ci0JCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cihjb21tZW50X2J1ZiwgIjtcbiIpOworCQkJYXBwZW5kUFFFeHBCdWZmZXIoYnVmLCAi Q09NTUVOVCBPTiBST0xFICVzIElTICIsIGZtdElkKHJvbGVuYW1lKSk7CisJCQlhcHBlbmRT dHJpbmdMaXRlcmFsQ29ubihidWYsIFBRZ2V0dmFsdWUocmVzLCBpLCBpX3JvbGNvbW1lbnQp LCBjb25uKTsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKGJ1ZiwgIjtcbiIpOwogCQl9CiAK IAkJaWYgKCFub19zZWN1cml0eV9sYWJlbHMpCiAJCQlidWlsZFNoU2VjTGFiZWxzKGNvbm4s ICJwZ19hdXRoaWQiLCBhdXRoX29pZCwKIAkJCQkJCQkgIlJPTEUiLCByb2xlbmFtZSwKLQkJ CQkJCQkgc2VjbGFiZWxfYnVmKTsKKwkJCQkJCQkgYnVmKTsKIAotCQlpZiAoYXJjaER1bXBG b3JtYXQgPT0gYXJjaE51bGwpCi0JCXsKLQkJCWZwcmludGYoT1BGLCAiJXMiLCBidWYtPmRh dGEpOwotCQkJZnByaW50ZihPUEYsICIlcyIsIGNvbW1lbnRfYnVmLT5kYXRhKTsKLQotCQkJ aWYgKHNlY2xhYmVsX2J1Zi0+ZGF0YVswXSAhPSAnXDAnKQotCQkJCWZwcmludGYoT1BGLCAi JXMiLCBzZWNsYWJlbF9idWYtPmRhdGEpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJY2hhcgkg ICAqdGFnID0gcHNwcmludGYoIlJPTEUgJXMiLCBmbXRJZChyb2xlbmFtZSkpOwotCi0JCQlB cmNoaXZlRW50cnkoZm91dCwKLQkJCQkJCSBuaWxDYXRhbG9nSWQsCS8qIGNhdGFsb2cgSUQg Ki8KLQkJCQkJCSBjcmVhdGVEdW1wSWQoKSwJLyogZHVtcCBJRCAqLwotCQkJCQkJIEFSQ0hJ VkVfT1BUUygudGFnID0gdGFnLAotCQkJCQkJCQkJICAuZGVzY3JpcHRpb24gPSAiUk9MRSIs Ci0JCQkJCQkJCQkgIC5zZWN0aW9uID0gU0VDVElPTl9QUkVfREFUQSwKLQkJCQkJCQkJCSAg LmNyZWF0ZVN0bXQgPSBidWYtPmRhdGEpKTsKLQkJCWlmIChjb21tZW50X2J1Zi0+ZGF0YVsw XSAhPSAnXDAnKQotCQkJCUFyY2hpdmVFbnRyeShmb3V0LAotCQkJCQkJCSBuaWxDYXRhbG9n SWQsCS8qIGNhdGFsb2cgSUQgKi8KLQkJCQkJCQkgY3JlYXRlRHVtcElkKCksCS8qIGR1bXAg SUQgKi8KLQkJCQkJCQkgQVJDSElWRV9PUFRTKC50YWcgPSB0YWcsCi0JCQkJCQkJCQkJICAu ZGVzY3JpcHRpb24gPSAiQ09NTUVOVCIsCi0JCQkJCQkJCQkJICAuc2VjdGlvbiA9IFNFQ1RJ T05fUFJFX0RBVEEsCi0JCQkJCQkJCQkJICAuY3JlYXRlU3RtdCA9IGNvbW1lbnRfYnVmLT5k YXRhKSk7Ci0KLQkJCWlmIChzZWNsYWJlbF9idWYtPmRhdGFbMF0gIT0gJ1wwJykKLQkJCQlB cmNoaXZlRW50cnkoZm91dCwKLQkJCQkJCQkgbmlsQ2F0YWxvZ0lkLAkvKiBjYXRhbG9nIElE ICovCi0JCQkJCQkJIGNyZWF0ZUR1bXBJZCgpLAkvKiBkdW1wIElEICovCi0JCQkJCQkJIEFS Q0hJVkVfT1BUUygudGFnID0gdGFnLAotCQkJCQkJCQkJCSAgLmRlc2NyaXB0aW9uID0gIlNF Q1VSSVRZIExBQkVMIiwKLQkJCQkJCQkJCQkgIC5zZWN0aW9uID0gU0VDVElPTl9QUkVfREFU QSwKLQkJCQkJCQkJCQkgIC5jcmVhdGVTdG10ID0gc2VjbGFiZWxfYnVmLT5kYXRhKSk7Ci0J CX0KKwkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CiAJfQogCiAJLyoKQEAgLTEy NDIsNyArMTAxMiw3IEBAIGR1bXBSb2xlcyhQR2Nvbm4gKmNvbm4pCiAJICogV2UgZG8gaXQg dGhpcyB3YXkgYmVjYXVzZSBjb25maWcgc2V0dGluZ3MgZm9yIHJvbGVzIGNvdWxkIG1lbnRp b24gdGhlCiAJICogbmFtZXMgb2Ygb3RoZXIgcm9sZXMuCiAJICovCi0JaWYgKFBRbnR1cGxl cyhyZXMpID4gMCAmJiBhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwlpZiAoUFFudHVw bGVzKHJlcykgPiAwKQogCQlmcHJpbnRmKE9QRiwgIlxuLS1cbi0tIFVzZXIgQ29uZmlndXJh dGlvbnNcbi0tXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsr KQpAQCAtMTI1MCwxMiArMTAyMCw5IEBAIGR1bXBSb2xlcyhQR2Nvbm4gKmNvbm4pCiAKIAlQ UWNsZWFyKHJlcyk7CiAKLQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCi0JCWZw cmludGYoT1BGLCAiXG5cbiIpOworCWZwcmludGYoT1BGLCAiXG5cbiIpOwogCiAJZGVzdHJv eVBRRXhwQnVmZmVyKGJ1Zik7Ci0JZGVzdHJveVBRRXhwQnVmZmVyKGNvbW1lbnRfYnVmKTsK LQlkZXN0cm95UFFFeHBCdWZmZXIoc2VjbGFiZWxfYnVmKTsKIH0KIAogCkBAIC0xMjY5LDcg KzEwMzYsNiBAQCBzdGF0aWMgdm9pZAogZHVtcFJvbGVNZW1iZXJzaGlwKFBHY29ubiAqY29u bikKIHsKIAlQUUV4cEJ1ZmZlciBidWYgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwotCVBRRXhw QnVmZmVyIHF1ZXJ5YnVmID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAlQUUV4cEJ1ZmZlciBv cHRidWYgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwogCVBHcmVzdWx0ICAgKnJlczsKIAlpbnQJ CQlzdGFydCA9IDAsCkBAIC0xMzMyLDcgKzEwOTgsNyBAQCBkdW1wUm9sZU1lbWJlcnNoaXAo UEdjb25uICpjb25uKQogCWlfaW5oZXJpdF9vcHRpb24gPSBQUWZudW1iZXIocmVzLCAiaW5o ZXJpdF9vcHRpb24iKTsKIAlpX3NldF9vcHRpb24gPSBQUWZudW1iZXIocmVzLCAic2V0X29w dGlvbiIpOwogCi0JaWYgKFBRbnR1cGxlcyhyZXMpID4gMCAmJiBhcmNoRHVtcEZvcm1hdCA9 PSBhcmNoTnVsbCkKKwlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQogCQlmcHJpbnRmKE9QRiwg Ii0tXG4tLSBSb2xlIG1lbWJlcnNoaXBzXG4tLVxuXG4iKTsKIAogCS8qCkBAIC0xNDc5LDkg KzEyNDUsOCBAQCBkdW1wUm9sZU1lbWJlcnNoaXAoUEdjb25uICpjb25uKQogCiAJCQkJLyog R2VuZXJhdGUgdGhlIGFjdHVhbCBHUkFOVCBzdGF0ZW1lbnQuICovCiAJCQkJcmVzZXRQUUV4 cEJ1ZmZlcihvcHRidWYpOwotCQkJCXJlc2V0UFFFeHBCdWZmZXIocXVlcnlidWYpOwotCQkJ CWFwcGVuZFBRRXhwQnVmZmVyKHF1ZXJ5YnVmLCAiR1JBTlQgJXMiLCBmbXRJZChyb2xlKSk7 Ci0JCQkJYXBwZW5kUFFFeHBCdWZmZXIocXVlcnlidWYsICIgVE8gJXMiLCBmbXRJZChtZW1i ZXIpKTsKKwkJCQlmcHJpbnRmKE9QRiwgIkdSQU5UICVzIiwgZm10SWQocm9sZSkpOworCQkJ CWZwcmludGYoT1BGLCAiIFRPICVzIiwgZm10SWQobWVtYmVyKSk7CiAJCQkJaWYgKCphZG1p bl9vcHRpb24gPT0gJ3QnKQogCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihvcHRidWYsICJB RE1JTiBPUFRJT04iKTsKIAkJCQlpZiAoZHVtcF9ncmFudF9vcHRpb25zKQpAQCAtMTUwMiwy MSArMTI2NywxMCBAQCBkdW1wUm9sZU1lbWJlcnNoaXAoUEdjb25uICpjb25uKQogCQkJCQlh cHBlbmRQUUV4cEJ1ZmZlclN0cihvcHRidWYsICJTRVQgRkFMU0UiKTsKIAkJCQl9CiAJCQkJ aWYgKG9wdGJ1Zi0+ZGF0YVswXSAhPSAnXDAnKQotCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihx dWVyeWJ1ZiwgIiBXSVRIICVzIiwgb3B0YnVmLT5kYXRhKTsKKwkJCQkJZnByaW50ZihPUEYs ICIgV0lUSCAlcyIsIG9wdGJ1Zi0+ZGF0YSk7CiAJCQkJaWYgKGR1bXBfdGhpc19ncmFudG9y KQotCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihxdWVyeWJ1ZiwgIiBHUkFOVEVEIEJZICVzIiwg Zm10SWQoZ3JhbnRvcikpOwotCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5YnVmLCAi O1xuIik7Ci0KLQkJCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCi0JCQkJCWZw cmludGYoT1BGLCAiJXMiLCBxdWVyeWJ1Zi0+ZGF0YSk7Ci0JCQkJZWxzZQotCQkJCQlBcmNo aXZlRW50cnkoZm91dCwKLQkJCQkJCQkJIG5pbENhdGFsb2dJZCwJLyogY2F0YWxvZyBJRCAq LwotCQkJCQkJCQkgY3JlYXRlRHVtcElkKCksCS8qIGR1bXAgSUQgKi8KLQkJCQkJCQkJIEFS Q0hJVkVfT1BUUygudGFnID0gcHNwcmludGYoIlJPTEUgJXMiLCBmbXRJZChyb2xlKSksCi0J CQkJCQkJCQkJCSAgLmRlc2NyaXB0aW9uID0gIlJPTEUgUFJPUEVSVElFUyIsCi0JCQkJCQkJ CQkJCSAgLnNlY3Rpb24gPSBTRUNUSU9OX1BSRV9EQVRBLAotCQkJCQkJCQkJCQkgIC5jcmVh dGVTdG10ID0gcXVlcnlidWYtPmRhdGEpKTsKKwkJCQkJZnByaW50ZihPUEYsICIgR1JBTlRF RCBCWSAlcyIsIGZtdElkKGdyYW50b3IpKTsKKwkJCQlmcHJpbnRmKE9QRiwgIjtcbiIpOwog CQkJfQogCQl9CiAKQEAgLTE1MjcsMTEgKzEyODEsOCBAQCBkdW1wUm9sZU1lbWJlcnNoaXAo UEdjb25uICpjb25uKQogCiAJUFFjbGVhcihyZXMpOwogCWRlc3Ryb3lQUUV4cEJ1ZmZlcihi dWYpOwotCWRlc3Ryb3lQUUV4cEJ1ZmZlcihxdWVyeWJ1Zik7Ci0JZGVzdHJveVBRRXhwQnVm ZmVyKG9wdGJ1Zik7CiAKLQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCi0JCWZw cmludGYoT1BGLCAiXG5cbiIpOworCWZwcmludGYoT1BGLCAiXG5cbiIpOwogfQogCiAKQEAg LTE1NTgsNyArMTMwOSw3IEBAIGR1bXBSb2xlR1VDUHJpdnMoUEdjb25uICpjb25uKQogCQkJ CQkgICAiRlJPTSBwZ19jYXRhbG9nLnBnX3BhcmFtZXRlcl9hY2wgIgogCQkJCQkgICAiT1JE RVIgQlkgMSIpOwogCi0JaWYgKFBRbnR1cGxlcyhyZXMpID4gMCAmJiBhcmNoRHVtcEZvcm1h dCA9PSBhcmNoTnVsbCkKKwlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQogCQlmcHJpbnRmKE9Q RiwgIi0tXG4tLSBSb2xlIHByaXZpbGVnZXMgb24gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJz XG4tLVxuXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQpA QCAtMTU4MywyNSArMTMzNCwxNCBAQCBkdW1wUm9sZUdVQ1ByaXZzKFBHY29ubiAqY29ubikK IAkJCWV4aXRfbmljZWx5KDEpOwogCQl9CiAKLQkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFy Y2hOdWxsKQotCQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7Ci0JCWVsc2UKLQkJ CUFyY2hpdmVFbnRyeShmb3V0LAotCQkJCQkJIG5pbENhdGFsb2dJZCwJLyogY2F0YWxvZyBJ RCAqLwotCQkJCQkJIGNyZWF0ZUR1bXBJZCgpLAkvKiBkdW1wIElEICovCi0JCQkJCQkgQVJD SElWRV9PUFRTKC50YWcgPSBwc3ByaW50ZigiUk9MRSAlcyIsIGZtdElkKHBhcm93bmVyKSks Ci0JCQkJCQkJCQkgIC5kZXNjcmlwdGlvbiA9ICJST0xFIFBST1BFUlRJRVMiLAotCQkJCQkJ CQkJICAuc2VjdGlvbiA9IFNFQ1RJT05fUFJFX0RBVEEsCi0JCQkJCQkJCQkgIC5jcmVhdGVT dG10ID0gYnVmLT5kYXRhKSk7CisJCWZwcmludGYoT1BGLCAiJXMiLCBidWYtPmRhdGEpOwog CiAJCWZyZWUoZnBhcm5hbWUpOwogCQlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsKIAl9CiAK IAlQUWNsZWFyKHJlcyk7Ci0KLQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCi0J CWZwcmludGYoT1BGLCAiXG5cbiIpOworCWZwcmludGYoT1BGLCAiXG5cbiIpOwogfQogCiAK QEAgLTE2MjMsNDEgKzEzNjMsMjEgQEAgZHJvcFRhYmxlc3BhY2VzKFBHY29ubiAqY29ubikK IAkJCQkJICAgIldIRVJFIHNwY25hbWUgIX4gJ15wZ18nICIKIAkJCQkJICAgIk9SREVSIEJZ IDEiKTsKIAotCWlmIChQUW50dXBsZXMocmVzKSA+IDAgJiYgYXJjaER1bXBGb3JtYXQgPT0g YXJjaE51bGwpCisJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKIAkJZnByaW50ZihPUEYsICIt LVxuLS0gRHJvcCB0YWJsZXNwYWNlc1xuLS1cblxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwg UFFudHVwbGVzKHJlcyk7IGkrKykKIAl7CiAJCWNoYXIJICAgKnNwY25hbWUgPSBQUWdldHZh bHVlKHJlcywgaSwgMCk7Ci0JCVBRRXhwQnVmZmVyIGRlbFFyeSA9IGNyZWF0ZVBRRXhwQnVm ZmVyKCk7CiAKLQkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQotCQl7Ci0JCQlh cHBlbmRQUUV4cEJ1ZmZlcihkZWxRcnksICJEUk9QIFRBQkxFU1BBQ0UgJXMlcztcbiIsCi0J CQkJCQkJICBpZl9leGlzdHMgPyAiSUYgRVhJU1RTICIgOiAiIiwKLQkJCQkJCQkgIGZtdElk KHNwY25hbWUpKTsKLQkJCWZwcmludGYoT1BGLCAiJXMiLCBkZWxRcnktPmRhdGEpOwotCQl9 Ci0JCWVsc2UKLQkJewotCQkJYXBwZW5kUFFFeHBCdWZmZXIoZGVsUXJ5LCAiRFJPUCBUQUJM RVNQQUNFIElGIEVYSVNUUyAlcztcbiIsCi0JCQkJCQkJICBmbXRJZChzcGNuYW1lKSk7Ci0J CQlBcmNoaXZlRW50cnkoZm91dCwKLQkJCQkJCSBuaWxDYXRhbG9nSWQsCS8qIGNhdGFsb2cg SUQgKi8KLQkJCQkJCSBjcmVhdGVEdW1wSWQoKSwJLyogZHVtcCBJRCAqLwotCQkJCQkJIEFS Q0hJVkVfT1BUUygudGFnID0gcHNwcmludGYoIlRBQkxFU1BBQ0UgJXMiLCBmbXRJZChzcGNu YW1lKSksCi0JCQkJCQkJCQkgIC5kZXNjcmlwdGlvbiA9ICJEUk9QX0dMT0JBTCIsCi0JCQkJ CQkJCQkgIC5zZWN0aW9uID0gU0VDVElPTl9QUkVfREFUQSwKLQkJCQkJCQkJCSAgLmNyZWF0 ZVN0bXQgPSBkZWxRcnktPmRhdGEpKTsKLQkJfQotCi0JCWRlc3Ryb3lQUUV4cEJ1ZmZlcihk ZWxRcnkpOworCQlmcHJpbnRmKE9QRiwgIkRST1AgVEFCTEVTUEFDRSAlcyVzO1xuIiwKKwkJ CQlpZl9leGlzdHMgPyAiSUYgRVhJU1RTICIgOiAiIiwKKwkJCQlmbXRJZChzcGNuYW1lKSk7 CiAJfQogCiAJUFFjbGVhcihyZXMpOwogCi0JaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hO dWxsKQotCQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKKwlmcHJpbnRmKE9QRiwgIlxuXG4iKTsK IH0KIAogLyoKQEAgLTE2NjcsOCArMTM4Nyw2IEBAIHN0YXRpYyB2b2lkCiBkdW1wVGFibGVz cGFjZXMoUEdjb25uICpjb25uKQogewogCVBHcmVzdWx0ICAgKnJlczsKLQlQUUV4cEJ1ZmZl ciBjb21tZW50X2J1ZiA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7Ci0JUFFFeHBCdWZmZXIgc2Vj bGFiZWxfYnVmID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAlpbnQJCQlpOwogCiAJLyoKQEAg LTE2ODUsNyArMTQwMyw3IEBAIGR1bXBUYWJsZXNwYWNlcyhQR2Nvbm4gKmNvbm4pCiAJCQkJ CSAgICJXSEVSRSBzcGNuYW1lICF+ICdecGdfJyAiCiAJCQkJCSAgICJPUkRFUiBCWSAxIik7 CiAKLQlpZiAoUFFudHVwbGVzKHJlcykgPiAwICYmIGFyY2hEdW1wRm9ybWF0ID09IGFyY2hO dWxsKQorCWlmIChQUW50dXBsZXMocmVzKSA+IDApCiAJCWZwcmludGYoT1BGLCAiLS1cbi0t IFRhYmxlc3BhY2VzXG4tLVxuXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMo cmVzKTsgaSsrKQpAQCAtMTcwNCw5ICsxNDIyLDYgQEAgZHVtcFRhYmxlc3BhY2VzKFBHY29u biAqY29ubikKIAkJLyogbmVlZGVkIGZvciBidWlsZEFDTENvbW1hbmRzKCkgKi8KIAkJZnNw Y25hbWUgPSBwZ19zdHJkdXAoZm10SWQoc3BjbmFtZSkpOwogCi0JCXJlc2V0UFFFeHBCdWZm ZXIoY29tbWVudF9idWYpOwotCQlyZXNldFBRRXhwQnVmZmVyKHNlY2xhYmVsX2J1Zik7Ci0K IAkJaWYgKGJpbmFyeV91cGdyYWRlKQogCQl7CiAJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihi dWYsICJcbi0tIEZvciBiaW5hcnkgdXBncmFkZSwgbXVzdCBwcmVzZXJ2ZSBwZ190YWJsZXNw YWNlIG9pZFxuIik7CkBAIC0xNzQ4LDY3ICsxNDYzLDI0IEBAIGR1bXBUYWJsZXNwYWNlcyhQ R2Nvbm4gKmNvbm4pCiAKIAkJaWYgKCFub19jb21tZW50cyAmJiBzcGNjb21tZW50ICYmIHNw Y2NvbW1lbnRbMF0gIT0gJ1wwJykKIAkJewotCQkJYXBwZW5kUFFFeHBCdWZmZXIoY29tbWVu dF9idWYsICJDT01NRU5UIE9OIFRBQkxFU1BBQ0UgJXMgSVMgIiwgZnNwY25hbWUpOwotCQkJ YXBwZW5kU3RyaW5nTGl0ZXJhbENvbm4oY29tbWVudF9idWYsIHNwY2NvbW1lbnQsIGNvbm4p OwotCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoY29tbWVudF9idWYsICI7XG4iKTsKKwkJCWFw cGVuZFBRRXhwQnVmZmVyKGJ1ZiwgIkNPTU1FTlQgT04gVEFCTEVTUEFDRSAlcyBJUyAiLCBm c3BjbmFtZSk7CisJCQlhcHBlbmRTdHJpbmdMaXRlcmFsQ29ubihidWYsIHNwY2NvbW1lbnQs IGNvbm4pOworCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoYnVmLCAiO1xuIik7CiAJCX0KIAog CQlpZiAoIW5vX3NlY3VyaXR5X2xhYmVscykKIAkJCWJ1aWxkU2hTZWNMYWJlbHMoY29ubiwg InBnX3RhYmxlc3BhY2UiLCBzcGNvaWQsCiAJCQkJCQkJICJUQUJMRVNQQUNFIiwgc3BjbmFt ZSwKLQkJCQkJCQkgc2VjbGFiZWxfYnVmKTsKKwkJCQkJCQkgYnVmKTsKIAotCQlpZiAoYXJj aER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCi0JCXsKLQkJCWZwcmludGYoT1BGLCAiJXMiLCBi dWYtPmRhdGEpOwotCi0JCQlpZiAoY29tbWVudF9idWYtPmRhdGFbMF0gIT0gJ1wwJykKLQkJ CQlmcHJpbnRmKE9QRiwgIiVzIiwgY29tbWVudF9idWYtPmRhdGEpOwotCi0JCQlpZiAoc2Vj bGFiZWxfYnVmLT5kYXRhWzBdICE9ICdcMCcpCi0JCQkJZnByaW50ZihPUEYsICIlcyIsIHNl Y2xhYmVsX2J1Zi0+ZGF0YSk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQljaGFyCSAgICp0YWcg PSBwc3ByaW50ZigiVEFCTEVTUEFDRSAlcyIsIGZtdElkKGZzcGNuYW1lKSk7Ci0KLQkJCUFy Y2hpdmVFbnRyeShmb3V0LAotCQkJCQkJIG5pbENhdGFsb2dJZCwJLyogY2F0YWxvZyBJRCAq LwotCQkJCQkJIGNyZWF0ZUR1bXBJZCgpLAkvKiBkdW1wIElEICovCi0JCQkJCQkgQVJDSElW RV9PUFRTKC50YWcgPSB0YWcsCi0JCQkJCQkJCQkgIC5kZXNjcmlwdGlvbiA9ICJUQUJMRVNQ QUNFIiwKLQkJCQkJCQkJCSAgLnNlY3Rpb24gPSBTRUNUSU9OX1BSRV9EQVRBLAotCQkJCQkJ CQkJICAuY3JlYXRlU3RtdCA9IGJ1Zi0+ZGF0YSkpOwotCi0JCQlpZiAoY29tbWVudF9idWYt PmRhdGFbMF0gIT0gJ1wwJykKLQkJCQlBcmNoaXZlRW50cnkoZm91dCwKLQkJCQkJCQkgbmls Q2F0YWxvZ0lkLAkvKiBjYXRhbG9nIElEICovCi0JCQkJCQkJIGNyZWF0ZUR1bXBJZCgpLAkv KiBkdW1wIElEICovCi0JCQkJCQkJIEFSQ0hJVkVfT1BUUygudGFnID0gdGFnLAotCQkJCQkJ CQkJCSAgLmRlc2NyaXB0aW9uID0gIkNPTU1FTlQiLAotCQkJCQkJCQkJCSAgLnNlY3Rpb24g PSBTRUNUSU9OX1BSRV9EQVRBLAotCQkJCQkJCQkJCSAgLmNyZWF0ZVN0bXQgPSBjb21tZW50 X2J1Zi0+ZGF0YSkpOwotCi0JCQlpZiAoc2VjbGFiZWxfYnVmLT5kYXRhWzBdICE9ICdcMCcp Ci0JCQkJQXJjaGl2ZUVudHJ5KGZvdXQsCi0JCQkJCQkJIG5pbENhdGFsb2dJZCwJLyogY2F0 YWxvZyBJRCAqLwotCQkJCQkJCSBjcmVhdGVEdW1wSWQoKSwJLyogZHVtcCBJRCAqLwotCQkJ CQkJCSBBUkNISVZFX09QVFMoLnRhZyA9IHRhZywKLQkJCQkJCQkJCQkgIC5kZXNjcmlwdGlv biA9ICJTRUNVUklUWSBMQUJFTCIsCi0JCQkJCQkJCQkJICAuc2VjdGlvbiA9IFNFQ1RJT05f UFJFX0RBVEEsCi0JCQkJCQkJCQkJICAuY3JlYXRlU3RtdCA9IHNlY2xhYmVsX2J1Zi0+ZGF0 YSkpOwotCQl9CisJCWZwcmludGYoT1BGLCAiJXMiLCBidWYtPmRhdGEpOwogCiAJCWZyZWUo ZnNwY25hbWUpOwogCQlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsKIAl9CiAKIAlQUWNsZWFy KHJlcyk7Ci0JZGVzdHJveVBRRXhwQnVmZmVyKGNvbW1lbnRfYnVmKTsKLQlkZXN0cm95UFFF eHBCdWZmZXIoc2VjbGFiZWxfYnVmKTsKLQotCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNo TnVsbCkKLQkJZnByaW50ZihPUEYsICJcblxuIik7CisJZnByaW50ZihPUEYsICJcblxuIik7 CiB9CiAKIApAQCAtMTgzMSw3ICsxNTAzLDcgQEAgZHJvcERCcyhQR2Nvbm4gKmNvbm4pCiAJ CQkJCSAgICJXSEVSRSBkYXRhbGxvd2Nvbm4gQU5EIGRhdGNvbm5saW1pdCAhPSAtMiAiCiAJ CQkJCSAgICJPUkRFUiBCWSBkYXRuYW1lIik7CiAKLQlpZiAoUFFudHVwbGVzKHJlcykgPiAw ICYmIGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCWlmIChQUW50dXBsZXMocmVzKSA+ IDApCiAJCWZwcmludGYoT1BGLCAiLS1cbi0tIERyb3AgZGF0YWJhc2VzIChleGNlcHQgcG9z dGdyZXMgYW5kIHRlbXBsYXRlMSlcbi0tXG5cbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IFBR bnR1cGxlcyhyZXMpOyBpKyspCkBAIC0xODQ3LDMzICsxNTE5LDE1IEBAIGRyb3BEQnMoUEdj b25uICpjb25uKQogCQkJc3RyY21wKGRibmFtZSwgInRlbXBsYXRlMCIpICE9IDAgJiYKIAkJ CXN0cmNtcChkYm5hbWUsICJwb3N0Z3JlcyIpICE9IDApCiAJCXsKLQkJCWlmIChhcmNoRHVt cEZvcm1hdCA9PSBhcmNoTnVsbCkKLQkJCXsKLQkJCQlmcHJpbnRmKE9QRiwgIkRST1AgREFU QUJBU0UgJXMlcztcbiIsCi0JCQkJCQlpZl9leGlzdHMgPyAiSUYgRVhJU1RTICIgOiAiIiwK LQkJCQkJCWZtdElkKGRibmFtZSkpOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCWNoYXIJ ICAgKnN0bXQgPSBwc3ByaW50ZigiRFJPUCBEQVRBQkFTRSBJRiBFWElTVFMgJXM7XG4iLAot CQkJCQkJCQkJCQlmbXRJZChkYm5hbWUpKTsKLQotCQkJCUFyY2hpdmVFbnRyeShmb3V0LAot CQkJCQkJCSBuaWxDYXRhbG9nSWQsCS8qIGNhdGFsb2cgSUQgKi8KLQkJCQkJCQkgY3JlYXRl RHVtcElkKCksCS8qIGR1bXAgSUQgKi8KLQkJCQkJCQkgQVJDSElWRV9PUFRTKC50YWcgPSBw c3ByaW50ZigiREFUQUJBU0UgJXMiLCBmbXRJZChkYm5hbWUpKSwKLQkJCQkJCQkJCQkgIC5k ZXNjcmlwdGlvbiA9ICJEUk9QX0dMT0JBTCIsCi0JCQkJCQkJCQkJICAuc2VjdGlvbiA9IFNF Q1RJT05fUFJFX0RBVEEsCi0JCQkJCQkJCQkJICAuY3JlYXRlU3RtdCA9IHN0bXQpKTsKLQkJ CQlwZ19mcmVlKHN0bXQpOwotCQkJfQorCQkJZnByaW50ZihPUEYsICJEUk9QIERBVEFCQVNF ICVzJXM7XG4iLAorCQkJCQlpZl9leGlzdHMgPyAiSUYgRVhJU1RTICIgOiAiIiwKKwkJCQkJ Zm10SWQoZGJuYW1lKSk7CiAJCX0KIAl9CiAKIAlQUWNsZWFyKHJlcyk7CiAKLQlpZiAoYXJj aER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCi0JCWZwcmludGYoT1BGLCAiXG5cbiIpOworCWZw cmludGYoT1BGLCAiXG5cbiIpOwogfQogCiAKQEAgLTE4OTUsNyArMTU0OSw3IEBAIGR1bXBV c2VyQ29uZmlnKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqdXNlcm5hbWUpCiAKIAlyZXMg PSBleGVjdXRlUXVlcnkoY29ubiwgYnVmLT5kYXRhKTsKIAotCWlmIChQUW50dXBsZXMocmVz KSA+IDAgJiYgYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJaWYgKFBRbnR1cGxlcyhy ZXMpID4gMCkKIAl7CiAJCWNoYXIJICAgKnNhbml0aXplZDsKIApAQCAtMTkxMCwxNyArMTU2 NCw3IEBAIGR1bXBVc2VyQ29uZmlnKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqdXNlcm5h bWUpCiAJCW1ha2VBbHRlckNvbmZpZ0NvbW1hbmQoY29ubiwgUFFnZXR2YWx1ZShyZXMsIGks IDApLAogCQkJCQkJCSAgICJST0xFIiwgdXNlcm5hbWUsIE5VTEwsIE5VTEwsCiAJCQkJCQkJ ICAgYnVmKTsKLQotCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCi0JCQlmcHJp bnRmKE9QRiwgIiVzIiwgYnVmLT5kYXRhKTsKLQkJZWxzZQotCQkJQXJjaGl2ZUVudHJ5KGZv dXQsCi0JCQkJCQkgbmlsQ2F0YWxvZ0lkLAkvKiBjYXRhbG9nIElEICovCi0JCQkJCQkgY3Jl YXRlRHVtcElkKCksCS8qIGR1bXAgSUQgKi8KLQkJCQkJCSBBUkNISVZFX09QVFMoLnRhZyA9 IHBzcHJpbnRmKCJST0xFICVzIiwgZm10SWQodXNlcm5hbWUpKSwKLQkJCQkJCQkJCSAgLmRl c2NyaXB0aW9uID0gIlJPTEUgUFJPUEVSVElFUyIsCi0JCQkJCQkJCQkgIC5zZWN0aW9uID0g U0VDVElPTl9QUkVfREFUQSwKLQkJCQkJCQkJCSAgLmNyZWF0ZVN0bXQgPSBidWYtPmRhdGEp KTsKKwkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CiAJfQogCiAJUFFjbGVhcihy ZXMpOwpAQCAtMTk5MCw5ICsxNjM0LDYgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4p CiB7CiAJUEdyZXN1bHQgICAqcmVzOwogCWludAkJCWk7Ci0JY2hhcgkJZGJfc3ViZGlyW01B WFBHUEFUSF07Ci0JY2hhcgkJZGJmaWxlcGF0aFtNQVhQR1BBVEhdOwotCUZJTEUJICAgKm1h cF9maWxlID0gTlVMTDsKIAogCS8qCiAJICogU2tpcCBkYXRhYmFzZXMgbWFya2VkIG5vdCBk YXRhbGxvd2Nvbm4sIHNpbmNlIHdlJ2QgYmUgdW5hYmxlIHRvIGNvbm5lY3QKQEAgLTIwMDYs NTUgKzE2NDcsMTkgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJICogZG9lc24n dCBoYXZlIHNvbWUgZmFpbHVyZSBtb2RlIHdpdGggLS1jbGVhbi4KIAkgKi8KIAlyZXMgPSBl eGVjdXRlUXVlcnkoY29ubiwKLQkJCQkJICAgIlNFTEVDVCBkYXRuYW1lLCBvaWQgIgorCQkJ CQkgICAiU0VMRUNUIGRhdG5hbWUgIgogCQkJCQkgICAiRlJPTSBwZ19kYXRhYmFzZSBkICIK IAkJCQkJICAgIldIRVJFIGRhdGFsbG93Y29ubiBBTkQgZGF0Y29ubmxpbWl0ICE9IC0yICIK IAkJCQkJICAgIk9SREVSIEJZIChkYXRuYW1lIDw+ICd0ZW1wbGF0ZTEnKSwgZGF0bmFtZSIp OwogCi0JaWYgKFBRbnR1cGxlcyhyZXMpID4gMCAmJiBhcmNoRHVtcEZvcm1hdCA9PSBhcmNo TnVsbCkKKwlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQogCQlmcHJpbnRmKE9QRiwgIi0tXG4t LSBEYXRhYmFzZXNcbi0tXG5cbiIpOwogCi0JLyoKLQkgKiBJZiBkaXJlY3RvcnkvdGFyL2N1 c3RvbSBmb3JtYXQgaXMgc3BlY2lmaWVkLCBjcmVhdGUgYSBzdWJkaXJlY3RvcnkKLQkgKiB1 bmRlciB0aGUgbWFpbiBkaXJlY3RvcnkgYW5kIGVhY2ggZGF0YWJhc2UgZHVtcCBmaWxlIG9y IHN1YmRpcmVjdG9yeQotCSAqIHdpbGwgYmUgY3JlYXRlZCBpbiB0aGF0IHN1YmRpcmVjdG9y eSBieSBwZ19kdW1wLgotCSAqLwotCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkK LQl7Ci0JCWNoYXIJCW1hcF9maWxlX3BhdGhbTUFYUEdQQVRIXTsKLQotCQlzbnByaW50Zihk Yl9zdWJkaXIsIE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcyIsIGZpbGVuYW1lKTsKLQotCQkv KiBDcmVhdGUgYSBzdWJkaXJlY3Rvcnkgd2l0aCAnZGF0YWJhc2VzJyBuYW1lIHVuZGVyIG1h aW4gZGlyZWN0b3J5LiAqLwotCQlpZiAobWtkaXIoZGJfc3ViZGlyLCBwZ19kaXJfY3JlYXRl X21vZGUpICE9IDApCi0JCQlwZ19mYXRhbCgiY291bGQgbm90IGNyZWF0ZSBkaXJlY3Rvcnkg XCIlc1wiOiAlbSIsIGRiX3N1YmRpcik7Ci0KLQkJc25wcmludGYobWFwX2ZpbGVfcGF0aCwg TUFYUEdQQVRILCAiJXMvbWFwLmRhdCIsIGZpbGVuYW1lKTsKLQotCQkvKiBDcmVhdGUgYSBt YXAgZmlsZSAodG8gc3RvcmUgZGJvaWQgYW5kIGRibmFtZSkgKi8KLQkJbWFwX2ZpbGUgPSBm b3BlbihtYXBfZmlsZV9wYXRoLCBQR19CSU5BUllfVyk7Ci0JCWlmICghbWFwX2ZpbGUpCi0J CQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6ICVtIiwgbWFwX2ZpbGVf cGF0aCk7Ci0KLQkJZnByaW50ZihtYXBfZmlsZSwKLQkJCQkiIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKLQkJ CQkiIyBtYXAuZGF0XG4iCi0JCQkJIiNcbiIKLQkJCQkiIyBUaGlzIGZpbGUgbWFwcyBvaWRz IHRvIGRhdGFiYXNlIG5hbWVzXG4iCi0JCQkJIiNcbiIKLQkJCQkiIyBwZ19yZXN0b3JlIHdp bGwgcmVzdG9yZSBhbGwgdGhlIGRhdGFiYXNlcyBsaXN0ZWQgaGVyZSwgdW5sZXNzXG4iCi0J CQkJIiMgb3RoZXJ3aXNlIGV4Y2x1ZGVkLiBZb3UgY2FuIGFsc28gaW5oaWJpdCByZXN0b3Jh dGlvbiBvZiBhXG4iCi0JCQkJIiMgZGF0YWJhc2UgYnkgcmVtb3ZpbmcgdGhlIGxpbmUgb3Ig Y29tbWVudGluZyBvdXQgdGhlIGxpbmUgd2l0aFxuIgotCQkJCSIjIGEgIyBtYXJrLlxuIgot CQkJCSIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjI1xuIik7Ci0JfQotCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxl cyhyZXMpOyBpKyspCiAJewogCQljaGFyCSAgICpkYm5hbWUgPSBQUWdldHZhbHVlKHJlcywg aSwgMCk7CiAJCWNoYXIJICAgKnNhbml0aXplZDsKLQkJY2hhcgkgICAqb2lkID0gUFFnZXR2 YWx1ZShyZXMsIGksIDEpOwotCQljb25zdCBjaGFyICpjcmVhdGVfb3B0cyA9ICIiOworCQlj b25zdCBjaGFyICpjcmVhdGVfb3B0czsKIAkJaW50CQkJcmV0OwogCiAJCS8qIFNraXAgdGVt cGxhdGUwLCBldmVuIGlmIGl0J3Mgbm90IG1hcmtlZCAhZGF0YWxsb3djb25uLiAqLwpAQCAt MjA3MSwxMCArMTY3Niw3IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCQlwZ19s b2dfaW5mbygiZHVtcGluZyBkYXRhYmFzZSBcIiVzXCIiLCBkYm5hbWUpOwogCiAJCXNhbml0 aXplZCA9IHNhbml0aXplX2xpbmUoZGJuYW1lLCB0cnVlKTsKLQotCQlpZiAoYXJjaER1bXBG b3JtYXQgPT0gYXJjaE51bGwpCi0JCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEYXRhYmFzZSBc IiVzXCIgZHVtcFxuLS1cblxuIiwgc2FuaXRpemVkKTsKLQorCQlmcHJpbnRmKE9QRiwgIi0t XG4tLSBEYXRhYmFzZSBcIiVzXCIgZHVtcFxuLS1cblxuIiwgc2FuaXRpemVkKTsKIAkJZnJl ZShzYW5pdGl6ZWQpOwogCiAJCS8qCkBAIC0yMDg5LDQwICsxNjkxLDI0IEBAIGR1bXBEYXRh YmFzZXMoUEdjb25uICpjb25uKQogCQl7CiAJCQlpZiAob3V0cHV0X2NsZWFuKQogCQkJCWNy ZWF0ZV9vcHRzID0gIi0tY2xlYW4gLS1jcmVhdGUiOwotCQkJLyogU2luY2UgcGdfZHVtcCB3 b24ndCBlbWl0IGEgXGNvbm5lY3QgY29tbWFuZCwgd2UgbXVzdCAqLwotCQkJZWxzZSBpZiAo YXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCi0JCQkJZnByaW50ZihPUEYsICJcXGNvbm5l Y3QgJXNcblxuIiwgZGJuYW1lKTsKIAkJCWVsc2UKKwkJCXsKIAkJCQljcmVhdGVfb3B0cyA9 ICIiOworCQkJCS8qIFNpbmNlIHBnX2R1bXAgd29uJ3QgZW1pdCBhIFxjb25uZWN0IGNvbW1h bmQsIHdlIG11c3QgKi8KKwkJCQlmcHJpbnRmKE9QRiwgIlxcY29ubmVjdCAlc1xuXG4iLCBk Ym5hbWUpOworCQkJfQogCQl9CiAJCWVsc2UKIAkJCWNyZWF0ZV9vcHRzID0gIi0tY3JlYXRl IjsKIAotCQlpZiAoZmlsZW5hbWUgJiYgYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJ CWlmIChmaWxlbmFtZSkKIAkJCWZjbG9zZShPUEYpOwogCi0JCS8qCi0JCSAqIElmIHRoaXMg aXMgbm90IGEgcGxhaW4gZm9ybWF0IGR1bXAsIHRoZW4gYXBwZW5kIGRib2lkIGFuZCBkYm5h bWUgdG8KLQkJICogdGhlIG1hcC5kYXQgZmlsZS4KLQkJICovCi0JCWlmIChhcmNoRHVtcEZv cm1hdCAhPSBhcmNoTnVsbCkKLQkJewotCQkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hD dXN0b20pCi0JCQkJc25wcmludGYoZGJmaWxlcGF0aCwgTUFYUEdQQVRILCAiXCIlc1wiL1wi JXNcIi5kbXAiLCBkYl9zdWJkaXIsIG9pZCk7Ci0JCQllbHNlIGlmIChhcmNoRHVtcEZvcm1h dCA9PSBhcmNoVGFyKQotCQkJCXNucHJpbnRmKGRiZmlsZXBhdGgsIE1BWFBHUEFUSCwgIlwi JXNcIi9cIiVzXCIudGFyIiwgZGJfc3ViZGlyLCBvaWQpOwotCQkJZWxzZQotCQkJCXNucHJp bnRmKGRiZmlsZXBhdGgsIE1BWFBHUEFUSCwgIlwiJXNcIi9cIiVzXCIiLCBkYl9zdWJkaXIs IG9pZCk7Ci0KLQkJCS8qIFB1dCBvbmUgbGluZSBlbnRyeSBmb3IgZGJvaWQgYW5kIGRibmFt ZSBpbiBtYXAgZmlsZS4gKi8KLQkJCWZwcmludGYobWFwX2ZpbGUsICIlcyAlc1xuIiwgb2lk LCBkYm5hbWUpOwotCQl9Ci0KLQkJcmV0ID0gcnVuUGdEdW1wKGRibmFtZSwgY3JlYXRlX29w dHMsIGRiZmlsZXBhdGgpOworCQlyZXQgPSBydW5QZ0R1bXAoZGJuYW1lLCBjcmVhdGVfb3B0 cyk7CiAJCWlmIChyZXQgIT0gMCkKIAkJCXBnX2ZhdGFsKCJwZ19kdW1wIGZhaWxlZCBvbiBk YXRhYmFzZSBcIiVzXCIsIGV4aXRpbmciLCBkYm5hbWUpOwogCi0JCWlmIChmaWxlbmFtZSAm JiBhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJaWYgKGZpbGVuYW1lKQogCQl7CiAJ CQlPUEYgPSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX0EpOwogCQkJaWYgKCFPUEYpCkBA IC0yMTMxLDEwICsxNzE3LDYgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJCX0K IAl9CiAKLQkvKiBDbG9zZSBtYXAgZmlsZSAqLwotCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBh cmNoTnVsbCkKLQkJZmNsb3NlKG1hcF9maWxlKTsKLQogCVBRY2xlYXIocmVzKTsKIH0KIApA QCAtMjE0NCw3ICsxNzI2LDcgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAgKiBS dW4gcGdfZHVtcCBvbiBkYm5hbWUsIHdpdGggc3BlY2lmaWVkIG9wdGlvbnMuCiAgKi8KIHN0 YXRpYyBpbnQKLXJ1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNy ZWF0ZV9vcHRzLCBjaGFyICpkYmZpbGUpCitydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1l LCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cykKIHsKIAlQUUV4cEJ1ZmZlckRhdGEgY29ubnN0 cmJ1ZjsKIAlQUUV4cEJ1ZmZlckRhdGEgY21kOwpAQCAtMjE1MywzNiArMTczNSwxNyBAQCBy dW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cywg Y2hhciAqZGJmaWxlKQogCWluaXRQUUV4cEJ1ZmZlcigmY29ubnN0cmJ1Zik7CiAJaW5pdFBR RXhwQnVmZmVyKCZjbWQpOwogCisJcHJpbnRmUFFFeHBCdWZmZXIoJmNtZCwgIlwiJXNcIiAl cyAlcyIsIHBnX2R1bXBfYmluLAorCQkJCQkgIHBnZHVtcG9wdHMtPmRhdGEsIGNyZWF0ZV9v cHRzKTsKKwogCS8qCi0JICogSWYgdGhpcyBpcyBub3QgYSBwbGFpbiBmb3JtYXQgZHVtcCwg dGhlbiBhcHBlbmQgZmlsZSBuYW1lIGFuZCBkdW1wCi0JICogZm9ybWF0IHRvIHRoZSBwZ19k dW1wIGNvbW1hbmQgdG8gZ2V0IGFyY2hpdmUgZHVtcC4KKwkgKiBJZiB3ZSBoYXZlIGEgZmls ZW5hbWUsIHVzZSB0aGUgdW5kb2N1bWVudGVkIHBsYWluLWFwcGVuZCBwZ19kdW1wCisJICog Zm9ybWF0LgogCSAqLwotCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKLQl7Ci0J CXByaW50ZlBRRXhwQnVmZmVyKCZjbWQsICJcIiVzXCIgJXMgLWYgJXMgJXMiLCBwZ19kdW1w X2JpbiwKLQkJCQkJCSAgcGdkdW1wb3B0cy0+ZGF0YSwgZGJmaWxlLCBjcmVhdGVfb3B0cyk7 Ci0KLQkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hEaXJlY3RvcnkpCi0JCQlhcHBlbmRQ UUV4cEJ1ZmZlclN0cigmY21kLCAiICAtLWZvcm1hdD1kaXJlY3RvcnkgIik7Ci0JCWVsc2Ug aWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hDdXN0b20pCi0JCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cigmY21kLCAiICAtLWZvcm1hdD1jdXN0b20gIik7Ci0JCWVsc2UgaWYgKGFyY2hEdW1w Rm9ybWF0ID09IGFyY2hUYXIpCi0JCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiICAt LWZvcm1hdD10YXIgIik7Ci0JfQorCWlmIChmaWxlbmFtZSkKKwkJYXBwZW5kUFFFeHBCdWZm ZXJTdHIoJmNtZCwgIiAtRmEgIik7CiAJZWxzZQotCXsKLQkJcHJpbnRmUFFFeHBCdWZmZXIo JmNtZCwgIlwiJXNcIiAlcyAlcyIsIHBnX2R1bXBfYmluLAotCQkJCQkJICBwZ2R1bXBvcHRz LT5kYXRhLCBjcmVhdGVfb3B0cyk7Ci0KLQkJLyoKLQkJICogSWYgd2UgaGF2ZSBhIGZpbGVu YW1lLCB1c2UgdGhlIHVuZG9jdW1lbnRlZCBwbGFpbi1hcHBlbmQgcGdfZHVtcAotCQkgKiBm b3JtYXQuCi0JCSAqLwotCQlpZiAoZmlsZW5hbWUpCi0JCQlhcHBlbmRQUUV4cEJ1ZmZlclN0 cigmY21kLCAiIC1GYSAiKTsKLQkJZWxzZQotCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNt ZCwgIiAtRnAgIik7Ci0JfQorCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GcCAi KTsKIAogCS8qCiAJICogQXBwZW5kIHRoZSBkYXRhYmFzZSBuYW1lIHRvIHRoZSBhbHJlYWR5 LWNvbnN0cnVjdGVkIHN0ZW0gb2YgY29ubmVjdGlvbgpAQCAtMjI1Niw3NiArMTgxOSw2IEBA IGV4ZWN1dGVDb21tYW5kKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpCiB9CiAK IAotLyoKLSAqIGNoZWNrX2Zvcl9pbnZhbGlkX2dsb2JhbF9uYW1lcwotICoKLSAqIENoZWNr IHRoYXQgbm8gZGF0YWJhc2UsIHJvbGUsIG9yIHRhYmxlc3BhY2UgbmFtZSBjb250YWlucyBh IG5ld2xpbmUgb3IKLSAqIGNhcnJpYWdlIHJldHVybiBjaGFyYWN0ZXIuICBTdWNoIGNoYXJh Y3RlcnMgaW4gZGF0YWJhc2UgbmFtZXMgd291bGQgYnJlYWsKLSAqIHRoZSBtYXAuZGF0IGZp bGUgZm9ybWF0IHVzZWQgZm9yIG5vbi1wbGFpbi10ZXh0IGR1bXBzLiAgUm9sZSBhbmQgdGFi bGVzcGFjZQotICogbmFtZXMgYXJlIGFsc28gY2hlY2tlZCBiZWNhdXNlIHN1Y2ggY2hhcmFj dGVycyB3ZXJlIGZvcmJpZGRlbiBzdGFydGluZyBpbgotICogdjE5LgotICoKLSAqIEV4Y2x1 ZGVkIGRhdGFiYXNlcyBhcmUgc2tpcHBlZCBzaW5jZSB0aGV5IHdvbid0IGFwcGVhciBpbiBt YXAuZGF0LgotICovCi1zdGF0aWMgdm9pZAotY2hlY2tfZm9yX2ludmFsaWRfZ2xvYmFsX25h bWVzKFBHY29ubiAqY29ubiwKLQkJCQkJCQkgICBTaW1wbGVTdHJpbmdMaXN0ICpleGNsdWRl ZF9uYW1lcykKLXsKLQlQR3Jlc3VsdCAgICpyZXM7Ci0JaW50CQkJaTsKLQlQUUV4cEJ1ZmZl ciBuYW1lczsKLQlpbnQJCQljb3VudCA9IDA7Ci0KLQlyZXMgPSBleGVjdXRlUXVlcnkoY29u biwKLQkJCQkJICAgIlNFTEVDVCBkYXRuYW1lIEFTIG9iam5hbWUsICdkYXRhYmFzZScgQVMg b2JqdHlwZSAiCi0JCQkJCSAgICJGUk9NIHBnX2NhdGFsb2cucGdfZGF0YWJhc2UgIgotCQkJ CQkgICAiV0hFUkUgZGF0YWxsb3djb25uIEFORCBkYXRjb25ubGltaXQgIT0gLTIgIgotCQkJ CQkgICAiVU5JT04gQUxMICIKLQkJCQkJICAgIlNFTEVDVCByb2xuYW1lIEFTIG9iam5hbWUs ICdyb2xlJyBBUyBvYmp0eXBlICIKLQkJCQkJICAgIkZST00gcGdfY2F0YWxvZy5wZ19yb2xl cyAiCi0JCQkJCSAgICJVTklPTiBBTEwgIgotCQkJCQkgICAiU0VMRUNUIHNwY25hbWUgQVMg b2JqbmFtZSwgJ3RhYmxlc3BhY2UnIEFTIG9ianR5cGUgIgotCQkJCQkgICAiRlJPTSBwZ19j YXRhbG9nLnBnX3RhYmxlc3BhY2UiKTsKLQotCW5hbWVzID0gY3JlYXRlUFFFeHBCdWZmZXIo KTsKLQotCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQotCXsKLQkJY2hh cgkgICAqb2JqbmFtZSA9IFBRZ2V0dmFsdWUocmVzLCBpLCAwKTsKLQkJY2hhcgkgICAqb2Jq dHlwZSA9IFBRZ2V0dmFsdWUocmVzLCBpLCAxKTsKLQotCQkvKiBTa2lwIGV4Y2x1ZGVkIGRh dGFiYXNlcyBzaW5jZSB0aGV5IHdvbid0IGJlIGluIG1hcC5kYXQgKi8KLQkJaWYgKHN0cmNt cChvYmp0eXBlLCAiZGF0YWJhc2UiKSA9PSAwICYmCi0JCQlzaW1wbGVfc3RyaW5nX2xpc3Rf bWVtYmVyKGV4Y2x1ZGVkX25hbWVzLCBvYmpuYW1lKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlm IChzdHJwYnJrKG9iam5hbWUsICJcblxyIikpCi0JCXsKLQkJCWFwcGVuZFBRRXhwQnVmZmVy KG5hbWVzLCAiICAlczogXCIiLCBvYmp0eXBlKTsKLQkJCWZvciAoY2hhciAqcCA9IG9iam5h bWU7ICpwOyBwKyspCi0JCQl7Ci0JCQkJaWYgKCpwID09ICdcbicpCi0JCQkJCWFwcGVuZFBR RXhwQnVmZmVyU3RyKG5hbWVzLCAiXFxuIik7Ci0JCQkJZWxzZSBpZiAoKnAgPT0gJ1xyJykK LQkJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIobmFtZXMsICJcXHIiKTsKLQkJCQllbHNlCi0J CQkJCWFwcGVuZFBRRXhwQnVmZmVyQ2hhcihuYW1lcywgKnApOwotCQkJfQotCQkJYXBwZW5k UFFFeHBCdWZmZXJTdHIobmFtZXMsICJcIlxuIik7Ci0JCQljb3VudCsrOwotCQl9Ci0JfQot Ci0JUFFjbGVhcihyZXMpOwotCi0JaWYgKGNvdW50ID4gMCkKLQkJcGdfZmF0YWwoImRhdGFi YXNlLCByb2xlLCBvciB0YWJsZXNwYWNlIG5hbWVzIGNvbnRhaW4gYSBuZXdsaW5lIG9yIGNh cnJpYWdlIHJldHVybiBjaGFyYWN0ZXIsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gbm9u LXBsYWluLXRleHQgZHVtcHM6XG4lcyIsCi0JCQkJIG5hbWVzLT5kYXRhKTsKLQotCWRlc3Ry b3lQUUV4cEJ1ZmZlcihuYW1lcyk7Ci19Ci0KLQogLyoKICAqIGR1bXBUaW1lc3RhbXAKICAq LwpAQCAtMjM5Nyw0NSArMTg5MCwzIEBAIHJlYWRfZHVtcGFsbF9maWx0ZXJzKGNvbnN0IGNo YXIgKmZpbGVuYW1lLCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJuKQogCiAJZmlsdGVyX2Zy ZWUoJmZzdGF0ZSk7CiB9Ci0KLS8qCi0gKiBwYXJzZUR1bXBGb3JtYXQKLSAqCi0gKiBUaGlz IHdpbGwgdmFsaWRhdGUgZHVtcCBmb3JtYXRzLgotICovCi1zdGF0aWMgQXJjaGl2ZUZvcm1h dAotcGFyc2VEdW1wRm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1hdCkKLXsKLQlpZiAocGdfc3Ry Y2FzZWNtcChmb3JtYXQsICJjIikgPT0gMCkKLQkJcmV0dXJuIGFyY2hDdXN0b207Ci0JZWxz ZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJjdXN0b20iKSA9PSAwKQotCQlyZXR1cm4g YXJjaEN1c3RvbTsKLQllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgImQiKSA9PSAw KQotCQlyZXR1cm4gYXJjaERpcmVjdG9yeTsKLQllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZv cm1hdCwgImRpcmVjdG9yeSIpID09IDApCi0JCXJldHVybiBhcmNoRGlyZWN0b3J5OwotCWVs c2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAicCIpID09IDApCi0JCXJldHVybiBhcmNo TnVsbDsKLQllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInBsYWluIikgPT0gMCkK LQkJcmV0dXJuIGFyY2hOdWxsOwotCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAi dCIpID09IDApCi0JCXJldHVybiBhcmNoVGFyOwotCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAo Zm9ybWF0LCAidGFyIikgPT0gMCkKLQkJcmV0dXJuIGFyY2hUYXI7Ci0JZWxzZQotCQlwZ19m YXRhbCgidW5yZWNvZ25pemVkIG91dHB1dCBmb3JtYXQgXCIlc1wiOyBwbGVhc2Ugc3BlY2lm eSBcImNcIiwgXCJkXCIsIFwicFwiLCBvciBcInRcIiIsCi0JCQkJIGZvcm1hdCk7Ci0KLQly ZXR1cm4gYXJjaFVua25vd247Ci19Ci0KLS8qCi0gKiBjcmVhdGVEdW1wSWQKLSAqCi0gKiBS ZXR1cm4gdGhlIG5leHQgZHVtcElkLgotICovCi1zdGF0aWMgaW50Ci1jcmVhdGVEdW1wSWQo dm9pZCkKLXsKLQlyZXR1cm4gKytkdW1wSWRWYWw7Ci19CmRpZmYgLS1naXQgYS9zcmMvYmlu L3BnX2R1bXAvcGdfcmVzdG9yZS5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYwpp bmRleCA0OGZkY2IwZmFlMS4uODRiOGQ0MTBjOWUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdf ZHVtcC9wZ19yZXN0b3JlLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYwpA QCAtMiw3ICsyLDcgQEAKICAqCiAgKiBwZ19yZXN0b3JlLmMKICAqCXBnX3Jlc3RvcmUgaXMg YW4gdXRpbGl0eSBleHRyYWN0aW5nIHBvc3RncmVzIGRhdGFiYXNlIGRlZmluaXRpb25zCi0g Kglmcm9tIGEgYmFja3VwIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wL3BnX2R1bXBhbGwg dXNpbmcgdGhlIGFyY2hpdmVyCisgKglmcm9tIGEgYmFja3VwIGFyY2hpdmUgY3JlYXRlZCBi eSBwZ19kdW1wIHVzaW5nIHRoZSBhcmNoaXZlcgogICoJaW50ZXJmYWNlLgogICoKICAqCXBn X3Jlc3RvcmUgd2lsbCByZWFkIHRoZSBiYWNrdXAgYXJjaGl2ZSBhbmQKQEAgLTQxLDE2ICs0 MSwxMiBAQAogI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCiAKICNpbmNsdWRlIDxjdHlwZS5o PgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaWZkZWYgSEFWRV9URVJNSU9TX0gKICNpbmNs dWRlIDx0ZXJtaW9zLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgImNvbW1vbi9zdHJpbmcuaCIK LSNpbmNsdWRlICJjb25uZWN0ZGIuaCIKICNpbmNsdWRlICJkdW1wdXRpbHMuaCIKICNpbmNs dWRlICJmZV91dGlscy9vcHRpb25fdXRpbHMuaCIKLSNpbmNsdWRlICJmZV91dGlscy9zdHJp bmdfdXRpbHMuaCIKICNpbmNsdWRlICJmaWx0ZXIuaCIKICNpbmNsdWRlICJnZXRvcHRfbG9u Zy5oIgogI2luY2x1ZGUgInBhcmFsbGVsLmgiCkBAIC01OCw0MSArNTQsMTggQEAKIAogc3Rh dGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpOwogc3RhdGljIHZvaWQgcmVh ZF9yZXN0b3JlX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFJlc3RvcmVPcHRpb25z ICpvcHRzKTsKLXN0YXRpYyBib29sIGZpbGVfZXhpc3RzX2luX2RpcmVjdG9yeShjb25zdCBj aGFyICpkaXIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKLXN0YXRpYyBpbnQJcmVzdG9yZV9v bmVfZGF0YWJhc2UoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywgUmVzdG9yZU9wdGlvbnMg Km9wdHMsCi0JCQkJCQkJCSBpbnQgbnVtV29ya2VycywgYm9vbCBhcHBlbmRfZGF0YSk7Ci1z dGF0aWMgaW50CXJlc3RvcmVfZ2xvYmFsX29iamVjdHMoY29uc3QgY2hhciAqaW5wdXRGaWxl U3BlYywgUmVzdG9yZU9wdGlvbnMgKm9wdHMpOwotCi1zdGF0aWMgaW50CXJlc3RvcmVfYWxs X2RhdGFiYXNlcyhjb25zdCBjaGFyICppbnB1dEZpbGVTcGVjLAotCQkJCQkJCQkgIFNpbXBs ZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucywgUmVzdG9yZU9wdGlvbnMgKm9wdHMs IGludCBudW1Xb3JrZXJzKTsKLXN0YXRpYyBpbnQJZ2V0X2RibmFtZXNfbGlzdF90b19yZXN0 b3JlKFBHY29ubiAqY29ubiwKLQkJCQkJCQkJCQlTaW1wbGVQdHJMaXN0ICpkYm5hbWVfb2lk X2xpc3QsCi0JCQkJCQkJCQkJU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5z KTsKLXN0YXRpYyBpbnQJZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlKGNvbnN0IGNo YXIgKmR1bXBkaXJwYXRoLAotCQkJCQkJCQkJCSAgIFNpbXBsZVB0ckxpc3QgKmRibmFtZV9v aWRfbGlzdCk7Ci0KLS8qCi0gKiBTdG9yZXMgYSBkYXRhYmFzZSBPSUQgYW5kIHRoZSBjb3Jy ZXNwb25kaW5nIG5hbWUuCi0gKi8KLXR5cGVkZWYgc3RydWN0IERiT2lkTmFtZQotewotCU9p ZAkJCW9pZDsKLQljaGFyCQlzdHJbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsgLyogbnVsbC10 ZXJtaW5hdGVkIHN0cmluZyBoZXJlICovCi19IERiT2lkTmFtZTsKLQogCiBpbnQKIG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogCVJlc3RvcmVPcHRpb25zICpvcHRzOwogCWlu dAkJCWM7CisJaW50CQkJZXhpdF9jb2RlOwogCWludAkJCW51bVdvcmtlcnMgPSAxOworCUFy Y2hpdmUgICAgKkFIOwogCWNoYXIJICAgKmlucHV0RmlsZVNwZWM7CiAJYm9vbAkJZGF0YV9v bmx5ID0gZmFsc2U7CiAJYm9vbAkJc2NoZW1hX29ubHkgPSBmYWxzZTsKLQlpbnQJCQluX2Vy cm9ycyA9IDA7Ci0JYm9vbAkJZ2xvYmFsc19vbmx5ID0gZmFsc2U7Ci0JU2ltcGxlU3RyaW5n TGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zID0ge05VTEwsIE5VTEx9OwogCXN0YXRpYyBpbnQJ ZGlzYWJsZV90cmlnZ2VycyA9IDA7CiAJc3RhdGljIGludAllbmFibGVfcm93X3NlY3VyaXR5 ID0gMDsKIAlzdGF0aWMgaW50CWlmX2V4aXN0cyA9IDA7CkBAIC0xMDcsNyArODAsNiBAQCBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlzdGF0aWMgaW50CW5vX3NjaGVtYSA9IDA7 CiAJc3RhdGljIGludAlub19zZWN1cml0eV9sYWJlbHMgPSAwOwogCXN0YXRpYyBpbnQJbm9f c3RhdGlzdGljcyA9IDA7Ci0Jc3RhdGljIGludAlub19nbG9iYWxzID0gMDsKIAlzdGF0aWMg aW50CW5vX3N1YnNjcmlwdGlvbnMgPSAwOwogCXN0YXRpYyBpbnQJc3RyaWN0X25hbWVzID0g MDsKIAlzdGF0aWMgaW50CXN0YXRpc3RpY3Nfb25seSA9IDA7CkBAIC0xMTcsNyArODksNiBA QCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJeyJjbGVhbiIsIDAsIE5VTEwsICdj J30sCiAJCXsiY3JlYXRlIiwgMCwgTlVMTCwgJ0MnfSwKIAkJeyJkYXRhLW9ubHkiLCAwLCBO VUxMLCAnYSd9LAotCQl7Imdsb2JhbHMtb25seSIsIDAsIE5VTEwsICdnJ30sCiAJCXsiZGJu YW1lIiwgMSwgTlVMTCwgJ2QnfSwKIAkJeyJleGl0LW9uLWVycm9yIiwgMCwgTlVMTCwgJ2Un fSwKIAkJeyJleGNsdWRlLXNjaGVtYSIsIDEsIE5VTEwsICdOJ30sCkBAIC0xNjUsMTQgKzEz NiwxMiBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJeyJuby1wdWJsaWNhdGlv bnMiLCBub19hcmd1bWVudCwgJm5vX3B1YmxpY2F0aW9ucywgMX0sCiAJCXsibm8tc2NoZW1h Iiwgbm9fYXJndW1lbnQsICZub19zY2hlbWEsIDF9LAogCQl7Im5vLXNlY3VyaXR5LWxhYmVs cyIsIG5vX2FyZ3VtZW50LCAmbm9fc2VjdXJpdHlfbGFiZWxzLCAxfSwKLQkJeyJuby1nbG9i YWxzIiwgbm9fYXJndW1lbnQsICZub19nbG9iYWxzLCAxfSwKIAkJeyJuby1zdWJzY3JpcHRp b25zIiwgbm9fYXJndW1lbnQsICZub19zdWJzY3JpcHRpb25zLCAxfSwKIAkJeyJuby1zdGF0 aXN0aWNzIiwgbm9fYXJndW1lbnQsICZub19zdGF0aXN0aWNzLCAxfSwKIAkJeyJzdGF0aXN0 aWNzIiwgbm9fYXJndW1lbnQsICZ3aXRoX3N0YXRpc3RpY3MsIDF9LAogCQl7InN0YXRpc3Rp Y3Mtb25seSIsIG5vX2FyZ3VtZW50LCAmc3RhdGlzdGljc19vbmx5LCAxfSwKIAkJeyJmaWx0 ZXIiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNH0sCiAJCXsicmVzdHJpY3Qta2V5Iiwg cmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDZ9LAotCQl7ImV4Y2x1ZGUtZGF0YWJhc2UiLCBy ZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgN30sCiAKIAkJe05VTEwsIDAsIE5VTEwsIDB9CiAJ fTsKQEAgLTIwMSw3ICsxNzAsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJ fQogCX0KIAotCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY0NkOmVm OkY6Z2g6STpqOmxMOm46TjpPcDpQOlJzUzp0OlQ6VTp2d1d4MSIsCisJd2hpbGUgKChjID0g Z2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjQ2Q6ZWY6RjpoOkk6ajpsTDpuOk46T3A6UDpS c1M6dDpUOlU6dndXeDEiLAogCQkJCQkJCWNtZG9wdHMsIE5VTEwpKSAhPSAtMSkKIAl7CiAJ CXN3aXRjaCAoYykKQEAgLTIyNSwxNSArMTk0LDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQogCQkJCW9wdHMtPmZpbGVuYW1lID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJ YnJlYWs7CiAJCQljYXNlICdGJzoKLQkJCQlvcHRzLT5mb3JtYXROYW1lID0gcGdfc3RyZHVw KG9wdGFyZyk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICdnJzoKLQkJCQkvKiByZXN0b3JlIG9u bHkgZ2xvYmFsIHNxbCBjb21tYW5kcy4gKi8KLQkJCQlnbG9iYWxzX29ubHkgPSB0cnVlOwor CQkJCWlmIChzdHJsZW4ob3B0YXJnKSAhPSAwKQorCQkJCQlvcHRzLT5mb3JtYXROYW1lID0g cGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7CiAJCQljYXNlICdoJzoKLQkJCQlvcHRz LT5jcGFyYW1zLnBnaG9zdCA9IHBnX3N0cmR1cChvcHRhcmcpOworCQkJCWlmIChzdHJsZW4o b3B0YXJnKSAhPSAwKQorCQkJCQlvcHRzLT5jcGFyYW1zLnBnaG9zdCA9IHBnX3N0cmR1cChv cHRhcmcpOwogCQkJCWJyZWFrOworCiAJCQljYXNlICdqJzoJCQkvKiBudW1iZXIgb2YgcmVz dG9yZSBqb2JzICovCiAJCQkJaWYgKCFvcHRpb25fcGFyc2VfaW50KG9wdGFyZywgIi1qLy0t am9icyIsIDEsCiAJCQkJCQkJCQkgIFBHX01BWF9KT0JTLApAQCAtMjYyLDcgKzIzMCw4IEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCWJyZWFrOwogCiAJCQljYXNlICdw JzoKLQkJCQlvcHRzLT5jcGFyYW1zLnBncG9ydCA9IHBnX3N0cmR1cChvcHRhcmcpOworCQkJ CWlmIChzdHJsZW4ob3B0YXJnKSAhPSAwKQorCQkJCQlvcHRzLT5jcGFyYW1zLnBncG9ydCA9 IHBnX3N0cmR1cChvcHRhcmcpOwogCQkJCWJyZWFrOwogCQkJY2FzZSAnUic6CiAJCQkJLyog bm8tb3AsIHN0aWxsIGFjY2VwdGVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLwpA QCAtMzUyLDEwICszMjEsNiBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQlv cHRzLT5yZXN0cmljdF9rZXkgPSBwZ19zdHJkdXAob3B0YXJnKTsKIAkJCQlicmVhazsKIAot CQkJY2FzZSA3OgkJCQkvKiBkYXRhYmFzZSBwYXR0ZXJucyB0byBza2lwICovCi0JCQkJc2lt cGxlX3N0cmluZ19saXN0X2FwcGVuZCgmZGJfZXhjbHVkZV9wYXR0ZXJucywgb3B0YXJnKTsK LQkJCQlicmVhazsKLQogCQkJZGVmYXVsdDoKIAkJCQkvKiBnZXRvcHRfbG9uZyBhbHJlYWR5 IGVtaXR0ZWQgYSBjb21wbGFpbnQgKi8KIAkJCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwi JXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOwpAQCAtMzgy LDIwICszNDcsMjMgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJaWYgKCFvcHRz LT5jcGFyYW1zLmRibmFtZSAmJiAhb3B0cy0+ZmlsZW5hbWUgJiYgIW9wdHMtPnRvY1N1bW1h cnkpCiAJCXBnX2ZhdGFsKCJvbmUgb2YgLWQvLS1kYm5hbWUgYW5kIC1mLy0tZmlsZSBtdXN0 IGJlIHNwZWNpZmllZCIpOwogCi0JLyogLS1leGNsdWRlLWRhdGFiYXNlIGFuZCAtLWdsb2Jh bHMtb25seSBhcmUgaW5jb21wYXRpYmxlICovCi0JY2hlY2tfbXV0X2V4Y2xfb3B0cyhkYl9l eGNsdWRlX3BhdHRlcm5zLmhlYWQsICItLWV4Y2x1ZGUtZGF0YWJhc2UiLAotCQkJCQkJZ2xv YmFsc19vbmx5LCAiLWcvLS1nbG9iYWxzLW9ubHkiKTsKLQogCS8qIFNob3VsZCBnZXQgYXQg bW9zdCBvbmUgb2YgLWQgYW5kIC1mLCBlbHNlIHVzZXIgaXMgY29uZnVzZWQgKi8KLQljaGVj a19tdXRfZXhjbF9vcHRzKG9wdHMtPmNwYXJhbXMuZGJuYW1lLCAiLWQvLS1kYm5hbWUiLAot CQkJCQkJb3B0cy0+ZmlsZW5hbWUsICItZi8tLWZpbGUiKTsKLQotCS8qIC0tZGJuYW1lIGFu ZCAtLXJlc3RyaWN0LWtleSBhcmUgaW5jb21wYXRpYmxlICovCi0JY2hlY2tfbXV0X2V4Y2xf b3B0cyhvcHRzLT5jcGFyYW1zLmRibmFtZSwgIi1kLy0tZGJuYW1lIiwKLQkJCQkJCW9wdHMt PnJlc3RyaWN0X2tleSwgIi0tcmVzdHJpY3Qta2V5Iik7Ci0KIAlpZiAob3B0cy0+Y3BhcmFt cy5kYm5hbWUpCisJeworCQlpZiAob3B0cy0+ZmlsZW5hbWUpCisJCXsKKwkJCXBnX2xvZ19l cnJvcigib3B0aW9ucyAlcyBhbmQgJXMgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiLAorCQkJ CQkJICItZC8tLWRibmFtZSIsICItZi8tLWZpbGUiKTsKKwkJCXBnX2xvZ19lcnJvcl9oaW50 KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7 CisJCQlleGl0X25pY2VseSgxKTsKKwkJfQorCisJCWlmIChvcHRzLT5yZXN0cmljdF9rZXkp CisJCQlwZ19mYXRhbCgib3B0aW9ucyAlcyBhbmQgJXMgY2Fubm90IGJlIHVzZWQgdG9nZXRo ZXIiLAorCQkJCQkgIi1kLy0tZGJuYW1lIiwgIi0tcmVzdHJpY3Qta2V5Iik7CisKIAkJb3B0 cy0+dXNlREIgPSAxOworCX0KIAllbHNlCiAJewogCQkvKgpAQCAtNDA5LDU0ICszNzcsNTYg QEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQlwZ19mYXRhbCgiaW52YWxpZCBy ZXN0cmljdCBrZXkiKTsKIAl9CiAKLQkvKiAqLW9ubHkgb3B0aW9ucyBhcmUgaW5jb21wYXRp YmxlIHdpdGggZWFjaCBvdGhlciAqLwotCWNoZWNrX211dF9leGNsX29wdHMoZGF0YV9vbmx5 LCAiLWEvLS1kYXRhLW9ubHkiLAotCQkJCQkJZ2xvYmFsc19vbmx5LCAiLWcvLS1nbG9iYWxz LW9ubHkiLAotCQkJCQkJc2NoZW1hX29ubHksICItcy8tLXNjaGVtYS1vbmx5IiwKLQkJCQkJ CXN0YXRpc3RpY3Nfb25seSwgIi0tc3RhdGlzdGljcy1vbmx5Iik7CisJLyogcmVqZWN0IGNv bmZsaWN0aW5nICItb25seSIgb3B0aW9ucyAqLworCWlmIChkYXRhX29ubHkgJiYgc2NoZW1h X29ubHkpCisJCXBnX2ZhdGFsKCJvcHRpb25zICVzIGFuZCAlcyBjYW5ub3QgYmUgdXNlZCB0 b2dldGhlciIsCisJCQkJICItcy8tLXNjaGVtYS1vbmx5IiwgIi1hLy0tZGF0YS1vbmx5Iik7 CisJaWYgKHNjaGVtYV9vbmx5ICYmIHN0YXRpc3RpY3Nfb25seSkKKwkJcGdfZmF0YWwoIm9w dGlvbnMgJXMgYW5kICVzIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIiwKKwkJCQkgIi1zLy0t c2NoZW1hLW9ubHkiLCAiLS1zdGF0aXN0aWNzLW9ubHkiKTsKKwlpZiAoZGF0YV9vbmx5ICYm IHN0YXRpc3RpY3Nfb25seSkKKwkJcGdfZmF0YWwoIm9wdGlvbnMgJXMgYW5kICVzIGNhbm5v dCBiZSB1c2VkIHRvZ2V0aGVyIiwKKwkJCQkgIi1hLy0tZGF0YS1vbmx5IiwgIi0tc3RhdGlz dGljcy1vbmx5Iik7CiAKLQkvKiAtLW5vLSogYW5kICotb25seSBmb3Igc2FtZSB0aGluZyBh cmUgaW5jb21wYXRpYmxlICovCi0JY2hlY2tfbXV0X2V4Y2xfb3B0cyhkYXRhX29ubHksICIt YS8tLWRhdGEtb25seSIsCi0JCQkJCQlub19kYXRhLCAiLS1uby1kYXRhIik7Ci0JY2hlY2tf bXV0X2V4Y2xfb3B0cyhnbG9iYWxzX29ubHksICItZy8tLWdsb2JhbHMtb25seSIsCi0JCQkJ CQlub19nbG9iYWxzLCAiLS1uby1nbG9iYWxzIik7Ci0JY2hlY2tfbXV0X2V4Y2xfb3B0cyhz Y2hlbWFfb25seSwgIi1zLy0tc2NoZW1hLW9ubHkiLAotCQkJCQkJbm9fc2NoZW1hLCAiLS1u by1zY2hlbWEiKTsKLQljaGVja19tdXRfZXhjbF9vcHRzKHN0YXRpc3RpY3Nfb25seSwgIi0t c3RhdGlzdGljcy1vbmx5IiwKLQkJCQkJCW5vX3N0YXRpc3RpY3MsICItLW5vLXN0YXRpc3Rp Y3MiKTsKKwkvKiByZWplY3QgY29uZmxpY3RpbmcgIi1vbmx5IiBhbmQgIm5vLSIgb3B0aW9u cyAqLworCWlmIChkYXRhX29ubHkgJiYgbm9fZGF0YSkKKwkJcGdfZmF0YWwoIm9wdGlvbnMg JXMgYW5kICVzIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIiwKKwkJCQkgIi1hLy0tZGF0YS1v bmx5IiwgIi0tbm8tZGF0YSIpOworCWlmIChzY2hlbWFfb25seSAmJiBub19zY2hlbWEpCisJ CXBnX2ZhdGFsKCJvcHRpb25zICVzIGFuZCAlcyBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIs CisJCQkJICItcy8tLXNjaGVtYS1vbmx5IiwgIi0tbm8tc2NoZW1hIik7CisJaWYgKHN0YXRp c3RpY3Nfb25seSAmJiBub19zdGF0aXN0aWNzKQorCQlwZ19mYXRhbCgib3B0aW9ucyAlcyBh bmQgJXMgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiLAorCQkJCSAiLS1zdGF0aXN0aWNzLW9u bHkiLCAiLS1uby1zdGF0aXN0aWNzIik7CiAKLQkvKiAtLXN0YXRpc3RpY3MgYW5kIC0tbm8t c3RhdGlzdGljcyBhcmUgaW5jb21wYXRpYmxlICovCi0JY2hlY2tfbXV0X2V4Y2xfb3B0cyh3 aXRoX3N0YXRpc3RpY3MsICItLXN0YXRpc3RpY3MiLAotCQkJCQkJbm9fc3RhdGlzdGljcywg Ii0tbm8tc3RhdGlzdGljcyIpOworCS8qIHJlamVjdCBjb25mbGljdGluZyAibm8tIiBvcHRp b25zICovCisJaWYgKHdpdGhfc3RhdGlzdGljcyAmJiBub19zdGF0aXN0aWNzKQorCQlwZ19m YXRhbCgib3B0aW9ucyAlcyBhbmQgJXMgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiLAorCQkJ CSAiLS1zdGF0aXN0aWNzIiwgIi0tbm8tc3RhdGlzdGljcyIpOwogCi0JLyogLS1zdGF0aXN0 aWNzIGlzIGluY29tcGF0aWJsZSB3aXRoICotb25seSAoZXhjZXB0IC0tc3RhdGlzdGljcy1v bmx5KSAqLwotCWNoZWNrX211dF9leGNsX29wdHMod2l0aF9zdGF0aXN0aWNzLCAiLS1zdGF0 aXN0aWNzIiwKLQkJCQkJCWRhdGFfb25seSwgIi1hLy0tZGF0YS1vbmx5IiwKLQkJCQkJCWds b2JhbHNfb25seSwgIi1nLy0tZ2xvYmFscy1vbmx5IiwKLQkJCQkJCXNjaGVtYV9vbmx5LCAi LXMvLS1zY2hlbWEtb25seSIpOworCS8qIHJlamVjdCBjb25mbGljdGluZyAib25seS0iIG9w dGlvbnMgKi8KKwlpZiAoZGF0YV9vbmx5ICYmIHdpdGhfc3RhdGlzdGljcykKKwkJcGdfZmF0 YWwoIm9wdGlvbnMgJXMgYW5kICVzIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIiwKKwkJCQkg Ii1hLy0tZGF0YS1vbmx5IiwgIi0tc3RhdGlzdGljcyIpOworCWlmIChzY2hlbWFfb25seSAm JiB3aXRoX3N0YXRpc3RpY3MpCisJCXBnX2ZhdGFsKCJvcHRpb25zICVzIGFuZCAlcyBjYW5u b3QgYmUgdXNlZCB0b2dldGhlciIsCisJCQkJICItcy8tLXNjaGVtYS1vbmx5IiwgIi0tc3Rh dGlzdGljcyIpOwogCi0JLyogLS1jbGVhbiBhbmQgLS1kYXRhLW9ubHkgYXJlIGluY29tcGF0 aWJsZSAqLwotCWNoZWNrX211dF9leGNsX29wdHMob3B0cy0+ZHJvcFNjaGVtYSwgIi1jLy0t Y2xlYW4iLAotCQkJCQkJZGF0YV9vbmx5LCAiLWEvLS1kYXRhLW9ubHkiKTsKKwlpZiAoZGF0 YV9vbmx5ICYmIG9wdHMtPmRyb3BTY2hlbWEpCisJCXBnX2ZhdGFsKCJvcHRpb25zICVzIGFu ZCAlcyBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIsCisJCQkJICItYy8tLWNsZWFuIiwgIi1h Ly0tZGF0YS1vbmx5Iik7CiAKLQkvKgotCSAqIC0tZ2xvYmFscy1vbmx5LCAtLXNpbmdsZS10 cmFuc2FjdGlvbiwgYW5kIC0tdHJhbnNhY3Rpb24tc2l6ZSBhcmUKLQkgKiBpbmNvbXBhdGli bGUuCi0JICovCi0JY2hlY2tfbXV0X2V4Y2xfb3B0cyhnbG9iYWxzX29ubHksICItZy8tLWds b2JhbHMtb25seSIsCi0JCQkJCQlvcHRzLT5zaW5nbGVfdHhuLCAiLTEvLS1zaW5nbGUtdHJh bnNhY3Rpb24iLAotCQkJCQkJb3B0cy0+dHhuX3NpemUsICItLXRyYW5zYWN0aW9uLXNpemUi KTsKLQotCS8qIC0tZXhpdC1vbi1lcnJvciBhbmQgLS1nbG9iYWxzLW9ubHkgYXJlIGluY29t cGF0aWJsZSAqLwotCWNoZWNrX211dF9leGNsX29wdHMob3B0cy0+ZXhpdF9vbl9lcnJvciwg Ii0tZXhpdC1vbi1lcnJvciIsCi0JCQkJCQlnbG9iYWxzX29ubHksICItZy8tLWdsb2JhbHMt b25seSIpOworCWlmIChvcHRzLT5zaW5nbGVfdHhuICYmIG9wdHMtPnR4bl9zaXplID4gMCkK KwkJcGdfZmF0YWwoIm9wdGlvbnMgJXMgYW5kICVzIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVy IiwKKwkJCQkgIi0xLy0tc2luZ2xlLXRyYW5zYWN0aW9uIiwgIi0tdHJhbnNhY3Rpb24tc2l6 ZSIpOwogCiAJLyoKIAkgKiAtQyBpcyBub3QgY29tcGF0aWJsZSB3aXRoIC0xLCBiZWNhdXNl IHdlIGNhbid0IGNyZWF0ZSBhIGRhdGFiYXNlIGluc2lkZQogCSAqIGEgdHJhbnNhY3Rpb24g YmxvY2suCiAJICovCi0JY2hlY2tfbXV0X2V4Y2xfb3B0cyhvcHRzLT5jcmVhdGVEQiwgIi1D Ly0tY3JlYXRlIiwKLQkJCQkJCW9wdHMtPnNpbmdsZV90eG4sICItMS8tLXNpbmdsZS10cmFu c2FjdGlvbiIpOworCWlmIChvcHRzLT5jcmVhdGVEQiAmJiBvcHRzLT5zaW5nbGVfdHhuKQor CQlwZ19mYXRhbCgib3B0aW9ucyAlcyBhbmQgJXMgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIi LAorCQkJCSAiLUMvLS1jcmVhdGUiLCAiLTEvLS1zaW5nbGUtdHJhbnNhY3Rpb24iKTsKIAog CS8qIENhbid0IGRvIHNpbmdsZS10eG4gbW9kZSB3aXRoIG11bHRpcGxlIGNvbm5lY3Rpb25z ICovCiAJaWYgKG9wdHMtPnNpbmdsZV90eG4gJiYgbnVtV29ya2VycyA+IDEpCkBAIC01MTUs MTg3ICs0ODUsNiBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQkJIG9wdHMt PmZvcm1hdE5hbWUpOwogCX0KIAotCS8qCi0JICogSWYgdG9jLmdsbyBmaWxlIGlzIHByZXNl bnQsIHRoZW4gcmVzdG9yZSBhbGwgdGhlIGRhdGFiYXNlcyBmcm9tCi0JICogbWFwLmRhdCwg YnV0IHNraXAgcmVzdG9yaW5nIHRob3NlIG1hdGNoaW5nIC0tZXhjbHVkZS1kYXRhYmFzZSBw YXR0ZXJucy4KLQkgKi8KLQlpZiAoaW5wdXRGaWxlU3BlYyAhPSBOVUxMICYmCi0JCShmaWxl X2V4aXN0c19pbl9kaXJlY3RvcnkoaW5wdXRGaWxlU3BlYywgInRvYy5nbG8iKSkpCi0Jewot CQljaGFyCQlnbG9iYWxfcGF0aFtNQVhQR1BBVEhdOwotCQlSZXN0b3JlT3B0aW9ucyAqdG1w b3B0cyA9IHBnX21hbGxvYzBfb2JqZWN0KFJlc3RvcmVPcHRpb25zKTsKLQotCQlvcHRzLT5m b3JtYXQgPSBhcmNoVW5rbm93bjsKLQotCQltZW1jcHkodG1wb3B0cywgb3B0cywgc2l6ZW9m KFJlc3RvcmVPcHRpb25zKSk7Ci0KLQkJLyoKLQkJICogQ2FuIG9ubHkgdXNlIC0tbGlzdCBv ciAtLXVzZS1saXN0IG9wdGlvbnMgd2l0aCBhIHNpbmdsZSBkYXRhYmFzZQotCQkgKiBkdW1w LgotCQkgKi8KLQkJaWYgKG9wdHMtPnRvY1N1bW1hcnkpCi0JCQlwZ19mYXRhbCgib3B0aW9u ICVzIGNhbm5vdCBiZSB1c2VkIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBi eSBwZ19kdW1wYWxsIiwKLQkJCQkJICItbC8tLWxpc3QiKTsKLQkJaWYgKG9wdHMtPnRvY0Zp bGUpCi0JCQlwZ19mYXRhbCgib3B0aW9uICVzIGNhbm5vdCBiZSB1c2VkIHdoZW4gcmVzdG9y aW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsIiwKLQkJCQkJICItTC8tLXVz ZS1saXN0Iik7Ci0KLQkJaWYgKG9wdHMtPnN0cmljdF9uYW1lcykKLQkJCXBnX2ZhdGFsKCJv cHRpb24gJXMgY2Fubm90IGJlIHVzZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVh dGVkIGJ5IHBnX2R1bXBhbGwiLAotCQkJCQkgIi0tc3RyaWN0LW5hbWVzIik7Ci0JCWlmIChn bG9iYWxzX29ubHkgJiYgb3B0cy0+ZHJvcFNjaGVtYSkKLQkJCXBnX2ZhdGFsKCJvcHRpb25z ICVzIGFuZCAlcyBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aGVuIHJlc3RvcmluZyBhbiBh cmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbCIsCi0JCQkJCSAiLS1jbGVhbiIsICItZy8t LWdsb2JhbHMtb25seSIpOwotCi0JCS8qCi0JCSAqIEZvciBwZ19kdW1wYWxsIGFyY2hpdmVz LCAtLWNsZWFuIGltcGxpZXMgLS1pZi1leGlzdHMgc2luY2UgZ2xvYmFsCi0JCSAqIG9iamVj dHMgbWF5IG5vdCBleGlzdCBpbiB0aGUgdGFyZ2V0IGNsdXN0ZXIuCi0JCSAqLwotCQlpZiAo b3B0cy0+ZHJvcFNjaGVtYSAmJiAhb3B0cy0+aWZfZXhpc3RzKQotCQl7Ci0JCQlvcHRzLT5p Zl9leGlzdHMgPSAxOwotCQkJcGdfbG9nX2luZm8oIi0taWYtZXhpc3RzIGlzIGltcGxpZWQg YnkgLS1jbGVhbiBmb3IgcGdfZHVtcGFsbCBhcmNoaXZlcyIpOwotCQl9Ci0KLQkJaWYgKG5v X3NjaGVtYSkKLQkJCXBnX2ZhdGFsKCJvcHRpb24gJXMgY2Fubm90IGJlIHVzZWQgd2hlbiBy ZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwiLAotCQkJCQkgIi0t bm8tc2NoZW1hIik7Ci0KLQkJaWYgKGRhdGFfb25seSkKLQkJCXBnX2ZhdGFsKCJvcHRpb24g JXMgY2Fubm90IGJlIHVzZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5 IHBnX2R1bXBhbGwiLAotCQkJCQkgIi1hLy0tZGF0YS1vbmx5Iik7Ci0KLQkJaWYgKHN0YXRp c3RpY3Nfb25seSkKLQkJCXBnX2ZhdGFsKCJvcHRpb24gJXMgY2Fubm90IGJlIHVzZWQgd2hl biByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwiLAotCQkJCQkg Ii0tc3RhdGlzdGljcy1vbmx5Iik7Ci0KLQkJaWYgKCEob3B0cy0+ZHVtcFNlY3Rpb25zICYg RFVNUF9QUkVfREFUQSkpCi0JCQlwZ19mYXRhbCgib3B0aW9uICVzIGNhbm5vdCBleGNsdWRl ICVzIHdoZW4gcmVzdG9yaW5nIGEgcGdfZHVtcGFsbCBhcmNoaXZlIiwKLQkJCQkJICItLXNl Y3Rpb24iLCAiLS1wcmUtZGF0YSIpOwotCi0JCS8qCi0JCSAqIFRvIHJlc3RvcmUgZnJvbSBh IHBnX2R1bXBhbGwgYXJjaGl2ZSwgLUMgKGNyZWF0ZSBkYXRhYmFzZSkgb3B0aW9uCi0JCSAq IG11c3QgYmUgc3BlY2lmaWVkIHVubGVzcyB3ZSBhcmUgb25seSByZXN0b3JpbmcgZ2xvYmFs cyBvciB3ZSBhcmUKLQkJICogc2tpcHBpbmcgZ2xvYmFscy4KLQkJICovCi0JCWlmICghbm9f Z2xvYmFscyAmJiAhZ2xvYmFsc19vbmx5ICYmIG9wdHMtPmNyZWF0ZURCICE9IDEpCi0JCXsK LQkJCXBnX2xvZ19lcnJvcigib3B0aW9uICVzIG11c3QgYmUgc3BlY2lmaWVkIHdoZW4gcmVz dG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsIiwKLQkJCQkJCSAiLUMv LS1jcmVhdGUiKTsKLQkJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBm b3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7Ci0JCQlwZ19sb2dfZXJyb3JfaGlu dCgiSW5kaXZpZHVhbCBkYXRhYmFzZXMgY2FuIGJlIHJlc3RvcmVkIHVzaW5nIHRoZWlyIHNw ZWNpZmljIGFyY2hpdmVzLiIpOwotCQkJZXhpdF9uaWNlbHkoMSk7Ci0JCX0KLQotCQkvKgot CQkgKiBSZXN0b3JlIGdsb2JhbCBvYmplY3RzLCBldmVuIGlmIC0tZXhjbHVkZS1kYXRhYmFz ZSByZXN1bHRzIGluIHplcm8KLQkJICogZGF0YWJhc2VzIHRvIHByb2Nlc3MuIElmICdnbG9i YWxzLW9ubHknIGlzIHNldCwgZXhpdCBpbW1lZGlhdGVseS4KLQkJICovCi0JCXNucHJpbnRm KGdsb2JhbF9wYXRoLCBNQVhQR1BBVEgsICIlcy90b2MuZ2xvIiwgaW5wdXRGaWxlU3BlYyk7 Ci0KLQkJaWYgKCFub19nbG9iYWxzKQotCQkJbl9lcnJvcnMgPSByZXN0b3JlX2dsb2JhbF9v YmplY3RzKGdsb2JhbF9wYXRoLCB0bXBvcHRzKTsKLQkJZWxzZQotCQkJcGdfbG9nX2luZm8o InNraXBwaW5nIHJlc3RvcmUgb2YgZ2xvYmFsIG9iamVjdHMgYmVjYXVzZSAlcyB3YXMgc3Bl Y2lmaWVkIiwKLQkJCQkJCSItLW5vLWdsb2JhbHMiKTsKLQotCQlpZiAoZ2xvYmFsc19vbmx5 KQotCQkJcGdfbG9nX2luZm8oImRhdGFiYXNlIHJlc3RvcmluZyBza2lwcGVkIGJlY2F1c2Ug b3B0aW9uICVzIHdhcyBzcGVjaWZpZWQiLAotCQkJCQkJIi1nLy0tZ2xvYmFscy1vbmx5Iik7 Ci0JCWVsc2UKLQkJewotCQkJLyogTm93IHJlc3RvcmUgYWxsIHRoZSBkYXRhYmFzZXMgZnJv bSBtYXAuZGF0ICovCi0JCQluX2Vycm9ycyA9IG5fZXJyb3JzICsgcmVzdG9yZV9hbGxfZGF0 YWJhc2VzKGlucHV0RmlsZVNwZWMsIGRiX2V4Y2x1ZGVfcGF0dGVybnMsCi0JCQkJCQkJCQkJ CQkJCW9wdHMsIG51bVdvcmtlcnMpOwotCQl9Ci0KLQkJLyogRnJlZSBkYiBwYXR0ZXJuIGxp c3QuICovCi0JCXNpbXBsZV9zdHJpbmdfbGlzdF9kZXN0cm95KCZkYl9leGNsdWRlX3BhdHRl cm5zKTsKLQl9Ci0JZWxzZQotCXsKLQkJaWYgKGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZCAh PSBOVUxMKQotCQl7Ci0JCQlzaW1wbGVfc3RyaW5nX2xpc3RfZGVzdHJveSgmZGJfZXhjbHVk ZV9wYXR0ZXJucyk7Ci0JCQlwZ19mYXRhbCgib3B0aW9uICVzIGNhbiBiZSB1c2VkIG9ubHkg d2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwiLAotCQkJ CQkgIi0tZXhjbHVkZS1kYXRhYmFzZSIpOwotCQl9Ci0KLQkJaWYgKGdsb2JhbHNfb25seSkK LQkJCXBnX2ZhdGFsKCJvcHRpb24gJXMgY2FuIGJlIHVzZWQgb25seSB3aGVuIHJlc3Rvcmlu ZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbCIsCi0JCQkJCSAiLWcvLS1nbG9i YWxzLW9ubHkiKTsKLQotCQkvKiBQcm9jZXNzIGlmIHRvYy5nbG8gZmlsZSBkb2VzIG5vdCBl eGlzdC4gKi8KLQkJbl9lcnJvcnMgPSByZXN0b3JlX29uZV9kYXRhYmFzZShpbnB1dEZpbGVT cGVjLCBvcHRzLCBudW1Xb3JrZXJzLCBmYWxzZSk7Ci0JfQotCi0JLyogRG9uZSwgcHJpbnQg YSBzdW1tYXJ5IG9mIGlnbm9yZWQgZXJyb3JzIGR1cmluZyByZXN0b3JlLiAqLwotCWlmIChu X2Vycm9ycykKLQl7Ci0JCXBnX2xvZ193YXJuaW5nKCJlcnJvcnMgaWdub3JlZCBvbiByZXN0 b3JlOiAlZCIsIG5fZXJyb3JzKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19 Ci0KLS8qCi0gKiByZXN0b3JlX2dsb2JhbF9vYmplY3RzCi0gKgotICogVGhpcyByZXN0b3Jl IGFsbCBnbG9iYWwgb2JqZWN0cy4KLSAqLwotc3RhdGljIGludAotcmVzdG9yZV9nbG9iYWxf b2JqZWN0cyhjb25zdCBjaGFyICppbnB1dEZpbGVTcGVjLCBSZXN0b3JlT3B0aW9ucyAqb3B0 cykKLXsKLQlBcmNoaXZlICAgICpBSDsKLQlpbnQJCQluZXJyb3IgPSAwOwotCi0JLyogU2V0 IGZvcm1hdCBhcyBjdXN0b20gc28gdGhhdCB0b2MuZ2xvIGZpbGUgY2FuIGJlIHJlYWQuICov Ci0Jb3B0cy0+Zm9ybWF0ID0gYXJjaEN1c3RvbTsKLQlvcHRzLT50eG5fc2l6ZSA9IDA7Ci0K LQlBSCA9IE9wZW5BcmNoaXZlKGlucHV0RmlsZVNwZWMsIG9wdHMtPmZvcm1hdCk7Ci0KLQlT ZXRBcmNoaXZlT3B0aW9ucyhBSCwgTlVMTCwgb3B0cyk7Ci0KLQlvbl9leGl0X2Nsb3NlX2Fy Y2hpdmUoQUgpOwotCi0JLyogTGV0IHRoZSBhcmNoaXZlciBrbm93IGhvdyBub2lzeSB0byBi ZSAqLwotCUFILT52ZXJib3NlID0gb3B0cy0+dmVyYm9zZTsKLQotCS8qIERvbid0IG91dHB1 dCBUT0MgZW50cnkgY29tbWVudHMgd2hlbiByZXN0b3JpbmcgZ2xvYmFscyAqLwotCSgoQXJj aGl2ZUhhbmRsZSAqKSBBSCktPm5vVG9jQ29tbWVudHMgPSAxOwotCi0JQUgtPmV4aXRfb25f ZXJyb3IgPSBmYWxzZTsKLQotCS8qIFBhcmFsbGVsIGV4ZWN1dGlvbiBpcyBub3Qgc3VwcG9y dGVkIGZvciBnbG9iYWwgb2JqZWN0IHJlc3RvcmF0aW9uLiAqLwotCUFILT5udW1Xb3JrZXJz ID0gMTsKLQotCVByb2Nlc3NBcmNoaXZlUmVzdG9yZU9wdGlvbnMoQUgpOwotCVJlc3RvcmVB cmNoaXZlKEFILCBmYWxzZSk7Ci0KLQluZXJyb3IgPSBBSC0+bl9lcnJvcnM7Ci0KLQkvKiBB SCBtYXkgYmUgZnJlZWQgaW4gQ2xvc2VBcmNoaXZlPyAqLwotCUNsb3NlQXJjaGl2ZShBSCk7 Ci0KLQlyZXR1cm4gbmVycm9yOwotfQotCi0vKgotICogcmVzdG9yZV9vbmVfZGF0YWJhc2UK LSAqCi0gKiBUaGlzIHdpbGwgcmVzdG9yZSBvbmUgZGF0YWJhc2UgdXNpbmcgdG9jLmRhdCBm aWxlLgotICoKLSAqIHJldHVybnMgdGhlIG51bWJlciBvZiBlcnJvcnMgd2hpbGUgZG9pbmcg cmVzdG9yZS4KLSAqLwotc3RhdGljIGludAotcmVzdG9yZV9vbmVfZGF0YWJhc2UoY29uc3Qg Y2hhciAqaW5wdXRGaWxlU3BlYywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsCi0JCQkJCSBpbnQg bnVtV29ya2VycywgYm9vbCBhcHBlbmRfZGF0YSkKLXsKLQlBcmNoaXZlICAgICpBSDsKLQlp bnQJCQluX2Vycm9yczsKLQogCUFIID0gT3BlbkFyY2hpdmUoaW5wdXRGaWxlU3BlYywgb3B0 cy0+Zm9ybWF0KTsKIAogCVNldEFyY2hpdmVPcHRpb25zKEFILCBOVUxMLCBvcHRzKTsKQEAg LTcwMywxNSArNDkyLDkgQEAgcmVzdG9yZV9vbmVfZGF0YWJhc2UoY29uc3QgY2hhciAqaW5w dXRGaWxlU3BlYywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsCiAJLyoKIAkgKiBXZSBkb24ndCBo YXZlIGEgY29ubmVjdGlvbiB5ZXQgYnV0IHRoYXQgZG9lc24ndCBtYXR0ZXIuIFRoZSBjb25u ZWN0aW9uCiAJICogaXMgaW5pdGlhbGl6ZWQgdG8gTlVMTCBhbmQgaWYgd2UgdGVybWluYXRl IHRocm91Z2ggZXhpdF9uaWNlbHkoKSB3aGlsZQotCSAqIGl0J3Mgc3RpbGwgTlVMTCwgdGhl IGNsZWFudXAgZnVuY3Rpb24gd2lsbCBqdXN0IGJlIGEgbm8tb3AuIElmIHdlIGFyZQotCSAq IHJlc3RvcmluZyBtdWx0aXBsZSBkYXRhYmFzZXMsIHRoZW4gb25seSB1cGRhdGUgQUggaGFu ZGxlIGZvciBjbGVhbnVwIGFzCi0JICogdGhlIHByZXZpb3VzIGVudHJ5IHdhcyBhbHJlYWR5 IGluIHRoZSBhcnJheSBhbmQgd2UgaGFkIGNsb3NlZCBwcmV2aW91cwotCSAqIGNvbm5lY3Rp b24sIHNvIHdlIGNhbiB1c2UgdGhlIHNhbWUgYXJyYXkgc2xvdC4KKwkgKiBpdCdzIHN0aWxs IE5VTEwsIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIHdpbGwganVzdCBiZSBhIG5vLW9wLgogCSAq LwotCWlmICghYXBwZW5kX2RhdGEpCi0JCW9uX2V4aXRfY2xvc2VfYXJjaGl2ZShBSCk7Ci0J ZWxzZQotCQlyZXBsYWNlX29uX2V4aXRfY2xvc2VfYXJjaGl2ZShBSCk7CisJb25fZXhpdF9j bG9zZV9hcmNoaXZlKEFIKTsKIAogCS8qIExldCB0aGUgYXJjaGl2ZXIga25vdyBob3cgbm9p c3kgdG8gYmUgKi8KIAlBSC0+dmVyYm9zZSA9IG9wdHMtPnZlcmJvc2U7CkBAIC03MzEsMjEg KzUxNCwyNSBAQCByZXN0b3JlX29uZV9kYXRhYmFzZShjb25zdCBjaGFyICppbnB1dEZpbGVT cGVjLCBSZXN0b3JlT3B0aW9ucyAqb3B0cywKIAllbHNlCiAJewogCQlQcm9jZXNzQXJjaGl2 ZVJlc3RvcmVPcHRpb25zKEFIKTsKLQkJUmVzdG9yZUFyY2hpdmUoQUgsIGFwcGVuZF9kYXRh KTsKKwkJUmVzdG9yZUFyY2hpdmUoQUgpOwogCX0KIAotCW5fZXJyb3JzID0gQUgtPm5fZXJy b3JzOworCS8qIGRvbmUsIHByaW50IGEgc3VtbWFyeSBvZiBpZ25vcmVkIGVycm9ycyAqLwor CWlmIChBSC0+bl9lcnJvcnMpCisJCXBnX2xvZ193YXJuaW5nKCJlcnJvcnMgaWdub3JlZCBv biByZXN0b3JlOiAlZCIsIEFILT5uX2Vycm9ycyk7CiAKIAkvKiBBSCBtYXkgYmUgZnJlZWQg aW4gQ2xvc2VBcmNoaXZlPyAqLworCWV4aXRfY29kZSA9IEFILT5uX2Vycm9ycyA/IDEgOiAw OworCiAJQ2xvc2VBcmNoaXZlKEFIKTsKIAotCXJldHVybiBuX2Vycm9yczsKKwlyZXR1cm4g ZXhpdF9jb2RlOwogfQogCiBzdGF0aWMgdm9pZAogdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25h bWUpCiB7Ci0JcHJpbnRmKF8oIiVzIHJlc3RvcmVzIFBvc3RncmVTUUwgZGF0YWJhc2VzIGZy b20gYXJjaGl2ZXMgY3JlYXRlZCBieSBwZ19kdW1wIG9yIHBnX2R1bXBhbGwuXG5cbiIpLCBw cm9nbmFtZSk7CisJcHJpbnRmKF8oIiVzIHJlc3RvcmVzIGEgUG9zdGdyZVNRTCBkYXRhYmFz ZSBmcm9tIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wLlxuXG4iKSwgcHJvZ25hbWUp OwogCXByaW50ZihfKCJVc2FnZTpcbiIpKTsKIAlwcmludGYoXygiICAlcyBbT1BUSU9OXS4u LiBbRklMRV1cbiIpLCBwcm9nbmFtZSk7CiAKQEAgLTc2Myw3ICs1NTAsNiBAQCB1c2FnZShj b25zdCBjaGFyICpwcm9nbmFtZSkKIAlwcmludGYoXygiICAtYywgLS1jbGVhbiAgICAgICAg ICAgICAgICAgIGNsZWFuIChkcm9wKSBkYXRhYmFzZSBvYmplY3RzIGJlZm9yZSByZWNyZWF0 aW5nXG4iKSk7CiAJcHJpbnRmKF8oIiAgLUMsIC0tY3JlYXRlICAgICAgICAgICAgICAgICBj cmVhdGUgdGhlIHRhcmdldCBkYXRhYmFzZVxuIikpOwogCXByaW50ZihfKCIgIC1lLCAtLWV4 aXQtb24tZXJyb3IgICAgICAgICAgZXhpdCBvbiBlcnJvciwgZGVmYXVsdCBpcyB0byBjb250 aW51ZVxuIikpOwotCXByaW50ZihfKCIgIC1nLCAtLWdsb2JhbHMtb25seSAgICAgICAgICAg cmVzdG9yZSBvbmx5IGdsb2JhbCBvYmplY3RzLCBubyBkYXRhYmFzZXNcbiIpKTsKIAlwcmlu dGYoXygiICAtSSwgLS1pbmRleD1OQU1FICAgICAgICAgICAgIHJlc3RvcmUgbmFtZWQgaW5k ZXhcbiIpKTsKIAlwcmludGYoXygiICAtaiwgLS1qb2JzPU5VTSAgICAgICAgICAgICAgIHVz ZSB0aGlzIG1hbnkgcGFyYWxsZWwgam9icyB0byByZXN0b3JlXG4iKSk7CiAJcHJpbnRmKF8o IiAgLUwsIC0tdXNlLWxpc3Q9RklMRU5BTUUgICAgICB1c2UgdGFibGUgb2YgY29udGVudHMg ZnJvbSB0aGlzIGZpbGUgZm9yXG4iCkBAIC03ODAsNyArNTY2LDYgQEAgdXNhZ2UoY29uc3Qg Y2hhciAqcHJvZ25hbWUpCiAJcHJpbnRmKF8oIiAgLTEsIC0tc2luZ2xlLXRyYW5zYWN0aW9u ICAgICByZXN0b3JlIGFzIGEgc2luZ2xlIHRyYW5zYWN0aW9uXG4iKSk7CiAJcHJpbnRmKF8o IiAgLS1kaXNhYmxlLXRyaWdnZXJzICAgICAgICAgICBkaXNhYmxlIHRyaWdnZXJzIGR1cmlu ZyBkYXRhLW9ubHkgcmVzdG9yZVxuIikpOwogCXByaW50ZihfKCIgIC0tZW5hYmxlLXJvdy1z ZWN1cml0eSAgICAgICAgZW5hYmxlIHJvdyBzZWN1cml0eVxuIikpOwotCXByaW50ZihfKCIg IC0tZXhjbHVkZS1kYXRhYmFzZT1QQVRURVJOICAgZG8gbm90IHJlc3RvcmUgdGhlIHNwZWNp ZmllZCBkYXRhYmFzZShzKVxuIikpOwogCXByaW50ZihfKCIgIC0tZmlsdGVyPUZJTEVOQU1F ICAgICAgICAgICAgcmVzdG9yZSBvciBza2lwIG9iamVjdHMgYmFzZWQgb24gZXhwcmVzc2lv bnNcbiIKIAkJCSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEZJTEVOQU1F XG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1pZi1leGlzdHMgICAgICAgICAgICAgICAgICB1c2Ug SUYgRVhJU1RTIHdoZW4gZHJvcHBpbmcgb2JqZWN0c1xuIikpOwpAQCAtNzg4LDcgKzU3Myw2 IEBAIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKQogCXByaW50ZihfKCIgIC0tbm8tZGF0 YSAgICAgICAgICAgICAgICAgICAgZG8gbm90IHJlc3RvcmUgZGF0YVxuIikpOwogCXByaW50 ZihfKCIgIC0tbm8tZGF0YS1mb3ItZmFpbGVkLXRhYmxlcyAgZG8gbm90IHJlc3RvcmUgZGF0 YSBvZiB0YWJsZXMgdGhhdCBjb3VsZCBub3QgYmVcbiIKIAkJCSAiICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNyZWF0ZWRcbiIpKTsKLQlwcmludGYoXygiICAtLW5vLWdsb2Jh bHMgICAgICAgICAgICAgICAgIGRvIG5vdCByZXN0b3JlIGdsb2JhbCBvYmplY3RzIChyb2xl cyBhbmQgdGFibGVzcGFjZXMpXG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1uby1wb2xpY2llcyAg ICAgICAgICAgICAgICBkbyBub3QgcmVzdG9yZSByb3cgc2VjdXJpdHkgcG9saWNpZXNcbiIp KTsKIAlwcmludGYoXygiICAtLW5vLXB1YmxpY2F0aW9ucyAgICAgICAgICAgIGRvIG5vdCBy ZXN0b3JlIHB1YmxpY2F0aW9uc1xuIikpOwogCXByaW50ZihfKCIgIC0tbm8tc2NoZW1hICAg ICAgICAgICAgICAgICAgZG8gbm90IHJlc3RvcmUgc2NoZW1hXG4iKSk7CkBAIC04MTcsOCAr NjAxLDggQEAgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpCiAJcHJpbnRmKF8oIiAgLS1y b2xlPVJPTEVOQU1FICAgICAgICAgIGRvIFNFVCBST0xFIGJlZm9yZSByZXN0b3JlXG4iKSk7 CiAKIAlwcmludGYoXygiXG4iCi0JCQkgIlRoZSBvcHRpb25zIC1JLCAtbiwgLU4sIC1QLCAt dCwgLVQsIC0tc2VjdGlvbiwgYW5kIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW4gYmVcbiIKLQkJ CSAiY29tYmluZWQgYW5kIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcyB0byBzZWxlY3QgbXVs dGlwbGUgb2JqZWN0cy5cbiIpKTsKKwkJCSAiVGhlIG9wdGlvbnMgLUksIC1uLCAtTiwgLVAs IC10LCAtVCwgYW5kIC0tc2VjdGlvbiBjYW4gYmUgY29tYmluZWQgYW5kIHNwZWNpZmllZFxu IgorCQkJICJtdWx0aXBsZSB0aW1lcyB0byBzZWxlY3QgbXVsdGlwbGUgb2JqZWN0cy5cbiIp KTsKIAlwcmludGYoXygiXG5JZiBubyBpbnB1dCBmaWxlIG5hbWUgaXMgc3VwcGxpZWQsIHRo ZW4gc3RhbmRhcmQgaW5wdXQgaXMgdXNlZC5cblxuIikpOwogCXByaW50ZihfKCJSZXBvcnQg YnVncyB0byA8JXM+LlxuIiksIFBBQ0tBR0VfQlVHUkVQT1JUKTsKIAlwcmludGYoXygiJXMg aG9tZSBwYWdlOiA8JXM+XG4iKSwgUEFDS0FHRV9OQU1FLCBQQUNLQUdFX1VSTCk7CkBAIC05 MjMsNDA5ICs3MDcsMyBAQCByZWFkX3Jlc3RvcmVfZmlsdGVycyhjb25zdCBjaGFyICpmaWxl bmFtZSwgUmVzdG9yZU9wdGlvbnMgKm9wdHMpCiAKIAlmaWx0ZXJfZnJlZSgmZnN0YXRlKTsK IH0KLQotLyoKLSAqIGZpbGVfZXhpc3RzX2luX2RpcmVjdG9yeQotICoKLSAqIFJldHVybnMg dHJ1ZSBpZiB0aGUgZmlsZSBleGlzdHMgaW4gdGhlIGdpdmVuIGRpcmVjdG9yeS4KLSAqLwot c3RhdGljIGJvb2wKLWZpbGVfZXhpc3RzX2luX2RpcmVjdG9yeShjb25zdCBjaGFyICpkaXIs IGNvbnN0IGNoYXIgKmZpbGVuYW1lKQotewotCXN0cnVjdCBzdGF0IHN0OwotCWNoYXIJCWJ1 ZltNQVhQR1BBVEhdOwotCi0JaWYgKHNucHJpbnRmKGJ1ZiwgTUFYUEdQQVRILCAiJXMvJXMi LCBkaXIsIGZpbGVuYW1lKSA+PSBNQVhQR1BBVEgpCi0JCXBnX2ZhdGFsKCJkaXJlY3Rvcnkg bmFtZSB0b28gbG9uZzogXCIlc1wiIiwgZGlyKTsKLQotCXJldHVybiAoc3RhdChidWYsICZz dCkgPT0gMCAmJiBTX0lTUkVHKHN0LnN0X21vZGUpKTsKLX0KLQotLyoKLSAqIGdldF9kYm5h bWVzX2xpc3RfdG9fcmVzdG9yZQotICoKLSAqIFRoaXMgd2lsbCBtYXJrIGZvciBza2lwcGlu ZyBhbnkgZW50cmllcyBmcm9tIGRibmFtZV9vaWRfbGlzdCB0aGF0IHBhdHRlcm4gbWF0Y2gg YW4KLSAqIGVudHJ5IGluIHRoZSBkYl9leGNsdWRlX3BhdHRlcm5zIGxpc3QuCi0gKgotICog UmV0dXJucyB0aGUgbnVtYmVyIG9mIGRhdGFiYXNlIHRvIGJlIHJlc3RvcmVkLgotICoKLSAq Lwotc3RhdGljIGludAotZ2V0X2RibmFtZXNfbGlzdF90b19yZXN0b3JlKFBHY29ubiAqY29u biwKLQkJCQkJCQlTaW1wbGVQdHJMaXN0ICpkYm5hbWVfb2lkX2xpc3QsCi0JCQkJCQkJU2lt cGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zKQotewotCWludAkJCWNvdW50X2Ri ID0gMDsKLQlQUUV4cEJ1ZmZlciBxdWVyeTsKLQlQUUV4cEJ1ZmZlciBkYl9saXQ7Ci0JUEdy ZXN1bHQgICAqcmVzOwotCi0JcXVlcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwotCWRiX2xp dCA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7Ci0KLQkvKgotCSAqIFByb2Nlc3Mgb25lIGJ5IG9u ZSBhbGwgZGJuYW1lcyBhbmQgaWYgc3BlY2lmaWVkIHRvIHNraXAgcmVzdG9yaW5nLCB0aGVu Ci0JICogcmVtb3ZlIGRibmFtZSBmcm9tIGxpc3QuCi0JICovCi0JZm9yIChTaW1wbGVQdHJM aXN0Q2VsbCAqZGJfY2VsbCA9IGRibmFtZV9vaWRfbGlzdC0+aGVhZDsKLQkJIGRiX2NlbGw7 IGRiX2NlbGwgPSBkYl9jZWxsLT5uZXh0KQotCXsKLQkJRGJPaWROYW1lICAqZGJpZG5hbWUg PSAoRGJPaWROYW1lICopIGRiX2NlbGwtPnB0cjsKLQkJYm9vbAkJc2tpcF9kYl9yZXN0b3Jl ID0gZmFsc2U7Ci0KLQkJcmVzZXRQUUV4cEJ1ZmZlcihxdWVyeSk7Ci0JCXJlc2V0UFFFeHBC dWZmZXIoZGJfbGl0KTsKLQotCQlhcHBlbmRTdHJpbmdMaXRlcmFsQ29ubihkYl9saXQsIGRi aWRuYW1lLT5zdHIsIGNvbm4pOwotCi0JCWZvciAoU2ltcGxlU3RyaW5nTGlzdENlbGwgKnBh dF9jZWxsID0gZGJfZXhjbHVkZV9wYXR0ZXJucy5oZWFkOyBwYXRfY2VsbDsgcGF0X2NlbGwg PSBwYXRfY2VsbC0+bmV4dCkKLQkJewotCQkJLyoKLQkJCSAqIElmIHRoZXJlIGlzIGFuIGV4 YWN0IG1hdGNoIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byB0cnkgYSBwYXR0ZXJuCi0JCQkgKiBt YXRjaAotCQkJICovCi0JCQlpZiAocGdfc3RyY2FzZWNtcChkYmlkbmFtZS0+c3RyLCBwYXRf Y2VsbC0+dmFsKSA9PSAwKQotCQkJCXNraXBfZGJfcmVzdG9yZSA9IHRydWU7Ci0JCQkvKiBP dGhlcndpc2UsIHRyeSBhIHBhdHRlcm4gbWF0Y2ggaWYgdGhlcmUgaXMgYSBjb25uZWN0aW9u ICovCi0JCQllbHNlCi0JCQl7Ci0JCQkJaW50CQkJZG90Y250OwotCi0JCQkJYXBwZW5kUFFF eHBCdWZmZXJTdHIocXVlcnksICJTRUxFQ1QgMSAiKTsKLQkJCQlwcm9jZXNzU1FMTmFtZVBh dHRlcm4oY29ubiwgcXVlcnksIHBhdF9jZWxsLT52YWwsIGZhbHNlLAotCQkJCQkJCQkJICBm YWxzZSwgTlVMTCwgZGJfbGl0LT5kYXRhLAotCQkJCQkJCQkJICBOVUxMLCBOVUxMLCBOVUxM LCAmZG90Y250KTsKLQotCQkJCWlmIChkb3RjbnQgPiAwKQotCQkJCXsKLQkJCQkJcGdfbG9n X2Vycm9yKCJpbXByb3BlciBxdWFsaWZpZWQgbmFtZSAodG9vIG1hbnkgZG90dGVkIG5hbWVz KTogJXMiLAotCQkJCQkJCQkgZGJpZG5hbWUtPnN0cik7Ci0JCQkJCVBRZmluaXNoKGNvbm4p OwotCQkJCQlleGl0X25pY2VseSgxKTsKLQkJCQl9Ci0KLQkJCQlyZXMgPSBleGVjdXRlUXVl cnkoY29ubiwgcXVlcnktPmRhdGEpOwotCi0JCQkJaWYgKFBRbnR1cGxlcyhyZXMpKQotCQkJ CXsKLQkJCQkJc2tpcF9kYl9yZXN0b3JlID0gdHJ1ZTsKLQkJCQkJcGdfbG9nX2luZm8oImRh dGFiYXNlIG5hbWUgXCIlc1wiIG1hdGNoZXMgLS1leGNsdWRlLWRhdGFiYXNlIHBhdHRlcm4g XCIlc1wiIiwgZGJpZG5hbWUtPnN0ciwgcGF0X2NlbGwtPnZhbCk7Ci0JCQkJfQotCi0JCQkJ UFFjbGVhcihyZXMpOwotCQkJCXJlc2V0UFFFeHBCdWZmZXIocXVlcnkpOwotCQkJfQotCi0J CQlpZiAoc2tpcF9kYl9yZXN0b3JlKQotCQkJCWJyZWFrOwotCQl9Ci0KLQkJLyoKLQkJICog TWFyayBkYiB0byBiZSBza2lwcGVkIG9yIGluY3JlbWVudCB0aGUgY291bnRlciBvZiBkYnMg dG8gYmUKLQkJICogcmVzdG9yZWQKLQkJICovCi0JCWlmIChza2lwX2RiX3Jlc3RvcmUpCi0J CXsKLQkJCXBnX2xvZ19pbmZvKCJleGNsdWRpbmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJpZG5h bWUtPnN0cik7Ci0JCQlkYmlkbmFtZS0+b2lkID0gSW52YWxpZE9pZDsKLQkJfQotCQllbHNl Ci0JCQljb3VudF9kYisrOwotCX0KLQotCWRlc3Ryb3lQUUV4cEJ1ZmZlcihxdWVyeSk7Ci0J ZGVzdHJveVBRRXhwQnVmZmVyKGRiX2xpdCk7Ci0KLQlyZXR1cm4gY291bnRfZGI7Ci19Ci0K LS8qCi0gKiBnZXRfZGJuYW1lX29pZF9saXN0X2Zyb21fbWZpbGUKLSAqCi0gKiBPcGVuIG1h cC5kYXQgZmlsZSBhbmQgcmVhZCBsaW5lIGJ5IGxpbmUgYW5kIHRoZW4gcHJlcGFyZSBhIGxp c3Qgb2YgZGF0YWJhc2UKLSAqIG5hbWVzIGFuZCBjb3JyZXNwb25kaW5nIGRiX29pZC4KLSAq Ci0gKiBSZXR1cm5zLCB0b3RhbCBudW1iZXIgb2YgZGF0YWJhc2UgbmFtZXMgaW4gbWFwLmRh dCBmaWxlLgotICovCi1zdGF0aWMgaW50Ci1nZXRfZGJuYW1lX29pZF9saXN0X2Zyb21fbWZp bGUoY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsCi0JCQkJCQkJICAgU2ltcGxlUHRyTGlzdCAq ZGJuYW1lX29pZF9saXN0KQotewotCVN0cmluZ0luZm9EYXRhIGxpbmVidWY7Ci0JRklMRQkg ICAqcGZpbGU7Ci0JY2hhcgkJbWFwX2ZpbGVfcGF0aFtNQVhQR1BBVEhdOwotCWludAkJCWNv dW50ID0gMDsKLQotCS8qCi0JICogSWYgdGhlcmUgaXMgbm8gbWFwLmRhdCBmaWxlIGluIHRo ZSBkdW1wLCB0aGVuIHJldHVybiBmcm9tIGhlcmUgYXMgdGhlcmUKLQkgKiBpcyBubyBkYXRh YmFzZSB0byByZXN0b3JlLgotCSAqLwotCWlmICghZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5 KGR1bXBkaXJwYXRoLCAibWFwLmRhdCIpKQotCXsKLQkJcGdfbG9nX2luZm8oImRhdGFiYXNl IHJlc3RvcmluZyBpcyBza2lwcGVkIGJlY2F1c2UgZmlsZSBcIiVzXCIgZG9lcyBub3QgZXhp c3QgaW4gZGlyZWN0b3J5IFwiJXNcIiIsICJtYXAuZGF0IiwgZHVtcGRpcnBhdGgpOwotCQly ZXR1cm4gMDsKLQl9Ci0KLQlzbnByaW50ZihtYXBfZmlsZV9wYXRoLCBNQVhQR1BBVEgsICIl cy9tYXAuZGF0IiwgZHVtcGRpcnBhdGgpOwotCi0JLyogT3BlbiBtYXAuZGF0IGZpbGUuICov Ci0JcGZpbGUgPSBmb3BlbihtYXBfZmlsZV9wYXRoLCBQR19CSU5BUllfUik7Ci0KLQlpZiAo cGZpbGUgPT0gTlVMTCkKLQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wi OiAlbSIsIG1hcF9maWxlX3BhdGgpOwotCi0JaW5pdFN0cmluZ0luZm8oJmxpbmVidWYpOwot Ci0JLyogQXBwZW5kIGFsbCB0aGUgZGJuYW1lL2RiX29pZCBjb21iaW5hdGlvbnMgdG8gdGhl IGxpc3QuICovCi0Jd2hpbGUgKHBnX2dldF9saW5lX2J1ZihwZmlsZSwgJmxpbmVidWYpKQot CXsKLQkJT2lkCQkJZGJfb2lkID0gSW52YWxpZE9pZDsKLQkJY2hhcgkgICAqZGJuYW1lOwot CQlEYk9pZE5hbWUgICpkYmlkbmFtZTsKLQkJaW50CQkJbmFtZWxlbjsKLQkJY2hhcgkgICAq cCA9IGxpbmVidWYuZGF0YTsKLQotCQkvKiBsb29rIGZvciB0aGUgZGJvaWQuICovCi0JCXdo aWxlIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSAqcCkpCi0JCQlwKys7Ci0KLQkJLyogaWdu b3JlIGxpbmVzIHRoYXQgZG9uJ3QgYmVnaW4gd2l0aCBhIGRpZ2l0ICovCi0JCWlmIChwID09 IGxpbmVidWYuZGF0YSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICgqcCA9PSAnICcpCi0JCXsK LQkJCXNzY2FuZihsaW5lYnVmLmRhdGEsICIldSIsICZkYl9vaWQpOwotCQkJcCsrOwotCQl9 Ci0KLQkJLyogZGJuYW1lIGlzIHRoZSByZXN0IG9mIHRoZSBsaW5lICovCi0JCWRibmFtZSA9 IHA7Ci0JCW5hbWVsZW4gPSBzdHJsZW4oZGJuYW1lKTsKLQotCQkvKiBTdHJpcCB0cmFpbGlu ZyBuZXdsaW5lICovCi0JCWlmIChuYW1lbGVuID4gMCAmJiBkYm5hbWVbbmFtZWxlbiAtIDFd ID09ICdcbicpCi0JCQlkYm5hbWVbLS1uYW1lbGVuXSA9ICdcMCc7Ci0KLQkJLyogUmVwb3J0 IGVycm9yIGFuZCBleGl0IGlmIHRoZSBmaWxlIGhhcyBhbnkgY29ycnVwdGVkIGRhdGEuICov Ci0JCWlmICghT2lkSXNWYWxpZChkYl9vaWQpIHx8IG5hbWVsZW4gPCAxKQotCQkJcGdfZmF0 YWwoImludmFsaWQgZW50cnkgaW4gZmlsZSBcIiVzXCIgb24gbGluZSAlZCIsIG1hcF9maWxl X3BhdGgsCi0JCQkJCSBjb3VudCArIDEpOwotCi0JCWRiaWRuYW1lID0gcGdfbWFsbG9jKG9m ZnNldG9mKERiT2lkTmFtZSwgc3RyKSArIG5hbWVsZW4gKyAxKTsKLQkJZGJpZG5hbWUtPm9p ZCA9IGRiX29pZDsKLQkJc3RybGNweShkYmlkbmFtZS0+c3RyLCBkYm5hbWUsIG5hbWVsZW4g KyAxKTsKLQotCQlwZ19sb2dfaW5mbygiZm91bmQgZGF0YWJhc2UgXCIlc1wiIChPSUQ6ICV1 KSBpbiBmaWxlIFwiJXNcIiIsCi0JCQkJCWRiaWRuYW1lLT5zdHIsIGRiX29pZCwgbWFwX2Zp bGVfcGF0aCk7Ci0KLQkJc2ltcGxlX3B0cl9saXN0X2FwcGVuZChkYm5hbWVfb2lkX2xpc3Qs IGRiaWRuYW1lKTsKLQkJY291bnQrKzsKLQl9Ci0KLQkvKiBDbG9zZSBtYXAuZGF0IGZpbGUu ICovCi0JZmNsb3NlKHBmaWxlKTsKLQotCXBmcmVlKGxpbmVidWYuZGF0YSk7Ci0KLQlyZXR1 cm4gY291bnQ7Ci19Ci0KLS8qCi0gKiByZXN0b3JlX2FsbF9kYXRhYmFzZXMKLSAqCi0gKiBU aGlzIHdpbGwgcmVzdG9yZSBkYXRhYmFzZXMgdGhvc2UgZHVtcHMgYXJlIHByZXNlbnQgaW4K LSAqIGRpcmVjdG9yeSBiYXNlZCBvbiBtYXAuZGF0IGZpbGUgbWFwcGluZy4KLSAqCi0gKiBU aGlzIHdpbGwgc2tpcCByZXN0b3JpbmcgZm9yIGRhdGFiYXNlcyB0aGF0IGFyZSBzcGVjaWZp ZWQgd2l0aAotICogZXhjbHVkZS1kYXRhYmFzZSBvcHRpb24uCi0gKgotICogcmV0dXJucywg bnVtYmVyIG9mIGVycm9ycyB3aGlsZSBkb2luZyByZXN0b3JlLgotICovCi1zdGF0aWMgaW50 Ci1yZXN0b3JlX2FsbF9kYXRhYmFzZXMoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywKLQkJ CQkJICBTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMsIFJlc3RvcmVPcHRp b25zICpvcHRzLAotCQkJCQkgIGludCBudW1Xb3JrZXJzKQotewotCVNpbXBsZVB0ckxpc3Qg ZGJuYW1lX29pZF9saXN0ID0ge05VTEwsIE5VTEx9OwotCWludAkJCW51bV9kYl9yZXN0b3Jl ID0gMDsKLQlpbnQJCQludW1fdG90YWxfZGI7Ci0JaW50CQkJbl9lcnJvcnNfdG90YWwgPSAw OwotCWNoYXIJICAgKmNvbm5lY3RlZF9kYiA9IE5VTEw7Ci0JUEdjb25uCSAgICpjb25uID0g TlVMTDsKLQlSZXN0b3JlT3B0aW9ucyAqb3JpZ2luYWxfb3B0cyA9IHBnX21hbGxvYzBfb2Jq ZWN0KFJlc3RvcmVPcHRpb25zKTsKLQlSZXN0b3JlT3B0aW9ucyAqdG1wb3B0cyA9IHBnX21h bGxvYzBfb2JqZWN0KFJlc3RvcmVPcHRpb25zKTsKLQotCW1lbWNweShvcmlnaW5hbF9vcHRz LCBvcHRzLCBzaXplb2YoUmVzdG9yZU9wdGlvbnMpKTsKLQotCS8qIFNhdmUgZGIgbmFtZSB0 byByZXVzZSBpdCBmb3IgYWxsIHRoZSBkYXRhYmFzZS4gKi8KLQlpZiAob3B0cy0+Y3BhcmFt cy5kYm5hbWUpCi0JCWNvbm5lY3RlZF9kYiA9IG9wdHMtPmNwYXJhbXMuZGJuYW1lOwotCi0J bnVtX3RvdGFsX2RiID0gZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlKGlucHV0Rmls ZVNwZWMsICZkYm5hbWVfb2lkX2xpc3QpOwotCi0JcGdfbG9nX2luZm8obmdldHRleHQoImZv dW5kICVkIGRhdGFiYXNlIG5hbWUgaW4gXCIlc1wiIiwKLQkJCQkJCSAiZm91bmQgJWQgZGF0 YWJhc2UgbmFtZXMgaW4gXCIlc1wiIiwKLQkJCQkJCSBudW1fdG90YWxfZGIpLAotCQkJCW51 bV90b3RhbF9kYiwgIm1hcC5kYXQiKTsKLQotCS8qCi0JICogSWYgZXhjbHVkZS1wYXR0ZXJu cyBpcyBnaXZlbiwgY29ubmVjdCB0byB0aGUgZGF0YWJhc2UgdG8gcHJvY2VzcyB0aGVtLgot CSAqLwotCWlmIChkYl9leGNsdWRlX3BhdHRlcm5zLmhlYWQgIT0gTlVMTCkKLQl7Ci0JCWlm IChvcHRzLT5jcGFyYW1zLmRibmFtZSkKLQkJewotCQkJY29ubiA9IENvbm5lY3REYXRhYmFz ZShvcHRzLT5jcGFyYW1zLmRibmFtZSwgTlVMTCwgb3B0cy0+Y3BhcmFtcy5wZ2hvc3QsCi0J CQkJCQkJCSAgIG9wdHMtPmNwYXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1l LCBUUklfREVGQVVMVCwKLQkJCQkJCQkJICAgZmFsc2UsIHByb2duYW1lLCBOVUxMLCBOVUxM LCBOVUxMLCBOVUxMKTsKLQotCQkJaWYgKCFjb25uKQotCQkJCXBnX2ZhdGFsKCJjb3VsZCBu b3QgY29ubmVjdCB0byBkYXRhYmFzZSBcIiVzXCIiLCBvcHRzLT5jcGFyYW1zLmRibmFtZSk7 Ci0JCX0KLQotCQlpZiAoIWNvbm4pCi0JCXsKLQkJCXBnX2xvZ19pbmZvKCJ0cnlpbmcgdG8g Y29ubmVjdCB0byBkYXRhYmFzZSBcIiVzXCIiLCAicG9zdGdyZXMiKTsKLQotCQkJY29ubiA9 IENvbm5lY3REYXRhYmFzZSgicG9zdGdyZXMiLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9z dCwKLQkJCQkJCQkJICAgb3B0cy0+Y3BhcmFtcy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMudXNl cm5hbWUsIFRSSV9ERUZBVUxULAotCQkJCQkJCQkgICBmYWxzZSwgcHJvZ25hbWUsIE5VTEws IE5VTEwsIE5VTEwsIE5VTEwpOwotCi0JCQkvKiBUcnkgd2l0aCB0ZW1wbGF0ZTEuICovCi0J CQlpZiAoIWNvbm4pCi0JCQl7Ci0JCQkJcGdfbG9nX2luZm8oInRyeWluZyB0byBjb25uZWN0 IHRvIGRhdGFiYXNlIFwiJXNcIiIsICJ0ZW1wbGF0ZTEiKTsKLQotCQkJCWNvbm4gPSBDb25u ZWN0RGF0YWJhc2UoInRlbXBsYXRlMSIsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdob3N0LAot CQkJCQkJCQkJICAgb3B0cy0+Y3BhcmFtcy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMudXNlcm5h bWUsIFRSSV9ERUZBVUxULAotCQkJCQkJCQkJICAgZmFsc2UsIHByb2duYW1lLCBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMKTsKLQkJCQlpZiAoIWNvbm4pCi0JCQkJewotCQkJCQlwZ19sb2df ZXJyb3IoImNvdWxkIG5vdCBjb25uZWN0IHRvIGRhdGFiYXNlcyBcInBvc3RncmVzXCIgb3Ig XCJ0ZW1wbGF0ZTFcIlxuIgotCQkJCQkJCQkgIlBsZWFzZSBzcGVjaWZ5IGFuIGFsdGVybmF0 aXZlIGRhdGFiYXNlLiIpOwotCQkJCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1o ZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOwotCQkJCQlleGl0X25p Y2VseSgxKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQkvKiBGaWx0ZXIgdGhlIGRiIGxpc3Qg YWNjb3JkaW5nIHRvIHRoZSBleGNsdWRlIHBhdHRlcm5zLiAqLwotCQludW1fZGJfcmVzdG9y ZSA9IGdldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9yZShjb25uLCAmZGJuYW1lX29pZF9saXN0 LAotCQkJCQkJCQkJCQkJCSBkYl9leGNsdWRlX3BhdHRlcm5zKTsKLQkJUFFmaW5pc2goY29u bik7Ci0JfQotCWVsc2UKLQkJbnVtX2RiX3Jlc3RvcmUgPSBudW1fdG90YWxfZGI7Ci0KLQkv KiBFeGl0IGlmIG5vIGRiIG5lZWRzIHRvIGJlIHJlc3RvcmVkLiAqLwotCWlmIChudW1fZGJf cmVzdG9yZSA9PSAwKQotCXsKLQkJcGdfbG9nX2luZm8obmdldHRleHQoIm5vIGRhdGFiYXNl IG5lZWRzIHJlc3RvcmluZyBvdXQgb2YgJWQgZGF0YWJhc2UiLAotCQkJCQkJCSAibm8gZGF0 YWJhc2UgbmVlZHMgcmVzdG9yaW5nIG91dCBvZiAlZCBkYXRhYmFzZXMiLCBudW1fdG90YWxf ZGIpLAotCQkJCQludW1fdG90YWxfZGIpOwotCQlwZ19mcmVlKG9yaWdpbmFsX29wdHMpOwot CQlwZ19mcmVlKHRtcG9wdHMpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlwZ19sb2dfaW5mbygi bmVlZCB0byByZXN0b3JlICVkIGRhdGFiYXNlcyBvdXQgb2YgJWQgZGF0YWJhc2VzIiwgbnVt X2RiX3Jlc3RvcmUsIG51bV90b3RhbF9kYik7Ci0KLQkvKgotCSAqIFdlIGhhdmUgYSBsaXN0 IG9mIGRhdGFiYXNlcyB0byByZXN0b3JlIGFmdGVyIHByb2Nlc3NpbmcgdGhlCi0JICogZXhj bHVkZS1kYXRhYmFzZSBzd2l0Y2goZXMpLiAgTm93IHdlIGNhbiByZXN0b3JlIHRoZW0gb25l IGJ5IG9uZS4KLQkgKi8KLQlmb3IgKFNpbXBsZVB0ckxpc3RDZWxsICpkYl9jZWxsID0gZGJu YW1lX29pZF9saXN0LmhlYWQ7Ci0JCSBkYl9jZWxsOyBkYl9jZWxsID0gZGJfY2VsbC0+bmV4 dCkKLQl7Ci0JCURiT2lkTmFtZSAgKmRiaWRuYW1lID0gKERiT2lkTmFtZSAqKSBkYl9jZWxs LT5wdHI7Ci0JCWNoYXIJCXN1YmRpcnBhdGhbTUFYUEdQQVRIXTsKLQkJY2hhcgkJc3ViZGly ZGJwYXRoW01BWFBHUEFUSF07Ci0JCWNoYXIJCWRiZmlsZW5hbWVbTUFYUEdQQVRIXTsKLQkJ aW50CQkJbl9lcnJvcnM7Ci0KLQkJLyogaWdub3JlIGRicyBtYXJrZWQgZm9yIHNraXBwaW5n ICovCi0JCWlmIChkYmlkbmFtZS0+b2lkID09IEludmFsaWRPaWQpCi0JCQljb250aW51ZTsK LQotCQkvKgotCQkgKiBTaW5jZSBwZ19iYWNrdXBfYXJjaGl2ZXIuYyBtYXkgbW9kaWZ5IFJl c3RvcmVPcHRpb25zIGR1cmluZyB0aGUKLQkJICogcHJldmlvdXMgcmVzdG9yZSwgd2UgbXVz dCBwcm92aWRlIGEgZnJlc2ggY29weSBvZiB0aGUgb3JpZ2luYWwKLQkJICogIm9wdHMiIGZv ciBlYWNoIGNhbGwgdG8gcmVzdG9yZV9vbmVfZGF0YWJhc2UuCi0JCSAqLwotCQltZW1jcHko dG1wb3B0cywgb3JpZ2luYWxfb3B0cywgc2l6ZW9mKFJlc3RvcmVPcHRpb25zKSk7Ci0KLQkJ c25wcmludGYoc3ViZGlyZGJwYXRoLCBNQVhQR1BBVEgsICIlcy9kYXRhYmFzZXMiLCBpbnB1 dEZpbGVTcGVjKTsKLQotCQkvKgotCQkgKiBMb29rIGZvciB0aGUgZGF0YWJhc2UgZHVtcCBm aWxlL2Rpci4gSWYgdGhlcmUgaXMgYW4ge29pZH0udGFyIG9yCi0JCSAqIHtvaWR9LmRtcCBm aWxlLCB1c2UgaXQuIE90aGVyd2lzZSB0cnkgdG8gdXNlIGEgZGlyZWN0b3J5IGNhbGxlZAot CQkgKiB7b2lkfQotCQkgKi8KLQkJc25wcmludGYoZGJmaWxlbmFtZSwgTUFYUEdQQVRILCAi JXUudGFyIiwgZGJpZG5hbWUtPm9pZCk7Ci0JCWlmIChmaWxlX2V4aXN0c19pbl9kaXJlY3Rv cnkoc3ViZGlyZGJwYXRoLCBkYmZpbGVuYW1lKSkKLQkJCXNucHJpbnRmKHN1YmRpcnBhdGgs IE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcy8ldS50YXIiLCBpbnB1dEZpbGVTcGVjLCBkYmlk bmFtZS0+b2lkKTsKLQkJZWxzZQotCQl7Ci0JCQlzbnByaW50ZihkYmZpbGVuYW1lLCBNQVhQ R1BBVEgsICIldS5kbXAiLCBkYmlkbmFtZS0+b2lkKTsKLQotCQkJaWYgKGZpbGVfZXhpc3Rz X2luX2RpcmVjdG9yeShzdWJkaXJkYnBhdGgsIGRiZmlsZW5hbWUpKQotCQkJCXNucHJpbnRm KHN1YmRpcnBhdGgsIE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcy8ldS5kbXAiLCBpbnB1dEZp bGVTcGVjLCBkYmlkbmFtZS0+b2lkKTsKLQkJCWVsc2UKLQkJCQlzbnByaW50ZihzdWJkaXJw YXRoLCBNQVhQR1BBVEgsICIlcy9kYXRhYmFzZXMvJXUiLCBpbnB1dEZpbGVTcGVjLCBkYmlk bmFtZS0+b2lkKTsKLQkJfQotCi0JCXBnX2xvZ19pbmZvKCJyZXN0b3JpbmcgZGF0YWJhc2Ug XCIlc1wiIiwgZGJpZG5hbWUtPnN0cik7Ci0KLQkJLyogSWYgZGF0YWJhc2UgaXMgYWxyZWFk eSBjcmVhdGVkLCB0aGVuIGRvbid0IHNldCBjcmVhdGVEQiBmbGFnLiAqLwotCQlpZiAodG1w b3B0cy0+Y3BhcmFtcy5kYm5hbWUpCi0JCXsKLQkJCVBHY29ubgkgICAqdGVzdF9jb25uOwot Ci0JCQl0ZXN0X2Nvbm4gPSBDb25uZWN0RGF0YWJhc2UoZGJpZG5hbWUtPnN0ciwgTlVMTCwg dG1wb3B0cy0+Y3BhcmFtcy5wZ2hvc3QsCi0JCQkJCQkJCQkJdG1wb3B0cy0+Y3BhcmFtcy5w Z3BvcnQsIHRtcG9wdHMtPmNwYXJhbXMudXNlcm5hbWUsIFRSSV9ERUZBVUxULAotCQkJCQkJ CQkJCWZhbHNlLCBwcm9nbmFtZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0JCQlpZiAo dGVzdF9jb25uKQotCQkJewotCQkJCVBRZmluaXNoKHRlc3RfY29ubik7Ci0KLQkJCQkvKiBV c2UgYWxyZWFkeSBjcmVhdGVkIGRhdGFiYXNlIGZvciBjb25uZWN0aW9uLiAqLwotCQkJCXRt cG9wdHMtPmNyZWF0ZURCID0gMDsKLQkJCQl0bXBvcHRzLT5jcGFyYW1zLmRibmFtZSA9IGRi aWRuYW1lLT5zdHI7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJaWYgKCF0bXBvcHRzLT5j cmVhdGVEQikKLQkJCQl7Ci0JCQkJCXBnX2xvZ19pbmZvKCJza2lwcGluZyByZXN0b3JlIG9m IGRhdGFiYXNlIFwiJXNcIjogZGF0YWJhc2UgZG9lcyBub3QgZXhpc3QgYW5kICVzIHdhcyBu b3Qgc3BlY2lmaWVkIiwKLQkJCQkJCQkJZGJpZG5hbWUtPnN0ciwgIi1DLy0tY3JlYXRlIik7 Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQotCQkJCS8qIFdlJ2xsIGhhdmUgdG8gY3JlYXRl IGl0ICovCi0JCQkJdG1wb3B0cy0+Y3JlYXRlREIgPSAxOwotCQkJCXRtcG9wdHMtPmNwYXJh bXMuZGJuYW1lID0gY29ubmVjdGVkX2RiOwotCQkJfQotCQl9Ci0KLQkJLyogUmVzdG9yZSB0 aGUgc2luZ2xlIGRhdGFiYXNlLiAqLwotCQluX2Vycm9ycyA9IHJlc3RvcmVfb25lX2RhdGFi YXNlKHN1YmRpcnBhdGgsIHRtcG9wdHMsIG51bVdvcmtlcnMsIHRydWUpOwotCi0JCW5fZXJy b3JzX3RvdGFsICs9IG5fZXJyb3JzOwotCi0JCS8qIFByaW50IGEgc3VtbWFyeSBvZiBpZ25v cmVkIGVycm9ycyBkdXJpbmcgc2luZ2xlIGRhdGFiYXNlIHJlc3RvcmUuICovCi0JCWlmIChu X2Vycm9ycykKLQkJCXBnX2xvZ193YXJuaW5nKCJlcnJvcnMgaWdub3JlZCBvbiBkYXRhYmFz ZSBcIiVzXCIgcmVzdG9yZTogJWQiLCBkYmlkbmFtZS0+c3RyLCBuX2Vycm9ycyk7Ci0JfQot Ci0JLyogTG9nIG51bWJlciBvZiBwcm9jZXNzZWQgZGF0YWJhc2VzLiAqLwotCXBnX2xvZ19p bmZvKCJudW1iZXIgb2YgcmVzdG9yZWQgZGF0YWJhc2VzIGlzICVkIiwgbnVtX2RiX3Jlc3Rv cmUpOwotCi0JLyogRnJlZSBkYm5hbWUgYW5kIGRib2lkIGxpc3QuICovCi0Jc2ltcGxlX3B0 cl9saXN0X2Rlc3Ryb3koJmRibmFtZV9vaWRfbGlzdCk7Ci0KLQlwZ19mcmVlKG9yaWdpbmFs X29wdHMpOwotCXBnX2ZyZWUodG1wb3B0cyk7Ci0KLQlyZXR1cm4gbl9lcnJvcnNfdG90YWw7 Ci19CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwgYi9zcmMv YmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwKaW5kZXggNjg3ZTg0MmNkZTkuLmIyNTU4MDQ2 MjI0IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwKKysrIGIv c3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCkBAIC04Nyw4ICs4Nyw4IEBAIGNvbW1h bmRfZmFpbHNfbGlrZSgKIAogY29tbWFuZF9mYWlsc19saWtlKAogCVsgJ3BnX3Jlc3RvcmUn LCAnLXMnLCAnLWEnLCAnLWYgLScgXSwKLQlxci9cUXBnX3Jlc3RvcmU6IGVycm9yOiBvcHRp b25zIC1hXC8tLWRhdGEtb25seSBhbmQgLXNcLy0tc2NoZW1hLW9ubHkgY2Fubm90IGJlIHVz ZWQgdG9nZXRoZXJcRS8sCi0JJ3BnX3Jlc3RvcmU6IG9wdGlvbnMgLWEvLS1kYXRhLW9ubHkg YW5kIC1zLy0tc2NoZW1hLW9ubHkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXInCisJcXIvXFFw Z19yZXN0b3JlOiBlcnJvcjogb3B0aW9ucyAtc1wvLS1zY2hlbWEtb25seSBhbmQgLWFcLy0t ZGF0YS1vbmx5IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyXEUvLAorCSdwZ19yZXN0b3JlOiBv cHRpb25zIC1zLy0tc2NoZW1hLW9ubHkgYW5kIC1hLy0tZGF0YS1vbmx5IGNhbm5vdCBiZSB1 c2VkIHRvZ2V0aGVyJwogKTsKIAogY29tbWFuZF9mYWlsc19saWtlKApAQCAtMjA1LDEyICsy MDUsNyBAQCBjb21tYW5kX2ZhaWxzX2xpa2UoCiBjb21tYW5kX2ZhaWxzX2xpa2UoCiAJWyAn cGdfcmVzdG9yZScsICctZiAtJywgJy1GJywgJ2dhcmJhZ2UnIF0sCiAJcXIvXFFwZ19yZXN0 b3JlOiBlcnJvcjogdW5yZWNvZ25pemVkIGFyY2hpdmUgZm9ybWF0ICJnYXJiYWdlIjtcRS8s Ci0JJ3BnX3Jlc3RvcmU6IHVucmVjb2duaXplZCBhcmNoaXZlIGZvcm1hdCcpOwotCi1jb21t YW5kX2ZhaWxzX2xpa2UoCi0JWyAncGdfcmVzdG9yZScsICctZiAtJywgJy1GJywgJycgXSwK LQlxci9cUXBnX3Jlc3RvcmU6IGVycm9yOiB1bnJlY29nbml6ZWQgYXJjaGl2ZSBmb3JtYXQg IiI7XEUvLAotCSdwZ19yZXN0b3JlOiBlbXB0eSBhcmNoaXZlIGZvcm1hdCcpOworCSdwZ19k dW1wOiB1bnJlY29nbml6ZWQgYXJjaGl2ZSBmb3JtYXQnKTsKIAogY29tbWFuZF9mYWlsc19s aWtlKAogCVsgJ3BnX2R1bXAnLCAnLS1vbi1jb25mbGljdC1kby1ub3RoaW5nJyBdLApAQCAt MjUxLDEwNSArMjQ2LDggQEAgY29tbWFuZF9mYWlsc19saWtlKAogIyBhbHNvIGZhaWxzIGZv ciAtciBhbmQgLXQsIGJ1dCBpdCBzZWVtcyBwb2ludGxlc3MgdG8gYWRkIG1vcmUgdGVzdHMg Zm9yIHRob3NlLgogY29tbWFuZF9mYWlsc19saWtlKAogCVsgJ3BnX2R1bXBhbGwnLCAnLS1l eGNsdWRlLWRhdGFiYXNlPWZvbycsICctLWdsb2JhbHMtb25seScgXSwKLQlxci9cUXBnX2R1 bXBhbGw6IGVycm9yOiBvcHRpb25zIC0tZXhjbHVkZS1kYXRhYmFzZSBhbmQgLWdcLy0tZ2xv YmFscy1vbmx5IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyXEUvLAotCSdwZ19kdW1wYWxsOiBv cHRpb25zIC0tZXhjbHVkZS1kYXRhYmFzZSBhbmQgLWcvLS1nbG9iYWxzLW9ubHkgY2Fubm90 IGJlIHVzZWQgdG9nZXRoZXInCisJcXIvXFFwZ19kdW1wYWxsOiBlcnJvcjogb3B0aW9uIC0t ZXhjbHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIC1nXC8tLWds b2JhbHMtb25seVxFLywKKwkncGdfZHVtcGFsbDogb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFz ZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIC1nLy0tZ2xvYmFscy1vbmx5JwogKTsK IAotY29tbWFuZF9mYWlsc19saWtlKAotCVsgJ3BnX2R1bXBhbGwnLCAnLWEnLCAnLS1uby1k YXRhJyBdLAotCXFyL1xRcGdfZHVtcGFsbDogZXJyb3I6IG9wdGlvbnMgLWFcLy0tZGF0YS1v bmx5IGFuZCAtLW5vLWRhdGEgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXJcRS8sCi0JJ3BnX2R1 bXBhbGw6IG9wdGlvbnMgLWFcLy0tZGF0YS1vbmx5IGFuZCAtLW5vLWRhdGEgY2Fubm90IGJl IHVzZWQgdG9nZXRoZXInCi0pOwotCi1jb21tYW5kX2ZhaWxzX2xpa2UoCi0JWyAncGdfZHVt cGFsbCcsICctcycsICctLW5vLXNjaGVtYScgXSwKLQlxci9cUXBnX2R1bXBhbGw6IGVycm9y OiBvcHRpb25zIC1zXC8tLXNjaGVtYS1vbmx5IGFuZCAtLW5vLXNjaGVtYSBjYW5ub3QgYmUg dXNlZCB0b2dldGhlclxFLywKLQkncGdfZHVtcGFsbDogb3B0aW9ucyAtc1wvLS1zY2hlbWEt b25seSBhbmQgLS1uby1zY2hlbWEgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXInCi0pOwotCi1j b21tYW5kX2ZhaWxzX2xpa2UoCi0JWyAncGdfZHVtcGFsbCcsICctLXN0YXRpc3RpY3Mtb25s eScsICctLW5vLXN0YXRpc3RpY3MnIF0sCi0JcXIvXFFwZ19kdW1wYWxsOiBlcnJvcjogb3B0 aW9ucyAtLXN0YXRpc3RpY3Mtb25seSBhbmQgLS1uby1zdGF0aXN0aWNzIGNhbm5vdCBiZSB1 c2VkIHRvZ2V0aGVyXEUvLAotCSdwZ19kdW1wYWxsOiBvcHRpb25zIC0tc3RhdGlzdGljcy1v bmx5IGFuZCAtLW5vLXN0YXRpc3RpY3MgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXInCi0pOwot Ci1jb21tYW5kX2ZhaWxzX2xpa2UoCi0JWyAncGdfZHVtcGFsbCcsICctLXN0YXRpc3RpY3Mn LCAnLS1uby1zdGF0aXN0aWNzJyBdLAotCXFyL1xRcGdfZHVtcGFsbDogZXJyb3I6IG9wdGlv bnMgLS1zdGF0aXN0aWNzIGFuZCAtLW5vLXN0YXRpc3RpY3MgY2Fubm90IGJlIHVzZWQgdG9n ZXRoZXJcRS8sCi0JJ3BnX2R1bXBhbGw6IG9wdGlvbnMgLS1zdGF0aXN0aWNzLW9ubHkgYW5k IC0tbm8tc3RhdGlzdGljcyBjYW5ub3QgYmUgdXNlZCB0b2dldGhlcicKLSk7Ci0KLWNvbW1h bmRfZmFpbHNfbGlrZSgKLQlbICdwZ19kdW1wYWxsJywgJy0tc3RhdGlzdGljcycsICctLXRh Ymxlc3BhY2VzLW9ubHknIF0sCi0JcXIvXFFwZ19kdW1wYWxsOiBlcnJvcjogb3B0aW9ucyAt LXN0YXRpc3RpY3MgYW5kIC10XC8tLXRhYmxlc3BhY2VzLW9ubHkgY2Fubm90IGJlIHVzZWQg dG9nZXRoZXJcRS8sCi0JJ3BnX2R1bXBhbGw6IG9wdGlvbnMgLS1zdGF0aXN0aWNzIGFuZCAt dFwvLS10YWJsZXNwYWNlcy1vbmx5IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyJwotKTsKLQot Y29tbWFuZF9mYWlsc19saWtlKAotCVsgJ3BnX2R1bXBhbGwnLCAnLS1mb3JtYXQnLCAneCcg XSwKLQlxci9cUXBnX2R1bXBhbGw6IGVycm9yOiB1bnJlY29nbml6ZWQgb3V0cHV0IGZvcm1h dCAieCI7XEUvLAotCSdwZ19kdW1wYWxsOiB1bnJlY29nbml6ZWQgb3V0cHV0IGZvcm1hdCcp OwotCi1jb21tYW5kX2ZhaWxzX2xpa2UoCi0JWyAncGdfZHVtcGFsbCcsICctLWZvcm1hdCcs ICdkJywgJy0tcmVzdHJpY3Qta2V5PXV1JywgJy1mIGR1bXBmaWxlJyBdLAotCXFyL1xRcGdf ZHVtcGFsbDogZXJyb3I6IG9wdGlvbiAtLXJlc3RyaWN0LWtleSBjYW4gb25seSBiZSB1c2Vk IHdpdGggLS1mb3JtYXQ9cGxhaW5cRS8sCi0JJ3BnX2R1bXBhbGw6IC0tcmVzdHJpY3Qta2V5 IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBwbGFpbiBkdW1wIGZvcm1hdCcpOwotCi1jb21tYW5k X2ZhaWxzX2xpa2UoCi0JWwotCQkncGdfZHVtcGFsbCcsICctLWZvcm1hdCcsICdkJywgJy0t Z2xvYmFscy1vbmx5JywKLQkJJy0tY2xlYW4nLCAnLWYnLCAnZHVtcGZpbGUnCi0JXSwKLQlx ci9cUXBnX2R1bXBhbGw6IGVycm9yOiBvcHRpb25zIC0tY2xlYW4gYW5kIC1nXC8tLWdsb2Jh bHMtb25seSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciBpbiBub24tdGV4dCBkdW1wXEUvLAot CSdwZ19kdW1wYWxsOiAtLWNsZWFuIGFuZCAtZy8tLWdsb2JhbHMtb25seSBjYW5ub3QgYmUg dXNlZCB0b2dldGhlciBpbiBub24tdGV4dCBkdW1wJwotKTsKLQotY29tbWFuZF9mYWlsc19s aWtlKAotCVsgJ3BnX2R1bXBhbGwnLCAnLS1mb3JtYXQnLCAnZCcgXSwKLQlxci9cUXBnX2R1 bXBhbGw6IGVycm9yOiBvcHRpb24gLUZcLy0tZm9ybWF0PWR8Y3x0IHJlcXVpcmVzIG9wdGlv biAtZlwvLS1maWxlXEUvLAotCSdwZ19kdW1wYWxsOiBub24tcGxhaW4gZm9ybWF0IHJlcXVp cmVzIC0tZmlsZSBvcHRpb24nKTsKLQotY29tbWFuZF9mYWlsc19saWtlKAotCVsgJ3BnX3Jl c3RvcmUnLCAnLS1leGNsdWRlLWRhdGFiYXNlPWZvbycsICctLWdsb2JhbHMtb25seScsICct ZCcsICd4eHgnIF0sCi0JcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9ucyAtLWV4Y2x1 ZGUtZGF0YWJhc2UgYW5kIC1nXC8tLWdsb2JhbHMtb25seSBjYW5ub3QgYmUgdXNlZCB0b2dl dGhlclxFLywKLQkncGdfcmVzdG9yZTogb3B0aW9ucyAtLWV4Y2x1ZGUtZGF0YWJhc2UgYW5k IC1nLy0tZ2xvYmFscy1vbmx5IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyJwotKTsKLQotY29t bWFuZF9mYWlsc19saWtlKAotCVsgJ3BnX3Jlc3RvcmUnLCAnLS1kYXRhLW9ubHknLCAnLS1n bG9iYWxzLW9ubHknLCAnLWQnLCAneHh4JyBdLAotCXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6 IG9wdGlvbnMgLWFcLy0tZGF0YS1vbmx5IGFuZCAtZ1wvLS1nbG9iYWxzLW9ubHkgY2Fubm90 IGJlIHVzZWQgdG9nZXRoZXJcRS8sCi0JJ3BnX3Jlc3RvcmU6IGVycm9yOiBvcHRpb25zIC1h Ly0tZGF0YS1vbmx5IGFuZCAtZy8tLWdsb2JhbHMtb25seSBjYW5ub3QgYmUgdXNlZCB0b2dl dGhlcicKLSk7Ci0KLWNvbW1hbmRfZmFpbHNfbGlrZSgKLQlbICdwZ19yZXN0b3JlJywgJy0t c2NoZW1hLW9ubHknLCAnLS1nbG9iYWxzLW9ubHknLCAnLWQnLCAneHh4JyBdLAotCXFyL1xR cGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbnMgLWdcLy0tZ2xvYmFscy1vbmx5IGFuZCAtc1wv LS1zY2hlbWEtb25seSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlclxFLywKLQkncGdfcmVzdG9y ZTogZXJyb3I6IG9wdGlvbnMgLWcvLS1nbG9iYWxzLW9ubHkgYW5kIC1zLy0tc2NoZW1hLW9u bHkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXInCi0pOwotCi1jb21tYW5kX2ZhaWxzX2xpa2Uo Ci0JWyAncGdfcmVzdG9yZScsICctLXN0YXRpc3RpY3Mtb25seScsICctLWdsb2JhbHMtb25s eScsICctZCcsICd4eHgnIF0sCi0JcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9ucyAt Z1wvLS1nbG9iYWxzLW9ubHkgYW5kIC0tc3RhdGlzdGljcy1vbmx5IGNhbm5vdCBiZSB1c2Vk IHRvZ2V0aGVyXEUvLAotCSdwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9ucyAtZy8tLWdsb2Jh bHMtb25seSBhbmQgLS1zdGF0aXN0aWNzLW9ubHkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIn Ci0pOwotCi1jb21tYW5kX2ZhaWxzX2xpa2UoCi0JWyAncGdfcmVzdG9yZScsICctLWV4Y2x1 ZGUtZGF0YWJhc2U9Zm9vJywgJy1kJywgJ3h4eCcsICdkdW1wZGlyJyBdLAotCXFyL1xRcGdf cmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2FuIGJlIHVzZWQg b25seSB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbFxF LywKLQknV2hlbiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGlzIHVzZWQgaW4gcGdfcmVz dG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcCcKLSk7Ci0KLWNvbW1hbmRfZmFpbHNfbGlrZSgK LQlbICdwZ19yZXN0b3JlJywgJy0tZ2xvYmFscy1vbmx5JywgJy1kJywgJ3h4eCcsICdkdW1w ZGlyJyBdLAotCXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtZ1wvLS1nbG9iYWxz LW9ubHkgY2FuIGJlIHVzZWQgb25seSB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0 ZWQgYnkgcGdfZHVtcGFsbFxFLywKLQknV2hlbiBvcHRpb24gLS1nbG9iYWxzLW9ubHkgaXMg dXNlZCBpbiBwZ19yZXN0b3JlIHdpdGggdGhlIGR1bXAgb2YgcGdfZHVtcCcKLSk7Ci0KLWNv bW1hbmRfZmFpbHNfbGlrZSgKLQlbCi0JCSdwZ19yZXN0b3JlJywgJy0tZ2xvYmFscy1vbmx5 JywgJy0tbm8tZ2xvYmFscycsICctZCcsICd4eHgnLAotCQknZHVtcGRpcicKLQldLAotCXFy L1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbnMgLWdcLy0tZ2xvYmFscy1vbmx5IGFuZCAt LW5vLWdsb2JhbHMgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXJcRS8sCi0JJ29wdGlvbnMgLS1u by1nbG9iYWxzIGFuZCAtLWdsb2JhbHMtb25seSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlcicp OwogZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvdC8wMDVf cGdfZHVtcF9maWx0ZXJmaWxlLnBsIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDA1X3BnX2R1bXBf ZmlsdGVyZmlsZS5wbAppbmRleCBjZWNmMDQ0MjA4OC4uNzJhN2M5MGM2YWYgMTAwNjQ0Ci0t LSBhL3NyYy9iaW4vcGdfZHVtcC90LzAwNV9wZ19kdW1wX2ZpbHRlcmZpbGUucGwKKysrIGIv c3JjL2Jpbi9wZ19kdW1wL3QvMDA1X3BnX2R1bXBfZmlsdGVyZmlsZS5wbApAQCAtNTcwLDgg KzU3MCw4IEBAIGNvbW1hbmRfZmFpbHNfbGlrZSgKIAkJJy0tZmlsdGVyJyA9PiAiJHRlbXBk aXIvaW5wdXRmaWxlLnR4dCIsCiAJCSctLWdsb2JhbHMtb25seScKIAldLAotCXFyL1xRcGdf ZHVtcGFsbDogZXJyb3I6IG9wdGlvbnMgLS1leGNsdWRlLWRhdGFiYXNlIGFuZCAtZ1wvLS1n bG9iYWxzLW9ubHkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXJcRS8sCi0JJ3BnX2R1bXBhbGw6 IG9wdGlvbnMgLS1leGNsdWRlLWRhdGFiYXNlIGFuZCAtZy8tLWdsb2JhbHMtb25seSBjYW5u b3QgYmUgdXNlZCB0b2dldGhlcicKKwlxci9cUXBnX2R1bXBhbGw6IGVycm9yOiBvcHRpb24g LS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWdcLy0t Z2xvYmFscy1vbmx5XEUvLAorCSdwZ19kdW1wYWxsOiBvcHRpb24gLS1leGNsdWRlLWRhdGFi YXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWcvLS1nbG9iYWxzLW9ubHknCiAp OwogCiAjIFRlc3QgaW52YWxpZCBmaWx0ZXIgY29tbWFuZApkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ19kdW1wL3QvMDA3X3BnX2R1bXBhbGwucGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDdf cGdfZHVtcGFsbC5wbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjJmMTFhMTNh OWEuLjAwMDAwMDAwMDAwCi0tLSBhL3NyYy9iaW4vcGdfZHVtcC90LzAwN19wZ19kdW1wYWxs LnBsCisrKyAvZGV2L251bGwKQEAgLTEsNjYxICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAy MDIxLTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCi0KLXVzZSBz dHJpY3Q7Ci11c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7Ci0KLXVzZSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyOwotdXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwotdXNlIFRl c3Q6Ok1vcmU7Ci0KLW15ICR0ZW1wZGlyID0gUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRl bXBkaXI7Ci1teSAkcnVuX2RiID0gJ3Bvc3RncmVzJzsKLW15ICRzZXAgPSAkd2luZG93c19v cyA/ICJcXCIgOiAiLyI7Ci0KLSMgVGFibGVzcGFjZSBsb2NhdGlvbnMgdXNlZCBieSAicmVz dG9yZV90YWJsZXNwYWNlIiB0ZXN0IGNhc2UuCi1teSAkdGFibGVzcGFjZTEgPSAiJHt0ZW1w ZGlyfSR7c2VwfXRibDEiOwotbXkgJHRhYmxlc3BhY2UyID0gIiR7dGVtcGRpcn0ke3NlcH10 YmwyIjsKLW1rZGlyKCR0YWJsZXNwYWNlMSkgfHwgZGllICJta2RpciAkdGFibGVzcGFjZTEg JCEiOwotbWtkaXIoJHRhYmxlc3BhY2UyKSB8fCBkaWUgIm1rZGlyICR0YWJsZXNwYWNlMiAk ISI7Ci0KLSMgZXNjYXBlIHRhYmxlc3BhY2UgbG9jYXRpb25zIG9uIFdpbmRvd3MuCi1teSAk dGFibGVzcGFjZTJfb3JpZyA9ICR0YWJsZXNwYWNlMjsKLSR0YWJsZXNwYWNlMSA9ICR3aW5k b3dzX29zID8gKCR0YWJsZXNwYWNlMSA9fiBzL1xcL1xcXFwvZ3IpIDogJHRhYmxlc3BhY2Ux OwotJHRhYmxlc3BhY2UyID0gJHdpbmRvd3Nfb3MgPyAoJHRhYmxlc3BhY2UyID1+IHMvXFwv XFxcXC9ncikgOiAkdGFibGVzcGFjZTI7Ci0KLSMgV2hlcmUgcGdfZHVtcGFsbCB3aWxsIGJl IGV4ZWN1dGVkLgotbXkgJG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXco J25vZGUnKTsKLSRub2RlLT5pbml0OwotJG5vZGUtPnN0YXJ0OwotCi0KLSMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwot IyBEZWZpbml0aW9uIG9mIHRoZSBwZ19kdW1wYWxsIHRlc3QgY2FzZXMgdG8gcnVuLgotIwot IyBFYWNoIG9mIHRoZXNlIHRlc3QgY2FzZXMgYXJlIG5hbWVkIGFuZCB0aG9zZSBuYW1lcyBh cmUgdXNlZCBmb3IgZmFpbAotIyByZXBvcnRpbmcgYW5kIGFsc28gdG8gc2F2ZSB0aGUgZHVt cCBhbmQgcmVzdG9yZSBpbmZvcm1hdGlvbiBuZWVkZWQgZm9yIHRoZQotIyB0ZXN0IHRvIGFz c2VydC4KLSMKLSMgVGhlICJzZXR1cF9zcWwiIGlzIGEgcHNxbCB2YWxpZCBzY3JpcHQgdGhh dCBjb250YWlucyBTUUwgY29tbWFuZHMgdG8gZXhlY3V0ZQotIyBiZWZvcmUgb2YgYWN0dWFs bHkgZXhlY3V0ZSB0aGUgdGVzdHMuIFRoZSBzZXR1cHMgYXJlIGFsbCBleGVjdXRlZCBiZWZv cmUgb2YKLSMgYW55IHRlc3QgZXhlY3V0aW9uLgotIwotIyBUaGUgImR1bXBfY21kIiBhbmQg InJlc3RvcmVfY21kIiBhcmUgdGhlIGNvbW1hbmRzIHRoYXQgd2lsbCBiZSBleGVjdXRlZC4g VGhlCi0jICJyZXN0b3JlX2NtZCIgbXVzdCBoYXZlIHRoZSAtLWZpbGUgZmxhZyB0byBzYXZl IHRoZSByZXN0b3JlIG91dHB1dCBzbyB0aGF0IHdlCi0jIGNhbiBhc3NlcnQgb24gaXQuCi0j Ci0jIFRoZSAibGlrZSIgYW5kICJ1bmxpa2UiIGlzIGEgcmVnZXhwIHRoYXQgaXMgdXNlZCB0 byBtYXRjaCB0aGUgcGdfcmVzdG9yZQotIyBvdXRwdXQuIEl0IG11c3QgaGF2ZSBhdCBsZWFz dCBvbmUgb2YgdGhlbiBmaWxsZWQgcGVyIHRlc3QgY2FzZXMgYnV0IGl0IGFsc28KLSMgY2Fu IGhhdmUgYm90aC4gU2VlICJleGNsdWRpbmdfZGF0YWJhc2VzIiB0ZXN0IGNhc2UgZm9yIGV4 YW1wbGUuCi1teSAlcGdkdW1wYWxsX3J1bnMgPSAoCi0JcmVzdG9yZV9yb2xlcyA9PiB7Ci0J CXNldHVwX3NxbCA9PiAnCi0JCUNSRUFURSBST0xFIGR1bXBhbGwgV0lUSCBFTkNSWVBURUQg UEFTU1dPUkQgXCdhZG1pblwnIFNVUEVSVVNFUjsKLQkJQ1JFQVRFIFJPTEUgZHVtcGFsbDIg V0lUSCBSRVBMSUNBVElPTiBDT05ORUNUSU9OIExJTUlUIDEwOycsCi0JCWR1bXBfY21kID0+ IFsKLQkJCSdwZ19kdW1wYWxsJywKLQkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCi0J CQknLS1maWxlJyA9PiAiJHRlbXBkaXIvcmVzdG9yZV9yb2xlcyIsCi0JCV0sCi0JCXJlc3Rv cmVfY21kID0+IFsKLQkJCSdwZ19yZXN0b3JlJywgJy1DJywKLQkJCSctLWZvcm1hdCcgPT4g J2RpcmVjdG9yeScsCi0JCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvcmVzdG9yZV9yb2xlcy5z cWwiLAotCQkJIiR0ZW1wZGlyL3Jlc3RvcmVfcm9sZXMiLAotCQldLAotCQlsaWtlID0+IHFy LwotCQkJXHMqXFFDUkVBVEUgUk9MRSBkdW1wYWxsMjtcRQotCQkJXHMqXFFBTFRFUiBST0xF IGR1bXBhbGwyIFdJVEggTk9TVVBFUlVTRVIgSU5IRVJJVCBOT0NSRUFURVJPTEUgTk9DUkVB VEVEQiBOT0xPR0lOIFJFUExJQ0FUSU9OIE5PQllQQVNTUkxTIENPTk5FQ1RJT04gTElNSVQg MTA7XEUKLQkJL3htCi0JfSwKLQotCXJlc3RvcmVfdGFibGVzcGFjZSA9PiB7Ci0JCXNldHVw X3NxbCA9PiAiCi0JCUNSRUFURSBST0xFIHRhcDsKLQkJQ1JFQVRFIFRBQkxFU1BBQ0UgdGJs MSBPV05FUiB0YXAgTE9DQVRJT04gJyR0YWJsZXNwYWNlMSc7Ci0JCUNSRUFURSBUQUJMRVNQ QUNFIHRibDIgT1dORVIgdGFwIExPQ0FUSU9OICckdGFibGVzcGFjZTInIFdJVEggKHNlcV9w YWdlX2Nvc3Q9MS4wKTsiLAotCQlkdW1wX2NtZCA9PiBbCi0JCQkncGdfZHVtcGFsbCcsCi0J CQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAotCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGly L3Jlc3RvcmVfdGFibGVzcGFjZSIsCi0JCV0sCi0JCXJlc3RvcmVfY21kID0+IFsKLQkJCSdw Z19yZXN0b3JlJywgJy1DJywKLQkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCi0JCQkn LS1maWxlJyA9PiAiJHRlbXBkaXIvcmVzdG9yZV90YWJsZXNwYWNlLnNxbCIsCi0JCQkiJHRl bXBkaXIvcmVzdG9yZV90YWJsZXNwYWNlIiwKLQkJXSwKLQkJIyBNYXRjaCAiRSIgYXMgb3B0 aW9uYWwgc2luY2UgaXQgaXMgYWRkZWQgb24gTE9DQVRJT04gd2hlbiBydW5uaW5nIG9uCi0J CSMgV2luZG93cy4KLQkJbGlrZSA9PiBxci9eCi0JCQlcblxRQ1JFQVRFIFRBQkxFU1BBQ0Ug dGJsMiBPV05FUiB0YXAgTE9DQVRJT04gXEUoPzpFKT9cUSckdGFibGVzcGFjZTJfb3JpZyc7 XEUKLQkJCVxuXFFBTFRFUiBUQUJMRVNQQUNFIHRibDIgU0VUIChzZXFfcGFnZV9jb3N0PTEu MCk7XEUKLQkJL3htLAotCX0sCi0KLQlyZXN0b3JlX2dyYW50cyA9PiB7Ci0JCXNldHVwX3Nx bCA9PiAiCi0JCUNSRUFURSBEQVRBQkFTRSB0YXBncmFudHNkYjsKLQkJQ1JFQVRFIFNDSEVN QSBwcml2YXRlOwotCQlDUkVBVEUgU0VRVUVOQ0Ugc2VyaWFsIFNUQVJUIDEwMTsKLQkJQ1JF QVRFIEZVTkNUSU9OIGZuKCkgUkVUVVJOUyB2b2lkIEFTIFwkXCQKLQkJQkVHSU4KLQkJRU5E OwotCQlcJFwkIExBTkdVQUdFIHBscGdzcWw7Ci0JCUNSRUFURSBST0xFIHN1cGVyOwotCQlD UkVBVEUgUk9MRSBncmFudDE7Ci0JCUNSRUFURSBST0xFIGdyYW50MjsKLQkJQ1JFQVRFIFJP TEUgZ3JhbnQzOwotCQlDUkVBVEUgUk9MRSBncmFudDQ7Ci0JCUNSRUFURSBST0xFIGdyYW50 NTsKLQkJQ1JFQVRFIFJPTEUgZ3JhbnQ2OwotCQlDUkVBVEUgUk9MRSBncmFudDc7Ci0JCUNS RUFURSBST0xFIGdyYW50ODsKLQotCQlDUkVBVEUgVEFCTEUgdCAoaWQgaW50KTsKLQkJSU5T RVJUIElOVE8gdCBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOwotCi0JCUdSQU5UIFNFTEVD VCBPTiBUQUJMRSB0IFRPIGdyYW50MTsKLQkJR1JBTlQgSU5TRVJUIE9OIFRBQkxFIHQgVE8g Z3JhbnQyOwotCQlHUkFOVCBBTEwgUFJJVklMRUdFUyBPTiBUQUJMRSB0IHRvIGdyYW50MzsK LQkJR1JBTlQgQ09OTkVDVCwgQ1JFQVRFIE9OIERBVEFCQVNFIHRhcGdyYW50c2RiIFRPIGdy YW50NDsKLQkJR1JBTlQgVVNBR0UsIENSRUFURSBPTiBTQ0hFTUEgcHJpdmF0ZSBUTyBncmFu dDU7Ci0JCUdSQU5UIFVTQUdFLCBTRUxFQ1QsIFVQREFURSBPTiBTRVFVRU5DRSBzZXJpYWwg VE8gZ3JhbnQ2OwotCQlHUkFOVCBzdXBlciBUTyBncmFudDc7Ci0JCUdSQU5UIEVYRUNVVEUg T04gRlVOQ1RJT04gZm4oKSBUTyBncmFudDg7Ci0JCSIsCi0JCWR1bXBfY21kID0+IFsKLQkJ CSdwZ19kdW1wYWxsJywKLQkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCi0JCQknLS1m aWxlJyA9PiAiJHRlbXBkaXIvcmVzdG9yZV9ncmFudHMiLAotCQldLAotCQlyZXN0b3JlX2Nt ZCA9PiBbCi0JCQkncGdfcmVzdG9yZScsICctQycsCi0JCQknLS1mb3JtYXQnID0+ICdkaXJl Y3RvcnknLAotCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL3Jlc3RvcmVfZ3JhbnRzLnNxbCIs Ci0JCQkiJHRlbXBkaXIvcmVzdG9yZV9ncmFudHMiLAotCQldLAotCQlsaWtlID0+IHFyL14K LQkJCVxuXFFHUkFOVCBBTEwgT04gU0NIRU1BIHByaXZhdGUgVE8gZ3JhbnQ1O1xFCi0JCQko LipcbikqCi0JCQlcblxRR1JBTlQgQUxMIE9OIEZVTkNUSU9OIHB1YmxpYy5mbigpIFRPIGdy YW50ODtcRQotCQkJKC4qXG4pKgotCQkJXG5cUUdSQU5UIEFMTCBPTiBTRVFVRU5DRSBwdWJs aWMuc2VyaWFsIFRPIGdyYW50NjtcRQotCQkJKC4qXG4pKgotCQkJXG5cUUdSQU5UIFNFTEVD VCBPTiBUQUJMRSBwdWJsaWMudCBUTyBncmFudDE7XEUKLQkJCVxuXFFHUkFOVCBJTlNFUlQg T04gVEFCTEUgcHVibGljLnQgVE8gZ3JhbnQyO1xFCi0JCQlcblxRR1JBTlQgQUxMIE9OIFRB QkxFIHB1YmxpYy50IFRPIGdyYW50MztcRQotCQkJKC4qXG4pKgotCQkJXG5cUUdSQU5UIENS RUFURSxDT05ORUNUIE9OIERBVEFCQVNFIHRhcGdyYW50c2RiIFRPIGdyYW50NDtcRQotCQkv eG0sCi0JfSwKLQotCWV4Y2x1ZGluZ19kYXRhYmFzZXMgPT4gewotCQlzZXR1cF9zcWwgPT4g J0NSRUFURSBEQVRBQkFTRSBkYjE7Ci0JCVxjIGRiMQotCQlDUkVBVEUgVEFCTEUgdDEgKGlk IGludCk7Ci0JCUlOU0VSVCBJTlRPIHQxIFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7Ci0J CUNSRUFURSBUQUJMRSB0MiAoaWQgaW50KTsKLQkJSU5TRVJUIElOVE8gdDIgVkFMVUVTICgx KSwgKDIpLCAoMyksICg0KTsKLQotCQlDUkVBVEUgREFUQUJBU0UgZGIyOwotCQlcYyBkYjIK LQkJQ1JFQVRFIFRBQkxFIHQzIChpZCBpbnQpOwotCQlJTlNFUlQgSU5UTyB0MyBWQUxVRVMg KDEpLCAoMiksICgzKSwgKDQpOwotCQlDUkVBVEUgVEFCTEUgdDQgKGlkIGludCk7Ci0JCUlO U0VSVCBJTlRPIHQ0IFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7Ci0KLQkJQ1JFQVRFIERB VEFCQVNFIGRiZXgzOwotCQlcYyBkYmV4MwotCQlDUkVBVEUgVEFCTEUgdDUgKGlkIGludCk7 Ci0JCUlOU0VSVCBJTlRPIHQ1IFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7Ci0JCUNSRUFU RSBUQUJMRSB0NiAoaWQgaW50KTsKLQkJSU5TRVJUIElOVE8gdDYgVkFMVUVTICgxKSwgKDIp LCAoMyksICg0KTsKLQotCQlDUkVBVEUgREFUQUJBU0UgZGJleDQ7Ci0JCVxjIGRiZXg0Ci0J CUNSRUFURSBUQUJMRSB0NyAoaWQgaW50KTsKLQkJSU5TRVJUIElOVE8gdDcgVkFMVUVTICgx KSwgKDIpLCAoMyksICg0KTsKLQkJQ1JFQVRFIFRBQkxFIHQ4IChpZCBpbnQpOwotCQlJTlNF UlQgSU5UTyB0OCBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOwotCi0JCUNSRUFURSBEQVRB QkFTRSBkYjU7Ci0JCVxjIGRiNQotCQlDUkVBVEUgVEFCTEUgdDkgKGlkIGludCk7Ci0JCUlO U0VSVCBJTlRPIHQ5IFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7Ci0JCUNSRUFURSBUQUJM RSB0MTAgKGlkIGludCk7Ci0JCUlOU0VSVCBJTlRPIHQxMCBWQUxVRVMgKDEpLCAoMiksICgz KSwgKDQpOwotCQknLAotCQlkdW1wX2NtZCA9PiBbCi0JCQkncGdfZHVtcGFsbCcsCi0JCQkn LS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAotCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2V4 Y2x1ZGluZ19kYXRhYmFzZXMiLAotCQkJJy0tZXhjbHVkZS1kYXRhYmFzZScgPT4gJ2RiZXgq JywKLQkJXSwKLQkJcmVzdG9yZV9jbWQgPT4gWwotCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAot CQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKLQkJCSctLWZpbGUnID0+ICIkdGVtcGRp ci9leGNsdWRpbmdfZGF0YWJhc2VzLnNxbCIsCi0JCQknLS1leGNsdWRlLWRhdGFiYXNlJyA9 PiAnZGI1JywKLQkJCSIkdGVtcGRpci9leGNsdWRpbmdfZGF0YWJhc2VzIiwKLQkJXSwKLQkJ bGlrZSA9PiBxci9eCi0JCQlcblxRQ1JFQVRFIERBVEFCQVNFIGRiMVxFCi0JCQkoLipcbikq Ci0JCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50MSAoXEUKLQkJCSguKlxuKSoKLQkJCVxu XFFDUkVBVEUgVEFCTEUgcHVibGljLnQyIChcRQotCQkJKC4qXG4pKgotCQkJXG5cUUNSRUFU RSBEQVRBQkFTRSBkYjJcRQotCQkJKC4qXG4pKgotCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJs aWMudDMgKFxFCi0JCQkoLipcbikqCi0JCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50NCAo L3htLAotCQl1bmxpa2UgPT4gcXIvXgotCQkJXG5cUUNSRUFURSBEQVRBQkFTRSBkYjNcRQot CQkJKC4qXG4pKgotCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDUgKFxFCi0JCQkoLipc bikqCi0JCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50NiAoXEUKLQkJCSguKlxuKSoKLQkJ CVxuXFFDUkVBVEUgREFUQUJBU0UgZGI0XEUKLQkJCSguKlxuKSoKLQkJCVxuXFFDUkVBVEUg VEFCTEUgcHVibGljLnQ3IChcRQotCQkJKC4qXG4pKgotCQkJXG5cUUNSRUFURSBUQUJMRSBw dWJsaWMudDggKFxFCi0JCQlcblxRQ1JFQVRFIERBVEFCQVNFIGRiNVxFCi0JCQkoLipcbikq Ci0JCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50OSAoXEUKLQkJCSguKlxuKSoKLQkJCVxu XFFDUkVBVEUgVEFCTEUgcHVibGljLnQxMCAoXEUKLQkJL3htLAotCX0sCi0KLQlmb3JtYXRf ZGlyZWN0b3J5ID0+IHsKLQkJc2V0dXBfc3FsID0+ICJDUkVBVEUgVEFCTEUgZm9ybWF0X2Rp cmVjdG9yeShhIGludCwgYiBib29sZWFuLCBjIHRleHQpOwotCQlJTlNFUlQgSU5UTyBmb3Jt YXRfZGlyZWN0b3J5IFZBTFVFUyAoMSwgdHJ1ZSwgJ25hbWUxJyksICgyLCBmYWxzZSwgJ25h bWUyJyk7IiwKLQkJZHVtcF9jbWQgPT4gWwotCQkJJ3BnX2R1bXBhbGwnLAotCQkJJy0tZm9y bWF0JyA9PiAnZGlyZWN0b3J5JywKLQkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9mb3JtYXRf ZGlyZWN0b3J5IiwKLQkJXSwKLQkJcmVzdG9yZV9jbWQgPT4gWwotCQkJJ3BnX3Jlc3RvcmUn LCAnLUMnLAotCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKLQkJCSctLWZpbGUnID0+ ICIkdGVtcGRpci9mb3JtYXRfZGlyZWN0b3J5LnNxbCIsCi0JCQkiJHRlbXBkaXIvZm9ybWF0 X2RpcmVjdG9yeSIsCi0JCV0sCi0JCWxpa2UgPT4gcXIvXlxuXFFDT1BZIHB1YmxpYy5mb3Jt YXRfZGlyZWN0b3J5IChhLCBiLCBjKSBGUk9NIHN0ZGluOy94bQotCX0sCi0KLQlmb3JtYXRf dGFyID0+IHsKLQkJc2V0dXBfc3FsID0+ICJDUkVBVEUgVEFCTEUgZm9ybWF0X3RhcihhIGlu dCwgYiBib29sZWFuLCBjIHRleHQpOwotCQlJTlNFUlQgSU5UTyBmb3JtYXRfdGFyIFZBTFVF UyAoMSwgZmFsc2UsICduYW1lMycpLCAoMiwgdHJ1ZSwgJ25hbWU0Jyk7IiwKLQkJZHVtcF9j bWQgPT4gWwotCQkJJ3BnX2R1bXBhbGwnLAotCQkJJy0tZm9ybWF0JyA9PiAndGFyJywKLQkJ CSctLWZpbGUnID0+ICIkdGVtcGRpci9mb3JtYXRfdGFyIiwKLQkJXSwKLQkJcmVzdG9yZV9j bWQgPT4gWwotCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAotCQkJJy0tZm9ybWF0JyA9PiAndGFy JywKLQkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9mb3JtYXRfdGFyLnNxbCIsCi0JCQkiJHRl bXBkaXIvZm9ybWF0X3RhciIsCi0JCV0sCi0JCWxpa2UgPT4gcXIvXlxuXFFDT1BZIHB1Ymxp Yy5mb3JtYXRfdGFyIChhLCBiLCBjKSBGUk9NIHN0ZGluOy94bQotCX0sCi0KLQlmb3JtYXRf Y3VzdG9tID0+IHsKLQkJc2V0dXBfc3FsID0+ICJDUkVBVEUgVEFCTEUgZm9ybWF0X2N1c3Rv bShhIGludCwgYiBib29sZWFuLCBjIHRleHQpOwotCQlJTlNFUlQgSU5UTyBmb3JtYXRfY3Vz dG9tIFZBTFVFUyAoMSwgZmFsc2UsICduYW1lNScpLCAoMiwgdHJ1ZSwgJ25hbWU2Jyk7IiwK LQkJZHVtcF9jbWQgPT4gWwotCQkJJ3BnX2R1bXBhbGwnLAotCQkJJy0tZm9ybWF0JyA9PiAn Y3VzdG9tJywKLQkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwKLQkJ XSwKLQkJcmVzdG9yZV9jbWQgPT4gWwotCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAotCQkJJy0t Zm9ybWF0JyA9PiAnY3VzdG9tJywKLQkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9mb3JtYXRf Y3VzdG9tLnNxbCIsCi0JCQkiJHRlbXBkaXIvZm9ybWF0X2N1c3RvbSIsCi0JCV0sCi0JCWxp a2UgPT4gcXIvXiBcblxRQ09QWSBwdWJsaWMuZm9ybWF0X2N1c3RvbSAoYSwgYiwgYykgRlJP TSBzdGRpbjsveG0KLQl9LAotCi0JZHVtcF9nbG9iYWxzX29ubHkgPT4gewotCQlzZXR1cF9z cWwgPT4gIkNSRUFURSBUQUJMRSBmb3JtYXRfZGlyKGEgaW50LCBiIGJvb2xlYW4sIGMgdGV4 dCk7Ci0JCUlOU0VSVCBJTlRPIGZvcm1hdF9kaXIgVkFMVUVTICgxLCBmYWxzZSwgJ25hbWU1 JyksICgyLCB0cnVlLCAnbmFtZTYnKTsiLAotCQlkdW1wX2NtZCA9PiBbCi0JCQkncGdfZHVt cGFsbCcsCi0JCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAotCQkJJy0tZ2xvYmFscy1v bmx5JywKLQkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9kdW1wX2dsb2JhbHNfb25seSIsCi0J CV0sCi0JCXJlc3RvcmVfY21kID0+IFsKLQkJCSdwZ19yZXN0b3JlJywgJy1DJywgJy0tZ2xv YmFscy1vbmx5JywKLQkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCi0JCQknLS1maWxl JyA9PiAiJHRlbXBkaXIvZHVtcF9nbG9iYWxzX29ubHkuc3FsIiwKLQkJCSIkdGVtcGRpci9k dW1wX2dsb2JhbHNfb25seSIsCi0JCV0sCi0JCWxpa2UgPT4gcXIvCi0gICAgICAgICAgICBe XHMqXFFDUkVBVEUgUk9MRSBkdW1wYWxsO1xFXHMqXG4KLQkJCS94bQotCX0sCi0KLQlyZXN0 b3JlX25vX2dsb2JhbHMgPT4gewotCQlzZXR1cF9zcWwgPT4gIkNSRUFURSBUQUJMRSBub19n bG9iYWxzX3Rlc3QoYSBpbnQsIGIgdGV4dCk7Ci0JCUlOU0VSVCBJTlRPIG5vX2dsb2JhbHNf dGVzdCBWQUxVRVMgKDEsICdoZWxsbycpLCAoMiwgJ3dvcmxkJyk7IiwKLQkJZHVtcF9jbWQg PT4gWwotCQkJJ3BnX2R1bXBhbGwnLAotCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywK LQkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9yZXN0b3JlX25vX2dsb2JhbHMiLAotCQldLAot CQlyZXN0b3JlX2NtZCA9PiBbCi0JCQkncGdfcmVzdG9yZScsICctQycsICctLW5vLWdsb2Jh bHMnLAotCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKLQkJCSctLWZpbGUnID0+ICIk dGVtcGRpci9yZXN0b3JlX25vX2dsb2JhbHMuc3FsIiwKLQkJCSIkdGVtcGRpci9yZXN0b3Jl X25vX2dsb2JhbHMiLAotCQldLAotCQlsaWtlID0+IHFyL15cblxRQ09QWSBwdWJsaWMubm9f Z2xvYmFsc190ZXN0IChhLCBiKSBGUk9NIHN0ZGluO1xFL3htLAotCQl1bmxpa2UgPT4gcXIv XlxRQ1JFQVRFIFJPTEUgZHVtcGFsbDtcRS94bSwKLQl9LCk7Ci0KLSMgRmlyc3QgZXhlY3V0 ZSB0aGUgc2V0dXBfc3FsCi1mb3JlYWNoIG15ICRydW4gKHNvcnQga2V5cyAlcGdkdW1wYWxs X3J1bnMpCi17Ci0JaWYgKCRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e3NldHVwX3NxbH0pCi0J ewotCQkkbm9kZS0+c2FmZV9wc3FsKCRydW5fZGIsICRwZ2R1bXBhbGxfcnVuc3skcnVufS0+ e3NldHVwX3NxbH0pOwotCX0KLX0KLQotIyBFeGVjdXRlIHRoZSB0ZXN0cwotZm9yZWFjaCBt eSAkcnVuIChzb3J0IGtleXMgJXBnZHVtcGFsbF9ydW5zKQotewotCSMgQ3JlYXRlIGEgbmV3 IHRhcmdldCBjbHVzdGVyIHRvIHBnX3Jlc3RvcmUgZWFjaCB0ZXN0IGNhc2UgcnVuIHNvIHRo YXQgd2UKLQkjIGRvbid0IG5lZWQgdG8gdGFrZSBjYXJlIG9mIHRoZSBjbGVhbnVwIGZyb20g dGhlIHRhcmdldCBjbHVzdGVyIGFmdGVyIGVhY2gKLQkjIHJ1bi4KLQlteSAkdGFyZ2V0X25v ZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoInRhcmdldF8kcnVuIik7Ci0J JHRhcmdldF9ub2RlLT5pbml0OwotCSR0YXJnZXRfbm9kZS0+c3RhcnQ7Ci0KLQkjIER1bXBh bGwgZnJvbSBub2RlIGNsdXN0ZXIuCi0JJG5vZGUtPmNvbW1hbmRfb2soXEB7ICRwZ2R1bXBh bGxfcnVuc3skcnVufS0+e2R1bXBfY21kfSB9LAotCQkiJHJ1bjogcGdfZHVtcGFsbCBydW5z Iik7Ci0KLQkjIFJlc3RvcmUgdGhlIGR1bXAgb24gInRhcmdldF9ub2RlIiBjbHVzdGVyLgot CW15IEByZXN0b3JlX2NtZCA9ICgKLQkJQHsgJHBnZHVtcGFsbF9ydW5zeyRydW59LT57cmVz dG9yZV9jbWR9IH0sCi0JCSctLWhvc3QnLCAkdGFyZ2V0X25vZGUtPmhvc3QsICctLXBvcnQn LCAkdGFyZ2V0X25vZGUtPnBvcnQpOwotCi0JbXkgKCRzdGRvdXQsICRzdGRlcnIpID0gcnVu X2NvbW1hbmQoXEByZXN0b3JlX2NtZCk7Ci0KLQkjIHBnX3Jlc3RvcmUgLS1maWxlIG91dHB1 dCBmaWxlLgotCW15ICRvdXRwdXRfZmlsZSA9IHNsdXJwX2ZpbGUoIiR0ZW1wZGlyLyR7cnVu fS5zcWwiKTsKLQotCWlmICggICAhKCRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e2xpa2V9KQot CQkmJiAhKCRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e3VubGlrZX0pKQotCXsKLQkJZGllICJt aXNzaW5nIFwibGlrZVwiIG9yIFwidW5saWtlXCIgaW4gdGVzdCBcIiRydW5cIiI7Ci0JfQot Ci0JaWYgKCRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e2xpa2V9KQotCXsKLQkJbGlrZSgkb3V0 cHV0X2ZpbGUsICRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e2xpa2V9LCAic2hvdWxkIGR1bXAg JHJ1biIpOwotCX0KLQotCWlmICgkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPnt1bmxpa2V9KQot CXsKLQkJdW5saWtlKAotCQkJJG91dHB1dF9maWxlLAotCQkJJHBnZHVtcGFsbF9ydW5zeyRy dW59LT57dW5saWtlfSwKLQkJCSJzaG91bGQgbm90IGR1bXAgJHJ1biIpOwotCX0KLQotCSR0 YXJnZXRfbm9kZS0+c3RvcDsKLQkkdGFyZ2V0X25vZGUtPmNsZWFuX25vZGU7Ci19Ci0KLSMg U29tZSBuZWdhdGl2ZSB0ZXN0IGNhc2Ugd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwgYW5kIHJl c3RvcmUgdXNpbmcgcGdfcmVzdG9yZQotIyByZXBvcnQgYW4gZXJyb3Igd2hlbiAtQyBpcyBu b3QgdXNlZCBpbiBwZ19yZXN0b3JlIHdpdGggZHVtcCBvZiBwZ19kdW1wYWxsCi0kbm9kZS0+ Y29tbWFuZF9mYWlsc19saWtlKAotCVsKLQkJJ3BnX3Jlc3RvcmUnLAotCQkiJHRlbXBkaXIv Zm9ybWF0X2N1c3RvbSIsCi0JCSctLWZvcm1hdCcgPT4gJ2N1c3RvbScsCi0JCSctLWZpbGUn ID0+ICIkdGVtcGRpci9lcnJvcl90ZXN0LnNxbCIsCi0JXSwKLQlxci9cUXBnX3Jlc3RvcmU6 IGVycm9yOiBvcHRpb24gLUNcLy0tY3JlYXRlIG11c3QgYmUgc3BlY2lmaWVkIHdoZW4gcmVz dG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsXEUvLAotCSdXaGVuIC1D IGlzIG5vdCB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwnKTsK LQotIyByZXBvcnQgYW4gZXJyb3Igd2hlbiBcbC8tLWxpc3Qgb3B0aW9uIGlzIHVzZWQgd2l0 aCBkdW1wIG9mIHBnX2R1bXBhbGwKLSRub2RlLT5jb21tYW5kX2ZhaWxzX2xpa2UoCi0JWwot CQkncGdfcmVzdG9yZScsCi0JCSIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwgJy1DJywKLQkJ Jy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKLQkJJy0tbGlzdCcsCi0JCSctLWZpbGUnID0+ICIk dGVtcGRpci9lcnJvcl90ZXN0LnNxbCIsCi0JXSwKLQlxci9cUXBnX3Jlc3RvcmU6IGVycm9y OiBvcHRpb24gLWxcLy0tbGlzdCBjYW5ub3QgYmUgdXNlZCB3aGVuIHJlc3RvcmluZyBhbiBh cmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbFxFLywKLQknV2hlbiAtLWxpc3QgaXMgdXNl ZCBpbiBwZ19yZXN0b3JlIHdpdGggZHVtcCBvZiBwZ19kdW1wYWxsJyk7Ci0KLSMgcmVwb3J0 IGFuIGVycm9yIHdoZW4gLUwvLS11c2UtbGlzdCBvcHRpb24gaXMgdXNlZCB3aXRoIGR1bXAg b2YgcGdfZHVtcGFsbAotJG5vZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKLQlbCi0JCSdwZ19y ZXN0b3JlJywKLQkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLCAnLUMnLAotCQknLS1mb3Jt YXQnID0+ICdjdXN0b20nLAotCQknLS11c2UtbGlzdCcgPT4gJ3VzZScsCi0JCSctLWZpbGUn ID0+ICIkdGVtcGRpci9lcnJvcl90ZXN0LnNxbCIsCi0JXSwKLQlxci9cUXBnX3Jlc3RvcmU6 IGVycm9yOiBvcHRpb24gLUxcLy0tdXNlLWxpc3QgY2Fubm90IGJlIHVzZWQgd2hlbiByZXN0 b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGxcRS8sCi0JJ1doZW4gLUwv LS11c2UtbGlzdCBpcyB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXBh bGwnKTsKLQotIyByZXBvcnQgYW4gZXJyb3Igd2hlbiAtLXN0cmljdC1uYW1lcyBvcHRpb24g aXMgdXNlZCB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbAotJG5vZGUtPmNvbW1hbmRfZmFpbHNf bGlrZSgKLQlbCi0JCSdwZ19yZXN0b3JlJywKLQkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20i LCAnLUMnLAotCQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAotCQknLS1zdHJpY3QtbmFtZXMn LAotCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXJyb3JfdGVzdC5zcWwiLAotCV0sCi0JcXIv XFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9uIC0tc3RyaWN0LW5hbWVzIGNhbm5vdCBiZSB1 c2VkIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsXEUv LAotCSdXaGVuIC0tc3RyaWN0LW5hbWVzIGlzIHVzZWQgaW4gcGdfcmVzdG9yZSB3aXRoIGR1 bXAgb2YgcGdfZHVtcGFsbCcpOwotCi0jIHJlcG9ydCBhbiBlcnJvciB3aGVuIC0tY2xlYW4g YW5kIC1nLy0tZ2xvYmFscy1vbmx5IGFyZSB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1w IG9mIHBnX2R1bXBhbGwKLSRub2RlLT5jb21tYW5kX2ZhaWxzX2xpa2UoCi0JWwotCQkncGdf cmVzdG9yZScsCi0JCSIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwgJy1DJywKLQkJJy0tZm9y bWF0JyA9PiAnY3VzdG9tJywKLQkJJy0tY2xlYW4nLAotCQknLS1nbG9iYWxzLW9ubHknLAot CQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXJyb3JfdGVzdC5zcWwiLAotCV0sCi0JcXIvXFFw Z19yZXN0b3JlOiBlcnJvcjogb3B0aW9ucyAtLWNsZWFuIGFuZCAtZ1wvLS1nbG9iYWxzLW9u bHkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBj cmVhdGVkIGJ5IHBnX2R1bXBhbGxcRS8sCi0JJ1doZW4gLS1jbGVhbiBhbmQgLWcvLS1nbG9i YWxzLW9ubHkgYXJlIHVzZWQgaW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFs bCcKLSk7Ci0KLSMgcmVwb3J0IGFuIGVycm9yIHdoZW4gbm9uLWV4aXN0IGRhdGFiYXNlIGlz IGdpdmVuIHdpdGggLWQgb3B0aW9uCi0kbm9kZS0+Y29tbWFuZF9mYWlsc19saWtlKAotCVsK LQkJJ3BnX3Jlc3RvcmUnLAotCQkiJHRlbXBkaXIvZm9ybWF0X2N1c3RvbSIsICctQycsCi0J CSctLWZvcm1hdCcgPT4gJ2N1c3RvbScsCi0JCSctZCcgPT4gJ2RicHEnLAotCV0sCi0JcXIv XFFGQVRBTDogIGRhdGFiYXNlICJkYnBxIiBkb2VzIG5vdCBleGlzdFxFLywKLQknV2hlbiBu b24tZXhpc3RlbnQgZGF0YWJhc2UgaXMgZ2l2ZW4gd2l0aCAtZCBvcHRpb24gaW4gcGdfcmVz dG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbCcKLSk7Ci0KLSMgcmVwb3J0IGFuIGVycm9y IHdoZW4gLS1uby1zY2hlbWEgaXMgdXNlZCB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbAotJG5v ZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKLQlbCi0JCSdwZ19yZXN0b3JlJywKLQkJIiR0ZW1w ZGlyL2Zvcm1hdF9jdXN0b20iLCAnLUMnLAotCQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAot CQknLS1uby1zY2hlbWEnLAotCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXJyb3JfdGVzdC5z cWwiLAotCV0sCi0JcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9uIC0tbm8tc2NoZW1h IGNhbm5vdCBiZSB1c2VkIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBw Z19kdW1wYWxsXEUvLAotCSdXaGVuIC0tbm8tc2NoZW1hIGlzIHVzZWQgaW4gcGdfcmVzdG9y ZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbCcpOwotCi0jIHJlcG9ydCBhbiBlcnJvciB3aGVu IC0tZGF0YS1vbmx5IGlzIHVzZWQgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwKLSRub2RlLT5j b21tYW5kX2ZhaWxzX2xpa2UoCi0JWwotCQkncGdfcmVzdG9yZScsCi0JCSIkdGVtcGRpci9m b3JtYXRfY3VzdG9tIiwgJy1DJywKLQkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKLQkJJy0t ZGF0YS1vbmx5JywKLQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Vycm9yX3Rlc3Quc3FsIiwK LQldLAotCXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtYVwvLS1kYXRhLW9ubHkg Y2Fubm90IGJlIHVzZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBn X2R1bXBhbGxcRS8sCi0JJ1doZW4gLS1kYXRhLW9ubHkgaXMgdXNlZCBpbiBwZ19yZXN0b3Jl IHdpdGggZHVtcCBvZiBwZ19kdW1wYWxsJyk7Ci0KLSMgcmVwb3J0IGFuIGVycm9yIHdoZW4g LS1zdGF0aXN0aWNzLW9ubHkgaXMgdXNlZCB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbAotJG5v ZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKLQlbCi0JCSdwZ19yZXN0b3JlJywKLQkJIiR0ZW1w ZGlyL2Zvcm1hdF9jdXN0b20iLCAnLUMnLAotCQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAot CQknLS1zdGF0aXN0aWNzLW9ubHknLAotCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXJyb3Jf dGVzdC5zcWwiLAotCV0sCi0JcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9uIC0tc3Rh dGlzdGljcy1vbmx5IGNhbm5vdCBiZSB1c2VkIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUg Y3JlYXRlZCBieSBwZ19kdW1wYWxsXEUvLAotCSdXaGVuIC0tc3RhdGlzdGljcy1vbmx5IGlz IHVzZWQgaW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbCcpOwotCi0jIHJl cG9ydCBhbiBlcnJvciB3aGVuIC0tc2VjdGlvbiBleGNsdWRlcyBwcmUtZGF0YSB3aXRoIGR1 bXAgb2YgcGdfZHVtcGFsbAotJG5vZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKLQlbCi0JCSdw Z19yZXN0b3JlJywKLQkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLCAnLUMnLAotCQknLS1m b3JtYXQnID0+ICdjdXN0b20nLAotCQknLS1zZWN0aW9uJyA9PiAncG9zdC1kYXRhJywKLQkJ Jy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Vycm9yX3Rlc3Quc3FsIiwKLQldLAotCXFyL1xRcGdf cmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtLXNlY3Rpb24gY2Fubm90IGV4Y2x1ZGUgLS1wcmUt ZGF0YSB3aGVuIHJlc3RvcmluZyBhIHBnX2R1bXBhbGwgYXJjaGl2ZVxFLywKLQknV2hlbiAt LXNlY3Rpb249cG9zdC1kYXRhIGlzIHVzZWQgaW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAgb2Yg cGdfZHVtcGFsbCcpOwotCi0jIHJlcG9ydCBhbiBlcnJvciB3aGVuIC0tZ2xvYmFscy1vbmx5 IGFuZCAtLWRhdGEtb25seSBhcmUgdXNlZCB0b2dldGhlcgotJG5vZGUtPmNvbW1hbmRfZmFp bHNfbGlrZSgKLQlbCi0JCSdwZ19yZXN0b3JlJywKLQkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0 b20iLCAnLUMnLAotCQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAotCQknLS1nbG9iYWxzLW9u bHknLAotCQknLS1kYXRhLW9ubHknLAotCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXJyb3Jf dGVzdC5zcWwiLAotCV0sCi0JcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9ucyAtYVwv LS1kYXRhLW9ubHkgYW5kIC1nXC8tLWdsb2JhbHMtb25seSBjYW5ub3QgYmUgdXNlZCB0b2dl dGhlclxFLywKLQknV2hlbiAtLWdsb2JhbHMtb25seSBhbmQgLS1kYXRhLW9ubHkgYXJlIHVz ZWQgdG9nZXRoZXInKTsKLQotIyByZXBvcnQgYW4gZXJyb3Igd2hlbiAtLWdsb2JhbHMtb25s eSBhbmQgLS1zY2hlbWEtb25seSBhcmUgdXNlZCB0b2dldGhlcgotJG5vZGUtPmNvbW1hbmRf ZmFpbHNfbGlrZSgKLQlbCi0JCSdwZ19yZXN0b3JlJywKLQkJIiR0ZW1wZGlyL2Zvcm1hdF9j dXN0b20iLCAnLUMnLAotCQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAotCQknLS1nbG9iYWxz LW9ubHknLAotCQknLS1zY2hlbWEtb25seScsCi0JCSctLWZpbGUnID0+ICIkdGVtcGRpci9l cnJvcl90ZXN0LnNxbCIsCi0JXSwKLQlxci9cUXBnX3Jlc3RvcmU6IGVycm9yOiBvcHRpb25z IC1nXC8tLWdsb2JhbHMtb25seSBhbmQgLXNcLy0tc2NoZW1hLW9ubHkgY2Fubm90IGJlIHVz ZWQgdG9nZXRoZXJcRS8sCi0JJ1doZW4gLS1nbG9iYWxzLW9ubHkgYW5kIC0tc2NoZW1hLW9u bHkgYXJlIHVzZWQgdG9nZXRoZXInKTsKLQotIyByZXBvcnQgYW4gZXJyb3Igd2hlbiAtLWds b2JhbHMtb25seSBhbmQgLS1zdGF0aXN0aWNzLW9ubHkgYXJlIHVzZWQgdG9nZXRoZXIKLSRu b2RlLT5jb21tYW5kX2ZhaWxzX2xpa2UoCi0JWwotCQkncGdfcmVzdG9yZScsCi0JCSIkdGVt cGRpci9mb3JtYXRfY3VzdG9tIiwgJy1DJywKLQkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywK LQkJJy0tZ2xvYmFscy1vbmx5JywKLQkJJy0tc3RhdGlzdGljcy1vbmx5JywKLQkJJy0tZmls ZScgPT4gIiR0ZW1wZGlyL2Vycm9yX3Rlc3Quc3FsIiwKLQldLAotCXFyL1xRcGdfcmVzdG9y ZTogZXJyb3I6IG9wdGlvbnMgLWdcLy0tZ2xvYmFscy1vbmx5IGFuZCAtLXN0YXRpc3RpY3Mt b25seSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlclxFLywKLQknV2hlbiAtLWdsb2JhbHMtb25s eSBhbmQgLS1zdGF0aXN0aWNzLW9ubHkgYXJlIHVzZWQgdG9nZXRoZXInKTsKLQotIyByZXBv cnQgYW4gZXJyb3Igd2hlbiAtLWdsb2JhbHMtb25seSBhbmQgLS1zdGF0aXN0aWNzIGFyZSB1 c2VkIHRvZ2V0aGVyCi0kbm9kZS0+Y29tbWFuZF9mYWlsc19saWtlKAotCVsKLQkJJ3BnX3Jl c3RvcmUnLAotCQkiJHRlbXBkaXIvZm9ybWF0X2N1c3RvbSIsICctQycsCi0JCSctLWZvcm1h dCcgPT4gJ2N1c3RvbScsCi0JCSctLWdsb2JhbHMtb25seScsCi0JCSctLXN0YXRpc3RpY3Mn LAotCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXJyb3JfdGVzdC5zcWwiLAotCV0sCi0JcXIv XFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9ucyAtLXN0YXRpc3RpY3MgYW5kIC1nXC8tLWds b2JhbHMtb25seSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlclxFLywKLQknV2hlbiAtLWdsb2Jh bHMtb25seSBhbmQgLS1zdGF0aXN0aWNzIGFyZSB1c2VkIHRvZ2V0aGVyJyk7Ci0KLSMgcmVw b3J0IGFuIGVycm9yIHdoZW4gLS1nbG9iYWxzLW9ubHkgYW5kIC0tZXhpdC1vbi1lcnJvciBh cmUgdXNlZCB0b2dldGhlcgotJG5vZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKLQlbCi0JCSdw Z19yZXN0b3JlJywKLQkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLCAnLUMnLAotCQknLS1m b3JtYXQnID0+ICdjdXN0b20nLAotCQknLS1nbG9iYWxzLW9ubHknLAotCQknLS1leGl0LW9u LWVycm9yJywKLQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Vycm9yX3Rlc3Quc3FsIiwKLQld LAotCXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbnMgLS1leGl0LW9uLWVycm9yIGFu ZCAtZ1wvLS1nbG9iYWxzLW9ubHkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXJcRS8sCi0JJ1do ZW4gLS1nbG9iYWxzLW9ubHkgYW5kIC0tZXhpdC1vbi1lcnJvciBhcmUgdXNlZCB0b2dldGhl cicpOwotCi0jIHJlcG9ydCBhbiBlcnJvciB3aGVuIC0tZ2xvYmFscy1vbmx5IGFuZCAtLXNp bmdsZS10cmFuc2FjdGlvbiBhcmUgdXNlZCB0b2dldGhlcgotJG5vZGUtPmNvbW1hbmRfZmFp bHNfbGlrZSgKLQlbCi0JCSdwZ19yZXN0b3JlJywKLQkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0 b20iLCAnLUMnLAotCQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAotCQknLS1nbG9iYWxzLW9u bHknLAotCQknLS1zaW5nbGUtdHJhbnNhY3Rpb24nLAotCQknLS1maWxlJyA9PiAiJHRlbXBk aXIvZXJyb3JfdGVzdC5zcWwiLAotCV0sCi0JcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0 aW9ucyAtZ1wvLS1nbG9iYWxzLW9ubHkgYW5kIC0xXC8tLXNpbmdsZS10cmFuc2FjdGlvbiBj YW5ub3QgYmUgdXNlZCB0b2dldGhlclxFLywKLQknV2hlbiAtLWdsb2JhbHMtb25seSBhbmQg LS1zaW5nbGUtdHJhbnNhY3Rpb24gYXJlIHVzZWQgdG9nZXRoZXInKTsKLQotIyByZXBvcnQg YW4gZXJyb3Igd2hlbiAtLWdsb2JhbHMtb25seSBhbmQgLS10cmFuc2FjdGlvbi1zaXplIGFy ZSB1c2VkIHRvZ2V0aGVyCi0kbm9kZS0+Y29tbWFuZF9mYWlsc19saWtlKAotCVsKLQkJJ3Bn X3Jlc3RvcmUnLAotCQkiJHRlbXBkaXIvZm9ybWF0X2N1c3RvbSIsICctQycsCi0JCSctLWZv cm1hdCcgPT4gJ2N1c3RvbScsCi0JCSctLWdsb2JhbHMtb25seScsCi0JCSctLXRyYW5zYWN0 aW9uLXNpemUnID0+ICcxMDAnLAotCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXJyb3JfdGVz dC5zcWwiLAotCV0sCi0JcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9ucyAtZ1wvLS1n bG9iYWxzLW9ubHkgYW5kIC0tdHJhbnNhY3Rpb24tc2l6ZSBjYW5ub3QgYmUgdXNlZCB0b2dl dGhlclxFLywKLQknV2hlbiAtLWdsb2JhbHMtb25seSBhbmQgLS10cmFuc2FjdGlvbi1zaXpl IGFyZSB1c2VkIHRvZ2V0aGVyJyk7Ci0KLSMgdmVyaWZ5IG1hcC5kYXQgcHJlYW1ibGUgZXhp c3RzCi1teSAkbWFwX2RhdF9jb250ZW50ID0gc2x1cnBfZmlsZSgiJHRlbXBkaXIvZm9ybWF0 X2RpcmVjdG9yeS9tYXAuZGF0Iik7Ci1saWtlKAotCSRtYXBfZGF0X2NvbnRlbnQsCi0JcXIv XiMgbWFwXC5kYXRcbi4qIyBUaGlzIGZpbGUgbWFwcyBvaWRzIHRvIGRhdGFiYXNlIG5hbWVz L21zLAotCSdtYXAuZGF0IGNvbnRhaW5zIGV4cGVjdGVkIHByZWFtYmxlJyk7Ci0KLSMgdmVy aWZ5IGNvbW1lbnRpbmcgb3V0IGEgbGluZSBpbiBtYXAuZGF0IHNraXBzIHRoYXQgZGF0YWJh c2UKLSRub2RlLT5zYWZlX3BzcWwoCi0JJHJ1bl9kYiwgJ0NSRUFURSBEQVRBQkFTRSBjb21t ZW50X3Rlc3RfZGI7Ci1cYyBjb21tZW50X3Rlc3RfZGIKLUNSRUFURSBUQUJMRSBjb21tZW50 X3Rlc3RfdGFibGUgKGlkIGludCk7Jyk7Ci0KLSRub2RlLT5jb21tYW5kX29rKAotCVsKLQkJ J3BnX2R1bXBhbGwnLAotCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAotCQknLS1maWxl JyA9PiAiJHRlbXBkaXIvY29tbWVudF90ZXN0IiwKLQldLAotCSdwZ19kdW1wYWxsIGZvciBj b21tZW50IHRlc3QnKTsKLQotIyBNb2RpZnkgbWFwLmRhdCB0byBjb21tZW50IG91dCB0aGUg Y29tbWVudF90ZXN0X2RiIGVudHJ5Ci1teSAkbWFwX2NvbnRlbnQgPSBzbHVycF9maWxlKCIk dGVtcGRpci9jb21tZW50X3Rlc3QvbWFwLmRhdCIpOwotJG1hcF9jb250ZW50ID1+IHMvXihc ZCsgY29tbWVudF90ZXN0X2RiKSQvIyAkMS9tOwotb3BlbihteSAkZmgsICc+JywgIiR0ZW1w ZGlyL2NvbW1lbnRfdGVzdC9tYXAuZGF0IikKLSAgb3IgZGllICJDYW5ub3Qgb3BlbiBtYXAu ZGF0OiAkISI7Ci1wcmludCAkZmggJG1hcF9jb250ZW50OwotY2xvc2UoJGZoKTsKLQotIyBD cmVhdGUgYSB0YXJnZXQgbm9kZSBhbmQgcmVzdG9yZSAtIGNvbW1lbnRlZCBkYiBzaG91bGQg YmUgc2tpcHBlZAotbXkgJHRhcmdldF9jb21tZW50ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1 c3Rlci0+bmV3KCJ0YXJnZXRfY29tbWVudCIpOwotJHRhcmdldF9jb21tZW50LT5pbml0Owot JHRhcmdldF9jb21tZW50LT5zdGFydDsKLQotJG5vZGUtPmNvbW1hbmRfb2soCi0JWwotCQkn cGdfcmVzdG9yZScsICctQycsCi0JCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCi0JCSct LWZpbGUnID0+ICIkdGVtcGRpci9jb21tZW50X3Rlc3RfcmVzdG9yZS5zcWwiLAotCQknLS1o b3N0JywgJHRhcmdldF9jb21tZW50LT5ob3N0LAotCQknLS1wb3J0JywgJHRhcmdldF9jb21t ZW50LT5wb3J0LAotCQkiJHRlbXBkaXIvY29tbWVudF90ZXN0IiwKLQldLAotCSdwZ19yZXN0 b3JlIHdpdGggY29tbWVudGVkIG91dCBkYXRhYmFzZSBpbiBtYXAuZGF0Jyk7Ci0KLW15ICRy ZXN0b3JlX291dHB1dCA9IHNsdXJwX2ZpbGUoIiR0ZW1wZGlyL2NvbW1lbnRfdGVzdF9yZXN0 b3JlLnNxbCIpOwotdW5saWtlKAotCSRyZXN0b3JlX291dHB1dCwKLQlxci9DUkVBVEUgREFU QUJBU0UgY29tbWVudF90ZXN0X2RiLywKLQknY29tbWVudGVkIG91dCBkYXRhYmFzZSBpbiBt YXAuZGF0IGlzIG5vdCByZXN0b3JlZCcpOwotCi0jIFRlc3QgdGhhdCAtLWNsZWFuIGltcGxp ZXMgLS1pZi1leGlzdHMgZm9yIHBnX2R1bXBhbGwgYXJjaGl2ZXMKLSRub2RlLT5jb21tYW5k X29rKAotCVsKLQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAotCQknLS1mb3JtYXQnID0+ICdjdXN0 b20nLAotCQknLS1jbGVhbicsCi0JCSctLWZpbGUnID0+ICIkdGVtcGRpci9jbGVhbl90ZXN0 LnNxbCIsCi0JCSIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwKLQldLAotCSdwZ19yZXN0b3Jl IHdpdGggLS1jbGVhbiBvbiBwZ19kdW1wYWxsIGFyY2hpdmUnKTsKLQotbXkgJGNsZWFuX291 dHB1dCA9IHNsdXJwX2ZpbGUoIiR0ZW1wZGlyL2NsZWFuX3Rlc3Quc3FsIik7Ci1saWtlKAot CSRjbGVhbl9vdXRwdXQsCi0JcXIvRFJPUCBST0xFIElGIEVYSVNUUy8sCi0JJy0tY2xlYW4g aW1wbGllcyAtLWlmLWV4aXN0czogRFJPUCBST0xFIElGIEVYSVNUUyBpbiBvdXRwdXQnKTsK LQotJG5vZGUtPnN0b3AoJ2Zhc3QnKTsKLQotZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQg YS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CmluZGV4IGY5ZWIyM2U1MmM5Li4xOTY5ZDQ2N2MxZCAxMDA2NDQK LS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTY0OCw3ICs2NDgsNiBAQCBEYXR1bVR1cGxl RmllbGRzCiBEYkluZm8KIERiSW5mb0FycgogRGJMb2NhbGVJbmZvCi1EYk9pZE5hbWUKIERk bE9wdFR5cGUKIERkbE9wdGlvbgogRGVDbG9uZVB0clR5cGUKLS0gCjIuNDMuMAoK --------------Pyty8v3hQss00IhQTztI80k0--