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.94.2) (envelope-from ) id 1ugqdX-007vIT-Ji for pgsql-hackers@arkaria.postgresql.org; Tue, 29 Jul 2025 20:09:25 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1ugqdW-004JYH-J1 for pgsql-hackers@arkaria.postgresql.org; Tue, 29 Jul 2025 20:09:22 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1ugqdV-004JY1-V1 for pgsql-hackers@lists.postgresql.org; Tue, 29 Jul 2025 20:09:22 +0000 Received: from mail-qk1-x72c.google.com ([2607:f8b0:4864:20::72c]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1ugqdR-001XmO-1e for pgsql-hackers@lists.postgresql.org; Tue, 29 Jul 2025 20:09:21 +0000 Received: by mail-qk1-x72c.google.com with SMTP id af79cd13be357-7e050bd078cso567138085a.3 for ; Tue, 29 Jul 2025 13:09:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dunslane-net.20230601.gappssmtp.com; s=20230601; t=1753819756; x=1754424556; darn=lists.postgresql.org; h=in-reply-to:autocrypt:content-language:references:cc:to:from :subject:user-agent:mime-version:date:message-id:from:to:cc:subject :date:message-id:reply-to; bh=iVANn/lqff1Tv9Kcu7xDA+hlu2k0RescfETC8kRvIEY=; b=tJBdyPFJFXgshrASzKPgmHZry6Ayxmupihl45qENN2+QxsjHy5L3K97C4SbOmzUJiw FgHR1jC5SBGvKpjrw1opEzORA+ahmCqzWmNSk0aT65TvC5VnYGeW10uIQOzJVkP1IAvo ox5oKYXP+MA5UkQqLZmgWAlVtpD6mBfRkEBtBfuOgVr+TGcnleznXiMRY3V2FtfhkVEg bvBeY45ZO4iVFrL+V45qdLf8VkwbUIOnYhUBIcT4FnQv0sBC3R75X8SCa873QHnNt0zC UxwaGL2bV1xZ0ZE/snzDSbbrMPN+OS6oFMJ7RfoEBqALWkfCS8D/HAEnD8nWwqVByF5O QF3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753819756; x=1754424556; h=in-reply-to:autocrypt:content-language:references:cc:to:from :subject:user-agent:mime-version:date:message-id:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=iVANn/lqff1Tv9Kcu7xDA+hlu2k0RescfETC8kRvIEY=; b=Dl6wqCeFyORfAn4A76YkE3At60hvewdppScK3YAeZBOKxDf0b1a7vz7IPY2LtDqYQz 3AzA6/JpP43FxjVdNgk1HtGAHFu2/YEhqQCNEtlCeKkNLWxO8iexqu4yfFWcboAj6tvU SjVdZmn0TZW24hFNnu1EoWcfBmNSmhFjFd7yvXZHR7++VITPFAfPOBx3VgxUR0o3K22Y Zd4/jeMFROB8+8DwLto8kEhmJyDzi0XvxXc7NWCUW6PM//nAXxUwFu/4loM8gqWdWodi z/qAXayyt87/LxCA5yolYlfMfcYnwx1eFwpm0/zHpcYPWkO4lNahqyxUXYd6R5D9uRlf xmJA== X-Forwarded-Encrypted: i=1; AJvYcCVPC9ClYL1+swPWrxzGlx6oPzG2PQrfxGjs11ChQbJGgVhWwCbPrhfxPShoha16JeVvJO5eAH/8A5xhmoYZ@lists.postgresql.org X-Gm-Message-State: AOJu0YwCJxDp+dJpsNe1gb9esu4dXI6hr3/93sGeTnoRuKZV8b12mYL+ egySP6QFStvKLqBLGqz55SJ3QrfXIh3zKM94sDb4rw99oSjjMsHU/QIh9R5Gi2AgTME= X-Gm-Gg: ASbGncsn17/nn+rbhz9AMkH6dYu81+60nvYAJEIK2szIJAOYZTletY6bC2rfKnhNF68 RtA/ZdZwM/MDDHYdc2TcOEH0XEOBC97hPeo28g1wvUXcfOmxnDVNii0C+V3qBXxHa0y6rQxDQJq mLHhVnxZI+j/9a5gnggDFTonsIxng7FqEASFvakiXIl9X3nWk4smOsWyVZjLQT2rvaCghL+Ixnk K3NalMoHEJWzFsebaSwUp0c+RyxiCyJyp8Gp/WZ7t6DzuKoYmEDToZuKbeCBRUEZpZe5a5L0Xus wtJpKrRK1IimugNTj3ONSx/YdA7FRkbjQdk9i9BApfnBpU8Lr7EI6k8TrIqwh8vIHO8W1q9Cx3H Z2wUj1hq0nPjIL5UZ7KnDdgfAP78PUg== X-Google-Smtp-Source: AGHT+IG14sikcouKVb6mfVokuchcliSsyl488yR62X55tpKM/kGAmpeGIe+2huRccoVj4+ZFvd8Oxw== X-Received: by 2002:a05:620a:1481:b0:7e0:dbd4:6723 with SMTP id af79cd13be357-7e66f35125bmr98669485a.41.1753819756270; Tue, 29 Jul 2025 13:09:16 -0700 (PDT) Received: from ?IPV6:2605:a601:a6b0:500::1cb? ([2605:a601:a6b0:500::1cb]) by smtp.googlemail.com with ESMTPSA id af79cd13be357-7e6432928fasm458953085a.21.2025.07.29.13.09.14 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 29 Jul 2025 13:09:15 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------WqzoA5BkqOMftx1yHF4f9VIN" Message-ID: <2bed001a-462c-42da-9a6b-3c7884502932@dunslane.net> Date: Tue, 29 Jul 2025 16:09:13 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Non-text mode for pg_dumpall From: Andrew Dunstan To: Noah Misch , Tom Lane Cc: Mahendra Singh Thalor , =?UTF-8?Q?=C3=81lvaro_Herrera?= , jian he , Srinath Reddy , pgsql-hackers@lists.postgresql.org References: <20250716001957.c6.nmisch@google.com> <3f22a8bb-29e8-40cc-97a1-309181da2c13@dunslane.net> <20250722005339.ca.nmisch@google.com> <20250725162141.6f.nmisch@google.com> <2225040.1753477169@sss.pgh.pa.us> <20250727235628.e2.nmisch@google.com> <8f2ad50b-ebb7-4adc-997e-25e0ad96ff34@dunslane.net> 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: <8f2ad50b-ebb7-4adc-997e-25e0ad96ff34@dunslane.net> 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. --------------WqzoA5BkqOMftx1yHF4f9VIN Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 2025-07-28 Mo 8:04 AM, Andrew Dunstan wrote: > > On 2025-07-27 Su 7:56 PM, Noah Misch wrote: >> On Fri, Jul 25, 2025 at 04:59:29PM -0400, Tom Lane wrote: >>> Andrew Dunstan writes: >>>> Before we throw the baby out with the bathwater, how about this >>>> suggestion? pg_dumpall would continue to produce globals.dat, but it >>>> wouldn't be processed by pg_restore, which would only restore the >>>> individual databases. Or else we just don't produce globals.dat at >>>> all. >>>> Then we could introduce a structured object that pg_restore could >>>> safely >>>> use for release 19, and I think we'd still have something useful for >>>> release 18. >>> I dunno ... that seems like a pretty weird behavior.  People would >>> have to do a separate text-mode "pg_dumpall -g" and remember to >>> restore that too.  Admittedly, this could be more convenient than >>> "pg_dumpall -g" plus separately pg_dump'ing each database, which is >>> what people have to do today if they want anything smarter than a flat >>> text dumpfile.  But it still seems like a hack --- and it would not be >>> compatible with v19, where presumably "pg_dumpall | pg_restore" >>> *would* restore globals.  I think that the prospect of changing >>> dump/restore scripts and then having to change them again in v19 >>> isn't too appetizing. >> +1 > > > OK, got it. Will revert. > > > here's a reversion patch for master. It applies cleanly to release 18 as well. Thanks to Mahendra Singh Thalor for helping me sanity check it (Any issues are of course my responsibility) I'll work on pulling the entry out of the release notes. cheers andrew -- Andrew Dunstan EDB: https://www.enterprisedb.com --------------WqzoA5BkqOMftx1yHF4f9VIN Content-Type: text/x-patch; charset=UTF-8; name="dumpall-nontext-revert.patch" Content-Disposition: attachment; filename="dumpall-nontext-revert.patch" Content-Transfer-Encoding: base64 Y29tbWl0IDc3ZDljY2JjZTIxCkF1dGhvcjogQW5kcmV3IER1bnN0YW4gPGFuZHJld0BkdW5z bGFuZS5uZXQ+CkRhdGU6ICAgVHVlIEp1bCAyOSAxNTo1NDoxNSAyMDI1IC0wNDAwCgogICAg UmV2ZXJ0IE5vbiB0ZXh0IG1vZGVzIGZvciBwZ19kdW1wYWxsLCBhbmQgcGdfcmVzdG9yZSBz dXBwb3J0CiAgICAKICAgIFJlY2VudCBkaXNjdXNzaW9ucyBvZiB0aGUgbWVjaGFuaXNtcyB1 c2VkIHRvIG1hbmFnZSBnbG9iYWwgZGF0YSBoYXZlCiAgICByYWlzZWQgY29uY2VybnMgYWJv dXQgdGhlaXIgcm9idXN0bmVzcyBhbmQgc2VjdXJpdHkuIFJhdGhlciB0aGFuIHRyeQogICAg dG8gZGVhbCB3aXRoIHRob3NlIGNvbmNlcm5zIGF0IGEgdmVyeSBsYXRlIHN0YWdlIG9mIHRo ZSByZWxlYXNlIGN5Y2xlLAogICAgdGhlIGNvbmNsdXNpb24gaXMgdG8gcmV2ZXJ0IHRoZXNl IGZlYXR1cmVzIGFuZCB3b3JrIG9uIHRoZW0gZm9yIHRoZQogICAgbmV4dCByZWxlYXNlLgog ICAgCiAgICBUaGlzIHJldmVydHMgcGFydHMgb3IgYWxsIG9mIHRoZSBmb2xsb3dpbmcgY29t bWl0czoKICAgIAogICAgMTQ5NWVmZjdiZGIgTm9uIHRleHQgbW9kZXMgZm9yIHBnX2R1bXBh bGwsIGNvcnJlc3BvbmRpbmdseSBjaGFuZ2UgcGdfcmVzdG9yZQogICAgNWRiM2JmNzM5MWQg Q2xlYW4gdXAgZnJvbSBjb21taXQgMTQ5NWVmZjdiZGIKICAgIDI4OWY3NGQwY2IyIEFkZCBt b3JlIFRBUCB0ZXN0cyBmb3IgcGdfZHVtcGFsbAogICAgMmVmNTc5MDgwNjcgRml4IGEgY291 cGxlIG9mIGVycm9yIG1lc3NhZ2VzIGFuZCB0ZXN0cyBmb3IgdGhlbQogICAgYjUyYTRhNWYy ODUgQ2xlYW4gdXAgZXJyb3IgbWVzc2FnZXMgZnJvbSAxNDk1ZWZmN2JkYgogICAgNDE3MDI5 OGI2ZWMgRnVydGhlciBjbGVhbnVwIGZvciBkaXJlY3RvcnkgY3JlYXRpb24gb24gcGdfZHVt cC9wZ19kdW1wYWxsCiAgICAyMmNiNmQyODk1MCBGaXggbWVtb3J5IGxlYWsgaW4gcGdfcmVz dG9yZS5jCiAgICA5MjgzOTRiNjY0YiBJbXByb3ZlIHZhcmlvdXMgbmV3LXRvLXYxOCBhcHBl bmRTdHJpbmdJbmZvIGNhbGxzCiAgICAzOTcyOWVjMDFkMiBGaXggZmF0IGZpbmdlcmluZyBp biAyMmNiNmQyODk1MAogICAgNTgyMmJmMjFkNTAgQWRkIG1pc3Npbmcgc3BhY2UgaW4gcGdf cmVzdG9yZSBkb2N1bWVudGF0aW9uLgogICAgZjA5MDg4YTAxZDMgRnJlZSBtZW1vcnkgcHJv cGVybHkgaW4gcGdfcmVzdG9yZS5jCiAgICA0MGI5YzI3MDE0ZCBwZ19yZXN0b3JlIGNsZWFu dXBzCiAgICA0YWFkMmNiNzcwNyBQb3J0YWJpbGl0eSBmaXg6IGlzZGlnaXQoKSBtdXN0IGJl IHBhc3NlZCBhbiB1bnNpZ25lZCBjaGFyLgogICAgODhlOTQ3MTM2YjQgRml4IHR5cG9zIGFu ZCBncmFtbWFyIGluIHRoZSBjb2RlCiAgICBmNjA0MjBjZmY2NiBkb2M6IEFscGhhYmV0aXpl IGxvbmcgb3B0aW9ucyBmb3IgcGdfZHVtcFthbGxdLgogICAgYmMzNWFkZWU4ZDcgZG9jOiBQ dXQgbmV3IG9wdGlvbnMgaW4gY29uc2lzdGVudCBvcmRlciBvbiBtYW4gcGFnZXMKICAgIGE4 NzY0NjRhYmM3IE1lc3NhZ2Ugc3R5bGUgaW1wcm92ZW1lbnRzCiAgICBkZWM2NjQzNDg3YiBJ bXByb3ZlIHBnX2R1bXAvcGdfZHVtcGFsbCBoZWxwIHN5bm9wc2VzIGFuZCB0ZXJtaW5vbG9n eQogICAgMGViZDI0MjU1NTggUnVuIHBncGVybHRpZHkKICAgIAogICAgRGlzY3Vzc2lvbjog aHR0cHM6Ly9wb3N0Z3IuZXMvbS8yMDI1MDcwODIxMjgxOS4wOS5ubWlzY2hAZ29vZ2xlLmNv bQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sIGIvZG9j L3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwKaW5kZXggOGNhNjhkYTVhNTUuLmY0Y2Jj ODI4OGUzIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbAor KysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbApAQCAtMTYsMTAgKzE2LDcg QEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAKICA8cmVmbmFtZWRpdj4KICAgPHJlZm5h bWU+cGdfZHVtcGFsbDwvcmVmbmFtZT4KLQotICA8cmVmcHVycG9zZT4KLSAgIGV4cG9ydCBh IDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2UgY2x1c3Rl ciBhcyBhbiBTUUwgc2NyaXB0IG9yIHRvIG90aGVyIGZvcm1hdHMKLSAgPC9yZWZwdXJwb3Nl PgorICA8cmVmcHVycG9zZT5leHRyYWN0IGEgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3By b2R1Y3RuYW1lPiBkYXRhYmFzZSBjbHVzdGVyIGludG8gYSBzY3JpcHQgZmlsZTwvcmVmcHVy cG9zZT4KICA8L3JlZm5hbWVkaXY+CiAKICA8cmVmc3lub3BzaXNkaXY+CkBAIC0zNiw3ICsz Myw3IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICA8cGFyYT4KICAgIDxhcHBsaWNh dGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4gaXMgYSB1dGlsaXR5IGZvciB3cml0aW5n IG91dAogICAgKDxxdW90ZT5kdW1waW5nPC9xdW90ZT4pIGFsbCA8cHJvZHVjdG5hbWU+UG9z dGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlcwotICAgb2YgYSBjbHVzdGVyIGludG8g YW4gU1FMIHNjcmlwdCBmaWxlIG9yIGFuIGFyY2hpdmUuICBUaGUgb3V0cHV0IGNvbnRhaW5z CisgICBvZiBhIGNsdXN0ZXIgaW50byBvbmUgc2NyaXB0IGZpbGUuICBUaGUgc2NyaXB0IGZp bGUgY29udGFpbnMKICAgIDxhY3JvbnltPlNRTDwvYWNyb255bT4gY29tbWFuZHMgdGhhdCBj YW4gYmUgdXNlZCBhcyBpbnB1dCB0byA8eHJlZgogICAgbGlua2VuZD0iYXBwLXBzcWwiLz4g dG8gcmVzdG9yZSB0aGUgZGF0YWJhc2VzLiAgSXQgZG9lcyB0aGlzIGJ5CiAgICBjYWxsaW5n IDx4cmVmIGxpbmtlbmQ9ImFwcC1wZ2R1bXAiLz4gZm9yIGVhY2ggZGF0YWJhc2UgaW4gdGhl IGNsdXN0ZXIuCkBAIC01NSwxNiArNTIsMTEgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9u CiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIFBsYWluIHRleHQgU1FMIHNjcmlwdHMgd2ls bCBiZSB3cml0dGVuIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuICBVc2UgdGhlCisgICBUaGUg U1FMIHNjcmlwdCB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gIFVz ZSB0aGUKICAgIDxvcHRpb24+LWY8L29wdGlvbj4vPG9wdGlvbj4tLWZpbGU8L29wdGlvbj4g b3B0aW9uIG9yIHNoZWxsIG9wZXJhdG9ycyB0bwogICAgcmVkaXJlY3QgaXQgaW50byBhIGZp bGUuCiAgIDwvcGFyYT4KIAotICA8cGFyYT4KLSAgIEFyY2hpdmVzIGluIG90aGVyIGZvcm1h dHMgd2lsbCBiZSBwbGFjZWQgaW4gYSBkaXJlY3RvcnkgbmFtZWQgdXNpbmcgdGhlCi0gICA8 b3B0aW9uPi1mPC9vcHRpb24+LzxvcHRpb24+LS1maWxlPC9vcHRpb24+LCB3aGljaCBpcyBy ZXF1aXJlZCBpbiB0aGlzIGNhc2UuCi0gIDwvcGFyYT4KLQogICA8cGFyYT4KICAgPGFwcGxp Y2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPiBuZWVkcyB0byBjb25uZWN0IHNldmVy YWwKICAgdGltZXMgdG8gdGhlIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFt ZT4gc2VydmVyIChvbmNlIHBlcgpAQCAtMTI5LDg1ICsxMjEsMTAgQEAgUG9zdGdyZVNRTCBk b2N1bWVudGF0aW9uCiAgICAgICAgPHBhcmE+CiAgICAgICAgIFNlbmQgb3V0cHV0IHRvIHRo ZSBzcGVjaWZpZWQgZmlsZS4gIElmIHRoaXMgaXMgb21pdHRlZCwgdGhlCiAgICAgICAgIHN0 YW5kYXJkIG91dHB1dCBpcyB1c2VkLgotICAgICAgICBOb3RlOiBUaGlzIG9wdGlvbiBjYW4g b25seSBiZSBvbWl0dGVkIHdoZW4gPG9wdGlvbj4tLWZvcm1hdDwvb3B0aW9uPiBpcyBwbGFp bgogICAgICAgIDwvcGFyYT4KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVu dHJ5PgogCi0gICAgIDx2YXJsaXN0ZW50cnk+Ci0gICAgICA8dGVybT48b3B0aW9uPi1GIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5mb3JtYXQ8L3JlcGxhY2VhYmxlPjwvb3B0 aW9uPjwvdGVybT4KLSAgICAgIDx0ZXJtPjxvcHRpb24+LS1mb3JtYXQ9PHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPmZvcm1hdDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJt PgotICAgICAgPGxpc3RpdGVtPgotICAgICAgIDxwYXJhPgotICAgICAgICBTcGVjaWZ5IHRo ZSBmb3JtYXQgb2YgZHVtcCBmaWxlcy4gIEluIHBsYWluIGZvcm1hdCwgYWxsIHRoZSBkdW1w IGRhdGEgaXMKLSAgICAgICAgc2VudCBpbiBhIHNpbmdsZSB0ZXh0IHN0cmVhbS4gVGhpcyBp cyB0aGUgZGVmYXVsdC4KLQotICAgICAgICBJbiBhbGwgb3RoZXIgbW9kZXMsIDxhcHBsaWNh dGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4gZmlyc3QgY3JlYXRlcyB0d28gZmlsZXM6 Ci0gICAgICAgIDxmaWxlbmFtZT5nbG9iYWwuZGF0PC9maWxlbmFtZT4gYW5kIDxmaWxlbmFt ZT5tYXAuZGF0PC9maWxlbmFtZT4sIGluIHRoZSBkaXJlY3RvcnkKLSAgICAgICAgc3BlY2lm aWVkIGJ5IDxvcHRpb24+LS1maWxlPC9vcHRpb24+LgotICAgICAgICBUaGUgZmlyc3QgZmls ZSBjb250YWlucyBnbG9iYWwgZGF0YSwgc3VjaCBhcyByb2xlcyBhbmQgdGFibGVzcGFjZXMu IFRoZSBzZWNvbmQKLSAgICAgICAgY29udGFpbnMgYSBtYXBwaW5nIGJldHdlZW4gZGF0YWJh c2Ugb2lkcyBhbmQgbmFtZXMuIFRoZXNlIGZpbGVzIGFyZSB1c2VkIGJ5Ci0gICAgICAgIDxh cHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4uIERhdGEgZm9yIGluZGl2aWR1 YWwgZGF0YWJhc2VzIGlzIHBsYWNlZCBpbgotICAgICAgICA8ZmlsZW5hbWU+ZGF0YWJhc2Vz PC9maWxlbmFtZT4gc3ViZGlyZWN0b3J5LCBuYW1lZCB1c2luZyB0aGUgZGF0YWJhc2UncyA8 dHlwZT5vaWQ8L3R5cGU+LgotCi0gICAgICAgPHZhcmlhYmxlbGlzdD4KLSAgICAgICAgPHZh cmxpc3RlbnRyeT4KLSAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmQ8L2xpdGVyYWw+PC90ZXJt PgotICAgICAgICAgPHRlcm0+PGxpdGVyYWw+ZGlyZWN0b3J5PC9saXRlcmFsPjwvdGVybT4K LSAgICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgT3V0 cHV0IGRpcmVjdG9yeS1mb3JtYXQgYXJjaGl2ZXMgZm9yIGVhY2ggZGF0YWJhc2UsCi0gICAg ICAgICAgIHN1aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jlc3RvcmUuIFRoZSBkaXJlY3Rv cnkKLSAgICAgICAgICAgd2lsbCBoYXZlIGRhdGFiYXNlIDx0eXBlPm9pZDwvdHlwZT4gYXMg aXRzIG5hbWUuCi0gICAgICAgICAgPC9wYXJhPgotICAgICAgICAgPC9saXN0aXRlbT4KLSAg ICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgICAgPHZhcmxpc3RlbnRyeT4KLSAgICAg ICAgIDx0ZXJtPjxsaXRlcmFsPnA8L2xpdGVyYWw+PC90ZXJtPgotICAgICAgICAgPHRlcm0+ PGxpdGVyYWw+cGxhaW48L2xpdGVyYWw+PC90ZXJtPgotICAgICAgICAgPGxpc3RpdGVtPgot ICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICBPdXRwdXQgYSBwbGFpbi10ZXh0IFNRTCBz Y3JpcHQgZmlsZSAodGhlIGRlZmF1bHQpLgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAg IDwvbGlzdGl0ZW0+Ci0gICAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICAgIDx2YXJs aXN0ZW50cnk+Ci0gICAgICAgICA8dGVybT48bGl0ZXJhbD5jPC9saXRlcmFsPjwvdGVybT4K LSAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmN1c3RvbTwvbGl0ZXJhbD48L3Rlcm0+Ci0gICAg ICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgIE91dHB1dCBh IGN1c3RvbS1mb3JtYXQgYXJjaGl2ZSBmb3IgZWFjaCBkYXRhYmFzZSwKLSAgICAgICAgICAg c3VpdGFibGUgZm9yIGlucHV0IGludG8gcGdfcmVzdG9yZS4gVGhlIGFyY2hpdmUKLSAgICAg ICAgICAgd2lsbCBiZSBuYW1lZCA8ZmlsZW5hbWU+ZGJvaWQuZG1wPC9maWxlbmFtZT4gd2hl cmUgPHR5cGU+ZGJvaWQ8L3R5cGU+IGlzIHRoZQotICAgICAgICAgICA8dHlwZT5vaWQ8L3R5 cGU+IG9mIHRoZSBkYXRhYmFzZS4KLSAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICA8L2xp c3RpdGVtPgotICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgICAgPHZhcmxpc3Rl bnRyeT4KLSAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnQ8L2xpdGVyYWw+PC90ZXJtPgotICAg ICAgICAgPHRlcm0+PGxpdGVyYWw+dGFyPC9saXRlcmFsPjwvdGVybT4KLSAgICAgICAgIDxs aXN0aXRlbT4KLSAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgT3V0cHV0IGEgdGFyLWZv cm1hdCBhcmNoaXZlIGZvciBlYWNoIGRhdGFiYXNlLAotICAgICAgICAgICBzdWl0YWJsZSBm b3IgaW5wdXQgaW50byBwZ19yZXN0b3JlLiBUaGUgYXJjaGl2ZQotICAgICAgICAgICB3aWxs IGJlIG5hbWVkIDxmaWxlbmFtZT5kYm9pZC50YXI8L2ZpbGVuYW1lPiB3aGVyZSA8dHlwZT5k Ym9pZDwvdHlwZT4gaXMgdGhlCi0gICAgICAgICAgIDx0eXBlPm9pZDwvdHlwZT4gb2YgdGhl IGRhdGFiYXNlLgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgIDwvbGlzdGl0ZW0+Ci0g ICAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICAgIDwvdmFyaWFibGVsaXN0PgotCi0g ICAgICAgTm90ZTogc2VlIDx4cmVmIGxpbmtlbmQ9ImFwcC1wZ2R1bXAiLz4gZm9yIGRldGFp bHMKLSAgICAgICBvZiBob3cgdGhlIHZhcmlvdXMgbm9uIHBsYWluIHRleHQgYXJjaGl2ZXMg d29yay4KLQotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICA8L3Zh cmxpc3RlbnRyeT4KLQogICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgPHRlcm0+PG9wdGlv bj4tZzwvb3B0aW9uPjwvdGVybT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LS1nbG9iYWxzLW9u bHk8L29wdGlvbj48L3Rlcm0+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jl c3RvcmUuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sCmluZGV4IGI2 NDliZDNhNWFlLi4yYWJlMDVkNDdlOSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9w Z19yZXN0b3JlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwK QEAgLTE4LDkgKzE4LDggQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgIDxyZWZuYW1l PnBnX3Jlc3RvcmU8L3JlZm5hbWU+CiAKICAgPHJlZnB1cnBvc2U+Ci0gICByZXN0b3JlIDxw cm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2VzIGZyb20gYXJj aGl2ZXMKLSAgIGNyZWF0ZWQgYnkgPGFwcGxpY2F0aW9uPnBnX2R1bXA8L2FwcGxpY2F0aW9u PiBvcgotICAgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPgorICAgcmVz dG9yZSBhIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2Ug ZnJvbSBhbgorICAgYXJjaGl2ZSBmaWxlIGNyZWF0ZWQgYnkgPGFwcGxpY2F0aW9uPnBnX2R1 bXA8L2FwcGxpY2F0aW9uPgogICA8L3JlZnB1cnBvc2U+CiAgPC9yZWZuYW1lZGl2PgogCkBA IC0zOSwxNCArMzgsMTMgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAKICAgPHBhcmE+ CiAgICA8YXBwbGljYXRpb24+cGdfcmVzdG9yZTwvYXBwbGljYXRpb24+IGlzIGEgdXRpbGl0 eSBmb3IgcmVzdG9yaW5nIGEKLSAgIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0 bmFtZT4gZGF0YWJhc2Ugb3IgY2x1c3RlciBmcm9tIGFuIGFyY2hpdmUKLSAgIGNyZWF0ZWQg YnkgPHhyZWYgbGlua2VuZD0iYXBwLXBnZHVtcCIvPiBvcgotICAgPHhyZWYgbGlua2VuZD0i YXBwLXBnLWR1bXBhbGwiLz4gaW4gb25lIG9mIHRoZSBub24tcGxhaW4tdGV4dAorICAgPHBy b2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBmcm9tIGFuIGFy Y2hpdmUKKyAgIGNyZWF0ZWQgYnkgPHhyZWYgbGlua2VuZD0iYXBwLXBnZHVtcCIvPiBpbiBv bmUgb2YgdGhlIG5vbi1wbGFpbi10ZXh0CiAgICBmb3JtYXRzLiAgSXQgd2lsbCBpc3N1ZSB0 aGUgY29tbWFuZHMgbmVjZXNzYXJ5IHRvIHJlY29uc3RydWN0IHRoZQotICAgZGF0YWJhc2Ug b3IgY2x1c3RlciB0byB0aGUgc3RhdGUgaXQgd2FzIGluIGF0IHRoZSB0aW1lIGl0IHdhcyBz YXZlZC4gVGhlCi0gICBhcmNoaXZlcyBhbHNvIGFsbG93IDxhcHBsaWNhdGlvbj5wZ19yZXN0 b3JlPC9hcHBsaWNhdGlvbj4gdG8KKyAgIGRhdGFiYXNlIHRvIHRoZSBzdGF0ZSBpdCB3YXMg aW4gYXQgdGhlIHRpbWUgaXQgd2FzIHNhdmVkLiAgVGhlCisgICBhcmNoaXZlIGZpbGVzIGFs c28gYWxsb3cgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPiB0bwogICAg YmUgc2VsZWN0aXZlIGFib3V0IHdoYXQgaXMgcmVzdG9yZWQsIG9yIGV2ZW4gdG8gcmVvcmRl ciB0aGUgaXRlbXMKLSAgIHByaW9yIHRvIGJlaW5nIHJlc3RvcmVkLiBUaGUgYXJjaGl2ZSBm b3JtYXRzIGFyZSBkZXNpZ25lZCB0byBiZQorICAgcHJpb3IgdG8gYmVpbmcgcmVzdG9yZWQu IFRoZSBhcmNoaXZlIGZpbGVzIGFyZSBkZXNpZ25lZCB0byBiZQogICAgcG9ydGFibGUgYWNy b3NzIGFyY2hpdGVjdHVyZXMuCiAgIDwvcGFyYT4KIApAQCAtNTQsMTcgKzUyLDEwIEBAIFBv c3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2Fw cGxpY2F0aW9uPiBjYW4gb3BlcmF0ZSBpbiB0d28gbW9kZXMuCiAgICBJZiBhIGRhdGFiYXNl IG5hbWUgaXMgc3BlY2lmaWVkLCA8YXBwbGljYXRpb24+cGdfcmVzdG9yZTwvYXBwbGljYXRp b24+CiAgICBjb25uZWN0cyB0byB0aGF0IGRhdGFiYXNlIGFuZCByZXN0b3JlcyBhcmNoaXZl IGNvbnRlbnRzIGRpcmVjdGx5IGludG8KLSAgIHRoZSBkYXRhYmFzZS4KLSAgIFdoZW4gcmVz dG9yaW5nIGZyb20gYSBkdW1wIG1hZGUgYnkgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2Fw cGxpY2F0aW9uPiwKLSAgIGVhY2ggZGF0YWJhc2Ugd2lsbCBiZSBjcmVhdGVkIGFuZCB0aGVu IHRoZSByZXN0b3JhdGlvbiB3aWxsIGJlIHJ1biBpbiB0aGF0Ci0gICBkYXRhYmFzZS4KLQot ICAgT3RoZXJ3aXNlLCB3aGVuIGEgZGF0YWJhc2UgbmFtZSBpcyBub3Qgc3BlY2lmaWVkLCBh IHNjcmlwdCBjb250YWluaW5nIHRoZSBTUUwKLSAgIGNvbW1hbmRzIG5lY2Vzc2FyeSB0byBy ZWJ1aWxkIHRoZSBkYXRhYmFzZSBvciBjbHVzdGVyIGlzIGNyZWF0ZWQgYW5kIHdyaXR0ZW4K KyAgIHRoZSBkYXRhYmFzZS4gIE90aGVyd2lzZSwgYSBzY3JpcHQgY29udGFpbmluZyB0aGUg U1FMCisgICBjb21tYW5kcyBuZWNlc3NhcnkgdG8gcmVidWlsZCB0aGUgZGF0YWJhc2UgaXMg Y3JlYXRlZCBhbmQgd3JpdHRlbgogICAgdG8gYSBmaWxlIG9yIHN0YW5kYXJkIG91dHB1dC4g IFRoaXMgc2NyaXB0IG91dHB1dCBpcyBlcXVpdmFsZW50IHRvCi0gICB0aGUgcGxhaW4gdGV4 dCBvdXRwdXQgZm9ybWF0IG9mIDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4g b3IKLSAgIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4uCi0KKyAgIHRo ZSBwbGFpbiB0ZXh0IG91dHB1dCBmb3JtYXQgb2YgPGFwcGxpY2F0aW9uPnBnX2R1bXA8L2Fw cGxpY2F0aW9uPi4KICAgIFNvbWUgb2YgdGhlIG9wdGlvbnMgY29udHJvbGxpbmcgdGhlIG91 dHB1dCBhcmUgdGhlcmVmb3JlIGFuYWxvZ291cyB0bwogICAgPGFwcGxpY2F0aW9uPnBnX2R1 bXA8L2FwcGxpY2F0aW9uPiBvcHRpb25zLgogICA8L3BhcmE+CkBAIC0xNDksOCArMTQwLDYg QEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICAgIGNvbW1hbmRzIHRoYXQgbWVu dGlvbiB0aGlzIGRhdGFiYXNlLgogICAgICAgICBBY2Nlc3MgcHJpdmlsZWdlcyBmb3IgdGhl IGRhdGFiYXNlIGl0c2VsZiBhcmUgYWxzbyByZXN0b3JlZCwKICAgICAgICAgdW5sZXNzIDxv cHRpb24+LS1uby1hY2w8L29wdGlvbj4gaXMgc3BlY2lmaWVkLgotICAgICAgICA8b3B0aW9u Pi0tY3JlYXRlPC9vcHRpb24+IGlzIHJlcXVpcmVkIHdoZW4gcmVzdG9yaW5nIG11bHRpcGxl IGRhdGFiYXNlcwotICAgICAgICBmcm9tIGFuIGFyY2hpdmUgY3JlYXRlZCBieSA8YXBwbGlj YXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+LgogICAgICAgIDwvcGFyYT4KIAogICAg ICAgIDxwYXJhPgpAQCAtMjQ2LDE5ICsyMzUsNiBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRp b24KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCi0gICAgIDx2 YXJsaXN0ZW50cnk+Ci0gICAgICA8dGVybT48b3B0aW9uPi1nPC9vcHRpb24+PC90ZXJtPgot ICAgICAgPHRlcm0+PG9wdGlvbj4tLWdsb2JhbHMtb25seTwvb3B0aW9uPjwvdGVybT4KLSAg ICAgIDxsaXN0aXRlbT4KLSAgICAgICA8cGFyYT4KLSAgICAgICAgUmVzdG9yZSBvbmx5IGds b2JhbCBvYmplY3RzIChyb2xlcyBhbmQgdGFibGVzcGFjZXMpLCBubyBkYXRhYmFzZXMuCi0g ICAgICAgPC9wYXJhPgotICAgICAgIDxwYXJhPgotICAgICAgICBUaGlzIG9wdGlvbiBpcyBv bmx5IHJlbGV2YW50IHdoZW4gcmVzdG9yaW5nIGZyb20gYW4gYXJjaGl2ZSBtYWRlIHVzaW5n IDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4uCi0gICAgICAgPC9wYXJh PgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgPC92YXJsaXN0ZW50cnk+Ci0KICAgICAgPHZh cmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LUkgPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPmluZGV4PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CiAgICAg ICA8dGVybT48b3B0aW9uPi0taW5kZXg9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi PmluZGV4PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CkBAIC02MDMsMjggKzU3OSw2 IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgPC9saXN0aXRlbT4KICAgICAg PC92YXJsaXN0ZW50cnk+CiAKLSAgICAgPHZhcmxpc3RlbnRyeT4KLSAgICAgIDx0ZXJtPjxv cHRpb24+LS1leGNsdWRlLWRhdGFiYXNlPTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVy Ij5wYXR0ZXJuPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+Ci0gICAgICA8bGlzdGl0 ZW0+Ci0gICAgICAgPHBhcmE+Ci0gICAgICAgIERvIG5vdCByZXN0b3JlIGRhdGFiYXNlcyB3 aG9zZSBuYW1lIG1hdGNoZXMKLSAgICAgICAgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPi4KLSAgICAgICAgTXVsdGlwbGUgcGF0dGVybnMg Y2FuIGJlIGV4Y2x1ZGVkIGJ5IHdyaXRpbmcgbXVsdGlwbGUKLSAgICAgICAgPG9wdGlvbj4t LWV4Y2x1ZGUtZGF0YWJhc2U8L29wdGlvbj4gc3dpdGNoZXMuICBUaGUKLSAgICAgICAgPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPiBwYXJh bWV0ZXIgaXMKLSAgICAgICAgaW50ZXJwcmV0ZWQgYXMgYSBwYXR0ZXJuIGFjY29yZGluZyB0 byB0aGUgc2FtZSBydWxlcyB1c2VkIGJ5Ci0gICAgICAgIDxhcHBsaWNhdGlvbj5wc3FsPC9h cHBsaWNhdGlvbj4ncyA8bGl0ZXJhbD5cZDwvbGl0ZXJhbD4KLSAgICAgICAgY29tbWFuZHMg KHNlZSA8eHJlZiBsaW5rZW5kPSJhcHAtcHNxbC1wYXR0ZXJucyIvPiksCi0gICAgICAgIHNv IG11bHRpcGxlIGRhdGFiYXNlcyBjYW4gYWxzbyBiZSBleGNsdWRlZCBieSB3cml0aW5nIHdp bGRjYXJkCi0gICAgICAgIGNoYXJhY3RlcnMgaW4gdGhlIHBhdHRlcm4uICBXaGVuIHVzaW5n IHdpbGRjYXJkcywgYmUgY2FyZWZ1bCB0bwotICAgICAgICBxdW90ZSB0aGUgcGF0dGVybiBp ZiBuZWVkZWQgdG8gcHJldmVudCBzaGVsbCB3aWxkY2FyZCBleHBhbnNpb24uCi0gICAgICAg PC9wYXJhPgotICAgICAgIDxwYXJhPgotICAgICAgICBUaGlzIG9wdGlvbiBpcyBvbmx5IHJl bGV2YW50IHdoZW4gcmVzdG9yaW5nIGZyb20gYW4gYXJjaGl2ZSBtYWRlIHVzaW5nIDxhcHBs aWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4uCi0gICAgICAgPC9wYXJhPgotICAg ICAgPC9saXN0aXRlbT4KLSAgICAgPC92YXJsaXN0ZW50cnk+Ci0KICAgICAgPHZhcmxpc3Rl bnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LS1maWx0ZXI9PHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPmZpbGVuYW1lPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CiAg ICAgICA8bGlzdGl0ZW0+CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVp bGQgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKaW5kZXggNGE0ZWJiZDhlYzkuLmEy MjMzYjBhMWI0IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKKysr IGIvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCkBAIC0xMDIsNyArMTAyLDYgQEAgdGVz dHMgKz0gewogICAgICAgJ3QvMDAzX3BnX2R1bXBfd2l0aF9zZXJ2ZXIucGwnLAogICAgICAg J3QvMDA0X3BnX2R1bXBfcGFyYWxsZWwucGwnLAogICAgICAgJ3QvMDA1X3BnX2R1bXBfZmls dGVyZmlsZS5wbCcsCi0gICAgICAndC8wMDZfcGdfZHVtcGFsbC5wbCcsCiAgICAgICAndC8w MTBfZHVtcF9jb25uc3RyLnBsJywKICAgICBdLAogICB9LApkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ19kdW1wL3BhcmFsbGVsLmMgYi9zcmMvYmluL3BnX2R1bXAvcGFyYWxsZWwuYwppbmRl eCA1OTc0ZDY3MDZmZC4uMDg2YWRjZGM1MDIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVt cC9wYXJhbGxlbC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jCkBAIC0zMzMs MTYgKzMzMyw2IEBAIG9uX2V4aXRfY2xvc2VfYXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJb25f ZXhpdF9uaWNlbHkoYXJjaGl2ZV9jbG9zZV9jb25uZWN0aW9uLCAmc2h1dGRvd25faW5mbyk7 CiB9CiAKLS8qCi0gKiBXaGVuIHBnX3Jlc3RvcmUgcmVzdG9yZXMgbXVsdGlwbGUgZGF0YWJh c2VzLCB0aGVuIHVwZGF0ZSBhbHJlYWR5IGFkZGVkIGVudHJ5Ci0gKiBpbnRvIGFycmF5IGZv ciBjbGVhbnVwLgotICovCi12b2lkCi1yZXBsYWNlX29uX2V4aXRfY2xvc2VfYXJjaGl2ZShB cmNoaXZlICpBSFgpCi17Ci0Jc2h1dGRvd25faW5mby5BSFggPSBBSFg7Ci19Ci0KIC8qCiAg KiBvbl9leGl0X25pY2VseSBoYW5kbGVyIGZvciBzaHV0dGluZyBkb3duIGRhdGFiYXNlIGNv bm5lY3Rpb25zIGFuZAogICogd29ya2VyIHByb2Nlc3NlcyBjbGVhbmx5LgpkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2Jh Y2t1cC5oCmluZGV4IGFmMDAwN2ZiNmQyLi40ZWJlZjFlODY0NCAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNr dXAuaApAQCAtMzA4LDcgKzMwOCw3IEBAIGV4dGVybiB2b2lkIFNldEFyY2hpdmVPcHRpb25z KEFyY2hpdmUgKkFILCBEdW1wT3B0aW9ucyAqZG9wdCwgUmVzdG9yZU9wdGlvbnMgKnJvCiAK IGV4dGVybiB2b2lkIFByb2Nlc3NBcmNoaXZlUmVzdG9yZU9wdGlvbnMoQXJjaGl2ZSAqQUhY KTsKIAotZXh0ZXJuIHZvaWQgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYLCBib29sIGFw cGVuZF9kYXRhKTsKK2V4dGVybiB2b2lkIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCk7 CiAKIC8qIE9wZW4gYW4gZXhpc3RpbmcgYXJjaGl2ZSAqLwogZXh0ZXJuIEFyY2hpdmUgKk9w ZW5BcmNoaXZlKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZlRm9ybWF0IGZt dCk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMg Yi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKaW5kZXggMzBlMGRhMzFh YTMuLmRjZTg4ZjA0MGFjIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3Vw X2FyY2hpdmVyLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5j CkBAIC04Nyw3ICs4Nyw3IEBAIHN0YXRpYyBpbnQJUmVzdG9yaW5nVG9EQihBcmNoaXZlSGFu ZGxlICpBSCk7CiBzdGF0aWMgdm9pZCBkdW1wX2xvX2J1ZihBcmNoaXZlSGFuZGxlICpBSCk7 CiBzdGF0aWMgdm9pZCBkdW1wVGltZXN0YW1wKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBj aGFyICptc2csIHRpbWVfdCB0aW0pOwogc3RhdGljIHZvaWQgU2V0T3V0cHV0KEFyY2hpdmVI YW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwKLQkJCQkJICBjb25zdCBwZ19jb21w cmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsIGJvb2wgYXBwZW5kX2RhdGEp OworCQkJCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25f c3BlYyk7CiBzdGF0aWMgQ29tcHJlc3NGaWxlSGFuZGxlICpTYXZlT3V0cHV0KEFyY2hpdmVI YW5kbGUgKkFIKTsKIHN0YXRpYyB2b2lkIFJlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAq QUgsIENvbXByZXNzRmlsZUhhbmRsZSAqc2F2ZWRPdXRwdXQpOwogCkBAIC0zMzksMTQgKzMz OSw5IEBAIFByb2Nlc3NBcmNoaXZlUmVzdG9yZU9wdGlvbnMoQXJjaGl2ZSAqQUhYKQogCQlT dHJpY3ROYW1lc0NoZWNrKHJvcHQpOwogfQogCi0vKgotICogUmVzdG9yZUFyY2hpdmUKLSAq Ci0gKiBJZiBhcHBlbmRfZGF0YSBpcyBzZXQsIHRoZW4gYXBwZW5kIGRhdGEgaW50byBmaWxl IGFzIHdlIGFyZSByZXN0b3JpbmcgZHVtcAotICogb2YgbXVsdGlwbGUgZGF0YWJhc2VzIHdo aWNoIHdhcyB0YWtlbiBieSBwZ19kdW1wYWxsLgotICovCisvKiBQdWJsaWMgKi8KIHZvaWQK LVJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCwgYm9vbCBhcHBlbmRfZGF0YSkKK1Jlc3Rv cmVBcmNoaXZlKEFyY2hpdmUgKkFIWCkKIHsKIAlBcmNoaXZlSGFuZGxlICpBSCA9IChBcmNo aXZlSGFuZGxlICopIEFIWDsKIAlSZXN0b3JlT3B0aW9ucyAqcm9wdCA9IEFILT5wdWJsaWMu cm9wdDsKQEAgLTQ2Myw3ICs0NTgsNyBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgs IGJvb2wgYXBwZW5kX2RhdGEpCiAJICovCiAJc2F2ID0gU2F2ZU91dHB1dChBSCk7CiAJaWYg KHJvcHQtPmZpbGVuYW1lIHx8IHJvcHQtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtICE9 IFBHX0NPTVBSRVNTSU9OX05PTkUpCi0JCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUs IHJvcHQtPmNvbXByZXNzaW9uX3NwZWMsIGFwcGVuZF9kYXRhKTsKKwkJU2V0T3V0cHV0KEFI LCByb3B0LT5maWxlbmFtZSwgcm9wdC0+Y29tcHJlc3Npb25fc3BlYyk7CiAKIAlhaHByaW50 ZihBSCwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGR1bXBcbi0tXG5cbiIpOwogCkBA IC0xMzAyLDcgKzEyOTcsNyBAQCBQcmludFRPQ1N1bW1hcnkoQXJjaGl2ZSAqQUhYKQogCiAJ c2F2ID0gU2F2ZU91dHB1dChBSCk7CiAJaWYgKHJvcHQtPmZpbGVuYW1lKQotCQlTZXRPdXRw dXQoQUgsIHJvcHQtPmZpbGVuYW1lLCBvdXRfY29tcHJlc3Npb25fc3BlYywgZmFsc2UpOwor CQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCBvdXRfY29tcHJlc3Npb25fc3BlYyk7 CiAKIAlpZiAoc3RyZnRpbWUoc3RhbXBfc3RyLCBzaXplb2Yoc3RhbXBfc3RyKSwgUEdEVU1Q X1NUUkZUSU1FX0ZNVCwKIAkJCQkgbG9jYWx0aW1lKCZBSC0+Y3JlYXRlRGF0ZSkpID09IDAp CkBAIC0xNjgxLDggKzE2NzYsNyBAQCBhcmNocHJpbnRmKEFyY2hpdmUgKkFILCBjb25zdCBj aGFyICpmbXQsLi4uKQogCiBzdGF0aWMgdm9pZAogU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUg KkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwKLQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVj aWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsCi0JCSAgYm9vbCBhcHBlbmRfZGF0YSkKKwkJ ICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCiB7 CiAJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkg7CiAJY29uc3QgY2hhciAqbW9kZTsKQEAgLTE3 MDIsNyArMTY5Niw3IEBAIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hh ciAqZmlsZW5hbWUsCiAJZWxzZQogCQlmbiA9IGZpbGVubyhzdGRvdXQpOwogCi0JaWYgKGFw cGVuZF9kYXRhIHx8IEFILT5tb2RlID09IGFyY2hNb2RlQXBwZW5kKQorCWlmIChBSC0+bW9k ZSA9PSBhcmNoTW9kZUFwcGVuZCkKIAkJbW9kZSA9IFBHX0JJTkFSWV9BOwogCWVsc2UKIAkJ bW9kZSA9IFBHX0JJTkFSWV9XOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2Jh Y2t1cF9hcmNoaXZlci5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5o CmluZGV4IDM2NTA3M2IzZWFlLi4zMjViNTNmYzliZCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9w Z19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXBfYXJjaGl2ZXIuaApAQCAtMzk0LDcgKzM5NCw2IEBAIHN0cnVjdCBfdG9jRW50cnkK IAogZXh0ZXJuIGludAlwYXJhbGxlbF9yZXN0b3JlKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NF bnRyeSAqdGUpOwogZXh0ZXJuIHZvaWQgb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFyY2hpdmUg KkFIWCk7Ci1leHRlcm4gdm9pZCByZXBsYWNlX29uX2V4aXRfY2xvc2VfYXJjaGl2ZShBcmNo aXZlICpBSFgpOwogCiBleHRlcm4gdm9pZCB3YXJuX29yX2V4aXRfaG9ycmlibHkoQXJjaGl2 ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZtdCwuLi4pIHBnX2F0dHJpYnV0ZV9wcmludGYo MiwgMyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMg Yi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jCmluZGV4IGQ5NGQwZGUyYTVkLi5i NWJhM2I0NmRkOSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIu YworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jCkBAIC04MjYsNyArODI2 LDcgQEAgX0Nsb3NlQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCkKIAkJc2F2VmVyYm9zZSA9 IEFILT5wdWJsaWMudmVyYm9zZTsKIAkJQUgtPnB1YmxpYy52ZXJib3NlID0gMDsKIAotCQlS ZXN0b3JlQXJjaGl2ZSgoQXJjaGl2ZSAqKSBBSCwgZmFsc2UpOworCQlSZXN0b3JlQXJjaGl2 ZSgoQXJjaGl2ZSAqKSBBSCk7CiAKIAkJU2V0QXJjaGl2ZU9wdGlvbnMoKEFyY2hpdmUgKikg QUgsIHNhdkRvcHQsIHNhdlJvcHQpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAv cGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCA2Mjk4ZWRiMjZi NS4uZjU0M2Q0MThlNDYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMK KysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwpAQCAtMTI2NSw3ICsxMjY1LDcgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJICogcmlnaHQgbm93LgogCSAqLwogCWlm IChwbGFpblRleHQpCi0JCVJlc3RvcmVBcmNoaXZlKGZvdXQsIGZhbHNlKTsKKwkJUmVzdG9y ZUFyY2hpdmUoZm91dCk7CiAKIAlDbG9zZUFyY2hpdmUoZm91dCk7CiAKQEAgLTEyNzYsNyAr MTI3Niw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogc3RhdGljIHZvaWQKIGhl bHAoY29uc3QgY2hhciAqcHJvZ25hbWUpCiB7Ci0JcHJpbnRmKF8oIiVzIGV4cG9ydHMgYSBQ b3N0Z3JlU1FMIGRhdGFiYXNlIGFzIGFuIFNRTCBzY3JpcHQgb3IgdG8gb3RoZXIgZm9ybWF0 cy5cblxuIiksIHByb2duYW1lKTsKKwlwcmludGYoXygiJXMgZHVtcHMgYSBkYXRhYmFzZSBh cyBhIHRleHQgZmlsZSBvciB0byBvdGhlciBmb3JtYXRzLlxuXG4iKSwgcHJvZ25hbWUpOwog CXByaW50ZihfKCJVc2FnZTpcbiIpKTsKIAlwcmludGYoXygiICAlcyBbT1BUSU9OXS4uLiBb REJOQU1FXVxuIiksIHByb2duYW1lKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1w L3BnX2R1bXBhbGwuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKaW5kZXggMTAw MzE3YjFhYTkuLmY2OWYwMjYwMjU2IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdf ZHVtcGFsbC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKQEAgLTY1LDEw ICs2NSw5IEBAIHN0YXRpYyB2b2lkIGRyb3BUYWJsZXNwYWNlcyhQR2Nvbm4gKmNvbm4pOwog c3RhdGljIHZvaWQgZHVtcFRhYmxlc3BhY2VzKFBHY29ubiAqY29ubik7CiBzdGF0aWMgdm9p ZCBkcm9wREJzKFBHY29ubiAqY29ubik7CiBzdGF0aWMgdm9pZCBkdW1wVXNlckNvbmZpZyhQ R2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnVzZXJuYW1lKTsKLXN0YXRpYyB2b2lkIGR1bXBE YXRhYmFzZXMoUEdjb25uICpjb25uLCBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0KTsK K3N0YXRpYyB2b2lkIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKTsKIHN0YXRpYyB2b2lk IGR1bXBUaW1lc3RhbXAoY29uc3QgY2hhciAqbXNnKTsKLXN0YXRpYyBpbnQJcnVuUGdEdW1w KGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMsCi0JCQkJCSAg Y2hhciAqZGJmaWxlLCBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0KTsKK3N0YXRpYyBp bnQJcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29w dHMpOwogc3RhdGljIHZvaWQgYnVpbGRTaFNlY0xhYmVscyhQR2Nvbm4gKmNvbm4sCiAJCQkJ CQkJIGNvbnN0IGNoYXIgKmNhdGFsb2dfbmFtZSwgT2lkIG9iamVjdElkLAogCQkJCQkJCSBj b25zdCBjaGFyICpvYmp0eXBlLCBjb25zdCBjaGFyICpvYmpuYW1lLApAQCAtNzcsNyArNzYs NiBAQCBzdGF0aWMgdm9pZCBleGVjdXRlQ29tbWFuZChQR2Nvbm4gKmNvbm4sIGNvbnN0IGNo YXIgKnF1ZXJ5KTsKIHN0YXRpYyB2b2lkIGV4cGFuZF9kYm5hbWVfcGF0dGVybnMoUEdjb25u ICpjb25uLCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJucywKIAkJCQkJCQkJICAgU2ltcGxl U3RyaW5nTGlzdCAqbmFtZXMpOwogc3RhdGljIHZvaWQgcmVhZF9kdW1wYWxsX2ZpbHRlcnMo Y29uc3QgY2hhciAqZmlsZW5hbWUsIFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRlcm4pOwotc3Rh dGljIEFyY2hpdmVGb3JtYXQgcGFyc2VEdW1wRm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1hdCk7 CiAKIHN0YXRpYyBjaGFyIHBnX2R1bXBfYmluW01BWFBHUEFUSF07CiBzdGF0aWMgUFFFeHBC dWZmZXIgcGdkdW1wb3B0czsKQEAgLTE1MCw3ICsxNDgsNiBAQCBtYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pCiAJCXsicGFzc3dvcmQiLCBub19hcmd1bWVudCwgTlVMTCwgJ1cnfSwK IAkJeyJuby1wcml2aWxlZ2VzIiwgbm9fYXJndW1lbnQsIE5VTEwsICd4J30sCiAJCXsibm8t YWNsIiwgbm9fYXJndW1lbnQsIE5VTEwsICd4J30sCi0JCXsiZm9ybWF0IiwgcmVxdWlyZWRf YXJndW1lbnQsIE5VTEwsICdGJ30sCiAKIAkJLyoKIAkJICogdGhlIGZvbGxvd2luZyBvcHRp b25zIGRvbid0IGhhdmUgYW4gZXF1aXZhbGVudCBzaG9ydCBvcHRpb24gbGV0dGVyCkBAIC0y MDEsOCArMTk4LDYgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWNoYXIJICAg KnBnZGIgPSBOVUxMOwogCWNoYXIJICAgKnVzZV9yb2xlID0gTlVMTDsKIAljb25zdCBjaGFy ICpkdW1wZW5jb2RpbmcgPSBOVUxMOwotCUFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQg PSBhcmNoTnVsbDsKLQljb25zdCBjaGFyICpmb3JtYXROYW1lID0gInAiOwogCXRyaXZhbHVl CXByb21wdF9wYXNzd29yZCA9IFRSSV9ERUZBVUxUOwogCWJvb2wJCWRhdGFfb25seSA9IGZh bHNlOwogCWJvb2wJCWdsb2JhbHNfb25seSA9IGZhbHNlOwpAQCAtMjUyLDcgKzI0Nyw3IEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAogCXBnZHVtcG9wdHMgPSBjcmVhdGVQ UUV4cEJ1ZmZlcigpOwogCi0Jd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwg ImFjZDpFOmY6RjpnaDpsOk9wOnJzUzp0VTp2d1d4IiwgbG9uZ19vcHRpb25zLCAmb3B0aW5k ZXgpKSAhPSAtMSkKKwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiYWNk OkU6ZjpnaDpsOk9wOnJzUzp0VTp2d1d4IiwgbG9uZ19vcHRpb25zLCAmb3B0aW5kZXgpKSAh PSAtMSkKIAl7CiAJCXN3aXRjaCAoYykKIAkJewpAQCAtMjgwLDkgKzI3NSw3IEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihwZ2R1 bXBvcHRzLCAiIC1mICIpOwogCQkJCWFwcGVuZFNoZWxsU3RyaW5nKHBnZHVtcG9wdHMsIGZp bGVuYW1lKTsKIAkJCQlicmVhazsKLQkJCWNhc2UgJ0YnOgotCQkJCWZvcm1hdE5hbWUgPSBw Z19zdHJkdXAob3B0YXJnKTsKLQkJCQlicmVhazsKKwogCQkJY2FzZSAnZyc6CiAJCQkJZ2xv YmFsc19vbmx5ID0gdHJ1ZTsKIAkJCQlicmVhazsKQEAgLTQzMSwyMSArNDI0LDYgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQlleGl0X25pY2VseSgxKTsKIAl9CiAKLQkv KiBHZXQgZm9ybWF0IGZvciBkdW1wLiAqLwotCWFyY2hEdW1wRm9ybWF0ID0gcGFyc2VEdW1w Rm9ybWF0KGZvcm1hdE5hbWUpOwotCi0JLyoKLQkgKiBJZiBhIG5vbi1wbGFpbiBmb3JtYXQg aXMgc3BlY2lmaWVkLCBhIGZpbGUgbmFtZSBpcyBhbHNvIHJlcXVpcmVkIGFzIHRoZQotCSAq IHBhdGggdG8gdGhlIG1haW4gZGlyZWN0b3J5LgotCSAqLwotCWlmIChhcmNoRHVtcEZvcm1h dCAhPSBhcmNoTnVsbCAmJgotCQkoIWZpbGVuYW1lIHx8IHN0cmNtcChmaWxlbmFtZSwgIiIp ID09IDApKQotCXsKLQkJcGdfbG9nX2Vycm9yKCJvcHRpb24gLUYvLS1mb3JtYXQ9ZHxjfHQg cmVxdWlyZXMgb3B0aW9uIC1mLy0tZmlsZSIpOwotCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5 IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOwotCQll eGl0X25pY2VseSgxKTsKLQl9Ci0KIAkvKgogCSAqIElmIHBhc3N3b3JkIHZhbHVlcyBhcmUg bm90IHJlcXVpcmVkIGluIHRoZSBkdW1wLCBzd2l0Y2ggdG8gdXNpbmcKIAkgKiBwZ19yb2xl cyB3aGljaCBpcyBlcXVhbGx5IHVzZWZ1bCwganVzdCBtb3JlIGxpa2VseSB0byBoYXZlIHVu cmVzdHJpY3RlZApAQCAtNTEwLDMzICs0ODgsNiBAQCBtYWluKGludCBhcmdjLCBjaGFyICph cmd2W10pCiAJaWYgKHNlcXVlbmNlX2RhdGEpCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHBn ZHVtcG9wdHMsICIgLS1zZXF1ZW5jZS1kYXRhIik7CiAKLQkvKgotCSAqIE9wZW4gdGhlIG91 dHB1dCBmaWxlIGlmIHJlcXVpcmVkLCBvdGhlcndpc2UgdXNlIHN0ZG91dC4gIElmIHJlcXVp cmVkLAotCSAqIHRoZW4gY3JlYXRlIG5ldyBkaXJlY3RvcnkgYW5kIGdsb2JhbC5kYXQgZmls ZS4KLQkgKi8KLQlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCi0JewotCQljaGFy CQlnbG9iYWxfcGF0aFtNQVhQR1BBVEhdOwotCi0JCS8qIENyZWF0ZSBuZXcgZGlyZWN0b3J5 IG9yIGFjY2VwdCB0aGUgZW1wdHkgZXhpc3RpbmcgZGlyZWN0b3J5LiAqLwotCQljcmVhdGVf b3Jfb3Blbl9kaXIoZmlsZW5hbWUpOwotCi0JCXNucHJpbnRmKGdsb2JhbF9wYXRoLCBNQVhQ R1BBVEgsICIlcy9nbG9iYWwuZGF0IiwgZmlsZW5hbWUpOwotCi0JCU9QRiA9IGZvcGVuKGds b2JhbF9wYXRoLCBQR19CSU5BUllfVyk7Ci0JCWlmICghT1BGKQotCQkJcGdfZmF0YWwoImNv dWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAlbSIsIGdsb2JhbF9wYXRoKTsKLQl9Ci0JZWxz ZSBpZiAoZmlsZW5hbWUpCi0JewotCQlPUEYgPSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZ X1cpOwotCQlpZiAoIU9QRikKLQkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQg ZmlsZSBcIiVzXCI6ICVtIiwKLQkJCQkJIGZpbGVuYW1lKTsKLQl9Ci0JZWxzZQotCQlPUEYg PSBzdGRvdXQ7Ci0KIAkvKgogCSAqIElmIHRoZXJlIHdhcyBhIGRhdGFiYXNlIHNwZWNpZmll ZCBvbiB0aGUgY29tbWFuZCBsaW5lLCB1c2UgdGhhdCwKIAkgKiBvdGhlcndpc2UgdHJ5IHRv IGNvbm5lY3QgdG8gZGF0YWJhc2UgInBvc3RncmVzIiwgYW5kIGZhaWxpbmcgdGhhdApAQCAt NTc2LDYgKzUyNywxOSBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJZXhwYW5k X2RibmFtZV9wYXR0ZXJucyhjb25uLCAmZGF0YWJhc2VfZXhjbHVkZV9wYXR0ZXJucywKIAkJ CQkJCSAgICZkYXRhYmFzZV9leGNsdWRlX25hbWVzKTsKIAorCS8qCisJICogT3BlbiB0aGUg b3V0cHV0IGZpbGUgaWYgcmVxdWlyZWQsIG90aGVyd2lzZSB1c2Ugc3Rkb3V0CisJICovCisJ aWYgKGZpbGVuYW1lKQorCXsKKwkJT1BGID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9X KTsKKwkJaWYgKCFPUEYpCisJCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZp bGUgXCIlc1wiOiAlbSIsCisJCQkJCSBmaWxlbmFtZSk7CisJfQorCWVsc2UKKwkJT1BGID0g c3Rkb3V0OworCiAJLyoKIAkgKiBTZXQgdGhlIGNsaWVudCBlbmNvZGluZyBpZiByZXF1ZXN0 ZWQuCiAJICovCkBAIC02NzUsNyArNjM5LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdKQogCX0KIAogCWlmICghZ2xvYmFsc19vbmx5ICYmICFyb2xlc19vbmx5ICYmICF0YWJs ZXNwYWNlc19vbmx5KQotCQlkdW1wRGF0YWJhc2VzKGNvbm4sIGFyY2hEdW1wRm9ybWF0KTsK KwkJZHVtcERhdGFiYXNlcyhjb25uKTsKIAogCVBRZmluaXNoKGNvbm4pOwogCkBAIC02ODgs NyArNjUyLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQlmY2xvc2UoT1BG KTsKIAogCQkvKiBzeW5jIHRoZSByZXN1bHRpbmcgZmlsZSwgZXJyb3JzIGFyZSBub3QgZmF0 YWwgKi8KLQkJaWYgKGRvc3luYyAmJiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpKQor CQlpZiAoZG9zeW5jKQogCQkJKHZvaWQpIGZzeW5jX2ZuYW1lKGZpbGVuYW1lLCBmYWxzZSk7 CiAJfQogCkBAIC02OTksMTQgKzY2MywxMiBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2 W10pCiBzdGF0aWMgdm9pZAogaGVscCh2b2lkKQogewotCXByaW50ZihfKCIlcyBleHBvcnRz IGEgUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGFzIGFuIFNRTCBzY3JpcHQgb3IgdG8g b3RoZXIgZm9ybWF0cy5cblxuIiksIHByb2duYW1lKTsKKwlwcmludGYoXygiJXMgZXh0cmFj dHMgYSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgaW50byBhbiBTUUwgc2NyaXB0IGZp bGUuXG5cbiIpLCBwcm9nbmFtZSk7CiAJcHJpbnRmKF8oIlVzYWdlOlxuIikpOwogCXByaW50 ZihfKCIgICVzIFtPUFRJT05dLi4uXG4iKSwgcHJvZ25hbWUpOwogCiAJcHJpbnRmKF8oIlxu R2VuZXJhbCBvcHRpb25zOlxuIikpOwogCXByaW50ZihfKCIgIC1mLCAtLWZpbGU9RklMRU5B TUUgICAgICAgICAgb3V0cHV0IGZpbGUgbmFtZVxuIikpOwotCXByaW50ZihfKCIgIC1GLCAt LWZvcm1hdD1jfGR8dHxwICAgICAgICAgb3V0cHV0IGZpbGUgZm9ybWF0IChjdXN0b20sIGRp cmVjdG9yeSwgdGFyLFxuIgotCQkJICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGxhaW4gdGV4dCAoZGVmYXVsdCkpXG4iKSk7CiAJcHJpbnRmKF8oIiAgLXYsIC0tdmVyYm9z ZSAgICAgICAgICAgICAgICB2ZXJib3NlIG1vZGVcbiIpKTsKIAlwcmludGYoXygiICAtViwg LS12ZXJzaW9uICAgICAgICAgICAgICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uLCB0 aGVuIGV4aXRcbiIpKTsKIAlwcmludGYoXygiICAtLWxvY2std2FpdC10aW1lb3V0PVRJTUVP VVQgIGZhaWwgYWZ0ZXIgd2FpdGluZyBUSU1FT1VUIGZvciBhIHRhYmxlIGxvY2tcbiIpKTsK QEAgLTEwMTMsNiArOTc1LDkgQEAgZHVtcFJvbGVzKFBHY29ubiAqY29ubikKIAkgKiBXZSBk byBpdCB0aGlzIHdheSBiZWNhdXNlIGNvbmZpZyBzZXR0aW5ncyBmb3Igcm9sZXMgY291bGQg bWVudGlvbiB0aGUKIAkgKiBuYW1lcyBvZiBvdGhlciByb2xlcy4KIAkgKi8KKwlpZiAoUFFu dHVwbGVzKHJlcykgPiAwKQorCQlmcHJpbnRmKE9QRiwgIlxuLS1cbi0tIFVzZXIgQ29uZmln dXJhdGlvbnNcbi0tXG4iKTsKKwogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsg aSsrKQogCQlkdW1wVXNlckNvbmZpZyhjb25uLCBQUWdldHZhbHVlKHJlcywgaSwgaV9yb2xu YW1lKSk7CiAKQEAgLTE1MjYsNyArMTQ5MSw2IEBAIGR1bXBVc2VyQ29uZmlnKFBHY29ubiAq Y29ubiwgY29uc3QgY2hhciAqdXNlcm5hbWUpCiB7CiAJUFFFeHBCdWZmZXIgYnVmID0gY3Jl YXRlUFFFeHBCdWZmZXIoKTsKIAlQR3Jlc3VsdCAgICpyZXM7Ci0Jc3RhdGljIGJvb2wgaGVh ZGVyX2RvbmUgPSBmYWxzZTsKIAogCXByaW50ZlBRRXhwQnVmZmVyKGJ1ZiwgIlNFTEVDVCB1 bm5lc3Qoc2V0Y29uZmlnKSBGUk9NIHBnX2RiX3JvbGVfc2V0dGluZyAiCiAJCQkJCSAgIldI RVJFIHNldGRhdGFiYXNlID0gMCBBTkQgc2V0cm9sZSA9ICIKQEAgLTE1MzgsMTMgKzE1MDIs NyBAQCBkdW1wVXNlckNvbmZpZyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnVzZXJuYW1l KQogCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBidWYtPmRhdGEpOwogCiAJaWYgKFBRbnR1 cGxlcyhyZXMpID4gMCkKLQl7Ci0JCWlmICghaGVhZGVyX2RvbmUpCi0JCQlmcHJpbnRmKE9Q RiwgIlxuLS1cbi0tIFVzZXIgQ29uZmlndXJhdGlvbnNcbi0tXG4iKTsKLQkJaGVhZGVyX2Rv bmUgPSB0cnVlOwotCiAJCWZwcmludGYoT1BGLCAiXG4tLVxuLS0gVXNlciBDb25maWcgXCIl c1wiXG4tLVxuXG4iLCB1c2VybmFtZSk7Ci0JfQogCiAJZm9yIChpbnQgaSA9IDA7IGkgPCBQ UW50dXBsZXMocmVzKTsgaSsrKQogCXsKQEAgLTE2MTgsMTMgKzE1NzYsMTAgQEAgZXhwYW5k X2RibmFtZV9wYXR0ZXJucyhQR2Nvbm4gKmNvbm4sCiAgKiBEdW1wIGNvbnRlbnRzIG9mIGRh dGFiYXNlcy4KICAqLwogc3RhdGljIHZvaWQKLWR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25u LCBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0KQorZHVtcERhdGFiYXNlcyhQR2Nvbm4g KmNvbm4pCiB7CiAJUEdyZXN1bHQgICAqcmVzOwogCWludAkJCWk7Ci0JY2hhcgkJZGJfc3Vi ZGlyW01BWFBHUEFUSF07Ci0JY2hhcgkJZGJmaWxlcGF0aFtNQVhQR1BBVEhdOwotCUZJTEUJ ICAgKm1hcF9maWxlID0gTlVMTDsKIAogCS8qCiAJICogU2tpcCBkYXRhYmFzZXMgbWFya2Vk IG5vdCBkYXRhbGxvd2Nvbm4sIHNpbmNlIHdlJ2QgYmUgdW5hYmxlIHRvIGNvbm5lY3QKQEAg LTE2MzgsNDIgKzE1OTMsMTggQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4sIEFyY2hp dmVGb3JtYXQgYXJjaER1bXBGb3JtYXQpCiAJICogZG9lc24ndCBoYXZlIHNvbWUgZmFpbHVy ZSBtb2RlIHdpdGggLS1jbGVhbi4KIAkgKi8KIAlyZXMgPSBleGVjdXRlUXVlcnkoY29ubiwK LQkJCQkJICAgIlNFTEVDVCBkYXRuYW1lLCBvaWQgIgorCQkJCQkgICAiU0VMRUNUIGRhdG5h bWUgIgogCQkJCQkgICAiRlJPTSBwZ19kYXRhYmFzZSBkICIKIAkJCQkJICAgIldIRVJFIGRh dGFsbG93Y29ubiBBTkQgZGF0Y29ubmxpbWl0ICE9IC0yICIKIAkJCQkJICAgIk9SREVSIEJZ IChkYXRuYW1lIDw+ICd0ZW1wbGF0ZTEnKSwgZGF0bmFtZSIpOwogCi0JaWYgKGFyY2hEdW1w Rm9ybWF0ID09IGFyY2hOdWxsICYmIFBRbnR1cGxlcyhyZXMpID4gMCkKKwlpZiAoUFFudHVw bGVzKHJlcykgPiAwKQogCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEYXRhYmFzZXNcbi0tXG5c biIpOwogCi0JLyoKLQkgKiBJZiBkaXJlY3RvcnkvdGFyL2N1c3RvbSBmb3JtYXQgaXMgc3Bl Y2lmaWVkLCBjcmVhdGUgYSBzdWJkaXJlY3RvcnkKLQkgKiB1bmRlciB0aGUgbWFpbiBkaXJl Y3RvcnkgYW5kIGVhY2ggZGF0YWJhc2UgZHVtcCBmaWxlIG9yIHN1YmRpcmVjdG9yeQotCSAq IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGF0IHN1YmRpcmVjdG9yeSBieSBwZ19kdW1wLgotCSAq LwotCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKLQl7Ci0JCWNoYXIJCW1hcF9m aWxlX3BhdGhbTUFYUEdQQVRIXTsKLQotCQlzbnByaW50ZihkYl9zdWJkaXIsIE1BWFBHUEFU SCwgIiVzL2RhdGFiYXNlcyIsIGZpbGVuYW1lKTsKLQotCQkvKiBDcmVhdGUgYSBzdWJkaXJl Y3Rvcnkgd2l0aCAnZGF0YWJhc2VzJyBuYW1lIHVuZGVyIG1haW4gZGlyZWN0b3J5LiAqLwot CQlpZiAobWtkaXIoZGJfc3ViZGlyLCBwZ19kaXJfY3JlYXRlX21vZGUpICE9IDApCi0JCQlw Z19mYXRhbCgiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsIGRiX3N1 YmRpcik7Ci0KLQkJc25wcmludGYobWFwX2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAiJXMvbWFw LmRhdCIsIGZpbGVuYW1lKTsKLQotCQkvKiBDcmVhdGUgYSBtYXAgZmlsZSAodG8gc3RvcmUg ZGJvaWQgYW5kIGRibmFtZSkgKi8KLQkJbWFwX2ZpbGUgPSBmb3BlbihtYXBfZmlsZV9wYXRo LCBQR19CSU5BUllfVyk7Ci0JCWlmICghbWFwX2ZpbGUpCi0JCQlwZ19mYXRhbCgiY291bGQg bm90IG9wZW4gZmlsZSBcIiVzXCI6ICVtIiwgbWFwX2ZpbGVfcGF0aCk7Ci0JfQotCiAJZm9y IChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJewogCQljaGFyCSAgICpkYm5h bWUgPSBQUWdldHZhbHVlKHJlcywgaSwgMCk7Ci0JCWNoYXIJICAgKm9pZCA9IFBRZ2V0dmFs dWUocmVzLCBpLCAxKTsKLQkJY29uc3QgY2hhciAqY3JlYXRlX29wdHMgPSAiIjsKKwkJY29u c3QgY2hhciAqY3JlYXRlX29wdHM7CiAJCWludAkJCXJldDsKIAogCQkvKiBTa2lwIHRlbXBs YXRlMCwgZXZlbiBpZiBpdCdzIG5vdCBtYXJrZWQgIWRhdGFsbG93Y29ubi4gKi8KQEAgLTE2 ODcsMjcgKzE2MTgsOSBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubiwgQXJjaGl2ZUZv cm1hdCBhcmNoRHVtcEZvcm1hdCkKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJLyoKLQkJICog SWYgdGhpcyBpcyBub3QgYSBwbGFpbiBmb3JtYXQgZHVtcCwgdGhlbiBhcHBlbmQgZGJvaWQg YW5kIGRibmFtZSB0bwotCQkgKiB0aGUgbWFwLmRhdCBmaWxlLgotCQkgKi8KLQkJaWYgKGFy Y2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQotCQl7Ci0JCQlpZiAoYXJjaER1bXBGb3JtYXQg PT0gYXJjaEN1c3RvbSkKLQkJCQlzbnByaW50ZihkYmZpbGVwYXRoLCBNQVhQR1BBVEgsICJc IiVzXCIvXCIlc1wiLmRtcCIsIGRiX3N1YmRpciwgb2lkKTsKLQkJCWVsc2UgaWYgKGFyY2hE dW1wRm9ybWF0ID09IGFyY2hUYXIpCi0JCQkJc25wcmludGYoZGJmaWxlcGF0aCwgTUFYUEdQ QVRILCAiXCIlc1wiL1wiJXNcIi50YXIiLCBkYl9zdWJkaXIsIG9pZCk7Ci0JCQllbHNlCi0J CQkJc25wcmludGYoZGJmaWxlcGF0aCwgTUFYUEdQQVRILCAiXCIlc1wiL1wiJXNcIiIsIGRi X3N1YmRpciwgb2lkKTsKLQotCQkJLyogUHV0IG9uZSBsaW5lIGVudHJ5IGZvciBkYm9pZCBh bmQgZGJuYW1lIGluIG1hcCBmaWxlLiAqLwotCQkJZnByaW50ZihtYXBfZmlsZSwgIiVzICVz XG4iLCBvaWQsIGRibmFtZSk7Ci0JCX0KLQogCQlwZ19sb2dfaW5mbygiZHVtcGluZyBkYXRh YmFzZSBcIiVzXCIiLCBkYm5hbWUpOwogCi0JCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNo TnVsbCkKLQkJCWZwcmludGYoT1BGLCAiLS1cbi0tIERhdGFiYXNlIFwiJXNcIiBkdW1wXG4t LVxuXG4iLCBkYm5hbWUpOworCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEYXRhYmFzZSBcIiVz XCIgZHVtcFxuLS1cblxuIiwgZGJuYW1lKTsKIAogCQkvKgogCQkgKiBXZSBhc3N1bWUgdGhh dCAidGVtcGxhdGUxIiBhbmQgInBvc3RncmVzIiBhbHJlYWR5IGV4aXN0IGluIHRoZQpAQCAt MTcyMSw5ICsxNjM0LDEyIEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uLCBBcmNoaXZl Rm9ybWF0IGFyY2hEdW1wRm9ybWF0KQogCQl7CiAJCQlpZiAob3V0cHV0X2NsZWFuKQogCQkJ CWNyZWF0ZV9vcHRzID0gIi0tY2xlYW4gLS1jcmVhdGUiOwotCQkJLyogU2luY2UgcGdfZHVt cCB3b24ndCBlbWl0IGEgXGNvbm5lY3QgY29tbWFuZCwgd2UgbXVzdCAqLwotCQkJZWxzZSBp ZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQllbHNlCisJCQl7CisJCQkJY3Jl YXRlX29wdHMgPSAiIjsKKwkJCQkvKiBTaW5jZSBwZ19kdW1wIHdvbid0IGVtaXQgYSBcY29u bmVjdCBjb21tYW5kLCB3ZSBtdXN0ICovCiAJCQkJZnByaW50ZihPUEYsICJcXGNvbm5lY3Qg JXNcblxuIiwgZGJuYW1lKTsKKwkJCX0KIAkJfQogCQllbHNlCiAJCQljcmVhdGVfb3B0cyA9 ICItLWNyZWF0ZSI7CkBAIC0xNzMxLDMwICsxNjQ3LDE5IEBAIGR1bXBEYXRhYmFzZXMoUEdj b25uICpjb25uLCBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0KQogCQlpZiAoZmlsZW5h bWUpCiAJCQlmY2xvc2UoT1BGKTsKIAotCQlyZXQgPSBydW5QZ0R1bXAoZGJuYW1lLCBjcmVh dGVfb3B0cywgZGJmaWxlcGF0aCwgYXJjaER1bXBGb3JtYXQpOworCQlyZXQgPSBydW5QZ0R1 bXAoZGJuYW1lLCBjcmVhdGVfb3B0cyk7CiAJCWlmIChyZXQgIT0gMCkKIAkJCXBnX2ZhdGFs KCJwZ19kdW1wIGZhaWxlZCBvbiBkYXRhYmFzZSBcIiVzXCIsIGV4aXRpbmciLCBkYm5hbWUp OwogCiAJCWlmIChmaWxlbmFtZSkKIAkJewotCQkJY2hhcgkJZ2xvYmFsX3BhdGhbTUFYUEdQ QVRIXTsKLQotCQkJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQotCQkJCXNucHJp bnRmKGdsb2JhbF9wYXRoLCBNQVhQR1BBVEgsICIlcy9nbG9iYWwuZGF0IiwgZmlsZW5hbWUp OwotCQkJZWxzZQotCQkJCXNucHJpbnRmKGdsb2JhbF9wYXRoLCBNQVhQR1BBVEgsICIlcyIs IGZpbGVuYW1lKTsKLQotCQkJT1BGID0gZm9wZW4oZ2xvYmFsX3BhdGgsIFBHX0JJTkFSWV9B KTsKKwkJCU9QRiA9IGZvcGVuKGZpbGVuYW1lLCBQR19CSU5BUllfQSk7CiAJCQlpZiAoIU9Q RikKIAkJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlLW9wZW4gdGhlIG91dHB1dCBmaWxlIFwi JXNcIjogJW0iLAotCQkJCQkJIGdsb2JhbF9wYXRoKTsKKwkJCQkJCSBmaWxlbmFtZSk7CiAJ CX0KIAl9CiAKLQkvKiBDbG9zZSBtYXAgZmlsZSAqLwotCWlmIChhcmNoRHVtcEZvcm1hdCAh PSBhcmNoTnVsbCkKLQkJZmNsb3NlKG1hcF9maWxlKTsKLQogCVBRY2xlYXIocmVzKTsKIH0K IApAQCAtMTc2NCw4ICsxNjY5LDcgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4sIEFy Y2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQpCiAgKiBSdW4gcGdfZHVtcCBvbiBkYm5hbWUs IHdpdGggc3BlY2lmaWVkIG9wdGlvbnMuCiAgKi8KIHN0YXRpYyBpbnQKLXJ1blBnRHVtcChj b25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzLCBjaGFyICpkYmZp bGUsCi0JCSAgQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZvcm1hdCkKK3J1blBnRHVtcChjb25z dCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzKQogewogCVBRRXhwQnVm ZmVyRGF0YSBjb25uc3RyYnVmOwogCVBRRXhwQnVmZmVyRGF0YSBjbWQ7CkBAIC0xNzc0LDM2 ICsxNjc4LDE3IEBAIHJ1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIg KmNyZWF0ZV9vcHRzLCBjaGFyICpkYmZpbGUsCiAJaW5pdFBRRXhwQnVmZmVyKCZjb25uc3Ry YnVmKTsKIAlpbml0UFFFeHBCdWZmZXIoJmNtZCk7CiAKKwlwcmludGZQUUV4cEJ1ZmZlcigm Y21kLCAiXCIlc1wiICVzICVzIiwgcGdfZHVtcF9iaW4sCisJCQkJCSAgcGdkdW1wb3B0cy0+ ZGF0YSwgY3JlYXRlX29wdHMpOworCiAJLyoKLQkgKiBJZiB0aGlzIGlzIG5vdCBhIHBsYWlu IGZvcm1hdCBkdW1wLCB0aGVuIGFwcGVuZCBmaWxlIG5hbWUgYW5kIGR1bXAKLQkgKiBmb3Jt YXQgdG8gdGhlIHBnX2R1bXAgY29tbWFuZCB0byBnZXQgYXJjaGl2ZSBkdW1wLgorCSAqIElm IHdlIGhhdmUgYSBmaWxlbmFtZSwgdXNlIHRoZSB1bmRvY3VtZW50ZWQgcGxhaW4tYXBwZW5k IHBnX2R1bXAKKwkgKiBmb3JtYXQuCiAJICovCi0JaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFy Y2hOdWxsKQotCXsKLQkJcHJpbnRmUFFFeHBCdWZmZXIoJmNtZCwgIlwiJXNcIiAtZiAlcyAl cyIsIHBnX2R1bXBfYmluLAotCQkJCQkJICBkYmZpbGUsIGNyZWF0ZV9vcHRzKTsKLQotCQlp ZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaERpcmVjdG9yeSkKLQkJCWFwcGVuZFBRRXhwQnVm ZmVyU3RyKCZjbWQsICIgIC0tZm9ybWF0PWRpcmVjdG9yeSAiKTsKLQkJZWxzZSBpZiAoYXJj aER1bXBGb3JtYXQgPT0gYXJjaEN1c3RvbSkKLQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZj bWQsICIgIC0tZm9ybWF0PWN1c3RvbSAiKTsKLQkJZWxzZSBpZiAoYXJjaER1bXBGb3JtYXQg PT0gYXJjaFRhcikKLQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgIC0tZm9ybWF0 PXRhciAiKTsKLQl9CisJaWYgKGZpbGVuYW1lKQorCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigm Y21kLCAiIC1GYSAiKTsKIAllbHNlCi0JewotCQlwcmludGZQUUV4cEJ1ZmZlcigmY21kLCAi XCIlc1wiICVzICVzIiwgcGdfZHVtcF9iaW4sCi0JCQkJCQkgIHBnZHVtcG9wdHMtPmRhdGEs IGNyZWF0ZV9vcHRzKTsKLQotCQkvKgotCQkgKiBJZiB3ZSBoYXZlIGEgZmlsZW5hbWUsIHVz ZSB0aGUgdW5kb2N1bWVudGVkIHBsYWluLWFwcGVuZCBwZ19kdW1wCi0JCSAqIGZvcm1hdC4K LQkJICovCi0JCWlmIChmaWxlbmFtZSkKLQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQs ICIgLUZhICIpOwotCQllbHNlCi0JCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1G cCAiKTsKLQl9CisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZwICIpOwogCiAJ LyoKIAkgKiBBcHBlbmQgdGhlIGRhdGFiYXNlIG5hbWUgdG8gdGhlIGFscmVhZHktY29uc3Ry dWN0ZWQgc3RlbSBvZiBjb25uZWN0aW9uCkBAIC0xOTQ4LDM2ICsxODMzLDMgQEAgcmVhZF9k dW1wYWxsX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFNpbXBsZVN0cmluZ0xpc3Qg KnBhdHRlcm4pCiAKIAlmaWx0ZXJfZnJlZSgmZnN0YXRlKTsKIH0KLQotLyoKLSAqIHBhcnNl RHVtcEZvcm1hdAotICoKLSAqIFRoaXMgd2lsbCB2YWxpZGF0ZSBkdW1wIGZvcm1hdHMuCi0g Ki8KLXN0YXRpYyBBcmNoaXZlRm9ybWF0Ci1wYXJzZUR1bXBGb3JtYXQoY29uc3QgY2hhciAq Zm9ybWF0KQotewotCUFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQ7Ci0KLQlpZiAocGdf c3RyY2FzZWNtcChmb3JtYXQsICJjIikgPT0gMCkKLQkJYXJjaER1bXBGb3JtYXQgPSBhcmNo Q3VzdG9tOwotCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAiY3VzdG9tIikgPT0g MCkKLQkJYXJjaER1bXBGb3JtYXQgPSBhcmNoQ3VzdG9tOwotCWVsc2UgaWYgKHBnX3N0cmNh c2VjbXAoZm9ybWF0LCAiZCIpID09IDApCi0JCWFyY2hEdW1wRm9ybWF0ID0gYXJjaERpcmVj dG9yeTsKLQllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgImRpcmVjdG9yeSIpID09 IDApCi0JCWFyY2hEdW1wRm9ybWF0ID0gYXJjaERpcmVjdG9yeTsKLQllbHNlIGlmIChwZ19z dHJjYXNlY21wKGZvcm1hdCwgInAiKSA9PSAwKQotCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hO dWxsOwotCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAicGxhaW4iKSA9PSAwKQot CQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hOdWxsOwotCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAo Zm9ybWF0LCAidCIpID09IDApCi0JCWFyY2hEdW1wRm9ybWF0ID0gYXJjaFRhcjsKLQllbHNl IGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInRhciIpID09IDApCi0JCWFyY2hEdW1wRm9y bWF0ID0gYXJjaFRhcjsKLQllbHNlCi0JCXBnX2ZhdGFsKCJ1bnJlY29nbml6ZWQgb3V0cHV0 IGZvcm1hdCBcIiVzXCI7IHBsZWFzZSBzcGVjaWZ5IFwiY1wiLCBcImRcIiwgXCJwXCIsIG9y IFwidFwiIiwKLQkJCQkgZm9ybWF0KTsKLQotCXJldHVybiBhcmNoRHVtcEZvcm1hdDsKLX0K ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMgYi9zcmMvYmluL3Bn X2R1bXAvcGdfcmVzdG9yZS5jCmluZGV4IDZlZjc4OWNiMDZkLi5iNGUxYWNkYjYzZiAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYworKysgYi9zcmMvYmluL3Bn X2R1bXAvcGdfcmVzdG9yZS5jCkBAIC0yLDcgKzIsNyBAQAogICoKICAqIHBnX3Jlc3RvcmUu YwogICoJcGdfcmVzdG9yZSBpcyBhbiB1dGlsaXR5IGV4dHJhY3RpbmcgcG9zdGdyZXMgZGF0 YWJhc2UgZGVmaW5pdGlvbnMKLSAqCWZyb20gYSBiYWNrdXAgYXJjaGl2ZSBjcmVhdGVkIGJ5 IHBnX2R1bXAvcGdfZHVtcGFsbCB1c2luZyB0aGUgYXJjaGl2ZXIKKyAqCWZyb20gYSBiYWNr dXAgYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXAgdXNpbmcgdGhlIGFyY2hpdmVyCiAgKglp bnRlcmZhY2UuCiAgKgogICoJcGdfcmVzdG9yZSB3aWxsIHJlYWQgdGhlIGJhY2t1cCBhcmNo aXZlIGFuZApAQCAtNDEsMTUgKzQxLDExIEBACiAjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIK IAogI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpZmRlZiBI QVZFX1RFUk1JT1NfSAogI2luY2x1ZGUgPHRlcm1pb3MuaD4KICNlbmRpZgogCi0jaW5jbHVk ZSAiY29tbW9uL3N0cmluZy5oIgotI2luY2x1ZGUgImNvbm5lY3RkYi5oIgogI2luY2x1ZGUg ImZlX3V0aWxzL29wdGlvbl91dGlscy5oIgotI2luY2x1ZGUgImZlX3V0aWxzL3N0cmluZ191 dGlscy5oIgogI2luY2x1ZGUgImZpbHRlci5oIgogI2luY2x1ZGUgImdldG9wdF9sb25nLmgi CiAjaW5jbHVkZSAicGFyYWxsZWwuaCIKQEAgLTU3LDQzICs1MywxOCBAQAogCiBzdGF0aWMg dm9pZCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSk7CiBzdGF0aWMgdm9pZCByZWFkX3Jl c3RvcmVfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgUmVzdG9yZU9wdGlvbnMgKm9w dHMpOwotc3RhdGljIGJvb2wgZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5KGNvbnN0IGNoYXIg KmRpciwgY29uc3QgY2hhciAqZmlsZW5hbWUpOwotc3RhdGljIGludAlyZXN0b3JlX29uZV9k YXRhYmFzZShjb25zdCBjaGFyICppbnB1dEZpbGVTcGVjLCBSZXN0b3JlT3B0aW9ucyAqb3B0 cywKLQkJCQkJCQkJIGludCBudW1Xb3JrZXJzLCBib29sIGFwcGVuZF9kYXRhLCBpbnQgbnVt KTsKLXN0YXRpYyBpbnQJcmVhZF9vbmVfc3RhdGVtZW50KFN0cmluZ0luZm8gaW5CdWYsIEZJ TEUgKnBmaWxlKTsKLXN0YXRpYyBpbnQJcmVzdG9yZV9hbGxfZGF0YWJhc2VzKFBHY29ubiAq Y29ubiwgY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsCi0JCQkJCQkJCSAgU2ltcGxlU3RyaW5n TGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zLCBSZXN0b3JlT3B0aW9ucyAqb3B0cywgaW50IG51 bVdvcmtlcnMpOwotc3RhdGljIGludAlwcm9jZXNzX2dsb2JhbF9zcWxfY29tbWFuZHMoUEdj b25uICpjb25uLCBjb25zdCBjaGFyICpkdW1wZGlycGF0aCwKLQkJCQkJCQkJCQljb25zdCBj aGFyICpvdXRmaWxlKTsKLXN0YXRpYyB2b2lkIGNvcHlfb3JfcHJpbnRfZ2xvYmFsX2ZpbGUo Y29uc3QgY2hhciAqb3V0ZmlsZSwgRklMRSAqcGZpbGUpOwotc3RhdGljIGludAlnZXRfZGJu YW1lc19saXN0X3RvX3Jlc3RvcmUoUEdjb25uICpjb25uLAotCQkJCQkJCQkJCVNpbXBsZVB0 ckxpc3QgKmRibmFtZV9vaWRfbGlzdCwKLQkJCQkJCQkJCQlTaW1wbGVTdHJpbmdMaXN0IGRi X2V4Y2x1ZGVfcGF0dGVybnMpOwotc3RhdGljIGludAlnZXRfZGJuYW1lX29pZF9saXN0X2Zy b21fbWZpbGUoY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsCi0JCQkJCQkJCQkJICAgU2ltcGxl UHRyTGlzdCAqZGJuYW1lX29pZF9saXN0KTsKLQotLyoKLSAqIFN0b3JlcyBhIGRhdGFiYXNl IE9JRCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgbmFtZS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3Qg RGJPaWROYW1lCi17Ci0JT2lkCQkJb2lkOwotCWNoYXIJCXN0cltGTEVYSUJMRV9BUlJBWV9N RU1CRVJdOyAvKiBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIGhlcmUgKi8KLX0gRGJPaWROYW1l OwotCiAKIGludAogbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJUmVzdG9yZU9w dGlvbnMgKm9wdHM7CiAJaW50CQkJYzsKKwlpbnQJCQlleGl0X2NvZGU7CiAJaW50CQkJbnVt V29ya2VycyA9IDE7CisJQXJjaGl2ZSAgICAqQUg7CiAJY2hhcgkgICAqaW5wdXRGaWxlU3Bl YzsKIAlib29sCQlkYXRhX29ubHkgPSBmYWxzZTsKIAlib29sCQlzY2hlbWFfb25seSA9IGZh bHNlOwotCWludAkJCW5fZXJyb3JzID0gMDsKLQlib29sCQlnbG9iYWxzX29ubHkgPSBmYWxz ZTsKLQlTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMgPSB7TlVMTCwgTlVM TH07CiAJc3RhdGljIGludAlkaXNhYmxlX3RyaWdnZXJzID0gMDsKIAlzdGF0aWMgaW50CWVu YWJsZV9yb3dfc2VjdXJpdHkgPSAwOwogCXN0YXRpYyBpbnQJaWZfZXhpc3RzID0gMDsKQEAg LTExOSw3ICs5MCw2IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl7ImNsZWFu IiwgMCwgTlVMTCwgJ2MnfSwKIAkJeyJjcmVhdGUiLCAwLCBOVUxMLCAnQyd9LAogCQl7ImRh dGEtb25seSIsIDAsIE5VTEwsICdhJ30sCi0JCXsiZ2xvYmFscy1vbmx5IiwgMCwgTlVMTCwg J2cnfSwKIAkJeyJkYm5hbWUiLCAxLCBOVUxMLCAnZCd9LAogCQl7ImV4aXQtb24tZXJyb3Ii LCAwLCBOVUxMLCAnZSd9LAogCQl7ImV4Y2x1ZGUtc2NoZW1hIiwgMSwgTlVMTCwgJ04nfSwK QEAgLTE3NCw3ICsxNDQsNiBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJeyJ3 aXRoLXN0YXRpc3RpY3MiLCBub19hcmd1bWVudCwgJndpdGhfc3RhdGlzdGljcywgMX0sCiAJ CXsic3RhdGlzdGljcy1vbmx5Iiwgbm9fYXJndW1lbnQsICZzdGF0aXN0aWNzX29ubHksIDF9 LAogCQl7ImZpbHRlciIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA0fSwKLQkJeyJleGNs dWRlLWRhdGFiYXNlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDZ9LAogCiAJCXtOVUxM LCAwLCBOVUxMLCAwfQogCX07CkBAIC0yMDMsNyArMTcyLDcgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCiAJCX0KIAl9CiAKLQl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdj LCBhcmd2LCAiYWNDZDplZjpGOmdoOkk6ajpsTDpuOk46T3A6UDpSc1M6dDpUOlU6dndXeDEi LAorCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY0NkOmVmOkY6aDpJ Omo6bEw6bjpOOk9wOlA6UnNTOnQ6VDpVOnZ3V3gxIiwKIAkJCQkJCQljbWRvcHRzLCBOVUxM KSkgIT0gLTEpCiAJewogCQlzd2l0Y2ggKGMpCkBAIC0yMzAsMTQgKzE5OSwxMSBAQCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQlpZiAoc3RybGVuKG9wdGFyZykgIT0gMCkK IAkJCQkJb3B0cy0+Zm9ybWF0TmFtZSA9IHBnX3N0cmR1cChvcHRhcmcpOwogCQkJCWJyZWFr OwotCQkJY2FzZSAnZyc6Ci0JCQkJLyogcmVzdG9yZSBvbmx5IGdsb2JhbC5kYXQgZmlsZSBm cm9tIGRpcmVjdG9yeSAqLwotCQkJCWdsb2JhbHNfb25seSA9IHRydWU7Ci0JCQkJYnJlYWs7 CiAJCQljYXNlICdoJzoKIAkJCQlpZiAoc3RybGVuKG9wdGFyZykgIT0gMCkKIAkJCQkJb3B0 cy0+Y3BhcmFtcy5wZ2hvc3QgPSBwZ19zdHJkdXAob3B0YXJnKTsKIAkJCQlicmVhazsKKwog CQkJY2FzZSAnaic6CQkJLyogbnVtYmVyIG9mIHJlc3RvcmUgam9icyAqLwogCQkJCWlmICgh b3B0aW9uX3BhcnNlX2ludChvcHRhcmcsICItai8tLWpvYnMiLCAxLAogCQkJCQkJCQkJICBQ R19NQVhfSk9CUywKQEAgLTM1Miw5ICszMTgsNiBAQCBtYWluKGludCBhcmdjLCBjaGFyICoq YXJndikKIAkJCQkJZXhpdCgxKTsKIAkJCQlvcHRzLT5leGl0X29uX2Vycm9yID0gdHJ1ZTsK IAkJCQlicmVhazsKLQkJCWNhc2UgNjoJCQkJLyogZGF0YWJhc2UgcGF0dGVybnMgdG8gc2tp cCAqLwotCQkJCXNpbXBsZV9zdHJpbmdfbGlzdF9hcHBlbmQoJmRiX2V4Y2x1ZGVfcGF0dGVy bnMsIG9wdGFyZyk7Ci0JCQkJYnJlYWs7CiAKIAkJCWRlZmF1bHQ6CiAJCQkJLyogZ2V0b3B0 X2xvbmcgYWxyZWFkeSBlbWl0dGVkIGEgY29tcGxhaW50ICovCkBAIC0zODIsMTMgKzM0NSw2 IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWlmICghb3B0cy0+Y3BhcmFtcy5k Ym5hbWUgJiYgIW9wdHMtPmZpbGVuYW1lICYmICFvcHRzLT50b2NTdW1tYXJ5KQogCQlwZ19m YXRhbCgib25lIG9mIC1kLy0tZGJuYW1lIGFuZCAtZi8tLWZpbGUgbXVzdCBiZSBzcGVjaWZp ZWQiKTsKIAotCWlmIChkYl9leGNsdWRlX3BhdHRlcm5zLmhlYWQgIT0gTlVMTCAmJiBnbG9i YWxzX29ubHkpCi0JewotCQlwZ19sb2dfZXJyb3IoIm9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJh c2UgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtZy8tLWdsb2JhbHMtb25seSIpOwot CQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3Jt YXRpb24uIiwgcHJvZ25hbWUpOwotCQlleGl0X25pY2VseSgxKTsKLQl9Ci0KIAkvKiBTaG91 bGQgZ2V0IGF0IG1vc3Qgb25lIG9mIC1kIGFuZCAtZiwgZWxzZSB1c2VyIGlzIGNvbmZ1c2Vk ICovCiAJaWYgKG9wdHMtPmNwYXJhbXMuZGJuYW1lKQogCXsKQEAgLTQ5NiwxMTQgKzQ1Miw2 IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCQkgb3B0cy0+Zm9ybWF0TmFt ZSk7CiAJfQogCi0JLyoKLQkgKiBJZiB0b2MuZGF0IGZpbGUgaXMgbm90IHByZXNlbnQgaW4g dGhlIGN1cnJlbnQgcGF0aCwgdGhlbiBjaGVjayBmb3IKLQkgKiBnbG9iYWwuZGF0LiAgSWYg Z2xvYmFsLmRhdCBmaWxlIGlzIHByZXNlbnQsIHRoZW4gcmVzdG9yZSBhbGwgdGhlCi0JICog ZGF0YWJhc2VzIGZyb20gbWFwLmRhdCAoaWYgaXQgZXhpc3RzKSwgYnV0IHNraXAgcmVzdG9y aW5nIHRob3NlCi0JICogbWF0Y2hpbmcgLS1leGNsdWRlLWRhdGFiYXNlIHBhdHRlcm5zLgot CSAqLwotCWlmIChpbnB1dEZpbGVTcGVjICE9IE5VTEwgJiYgIWZpbGVfZXhpc3RzX2luX2Rp cmVjdG9yeShpbnB1dEZpbGVTcGVjLCAidG9jLmRhdCIpICYmCi0JCWZpbGVfZXhpc3RzX2lu X2RpcmVjdG9yeShpbnB1dEZpbGVTcGVjLCAiZ2xvYmFsLmRhdCIpKQotCXsKLQkJUEdjb25u CSAgICpjb25uID0gTlVMTDsJLyogQ29ubmVjdGlvbiB0byByZXN0b3JlIGdsb2JhbCBzcWwK LQkJCQkJCQkJCSAqIGNvbW1hbmRzLiAqLwotCi0JCS8qCi0JCSAqIENhbiBvbmx5IHVzZSAt LWxpc3Qgb3IgLS11c2UtbGlzdCBvcHRpb25zIHdpdGggYSBzaW5nbGUgZGF0YWJhc2UKLQkJ ICogZHVtcC4KLQkJICovCi0JCWlmIChvcHRzLT50b2NTdW1tYXJ5KQotCQkJcGdfZmF0YWwo Im9wdGlvbiAtbC8tLWxpc3QgY2Fubm90IGJlIHVzZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJj aGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwiKTsKLQkJZWxzZSBpZiAob3B0cy0+dG9jRmls ZSkKLQkJCXBnX2ZhdGFsKCJvcHRpb24gLUwvLS11c2UtbGlzdCBjYW5ub3QgYmUgdXNlZCB3 aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbCIpOwotCi0J CS8qCi0JCSAqIFRvIHJlc3RvcmUgZnJvbSBhIHBnX2R1bXBhbGwgYXJjaGl2ZSwgLUMgKGNy ZWF0ZSBkYXRhYmFzZSkgb3B0aW9uCi0JCSAqIG11c3QgYmUgc3BlY2lmaWVkIHVubGVzcyB3 ZSBhcmUgb25seSByZXN0b3JpbmcgZ2xvYmFscy4KLQkJICovCi0JCWlmICghZ2xvYmFsc19v bmx5ICYmIG9wdHMtPmNyZWF0ZURCICE9IDEpCi0JCXsKLQkJCXBnX2xvZ19lcnJvcigib3B0 aW9uIC1DLy0tY3JlYXRlIG11c3QgYmUgc3BlY2lmaWVkIHdoZW4gcmVzdG9yaW5nIGFuIGFy Y2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsIik7Ci0JCQlwZ19sb2dfZXJyb3JfaGludCgi VHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOwot CQkJcGdfbG9nX2Vycm9yX2hpbnQoIkluZGl2aWR1YWwgZGF0YWJhc2VzIGNhbiBiZSByZXN0 b3JlZCB1c2luZyB0aGVpciBzcGVjaWZpYyBhcmNoaXZlcy4iKTsKLQkJCWV4aXRfbmljZWx5 KDEpOwotCQl9Ci0KLQkJLyoKLQkJICogQ29ubmVjdCB0byB0aGUgZGF0YWJhc2UgdG8gZXhl Y3V0ZSBnbG9iYWwgc3FsIGNvbW1hbmRzIGZyb20KLQkJICogZ2xvYmFsLmRhdCBmaWxlLgot CQkgKi8KLQkJaWYgKG9wdHMtPmNwYXJhbXMuZGJuYW1lKQotCQl7Ci0JCQljb25uID0gQ29u bmVjdERhdGFiYXNlKG9wdHMtPmNwYXJhbXMuZGJuYW1lLCBOVUxMLCBvcHRzLT5jcGFyYW1z LnBnaG9zdCwKLQkJCQkJCQkJICAgb3B0cy0+Y3BhcmFtcy5wZ3BvcnQsIG9wdHMtPmNwYXJh bXMudXNlcm5hbWUsIFRSSV9ERUZBVUxULAotCQkJCQkJCQkgICBmYWxzZSwgcHJvZ25hbWUs IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOwotCi0KLQkJCWlmICghY29ubikKLQkJCQlwZ19m YXRhbCgiY291bGQgbm90IGNvbm5lY3QgdG8gZGF0YWJhc2UgXCIlc1wiIiwgb3B0cy0+Y3Bh cmFtcy5kYm5hbWUpOwotCQl9Ci0KLQkJLyogSWYgZ2xvYmFscy1vbmx5LCB0aGVuIHJldHVy biBmcm9tIGhlcmUuICovCi0JCWlmIChnbG9iYWxzX29ubHkpCi0JCXsKLQkJCS8qCi0JCQkg KiBPcGVuIGdsb2JhbC5kYXQgZmlsZSBhbmQgZXhlY3V0ZS9hcHBlbmQgYWxsIHRoZSBnbG9i YWwgc3FsCi0JCQkgKiBjb21tYW5kcy4KLQkJCSAqLwotCQkJbl9lcnJvcnMgPSBwcm9jZXNz X2dsb2JhbF9zcWxfY29tbWFuZHMoY29ubiwgaW5wdXRGaWxlU3BlYywKLQkJCQkJCQkJCQkJ CSAgIG9wdHMtPmZpbGVuYW1lKTsKLQotCQkJaWYgKGNvbm4pCi0JCQkJUFFmaW5pc2goY29u bik7Ci0KLQkJCXBnX2xvZ19pbmZvKCJkYXRhYmFzZSByZXN0b3Jpbmcgc2tpcHBlZCBiZWNh dXNlIG9wdGlvbiAtZy8tLWdsb2JhbHMtb25seSB3YXMgc3BlY2lmaWVkIik7Ci0JCX0KLQkJ ZWxzZQotCQl7Ci0JCQkvKiBOb3cgcmVzdG9yZSBhbGwgdGhlIGRhdGFiYXNlcyBmcm9tIG1h cC5kYXQgKi8KLQkJCW5fZXJyb3JzID0gcmVzdG9yZV9hbGxfZGF0YWJhc2VzKGNvbm4sIGlu cHV0RmlsZVNwZWMsIGRiX2V4Y2x1ZGVfcGF0dGVybnMsCi0JCQkJCQkJCQkJCSBvcHRzLCBu dW1Xb3JrZXJzKTsKLQkJfQotCi0JCS8qIEZyZWUgZGIgcGF0dGVybiBsaXN0LiAqLwotCQlz aW1wbGVfc3RyaW5nX2xpc3RfZGVzdHJveSgmZGJfZXhjbHVkZV9wYXR0ZXJucyk7Ci0JfQot CWVsc2UJCQkJCQkvKiBwcm9jZXNzIGlmIGdsb2JhbC5kYXQgZmlsZSBkb2VzIG5vdCBleGlz dC4gKi8KLQl7Ci0JCWlmIChkYl9leGNsdWRlX3BhdHRlcm5zLmhlYWQgIT0gTlVMTCkKLQkJ CXBnX2ZhdGFsKCJvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbiBiZSB1c2VkIG9ubHkg d2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwiKTsKLQot CQlpZiAoZ2xvYmFsc19vbmx5KQotCQkJcGdfZmF0YWwoIm9wdGlvbiAtZy8tLWdsb2JhbHMt b25seSBjYW4gYmUgdXNlZCBvbmx5IHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRl ZCBieSBwZ19kdW1wYWxsIik7Ci0KLQkJbl9lcnJvcnMgPSByZXN0b3JlX29uZV9kYXRhYmFz ZShpbnB1dEZpbGVTcGVjLCBvcHRzLCBudW1Xb3JrZXJzLCBmYWxzZSwgMCk7Ci0JfQotCi0J LyogRG9uZSwgcHJpbnQgYSBzdW1tYXJ5IG9mIGlnbm9yZWQgZXJyb3JzIGR1cmluZyByZXN0 b3JlLiAqLwotCWlmIChuX2Vycm9ycykKLQl7Ci0JCXBnX2xvZ193YXJuaW5nKCJlcnJvcnMg aWdub3JlZCBvbiByZXN0b3JlOiAlZCIsIG5fZXJyb3JzKTsKLQkJcmV0dXJuIDE7Ci0JfQot Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiByZXN0b3JlX29uZV9kYXRhYmFzZQotICoKLSAq IFRoaXMgd2lsbCByZXN0b3JlIG9uZSBkYXRhYmFzZSB1c2luZyB0b2MuZGF0IGZpbGUuCi0g KgotICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGVycm9ycyB3aGlsZSBkb2luZyByZXN0b3Jl LgotICovCi1zdGF0aWMgaW50Ci1yZXN0b3JlX29uZV9kYXRhYmFzZShjb25zdCBjaGFyICpp bnB1dEZpbGVTcGVjLCBSZXN0b3JlT3B0aW9ucyAqb3B0cywKLQkJCQkJIGludCBudW1Xb3Jr ZXJzLCBib29sIGFwcGVuZF9kYXRhLCBpbnQgbnVtKQotewotCUFyY2hpdmUgICAgKkFIOwot CWludAkJCW5fZXJyb3JzOwotCiAJQUggPSBPcGVuQXJjaGl2ZShpbnB1dEZpbGVTcGVjLCBv cHRzLT5mb3JtYXQpOwogCiAJU2V0QXJjaGl2ZU9wdGlvbnMoQUgsIE5VTEwsIG9wdHMpOwpA QCAtNjExLDE1ICs0NTksOSBAQCByZXN0b3JlX29uZV9kYXRhYmFzZShjb25zdCBjaGFyICpp bnB1dEZpbGVTcGVjLCBSZXN0b3JlT3B0aW9ucyAqb3B0cywKIAkvKgogCSAqIFdlIGRvbid0 IGhhdmUgYSBjb25uZWN0aW9uIHlldCBidXQgdGhhdCBkb2Vzbid0IG1hdHRlci4gVGhlIGNv bm5lY3Rpb24KIAkgKiBpcyBpbml0aWFsaXplZCB0byBOVUxMIGFuZCBpZiB3ZSB0ZXJtaW5h dGUgdGhyb3VnaCBleGl0X25pY2VseSgpIHdoaWxlCi0JICogaXQncyBzdGlsbCBOVUxMLCB0 aGUgY2xlYW51cCBmdW5jdGlvbiB3aWxsIGp1c3QgYmUgYSBuby1vcC4gSWYgd2UgYXJlCi0J ICogcmVzdG9yaW5nIG11bHRpcGxlIGRhdGFiYXNlcywgdGhlbiBvbmx5IHVwZGF0ZSBBWCBo YW5kbGUgZm9yIGNsZWFudXAgYXMKLQkgKiB0aGUgcHJldmlvdXMgZW50cnkgd2FzIGFscmVh ZHkgaW4gdGhlIGFycmF5IGFuZCB3ZSBoYWQgY2xvc2VkIHByZXZpb3VzCi0JICogY29ubmVj dGlvbiwgc28gd2UgY2FuIHVzZSB0aGUgc2FtZSBhcnJheSBzbG90LgorCSAqIGl0J3Mgc3Rp bGwgTlVMTCwgdGhlIGNsZWFudXAgZnVuY3Rpb24gd2lsbCBqdXN0IGJlIGEgbm8tb3AuCiAJ ICovCi0JaWYgKCFhcHBlbmRfZGF0YSB8fCBudW0gPT0gMCkKLQkJb25fZXhpdF9jbG9zZV9h cmNoaXZlKEFIKTsKLQllbHNlCi0JCXJlcGxhY2Vfb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFI KTsKKwlvbl9leGl0X2Nsb3NlX2FyY2hpdmUoQUgpOwogCiAJLyogTGV0IHRoZSBhcmNoaXZl ciBrbm93IGhvdyBub2lzeSB0byBiZSAqLwogCUFILT52ZXJib3NlID0gb3B0cy0+dmVyYm9z ZTsKQEAgLTYzOSwyMSArNDgxLDI1IEBAIHJlc3RvcmVfb25lX2RhdGFiYXNlKGNvbnN0IGNo YXIgKmlucHV0RmlsZVNwZWMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAogCWVsc2UKIAl7CiAJ CVByb2Nlc3NBcmNoaXZlUmVzdG9yZU9wdGlvbnMoQUgpOwotCQlSZXN0b3JlQXJjaGl2ZShB SCwgYXBwZW5kX2RhdGEpOworCQlSZXN0b3JlQXJjaGl2ZShBSCk7CiAJfQogCi0Jbl9lcnJv cnMgPSBBSC0+bl9lcnJvcnM7CisJLyogZG9uZSwgcHJpbnQgYSBzdW1tYXJ5IG9mIGlnbm9y ZWQgZXJyb3JzICovCisJaWYgKEFILT5uX2Vycm9ycykKKwkJcGdfbG9nX3dhcm5pbmcoImVy cm9ycyBpZ25vcmVkIG9uIHJlc3RvcmU6ICVkIiwgQUgtPm5fZXJyb3JzKTsKIAogCS8qIEFI IG1heSBiZSBmcmVlZCBpbiBDbG9zZUFyY2hpdmU/ICovCisJZXhpdF9jb2RlID0gQUgtPm5f ZXJyb3JzID8gMSA6IDA7CisKIAlDbG9zZUFyY2hpdmUoQUgpOwogCi0JcmV0dXJuIG5fZXJy b3JzOworCXJldHVybiBleGl0X2NvZGU7CiB9CiAKIHN0YXRpYyB2b2lkCiB1c2FnZShjb25z dCBjaGFyICpwcm9nbmFtZSkKIHsKLQlwcmludGYoXygiJXMgcmVzdG9yZXMgUG9zdGdyZVNR TCBkYXRhYmFzZXMgZnJvbSBhcmNoaXZlcyBjcmVhdGVkIGJ5IHBnX2R1bXAgb3IgcGdfZHVt cGFsbC5cblxuIiksIHByb2duYW1lKTsKKwlwcmludGYoXygiJXMgcmVzdG9yZXMgYSBQb3N0 Z3JlU1FMIGRhdGFiYXNlIGZyb20gYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXAuXG5c biIpLCBwcm9nbmFtZSk7CiAJcHJpbnRmKF8oIlVzYWdlOlxuIikpOwogCXByaW50ZihfKCIg ICVzIFtPUFRJT05dLi4uIFtGSUxFXVxuIiksIHByb2duYW1lKTsKIApAQCAtNjcxLDcgKzUx Nyw2IEBAIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKQogCXByaW50ZihfKCIgIC1jLCAt LWNsZWFuICAgICAgICAgICAgICAgICAgY2xlYW4gKGRyb3ApIGRhdGFiYXNlIG9iamVjdHMg YmVmb3JlIHJlY3JlYXRpbmdcbiIpKTsKIAlwcmludGYoXygiICAtQywgLS1jcmVhdGUgICAg ICAgICAgICAgICAgIGNyZWF0ZSB0aGUgdGFyZ2V0IGRhdGFiYXNlXG4iKSk7CiAJcHJpbnRm KF8oIiAgLWUsIC0tZXhpdC1vbi1lcnJvciAgICAgICAgICBleGl0IG9uIGVycm9yLCBkZWZh dWx0IGlzIHRvIGNvbnRpbnVlXG4iKSk7Ci0JcHJpbnRmKF8oIiAgLWcsIC0tZ2xvYmFscy1v bmx5ICAgICAgICAgICByZXN0b3JlIG9ubHkgZ2xvYmFsIG9iamVjdHMsIG5vIGRhdGFiYXNl c1xuIikpOwogCXByaW50ZihfKCIgIC1JLCAtLWluZGV4PU5BTUUgICAgICAgICAgICAgcmVz dG9yZSBuYW1lZCBpbmRleFxuIikpOwogCXByaW50ZihfKCIgIC1qLCAtLWpvYnM9TlVNICAg ICAgICAgICAgICAgdXNlIHRoaXMgbWFueSBwYXJhbGxlbCBqb2JzIHRvIHJlc3RvcmVcbiIp KTsKIAlwcmludGYoXygiICAtTCwgLS11c2UtbGlzdD1GSUxFTkFNRSAgICAgIHVzZSB0YWJs ZSBvZiBjb250ZW50cyBmcm9tIHRoaXMgZmlsZSBmb3JcbiIKQEAgLTY4OCw3ICs1MzMsNiBA QCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkKIAlwcmludGYoXygiICAtMSwgLS1zaW5n bGUtdHJhbnNhY3Rpb24gICAgIHJlc3RvcmUgYXMgYSBzaW5nbGUgdHJhbnNhY3Rpb25cbiIp KTsKIAlwcmludGYoXygiICAtLWRpc2FibGUtdHJpZ2dlcnMgICAgICAgICAgIGRpc2FibGUg dHJpZ2dlcnMgZHVyaW5nIGRhdGEtb25seSByZXN0b3JlXG4iKSk7CiAJcHJpbnRmKF8oIiAg LS1lbmFibGUtcm93LXNlY3VyaXR5ICAgICAgICBlbmFibGUgcm93IHNlY3VyaXR5XG4iKSk7 Ci0JcHJpbnRmKF8oIiAgLS1leGNsdWRlLWRhdGFiYXNlPVBBVFRFUk4gICBkbyBub3QgcmVz dG9yZSB0aGUgc3BlY2lmaWVkIGRhdGFiYXNlKHMpXG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1m aWx0ZXI9RklMRU5BTUUgICAgICAgICAgICByZXN0b3JlIG9yIHNraXAgb2JqZWN0cyBiYXNl ZCBvbiBleHByZXNzaW9uc1xuIgogCQkJICIgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW4gRklMRU5BTUVcbiIpKTsKIAlwcmludGYoXygiICAtLWlmLWV4aXN0cyAgICAgICAg ICAgICAgICAgIHVzZSBJRiBFWElTVFMgd2hlbiBkcm9wcGluZyBvYmplY3RzXG4iKSk7CkBA IC03MjUsOCArNTY5LDggQEAgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpCiAJcHJpbnRm KF8oIiAgLS1yb2xlPVJPTEVOQU1FICAgICAgICAgIGRvIFNFVCBST0xFIGJlZm9yZSByZXN0 b3JlXG4iKSk7CiAKIAlwcmludGYoXygiXG4iCi0JCQkgIlRoZSBvcHRpb25zIC1JLCAtbiwg LU4sIC1QLCAtdCwgLVQsIC0tc2VjdGlvbiwgYW5kIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW4g YmVcbiIKLQkJCSAiY29tYmluZWQgYW5kIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcyB0byBz ZWxlY3QgbXVsdGlwbGUgb2JqZWN0cy5cbiIpKTsKKwkJCSAiVGhlIG9wdGlvbnMgLUksIC1u LCAtTiwgLVAsIC10LCAtVCwgYW5kIC0tc2VjdGlvbiBjYW4gYmUgY29tYmluZWQgYW5kIHNw ZWNpZmllZFxuIgorCQkJICJtdWx0aXBsZSB0aW1lcyB0byBzZWxlY3QgbXVsdGlwbGUgb2Jq ZWN0cy5cbiIpKTsKIAlwcmludGYoXygiXG5JZiBubyBpbnB1dCBmaWxlIG5hbWUgaXMgc3Vw cGxpZWQsIHRoZW4gc3RhbmRhcmQgaW5wdXQgaXMgdXNlZC5cblxuIikpOwogCXByaW50Zihf KCJSZXBvcnQgYnVncyB0byA8JXM+LlxuIiksIFBBQ0tBR0VfQlVHUkVQT1JUKTsKIAlwcmlu dGYoXygiJXMgaG9tZSBwYWdlOiA8JXM+XG4iKSwgUEFDS0FHRV9OQU1FLCBQQUNLQUdFX1VS TCk7CkBAIC04MzEsNTg1ICs2NzUsMyBAQCByZWFkX3Jlc3RvcmVfZmlsdGVycyhjb25zdCBj aGFyICpmaWxlbmFtZSwgUmVzdG9yZU9wdGlvbnMgKm9wdHMpCiAKIAlmaWx0ZXJfZnJlZSgm ZnN0YXRlKTsKIH0KLQotLyoKLSAqIGZpbGVfZXhpc3RzX2luX2RpcmVjdG9yeQotICoKLSAq IFJldHVybnMgdHJ1ZSBpZiB0aGUgZmlsZSBleGlzdHMgaW4gdGhlIGdpdmVuIGRpcmVjdG9y eS4KLSAqLwotc3RhdGljIGJvb2wKLWZpbGVfZXhpc3RzX2luX2RpcmVjdG9yeShjb25zdCBj aGFyICpkaXIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQotewotCXN0cnVjdCBzdGF0IHN0Owot CWNoYXIJCWJ1ZltNQVhQR1BBVEhdOwotCi0JaWYgKHNucHJpbnRmKGJ1ZiwgTUFYUEdQQVRI LCAiJXMvJXMiLCBkaXIsIGZpbGVuYW1lKSA+PSBNQVhQR1BBVEgpCi0JCXBnX2ZhdGFsKCJk aXJlY3RvcnkgbmFtZSB0b28gbG9uZzogXCIlc1wiIiwgZGlyKTsKLQotCXJldHVybiAoc3Rh dChidWYsICZzdCkgPT0gMCAmJiBTX0lTUkVHKHN0LnN0X21vZGUpKTsKLX0KLQotLyoKLSAq IHJlYWRfb25lX3N0YXRlbWVudAotICoKLSAqIFRoaXMgd2lsbCBzdGFydCByZWFkaW5nIGZy b20gcGFzc2VkIGZpbGUgcG9pbnRlciB1c2luZyBmZ2V0YyBhbmQgcmVhZCB0aWxsCi0gKiBz ZW1pY29sb24oc3FsIHN0YXRlbWVudCB0ZXJtaW5hdG9yIGZvciBnbG9iYWwuZGF0IGZpbGUp Ci0gKgotICogRU9GIGlzIHJldHVybmVkIGlmIGVuZC1vZi1maWxlIGlucHV0IGlzIHNlZW47 IHRpbWUgdG8gc2h1dCBkb3duLgotICovCi0KLXN0YXRpYyBpbnQKLXJlYWRfb25lX3N0YXRl bWVudChTdHJpbmdJbmZvIGluQnVmLCBGSUxFICpwZmlsZSkKLXsKLQlpbnQJCQljOwkJCQkv KiBjaGFyYWN0ZXIgcmVhZCBmcm9tIGdldGMoKSAqLwotCWludAkJCW07Ci0KLQlTdHJpbmdJ bmZvRGF0YSBxOwotCi0JaW5pdFN0cmluZ0luZm8oJnEpOwotCi0JcmVzZXRTdHJpbmdJbmZv KGluQnVmKTsKLQotCS8qCi0JICogUmVhZCBjaGFyYWN0ZXJzIHVudGlsIEVPRiBvciB0aGUg YXBwcm9wcmlhdGUgZGVsaW1pdGVyIGlzIHNlZW4uCi0JICovCi0Jd2hpbGUgKChjID0gZmdl dGMocGZpbGUpKSAhPSBFT0YpCi0JewotCQlpZiAoYyAhPSAnXCcnICYmIGMgIT0gJyInICYm IGMgIT0gJ1xuJyAmJiBjICE9ICc7JykKLQkJewotCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIo aW5CdWYsIChjaGFyKSBjKTsKLQkJCXdoaWxlICgoYyA9IGZnZXRjKHBmaWxlKSkgIT0gRU9G KQotCQkJewotCQkJCWlmIChjICE9ICdcJycgJiYgYyAhPSAnIicgJiYgYyAhPSAnOycgJiYg YyAhPSAnXG4nKQotCQkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihpbkJ1ZiwgKGNoYXIpIGMp OwotCQkJCWVsc2UKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoYyA9PSAnXCcn IHx8IGMgPT0gJyInKQotCQl7Ci0JCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmcSwgKGNoYXIp IGMpOwotCQkJbSA9IGM7Ci0KLQkJCXdoaWxlICgoYyA9IGZnZXRjKHBmaWxlKSkgIT0gRU9G KQotCQkJewotCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZxLCAoY2hhcikgYyk7Ci0KLQkJ CQlpZiAoYyA9PSBtKQotCQkJCXsKLQkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhpbkJ1 ZiwgcS5kYXRhKTsKLQkJCQkJcmVzZXRTdHJpbmdJbmZvKCZxKTsKLQkJCQkJYnJlYWs7Ci0J CQkJfQotCQkJfQotCQl9Ci0KLQkJaWYgKGMgPT0gJzsnKQotCQl7Ci0JCQlhcHBlbmRTdHJp bmdJbmZvQ2hhcihpbkJ1ZiwgKGNoYXIpICc7Jyk7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlm IChjID09ICdcbicpCi0JCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihpbkJ1ZiwgKGNoYXIpICdc bicpOwotCX0KLQotCXBnX2ZyZWUocS5kYXRhKTsKLQotCS8qIE5vIGlucHV0IGJlZm9yZSBF T0Ygc2lnbmFsIG1lYW5zIHRpbWUgdG8gcXVpdC4gKi8KLQlpZiAoYyA9PSBFT0YgJiYgaW5C dWYtPmxlbiA9PSAwKQotCQlyZXR1cm4gRU9GOwotCi0JLyogcmV0dXJuIHNvbWV0aGluZyB0 aGF0J3Mgbm90IEVPRiAqLwotCXJldHVybiAnUSc7Ci19Ci0KLS8qCi0gKiBnZXRfZGJuYW1l c19saXN0X3RvX3Jlc3RvcmUKLSAqCi0gKiBUaGlzIHdpbGwgbWFyayBmb3Igc2tpcHBpbmcg YW55IGVudHJpZXMgZnJvbSBkYm5hbWVfb2lkX2xpc3QgdGhhdCBwYXR0ZXJuIG1hdGNoIGFu Ci0gKiBlbnRyeSBpbiB0aGUgZGJfZXhjbHVkZV9wYXR0ZXJucyBsaXN0LgotICoKLSAqIFJl dHVybnMgdGhlIG51bWJlciBvZiBkYXRhYmFzZSB0byBiZSByZXN0b3JlZC4KLSAqCi0gKi8K LXN0YXRpYyBpbnQKLWdldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9yZShQR2Nvbm4gKmNvbm4s Ci0JCQkJCQkJU2ltcGxlUHRyTGlzdCAqZGJuYW1lX29pZF9saXN0LAotCQkJCQkJCVNpbXBs ZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucykKLXsKLQlpbnQJCQljb3VudF9kYiA9 IDA7Ci0JUFFFeHBCdWZmZXIgcXVlcnk7Ci0JUEdyZXN1bHQgICAqcmVzOwotCi0JcXVlcnkg PSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwotCi0JaWYgKCFjb25uKQotCQlwZ19sb2dfaW5mbygi Y29uc2lkZXJpbmcgUEFUVEVSTiBhcyBOQU1FIGZvciAtLWV4Y2x1ZGUtZGF0YWJhc2Ugb3B0 aW9uIGFzIG5vIGRhdGFiYXNlIGNvbm5lY3Rpb24gd2hpbGUgZG9pbmcgcGdfcmVzdG9yZSIp OwotCi0JLyoKLQkgKiBQcm9jZXNzIG9uZSBieSBvbmUgYWxsIGRibmFtZXMgYW5kIGlmIHNw ZWNpZmllZCB0byBza2lwIHJlc3RvcmluZywgdGhlbgotCSAqIHJlbW92ZSBkYm5hbWUgZnJv bSBsaXN0LgotCSAqLwotCWZvciAoU2ltcGxlUHRyTGlzdENlbGwgKmRiX2NlbGwgPSBkYm5h bWVfb2lkX2xpc3QtPmhlYWQ7Ci0JCSBkYl9jZWxsOyBkYl9jZWxsID0gZGJfY2VsbC0+bmV4 dCkKLQl7Ci0JCURiT2lkTmFtZSAgKmRiaWRuYW1lID0gKERiT2lkTmFtZSAqKSBkYl9jZWxs LT5wdHI7Ci0JCWJvb2wJCXNraXBfZGJfcmVzdG9yZSA9IGZhbHNlOwotCQlQUUV4cEJ1ZmZl ciBkYl9saXQgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwotCi0JCWFwcGVuZFN0cmluZ0xpdGVy YWxDb25uKGRiX2xpdCwgZGJpZG5hbWUtPnN0ciwgY29ubik7Ci0KLQkJZm9yIChTaW1wbGVT dHJpbmdMaXN0Q2VsbCAqcGF0X2NlbGwgPSBkYl9leGNsdWRlX3BhdHRlcm5zLmhlYWQ7IHBh dF9jZWxsOyBwYXRfY2VsbCA9IHBhdF9jZWxsLT5uZXh0KQotCQl7Ci0JCQkvKgotCQkJICog SWYgdGhlcmUgaXMgYW4gZXhhY3QgbWF0Y2ggdGhlbiB3ZSBkb24ndCBuZWVkIHRvIHRyeSBh IHBhdHRlcm4KLQkJCSAqIG1hdGNoCi0JCQkgKi8KLQkJCWlmIChwZ19zdHJjYXNlY21wKGRi aWRuYW1lLT5zdHIsIHBhdF9jZWxsLT52YWwpID09IDApCi0JCQkJc2tpcF9kYl9yZXN0b3Jl ID0gdHJ1ZTsKLQkJCS8qIE90aGVyd2lzZSwgdHJ5IGEgcGF0dGVybiBtYXRjaCBpZiB0aGVy ZSBpcyBhIGNvbm5lY3Rpb24gKi8KLQkJCWVsc2UgaWYgKGNvbm4pCi0JCQl7Ci0JCQkJaW50 CQkJZG90Y250OwotCi0JCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICJTRUxFQ1Qg MSAiKTsKLQkJCQlwcm9jZXNzU1FMTmFtZVBhdHRlcm4oY29ubiwgcXVlcnksIHBhdF9jZWxs LT52YWwsIGZhbHNlLAotCQkJCQkJCQkJICBmYWxzZSwgTlVMTCwgZGJfbGl0LT5kYXRhLAot CQkJCQkJCQkJICBOVUxMLCBOVUxMLCBOVUxMLCAmZG90Y250KTsKLQotCQkJCWlmIChkb3Rj bnQgPiAwKQotCQkJCXsKLQkJCQkJcGdfbG9nX2Vycm9yKCJpbXByb3BlciBxdWFsaWZpZWQg bmFtZSAodG9vIG1hbnkgZG90dGVkIG5hbWVzKTogJXMiLAotCQkJCQkJCQkgZGJpZG5hbWUt PnN0cik7Ci0JCQkJCVBRZmluaXNoKGNvbm4pOwotCQkJCQlleGl0X25pY2VseSgxKTsKLQkJ CQl9Ci0KLQkJCQlyZXMgPSBleGVjdXRlUXVlcnkoY29ubiwgcXVlcnktPmRhdGEpOwotCi0J CQkJaWYgKChQUXJlc3VsdFN0YXR1cyhyZXMpID09IFBHUkVTX1RVUExFU19PSykgJiYgUFFu dHVwbGVzKHJlcykpCi0JCQkJewotCQkJCQlza2lwX2RiX3Jlc3RvcmUgPSB0cnVlOwotCQkJ CQlwZ19sb2dfaW5mbygiZGF0YWJhc2UgbmFtZSBcIiVzXCIgbWF0Y2hlcyBleGNsdWRlIHBh dHRlcm4gXCIlc1wiIiwgZGJpZG5hbWUtPnN0ciwgcGF0X2NlbGwtPnZhbCk7Ci0JCQkJfQot Ci0JCQkJUFFjbGVhcihyZXMpOwotCQkJCXJlc2V0UFFFeHBCdWZmZXIocXVlcnkpOwotCQkJ fQotCi0JCQlpZiAoc2tpcF9kYl9yZXN0b3JlKQotCQkJCWJyZWFrOwotCQl9Ci0KLQkJZGVz dHJveVBRRXhwQnVmZmVyKGRiX2xpdCk7Ci0KLQkJLyoKLQkJICogTWFyayBkYiB0byBiZSBz a2lwcGVkIG9yIGluY3JlbWVudCB0aGUgY291bnRlciBvZiBkYnMgdG8gYmUKLQkJICogcmVz dG9yZWQKLQkJICovCi0JCWlmIChza2lwX2RiX3Jlc3RvcmUpCi0JCXsKLQkJCXBnX2xvZ19p bmZvKCJleGNsdWRpbmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJpZG5hbWUtPnN0cik7Ci0JCQlk YmlkbmFtZS0+b2lkID0gSW52YWxpZE9pZDsKLQkJfQotCQllbHNlCi0JCXsKLQkJCWNvdW50 X2RiKys7Ci0JCX0KLQl9Ci0KLQlkZXN0cm95UFFFeHBCdWZmZXIocXVlcnkpOwotCi0JcmV0 dXJuIGNvdW50X2RiOwotfQotCi0vKgotICogZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21m aWxlCi0gKgotICogT3BlbiBtYXAuZGF0IGZpbGUgYW5kIHJlYWQgbGluZSBieSBsaW5lIGFu ZCB0aGVuIHByZXBhcmUgYSBsaXN0IG9mIGRhdGFiYXNlCi0gKiBuYW1lcyBhbmQgY29ycmVz cG9uZGluZyBkYl9vaWQuCi0gKgotICogUmV0dXJucywgdG90YWwgbnVtYmVyIG9mIGRhdGFi YXNlIG5hbWVzIGluIG1hcC5kYXQgZmlsZS4KLSAqLwotc3RhdGljIGludAotZ2V0X2RibmFt ZV9vaWRfbGlzdF9mcm9tX21maWxlKGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLCBTaW1wbGVQ dHJMaXN0ICpkYm5hbWVfb2lkX2xpc3QpCi17Ci0JU3RyaW5nSW5mb0RhdGEgbGluZWJ1ZjsK LQlGSUxFCSAgICpwZmlsZTsKLQljaGFyCQltYXBfZmlsZV9wYXRoW01BWFBHUEFUSF07Ci0J aW50CQkJY291bnQgPSAwOwotCi0KLQkvKgotCSAqIElmIHRoZXJlIGlzIG9ubHkgZ2xvYmFs LmRhdCBmaWxlIGluIGR1bXAsIHRoZW4gcmV0dXJuIGZyb20gaGVyZSBhcwotCSAqIHRoZXJl IGlzIG5vIGRhdGFiYXNlIHRvIHJlc3RvcmUuCi0JICovCi0JaWYgKCFmaWxlX2V4aXN0c19p bl9kaXJlY3RvcnkoZHVtcGRpcnBhdGgsICJtYXAuZGF0IikpCi0JewotCQlwZ19sb2dfaW5m bygiZGF0YWJhc2UgcmVzdG9yaW5nIGlzIHNraXBwZWQgYmVjYXVzZSBmaWxlIFwiJXNcIiBk b2VzIG5vdCBleGlzdCBpbiBkaXJlY3RvcnkgXCIlc1wiIiwgIm1hcC5kYXQiLCBkdW1wZGly cGF0aCk7Ci0JCXJldHVybiAwOwotCX0KLQotCXNucHJpbnRmKG1hcF9maWxlX3BhdGgsIE1B WFBHUEFUSCwgIiVzL21hcC5kYXQiLCBkdW1wZGlycGF0aCk7Ci0KLQkvKiBPcGVuIG1hcC5k YXQgZmlsZS4gKi8KLQlwZmlsZSA9IGZvcGVuKG1hcF9maWxlX3BhdGgsIFBHX0JJTkFSWV9S KTsKLQotCWlmIChwZmlsZSA9PSBOVUxMKQotCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4g ZmlsZSBcIiVzXCI6ICVtIiwgbWFwX2ZpbGVfcGF0aCk7Ci0KLQlpbml0U3RyaW5nSW5mbygm bGluZWJ1Zik7Ci0KLQkvKiBBcHBlbmQgYWxsIHRoZSBkYm5hbWUvZGJfb2lkIGNvbWJpbmF0 aW9ucyB0byB0aGUgbGlzdC4gKi8KLQl3aGlsZSAocGdfZ2V0X2xpbmVfYnVmKHBmaWxlLCAm bGluZWJ1ZikpCi0JewotCQlPaWQJCQlkYl9vaWQgPSBJbnZhbGlkT2lkOwotCQljaGFyCSAg ICpkYm5hbWU7Ci0JCURiT2lkTmFtZSAgKmRiaWRuYW1lOwotCQlpbnQJCQluYW1lbGVuOwot CQljaGFyCSAgICpwID0gbGluZWJ1Zi5kYXRhOwotCi0JCS8qIEV4dHJhY3QgZGJvaWQuICov Ci0JCXdoaWxlIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSAqcCkpCi0JCQlwKys7Ci0JCWlm IChwID4gbGluZWJ1Zi5kYXRhICYmICpwID09ICcgJykKLQkJewotCQkJc3NjYW5mKGxpbmVi dWYuZGF0YSwgIiV1IiwgJmRiX29pZCk7Ci0JCQlwKys7Ci0JCX0KLQotCQkvKiBkYm5hbWUg aXMgdGhlIHJlc3Qgb2YgdGhlIGxpbmUgKi8KLQkJZGJuYW1lID0gcDsKLQkJbmFtZWxlbiA9 IHN0cmxlbihkYm5hbWUpOwotCi0JCS8qIFJlcG9ydCBlcnJvciBhbmQgZXhpdCBpZiB0aGUg ZmlsZSBoYXMgYW55IGNvcnJ1cHRlZCBkYXRhLiAqLwotCQlpZiAoIU9pZElzVmFsaWQoZGJf b2lkKSB8fCBuYW1lbGVuIDw9IDEpCi0JCQlwZ19mYXRhbCgiaW52YWxpZCBlbnRyeSBpbiBm aWxlIFwiJXNcIiBvbiBsaW5lICVkIiwgbWFwX2ZpbGVfcGF0aCwKLQkJCQkJIGNvdW50ICsg MSk7Ci0KLQkJcGdfbG9nX2luZm8oImZvdW5kIGRhdGFiYXNlIFwiJXNcIiAoT0lEOiAldSkg aW4gZmlsZSBcIiVzXCIiLAotCQkJCQlkYm5hbWUsIGRiX29pZCwgbWFwX2ZpbGVfcGF0aCk7 Ci0KLQkJZGJpZG5hbWUgPSBwZ19tYWxsb2Mob2Zmc2V0b2YoRGJPaWROYW1lLCBzdHIpICsg bmFtZWxlbiArIDEpOwotCQlkYmlkbmFtZS0+b2lkID0gZGJfb2lkOwotCQlzdHJsY3B5KGRi aWRuYW1lLT5zdHIsIGRibmFtZSwgbmFtZWxlbik7Ci0KLQkJc2ltcGxlX3B0cl9saXN0X2Fw cGVuZChkYm5hbWVfb2lkX2xpc3QsIGRiaWRuYW1lKTsKLQkJY291bnQrKzsKLQl9Ci0KLQkv KiBDbG9zZSBtYXAuZGF0IGZpbGUuICovCi0JZmNsb3NlKHBmaWxlKTsKLQotCXJldHVybiBj b3VudDsKLX0KLQotLyoKLSAqIHJlc3RvcmVfYWxsX2RhdGFiYXNlcwotICoKLSAqIFRoaXMg d2lsbCByZXN0b3JlIGRhdGFiYXNlcyB0aG9zZSBkdW1wcyBhcmUgcHJlc2VudCBpbgotICog ZGlyZWN0b3J5IGJhc2VkIG9uIG1hcC5kYXQgZmlsZSBtYXBwaW5nLgotICoKLSAqIFRoaXMg d2lsbCBza2lwIHJlc3RvcmluZyBmb3IgZGF0YWJhc2VzIHRoYXQgYXJlIHNwZWNpZmllZCB3 aXRoCi0gKiBleGNsdWRlLWRhdGFiYXNlIG9wdGlvbi4KLSAqCi0gKiByZXR1cm5zLCBudW1i ZXIgb2YgZXJyb3JzIHdoaWxlIGRvaW5nIHJlc3RvcmUuCi0gKi8KLXN0YXRpYyBpbnQKLXJl c3RvcmVfYWxsX2RhdGFiYXNlcyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKmR1bXBkaXJw YXRoLAotCQkJCQkgIFNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucywgUmVz dG9yZU9wdGlvbnMgKm9wdHMsCi0JCQkJCSAgaW50IG51bVdvcmtlcnMpCi17Ci0JU2ltcGxl UHRyTGlzdCBkYm5hbWVfb2lkX2xpc3QgPSB7TlVMTCwgTlVMTH07Ci0JaW50CQkJbnVtX2Ri X3Jlc3RvcmUgPSAwOwotCWludAkJCW51bV90b3RhbF9kYjsKLQlpbnQJCQluX2Vycm9yc190 b3RhbDsKLQlpbnQJCQljb3VudCA9IDA7Ci0JY2hhcgkgICAqY29ubmVjdGVkX2RiID0gTlVM TDsKLQlib29sCQlkdW1wRGF0YSA9IG9wdHMtPmR1bXBEYXRhOwotCWJvb2wJCWR1bXBTY2hl bWEgPSBvcHRzLT5kdW1wU2NoZW1hOwotCWJvb2wJCWR1bXBTdGF0aXN0aWNzID0gb3B0cy0+ ZHVtcFNjaGVtYTsKLQotCS8qIFNhdmUgZGIgbmFtZSB0byByZXVzZSBpdCBmb3IgYWxsIHRo ZSBkYXRhYmFzZS4gKi8KLQlpZiAob3B0cy0+Y3BhcmFtcy5kYm5hbWUpCi0JCWNvbm5lY3Rl ZF9kYiA9IG9wdHMtPmNwYXJhbXMuZGJuYW1lOwotCi0JbnVtX3RvdGFsX2RiID0gZ2V0X2Ri bmFtZV9vaWRfbGlzdF9mcm9tX21maWxlKGR1bXBkaXJwYXRoLCAmZGJuYW1lX29pZF9saXN0 KTsKLQotCS8qIElmIG1hcC5kYXQgaGFzIG5vIGVudHJpZXMsIHJldHVybiBhZnRlciBwcm9j ZXNzaW5nIGdsb2JhbC5kYXQgKi8KLQlpZiAoZGJuYW1lX29pZF9saXN0LmhlYWQgPT0gTlVM TCkKLQkJcmV0dXJuIHByb2Nlc3NfZ2xvYmFsX3NxbF9jb21tYW5kcyhjb25uLCBkdW1wZGly cGF0aCwgb3B0cy0+ZmlsZW5hbWUpOwotCi0JcGdfbG9nX2luZm8obmdldHRleHQoImZvdW5k ICVkIGRhdGFiYXNlIG5hbWUgaW4gXCIlc1wiIiwKLQkJCQkJCSAiZm91bmQgJWQgZGF0YWJh c2UgbmFtZXMgaW4gXCIlc1wiIiwKLQkJCQkJCSBudW1fdG90YWxfZGIpLAotCQkJCW51bV90 b3RhbF9kYiwgIm1hcC5kYXQiKTsKLQotCWlmICghY29ubikKLQl7Ci0JCXBnX2xvZ19pbmZv KCJ0cnlpbmcgdG8gY29ubmVjdCB0byBkYXRhYmFzZSBcIiVzXCIiLCAicG9zdGdyZXMiKTsK LQotCQljb25uID0gQ29ubmVjdERhdGFiYXNlKCJwb3N0Z3JlcyIsIE5VTEwsIG9wdHMtPmNw YXJhbXMucGdob3N0LAotCQkJCQkJCSAgIG9wdHMtPmNwYXJhbXMucGdwb3J0LCBvcHRzLT5j cGFyYW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwKLQkJCQkJCQkgICBmYWxzZSwgcHJvZ25h bWUsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOwotCi0JCS8qIFRyeSB3aXRoIHRlbXBsYXRl MS4gKi8KLQkJaWYgKCFjb25uKQotCQl7Ci0JCQlwZ19sb2dfaW5mbygidHJ5aW5nIHRvIGNv bm5lY3QgdG8gZGF0YWJhc2UgXCIlc1wiIiwgInRlbXBsYXRlMSIpOwotCi0JCQljb25uID0g Q29ubmVjdERhdGFiYXNlKCJ0ZW1wbGF0ZTEiLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9z dCwKLQkJCQkJCQkJICAgb3B0cy0+Y3BhcmFtcy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMudXNl cm5hbWUsIFRSSV9ERUZBVUxULAotCQkJCQkJCQkgICBmYWxzZSwgcHJvZ25hbWUsIE5VTEws IE5VTEwsIE5VTEwsIE5VTEwpOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBmaWx0ZXIgdGhlIGRi IGxpc3QgYWNjb3JkaW5nIHRvIHRoZSBleGNsdWRlIHBhdHRlcm5zCi0JICovCi0JbnVtX2Ri X3Jlc3RvcmUgPSBnZXRfZGJuYW1lc19saXN0X3RvX3Jlc3RvcmUoY29ubiwgJmRibmFtZV9v aWRfbGlzdCwKLQkJCQkJCQkJCQkJCSBkYl9leGNsdWRlX3BhdHRlcm5zKTsKLQotCS8qIE9w ZW4gZ2xvYmFsLmRhdCBmaWxlIGFuZCBleGVjdXRlL2FwcGVuZCBhbGwgdGhlIGdsb2JhbCBz cWwgY29tbWFuZHMuICovCi0Jbl9lcnJvcnNfdG90YWwgPSBwcm9jZXNzX2dsb2JhbF9zcWxf Y29tbWFuZHMoY29ubiwgZHVtcGRpcnBhdGgsIG9wdHMtPmZpbGVuYW1lKTsKLQotCS8qIENs b3NlIHRoZSBkYiBjb25uZWN0aW9uIGFzIHdlIGFyZSBkb25lIHdpdGggZ2xvYmFscyBhbmQg cGF0dGVybnMuICovCi0JaWYgKGNvbm4pCi0JCVBRZmluaXNoKGNvbm4pOwotCi0JLyogRXhp dCBpZiBubyBkYiBuZWVkcyB0byBiZSByZXN0b3JlZC4gKi8KLQlpZiAoZGJuYW1lX29pZF9s aXN0LmhlYWQgPT0gTlVMTCB8fCBudW1fZGJfcmVzdG9yZSA9PSAwKQotCXsKLQkJcGdfbG9n X2luZm8obmdldHRleHQoIm5vIGRhdGFiYXNlIG5lZWRzIHJlc3RvcmluZyBvdXQgb2YgJWQg ZGF0YWJhc2UiLAotCQkJCQkJCSAibm8gZGF0YWJhc2UgbmVlZHMgcmVzdG9yaW5nIG91dCBv ZiAlZCBkYXRhYmFzZXMiLCBudW1fdG90YWxfZGIpLAotCQkJCQludW1fdG90YWxfZGIpOwot CQlyZXR1cm4gbl9lcnJvcnNfdG90YWw7Ci0JfQotCi0JcGdfbG9nX2luZm8oIm5lZWQgdG8g cmVzdG9yZSAlZCBkYXRhYmFzZXMgb3V0IG9mICVkIGRhdGFiYXNlcyIsIG51bV9kYl9yZXN0 b3JlLCBudW1fdG90YWxfZGIpOwotCi0JLyoKLQkgKiBXZSBoYXZlIGEgbGlzdCBvZiBkYXRh YmFzZXMgdG8gcmVzdG9yZSBhZnRlciBwcm9jZXNzaW5nIHRoZQotCSAqIGV4Y2x1ZGUtZGF0 YWJhc2Ugc3dpdGNoKGVzKS4gIE5vdyB3ZSBjYW4gcmVzdG9yZSB0aGVtIG9uZSBieSBvbmUu Ci0JICovCi0JZm9yIChTaW1wbGVQdHJMaXN0Q2VsbCAqZGJfY2VsbCA9IGRibmFtZV9vaWRf bGlzdC5oZWFkOwotCQkgZGJfY2VsbDsgZGJfY2VsbCA9IGRiX2NlbGwtPm5leHQpCi0Jewot CQlEYk9pZE5hbWUgICpkYmlkbmFtZSA9IChEYk9pZE5hbWUgKikgZGJfY2VsbC0+cHRyOwot CQljaGFyCQlzdWJkaXJwYXRoW01BWFBHUEFUSF07Ci0JCWNoYXIJCXN1YmRpcmRicGF0aFtN QVhQR1BBVEhdOwotCQljaGFyCQlkYmZpbGVuYW1lW01BWFBHUEFUSF07Ci0JCWludAkJCW5f ZXJyb3JzOwotCi0JCS8qIGlnbm9yZSBkYnMgbWFya2VkIGZvciBza2lwcGluZyAqLwotCQlp ZiAoZGJpZG5hbWUtPm9pZCA9PSBJbnZhbGlkT2lkKQotCQkJY29udGludWU7Ci0KLQkJLyoK LQkJICogV2UgbmVlZCB0byByZXNldCBvdmVycmlkZV9kYm5hbWUgc28gdGhhdCBvYmplY3Rz IGNhbiBiZSByZXN0b3JlZAotCQkgKiBpbnRvIGFuIGFscmVhZHkgY3JlYXRlZCBkYXRhYmFz ZS4gKHVzZWQgd2l0aCAtZC8tLWRibmFtZSBvcHRpb24pCi0JCSAqLwotCQlpZiAob3B0cy0+ Y3BhcmFtcy5vdmVycmlkZV9kYm5hbWUpCi0JCXsKLQkJCXBmcmVlKG9wdHMtPmNwYXJhbXMu b3ZlcnJpZGVfZGJuYW1lKTsKLQkJCW9wdHMtPmNwYXJhbXMub3ZlcnJpZGVfZGJuYW1lID0g TlVMTDsKLQkJfQotCi0JCXNucHJpbnRmKHN1YmRpcmRicGF0aCwgTUFYUEdQQVRILCAiJXMv ZGF0YWJhc2VzIiwgZHVtcGRpcnBhdGgpOwotCi0JCS8qCi0JCSAqIExvb2sgZm9yIHRoZSBk YXRhYmFzZSBkdW1wIGZpbGUvZGlyLiBJZiB0aGVyZSBpcyBhbiB7b2lkfS50YXIgb3IKLQkJ ICoge29pZH0uZG1wIGZpbGUsIHVzZSBpdC4gT3RoZXJ3aXNlIHRyeSB0byB1c2UgYSBkaXJl Y3RvcnkgY2FsbGVkCi0JCSAqIHtvaWR9Ci0JCSAqLwotCQlzbnByaW50ZihkYmZpbGVuYW1l LCBNQVhQR1BBVEgsICIldS50YXIiLCBkYmlkbmFtZS0+b2lkKTsKLQkJaWYgKGZpbGVfZXhp c3RzX2luX2RpcmVjdG9yeShzdWJkaXJkYnBhdGgsIGRiZmlsZW5hbWUpKQotCQkJc25wcmlu dGYoc3ViZGlycGF0aCwgTUFYUEdQQVRILCAiJXMvZGF0YWJhc2VzLyV1LnRhciIsIGR1bXBk aXJwYXRoLCBkYmlkbmFtZS0+b2lkKTsKLQkJZWxzZQotCQl7Ci0JCQlzbnByaW50ZihkYmZp bGVuYW1lLCBNQVhQR1BBVEgsICIldS5kbXAiLCBkYmlkbmFtZS0+b2lkKTsKLQotCQkJaWYg KGZpbGVfZXhpc3RzX2luX2RpcmVjdG9yeShzdWJkaXJkYnBhdGgsIGRiZmlsZW5hbWUpKQot CQkJCXNucHJpbnRmKHN1YmRpcnBhdGgsIE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcy8ldS5k bXAiLCBkdW1wZGlycGF0aCwgZGJpZG5hbWUtPm9pZCk7Ci0JCQllbHNlCi0JCQkJc25wcmlu dGYoc3ViZGlycGF0aCwgTUFYUEdQQVRILCAiJXMvZGF0YWJhc2VzLyV1IiwgZHVtcGRpcnBh dGgsIGRiaWRuYW1lLT5vaWQpOwotCQl9Ci0KLQkJcGdfbG9nX2luZm8oInJlc3RvcmluZyBk YXRhYmFzZSBcIiVzXCIiLCBkYmlkbmFtZS0+c3RyKTsKLQotCQkvKiBJZiBkYXRhYmFzZSBp cyBhbHJlYWR5IGNyZWF0ZWQsIHRoZW4gZG9uJ3Qgc2V0IGNyZWF0ZURCIGZsYWcuICovCi0J CWlmIChvcHRzLT5jcGFyYW1zLmRibmFtZSkKLQkJewotCQkJUEdjb25uCSAgICp0ZXN0X2Nv bm47Ci0KLQkJCXRlc3RfY29ubiA9IENvbm5lY3REYXRhYmFzZShkYmlkbmFtZS0+c3RyLCBO VUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKLQkJCQkJCQkJCQlvcHRzLT5jcGFyYW1zLnBn cG9ydCwgb3B0cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJX0RFRkFVTFQsCi0JCQkJCQkJCQkJ ZmFsc2UsIHByb2duYW1lLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKLQkJCWlmICh0ZXN0 X2Nvbm4pCi0JCQl7Ci0JCQkJUFFmaW5pc2godGVzdF9jb25uKTsKLQotCQkJCS8qIFVzZSBh bHJlYWR5IGNyZWF0ZWQgZGF0YWJhc2UgZm9yIGNvbm5lY3Rpb24uICovCi0JCQkJb3B0cy0+ Y3JlYXRlREIgPSAwOwotCQkJCW9wdHMtPmNwYXJhbXMuZGJuYW1lID0gZGJpZG5hbWUtPnN0 cjsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQkvKiB3ZSdsbCBoYXZlIHRvIGNyZWF0ZSBp dCAqLwotCQkJCW9wdHMtPmNyZWF0ZURCID0gMTsKLQkJCQlvcHRzLT5jcGFyYW1zLmRibmFt ZSA9IGNvbm5lY3RlZF9kYjsKLQkJCX0KLQkJfQotCi0JCS8qCi0JCSAqIFJlc2V0IGZsYWdz IC0gbWlnaHQgaGF2ZSBiZWVuIHJlc2V0IGluIHBnX2JhY2t1cF9hcmNoaXZlci5jIGJ5IHRo ZQotCQkgKiBwcmV2aW91cyByZXN0b3JlLgotCQkgKi8KLQkJb3B0cy0+ZHVtcERhdGEgPSBk dW1wRGF0YTsKLQkJb3B0cy0+ZHVtcFNjaGVtYSA9IGR1bXBTY2hlbWE7Ci0JCW9wdHMtPmR1 bXBTdGF0aXN0aWNzID0gZHVtcFN0YXRpc3RpY3M7Ci0KLQkJLyogUmVzdG9yZSB0aGUgc2lu Z2xlIGRhdGFiYXNlLiAqLwotCQluX2Vycm9ycyA9IHJlc3RvcmVfb25lX2RhdGFiYXNlKHN1 YmRpcnBhdGgsIG9wdHMsIG51bVdvcmtlcnMsIHRydWUsIGNvdW50KTsKLQotCQkvKiBQcmlu dCBhIHN1bW1hcnkgb2YgaWdub3JlZCBlcnJvcnMgZHVyaW5nIHNpbmdsZSBkYXRhYmFzZSBy ZXN0b3JlLiAqLwotCQlpZiAobl9lcnJvcnMpCi0JCXsKLQkJCW5fZXJyb3JzX3RvdGFsICs9 IG5fZXJyb3JzOwotCQkJcGdfbG9nX3dhcm5pbmcoImVycm9ycyBpZ25vcmVkIG9uIGRhdGFi YXNlIFwiJXNcIiByZXN0b3JlOiAlZCIsIGRiaWRuYW1lLT5zdHIsIG5fZXJyb3JzKTsKLQkJ fQotCi0JCWNvdW50Kys7Ci0JfQotCi0JLyogTG9nIG51bWJlciBvZiBwcm9jZXNzZWQgZGF0 YWJhc2VzLiAqLwotCXBnX2xvZ19pbmZvKCJudW1iZXIgb2YgcmVzdG9yZWQgZGF0YWJhc2Vz IGlzICVkIiwgbnVtX2RiX3Jlc3RvcmUpOwotCi0JLyogRnJlZSBkYm5hbWUgYW5kIGRib2lk IGxpc3QuICovCi0Jc2ltcGxlX3B0cl9saXN0X2Rlc3Ryb3koJmRibmFtZV9vaWRfbGlzdCk7 Ci0KLQlyZXR1cm4gbl9lcnJvcnNfdG90YWw7Ci19Ci0KLS8qCi0gKiBwcm9jZXNzX2dsb2Jh bF9zcWxfY29tbWFuZHMKLSAqCi0gKiBPcGVuIGdsb2JhbC5kYXQgYW5kIGV4ZWN1dGUgb3Ig Y29weSB0aGUgc3FsIGNvbW1hbmRzIG9uZSBieSBvbmUuCi0gKgotICogSWYgb3V0ZmlsZSBp cyBub3QgTlVMTCwgY29weSBhbGwgc3FsIGNvbW1hbmRzIGludG8gb3V0ZmlsZSByYXRoZXIg dGhhbgotICogZXhlY3V0aW5nIHRoZW0uCi0gKgotICogUmV0dXJucyB0aGUgbnVtYmVyIG9m IGVycm9ycyB3aGlsZSBwcm9jZXNzaW5nIGdsb2JhbC5kYXQKLSAqLwotc3RhdGljIGludAot cHJvY2Vzc19nbG9iYWxfc3FsX2NvbW1hbmRzKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAq ZHVtcGRpcnBhdGgsIGNvbnN0IGNoYXIgKm91dGZpbGUpCi17Ci0JY2hhcgkJZ2xvYmFsX2Zp bGVfcGF0aFtNQVhQR1BBVEhdOwotCVBHcmVzdWx0ICAgKnJlc3VsdDsKLQlTdHJpbmdJbmZv RGF0YSBzcWxzdGF0ZW1lbnQsCi0JCQkJdXNlcl9jcmVhdGU7Ci0JRklMRQkgICAqcGZpbGU7 Ci0JaW50CQkJbl9lcnJvcnMgPSAwOwotCi0Jc25wcmludGYoZ2xvYmFsX2ZpbGVfcGF0aCwg TUFYUEdQQVRILCAiJXMvZ2xvYmFsLmRhdCIsIGR1bXBkaXJwYXRoKTsKLQotCS8qIE9wZW4g Z2xvYmFsLmRhdCBmaWxlLiAqLwotCXBmaWxlID0gZm9wZW4oZ2xvYmFsX2ZpbGVfcGF0aCwg UEdfQklOQVJZX1IpOwotCi0JaWYgKHBmaWxlID09IE5VTEwpCi0JCXBnX2ZhdGFsKCJjb3Vs ZCBub3Qgb3BlbiBmaWxlIFwiJXNcIjogJW0iLCBnbG9iYWxfZmlsZV9wYXRoKTsKLQotCS8q Ci0JICogSWYgb3V0ZmlsZSBpcyBnaXZlbiwgdGhlbiBqdXN0IGNvcHkgYWxsIGdsb2JhbC5k YXQgZmlsZSBkYXRhIGludG8KLQkgKiBvdXRmaWxlLgotCSAqLwotCWlmIChvdXRmaWxlKQot CXsKLQkJY29weV9vcl9wcmludF9nbG9iYWxfZmlsZShvdXRmaWxlLCBwZmlsZSk7Ci0JCXJl dHVybiAwOwotCX0KLQotCS8qIEluaXQgc3Fsc3RhdGVtZW50IHRvIGFwcGVuZCBjb21tYW5k cy4gKi8KLQlpbml0U3RyaW5nSW5mbygmc3Fsc3RhdGVtZW50KTsKLQotCS8qIGNyZWF0aW9u IHN0YXRlbWVudCBmb3Igb3VyIGN1cnJlbnQgcm9sZSAqLwotCWluaXRTdHJpbmdJbmZvKCZ1 c2VyX2NyZWF0ZSk7Ci0JYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmdXNlcl9jcmVhdGUsICJD UkVBVEUgUk9MRSAiKTsKLQkvKiBzaG91bGQgdXNlIGZtdElkIGhlcmUsIGJ1dCB3ZSBkb24n dCBrbm93IHRoZSBlbmNvZGluZyAqLwotCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJnVzZXJf Y3JlYXRlLCBQUXVzZXIoY29ubikpOwotCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZ1c2VyX2Ny ZWF0ZSwgJzsnKTsKLQotCS8qIFByb2Nlc3MgZmlsZSB0aWxsIEVPRiBhbmQgZXhlY3V0ZSBz cWwgc3RhdGVtZW50cy4gKi8KLQl3aGlsZSAocmVhZF9vbmVfc3RhdGVtZW50KCZzcWxzdGF0 ZW1lbnQsIHBmaWxlKSAhPSBFT0YpCi0JewotCQkvKiBkb24ndCB0cnkgdG8gY3JlYXRlIHRo ZSByb2xlIHdlIGFyZSBjb25uZWN0ZWQgYXMgKi8KLQkJaWYgKHN0cnN0cihzcWxzdGF0ZW1l bnQuZGF0YSwgdXNlcl9jcmVhdGUuZGF0YSkpCi0JCQljb250aW51ZTsKLQotCQlwZ19sb2df aW5mbygiZXhlY3V0aW5nIHF1ZXJ5OiAlcyIsIHNxbHN0YXRlbWVudC5kYXRhKTsKLQkJcmVz dWx0ID0gUFFleGVjKGNvbm4sIHNxbHN0YXRlbWVudC5kYXRhKTsKLQotCQlzd2l0Y2ggKFBR cmVzdWx0U3RhdHVzKHJlc3VsdCkpCi0JCXsKLQkJCWNhc2UgUEdSRVNfQ09NTUFORF9PSzoK LQkJCWNhc2UgUEdSRVNfVFVQTEVTX09LOgotCQkJY2FzZSBQR1JFU19FTVBUWV9RVUVSWToK LQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJbl9lcnJvcnMrKzsKLQkJCQlwZ19sb2df ZXJyb3IoImNvdWxkIG5vdCBleGVjdXRlIHF1ZXJ5OiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNv bm4pKTsKLQkJCQlwZ19sb2dfZXJyb3JfZGV0YWlsKCJDb21tYW5kIHdhczogJXMiLCBzcWxz dGF0ZW1lbnQuZGF0YSk7Ci0JCX0KLQkJUFFjbGVhcihyZXN1bHQpOwotCX0KLQotCS8qIFBy aW50IGEgc3VtbWFyeSBvZiBpZ25vcmVkIGVycm9ycyBkdXJpbmcgZ2xvYmFsLmRhdC4gKi8K LQlpZiAobl9lcnJvcnMpCi0JCXBnX2xvZ193YXJuaW5nKG5nZXR0ZXh0KCJpZ25vcmVkICVk IGVycm9yIGluIGZpbGUgXCIlc1wiIiwKLQkJCQkJCQkJImlnbm9yZWQgJWQgZXJyb3JzIGlu IGZpbGUgXCIlc1wiIiwgbl9lcnJvcnMpLAotCQkJCQkgICBuX2Vycm9ycywgZ2xvYmFsX2Zp bGVfcGF0aCk7Ci0JZmNsb3NlKHBmaWxlKTsKLQotCXJldHVybiBuX2Vycm9yczsKLX0KLQot LyoKLSAqIGNvcHlfb3JfcHJpbnRfZ2xvYmFsX2ZpbGUKLSAqCi0gKiBDb3B5IGdsb2JhbC5k YXQgaW50byB0aGUgb3V0cHV0IGZpbGUuICBJZiAiLSIgaXMgdXNlZCBhcyBvdXRmaWxlLAot ICogdGhlbiBwcmludCBjb21tYW5kcyB0byBzdGRvdXQuCi0gKi8KLXN0YXRpYyB2b2lkCi1j b3B5X29yX3ByaW50X2dsb2JhbF9maWxlKGNvbnN0IGNoYXIgKm91dGZpbGUsIEZJTEUgKnBm aWxlKQotewotCWNoYXIJCW91dF9maWxlX3BhdGhbTUFYUEdQQVRIXTsKLQlGSUxFCSAgICpP UEY7Ci0JaW50CQkJYzsKLQotCS8qICItIiBpcyB1c2VkIGZvciBzdGRvdXQuICovCi0JaWYg KHN0cmNtcChvdXRmaWxlLCAiLSIpID09IDApCi0JCU9QRiA9IHN0ZG91dDsKLQllbHNlCi0J ewotCQlzbnByaW50ZihvdXRfZmlsZV9wYXRoLCBNQVhQR1BBVEgsICIlcyIsIG91dGZpbGUp OwotCQlPUEYgPSBmb3BlbihvdXRfZmlsZV9wYXRoLCBQR19CSU5BUllfVyk7Ci0KLQkJaWYg KE9QRiA9PSBOVUxMKQotCQl7Ci0JCQlmY2xvc2UocGZpbGUpOwotCQkJcGdfZmF0YWwoImNv dWxkIG5vdCBvcGVuIGZpbGU6IFwiJXNcIiIsIG91dGZpbGUpOwotCQl9Ci0JfQotCi0JLyog QXBwZW5kIGdsb2JhbC5kYXQgaW50byBvdXRwdXQgZmlsZSBvciBwcmludCB0byBzdGRvdXQu ICovCi0Jd2hpbGUgKChjID0gZmdldGMocGZpbGUpKSAhPSBFT0YpCi0JCWZwdXRjKGMsIE9Q Rik7Ci0KLQlmY2xvc2UocGZpbGUpOwotCi0JLyogQ2xvc2Ugb3V0cHV0IGZpbGUuICovCi0J aWYgKHN0cmNtcChvdXRmaWxlLCAiLSIpICE9IDApCi0JCWZjbG9zZShPUEYpOwotfQpkaWZm IC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsIGIvc3JjL2Jpbi9wZ19k dW1wL3QvMDAxX2Jhc2ljLnBsCmluZGV4IGMzYzVmYWUxMWVhLi4zN2Q4OTNkNWU2YSAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCisrKyBiL3NyYy9iaW4v cGdfZHVtcC90LzAwMV9iYXNpYy5wbApAQCAtMjM3LDI0ICsyMzcsNiBAQCBjb21tYW5kX2Zh aWxzX2xpa2UoCiAJJ3BnX3Jlc3RvcmU6IG9wdGlvbnMgLUNcLy0tY3JlYXRlIGFuZCAtMVwv LS1zaW5nbGUtdHJhbnNhY3Rpb24gY2Fubm90IGJlIHVzZWQgdG9nZXRoZXInCiApOwogCi1j b21tYW5kX2ZhaWxzX2xpa2UoCi0JWyAncGdfcmVzdG9yZScsICctLWV4Y2x1ZGUtZGF0YWJh c2U9Zm9vJywgJy0tZ2xvYmFscy1vbmx5JywgJy1kJywgJ3h4eCcgXSwKLQlxci9cUXBnX3Jl c3RvcmU6IGVycm9yOiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2Vk IHRvZ2V0aGVyIHdpdGggLWdcLy0tZ2xvYmFscy1vbmx5XEUvLAotCSdwZ19yZXN0b3JlOiBv cHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgg LWcvLS1nbG9iYWxzLW9ubHknCi0pOwotCi1jb21tYW5kX2ZhaWxzX2xpa2UoCi0JWyAncGdf cmVzdG9yZScsICctLWV4Y2x1ZGUtZGF0YWJhc2U9Zm9vJywgJy1kJywgJ3h4eCcsICdkdW1w ZGlyJyBdLAotCXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtLWV4Y2x1ZGUtZGF0 YWJhc2UgY2FuIGJlIHVzZWQgb25seSB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0 ZWQgYnkgcGdfZHVtcGFsbFxFLywKLQknV2hlbiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNl IGlzIHVzZWQgaW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcCcKLSk7Ci0KLWNv bW1hbmRfZmFpbHNfbGlrZSgKLQlbICdwZ19yZXN0b3JlJywgJy0tZ2xvYmFscy1vbmx5Jywg Jy1kJywgJ3h4eCcsICdkdW1wZGlyJyBdLAotCXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9w dGlvbiAtZ1wvLS1nbG9iYWxzLW9ubHkgY2FuIGJlIHVzZWQgb25seSB3aGVuIHJlc3Rvcmlu ZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbFxFLywKLQknV2hlbiBvcHRpb24g LS1nbG9iYWxzLW9ubHkgaXMgbm90IHVzZWQgaW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAgb2Yg cGdfZHVtcCcKLSk7Ci0KICMgYWxzbyBmYWlscyBmb3IgLXIgYW5kIC10LCBidXQgaXQgc2Vl bXMgcG9pbnRsZXNzIHRvIGFkZCBtb3JlIHRlc3RzIGZvciB0aG9zZS4KIGNvbW1hbmRfZmFp bHNfbGlrZSgKIAlbICdwZ19kdW1wYWxsJywgJy0tZXhjbHVkZS1kYXRhYmFzZT1mb28nLCAn LS1nbG9iYWxzLW9ubHknIF0sCkBAIC0yNjIsOCArMjQ0LDQgQEAgY29tbWFuZF9mYWlsc19s aWtlKAogCSdwZ19kdW1wYWxsOiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBi ZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWcvLS1nbG9iYWxzLW9ubHknCiApOwogCi1jb21tYW5k X2ZhaWxzX2xpa2UoCi0JWyAncGdfZHVtcGFsbCcsICctLWZvcm1hdCcsICd4JyBdLAotCXFy L1xRcGdfZHVtcGFsbDogZXJyb3I6IHVucmVjb2duaXplZCBvdXRwdXQgZm9ybWF0ICJ4Ijtc RS8sCi0JJ3BnX2R1bXBhbGw6IHVucmVjb2duaXplZCBvdXRwdXQgZm9ybWF0Jyk7CiBkb25l X3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC90LzAwNl9wZ19kdW1w YWxsLnBsIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDA2X3BnX2R1bXBhbGwucGwKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyNzRiNzc3NTg2Li4wMDAwMDAwMDAwMAotLS0gYS9z cmMvYmluL3BnX2R1bXAvdC8wMDZfcGdfZHVtcGFsbC5wbAorKysgL2Rldi9udWxsCkBAIC0x LDQwMCArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAyMS0yMDI1LCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAotCi11c2Ugc3RyaWN0OwotdXNlIHdhcm5pbmdzIEZB VEFMID0+ICdhbGwnOwotCi11c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKLXVzZSBQ b3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKLXVzZSBUZXN0OjpNb3JlOwotCi1teSAkdGVtcGRp ciA9IFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0ZW1wZGlyOwotbXkgJHJ1bl9kYiA9ICdw b3N0Z3Jlcyc7Ci1teSAkc2VwID0gJHdpbmRvd3Nfb3MgPyAiXFwiIDogIi8iOwotCi0jIFRh Ymxlc3BhY2UgbG9jYXRpb25zIHVzZWQgYnkgInJlc3RvcmVfdGFibGVzcGFjZSIgdGVzdCBj YXNlLgotbXkgJHRhYmxlc3BhY2UxID0gIiR7dGVtcGRpcn0ke3NlcH10YmwxIjsKLW15ICR0 YWJsZXNwYWNlMiA9ICIke3RlbXBkaXJ9JHtzZXB9dGJsMiI7Ci1ta2RpcigkdGFibGVzcGFj ZTEpIHx8IGRpZSAibWtkaXIgJHRhYmxlc3BhY2UxICQhIjsKLW1rZGlyKCR0YWJsZXNwYWNl MikgfHwgZGllICJta2RpciAkdGFibGVzcGFjZTIgJCEiOwotCi0jIFNjYXBlIHRhYmxlc3Bh Y2UgbG9jYXRpb25zIG9uIFdpbmRvd3MuCi0kdGFibGVzcGFjZTEgPSAkd2luZG93c19vcyA/ ICgkdGFibGVzcGFjZTEgPX4gcy9cXC9cXFxcL2dyKSA6ICR0YWJsZXNwYWNlMTsKLSR0YWJs ZXNwYWNlMiA9ICR3aW5kb3dzX29zID8gKCR0YWJsZXNwYWNlMiA9fiBzL1xcL1xcXFwvZ3Ip IDogJHRhYmxlc3BhY2UyOwotCi0jIFdoZXJlIHBnX2R1bXBhbGwgd2lsbCBiZSBleGVjdXRl ZC4KLW15ICRub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdub2RlJyk7 Ci0kbm9kZS0+aW5pdDsKLSRub2RlLT5zdGFydDsKLQotCi0jIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgRGVmaW5p dGlvbiBvZiB0aGUgcGdfZHVtcGFsbCB0ZXN0IGNhc2VzIHRvIHJ1bi4KLSMKLSMgRWFjaCBv ZiB0aGVzZSB0ZXN0IGNhc2VzIGFyZSBuYW1lZCBhbmQgdGhvc2UgbmFtZXMgYXJlIHVzZWQg Zm9yIGZhaWwKLSMgcmVwb3J0aW5nIGFuZCBhbHNvIHRvIHNhdmUgdGhlIGR1bXAgYW5kIHJl c3RvcmUgaW5mb3JtYXRpb24gbmVlZGVkIGZvciB0aGUKLSMgdGVzdCB0byBhc3NlcnQuCi0j Ci0jIFRoZSAic2V0dXBfc3FsIiBpcyBhIHBzcWwgdmFsaWQgc2NyaXB0IHRoYXQgY29udGFp bnMgU1FMIGNvbW1hbmRzIHRvIGV4ZWN1dGUKLSMgYmVmb3JlIG9mIGFjdHVhbGx5IGV4ZWN1 dGUgdGhlIHRlc3RzLiBUaGUgc2V0dXBzIGFyZSBhbGwgZXhlY3V0ZWQgYmVmb3JlIG9mCi0j IGFueSB0ZXN0IGV4ZWN1dGlvbi4KLSMKLSMgVGhlICJkdW1wX2NtZCIgYW5kICJyZXN0b3Jl X2NtZCIgYXJlIHRoZSBjb21tYW5kcyB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQuIFRoZQotIyAi cmVzdG9yZV9jbWQiIG11c3QgaGF2ZSB0aGUgLS1maWxlIGZsYWcgdG8gc2F2ZSB0aGUgcmVz dG9yZSBvdXRwdXQgc28gdGhhdCB3ZQotIyBjYW4gYXNzZXJ0IG9uIGl0LgotIwotIyBUaGUg Imxpa2UiIGFuZCAidW5saWtlIiBpcyBhIHJlZ2V4cCB0aGF0IGlzIHVzZWQgdG8gbWF0Y2gg dGhlIHBnX3Jlc3RvcmUKLSMgb3V0cHV0LiBJdCBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIG9m IHRoZW4gZmlsbGVkIHBlciB0ZXN0IGNhc2VzIGJ1dCBpdCBhbHNvCi0jIGNhbiBoYXZlIGJv dGguIFNlZSAiZXhjbHVkaW5nX2RhdGFiYXNlcyIgdGVzdCBjYXNlIGZvciBleGFtcGxlLgot bXkgJXBnZHVtcGFsbF9ydW5zID0gKAotCXJlc3RvcmVfcm9sZXMgPT4gewotCQlzZXR1cF9z cWwgPT4gJwotCQlDUkVBVEUgUk9MRSBkdW1wYWxsIFdJVEggRU5DUllQVEVEIFBBU1NXT1JE IFwnYWRtaW5cJyBTVVBFUlVTRVI7Ci0JCUNSRUFURSBST0xFIGR1bXBhbGwyIFdJVEggUkVQ TElDQVRJT04gQ09OTkVDVElPTiBMSU1JVCAxMDsnLAotCQlkdW1wX2NtZCA9PiBbCi0JCQkn cGdfZHVtcGFsbCcsCi0JCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAotCQkJJy0tZmls ZScgPT4gIiR0ZW1wZGlyL3Jlc3RvcmVfcm9sZXMiLAotCQldLAotCQlyZXN0b3JlX2NtZCA9 PiBbCi0JCQkncGdfcmVzdG9yZScsICctQycsCi0JCQknLS1mb3JtYXQnID0+ICdkaXJlY3Rv cnknLAotCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL3Jlc3RvcmVfcm9sZXMuc3FsIiwKLQkJ CSIkdGVtcGRpci9yZXN0b3JlX3JvbGVzIiwKLQkJXSwKLQkJbGlrZSA9PiBxci8KLQkJCV5c cypcUUNSRUFURSBST0xFIGR1bXBhbGw7XEVccypcbgotCQkJXHMqXFFBTFRFUiBST0xFIGR1 bXBhbGwgV0lUSCBTVVBFUlVTRVIgSU5IRVJJVCBOT0NSRUFURVJPTEUgTk9DUkVBVEVEQiBO T0xPR0lOIE5PUkVQTElDQVRJT04gTk9CWVBBU1NSTFMgUEFTU1dPUkQgJ1NDUkFNLVNIQS0y NTZcRQotCQkJW14nXSsnO1xzKlxuCi0JCQlccypcUUNSRUFURSBST0xFIGR1bXBhbGwyO1xF Ci0JCQlccypcUUFMVEVSIFJPTEUgZHVtcGFsbDIgV0lUSCBOT1NVUEVSVVNFUiBJTkhFUklU IE5PQ1JFQVRFUk9MRSBOT0NSRUFURURCIE5PTE9HSU4gUkVQTElDQVRJT04gTk9CWVBBU1NS TFMgQ09OTkVDVElPTiBMSU1JVCAxMDtcRQotCQkveG0KLQl9LAotCi0JcmVzdG9yZV90YWJs ZXNwYWNlID0+IHsKLQkJc2V0dXBfc3FsID0+ICIKLQkJQ1JFQVRFIFJPTEUgdGFwOwotCQlD UkVBVEUgVEFCTEVTUEFDRSB0YmwxIE9XTkVSIHRhcCBMT0NBVElPTiAnJHRhYmxlc3BhY2Ux JzsKLQkJQ1JFQVRFIFRBQkxFU1BBQ0UgdGJsMiBPV05FUiB0YXAgTE9DQVRJT04gJyR0YWJs ZXNwYWNlMicgV0lUSCAoc2VxX3BhZ2VfY29zdD0xLjApOyIsCi0JCWR1bXBfY21kID0+IFsK LQkJCSdwZ19kdW1wYWxsJywKLQkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCi0JCQkn LS1maWxlJyA9PiAiJHRlbXBkaXIvcmVzdG9yZV90YWJsZXNwYWNlIiwKLQkJXSwKLQkJcmVz dG9yZV9jbWQgPT4gWwotCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAotCQkJJy0tZm9ybWF0JyA9 PiAnZGlyZWN0b3J5JywKLQkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9yZXN0b3JlX3RhYmxl c3BhY2Uuc3FsIiwKLQkJCSIkdGVtcGRpci9yZXN0b3JlX3RhYmxlc3BhY2UiLAotCQldLAot CQkjIE1hdGNoICJFIiBhcyBvcHRpb25hbCBzaW5jZSBpdCBpcyBhZGRlZCBvbiBMT0NBVElP TiB3aGVuIHJ1bm5pbmcgb24KLQkJIyBXaW5kb3dzLgotCQlsaWtlID0+IHFyL14KLQkJCVxu XFFDUkVBVEUgVEFCTEVTUEFDRSB0YmwxIE9XTkVSIHRhcCBMT0NBVElPTiBcRSg/OkUpP1xR JyR0YWJsZXNwYWNlMSc7XEUKLQkJCVxuXFFDUkVBVEUgVEFCTEVTUEFDRSB0YmwyIE9XTkVS IHRhcCBMT0NBVElPTiBcRSg/OkUpP1xRJyR0YWJsZXNwYWNlMic7XEUKLQkJCVxuXFFBTFRF UiBUQUJMRVNQQUNFIHRibDIgU0VUIChzZXFfcGFnZV9jb3N0PTEuMCk7XEUKLQkJL3htLAot CX0sCi0KLQlyZXN0b3JlX2dyYW50cyA9PiB7Ci0JCXNldHVwX3NxbCA9PiAiCi0JCUNSRUFU RSBEQVRBQkFTRSB0YXBncmFudHNkYjsKLQkJQ1JFQVRFIFNDSEVNQSBwcml2YXRlOwotCQlD UkVBVEUgU0VRVUVOQ0Ugc2VyaWFsIFNUQVJUIDEwMTsKLQkJQ1JFQVRFIEZVTkNUSU9OIGZu KCkgUkVUVVJOUyB2b2lkIEFTIFwkXCQKLQkJQkVHSU4KLQkJRU5EOwotCQlcJFwkIExBTkdV QUdFIHBscGdzcWw7Ci0JCUNSRUFURSBST0xFIHN1cGVyOwotCQlDUkVBVEUgUk9MRSBncmFu dDE7Ci0JCUNSRUFURSBST0xFIGdyYW50MjsKLQkJQ1JFQVRFIFJPTEUgZ3JhbnQzOwotCQlD UkVBVEUgUk9MRSBncmFudDQ7Ci0JCUNSRUFURSBST0xFIGdyYW50NTsKLQkJQ1JFQVRFIFJP TEUgZ3JhbnQ2OwotCQlDUkVBVEUgUk9MRSBncmFudDc7Ci0JCUNSRUFURSBST0xFIGdyYW50 ODsKLQotCQlDUkVBVEUgVEFCTEUgdCAoaWQgaW50KTsKLQkJSU5TRVJUIElOVE8gdCBWQUxV RVMgKDEpLCAoMiksICgzKSwgKDQpOwotCi0JCUdSQU5UIFNFTEVDVCBPTiBUQUJMRSB0IFRP IGdyYW50MTsKLQkJR1JBTlQgSU5TRVJUIE9OIFRBQkxFIHQgVE8gZ3JhbnQyOwotCQlHUkFO VCBBTEwgUFJJVklMRUdFUyBPTiBUQUJMRSB0IHRvIGdyYW50MzsKLQkJR1JBTlQgQ09OTkVD VCwgQ1JFQVRFIE9OIERBVEFCQVNFIHRhcGdyYW50c2RiIFRPIGdyYW50NDsKLQkJR1JBTlQg VVNBR0UsIENSRUFURSBPTiBTQ0hFTUEgcHJpdmF0ZSBUTyBncmFudDU7Ci0JCUdSQU5UIFVT QUdFLCBTRUxFQ1QsIFVQREFURSBPTiBTRVFVRU5DRSBzZXJpYWwgVE8gZ3JhbnQ2OwotCQlH UkFOVCBzdXBlciBUTyBncmFudDc7Ci0JCUdSQU5UIEVYRUNVVEUgT04gRlVOQ1RJT04gZm4o KSBUTyBncmFudDg7Ci0JCSIsCi0JCWR1bXBfY21kID0+IFsKLQkJCSdwZ19kdW1wYWxsJywK LQkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCi0JCQknLS1maWxlJyA9PiAiJHRlbXBk aXIvcmVzdG9yZV9ncmFudHMiLAotCQldLAotCQlyZXN0b3JlX2NtZCA9PiBbCi0JCQkncGdf cmVzdG9yZScsICctQycsCi0JCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAotCQkJJy0t ZmlsZScgPT4gIiR0ZW1wZGlyL3Jlc3RvcmVfZ3JhbnRzLnNxbCIsCi0JCQkiJHRlbXBkaXIv cmVzdG9yZV9ncmFudHMiLAotCQldLAotCQlsaWtlID0+IHFyL14KLQkJCVxuXFFHUkFOVCBz dXBlciBUTyBncmFudDcgV0lUSCBJTkhFUklUIFRSVUUgR1JBTlRFRCBCWVxFCi0JCQkoLipc bikqCi0JCQlcblxRR1JBTlQgQUxMIE9OIFNDSEVNQSBwcml2YXRlIFRPIGdyYW50NTtcRQot CQkJKC4qXG4pKgotCQkJXG5cUUdSQU5UIEFMTCBPTiBGVU5DVElPTiBwdWJsaWMuZm4oKSBU TyBncmFudDg7XEUKLQkJCSguKlxuKSoKLQkJCVxuXFFHUkFOVCBBTEwgT04gU0VRVUVOQ0Ug cHVibGljLnNlcmlhbCBUTyBncmFudDY7XEUKLQkJCSguKlxuKSoKLQkJCVxuXFFHUkFOVCBT RUxFQ1QgT04gVEFCTEUgcHVibGljLnQgVE8gZ3JhbnQxO1xFCi0JCQlcblxRR1JBTlQgSU5T RVJUIE9OIFRBQkxFIHB1YmxpYy50IFRPIGdyYW50MjtcRQotCQkJXG5cUUdSQU5UIEFMTCBP TiBUQUJMRSBwdWJsaWMudCBUTyBncmFudDM7XEUKLQkJCSguKlxuKSoKLQkJCVxuXFFHUkFO VCBDUkVBVEUsQ09OTkVDVCBPTiBEQVRBQkFTRSB0YXBncmFudHNkYiBUTyBncmFudDQ7XEUK LQkJL3htLAotCX0sCi0KLQlleGNsdWRpbmdfZGF0YWJhc2VzID0+IHsKLQkJc2V0dXBfc3Fs ID0+ICdDUkVBVEUgREFUQUJBU0UgZGIxOwotCQlcYyBkYjEKLQkJQ1JFQVRFIFRBQkxFIHQx IChpZCBpbnQpOwotCQlJTlNFUlQgSU5UTyB0MSBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQp OwotCQlDUkVBVEUgVEFCTEUgdDIgKGlkIGludCk7Ci0JCUlOU0VSVCBJTlRPIHQyIFZBTFVF UyAoMSksICgyKSwgKDMpLCAoNCk7Ci0KLQkJQ1JFQVRFIERBVEFCQVNFIGRiMjsKLQkJXGMg ZGIyCi0JCUNSRUFURSBUQUJMRSB0MyAoaWQgaW50KTsKLQkJSU5TRVJUIElOVE8gdDMgVkFM VUVTICgxKSwgKDIpLCAoMyksICg0KTsKLQkJQ1JFQVRFIFRBQkxFIHQ0IChpZCBpbnQpOwot CQlJTlNFUlQgSU5UTyB0NCBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOwotCi0JCUNSRUFU RSBEQVRBQkFTRSBkYmV4MzsKLQkJXGMgZGJleDMKLQkJQ1JFQVRFIFRBQkxFIHQ1IChpZCBp bnQpOwotCQlJTlNFUlQgSU5UTyB0NSBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOwotCQlD UkVBVEUgVEFCTEUgdDYgKGlkIGludCk7Ci0JCUlOU0VSVCBJTlRPIHQ2IFZBTFVFUyAoMSks ICgyKSwgKDMpLCAoNCk7Ci0KLQkJQ1JFQVRFIERBVEFCQVNFIGRiZXg0OwotCQlcYyBkYmV4 NAotCQlDUkVBVEUgVEFCTEUgdDcgKGlkIGludCk7Ci0JCUlOU0VSVCBJTlRPIHQ3IFZBTFVF UyAoMSksICgyKSwgKDMpLCAoNCk7Ci0JCUNSRUFURSBUQUJMRSB0OCAoaWQgaW50KTsKLQkJ SU5TRVJUIElOVE8gdDggVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKLQotCQlDUkVBVEUg REFUQUJBU0UgZGI1OwotCQlcYyBkYjUKLQkJQ1JFQVRFIFRBQkxFIHQ5IChpZCBpbnQpOwot CQlJTlNFUlQgSU5UTyB0OSBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOwotCQlDUkVBVEUg VEFCTEUgdDEwIChpZCBpbnQpOwotCQlJTlNFUlQgSU5UTyB0MTAgVkFMVUVTICgxKSwgKDIp LCAoMyksICg0KTsKLQkJJywKLQkJZHVtcF9jbWQgPT4gWwotCQkJJ3BnX2R1bXBhbGwnLAot CQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKLQkJCSctLWZpbGUnID0+ICIkdGVtcGRp ci9leGNsdWRpbmdfZGF0YWJhc2VzIiwKLQkJCSctLWV4Y2x1ZGUtZGF0YWJhc2UnID0+ICdk YmV4KicsCi0JCV0sCi0JCXJlc3RvcmVfY21kID0+IFsKLQkJCSdwZ19yZXN0b3JlJywgJy1D JywKLQkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCi0JCQknLS1maWxlJyA9PiAiJHRl bXBkaXIvZXhjbHVkaW5nX2RhdGFiYXNlcy5zcWwiLAotCQkJJy0tZXhjbHVkZS1kYXRhYmFz ZScgPT4gJ2RiNScsCi0JCQkiJHRlbXBkaXIvZXhjbHVkaW5nX2RhdGFiYXNlcyIsCi0JCV0s Ci0JCWxpa2UgPT4gcXIvXgotCQkJXG5cUUNSRUFURSBEQVRBQkFTRSBkYjFcRQotCQkJKC4q XG4pKgotCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDEgKFxFCi0JCQkoLipcbikqCi0J CQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50MiAoXEUKLQkJCSguKlxuKSoKLQkJCVxuXFFD UkVBVEUgREFUQUJBU0UgZGIyXEUKLQkJCSguKlxuKSoKLQkJCVxuXFFDUkVBVEUgVEFCTEUg cHVibGljLnQzIChcRQotCQkJKC4qXG4pKgotCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMu dDQgKC94bSwKLQkJdW5saWtlID0+IHFyL14KLQkJCVxuXFFDUkVBVEUgREFUQUJBU0UgZGIz XEUKLQkJCSguKlxuKSoKLQkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQ1IChcRQotCQkJ KC4qXG4pKgotCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDYgKFxFCi0JCQkoLipcbikq Ci0JCQlcblxRQ1JFQVRFIERBVEFCQVNFIGRiNFxFCi0JCQkoLipcbikqCi0JCQlcblxRQ1JF QVRFIFRBQkxFIHB1YmxpYy50NyAoXEUKLQkJCSguKlxuKSoKLQkJCVxuXFFDUkVBVEUgVEFC TEUgcHVibGljLnQ4IChcRQotCQkJXG5cUUNSRUFURSBEQVRBQkFTRSBkYjVcRQotCQkJKC4q XG4pKgotCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDkgKFxFCi0JCQkoLipcbikqCi0J CQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50MTAgKFxFCi0JCS94bSwKLQl9LAotCi0JZm9y bWF0X2RpcmVjdG9yeSA9PiB7Ci0JCXNldHVwX3NxbCA9PiAiQ1JFQVRFIFRBQkxFIGZvcm1h dF9kaXJlY3RvcnkoYSBpbnQsIGIgYm9vbGVhbiwgYyB0ZXh0KTsKLQkJSU5TRVJUIElOVE8g Zm9ybWF0X2RpcmVjdG9yeSBWQUxVRVMgKDEsIHRydWUsICduYW1lMScpLCAoMiwgZmFsc2Us ICduYW1lMicpOyIsCi0JCWR1bXBfY21kID0+IFsKLQkJCSdwZ19kdW1wYWxsJywKLQkJCSct LWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCi0JCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZm9y bWF0X2RpcmVjdG9yeSIsCi0JCV0sCi0JCXJlc3RvcmVfY21kID0+IFsKLQkJCSdwZ19yZXN0 b3JlJywgJy1DJywKLQkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCi0JCQknLS1maWxl JyA9PiAiJHRlbXBkaXIvZm9ybWF0X2RpcmVjdG9yeS5zcWwiLAotCQkJIiR0ZW1wZGlyL2Zv cm1hdF9kaXJlY3RvcnkiLAotCQldLAotCQlsaWtlID0+IHFyL15cblxRQ09QWSBwdWJsaWMu Zm9ybWF0X2RpcmVjdG9yeSAoYSwgYiwgYykgRlJPTSBzdGRpbjsveG0KLQl9LAotCi0JZm9y bWF0X3RhciA9PiB7Ci0JCXNldHVwX3NxbCA9PiAiQ1JFQVRFIFRBQkxFIGZvcm1hdF90YXIo YSBpbnQsIGIgYm9vbGVhbiwgYyB0ZXh0KTsKLQkJSU5TRVJUIElOVE8gZm9ybWF0X3RhciBW QUxVRVMgKDEsIGZhbHNlLCAnbmFtZTMnKSwgKDIsIHRydWUsICduYW1lNCcpOyIsCi0JCWR1 bXBfY21kID0+IFsKLQkJCSdwZ19kdW1wYWxsJywKLQkJCSctLWZvcm1hdCcgPT4gJ3Rhcics Ci0JCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZm9ybWF0X3RhciIsCi0JCV0sCi0JCXJlc3Rv cmVfY21kID0+IFsKLQkJCSdwZ19yZXN0b3JlJywgJy1DJywKLQkJCSctLWZvcm1hdCcgPT4g J3RhcicsCi0JCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZm9ybWF0X3Rhci5zcWwiLAotCQkJ IiR0ZW1wZGlyL2Zvcm1hdF90YXIiLAotCQldLAotCQlsaWtlID0+IHFyL15cblxRQ09QWSBw dWJsaWMuZm9ybWF0X3RhciAoYSwgYiwgYykgRlJPTSBzdGRpbjsveG0KLQl9LAotCi0JZm9y bWF0X2N1c3RvbSA9PiB7Ci0JCXNldHVwX3NxbCA9PiAiQ1JFQVRFIFRBQkxFIGZvcm1hdF9j dXN0b20oYSBpbnQsIGIgYm9vbGVhbiwgYyB0ZXh0KTsKLQkJSU5TRVJUIElOVE8gZm9ybWF0 X2N1c3RvbSBWQUxVRVMgKDEsIGZhbHNlLCAnbmFtZTUnKSwgKDIsIHRydWUsICduYW1lNicp OyIsCi0JCWR1bXBfY21kID0+IFsKLQkJCSdwZ19kdW1wYWxsJywKLQkJCSctLWZvcm1hdCcg PT4gJ2N1c3RvbScsCi0JCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZm9ybWF0X2N1c3RvbSIs Ci0JCV0sCi0JCXJlc3RvcmVfY21kID0+IFsKLQkJCSdwZ19yZXN0b3JlJywgJy1DJywKLQkJ CSctLWZvcm1hdCcgPT4gJ2N1c3RvbScsCi0JCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZm9y bWF0X2N1c3RvbS5zcWwiLAotCQkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLAotCQldLAot CQlsaWtlID0+IHFyL14gXG5cUUNPUFkgcHVibGljLmZvcm1hdF9jdXN0b20gKGEsIGIsIGMp IEZST00gc3RkaW47L3htCi0JfSwKLQotCWR1bXBfZ2xvYmFsc19vbmx5ID0+IHsKLQkJc2V0 dXBfc3FsID0+ICJDUkVBVEUgVEFCTEUgZm9ybWF0X2RpcihhIGludCwgYiBib29sZWFuLCBj IHRleHQpOwotCQlJTlNFUlQgSU5UTyBmb3JtYXRfZGlyIFZBTFVFUyAoMSwgZmFsc2UsICdu YW1lNScpLCAoMiwgdHJ1ZSwgJ25hbWU2Jyk7IiwKLQkJZHVtcF9jbWQgPT4gWwotCQkJJ3Bn X2R1bXBhbGwnLAotCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKLQkJCSctLWdsb2Jh bHMtb25seScsCi0JCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZHVtcF9nbG9iYWxzX29ubHki LAotCQldLAotCQlyZXN0b3JlX2NtZCA9PiBbCi0JCQkncGdfcmVzdG9yZScsICctQycsICct LWdsb2JhbHMtb25seScsCi0JCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAotCQkJJy0t ZmlsZScgPT4gIiR0ZW1wZGlyL2R1bXBfZ2xvYmFsc19vbmx5LnNxbCIsCi0JCQkiJHRlbXBk aXIvZHVtcF9nbG9iYWxzX29ubHkiLAotCQldLAotCQlsaWtlID0+IHFyLwotICAgICAgICAg ICAgXlxzKlxRQ1JFQVRFIFJPTEUgZHVtcGFsbDtcRVxzKlxuCi0JCQkveG0KLQl9LCk7Ci0K LSMgRmlyc3QgZXhlY3V0ZSB0aGUgc2V0dXBfc3FsCi1mb3JlYWNoIG15ICRydW4gKHNvcnQg a2V5cyAlcGdkdW1wYWxsX3J1bnMpCi17Ci0JaWYgKCRwZ2R1bXBhbGxfcnVuc3skcnVufS0+ e3NldHVwX3NxbH0pCi0JewotCQkkbm9kZS0+c2FmZV9wc3FsKCRydW5fZGIsICRwZ2R1bXBh bGxfcnVuc3skcnVufS0+e3NldHVwX3NxbH0pOwotCX0KLX0KLQotIyBFeGVjdXRlIHRoZSB0 ZXN0cwotZm9yZWFjaCBteSAkcnVuIChzb3J0IGtleXMgJXBnZHVtcGFsbF9ydW5zKQotewot CSMgQ3JlYXRlIGEgbmV3IHRhcmdldCBjbHVzdGVyIHRvIHBnX3Jlc3RvcmUgZWFjaCB0ZXN0 IGNhc2UgcnVuIHNvIHRoYXQgd2UKLQkjIGRvbid0IG5lZWQgdG8gdGFrZSBjYXJlIG9mIHRo ZSBjbGVhbnVwIGZyb20gdGhlIHRhcmdldCBjbHVzdGVyIGFmdGVyIGVhY2gKLQkjIHJ1bi4K LQlteSAkdGFyZ2V0X25vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoInRh cmdldF8kcnVuIik7Ci0JJHRhcmdldF9ub2RlLT5pbml0OwotCSR0YXJnZXRfbm9kZS0+c3Rh cnQ7Ci0KLQkjIER1bXBhbGwgZnJvbSBub2RlIGNsdXN0ZXIuCi0JJG5vZGUtPmNvbW1hbmRf b2soXEB7ICRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e2R1bXBfY21kfSB9LAotCQkiJHJ1bjog cGdfZHVtcGFsbCBydW5zIik7Ci0KLQkjIFJlc3RvcmUgdGhlIGR1bXAgb24gInRhcmdldF9u b2RlIiBjbHVzdGVyLgotCW15IEByZXN0b3JlX2NtZCA9ICgKLQkJQHsgJHBnZHVtcGFsbF9y dW5zeyRydW59LT57cmVzdG9yZV9jbWR9IH0sCi0JCSctLWhvc3QnLCAkdGFyZ2V0X25vZGUt Pmhvc3QsICctLXBvcnQnLCAkdGFyZ2V0X25vZGUtPnBvcnQpOwotCi0JbXkgKCRzdGRvdXQs ICRzdGRlcnIpID0gcnVuX2NvbW1hbmQoXEByZXN0b3JlX2NtZCk7Ci0KLQkjIHBnX3Jlc3Rv cmUgLS1maWxlIG91dHB1dCBmaWxlLgotCW15ICRvdXRwdXRfZmlsZSA9IHNsdXJwX2ZpbGUo IiR0ZW1wZGlyLyR7cnVufS5zcWwiKTsKLQotCWlmICggICAhKCRwZ2R1bXBhbGxfcnVuc3sk cnVufS0+e2xpa2V9KQotCQkmJiAhKCRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e3VubGlrZX0p KQotCXsKLQkJZGllICJtaXNzaW5nIFwibGlrZVwiIG9yIFwidW5saWtlXCIgaW4gdGVzdCBc IiRydW5cIiI7Ci0JfQotCi0JaWYgKCRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e2xpa2V9KQot CXsKLQkJbGlrZSgkb3V0cHV0X2ZpbGUsICRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e2xpa2V9 LCAic2hvdWxkIGR1bXAgJHJ1biIpOwotCX0KLQotCWlmICgkcGdkdW1wYWxsX3J1bnN7JHJ1 bn0tPnt1bmxpa2V9KQotCXsKLQkJdW5saWtlKAotCQkJJG91dHB1dF9maWxlLAotCQkJJHBn ZHVtcGFsbF9ydW5zeyRydW59LT57dW5saWtlfSwKLQkJCSJzaG91bGQgbm90IGR1bXAgJHJ1 biIpOwotCX0KLX0KLQotIyBTb21lIG5lZ2F0aXZlIHRlc3QgY2FzZSB3aXRoIGR1bXAgb2Yg cGdfZHVtcGFsbCBhbmQgcmVzdG9yZSB1c2luZyBwZ19yZXN0b3JlCi0jIHRlc3QgY2FzZSAx OiB3aGVuIC1DIGlzIG5vdCB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1 bXBhbGwKLSRub2RlLT5jb21tYW5kX2ZhaWxzX2xpa2UoCi0JWwotCQkncGdfcmVzdG9yZScs Ci0JCSIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwKLQkJJy0tZm9ybWF0JyA9PiAnY3VzdG9t JywKLQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Vycm9yX3Rlc3Quc3FsIiwKLQldLAotCXFy L1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtQ1wvLS1jcmVhdGUgbXVzdCBiZSBzcGVj aWZpZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGxc RS8sCi0JJ1doZW4gLUMgaXMgbm90IHVzZWQgaW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAgb2Yg cGdfZHVtcGFsbCcpOwotCi0jIHRlc3QgY2FzZSAyOiBXaGVuIC0tbGlzdCBvcHRpb24gaXMg dXNlZCB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbAotJG5vZGUtPmNvbW1hbmRfZmFpbHNfbGlr ZSgKLQlbCi0JCSdwZ19yZXN0b3JlJywKLQkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLCAn LUMnLAotCQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAotCQknLS1saXN0JywKLQkJJy0tZmls ZScgPT4gIiR0ZW1wZGlyL2Vycm9yX3Rlc3Quc3FsIiwKLQldLAotCXFyL1xRcGdfcmVzdG9y ZTogZXJyb3I6IG9wdGlvbiAtbFwvLS1saXN0IGNhbm5vdCBiZSB1c2VkIHdoZW4gcmVzdG9y aW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsXEUvLAotCSdXaGVuIC0tbGlz dCBpcyB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwnKTsKLQot IyB0ZXN0IGNhc2UgMzogV2hlbiBub24tZXhpc3QgZGF0YWJhc2UgaXMgZ2l2ZW4gd2l0aCAt ZCBvcHRpb24KLSRub2RlLT5jb21tYW5kX2ZhaWxzX2xpa2UoCi0JWwotCQkncGdfcmVzdG9y ZScsCi0JCSIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwgJy1DJywKLQkJJy0tZm9ybWF0JyA9 PiAnY3VzdG9tJywKLQkJJy1kJyA9PiAnZGJwcScsCi0JXSwKLQlxci9cUXBnX3Jlc3RvcmU6 IGVycm9yOiBjb3VsZCBub3QgY29ubmVjdCB0byBkYXRhYmFzZSAiZGJwcSJcRS8sCi0JJ1do ZW4gbm9uLWV4aXN0ZW50IGRhdGFiYXNlIGlzIGdpdmVuIHdpdGggLWQgb3B0aW9uIGluIHBn X3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwnCi0pOwotCi0kbm9kZS0+c3RvcCgn ZmFzdCcpOwotCi1kb25lX3Rlc3RpbmcoKTsK --------------WqzoA5BkqOMftx1yHF4f9VIN--