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 1vtAC7-006Z0Y-3C for pgsql-hackers@arkaria.postgresql.org; Thu, 19 Feb 2026 20:00:17 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vtAC6-005e49-2P for pgsql-hackers@arkaria.postgresql.org; Thu, 19 Feb 2026 20:00:14 +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 1vtAC5-005e41-24 for pgsql-hackers@lists.postgresql.org; Thu, 19 Feb 2026 20:00:14 +0000 Received: from mail-qk1-x742.google.com ([2607:f8b0:4864:20::742]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vtABy-00000000BSb-3Tgi for pgsql-hackers@lists.postgresql.org; Thu, 19 Feb 2026 20:00:12 +0000 Received: by mail-qk1-x742.google.com with SMTP id af79cd13be357-8cb5c9ba82bso201524685a.2 for ; Thu, 19 Feb 2026 12:00:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dunslane-net.20230601.gappssmtp.com; s=20230601; t=1771531206; x=1772136006; 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=+ZbSH3rI3Oyyq+OOURDUw8gzkXG9b+LLSWyZBa8tor0=; b=fSxsywPXaBBdvke+1/qmIJjffIx2kOU8pY4QO14RmcDgZMShq6wB/z2o+sNXwxudiW wTMIUu5NmBtCI+OiMy/qRxkWvkF4EJC5+Sqi92FhB92raGvG2PfuO9UIwFqWlNhnPBx9 t4HFVMBecIEYkvxYs/4X/3rvJcuekaavLoAzj+jgxSktQurEhXDGb1kmyUfhF1Acq3l2 VfZmTsu8KAWgjSUmuWvDSNJvOxnuxWnBIcAU+aXz1V1ZdGYqbK/u+UFHcCykixD4BBx7 nz/iJdTQimSFfCkn9r9kKJmihVQ2Lx4wYtH82SDM8dVcN9M95Tk34G5o8zxiEVSBiA9/ 1Lnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771531206; x=1772136006; 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=+ZbSH3rI3Oyyq+OOURDUw8gzkXG9b+LLSWyZBa8tor0=; b=MWpnld0mqxdpyRSgX3wtydTg6uaQRpsu4maipSgsAdzAGlmBGNwdc1NBQ6PEa2gZMH 1OBI+Pm1+g8yCk5W51SdAYKhfFjF42Fx+vtbm5tI46fq6Ng931NW05sw6YXhbrXYL9XH y/7A2o/MxRXf1PELlUw6HKM4N5QVQn7NGyzLZz+ulYYgsVb2chlwxz6lSvWYwDlwpDPJ dWzmuq+SCqB2w3wlpCbt7yMniDMt9n0kOeihfw6FiDkf7bvCcNsFvWFA0LWxXVjhbw88 Rvl51VuA0MHSDfyT2E5QvkL8qZbqMaCmZpjKOxn/Ttv7n8KKoGHa3fIysHMbrLukEE+Z 6w5g== X-Forwarded-Encrypted: i=1; AJvYcCUMEFoQ1MntoRkfPvAC8Wsd7ti6LUYHccGiCR6YKgMsRuEHcZKf1u1pNRzCdkgjQHuIZea74gGgi+aFRCce@lists.postgresql.org X-Gm-Message-State: AOJu0Yxv83cs6WwYj+IhkChLILa1QLsntl3tNzgq5yxRvdMQ1oWmvVU/ zcyAKtY+N5gWKL/JOWjghQncpnRmAhdRbPbAKWVuYZrDqZBZozskPereLVc+peKXV9Q= X-Gm-Gg: AZuq6aJuM+VOBoIQ9igHx43aP4UIuWeYljYyjCbMLcr510NJou1qKZqAbkZRnb1lkRt ZDMHDnvQVw1SSn2VtgqsOLYIW4pJqdqPtnlXqv6SBUunBSBy4vcdD/YsRALV56hxQQfkzwD/Qd1 fM/CLseb5RMNVjwy8nDbB+4vJN9HITlgyLncYSfvLdDsQqd6w1eXBDa8dXmJ2QNZqCdl2qCO92u 7ocfHNO/7vtJvbMwMBUE3OwRa07saqZdjMz28T9Sl+oyLG1c+LNJx3Ju6eLEdXc2CuT53q2pSH8 Pt1voCxMZUQb4KSzMEqVWZXcbakN47mYVwv0re2A19MIKnZLMkDm+6Yrtu0qP4PRV92T1Vc0MZd N7Cq29IAFGsXcvDrHIbg521B9Hbo7+Cv+6+9hnYbgbmCOFJZJfNoGwZyPjE7DlxB+orDLBpzw2c 9ubyD2JxFdYCVquztgc+S9EoIXbcwP9A== X-Received: by 2002:a05:620a:370d:b0:8c9:f4eb:ac71 with SMTP id af79cd13be357-8cb4bf97211mr2580831585a.10.1771531206169; Thu, 19 Feb 2026 12:00:06 -0800 (PST) Received: from ?IPV6:2605:a601:a6b0:500::1cb? ([2605:a601:a6b0:500::1cb]) by smtp.googlemail.com with ESMTPSA id 6a1803df08f44-8971cc7ff1csm227138146d6.3.2026.02.19.12.00.04 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 19 Feb 2026 12:00:05 -0800 (PST) Content-Type: multipart/mixed; boundary="------------T0ZeHtrkATfXhH42VTxuYRJ2" Message-ID: <4022765f-38ee-48a3-b246-615b3f8e1c23@dunslane.net> Date: Thu, 19 Feb 2026 15:00:03 -0500 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Non-text mode for pg_dumpall To: Mahendra Singh Thalor , tushar Cc: jian he , Vaibhav Dalvi , pgsql-hackers@lists.postgresql.org References: <3f22a8bb-29e8-40cc-97a1-309181da2c13@dunslane.net> 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: 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. --------------T0ZeHtrkATfXhH42VTxuYRJ2 Content-Type: multipart/alternative; boundary="------------Yj2wuNh2QSLW66tN8BmbjEmf" --------------Yj2wuNh2QSLW66tN8BmbjEmf Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 2026-02-18 We 12:15 AM, Mahendra Singh Thalor wrote: > On Wed, 28 Jan 2026 at 13:04, tushar > wrote: > > > > > > > > On Tue, Jan 27, 2026 at 9:11 PM Mahendra Singh Thalor > wrote: > >> > >> On Fri, 23 Jan 2026 at 19:07, tushar > wrote: > >> > > >> > > >> > > >> > On Fri, Jan 23, 2026 at 12:21 PM tushar > wrote: > >> >> > >> >> > >> >> Thanks Mahendra, a minor  observation -  The pg_restore output > shows a double slash in the map.dat path (e.g., abc.tar//map.dat). > >> >> While it doesn't break the restore, we may want to clean up the > path joining logic. > >> >> > >> >> [edb@1a1c15437e7c bin]$ ./pg_restore -Ft -C abc.tar/ -d postgres > -p 9011  -U  ed -v > >> >> pg_restore: found database "template1 > >> >> " (OID: 1) in file "abc.tar//map.dat" > >> >> pg_restore: found database "postgres > >> >> " (OID: 5) in file "abc.tar//map.dat" > >> >> > >> >> > >> > > >> > Please refer to this scenario where - Objects  created under > template1 and the postgres database by a specific user are failing > during a cross-cluster restore. > >> > When restoring to a new cluster as a different superuser, > pg_restore throws the error: ERROR: role "edb" does not exist. > >> > It appears the restore is attempting to preserve the original > ownership of template1 objects even when the target environment lacks > those specific roles. > >> > > >> > Steps to reproduce: > >> > initdb ( ./initdb -U edb -D data) , start the server , connect to > postgres and  template1 database one by one and  create > >> > this table ( create table test(n int); ) > >> > perform pg_dumpall operation ( ./pg_dumpall -Ft -f abc.tar) > >> > initdb (./initdb -U xyz) , start the server , create a database ( > create database abc;) > >> > perform pg_restore operation ( ./pg_restore -Ft -C abc.tar/ -d > postgres -p 9033 -U xyz) > >> > --getting an error,  table 'test' will be created on 'template1' > database but failed to create on an another database ( in this case - > 'abc' database) > >> > > >> > regards, > >> > >> Hi, > >> Here I am attaching an updated patch for the review and testing. > >> Thanks Jian for the reporting rebase issue. > >> > > > > Thanks Mahendra, getting a regression error during the restore > process after applying this patch. > > > >  [edb@1a1c15437e7c bin]$ ./pg_restore -Ft -C abc1.tar/ -d postgres > -p 9000 > > pg_restore: error: could not execute query: ERROR:  non-standard > string literals are not supported > > Command was: SET standard_conforming_strings = off; > > pg_restore: warning: errors ignored on restore: 1 > > > > in earlier patches - this was not coming. > > > > regards, > > > > Thanks Andrew for some design related feedback. > > Thanks Jian for the offline discussions, reviews, testing and delta > patches. > > Thanks Tushar for the detailed testing. > > *Brief about this patch:* > new option to pg_dumpall: --format=d/t/c/p directory/tar/custam/plain > > If the user gives a non-text format with pg_dumpall command, then the > full cluster will be dumped and global objects (roles. tablespaces, > databases) will be dumped into toc.glo file in custom format with drop > commands and databases will be dumped into a given archive format one > by one with oid.tar/oid.dmp/oid files/dir. > When restoring, if the user gives -g(globals-only) option, then > creating commands of  only global users/tablespaces/databases will be > restored. (no drop commands will be executed) > toc.glo will be executed with -e(exit-on-error=false) > and --transaction-size=0 as some user already created. If the user > wants to restore a single database, they can restore it by a single > dump file. For --clean and -g(globals-only), we added some error cases > so that roles/databases/tablespaces will not be dropped. > Here, I am attaching an updated patch for the review and testing. Here's an update after a round of review. Most of the changes are pretty minor, but it should get the cfbot all green, with a Windows fix in the tests. cheers andrew -- Andrew Dunstan EDB:https://www.enterprisedb.com --------------Yj2wuNh2QSLW66tN8BmbjEmf Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit


On 2026-02-18 We 12:15 AM, Mahendra Singh Thalor wrote:
On Wed, 28 Jan 2026 at 13:04, tushar <tushar.ahuja@enterprisedb.com> wrote:
>
>
>
> On Tue, Jan 27, 2026 at 9:11 PM Mahendra Singh Thalor <mahi6run@gmail.com> wrote:
>>
>> On Fri, 23 Jan 2026 at 19:07, tushar <tushar.ahuja@enterprisedb.com> wrote:
>> >
>> >
>> >
>> > On Fri, Jan 23, 2026 at 12:21 PM tushar <tushar.ahuja@enterprisedb.com> wrote:
>> >>
>> >>
>> >> Thanks Mahendra, a minor  observation -  The pg_restore output shows a double slash in the map.dat path (e.g., abc.tar//map.dat).
>> >> While it doesn't break the restore, we may want to clean up the path joining logic.
>> >>
>> >> [edb@1a1c15437e7c bin]$ ./pg_restore -Ft -C abc.tar/ -d postgres -p 9011  -U  ed -v
>> >> pg_restore: found database "template1
>> >> " (OID: 1) in file "abc.tar//map.dat"
>> >> pg_restore: found database "postgres
>> >> " (OID: 5) in file "abc.tar//map.dat"
>> >>
>> >>
>> >
>> > Please refer to this scenario where - Objects  created under template1 and the postgres database by a specific user are failing during a cross-cluster restore.
>> > When restoring to a new cluster as a different superuser, pg_restore throws the error: ERROR: role "edb" does not exist.
>> > It appears the restore is attempting to preserve the original ownership of template1 objects even when the target environment lacks those specific roles.
>> >
>> > Steps to reproduce:
>> > initdb ( ./initdb -U edb -D data) , start the server , connect to postgres and  template1 database one by one and  create
>> > this table ( create table test(n int); )
>> > perform pg_dumpall operation ( ./pg_dumpall -Ft -f abc.tar)
>> > initdb (./initdb -U xyz) , start the server , create a database ( create database abc;)
>> > perform pg_restore operation ( ./pg_restore -Ft -C abc.tar/ -d postgres -p 9033 -U xyz)
>> > --getting an error,  table 'test' will be created on 'template1' database but failed to create on an another database ( in this case - 'abc' database)
>> >
>> > regards,
>>
>> Hi,
>> Here I am attaching an updated patch for the review and testing.
>> Thanks Jian for the reporting rebase issue.
>>
>
> Thanks Mahendra, getting a regression error during the restore process after applying this patch.
>
>  [edb@1a1c15437e7c bin]$ ./pg_restore -Ft -C abc1.tar/ -d postgres -p 9000
> pg_restore: error: could not execute query: ERROR:  non-standard string literals are not supported
> Command was: SET standard_conforming_strings = off;
> pg_restore: warning: errors ignored on restore: 1
>
> in earlier patches - this was not coming.
>
> regards,
>

Thanks Andrew for some design related feedback.

Thanks Jian for the offline discussions, reviews, testing and delta patches.

Thanks Tushar for the detailed testing.

Brief about this patch:
new option to pg_dumpall: --format=d/t/c/p directory/tar/custam/plain

If the user gives a non-text format with pg_dumpall command, then the full cluster will be dumped and global objects (roles. tablespaces, databases) will be dumped into toc.glo file in custom format with drop commands and databases will be dumped into a given archive format one by one with oid.tar/oid.dmp/oid files/dir.
When restoring, if the user gives -g(globals-only) option, then creating commands of  only global users/tablespaces/databases will be restored. (no drop commands will be executed)
toc.glo will be executed with -e(exit-on-error=false) and --transaction-size=0 as some user already created. If the user wants to restore a single database, they can restore it by a single dump file. For --clean and -g(globals-only), we added some error cases so that roles/databases/tablespaces will not be dropped.
 
Here, I am attaching an updated patch for the review and testing.


Here's an update after a round of review. Most of the changes are pretty minor, but it should get the cfbot all green, with a Windows fix in the tests.


cheers


andrew


--
Andrew Dunstan
EDB: https://www.enterprisedb.com
--------------Yj2wuNh2QSLW66tN8BmbjEmf-- --------------T0ZeHtrkATfXhH42VTxuYRJ2 Content-Type: text/x-patch; charset=UTF-8; name="v17_19022026-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Disposition: attachment; filename*0="v17_19022026-Non-text-modes-for-pg_dumpall-correspondingly-c"; filename*1="hange.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sIGIvZG9jL3Ny Yy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwKaW5kZXggODgzNGI3ZWMxNDEuLjQ5ZTVjOTli MDllIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbAorKysg Yi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbApAQCAtMTYsNyArMTYsMTAgQEAg UG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAKICA8cmVmbmFtZWRpdj4KICAgPHJlZm5hbWU+ cGdfZHVtcGFsbDwvcmVmbmFtZT4KLSAgPHJlZnB1cnBvc2U+ZXh0cmFjdCBhIDxwcm9kdWN0 bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2UgY2x1c3RlciBpbnRvIGEg c2NyaXB0IGZpbGU8L3JlZnB1cnBvc2U+CisKKyAgPHJlZnB1cnBvc2U+CisgICBleHBvcnQg YSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGNsdXN0 ZXIgYXMgYW4gU1FMIHNjcmlwdCBvciB0byBvdGhlciBmb3JtYXRzCisgIDwvcmVmcHVycG9z ZT4KICA8L3JlZm5hbWVkaXY+CiAKICA8cmVmc3lub3BzaXNkaXY+CkBAIC0zMyw3ICszNiw3 IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICA8cGFyYT4KICAgIDxhcHBsaWNhdGlv bj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4gaXMgYSB1dGlsaXR5IGZvciB3cml0aW5nIG91 dAogICAgKDxxdW90ZT5kdW1waW5nPC9xdW90ZT4pIGFsbCA8cHJvZHVjdG5hbWU+UG9zdGdy ZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlcwotICAgb2YgYSBjbHVzdGVyIGludG8gb25l IHNjcmlwdCBmaWxlLiAgVGhlIHNjcmlwdCBmaWxlIGNvbnRhaW5zCisgICBvZiBhIGNsdXN0 ZXIgaW50byBhbiBTUUwgc2NyaXB0IGZpbGUgb3IgYW4gYXJjaGl2ZS4gIFRoZSBvdXRwdXQg Y29udGFpbnMKICAgIDxhY3JvbnltPlNRTDwvYWNyb255bT4gY29tbWFuZHMgdGhhdCBjYW4g YmUgdXNlZCBhcyBpbnB1dCB0byA8eHJlZgogICAgbGlua2VuZD0iYXBwLXBzcWwiLz4gdG8g cmVzdG9yZSB0aGUgZGF0YWJhc2VzLiAgSXQgZG9lcyB0aGlzIGJ5CiAgICBjYWxsaW5nIDx4 cmVmIGxpbmtlbmQ9ImFwcC1wZ2R1bXAiLz4gZm9yIGVhY2ggZGF0YWJhc2UgaW4gdGhlIGNs dXN0ZXIuCkBAIC01MiwxMSArNTUsMTYgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAg IDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIFRoZSBTUUwgc2NyaXB0IHdpbGwgYmUgd3JpdHRl biB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAgVXNlIHRoZQorICAgUGxhaW4gdGV4dCBTUUwg c2NyaXB0cyB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gIFVzZSB0 aGUKICAgIDxvcHRpb24+LWY8L29wdGlvbj4vPG9wdGlvbj4tLWZpbGU8L29wdGlvbj4gb3B0 aW9uIG9yIHNoZWxsIG9wZXJhdG9ycyB0bwogICAgcmVkaXJlY3QgaXQgaW50byBhIGZpbGUu CiAgIDwvcGFyYT4KIAorICA8cGFyYT4KKyAgIEFyY2hpdmVzIGluIG90aGVyIGZvcm1hdHMg d2lsbCBiZSBwbGFjZWQgaW4gYSBkaXJlY3RvcnkgbmFtZWQgdXNpbmcgdGhlCisgICA8b3B0 aW9uPi1mPC9vcHRpb24+LzxvcHRpb24+LS1maWxlPC9vcHRpb24+LCB3aGljaCBpcyByZXF1 aXJlZCBpbiB0aGlzIGNhc2UuCisgIDwvcGFyYT4KKwogICA8cGFyYT4KICAgPGFwcGxpY2F0 aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPiBuZWVkcyB0byBjb25uZWN0IHNldmVyYWwK ICAgdGltZXMgdG8gdGhlIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4g c2VydmVyIChvbmNlIHBlcgpAQCAtMTMxLDE2ICsxMzksOTMgQEAgUG9zdGdyZVNRTCBkb2N1 bWVudGF0aW9uCiAgICAgICAgPHBhcmE+CiAgICAgICAgIFNlbmQgb3V0cHV0IHRvIHRoZSBz cGVjaWZpZWQgZmlsZS4gIElmIHRoaXMgaXMgb21pdHRlZCwgdGhlCiAgICAgICAgIHN0YW5k YXJkIG91dHB1dCBpcyB1c2VkLgorICAgICAgICBUaGlzIG9wdGlvbiBjYW4gb25seSBiZSBv bWl0dGVkIHdoZW4gPG9wdGlvbj4tLWZvcm1hdDwvb3B0aW9uPiBpcyBwbGFpbi4KICAgICAg ICA8L3BhcmE+CiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAor ICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tRiA8cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+Zm9ybWF0PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rl cm0+CisgICAgICA8dGVybT48b3B0aW9uPi0tZm9ybWF0PTxyZXBsYWNlYWJsZSBjbGFzcz0i cGFyYW1ldGVyIj5mb3JtYXQ8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAg IDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgU3BlY2lmeSB0aGUgZm9ybWF0 IG9mIGR1bXAgZmlsZXMuICBJbiBwbGFpbiBmb3JtYXQsIGFsbCB0aGUgZHVtcCBkYXRhIGlz CisgICAgICAgIHNlbnQgaW4gYSBzaW5nbGUgdGV4dCBzdHJlYW0uIFRoaXMgaXMgdGhlIGRl ZmF1bHQuCisKKyAgICAgICAgSW4gYWxsIG90aGVyIG1vZGVzLCA8YXBwbGljYXRpb24+cGdf ZHVtcGFsbDwvYXBwbGljYXRpb24+IGZpcnN0IGNyZWF0ZXMgdHdvIGZpbGVzLAorICAgICAg ICA8ZmlsZW5hbWU+dG9jLmdsbzwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+bWFwLmRhdDwv ZmlsZW5hbWU+LCBpbiB0aGUgZGlyZWN0b3J5CisgICAgICAgIHNwZWNpZmllZCBieSA8b3B0 aW9uPi0tZmlsZTwvb3B0aW9uPi4KKyAgICAgICAgVGhlIGZpcnN0IGZpbGUgY29udGFpbnMg Z2xvYmFsIGRhdGEgKHJvbGVzIGFuZCB0YWJsZXNwYWNlcykgaW4gY3VzdG9tIGZvcm1hdC4g VGhlIHNlY29uZAorICAgICAgICBjb250YWlucyBhIG1hcHBpbmcgYmV0d2VlbiBkYXRhYmFz ZSBPSURzIGFuZCBuYW1lcy4gVGhlc2UgZmlsZXMgYXJlIHVzZWQgYnkKKyAgICAgICAgPGFw cGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPi4gRGF0YSBmb3IgaW5kaXZpZHVh bCBkYXRhYmFzZXMgaXMgcGxhY2VkIGluCisgICAgICAgIHRoZSA8ZmlsZW5hbWU+ZGF0YWJh c2VzPC9maWxlbmFtZT4gc3ViZGlyZWN0b3J5LCBuYW1lZCB1c2luZyB0aGUgZGF0YWJhc2Un cyBPSUQuCisKKyAgICAgICA8dmFyaWFibGVsaXN0PgorICAgICAgICA8dmFybGlzdGVudHJ5 PgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+ZDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAg ICA8dGVybT48bGl0ZXJhbD5kaXJlY3Rvcnk8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAg PGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICBPdXRwdXQgZGlyZWN0 b3J5LWZvcm1hdCBhcmNoaXZlcyBmb3IgZWFjaCBkYXRhYmFzZSwKKyAgICAgICAgICAgc3Vp dGFibGUgZm9yIGlucHV0IGludG8gcGdfcmVzdG9yZS4gVGhlIGRpcmVjdG9yeQorICAgICAg ICAgICB3aWxsIGhhdmUgZGF0YWJhc2UgPHR5cGU+b2lkPC90eXBlPiBhcyBpdHMgbmFtZS4K KyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zh cmxpc3RlbnRyeT4KKworICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgPHRlcm0+ PGxpdGVyYWw+cDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5w bGFpbjwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAg PHBhcmE+CisgICAgICAgICAgIE91dHB1dCBhIHBsYWluLXRleHQgU1FMIHNjcmlwdCBmaWxl ICh0aGUgZGVmYXVsdCkuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRl bT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPHZhcmxpc3RlbnRyeT4K KyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmM8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAg PHRlcm0+PGxpdGVyYWw+Y3VzdG9tPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDxsaXN0 aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgT3V0cHV0IGEgY3VzdG9tLWZv cm1hdCBhcmNoaXZlIGZvciBlYWNoIGRhdGFiYXNlLAorICAgICAgICAgICBzdWl0YWJsZSBm b3IgaW5wdXQgaW50byBwZ19yZXN0b3JlLiBUaGUgYXJjaGl2ZQorICAgICAgICAgICB3aWxs IGJlIG5hbWVkIDxmaWxlbmFtZT5kYm9pZC5kbXA8L2ZpbGVuYW1lPiB3aGVyZSA8dHlwZT5k Ym9pZDwvdHlwZT4gaXMgdGhlCisgICAgICAgICAgIDx0eXBlPm9pZDwvdHlwZT4gb2YgdGhl IGRhdGFiYXNlLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+Cisg ICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAg ICAgICAgPHRlcm0+PGxpdGVyYWw+dDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVy bT48bGl0ZXJhbD50YXI8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVtPgor ICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICBPdXRwdXQgYSB0YXItZm9ybWF0IGFyY2hp dmUgZm9yIGVhY2ggZGF0YWJhc2UsCisgICAgICAgICAgIHN1aXRhYmxlIGZvciBpbnB1dCBp bnRvIHBnX3Jlc3RvcmUuIFRoZSBhcmNoaXZlCisgICAgICAgICAgIHdpbGwgYmUgbmFtZWQg PGZpbGVuYW1lPmRib2lkLnRhcjwvZmlsZW5hbWU+IHdoZXJlIDx0eXBlPmRib2lkPC90eXBl PiBpcyB0aGUKKyAgICAgICAgICAgPHR5cGU+b2lkPC90eXBlPiBvZiB0aGUgZGF0YWJhc2Uu CisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92 YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPC92YXJpYWJsZWxpc3Q+CisKKyAgICAgICBTZWUg PHhyZWYgbGlua2VuZD0iYXBwLXBnZHVtcCIvPiBmb3IgZGV0YWlscyBvbiBob3cgdGhlCisg ICAgICAgdmFyaW91cyBub24tcGxhaW4tdGV4dCBhcmNoaXZlIGZvcm1hdHMgd29yay4KKwor ICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRy eT4KKwogICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgPHRlcm0+PG9wdGlvbj4tZzwvb3B0 aW9uPjwvdGVybT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LS1nbG9iYWxzLW9ubHk8L29wdGlv bj48L3Rlcm0+CiAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgPHBhcmE+CiAgICAgICAgIER1 bXAgb25seSBnbG9iYWwgb2JqZWN0cyAocm9sZXMgYW5kIHRhYmxlc3BhY2VzKSwgbm8gZGF0 YWJhc2VzLgorICAgICAgICBOb3RlOiA8b3B0aW9uPi0tZ2xvYmFscy1vbmx5PC9vcHRpb24+ IGNhbm5vdCBiZSB1c2VkIHdpdGgKKyAgICAgICAgPG9wdGlvbj4tLWNsZWFuPC9vcHRpb24+ IHdpdGggbm9uLXRleHQgZHVtcCBmb3JtYXQuCiAgICAgICAgPC9wYXJhPgogICAgICAgPC9s aXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CkBAIC05MzYsMTMgKzEwMjEsMjEgQEAg ZXhjbHVkZSBkYXRhYmFzZSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+UEFUVEVS TjwvcmVwbGFjZWFibGU+CiAgPHJlZnNlY3QxIGlkPSJhcHAtcGctZHVtcGFsbC1leCI+CiAg IDx0aXRsZT5FeGFtcGxlczwvdGl0bGU+CiAgIDxwYXJhPgotICAgVG8gZHVtcCBhbGwgZGF0 YWJhc2VzOgotCisgICBUbyBkdW1wIGFsbCBkYXRhYmFzZXMgaW4gcGxhaW4gdGV4dCBmb3Jt YXQgKHRoZSBkZWZhdWx0KToKIDxzY3JlZW4+CiA8cHJvbXB0PiQ8L3Byb21wdD4gPHVzZXJp bnB1dD5wZ19kdW1wYWxsICZndDsgZGIub3V0PC91c2VyaW5wdXQ+CiA8L3NjcmVlbj4KICAg PC9wYXJhPgogCisgIDxwYXJhPgorICAgVG8gZHVtcCBhbGwgZGF0YWJhc2VzIHVzaW5nIG90 aGVyIGZvcm1hdHM6Cis8c2NyZWVuPgorPHByb21wdD4kPC9wcm9tcHQ+IDx1c2VyaW5wdXQ+ cGdfZHVtcGFsbCAtLWZvcm1hdD1kaXJlY3RvcnkgLWYgZGIub3V0PC91c2VyaW5wdXQ+Cis8 cHJvbXB0PiQ8L3Byb21wdD4gPHVzZXJpbnB1dD5wZ19kdW1wYWxsIC0tZm9ybWF0PWN1c3Rv bSAtZiBkYi5vdXQ8L3VzZXJpbnB1dD4KKzxwcm9tcHQ+JDwvcHJvbXB0PiA8dXNlcmlucHV0 PnBnX2R1bXBhbGwgLS1mb3JtYXQ9dGFyIC1mIGRiLm91dDwvdXNlcmlucHV0PgorPC9zY3Jl ZW4+CisgIDwvcGFyYT4KKwogICA8cGFyYT4KICAgIFRvIHJlc3RvcmUgZGF0YWJhc2Uocykg ZnJvbSB0aGlzIGZpbGUsIHlvdSBjYW4gdXNlOgogPHNjcmVlbj4KQEAgLTk1Niw2ICsxMDQ5 LDE2IEBAIGV4Y2x1ZGUgZGF0YWJhc2UgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi PlBBVFRFUk48L3JlcGxhY2VhYmxlPgogICAgdGhlIHNjcmlwdCB3aWxsIGF0dGVtcHQgdG8g ZHJvcCBvdGhlciBkYXRhYmFzZXMgaW1tZWRpYXRlbHksIGFuZCB0aGF0CiAgICB3aWxsIGZh aWwgZm9yIHRoZSBkYXRhYmFzZSB5b3UgYXJlIGNvbm5lY3RlZCB0by4KICAgPC9wYXJhPgor CisgIDxwYXJhPgorICAgSWYgdGhlIGR1bXAgd2FzIHRha2VuIGluIGEgbm9uLXBsYWluLXRl eHQgZm9ybWF0LCB1c2UKKyAgIDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlv bj4gdG8gcmVzdG9yZSB0aGUgZGF0YWJhc2VzOgorPHNjcmVlbj4KKzxwcm9tcHQ+JDwvcHJv bXB0PiA8dXNlcmlucHV0PnBnX3Jlc3RvcmUgZGIub3V0IC1kIHBvc3RncmVzIC1DPC91c2Vy aW5wdXQ+Cis8L3NjcmVlbj4KKyAgIFRoaXMgd2lsbCByZXN0b3JlIGFsbCBkYXRhYmFzZXMu ICBUbyByZXN0b3JlIG9ubHkgc29tZSBkYXRhYmFzZXMsIHVzZQorICAgdGhlIDxvcHRpb24+ LS1leGNsdWRlLWRhdGFiYXNlPC9vcHRpb24+IG9wdGlvbiB0byBza2lwIHRob3NlIG5vdCB3 YW50ZWQuCisgIDwvcGFyYT4KICA8L3JlZnNlY3QxPgogCiAgPHJlZnNlY3QxPgpkaWZmIC0t Z2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwgYi9kb2Mvc3JjL3NnbWwv cmVmL3BnX3Jlc3RvcmUuc2dtbAppbmRleCA0MjBhMzA4YTdjNy4uYjA1ODMyNmIzYzkgMTAw NjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sCisrKyBiL2RvYy9z cmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sCkBAIC0xOCw4ICsxOCw5IEBAIFBvc3RncmVT UUwgZG9jdW1lbnRhdGlvbgogICA8cmVmbmFtZT5wZ19yZXN0b3JlPC9yZWZuYW1lPgogCiAg IDxyZWZwdXJwb3NlPgotICAgcmVzdG9yZSBhIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9w cm9kdWN0bmFtZT4gZGF0YWJhc2UgZnJvbSBhbgotICAgYXJjaGl2ZSBmaWxlIGNyZWF0ZWQg YnkgPGFwcGxpY2F0aW9uPnBnX2R1bXA8L2FwcGxpY2F0aW9uPgorICAgcmVzdG9yZSA8cHJv ZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlcyBmcm9tIGFyY2hp dmVzCisgICBjcmVhdGVkIGJ5IDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4g b3IKKyAgIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4KICAgPC9yZWZw dXJwb3NlPgogIDwvcmVmbmFtZWRpdj4KIApAQCAtMzgsMTMgKzM5LDE0IEBAIFBvc3RncmVT UUwgZG9jdW1lbnRhdGlvbgogCiAgIDxwYXJhPgogICAgPGFwcGxpY2F0aW9uPnBnX3Jlc3Rv cmU8L2FwcGxpY2F0aW9uPiBpcyBhIHV0aWxpdHkgZm9yIHJlc3RvcmluZyBhCi0gICA8cHJv ZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGZyb20gYW4gYXJj aGl2ZQotICAgY3JlYXRlZCBieSA8eHJlZiBsaW5rZW5kPSJhcHAtcGdkdW1wIi8+IGluIG9u ZSBvZiB0aGUgbm9uLXBsYWluLXRleHQKKyAgIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9w cm9kdWN0bmFtZT4gZGF0YWJhc2Ugb3IgY2x1c3RlciBmcm9tIGFuIGFyY2hpdmUKKyAgIGNy ZWF0ZWQgYnkgPHhyZWYgbGlua2VuZD0iYXBwLXBnZHVtcCIvPiBvcgorICAgPHhyZWYgbGlu a2VuZD0iYXBwLXBnLWR1bXBhbGwiLz4gaW4gb25lIG9mIHRoZSBub24tcGxhaW4tdGV4dAog ICAgZm9ybWF0cy4gIEl0IHdpbGwgaXNzdWUgdGhlIGNvbW1hbmRzIG5lY2Vzc2FyeSB0byBy ZWNvbnN0cnVjdCB0aGUKLSAgIGRhdGFiYXNlIHRvIHRoZSBzdGF0ZSBpdCB3YXMgaW4gYXQg dGhlIHRpbWUgaXQgd2FzIHNhdmVkLiAgVGhlCi0gICBhcmNoaXZlIGZpbGVzIGFsc28gYWxs b3cgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPiB0bworICAgZGF0YWJh c2Ugb3IgY2x1c3RlciB0byB0aGUgc3RhdGUgaXQgd2FzIGluIGF0IHRoZSB0aW1lIGl0IHdh cyBzYXZlZC4gVGhlCisgICBhcmNoaXZlcyBhbHNvIGFsbG93IDxhcHBsaWNhdGlvbj5wZ19y ZXN0b3JlPC9hcHBsaWNhdGlvbj4gdG8KICAgIGJlIHNlbGVjdGl2ZSBhYm91dCB3aGF0IGlz IHJlc3RvcmVkLCBvciBldmVuIHRvIHJlb3JkZXIgdGhlIGl0ZW1zCi0gICBwcmlvciB0byBi ZWluZyByZXN0b3JlZC4gVGhlIGFyY2hpdmUgZmlsZXMgYXJlIGRlc2lnbmVkIHRvIGJlCisg ICBwcmlvciB0byBiZWluZyByZXN0b3JlZC4gVGhlIGFyY2hpdmUgZm9ybWF0cyBhcmUgZGVz aWduZWQgdG8gYmUKICAgIHBvcnRhYmxlIGFjcm9zcyBhcmNoaXRlY3R1cmVzLgogICA8L3Bh cmE+CiAKQEAgLTUyLDEwICs1NCwxNyBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAg IDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4gY2FuIG9wZXJhdGUgaW4g dHdvIG1vZGVzLgogICAgSWYgYSBkYXRhYmFzZSBuYW1lIGlzIHNwZWNpZmllZCwgPGFwcGxp Y2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPgogICAgY29ubmVjdHMgdG8gdGhhdCBk YXRhYmFzZSBhbmQgcmVzdG9yZXMgYXJjaGl2ZSBjb250ZW50cyBkaXJlY3RseSBpbnRvCi0g ICB0aGUgZGF0YWJhc2UuICBPdGhlcndpc2UsIGEgc2NyaXB0IGNvbnRhaW5pbmcgdGhlIFNR TAotICAgY29tbWFuZHMgbmVjZXNzYXJ5IHRvIHJlYnVpbGQgdGhlIGRhdGFiYXNlIGlzIGNy ZWF0ZWQgYW5kIHdyaXR0ZW4KKyAgIHRoZSBkYXRhYmFzZS4KKyAgIFdoZW4gcmVzdG9yaW5n IGZyb20gYSBkdW1wIG1hZGUgYnkgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0 aW9uPiwKKyAgIGVhY2ggZGF0YWJhc2Ugd2lsbCBiZSBjcmVhdGVkIGFuZCB0aGVuIHRoZSBy ZXN0b3JhdGlvbiB3aWxsIGJlIHJ1biBpbiB0aGF0CisgICBkYXRhYmFzZS4KKworICAgT3Ro ZXJ3aXNlLCB3aGVuIGEgZGF0YWJhc2UgbmFtZSBpcyBub3Qgc3BlY2lmaWVkLCBhIHNjcmlw dCBjb250YWluaW5nIHRoZSBTUUwKKyAgIGNvbW1hbmRzIG5lY2Vzc2FyeSB0byByZWJ1aWxk IHRoZSBkYXRhYmFzZSBvciBjbHVzdGVyIGlzIGNyZWF0ZWQgYW5kIHdyaXR0ZW4KICAgIHRv IGEgZmlsZSBvciBzdGFuZGFyZCBvdXRwdXQuICBUaGlzIHNjcmlwdCBvdXRwdXQgaXMgZXF1 aXZhbGVudCB0bwotICAgdGhlIHBsYWluIHRleHQgb3V0cHV0IGZvcm1hdCBvZiA8YXBwbGlj YXRpb24+cGdfZHVtcDwvYXBwbGljYXRpb24+LgorICAgdGhlIHBsYWluIHRleHQgb3V0cHV0 IGZvcm1hdCBvZiA8YXBwbGljYXRpb24+cGdfZHVtcDwvYXBwbGljYXRpb24+IG9yCisgICA8 YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+LgorCiAgICBTb21lIG9mIHRo ZSBvcHRpb25zIGNvbnRyb2xsaW5nIHRoZSBvdXRwdXQgYXJlIHRoZXJlZm9yZSBhbmFsb2dv dXMgdG8KICAgIDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4gb3B0aW9ucy4K ICAgPC9wYXJhPgpAQCAtMTUyLDYgKzE2MSw4IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlv bgogICAgICAgICBjb21tYW5kcyB0aGF0IG1lbnRpb24gdGhpcyBkYXRhYmFzZS4KICAgICAg ICAgQWNjZXNzIHByaXZpbGVnZXMgZm9yIHRoZSBkYXRhYmFzZSBpdHNlbGYgYXJlIGFsc28g cmVzdG9yZWQsCiAgICAgICAgIHVubGVzcyA8b3B0aW9uPi0tbm8tYWNsPC9vcHRpb24+IGlz IHNwZWNpZmllZC4KKyAgICAgICAgPG9wdGlvbj4tLWNyZWF0ZTwvb3B0aW9uPiBpcyByZXF1 aXJlZCB3aGVuIHJlc3RvcmluZyBtdWx0aXBsZSBkYXRhYmFzZXMKKyAgICAgICAgZnJvbSBh biBhcmNoaXZlIGNyZWF0ZWQgYnkgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0 aW9uPi4KICAgICAgICA8L3BhcmE+CiAKICAgICAgICA8cGFyYT4KQEAgLTI0Nyw2ICsyNTgs MjEgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICA8L2xpc3RpdGVtPgogICAg ICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+ PG9wdGlvbj4tZzwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1nbG9i YWxzLW9ubHk8L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBh cmE+CisgICAgICAgIFJlc3RvcmUgb25seSBnbG9iYWwgb2JqZWN0cyAocm9sZXMgYW5kIHRh Ymxlc3BhY2VzKSwgbm8gZGF0YWJhc2VzLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFy YT4KKyAgICAgICAgVGhpcyBvcHRpb24gaXMgb25seSByZWxldmFudCB3aGVuIHJlc3Rvcmlu ZyBmcm9tIGFuIGFyY2hpdmUgbWFkZSB1c2luZyA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwv YXBwbGljYXRpb24+LgorICAgICAgICBOb3RlOiA8b3B0aW9uPi0tZ2xvYmFscy1vbmx5PC9v cHRpb24+IGNhbm5vdCBiZSB1c2VkIHdpdGggPG9wdGlvbj4tLWV4aXQtb24tZXJyb3I8L29w dGlvbj4sCisgICAgICAgICAgICAgIDxvcHRpb24+LS1zaW5nbGUtdHJhbnNhY3Rpb248L29w dGlvbj4sIDxvcHRpb24+LS1jbGVhbjwvb3B0aW9uPiwgb3IgPG9wdGlvbj4tLXRyYW5zYWN0 aW9uLXNpemU8L29wdGlvbj4uCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4K KyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgIDx0 ZXJtPjxvcHRpb24+LUkgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmluZGV4PC9y ZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CiAgICAgICA8dGVybT48b3B0aW9uPi0taW5k ZXg9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmluZGV4PC9yZXBsYWNlYWJsZT48 L29wdGlvbj48L3Rlcm0+CkBAIC01ODEsNiArNjA3LDI4IEBAIFBvc3RncmVTUUwgZG9jdW1l bnRhdGlvbgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAg ICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1leGNsdWRlLWRhdGFi YXNlPTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJs ZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+Cisg ICAgICAgIERvIG5vdCByZXN0b3JlIGRhdGFiYXNlcyB3aG9zZSBuYW1lIG1hdGNoZXMKKyAg ICAgICAgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2Vh YmxlPi4KKyAgICAgICAgTXVsdGlwbGUgcGF0dGVybnMgY2FuIGJlIGV4Y2x1ZGVkIGJ5IHdy aXRpbmcgbXVsdGlwbGUKKyAgICAgICAgPG9wdGlvbj4tLWV4Y2x1ZGUtZGF0YWJhc2U8L29w dGlvbj4gc3dpdGNoZXMuICBUaGUKKyAgICAgICAgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPiBwYXJhbWV0ZXIgaXMKKyAgICAgICAgaW50 ZXJwcmV0ZWQgYXMgYSBwYXR0ZXJuIGFjY29yZGluZyB0byB0aGUgc2FtZSBydWxlcyB1c2Vk IGJ5CisgICAgICAgIDxhcHBsaWNhdGlvbj5wc3FsPC9hcHBsaWNhdGlvbj4ncyA8bGl0ZXJh bD5cZDwvbGl0ZXJhbD4KKyAgICAgICAgY29tbWFuZHMgKHNlZSA8eHJlZiBsaW5rZW5kPSJh cHAtcHNxbC1wYXR0ZXJucyIvPiksCisgICAgICAgIHNvIG11bHRpcGxlIGRhdGFiYXNlcyBj YW4gYWxzbyBiZSBleGNsdWRlZCBieSB3cml0aW5nIHdpbGRjYXJkCisgICAgICAgIGNoYXJh Y3RlcnMgaW4gdGhlIHBhdHRlcm4uICBXaGVuIHVzaW5nIHdpbGRjYXJkcywgYmUgY2FyZWZ1 bCB0bworICAgICAgICBxdW90ZSB0aGUgcGF0dGVybiBpZiBuZWVkZWQgdG8gcHJldmVudCBz aGVsbCB3aWxkY2FyZCBleHBhbnNpb24uCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJh PgorICAgICAgICBUaGlzIG9wdGlvbiBpcyBvbmx5IHJlbGV2YW50IHdoZW4gcmVzdG9yaW5n IGZyb20gYW4gYXJjaGl2ZSBtYWRlIHVzaW5nIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9h cHBsaWNhdGlvbj4uCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAg PC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxv cHRpb24+LS1maWx0ZXI9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmZpbGVuYW1l PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CiAgICAgICA8bGlzdGl0ZW0+CmRpZmYg LS1naXQgYS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQgYi9zcmMvYmluL3BnX2R1bXAv bWVzb24uYnVpbGQKaW5kZXggNzliZDUwMzY4NDEuLjdjOWE0NzU5NjNiIDEwMDY0NAotLS0g YS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL21l c29uLmJ1aWxkCkBAIC0xMDMsNiArMTAzLDcgQEAgdGVzdHMgKz0gewogICAgICAgJ3QvMDA0 X3BnX2R1bXBfcGFyYWxsZWwucGwnLAogICAgICAgJ3QvMDA1X3BnX2R1bXBfZmlsdGVyZmls ZS5wbCcsCiAgICAgICAndC8wMDZfcGdfZHVtcF9jb21wcmVzcy5wbCcsCisJICAndC8wMDdf cGdfZHVtcGFsbC5wbCcsCiAgICAgICAndC8wMTBfZHVtcF9jb25uc3RyLnBsJywKICAgICBd LAogICB9LApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMgYi9zcmMv YmluL3BnX2R1bXAvcGFyYWxsZWwuYwppbmRleCA1NmNiMmMxZjMyZC4uMjlmYTIxYTFjYzAg MTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jCisrKyBiL3NyYy9iaW4v cGdfZHVtcC9wYXJhbGxlbC5jCkBAIC0zMzMsNiArMzMzLDE2IEBAIG9uX2V4aXRfY2xvc2Vf YXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJb25fZXhpdF9uaWNlbHkoYXJjaGl2ZV9jbG9zZV9j b25uZWN0aW9uLCAmc2h1dGRvd25faW5mbyk7CiB9CiAKKy8qCisgKiBXaGVuIHBnX3Jlc3Rv cmUgcmVzdG9yZXMgbXVsdGlwbGUgZGF0YWJhc2VzLCB0aGVuIHVwZGF0ZSBhbHJlYWR5IGFk ZGVkIGVudHJ5CisgKiBpbnRvIGFycmF5IGZvciBjbGVhbnVwLgorICovCit2b2lkCityZXBs YWNlX29uX2V4aXRfY2xvc2VfYXJjaGl2ZShBcmNoaXZlICpBSFgpCit7CisJc2h1dGRvd25f aW5mby5BSFggPSBBSFg7Cit9CisKIC8qCiAgKiBvbl9leGl0X25pY2VseSBoYW5kbGVyIGZv ciBzaHV0dGluZyBkb3duIGRhdGFiYXNlIGNvbm5lY3Rpb25zIGFuZAogICogd29ya2VyIHBy b2Nlc3NlcyBjbGVhbmx5LgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1 cC5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oCmluZGV4IDJmOGQ5Nzk5YzMwLi5m ZGE5MTJiYTBhOSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oCisr KyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaApAQCAtMzEzLDcgKzMxMyw3IEBAIGV4 dGVybiB2b2lkIFNldEFyY2hpdmVPcHRpb25zKEFyY2hpdmUgKkFILCBEdW1wT3B0aW9ucyAq ZG9wdCwgUmVzdG9yZU9wdGlvbnMgKnJvCiAKIGV4dGVybiB2b2lkIFByb2Nlc3NBcmNoaXZl UmVzdG9yZU9wdGlvbnMoQXJjaGl2ZSAqQUhYKTsKIAotZXh0ZXJuIHZvaWQgUmVzdG9yZUFy Y2hpdmUoQXJjaGl2ZSAqQUhYKTsKK2V4dGVybiB2b2lkIFJlc3RvcmVBcmNoaXZlKEFyY2hp dmUgKkFIWCwgYm9vbCBhcHBlbmRfZGF0YSk7CiAKIC8qIE9wZW4gYW4gZXhpc3RpbmcgYXJj aGl2ZSAqLwogZXh0ZXJuIEFyY2hpdmUgKk9wZW5BcmNoaXZlKGNvbnN0IGNoYXIgKkZpbGVT cGVjLCBjb25zdCBBcmNoaXZlRm9ybWF0IGZtdCk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3Vw X2FyY2hpdmVyLmMKaW5kZXggN2FmY2MwODU5YzguLmZhYTA4Y2VkYWE1IDEwMDY0NAotLS0g YS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKKysrIGIvc3JjL2Jpbi9w Z19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCkBAIC04Niw3ICs4Niw3IEBAIHN0YXRpYyBp bnQJUmVzdG9yaW5nVG9EQihBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMgdm9pZCBkdW1w X2xvX2J1ZihBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMgdm9pZCBkdW1wVGltZXN0YW1w KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICptc2csIHRpbWVfdCB0aW0pOwogc3Rh dGljIHZvaWQgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxl bmFtZSwKLQkJCQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNz aW9uX3NwZWMpOworCQkJCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29t cHJlc3Npb25fc3BlYywgYm9vbCBhcHBlbmRfZGF0YSk7CiBzdGF0aWMgQ29tcHJlc3NGaWxl SGFuZGxlICpTYXZlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0YXRpYyB2b2lkIFJl c3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzRmlsZUhhbmRsZSAqc2F2 ZWRPdXRwdXQpOwogCkBAIC0zMzksOSArMzM5LDE0IEBAIFByb2Nlc3NBcmNoaXZlUmVzdG9y ZU9wdGlvbnMoQXJjaGl2ZSAqQUhYKQogCQlTdHJpY3ROYW1lc0NoZWNrKHJvcHQpOwogfQog Ci0vKiBQdWJsaWMgKi8KKy8qCisgKiBSZXN0b3JlQXJjaGl2ZQorICoKKyAqIElmIGFwcGVu ZF9kYXRhIGlzIHNldCwgdGhlbiBhcHBlbmQgZGF0YSBpbnRvIGZpbGUgYXMgd2UgYXJlIHJl c3RvcmluZyBkdW1wCisgKiBvZiBtdWx0aXBsZSBkYXRhYmFzZXMgd2hpY2ggd2FzIHRha2Vu IGJ5IHBnX2R1bXBhbGwuCisgKi8KIHZvaWQKLVJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFI WCkKK1Jlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCwgYm9vbCBhcHBlbmRfZGF0YSkKIHsK IAlBcmNoaXZlSGFuZGxlICpBSCA9IChBcmNoaXZlSGFuZGxlICopIEFIWDsKIAlSZXN0b3Jl T3B0aW9ucyAqcm9wdCA9IEFILT5wdWJsaWMucm9wdDsKQEAgLTQ1OCw3ICs0NjMsNyBAQCBS ZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJICovCiAJc2F2ID0gU2F2ZU91dHB1dChB SCk7CiAJaWYgKHJvcHQtPmZpbGVuYW1lIHx8IHJvcHQtPmNvbXByZXNzaW9uX3NwZWMuYWxn b3JpdGhtICE9IFBHX0NPTVBSRVNTSU9OX05PTkUpCi0JCVNldE91dHB1dChBSCwgcm9wdC0+ ZmlsZW5hbWUsIHJvcHQtPmNvbXByZXNzaW9uX3NwZWMpOworCQlTZXRPdXRwdXQoQUgsIHJv cHQtPmZpbGVuYW1lLCByb3B0LT5jb21wcmVzc2lvbl9zcGVjLCBhcHBlbmRfZGF0YSk7CiAK IAlhaHByaW50ZihBSCwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGR1bXBcbi0tXG5c biIpOwogCkBAIC03NjEsNiArNzY2LDE1IEBAIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFI WCkKIAkJCWlmICgodGUtPnJlcXMgJiAoUkVRX1NDSEVNQSB8IFJFUV9EQVRBIHwgUkVRX1NU QVRTKSkgPT0gMCkKIAkJCQljb250aW51ZTsJCS8qIGlnbm9yZSBpZiBub3QgdG8gYmUgZHVt cGVkIGF0IGFsbCAqLwogCisJCQkvKiBTa2lwIGlmIG5vLXRhYmxlc3BhY2UgaXMgZ2l2ZW4u ICovCisJCQlpZiAocm9wdC0+bm9UYWJsZXNwYWNlICYmIHRlICYmIHRlLT5kZXNjICYmCisJ CQkJKHN0cmNtcCh0ZS0+ZGVzYywgIlRBQkxFU1BBQ0UiKSA9PSAwKSkKKwkJCQljb250aW51 ZTsKKworCQkJLyogU2tpcCBEUk9QIERBVEFCQVNFL1JPTEVTL1RBQkxFU1BBQ0UgaWYgd2Ug ZGlkbid0IHNwZWNpZnkgLS1jbGVhbiAqLworCQkJaWYgKCFyb3B0LT5kcm9wU2NoZW1hICYm IHRlICYmIHRlLT50YWcgJiYgKHN0cmNtcCh0ZS0+dGFnLCAiRFJPUF9HTE9CQUwiKSA9PSAw KSkKKwkJCQljb250aW51ZTsKKwogCQkJc3dpdGNoIChfdG9jRW50cnlSZXN0b3JlUGFzcyh0 ZSkpCiAJCQl7CiAJCQkJY2FzZSBSRVNUT1JFX1BBU1NfTUFJTjoKQEAgLTEzMTYsNyArMTMz MCw3IEBAIFByaW50VE9DU3VtbWFyeShBcmNoaXZlICpBSFgpCiAKIAlzYXYgPSBTYXZlT3V0 cHV0KEFIKTsKIAlpZiAocm9wdC0+ZmlsZW5hbWUpCi0JCVNldE91dHB1dChBSCwgcm9wdC0+ ZmlsZW5hbWUsIG91dF9jb21wcmVzc2lvbl9zcGVjKTsKKwkJU2V0T3V0cHV0KEFILCByb3B0 LT5maWxlbmFtZSwgb3V0X2NvbXByZXNzaW9uX3NwZWMsIGZhbHNlKTsKIAogCWlmIChzdHJm dGltZShzdGFtcF9zdHIsIHNpemVvZihzdGFtcF9zdHIpLCBQR0RVTVBfU1RSRlRJTUVfRk1U LAogCQkJCSBsb2NhbHRpbWUoJkFILT5jcmVhdGVEYXRlKSkgPT0gMCkKQEAgLTE2OTEsMTEg KzE3MDUsMTUgQEAgYXJjaHByaW50ZihBcmNoaXZlICpBSCwgY29uc3QgY2hhciAqZm10LC4u LikKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFN0dWZmIGJlbG93 IGhlcmUgc2hvdWxkIGJlICdwcml2YXRlJyB0byB0aGUgYXJjaGl2ZXIgcm91dGluZXMKKyAq CisgKiBJZiBhcHBlbmRfZGF0YSBpcyBzZXQsIHRoZW4gYXBwZW5kIGRhdGEgaW50byBmaWxl IGFzIHdlIGFyZSByZXN0b3JpbmcgZHVtcAorICogb2YgbXVsdGlwbGUgZGF0YWJhc2VzIHdo aWNoIHdhcyB0YWtlbiBieSBwZ19kdW1wYWxsLgogICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCiAKIHN0YXRpYyB2b2lkCiBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgs IGNvbnN0IGNoYXIgKmZpbGVuYW1lLAotCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmlj YXRpb24gY29tcHJlc3Npb25fc3BlYykKKwkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZp Y2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsCisJCSAgYm9vbCBhcHBlbmRfZGF0YSkKIHsKIAlD b21wcmVzc0ZpbGVIYW5kbGUgKkNGSDsKIAljb25zdCBjaGFyICptb2RlOwpAQCAtMTcxNSw3 ICsxNzMzLDcgQEAgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpm aWxlbmFtZSwKIAllbHNlCiAJCWZuID0gZmlsZW5vKHN0ZG91dCk7CiAKLQlpZiAoQUgtPm1v ZGUgPT0gYXJjaE1vZGVBcHBlbmQpCisJaWYgKGFwcGVuZF9kYXRhIHx8IEFILT5tb2RlID09 IGFyY2hNb2RlQXBwZW5kKQogCQltb2RlID0gUEdfQklOQVJZX0E7CiAJZWxzZQogCQltb2Rl ID0gUEdfQklOQVJZX1c7CkBAIC0yMzkxLDcgKzI0MDksNyBAQCBfYWxsb2NBSChjb25zdCBj aGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQsCiAKIAkvKiBpbml0aWFs aXplIGZvciBiYWNrd2FyZHMgY29tcGF0aWJsZSBzdHJpbmcgcHJvY2Vzc2luZyAqLwogCUFI LT5wdWJsaWMuZW5jb2RpbmcgPSAwOwkvKiBQR19TUUxfQVNDSUkgKi8KLQlBSC0+cHVibGlj LnN0ZF9zdHJpbmdzID0gZmFsc2U7CisJQUgtPnB1YmxpYy5zdGRfc3RyaW5ncyA9IHRydWU7 CiAKIAkvKiBzcWwgZXJyb3IgaGFuZGxpbmcgKi8KIAlBSC0+cHVibGljLmV4aXRfb25fZXJy b3IgPSB0cnVlOwpAQCAtMzAyNyw2ICszMDQ1LDE2IEBAIF90b2NFbnRyeVJlcXVpcmVkKFRv Y0VudHJ5ICp0ZSwgdGVTZWN0aW9uIGN1clNlY3Rpb24sIEFyY2hpdmVIYW5kbGUgKkFIKQog CQkJcmV0dXJuIDA7CiAJfQogCisJLyoKKwkgKiBHbG9iYWwgb2JqZWN0IFRPQyBlbnRyaWVz IChlLmcuLCBST0xFcyBvciBUQUJMRVNQQUNFcykgbXVzdCBub3QgYmUKKwkgKiBpZ25vcmVk LgorCSAqLworCWlmIChzdHJjbXAodGUtPmRlc2MsICJST0xFIikgPT0gMCB8fAorCQlzdHJj bXAodGUtPmRlc2MsICJST0xFIFBST1BFUlRJRVMiKSA9PSAwIHx8CisJCXN0cmNtcCh0ZS0+ ZGVzYywgIlRBQkxFU1BBQ0UiKSA9PSAwIHx8CisJCXN0cmNtcCh0ZS0+ZGVzYywgIkRST1Bf R0xPQkFMIikgPT0gMCkKKwkJcmV0dXJuIFJFUV9TQ0hFTUE7CisKIAkvKgogCSAqIFByb2Nl c3MgZXhjbHVzaW9ucyB0aGF0IGFmZmVjdCBjZXJ0YWluIGNsYXNzZXMgb2YgVE9DIGVudHJp ZXMuCiAJICovCkBAIC0zMDYyLDYgKzMwOTAsMTQgQEAgX3RvY0VudHJ5UmVxdWlyZWQoVG9j RW50cnkgKnRlLCB0ZVNlY3Rpb24gY3VyU2VjdGlvbiwgQXJjaGl2ZUhhbmRsZSAqQUgpCiAJ CWlmIChyb3B0LT5ub19zdWJzY3JpcHRpb25zICYmCiAJCQlzdHJuY21wKHRlLT50YWcsICJT VUJTQ1JJUFRJT04iLCBzdHJsZW4oIlNVQlNDUklQVElPTiIpKSA9PSAwKQogCQkJcmV0dXJu IDA7CisKKwkJLyoKKwkJICogR2xvYmFsIG9iamVjdCBUT0MgZW50cmllcyAoZS5nLiwgUk9M RXMgb3IgVEFCTEVTUEFDRXMpIGFyZSB0cmVhdGVkIGFzCisJCSAqIFJFUV9TQ0hFTUE7IGZv bGxvdyB0aGlzIGNvbnZlbnRpb24gZm9yIHRoZWlyIGFzc29jaWF0ZWQgY29tbWVudHMuCisJ CSAqLworCQlpZiAoc3RybmNtcCh0ZS0+ZGVzYywgIlJPTEUiLCBzdHJsZW4oIlJPTEUiKSkg PT0gMCB8fAorCQkJc3RybmNtcCh0ZS0+ZGVzYywgIlRBQkxFU1BBQ0UiLCBzdHJsZW4oIlRB QkxFU1BBQ0UiKSkgPT0gMCkKKwkJCXJldHVybiBSRVFfU0NIRU1BOwogCX0KIAogCS8qCkBA IC0zMDkxLDYgKzMxMjcsMTQgQEAgX3RvY0VudHJ5UmVxdWlyZWQoVG9jRW50cnkgKnRlLCB0 ZVNlY3Rpb24gY3VyU2VjdGlvbiwgQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCWlmIChyb3B0LT5u b19zdWJzY3JpcHRpb25zICYmCiAJCQlzdHJuY21wKHRlLT50YWcsICJTVUJTQ1JJUFRJT04i LCBzdHJsZW4oIlNVQlNDUklQVElPTiIpKSA9PSAwKQogCQkJcmV0dXJuIDA7CisKKwkJLyoK KwkJICogR2xvYmFsIG9iamVjdCBUT0MgZW50cmllcyAoZS5nLiwgUk9MRXMgb3IgVEFCTEVT UEFDRXMpIGFyZSB0cmVhdGVkIGFzCisJCSAqIFJFUV9TQ0hFTUE7IGZvbGxvdyB0aGlzIGNv bnZlbnRpb24gZm9yIHRoZWlyIGFzc29jaWF0ZWQgU0VDVVJJVFkgTEFCRUxzLgorCQkgKi8K KwkJaWYgKHN0cm5jbXAodGUtPnRhZywgIlJPTEUiLCBzdHJsZW4oIlJPTEUiKSkgPT0gMCB8 fAorCQkJc3RybmNtcCh0ZS0+dGFnLCAiVEFCTEVTUEFDRSIsIHN0cmxlbigiVEFCTEVTUEFD RSIpKSA9PSAwKQorCQkJcmV0dXJuIFJFUV9TQ0hFTUE7CiAJfQogCiAJLyogSWYgaXQncyBh IHN1YnNjcmlwdGlvbiwgbWF5YmUgaWdub3JlIGl0ICovCkBAIC0zODY1LDYgKzM5MDksOSBA QCBfZ2V0T2JqZWN0RGVzY3JpcHRpb24oUFFFeHBCdWZmZXIgYnVmLCBjb25zdCBUb2NFbnRy eSAqdGUpCiAJZWxzZSBpZiAoc3RyY21wKHR5cGUsICJDQVNUIikgPT0gMCB8fAogCQkJIHN0 cmNtcCh0eXBlLCAiQ0hFQ0sgQ09OU1RSQUlOVCIpID09IDAgfHwKIAkJCSBzdHJjbXAodHlw ZSwgIkNPTlNUUkFJTlQiKSA9PSAwIHx8CisJCQkgc3RyY21wKHR5cGUsICJEUk9QX0dMT0JB TCIpID09IDAgfHwKKwkJCSBzdHJjbXAodHlwZSwgIlJPTEUgUFJPUEVSVElFUyIpID09IDAg fHwKKwkJCSBzdHJjbXAodHlwZSwgIlJPTEUiKSA9PSAwIHx8CiAJCQkgc3RyY21wKHR5cGUs ICJEQVRBQkFTRSBQUk9QRVJUSUVTIikgPT0gMCB8fAogCQkJIHN0cmNtcCh0eXBlLCAiREVG QVVMVCIpID09IDAgfHwKIAkJCSBzdHJjbXAodHlwZSwgIkZLIENPTlNUUkFJTlQiKSA9PSAw IHx8CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgg Yi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKaW5kZXggMzI1YjUzZmM5 YmQuLjM2NTA3M2IzZWFlIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3Vw X2FyY2hpdmVyLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5o CkBAIC0zOTQsNiArMzk0LDcgQEAgc3RydWN0IF90b2NFbnRyeQogCiBleHRlcm4gaW50CXBh cmFsbGVsX3Jlc3RvcmUoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSk7CiBleHRl cm4gdm9pZCBvbl9leGl0X2Nsb3NlX2FyY2hpdmUoQXJjaGl2ZSAqQUhYKTsKK2V4dGVybiB2 b2lkIHJlcGxhY2Vfb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFyY2hpdmUgKkFIWCk7CiAKIGV4 dGVybiB2b2lkIHdhcm5fb3JfZXhpdF9ob3JyaWJseShBcmNoaXZlSGFuZGxlICpBSCwgY29u c3QgY2hhciAqZm10LC4uLikgcGdfYXR0cmlidXRlX3ByaW50ZigyLCAzKTsKIApkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYyBiL3NyYy9iaW4vcGdfZHVt cC9wZ19iYWNrdXBfdGFyLmMKaW5kZXggYjViYTNiNDZkZDkuLmQ5NGQwZGUyYTVkIDEwMDY0 NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jCisrKyBiL3NyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMKQEAgLTgyNiw3ICs4MjYsNyBAQCBfQ2xvc2VBcmNo aXZlKEFyY2hpdmVIYW5kbGUgKkFIKQogCQlzYXZWZXJib3NlID0gQUgtPnB1YmxpYy52ZXJi b3NlOwogCQlBSC0+cHVibGljLnZlcmJvc2UgPSAwOwogCi0JCVJlc3RvcmVBcmNoaXZlKChB cmNoaXZlICopIEFIKTsKKwkJUmVzdG9yZUFyY2hpdmUoKEFyY2hpdmUgKikgQUgsIGZhbHNl KTsKIAogCQlTZXRBcmNoaXZlT3B0aW9ucygoQXJjaGl2ZSAqKSBBSCwgc2F2RG9wdCwgc2F2 Um9wdCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgYi9zcmMv YmluL3BnX2R1bXAvcGdfZHVtcC5jCmluZGV4IDQ5NTk4MzA0MzM1Li5kM2QwY2FjOThkZiAx MDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYworKysgYi9zcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5jCkBAIC0xMjkyLDcgKzEyOTIsNyBAQCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKIAkgKiByaWdodCBub3cuCiAJICovCiAJaWYgKHBsYWluVGV4dCkKLQkJ UmVzdG9yZUFyY2hpdmUoZm91dCk7CisJCVJlc3RvcmVBcmNoaXZlKGZvdXQsIGZhbHNlKTsK IAogCUNsb3NlQXJjaGl2ZShmb3V0KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1w L3BnX2R1bXBhbGwuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKaW5kZXggOTgz ODlkMjAzNGMuLjFlNTg2NDZjY2Y4IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdf ZHVtcGFsbC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKQEAgLTEsMTMg KzEsMjAgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIHBnX2R1bXBhbGwuYwor ICoJICBwZ19kdW1wYWxsIGR1bXBzIGFsbCBkYXRhYmFzZXMgYW5kIGdsb2JhbCBvYmplY3Rz IChyb2xlcyBhbmQKKyAqCSAgdGFibGVzcGFjZXMpIGZyb20gYSBQb3N0Z3JlU1FMIGNsdXN0 ZXIuCisgKgorICoJICBGb3IgdGV4dCBmb3JtYXQgb3V0cHV0LCBnbG9iYWxzIGFyZSB3cml0 dGVuIGRpcmVjdGx5IGFuZCBwZ19kdW1wIGlzCisgKgkgIGludm9rZWQgZm9yIGVhY2ggZGF0 YWJhc2UsIHdpdGggYWxsIG91dHB1dCBnb2luZyB0byBzdGRvdXQgb3IgYSBmaWxlLgorICoK KyAqCSAgRm9yIG5vbi10ZXh0IGZvcm1hdHMgKGN1c3RvbSwgZGlyZWN0b3J5LCB0YXIpLCBh IGRpcmVjdG9yeSBpcyBjcmVhdGVkCisgKgkgIGNvbnRhaW5pbmcgYSB0b2MuZ2xvIGZpbGUg d2l0aCBnbG9iYWwgb2JqZWN0cywgYSBtYXAuZGF0IGZpbGUgbWFwcGluZworICoJICBkYXRh YmFzZSBPSURzIHRvIG5hbWVzLCBhbmQgYSBkYXRhYmFzZXMvIHN1YmRpcmVjdG9yeSB3aXRo IGluZGl2aWR1YWwKKyAqCSAgcGdfZHVtcCBhcmNoaXZlcyBmb3IgZWFjaCBkYXRhYmFzZS4K ICAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNiwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5 NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCiAgKgotICogcGdf ZHVtcGFsbCBmb3JjZXMgYWxsIHBnX2R1bXAgb3V0cHV0IHRvIGJlIHRleHQsIHNpbmNlIGl0 IGFsc28gb3V0cHV0cwotICogdGV4dCBpbnRvIHRoZSBzYW1lIG91dHB1dCBzdHJlYW0uCi0g KgogICogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYwogICoKICAqLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQpAQCAtMzAsNiArMzcsNyBAQAogI2luY2x1ZGUgImZlX3V0aWxzL3N0cmluZ191 dGlscy5oIgogI2luY2x1ZGUgImZpbHRlci5oIgogI2luY2x1ZGUgImdldG9wdF9sb25nLmgi CisjaW5jbHVkZSAicGdfYmFja3VwX2FyY2hpdmVyLmgiCiAKIC8qIHZlcnNpb24gc3RyaW5n IHdlIGV4cGVjdCBiYWNrIGZyb20gcGdfZHVtcCAqLwogI2RlZmluZSBQR0RVTVBfVkVSU0lP TlNUUiAicGdfZHVtcCAoUG9zdGdyZVNRTCkgIiBQR19WRVJTSU9OICJcbiIKQEAgLTY3LDcg Kzc1LDcgQEAgc3RhdGljIHZvaWQgZHJvcERCcyhQR2Nvbm4gKmNvbm4pOwogc3RhdGljIHZv aWQgZHVtcFVzZXJDb25maWcoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICp1c2VybmFtZSk7 CiBzdGF0aWMgdm9pZCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubik7CiBzdGF0aWMgdm9p ZCBkdW1wVGltZXN0YW1wKGNvbnN0IGNoYXIgKm1zZyk7Ci1zdGF0aWMgaW50CXJ1blBnRHVt cChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzKTsKK3N0YXRp YyBpbnQJcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRl X29wdHMsIGNoYXIgKmRiZmlsZSk7CiBzdGF0aWMgdm9pZCBidWlsZFNoU2VjTGFiZWxzKFBH Y29ubiAqY29ubiwKIAkJCQkJCQkgY29uc3QgY2hhciAqY2F0YWxvZ19uYW1lLCBPaWQgb2Jq ZWN0SWQsCiAJCQkJCQkJIGNvbnN0IGNoYXIgKm9ianR5cGUsIGNvbnN0IGNoYXIgKm9iam5h bWUsCkBAIC03Niw2ICs4NCw4IEBAIHN0YXRpYyB2b2lkIGV4ZWN1dGVDb21tYW5kKFBHY29u biAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpOwogc3RhdGljIHZvaWQgZXhwYW5kX2RibmFt ZV9wYXR0ZXJucyhQR2Nvbm4gKmNvbm4sIFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRlcm5zLAog CQkJCQkJCQkgICBTaW1wbGVTdHJpbmdMaXN0ICpuYW1lcyk7CiBzdGF0aWMgdm9pZCByZWFk X2R1bXBhbGxfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgU2ltcGxlU3RyaW5nTGlz dCAqcGF0dGVybik7CitzdGF0aWMgQXJjaGl2ZUZvcm1hdCBwYXJzZUR1bXBGb3JtYXQoY29u c3QgY2hhciAqZm9ybWF0KTsKK3N0YXRpYyBpbnQJY3JlYXRlRHVtcElkKHZvaWQpOwogCiBz dGF0aWMgY2hhciBwZ19kdW1wX2JpbltNQVhQR1BBVEhdOwogc3RhdGljIFBRRXhwQnVmZmVy IHBnZHVtcG9wdHM7CkBAIC0xMjMsNiArMTMzLDExIEBAIHN0YXRpYyBTaW1wbGVTdHJpbmdM aXN0IGRhdGFiYXNlX2V4Y2x1ZGVfcGF0dGVybnMgPSB7TlVMTCwgTlVMTH07CiBzdGF0aWMg U2ltcGxlU3RyaW5nTGlzdCBkYXRhYmFzZV9leGNsdWRlX25hbWVzID0ge05VTEwsIE5VTEx9 OwogCiBzdGF0aWMgY2hhciAqcmVzdHJpY3Rfa2V5Oworc3RhdGljIEFyY2hpdmUgKmZvdXQg PSBOVUxMOworc3RhdGljIHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25f c3BlYyA9IHswfTsKK3N0YXRpYyBpbnQJZHVtcElkVmFsID0gMDsKK3N0YXRpYyBBcmNoaXZl Rm9ybWF0IGFyY2hEdW1wRm9ybWF0ID0gYXJjaE51bGw7CitzdGF0aWMgY29uc3QgQ2F0YWxv Z0lkIG5pbENhdGFsb2dJZCA9IHswLCAwfTsKIAogaW50CiBtYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pCkBAIC0xNDgsNiArMTYzLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdKQogCQl7InBhc3N3b3JkIiwgbm9fYXJndW1lbnQsIE5VTEwsICdXJ30sCiAJCXsibm8t cHJpdmlsZWdlcyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAneCd9LAogCQl7Im5vLWFjbCIsIG5v X2FyZ3VtZW50LCBOVUxMLCAneCd9LAorCQl7ImZvcm1hdCIsIHJlcXVpcmVkX2FyZ3VtZW50 LCBOVUxMLCAnRid9LAogCiAJCS8qCiAJCSAqIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBkb24n dCBoYXZlIGFuIGVxdWl2YWxlbnQgc2hvcnQgb3B0aW9uIGxldHRlcgpAQCAtMTk3LDYgKzIx Myw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAljaGFyCSAgICpwZ2RiID0g TlVMTDsKIAljaGFyCSAgICp1c2Vfcm9sZSA9IE5VTEw7CiAJY29uc3QgY2hhciAqZHVtcGVu Y29kaW5nID0gTlVMTDsKKwljb25zdCBjaGFyICpmb3JtYXRfbmFtZSA9ICJwIjsKIAl0cml2 YWx1ZQlwcm9tcHRfcGFzc3dvcmQgPSBUUklfREVGQVVMVDsKIAlib29sCQlkYXRhX29ubHkg PSBmYWxzZTsKIAlib29sCQlnbG9iYWxzX29ubHkgPSBmYWxzZTsKQEAgLTIwNyw2ICsyMjQs NyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJaW50CQkJYywKIAkJCQlyZXQ7 CiAJaW50CQkJb3B0aW5kZXg7CisJRHVtcE9wdGlvbnMgZG9wdDsKIAogCXBnX2xvZ2dpbmdf aW5pdChhcmd2WzBdKTsKIAlwZ19sb2dnaW5nX3NldF9sZXZlbChQR19MT0dfV0FSTklORyk7 CkBAIC0yNDQsOCArMjYyLDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCX0K IAogCXBnZHVtcG9wdHMgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCUluaXREdW1wT3B0aW9u cygmZG9wdCk7CiAKLQl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiYWNk OkU6ZjpnaDpsOk9wOnJzUzp0VTp2d1d4IiwgbG9uZ19vcHRpb25zLCAmb3B0aW5kZXgpKSAh PSAtMSkKKwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiYWNkOkU6ZjpG OmdoOmw6T3A6cnNTOnRVOnZ3V3giLCBsb25nX29wdGlvbnMsICZvcHRpbmRleCkpICE9IC0x KQogCXsKIAkJc3dpdGNoIChjKQogCQl7CkBAIC0yNzMsNyArMjkyLDkgQEAgbWFpbihpbnQg YXJnYywgY2hhciAqYXJndltdKQogCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHBnZHVtcG9w dHMsICIgLWYgIik7CiAJCQkJYXBwZW5kU2hlbGxTdHJpbmcocGdkdW1wb3B0cywgZmlsZW5h bWUpOwogCQkJCWJyZWFrOwotCisJCQljYXNlICdGJzoKKwkJCQlmb3JtYXRfbmFtZSA9IHBn X3N0cmR1cChvcHRhcmcpOworCQkJCWJyZWFrOwogCQkJY2FzZSAnZyc6CiAJCQkJZ2xvYmFs c19vbmx5ID0gdHJ1ZTsKIAkJCQlicmVhazsKQEAgLTMxMyw2ICszMzQsNyBAQCBtYWluKGlu dCBhcmdjLCBjaGFyICphcmd2W10pCiAKIAkJCWNhc2UgJ1UnOgogCQkJCXBndXNlciA9IHBn X3N0cmR1cChvcHRhcmcpOworCQkJCWRvcHQuY3BhcmFtcy51c2VybmFtZSA9IHBnX3N0cmR1 cChvcHRhcmcpOwogCQkJCWJyZWFrOwogCiAJCQljYXNlICd2JzoKQEAgLTQzNCw2ICs0NTYs MzIgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQlleGl0X25pY2VseSgxKTsK IAl9CiAKKwkvKiBHZXQgZm9ybWF0IGZvciBkdW1wLiAqLworCWFyY2hEdW1wRm9ybWF0ID0g cGFyc2VEdW1wRm9ybWF0KGZvcm1hdF9uYW1lKTsKKworCS8qCisJICogSWYgYSBub24tcGxh aW4gZm9ybWF0IGlzIHNwZWNpZmllZCwgYSBmaWxlIG5hbWUgaXMgYWxzbyByZXF1aXJlZCBh cyB0aGUKKwkgKiBwYXRoIHRvIHRoZSBtYWluIGRpcmVjdG9yeS4KKwkgKi8KKwlpZiAoYXJj aER1bXBGb3JtYXQgIT0gYXJjaE51bGwgJiYKKwkJKCFmaWxlbmFtZSB8fCBzdHJjbXAoZmls ZW5hbWUsICIiKSA9PSAwKSkKKwl7CisJCXBnX2xvZ19lcnJvcigib3B0aW9uICVzPWR8Y3x0 IHJlcXVpcmVzIG9wdGlvbiAlcyIsCisJCQkJCSAiLUYvLS1mb3JtYXQiLCAiLWYvLS1maWxl Iik7CisJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBp bmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CisJCWV4aXRfbmljZWx5KDEpOworCX0KKworCS8q IHJlc3RyaWN0LWtleSBpcyBvbmx5IHN1cHBvcnRlZCB3aXRoIC0tZm9ybWF0PXBsYWluICov CisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsICYmIHJlc3RyaWN0X2tleSkKKwkJ cGdfZmF0YWwoIm9wdGlvbiAlcyBjYW4gb25seSBiZSB1c2VkIHdpdGggJXM9cGxhaW4iLAor CQkJCSAiLS1yZXN0cmljdC1rZXkiLCAiLS1mb3JtYXQiKTsKKworCS8qIC0tY2xlYW4gYW5k IC1nLy0tZ2xvYmFscy1vbmx5IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIGluIG5vbi10ZXh0 IGR1bXAgKi8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwgJiYgb3V0cHV0X2Ns ZWFuICYmIGdsb2JhbHNfb25seSkKKwkJcGdfZmF0YWwoIm9wdGlvbnMgJXMgYW5kICVzIGNh bm5vdCBiZSB1c2VkIHRvZ2V0aGVyIGluIG5vbi10ZXh0IGR1bXAiLAorCQkJCSAiLS1jbGVh biIsICItZy8tLWdsb2JhbHMtb25seSIpOworCiAJLyoKIAkgKiBJZiBwYXNzd29yZCB2YWx1 ZXMgYXJlIG5vdCByZXF1aXJlZCBpbiB0aGUgZHVtcCwgc3dpdGNoIHRvIHVzaW5nCiAJICog cGdfcm9sZXMgd2hpY2ggaXMgZXF1YWxseSB1c2VmdWwsIGp1c3QgbW9yZSBsaWtlbHkgdG8g aGF2ZSB1bnJlc3RyaWN0ZWQKQEAgLTQ5NCw2ICs1NDIsMjcgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqYXJndltdKQogCWlmIChzZXF1ZW5jZV9kYXRhKQogCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cihwZ2R1bXBvcHRzLCAiIC0tc2VxdWVuY2UtZGF0YSIpOwogCisJLyoKKwkgKiBPcGVu IHRoZSBvdXRwdXQgZmlsZSBpZiByZXF1aXJlZCwgb3RoZXJ3aXNlIHVzZSBzdGRvdXQuICBJ ZiByZXF1aXJlZCwKKwkgKiB0aGVuIGNyZWF0ZSBuZXcgZGlyZWN0b3J5LgorCSAqLworCWlm IChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJCUFzc2VydChmaWxlbmFtZSk7 CisKKwkJLyogQ3JlYXRlIG5ldyBkaXJlY3Rvcnkgb3IgYWNjZXB0IHRoZSBlbXB0eSBleGlz dGluZyBkaXJlY3RvcnkuICovCisJCWNyZWF0ZV9vcl9vcGVuX2RpcihmaWxlbmFtZSk7CisJ fQorCWVsc2UgaWYgKGZpbGVuYW1lKQorCXsKKwkJT1BGID0gZm9wZW4oZmlsZW5hbWUsIFBH X0JJTkFSWV9XKTsKKwkJaWYgKCFPUEYpCisJCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4g b3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsCisJCQkJCSBmaWxlbmFtZSk7CisJfQorCWVsc2UK KwkJT1BGID0gc3Rkb3V0OworCiAJLyoKIAkgKiBJZiB5b3UgZG9uJ3QgcHJvdmlkZSBhIHJl c3RyaWN0IGtleSwgb25lIHdpbGwgYmUgYXBwb2ludGVkIGZvciB5b3UuCiAJICovCkBAIC01 NDMsMTkgKzYxMiw2IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlleHBhbmRf ZGJuYW1lX3BhdHRlcm5zKGNvbm4sICZkYXRhYmFzZV9leGNsdWRlX3BhdHRlcm5zLAogCQkJ CQkJICAgJmRhdGFiYXNlX2V4Y2x1ZGVfbmFtZXMpOwogCi0JLyoKLQkgKiBPcGVuIHRoZSBv dXRwdXQgZmlsZSBpZiByZXF1aXJlZCwgb3RoZXJ3aXNlIHVzZSBzdGRvdXQKLQkgKi8KLQlp ZiAoZmlsZW5hbWUpCi0JewotCQlPUEYgPSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX1cp OwotCQlpZiAoIU9QRikKLQkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmls ZSBcIiVzXCI6ICVtIiwKLQkJCQkJIGZpbGVuYW1lKTsKLQl9Ci0JZWxzZQotCQlPUEYgPSBz dGRvdXQ7Ci0KIAkvKgogCSAqIFNldCB0aGUgY2xpZW50IGVuY29kaW5nIGlmIHJlcXVlc3Rl ZC4KIAkgKi8KQEAgLTU5MywzNSArNjQ5LDExMSBAQCBtYWluKGludCBhcmdjLCBjaGFyICph cmd2W10pCiAJaWYgKHF1b3RlX2FsbF9pZGVudGlmaWVycykKIAkJZXhlY3V0ZUNvbW1hbmQo Y29ubiwgIlNFVCBxdW90ZV9hbGxfaWRlbnRpZmllcnMgPSB0cnVlIik7CiAKLQlmcHJpbnRm KE9QRiwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgZHVtcFxuLS1cblxu Iik7Ci0JaWYgKHZlcmJvc2UpCi0JCWR1bXBUaW1lc3RhbXAoIlN0YXJ0ZWQgb24iKTsKLQot CS8qCi0JICogRW50ZXIgcmVzdHJpY3RlZCBtb2RlIHRvIGJsb2NrIGFueSB1bmV4cGVjdGVk IHBzcWwgbWV0YS1jb21tYW5kcy4gIEEKLQkgKiBtYWxpY2lvdXMgc291cmNlIG1pZ2h0IHRy eSB0byBpbmplY3QgYSB2YXJpZXR5IG9mIHRoaW5ncyB2aWEgYm9ndXMKLQkgKiByZXNwb25z ZXMgdG8gcXVlcmllcy4gIFdoaWxlIHdlIGNhbm5vdCBwcmV2ZW50IHN1Y2ggc291cmNlcyBm cm9tCi0JICogYWZmZWN0aW5nIHRoZSBkZXN0aW5hdGlvbiBhdCByZXN0b3JlIHRpbWUsIHdl IGNhbiBibG9jayBwc3FsCi0JICogbWV0YS1jb21tYW5kcyBzbyB0aGF0IHRoZSBjbGllbnQg bWFjaGluZSB0aGF0IHJ1bnMgcHNxbCB3aXRoIHRoZSBkdW1wCi0JICogb3V0cHV0IHJlbWFp bnMgdW5hZmZlY3RlZC4KLQkgKi8KLQlmcHJpbnRmKE9QRiwgIlxccmVzdHJpY3QgJXNcblxu IiwgcmVzdHJpY3Rfa2V5KTsKLQotCS8qCi0JICogV2UgdXNlZCB0byBlbWl0IFxjb25uZWN0 IHBvc3RncmVzIGhlcmUsIGJ1dCB0aGF0IHNlcnZlZCBubyBwdXJwb3NlCi0JICogb3RoZXIg dGhhbiB0byBicmVhayB0aGluZ3MgZm9yIGluc3RhbGxhdGlvbnMgd2l0aG91dCBhIHBvc3Rn cmVzCi0JICogZGF0YWJhc2UuICBFdmVyeXRoaW5nIHdlJ3JlIHJlc3RvcmluZyBoZXJlIGlz IGEgZ2xvYmFsLCBzbyB3aGljaGV2ZXIKLQkgKiBkYXRhYmFzZSB3ZSdyZSBjb25uZWN0ZWQg dG8gYXQgdGhlIG1vbWVudCBpcyBmaW5lLgotCSAqLwotCi0JLyogUmVzdG9yZSB3aWxsIG5l ZWQgdG8gd3JpdGUgdG8gdGhlIHRhcmdldCBjbHVzdGVyICovCi0JZnByaW50ZihPUEYsICJT RVQgZGVmYXVsdF90cmFuc2FjdGlvbl9yZWFkX29ubHkgPSBvZmY7XG5cbiIpOwotCi0JLyog UmVwbGljYXRlIGVuY29kaW5nIGFuZCBzdGFuZGFyZF9jb25mb3JtaW5nX3N0cmluZ3MgaW4g b3V0cHV0ICovCi0JZnByaW50ZihPUEYsICJTRVQgY2xpZW50X2VuY29kaW5nID0gJyVzJztc biIsCisJLyogY3JlYXRlIGEgYXJjaGl2ZSBmaWxlIGZvciBnbG9iYWwgY29tbWFuZHMuICov CisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJUFFFeHBCdWZmZXIg cXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwkJY2hhciAgICAgICAgICAgIGdsb2JhbF9w YXRoW01BWFBHUEFUSF07CisJCWNvbnN0IGNoYXIgKmVuY25hbWU7CisKKwkJLyogU2V0IGZp bGUgcGF0aCBmb3IgZ2xvYmFsIHNxbCBjb21tYW5kcy4gKi8KKwkJc25wcmludGYoZ2xvYmFs X3BhdGgsIE1BWFBHUEFUSCwgIiVzL3RvYy5nbG8iLCBmaWxlbmFtZSk7CisKKwkJLyogT3Bl biB0aGUgb3V0cHV0IGZpbGUgKi8KKwkJZm91dCA9IENyZWF0ZUFyY2hpdmUoZ2xvYmFsX3Bh dGgsIGFyY2hDdXN0b20sIGNvbXByZXNzaW9uX3NwZWMsCisJCQkJZG9zeW5jLCBhcmNoTW9k ZVdyaXRlLCBOVUxMLCBEQVRBX0RJUl9TWU5DX01FVEhPRF9GU1lOQyk7CisKKwkJLyogTWFr ZSBkdW1wIG9wdGlvbnMgYWNjZXNzaWJsZSByaWdodCBhd2F5ICovCisJCVNldEFyY2hpdmVP cHRpb25zKGZvdXQsICZkb3B0LCBOVUxMKTsKKworCQkoKEFyY2hpdmVIYW5kbGUgKikgZm91 dCktPmNvbm5lY3Rpb24gPSBjb25uOworCQkoKEFyY2hpdmVIYW5kbGUgKikgZm91dCktPnB1 YmxpYy5udW1Xb3JrZXJzID0gMTsKKworCQkvKiBSZWdpc3RlciB0aGUgY2xlYW51cCBob29r ICovCisJCW9uX2V4aXRfY2xvc2VfYXJjaGl2ZShmb3V0KTsKKworCQkvKiBMZXQgdGhlIGFy Y2hpdmVyIGtub3cgaG93IG5vaXN5IHRvIGJlICovCisJCWZvdXQtPnZlcmJvc2UgPSB2ZXJi b3NlOworCisJCS8qCisJCSAqIFdlIGFsbG93IHRoZSBzZXJ2ZXIgdG8gYmUgYmFjayB0byA5 LjIsIGFuZCB1cCB0byBhbnkgbWlub3IgcmVsZWFzZQorCQkgKiBvZiBvdXIgb3duIG1ham9y IHZlcnNpb24uICAoU2VlIGFsc28gdmVyc2lvbiBjaGVjayBpbgorCQkgKiBwZ19kdW1wYWxs LmMuKQorCQkgKi8KKwkJZm91dC0+bWluUmVtb3RlVmVyc2lvbiA9IDkwMjAwOworCQlmb3V0 LT5tYXhSZW1vdGVWZXJzaW9uID0gKFBHX1ZFUlNJT05fTlVNIC8gMTAwKSAqIDEwMCArIDk5 OworCQlmb3V0LT5udW1Xb3JrZXJzID0gMTsKKworCQkvKiBEdW1wIGRlZmF1bHRfdHJhbnNh Y3Rpb25fcmVhZF9vbmx5LiAqLworCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxcnksICJTRVQg ZGVmYXVsdF90cmFuc2FjdGlvbl9yZWFkX29ubHkgPSBvZmY7XG5cbiIpOworCQlBcmNoaXZl RW50cnkoZm91dCwKKwkJCQkJIG5pbENhdGFsb2dJZCwJLyogY2F0YWxvZyBJRCAqLworCQkJ CQkgY3JlYXRlRHVtcElkKCksCS8qIGR1bXAgSUQgKi8KKwkJCQkJIEFSQ0hJVkVfT1BUUygu dGFnID0gImRlZmF1bHRfdHJhbnNhY3Rpb25fcmVhZF9vbmx5IiwKKwkJCQkJCQkJICAuZGVz Y3JpcHRpb24gPSAiZGVmYXVsdF90cmFuc2FjdGlvbl9yZWFkX29ubHkiLAorCQkJCQkJCQkg IC5zZWN0aW9uID0gU0VDVElPTl9QUkVfREFUQSwKKwkJCQkJCQkJICAuY3JlYXRlU3RtdCA9 IHFyeS0+ZGF0YSkpOworCQlyZXNldFBRRXhwQnVmZmVyKHFyeSk7CisKKwkJLyogUHV0IHRo ZSBjb3JyZWN0IGVuY29kaW5nIGludG8gdGhlIGFyY2hpdmUgKi8KKwkJZW5jbmFtZSA9IHBn X2VuY29kaW5nX3RvX2NoYXIoZW5jb2RpbmcpOworCisJCWFwcGVuZFBRRXhwQnVmZmVyU3Ry KHFyeSwgIlNFVCBjbGllbnRfZW5jb2RpbmcgPSAiKTsKKwkJYXBwZW5kU3RyaW5nTGl0ZXJh bEFIKHFyeSwgZW5jbmFtZSwgZm91dCk7CisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHFyeSwg IjtcbiIpOworCQlBcmNoaXZlRW50cnkoZm91dCwKKwkJCQkJIG5pbENhdGFsb2dJZCwJLyog Y2F0YWxvZyBJRCAqLworCQkJCQkgY3JlYXRlRHVtcElkKCksCS8qIGR1bXAgSUQgKi8KKwkJ CQkJIEFSQ0hJVkVfT1BUUygudGFnID0gImNsaWVudF9lbmNvZGluZyIsCisJCQkJCQkJCSAg LmRlc2NyaXB0aW9uID0gImNsaWVudF9lbmNvZGluZyIsCisJCQkJCQkJCSAgLnNlY3Rpb24g PSBTRUNUSU9OX1BSRV9EQVRBLAorCQkJCQkJCQkgIC5jcmVhdGVTdG10ID0gcXJ5LT5kYXRh KSk7CisJCXJlc2V0UFFFeHBCdWZmZXIocXJ5KTsKKworCQkvKiBQdXQgdGhlIGNvcnJlY3Qg ZXNjYXBlIHN0cmluZyBiZWhhdmlvciBpbnRvIHRoZSBhcmNoaXZlLiAqLworCQlhcHBlbmRQ UUV4cEJ1ZmZlcihxcnksICJTRVQgc3RhbmRhcmRfY29uZm9ybWluZ19zdHJpbmdzID0gJ29u JztcbiIpOworCQlBcmNoaXZlRW50cnkoZm91dCwKKwkJCQkJIG5pbENhdGFsb2dJZCwJLyog Y2F0YWxvZyBJRCAqLworCQkJCQkgY3JlYXRlRHVtcElkKCksCS8qIGR1bXAgSUQgKi8KKwkJ CQkJIEFSQ0hJVkVfT1BUUygudGFnID0gInN0YW5kYXJkX2NvbmZvcm1pbmdfc3RyaW5ncyIs CisJCQkJCQkJCSAgLmRlc2NyaXB0aW9uID0gInN0YW5kYXJkX2NvbmZvcm1pbmdfc3RyaW5n cyIsCisJCQkJCQkJCSAgLnNlY3Rpb24gPSBTRUNUSU9OX1BSRV9EQVRBLAorCQkJCQkJCQkg IC5jcmVhdGVTdG10ID0gcXJ5LT5kYXRhKSk7CisJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihxcnkp OworCX0KKwllbHNlCisJeworCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRh dGFiYXNlIGNsdXN0ZXIgZHVtcFxuLS1cblxuIik7CisKKwkJaWYgKHZlcmJvc2UpCisJCQlk dW1wVGltZXN0YW1wKCJTdGFydGVkIG9uIik7CisKKwkJLyoKKwkJICogRW50ZXIgcmVzdHJp Y3RlZCBtb2RlIHRvIGJsb2NrIGFueSB1bmV4cGVjdGVkIHBzcWwgbWV0YS1jb21tYW5kcy4g IEEKKwkJICogbWFsaWNpb3VzIHNvdXJjZSBtaWdodCB0cnkgdG8gaW5qZWN0IGEgdmFyaWV0 eSBvZiB0aGluZ3MgdmlhIGJvZ3VzCisJCSAqIHJlc3BvbnNlcyB0byBxdWVyaWVzLiAgV2hp bGUgd2UgY2Fubm90IHByZXZlbnQgc3VjaCBzb3VyY2VzIGZyb20KKwkJICogYWZmZWN0aW5n IHRoZSBkZXN0aW5hdGlvbiBhdCByZXN0b3JlIHRpbWUsIHdlIGNhbiBibG9jayBwc3FsCisJ CSAqIG1ldGEtY29tbWFuZHMgc28gdGhhdCB0aGUgY2xpZW50IG1hY2hpbmUgdGhhdCBydW5z IHBzcWwgd2l0aCB0aGUgZHVtcAorCQkgKiBvdXRwdXQgcmVtYWlucyB1bmFmZmVjdGVkLgor CQkgKi8KKwkJZnByaW50ZihPUEYsICJcXHJlc3RyaWN0ICVzXG5cbiIsIHJlc3RyaWN0X2tl eSk7CisKKwkJLyoKKwkJICogV2UgdXNlZCB0byBlbWl0IFxjb25uZWN0IHBvc3RncmVzIGhl cmUsIGJ1dCB0aGF0IHNlcnZlZCBubyBwdXJwb3NlCisJCSAqIG90aGVyIHRoYW4gdG8gYnJl YWsgdGhpbmdzIGZvciBpbnN0YWxsYXRpb25zIHdpdGhvdXQgYSBwb3N0Z3JlcworCQkgKiBk YXRhYmFzZS4gIEV2ZXJ5dGhpbmcgd2UncmUgcmVzdG9yaW5nIGhlcmUgaXMgYSBnbG9iYWws IHNvIHdoaWNoZXZlcgorCQkgKiBkYXRhYmFzZSB3ZSdyZSBjb25uZWN0ZWQgdG8gYXQgdGhl IG1vbWVudCBpcyBmaW5lLgorCQkgKi8KKworCQkvKiBSZXN0b3JlIHdpbGwgbmVlZCB0byB3 cml0ZSB0byB0aGUgdGFyZ2V0IGNsdXN0ZXIgKi8KKwkJZnByaW50ZihPUEYsICJTRVQgZGVm YXVsdF90cmFuc2FjdGlvbl9yZWFkX29ubHkgPSBvZmY7XG5cbiIpOworCisJCS8qIFJlcGxp Y2F0ZSBlbmNvZGluZyBhbmQgc3RhbmRhcmRfY29uZm9ybWluZ19zdHJpbmdzIGluIG91dHB1 dCAqLworCQlmcHJpbnRmKE9QRiwgIlNFVCBjbGllbnRfZW5jb2RpbmcgPSAnJXMnO1xuIiwK IAkJCXBnX2VuY29kaW5nX3RvX2NoYXIoZW5jb2RpbmcpKTsKLQlmcHJpbnRmKE9QRiwgIlNF VCBzdGFuZGFyZF9jb25mb3JtaW5nX3N0cmluZ3MgPSBvbjtcbiIpOwotCWZwcmludGYoT1BG LCAiXG4iKTsKKwkJZnByaW50ZihPUEYsICJTRVQgc3RhbmRhcmRfY29uZm9ybWluZ19zdHJp bmdzID0gb247XG4iKTsKKwkJZnByaW50ZihPUEYsICJcbiIpOworCX0KIAogCWlmICghZGF0 YV9vbmx5ICYmICFzdGF0aXN0aWNzX29ubHkgJiYgIW5vX3NjaGVtYSkKIAl7CkBAIC02MzAs OCArNzYyLDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJICogZGVwZW5k ZW5jeSBhbmFseXNpcyBiZWNhdXNlIGRhdGFiYXNlcyBuZXZlciBkZXBlbmQgb24gZWFjaCBv dGhlciwKIAkJICogYW5kIHRhYmxlc3BhY2VzIG5ldmVyIGRlcGVuZCBvbiBlYWNoIG90aGVy LiAgUm9sZXMgY291bGQgaGF2ZQogCQkgKiBncmFudHMgdG8gZWFjaCBvdGhlciwgYnV0IERS T1AgUk9MRSB3aWxsIGNsZWFuIHRob3NlIHVwIHNpbGVudGx5LgorCQkgKgorCQkgKiBGb3Ig bm9uLXRleHQgZm9ybWF0cywgcGdfZHVtcGFsbCB1bmNvbmRpdGlvbmFsbHkgcHJvY2VzcyAt LWNsZWFuCisJCSAqIG9wdGlvbi4gSW4gY29udHJhc3QsIHBnX3Jlc3RvcmUgb25seSBhcHBs aWVzIGl0IGlmIHRoZSB1c2VyCisJCSAqIGV4cGxpY2l0bHkgcHJvdmlkZXMgdGhlIGZsYWcu ICBUaGlzIGRpc2NyZXBhbmN5IHJlc29sdmVzIGNvcm5lciBjYXNlcworCQkgKiB3aGVyZSBw Z19yZXN0b3JlIHJlcXVpcmVzIGNsZWFudXAgaW5zdHJ1Y3Rpb25zIHRoYXQgbWF5IGJlIG1p c3NpbmcKKwkJICogZnJvbSBhIHN0YW5kYXJkIHBnX2R1bXBhbGwgb3V0cHV0LgogCQkgKi8K LQkJaWYgKG91dHB1dF9jbGVhbikKKwkJaWYgKG91dHB1dF9jbGVhbiB8fCBhcmNoRHVtcEZv cm1hdCAhPSBhcmNoTnVsbCkKIAkJewogCQkJaWYgKCFnbG9iYWxzX29ubHkgJiYgIXJvbGVz X29ubHkgJiYgIXRhYmxlc3BhY2VzX29ubHkpCiAJCQkJZHJvcERCcyhjb25uKTsKQEAgLTY2 NSwyOCArODAzLDQ1IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCWR1bXBU YWJsZXNwYWNlcyhjb25uKTsKIAl9CiAKLQkvKgotCSAqIEV4aXQgcmVzdHJpY3RlZCBtb2Rl IGp1c3QgYmVmb3JlIGR1bXBpbmcgdGhlIGRhdGFiYXNlcy4gIHBnX2R1bXAgd2lsbAotCSAq IGhhbmRsZSBlbnRlcmluZyByZXN0cmljdGVkIG1vZGUgYWdhaW4gYXMgYXBwcm9wcmlhdGUu Ci0JICovCi0JZnByaW50ZihPUEYsICJcXHVucmVzdHJpY3QgJXNcblxuIiwgcmVzdHJpY3Rf a2V5KTsKKwlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJeworCQkvKgorCQkg KiBFeGl0IHJlc3RyaWN0ZWQgbW9kZSBqdXN0IGJlZm9yZSBkdW1waW5nIHRoZSBkYXRhYmFz ZXMuICBwZ19kdW1wCisJCSAqIHdpbGwgaGFuZGxlIGVudGVyaW5nIHJlc3RyaWN0ZWQgbW9k ZSBhZ2FpbiBhcyBhcHByb3ByaWF0ZS4KKwkJICovCisJCWZwcmludGYoT1BGLCAiXFx1bnJl c3RyaWN0ICVzXG5cbiIsIHJlc3RyaWN0X2tleSk7CisJfQogCiAJaWYgKCFnbG9iYWxzX29u bHkgJiYgIXJvbGVzX29ubHkgJiYgIXRhYmxlc3BhY2VzX29ubHkpCiAJCWR1bXBEYXRhYmFz ZXMoY29ubik7CiAKLQlQUWZpbmlzaChjb25uKTsKKwlpZiAoYXJjaER1bXBGb3JtYXQgPT0g YXJjaE51bGwpCisJeworCQlQUWZpbmlzaChjb25uKTsKKworCQlpZiAodmVyYm9zZSkKKwkJ CWR1bXBUaW1lc3RhbXAoIkNvbXBsZXRlZCBvbiIpOworCQlmcHJpbnRmKE9QRiwgIi0tXG4t LSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgZHVtcCBjb21wbGV0ZVxuLS1cblxuIik7 CiAKLQlpZiAodmVyYm9zZSkKLQkJZHVtcFRpbWVzdGFtcCgiQ29tcGxldGVkIG9uIik7Ci0J ZnByaW50ZihPUEYsICItLVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGR1bXAg Y29tcGxldGVcbi0tXG5cbiIpOworCQlpZiAoZmlsZW5hbWUpCisJCXsKKwkJCWZjbG9zZShP UEYpOwogCi0JaWYgKGZpbGVuYW1lKQorCQkJLyogc3luYyB0aGUgcmVzdWx0aW5nIGZpbGUs IGVycm9ycyBhcmUgbm90IGZhdGFsICovCisJCQlpZiAoZG9zeW5jICYmIChhcmNoRHVtcEZv cm1hdCA9PSBhcmNoTnVsbCkpCisJCQkJKHZvaWQpIGZzeW5jX2ZuYW1lKGZpbGVuYW1lLCBm YWxzZSk7CisJCX0KKwl9CisJZWxzZQogCXsKLQkJZmNsb3NlKE9QRik7CisJCVJlc3RvcmVP cHRpb25zICpyb3B0OworCisJCXJvcHQgPSBOZXdSZXN0b3JlT3B0aW9ucygpOworCQlTZXRB cmNoaXZlT3B0aW9ucyhmb3V0LCAmZG9wdCwgcm9wdCk7CiAKLQkJLyogc3luYyB0aGUgcmVz dWx0aW5nIGZpbGUsIGVycm9ycyBhcmUgbm90IGZhdGFsICovCi0JCWlmIChkb3N5bmMpCi0J CQkodm9pZCkgZnN5bmNfZm5hbWUoZmlsZW5hbWUsIGZhbHNlKTsKKwkJLyogTWFyayB3aGlj aCBlbnRyaWVzIHNob3VsZCBiZSBvdXRwdXQgKi8KKwkJUHJvY2Vzc0FyY2hpdmVSZXN0b3Jl T3B0aW9ucyhmb3V0KTsKKwkJQ2xvc2VBcmNoaXZlKGZvdXQpOwogCX0KIAogCWV4aXRfbmlj ZWx5KDApOwpAQCAtNjk2LDEyICs4NTEsMTQgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdKQogc3RhdGljIHZvaWQKIGhlbHAodm9pZCkKIHsKLQlwcmludGYoXygiJXMgZXhwb3J0 cyBhIFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBhcyBhbiBTUUwgc2NyaXB0LlxuXG4i KSwgcHJvZ25hbWUpOworCXByaW50ZihfKCIlcyBleHBvcnRzIGEgUG9zdGdyZVNRTCBkYXRh YmFzZSBjbHVzdGVyIGFzIGFuIFNRTCBzY3JpcHQgb3IgdG8gb3RoZXIgZm9ybWF0cy5cblxu IiksIHByb2duYW1lKTsKIAlwcmludGYoXygiVXNhZ2U6XG4iKSk7CiAJcHJpbnRmKF8oIiAg JXMgW09QVElPTl0uLi5cbiIpLCBwcm9nbmFtZSk7CiAKIAlwcmludGYoXygiXG5HZW5lcmFs IG9wdGlvbnM6XG4iKSk7CiAJcHJpbnRmKF8oIiAgLWYsIC0tZmlsZT1GSUxFTkFNRSAgICAg ICAgICBvdXRwdXQgZmlsZSBuYW1lXG4iKSk7CisJcHJpbnRmKF8oIiAgLUYsIC0tZm9ybWF0 PWN8ZHx0fHAgICAgICAgICBvdXRwdXQgZmlsZSBmb3JtYXQgKGN1c3RvbSwgZGlyZWN0b3J5 LCB0YXIsXG4iCisJCQkgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFpbiB0 ZXh0IChkZWZhdWx0KSlcbiIpKTsKIAlwcmludGYoXygiICAtdiwgLS12ZXJib3NlICAgICAg ICAgICAgICAgIHZlcmJvc2UgbW9kZVxuIikpOwogCXByaW50ZihfKCIgIC1WLCAtLXZlcnNp b24gICAgICAgICAgICAgICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24sIHRoZW4gZXhp dFxuIikpOwogCXByaW50ZihfKCIgIC0tbG9jay13YWl0LXRpbWVvdXQ9VElNRU9VVCAgZmFp bCBhZnRlciB3YWl0aW5nIFRJTUVPVVQgZm9yIGEgdGFibGUgbG9ja1xuIikpOwpAQCAtNzk2 LDI0ICs5NTMsNDUgQEAgZHJvcFJvbGVzKFBHY29ubiAqY29ubikKIAogCWlfcm9sbmFtZSA9 IFBRZm51bWJlcihyZXMsICJyb2xuYW1lIik7CiAKLQlpZiAoUFFudHVwbGVzKHJlcykgPiAw KQorCWlmIChQUW50dXBsZXMocmVzKSA+IDAgJiYgYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51 bGwpCiAJCWZwcmludGYoT1BGLCAiLS1cbi0tIERyb3Agcm9sZXNcbi0tXG5cbiIpOwogCiAJ Zm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJewogCQljb25zdCBjaGFy ICpyb2xlbmFtZTsKKwkJUFFFeHBCdWZmZXIgZGVsUXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIo KTsKIAogCQlyb2xlbmFtZSA9IFBRZ2V0dmFsdWUocmVzLCBpLCBpX3JvbG5hbWUpOwogCi0J CWZwcmludGYoT1BGLCAiRFJPUCBST0xFICVzJXM7XG4iLAotCQkJCWlmX2V4aXN0cyA/ICJJ RiBFWElTVFMgIiA6ICIiLAotCQkJCWZtdElkKHJvbGVuYW1lKSk7CisJCWlmIChhcmNoRHVt cEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJeworCQkJYXBwZW5kUFFFeHBCdWZmZXIoZGVsUXJ5 LCAiRFJPUCBST0xFICVzJXM7XG4iLAorCQkJCQlpZl9leGlzdHMgPyAiSUYgRVhJU1RTICIg OiAiIiwKKwkJCQkJZm10SWQocm9sZW5hbWUpKTsKKwkJCWZwcmludGYoT1BGLCAiJXMiLCBk ZWxRcnktPmRhdGEpOworCQl9CisJCWVsc2UKKwkJeworCQkJYXBwZW5kUFFFeHBCdWZmZXIo ZGVsUXJ5LCAiRFJPUCBST0xFIElGIEVYSVNUUyAlcztcbiIsCisJCQkJCWZtdElkKHJvbGVu YW1lKSk7CisKKwkJCUFyY2hpdmVFbnRyeShmb3V0LAorCQkJCQluaWxDYXRhbG9nSWQsICAv KiBjYXRhbG9nIElEICovCisJCQkJCWNyZWF0ZUR1bXBJZCgpLCAgICAgICAgLyogZHVtcCBJ RCAqLworCQkJCQlBUkNISVZFX09QVFMoLnRhZyA9ICJEUk9QX0dMT0JBTCIsCisJCQkJCQku ZGVzY3JpcHRpb24gPSAiRFJPUF9HTE9CQUwiLAorCQkJCQkJLnNlY3Rpb24gPSBTRUNUSU9O X1BSRV9EQVRBLAorCQkJCQkJLmNyZWF0ZVN0bXQgPSBkZWxRcnktPmRhdGEpKTsKKwkJfQor CisJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihkZWxRcnkpOwogCX0KIAogCVBRY2xlYXIocmVzKTsK IAlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsKIAotCWZwcmludGYoT1BGLCAiXG5cbiIpOwor CWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJZnByaW50ZihPUEYsICJcblxu Iik7CiB9CiAKIC8qCkBAIC04MjMsNiArMTAwMSw4IEBAIHN0YXRpYyB2b2lkCiBkdW1wUm9s ZXMoUEdjb25uICpjb25uKQogewogCVBRRXhwQnVmZmVyIGJ1ZiA9IGNyZWF0ZVBRRXhwQnVm ZmVyKCk7CisJUFFFeHBCdWZmZXIgY29tbWVudF9idWYgPSBjcmVhdGVQUUV4cEJ1ZmZlcigp OworCVBRRXhwQnVmZmVyIHNlY2xhYmVsX2J1ZiA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CiAJ UEdyZXN1bHQgICAqcmVzOwogCWludAkJCWlfb2lkLAogCQkJCWlfcm9sbmFtZSwKQEAgLTg5 NCw3ICsxMDc0LDcgQEAgZHVtcFJvbGVzKFBHY29ubiAqY29ubikKIAlpX3JvbGNvbW1lbnQg PSBQUWZudW1iZXIocmVzLCAicm9sY29tbWVudCIpOwogCWlfaXNfY3VycmVudF91c2VyID0g UFFmbnVtYmVyKHJlcywgImlzX2N1cnJlbnRfdXNlciIpOwogCi0JaWYgKFBRbnR1cGxlcyhy ZXMpID4gMCkKKwlpZiAoUFFudHVwbGVzKHJlcykgPiAwICYmIGFyY2hEdW1wRm9ybWF0ID09 IGFyY2hOdWxsKQogCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBSb2xlc1xuLS1cblxuIik7CiAK IAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykKQEAgLTkxMyw2ICsxMDkz LDggQEAgZHVtcFJvbGVzKFBHY29ubiAqY29ubikKIAkJfQogCiAJCXJlc2V0UFFFeHBCdWZm ZXIoYnVmKTsKKwkJcmVzZXRQUUV4cEJ1ZmZlcihjb21tZW50X2J1Zik7CisJCXJlc2V0UFFF eHBCdWZmZXIoc2VjbGFiZWxfYnVmKTsKIAogCQlpZiAoYmluYXJ5X3VwZ3JhZGUpCiAJCXsK QEAgLTk4OSwxNyArMTE3MSw1MyBAQCBkdW1wUm9sZXMoUEdjb25uICpjb25uKQogCiAJCWlm ICghbm9fY29tbWVudHMgJiYgIVBRZ2V0aXNudWxsKHJlcywgaSwgaV9yb2xjb21tZW50KSkK IAkJewotCQkJYXBwZW5kUFFFeHBCdWZmZXIoYnVmLCAiQ09NTUVOVCBPTiBST0xFICVzIElT ICIsIGZtdElkKHJvbGVuYW1lKSk7Ci0JCQlhcHBlbmRTdHJpbmdMaXRlcmFsQ29ubihidWYs IFBRZ2V0dmFsdWUocmVzLCBpLCBpX3JvbGNvbW1lbnQpLCBjb25uKTsKLQkJCWFwcGVuZFBR RXhwQnVmZmVyU3RyKGJ1ZiwgIjtcbiIpOworCQkJYXBwZW5kUFFFeHBCdWZmZXIoY29tbWVu dF9idWYsICJDT01NRU5UIE9OIFJPTEUgJXMgSVMgIiwgZm10SWQocm9sZW5hbWUpKTsKKwkJ CWFwcGVuZFN0cmluZ0xpdGVyYWxDb25uKGNvbW1lbnRfYnVmLCBQUWdldHZhbHVlKHJlcywg aSwgaV9yb2xjb21tZW50KSwgY29ubik7CisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihjb21t ZW50X2J1ZiwgIjtcbiIpOwogCQl9CiAKIAkJaWYgKCFub19zZWN1cml0eV9sYWJlbHMpCiAJ CQlidWlsZFNoU2VjTGFiZWxzKGNvbm4sICJwZ19hdXRoaWQiLCBhdXRoX29pZCwKIAkJCQkJ CQkgIlJPTEUiLCByb2xlbmFtZSwKLQkJCQkJCQkgYnVmKTsKKwkJCQkJCQkgc2VjbGFiZWxf YnVmKTsKIAotCQlmcHJpbnRmKE9QRiwgIiVzIiwgYnVmLT5kYXRhKTsKKwkJaWYgKGFyY2hE dW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQl7CisJCQlmcHJpbnRmKE9QRiwgIiVzIiwgYnVm LT5kYXRhKTsKKwkJCWZwcmludGYoT1BGLCAiJXMiLCBjb21tZW50X2J1Zi0+ZGF0YSk7CisK KwkJCWlmIChzZWNsYWJlbF9idWYtPmRhdGFbMF0gIT0gJ1wwJykKKwkJCQlmcHJpbnRmKE9Q RiwgIiVzIiwgc2VjbGFiZWxfYnVmLT5kYXRhKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWNo YXIJICAgKnRhZyA9IHBzcHJpbnRmKCIlcyAlcyIsICJST0xFIiwgZm10SWQocm9sZW5hbWUp KTsKKworCQkJQXJjaGl2ZUVudHJ5KGZvdXQsCisJCQkJCQkgbmlsQ2F0YWxvZ0lkLAkvKiBj YXRhbG9nIElEICovCisJCQkJCQkgY3JlYXRlRHVtcElkKCksCS8qIGR1bXAgSUQgKi8KKwkJ CQkJCSBBUkNISVZFX09QVFMoLnRhZyA9IHRhZywKKwkJCQkJCQkJCSAgLmRlc2NyaXB0aW9u ID0gIlJPTEUiLAorCQkJCQkJCQkJICAuc2VjdGlvbiA9IFNFQ1RJT05fUFJFX0RBVEEsCisJ CQkJCQkJCQkgIC5jcmVhdGVTdG10ID0gYnVmLT5kYXRhKSk7CisJCQlpZiAoY29tbWVudF9i dWYtPmRhdGFbMF0gIT0gJ1wwJykKKwkJCQlBcmNoaXZlRW50cnkoZm91dCwKKwkJCQkJCQkg bmlsQ2F0YWxvZ0lkLAkvKiBjYXRhbG9nIElEICovCisJCQkJCQkJIGNyZWF0ZUR1bXBJZCgp LAkvKiBkdW1wIElEICovCisJCQkJCQkJIEFSQ0hJVkVfT1BUUygudGFnID0gdGFnLAorCQkJ CQkJCQkJCSAgLmRlc2NyaXB0aW9uID0gIkNPTU1FTlQiLAorCQkJCQkJCQkJCSAgLnNlY3Rp b24gPSBTRUNUSU9OX1BSRV9EQVRBLAorCQkJCQkJCQkJCSAgLmNyZWF0ZVN0bXQgPSBjb21t ZW50X2J1Zi0+ZGF0YSkpOworCisJCQlpZiAoc2VjbGFiZWxfYnVmLT5kYXRhWzBdICE9ICdc MCcpCisJCQkJQXJjaGl2ZUVudHJ5KGZvdXQsCisJCQkJCQkJIG5pbENhdGFsb2dJZCwJLyog Y2F0YWxvZyBJRCAqLworCQkJCQkJCSBjcmVhdGVEdW1wSWQoKSwJLyogZHVtcCBJRCAqLwor CQkJCQkJCSBBUkNISVZFX09QVFMoLnRhZyA9IHRhZywKKwkJCQkJCQkJCQkgIC5kZXNjcmlw dGlvbiA9ICJTRUNVUklUWSBMQUJFTCIsCisJCQkJCQkJCQkJICAuc2VjdGlvbiA9IFNFQ1RJ T05fUFJFX0RBVEEsCisJCQkJCQkJCQkJICAuY3JlYXRlU3RtdCA9IHNlY2xhYmVsX2J1Zi0+ ZGF0YSkpOworCQl9CiAJfQogCiAJLyoKQEAgLTEwMDcsNyArMTIyNSw3IEBAIGR1bXBSb2xl cyhQR2Nvbm4gKmNvbm4pCiAJICogV2UgZG8gaXQgdGhpcyB3YXkgYmVjYXVzZSBjb25maWcg c2V0dGluZ3MgZm9yIHJvbGVzIGNvdWxkIG1lbnRpb24gdGhlCiAJICogbmFtZXMgb2Ygb3Ro ZXIgcm9sZXMuCiAJICovCi0JaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKKwlpZiAoUFFudHVw bGVzKHJlcykgPiAwICYmIGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQogCQlmcHJpbnRm KE9QRiwgIlxuLS1cbi0tIFVzZXIgQ29uZmlndXJhdGlvbnNcbi0tXG4iKTsKIAogCWZvciAo aSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQpAQCAtMTAxNSw5ICsxMjMzLDEyIEBA IGR1bXBSb2xlcyhQR2Nvbm4gKmNvbm4pCiAKIAlQUWNsZWFyKHJlcyk7CiAKLQlmcHJpbnRm KE9QRiwgIlxuXG4iKTsKKwlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCWZw cmludGYoT1BGLCAiXG5cbiIpOwogCiAJZGVzdHJveVBRRXhwQnVmZmVyKGJ1Zik7CisJZGVz dHJveVBRRXhwQnVmZmVyKGNvbW1lbnRfYnVmKTsKKwlkZXN0cm95UFFFeHBCdWZmZXIoc2Vj bGFiZWxfYnVmKTsKIH0KIAogCkBAIC0xMDMxLDYgKzEyNTIsNyBAQCBzdGF0aWMgdm9pZAog ZHVtcFJvbGVNZW1iZXJzaGlwKFBHY29ubiAqY29ubikKIHsKIAlQUUV4cEJ1ZmZlciBidWYg PSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCVBRRXhwQnVmZmVyIHF1ZXJ5YnVmID0gY3JlYXRl UFFFeHBCdWZmZXIoKTsKIAlQUUV4cEJ1ZmZlciBvcHRidWYgPSBjcmVhdGVQUUV4cEJ1ZmZl cigpOwogCVBHcmVzdWx0ICAgKnJlczsKIAlpbnQJCQlzdGFydCA9IDAsCkBAIC0xMDkzLDcg KzEzMTUsNyBAQCBkdW1wUm9sZU1lbWJlcnNoaXAoUEdjb25uICpjb25uKQogCWlfaW5oZXJp dF9vcHRpb24gPSBQUWZudW1iZXIocmVzLCAiaW5oZXJpdF9vcHRpb24iKTsKIAlpX3NldF9v cHRpb24gPSBQUWZudW1iZXIocmVzLCAic2V0X29wdGlvbiIpOwogCi0JaWYgKFBRbnR1cGxl cyhyZXMpID4gMCkKKwlpZiAoUFFudHVwbGVzKHJlcykgPiAwICYmIGFyY2hEdW1wRm9ybWF0 ID09IGFyY2hOdWxsKQogCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBSb2xlIG1lbWJlcnNoaXBz XG4tLVxuXG4iKTsKIAogCS8qCkBAIC0xMjI5LDggKzE0NTEsOSBAQCBkdW1wUm9sZU1lbWJl cnNoaXAoUEdjb25uICpjb25uKQogCiAJCQkJLyogR2VuZXJhdGUgdGhlIGFjdHVhbCBHUkFO VCBzdGF0ZW1lbnQuICovCiAJCQkJcmVzZXRQUUV4cEJ1ZmZlcihvcHRidWYpOwotCQkJCWZw cmludGYoT1BGLCAiR1JBTlQgJXMiLCBmbXRJZChyb2xlKSk7Ci0JCQkJZnByaW50ZihPUEYs ICIgVE8gJXMiLCBmbXRJZChtZW1iZXIpKTsKKwkJCQlyZXNldFBRRXhwQnVmZmVyKHF1ZXJ5 YnVmKTsKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihxdWVyeWJ1ZiwgIkdSQU5UICVzIiwgZm10 SWQocm9sZSkpOworCQkJCWFwcGVuZFBRRXhwQnVmZmVyKHF1ZXJ5YnVmLCAiIFRPICVzIiwg Zm10SWQobWVtYmVyKSk7CiAJCQkJaWYgKCphZG1pbl9vcHRpb24gPT0gJ3QnKQogCQkJCQlh cHBlbmRQUUV4cEJ1ZmZlclN0cihvcHRidWYsICJBRE1JTiBPUFRJT04iKTsKIAkJCQlpZiAo ZHVtcF9ncmFudF9vcHRpb25zKQpAQCAtMTI1MSwxMCArMTQ3NCwyMSBAQCBkdW1wUm9sZU1l bWJlcnNoaXAoUEdjb25uICpjb25uKQogCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihvcHRi dWYsICJTRVQgRkFMU0UiKTsKIAkJCQl9CiAJCQkJaWYgKG9wdGJ1Zi0+ZGF0YVswXSAhPSAn XDAnKQotCQkJCQlmcHJpbnRmKE9QRiwgIiBXSVRIICVzIiwgb3B0YnVmLT5kYXRhKTsKKwkJ CQkJYXBwZW5kUFFFeHBCdWZmZXIocXVlcnlidWYsICIgV0lUSCAlcyIsIG9wdGJ1Zi0+ZGF0 YSk7CiAJCQkJaWYgKGR1bXBfZ3JhbnRvcnMpCi0JCQkJCWZwcmludGYoT1BGLCAiIEdSQU5U RUQgQlkgJXMiLCBmbXRJZChncmFudG9yKSk7Ci0JCQkJZnByaW50ZihPUEYsICI7XG4iKTsK KwkJCQkJYXBwZW5kUFFFeHBCdWZmZXIocXVlcnlidWYsICIgR1JBTlRFRCBCWSAlcyIsIGZt dElkKGdyYW50b3IpKTsKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihxdWVyeWJ1ZiwgIjtcbiIp OworCisJCQkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJCQlmcHJpbnRm KE9QRiwgIiVzIiwgcXVlcnlidWYtPmRhdGEpOworCQkJCWVsc2UKKwkJCQkJQXJjaGl2ZUVu dHJ5KGZvdXQsCisJCQkJCQkJCSBuaWxDYXRhbG9nSWQsCS8qIGNhdGFsb2cgSUQgKi8KKwkJ CQkJCQkJIGNyZWF0ZUR1bXBJZCgpLAkvKiBkdW1wIElEICovCisJCQkJCQkJCSBBUkNISVZF X09QVFMoLnRhZyA9IGZtdElkKHJvbGUpLAorCQkJCQkJCQkJCQkgIC5kZXNjcmlwdGlvbiA9 ICJST0xFIFBST1BFUlRJRVMiLAorCQkJCQkJCQkJCQkgIC5zZWN0aW9uID0gU0VDVElPTl9Q UkVfREFUQSwKKwkJCQkJCQkJCQkJICAuY3JlYXRlU3RtdCA9IHF1ZXJ5YnVmLT5kYXRhKSk7 CiAJCQl9CiAJCX0KIApAQCAtMTI2NSw4ICsxNDk5LDExIEBAIGR1bXBSb2xlTWVtYmVyc2hp cChQR2Nvbm4gKmNvbm4pCiAKIAlQUWNsZWFyKHJlcyk7CiAJZGVzdHJveVBRRXhwQnVmZmVy KGJ1Zik7CisJZGVzdHJveVBRRXhwQnVmZmVyKHF1ZXJ5YnVmKTsKKwlkZXN0cm95UFFFeHBC dWZmZXIob3B0YnVmKTsKIAotCWZwcmludGYoT1BGLCAiXG5cbiIpOworCWlmIChhcmNoRHVt cEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJZnByaW50ZihPUEYsICJcblxuIik7CiB9CiAKIApA QCAtMTI5Myw3ICsxNTMwLDcgQEAgZHVtcFJvbGVHVUNQcml2cyhQR2Nvbm4gKmNvbm4pCiAJ CQkJCSAgICJGUk9NIHBnX2NhdGFsb2cucGdfcGFyYW1ldGVyX2FjbCAiCiAJCQkJCSAgICJP UkRFUiBCWSAxIik7CiAKLQlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQorCWlmIChQUW50dXBs ZXMocmVzKSA+IDAgJiYgYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCiAJCWZwcmludGYo T1BGLCAiLS1cbi0tIFJvbGUgcHJpdmlsZWdlcyBvbiBjb25maWd1cmF0aW9uIHBhcmFtZXRl cnNcbi0tXG5cbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKysp CkBAIC0xMzE4LDE0ICsxNTU1LDI1IEBAIGR1bXBSb2xlR1VDUHJpdnMoUEdjb25uICpjb25u KQogCQkJZXhpdF9uaWNlbHkoMSk7CiAJCX0KIAotCQlmcHJpbnRmKE9QRiwgIiVzIiwgYnVm LT5kYXRhKTsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50 ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisJCWVsc2UKKwkJCUFyY2hpdmVFbnRyeShmb3V0 LAorCQkJCQkJIG5pbENhdGFsb2dJZCwJLyogY2F0YWxvZyBJRCAqLworCQkJCQkJIGNyZWF0 ZUR1bXBJZCgpLAkvKiBkdW1wIElEICovCisJCQkJCQkgQVJDSElWRV9PUFRTKC50YWcgPSBm bXRJZChwYXJvd25lciksCisJCQkJCQkJCQkgIC5kZXNjcmlwdGlvbiA9ICJST0xFIFBST1BF UlRJRVMiLAorCQkJCQkJCQkJICAuc2VjdGlvbiA9IFNFQ1RJT05fUFJFX0RBVEEsCisJCQkJ CQkJCQkgIC5jcmVhdGVTdG10ID0gYnVmLT5kYXRhKSk7CiAKIAkJZnJlZShmcGFybmFtZSk7 CiAJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihidWYpOwogCX0KIAogCVBRY2xlYXIocmVzKTsKLQlm cHJpbnRmKE9QRiwgIlxuXG4iKTsKKworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVs bCkKKwkJZnByaW50ZihPUEYsICJcblxuIik7CiB9CiAKIApAQCAtMTM0NywyMSArMTU5NSw0 MSBAQCBkcm9wVGFibGVzcGFjZXMoUEdjb25uICpjb25uKQogCQkJCQkgICAiV0hFUkUgc3Bj bmFtZSAhfiAnXnBnXycgIgogCQkJCQkgICAiT1JERVIgQlkgMSIpOwogCi0JaWYgKFBRbnR1 cGxlcyhyZXMpID4gMCkKKwlpZiAoUFFudHVwbGVzKHJlcykgPiAwICYmIGFyY2hEdW1wRm9y bWF0ID09IGFyY2hOdWxsKQogCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEcm9wIHRhYmxlc3Bh Y2VzXG4tLVxuXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsr KQogCXsKIAkJY2hhcgkgICAqc3BjbmFtZSA9IFBRZ2V0dmFsdWUocmVzLCBpLCAwKTsKKwkJ UFFFeHBCdWZmZXIJZGVsUXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAotCQlmcHJpbnRm KE9QRiwgIkRST1AgVEFCTEVTUEFDRSAlcyVzO1xuIiwKLQkJCQlpZl9leGlzdHMgPyAiSUYg RVhJU1RTICIgOiAiIiwKLQkJCQlmbXRJZChzcGNuYW1lKSk7CisJCWlmIChhcmNoRHVtcEZv cm1hdCA9PSBhcmNoTnVsbCkKKwkJeworCQkJYXBwZW5kUFFFeHBCdWZmZXIoZGVsUXJ5LCAi RFJPUCBUQUJMRVNQQUNFICVzJXM7XG4iLAorCQkJCQlpZl9leGlzdHMgPyAiSUYgRVhJU1RT ICIgOiAiIiwKKwkJCQkJZm10SWQoc3BjbmFtZSkpOworCQkJZnByaW50ZihPUEYsICIlcyIs IGRlbFFyeS0+ZGF0YSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlhcHBlbmRQUUV4cEJ1ZmZl cihkZWxRcnksICJEUk9QIFRBQkxFU1BBQ0UgSUYgRVhJU1RTICVzO1xuIiwKKwkJCQkJZm10 SWQoc3BjbmFtZSkpOworCQkJQXJjaGl2ZUVudHJ5KGZvdXQsCisJCQkJCW5pbENhdGFsb2dJ ZCwgIC8qIGNhdGFsb2cgSUQgKi8KKwkJCQkJY3JlYXRlRHVtcElkKCksICAgICAgICAvKiBk dW1wIElEICovCisJCQkJCUFSQ0hJVkVfT1BUUygudGFnID0gIkRST1BfR0xPQkFMIiwKKwkJ CQkJCS5kZXNjcmlwdGlvbiA9ICJEUk9QX0dMT0JBTCIsCisJCQkJCQkuc2VjdGlvbiA9IFNF Q1RJT05fUFJFX0RBVEEsCisJCQkJCQkuY3JlYXRlU3RtdCA9IGRlbFFyeS0+ZGF0YSkpOwor CQl9CisKKwkJZGVzdHJveVBRRXhwQnVmZmVyKGRlbFFyeSk7CiAJfQogCiAJUFFjbGVhcihy ZXMpOwogCi0JZnByaW50ZihPUEYsICJcblxuIik7CisJaWYgKGFyY2hEdW1wRm9ybWF0ID09 IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIH0KIAogLyoKQEAgLTEzNzEs NiArMTYzOSw4IEBAIHN0YXRpYyB2b2lkCiBkdW1wVGFibGVzcGFjZXMoUEdjb25uICpjb25u KQogewogCVBHcmVzdWx0ICAgKnJlczsKKwlQUUV4cEJ1ZmZlciBjb21tZW50X2J1ZiA9IGNy ZWF0ZVBRRXhwQnVmZmVyKCk7CisJUFFFeHBCdWZmZXIgc2VjbGFiZWxfYnVmID0gY3JlYXRl UFFFeHBCdWZmZXIoKTsKIAlpbnQJCQlpOwogCiAJLyoKQEAgLTEzODcsNyArMTY1Nyw3IEBA IGR1bXBUYWJsZXNwYWNlcyhQR2Nvbm4gKmNvbm4pCiAJCQkJCSAgICJXSEVSRSBzcGNuYW1l ICF+ICdecGdfJyAiCiAJCQkJCSAgICJPUkRFUiBCWSAxIik7CiAKLQlpZiAoUFFudHVwbGVz KHJlcykgPiAwKQorCWlmIChQUW50dXBsZXMocmVzKSA+IDAgJiYgYXJjaER1bXBGb3JtYXQg PT0gYXJjaE51bGwpCiAJCWZwcmludGYoT1BGLCAiLS1cbi0tIFRhYmxlc3BhY2VzXG4tLVxu XG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQpAQCAtMTQw Niw2ICsxNjc2LDkgQEAgZHVtcFRhYmxlc3BhY2VzKFBHY29ubiAqY29ubikKIAkJLyogbmVl ZGVkIGZvciBidWlsZEFDTENvbW1hbmRzKCkgKi8KIAkJZnNwY25hbWUgPSBwZ19zdHJkdXAo Zm10SWQoc3BjbmFtZSkpOwogCisJCXJlc2V0UFFFeHBCdWZmZXIoY29tbWVudF9idWYpOwor CQlyZXNldFBRRXhwQnVmZmVyKHNlY2xhYmVsX2J1Zik7CisKIAkJaWYgKGJpbmFyeV91cGdy YWRlKQogCQl7CiAJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihidWYsICJcbi0tIEZvciBiaW5h cnkgdXBncmFkZSwgbXVzdCBwcmVzZXJ2ZSBwZ190YWJsZXNwYWNlIG9pZFxuIik7CkBAIC0x NDQ3LDI0ICsxNzIwLDY3IEBAIGR1bXBUYWJsZXNwYWNlcyhQR2Nvbm4gKmNvbm4pCiAKIAkJ aWYgKCFub19jb21tZW50cyAmJiBzcGNjb21tZW50ICYmIHNwY2NvbW1lbnRbMF0gIT0gJ1ww JykKIAkJewotCQkJYXBwZW5kUFFFeHBCdWZmZXIoYnVmLCAiQ09NTUVOVCBPTiBUQUJMRVNQ QUNFICVzIElTICIsIGZzcGNuYW1lKTsKLQkJCWFwcGVuZFN0cmluZ0xpdGVyYWxDb25uKGJ1 Ziwgc3BjY29tbWVudCwgY29ubik7Ci0JCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihidWYsICI7 XG4iKTsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKGNvbW1lbnRfYnVmLCAiQ09NTUVOVCBPTiBU QUJMRVNQQUNFICVzIElTICIsIGZzcGNuYW1lKTsKKwkJCWFwcGVuZFN0cmluZ0xpdGVyYWxD b25uKGNvbW1lbnRfYnVmLCBzcGNjb21tZW50LCBjb25uKTsKKwkJCWFwcGVuZFBRRXhwQnVm ZmVyU3RyKGNvbW1lbnRfYnVmLCAiO1xuIik7CiAJCX0KIAogCQlpZiAoIW5vX3NlY3VyaXR5 X2xhYmVscykKIAkJCWJ1aWxkU2hTZWNMYWJlbHMoY29ubiwgInBnX3RhYmxlc3BhY2UiLCBz cGNvaWQsCiAJCQkJCQkJICJUQUJMRVNQQUNFIiwgc3BjbmFtZSwKLQkJCQkJCQkgYnVmKTsK KwkJCQkJCQkgc2VjbGFiZWxfYnVmKTsKIAotCQlmcHJpbnRmKE9QRiwgIiVzIiwgYnVmLT5k YXRhKTsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQl7CisJCQlmcHJp bnRmKE9QRiwgIiVzIiwgYnVmLT5kYXRhKTsKKworCQkJaWYgKGNvbW1lbnRfYnVmLT5kYXRh WzBdICE9ICdcMCcpCisJCQkJZnByaW50ZihPUEYsICIlcyIsIGNvbW1lbnRfYnVmLT5kYXRh KTsKKworCQkJaWYgKHNlY2xhYmVsX2J1Zi0+ZGF0YVswXSAhPSAnXDAnKQorCQkJCWZwcmlu dGYoT1BGLCAiJXMiLCBzZWNsYWJlbF9idWYtPmRhdGEpOworCQl9CisJCWVsc2UKKwkJewor CQkJY2hhcgkgICAqdGFnID0gcHNwcmludGYoIiVzICVzIiwgIlRBQkxFU1BBQ0UiLCBmbXRJ ZChmc3BjbmFtZSkpOworCisJCQlBcmNoaXZlRW50cnkoZm91dCwKKwkJCQkJCSBuaWxDYXRh bG9nSWQsCS8qIGNhdGFsb2cgSUQgKi8KKwkJCQkJCSBjcmVhdGVEdW1wSWQoKSwJLyogZHVt cCBJRCAqLworCQkJCQkJIEFSQ0hJVkVfT1BUUygudGFnID0gdGFnLAorCQkJCQkJCQkJICAu ZGVzY3JpcHRpb24gPSAiVEFCTEVTUEFDRSIsCisJCQkJCQkJCQkgIC5zZWN0aW9uID0gU0VD VElPTl9QUkVfREFUQSwKKwkJCQkJCQkJCSAgLmNyZWF0ZVN0bXQgPSBidWYtPmRhdGEpKTsK KworCQkJaWYgKGNvbW1lbnRfYnVmLT5kYXRhWzBdICE9ICdcMCcpCisJCQkJQXJjaGl2ZUVu dHJ5KGZvdXQsCisJCQkJCQkJIG5pbENhdGFsb2dJZCwJLyogY2F0YWxvZyBJRCAqLworCQkJ CQkJCSBjcmVhdGVEdW1wSWQoKSwJLyogZHVtcCBJRCAqLworCQkJCQkJCSBBUkNISVZFX09Q VFMoLnRhZyA9IHRhZywKKwkJCQkJCQkJCQkgIC5kZXNjcmlwdGlvbiA9ICJDT01NRU5UIiwK KwkJCQkJCQkJCQkgIC5zZWN0aW9uID0gU0VDVElPTl9QUkVfREFUQSwKKwkJCQkJCQkJCQkg IC5jcmVhdGVTdG10ID0gY29tbWVudF9idWYtPmRhdGEpKTsKKworCQkJaWYgKHNlY2xhYmVs X2J1Zi0+ZGF0YVswXSAhPSAnXDAnKQorCQkJCUFyY2hpdmVFbnRyeShmb3V0LAorCQkJCQkJ CSBuaWxDYXRhbG9nSWQsCS8qIGNhdGFsb2cgSUQgKi8KKwkJCQkJCQkgY3JlYXRlRHVtcElk KCksCS8qIGR1bXAgSUQgKi8KKwkJCQkJCQkgQVJDSElWRV9PUFRTKC50YWcgPSB0YWcsCisJ CQkJCQkJCQkJICAuZGVzY3JpcHRpb24gPSAiU0VDVVJJVFkgTEFCRUwiLAorCQkJCQkJCQkJ CSAgLnNlY3Rpb24gPSBTRUNUSU9OX1BSRV9EQVRBLAorCQkJCQkJCQkJCSAgLmNyZWF0ZVN0 bXQgPSBzZWNsYWJlbF9idWYtPmRhdGEpKTsKKwkJfQogCiAJCWZyZWUoZnNwY25hbWUpOwog CQlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsKIAl9CiAKIAlQUWNsZWFyKHJlcyk7Ci0JZnBy aW50ZihPUEYsICJcblxuIik7CisJZGVzdHJveVBRRXhwQnVmZmVyKGNvbW1lbnRfYnVmKTsK KwlkZXN0cm95UFFFeHBCdWZmZXIoc2VjbGFiZWxfYnVmKTsKKworCWlmIChhcmNoRHVtcEZv cm1hdCA9PSBhcmNoTnVsbCkKKwkJZnByaW50ZihPUEYsICJcblxuIik7CiB9CiAKIApAQCAt MTQ4NywxMiArMTgwMywxMyBAQCBkcm9wREJzKFBHY29ubiAqY29ubikKIAkJCQkJICAgIldI RVJFIGRhdGFsbG93Y29ubiBBTkQgZGF0Y29ubmxpbWl0ICE9IC0yICIKIAkJCQkJICAgIk9S REVSIEJZIGRhdG5hbWUiKTsKIAotCWlmIChQUW50dXBsZXMocmVzKSA+IDApCisJaWYgKFBR bnR1cGxlcyhyZXMpID4gMCAmJiBhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKIAkJZnBy aW50ZihPUEYsICItLVxuLS0gRHJvcCBkYXRhYmFzZXMgKGV4Y2VwdCBwb3N0Z3JlcyBhbmQg dGVtcGxhdGUxKVxuLS1cblxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJl cyk7IGkrKykKIAl7CiAJCWNoYXIJICAgKmRibmFtZSA9IFBRZ2V0dmFsdWUocmVzLCBpLCAw KTsKKwkJUFFFeHBCdWZmZXIgZGVsUXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAogCQkv KgogCQkgKiBTa2lwICJwb3N0Z3JlcyIgYW5kICJ0ZW1wbGF0ZTEiOyBkdW1wRGF0YWJhc2Vz KCkgd2lsbCBkZWFsIHdpdGgKQEAgLTE1MDMsMTUgKzE4MjAsMzUgQEAgZHJvcERCcyhQR2Nv bm4gKmNvbm4pCiAJCQlzdHJjbXAoZGJuYW1lLCAidGVtcGxhdGUwIikgIT0gMCAmJgogCQkJ c3RyY21wKGRibmFtZSwgInBvc3RncmVzIikgIT0gMCkKIAkJewotCQkJZnByaW50ZihPUEYs ICJEUk9QIERBVEFCQVNFICVzJXM7XG4iLAotCQkJCQlpZl9leGlzdHMgPyAiSUYgRVhJU1RT ICIgOiAiIiwKLQkJCQkJZm10SWQoZGJuYW1lKSk7CisJCQlpZiAoYXJjaER1bXBGb3JtYXQg PT0gYXJjaE51bGwpCisJCQl7CisJCQkJYXBwZW5kUFFFeHBCdWZmZXIoZGVsUXJ5LCAiRFJP UCBEQVRBQkFTRSAlcyVzO1xuIiwKKwkJCQkJCWlmX2V4aXN0cyA/ICJJRiBFWElTVFMgIiA6 ICIiLAorCQkJCQkJZm10SWQoZGJuYW1lKSk7CisJCQkJZnByaW50ZihPUEYsICIlcyIsIGRl bFFyeS0+ZGF0YSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJYXBwZW5kUFFFeHBCdWZm ZXIoZGVsUXJ5LCAiRFJPUCBEQVRBQkFTRSBJRiBFWElTVFMgJXM7XG4iLAorCQkJCQkJZm10 SWQoZGJuYW1lKSk7CisKKwkJCQlBcmNoaXZlRW50cnkoZm91dCwKKwkJCQkJCW5pbENhdGFs b2dJZCwgIC8qIGNhdGFsb2cgSUQgKi8KKwkJCQkJCWNyZWF0ZUR1bXBJZCgpLCAgICAgICAg LyogZHVtcCBJRCAqLworCQkJCQkJQVJDSElWRV9PUFRTKC50YWcgPSAiRFJPUF9HTE9CQUwi LAorCQkJCQkJCS5kZXNjcmlwdGlvbiA9ICJEUk9QX0dMT0JBTCIsCisJCQkJCQkJLnNlY3Rp b24gPSBTRUNUSU9OX1BSRV9EQVRBLAorCQkJCQkJCS5jcmVhdGVTdG10ID0gZGVsUXJ5LT5k YXRhKSk7CisJCQl9CisKKwkJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihkZWxRcnkpOwogCQl9CiAJ fQogCiAJUFFjbGVhcihyZXMpOwogCi0JZnByaW50ZihPUEYsICJcblxuIik7CisJaWYgKGFy Y2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIH0K IAogCkBAIC0xNTMzLDcgKzE4NzAsNyBAQCBkdW1wVXNlckNvbmZpZyhQR2Nvbm4gKmNvbm4s IGNvbnN0IGNoYXIgKnVzZXJuYW1lKQogCiAJcmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sIGJ1 Zi0+ZGF0YSk7CiAKLQlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQorCWlmIChQUW50dXBsZXMo cmVzKSA+IDAgJiYgYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCiAJewogCQljaGFyCSAg ICpzYW5pdGl6ZWQ7CiAKQEAgLTE1NDgsNyArMTg4NSwxNyBAQCBkdW1wVXNlckNvbmZpZyhQ R2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnVzZXJuYW1lKQogCQltYWtlQWx0ZXJDb25maWdD b21tYW5kKGNvbm4sIFBRZ2V0dmFsdWUocmVzLCBpLCAwKSwKIAkJCQkJCQkgICAiUk9MRSIs IHVzZXJuYW1lLCBOVUxMLCBOVUxMLAogCQkJCQkJCSAgIGJ1Zik7Ci0JCWZwcmludGYoT1BG LCAiJXMiLCBidWYtPmRhdGEpOworCisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVs bCkKKwkJCWZwcmludGYoT1BGLCAiJXMiLCBidWYtPmRhdGEpOworCQllbHNlCisJCQlBcmNo aXZlRW50cnkoZm91dCwKKwkJCQkJCSBuaWxDYXRhbG9nSWQsCS8qIGNhdGFsb2cgSUQgKi8K KwkJCQkJCSBjcmVhdGVEdW1wSWQoKSwJLyogZHVtcCBJRCAqLworCQkJCQkJIEFSQ0hJVkVf T1BUUygudGFnID0gdXNlcm5hbWUsCisJCQkJCQkJCQkgIC5kZXNjcmlwdGlvbiA9ICJST0xF IFBST1BFUlRJRVMiLAorCQkJCQkJCQkJICAuc2VjdGlvbiA9IFNFQ1RJT05fUFJFX0RBVEEs CisJCQkJCQkJCQkgIC5jcmVhdGVTdG10ID0gYnVmLT5kYXRhKSk7CiAJfQogCiAJUFFjbGVh cihyZXMpOwpAQCAtMTYxOCw2ICsxOTY1LDkgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNv bm4pCiB7CiAJUEdyZXN1bHQgICAqcmVzOwogCWludAkJCWk7CisJY2hhcgkJZGJfc3ViZGly W01BWFBHUEFUSF07CisJY2hhcgkJZGJmaWxlcGF0aFtNQVhQR1BBVEhdOworCUZJTEUJICAg Km1hcF9maWxlID0gTlVMTDsKIAogCS8qCiAJICogU2tpcCBkYXRhYmFzZXMgbWFya2VkIG5v dCBkYXRhbGxvd2Nvbm4sIHNpbmNlIHdlJ2QgYmUgdW5hYmxlIHRvIGNvbm5lY3QKQEAgLTE2 MzEsMTkgKzE5ODEsNDMgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJICogZG9l c24ndCBoYXZlIHNvbWUgZmFpbHVyZSBtb2RlIHdpdGggLS1jbGVhbi4KIAkgKi8KIAlyZXMg PSBleGVjdXRlUXVlcnkoY29ubiwKLQkJCQkJICAgIlNFTEVDVCBkYXRuYW1lICIKKwkJCQkJ ICAgIlNFTEVDVCBkYXRuYW1lLCBvaWQgIgogCQkJCQkgICAiRlJPTSBwZ19kYXRhYmFzZSBk ICIKIAkJCQkJICAgIldIRVJFIGRhdGFsbG93Y29ubiBBTkQgZGF0Y29ubmxpbWl0ICE9IC0y ICIKIAkJCQkJICAgIk9SREVSIEJZIChkYXRuYW1lIDw+ICd0ZW1wbGF0ZTEnKSwgZGF0bmFt ZSIpOwogCi0JaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKKwlpZiAoUFFudHVwbGVzKHJlcykg PiAwICYmIGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQogCQlmcHJpbnRmKE9QRiwgIi0t XG4tLSBEYXRhYmFzZXNcbi0tXG5cbiIpOwogCisJLyoKKwkgKiBJZiBkaXJlY3RvcnkvdGFy L2N1c3RvbSBmb3JtYXQgaXMgc3BlY2lmaWVkLCBjcmVhdGUgYSBzdWJkaXJlY3RvcnkKKwkg KiB1bmRlciB0aGUgbWFpbiBkaXJlY3RvcnkgYW5kIGVhY2ggZGF0YWJhc2UgZHVtcCBmaWxl IG9yIHN1YmRpcmVjdG9yeQorCSAqIHdpbGwgYmUgY3JlYXRlZCBpbiB0aGF0IHN1YmRpcmVj dG9yeSBieSBwZ19kdW1wLgorCSAqLworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVs bCkKKwl7CisJCWNoYXIJCW1hcF9maWxlX3BhdGhbTUFYUEdQQVRIXTsKKworCQlzbnByaW50 ZihkYl9zdWJkaXIsIE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcyIsIGZpbGVuYW1lKTsKKwor CQkvKiBDcmVhdGUgYSBzdWJkaXJlY3Rvcnkgd2l0aCAnZGF0YWJhc2VzJyBuYW1lIHVuZGVy IG1haW4gZGlyZWN0b3J5LiAqLworCQlpZiAobWtkaXIoZGJfc3ViZGlyLCBwZ19kaXJfY3Jl YXRlX21vZGUpICE9IDApCisJCQlwZ19mYXRhbCgiY291bGQgbm90IGNyZWF0ZSBkaXJlY3Rv cnkgXCIlc1wiOiAlbSIsIGRiX3N1YmRpcik7CisKKwkJc25wcmludGYobWFwX2ZpbGVfcGF0 aCwgTUFYUEdQQVRILCAiJXMvbWFwLmRhdCIsIGZpbGVuYW1lKTsKKworCQkvKiBDcmVhdGUg YSBtYXAgZmlsZSAodG8gc3RvcmUgZGJvaWQgYW5kIGRibmFtZSkgKi8KKwkJbWFwX2ZpbGUg PSBmb3BlbihtYXBfZmlsZV9wYXRoLCBQR19CSU5BUllfVyk7CisJCWlmICghbWFwX2ZpbGUp CisJCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6ICVtIiwgbWFwX2Zp bGVfcGF0aCk7CisJfQorCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKysp CiAJewogCQljaGFyCSAgICpkYm5hbWUgPSBQUWdldHZhbHVlKHJlcywgaSwgMCk7CiAJCWNo YXIJICAgKnNhbml0aXplZDsKLQkJY29uc3QgY2hhciAqY3JlYXRlX29wdHM7CisJCWNoYXIJ ICAgKm9pZCA9IFBRZ2V0dmFsdWUocmVzLCBpLCAxKTsKKwkJY29uc3QgY2hhciAqY3JlYXRl X29wdHMgPSAiIjsKIAkJaW50CQkJcmV0OwogCiAJCS8qIFNraXAgdGVtcGxhdGUwLCBldmVu IGlmIGl0J3Mgbm90IG1hcmtlZCAhZGF0YWxsb3djb25uLiAqLwpAQCAtMTY2MCw3ICsyMDM0 LDEwIEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCQlwZ19sb2dfaW5mbygiZHVt cGluZyBkYXRhYmFzZSBcIiVzXCIiLCBkYm5hbWUpOwogCiAJCXNhbml0aXplZCA9IHNhbml0 aXplX2xpbmUoZGJuYW1lLCB0cnVlKTsKLQkJZnByaW50ZihPUEYsICItLVxuLS0gRGF0YWJh c2UgXCIlc1wiIGR1bXBcbi0tXG5cbiIsIHNhbml0aXplZCk7CisKKwkJaWYgKGFyY2hEdW1w Rm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICItLVxuLS0gRGF0YWJhc2Ug XCIlc1wiIGR1bXBcbi0tXG5cbiIsIHNhbml0aXplZCk7CisKIAkJZnJlZShzYW5pdGl6ZWQp OwogCiAJCS8qCkBAIC0xNjc1LDI0ICsyMDUyLDQwIEBAIGR1bXBEYXRhYmFzZXMoUEdjb25u ICpjb25uKQogCQl7CiAJCQlpZiAob3V0cHV0X2NsZWFuKQogCQkJCWNyZWF0ZV9vcHRzID0g Ii0tY2xlYW4gLS1jcmVhdGUiOwotCQkJZWxzZQotCQkJewotCQkJCWNyZWF0ZV9vcHRzID0g IiI7Ci0JCQkJLyogU2luY2UgcGdfZHVtcCB3b24ndCBlbWl0IGEgXGNvbm5lY3QgY29tbWFu ZCwgd2UgbXVzdCAqLworCQkJLyogU2luY2UgcGdfZHVtcCB3b24ndCBlbWl0IGEgXGNvbm5l Y3QgY29tbWFuZCwgd2UgbXVzdCAqLworCQkJZWxzZSBpZiAoYXJjaER1bXBGb3JtYXQgPT0g YXJjaE51bGwpCiAJCQkJZnByaW50ZihPUEYsICJcXGNvbm5lY3QgJXNcblxuIiwgZGJuYW1l KTsKLQkJCX0KKwkJCWVsc2UKKwkJCQljcmVhdGVfb3B0cyA9ICIiOwogCQl9CiAJCWVsc2UK IAkJCWNyZWF0ZV9vcHRzID0gIi0tY3JlYXRlIjsKIAotCQlpZiAoZmlsZW5hbWUpCisJCWlm IChmaWxlbmFtZSAmJiBhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKIAkJCWZjbG9zZShP UEYpOwogCi0JCXJldCA9IHJ1blBnRHVtcChkYm5hbWUsIGNyZWF0ZV9vcHRzKTsKKwkJLyoK KwkJICogSWYgdGhpcyBpcyBub3QgYSBwbGFpbiBmb3JtYXQgZHVtcCwgdGhlbiBhcHBlbmQg ZGJvaWQgYW5kIGRibmFtZSB0bworCQkgKiB0aGUgbWFwLmRhdCBmaWxlLgorCQkgKi8KKwkJ aWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCQl7CisJCQlpZiAoYXJjaER1bXBG b3JtYXQgPT0gYXJjaEN1c3RvbSkKKwkJCQlzbnByaW50ZihkYmZpbGVwYXRoLCBNQVhQR1BB VEgsICJcIiVzXCIvXCIlc1wiLmRtcCIsIGRiX3N1YmRpciwgb2lkKTsKKwkJCWVsc2UgaWYg KGFyY2hEdW1wRm9ybWF0ID09IGFyY2hUYXIpCisJCQkJc25wcmludGYoZGJmaWxlcGF0aCwg TUFYUEdQQVRILCAiXCIlc1wiL1wiJXNcIi50YXIiLCBkYl9zdWJkaXIsIG9pZCk7CisJCQll bHNlCisJCQkJc25wcmludGYoZGJmaWxlcGF0aCwgTUFYUEdQQVRILCAiXCIlc1wiL1wiJXNc IiIsIGRiX3N1YmRpciwgb2lkKTsKKworCQkJLyogUHV0IG9uZSBsaW5lIGVudHJ5IGZvciBk Ym9pZCBhbmQgZGJuYW1lIGluIG1hcCBmaWxlLiAqLworCQkJZnByaW50ZihtYXBfZmlsZSwg IiVzICVzXG4iLCBvaWQsIGRibmFtZSk7CisJCX0KKworCQlyZXQgPSBydW5QZ0R1bXAoZGJu YW1lLCBjcmVhdGVfb3B0cywgZGJmaWxlcGF0aCk7CiAJCWlmIChyZXQgIT0gMCkKIAkJCXBn X2ZhdGFsKCJwZ19kdW1wIGZhaWxlZCBvbiBkYXRhYmFzZSBcIiVzXCIsIGV4aXRpbmciLCBk Ym5hbWUpOwogCi0JCWlmIChmaWxlbmFtZSkKKwkJaWYgKGZpbGVuYW1lICYmIGFyY2hEdW1w Rm9ybWF0ID09IGFyY2hOdWxsKQogCQl7CiAJCQlPUEYgPSBmb3BlbihmaWxlbmFtZSwgUEdf QklOQVJZX0EpOwogCQkJaWYgKCFPUEYpCkBAIC0xNzAxLDYgKzIwOTQsMTAgQEAgZHVtcERh dGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJCX0KIAl9CiAKKwkvKiBDbG9zZSBtYXAgZmlsZSAq LworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwkJZmNsb3NlKG1hcF9maWxl KTsKKwogCVBRY2xlYXIocmVzKTsKIH0KIApAQCAtMTcxMCw3ICsyMTA3LDcgQEAgZHVtcERh dGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAgKiBSdW4gcGdfZHVtcCBvbiBkYm5hbWUsIHdpdGgg c3BlY2lmaWVkIG9wdGlvbnMuCiAgKi8KIHN0YXRpYyBpbnQKLXJ1blBnRHVtcChjb25zdCBj aGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzKQorcnVuUGdEdW1wKGNvbnN0 IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMsIGNoYXIgKmRiZmlsZSkK IHsKIAlQUUV4cEJ1ZmZlckRhdGEgY29ubnN0cmJ1ZjsKIAlQUUV4cEJ1ZmZlckRhdGEgY21k OwpAQCAtMTcxOSwxNyArMjExNiwzNiBAQCBydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1l LCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cykKIAlpbml0UFFFeHBCdWZmZXIoJmNvbm5zdHJi dWYpOwogCWluaXRQUUV4cEJ1ZmZlcigmY21kKTsKIAotCXByaW50ZlBRRXhwQnVmZmVyKCZj bWQsICJcIiVzXCIgJXMgJXMiLCBwZ19kdW1wX2JpbiwKLQkJCQkJICBwZ2R1bXBvcHRzLT5k YXRhLCBjcmVhdGVfb3B0cyk7Ci0KIAkvKgotCSAqIElmIHdlIGhhdmUgYSBmaWxlbmFtZSwg dXNlIHRoZSB1bmRvY3VtZW50ZWQgcGxhaW4tYXBwZW5kIHBnX2R1bXAKLQkgKiBmb3JtYXQu CisJICogSWYgdGhpcyBpcyBub3QgYSBwbGFpbiBmb3JtYXQgZHVtcCwgdGhlbiBhcHBlbmQg ZmlsZSBuYW1lIGFuZCBkdW1wCisJICogZm9ybWF0IHRvIHRoZSBwZ19kdW1wIGNvbW1hbmQg dG8gZ2V0IGFyY2hpdmUgZHVtcC4KIAkgKi8KLQlpZiAoZmlsZW5hbWUpCi0JCWFwcGVuZFBR RXhwQnVmZmVyU3RyKCZjbWQsICIgLUZhICIpOworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBh cmNoTnVsbCkKKwl7CisJCXByaW50ZlBRRXhwQnVmZmVyKCZjbWQsICJcIiVzXCIgJXMgLWYg JXMgJXMiLCBwZ19kdW1wX2JpbiwKKwkJCQkJCSAgcGdkdW1wb3B0cy0+ZGF0YSwgZGJmaWxl LCBjcmVhdGVfb3B0cyk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hEaXJlY3Rv cnkpCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiICAtLWZvcm1hdD1kaXJlY3Rv cnkgIik7CisJCWVsc2UgaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hDdXN0b20pCisJCQlh cHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiICAtLWZvcm1hdD1jdXN0b20gIik7CisJCWVs c2UgaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hUYXIpCisJCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cigmY21kLCAiICAtLWZvcm1hdD10YXIgIik7CisJfQogCWVsc2UKLQkJYXBwZW5kUFFF eHBCdWZmZXJTdHIoJmNtZCwgIiAtRnAgIik7CisJeworCQlwcmludGZQUUV4cEJ1ZmZlcigm Y21kLCAiXCIlc1wiICVzICVzIiwgcGdfZHVtcF9iaW4sCisJCQkJCQkgIHBnZHVtcG9wdHMt PmRhdGEsIGNyZWF0ZV9vcHRzKTsKKworCQkvKgorCQkgKiBJZiB3ZSBoYXZlIGEgZmlsZW5h bWUsIHVzZSB0aGUgdW5kb2N1bWVudGVkIHBsYWluLWFwcGVuZCBwZ19kdW1wCisJCSAqIGZv cm1hdC4KKwkJICovCisJCWlmIChmaWxlbmFtZSkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3Ry KCZjbWQsICIgLUZhICIpOworCQllbHNlCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21k LCAiIC1GcCAiKTsKKwl9CiAKIAkvKgogCSAqIEFwcGVuZCB0aGUgZGF0YWJhc2UgbmFtZSB0 byB0aGUgYWxyZWFkeS1jb25zdHJ1Y3RlZCBzdGVtIG9mIGNvbm5lY3Rpb24KQEAgLTE4NzQs MyArMjI5MCw0NyBAQCByZWFkX2R1bXBhbGxfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFt ZSwgU2ltcGxlU3RyaW5nTGlzdCAqcGF0dGVybikKIAogCWZpbHRlcl9mcmVlKCZmc3RhdGUp OwogfQorCisvKgorICogcGFyc2VEdW1wRm9ybWF0CisgKgorICogVGhpcyB3aWxsIHZhbGlk YXRlIGR1bXAgZm9ybWF0cy4KKyAqLworc3RhdGljIEFyY2hpdmVGb3JtYXQKK3BhcnNlRHVt cEZvcm1hdChjb25zdCBjaGFyICpmb3JtYXQpCit7CisJQXJjaGl2ZUZvcm1hdCBhcmNoRHVt cEZvcm1hdDsKKworCWlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgImMiKSA9PSAwKQorCQlh cmNoRHVtcEZvcm1hdCA9IGFyY2hDdXN0b207CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChm b3JtYXQsICJjdXN0b20iKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hDdXN0b207 CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJkIikgPT0gMCkKKwkJYXJjaER1 bXBGb3JtYXQgPSBhcmNoRGlyZWN0b3J5OworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9y bWF0LCAiZGlyZWN0b3J5IikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoRGlyZWN0 b3J5OworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAicCIpID09IDApCisJCWFy Y2hEdW1wRm9ybWF0ID0gYXJjaE51bGw7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3Jt YXQsICJwbGFpbiIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaE51bGw7CisJZWxz ZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJ0IikgPT0gMCkKKwkJYXJjaER1bXBGb3Jt YXQgPSBhcmNoVGFyOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAidGFyIikg PT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoVGFyOworCWVsc2UKKwkJcGdfZmF0YWwo InVucmVjb2duaXplZCBvdXRwdXQgZm9ybWF0IFwiJXNcIjsgcGxlYXNlIHNwZWNpZnkgXCJj XCIsIFwiZFwiLCBcInBcIiwgb3IgXCJ0XCIiLAorCQkJCSBmb3JtYXQpOworCisJcmV0dXJu IGFyY2hEdW1wRm9ybWF0OworfQorCisvKgorICogY3JlYXRlRHVtcElkCisgKgorICogUmV0 dXJuIHRoZSBuZXh0IGR1bXBJZC4KKyAqLworc3RhdGljIGludAorY3JlYXRlRHVtcElkKHZv aWQpCit7CisJcmV0dXJuICsrZHVtcElkVmFsOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19kdW1wL3BnX3Jlc3RvcmUuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMKaW5k ZXggODRiOGQ0MTBjOWUuLmIzNTFiMjlkMmU0IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1 bXAvcGdfcmVzdG9yZS5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMKQEAg LTIsNyArMiw3IEBACiAgKgogICogcGdfcmVzdG9yZS5jCiAgKglwZ19yZXN0b3JlIGlzIGFu IHV0aWxpdHkgZXh0cmFjdGluZyBwb3N0Z3JlcyBkYXRhYmFzZSBkZWZpbml0aW9ucwotICoJ ZnJvbSBhIGJhY2t1cCBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcCB1c2luZyB0aGUgYXJj aGl2ZXIKKyAqCWZyb20gYSBiYWNrdXAgYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXAvcGdf ZHVtcGFsbCB1c2luZyB0aGUgYXJjaGl2ZXIKICAqCWludGVyZmFjZS4KICAqCiAgKglwZ19y ZXN0b3JlIHdpbGwgcmVhZCB0aGUgYmFja3VwIGFyY2hpdmUgYW5kCkBAIC00MSwxMiArNDEs MTYgQEAKICNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgogCiAjaW5jbHVkZSA8Y3R5cGUuaD4K KyNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2lmZGVmIEhBVkVfVEVSTUlPU19ICiAjaW5jbHVk ZSA8dGVybWlvcy5oPgogI2VuZGlmCiAKKyNpbmNsdWRlICJjb21tb24vc3RyaW5nLmgiCisj aW5jbHVkZSAiY29ubmVjdGRiLmgiCiAjaW5jbHVkZSAiZHVtcHV0aWxzLmgiCiAjaW5jbHVk ZSAiZmVfdXRpbHMvb3B0aW9uX3V0aWxzLmgiCisjaW5jbHVkZSAiZmVfdXRpbHMvc3RyaW5n X3V0aWxzLmgiCiAjaW5jbHVkZSAiZmlsdGVyLmgiCiAjaW5jbHVkZSAiZ2V0b3B0X2xvbmcu aCIKICNpbmNsdWRlICJwYXJhbGxlbC5oIgpAQCAtNTQsMTggKzU4LDQxIEBACiAKIHN0YXRp YyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKTsKIHN0YXRpYyB2b2lkIHJlYWRf cmVzdG9yZV9maWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBSZXN0b3JlT3B0aW9ucyAq b3B0cyk7CitzdGF0aWMgYm9vbCBmaWxlX2V4aXN0c19pbl9kaXJlY3RvcnkoY29uc3QgY2hh ciAqZGlyLCBjb25zdCBjaGFyICpmaWxlbmFtZSk7CitzdGF0aWMgaW50CXJlc3RvcmVfb25l X2RhdGFiYXNlKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsIFJlc3RvcmVPcHRpb25zICpv cHRzLAorCQkJCQkJCQkgaW50IG51bVdvcmtlcnMsIGJvb2wgYXBwZW5kX2RhdGEpOworc3Rh dGljIGludAlyZXN0b3JlX2dsb2JhbF9vYmplY3RzKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNw ZWMsIFJlc3RvcmVPcHRpb25zICpvcHRzKTsKKworc3RhdGljIGludAlyZXN0b3JlX2FsbF9k YXRhYmFzZXMoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywKKwkJCQkJCQkJICBTaW1wbGVT dHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMsIFJlc3RvcmVPcHRpb25zICpvcHRzLCBp bnQgbnVtV29ya2Vycyk7CitzdGF0aWMgaW50CWdldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9y ZShQR2Nvbm4gKmNvbm4sCisJCQkJCQkJCQkJU2ltcGxlUHRyTGlzdCAqZGJuYW1lX29pZF9s aXN0LAorCQkJCQkJCQkJCVNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucyk7 CitzdGF0aWMgaW50CWdldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZShjaGFyICpkdW1w ZGlycGF0aCwKKwkJCQkJCQkJCQkgICBTaW1wbGVQdHJMaXN0ICpkYm5hbWVfb2lkX2xpc3Qp OworCisvKgorICogU3RvcmVzIGEgZGF0YWJhc2UgT0lEIGFuZCB0aGUgY29ycmVzcG9uZGlu ZyBuYW1lLgorICovCit0eXBlZGVmIHN0cnVjdCBEYk9pZE5hbWUKK3sKKwlPaWQJCQlvaWQ7 CisJY2hhcgkJc3RyW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07IC8qIG51bGwtdGVybWluYXRl ZCBzdHJpbmcgaGVyZSAqLworfQkJCURiT2lkTmFtZTsKKwogCiBpbnQKIG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQogewogCVJlc3RvcmVPcHRpb25zICpvcHRzOwogCWludAkJCWM7 Ci0JaW50CQkJZXhpdF9jb2RlOwogCWludAkJCW51bVdvcmtlcnMgPSAxOwotCUFyY2hpdmUg ICAgKkFIOwogCWNoYXIJICAgKmlucHV0RmlsZVNwZWM7CiAJYm9vbAkJZGF0YV9vbmx5ID0g ZmFsc2U7CiAJYm9vbAkJc2NoZW1hX29ubHkgPSBmYWxzZTsKKwlpbnQJCQluX2Vycm9ycyA9 IDA7CisJYm9vbAkJZ2xvYmFsc19vbmx5ID0gZmFsc2U7CisJU2ltcGxlU3RyaW5nTGlzdCBk Yl9leGNsdWRlX3BhdHRlcm5zID0ge05VTEwsIE5VTEx9OwogCXN0YXRpYyBpbnQJZGlzYWJs ZV90cmlnZ2VycyA9IDA7CiAJc3RhdGljIGludAllbmFibGVfcm93X3NlY3VyaXR5ID0gMDsK IAlzdGF0aWMgaW50CWlmX2V4aXN0cyA9IDA7CkBAIC04OSw2ICsxMTYsNyBAQCBtYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikKIAkJeyJjbGVhbiIsIDAsIE5VTEwsICdjJ30sCiAJCXsi Y3JlYXRlIiwgMCwgTlVMTCwgJ0MnfSwKIAkJeyJkYXRhLW9ubHkiLCAwLCBOVUxMLCAnYSd9 LAorCQl7Imdsb2JhbHMtb25seSIsIDAsIE5VTEwsICdnJ30sCiAJCXsiZGJuYW1lIiwgMSwg TlVMTCwgJ2QnfSwKIAkJeyJleGl0LW9uLWVycm9yIiwgMCwgTlVMTCwgJ2UnfSwKIAkJeyJl eGNsdWRlLXNjaGVtYSIsIDEsIE5VTEwsICdOJ30sCkBAIC0xNDIsNiArMTcwLDcgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXsic3RhdGlzdGljcy1vbmx5Iiwgbm9fYXJn dW1lbnQsICZzdGF0aXN0aWNzX29ubHksIDF9LAogCQl7ImZpbHRlciIsIHJlcXVpcmVkX2Fy Z3VtZW50LCBOVUxMLCA0fSwKIAkJeyJyZXN0cmljdC1rZXkiLCByZXF1aXJlZF9hcmd1bWVu dCwgTlVMTCwgNn0sCisJCXsiZXhjbHVkZS1kYXRhYmFzZSIsIHJlcXVpcmVkX2FyZ3VtZW50 LCBOVUxMLCA3fSwKIAogCQl7TlVMTCwgMCwgTlVMTCwgMH0KIAl9OwpAQCAtMTcwLDcgKzE5 OSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl9CiAJfQogCi0Jd2hpbGUg KChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjQ2Q6ZWY6RjpoOkk6ajpsTDpuOk46 T3A6UDpSc1M6dDpUOlU6dndXeDEiLAorCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2Ms IGFyZ3YsICJhY0NkOmVmOkY6Z2g6STpqOmxMOm46TjpPcDpQOlJzUzp0OlQ6VTp2d1d4MSIs CiAJCQkJCQkJY21kb3B0cywgTlVMTCkpICE9IC0xKQogCXsKIAkJc3dpdGNoIChjKQpAQCAt MTk3LDExICsyMjYsMTQgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJaWYg KHN0cmxlbihvcHRhcmcpICE9IDApCiAJCQkJCW9wdHMtPmZvcm1hdE5hbWUgPSBwZ19zdHJk dXAob3B0YXJnKTsKIAkJCQlicmVhazsKKwkJCWNhc2UgJ2cnOgorCQkJCS8qIHJlc3RvcmUg b25seSBnbG9iYWwgc3FsIGNvbW1hbmRzLiAqLworCQkJCWdsb2JhbHNfb25seSA9IHRydWU7 CisJCQkJYnJlYWs7CiAJCQljYXNlICdoJzoKIAkJCQlpZiAoc3RybGVuKG9wdGFyZykgIT0g MCkKIAkJCQkJb3B0cy0+Y3BhcmFtcy5wZ2hvc3QgPSBwZ19zdHJkdXAob3B0YXJnKTsKIAkJ CQlicmVhazsKLQogCQkJY2FzZSAnaic6CQkJLyogbnVtYmVyIG9mIHJlc3RvcmUgam9icyAq LwogCQkJCWlmICghb3B0aW9uX3BhcnNlX2ludChvcHRhcmcsICItai8tLWpvYnMiLCAxLAog CQkJCQkJCQkJICBQR19NQVhfSk9CUywKQEAgLTMyMSw2ICszNTMsMTAgQEAgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJb3B0cy0+cmVzdHJpY3Rfa2V5ID0gcGdfc3RyZHVw KG9wdGFyZyk7CiAJCQkJYnJlYWs7CiAKKwkJCWNhc2UgNzoJCQkJLyogZGF0YWJhc2UgcGF0 dGVybnMgdG8gc2tpcCAqLworCQkJCXNpbXBsZV9zdHJpbmdfbGlzdF9hcHBlbmQoJmRiX2V4 Y2x1ZGVfcGF0dGVybnMsIG9wdGFyZyk7CisJCQkJYnJlYWs7CisKIAkJCWRlZmF1bHQ6CiAJ CQkJLyogZ2V0b3B0X2xvbmcgYWxyZWFkeSBlbWl0dGVkIGEgY29tcGxhaW50ICovCiAJCQkJ cGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0 aW9uLiIsIHByb2duYW1lKTsKQEAgLTM0Nyw2ICszODMsMTQgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCiAJaWYgKCFvcHRzLT5jcGFyYW1zLmRibmFtZSAmJiAhb3B0cy0+Zmls ZW5hbWUgJiYgIW9wdHMtPnRvY1N1bW1hcnkpCiAJCXBnX2ZhdGFsKCJvbmUgb2YgLWQvLS1k Ym5hbWUgYW5kIC1mLy0tZmlsZSBtdXN0IGJlIHNwZWNpZmllZCIpOwogCisJaWYgKGRiX2V4 Y2x1ZGVfcGF0dGVybnMuaGVhZCAhPSBOVUxMICYmIGdsb2JhbHNfb25seSkKKwl7CisJCXBn X2xvZ19lcnJvcigib3B0aW9uICVzIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggJXMi LAorCQkJCQkgIi0tZXhjbHVkZS1kYXRhYmFzZSIsICItZy8tLWdsb2JhbHMtb25seSIpOwor CQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3Jt YXRpb24uIiwgcHJvZ25hbWUpOworCQlleGl0X25pY2VseSgxKTsKKwl9CisKIAkvKiBTaG91 bGQgZ2V0IGF0IG1vc3Qgb25lIG9mIC1kIGFuZCAtZiwgZWxzZSB1c2VyIGlzIGNvbmZ1c2Vk ICovCiAJaWYgKG9wdHMtPmNwYXJhbXMuZGJuYW1lKQogCXsKQEAgLTQyMCw2ICs0NjQsMzEg QEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXBnX2ZhdGFsKCJvcHRpb25zICVz IGFuZCAlcyBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIsCiAJCQkJICItMS8tLXNpbmdsZS10 cmFuc2FjdGlvbiIsICItLXRyYW5zYWN0aW9uLXNpemUiKTsKIAorCWlmIChvcHRzLT5zaW5n bGVfdHhuICYmIGdsb2JhbHNfb25seSkKKwkJcGdfZmF0YWwoIm9wdGlvbnMgJXMgYW5kICVz IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3Jl YXRlZCBieSBwZ19kdW1wYWxsIiwKKwkJCQkiLS1zaW5nbGUtdHJhbnNhY3Rpb24iLCAiLWcv LS1nbG9iYWxzLW9ubHkiKTsKKworCWlmIChvcHRzLT50eG5fc2l6ZSAmJiBnbG9iYWxzX29u bHkpCisJCXBnX2ZhdGFsKCJvcHRpb25zICVzIGFuZCAlcyBjYW5ub3QgYmUgdXNlZCB0b2dl dGhlciB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbCIs CisJCQkJIi0tdHJhbnNhY3Rpb24tc2l6ZSIsICItZy8tLWdsb2JhbHMtb25seSIpOworCisJ aWYgKG9wdHMtPmV4aXRfb25fZXJyb3IgJiYgZ2xvYmFsc19vbmx5KQorCQlwZ19mYXRhbCgi b3B0aW9ucyAlcyBhbmQgJXMgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2hlbiByZXN0b3Jp bmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwiLAorCQkJCSItLWV4aXQtb24t ZXJyb3IiLCAiLWcvLS1nbG9iYWxzLW9ubHkiKTsKKworCWlmIChkYXRhX29ubHkgJiYgZ2xv YmFsc19vbmx5KQorCQlwZ19mYXRhbCgib3B0aW9ucyAlcyBhbmQgJXMgY2Fubm90IGJlIHVz ZWQgdG9nZXRoZXIiLAorCQkJCSAiLWEvLS1kYXRhLW9ubHkiLCAiLWcvLS1nbG9iYWxzLW9u bHkiKTsKKwlpZiAoc2NoZW1hX29ubHkgJiYgZ2xvYmFsc19vbmx5KQorCQlwZ19mYXRhbCgi b3B0aW9ucyAlcyBhbmQgJXMgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiLAorCQkJCSAiLXMv LS1zY2hlbWEtb25seSIsICItZy8tLWdsb2JhbHMtb25seSIpOworCWlmIChzdGF0aXN0aWNz X29ubHkgJiYgZ2xvYmFsc19vbmx5KQorCQlwZ19mYXRhbCgib3B0aW9ucyAlcyBhbmQgJXMg Y2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiLAorCQkJCSAiLS1zdGF0aXN0aWNzLW9ubHkiLCAi LWcvLS1nbG9iYWxzLW9ubHkiKTsKKwlpZiAod2l0aF9zdGF0aXN0aWNzICYmIGdsb2JhbHNf b25seSkKKwkJcGdfZmF0YWwoIm9wdGlvbnMgJXMgYW5kICVzIGNhbm5vdCBiZSB1c2VkIHRv Z2V0aGVyIiwKKwkJCQkgIi0tc3RhdGlzdGljcyIsICItZy8tLWdsb2JhbHMtb25seSIpOwor CiAJLyoKIAkgKiAtQyBpcyBub3QgY29tcGF0aWJsZSB3aXRoIC0xLCBiZWNhdXNlIHdlIGNh bid0IGNyZWF0ZSBhIGRhdGFiYXNlIGluc2lkZQogCSAqIGEgdHJhbnNhY3Rpb24gYmxvY2su CkBAIC00ODUsNiArNTU0LDE3MyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJ CQkJIG9wdHMtPmZvcm1hdE5hbWUpOwogCX0KIAorCS8qCisJICogSWYgdG9jLmdsbyBmaWxl IGlzIHByZXNlbnQsIHRoZW4gcmVzdG9yZSBhbGwgdGhlIGRhdGFiYXNlcyBmcm9tCisJICog bWFwLmRhdCwgYnV0IHNraXAgcmVzdG9yaW5nIHRob3NlIG1hdGNoaW5nIC0tZXhjbHVkZS1k YXRhYmFzZSBwYXR0ZXJucy4KKwkgKi8KKwlpZiAoaW5wdXRGaWxlU3BlYyAhPSBOVUxMICYm CisJCShmaWxlX2V4aXN0c19pbl9kaXJlY3RvcnkoaW5wdXRGaWxlU3BlYywgInRvYy5nbG8i KSkpCisJeworCQljaGFyCQlnbG9iYWxfcGF0aFtNQVhQR1BBVEhdOworCQlSZXN0b3JlT3B0 aW9ucyAqdG1wb3B0cyA9IChSZXN0b3JlT3B0aW9ucyAqKSBwZ19tYWxsb2MwKHNpemVvZihS ZXN0b3JlT3B0aW9ucykpOworCisJCW9wdHMtPmZvcm1hdCA9IGFyY2hVbmtub3duOworCisJ CW1lbWNweSh0bXBvcHRzLCBvcHRzLCBzaXplb2YoUmVzdG9yZU9wdGlvbnMpKTsKKworCQkv KgorCQkgKiBDYW4gb25seSB1c2UgLS1saXN0IG9yIC0tdXNlLWxpc3Qgb3B0aW9ucyB3aXRo IGEgc2luZ2xlIGRhdGFiYXNlCisJCSAqIGR1bXAuCisJCSAqLworCQlpZiAob3B0cy0+dG9j U3VtbWFyeSkKKwkJCXBnX2ZhdGFsKCJvcHRpb24gJXMgY2Fubm90IGJlIHVzZWQgd2hlbiBy ZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwiLAorCQkJCQkgIi1s Ly0tbGlzdCIpOworCQlpZiAob3B0cy0+dG9jRmlsZSkKKwkJCXBnX2ZhdGFsKCJvcHRpb24g JXMgY2Fubm90IGJlIHVzZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5 IHBnX2R1bXBhbGwiLAorCQkJCQkgIi1MLy0tdXNlLWxpc3QiKTsKKworCQlpZiAob3B0cy0+ c3RyaWN0X25hbWVzKQorCQkJcGdfZmF0YWwoIm9wdGlvbiAlcyBjYW5ub3QgYmUgdXNlZCB3 aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbCIsCisJCQkJ CSItLXN0cmljdC1uYW1lcyIpOworCQlpZiAoZ2xvYmFsc19vbmx5ICYmIG9wdHMtPmRyb3BT Y2hlbWEpCisJCQlwZ19mYXRhbCgib3B0aW9ucyAlcyBhbmQgJXMgY2Fubm90IGJlIHVzZWQg dG9nZXRoZXIgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBh bGwiLAorCQkJCQkiLS1jbGVhbiIsICItZy8tLWdsb2JhbHMtb25seSIpOworCisJCWlmIChu b19zY2hlbWEpCisJCQlwZ19mYXRhbCgib3B0aW9uICVzIGNhbm5vdCBiZSB1c2VkIHdoZW4g cmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsIiwKKwkJCQkJICIt LW5vLXNjaGVtYSIpOworCisJCWlmIChkYXRhX29ubHkpCisJCQlwZ19mYXRhbCgib3B0aW9u ICVzIGNhbm5vdCBiZSB1c2VkIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBi eSBwZ19kdW1wYWxsIiwKKwkJCQkJICItYS8tLWRhdGEtb25seSIpOworCisJCWlmIChzdGF0 aXN0aWNzX29ubHkpCisJCQlwZ19mYXRhbCgib3B0aW9uICVzIGNhbm5vdCBiZSB1c2VkIHdo ZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsIiwKKwkJCQkJ ICItLXN0YXRpc3RpY3Mtb25seSIpOworCisJCWlmICghKG9wdHMtPmR1bXBTZWN0aW9ucyAm IERVTVBfUFJFX0RBVEEpKQorCQkJcGdfZmF0YWwoIm9wdGlvbiAlcyBjYW5ub3QgZXhjbHVk ZSAlcyB3aGVuIHJlc3RvcmluZyBhIHBnX2R1bXBhbGwgYXJjaGl2ZSIsCisJCQkJCSAiLS1z ZWN0aW9uIiwgIi0tcHJlLWRhdGEiKTsKKworCQkvKgorCQkgKiBUbyByZXN0b3JlIGZyb20g YSBwZ19kdW1wYWxsIGFyY2hpdmUsIC1DIChjcmVhdGUgZGF0YWJhc2UpIG9wdGlvbgorCQkg KiBtdXN0IGJlIHNwZWNpZmllZCB1bmxlc3Mgd2UgYXJlIG9ubHkgcmVzdG9yaW5nIGdsb2Jh bHMuCisJCSAqLworCQlpZiAoIWdsb2JhbHNfb25seSAmJiBvcHRzLT5jcmVhdGVEQiAhPSAx KQorCQl7CisJCQlwZ19sb2dfZXJyb3IoIm9wdGlvbiAlcyBtdXN0IGJlIHNwZWNpZmllZCB3 aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbCIsCisJCQkJ CQkgIi1DLy0tY3JlYXRlIik7CisJCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1o ZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQkJcGdfbG9nX2Vy cm9yX2hpbnQoIkluZGl2aWR1YWwgZGF0YWJhc2VzIGNhbiBiZSByZXN0b3JlZCB1c2luZyB0 aGVpciBzcGVjaWZpYyBhcmNoaXZlcy4iKTsKKwkJCWV4aXRfbmljZWx5KDEpOworCQl9CisK KwkJLyoKKwkJICogQWx3YXlzIHJlc3RvcmUgZ2xvYmFsIG9iamVjdHMsIGV2ZW4gaWYgLS1l eGNsdWRlLWRhdGFiYXNlIHJlc3VsdHMgaW4KKwkJICogemVybyBkYXRhYmFzZXMgdG8gcHJv Y2Vzcy4gSWYgJ2dsb2JhbHMtb25seScgaXMgc2V0LCBleGl0CisJCSAqIGltbWVkaWF0ZWx5 LgorCQkgKi8KKwkJc25wcmludGYoZ2xvYmFsX3BhdGgsIE1BWFBHUEFUSCwgIiVzL3RvYy5n bG8iLCBpbnB1dEZpbGVTcGVjKTsKKworCQluX2Vycm9ycyA9IHJlc3RvcmVfZ2xvYmFsX29i amVjdHMoZ2xvYmFsX3BhdGgsIHRtcG9wdHMpOworCisJCWlmIChnbG9iYWxzX29ubHkpCisJ CQlwZ19sb2dfaW5mbygiZGF0YWJhc2UgcmVzdG9yaW5nIHNraXBwZWQgYmVjYXVzZSBvcHRp b24gJXMgd2FzIHNwZWNpZmllZCIsCisJCQkJCQkiLWcvLS1nbG9iYWxzLW9ubHkiKTsKKwkJ ZWxzZQorCQl7CisJCQkvKiBOb3cgcmVzdG9yZSBhbGwgdGhlIGRhdGFiYXNlcyBmcm9tIG1h cC5kYXQgKi8KKwkJCW5fZXJyb3JzID0gbl9lcnJvcnMgKyByZXN0b3JlX2FsbF9kYXRhYmFz ZXMoaW5wdXRGaWxlU3BlYywgZGJfZXhjbHVkZV9wYXR0ZXJucywKKwkJCQkJCQkJCQkJIG9w dHMsIG51bVdvcmtlcnMpOworCQl9CisKKwkJLyogRnJlZSBkYiBwYXR0ZXJuIGxpc3QuICov CisJCXNpbXBsZV9zdHJpbmdfbGlzdF9kZXN0cm95KCZkYl9leGNsdWRlX3BhdHRlcm5zKTsK Kwl9CisJZWxzZQorCXsKKwkJaWYgKGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZCAhPSBOVUxM KQorCQl7CisJCQlzaW1wbGVfc3RyaW5nX2xpc3RfZGVzdHJveSgmZGJfZXhjbHVkZV9wYXR0 ZXJucyk7CisJCQlwZ19mYXRhbCgib3B0aW9uICVzIGNhbiBiZSB1c2VkIG9ubHkgd2hlbiBy ZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwiLAorCQkJCQkgIi0t ZXhjbHVkZS1kYXRhYmFzZSIpOworCQl9CisKKwkJaWYgKGdsb2JhbHNfb25seSkKKwkJCXBn X2ZhdGFsKCJvcHRpb24gJXMgY2FuIGJlIHVzZWQgb25seSB3aGVuIHJlc3RvcmluZyBhbiBh cmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbCIsCisJCQkJCSAiLWcvLS1nbG9iYWxzLW9u bHkiKTsKKworCQkvKiBQcm9jZXNzIGlmIHRvYy5nbG8gZmlsZSBkb2VzIG5vdCBleGlzdC4g Ki8KKwkJbl9lcnJvcnMgPSByZXN0b3JlX29uZV9kYXRhYmFzZShpbnB1dEZpbGVTcGVjLCBv cHRzLCBudW1Xb3JrZXJzLCBmYWxzZSk7CisJfQorCisJLyogRG9uZSwgcHJpbnQgYSBzdW1t YXJ5IG9mIGlnbm9yZWQgZXJyb3JzIGR1cmluZyByZXN0b3JlLiAqLworCWlmIChuX2Vycm9y cykKKwl7CisJCXBnX2xvZ193YXJuaW5nKCJlcnJvcnMgaWdub3JlZCBvbiByZXN0b3JlOiAl ZCIsIG5fZXJyb3JzKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8q CisgKiByZXN0b3JlX2dsb2JhbF9vYmplY3RzCisgKgorICogVGhpcyByZXN0b3JlIGFsbCBn bG9iYWwgb2JqZWN0cy4KKyAqLworc3RhdGljIGludAorcmVzdG9yZV9nbG9iYWxfb2JqZWN0 cyhjb25zdCBjaGFyICppbnB1dEZpbGVTcGVjLCBSZXN0b3JlT3B0aW9ucyAqb3B0cykKK3sK KwlBcmNoaXZlICAgICpBSDsKKwlpbnQJCQluZXJyb3IgPSAwOworCisJLyogU2V0IGZvcm1h dCBhcyBjdXN0b20gc28gdGhhdCB0b2MuZ2xvIGZpbGUgY2FuIGJlIHJlYWQuICovCisJb3B0 cy0+Zm9ybWF0ID0gYXJjaEN1c3RvbTsKKwlvcHRzLT50eG5fc2l6ZSA9IDA7CisKKwlBSCA9 IE9wZW5BcmNoaXZlKGlucHV0RmlsZVNwZWMsIG9wdHMtPmZvcm1hdCk7CisKKwlTZXRBcmNo aXZlT3B0aW9ucyhBSCwgTlVMTCwgb3B0cyk7CisKKwlvbl9leGl0X2Nsb3NlX2FyY2hpdmUo QUgpOworCisJLyogTGV0IHRoZSBhcmNoaXZlciBrbm93IGhvdyBub2lzeSB0byBiZSAqLwor CUFILT52ZXJib3NlID0gb3B0cy0+dmVyYm9zZTsKKworCS8qIERvbid0IG91dHB1dCBUT0Mg ZW50cnkgY29tbWVudHMgd2hlbiByZXN0b3JpbmcgZ2xvYmFscyAqLworCSgoQXJjaGl2ZUhh bmRsZSAqKSBBSCktPm5vVG9jQ29tbWVudHMgPSAxOworCisJQUgtPmV4aXRfb25fZXJyb3Ig PSBmYWxzZTsKKworCS8qIFBhcmFsbGVsIGV4ZWN1dGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZv ciBnbG9iYWwgb2JqZWN0IHJlc3RvcmF0aW9uLiAqLworCUFILT5udW1Xb3JrZXJzID0gMTsK KworCVByb2Nlc3NBcmNoaXZlUmVzdG9yZU9wdGlvbnMoQUgpOworCVJlc3RvcmVBcmNoaXZl KEFILCBmYWxzZSk7CisKKwluZXJyb3IgPSBBSC0+bl9lcnJvcnM7CisKKwkvKiBBSCBtYXkg YmUgZnJlZWQgaW4gQ2xvc2VBcmNoaXZlPyAqLworCUNsb3NlQXJjaGl2ZShBSCk7CisKKwly ZXR1cm4gbmVycm9yOworfQorCisvKgorICogcmVzdG9yZV9vbmVfZGF0YWJhc2UKKyAqCisg KiBUaGlzIHdpbGwgcmVzdG9yZSBvbmUgZGF0YWJhc2UgdXNpbmcgdG9jLmRhdCBmaWxlLgor ICoKKyAqIHJldHVybnMgdGhlIG51bWJlciBvZiBlcnJvcnMgd2hpbGUgZG9pbmcgcmVzdG9y ZS4KKyAqLworc3RhdGljIGludAorcmVzdG9yZV9vbmVfZGF0YWJhc2UoY29uc3QgY2hhciAq aW5wdXRGaWxlU3BlYywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsCisJCQkJCSBpbnQgbnVtV29y a2VycywgYm9vbCBhcHBlbmRfZGF0YSkKK3sKKwlBcmNoaXZlICAgICpBSDsKKwlpbnQJCQlu X2Vycm9yczsKKwogCUFIID0gT3BlbkFyY2hpdmUoaW5wdXRGaWxlU3BlYywgb3B0cy0+Zm9y bWF0KTsKIAogCVNldEFyY2hpdmVPcHRpb25zKEFILCBOVUxMLCBvcHRzKTsKQEAgLTQ5Miw5 ICs3MjgsMTUgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJLyoKIAkgKiBXZSBk b24ndCBoYXZlIGEgY29ubmVjdGlvbiB5ZXQgYnV0IHRoYXQgZG9lc24ndCBtYXR0ZXIuIFRo ZSBjb25uZWN0aW9uCiAJICogaXMgaW5pdGlhbGl6ZWQgdG8gTlVMTCBhbmQgaWYgd2UgdGVy bWluYXRlIHRocm91Z2ggZXhpdF9uaWNlbHkoKSB3aGlsZQotCSAqIGl0J3Mgc3RpbGwgTlVM TCwgdGhlIGNsZWFudXAgZnVuY3Rpb24gd2lsbCBqdXN0IGJlIGEgbm8tb3AuCisJICogaXQn cyBzdGlsbCBOVUxMLCB0aGUgY2xlYW51cCBmdW5jdGlvbiB3aWxsIGp1c3QgYmUgYSBuby1v cC4gSWYgd2UgYXJlCisJICogcmVzdG9yaW5nIG11bHRpcGxlIGRhdGFiYXNlcywgdGhlbiBv bmx5IHVwZGF0ZSBBWCBoYW5kbGUgZm9yIGNsZWFudXAgYXMKKwkgKiB0aGUgcHJldmlvdXMg ZW50cnkgd2FzIGFscmVhZHkgaW4gdGhlIGFycmF5IGFuZCB3ZSBoYWQgY2xvc2VkIHByZXZp b3VzCisJICogY29ubmVjdGlvbiwgc28gd2UgY2FuIHVzZSB0aGUgc2FtZSBhcnJheSBzbG90 LgogCSAqLwotCW9uX2V4aXRfY2xvc2VfYXJjaGl2ZShBSCk7CisJaWYgKCFhcHBlbmRfZGF0 YSkKKwkJb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFIKTsKKwllbHNlCisJCXJlcGxhY2Vfb25f ZXhpdF9jbG9zZV9hcmNoaXZlKEFIKTsKIAogCS8qIExldCB0aGUgYXJjaGl2ZXIga25vdyBo b3cgbm9pc3kgdG8gYmUgKi8KIAlBSC0+dmVyYm9zZSA9IG9wdHMtPnZlcmJvc2U7CkBAIC01 MTQsMjUgKzc1NiwyMSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAllbHNlCiAJ ewogCQlQcm9jZXNzQXJjaGl2ZVJlc3RvcmVPcHRpb25zKEFIKTsKLQkJUmVzdG9yZUFyY2hp dmUoQUgpOworCQlSZXN0b3JlQXJjaGl2ZShBSCwgYXBwZW5kX2RhdGEpOwogCX0KIAotCS8q IGRvbmUsIHByaW50IGEgc3VtbWFyeSBvZiBpZ25vcmVkIGVycm9ycyAqLwotCWlmIChBSC0+ bl9lcnJvcnMpCi0JCXBnX2xvZ193YXJuaW5nKCJlcnJvcnMgaWdub3JlZCBvbiByZXN0b3Jl OiAlZCIsIEFILT5uX2Vycm9ycyk7CisJbl9lcnJvcnMgPSBBSC0+bl9lcnJvcnM7CiAKIAkv KiBBSCBtYXkgYmUgZnJlZWQgaW4gQ2xvc2VBcmNoaXZlPyAqLwotCWV4aXRfY29kZSA9IEFI LT5uX2Vycm9ycyA/IDEgOiAwOwotCiAJQ2xvc2VBcmNoaXZlKEFIKTsKIAotCXJldHVybiBl eGl0X2NvZGU7CisJcmV0dXJuIG5fZXJyb3JzOwogfQogCiBzdGF0aWMgdm9pZAogdXNhZ2Uo Y29uc3QgY2hhciAqcHJvZ25hbWUpCiB7Ci0JcHJpbnRmKF8oIiVzIHJlc3RvcmVzIGEgUG9z dGdyZVNRTCBkYXRhYmFzZSBmcm9tIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wLlxu XG4iKSwgcHJvZ25hbWUpOworCXByaW50ZihfKCIlcyByZXN0b3JlcyBQb3N0Z3JlU1FMIGRh dGFiYXNlcyBmcm9tIGFyY2hpdmVzIGNyZWF0ZWQgYnkgcGdfZHVtcCBvciBwZ19kdW1wYWxs LlxuXG4iKSwgcHJvZ25hbWUpOwogCXByaW50ZihfKCJVc2FnZTpcbiIpKTsKIAlwcmludGYo XygiICAlcyBbT1BUSU9OXS4uLiBbRklMRV1cbiIpLCBwcm9nbmFtZSk7CiAKQEAgLTU1MCw2 ICs3ODgsNyBAQCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkKIAlwcmludGYoXygiICAt YywgLS1jbGVhbiAgICAgICAgICAgICAgICAgIGNsZWFuIChkcm9wKSBkYXRhYmFzZSBvYmpl Y3RzIGJlZm9yZSByZWNyZWF0aW5nXG4iKSk7CiAJcHJpbnRmKF8oIiAgLUMsIC0tY3JlYXRl ICAgICAgICAgICAgICAgICBjcmVhdGUgdGhlIHRhcmdldCBkYXRhYmFzZVxuIikpOwogCXBy aW50ZihfKCIgIC1lLCAtLWV4aXQtb24tZXJyb3IgICAgICAgICAgZXhpdCBvbiBlcnJvciwg ZGVmYXVsdCBpcyB0byBjb250aW51ZVxuIikpOworCXByaW50ZihfKCIgIC1nLCAtLWdsb2Jh bHMtb25seSAgICAgICAgICAgcmVzdG9yZSBvbmx5IGdsb2JhbCBvYmplY3RzLCBubyBkYXRh YmFzZXNcbiIpKTsKIAlwcmludGYoXygiICAtSSwgLS1pbmRleD1OQU1FICAgICAgICAgICAg IHJlc3RvcmUgbmFtZWQgaW5kZXhcbiIpKTsKIAlwcmludGYoXygiICAtaiwgLS1qb2JzPU5V TSAgICAgICAgICAgICAgIHVzZSB0aGlzIG1hbnkgcGFyYWxsZWwgam9icyB0byByZXN0b3Jl XG4iKSk7CiAJcHJpbnRmKF8oIiAgLUwsIC0tdXNlLWxpc3Q9RklMRU5BTUUgICAgICB1c2Ug dGFibGUgb2YgY29udGVudHMgZnJvbSB0aGlzIGZpbGUgZm9yXG4iCkBAIC01NjYsNiArODA1 LDcgQEAgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpCiAJcHJpbnRmKF8oIiAgLTEsIC0t c2luZ2xlLXRyYW5zYWN0aW9uICAgICByZXN0b3JlIGFzIGEgc2luZ2xlIHRyYW5zYWN0aW9u XG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1kaXNhYmxlLXRyaWdnZXJzICAgICAgICAgICBkaXNh YmxlIHRyaWdnZXJzIGR1cmluZyBkYXRhLW9ubHkgcmVzdG9yZVxuIikpOwogCXByaW50Zihf KCIgIC0tZW5hYmxlLXJvdy1zZWN1cml0eSAgICAgICAgZW5hYmxlIHJvdyBzZWN1cml0eVxu IikpOworCXByaW50ZihfKCIgIC0tZXhjbHVkZS1kYXRhYmFzZT1QQVRURVJOICAgZG8gbm90 IHJlc3RvcmUgdGhlIHNwZWNpZmllZCBkYXRhYmFzZShzKVxuIikpOwogCXByaW50ZihfKCIg IC0tZmlsdGVyPUZJTEVOQU1FICAgICAgICAgICAgcmVzdG9yZSBvciBza2lwIG9iamVjdHMg YmFzZWQgb24gZXhwcmVzc2lvbnNcbiIKIAkJCSAiICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGluIEZJTEVOQU1FXG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1pZi1leGlzdHMgICAg ICAgICAgICAgICAgICB1c2UgSUYgRVhJU1RTIHdoZW4gZHJvcHBpbmcgb2JqZWN0c1xuIikp OwpAQCAtNjAxLDggKzg0MSw4IEBAIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKQogCXBy aW50ZihfKCIgIC0tcm9sZT1ST0xFTkFNRSAgICAgICAgICBkbyBTRVQgUk9MRSBiZWZvcmUg cmVzdG9yZVxuIikpOwogCiAJcHJpbnRmKF8oIlxuIgotCQkJICJUaGUgb3B0aW9ucyAtSSwg LW4sIC1OLCAtUCwgLXQsIC1ULCBhbmQgLS1zZWN0aW9uIGNhbiBiZSBjb21iaW5lZCBhbmQg c3BlY2lmaWVkXG4iCi0JCQkgIm11bHRpcGxlIHRpbWVzIHRvIHNlbGVjdCBtdWx0aXBsZSBv YmplY3RzLlxuIikpOworCQkJICJUaGUgb3B0aW9ucyAtSSwgLW4sIC1OLCAtUCwgLXQsIC1U LCAtLXNlY3Rpb24sIGFuZCAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2FuIGJlXG4iCisJCQkgImNv bWJpbmVkIGFuZCBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMgdG8gc2VsZWN0IG11bHRpcGxl IG9iamVjdHMuXG4iKSk7CiAJcHJpbnRmKF8oIlxuSWYgbm8gaW5wdXQgZmlsZSBuYW1lIGlz IHN1cHBsaWVkLCB0aGVuIHN0YW5kYXJkIGlucHV0IGlzIHVzZWQuXG5cbiIpKTsKIAlwcmlu dGYoXygiUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIpLCBQQUNLQUdFX0JVR1JFUE9SVCk7CiAJ cHJpbnRmKF8oIiVzIGhvbWUgcGFnZTogPCVzPlxuIiksIFBBQ0tBR0VfTkFNRSwgUEFDS0FH RV9VUkwpOwpAQCAtNzA3LDMgKzk0Nyw0MjAgQEAgcmVhZF9yZXN0b3JlX2ZpbHRlcnMoY29u c3QgY2hhciAqZmlsZW5hbWUsIFJlc3RvcmVPcHRpb25zICpvcHRzKQogCiAJZmlsdGVyX2Zy ZWUoJmZzdGF0ZSk7CiB9CisKKy8qCisgKiBmaWxlX2V4aXN0c19pbl9kaXJlY3RvcnkKKyAq CisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGZpbGUgZXhpc3RzIGluIHRoZSBnaXZlbiBkaXJl Y3RvcnkuCisgKi8KK3N0YXRpYyBib29sCitmaWxlX2V4aXN0c19pbl9kaXJlY3RvcnkoY29u c3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBz dDsKKwljaGFyCQlidWZbTUFYUEdQQVRIXTsKKworCWlmIChzbnByaW50ZihidWYsIE1BWFBH UEFUSCwgIiVzLyVzIiwgZGlyLCBmaWxlbmFtZSkgPj0gTUFYUEdQQVRIKQorCQlwZ19mYXRh bCgiZGlyZWN0b3J5IG5hbWUgdG9vIGxvbmc6IFwiJXNcIiIsIGRpcik7CisKKwlyZXR1cm4g KHN0YXQoYnVmLCAmc3QpID09IDAgJiYgU19JU1JFRyhzdC5zdF9tb2RlKSk7Cit9CisKKy8q CisgKiBnZXRfZGJuYW1lc19saXN0X3RvX3Jlc3RvcmUKKyAqCisgKiBUaGlzIHdpbGwgbWFy ayBmb3Igc2tpcHBpbmcgYW55IGVudHJpZXMgZnJvbSBkYm5hbWVfb2lkX2xpc3QgdGhhdCBw YXR0ZXJuIG1hdGNoIGFuCisgKiBlbnRyeSBpbiB0aGUgZGJfZXhjbHVkZV9wYXR0ZXJucyBs aXN0LgorICoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBkYXRhYmFzZSB0byBiZSByZXN0 b3JlZC4KKyAqCisgKi8KK3N0YXRpYyBpbnQKK2dldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9y ZShQR2Nvbm4gKmNvbm4sCisJCQkJCQkJU2ltcGxlUHRyTGlzdCAqZGJuYW1lX29pZF9saXN0 LAorCQkJCQkJCVNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucykKK3sKKwlp bnQJCQljb3VudF9kYiA9IDA7CisJUFFFeHBCdWZmZXIgcXVlcnk7CisJUFFFeHBCdWZmZXIg ZGJfbGl0OworCVBHcmVzdWx0ICAgKnJlczsKKworCXF1ZXJ5ID0gY3JlYXRlUFFFeHBCdWZm ZXIoKTsKKwlkYl9saXQgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCisJLyoKKwkgKiBQcm9j ZXNzIG9uZSBieSBvbmUgYWxsIGRibmFtZXMgYW5kIGlmIHNwZWNpZmllZCB0byBza2lwIHJl c3RvcmluZywgdGhlbgorCSAqIHJlbW92ZSBkYm5hbWUgZnJvbSBsaXN0LgorCSAqLworCWZv ciAoU2ltcGxlUHRyTGlzdENlbGwgKmRiX2NlbGwgPSBkYm5hbWVfb2lkX2xpc3QtPmhlYWQ7 CisJCSBkYl9jZWxsOyBkYl9jZWxsID0gZGJfY2VsbC0+bmV4dCkKKwl7CisJCURiT2lkTmFt ZSAgKmRiaWRuYW1lID0gKERiT2lkTmFtZSAqKSBkYl9jZWxsLT5wdHI7CisJCWJvb2wgICAg ICAgICAgICBza2lwX2RiX3Jlc3RvcmUgPSBmYWxzZTsKKworCQlyZXNldFBRRXhwQnVmZmVy KHF1ZXJ5KTsKKwkJcmVzZXRQUUV4cEJ1ZmZlcihkYl9saXQpOworCisJCWFwcGVuZFN0cmlu Z0xpdGVyYWxDb25uKGRiX2xpdCwgZGJpZG5hbWUtPnN0ciwgY29ubik7CisKKwkJZm9yIChT aW1wbGVTdHJpbmdMaXN0Q2VsbCAqcGF0X2NlbGwgPSBkYl9leGNsdWRlX3BhdHRlcm5zLmhl YWQ7IHBhdF9jZWxsOyBwYXRfY2VsbCA9IHBhdF9jZWxsLT5uZXh0KQorCQl7CisJCQkvKgor CQkJICogSWYgdGhlcmUgaXMgYW4gZXhhY3QgbWF0Y2ggdGhlbiB3ZSBkb24ndCBuZWVkIHRv IHRyeSBhIHBhdHRlcm4KKwkJCSAqIG1hdGNoCisJCQkgKi8KKwkJCWlmIChwZ19zdHJjYXNl Y21wKGRiaWRuYW1lLT5zdHIsIHBhdF9jZWxsLT52YWwpID09IDApCisJCQkJc2tpcF9kYl9y ZXN0b3JlID0gdHJ1ZTsKKwkJCS8qIE90aGVyd2lzZSwgdHJ5IGEgcGF0dGVybiBtYXRjaCBp ZiB0aGVyZSBpcyBhIGNvbm5lY3Rpb24gKi8KKwkJCWVsc2UKKwkJCXsKKwkJCQlpbnQJCQlk b3RjbnQ7CisKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIlNFTEVDVCAxICIp OworCQkJCXByb2Nlc3NTUUxOYW1lUGF0dGVybihjb25uLCBxdWVyeSwgcGF0X2NlbGwtPnZh bCwgZmFsc2UsCisJCQkJCQkJCQkgIGZhbHNlLCBOVUxMLCBkYl9saXQtPmRhdGEsCisJCQkJ CQkJCQkgIE5VTEwsIE5VTEwsIE5VTEwsICZkb3RjbnQpOworCisJCQkJaWYgKGRvdGNudCA+ IDApCisJCQkJeworCQkJCQlwZ19sb2dfZXJyb3IoImltcHJvcGVyIHF1YWxpZmllZCBuYW1l ICh0b28gbWFueSBkb3R0ZWQgbmFtZXMpOiAlcyIsCisJCQkJCQkJCSBkYmlkbmFtZS0+c3Ry KTsKKwkJCQkJUFFmaW5pc2goY29ubik7CisJCQkJCWV4aXRfbmljZWx5KDEpOworCQkJCX0K KworCQkJCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBxdWVyeS0+ZGF0YSk7CisKKwkJCQlp ZiAoUFFudHVwbGVzKHJlcykpCisJCQkJeworCQkJCQlza2lwX2RiX3Jlc3RvcmUgPSB0cnVl OworCQkJCQlwZ19sb2dfaW5mbygiZGF0YWJhc2UgbmFtZSBcIiVzXCIgbWF0Y2hlcyAtLWV4 Y2x1ZGUtZGF0YWJhc2UgcGF0dGVybiBcIiVzXCIiLCBkYmlkbmFtZS0+c3RyLCBwYXRfY2Vs bC0+dmFsKTsKKwkJCQl9CisKKwkJCQlQUWNsZWFyKHJlcyk7CisJCQkJcmVzZXRQUUV4cEJ1 ZmZlcihxdWVyeSk7CisJCQl9CisKKwkJCWlmIChza2lwX2RiX3Jlc3RvcmUpCisJCQkJYnJl YWs7CisJCX0KKworCQkvKgorCQkgKiBNYXJrIGRiIHRvIGJlIHNraXBwZWQgb3IgaW5jcmVt ZW50IHRoZSBjb3VudGVyIG9mIGRicyB0byBiZQorCQkgKiByZXN0b3JlZAorCQkgKi8KKwkJ aWYgKHNraXBfZGJfcmVzdG9yZSkKKwkJeworCQkJcGdfbG9nX2luZm8oImV4Y2x1ZGluZyBk YXRhYmFzZSBcIiVzXCIiLCBkYmlkbmFtZS0+c3RyKTsKKwkJCWRiaWRuYW1lLT5vaWQgPSBJ bnZhbGlkT2lkOworCQl9CisJCWVsc2UKKwkJCWNvdW50X2RiKys7CisJfQorCisJZGVzdHJv eVBRRXhwQnVmZmVyKHF1ZXJ5KTsKKwlkZXN0cm95UFFFeHBCdWZmZXIoZGJfbGl0KTsKKwor CXJldHVybiBjb3VudF9kYjsKK30KKworLyoKKyAqIGdldF9kYm5hbWVfb2lkX2xpc3RfZnJv bV9tZmlsZQorICoKKyAqIE9wZW4gbWFwLmRhdCBmaWxlIGFuZCByZWFkIGxpbmUgYnkgbGlu ZSBhbmQgdGhlbiBwcmVwYXJlIGEgbGlzdCBvZiBkYXRhYmFzZQorICogbmFtZXMgYW5kIGNv cnJlc3BvbmRpbmcgZGJfb2lkLgorICoKKyAqIFJldHVybnMsIHRvdGFsIG51bWJlciBvZiBk YXRhYmFzZSBuYW1lcyBpbiBtYXAuZGF0IGZpbGUuCisgKi8KK3N0YXRpYyBpbnQKK2dldF9k Ym5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZShjaGFyICpkdW1wZGlycGF0aCwgU2ltcGxlUHRy TGlzdCAqZGJuYW1lX29pZF9saXN0KQoreworCVN0cmluZ0luZm9EYXRhIGxpbmVidWY7CisJ RklMRQkgICAqcGZpbGU7CisJY2hhcgkJbWFwX2ZpbGVfcGF0aFtNQVhQR1BBVEhdOworCWlu dAkJCWNvdW50ID0gMDsKKwlpbnQJCQlsZW47CisKKworCS8qCisJICogSWYgdGhlcmUgaXMg bm8gbWFwLmRhdCBmaWxlIGluIGR1bXAsIHRoZW4gcmV0dXJuIGZyb20gaGVyZSBhcyB0aGVy ZSBpcworCSAqIG5vIGRhdGFiYXNlIHRvIHJlc3RvcmUuCisJICovCisJaWYgKCFmaWxlX2V4 aXN0c19pbl9kaXJlY3RvcnkoZHVtcGRpcnBhdGgsICJtYXAuZGF0IikpCisJeworCQlwZ19s b2dfaW5mbygiZGF0YWJhc2UgcmVzdG9yaW5nIGlzIHNraXBwZWQgYmVjYXVzZSBmaWxlIFwi JXNcIiBkb2VzIG5vdCBleGlzdCBpbiBkaXJlY3RvcnkgXCIlc1wiIiwgIm1hcC5kYXQiLCBk dW1wZGlycGF0aCk7CisJCXJldHVybiAwOworCX0KKworCWxlbiA9IHN0cmxlbihkdW1wZGly cGF0aCk7CisKKwkvKiBUcmltIHNsYXNoIGZyb20gZGlyZWN0b3J5IG5hbWUuICovCisJd2hp bGUgKGxlbiA+IDEgJiYgZHVtcGRpcnBhdGhbbGVuIC0gMV0gPT0gJy8nKQorCXsKKwkJZHVt cGRpcnBhdGhbbGVuIC0gMV0gPSAnXDAnOworCQlsZW4tLTsKKwl9CisKKwlzbnByaW50Ziht YXBfZmlsZV9wYXRoLCBNQVhQR1BBVEgsICIlcy9tYXAuZGF0IiwgZHVtcGRpcnBhdGgpOwor CisJLyogT3BlbiBtYXAuZGF0IGZpbGUuICovCisJcGZpbGUgPSBmb3BlbihtYXBfZmlsZV9w YXRoLCBQR19CSU5BUllfUik7CisKKwlpZiAocGZpbGUgPT0gTlVMTCkKKwkJcGdfZmF0YWwo ImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAlbSIsIG1hcF9maWxlX3BhdGgpOworCisJ aW5pdFN0cmluZ0luZm8oJmxpbmVidWYpOworCisJLyogQXBwZW5kIGFsbCB0aGUgZGJuYW1l L2RiX29pZCBjb21iaW5hdGlvbnMgdG8gdGhlIGxpc3QuICovCisJd2hpbGUgKHBnX2dldF9s aW5lX2J1ZihwZmlsZSwgJmxpbmVidWYpKQorCXsKKwkJT2lkCQkJZGJfb2lkID0gSW52YWxp ZE9pZDsKKwkJY2hhcgkgICAqZGJuYW1lOworCQlEYk9pZE5hbWUgICpkYmlkbmFtZTsKKwkJ aW50CQkJbmFtZWxlbjsKKwkJY2hhcgkgICAqcCA9IGxpbmVidWYuZGF0YTsKKworCQkvKiBF eHRyYWN0IGRib2lkLiAqLworCQl3aGlsZSAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikgKnAp KQorCQkJcCsrOworCQlpZiAocCA+IGxpbmVidWYuZGF0YSAmJiAqcCA9PSAnICcpCisJCXsK KwkJCXNzY2FuZihsaW5lYnVmLmRhdGEsICIldSIsICZkYl9vaWQpOworCQkJcCsrOworCQl9 CisKKwkJLyogZGJuYW1lIGlzIHRoZSByZXN0IG9mIHRoZSBsaW5lICovCisJCWRibmFtZSA9 IHA7CisJCW5hbWVsZW4gPSBzdHJsZW4oZGJuYW1lKTsKKworCQkvKiBTdHJpcCB0cmFpbGlu ZyBuZXdsaW5lICovCisJCWlmIChuYW1lbGVuID4gMCAmJiBkYm5hbWVbbmFtZWxlbiAtIDFd ID09ICdcbicpCisJCQlkYm5hbWVbLS1uYW1lbGVuXSA9ICdcMCc7CisKKwkJLyogUmVwb3J0 IGVycm9yIGFuZCBleGl0IGlmIHRoZSBmaWxlIGhhcyBhbnkgY29ycnVwdGVkIGRhdGEuICov CisJCWlmICghT2lkSXNWYWxpZChkYl9vaWQpIHx8IG5hbWVsZW4gPCAxKQorCQkJcGdfZmF0 YWwoImludmFsaWQgZW50cnkgaW4gZmlsZSBcIiVzXCIgb24gbGluZSAlZCIsIG1hcF9maWxl X3BhdGgsCisJCQkJCSBjb3VudCArIDEpOworCisJCWRiaWRuYW1lID0gcGdfbWFsbG9jKG9m ZnNldG9mKERiT2lkTmFtZSwgc3RyKSArIG5hbWVsZW4gKyAxKTsKKwkJZGJpZG5hbWUtPm9p ZCA9IGRiX29pZDsKKwkJc3RybGNweShkYmlkbmFtZS0+c3RyLCBkYm5hbWUsIG5hbWVsZW4g KyAxKTsKKworCQlwZ19sb2dfaW5mbygiZm91bmQgZGF0YWJhc2UgXCIlc1wiIChPSUQ6ICV1 KSBpbiBmaWxlIFwiJXNcIiIsCisJCQkJCWRiaWRuYW1lLT5zdHIsIGRiX29pZCwgbWFwX2Zp bGVfcGF0aCk7CisKKwkJc2ltcGxlX3B0cl9saXN0X2FwcGVuZChkYm5hbWVfb2lkX2xpc3Qs IGRiaWRuYW1lKTsKKwkJY291bnQrKzsKKwl9CisKKwkvKiBDbG9zZSBtYXAuZGF0IGZpbGUu ICovCisJZmNsb3NlKHBmaWxlKTsKKworCXBmcmVlKGxpbmVidWYuZGF0YSk7CisKKwlyZXR1 cm4gY291bnQ7Cit9CisKKy8qCisgKiByZXN0b3JlX2FsbF9kYXRhYmFzZXMKKyAqCisgKiBU aGlzIHdpbGwgcmVzdG9yZSBkYXRhYmFzZXMgdGhvc2UgZHVtcHMgYXJlIHByZXNlbnQgaW4K KyAqIGRpcmVjdG9yeSBiYXNlZCBvbiBtYXAuZGF0IGZpbGUgbWFwcGluZy4KKyAqCisgKiBU aGlzIHdpbGwgc2tpcCByZXN0b3JpbmcgZm9yIGRhdGFiYXNlcyB0aGF0IGFyZSBzcGVjaWZp ZWQgd2l0aAorICogZXhjbHVkZS1kYXRhYmFzZSBvcHRpb24uCisgKgorICogcmV0dXJucywg bnVtYmVyIG9mIGVycm9ycyB3aGlsZSBkb2luZyByZXN0b3JlLgorICovCitzdGF0aWMgaW50 CityZXN0b3JlX2FsbF9kYXRhYmFzZXMoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywKKwkJ CQkJICBTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMsIFJlc3RvcmVPcHRp b25zICpvcHRzLAorCQkJCQkgIGludCBudW1Xb3JrZXJzKQoreworCVNpbXBsZVB0ckxpc3Qg ZGJuYW1lX29pZF9saXN0ID0ge05VTEwsIE5VTEx9OworCWludAkJCW51bV9kYl9yZXN0b3Jl ID0gMDsKKwlpbnQJCQludW1fdG90YWxfZGI7CisJaW50CQkJbl9lcnJvcnNfdG90YWwgPSAw OworCWNoYXIJICAgKmNvbm5lY3RlZF9kYiA9IE5VTEw7CisJUEdjb25uCSAgICpjb25uID0g TlVMTDsKKwlSZXN0b3JlT3B0aW9ucyAqb3JpZ2luYWxfb3B0cyA9IChSZXN0b3JlT3B0aW9u cyAqKSBwZ19tYWxsb2MwKHNpemVvZihSZXN0b3JlT3B0aW9ucykpOworCVJlc3RvcmVPcHRp b25zICp0bXBvcHRzID0gKFJlc3RvcmVPcHRpb25zICopIHBnX21hbGxvYzAoc2l6ZW9mKFJl c3RvcmVPcHRpb25zKSk7CisKKwltZW1jcHkob3JpZ2luYWxfb3B0cywgb3B0cywgc2l6ZW9m KFJlc3RvcmVPcHRpb25zKSk7CisKKwkvKiBTYXZlIGRiIG5hbWUgdG8gcmV1c2UgaXQgZm9y IGFsbCB0aGUgZGF0YWJhc2UuICovCisJaWYgKG9wdHMtPmNwYXJhbXMuZGJuYW1lKQorCQlj b25uZWN0ZWRfZGIgPSBvcHRzLT5jcGFyYW1zLmRibmFtZTsKKworCW51bV90b3RhbF9kYiA9 IGdldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZSgoY2hhciopIGlucHV0RmlsZVNwZWMs ICZkYm5hbWVfb2lkX2xpc3QpOworCisJcGdfbG9nX2luZm8obmdldHRleHQoImZvdW5kICVk IGRhdGFiYXNlIG5hbWUgaW4gXCIlc1wiIiwKKwkJCQkJCSAiZm91bmQgJWQgZGF0YWJhc2Ug bmFtZXMgaW4gXCIlc1wiIiwKKwkJCQkJCSBudW1fdG90YWxfZGIpLAorCQkJCW51bV90b3Rh bF9kYiwgIm1hcC5kYXQiKTsKKworCS8qCisJICogSWYgZXhjbHVkZS1wYXR0ZXJucyBpcyBn aXZlbiwgdGhlbiBjb25uZWN0IHRvIHRoZSBkYXRhYmFzZSB0byBwcm9jZXNzCisJICogaXQu CisJICovCisJaWYgKGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZCAhPSBOVUxMKQorCXsKKwkJ aWYgKG9wdHMtPmNwYXJhbXMuZGJuYW1lKQorCQl7CisJCQljb25uID0gQ29ubmVjdERhdGFi YXNlKG9wdHMtPmNwYXJhbXMuZGJuYW1lLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwK KwkJCQkJCQkJICAgb3B0cy0+Y3BhcmFtcy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMudXNlcm5h bWUsIFRSSV9ERUZBVUxULAorCQkJCQkJCQkgICBmYWxzZSwgcHJvZ25hbWUsIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEwpOworCisJCQlpZiAoIWNvbm4pCisJCQkJcGdfZmF0YWwoImNvdWxk IG5vdCBjb25uZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIsIG9wdHMtPmNwYXJhbXMuZGJuYW1l KTsKKwkJfQorCisJCWlmICghY29ubikKKwkJeworCQkJcGdfbG9nX2luZm8oInRyeWluZyB0 byBjb25uZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIsICJwb3N0Z3JlcyIpOworCisJCQljb25u ID0gQ29ubmVjdERhdGFiYXNlKCJwb3N0Z3JlcyIsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdo b3N0LAorCQkJCQkJCQkgICBvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+Y3BhcmFtcy51 c2VybmFtZSwgVFJJX0RFRkFVTFQsCisJCQkJCQkJCSAgIGZhbHNlLCBwcm9nbmFtZSwgTlVM TCwgTlVMTCwgTlVMTCwgTlVMTCk7CisKKwkJCS8qIFRyeSB3aXRoIHRlbXBsYXRlMS4gKi8K KwkJCWlmICghY29ubikKKwkJCXsKKwkJCQlwZ19sb2dfaW5mbygidHJ5aW5nIHRvIGNvbm5l Y3QgdG8gZGF0YWJhc2UgXCIlc1wiIiwgInRlbXBsYXRlMSIpOworCisJCQkJY29ubiA9IENv bm5lY3REYXRhYmFzZSgidGVtcGxhdGUxIiwgTlVMTCwgb3B0cy0+Y3BhcmFtcy5wZ2hvc3Qs CisJCQkJCQkJCQkgICBvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+Y3BhcmFtcy51c2Vy bmFtZSwgVFJJX0RFRkFVTFQsCisJCQkJCQkJCQkgICBmYWxzZSwgcHJvZ25hbWUsIE5VTEws IE5VTEwsIE5VTEwsIE5VTEwpOworCQkJCWlmICghY29ubikKKwkJCQl7CisJCQkJCXBnX2xv Z19lcnJvcigiY291bGQgbm90IGNvbm5lY3QgdG8gZGF0YWJhc2VzIFwicG9zdGdyZXNcIiBv ciBcInRlbXBsYXRlMVwiXG4iCisJCQkJCQkJCSAiUGxlYXNlIHNwZWNpZnkgYW4gYWx0ZXJu YXRpdmUgZGF0YWJhc2UuIik7CisJCQkJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAt LWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CisJCQkJCWV4aXRf bmljZWx5KDEpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogZmlsdGVyIHRo ZSBkYiBsaXN0IGFjY29yZGluZyB0byB0aGUgZXhjbHVkZSBwYXR0ZXJucworCSAqLworCW51 bV9kYl9yZXN0b3JlID0gZ2V0X2RibmFtZXNfbGlzdF90b19yZXN0b3JlKGNvbm4sICZkYm5h bWVfb2lkX2xpc3QsCisJCQkJCQkJCQkJCQkgZGJfZXhjbHVkZV9wYXR0ZXJucyk7CisKKwkv KiBDbG9zZSB0aGUgZGIgY29ubmVjdGlvbiBhcyB3ZSBhcmUgZG9uZSB3aXRoIGV4Y2x1ZGUt ZGF0YWJhc2UgcGF0dGVybnMuICovCisJUFFmaW5pc2goY29ubik7CisKKwkvKiBFeGl0IGlm IG5vIGRiIG5lZWRzIHRvIGJlIHJlc3RvcmVkLiAqLworCWlmIChudW1fZGJfcmVzdG9yZSA9 PSAwKQorCXsKKwkJcGdfbG9nX2luZm8obmdldHRleHQoIm5vIGRhdGFiYXNlIG5lZWRzIHJl c3RvcmluZyBvdXQgb2YgJWQgZGF0YWJhc2UiLAorCQkJCQkJCSAibm8gZGF0YWJhc2UgbmVl ZHMgcmVzdG9yaW5nIG91dCBvZiAlZCBkYXRhYmFzZXMiLCBudW1fdG90YWxfZGIpLAorCQkJ CQludW1fdG90YWxfZGIpOworCQlwZ19mcmVlKG9yaWdpbmFsX29wdHMpOworCQlwZ19mcmVl KHRtcG9wdHMpOworCQlyZXR1cm4gMDsKKwl9CisKKwlwZ19sb2dfaW5mbygibmVlZCB0byBy ZXN0b3JlICVkIGRhdGFiYXNlcyBvdXQgb2YgJWQgZGF0YWJhc2VzIiwgbnVtX2RiX3Jlc3Rv cmUsIG51bV90b3RhbF9kYik7CisKKwkvKgorCSAqIFdlIGhhdmUgYSBsaXN0IG9mIGRhdGFi YXNlcyB0byByZXN0b3JlIGFmdGVyIHByb2Nlc3NpbmcgdGhlCisJICogZXhjbHVkZS1kYXRh YmFzZSBzd2l0Y2goZXMpLiAgTm93IHdlIGNhbiByZXN0b3JlIHRoZW0gb25lIGJ5IG9uZS4K KwkgKi8KKwlmb3IgKFNpbXBsZVB0ckxpc3RDZWxsICpkYl9jZWxsID0gZGJuYW1lX29pZF9s aXN0LmhlYWQ7CisJCSBkYl9jZWxsOyBkYl9jZWxsID0gZGJfY2VsbC0+bmV4dCkKKwl7CisJ CURiT2lkTmFtZSAgKmRiaWRuYW1lID0gKERiT2lkTmFtZSAqKSBkYl9jZWxsLT5wdHI7CisJ CWNoYXIJCXN1YmRpcnBhdGhbTUFYUEdQQVRIXTsKKwkJY2hhcgkJc3ViZGlyZGJwYXRoW01B WFBHUEFUSF07CisJCWNoYXIJCWRiZmlsZW5hbWVbTUFYUEdQQVRIXTsKKwkJaW50CQkJbl9l cnJvcnM7CisKKwkJLyogaWdub3JlIGRicyBtYXJrZWQgZm9yIHNraXBwaW5nICovCisJCWlm IChkYmlkbmFtZS0+b2lkID09IEludmFsaWRPaWQpCisJCQljb250aW51ZTsKKworCQkvKgor CQkgKiBTaW5jZSBwZ19iYWNrdXBfYXJjaGl2ZXIuYyBtYXkgbW9kaWZ5IFJlc3RvcmVPcHRp b25zIGR1cmluZyB0aGUKKwkJICogcHJldmlvdXMgcmVzdG9yZSwgd2UgbXVzdCBwcm92aWRl IGEgZnJlc2ggY29weSBvZiB0aGUgb3JpZ2luYWwKKwkJICogIm9wdHMiIGZvciBlYWNoIGNh bGwgdG8gcmVzdG9yZV9vbmVfZGF0YWJhc2UuCisJCSAqLworCQltZW1jcHkodG1wb3B0cywg b3JpZ2luYWxfb3B0cywgc2l6ZW9mKFJlc3RvcmVPcHRpb25zKSk7CisKKwkJLyoKKwkJICog V2UgbmVlZCB0byByZXNldCBvdmVycmlkZV9kYm5hbWUgc28gdGhhdCBvYmplY3RzIGNhbiBi ZSByZXN0b3JlZAorCQkgKiBpbnRvIGFuIGFscmVhZHkgY3JlYXRlZCBkYXRhYmFzZS4gKHVz ZWQgd2l0aCAtZC8tLWRibmFtZSBvcHRpb24pCisJCSAqLworCQlpZiAodG1wb3B0cy0+Y3Bh cmFtcy5vdmVycmlkZV9kYm5hbWUpCisJCXsKKwkJCXBmcmVlKHRtcG9wdHMtPmNwYXJhbXMu b3ZlcnJpZGVfZGJuYW1lKTsKKwkJCXRtcG9wdHMtPmNwYXJhbXMub3ZlcnJpZGVfZGJuYW1l ID0gTlVMTDsKKwkJfQorCisJCXNucHJpbnRmKHN1YmRpcmRicGF0aCwgTUFYUEdQQVRILCAi JXMvZGF0YWJhc2VzIiwgaW5wdXRGaWxlU3BlYyk7CisKKwkJLyoKKwkJICogTG9vayBmb3Ig dGhlIGRhdGFiYXNlIGR1bXAgZmlsZS9kaXIuIElmIHRoZXJlIGlzIGFuIHtvaWR9LnRhciBv cgorCQkgKiB7b2lkfS5kbXAgZmlsZSwgdXNlIGl0LiBPdGhlcndpc2UgdHJ5IHRvIHVzZSBh IGRpcmVjdG9yeSBjYWxsZWQKKwkJICoge29pZH0KKwkJICovCisJCXNucHJpbnRmKGRiZmls ZW5hbWUsIE1BWFBHUEFUSCwgIiV1LnRhciIsIGRiaWRuYW1lLT5vaWQpOworCQlpZiAoZmls ZV9leGlzdHNfaW5fZGlyZWN0b3J5KHN1YmRpcmRicGF0aCwgZGJmaWxlbmFtZSkpCisJCQlz bnByaW50ZihzdWJkaXJwYXRoLCBNQVhQR1BBVEgsICIlcy9kYXRhYmFzZXMvJXUudGFyIiwg aW5wdXRGaWxlU3BlYywgZGJpZG5hbWUtPm9pZCk7CisJCWVsc2UKKwkJeworCQkJc25wcmlu dGYoZGJmaWxlbmFtZSwgTUFYUEdQQVRILCAiJXUuZG1wIiwgZGJpZG5hbWUtPm9pZCk7CisK KwkJCWlmIChmaWxlX2V4aXN0c19pbl9kaXJlY3Rvcnkoc3ViZGlyZGJwYXRoLCBkYmZpbGVu YW1lKSkKKwkJCQlzbnByaW50ZihzdWJkaXJwYXRoLCBNQVhQR1BBVEgsICIlcy9kYXRhYmFz ZXMvJXUuZG1wIiwgaW5wdXRGaWxlU3BlYywgZGJpZG5hbWUtPm9pZCk7CisJCQllbHNlCisJ CQkJc25wcmludGYoc3ViZGlycGF0aCwgTUFYUEdQQVRILCAiJXMvZGF0YWJhc2VzLyV1Iiwg aW5wdXRGaWxlU3BlYywgZGJpZG5hbWUtPm9pZCk7CisJCX0KKworCQlwZ19sb2dfaW5mbygi cmVzdG9yaW5nIGRhdGFiYXNlIFwiJXNcIiIsIGRiaWRuYW1lLT5zdHIpOworCisJCS8qIElm IGRhdGFiYXNlIGlzIGFscmVhZHkgY3JlYXRlZCwgdGhlbiBkb24ndCBzZXQgY3JlYXRlREIg ZmxhZy4gKi8KKwkJaWYgKHRtcG9wdHMtPmNwYXJhbXMuZGJuYW1lKQorCQl7CisJCQlQR2Nv bm4JICAgKnRlc3RfY29ubjsKKworCQkJdGVzdF9jb25uID0gQ29ubmVjdERhdGFiYXNlKGRi aWRuYW1lLT5zdHIsIE5VTEwsIHRtcG9wdHMtPmNwYXJhbXMucGdob3N0LAorCQkJCQkJCQkJ CXRtcG9wdHMtPmNwYXJhbXMucGdwb3J0LCB0bXBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBU UklfREVGQVVMVCwKKwkJCQkJCQkJCQlmYWxzZSwgcHJvZ25hbWUsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwpOworCQkJaWYgKHRlc3RfY29ubikKKwkJCXsKKwkJCQlQUWZpbmlzaCh0ZXN0 X2Nvbm4pOworCisJCQkJLyogVXNlIGFscmVhZHkgY3JlYXRlZCBkYXRhYmFzZSBmb3IgY29u bmVjdGlvbi4gKi8KKwkJCQl0bXBvcHRzLT5jcmVhdGVEQiA9IDA7CisJCQkJdG1wb3B0cy0+ Y3BhcmFtcy5kYm5hbWUgPSBkYmlkbmFtZS0+c3RyOworCQkJfQorCQkJZWxzZQorCQkJewor CQkJCS8qIFdlJ2xsIGhhdmUgdG8gY3JlYXRlIGl0ICovCisJCQkJdG1wb3B0cy0+Y3JlYXRl REIgPSAxOworCQkJCXRtcG9wdHMtPmNwYXJhbXMuZGJuYW1lID0gY29ubmVjdGVkX2RiOwor CQkJfQorCQl9CisKKwkJLyogUmVzdG9yZSB0aGUgc2luZ2xlIGRhdGFiYXNlLiAqLworCQlu X2Vycm9ycyA9IHJlc3RvcmVfb25lX2RhdGFiYXNlKHN1YmRpcnBhdGgsIHRtcG9wdHMsIG51 bVdvcmtlcnMsIHRydWUpOworCisJCW5fZXJyb3JzX3RvdGFsICs9IG5fZXJyb3JzOworCisJ CS8qIFByaW50IGEgc3VtbWFyeSBvZiBpZ25vcmVkIGVycm9ycyBkdXJpbmcgc2luZ2xlIGRh dGFiYXNlIHJlc3RvcmUuICovCisJCWlmIChuX2Vycm9ycykKKwkJCXBnX2xvZ193YXJuaW5n KCJlcnJvcnMgaWdub3JlZCBvbiBkYXRhYmFzZSBcIiVzXCIgcmVzdG9yZTogJWQiLCBkYmlk bmFtZS0+c3RyLCBuX2Vycm9ycyk7CisJfQorCisJLyogTG9nIG51bWJlciBvZiBwcm9jZXNz ZWQgZGF0YWJhc2VzLiAqLworCXBnX2xvZ19pbmZvKCJudW1iZXIgb2YgcmVzdG9yZWQgZGF0 YWJhc2VzIGlzICVkIiwgbnVtX2RiX3Jlc3RvcmUpOworCisJLyogRnJlZSBkYm5hbWUgYW5k IGRib2lkIGxpc3QuICovCisJc2ltcGxlX3B0cl9saXN0X2Rlc3Ryb3koJmRibmFtZV9vaWRf bGlzdCk7CisKKwlwZ19mcmVlKG9yaWdpbmFsX29wdHMpOworCXBnX2ZyZWUodG1wb3B0cyk7 CisKKwlyZXR1cm4gbl9lcnJvcnNfdG90YWw7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2R1bXAvdC8wMDFfYmFzaWMucGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwK aW5kZXggYWI5MzEwZWI0MmIuLmE4OTViYzMxNGIwIDEwMDY0NAotLS0gYS9zcmMvYmluL3Bn X2R1bXAvdC8wMDFfYmFzaWMucGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2lj LnBsCkBAIC0yNDQsNCArMjQ0LDU5IEBAIGNvbW1hbmRfZmFpbHNfbGlrZSgKIAkncGdfZHVt cGFsbDogb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhl ciB3aXRoIC1nLy0tZ2xvYmFscy1vbmx5JwogKTsKIAorY29tbWFuZF9mYWlsc19saWtlKAor CVsgJ3BnX2R1bXBhbGwnLCAnLS1mb3JtYXQnLCAneCcgXSwKKwlxci9cUXBnX2R1bXBhbGw6 IGVycm9yOiB1bnJlY29nbml6ZWQgb3V0cHV0IGZvcm1hdCAieCI7XEUvLAorCSdwZ19kdW1w YWxsOiB1bnJlY29nbml6ZWQgb3V0cHV0IGZvcm1hdCcpOworCitjb21tYW5kX2ZhaWxzX2xp a2UoCisJWyAncGdfZHVtcGFsbCcsICctLWZvcm1hdCcsICdkJywgJy0tcmVzdHJpY3Qta2V5 PXV1JywgJy1mIGR1bXBmaWxlJyBdLAorCXFyL1xRcGdfZHVtcGFsbDogZXJyb3I6IG9wdGlv biAtLXJlc3RyaWN0LWtleSBjYW4gb25seSBiZSB1c2VkIHdpdGggLS1mb3JtYXQ9cGxhaW5c RS8sCisJJ3BnX2R1bXBhbGw6IC0tcmVzdHJpY3Qta2V5IGNhbiBvbmx5IGJlIHVzZWQgd2l0 aCBwbGFpbiBkdW1wIGZvcm1hdCcpOworCitjb21tYW5kX2ZhaWxzX2xpa2UoCisJWyAncGdf ZHVtcGFsbCcsICctLWZvcm1hdCcsICdkJywgJy0tZ2xvYmFscy1vbmx5JywgJy0tY2xlYW4n LCAnLWYnLCAnZHVtcGZpbGUnIF0sCisJcXIvXFFwZ19kdW1wYWxsOiBlcnJvcjogb3B0aW9u cyAtLWNsZWFuIGFuZCAtZ1wvLS1nbG9iYWxzLW9ubHkgY2Fubm90IGJlIHVzZWQgdG9nZXRo ZXIgaW4gbm9uLXRleHQgZHVtcFxFLywKKwkncGdfZHVtcGFsbDogLS1jbGVhbiBhbmQgLWcv LS1nbG9iYWxzLW9ubHkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgaW4gbm9uLXRleHQgZHVt cCcpOworCitjb21tYW5kX2ZhaWxzX2xpa2UoCisJWyAncGdfZHVtcGFsbCcsICctLWZvcm1h dCcsICdkJyBdLAorCXFyL1xRcGdfZHVtcGFsbDogZXJyb3I6IG9wdGlvbiAtRlwvLS1mb3Jt YXQ9ZHxjfHQgcmVxdWlyZXMgb3B0aW9uIC1mXC8tLWZpbGVcRS8sCisJJ3BnX2R1bXBhbGw6 IG5vbi1wbGFpbiBmb3JtYXQgcmVxdWlyZXMgLS1maWxlIG9wdGlvbicpOworCitjb21tYW5k X2ZhaWxzX2xpa2UoCisJWyAncGdfcmVzdG9yZScsICctLWV4Y2x1ZGUtZGF0YWJhc2U9Zm9v JywgJy0tZ2xvYmFscy1vbmx5JywgJy1kJywgJ3h4eCcgXSwKKwlxci9cUXBnX3Jlc3RvcmU6 IGVycm9yOiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0 aGVyIHdpdGggLWdcLy0tZ2xvYmFscy1vbmx5XEUvLAorCSdwZ19yZXN0b3JlOiBvcHRpb24g LS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWcvLS1n bG9iYWxzLW9ubHknCispOworCitjb21tYW5kX2ZhaWxzX2xpa2UoCisJWyAncGdfcmVzdG9y ZScsICctLWRhdGEtb25seScsICctLWdsb2JhbHMtb25seScsICctZCcsICd4eHgnIF0sCisJ cXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9ucyAtYVwvLS1kYXRhLW9ubHkgYW5kIC1n XC8tLWdsb2JhbHMtb25seSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlclxFLywKKwkncGdfcmVz dG9yZTogZXJyb3I6IG9wdGlvbnMgLWEvLS1kYXRhLW9ubHkgYW5kIC1nLy0tZ2xvYmFscy1v bmx5IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyJworKTsKKworY29tbWFuZF9mYWlsc19saWtl KAorCVsgJ3BnX3Jlc3RvcmUnLCAnLS1zY2hlbWEtb25seScsICctLWdsb2JhbHMtb25seScs ICctZCcsICd4eHgnIF0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9ucyAtc1wv LS1zY2hlbWEtb25seSBhbmQgLWdcLy0tZ2xvYmFscy1vbmx5IGNhbm5vdCBiZSB1c2VkIHRv Z2V0aGVyXEUvLAorCSdwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9ucyAtcy8tLXNjaGVtYS1v bmx5IGFuZCAtZy8tLWdsb2JhbHMtb25seSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlcicKKyk7 CisKK2NvbW1hbmRfZmFpbHNfbGlrZSgKKwlbICdwZ19yZXN0b3JlJywgJy0tc3RhdGlzdGlj cy1vbmx5JywgJy0tZ2xvYmFscy1vbmx5JywgJy1kJywgJ3h4eCcgXSwKKwlxci9cUXBnX3Jl c3RvcmU6IGVycm9yOiBvcHRpb25zIC0tc3RhdGlzdGljcy1vbmx5IGFuZCAtZ1wvLS1nbG9i YWxzLW9ubHkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXJcRS8sCisJJ3BnX3Jlc3RvcmU6IGVy cm9yOiBvcHRpb25zIC0tc3RhdGlzdGljcy1vbmx5IGFuZCAtZy8tLWdsb2JhbHMtb25seSBj YW5ub3QgYmUgdXNlZCB0b2dldGhlcicKKyk7CisKK2NvbW1hbmRfZmFpbHNfbGlrZSgKKwlb ICdwZ19yZXN0b3JlJywgJy0tZXhjbHVkZS1kYXRhYmFzZT1mb28nLCAnLWQnLCAneHh4Jywg J2R1bXBkaXInIF0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9uIC0tZXhjbHVk ZS1kYXRhYmFzZSBjYW4gYmUgdXNlZCBvbmx5IHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUg Y3JlYXRlZCBieSBwZ19kdW1wYWxsXEUvLAorCSdXaGVuIG9wdGlvbiAtLWV4Y2x1ZGUtZGF0 YWJhc2UgaXMgdXNlZCBpbiBwZ19yZXN0b3JlIHdpdGggZHVtcCBvZiBwZ19kdW1wJworKTsK KworY29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3BnX3Jlc3RvcmUnLCAnLS1nbG9iYWxzLW9u bHknLCAnLWQnLCAneHh4JywgJ2R1bXBkaXInIF0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJv cjogb3B0aW9uIC1nXC8tLWdsb2JhbHMtb25seSBjYW4gYmUgdXNlZCBvbmx5IHdoZW4gcmVz dG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsXEUvLAorCSdXaGVuIG9w dGlvbiAtLWdsb2JhbHMtb25seSBpcyB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCB0aGUgZHVt cCBvZiBwZ19kdW1wJworKTsKIGRvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ19kdW1wL3QvMDA3X3BnX2R1bXBhbGwucGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDdf cGdfZHVtcGFsbC5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u MzA5ZjQyYmVhYmIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDdf cGdfZHVtcGFsbC5wbApAQCAtMCwwICsxLDQ4MSBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjEt MjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwordXNlIHN0cmlj dDsKK3VzZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKKwordXNlIFBvc3RncmVTUUw6OlRl c3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6 TW9yZTsKKworbXkgJHRlbXBkaXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGVtcGRp cjsKK215ICRydW5fZGIgPSAncG9zdGdyZXMnOworbXkgJHNlcCA9ICR3aW5kb3dzX29zID8g IlxcIiA6ICIvIjsKKworIyBUYWJsZXNwYWNlIGxvY2F0aW9ucyB1c2VkIGJ5ICJyZXN0b3Jl X3RhYmxlc3BhY2UiIHRlc3QgY2FzZS4KK215ICR0YWJsZXNwYWNlMSA9ICIke3RlbXBkaXJ9 JHtzZXB9dGJsMSI7CitteSAkdGFibGVzcGFjZTIgPSAiJHt0ZW1wZGlyfSR7c2VwfXRibDIi OworbWtkaXIoJHRhYmxlc3BhY2UxKSB8fCBkaWUgIm1rZGlyICR0YWJsZXNwYWNlMSAkISI7 Citta2RpcigkdGFibGVzcGFjZTIpIHx8IGRpZSAibWtkaXIgJHRhYmxlc3BhY2UyICQhIjsK KworIyBlc2NhcGUgdGFibGVzcGFjZSBsb2NhdGlvbnMgb24gV2luZG93cy4KK215ICR0YWJs ZXNwYWNlMl9vcmlnID0gJHRhYmxlc3BhY2UyOworJHRhYmxlc3BhY2UxID0gJHdpbmRvd3Nf b3MgPyAoJHRhYmxlc3BhY2UxID1+IHMvXFwvXFxcXC9ncikgOiAkdGFibGVzcGFjZTE7Cisk dGFibGVzcGFjZTIgPSAkd2luZG93c19vcyA/ICgkdGFibGVzcGFjZTIgPX4gcy9cXC9cXFxc L2dyKSA6ICR0YWJsZXNwYWNlMjsKKworIyBXaGVyZSBwZ19kdW1wYWxsIHdpbGwgYmUgZXhl Y3V0ZWQuCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbm9k ZScpOworJG5vZGUtPmluaXQ7Ciskbm9kZS0+c3RhcnQ7CisKKworIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERl ZmluaXRpb24gb2YgdGhlIHBnX2R1bXBhbGwgdGVzdCBjYXNlcyB0byBydW4uCisjCisjIEVh Y2ggb2YgdGhlc2UgdGVzdCBjYXNlcyBhcmUgbmFtZWQgYW5kIHRob3NlIG5hbWVzIGFyZSB1 c2VkIGZvciBmYWlsCisjIHJlcG9ydGluZyBhbmQgYWxzbyB0byBzYXZlIHRoZSBkdW1wIGFu ZCByZXN0b3JlIGluZm9ybWF0aW9uIG5lZWRlZCBmb3IgdGhlCisjIHRlc3QgdG8gYXNzZXJ0 LgorIworIyBUaGUgInNldHVwX3NxbCIgaXMgYSBwc3FsIHZhbGlkIHNjcmlwdCB0aGF0IGNv bnRhaW5zIFNRTCBjb21tYW5kcyB0byBleGVjdXRlCisjIGJlZm9yZSBvZiBhY3R1YWxseSBl eGVjdXRlIHRoZSB0ZXN0cy4gVGhlIHNldHVwcyBhcmUgYWxsIGV4ZWN1dGVkIGJlZm9yZSBv ZgorIyBhbnkgdGVzdCBleGVjdXRpb24uCisjCisjIFRoZSAiZHVtcF9jbWQiIGFuZCAicmVz dG9yZV9jbWQiIGFyZSB0aGUgY29tbWFuZHMgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkLiBUaGUK KyMgInJlc3RvcmVfY21kIiBtdXN0IGhhdmUgdGhlIC0tZmlsZSBmbGFnIHRvIHNhdmUgdGhl IHJlc3RvcmUgb3V0cHV0IHNvIHRoYXQgd2UKKyMgY2FuIGFzc2VydCBvbiBpdC4KKyMKKyMg VGhlICJsaWtlIiBhbmQgInVubGlrZSIgaXMgYSByZWdleHAgdGhhdCBpcyB1c2VkIHRvIG1h dGNoIHRoZSBwZ19yZXN0b3JlCisjIG91dHB1dC4gSXQgbXVzdCBoYXZlIGF0IGxlYXN0IG9u ZSBvZiB0aGVuIGZpbGxlZCBwZXIgdGVzdCBjYXNlcyBidXQgaXQgYWxzbworIyBjYW4gaGF2 ZSBib3RoLiBTZWUgImV4Y2x1ZGluZ19kYXRhYmFzZXMiIHRlc3QgY2FzZSBmb3IgZXhhbXBs ZS4KK215ICVwZ2R1bXBhbGxfcnVucyA9ICgKKwlyZXN0b3JlX3JvbGVzID0+IHsKKwkJc2V0 dXBfc3FsID0+ICcKKwkJQ1JFQVRFIFJPTEUgZHVtcGFsbCBXSVRIIEVOQ1JZUFRFRCBQQVNT V09SRCBcJ2FkbWluXCcgU1VQRVJVU0VSOworCQlDUkVBVEUgUk9MRSBkdW1wYWxsMiBXSVRI IFJFUExJQ0FUSU9OIENPTk5FQ1RJT04gTElNSVQgMTA7JywKKwkJZHVtcF9jbWQgPT4gWwor CQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSct LWZpbGUnID0+ICIkdGVtcGRpci9yZXN0b3JlX3JvbGVzIiwKKwkJXSwKKwkJcmVzdG9yZV9j bWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGly ZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9yZXN0b3JlX3JvbGVzLnNxbCIs CisJCQkiJHRlbXBkaXIvcmVzdG9yZV9yb2xlcyIsCisJCV0sCisJCWxpa2UgPT4gcXIvCisJ CQlccypcUUNSRUFURSBST0xFIGR1bXBhbGwyO1xFCisJCQlccypcUUFMVEVSIFJPTEUgZHVt cGFsbDIgV0lUSCBOT1NVUEVSVVNFUiBJTkhFUklUIE5PQ1JFQVRFUk9MRSBOT0NSRUFURURC IE5PTE9HSU4gUkVQTElDQVRJT04gTk9CWVBBU1NSTFMgQ09OTkVDVElPTiBMSU1JVCAxMDtc RQorCQkveG0KKwl9LAorCisJcmVzdG9yZV90YWJsZXNwYWNlID0+IHsKKwkJc2V0dXBfc3Fs ID0+ICIKKwkJQ1JFQVRFIFJPTEUgdGFwOworCQlDUkVBVEUgVEFCTEVTUEFDRSB0YmwxIE9X TkVSIHRhcCBMT0NBVElPTiAnJHRhYmxlc3BhY2UxJzsKKwkJQ1JFQVRFIFRBQkxFU1BBQ0Ug dGJsMiBPV05FUiB0YXAgTE9DQVRJT04gJyR0YWJsZXNwYWNlMicgV0lUSCAoc2VxX3BhZ2Vf Y29zdD0xLjApOyIsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJCSct LWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvcmVz dG9yZV90YWJsZXNwYWNlIiwKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jl c3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZp bGUnID0+ICIkdGVtcGRpci9yZXN0b3JlX3RhYmxlc3BhY2Uuc3FsIiwKKwkJCSIkdGVtcGRp ci9yZXN0b3JlX3RhYmxlc3BhY2UiLAorCQldLAorCQkjIE1hdGNoICJFIiBhcyBvcHRpb25h bCBzaW5jZSBpdCBpcyBhZGRlZCBvbiBMT0NBVElPTiB3aGVuIHJ1bm5pbmcgb24KKwkJIyBX aW5kb3dzLgorCQlsaWtlID0+IHFyL14KKwkJCVxuXFFDUkVBVEUgVEFCTEVTUEFDRSB0Ymwy IE9XTkVSIHRhcCBMT0NBVElPTiBcRSg/OkUpP1xRJyR0YWJsZXNwYWNlMl9vcmlnJztcRQor CQkJXG5cUUFMVEVSIFRBQkxFU1BBQ0UgdGJsMiBTRVQgKHNlcV9wYWdlX2Nvc3Q9MS4wKTtc RQorCQkveG0sCisJfSwKKworCXJlc3RvcmVfZ3JhbnRzID0+IHsKKwkJc2V0dXBfc3FsID0+ ICIKKwkJQ1JFQVRFIERBVEFCQVNFIHRhcGdyYW50c2RiOworCQlDUkVBVEUgU0NIRU1BIHBy aXZhdGU7CisJCUNSRUFURSBTRVFVRU5DRSBzZXJpYWwgU1RBUlQgMTAxOworCQlDUkVBVEUg RlVOQ1RJT04gZm4oKSBSRVRVUk5TIHZvaWQgQVMgXCRcJAorCQlCRUdJTgorCQlFTkQ7CisJ CVwkXCQgTEFOR1VBR0UgcGxwZ3NxbDsKKwkJQ1JFQVRFIFJPTEUgc3VwZXI7CisJCUNSRUFU RSBST0xFIGdyYW50MTsKKwkJQ1JFQVRFIFJPTEUgZ3JhbnQyOworCQlDUkVBVEUgUk9MRSBn cmFudDM7CisJCUNSRUFURSBST0xFIGdyYW50NDsKKwkJQ1JFQVRFIFJPTEUgZ3JhbnQ1Owor CQlDUkVBVEUgUk9MRSBncmFudDY7CisJCUNSRUFURSBST0xFIGdyYW50NzsKKwkJQ1JFQVRF IFJPTEUgZ3JhbnQ4OworCisJCUNSRUFURSBUQUJMRSB0IChpZCBpbnQpOworCQlJTlNFUlQg SU5UTyB0IFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisKKwkJR1JBTlQgU0VMRUNUIE9O IFRBQkxFIHQgVE8gZ3JhbnQxOworCQlHUkFOVCBJTlNFUlQgT04gVEFCTEUgdCBUTyBncmFu dDI7CisJCUdSQU5UIEFMTCBQUklWSUxFR0VTIE9OIFRBQkxFIHQgdG8gZ3JhbnQzOworCQlH UkFOVCBDT05ORUNULCBDUkVBVEUgT04gREFUQUJBU0UgdGFwZ3JhbnRzZGIgVE8gZ3JhbnQ0 OworCQlHUkFOVCBVU0FHRSwgQ1JFQVRFIE9OIFNDSEVNQSBwcml2YXRlIFRPIGdyYW50NTsK KwkJR1JBTlQgVVNBR0UsIFNFTEVDVCwgVVBEQVRFIE9OIFNFUVVFTkNFIHNlcmlhbCBUTyBn cmFudDY7CisJCUdSQU5UIHN1cGVyIFRPIGdyYW50NzsKKwkJR1JBTlQgRVhFQ1VURSBPTiBG VU5DVElPTiBmbigpIFRPIGdyYW50ODsKKwkJIiwKKwkJZHVtcF9jbWQgPT4gWworCQkJJ3Bn X2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUn ID0+ICIkdGVtcGRpci9yZXN0b3JlX2dyYW50cyIsCisJCV0sCisJCXJlc3RvcmVfY21kID0+ IFsKKwkJCSdwZ19yZXN0b3JlJywgJy1DJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9y eScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvcmVzdG9yZV9ncmFudHMuc3FsIiwKKwkJ CSIkdGVtcGRpci9yZXN0b3JlX2dyYW50cyIsCisJCV0sCisJCWxpa2UgPT4gcXIvXgorCQkJ XG5cUUdSQU5UIEFMTCBPTiBTQ0hFTUEgcHJpdmF0ZSBUTyBncmFudDU7XEUKKwkJCSguKlxu KSoKKwkJCVxuXFFHUkFOVCBBTEwgT04gRlVOQ1RJT04gcHVibGljLmZuKCkgVE8gZ3JhbnQ4 O1xFCisJCQkoLipcbikqCisJCQlcblxRR1JBTlQgQUxMIE9OIFNFUVVFTkNFIHB1YmxpYy5z ZXJpYWwgVE8gZ3JhbnQ2O1xFCisJCQkoLipcbikqCisJCQlcblxRR1JBTlQgU0VMRUNUIE9O IFRBQkxFIHB1YmxpYy50IFRPIGdyYW50MTtcRQorCQkJXG5cUUdSQU5UIElOU0VSVCBPTiBU QUJMRSBwdWJsaWMudCBUTyBncmFudDI7XEUKKwkJCVxuXFFHUkFOVCBBTEwgT04gVEFCTEUg cHVibGljLnQgVE8gZ3JhbnQzO1xFCisJCQkoLipcbikqCisJCQlcblxRR1JBTlQgQ1JFQVRF LENPTk5FQ1QgT04gREFUQUJBU0UgdGFwZ3JhbnRzZGIgVE8gZ3JhbnQ0O1xFCisJCS94bSwK Kwl9LAorCisJZXhjbHVkaW5nX2RhdGFiYXNlcyA9PiB7CisJCXNldHVwX3NxbCA9PiAnQ1JF QVRFIERBVEFCQVNFIGRiMTsKKwkJXGMgZGIxCisJCUNSRUFURSBUQUJMRSB0MSAoaWQgaW50 KTsKKwkJSU5TRVJUIElOVE8gdDEgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKwkJQ1JF QVRFIFRBQkxFIHQyIChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0MiBWQUxVRVMgKDEpLCAo MiksICgzKSwgKDQpOworCisJCUNSRUFURSBEQVRBQkFTRSBkYjI7CisJCVxjIGRiMgorCQlD UkVBVEUgVEFCTEUgdDMgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQzIFZBTFVFUyAoMSks ICgyKSwgKDMpLCAoNCk7CisJCUNSRUFURSBUQUJMRSB0NCAoaWQgaW50KTsKKwkJSU5TRVJU IElOVE8gdDQgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKworCQlDUkVBVEUgREFUQUJB U0UgZGJleDM7CisJCVxjIGRiZXgzCisJCUNSRUFURSBUQUJMRSB0NSAoaWQgaW50KTsKKwkJ SU5TRVJUIElOVE8gdDUgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKwkJQ1JFQVRFIFRB QkxFIHQ2IChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0NiBWQUxVRVMgKDEpLCAoMiksICgz KSwgKDQpOworCisJCUNSRUFURSBEQVRBQkFTRSBkYmV4NDsKKwkJXGMgZGJleDQKKwkJQ1JF QVRFIFRBQkxFIHQ3IChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0NyBWQUxVRVMgKDEpLCAo MiksICgzKSwgKDQpOworCQlDUkVBVEUgVEFCTEUgdDggKGlkIGludCk7CisJCUlOU0VSVCBJ TlRPIHQ4IFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisKKwkJQ1JFQVRFIERBVEFCQVNF IGRiNTsKKwkJXGMgZGI1CisJCUNSRUFURSBUQUJMRSB0OSAoaWQgaW50KTsKKwkJSU5TRVJU IElOVE8gdDkgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKwkJQ1JFQVRFIFRBQkxFIHQx MCAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDEwIFZBTFVFUyAoMSksICgyKSwgKDMpLCAo NCk7CisJCScsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJCSctLWZv cm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXhjbHVk aW5nX2RhdGFiYXNlcyIsCisJCQknLS1leGNsdWRlLWRhdGFiYXNlJyA9PiAnZGJleConLAor CQldLAorCQlyZXN0b3JlX2NtZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICctQycsCisJCQkn LS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2V4 Y2x1ZGluZ19kYXRhYmFzZXMuc3FsIiwKKwkJCSctLWV4Y2x1ZGUtZGF0YWJhc2UnID0+ICdk YjUnLAorCQkJIiR0ZW1wZGlyL2V4Y2x1ZGluZ19kYXRhYmFzZXMiLAorCQldLAorCQlsaWtl ID0+IHFyL14KKwkJCVxuXFFDUkVBVEUgREFUQUJBU0UgZGIxXEUKKwkJCSguKlxuKSoKKwkJ CVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQxIChcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNS RUFURSBUQUJMRSBwdWJsaWMudDIgKFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIERB VEFCQVNFIGRiMlxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50 MyAoXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQ0ICgveG0s CisJCXVubGlrZSA9PiBxci9eCisJCQlcblxRQ1JFQVRFIERBVEFCQVNFIGRiM1xFCisJCQko LipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50NSAoXEUKKwkJCSguKlxuKSoK KwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQ2IChcRQorCQkJKC4qXG4pKgorCQkJXG5c UUNSRUFURSBEQVRBQkFTRSBkYjRcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJM RSBwdWJsaWMudDcgKFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1Ymxp Yy50OCAoXEUKKwkJCVxuXFFDUkVBVEUgREFUQUJBU0UgZGI1XEUKKwkJCSguKlxuKSoKKwkJ CVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQ5IChcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNS RUFURSBUQUJMRSBwdWJsaWMudDEwIChcRQorCQkveG0sCisJfSwKKworCWZvcm1hdF9kaXJl Y3RvcnkgPT4geworCQlzZXR1cF9zcWwgPT4gIkNSRUFURSBUQUJMRSBmb3JtYXRfZGlyZWN0 b3J5KGEgaW50LCBiIGJvb2xlYW4sIGMgdGV4dCk7CisJCUlOU0VSVCBJTlRPIGZvcm1hdF9k aXJlY3RvcnkgVkFMVUVTICgxLCB0cnVlLCAnbmFtZTEnKSwgKDIsIGZhbHNlLCAnbmFtZTIn KTsiLAorCQlkdW1wX2NtZCA9PiBbCisJCQkncGdfZHVtcGFsbCcsCisJCQknLS1mb3JtYXQn ID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Zvcm1hdF9kaXJl Y3RvcnkiLAorCQldLAorCQlyZXN0b3JlX2NtZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICct QycsCisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0 ZW1wZGlyL2Zvcm1hdF9kaXJlY3Rvcnkuc3FsIiwKKwkJCSIkdGVtcGRpci9mb3JtYXRfZGly ZWN0b3J5IiwKKwkJXSwKKwkJbGlrZSA9PiBxci9eXG5cUUNPUFkgcHVibGljLmZvcm1hdF9k aXJlY3RvcnkgKGEsIGIsIGMpIEZST00gc3RkaW47L3htCisJfSwKKworCWZvcm1hdF90YXIg PT4geworCQlzZXR1cF9zcWwgPT4gIkNSRUFURSBUQUJMRSBmb3JtYXRfdGFyKGEgaW50LCBi IGJvb2xlYW4sIGMgdGV4dCk7CisJCUlOU0VSVCBJTlRPIGZvcm1hdF90YXIgVkFMVUVTICgx LCBmYWxzZSwgJ25hbWUzJyksICgyLCB0cnVlLCAnbmFtZTQnKTsiLAorCQlkdW1wX2NtZCA9 PiBbCisJCQkncGdfZHVtcGFsbCcsCisJCQknLS1mb3JtYXQnID0+ICd0YXInLAorCQkJJy0t ZmlsZScgPT4gIiR0ZW1wZGlyL2Zvcm1hdF90YXIiLAorCQldLAorCQlyZXN0b3JlX2NtZCA9 PiBbCisJCQkncGdfcmVzdG9yZScsICctQycsCisJCQknLS1mb3JtYXQnID0+ICd0YXInLAor CQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Zvcm1hdF90YXIuc3FsIiwKKwkJCSIkdGVtcGRp ci9mb3JtYXRfdGFyIiwKKwkJXSwKKwkJbGlrZSA9PiBxci9eXG5cUUNPUFkgcHVibGljLmZv cm1hdF90YXIgKGEsIGIsIGMpIEZST00gc3RkaW47L3htCisJfSwKKworCWZvcm1hdF9jdXN0 b20gPT4geworCQlzZXR1cF9zcWwgPT4gIkNSRUFURSBUQUJMRSBmb3JtYXRfY3VzdG9tKGEg aW50LCBiIGJvb2xlYW4sIGMgdGV4dCk7CisJCUlOU0VSVCBJTlRPIGZvcm1hdF9jdXN0b20g VkFMVUVTICgxLCBmYWxzZSwgJ25hbWU1JyksICgyLCB0cnVlLCAnbmFtZTYnKTsiLAorCQlk dW1wX2NtZCA9PiBbCisJCQkncGdfZHVtcGFsbCcsCisJCQknLS1mb3JtYXQnID0+ICdjdXN0 b20nLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLAorCQldLAor CQlyZXN0b3JlX2NtZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICctQycsCisJCQknLS1mb3Jt YXQnID0+ICdjdXN0b20nLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0 b20uc3FsIiwKKwkJCSIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwKKwkJXSwKKwkJbGlrZSA9 PiBxci9eIFxuXFFDT1BZIHB1YmxpYy5mb3JtYXRfY3VzdG9tIChhLCBiLCBjKSBGUk9NIHN0 ZGluOy94bQorCX0sCisKKwlkdW1wX2dsb2JhbHNfb25seSA9PiB7CisJCXNldHVwX3NxbCA9 PiAiQ1JFQVRFIFRBQkxFIGZvcm1hdF9kaXIoYSBpbnQsIGIgYm9vbGVhbiwgYyB0ZXh0KTsK KwkJSU5TRVJUIElOVE8gZm9ybWF0X2RpciBWQUxVRVMgKDEsIGZhbHNlLCAnbmFtZTUnKSwg KDIsIHRydWUsICduYW1lNicpOyIsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxs JywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1nbG9iYWxzLW9ubHkn LAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2R1bXBfZ2xvYmFsc19vbmx5IiwKKwkJXSwK KwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLCAnLS1nbG9iYWxz LW9ubHknLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ ICIkdGVtcGRpci9kdW1wX2dsb2JhbHNfb25seS5zcWwiLAorCQkJIiR0ZW1wZGlyL2R1bXBf Z2xvYmFsc19vbmx5IiwKKwkJXSwKKwkJbGlrZSA9PiBxci8KKyAgICAgICAgICAgIF5ccypc UUNSRUFURSBST0xFIGR1bXBhbGw7XEVccypcbgorCQkJL3htCisJfSwpOworCisjIEZpcnN0 IGV4ZWN1dGUgdGhlIHNldHVwX3NxbAorZm9yZWFjaCBteSAkcnVuIChzb3J0IGtleXMgJXBn ZHVtcGFsbF9ydW5zKQoreworCWlmICgkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPntzZXR1cF9z cWx9KQorCXsKKwkJJG5vZGUtPnNhZmVfcHNxbCgkcnVuX2RiLCAkcGdkdW1wYWxsX3J1bnN7 JHJ1bn0tPntzZXR1cF9zcWx9KTsKKwl9Cit9CisKKyMgRXhlY3V0ZSB0aGUgdGVzdHMKK2Zv cmVhY2ggbXkgJHJ1biAoc29ydCBrZXlzICVwZ2R1bXBhbGxfcnVucykKK3sKKwkjIENyZWF0 ZSBhIG5ldyB0YXJnZXQgY2x1c3RlciB0byBwZ19yZXN0b3JlIGVhY2ggdGVzdCBjYXNlIHJ1 biBzbyB0aGF0IHdlCisJIyBkb24ndCBuZWVkIHRvIHRha2UgY2FyZSBvZiB0aGUgY2xlYW51 cCBmcm9tIHRoZSB0YXJnZXQgY2x1c3RlciBhZnRlciBlYWNoCisJIyBydW4uCisJbXkgJHRh cmdldF9ub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCJ0YXJnZXRfJHJ1 biIpOworCSR0YXJnZXRfbm9kZS0+aW5pdDsKKwkkdGFyZ2V0X25vZGUtPnN0YXJ0OworCisJ IyBEdW1wYWxsIGZyb20gbm9kZSBjbHVzdGVyLgorCSRub2RlLT5jb21tYW5kX29rKFxAeyAk cGdkdW1wYWxsX3J1bnN7JHJ1bn0tPntkdW1wX2NtZH0gfSwKKwkJIiRydW46IHBnX2R1bXBh bGwgcnVucyIpOworCisJIyBSZXN0b3JlIHRoZSBkdW1wIG9uICJ0YXJnZXRfbm9kZSIgY2x1 c3Rlci4KKwlteSBAcmVzdG9yZV9jbWQgPSAoCisJCUB7ICRwZ2R1bXBhbGxfcnVuc3skcnVu fS0+e3Jlc3RvcmVfY21kfSB9LAorCQknLS1ob3N0JywgJHRhcmdldF9ub2RlLT5ob3N0LCAn LS1wb3J0JywgJHRhcmdldF9ub2RlLT5wb3J0KTsKKworCW15ICgkc3Rkb3V0LCAkc3RkZXJy KSA9IHJ1bl9jb21tYW5kKFxAcmVzdG9yZV9jbWQpOworCisJIyBwZ19yZXN0b3JlIC0tZmls ZSBvdXRwdXQgZmlsZS4KKwlteSAkb3V0cHV0X2ZpbGUgPSBzbHVycF9maWxlKCIkdGVtcGRp ci8ke3J1bn0uc3FsIik7CisKKwlpZiAoICAgISgkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPnts aWtlfSkKKwkJJiYgISgkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPnt1bmxpa2V9KSkKKwl7CisJ CWRpZSAibWlzc2luZyBcImxpa2VcIiBvciBcInVubGlrZVwiIGluIHRlc3QgXCIkcnVuXCIi OworCX0KKworCWlmICgkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPntsaWtlfSkKKwl7CisJCWxp a2UoJG91dHB1dF9maWxlLCAkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPntsaWtlfSwgInNob3Vs ZCBkdW1wICRydW4iKTsKKwl9CisKKwlpZiAoJHBnZHVtcGFsbF9ydW5zeyRydW59LT57dW5s aWtlfSkKKwl7CisJCXVubGlrZSgKKwkJCSRvdXRwdXRfZmlsZSwKKwkJCSRwZ2R1bXBhbGxf cnVuc3skcnVufS0+e3VubGlrZX0sCisJCQkic2hvdWxkIG5vdCBkdW1wICRydW4iKTsKKwl9 Cit9CisKKyMgU29tZSBuZWdhdGl2ZSB0ZXN0IGNhc2Ugd2l0aCBkdW1wIG9mIHBnX2R1bXBh bGwgYW5kIHJlc3RvcmUgdXNpbmcgcGdfcmVzdG9yZQorIyB0ZXN0IGNhc2UgMTogcmVwb3J0 IGFuIGVycm9yIHdoZW4gLUMgaXMgbm90IHVzZWQgaW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAg b2YgcGdfZHVtcGFsbAorJG5vZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlbCisJCSdwZ19y ZXN0b3JlJywKKwkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLAorCQknLS1mb3JtYXQnID0+ ICdjdXN0b20nLAorCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXJyb3JfdGVzdC5zcWwiLAor CV0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9uIC1DXC8tLWNyZWF0ZSBtdXN0 IGJlIHNwZWNpZmllZCB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdf ZHVtcGFsbFxFLywKKwknV2hlbiAtQyBpcyBub3QgdXNlZCBpbiBwZ19yZXN0b3JlIHdpdGgg ZHVtcCBvZiBwZ19kdW1wYWxsJyk7CisKKyMgdGVzdCBjYXNlIDI6IHJlcG9ydCBhbiBlcnJv ciB3aGVuIFxsLy0tbGlzdCBvcHRpb24gaXMgdXNlZCB3aXRoIGR1bXAgb2YgcGdfZHVtcGFs bAorJG5vZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlbCisJCSdwZ19yZXN0b3JlJywKKwkJ IiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLCAnLUMnLAorCQknLS1mb3JtYXQnID0+ICdjdXN0 b20nLAorCQknLS1saXN0JywKKwkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Vycm9yX3Rlc3Qu c3FsIiwKKwldLAorCXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtbFwvLS1saXN0 IGNhbm5vdCBiZSB1c2VkIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBw Z19kdW1wYWxsXEUvLAorCSdXaGVuIC0tbGlzdCBpcyB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0 aCBkdW1wIG9mIHBnX2R1bXBhbGwnKTsKKworIyB0ZXN0IGNhc2UgMzogcmVwb3J0IGFuIGVy cm9yIHdoZW4gLUwvLS11c2UtbGlzdCBvcHRpb24gaXMgdXNlZCB3aXRoIGR1bXAgb2YgcGdf ZHVtcGFsbAorJG5vZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlbCisJCSdwZ19yZXN0b3Jl JywKKwkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLCAnLUMnLAorCQknLS1mb3JtYXQnID0+ ICdjdXN0b20nLAorCQknLS11c2UtbGlzdCcgPT4gJ3VzZScsCisJCSctLWZpbGUnID0+ICIk dGVtcGRpci9lcnJvcl90ZXN0LnNxbCIsCisJXSwKKwlxci9cUXBnX3Jlc3RvcmU6IGVycm9y OiBvcHRpb24gLUxcLy0tdXNlLWxpc3QgY2Fubm90IGJlIHVzZWQgd2hlbiByZXN0b3Jpbmcg YW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGxcRS8sCisJJ1doZW4gLUwvLS11c2Ut bGlzdCBpcyB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwnKTsK KworIyB0ZXN0IGNhc2UgNDogcmVwb3J0IGFuIGVycm9yIHdoZW4gLS1zdHJpY3QtbmFtZXMg b3B0aW9uIGlzIHVzZWQgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwKKyRub2RlLT5jb21tYW5k X2ZhaWxzX2xpa2UoCisJWworCQkncGdfcmVzdG9yZScsCisJCSIkdGVtcGRpci9mb3JtYXRf Y3VzdG9tIiwgJy1DJywKKwkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJJy0tc3RyaWN0 LW5hbWVzJywKKwkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Vycm9yX3Rlc3Quc3FsIiwKKwld LAorCXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtLXN0cmljdC1uYW1lcyBjYW5u b3QgYmUgdXNlZCB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVt cGFsbFxFLywKKwknV2hlbiAtLXN0cmljdC1uYW1lcyBpcyB1c2VkIGluIHBnX3Jlc3RvcmUg d2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwnKTsKKworIyB0ZXN0IGNhc2UgNTogcmVwb3J0IGFu IGVycm9yIHdoZW4gLS1jbGVhbiBhbmQgLWcvLS1nbG9iYWxzLW9ubHkgYXJlIHVzZWQgaW4g cGdfcmVzdG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbAorJG5vZGUtPmNvbW1hbmRfZmFp bHNfbGlrZSgKKwlbCisJCSdwZ19yZXN0b3JlJywKKwkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0 b20iLCAnLUMnLAorCQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAorCQknLS1jbGVhbicsCisJ CSctLWdsb2JhbHMtb25seScsCisJCSctLWZpbGUnID0+ICIkdGVtcGRpci9lcnJvcl90ZXN0 LnNxbCIsCisJXSwKKwlxci9cUXBnX3Jlc3RvcmU6IGVycm9yOiBvcHRpb25zIC0tY2xlYW4g YW5kIC1nXC8tLWdsb2JhbHMtb25seSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aGVuIHJl c3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbFxFLywKKwknV2hlbiAt LWNsZWFuIGFuZCAtZy8tLWdsb2JhbHMtb25seSBhcmUgdXNlZCBpbiBwZ19yZXN0b3JlIHdp dGggZHVtcCBvZiBwZ19kdW1wYWxsJworKTsKKworIyB0ZXN0IGNhc2UgNjogcmVwb3J0IGFu IGVycm9yIHdoZW4gbm9uLWV4aXN0IGRhdGFiYXNlIGlzIGdpdmVuIHdpdGggLWQgb3B0aW9u Ciskbm9kZS0+Y29tbWFuZF9mYWlsc19saWtlKAorCVsKKwkJJ3BnX3Jlc3RvcmUnLAorCQki JHRlbXBkaXIvZm9ybWF0X2N1c3RvbSIsICctQycsCisJCSctLWZvcm1hdCcgPT4gJ2N1c3Rv bScsCisJCSctZCcgPT4gJ2RicHEnLAorCV0sCisJcXIvXFFGQVRBTDogIGRhdGFiYXNlICJk YnBxIiBkb2VzIG5vdCBleGlzdFxFLywKKwknV2hlbiBub24tZXhpc3RlbnQgZGF0YWJhc2Ug aXMgZ2l2ZW4gd2l0aCAtZCBvcHRpb24gaW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAgb2YgcGdf ZHVtcGFsbCcKKyk7CisKKyMgdGVzdCBjYXNlIDc6IHJlcG9ydCBhbiBlcnJvciB3aGVuIC0t bm8tc2NoZW1hIGlzIHVzZWQgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwKKyRub2RlLT5jb21t YW5kX2ZhaWxzX2xpa2UoCisJWworCQkncGdfcmVzdG9yZScsCisJCSIkdGVtcGRpci9mb3Jt YXRfY3VzdG9tIiwgJy1DJywKKwkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJJy0tbm8t c2NoZW1hJywKKwkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Vycm9yX3Rlc3Quc3FsIiwKKwld LAorCXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtLW5vLXNjaGVtYSBjYW5ub3Qg YmUgdXNlZCB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFs bFxFLywKKwknV2hlbiAtLW5vLXNjaGVtYSBpcyB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBk dW1wIG9mIHBnX2R1bXBhbGwnKTsKKworIyB0ZXN0IGNhc2UgODogcmVwb3J0IGFuIGVycm9y IHdoZW4gLS1kYXRhLW9ubHkgaXMgdXNlZCB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbAorJG5v ZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlbCisJCSdwZ19yZXN0b3JlJywKKwkJIiR0ZW1w ZGlyL2Zvcm1hdF9jdXN0b20iLCAnLUMnLAorCQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAor CQknLS1kYXRhLW9ubHknLAorCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXJyb3JfdGVzdC5z cWwiLAorCV0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9uIC1hXC8tLWRhdGEt b25seSBjYW5ub3QgYmUgdXNlZCB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQg YnkgcGdfZHVtcGFsbFxFLywKKwknV2hlbiAtLWRhdGEtb25seSBpcyB1c2VkIGluIHBnX3Jl c3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwnKTsKKworIyB0ZXN0IGNhc2UgOTogcmVw b3J0IGFuIGVycm9yIHdoZW4gLS1zdGF0aXN0aWNzLW9ubHkgaXMgdXNlZCB3aXRoIGR1bXAg b2YgcGdfZHVtcGFsbAorJG5vZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlbCisJCSdwZ19y ZXN0b3JlJywKKwkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLCAnLUMnLAorCQknLS1mb3Jt YXQnID0+ICdjdXN0b20nLAorCQknLS1zdGF0aXN0aWNzLW9ubHknLAorCQknLS1maWxlJyA9 PiAiJHRlbXBkaXIvZXJyb3JfdGVzdC5zcWwiLAorCV0sCisJcXIvXFFwZ19yZXN0b3JlOiBl cnJvcjogb3B0aW9uIC0tc3RhdGlzdGljcy1vbmx5IGNhbm5vdCBiZSB1c2VkIHdoZW4gcmVz dG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsXEUvLAorCSdXaGVuIC0t c3RhdGlzdGljcy1vbmx5IGlzIHVzZWQgaW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAgb2YgcGdf ZHVtcGFsbCcpOworCisjIHRlc3QgY2FzZSAxMDogcmVwb3J0IGFuIGVycm9yIHdoZW4gLS1z ZWN0aW9uIGV4Y2x1ZGVzIHByZS1kYXRhIHdpdGggZHVtcCBvZiBwZ19kdW1wYWxsCiskbm9k ZS0+Y29tbWFuZF9mYWlsc19saWtlKAorCVsKKwkJJ3BnX3Jlc3RvcmUnLAorCQkiJHRlbXBk aXIvZm9ybWF0X2N1c3RvbSIsICctQycsCisJCSctLWZvcm1hdCcgPT4gJ2N1c3RvbScsCisJ CSctLXNlY3Rpb24nID0+ICdwb3N0LWRhdGEnLAorCQknLS1maWxlJyA9PiAiJHRlbXBkaXIv ZXJyb3JfdGVzdC5zcWwiLAorCV0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9u IC0tc2VjdGlvbiBjYW5ub3QgZXhjbHVkZSAtLXByZS1kYXRhIHdoZW4gcmVzdG9yaW5nIGEg cGdfZHVtcGFsbCBhcmNoaXZlXEUvLAorCSdXaGVuIC0tc2VjdGlvbj1wb3N0LWRhdGEgaXMg dXNlZCBpbiBwZ19yZXN0b3JlIHdpdGggZHVtcCBvZiBwZ19kdW1wYWxsJyk7CisKKyRub2Rl LT5zdG9wKCdmYXN0Jyk7CisKK2RvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdAppbmRleCAyNDE5NDU3MzRlYy4uMWE4OWVmOTRiZWMgMTAwNjQ0Ci0tLSBhL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CkBAIC02MDAsNiArNjAwLDcgQEAgQ3VzdG9tU2Nhbk1ldGhvZHMK IEN1c3RvbVNjYW5TdGF0ZQogQ3ljbGVDdHIKIERCU3RhdGUKK0RiT2lkTmFtZQogRENIQ2Fj aGVFbnRyeQogREVBRExPQ0tfSU5GTwogREVDb3VudEl0ZW0K --------------T0ZeHtrkATfXhH42VTxuYRJ2--