Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eRHub-0006p1-NR for pgsql-hackers@arkaria.postgresql.org; Tue, 19 Dec 2017 13:26:26 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eRHub-0002KR-Aj for pgsql-hackers@arkaria.postgresql.org; Tue, 19 Dec 2017 13:26:25 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1eRHua-0002KE-DX for pgsql-hackers@lists.postgresql.org; Tue, 19 Dec 2017 13:26:25 +0000 Received: from mail.postgrespro.ru ([93.174.131.138]) by makus.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1eRHuT-0003ym-LR for pgsql-hackers@postgresql.org; Tue, 19 Dec 2017 13:26:23 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id 9557E21C045E; Tue, 19 Dec 2017 16:26:16 +0300 (MSK) X-Virus-Scanned: Debian amavisd-new at postgrespro.ru X-Spam-Flag: NO X-Spam-Score: 0 X-Spam-Level: X-Spam-Status: No, score=x tagged_above=-99 required=4 WHITELISTED tests=[] autolearn=unavailable Received: from mail.postgrespro.ru (cyclops.l.postgrespro.ru [192.168.27.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id 29C4921C03E8; Tue, 19 Dec 2017 16:26:16 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1513689976; bh=7QAkpkkPLlLxhw/5aGcRgMQNAayYK2YD5k05u+JlheM=; h=Date:From:To:Subject; b=lg82/D+dMiN+MPeunu5tghJ8IEXtKcLk+Qpn9T+XEPRNyjguMIQRduQ7pdSRFq4fq fm0pw25ZFKDK12S+1g0zI41vB7mzFmAYlWb7xLoT5rwBzsNMA2rj0o7Q/aO5mCldhv WNm62Hild2yQx2rLAZG0vusEBJFVD5TCbrhz6TTg= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_52d4cf206ffba79b342af4da983b23cb" Date: Tue, 19 Dec 2017 16:26:16 +0300 From: Marina Polyakova To: PostgreSQL Developers , Fabien COELHO , Kevin Grittner , Andres Freund , Alvaro Herrera , Thomas Munro , Robert Haas Subject: WIP Patch: Pgbench Serialization and deadlock errors Organization: Postgres Professional Message-ID: <894ac29c18f12a4fd6f8c97c9123a152@postgrespro.ru> X-Sender: m.polyakova@postgrespro.ru User-Agent: Roundcube Webmail/1.2.4 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=_52d4cf206ffba79b342af4da983b23cb Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Hello, hackers! This is the fourth version of the patch for pgbench. As in the previous one, most of the changes were made thanks to the comments of Fabien Coelho. Here I propose not to abort the client in pgbench in case of various errors including unsuccessful meta commands. As in the previous version, transactions with serialization and deadlock failures are rolled back and retried until they end successfully or their number of tries reaches maximum. In details: * Client's run is aborted only in case of a serious error, for example, the connection with the backend was lost. Otherwise if the execution of SQL or meta command fails, the client's run continues normally, except that the current transaction block terminates if possible. * If a failed transaction block cannot terminate in the current script, its commands after the error as well as the commands of the following scripts are processed as usual so you can get a lot of errors of type "in failed SQL transaction" (when the current SQL transaction is aborted and commands ignored until end of transaction block). In such cases you can use separate statistics of these errors in all reports. The main differences from the previous version: * support for compound commands (as I understand, they are not properly supported in the original version, since the execution status is processed only for the first subcommand). Note that: ** not all compound commands that contain subcommands to start or end an explicit transaction block can be retried. For example, you cannot use a compound command to complete a failed transaction block before retrying. Also if there're any subcommands before the explicit transaction block, the latter cannot be retried from the very beginning. ** if you want to know which subcommands of compound SQL commands failed, use the debug output. * do not divide retries by type in all reports (you can get this information from the debug output). * (because of all of the above) option --debug-fails. If you want to distinguish between failures or errors by type, or you want to know which subcommands of compound SQL commands failed, use the the pgbench debugging output created with the option --debug-fails or --debug. The first option is recommended for this purpose because with the second option the debugging output can be very large. * tests for serialization/deadlock errors and retries use advisory locks (as I wrote here [1] other more simple methods can sometimes fail); and they became lighter (28 simple tests instead of 57, 8 runs of pgbench instead of 17). Other smaller differences from the previous version: * receive information from the server whether we are in the transaction block or not; * naming fix (I will be very grateful if a native English speaker comments on this): failures are errors if they cannot be retried; * as usual, code cleanup; in particular, use states instead of the bool variables to complete a failed transaction block. Patch is attached. Any suggestions are welcome! [1] https://www.postgresql.org/message-id/e4c5e8cefa4a8e88f1273b0f1ee29e56%40postgrespro.ru -- Marina Polyakova Postgres Professional: http://www.postgrespro.com The Russian Postgres Company --=_52d4cf206ffba79b342af4da983b23cb Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v4-0001-Pgbench-Errors-and-serialization-deadlock-retries.patch Content-Disposition: attachment; filename=v4-0001-Pgbench-Errors-and-serialization-deadlock-retries.patch; size=135473 RnJvbSAzMzU2MjE1ZWRkYjMyZmIzZDU0MTdiMzRlY2Q4YmNhN2U4MzFlZTBmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbmEgUG9seWFrb3ZhIDxtLnBvbHlha292YUBwb3N0Z3Jl c3Byby5ydT4KRGF0ZTogVHVlLCAxOSBEZWMgMjAxNyAxNjoxMDoxNCArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjRdIFBnYmVuY2ggRXJyb3JzIGFuZCBzZXJpYWxpemF0aW9uL2RlYWRsb2NrIHJldHJp ZXMKCkNsaWVudCdzIHJ1biBpcyBhYm9ydGVkIG9ubHkgaW4gY2FzZSBvZiBhIHNlcmlvdXMgZXJy b3IsIGZvciBleGFtcGxlLCB0aGUKY29ubmVjdGlvbiB3aXRoIHRoZSBiYWNrZW5kIHdhcyBsb3N0 LiBPdGhlcndpc2UgaWYgdGhlIGV4ZWN1dGlvbiBvZiBTUUwgb3IgbWV0YQpjb21tYW5kIGZhaWxz LCB0aGUgY2xpZW50J3MgcnVuIGNvbnRpbnVlcyBub3JtYWxseSwgZXhjZXB0IHRoYXQgdGhlIGN1 cnJlbnQKdHJhbnNhY3Rpb24gYmxvY2sgdGVybWluYXRlcyBpZiBwb3NzaWJsZS4KClRyYW5zYWN0 aW9ucyB3aXRoIHNlcmlhbGl6YXRpb24gb3IgZGVhZGxvY2sgZmFpbHVyZXMgY2FuIGJlIHJvbGxl ZCBiYWNrIGFuZApyZXRyaWVkIGFnYWluIGFuZCBhZ2FpbiB1bnRpbCB0aGV5IGVuZCBzdWNjZXNz ZnVsbHkgb3IgdGhlaXIgbnVtYmVyIG9mIHRyaWVzCnJlYWNoZXMgbWF4aW11bS4gWW91IGNhbiBz ZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRyaWVzIGJ5IHVzaW5nIHRoZQphcHByb3ByaWF0ZSBi ZW5jaG1hcmtpbmcgb3B0aW9uICgtLW1heC10cmllcykuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEu CgpJZiB0aGVyZSdyZSByZXRyaWVzIGFuZC9vciBlcnJvcnMgdGhlaXIgc3RhdGlzdGljcyBhcmUg cHJpbnRlZCBpbiB0aGUgcHJvZ3Jlc3MsCmluIHRoZSB0cmFuc2FjdGlvbiAvIGFnZ3JlZ2F0aW9u IGxvZ3MgYW5kIGluIHRoZSBlbmQgd2l0aCBvdGhlciByZXN1bHRzIChhbGwgYW5kCmZvciBlYWNo IHNjcmlwdCkuIEEgdHJhbnNhY3Rpb24gZXJyb3IgaXMgcmVwb3J0ZWQgaGVyZSBvbmx5IGlmIHRo ZSBsYXN0IHRyeSBvZgp0aGlzIHRyYW5zYWN0aW9uIGZhaWxzLiBBbHNvIHJldHJpZXMgYW5kL29y IGVycm9ycyBhcmUgcHJpbnRlZCBwZXItY29tbWFuZCB3aXRoCmF2ZXJhZ2UgbGF0ZW5jaWVzIGlm IHlvdSB1c2UgdGhlIGFwcHJvcHJpYXRlIGJlbmNobWFya2luZyBvcHRpb24KKC0tcmVwb3J0LXBl ci1jb21tYW5kLCAtcikgYW5kIHRoZSB0b3RhbCBudW1iZXIgb2YgcmV0cmllcyBhbmQvb3IgZXJy b3JzIGlzIG5vdAp6ZXJvLgoKSWYgYSBmYWlsZWQgdHJhbnNhY3Rpb24gYmxvY2sgY2Fubm90IHRl cm1pbmF0ZSBpbiB0aGUgY3VycmVudCBzY3JpcHQsIGl0cwpjb21tYW5kcyBhZnRlciB0aGUgZXJy b3IgYXMgd2VsbCBhcyB0aGUgY29tbWFuZHMgb2YgdGhlIGZvbGxvd2luZyBzY3JpcHRzIGFyZQpw cm9jZXNzZWQgYXMgdXN1YWwgc28geW91IGNhbiBnZXQgYSBsb3Qgb2YgZXJyb3JzIG9mIHR5cGUg ImluIGZhaWxlZCBTUUwKdHJhbnNhY3Rpb24iICh3aGVuIHRoZSBjdXJyZW50IFNRTCB0cmFuc2Fj dGlvbiBpcyBhYm9ydGVkIGFuZCBjb21tYW5kcyBpZ25vcmVkCnVudGlsIGVuZCBvZiB0cmFuc2Fj dGlvbiBibG9jaykuIEluIHN1Y2ggY2FzZXMgeW91IGNhbiB1c2Ugc2VwYXJhdGUgc3RhdGlzdGlj cwpvZiB0aGVzZSBlcnJvcnMgaW4gYWxsIHJlcG9ydHMuCgpJZiB5b3Ugd2FudCB0byBkaXN0aW5n dWlzaCBiZXR3ZWVuIGZhaWx1cmVzIG9yIGVycm9ycyBieSB0eXBlLCBvciB5b3Ugd2FudCB0bwpr bm93IHdoaWNoIHN1YmNvbW1hbmRzIG9mIGNvbXBvdW5kIFNRTCBjb21tYW5kcyBmYWlsZWQsIHVz ZSB0aGUgdGhlIHBnYmVuY2gKZGVidWdnaW5nIG91dHB1dCBjcmVhdGVkIHdpdGggdGhlIG9wdGlv biAtLWRlYnVnLWZhaWxzIG9yIC0tZGVidWcuIFRoZSBmaXJzdApvcHRpb24gaXMgcmVjb21tZW5k ZWQgZm9yIHRoaXMgcHVycG9zZSBiZWNhdXNlIHdpdGggdGhlIHNlY29uZCBvcHRpb24gdGhlCmRl YnVnZ2luZyBvdXRwdXQgY2FuIGJlIHZlcnkgbGFyZ2UuCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9w Z2JlbmNoLnNnbWwgICAgICAgICAgICAgICAgICAgICAgfCAgMzQ5ICsrKystCiBzcmMvYmluL3Bn YmVuY2gvcGdiZW5jaC5jICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE1MzAgKysrKysrKysr KysrKysrKystLS0KIHNyYy9iaW4vcGdiZW5jaC90LzAwMV9wZ2JlbmNoX3dpdGhfc2VydmVyLnBs ICAgICAgIHwgICAgNiArLQogLi4uL3QvMDAzX3NlcmlhbGl6YXRpb25fYW5kX2RlYWRsb2NrX2Zh aWxzLnBsICAgICAgfCAgODI4ICsrKysrKysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDI0OTIgaW5z ZXJ0aW9ucygrKSwgMjIxIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4v cGdiZW5jaC90LzAwM19zZXJpYWxpemF0aW9uX2FuZF9kZWFkbG9ja19mYWlscy5wbAoKZGlmZiAt LWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdiZW5jaC5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9w Z2JlbmNoLnNnbWwKaW5kZXggNDQzMWZjMy4uODk5YTcwYSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9z Z21sL3JlZi9wZ2JlbmNoLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwK QEAgLTQ5LDYgKzQ5LDcgQEAKIAogPHNjcmVlbj4KIHRyYW5zYWN0aW9uIHR5cGU6ICZsdDtidWls dGluOiBUUEMtQiAoc29ydCBvZikmZ3Q7CittYXhpbXVtIG51bWJlciBvZiB0cmFuc2FjdGlvbiB0 cmllczogMQogc2NhbGluZyBmYWN0b3I6IDEwCiBxdWVyeSBtb2RlOiBzaW1wbGUKIG51bWJlciBv ZiBjbGllbnRzOiAxMApAQCAtNTksMTIgKzYwLDEzIEBAIHRwcyA9IDg1LjE4NDg3MSAoaW5jbHVk aW5nIGNvbm5lY3Rpb25zIGVzdGFibGlzaGluZykKIHRwcyA9IDg1LjI5NjM0NiAoZXhjbHVkaW5n IGNvbm5lY3Rpb25zIGVzdGFibGlzaGluZykKIDwvc2NyZWVuPgogCi0gIFRoZSBmaXJzdCBzaXgg bGluZXMgcmVwb3J0IHNvbWUgb2YgdGhlIG1vc3QgaW1wb3J0YW50IHBhcmFtZXRlcgorICBUaGUg Zmlyc3Qgc2V2ZW4gbGluZXMgcmVwb3J0IHNvbWUgb2YgdGhlIG1vc3QgaW1wb3J0YW50IHBhcmFt ZXRlcgogICBzZXR0aW5ncy4gIFRoZSBuZXh0IGxpbmUgcmVwb3J0cyB0aGUgbnVtYmVyIG9mIHRy YW5zYWN0aW9ucyBjb21wbGV0ZWQKICAgYW5kIGludGVuZGVkICh0aGUgbGF0dGVyIGJlaW5nIGp1 c3QgdGhlIHByb2R1Y3Qgb2YgbnVtYmVyIG9mIGNsaWVudHMKICAgYW5kIG51bWJlciBvZiB0cmFu c2FjdGlvbnMgcGVyIGNsaWVudCk7IHRoZXNlIHdpbGwgYmUgZXF1YWwgdW5sZXNzIHRoZSBydW4K ICAgZmFpbGVkIGJlZm9yZSBjb21wbGV0aW9uLiAgKEluIDxvcHRpb24+LVQ8L29wdGlvbj4gbW9k ZSwgb25seSB0aGUgYWN0dWFsCi0gIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgaXMgcHJpbnRlZC4p CisgIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgaXMgcHJpbnRlZC4pICAoc2VlIDx4cmVmIGxpbmtl bmQ9ImVycm9ycy1hbmQtcmV0cmllcyIKKyAgZW5kdGVybT0iZXJyb3JzLWFuZC1yZXRyaWVzLXRp dGxlIi8+IGZvciBtb3JlIGluZm9ybWF0aW9uKQogICBUaGUgbGFzdCB0d28gbGluZXMgcmVwb3J0 IHRoZSBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIHBlciBzZWNvbmQsCiAgIGZpZ3VyZWQgd2l0aCBh bmQgd2l0aG91dCBjb3VudGluZyB0aGUgdGltZSB0byBzdGFydCBkYXRhYmFzZSBzZXNzaW9ucy4K ICA8L3BhcmE+CkBAIC01MTMsMjIgKzUxNSw0OSBAQCBwZ2JlbmNoIDxvcHRpb25hbD4gPHJlcGxh Y2VhYmxlPm9wdGlvbnM8L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFsPiA8cmVwbGFjZWFibGU+ZAog ICAgICAgICBTaG93IHByb2dyZXNzIHJlcG9ydCBldmVyeSA8cmVwbGFjZWFibGU+c2VjPC9yZXBs YWNlYWJsZT4gc2Vjb25kcy4gIFRoZSByZXBvcnQKICAgICAgICAgaW5jbHVkZXMgdGhlIHRpbWUg c2luY2UgdGhlIGJlZ2lubmluZyBvZiB0aGUgcnVuLCB0aGUgdHBzIHNpbmNlIHRoZQogICAgICAg ICBsYXN0IHJlcG9ydCwgYW5kIHRoZSB0cmFuc2FjdGlvbiBsYXRlbmN5IGF2ZXJhZ2UgYW5kIHN0 YW5kYXJkCi0gICAgICAgIGRldmlhdGlvbiBzaW5jZSB0aGUgbGFzdCByZXBvcnQuICBVbmRlciB0 aHJvdHRsaW5nICg8b3B0aW9uPi1SPC9vcHRpb24+KSwKLSAgICAgICAgdGhlIGxhdGVuY3kgaXMg Y29tcHV0ZWQgd2l0aCByZXNwZWN0IHRvIHRoZSB0cmFuc2FjdGlvbiBzY2hlZHVsZWQKLSAgICAg ICAgc3RhcnQgdGltZSwgbm90IHRoZSBhY3R1YWwgdHJhbnNhY3Rpb24gYmVnaW5uaW5nIHRpbWUs IHRodXMgaXQgYWxzbwotICAgICAgICBpbmNsdWRlcyB0aGUgYXZlcmFnZSBzY2hlZHVsZSBsYWcg dGltZS4KKyAgICAgICAgZGV2aWF0aW9uIHNpbmNlIHRoZSBsYXN0IHJlcG9ydC4gIElmIGFueSB0 cmFuc2FjdGlvbnMgZW5kZWQgd2l0aCBhCisgICAgICAgIGZhaWxlZCBTUUwgb3IgbWV0YSBjb21t YW5kIHNpbmNlIHRoZSBsYXN0IHJlcG9ydCwgdGhleSBhcmUgYWxzbyByZXBvcnRlZAorICAgICAg ICBhcyBmYWlsZWQuICBJZiBhbnkgdHJhbnNhY3Rpb25zIGVuZGVkIHdpdGggYW4gZXJyb3IgImlu IGZhaWxlZCBTUUwKKyAgICAgICAgdHJhbnNhY3Rpb24gYmxvY2siLCB0aGV5IGFyZSByZXBvcnRl ZCBzZXBhcmF0bHkgYXMgPGxpdGVyYWw+aW4gZmFpbGVkCisgICAgICAgIHR4PC9saXRlcmFsPiAo c2VlIDx4cmVmIGxpbmtlbmQ9ImVycm9ycy1hbmQtcmV0cmllcyIKKyAgICAgICAgZW5kdGVybT0i ZXJyb3JzLWFuZC1yZXRyaWVzLXRpdGxlIi8+IGZvciBtb3JlIGluZm9ybWF0aW9uKS4gIFVuZGVy CisgICAgICAgIHRocm90dGxpbmcgKDxvcHRpb24+LVI8L29wdGlvbj4pLCB0aGUgbGF0ZW5jeSBp cyBjb21wdXRlZCB3aXRoIHJlc3BlY3QKKyAgICAgICAgdG8gdGhlIHRyYW5zYWN0aW9uIHNjaGVk dWxlZCBzdGFydCB0aW1lLCBub3QgdGhlIGFjdHVhbCB0cmFuc2FjdGlvbgorICAgICAgICBiZWdp bm5pbmcgdGltZSwgdGh1cyBpdCBhbHNvIGluY2x1ZGVzIHRoZSBhdmVyYWdlIHNjaGVkdWxlIGxh ZyB0aW1lLiAgSWYKKyAgICAgICAgYW55IHRyYW5zYWN0aW9ucyBoYXZlIGJlZW4gcm9sbGVkIGJh Y2sgYW5kIHJldHJpZWQgYWZ0ZXIgYQorICAgICAgICBzZXJpYWxpemF0aW9uL2RlYWRsb2NrIGZh aWx1cmUgc2luY2UgdGhlIGxhc3QgcmVwb3J0LCB0aGUgcmVwb3J0CisgICAgICAgIGluY2x1ZGVz IHRoZSBudW1iZXIgb2Ygc3VjaCB0cmFuc2FjdGlvbnMgYW5kIHRoZSBzdW0gb2YgYWxsIHJldHJp ZXMuIFVzZQorICAgICAgICB0aGUgPG9wdGlvbj4tLW1heC10cmllczwvb3B0aW9uPiB0byBlbmFi bGUgdHJhbnNhY3Rpb25zIHJldHJpZXMgYWZ0ZXIKKyAgICAgICAgc2VyaWFsaXphdGlvbi9kZWFk bG9jayBmYWlsdXJlcy4KICAgICAgICA8L3BhcmE+CisgICAgICAgPG5vdGU+CisgICAgICAgIDxw YXJhPgorICAgICAgICAgSWYgYSBjdXN0b20gc2NyaXB0IGNvbnRhaW5zIG11bHRpcGxlIHRyYW5z YWN0aW9ucywgaXRzIHJ1biBpcyByZXBvcnRlZAorICAgICAgICAgYXMgZmFpbGVkIGlmIGFueSBv ZiBpdHMgdHJhbnNhY3Rpb25zIG9yIG1ldGEgY29tbWFuZHMgZmFpbGVkLiBUaGUgcnVuCisgICAg ICAgICBvZiB0aGlzIHNjcmlwdCBpcyByZXBvcnRlZCBhcyA8bGl0ZXJhbD5pbiBmYWlsZWQgdHg8 L2xpdGVyYWw+IGlmIHNvbWUKKyAgICAgICAgIG9mIGl0cyB0cmFuc2FjdGlvbnMgZW5kZWQgd2l0 aCBhbiBlcnJvciAiaW4gZmFpbGVkIFNRTCB0cmFuc2FjdGlvbgorICAgICAgICAgYmxvY2siIGFu ZCB0aGVyZSB3ZXJlIG5vIG90aGVyIGVycm9ycy4gVGhlIHJ1biBvZiB0aGlzIHNjcmlwdCBpcwor ICAgICAgICAgcmVwb3J0ZWQgYXMgcmV0cmllZCBpZiBhbnkgb2YgaXRzIHRyYW5zYWN0aW9ucyB3 YXMgcmV0cmllZCBhZnRlciBhCisgICAgICAgICBzZXJpYWxpemF0aW9uL2RlYWRsb2NrIGZhaWx1 cmUuIFRoZSB0b3RhbCBzdW0gb2YgcmV0cmllcyBpbmNsdWRlcyB0aGUKKyAgICAgICAgIHJldHJp ZXMgZm9yIGFsbCB0cmFuc2FjdGlvbnMgaW4gdGhpcyBzY3JpcHQuCisgICAgICAgIDwvcGFyYT4K KyAgICAgICA8L25vdGU+CiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4K IAogICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgPHRlcm0+PG9wdGlvbj4tcjwvb3B0aW9uPjwv dGVybT4KLSAgICAgIDx0ZXJtPjxvcHRpb24+LS1yZXBvcnQtbGF0ZW5jaWVzPC9vcHRpb24+PC90 ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tLXJlcG9ydC1wZXItY29tbWFuZDwvb3B0aW9uPjwv dGVybT4KICAgICAgIDxsaXN0aXRlbT4KICAgICAgICA8cGFyYT4KLSAgICAgICAgUmVwb3J0IHRo ZSBhdmVyYWdlIHBlci1zdGF0ZW1lbnQgbGF0ZW5jeSAoZXhlY3V0aW9uIHRpbWUgZnJvbSB0aGUK LSAgICAgICAgcGVyc3BlY3RpdmUgb2YgdGhlIGNsaWVudCkgb2YgZWFjaCBjb21tYW5kIGFmdGVy IHRoZSBiZW5jaG1hcmsKLSAgICAgICAgZmluaXNoZXMuICBTZWUgYmVsb3cgZm9yIGRldGFpbHMu CisgICAgICAgIFJlcG9ydCB0aGUgZm9sbG93aW5nIHN0YXRpc3RpY3MgZm9yIGVhY2ggY29tbWFu ZCBhZnRlciB0aGUgYmVuY2htYXJrCisgICAgICAgIGZpbmlzaGVzOiB0aGUgYXZlcmFnZSBwZXIt c3RhdGVtZW50IGxhdGVuY3kgKGV4ZWN1dGlvbiB0aW1lIGZyb20gdGhlCisgICAgICAgIHBlcnNw ZWN0aXZlIG9mIHRoZSBjbGllbnQpLCB0aGUgbnVtYmVyIG9mIGFsbCBlcnJvcnMsIHRoZSBudW1i ZXIgb2YKKyAgICAgICAgZXJyb3JzICJpbiBmYWlsZWQgU1FMIHRyYW5zYWN0aW9uIGJsb2NrIiwg YW5kIHRoZSBudW1iZXIgb2YgcmV0cmllcworICAgICAgICBhZnRlciBzZXJpYWxpemF0aW9uIG9y IGRlYWRsb2NrIGZhaWx1cmVzLiAgVGhlIHJlcG9ydCBkaXNwbGF5cyB0aGUKKyAgICAgICAgY29s dW1ucyB3aXRoIHN0YXRpc3RpY3Mgb24gZXJyb3JzIGFuZCByZXRyaWVzIG9ubHkgaWYgdGhlIGN1 cnJlbnQKKyAgICAgICAgPGFwcGxpY2F0aW9uPnBnYmVuY2g8L2FwcGxpY2F0aW9uPiBydW4gaGFz IGFuIGVycm9yIG9mIHRoZSBjb3JyZXNwb25kaW5nCisgICAgICAgIHR5cGUgb3IgcmV0cnksIHJl c3BlY3RpdmVseS4gU2VlIGJlbG93IGZvciBkZXRhaWxzLgogICAgICAgIDwvcGFyYT4KICAgICAg IDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgpAQCAtNjU3LDYgKzY4NiwxNyBAQCBw Z2JlbmNoIDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPm9wdGlvbnM8L3JlcGxhY2VhYmxlPiA8L29w dGlvbmFsPiA8cmVwbGFjZWFibGU+ZAogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAogICAgICA8dmFy bGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWRlYnVnLWZhaWxzPC9vcHRpb24+PC90 ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBQcmludCBkZWJ1 Z2dpbmcgb3V0cHV0IG9ubHkgZm9yIGVycm9ycyBhbmQgc2VyaWFsaXphdGlvbi9kZWFkbG9jawor ICAgICAgICBmYWlsdXJlcy4gU2VlIDx4cmVmIGxpbmtlbmQ9ImVycm9ycy1hbmQtcmV0cmllcyIK KyAgICAgICAgZW5kdGVybT0iZXJyb3JzLWFuZC1yZXRyaWVzLXRpdGxlIi8+IGZvciBtb3JlIGlu Zm9ybWF0aW9uLgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFy bGlzdGVudHJ5PgorCisgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICA8dGVybT48b3B0aW9uPi0t bG9nLXByZWZpeD08cmVwbGFjZWFibGU+cHJlZml4PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rl cm0+CiAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgPHBhcmE+CkBAIC02NjcsNiArNzA3LDQzIEBA IHBnYmVuY2ggPG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+b3B0aW9uczwvcmVwbGFjZWFibGU+IDwv b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5kCiAgICAgIDwvdmFybGlzdGVudHJ5PgogCiAgICAgIDx2 YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi0tbWF4LXRyaWVzPTxyZXBsYWNlYWJs ZT5udW1iZXJfb2ZfdHJpZXM8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDxs aXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgU2V0IHRoZSBtYXhpbXVtIG51bWJlciBv ZiB0cmllcyBmb3IgdHJhbnNhY3Rpb25zIHdpdGgKKyAgICAgICAgc2VyaWFsaXphdGlvbi9kZWFk bG9jayBmYWlsdXJlcy4gVGhlIGRlZmF1bHQgaXMgMS4KKyAgICAgICA8L3BhcmE+CisgICAgICAg PG5vdGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgQmUgY2FyZWZ1bCB3aGVuIHJlcGVhdGlu ZyB0cmFuc2FjdGlvbnMgd2l0aCBzaGVsbCBjb21tYW5kcy4gVW5saWtlIHRoZQorICAgICAgICAg cmVzdWx0cyBvZiBTUUwgY29tbWFuZHMsIHRoZSByZXN1bHRzIG9mIHNoZWxsIGNvbW1hbmRzIGFy ZSBub3Qgcm9sbGVkCisgICAgICAgICBiYWNrLCBleGNlcHQgZm9yIHRoZSB2YXJpYWJsZSB2YWx1 ZSBvZiB0aGUgPGNvbW1hbmQ+XHNldHNoZWxsPC9jb21tYW5kPgorICAgICAgICAgY29tbWFuZC4K KyAgICAgICAgPC9wYXJhPgorICAgICAgIDwvbm90ZT4KKyAgICAgICA8bm90ZT4KKyAgICAgICAg PHBhcmE+CisgICAgICAgICBJbiBwZ2JlbmNoIHlvdSBjYW4gdXNlIHNjcmlwdHMgaW4gd2hpY2gg dGhlIHRyYW5zYWN0aW9uIGJsb2NrcyBkbyBub3QKKyAgICAgICAgIGVuZC4gQmUgY2FyZWZ1bCBp biB0aGlzIGNhc2UgYmVjYXVzZSB0cmFuc2FjdGlvbnMgdGhhdCBzcGFuIG92ZXIgbW9yZQorICAg ICAgICAgdGhhbiBvbmUgc2NyaXB0IGFyZSBub3Qgcm9sbGVkIGJhY2sgYW5kIHdpbGwgbm90IGJl IHJldHJpZWQgaW4gY2FzZSBvZgorICAgICAgICAgYW4gZXJyb3IuIEluIHN1Y2ggY2FzZXMsIHRo ZSBzY3JpcHQgaW4gd2hpY2ggdGhlIGVycm9yIG9jY3VycmVkIGlzCisgICAgICAgICByZXBvcnRl ZCBhcyBmYWlsZWQuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICA8L25vdGU+CisgICAgICAgPG5v dGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgTm90IGFsbCBjb21wb3VuZCBjb21tYW5kcyB0 aGF0IGNvbnRhaW4gc3ViY29tbWFuZHMgdG8gc3RhcnQgb3IgZW5kIGFuCisgICAgICAgICBleHBs aWNpdCB0cmFuc2FjdGlvbiBibG9jayBjYW4gYmUgcmV0cmllZC4gRm9yIGV4YW1wbGUsIHlvdSBj YW5ub3QgdXNlCisgICAgICAgICBhIGNvbXBvdW5kIGNvbW1hbmQgdG8gY29tcGxldGUgYSBmYWls ZWQgdHJhbnNhY3Rpb24gYmxvY2sgYmVmb3JlCisgICAgICAgICByZXRyeWluZy4gQWxzbyBpZiB0 aGVyZSdyZSBhbnkgc3ViY29tbWFuZHMgYmVmb3JlIHRoZSBleHBsaWNpdAorICAgICAgICAgdHJh bnNhY3Rpb24gYmxvY2ssIHRoZSBsYXR0ZXIgY2Fubm90IGJlIHJldHJpZWQgZnJvbSB0aGUgdmVy eQorICAgICAgICAgYmVnaW5uaW5nLgorICAgICAgICA8L3BhcmE+CisgICAgICAgPC9ub3RlPgor ICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgPHZhcmxpc3Rl bnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LS1wcm9ncmVzcy10aW1lc3RhbXA8L29wdGlvbj48 L3Rlcm0+CiAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgPHBhcmE+CkBAIC0xMjU2LDcgKzEzMzMs NyBAQCBFTkQ7CiAgICBUaGUgZm9ybWF0IG9mIHRoZSBsb2cgaXM6CiAKIDxzeW5vcHNpcz4KLTxy ZXBsYWNlYWJsZT5jbGllbnRfaWQ8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+dHJhbnNhY3Rp b25fbm88L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+dGltZTwvcmVwbGFjZWFibGU+IDxyZXBs YWNlYWJsZT5zY3JpcHRfbm88L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+dGltZV9lcG9jaDwv cmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT50aW1lX3VzPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFs PiA8cmVwbGFjZWFibGU+c2NoZWR1bGVfbGFnPC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD4KKzxy ZXBsYWNlYWJsZT5jbGllbnRfaWQ8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+dHJhbnNhY3Rp b25fbm88L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+dGltZTwvcmVwbGFjZWFibGU+IDxyZXBs YWNlYWJsZT5zY3JpcHRfbm88L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+dGltZV9lcG9jaDwv cmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT50aW1lX3VzPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFs PiA8cmVwbGFjZWFibGU+c2NoZWR1bGVfbGFnPC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD4gPG9w dGlvbmFsPiA8cmVwbGFjZWFibGU+cmV0cmllczwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+CiA8 L3N5bm9wc2lzPgogCiAgICB3aGVyZQpAQCAtMTI3Nyw4ICsxMzU0LDI4IEBAIEVORDsKICAgIFdo ZW4gYm90aCA8b3B0aW9uPi0tcmF0ZTwvb3B0aW9uPiBhbmQgPG9wdGlvbj4tLWxhdGVuY3ktbGlt aXQ8L29wdGlvbj4gYXJlIHVzZWQsCiAgICB0aGUgPHJlcGxhY2VhYmxlPnRpbWU8L3JlcGxhY2Vh YmxlPiBmb3IgYSBza2lwcGVkIHRyYW5zYWN0aW9uIHdpbGwgYmUgcmVwb3J0ZWQgYXMKICAgIDxs aXRlcmFsPnNraXBwZWQ8L2xpdGVyYWw+LgorICAgPHJlcGxhY2VhYmxlPnJldHJpZXM8L3JlcGxh Y2VhYmxlPiBpcyB0aGUgc3VtIG9mIGFsbCB0aGUgcmV0cmllcyBhZnRlciB0aGUKKyAgIHNlcmlh bGl6YXRpb24gb3IgZGVhZGxvY2sgZmFpbHVyZXMgZHVyaW5nIHRoZSBjdXJyZW50IHNjcmlwdCBl eGVjdXRpb24uIEl0IGlzCisgICBvbmx5IHByZXNlbnQgd2hlbiB0aGUgbWF4aW11bSBudW1iZXIg b2YgdHJpZXMgZm9yIHRyYW5zYWN0aW9ucyBpcyBtb3JlIHRoYW4gMQorICAgKDxvcHRpb24+LS1t YXgtdHJpZXM8L29wdGlvbj4pLiBJZiB0aGUgdHJhbnNhY3Rpb24gZW5kZWQgd2l0aCBhbiBlcnJv ciAiaW4KKyAgIGZhaWxlZCBTUUwgdHJhbnNhY3Rpb24iLCBpdHMgPHJlcGxhY2VhYmxlPnRpbWU8 L3JlcGxhY2VhYmxlPiB3aWxsIGJlIHJlcG9ydGVkCisgICBhcyA8bGl0ZXJhbD5pbl9mYWlsZWRf dHg8L2xpdGVyYWw+LiBJZiB0aGUgdHJhbnNhY3Rpb24gZW5kZWQgd2l0aCBvdGhlcgorICAgZXJy b3IsIGl0cyA8cmVwbGFjZWFibGU+dGltZTwvcmVwbGFjZWFibGU+IHdpbGwgYmUgcmVwb3J0ZWQg YXMKKyAgIDxsaXRlcmFsPmZhaWxlZDwvbGl0ZXJhbD4gKHNlZSA8eHJlZiBsaW5rZW5kPSJlcnJv cnMtYW5kLXJldHJpZXMiCisgICBlbmR0ZXJtPSJlcnJvcnMtYW5kLXJldHJpZXMtdGl0bGUiLz4g Zm9yIG1vcmUgaW5mb3JtYXRpb24pLgogICA8L3BhcmE+CiAKKyAgPG5vdGU+CisgICA8cGFyYT4K KyAgICBJZiBhIGN1c3RvbSBzY3JpcHQgY29udGFpbnMgbXVsdGlwbGUgdHJhbnNhY3Rpb25zLCBz b21lIG9mIGl0cyB0cmFuc2FjdGlvbnMKKyAgICBmYWlsZWQgd2l0aCBhbiBlcnJvciAiaW4gZmFp bGVkIFNRTCB0cmFuc2FjdGlvbiBibG9jayIgYW5kIHRoZXJlIHdlcmUgbm90CisgICAgb3RoZXIg ZXJyb3JzLCBpdHMgPHJlcGxhY2VhYmxlPnRpbWU8L3JlcGxhY2VhYmxlPiB3aWxsIGJlIHJlcG9y dGVkIGFzCisgICAgPGxpdGVyYWw+aW5fZmFpbGVkX3R4PC9saXRlcmFsPi4gSWYgdGhlcmUgd2Vy ZSBvdGhlciBlcnJvcnMsIGl0cworICAgIDxyZXBsYWNlYWJsZT50aW1lPC9yZXBsYWNlYWJsZT4g d2lsbCBiZSByZXBvcnRlZCBhcworICAgIDxsaXRlcmFsPmZhaWxlZDwvbGl0ZXJhbD4uCisgICA8 L3BhcmE+CisgIDwvbm90ZT4KKwogICA8cGFyYT4KICAgIEhlcmUgaXMgYSBzbmlwcGV0IG9mIGEg bG9nIGZpbGUgZ2VuZXJhdGVkIGluIGEgc2luZ2xlLWNsaWVudCBydW46CiA8c2NyZWVuPgpAQCAt MTMwNiw2ICsxNDAzLDIzIEBAIEVORDsKICAgPC9wYXJhPgogCiAgIDxwYXJhPgorICAgVGhlIGZv bGxvd2luZyBleGFtcGxlIHNob3dzIGEgc25pcHBldCBvZiBhIGxvZyBmaWxlIHdpdGggZXJyb3Jz IGFuZCByZXRyaWVzLAorICAgd2l0aCB0aGUgbWF4aW11bSBudW1iZXIgb2YgdHJpZXMgc2V0IHRv IDEwOgorPHNjcmVlbj4KKzMgMCA0NzQyMyAwIDE0OTk0MTQ0OTggMzQ1MDEgNAorMyAxIDgzMzMg MCAxNDk5NDE0NDk4IDQyODQ4IDEKKzMgMiA4MzU4IDAgMTQ5OTQxNDQ5OCA1MTIxOSAxCis0IDAg NzIzNDUgMCAxNDk5NDE0NDk4IDU5NDMzIDcKKzEgMyA0MTcxOCAwIDE0OTk0MTQ0OTggNjc4Nzkg NQorMSA0IDg0MTYgMCAxNDk5NDE0NDk4IDc2MzExIDEKKzMgMyAzMzIzNSAwIDE0OTk0MTQ0OTgg ODQ0NjkgNAorMCAwIGZhaWxlZCAwIDE0OTk0MTQ0OTggODQ5MDUgMTAKKzIgMCBmYWlsZWQgMCAx NDk5NDE0NDk4IDg2MjQ4IDEwCiszIDQgODMwNyAwIDE0OTk0MTQ0OTggOTI3ODggMQorPC9zY3Jl ZW4+CisgIDwvcGFyYT4KKworICA8cGFyYT4KICAgIFdoZW4gcnVubmluZyBhIGxvbmcgdGVzdCBv biBoYXJkd2FyZSB0aGF0IGNhbiBoYW5kbGUgYSBsb3Qgb2YgdHJhbnNhY3Rpb25zLAogICAgdGhl IGxvZyBmaWxlcyBjYW4gYmVjb21lIHZlcnkgbGFyZ2UuICBUaGUgPG9wdGlvbj4tLXNhbXBsaW5n LXJhdGU8L29wdGlvbj4gb3B0aW9uCiAgICBjYW4gYmUgdXNlZCB0byBsb2cgb25seSBhIHJhbmRv bSBzYW1wbGUgb2YgdHJhbnNhY3Rpb25zLgpAQCAtMTMyMCw3ICsxNDM0LDcgQEAgRU5EOwogICAg Zm9ybWF0IGlzIHVzZWQgZm9yIHRoZSBsb2cgZmlsZXM6CiAKIDxzeW5vcHNpcz4KLTxyZXBsYWNl YWJsZT5pbnRlcnZhbF9zdGFydDwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5udW1fdHJhbnNh Y3Rpb25zPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnN1bV9sYXRlbmN5PC9yZXBsYWNlYWJs ZT4gPHJlcGxhY2VhYmxlPnN1bV9sYXRlbmN5XzI8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+ bWluX2xhdGVuY3k8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+bWF4X2xhdGVuY3k8L3JlcGxh Y2VhYmxlPiA8b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5zdW1fbGFnPC9yZXBsYWNlYWJsZT4gPHJl cGxhY2VhYmxlPnN1bV9sYWdfMjwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5taW5fbGFnPC9y ZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPm1heF9sYWc8L3JlcGxhY2VhYmxlPiA8b3B0aW9uYWw+ IDxyZXBsYWNlYWJsZT5za2lwcGVkPC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD4gPC9vcHRpb25h bD4KKzxyZXBsYWNlYWJsZT5pbnRlcnZhbF9zdGFydDwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJs ZT5udW1fdHJhbnNhY3Rpb25zPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnN1bV9sYXRlbmN5 PC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnN1bV9sYXRlbmN5XzI8L3JlcGxhY2VhYmxlPiA8 cmVwbGFjZWFibGU+bWluX2xhdGVuY3k8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+bWF4X2xh dGVuY3k8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+ZmFpbGVkX3R4PC9yZXBsYWNlYWJsZT4g PHJlcGxhY2VhYmxlPmluX2ZhaWxlZF90eDwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4gPHJlcGxh Y2VhYmxlPnN1bV9sYWc8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+c3VtX2xhZ18yPC9yZXBs YWNlYWJsZT4gPHJlcGxhY2VhYmxlPm1pbl9sYWc8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+ bWF4X2xhZzwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPnNraXBwZWQ8L3Jl cGxhY2VhYmxlPiA8L29wdGlvbmFsPiA8L29wdGlvbmFsPiA8b3B0aW9uYWw+IDxyZXBsYWNlYWJs ZT5yZXRyaWVkX3R4PC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnJldHJpZXM8L3JlcGxhY2Vh YmxlPiA8L29wdGlvbmFsPgogPC9zeW5vcHNpcz4KIAogICAgd2hlcmUKQEAgLTEzMzQsNyArMTQ0 OCwxMyBAQCBFTkQ7CiAgICB0cmFuc2FjdGlvbiBsYXRlbmNpZXMgd2l0aGluIHRoZSBpbnRlcnZh bCwKICAgIDxyZXBsYWNlYWJsZT5taW5fbGF0ZW5jeTwvcmVwbGFjZWFibGU+IGlzIHRoZSBtaW5p bXVtIGxhdGVuY3kgd2l0aGluIHRoZSBpbnRlcnZhbCwKICAgIGFuZAotICAgPHJlcGxhY2VhYmxl Pm1heF9sYXRlbmN5PC9yZXBsYWNlYWJsZT4gaXMgdGhlIG1heGltdW0gbGF0ZW5jeSB3aXRoaW4g dGhlIGludGVydmFsLgorICAgPHJlcGxhY2VhYmxlPm1heF9sYXRlbmN5PC9yZXBsYWNlYWJsZT4g aXMgdGhlIG1heGltdW0gbGF0ZW5jeSB3aXRoaW4gdGhlIGludGVydmFsLAorICAgPHJlcGxhY2Vh YmxlPmZhaWxlZF90eDwvcmVwbGFjZWFibGU+IGlzIHRoZSBudW1iZXIgb2YgdHJhbnNhY3Rpb25z IHRoYXQgZW5kZWQKKyAgIHdpdGggYSBmYWlsZWQgU1FMIG9yIG1ldGEgY29tbWFuZCB3aXRoaW4g dGhlIGludGVydmFsLAorICAgPHJlcGxhY2VhYmxlPmluX2ZhaWxlZF90eDwvcmVwbGFjZWFibGU+ IGlzIHRoZSBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIHRoYXQKKyAgIGVuZGVkIHdpdGggYW4gZXJy b3IgImluIGZhaWxlZCBTUUwgdHJhbnNhY3Rpb24gYmxvY2siIChzZWUKKyAgIDx4cmVmIGxpbmtl bmQ9ImVycm9ycy1hbmQtcmV0cmllcyIgZW5kdGVybT0iZXJyb3JzLWFuZC1yZXRyaWVzLXRpdGxl Ii8+CisgICBmb3IgbW9yZSBpbmZvcm1hdGlvbikuCiAgICBUaGUgbmV4dCBmaWVsZHMsCiAgICA8 cmVwbGFjZWFibGU+c3VtX2xhZzwvcmVwbGFjZWFibGU+LCA8cmVwbGFjZWFibGU+c3VtX2xhZ18y PC9yZXBsYWNlYWJsZT4sIDxyZXBsYWNlYWJsZT5taW5fbGFnPC9yZXBsYWNlYWJsZT4sCiAgICBh bmQgPHJlcGxhY2VhYmxlPm1heF9sYWc8L3JlcGxhY2VhYmxlPiwgYXJlIG9ubHkgcHJlc2VudCBp ZiB0aGUgPG9wdGlvbj4tLXJhdGU8L29wdGlvbj4KQEAgLTEzNDIsMjEgKzE0NjIsNDMgQEAgRU5E OwogICAgVGhleSBwcm92aWRlIHN0YXRpc3RpY3MgYWJvdXQgdGhlIHRpbWUgZWFjaCB0cmFuc2Fj dGlvbiBoYWQgdG8gd2FpdCBmb3IgdGhlCiAgICBwcmV2aW91cyBvbmUgdG8gZmluaXNoLCBpLmUu IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gZWFjaCB0cmFuc2FjdGlvbidzCiAgICBzY2hlZHVsZWQg c3RhcnQgdGltZSBhbmQgdGhlIHRpbWUgaXQgYWN0dWFsbHkgc3RhcnRlZC4KLSAgIFRoZSB2ZXJ5 IGxhc3QgZmllbGQsIDxyZXBsYWNlYWJsZT5za2lwcGVkPC9yZXBsYWNlYWJsZT4sCisgICBUaGUg bmV4dCBmaWVsZCwgPHJlcGxhY2VhYmxlPnNraXBwZWQ8L3JlcGxhY2VhYmxlPiwKICAgIGlzIG9u bHkgcHJlc2VudCBpZiB0aGUgPG9wdGlvbj4tLWxhdGVuY3ktbGltaXQ8L29wdGlvbj4gb3B0aW9u IGlzIHVzZWQsIHRvby4KICAgIEl0IGNvdW50cyB0aGUgbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBz a2lwcGVkIGJlY2F1c2UgdGhleSB3b3VsZCBoYXZlCiAgICBzdGFydGVkIHRvbyBsYXRlLgorICAg VGhlIDxyZXBsYWNlYWJsZT5yZXRyaWVkX3R4PC9yZXBsYWNlYWJsZT4gYW5kCisgICA8cmVwbGFj ZWFibGU+cmV0cmllczwvcmVwbGFjZWFibGU+IGZpZWxkcyBhcmUgb25seSBwcmVzZW50IGlmIHRo ZSBtYXhpbXVtCisgICBudW1iZXIgb2YgdHJpZXMgZm9yIHRyYW5zYWN0aW9ucyBpcyBtb3JlIHRo YW4gMQorICAgKDxvcHRpb24+LS1tYXgtdHJpZXM8L29wdGlvbj4pLiBUaGV5IHJlcG9ydCB0aGUg bnVtYmVyIG9mIHJldHJpZWQKKyAgIHRyYW5zYWN0aW9ucyBhbmQgdGhlIHN1bSBvZiBhbGwgdGhl IHJldHJpZXMgYWZ0ZXIgc2VyaWFsaXphdGlvbiBvciBkZWFkbG9jaworICAgZmFpbHVyZXMgd2l0 aGluIHRoZSBpbnRlcnZhbC4KICAgIEVhY2ggdHJhbnNhY3Rpb24gaXMgY291bnRlZCBpbiB0aGUg aW50ZXJ2YWwgd2hlbiBpdCB3YXMgY29tbWl0dGVkLgogICA8L3BhcmE+CiAKKyAgPG5vdGU+Cisg ICA8cGFyYT4KKyAgICBJZiBhIGN1c3RvbSBzY3JpcHQgY29udGFpbnMgbXVsdGlwbGUgdHJhbnNh Y3Rpb25zIGFuZCBhbnkgb2YgaXRzCisgICAgdHJhbnNhY3Rpb25zIG9yIG1ldGEgY29tbWFuZHMg ZmFpbGVkLCBpdHMgcnVuIGlzIGNvdW50ZWQgaW4KKyAgICA8cmVwbGFjZWFibGU+ZmFpbGVkX3R4 PC9yZXBsYWNlYWJsZT4gb25seSBvbmNlLiBBZ2FpbiwgaWYgc29tZSBvZiBpdHMKKyAgICB0cmFu c2FjdGlvbnMgZW5kZWQgd2l0aCBhbiBlcnJvciAiaW4gZmFpbGVkIFNRTCB0cmFuc2FjdGlvbiBi bG9jayIgYW5kIHRoZXJlCisgICAgd2VyZSBubyBvdGhlciBlcnJvcnMsIGl0cyBydW4gaXMgY291 bnRlZCBpbgorICAgIDxyZXBsYWNlYWJsZT5pbl9mYWlsZWRfdHg8L3JlcGxhY2VhYmxlPiBvbmx5 IG9uY2UuIFNpbWlsYXJseSwgaWYgYW55IG9mCisgICAgdGhlc2UgdHJhbnNhY3Rpb25zIHdhcyBy ZXRyaWVkLCB0aGUgPHJlcGxhY2VhYmxlPnJldHJpZWRfdHg8L3JlcGxhY2VhYmxlPgorICAgIHN0 YXRpc3RpY3MgaXMgaW5jcmVhc2VkIGJ5IG9uZSwgcmVnYXJkbGVzcyBvZiB0aGUgbnVtYmVyIG9m IHJldHJpZWQKKyAgICB0cmFuc2FjdGlvbnMuIEhvd2V2ZXIsIHRoZSA8cmVwbGFjZWFibGU+cmV0 cmllczwvcmVwbGFjZWFibGU+IGFuZCBpbmNsdWRlCisgICAgdGhlIHN1bSBvZiBhbGwgcmV0cmll cyBhZnRlciB0aGUgc2VyaWFsaXphdGlvbiBvciBkZWFkbG9jayBmYWlsdXJlcyBmb3IgYWxsCisg ICAgdHJhbnNhY3Rpb25zIGluIHRoaXMgc2NyaXB0LgorICAgPC9wYXJhPgorICA8L25vdGU+CisK ICAgPHBhcmE+CiAgICBIZXJlIGlzIHNvbWUgZXhhbXBsZSBvdXRwdXQ6CiA8c2NyZWVuPgotMTM0 NTgyODUwMSA1NjAxIDE1NDI3NDQgNDgzNTUyNDE2IDYxIDI1NzMKLTEzNDU4Mjg1MDMgNzg4NCAx OTc5ODEyIDU2NTgwNjczNiA2MCAxNDc5Ci0xMzQ1ODI4NTA1IDcyMDggMTk3OTQyMiA1NjcyNzc1 NTIgNTkgMTM5MQotMTM0NTgyODUwNyA3Njg1IDE5ODAyNjggNTY5Nzg0NzE0IDYwIDEzOTgKLTEz NDU4Mjg1MDkgNzA3MyAxOTc5Nzc5IDU3MzQ4OTk0MSAyMzYgMTQxMQorMTM0NTgyODUwMSA1NjAx IDE1NDI3NDQgNDgzNTUyNDE2IDYxIDI1NzMgMCAwCisxMzQ1ODI4NTAzIDc4ODQgMTk3OTgxMiA1 NjU4MDY3MzYgNjAgMTQ3OSAwIDAKKzEzNDU4Mjg1MDUgNzIwOCAxOTc5NDIyIDU2NzI3NzU1MiA1 OSAxMzkxIDAgMAorMTM0NTgyODUwNyA3Njg1IDE5ODAyNjggNTY5Nzg0NzE0IDYwIDEzOTggMCAw CisxMzQ1ODI4NTA5IDcwNzMgMTk3OTc3OSA1NzM0ODk5NDEgMjM2IDE0MTEgMCAwCiA8L3NjcmVl bj48L3BhcmE+CiAKICAgPHBhcmE+CkBAIC0xMzY4LDEzICsxNTEwLDYwIEBAIEVORDsKICA8L3Jl ZnNlY3QyPgogCiAgPHJlZnNlY3QyPgotICA8dGl0bGU+UGVyLVN0YXRlbWVudCBMYXRlbmNpZXM8 L3RpdGxlPgorICA8dGl0bGU+UGVyLVN0YXRlbWVudCBSZXBvcnQ8L3RpdGxlPgogCiAgIDxwYXJh PgotICAgV2l0aCB0aGUgPG9wdGlvbj4tcjwvb3B0aW9uPiBvcHRpb24sIDxhcHBsaWNhdGlvbj5w Z2JlbmNoPC9hcHBsaWNhdGlvbj4gY29sbGVjdHMKLSAgIHRoZSBlbGFwc2VkIHRyYW5zYWN0aW9u IHRpbWUgb2YgZWFjaCBzdGF0ZW1lbnQgZXhlY3V0ZWQgYnkgZXZlcnkKLSAgIGNsaWVudC4gIEl0 IHRoZW4gcmVwb3J0cyBhbiBhdmVyYWdlIG9mIHRob3NlIHZhbHVlcywgcmVmZXJyZWQgdG8KLSAg IGFzIHRoZSBsYXRlbmN5IGZvciBlYWNoIHN0YXRlbWVudCwgYWZ0ZXIgdGhlIGJlbmNobWFyayBo YXMgZmluaXNoZWQuCisgICBXaXRoIHRoZSA8b3B0aW9uPi1yPC9vcHRpb24+IG9wdGlvbiwgPGFw cGxpY2F0aW9uPnBnYmVuY2g8L2FwcGxpY2F0aW9uPgorICAgY29sbGVjdHMgdGhlIGZvbGxvd2lu ZyBzdGF0aXN0aWNzIGZvciBlYWNoIHN0YXRlbWVudDoKKyAgIDxpdGVtaXplZGxpc3Q+CisgICAg IDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgIDxsaXRlcmFsPmxhdGVuY3k8L2xp dGVyYWw+ICZtZGFzaDsgZWxhcHNlZCB0cmFuc2FjdGlvbiB0aW1lIGZvciBlYWNoCisgICAgICAg ICBzdGF0ZW1lbnQuIDxhcHBsaWNhdGlvbj5wZ2JlbmNoPC9hcHBsaWNhdGlvbj4gcmVwb3J0cyBh biBhdmVyYWdlIHZhbHVlCisgICAgICAgICBvZiBhbGwgc3VjY2Vzc2Z1bCBydW5zIG9mIHRoZSBz dGF0ZW1lbnQuCisgICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgorICAgICA8bGlzdGl0 ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgICBUaGUgbnVtYmVyIG9mIGVycm9ycyBpbiB0aGlz IHN0YXRlbWVudC4gU2VlCisgICAgICAgICA8eHJlZiBsaW5rZW5kPSJlcnJvcnMtYW5kLXJldHJp ZXMiIGVuZHRlcm09ImVycm9ycy1hbmQtcmV0cmllcy10aXRsZSIvPgorICAgICAgICAgZm9yIG1v cmUgaW5mb3JtYXRpb24uCisgICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgorICAgICA8 bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgICBUaGUgbnVtYmVyIG9mIGVycm9ycyAi aW4gZmFpbGVkIFNRTCB0cmFuc2FjdGlvbiIgaW4gdGhpcyBzdGF0ZW1lbnQuIFNlZQorICAgICAg ICAgPHhyZWYgbGlua2VuZD0iZXJyb3JzLWFuZC1yZXRyaWVzIiBlbmR0ZXJtPSJlcnJvcnMtYW5k LXJldHJpZXMtdGl0bGUiLz4KKyAgICAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAg IDwvcGFyYT4KKyAgICAgPC9saXN0aXRlbT4KKyAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJh PgorICAgICAgICAgVGhlIG51bWJlciBvZiByZXRyaWVzIGFmdGVyIGEgc2VyaWFsaXphdGlvbiBv ciBhIGRlYWRsb2NrIGZhaWx1cmUgaW4KKyAgICAgICAgIHRoaXMgc3RhdGVtZW50LgorICAgICAg IDwvcGFyYT4KKyAgICAgPC9saXN0aXRlbT4KKyAgIDwvaXRlbWl6ZWRsaXN0PgorICA8L3BhcmE+ CisKKyAgPHBhcmE+CisgICBUaGUgcmVwb3J0IGRpc3BsYXlzIHRoZSBjb2x1bW5zIHdpdGggc3Rh dGlzdGljcyBvbiBlcnJvcnMgYW5kIHJldHJpZXMgb25seSBpZgorICAgdGhlIGN1cnJlbnQgPGFw cGxpY2F0aW9uPnBnYmVuY2g8L2FwcGxpY2F0aW9uPiBydW4gaGFzIGFuIGVycm9yIG9yIHJldHJ5 LAorICAgcmVzcGVjdGl2ZWx5LgorICA8L3BhcmE+CisKKyAgPG5vdGU+CisgICA8cGFyYT4KKyAg ICBJZiBhIGN1c3RvbSBzY3JpcHQgY29udGFpbnMgbXVsdGlwbGUgdHJhbnNhY3Rpb25zLCBlYWNo IGZhaWxlZCBvciByZXRyaWVkCisgICAgdHJhbnNhY3Rpb24gaXMgY291bnRlZCBhcyB3ZWxsIGFz IGVhY2ggZmFpbGVkIG1ldGEgY29tbWFuZC4gVGh1cywgdGhlIHRvdGFsCisgICAgc3VtIG9mIHBl ci1jb21tYW5kIGVycm9ycyBhbmQvb3IgcmV0cmllcyBjYW4gYmUgZ3JlYXRlciB0aGFuIHRoZSBu dW1iZXIgb2YKKyAgICBmYWlsZWQgYW5kL29yIHJldHJpZWQgdHJhbnNhY3Rpb24gc2NyaXB0cyBj b3JyZXNwb25kaW5nbHkuCisgICA8L3BhcmE+CisgIDwvbm90ZT4KKworICA8cGFyYT4KKyAgIEFs bCB2YWx1ZXMgYXJlIGNvbXB1dGVkIGZvciBlYWNoIHN0YXRlbWVudCBleGVjdXRlZCBieSBldmVy eSBjbGllbnQgYW5kIGFyZQorICAgcmVwb3J0ZWQgYWZ0ZXIgdGhlIGJlbmNobWFyayBoYXMgZmlu aXNoZWQuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KQEAgLTEzODIsNiArMTU3MSw3IEBAIEVORDsK IDxzY3JlZW4+CiBzdGFydGluZyB2YWN1dW0uLi5lbmQuCiB0cmFuc2FjdGlvbiB0eXBlOiAmbHQ7 YnVpbHRpbjogVFBDLUIgKHNvcnQgb2YpJmd0OworbWF4aW11bSBudW1iZXIgb2YgdHJhbnNhY3Rp b24gdHJpZXM6IDEKIHNjYWxpbmcgZmFjdG9yOiAxCiBxdWVyeSBtb2RlOiBzaW1wbGUKIG51bWJl ciBvZiBjbGllbnRzOiAxMApAQCAtMTQwNSwxMCArMTU5NSw0OSBAQCBzdGF0ZW1lbnQgbGF0ZW5j aWVzIGluIG1pbGxpc2Vjb25kczoKICAgICAgICAgMC4zNzEgIElOU0VSVCBJTlRPIHBnYmVuY2hf aGlzdG9yeSAodGlkLCBiaWQsIGFpZCwgZGVsdGEsIG10aW1lKSBWQUxVRVMgKDp0aWQsIDpiaWQs IDphaWQsIDpkZWx0YSwgQ1VSUkVOVF9USU1FU1RBTVApOwogICAgICAgICAxLjIxMiAgRU5EOwog PC9zY3JlZW4+CisKKyAgIEFub3RoZXIgZXhhbXBsZSBvZiBvdXRwdXQgZm9yIHRoZSBkZWZhdWx0 IHNjcmlwdCB1c2luZyBzZXJpYWxpemFibGUgZGVmYXVsdAorICAgdHJhbnNhY3Rpb24gaXNvbGF0 aW9uIGxldmVsICg8Y29tbWFuZD5QR09QVElPTlM9Jy1jCisgICBkZWZhdWx0X3RyYW5zYWN0aW9u X2lzb2xhdGlvbj1zZXJpYWxpemFibGUnIHBnYmVuY2ggLi4uPC9jb21tYW5kPik6Cis8c2NyZWVu Pgorc3RhcnRpbmcgdmFjdXVtLi4uZW5kLgordHJhbnNhY3Rpb24gdHlwZTogJmx0O2J1aWx0aW46 IFRQQy1CIChzb3J0IG9mKSZndDsKK21heGltdW0gbnVtYmVyIG9mIHRyYW5zYWN0aW9uIHRyaWVz OiAxMDAKK3NjYWxpbmcgZmFjdG9yOiAxCitxdWVyeSBtb2RlOiBzaW1wbGUKK251bWJlciBvZiBj bGllbnRzOiAxMAorbnVtYmVyIG9mIHRocmVhZHM6IDEKK251bWJlciBvZiB0cmFuc2FjdGlvbnMg cGVyIGNsaWVudDogMTAwMAorbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBhY3R1YWxseSBwcm9jZXNz ZWQ6IDEwMDAwLzEwMDAwCitudW1iZXIgb2YgZXJyb3JzOiA3MTk0ICg3MS45NDAgJSkKK2xhdGVu Y3kgYXZlcmFnZSA9IDU5Mi40MDQgbXMKK2xhdGVuY3kgc3RkZGV2ID0gMTAyNi45ODYgbXMKK251 bWJlciBvZiB0cmFuc2FjdGlvbnMgcmV0cmllZDogODg1NSAoODguNTUwICUpCitudW1iZXIgb2Yg cmV0cmllczogNzU5NDc0Cit0cHMgPSAyMC4yODcwOTggKGluY2x1ZGluZyBjb25uZWN0aW9ucyBl c3RhYmxpc2hpbmcpCit0cHMgPSAyMC4yODcyNzcgKGV4Y2x1ZGluZyBjb25uZWN0aW9ucyBlc3Rh Ymxpc2hpbmcpCitzdGF0ZW1lbnQgbGF0ZW5jaWVzIGluIG1pbGxpc2Vjb25kcywgZXJyb3JzIGFu ZCByZXRyaWVzOgorICAwLjAwMyAgICAgMCAgICAgICAwICBcc2V0IGFpZCByYW5kb20oMSwgMTAw MDAwICogOnNjYWxlKQorICAwLjAwMCAgICAgMCAgICAgICAwICBcc2V0IGJpZCByYW5kb20oMSwg MSAqIDpzY2FsZSkKKyAgMC4wMDAgICAgIDAgICAgICAgMCAgXHNldCB0aWQgcmFuZG9tKDEsIDEw ICogOnNjYWxlKQorICAwLjAwMCAgICAgMCAgICAgICAwICBcc2V0IGRlbHRhIHJhbmRvbSgtNTAw MCwgNTAwMCkKKyAgMC4yMjIgICAgIDAgICAgICAgMCAgQkVHSU47CisgIDAuNzM2ICAgICAwICAg ICAgIDEgIFVQREFURSBwZ2JlbmNoX2FjY291bnRzCisgICAgICAgICAgICAgICAgICAgICAgIFNF VCBhYmFsYW5jZSA9IGFiYWxhbmNlICsgOmRlbHRhIFdIRVJFIGFpZCA9IDphaWQ7CisgIDAuNTAy ICAgICAwICAgICAgIDAgIFNFTEVDVCBhYmFsYW5jZSBGUk9NIHBnYmVuY2hfYWNjb3VudHMgV0hF UkUgYWlkID0gOmFpZDsKKyAgMC45NjYgIDcxNzUgIDc1NDczOSAgVVBEQVRFIHBnYmVuY2hfdGVs bGVycworICAgICAgICAgICAgICAgICAgICAgICBTRVQgdGJhbGFuY2UgPSB0YmFsYW5jZSArIDpk ZWx0YSBXSEVSRSB0aWQgPSA6dGlkOworICAxLjEzNiAgICAxOSAgICA0NzI1ICBVUERBVEUgcGdi ZW5jaF9icmFuY2hlcworICAgICAgICAgICAgICAgICAgICAgICBTRVQgYmJhbGFuY2UgPSBiYmFs YW5jZSArIDpkZWx0YSBXSEVSRSBiaWQgPSA6YmlkOworICAwLjg4MSAgICAgMCAgICAgICAwICBJ TlNFUlQgSU5UTyBwZ2JlbmNoX2hpc3RvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICh0aWQsIGJpZCwgYWlkLCBkZWx0YSwgbXRpbWUpCisgICAgICAgICAgICAgICAgICAgICAgIFZB TFVFUyAoOnRpZCwgOmJpZCwgOmFpZCwgOmRlbHRhLCBDVVJSRU5UX1RJTUVTVEFNUCk7CisgIDAu ODU1ICAgICAwICAgICAgIDkgIEVORDsKKzwvc2NyZWVuPgogICA8L3BhcmE+CiAKICAgPHBhcmE+ Ci0gICBJZiBtdWx0aXBsZSBzY3JpcHQgZmlsZXMgYXJlIHNwZWNpZmllZCwgdGhlIGF2ZXJhZ2Vz IGFyZSByZXBvcnRlZAorICAgSWYgbXVsdGlwbGUgc2NyaXB0IGZpbGVzIGFyZSBzcGVjaWZpZWQs IGFsbCBzdGF0aXN0aWNzIGFyZSByZXBvcnRlZAogICAgc2VwYXJhdGVseSBmb3IgZWFjaCBzY3Jp cHQgZmlsZS4KICAgPC9wYXJhPgogCkBAIC0xNDIyLDYgKzE2NTEsNzYgQEAgc3RhdGVtZW50IGxh dGVuY2llcyBpbiBtaWxsaXNlY29uZHM6CiAgIDwvcGFyYT4KICA8L3JlZnNlY3QyPgogCisgPHJl ZnNlY3QyIGlkPSJlcnJvcnMtYW5kLXJldHJpZXMiPgorICA8dGl0bGUgaWQ9ImVycm9ycy1hbmQt cmV0cmllcy10aXRsZSI+RXJyb3JzIGFuZCBTZXJpYWxpemF0aW9uL0RlYWRsb2NrIFJldHJpZXM8 L3RpdGxlPgorCisgIDxwYXJhPgorICAgQ2xpZW50J3MgcnVuIGlzIGFib3J0ZWQgb25seSBpbiBj YXNlIG9mIGEgc2VyaW91cyBlcnJvciwgZm9yIGV4YW1wbGUsIHRoZQorICAgY29ubmVjdGlvbiB3 aXRoIHRoZSBiYWNrZW5kIHdhcyBsb3N0LiBPdGhlcndpc2UgaWYgdGhlIGV4ZWN1dGlvbiBvZiBT UUwgb3IKKyAgIG1ldGEgY29tbWFuZCBmYWlscywgdGhlIGNsaWVudCdzIHJ1biBjb250aW51ZXMg bm9ybWFsbHksIGV4Y2VwdCB0aGF0IHRoZQorICAgY3VycmVudCB0cmFuc2FjdGlvbiBibG9jayB0 ZXJtaW5hdGVzIGlmIHBvc3NpYmxlLiBUcmFuc2FjdGlvbnMgd2l0aAorICAgc2VyaWFsaXphdGlv biBvciBkZWFkbG9jayBmYWlsdXJlcyBhcmUgcm9sbGVkIGJhY2sgYW5kIHJlcGVhdGVkIHVudGls IHRoZXkKKyAgIGNvbXBsZXRlIHN1Y2Nlc3NmdWxseSBvciByZWFjaCB0aGUgbWF4aW11bSBudW1i ZXIgb2YgdHJpZXMgc3BlY2lmaWVkIGJ5IHRoZQorICAgPG9wdGlvbj4tLW1heC10cmllczwvb3B0 aW9uPiBvcHRpb24uIElmIHRoZSBsYXN0IHRyYW5zYWN0aW9uIHJ1biBmYWlscywgdGhpcworICAg dHJhbnNhY3Rpb24gd2lsbCBiZSByZXBvcnRlZCBhcyBmYWlsZWQuCisgIDwvcGFyYT4KKworICA8 bm90ZT4KKyAgIDxwYXJhPgorICAgIElmIGEgZmFpbGVkIHRyYW5zYWN0aW9uIGJsb2NrIGNhbm5v dCB0ZXJtaW5hdGUgaW4gdGhlIGN1cnJlbnQgc2NyaXB0LCBpdHMKKyAgICBjb21tYW5kcyBhZnRl ciB0aGUgZXJyb3IgYXMgd2VsbCBhcyB0aGUgY29tbWFuZHMgb2YgdGhlIGZvbGxvd2luZyBzY3Jp cHRzCisgICAgYXJlIHByb2Nlc3NlZCBhcyB1c3VhbCBzbyB5b3UgY2FuIGdldCBhIGxvdCBvZiBl cnJvcnMgb2YgdHlwZSAiaW4gZmFpbGVkIFNRTAorICAgIHRyYW5zYWN0aW9uIiAod2hlbiB0aGUg Y3VycmVudCBTUUwgdHJhbnNhY3Rpb24gaXMgYWJvcnRlZCBhbmQgY29tbWFuZHMKKyAgICBpZ25v cmVkIHVudGlsIGVuZCBvZiB0cmFuc2FjdGlvbiBibG9jaykuIEluIHN1Y2ggY2FzZXMgeW91IGNh biB1c2Ugc2VwYXJhdGUKKyAgICBzdGF0aXN0aWNzIG9mIHRoZXNlIGVycm9ycyBpbiBhbGwgcmVw b3J0cy4KKyAgIDwvcGFyYT4KKyAgPC9ub3RlPgorCisgIDxwYXJhPgorICAgSW4gcGdiZW5jaCB5 b3UgY2FuIHVzZSBzY3JpcHRzIGluIHdoaWNoIHRoZSB0cmFuc2FjdGlvbiBibG9ja3MgZG8gbm90 IGVuZC4gQmUKKyAgIGNhcmVmdWwgaW4gdGhpcyBjYXNlIGJlY2F1c2UgdHJhbnNhY3Rpb25zIHRo YXQgc3BhbiBvdmVyIG1vcmUgdGhhbiBvbmUgc2NyaXB0CisgICBhcmUgbm90IHJvbGxlZCBiYWNr IGFuZCB3aWxsIG5vdCBiZSByZXRyaWVkIGluIGNhc2Ugb2YgYW4gZXJyb3IuIEluIHN1Y2gKKyAg IGNhc2VzLCB0aGUgc2NyaXB0IGluIHdoaWNoIHRoZSBlcnJvciBvY2N1cnJlZCBpcyByZXBvcnRl ZCBhcyBmYWlsZWQuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSBsYXRlbmN5IG9mIGEg c3VjY2Vzc2Z1bCB0cmFuc2FjdGlvbiBpbmNsdWRlcyB0aGUgZW50aXJlIHRpbWUgb2YKKyAgIHRy YW5zYWN0aW9uIGV4ZWN1dGlvbiB3aXRoIHJvbGxiYWNrcyBhbmQgcmV0cmllcy4gVGhlIGxhdGVu Y3kgZm9yIGZhaWxlZAorICAgdHJhbnNhY3Rpb25zIGFuZCBjb21tYW5kcyBpcyBub3QgY29tcHV0 ZWQgc2VwYXJhdGVseS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIG1haW4gcmVwb3J0 IGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgZmFpbGVkIHRyYW5zYWN0aW9ucyBpZiBpdCBpcyBub24t emVyby4KKyAgIElmIHRoZSB0b3RhbCBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIGVuZGVkIHdpdGgg YW4gZXJyb3IgImluIGZhaWxlZCBTUUwKKyAgIHRyYW5zYWN0aW9uIGJsb2NrIiBpcyBub24temVy bywgdGhlIG1haW4gcmVwb3J0IGFsc28gY29udGFpbnMgaXQuIElmIHRoZQorICAgdG90YWwgbnVt YmVyIG9mIHJldHJpZWQgdHJhbnNhY3Rpb25zIGlzIG5vbi16ZXJvLCB0aGUgbWFpbiByZXBvcnQg YWxzbworICAgY29udGFpbnMgdGhlIHN0YXRpc3RpY3MgcmVsYXRlZCB0byByZXRyaWVzOiB0aGUg dG90YWwgbnVtYmVyIG9mIHJldHJpZWQKKyAgIHRyYW5zYWN0aW9ucyBhbmQgdG90YWwgbnVtYmVy IG9mIHJldHJpZXMgKHVzZSBvcHRpb24KKyAgIDxvcHRpb24+LS1tYXgtdHJpZXM8L29wdGlvbj4g dG8gbWFrZSBpdCBwb3NzaWJsZSkuIFRoZSBwZXItc3RhdGVtZW50IHJlcG9ydAorICAgaW5oZXJp dHMgYWxsIGNvbHVtbnMgZnJvbSB0aGUgbWFpbiByZXBvcnQuCisgIDwvcGFyYT4KKyAgPG5vdGU+ CisgICA8cGFyYT4KKyAgICBJZiBhIGN1c3RvbSBzY3JpcHQgY29udGFpbnMgbXVsdGlwbGUgdHJh bnNhY3Rpb25zLCBpdHMgcnVuIGlzIHJlcG9ydGVkIGFzCisgICAgZmFpbGVkIGlmIGFueSBvZiBp dHMgdHJhbnNhY3Rpb25zIG9yIG1ldGEgY29tbWFuZHMgZmFpbGVkLiBUaGUgcnVuIG9mIHRoaXMK KyAgICBzY3JpcHQgaXMgcmVwb3J0ZWQgc2VwYXJhdGx5IGlmIHNvbWUgb2YgaXRzIHRyYW5zYWN0 aW9ucyBlbmRlZCB3aXRoIGFuIGVycm9yCisgICAgImluIGZhaWxlZCBTUUwgdHJhbnNhY3Rpb24g YmxvY2siIGFuZCB0aGVyZSB3ZXJlIG5vIG90aGVyIGVycm9ycy4gVGhlIHJ1biBvZgorICAgIHRo aXMgc2NyaXB0IGlzIHJlcG9ydGVkIGFzIHJldHJpZWQgaWYgYW55IG9mIGl0cyB0cmFuc2FjdGlv bnMgd2FzIHJldHJpZWQKKyAgICBhZnRlciBhIHNlcmlhbGl6YXRpb24vZGVhZGxvY2sgZmFpbHVy ZS4gVGhlIHRvdGFsIHN1bSBvZiByZXRyaWVzIGluY2x1ZGVzCisgICAgdGhlIHJldHJpZXMgZm9y IGFsbCB0cmFuc2FjdGlvbnMgaW4gdGhpcyBzY3JpcHQuCisgICA8L3BhcmE+CisgIDwvbm90ZT4K KworICA8cGFyYT4KKyAgIElmIHlvdSB3YW50IHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gZmFpbHVy ZXMgb3IgZXJyb3JzIGJ5IHR5cGUsIG9yIHlvdSB3YW50IHRvCisgICBrbm93IHdoaWNoIHN1YmNv bW1hbmRzIG9mIGNvbXBvdW5kIFNRTCBjb21tYW5kcyBmYWlsZWQsIHVzZSB0aGUgdGhlCisgICA8 YXBwbGljYXRpb24+cGdiZW5jaDwvYXBwbGljYXRpb24+IGRlYnVnZ2luZyBvdXRwdXQgY3JlYXRl ZCB3aXRoIHRoZSBvcHRpb24KKyAgIDxvcHRpb24+LS1kZWJ1Zy1mYWlsczwvb3B0aW9uPiBvciA8 b3B0aW9uPi0tZGVidWc8L29wdGlvbj4uIFRoZSBmaXJzdCBvcHRpb24KKyAgIGlzIHJlY29tbWVu ZGVkIGZvciB0aGlzIHB1cnBvc2UgYmVjYXVzZSB3aXRoIHRoZSBzZWNvbmQgb3B0aW9uIHRoZSBk ZWJ1Z2dpbmcKKyAgIG91dHB1dCBjYW4gYmUgdmVyeSBsYXJnZS4KKyAgPC9wYXJhPgorIDwvcmVm c2VjdDI+CisKICA8cmVmc2VjdDI+CiAgIDx0aXRsZT5Hb29kIFByYWN0aWNlczwvdGl0bGU+CiAK ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMgYi9zcmMvYmluL3BnYmVuY2gv cGdiZW5jaC5jCmluZGV4IDdjZTZmNjAuLjdlMjBjNmIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdi ZW5jaC9wZ2JlbmNoLmMKKysrIGIvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYwpAQCAtNTgsNiAr NTgsOSBAQAogCiAjaW5jbHVkZSAicGdiZW5jaC5oIgogCisjZGVmaW5lIEVSUkNPREVfSU5fRkFJ TEVEX1NRTF9UUkFOU0FDVElPTiAgIjI1UDAyIgorI2RlZmluZSBFUlJDT0RFX1RfUl9TRVJJQUxJ WkFUSU9OX0ZBSUxVUkUgICI0MDAwMSIKKyNkZWZpbmUgRVJSQ09ERV9UX1JfREVBRExPQ0tfREVU RUNURUQgICI0MFAwMSIKICNkZWZpbmUgRVJSQ09ERV9VTkRFRklORURfVEFCTEUgICI0MlAwMSIK IAogLyoKQEAgLTE3NCw4ICsxNzcsMTMgQEAgYm9vbAkJcHJvZ3Jlc3NfdGltZXN0YW1wID0gZmFs c2U7IC8qIHByb2dyZXNzIHJlcG9ydCB3aXRoIFVuaXggdGltZSAqLwogaW50CQkJbmNsaWVudHMg PSAxOwkJLyogbnVtYmVyIG9mIGNsaWVudHMgKi8KIGludAkJCW50aHJlYWRzID0gMTsJCS8qIG51 bWJlciBvZiB0aHJlYWRzICovCiBib29sCQlpc19jb25uZWN0OwkJCS8qIGVzdGFibGlzaCBjb25u ZWN0aW9uIGZvciBlYWNoIHRyYW5zYWN0aW9uICovCi1ib29sCQlpc19sYXRlbmNpZXM7CQkvKiBy ZXBvcnQgcGVyLWNvbW1hbmQgbGF0ZW5jaWVzICovCitib29sCQlyZXBvcnRfcGVyX2NvbW1hbmQg PSBmYWxzZTsJLyogcmVwb3J0IHBlci1jb21tYW5kIGxhdGVuY2llcywgcmV0cmllcworCQkJCQkJ CQkJCSAqIGFmdGVyIHRoZSBmYWlsdXJlcyBhbmQgZXJyb3JzCisJCQkJCQkJCQkJICogKGZhaWx1 cmVzIHdpdGhvdXQgcmV0cnlpbmcpICovCiBpbnQJCQltYWluX3BpZDsJCQkvKiBtYWluIHByb2Nl c3MgaWQgdXNlZCBpbiBsb2cgZmlsZW5hbWUgKi8KK2ludAkJCW1heF90cmllcyA9IDE7CQkvKiBt YXhpbXVtIG51bWJlciBvZiB0cmllcyB0byBydW4gdGhlCisJCQkJCQkJCSAqIHRyYW5zYWN0aW9u IHdpdGggc2VyaWFsaXphdGlvbiBvciBkZWFkbG9jaworCQkJCQkJCQkgKiBmYWlsdXJlcyAqLwog CiBjaGFyCSAgICpwZ2hvc3QgPSAiIjsKIGNoYXIJICAgKnBncG9ydCA9ICIiOwpAQCAtMjMyLDEx ICsyNDAsODMgQEAgdHlwZWRlZiBzdHJ1Y3QgU3RhdHNEYXRhCiAJaW50NjQJCWNudDsJCQkvKiBu dW1iZXIgb2YgdHJhbnNhY3Rpb25zLCBpbmNsdWRpbmcgc2tpcHBlZCAqLwogCWludDY0CQlza2lw cGVkOwkJLyogbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBza2lwcGVkIHVuZGVyIC0tcmF0ZQogCQkJ CQkJCQkgKiBhbmQgLS1sYXRlbmN5LWxpbWl0ICovCisJaW50NjQJCXJldHJpZXM7CisJaW50NjQJ CXJldHJpZWQ7CQkvKiBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIHRoYXQgd2VyZSByZXRyaWVkCisJ CQkJCQkJCSAqIGFmdGVyIGEgc2VyaWFsaXphdGlvbiBvciBhIGRlYWRsb2NrCisJCQkJCQkJCSAq IGZhaWx1cmUgKi8KKwlpbnQ2NAkJZXJyb3JzOwkJCS8qIG51bWJlciBvZiB0cmFuc2FjdGlvbnMg dGhhdCB3ZXJlIG5vdCByZXRyaWVkCisJCQkJCQkJCSAqIGFmdGVyIGEgc2VyaWFsaXphdGlvbiBv ciBhIGRlYWRsb2NrCisJCQkJCQkJCSAqIGZhaWx1cmUgb3IgaGFkIGFub3RoZXIgZXJyb3IgKGlu Y2x1ZGluZyBtZXRhCisJCQkJCQkJCSAqIGNvbW1hbmRzIGVycm9ycykgKi8KKwlpbnQ2NAkJZXJy b3JzX2luX2ZhaWxlZF90eDsJLyogbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyB0aGF0IGZhaWxlZCBp bgorCQkJCQkJCQkJCSAqIGEgZXJyb3IKKwkJCQkJCQkJCQkgKiBFUlJDT0RFX0lOX0ZBSUxFRF9T UUxfVFJBTlNBQ1RJT04gKi8KIAlTaW1wbGVTdGF0cyBsYXRlbmN5OwogCVNpbXBsZVN0YXRzIGxh ZzsKIH0gU3RhdHNEYXRhOwogCiAvKgorICogRGF0YSBzdHJ1Y3R1cmUgZm9yIGNsaWVudCB2YXJp YWJsZXMuCisgKi8KK3R5cGVkZWYgc3RydWN0IFZhcmlhYmxlcworeworCVZhcmlhYmxlICAgKmFy cmF5OwkJCS8qIGFycmF5IG9mIHZhcmlhYmxlIGRlZmluaXRpb25zICovCisJaW50CQkJbnZhcmlh YmxlczsJCS8qIG51bWJlciBvZiB2YXJpYWJsZXMgKi8KKwlib29sCQl2YXJzX3NvcnRlZDsJLyog YXJlIHZhcmlhYmxlcyBzb3J0ZWQgYnkgbmFtZT8gKi8KK30gVmFyaWFibGVzOworCisvKgorICog RGF0YSBzdHJ1Y3R1cmUgZm9yIHJlcGVhdGluZyBhIHRyYW5zYWN0aW9uIGZyb20gdGhlIGJlZ2lu bm5pbmcgd2l0aCB0aGUgc2FtZQorICogcGFyYW1ldGVycy4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qg UmV0cnlTdGF0ZQoreworCS8qCisJICogQ29tbWFuZCBudW1iZXIgaW4gc2NyaXB0OyAtMSBpZiB0 aGVyZSB3ZXJlIG5vdCBhbnkgdHJhbnNhY3Rpb25zIHlldCBvciB3ZQorCSAqIGNvbnRpbnVlIHRo ZSB0cmFuc2FjdGlvbiBibG9jayBmcm9tIHRoZSBwcmV2aW91cyBzY3JpcHRzCisJICovCisJaW50 CQkJY29tbWFuZDsKKworCS8qCisJICogVGhlIGxhc3Qgbm9uLWVtcHR5IHN1YmNvbW1hbmQgdGhh dCBtYXkgYmUgcmV0cmllZCBpbiB0aGlzIGNvbW1hbmQuCisJICogLTEgaWYgYWxsIHN1YmNvbW1h bmRzIG1heSBiZSByZXRyaWVkLgorCSAqLworCWludAkJCXN1YmNtZDsKKworCWludAkJCXJldHJp ZXM7CisKKwl1bnNpZ25lZCBzaG9ydCByYW5kb21fc3RhdGVbM107CS8qIHJhbmRvbSBzZWVkICov CisJVmFyaWFibGVzICAgdmFyaWFibGVzOwkJLyogY2xpZW50IHZhcmlhYmxlcyAqLworfSBSZXRy eVN0YXRlOworCisvKgorICogRm9yIHRoZSBmYWlsdXJlcyBkdXJpbmcgc2NyaXB0IGV4ZWN1dGlv bi4KKyAqLwordHlwZWRlZiBlbnVtIEZhaWx1cmVTdGF0dXMKK3sKKwlOT19GQUlMVVJFID0gMCwK KwlNRVRBX0NPTU1BTkRfRkFJTFVSRSwKKwlTRVJJQUxJWkFUSU9OX0ZBSUxVUkUsCisJREVBRExP Q0tfRkFJTFVSRSwKKwlJTl9GQUlMRURfU1FMX1RSQU5TQUNUSU9OLAorCUFOT1RIRVJfRkFJTFVS RSwKKwlOVU1fRkFJTFVSRV9TVEFUVVMKK30gRmFpbHVyZVN0YXR1czsKKworLyoKKyAqIERhdGEg c3RydWN0dXJlIGZvciB0aGUgY29tcGxldGlvbiBvZiBhIGZhaWxlZCB0cmFuc2FjdGlvbiBibG9j ay4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgTGFzdEZhaWx1cmUKK3sKKwlpbnQJCQljb21tYW5kOwkJ Lyogd2hpY2ggY29tbWFuZCBoYXMgZmFpbGVkICovCisJaW50CQkJc3ViY21kOwkJCS8qIHdoaWNo IG5vbi1lbXB0eSBzdWJjb21tYW5kIG9mIGEgY29tcG91bmQgU1FMCisJCQkJCQkJCSAqIGNvbW1h bmQgZmFpbGVkOyBub3QgdXNlZCBmb3IgbWV0YSBjb21tYW5kcyAqLworCWJvb2wJCXdhc19pbl90 eF9ibG9jazsJLyogd2VyZSB3ZSBpbiB0aGUgdHJhbnNhY3Rpb24gYmxvY2sgYmVmb3JlCisJCQkJ CQkJCQkgKiB0aGUgZmFpbGVkIGNvbW1hbmQgKi8KKwlGYWlsdXJlU3RhdHVzIHN0YXR1czsJCS8q IHR5cGUgb2YgZmFpbHVyZSAqLworfSBMYXN0RmFpbHVyZTsKKworLyoKICAqIENvbm5lY3Rpb24g c3RhdGUgbWFjaGluZSBzdGF0ZXMuCiAgKi8KIHR5cGVkZWYgZW51bQpAQCAtMjg3LDYgKzM2Nywz NSBAQCB0eXBlZGVmIGVudW0KIAlDU1RBVEVfRU5EX0NPTU1BTkQsCiAKIAkvKgorCSAqIFN0YXRl cyBmb3IgdHJhbnNhY3Rpb25zIHdpdGggZmFpbHVyZXMgb3IgZXJyb3JzLgorCSAqCisJICogRmly c3QsIHJlcG9ydCB0aGUgZmFpbHVyZSBpbiBDU1RBVEVfRkFJTFVSRS4KKwkgKgorCSAqIFRoZW4s IGlmIHdlIG5lZWQgdG8gZW5kIHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24gYmxvY2ssIGdvIHRvIHN0 YXRlcworCSAqIDEpIENTVEFURV9FTkRfRkFJTEVEX1RYX0JMT0NLX1NUQVJUCisJICogMikgQ1NU QVRFX0VORF9GQUlMRURfVFhfQkxPQ0tfV0FJVAorCSAqIDMpIENTVEFURV9FTkRfRkFJTEVEX1RY X0JMT0NLX0VORAorCSAqIHdpdGggdGhlIGFwcHJvcHJpYXRlIGNvbW1hbmQuCisJICoKKwkgKiBJ ZiBvdXIgdHJ5IHRvIGVuZCB0aGlzIHRyYW5zYWN0aW9uIGJsb2NrIGZhaWxlZCwgcmVwb3J0IHRo aXMgaW4KKwkgKiBDU1RBVEVfRU5EX0ZBSUxFRF9UWF9CTE9DS19GQUlMVVJFIGFuZCBnbyBhaGVh ZCB3aXRoIG5leHQgY29tbWFuZC4KKwkgKgorCSAqIEJ1dCBpZiBldmVyeXRoaW5nIGlzIE9LLCBn byB0byBDU1RBVEVfUkVUUlkgLworCSAqIENTVEFURV9FTkRfRkFJTEVEX1RYX0JMT0NLX1JFVFJZ LiBJZiB3ZSBjYW4gcmVwZWF0IHRoZSBmYWlsZWQKKwkgKiB0cmFuc2FjdGlvbiwgc2V0IHRoZSBz YW1lIHBhcmFtZXRlcnMgZm9yIHRoZSB0cmFuc2FjdGlvbiBleGVjdXRpb24gYXMgaW4KKwkgKiB0 aGUgcHJldmlvdXMgdHJpZXMuIE90aGVyd2lzZSwgZ28gdG8gdGhlIG5leHQgY29tbWFuZCBhZnRl ciB0aGUgZmFpbGVkCisJICogdHJhbnNhY3Rpb24uCisJICovCisJQ1NUQVRFX0ZBSUxVUkUsCisJ Q1NUQVRFX1JFVFJZLAorCisJQ1NUQVRFX0VORF9GQUlMRURfVFhfQkxPQ0tfU1RBUlQsCS8qIHNh bWUgYXMgQ1NUQVRFX1NUQVJUX0NPTU1BTkQgKi8KKwlDU1RBVEVfRU5EX0ZBSUxFRF9UWF9CTE9D S19XQUlULAkvKiBzYW1lIGFzIENTVEFURV9XQUlUX1JFU1VMVCAqLworCUNTVEFURV9FTkRfRkFJ TEVEX1RYX0JMT0NLX0VORCwJCS8qIHNhbWUgYXMgQ1NUQVRFX0VORF9DT01NQU5EICovCisJQ1NU QVRFX0VORF9GQUlMRURfVFhfQkxPQ0tfRkFJTFVSRSwJLyogc2FtZSBhcyBDU1RBVEVfRkFJTFVS RSAqLworCUNTVEFURV9FTkRfRkFJTEVEX1RYX0JMT0NLX1JFVFJZLAkvKiBzYW1lIGFzIENTVEFU RV9SRVRSWSAqLworCisJLyoKIAkgKiBDU1RBVEVfRU5EX1RYIHBlcmZvcm1zIGVuZC1vZi10cmFu c2FjdGlvbiBwcm9jZXNzaW5nLiAgQ2FsY3VsYXRlcwogCSAqIGxhdGVuY3ksIGFuZCBsb2dzIHRo ZSB0cmFuc2FjdGlvbi4gIEluIC0tY29ubmVjdCBtb2RlLCBjbG9zZXMgdGhlCiAJICogY3VycmVu dCBjb25uZWN0aW9uLiAgQ2hvb3NlcyB0aGUgbmV4dCBzY3JpcHQgdG8gZXhlY3V0ZSBhbmQgc3Rh cnRzIG92ZXIKQEAgLTMxMSwxNCArNDIwLDEzIEBAIHR5cGVkZWYgc3RydWN0CiAJUEdjb25uCSAg ICpjb247CQkJLyogY29ubmVjdGlvbiBoYW5kbGUgdG8gREIgKi8KIAlpbnQJCQlpZDsJCQkJLyog Y2xpZW50IE5vLiAqLwogCUNvbm5lY3Rpb25TdGF0ZUVudW0gc3RhdGU7CS8qIHN0YXRlIG1hY2hp bmUncyBjdXJyZW50IHN0YXRlLiAqLworCXVuc2lnbmVkIHNob3J0IHJhbmRvbV9zdGF0ZVszXTsJ Lyogc2VwYXJhdGUgcmFuZG9tbmVzcyBmb3IgZWFjaCBjbGllbnQgKi8KIAogCWludAkJCXVzZV9m aWxlOwkJLyogaW5kZXggaW4gc3FsX3NjcmlwdCBmb3IgdGhpcyBjbGllbnQgKi8KIAlpbnQJCQlj b21tYW5kOwkJLyogY29tbWFuZCBudW1iZXIgaW4gc2NyaXB0ICovCiAKIAkvKiBjbGllbnQgdmFy aWFibGVzICovCi0JVmFyaWFibGUgICAqdmFyaWFibGVzOwkJLyogYXJyYXkgb2YgdmFyaWFibGUg ZGVmaW5pdGlvbnMgKi8KLQlpbnQJCQludmFyaWFibGVzOwkJLyogbnVtYmVyIG9mIHZhcmlhYmxl cyAqLwotCWJvb2wJCXZhcnNfc29ydGVkOwkvKiBhcmUgdmFyaWFibGVzIHNvcnRlZCBieSBuYW1l PyAqLworCVZhcmlhYmxlcyAgIHZhcmlhYmxlczsKIAogCS8qIHZhcmlvdXMgdGltZXMgYWJvdXQg Y3VycmVudCB0cmFuc2FjdGlvbiAqLwogCWludDY0CQl0eG5fc2NoZWR1bGVkOwkvKiBzY2hlZHVs ZWQgc3RhcnQgdGltZSBvZiB0cmFuc2FjdGlvbiAodXNlYykgKi8KQEAgLTMyOCw2ICs0MzYsMjkg QEAgdHlwZWRlZiBzdHJ1Y3QKIAogCWJvb2wJCXByZXBhcmVkW01BWF9TQ1JJUFRTXTsJLyogd2hl dGhlciBjbGllbnQgcHJlcGFyZWQgdGhlIHNjcmlwdCAqLwogCisJLyogZm9yIGNvbXBvdW5kIFNR TCBjb21tYW5kcyAqLworCWludAkJCXN1YmNtZDsJCQkvKiBmb3Igd2hhdCBub24tZW1wdHkgc3Vi Y29tbWFuZCBvZiB0aGUgY3VycmVudAorCQkJCQkJCQkgKiBTUUwgY29tbWFuZCB3ZSBnZXQgdGhl IHF1ZXJ5IHJlc3VsdCBmcm9tIHRoZQorCQkJCQkJCQkgKiBzZXJ2ZXI7IDAgaWYgYWxsIHN1YmNv bW1hbmRzIGFyZSBlbXB0eTsgbm90CisJCQkJCQkJCSAqIHVzZWQgZm9yIG1ldGEgY29tbWFuZHMg Ki8KKworCS8qCisJICogRm9yIHByb2Nlc3NpbmcgZXJyb3JzIGFuZCByZXBlYXRpbmcgdHJhbnNh Y3Rpb25zIHdpdGggc2VyaWFsaXphdGlvbiBvcgorCSAqIGRlYWRsb2NrIGZhaWx1cmVzOgorCSAq LworCWJvb2wJCWluX3R4X2Jsb2NrOwkvKiBhcmUgd2UgaW4gdHJhbnNhY3Rpb24gYmxvY2s/ICov CisJYm9vbAkJd2FzX2luX3R4X2Jsb2NrOwkvKiB3ZXJlIHdlIGluIHRoZSB0cmFuc2FjdGlvbiBi bG9jayBiZWZvcmUKKwkJCQkJCQkJCSAqIGV4ZWN1dGluZyB0aGUgY3VycmVudCBjb21tYW5kPyAq LworCUxhc3RGYWlsdXJlIGxhc3RfZmFpbHVyZTsJLyogdGhlIHN0YXR1cyBvZiB0aGUgZmFpbHVy ZSBiZWZvcmUgd2UgdHJ5IHRvCisJCQkJCQkJCSAqIGVuZCBhIGZhaWxlZCB0cmFuc2FjdGlvbiBi bG9jayAqLworCVJldHJ5U3RhdGUgIHJldHJ5X3N0YXRlOworCWludDY0CQlyZXRyaWVzOworCWJv b2wJCWVycm9yOwkJCS8qIGlmIHRoZXJlIHdhcyBhIHNlcmlhbGl6YXRpb24gb3IgYSBkZWFkbG9j aworCQkJCQkJCQkgKiBmYWlsdXJlIHdpdGhvdXQgcmV0cnlpbmcgb3IgYW5vdGhlciBlcnJvcgor CQkJCQkJCQkgKiAoaW5jbHVkaW5nIG1ldGEgY29tbWFuZHMgZXJyb3JzKSAqLworCWJvb2wJCWVy cm9yX25vdF9pbl9mYWlsZWRfdHg7CS8qIGlmIHRoZXJlIHdhcyBhbiBlcnJvciBvdGhlciB0aGFu CisJCQkJCQkJCQkJICogRVJSQ09ERV9JTl9GQUlMRURfU1FMX1RSQU5TQUNUSU9OICovCisKIAkv KiBwZXIgY2xpZW50IGNvbGxlY3RlZCBzdGF0cyAqLwogCWludDY0CQljbnQ7CQkJLyogY2xpZW50 IHRyYW5zYWN0aW9uIGNvdW50LCBmb3IgLXQgKi8KIAlpbnQJCQllY250OwkJCS8qIGVycm9yIGNv dW50ICovCkBAIC0zNzEsNyArNTAyLDYgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlwdGhyZWFkX3QJdGhy ZWFkOwkJCS8qIHRocmVhZCBoYW5kbGUgKi8KIAlDU3RhdGUJICAgKnN0YXRlOwkJCS8qIGFycmF5 IG9mIENTdGF0ZSAqLwogCWludAkJCW5zdGF0ZTsJCQkvKiBsZW5ndGggb2Ygc3RhdGVbXSAqLwot CXVuc2lnbmVkIHNob3J0IHJhbmRvbV9zdGF0ZVszXTsgLyogc2VwYXJhdGUgcmFuZG9tbmVzcyBm b3IgZWFjaCB0aHJlYWQgKi8KIAlpbnQ2NAkJdGhyb3R0bGVfdHJpZ2dlcjsJLyogcHJldmlvdXMv bmV4dCB0aHJvdHRsaW5nICh1cykgKi8KIAlGSUxFCSAgICpsb2dmaWxlOwkJLyogd2hlcmUgdG8g bG9nLCBvciBOVUxMICovCiAJWmlwZkNhY2hlCXppcGZfY2FjaGU7CQkvKiBmb3IgdGhyZWFkLXNh ZmUgIHppcGZpYW4gcmFuZG9tIG51bWJlcgpAQCAtNDEzLDYgKzU0MywxOCBAQCB0eXBlZGVmIGVu dW0gUXVlcnlNb2RlCiBzdGF0aWMgUXVlcnlNb2RlIHF1ZXJ5bW9kZSA9IFFVRVJZX1NJTVBMRTsK IHN0YXRpYyBjb25zdCBjaGFyICpRVUVSWU1PREVbXSA9IHsic2ltcGxlIiwgImV4dGVuZGVkIiwg InByZXBhcmVkIn07CiAKKy8qCisgKiBEYXRhIHN0cnVjdHVyZSBmb3Igbm9uLWVtcHR5IHN1YmNv bW1hbmRzIG9mIHRoZSBjb21wb3VuZCBTUUwgY29tbWFuZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qg U3ViY29tbWFuZAoreworCWludAkJCWluaXRpYWxfc3ViY21kX251bTsJLyogc3ViY29tbWFuZCBu dW1iZXIgYmV0d2VlbiBhbGwKKwkJCQkJCQkJCSAqIHN1YmNvbW1hbmRzICovCisJaW50CQkJdHhf YmxvY2tfZW5kOwkvKiB0aGUgbnVtYmVyIG9mIHRoZSBuZWFyZXN0IG5vbi1lbXB0eQorCQkJCQkJ CQkgKiBzdWJjb21tYW5kIHRvIGNvbXBsZXRlIHRoZSB0cmFuc2FjdGlvbiBibG9jaworCQkJCQkJ CQkgKiBvciAtMSAqLworfSBTdWJjb21tYW5kOworCiB0eXBlZGVmIHN0cnVjdAogewogCWNoYXIJ ICAgKmxpbmU7CQkJLyogdGV4dCBvZiBjb21tYW5kIGxpbmUgKi8KQEAgLTQyMyw2ICs1NjUsMjgg QEAgdHlwZWRlZiBzdHJ1Y3QKIAljaGFyCSAgICphcmd2W01BWF9BUkdTXTsgLyogY29tbWFuZCB3 b3JkIGxpc3QgKi8KIAlQZ0JlbmNoRXhwciAqZXhwcjsJCQkvKiBwYXJzZWQgZXhwcmVzc2lvbiwg aWYgbmVlZGVkICovCiAJU2ltcGxlU3RhdHMgc3RhdHM7CQkJLyogdGltZSBzcGVudCBpbiB0aGlz IGNvbW1hbmQgKi8KKwlpbnQ2NAkJcmV0cmllczsKKwlpbnQ2NAkJZXJyb3JzOwkJCS8qIG51bWJl ciBvZiBmYWlsdXJlcyB0aGF0IHdlcmUgbm90IHJldHJpZWQgKi8KKwlpbnQ2NAkJZXJyb3JzX2lu X2ZhaWxlZF90eDsJLyogbnVtYmVyIG9mIGVycm9ycworCQkJCQkJCQkJCSAqIEVSUkNPREVfSU5f RkFJTEVEX1NRTF9UUkFOU0FDVElPTiAqLworCisJLyoKKwkgKiBGb3IgcHJvY2Vzc2luZyBlcnJv cnMgYW5kIHJlcGVhdGluZyB0cmFuc2FjdGlvbnMgd2l0aCBzZXJpYWxpemF0aW9uIG9yCisJICog ZGVhZGxvY2sgZmFpbHVyZXM6CisJICovCisJaW50CQkJdHhfYmxvY2tfZW5kOwkvKiB0aGUgbnVt YmVyIG9mIHRoZSBuZWFyZXN0IGNvbW1hbmQgdG8gY29tcGxldGUKKwkJCQkJCQkJICogdGhlIHRy YW5zYWN0aW9uIGJsb2NrIG9yIC0xICovCisKKwkvKgorCSAqIEZvciBub24tZW1wdHkgc3ViY29t bWFuZHMgb2YgdGhlIGNvbXBvdW5kIFNRTCBjb21tYW5kIChub3QgdXNlZCBmb3IgbWV0YQorCSAq IGNvbW1hbmRzKToKKwkgKi8KKwlpbnQJCQludW1fc3ViY21kczsJLyogbnVtYmVyIG9mIG5vbi1l bXB0eSBzdWJjb21tYW5kczsgMSBpZiB0aGUKKwkJCQkJCQkJICogY29tbWFuZCBpcyBub3QgY29t cG91bmQgKi8KKwlTdWJjb21tYW5kICpzdWJjbWQ7CisJaW50CQkJZmlyc3RfdHhfYmxvY2tfYmVn aW47CS8qIHRoZSBudW1iZXIgb2YgdGhlIGZpcnN0IG5vbi1lbXB0eQorCQkJCQkJCQkJCSAqIHN1 YmNvbW1hbmQgdGhhdCBzeW50YWN0aWNhbGx5IHN0YXJ0cworCQkJCQkJCQkJCSAqIHRoZSB0cmFu c2FjdGlvbiBibG9jayBvciAtMSAqLwogfSBDb21tYW5kOwogCiB0eXBlZGVmIHN0cnVjdCBQYXJz ZWRTY3JpcHQKQEAgLTQzOSw2ICs2MDMsNyBAQCBzdGF0aWMgaW50CW51bV9jb21tYW5kcyA9IDA7 CS8qIHRvdGFsIG51bWJlciBvZiBDb21tYW5kIHN0cnVjdHMgKi8KIHN0YXRpYyBpbnQ2NCB0b3Rh bF93ZWlnaHQgPSAwOwogCiBzdGF0aWMgaW50CWRlYnVnID0gMDsJCQkvKiBkZWJ1ZyBmbGFnICov CitzdGF0aWMgaW50CWRlYnVnX2ZhaWxzID0gMDsJLyogZGVidWcgZmxhZyBmb3IgZmFpbHVyZXMg YW5kIGVycm9ycyAqLwogCiAvKiBCdWlsdGluIHRlc3Qgc2NyaXB0cyAqLwogdHlwZWRlZiBzdHJ1 Y3QgQnVpbHRpblNjcmlwdApAQCAtNDg2LDYgKzY1MSwzNCBAQCBzdGF0aWMgY29uc3QgQnVpbHRp blNjcmlwdCBidWlsdGluX3NjcmlwdFtdID0KIAl9CiB9OwogCisvKgorICogRGF0YSBzdHJ1Y3R1 cmUgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHZhcmlvdXMgdHlwZXMgb2YgZmFpbHVyZXMuCisgKi8K K3R5cGVkZWYgc3RydWN0IEZhaWx1cmVTdGF0dXNQcm9wZXJ0aWVzCit7CisJY29uc3QgY2hhciAq ZmFpbHVyZV9zdGF0dXNfc3RyOwkvKiBOVUxMIGlmIG5vdCByZXRyaWFibGUgKi8KKwljb25zdCBj aGFyICplcnJvcl9zdGF0dXNfc3RyOworfSBGYWlsdXJlU3RhdHVzUHJvcGVydGllczsKKworc3Rh dGljIGNvbnN0IEZhaWx1cmVTdGF0dXNQcm9wZXJ0aWVzIEZBSUxVUkVfU1RBVFVTW10gPQorewor CXtOVUxMLCBOVUxMfSwJCQkJLyogTk9fRkFJTFVSRSAqLworCXtOVUxMLCBOVUxMfSwJCQkJLyog TUVUQV9DT01NQU5EX0ZBSUxVUkUgKi8KKwl7CQkJCQkJCS8qIFNFUklBTElaQVRJT05fRkFJTFVS RSAqLworCQkiYSBzZXJpYWxpemF0aW9uIGZhaWx1cmUiLAorCQkiYSBzZXJpYWxpemF0aW9uIGVy cm9yIgorCX0sCisJewkJCQkJCQkvKiBERUFETE9DS19GQUlMVVJFICovCisJCSJhIGRlYWRsb2Nr IGZhaWx1cmUiLAorCQkiYSBkZWFkbG9jayBlcnJvciIKKwl9LAorCXsJCQkJCQkJLyogSU5fRkFJ TEVEX1NRTF9UUkFOU0FDVElPTiAqLworCQlOVUxMLAorCQkiYW4gZXJyb3IgXCJpbiBmYWlsZWQg U1FMIHRyYW5zYWN0aW9uXCIiCisJfSwKKwl7TlVMTCwgTlVMTH0JCQkJLyogQU5PVEhFUl9GQUlM VVJFICovCit9OworCiAKIC8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KIHN0YXRpYyB2b2lkIHNl dEludFZhbHVlKFBnQmVuY2hWYWx1ZSAqcHYsIGludDY0IGl2YWwpOwpAQCAtNTQ3LDE1ICs3NDAs MTcgQEAgdXNhZ2Uodm9pZCkKIAkJICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3Rv Y29sIGZvciBzdWJtaXR0aW5nIHF1ZXJpZXMgKGRlZmF1bHQ6IHNpbXBsZSlcbiIKIAkJICAgIiAg LW4sIC0tbm8tdmFjdXVtICAgICAgICAgIGRvIG5vdCBydW4gVkFDVVVNIGJlZm9yZSB0ZXN0c1xu IgogCQkgICAiICAtUCwgLS1wcm9ncmVzcz1OVU0gICAgICAgc2hvdyB0aHJlYWQgcHJvZ3Jlc3Mg cmVwb3J0IGV2ZXJ5IE5VTSBzZWNvbmRzXG4iCi0JCSAgICIgIC1yLCAtLXJlcG9ydC1sYXRlbmNp ZXMgICByZXBvcnQgYXZlcmFnZSBsYXRlbmN5IHBlciBjb21tYW5kXG4iCisJCSAgICIgIC1yLCAt LXJlcG9ydC1wZXItY29tbWFuZCByZXBvcnQgbGF0ZW5jaWVzLCBlcnJvcnMgYW5kIHJldHJpZXMg cGVyIGNvbW1hbmRcbiIKIAkJICAgIiAgLVIsIC0tcmF0ZT1OVU0gICAgICAgICAgIHRhcmdldCBy YXRlIGluIHRyYW5zYWN0aW9ucyBwZXIgc2Vjb25kXG4iCiAJCSAgICIgIC1zLCAtLXNjYWxlPU5V TSAgICAgICAgICByZXBvcnQgdGhpcyBzY2FsZSBmYWN0b3IgaW4gb3V0cHV0XG4iCiAJCSAgICIg IC10LCAtLXRyYW5zYWN0aW9ucz1OVU0gICBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIGVhY2ggY2xp ZW50IHJ1bnMgKGRlZmF1bHQ6IDEwKVxuIgogCQkgICAiICAtVCwgLS10aW1lPU5VTSAgICAgICAg ICAgZHVyYXRpb24gb2YgYmVuY2htYXJrIHRlc3QgaW4gc2Vjb25kc1xuIgogCQkgICAiICAtdiwg LS12YWN1dW0tYWxsICAgICAgICAgdmFjdXVtIGFsbCBmb3VyIHN0YW5kYXJkIHRhYmxlcyBiZWZv cmUgdGVzdHNcbiIKIAkJICAgIiAgLS1hZ2dyZWdhdGUtaW50ZXJ2YWw9TlVNIGFnZ3JlZ2F0ZSBk YXRhIG92ZXIgTlVNIHNlY29uZHNcbiIKKwkJICAgIiAgLS1kZWJ1Zy1mYWlscyAgICAgICAgICAg IHByaW50IGRlYnVnZ2luZyBvdXRwdXQgb25seSBmb3IgZmFpbHVyZXMgYW5kIGVycm9yc1xuIgog CQkgICAiICAtLWxvZy1wcmVmaXg9UFJFRklYICAgICAgcHJlZml4IGZvciB0cmFuc2FjdGlvbiB0 aW1lIGxvZyBmaWxlXG4iCiAJCSAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVs dDogXCJwZ2JlbmNoX2xvZ1wiKVxuIgorCQkgICAiICAtLW1heC10cmllcz1OVU0gICAgICAgICAg bWF4IG51bWJlciBvZiB0cmllcyB0byBydW4gdHJhbnNhY3Rpb24gKGRlZmF1bHQ6IDEpXG4iCiAJ CSAgICIgIC0tcHJvZ3Jlc3MtdGltZXN0YW1wICAgICB1c2UgVW5peCBlcG9jaCB0aW1lc3RhbXBz IGZvciBwcm9ncmVzc1xuIgogCQkgICAiICAtLXNhbXBsaW5nLXJhdGU9TlVNICAgICAgZnJhY3Rp b24gb2YgdHJhbnNhY3Rpb25zIHRvIGxvZyAoZS5nLiwgMC4wMSBmb3IgMSUlKVxuIgogCQkgICAi XG5Db21tb24gb3B0aW9uczpcbiIKQEAgLTY2Nyw3ICs4NjIsNyBAQCBnb3RkaWdpdHM6CiAKIC8q IHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yOiB1bmlmb3JtIGRpc3RyaWJ1dGlvbiBmcm9tIG1pbiB0 byBtYXggaW5jbHVzaXZlICovCiBzdGF0aWMgaW50NjQKLWdldHJhbmQoVFN0YXRlICp0aHJlYWQs IGludDY0IG1pbiwgaW50NjQgbWF4KQorZ2V0cmFuZCh1bnNpZ25lZCBzaG9ydCByYW5kb21fc3Rh dGVbM10sIGludDY0IG1pbiwgaW50NjQgbWF4KQogewogCS8qCiAJICogT2RkIGNvZGluZyBpcyBz byB0aGF0IG1pbiBhbmQgbWF4IGhhdmUgYXBwcm94aW1hdGVseSB0aGUgc2FtZSBjaGFuY2Ugb2YK QEAgLTY3OCw3ICs4NzMsNyBAQCBnZXRyYW5kKFRTdGF0ZSAqdGhyZWFkLCBpbnQ2NCBtaW4sIGlu dDY0IG1heCkKIAkgKiBwcm90ZWN0ZWQgYnkgYSBtdXRleCwgYW5kIHRoZXJlZm9yZSBhIGJvdHRs ZW5lY2sgb24gbWFjaGluZXMgd2l0aCBtYW55CiAJICogQ1BVcy4KIAkgKi8KLQlyZXR1cm4gbWlu ICsgKGludDY0KSAoKG1heCAtIG1pbiArIDEpICogcGdfZXJhbmQ0OCh0aHJlYWQtPnJhbmRvbV9z dGF0ZSkpOworCXJldHVybiBtaW4gKyAoaW50NjQpICgobWF4IC0gbWluICsgMSkgKiBwZ19lcmFu ZDQ4KHJhbmRvbV9zdGF0ZSkpOwogfQogCiAvKgpAQCAtNjg3LDcgKzg4Miw4IEBAIGdldHJhbmQo VFN0YXRlICp0aHJlYWQsIGludDY0IG1pbiwgaW50NjQgbWF4KQogICogdmFsdWUgaXMgZXhwKC1w YXJhbWV0ZXIpLgogICovCiBzdGF0aWMgaW50NjQKLWdldEV4cG9uZW50aWFsUmFuZChUU3RhdGUg KnRocmVhZCwgaW50NjQgbWluLCBpbnQ2NCBtYXgsIGRvdWJsZSBwYXJhbWV0ZXIpCitnZXRFeHBv bmVudGlhbFJhbmQodW5zaWduZWQgc2hvcnQgcmFuZG9tX3N0YXRlWzNdLCBpbnQ2NCBtaW4sIGlu dDY0IG1heCwKKwkJCQkgICBkb3VibGUgcGFyYW1ldGVyKQogewogCWRvdWJsZQkJY3V0LAogCQkJ CXVuaWZvcm0sCkBAIC02OTcsNyArODkzLDcgQEAgZ2V0RXhwb25lbnRpYWxSYW5kKFRTdGF0ZSAq dGhyZWFkLCBpbnQ2NCBtaW4sIGludDY0IG1heCwgZG91YmxlIHBhcmFtZXRlcikKIAlBc3NlcnQo cGFyYW1ldGVyID4gMC4wKTsKIAljdXQgPSBleHAoLXBhcmFtZXRlcik7CiAJLyogZXJhbmQgaW4g WzAsIDEpLCB1bmlmb3JtIGluICgwLCAxXSAqLwotCXVuaWZvcm0gPSAxLjAgLSBwZ19lcmFuZDQ4 KHRocmVhZC0+cmFuZG9tX3N0YXRlKTsKKwl1bmlmb3JtID0gMS4wIC0gcGdfZXJhbmQ0OChyYW5k b21fc3RhdGUpOwogCiAJLyoKIAkgKiBpbm5lciBleHByZXNzaW9uIGluIChjdXQsIDFdIChpZiBw YXJhbWV0ZXIgPiAwKSwgcmFuZCBpbiBbMCwgMSkKQEAgLTcxMCw3ICs5MDYsOCBAQCBnZXRFeHBv bmVudGlhbFJhbmQoVFN0YXRlICp0aHJlYWQsIGludDY0IG1pbiwgaW50NjQgbWF4LCBkb3VibGUg cGFyYW1ldGVyKQogCiAvKiByYW5kb20gbnVtYmVyIGdlbmVyYXRvcjogZ2F1c3NpYW4gZGlzdHJp YnV0aW9uIGZyb20gbWluIHRvIG1heCBpbmNsdXNpdmUgKi8KIHN0YXRpYyBpbnQ2NAotZ2V0R2F1 c3NpYW5SYW5kKFRTdGF0ZSAqdGhyZWFkLCBpbnQ2NCBtaW4sIGludDY0IG1heCwgZG91YmxlIHBh cmFtZXRlcikKK2dldEdhdXNzaWFuUmFuZCh1bnNpZ25lZCBzaG9ydCByYW5kb21fc3RhdGVbM10s IGludDY0IG1pbiwgaW50NjQgbWF4LAorCQkJCWRvdWJsZSBwYXJhbWV0ZXIpCiB7CiAJZG91Ymxl CQlzdGRldjsKIAlkb3VibGUJCXJhbmQ7CkBAIC03MzgsOCArOTM1LDggQEAgZ2V0R2F1c3NpYW5S YW5kKFRTdGF0ZSAqdGhyZWFkLCBpbnQ2NCBtaW4sIGludDY0IG1heCwgZG91YmxlIHBhcmFtZXRl cikKIAkJICogYXJlIGV4cGVjdGVkIGluICgwLCAxXSAoc2VlCiAJCSAqIGh0dHA6Ly9lbi53aWtp cGVkaWEub3JnL3dpa2kvQm94X211bGxlcikKIAkJICovCi0JCWRvdWJsZQkJcmFuZDEgPSAxLjAg LSBwZ19lcmFuZDQ4KHRocmVhZC0+cmFuZG9tX3N0YXRlKTsKLQkJZG91YmxlCQlyYW5kMiA9IDEu MCAtIHBnX2VyYW5kNDgodGhyZWFkLT5yYW5kb21fc3RhdGUpOworCQlkb3VibGUJCXJhbmQxID0g MS4wIC0gcGdfZXJhbmQ0OChyYW5kb21fc3RhdGUpOworCQlkb3VibGUJCXJhbmQyID0gMS4wIC0g cGdfZXJhbmQ0OChyYW5kb21fc3RhdGUpOwogCiAJCS8qIEJveC1NdWxsZXIgYmFzaWMgZm9ybSB0 cmFuc2Zvcm0gKi8KIAkJZG91YmxlCQl2YXJfc3FydCA9IHNxcnQoLTIuMCAqIGxvZyhyYW5kMSkp OwpAQCAtNzY2LDcgKzk2Myw3IEBAIGdldEdhdXNzaWFuUmFuZChUU3RhdGUgKnRocmVhZCwgaW50 NjQgbWluLCBpbnQ2NCBtYXgsIGRvdWJsZSBwYXJhbWV0ZXIpCiAgKiB3aWxsIGFwcHJveGltYXRl IGEgUG9pc3NvbiBkaXN0cmlidXRpb24gY2VudGVyZWQgb24gdGhlIGdpdmVuIHZhbHVlLgogICov CiBzdGF0aWMgaW50NjQKLWdldFBvaXNzb25SYW5kKFRTdGF0ZSAqdGhyZWFkLCBpbnQ2NCBjZW50 ZXIpCitnZXRQb2lzc29uUmFuZCh1bnNpZ25lZCBzaG9ydCByYW5kb21fc3RhdGVbM10sIGludDY0 IGNlbnRlcikKIHsKIAkvKgogCSAqIFVzZSBpbnZlcnNlIHRyYW5zZm9ybSBzYW1wbGluZyB0byBn ZW5lcmF0ZSBhIHZhbHVlID4gMCwgc3VjaCB0aGF0IHRoZQpAQCAtNzc1LDcgKzk3Miw3IEBAIGdl dFBvaXNzb25SYW5kKFRTdGF0ZSAqdGhyZWFkLCBpbnQ2NCBjZW50ZXIpCiAJZG91YmxlCQl1bmlm b3JtOwogCiAJLyogZXJhbmQgaW4gWzAsIDEpLCB1bmlmb3JtIGluICgwLCAxXSAqLwotCXVuaWZv cm0gPSAxLjAgLSBwZ19lcmFuZDQ4KHRocmVhZC0+cmFuZG9tX3N0YXRlKTsKKwl1bmlmb3JtID0g MS4wIC0gcGdfZXJhbmQ0OChyYW5kb21fc3RhdGUpOwogCiAJcmV0dXJuIChpbnQ2NCkgKC1sb2co dW5pZm9ybSkgKiAoKGRvdWJsZSkgY2VudGVyKSArIDAuNSk7CiB9CkBAIC04NTMsNyArMTA1MCw3 IEBAIHppcGZGaW5kT3JDcmVhdGVDYWNoZUNlbGwoWmlwZkNhY2hlICogY2FjaGUsIGludDY0IG4s IGRvdWJsZSBzKQogICogTHVjIERldnJveWUsIHAuIDU1MC01NTEsIFNwcmluZ2VyIDE5ODYuCiAg Ki8KIHN0YXRpYyBpbnQ2NAotY29tcHV0ZUl0ZXJhdGl2ZVppcGZpYW4oVFN0YXRlICp0aHJlYWQs IGludDY0IG4sIGRvdWJsZSBzKQorY29tcHV0ZUl0ZXJhdGl2ZVppcGZpYW4odW5zaWduZWQgc2hv cnQgcmFuZG9tX3N0YXRlWzNdLCBpbnQ2NCBuLCBkb3VibGUgcykKIHsKIAlkb3VibGUJCWIgPSBw b3coMi4wLCBzIC0gMS4wKTsKIAlkb3VibGUJCXgsCkBAIC04NjQsOCArMTA2MSw4IEBAIGNvbXB1 dGVJdGVyYXRpdmVaaXBmaWFuKFRTdGF0ZSAqdGhyZWFkLCBpbnQ2NCBuLCBkb3VibGUgcykKIAl3 aGlsZSAodHJ1ZSkKIAl7CiAJCS8qIHJhbmRvbSB2YXJpYXRlcyAqLwotCQl1ID0gcGdfZXJhbmQ0 OCh0aHJlYWQtPnJhbmRvbV9zdGF0ZSk7Ci0JCXYgPSBwZ19lcmFuZDQ4KHRocmVhZC0+cmFuZG9t X3N0YXRlKTsKKwkJdSA9IHBnX2VyYW5kNDgocmFuZG9tX3N0YXRlKTsKKwkJdiA9IHBnX2VyYW5k NDgocmFuZG9tX3N0YXRlKTsKIAogCQl4ID0gZmxvb3IocG93KHUsIC0xLjAgLyAocyAtIDEuMCkp KTsKIApAQCAtODgzLDEwICsxMDgwLDExIEBAIGNvbXB1dGVJdGVyYXRpdmVaaXBmaWFuKFRTdGF0 ZSAqdGhyZWFkLCBpbnQ2NCBuLCBkb3VibGUgcykKICAqIEppbSBHcmF5IGV0IGFsLCBTSUdNT0Qg MTk5NAogICovCiBzdGF0aWMgaW50NjQKLWNvbXB1dGVIYXJtb25pY1ppcGZpYW4oVFN0YXRlICp0 aHJlYWQsIGludDY0IG4sIGRvdWJsZSBzKQorY29tcHV0ZUhhcm1vbmljWmlwZmlhbihUU3RhdGUg KnRocmVhZCwgdW5zaWduZWQgc2hvcnQgcmFuZG9tX3N0YXRlWzNdLCBpbnQ2NCBuLAorCQkJCQkg ICBkb3VibGUgcykKIHsKIAlaaXBmQ2VsbCAgICpjZWxsID0gemlwZkZpbmRPckNyZWF0ZUNhY2hl Q2VsbCgmdGhyZWFkLT56aXBmX2NhY2hlLCBuLCBzKTsKLQlkb3VibGUJCXVuaWZvcm0gPSBwZ19l cmFuZDQ4KHRocmVhZC0+cmFuZG9tX3N0YXRlKTsKKwlkb3VibGUJCXVuaWZvcm0gPSBwZ19lcmFu ZDQ4KHJhbmRvbV9zdGF0ZSk7CiAJZG91YmxlCQl1eiA9IHVuaWZvcm0gKiBjZWxsLT5oYXJtb25p Y247CiAKIAlpZiAodXogPCAxLjApCkBAIC04OTgsNyArMTA5Niw4IEBAIGNvbXB1dGVIYXJtb25p Y1ppcGZpYW4oVFN0YXRlICp0aHJlYWQsIGludDY0IG4sIGRvdWJsZSBzKQogCiAvKiByYW5kb20g bnVtYmVyIGdlbmVyYXRvcjogemlwZmlhbiBkaXN0cmlidXRpb24gZnJvbSBtaW4gdG8gbWF4IGlu Y2x1c2l2ZSAqLwogc3RhdGljIGludDY0Ci1nZXRaaXBmaWFuUmFuZChUU3RhdGUgKnRocmVhZCwg aW50NjQgbWluLCBpbnQ2NCBtYXgsIGRvdWJsZSBzKQorZ2V0WmlwZmlhblJhbmQoVFN0YXRlICp0 aHJlYWQsIHVuc2lnbmVkIHNob3J0IHJhbmRvbV9zdGF0ZVszXSwgaW50NjQgbWluLAorCQkJICAg aW50NjQgbWF4LCBkb3VibGUgcykKIHsKIAlpbnQ2NAkJbiA9IG1heCAtIG1pbiArIDE7CiAKQEAg LTkwNyw4ICsxMTA2LDggQEAgZ2V0WmlwZmlhblJhbmQoVFN0YXRlICp0aHJlYWQsIGludDY0IG1p biwgaW50NjQgbWF4LCBkb3VibGUgcykKIAogCiAJcmV0dXJuIG1pbiAtIDEgKyAoKHMgPiAxKQot CQkJCQkgID8gY29tcHV0ZUl0ZXJhdGl2ZVppcGZpYW4odGhyZWFkLCBuLCBzKQotCQkJCQkgIDog Y29tcHV0ZUhhcm1vbmljWmlwZmlhbih0aHJlYWQsIG4sIHMpKTsKKwkJCQkJICA/IGNvbXB1dGVJ dGVyYXRpdmVaaXBmaWFuKHJhbmRvbV9zdGF0ZSwgbiwgcykKKwkJCQkJICA6IGNvbXB1dGVIYXJt b25pY1ppcGZpYW4odGhyZWFkLCByYW5kb21fc3RhdGUsIG4sIHMpKTsKIH0KIAogLyoKQEAgLTk2 MCw2ICsxMTU5LDEwIEBAIGluaXRTdGF0cyhTdGF0c0RhdGEgKnNkLCB0aW1lX3Qgc3RhcnRfdGlt ZSkKIAlzZC0+c3RhcnRfdGltZSA9IHN0YXJ0X3RpbWU7CiAJc2QtPmNudCA9IDA7CiAJc2QtPnNr aXBwZWQgPSAwOworCXNkLT5yZXRyaWVzID0gMDsKKwlzZC0+cmV0cmllZCA9IDA7CisJc2QtPmVy cm9ycyA9IDA7CisJc2QtPmVycm9yc19pbl9mYWlsZWRfdHggPSAwOwogCWluaXRTaW1wbGVTdGF0 cygmc2QtPmxhdGVuY3kpOwogCWluaXRTaW1wbGVTdGF0cygmc2QtPmxhZyk7CiB9CkBAIC05Njgs NyArMTE3MSw4IEBAIGluaXRTdGF0cyhTdGF0c0RhdGEgKnNkLCB0aW1lX3Qgc3RhcnRfdGltZSkK ICAqIEFjY3VtdWxhdGUgb25lIGFkZGl0aW9uYWwgaXRlbSBpbnRvIHRoZSBnaXZlbiBzdGF0cyBv YmplY3QuCiAgKi8KIHN0YXRpYyB2b2lkCi1hY2N1bVN0YXRzKFN0YXRzRGF0YSAqc3RhdHMsIGJv b2wgc2tpcHBlZCwgZG91YmxlIGxhdCwgZG91YmxlIGxhZykKK2FjY3VtU3RhdHMoU3RhdHNEYXRh ICpzdGF0cywgYm9vbCBza2lwcGVkLCBib29sIGVycm9yLCBkb3VibGUgbGF0LCBkb3VibGUgbGFn LAorCQkgICBib29sIGVycm9yX25vdF9pbl9mYWlsZWRfdHgsIGludDY0IHJldHJpZXMpCiB7CiAJ c3RhdHMtPmNudCsrOwogCkBAIC05NzcsNiArMTE4MSwxMSBAQCBhY2N1bVN0YXRzKFN0YXRzRGF0 YSAqc3RhdHMsIGJvb2wgc2tpcHBlZCwgZG91YmxlIGxhdCwgZG91YmxlIGxhZykKIAkJLyogbm8g bGF0ZW5jeSB0byByZWNvcmQgb24gc2tpcHBlZCB0cmFuc2FjdGlvbnMgKi8KIAkJc3RhdHMtPnNr aXBwZWQrKzsKIAl9CisJZWxzZSBpZiAoZXJyb3IpCisJeworCQkvKiBubyBsYXRlbmN5IHRvIHJl Y29yZCBvbiBmYWlsZWQgdHJhbnNhY3Rpb25zICovCisJCXN0YXRzLT5lcnJvcnMrKzsKKwl9CiAJ ZWxzZQogCXsKIAkJYWRkVG9TaW1wbGVTdGF0cygmc3RhdHMtPmxhdGVuY3ksIGxhdCk7CkBAIC05 ODUsNiArMTE5NCwxMyBAQCBhY2N1bVN0YXRzKFN0YXRzRGF0YSAqc3RhdHMsIGJvb2wgc2tpcHBl ZCwgZG91YmxlIGxhdCwgZG91YmxlIGxhZykKIAkJaWYgKHRocm90dGxlX2RlbGF5KQogCQkJYWRk VG9TaW1wbGVTdGF0cygmc3RhdHMtPmxhZywgbGFnKTsKIAl9CisKKwlpZiAoZXJyb3IgJiYgIWVy cm9yX25vdF9pbl9mYWlsZWRfdHgpCisJCXN0YXRzLT5lcnJvcnNfaW5fZmFpbGVkX3R4Kys7CisK KwlzdGF0cy0+cmV0cmllcyArPSByZXRyaWVzOworCWlmIChyZXRyaWVzID4gMCkKKwkJc3RhdHMt PnJldHJpZWQrKzsKIH0KIAogLyogY2FsbCBQUWV4ZWMoKSBhbmQgZXhpdCgpIG9uIGZhaWx1cmUg Ki8KQEAgLTExMTAsMzkgKzEzMjYsMzkgQEAgY29tcGFyZVZhcmlhYmxlTmFtZXMoY29uc3Qgdm9p ZCAqdjEsIGNvbnN0IHZvaWQgKnYyKQogCiAvKiBMb2NhdGUgYSB2YXJpYWJsZSBieSBuYW1lOyBy ZXR1cm5zIE5VTEwgaWYgdW5rbm93biAqLwogc3RhdGljIFZhcmlhYmxlICoKLWxvb2t1cFZhcmlh YmxlKENTdGF0ZSAqc3QsIGNoYXIgKm5hbWUpCitsb29rdXBWYXJpYWJsZShWYXJpYWJsZXMgKnZh cmlhYmxlcywgY2hhciAqbmFtZSkKIHsKIAlWYXJpYWJsZQlrZXk7CiAKIAkvKiBPbiBzb21lIHZl cnNpb25zIG9mIFNvbGFyaXMsIGJzZWFyY2ggb2YgemVybyBpdGVtcyBkdW1wcyBjb3JlICovCi0J aWYgKHN0LT5udmFyaWFibGVzIDw9IDApCisJaWYgKHZhcmlhYmxlcy0+bnZhcmlhYmxlcyA8PSAw KQogCQlyZXR1cm4gTlVMTDsKIAogCS8qIFNvcnQgaWYgd2UgaGF2ZSB0byAqLwotCWlmICghc3Qt PnZhcnNfc29ydGVkKQorCWlmICghdmFyaWFibGVzLT52YXJzX3NvcnRlZCkKIAl7Ci0JCXFzb3J0 KCh2b2lkICopIHN0LT52YXJpYWJsZXMsIHN0LT5udmFyaWFibGVzLCBzaXplb2YoVmFyaWFibGUp LAotCQkJICBjb21wYXJlVmFyaWFibGVOYW1lcyk7Ci0JCXN0LT52YXJzX3NvcnRlZCA9IHRydWU7 CisJCXFzb3J0KCh2b2lkICopIHZhcmlhYmxlcy0+YXJyYXksIHZhcmlhYmxlcy0+bnZhcmlhYmxl cywKKwkJCSAgc2l6ZW9mKFZhcmlhYmxlKSwgY29tcGFyZVZhcmlhYmxlTmFtZXMpOworCQl2YXJp YWJsZXMtPnZhcnNfc29ydGVkID0gdHJ1ZTsKIAl9CiAKIAkvKiBOb3cgd2UgY2FuIHNlYXJjaCAq LwogCWtleS5uYW1lID0gbmFtZTsKIAlyZXR1cm4gKFZhcmlhYmxlICopIGJzZWFyY2goKHZvaWQg KikgJmtleSwKLQkJCQkJCQkJKHZvaWQgKikgc3QtPnZhcmlhYmxlcywKLQkJCQkJCQkJc3QtPm52 YXJpYWJsZXMsCisJCQkJCQkJCSh2b2lkICopIHZhcmlhYmxlcy0+YXJyYXksCisJCQkJCQkJCXZh cmlhYmxlcy0+bnZhcmlhYmxlcywKIAkJCQkJCQkJc2l6ZW9mKFZhcmlhYmxlKSwKIAkJCQkJCQkJ Y29tcGFyZVZhcmlhYmxlTmFtZXMpOwogfQogCiAvKiBHZXQgdGhlIHZhbHVlIG9mIGEgdmFyaWFi bGUsIGluIHN0cmluZyBmb3JtOyByZXR1cm5zIE5VTEwgaWYgdW5rbm93biAqLwogc3RhdGljIGNo YXIgKgotZ2V0VmFyaWFibGUoQ1N0YXRlICpzdCwgY2hhciAqbmFtZSkKK2dldFZhcmlhYmxlKFZh cmlhYmxlcyAqdmFyaWFibGVzLCBjaGFyICpuYW1lKQogewogCVZhcmlhYmxlICAgKnZhcjsKIAlj aGFyCQlzdHJpbmdmb3JtWzY0XTsKIAotCXZhciA9IGxvb2t1cFZhcmlhYmxlKHN0LCBuYW1lKTsK Kwl2YXIgPSBsb29rdXBWYXJpYWJsZSh2YXJpYWJsZXMsIG5hbWUpOwogCWlmICh2YXIgPT0gTlVM TCkKIAkJcmV0dXJuIE5VTEw7CQkJLyogbm90IGZvdW5kICovCiAKQEAgLTExODMsOSArMTM5OSwx MCBAQCBtYWtlVmFyaWFibGVOdW1lcmljKFZhcmlhYmxlICp2YXIpCiAKIAkJaWYgKHNzY2FuZih2 YXItPnZhbHVlLCAiJWxmJWMiLCAmZHYsICZ4cykgIT0gMSkKIAkJewotCQkJZnByaW50ZihzdGRl cnIsCi0JCQkJCSJtYWxmb3JtZWQgdmFyaWFibGUgXCIlc1wiIHZhbHVlOiBcIiVzXCJcbiIsCi0J CQkJCXZhci0+bmFtZSwgdmFyLT52YWx1ZSk7CisJCQlpZiAoZGVidWdfZmFpbHMpCisJCQkJZnBy aW50ZihzdGRlcnIsCisJCQkJCQkibWFsZm9ybWVkIHZhcmlhYmxlIFwiJXNcIiB2YWx1ZTogXCIl c1wiXG4iLAorCQkJCQkJdmFyLT5uYW1lLCB2YXItPnZhbHVlKTsKIAkJCXJldHVybiBmYWxzZTsK IAkJfQogCQlzZXREb3VibGVWYWx1ZSgmdmFyLT5udW1fdmFsdWUsIGR2KTsKQEAgLTEyMzQsMTEg KzE0NTEsMTIgQEAgdmFsaWRfdmFyaWFibGVfbmFtZShjb25zdCBjaGFyICpuYW1lKQogICogUmV0 dXJucyBOVUxMIG9uIGZhaWx1cmUgKGJhZCBuYW1lKS4KICAqLwogc3RhdGljIFZhcmlhYmxlICoK LWxvb2t1cENyZWF0ZVZhcmlhYmxlKENTdGF0ZSAqc3QsIGNvbnN0IGNoYXIgKmNvbnRleHQsIGNo YXIgKm5hbWUpCitsb29rdXBDcmVhdGVWYXJpYWJsZShWYXJpYWJsZXMgKnZhcmlhYmxlcywgY29u c3QgY2hhciAqY29udGV4dCwgY2hhciAqbmFtZSwKKwkJCQkJIGJvb2wgd3JpdGVfbWVzc2FnZSkK IHsKIAlWYXJpYWJsZSAgICp2YXI7CiAKLQl2YXIgPSBsb29rdXBWYXJpYWJsZShzdCwgbmFtZSk7 CisJdmFyID0gbG9va3VwVmFyaWFibGUodmFyaWFibGVzLCBuYW1lKTsKIAlpZiAodmFyID09IE5V TEwpCiAJewogCQlWYXJpYWJsZSAgICpuZXd2YXJzOwpAQCAtMTI0OSwyOSArMTQ2NywzMCBAQCBs b29rdXBDcmVhdGVWYXJpYWJsZShDU3RhdGUgKnN0LCBjb25zdCBjaGFyICpjb250ZXh0LCBjaGFy ICpuYW1lKQogCQkgKi8KIAkJaWYgKCF2YWxpZF92YXJpYWJsZV9uYW1lKG5hbWUpKQogCQl7Ci0J CQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBpbnZhbGlkIHZhcmlhYmxlIG5hbWU6IFwiJXNcIlxuIiwK LQkJCQkJY29udGV4dCwgbmFtZSk7CisJCQlpZiAod3JpdGVfbWVzc2FnZSB8fCBkZWJ1Z19mYWls cykKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBpbnZhbGlkIHZhcmlhYmxlIG5hbWU6IFwiJXNc IlxuIiwKKwkJCQkJCWNvbnRleHQsIG5hbWUpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KIAogCQkv KiBDcmVhdGUgdmFyaWFibGUgYXQgdGhlIGVuZCBvZiB0aGUgYXJyYXkgKi8KLQkJaWYgKHN0LT52 YXJpYWJsZXMpCi0JCQluZXd2YXJzID0gKFZhcmlhYmxlICopIHBnX3JlYWxsb2Moc3QtPnZhcmlh YmxlcywKLQkJCQkJCQkJCQkJICAoc3QtPm52YXJpYWJsZXMgKyAxKSAqIHNpemVvZihWYXJpYWJs ZSkpOworCQlpZiAodmFyaWFibGVzLT5hcnJheSkKKwkJCW5ld3ZhcnMgPSAoVmFyaWFibGUgKikg cGdfcmVhbGxvYyh2YXJpYWJsZXMtPmFycmF5LAorCQkJCQkJCQkodmFyaWFibGVzLT5udmFyaWFi bGVzICsgMSkgKiBzaXplb2YoVmFyaWFibGUpKTsKIAkJZWxzZQogCQkJbmV3dmFycyA9IChWYXJp YWJsZSAqKSBwZ19tYWxsb2Moc2l6ZW9mKFZhcmlhYmxlKSk7CiAKLQkJc3QtPnZhcmlhYmxlcyA9 IG5ld3ZhcnM7CisJCXZhcmlhYmxlcy0+YXJyYXkgPSBuZXd2YXJzOwogCi0JCXZhciA9ICZuZXd2 YXJzW3N0LT5udmFyaWFibGVzXTsKKwkJdmFyID0gJm5ld3ZhcnNbdmFyaWFibGVzLT5udmFyaWFi bGVzXTsKIAogCQl2YXItPm5hbWUgPSBwZ19zdHJkdXAobmFtZSk7CiAJCXZhci0+dmFsdWUgPSBO VUxMOwogCQkvKiBjYWxsZXIgaXMgZXhwZWN0ZWQgdG8gaW5pdGlhbGl6ZSByZW1haW5pbmcgZmll bGRzICovCiAKLQkJc3QtPm52YXJpYWJsZXMrKzsKKwkJdmFyaWFibGVzLT5udmFyaWFibGVzKys7 CiAJCS8qIHdlIGRvbid0IHJlLXNvcnQgdGhlIGFycmF5IHRpbGwgd2UgaGF2ZSB0byAqLwotCQlz dC0+dmFyc19zb3J0ZWQgPSBmYWxzZTsKKwkJdmFyaWFibGVzLT52YXJzX3NvcnRlZCA9IGZhbHNl OwogCX0KIAogCXJldHVybiB2YXI7CkBAIC0xMjgwLDEyICsxNDk5LDEzIEBAIGxvb2t1cENyZWF0 ZVZhcmlhYmxlKENTdGF0ZSAqc3QsIGNvbnN0IGNoYXIgKmNvbnRleHQsIGNoYXIgKm5hbWUpCiAv KiBBc3NpZ24gYSBzdHJpbmcgdmFsdWUgdG8gYSB2YXJpYWJsZSwgY3JlYXRpbmcgaXQgaWYgbmVl ZCBiZSAqLwogLyogUmV0dXJucyBmYWxzZSBvbiBmYWlsdXJlIChiYWQgbmFtZSkgKi8KIHN0YXRp YyBib29sCi1wdXRWYXJpYWJsZShDU3RhdGUgKnN0LCBjb25zdCBjaGFyICpjb250ZXh0LCBjaGFy ICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3B1dFZhcmlhYmxlKFZhcmlhYmxlcyAqdmFyaWFi bGVzLCBjb25zdCBjaGFyICpjb250ZXh0LCBjaGFyICpuYW1lLAorCQkJY29uc3QgY2hhciAqdmFs dWUpCiB7CiAJVmFyaWFibGUgICAqdmFyOwogCWNoYXIJICAgKnZhbDsKIAotCXZhciA9IGxvb2t1 cENyZWF0ZVZhcmlhYmxlKHN0LCBjb250ZXh0LCBuYW1lKTsKKwl2YXIgPSBsb29rdXBDcmVhdGVW YXJpYWJsZSh2YXJpYWJsZXMsIGNvbnRleHQsIG5hbWUsIHRydWUpOwogCWlmICghdmFyKQogCQly ZXR1cm4gZmFsc2U7CiAKQEAgLTEzMDMsMTIgKzE1MjMsMTIgQEAgcHV0VmFyaWFibGUoQ1N0YXRl ICpzdCwgY29uc3QgY2hhciAqY29udGV4dCwgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUp CiAvKiBBc3NpZ24gYSBudW1lcmljIHZhbHVlIHRvIGEgdmFyaWFibGUsIGNyZWF0aW5nIGl0IGlm IG5lZWQgYmUgKi8KIC8qIFJldHVybnMgZmFsc2Ugb24gZmFpbHVyZSAoYmFkIG5hbWUpICovCiBz dGF0aWMgYm9vbAotcHV0VmFyaWFibGVOdW1iZXIoQ1N0YXRlICpzdCwgY29uc3QgY2hhciAqY29u dGV4dCwgY2hhciAqbmFtZSwKLQkJCQkgIGNvbnN0IFBnQmVuY2hWYWx1ZSAqdmFsdWUpCitwdXRW YXJpYWJsZU51bWJlcihWYXJpYWJsZXMgKnZhcmlhYmxlcywgY29uc3QgY2hhciAqY29udGV4dCwg Y2hhciAqbmFtZSwKKwkJCQkgIGNvbnN0IFBnQmVuY2hWYWx1ZSAqdmFsdWUsIGJvb2wgd3JpdGVf bWVzc2FnZSkKIHsKIAlWYXJpYWJsZSAgICp2YXI7CiAKLQl2YXIgPSBsb29rdXBDcmVhdGVWYXJp YWJsZShzdCwgY29udGV4dCwgbmFtZSk7CisJdmFyID0gbG9va3VwQ3JlYXRlVmFyaWFibGUodmFy aWFibGVzLCBjb250ZXh0LCBuYW1lLCB3cml0ZV9tZXNzYWdlKTsKIAlpZiAoIXZhcikKIAkJcmV0 dXJuIGZhbHNlOwogCkBAIC0xMzI0LDEyICsxNTQ0LDEzIEBAIHB1dFZhcmlhYmxlTnVtYmVyKENT dGF0ZSAqc3QsIGNvbnN0IGNoYXIgKmNvbnRleHQsIGNoYXIgKm5hbWUsCiAvKiBBc3NpZ24gYW4g aW50ZWdlciB2YWx1ZSB0byBhIHZhcmlhYmxlLCBjcmVhdGluZyBpdCBpZiBuZWVkIGJlICovCiAv KiBSZXR1cm5zIGZhbHNlIG9uIGZhaWx1cmUgKGJhZCBuYW1lKSAqLwogc3RhdGljIGJvb2wKLXB1 dFZhcmlhYmxlSW50KENTdGF0ZSAqc3QsIGNvbnN0IGNoYXIgKmNvbnRleHQsIGNoYXIgKm5hbWUs IGludDY0IHZhbHVlKQorcHV0VmFyaWFibGVJbnQoVmFyaWFibGVzICp2YXJpYWJsZXMsIGNvbnN0 IGNoYXIgKmNvbnRleHQsIGNoYXIgKm5hbWUsCisJCQkgICBpbnQ2NCB2YWx1ZSwgYm9vbCB3cml0 ZV9tZXNzYWdlKQogewogCVBnQmVuY2hWYWx1ZSB2YWw7CiAKIAlzZXRJbnRWYWx1ZSgmdmFsLCB2 YWx1ZSk7Ci0JcmV0dXJuIHB1dFZhcmlhYmxlTnVtYmVyKHN0LCBjb250ZXh0LCBuYW1lLCAmdmFs KTsKKwlyZXR1cm4gcHV0VmFyaWFibGVOdW1iZXIodmFyaWFibGVzLCBjb250ZXh0LCBuYW1lLCAm dmFsLCB3cml0ZV9tZXNzYWdlKTsKIH0KIAogLyoKQEAgLTEzODQsNyArMTYwNSw3IEBAIHJlcGxh Y2VWYXJpYWJsZShjaGFyICoqc3FsLCBjaGFyICpwYXJhbSwgaW50IGxlbiwgY2hhciAqdmFsdWUp CiB9CiAKIHN0YXRpYyBjaGFyICoKLWFzc2lnblZhcmlhYmxlcyhDU3RhdGUgKnN0LCBjaGFyICpz cWwpCithc3NpZ25WYXJpYWJsZXMoVmFyaWFibGVzICp2YXJpYWJsZXMsIGNoYXIgKnNxbCkKIHsK IAljaGFyCSAgICpwLAogCQkJICAgKm5hbWUsCkBAIC0xNDA1LDcgKzE2MjYsNyBAQCBhc3NpZ25W YXJpYWJsZXMoQ1N0YXRlICpzdCwgY2hhciAqc3FsKQogCQkJY29udGludWU7CiAJCX0KIAotCQl2 YWwgPSBnZXRWYXJpYWJsZShzdCwgbmFtZSk7CisJCXZhbCA9IGdldFZhcmlhYmxlKHZhcmlhYmxl cywgbmFtZSk7CiAJCWZyZWUobmFtZSk7CiAJCWlmICh2YWwgPT0gTlVMTCkKIAkJewpAQCAtMTQy MCwxMiArMTY0MSwxMyBAQCBhc3NpZ25WYXJpYWJsZXMoQ1N0YXRlICpzdCwgY2hhciAqc3FsKQog fQogCiBzdGF0aWMgdm9pZAotZ2V0UXVlcnlQYXJhbXMoQ1N0YXRlICpzdCwgY29uc3QgQ29tbWFu ZCAqY29tbWFuZCwgY29uc3QgY2hhciAqKnBhcmFtcykKK2dldFF1ZXJ5UGFyYW1zKFZhcmlhYmxl cyAqdmFyaWFibGVzLCBjb25zdCBDb21tYW5kICpjb21tYW5kLAorCQkJICAgY29uc3QgY2hhciAq KnBhcmFtcykKIHsKIAlpbnQJCQlpOwogCiAJZm9yIChpID0gMDsgaSA8IGNvbW1hbmQtPmFyZ2Mg LSAxOyBpKyspCi0JCXBhcmFtc1tpXSA9IGdldFZhcmlhYmxlKHN0LCBjb21tYW5kLT5hcmd2W2kg KyAxXSk7CisJCXBhcmFtc1tpXSA9IGdldFZhcmlhYmxlKHZhcmlhYmxlcywgY29tbWFuZC0+YXJn dltpICsgMV0pOwogfQogCiAvKiBnZXQgYSB2YWx1ZSBhcyBhbiBpbnQsIHRlbGwgaWYgdGhlcmUg aXMgYSBwcm9ibGVtICovCkBAIC0xNDQ0LDcgKzE2NjYsOCBAQCBjb2VyY2VUb0ludChQZ0JlbmNo VmFsdWUgKnB2YWwsIGludDY0ICppdmFsKQogCQlBc3NlcnQocHZhbC0+dHlwZSA9PSBQR0JUX0RP VUJMRSk7CiAJCWlmIChkdmFsIDwgUEdfSU5UNjRfTUlOIHx8IFBHX0lOVDY0X01BWCA8IGR2YWwp CiAJCXsKLQkJCWZwcmludGYoc3RkZXJyLCAiZG91YmxlIHRvIGludCBvdmVyZmxvdyBmb3IgJWZc biIsIGR2YWwpOworCQkJaWYgKGRlYnVnX2ZhaWxzKQorCQkJCWZwcmludGYoc3RkZXJyLCAiZG91 YmxlIHRvIGludCBvdmVyZmxvdyBmb3IgJWZcbiIsIGR2YWwpOwogCQkJcmV0dXJuIGZhbHNlOwog CQl9CiAJCSppdmFsID0gKGludDY0KSBkdmFsOwpAQCAtMTUwNSw4ICsxNzI4LDkgQEAgZXZhbEZ1 bmMoVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsCiAKIAlpZiAobCAhPSBOVUxMKQogCXsKLQkJ ZnByaW50ZihzdGRlcnIsCi0JCQkJInRvbyBtYW55IGZ1bmN0aW9uIGFyZ3VtZW50cywgbWF4aW11 bSBpcyAlZFxuIiwgTUFYX0ZBUkdTKTsKKwkJaWYgKGRlYnVnX2ZhaWxzKQorCQkJZnByaW50Zihz dGRlcnIsCisJCQkJCSJ0b28gbWFueSBmdW5jdGlvbiBhcmd1bWVudHMsIG1heGltdW0gaXMgJWRc biIsIE1BWF9GQVJHUyk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKQEAgLTE1ODYsNyArMTgxMCw4 IEBAIGV2YWxGdW5jKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LAogCQkJCQkJY2FzZSBQR0JF TkNIX01PRDoKIAkJCQkJCQlpZiAocmkgPT0gMCkKIAkJCQkJCQl7Ci0JCQkJCQkJCWZwcmludGYo c3RkZXJyLCAiZGl2aXNpb24gYnkgemVyb1xuIik7CisJCQkJCQkJCWlmIChkZWJ1Z19mYWlscykK KwkJCQkJCQkJCWZwcmludGYoc3RkZXJyLCAiZGl2aXNpb24gYnkgemVyb1xuIik7CiAJCQkJCQkJ CXJldHVybiBmYWxzZTsKIAkJCQkJCQl9CiAJCQkJCQkJLyogc3BlY2lhbCBoYW5kbGluZyBvZiAt MSBkaXZpc29yICovCkBAIC0xNTk3LDcgKzE4MjIsOSBAQCBldmFsRnVuYyhUU3RhdGUgKnRocmVh ZCwgQ1N0YXRlICpzdCwKIAkJCQkJCQkJCS8qIG92ZXJmbG93IGNoZWNrIChuZWVkZWQgZm9yIElO VDY0X01JTikgKi8KIAkJCQkJCQkJCWlmIChsaSA9PSBQR19JTlQ2NF9NSU4pCiAJCQkJCQkJCQl7 Ci0JCQkJCQkJCQkJZnByaW50ZihzdGRlcnIsICJiaWdpbnQgb3V0IG9mIHJhbmdlXG4iKTsKKwkJ CQkJCQkJCQlpZiAoZGVidWdfZmFpbHMpCisJCQkJCQkJCQkJCWZwcmludGYoc3RkZXJyLAorCQkJ CQkJCQkJCQkJCSJiaWdpbnQgb3V0IG9mIHJhbmdlXG4iKTsKIAkJCQkJCQkJCQlyZXR1cm4gZmFs c2U7CiAJCQkJCQkJCQl9CiAJCQkJCQkJCQllbHNlCkBAIC0xNzgzLDIwICsyMDEwLDIyIEBAIGV2 YWxGdW5jKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LAogCQkJCS8qIGNoZWNrIHJhbmRvbSBy YW5nZSAqLwogCQkJCWlmIChpbWluID4gaW1heCkKIAkJCQl7Ci0JCQkJCWZwcmludGYoc3RkZXJy LCAiZW1wdHkgcmFuZ2UgZ2l2ZW4gdG8gcmFuZG9tXG4iKTsKKwkJCQkJaWYgKGRlYnVnX2ZhaWxz KQorCQkJCQkJZnByaW50ZihzdGRlcnIsICJlbXB0eSByYW5nZSBnaXZlbiB0byByYW5kb21cbiIp OwogCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJfQogCQkJCWVsc2UgaWYgKGltYXggLSBpbWluIDwg MCB8fCAoaW1heCAtIGltaW4pICsgMSA8IDApCiAJCQkJewogCQkJCQkvKiBwcmV2ZW50IGludCBv dmVyZmxvd3MgaW4gcmFuZG9tIGZ1bmN0aW9ucyAqLwotCQkJCQlmcHJpbnRmKHN0ZGVyciwgInJh bmRvbSByYW5nZSBpcyB0b28gbGFyZ2VcbiIpOworCQkJCQlpZiAoZGVidWdfZmFpbHMpCisJCQkJ CQlmcHJpbnRmKHN0ZGVyciwgInJhbmRvbSByYW5nZSBpcyB0b28gbGFyZ2VcbiIpOwogCQkJCQly ZXR1cm4gZmFsc2U7CiAJCQkJfQogCiAJCQkJaWYgKGZ1bmMgPT0gUEdCRU5DSF9SQU5ET00pCiAJ CQkJewogCQkJCQlBc3NlcnQobmFyZ3MgPT0gMik7Ci0JCQkJCXNldEludFZhbHVlKHJldHZhbCwg Z2V0cmFuZCh0aHJlYWQsIGltaW4sIGltYXgpKTsKKwkJCQkJc2V0SW50VmFsdWUocmV0dmFsLCBn ZXRyYW5kKHN0LT5yYW5kb21fc3RhdGUsIGltaW4sIGltYXgpKTsKIAkJCQl9CiAJCQkJZWxzZQkJ CS8qIGdhdXNzaWFuICYgZXhwb25lbnRpYWwgKi8KIAkJCQl7CkBAIC0xODExLDM5ICsyMDQwLDQ1 IEBAIGV2YWxGdW5jKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LAogCQkJCQl7CiAJCQkJCQlp ZiAocGFyYW0gPCBNSU5fR0FVU1NJQU5fUEFSQU0pCiAJCQkJCQl7Ci0JCQkJCQkJZnByaW50Zihz dGRlcnIsCi0JCQkJCQkJCQkiZ2F1c3NpYW4gcGFyYW1ldGVyIG11c3QgYmUgYXQgbGVhc3QgJWYg IgotCQkJCQkJCQkJIihub3QgJWYpXG4iLCBNSU5fR0FVU1NJQU5fUEFSQU0sIHBhcmFtKTsKKwkJ CQkJCQlpZiAoZGVidWdfZmFpbHMpCisJCQkJCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkJCQkJ CSJnYXVzc2lhbiBwYXJhbWV0ZXIgbXVzdCBiZSBhdCBsZWFzdCAlZiAobm90ICVmKVxuIiwKKwkJ CQkJCQkJCQlNSU5fR0FVU1NJQU5fUEFSQU0sIHBhcmFtKTsKIAkJCQkJCQlyZXR1cm4gZmFsc2U7 CiAJCQkJCQl9CiAKIAkJCQkJCXNldEludFZhbHVlKHJldHZhbCwKLQkJCQkJCQkJCWdldEdhdXNz aWFuUmFuZCh0aHJlYWQsIGltaW4sIGltYXgsIHBhcmFtKSk7CisJCQkJCQkJCQlnZXRHYXVzc2lh blJhbmQoc3QtPnJhbmRvbV9zdGF0ZSwgaW1pbiwKKwkJCQkJCQkJCQkJCQlpbWF4LCBwYXJhbSkp OwogCQkJCQl9CiAJCQkJCWVsc2UgaWYgKGZ1bmMgPT0gUEdCRU5DSF9SQU5ET01fWklQRklBTikK IAkJCQkJewogCQkJCQkJaWYgKHBhcmFtIDw9IDAuMCB8fCBwYXJhbSA9PSAxLjAgfHwgcGFyYW0g PiBNQVhfWklQRklBTl9QQVJBTSkKIAkJCQkJCXsKLQkJCQkJCQlmcHJpbnRmKHN0ZGVyciwKLQkJ CQkJCQkJCSJ6aXBmaWFuIHBhcmFtZXRlciBtdXN0IGJlIGluIHJhbmdlICgwLCAxKSBVICgxLCAl ZF0iCi0JCQkJCQkJCQkiIChnb3QgJWYpXG4iLCBNQVhfWklQRklBTl9QQVJBTSwgcGFyYW0pOwor CQkJCQkJCWlmIChkZWJ1Z19mYWlscykKKwkJCQkJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCQkJ CQkJInppcGZpYW4gcGFyYW1ldGVyIG11c3QgYmUgaW4gcmFuZ2UgKDAsIDEpIFUgKDEsICVkXSAo Z290ICVmKVxuIiwKKwkJCQkJCQkJCQlNQVhfWklQRklBTl9QQVJBTSwgcGFyYW0pOwogCQkJCQkJ CXJldHVybiBmYWxzZTsKIAkJCQkJCX0KIAkJCQkJCXNldEludFZhbHVlKHJldHZhbCwKLQkJCQkJ CQkJCWdldFppcGZpYW5SYW5kKHRocmVhZCwgaW1pbiwgaW1heCwgcGFyYW0pKTsKKwkJCQkJCQkJ CWdldFppcGZpYW5SYW5kKHRocmVhZCwgc3QtPnJhbmRvbV9zdGF0ZSwKKwkJCQkJCQkJCQkJCSAg IGltaW4sIGltYXgsIHBhcmFtKSk7CiAJCQkJCX0KIAkJCQkJZWxzZQkJLyogZXhwb25lbnRpYWwg Ki8KIAkJCQkJewogCQkJCQkJaWYgKHBhcmFtIDw9IDAuMCkKIAkJCQkJCXsKLQkJCQkJCQlmcHJp bnRmKHN0ZGVyciwKLQkJCQkJCQkJCSJleHBvbmVudGlhbCBwYXJhbWV0ZXIgbXVzdCBiZSBncmVh dGVyIHRoYW4gemVybyIKLQkJCQkJCQkJCSIgKGdvdCAlZilcbiIsIHBhcmFtKTsKKwkJCQkJCQlp ZiAoZGVidWdfZmFpbHMpCisJCQkJCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkJCQkJCSJleHBv bmVudGlhbCBwYXJhbWV0ZXIgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyAoZ290ICVmKVxuIiwK KwkJCQkJCQkJCQlwYXJhbSk7CiAJCQkJCQkJcmV0dXJuIGZhbHNlOwogCQkJCQkJfQogCiAJCQkJ CQlzZXRJbnRWYWx1ZShyZXR2YWwsCi0JCQkJCQkJCQlnZXRFeHBvbmVudGlhbFJhbmQodGhyZWFk LCBpbWluLCBpbWF4LCBwYXJhbSkpOworCQkJCQkJCQkJZ2V0RXhwb25lbnRpYWxSYW5kKHN0LT5y YW5kb21fc3RhdGUsIGltaW4sCisJCQkJCQkJCQkJCQkJICAgaW1heCwgcGFyYW0pKTsKIAkJCQkJ fQogCQkJCX0KIApAQCAtMTg3OSwxMCArMjExNCwxMSBAQCBldmFsdWF0ZUV4cHIoVFN0YXRlICp0 aHJlYWQsIENTdGF0ZSAqc3QsIFBnQmVuY2hFeHByICpleHByLCBQZ0JlbmNoVmFsdWUgKnJldHZh bAogCQkJewogCQkJCVZhcmlhYmxlICAgKnZhcjsKIAotCQkJCWlmICgodmFyID0gbG9va3VwVmFy aWFibGUoc3QsIGV4cHItPnUudmFyaWFibGUudmFybmFtZSkpID09IE5VTEwpCisJCQkJaWYgKCh2 YXIgPSBsb29rdXBWYXJpYWJsZSgmc3QtPnZhcmlhYmxlcywgZXhwci0+dS52YXJpYWJsZS52YXJu YW1lKSkgPT0gTlVMTCkKIAkJCQl7Ci0JCQkJCWZwcmludGYoc3RkZXJyLCAidW5kZWZpbmVkIHZh cmlhYmxlIFwiJXNcIlxuIiwKLQkJCQkJCQlleHByLT51LnZhcmlhYmxlLnZhcm5hbWUpOworCQkJ CQlpZiAoZGVidWdfZmFpbHMpCisJCQkJCQlmcHJpbnRmKHN0ZGVyciwgInVuZGVmaW5lZCB2YXJp YWJsZSBcIiVzXCJcbiIsCisJCQkJCQkJCWV4cHItPnUudmFyaWFibGUudmFybmFtZSk7CiAJCQkJ CXJldHVybiBmYWxzZTsKIAkJCQl9CiAKQEAgLTE5MzUsNyArMjE3MSw3IEBAIGdldE1ldGFDb21t YW5kKGNvbnN0IGNoYXIgKmNtZCkKICAqIFJldHVybiB0cnVlIGlmIHN1Y2NlZWRlZCwgb3IgZmFs c2Ugb24gZXJyb3IuCiAgKi8KIHN0YXRpYyBib29sCi1ydW5TaGVsbENvbW1hbmQoQ1N0YXRlICpz dCwgY2hhciAqdmFyaWFibGUsIGNoYXIgKiphcmd2LCBpbnQgYXJnYykKK3J1blNoZWxsQ29tbWFu ZChWYXJpYWJsZXMgKnZhcmlhYmxlcywgY2hhciAqdmFyaWFibGUsIGNoYXIgKiphcmd2LCBpbnQg YXJnYykKIHsKIAljaGFyCQljb21tYW5kW1NIRUxMX0NPTU1BTkRfU0laRV07CiAJaW50CQkJaSwK QEAgLTE5NjYsMTcgKzIyMDIsMTkgQEAgcnVuU2hlbGxDb21tYW5kKENTdGF0ZSAqc3QsIGNoYXIg KnZhcmlhYmxlLCBjaGFyICoqYXJndiwgaW50IGFyZ2MpCiAJCXsKIAkJCWFyZyA9IGFyZ3ZbaV0g KyAxOwkvKiBhIHN0cmluZyBsaXRlcmFsIHN0YXJ0aW5nIHdpdGggY29sb25zICovCiAJCX0KLQkJ ZWxzZSBpZiAoKGFyZyA9IGdldFZhcmlhYmxlKHN0LCBhcmd2W2ldICsgMSkpID09IE5VTEwpCisJ CWVsc2UgaWYgKChhcmcgPSBnZXRWYXJpYWJsZSh2YXJpYWJsZXMsIGFyZ3ZbaV0gKyAxKSkgPT0g TlVMTCkKIAkJewotCQkJZnByaW50ZihzdGRlcnIsICIlczogdW5kZWZpbmVkIHZhcmlhYmxlIFwi JXNcIlxuIiwKLQkJCQkJYXJndlswXSwgYXJndltpXSk7CisJCQlpZiAoZGVidWdfZmFpbHMpCisJ CQkJZnByaW50ZihzdGRlcnIsICIlczogdW5kZWZpbmVkIHZhcmlhYmxlIFwiJXNcIlxuIiwKKwkJ CQkJCWFyZ3ZbMF0sIGFyZ3ZbaV0pOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAKIAkJYXJnbGVu ID0gc3RybGVuKGFyZyk7CiAJCWlmIChsZW4gKyBhcmdsZW4gKyAoaSA+IDAgPyAxIDogMCkgPj0g U0hFTExfQ09NTUFORF9TSVpFIC0gMSkKIAkJewotCQkJZnByaW50ZihzdGRlcnIsICIlczogc2hl bGwgY29tbWFuZCBpcyB0b28gbG9uZ1xuIiwgYXJndlswXSk7CisJCQlpZiAoZGVidWdfZmFpbHMp CisJCQkJZnByaW50ZihzdGRlcnIsICIlczogc2hlbGwgY29tbWFuZCBpcyB0b28gbG9uZ1xuIiwg YXJndlswXSk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIApAQCAtMTk5Myw3ICsyMjMxLDcgQEAg cnVuU2hlbGxDb21tYW5kKENTdGF0ZSAqc3QsIGNoYXIgKnZhcmlhYmxlLCBjaGFyICoqYXJndiwg aW50IGFyZ2MpCiAJewogCQlpZiAoc3lzdGVtKGNvbW1hbmQpKQogCQl7Ci0JCQlpZiAoIXRpbWVy X2V4Y2VlZGVkKQorCQkJaWYgKCF0aW1lcl9leGNlZWRlZCAmJiBkZWJ1Z19mYWlscykKIAkJCQlm cHJpbnRmKHN0ZGVyciwgIiVzOiBjb3VsZCBub3QgbGF1bmNoIHNoZWxsIGNvbW1hbmRcbiIsIGFy Z3ZbMF0pOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CkBAIC0yMDAzLDE5ICsyMjQxLDIxIEBAIHJ1 blNoZWxsQ29tbWFuZChDU3RhdGUgKnN0LCBjaGFyICp2YXJpYWJsZSwgY2hhciAqKmFyZ3YsIGlu dCBhcmdjKQogCS8qIEV4ZWN1dGUgdGhlIGNvbW1hbmQgd2l0aCBwaXBlIGFuZCByZWFkIHRoZSBz dGFuZGFyZCBvdXRwdXQuICovCiAJaWYgKChmcCA9IHBvcGVuKGNvbW1hbmQsICJyIikpID09IE5V TEwpCiAJewotCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBjb3VsZCBub3QgbGF1bmNoIHNoZWxsIGNv bW1hbmRcbiIsIGFyZ3ZbMF0pOworCQlpZiAoZGVidWdfZmFpbHMpCisJCQlmcHJpbnRmKHN0ZGVy ciwgIiVzOiBjb3VsZCBub3QgbGF1bmNoIHNoZWxsIGNvbW1hbmRcbiIsIGFyZ3ZbMF0pOwogCQly ZXR1cm4gZmFsc2U7CiAJfQogCWlmIChmZ2V0cyhyZXMsIHNpemVvZihyZXMpLCBmcCkgPT0gTlVM TCkKIAl7Ci0JCWlmICghdGltZXJfZXhjZWVkZWQpCisJCWlmICghdGltZXJfZXhjZWVkZWQgJiYg ZGVidWdfZmFpbHMpCiAJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBjb3VsZCBub3QgcmVhZCByZXN1 bHQgb2Ygc2hlbGwgY29tbWFuZFxuIiwgYXJndlswXSk7CiAJCSh2b2lkKSBwY2xvc2UoZnApOwog CQlyZXR1cm4gZmFsc2U7CiAJfQogCWlmIChwY2xvc2UoZnApIDwgMCkKIAl7Ci0JCWZwcmludGYo c3RkZXJyLCAiJXM6IGNvdWxkIG5vdCBjbG9zZSBzaGVsbCBjb21tYW5kXG4iLCBhcmd2WzBdKTsK KwkJaWYgKGRlYnVnX2ZhaWxzKQorCQkJZnByaW50ZihzdGRlcnIsICIlczogY291bGQgbm90IGNs b3NlIHNoZWxsIGNvbW1hbmRcbiIsIGFyZ3ZbMF0pOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCkBA IC0yMDI1LDExICsyMjY1LDEzIEBAIHJ1blNoZWxsQ29tbWFuZChDU3RhdGUgKnN0LCBjaGFyICp2 YXJpYWJsZSwgY2hhciAqKmFyZ3YsIGludCBhcmdjKQogCQllbmRwdHIrKzsKIAlpZiAoKnJlcyA9 PSAnXDAnIHx8ICplbmRwdHIgIT0gJ1wwJykKIAl7Ci0JCWZwcmludGYoc3RkZXJyLCAiJXM6IHNo ZWxsIGNvbW1hbmQgbXVzdCByZXR1cm4gYW4gaW50ZWdlciAobm90IFwiJXNcIilcbiIsCi0JCQkJ YXJndlswXSwgcmVzKTsKKwkJaWYgKGRlYnVnX2ZhaWxzKQorCQkJZnByaW50ZihzdGRlcnIsCisJ CQkJCSIlczogc2hlbGwgY29tbWFuZCBtdXN0IHJldHVybiBhbiBpbnRlZ2VyIChub3QgXCIlc1wi KVxuIiwKKwkJCQkJYXJndlswXSwgcmVzKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KLQlpZiAoIXB1 dFZhcmlhYmxlSW50KHN0LCAic2V0c2hlbGwiLCB2YXJpYWJsZSwgcmV0dmFsKSkKKwlpZiAoIXB1 dFZhcmlhYmxlSW50KHZhcmlhYmxlcywgInNldHNoZWxsIiwgdmFyaWFibGUsIHJldHZhbCwgZmFs c2UpKQogCQlyZXR1cm4gZmFsc2U7CiAKICNpZmRlZiBERUJVRwpAQCAtMjA0Niw3ICsyMjg4LDcg QEAgcHJlcGFyZWRTdGF0ZW1lbnROYW1lKGNoYXIgKmJ1ZmZlciwgaW50IGZpbGUsIGludCBzdGF0 ZSkKIH0KIAogc3RhdGljIHZvaWQKLWNvbW1hbmRGYWlsZWQoQ1N0YXRlICpzdCwgY29uc3QgY2hh ciAqbWVzc2FnZSkKK2NvbW1hbmRGYWlsZWQoQ1N0YXRlICpzdCwgY2hhciAqbWVzc2FnZSkKIHsK IAlmcHJpbnRmKHN0ZGVyciwKIAkJCSJjbGllbnQgJWQgYWJvcnRlZCBpbiBjb21tYW5kICVkIG9m IHNjcmlwdCAlZDsgJXNcbiIsCkBAIC0yMDU1LDcgKzIyOTcsNyBAQCBjb21tYW5kRmFpbGVkKENT dGF0ZSAqc3QsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiAKIC8qIHJldHVybiBhIHNjcmlwdCBudW1i ZXIgd2l0aCBhIHdlaWdodGVkIGNob2ljZS4gKi8KIHN0YXRpYyBpbnQKLWNob29zZVNjcmlwdChU U3RhdGUgKnRocmVhZCkKK2Nob29zZVNjcmlwdChDU3RhdGUgKnN0KQogewogCWludAkJCWkgPSAw OwogCWludDY0CQl3OwpAQCAtMjA2Myw3ICsyMzA1LDcgQEAgY2hvb3NlU2NyaXB0KFRTdGF0ZSAq dGhyZWFkKQogCWlmIChudW1fc2NyaXB0cyA9PSAxKQogCQlyZXR1cm4gMDsKIAotCXcgPSBnZXRy YW5kKHRocmVhZCwgMCwgdG90YWxfd2VpZ2h0IC0gMSk7CisJdyA9IGdldHJhbmQoc3QtPnJhbmRv bV9zdGF0ZSwgMCwgdG90YWxfd2VpZ2h0IC0gMSk7CiAJZG8KIAl7CiAJCXcgLT0gc3FsX3Njcmlw dFtpKytdLndlaWdodDsKQEAgLTIwODMsNyArMjMyNSw3IEBAIHNlbmRDb21tYW5kKENTdGF0ZSAq c3QsIENvbW1hbmQgKmNvbW1hbmQpCiAJCWNoYXIJICAgKnNxbDsKIAogCQlzcWwgPSBwZ19zdHJk dXAoY29tbWFuZC0+YXJndlswXSk7Ci0JCXNxbCA9IGFzc2lnblZhcmlhYmxlcyhzdCwgc3FsKTsK KwkJc3FsID0gYXNzaWduVmFyaWFibGVzKCZzdC0+dmFyaWFibGVzLCBzcWwpOwogCiAJCWlmIChk ZWJ1ZykKIAkJCWZwcmludGYoc3RkZXJyLCAiY2xpZW50ICVkIHNlbmRpbmcgJXNcbiIsIHN0LT5p ZCwgc3FsKTsKQEAgLTIwOTUsNyArMjMzNyw3IEBAIHNlbmRDb21tYW5kKENTdGF0ZSAqc3QsIENv bW1hbmQgKmNvbW1hbmQpCiAJCWNvbnN0IGNoYXIgKnNxbCA9IGNvbW1hbmQtPmFyZ3ZbMF07CiAJ CWNvbnN0IGNoYXIgKnBhcmFtc1tNQVhfQVJHU107CiAKLQkJZ2V0UXVlcnlQYXJhbXMoc3QsIGNv bW1hbmQsIHBhcmFtcyk7CisJCWdldFF1ZXJ5UGFyYW1zKCZzdC0+dmFyaWFibGVzLCBjb21tYW5k LCBwYXJhbXMpOwogCiAJCWlmIChkZWJ1ZykKIAkJCWZwcmludGYoc3RkZXJyLCAiY2xpZW50ICVk IHNlbmRpbmcgJXNcbiIsIHN0LT5pZCwgc3FsKTsKQEAgLTIxMjksNyArMjM3MSw3IEBAIHNlbmRD b21tYW5kKENTdGF0ZSAqc3QsIENvbW1hbmQgKmNvbW1hbmQpCiAJCQlzdC0+cHJlcGFyZWRbc3Qt PnVzZV9maWxlXSA9IHRydWU7CiAJCX0KIAotCQlnZXRRdWVyeVBhcmFtcyhzdCwgY29tbWFuZCwg cGFyYW1zKTsKKwkJZ2V0UXVlcnlQYXJhbXMoJnN0LT52YXJpYWJsZXMsIGNvbW1hbmQsIHBhcmFt cyk7CiAJCXByZXBhcmVkU3RhdGVtZW50TmFtZShuYW1lLCBzdC0+dXNlX2ZpbGUsIHN0LT5jb21t YW5kKTsKIAogCQlpZiAoZGVidWcpCkBAIC0yMTU3LDE3ICsyMzk5LDE4IEBAIHNlbmRDb21tYW5k KENTdGF0ZSAqc3QsIENvbW1hbmQgKmNvbW1hbmQpCiAgKiBvZiBkZWxheSwgaW4gbWljcm9zZWNv bmRzLiAgUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIGVycm9yLgogICovCiBzdGF0 aWMgYm9vbAotZXZhbHVhdGVTbGVlcChDU3RhdGUgKnN0LCBpbnQgYXJnYywgY2hhciAqKmFyZ3Ys IGludCAqdXNlY3MpCitldmFsdWF0ZVNsZWVwKFZhcmlhYmxlcyAqdmFyaWFibGVzLCBpbnQgYXJn YywgY2hhciAqKmFyZ3YsIGludCAqdXNlY3MpCiB7CiAJY2hhcgkgICAqdmFyOwogCWludAkJCXVz ZWM7CiAKIAlpZiAoKmFyZ3ZbMV0gPT0gJzonKQogCXsKLQkJaWYgKCh2YXIgPSBnZXRWYXJpYWJs ZShzdCwgYXJndlsxXSArIDEpKSA9PSBOVUxMKQorCQlpZiAoKHZhciA9IGdldFZhcmlhYmxlKHZh cmlhYmxlcywgYXJndlsxXSArIDEpKSA9PSBOVUxMKQogCQl7Ci0JCQlmcHJpbnRmKHN0ZGVyciwg IiVzOiB1bmRlZmluZWQgdmFyaWFibGUgXCIlc1wiXG4iLAotCQkJCQlhcmd2WzBdLCBhcmd2WzFd KTsKKwkJCWlmIChkZWJ1Z19mYWlscykKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiB1bmRlZmlu ZWQgdmFyaWFibGUgXCIlc1wiXG4iLAorCQkJCQkJYXJndlswXSwgYXJndlsxXSk7CiAJCQlyZXR1 cm4gZmFsc2U7CiAJCX0KIAkJdXNlYyA9IGF0b2kodmFyKTsKQEAgLTIxODksNiArMjQzMiwyMTcg QEAgZXZhbHVhdGVTbGVlcChDU3RhdGUgKnN0LCBpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGludCAq dXNlY3MpCiAJcmV0dXJuIHRydWU7CiB9CiAKKy8qIG1ha2UgYSBkZWVwIGNvcHkgb2YgdmFyaWFi bGVzIGFycmF5ICovCitzdGF0aWMgdm9pZAorY29weVZhcmlhYmxlcyhWYXJpYWJsZXMgKmRlc3Rp bmF0aW9uX3ZhcnMsIGNvbnN0IFZhcmlhYmxlcyAqc291cmNlX3ZhcnMpCit7CisJVmFyaWFibGUg ICAqZGVzdGluYXRpb247CisJVmFyaWFibGUgICAqY3VycmVudF9kZXN0aW5hdGlvbjsKKwljb25z dCBWYXJpYWJsZSAqc291cmNlOworCWNvbnN0IFZhcmlhYmxlICpjdXJyZW50X3NvdXJjZTsKKwlp bnQJCQludmFyaWFibGVzOworCisJaWYgKCFkZXN0aW5hdGlvbl92YXJzIHx8ICFzb3VyY2VfdmFy cykKKwkJcmV0dXJuOworCisJZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbl92YXJzLT5hcnJheTsK Kwlzb3VyY2UgPSBzb3VyY2VfdmFycy0+YXJyYXk7CisJbnZhcmlhYmxlcyA9IHNvdXJjZV92YXJz LT5udmFyaWFibGVzOworCisJZm9yIChjdXJyZW50X2Rlc3RpbmF0aW9uID0gZGVzdGluYXRpb247 CisJCSBjdXJyZW50X2Rlc3RpbmF0aW9uIC0gZGVzdGluYXRpb24gPCBkZXN0aW5hdGlvbl92YXJz LT5udmFyaWFibGVzOworCQkgKytjdXJyZW50X2Rlc3RpbmF0aW9uKQorCXsKKwkJcGdfZnJlZShj dXJyZW50X2Rlc3RpbmF0aW9uLT5uYW1lKTsKKwkJcGdfZnJlZShjdXJyZW50X2Rlc3RpbmF0aW9u LT52YWx1ZSk7CisJfQorCisJZGVzdGluYXRpb25fdmFycy0+YXJyYXkgPSBwZ19yZWFsbG9jKGRl c3RpbmF0aW9uX3ZhcnMtPmFycmF5LAorCQkJCQkJCQkJCSBzaXplb2YoVmFyaWFibGUpICogbnZh cmlhYmxlcyk7CisJZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbl92YXJzLT5hcnJheTsKKworCWZv ciAoY3VycmVudF9zb3VyY2UgPSBzb3VyY2UsIGN1cnJlbnRfZGVzdGluYXRpb24gPSBkZXN0aW5h dGlvbjsKKwkJIGN1cnJlbnRfc291cmNlIC0gc291cmNlIDwgbnZhcmlhYmxlczsKKwkJICsrY3Vy cmVudF9zb3VyY2UsICsrY3VycmVudF9kZXN0aW5hdGlvbikKKwl7CisJCWN1cnJlbnRfZGVzdGlu YXRpb24tPm5hbWUgPSBwZ19zdHJkdXAoY3VycmVudF9zb3VyY2UtPm5hbWUpOworCQlpZiAoY3Vy cmVudF9zb3VyY2UtPnZhbHVlKQorCQkJY3VycmVudF9kZXN0aW5hdGlvbi0+dmFsdWUgPSBwZ19z dHJkdXAoY3VycmVudF9zb3VyY2UtPnZhbHVlKTsKKwkJZWxzZQorCQkJY3VycmVudF9kZXN0aW5h dGlvbi0+dmFsdWUgPSBOVUxMOworCQljdXJyZW50X2Rlc3RpbmF0aW9uLT5pc19udW1lcmljID0g Y3VycmVudF9zb3VyY2UtPmlzX251bWVyaWM7CisJCWN1cnJlbnRfZGVzdGluYXRpb24tPm51bV92 YWx1ZSA9IGN1cnJlbnRfc291cmNlLT5udW1fdmFsdWU7CisJfQorCisJZGVzdGluYXRpb25fdmFy cy0+bnZhcmlhYmxlcyA9IG52YXJpYWJsZXM7CisJZGVzdGluYXRpb25fdmFycy0+dmFyc19zb3J0 ZWQgPSBzb3VyY2VfdmFycy0+dmFyc19zb3J0ZWQ7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRydWUg aWYgdGhlIFNRTCBjb21tYW5kIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgbm9uLWVtcHR5IHN1YmNv bW1hbmQuCisgKi8KK3N0YXRpYyBib29sCitpc19jb21wb3VuZChjb25zdCBDb21tYW5kICpjb21t YW5kKQoreworCXJldHVybiAoY29tbWFuZCAmJgorCQkJY29tbWFuZC0+dHlwZSA9PSBTUUxfQ09N TUFORCAmJgorCQkJY29tbWFuZC0+bnVtX3N1YmNtZHMgPiAxKTsKK30KKworLyoKKyAqIFJldHVy bnMgdHJ1ZSBpZiB3ZSBjYW4gZW5kIGEgZmFpbGVkIHRyYW5zYWN0aW9uIGJsb2NrIGJ5IHRoZSBu ZWFyZXN0CisgKiBhcHByb3ByaWF0ZSBjb21tYW5kIGFuZCBmYWxzZSBvdGhlcndpc2UuCisgKi8K K3N0YXRpYyBib29sCitjYW5FbmRGYWlsZWRUeEJsb2NrKENTdGF0ZSAqc3QpCit7CisJY29uc3Qg Q29tbWFuZCAqY29tbWFuZCA9IHNxbF9zY3JpcHRbc3QtPnVzZV9maWxlXS5jb21tYW5kc1tzdC0+ Y29tbWFuZF07CisKKwkvKiBjaGVjayB0aGF0IHRoaXMgc2NyaXB0IGRpZCBub3QgZW5kICovCisJ aWYgKCFjb21tYW5kKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiB3ZSBjYW5ub3QgdXNlIHRoZSBz dWJjb21tYW5kcyBmcm9tIHRoZSBjdXJyZW50IGNvbW1hbmQuICovCisJaWYgKGNvbW1hbmQtPnR5 cGUgPT0gU1FMX0NPTU1BTkQgJiYKKwkJY29tbWFuZC0+c3ViY21kW3N0LT5zdWJjbWRdLnR4X2Js b2NrX2VuZCA+IHN0LT5zdWJjbWQpCisJCXJldHVybiBmYWxzZTsKKworCS8qIGNoZWNrIGlmIHRo ZXJlJ3MgYSB0cmFuc2FjdGlvbiBibG9jayBlbmQgbGF0ZXIgaW4gdGhpcyBzY3JpcHQgKi8KKwlp ZiAoY29tbWFuZC0+dHhfYmxvY2tfZW5kID09IC0xKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1 cm4gIWlzX2NvbXBvdW5kKAorCQkJCQlzcWxfc2NyaXB0W3N0LT51c2VfZmlsZV0uY29tbWFuZHNb Y29tbWFuZC0+dHhfYmxvY2tfZW5kXSk7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRoZSBudW1iZXIg b2YgdGhlIGZpcnN0IG5vbi1lbXB0eSBzdWJjb21tYW5kIHRvIGNvbXBsZXRlIHRoZQorICogdHJh bnNhY3Rpb24gYmxvY2sgb3IgLTEgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50CitnZXRfZmly c3RfdHhfYmxvY2tfZW5kKGNvbnN0IENvbW1hbmQgKmNvbW1hbmQpCit7CisJaWYgKCFjb21tYW5k IHx8IGNvbW1hbmQtPnR5cGUgIT0gU1FMX0NPTU1BTkQpCisJCXJldHVybiAtMTsKKworCXJldHVy biBjb21tYW5kLT5zdWJjbWQtPnR4X2Jsb2NrX2VuZDsKK30KKworLyoKKyAqIFJldHVybnMgdHJ1 ZSBpZiB0aGUgZmFpbHVyZSBjYW4gYmUgcmV0cmllZC4KKyAqLworc3RhdGljIGJvb2wKK2NhblJl dHJ5KENTdGF0ZSAqc3QsIEZhaWx1cmVTdGF0dXMgZmFpbHVyZV9zdGF0dXMpCit7CisJY29uc3Qg Q29tbWFuZCAqY29tbWFuZCA9IHNxbF9zY3JpcHRbc3QtPnVzZV9maWxlXS5jb21tYW5kc1tzdC0+ Y29tbWFuZF07CisKKwlBc3NlcnQoZmFpbHVyZV9zdGF0dXMgPj0gMCAmJiBmYWlsdXJlX3N0YXR1 cyA8IE5VTV9GQUlMVVJFX1NUQVRVUyk7CisJQXNzZXJ0KHN0LT5jb21tYW5kID49IHN0LT5yZXRy eV9zdGF0ZS5jb21tYW5kKTsKKworCS8qIFdlIGNhbm5vdCByZXRyeSBpZiB3ZSBkbyBub3QgZW5k IHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24gYmxvY2suICovCisJaWYgKHN0LT5zdGF0ZSA9PSBDU1RB VEVfRU5EX0ZBSUxFRF9UWF9CTE9DS19TVEFSVCB8fAorCQlzdC0+c3RhdGUgPT0gQ1NUQVRFX0VO RF9GQUlMRURfVFhfQkxPQ0tfV0FJVCB8fAorCQlzdC0+c3RhdGUgPT0gQ1NUQVRFX0VORF9GQUlM RURfVFhfQkxPQ0tfRU5EIHx8CisJCXN0LT5zdGF0ZSA9PSBDU1RBVEVfRU5EX0ZBSUxFRF9UWF9C TE9DS19GQUlMVVJFKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBXZSBjYW4gb25seSByZXRyeSBz ZXJpYWxpemF0aW9uIG9yIGRlYWRsb2NrIGZhaWx1cmVzLiAqLworCWlmICghRkFJTFVSRV9TVEFU VVNbZmFpbHVyZV9zdGF0dXNdLmZhaWx1cmVfc3RhdHVzX3N0cikKKwkJcmV0dXJuIGZhbHNlOwor CisJLyoKKwkgKiBXZSBjYW5ub3QgcmV0cnkgaWYgd2UgY2Fubm90IGVuZCBhIGZhaWxlZCB0cmFu c2FjdGlvbiBibG9jayBieSB0aGUKKwkgKiBuZWFyZXN0IGFwcHJvcHJpYXRlIGNvbW1hbmQuCisJ ICovCisJaWYgKHN0LT5pbl90eF9ibG9jayAmJiAhY2FuRW5kRmFpbGVkVHhCbG9jayhzdCkpCisJ CXJldHVybiBmYWxzZTsKKworCS8qCisJICogV2UgY2Fubm90IHJldHJ5IGlmIHdlIGNvbnRpbnVl IHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24gYmxvY2sgZnJvbSB0aGUKKwkgKiBwcmV2aW91cyBzY3Jp cHQuCisJICovCisJaWYgKHN0LT5yZXRyeV9zdGF0ZS5jb21tYW5kID09IC0xKQorCQlyZXR1cm4g ZmFsc2U7CisKKwkvKiBTb21ldGltZXMgbm90IGFsbCBzdWJjb21tYW5kcyBjYW4gYmUgcmV0cmll ZCBmcm9tIHRoZSB2ZXJ5IGJlZ2lubmluZy4gKi8KKwlpZiAoc3QtPnJldHJ5X3N0YXRlLnN1YmNt ZCA+PSAwICYmCisJCShzdC0+Y29tbWFuZCA+IHN0LT5yZXRyeV9zdGF0ZS5jb21tYW5kIHx8CisJ CSBzdC0+c3ViY21kID4gc3QtPnJldHJ5X3N0YXRlLnN1YmNtZCkpCisJCXJldHVybiBmYWxzZTsK KworCS8qIFNvbWV0aW1lcyBub3QgYWxsIGZhaWxlZCBzdWJjb21tYW5kcyBjYW4gYmUgcmV0cmll ZC4gKi8KKwlpZiAoaXNfY29tcG91bmQoY29tbWFuZCkpCisJeworCQlpZiAoc3QtPndhc19pbl90 eF9ibG9jayB8fCBjb21tYW5kLT5maXJzdF90eF9ibG9ja19iZWdpbiA9PSAwKQorCQl7CisJCQkv KgorCQkJICogV2UgY2FuIHJldHJ5IGFsbCB0aGUgc3ViY29tbWFuZHMgdW50aWwgdGhlIGVuZCBv ZiB0aGUgZmlyc3QKKwkJCSAqIGV4cGxpY2l0IHRyYW5zYWN0aW9uIGJsb2NrLgorCQkJICovCisJ CQlpbnQJCQlmaXJzdF90eF9ibG9ja19lbmQgPSBnZXRfZmlyc3RfdHhfYmxvY2tfZW5kKGNvbW1h bmQpOworCisJCQlpZiAoZmlyc3RfdHhfYmxvY2tfZW5kID49IDAgJiYKKwkJCQlzdC0+c3ViY21k ID4gZ2V0X2ZpcnN0X3R4X2Jsb2NrX2VuZChjb21tYW5kKSkKKwkJCQlyZXR1cm4gZmFsc2U7CisJ CX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJICogV2UgY2FuIHJldHJ5IGFsbCB0aGUgc3ViY29t bWFuZHMgYmVmb3JlIHRoZSBmaXJzdCBleHBsaWNpdAorCQkJICogdHJhbnNhY3Rpb24gYmxvY2su CisJCQkgKi8KKwkJCWlmIChjb21tYW5kLT5maXJzdF90eF9ibG9ja19iZWdpbiA+PSAwICYmCisJ CQkJc3QtPnN1YmNtZCA+IGNvbW1hbmQtPmZpcnN0X3R4X2Jsb2NrX2JlZ2luKQorCQkJCXJldHVy biBmYWxzZTsKKwkJfQorCX0KKworCS8qCisJICogV2UgY2Fubm90IHJldHJ5IHRoZSBmYWlsdXJl IGlmIHdlIGhhdmUgcmVhY2hlZCB0aGUgbWF4aW11bSBudW1iZXIgb2YKKwkgKiB0cmllcy4KKwkg Ki8KKwlpZiAoc3QtPnJldHJ5X3N0YXRlLnJldHJpZXMgKyAxID49IG1heF90cmllcykKKwkJcmV0 dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBSZXBvcnQgdGhhdCB0aGUg Y2xpZW50IGdvdCBhIGZhaWx1cmUuIFJlcG9ydCB0aGlzIGFzIGFuIGVycm9yIGlmIGEgZmFpbHVy ZQorICogY2Fubm90IGJlIHJldHJpZWQuCisgKgorICogVGhlIG1lc3NhZ2UgbXVzdCBiZSB0ZXJt aW5hdGVkIHdpdGggYSBuZXdsaW5lIGNoYXJhY3Rlci4KKyAqLworc3RhdGljIHZvaWQKK3ByaW50 X2ZhaWx1cmUoQ1N0YXRlICpzdCwgRmFpbHVyZVN0YXR1cyBmYWlsdXJlX3N0YXR1cywgY29uc3Qg Y2hhciAqbWVzc2FnZSkKK3sKKwljb25zdCBDb21tYW5kICpjb21tYW5kID0gc3FsX3NjcmlwdFtz dC0+dXNlX2ZpbGVdLmNvbW1hbmRzW3N0LT5jb21tYW5kXTsKKwljb25zdCBjaGFyICpzdGF0dXNf c3RyOworCisJQXNzZXJ0KGZhaWx1cmVfc3RhdHVzID49IDAgJiYgZmFpbHVyZV9zdGF0dXMgPCBO VU1fRkFJTFVSRV9TVEFUVVMpOworCUFzc2VydChtZXNzYWdlICYmICptZXNzYWdlKTsKKworCWlm IChjYW5SZXRyeShzdCwgZmFpbHVyZV9zdGF0dXMpKQorCXsKKwkJc3RhdHVzX3N0ciA9IEZBSUxV UkVfU1RBVFVTW2ZhaWx1cmVfc3RhdHVzXS5mYWlsdXJlX3N0YXR1c19zdHI7CisJCWZwcmludGYo c3RkZXJyLCAiY2xpZW50ICVkIGdvdCAlcyAodHJ5ICVkLyVkKSBpbiBjb21tYW5kICVkIiwKKwkJ CQlzdC0+aWQsIHN0YXR1c19zdHIgPyBzdGF0dXNfc3RyIDogImEgZmFpbHVyZSIsCisJCQkJc3Qt PnJldHJ5X3N0YXRlLnJldHJpZXMgKyAxLCBtYXhfdHJpZXMsIHN0LT5jb21tYW5kKTsKKwl9CisJ ZWxzZQorCXsKKwkJc3RhdHVzX3N0ciA9IEZBSUxVUkVfU1RBVFVTW2ZhaWx1cmVfc3RhdHVzXS5l cnJvcl9zdGF0dXNfc3RyOworCQlmcHJpbnRmKHN0ZGVyciwgImNsaWVudCAlZCBnb3QgJXMgaW4g Y29tbWFuZCAlZCIsCisJCQkJc3QtPmlkLCBzdGF0dXNfc3RyID8gc3RhdHVzX3N0ciA6ICJhbiBl cnJvciIsIHN0LT5jb21tYW5kKTsKKwl9CisKKwlpZiAoaXNfY29tcG91bmQoY29tbWFuZCkpCisJ CWZwcmludGYoc3RkZXJyLCAiIChzdWJjb21tYW5kICVkKSIsCisJCQkJY29tbWFuZC0+c3ViY21k W3N0LT5zdWJjbWRdLmluaXRpYWxfc3ViY21kX251bSk7CisKKwlmcHJpbnRmKHN0ZGVyciwgIiBv ZiBzY3JpcHQgJWQ6XG4lcyIsIHN0LT51c2VfZmlsZSwgbWVzc2FnZSk7Cit9CisKIC8qCiAgKiBB ZHZhbmNlIHRoZSBzdGF0ZSBtYWNoaW5lIG9mIGEgY29ubmVjdGlvbiwgaWYgcG9zc2libGUuCiAg Ki8KQEAgLTIyMDAsNiArMjY1NCw3IEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUg KnN0LCBTdGF0c0RhdGEgKmFnZykKIAlpbnN0cl90aW1lCW5vdzsKIAlib29sCQllbmRfdHhfcHJv Y2Vzc2VkID0gZmFsc2U7CiAJaW50NjQJCXdhaXQ7CisJRmFpbHVyZVN0YXR1cyBmYWlsdXJlX3N0 YXR1cyA9IE5PX0ZBSUxVUkU7CiAKIAkvKgogCSAqIGdldHRpbWVvZmRheSgpIGlzbid0IGZyZWUs IHNvIHdlIGdldCB0aGUgY3VycmVudCB0aW1lc3RhbXAgbGF6aWx5IHRoZQpAQCAtMjIyOCwxMiAr MjY4MywyMCBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRh ICphZ2cpCiAJCQkJICovCiAJCQljYXNlIENTVEFURV9DSE9PU0VfU0NSSVBUOgogCi0JCQkJc3Qt PnVzZV9maWxlID0gY2hvb3NlU2NyaXB0KHRocmVhZCk7CisJCQkJc3QtPnVzZV9maWxlID0gY2hv b3NlU2NyaXB0KHN0KTsKIAogCQkJCWlmIChkZWJ1ZykKIAkJCQkJZnByaW50ZihzdGRlcnIsICJj bGllbnQgJWQgZXhlY3V0aW5nIHNjcmlwdCBcIiVzXCJcbiIsIHN0LT5pZCwKIAkJCQkJCQlzcWxf c2NyaXB0W3N0LT51c2VfZmlsZV0uZGVzYyk7CiAKKwkJCQkvKiByZXNldCB0cmFuc2FjdGlvbiB2 YXJpYWJsZXMgdG8gZGVmYXVsdCB2YWx1ZXMgKi8KKwkJCQlzdC0+cmV0cnlfc3RhdGUuY29tbWFu ZCA9IC0xOworCQkJCXN0LT5yZXRyaWVzID0gMDsKKwkJCQlzdC0+ZXJyb3IgPSBmYWxzZTsKKwkJ CQlzdC0+ZXJyb3Jfbm90X2luX2ZhaWxlZF90eCA9IGZhbHNlOworCQkJCXN0LT5sYXN0X2ZhaWx1 cmUuc3RhdHVzID0gTk9fRkFJTFVSRTsKKwkJCQlzdC0+bGFzdF9mYWlsdXJlLmNvbW1hbmQgPSAt MTsKKwogCQkJCWlmICh0aHJvdHRsZV9kZWxheSA+IDApCiAJCQkJCXN0LT5zdGF0ZSA9IENTVEFU RV9TVEFSVF9USFJPVFRMRTsKIAkJCQllbHNlCkBAIC0yMjU1LDcgKzI3MTgsNyBAQCBkb0N1c3Rv bShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJICogYXdh eS4KIAkJCQkgKi8KIAkJCQlBc3NlcnQodGhyb3R0bGVfZGVsYXkgPiAwKTsKLQkJCQl3YWl0ID0g Z2V0UG9pc3NvblJhbmQodGhyZWFkLCB0aHJvdHRsZV9kZWxheSk7CisJCQkJd2FpdCA9IGdldFBv aXNzb25SYW5kKHN0LT5yYW5kb21fc3RhdGUsIHRocm90dGxlX2RlbGF5KTsKIAogCQkJCXRocmVh ZC0+dGhyb3R0bGVfdHJpZ2dlciArPSB3YWl0OwogCQkJCXN0LT50eG5fc2NoZWR1bGVkID0gdGhy ZWFkLT50aHJvdHRsZV90cmlnZ2VyOwpAQCAtMjI4OSw3ICsyNzUyLDcgQEAgZG9DdXN0b20oVFN0 YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJCQl7CiAJCQkJCQlw cm9jZXNzWGFjdFN0YXRzKHRocmVhZCwgc3QsICZub3csIHRydWUsIGFnZyk7CiAJCQkJCQkvKiBu ZXh0IHJlbmRlei12b3VzICovCi0JCQkJCQl3YWl0ID0gZ2V0UG9pc3NvblJhbmQodGhyZWFkLCB0 aHJvdHRsZV9kZWxheSk7CisJCQkJCQl3YWl0ID0gZ2V0UG9pc3NvblJhbmQoc3QtPnJhbmRvbV9z dGF0ZSwgdGhyb3R0bGVfZGVsYXkpOwogCQkJCQkJdGhyZWFkLT50aHJvdHRsZV90cmlnZ2VyICs9 IHdhaXQ7CiAJCQkJCQlzdC0+dHhuX3NjaGVkdWxlZCA9IHRocmVhZC0+dGhyb3R0bGVfdHJpZ2dl cjsKIAkJCQkJfQpAQCAtMjM3Niw2ICsyODM5LDcgQEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQs IENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJCSAqIFNlbmQgYSBjb21tYW5kIHRvIHNl cnZlciAob3IgZXhlY3V0ZSBhIG1ldGEtY29tbWFuZCkKIAkJCQkgKi8KIAkJCWNhc2UgQ1NUQVRF X1NUQVJUX0NPTU1BTkQ6CisJCQljYXNlIENTVEFURV9FTkRfRkFJTEVEX1RYX0JMT0NLX1NUQVJU OgogCQkJCWNvbW1hbmQgPSBzcWxfc2NyaXB0W3N0LT51c2VfZmlsZV0uY29tbWFuZHNbc3QtPmNv bW1hbmRdOwogCiAJCQkJLyoKQEAgLTIzODgsMTEgKzI4NTIsNjcgQEAgZG9DdXN0b20oVFN0YXRl ICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJCQlicmVhazsKIAkJCQl9 CiAKKwkJCQlpZiAoY29tbWFuZC0+dHlwZSA9PSBTUUxfQ09NTUFORCAmJgorCQkJCQkhc3QtPmlu X3R4X2Jsb2NrICYmCisJCQkJCXN0LT5yZXRyeV9zdGF0ZS5jb21tYW5kIDwgc3QtPmNvbW1hbmQp CisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBJdCBpcyBhIGZpcnN0IHRyeSB0byBydW4gdGhlIHRy YW5zYWN0aW9uIHdoaWNoIGJlZ2lucyBpbgorCQkJCQkgKiBjdXJyZW50IGNvbW1hbmQuICBSZW1l bWJlciBpdHMgcGFyYW1ldGVycyBqdXN0IGluIGNhc2Ugd2UKKwkJCQkJICogc2hvdWxkIHJlcGVh dCBpdCBpbiBmdXR1cmUuCisJCQkJCSAqLworCQkJCQlzdC0+cmV0cnlfc3RhdGUuY29tbWFuZCA9 IHN0LT5jb21tYW5kOworCisJCQkJCWlmIChpc19jb21wb3VuZChjb21tYW5kKSAmJgorCQkJCQkJ Y29tbWFuZC0+Zmlyc3RfdHhfYmxvY2tfYmVnaW4gPj0gMCkKKwkJCQkJeworCQkJCQkJaWYgKGNv bW1hbmQtPmZpcnN0X3R4X2Jsb2NrX2JlZ2luID09IDApCisJCQkJCQl7CisJCQkJCQkJLyoKKwkJ CQkJCQkgKiBXZSBjYW4gcmV0cnkgb25seSB0aGUgZmlyc3QgZXhwbGljaXQgdHJhbnNhY3Rpb24K KwkJCQkJCQkgKiBibG9jay4KKwkJCQkJCQkgKi8KKwkJCQkJCQlzdC0+cmV0cnlfc3RhdGUuc3Vi Y21kID0KKwkJCQkJCQkJZ2V0X2ZpcnN0X3R4X2Jsb2NrX2VuZChjb21tYW5kKTsKKwkJCQkJCX0K KwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQkvKgorCQkJCQkJCSAqIFdlIGNhbiByZXRyeSBh bGwgdGhlIHN1YmNvbW1hbmRzIGJlZm9yZSB0aGUgZmlyc3QKKwkJCQkJCQkgKiBleHBsaWNpdCB0 cmFuc2FjdGlvbiBibG9jay4KKwkJCQkJCQkgKi8KKwkJCQkJCQlzdC0+cmV0cnlfc3RhdGUuc3Vi Y21kID0KKwkJCQkJCQkJY29tbWFuZC0+Zmlyc3RfdHhfYmxvY2tfYmVnaW47CisJCQkJCQl9CisK KwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCS8qCisJCQkJCQkgKiBUaGUgY29tbWFu ZCBpcyBub3QgY29tcG91bmQgb3IgY29udGFpbnMgbm8KKwkJCQkJCSAqIHN1YmNvbW1hbmRzIHRv IHJ1biBhbiBleHBsaWNpdCB0cmFuc2FjdGlvbiBibG9jay4gU28KKwkJCQkJCSAqIHdlIGNhbiBy ZXRyeSBhbGwgb2YgaXRzIHN1YmNvbW1hbmRzLgorCQkJCQkJICovCisJCQkJCQlzdC0+cmV0cnlf c3RhdGUuc3ViY21kID0gLTE7CisJCQkJCX0KKworCQkJCQlzdC0+cmV0cnlfc3RhdGUucmV0cmll cyA9IDA7CisJCQkJCW1lbWNweShzdC0+cmV0cnlfc3RhdGUucmFuZG9tX3N0YXRlLCBzdC0+cmFu ZG9tX3N0YXRlLAorCQkJCQkJICAgc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSAqIDMpOworCQkJCQlj b3B5VmFyaWFibGVzKCZzdC0+cmV0cnlfc3RhdGUudmFyaWFibGVzLCAmc3QtPnZhcmlhYmxlcyk7 CisJCQkJfQorCisJCQkJLyoKKwkJCQkgKiBSZW1lbWJlciB0aGlzIGlmIHdlIHRyeSB0byByZXRy eSB0aGUgZmFpbHVyZSBpbiB0aGUgY3VycmVudAorCQkJCSAqIGNvbW1hbmQuCisJCQkJICovCisJ CQkJc3QtPndhc19pbl90eF9ibG9jayA9IHN0LT5pbl90eF9ibG9jazsKKwogCQkJCS8qCiAJCQkJ ICogUmVjb3JkIHN0YXRlbWVudCBzdGFydCB0aW1lIGlmIHBlci1jb21tYW5kIGxhdGVuY2llcyBh cmUKIAkJCQkgKiByZXF1ZXN0ZWQKIAkJCQkgKi8KLQkJCQlpZiAoaXNfbGF0ZW5jaWVzKQorCQkJ CWlmIChyZXBvcnRfcGVyX2NvbW1hbmQpCiAJCQkJewogCQkJCQlpZiAoSU5TVFJfVElNRV9JU19a RVJPKG5vdykpCiAJCQkJCQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKG5vdyk7CkBAIC0yNDA2LDYg KzI5MjYsMTIgQEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0 YSAqYWdnKQogCQkJCQkJY29tbWFuZEZhaWxlZChzdCwgIlNRTCBjb21tYW5kIHNlbmQgZmFpbGVk Iik7CiAJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfQUJPUlRFRDsKIAkJCQkJfQorCisJCQkJCS8q IHdhaXQgZm9yIHRoZSByZXN1bHQgZm9yIHRoZSBmaXJzdCBzdWJjb21tYW5kICovCisJCQkJCXN0 LT5zdWJjbWQgPSAwOworCisJCQkJCWlmIChzdC0+c3RhdGUgPT0gQ1NUQVRFX0VORF9GQUlMRURf VFhfQkxPQ0tfU1RBUlQpCisJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfRU5EX0ZBSUxFRF9UWF9C TE9DS19XQUlUOwogCQkJCQllbHNlCiAJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfV0FJVF9SRVNV TFQ7CiAJCQkJfQpAQCAtMjQyMyw2ICsyOTQ5LDggQEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQs IENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJCQkJZnByaW50ZihzdGRlcnIsICJcbiIp OwogCQkJCQl9CiAKKwkJCQkJZmFpbHVyZV9zdGF0dXMgPSBOT19GQUlMVVJFOworCiAJCQkJCWlm IChjb21tYW5kLT5tZXRhID09IE1FVEFfU0xFRVApCiAJCQkJCXsKIAkJCQkJCS8qCkBAIC0yNDM0 LDEwICsyOTYyLDE0IEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBTdGF0 c0RhdGEgKmFnZykKIAkJCQkJCSAqLwogCQkJCQkJaW50CQkJdXNlYzsKIAotCQkJCQkJaWYgKCFl dmFsdWF0ZVNsZWVwKHN0LCBhcmdjLCBhcmd2LCAmdXNlYykpCisJCQkJCQlpZiAoIWV2YWx1YXRl U2xlZXAoJnN0LT52YXJpYWJsZXMsIGFyZ2MsIGFyZ3YsICZ1c2VjKSkKIAkJCQkJCXsKLQkJCQkJ CQljb21tYW5kRmFpbGVkKHN0LCAiZXhlY3V0aW9uIG9mIG1ldGEtY29tbWFuZCAnc2xlZXAnIGZh aWxlZCIpOwotCQkJCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9BQk9SVEVEOworCQkJCQkJCWZhaWx1 cmVfc3RhdHVzID0gTUVUQV9DT01NQU5EX0ZBSUxVUkU7CisJCQkJCQkJaWYgKGRlYnVnX2ZhaWxz KQorCQkJCQkJCQlwcmludF9mYWlsdXJlKHN0LCBmYWlsdXJlX3N0YXR1cywKKwkJCQkJCQkJCQkJ ICAiZXhlY3V0aW9uIG9mIG1ldGEtY29tbWFuZCAnc2xlZXAnIGZhaWxlZFxuIik7CisKKwkJCQkJ CQlzdC0+c3RhdGUgPSBDU1RBVEVfRU5EX0NPTU1BTkQ7CiAJCQkJCQkJYnJlYWs7CiAJCQkJCQl9 CiAKQEAgLTI0NTYsMjEgKzI5ODgsMzIgQEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0 ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCiAJCQkJCQkJaWYgKCFldmFsdWF0ZUV4cHIodGhyZWFk LCBzdCwgZXhwciwgJnJlc3VsdCkpCiAJCQkJCQkJewotCQkJCQkJCQljb21tYW5kRmFpbGVkKHN0 LCAiZXZhbHVhdGlvbiBvZiBtZXRhLWNvbW1hbmQgJ3NldCcgZmFpbGVkIik7Ci0JCQkJCQkJCXN0 LT5zdGF0ZSA9IENTVEFURV9BQk9SVEVEOworCQkJCQkJCQlmYWlsdXJlX3N0YXR1cyA9IE1FVEFf Q09NTUFORF9GQUlMVVJFOworCQkJCQkJCQlpZiAoZGVidWdfZmFpbHMpCisJCQkJCQkJCQlwcmlu dF9mYWlsdXJlKHN0LCBmYWlsdXJlX3N0YXR1cywKKwkJCQkJCQkJCQkJCSAgImV2YWx1YXRpb24g b2YgbWV0YS1jb21tYW5kICdzZXQnIGZhaWxlZFxuIik7CisKKwkJCQkJCQkJc3QtPnN0YXRlID0g Q1NUQVRFX0VORF9DT01NQU5EOwogCQkJCQkJCQlicmVhazsKIAkJCQkJCQl9CiAKLQkJCQkJCQlp ZiAoIXB1dFZhcmlhYmxlTnVtYmVyKHN0LCBhcmd2WzBdLCBhcmd2WzFdLCAmcmVzdWx0KSkKKwkJ CQkJCQlpZiAoIXB1dFZhcmlhYmxlTnVtYmVyKCZzdC0+dmFyaWFibGVzLCBhcmd2WzBdLAorCQkJ CQkJCQkJCQkJICAgYXJndlsxXSwgJnJlc3VsdCwgZmFsc2UpKQogCQkJCQkJCXsKLQkJCQkJCQkJ Y29tbWFuZEZhaWxlZChzdCwgImFzc2lnbm1lbnQgb2YgbWV0YS1jb21tYW5kICdzZXQnIGZhaWxl ZCIpOwotCQkJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfQUJPUlRFRDsKKwkJCQkJCQkJZmFpbHVy ZV9zdGF0dXMgPSBNRVRBX0NPTU1BTkRfRkFJTFVSRTsKKwkJCQkJCQkJaWYgKGRlYnVnX2ZhaWxz KQorCQkJCQkJCQkJcHJpbnRfZmFpbHVyZShzdCwgZmFpbHVyZV9zdGF0dXMsCisJCQkJCQkJCQkJ CQkgICJhc3NpZ25tZW50IG9mIG1ldGEtY29tbWFuZCAnc2V0JyBmYWlsZWRcbiIpOworCisJCQkJ CQkJCXN0LT5zdGF0ZSA9IENTVEFURV9FTkRfQ09NTUFORDsKIAkJCQkJCQkJYnJlYWs7CiAJCQkJ CQkJfQogCQkJCQkJfQogCQkJCQkJZWxzZSBpZiAoY29tbWFuZC0+bWV0YSA9PSBNRVRBX1NFVFNI RUxMKQogCQkJCQkJewotCQkJCQkJCWJvb2wJCXJldCA9IHJ1blNoZWxsQ29tbWFuZChzdCwgYXJn dlsxXSwgYXJndiArIDIsIGFyZ2MgLSAyKTsKKwkJCQkJCQlib29sCQlyZXQgPSBydW5TaGVsbENv bW1hbmQoJnN0LT52YXJpYWJsZXMsCisJCQkJCQkJCQkJCQkJCQkgIGFyZ3ZbMV0sIGFyZ3YgKyAy LAorCQkJCQkJCQkJCQkJCQkJICBhcmdjIC0gMik7CiAKIAkJCQkJCQlpZiAodGltZXJfZXhjZWVk ZWQpIC8qIHRpbWVvdXQgKi8KIAkJCQkJCQl7CkBAIC0yNDc5LDggKzMwMjIsMTIgQEAgZG9DdXN0 b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJCQkJCX0K IAkJCQkJCQllbHNlIGlmICghcmV0KQkvKiBvbiBlcnJvciAqLwogCQkJCQkJCXsKLQkJCQkJCQkJ Y29tbWFuZEZhaWxlZChzdCwgImV4ZWN1dGlvbiBvZiBtZXRhLWNvbW1hbmQgJ3NldHNoZWxsJyBm YWlsZWQiKTsKLQkJCQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX0FCT1JURUQ7CisJCQkJCQkJCWZh aWx1cmVfc3RhdHVzID0gTUVUQV9DT01NQU5EX0ZBSUxVUkU7CisJCQkJCQkJCWlmIChkZWJ1Z19m YWlscykKKwkJCQkJCQkJCXByaW50X2ZhaWx1cmUoc3QsIGZhaWx1cmVfc3RhdHVzLAorCQkJCQkJ CQkJCQkJICAiZXhlY3V0aW9uIG9mIG1ldGEtY29tbWFuZCAnc2V0c2hlbGwnIGZhaWxlZFxuIik7 CisKKwkJCQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX0VORF9DT01NQU5EOwogCQkJCQkJCQlicmVh azsKIAkJCQkJCQl9CiAJCQkJCQkJZWxzZQpAQCAtMjQ5MCw3ICszMDM3LDkgQEAgZG9DdXN0b20o VFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJCQkJfQogCQkJ CQkJZWxzZSBpZiAoY29tbWFuZC0+bWV0YSA9PSBNRVRBX1NIRUxMKQogCQkJCQkJewotCQkJCQkJ CWJvb2wJCXJldCA9IHJ1blNoZWxsQ29tbWFuZChzdCwgTlVMTCwgYXJndiArIDEsIGFyZ2MgLSAx KTsKKwkJCQkJCQlib29sCQlyZXQgPSBydW5TaGVsbENvbW1hbmQoJnN0LT52YXJpYWJsZXMsCisJ CQkJCQkJCQkJCQkJCQkgIE5VTEwsIGFyZ3YgKyAxLAorCQkJCQkJCQkJCQkJCQkJICBhcmdjIC0g MSk7CiAKIAkJCQkJCQlpZiAodGltZXJfZXhjZWVkZWQpIC8qIHRpbWVvdXQgKi8KIAkJCQkJCQl7 CkBAIC0yNDk5LDggKzMwNDgsMTIgQEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAq c3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJCQkJCX0KIAkJCQkJCQllbHNlIGlmICghcmV0KQkvKiBv biBlcnJvciAqLwogCQkJCQkJCXsKLQkJCQkJCQkJY29tbWFuZEZhaWxlZChzdCwgImV4ZWN1dGlv biBvZiBtZXRhLWNvbW1hbmQgJ3NoZWxsJyBmYWlsZWQiKTsKLQkJCQkJCQkJc3QtPnN0YXRlID0g Q1NUQVRFX0FCT1JURUQ7CisJCQkJCQkJCWZhaWx1cmVfc3RhdHVzID0gTUVUQV9DT01NQU5EX0ZB SUxVUkU7CisJCQkJCQkJCWlmIChkZWJ1Z19mYWlscykKKwkJCQkJCQkJCXByaW50X2ZhaWx1cmUo c3QsIGZhaWx1cmVfc3RhdHVzLAorCQkJCQkJCQkJCQkJICAiZXhlY3V0aW9uIG9mIG1ldGEtY29t bWFuZCAnc2hlbGwnIGZhaWxlZFxuIik7CisKKwkJCQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX0VO RF9DT01NQU5EOwogCQkJCQkJCQlicmVhazsKIAkJCQkJCQl9CiAJCQkJCQkJZWxzZQpAQCAtMjUy NSwzOCArMzA3OCwxMzMgQEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0 YXRzRGF0YSAqYWdnKQogCQkJCSAqIFdhaXQgZm9yIHRoZSBjdXJyZW50IFNRTCBjb21tYW5kIHRv IGNvbXBsZXRlCiAJCQkJICovCiAJCQljYXNlIENTVEFURV9XQUlUX1JFU1VMVDoKLQkJCQljb21t YW5kID0gc3FsX3NjcmlwdFtzdC0+dXNlX2ZpbGVdLmNvbW1hbmRzW3N0LT5jb21tYW5kXTsKLQkJ CQlpZiAoZGVidWcpCi0JCQkJCWZwcmludGYoc3RkZXJyLCAiY2xpZW50ICVkIHJlY2VpdmluZ1xu Iiwgc3QtPmlkKTsKLQkJCQlpZiAoIVBRY29uc3VtZUlucHV0KHN0LT5jb24pKQotCQkJCXsJCQkJ LyogdGhlcmUncyBzb21ldGhpbmcgd3JvbmcgKi8KLQkJCQkJY29tbWFuZEZhaWxlZChzdCwgInBl cmhhcHMgdGhlIGJhY2tlbmQgZGllZCB3aGlsZSBwcm9jZXNzaW5nIik7Ci0JCQkJCXN0LT5zdGF0 ZSA9IENTVEFURV9BQk9SVEVEOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJaWYgKFBRaXNCdXN5 KHN0LT5jb24pKQotCQkJCQlyZXR1cm47CQkvKiBkb24ndCBoYXZlIHRoZSB3aG9sZSByZXN1bHQg eWV0ICovCi0KLQkJCQkvKgotCQkJCSAqIFJlYWQgYW5kIGRpc2NhcmQgdGhlIHF1ZXJ5IHJlc3Vs dDsKLQkJCQkgKi8KLQkJCQlyZXMgPSBQUWdldFJlc3VsdChzdC0+Y29uKTsKLQkJCQlzd2l0Y2gg KFBRcmVzdWx0U3RhdHVzKHJlcykpCisJCQljYXNlIENTVEFURV9FTkRfRkFJTEVEX1RYX0JMT0NL X1dBSVQ6CiAJCQkJewotCQkJCQljYXNlIFBHUkVTX0NPTU1BTkRfT0s6Ci0JCQkJCWNhc2UgUEdS RVNfVFVQTEVTX09LOgotCQkJCQljYXNlIFBHUkVTX0VNUFRZX1FVRVJZOgotCQkJCQkJLyogT0sg Ki8KLQkJCQkJCVBRY2xlYXIocmVzKTsKLQkJCQkJCWRpc2NhcmRfcmVzcG9uc2Uoc3QpOwotCQkJ CQkJc3QtPnN0YXRlID0gQ1NUQVRFX0VORF9DT01NQU5EOwotCQkJCQkJYnJlYWs7Ci0JCQkJCWRl ZmF1bHQ6Ci0JCQkJCQljb21tYW5kRmFpbGVkKHN0LCBQUWVycm9yTWVzc2FnZShzdC0+Y29uKSk7 Ci0JCQkJCQlQUWNsZWFyKHJlcyk7CisJCQkJCWNoYXIJICAgKnNxbFN0YXRlOworCisJCQkJCWNv bW1hbmQgPSBzcWxfc2NyaXB0W3N0LT51c2VfZmlsZV0uY29tbWFuZHNbc3QtPmNvbW1hbmRdOwor CisJCQkJCWlmIChkZWJ1ZykKKwkJCQkJCWZwcmludGYoc3RkZXJyLCAiY2xpZW50ICVkIHJlY2Vp dmluZ1xuIiwgc3QtPmlkKTsKKwkJCQkJaWYgKCFQUWNvbnN1bWVJbnB1dChzdC0+Y29uKSkKKwkJ CQkJewkJCQkvKiB0aGVyZSdzIHNvbWV0aGluZyB3cm9uZyAqLworCQkJCQkJY29tbWFuZEZhaWxl ZChzdCwgInBlcmhhcHMgdGhlIGJhY2tlbmQgZGllZCB3aGlsZSBwcm9jZXNzaW5nIik7CiAJCQkJ CQlzdC0+c3RhdGUgPSBDU1RBVEVfQUJPUlRFRDsKIAkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJ CWlmIChQUWlzQnVzeShzdC0+Y29uKSkKKwkJCQkJCXJldHVybjsJCS8qIGRvbid0IGhhdmUgdGhl IHdob2xlIHJlc3VsdCB5ZXQgKi8KKworCQkJCQkvKgorCQkJCQkgKiBSZWFkIGFuZCBkaXNjYXJk IHRoZSBxdWVyeSByZXN1bHQ7CisJCQkJCSAqLworCQkJCQlyZXMgPSBQUWdldFJlc3VsdChzdC0+ Y29uKTsKKworCQkJCQlzcWxTdGF0ZSA9IFBRcmVzdWx0RXJyb3JGaWVsZChyZXMsIFBHX0RJQUdf U1FMU1RBVEUpOworCQkJCQlmYWlsdXJlX3N0YXR1cyA9IE5PX0ZBSUxVUkU7CisJCQkJCWlmIChz cWxTdGF0ZSAmJiAqc3FsU3RhdGUpCisJCQkJCXsKKwkJCQkJCWlmIChzdHJjbXAoc3FsU3RhdGUs CisJCQkJCQkJCSAgIEVSUkNPREVfVF9SX1NFUklBTElaQVRJT05fRkFJTFVSRSkgPT0gMCkKKwkJ CQkJCQlmYWlsdXJlX3N0YXR1cyA9IFNFUklBTElaQVRJT05fRkFJTFVSRTsKKwkJCQkJCWVsc2Ug aWYgKHN0cmNtcChzcWxTdGF0ZSwKKwkJCQkJCQkJCQlFUlJDT0RFX1RfUl9ERUFETE9DS19ERVRF Q1RFRCkgPT0gMCkKKwkJCQkJCQlmYWlsdXJlX3N0YXR1cyA9IERFQURMT0NLX0ZBSUxVUkU7CisJ CQkJCQllbHNlIGlmIChzdHJjbXAoc3FsU3RhdGUsCisJCQkJCQkJCQkJRVJSQ09ERV9JTl9GQUlM RURfU1FMX1RSQU5TQUNUSU9OKSA9PSAwKQorCQkJCQkJCWZhaWx1cmVfc3RhdHVzID0gSU5fRkFJ TEVEX1NRTF9UUkFOU0FDVElPTjsKKwkJCQkJCWVsc2UKKwkJCQkJCQlmYWlsdXJlX3N0YXR1cyA9 IEFOT1RIRVJfRkFJTFVSRTsKKwkJCQkJfQorCisJCQkJCXN3aXRjaCAoUFFyZXN1bHRTdGF0dXMo cmVzKSkKKwkJCQkJeworCQkJCQkJY2FzZSBQR1JFU19DT01NQU5EX09LOgorCQkJCQkJY2FzZSBQ R1JFU19UVVBMRVNfT0s6CisJCQkJCQljYXNlIFBHUkVTX0VNUFRZX1FVRVJZOgorCQkJCQkJCS8q IE9LICovCisJCQkJCQkJaWYgKGNvbW1hbmQtPnR5cGUgPT0gU1FMX0NPTU1BTkQgJiYKKwkJCQkJ CQkJc3QtPnN1YmNtZCA8IGNvbW1hbmQtPm51bV9zdWJjbWRzIC0gMSkKKwkJCQkJCQl7CisJCQkJ CQkJCS8qCisJCQkJCQkJCSAqIFdhaXQgZm9yIHRoZSByZXN1bHRzIGZvciB0aGUgb3RoZXIgbm9u LWVtcHR5CisJCQkJCQkJCSAqIHN1YmNvbW1hbmRzLgorCQkJCQkJCQkgKi8KKwkJCQkJCQkJUFFj bGVhcihyZXMpOworCQkJCQkJCQlzdC0+c3ViY21kKys7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJ CX0KKworCQkJCQkJCS8qCisJCQkJCQkJICogT3RoZXJ3aXNlIGZpbmlzaCBwcm9jZXNzaW5nIHRo ZSBjb21tYW5kIChmYWlsdXJlcworCQkJCQkJCSAqIGFuZCBlcnJvcnMgd2lsbCBiZSBwcm9jZXNz ZWQgbGF0ZXIpLgorCQkJCQkJCSAqLworCQkJCQkJY2FzZSBQR1JFU19OT05GQVRBTF9FUlJPUjoK KwkJCQkJCWNhc2UgUEdSRVNfRkFUQUxfRVJST1I6CisJCQkJCQkJeworCQkJCQkJCQlQR1RyYW5z YWN0aW9uU3RhdHVzVHlwZSB0eF9zdGF0dXM7CisJCQkJCQkJCWNoYXIJCWJ1ZmZlclsyNTZdOwor CisJCQkJCQkJCVBRY2xlYXIocmVzKTsKKwkJCQkJCQkJZGlzY2FyZF9yZXNwb25zZShzdCk7CisK KwkJCQkJCQkJdHhfc3RhdHVzID0gUFF0cmFuc2FjdGlvblN0YXR1cyhzdC0+Y29uKTsKKwkJCQkJ CQkJc3dpdGNoICh0eF9zdGF0dXMpCisJCQkJCQkJCXsKKwkJCQkJCQkJCWNhc2UgUFFUUkFOU19J RExFOgorCQkJCQkJCQkJCXN0LT5pbl90eF9ibG9jayA9IGZhbHNlOworCQkJCQkJCQkJCWJyZWFr OworCQkJCQkJCQkJY2FzZSBQUVRSQU5TX0lOVFJBTlM6CisJCQkJCQkJCQljYXNlIFBRVFJBTlNf SU5FUlJPUjoKKwkJCQkJCQkJCQlzdC0+aW5fdHhfYmxvY2sgPSB0cnVlOworCQkJCQkJCQkJCWJy ZWFrOworCQkJCQkJCQkJY2FzZSBQUVRSQU5TX1VOS05PV046CisJCQkJCQkJCQkJLyoKKwkJCQkJ CQkJCQkgKiBQUVRSQU5TX1VOS05PV04gaXMgZXhwZWN0ZWQgZ2l2ZW4gYQorCQkJCQkJCQkJCSAq IGJyb2tlbiBjb25uZWN0aW9uLgorCQkJCQkJCQkJCSAqLworCQkJCQkJCQkJCWlmIChQUXN0YXR1 cyhzdC0+Y29uKSA9PSBDT05ORUNUSU9OX0JBRCkKKwkJCQkJCQkJCQl7CQkvKiB0aGVyZSdzIHNv bWV0aGluZyB3cm9uZyAqLworCQkJCQkJCQkJCQljb21tYW5kRmFpbGVkKHN0LAorCQkJCQkJCQkJ CQkJCQkgICJwZXJoYXBzIHRoZSBiYWNrZW5kIGRpZWQgd2hpbGUgcHJvY2Vzc2luZyIpOworCQkJ CQkJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfQUJPUlRFRDsKKwkJCQkJCQkJCQkJZ290byBkb25l OworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCWNhc2UgUFFUUkFOU19BQ1RJVkU6CisJCQkJCQkJCQlk ZWZhdWx0OgorCQkJCQkJCQkJCS8qCisJCQkJCQkJCQkJICogV2UgY2Fubm90IGZpbmQgb3V0IHdo ZXRoZXIgd2UgYXJlIGluCisJCQkJCQkJCQkJICogYSB0cmFuc2FjdGlvbiBibG9jayBvciBub3Qu IEludGVybmFsCisJCQkJCQkJCQkJICogZXJyb3Igd2hpY2ggc2hvdWxkIG5ldmVyIG9jY3VyLgor CQkJCQkJCQkJCSAqLworCQkJCQkJCQkJCXNwcmludGYoYnVmZmVyLAorCQkJCQkJCQkJCQkJInVu ZXhwZWN0ZWQgdHJhbnNhY3Rpb24gc3RhdHVzICVkIiwKKwkJCQkJCQkJCQkJCXR4X3N0YXR1cyk7 CisJCQkJCQkJCQkJY29tbWFuZEZhaWxlZChzdCwgYnVmZmVyKTsKKwkJCQkJCQkJCQlzdC0+c3Rh dGUgPSBDU1RBVEVfQUJPUlRFRDsKKwkJCQkJCQkJCQlnb3RvIGRvbmU7CisJCQkJCQkJCX0KKwor CQkJCQkJCQlpZiAoZmFpbHVyZV9zdGF0dXMgIT0gTk9fRkFJTFVSRSAmJiBkZWJ1Z19mYWlscykK KwkJCQkJCQkJCXByaW50X2ZhaWx1cmUoc3QsIGZhaWx1cmVfc3RhdHVzLAorCQkJCQkJCQkJCQkJ ICBQUWVycm9yTWVzc2FnZShzdC0+Y29uKSk7CisKKwkJCQkJCQkJaWYgKHN0LT5zdGF0ZSA9PQor CQkJCQkJCQkJQ1NUQVRFX0VORF9GQUlMRURfVFhfQkxPQ0tfV0FJVCkKKwkJCQkJCQkJCXN0LT5z dGF0ZSA9IENTVEFURV9FTkRfRkFJTEVEX1RYX0JMT0NLX0VORDsKKwkJCQkJCQkJZWxzZQorCQkJ CQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX0VORF9DT01NQU5EOworCQkJCQkJCX0KKwkJCQkJCQli cmVhazsKKwkJCQkJCWRlZmF1bHQ6CisJCQkJCQkJY29tbWFuZEZhaWxlZChzdCwgUFFlcnJvck1l c3NhZ2Uoc3QtPmNvbikpOworCQkJCQkJCVBRY2xlYXIocmVzKTsKKwkJCQkJCQlzdC0+c3RhdGUg PSBDU1RBVEVfQUJPUlRFRDsKKwkJCQkJCQlicmVhazsKKwkJCQkJfQogCQkJCX0KKworZG9uZToK IAkJCQlicmVhazsKIAogCQkJCS8qCkBAIC0yNTc4LDI2ICszMjI2LDE3NiBAQCBkb0N1c3RvbShU U3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJICogRW5kIG9m IGNvbW1hbmQ6IHJlY29yZCBzdGF0cyBhbmQgcHJvY2VlZCB0byBuZXh0IGNvbW1hbmQuCiAJCQkJ ICovCiAJCQljYXNlIENTVEFURV9FTkRfQ09NTUFORDoKKwkJCWNhc2UgQ1NUQVRFX0VORF9GQUlM RURfVFhfQkxPQ0tfRU5EOgorCQkJCWNvbW1hbmQgPSBzcWxfc2NyaXB0W3N0LT51c2VfZmlsZV0u Y29tbWFuZHNbc3QtPmNvbW1hbmRdOworCisJCQkJLyogcHJvY2VzcyBhIGZhaWx1cmUgaWYgd2Ug aGF2ZSBpdCAqLworCQkJCWlmIChmYWlsdXJlX3N0YXR1cyAhPSBOT19GQUlMVVJFKQorCQkJCXsK KwkJCQkJaWYgKHN0LT5zdGF0ZSA9PSBDU1RBVEVfRU5EX0ZBSUxFRF9UWF9CTE9DS19FTkQpCisJ CQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfRU5EX0ZBSUxFRF9UWF9CTE9DS19GQUlMVVJFOworCQkJ CQllbHNlCisJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfRkFJTFVSRTsKKwkJCQkJYnJlYWs7CisJ CQkJfQogCiAJCQkJLyoKIAkJCQkgKiBjb21tYW5kIGNvbXBsZXRlZDogYWNjdW11bGF0ZSBwZXIt Y29tbWFuZCBleGVjdXRpb24gdGltZXMKIAkJCQkgKiBpbiB0aHJlYWQtbG9jYWwgZGF0YSBzdHJ1 Y3R1cmUsIGlmIHBlci1jb21tYW5kIGxhdGVuY2llcwogCQkJCSAqIGFyZSByZXF1ZXN0ZWQuCiAJ CQkJICovCi0JCQkJaWYgKGlzX2xhdGVuY2llcykKKwkJCQlpZiAocmVwb3J0X3Blcl9jb21tYW5k KQogCQkJCXsKIAkJCQkJaWYgKElOU1RSX1RJTUVfSVNfWkVSTyhub3cpKQogCQkJCQkJSU5TVFJf VElNRV9TRVRfQ1VSUkVOVChub3cpOwogCiAJCQkJCS8qIFhYWCBjb3VsZCB1c2UgYSBtdXRleCBo ZXJlLCBidXQgd2UgY2hvb3NlIG5vdCB0byAqLwotCQkJCQljb21tYW5kID0gc3FsX3NjcmlwdFtz dC0+dXNlX2ZpbGVdLmNvbW1hbmRzW3N0LT5jb21tYW5kXTsKIAkJCQkJYWRkVG9TaW1wbGVTdGF0 cygmY29tbWFuZC0+c3RhdHMsCiAJCQkJCQkJCQkgSU5TVFJfVElNRV9HRVRfRE9VQkxFKG5vdykg LQogCQkJCQkJCQkJIElOU1RSX1RJTUVfR0VUX0RPVUJMRShzdC0+c3RtdF9iZWdpbikpOwogCQkJ CX0KIAotCQkJCS8qIEdvIGFoZWFkIHdpdGggbmV4dCBjb21tYW5kICovCi0JCQkJc3QtPmNvbW1h bmQrKzsKKwkJCQlpZiAoc3QtPnN0YXRlID09IENTVEFURV9FTkRfRkFJTEVEX1RYX0JMT0NLX0VO RCkKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIFRoZSBmYWlsZWQgdHJhbnNhY3Rpb24gYmxvY2sg aGFzIGVuZGVkLiBSZXRyeSBpdCBpZgorCQkJCQkgKiBwb3NzaWJsZS4KKwkJCQkJICovCisJCQkJ CUFzc2VydChzdC0+bGFzdF9mYWlsdXJlLmNvbW1hbmQgPj0gMCk7CisKKwkJCQkJZmFpbHVyZV9z dGF0dXMgPSBzdC0+bGFzdF9mYWlsdXJlLnN0YXR1czsKKwkJCQkJc3QtPmNvbW1hbmQgPSBzdC0+ bGFzdF9mYWlsdXJlLmNvbW1hbmQ7CisJCQkJCXN0LT5zdWJjbWQgPSBzdC0+bGFzdF9mYWlsdXJl LnN1YmNtZDsKKwkJCQkJc3QtPndhc19pbl90eF9ibG9jayA9IHN0LT5sYXN0X2ZhaWx1cmUud2Fz X2luX3R4X2Jsb2NrOworCisJCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9FTkRfRkFJTEVEX1RYX0JM T0NLX1JFVFJZOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkvKiBHbyBhaGVhZCB3aXRo IG5leHQgY29tbWFuZCAqLworCQkJCQlzdC0+Y29tbWFuZCsrOworCQkJCQlzdC0+c3RhdGUgPSBD U1RBVEVfU1RBUlRfQ09NTUFORDsKKwkJCQl9CisKKwkJCQlicmVhazsKKworCQkJCS8qCisJCQkJ ICogUmVwb3J0IGFib3V0IGZhaWx1cmUgYW5kIGVuZCB0aGUgZmFpbGVkIHRyYW5zYWN0aW9uIGJs b2NrLgorCQkJCSAqLworCQkJY2FzZSBDU1RBVEVfRkFJTFVSRToKKwkJCWNhc2UgQ1NUQVRFX0VO RF9GQUlMRURfVFhfQkxPQ0tfRkFJTFVSRToKKwkJCQljb21tYW5kID0gc3FsX3NjcmlwdFtzdC0+ dXNlX2ZpbGVdLmNvbW1hbmRzW3N0LT5jb21tYW5kXTsKKworCQkJCWlmIChjYW5SZXRyeShzdCwg ZmFpbHVyZV9zdGF0dXMpKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogVGhlIGZhaWxlZCB0cmFu c2FjdGlvbiB3aWxsIGJlIHJldHJpZWQuIFNvIGFjY3VtdWxhdGUgdGhlCisJCQkJCSAqIHJldHJ5 IGZvciB0aGUgY29tbWFuZCBhbmQgZm9yIHRoZSBjdXJyZW50IHNjcmlwdAorCQkJCQkgKiBleGVj dXRpb24uCisJCQkJCSAqLworCQkJCQlzdC0+cmV0cmllcysrOworCQkJCQlpZiAocmVwb3J0X3Bl cl9jb21tYW5kKQorCQkJCQkJY29tbWFuZC0+cmV0cmllcysrOworCQkJCX0KKwkJCQllbHNlCisJ CQkJeworCQkJCQkvKgorCQkJCQkgKiBXZSB3aWxsIG5vdCBiZSBhYmxlIHRvIHJldHJ5IHRoaXMg ZmFpbGVkIHRyYW5zYWN0aW9uLiBTbworCQkJCQkgKiBhY2N1bXVsYXRlIHRoZSBlcnJvciBmb3Ig dGhlIGNvbW1hbmQgYW5kIGZvciB0aGUgY3VycmVudAorCQkJCQkgKiBzY3JpcHQgZXhlY3V0aW9u LgorCQkJCQkgKi8KKwkJCQkJc3QtPmVycm9yID0gdHJ1ZTsKKwkJCQkJaWYgKGZhaWx1cmVfc3Rh dHVzICE9IElOX0ZBSUxFRF9TUUxfVFJBTlNBQ1RJT04pCisJCQkJCQlzdC0+ZXJyb3Jfbm90X2lu X2ZhaWxlZF90eCA9IHRydWU7CisKKwkJCQkJaWYgKHJlcG9ydF9wZXJfY29tbWFuZCkKKwkJCQkJ eworCQkJCQkJY29tbWFuZC0+ZXJyb3JzKys7CisJCQkJCQlpZiAoZmFpbHVyZV9zdGF0dXMgPT0g SU5fRkFJTEVEX1NRTF9UUkFOU0FDVElPTikKKwkJCQkJCQljb21tYW5kLT5lcnJvcnNfaW5fZmFp bGVkX3R4Kys7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlpZiAoc3QtPnN0YXRlID09IENTVEFURV9F TkRfRkFJTEVEX1RYX0JMT0NLX0ZBSUxVUkUpCisJCQkJeworCQkJCQkvKiBHbyBhaGVhZCB3aXRo IG5leHQgY29tbWFuZC4gKi8KKwkJCQkJc3QtPmNvbW1hbmQrKzsKKwkJCQkJc3QtPnN0YXRlID0g Q1NUQVRFX1NUQVJUX0NPTU1BTkQ7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCS8qCisJCQkJ ICogUmVtZW1iZXIgdGhlIGN1cnJlbnQgY29tbWFuZCBhbmQgaXRzIGZhaWx1cmUgc3RhdHVzIGlm IHdlIHRyeQorCQkJCSAqIHRvIGVuZCBhIGZhaWxlZCB0cmFuc2FjdGlvbiBibG9jay4KKwkJCQkg Ki8KKwkJCQlzdC0+bGFzdF9mYWlsdXJlLnN0YXR1cyA9IGZhaWx1cmVfc3RhdHVzOworCQkJCXN0 LT5sYXN0X2ZhaWx1cmUuY29tbWFuZCA9IHN0LT5jb21tYW5kOworCQkJCXN0LT5sYXN0X2ZhaWx1 cmUuc3ViY21kID0gc3QtPnN1YmNtZDsKKwkJCQlzdC0+bGFzdF9mYWlsdXJlLndhc19pbl90eF9i bG9jayA9IHN0LT53YXNfaW5fdHhfYmxvY2s7CisKKwkJCQlpZiAoc3QtPmluX3R4X2Jsb2NrKQor CQkJCXsKKwkJCQkJaWYgKGNhbkVuZEZhaWxlZFR4QmxvY2soc3QpKQorCQkJCQl7CisJCQkJCQkv KiBUcnkgdG8gZW5kIHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24gYmxvY2suICovCisJCQkJCQlzdC0+ Y29tbWFuZCA9IGNvbW1hbmQtPnR4X2Jsb2NrX2VuZDsKKwkJCQkJCXN0LT5zdGF0ZSA9IENTVEFU RV9FTkRfRkFJTEVEX1RYX0JMT0NLX1NUQVJUOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJewor CQkJCQkJLyoKKwkJCQkJCSAqIFdlIGNhbm5vdCBjb21wbGV0ZSBhIGZhaWxlZCB0cmFuc2FjdGlv biBibG9jay4gU28gZ28KKwkJCQkJCSAqIGFoZWFkIHdpdGggbmV4dCBjb21tYW5kLgorCQkJCQkJ ICovCisJCQkJCQlzdC0+Y29tbWFuZCsrOworCQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX1NUQVJU X0NPTU1BTkQ7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJLyogcmV0cnkg dGhlIGZhaWxlZCB0cmFuc2FjdGlvbiBpZiBwb3NzaWJsZSAqLworCQkJCQlzdC0+c3RhdGUgPSBD U1RBVEVfUkVUUlk7CisJCQkJfQorCisJCQkJYnJlYWs7CisKKwkJCQkvKgorCQkJCSAqIFJldHJ5 IHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24gaWYgcG9zc2libGUuCisJCQkJICovCisJCQljYXNlIENT VEFURV9SRVRSWToKKwkJCWNhc2UgQ1NUQVRFX0VORF9GQUlMRURfVFhfQkxPQ0tfUkVUUlk6CisJ CQkJY29tbWFuZCA9IHNxbF9zY3JpcHRbc3QtPnVzZV9maWxlXS5jb21tYW5kc1tzdC0+Y29tbWFu ZF07CisKKwkJCQlpZiAoY2FuUmV0cnkoc3QsIGZhaWx1cmVfc3RhdHVzKSkKKwkJCQl7CisJCQkJ CXN0LT5yZXRyeV9zdGF0ZS5yZXRyaWVzKys7CisJCQkJCWlmIChkZWJ1ZykKKwkJCQkJCWZwcmlu dGYoc3RkZXJyLCAiY2xpZW50ICVkIHJlcGVhdHMgdGhlIGZhaWxlZCB0cmFuc2FjdGlvbiAodHJ5 ICVkLyVkKVxuIiwKKwkJCQkJCQkJc3QtPmlkLAorCQkJCQkJCQlzdC0+cmV0cnlfc3RhdGUucmV0 cmllcyArIDEsCisJCQkJCQkJCW1heF90cmllcyk7CisKKwkJCQkJc3QtPmNvbW1hbmQgPSBzdC0+ cmV0cnlfc3RhdGUuY29tbWFuZDsKKwkJCQkJbWVtY3B5KHN0LT5yYW5kb21fc3RhdGUsIHN0LT5y ZXRyeV9zdGF0ZS5yYW5kb21fc3RhdGUsCisJCQkJCQkgICBzaXplb2YodW5zaWduZWQgc2hvcnQp ICogMyk7CisJCQkJCWNvcHlWYXJpYWJsZXMoJnN0LT52YXJpYWJsZXMsICZzdC0+cmV0cnlfc3Rh dGUudmFyaWFibGVzKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICog R28gYWhlYWQgd2l0aCBuZXh0IGNvbW1hbmQgYWZ0ZXIgdGhlIGZhaWxlZCB0cmFuc2FjdGlvbi4K KwkJCQkJICovCisJCQkJCWlmIChzdC0+c3RhdGUgPT0gQ1NUQVRFX0VORF9GQUlMRURfVFhfQkxP Q0tfUkVUUlkpCisJCQkJCXsKKwkJCQkJCUFzc2VydChjb21tYW5kLT50eF9ibG9ja19lbmQgPj0g MCk7CisJCQkJCQlzdC0+Y29tbWFuZCA9IGNvbW1hbmQtPnR4X2Jsb2NrX2VuZCArIDE7CisJCQkJ CX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlzdC0+Y29tbWFuZCsrOworCQkJCQl9CisJCQkJ fQorCiAJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX1NUQVJUX0NPTU1BTkQ7CiAJCQkJYnJlYWs7CiAK QEAgLTI2ODAsNyArMzQ3OCw3IEBAIGRvTG9nKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LAog CSAqIHRvIHRoZSByYW5kb20gc2FtcGxlLgogCSAqLwogCWlmIChzYW1wbGVfcmF0ZSAhPSAwLjAg JiYKLQkJcGdfZXJhbmQ0OCh0aHJlYWQtPnJhbmRvbV9zdGF0ZSkgPiBzYW1wbGVfcmF0ZSkKKwkJ cGdfZXJhbmQ0OChzdC0+cmFuZG9tX3N0YXRlKSA+IHNhbXBsZV9yYXRlKQogCQlyZXR1cm47CiAK IAkvKiBzaG91bGQgd2UgYWdncmVnYXRlIHRoZSByZXN1bHRzIG9yIG5vdD8gKi8KQEAgLTI2OTYs MTMgKzM0OTQsMTUgQEAgZG9Mb2coVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsCiAJCXdoaWxl IChhZ2ctPnN0YXJ0X3RpbWUgKyBhZ2dfaW50ZXJ2YWwgPD0gbm93KQogCQl7CiAJCQkvKiBwcmlu dCBhZ2dyZWdhdGVkIHJlcG9ydCB0byBsb2dmaWxlICovCi0JCQlmcHJpbnRmKGxvZ2ZpbGUsICIl bGQgIiBJTlQ2NF9GT1JNQVQgIiAlLjBmICUuMGYgJS4wZiAlLjBmIiwKKwkJCWZwcmludGYobG9n ZmlsZSwgIiVsZCAiIElOVDY0X0ZPUk1BVCAiICUuMGYgJS4wZiAlLjBmICUuMGYgIiBJTlQ2NF9G T1JNQVQgIiAiIElOVDY0X0ZPUk1BVCwKIAkJCQkJKGxvbmcpIGFnZy0+c3RhcnRfdGltZSwKIAkJ CQkJYWdnLT5jbnQsCiAJCQkJCWFnZy0+bGF0ZW5jeS5zdW0sCiAJCQkJCWFnZy0+bGF0ZW5jeS5z dW0yLAogCQkJCQlhZ2ctPmxhdGVuY3kubWluLAotCQkJCQlhZ2ctPmxhdGVuY3kubWF4KTsKKwkJ CQkJYWdnLT5sYXRlbmN5Lm1heCwKKwkJCQkJYWdnLT5lcnJvcnMsCisJCQkJCWFnZy0+ZXJyb3Jz X2luX2ZhaWxlZF90eCk7CiAJCQlpZiAodGhyb3R0bGVfZGVsYXkpCiAJCQl7CiAJCQkJZnByaW50 Zihsb2dmaWxlLCAiICUuMGYgJS4wZiAlLjBmICUuMGYiLApAQCAtMjcxMyw2ICszNTEzLDEwIEBA IGRvTG9nKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LAogCQkJCWlmIChsYXRlbmN5X2xpbWl0 KQogCQkJCQlmcHJpbnRmKGxvZ2ZpbGUsICIgIiBJTlQ2NF9GT1JNQVQsIGFnZy0+c2tpcHBlZCk7 CiAJCQl9CisJCQlpZiAobWF4X3RyaWVzID4gMSkKKwkJCQlmcHJpbnRmKGxvZ2ZpbGUsICIgIiBJ TlQ2NF9GT1JNQVQgIiAiIElOVDY0X0ZPUk1BVCwKKwkJCQkJCWFnZy0+cmV0cmllZCwKKwkJCQkJ CWFnZy0+cmV0cmllcyk7CiAJCQlmcHV0YygnXG4nLCBsb2dmaWxlKTsKIAogCQkJLyogcmVzZXQg ZGF0YSBhbmQgbW92ZSB0byBuZXh0IGludGVydmFsICovCkBAIC0yNzIwLDcgKzM1MjQsOCBAQCBk b0xvZyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwKIAkJfQogCiAJCS8qIGFjY3VtdWxhdGUg dGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gKi8KLQkJYWNjdW1TdGF0cyhhZ2csIHNraXBwZWQsIGxh dGVuY3ksIGxhZyk7CisJCWFjY3VtU3RhdHMoYWdnLCBza2lwcGVkLCBzdC0+ZXJyb3IsIGxhdGVu Y3ksIGxhZywKKwkJCQkgICBzdC0+ZXJyb3Jfbm90X2luX2ZhaWxlZF90eCwgc3QtPnJldHJpZXMp OwogCX0KIAllbHNlCiAJewpAQCAtMjczMiwxMiArMzUzNywyNSBAQCBkb0xvZyhUU3RhdGUgKnRo cmVhZCwgQ1N0YXRlICpzdCwKIAkJCWZwcmludGYobG9nZmlsZSwgIiVkICIgSU5UNjRfRk9STUFU ICIgc2tpcHBlZCAlZCAlbGQgJWxkIiwKIAkJCQkJc3QtPmlkLCBzdC0+Y250LCBzdC0+dXNlX2Zp bGUsCiAJCQkJCShsb25nKSB0di50dl9zZWMsIChsb25nKSB0di50dl91c2VjKTsKKwkJZWxzZSBp ZiAoc3QtPmVycm9yKQorCQl7CisJCQlpZiAoc3QtPmVycm9yX25vdF9pbl9mYWlsZWRfdHgpCisJ CQkJZnByaW50Zihsb2dmaWxlLCAiJWQgIiBJTlQ2NF9GT1JNQVQgIiBmYWlsZWQgJWQgJWxkICVs ZCIsCisJCQkJCQlzdC0+aWQsIHN0LT5jbnQsIHN0LT51c2VfZmlsZSwKKwkJCQkJCShsb25nKSB0 di50dl9zZWMsIChsb25nKSB0di50dl91c2VjKTsKKwkJCWVsc2UKKwkJCQlmcHJpbnRmKGxvZ2Zp bGUsICIlZCAiIElOVDY0X0ZPUk1BVCAiIGluX2ZhaWxlZF90eCAlZCAlbGQgJWxkIiwKKwkJCQkJ CXN0LT5pZCwgc3QtPmNudCwgc3QtPnVzZV9maWxlLAorCQkJCQkJKGxvbmcpIHR2LnR2X3NlYywg KGxvbmcpIHR2LnR2X3VzZWMpOworCQl9CiAJCWVsc2UKIAkJCWZwcmludGYobG9nZmlsZSwgIiVk ICIgSU5UNjRfRk9STUFUICIgJS4wZiAlZCAlbGQgJWxkIiwKIAkJCQkJc3QtPmlkLCBzdC0+Y250 LCBsYXRlbmN5LCBzdC0+dXNlX2ZpbGUsCiAJCQkJCShsb25nKSB0di50dl9zZWMsIChsb25nKSB0 di50dl91c2VjKTsKIAkJaWYgKHRocm90dGxlX2RlbGF5KQogCQkJZnByaW50Zihsb2dmaWxlLCAi ICUuMGYiLCBsYWcpOworCQlpZiAobWF4X3RyaWVzID4gMSkKKwkJCWZwcmludGYobG9nZmlsZSwg IiAiIElOVDY0X0ZPUk1BVCwgc3QtPnJldHJpZXMpOwogCQlmcHV0YygnXG4nLCBsb2dmaWxlKTsK IAl9CiB9CkBAIC0yNzU3LDcgKzM1NzUsNyBAQCBwcm9jZXNzWGFjdFN0YXRzKFRTdGF0ZSAqdGhy ZWFkLCBDU3RhdGUgKnN0LCBpbnN0cl90aW1lICpub3csCiAJYm9vbAkJdGhyZWFkX2RldGFpbHMg PSBwcm9ncmVzcyB8fCB0aHJvdHRsZV9kZWxheSB8fCBsYXRlbmN5X2xpbWl0LAogCQkJCWRldGFp bGVkID0gdGhyZWFkX2RldGFpbHMgfHwgdXNlX2xvZyB8fCBwZXJfc2NyaXB0X3N0YXRzOwogCi0J aWYgKGRldGFpbGVkICYmICFza2lwcGVkKQorCWlmIChkZXRhaWxlZCAmJiAhc2tpcHBlZCAmJiAh c3QtPmVycm9yKQogCXsKIAkJaWYgKElOU1RSX1RJTUVfSVNfWkVSTygqbm93KSkKIAkJCUlOU1RS X1RJTUVfU0VUX0NVUlJFTlQoKm5vdyk7CkBAIC0yNzcwLDcgKzM1ODgsOCBAQCBwcm9jZXNzWGFj dFN0YXRzKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBpbnN0cl90aW1lICpub3csCiAJaWYg KHRocmVhZF9kZXRhaWxzKQogCXsKIAkJLyoga2VlcCBkZXRhaWxlZCB0aHJlYWQgc3RhdHMgKi8K LQkJYWNjdW1TdGF0cygmdGhyZWFkLT5zdGF0cywgc2tpcHBlZCwgbGF0ZW5jeSwgbGFnKTsKKwkJ YWNjdW1TdGF0cygmdGhyZWFkLT5zdGF0cywgc2tpcHBlZCwgc3QtPmVycm9yLCBsYXRlbmN5LCBs YWcsCisJCQkJICAgc3QtPmVycm9yX25vdF9pbl9mYWlsZWRfdHgsIHN0LT5yZXRyaWVzKTsKIAog CQkvKiBjb3VudCB0cmFuc2FjdGlvbnMgb3ZlciB0aGUgbGF0ZW5jeSBsaW1pdCwgaWYgbmVlZGVk ICovCiAJCWlmIChsYXRlbmN5X2xpbWl0ICYmIGxhdGVuY3kgPiBsYXRlbmN5X2xpbWl0KQpAQCAt Mjc3OCw4ICszNTk3LDkgQEAgcHJvY2Vzc1hhY3RTdGF0cyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRl ICpzdCwgaW5zdHJfdGltZSAqbm93LAogCX0KIAllbHNlCiAJewotCQkvKiBubyBkZXRhaWxlZCBz dGF0cywganVzdCBjb3VudCAqLwotCQl0aHJlYWQtPnN0YXRzLmNudCsrOworCQkvKiBubyBkZXRh aWxlZCBzdGF0cyAqLworCQlhY2N1bVN0YXRzKCZ0aHJlYWQtPnN0YXRzLCBza2lwcGVkLCBzdC0+ ZXJyb3IsIDAsIDAsCisJCQkJICAgc3QtPmVycm9yX25vdF9pbl9mYWlsZWRfdHgsIHN0LT5yZXRy aWVzKTsKIAl9CiAKIAkvKiBjbGllbnQgc3RhdCBpcyBqdXN0IGNvdW50aW5nICovCkBAIC0yNzkw LDcgKzM2MTAsOCBAQCBwcm9jZXNzWGFjdFN0YXRzKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0 LCBpbnN0cl90aW1lICpub3csCiAKIAkvKiBYWFggY291bGQgdXNlIGEgbXV0ZXggaGVyZSwgYnV0 IHdlIGNob29zZSBub3QgdG8gKi8KIAlpZiAocGVyX3NjcmlwdF9zdGF0cykKLQkJYWNjdW1TdGF0 cygmc3FsX3NjcmlwdFtzdC0+dXNlX2ZpbGVdLnN0YXRzLCBza2lwcGVkLCBsYXRlbmN5LCBsYWcp OworCQlhY2N1bVN0YXRzKCZzcWxfc2NyaXB0W3N0LT51c2VfZmlsZV0uc3RhdHMsIHNraXBwZWQs IHN0LT5lcnJvciwKKwkJCQkgICBsYXRlbmN5LCBsYWcsIHN0LT5lcnJvcl9ub3RfaW5fZmFpbGVk X3R4LCBzdC0+cmV0cmllcyk7CiB9CiAKIApAQCAtMzMxOSw2ICs0MTQwLDgyIEBAIHN5bnRheF9l cnJvcihjb25zdCBjaGFyICpzb3VyY2UsIGludCBsaW5lbm8sCiB9CiAKIC8qCisgKiBSZXR1cm5z IHRoZSBzYW1lIHRleHQgd2hlcmUgYWxsIGNvbnRpbnVvdXMgYmxvY2tzIG9mIHdoaXRlc3BhY2Vz IGFyZSByZXBsYWNlZAorICogYnkgb25lIHNwYWNlIHN5bWJvbC4KKyAqCisgKiBSZXR1cm5zIGEg bWFsbG9jJ2Qgc3RyaW5nLgorICovCitzdGF0aWMgY2hhciAqCitub3JtYWxpemVfd2hpdGVzcGFj ZXMoY29uc3QgY2hhciAqdGV4dCkKK3sKKwljb25zdCBjaGFyICpwdHIgPSB0ZXh0OworCWNoYXIJ ICAgKmJ1ZmZlcjsKKwlpbnQJCQlsZW5ndGg7CisKKwlpZiAoIXRleHQpCisJCXJldHVybiBOVUxM OworCisJYnVmZmVyID0gcGdfbWFsbG9jKHN0cmxlbih0ZXh0KSArIDEpOworCWxlbmd0aCA9IDA7 CisKKwl3aGlsZSAoKnB0cikKKwl7CisJCXdoaWxlICgqcHRyICYmICFpc3NwYWNlKCh1bnNpZ25l ZCBjaGFyKSAqcHRyKSkKKwkJCWJ1ZmZlcltsZW5ndGgrK10gPSAqKHB0cisrKTsKKwkJaWYgKGlz c3BhY2UoKHVuc2lnbmVkIGNoYXIpICpwdHIpKQorCQl7CisJCQlidWZmZXJbbGVuZ3RoKytdID0g JyAnOworCQkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpICpwdHIpKQorCQkJCXB0cisr OworCQl9CisJfQorCWJ1ZmZlcltsZW5ndGhdID0gJ1wwJzsKKworCXJldHVybiBidWZmZXI7Cit9 CisKKy8qCisgKiBSZXR1cm5zIHRydWUgaWYgZ2l2ZW4gY29tbWFuZCBzeW50YWN0aWNhbGx5IHN0 YXJ0cyB0aGUgdHJhbnNhY3Rpb24gYmxvY2sgKHdlCisgKiBkb24ndCBjaGVjayBoZXJlIGlmIHRo ZSBsYXN0IHRyYW5zYWN0aW9uIGJsb2NrIGlzIGFscmVhZHkgY29tcGxldGVkKS4KKyAqLworc3Rh dGljIGJvb2wKK2lzX3R4X2Jsb2NrX2JlZ2luKGNvbnN0IGNoYXIgKmNvbW1hbmQpCit7CisJaWYg KCFjb21tYW5kKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gKHBnX3N0cm5jYXNlY21wKGNv bW1hbmQsICJiZWdpbiIsIDUpID09IDAgfHwKKwkJCXBnX3N0cm5jYXNlY21wKGNvbW1hbmQsICJz dGFydCIsIDUpID09IDApOworfQorCisvKgorICogUmV0dXJucyB0cnVlIGlmIGdpdmVuIGNvbW1h bmQgZ2VuZXJhbGx5IGVuZHMgYSB0cmFuc2FjdGlvbiBibG9jayAod2UgZG9uJ3QKKyAqIGNoZWNr IGhlcmUgaWYgdGhlIGxhc3QgdHJhbnNhY3Rpb24gYmxvY2sgaXMgYWxyZWFkeSBjb21wbGV0ZWQp LgorICovCitzdGF0aWMgYm9vbAoraXNfdHhfYmxvY2tfZW5kKGNvbnN0IGNoYXIgKmNvbW1hbmQp Cit7CisJaWYgKCFjb21tYW5kKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAocGdfc3RybmNhc2Vj bXAoY29tbWFuZCwgImVuZCIsIDMpID09IDApCisJCXJldHVybiB0cnVlOworCisJaWYgKHBnX3N0 cm5jYXNlY21wKGNvbW1hbmQsICJjb21taXQiLCA2KSA9PSAwKQorCQlyZXR1cm4gcGdfc3RybmNh c2VjbXAoY29tbWFuZCwgImNvbW1pdCBwcmVwYXJlZCIsIDE1KSAhPSAwOworCisJaWYgKHBnX3N0 cm5jYXNlY21wKGNvbW1hbmQsICJyb2xsYmFjayIsIDgpID09IDApCisJCXJldHVybiAocGdfc3Ry bmNhc2VjbXAoY29tbWFuZCwgInJvbGxiYWNrIHByZXBhcmVkIiwgMTcpICE9IDAgJiYKKwkJCQlw Z19zdHJuY2FzZWNtcChjb21tYW5kLCAicm9sbGJhY2sgdG8iLCAxMSkgIT0gMCk7CisKKwlpZiAo cGdfc3RybmNhc2VjbXAoY29tbWFuZCwgInByZXBhcmUgdHJhbnNhY3Rpb24gIiwgMjApID09IDAp CisJCXJldHVybiAocGdfc3RybmNhc2VjbXAoY29tbWFuZCwgInByZXBhcmUgdHJhbnNhY3Rpb24g KCIsIDIxKSAhPSAwICYmCisJCQkJcGdfc3RybmNhc2VjbXAoY29tbWFuZCwgInByZXBhcmUgdHJh bnNhY3Rpb24gYXMgIiwgMjMpICE9IDApOworCisJcmV0dXJuIGZhbHNlOworfQorCisvKgogICog UGFyc2UgYSBTUUwgY29tbWFuZDsgcmV0dXJuIGEgQ29tbWFuZCBzdHJ1Y3QsIG9yIE5VTEwgaWYg aXQncyBhIGNvbW1lbnQKICAqCiAgKiBPbiBlbnRyeSwgcHNxbHNjYW4ubCBoYXMgY29sbGVjdGVk IHRoZSBjb21tYW5kIGludG8gImJ1ZiIsIHNvIHdlIGRvbid0CkBAIC0zMzMxLDYgKzQyMjgsMTYg QEAgcHJvY2Vzc19zcWxfY29tbWFuZChQUUV4cEJ1ZmZlciBidWYsIGNvbnN0IGNoYXIgKnNvdXJj ZSkKIAlDb21tYW5kICAgICpteV9jb21tYW5kOwogCWNoYXIJICAgKnA7CiAJY2hhcgkgICAqbmxw b3M7CisJLyogZm9yIHRoZSBzdWJjb21tYW5kcyBvZiB0aGUgY29tcG91bmQgU1FMIGNvbW1hbmQ6 ICovCisJUHNxbFNjYW5TdGF0ZSBzc3RhdGUgPSBwc3FsX3NjYW5fY3JlYXRlKCZwZ2JlbmNoX2Nh bGxiYWNrcyk7CisJUFFFeHBCdWZmZXJEYXRhIGxpbmVfYnVmOworCVBzcWxTY2FuUmVzdWx0IHNy OworCXByb21wdFN0YXR1c190IHByb21wdDsKKwljaGFyCSAgICpjb21tYW5kX3RleHQ7CisJaW50 CQkJYWxsb2NfbnVtID0gMTsKKwlpbnQJCQludW1fYWxsX3N1YmNtZHMgPSAwOworCWJvb2wJCWhh c19ub25fZW1wdHlfc3ViY21kID0gZmFsc2U7CisJaW50CQkJbGFzdF90eF9ibG9ja19lbmQgPSAt MTsKIAogCS8qIFNraXAgYW55IGxlYWRpbmcgd2hpdGVzcGFjZSwgYXMgd2VsbCBhcyAiLS0iIHN0 eWxlIGNvbW1lbnRzICovCiAJcCA9IGJ1Zi0+ZGF0YTsKQEAgLTMzNTksNiArNDI2NiwxNCBAQCBw cm9jZXNzX3NxbF9jb21tYW5kKFBRRXhwQnVmZmVyIGJ1ZiwgY29uc3QgY2hhciAqc291cmNlKQog CW15X2NvbW1hbmQtPnR5cGUgPSBTUUxfQ09NTUFORDsKIAlteV9jb21tYW5kLT5tZXRhID0gTUVU QV9OT05FOwogCWluaXRTaW1wbGVTdGF0cygmbXlfY29tbWFuZC0+c3RhdHMpOworCW15X2NvbW1h bmQtPnR4X2Jsb2NrX2VuZCA9IC0xOworCW15X2NvbW1hbmQtPmZpcnN0X3R4X2Jsb2NrX2JlZ2lu ID0gLTE7CisKKwkvKiBpZiB0aGUgY29tbWFuZCBpcyBlbXB0eSAqLworCW15X2NvbW1hbmQtPm51 bV9zdWJjbWRzID0gMTsKKwlteV9jb21tYW5kLT5zdWJjbWQgPSAoU3ViY29tbWFuZCAqKSBwZ19t YWxsb2MwKAorCQlzaXplb2YoU3ViY29tbWFuZCkgKiBhbGxvY19udW0pOworCW15X2NvbW1hbmQt PnN1YmNtZC0+dHhfYmxvY2tfZW5kID0gLTE7CiAKIAkvKgogCSAqIEluc3RhbGwgcXVlcnkgdGV4 dCBhcyB0aGUgc29sZSBhcmd2IHN0cmluZy4gIElmIHdlIGFyZSB1c2luZyBhCkBAIC0zMzgxLDYg KzQyOTYsODkgQEAgcHJvY2Vzc19zcWxfY29tbWFuZChQUUV4cEJ1ZmZlciBidWYsIGNvbnN0IGNo YXIgKnNvdXJjZSkKIAllbHNlCiAJCW15X2NvbW1hbmQtPmxpbmUgPSBwZ19zdHJkdXAocCk7CiAK Kwljb21tYW5kX3RleHQgPSBub3JtYWxpemVfd2hpdGVzcGFjZXMobXlfY29tbWFuZC0+YXJndlsw XSk7CisKKwkvKiBnZXQgc3ViY29tbWFuZHMgb2YgYSBjb21wb3VuZCBjb21tYW5kICovCisJcHNx bF9zY2FuX3NldHVwKHNzdGF0ZSwgY29tbWFuZF90ZXh0LCBzdHJsZW4oY29tbWFuZF90ZXh0KSwg MCwgdHJ1ZSk7CisJaW5pdFBRRXhwQnVmZmVyKCZsaW5lX2J1Zik7CisKKwlmb3IgKDs7KQorCXsK KwkJY29uc3QgY2hhciAqc3ViY21kX3RleHQ7CisJCVN1YmNvbW1hbmQgKnN1YmNvbW1hbmQ7CisK KwkJcmVzZXRQUUV4cEJ1ZmZlcigmbGluZV9idWYpOworCQlzciA9IHBzcWxfc2Nhbihzc3RhdGUs ICZsaW5lX2J1ZiwgJnByb21wdCk7CisJCXN1YmNtZF90ZXh0ID0gbGluZV9idWYuZGF0YTsKKwkJ bnVtX2FsbF9zdWJjbWRzKys7CisKKwkJLyogcHJvY2VzcyBvbmx5IG5vbi1lbXB0eSBzdWJjb21t YW5kcyAqLworCQlpZiAoc3ViY21kX3RleHQgJiYgKnN1YmNtZF90ZXh0ICE9ICdcMCcgJiYgKnN1 YmNtZF90ZXh0ICE9ICc7JykKKwkJeworCQkJLyoKKwkJCSAqIERvIG5vdCBpbmNyZW1lbnQgdGhl IGNvdW50ZXIgaWYgdGhpcyBpcyB0aGUgZmlyc3Qgbm9uLWVtcHR5CisJCQkgKiBzdWJjb21tYW5k LgorCQkJICovCisJCQlpZiAoaGFzX25vbl9lbXB0eV9zdWJjbWQpCisJCQkJbXlfY29tbWFuZC0+ bnVtX3N1YmNtZHMrKzsKKwkJCWVsc2UKKwkJCQloYXNfbm9uX2VtcHR5X3N1YmNtZCA9IHRydWU7 CisKKwkJCXN1YmNvbW1hbmQgPSAmbXlfY29tbWFuZC0+c3ViY21kW215X2NvbW1hbmQtPm51bV9z dWJjbWRzIC0gMV07CisJCQlzdWJjb21tYW5kLT5pbml0aWFsX3N1YmNtZF9udW0gPSBudW1fYWxs X3N1YmNtZHMgLSAxOworCisJCQkvKgorCQkJICogQ2hlY2sgaWYgdGhlIHN1YmNvbW1hbmQgc3lu dGFjdGljYWxseSBzdGFydHMgdGhlIHRyYW5zYWN0aW9uCisJCQkgKiBibG9jay4KKwkJCSAqLwor CQkJaWYgKGlzX3R4X2Jsb2NrX2JlZ2luKHN1YmNtZF90ZXh0KSAmJgorCQkJCW15X2NvbW1hbmQt PmZpcnN0X3R4X2Jsb2NrX2JlZ2luID09IC0xKQorCQkJCW15X2NvbW1hbmQtPmZpcnN0X3R4X2Js b2NrX2JlZ2luID0gbXlfY29tbWFuZC0+bnVtX3N1YmNtZHMgLSAxOworCisJCQkvKgorCQkJICog Q2hlY2sgaWYgdGhlIHN1YmNvbW1hbmQgc3ludGFjdGljYWxseSBjb21wbGV0ZXMgdGhlIHRyYW5z YWN0aW9uCisJCQkgKiBibG9jay4KKwkJCSAqLworCQkJaWYgKGlzX3R4X2Jsb2NrX2VuZChzdWJj bWRfdGV4dCkpCisJCQl7CisJCQkJaW50CQkJY3VyX2luZGV4OworCisJCQkJLyoKKwkJCQkgKiBS ZW1lbWJlciBpdCBmb3Igbm9uLWVtcHR5IHN1YmNvbW1hbmRzIHRoYXQgY2FuIGZhaWwgYQorCQkJ CSAqIHRyYW5zYWN0aW9uIGJsb2NrIGVhcmxpZXIuCisJCQkJICovCisJCQkJZm9yIChjdXJfaW5k ZXggPSBsYXN0X3R4X2Jsb2NrX2VuZCArIDE7CisJCQkJCSBjdXJfaW5kZXggPCBteV9jb21tYW5k LT5udW1fc3ViY21kczsKKwkJCQkJICsrY3VyX2luZGV4KQorCQkJCQlteV9jb21tYW5kLT5zdWJj bWRbY3VyX2luZGV4XS50eF9ibG9ja19lbmQgPQorCQkJCQkJbXlfY29tbWFuZC0+bnVtX3N1YmNt ZHMgLSAxOworCQkJCWxhc3RfdHhfYmxvY2tfZW5kID0gbXlfY29tbWFuZC0+bnVtX3N1YmNtZHMg LSAxOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXN1YmNvbW1hbmQtPnR4X2Jsb2NrX2VuZCA9 IC0xOworCQkJfQorCQl9CisKKwkJLyogRG9uZSBpZiB3ZSByZWFjaGVkIEVPRiAqLworCQlpZiAo c3IgPT0gUFNDQU5fSU5DT01QTEVURSB8fCBzciA9PSBQU0NBTl9FT0wpCisJCQlicmVhazsKKwor CQlpZiAobXlfY29tbWFuZC0+bnVtX3N1YmNtZHMgPj0gYWxsb2NfbnVtKQorCQl7CisJCQlhbGxv Y19udW0gPSBhbGxvY19udW0gKiAyOworCQkJbXlfY29tbWFuZC0+c3ViY21kID0gKFN1YmNvbW1h bmQgKikgcGdfcmVhbGxvYygKKwkJCQkJCQkJCQkJCW15X2NvbW1hbmQtPnN1YmNtZCwKKwkJCQkJ CQkJCQkJCXNpemVvZihTdWJjb21tYW5kKSAqIGFsbG9jX251bSk7CisJCX0KKwl9CisKKwl0ZXJt UFFFeHBCdWZmZXIoJmxpbmVfYnVmKTsKKwlwc3FsX3NjYW5fZmluaXNoKHNzdGF0ZSk7CisJcHNx bF9zY2FuX2Rlc3Ryb3koc3N0YXRlKTsKKworCWZyZWUoY29tbWFuZF90ZXh0KTsKKwogCXJldHVy biBteV9jb21tYW5kOwogfQogCkBAIC0zNDE5LDYgKzQ0MTcsNyBAQCBwcm9jZXNzX2JhY2tzbGFz aF9jb21tYW5kKFBzcWxTY2FuU3RhdGUgc3N0YXRlLCBjb25zdCBjaGFyICpzb3VyY2UpCiAJbXlf Y29tbWFuZC0+dHlwZSA9IE1FVEFfQ09NTUFORDsKIAlteV9jb21tYW5kLT5hcmdjID0gMDsKIAlp bml0U2ltcGxlU3RhdHMoJm15X2NvbW1hbmQtPnN0YXRzKTsKKwlteV9jb21tYW5kLT50eF9ibG9j a19lbmQgPSAtMTsKIAogCS8qIFNhdmUgZmlyc3Qgd29yZCAoY29tbWFuZCBuYW1lKSAqLwogCWog PSAwOwpAQCAtMzU2MSw2ICs0NTYwLDcgQEAgUGFyc2VTY3JpcHQoY29uc3QgY2hhciAqc2NyaXB0 LCBjb25zdCBjaGFyICpkZXNjLCBpbnQgd2VpZ2h0KQogCVBRRXhwQnVmZmVyRGF0YSBsaW5lX2J1 ZjsKIAlpbnQJCQlhbGxvY19udW07CiAJaW50CQkJaW5kZXg7CisJaW50CQkJbGFzdF90eF9ibG9j a19lbmQgPSAtMTsKIAogI2RlZmluZSBDT01NQU5EU19BTExPQ19OVU0gMTI4CiAJYWxsb2NfbnVt ID0gQ09NTUFORFNfQUxMT0NfTlVNOwpAQCAtMzYxMiw2ICs0NjEyLDIxIEBAIFBhcnNlU2NyaXB0 KGNvbnN0IGNoYXIgKnNjcmlwdCwgY29uc3QgY2hhciAqZGVzYywgaW50IHdlaWdodCkKIAkJCQlw cy5jb21tYW5kcyA9IChDb21tYW5kICoqKQogCQkJCQlwZ19yZWFsbG9jKHBzLmNvbW1hbmRzLCBz aXplb2YoQ29tbWFuZCAqKSAqIGFsbG9jX251bSk7CiAJCQl9CisKKwkJCWlmIChnZXRfZmlyc3Rf dHhfYmxvY2tfZW5kKGNvbW1hbmQpID49IDApCisJCQl7CisJCQkJLyoKKwkJCQkgKiBSZW1lbWJl ciBpdCBmb3IgY29tbWFuZHMgdGhhdCBjYW4gZmFpbCBhIHRyYW5zYWN0aW9uIGJsb2NrCisJCQkJ ICogZWFybGllci4KKwkJCQkgKi8KKwkJCQlpbnQJCQljdXJfaW5kZXg7CisKKwkJCQlmb3IgKGN1 cl9pbmRleCA9IGxhc3RfdHhfYmxvY2tfZW5kICsgMTsKKwkJCQkJIGN1cl9pbmRleCA8IGluZGV4 OworCQkJCQkgY3VyX2luZGV4KyspCisJCQkJCXBzLmNvbW1hbmRzW2N1cl9pbmRleF0tPnR4X2Js b2NrX2VuZCA9IGluZGV4IC0gMTsKKwkJCQlsYXN0X3R4X2Jsb2NrX2VuZCA9IGluZGV4IC0gMTsK KwkJCX0KIAkJfQogCiAJCS8qIElmIHdlIHJlYWNoZWQgYSBiYWNrc2xhc2gsIHByb2Nlc3MgdGhh dCAqLwpAQCAtMzg3Myw2ICs0ODg4LDcgQEAgcHJpbnRSZXN1bHRzKFRTdGF0ZSAqdGhyZWFkcywg U3RhdHNEYXRhICp0b3RhbCwgaW5zdHJfdGltZSB0b3RhbF90aW1lLAogCS8qIFJlcG9ydCB0ZXN0 IHBhcmFtZXRlcnMuICovCiAJcHJpbnRmKCJ0cmFuc2FjdGlvbiB0eXBlOiAlc1xuIiwKIAkJICAg bnVtX3NjcmlwdHMgPT0gMSA/IHNxbF9zY3JpcHRbMF0uZGVzYyA6ICJtdWx0aXBsZSBzY3JpcHRz Iik7CisJcHJpbnRmKCJtYXhpbXVtIG51bWJlciBvZiB0cmFuc2FjdGlvbiB0cmllczogJWRcbiIs IG1heF90cmllcyk7CiAJcHJpbnRmKCJzY2FsaW5nIGZhY3RvcjogJWRcbiIsIHNjYWxlKTsKIAlw cmludGYoInF1ZXJ5IG1vZGU6ICVzXG4iLCBRVUVSWU1PREVbcXVlcnltb2RlXSk7CiAJcHJpbnRm KCJudW1iZXIgb2YgY2xpZW50czogJWRcbiIsIG5jbGllbnRzKTsKQEAgLTM5MDMsNiArNDkxOSwx NSBAQCBwcmludFJlc3VsdHMoVFN0YXRlICp0aHJlYWRzLCBTdGF0c0RhdGEgKnRvdGFsLCBpbnN0 cl90aW1lIHRvdGFsX3RpbWUsCiAJaWYgKHRvdGFsLT5jbnQgPD0gMCkKIAkJcmV0dXJuOwogCisJ aWYgKHRvdGFsLT5lcnJvcnMgPiAwKQorCQlwcmludGYoIm51bWJlciBvZiBlcnJvcnM6ICIgSU5U NjRfRk9STUFUICIgKCUuM2YgJSUpXG4iLAorCQkJICAgdG90YWwtPmVycm9ycywgMTAwLjAgKiB0 b3RhbC0+ZXJyb3JzIC8gdG90YWwtPmNudCk7CisKKwlpZiAodG90YWwtPmVycm9yc19pbl9mYWls ZWRfdHggPiAwKQorCQlwcmludGYoIm51bWJlciBvZiBlcnJvcnMgXCJpbiBmYWlsZWQgU1FMIHRy YW5zYWN0aW9uXCI6ICIgSU5UNjRfRk9STUFUICIgKCUuM2YgJSUpXG4iLAorCQkJICAgdG90YWwt PmVycm9yc19pbl9mYWlsZWRfdHgsCisJCQkgICAxMDAuMCAqIHRvdGFsLT5lcnJvcnNfaW5fZmFp bGVkX3R4IC8gdG90YWwtPmNudCk7CisKIAlpZiAodGhyb3R0bGVfZGVsYXkgJiYgbGF0ZW5jeV9s aW1pdCkKIAkJcHJpbnRmKCJudW1iZXIgb2YgdHJhbnNhY3Rpb25zIHNraXBwZWQ6ICIgSU5UNjRf Rk9STUFUICIgKCUuM2YgJSUpXG4iLAogCQkJICAgdG90YWwtPnNraXBwZWQsCkBAIC0zOTM0LDEx ICs0OTU5LDE5IEBAIHByaW50UmVzdWx0cyhUU3RhdGUgKnRocmVhZHMsIFN0YXRzRGF0YSAqdG90 YWwsIGluc3RyX3RpbWUgdG90YWxfdGltZSwKIAkJCSAgIDAuMDAxICogdG90YWwtPmxhZy5zdW0g LyB0b3RhbC0+Y250LCAwLjAwMSAqIHRvdGFsLT5sYWcubWF4KTsKIAl9CiAKKwkvKiBpdCBjYW4g YmUgbm9uLXplcm8gb25seSBpZiBtYXhfdHJpZXMgaXMgZ3JlYXRlciB0aGFuIG9uZSAqLworCWlm ICh0b3RhbC0+cmV0cmllZCA+IDApCisJeworCQlwcmludGYoIm51bWJlciBvZiB0cmFuc2FjdGlv bnMgcmV0cmllZDogIiBJTlQ2NF9GT1JNQVQgIiAoJS4zZiAlJSlcbiIsCisJCQkgICB0b3RhbC0+ cmV0cmllZCwgMTAwLjAgKiB0b3RhbC0+cmV0cmllZCAvIHRvdGFsLT5jbnQpOworCQlwcmludGYo Im51bWJlciBvZiByZXRyaWVzOiAiIElOVDY0X0ZPUk1BVCAiXG4iLCB0b3RhbC0+cmV0cmllcyk7 CisJfQorCiAJcHJpbnRmKCJ0cHMgPSAlZiAoaW5jbHVkaW5nIGNvbm5lY3Rpb25zIGVzdGFibGlz aGluZylcbiIsIHRwc19pbmNsdWRlKTsKIAlwcmludGYoInRwcyA9ICVmIChleGNsdWRpbmcgY29u bmVjdGlvbnMgZXN0YWJsaXNoaW5nKVxuIiwgdHBzX2V4Y2x1ZGUpOwogCiAJLyogUmVwb3J0IHBl ci1zY3JpcHQvY29tbWFuZCBzdGF0aXN0aWNzICovCi0JaWYgKHBlcl9zY3JpcHRfc3RhdHMgfHwg aXNfbGF0ZW5jaWVzKQorCWlmIChwZXJfc2NyaXB0X3N0YXRzIHx8IHJlcG9ydF9wZXJfY29tbWFu ZCkKIAl7CiAJCWludAkJCWk7CiAKQEAgLTM5NTgsMjMgKzQ5OTEsNTkgQEAgcHJpbnRSZXN1bHRz KFRTdGF0ZSAqdGhyZWFkcywgU3RhdHNEYXRhICp0b3RhbCwgaW5zdHJfdGltZSB0b3RhbF90aW1l LAogCQkJCQkgICAxMDAuMCAqIHNzdGF0cy0+Y250IC8gdG90YWwtPmNudCwKIAkJCQkJICAgKHNz dGF0cy0+Y250IC0gc3N0YXRzLT5za2lwcGVkKSAvIHRpbWVfaW5jbHVkZSk7CiAKKwkJCQlpZiAo dG90YWwtPmVycm9ycyA+IDApCisJCQkJCXByaW50ZigiIC0gbnVtYmVyIG9mIGVycm9yczogIiBJ TlQ2NF9GT1JNQVQgIiAoJS4zZiAlJSlcbiIsCisJCQkJCQkgICBzc3RhdHMtPmVycm9ycywKKwkJ CQkJCSAgIDEwMC4wICogc3N0YXRzLT5lcnJvcnMgLyBzc3RhdHMtPmNudCk7CisKKwkJCQlpZiAo dG90YWwtPmVycm9yc19pbl9mYWlsZWRfdHggPiAwKQorCQkJCQlwcmludGYoIiAtIG51bWJlciBv ZiBlcnJvcnMgXCJpbiBmYWlsZWQgU1FMIHRyYW5zYWN0aW9uXCI6ICIgSU5UNjRfRk9STUFUICIg KCUuM2YgJSUpXG4iLAorCQkJCQkJICAgc3N0YXRzLT5lcnJvcnNfaW5fZmFpbGVkX3R4LAorCQkJ CQkJICAgMTAwLjAgKiBzc3RhdHMtPmVycm9yc19pbl9mYWlsZWRfdHggLyBzc3RhdHMtPmNudCk7 CisKIAkJCQlpZiAodGhyb3R0bGVfZGVsYXkgJiYgbGF0ZW5jeV9saW1pdCAmJiBzc3RhdHMtPmNu dCA+IDApCiAJCQkJCXByaW50ZigiIC0gbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBza2lwcGVkOiAi IElOVDY0X0ZPUk1BVCAiICglLjNmJSUpXG4iLAogCQkJCQkJICAgc3N0YXRzLT5za2lwcGVkLAog CQkJCQkJICAgMTAwLjAgKiBzc3RhdHMtPnNraXBwZWQgLyBzc3RhdHMtPmNudCk7CiAKIAkJCQlw cmludFNpbXBsZVN0YXRzKCIgLSBsYXRlbmN5IiwgJnNzdGF0cy0+bGF0ZW5jeSk7CisKKwkJCQkv KiBpdCBjYW4gYmUgbm9uLXplcm8gb25seSBpZiBtYXhfdHJpZXMgaXMgZ3JlYXRlciB0aGFuIG9u ZSAqLworCQkJCWlmICh0b3RhbC0+cmV0cmllZCA+IDApCisJCQkJeworCQkJCQlwcmludGYoIiAt IG51bWJlciBvZiB0cmFuc2FjdGlvbnMgcmV0cmllZDogIiBJTlQ2NF9GT1JNQVQgIiAoJS4zZiAl JSlcbiIsCisJCQkJCQkgICBzc3RhdHMtPnJldHJpZWQsCisJCQkJCQkgICAxMDAuMCAqIHNzdGF0 cy0+cmV0cmllZCAvIHNzdGF0cy0+Y250KTsKKwkJCQkJcHJpbnRmKCIgLSBudW1iZXIgb2YgcmV0 cmllczogIiBJTlQ2NF9GT1JNQVQgIlxuIiwKKwkJCQkJCSAgIHNzdGF0cy0+cmV0cmllcyk7CisJ CQkJfQogCQkJfQogCi0JCQkvKiBSZXBvcnQgcGVyLWNvbW1hbmQgbGF0ZW5jaWVzICovCi0JCQlp ZiAoaXNfbGF0ZW5jaWVzKQorCQkJLyoKKwkJCSAqIFJlcG9ydCBwZXItY29tbWFuZCBzdGF0aXN0 aWNzOiBsYXRlbmNpZXMsIHJldHJpZXMgYWZ0ZXIgZmFpbHVyZXMsCisJCQkgKiBlcnJvcnMgKGZh aWx1cmVzIHdpdGhvdXQgcmV0cnlpbmcpLgorCQkJICovCisJCQlpZiAocmVwb3J0X3Blcl9jb21t YW5kKQogCQkJewogCQkJCUNvbW1hbmQgICAqKmNvbW1hbmRzOwogCiAJCQkJaWYgKHBlcl9zY3Jp cHRfc3RhdHMpCi0JCQkJCXByaW50ZigiIC0gc3RhdGVtZW50IGxhdGVuY2llcyBpbiBtaWxsaXNl Y29uZHM6XG4iKTsKKwkJCQkJcHJpbnRmKCIgLSBzdGF0ZW1lbnQgbGF0ZW5jaWVzIGluIG1pbGxp c2Vjb25kcyIpOwogCQkJCWVsc2UKLQkJCQkJcHJpbnRmKCJzdGF0ZW1lbnQgbGF0ZW5jaWVzIGlu IG1pbGxpc2Vjb25kczpcbiIpOworCQkJCQlwcmludGYoInN0YXRlbWVudCBsYXRlbmNpZXMgaW4g bWlsbGlzZWNvbmRzIik7CisKKwkJCQlpZiAodG90YWwtPmVycm9ycyA+IDApCisJCQkJCXByaW50 ZigiJXMgZXJyb3JzIiwKKwkJCQkJCSAgICgodG90YWwtPmVycm9yc19pbl9mYWlsZWRfdHggPT0g MCAmJgorCQkJCQkJCXRvdGFsLT5yZXRyaWVkID09IDApID8KKwkJCQkJCQkiIGFuZCIgOgorCQkJ CQkJCSIsIikpOworCQkJCWlmICh0b3RhbC0+ZXJyb3JzX2luX2ZhaWxlZF90eCA+IDApCisJCQkJ CXByaW50ZigiJXMgZXJyb3JzIFwiaW4gZmFpbGVkIFNRTCB0cmFuc2FjdGlvblwiIiwKKwkJCQkJ CSAgIHRvdGFsLT5yZXRyaWVkID09IDAgPyAiIGFuZCIgOiAiLCIpOworCQkJCWlmICh0b3RhbC0+ cmV0cmllZCA+IDApCisJCQkJCXByaW50ZigiIGFuZCByZXRyaWVzIik7CisJCQkJcHJpbnRmKCI6 XG4iKTsKIAogCQkJCWZvciAoY29tbWFuZHMgPSBzcWxfc2NyaXB0W2ldLmNvbW1hbmRzOwogCQkJ CQkgKmNvbW1hbmRzICE9IE5VTEw7CkBAIC0zOTgyLDEwICs1MDUxLDE5IEBAIHByaW50UmVzdWx0 cyhUU3RhdGUgKnRocmVhZHMsIFN0YXRzRGF0YSAqdG90YWwsIGluc3RyX3RpbWUgdG90YWxfdGlt ZSwKIAkJCQl7CiAJCQkJCVNpbXBsZVN0YXRzICpjc3RhdHMgPSAmKCpjb21tYW5kcyktPnN0YXRz OwogCi0JCQkJCXByaW50ZigiICAgJTExLjNmICAlc1xuIiwKKwkJCQkJcHJpbnRmKCIgICAlMTEu M2YiLAogCQkJCQkJICAgKGNzdGF0cy0+Y291bnQgPiAwKSA/Ci0JCQkJCQkgICAxMDAwLjAgKiBj c3RhdHMtPnN1bSAvIGNzdGF0cy0+Y291bnQgOiAwLjAsCi0JCQkJCQkgICAoKmNvbW1hbmRzKS0+ bGluZSk7CisJCQkJCQkgICAxMDAwLjAgKiBjc3RhdHMtPnN1bSAvIGNzdGF0cy0+Y291bnQgOiAw LjApOworCQkJCQlpZiAodG90YWwtPmVycm9ycyA+IDApCisJCQkJCQlwcmludGYoIiAgJTIwIiBJ TlQ2NF9NT0RJRklFUiAiZCIsCisJCQkJCQkJICAgKCpjb21tYW5kcyktPmVycm9ycyk7CisJCQkJ CWlmICh0b3RhbC0+ZXJyb3JzX2luX2ZhaWxlZF90eCA+IDApCisJCQkJCQlwcmludGYoIiAgJTIw IiBJTlQ2NF9NT0RJRklFUiAiZCIsCisJCQkJCQkJICAgKCpjb21tYW5kcyktPmVycm9yc19pbl9m YWlsZWRfdHgpOworCQkJCQlpZiAodG90YWwtPnJldHJpZWQgPiAwKQorCQkJCQkJcHJpbnRmKCIg ICUyMCIgSU5UNjRfTU9ESUZJRVIgImQiLAorCQkJCQkJCSAgICgqY29tbWFuZHMpLT5yZXRyaWVz KTsKKwkJCQkJcHJpbnRmKCIgICVzXG4iLCAoKmNvbW1hbmRzKS0+bGluZSk7CiAJCQkJfQogCQkJ fQogCQl9CkBAIC00MDE2LDcgKzUwOTQsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK IAkJeyJwcm9ncmVzcyIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnUCd9LAogCQl7InByb3Rv Y29sIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdNJ30sCiAJCXsicXVpZXQiLCBub19hcmd1 bWVudCwgTlVMTCwgJ3EnfSwKLQkJeyJyZXBvcnQtbGF0ZW5jaWVzIiwgbm9fYXJndW1lbnQsIE5V TEwsICdyJ30sCisJCXsicmVwb3J0LXBlci1jb21tYW5kIiwgbm9fYXJndW1lbnQsIE5VTEwsICdy J30sCiAJCXsicmF0ZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnUid9LAogCQl7InNjYWxl IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdzJ30sCiAJCXsic2VsZWN0LW9ubHkiLCBub19h cmd1bWVudCwgTlVMTCwgJ1MnfSwKQEAgLTQwMzQsNiArNTExMiw4IEBAIG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQogCQl7InByb2dyZXNzLXRpbWVzdGFtcCIsIG5vX2FyZ3VtZW50LCBOVUxM LCA2fSwKIAkJeyJsb2ctcHJlZml4IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDd9LAogCQl7 ImZvcmVpZ24ta2V5cyIsIG5vX2FyZ3VtZW50LCBOVUxMLCA4fSwKKwkJeyJkZWJ1Zy1mYWlscyIs IG5vX2FyZ3VtZW50LCBOVUxMLCA5fSwKKwkJeyJtYXgtdHJpZXMiLCByZXF1aXJlZF9hcmd1bWVu dCwgTlVMTCwgMTB9LAogCQl7TlVMTCwgMCwgTlVMTCwgMH0KIAl9OwogCkBAIC00MTAxLDYgKzUx ODEsOCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAogCXN0YXRlID0gKENTdGF0ZSAq KSBwZ19tYWxsb2Moc2l6ZW9mKENTdGF0ZSkpOwogCW1lbXNldChzdGF0ZSwgMCwgc2l6ZW9mKENT dGF0ZSkpOworCXN0YXRlLT5yZXRyeV9zdGF0ZS5jb21tYW5kID0gLTE7CisJc3RhdGUtPmxhc3Rf ZmFpbHVyZS5jb21tYW5kID0gLTE7CiAKIAl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBh cmd2LCAiaUk6aDpudnA6ZHFiOlNOYzpqOkNyczp0OlQ6VTpsZjpEOkY6TTpQOlI6TDoiLCBsb25n X29wdGlvbnMsICZvcHRpbmRleCkpICE9IC0xKQogCXsKQEAgLTQxMzMsNiArNTIxNSw3IEBAIG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCWJyZWFrOwogCQkJY2FzZSAnZCc6CiAJCQkJ ZGVidWcrKzsKKwkJCQlkZWJ1Z19mYWlscysrOwogCQkJCWJyZWFrOwogCQkJY2FzZSAnYyc6CiAJ CQkJYmVuY2htYXJraW5nX29wdGlvbl9zZXQgPSB0cnVlOwpAQCAtNDE4NSw3ICs1MjY4LDcgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJYnJlYWs7CiAJCQljYXNlICdyJzoKIAkJ CQliZW5jaG1hcmtpbmdfb3B0aW9uX3NldCA9IHRydWU7Ci0JCQkJaXNfbGF0ZW5jaWVzID0gdHJ1 ZTsKKwkJCQlyZXBvcnRfcGVyX2NvbW1hbmQgPSB0cnVlOwogCQkJCWJyZWFrOwogCQkJY2FzZSAn cyc6CiAJCQkJc2NhbGVfZ2l2ZW4gPSB0cnVlOwpAQCAtNDI2Niw3ICs1MzQ5LDcgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCX0KIAogCQkJCQkqcCsrID0gJ1wwJzsKLQkJCQkJ aWYgKCFwdXRWYXJpYWJsZSgmc3RhdGVbMF0sICJvcHRpb24iLCBvcHRhcmcsIHApKQorCQkJCQlp ZiAoIXB1dFZhcmlhYmxlKCZzdGF0ZVswXS52YXJpYWJsZXMsICJvcHRpb24iLCBvcHRhcmcsIHAp KQogCQkJCQkJZXhpdCgxKTsKIAkJCQl9CiAJCQkJYnJlYWs7CkBAIC00Mzc0LDYgKzU0NTcsMTkg QEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJaW5pdGlhbGl6YXRpb25fb3B0aW9u X3NldCA9IHRydWU7CiAJCQkJZm9yZWlnbl9rZXlzID0gdHJ1ZTsKIAkJCQlicmVhazsKKwkJCWNh c2UgOToJCQkJLyogZGVidWctZmFpbHMgKi8KKwkJCQlkZWJ1Z19mYWlscysrOworCQkJCWJyZWFr OworCQkJY2FzZSAxMDoJCQkvKiBtYXgtdHJpZXMgKi8KKwkJCQliZW5jaG1hcmtpbmdfb3B0aW9u X3NldCA9IHRydWU7CisJCQkJbWF4X3RyaWVzID0gYXRvaShvcHRhcmcpOworCQkJCWlmIChtYXhf dHJpZXMgPD0gMCkKKwkJCQl7CisJCQkJCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBudW1iZXIg b2YgbWF4aW11bSB0cmllczogXCIlc1wiXG4iLAorCQkJCQkJCW9wdGFyZyk7CisJCQkJCWV4aXQo MSk7CisJCQkJfQorCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQlmcHJpbnRmKHN0ZGVyciwg XygiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iKSwgcHJvZ25hbWUp OwogCQkJCWV4aXQoMSk7CkBAIC00NTU0LDMyICs1NjUwLDQ5IEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQogCQlzdGF0ZSA9IChDU3RhdGUgKikgcGdfcmVhbGxvYyhzdGF0ZSwgc2l6ZW9m KENTdGF0ZSkgKiBuY2xpZW50cyk7CiAJCW1lbXNldChzdGF0ZSArIDEsIDAsIHNpemVvZihDU3Rh dGUpICogKG5jbGllbnRzIC0gMSkpOwogCi0JCS8qIGNvcHkgYW55IC1EIHN3aXRjaCB2YWx1ZXMg dG8gYWxsIGNsaWVudHMgKi8KIAkJZm9yIChpID0gMTsgaSA8IG5jbGllbnRzOyBpKyspCiAJCXsK IAkJCWludAkJCWo7CiAKIAkJCXN0YXRlW2ldLmlkID0gaTsKLQkJCWZvciAoaiA9IDA7IGogPCBz dGF0ZVswXS5udmFyaWFibGVzOyBqKyspCisKKwkJCS8qIGNvcHkgYW55IC1EIHN3aXRjaCB2YWx1 ZXMgdG8gYWxsIGNsaWVudHMgKi8KKwkJCWZvciAoaiA9IDA7IGogPCBzdGF0ZVswXS52YXJpYWJs ZXMubnZhcmlhYmxlczsgaisrKQogCQkJewotCQkJCVZhcmlhYmxlICAgKnZhciA9ICZzdGF0ZVsw XS52YXJpYWJsZXNbal07CisJCQkJVmFyaWFibGUgICAqdmFyID0gJnN0YXRlWzBdLnZhcmlhYmxl cy5hcnJheVtqXTsKIAogCQkJCWlmICh2YXItPmlzX251bWVyaWMpCiAJCQkJewotCQkJCQlpZiAo IXB1dFZhcmlhYmxlTnVtYmVyKCZzdGF0ZVtpXSwgInN0YXJ0dXAiLAotCQkJCQkJCQkJCSAgIHZh ci0+bmFtZSwgJnZhci0+bnVtX3ZhbHVlKSkKKwkJCQkJaWYgKCFwdXRWYXJpYWJsZU51bWJlcigm c3RhdGVbaV0udmFyaWFibGVzLCAic3RhcnR1cCIsCisJCQkJCQkJCQkJICAgdmFyLT5uYW1lLCAm dmFyLT5udW1fdmFsdWUsIHRydWUpKQogCQkJCQkJZXhpdCgxKTsKIAkJCQl9CiAJCQkJZWxzZQog CQkJCXsKLQkJCQkJaWYgKCFwdXRWYXJpYWJsZSgmc3RhdGVbaV0sICJzdGFydHVwIiwKKwkJCQkJ aWYgKCFwdXRWYXJpYWJsZSgmc3RhdGVbaV0udmFyaWFibGVzLCAic3RhcnR1cCIsCiAJCQkJCQkJ CQkgdmFyLT5uYW1lLCB2YXItPnZhbHVlKSkKIAkJCQkJCWV4aXQoMSk7CiAJCQkJfQogCQkJfQor CisJCQkvKiBzZXQgdGhlIHJldHJ5IHN0YXRlIGFuZCB0aGUgc3RhdGUgb2YgdGhlIGxhc3QgZmFp bHVyZSAqLworCQkJc3RhdGVbaV0ucmV0cnlfc3RhdGUuY29tbWFuZCA9IC0xOworCQkJc3RhdGVb aV0ubGFzdF9mYWlsdXJlLmNvbW1hbmQgPSAtMTsKIAkJfQogCX0KIAorCS8qIHNldCByYW5kb20g c2VlZCAqLworCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQoc3RhcnRfdGltZSk7CisJc3JhbmRvbSgo dW5zaWduZWQgaW50KSBJTlNUUl9USU1FX0dFVF9NSUNST1NFQyhzdGFydF90aW1lKSk7CisKKwkv KiBzZXQgcmFuZG9tIHN0YXRlcyBmb3IgY2xpZW50cyAqLworCWZvciAoaSA9IDA7IGkgPCBuY2xp ZW50czsgaSsrKQorCXsKKwkJc3RhdGVbaV0ucmFuZG9tX3N0YXRlWzBdID0gcmFuZG9tKCk7CisJ CXN0YXRlW2ldLnJhbmRvbV9zdGF0ZVsxXSA9IHJhbmRvbSgpOworCQlzdGF0ZVtpXS5yYW5kb21f c3RhdGVbMl0gPSByYW5kb20oKTsKKwl9CisKIAlpZiAoZGVidWcpCiAJewogCQlpZiAoZHVyYXRp b24gPD0gMCkKQEAgLTQ2NDEsMTEgKzU3NTQsMTIgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFy Z3YpCiAJICogOnNjYWxlIHZhcmlhYmxlcyBub3JtYWxseSBnZXQgLXMgb3IgZGF0YWJhc2Ugc2Nh bGUsIGJ1dCBkb24ndCBvdmVycmlkZQogCSAqIGFuIGV4cGxpY2l0IC1EIHN3aXRjaAogCSAqLwot CWlmIChsb29rdXBWYXJpYWJsZSgmc3RhdGVbMF0sICJzY2FsZSIpID09IE5VTEwpCisJaWYgKGxv b2t1cFZhcmlhYmxlKCZzdGF0ZVswXS52YXJpYWJsZXMsICJzY2FsZSIpID09IE5VTEwpCiAJewog CQlmb3IgKGkgPSAwOyBpIDwgbmNsaWVudHM7IGkrKykKIAkJewotCQkJaWYgKCFwdXRWYXJpYWJs ZUludCgmc3RhdGVbaV0sICJzdGFydHVwIiwgInNjYWxlIiwgc2NhbGUpKQorCQkJaWYgKCFwdXRW YXJpYWJsZUludCgmc3RhdGVbaV0udmFyaWFibGVzLCAic3RhcnR1cCIsICJzY2FsZSIsIHNjYWxl LAorCQkJCQkJCQl0cnVlKSkKIAkJCQlleGl0KDEpOwogCQl9CiAJfQpAQCAtNDY1NCwxMSArNTc2 OCwxMiBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkgKiBEZWZpbmUgYSA6Y2xpZW50 X2lkIHZhcmlhYmxlIHRoYXQgaXMgdW5pcXVlIHBlciBjb25uZWN0aW9uLiBCdXQgZG9uJ3QKIAkg KiBvdmVycmlkZSBhbiBleHBsaWNpdCAtRCBzd2l0Y2guCiAJICovCi0JaWYgKGxvb2t1cFZhcmlh YmxlKCZzdGF0ZVswXSwgImNsaWVudF9pZCIpID09IE5VTEwpCisJaWYgKGxvb2t1cFZhcmlhYmxl KCZzdGF0ZVswXS52YXJpYWJsZXMsICJjbGllbnRfaWQiKSA9PSBOVUxMKQogCXsKIAkJZm9yIChp ID0gMDsgaSA8IG5jbGllbnRzOyBpKyspCiAJCXsKLQkJCWlmICghcHV0VmFyaWFibGVJbnQoJnN0 YXRlW2ldLCAic3RhcnR1cCIsICJjbGllbnRfaWQiLCBpKSkKKwkJCWlmICghcHV0VmFyaWFibGVJ bnQoJnN0YXRlW2ldLnZhcmlhYmxlcywgInN0YXJ0dXAiLCAiY2xpZW50X2lkIiwgaSwKKwkJCQkJ CQkJdHJ1ZSkpCiAJCQkJZXhpdCgxKTsKIAkJfQogCX0KQEAgLTQ2ODAsMTAgKzU3OTUsNiBAQCBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAl9CiAJUFFmaW5pc2goY29uKTsKIAotCS8qIHNl dCByYW5kb20gc2VlZCAqLwotCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQoc3RhcnRfdGltZSk7Ci0J c3JhbmRvbSgodW5zaWduZWQgaW50KSBJTlNUUl9USU1FX0dFVF9NSUNST1NFQyhzdGFydF90aW1l KSk7Ci0KIAkvKiBzZXQgdXAgdGhyZWFkIGRhdGEgc3RydWN0dXJlcyAqLwogCXRocmVhZHMgPSAo VFN0YXRlICopIHBnX21hbGxvYyhzaXplb2YoVFN0YXRlKSAqIG50aHJlYWRzKTsKIAluY2xpZW50 c19kZWFsdCA9IDA7CkBAIC00Njk2LDkgKzU4MDcsNiBAQCBtYWluKGludCBhcmdjLCBjaGFyICoq YXJndikKIAkJdGhyZWFkLT5zdGF0ZSA9ICZzdGF0ZVtuY2xpZW50c19kZWFsdF07CiAJCXRocmVh ZC0+bnN0YXRlID0KIAkJCShuY2xpZW50cyAtIG5jbGllbnRzX2RlYWx0ICsgbnRocmVhZHMgLSBp IC0gMSkgLyAobnRocmVhZHMgLSBpKTsKLQkJdGhyZWFkLT5yYW5kb21fc3RhdGVbMF0gPSByYW5k b20oKTsKLQkJdGhyZWFkLT5yYW5kb21fc3RhdGVbMV0gPSByYW5kb20oKTsKLQkJdGhyZWFkLT5y YW5kb21fc3RhdGVbMl0gPSByYW5kb20oKTsKIAkJdGhyZWFkLT5sb2dmaWxlID0gTlVMTDsgLyog ZmlsbGVkIGluIGxhdGVyICovCiAJCXRocmVhZC0+bGF0ZW5jeV9sYXRlID0gMDsKIAkJdGhyZWFk LT56aXBmX2NhY2hlLm5iX2NlbGxzID0gMDsKQEAgLTQ3ODAsNiArNTg4OCwxMCBAQCBtYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikKIAkJbWVyZ2VTaW1wbGVTdGF0cygmc3RhdHMubGFnLCAmdGhy ZWFkLT5zdGF0cy5sYWcpOwogCQlzdGF0cy5jbnQgKz0gdGhyZWFkLT5zdGF0cy5jbnQ7CiAJCXN0 YXRzLnNraXBwZWQgKz0gdGhyZWFkLT5zdGF0cy5za2lwcGVkOworCQlzdGF0cy5yZXRyaWVzICs9 IHRocmVhZC0+c3RhdHMucmV0cmllczsKKwkJc3RhdHMucmV0cmllZCArPSB0aHJlYWQtPnN0YXRz LnJldHJpZWQ7CisJCXN0YXRzLmVycm9ycyArPSB0aHJlYWQtPnN0YXRzLmVycm9yczsKKwkJc3Rh dHMuZXJyb3JzX2luX2ZhaWxlZF90eCArPSB0aHJlYWQtPnN0YXRzLmVycm9yc19pbl9mYWlsZWRf dHg7CiAJCWxhdGVuY3lfbGF0ZSArPSB0aHJlYWQtPmxhdGVuY3lfbGF0ZTsKIAkJSU5TVFJfVElN RV9BREQoY29ubl90b3RhbF90aW1lLCB0aHJlYWQtPmNvbm5fdGltZSk7CiAJfQpAQCAtNDkxOSw3 ICs2MDMxLDggQEAgdGhyZWFkUnVuKHZvaWQgKmFyZykKIAkJCQlpZiAobWluX3VzZWMgPiB0aGlz X3VzZWMpCiAJCQkJCW1pbl91c2VjID0gdGhpc191c2VjOwogCQkJfQotCQkJZWxzZSBpZiAoc3Qt PnN0YXRlID09IENTVEFURV9XQUlUX1JFU1VMVCkKKwkJCWVsc2UgaWYgKHN0LT5zdGF0ZSA9PSBD U1RBVEVfV0FJVF9SRVNVTFQgfHwKKwkJCQkJIHN0LT5zdGF0ZSA9PSBDU1RBVEVfRU5EX0ZBSUxF RF9UWF9CTE9DS19XQUlUKQogCQkJewogCQkJCS8qCiAJCQkJICogd2FpdGluZyBmb3IgcmVzdWx0 IGZyb20gc2VydmVyIC0gbm90aGluZyB0byBkbyB1bmxlc3MgdGhlCkBAIC01MDIzLDcgKzYxMzYs OCBAQCB0aHJlYWRSdW4odm9pZCAqYXJnKQogCQl7CiAJCQlDU3RhdGUJICAgKnN0ID0gJnN0YXRl W2ldOwogCi0JCQlpZiAoc3QtPnN0YXRlID09IENTVEFURV9XQUlUX1JFU1VMVCkKKwkJCWlmIChz dC0+c3RhdGUgPT0gQ1NUQVRFX1dBSVRfUkVTVUxUIHx8CisJCQkJc3QtPnN0YXRlID09IENTVEFU RV9FTkRfRkFJTEVEX1RYX0JMT0NLX1dBSVQpCiAJCQl7CiAJCQkJLyogZG9uJ3QgY2FsbCBkb0N1 c3RvbSB1bmxlc3MgZGF0YSBpcyBhdmFpbGFibGUgKi8KIAkJCQlpbnQJCQlzb2NrID0gUFFzb2Nr ZXQoc3QtPmNvbik7CkBAIC01MDY1LDcgKzYxNzksMTEgQEAgdGhyZWFkUnVuKHZvaWQgKmFyZykK IAkJCQkvKiBnZW5lcmF0ZSBhbmQgc2hvdyByZXBvcnQgKi8KIAkJCQlTdGF0c0RhdGEJY3VyOwog CQkJCWludDY0CQlydW4gPSBub3cgLSBsYXN0X3JlcG9ydCwKLQkJCQkJCQludHg7CisJCQkJCQkJ bnR4LAorCQkJCQkJCXJldHJpZXMsCisJCQkJCQkJcmV0cmllZCwKKwkJCQkJCQllcnJvcnMsCisJ CQkJCQkJZXJyb3JzX2luX2ZhaWxlZF90eDsKIAkJCQlkb3VibGUJCXRwcywKIAkJCQkJCQl0b3Rh bF9ydW4sCiAJCQkJCQkJbGF0ZW5jeSwKQEAgLTUwOTIsNiArNjIxMCwxMSBAQCB0aHJlYWRSdW4o dm9pZCAqYXJnKQogCQkJCQltZXJnZVNpbXBsZVN0YXRzKCZjdXIubGFnLCAmdGhyZWFkW2ldLnN0 YXRzLmxhZyk7CiAJCQkJCWN1ci5jbnQgKz0gdGhyZWFkW2ldLnN0YXRzLmNudDsKIAkJCQkJY3Vy LnNraXBwZWQgKz0gdGhyZWFkW2ldLnN0YXRzLnNraXBwZWQ7CisJCQkJCWN1ci5yZXRyaWVzICs9 IHRocmVhZFtpXS5zdGF0cy5yZXRyaWVzOworCQkJCQljdXIucmV0cmllZCArPSB0aHJlYWRbaV0u c3RhdHMucmV0cmllZDsKKwkJCQkJY3VyLmVycm9ycyArPSB0aHJlYWRbaV0uc3RhdHMuZXJyb3Jz OworCQkJCQljdXIuZXJyb3JzX2luX2ZhaWxlZF90eCArPQorCQkJCQkJdGhyZWFkW2ldLnN0YXRz LmVycm9yc19pbl9mYWlsZWRfdHg7CiAJCQkJfQogCiAJCQkJLyogd2UgY291bnQgb25seSBhY3R1 YWxseSBleGVjdXRlZCB0cmFuc2FjdGlvbnMgKi8KQEAgLTUxMDksNiArNjIzMiwxMSBAQCB0aHJl YWRSdW4odm9pZCAqYXJnKQogCQkJCXsKIAkJCQkJbGF0ZW5jeSA9IHNxbGF0ID0gc3RkZXYgPSBs YWcgPSAwOwogCQkJCX0KKwkJCQlyZXRyaWVzID0gY3VyLnJldHJpZXMgLSBsYXN0LnJldHJpZXM7 CisJCQkJcmV0cmllZCA9IGN1ci5yZXRyaWVkIC0gbGFzdC5yZXRyaWVkOworCQkJCWVycm9ycyA9 IGN1ci5lcnJvcnMgLSBsYXN0LmVycm9yczsKKwkJCQllcnJvcnNfaW5fZmFpbGVkX3R4ID0gY3Vy LmVycm9yc19pbl9mYWlsZWRfdHggLQorCQkJCQlsYXN0LmVycm9yc19pbl9mYWlsZWRfdHg7CiAK IAkJCQlpZiAocHJvZ3Jlc3NfdGltZXN0YW1wKQogCQkJCXsKQEAgLTUxMzQsNiArNjI2MiwxNCBA QCB0aHJlYWRSdW4odm9pZCAqYXJnKQogCQkJCQkJInByb2dyZXNzOiAlcywgJS4xZiB0cHMsIGxh dCAlLjNmIG1zIHN0ZGRldiAlLjNmIiwKIAkJCQkJCXRidWYsIHRwcywgbGF0ZW5jeSwgc3RkZXYp OwogCisJCQkJaWYgKGVycm9ycyA+IDApCisJCQkJeworCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiwg IiBJTlQ2NF9GT1JNQVQgIiBmYWlsZWQiICwgZXJyb3JzKTsKKwkJCQkJaWYgKGVycm9yc19pbl9m YWlsZWRfdHggPiAwKQorCQkJCQkJZnByaW50ZihzdGRlcnIsICIgKCIgSU5UNjRfRk9STUFUICIg aW4gZmFpbGVkIHR4KSIsCisJCQkJCQkJCQkJZXJyb3JzX2luX2ZhaWxlZF90eCk7CisJCQkJfQor CiAJCQkJaWYgKHRocm90dGxlX2RlbGF5KQogCQkJCXsKIAkJCQkJZnByaW50ZihzdGRlcnIsICIs IGxhZyAlLjNmIG1zIiwgbGFnKTsKQEAgLTUxNDEsNiArNjI3NywxMiBAQCB0aHJlYWRSdW4odm9p ZCAqYXJnKQogCQkJCQkJZnByaW50ZihzdGRlcnIsICIsICIgSU5UNjRfRk9STUFUICIgc2tpcHBl ZCIsCiAJCQkJCQkJCWN1ci5za2lwcGVkIC0gbGFzdC5za2lwcGVkKTsKIAkJCQl9CisKKwkJCQkv KiBpdCBjYW4gYmUgbm9uLXplcm8gb25seSBpZiBtYXhfdHJpZXMgaXMgZ3JlYXRlciB0aGFuIG9u ZSAqLworCQkJCWlmIChyZXRyaWVkID4gMCkKKwkJCQkJZnByaW50ZihzdGRlcnIsICIsICIgSU5U NjRfRk9STUFUICIgcmV0cmllZCwgIiBJTlQ2NF9GT1JNQVQgIiByZXRyaWVzIiwKKwkJCQkJCQly ZXRyaWVkLCByZXRyaWVzKTsKKwogCQkJCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKIAogCQkJCWxh c3QgPSBjdXI7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnYmVuY2gvdC8wMDFfcGdiZW5jaF93aXRo X3NlcnZlci5wbCBiL3NyYy9iaW4vcGdiZW5jaC90LzAwMV9wZ2JlbmNoX3dpdGhfc2VydmVyLnBs CmluZGV4IGUzY2RmMjguLjY4ZTA4MjggMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdiZW5jaC90LzAw MV9wZ2JlbmNoX3dpdGhfc2VydmVyLnBsCisrKyBiL3NyYy9iaW4vcGdiZW5jaC90LzAwMV9wZ2Jl bmNoX3dpdGhfc2VydmVyLnBsCkBAIC00MTUsOSArNDE1LDExIEBAIGZvciBteSAkZSAoQGVycm9y cykKIAlteSAkbiA9ICcwMDFfcGdiZW5jaF9lcnJvcl8nIC4gJG5hbWU7CiAJJG4gPX4gcy8gL18v ZzsKIAlwZ2JlbmNoKAotCQknLW4gLXQgMSAtRGZvbz1ibGEgLU0gcHJlcGFyZWQnLAorCQknLW4g LXQgMSAtRGZvbz1ibGEgLU0gcHJlcGFyZWQgLS1kZWJ1Zy1mYWlscycsCiAJCSRzdGF0dXMsCi0J CVsgJHN0YXR1cyA/IHFye14kfSA6IHFye3Byb2Nlc3NlZDogMC8xfSBdLAorCQkoJHN0YXR1cyA/ CisJCSBbIHFye14kfSBdIDoKKwkJIFsgcXJ7cHJvY2Vzc2VkOiAxLzF9LCBxcntudW1iZXIgb2Yg ZXJyb3JzOiAxIFwoMTAwXC4wMDAgJVwpfSBdKSwKIAkJJHJlLAogCQkncGdiZW5jaCBzY3JpcHQg ZXJyb3I6ICcgLiAkbmFtZSwKIAkJeyAkbiA9PiAkc2NyaXB0IH0pOwpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wZ2JlbmNoL3QvMDAzX3NlcmlhbGl6YXRpb25fYW5kX2RlYWRsb2NrX2ZhaWxzLnBsIGIv c3JjL2Jpbi9wZ2JlbmNoL3QvMDAzX3NlcmlhbGl6YXRpb25fYW5kX2RlYWRsb2NrX2ZhaWxzLnBs Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3N2FkZDAKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvYmluL3BnYmVuY2gvdC8wMDNfc2VyaWFsaXphdGlvbl9hbmRfZGVhZGxvY2tf ZmFpbHMucGwKQEAgLTAsMCArMSw4MjggQEAKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisK K3VzZSBDb25maWc7Cit1c2UgUG9zdGdyZXNOb2RlOwordXNlIFRlc3RMaWI7Cit1c2UgVGVzdDo6 TW9yZSB0ZXN0cyA9PiAyODsKKwordXNlIGNvbnN0YW50Cit7CisJUkVBRF9DT01NSVRURUQgICA9 PiAwLAorCVJFUEVBVEFCTEVfUkVBRCAgPT4gMSwKKwlTRVJJQUxJWkFCTEUgICAgID0+IDIsCit9 OworCitteSBAaXNvbGF0aW9uX2xldmVsX3NoZWxsID0gKAorCSdyZWFkXFwgY29tbWl0dGVkJywK KwkncmVwZWF0YWJsZVxcIHJlYWQnLAorCSdzZXJpYWxpemFibGUnKTsKKworIyBUaGUga2V5cyBv ZiBhZHZpc29yeSBsb2NrcyBmb3IgdGVzdGluZyBkZWFkbG9jayBmYWlsdXJlczoKK3VzZSBjb25z dGFudAoreworCVRSQU5TQUNUSU9OX0JFR0lOUyA9PiA0LAorCURFQURMT0NLXzEgICAgICAgICA9 PiA1LAorCVdBSVRfUEdCRU5DSF8yICAgICA9PiA2LAorCURFQURMT0NLXzIgICAgICAgICA9PiA3 LAorCVRSQU5TQUNUSU9OX0VORFMgICA9PiA4LAorfTsKKworIyBUZXN0IGNvbmN1cnJlbnQgdXBk YXRlIGluIHRhYmxlIHJvdy4KK215ICRub2RlID0gZ2V0X25ld19ub2RlKCdtYWluJyk7Ciskbm9k ZS0+aW5pdDsKKyRub2RlLT5zdGFydDsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKyAg ICAnQ1JFQVRFIFVOTE9HR0VEIFRBQkxFIHh5ICh4IGludGVnZXIsIHkgaW50ZWdlcik7ICcKKyAg LiAnSU5TRVJUIElOVE8geHkgVkFMVUVTICgxLCAyKSwgKDIsIDMpOycpOworCitteSAkc2NyaXB0 X3NlcmlhbGl6YXRpb24gPSAkbm9kZS0+YmFzZWRpciAuICcvcGdiZW5jaF9zY3JpcHRfc2VyaWFs aXphdGlvbic7CithcHBlbmRfdG9fZmlsZSgkc2NyaXB0X3NlcmlhbGl6YXRpb24sCisJCSJcXHNl dCBkZWx0YSByYW5kb20oLTUwMDAsIDUwMDApXG4iCisJICAuICJCRUdJTlxcOyIKKwkgIC4gIlVQ REFURSB4eSBTRVQgeSA9IHkgKyA6ZGVsdGEgIgorCSAgLiAiV0hFUkUgeCA9IDEgQU5EIHBnX2Fk dmlzb3J5X2xvY2soMCkgSVMgTk9UIE5VTEw7XG4iCisJICAuICJFTkQ7XG4iCisJICAuICJTRUxF Q1QgcGdfYWR2aXNvcnlfdW5sb2NrX2FsbCgpOyIpOworCitteSAkc2NyaXB0X3NlcmlhbGl6YXRp b25fY29tcG91bmQgPQorCSRub2RlLT5iYXNlZGlyIC4gJy9wZ2JlbmNoX3NjcmlwdF9zZXJpYWxp emF0aW9uX2NvbXBvdW5kJzsKK2FwcGVuZF90b19maWxlKCRzY3JpcHRfc2VyaWFsaXphdGlvbl9j b21wb3VuZCwKKwkJIlxcc2V0IGRlbHRhIHJhbmRvbSgtNTAwMCwgNTAwMClcbiIKKwkgIC4gIkJF R0lOXFw7IgorCSAgLiAiVVBEQVRFIHh5IFNFVCB5ID0geSArIDpkZWx0YSAiCisJICAuICJXSEVS RSB4ID0gMSBBTkQgcGdfYWR2aXNvcnlfbG9jaygwKSBJUyBOT1QgTlVMTFxcOyIKKwkgIC4gIkVO RDtcbiIKKwkgIC4gIlNFTEVDVCBwZ19hZHZpc29yeV91bmxvY2tfYWxsKCk7Iik7CisKK215ICRz Y3JpcHRfZGVhZGxvY2tzMSA9ICRub2RlLT5iYXNlZGlyIC4gJy9wZ2JlbmNoX3NjcmlwdF9kZWFk bG9ja3MxJzsKK2FwcGVuZF90b19maWxlKCRzY3JpcHRfZGVhZGxvY2tzMSwKKwkJIkJFR0lOO1xu IgorCSAgLiAiU0VMRUNUIHBnX2Fkdmlzb3J5X3VubG9ja19hbGwoKTtcbiIKKwkgIC4gIlNFTEVD VCBwZ19hZHZpc29yeV9sb2NrKCIgLiBUUkFOU0FDVElPTl9CRUdJTlMgLiAiKTtcbiIKKwkgIC4g IlNFTEVDVCBwZ19hZHZpc29yeV91bmxvY2soIiAuIFRSQU5TQUNUSU9OX0JFR0lOUyAuICIpO1xu IgorCSAgLiAiU0VMRUNUIHBnX2Fkdmlzb3J5X2xvY2soIiAuIERFQURMT0NLXzEgLiAiKTtcbiIK KwkgIC4gIlNFTEVDVCBwZ19hZHZpc29yeV9sb2NrKCIgLiBXQUlUX1BHQkVOQ0hfMiAuICIpO1xu IgorCSAgLiAiU0VMRUNUIHBnX2Fkdmlzb3J5X2xvY2soIiAuIERFQURMT0NLXzIgLiAiKTtcbiIK KwkgIC4gIkVORDtcbiIKKwkgIC4gIlNFTEVDVCBwZ19hZHZpc29yeV91bmxvY2tfYWxsKCk7XG4i CisJICAuICJTRUxFQ1QgcGdfYWR2aXNvcnlfbG9jaygiIC4gVFJBTlNBQ1RJT05fRU5EUyAuICIp O1xuIgorCSAgLiAiU0VMRUNUIHBnX2Fkdmlzb3J5X3VubG9ja19hbGwoKTsiKTsKKworbXkgJHNj cmlwdF9kZWFkbG9ja3MyID0gJG5vZGUtPmJhc2VkaXIgLiAnL3BnYmVuY2hfc2NyaXB0X2RlYWRs b2NrczInOworYXBwZW5kX3RvX2ZpbGUoJHNjcmlwdF9kZWFkbG9ja3MyLAorCQkiQkVHSU47XG4i CisJICAuICJTRUxFQ1QgcGdfYWR2aXNvcnlfdW5sb2NrX2FsbCgpO1xuIgorCSAgLiAiU0VMRUNU IHBnX2Fkdmlzb3J5X2xvY2soIiAuIFRSQU5TQUNUSU9OX0JFR0lOUyAuICIpO1xuIgorCSAgLiAi U0VMRUNUIHBnX2Fkdmlzb3J5X3VubG9jaygiIC4gVFJBTlNBQ1RJT05fQkVHSU5TIC4gIik7XG4i CisJICAuICJTRUxFQ1QgcGdfYWR2aXNvcnlfbG9jaygiIC4gREVBRExPQ0tfMiAuICIpO1xuIgor CSAgLiAiU0VMRUNUIHBnX2Fkdmlzb3J5X2xvY2soIiAuIERFQURMT0NLXzEgLiAiKTtcbiIKKwkg IC4gIkVORDtcbiIKKwkgIC4gIlNFTEVDVCBwZ19hZHZpc29yeV91bmxvY2tfYWxsKCk7XG4iCisJ ICAuICJTRUxFQ1QgcGdfYWR2aXNvcnlfbG9jaygiIC4gVFJBTlNBQ1RJT05fRU5EUyAuICIpO1xu IgorCSAgLiAiU0VMRUNUIHBnX2Fkdmlzb3J5X3VubG9ja19hbGwoKTsiKTsKKworbXkgJHNjcmlw dF9jb21taXRfZmFpbHVyZSA9ICRub2RlLT5iYXNlZGlyIC4gJy9wZ2JlbmNoX3NjcmlwdF9jb21t aXRfZmFpbHVyZSc7CithcHBlbmRfdG9fZmlsZSgkc2NyaXB0X2NvbW1pdF9mYWlsdXJlLAorCQki XFxzZXQgZGVsdGEgcmFuZG9tKC01MDAwLCA1MDAwKVxuIgorCSAgLiAiQkVHSU5cXDsiCisJICAu ICJVUERBVEUgeHkgU0VUIHkgPSB5ICsgOmRlbHRhIFdIRVJFIHggPSAxXFw7IgorCSAgLiAiU0VM RUNUIHBnX2Fkdmlzb3J5X2xvY2soMClcXDsiCisJICAuICJFTkQ7XG4iCisJICAuICJTRUxFQ1Qg cGdfYWR2aXNvcnlfdW5sb2NrX2FsbCgpOyIpOworCitzdWIgdGVzdF9wZ2JlbmNoX3NlcmlhbGl6 YXRpb25fZXJyb3JzCit7CisJbXkgJGlzb2xhdGlvbl9sZXZlbCA9IFJFUEVBVEFCTEVfUkVBRDsK KwlteSAkaXNvbGF0aW9uX2xldmVsX3NoZWxsID0gJGlzb2xhdGlvbl9sZXZlbF9zaGVsbFskaXNv bGF0aW9uX2xldmVsXTsKKworCWxvY2FsICRFTlZ7UEdQT1JUfSA9ICRub2RlLT5wb3J0OworCWxv Y2FsICRFTlZ7UEdPUFRJT05TfSA9CisJCSItYyBkZWZhdWx0X3RyYW5zYWN0aW9uX2lzb2xhdGlv bj0iIC4gJGlzb2xhdGlvbl9sZXZlbF9zaGVsbDsKKwlwcmludCAiIyBQR09QVElPTlM6ICIgLiAk RU5We1BHT1BUSU9OU30gLiAiXG4iOworCisJbXkgKCRoX3BzcWwsICRpbl9wc3FsLCAkb3V0X3Bz cWwpOworCW15ICgkaF9wZ2JlbmNoLCAkaW5fcGdiZW5jaCwgJG91dF9wZ2JlbmNoLCAkZXJyX3Bn YmVuY2gpOworCisJIyBPcGVuIGEgcHNxbCBzZXNzaW9uLCBydW4gYSBwYXJhbGxlbCB0cmFuc2Fj dGlvbiBhbmQgYXF1aXJlIGFuIGFkdmlzb3J5CisJIyBsb2NrOgorCXByaW50ICIjIFN0YXJ0aW5n IHBzcWxcbiI7CisJJGhfcHNxbCA9IElQQzo6UnVuOjpzdGFydCBbICdwc3FsJyBdLCBcJGluX3Bz cWwsIFwkb3V0X3BzcWw7CisKKwkkaW5fcHNxbCA9ICJiZWdpbjtcbiI7CisJcHJpbnQgIiMgUnVu bmluZyBpbiBwc3FsOiAiIC4gam9pbigiICIsICRpbl9wc3FsKTsKKwkkaF9wc3FsLT5wdW1wKCkg dW50aWwgJG91dF9wc3FsID1+IC9CRUdJTi87CisKKwkkaW5fcHNxbCA9CisJCSJ1cGRhdGUgeHkg c2V0IHkgPSB5ICsgMSAiCisJICAuICJ3aGVyZSB4ID0gMSBhbmQgcGdfYWR2aXNvcnlfbG9jaygw KSBpcyBub3QgbnVsbDtcbiI7CisJcHJpbnQgIiMgUnVubmluZyBpbiBwc3FsOiAiIC4gam9pbigi ICIsICRpbl9wc3FsKTsKKwkkaF9wc3FsLT5wdW1wKCkgdW50aWwgJG91dF9wc3FsID1+IC9VUERB VEUgMS87CisKKwkjIFN0YXJ0IHBnYmVuY2g6CisJbXkgQGNvbW1hbmQgPSAoCisJCXF3KHBnYmVu Y2ggLS1uby12YWN1dW0gLS10cmFuc2FjdGlvbnMgMSAtLWRlYnVnLWZhaWxzIC0tZmlsZSksCisJ CSRzY3JpcHRfc2VyaWFsaXphdGlvbik7CisJcHJpbnQgIiMgUnVubmluZzogIiAuIGpvaW4oIiAi LCBAY29tbWFuZCkgLiAiXG4iOworCSRoX3BnYmVuY2ggPSBJUEM6OlJ1bjo6c3RhcnQgXEBjb21t YW5kLCBcJGluX3BnYmVuY2gsIFwkb3V0X3BnYmVuY2gsCisJICBcJGVycl9wZ2JlbmNoOworCisJ IyBXYWl0IHVudGlsIHBnYmVuY2ggYWxzbyB0cmllcyB0byBhY3F1aXJlIHRoZSBzYW1lIGFkdmlz b3J5IGxvY2s6CisJZG8KKwl7CisJCSRpbl9wc3FsID0KKwkJCSJzZWxlY3QgKiBmcm9tIHBnX2xv Y2tzIHdoZXJlICIKKwkJICAuICJsb2NrdHlwZSA9ICdhZHZpc29yeScgYW5kICIKKwkJICAuICJv YmpzdWJpZCA9IDEgYW5kICIKKwkJICAuICIoKGNsYXNzaWQ6OmJpZ2ludCA8PCAzMikgfCBvYmpp ZDo6YmlnaW50ID0gMDo6YmlnaW50KSBhbmQgIgorCQkgIC4gIm5vdCBncmFudGVkO1xuIjsKKwkJ cHJpbnQgIiMgUnVubmluZyBpbiBwc3FsOiAiIC4gam9pbigiICIsICRpbl9wc3FsKTsKKwkJJGhf cHNxbC0+cHVtcCgpIHdoaWxlIGxlbmd0aCAkaW5fcHNxbDsKKwl9IHdoaWxlICgkb3V0X3BzcWwg IX4gLzEgcm93Lyk7CisKKwkjIEluIHBzcWwsIGNvbW1pdCB0aGUgdHJhbnNhY3Rpb24sIHJlbGVh c2UgYWR2aXNvcnkgbG9ja3MgYW5kIGVuZCB0aGUKKwkjIHNlc3Npb246CisJJGluX3BzcWwgPSAi ZW5kO1xuIjsKKwlwcmludCAiIyBSdW5uaW5nIGluIHBzcWw6ICIgLiBqb2luKCIgIiwgJGluX3Bz cWwpOworCSRoX3BzcWwtPnB1bXAoKSB1bnRpbCAkb3V0X3BzcWwgPX4gL0NPTU1JVC87CisKKwkk aW5fcHNxbCA9ICJzZWxlY3QgcGdfYWR2aXNvcnlfdW5sb2NrX2FsbCgpO1xuIjsKKwlwcmludCAi IyBSdW5uaW5nIGluIHBzcWw6ICIgLiBqb2luKCIgIiwgJGluX3BzcWwpOworCSRoX3BzcWwtPnB1 bXAoKSB1bnRpbCAkb3V0X3BzcWwgPX4gL3BnX2Fkdmlzb3J5X3VubG9ja19hbGwvOworCisJJGlu X3BzcWwgPSAiXFxxXG4iOworCXByaW50ICIjIFJ1bm5pbmcgaW4gcHNxbDogIiAuIGpvaW4oIiAi LCAkaW5fcHNxbCk7CisJJGhfcHNxbC0+cHVtcCgpIHdoaWxlIGxlbmd0aCAkaW5fcHNxbDsKKwor CSRoX3BzcWwtPmZpbmlzaCgpOworCisJIyBHZXQgcGdiZW5jaCByZXN1bHRzCisJJGhfcGdiZW5j aC0+cHVtcCgpIHVudGlsIGxlbmd0aCAkb3V0X3BnYmVuY2g7CisJJGhfcGdiZW5jaC0+ZmluaXNo KCk7CisKKwkjIE9uIFdpbmRvd3MsIHRoZSBleGl0IHN0YXR1cyBvZiB0aGUgcHJvY2VzcyBpcyBy ZXR1cm5lZCBkaXJlY3RseSBhcyB0aGUKKwkjIHByb2Nlc3MncyBleGl0IGNvZGUsIHdoaWxlIG9u IFVuaXgsIGl0J3MgcmV0dXJuZWQgaW4gdGhlIGhpZ2ggYml0cworCSMgb2YgdGhlIGV4aXQgY29k ZSAoc2VlIFdFWElUU1RBVFVTIG1hY3JvIGluIHRoZSBzdGFuZGFyZCA8c3lzL3dhaXQuaD4KKwkj IGhlYWRlciBmaWxlKS4gSVBDOjpSdW4ncyByZXN1bHQgZnVuY3Rpb24gYWx3YXlzIHJldHVybnMg ZXhpdCBjb2RlID4+IDgsCisJIyBhc3N1bWluZyB0aGUgVW5peCBjb252ZW50aW9uLCB3aGljaCB3 aWxsIGFsd2F5cyByZXR1cm4gMCBvbiBXaW5kb3dzIGFzCisJIyBsb25nIGFzIHRoZSBwcm9jZXNz IHdhcyBub3QgdGVybWluYXRlZCBieSBhbiBleGNlcHRpb24uIFRvIHdvcmsgYXJvdW5kCisJIyB0 aGF0LCB1c2UgJGgtPmZ1bGxfcmVzdWx0IG9uIFdpbmRvd3MgaW5zdGVhZC4KKwlteSAkcmVzdWx0 ID0KKwkgICAgKCRDb25maWd7b3NuYW1lfSBlcSAiTVNXaW4zMiIpCisJICA/ICgkaF9wZ2JlbmNo LT5mdWxsX3Jlc3VsdHMpWzBdCisJICA6ICRoX3BnYmVuY2gtPnJlc3VsdCgwKTsKKworCSMgQ2hl Y2sgcGdiZW5jaCByZXN1bHRzCisJb2soISRyZXN1bHQsICJAY29tbWFuZCBleGl0IGNvZGUgMCIp OworCisJbGlrZSgkb3V0X3BnYmVuY2gsCisJCXFye3Byb2Nlc3NlZDogMS8xfSwKKwkJImNvbmN1 cnJlbnQgdXBkYXRlOiBjaGVjayBwcm9jZXNzZWQgdHJhbnNhY3Rpb25zIik7CisKKwlsaWtlKCRv dXRfcGdiZW5jaCwKKwkJcXJ7bnVtYmVyIG9mIGVycm9yczogMSBcKDEwMFwuMDAwICVcKX0sCisJ CSJjb25jdXJyZW50IHVwZGF0ZTogY2hlY2sgZXJyb3JzIik7CisKKwlteSAkcGF0dGVybiA9CisJ CSJjbGllbnQgMCBnb3QgYSBzZXJpYWxpemF0aW9uIGVycm9yIGluIGNvbW1hbmQgMSBcXChzdWJj b21tYW5kIDFcXCkgb2Ygc2NyaXB0IDA6XG4iCisJICAuICJFUlJPUjogIGNvdWxkIG5vdCBzZXJp YWxpemUgYWNjZXNzIGR1ZSB0byBjb25jdXJyZW50IHVwZGF0ZVxuIjsKKworCWxpa2UoJGVycl9w Z2JlbmNoLAorCQlxcnskcGF0dGVybn0sCisJCSJjb25jdXJyZW50IHVwZGF0ZTogY2hlY2sgc2Vy aWFsaXphdGlvbiBlcnJvciIpOworfQorCitzdWIgdGVzdF9wZ2JlbmNoX3NlcmlhbGl6YXRpb25f ZXJyb3JzX2FuZF9mYWlsdXJlcworeworCW15ICgkc2NyaXB0LCAkbmFtZSwgJGVycm9yKSA9IEBf OworCisJbXkgJGlzb2xhdGlvbl9sZXZlbCA9IFJFUEVBVEFCTEVfUkVBRDsKKwlteSAkaXNvbGF0 aW9uX2xldmVsX3NoZWxsID0gJGlzb2xhdGlvbl9sZXZlbF9zaGVsbFskaXNvbGF0aW9uX2xldmVs XTsKKworCWxvY2FsICRFTlZ7UEdQT1JUfSA9ICRub2RlLT5wb3J0OworCWxvY2FsICRFTlZ7UEdP UFRJT05TfSA9CisJCSItYyBkZWZhdWx0X3RyYW5zYWN0aW9uX2lzb2xhdGlvbj0iIC4gJGlzb2xh dGlvbl9sZXZlbF9zaGVsbDsKKwlwcmludCAiIyBQR09QVElPTlM6ICIgLiAkRU5We1BHT1BUSU9O U30gLiAiXG4iOworCisJbXkgKCRoX3BzcWwsICRpbl9wc3FsLCAkb3V0X3BzcWwpOworCW15ICgk aF9wZ2JlbmNoLCAkaW5fcGdiZW5jaCwgJG91dF9wZ2JlbmNoLCAkZXJyX3BnYmVuY2gpOworCisJ IyBPcGVuIGEgcHNxbCBzZXNzaW9uLCBydW4gYSBwYXJhbGxlbCB0cmFuc2FjdGlvbiBhbmQgYXF1 aXJlIGFuIGFkdmlzb3J5CisJIyBsb2NrOgorCXByaW50ICIjIFN0YXJ0aW5nIHBzcWxcbiI7CisJ JGhfcHNxbCA9IElQQzo6UnVuOjpzdGFydCBbICdwc3FsJyBdLCBcJGluX3BzcWwsIFwkb3V0X3Bz cWw7CisKKwkkaW5fcHNxbCA9ICJiZWdpbjtcbiI7CisJcHJpbnQgIiMgUnVubmluZyBpbiBwc3Fs OiAiIC4gam9pbigiICIsICRpbl9wc3FsKTsKKwkkaF9wc3FsLT5wdW1wKCkgdW50aWwgJG91dF9w c3FsID1+IC9CRUdJTi87CisKKwkkaW5fcHNxbCA9CisJCSJ1cGRhdGUgeHkgc2V0IHkgPSB5ICsg MSAiCisJICAuICJ3aGVyZSB4ID0gMSBhbmQgcGdfYWR2aXNvcnlfbG9jaygwKSBpcyBub3QgbnVs bDtcbiI7CisJcHJpbnQgIiMgUnVubmluZyBpbiBwc3FsOiAiIC4gam9pbigiICIsICRpbl9wc3Fs KTsKKwkkaF9wc3FsLT5wdW1wKCkgdW50aWwgJG91dF9wc3FsID1+IC9VUERBVEUgMS87CisKKwkj IFN0YXJ0IHBnYmVuY2g6CisJbXkgQGNvbW1hbmQgPSAoCisJCXF3KHBnYmVuY2ggLS1uby12YWN1 dW0gLS10cmFuc2FjdGlvbnMgMSksCisJCSRlcnJvciA/ICItLWRlYnVnLWZhaWxzIiA6ICItLWRl YnVnIiwKKwkJcXcoLS1tYXgtdHJpZXMgMiAtLWZpbGUpLAorCQkkc2NyaXB0KTsKKwlwcmludCAi IyBSdW5uaW5nOiAiIC4gam9pbigiICIsIEBjb21tYW5kKSAuICJcbiI7CisJJGhfcGdiZW5jaCA9 IElQQzo6UnVuOjpzdGFydCBcQGNvbW1hbmQsIFwkaW5fcGdiZW5jaCwgXCRvdXRfcGdiZW5jaCwK KwkgIFwkZXJyX3BnYmVuY2g7CisKKwkjIFdhaXQgdW50aWwgcGdiZW5jaCBhbHNvIHRyaWVzIHRv IGFjcXVpcmUgdGhlIHNhbWUgYWR2aXNvcnkgbG9jazoKKwlkbworCXsKKwkJJGluX3BzcWwgPQor CQkJInNlbGVjdCAqIGZyb20gcGdfbG9ja3Mgd2hlcmUgIgorCQkgIC4gImxvY2t0eXBlID0gJ2Fk dmlzb3J5JyBhbmQgIgorCQkgIC4gIm9ianN1YmlkID0gMSBhbmQgIgorCQkgIC4gIigoY2xhc3Np ZDo6YmlnaW50IDw8IDMyKSB8IG9iamlkOjpiaWdpbnQgPSAwOjpiaWdpbnQpIGFuZCAiCisJCSAg LiAibm90IGdyYW50ZWQ7XG4iOworCQlwcmludCAiIyBSdW5uaW5nIGluIHBzcWw6ICIgLiBqb2lu KCIgIiwgJGluX3BzcWwpOworCQkkaF9wc3FsLT5wdW1wKCkgd2hpbGUgbGVuZ3RoICRpbl9wc3Fs OworCX0gd2hpbGUgKCRvdXRfcHNxbCAhfiAvMSByb3cvKTsKKworCSMgSW4gcHNxbCwgY29tbWl0 IHRoZSB0cmFuc2FjdGlvbiwgcmVsZWFzZSBhZHZpc29yeSBsb2NrcyBhbmQgZW5kIHRoZQorCSMg c2Vzc2lvbjoKKwkkaW5fcHNxbCA9ICJlbmQ7XG4iOworCXByaW50ICIjIFJ1bm5pbmcgaW4gcHNx bDogIiAuIGpvaW4oIiAiLCAkaW5fcHNxbCk7CisJJGhfcHNxbC0+cHVtcCgpIHVudGlsICRvdXRf cHNxbCA9fiAvQ09NTUlULzsKKworCSRpbl9wc3FsID0gInNlbGVjdCBwZ19hZHZpc29yeV91bmxv Y2tfYWxsKCk7XG4iOworCXByaW50ICIjIFJ1bm5pbmcgaW4gcHNxbDogIiAuIGpvaW4oIiAiLCAk aW5fcHNxbCk7CisJJGhfcHNxbC0+cHVtcCgpIHVudGlsICRvdXRfcHNxbCA9fiAvcGdfYWR2aXNv cnlfdW5sb2NrX2FsbC87CisKKwkkaW5fcHNxbCA9ICJcXHFcbiI7CisJcHJpbnQgIiMgUnVubmlu ZyBpbiBwc3FsOiAiIC4gam9pbigiICIsICRpbl9wc3FsKTsKKwkkaF9wc3FsLT5wdW1wKCkgd2hp bGUgbGVuZ3RoICRpbl9wc3FsOworCisJJGhfcHNxbC0+ZmluaXNoKCk7CisKKwkjIEdldCBwZ2Jl bmNoIHJlc3VsdHMKKwkkaF9wZ2JlbmNoLT5wdW1wKCkgdW50aWwgbGVuZ3RoICRvdXRfcGdiZW5j aDsKKwkkaF9wZ2JlbmNoLT5maW5pc2goKTsKKworCSMgT24gV2luZG93cywgdGhlIGV4aXQgc3Rh dHVzIG9mIHRoZSBwcm9jZXNzIGlzIHJldHVybmVkIGRpcmVjdGx5IGFzIHRoZQorCSMgcHJvY2Vz cydzIGV4aXQgY29kZSwgd2hpbGUgb24gVW5peCwgaXQncyByZXR1cm5lZCBpbiB0aGUgaGlnaCBi aXRzCisJIyBvZiB0aGUgZXhpdCBjb2RlIChzZWUgV0VYSVRTVEFUVVMgbWFjcm8gaW4gdGhlIHN0 YW5kYXJkIDxzeXMvd2FpdC5oPgorCSMgaGVhZGVyIGZpbGUpLiBJUEM6OlJ1bidzIHJlc3VsdCBm dW5jdGlvbiBhbHdheXMgcmV0dXJucyBleGl0IGNvZGUgPj4gOCwKKwkjIGFzc3VtaW5nIHRoZSBV bml4IGNvbnZlbnRpb24sIHdoaWNoIHdpbGwgYWx3YXlzIHJldHVybiAwIG9uIFdpbmRvd3MgYXMK KwkjIGxvbmcgYXMgdGhlIHByb2Nlc3Mgd2FzIG5vdCB0ZXJtaW5hdGVkIGJ5IGFuIGV4Y2VwdGlv bi4gVG8gd29yayBhcm91bmQKKwkjIHRoYXQsIHVzZSAkaC0+ZnVsbF9yZXN1bHQgb24gV2luZG93 cyBpbnN0ZWFkLgorCW15ICRyZXN1bHQgPQorCSAgICAoJENvbmZpZ3tvc25hbWV9IGVxICJNU1dp bjMyIikKKwkgID8gKCRoX3BnYmVuY2gtPmZ1bGxfcmVzdWx0cylbMF0KKwkgIDogJGhfcGdiZW5j aC0+cmVzdWx0KDApOworCisJIyBDaGVjayBwZ2JlbmNoIHJlc3VsdHMKKwlvayghJHJlc3VsdCwg IkBjb21tYW5kIGV4aXQgY29kZSAwIik7CisKKwlsaWtlKCRvdXRfcGdiZW5jaCwKKwkJcXJ7cHJv Y2Vzc2VkOiAxLzF9LAorCQkkbmFtZSAuICI6IGNoZWNrIHByb2Nlc3NlZCB0cmFuc2FjdGlvbnMi KTsKKworCWlmICgkZXJyb3IpCisJeworCQlsaWtlKCRvdXRfcGdiZW5jaCwKKwkJCXFye251bWJl ciBvZiBlcnJvcnM6IDEgXCgxMDBcLjAwMCAlXCl9LAorCQkJJG5hbWUgLiAiOiBjaGVjayBlcnJv cnMiKTsKKworCQlteSAkcGF0dGVybiA9CisJCQkiY2xpZW50IDAgZ290IGEgc2VyaWFsaXphdGlv biBlcnJvciBpbiBjb21tYW5kIDEgXFwoc3ViY29tbWFuZCAxXFwpIG9mIHNjcmlwdCAwOlxuIgor CQkgIC4gIkVSUk9SOiAgY291bGQgbm90IHNlcmlhbGl6ZSBhY2Nlc3MgZHVlIHRvIGNvbmN1cnJl bnQgdXBkYXRlXG4iOworCisJCWxpa2UoJGVycl9wZ2JlbmNoLAorCQkJcXJ7JHBhdHRlcm59LAor CQkJJG5hbWUgLiAiOiBjaGVjayBzZXJpYWxpemF0aW9uIGVycm9yIik7CisJfQorCWVsc2UKKwl7 CisJCWxpa2UoJG91dF9wZ2JlbmNoLAorCQkJcXJ7XigoPyFudW1iZXIgb2YgZXJyb3JzKSgufFxu KSkqJH0sCisJCQkiY29uY3VycmVudCB1cGRhdGUgd2l0aCByZXRyeWluZzogY2hlY2sgZXJyb3Jz Iik7CisKKwkJbXkgJHBhdHRlcm4gPQorCQkJImNsaWVudCAwIHNlbmRpbmcgQkVHSU47VVBEQVRF IHh5IFNFVCB5ID0geSBcXCsgKC0/XFxkKykgIgorCQkgIC4gIldIRVJFIHggPSAxIEFORCBwZ19h ZHZpc29yeV9sb2NrXFwoMFxcKSBJUyBOT1QgTlVMTDtcbiIKKwkJICAuICIoY2xpZW50IDAgcmVj ZWl2aW5nXG4pKyIKKwkJICAuICJjbGllbnQgMCBnb3QgYSBzZXJpYWxpemF0aW9uIGZhaWx1cmUg XFwodHJ5IDEvMlxcKSBpbiBjb21tYW5kIDEgXFwoc3ViY29tbWFuZCAxXFwpIG9mIHNjcmlwdCAw OlxuIgorCQkgIC4gIkVSUk9SOiAgY291bGQgbm90IHNlcmlhbGl6ZSBhY2Nlc3MgZHVlIHRvIGNv bmN1cnJlbnQgdXBkYXRlXG4iCisJCSAgLiAiY2xpZW50IDAgc2VuZGluZyBFTkQ7XG4iCisJCSAg LiAiXFxnMisiCisJCSAgLiAiY2xpZW50IDAgcmVwZWF0cyB0aGUgZmFpbGVkIHRyYW5zYWN0aW9u IFxcKHRyeSAyLzJcXClcbiIKKwkJICAuICJjbGllbnQgMCBzZW5kaW5nIEJFR0lOO1VQREFURSB4 eSBTRVQgeSA9IHkgXFwrIFxcZzEgIgorCQkgIC4gIldIRVJFIHggPSAxIEFORCBwZ19hZHZpc29y eV9sb2NrXFwoMFxcKSBJUyBOT1QgTlVMTDsiOworCisJCWxpa2UoJGVycl9wZ2JlbmNoLAorCQkJ cXJ7JHBhdHRlcm59LAorCQkJJG5hbWUgLiAiOiBjaGVjayB0aGUgcmV0cmllZCB0cmFuc2FjdGlv biIpOworCX0KK30KKworc3ViIHRlc3RfcGdiZW5jaF9kZWFkbG9ja19lcnJvcnMKK3sKKwlteSAk aXNvbGF0aW9uX2xldmVsID0gUkVBRF9DT01NSVRURUQ7CisJbXkgJGlzb2xhdGlvbl9sZXZlbF9z aGVsbCA9ICRpc29sYXRpb25fbGV2ZWxfc2hlbGxbJGlzb2xhdGlvbl9sZXZlbF07CisKKwlsb2Nh bCAkRU5We1BHUE9SVH0gPSAkbm9kZS0+cG9ydDsKKwlsb2NhbCAkRU5We1BHT1BUSU9OU30gPQor CQkiLWMgZGVmYXVsdF90cmFuc2FjdGlvbl9pc29sYXRpb249IiAuICRpc29sYXRpb25fbGV2ZWxf c2hlbGw7CisJcHJpbnQgIiMgUEdPUFRJT05TOiAiIC4gJEVOVntQR09QVElPTlN9IC4gIlxuIjsK KworCW15ICgkaF9wc3FsLCAkaW5fcHNxbCwgJG91dF9wc3FsKTsKKwlteSAoJGgxLCAkaW4xLCAk b3V0MSwgJGVycjEpOworCW15ICgkaDIsICRpbjIsICRvdXQyLCAkZXJyMik7CisKKwkjIE9wZW4g YSBwc3FsIHNlc3Npb24gYW5kIGFxdWlyZSBhbiBhZHZpc29yeSBsb2NrOgorCXByaW50ICIjIFN0 YXJ0aW5nIHBzcWxcbiI7CisJJGhfcHNxbCA9IElQQzo6UnVuOjpzdGFydCBbICdwc3FsJyBdLCBc JGluX3BzcWwsIFwkb3V0X3BzcWw7CisKKwkkaW5fcHNxbCA9CisJCSJzZWxlY3QgcGdfYWR2aXNv cnlfbG9jaygiIC4gV0FJVF9QR0JFTkNIXzIgLiAiKSAiCisJICAuICJhcyBwZ19hZHZpc29yeV9s b2NrXyIgLiBXQUlUX1BHQkVOQ0hfMiAuICI7XG4iOworCXByaW50ICIjIFJ1bm5pbmcgaW4gcHNx bDogIiAuIGpvaW4oIiAiLCAkaW5fcHNxbCk7CisJJGhfcHNxbC0+cHVtcCgpIHVudGlsICRvdXRf cHNxbCA9fiAvcGdfYWR2aXNvcnlfbG9ja19Ae1sgV0FJVF9QR0JFTkNIXzIgXX0vOworCisJIyBS dW4gdGhlIGZpcnN0IHBnYmVuY2g6CisJbXkgQGNvbW1hbmQxID0gKAorCQlxdyhwZ2JlbmNoIC0t bm8tdmFjdXVtIC0tdHJhbnNhY3Rpb25zIDEgLS1kZWJ1ZyAtLWZpbGUpLAorCQkkc2NyaXB0X2Rl YWRsb2NrczEpOworCXByaW50ICIjIFJ1bm5pbmc6ICIgLiBqb2luKCIgIiwgQGNvbW1hbmQxKSAu ICJcbiI7CisJJGgxID0gSVBDOjpSdW46OnN0YXJ0IFxAY29tbWFuZDEsIFwkaW4xLCBcJG91dDEs IFwkZXJyMTsKKworCSMgV2FpdCB1bnRpbCB0aGUgZmlyc3QgcGdiZW5jaCBhbHNvIHRyaWVzIHRv IGFjcXVpcmUgdGhlIHNhbWUgYWR2aXNvcnkgbG9jazoKKwlkbworCXsKKwkJJGluX3BzcWwgPQor CQkJInNlbGVjdCBjYXNlIGNvdW50KCopICIKKwkJICAuICJ3aGVuIDAgdGhlbiAnIiAuIFdBSVRf UEdCRU5DSF8yIC4gIl96ZXJvJyAiCisJCSAgLiAiZWxzZSAnIiAuIFdBSVRfUEdCRU5DSF8yIC4g Il9ub3RfemVybycgZW5kICIKKwkJICAuICJmcm9tIHBnX2xvY2tzIHdoZXJlICIKKwkJICAuICJs b2NrdHlwZSA9ICdhZHZpc29yeScgYW5kICIKKwkJICAuICJvYmpzdWJpZCA9IDEgYW5kICIKKwkJ ICAuICIoKGNsYXNzaWQ6OmJpZ2ludCA8PCAzMikgfCBvYmppZDo6YmlnaW50ID0gIgorCQkgIC4g V0FJVF9QR0JFTkNIXzIKKwkJICAuICI6OmJpZ2ludCkgYW5kICIKKwkJICAuICJub3QgZ3JhbnRl ZDtcbiI7CisJCXByaW50ICIjIFJ1bm5pbmcgaW4gcHNxbDogIiAuIGpvaW4oIiAiLCAkaW5fcHNx bCk7CisJCSRoX3BzcWwtPnB1bXAoKSB3aGlsZSBsZW5ndGggJGluX3BzcWw7CisJfSB3aGlsZSAo JG91dF9wc3FsICF+IC9Ae1sgV0FJVF9QR0JFTkNIXzIgXX1fbm90X3plcm8vKTsKKworCSMgUnVu IHRoZSBzZWNvbmQgcGdiZW5jaDoKKwlteSBAY29tbWFuZDIgPSAoCisJCXF3KHBnYmVuY2ggLS1u by12YWN1dW0gLS10cmFuc2FjdGlvbnMgMSAtLWRlYnVnIC0tZmlsZSksCisJCSRzY3JpcHRfZGVh ZGxvY2tzMik7CisJcHJpbnQgIiMgUnVubmluZzogIiAuIGpvaW4oIiAiLCBAY29tbWFuZDIpIC4g IlxuIjsKKwkkaDIgPSBJUEM6OlJ1bjo6c3RhcnQgXEBjb21tYW5kMiwgXCRpbjIsIFwkb3V0Miwg XCRlcnIyOworCisJIyBXYWl0IHVudGlsIHRoZSBzZWNvbmQgcGdiZW5jaCB0cmllcyB0byBhY3F1 aXJlIHRoZSBsb2NrIGhlbGQgYnkgdGhlIGZpcnN0CisJIyBwZ2JlbmNoOgorCWRvCisJeworCQkk aW5fcHNxbCA9CisJCQkic2VsZWN0IGNhc2UgY291bnQoKikgIgorCQkgIC4gIndoZW4gMCB0aGVu ICciIC4gREVBRExPQ0tfMSAuICJfemVybycgIgorCQkgIC4gImVsc2UgJyIgLiBERUFETE9DS18x IC4gIl9ub3RfemVybycgZW5kICIKKwkJICAuICJmcm9tIHBnX2xvY2tzIHdoZXJlICIKKwkJICAu ICJsb2NrdHlwZSA9ICdhZHZpc29yeScgYW5kICIKKwkJICAuICJvYmpzdWJpZCA9IDEgYW5kICIK KwkJICAuICIoKGNsYXNzaWQ6OmJpZ2ludCA8PCAzMikgfCBvYmppZDo6YmlnaW50ID0gIgorCQkg IC4gREVBRExPQ0tfMQorCQkgIC4gIjo6YmlnaW50KSBhbmQgIgorCQkgIC4gIm5vdCBncmFudGVk O1xuIjsKKwkJcHJpbnQgIiMgUnVubmluZyBpbiBwc3FsOiAiIC4gam9pbigiICIsICRpbl9wc3Fs KTsKKwkJJGhfcHNxbC0+cHVtcCgpIHdoaWxlIGxlbmd0aCAkaW5fcHNxbDsKKwl9IHdoaWxlICgk b3V0X3BzcWwgIX4gL0B7WyBERUFETE9DS18xIF19X25vdF96ZXJvLyk7CisKKwkjIEluIHRoZSBw c3FsIHNlc3Npb24sIHJlbGVhc2UgdGhlIGxvY2sgdGhhdCB0aGUgZmlyc3QgcGdiZW5jaCBpcyB3 YWl0aW5nCisJIyBmb3IgYW5kIGVuZCB0aGUgc2Vzc2lvbjoKKwkkaW5fcHNxbCA9CisJCSJzZWxl Y3QgcGdfYWR2aXNvcnlfdW5sb2NrKCIgLiBXQUlUX1BHQkVOQ0hfMiAuICIpICIKKwkgIC4gImFz IHBnX2Fkdmlzb3J5X3VubG9ja18iIC4gV0FJVF9QR0JFTkNIXzIgLiAiO1xuIjsKKwlwcmludCAi IyBSdW5uaW5nIGluIHBzcWw6ICIgLiBqb2luKCIgIiwgJGluX3BzcWwpOworCSRoX3BzcWwtPnB1 bXAoKSB1bnRpbCAkb3V0X3BzcWwgPX4gL3BnX2Fkdmlzb3J5X3VubG9ja19Ae1sgV0FJVF9QR0JF TkNIXzIgXX0vOworCisJJGluX3BzcWwgPSAiXFxxXG4iOworCXByaW50ICIjIFJ1bm5pbmcgaW4g cHNxbDogIiAuIGpvaW4oIiAiLCAkaW5fcHNxbCk7CisJJGhfcHNxbC0+cHVtcCgpIHdoaWxlIGxl bmd0aCAkaW5fcHNxbDsKKworCSRoX3BzcWwtPmZpbmlzaCgpOworCisJIyBHZXQgcmVzdWx0cyBm cm9tIGFsbCBwZ2JlbmNoZXM6CisJJGgxLT5wdW1wKCkgdW50aWwgbGVuZ3RoICRvdXQxOworCSRo MS0+ZmluaXNoKCk7CisKKwkkaDItPnB1bXAoKSB1bnRpbCBsZW5ndGggJG91dDI7CisJJGgyLT5m aW5pc2goKTsKKworCSMgT24gV2luZG93cywgdGhlIGV4aXQgc3RhdHVzIG9mIHRoZSBwcm9jZXNz IGlzIHJldHVybmVkIGRpcmVjdGx5IGFzIHRoZQorCSMgcHJvY2VzcydzIGV4aXQgY29kZSwgd2hp bGUgb24gVW5peCwgaXQncyByZXR1cm5lZCBpbiB0aGUgaGlnaCBiaXRzCisJIyBvZiB0aGUgZXhp dCBjb2RlIChzZWUgV0VYSVRTVEFUVVMgbWFjcm8gaW4gdGhlIHN0YW5kYXJkIDxzeXMvd2FpdC5o PgorCSMgaGVhZGVyIGZpbGUpLiBJUEM6OlJ1bidzIHJlc3VsdCBmdW5jdGlvbiBhbHdheXMgcmV0 dXJucyBleGl0IGNvZGUgPj4gOCwKKwkjIGFzc3VtaW5nIHRoZSBVbml4IGNvbnZlbnRpb24sIHdo aWNoIHdpbGwgYWx3YXlzIHJldHVybiAwIG9uIFdpbmRvd3MgYXMKKwkjIGxvbmcgYXMgdGhlIHBy b2Nlc3Mgd2FzIG5vdCB0ZXJtaW5hdGVkIGJ5IGFuIGV4Y2VwdGlvbi4gVG8gd29yayBhcm91bmQK KwkjIHRoYXQsIHVzZSAkaC0+ZnVsbF9yZXN1bHQgb24gV2luZG93cyBpbnN0ZWFkLgorCW15ICRy ZXN1bHQxID0KKwkgICAgKCRDb25maWd7b3NuYW1lfSBlcSAiTVNXaW4zMiIpCisJICA/ICgkaDEt PmZ1bGxfcmVzdWx0cylbMF0KKwkgIDogJGgxLT5yZXN1bHQoMCk7CisKKwlteSAkcmVzdWx0MiA9 CisJICAgICgkQ29uZmlne29zbmFtZX0gZXEgIk1TV2luMzIiKQorCSAgPyAoJGgyLT5mdWxsX3Jl c3VsdHMpWzBdCisJICA6ICRoMi0+cmVzdWx0KDApOworCisJIyBDaGVjayBhbGwgcGdiZW5jaCBy ZXN1bHRzCisJb2soISRyZXN1bHQxLCAiQGNvbW1hbmQxIGV4aXQgY29kZSAwIik7CisJb2soISRy ZXN1bHQyLCAiQGNvbW1hbmQyIGV4aXQgY29kZSAwIik7CisKKwlsaWtlKCRvdXQxLAorCQlxcntw cm9jZXNzZWQ6IDEvMX0sCisJCSJjb25jdXJyZW50IGRlYWRsb2NrIHVwZGF0ZTogcGdiZW5jaCAx OiBjaGVjayBwcm9jZXNzZWQgdHJhbnNhY3Rpb25zIik7CisJbGlrZSgkb3V0MiwKKwkJcXJ7cHJv Y2Vzc2VkOiAxLzF9LAorCQkiY29uY3VycmVudCBkZWFkbG9jayB1cGRhdGU6IHBnYmVuY2ggMjog Y2hlY2sgcHJvY2Vzc2VkIHRyYW5zYWN0aW9ucyIpOworCisJIyBUaGUgZmlyc3Qgb3Igc2Vjb25k IHBnYmVuY2ggc2hvdWxkIGdldCBhIGRlYWRsb2NrIGVycm9yCisJbGlrZSgkb3V0MSAuICRvdXQy LAorCQlxcntudW1iZXIgb2YgZXJyb3JzOiAxIFwoMTAwXC4wMDAgJVwpfSwKKwkJImNvbmN1cnJl bnQgZGVhZGxvY2sgdXBkYXRlOiBjaGVjayBlcnJvcnMiKTsKKworCW9rKAorCQkoJGVycjEgPX4g L2NsaWVudCAwIGdvdCBhIGRlYWRsb2NrIGVycm9yIGluIGNvbW1hbmQgNi8gb3IKKwkgICAgICRl cnIyID1+IC9jbGllbnQgMCBnb3QgYSBkZWFkbG9jayBlcnJvciBpbiBjb21tYW5kIDUvKSwKKwkJ ImNvbmN1cnJlbnQgZGVhZGxvY2sgdXBkYXRlOiBjaGVjayBkZWFkbG9jayBlcnJvciIpOworfQor CitzdWIgdGVzdF9wZ2JlbmNoX2RlYWRsb2NrX2ZhaWx1cmVzCit7CisJbXkgJGlzb2xhdGlvbl9s ZXZlbCA9IFJFQURfQ09NTUlUVEVEOworCW15ICRpc29sYXRpb25fbGV2ZWxfc2hlbGwgPSAkaXNv bGF0aW9uX2xldmVsX3NoZWxsWyRpc29sYXRpb25fbGV2ZWxdOworCisJbG9jYWwgJEVOVntQR1BP UlR9ID0gJG5vZGUtPnBvcnQ7CisJbG9jYWwgJEVOVntQR09QVElPTlN9ID0KKwkJIi1jIGRlZmF1 bHRfdHJhbnNhY3Rpb25faXNvbGF0aW9uPSIgLiAkaXNvbGF0aW9uX2xldmVsX3NoZWxsOworCXBy aW50ICIjIFBHT1BUSU9OUzogIiAuICRFTlZ7UEdPUFRJT05TfSAuICJcbiI7CisKKwlteSAoJGhf cHNxbCwgJGluX3BzcWwsICRvdXRfcHNxbCk7CisJbXkgKCRoMSwgJGluMSwgJG91dDEsICRlcnIx KTsKKwlteSAoJGgyLCAkaW4yLCAkb3V0MiwgJGVycjIpOworCisJIyBPcGVuIGEgcHNxbCBzZXNz aW9uIGFuZCBhcXVpcmUgYW4gYWR2aXNvcnkgbG9jazoKKwlwcmludCAiIyBTdGFydGluZyBwc3Fs XG4iOworCSRoX3BzcWwgPSBJUEM6OlJ1bjo6c3RhcnQgWyAncHNxbCcgXSwgXCRpbl9wc3FsLCBc JG91dF9wc3FsOworCisJJGluX3BzcWwgPQorCQkic2VsZWN0IHBnX2Fkdmlzb3J5X2xvY2soIiAu IFdBSVRfUEdCRU5DSF8yIC4gIikgIgorCSAgLiAiYXMgcGdfYWR2aXNvcnlfbG9ja18iIC4gV0FJ VF9QR0JFTkNIXzIgLiAiO1xuIjsKKwlwcmludCAiIyBSdW5uaW5nIGluIHBzcWw6ICIgLiBqb2lu KCIgIiwgJGluX3BzcWwpOworCSRoX3BzcWwtPnB1bXAoKSB1bnRpbCAkb3V0X3BzcWwgPX4gL3Bn X2Fkdmlzb3J5X2xvY2tfQHtbIFdBSVRfUEdCRU5DSF8yIF19LzsKKworCSMgUnVuIHRoZSBmaXJz dCBwZ2JlbmNoOgorCW15IEBjb21tYW5kMSA9ICgKKwkJcXcocGdiZW5jaCAtLW5vLXZhY3V1bSAt LXRyYW5zYWN0aW9ucyAxIC0tZGVidWcgLS1tYXgtdHJpZXMgMiAtLWZpbGUpLAorCQkkc2NyaXB0 X2RlYWRsb2NrczEpOworCXByaW50ICIjIFJ1bm5pbmc6ICIgLiBqb2luKCIgIiwgQGNvbW1hbmQx KSAuICJcbiI7CisJJGgxID0gSVBDOjpSdW46OnN0YXJ0IFxAY29tbWFuZDEsIFwkaW4xLCBcJG91 dDEsIFwkZXJyMTsKKworCSMgV2FpdCB1bnRpbCB0aGUgZmlyc3QgcGdiZW5jaCBhbHNvIHRyaWVz IHRvIGFjcXVpcmUgdGhlIHNhbWUgYWR2aXNvcnkgbG9jazoKKwlkbworCXsKKwkJJGluX3BzcWwg PQorCQkJInNlbGVjdCBjYXNlIGNvdW50KCopICIKKwkJICAuICJ3aGVuIDAgdGhlbiAnIiAuIFdB SVRfUEdCRU5DSF8yIC4gIl96ZXJvJyAiCisJCSAgLiAiZWxzZSAnIiAuIFdBSVRfUEdCRU5DSF8y IC4gIl9ub3RfemVybycgZW5kICIKKwkJICAuICJmcm9tIHBnX2xvY2tzIHdoZXJlICIKKwkJICAu ICJsb2NrdHlwZSA9ICdhZHZpc29yeScgYW5kICIKKwkJICAuICJvYmpzdWJpZCA9IDEgYW5kICIK KwkJICAuICIoKGNsYXNzaWQ6OmJpZ2ludCA8PCAzMikgfCBvYmppZDo6YmlnaW50ID0gIgorCQkg IC4gV0FJVF9QR0JFTkNIXzIKKwkJICAuICI6OmJpZ2ludCkgYW5kICIKKwkJICAuICJub3QgZ3Jh bnRlZDtcbiI7CisJCXByaW50ICIjIFJ1bm5pbmcgaW4gcHNxbDogIiAuIGpvaW4oIiAiLCAkaW5f cHNxbCk7CisJCSRoX3BzcWwtPnB1bXAoKSB3aGlsZSBsZW5ndGggJGluX3BzcWw7CisJfSB3aGls ZSAoJG91dF9wc3FsICF+IC9Ae1sgV0FJVF9QR0JFTkNIXzIgXX1fbm90X3plcm8vKTsKKworCSMg UnVuIHRoZSBzZWNvbmQgcGdiZW5jaDoKKwlteSBAY29tbWFuZDIgPSAoCisJCXF3KHBnYmVuY2gg LS1uby12YWN1dW0gLS10cmFuc2FjdGlvbnMgMSAtLWRlYnVnIC0tbWF4LXRyaWVzIDIgLS1maWxl KSwKKwkJJHNjcmlwdF9kZWFkbG9ja3MyKTsKKwlwcmludCAiIyBSdW5uaW5nOiAiIC4gam9pbigi ICIsIEBjb21tYW5kMikgLiAiXG4iOworCSRoMiA9IElQQzo6UnVuOjpzdGFydCBcQGNvbW1hbmQy LCBcJGluMiwgXCRvdXQyLCBcJGVycjI7CisKKwkjIFdhaXQgdW50aWwgdGhlIHNlY29uZCBwZ2Jl bmNoIHRyaWVzIHRvIGFjcXVpcmUgdGhlIGxvY2sgaGVsZCBieSB0aGUgZmlyc3QKKwkjIHBnYmVu Y2g6CisJZG8KKwl7CisJCSRpbl9wc3FsID0KKwkJCSJzZWxlY3QgY2FzZSBjb3VudCgqKSAiCisJ CSAgLiAid2hlbiAwIHRoZW4gJyIgLiBERUFETE9DS18xIC4gIl96ZXJvJyAiCisJCSAgLiAiZWxz ZSAnIiAuIERFQURMT0NLXzEgLiAiX25vdF96ZXJvJyBlbmQgIgorCQkgIC4gImZyb20gcGdfbG9j a3Mgd2hlcmUgIgorCQkgIC4gImxvY2t0eXBlID0gJ2Fkdmlzb3J5JyBhbmQgIgorCQkgIC4gIm9i anN1YmlkID0gMSBhbmQgIgorCQkgIC4gIigoY2xhc3NpZDo6YmlnaW50IDw8IDMyKSB8IG9iamlk OjpiaWdpbnQgPSAiCisJCSAgLiBERUFETE9DS18xCisJCSAgLiAiOjpiaWdpbnQpIGFuZCAiCisJ CSAgLiAibm90IGdyYW50ZWQ7XG4iOworCQlwcmludCAiIyBSdW5uaW5nIGluIHBzcWw6ICIgLiBq b2luKCIgIiwgJGluX3BzcWwpOworCQkkaF9wc3FsLT5wdW1wKCkgd2hpbGUgbGVuZ3RoICRpbl9w c3FsOworCX0gd2hpbGUgKCRvdXRfcHNxbCAhfiAvQHtbIERFQURMT0NLXzEgXX1fbm90X3plcm8v KTsKKworCSMgSW4gdGhlIHBzcWwgc2Vzc2lvbiwgYWNxdWlyZSB0aGUgbG9ja3Mgd2hpY2ggcGdi ZW5jaGVzIHdpbGwgd2FpdCBmb3I6CisJIyAtIHBnYmVuY2ggd2l0aCBhIGRlYWRsb2NrIGZhaWx1 cmUgd2lsbCB3YWl0IGZvciB0aGUgbG9jayBhZnRlciB0aGUgc3RhcnQKKwkjICAgb2YgaXRzIHJl dHJpZWQgdHJhbnNhY3Rpb24KKwkjIC0gcGdiZW5jaCB3aXRob3V0IGEgZGVhZGxvY2sgZmFpbHVy ZSB3aWxsIHdhaXQgZm9yIHRoZSBsb2NrIGFmdGVyIHRoZSBlbmQKKwkjICAgb2YgaXRzIHN1Y2Vz c3VmdWwgdHJhbnNhY3Rpb24KKworCSRpbl9wc3FsID0KKwkJInNlbGVjdCBwZ19hZHZpc29yeV9s b2NrKCIgLiBUUkFOU0FDVElPTl9CRUdJTlMgLiAiKSAiCisJICAuICJhcyBwZ19hZHZpc29yeV9s b2NrXyIgLiBUUkFOU0FDVElPTl9CRUdJTlMgLiAiO1xuIjsKKwlwcmludCAiIyBSdW5uaW5nIGlu IHBzcWw6ICIgLiBqb2luKCIgIiwgJGluX3BzcWwpOworCSRoX3BzcWwtPnB1bXAoKSB1bnRpbCAk b3V0X3BzcWwgPX4gL3BnX2Fkdmlzb3J5X2xvY2tfQHtbIFRSQU5TQUNUSU9OX0JFR0lOUyBdfS87 CisKKwkkaW5fcHNxbCA9CisJCSJzZWxlY3QgcGdfYWR2aXNvcnlfbG9jaygiIC4gVFJBTlNBQ1RJ T05fRU5EUyAuICIpICIKKwkgIC4gImFzIHBnX2Fkdmlzb3J5X2xvY2tfIiAuIFRSQU5TQUNUSU9O X0VORFMgLiAiO1xuIjsKKwlwcmludCAiIyBSdW5uaW5nIGluIHBzcWw6ICIgLiBqb2luKCIgIiwg JGluX3BzcWwpOworCSRoX3BzcWwtPnB1bXAoKSB1bnRpbCAkb3V0X3BzcWwgPX4gL3BnX2Fkdmlz b3J5X2xvY2tfQHtbIFRSQU5TQUNUSU9OX0VORFMgXX0vOworCisJIyBJbiB0aGUgcHNxbCBzZXNz aW9uLCByZWxlYXNlIHRoZSBsb2NrIHRoYXQgdGhlIGZpcnN0IHBnYmVuY2ggaXMgd2FpdGluZwor CSMgZm9yOgorCSRpbl9wc3FsID0KKwkJInNlbGVjdCBwZ19hZHZpc29yeV91bmxvY2soIiAuIFdB SVRfUEdCRU5DSF8yIC4gIikgIgorCSAgLiAiYXMgcGdfYWR2aXNvcnlfdW5sb2NrXyIgLiBXQUlU X1BHQkVOQ0hfMiAuICI7XG4iOworCXByaW50ICIjIFJ1bm5pbmcgaW4gcHNxbDogIiAuIGpvaW4o IiAiLCAkaW5fcHNxbCk7CisJJGhfcHNxbC0+cHVtcCgpIHVudGlsICRvdXRfcHNxbCA9fiAvcGdf YWR2aXNvcnlfdW5sb2NrX0B7WyBXQUlUX1BHQkVOQ0hfMiBdfS87CisKKwkjIFdhaXQgdW50aWwg cGdiZW5jaGVzIHRyeSB0byBhY3F1aXJlIHRoZSBsb2NrcyBoZWxkIGJ5IHRoZSBwc3FsIHNlc3Np b246CisJZG8KKwl7CisJCSRpbl9wc3FsID0KKwkJCSJzZWxlY3QgY2FzZSBjb3VudCgqKSAiCisJ CSAgLiAid2hlbiAwIHRoZW4gJyIgLiBUUkFOU0FDVElPTl9CRUdJTlMgLiAiX3plcm8nICIKKwkJ ICAuICJlbHNlICciIC4gVFJBTlNBQ1RJT05fQkVHSU5TIC4gIl9ub3RfemVybycgZW5kICIKKwkJ ICAuICJmcm9tIHBnX2xvY2tzIHdoZXJlICIKKwkJICAuICJsb2NrdHlwZSA9ICdhZHZpc29yeScg YW5kICIKKwkJICAuICJvYmpzdWJpZCA9IDEgYW5kICIKKwkJICAuICIoKGNsYXNzaWQ6OmJpZ2lu dCA8PCAzMikgfCBvYmppZDo6YmlnaW50ID0gIgorCQkgIC4gVFJBTlNBQ1RJT05fQkVHSU5TCisJ CSAgLiAiOjpiaWdpbnQpIGFuZCAiCisJCSAgLiAibm90IGdyYW50ZWQ7XG4iOworCQlwcmludCAi IyBSdW5uaW5nIGluIHBzcWw6ICIgLiBqb2luKCIgIiwgJGluX3BzcWwpOworCQkkaF9wc3FsLT5w dW1wKCkgd2hpbGUgbGVuZ3RoICRpbl9wc3FsOworCX0gd2hpbGUgKCRvdXRfcHNxbCAhfiAvQHtb IFRSQU5TQUNUSU9OX0JFR0lOUyBdfV9ub3RfemVyby8pOworCisJZG8KKwl7CisJCSRpbl9wc3Fs ID0KKwkJCSJzZWxlY3QgY2FzZSBjb3VudCgqKSAiCisJCSAgLiAid2hlbiAwIHRoZW4gJyIgLiBU UkFOU0FDVElPTl9FTkRTIC4gIl96ZXJvJyAiCisJCSAgLiAiZWxzZSAnIiAuIFRSQU5TQUNUSU9O X0VORFMgLiAiX25vdF96ZXJvJyBlbmQgIgorCQkgIC4gImZyb20gcGdfbG9ja3Mgd2hlcmUgIgor CQkgIC4gImxvY2t0eXBlID0gJ2Fkdmlzb3J5JyBhbmQgIgorCQkgIC4gIm9ianN1YmlkID0gMSBh bmQgIgorCQkgIC4gIigoY2xhc3NpZDo6YmlnaW50IDw8IDMyKSB8IG9iamlkOjpiaWdpbnQgPSAi CisJCSAgLiBUUkFOU0FDVElPTl9FTkRTCisJCSAgLiAiOjpiaWdpbnQpIGFuZCAiCisJCSAgLiAi bm90IGdyYW50ZWQ7XG4iOworCQlwcmludCAiIyBSdW5uaW5nIGluIHBzcWw6ICIgLiBqb2luKCIg IiwgJGluX3BzcWwpOworCQkkaF9wc3FsLT5wdW1wKCkgd2hpbGUgbGVuZ3RoICRpbl9wc3FsOwor CX0gd2hpbGUgKCRvdXRfcHNxbCAhfiAvQHtbIFRSQU5TQUNUSU9OX0VORFMgXX1fbm90X3plcm8v KTsKKworCSMgSW4gdGhlIHBzcWwgc2Vzc2lvbiwgcmVsZWFzZSBhZHZpc29yeSBsb2NrcyBhbmQg ZW5kIHRoZSBzZXNzaW9uOgorCSRpbl9wc3FsID0gInNlbGVjdCBwZ19hZHZpc29yeV91bmxvY2tf YWxsKCkgYXMgcGdfYWR2aXNvcnlfdW5sb2NrX2FsbDtcbiI7CisJcHJpbnQgIiMgUnVubmluZyBp biBwc3FsOiAiIC4gam9pbigiICIsICRpbl9wc3FsKTsKKwkkaF9wc3FsLT5wdW1wKCkgdW50aWwg JG91dF9wc3FsID1+IC9wZ19hZHZpc29yeV91bmxvY2tfYWxsLzsKKworCSRpbl9wc3FsID0gIlxc cVxuIjsKKwlwcmludCAiIyBSdW5uaW5nIGluIHBzcWw6ICIgLiBqb2luKCIgIiwgJGluX3BzcWwp OworCSRoX3BzcWwtPnB1bXAoKSB3aGlsZSBsZW5ndGggJGluX3BzcWw7CisKKwkkaF9wc3FsLT5m aW5pc2goKTsKKworCSMgR2V0IHJlc3VsdHMgZnJvbSBhbGwgcGdiZW5jaGVzOgorCSRoMS0+cHVt cCgpIHVudGlsIGxlbmd0aCAkb3V0MTsKKwkkaDEtPmZpbmlzaCgpOworCisJJGgyLT5wdW1wKCkg dW50aWwgbGVuZ3RoICRvdXQyOworCSRoMi0+ZmluaXNoKCk7CisKKwkjIE9uIFdpbmRvd3MsIHRo ZSBleGl0IHN0YXR1cyBvZiB0aGUgcHJvY2VzcyBpcyByZXR1cm5lZCBkaXJlY3RseSBhcyB0aGUK KwkjIHByb2Nlc3MncyBleGl0IGNvZGUsIHdoaWxlIG9uIFVuaXgsIGl0J3MgcmV0dXJuZWQgaW4g dGhlIGhpZ2ggYml0cworCSMgb2YgdGhlIGV4aXQgY29kZSAoc2VlIFdFWElUU1RBVFVTIG1hY3Jv IGluIHRoZSBzdGFuZGFyZCA8c3lzL3dhaXQuaD4KKwkjIGhlYWRlciBmaWxlKS4gSVBDOjpSdW4n cyByZXN1bHQgZnVuY3Rpb24gYWx3YXlzIHJldHVybnMgZXhpdCBjb2RlID4+IDgsCisJIyBhc3N1 bWluZyB0aGUgVW5peCBjb252ZW50aW9uLCB3aGljaCB3aWxsIGFsd2F5cyByZXR1cm4gMCBvbiBX aW5kb3dzIGFzCisJIyBsb25nIGFzIHRoZSBwcm9jZXNzIHdhcyBub3QgdGVybWluYXRlZCBieSBh biBleGNlcHRpb24uIFRvIHdvcmsgYXJvdW5kCisJIyB0aGF0LCB1c2UgJGgtPmZ1bGxfcmVzdWx0 IG9uIFdpbmRvd3MgaW5zdGVhZC4KKwlteSAkcmVzdWx0MSA9CisJICAgICgkQ29uZmlne29zbmFt ZX0gZXEgIk1TV2luMzIiKQorCSAgPyAoJGgxLT5mdWxsX3Jlc3VsdHMpWzBdCisJICA6ICRoMS0+ cmVzdWx0KDApOworCisJbXkgJHJlc3VsdDIgPQorCSAgICAoJENvbmZpZ3tvc25hbWV9IGVxICJN U1dpbjMyIikKKwkgID8gKCRoMi0+ZnVsbF9yZXN1bHRzKVswXQorCSAgOiAkaDItPnJlc3VsdCgw KTsKKworCSMgQ2hlY2sgYWxsIHBnYmVuY2ggcmVzdWx0cworCW9rKCEkcmVzdWx0MSwgIkBjb21t YW5kMSBleGl0IGNvZGUgMCIpOworCW9rKCEkcmVzdWx0MiwgIkBjb21tYW5kMiBleGl0IGNvZGUg MCIpOworCisJbGlrZSgkb3V0MSwKKwkJcXJ7cHJvY2Vzc2VkOiAxLzF9LAorCQkiY29uY3VycmVu dCBkZWFkbG9jayB1cGRhdGUgd2l0aCByZXRyeWluZzogcGdiZW5jaCAxOiAiCisJICAuICJjaGVj ayBwcm9jZXNzZWQgdHJhbnNhY3Rpb25zIik7CisJbGlrZSgkb3V0MiwKKwkJcXJ7cHJvY2Vzc2Vk OiAxLzF9LAorCQkiY29uY3VycmVudCBkZWFkbG9jayB1cGRhdGUgd2l0aCByZXRyeWluZzogcGdi ZW5jaCAyOiAiCisJICAuICJjaGVjayBwcm9jZXNzZWQgdHJhbnNhY3Rpb25zIik7CisKKwkjIFRo ZSBmaXJzdCBvciBzZWNvbmQgcGdiZW5jaCBzaG91bGQgZ2V0IGEgZGVhZGxvY2sgZXJyb3Igd2hp Y2ggd2FzIHJldHJpZWQ6CisJbGlrZSgkb3V0MSAuICRvdXQyLAorCQlxcnteKCg/IW51bWJlciBv ZiBlcnJvcnMpKC58XG4pKSokfSwKKwkJImNvbmN1cnJlbnQgZGVhZGxvY2sgdXBkYXRlIHdpdGgg cmV0cnlpbmc6IGNoZWNrIGVycm9ycyIpOworCisJbXkgJHBhdHRlcm4xID0KKwkJImNsaWVudCAw IHNlbmRpbmcgU0VMRUNUIHBnX2Fkdmlzb3J5X2xvY2tcXCgoXFxkKVxcKTtcbiIKKwkgIC4gIihj bGllbnQgMCByZWNlaXZpbmdcbikrIgorCSAgLiAiY2xpZW50IDAgc2VuZGluZyBTRUxFQ1QgcGdf YWR2aXNvcnlfbG9ja1xcKCIgLiBXQUlUX1BHQkVOQ0hfMiAuICJcXCk7XG4iCisJICAuICJcXGcy KyIKKwkgIC4gImNsaWVudCAwIHNlbmRpbmcgU0VMRUNUIHBnX2Fkdmlzb3J5X2xvY2tcXCgoXFxk KVxcKTtcbiIKKwkgIC4gIlxcZzIrIgorCSAgLiAiY2xpZW50IDAgZ290IGEgZGVhZGxvY2sgZmFp bHVyZSBcXCh0cnkgMS8yXFwpIGluIGNvbW1hbmQgNiBvZiBzY3JpcHQgMDpcbiIKKwkgIC4gIkVS Uk9SOiAgZGVhZGxvY2sgZGV0ZWN0ZWRcbiIKKwkgIC4gIigoPyFjbGllbnQgMCkoLnxcbikpKiIK KwkgIC4gImNsaWVudCAwIHNlbmRpbmcgRU5EO1xuIgorCSAgLiAiXFxnMisiCisJICAuICJjbGll bnQgMCByZXBlYXRzIHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24gXFwodHJ5IDIvMlxcKVxuIgorCSAg LiAiY2xpZW50IDAgc2VuZGluZyBCRUdJTjtcbiIKKwkgIC4gIlxcZzIrIgorCSAgLiAiY2xpZW50 IDAgc2VuZGluZyBTRUxFQ1QgcGdfYWR2aXNvcnlfdW5sb2NrX2FsbFxcKFxcKTtcbiIKKwkgIC4g IlxcZzIrIgorCSAgLiAiY2xpZW50IDAgc2VuZGluZyBTRUxFQ1QgcGdfYWR2aXNvcnlfbG9ja1xc KCIgLiBUUkFOU0FDVElPTl9CRUdJTlMgLiAiXFwpO1xuIgorCSAgLiAiXFxnMisiCisJICAuICJj bGllbnQgMCBzZW5kaW5nIFNFTEVDVCBwZ19hZHZpc29yeV91bmxvY2tcXCgiIC4gVFJBTlNBQ1RJ T05fQkVHSU5TIC4gIlxcKTtcbiIKKwkgIC4gIlxcZzIrIgorCSAgLiAiY2xpZW50IDAgc2VuZGlu ZyBTRUxFQ1QgcGdfYWR2aXNvcnlfbG9ja1xcKFxcZzFcXCk7XG4iCisJICAuICJcXGcyKyIKKwkg IC4gImNsaWVudCAwIHNlbmRpbmcgU0VMRUNUIHBnX2Fkdmlzb3J5X2xvY2tcXCgiIC4gV0FJVF9Q R0JFTkNIXzIgLiAiXFwpO1xuIgorCSAgLiAiXFxnMisiCisJICAuICJjbGllbnQgMCBzZW5kaW5n IFNFTEVDVCBwZ19hZHZpc29yeV9sb2NrXFwoXFxnM1xcKTtcbiI7CisKKwlteSAkcGF0dGVybjIg PQorCQkiY2xpZW50IDAgc2VuZGluZyBTRUxFQ1QgcGdfYWR2aXNvcnlfbG9ja1xcKChcXGQpXFwp O1xuIgorCSAgLiAiKGNsaWVudCAwIHJlY2VpdmluZ1xuKSsiCisJICAuICJjbGllbnQgMCBzZW5k aW5nIFNFTEVDVCBwZ19hZHZpc29yeV9sb2NrXFwoKFxcZClcXCk7XG4iCisJICAuICJcXGcyKyIK KwkgIC4gImNsaWVudCAwIGdvdCBhIGRlYWRsb2NrIGZhaWx1cmUgXFwodHJ5IDEvMlxcKSBpbiBj b21tYW5kIDUgb2Ygc2NyaXB0IDA6XG4iCisJICAuICJFUlJPUjogIGRlYWRsb2NrIGRldGVjdGVk XG4iCisJICAuICIoKD8hY2xpZW50IDApKC58XG4pKSoiCisJICAuICJjbGllbnQgMCBzZW5kaW5n IEVORDtcbiIKKwkgIC4gIlxcZzIrIgorCSAgLiAiY2xpZW50IDAgcmVwZWF0cyB0aGUgZmFpbGVk IHRyYW5zYWN0aW9uIFxcKHRyeSAyLzJcXClcbiIKKwkgIC4gImNsaWVudCAwIHNlbmRpbmcgQkVH SU47XG4iCisJICAuICJcXGcyKyIKKwkgIC4gImNsaWVudCAwIHNlbmRpbmcgU0VMRUNUIHBnX2Fk dmlzb3J5X3VubG9ja19hbGxcXChcXCk7XG4iCisJICAuICJcXGcyKyIKKwkgIC4gImNsaWVudCAw IHNlbmRpbmcgU0VMRUNUIHBnX2Fkdmlzb3J5X2xvY2tcXCgiIC4gVFJBTlNBQ1RJT05fQkVHSU5T IC4gIlxcKTtcbiIKKwkgIC4gIlxcZzIrIgorCSAgLiAiY2xpZW50IDAgc2VuZGluZyBTRUxFQ1Qg cGdfYWR2aXNvcnlfdW5sb2NrXFwoIiAuIFRSQU5TQUNUSU9OX0JFR0lOUyAuICJcXCk7XG4iCisJ ICAuICJcXGcyKyIKKwkgIC4gImNsaWVudCAwIHNlbmRpbmcgU0VMRUNUIHBnX2Fkdmlzb3J5X2xv Y2tcXChcXGcxXFwpO1xuIgorCSAgLiAiXFxnMisiCisJICAuICJjbGllbnQgMCBzZW5kaW5nIFNF TEVDVCBwZ19hZHZpc29yeV9sb2NrXFwoXFxnM1xcKTtcbiI7CisKKwlvaygoJGVycjEgPX4gLyRw YXR0ZXJuMS8gb3IgJGVycjIgPX4gLyRwYXR0ZXJuMi8pLAorCQkiY29uY3VycmVudCBkZWFkbG9j ayB1cGRhdGUgd2l0aCByZXRyeWluZzogIgorCSAgLiAiY2hlY2sgdGhlIHJldHJpZWQgdHJhbnNh Y3Rpb24iKTsKK30KKworc3ViIHRlc3RfcGdiZW5jaF9jb21taXRfZmFpbHVyZQoreworCW15ICRp c29sYXRpb25fbGV2ZWwgPSBTRVJJQUxJWkFCTEU7CisJbXkgJGlzb2xhdGlvbl9sZXZlbF9zaGVs bCA9ICRpc29sYXRpb25fbGV2ZWxfc2hlbGxbJGlzb2xhdGlvbl9sZXZlbF07CisKKwlsb2NhbCAk RU5We1BHUE9SVH0gPSAkbm9kZS0+cG9ydDsKKwlsb2NhbCAkRU5We1BHT1BUSU9OU30gPQorCQki LWMgZGVmYXVsdF90cmFuc2FjdGlvbl9pc29sYXRpb249IiAuICRpc29sYXRpb25fbGV2ZWxfc2hl bGw7CisJcHJpbnQgIiMgUEdPUFRJT05TOiAiIC4gJEVOVntQR09QVElPTlN9IC4gIlxuIjsKKwor CW15ICgkaF9wc3FsLCAkaW5fcHNxbCwgJG91dF9wc3FsKTsKKwlteSAoJGhfcGdiZW5jaCwgJGlu X3BnYmVuY2gsICRvdXRfcGdiZW5jaCwgJGVycl9wZ2JlbmNoKTsKKworCSMgT3BlbiBhIHBzcWwg c2Vzc2lvbiBhbmQgYXF1aXJlIGFuIGFkdmlzb3J5IGxvY2s6CisJcHJpbnQgIiMgU3RhcnRpbmcg cHNxbFxuIjsKKwkkaF9wc3FsID0gSVBDOjpSdW46OnN0YXJ0IFsgJ3BzcWwnIF0sIFwkaW5fcHNx bCwgXCRvdXRfcHNxbDsKKworCSRpbl9wc3FsID0gInNlbGVjdCBwZ19hZHZpc29yeV9sb2NrKDAp O1xuIjsKKwlwcmludCAiIyBSdW5uaW5nIGluIHBzcWw6ICIgLiBqb2luKCIgIiwgJGluX3BzcWwp OworCSRoX3BzcWwtPnB1bXAoKSB1bnRpbCAkb3V0X3BzcWwgPX4gL3BnX2Fkdmlzb3J5X2xvY2sv OworCisJIyBTdGFydCBwZ2JlbmNoOgorCW15IEBjb21tYW5kID0gKAorCQlxdyhwZ2JlbmNoIC0t bm8tdmFjdXVtIC0tdHJhbnNhY3Rpb25zIDEgLS1kZWJ1ZyAtLW1heC10cmllcyAyIC0tZmlsZSks CisJCSRzY3JpcHRfY29tbWl0X2ZhaWx1cmUpOworCXByaW50ICIjIFJ1bm5pbmc6ICIgLiBqb2lu KCIgIiwgQGNvbW1hbmQpIC4gIlxuIjsKKwkkaF9wZ2JlbmNoID0gSVBDOjpSdW46OnN0YXJ0IFxA Y29tbWFuZCwgXCRpbl9wZ2JlbmNoLCBcJG91dF9wZ2JlbmNoLAorCSAgXCRlcnJfcGdiZW5jaDsK KworCSMgV2FpdCB1bnRpbCBwZ2JlbmNoIGFsc28gdHJpZXMgdG8gYWNxdWlyZSB0aGUgc2FtZSBh ZHZpc29yeSBsb2NrOgorCWRvCisJeworCQkkaW5fcHNxbCA9CisJCQkic2VsZWN0IGNhc2UgY291 bnQoKikgd2hlbiAwIHRoZW4gJ3plcm8nIGVsc2UgJ25vdF96ZXJvJyBlbmQgIgorCQkgIC4gImZy b20gcGdfbG9ja3Mgd2hlcmUgIgorCQkgIC4gImxvY2t0eXBlID0gJ2Fkdmlzb3J5JyBhbmQgIgor CQkgIC4gIm9ianN1YmlkID0gMSBhbmQgIgorCQkgIC4gIigoY2xhc3NpZDo6YmlnaW50IDw8IDMy KSB8IG9iamlkOjpiaWdpbnQgPSAwOjpiaWdpbnQpIGFuZCAiCisJCSAgLiAibm90IGdyYW50ZWQ7 XG4iOworCQlwcmludCAiIyBSdW5uaW5nIGluIHBzcWw6ICIgLiBqb2luKCIgIiwgJGluX3BzcWwp OworCQkkaF9wc3FsLT5wdW1wKCkgd2hpbGUgbGVuZ3RoICRpbl9wc3FsOworCX0gd2hpbGUgKCRv dXRfcHNxbCAhfiAvbm90X3plcm8vKTsKKworCSMgSW4gcHNxbCwgcnVuIGEgcGFyYWxsZWwgdHJh bnNhY3Rpb24sIHJlbGVhc2UgYWR2aXNvcnkgbG9ja3MgYW5kIGVuZCB0aGUKKwkjIHNlc3Npb246 CisKKwkkaW5fcHNxbCA9ICJiZWdpblw7dXBkYXRlIHh5IHNldCB5ID0geSArIDEgd2hlcmUgeCA9 IDJcO2VuZDtcbiI7CisJcHJpbnQgIiMgUnVubmluZyBpbiBwc3FsOiAiIC4gam9pbigiICIsICRp bl9wc3FsKTsKKwkkaF9wc3FsLT5wdW1wKCkgdW50aWwgJG91dF9wc3FsID1+IC9DT01NSVQvOwor CisJJGluX3BzcWwgPSAic2VsZWN0IHBnX2Fkdmlzb3J5X3VubG9ja19hbGwoKTtcbiI7CisJcHJp bnQgIiMgUnVubmluZyBpbiBwc3FsOiAiIC4gam9pbigiICIsICRpbl9wc3FsKTsKKwkkaF9wc3Fs LT5wdW1wKCkgdW50aWwgJG91dF9wc3FsID1+IC9wZ19hZHZpc29yeV91bmxvY2tfYWxsLzsKKwor CSRpbl9wc3FsID0gIlxccVxuIjsKKwlwcmludCAiIyBSdW5uaW5nIGluIHBzcWw6ICIgLiBqb2lu KCIgIiwgJGluX3BzcWwpOworCSRoX3BzcWwtPnB1bXAoKSB3aGlsZSBsZW5ndGggJGluX3BzcWw7 CisKKwkkaF9wc3FsLT5maW5pc2goKTsKKworCSMgR2V0IHBnYmVuY2ggcmVzdWx0cworCSRoX3Bn YmVuY2gtPnB1bXAoKSB1bnRpbCBsZW5ndGggJG91dF9wZ2JlbmNoOworCSRoX3BnYmVuY2gtPmZp bmlzaCgpOworCisJIyBPbiBXaW5kb3dzLCB0aGUgZXhpdCBzdGF0dXMgb2YgdGhlIHByb2Nlc3Mg aXMgcmV0dXJuZWQgZGlyZWN0bHkgYXMgdGhlCisJIyBwcm9jZXNzJ3MgZXhpdCBjb2RlLCB3aGls ZSBvbiBVbml4LCBpdCdzIHJldHVybmVkIGluIHRoZSBoaWdoIGJpdHMKKwkjIG9mIHRoZSBleGl0 IGNvZGUgKHNlZSBXRVhJVFNUQVRVUyBtYWNybyBpbiB0aGUgc3RhbmRhcmQgPHN5cy93YWl0Lmg+ CisJIyBoZWFkZXIgZmlsZSkuIElQQzo6UnVuJ3MgcmVzdWx0IGZ1bmN0aW9uIGFsd2F5cyByZXR1 cm5zIGV4aXQgY29kZSA+PiA4LAorCSMgYXNzdW1pbmcgdGhlIFVuaXggY29udmVudGlvbiwgd2hp Y2ggd2lsbCBhbHdheXMgcmV0dXJuIDAgb24gV2luZG93cyBhcworCSMgbG9uZyBhcyB0aGUgcHJv Y2VzcyB3YXMgbm90IHRlcm1pbmF0ZWQgYnkgYW4gZXhjZXB0aW9uLiBUbyB3b3JrIGFyb3VuZAor CSMgdGhhdCwgdXNlICRoLT5mdWxsX3Jlc3VsdCBvbiBXaW5kb3dzIGluc3RlYWQuCisJbXkgJHJl c3VsdCA9CisJICAgICgkQ29uZmlne29zbmFtZX0gZXEgIk1TV2luMzIiKQorCSAgPyAoJGhfcGdi ZW5jaC0+ZnVsbF9yZXN1bHRzKVswXQorCSAgOiAkaF9wZ2JlbmNoLT5yZXN1bHQoMCk7CisKKwkj IENoZWNrIHBnYmVuY2ggcmVzdWx0cworCW9rKCEkcmVzdWx0LCAiQGNvbW1hbmQgZXhpdCBjb2Rl IDAiKTsKKworCWxpa2UoJG91dF9wZ2JlbmNoLAorCQlxcntwcm9jZXNzZWQ6IDEvMX0sCisJCSJj b21taXQgZmFpbHVyZTogY2hlY2sgcHJvY2Vzc2VkIHRyYW5zYWN0aW9ucyIpOworCisJbGlrZSgk b3V0X3BnYmVuY2gsCisJCXFye14oKD8hbnVtYmVyIG9mIGVycm9ycykoLnxcbikpKiR9LAorCQki Y29tbWl0IGZhaWx1cmU6IGNoZWNrIGVycm9ycyIpOworCisJbXkgJHBhdHRlcm4gPQorCQkiY2xp ZW50IDAgc2VuZGluZyBCRUdJTjsiCisJICAuICJVUERBVEUgeHkgU0VUIHkgPSB5IFxcKyAoLT9c XGQrKSBXSEVSRSB4ID0gMTsiCisJICAuICJTRUxFQ1QgcGdfYWR2aXNvcnlfbG9ja1xcKDBcXCk7 IgorCSAgLiAiRU5EO1xuIgorCSAgLiAiKGNsaWVudCAwIHJlY2VpdmluZ1xuKSsiCisJICAuICJj bGllbnQgMCBnb3QgYSBzZXJpYWxpemF0aW9uIGZhaWx1cmUgXFwodHJ5IDEvMlxcKSBpbiBjb21t YW5kIDEgXFwoc3ViY29tbWFuZCAzXFwpIG9mIHNjcmlwdCAwOlxuIgorCSAgLiAiRVJST1I6ICBj b3VsZCBub3Qgc2VyaWFsaXplIGFjY2VzcyBkdWUgdG8gcmVhZC93cml0ZSBkZXBlbmRlbmNpZXMg YW1vbmcgdHJhbnNhY3Rpb25zXG4iCisJICAuICJERVRBSUw6ICBSZWFzb24gY29kZTogQ2FuY2Vs ZWQgb24gaWRlbnRpZmljYXRpb24gYXMgYSBwaXZvdCwgZHVyaW5nIGNvbW1pdCBhdHRlbXB0Llxu IgorCSAgLiAiKCg/IWNsaWVudCAwKSgufFxuKSkqIgorCSAgLiAiY2xpZW50IDAgcmVwZWF0cyB0 aGUgZmFpbGVkIHRyYW5zYWN0aW9uIFxcKHRyeSAyLzJcXClcbiIKKwkgIC4gImNsaWVudCAwIHNl bmRpbmcgQkVHSU47IgorCSAgLiAiVVBEQVRFIHh5IFNFVCB5ID0geSBcXCsgXFxnMSBXSEVSRSB4 ID0gMTsiCisJICAuICJTRUxFQ1QgcGdfYWR2aXNvcnlfbG9ja1xcKDBcXCk7IgorCSAgLiAiRU5E O1xuIjsKKworCWxpa2UoJGVycl9wZ2JlbmNoLAorCQlxcnskcGF0dGVybn0sCisJCSJjb21taXQg ZmFpbHVyZTogIgorCSAgLiAiY2hlY2sgdGhlIGNvbXBsZXRpb24gb2YgdGhlIGZhaWxlZCB0cmFu c2FjdGlvbiBibG9jayIpOworfQorCit0ZXN0X3BnYmVuY2hfc2VyaWFsaXphdGlvbl9lcnJvcnMo KTsKKwordGVzdF9wZ2JlbmNoX3NlcmlhbGl6YXRpb25fZXJyb3JzX2FuZF9mYWlsdXJlcygKKwkk c2NyaXB0X3NlcmlhbGl6YXRpb24sCisJImNvbmN1cnJlbnQgdXBkYXRlIHdpdGggcmV0cnlpbmci LAorCTApOworIyBub3QgYWxsIGNvbXBvdW5kIGNvbW1hbmRzIGNhbiBiZSByZXRyaWVkCit0ZXN0 X3BnYmVuY2hfc2VyaWFsaXphdGlvbl9lcnJvcnNfYW5kX2ZhaWx1cmVzKAorCSRzY3JpcHRfc2Vy aWFsaXphdGlvbl9jb21wb3VuZCwKKwkiY29uY3VycmVudCB1cGRhdGUgd2l0aCBhIHRyYW5zYWN0 aW9uIGJsb2NrIGluIGEgY29tcG91bmQgY29tbWFuZCIsCisJMSk7CisKK3Rlc3RfcGdiZW5jaF9k ZWFkbG9ja19lcnJvcnMoKTsKK3Rlc3RfcGdiZW5jaF9kZWFkbG9ja19mYWlsdXJlcygpOworCit0 ZXN0X3BnYmVuY2hfY29tbWl0X2ZhaWx1cmUoKTsKLS0gCjIuNy40Cgo= --=_52d4cf206ffba79b342af4da983b23cb--