Received: from malur.postgresql.org ([2a02:16a8:dc51::56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1faIVI-0002uV-BU for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Jul 2018 10:25:49 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1faIVG-0000tC-V2 for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Jul 2018 10:25:46 +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.89) (envelope-from ) id 1faIVG-0000t4-8J for pgsql-hackers@lists.postgresql.org; Tue, 03 Jul 2018 10:25:46 +0000 Received: from mail.postgrespro.ru ([93.174.131.138]) by makus.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1faIVB-0005IN-KG for pgsql-hackers@postgresql.org; Tue, 03 Jul 2018 10:25:45 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id D802C23B600A; Tue, 3 Jul 2018 13:25:38 +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 9C5CB21C23A3; Tue, 3 Jul 2018 13:25:38 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1530613538; bh=ArsbcfZVgp6jKHhVhIDir2tQgCnYPH0BYzoa5cMimig=; h=Date:From:To:Subject:In-Reply-To:References; b=EWBmANzpaN4YqVrhkGNkoyqYcQeul0Mvwxc0oeT7FCcuWtdMms+3W64Z0UJMDuIAC tn3OSma+lDRT4lsQRFi7ytDNIdxGsvBcAWPtX69M+l30bh1sx9/4msmy6hMe5Jm1Y7 OMiihu+FzfirogjU622QyK5wC4sFlgDegN/cKYmU= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_2ffe4df0fddcffddad3fe115d98e692e" Date: Tue, 03 Jul 2018 13:25:37 +0300 From: s.cherkashin@postgrespro.ru To: Nikita Glukhov , pgsql-hackers@postgresql.org Subject: Re: Psql patch to show access methods info In-Reply-To: <854decee-0244-c69d-2287-74ae260a574d@postgrespro.ru> References: <1529675324.14193.5.camel@postgrespro.ru> <854decee-0244-c69d-2287-74ae260a574d@postgrespro.ru> Message-ID: <1e7dee71706c55edbdbac795cd5109d1@postgrespro.ru> X-Sender: s.cherkashin@postgrespro.ru User-Agent: Roundcube Webmail/1.2.4 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=_2ffe4df0fddcffddad3fe115d98e692e Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed Following issues are solved: >> \dAf[+]  [AMPTRN [OPFPTRN]]  list operator families of access method. >> + >> prints owner of operator family. (Table pg_opfamily) > >> \dAfp    [AMPTRN [OPFPTRN]]  list procedures of operator family >> related >> to access method (Table pg_amproc) > > * Reorder "Left"/"Right" and "Strategy"/"Proc name" columns. > * Include "Left"/"Right" columns into ORDER BY clause. > * Show procedure's argument types, because procedure's name does not > completely > identify procedure (for example, in_range() is used in several > opclasses with > different signatures). Or maybe show arguments only if procedure > name is not > unique? > >> \dAfo    [AMPTRN [OPFPTRN]]  list operators of family related to >> access >> method (Table pg_amop) > > * Reorder "Left"/"Right" and "Strategy"/"Operator" columns. > * Include "Left"/"Right" columns into ORDER BY clause. >> \dAoc[+] [AMPTRN [OPCPTRN]]  list operator classes of index access >> methods. + prints owner of operator class. (Table pg_opclass) > > * Maybe it would be better to show stored type only if it differs from > the > indexed type? > >> \dip[S]  [PATTERN]           list indexes with properties (Table >> pg_class) > >> \dicp[S] [IDXNAME [COLNAME]] show index column properties (Table >> pg_class) > > * Fix duplicate rows that appear in the table for composite indices. > * Include "Column #" into ORDER BY clause. > * Rename column "Null first" to "Nulls First" or "NULLS LAST". > * Maybe it is not necessary to show "Access method" column here? > * I think we should show column's properties in the separate table for > each > index, because it is not so easy to understand the combined table. Following issues require discussion: >> \dAp   > * Should we rename it to \dAip and include "index" word into the table > header? > As you know, we are going to support table AMs in the future. >> \dAfo > * Operator's schema is shown only if operator is invisible for the > current > user -- I'm not sure if this is correct. \dAfo and \dAfp * Should we put info in separate table for each Operator family? >> \dicp > * ASC, NULLS are shown as TRUE/FALSE only if the index is orderable, > and as > NULL if unorderable -- I'm not sure if this is correct. Maybe we > should > simply show these properties in the literal form, not as booleans > (as strings 'ASC'/'DESC', 'NULLS FIRST'/'NULLS LAST')? > >> I also have a question about testing commands \dAf+ and \dAoc+: is it >> good idea to test them by changing an owner of one operator family or >> class to created new one, checking the output, and restoring the owner >> back? Or we should create a new opclass or opfamily with proper owner. >> Or maybe it is not necesary to test these commands? --=_2ffe4df0fddcffddad3fe115d98e692e Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=psql_add_am_info_v2.patch Content-Disposition: attachment; filename=psql_add_am_info_v2.patch; size=44005 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sIGIvZG9jL3NyYy9zZ21sL2Nh dGFsb2dzLnNnbWwKaW5kZXggM2VkOTAyMS4uYjY5OTU0OCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9z Z21sL2NhdGFsb2dzLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwKQEAgLTY3 NSw3ICs2NzUsNyBAQAogICAgc2VhcmNoIGFuZCBvcmRlcmluZyBwdXJwb3Nlcy4pCiAgIDwvcGFy YT4KIAotICA8dGFibGU+CisgIDx0YWJsZSBpZD0iY2F0YWxvZy1wZy1hbW9wLXRhYmxlIj4KICAg IDx0aXRsZT48c3RydWN0bmFtZT5wZ19hbW9wPC9zdHJ1Y3RuYW1lPiBDb2x1bW5zPC90aXRsZT4K IAogICAgPHRncm91cCBjb2xzPSI0Ij4KQEAgLTgxOCw3ICs4MTgsNyBAQAogICAgaXMgb25lIHJv dyBmb3IgZWFjaCBzdXBwb3J0IHByb2NlZHVyZSBiZWxvbmdpbmcgdG8gYW4gb3BlcmF0b3IgZmFt aWx5LgogICA8L3BhcmE+CiAKLSAgPHRhYmxlPgorICA8dGFibGUgaWQ9ImNhdGFsb2ctcGctYW1w cm9jLXRhYmxlIj4KICAgIDx0aXRsZT48c3RydWN0bmFtZT5wZ19hbXByb2M8L3N0cnVjdG5hbWU+ IENvbHVtbnM8L3RpdGxlPgogCiAgICA8dGdyb3VwIGNvbHM9IjQiPgpAQCAtNDQ1OCw3ICs0NDU4 LDcgQEAgU0NSQU0tU0hBLTI1NiQ8cmVwbGFjZWFibGU+Jmx0O2l0ZXJhdGlvbiBjb3VudCZndDs8 L3JlcGxhY2VhYmxlPjo8cmVwbGFjZWFibGU+JmwKICAgIE9wZXJhdG9yIGNsYXNzZXMgYXJlIGRl c2NyaWJlZCBhdCBsZW5ndGggaW4gPHhyZWYgbGlua2VuZD0ieGluZGV4Ii8+LgogICA8L3BhcmE+ CiAKLSAgPHRhYmxlPgorICA8dGFibGUgaWQ9ImNhdGFsb2ctcGctb3BjbGFzcy10YWJsZSI+CiAg ICA8dGl0bGU+PHN0cnVjdG5hbWU+cGdfb3BjbGFzczwvc3RydWN0bmFtZT4gQ29sdW1uczwvdGl0 bGU+CiAKICAgIDx0Z3JvdXAgY29scz0iNCI+CkBAIC00NzIwLDcgKzQ3MjAsNyBAQCBTQ1JBTS1T SEEtMjU2JDxyZXBsYWNlYWJsZT4mbHQ7aXRlcmF0aW9uIGNvdW50Jmd0OzwvcmVwbGFjZWFibGU+ OjxyZXBsYWNlYWJsZT4mbAogICAgT3BlcmF0b3IgZmFtaWxpZXMgYXJlIGRlc2NyaWJlZCBhdCBs ZW5ndGggaW4gPHhyZWYgbGlua2VuZD0ieGluZGV4Ii8+LgogICA8L3BhcmE+CiAKLSAgPHRhYmxl PgorICA8dGFibGUgaWQ9ImNhdGFsb2ctcGctb3BmYW1pbHktdGFibGUiPgogICAgPHRpdGxlPjxz dHJ1Y3RuYW1lPnBnX29wZmFtaWx5PC9zdHJ1Y3RuYW1lPiBDb2x1bW5zPC90aXRsZT4KIAogICAg PHRncm91cCBjb2xzPSI0Ij4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcHNxbC1yZWYu c2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcHNxbC1yZWYuc2dtbAppbmRleCBiMTcwMzlkLi4yNzNj M2Y3IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BzcWwtcmVmLnNnbWwKKysrIGIvZG9j L3NyYy9zZ21sL3JlZi9wc3FsLXJlZi5zZ21sCkBAIC0xMjAzLDYgKzEyMDMsOTUgQEAgdGVzdGRi PSZndDsKICAgICAgICAgPC9wYXJhPgogICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgPC92YXJs aXN0ZW50cnk+CisgICAgICAKKyAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgIDx0ZXJtPgor ICAgICAgICAgIDxsaXRlcmFsPlxkQWYKKyAgICAgICAgICBbIDxsaW5rIGxpbmtlbmQ9ImFwcC1w c3FsLXBhdHRlcm5zIj48cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+YWNjZXNzLW1ldGhv ZC1wYXR0ZXJuPC9yZXBsYWNlYWJsZT48L2xpbms+IAorICAgICAgICAgICAgWzxsaW5rIGxpbmtl bmQ9ImFwcC1wc3FsLXBhdHRlcm5zIj48cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+b3Bl cmF0b3ItZmFtaWx5LXBhdHRlcm48L3JlcGxhY2VhYmxlPjwvbGluaz5dXQorICAgICAgICAgIDwv bGl0ZXJhbD4KKyAgICAgICAgPC90ZXJtPgorCisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAg PHBhcmE+CisgICAgICAgIExpc3RzIG9wZXJhdG9yIGZhbWlsaWVzICg8eHJlZiBsaW5rZW5kPSJj YXRhbG9nLXBnLW9wZmFtaWx5LXRhYmxlIi8+KS4gSWYgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPmFjY2Vzcy1tZXRob2QtcGF0dGVybjwvcmVwbGFjZWFibGU+IGlzIHNwZWNpZmllZCwg b25seQorICAgICAgICBmYW1pbGllcyB3aG9zZSBhY2Nlc3MgbWV0aG9kIG5hbWUgbWF0Y2hlcyB0 aGUgcGF0dGVybiBhcmUgc2hvd24uCisgICAgICAgIElmIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj5vcGVyYXRvci1mYW1pbHktcGF0dGVybjwvcmVwbGFjZWFibGU+IGlzIHNwZWNpZmll ZCwgb25seQorICAgICAgICBvcGVyZWF0b3IgZmFtaWxpZXMgYXNzb2NpYXRlZCB3aXRoIHdob3Nl IG5hbWUgbWF0Y2hlcyB0aGUgcGF0dGVybiBhcmUgc2hvd24uCisgICAgICAgIElmIDxsaXRlcmFs Pis8L2xpdGVyYWw+IGlzIGFwcGVuZGVkIHRvIHRoZSBjb21tYW5kIG5hbWUsIGVhY2ggb3BlcmF0 b3IKKyAgICAgICAgZmFtaWx5IGlzIGxpc3RlZCB3aXRoIGl0J3Mgb3duZXIuCisgICAgICAgIDwv cGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAg ICA8dmFybGlzdGVudHJ5PgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bGl0ZXJhbD5cZEFm bworICAgICAgICAgICAgWzxsaW5rIGxpbmtlbmQ9ImFwcC1wc3FsLXBhdHRlcm5zIj48cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+YWNjZXNzLW1ldGhvZC1wYXR0ZXJuPC9yZXBsYWNlYWJs ZT48L2xpbms+CisgICAgICAgICAgICAgIFs8bGluayBsaW5rZW5kPSJhcHAtcHNxbC1wYXR0ZXJu cyI+PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm9wZXJhdG9yLWZhbWlseS1wYXR0ZXJu PC9yZXBsYWNlYWJsZT48L2xpbms+XV0KKyAgICAgICAgICA8L2xpdGVyYWw+CisgICAgICAgIDwv dGVybT4KKworICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICBMaXN0 cyBvcGVyYXRvcnMgKDx4cmVmIGxpbmtlbmQ9ImNhdGFsb2ctcGctYW1vcC10YWJsZSIvPikgYXNz b2NpYXRlZCB3aXRoIGFjY2VzcyBtZXRob2Qgb3BlcmF0b3IgZmFtaWxpZXMuCisgICAgICAgIElm IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5hY2Nlc3MtbWV0aG9kLXBhdHR0ZXJuPC9y ZXBsYWNlYWJsZT4gaXMgc3BlY2lmaWVkLAorICAgICAgICBvbmx5IG9wZXJhdG9ycyBhc3NvY2lh dGVkIHdpdGggYWNjZXNzIG1ldGhvZCB3aG9zZSBuYW1lIG1hdGNoZXMgcGF0dGVybiBhcmUgc2hv d24uCisgICAgICAgIElmIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vcGVyYXRvci1m YW1pbHktcGF0dGVybjwvcmVwbGFjZWFibGU+IGlzIHNwZWNpZmllZCwgb25seQorICAgICAgICBv cGVyZWF0b3JzIGFzc29jaWF0ZWQgd2l0aCBmYW1pbGllcyB3aG9zZSBuYW1lIG1hdGNoZXMgdGhl IHBhdHRlcm4gYXJlIHNob3duLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+ CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAg PHRlcm0+CisgICAgICAgICAgPGxpdGVyYWw+XGRBZnAKKyAgICAgICAgICAgIFs8bGluayBsaW5r ZW5kPSJhcHAtcHNxbC1wYXR0ZXJucyI+PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmFj Y2Vzcy1tZXRob2QtcGF0dGVybjwvcmVwbGFjZWFibGU+PC9saW5rPgorICAgICAgICAgICAgICBb PGxpbmsgbGlua2VuZD0iYXBwLXBzcWwtcGF0dGVybnMiPjxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj5vcGVyYXRvci1mYW1pbHktcGF0dGVybjwvcmVwbGFjZWFibGU+PC9saW5rPl1dCisg ICAgICAgICAgPC9saXRlcmFsPgorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT4K KyAgICAgICAgPHBhcmE+CisgICAgICAgIExpc3QgcHJvY2VkdXJlcyAoPHhyZWYgbGlua2VuZD0i Y2F0YWxvZy1wZy1hbXByb2MtdGFibGUiLz4pIGFjY29jaWF0ZWQgd2l0aCBhY2Nlc3MgbWV0aG9k IG9wZXJhdG9yIGZhbWlsaWVzLgorICAgICAgICBJZiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+YWNjZXNzLW1ldGhvZC1wYXR0dGVybjwvcmVwbGFjZWFibGU+IGlzIHNwZWNpZmllZCwK KyAgICAgICAgb25seSBwcm9jZWR1cmVzIGFzc29jaWF0ZWQgd2l0aCBhY2Nlc3MgbWV0aG9kIHdo b3NlIG5hbWUgbWF0Y2hlcyBwYXR0ZXJuIGFyZSBzaG93bi4KKyAgICAgICAgSWYgPHJlcGxhY2Vh YmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm9wZXJhdG9yLWZhbWlseS1wYXR0ZXJuPC9yZXBsYWNlYWJs ZT4gaXMgc3BlY2lmaWVkLCBvbmx5CisgICAgICAgIHByb2NlZHVyZXMgYXNzb2NpYXRlZCB3aXRo IGZhbWlsaWVzIHdob3NlIG5hbWUgbWF0Y2hlcyB0aGUgcGF0dGVybiBhcmUgc2hvd24uCisgICAg ICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5Pgor CisgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bGl0ZXJh bD5cZEFvcAorICAgICAgICAgICAgWzxsaW5rIGxpbmtlbmQ9ImFwcC1wc3FsLXBhdHRlcm5zIj48 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+YWNjZXNzLW1ldGhvZC1wYXR0ZXJuPC9yZXBs YWNlYWJsZT48L2xpbms+CisgICAgICAgICAgICAgIFs8bGluayBsaW5rZW5kPSJhcHAtcHNxbC1w YXR0ZXJucyI+PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm9wZXJhdG9yLWNsYXNzLXBh dHRlcm48L3JlcGxhY2VhYmxlPjwvbGluaz5dXQorICAgICAgICAgIDwvbGl0ZXJhbD4KKyAgICAg ICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICBT aG93cyBpbmRleCBhY2Nlc3MgbWV0aG9kIG9wZXJhdG9yIGNsYXNzZXMgbGlzdGVkIGluIDx4cmVm IGxpbmtlbmQ9ImNhdGFsb2ctcGctb3BjbGFzcy10YWJsZSIvPi4KKyAgICAgICAgSWYgPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmFjY2Vzcy1tZXRob2QtcGF0dHRlcm48L3JlcGxhY2Vh YmxlPiBpcyBzcGVjaWZpZWQsCisgICAgICAgIG9ubHkgb3BlcmF0b3IgY2xhc3NlcyBhc3NvY2lh dGVkIHdpdGggYWNjZXNzIG1ldGhvZCB3aG9zZSBuYW1lIG1hdGNoZXMgcGF0dGVybiBhcmUgc2hv d24uCisgICAgICAgIElmIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vcGVyYXRvci1j bGFzcy1wYXR0ZXJuPC9yZXBsYWNlYWJsZT4gaXMgc3BlY2lmaWVkLCBvbmx5CisgICAgICAgIHBy b2NlZHVyZXMgYXNzb2NpYXRlZCB3aXRoIGZhbWlsaWVzIHdob3NlIG5hbWUgbWF0Y2hlcyB0aGUg cGF0dGVybiBhcmUgc2hvd24uCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4K KyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisKKyAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAg IDx0ZXJtPjxsaXRlcmFsPlxkQXAgWyA8bGluayBsaW5rZW5kPSJhcHAtcHNxbC1wYXR0ZXJucyI+ PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPjwvbGlu az4gXTwvbGl0ZXJhbD48L3Rlcm0+CisKKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFy YT4KKyAgICAgICAgU2hvd3MgYWNjZXNzIG1ldGhvZCBwcm9wZXJ0aWVzIGxpc3RlZCBpbiA8eHJl ZgorICAgICAgICAgbGlua2VuZD0iZnVuY3Rpb25zLWluZm8taW5kZXhhbS1wcm9wcyIvPi4gSWYg PHJlcGxhY2VhYmxlCisgICAgICAgIGNsYXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2Vh YmxlPiBpcyBzcGVjaWZpZWQsIG9ubHkgYWNjZXNzCisgICAgICAgIG1ldGhvZHMgd2hvc2UgbmFt ZXMgbWF0Y2ggdGhlIHBhdHRlcm4gYXJlIHNob3duLgorICAgICAgICA8L3BhcmE+CisgICAgICAg IDwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAogICAgICAgPHZhcmxpc3RlbnRy eT4KICAgICAgICAgPHRlcm0+PGxpdGVyYWw+XGRiWytdIFsgPGxpbmsgbGlua2VuZD0iYXBwLXBz cWwtcGF0dGVybnMiPjxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBs YWNlYWJsZT48L2xpbms+IF08L2xpdGVyYWw+PC90ZXJtPgpAQCAtMTM1MSw2ICsxNDQwLDM1IEBA IHRlc3RkYj0mZ3Q7CiAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICA8L3Zhcmxpc3RlbnRyeT4K IAorICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgPHRlcm0+PGxpdGVyYWw+XGRpcCBbIDxs aW5rIGxpbmtlbmQ9ImFwcC1wc3FsLXBhdHRlcm5zIj48cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+cGF0dGVybjwvcmVwbGFjZWFibGU+PC9saW5rPiBdPC9saXRlcmFsPjwvdGVybT4KKwor ICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICBTaG93cyBpbmRleCBw cm9wZXJ0aWVzIGxpc3RlZCBpbiA8eHJlZgorICAgICAgICBsaW5rZW5kPSJmdW5jdGlvbnMtaW5m by1pbmRleC1wcm9wcyIvPi4gSWYgPHJlcGxhY2VhYmxlCisgICAgICAgIGNsYXNzPSJwYXJhbWV0 ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPiBpcyBzcGVjaWZpZWQsIG9ubHkgYWNjZXNzCisgICAg ICAgIG1ldGhvZHMgd2hvc2UgbmFtZXMgbWF0Y2ggdGhlIHBhdHRlcm4gYXJlIHNob3duLgorICAg ICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+ICAgICAgICAKKyAgICAgIDwvdmFybGlz dGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICA8dGVybT4KKyAgICAgICAg ICA8bGl0ZXJhbD5cZGljcCBbIDxsaW5rIGxpbmtlbmQ9ImFwcC1wc3FsLXBhdHRlcm5zIj48cmVw bGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+aW5kZXgtbmFtZS1wYXR0ZXJuPC9yZXBsYWNlYWJs ZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIDxsaW5rIGxpbmtlbmQ9 ImFwcC1wc3FsLXBhdHRlcm5zIj48cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Y29sdW1u LW5hbWUtcGF0dGVybjwvcmVwbGFjZWFibGU+PC9saW5rPiBdXQorICAgICAgICAgIDwvbGl0ZXJh bD4KKyAgICAgICAgPC90ZXJtPgorCisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+ CisgICAgICAgIFNob3dzIGluZGV4IGNvbHVtbiBwcm9wZXJ0aWVzIGxpc3RlZCBpbiA8eHJlZgor ICAgICAgICBsaW5rZW5kPSJmdW5jdGlvbnMtaW5mby1pbmRleC1jb2x1bW4tcHJvcHMiLz4uIElm IDxyZXBsYWNlYWJsZQorICAgICAgICBjbGFzcz0icGFyYW1ldGVyIj5jb2x1bW5fbmFtZTwvcmVw bGFjZWFibGU+IGlzIHNwZWNpZmllZCwgb25seSBjb2x1bW4KKyAgICAgICAgd2l0aCBzdWNoIG5h bWUgaXMgc2hvd24uCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAg IDwvdmFybGlzdGVudHJ5PgogCiAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICA8dGVybT48 bGl0ZXJhbD5cZGVzWytdIFsgPGxpbmsgbGlua2VuZD0iYXBwLXBzcWwtcGF0dGVybnMiPjxyZXBs YWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJsZT48L2xpbms+IF08 L2xpdGVyYWw+PC90ZXJtPgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL2NvbW1hbmQuYyBiL3Ny Yy9iaW4vcHNxbC9jb21tYW5kLmMKaW5kZXggNGM4NWY0My4uMmQyMTkxMSAxMDA2NDQKLS0tIGEv c3JjL2Jpbi9wc3FsL2NvbW1hbmQuYworKysgYi9zcmMvYmluL3BzcWwvY29tbWFuZC5jCkBAIC03 MjMsNyArNzIzLDIyIEBAIGV4ZWNfY29tbWFuZF9kKFBzcWxTY2FuU3RhdGUgc2Nhbl9zdGF0ZSwg Ym9vbCBhY3RpdmVfYnJhbmNoLCBjb25zdCBjaGFyICpjbWQpCiAJCQkJCXN1Y2Nlc3MgPSBsaXN0 VGFibGVzKCJ0dm1zRSIsIE5VTEwsIHNob3dfdmVyYm9zZSwgc2hvd19zeXN0ZW0pOwogCQkJCWJy ZWFrOwogCQkJY2FzZSAnQSc6Ci0JCQkJc3VjY2VzcyA9IGRlc2NyaWJlQWNjZXNzTWV0aG9kcyhw YXR0ZXJuLCBzaG93X3ZlcmJvc2UpOworCQkJCXsKKwkJCQljaGFyICpwYXR0ZXJuMiA9IHBzcWxf c2Nhbl9zbGFzaF9vcHRpb24oc2Nhbl9zdGF0ZSwgT1RfTk9STUFMLCBOVUxMLCB0cnVlKTsKKwkJ CQlpZiAoc3RybmNtcChjbWQsICJkQXAiLCAzKSA9PSAwKQorCQkJCQlzdWNjZXNzID0gZGVzY3Jp YmVBY2Nlc3NNZXRob2RQcm9wZXJ0aWVzKHBhdHRlcm4pOworCQkJCWVsc2UgaWYgKHN0cm5jbXAo Y21kLCAiZEFmbyIsIDQpID09IDApCisJCQkJCXN1Y2Nlc3MgPSBsaXN0RmFtaWx5Q2xhc3NPcGVy YXRvcnMocGF0dGVybiwgcGF0dGVybjIpOworCQkJCWVsc2UgaWYgKHN0cm5jbXAoY21kLCAiZEFm cCIsIDQpID09IDApCisJCQkJCXN1Y2Nlc3MgPSBsaXN0T3BlcmF0b3JGYW1pbHlQcm9jZWR1cmVz KHBhdHRlcm4sIHBhdHRlcm4yKTsKKwkJCQllbHNlIGlmIChzdHJuY21wKGNtZCwgImRBZiIsIDMp ID09IDApCisJCQkJCXN1Y2Nlc3MgPSBsaXN0QWNjZXNzTWV0aG9kT3BlcmF0b3JGYW1pbGllcyhw YXR0ZXJuLCBwYXR0ZXJuMiwgc2hvd192ZXJib3NlKTsKKwkJCQllbHNlIGlmIChzdHJuY21wKGNt ZCwgImRBb2MiLCA0KSA9PSAwKQorCQkJCQlzdWNjZXNzID0gZGVzY3JpYmVBY2Nlc3NNZXRob2RP cGVyYXRvckNsYXNzZXMocGF0dGVybiwgcGF0dGVybjIsIHNob3dfdmVyYm9zZSk7CisJCQkJZWxz ZQorCQkJCQlzdWNjZXNzID0gZGVzY3JpYmVBY2Nlc3NNZXRob2RzKHBhdHRlcm4sIHNob3dfdmVy Ym9zZSk7CisJCQkJZnJlZShwYXR0ZXJuMik7CisJCQkJfQogCQkJCWJyZWFrOwogCQkJY2FzZSAn YSc6CiAJCQkJc3VjY2VzcyA9IGRlc2NyaWJlQWdncmVnYXRlcyhwYXR0ZXJuLCBzaG93X3ZlcmJv c2UsIHNob3dfc3lzdGVtKTsKQEAgLTc5Miw2ICs4MDcsMjMgQEAgZXhlY19jb21tYW5kX2QoUHNx bFNjYW5TdGF0ZSBzY2FuX3N0YXRlLCBib29sIGFjdGl2ZV9icmFuY2gsIGNvbnN0IGNoYXIgKmNt ZCkKIAkJCWNhc2UgJ3YnOgogCQkJY2FzZSAnbSc6CiAJCQljYXNlICdpJzoKKwkJCQlpZiAoc3Ry bmNtcChjbWQsICJkaXAiLCAzKSA9PSAwKQorCQkJCXsKKwkJCQkJc3VjY2VzcyA9IGRlc2NyaWJl SW5kZXhQcm9wZXJ0aWVzKHBhdHRlcm4sIHNob3dfc3lzdGVtKTsKKwkJCQkJYnJlYWs7CisJCQkJ fQorCQkJCWVsc2UgaWYgKHN0cm5jbXAoY21kLCAiZGljcCIsIDQpID09IDApCisJCQkJeworCQkJ CQljaGFyCSAgICpjb2x1bW5fcGF0dGVybiA9IE5VTEw7CisKKwkJCQkJaWYgKHBhdHRlcm4pCisJ CQkJCQljb2x1bW5fcGF0dGVybiA9IHBzcWxfc2Nhbl9zbGFzaF9vcHRpb24oc2Nhbl9zdGF0ZSwK KwkJCQkJCQkJCQkJCQkJCQlPVF9OT1JNQUwsIE5VTEwsIHRydWUpOworCisJCQkJCXN1Y2Nlc3Mg PSBkZXNjcmliZUluZGV4Q29sdW1uUHJvcGVydGllcyhwYXR0ZXJuLCBjb2x1bW5fcGF0dGVybiwg c2hvd19zeXN0ZW0pOworCQkJCQlmcmVlKGNvbHVtbl9wYXR0ZXJuKTsKKwkJCQkJYnJlYWs7CisJ CQkJfQogCQkJY2FzZSAncyc6CiAJCQljYXNlICdFJzoKIAkJCQlzdWNjZXNzID0gbGlzdFRhYmxl cygmY21kWzFdLCBwYXR0ZXJuLCBzaG93X3ZlcmJvc2UsIHNob3dfc3lzdGVtKTsKZGlmZiAtLWdp dCBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKaW5k ZXggNmUwODUxNS4uYTM3ZjY2YiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMK KysrIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKQEAgLTQzLDcgKzQzLDkgQEAgc3RhdGljIGJv b2wgZGVzY3JpYmVPbmVUU0NvbmZpZyhjb25zdCBjaGFyICpvaWQsIGNvbnN0IGNoYXIgKm5zcG5h bWUsCiAJCQkJCWNvbnN0IGNoYXIgKnBuc3BuYW1lLCBjb25zdCBjaGFyICpwcnNuYW1lKTsKIHN0 YXRpYyB2b2lkIHByaW50QUNMQ29sdW1uKFBRRXhwQnVmZmVyIGJ1ZiwgY29uc3QgY2hhciAqY29s bmFtZSk7CiBzdGF0aWMgYm9vbCBsaXN0T25lRXh0ZW5zaW9uQ29udGVudHMoY29uc3QgY2hhciAq ZXh0bmFtZSwgY29uc3QgY2hhciAqb2lkKTsKLQorc3RhdGljIGJvb2wgZGVzY3JpYmVPbmVJbmRl eENvbHVtblByb3BlcnRpZXMoY29uc3QgY2hhciAqb2lkLCBjb25zdCBjaGFyICpuc3BuYW1lLAor CQkJCQkJCQkgCQkJIGNvbnN0IGNoYXIgKmlkeG5hbWUsIGNvbnN0IGNoYXIgKmFtbmFtZSwKKwkJ CQkJCQkJIAkJCSBjb25zdCBjaGFyICp0YWJuYW1lLCBjb25zdCBjaGFyICpjb2x1bW5fcGF0dGVy bik7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLQogICogSGFuZGxlcnMgZm9yIHZhcmlvdXMgc2xhc2gg Y29tbWFuZHMgZGlzcGxheWluZyBzb21lIHNvcnQgb2YgbGlzdApAQCAtNTUwNSwzICs1NTA3LDU1 OSBAQCBwcmludEFDTENvbHVtbihQUUV4cEJ1ZmZlciBidWYsIGNvbnN0IGNoYXIgKmNvbG5hbWUp CiAJCQkJCQkgICJwZ19jYXRhbG9nLmFycmF5X3RvX3N0cmluZyglcywgJ1xcbicpIEFTIFwiJXNc IiIsCiAJCQkJCQkgIGNvbG5hbWUsIGdldHRleHRfbm9vcCgiQWNjZXNzIHByaXZpbGVnZXMiKSk7 CiB9CisKKy8qCisgKiBcZGlwCisgKiBUYWtlcyBhbiBvcHRpb25hbCByZWdleHAgdG8gc2VsZWN0 IHBhcnRpY3VsYXIgaW5kZXguIERlc2NyaWJlcyBpbmRleCBwcm9lcnRpZXMKKyAqLworYm9vbAor ZGVzY3JpYmVJbmRleFByb3BlcnRpZXMoY29uc3QgY2hhciAqcGF0dGVybiwgYm9vbCBzaG93U3lz dGVtKQoreworCVBRRXhwQnVmZmVyRGF0YSBidWY7CisJUEdyZXN1bHQgICAqcmVzOworCXByaW50 UXVlcnlPcHQgbXlvcHQgPSBwc2V0LnBvcHQ7CisKKwkvKiB3aGF0IGZvciA/ICovCisJc3RhdGlj IGNvbnN0IGJvb2wgdHJhbnNsYXRlX2NvbHVtbnNbXSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBm YWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZX07CisKKwlpbml0UFFFeHBCdWZmZXIoJmJ1Zik7CisK KwlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkgICJTRUxFQ1QiCisJCQkJCSAgIiAgbi5u c3BuYW1lIGFzIFwiJXNcIixcbiIKKwkJCQkJICAiICBjLnJlbG5hbWUgYXMgXCIlc1wiLFxuIgor CQkJCQkgICIgIGFtLmFtbmFtZSBhcyBcIiVzXCIsXG4iCisJCQkJCSAgIiAgcGdfaW5kZXhfaGFz X3Byb3BlcnR5KGMucmVsbmFtZTo6cmVnY2xhc3MsICdjbHVzdGVyYWJsZScpIGFzIFwiJXNcIixc biIKKwkJCQkJICAiICBwZ19pbmRleF9oYXNfcHJvcGVydHkoYy5yZWxuYW1lOjpyZWdjbGFzcywg J2luZGV4X3NjYW4nKSBhcyBcIiVzXCIsXG4iCisJCQkJCSAgIiAgcGdfaW5kZXhfaGFzX3Byb3Bl cnR5KGMucmVsbmFtZTo6cmVnY2xhc3MsICdiaXRtYXBfc2NhbicpIGFzIFwiJXNcIixcbiIKKwkJ CQkJICAiICBwZ19pbmRleF9oYXNfcHJvcGVydHkoYy5yZWxuYW1lOjpyZWdjbGFzcywgJ2JhY2t3 YXJkX3NjYW4nKSBhcyBcIiVzXCJcbiIKKwkJCQkJICAiRlJPTSBwZ19jbGFzcyBjXG4iCisJCQkJ CSAgIiAgTEVGVCBKT0lOIHBnX25hbWVzcGFjZSBuIE9OIG4ub2lkID0gYy5yZWxuYW1lc3BhY2Vc biIKKwkJCQkJICAiICBMRUZUIEpPSU4gcGdfYW0gYW0gT04gYW0ub2lkID0gYy5yZWxhbVxuIgor CQkJCQkgICJXSEVSRSBjLnJlbGtpbmQ9J2knXG4iCisJCQkJCSAgIiAgQU5EIG4ubnNwbmFtZSAh fiAncGdfdG9hc3QnXG4iLAorCQkJCQkgIGdldHRleHRfbm9vcCgiU2NoZW1hIiksCisJCQkJCSAg Z2V0dGV4dF9ub29wKCJOYW1lIiksCisJCQkJCSAgZ2V0dGV4dF9ub29wKCJBY2Nlc3MgbWV0aG9k IiksCisJCQkJCSAgZ2V0dGV4dF9ub29wKCJDbHVzdGVyYWJsZSIpLAorCQkJCQkgIGdldHRleHRf bm9vcCgiSW5kZXggc2NhbiIpLAorCQkJCQkgIGdldHRleHRfbm9vcCgiQml0bWFwIHNjYW4iKSwK KwkJCQkJICBnZXR0ZXh0X25vb3AoIkJhY2t3YXJkIHNjYW4iKSk7CisKKwlpZiAoIXNob3dTeXN0 ZW0gJiYgIXBhdHRlcm4pCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsCisJCQkJCQkJICIg IEFORCBuLm5zcG5hbWUgPD4gJ3BnX2NhdGFsb2cnXG4iCisJCQkJCQkJICIgIEFORCBuLm5zcG5h bWUgPD4gJ2luZm9ybWF0aW9uX3NjaGVtYSdcbiIpOworCisJcHJvY2Vzc1NRTE5hbWVQYXR0ZXJu KHBzZXQuZGIsICZidWYsIHBhdHRlcm4sIHRydWUsIGZhbHNlLAorCQkJCQkJICAibi5uc3BuYW1l IiwgImMucmVsbmFtZSIsIE5VTEwsIE5VTEwpOworCisJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1 ZiwgIk9SREVSIEJZIDE7Iik7CisJcmVzID0gUFNRTGV4ZWMoYnVmLmRhdGEpOworCXRlcm1QUUV4 cEJ1ZmZlcigmYnVmKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIGZhbHNlOworCisJbXlvcHQubnVs bFByaW50ID0gTlVMTDsKKwlteW9wdC50aXRsZSA9IF8oIkluZGV4IHByb3BlcnRpZXMiKTsKKwlt eW9wdC50cmFuc2xhdGVfaGVhZGVyID0gdHJ1ZTsKKwlteW9wdC50cmFuc2xhdGVfY29sdW1ucyA9 IHRyYW5zbGF0ZV9jb2x1bW5zOworCW15b3B0Lm5fdHJhbnNsYXRlX2NvbHVtbnMgPSBsZW5ndGhv Zih0cmFuc2xhdGVfY29sdW1ucyk7CisKKwlwcmludFF1ZXJ5KHJlcywgJm15b3B0LCBwc2V0LnF1 ZXJ5Rm91dCwgZmFsc2UsIHBzZXQubG9nZmlsZSk7CisKKwlQUWNsZWFyKHJlcyk7CisJcmV0dXJu IHRydWU7Cit9CisKKy8qIFxkQXAKKyAqCVRha2VzIGFuIG9wdGlvbmFsIHJlZ2V4cCB0byBzZWxl Y3QgcGFydGljdWxhciBhY2Nlc3MgbWV0aG9kcworICovCitib29sCitkZXNjcmliZUFjY2Vzc01l dGhvZFByb3BlcnRpZXMoY29uc3QgY2hhciAqcGF0dGVybikKK3sKKwlQUUV4cEJ1ZmZlckRhdGEg YnVmOworCVBHcmVzdWx0ICAgKnJlczsKKwlwcmludFF1ZXJ5T3B0IG15b3B0ID0gcHNldC5wb3B0 OworCXN0YXRpYyBjb25zdCBib29sIHRyYW5zbGF0ZV9jb2x1bW5zW10gPSB7ZmFsc2UsIGZhbHNl LCBmYWxzZSwgZmFsc2UsIHRydWV9OworCisJaWYgKHBzZXQuc3ZlcnNpb24gPCA5MDYwMCkKKwl7 CisJCWNoYXIJCXN2ZXJidWZbMzJdOworCisJCXBzcWxfZXJyb3IoIlRoZSBzZXJ2ZXIgKHZlcnNp b24gJXMpIGRvZXMgbm90IHN1cHBvcnQgYWNjZXNzIG1ldGhvZHMuXG4iLAorCQkJCSAgIGZvcm1h dFBHVmVyc2lvbk51bWJlcihwc2V0LnN2ZXJzaW9uLCBmYWxzZSwKKwkJCQkJCQkJCQkgc3ZlcmJ1 Ziwgc2l6ZW9mKHN2ZXJidWYpKSk7CisJCXJldHVybiB0cnVlOworCX0KKworCWluaXRQUUV4cEJ1 ZmZlcigmYnVmKTsKKworCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCisJCQkJCSAgIlNFTEVDVCBh LmFtbmFtZSBBUyBcIiVzXCIsXG4iCisJCQkJCSAgIiAgcGdfaW5kZXhhbV9oYXNfcHJvcGVydHko YS5vaWQsICdjYW5fb3JkZXInKSBBUyBcIiVzXCIsXG4iCisJCQkJCSAgIiAgcGdfaW5kZXhhbV9o YXNfcHJvcGVydHkoYS5vaWQsICdjYW5fdW5pcXVlJykgQVMgXCIlc1wiLFxuIgorCQkJCQkgICIg IHBnX2luZGV4YW1faGFzX3Byb3BlcnR5KGEub2lkLCAnY2FuX211bHRpX2NvbCcpIEFTIFwiJXNc IixcbiIKKwkJCQkJICAiICBwZ19pbmRleGFtX2hhc19wcm9wZXJ0eShhLm9pZCwgJ2Nhbl9leGNs dWRlJykgQVMgXCIlc1wiIiwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIkFNIE5hbWUiKSwKKwkJCQkJ ICBnZXR0ZXh0X25vb3AoIkNhbiBvcmRlciIpLAorCQkJCQkgIGdldHRleHRfbm9vcCgiQ2FuIHVu aXF1ZSIpLAorCQkJCQkgIGdldHRleHRfbm9vcCgiQ2FuIG11bHRpIGNvbCIpLAorCQkJCQkgIGdl dHRleHRfbm9vcCgiQ2FuIGV4Y2x1ZGUiKSk7CisKKwlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVm LAorCQkJCQkJICJcbkZST00gcGdfYW0gYVxuIik7CisKKwlwcm9jZXNzU1FMTmFtZVBhdHRlcm4o cHNldC5kYiwgJmJ1ZiwgcGF0dGVybiwgZmFsc2UsIGZhbHNlLAorCQkJCQkJICBOVUxMLCAiYW1u YW1lIiwgTlVMTCwgTlVMTCk7CisKKwlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLCAiT1JERVIg QlkgMTsiKTsKKwlyZXMgPSBQU1FMZXhlYyhidWYuZGF0YSk7CisJdGVybVBRRXhwQnVmZmVyKCZi dWYpOworCWlmICghcmVzKQorCQlyZXR1cm4gZmFsc2U7CisKKwlteW9wdC5udWxsUHJpbnQgPSBO VUxMOworCW15b3B0LnRpdGxlID0gXygiQWNjZXNzIG1ldGhvZCBwcm9wZXJ0aWVzIik7CisJbXlv cHQudHJhbnNsYXRlX2hlYWRlciA9IHRydWU7CisJbXlvcHQudHJhbnNsYXRlX2NvbHVtbnMgPSB0 cmFuc2xhdGVfY29sdW1uczsKKwlteW9wdC5uX3RyYW5zbGF0ZV9jb2x1bW5zID0gbGVuZ3Rob2Yo dHJhbnNsYXRlX2NvbHVtbnMpOworCisJcHJpbnRRdWVyeShyZXMsICZteW9wdCwgcHNldC5xdWVy eUZvdXQsIGZhbHNlLCBwc2V0LmxvZ2ZpbGUpOworCisJUFFjbGVhcihyZXMpOworCXJldHVybiB0 cnVlOworfQorCisvKiBcZEFmICovCitib29sCitsaXN0QWNjZXNzTWV0aG9kT3BlcmF0b3JGYW1p bGllcyhjb25zdCBjaGFyICphY2Nlc3NfbWV0aG9kX3BhdHRlcm4sIGNvbnN0IGNoYXIgKmZhbWls eV9wYXR0ZXJuLCBib29sIHZlcmJvc2UpCit7CisJUFFFeHBCdWZmZXJEYXRhIGJ1ZjsKKwlQR3Jl c3VsdAkgICAqcmVzOworCXByaW50UXVlcnlPcHQJbXlvcHQgPSBwc2V0LnBvcHQ7CisJYm9vbAkJ CWhhdmVfd2hlcmUgPSBmYWxzZTsKKwlzdGF0aWMgY29uc3QgYm9vbCB0cmFuc2xhdGVfY29sdW1u c1tdID0ge2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlfTsKKworCWluaXRQUUV4cEJ1ZmZlcigm YnVmKTsKKworCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCisJCQkJCSAgIlNFTEVDVFxuIgorCQkJ CQkgICIgIGFtLmFtbmFtZSBBUyBcIiVzXCIsXG4iCisJCQkJCSAgIiAgbnMubnNwbmFtZSBBUyBc IiVzXCIsXG4iCisJCQkJCSAgIiAgb2Yub3BmbmFtZSBBUyBcIiVzXCJcbiIsCisJCQkJCSAgZ2V0 dGV4dF9ub29wKCJBY2Nlc3MgbWV0aG9kIiksCisJCQkJCSAgZ2V0dGV4dF9ub29wKCJPcGVyYXRv ciBmYW1pbHkgc2NoZW1hIiksCisJCQkJCSAgZ2V0dGV4dF9ub29wKCJPcGVyYXRvciBmYW1pbHkg bmFtZSIpKTsKKwlpZiAodmVyYm9zZSkKKwkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQkJ ICAiLCAgdXNyLnVzZW5hbWUgQVMgXCIlc1wiXG4iLAorCQkJCQkgIGdldHRleHRfbm9vcCgiT3du ZXIiKSk7CisJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQkJICAiICBGUk9NIHBnX29wZmFt aWx5IG9mXG4iCisJCQkJCSAgIiAgTEVGVCBKT0lOIHBnX2FtIGFtIE9OIGFtLm9pZCA9IG9mLm9w Zm1ldGhvZFxuIgorCQkJCQkgICIgIExFRlQgSk9JTiBwZ19uYW1lc3BhY2UgbnMgT04gb2Yub3Bm bmFtZXNwYWNlID0gbnMub2lkXG4iKTsKKwlpZiAodmVyYm9zZSkKKwkJYXBwZW5kUFFFeHBCdWZm ZXIoJmJ1ZiwKKwkJCQkJCSIgIExFRlQgSk9JTiBwZ191c2VyIHVzciBPTiBvZi5vcGZvd25lciA9 IHVzci51c2VzeXNpZFxuIgorCQkJCQkJKTsKKwlpZiAoYWNjZXNzX21ldGhvZF9wYXR0ZXJuKQor CQloYXZlX3doZXJlID0gcHJvY2Vzc1NRTE5hbWVQYXR0ZXJuKHBzZXQuZGIsICZidWYsIGFjY2Vz c19tZXRob2RfcGF0dGVybiwgZmFsc2UsIGZhbHNlLAorCQkJCQkJCSAgImFtLmFtbmFtZSIsICJh bS5hbW5hbWUiLCBOVUxMLCBOVUxMKTsKKwlpZiAoZmFtaWx5X3BhdHRlcm4pCisJCXByb2Nlc3NT UUxOYW1lUGF0dGVybihwc2V0LmRiLCAmYnVmLCBmYW1pbHlfcGF0dGVybiwgaGF2ZV93aGVyZSwg ZmFsc2UsCisJCQkJCQkJICAibnMubnNwbmFtZSIsICJvZi5vcGZuYW1lIiwgTlVMTCwgTlVMTCk7 CisKKwlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLCAiT1JERVIgQlkgMSwgMjsiKTsKKworCXJl cyA9IFBTUUxleGVjKGJ1Zi5kYXRhKTsKKwl0ZXJtUFFFeHBCdWZmZXIoJmJ1Zik7CisJaWYgKCFy ZXMpCisJCXJldHVybiBmYWxzZTsKKworCW15b3B0Lm51bGxQcmludCA9IE5VTEw7CisJbXlvcHQu dGl0bGUgPSBfKCJMaXN0IG9mIG9wZXJhdG9yIGZhbWlsaWVzIik7CisJbXlvcHQudHJhbnNsYXRl X2hlYWRlciA9IHRydWU7CisJbXlvcHQudHJhbnNsYXRlX2NvbHVtbnMgPSB0cmFuc2xhdGVfY29s dW1uczsKKwlteW9wdC5uX3RyYW5zbGF0ZV9jb2x1bW5zID0gbGVuZ3Rob2YodHJhbnNsYXRlX2Nv bHVtbnMpOworCisJcHJpbnRRdWVyeShyZXMsICZteW9wdCwgcHNldC5xdWVyeUZvdXQsIGZhbHNl LCBwc2V0LmxvZ2ZpbGUpOworCisJUFFjbGVhcihyZXMpOworCXJldHVybiB0cnVlOworCit9CisK Ky8qIFxkQWZvICovCitib29sCitsaXN0RmFtaWx5Q2xhc3NPcGVyYXRvcnMoY29uc3QgY2hhciAq YWNjZXNzX21ldGhvZF9wYXR0ZXJuLCBjb25zdCBjaGFyICpmYW1pbHlfcGF0dGVybikKK3sKKwlQ UUV4cEJ1ZmZlckRhdGEgYnVmOworCVBHcmVzdWx0CSAgICpyZXM7CisJcHJpbnRRdWVyeU9wdAlt eW9wdCA9IHBzZXQucG9wdDsKKwlib29sCQkJaGF2ZV93aGVyZSA9IGZhbHNlOworCisJc3RhdGlj IGNvbnN0IGJvb2wgdHJhbnNsYXRlX2NvbHVtbnNbXSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBm YWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlfTsKKworCWluaXRQUUV4cEJ1 ZmZlcigmYnVmKTsKKworCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCisJCQkJCSAgIlNFTEVDVCBE SVNUSU5DVFxuIgorCQkJCQkgICIgIGFtLmFtbmFtZSBBUyBcIiVzXCIsXG4iCisJCQkJCSAgIiAg bnNmLm5zcG5hbWUgQVMgXCIlc1wiLFxuIgorCQkJCQkgICIgIG9mLm9wZm5hbWUgQVMgXCIlc1wi LFxuIgorCQkJCQkgICIgIGZvcm1hdF90eXBlKG8uYW1vcGxlZnR0eXBlICwgTlVMTCkgQVMgXCIl c1wiLFxuIgorCQkJCQkgICIgIGZvcm1hdF90eXBlKG8uYW1vcHJpZ2h0dHlwZSAsIE5VTEwpIEFT IFwiJXNcIixcbiIKKwkJCQkJICAiICBvLmFtb3BzdHJhdGVneSBBUyBcIiVzXCIsXG4iCisJCQkJ CSAgIiAgQ0FTRSBXSEVOIHBnX29wZXJhdG9yX2lzX3Zpc2libGUob3Aub2lkKSBcbiIKKwkJCQkJ ICAiICAgIFRIRU4gb3Aub3BybmFtZTo6dGV4dCBcbiIKKwkJCQkJICAiICAgIEVMU0Ugby5hbW9w b3ByOjpwZ19jYXRhbG9nLnJlZ29wZXI6OnRleHQgXG4iCisJCQkJCSAgIiAgRU5EIEFTIFwiJXNc IixcbiIKKwkJCQkJICAiICBDQVNFIG8uYW1vcHB1cnBvc2VcbiIKKwkJCQkJICAiICAgIFdIRU4g J28nIFRIRU4gJ29yZGVyaW5nJ1xuIgorCQkJCQkgICIgICAgV0hFTiAncycgVEhFTiAnc2VhcmNo J1xuIgorCQkJCQkgICIgIEVORCBBUyBcIiVzXCIsXG4iCisJCQkJCSAgIiAgb2ZzLm9wZm5hbWUg QVMgXCIlc1wiXG4iCisJCQkJCSAgIkZST00gcGdfYW1vcCBvXG4iCisJCQkJCSAgIiAgTEVGVCBK T0lOIHBnX29wZXJhdG9yIG9wIE9OIG9wLm9pZCA9IG8uYW1vcG9wclxuIgorCQkJCQkgICIgIExF RlQgSk9JTiBwZ19vcGZhbWlseSBvZiBPTiBvZi5vaWQgPSBvLmFtb3BmYW1pbHlcbiIKKwkJCQkJ ICAiICBMRUZUIEpPSU4gcGdfb3BmYW1pbHkgb2ZzIE9OIG9mcy5vaWQgPSBvLmFtb3Bzb3J0ZmFt aWx5XG4iCisJCQkJCSAgIiAgTEVGVCBKT0lOIHBnX2FtIGFtIE9OIGFtLm9pZCA9IG9mLm9wZm1l dGhvZCBBTkQgYW0ub2lkID0gby5hbW9wbWV0aG9kXG4iCisJCQkJCSAgIiAgTEVGVCBKT0lOIHBn X25hbWVzcGFjZSBuc2YgT04gb2Yub3BmbmFtZXNwYWNlID0gbnNmLm9pZFxuIiwKKwkJCQkJICBn ZXR0ZXh0X25vb3AoIkFNIiksCisJCQkJCSAgZ2V0dGV4dF9ub29wKCJPcGZhbWlseSBTY2hlbWEi KSwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIk9wZmFtaWx5IE5hbWUiKSwKKwkJCQkJICBnZXR0ZXh0 X25vb3AoIkxlZnQgdHlwZSIpLAorCQkJCQkgIGdldHRleHRfbm9vcCgiUmlnaHQgdHlwZSIpLAor CQkJCQkgIGdldHRleHRfbm9vcCgiU3RyYXRlZ3kiKSwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIk9w ZXJhdG9yIiksCisJCQkJCSAgZ2V0dGV4dF9ub29wKCJQdXJwb3NlIiksCisJCQkJCSAgZ2V0dGV4 dF9ub29wKCJTb3J0IGZhbWlseSIpKTsKKworCWlmIChhY2Nlc3NfbWV0aG9kX3BhdHRlcm4pCisJ CWhhdmVfd2hlcmUgPSBwcm9jZXNzU1FMTmFtZVBhdHRlcm4ocHNldC5kYiwgJmJ1ZiwgYWNjZXNz X21ldGhvZF9wYXR0ZXJuLAorCQkJCQkJCQkJCSAgIGZhbHNlLCBmYWxzZSwgTlVMTCwgImFtLmFt bmFtZSIsCisJCQkJCQkJCQkJICAgTlVMTCwgTlVMTCk7CisKKwlpZiAoZmFtaWx5X3BhdHRlcm4p CisJCXByb2Nlc3NTUUxOYW1lUGF0dGVybihwc2V0LmRiLCAmYnVmLCBmYW1pbHlfcGF0dGVybiwg aGF2ZV93aGVyZSwgZmFsc2UsCisJCQkJCQkJICAibnNmLm5zcG5hbWUiLCAib2Yub3BmbmFtZSIs IE5VTEwsIE5VTEwpOworCisJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwgIk9SREVSIEJZIDEs IDIsIDMsIDQsIDUsIDY7Iik7CisKKwlyZXMgPSBQU1FMZXhlYyhidWYuZGF0YSk7CisJdGVybVBR RXhwQnVmZmVyKCZidWYpOworCWlmICghcmVzKQorCQlyZXR1cm4gZmFsc2U7CisKKwlteW9wdC5u dWxsUHJpbnQgPSBOVUxMOworCW15b3B0LnRpdGxlID0gXygiTGlzdCBvcGVyYXRvcnMgb2YgZmFt aWx5IHJlbGF0ZWQgdG8gYWNjZXNzIG1ldGhvZCIpOworCW15b3B0LnRyYW5zbGF0ZV9oZWFkZXIg PSB0cnVlOworCW15b3B0LnRyYW5zbGF0ZV9jb2x1bW5zID0gdHJhbnNsYXRlX2NvbHVtbnM7CisJ bXlvcHQubl90cmFuc2xhdGVfY29sdW1ucyA9IGxlbmd0aG9mKHRyYW5zbGF0ZV9jb2x1bW5zKTsK KworCXByaW50UXVlcnkocmVzLCAmbXlvcHQsIHBzZXQucXVlcnlGb3V0LCBmYWxzZSwgcHNldC5s b2dmaWxlKTsKKworCVBRY2xlYXIocmVzKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyogXGRBZnAg Ki8KK2Jvb2wKK2xpc3RPcGVyYXRvckZhbWlseVByb2NlZHVyZXMoY29uc3QgY2hhciAqYWNjZXNz X21ldGhvZF9wYXR0ZXJuLCBjb25zdCBjaGFyICpmYW1pbHlfcGF0dGVybikKK3sKKwlQUUV4cEJ1 ZmZlckRhdGEgYnVmOworCVBHcmVzdWx0CSAgICpyZXM7CisJcHJpbnRRdWVyeU9wdAlteW9wdCA9 IHBzZXQucG9wdDsKKwlib29sCQkJaGF2ZV93aGVyZSA9IGZhbHNlOworCXN0YXRpYyBjb25zdCBi b29sIHRyYW5zbGF0ZV9jb2x1bW5zW10gPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZh bHNlLCBmYWxzZSwgZmFsc2V9OworCisJaW5pdFBRRXhwQnVmZmVyKCZidWYpOworCisJcHJpbnRm UFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQkJICAiU0VMRUNUIERJU1RJTkNUXG4iCisJCQkJCSAgIiAg YW0uYW1uYW1lIEFTIFwiJXNcIixcbiIKKwkJCQkJICAiICBucy5uc3BuYW1lIEFTIFwiJXNcIixc biIKKwkJCQkJICAiICBvZi5vcGZuYW1lIEFTIFwiJXNcIixcbiIKKwkJCQkJICAiICBmb3JtYXRf dHlwZShhcC5hbXByb2NsZWZ0dHlwZSwgTlVMTCkgQVMgXCIlc1wiLFxuIgorCQkJCQkgICIgIGZv cm1hdF90eXBlKGFwLmFtcHJvY3JpZ2h0dHlwZSwgTlVMTCkgQVMgXCIlc1wiLFxuIgorCQkJCQkg ICIgIGFwLmFtcHJvY251bSBBUyBcIiVzXCIsXG4iCisJCQkJCSAgIiAgYXAuYW1wcm9jOjpwZ19j YXRhbG9nLnJlZ3Byb2M6OnRleHQgfHwgJygnIHx8IHBnX2dldF9mdW5jdGlvbl9hcmd1bWVudHMo YXAuYW1wcm9jKSB8fCAnKScgQVMgXCIlc1wiXG4iCisJCQkJCSAgIkZST00gcGdfYW1wcm9jIGFw XG4iCisJCQkJCSAgIiAgTEVGVCBKT0lOIHBnX29wZmFtaWx5IG9mIE9OIG9mLm9pZCA9IGFwLmFt cHJvY2ZhbWlseVxuIgorCQkJCQkgICIgIExFRlQgSk9JTiBwZ19hbSBhbSBPTiBhbS5vaWQgPSBv Zi5vcGZtZXRob2RcbiIKKwkJCQkJICAiICBMRUZUIEpPSU4gcGdfbmFtZXNwYWNlIG5zIE9OIG9m Lm9wZm5hbWVzcGFjZSA9IG5zLm9pZFxuIiwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIkFNIiksCisJ CQkJCSAgZ2V0dGV4dF9ub29wKCJGYW1pbHkgc2NoZW1hIiksCisJCQkJCSAgZ2V0dGV4dF9ub29w KCJGYW1pbHkgbmFtZSIpLAorCQkJCQkgIGdldHRleHRfbm9vcCgiTGVmdCIpLAorCQkJCQkgIGdl dHRleHRfbm9vcCgiUmlnaHQiKSwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIk51bWJlciIpLAorCQkJ CQkgIGdldHRleHRfbm9vcCgiUHJvYyBuYW1lIikpOworCisJaWYgKGFjY2Vzc19tZXRob2RfcGF0 dGVybikKKwkJaGF2ZV93aGVyZSA9IHByb2Nlc3NTUUxOYW1lUGF0dGVybihwc2V0LmRiLCAmYnVm LCBhY2Nlc3NfbWV0aG9kX3BhdHRlcm4sIGZhbHNlLCBmYWxzZSwKKwkJCQkJCQkgIE5VTEwsICJh bS5hbW5hbWUiLCBOVUxMLAorCQkJCQkJCSAgTlVMTCk7CisJaWYgKGZhbWlseV9wYXR0ZXJuKQor CQlwcm9jZXNzU1FMTmFtZVBhdHRlcm4ocHNldC5kYiwgJmJ1ZiwgZmFtaWx5X3BhdHRlcm4sIGhh dmVfd2hlcmUsIGZhbHNlLAorCQkJCQkJCSAgIm5zLm5zcG5hbWUiLCAib2Yub3BmbmFtZSIsIE5V TEwsCisJCQkJCQkJICBOVUxMKTsKKworCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsCisJCQkJ CQkgIk9SREVSIEJZIDEsIDIsIDMsIDQsIDUsIDY7Iik7CisKKwlyZXMgPSBQU1FMZXhlYyhidWYu ZGF0YSk7CisJdGVybVBRRXhwQnVmZmVyKCZidWYpOworCWlmICghcmVzKQorCQlyZXR1cm4gZmFs c2U7CisKKwlteW9wdC5udWxsUHJpbnQgPSBOVUxMOworCW15b3B0LnRpdGxlID0gXygiTGlzdCBv ZiBvcGVyYXRvciBmYW1pbHkgcHJvY2VkdXJlcyIpOworCW15b3B0LnRyYW5zbGF0ZV9oZWFkZXIg PSB0cnVlOworCW15b3B0LnRyYW5zbGF0ZV9jb2x1bW5zID0gdHJhbnNsYXRlX2NvbHVtbnM7CisJ bXlvcHQubl90cmFuc2xhdGVfY29sdW1ucyA9IGxlbmd0aG9mKHRyYW5zbGF0ZV9jb2x1bW5zKTsK KworCXByaW50UXVlcnkocmVzLCAmbXlvcHQsIHBzZXQucXVlcnlGb3V0LCBmYWxzZSwgcHNldC5s b2dmaWxlKTsKKworCVBRY2xlYXIocmVzKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyogXGRpY3Ag Ki8KK2Jvb2wKK2Rlc2NyaWJlSW5kZXhDb2x1bW5Qcm9wZXJ0aWVzKGNvbnN0IGNoYXIgKmluZGV4 X3BhdHRlcm4sIGNvbnN0IGNoYXIgKmNvbHVtbl9wYXR0ZXJuLCBib29sIHNob3dTeXN0ZW0pCit7 CisJUFFFeHBCdWZmZXJEYXRhIGJ1ZjsKKwlQR3Jlc3VsdAkgICAqcmVzOworCWludAkJCQlpOwor CisJaW5pdFBRRXhwQnVmZmVyKCZidWYpOworCisJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJ CQkJICAiU0VMRUNUIERJU1RJTkNUIGMub2lkLFxuIgorCQkJCQkgICIgIG4ubnNwbmFtZSxcbiIK KwkJCQkJICAiICBjLnJlbG5hbWUsXG4iCisJCQkJCSAgIiAgYW0uYW1uYW1lLFxuIgorCQkJCQkg ICIgIGMyLnJlbG5hbWVcbiIKKwkJCQkJICAiRlJPTSBwZ19jYXRhbG9nLnBnX2NsYXNzIGNcbiIK KwkJCQkJICAiICBMRUZUIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgbiBPTiBuLm9pZCA9 IHJlbG5hbWVzcGFjZVxuIgorCQkJCQkgICIgIExFRlQgSk9JTiBwZ19hbSBhbSBPTiBhbS5vaWQg PSBjLnJlbGFtXG4iCisJCQkJCSAgIiAgTEVGVCBKT0lOIHBnX2NhdGFsb2cucGdfaW5kZXggaSBP TiBpLmluZGV4cmVsaWQgPSBjLm9pZFxuIgorCQkJCQkgICIgIExFRlQgSk9JTiBwZ19jYXRhbG9n LnBnX2NsYXNzIGMyIE9OIGkuaW5kcmVsaWQgPSBjMi5vaWRcbiIKKwkJCQkJICAiV0hFUkUgYy5y ZWxraW5kPSdpJ1xuIik7CisKKwlpZiAoIXNob3dTeXN0ZW0gJiYgIWluZGV4X3BhdHRlcm4pCisJ CWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsICJBTkQgbi5uc3BuYW1lIDw+ICdwZ19jYXRhbG9n J1xuIgorCQkJCQkJCQkgICAiQU5EIG4ubnNwbmFtZSA8PiAnaW5mb3JtYXRpb25fc2NoZW1hJ1xu Iik7CisKKwlwcm9jZXNzU1FMTmFtZVBhdHRlcm4ocHNldC5kYiwgJmJ1ZiwgaW5kZXhfcGF0dGVy biwgdHJ1ZSwgZmFsc2UsCisJCQkJCQkgICJuLm5zcG5hbWUiLCAiYy5yZWxuYW1lIiwgTlVMTCwK KwkJCQkJCSAgInBnX2NhdGFsb2cucGdfdGFibGVfaXNfdmlzaWJsZShjLm9pZCkiKTsKKworCWFw cGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsICJPUkRFUiBCWSAyLCAzOyIpOworCisJcmVzID0gUFNR TGV4ZWMoYnVmLmRhdGEpOworCXRlcm1QUUV4cEJ1ZmZlcigmYnVmKTsKKwlpZiAoIXJlcykKKwkJ cmV0dXJuIGZhbHNlOworCisJaWYgKFBRbnR1cGxlcyhyZXMpID09IDApCisJeworCQlpZiAoIXBz ZXQucXVpZXQpCisJCXsKKwkJCWlmIChjb2x1bW5fcGF0dGVybikKKwkJCQlwc3FsX2Vycm9yKCJE aWQgbm90IGZpbmQgYW55IGluZGV4IFwiJXNcIiB3aXRoIGNvbHVtbiBcIiVzXCJcbiIsCisJCQkJ CQkgICBpbmRleF9wYXR0ZXJuLCBjb2x1bW5fcGF0dGVybik7CisJCQllbHNlIGlmIChpbmRleF9w YXR0ZXJuKQorCQkJCXBzcWxfZXJyb3IoIkRpZCBub3QgZmluZCBhbnkgaW5kZXggbmFtZWQgXCIl c1wiXG4iLAorCQkJCQkJICAgaW5kZXhfcGF0dGVybik7CisJCQllbHNlCisJCQkJcHNxbF9lcnJv cigiRGlkIG5vdCBmaW5kIGFueSByZWxhdGlvbnMuXG4iKTsKKwkJfQorCQlQUWNsZWFyKHJlcyk7 CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7 IGkrKykKKwl7CisJCWNvbnN0IGNoYXIgKm9pZCA9IFBRZ2V0dmFsdWUocmVzLCBpLCAwKTsKKwkJ Y29uc3QgY2hhciAqbnNwbmFtZSA9IFBRZ2V0dmFsdWUocmVzLCBpLCAxKTsKKwkJY29uc3QgY2hh ciAqaWR4bmFtZSA9IFBRZ2V0dmFsdWUocmVzLCBpLCAyKTsKKwkJY29uc3QgY2hhciAqYW1uYW1l ID0gUFFnZXR2YWx1ZShyZXMsIGksIDMpOworCQljb25zdCBjaGFyICp0YWJuYW1lID0gUFFnZXR2 YWx1ZShyZXMsIGksIDQpOworCisJCWlmICghZGVzY3JpYmVPbmVJbmRleENvbHVtblByb3BlcnRp ZXMob2lkLCBuc3BuYW1lLCBpZHhuYW1lLCBhbW5hbWUsCisJCQkJCQkJCQkJCSAgdGFibmFtZSwg Y29sdW1uX3BhdHRlcm4pKQorCQl7CisJCQlQUWNsZWFyKHJlcyk7CisJCQlyZXR1cm4gZmFsc2U7 CisJCX0KKwkJaWYgKGNhbmNlbF9wcmVzc2VkKQorCQl7CisJCQlQUWNsZWFyKHJlcyk7CisJCQly ZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKKwlQUWNsZWFyKHJlcyk7CisJcmV0dXJuIHRydWU7Cit9 CisKK3N0YXRpYyBib29sCitkZXNjcmliZU9uZUluZGV4Q29sdW1uUHJvcGVydGllcyhjb25zdCBj aGFyICpvaWQsIAorCQkJCQkJCQkgY29uc3QgY2hhciAqbnNwbmFtZSwKKwkJCQkJCQkJIGNvbnN0 IGNoYXIgKmlkeG5hbWUsCisJCQkJCQkJCSBjb25zdCBjaGFyICphbW5hbWUsCisJCQkJCQkJCSBj b25zdCBjaGFyICp0YWJuYW1lLAorCQkJCQkJCQkgY29uc3QgY2hhciAqY29sdW1uX3BhdHRlcm4p Cit7CisJUFFFeHBCdWZmZXJEYXRhIGJ1ZjsKKwlQR3Jlc3VsdAkgICAqcmVzOworCXByaW50UXVl cnlPcHQgICBteW9wdCA9IHBzZXQucG9wdDsKKwljaGFyCQkgICAqZm9vdGVyc1szXSA9IHtOVUxM LCBOVUxMfTsKKwlzdGF0aWMgY29uc3QgYm9vbCB0cmFuc2xhdGVfY29sdW1uc1tdID0ge2ZhbHNl LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2Us IGZhbHNlfTsKKworCWluaXRQUUV4cEJ1ZmZlcigmYnVmKTsKKworCXByaW50ZlBRRXhwQnVmZmVy KCZidWYsCisJCQkJCSAgIlNFTEVDVCAiCisJCQkJCSAgIiAgYS5hdHRuYW1lIEFTIFwiJXNcIiwi CisJCQkJCSAgIiAgcGdfZ2V0X2luZGV4ZGVmKGkuaW5kZXhyZWxpZCwgYS5hdHRudW0sIHRydWUp IEFTIFwiJXNcIixcbiIKKwkJCQkJICAiICBvLm9wY25hbWUgQVMgXCIlc1wiLCIKKwkJCQkJICAi ICBDQVNFXG4iCisJCQkJCSAgIiAgICBXSEVOIHBnX2luZGV4X2NvbHVtbl9oYXNfcHJvcGVydHko Yy5yZWxuYW1lOjpyZWdjbGFzcywgYS5hdHRudW0sICdvcmRlcmFibGUnKSA9IHRydWUgXG4iCisJ CQkJCSAgIiAgICBUSEVOIHBnX2luZGV4X2NvbHVtbl9oYXNfcHJvcGVydHkoYy5yZWxuYW1lOjpy ZWdjbGFzcywgYS5hdHRudW0sICdhc2MnKVxuIgorCQkJCQkgICIgICAgRUxTRSBOVUxMIgorCQkJ CQkgICIgIEVORCAgQVMgXCIlc1wiLCIKKwkJCQkJICAiICBDQVNFXG4iCisJCQkJCSAgIiAgICBX SEVOIHBnX2luZGV4X2NvbHVtbl9oYXNfcHJvcGVydHkoYy5yZWxuYW1lOjpyZWdjbGFzcywgYS5h dHRudW0sICdvcmRlcmFibGUnKSA9IHRydWUgXG4iCisJCQkJCSAgIiAgICBUSEVOIHBnX2luZGV4 X2NvbHVtbl9oYXNfcHJvcGVydHkoYy5yZWxuYW1lOjpyZWdjbGFzcywgYS5hdHRudW0sICdudWxs c19maXJzdCcpXG4iCisJCQkJCSAgIiAgICBFTFNFIE5VTEwiCisJCQkJCSAgIiAgRU5EICBBUyBc IiVzXCIsIgorCQkJCQkgICIgIHBnX2luZGV4X2NvbHVtbl9oYXNfcHJvcGVydHkoYy5yZWxuYW1l OjpyZWdjbGFzcywgYS5hdHRudW0sICdvcmRlcmFibGUnKSBBUyBcIiVzXCIsXG4iCisJCQkJCSAg IiAgcGdfaW5kZXhfY29sdW1uX2hhc19wcm9wZXJ0eShjLnJlbG5hbWU6OnJlZ2NsYXNzLCBhLmF0 dG51bSwgJ2Rpc3RhbmNlX29yZGVyYWJsZScpIEFTIFwiJXNcIixcbiIKKwkJCQkJICAiICBwZ19p bmRleF9jb2x1bW5faGFzX3Byb3BlcnR5KGMucmVsbmFtZTo6cmVnY2xhc3MsIGEuYXR0bnVtLCAn cmV0dXJuYWJsZScpIEFTIFwiJXNcIixcbiIKKwkJCQkJICAiICBwZ19pbmRleF9jb2x1bW5faGFz X3Byb3BlcnR5KGMucmVsbmFtZTo6cmVnY2xhc3MsIGEuYXR0bnVtLCAnc2VhcmNoX2FycmF5Jykg QVMgXCIlc1wiLFxuIgorCQkJCQkgICIgIHBnX2luZGV4X2NvbHVtbl9oYXNfcHJvcGVydHkoYy5y ZWxuYW1lOjpyZWdjbGFzcywgYS5hdHRudW0sICdzZWFyY2hfbnVsbHMnKSBBUyBcIiVzXCJcbiIK KwkJCQkJICAiRlJPTSBwZ19jbGFzcyBjXG4iCisJCQkJCSAgIiAgTEVGVCBKT0lOIHBnX2NhdGFs b2cucGdfbmFtZXNwYWNlIG4gT04gbi5vaWQgPSByZWxuYW1lc3BhY2VcbiIKKwkJCQkJICAiICBM RUZUIEpPSU4gcGdfY2F0YWxvZy5wZ19pbmRleCBpIE9OIGkuaW5kZXhyZWxpZCA9IGMub2lkXG4i CisJCQkJCSAgIiAgTEVGVCBKT0lOIHBnX2NhdGFsb2cucGdfY2xhc3MgYzIgT04gaS5pbmRyZWxp ZCA9IGMyLm9pZFxuIgorCQkJCQkgICIgIExFRlQgSk9JTiBwZ19jYXRhbG9nLnBnX2F0dHJpYnV0 ZSBhIE9OIGEuYXR0cmVsaWQgPSBjLm9pZFxuIgorCQkJCQkgICIgIExFRlQgSk9JTiBwZ19jYXRh bG9nLnBnX3R5cGUgdCBPTiB0Lm9pZCA9IGEuYXR0dHlwaWRcbiIKKwkJCQkJICAiICBMRUZUIEpP SU4gaW5mb3JtYXRpb25fc2NoZW1hLmNvbHVtbnMgaWMgT04gaWMudGFibGVfbmFtZSA9IGMyLnJl bG5hbWUgQU5EIGljLm9yZGluYWxfcG9zaXRpb24gPSBpLmluZGtleVthLmF0dG51bSAtIDFdIFxu IgorCQkJCQkgICIgIExFRlQgSk9JTiBwZ19vcGNsYXNzIG8gT04gby5vaWQgPSAoaW5kY2xhc3M6 Om9pZFtdKVthLmF0dG51bSAtIDFdXG4iCisJCQkJCSAgIldIRVJFIGMub2lkID0gJXMiLAorCQkJ CQkgIGdldHRleHRfbm9vcCgiQ29sdW1uIG5hbWUiKSwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIkV4 cHIiKSwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIk9wY2xhc3MiKSwKKwkJCQkJICBnZXR0ZXh0X25v b3AoIkFTQyIpLAorCQkJCQkgIGdldHRleHRfbm9vcCgiTnVsbHMgZmlyc3QiKSwKKwkJCQkJICBn ZXR0ZXh0X25vb3AoIk9yZGVyYWJsZSIpLAorCQkJCQkgIGdldHRleHRfbm9vcCgiRGlzdGFuY2Ug b3JkZXJhYmxlIiksCisJCQkJCSAgZ2V0dGV4dF9ub29wKCJSZXR1cm5hYmxlIiksCisJCQkJCSAg Z2V0dGV4dF9ub29wKCJTZWFyY2ggYXJyYXkiKSwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIlNlYXJj aCBudWxscyIpLAorCQkJCQkgIG9pZCk7CisKKwlpZiAoY29sdW1uX3BhdHRlcm4pCisJCXByb2Nl c3NTUUxOYW1lUGF0dGVybihwc2V0LmRiLCAmYnVmLCBjb2x1bW5fcGF0dGVybiwgdHJ1ZSwgZmFs c2UsCisJCQkJCQkJCU5VTEwsICJpYy5jb2x1bW5fbmFtZSIsIE5VTEwsIE5VTEwpOworCWFwcGVu ZFBRRXhwQnVmZmVyU3RyKCZidWYsICJPUkRFUiBCWSBhLmF0dG51bSIpOworCisJcmVzID0gUFNR TGV4ZWMoYnVmLmRhdGEpOworCXRlcm1QUUV4cEJ1ZmZlcigmYnVmKTsKKwlpZiAoIXJlcykKKwkJ cmV0dXJuIGZhbHNlOworCWlmKFBRbnR1cGxlcyhyZXMpID09IDApCisJeworCQlQUWNsZWFyKHJl cyk7CisJCXJldHVybiB0cnVlOworCX0KKworCW15b3B0Lm51bGxQcmludCA9IE5VTEw7CisJbXlv cHQudGl0bGUgPSBwc3ByaW50ZihfKCJJbmRleCAlcy4lcyIpLCBuc3BuYW1lLCBpZHhuYW1lKTsK Kwlmb290ZXJzWzBdID0gcHNwcmludGYoXygiVGFibGU6ICVzIiksIHRhYm5hbWUpOworCWZvb3Rl cnNbMV0gPSBwc3ByaW50ZihfKCJBY2Nlc3MgbWV0aG9kOiAlcyIpLGFtbmFtZSk7CisJbXlvcHQu Zm9vdGVycyA9IGZvb3RlcnM7CisJbXlvcHQudG9wdC5kZWZhdWx0X2Zvb3RlciA9IGZhbHNlOwor CW15b3B0LnRyYW5zbGF0ZV9oZWFkZXIgPSB0cnVlOworCW15b3B0LnRyYW5zbGF0ZV9jb2x1bW5z ID0gdHJhbnNsYXRlX2NvbHVtbnM7CisJbXlvcHQubl90cmFuc2xhdGVfY29sdW1ucyA9IGxlbmd0 aG9mKHRyYW5zbGF0ZV9jb2x1bW5zKTsKKworCXByaW50UXVlcnkocmVzLCAmbXlvcHQsIHBzZXQu cXVlcnlGb3V0LCBmYWxzZSwgcHNldC5sb2dmaWxlKTsKKwlQUWNsZWFyKHJlcyk7CisJcmV0dXJu IHRydWU7Cit9CisKKy8qCisgKiBcZEFvYworICogTGlzdCBpbmRleCBhY2Nlc3MgbWV0aG9kIG9w ZXJhdG9yIGNsYXNzZXMuCisgKiBUYWtlcyBhbiBvcHRpb25hbCByZWdleHAgdG8gc2VsZWN0IHBh cnRpY3VsYXIgYWNjZXNzIG1ldGhvZCBhbmQgb3BlcmF0b3IgY2xhc3MuCisgKi8KK2Jvb2wKK2Rl c2NyaWJlQWNjZXNzTWV0aG9kT3BlcmF0b3JDbGFzc2VzKGNvbnN0IGNoYXIgKmFjY2Vzc19tZXRo b2RfcGF0dGVybiwgY29uc3QgY2hhciAqb3BjbGFzc19wYXR0ZXJuLCBib29sIHZlcmJvc2UpCit7 CisJUFFFeHBCdWZmZXJEYXRhIGJ1ZjsKKwlQR3Jlc3VsdAkgICAqcmVzOworCXByaW50UXVlcnlP cHQJbXlvcHQgPSBwc2V0LnBvcHQ7CisJYm9vbAkJCWhhdmVfd2hlcmUgPSBmYWxzZTsKKwlzdGF0 aWMgY29uc3QgYm9vbCB0cmFuc2xhdGVfY29sdW1uc1tdID0ge2ZhbHNlLCBmYWxzZSwgZmFsc2Us IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZX07CisKKwlpbml0UFFFeHBCdWZmZXIo JmJ1Zik7CisKKwlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkgICJTRUxFQ1QiCisJCQkJ CSAgIiAgYW0uYW1uYW1lIEFTIFwiJXNcIixcbiIKKwkJCQkJICAiICBuLm5zcG5hbWUgQVMgXCIl c1wiLFxuIgorCQkJCQkgICIgIGMub3BjbmFtZSBBUyBcIiVzXCIsXG4iLAorCQkJCQkgIGdldHRl eHRfbm9vcCgiQWNjZXNzIG1ldGhvZCIpLAorCQkJCQkgIGdldHRleHRfbm9vcCgiU2NoZW1hIiks CisJCQkJCSAgZ2V0dGV4dF9ub29wKCJOYW1lIikpOworCWlmICh2ZXJib3NlKQorCQlhcHBlbmRQ UUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkgICIgIHBnX2NhdGFsb2cucGdfZ2V0X3VzZXJieWlkKGMu b3Bjb3duZXIpIEFTIFwiJXNcIixcbiIsCisJCQkJCSAgZ2V0dGV4dF9ub29wKCJPd25lciIpKTsK KwlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkgICIgIG9mLm9wZm5hbWUgQVMgXCIlc1wi LFxuIgorCQkJCQkgICIgIGMub3BjaW50eXBlOjpyZWd0eXBlIEFTIFwiJXNcIixcbiIKKwkJCQkJ ICAiICBjLm9wY2RlZmF1bHQgQVMgXCIlc1wiLFxuIgorCQkJCQkgICIgIChDQVNFIFdIRU4gYy5v cGNrZXl0eXBlID0gMCBPUiBjLm9wY2tleXR5cGUgPSBjLm9wY2ludHlwZVxuIgorCQkJCQkgICIg ICAgVEhFTiBOVUxMXG4iCisJCQkJCSAgIiAgICBFTFNFIGMub3Bja2V5dHlwZVxuIgorCQkJCQkg ICIgIEVORCk6OnJlZ3R5cGU6OnJlZ3R5cGUgQVMgXCIlc1wiXG4iCisJCQkJCSAgIkZST00gcGdf b3BjbGFzcyBjXG4iCisJCQkJCSAgIiAgTEVGVCBKT0lOIHBnX2FtIGFtIG9uIGFtLm9pZCA9IGMu b3BjbWV0aG9kXG4iCisJCQkJCSAgIiAgTEVGVCBKT0lOIHBnX25hbWVzcGFjZSBuIE9OIG4ub2lk ID0gYy5vcGNuYW1lc3BhY2VcbiIKKwkJCQkJICAiICBMRUZUIEpPSU4gcGdfb3BmYW1pbHkgb2Yg T04gb2Yub2lkID0gYy5vcGNmYW1pbHlcbiIsCisJCQkJCSAgZ2V0dGV4dF9ub29wKCJGYW1pbHki KSwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIkluZGV4ZWQgdHlwZSIpLAorCQkJCQkgIGdldHRleHRf bm9vcCgiSXMgZGVmYXVsdCIpLAorCQkJCQkgIGdldHRleHRfbm9vcCgiU3RvcmVkIHR5cGUiKSk7 CisKKwlpZiAoYWNjZXNzX21ldGhvZF9wYXR0ZXJuKQorCQloYXZlX3doZXJlID0gcHJvY2Vzc1NR TE5hbWVQYXR0ZXJuKHBzZXQuZGIsICZidWYsIGFjY2Vzc19tZXRob2RfcGF0dGVybiwKKwkJCQkJ CQkJCWZhbHNlLCBmYWxzZSwgTlVMTCwgImFtLmFtbmFtZSIsIE5VTEwsIE5VTEwpOworCWlmIChv cGNsYXNzX3BhdHRlcm4pCisJCXByb2Nlc3NTUUxOYW1lUGF0dGVybihwc2V0LmRiLCAmYnVmLCBv cGNsYXNzX3BhdHRlcm4sIGhhdmVfd2hlcmUsIGZhbHNlLAorCQkJCQkJCSAgIm4ubnNwbmFtZSIs ICJjLm9wY25hbWUiLCBOVUxMLAorCQkJCQkJCSAgTlVMTCk7CisKKwlhcHBlbmRQUUV4cEJ1ZmZl clN0cigmYnVmLCAiT1JERVIgQlkgMSwyLDM7Iik7CisJcmVzID0gUFNRTGV4ZWMoYnVmLmRhdGEp OworCXRlcm1QUUV4cEJ1ZmZlcigmYnVmKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIGZhbHNlOwor CisJbXlvcHQubnVsbFByaW50ID0gTlVMTDsKKwlteW9wdC50aXRsZSA9IF8oIkluZGV4IGFjY2Vz cyBtZXRob2Qgb3BlcmF0b3IgY2xhc3NlcyIpOworCW15b3B0LnRyYW5zbGF0ZV9oZWFkZXIgPSB0 cnVlOworCW15b3B0LnRyYW5zbGF0ZV9jb2x1bW5zID0gdHJhbnNsYXRlX2NvbHVtbnM7CisJbXlv cHQubl90cmFuc2xhdGVfY29sdW1ucyA9IGxlbmd0aG9mKHRyYW5zbGF0ZV9jb2x1bW5zKTsKKwor CXByaW50UXVlcnkocmVzLCAmbXlvcHQsIHBzZXQucXVlcnlGb3V0LCBmYWxzZSwgcHNldC5sb2dm aWxlKTsKKworCVBRY2xlYXIocmVzKTsKKwlyZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL3Ny Yy9iaW4vcHNxbC9kZXNjcmliZS5oIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmgKaW5kZXggYTRj YzVlZi4uYjE0NWYyMCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmgKKysrIGIv c3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmgKQEAgLTExMSw0ICsxMTEsMjUgQEAgYm9vbAkJZGVzY3Jp YmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybik7CiAvKiBcZFJzICovCiBib29sCQlk ZXNjcmliZVN1YnNjcmlwdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybiwgYm9vbCB2ZXJib3NlKTsK IAorLyogXGRBZiAqLworZXh0ZXJuIGJvb2wgbGlzdEFjY2Vzc01ldGhvZE9wZXJhdG9yRmFtaWxp ZXMoY29uc3QgY2hhciAqYWNjZXNzX21ldGhvZF9wYXR0ZXJuLCBjb25zdCBjaGFyICpmYW1pbHlf cGF0dGVybiwgYm9vbCB2ZXJib3NlKTsKKworLyogXGRBZnAgKi8KK2V4dGVybiBib29sIGxpc3RP cGVyYXRvckZhbWlseVByb2NlZHVyZXMoY29uc3QgY2hhciAqYWNjZXNzX21ldGhvZF9wYXR0ZXJu LCBjb25zdCBjaGFyICpmYW1pbHlfcGF0dGVybik7CisKKy8qIFxkQWZvICovCitleHRlcm4gYm9v bCBsaXN0RmFtaWx5Q2xhc3NPcGVyYXRvcnMoY29uc3QgY2hhciAqYWNjZXNzTWV0aG9kX3BhdHRl cm4sIGNvbnN0IGNoYXIgKmZhbWlseV9wYXR0ZXJuKTsKKworLyogXGRBcCAqLworZXh0ZXJuIGJv b2wgZGVzY3JpYmVBY2Nlc3NNZXRob2RQcm9wZXJ0aWVzKGNvbnN0IGNoYXIgKnBhdHRlcm4pOwor CisvKiBcZGlwICovCitleHRlcm4gYm9vbCBkZXNjcmliZUluZGV4UHJvcGVydGllcyhjb25zdCBj aGFyICpwYXR0ZXJuLCBib29sIHNob3dTeXN0ZW0pOworCisvKiBcZGljcCAqLworZXh0ZXJuIGJv b2wgZGVzY3JpYmVJbmRleENvbHVtblByb3BlcnRpZXMoY29uc3QgY2hhciAqaW5kZXhQYXR0ZXJu LCBjb25zdCBjaGFyICpjb2x1bW5QYXR0ZXJuLCBib29sIHNob3dTeXN0ZW0pOworCisvKiBcZEFv YyAqLworZXh0ZXJuIGJvb2wgZGVzY3JpYmVBY2Nlc3NNZXRob2RPcGVyYXRvckNsYXNzZXMoY29u c3QgY2hhciAqYWNjZXNzX21ldGhvZF9wYXR0ZXJuLCBjb25zdCBjaGFyICpvcGNsYXNzX3BhdHRl cm4sIGJvb2wgdmVyYm9zZSk7CisKICNlbmRpZgkJCQkJCQkvKiBERVNDUklCRV9IICovCmRpZmYg LS1naXQgYS9zcmMvYmluL3BzcWwvaGVscC5jIGIvc3JjL2Jpbi9wc3FsL2hlbHAuYwppbmRleCA3 MDJlNzQyLi5kYmU2MmU4IDEwMDY0NAotLS0gYS9zcmMvYmluL3BzcWwvaGVscC5jCisrKyBiL3Ny Yy9iaW4vcHNxbC9oZWxwLmMKQEAgLTIyNCw2ICsyMjQsMTEgQEAgc2xhc2hVc2FnZSh1bnNpZ25l ZCBzaG9ydCBpbnQgcGFnZXIpCiAJZnByaW50ZihvdXRwdXQsIF8oIiAgXFxkW1MrXSAgTkFNRSAg ICAgICAgICAgZGVzY3JpYmUgdGFibGUsIHZpZXcsIHNlcXVlbmNlLCBvciBpbmRleFxuIikpOwog CWZwcmludGYob3V0cHV0LCBfKCIgIFxcZGFbU10gIFtQQVRURVJOXSAgICAgIGxpc3QgYWdncmVn YXRlc1xuIikpOwogCWZwcmludGYob3V0cHV0LCBfKCIgIFxcZEFbK10gIFtQQVRURVJOXSAgICAg IGxpc3QgYWNjZXNzIG1ldGhvZHNcbiIpKTsKKwlmcHJpbnRmKG91dHB1dCwgXygiICBcXGRBZlsr XSBbQU1QVFJOIFtPUEZQVFJOXV0gbGlzdCBvcGVyYXRvciBmYW1pbGllcyBvZiBhY2Nlc3MgbWV0 aG9kXG4iKSk7CisJZnByaW50ZihvdXRwdXQsIF8oIiAgXFxkQWZwICAgW0FNUFRSTiBbT1BGUFRS Tl1dIGxpc3QgcHJvY2VkdXJlcyBvZiBvcGVyYXRvciBmYW1pbHkgcmVsYXRlZCB0byBhY2Nlc3Mg bWV0aG9kXG4iKSk7CisJZnByaW50ZihvdXRwdXQsIF8oIiAgXFxkQWZvICAgW0FNUFRSTiBbT1BG UFRSTl1dIGxpc3Qgb3BlcmF0b3JzIG9mIGZhbWlseSByZWxhdGVkIHRvIGFjY2VzcyBtZXRob2Rc biIpKTsKKwlmcHJpbnRmKG91dHB1dCwgXygiICBcXGRBb2NbK11bQU1QVFJOIFtPUENQVFJOXV0g bGlzdCBvcGVyYXRvciBjbGFzc2VzIG9mIGluZGV4IGFjY2VzcyBtZXRob2RzXG4iKSk7CisJZnBy aW50ZihvdXRwdXQsIF8oIiAgXFxkQXAgICAgW1BBVFRFUk5dICAgICAgbGlzdCBhY2Nlc3MgbWV0 aG9kcyB3aXRoIHByb3BlcnRpZXNcbiIpKTsKIAlmcHJpbnRmKG91dHB1dCwgXygiICBcXGRiWytd ICBbUEFUVEVSTl0gICAgICBsaXN0IHRhYmxlc3BhY2VzXG4iKSk7CiAJZnByaW50ZihvdXRwdXQs IF8oIiAgXFxkY1tTK10gW1BBVFRFUk5dICAgICAgbGlzdCBjb252ZXJzaW9uc1xuIikpOwogCWZw cmludGYob3V0cHV0LCBfKCIgIFxcZENbK10gIFtQQVRURVJOXSAgICAgIGxpc3QgY2FzdHNcbiIp KTsKQEAgLTI0Miw2ICsyNDcsOCBAQCBzbGFzaFVzYWdlKHVuc2lnbmVkIHNob3J0IGludCBwYWdl cikKIAlmcHJpbnRmKG91dHB1dCwgXygiICBcXGRGdFsrXSBbUEFUVEVSTl0gICAgICBsaXN0IHRl eHQgc2VhcmNoIHRlbXBsYXRlc1xuIikpOwogCWZwcmludGYob3V0cHV0LCBfKCIgIFxcZGdbUytd IFtQQVRURVJOXSAgICAgIGxpc3Qgcm9sZXNcbiIpKTsKIAlmcHJpbnRmKG91dHB1dCwgXygiICBc XGRpW1MrXSBbUEFUVEVSTl0gICAgICBsaXN0IGluZGV4ZXNcbiIpKTsKKwlmcHJpbnRmKG91dHB1 dCwgXygiICBcXGRpcFtTXSBbUEFUVEVSTl0gICAgICBsaXN0IGluZGV4ZXMgd2l0aCBwcm9wZXJ0 aWVzXG4iKSk7CisJZnByaW50ZihvdXRwdXQsIF8oIiAgXFxkaWNwW1NdIFtJRFhOQU1FIFtDT0xO QU1FXV0gc2hvdyBpbmRleCBjb2x1bW4gcHJvcGVydGllc1xuIikpOwogCWZwcmludGYob3V0cHV0 LCBfKCIgIFxcZGwgICAgICAgICAgICAgICAgICAgIGxpc3QgbGFyZ2Ugb2JqZWN0cywgc2FtZSBh cyBcXGxvX2xpc3RcbiIpKTsKIAlmcHJpbnRmKG91dHB1dCwgXygiICBcXGRMW1MrXSBbUEFUVEVS Tl0gICAgICBsaXN0IHByb2NlZHVyYWwgbGFuZ3VhZ2VzXG4iKSk7CiAJZnByaW50ZihvdXRwdXQs IF8oIiAgXFxkbVtTK10gW1BBVFRFUk5dICAgICAgbGlzdCBtYXRlcmlhbGl6ZWQgdmlld3NcbiIp KTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuYyBiL3NyYy9iaW4vcHNx bC90YWItY29tcGxldGUuYwppbmRleCBiYjY5NmY4Li45ZDMyZDY5IDEwMDY0NAotLS0gYS9zcmMv YmluL3BzcWwvdGFiLWNvbXBsZXRlLmMKKysrIGIvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5j CkBAIC02MzgsNiArNjM4LDIzIEBAIHN0YXRpYyBjb25zdCBTY2hlbWFRdWVyeSBRdWVyeV9mb3Jf bGlzdF9vZl9jb25zdHJhaW50c193aXRoX3NjaGVtYSA9IHsKIAlOVUxMCiB9OwogCitzdGF0aWMg Y29uc3QgU2NoZW1hUXVlcnkgUXVlcnlfZm9yX2xpc3Rfb2Zfb3BlcmF0b3JfZmFtaWxpZXMgPSB7 CisJLyogbWluX3NlcnZlcl92ZXJzaW9uICovCisJMCwKKwkvKiBjYXRuYW1lICovCisJInBnX2Nh dGFsb2cucGdfb3BmYW1pbHkgYyIsCisJLyogc2VsY29uZGl0aW9uICovCisJTlVMTCwKKwkvKiB2 aXNjb25kaXRpb24gKi8KKwkidHJ1ZSIsCisJLyogbmFtZXNwYWNlICovCisJImMub3BmbmFtZXNw YWNlIiwKKwkvKiByZXN1bHQgKi8KKwkicGdfY2F0YWxvZy5xdW90ZV9pZGVudChjLm9wZm5hbWUp IiwKKwkvKiBxdWFscmVzdWx0ICovCisJTlVMTAorfTsKKwogLyogUmVsYXRpb25zIHN1cHBvcnRp bmcgSU5TRVJULCBVUERBVEUgb3IgREVMRVRFICovCiBzdGF0aWMgY29uc3QgU2NoZW1hUXVlcnkg UXVlcnlfZm9yX2xpc3Rfb2ZfdXBkYXRhYmxlcyA9IHsKIAkvKiBtaW5fc2VydmVyX3ZlcnNpb24g Ki8KQEAgLTE2MTgsNyArMTYzNSw3IEBAIHBzcWxfY29tcGxldGlvbihjb25zdCBjaGFyICp0ZXh0 LCBpbnQgc3RhcnQsIGludCBlbmQpCiAJCSJcXGEiLAogCQkiXFxjb25uZWN0IiwgIlxcY29ubmlu Zm8iLCAiXFxDIiwgIlxcY2QiLCAiXFxjb3B5IiwKIAkJIlxcY29weXJpZ2h0IiwgIlxcY3Jvc3N0 YWJ2aWV3IiwKLQkJIlxcZCIsICJcXGRhIiwgIlxcZEEiLCAiXFxkYiIsICJcXGRjIiwgIlxcZEMi LCAiXFxkZCIsICJcXGRkcCIsICJcXGREIiwKKwkJIlxcZCIsICJcXGRhIiwgIlxcZEEiLCAiXFxk QXAiLCAiXFxkQWZvIiwgIlxcZEFmcCIsICJcXGRBZiIsICJcXGRBb2MiLCAiXFxkaWNwIiwgIlxc ZGlwIiwgIlxcZGIiLCAiXFxkYyIsICJcXGRDIiwgIlxcZGQiLCAiXFxkZHAiLCAiXFxkRCIsCiAJ CSJcXGRlcyIsICJcXGRldCIsICJcXGRldSIsICJcXGRldyIsICJcXGRFIiwgIlxcZGYiLAogCQki XFxkRiIsICJcXGRGZCIsICJcXGRGcCIsICJcXGRGdCIsICJcXGRnIiwgIlxcZGkiLCAiXFxkbCIs ICJcXGRMIiwKIAkJIlxcZG0iLCAiXFxkbiIsICJcXGRvIiwgIlxcZE8iLCAiXFxkcCIsCkBAIC0z NjM1LDYgKzM2NTIsMTAgQEAgcHNxbF9jb21wbGV0aW9uKGNvbnN0IGNoYXIgKnRleHQsIGludCBz dGFydCwgaW50IGVuZCkKIAl9CiAJZWxzZSBpZiAoVGFpbE1hdGNoZXNDUzEoIlxcZGEqIikpCiAJ CUNPTVBMRVRFX1dJVEhfVkVSU0lPTkVEX1NDSEVNQV9RVUVSWShRdWVyeV9mb3JfbGlzdF9vZl9h Z2dyZWdhdGVzLCBOVUxMKTsKKwllbHNlIGlmIChUYWlsTWF0Y2hlc0NTMSgiXFxkQWYqIikpCisJ CUNPTVBMRVRFX1dJVEhfUVVFUlkoUXVlcnlfZm9yX2xpc3Rfb2ZfYWNjZXNzX21ldGhvZHMpOwor CWVsc2UgaWYgKFRhaWxNYXRjaGVzQ1MyKCJcXGRBZioiLCBNYXRjaEFueSkpCisJCUNPTVBMRVRF X1dJVEhfU0NIRU1BX1FVRVJZKFF1ZXJ5X2Zvcl9saXN0X29mX29wZXJhdG9yX2ZhbWlsaWVzLCBO VUxMKTsKIAllbHNlIGlmIChUYWlsTWF0Y2hlc0NTMSgiXFxkQSoiKSkKIAkJQ09NUExFVEVfV0lU SF9RVUVSWShRdWVyeV9mb3JfbGlzdF9vZl9hY2Nlc3NfbWV0aG9kcyk7CiAJZWxzZSBpZiAoVGFp bE1hdGNoZXNDUzEoIlxcZGIqIikpCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL2luZGV4aW5nLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5kZXhpbmcub3V0 CmluZGV4IGI5Mjk3YzkuLjc0ODhmNGUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvaW5kZXhpbmcub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5kZXhp bmcub3V0CkBAIC0xMzQ5LDMgKzEzNDksMjggQEAgaW5zZXJ0IGludG8gY292aWR4cGFydCB2YWx1 ZXMgKDQsIDEpOwogaW5zZXJ0IGludG8gY292aWR4cGFydCB2YWx1ZXMgKDQsIDEpOwogRVJST1I6 ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSBjb25zdHJhaW50ICJjb3ZpZHhw YXJ0NF9hX2JfaWR4IgogREVUQUlMOiAgS2V5IChhKT0oNCkgYWxyZWFkeSBleGlzdHMuCistLSBU ZXN0IHBzcWwgY29tbWFuZCBmb3IgZGlzcGxheWluZyBpbmZvcm1hdGlvbiBhYm91dCBpbmRleGVz LgorXGRpcCBicmluaWR4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5k ZXggcHJvcGVydGllcworIFNjaGVtYSB8ICBOYW1lICAgfCBBY2Nlc3MgbWV0aG9kIHwgQ2x1c3Rl cmFibGUgfCBJbmRleCBzY2FuIHwgQml0bWFwIHNjYW4gfCBCYWNrd2FyZCBzY2FuIAorLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLQorIHB1YmxpYyB8IGJyaW5pZHggfCBicmluICAg ICAgICAgIHwgZiAgICAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICAgICAgfCBmCisoMSBy b3cpCisKK1xkaWNwIGJvdGhhcnJheWlkeCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEluZGV4IHB1YmxpYy5ib3RoYXJyYXlpZHgKKyBDb2x1bW4g bmFtZSB8IEV4cHIgfCAgT3BjbGFzcyAgfCBBU0MgfCBOdWxscyBmaXJzdCB8IE9yZGVyYWJsZSB8 IERpc3RhbmNlIG9yZGVyYWJsZSB8IFJldHVybmFibGUgfCBTZWFyY2ggYXJyYXkgfCBTZWFyY2gg bnVsbHMgCistLS0tLS0tLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLQorIGkgICAgICAgICAgIHwgaSAgICB8IGFycmF5X29wcyB8 ICAgICB8ICAgICAgICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgICAgICAgICAgIHwgZiAg ICAgICAgICB8IGYgICAgICAgICAgICB8IGYKKyB0ICAgICAgICAgICB8IHQgICAgfCBhcnJheV9v cHMgfCAgICAgfCAgICAgICAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgICAgICAgICAgICB8 IGYgICAgICAgICAgfCBmICAgICAgICAgICAgfCBmCitUYWJsZTogYXJyYXlfaW5kZXhfb3BfdGVz dAorQWNjZXNzIG1ldGhvZDogZ2luCisKK1xkaWNwIGJvdGhhcnJheWlkeCB0CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBwdWJsaWMuYm90 aGFycmF5aWR4CisgQ29sdW1uIG5hbWUgfCBFeHByIHwgIE9wY2xhc3MgIHwgQVNDIHwgTnVsbHMg Zmlyc3QgfCBPcmRlcmFibGUgfCBEaXN0YW5jZSBvcmRlcmFibGUgfCBSZXR1cm5hYmxlIHwgU2Vh cmNoIGFycmF5IHwgU2VhcmNoIG51bGxzIAorLS0tLS0tLS0tLS0tLSstLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgICB8 IHQgICAgfCBhcnJheV9vcHMgfCAgICAgfCAgICAgICAgICAgICB8IGYgICAgICAgICB8IGYgICAg ICAgICAgICAgICAgICB8IGYgICAgICAgICAgfCBmICAgICAgICAgICAgfCBmCitUYWJsZTogYXJy YXlfaW5kZXhfb3BfdGVzdAorQWNjZXNzIG1ldGhvZDogZ2luCisKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3BzcWwub3V0CmluZGV4IDM4MThjZmUuLjc4YzcyZGEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9w c3FsLm91dApAQCAtMzI0MywzICszMjQzLDE1OCBAQCBsYXN0IGVycm9yIG1lc3NhZ2U6IGRpdmlz aW9uIGJ5IHplcm8KIFxlY2hvICdsYXN0IGVycm9yIGNvZGU6JyA6TEFTVF9FUlJPUl9TUUxTVEFU RQogbGFzdCBlcnJvciBjb2RlOiAyMjAxMgogXHVuc2V0IEZFVENIX0NPVU5UCistLSBjaGVjayBw cmludGluZyBpbmZvIGFib3V0IGFjY2VzcyBtZXRob2RzCitcZEEKK0xpc3Qgb2YgYWNjZXNzIG1l dGhvZHMKKyAgTmFtZSAgfCBUeXBlICAKKy0tLS0tLS0tKy0tLS0tLS0KKyBicmluICAgfCBJbmRl eAorIGJ0cmVlICB8IEluZGV4CisgZ2luICAgIHwgSW5kZXgKKyBnaXN0ICAgfCBJbmRleAorIGhh c2ggICB8IEluZGV4Cisgc3BnaXN0IHwgSW5kZXgKKyg2IHJvd3MpCisKK1xkQSBnaW4KK0xpc3Qg b2YgYWNjZXNzIG1ldGhvZHMKKyBOYW1lIHwgVHlwZSAgCistLS0tLS0rLS0tLS0tLQorIGdpbiAg fCBJbmRleAorKDEgcm93KQorCitcZEEgZm9vCitMaXN0IG9mIGFjY2VzcyBtZXRob2RzCisgTmFt ZSB8IFR5cGUgCistLS0tLS0rLS0tLS0tCisoMCByb3dzKQorCitcZEFwIGdpbgorICAgICAgICAg ICAgICAgICAgICBBY2Nlc3MgbWV0aG9kIHByb3BlcnRpZXMKKyBBTSBOYW1lIHwgQ2FuIG9yZGVy IHwgQ2FuIHVuaXF1ZSB8IENhbiBtdWx0aSBjb2wgfCBDYW4gZXhjbHVkZSAKKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0KKyBn aW4gICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgICAgICAgfCBmCisoMSBy b3cpCisKK1xkQXAgZm9vCisgICAgICAgICAgICAgICAgICAgIEFjY2VzcyBtZXRob2QgcHJvcGVy dGllcworIEFNIE5hbWUgfCBDYW4gb3JkZXIgfCBDYW4gdW5pcXVlIHwgQ2FuIG11bHRpIGNvbCB8 IENhbiBleGNsdWRlIAorLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLQorKDAgcm93cykKKworXGRBZiBnaW4KKyAgICAgICAgICAg ICAgICAgICBMaXN0IG9mIG9wZXJhdG9yIGZhbWlsaWVzCisgQWNjZXNzIG1ldGhvZCB8IE9wZXJh dG9yIGZhbWlseSBzY2hlbWEgfCBPcGVyYXRvciBmYW1pbHkgbmFtZSAKKy0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGdpbiAg ICAgICAgICAgfCBwZ19jYXRhbG9nICAgICAgICAgICAgIHwgYXJyYXlfb3BzCisgZ2luICAgICAg ICAgICB8IHBnX2NhdGFsb2cgICAgICAgICAgICAgfCB0c3ZlY3Rvcl9vcHMKKyBnaW4gICAgICAg ICAgIHwgcGdfY2F0YWxvZyAgICAgICAgICAgICB8IGpzb25iX29wcworIGdpbiAgICAgICAgICAg fCBwZ19jYXRhbG9nICAgICAgICAgICAgIHwganNvbmJfcGF0aF9vcHMKKyg0IHJvd3MpCisKK1xk QWYgZm9vCisgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBvcGVyYXRvciBmYW1pbGllcworIEFj Y2VzcyBtZXRob2QgfCBPcGVyYXRvciBmYW1pbHkgc2NoZW1hIHwgT3BlcmF0b3IgZmFtaWx5IG5h bWUgCistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKygwIHJvd3MpCisKK1xkQWZvIGJyaW4gdXVpZF9taW5tYXhfb3BzCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb3BlcmF0b3JzIG9mIGZhbWlseSByZWxh dGVkIHRvIGFjY2VzcyBtZXRob2QKKyAgQU0gIHwgT3BmYW1pbHkgU2NoZW1hIHwgIE9wZmFtaWx5 IE5hbWUgIHwgTGVmdCB0eXBlIHwgUmlnaHQgdHlwZSB8IFN0cmF0ZWd5IHwgT3BlcmF0b3IgfCBQ dXJwb3NlIHwgU29ydCBmYW1pbHkgCistLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0tLQorIGJyaW4gfCBwZ19jYXRhbG9nICAgICAgfCB1dWlkX21p bm1heF9vcHMgfCB1dWlkICAgICAgfCB1dWlkICAgICAgIHwgICAgICAgIDEgfCA8ICAgICAgICB8 IHNlYXJjaCAgfCAKKyBicmluIHwgcGdfY2F0YWxvZyAgICAgIHwgdXVpZF9taW5tYXhfb3BzIHwg dXVpZCAgICAgIHwgdXVpZCAgICAgICB8ICAgICAgICAyIHwgPD0gICAgICAgfCBzZWFyY2ggIHwg CisgYnJpbiB8IHBnX2NhdGFsb2cgICAgICB8IHV1aWRfbWlubWF4X29wcyB8IHV1aWQgICAgICB8 IHV1aWQgICAgICAgfCAgICAgICAgMyB8ID0gICAgICAgIHwgc2VhcmNoICB8IAorIGJyaW4gfCBw Z19jYXRhbG9nICAgICAgfCB1dWlkX21pbm1heF9vcHMgfCB1dWlkICAgICAgfCB1dWlkICAgICAg IHwgICAgICAgIDQgfCA+PSAgICAgICB8IHNlYXJjaCAgfCAKKyBicmluIHwgcGdfY2F0YWxvZyAg ICAgIHwgdXVpZF9taW5tYXhfb3BzIHwgdXVpZCAgICAgIHwgdXVpZCAgICAgICB8ICAgICAgICA1 IHwgPiAgICAgICAgfCBzZWFyY2ggIHwgCisoNSByb3dzKQorCitcZEFmbyBicmluIGJhcgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvcGVyYXRvcnMgb2YgZmFtaWx5IHJlbGF0 ZWQgdG8gYWNjZXNzIG1ldGhvZAorIEFNIHwgT3BmYW1pbHkgU2NoZW1hIHwgT3BmYW1pbHkgTmFt ZSB8IExlZnQgdHlwZSB8IFJpZ2h0IHR5cGUgfCBTdHJhdGVneSB8IE9wZXJhdG9yIHwgUHVycG9z ZSB8IFNvcnQgZmFtaWx5IAorLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0tLQorKDAgcm93cykKKworXGRBZm8gZm9vIGJhcgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTGlzdCBvcGVyYXRvcnMgb2YgZmFtaWx5IHJlbGF0ZWQgdG8gYWNjZXNz IG1ldGhvZAorIEFNIHwgT3BmYW1pbHkgU2NoZW1hIHwgT3BmYW1pbHkgTmFtZSB8IExlZnQgdHlw ZSB8IFJpZ2h0IHR5cGUgfCBTdHJhdGVneSB8IE9wZXJhdG9yIHwgUHVycG9zZSB8IFNvcnQgZmFt aWx5IAorLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0t LQorKDAgcm93cykKKworXGRBZm8gKiBwZ19jYXRhbG9nLmpzb25iX3BhdGhfb3BzCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvcGVyYXRvcnMgb2YgZmFtaWx5IHJlbGF0ZWQg dG8gYWNjZXNzIG1ldGhvZAorIEFNICB8IE9wZmFtaWx5IFNjaGVtYSB8IE9wZmFtaWx5IE5hbWUg IHwgTGVmdCB0eXBlIHwgUmlnaHQgdHlwZSB8IFN0cmF0ZWd5IHwgT3BlcmF0b3IgfCBQdXJwb3Nl IHwgU29ydCBmYW1pbHkgCistLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0KKyBnaW4gfCBwZ19jYXRhbG9nICAgICAgfCBqc29uYl9wYXRoX29wcyB8 IGpzb25iICAgICB8IGpzb25iICAgICAgfCAgICAgICAgNyB8IEA+ICAgICAgIHwgc2VhcmNoICB8 IAorKDEgcm93KQorCitcZEFmcCBicmluIHV1aWRfbWlubWF4X29wcworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIG9wZXJhdG9yIGZhbWlseSBw cm9jZWR1cmVzCisgIEFNICB8IEZhbWlseSBzY2hlbWEgfCAgIEZhbWlseSBuYW1lICAgfCBMZWZ0 IHwgUmlnaHQgfCBOdW1iZXIgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgbmFtZSAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0rLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBicmluIHwgcGdfY2F0 YWxvZyAgICB8IHV1aWRfbWlubWF4X29wcyB8IHV1aWQgfCB1dWlkICB8ICAgICAgMSB8IGJyaW5f bWlubWF4X29wY2luZm8oaW50ZXJuYWwpCisgYnJpbiB8IHBnX2NhdGFsb2cgICAgfCB1dWlkX21p bm1heF9vcHMgfCB1dWlkIHwgdXVpZCAgfCAgICAgIDIgfCBicmluX21pbm1heF9hZGRfdmFsdWUo aW50ZXJuYWwsIGludGVybmFsLCBpbnRlcm5hbCwgaW50ZXJuYWwpCisgYnJpbiB8IHBnX2NhdGFs b2cgICAgfCB1dWlkX21pbm1heF9vcHMgfCB1dWlkIHwgdXVpZCAgfCAgICAgIDMgfCBicmluX21p bm1heF9jb25zaXN0ZW50KGludGVybmFsLCBpbnRlcm5hbCwgaW50ZXJuYWwpCisgYnJpbiB8IHBn X2NhdGFsb2cgICAgfCB1dWlkX21pbm1heF9vcHMgfCB1dWlkIHwgdXVpZCAgfCAgICAgIDQgfCBi cmluX21pbm1heF91bmlvbihpbnRlcm5hbCwgaW50ZXJuYWwsIGludGVybmFsKQorKDQgcm93cykK KworXGRBZnAgYnJpbiBiYXIKKyAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygb3BlcmF0b3IgZmFt aWx5IHByb2NlZHVyZXMKKyBBTSB8IEZhbWlseSBzY2hlbWEgfCBGYW1pbHkgbmFtZSB8IExlZnQg fCBSaWdodCB8IE51bWJlciB8IFByb2MgbmFtZSAKKy0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0rLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0KKygwIHJvd3MpCisK K1xkQWZwIGZvbyBiYXIKKyAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygb3BlcmF0b3IgZmFtaWx5 IHByb2NlZHVyZXMKKyBBTSB8IEZhbWlseSBzY2hlbWEgfCBGYW1pbHkgbmFtZSB8IExlZnQgfCBS aWdodCB8IE51bWJlciB8IFByb2MgbmFtZSAKKy0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0rLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0KKygwIHJvd3MpCisKK1xk QWZwICogcGdfY2F0YWxvZy51dWlkX29wcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExpc3Qgb2Ygb3BlcmF0b3IgZmFtaWx5IHByb2NlZHVyZXMKKyAgQU0gICB8IEZhbWlseSBzY2hl bWEgfCBGYW1pbHkgbmFtZSB8IExlZnQgfCBSaWdodCB8IE51bWJlciB8ICAgICAgICAgICAgUHJv YyBuYW1lICAgICAgICAgICAgIAorLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LSstLS0tLS0rLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgYnRyZWUgfCBwZ19jYXRhbG9nICAgIHwgdXVpZF9vcHMgICAgfCB1dWlkIHwgdXVpZCAg fCAgICAgIDEgfCB1dWlkX2NtcCh1dWlkLCB1dWlkKQorIGJ0cmVlIHwgcGdfY2F0YWxvZyAgICB8 IHV1aWRfb3BzICAgIHwgdXVpZCB8IHV1aWQgIHwgICAgICAyIHwgdXVpZF9zb3J0c3VwcG9ydChp bnRlcm5hbCkKKyBoYXNoICB8IHBnX2NhdGFsb2cgICAgfCB1dWlkX29wcyAgICB8IHV1aWQgfCB1 dWlkICB8ICAgICAgMSB8IHV1aWRfaGFzaCh1dWlkKQorIGhhc2ggIHwgcGdfY2F0YWxvZyAgICB8 IHV1aWRfb3BzICAgIHwgdXVpZCB8IHV1aWQgIHwgICAgICAyIHwgdXVpZF9oYXNoX2V4dGVuZGVk KHV1aWQsIGJpZ2ludCkKKyg0IHJvd3MpCisKK1xkQW9jIGJyaW4gcGcqLm9pZCoKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBhY2Nlc3MgbWV0aG9kIG9wZXJhdG9yIGNs YXNzZXMKKyBBY2Nlc3MgbWV0aG9kIHwgICBTY2hlbWEgICB8ICAgICAgTmFtZSAgICAgIHwgICAg IEZhbWlseSAgICAgfCBJbmRleGVkIHR5cGUgfCBJcyBkZWZhdWx0IHwgU3RvcmVkIHR5cGUgCist LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLQorIGJyaW4gICAg ICAgICAgfCBwZ19jYXRhbG9nIHwgb2lkX21pbm1heF9vcHMgfCBvaWRfbWlubWF4X29wcyB8IG9p ZCAgICAgICAgICB8IHQgICAgICAgICAgfCAKKygxIHJvdykKKworXGRBKworICAgICAgICAgICAg ICAgICAgICAgICAgTGlzdCBvZiBhY2Nlc3MgbWV0aG9kcworICBOYW1lICB8IFR5cGUgIHwgICBI YW5kbGVyICAgfCAgICAgICAgICAgICAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAKKy0tLS0t LS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgYnJpbiAgIHwgSW5kZXggfCBicmluaGFuZGxlciB8IGJsb2NrIHJhbmdlIGlu ZGV4IChCUklOKSBhY2Nlc3MgbWV0aG9kCisgYnRyZWUgIHwgSW5kZXggfCBidGhhbmRsZXIgICB8 IGItdHJlZSBpbmRleCBhY2Nlc3MgbWV0aG9kCisgZ2luICAgIHwgSW5kZXggfCBnaW5oYW5kbGVy ICB8IEdJTiBpbmRleCBhY2Nlc3MgbWV0aG9kCisgZ2lzdCAgIHwgSW5kZXggfCBnaXN0aGFuZGxl ciB8IEdpU1QgaW5kZXggYWNjZXNzIG1ldGhvZAorIGhhc2ggICB8IEluZGV4IHwgaGFzaGhhbmRs ZXIgfCBoYXNoIGluZGV4IGFjY2VzcyBtZXRob2QKKyBzcGdpc3QgfCBJbmRleCB8IHNwZ2hhbmRs ZXIgIHwgU1AtR2lTVCBpbmRleCBhY2Nlc3MgbWV0aG9kCisoNiByb3dzKQorCitcZEErIGdpbgor ICAgICAgICAgICAgICAgTGlzdCBvZiBhY2Nlc3MgbWV0aG9kcworIE5hbWUgfCBUeXBlICB8ICBI YW5kbGVyICAgfCAgICAgICBEZXNjcmlwdGlvbiAgICAgICAKKy0tLS0tLSstLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZ2luICB8IEluZGV4IHwgZ2luaGFu ZGxlciB8IEdJTiBpbmRleCBhY2Nlc3MgbWV0aG9kCisoMSByb3cpCisKK1xkQSsgZm9vCisgICAg ICAgTGlzdCBvZiBhY2Nlc3MgbWV0aG9kcworIE5hbWUgfCBUeXBlIHwgSGFuZGxlciB8IERlc2Ny aXB0aW9uIAorLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLQorKDAgcm93cykK KworXGRBZisgZm9vCisgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygb3BlcmF0b3IgZmFt aWxpZXMKKyBBY2Nlc3MgbWV0aG9kIHwgT3BlcmF0b3IgZmFtaWx5IHNjaGVtYSB8IE9wZXJhdG9y IGZhbWlseSBuYW1lIHwgT3duZXIgCistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLQorKDAgcm93cykKKwpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvaW5kZXhpbmcuc3FsIGIvc3JjL3Rlc3QvcmVncmVz cy9zcWwvaW5kZXhpbmcuc3FsCmluZGV4IDIwOTFhODcuLjRiNWNlNjUgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL2luZGV4aW5nLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9pbmRleGluZy5zcWwKQEAgLTczMCwzICs3MzAsOCBAQCBjcmVhdGUgdW5pcXVlIGluZGV4IG9u IGNvdmlkeHBhcnQ0IChhKTsKIGFsdGVyIHRhYmxlIGNvdmlkeHBhcnQgYXR0YWNoIHBhcnRpdGlv biBjb3ZpZHhwYXJ0NCBmb3IgdmFsdWVzIGluICg0KTsKIGluc2VydCBpbnRvIGNvdmlkeHBhcnQg dmFsdWVzICg0LCAxKTsKIGluc2VydCBpbnRvIGNvdmlkeHBhcnQgdmFsdWVzICg0LCAxKTsKKwor LS0gVGVzdCBwc3FsIGNvbW1hbmQgZm9yIGRpc3BsYXlpbmcgaW5mb3JtYXRpb24gYWJvdXQgaW5k ZXhlcy4KK1xkaXAgYnJpbmlkeAorXGRpY3AgYm90aGFycmF5aWR4IAorXGRpY3AgYm90aGFycmF5 aWR4IHQKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BzcWwuc3FsIGIvc3JjL3Rl c3QvcmVncmVzcy9zcWwvcHNxbC5zcWwKaW5kZXggYjQ1ZGE5Yi4uZWM1YTY3MyAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHNxbC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9z cWwvcHNxbC5zcWwKQEAgLTY4OCwzICs2ODgsMjYgQEAgc2VsZWN0IDEvKDE1LXVuaXF1ZTIpIGZy b20gdGVuazEgb3JkZXIgYnkgdW5pcXVlMiBsaW1pdCAxOTsKIFxlY2hvICdsYXN0IGVycm9yIGNv ZGU6JyA6TEFTVF9FUlJPUl9TUUxTVEFURQogCiBcdW5zZXQgRkVUQ0hfQ09VTlQKKworLS0gY2hl Y2sgcHJpbnRpbmcgaW5mbyBhYm91dCBhY2Nlc3MgbWV0aG9kcworXGRBCitcZEEgZ2luCitcZEEg Zm9vCitcZEFwIGdpbgorXGRBcCBmb28KK1xkQWYgZ2luCitcZEFmIGZvbworXGRBZm8gYnJpbiB1 dWlkX21pbm1heF9vcHMKK1xkQWZvIGJyaW4gYmFyCitcZEFmbyBmb28gYmFyCitcZEFmbyAqIHBn X2NhdGFsb2cuanNvbmJfcGF0aF9vcHMKK1xkQWZwIGJyaW4gdXVpZF9taW5tYXhfb3BzCitcZEFm cCBicmluIGJhcgorXGRBZnAgZm9vIGJhcgorXGRBZnAgKiBwZ19jYXRhbG9nLnV1aWRfb3BzCitc ZEFvYyBicmluIHBnKi5vaWQqCisKK1xkQSsKK1xkQSsgZ2luCitcZEErIGZvbworXGRBZisgZm9v Cg== --=_2ffe4df0fddcffddad3fe115d98e692e--