Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1Ya780-0000KJ-9f for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Mar 2015 18:31:09 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.80) (envelope-from ) id 1Ya77z-0003g0-Ma for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Mar 2015 18:31:07 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1Ya77w-0003fu-7j for pgsql-hackers@postgresql.org; Mon, 23 Mar 2015 18:31:05 +0000 Received: from linode.thelabyrinth.net ([198.58.117.137] helo=mail.thelabyrinth.net) by makus.postgresql.org with esmtps (TLS1.1:DHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.80) (envelope-from ) id 1Ya77o-0007VF-JW for pgsql-hackers@postgresql.org; Mon, 23 Mar 2015 18:31:02 +0000 Received: from theseus.local (unknown [98.204.177.190]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: dsteele) by mail.thelabyrinth.net (Postfix) with ESMTPSA id 8144D12D0A; Mon, 23 Mar 2015 18:30:54 +0000 (UTC) Message-ID: <55105BDD.9090609@pgmasters.net> Date: Mon, 23 Mar 2015 14:30:53 -0400 From: David Steele User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:31.0) Gecko/20100101 Thunderbird/31.5.0 MIME-Version: 1.0 To: Sawada Masahiko CC: Abhijit Menon-Sen , Stephen Frost , =?UTF-8?B?w4FsdmFybyBIZXJyZXJh?= , Fujii Masao , PostgreSQL-development Subject: Re: Auditing extension for PostgreSQL (Take 2) References: <54E005CC.1060605@pgmasters.net> <20150217153402.GQ6717@tamriel.snowman.net> <54EB4E56.7050102@pgmasters.net> <54ECA551.8060306@pgmasters.net> <20150323053146.GA1919@toroid.org> <55104204.80008@pgmasters.net> In-Reply-To: OpenPGP: id=2624538721DAF9D5FDF4952A9FCDF424A2739CF3 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="P2lHxfw33Oba3KoisHqs85AHP7Kndklim" X-Pg-Spam-Score: -1.9 (-) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --P2lHxfw33Oba3KoisHqs85AHP7Kndklim Content-Type: multipart/mixed; boundary="------------040509030108010203040303" This is a multi-part message in MIME format. --------------040509030108010203040303 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 3/23/15 1:39 PM, Sawada Masahiko wrote: > On Tue, Mar 24, 2015 at 1:40 AM, David Steele wro= te: >> >> I have prepared a patch that brings event triggers and deparse back to= >> pg_audit based on the Alvaro's dev/deparse branch at >> git://git.postgresql.org/git/2ndquadrant_bdr.git (commit 0447fc5). I'= ve >> updated the unit tests accordingly. >> >> I've been hesitant to post this patch as it will not work in master >> (though it will compile), but I don't want to hold on to it any longer= >> since the end of the CF is nominally just weeks away. If you want to >> run the patch in master, you'll need to disable the >> pg_audit_ddl_command_end trigger. >=20 > Hi, >=20 > I tied to look into latest patch, but got following error. >=20 > masahiko [pg_audit] $ LANG=3DC make > gcc -Wall -Wmissing-prototypes -Wpointer-arith > -Wdeclaration-after-statement -Wendif-labels > -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing > -fwrapv -g -fpic -I. -I. -I../../src/include -D_GNU_SOURCE -c -o > pg_audit.o pg_audit.c > pg_audit.c: In function 'log_audit_event': > pg_audit.c:456: warning: ISO C90 forbids mixed declarations and code > pg_audit.c: In function 'pg_audit_ddl_command_end': > pg_audit.c:1436: error: 'pg_event_trigger_expand_command' undeclared > (first use in this function) > pg_audit.c:1436: error: (Each undeclared identifier is reported only on= ce > pg_audit.c:1436: error: for each function it appears in.) > make: *** [pg_audit.o] Error 1 >=20 > Am I missing something? >=20 It's my mistake. I indicated that this would compile under master - but that turns out not to be true because of this function. It will only compile cleanly in Alvaro's branch mentioned above. My apologies - this is why I have been hesitant to post this patch before. You are welcome to try with Alvaro's deparse branch or wait until it has been committed to master. I've attached patch v5 only to cleanup the warnings you saw. --=20 - David Steele david@pgmasters.net --------------040509030108010203040303 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="pg_audit-v5.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="pg_audit-v5.patch" ZGlmZiAtLWdpdCBhL2NvbnRyaWIvTWFrZWZpbGUgYi9jb250cmliL01ha2VmaWxlCmluZGV4 IDE5NWQ0NDcuLmQ4ZTc1ZjQgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvTWFrZWZpbGUKKysrIGIv Y29udHJpYi9NYWtlZmlsZQpAQCAtMjksNiArMjksNyBAQCBTVUJESVJTID0gXAogCQlwYWdl aW5zcGVjdAlcCiAJCXBhc3N3b3JkY2hlY2sJXAogCQlwZ19hcmNoaXZlY2xlYW51cCBcCisJ CXBnX2F1ZGl0CVwKIAkJcGdfYnVmZmVyY2FjaGUJXAogCQlwZ19mcmVlc3BhY2VtYXAgXAog CQlwZ19wcmV3YXJtCVwKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfYXVkaXQvTWFrZWZpbGUg Yi9jb250cmliL3BnX2F1ZGl0L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjMyYmM2ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX2F1ZGl0 L01ha2VmaWxlCkBAIC0wLDAgKzEsMjAgQEAKKyMgcGdfYXVkaXQvTWFrZWZpbGUKKworTU9E VUxFID0gcGdfYXVkaXQKK01PRFVMRV9iaWcgPSBwZ19hdWRpdAorT0JKUyA9IHBnX2F1ZGl0 Lm8KKworRVhURU5TSU9OID0gcGdfYXVkaXQKKworREFUQSA9IHBnX2F1ZGl0LS0xLjAuMC5z cWwKKworaWZkZWYgVVNFX1BHWFMKK1BHX0NPTkZJRyA9IHBnX2NvbmZpZworUEdYUyA6PSAk KHNoZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCitpbmNsdWRlICQoUEdYUykKK2Vsc2UKK3N1 YmRpciA9IGNvbnRyaWIvcGdfYXVkaXQKK3RvcF9idWlsZGRpciA9IC4uLy4uCitpbmNsdWRl ICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCitpbmNsdWRlICQodG9wX3Ny Y2RpcikvY29udHJpYi9jb250cmliLWdsb2JhbC5taworZW5kaWYKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvcGdfYXVkaXQvcGdfYXVkaXQtLTEuMC4wLnNxbCBiL2NvbnRyaWIvcGdfYXVkaXQv cGdfYXVkaXQtLTEuMC4wLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li45ZDllZTgzCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19hdWRpdC9wZ19hdWRp dC0tMS4wLjAuc3FsCkBAIC0wLDAgKzEsMjIgQEAKKy8qIHBnX2F1ZGl0L3BnX2F1ZGl0LS0x LjAuMC5zcWwgKi8KKworLS0gY29tcGxhaW4gaWYgc2NyaXB0IGlzIHNvdXJjZWQgaW4gcHNx bCwgcmF0aGVyIHRoYW4gdmlhIENSRUFURSBFWFRFTlNJT04KK1xlY2hvIFVzZSAiQ1JFQVRF IEVYVEVOU0lPTiBwZ19hdWRpdCIgdG8gbG9hZCB0aGlzIGZpbGUuXHF1aXQKKworQ1JFQVRF IEZVTkNUSU9OIHBnX2F1ZGl0X2RkbF9jb21tYW5kX2VuZCgpCisJUkVUVVJOUyBldmVudF90 cmlnZ2VyCisJTEFOR1VBR0UgQworCUFTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfYXVkaXRf ZGRsX2NvbW1hbmRfZW5kJzsKKworQ1JFQVRFIEVWRU5UIFRSSUdHRVIgcGdfYXVkaXRfZGRs X2NvbW1hbmRfZW5kCisJT04gZGRsX2NvbW1hbmRfZW5kCisJRVhFQ1VURSBQUk9DRURVUkUg cGdfYXVkaXRfZGRsX2NvbW1hbmRfZW5kKCk7CisKK0NSRUFURSBGVU5DVElPTiBwZ19hdWRp dF9zcWxfZHJvcCgpCisJUkVUVVJOUyBldmVudF90cmlnZ2VyCisJTEFOR1VBR0UgQworCUFT ICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfYXVkaXRfc3FsX2Ryb3AnOworCitDUkVBVEUgRVZF TlQgVFJJR0dFUiBwZ19hdWRpdF9zcWxfZHJvcAorCU9OIHNxbF9kcm9wCisJRVhFQ1VURSBQ Uk9DRURVUkUgcGdfYXVkaXRfc3FsX2Ryb3AoKTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdf YXVkaXQvcGdfYXVkaXQuYyBiL2NvbnRyaWIvcGdfYXVkaXQvcGdfYXVkaXQuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWM4ZWQyCi0tLSAvZGV2L251bGwKKysr IGIvY29udHJpYi9wZ19hdWRpdC9wZ19hdWRpdC5jCkBAIC0wLDAgKzEsMTcxMiBAQAorLyot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHBnX2F1ZGl0LmMKKyAqCisgKiBBbiBhdWRp dGluZyBleHRlbnNpb24gZm9yIFBvc3RncmVTUUwuIEltcHJvdmVzIG9uIHN0YW5kYXJkIHN0 YXRlbWVudCBsb2dnaW5nCisgKiBieSBhZGRpbmcgbW9yZSBsb2dnaW5nIGNsYXNzZXMsIG9i amVjdCBsZXZlbCBsb2dnaW5nLCBhbmQgcHJvdmlkaW5nCisgKiBmdWxseS1xdWFsaWZpZWQg b2JqZWN0IG5hbWVzIGZvciBhbGwgRE1MIGFuZCBtYW55IERETCBzdGF0ZW1lbnRzIChTZWUK KyAqIHBnX2F1ZGl0LnNnbWwgZm9yIGRldGFpbHMpLgorICoKKyAqIENvcHlyaWdodCAoYykg MjAxNC0yMDE1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAq IElERU5USUZJQ0FUSU9OCisgKgkJICBjb250cmliL3BnX2F1ZGl0L3BnX2F1ZGl0LmMKKyAq LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgor CisjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgorI2luY2x1ZGUgImFjY2Vzcy9z eXNhdHRyLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKKyNpbmNsdWRlICJjYXRhbG9n L2NhdGFsb2cuaCIKKyNpbmNsdWRlICJjYXRhbG9nL29iamVjdGFjY2Vzcy5oIgorI2luY2x1 ZGUgImNhdGFsb2cvcGdfY2xhc3MuaCIKKyNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5o IgorI2luY2x1ZGUgImNvbW1hbmRzL2RiY29tbWFuZHMuaCIKKyNpbmNsdWRlICJjYXRhbG9n L3BnX3Byb2MuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9ldmVudF90cmlnZ2VyLmgiCisjaW5j bHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKKyNpbmNsdWRlICJleGVjdXRvci9zcGkuaCIK KyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJsaWJwcS9hdXRoLmgiCisjaW5j bHVkZSAibm9kZXMvbm9kZXMuaCIKKyNpbmNsdWRlICJ0Y29wL3V0aWxpdHkuaCIKKyNpbmNs dWRlICJ1dGlscy9hY2wuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1 ZGUgInV0aWxzL2d1Yy5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2luY2x1 ZGUgInV0aWxzL21lbXV0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMvcmVsLmgiCisjaW5jbHVk ZSAidXRpbHMvc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKKwor UEdfTU9EVUxFX01BR0lDOworCit2b2lkIF9QR19pbml0KHZvaWQpOworCisvKgorICogRXZl bnQgdHJpZ2dlciBwcm90b3R5cGVzCisgKi8KK0RhdHVtIHBnX2F1ZGl0X2RkbF9jb21tYW5k X2VuZChQR19GVU5DVElPTl9BUkdTKTsKK0RhdHVtIHBnX2F1ZGl0X3NxbF9kcm9wKFBHX0ZV TkNUSU9OX0FSR1MpOworCitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2F1ZGl0X2RkbF9jb21t YW5kX2VuZCk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2F1ZGl0X3NxbF9kcm9wKTsKKwor LyoKKyAqIGF1ZGl0Um9sZSBpcyB0aGUgc3RyaW5nIHZhbHVlIG9mIHRoZSBwZ2F1ZGl0LnJv bGUgR1VDLCB3aGljaCBjb250YWlucyB0aGUKKyAqIHJvbGUgZm9yIGdyYW50LWJhc2VkIGF1 ZGl0aW5nLgorICovCitjaGFyICphdWRpdFJvbGUgPSBOVUxMOworCisvKgorICogYXVkaXRM b2cgaXMgdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGUgcGdhdWRpdC5sb2cgR1VDLCBlLmcuICJy ZWFkLCB3cml0ZSwgZGRsIgorICogKGl0J3Mgbm90IHVzZWQgYnkgdGhlIG1vZHVsZSBidXQg aXMgcmVxdWlyZWQgYnkgRGVmaW5lQ3VzdG9tU3RyaW5nVmFyaWFibGUpLgorICogRWFjaCB0 b2tlbiBjb3JyZXNwb25kcyB0byBhIGZsYWcgaW4gZW51bSBMb2dDbGFzcyBiZWxvdy4gV2Ug Y29udmVydCB0aGUgbGlzdAorICogb2YgdG9rZW5zIGludG8gYSBiaXRtYXAgaW4gYXVkaXRM b2dCaXRtYXAgZm9yIGludGVybmFsIHVzZS4KKyAqLworY2hhciAqYXVkaXRMb2cgPSBOVUxM Oworc3RhdGljIHVpbnQ2NCBhdWRpdExvZ0JpdG1hcCA9IDA7CisKKy8qCisgKiBTdHJpbmcg Y29uc3RhbnRzIGZvciBhdWRpdCB0eXBlcyAtIHVzZWQgd2hlbiBsb2dnaW5nIHRvIGRpc3Rp bmd1aXNoIHNlc3Npb24KKyAqIHZzLiBvYmplY3QgYXVkaXRpbmcuCisgKi8KKyNkZWZpbmUg QVVESVRfVFlQRV9PQkpFQ1QJIk9CSkVDVCIKKyNkZWZpbmUgQVVESVRfVFlQRV9TRVNTSU9O CSJTRVNTSU9OIgorCisvKgorICogU3RyaW5nIGNvbnN0YW50cyBmb3IgbG9nIGNsYXNzZXMg LSB1c2VkIHdoZW4gcHJvY2Vzc2luZyB0b2tlbnMgaW4gdGhlCisgKiBwZ2F1ZGl0LmxvZyBH VUMuCisgKi8KKyNkZWZpbmUgQ0xBU1NfRERMCQkJIkRETCIKKyNkZWZpbmUgQ0xBU1NfRlVO Q1RJT04JCSJGVU5DVElPTiIKKyNkZWZpbmUgQ0xBU1NfTUlTQwkJCSJNSVNDIgorI2RlZmlu ZSBDTEFTU19QQVJBTUVURVIJCSJQQVJBTUVURVIiCisjZGVmaW5lIENMQVNTX1JFQUQJCQki UkVBRCIKKyNkZWZpbmUgQ0xBU1NfV1JJVEUJCQkiV1JJVEUiCisKKyNkZWZpbmUgQ0xBU1Nf QUxMCQkJIkFMTCIKKyNkZWZpbmUgQ0xBU1NfTk9ORQkJCSJOT05FIgorCisvKiBMb2cgY2xh c3MgZW51bSB1c2VkIHRvIHJlcHJlc2VudCBiaXRzIGluIGF1ZGl0TG9nQml0bWFwICovCitl bnVtIExvZ0NsYXNzCit7CisJTE9HX05PTkUgPSAwLAorCisJLyogRERMOiBDUkVBVEUvRFJP UC9BTFRFUiAqLworCUxPR19EREwgPSAoMSA8PCAxKSwKKworCS8qIEZ1bmN0aW9uIGV4ZWN1 dGlvbiAqLworCUxPR19GVU5DVElPTiA9ICgxIDw8IDIpLAorCisJLyogU3RhdGVtZW50cyBu b3QgY292ZXJlZCBieSBhbm90aGVyIGNsYXNzICovCisJTE9HX01JU0MgPSAoMSA8PCAzKSwK KworCS8qIEZ1bmN0aW9uIGV4ZWN1dGlvbiAqLworCUxPR19QQVJBTUVURVIgPSAoMSA8PCA0 KSwKKworCS8qIFNFTEVDVCAqLworCUxPR19SRUFEID0gKDEgPDwgNSksCisKKwkvKiBJTlNF UlQsIFVQREFURSwgREVMRVRFLCBUUlVOQ0FURSAqLworCUxPR19XUklURSA9ICgxIDw8IDYp LAorCisJLyogQWJzb2x1dGVseSBldmVyeXRoaW5nICovCisJTE9HX0FMTCA9IH4odWludDY0 KTAKK307CisKKy8qIFN0cmluZyBjb25zdGFudHMgZm9yIGxvZ2dpbmcgY29tbWFuZHMgKi8K KyNkZWZpbmUgQ09NTUFORF9ERUxFVEUJCSJERUxFVEUiCisjZGVmaW5lIENPTU1BTkRfRVhF Q1VURQkJIkVYRUNVVEUiCisjZGVmaW5lIENPTU1BTkRfSU5TRVJUCQkiSU5TRVJUIgorI2Rl ZmluZSBDT01NQU5EX1VQREFURQkJIlVQREFURSIKKyNkZWZpbmUgQ09NTUFORF9TRUxFQ1QJ CSJTRUxFQ1QiCisKKyNkZWZpbmUgQ09NTUFORF9VTktOT1dOCQkiVU5LTk9XTiIKKworLyog U3RyaW5nIGNvbnN0YW50cyBmb3IgbG9nZ2luZyBvYmplY3QgdHlwZXMgKi8KKyNkZWZpbmUg T0JKRUNUX1RZUEVfQ09NUE9TSVRFX1RZUEUJIkNPTVBPU0lURSBUWVBFIgorI2RlZmluZSBP QkpFQ1RfVFlQRV9GT1JFSUdOX1RBQkxFCSJGT1JFSUdOIFRBQkxFIgorI2RlZmluZSBPQkpF Q1RfVFlQRV9GVU5DVElPTgkJIkZVTkNUSU9OIgorI2RlZmluZSBPQkpFQ1RfVFlQRV9JTkRF WAkJCSJJTkRFWCIKKyNkZWZpbmUgT0JKRUNUX1RZUEVfVEFCTEUJCQkiVEFCTEUiCisjZGVm aW5lIE9CSkVDVF9UWVBFX1RPQVNUVkFMVUUJCSJUT0FTVFZBTFVFIgorI2RlZmluZSBPQkpF Q1RfVFlQRV9NQVRWSUVXCQkJIk1BVEVSSUFMSVpFRCBWSUVXIgorI2RlZmluZSBPQkpFQ1Rf VFlQRV9TRVFVRU5DRQkJIlNFUVVFTkNFIgorI2RlZmluZSBPQkpFQ1RfVFlQRV9WSUVXCQkJ IlZJRVciCisKKyNkZWZpbmUgT0JKRUNUX1RZUEVfVU5LTk9XTgkJCSJVTktOT1dOIgorCisv KgorICogQW4gQXVkaXRFdmVudCByZXByZXNlbnRzIGFuIG9wZXJhdGlvbiB0aGF0IHBvdGVu dGlhbGx5IGFmZmVjdHMgYSBzaW5nbGUKKyAqIG9iamVjdC4gSWYgYSBzdGF0ZW1lbnQgYWZm ZWN0cyBtdWx0aXBsZSBvYmplY3RzIG11bHRpcGxlIEF1ZGl0RXZlbnRzIG11c3QgYmUKKyAq IGNyZWF0ZWQgdG8gcmVwcmVzZW50IGl0LgorICovCit0eXBlZGVmIHN0cnVjdAoreworCWlu dDY0IHN0YXRlbWVudElkOworCWludDY0IHN1YnN0YXRlbWVudElkOworCisJTG9nU3RtdExl dmVsIGxvZ1N0bXRMZXZlbDsKKwlOb2RlVGFnIGNvbW1hbmRUYWc7CisJY29uc3QgY2hhciAq Y29tbWFuZDsKKwljb25zdCBjaGFyICpvYmplY3RUeXBlOworCWNoYXIgKm9iamVjdE5hbWU7 CisJY29uc3QgY2hhciAqY29tbWFuZFRleHQ7CisJUGFyYW1MaXN0SW5mbyBwYXJhbUxpc3Q7 CisKKwlib29sIGdyYW50ZWQ7CisJYm9vbCBsb2dnZWQ7Cit9IEF1ZGl0RXZlbnQ7CisKKy8q CisgKiBBIHNpbXBsZSBGSUZPIHF1ZXVlIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQg c3RhY2sgb2YgYXVkaXQgZXZlbnRzLgorICovCit0eXBlZGVmIHN0cnVjdCBBdWRpdEV2ZW50 U3RhY2tJdGVtCit7CisJc3RydWN0IEF1ZGl0RXZlbnRTdGFja0l0ZW0gKm5leHQ7CisKKwlB dWRpdEV2ZW50IGF1ZGl0RXZlbnQ7CisKKwlNZW1vcnlDb250ZXh0IGNvbnRleHRBdWRpdDsK KwlNZW1vcnlDb250ZXh0Q2FsbGJhY2sgY29udGV4dENhbGxiYWNrOworfSBBdWRpdEV2ZW50 U3RhY2tJdGVtOworCitBdWRpdEV2ZW50U3RhY2tJdGVtICphdWRpdEV2ZW50U3RhY2sgPSBO VUxMOworCisvKgorICogVHJhY2sgd2hlbiBhbiBpbnRlcm5hbCBzdGF0ZW1lbnQgaXMgcnVu bmluZyBzbyBpdCBpcyBub3QgbG9nZ2VkCisgKi8KK3N0YXRpYyBib29sIGludGVybmFsU3Rh dGVtZW50ID0gZmFsc2U7CisKKy8qCisgKiBUcmFjayBydW5uaW5nIHRvdGFsIGZvciBzdGF0 ZW1lbnRzIGFuZCBzdWJzdGF0ZW1lbnRzIGFuZCB3aGV0aGVyIG9yIG5vdAorICogYW55dGhp bmcgaGFzIGJlZW4gbG9nZ2VkIHNpbmNlIHRoaXMgc3RhdGVtZW50IGJlZ2FuLgorICovCitz dGF0aWMgdWludDY0IHN0YXRlbWVudFRvdGFsID0gMDsKK3N0YXRpYyB1aW50NjQgc3Vic3Rh dGVtZW50VG90YWwgPSAwOworCitzdGF0aWMgYm9vbCBzdGF0ZW1lbnRMb2dnZWQgPSBmYWxz ZTsKKworLyoKKyAqIFN0YWNrIGZ1bmN0aW9ucworICoKKyAqIEF1ZGl0IGV2ZW50cyBjYW4g Z28gZG93biB0byBtdWx0aXBsZSBsZXZlbHMgc28gYSBzdGFjayBpcyBtYWludGFpbmVkIHRv IGtlZXAKKyAqIHRyYWNrIG9mIHRoZW0uCisgKi8KKworLyoKKyAqIFJlc3BvbmQgdG8gY2Fs bGJhY2tzIHJlZ2lzdGVyZWQgd2l0aCBNZW1vcnlDb250ZXh0UmVnaXN0ZXJSZXNldENhbGxi YWNrKCkuCisgKiBSZW1vdmVzIHRoZSBldmVudChzKSBvZmYgdGhlIHN0YWNrIHRoYXQgaGF2 ZSBiZWNvbWUgb2Jzb2xldGUgb25jZSB0aGUKKyAqIE1lbW9yeUNvbnRleHQgaGFzIGJlZW4g ZnJlZWQuICBUaGUgY2FsbGJhY2sgc2hvdWxkIGFsd2F5cyBiZSBmcmVlaW5nIHRoZSB0b3AK KyAqIG9mIHRoZSBzdGFjaywgYnV0IHRoZSBjb2RlIGlzIHRvbGVyYW50IG9mIG91dC1vZi1v cmRlciBjYWxsYmFja3MuCisgKi8KK3N0YXRpYyB2b2lkCitzdGFja19mcmVlKHZvaWQgKnN0 YWNrRnJlZSkKK3sKKwlBdWRpdEV2ZW50U3RhY2tJdGVtICpuZXh0SXRlbSA9IGF1ZGl0RXZl bnRTdGFjazsKKworCS8qIE9ubHkgcHJvY2VzcyBpZiB0aGUgc3RhY2sgY29udGFpbnMgaXRl bXMgKi8KKwl3aGlsZSAobmV4dEl0ZW0gIT0gTlVMTCkKKwl7CisJCS8qIENoZWNrIGlmIHRo aXMgaXRlbSBtYXRjaGVzIHRoZSBpdGVtIHRvIGJlIGZyZWVkICovCisJCWlmIChuZXh0SXRl bSA9PSAoQXVkaXRFdmVudFN0YWNrSXRlbSAqKXN0YWNrRnJlZSkKKwkJeworCQkJLyogTW92 ZSB0b3Agb2Ygc3RhY2sgdGhlIHRoZSBpdGVtIGFmdGVyIHRoZSBmcmVlZCBpdGVtICovCisJ CQlhdWRpdEV2ZW50U3RhY2sgPSBuZXh0SXRlbS0+bmV4dDsKKworCQkJLyogSWYgdGhlIHN0 YWNrIGlzIG5vdCBlbXB0eSAqLworCQkJaWYgKGF1ZGl0RXZlbnRTdGFjayA9PSBOVUxMKQor CQkJeworCQkJCS8qIFJlc2V0IGludGVybmFsIHN0YXRlbWVudCBpbiBjYXNlIG9mIGVycm9y ICovCisJCQkJaW50ZXJuYWxTdGF0ZW1lbnQgPSBmYWxzZTsKKworCQkJCS8qIFJlc2V0IHN1 YiBzdGF0ZW1lbnQgdG90YWwgKi8KKwkJCQlzdWJzdGF0ZW1lbnRUb3RhbCA9IDA7CisKKwkJ CQkvKiBSZXNldCBzdGF0ZW1lbnQgbG9nZ2VkIGZsYWcgdG90YWwgKi8KKwkJCQlzdGF0ZW1l bnRMb2dnZWQgPSBmYWxzZTsKKwkJCX0KKworCQkJcmV0dXJuOworCQl9CisKKwkJLyogU3Rp bGwgbG9va2luZywgdGVzdCB0aGUgbmV4dCBpdGVtICovCisJCW5leHRJdGVtID0gbmV4dEl0 ZW0tPm5leHQ7CisJfQorfQorCisvKgorICogUHVzaCBhIG5ldyBhdWRpdCBldmVudCBvbnRv IHRoZSBzdGFjayBhbmQgY3JlYXRlIGEgbmV3IG1lbW9yeSBjb250ZXh0IHRvCisgKiBzdG9y ZSBpdC4KKyAqLworc3RhdGljIEF1ZGl0RXZlbnRTdGFja0l0ZW0gKgorc3RhY2tfcHVzaCgp Cit7CisJTWVtb3J5Q29udGV4dCBjb250ZXh0QXVkaXQ7CisJTWVtb3J5Q29udGV4dCBjb250 ZXh0T2xkOworCUF1ZGl0RXZlbnRTdGFja0l0ZW0gKnN0YWNrSXRlbTsKKworCS8qIENyZWF0 ZSBhIG5ldyBtZW1vcnkgY29udGV4dCAqLworCWNvbnRleHRBdWRpdCA9IEFsbG9jU2V0Q29u dGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCQkgInBnX2F1ZGl0 IHN0YWNrIGNvbnRleHQiLAorCQkJCQkJCQkJCSBBTExPQ1NFVF9ERUZBVUxUX01JTlNJWkUs CisJCQkJCQkJCQkJIEFMTE9DU0VUX0RFRkFVTFRfSU5JVFNJWkUsCisJCQkJCQkJCQkJIEFM TE9DU0VUX0RFRkFVTFRfTUFYU0laRSk7CisJY29udGV4dE9sZCA9IE1lbW9yeUNvbnRleHRT d2l0Y2hUbyhjb250ZXh0QXVkaXQpOworCisJLyogQWxsb2NhdGUgdGhlIHN0YWNrIGl0ZW0g Ki8KKwlzdGFja0l0ZW0gPSBwYWxsb2MwKHNpemVvZihBdWRpdEV2ZW50U3RhY2tJdGVtKSk7 CisKKwkvKiBTdG9yZSBtZW1vcnkgY29udGV4dHMgKi8KKwlzdGFja0l0ZW0tPmNvbnRleHRB dWRpdCA9IGNvbnRleHRBdWRpdDsKKworCS8qIElmIGl0ZW0gYWxyZWFkeSBvbiBzdGFjayB0 aGVuIHB1c2ggaXQgZG93biAqLworCWlmIChhdWRpdEV2ZW50U3RhY2sgIT0gTlVMTCkKKwkJ c3RhY2tJdGVtLT5uZXh0ID0gYXVkaXRFdmVudFN0YWNrOworCWVsc2UKKwkJc3RhY2tJdGVt LT5uZXh0ID0gTlVMTDsKKworCS8qCisJICogU2V0dXAgYSBjYWxsYmFjayBpbiBjYXNlIGFu IGVycm9yIGhhcHBlbnMuICBzdGFja19mcmVlKCkgd2lsbCB0cnVuY2F0ZQorCSAqIHRoZSBz dGFjayBhdCB0aGlzIGl0ZW0uCisJICovCisJc3RhY2tJdGVtLT5jb250ZXh0Q2FsbGJhY2su ZnVuYyA9IHN0YWNrX2ZyZWU7CisJc3RhY2tJdGVtLT5jb250ZXh0Q2FsbGJhY2suYXJnID0g KHZvaWQgKilzdGFja0l0ZW07CisJTWVtb3J5Q29udGV4dFJlZ2lzdGVyUmVzZXRDYWxsYmFj ayhjb250ZXh0QXVkaXQsCisJCQkJCQkJCQkgICAmc3RhY2tJdGVtLT5jb250ZXh0Q2FsbGJh Y2spOworCisJLyogUHVzaCBpdGVtIG9uIHRoZSBzdGFjayAqLworCWF1ZGl0RXZlbnRTdGFj ayA9IHN0YWNrSXRlbTsKKworCS8qIFJldHVybiB0byB0aGUgb2xkIG1lbW9yeSBjb250ZXh0 ICovCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKGNvbnRleHRPbGQpOworCisJLyogUmV0dXJu IHRoZSBzdGFjayBpdGVtICovCisJcmV0dXJuIHN0YWNrSXRlbTsKK30KKworLyoKKyAqIFBv cCBhbiBhdWRpdCBldmVudCBmcm9tIHRoZSBzdGFjayBieSBkZWxldGluZyB0aGUgbWVtb3J5 IGNvbnRleHQgdGhhdAorICogY29udGFpbnMgaXQuICBUaGUgY2FsbGJhY2sgdG8gc3RhY2tf ZnJlZSgpIGRvZXMgdGhlIGFjdHVhbCBwb3AuCisgKi8KK3N0YXRpYyB2b2lkCitzdGFja19w b3AoKQoreworCS8qIEVycm9yIGlmIHRoZSBzdGFjayBpcyBhbHJlYWR5IGVtcHR5ICovCisJ aWYgKGF1ZGl0RXZlbnRTdGFjayA9PSBOVUxMKQorCQllbG9nKEVSUk9SLCAicGdfYXVkaXQg c3RhY2sgaXMgYWxyZWFkeSBlbXB0eSIpOworCisJLyogU3dpdGNoIHRoZSBvbGQgbWVtb3J5 IGNvbnRleHQgYW5kIGRlbGV0ZSB0aGUgYXVkaXQgY29udGV4dCAqLworCU1lbW9yeUNvbnRl eHREZWxldGUoYXVkaXRFdmVudFN0YWNrLT5jb250ZXh0QXVkaXQpOworfQorCisvKgorICog VGFrZXMgYW4gQXVkaXRFdmVudCBhbmQgcmV0dXJucyB0cnVlIG9yIGZhbHNlIGRlcGVuZGlu ZyBvbiB3aGV0aGVyIHRoZSBldmVudAorICogc2hvdWxkIGJlIGxvZ2dlZCBhY2NvcmRpbmcg dG8gdGhlIHBnYXVkaXQucm9sZXMvbG9nIHNldHRpbmdzLiBJZiBpdCByZXR1cm5zCisgKiB0 cnVlLCBhbHNvIGZpbGxzIGluIHRoZSBuYW1lIG9mIHRoZSBMb2dDbGFzcyB3aGljaCBpdCBp cyBsb2dnZWQgdW5kZXIuCisgKi8KK3N0YXRpYyBib29sCitsb2dfY2hlY2soQXVkaXRFdmVu dCAqZSwgY29uc3QgY2hhciAqKmNsYXNzbmFtZSkKK3sKKwllbnVtIExvZ0NsYXNzIGNsYXNz ID0gTE9HX05PTkU7CisKKwkvKiBCeSBkZWZhdWx0IHB1dCBldmVyeXRoaW5nIGluIHRoZSBN SVNDIGNsYXNzLiAqLworCSpjbGFzc25hbWUgPSBDTEFTU19NSVNDOworCWNsYXNzID0gTE9H X01JU0M7CisKKwkvKgorCSAqIExvb2sgYXQgdGhlIHR5cGUgb2YgdGhlIGNvbW1hbmQgYW5k IGRlY2lkZSB3aGF0IExvZ0NsYXNzIG5lZWRzIHRvIGJlCisJICogZW5hYmxlZCBmb3IgdGhl IGNvbW1hbmQgdG8gYmUgbG9nZ2VkLgorCSAqLworCXN3aXRjaCAoZS0+bG9nU3RtdExldmVs KQorCXsKKwkJY2FzZSBMT0dTVE1UX01PRDoKKwkJCSpjbGFzc25hbWUgPSBDTEFTU19XUklU RTsKKwkJCWNsYXNzID0gTE9HX1dSSVRFOworCQkJYnJlYWs7CisKKwkJY2FzZSBMT0dTVE1U X0RETDoKKwkJCSpjbGFzc25hbWUgPSBDTEFTU19EREw7CisJCQljbGFzcyA9IExPR19EREw7 CisKKwkJY2FzZSBMT0dTVE1UX0FMTDoKKwkJCXN3aXRjaCAoZS0+Y29tbWFuZFRhZykKKwkJ CXsKKwkJCQljYXNlIFRfQ29weVN0bXQ6CisJCQkJY2FzZSBUX1NlbGVjdFN0bXQ6CisJCQkJ Y2FzZSBUX1ByZXBhcmVTdG10OgorCQkJCWNhc2UgVF9QbGFubmVkU3RtdDoKKwkJCQljYXNl IFRfRXhlY3V0ZVN0bXQ6CisJCQkJCSpjbGFzc25hbWUgPSBDTEFTU19SRUFEOworCQkJCQlj bGFzcyA9IExPR19SRUFEOworCQkJCQlicmVhazsKKworCQkJCWNhc2UgVF9WYWN1dW1TdG10 OgorCQkJCWNhc2UgVF9SZWluZGV4U3RtdDoKKwkJCQkJKmNsYXNzbmFtZSA9IENMQVNTX0RE TDsKKwkJCQkJY2xhc3MgPSBMT0dfRERMOworCQkJCQlicmVhazsKKworCQkJCWNhc2UgVF9E b1N0bXQ6CisJCQkJCSpjbGFzc25hbWUgPSBDTEFTU19GVU5DVElPTjsKKwkJCQkJY2xhc3Mg PSBMT0dfRlVOQ1RJT047CisJCQkJCWJyZWFrOworCisJCQkJZGVmYXVsdDoKKwkJCQkJYnJl YWs7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIExPR1NUTVRfTk9ORToKKwkJCWJyZWFr OworCX0KKworCS8qCisJICogV2UgbG9nIGF1ZGl0IGV2ZW50cyB1bmRlciB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnM6CisJICoKKwkgKiAxLiBJZiB0aGUgYXVkaXQgcm9sZSBoYXMgYmVl biBleHBsaWNpdGx5IGdyYW50ZWQgcGVybWlzc2lvbiBmb3IKKwkgKiAgICBhbiBvcGVyYXRp b24uCisJICovCisJaWYgKGUtPmdyYW50ZWQpCisJeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisK KwkvKiAyLiBJZiB0aGUgZXZlbnQgYmVsb25ncyB0byBhIGNsYXNzIGNvdmVyZWQgYnkgcGdh dWRpdC5sb2cuICovCisJaWYgKChhdWRpdExvZ0JpdG1hcCAmIGNsYXNzKSA9PSBjbGFzcykK Kwl7CisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAq IEFwcGVuZHMgYSBwcm9wZXJseSBxdW90ZWQgQ1NWIGZpZWxkIHRvIFN0cmluZ0luZm8uCisg Ki8KK3N0YXRpYyB2b2lkCithcHBlbmRfdmFsaWRfY3N2KFN0cmluZ0luZm9EYXRhICpidWZm ZXIsIGNvbnN0IGNoYXIgKmFwcGVuZFN0cikKK3sKKwljb25zdCBjaGFyICpwQ2hhcjsKKwor CS8qCisJICogSWYgdGhlIGFwcGVuZCBzdHJpbmcgaXMgbnVsbCB0aGVuIHJldHVybi4gIE5V TEwgZmllbGRzIGFyZSBub3QgcXVvdGVkCisJICogaW4gQ1NWCisJICovCisJaWYgKGFwcGVu ZFN0ciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKiBPbmx5IGZvcm1hdCBmb3IgQ1NWIGlm IGFwcGVuZFN0ciBjb250YWluczogIiwgY29tbWEsIFxuLCBcciAqLworCWlmIChzdHJzdHIo YXBwZW5kU3RyLCAiLCIpIHx8IHN0cnN0cihhcHBlbmRTdHIsICJcIiIpIHx8CisJCXN0cnN0 cihhcHBlbmRTdHIsICJcbiIpIHx8IHN0cnN0cihhcHBlbmRTdHIsICJcciIpKQorCXsKKwkJ YXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybyhidWZmZXIsICciJyk7CisKKwkJZm9yIChwQ2hh ciA9IGFwcGVuZFN0cjsgKnBDaGFyOyBwQ2hhcisrKQorCQl7CisJCQlpZiAoKnBDaGFyID09 ICciJykgLyogZG91YmxlIHNpbmdsZSBxdW90ZXMgKi8KKwkJCQlhcHBlbmRTdHJpbmdJbmZv Q2hhck1hY3JvKGJ1ZmZlciwgKnBDaGFyKTsKKworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJN YWNybyhidWZmZXIsICpwQ2hhcik7CisJCX0KKworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1h Y3JvKGJ1ZmZlciwgJyInKTsKKwl9CisJLyogRWxzZSBqdXN0IGFwcGVuZCAqLworCWVsc2UK Kwl7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmZmVyLCBhcHBlbmRTdHIpOworCX0K K30KKworLyoKKyAqIFRha2VzIGFuIEF1ZGl0RXZlbnQgYW5kLCBpZiBpdCBsb2dfY2hlY2so KSwgd3JpdGVzIGl0IHRvIHRoZSBhdWRpdCBsb2cuIFRoZQorICogQXVkaXRFdmVudCBpcyBh c3N1bWVkIHRvIGJlIGNvbXBsZXRlbHkgZmlsbGVkIGluIGJ5IHRoZSBjYWxsZXIgKHVua25v d24KKyAqIHZhbHVlcyBtdXN0IGJlIHNldCB0byAiIiBzbyB0aGF0IHRoZXkgY2FuIGJlIGxv Z2dlZCB3aXRob3V0IGVycm9yIGNoZWNraW5nKS4KKyAqLworc3RhdGljIHZvaWQKK2xvZ19h dWRpdF9ldmVudChBdWRpdEV2ZW50U3RhY2tJdGVtICpzdGFja0l0ZW0pCit7CisJY29uc3Qg Y2hhciAqY2xhc3NuYW1lOworCU1lbW9yeUNvbnRleHQgY29udGV4dE9sZDsKKwlTdHJpbmdJ bmZvRGF0YSBhdWRpdFN0cjsKKworCS8qIENoZWNrIHRoYXQgdGhpcyBldmVudCBzaG91bGQg YmUgbG9nZ2VkLiAqLworCWlmICghbG9nX2NoZWNrKCZzdGFja0l0ZW0tPmF1ZGl0RXZlbnQs ICZjbGFzc25hbWUpKQorCQlyZXR1cm47CisKKwkvKiBVc2UgYXVkaXQgbWVtb3J5IGNvbnRl eHQgaW4gY2FzZSBzb21ldGhpbmcgaXMgbm90IGZyZWVkICovCisJY29udGV4dE9sZCA9IE1l bW9yeUNvbnRleHRTd2l0Y2hUbyhzdGFja0l0ZW0tPmNvbnRleHRBdWRpdCk7CisKKwkvKiBT ZXQgc3RhdGVtZW50IGFuZCBzdWJzdGF0ZW1lbnQgSWRzICovCisJaWYgKHN0YWNrSXRlbS0+ YXVkaXRFdmVudC5zdGF0ZW1lbnRJZCA9PSAwKQorCXsKKwkJLyogSWYgbm90aGluZyBoYXMg YmVlbiBsb2dnZWQgeWV0IHRoZW4gY3JlYXRlIGEgbmV3IHN0YXRlbWVudCBJZCAqLworCQlp ZiAoIXN0YXRlbWVudExvZ2dlZCkKKwkJeworCQkJc3RhdGVtZW50VG90YWwrKzsKKwkJCXN0 YXRlbWVudExvZ2dlZCA9IHRydWU7CisJCX0KKworCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQu c3RhdGVtZW50SWQgPSBzdGF0ZW1lbnRUb3RhbDsKKwkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50 LnN1YnN0YXRlbWVudElkID0gKytzdWJzdGF0ZW1lbnRUb3RhbDsKKwl9CisKKwkvKiBDcmVh dGUgdGhlIGF1ZGl0IHN0cmluZyAqLworCWluaXRTdHJpbmdJbmZvKCZhdWRpdFN0cik7CisK KwlhcHBlbmRfdmFsaWRfY3N2KCZhdWRpdFN0ciwgc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmNv bW1hbmQpOworCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oJmF1ZGl0U3RyLCAnLCcpOwor CisJYXBwZW5kX3ZhbGlkX2NzdigmYXVkaXRTdHIsIHN0YWNrSXRlbS0+YXVkaXRFdmVudC5v YmplY3RUeXBlKTsKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKCZhdWRpdFN0ciwgJywn KTsKKworCWFwcGVuZF92YWxpZF9jc3YoJmF1ZGl0U3RyLCBzdGFja0l0ZW0tPmF1ZGl0RXZl bnQub2JqZWN0TmFtZSk7CisJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybygmYXVkaXRTdHIs ICcsJyk7CisKKwlhcHBlbmRfdmFsaWRfY3N2KCZhdWRpdFN0ciwgc3RhY2tJdGVtLT5hdWRp dEV2ZW50LmNvbW1hbmRUZXh0KTsKKworCS8qIElmIHBhcmFtZXRlciBsb2dnaW5nIGlzIHR1 cm5lZCBvbiBhbmQgdGhlcmUgYXJlIHBhcmFtZXRlcnMgdG8gbG9nICovCisJaWYgKGF1ZGl0 TG9nQml0bWFwICYgTE9HX1BBUkFNRVRFUiAmJgorCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQu cGFyYW1MaXN0ICE9IE5VTEwgJiYKKwkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LnBhcmFtTGlz dC0+bnVtUGFyYW1zID4gMCAmJgorCQkhSXNBYm9ydGVkVHJhbnNhY3Rpb25CbG9ja1N0YXRl KCkpCisJeworCQlQYXJhbUxpc3RJbmZvIHBhcmFtTGlzdCA9IHN0YWNrSXRlbS0+YXVkaXRF dmVudC5wYXJhbUxpc3Q7CisJCWludCBwYXJhbUlkeDsKKworCQkvKiBJdGVyYXRlIHRocm91 Z2ggYWxsIHBhcmFtcyAqLworCQlmb3IgKHBhcmFtSWR4ID0gMDsgcGFyYW1JZHggPCBwYXJh bUxpc3QtPm51bVBhcmFtczsgcGFyYW1JZHgrKykKKwkJeworCQkJUGFyYW1FeHRlcm5EYXRh ICpwcm0gPSAmcGFyYW1MaXN0LT5wYXJhbXNbcGFyYW1JZHhdOworCQkJT2lkIAkJCSB0eXBl T3V0cHV0OworCQkJYm9vbCAJCQkgdHlwZUlzVmFyTGVuYTsKKwkJCWNoYXIgCQkJKnBhcmFt U3RyOworCisJCQkvKiBBZGQgYSBjb21tYSBmb3IgZWFjaCBwYXJhbSAqLworCQkJYXBwZW5k U3RyaW5nSW5mb0NoYXJNYWNybygmYXVkaXRTdHIsICcsJyk7CisKKwkJCS8qIFNraXAgdGhp cyBwYXJhbSBpZiBudWxsIG9yIGlmIG9pZCBpcyBpbnZhbGlkICovCisJCQlpZiAocHJtLT5p c251bGwgfHwgIU9pZElzVmFsaWQocHJtLT5wdHlwZSkpCisJCQl7CisJCQkJY29udGludWU7 CisJCQl9CisKKwkJCS8qIE91dHB1dCB0aGUgc3RyaW5nICovCisJCQlnZXRUeXBlT3V0cHV0 SW5mbyhwcm0tPnB0eXBlLCAmdHlwZU91dHB1dCwgJnR5cGVJc1ZhckxlbmEpOworCQkJcGFy YW1TdHIgPSBPaWRPdXRwdXRGdW5jdGlvbkNhbGwodHlwZU91dHB1dCwgcHJtLT52YWx1ZSk7 CisKKwkJCWFwcGVuZF92YWxpZF9jc3YoJmF1ZGl0U3RyLCBwYXJhbVN0cik7CisJCQlwZnJl ZShwYXJhbVN0cik7CisJCX0KKwl9CisKKwkvKiBMb2cgdGhlIGF1ZGl0IHN0cmluZyAqLwor CWVyZXBvcnQoTE9HLAorCQkoZXJybXNnKCJBVURJVDogJXMsJWxkLCVsZCwlcywlcyIsCisJ CQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuZ3JhbnRlZCA/CisJCQkJQVVESVRfVFlQRV9PQkpF Q1QgOiBBVURJVF9UWVBFX1NFU1NJT04sCisJCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuc3Rh dGVtZW50SWQsCisJCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuc3Vic3RhdGVtZW50SWQsCisJ CQljbGFzc25hbWUsIGF1ZGl0U3RyLmRhdGEpLAorCQkgZXJyaGlkZXN0bXQodHJ1ZSkpKTsK KworCS8qIE1hcmsgdGhlIGF1ZGl0IGV2ZW50IGFzIGxvZ2dlZCAqLworCXN0YWNrSXRlbS0+ YXVkaXRFdmVudC5sb2dnZWQgPSB0cnVlOworCisJLyogU3dpdGNoIGJhY2sgdG8gdGhlIG9s ZCBtZW1vcnkgY29udGV4dCAqLworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhjb250ZXh0T2xk KTsKK30KKworLyoKKyAqIENoZWNrIGlmIHRoZSByb2xlIG9yIGFueSBpbmhlcml0ZWQgcm9s ZSBoYXMgYW55IHBlcm1pc3Npb24gaW4gdGhlIG1hc2suICBUaGUKKyAqIHB1YmxpYyByb2xl IGlzIGV4Y2x1ZGVkIGZyb20gdGhpcyBjaGVjayBhbmQgc3VwZXJ1c2VyIHBlcm1pc3Npb25z IGFyZSBub3QKKyAqIGNvbnNpZGVyZWQuCisgKi8KK3N0YXRpYyBib29sCitsb2dfYWNsX2No ZWNrKERhdHVtIGFjbERhdHVtLCBPaWQgYXVkaXRPaWQsIEFjbE1vZGUgbWFzaykKK3sKKwli b29sCQlyZXN1bHQgPSBmYWxzZTsKKwlBY2wJCSAgICphY2w7CisJQWNsSXRlbQkgICAqYWNs SXRlbURhdGE7CisJaW50CQkJYWNsSW5kZXg7CisJaW50CQkJYWNsVG90YWw7CisKKwkvKiBE ZXRvYXN0IGNvbHVtbidzIEFDTCBpZiBuZWNlc3NhcnkgKi8KKwlhY2wgPSBEYXR1bUdldEFj bFAoYWNsRGF0dW0pOworCisJLyogR2V0IHRoZSBhY2wgbGlzdCBhbmQgdG90YWwgKi8KKwlh Y2xUb3RhbCA9IEFDTF9OVU0oYWNsKTsKKwlhY2xJdGVtRGF0YSA9IEFDTF9EQVQoYWNsKTsK KworCS8qIENoZWNrIHByaXZpbGVnZXMgZ3JhbnRlZCBkaXJlY3RseSB0byBhdWRpdE9pZCAq LworCWZvciAoYWNsSW5kZXggPSAwOyBhY2xJbmRleCA8IGFjbFRvdGFsOyBhY2xJbmRleCsr KQorCXsKKwkJQWNsSXRlbSAqYWNsSXRlbSA9ICZhY2xJdGVtRGF0YVthY2xJbmRleF07CisK KwkJaWYgKGFjbEl0ZW0tPmFpX2dyYW50ZWUgPT0gYXVkaXRPaWQgJiYKKwkJCWFjbEl0ZW0t PmFpX3ByaXZzICYgbWFzaykKKwkJeworCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCWJyZWFrOwor CQl9CisJfQorCisJLyoKKwkgKiBDaGVjayBwcml2aWxlZ2VzIGdyYW50ZWQgaW5kaXJlY3Rs eSB2aWEgcm9sZSBtZW1iZXJzaGlwcy4gV2UgZG8gdGhpcyBpbgorCSAqIGEgc2VwYXJhdGUg cGFzcyB0byBtaW5pbWl6ZSBleHBlbnNpdmUgaW5kaXJlY3QgbWVtYmVyc2hpcCB0ZXN0cy4g IEluCisJICogcGFydGljdWxhciwgaXQncyB3b3J0aCB0ZXN0aW5nIHdoZXRoZXIgYSBnaXZl biBBQ0wgZW50cnkgZ3JhbnRzIGFueQorCSAqIHByaXZpbGVnZXMgc3RpbGwgb2YgaW50ZXJl c3QgYmVmb3JlIHdlIHBlcmZvcm0gdGhlIGhhc19wcml2c19vZl9yb2xlCisJICogdGVzdC4K KwkgKi8KKwlpZiAoIXJlc3VsdCkKKwl7CisJCWZvciAoYWNsSW5kZXggPSAwOyBhY2xJbmRl eCA8IGFjbFRvdGFsOyBhY2xJbmRleCsrKQorCQl7CisJCQlBY2xJdGVtICphY2xJdGVtID0g JmFjbEl0ZW1EYXRhW2FjbEluZGV4XTsKKworCQkJLyogRG9uJ3QgdGVzdCBwdWJsaWMgb3Ig YXVkaXRPaWQgKGl0IGhhcyBiZWVuIHRlc3RlZCBhbHJlYWR5KSAqLworCQkJaWYgKGFjbEl0 ZW0tPmFpX2dyYW50ZWUgPT0gQUNMX0lEX1BVQkxJQyB8fAorCQkJCWFjbEl0ZW0tPmFpX2dy YW50ZWUgPT0gYXVkaXRPaWQpCisJCQkJY29udGludWU7CisKKwkJCS8qCisJCQkgKiBDaGVj ayB0aGF0IHRoZSByb2xlIGhhcyB0aGUgcmVxdWlyZWQgcHJpdmlsZWdlcyBhbmQgdGhhdCBp dCBpcworCQkJICogaW5oZXJpdGVkIGJ5IGF1ZGl0T2lkLgorCQkJICovCisJCQlpZiAoYWNs SXRlbS0+YWlfcHJpdnMgJiBtYXNrICYmCisJCQkJaGFzX3ByaXZzX29mX3JvbGUoYXVkaXRP aWQsIGFjbEl0ZW0tPmFpX2dyYW50ZWUpKQorCQkJeworCQkJCXJlc3VsdCA9IHRydWU7CisJ CQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwkvKiBpZiB3ZSBoYXZlIGEgZGV0b2FzdGVk IGNvcHksIGZyZWUgaXQgKi8KKwlpZiAoYWNsICYmIChQb2ludGVyKSBhY2wgIT0gRGF0dW1H ZXRQb2ludGVyKGFjbERhdHVtKSkKKwkJcGZyZWUoYWNsKTsKKworCXJldHVybiByZXN1bHQ7 Cit9CisKKy8qCisgKiBDaGVjayBpZiBhIHJvbGUgaGFzIGFueSBvZiB0aGUgcGVybWlzc2lv bnMgaW4gdGhlIG1hc2sgb24gYSByZWxhdGlvbi4KKyAqLworc3RhdGljIGJvb2wKK2xvZ19y ZWxhdGlvbl9jaGVjayhPaWQgcmVsT2lkLAorCQkJCSAgIE9pZCBhdWRpdE9pZCwKKwkJCQkg ICBBY2xNb2RlIG1hc2spCit7CisJYm9vbAkJcmVzdWx0ID0gZmFsc2U7CisJSGVhcFR1cGxl CXR1cGxlOworCURhdHVtCQlhY2xEYXR1bTsKKwlib29sCQlpc051bGw7CisKKwkvKiBHZXQg cmVsYXRpb24gdHVwbGUgZnJvbSBwZ19jbGFzcyAqLworCXR1cGxlID0gU2VhcmNoU3lzQ2Fj aGUxKFJFTE9JRCwgT2JqZWN0SWRHZXREYXR1bShyZWxPaWQpKTsKKworCS8qIFJldHVybiBm YWxzZSBpZiB0dXBsZSBpcyBub3QgdmFsaWQgKi8KKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo dHVwbGUpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBHZXQgdGhlIHJlbGF0aW9uJ3MgQUNM ICovCisJYWNsRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUkVMT0lELCB0dXBsZSwgQW51bV9w Z19jbGFzc19yZWxhY2wsCisJCQkJCQkJICAgJmlzTnVsbCk7CisKKwkvKiBJZiBub3QgbnVs bCB0aGVuIHRlc3QgKi8KKwlpZiAoIWlzTnVsbCkKKwkJcmVzdWx0ID0gbG9nX2FjbF9jaGVj ayhhY2xEYXR1bSwgYXVkaXRPaWQsIG1hc2spOworCisJLyogRnJlZSB0aGUgcmVsYXRpb24g dHVwbGUgKi8KKwlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworCisJcmV0dXJuIHJlc3VsdDsK K30KKworLyoKKyAqIENoZWNrIGlmIGEgcm9sZSBoYXMgYW55IG9mIHRoZSBwZXJtaXNzaW9u cyBpbiB0aGUgbWFzayBvbiBhbiBhdHRyaWJ1dGUuCisgKi8KK3N0YXRpYyBib29sCitsb2df YXR0cmlidXRlX2NoZWNrKE9pZCByZWxPaWQsCisJCQkJCUF0dHJOdW1iZXIgYXR0TnVtLAor CQkJCQlPaWQgYXVkaXRPaWQsCisJCQkJCUFjbE1vZGUgbWFzaykKK3sKKwlib29sCQlyZXN1 bHQgPSBmYWxzZTsKKwlIZWFwVHVwbGUJYXR0VHVwbGU7CisJRGF0dW0JCWFjbERhdHVtOwor CWJvb2wJCWlzTnVsbDsKKworCS8qIEdldCB0aGUgYXR0cmlidXRlJ3MgQUNMICovCisJYXR0 VHVwbGUgPSBTZWFyY2hTeXNDYWNoZTIoQVRUTlVNLAorCQkJCQkJCSAgIE9iamVjdElkR2V0 RGF0dW0ocmVsT2lkKSwKKwkJCQkJCQkgICBJbnQxNkdldERhdHVtKGF0dE51bSkpOworCisJ LyogUmV0dXJuIGZhbHNlIGlmIGF0dHJpYnV0ZSBpcyBpbnZhbGlkICovCisJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKGF0dFR1cGxlKSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogT25seSBw cm9jZXNzIGF0dHJpYnV0ZSB0aGF0IGhhdmUgbm90IGJlZW4gZHJvcHBlZCAqLworCWlmICgh KChGb3JtX3BnX2F0dHJpYnV0ZSkgR0VUU1RSVUNUKGF0dFR1cGxlKSktPmF0dGlzZHJvcHBl ZCkKKwl7CisJCWFjbERhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKEFUVE5VTSwgYXR0VHVwbGUs IEFudW1fcGdfYXR0cmlidXRlX2F0dGFjbCwKKwkJCQkJCQkJICAgJmlzTnVsbCk7CisKKwkJ aWYgKCFpc051bGwpCisJCQlyZXN1bHQgPSBsb2dfYWNsX2NoZWNrKGFjbERhdHVtLCBhdWRp dE9pZCwgbWFzayk7CisJfQorCisJLyogRnJlZSBhdHRyaWJ1dGUgKi8KKwlSZWxlYXNlU3lz Q2FjaGUoYXR0VHVwbGUpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIENoZWNr IGlmIGEgcm9sZSBoYXMgYW55IG9mIHRoZSBwZXJtaXNzaW9ucyBpbiB0aGUgbWFzayBvbiBh biBhdHRyaWJ1dGUgaW4KKyAqIHRoZSBwcm92aWRlZCBzZXQuICBJZiB0aGUgc2V0IGlzIGVt cHR5LCB0aGVuIGFsbCB2YWxpZCBhdHRyaWJ1dGVzIGluIHRoZQorICogcmVsYXRpb24gd2ls bCBiZSB0ZXN0ZWQuCisgKi8KK3N0YXRpYyBib29sCitsb2dfYXR0cmlidXRlX2NoZWNrX2Fu eShPaWQgcmVsT2lkLAorCQkJCQkJT2lkIGF1ZGl0T2lkLAorCQkJCQkJQml0bWFwc2V0ICph dHRyaWJ1dGVTZXQsCisJCQkJCQlBY2xNb2RlIG1vZGUpCit7CisJYm9vbCByZXN1bHQgPSBm YWxzZTsKKwlBdHRyTnVtYmVyIGNvbDsKKwlCaXRtYXBzZXQgKnRtcFNldDsKKworCS8qIElm IGJtcyBpcyBlbXB0eSB0aGVuIGNoZWNrIGZvciBhbnkgY29sdW1uIG1hdGNoICovCisJaWYg KGJtc19pc19lbXB0eShhdHRyaWJ1dGVTZXQpKQorCXsKKwkJSGVhcFR1cGxlCWNsYXNzVHVw bGU7CisJCUF0dHJOdW1iZXIJbmF0dHJzOworCQlBdHRyTnVtYmVyCWN1cnJfYXR0OworCisJ CS8qIEdldCByZWxhdGlvbiB0byBkZXRlcm1pbmUgdG90YWwgYXR0cmlidXRlICovCisJCWNs YXNzVHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoUkVMT0lELCBPYmplY3RJZEdldERhdHVtKHJl bE9pZCkpOworCisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChjbGFzc1R1cGxlKSkKKwkJCXJl dHVybiBmYWxzZTsKKworCQluYXR0cnMgPSAoKEZvcm1fcGdfY2xhc3MpIEdFVFNUUlVDVChj bGFzc1R1cGxlKSktPnJlbG5hdHRzOworCQlSZWxlYXNlU3lzQ2FjaGUoY2xhc3NUdXBsZSk7 CisKKwkJLyogQ2hlY2sgZWFjaCBjb2x1bW4gKi8KKwkJZm9yIChjdXJyX2F0dCA9IDE7IGN1 cnJfYXR0IDw9IG5hdHRyczsgY3Vycl9hdHQrKykKKwkJeworCQkJaWYgKGxvZ19hdHRyaWJ1 dGVfY2hlY2socmVsT2lkLCBjdXJyX2F0dCwgYXVkaXRPaWQsIG1vZGUpKQorCQkJCXJldHVy biB0cnVlOworCQl9CisJfQorCisJLyogYm1zX2ZpcnN0X21lbWJlciBpcyBkZXN0cnVjdGl2 ZSwgc28gbWFrZSBhIGNvcHkgYmVmb3JlIHVzaW5nIGl0LiAqLworCXRtcFNldCA9IGJtc19j b3B5KGF0dHJpYnV0ZVNldCk7CisKKwkvKiBDaGVjayBlYWNoIGNvbHVtbiAqLworCXdoaWxl ICgoY29sID0gYm1zX2ZpcnN0X21lbWJlcih0bXBTZXQpKSA+PSAwKQorCXsKKwkJY29sICs9 IEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXI7CisKKwkJaWYgKGNvbCAhPSBJ bnZhbGlkQXR0ck51bWJlciAmJgorCQkJbG9nX2F0dHJpYnV0ZV9jaGVjayhyZWxPaWQsIGNv bCwgYXVkaXRPaWQsIG1vZGUpKQorCQl7CisJCQlyZXN1bHQgPSB0cnVlOworCQkJYnJlYWs7 CisJCX0KKwl9CisKKwkvKiBGcmVlIHRoZSBjb2x1bW4gc2V0ICovCisJYm1zX2ZyZWUodG1w U2V0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBDcmVhdGUgQXVkaXRFdmVu dHMgZm9yIFNFTEVDVC9ETUwgb3BlcmF0aW9ucyB2aWEgZXhlY3V0b3IgcGVybWlzc2lvbnMg Y2hlY2tzLgorICovCitzdGF0aWMgdm9pZAorbG9nX3NlbGVjdF9kbWwoT2lkIGF1ZGl0T2lk LCBMaXN0ICpyYW5nZVRhYmxzKQoreworCUxpc3RDZWxsICpscjsKKwlib29sIGZpcnN0ID0g dHJ1ZTsKKwlib29sIGZvdW5kID0gZmFsc2U7CisKKwkvKiBEbyBub3QgbG9nIGlmIHRoaXMg aXMgYW4gaW50ZXJuYWwgc3RhdGVtZW50ICovCisJaWYgKGludGVybmFsU3RhdGVtZW50KQor CQlyZXR1cm47CisKKwlmb3JlYWNoKGxyLCByYW5nZVRhYmxzKQorCXsKKwkJT2lkIHJlbE9p ZDsKKwkJUmVsYXRpb24gcmVsOworCQlSYW5nZVRibEVudHJ5ICpydGUgPSBsZmlyc3QobHIp OworCisJCS8qIFdlIG9ubHkgY2FyZSBhYm91dCB0YWJsZXMsIGFuZCBjYW4gaWdub3JlIHN1 YnF1ZXJpZXMgZXRjLiAqLworCQlpZiAocnRlLT5ydGVraW5kICE9IFJURV9SRUxBVElPTikK KwkJCWNvbnRpbnVlOworCisJCWZvdW5kID0gdHJ1ZTsKKworCQkvKgorCQkgKiBGaWx0ZXIg b3V0IGFueSBzeXN0ZW0gcmVsYXRpb25zCisJCSAqLworCQlyZWxPaWQgPSBydGUtPnJlbGlk OworCQlyZWwgPSByZWxhdGlvbl9vcGVuKHJlbE9pZCwgTm9Mb2NrKTsKKworCQlpZiAoSXNT eXN0ZW1OYW1lc3BhY2UoUmVsYXRpb25HZXROYW1lc3BhY2UocmVsKSkpCisJCXsKKwkJCXJl bGF0aW9uX2Nsb3NlKHJlbCwgTm9Mb2NrKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoK KwkJICogV2UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIHBhcnNldHJlZSBoZXJlLCBzbyB3 ZSBoYXZlIHRvIGdlbmVyYXRlCisJCSAqIHRoZSBub2RlIHR5cGUsIG9iamVjdCB0eXBlLCBh bmQgY29tbWFuZCB0YWcgYnkgZGVjb2RpbmcKKwkJICogcnRlLT5yZXF1aXJlZFBlcm1zIGFu ZCBydGUtPnJlbGtpbmQuCisJCSAqLworCQlpZiAocnRlLT5yZXF1aXJlZFBlcm1zICYgQUNM X0lOU0VSVCkKKwkJeworCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmxvZ1N0bXRM ZXZlbCA9IExPR1NUTVRfTU9EOworCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmNv bW1hbmRUYWcgPSBUX0luc2VydFN0bXQ7CisJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZl bnQuY29tbWFuZCA9IENPTU1BTkRfSU5TRVJUOworCQl9CisJCWVsc2UgaWYgKHJ0ZS0+cmVx dWlyZWRQZXJtcyAmIEFDTF9VUERBVEUpCisJCXsKKwkJCWF1ZGl0RXZlbnRTdGFjay0+YXVk aXRFdmVudC5sb2dTdG10TGV2ZWwgPSBMT0dTVE1UX01PRDsKKwkJCWF1ZGl0RXZlbnRTdGFj ay0+YXVkaXRFdmVudC5jb21tYW5kVGFnID0gVF9VcGRhdGVTdG10OworCQkJYXVkaXRFdmVu dFN0YWNrLT5hdWRpdEV2ZW50LmNvbW1hbmQgPSBDT01NQU5EX1VQREFURTsKKwkJfQorCQll bHNlIGlmIChydGUtPnJlcXVpcmVkUGVybXMgJiBBQ0xfREVMRVRFKQorCQl7CisJCQlhdWRp dEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQubG9nU3RtdExldmVsID0gTE9HU1RNVF9NT0Q7CisJ CQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQuY29tbWFuZFRhZyA9IFRfRGVsZXRlU3Rt dDsKKwkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5jb21tYW5kID0gQ09NTUFORF9E RUxFVEU7CisJCX0KKwkJZWxzZSBpZiAocnRlLT5yZXF1aXJlZFBlcm1zICYgQUNMX1NFTEVD VCkKKwkJeworCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmxvZ1N0bXRMZXZlbCA9 IExPR1NUTVRfQUxMOworCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmNvbW1hbmRU YWcgPSBUX1NlbGVjdFN0bXQ7CisJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQuY29t bWFuZCA9IENPTU1BTkRfU0VMRUNUOworCQl9CisJCWVsc2UKKwkJeworCQkJYXVkaXRFdmVu dFN0YWNrLT5hdWRpdEV2ZW50LmxvZ1N0bXRMZXZlbCA9IExPR1NUTVRfQUxMOworCQkJYXVk aXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmNvbW1hbmRUYWcgPSBUX0ludmFsaWQ7CisJCQlh dWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQuY29tbWFuZCA9IENPTU1BTkRfVU5LTk9XTjsK KwkJfQorCisJCS8qCisJCSAqIEZpbGwgdmFsdWVzIGluIHRoZSBldmVudCBzdHJ1Y3QgdGhh dCBhcmUgcmVxdWlyZWQgZm9yIHNlc3Npb24KKwkJICogbG9nZ2luZy4KKwkJICovCisJCWF1 ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5ncmFudGVkID0gZmFsc2U7CisKKwkJLyogSWYg dGhpcyBpcyB0aGUgZmlyc3QgcnRlIHRoZW4gc2Vzc2lvbiBsb2cgKi8KKwkJaWYgKGZpcnN0 KQorCQl7CisJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQub2JqZWN0TmFtZSA9ICIi OworCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50Lm9iamVjdFR5cGUgPSAiIjsKKwor CQkJbG9nX2F1ZGl0X2V2ZW50KGF1ZGl0RXZlbnRTdGFjayk7CisKKwkJCWZpcnN0ID0gZmFs c2U7CisJCX0KKworCQkvKiBHZXQgdGhlIHJlbGF0aW9uIHR5cGUgKi8KKwkJc3dpdGNoIChy dGUtPnJlbGtpbmQpCisJCXsKKwkJCWNhc2UgUkVMS0lORF9SRUxBVElPTjoKKwkJCQlhdWRp dEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQub2JqZWN0VHlwZSA9CisJCQkJCU9CSkVDVF9UWVBF X1RBQkxFOworCQkJCWJyZWFrOworCisJCQljYXNlIFJFTEtJTkRfSU5ERVg6CisJCQkJYXVk aXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50Lm9iamVjdFR5cGUgPQorCQkJCQlPQkpFQ1RfVFlQ RV9JTkRFWDsKKwkJCQlicmVhazsKKworCQkJY2FzZSBSRUxLSU5EX1NFUVVFTkNFOgorCQkJ CWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5vYmplY3RUeXBlID0KKwkJCQkJT0JKRUNU X1RZUEVfU0VRVUVOQ0U7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUkVMS0lORF9UT0FTVFZB TFVFOgorCQkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5vYmplY3RUeXBlID0KKwkJ CQkJT0JKRUNUX1RZUEVfVE9BU1RWQUxVRTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBSRUxL SU5EX1ZJRVc6CisJCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50Lm9iamVjdFR5cGUg PQorCQkJCQlPQkpFQ1RfVFlQRV9WSUVXOworCQkJCWJyZWFrOworCisJCQljYXNlIFJFTEtJ TkRfQ09NUE9TSVRFX1RZUEU6CisJCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50Lm9i amVjdFR5cGUgPQorCQkJCQlPQkpFQ1RfVFlQRV9DT01QT1NJVEVfVFlQRTsKKwkJCQlicmVh azsKKworCQkJY2FzZSBSRUxLSU5EX0ZPUkVJR05fVEFCTEU6CisJCQkJYXVkaXRFdmVudFN0 YWNrLT5hdWRpdEV2ZW50Lm9iamVjdFR5cGUgPQorCQkJCQlPQkpFQ1RfVFlQRV9GT1JFSUdO X1RBQkxFOworCQkJCWJyZWFrOworCisJCQljYXNlIFJFTEtJTkRfTUFUVklFVzoKKwkJCQlh dWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQub2JqZWN0VHlwZSA9CisJCQkJCU9CSkVDVF9U WVBFX01BVFZJRVc7CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJYXVkaXRFdmVu dFN0YWNrLT5hdWRpdEV2ZW50Lm9iamVjdFR5cGUgPQorCQkJCQlPQkpFQ1RfVFlQRV9VTktO T1dOOworCQkJCWJyZWFrOworCQl9CisKKwkJLyogR2V0IHRoZSByZWxhdGlvbiBuYW1lICov CisJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5vYmplY3ROYW1lID0KKwkJCXF1b3Rl X3F1YWxpZmllZF9pZGVudGlmaWVyKGdldF9uYW1lc3BhY2VfbmFtZSgKKwkJCQkJCQkJCSAg IFJlbGF0aW9uR2V0TmFtZXNwYWNlKHJlbCkpLAorCQkJCQkJCQkJICAgUmVsYXRpb25HZXRS ZWxhdGlvbk5hbWUocmVsKSk7CisJCXJlbGF0aW9uX2Nsb3NlKHJlbCwgTm9Mb2NrKTsKKwor CQkvKiBQZXJmb3JtIG9iamVjdCBhdWRpdGluZyBvbmx5IGlmIHRoZSBhdWRpdCByb2xlIGlz IHZhbGlkICovCisJCWlmIChhdWRpdE9pZCAhPSBJbnZhbGlkT2lkKQorCQl7CisJCQlBY2xN b2RlIGF1ZGl0UGVybXMgPSAoQUNMX1NFTEVDVCB8IEFDTF9VUERBVEUgfCBBQ0xfSU5TRVJU KSAmCisJCQkJCQkJCSBydGUtPnJlcXVpcmVkUGVybXM7CisKKwkJCS8qCisJCQkgKiBJZiBh bnkgb2YgdGhlIHJlcXVpcmVkIHBlcm1pc3Npb25zIGZvciB0aGUgcmVsYXRpb24gYXJlIGdy YW50ZWQKKwkJCSAqIHRvIHRoZSBhdWRpdCByb2xlIHRoZW4gYXVkaXQgdGhlIHJlbGF0aW9u CisJCQkgKi8KKwkJCWlmIChsb2dfcmVsYXRpb25fY2hlY2socmVsT2lkLCBhdWRpdE9pZCwg YXVkaXRQZXJtcykpCisJCQl7CisJCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50Lmdy YW50ZWQgPSB0cnVlOworCQkJfQorCisJCQkvKgorCQkJICogRWxzZSBjaGVjayBpZiB0aGUg YXVkaXQgcm9sZSBoYXMgY29sdW1uLWxldmVsIHBlcm1pc3Npb25zIGZvcgorCQkJICogc2Vs ZWN0LCBpbnNlcnQsIG9yIHVwZGF0ZS4KKwkJCSAqLworCQkJZWxzZSBpZiAoYXVkaXRQZXJt cyAhPSAwKQorCQkJeworCQkJCS8qCisJCQkJICogQ2hlY2sgdGhlIHNlbGVjdCBjb2x1bW5z IHRvIHNlZSBpZiB0aGUgYXVkaXQgcm9sZSBoYXMKKwkJCQkgKiBwcml2ZWxlZ2VzIG9uIGFu eSBvZiB0aGVtLgorCQkJCSAqLworCQkJCWlmIChhdWRpdFBlcm1zICYgQUNMX1NFTEVDVCkK KwkJCQl7CisJCQkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5ncmFudGVkID0KKwkJ CQkJCWxvZ19hdHRyaWJ1dGVfY2hlY2tfYW55KHJlbE9pZCwgYXVkaXRPaWQsCisJCQkJCQkJ CQkJCQlydGUtPnNlbGVjdGVkQ29scywKKwkJCQkJCQkJCQkJCUFDTF9TRUxFQ1QpOworCQkJ CX0KKworCQkJCS8qCisJCQkJICogQ2hlY2sgdGhlIG1vZGlmaWVkIGNvbHVtbnMgdG8gc2Vl IGlmIHRoZSBhdWRpdCByb2xlIGhhcworCQkJCSAqIHByaXZpbGVnZXMgb24gYW55IG9mIHRo ZW0uCisJCQkJICovCisJCQkJaWYgKCFhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQuZ3Jh bnRlZCkKKwkJCQl7CisJCQkJCWF1ZGl0UGVybXMgJj0gKEFDTF9JTlNFUlQgfCBBQ0xfVVBE QVRFKTsKKworCQkJCQlpZiAoYXVkaXRQZXJtcykKKwkJCQkJeworCQkJCQkJYXVkaXRFdmVu dFN0YWNrLT5hdWRpdEV2ZW50LmdyYW50ZWQgPQorCQkJCQkJCWxvZ19hdHRyaWJ1dGVfY2hl Y2tfYW55KHJlbE9pZCwgYXVkaXRPaWQsCisJCQkJCQkJCQkJCQkJcnRlLT5tb2RpZmllZENv bHMsCisJCQkJCQkJCQkJCQkJYXVkaXRQZXJtcyk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJ CX0KKworCQkvKiBPbmx5IGRvIHJlbGF0aW9uIGxldmVsIGxvZ2dpbmcgaWYgYSBncmFudCB3 YXMgZm91bmQuICovCisJCWlmIChhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQuZ3JhbnRl ZCkKKwkJeworCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmxvZ2dlZCA9IGZhbHNl OworCQkJbG9nX2F1ZGl0X2V2ZW50KGF1ZGl0RXZlbnRTdGFjayk7CisJCX0KKworCQlwZnJl ZShhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQub2JqZWN0TmFtZSk7CisJfQorCisJLyoK KwkgKiBJZiBubyB0YWJsZXMgd2VyZSBmb3VuZCB0aGF0IG1lYW5zIHRoYXQgUmFuZ2VUYmxz IHdhcyBlbXB0eSBvciBhbGwKKwkgKiByZWxhdGlvbnMgd2VyZSBpbiB0aGUgc3lzdGVtIHNj aGVtYS4gIEluIHRoYXQgY2FzZSBzdGlsbCBsb2cgYQorCSAqIHNlc3Npb24gcmVjb3JkLgor CSAqLworCWlmICghZm91bmQpCisJeworCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQu Z3JhbnRlZCA9IGZhbHNlOworCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQubG9nZ2Vk ID0gZmFsc2U7CisKKwkJbG9nX2F1ZGl0X2V2ZW50KGF1ZGl0RXZlbnRTdGFjayk7CisJfQor fQorCisvKgorICogQ3JlYXRlIEF1ZGl0RXZlbnRzIGZvciBjZXJ0YWluIGtpbmRzIG9mIENS RUFURSwgQUxURVIsIGFuZCBERUxFVEUgc3RhdGVtZW50cworICogd2hlcmUgdGhlIG9iamVj dCBjYW4gYmUgbG9nZ2VkLgorICovCitzdGF0aWMgdm9pZAorbG9nX2NyZWF0ZV9hbHRlcl9k cm9wKE9pZCBjbGFzc0lkLAorCQkJCQkgIE9pZCBvYmplY3RJZCkKK3sKKwkvKiBPbmx5IHBl cmZvcm0gd2hlbiBjbGFzcyBpcyByZWxhdGlvbiAqLworCWlmIChjbGFzc0lkID09IFJlbGF0 aW9uUmVsYXRpb25JZCkKKwl7CisJCVJlbGF0aW9uIHJlbDsKKwkJRm9ybV9wZ19jbGFzcyBj bGFzczsKKworCQkvKiBPcGVuIHRoZSByZWxhdGlvbiAqLworCQlyZWwgPSByZWxhdGlvbl9v cGVuKG9iamVjdElkLCBOb0xvY2spOworCisJCS8qIEZpbHRlciBvdXQgYW55IHN5c3RlbSBy ZWxhdGlvbnMgKi8KKwkJaWYgKElzVG9hc3ROYW1lc3BhY2UoUmVsYXRpb25HZXROYW1lc3Bh Y2UocmVsKSkpCisJCXsKKwkJCXJlbGF0aW9uX2Nsb3NlKHJlbCwgTm9Mb2NrKTsKKwkJCXJl dHVybjsKKwkJfQorCisJCS8qIEdldCByZWwgaW5mb3JtYXRpb24gYW5kIGNsb3NlIGl0ICov CisJCWNsYXNzID0gUmVsYXRpb25HZXRGb3JtKHJlbCk7CisJCWF1ZGl0RXZlbnRTdGFjay0+ YXVkaXRFdmVudC5vYmplY3ROYW1lID0KKwkJCXF1b3RlX3F1YWxpZmllZF9pZGVudGlmaWVy KGdldF9uYW1lc3BhY2VfbmFtZSgKKwkJCQkJCQkJCSAgIFJlbGF0aW9uR2V0TmFtZXNwYWNl KHJlbCkpLAorCQkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSk7CisJ CXJlbGF0aW9uX2Nsb3NlKHJlbCwgTm9Mb2NrKTsKKworCQkvKiBTZXQgb2JqZWN0IHR5cGUg YmFzZWQgb24gcmVsa2luZCAqLworCQlzd2l0Y2ggKGNsYXNzLT5yZWxraW5kKQorCQl7CisJ CQljYXNlIFJFTEtJTkRfUkVMQVRJT046CisJCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2 ZW50Lm9iamVjdFR5cGUgPQorCQkJCQlPQkpFQ1RfVFlQRV9UQUJMRTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBSRUxLSU5EX0lOREVYOgorCQkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRF dmVudC5vYmplY3RUeXBlID0KKwkJCQkJT0JKRUNUX1RZUEVfSU5ERVg7CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgUkVMS0lORF9TRVFVRU5DRToKKwkJCQlhdWRpdEV2ZW50U3RhY2stPmF1 ZGl0RXZlbnQub2JqZWN0VHlwZSA9CisJCQkJCU9CSkVDVF9UWVBFX1NFUVVFTkNFOworCQkJ CWJyZWFrOworCisJCQljYXNlIFJFTEtJTkRfVklFVzoKKwkJCQlhdWRpdEV2ZW50U3RhY2st PmF1ZGl0RXZlbnQub2JqZWN0VHlwZSA9CisJCQkJCU9CSkVDVF9UWVBFX1ZJRVc7CisJCQkJ YnJlYWs7CisKKwkJCWNhc2UgUkVMS0lORF9DT01QT1NJVEVfVFlQRToKKwkJCQlhdWRpdEV2 ZW50U3RhY2stPmF1ZGl0RXZlbnQub2JqZWN0VHlwZSA9CisJCQkJCU9CSkVDVF9UWVBFX0NP TVBPU0lURV9UWVBFOworCQkJCWJyZWFrOworCisJCQljYXNlIFJFTEtJTkRfRk9SRUlHTl9U QUJMRToKKwkJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQub2JqZWN0VHlwZSA9CisJ CQkJCU9CSkVDVF9UWVBFX0ZPUkVJR05fVEFCTEU7CisJCQkJYnJlYWs7CisKKwkJCWNhc2Ug UkVMS0lORF9NQVRWSUVXOgorCQkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5vYmpl Y3RUeXBlID0KKwkJCQkJT0JKRUNUX1RZUEVfTUFUVklFVzsKKwkJCQlicmVhazsKKworCQkJ LyoKKwkJCSAqIEFueSBvdGhlciBjYXNlcyB3aWxsIGJlIGhhbmRsZWQgYnkgbG9nX3V0aWxp dHlfY29tbWFuZCgpLgorCQkJICovCisJCQlkZWZhdWx0OgorCQkJCXJldHVybjsKKwkJCQli cmVhazsKKwkJfQorCX0KK30KKworLyoKKyAqIENyZWF0ZSBBdWRpdEV2ZW50cyBmb3Igbm9u LWNhdGFsb2cgZnVuY3Rpb24gZXhlY3V0aW9uLCBhcyBkZXRlY3RlZCBieQorICogbG9nX29i amVjdF9hY2Nlc3MoKSBiZWxvdy4KKyAqLworc3RhdGljIHZvaWQKK2xvZ19mdW5jdGlvbl9l eGVjdXRlKE9pZCBvYmplY3RJZCkKK3sKKwlIZWFwVHVwbGUgcHJvY3R1cDsKKwlGb3JtX3Bn X3Byb2MgcHJvYzsKKwlBdWRpdEV2ZW50U3RhY2tJdGVtICpzdGFja0l0ZW07CisKKwkvKiBH ZXQgaW5mbyBhYm91dCB0aGUgZnVuY3Rpb24uICovCisJcHJvY3R1cCA9IFNlYXJjaFN5c0Nh Y2hlMShQUk9DT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisKKwlpZiAoIXBy b2N0dXApCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBmdW5jdGlv biAldSIsIG9iamVjdElkKTsKKwlwcm9jID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHBy b2N0dXApOworCisJLyoKKwkgKiBMb2dnaW5nIGV4ZWN1dGlvbiBvZiBhbGwgcGdfY2F0YWxv ZyBmdW5jdGlvbnMgd291bGQgbWFrZSB0aGUgbG9nCisJICogdW51c2FibHkgbm9pc3kuCisJ ICovCisJaWYgKElzU3lzdGVtTmFtZXNwYWNlKHByb2MtPnByb25hbWVzcGFjZSkpCisJewor CQlSZWxlYXNlU3lzQ2FjaGUocHJvY3R1cCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBQdXNo IGF1ZGl0IGV2ZW50IG9udG8gdGhlIHN0YWNrICovCisJc3RhY2tJdGVtID0gc3RhY2tfcHVz aCgpOworCisJLyogR2VuZXJhdGUgdGhlIGZ1bGx5LXF1YWxpZmllZCBmdW5jdGlvbiBuYW1l LiAqLworCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5vYmplY3ROYW1lID0KKwkJcXVvdGVfcXVh bGlmaWVkX2lkZW50aWZpZXIoZ2V0X25hbWVzcGFjZV9uYW1lKHByb2MtPnByb25hbWVzcGFj ZSksCisJCQkJCQkJCSAgIE5hbWVTdHIocHJvYy0+cHJvbmFtZSkpOworCVJlbGVhc2VTeXND YWNoZShwcm9jdHVwKTsKKworCS8qIExvZyB0aGUgZnVuY3Rpb24gY2FsbCAqLworCXN0YWNr SXRlbS0+YXVkaXRFdmVudC5sb2dTdG10TGV2ZWwgPSBMT0dTVE1UX0FMTDsKKwlzdGFja0l0 ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZFRhZyA9IFRfRG9TdG10OworCXN0YWNrSXRlbS0+YXVk aXRFdmVudC5jb21tYW5kID0gQ09NTUFORF9FWEVDVVRFOworCXN0YWNrSXRlbS0+YXVkaXRF dmVudC5vYmplY3RUeXBlID0gT0JKRUNUX1RZUEVfRlVOQ1RJT047CisJc3RhY2tJdGVtLT5h dWRpdEV2ZW50LmNvbW1hbmRUZXh0ID0gc3RhY2tJdGVtLT5uZXh0LT5hdWRpdEV2ZW50LmNv bW1hbmRUZXh0OworCisJbG9nX2F1ZGl0X2V2ZW50KHN0YWNrSXRlbSk7CisKKwkvKiBQb3Ag YXVkaXQgZXZlbnQgZnJvbSB0aGUgc3RhY2sgKi8KKwlzdGFja19wb3AoKTsKK30KKworLyoK KyAqIExvZyBvYmplY3QgYWNjZXNzZXMgKHdoaWNoIGlzIG1vcmUgYWJvdXQgRERMIHRoYW4g RE1MLCBldmVuIHRob3VnaCBpdAorICogc291bmRzIGxpa2UgdGhlIGxhdHRlcikuCisgKi8K K3N0YXRpYyB2b2lkCitsb2dfb2JqZWN0X2FjY2VzcyhPYmplY3RBY2Nlc3NUeXBlIGFjY2Vz cywKKwkJCQkgIE9pZCBjbGFzc0lkLAorCQkJCSAgT2lkIG9iamVjdElkLAorCQkJCSAgaW50 IHN1YklkLAorCQkJCSAgdm9pZCAqYXJnKQoreworCXN3aXRjaCAoYWNjZXNzKQorCXsKKwkJ LyogTG9nIGV4ZWN1dGUgKi8KKwkJY2FzZSBPQVRfRlVOQ1RJT05fRVhFQ1VURToKKwkJCWlm IChhdWRpdExvZ0JpdG1hcCAmIExPR19GVU5DVElPTikKKwkJCQlsb2dfZnVuY3Rpb25fZXhl Y3V0ZShvYmplY3RJZCk7CisJCQlicmVhazsKKworCQkvKiBMb2cgY3JlYXRlICovCisJCWNh c2UgT0FUX1BPU1RfQ1JFQVRFOgorCQkJaWYgKGF1ZGl0TG9nQml0bWFwICYgTE9HX0RETCkK KwkJCXsKKwkJCQlPYmplY3RBY2Nlc3NQb3N0Q3JlYXRlICpwYyA9IGFyZzsKKworCQkJCWlm IChwYy0+aXNfaW50ZXJuYWwpCisJCQkJCXJldHVybjsKKworCQkJCWxvZ19jcmVhdGVfYWx0 ZXJfZHJvcChjbGFzc0lkLCBvYmplY3RJZCk7CisJCQl9CisJCQlicmVhazsKKworCQkvKiBM b2cgYWx0ZXIgKi8KKwkJY2FzZSBPQVRfUE9TVF9BTFRFUjoKKwkJCWlmIChhdWRpdExvZ0Jp dG1hcCAmIExPR19EREwpCisJCQl7CisJCQkJT2JqZWN0QWNjZXNzUG9zdEFsdGVyICpwYSA9 IGFyZzsKKworCQkJCWlmIChwYS0+aXNfaW50ZXJuYWwpCisJCQkJCXJldHVybjsKKworCQkJ CWxvZ19jcmVhdGVfYWx0ZXJfZHJvcChjbGFzc0lkLCBvYmplY3RJZCk7CisJCQl9CisJCQli cmVhazsKKworCQkvKiBMb2cgZHJvcCAqLworCQljYXNlIE9BVF9EUk9QOgorCQkJaWYgKGF1 ZGl0TG9nQml0bWFwICYgTE9HX0RETCkKKwkJCXsKKwkJCQlPYmplY3RBY2Nlc3NEcm9wICpk cm9wID0gYXJnOworCisJCQkJaWYgKGRyb3AtPmRyb3BmbGFncyAmIFBFUkZPUk1fREVMRVRJ T05fSU5URVJOQUwpCisJCQkJCXJldHVybjsKKworCQkJCWxvZ19jcmVhdGVfYWx0ZXJfZHJv cChjbGFzc0lkLCBvYmplY3RJZCk7CisJCQl9CisJCQlicmVhazsKKworCQkvKiBBbGwgb3Ro ZXJzIHByb2Nlc3NlZCBieSBsb2dfdXRpbGl0eV9jb21tYW5kKCkgKi8KKwkJZGVmYXVsdDoK KwkJCWJyZWFrOworCX0KK30KKworLyoKKyAqIEhvb2sgZnVuY3Rpb25zCisgKi8KK3N0YXRp YyBFeGVjdXRvckNoZWNrUGVybXNfaG9va190eXBlIG5leHRfRXhlY3V0b3JDaGVja1Blcm1z X2hvb2sgPSBOVUxMOworc3RhdGljIFByb2Nlc3NVdGlsaXR5X2hvb2tfdHlwZSBuZXh0X1By b2Nlc3NVdGlsaXR5X2hvb2sgPSBOVUxMOworc3RhdGljIG9iamVjdF9hY2Nlc3NfaG9va190 eXBlIG5leHRfb2JqZWN0X2FjY2Vzc19ob29rID0gTlVMTDsKK3N0YXRpYyBFeGVjdXRvclN0 YXJ0X2hvb2tfdHlwZSBuZXh0X0V4ZWN1dG9yU3RhcnRfaG9vayA9IE5VTEw7CitzdGF0aWMg RXhlY3V0b3JFbmRfaG9va190eXBlIG5leHRfRXhlY3V0b3JFbmRfaG9vayA9IE5VTEw7CisK Ky8qCisgKiBIb29rIEV4ZWN1dG9yU3RhcnQgdG8gZ2V0IHRoZSBxdWVyeSB0ZXh0IGFuZCBi YXNpYyBjb21tYW5kIHR5cGUgZm9yIHF1ZXJpZXMKKyAqIHRoYXQgZG8gbm90IGNvbnRhaW4g YSB0YWJsZSBzbyBjYW4ndCBiZSBpZGVuaXRpZmllZCBhY2N1cmF0ZWx5IGluCisgKiBFeGVj dXRvckNoZWNrUGVybXMuCisgKi8KK3N0YXRpYyB2b2lkCitwZ2F1ZGl0X0V4ZWN1dG9yU3Rh cnRfaG9vayhRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncykKK3sKKwlBdWRpdEV2 ZW50U3RhY2tJdGVtICpzdGFja0l0ZW0gPSBOVUxMOworCisJaWYgKCFpbnRlcm5hbFN0YXRl bWVudCkKKwl7CisJCS8qIEFsbG9jYXRlIHRoZSBhdWRpdCBldmVudCAqLworCQlzdGFja0l0 ZW0gPSBzdGFja19wdXNoKCk7CisKKwkJLyogSW5pdGlhbGl6ZSBjb21tYW5kICovCisJCXN3 aXRjaCAocXVlcnlEZXNjLT5vcGVyYXRpb24pCisJCXsKKwkJCWNhc2UgQ01EX1NFTEVDVDoK KwkJCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQubG9nU3RtdExldmVsID0gTE9HU1RNVF9BTEw7 CisJCQkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmNvbW1hbmRUYWcgPSBUX1NlbGVjdFN0bXQ7 CisJCQkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmNvbW1hbmQgPSBDT01NQU5EX1NFTEVDVDsK KwkJCQlicmVhazsKKworCQkJY2FzZSBDTURfSU5TRVJUOgorCQkJCXN0YWNrSXRlbS0+YXVk aXRFdmVudC5sb2dTdG10TGV2ZWwgPSBMT0dTVE1UX01PRDsKKwkJCQlzdGFja0l0ZW0tPmF1 ZGl0RXZlbnQuY29tbWFuZFRhZyA9IFRfSW5zZXJ0U3RtdDsKKwkJCQlzdGFja0l0ZW0tPmF1 ZGl0RXZlbnQuY29tbWFuZCA9IENPTU1BTkRfSU5TRVJUOworCQkJCWJyZWFrOworCisJCQlj YXNlIENNRF9VUERBVEU6CisJCQkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmxvZ1N0bXRMZXZl bCA9IExPR1NUTVRfTU9EOworCQkJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5jb21tYW5kVGFn ID0gVF9VcGRhdGVTdG10OworCQkJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5jb21tYW5kID0g Q09NTUFORF9VUERBVEU7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQ01EX0RFTEVURToKKwkJ CQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQubG9nU3RtdExldmVsID0gTE9HU1RNVF9NT0Q7CisJ CQkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmNvbW1hbmRUYWcgPSBUX0RlbGV0ZVN0bXQ7CisJ CQkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmNvbW1hbmQgPSBDT01NQU5EX0RFTEVURTsKKwkJ CQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQubG9n U3RtdExldmVsID0gTE9HU1RNVF9BTEw7CisJCQkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmNv bW1hbmRUYWcgPSBUX0ludmFsaWQ7CisJCQkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmNvbW1h bmQgPSBDT01NQU5EX1VOS05PV047CisJCQkJYnJlYWs7CisJCX0KKworCQkvKiBJbml0aWFs aXplIHRoZSBhdWRpdCBldmVudCAqLworCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQub2JqZWN0 TmFtZSA9ICIiOworCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQub2JqZWN0VHlwZSA9ICIiOwor CQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZFRleHQgPSBxdWVyeURlc2MtPnNvdXJj ZVRleHQ7CisJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5wYXJhbUxpc3QgPSBxdWVyeURlc2Mt PnBhcmFtczsKKwl9CisKKwkvKiBDYWxsIHRoZSBwcmV2aW91cyBob29rIG9yIHN0YW5kYXJk IGZ1bmN0aW9uICovCisJaWYgKG5leHRfRXhlY3V0b3JTdGFydF9ob29rKQorCQluZXh0X0V4 ZWN1dG9yU3RhcnRfaG9vayhxdWVyeURlc2MsIGVmbGFncyk7CisJZWxzZQorCQlzdGFuZGFy ZF9FeGVjdXRvclN0YXJ0KHF1ZXJ5RGVzYywgZWZsYWdzKTsKK30KKworLyoKKyAqIEhvb2sg RXhlY3V0b3JDaGVja1Blcm1zIHRvIGRvIHNlc3Npb24gYW5kIG9iamVjdCBhdWRpdGluZyBm b3IgRE1MLgorICovCitzdGF0aWMgYm9vbAorcGdhdWRpdF9FeGVjdXRvckNoZWNrUGVybXNf aG9vayhMaXN0ICpyYW5nZVRhYmxzLCBib29sIGFib3J0KQoreworCU9pZCBhdWRpdE9pZDsK KworCS8qIEdldCB0aGUgYXVkaXQgb2lkIGlmIHRoZSByb2xlIGV4aXN0cy4gKi8KKwlhdWRp dE9pZCA9IGdldF9yb2xlX29pZChhdWRpdFJvbGUsIHRydWUpOworCisJLyogTG9nIERNTCBp ZiB0aGUgYXVkaXQgcm9sZSBpcyB2YWxpZCBvciBzZXNzaW9uIGxvZ2dpbmcgaXMgZW5hYmxl ZC4gKi8KKwlpZiAoKGF1ZGl0T2lkICE9IEludmFsaWRPaWQgfHwgYXVkaXRMb2dCaXRtYXAg IT0gMCkgJiYKKwkJIUlzQWJvcnRlZFRyYW5zYWN0aW9uQmxvY2tTdGF0ZSgpKQorCQlsb2df c2VsZWN0X2RtbChhdWRpdE9pZCwgcmFuZ2VUYWJscyk7CisKKwkvKiBDYWxsIHRoZSBuZXh0 IGhvb2sgZnVuY3Rpb24uICovCisJaWYgKG5leHRfRXhlY3V0b3JDaGVja1Blcm1zX2hvb2sg JiYKKwkJISgqbmV4dF9FeGVjdXRvckNoZWNrUGVybXNfaG9vaykgKHJhbmdlVGFibHMsIGFi b3J0KSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBI b29rIEV4ZWN1dG9yRW5kIHRvIHBvcCBzdGF0ZW1lbnQgYXVkaXQgZXZlbnQgb2ZmIHRoZSBz dGFjay4KKyAqLworc3RhdGljIHZvaWQKK3BnYXVkaXRfRXhlY3V0b3JFbmRfaG9vayhRdWVy eURlc2MgKnF1ZXJ5RGVzYykKK3sKKwkvKiBDYWxsIHRoZSBuZXh0IGhvb2sgb3Igc3RhbmRh cmQgZnVuY3Rpb24gKi8KKwlpZiAobmV4dF9FeGVjdXRvckVuZF9ob29rKQorCQluZXh0X0V4 ZWN1dG9yRW5kX2hvb2socXVlcnlEZXNjKTsKKwllbHNlCisJCXN0YW5kYXJkX0V4ZWN1dG9y RW5kKHF1ZXJ5RGVzYyk7CisKKwkvKiBQb3AgdGhlIGF1ZGl0IGV2ZW50IG9mZiB0aGUgc3Rh Y2sgKi8KKwlpZiAoIWludGVybmFsU3RhdGVtZW50KQorCXsKKwkJc3RhY2tfcG9wKCk7CisJ fQorfQorCisvKgorICogSG9vayBQcm9jZXNzVXRpbGl0eSB0byBkbyBzZXNzaW9uIGF1ZGl0 aW5nIGZvciBEREwgYW5kIHV0aWxpdHkgY29tbWFuZHMuCisgKi8KK3N0YXRpYyB2b2lkCitw Z2F1ZGl0X1Byb2Nlc3NVdGlsaXR5X2hvb2soTm9kZSAqcGFyc2V0cmVlLAorCQkJCQkJCWNv bnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAorCQkJCQkJCVByb2Nlc3NVdGlsaXR5Q29udGV4dCBj b250ZXh0LAorCQkJCQkJCVBhcmFtTGlzdEluZm8gcGFyYW1zLAorCQkJCQkJCURlc3RSZWNl aXZlciAqZGVzdCwKKwkJCQkJCQljaGFyICpjb21wbGV0aW9uVGFnKQoreworCUF1ZGl0RXZl bnRTdGFja0l0ZW0gKnN0YWNrSXRlbSA9IE5VTEw7CisKKwkvKiBBbGxvY2F0ZSB0aGUgYXVk aXQgZXZlbnQgKi8KKwlpZiAoIUlzQWJvcnRlZFRyYW5zYWN0aW9uQmxvY2tTdGF0ZSgpKQor CXsKKwkJLyogUHJvY2VzcyB0b3AgbGV2ZWwgdXRpbGl0eSBzdGF0ZW1lbnQgKi8KKwkJaWYg KGNvbnRleHQgPT0gUFJPQ0VTU19VVElMSVRZX1RPUExFVkVMKQorCQl7CisJCQlpZiAoYXVk aXRFdmVudFN0YWNrICE9IE5VTEwpCisJCQkJZWxvZyhFUlJPUiwgInBnX2F1ZGl0IHN0YWNr IGlzIG5vdCBlbXB0eSIpOworCisJCQkvKiBTZXQgcGFyYW1zICovCisJCQlzdGFja0l0ZW0g PSBzdGFja19wdXNoKCk7CisJCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQucGFyYW1MaXN0ID0g cGFyYW1zOworCQl9CisJCWVsc2UKKwkJCXN0YWNrSXRlbSA9IHN0YWNrX3B1c2goKTsKKwor CQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQubG9nU3RtdExldmVsID0gR2V0Q29tbWFuZExvZ0xl dmVsKHBhcnNldHJlZSk7CisJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5jb21tYW5kVGFnID0g bm9kZVRhZyhwYXJzZXRyZWUpOworCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZCA9 IENyZWF0ZUNvbW1hbmRUYWcocGFyc2V0cmVlKTsKKwkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50 Lm9iamVjdE5hbWUgPSAiIjsKKwkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50Lm9iamVjdFR5cGUg PSAiIjsKKwkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmNvbW1hbmRUZXh0ID0gcXVlcnlTdHJp bmc7CisKKwkJLyoKKwkJICogSWYgdGhpcyBpcyBhIERPIGJsb2NrIGxvZyBpdCBiZWZvcmUg Y2FsbGluZyB0aGUgbmV4dCBQcm9jZXNzVXRpbGl0eQorCQkgKiBob29rLgorCQkgKi8KKwkJ aWYgKGF1ZGl0TG9nQml0bWFwICE9IDAgJiYKKwkJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5j b21tYW5kVGFnID09IFRfRG9TdG10ICYmCisJCQkhSXNBYm9ydGVkVHJhbnNhY3Rpb25CbG9j a1N0YXRlKCkpCisJCXsKKwkJCWxvZ19hdWRpdF9ldmVudChzdGFja0l0ZW0pOworCQl9CisJ fQorCisJLyogQ2FsbCB0aGUgc3RhbmRhcmQgcHJvY2VzcyB1dGlsaXR5IGNoYWluLiAqLwor CWlmIChuZXh0X1Byb2Nlc3NVdGlsaXR5X2hvb2spCisJCSgqbmV4dF9Qcm9jZXNzVXRpbGl0 eV9ob29rKSAocGFyc2V0cmVlLCBxdWVyeVN0cmluZywgY29udGV4dCwKKwkJCQkJCQkJCSBw YXJhbXMsIGRlc3QsIGNvbXBsZXRpb25UYWcpOworCWVsc2UKKwkJc3RhbmRhcmRfUHJvY2Vz c1V0aWxpdHkocGFyc2V0cmVlLCBxdWVyeVN0cmluZywgY29udGV4dCwKKwkJCQkJCQkJcGFy YW1zLCBkZXN0LCBjb21wbGV0aW9uVGFnKTsKKworCS8qIFByb2Nlc3MgdGhlIGF1ZGl0IGV2 ZW50IGlmIHRoZXJlIGlzIG9uZS4gKi8KKwlpZiAoc3RhY2tJdGVtICE9IE5VTEwpCisJewor CQkvKiBMb2cgdGhlIHV0aWxpdHkgY29tbWFuZCBpZiBsb2dnaW5nIGlzIG9uLCB0aGUgY29t bWFuZCBoYXMgbm90IGFscmVhZHkKKwkJICogYmVlbiBsb2dnZWQgYnkgYW5vdGhlciBob29r LCBhbmQgdGhlIHRyYW5zYWN0aW9uIGlzIG5vdCBhYm9ydGVkLiAqLworCQlpZiAoYXVkaXRM b2dCaXRtYXAgIT0gMCAmJiAhc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmxvZ2dlZCAmJgorCQkJ IUlzQWJvcnRlZFRyYW5zYWN0aW9uQmxvY2tTdGF0ZSgpKQorCQkJbG9nX2F1ZGl0X2V2ZW50 KHN0YWNrSXRlbSk7CisKKwkJaWYgKGNvbnRleHQgPT0gUFJPQ0VTU19VVElMSVRZX1RPUExF VkVMKQorCQl7CisJCQl3aGlsZSAoYXVkaXRFdmVudFN0YWNrICE9IE5VTEwpCisJCQkJc3Rh Y2tfcG9wKCk7CisJCX0KKwkJZWxzZQorCQkJc3RhY2tfcG9wKCk7CisJfQorfQorCisvKgor ICogSG9vayBvYmplY3RfYWNjZXNzX2hvb2sgdG8gcHJvdmlkZSBmdWxseS1xdWFsaWZpZWQg b2JqZWN0IG5hbWVzIGZvciBleGVjdXRlLAorICogY3JlYXRlLCBkcm9wLCBhbmQgYWx0ZXIg Y29tbWFuZHMuICBNb3N0IG9mIHRoZSBhdWRpdCBpbmZvcm1hdGlvbiBpcyBmaWxsZWQgaW4K KyAqIGJ5IGxvZ191dGlsaXR5X2NvbW1hbmQoKS4KKyAqLworc3RhdGljIHZvaWQKK3BnYXVk aXRfb2JqZWN0X2FjY2Vzc19ob29rKE9iamVjdEFjY2Vzc1R5cGUgYWNjZXNzLAorCQkJCQkJ ICAgT2lkIGNsYXNzSWQsCisJCQkJCQkgICBPaWQgb2JqZWN0SWQsCisJCQkJCQkgICBpbnQg c3ViSWQsCisJCQkJCQkgICB2b2lkICphcmcpCit7CisJaWYgKGF1ZGl0TG9nQml0bWFwICE9 IDAgJiYgIUlzQWJvcnRlZFRyYW5zYWN0aW9uQmxvY2tTdGF0ZSgpICYmCisJCWF1ZGl0TG9n Qml0bWFwICYgKExPR19EREwgfCBMT0dfRlVOQ1RJT04pKQorCQlsb2dfb2JqZWN0X2FjY2Vz cyhhY2Nlc3MsIGNsYXNzSWQsIG9iamVjdElkLCBzdWJJZCwgYXJnKTsKKworCWlmIChuZXh0 X29iamVjdF9hY2Nlc3NfaG9vaykKKwkJKCpuZXh0X29iamVjdF9hY2Nlc3NfaG9vaykgKGFj Y2VzcywgY2xhc3NJZCwgb2JqZWN0SWQsIHN1YklkLCBhcmcpOworfQorCisvKgorICogRXZl bnQgdHJpZ2dlciBmdW5jdGlvbnMKKyAqLworCisvKgorICogU3VwcGx5IGFkZGl0aW9uYWwg ZGF0YSBmb3IgKG5vbiBkcm9wKSBzdGF0ZW1lbnRzIHRoYXQgaGF2ZSBldmVudCB0cmlnZ2Vy CisgKiBzdXBwb3J0IGFuZCBjYW4gYmUgZGVwYXJzZWQuCisgKi8KK0RhdHVtCitwZ19hdWRp dF9kZGxfY29tbWFuZF9lbmQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwkvKiBDb250aW51ZSBv bmx5IGlmIHNlc3Npb24gbG9nZ2luZyBpcyBlbmFibGVkICovCisJaWYgKGF1ZGl0TG9nQml0 bWFwICE9IExPR19EREwpCisJeworCQlFdmVudFRyaWdnZXJEYXRhICpldmVudERhdGE7CisJ CWludAkJCQkgIHJlc3VsdCwgcm93OworCQlUdXBsZURlc2MJCSAgc3BpVHVwRGVzYzsKKwkJ Y29uc3QgY2hhcgkJICpxdWVyeTsKKwkJTWVtb3J5Q29udGV4dCAJICBjb250ZXh0UXVlcnk7 CisJCU1lbW9yeUNvbnRleHQgCSAgY29udGV4dE9sZDsKKworCQkvKiBUaGlzIGlzIGFuIGlu dGVybmFsIHN0YXRlbWVudCAtIGRvIG5vdCBsb2cgaXQgKi8KKwkJaW50ZXJuYWxTdGF0ZW1l bnQgPSB0cnVlOworCisJCS8qIE1ha2Ugc3VyZSB0aGUgZnVjdGlvbiB3YXMgZmlyZWQgYXMg YSB0cmlnZ2VyICovCisJCWlmICghQ0FMTEVEX0FTX0VWRU5UX1RSSUdHRVIoZmNpbmZvKSkK KwkJCWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7 CisKKwkJLyogU3dpdGNoIG1lbW9yeSBjb250ZXh0ICovCisJCWNvbnRleHRRdWVyeSA9IEFs bG9jU2V0Q29udGV4dENyZWF0ZSgKKwkJCQkJCUN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJ CQkJInBnYXVkaXRfZnVuY19kZGxfY29tbWFuZF9lbmQgdGVtcG9yYXJ5IGNvbnRleHQiLAor CQkJCQkJQUxMT0NTRVRfREVGQVVMVF9NSU5TSVpFLAorCQkJCQkJQUxMT0NTRVRfREVGQVVM VF9JTklUU0laRSwKKwkJCQkJCUFMTE9DU0VUX0RFRkFVTFRfTUFYU0laRSk7CisJCWNvbnRl eHRPbGQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oY29udGV4dFF1ZXJ5KTsKKworCQkvKiBH ZXQgaW5mb3JtYXRpb24gYWJvdXQgdHJpZ2dlcmVkIGV2ZW50cyAqLworCQlldmVudERhdGEg PSAoRXZlbnRUcmlnZ2VyRGF0YSAqKSBmY2luZm8tPmNvbnRleHQ7CisKKwkJLyogUmV0dXJu IG9iamVjdHMgYWZmZWN0ZWQgYnkgdGhlIChub24gZHJvcCkgRERMIHN0YXRlbWVudCAqLwor CQlxdWVyeSA9ICJTRUxFQ1QgY2xhc3NpZCwgb2JqaWQsIG9ianN1YmlkLCBVUFBFUihvYmpl Y3RfdHlwZSksIHNjaGVtYSxcbiIKKwkJCQkiICAgICAgIGlkZW50aXR5LCBjb21tYW5kXG4i CisJCQkJIiAgRlJPTSBwZ19ldmVudF90cmlnZ2VyX2dldF9jcmVhdGlvbl9jb21tYW5kcygp IjsKKworCQkvKiBBdHRlbXB0IHRvIGNvbm5lY3QgKi8KKwkJcmVzdWx0ID0gU1BJX2Nvbm5l Y3QoKTsKKworCQlpZiAocmVzdWx0IDwgMCkKKwkJCWVsb2coRVJST1IsICJwZ19hdWRpdF9k ZGxfY29tbWFuZF9lbmQ6IFNQSV9jb25uZWN0IHJldHVybmVkICVkIiwKKwkJCQkJCXJlc3Vs dCk7CisKKwkJLyogRXhlY3V0ZSB0aGUgcXVlcnkgKi8KKwkJcmVzdWx0ID0gU1BJX2V4ZWN1 dGUocXVlcnksIHRydWUsIDApOworCisJCWlmIChyZXN1bHQgIT0gU1BJX09LX1NFTEVDVCkK KwkJCWVsb2coRVJST1IsICJwZ19hdWRpdF9kZGxfY29tbWFuZF9lbmQ6IFNQSV9leGVjdXRl IHJldHVybmVkICVkIiwKKwkJCQkJCXJlc3VsdCk7CisKKwkJLyogSXRlcmF0ZSByZXR1cm5l ZCByb3dzICovCisJCXNwaVR1cERlc2MgPSBTUElfdHVwdGFibGUtPnR1cGRlc2M7CisKKwkJ Zm9yIChyb3cgPSAwOyByb3cgPCBTUElfcHJvY2Vzc2VkOyByb3crKykKKwkJeworCQkJSGVh cFR1cGxlICBzcGlUdXBsZTsKKwkJCWJvb2wJICAgaXNOdWxsOworCisJCQlzcGlUdXBsZSA9 IFNQSV90dXB0YWJsZS0+dmFsc1tyb3ddOworCisJCQkvKiBTdXBwbHkgYWRkaXRpb24gZGF0 YSB0byBjdXJyZW50IGF1ZGl0IGV2ZW50ICovCisJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0 RXZlbnQubG9nU3RtdExldmVsID0KKwkJCQlHZXRDb21tYW5kTG9nTGV2ZWwoZXZlbnREYXRh LT5wYXJzZXRyZWUpOworCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmNvbW1hbmRU YWcgPQorCQkJCW5vZGVUYWcoZXZlbnREYXRhLT5wYXJzZXRyZWUpOworCQkJYXVkaXRFdmVu dFN0YWNrLT5hdWRpdEV2ZW50LmNvbW1hbmQgPQorCQkJCUNyZWF0ZUNvbW1hbmRUYWcoZXZl bnREYXRhLT5wYXJzZXRyZWUpOworCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50Lm9i amVjdE5hbWUgPQorCQkJCVNQSV9nZXR2YWx1ZShzcGlUdXBsZSwgc3BpVHVwRGVzYywgNik7 CisJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQub2JqZWN0VHlwZSA9CisJCQkJU1BJ X2dldHZhbHVlKHNwaVR1cGxlLCBzcGlUdXBEZXNjLCA0KTsKKwkJCWF1ZGl0RXZlbnRTdGFj ay0+YXVkaXRFdmVudC5jb21tYW5kVGV4dCA9CisJCQkJVGV4dERhdHVtR2V0Q1N0cmluZygK KwkJCQkJRGlyZWN0RnVuY3Rpb25DYWxsMShwZ19ldmVudF90cmlnZ2VyX2V4cGFuZF9jb21t YW5kLAorCQkJCQkJCQkJCVNQSV9nZXRiaW52YWwoc3BpVHVwbGUsIHNwaVR1cERlc2MsCisJ CQkJCQkJCQkJCQkJICA3LCAmaXNOdWxsKSkpOworCisJCQkvKiBMb2cgdGhlIGF1ZGl0IGV2 ZW50ICovCisJCQlsb2dfYXVkaXRfZXZlbnQoYXVkaXRFdmVudFN0YWNrKTsKKwkJfQorCisJ CS8qIENvbXBsZXRlIHRoZSBxdWVyeSAqLworCQlTUElfZmluaXNoKCk7CisKKwkJLyogU3dp dGNoIHRvIHRoZSBvbGQgbWVtb3J5IGNvbnRleHQgKi8KKwkJTWVtb3J5Q29udGV4dFN3aXRj aFRvKGNvbnRleHRPbGQpOworCQlNZW1vcnlDb250ZXh0RGVsZXRlKGNvbnRleHRRdWVyeSk7 CisKKwkJLyogTm8gbG9uZ2VyIGluIGFuIGludGVybmFsIHN0YXRlbWVudCAqLworCQlpbnRl cm5hbFN0YXRlbWVudCA9IGZhbHNlOworCX0KKworCVBHX1JFVFVSTl9OVUxMKCk7Cit9CisK Ky8qCisgKiBTdXBwbHkgYWRkaXRpb25hbCBkYXRhIGZvciBkcm9wIHN0YXRlbWVudHMgdGhh dCBoYXZlIGV2ZW50IHRyaWdnZXIgc3VwcG9ydC4KKyAqLworRGF0dW0KK3BnX2F1ZGl0X3Nx bF9kcm9wKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJaWYgKGF1ZGl0TG9nQml0bWFwICYgTE9H X0RETCkKKwl7CisJCWludAkJCQkgIHJlc3VsdCwgcm93OworCQlUdXBsZURlc2MJCSAgc3Bp VHVwRGVzYzsKKwkJY29uc3QgY2hhcgkJICpxdWVyeTsKKwkJTWVtb3J5Q29udGV4dCAJICBj b250ZXh0UXVlcnk7CisJCU1lbW9yeUNvbnRleHQgCSAgY29udGV4dE9sZDsKKworCQkvKiBU aGlzIGlzIGFuIGludGVybmFsIHN0YXRlbWVudCAtIGRvIG5vdCBsb2cgaXQgKi8KKwkJaW50 ZXJuYWxTdGF0ZW1lbnQgPSB0cnVlOworCisJCS8qIE1ha2Ugc3VyZSB0aGUgZnVjdGlvbiB3 YXMgZmlyZWQgYXMgYSB0cmlnZ2VyICovCisJCWlmICghQ0FMTEVEX0FTX0VWRU5UX1RSSUdH RVIoZmNpbmZvKSkKKwkJCWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dl ciBtYW5hZ2VyIik7CisKKwkJLyogU3dpdGNoIG1lbW9yeSBjb250ZXh0ICovCisJCWNvbnRl eHRRdWVyeSA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZSgKKwkJCQkJCUN1cnJlbnRNZW1vcnlD b250ZXh0LAorCQkJCQkJInBnYXVkaXRfZnVuY19kZGxfY29tbWFuZF9lbmQgdGVtcG9yYXJ5 IGNvbnRleHQiLAorCQkJCQkJQUxMT0NTRVRfREVGQVVMVF9NSU5TSVpFLAorCQkJCQkJQUxM T0NTRVRfREVGQVVMVF9JTklUU0laRSwKKwkJCQkJCUFMTE9DU0VUX0RFRkFVTFRfTUFYU0la RSk7CisJCWNvbnRleHRPbGQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oY29udGV4dFF1ZXJ5 KTsKKworCQkvKiBSZXR1cm4gb2JqZWN0cyBhZmZlY3RlZCBieSB0aGUgZHJvcCBzdGF0ZW1l bnQgKi8KKwkJcXVlcnkgPSAiU0VMRUNUIGNsYXNzaWQsIG9iamlkLCBvYmpzdWJpZCwgVVBQ RVIob2JqZWN0X3R5cGUpLFxuIgorCQkJCSIgICAgICAgc2NoZW1hX25hbWUsIG9iamVjdF9u YW1lLCBvYmplY3RfaWRlbnRpdHlcbiIKKwkJCQkiICBGUk9NIHBnX2V2ZW50X3RyaWdnZXJf ZHJvcHBlZF9vYmplY3RzKCkiOworCisJCS8qIEF0dGVtcHQgdG8gY29ubmVjdCAqLworCQly ZXN1bHQgPSBTUElfY29ubmVjdCgpOworCisJCWlmIChyZXN1bHQgPCAwKQorCQkJZWxvZyhF UlJPUiwgInBnX2F1ZGl0X2RkbF9kcm9wOiBTUElfY29ubmVjdCByZXR1cm5lZCAlZCIsCisJ CQkJCQlyZXN1bHQpOworCisJCS8qIEV4ZWN1dGUgdGhlIHF1ZXJ5ICovCisJCXJlc3VsdCA9 IFNQSV9leGVjdXRlKHF1ZXJ5LCB0cnVlLCAwKTsKKworCQlpZiAocmVzdWx0ICE9IFNQSV9P S19TRUxFQ1QpCisJCQllbG9nKEVSUk9SLCAicGdfYXVkaXRfZGRsX2Ryb3A6IFNQSV9leGVj dXRlIHJldHVybmVkICVkIiwKKwkJCQkJCXJlc3VsdCk7CisKKwkJLyogSXRlcmF0ZSByZXR1 cm5lZCByb3dzICovCisJCXNwaVR1cERlc2MgPSBTUElfdHVwdGFibGUtPnR1cGRlc2M7CisK KwkJZm9yIChyb3cgPSAwOyByb3cgPCBTUElfcHJvY2Vzc2VkOyByb3crKykKKwkJeworCQkJ SGVhcFR1cGxlICBzcGlUdXBsZTsKKwkJCWNoYXIgKnNjaGVtYU5hbWU7CisKKwkJCXNwaVR1 cGxlID0gU1BJX3R1cHRhYmxlLT52YWxzW3Jvd107CisKKwkJCWF1ZGl0RXZlbnRTdGFjay0+ YXVkaXRFdmVudC5vYmplY3RUeXBlID0KKwkJCQlTUElfZ2V0dmFsdWUoc3BpVHVwbGUsIHNw aVR1cERlc2MsIDQpOworCQkJc2NoZW1hTmFtZSA9IFNQSV9nZXR2YWx1ZShzcGlUdXBsZSwg c3BpVHVwRGVzYywgNSk7CisKKwkJCWlmICghKHBnX3N0cmNhc2VjbXAoYXVkaXRFdmVudFN0 YWNrLT5hdWRpdEV2ZW50Lm9iamVjdFR5cGUsCisJCQkJCQkJIlRZUEUiKSA9PSAwIHx8CisJ CQkJICBwZ19zdHJjYXNlY21wKHNjaGVtYU5hbWUsICJwZ190b2FzdCIpID09IDApKQorCQkJ eworCQkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5vYmplY3ROYW1lID0KKwkJCQkJ CVNQSV9nZXR2YWx1ZShzcGlUdXBsZSwgc3BpVHVwRGVzYywgNyk7CisKKwkJCQlsb2dfYXVk aXRfZXZlbnQoYXVkaXRFdmVudFN0YWNrKTsKKwkJCX0KKwkJfQorCisJCS8qIENvbXBsZXRl IHRoZSBxdWVyeSAqLworCQlTUElfZmluaXNoKCk7CisKKwkJLyogU3dpdGNoIHRvIHRoZSBv bGQgbWVtb3J5IGNvbnRleHQgKi8KKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKGNvbnRleHRP bGQpOworCQlNZW1vcnlDb250ZXh0RGVsZXRlKGNvbnRleHRRdWVyeSk7CisKKwkJLyogTm8g bG9uZ2VyIGluIGFuIGludGVybmFsIHN0YXRlbWVudCAqLworCQlpbnRlcm5hbFN0YXRlbWVu dCA9IGZhbHNlOworCX0KKworCVBHX1JFVFVSTl9OVUxMKCk7Cit9CisKKy8qCisgKiBHVUMg Y2hlY2sgYW5kIGFzc2lnbiBmdW5jdGlvbnMKKyAqLworCisvKgorICogVGFrZSBhIHBnX2F1 ZGl0LmxvZyB2YWx1ZSBzdWNoIGFzICJyZWFkLCB3cml0ZSwgZG1sIiwgdmVyaWZ5IHRoYXQg ZWFjaCBvZiB0aGUKKyAqIGNvbW1hLXNlcGFyYXRlZCB0b2tlbnMgY29ycmVzcG9uZHMgdG8g YSBMb2dDbGFzcyB2YWx1ZSwgYW5kIGNvbnZlcnQgdGhlbSBpbnRvCisgKiBhIGJpdG1hcCB0 aGF0IGxvZ19hdWRpdF9ldmVudCBjYW4gY2hlY2suCisgKi8KK3N0YXRpYyBib29sCitjaGVj a19wZ2F1ZGl0X2xvZyhjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0cmEsIEd1Y1NvdXJjZSBz b3VyY2UpCit7CisJTGlzdCAqZmxhZ3M7CisJY2hhciAqcmF3dmFsOworCUxpc3RDZWxsICps dDsKKwl1aW50NjQgKmY7CisKKwkvKiBNYWtlIHN1cmUgbmV3dmFsIGlzIGEgY29tbWEtc2Vw YXJhdGVkIGxpc3Qgb2YgdG9rZW5zLiAqLworCXJhd3ZhbCA9IHBzdHJkdXAoKm5ld3ZhbCk7 CisJaWYgKCFTcGxpdElkZW50aWZpZXJTdHJpbmcocmF3dmFsLCAnLCcsICZmbGFncykpCisJ eworCQlHVUNfY2hlY2tfZXJyZGV0YWlsKCJMaXN0IHN5bnRheCBpcyBpbnZhbGlkIik7CisJ CWxpc3RfZnJlZShmbGFncyk7CisJCXBmcmVlKHJhd3ZhbCk7CisJCXJldHVybiBmYWxzZTsK Kwl9CisKKwkvKgorCSAqIENoZWNrIHRoYXQgd2UgcmVjb2duaXNlIGVhY2ggdG9rZW4sIGFu ZCBhZGQgaXQgdG8gdGhlIGJpdG1hcCB3ZSdyZQorCSAqIGJ1aWxkaW5nIHVwIGluIGEgbmV3 bHktYWxsb2NhdGVkIHVpbnQ2NCAqZi4KKwkgKi8KKwlmID0gKHVpbnQ2NCAqKSBtYWxsb2Mo c2l6ZW9mKHVpbnQ2NCkpOworCWlmICghZikKKwkJcmV0dXJuIGZhbHNlOworCSpmID0gMDsK KworCWZvcmVhY2gobHQsIGZsYWdzKQorCXsKKwkJYm9vbCBzdWJ0cmFjdCA9IGZhbHNlOwor CQl1aW50NjQgY2xhc3M7CisKKwkJLyogUmV0cmlldmUgYSB0b2tlbiAqLworCQljaGFyICp0 b2tlbiA9IChjaGFyICopbGZpcnN0KGx0KTsKKworCQkvKiBJZiB0b2tlbiBpcyBwcmVjZWRl ZCBieSAtLCB0aGVuIHRoZW4gdG9rZW4gaXMgc3VidHJhY3RpdmUuICovCisJCWlmIChzdHJz dHIodG9rZW4sICItIikgPT0gdG9rZW4pCisJCXsKKwkJCXRva2VuID0gdG9rZW4gKyAxOwor CQkJc3VidHJhY3QgPSB0cnVlOworCQl9CisKKwkJLyogVGVzdCBlYWNoIHRva2VuLiAqLwor CQlpZiAocGdfc3RyY2FzZWNtcCh0b2tlbiwgQ0xBU1NfTk9ORSkgPT0gMCkKKwkJCWNsYXNz ID0gTE9HX05PTkU7CisJCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAodG9rZW4sIENMQVNTX0FM TCkgPT0gMCkKKwkJCWNsYXNzID0gTE9HX0FMTDsKKwkJZWxzZSBpZiAocGdfc3RyY2FzZWNt cCh0b2tlbiwgQ0xBU1NfRERMKSA9PSAwKQorCQkJY2xhc3MgPSBMT0dfRERMOworCQllbHNl IGlmIChwZ19zdHJjYXNlY21wKHRva2VuLCBDTEFTU19GVU5DVElPTikgPT0gMCkKKwkJCWNs YXNzID0gTE9HX0ZVTkNUSU9OOworCQllbHNlIGlmIChwZ19zdHJjYXNlY21wKHRva2VuLCBD TEFTU19NSVNDKSA9PSAwKQorCQkJY2xhc3MgPSBMT0dfTUlTQzsKKwkJZWxzZSBpZiAocGdf c3RyY2FzZWNtcCh0b2tlbiwgQ0xBU1NfUEFSQU1FVEVSKSA9PSAwKQorCQkJY2xhc3MgPSBM T0dfUEFSQU1FVEVSOworCQllbHNlIGlmIChwZ19zdHJjYXNlY21wKHRva2VuLCBDTEFTU19S RUFEKSA9PSAwKQorCQkJY2xhc3MgPSBMT0dfUkVBRDsKKwkJZWxzZSBpZiAocGdfc3RyY2Fz ZWNtcCh0b2tlbiwgQ0xBU1NfV1JJVEUpID09IDApCisJCQljbGFzcyA9IExPR19XUklURTsK KwkJZWxzZQorCQl7CisJCQlmcmVlKGYpOworCQkJcGZyZWUocmF3dmFsKTsKKwkJCWxpc3Rf ZnJlZShmbGFncyk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQkvKiBBZGQgb3Igc3Vi dHJhY3QgY2xhc3MgYml0cyBmcm9tIHRoZSBsb2cgYml0bWFwLiAqLworCQlpZiAoc3VidHJh Y3QpCisJCQkqZiAmPSB+Y2xhc3M7CisJCWVsc2UKKwkJCSpmIHw9IGNsYXNzOworCX0KKwor CXBmcmVlKHJhd3ZhbCk7CisJbGlzdF9mcmVlKGZsYWdzKTsKKworCS8qCisJICogU3RvcmUg dGhlIGJpdG1hcCBmb3IgYXNzaWduX3BnYXVkaXRfbG9nLgorCSAqLworCSpleHRyYSA9IGY7 CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIFNldCBwZ2F1ZGl0X2xvZyBmcm9tIGV4 dHJhIChpZ25vcmluZyBuZXd2YWwsIHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4gY29udmVydGVk CisgKiB0byBhIGJpdG1hcCBhYm92ZSkuIE5vdGUgdGhhdCBleHRyYSBtYXkgbm90IGJlIHNl dCBpZiB0aGUgYXNzaWdubWVudCBpcyB0byBiZQorICogc3VwcHJlc3NlZC4KKyAqLworc3Rh dGljIHZvaWQKK2Fzc2lnbl9wZ2F1ZGl0X2xvZyhjb25zdCBjaGFyICpuZXd2YWwsIHZvaWQg KmV4dHJhKQoreworCWlmIChleHRyYSkKKwkJYXVkaXRMb2dCaXRtYXAgPSAqKHVpbnQ2NCAq KWV4dHJhOworfQorCisvKgorICogRGVmaW5lIEdVQyB2YXJpYWJsZXMgYW5kIGluc3RhbGwg aG9va3MgdXBvbiBtb2R1bGUgbG9hZC4KKyAqLwordm9pZAorX1BHX2luaXQodm9pZCkKK3sK KwlpZiAoSXNVbmRlclBvc3RtYXN0ZXIpCisJCWVyZXBvcnQoRVJST1IsCisJCQkoZXJyY29k ZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCWVycm1z ZygicGdfYXVkaXQgbXVzdCBiZSBsb2FkZWQgdmlhIHNoYXJlZF9wcmVsb2FkX2xpYnJhcmll cyIpKSk7CisKKwkvKgorCSAqIHBnX2F1ZGl0LnJvbGUgPSAiYXVkaXQiCisJICoKKwkgKiBU aGlzIHZhcmlhYmxlIGRlZmluZXMgYSByb2xlIHRvIGJlIHVzZWQgZm9yIGF1ZGl0aW5nLgor CSAqLworCURlZmluZUN1c3RvbVN0cmluZ1ZhcmlhYmxlKCJwZ19hdWRpdC5yb2xlIiwKKwkJ CQkJCQkgICAiRW5hYmxlIGF1ZGl0aW5nIGZvciByb2xlIiwKKwkJCQkJCQkgICBOVUxMLAor CQkJCQkJCSAgICZhdWRpdFJvbGUsCisJCQkJCQkJICAgIiIsCisJCQkJCQkJICAgUEdDX1NV U0VULAorCQkJCQkJCSAgIEdVQ19OT1RfSU5fU0FNUExFLAorCQkJCQkJCSAgIE5VTEwsIE5V TEwsIE5VTEwpOworCisJLyoKKwkgKiBwZ19hdWRpdC5sb2cgPSAicmVhZCwgd3JpdGUsIGRk bCIKKwkgKgorCSAqIFRoaXMgdmFyaWFibGVzIGNvbnRyb2xzIHdoYXQgY2xhc3NlcyBvZiBj b21tYW5kcyBhcmUgbG9nZ2VkLgorCSAqLworCURlZmluZUN1c3RvbVN0cmluZ1ZhcmlhYmxl KCJwZ19hdWRpdC5sb2ciLAorCQkJCQkJCSAgICJFbmFibGUgYXVkaXRpbmcgZm9yIGNsYXNz ZXMgb2YgY29tbWFuZHMiLAorCQkJCQkJCSAgIE5VTEwsCisJCQkJCQkJICAgJmF1ZGl0TG9n LAorCQkJCQkJCSAgICJub25lIiwKKwkJCQkJCQkgICBQR0NfU1VTRVQsCisJCQkJCQkJICAg R1VDX0xJU1RfSU5QVVQgfCBHVUNfTk9UX0lOX1NBTVBMRSwKKwkJCQkJCQkgICBjaGVja19w Z2F1ZGl0X2xvZywKKwkJCQkJCQkgICBhc3NpZ25fcGdhdWRpdF9sb2csCisJCQkJCQkJICAg TlVMTCk7CisKKwkvKgorCSAqIEluc3RhbGwgb3VyIGhvb2sgZnVuY3Rpb25zIGFmdGVyIHNh dmluZyB0aGUgZXhpc3RpbmcgcG9pbnRlcnMgdG8gcHJlc2VydmUKKwkgKiB0aGUgY2hhaW4u CisJICovCisJbmV4dF9FeGVjdXRvclN0YXJ0X2hvb2sgPSBFeGVjdXRvclN0YXJ0X2hvb2s7 CisJRXhlY3V0b3JTdGFydF9ob29rID0gcGdhdWRpdF9FeGVjdXRvclN0YXJ0X2hvb2s7CisK KwluZXh0X0V4ZWN1dG9yQ2hlY2tQZXJtc19ob29rID0gRXhlY3V0b3JDaGVja1Blcm1zX2hv b2s7CisJRXhlY3V0b3JDaGVja1Blcm1zX2hvb2sgPSBwZ2F1ZGl0X0V4ZWN1dG9yQ2hlY2tQ ZXJtc19ob29rOworCisJbmV4dF9FeGVjdXRvckVuZF9ob29rID0gRXhlY3V0b3JFbmRfaG9v azsKKwlFeGVjdXRvckVuZF9ob29rID0gcGdhdWRpdF9FeGVjdXRvckVuZF9ob29rOworCisJ bmV4dF9Qcm9jZXNzVXRpbGl0eV9ob29rID0gUHJvY2Vzc1V0aWxpdHlfaG9vazsKKwlQcm9j ZXNzVXRpbGl0eV9ob29rID0gcGdhdWRpdF9Qcm9jZXNzVXRpbGl0eV9ob29rOworCisJbmV4 dF9vYmplY3RfYWNjZXNzX2hvb2sgPSBvYmplY3RfYWNjZXNzX2hvb2s7CisJb2JqZWN0X2Fj Y2Vzc19ob29rID0gcGdhdWRpdF9vYmplY3RfYWNjZXNzX2hvb2s7Cit9CmRpZmYgLS1naXQg YS9jb250cmliL3BnX2F1ZGl0L3BnX2F1ZGl0LmNvbnRyb2wgYi9jb250cmliL3BnX2F1ZGl0 L3BnX2F1ZGl0LmNvbnRyb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u NjczMGM2OAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfYXVkaXQvcGdfYXVkaXQu Y29udHJvbApAQCAtMCwwICsxLDUgQEAKKyMgcGdfYXVkaXQgZXh0ZW5zaW9uCitjb21tZW50 ID0gJ3Byb3ZpZGVzIGF1ZGl0aW5nIGZ1bmN0aW9uYWxpdHknCitkZWZhdWx0X3ZlcnNpb24g PSAnMS4wLjAnCittb2R1bGVfcGF0aG5hbWUgPSAnJGxpYmRpci9wZ19hdWRpdCcKK3JlbG9j YXRhYmxlID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19hdWRpdC90ZXN0L3Rlc3Qu cGwgYi9jb250cmliL3BnX2F1ZGl0L3Rlc3QvdGVzdC5wbApuZXcgZmlsZSBtb2RlIDEwMDc1 NQppbmRleCAwMDAwMDAwLi5mNWNiZGUyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9w Z19hdWRpdC90ZXN0L3Rlc3QucGwKQEAgLTAsMCArMSwxNDEyIEBACisjIS91c3IvYmluL3Bl cmwKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHRlc3QucGwgLSBwZ19hdWRpdCBV bml0IFRlc3RzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIworIyBQZXJsIGluY2x1ZGVzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBDYXJwOworCit1c2UgR2V0 b3B0OjpMb25nOwordXNlIFBvZDo6VXNhZ2U7Cit1c2UgREJJOwordXNlIEN3ZCBxdyhhYnNf cGF0aCk7Cit1c2UgSVBDOjpTeXN0ZW06OlNpbXBsZSBxdyhjYXB0dXJlKTsKKworIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29uc3RhbnRzCisjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIwordXNlIGNvbnN0YW50Cit7CisJdHJ1ZSAgPT4gMSwKKwlmYWxzZSA9PiAwCit9 OworCit1c2UgY29uc3RhbnQKK3sKKwlDT05URVhUX0dMT0JBTCAgID0+ICdHTE9CQUwnLAor CUNPTlRFWFRfREFUQUJBU0UgPT4gJ0RBVEFCQVNFJywKKwlDT05URVhUX1JPTEUJID0+ICdS T0xFJworfTsKKwordXNlIGNvbnN0YW50Cit7CisJQ0xBU1MJCQk9PiAnQ0xBU1MnLAorCisJ Q0xBU1NfRERMCQk9PiAnRERMJywKKwlDTEFTU19GVU5DVElPTgk9PiAnRlVOQ1RJT04nLAor CUNMQVNTX01JU0MJCT0+ICdNSVNDJywKKwlDTEFTU19QQVJBTUVURVIgPT4gJ1BBUkFNRVRF UicsCisJQ0xBU1NfUkVBRAkJPT4gJ1JFQUQnLAorCUNMQVNTX1dSSVRFCQk9PiAnV1JJVEUn LAorCisJQ0xBU1NfQUxMCQk9PiAnQUxMJywKKwlDTEFTU19OT05FCQk9PiAnTk9ORScKK307 CisKK3VzZSBjb25zdGFudAoreworCUNPTU1BTkQJCQkJCQk9PiAnQ09NTUFORCcsCisJQ09N TUFORF9MT0cJCQkJCT0+ICdDT01NQU5EX0xPRycsCisKKwlDT01NQU5EX0FOQUxZWkUJCQkJ CT0+ICdBTkFMWVpFJywKKwlDT01NQU5EX0FMVEVSX0FHR1JFR0FURQkJCT0+ICdBTFRFUiBB R0dSRUdBVEUnLAorCUNPTU1BTkRfQUxURVJfQ09MTEFUSU9OCQkJPT4gJ0FMVEVSIENPTExB VElPTicsCisJQ09NTUFORF9BTFRFUl9DT05WRVJTSU9OCQk9PiAnQUxURVIgQ09OVkVSU0lP TicsCisJQ09NTUFORF9BTFRFUl9EQVRBQkFTRQkJCT0+ICdBTFRFUiBEQVRBQkFTRScsCisJ Q09NTUFORF9BTFRFUl9ST0xFCQkJCT0+ICdBTFRFUiBST0xFJywKKwlDT01NQU5EX0FMVEVS X1JPTEVfU0VUCQkJPT4gJ0FMVEVSIFJPTEUgU0VUJywKKwlDT01NQU5EX0FMVEVSX1RBQkxF CQkJCT0+ICdBTFRFUiBUQUJMRScsCisJQ09NTUFORF9BTFRFUl9UQUJMRV9DT0xVTU4JCT0+ ICdBTFRFUiBUQUJMRSBDT0xVTU4nLAorCUNPTU1BTkRfQUxURVJfVEFCTEVfSU5ERVgJCT0+ ICdBTFRFUiBUQUJMRSBJTkRFWCcsCisJQ09NTUFORF9CRUdJTgkJCQkJPT4gJ0JFR0lOJywK KwlDT01NQU5EX0NMT1NFCQkJCQk9PiAnQ0xPU0UgQ1VSU09SJywKKwlDT01NQU5EX0NPTU1J VAkJCQkJPT4gJ0NPTU1JVCcsCisJQ09NTUFORF9DT1BZCQkJCQk9PiAnQ09QWScsCisJQ09N TUFORF9DT1BZX1RPCQkJCQk9PiAnQ09QWSBUTycsCisJQ09NTUFORF9DT1BZX0ZST00JCQkJ PT4gJ0NPUFkgRlJPTScsCisJQ09NTUFORF9DUkVBVEVfQUdHUkVHQVRFCQk9PiAnQ1JFQVRF IEFHR1JFR0FURScsCisJQ09NTUFORF9DUkVBVEVfQ09MTEFUSU9OCQk9PiAnQ1JFQVRFIENP TExBVElPTicsCisJQ09NTUFORF9DUkVBVEVfQ09OVkVSU0lPTgkJPT4gJ0NSRUFURSBDT05W RVJTSU9OJywKKwlDT01NQU5EX0NSRUFURV9EQVRBQkFTRQkJCT0+ICdDUkVBVEUgREFUQUJB U0UnLAorCUNPTU1BTkRfQ1JFQVRFX0lOREVYCQkJPT4gJ0NSRUFURSBJTkRFWCcsCisJQ09N TUFORF9ERUFMTE9DQVRFCQkJCT0+ICdERUFMTE9DQVRFJywKKwlDT01NQU5EX0RFQ0xBUkVf Q1VSU09SCQkJPT4gJ0RFQ0xBUkUgQ1VSU09SJywKKwlDT01NQU5EX0RPCQkJCQkJPT4gJ0RP JywKKwlDT01NQU5EX0RJU0NBUkRfQUxMCQkJCT0+ICdESVNDQVJEIEFMTCcsCisJQ09NTUFO RF9DUkVBVEVfRlVOQ1RJT04JCQk9PiAnQ1JFQVRFIEZVTkNUSU9OJywKKwlDT01NQU5EX0NS RUFURV9ST0xFCQkJCT0+ICdDUkVBVEUgUk9MRScsCisJQ09NTUFORF9DUkVBVEVfU0NIRU1B CQkJPT4gJ0NSRUFURSBTQ0hFTUEnLAorCUNPTU1BTkRfQ1JFQVRFX1RBQkxFCQkJPT4gJ0NS RUFURSBUQUJMRScsCisJQ09NTUFORF9DUkVBVEVfVEFCTEVfQVMJCQk9PiAnQ1JFQVRFIFRB QkxFIEFTJywKKwlDT01NQU5EX0RST1BfREFUQUJBU0UJCQk9PiAnRFJPUCBEQVRBQkFTRScs CisJQ09NTUFORF9EUk9QX1NDSEVNQQkJCQk9PiAnRFJPUCBTQ0hFTUEnLAorCUNPTU1BTkRf RFJPUF9UQUJMRQkJCQk9PiAnRFJPUCBUQUJMRScsCisJQ09NTUFORF9EUk9QX1RBQkxFX0NP TlNUUkFJTlQJPT4gJ0RST1AgVEFCTEUgQ09OU1RSQUlOVCcsCisJQ09NTUFORF9EUk9QX1RB QkxFX0lOREVYCQk9PiAnRFJPUCBUQUJMRSBJTkRFWCcsCisJQ09NTUFORF9EUk9QX1RBQkxF X1RPQVNUCQk9PiAnRFJPUCBUQUJMRSBUT0FTVCcsCisJQ09NTUFORF9EUk9QX1RBQkxFX1RZ UEUJCQk9PiAnRFJPUCBUQUJMRSBUWVBFJywKKwlDT01NQU5EX0VYRUNVVEUJCQkJCT0+ICdF WEVDVVRFJywKKwlDT01NQU5EX0VYRUNVVEVfUkVBRAkJCT0+ICdFWEVDVVRFIFJFQUQnLAor CUNPTU1BTkRfRVhFQ1VURV9XUklURQkJCT0+ICdFWEVDVVRFIFdSSVRFJywKKwlDT01NQU5E X0VYRUNVVEVfRlVOQ1RJT04JCT0+ICdFWEVDVVRFIEZVTkNUSU9OJywKKwlDT01NQU5EX0VY UExBSU4JCQkJCT0+ICdFWFBMQUlOJywKKwlDT01NQU5EX0ZFVENICQkJCQk9PiAnRkVUQ0gn LAorCUNPTU1BTkRfR1JBTlQJCQkJCT0+ICdHUkFOVCcsCisJQ09NTUFORF9JTlNFUlQJCQkJ CT0+ICdJTlNFUlQnLAorCSMgQ09NTUFORF9QQVJBTUVURVIJCQkJPT4gJ1BBUkFNRVRFUics CisJIyBDT01NQU5EX1BBUkFNRVRFUl9SRUFECQkJPT4gJ1BBUkFNRVRFUl9SRUFEJywKKwkj IENPTU1BTkRfUEFSQU1FVEVSX1dSSVRFCQkJPT4gJ1BBUkFNRVRFUl9XUklURScsCisJQ09N TUFORF9QUkVQQVJFCQkJCQk9PiAnUFJFUEFSRScsCisJQ09NTUFORF9QUkVQQVJFX1JFQUQJ CQk9PiAnUFJFUEFSRSBSRUFEJywKKwlDT01NQU5EX1BSRVBBUkVfV1JJVEUJCQk9PiAnUFJF UEFSRSBXUklURScsCisJQ09NTUFORF9SRVZPS0UJCQkJCT0+ICdSRVZPS0UnLAorCUNPTU1B TkRfU0VMRUNUCQkJCQk9PiAnU0VMRUNUJywKKwlDT01NQU5EX1NFVAkJCQkJCT0+ICdTRVQn LAorCUNPTU1BTkRfVVBEQVRFCQkJCQk9PiAnVVBEQVRFJworfTsKKwordXNlIGNvbnN0YW50 Cit7CisJVFlQRQkJCQkJPT4gJ1RZUEUnLAorCVRZUEVfTk9ORQkJCQk9PiAnJywKKworCVRZ UEVfQUdHUkVHQVRFCQkJPT4gJ0FHR1JFR0FURScsCisJVFlQRV9DT0xMQVRJT04JCQk9PiAn Q09MTEFUSU9OJywKKwlUWVBFX0NPTlZFUlNJT04JCQk9PiAnQ09OVkVSU0lPTicsCisJVFlQ RV9TQ0hFTUEJCQkJPT4gJ1NDSEVNQScsCisJVFlQRV9GVU5DVElPTgkJCT0+ICdGVU5DVElP TicsCisJVFlQRV9JTkRFWAkJCQk9PiAnSU5ERVgnLAorCVRZUEVfVEFCTEUJCQkJPT4gJ1RB QkxFJywKKwlUWVBFX1RBQkxFX0NPTFVNTgkJPT4gJ1RBQkxFIENPTFVNTicsCisJVFlQRV9U QUJMRV9DT05TVFJBSU5UCT0+ICdUQUJMRSBDT05TVFJBSU5UJywKKwlUWVBFX1RBQkxFX1RP QVNUCQk9PiAnVEFCTEUgVE9BU1QnLAorCVRZUEVfVFlQRQkJCQk9PiAnVFlQRScKK307CisK K3VzZSBjb25zdGFudAoreworCU5BTUUJCQk9PiAnTkFNRScKK307CisKKyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCisjIENvbW1hbmQgbGluZSBwYXJhbWV0ZXJzCisjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIworbXkgJHN0clBnU3FsQmluID0gJy4uLy4uLy4uLy4uL2Jpbi9i aW4nOwkjIFBhdGggb2YgUEcgYmluYXJpZXMgdG8gdXNlIGZvcgorCQkJCQkJCQkJCQkjIHRo aXMgdGVzdAorbXkgJHN0clRlc3RQYXRoID0gJy4uLy4uLy4uLy4uL2RhdGEnOwkJIyBQYXRo IHdoZXJlIHRlc3Rpbmcgd2lsbCBvY2N1cgorbXkgJGlEZWZhdWx0UG9ydCA9IDYwMDA7CQkJ CQkjIERlZmF1bHQgcG9ydCB0byBydW4gUG9zdGdyZXMgb24KK215ICRiSGVscCA9IGZhbHNl OwkJCQkJCQkjIERpc3BsYXkgaGVscAorbXkgJGJRdWlldCA9IGZhbHNlOwkJCQkJCQkjIFN1 cHJlc3Mgb3V0cHV0IGV4Y2VwdCBmb3IgZXJyb3JzCitteSAkYk5vQ2xlYW51cCA9IGZhbHNl OwkJCQkJCSMgQ2xlYW51cCBkYXRhYmFzZSBvbiBleGl0CisKK0dldE9wdGlvbnMgKCdxfHF1 aWV0JyA9PiBcJGJRdWlldCwKKwkJCSduby1jbGVhbnVwJyA9PiBcJGJOb0NsZWFudXAsCisJ CQknaGVscCcgPT4gXCRiSGVscCwKKwkJCSdwZ3NxbC1iaW49cycgPT4gXCRzdHJQZ1NxbEJp biwKKwkJCSd0ZXN0LXBhdGg9cycgPT4gXCRzdHJUZXN0UGF0aCkKKwlvciBwb2QydXNhZ2Uo Mik7CisKKyMgRGlzcGxheSB2ZXJzaW9uIGFuZCBleGl0IGlmIHJlcXVlc3RlZAoraWYgKCRi SGVscCkKK3sKKwlwcmludCAncGdfYXVkaXQgdW5pdCB0ZXN0XG5cbic7CisJcG9kMnVzYWdl KCk7CisKKwlleGl0IDA7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEds b2JhbCB2YXJpYWJsZXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitteSAkaERiOwkJ CQkJIyBDb25uZWN0aW9uIHRvIFBvc3RncmVzCitteSAkc3RyTG9nRXhwZWN0ZWQgPSAnJzsJ IyBUaGUgZXhwZWN0ZWQgbG9nIGNvbXBhcmVkIHdpdGggZ3JlcHBpbmcgQVVESVQKKwkJCQkJ CQkjIGVudHJpZXMgZnJvbSB0aGUgcG9zdGdyZXMgbG9nLgorCitteSAkc3RyRGF0YWJhc2Ug PSAncG9zdGdyZXMnOwkjIENvbm5lY3RlZCBkYXRhYmFzZSAobW9kaWZpZWQgYnkgUGdTZXRE YXRhYmFzZSkKK215ICRzdHJVc2VyID0gJ3Bvc3RncmVzJzsJCSMgQ29ubmVjdGVkIHVzZXIg KG1vZGlmaWVkIGJ5IFBnU2V0VXNlcikKK215ICRzdHJBdWRpdFJvbGUgPSAnYXVkaXQnOwkJ IyBSb2xlIHRvIHVzZSBmb3IgYXVkaXRpbmcKKworbXkgJW9BdWRpdExvZ0hhc2g7CQkJCSMg SGFzaCB0byBzdG9yZSBwZ19hdWRpdC5sb2cgR1VDUworbXkgJW9BdWRpdEdyYW50SGFzaDsJ CQkjIEhhc2ggdG8gc3RvcmUgcGdfYXVkaXQgZ3JhbnRzCisKK215ICRzdHJDdXJyZW50QXVk aXRMb2c7CQkjIHBnX2F1ZGl0LmxvZyBzZXR0aW5nIHdhcyBQb3N0Z3JlcyB3YXMgc3RhcnRl ZCB3aXRoCitteSAkc3RyVGVtcG9yYXJ5QXVkaXRMb2c7CSMgcGdfYXVkaXQubG9nIHNldHRp bmcgdGhhdCB3YXMgc2V0IGhvdAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBT dG9yZXMgdGhlIG1hcHBpbmcgYmV0d2VlbiBjb21tYW5kcywgY2xhc3NlcywgYW5kIHR5cGVz CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbXkgJW9Db21tYW5kSGFzaCA9CisoJkNP TU1BTkRfQU5BTFlaRSA9PiB7CisJJkNMQVNTID0+ICZDTEFTU19EREwsICZUWVBFID0+ICZU WVBFX05PTkV9LAorCSZDT01NQU5EX0FMVEVSX0FHR1JFR0FURSA9PiB7JkNMQVNTID0+ICZD TEFTU19EREwsCisJCSZUWVBFID0+ICZUWVBFX0FHR1JFR0FURX0sCisJJkNPTU1BTkRfQUxU RVJfREFUQUJBU0UgPT4geyZDTEFTUyA9PiAmQ0xBU1NfRERMLCAmVFlQRSA9PiAmVFlQRV9O T05FfSwKKwkmQ09NTUFORF9BTFRFUl9DT0xMQVRJT04gPT4geyZDTEFTUyA9PiAmQ0xBU1Nf RERMLAorCQkmVFlQRSA9PiAmVFlQRV9DT0xMQVRJT059LAorCSZDT01NQU5EX0FMVEVSX0NP TlZFUlNJT04gPT4geyZDTEFTUyA9PiAmQ0xBU1NfRERMLAorCQkmVFlQRSA9PiAmVFlQRV9D T05WRVJTSU9OfSwKKwkmQ09NTUFORF9BTFRFUl9ST0xFID0+IHsmQ0xBU1MgPT4gJkNMQVNT X0RETCwgJlRZUEUgPT4gJlRZUEVfTk9ORX0sCisJJkNPTU1BTkRfQUxURVJfUk9MRV9TRVQg PT4geyZDTEFTUyA9PiAmQ0xBU1NfRERMLCAmVFlQRSA9PiAmVFlQRV9OT05FLAorCQkmQ09N TUFORCA9PiAmQ09NTUFORF9BTFRFUl9ST0xFfSwKKwkmQ09NTUFORF9BTFRFUl9UQUJMRSA9 PiB7JkNMQVNTID0+ICZDTEFTU19EREwsICZUWVBFID0+ICZUWVBFX1RBQkxFfSwKKwkmQ09N TUFORF9BTFRFUl9UQUJMRV9DT0xVTU4gPT4geyZDTEFTUyA9PiAmQ0xBU1NfRERMLAorCQkm VFlQRSA9PiAmVFlQRV9UQUJMRV9DT0xVTU4sICZDT01NQU5EID0+ICZDT01NQU5EX0FMVEVS X1RBQkxFfSwKKwkmQ09NTUFORF9BTFRFUl9UQUJMRV9JTkRFWCA9PiB7JkNMQVNTID0+ICZD TEFTU19EREwsICZUWVBFID0+ICZUWVBFX0lOREVYLAorCQkmQ09NTUFORCA9PiAmQ09NTUFO RF9BTFRFUl9UQUJMRX0sCisJJkNPTU1BTkRfQkVHSU4gPT4geyZDTEFTUyA9PiAmQ0xBU1Nf TUlTQywgJlRZUEUgPT4gJlRZUEVfTk9ORX0sCisJJkNPTU1BTkRfQ0xPU0UgPT4geyZDTEFT UyA9PiAmQ0xBU1NfTUlTQywgJlRZUEUgPT4gJlRZUEVfTk9ORX0sCisJJkNPTU1BTkRfQ09N TUlUID0+IHsmQ0xBU1MgPT4gJkNMQVNTX01JU0MsICZUWVBFID0+ICZUWVBFX05PTkV9LAor CSZDT01NQU5EX0NPUFlfRlJPTSA9PiB7JkNMQVNTID0+ICZDTEFTU19XUklURSwgJlRZUEUg PT4gJlRZUEVfTk9ORSwKKwkJJkNPTU1BTkQgPT4gJkNPTU1BTkRfQ09QWX0sCisJJkNPTU1B TkRfQ09QWV9UTyA9PiB7JkNMQVNTID0+ICZDTEFTU19SRUFELCAmVFlQRSA9PiAmVFlQRV9O T05FLAorCQkmQ09NTUFORCA9PiAmQ09NTUFORF9DT1BZfSwKKwkmQ09NTUFORF9DUkVBVEVf QUdHUkVHQVRFID0+IHsmQ0xBU1MgPT4gJkNMQVNTX0RETCwKKwkJJlRZUEUgPT4gJlRZUEVf QUdHUkVHQVRFfSwKKwkmQ09NTUFORF9DUkVBVEVfQ09OVkVSU0lPTiA9PiB7JkNMQVNTID0+ ICZDTEFTU19EREwsCisJCSZUWVBFID0+ICZUWVBFX0NPTlZFUlNJT059LAorCSZDT01NQU5E X0NSRUFURV9DT0xMQVRJT04gPT4geyZDTEFTUyA9PiAmQ0xBU1NfRERMLAorCQkmVFlQRSA9 PiAmVFlQRV9DT0xMQVRJT059LAorCSZDT01NQU5EX0NSRUFURV9EQVRBQkFTRSA9PiB7JkNM QVNTID0+ICZDTEFTU19EREwsICZUWVBFID0+ICZUWVBFX05PTkV9LAorCSZDT01NQU5EX0NS RUFURV9JTkRFWCA9PiB7JkNMQVNTID0+ICZDTEFTU19EREwsICZUWVBFID0+ICZUWVBFX0lO REVYfSwKKwkmQ09NTUFORF9ERUFMTE9DQVRFID0+IHsmQ0xBU1MgPT4gJkNMQVNTX01JU0Ms ICZUWVBFID0+ICZUWVBFX05PTkV9LAorCSZDT01NQU5EX0RFQ0xBUkVfQ1VSU09SID0+IHsm Q0xBU1MgPT4gJkNMQVNTX1JFQUQsICZUWVBFID0+ICZUWVBFX05PTkV9LAorCSZDT01NQU5E X0RPID0+IHsmQ0xBU1MgPT4gJkNMQVNTX0ZVTkNUSU9OLCAmVFlQRSA9PiAmVFlQRV9OT05F fSwKKwkmQ09NTUFORF9ESVNDQVJEX0FMTCA9PiB7JkNMQVNTID0+ICZDTEFTU19NSVNDLCAm VFlQRSA9PiAmVFlQRV9OT05FfSwKKwkmQ09NTUFORF9DUkVBVEVfRlVOQ1RJT04gPT4geyZD TEFTUyA9PiAmQ0xBU1NfRERMLCAmVFlQRSA9PiAmVFlQRV9GVU5DVElPTn0sCisJJkNPTU1B TkRfQ1JFQVRFX1JPTEUgPT4geyZDTEFTUyA9PiAmQ0xBU1NfRERMLCAmVFlQRSA9PiAmVFlQ RV9OT05FfSwKKwkmQ09NTUFORF9DUkVBVEVfU0NIRU1BID0+IHsmQ0xBU1MgPT4gJkNMQVNT X0RETCwgJlRZUEUgPT4gJlRZUEVfU0NIRU1BfSwKKwkmQ09NTUFORF9DUkVBVEVfVEFCTEUg PT4geyZDTEFTUyA9PiAmQ0xBU1NfRERMLCAmVFlQRSA9PiAmVFlQRV9UQUJMRX0sCisJJkNP TU1BTkRfQ1JFQVRFX1RBQkxFX0FTID0+IHsmQ0xBU1MgPT4gJkNMQVNTX0RETCwgJlRZUEUg PT4gJlRZUEVfVEFCTEV9LAorCSZDT01NQU5EX0RST1BfREFUQUJBU0UgPT4geyZDTEFTUyA9 PiAmQ0xBU1NfRERMLCAmVFlQRSA9PiAmVFlQRV9OT05FfSwKKwkmQ09NTUFORF9EUk9QX1ND SEVNQSA9PiB7JkNMQVNTID0+ICZDTEFTU19EREwsICZUWVBFID0+ICZUWVBFX05PTkV9LAor CSZDT01NQU5EX0RST1BfVEFCTEUgPT4geyZDTEFTUyA9PiAmQ0xBU1NfRERMLCAmVFlQRSA9 PiAmVFlQRV9UQUJMRX0sCisJJkNPTU1BTkRfRFJPUF9UQUJMRV9DT05TVFJBSU5UID0+IHsm Q0xBU1MgPT4gJkNMQVNTX0RETCwKKwkJJlRZUEUgPT4gJlRZUEVfVEFCTEVfQ09OU1RSQUlO VCwgJkNPTU1BTkQgPT4gJkNPTU1BTkRfRFJPUF9UQUJMRX0sCisJJkNPTU1BTkRfRFJPUF9U QUJMRV9JTkRFWCA9PiB7JkNMQVNTID0+ICZDTEFTU19EREwsICZUWVBFID0+ICZUWVBFX0lO REVYLAorCQkmQ09NTUFORCA9PiAmQ09NTUFORF9EUk9QX1RBQkxFfSwKKwkmQ09NTUFORF9E Uk9QX1RBQkxFX1RPQVNUID0+IHsmQ0xBU1MgPT4gJkNMQVNTX0RETCwKKwkJJlRZUEUgPT4g JlRZUEVfVEFCTEVfVE9BU1QsICZDT01NQU5EID0+ICZDT01NQU5EX0RST1BfVEFCTEV9LAor CSZDT01NQU5EX0RST1BfVEFCTEVfVFlQRSA9PiB7JkNMQVNTID0+ICZDTEFTU19EREwsICZU WVBFID0+ICZUWVBFX1RZUEUsCisJCSZDT01NQU5EID0+ICZDT01NQU5EX0RST1BfVEFCTEV9 LAorCSZDT01NQU5EX0VYRUNVVEVfUkVBRCA9PiB7JkNMQVNTID0+ICZDTEFTU19SRUFELCAm VFlQRSA9PiAmVFlQRV9OT05FLAorCQkmQ09NTUFORCA9PiAmQ09NTUFORF9FWEVDVVRFfSwK KwkmQ09NTUFORF9FWEVDVVRFX1dSSVRFID0+IHsmQ0xBU1MgPT4gJkNMQVNTX1dSSVRFLCAm VFlQRSA9PiAmVFlQRV9OT05FLAorCQkmQ09NTUFORCA9PiAmQ09NTUFORF9FWEVDVVRFfSwK KwkmQ09NTUFORF9FWEVDVVRFX0ZVTkNUSU9OID0+IHsmQ0xBU1MgPT4gJkNMQVNTX0ZVTkNU SU9OLAorCQkmVFlQRSA9PiAmVFlQRV9GVU5DVElPTiwgJkNPTU1BTkQgPT4gJkNPTU1BTkRf RVhFQ1VURX0sCisJJkNPTU1BTkRfRVhQTEFJTiA9PiB7JkNMQVNTID0+ICZDTEFTU19NSVND LCAmVFlQRSA9PiAmVFlQRV9OT05FfSwKKwkmQ09NTUFORF9GRVRDSCA9PiB7JkNMQVNTID0+ ICZDTEFTU19NSVNDLCAmVFlQRSA9PiAmVFlQRV9OT05FfSwKKwkmQ09NTUFORF9HUkFOVCA9 PiB7JkNMQVNTID0+ICZDTEFTU19EREwsICZUWVBFID0+ICZUWVBFX1RBQkxFfSwKKwkmQ09N TUFORF9QUkVQQVJFX1JFQUQgPT4geyZDTEFTUyA9PiAmQ0xBU1NfUkVBRCwgJlRZUEUgPT4g JlRZUEVfTk9ORSwKKwkJJkNPTU1BTkQgPT4gJkNPTU1BTkRfUFJFUEFSRX0sCisJJkNPTU1B TkRfUFJFUEFSRV9XUklURSA9PiB7JkNMQVNTID0+ICZDTEFTU19XUklURSwgJlRZUEUgPT4g JlRZUEVfTk9ORSwKKwkJJkNPTU1BTkQgPT4gJkNPTU1BTkRfUFJFUEFSRX0sCisJJkNPTU1B TkRfSU5TRVJUID0+IHsmQ0xBU1MgPT4gJkNMQVNTX1dSSVRFLCAmVFlQRSA9PiAmVFlQRV9O T05FfSwKKwkmQ09NTUFORF9SRVZPS0UgPT4geyZDTEFTUyA9PiAmQ0xBU1NfRERMLCAmVFlQ RSA9PiAmVFlQRV9UQUJMRX0sCisJJkNPTU1BTkRfU0VMRUNUID0+IHsmQ0xBU1MgPT4gJkNM QVNTX1JFQUQsICZUWVBFID0+ICZUWVBFX05PTkV9LAorCSZDT01NQU5EX1NFVCA9PiB7JkNM QVNTID0+ICZDTEFTU19NSVNDLCAmVFlQRSA9PiAmVFlQRV9OT05FfSwKKwkmQ09NTUFORF9V UERBVEUgPT4geyZDTEFTUyA9PiAmQ0xBU1NfV1JJVEUsICZUWVBFID0+ICZUWVBFX05PTkV9 CispOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb21tYW5kRXhlY3V0ZQor IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3N1YiBDb21tYW5kRXhlY3V0ZQoreworCW15 ICRzdHJDb21tYW5kID0gc2hpZnQ7CisJbXkgJGJTdXBwcmVzc0Vycm9yID0gc2hpZnQ7CisK KwkjIFNldCBkZWZhdWx0CisJJGJTdXBwcmVzc0Vycm9yID0gZGVmaW5lZCgkYlN1cHByZXNz RXJyb3IpID8gJGJTdXBwcmVzc0Vycm9yIDogZmFsc2U7CisKKwkjIFJ1biB0aGUgY29tbWFu ZAorCW15ICRpUmVzdWx0ID0gc3lzdGVtKCRzdHJDb21tYW5kKTsKKworCWlmICgkaVJlc3Vs dCAhPSAwICYmICEkYlN1cHByZXNzRXJyb3IpCisJeworCQljb25mZXNzICJjb21tYW5kICck e3N0ckNvbW1hbmR9JyBmYWlsZWQgd2l0aCBlcnJvciAke2lSZXN1bHR9IjsKKwl9Cit9CisK KyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGxvZworIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKK3N1YiBsb2cKK3sKKwlteSAkc3RyTWVzc2FnZSA9IHNoaWZ0OworCW15ICRi RXJyb3IgPSBzaGlmdDsKKworCSMgU2V0IGRlZmF1bHQKKwkkYkVycm9yID0gZGVmaW5lZCgk YkVycm9yKSA/ICRiRXJyb3IgOiBmYWxzZTsKKworCWlmICghJGJRdWlldCkKKwl7CisJCXBy aW50ICIke3N0ck1lc3NhZ2V9XG4iOworCX0KKworCWlmICgkYkVycm9yKQorCXsKKwkJZXhp dCAxOworCX0KK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQXJyYXlUb1N0 cmluZworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3N1YiBBcnJheVRvU3RyaW5nCit7 CisJbXkgQHN0cnlBcnJheSA9IEBfOworCisJbXkgJHN0clJlc3VsdCA9ICcnOworCisJZm9y IChteSAkaUluZGV4ID0gMDsgJGlJbmRleCA8IEBzdHJ5QXJyYXk7ICRpSW5kZXgrKykKKwl7 CisJCWlmICgkaUluZGV4ICE9IDApCisJCXsKKwkJCSRzdHJSZXN1bHQgLj0gJywgJzsKKwkJ fQorCisJCSRzdHJSZXN1bHQgLj0gJHN0cnlBcnJheVskaUluZGV4XTsKKwl9CisKKwlyZXR1 cm4gJHN0clJlc3VsdDsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQnVp bGRNb2R1bGUKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzdWIgQnVpbGRNb2R1bGUK K3sKKwljYXB0dXJlKCdjZCAuLjttYWtlJyk7CisJQ29tbWFuZEV4ZWN1dGUoImNwIC4uL3Bn X2F1ZGl0LnNvIiAuCisJCQkJICAgIiAke3N0clBnU3FsQmlufS8uLi9saWIvcG9zdGdyZXNx bCIpOworCUNvbW1hbmRFeGVjdXRlKCJjcCAuLi9wZ19hdWRpdC5jb250cm9sIiAuCisJCQkJ ICAgIiAke3N0clBnU3FsQmlufS8uLi9zaGFyZS9wb3N0Z3Jlc3FsL2V4dGVuc2lvbiIpOwor CUNvbW1hbmRFeGVjdXRlKCJjcCAuLi9wZ19hdWRpdC0tMS4wLjAuc3FsIiAuCisJCQkJICAg IiAke3N0clBnU3FsQmlufS8uLi9zaGFyZS9wb3N0Z3Jlc3FsL2V4dGVuc2lvbiIpOworfQor CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBQZ0Nvbm5lY3QKKyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCitzdWIgUGdDb25uZWN0Cit7CisJbXkgJGlQb3J0ID0gc2hpZnQ7 CisKKwkjIFNldCBkZWZhdWx0CisJJGlQb3J0ID0gZGVmaW5lZCgkaVBvcnQpID8gJGlQb3J0 IDogJGlEZWZhdWx0UG9ydDsKKworCSMgTG9nIENvbm5lY3Rpb24KKwkmbG9nKCIgICBEQjog Y29ubmVjdCB1c2VyICR7c3RyVXNlcn0sIGRhdGFiYXNlICR7c3RyRGF0YWJhc2V9Iik7CisK KwkjIERpc2Nvbm5lY3QgdXNlciBzZXNzaW9uCisJUGdEaXNjb25uZWN0KCk7CisKKwkjIENv bm5lY3QgdG8gdGhlIGRiCisJJGhEYiA9IERCSS0+Y29ubmVjdCgiZGJpOlBnOmRibmFtZT0k e3N0ckRhdGFiYXNlfTtwb3J0PSR7aVBvcnR9O2hvc3Q9L3RtcCIsCisJCQkJCQkkc3RyVXNl ciwgdW5kZWYsCisJCQkJCQl7QXV0b0NvbW1pdCA9PiAxLCBSYWlzZUVycm9yID0+IDF9KTsK K30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUGdEaXNjb25uZWN0CisjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc3ViIFBnRGlzY29ubmVjdAoreworCSMgQ29ubmVj dCB0byB0aGUgZGIgKHdoZXRoZXIgaXQgaXMgbG9jYWwgb3IgcmVtb3RlKQorCWlmIChkZWZp bmVkKCRoRGIpKQorCXsKKwkJJGhEYi0+ZGlzY29ubmVjdDsKKwkJdW5kZWYoJGhEYik7CisJ fQorfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBQZ0V4ZWN1dGUKKyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzdWIgUGdFeGVjdXRlCit7CisJbXkgJHN0clNxbCA9 IHNoaWZ0OworCisJIyBMb2cgdGhlIHN0YXRlbWVudAorCSZsb2coIiAgU1FMOiAke3N0clNx bH0iKTsKKworCSMgRXhlY3V0ZSB0aGUgc3RhdGVtZW50CisJbXkgJGhTdGF0ZW1lbnQgPSAk aERiLT5wcmVwYXJlKCRzdHJTcWwpOworCisJJGhTdGF0ZW1lbnQtPmV4ZWN1dGUoKTsKKwkk aFN0YXRlbWVudC0+ZmluaXNoKCk7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj CisjIFBnRXhlY3V0ZU9ubHkKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzdWIgUGdF eGVjdXRlT25seQoreworCW15ICRzdHJTcWwgPSBzaGlmdDsKKworCSMgTG9nIHRoZSBzdGF0 ZW1lbnQKKwkmbG9nKCIgIFNRTDogJHtzdHJTcWx9Iik7CisKKwkjIEV4ZWN1dGUgdGhlIHN0 YXRlbWVudAorCSRoRGItPmRvKCRzdHJTcWwpOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIworIyBQZ1NldERhdGFiYXNlCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwor c3ViIFBnU2V0RGF0YWJhc2UKK3sKKwlteSAkc3RyRGF0YWJhc2VQYXJhbSA9IHNoaWZ0Owor CisJIyBTdG9wIGFuZCBzdGFydCB0aGUgZGF0YWJhc2UgdG8gcmVzZXQgcGdjb25mIGVudHJp ZXMKKwlQZ1N0b3AoKTsKKwlQZ1N0YXJ0KCk7CisKKwkjIEV4ZWN1dGUgdGhlIHN0YXRlbWVu dAorCSRzdHJEYXRhYmFzZSA9ICRzdHJEYXRhYmFzZVBhcmFtOworCVBnQ29ubmVjdCgpOwor fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBQZ1NldFVzZXIKKyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCitzdWIgUGdTZXRVc2VyCit7CisJbXkgJHN0clVzZXJQYXJh bSA9IHNoaWZ0OworCisJJHN0clVzZXIgPSAkc3RyVXNlclBhcmFtOworCisJIyBTdG9wIGFu ZCBzdGFydCB0aGUgZGF0YWJhc2UgdG8gcmVzZXQgcGdjb25mIGVudHJpZXMKKwlpZiAoKGRl ZmluZWQoJHN0clRlbXBvcmFyeUF1ZGl0TG9nKSAmJiAhZGVmaW5lZCgkc3RyQ3VycmVudEF1 ZGl0TG9nKSkgfHwKKwkJKGRlZmluZWQoJHN0ckN1cnJlbnRBdWRpdExvZykgJiYgIWRlZmlu ZWQoJHN0clRlbXBvcmFyeUF1ZGl0TG9nKSkgfHwKKwkJJHN0ckN1cnJlbnRBdWRpdExvZyBu ZSAkc3RyVGVtcG9yYXJ5QXVkaXRMb2cpCisJeworCQkkc3RyQ3VycmVudEF1ZGl0TG9nID0g JHN0clRlbXBvcmFyeUF1ZGl0TG9nOworCisJCVBnU3RvcCgpOworCQlQZ1N0YXJ0KCk7CisJ fQorCWVsc2UKKwl7CisJCSMgRXhlY3V0ZSB0aGUgc3RhdGVtZW50CisJCVBnQ29ubmVjdCgp OworCX0KK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU2F2ZVN0cmluZwor IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3N1YiBTYXZlU3RyaW5nCit7CisJbXkgJHN0 ckZpbGUgPSBzaGlmdDsKKwlteSAkc3RyU3RyaW5nID0gc2hpZnQ7CisKKwkjIE9wZW4gdGhl IGZpbGUgZm9yIHdyaXRpbmcKKwlteSAkaEZpbGU7CisKKwlvcGVuKCRoRmlsZSwgJz4nLCAk c3RyRmlsZSkKKwkJb3IgY29uZmVzcyAidW5hYmxlIHRvIG9wZW4gJHtzdHJGaWxlfSI7CisK KwlpZiAoJHN0clN0cmluZyBuZSAnJykKKwl7CisJCXN5c3dyaXRlKCRoRmlsZSwgJHN0clN0 cmluZykKKwkJCW9yIGNvbmZlc3MgInVuYWJsZSB0byB3cml0ZSB0byAke3N0ckZpbGV9OiAk ISI7CisJfQorCisJY2xvc2UoJGhGaWxlKTsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKKyMgUGdMb2dFeGVjdXRlCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc3Vi IFBnTG9nRXhlY3V0ZQoreworCW15ICRzdHJDb21tYW5kID0gc2hpZnQ7CisJbXkgJHN0clNx bCA9IHNoaWZ0OworCW15ICRvRGF0YSA9IHNoaWZ0OworCW15ICRiRXhlY3V0ZSA9IHNoaWZ0 OworCW15ICRiV2FpdCA9IHNoaWZ0OworCW15ICRiTG9nU3FsID0gc2hpZnQ7CisJbXkgJHN0 clBhcmFtZXRlciA9IHNoaWZ0OworCW15ICRiRXhwZWN0RXJyb3IgPSBzaGlmdDsKKworCSMg U2V0IGRlZmF1bHRzCisJJGJFeGVjdXRlID0gZGVmaW5lZCgkYkV4ZWN1dGUpID8gJGJFeGVj dXRlIDogdHJ1ZTsKKwkkYldhaXQgPSBkZWZpbmVkKCRiV2FpdCkgPyAkYldhaXQgOiB0cnVl OworCSRiTG9nU3FsID0gZGVmaW5lZCgkYkxvZ1NxbCkgPyAkYkxvZ1NxbCA6IHRydWU7CisK KwlpZiAoJGJFeGVjdXRlKQorCXsKKwkJZXZhbAorCQl7CisJCQlQZ0V4ZWN1dGVPbmx5KCRz dHJTcWwpOworCQl9OworCisJCWlmICgkQCAmJiAhJGJFeHBlY3RFcnJvcikKKwkJeworCQkJ Y29uZmVzcyAkQDsKKwkJfQorCX0KKworCVBnTG9nRXhwZWN0KCRzdHJDb21tYW5kLCAkYkxv Z1NxbCA/ICRzdHJTcWwgOiAnJywgJHN0clBhcmFtZXRlciwgJG9EYXRhKTsKKworCWlmICgk YldhaXQpCisJeworCQlQZ0xvZ1dhaXQoKTsKKwl9Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCisjIFF1b3RlQ1NWCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc3Vi IFF1b3RlQ1NWCit7CisJbXkgJHN0ckNTViA9IHNoaWZ0OworCisJaWYgKGRlZmluZWQoJHN0 ckNTVikgJiYKKwkJKGluZGV4KCRzdHJDU1YsICcsJykgPj0gMCB8fCBpbmRleCgkc3RyQ1NW LCAnIicpID4gMCB8fAorCQkgaW5kZXgoJHN0ckNTViwgIlxuIikgPiAwIHx8IGluZGV4KCRz dHJDU1YsICJcciIpID49IDApKQorCXsKKwkJJHN0ckNTViA9fiBzLyIvIiIvZzsKKwkJJHN0 ckNTViA9ICJcIiR7c3RyQ1NWfVwiIjsKKwl9CisKKwlyZXR1cm4gJHN0ckNTVjsKK30KKwor IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUGdMb2dFeHBlY3QKKyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCitzdWIgUGdMb2dFeHBlY3QKK3sKKwlteSAkc3RyQ29tbWFuZCA9 IHNoaWZ0OworCW15ICRzdHJTcWwgPSBzaGlmdDsKKwlteSAkc3RyUGFyYW1ldGVyID0gc2hp ZnQ7CisJbXkgJG9EYXRhID0gc2hpZnQ7CisKKwkjIElmIG9EYXRhIGlzIGZhbHNlIHRoZW4g bm8gbG9nZ2luZworCWlmIChkZWZpbmVkKCRvRGF0YSkgJiYgcmVmKCRvRGF0YSkgZXEgJycg JiYgISRvRGF0YSkKKwl7CisJCXJldHVybjsKKwl9CisKKwkjIFF1b3RlIFNRTCBpZiBuZWVk cyB0byBiZSBxdW90ZWQKKwkkc3RyU3FsID0gUXVvdGVDU1YoJHN0clNxbCk7CisKKwlpZiAo ZGVmaW5lZCgkc3RyUGFyYW1ldGVyKSkKKwl7CisJCSRzdHJTcWwgLj0gIiwke3N0clBhcmFt ZXRlcn0iOworCX0KKworCSMgTG9nIGJhc2VkIG9uIHNlc3Npb24KKwlpZiAoUGdTaG91bGRM b2coJHN0ckNvbW1hbmQpKQorCXsKKwkJIyBNYWtlIHN1cmUgY2xhc3MgaXMgZGVmaW5lZAor CQlteSAkc3RyQ2xhc3MgPSAkb0NvbW1hbmRIYXNoeyRzdHJDb21tYW5kfXsmQ0xBU1N9Owor CisJCWlmICghZGVmaW5lZCgkc3RyQ2xhc3MpKQorCQl7CisJCQljb25mZXNzICJjbGFzcyBp cyBub3QgZGVmaW5lZCBmb3IgY29tbWFuZCAke3N0ckNvbW1hbmR9IjsKKwkJfQorCisJCSMg TWFrZSBzdXJlIG9iamVjdCB0eXBlIGlzIGRlZmluZWQKKwkJbXkgJHN0ck9iamVjdFR5cGUg PSAkb0NvbW1hbmRIYXNoeyRzdHJDb21tYW5kfXsmVFlQRX07CisKKwkJaWYgKCFkZWZpbmVk KCRzdHJPYmplY3RUeXBlKSkKKwkJeworCQkJY29uZmVzcyAib2JqZWN0IHR5cGUgaXMgbm90 IGRlZmluZWQgZm9yIGNvbW1hbmQgJHtzdHJDb21tYW5kfSI7CisJCX0KKworCQkjIENoZWNr IGZvciBjb21tYW5kIG92ZXJyaWRlCisJCW15ICRzdHJDb21tYW5kTG9nID0gJHN0ckNvbW1h bmQ7CisKKwkJaWYgKCRvQ29tbWFuZEhhc2h7JHN0ckNvbW1hbmR9eyZDT01NQU5EfSkKKwkJ eworCQkJJHN0ckNvbW1hbmRMb2cgPSAkb0NvbW1hbmRIYXNoeyRzdHJDb21tYW5kfXsmQ09N TUFORH07CisJCX0KKworCQlteSAkc3RyT2JqZWN0TmFtZSA9ICcnOworCisJCWlmIChkZWZp bmVkKCRvRGF0YSkgJiYgcmVmKCRvRGF0YSkgbmUgJ0FSUkFZJykKKwkJeworCQkJJHN0ck9i amVjdE5hbWUgPSBRdW90ZUNTVigkb0RhdGEpOworCQl9CisKKwkJbXkgJHN0ckxvZyAuPSAi U0VTU0lPTiwke3N0ckNsYXNzfSwke3N0ckNvbW1hbmRMb2d9LCIgLgorCQkJCQkgICIke3N0 ck9iamVjdFR5cGV9LCR7c3RyT2JqZWN0TmFtZX0sJHtzdHJTcWx9IjsKKwkJJmxvZygiQVVE SVQ6ICR7c3RyTG9nfSIpOworCisJCSRzdHJMb2dFeHBlY3RlZCAuPSAiJHtzdHJMb2d9XG4i OworCX0KKworCSMgTG9nIGJhc2VkIG9uIGdyYW50cworCWlmIChyZWYoJG9EYXRhKSBlcSAn QVJSQVknICYmICgkc3RyQ29tbWFuZCBlcSBDT01NQU5EX1NFTEVDVCB8fAorCQkkb0NvbW1h bmRIYXNoeyRzdHJDb21tYW5kfXsmQ0xBU1N9IGVxIENMQVNTX1dSSVRFKSkKKwl7CisJCWZv cmVhY2ggbXkgJG9UYWJsZUhhc2ggKEB7JG9EYXRhfSkKKwkJeworCQkJbXkgJHN0ck9iamVj dE5hbWUgPSBRdW90ZUNTVigkeyRvVGFibGVIYXNofXsmTkFNRX0pOworCQkJbXkgJHN0ckNv bW1hbmRMb2cgPSAkeyRvVGFibGVIYXNofXsmQ09NTUFORH07CisKKwkJCWlmIChkZWZpbmVk KCRvQXVkaXRHcmFudEhhc2h7JHN0ckF1ZGl0Um9sZX0KKwkJCQkJCQkJCQl7JHN0ck9iamVj dE5hbWV9eyRzdHJDb21tYW5kTG9nfSkpCisJCQl7CisJCQkJbXkgJHN0ckNvbW1hbmRMb2cg PSBkZWZpbmVkKCR7JG9UYWJsZUhhc2h9eyZDT01NQU5EX0xPR30pID8KKwkJCQkJJHskb1Rh YmxlSGFzaH17JkNPTU1BTkRfTE9HfSA6ICRzdHJDb21tYW5kTG9nOworCQkJCW15ICRzdHJD bGFzcyA9ICRvQ29tbWFuZEhhc2h7JHN0ckNvbW1hbmRMb2d9eyZDTEFTU307CisJCQkJbXkg JHN0ck9iamVjdFR5cGUgPSAkeyRvVGFibGVIYXNofXsmVFlQRX07CisKKwkJCQlteSAkc3Ry TG9nIC49ICJPQkpFQ1QsJHtzdHJDbGFzc30sJHtzdHJDb21tYW5kTG9nfSwiIC4KKwkJCQkJ CQkgICIke3N0ck9iamVjdFR5cGV9LCR7c3RyT2JqZWN0TmFtZX0sJHtzdHJTcWx9IjsKKwkJ CQkmbG9nKCJBVURJVDogJHtzdHJMb2d9Iik7CisKKwkJCQkkc3RyTG9nRXhwZWN0ZWQgLj0g IiR7c3RyTG9nfVxuIjsKKwkJCX0KKwkJfQorCisJCSRvRGF0YSA9IHVuZGVmOworCX0KK30K KworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUGdTaG91bGRMb2cKKyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCitzdWIgUGdTaG91bGRMb2cKK3sKKwlteSAkc3RyQ29tbWFu ZCA9IHNoaWZ0OworCisJIyBNYWtlIHN1cmUgY2xhc3MgaXMgZGVmaW5lZAorCW15ICRzdHJD bGFzcyA9ICRvQ29tbWFuZEhhc2h7JHN0ckNvbW1hbmR9eyZDTEFTU307CisKKwlpZiAoIWRl ZmluZWQoJHN0ckNsYXNzKSkKKwl7CisJCWNvbmZlc3MgImNsYXNzIGlzIG5vdCBkZWZpbmVk IGZvciBjb21tYW5kICR7c3RyQ29tbWFuZH0iOworCX0KKworCSMgQ2hlY2sgbG9nZ2luZyBm b3IgdGhlIHJvbGUKKwlteSAkYkxvZyA9IHVuZGVmOworCisJaWYgKGRlZmluZWQoJG9BdWRp dExvZ0hhc2h7JkNPTlRFWFRfUk9MRX17JHN0clVzZXJ9KSkKKwl7CisJCSRiTG9nID0gJG9B dWRpdExvZ0hhc2h7JkNPTlRFWFRfUk9MRX17JHN0clVzZXJ9eyRzdHJDbGFzc307CisJfQor CisJIyBFbHNlIGNoZWNrIGxvZ2dpbmcgZm9yIHRoZSBkYgorCWVsc2lmIChkZWZpbmVkKCRv QXVkaXRMb2dIYXNoeyZDT05URVhUX0RBVEFCQVNFfXskc3RyRGF0YWJhc2V9KSkKKwl7CisJ CSRiTG9nID0gJG9BdWRpdExvZ0hhc2h7JkNPTlRFWFRfREFUQUJBU0V9eyRzdHJEYXRhYmFz ZX17JHN0ckNsYXNzfTsKKwl9CisKKwkjIEVsc2UgY2hlY2sgbG9nZ2luZyBmb3IgZ2xvYmFs CisJZWxzaWYgKGRlZmluZWQoJG9BdWRpdExvZ0hhc2h7JkNPTlRFWFRfR0xPQkFMfXsmQ09O VEVYVF9HTE9CQUx9KSkKKwl7CisJCSRiTG9nID0gJG9BdWRpdExvZ0hhc2h7JkNPTlRFWFRf R0xPQkFMfXsmQ09OVEVYVF9HTE9CQUx9eyRzdHJDbGFzc307CisJfQorCisJcmV0dXJuIGRl ZmluZWQoJGJMb2cpID8gdHJ1ZSA6IGZhbHNlOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIworIyBQZ0xvZ1dhaXQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzdWIg UGdMb2dXYWl0Cit7CisJbXkgJHN0ckxvZ0FjdHVhbDsKKworCSMgUnVuIGluIGFuIGV2YWwg YmxvY2sgc2luY2UgZ3JlcCByZXR1cm5zIDEgd2hlbiBub3RoaW5nIHdhcyBmb3VuZAorCWV2 YWwKKwl7CisJCSRzdHJMb2dBY3R1YWwgPSBjYXB0dXJlKCJncmVwICdMT0c6ICBBVURJVDog JyIgLgorCQkJCQkJCQkiICR7c3RyVGVzdFBhdGh9L3Bvc3RncmVzcWwubG9nIik7CisJfTsK KworCSMgSWYgYW4gZXJyb3Igd2FzIHJldHVybmVkLCBjb250aW51ZSBpZiBpdCB3YXMgMSwg b3RoZXJ3aXNlIGNvbmZlc3MKKwlpZiAoJEApCisJeworCQlteSAkaUV4aXRTdGF0dXMgPSAk PyA+PiA4OworCisJCWlmICgkaUV4aXRTdGF0dXMgIT0gMSkKKwkJeworCQkJY29uZmVzcyAi Z3JlcCByZXR1cm5lZCAke2lFeGl0U3RhdHVzfSI7CisJCX0KKworCQkkc3RyTG9nQWN0dWFs ID0gJyc7CisJfQorCisJIyBTdHJpcCB0aGUgQVVESVQgYW5kIHRpbWVzdGFtcCBmcm9tIHRo ZSBhY3R1YWwgbG9nCisJJHN0ckxvZ0FjdHVhbCA9fiBzL3ByZWZpeCBMT0c6ICBBVURJVFw6 IC8vZzsKKwkkc3RyTG9nQWN0dWFsID1+IHMvU0VTU0lPTixbMC05XSssWzAtOV0rLC9TRVNT SU9OLC9nOworCSRzdHJMb2dBY3R1YWwgPX4gcy9PQkpFQ1QsWzAtOV0rLFswLTldKywvT0JK RUNULC9nOworCisJIyBTYXZlIHRoZSBsb2dzCisJU2F2ZVN0cmluZygiJHtzdHJUZXN0UGF0 aH0vYXVkaXQuYWN0dWFsIiwgJHN0ckxvZ0FjdHVhbCk7CisJU2F2ZVN0cmluZygiJHtzdHJU ZXN0UGF0aH0vYXVkaXQuZXhwZWN0ZWQiLCAkc3RyTG9nRXhwZWN0ZWQpOworCisJQ29tbWFu ZEV4ZWN1dGUoImRpZmYgJHtzdHJUZXN0UGF0aH0vYXVkaXQuZXhwZWN0ZWQiIC4KKwkJCQkg ICAiICR7c3RyVGVzdFBhdGh9L2F1ZGl0LmFjdHVhbCIpOworfQorCisjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIworIyBQZ0Ryb3AKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitz dWIgUGdEcm9wCit7CisJbXkgJHN0clBhdGggPSBzaGlmdDsKKworCSMgU2V0IGRlZmF1bHQK Kwkkc3RyUGF0aCA9IGRlZmluZWQoJHN0clBhdGgpID8gJHN0clBhdGggOiAkc3RyVGVzdFBh dGg7CisKKwkjIFN0b3AgdGhlIGNsdXN0ZXIKKwlQZ1N0b3AodHJ1ZSwgJHN0clBhdGgpOwor CisJIyBSZW1vdmUgdGhlIGRpcmVjdG9yeQorCUNvbW1hbmRFeGVjdXRlKCJybSAtcmYgJHtz dHJUZXN0UGF0aH0iKTsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUGdD cmVhdGUKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzdWIgUGdDcmVhdGUKK3sKKwlt eSAkc3RyUGF0aCA9IHNoaWZ0OworCisJIyBTZXQgZGVmYXVsdAorCSRzdHJQYXRoID0gZGVm aW5lZCgkc3RyUGF0aCkgPyAkc3RyUGF0aCA6ICRzdHJUZXN0UGF0aDsKKworCUNvbW1hbmRF eGVjdXRlKCIke3N0clBnU3FsQmlufS9pbml0ZGIgLUQgJHtzdHJQYXRofSAtVSAke3N0clVz ZXJ9IiAuCisJCQkJICAgJyAtQSB0cnVzdCA+IC9kZXYvbnVsbCcpOworfQorCisjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIworIyBQZ1N0b3AKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCitzdWIgUGdTdG9wCit7CisJbXkgJGJJbW1lZGlhdGUgPSBzaGlmdDsKKwlteSAkc3Ry UGF0aCA9IHNoaWZ0OworCisJIyBTZXQgZGVmYXVsdAorCSRzdHJQYXRoID0gZGVmaW5lZCgk c3RyUGF0aCkgPyAkc3RyUGF0aCA6ICRzdHJUZXN0UGF0aDsKKwkkYkltbWVkaWF0ZSA9IGRl ZmluZWQoJGJJbW1lZGlhdGUpID8gJGJJbW1lZGlhdGUgOiBmYWxzZTsKKworCSMgRGlzY29u bmVjdCB1c2VyIHNlc3Npb24KKwlQZ0Rpc2Nvbm5lY3QoKTsKKworCSMgSWYgcG9zdG1hc3Rl ciBwcm9jZXNzIGlzIHJ1bm5pbmcgdGhlbiBzdG9wIHRoZSBjbHVzdGVyCisJaWYgKC1lICRz dHJQYXRoIC4gJy9wb3N0bWFzdGVyLnBpZCcpCisJeworCQlDb21tYW5kRXhlY3V0ZSgiJHtz dHJQZ1NxbEJpbn0vcGdfY3RsIHN0b3AgLUQgJHtzdHJQYXRofSAtdyAtcyAtbSAiIC4KKwkJ CQkJICAoJGJJbW1lZGlhdGUgPyAnaW1tZWRpYXRlJyA6ICdmYXN0JykpOworCX0KK30KKwor IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUGdTdGFydAorIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKK3N1YiBQZ1N0YXJ0Cit7CisJbXkgJGlQb3J0ID0gc2hpZnQ7CisJbXkg JHN0clBhdGggPSBzaGlmdDsKKworCSMgU2V0IGRlZmF1bHQKKwkkaVBvcnQgPSBkZWZpbmVk KCRpUG9ydCkgPyAkaVBvcnQgOiAkaURlZmF1bHRQb3J0OworCSRzdHJQYXRoID0gZGVmaW5l ZCgkc3RyUGF0aCkgPyAkc3RyUGF0aCA6ICRzdHJUZXN0UGF0aDsKKworCSMgTWFrZSBzdXJl IHBvc3RncmVzIGlzIG5vdCBydW5uaW5nCisJaWYgKC1lICRzdHJQYXRoIC4gJy9wb3N0bWFz dGVyLnBpZCcpCisJeworCQljb25mZXNzICIke3N0clBhdGh9L3Bvc3RtYXN0ZXIucGlkIGV4 aXN0cywgY2Fubm90IHN0YXJ0IjsKKwl9CisKKwkjIFN0YXJ0IHRoZSBjbHVzdGVyCisJQ29t bWFuZEV4ZWN1dGUoIiR7c3RyUGdTcWxCaW59L3BnX2N0bCBzdGFydCAtbyBcIiIgLgorCQkJ CSAgICItYyBwb3J0PSR7aVBvcnR9IiAuCisJCQkJICAgIiAtYyB1bml4X3NvY2tldF9kaXJl Y3Rvcmllcz0nL3RtcCciIC4KKwkJCQkgICAiIC1jIHNoYXJlZF9wcmVsb2FkX2xpYnJhcmll cz0ncGdfYXVkaXQnIiAuCisJCQkJICAgIiAtYyBsb2dfbWluX21lc3NhZ2VzPWRlYnVnMSIg LgorCQkJCSAgICIgLWMgbG9nX2xpbmVfcHJlZml4PSdwcmVmaXggJyIgLgorCQkJCSAgICIg LWMgbG9nX3N0YXRlbWVudD1hbGwiIC4KKwkJCQkgICAoZGVmaW5lZCgkc3RyQ3VycmVudEF1 ZGl0TG9nKSA/CisJCQkJCSAgICIgLWMgcGdfYXVkaXQubG9nPScke3N0ckN1cnJlbnRBdWRp dExvZ30nIiA6ICcnKSAuCisJCQkJICAgIiAtYyBwZ19hdWRpdC5yb2xlPScke3N0ckF1ZGl0 Um9sZX0nIiAuCisJCQkJICAgIiAtYyBsb2dfY29ubmVjdGlvbnM9b24iIC4KKwkJCQkgICAi XCIgLUQgJHtzdHJQYXRofSAtbCAke3N0clBhdGh9L3Bvc3RncmVzcWwubG9nIC13IC1zIik7 CisKKwkjIENvbm5lY3QgdXNlciBzZXNzaW9uCisJUGdDb25uZWN0KCk7Cit9CisKKyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFBnQXVkaXRMb2dTZXQKKyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCitzdWIgUGdBdWRpdExvZ1NldAoreworCW15ICRzdHJDb250ZXh0ID0g c2hpZnQ7CisJbXkgJHN0ck5hbWUgPSBzaGlmdDsKKwlteSBAc3RyeUNsYXNzID0gQF87CisK KwkjIENyZWF0ZSBTUUwgdG8gc2V0IHRoZSBHVUMKKwlteSAkc3RyQ29tbWFuZDsKKwlteSAk c3RyU3FsOworCisJaWYgKCRzdHJDb250ZXh0IGVxIENPTlRFWFRfR0xPQkFMKQorCXsKKwkJ JHN0ckNvbW1hbmQgPSBDT01NQU5EX1NFVDsKKwkJJHN0clNxbCA9ICJzZXQgcGdfYXVkaXQu bG9nID0gJyIgLgorCQkJCSAgQXJyYXlUb1N0cmluZyhAc3RyeUNsYXNzKSAuICInIjsKKwkJ JHN0clRlbXBvcmFyeUF1ZGl0TG9nID0gQXJyYXlUb1N0cmluZyhAc3RyeUNsYXNzKTsKKwl9 CisJZWxzaWYgKCRzdHJDb250ZXh0IGVxIENPTlRFWFRfUk9MRSkKKwl7CisJCSRzdHJDb21t YW5kID0gQ09NTUFORF9BTFRFUl9ST0xFX1NFVDsKKwkJJHN0clNxbCA9ICJhbHRlciByb2xl ICR7c3RyTmFtZX0gc2V0IHBnX2F1ZGl0LmxvZyA9ICciIC4KKwkJCQkgIEFycmF5VG9TdHJp bmcoQHN0cnlDbGFzcykgLiAiJyI7CisJfQorCWVsc2UKKwl7CisJCWNvbmZlc3MgInVuYWJs ZSB0byBzZXQgcGdfYXVkaXQubG9nIGZvciBjb250ZXh0ICR7c3RyQ29udGV4dH0iOworCX0K KworCSMgUmVzZXQgdGhlIGF1ZGl0IGxvZworCWlmICgkc3RyQ29udGV4dCBlcSBDT05URVhU X0dMT0JBTCkKKwl7CisJCWRlbGV0ZSgkb0F1ZGl0TG9nSGFzaHskc3RyQ29udGV4dH0pOwor CQkkc3RyTmFtZSA9IENPTlRFWFRfR0xPQkFMOworCX0KKwllbHNlCisJeworCQlkZWxldGUo JG9BdWRpdExvZ0hhc2h7JHN0ckNvbnRleHR9eyRzdHJOYW1lfSk7CisJfQorCisJIyBTdG9y ZSBhbGwgdGhlIGNsYXNzZXMgaW4gdGhlIGhhc2ggYW5kIGJ1aWxkIHRoZSBHVUMKKwlmb3Jl YWNoIG15ICRzdHJDbGFzcyAoQHN0cnlDbGFzcykKKwl7CisJCWlmICgkc3RyQ2xhc3MgZXEg Q0xBU1NfQUxMKQorCQl7CisJCQkkb0F1ZGl0TG9nSGFzaHskc3RyQ29udGV4dH17JHN0ck5h bWV9eyZDTEFTU19EREx9ID0gdHJ1ZTsKKwkJCSRvQXVkaXRMb2dIYXNoeyRzdHJDb250ZXh0 fXskc3RyTmFtZX17JkNMQVNTX0ZVTkNUSU9OfSA9IHRydWU7CisJCQkkb0F1ZGl0TG9nSGFz aHskc3RyQ29udGV4dH17JHN0ck5hbWV9eyZDTEFTU19NSVNDfSA9IHRydWU7CisJCQkkb0F1 ZGl0TG9nSGFzaHskc3RyQ29udGV4dH17JHN0ck5hbWV9eyZDTEFTU19SRUFEfSA9IHRydWU7 CisJCQkkb0F1ZGl0TG9nSGFzaHskc3RyQ29udGV4dH17JHN0ck5hbWV9eyZDTEFTU19XUklU RX0gPSB0cnVlOworCQl9CisKKwkJaWYgKGluZGV4KCRzdHJDbGFzcywgJy0nKSA9PSAwKQor CQl7CisJCQkkc3RyQ2xhc3MgPSBzdWJzdHIoJHN0ckNsYXNzLCAxKTsKKworCQkJZGVsZXRl KCRvQXVkaXRMb2dIYXNoeyRzdHJDb250ZXh0fXskc3RyTmFtZX17JHN0ckNsYXNzfSk7CisJ CX0KKwkJZWxzZQorCQl7CisJCQkkb0F1ZGl0TG9nSGFzaHskc3RyQ29udGV4dH17JHN0ck5h bWV9eyRzdHJDbGFzc30gPSB0cnVlOworCQl9CisJfQorCisJUGdMb2dFeGVjdXRlKCRzdHJD b21tYW5kLCAkc3RyU3FsKTsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMg UGdBdWRpdEdyYW50U2V0CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc3ViIFBnQXVk aXRHcmFudFNldAoreworCW15ICRzdHJSb2xlID0gc2hpZnQ7CisJbXkgJHN0clByaXZpbGVn ZSA9IHNoaWZ0OworCW15ICRzdHJPYmplY3QgPSBzaGlmdDsKKwlteSAkc3RyQ29sdW1uID0g c2hpZnQ7CisKKwkjIENyZWF0ZSBTUUwgdG8gc2V0IHRoZSBncmFudAorCVBnTG9nRXhlY3V0 ZShDT01NQU5EX0dSQU5ULCAiR1JBTlQgIiAuCisJCQkJCQkJCShkZWZpbmVkKCRzdHJDb2x1 bW4pID8KKwkJCQkJCQkJCWxjKCR7c3RyUHJpdmlsZWdlfSkgLiIgKCR7c3RyQ29sdW1ufSki IDoKKwkJCQkJCQkJCXVjKCR7c3RyUHJpdmlsZWdlfSkpIC4KKwkJCQkJCQkJIiBPTiBUQUJM RSAke3N0ck9iamVjdH0gVE8gJHtzdHJSb2xlfSAiKTsKKworCSRvQXVkaXRHcmFudEhhc2h7 JHN0clJvbGV9eyRzdHJPYmplY3R9eyRzdHJQcml2aWxlZ2V9ID0gdHJ1ZTsKK30KKworIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUGdBdWRpdEdyYW50UmVzZXQKKyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCitzdWIgUGdBdWRpdEdyYW50UmVzZXQKK3sKKwlteSAkc3Ry Um9sZSA9IHNoaWZ0OworCW15ICRzdHJQcml2aWxlZ2UgPSBzaGlmdDsKKwlteSAkc3RyT2Jq ZWN0ID0gc2hpZnQ7CisJbXkgJHN0ckNvbHVtbiA9IHNoaWZ0OworCisJIyBDcmVhdGUgU1FM IHRvIHNldCB0aGUgZ3JhbnQKKwlQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9SRVZPS0UsICJSRVZP S0UgICIgLiB1Yygke3N0clByaXZpbGVnZX0pIC4KKwkJCQkgKGRlZmluZWQoJHN0ckNvbHVt bikgPyAiICgke3N0ckNvbHVtbn0pIiA6ICcnKSAuCisJCQkJICIgT04gVEFCTEUgJHtzdHJP YmplY3R9IEZST00gJHtzdHJSb2xlfSAiKTsKKworCWRlbGV0ZSgkb0F1ZGl0R3JhbnRIYXNo eyRzdHJSb2xlfXskc3RyT2JqZWN0fXskc3RyUHJpdmlsZWdlfSk7Cit9CisKKyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCisjIE1haW4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj CitteSBAb3lUYWJsZTsJICAgIyBTdG9yZSB0YWJsZSBpbmZvIGZvciBzZWxlY3QsIGluc2Vy dCwgdXBkYXRlLCBkZWxldGUKK215ICRzdHJTcWw7CQkjIEhvbGQgU3FsIGNvbW1hbmRzCisK KyMgRHJvcCB0aGUgb2xkIGNsdXN0ZXIsIGJ1aWxkIHRoZSBjb2RlLCBhbmQgY3JlYXRlIGEg bmV3IGNsdXN0ZXIKK1BnRHJvcCgpOworQnVpbGRNb2R1bGUoKTsKK1BnQ3JlYXRlKCk7CitQ Z1N0YXJ0KCk7CisKK1BnRXhlY3V0ZSgiY3JlYXRlIGV4dGVuc2lvbiBwZ19hdWRpdCIpOwor CisjIENyZWF0ZSB0ZXN0IHVzZXJzIGFuZCB0aGUgYXVkaXQgcm9sZQorUGdFeGVjdXRlKCJj cmVhdGUgdXNlciB1c2VyMSIpOworUGdFeGVjdXRlKCJjcmVhdGUgdXNlciB1c2VyMiIpOwor UGdFeGVjdXRlKCJjcmVhdGUgcm9sZSAke3N0ckF1ZGl0Um9sZX0iKTsKKworUGdBdWRpdExv Z1NldChDT05URVhUX0dMT0JBTCwgdW5kZWYsIChDTEFTU19EREwpKTsKKworUGdBdWRpdExv Z1NldChDT05URVhUX1JPTEUsICd1c2VyMicsIChDTEFTU19SRUFELCBDTEFTU19XUklURSkp OworCisjIFVzZXIxIGZvbGxvd3MgdGhlIGdsb2JhbCBsb2cgc2V0dGluZ3MKK1BnU2V0VXNl cigndXNlcjEnKTsKKworJHN0clNxbCA9ICdDUkVBVEUgIFRBQkxFICBwdWJsaWMudGVzdCAo aWQgcGdfY2F0YWxvZy5pbnQ0ICAgKScgLgorCQkgICcgIFdJVEggKG9pZHM9T0ZGKSAgJzsK K1BnTG9nRXhlY3V0ZShDT01NQU5EX0NSRUFURV9UQUJMRSwgJHN0clNxbCwgJ3B1YmxpYy50 ZXN0Jyk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9TRUxFQ1QsICdzZWxlY3QgKiBmcm9tIHRl c3QnKTsKKworJHN0clNxbCA9ICdkcm9wIHRhYmxlIHRlc3QnOworUGdMb2dFeGVjdXRlKENP TU1BTkRfRFJPUF9UQUJMRSwgJHN0clNxbCwgJ3B1YmxpYy50ZXN0Jyk7CisKK1BnU2V0VXNl cigndXNlcjInKTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0NSRUFURV9UQUJMRSwKKwkJCSAn Y3JlYXRlIHRhYmxlIHRlc3QyIChpZCBpbnQpJywgJ3B1YmxpYy50ZXN0MicpOworUGdBdWRp dEdyYW50U2V0KCRzdHJBdWRpdFJvbGUsICZDT01NQU5EX1NFTEVDVCwgJ3B1YmxpYy50ZXN0 MicpOworUGdMb2dFeGVjdXRlKENPTU1BTkRfQ1JFQVRFX1RBQkxFLAorCQkJICdjcmVhdGUg dGFibGUgdGVzdDMgKGlkIGludCknLCAncHVibGljLnRlc3QyJyk7CisKKyMgQ2F0YWxvZyBz ZWxlY3Qgc2hvdWxkIG5vdCBsb2cKK1BnTG9nRXhlY3V0ZShDT01NQU5EX1NFTEVDVCwgJ3Nl bGVjdCAqIGZyb20gcGdfY2xhc3MgbGltaXQgMScsCisJCQkJCQkJICAgZmFsc2UpOworCisj IE11bHRpLXRhYmxlIHNlbGVjdAorQG95VGFibGUgPSAoeyZOQU1FID0+ICdwdWJsaWMudGVz dDMnLCAmVFlQRSA9PiAmVFlQRV9UQUJMRSwKKwkJCSAmQ09NTUFORCA9PiAmQ09NTUFORF9T RUxFQ1R9LAorCQkJeyZOQU1FID0+ICdwdWJsaWMudGVzdDInLCAmVFlQRSA9PiAmVFlQRV9U QUJMRSwKKwkJCSAmQ09NTUFORCA9PiAmQ09NTUFORF9TRUxFQ1R9KTsKK1BnTG9nRXhlY3V0 ZShDT01NQU5EX1NFTEVDVCwgJ3NlbGVjdCAqIGZyb20gdGVzdDMsIHRlc3QyJywKKwkJCQkJ CQkgICBcQG95VGFibGUpOworCisjIFZhcmlvdXMgQ1RFIGNvbWJpbmF0aW9ucworUGdBdWRp dEdyYW50U2V0KCRzdHJBdWRpdFJvbGUsICZDT01NQU5EX0lOU0VSVCwgJ3B1YmxpYy50ZXN0 MycpOworCitAb3lUYWJsZSA9ICh7Jk5BTUUgPT4gJ3B1YmxpYy50ZXN0MycsICZUWVBFID0+ ICZUWVBFX1RBQkxFLAorCQkJICZDT01NQU5EID0+ICZDT01NQU5EX0lOU0VSVH0sCisJCQl7 Jk5BTUUgPT4gJ3B1YmxpYy50ZXN0MicsICZUWVBFID0+ICZUWVBFX1RBQkxFLAorCQkJICZD T01NQU5EID0+ICZDT01NQU5EX1NFTEVDVH0pOworUGdMb2dFeGVjdXRlKENPTU1BTkRfSU5T RVJULAorCQkJICd3aXRoIGN0ZSBhcyAoc2VsZWN0IGlkIGZyb20gdGVzdDIpJyAuCisJCQkg JyBpbnNlcnQgaW50byB0ZXN0MyBzZWxlY3QgaWQgZnJvbSBjdGUnLAorCQkJIFxAb3lUYWJs ZSk7CisKK0BveVRhYmxlID0gKHsmTkFNRSA9PiAncHVibGljLnRlc3QyJywgJlRZUEUgPT4g JlRZUEVfVEFCTEUsCisJCQkgJkNPTU1BTkQgPT4gJkNPTU1BTkRfSU5TRVJUfSwKKwkJCXsm TkFNRSA9PiAncHVibGljLnRlc3QzJywgJlRZUEUgPT4gJlRZUEVfVEFCTEUsCisJCQkgJkNP TU1BTkQgPT4gJkNPTU1BTkRfSU5TRVJUfSk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9JTlNF UlQsCisJCQkgJ3dpdGggY3RlIGFzIChpbnNlcnQgaW50byB0ZXN0MyB2YWx1ZXMgKDEpIHJl dHVybmluZyBpZCknIC4KKwkJCSAnIGluc2VydCBpbnRvIHRlc3QyIHNlbGVjdCBpZCBmcm9t IGN0ZScsCisJCQkgXEBveVRhYmxlKTsKKworUGdBdWRpdEdyYW50U2V0KCRzdHJBdWRpdFJv bGUsICZDT01NQU5EX1VQREFURSwgJ3B1YmxpYy50ZXN0MicpOworCitAb3lUYWJsZSA9ICh7 Jk5BTUUgPT4gJ3B1YmxpYy50ZXN0MycsICZUWVBFID0+ICZUWVBFX1RBQkxFLAorCQkJICZD T01NQU5EID0+ICZDT01NQU5EX0lOU0VSVH0sCisJCQl7Jk5BTUUgPT4gJ3B1YmxpYy50ZXN0 MicsICZUWVBFID0+ICZUWVBFX1RBQkxFLAorCQkJICZDT01NQU5EID0+ICZDT01NQU5EX1VQ REFURX0pOworUGdMb2dFeGVjdXRlKENPTU1BTkRfSU5TRVJULAorCQkJICd3aXRoIGN0ZSBh cyAodXBkYXRlIHRlc3QyIHNldCBpZCA9IDEgcmV0dXJuaW5nIGlkKScgLgorCQkJICcgaW5z ZXJ0IGludG8gdGVzdDMgc2VsZWN0IGlkIGZyb20gY3RlJywKKwkJCSBcQG95VGFibGUpOwor CitAb3lUYWJsZSA9ICh7Jk5BTUUgPT4gJ3B1YmxpYy50ZXN0MycsICZUWVBFID0+ICZUWVBF X1RBQkxFLAorCQkJICZDT01NQU5EID0+ICZDT01NQU5EX1VQREFURX0sCisJCQl7Jk5BTUUg PT4gJ3B1YmxpYy50ZXN0MicsICZUWVBFID0+ICZUWVBFX1RBQkxFLAorCQkJICZDT01NQU5E ID0+ICZDT01NQU5EX0lOU0VSVH0sCisJCQl7Jk5BTUUgPT4gJ3B1YmxpYy50ZXN0MicsICZU WVBFID0+ICZUWVBFX1RBQkxFLAorCQkJICZDT01NQU5EID0+ICZDT01NQU5EX1NFTEVDVCwg JkNPTU1BTkRfTE9HID0+ICZDT01NQU5EX0lOU0VSVH0pOworUGdMb2dFeGVjdXRlKENPTU1B TkRfVVBEQVRFLAorCQkJICd3aXRoIGN0ZSBhcyAoaW5zZXJ0IGludG8gdGVzdDIgdmFsdWVz ICgxKSByZXR1cm5pbmcgaWQpJyAuCisJCQkgJyB1cGRhdGUgdGVzdDMgc2V0IGlkID0gY3Rl LmlkJyAuCisJCQkgJyBmcm9tIGN0ZSB3aGVyZSB0ZXN0My5pZCA8PiBjdGUuaWQnLAorCQkJ IFxAb3lUYWJsZSk7CisKK1BnU2V0VXNlcigncG9zdGdyZXMnKTsKK1BnQXVkaXRMb2dTZXQo Q09OVEVYVF9ST0xFLCAndXNlcjInLCAoQ0xBU1NfTk9ORSkpOworUGdTZXRVc2VyKCd1c2Vy MicpOworCisjIENvbHVtbi1iYXNlZCBhdWRpdHMKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0NS RUFURV9UQUJMRSwKKwkJCSAnY3JlYXRlIHRhYmxlIHRlc3Q0IChpZCBpbnQsIG5hbWUgdGV4 dCknLCAncHVibGljLnRlc3Q0Jyk7CitQZ0F1ZGl0R3JhbnRTZXQoJHN0ckF1ZGl0Um9sZSwg Q09NTUFORF9TRUxFQ1QsICdwdWJsaWMudGVzdDQnLCAnbmFtZScpOworUGdBdWRpdEdyYW50 U2V0KCRzdHJBdWRpdFJvbGUsIENPTU1BTkRfVVBEQVRFLCAncHVibGljLnRlc3Q0JywgJ2lk Jyk7CitQZ0F1ZGl0R3JhbnRTZXQoJHN0ckF1ZGl0Um9sZSwgQ09NTUFORF9JTlNFUlQsICdw dWJsaWMudGVzdDQnLCAnbmFtZScpOworCisjIFNlbGVjdAorQG95VGFibGUgPSAoKTsKK1Bn TG9nRXhlY3V0ZShDT01NQU5EX1NFTEVDVCwgJ3NlbGVjdCBpZCBmcm9tIHB1YmxpYy50ZXN0 NCcsCisJCQkJCQkJICBcQG95VGFibGUpOworCitAb3lUYWJsZSA9ICh7Jk5BTUUgPT4gJ3B1 YmxpYy50ZXN0NCcsICZUWVBFID0+ICZUWVBFX1RBQkxFLAorCQkJICZDT01NQU5EID0+ICZD T01NQU5EX1NFTEVDVH0pOworUGdMb2dFeGVjdXRlKENPTU1BTkRfU0VMRUNULCAnc2VsZWN0 IG5hbWUgZnJvbSBwdWJsaWMudGVzdDQnLAorCQkJCQkJCSAgXEBveVRhYmxlKTsKKworIyBJ bnNlcnQKK0BveVRhYmxlID0gKCk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9JTlNFUlQsICdp bnNlcnQgaW50byBwdWJsaWMudGVzdDQgKGlkKSB2YWx1ZXMgKDEpJywKKwkJCQkJCQkgICBc QG95VGFibGUpOworCitAb3lUYWJsZSA9ICh7Jk5BTUUgPT4gJ3B1YmxpYy50ZXN0NCcsICZU WVBFID0+ICZUWVBFX1RBQkxFLAorCQkJICZDT01NQU5EID0+ICZDT01NQU5EX0lOU0VSVH0p OworUGdMb2dFeGVjdXRlKENPTU1BTkRfSU5TRVJULCAiaW5zZXJ0IGludG8gcHVibGljLnRl c3Q0IChuYW1lKSB2YWx1ZXMgKCd0ZXN0JykiLAorCQkJCQkJCSAgXEBveVRhYmxlKTsKKwor IyBVcGRhdGUKK0BveVRhYmxlID0gKCk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9VUERBVEUs ICJ1cGRhdGUgcHVibGljLnRlc3Q0IHNldCBuYW1lID0gJ2ZvbyciLAorCQkJCQkJCSAgIFxA b3lUYWJsZSk7CisKK0BveVRhYmxlID0gKHsmTkFNRSA9PiAncHVibGljLnRlc3Q0JywgJlRZ UEUgPT4gJlRZUEVfVEFCTEUsCisJCQkgJkNPTU1BTkQgPT4gJkNPTU1BTkRfVVBEQVRFfSk7 CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9VUERBVEUsICJ1cGRhdGUgcHVibGljLnRlc3Q0IHNl dCBpZCA9IDEiLAorCQkJCQkJCSAgXEBveVRhYmxlKTsKKworQG95VGFibGUgPSAoeyZOQU1F ID0+ICdwdWJsaWMudGVzdDQnLCAmVFlQRSA9PiAmVFlQRV9UQUJMRSwKKwkJCSZDT01NQU5E ID0+ICZDT01NQU5EX1NFTEVDVCwgJkNPTU1BTkRfTE9HID0+ICZDT01NQU5EX1VQREFURX0p OworUGdMb2dFeGVjdXRlKENPTU1BTkRfVVBEQVRFLAorCQkJICJ1cGRhdGUgcHVibGljLnRl c3Q0IHNldCBuYW1lID0gJ2Zvbycgd2hlcmUgbmFtZSA9ICdiYXInIiwKKwkJCSBcQG95VGFi bGUpOworCisjIERyb3AgdGVzdCB0YWJsZXMKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0RST1Bf VEFCTEUsICJkcm9wIHRhYmxlIHRlc3QyIiwgJ3B1YmxpYy50ZXN0MicpOworUGdMb2dFeGVj dXRlKENPTU1BTkRfRFJPUF9UQUJMRSwgImRyb3AgdGFibGUgdGVzdDMiLCAncHVibGljLnRl c3QzJyk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9EUk9QX1RBQkxFLCAiZHJvcCB0YWJsZSB0 ZXN0NCIsICdwdWJsaWMudGVzdDQnKTsKKworCisjIE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8g bW9yZSBhdWRpdCBldmVudHMgcGVuZGluZyBpbiB0aGUgcG9zdGdyZXMgbG9nCitQZ0xvZ1dh aXQoKTsKKworIyBDcmVhdGUgc29tZSBlbWFpbCBmcmllbmRseSB0ZXN0cy4gIFRoZXNlIGZp cnN0IHRlc3RzIGFyZSBzZXNzaW9uIGxvZ2dpbmcgb25seS4KK1BnU2V0VXNlcigncG9zdGdy ZXMnKTsKKworJmxvZygiXG5FeGFtcGxlczoiKTsKKworJmxvZygiXG5TZXNzaW9uIEF1ZGl0 OlxuIik7CisKK1BnQXVkaXRMb2dTZXQoQ09OVEVYVF9HTE9CQUwsIHVuZGVmLCAoQ0xBU1Nf RERMLCBDTEFTU19SRUFEKSk7CisKK1BnU2V0VXNlcigndXNlcjEnKTsKKworJHN0clNxbCA9 ICdDUkVBVEUgIFRBQkxFICBwdWJsaWMuYWNjb3VudCAoaWQgcGdfY2F0YWxvZy5pbnQ0ICAg LCcgLgorCQkgICcgbmFtZSBwZ19jYXRhbG9nLnRleHQgICBDT0xMQVRFIHBnX2NhdGFsb2cu ImRlZmF1bHQiLCAnIC4KKwkJICAncGFzc3dvcmQgcGdfY2F0YWxvZy50ZXh0ICAgQ09MTEFU RSBwZ19jYXRhbG9nLiJkZWZhdWx0IiwgJy4KKwkJICAnZGVzY3JpcHRpb24gcGdfY2F0YWxv Zy50ZXh0ICAgQ09MTEFURSBwZ19jYXRhbG9nLiJkZWZhdWx0IikgICcuCisJCSAgJ1dJVEgg KG9pZHM9T0ZGKSAgJzsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0NSRUFURV9UQUJMRSwgJHN0 clNxbCwgJ3B1YmxpYy5hY2NvdW50Jyk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9TRUxFQ1Qs CisJCQkgJ3NlbGVjdCAqIGZyb20gYWNjb3VudCcpOworUGdMb2dFeGVjdXRlKENPTU1BTkRf SU5TRVJULAorCQkJICJpbnNlcnQgaW50byBhY2NvdW50IChpZCwgbmFtZSwgcGFzc3dvcmQs IGRlc2NyaXB0aW9uKSIgLgorCQkJICIgdmFsdWVzICgxLCAndXNlcjEnLCAnSEFTSDEnLCAn YmxhaCwgYmxhaCcpIik7CismbG9nKCJBVURJVDogPG5vdGhpbmcgbG9nZ2VkPiIpOworCisj IE5vdyB0ZXN0cyBmb3Igb2JqZWN0IGxvZ2dpbmcKKyZsb2coIlxuT2JqZWN0IEF1ZGl0Olxu Iik7CisKK1BnU2V0VXNlcigncG9zdGdyZXMnKTsKK1BnQXVkaXRMb2dTZXQoQ09OVEVYVF9H TE9CQUwsIHVuZGVmLCAoQ0xBU1NfTk9ORSkpOworUGdFeGVjdXRlKCJzZXQgcGdfYXVkaXQu cm9sZSA9ICdhdWRpdCciKTsKK1BnU2V0VXNlcigndXNlcjEnKTsKKworUGdBdWRpdEdyYW50 U2V0KCRzdHJBdWRpdFJvbGUsICZDT01NQU5EX1NFTEVDVCwgJ3B1YmxpYy5hY2NvdW50Jywg J3Bhc3N3b3JkJyk7CisKK0BveVRhYmxlID0gKCk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9T RUxFQ1QsICdzZWxlY3QgaWQsIG5hbWUgZnJvbSBhY2NvdW50JywKKwkJCQkJCQkgIFxAb3lU YWJsZSk7CismbG9nKCJBVURJVDogPG5vdGhpbmcgbG9nZ2VkPiIpOworCitAb3lUYWJsZSA9 ICh7Jk5BTUUgPT4gJ3B1YmxpYy5hY2NvdW50JywgJlRZUEUgPT4gJlRZUEVfVEFCTEUsCisJ CQkgJkNPTU1BTkQgPT4gJkNPTU1BTkRfU0VMRUNUfSk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFO RF9TRUxFQ1QsICdzZWxlY3QgcGFzc3dvcmQgZnJvbSBhY2NvdW50JywKKwkJCQkJCQkgIFxA b3lUYWJsZSk7CisKK1BnQXVkaXRHcmFudFNldCgkc3RyQXVkaXRSb2xlLCAmQ09NTUFORF9V UERBVEUsCisJCQkJJ3B1YmxpYy5hY2NvdW50JywgJ25hbWUsIHBhc3N3b3JkJyk7CisKK0Bv eVRhYmxlID0gKCk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9VUERBVEUsICJ1cGRhdGUgYWNj b3VudCBzZXQgZGVzY3JpcHRpb24gPSAneWFkYSwgeWFkYSciLAorCQkJCQkJCSAgXEBveVRh YmxlKTsKKyZsb2coIkFVRElUOiA8bm90aGluZyBsb2dnZWQ+Iik7CisKK0BveVRhYmxlID0g KHsmTkFNRSA9PiAncHVibGljLmFjY291bnQnLCAmVFlQRSA9PiAmVFlQRV9UQUJMRSwKKwkJ CSAmQ09NTUFORCA9PiAmQ09NTUFORF9VUERBVEV9KTsKK1BnTG9nRXhlY3V0ZShDT01NQU5E X1VQREFURSwgInVwZGF0ZSBhY2NvdW50IHNldCBwYXNzd29yZCA9ICdIQVNIMiciLAorCQkJ CQkJCSAgXEBveVRhYmxlKTsKKworIyBOb3cgdGVzdHMgZm9yIHNlc3Npb24vb2JqZWN0IGxv Z2dpbmcKKyZsb2coIlxuU2Vzc2lvbi9PYmplY3QgQXVkaXQ6XG4iKTsKKworUGdTZXRVc2Vy KCdwb3N0Z3JlcycpOworUGdBdWRpdExvZ1NldChDT05URVhUX1JPTEUsICd1c2VyMScsIChD TEFTU19SRUFELCBDTEFTU19XUklURSkpOworUGdTZXRVc2VyKCd1c2VyMScpOworCitQZ0xv Z0V4ZWN1dGUoQ09NTUFORF9DUkVBVEVfVEFCTEUsCisJCQkgJ2NyZWF0ZSB0YWJsZSBhY2Nv dW50X3JvbGVfbWFwIChhY2NvdW50X2lkIGludCwgcm9sZV9pZCBpbnQpJywKKwkJCSAncHVi bGljLmFjY291bnRfcm9sZV9tYXAnKTsKK1BnQXVkaXRHcmFudFNldCgkc3RyQXVkaXRSb2xl LCAmQ09NTUFORF9TRUxFQ1QsICdwdWJsaWMuYWNjb3VudF9yb2xlX21hcCcpOworCitAb3lU YWJsZSA9ICh7Jk5BTUUgPT4gJ3B1YmxpYy5hY2NvdW50JywgJlRZUEUgPT4gJlRZUEVfVEFC TEUsCisJCQkgJkNPTU1BTkQgPT4gJkNPTU1BTkRfU0VMRUNUfSwKKwkJCXsmTkFNRSA9PiAn cHVibGljLmFjY291bnRfcm9sZV9tYXAnLCAmVFlQRSA9PiAmVFlQRV9UQUJMRSwKKwkJCSAm Q09NTUFORCA9PiAmQ09NTUFORF9TRUxFQ1R9KTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX1NF TEVDVCwKKwkJCSAnc2VsZWN0IGFjY291bnQucGFzc3dvcmQsIGFjY291bnRfcm9sZV9tYXAu cm9sZV9pZCBmcm9tIGFjY291bnQnIC4KKwkJCSAnIGlubmVyIGpvaW4gYWNjb3VudF9yb2xl X21hcCcgLgorCQkJICcgb24gYWNjb3VudC5pZCA9IGFjY291bnRfcm9sZV9tYXAuYWNjb3Vu dF9pZCcsCisJCQkgXEBveVRhYmxlKTsKKworQG95VGFibGUgPSAoeyZOQU1FID0+ICdwdWJs aWMuYWNjb3VudCcsICZUWVBFID0+ICZUWVBFX1RBQkxFLAorCQkJICZDT01NQU5EID0+ICZD T01NQU5EX1NFTEVDVH0pOworUGdMb2dFeGVjdXRlKENPTU1BTkRfU0VMRUNULCAnc2VsZWN0 IHBhc3N3b3JkIGZyb20gYWNjb3VudCcsCisJCQkJCQkJICBcQG95VGFibGUpOworCitAb3lU YWJsZSA9ICgpOworUGdMb2dFeGVjdXRlKENPTU1BTkRfVVBEQVRFLCAidXBkYXRlIGFjY291 bnQgc2V0IGRlc2NyaXB0aW9uID0gJ3lhZGEsIHlhZGEnIiwKKwkJCQkJCQkgIFxAb3lUYWJs ZSk7CismbG9nKCJBVURJVDogPG5vdGhpbmcgbG9nZ2VkPiIpOworCitAb3lUYWJsZSA9ICh7 Jk5BTUUgPT4gJ3B1YmxpYy5hY2NvdW50JywgJlRZUEUgPT4gJlRZUEVfVEFCTEUsCisJCQkg JkNPTU1BTkQgPT4gJkNPTU1BTkRfU0VMRUNULCAmQ09NTUFORF9MT0cgPT4gJkNPTU1BTkRf VVBEQVRFfSk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9VUERBVEUsCisJCQkgInVwZGF0ZSBh Y2NvdW50IHNldCBkZXNjcmlwdGlvbiA9ICd5YWRhLCB5YWRhJyIgLgorCQkJICIgd2hlcmUg cGFzc3dvcmQgPSAnSEFTSDInIiwKKwkJCSBcQG95VGFibGUpOworCitAb3lUYWJsZSA9ICh7 Jk5BTUUgPT4gJ3B1YmxpYy5hY2NvdW50JywgJlRZUEUgPT4gJlRZUEVfVEFCTEUsCisJCQkg JkNPTU1BTkQgPT4gJkNPTU1BTkRfVVBEQVRFfSk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9V UERBVEUsICJ1cGRhdGUgYWNjb3VudCBzZXQgcGFzc3dvcmQgPSAnSEFTSDInIiwKKwkJCQkJ CQkgIFxAb3lUYWJsZSk7CisKKyMgVGVzdCBhbGwgc3FsIGNvbW1hbmRzCismbG9nKCJcbkV4 aGF1c3RpdmUgQ29tbWFuZCBUZXN0czpcbiIpOworCitQZ1NldFVzZXIoJ3Bvc3RncmVzJyk7 CisKK1BnQXVkaXRMb2dTZXQoQ09OVEVYVF9HTE9CQUwsIHVuZGVmLCAoQ0xBU1NfQUxMKSk7 CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9TRVQsICJzZXQgcGdfYXVkaXQucm9sZSA9ICdhdWRp dCciKTsKKworUGdMb2dFeGVjdXRlKENPTU1BTkRfRE8sICJkbyBcJFwkXCBiZWdpbiByYWlz ZSBub3RpY2UgJ3Rlc3QnOyBlbmQ7IFwkXCQ7Iik7CisKKyRzdHJTcWwgPSAnQ1JFQVRFIFND SEVNQSAgdGVzdCAnOworUGdMb2dFeGVjdXRlKENPTU1BTkRfQ1JFQVRFX1NDSEVNQSwgJHN0 clNxbCwgJ3Rlc3QnKTsKKworIyBUZXN0IENPUFkKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0NP UFlfVE8sCisJCQkgIkNPUFkgcGdfY2xhc3MgdG8gJyIgLiBhYnNfcGF0aCgkc3RyVGVzdFBh dGgpIC4gIi9jbGFzcy5vdXQnIik7CisKKyRzdHJTcWwgPSAnQ1JFQVRFICBUQUJMRSAgdGVz dC5wZ19jbGFzcyAgV0lUSCAob2lkcz1PRkYpICAgQVMgU0VMRUNUIHJlbG5hbWUsJyAuCisJ CSAgJyByZWxuYW1lc3BhY2UsIHJlbHR5cGUsIHJlbG9mdHlwZSwgcmVsb3duZXIsIHJlbGFt LCByZWxmaWxlbm9kZSwgJyAuCisJCSAgJ3JlbHRhYmxlc3BhY2UsIHJlbHBhZ2VzLCByZWx0 dXBsZXMsIHJlbGFsbHZpc2libGUsIHJlbHRvYXN0cmVsaWQsICcgLgorCQkgICdyZWxoYXNp bmRleCwgcmVsaXNzaGFyZWQsIHJlbHBlcnNpc3RlbmNlLCByZWxraW5kLCByZWxuYXR0cywg JyAuCisJCSAgJ3JlbGNoZWNrcywgcmVsaGFzb2lkcywgcmVsaGFzcGtleSwgcmVsaGFzcnVs ZXMsIHJlbGhhc3RyaWdnZXJzLCAnIC4KKwkJICAncmVsaGFzc3ViY2xhc3MsIHJlbHJvd3Nl Y3VyaXR5LCByZWxpc3BvcHVsYXRlZCwgcmVscmVwbGlkZW50LCAnIC4KKwkJICAncmVsZnJv emVueGlkLCByZWxtaW5teGlkLCByZWxhY2wsIHJlbG9wdGlvbnMgJyAuCisJCSAgJ0ZST00g cGdfY2F0YWxvZy5wZ19jbGFzcyAnOworUGdMb2dFeGVjdXRlKENPTU1BTkRfSU5TRVJULCAk c3RyU3FsLCB1bmRlZiwgdHJ1ZSwgZmFsc2UpOworUGdMb2dFeGVjdXRlKENPTU1BTkRfQ1JF QVRFX1RBQkxFX0FTLCAkc3RyU3FsLCAndGVzdC5wZ19jbGFzcycsIGZhbHNlLCB0cnVlKTsK KworJHN0clNxbCA9ICJDT1BZIHRlc3QucGdfY2xhc3MgZnJvbSAnIiAuIGFic19wYXRoKCRz dHJUZXN0UGF0aCkgLiAiL2NsYXNzLm91dCciOworUGdMb2dFeGVjdXRlKENPTU1BTkRfSU5T RVJULCAkc3RyU3FsKTsKKyNQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9DT1BZX0ZST00sICRzdHJT cWwsIHVuZGVmLCBmYWxzZSwgdHJ1ZSk7CisKKyMgVGVzdCBwcmVwYXJlZCBTRUxFQ1QKK1Bn TG9nRXhlY3V0ZShDT01NQU5EX1BSRVBBUkVfUkVBRCwKKwkJCSAnUFJFUEFSRSBwZ2NsYXNz c3RtdCAob2lkKSBhcyBzZWxlY3QgKicgLgorCQkJICcgZnJvbSBwZ19jbGFzcyB3aGVyZSBv aWQgPSAkMScpOworUGdMb2dFeGVjdXRlKENPTU1BTkRfRVhFQ1VURV9SRUFELAorCQkJICdF WEVDVVRFIHBnY2xhc3NzdG10ICgxKScpOworUGdMb2dFeGVjdXRlKENPTU1BTkRfREVBTExP Q0FURSwKKwkJCSAnREVBTExPQ0FURSBwZ2NsYXNzc3RtdCcpOworCisjIFRlc3QgY3Vyc29y CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9CRUdJTiwKKwkJCSAnQkVHSU4nKTsKK1BnTG9nRXhl Y3V0ZShDT01NQU5EX0RFQ0xBUkVfQ1VSU09SLAorCQkJICdERUNMQVJFIGN0ZXN0IFNDUk9M TCBDVVJTT1IgRk9SIFNFTEVDVCAqIEZST00gcGdfY2xhc3MnKTsKK1BnTG9nRXhlY3V0ZShD T01NQU5EX0ZFVENILAorCQkJICdGRVRDSCBORVhUIEZST00gY3Rlc3QnKTsKK1BnTG9nRXhl Y3V0ZShDT01NQU5EX0NMT1NFLAorCQkJICdDTE9TRSBjdGVzdCcpOworUGdMb2dFeGVjdXRl KENPTU1BTkRfQ09NTUlULAorCQkJICdDT01NSVQnKTsKKworIyBUZXN0IHByZXBhcmVkIElO U0VSVAorJHN0clNxbCA9ICdDUkVBVEUgIFRBQkxFICB0ZXN0LnRlc3RfaW5zZXJ0IChpZCBw Z19jYXRhbG9nLmludDQgICApICAnIC4KKwkJICAnV0lUSCAob2lkcz1PRkYpICAnOworUGdM b2dFeGVjdXRlKENPTU1BTkRfQ1JFQVRFX1RBQkxFLCAkc3RyU3FsLCAndGVzdC50ZXN0X2lu c2VydCcpOworCiskc3RyU3FsID0gJ1BSRVBBUkUgcGdjbGFzc3N0bXQgKG9pZCkgYXMgaW5z ZXJ0IGludG8gdGVzdC50ZXN0X2luc2VydCAoaWQpICcgLgorCQkgICd2YWx1ZXMgKCQxKSc7 CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9QUkVQQVJFX1dSSVRFLCAkc3RyU3FsKTsKK1BnTG9n RXhlY3V0ZShDT01NQU5EX0lOU0VSVCwgJHN0clNxbCwgdW5kZWYsIGZhbHNlLCBmYWxzZSwg dW5kZWYsICIxIik7CisKKyRzdHJTcWwgPSAnRVhFQ1VURSBwZ2NsYXNzc3RtdCAoMSknOwor UGdMb2dFeGVjdXRlKENPTU1BTkRfRVhFQ1VURV9XUklURSwgJHN0clNxbCwgdW5kZWYsIHRy dWUsIHRydWUpOworCisjIENyZWF0ZSBhIHRhYmxlIHdpdGggYSBwcmltYXJ5IGtleQorJHN0 clNxbCA9ICdDUkVBVEUgIFRBQkxFICBwdWJsaWMudGVzdCAoaWQgcGdfY2F0YWxvZy5pbnQ0 ICAgLCAnIC4KKwkJICAnbmFtZSBwZ19jYXRhbG9nLnRleHQgICBDT0xMQVRFIHBnX2NhdGFs b2cuImRlZmF1bHQiLCBkZXNjcmlwdGlvbiAnIC4KKwkJICAncGdfY2F0YWxvZy50ZXh0ICAg Q09MTEFURSBwZ19jYXRhbG9nLiJkZWZhdWx0IiwgQ09OU1RSQUlOVCAnIC4KKwkJICAndGVz dF9wa2V5IFBSSU1BUlkgS0VZIChpZCkpICBXSVRIIChvaWRzPU9GRikgICc7CitQZ0xvZ0V4 ZWN1dGUoQ09NTUFORF9DUkVBVEVfSU5ERVgsICRzdHJTcWwsICdwdWJsaWMudGVzdF9wa2V5 JywgdHJ1ZSwgZmFsc2UpOworUGdMb2dFeGVjdXRlKENPTU1BTkRfQ1JFQVRFX1RBQkxFLCAk c3RyU3FsLCAncHVibGljLnRlc3QnLCBmYWxzZSwgdHJ1ZSk7CisKK1BnTG9nRXhlY3V0ZShD T01NQU5EX0FOQUxZWkUsICdhbmFseXplIHRlc3QnKTsKKworIyBHcmFudCBzZWxlY3QgdG8g cHVibGljIC0gdGhpcyBzaG91bGQgaGF2ZSBubyBhZmZlY3Qgb24gYXVkaXRpbmcKKyRzdHJT cWwgPSAnR1JBTlQgU0VMRUNUIE9OIFRBQkxFIHB1YmxpYy50ZXN0IFRPIFBVQkxJQyAnOwor UGdMb2dFeGVjdXRlKENPTU1BTkRfR1JBTlQsICRzdHJTcWwpOworCitQZ0xvZ0V4ZWN1dGUo Q09NTUFORF9TRUxFQ1QsICdzZWxlY3QgKiBmcm9tIHRlc3QnKTsKKworIyBOb3cgZ3JhbnQg c2VsZWN0IHRvIGF1ZGl0IGFuZCBpdCBzaG91bGQgYmUgbG9nZ2VkCitQZ0F1ZGl0R3JhbnRT ZXQoJHN0ckF1ZGl0Um9sZSwgJkNPTU1BTkRfU0VMRUNULCAncHVibGljLnRlc3QnKTsKK0Bv eVRhYmxlID0gKHsmTkFNRSA9PiAncHVibGljLnRlc3QnLCAmVFlQRSA9PiAmVFlQRV9UQUJM RSwKKwkJCSAmQ09NTUFORCA9PiAmQ09NTUFORF9TRUxFQ1R9KTsKK1BnTG9nRXhlY3V0ZShD T01NQU5EX1NFTEVDVCwgJ3NlbGVjdCAqIGZyb20gdGVzdCcsIFxAb3lUYWJsZSk7CisKKyMg Q2hlY2sgY29sdW1ucyBncmFudGVkIHRvIHB1YmxpYyBhbmQgbWFrZSBzdXJlIHRoZXkgZG8g bm90IGxvZworUGdBdWRpdEdyYW50UmVzZXQoJHN0ckF1ZGl0Um9sZSwgJkNPTU1BTkRfU0VM RUNULCAncHVibGljLnRlc3QnKTsKKworJHN0clNxbCA9ICdHUkFOVCBzZWxlY3QgKG5hbWUp IE9OIFRBQkxFIHB1YmxpYy50ZXN0IFRPIFBVQkxJQyAnOworUGdMb2dFeGVjdXRlKENPTU1B TkRfR1JBTlQsICRzdHJTcWwpOworCitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9TRUxFQ1QsICdz ZWxlY3QgKiBmcm9tIHRlc3QnKTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX1NFTEVDVCwgJ3Nl bGVjdCBmcm9tIHRlc3QnKTsKKworIyBUcnkgYSBzZWxlY3QgdGhhdCBkb2VzIG5vdCByZWZl cmVuY2UgYW55IHRhYmxlcworUGdMb2dFeGVjdXRlKENPTU1BTkRfU0VMRUNULCAnc2VsZWN0 IDEsIGN1cnJlbnRfdGltZXN0YW1wJyk7CisKKyMgTm93IHRyeSB0aGUgc2FtZSBpbiBhIGRv IGJsb2NrCiskc3RyU3FsID0gJ2RvICQkIGRlY2xhcmUgdGVzdCBpbnQ7IGJlZ2luIHNlbGVj dCAxIGludG8gdGVzdDsgZW5kICQkJzsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0RPLCAkc3Ry U3FsLCB1bmRlZiwgdHJ1ZSwgZmFsc2UpOworCiskc3RyU3FsID0gJ3NlbGVjdCAxJzsKK1Bn TG9nRXhlY3V0ZShDT01NQU5EX1NFTEVDVCwgJHN0clNxbCwgdW5kZWYsIGZhbHNlLCB0cnVl KTsKKworIyBJbnNlcnQgc29tZSBkYXRhIGludG8gdGVzdCBhbmQgdHJ5IGEgbG9vcCBpbiBh IGRvIGJsb2NrCitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9JTlNFUlQsICdpbnNlcnQgaW50byB0 ZXN0IChpZCkgdmFsdWVzICgxKScpOworUGdMb2dFeGVjdXRlKENPTU1BTkRfSU5TRVJULCAn aW5zZXJ0IGludG8gdGVzdCAoaWQpIHZhbHVlcyAoMiknKTsKK1BnTG9nRXhlY3V0ZShDT01N QU5EX0lOU0VSVCwgJ2luc2VydCBpbnRvIHRlc3QgKGlkKSB2YWx1ZXMgKDMpJyk7CisKKyRz dHJTcWwgPSAnZG8gJCQgJyAuCisJCSAgJ2RlY2xhcmUgJyAuCisJCSAgJwlyZXN1bHQgcmVj b3JkOycgLgorCQkgICdiZWdpbiAnIC4KKwkJICAnCWZvciByZXN1bHQgaW4gc2VsZWN0IGlk IGZyb20gdGVzdCBsb29wICcgLgorCQkgICcJCWluc2VydCBpbnRvIHRlc3QgKGlkKSB2YWx1 ZXMgKHJlc3VsdC5pZCArIDEwMCk7ICcgLgorCQkgICcJZW5kIGxvb3A7ICcgLgorCQkgICdl bmQ7ICQkJzsKKworUGdMb2dFeGVjdXRlKENPTU1BTkRfRE8sICRzdHJTcWwsIHVuZGVmLCB0 cnVlLCBmYWxzZSk7CisKKyRzdHJTcWwgPSAnc2VsZWN0IGlkIGZyb20gdGVzdCc7CitQZ0xv Z0V4ZWN1dGUoQ09NTUFORF9TRUxFQ1QsICRzdHJTcWwsIHVuZGVmLCBmYWxzZSwgZmFsc2Up OworCiskc3RyU3FsID0gJ2luc2VydCBpbnRvIHRlc3QgKGlkKSB2YWx1ZXMgKHJlc3VsdC5p ZCArIDEwMCknOworUGdMb2dFeGVjdXRlKENPTU1BTkRfSU5TRVJULCAkc3RyU3FsLCB1bmRl ZiwgZmFsc2UsIGZhbHNlLCB1bmRlZiwgIiwsIik7CisKK1BnTG9nRXhlY3V0ZShDT01NQU5E X0lOU0VSVCwgJHN0clNxbCwgdW5kZWYsIGZhbHNlLCBmYWxzZSwgdW5kZWYsICIsLCIpOwor CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9JTlNFUlQsICRzdHJTcWwsIHVuZGVmLCBmYWxzZSwg ZmFsc2UsIHVuZGVmLCAiLCwiKTsKKworIyBUZXN0IEVYRUNVVEUgd2l0aCBiaW5kCiskc3Ry U3FsID0gInNlbGVjdCAqIGZyb20gdGVzdCB3aGVyZSBpZCA9ID8iOworbXkgJGhTdGF0ZW1l bnQgPSAkaERiLT5wcmVwYXJlKCRzdHJTcWwpOworCiskc3RyU3FsID0gInNlbGVjdCAqIGZy b20gdGVzdCB3aGVyZSBpZCA9IFwkMSI7CiskaFN0YXRlbWVudC0+YmluZF9wYXJhbSgxLCAx MDEpOworJGhTdGF0ZW1lbnQtPmV4ZWN1dGUoKTsKKworUGdMb2dFeGVjdXRlKENPTU1BTkRf U0VMRUNULCAkc3RyU3FsLCB1bmRlZiwgZmFsc2UsIGZhbHNlLCB1bmRlZiwgIjEwMSIpOwor CiskaFN0YXRlbWVudC0+YmluZF9wYXJhbSgxLCAxMDMpOworJGhTdGF0ZW1lbnQtPmV4ZWN1 dGUoKTsKKworUGdMb2dFeGVjdXRlKENPTU1BTkRfU0VMRUNULCAkc3RyU3FsLCB1bmRlZiwg ZmFsc2UsIGZhbHNlLCB1bmRlZiwgIjEwMyIpOworCiskaFN0YXRlbWVudC0+ZmluaXNoKCk7 CisKKyMgTm93IHRyeSBzb21lIERETCBpbiBhIGRvIGJsb2NrCiskc3RyU3FsID0gJ2RvICQk ICcgLgorCQkgICdiZWdpbiAnIC4KKwkJICAnCWNyZWF0ZSB0YWJsZSB0ZXN0X2Jsb2NrIChp ZCBpbnQpOyAnIC4KKwkJICAnCWRyb3AgdGFibGUgdGVzdF9ibG9jazsgJyAuCisJCSAgJ2Vu ZDsgJCQnOworCitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9ETywgJHN0clNxbCwgdW5kZWYsIHRy dWUsIGZhbHNlKTsKKworJHN0clNxbCA9ICdDUkVBVEUgIFRBQkxFICBwdWJsaWMudGVzdF9i bG9jayAoaWQgcGdfY2F0YWxvZy5pbnQ0ICAgKSAgJyAuCisJCSAgJ1dJVEggKG9pZHM9T0ZG KSAgJzsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0NSRUFURV9UQUJMRSwgJHN0clNxbCwgJ3B1 YmxpYy50ZXN0X2Jsb2NrJywgZmFsc2UsIGZhbHNlKTsKKworJHN0clNxbCA9ICdkcm9wIHRh YmxlIHRlc3RfYmxvY2snOworUGdMb2dFeGVjdXRlKENPTU1BTkRfRFJPUF9UQUJMRSwgJHN0 clNxbCwgJ3B1YmxpYy50ZXN0X2Jsb2NrJywgZmFsc2UsIGZhbHNlKTsKKworIyBHZW5lcmF0 ZSBhbiBlcnJvciBpbiBhIGRvIGJsb2NrIGFuZCBtYWtlIHN1cmUgdGhlIHN0YWNrIGdldHMg Y2xlYW5lZCB1cAorJHN0clNxbCA9ICdkbyAkJCAnIC4KKwkJICAnYmVnaW4gJyAuCisJCSAg JwljcmVhdGUgdGFibGUgYm9idXMudGVzdF9ibG9jayAoaWQgaW50KTsgJyAuCisJCSAgJ2Vu ZDsgJCQnOworCitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9ETywgJHN0clNxbCwgdW5kZWYsIHVu ZGVmLCB1bmRlZiwgdW5kZWYsIHVuZGVmLCB0cnVlKTsKKyMgUGdMb2dFeGVjdXRlKENPTU1B TkRfU0VMRUNULCAnc2VsZWN0IDEnKTsKKyMgZXhpdCAwOworCisjIFRyeSBleHBsYWluCitQ Z0xvZ0V4ZWN1dGUoQ09NTUFORF9TRUxFQ1QsICdleHBsYWluIHNlbGVjdCAxJywgdW5kZWYs IHRydWUsIGZhbHNlKTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0VYUExBSU4sICdleHBsYWlu IHNlbGVjdCAxJywgdW5kZWYsIGZhbHNlLCB0cnVlKTsKKworIyBOb3cgc2V0IGdyYW50IHRv IGEgc3BlY2lmaWMgY29sdW1uIHRvIGF1ZGl0IGFuZCBtYWtlIHN1cmUgaXQgbG9ncworIyBN YWtlIHN1cmUgdGhlIHRoZSBjb252ZXJzZSBpcyB0cnVlCitQZ0F1ZGl0R3JhbnRTZXQoJHN0 ckF1ZGl0Um9sZSwgJkNPTU1BTkRfU0VMRUNULCAncHVibGljLnRlc3QnLAorCQkJCSduYW1l LCBkZXNjcmlwdGlvbicpOworUGdMb2dFeGVjdXRlKENPTU1BTkRfU0VMRUNULCAnc2VsZWN0 IGlkIGZyb20gdGVzdCcpOworCitAb3lUYWJsZSA9ICh7Jk5BTUUgPT4gJ3B1YmxpYy50ZXN0 JywgJlRZUEUgPT4gJlRZUEVfVEFCTEUsCisJCQkgJkNPTU1BTkQgPT4gJkNPTU1BTkRfU0VM RUNUfSk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9TRUxFQ1QsICdzZWxlY3QgbmFtZSBmcm9t IHRlc3QnLCBcQG95VGFibGUpOworCisjIFRlc3QgYWx0ZXIgYW5kIGRyb3AgdGFibGUgc3Rh dGVtZW50cworJHN0clNxbCA9ICdBTFRFUiBUQUJMRSBwdWJsaWMudGVzdCBEUk9QIENPTFVN TiBkZXNjcmlwdGlvbiAnOworUGdMb2dFeGVjdXRlKENPTU1BTkRfQUxURVJfVEFCTEVfQ09M VU1OLAorCQkJICRzdHJTcWwsICdwdWJsaWMudGVzdC5kZXNjcmlwdGlvbicsIHRydWUsIGZh bHNlKTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0FMVEVSX1RBQkxFLAorCQkJICRzdHJTcWws ICdwdWJsaWMudGVzdCcsIGZhbHNlLCB0cnVlKTsKK0BveVRhYmxlID0gKHsmTkFNRSA9PiAn cHVibGljLnRlc3QnLCAmVFlQRSA9PiAmVFlQRV9UQUJMRSwKKwkJCSAmQ09NTUFORCA9PiAm Q09NTUFORF9TRUxFQ1R9KTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX1NFTEVDVCwgJ3NlbGVj dCBmcm9tIHRlc3QnLCBcQG95VGFibGUpOworCiskc3RyU3FsID0gJ0FMVEVSIFRBQkxFICBw dWJsaWMudGVzdCBSRU5BTUUgVE8gdGVzdDInOworUGdMb2dFeGVjdXRlKENPTU1BTkRfQUxU RVJfVEFCTEUsICRzdHJTcWwsICdwdWJsaWMudGVzdDInKTsKKworJHN0clNxbCA9ICdBTFRF UiBUQUJMRSBwdWJsaWMudGVzdDIgU0VUIFNDSEVNQSB0ZXN0JzsKK1BnTG9nRXhlY3V0ZShD T01NQU5EX0FMVEVSX1RBQkxFLCAkc3RyU3FsLCAndGVzdC50ZXN0MicpOworCiskc3RyU3Fs ID0gJ0FMVEVSIFRBQkxFIHRlc3QudGVzdDIgQUREIENPTFVNTiBkZXNjcmlwdGlvbiBwZ19j YXRhbG9nLnRleHQgICAnIC4KKwkJICAnQ09MTEFURSBwZ19jYXRhbG9nLiJkZWZhdWx0Iic7 CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9BTFRFUl9UQUJMRSwgJHN0clNxbCwgJ3Rlc3QudGVz dDInKTsKKworJHN0clNxbCA9ICdBTFRFUiBUQUJMRSB0ZXN0LnRlc3QyIERST1AgQ09MVU1O IGRlc2NyaXB0aW9uICc7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9BTFRFUl9UQUJMRV9DT0xV TU4sICRzdHJTcWwsCisJCQkgJ3Rlc3QudGVzdDIuZGVzY3JpcHRpb24nLCB0cnVlLCBmYWxz ZSk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9BTFRFUl9UQUJMRSwgJHN0clNxbCwKKwkJCSAn dGVzdC50ZXN0MicsIGZhbHNlLCB0cnVlKTsKKworJHN0clNxbCA9ICdkcm9wIHRhYmxlIHRl c3QudGVzdDInOworUGdMb2dFeGVjdXRlKENPTU1BTkRfRFJPUF9UQUJMRSwgJHN0clNxbCwg J3Rlc3QudGVzdDInLCB0cnVlLCBmYWxzZSk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9EUk9Q X1RBQkxFX0NPTlNUUkFJTlQsICRzdHJTcWwsICd0ZXN0X3BrZXkgb24gdGVzdC50ZXN0Mics CisJCQkgZmFsc2UsIGZhbHNlKTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0RST1BfVEFCTEVf SU5ERVgsICRzdHJTcWwsICd0ZXN0LnRlc3RfcGtleScsIGZhbHNlLCB0cnVlKTsKKworJHN0 clNxbCA9ICJDUkVBVEUgIEZVTkNUSU9OIHB1YmxpYy5pbnRfYWRkKElOIGEgcGdfY2F0YWxv Zy5pbnQ0ICwgSU4gYiAiIC4KKwkJICAicGdfY2F0YWxvZy5pbnQ0ICkgUkVUVVJOUyAgcGdf Y2F0YWxvZy5pbnQ0IExBTkdVQUdFIHBscGdzcWwgICIgLgorCQkgICJWT0xBVElMRSAgQ0FM TEVEIE9OIE5VTEwgSU5QVVQgU0VDVVJJVFkgSU5WT0tFUiBDT1NUIDEwMCAgIEFTICciIC4K KwkJICAiIGJlZ2luIHJldHVybiBhICsgYjsgZW5kICciOworUGdMb2dFeGVjdXRlKENPTU1B TkRfQ1JFQVRFX0ZVTkNUSU9OLCAkc3RyU3FsLAorCQkJICdwdWJsaWMuaW50X2FkZChpbnRl Z2VyLGludGVnZXIpJyk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9TRUxFQ1QsICJzZWxlY3Qg aW50X2FkZCgxLCAxKSIsCisJCQkJCQkJIHVuZGVmLCB0cnVlLCBmYWxzZSk7CitQZ0xvZ0V4 ZWN1dGUoQ09NTUFORF9FWEVDVVRFX0ZVTkNUSU9OLCAic2VsZWN0IGludF9hZGQoMSwgMSki LAorCQkJCQkJCQkJICAgJ3B1YmxpYy5pbnRfYWRkJywgZmFsc2UsIHRydWUpOworCiskc3Ry U3FsID0gIkNSRUFURSBBR0dSRUdBVEUgcHVibGljLnN1bV90ZXN0KCAgcGdfY2F0YWxvZy5p bnQ0KSAiIC4KKwkJICAiKFNGVU5DPXB1YmxpYy5pbnRfYWRkLCBTVFlQRT1wZ19jYXRhbG9n LmludDQsIElOSVRDT05EPScwJykiOworUGdMb2dFeGVjdXRlKENPTU1BTkRfQ1JFQVRFX0FH R1JFR0FURSwgJHN0clNxbCwgJ3B1YmxpYy5zdW1fdGVzdChpbnRlZ2VyKScpOworCisjIFRo ZXJlJ3MgYSBidWcgaGVyZSBpbiBkZXBhcnNlOgorJHN0clNxbCA9ICJBTFRFUiBBR0dSRUdB VEUgcHVibGljLnN1bV90ZXN0KGludGVnZXIpIFJFTkFNRSBUTyBzdW1fdGVzdDIiOworUGdM b2dFeGVjdXRlKENPTU1BTkRfQUxURVJfQUdHUkVHQVRFLCAkc3RyU3FsLCAncHVibGljLnN1 bV90ZXN0MihpbnRlZ2VyKScpOworCiskc3RyU3FsID0gIkNSRUFURSBDT0xMQVRJT04gcHVi bGljLmNvbGxhdGlvbl90ZXN0IChMQ19DT0xMQVRFID0gJ2RlX0RFJywgIiAuCisJCSAgIkxD X0NUWVBFID0gJ2RlX0RFJykiOworUGdMb2dFeGVjdXRlKENPTU1BTkRfQ1JFQVRFX0NPTExB VElPTiwgJHN0clNxbCwgJ3B1YmxpYy5jb2xsYXRpb25fdGVzdCcpOworCiskc3RyU3FsID0g ICJBTFRFUiBDT0xMQVRJT04gcHVibGljLmNvbGxhdGlvbl90ZXN0IFJFTkFNRSBUTyBjb2xs YXRpb25fdGVzdDIiOworUGdMb2dFeGVjdXRlKENPTU1BTkRfQUxURVJfQ09MTEFUSU9OLCAk c3RyU3FsLCAncHVibGljLmNvbGxhdGlvbl90ZXN0MicpOworCiskc3RyU3FsID0gIkNSRUFU RSAgQ09OVkVSU0lPTiBwdWJsaWMuY29udmVyc2lvbl90ZXN0IEZPUiAnU1FMX0FTQ0lJJyAi IC4KKwkJICAiVE8gJ01VTEVfSU5URVJOQUwnIEZST00gcGdfY2F0YWxvZy5hc2NpaV90b19t aWMiOworUGdMb2dFeGVjdXRlKENPTU1BTkRfQ1JFQVRFX0NPTlZFUlNJT04sICRzdHJTcWws ICdwdWJsaWMuY29udmVyc2lvbl90ZXN0Jyk7CisKKyRzdHJTcWwgPSAiQUxURVIgQ09OVkVS U0lPTiBwdWJsaWMuY29udmVyc2lvbl90ZXN0IFJFTkFNRSBUTyBjb252ZXJzaW9uX3Rlc3Qy IjsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0FMVEVSX0NPTlZFUlNJT04sICRzdHJTcWwsICdw dWJsaWMuY29udmVyc2lvbl90ZXN0MicpOworCitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9DUkVB VEVfREFUQUJBU0UsICJDUkVBVEUgREFUQUJBU0UgZGF0YWJhc2VfdGVzdCIpOworUGdMb2dF eGVjdXRlKENPTU1BTkRfQUxURVJfREFUQUJBU0UsCisJCQkgIkFMVEVSIERBVEFCQVNFIGRh dGFiYXNlX3Rlc3QgcmVuYW1lIHRvIGRhdGFiYXNlX3Rlc3QyIik7CitQZ0xvZ0V4ZWN1dGUo Q09NTUFORF9EUk9QX0RBVEFCQVNFLCAiRFJPUCBEQVRBQkFTRSBkYXRhYmFzZV90ZXN0MiIp OworCisjIE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gbW9yZSBhdWRpdCBldmVudHMgcGVuZGlu ZyBpbiB0aGUgcG9zdGdyZXMgbG9nCitQZ0xvZ1dhaXQoKTsKKworIyBTdG9wIHRoZSBkYXRh YmFzZQoraWYgKCEkYk5vQ2xlYW51cCkKK3sKKwlQZ0Ryb3AoKTsKK30KZGlmZiAtLWdpdCBh L2RvYy9zcmMvc2dtbC9jb250cmliLnNnbWwgYi9kb2Mvc3JjL3NnbWwvY29udHJpYi5zZ21s CmluZGV4IGE2OThkMGYuLjViMjQ3YTkgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb250 cmliLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbApAQCAtMTI0LDYgKzEy NCw3IEBAIENSRUFURSBFWFRFTlNJT04gPHJlcGxhY2VhYmxlPm1vZHVsZV9uYW1lPC8+IEZS T00gdW5wYWNrYWdlZDsKICAmbHRyZWU7CiAgJnBhZ2VpbnNwZWN0OwogICZwYXNzd29yZGNo ZWNrOworICZwZ2F1ZGl0OwogICZwZ2J1ZmZlcmNhY2hlOwogICZwZ2NyeXB0bzsKICAmcGdm cmVlc3BhY2VtYXA7CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dtbCBi L2RvYy9zcmMvc2dtbC9maWxlbGlzdC5zZ21sCmluZGV4IDg5ZmZmNzcuLjZiMGI0MDcgMTAw NjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9maWxlbGlzdC5zZ21sCisrKyBiL2RvYy9zcmMvc2dt bC9maWxlbGlzdC5zZ21sCkBAIC0xMjUsNiArMTI1LDcgQEAKIDwhRU5USVRZIG9pZDJuYW1l ICAgICAgICBTWVNURU0gIm9pZDJuYW1lLnNnbWwiPgogPCFFTlRJVFkgcGFnZWluc3BlY3Qg ICAgIFNZU1RFTSAicGFnZWluc3BlY3Quc2dtbCI+CiA8IUVOVElUWSBwYXNzd29yZGNoZWNr ICAgU1lTVEVNICJwYXNzd29yZGNoZWNrLnNnbWwiPgorPCFFTlRJVFkgcGdhdWRpdCAgICAg ICAgIFNZU1RFTSAicGdhdWRpdC5zZ21sIj4KIDwhRU5USVRZIHBnYmVuY2ggICAgICAgICBT WVNURU0gInBnYmVuY2guc2dtbCI+CiA8IUVOVElUWSBwZ2FyY2hpdmVjbGVhbnVwIFNZU1RF TSAicGdhcmNoaXZlY2xlYW51cC5zZ21sIj4KIDwhRU5USVRZIHBnYnVmZmVyY2FjaGUgICBT WVNURU0gInBnYnVmZmVyY2FjaGUuc2dtbCI+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwv cGdhdWRpdC5zZ21sIGIvZG9jL3NyYy9zZ21sL3BnYXVkaXQuc2dtbApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTE1MmNkCi0tLSAvZGV2L251bGwKKysrIGIvZG9j L3NyYy9zZ21sL3BnYXVkaXQuc2dtbApAQCAtMCwwICsxLDMzNSBAQAorPCEtLSBkb2Mvc3Jj L3NnbWwvcGdhdWRpdC5zZ21sIC0tPgorCis8c2VjdDEgaWQ9InBnYXVkaXQiIHhyZWZsYWJl bD0icGdhdWRpdCI+CisgIDx0aXRsZT5wZ19hdWRpdDwvdGl0bGU+CisKKyAgPGluZGV4dGVy bSB6b25lPSJwZ2F1ZGl0Ij4KKyAgICA8cHJpbWFyeT5wZ19hdWRpdDwvcHJpbWFyeT4KKyAg PC9pbmRleHRlcm0+CisKKyAgPHBhcmE+CisgICAgVGhlIDxmaWxlbmFtZT5wZ19hdWRpdDwv ZmlsZW5hbWU+IG1vZHVsZSBwcm92aWRlcyBzZXNzaW9uIGFuZCBvYmplY3QKKyAgICBhdWRp dGluZyB2aWEgdGhlIHN0YW5kYXJkIGxvZ2dpbmcgZmFjaWxpdHkuICBTZXNzaW9uIGFuZCBv YmplY3QgYXVkaXRpbmcgYXJlCisgICAgY29tcGxldGVseSBpbmRlcGVuZGVudCBhbmQgY2Fu IGJlIGNvbWJpbmVkLgorICA8L3BhcmE+CisKKyAgPHNlY3QyPgorICAgIDx0aXRsZT5TZXNz aW9uIEF1ZGl0aW5nPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgU2Vzc2lvbiBhdWRp dGluZyBhbGxvd3MgdGhlIGxvZ2dpbmcgb2YgYWxsIGNvbW1hbmRzIHRoYXQgYXJlIGV4ZWN1 dGVkIGJ5CisgICAgICBhIHVzZXIgaW4gdGhlIGJhY2tlbmQuICBFYWNoIGNvbW1hbmQgaXMg bG9nZ2VkIHdpdGggYSBzaW5nbGUgZW50cnkgYW5kCisgICAgICBpbmNsdWRlcyB0aGUgYXVk aXQgdHlwZSAoZS5nLiA8bGl0ZXJhbD5TRVNTSU9OPC9saXRlcmFsPiksIGNvbW1hbmQgdHlw ZQorICAgICAgKGUuZy4gPGxpdGVyYWw+Q1JFQVRFIFRBQkxFPC9saXRlcmFsPiwgPGxpdGVy YWw+U0VMRUNUPC9saXRlcmFsPikgYW5kCisgICAgICBzdGF0ZW1lbnQgKGUuZy4gPGxpdGVy YWw+InNlbGVjdCAqIGZyb20gdGVzdCI8L2xpdGVyYWw+KS4KKworICAgICAgRnVsbHktcXVh bGlmaWVkIG5hbWVzIGFuZCBvYmplY3QgdHlwZXMgd2lsbCBiZSBsb2dnZWQgZm9yCisgICAg ICA8bGl0ZXJhbD5DUkVBVEU8L2xpdGVyYWw+LCA8bGl0ZXJhbD5VUERBVEU8L2xpdGVyYWw+ LCBhbmQKKyAgICAgIDxsaXRlcmFsPkRST1A8L2xpdGVyYWw+IGNvbW1hbmRzIG9uIDxsaXRl cmFsPlRBQkxFPC9saXRlcmFsPiwKKyAgICAgIDxsaXRlcmFsPk1BVFZJRVc8L2xpdGVyYWw+ LCA8bGl0ZXJhbD5WSUVXPC9saXRlcmFsPiwKKyAgICAgIDxsaXRlcmFsPklOREVYPC9saXRl cmFsPiwgPGxpdGVyYWw+Rk9SRUlHTiBUQUJMRTwvbGl0ZXJhbD4sCisgICAgICA8bGl0ZXJh bD5DT01QT1NJVEUgVFlQRTwvbGl0ZXJhbD4sIDxsaXRlcmFsPklOREVYPC9saXRlcmFsPiwg YW5kCisgICAgICA8bGl0ZXJhbD5TRVFVRU5DRTwvbGl0ZXJhbD4gb2JqZWN0cyBhcyB3ZWxs IGFzIGZ1bmN0aW9uIGNhbGxzLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0Mz4KKyAgICAg IDx0aXRsZT5Db25maWd1cmF0aW9uPC90aXRsZT4KKworICAgICAgPHBhcmE+CisgICAgICAg IFNlc3Npb24gbG9nZ2luZyBpcyBjb250cm9sbGVkIGJ5IHRoZSA8bGl0ZXJhbD5wZ19hdWRp dC5sb2c8L2xpdGVyYWw+CisgICAgICAgIEdVQy4gVGhlcmUgYXJlIHNpeCBjbGFzc2VzIG9m IGNvbW1hbmRzIHRoYXQgYXJlIHJlY29nbml6ZWQ6CisKKyAgICAgICAgPGl0ZW1pemVkbGlz dD4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAg ICAgICAgPGxpdGVyYWw+UkVBRDwvbGl0ZXJhbD4gLSA8bGl0ZXJhbD5TRUxFQ1Q8L2xpdGVy YWw+IGFuZAorICAgICAgICAgICAgICA8bGl0ZXJhbD5DT1BZPC9saXRlcmFsPiB3aGVuIHRo ZSBzb3VyY2UgaXMgYSB0YWJsZSBvciBxdWVyeS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAg ICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAg IDxwYXJhPgorICAgICAgICAgICAgICA8bGl0ZXJhbD5XUklURTwvbGl0ZXJhbD4gLSA8bGl0 ZXJhbD5JTlNFUlQ8L2xpdGVyYWw+LAorICAgICAgICAgICAgICA8bGl0ZXJhbD5VUERBVEU8 L2xpdGVyYWw+LCA8bGl0ZXJhbD5ERUxFVEU8L2xpdGVyYWw+LAorICAgICAgICAgICAgICA8 bGl0ZXJhbD5UUlVOQ0FURTwvbGl0ZXJhbD4sIGFuZCA8bGl0ZXJhbD5DT1BZPC9saXRlcmFs PiB3aGVuIHRoZQorICAgICAgICAgICAgICBkZXN0aW5hdGlvbiBpcyBhIHRhYmxlLgorICAg ICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxp c3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIDxsaXRlcmFsPkZV TkNUSU9OPC9saXRlcmFsPiAtIEZ1bmN0aW9uIGNhbGxzIGFuZAorICAgICAgICAgICAgICA8 bGl0ZXJhbD5ETzwvbGl0ZXJhbD4gYmxvY2tzLgorICAgICAgICAgICAgPC9wYXJhPgorICAg ICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAg PHBhcmE+CisgICAgICAgICAgICAgIDxsaXRlcmFsPkRETDwvbGl0ZXJhbD4gLSBEREwsIHBs dXMgPGxpdGVyYWw+VkFDVVVNPC9saXRlcmFsPiwKKyAgICAgICAgICAgICAgPGxpdGVyYWw+ UkVJTkRFWDwvbGl0ZXJhbD4sIGFuZCA8bGl0ZXJhbD5BTkFMWVpFPC9saXRlcmFsPi4KKyAg ICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxs aXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICA8bGl0ZXJhbD5Q QVJBTUVURVI8L2xpdGVyYWw+IC0gUGFyYW1ldGVycyB0aGF0IHdlcmUgcGFzc2VkIGZvciB0 aGUgc3RhdGVtZW50LiAgUGFyYW1ldGVycyBpbW1lZGlhdGVseSBmb2xsb3cgdGhlIHN0YXRl bWVudCB0ZXh0LiAKKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVt PgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAg ICAgICA8bGl0ZXJhbD5NSVNDPC9saXRlcmFsPiAtIE1pc2NlbGxhbmVvdXMgY29tbWFuZHMs IGUuZy4KKyAgICAgICAgICAgICAgPGxpdGVyYWw+RElTQ0FSRDwvbGl0ZXJhbD4sIDxsaXRl cmFsPkZFVENIPC9saXRlcmFsPiwKKyAgICAgICAgICAgICAgPGxpdGVyYWw+Q0hFQ0tQT0lO VDwvbGl0ZXJhbD4uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRl bT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxw YXJhPgorICAgICAgICBFbmFibGUgc2Vzc2lvbiBsb2dnaW5nIGZvciBhbGwgd3JpdGVzIGFu ZCBEREw6CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorcGdfYXVkaXQubG9nID0gJ3dy aXRlLCBkZGwnCisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvcGFyYT4K KworICAgICAgPHBhcmE+CisgICAgICAgIEVuYWJsZSBzZXNzaW9uIGxvZ2dpbmcgZm9yIGFs bCBjb21tYW5kcyBleGNlcHQgbWlzY2VsbGFuZW91czoKKyAgICAgICAgICA8cHJvZ3JhbWxp c3Rpbmc+CitwZ19hdWRpdC5sb2cgPSAnYWxsLCAtbWlzYycKKyAgICAgICAgICA8L3Byb2dy YW1saXN0aW5nPgorICAgICAgPC9wYXJhPgorICAgICAgCisgICAgICA8cGFyYT4KKyAgICAg IE5vdGUgdGhhdCA8bGl0ZXJhbD5wZ19hdWRpdC5sb2c8L2xpdGVyYWw+IGNhbiBiZSBzZXQg Z2xvYmFsbHkgKGluIAorICAgICAgPGZpbGVuYW1lPnBvc3RncmVzcWwuY29uZjwvZmlsZW5h bWU+KSwgYXQgdGhlIGRhdGFiYXNlIGxldmVsICh1c2luZworICAgICAgPGxpdGVyYWw+YWx0 ZXIgZGF0YWJhc2UgLi4uIHNldDwvbGl0ZXJhbD4pLCBvciBhdCB0aGUgcm9sZSBsZXZlbCAo dXNpbmcKKyAgICAgIDxsaXRlcmFsPmFsdGVyIHJvbGUgLi4uIHNldDwvbGl0ZXJhbD4pLgor ICAgICAgPC9wYXJhPgorICAgIDwvc2VjdDM+CisKKyAgICA8c2VjdDM+CisgICAgICA8dGl0 bGU+RXhhbXBsZXM8L3RpdGxlPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgU2V0IDxsaXRl cmFsPnBnX2F1ZGl0LmxvZyA9ICdyZWFkLCBkZGwnPC9saXRlcmFsPiBpbgorICAgICAgICA8 bGl0ZXJhbD5wb3N0Z3Jlc3FsLmNvbmY8L2xpdGVyYWw+LgorICAgICAgPC9wYXJhPgorCisg ICAgICA8cGFyYT4KKyAgICAgICAgU1FMOgorICAgICAgPC9wYXJhPgorCisgICAgICA8cHJv Z3JhbWxpc3Rpbmc+CitjcmVhdGUgdGFibGUgYWNjb3VudAorKAorICAgIGlkIGludCwKKyAg ICBuYW1lIHRleHQsCisgICAgcGFzc3dvcmQgdGV4dCwKKyAgICBkZXNjcmlwdGlvbiB0ZXh0 CispOworCitzZWxlY3QgKgorICAgIGZyb20gYWNjb3VudDsKKworaW5zZXJ0IGludG8gYWNj b3VudCAoaWQsIG5hbWUsIHBhc3N3b3JkLCBkZXNjcmlwdGlvbikKKyAgICAgICAgICAgICB2 YWx1ZXMgKDEsICd1c2VyMScsICdIQVNIMScsICdibGFoLCBibGFoJyk7CisgICAgICA8L3By b2dyYW1saXN0aW5nPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgTG9nIE91dHB1dDoKKyAg ICAgIDwvcGFyYT4KKworICAgICAgPHByb2dyYW1saXN0aW5nPgorQVVESVQ6IFNFU1NJT04s RERMLENSRUFURSBUQUJMRSxUQUJMRSxwdWJsaWMuYWNjb3VudCxjcmVhdGUgdGFibGUgYWNj b3VudAorKAorICAgIGlkIGludCwKKyAgICBuYW1lIHRleHQsCisgICAgcGFzc3dvcmQgdGV4 dCwKKyAgICBkZXNjcmlwdGlvbiB0ZXh0CispOworQVVESVQ6IFNFU1NJT04sUkVBRCxTRUxF Q1QsLCxzZWxlY3QgKgorICAgIGZyb20gYWNjb3VudAorICAgICAgPC9wcm9ncmFtbGlzdGlu Zz4KKyAgICA8L3NlY3QzPgorICA8L3NlY3QyPgorCisgIDxzZWN0Mj4KKyAgICA8dGl0bGU+ T2JqZWN0IEF1ZGl0aW5nPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgT2JqZWN0IGF1 ZGl0aW5nIGxvZ3MgY29tbWFuZHMgdGhhdCBhZmZlY3QgYSBwYXJ0aWN1bGFyIG9iamVjdC4g IE9ubHkKKyAgICAgIDxsaXRlcmFsPlNFTEVDVDwvbGl0ZXJhbD4sIDxsaXRlcmFsPklOU0VS VDwvbGl0ZXJhbD4sCisgICAgICA8bGl0ZXJhbD5VUERBVEU8L2xpdGVyYWw+IGFuZCA8bGl0 ZXJhbD5ERUxFVEU8L2xpdGVyYWw+IGNvbW1hbmRzIGFyZQorICAgICAgc3VwcG9ydGVkLgor ICAgIDwvcGFyYT4KKworICAgIDxzZWN0Mz4KKyAgICAgIDx0aXRsZT5Db25maWd1cmF0aW9u PC90aXRsZT4KKworICAgICAgPHBhcmE+CisgICAgICAgIE9iamVjdC1sZXZlbCBhdWRpdGlu ZyBpcyBpbXBsZW1lbnRlZCB2aWEgdGhlIHJvbGVzIHN5c3RlbS4gIFRoZQorICAgICAgICA8 bGl0ZXJhbD5wZ19hdWRpdC5yb2xlPC9saXRlcmFsPiBHVUMgZGVmaW5lcyB0aGUgcm9sZSB0 aGF0IHdpbGwgYmUgdXNlZAorICAgICAgICBmb3IgYXVkaXRpbmcuICBBbiBvYmplY3Qgd2ls bCBiZSBhdWRpdGVkIHdoZW4gdGhlIGF1ZGl0IHJvbGUgaGFzCisgICAgICAgIHBlcm1pc3Np b25zIGZvciB0aGUgY29tbWFuZCBleGVjdXRlZCBvciBpbmhlcml0cyB0aGUgcGVybWlzc2lv bnMgZnJvbQorICAgICAgICBhbm90aGVyIHJvbGUuCisgICAgICA8L3BhcmE+CisKKyAgICAg IDxwcm9ncmFtbGlzdGluZz4KK3Bvc3RyZXNxbC5jb25mOiBwZ19hdWRpdC5yb2xlID0gJ2F1 ZGl0JworCitncmFudCBzZWxlY3QsIGRlbGV0ZQorICAgb24gcHVibGljLmFjY291bnQ7Cisg ICAgICA8L3Byb2dyYW1saXN0aW5nPgorCisgICAgICA8cGFyYT4KKyAgICAgIE5vdGUgdGhh dCA8bGl0ZXJhbD5wZ19hdWRpdC5yb2xlPC9saXRlcmFsPiBjYW4gYmUgc2V0IGdsb2JhbGx5 IChpbiAKKyAgICAgIDxmaWxlbmFtZT5wb3N0Z3Jlc3FsLmNvbmY8L2ZpbGVuYW1lPiksIGF0 IHRoZSBkYXRhYmFzZSBsZXZlbCAodXNpbmcKKyAgICAgIDxsaXRlcmFsPmFsdGVyIGRhdGFi YXNlIC4uLiBzZXQ8L2xpdGVyYWw+KSwgb3IgYXQgdGhlIHJvbGUgbGV2ZWwgKHVzaW5nCisg ICAgICA8bGl0ZXJhbD5hbHRlciByb2xlIC4uLiBzZXQ8L2xpdGVyYWw+KS4KKyAgICAgIDwv cGFyYT4KKyAgICA8L3NlY3QzPgorCisgICAgPHNlY3QzPgorICAgICAgPHRpdGxlPkV4YW1w bGVzPC90aXRsZT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFNldCA8bGl0ZXJhbD5wZ19h dWRpdC5yb2xlID0gJ2F1ZGl0JzwvbGl0ZXJhbD4gaW4KKyAgICAgICAgPGxpdGVyYWw+cG9z dGdyZXNxbC5jb25mPC9saXRlcmFsPi4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+ CisgICAgICAgIFNRTDoKKyAgICAgIDwvcGFyYT4KKworICAgICAgICA8cHJvZ3JhbWxpc3Rp bmc+CitjcmVhdGUgdGFibGUgYWNjb3VudAorKAorICAgIGlkIGludCwKKyAgICBuYW1lIHRl eHQsCisgICAgcGFzc3dvcmQgdGV4dCwKKyAgICBkZXNjcmlwdGlvbiB0ZXh0CispOworCitn cmFudCBzZWxlY3QgKHBhc3N3b3JkKQorICAgb24gcHVibGljLmFjY291bnQKKyAgIHRvIGF1 ZGl0OworCitzZWxlY3QgaWQsIG5hbWUKKyAgZnJvbSBhY2NvdW50OworCitzZWxlY3QgcGFz c3dvcmQKKyAgZnJvbSBhY2NvdW50OworCitncmFudCB1cGRhdGUgKG5hbWUsIHBhc3N3b3Jk KQorICAgb24gcHVibGljLmFjY291bnQKKyAgIHRvIGF1ZGl0OworCit1cGRhdGUgYWNjb3Vu dAorICAgc2V0IGRlc2NyaXB0aW9uID0gJ3lhZGEsIHlhZGEnOworCit1cGRhdGUgYWNjb3Vu dAorICAgc2V0IHBhc3N3b3JkID0gJ0hBU0gyJzsKKworY3JlYXRlIHRhYmxlIGFjY291bnRf cm9sZV9tYXAKKygKKyAgICBhY2NvdW50X2lkIGludCwKKyAgICByb2xlX2lkIGludAorKTsK KworZ3JhbnQgc2VsZWN0CisgICBvbiBwdWJsaWMuYWNjb3VudF9yb2xlX21hcAorICAgdG8g YXVkaXQ7CisKK3NlbGVjdCBhY2NvdW50LnBhc3N3b3JkLAorICAgICAgIGFjY291bnRfcm9s ZV9tYXAucm9sZV9pZAorICBmcm9tIGFjY291bnQKKyAgICAgICBpbm5lciBqb2luIGFjY291 bnRfcm9sZV9tYXAKKyAgICAgICAgICAgIG9uIGFjY291bnQuaWQgPSBhY2NvdW50X3JvbGVf bWFwLmFjY291bnRfaWQKKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKworICAgICAgPHBh cmE+CisgICAgICAgIExvZyBPdXRwdXQ6CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwcm9n cmFtbGlzdGluZz4KK0FVRElUOiBPQkpFQ1QsUkVBRCxTRUxFQ1QsVEFCTEUscHVibGljLmFj Y291bnQsc2VsZWN0IHBhc3N3b3JkCisgIGZyb20gYWNjb3VudAorQVVESVQ6IE9CSkVDVCxX UklURSxVUERBVEUsVEFCTEUscHVibGljLmFjY291bnQsdXBkYXRlIGFjY291bnQKKyAgIHNl dCBwYXNzd29yZCA9ICdIQVNIMicKK0FVRElUOiBPQkpFQ1QsUkVBRCxTRUxFQ1QsVEFCTEUs cHVibGljLmFjY291bnQsc2VsZWN0IGFjY291bnQucGFzc3dvcmQsCisgICAgICAgYWNjb3Vu dF9yb2xlX21hcC5yb2xlX2lkCisgIGZyb20gYWNjb3VudAorICAgICAgIGlubmVyIGpvaW4g YWNjb3VudF9yb2xlX21hcAorICAgICAgICAgICAgb24gYWNjb3VudC5pZCA9IGFjY291bnRf cm9sZV9tYXAuYWNjb3VudF9pZAorQVVESVQ6IE9CSkVDVCxSRUFELFNFTEVDVCxUQUJMRSxw dWJsaWMuYWNjb3VudF9yb2xlX21hcCxzZWxlY3QgYWNjb3VudC5wYXNzd29yZCwKKyAgICAg ICBhY2NvdW50X3JvbGVfbWFwLnJvbGVfaWQKKyAgZnJvbSBhY2NvdW50CisgICAgICAgaW5u ZXIgam9pbiBhY2NvdW50X3JvbGVfbWFwCisgICAgICAgICAgICBvbiBhY2NvdW50LmlkID0g YWNjb3VudF9yb2xlX21hcC5hY2NvdW50X2lkCisgICAgICA8L3Byb2dyYW1saXN0aW5nPgor ICAgIDwvc2VjdDM+CisgIDwvc2VjdDI+CisKKyAgPHNlY3QyPgorICAgIDx0aXRsZT5Gb3Jt YXQ8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICBBdWRpdCBlbnRyaWVzIGFyZSB3cml0 dGVuIHRvIHRoZSBzdGFuZGFyZCBsb2dnaW5nIGZhY2lsaXR5IGFuZCBjb250YWluCisgICAg ICB0aGUgZm9sbG93aW5nIGNvbHVtbnMgaW4gY29tbWEtc2VwYXJhdGVkIGZvcm1hdDoKKwor ICAgICAgPG5vdGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIE91dHB1dCBpcyBub3Qg aW4gY29tcGxpYW50IENTViBmb3JtYXQuICBJZiBtYWNoaW5lLXJlYWRhYmlsaXR5IGlzCisg ICAgICAgICAgcmVxdWlyZWQgdGhlbiBjb25zaWRlciBzZXR0aW5nCisgICAgICAgICAgPGxp dGVyYWw+bG9nX2Rlc3RpbmF0aW9uID0gJ2NzdmxvZyc8L2xpdGVyYWw+LgorICAgICAgICA8 L3BhcmE+CisgICAgICA8L25vdGU+CisKKyAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAg IDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxsaXRlcmFsPkFV RElUX1RZUEU8L2xpdGVyYWw+IC0gPGxpdGVyYWw+U0VTU0lPTjwvbGl0ZXJhbD4gb3IKKyAg ICAgICAgICAgIDxsaXRlcmFsPk9CSkVDVDwvbGl0ZXJhbD4uCisgICAgICAgICAgPC9wYXJh PgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAg PHBhcmE+CisgICAgICAgICAgICA8bGl0ZXJhbD5DTEFTUzwvbGl0ZXJhbD4gLSA8bGl0ZXJh bD5SRUFEPC9saXRlcmFsPiwKKyAgICAgICAgICAgIDxsaXRlcmFsPldSSVRFPC9saXRlcmFs PiwgPGxpdGVyYWw+RlVOQ1RJT048L2xpdGVyYWw+LAorICAgICAgICAgICAgPGxpdGVyYWw+ RERMPC9saXRlcmFsPiwgb3IgPGxpdGVyYWw+TUlTQzwvbGl0ZXJhbD4uCisgICAgICAgICAg PC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAg ICAgICAgPHBhcmE+CisgICAgICAgICAgICA8bGl0ZXJhbD5DT01NQU5EPC9saXRlcmFsPiAt IDxsaXRlcmFsPkFMVEVSIFRBQkxFPC9saXRlcmFsPiwKKyAgICAgICAgICAgIDxsaXRlcmFs PlNFTEVDVDwvbGl0ZXJhbD4sIDxsaXRlcmFsPkNSRUFURSBJTkRFWDwvbGl0ZXJhbD4sCisg ICAgICAgICAgICA8bGl0ZXJhbD5VUERBVEU8L2xpdGVyYWw+LCBldGMuCisgICAgICAgICAg PC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAg ICAgICAgPHBhcmE+CisgICAgICAgICAgICA8bGl0ZXJhbD5PQkpFQ1RfVFlQRTwvbGl0ZXJh bD4gLSA8bGl0ZXJhbD5UQUJMRTwvbGl0ZXJhbD4sCisgICAgICAgICAgICA8bGl0ZXJhbD5J TkRFWDwvbGl0ZXJhbD4sIDxsaXRlcmFsPlZJRVc8L2xpdGVyYWw+LCBldGMuICBPbmx5Cisg ICAgICAgICAgICBhdmFpbGFibGUgZm9yIERNTCBhbmQgY2VydGFpbiBEREwgY29tbWFuZHMu CisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlz dGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8bGl0ZXJhbD5PQkpFQ1Rf TkFNRTwvbGl0ZXJhbD4gLSBUaGUgZnVsbHktcXVhbGlmaWVkIG9iamVjdCBuYW1lCisgICAg ICAgICAgICAoZS5nLiBwdWJsaWMuYWNjb3VudCkuICBPbmx5IGF2YWlsYWJsZSBmb3IgRE1M IGFuZCBjZXJ0YWluIERETAorICAgICAgICAgICAgY29tbWFuZHMuCisgICAgICAgICAgPC9w YXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAg ICAgPHBhcmE+CisgICAgICAgICAgICA8bGl0ZXJhbD5TVEFURU1FTlQ8L2xpdGVyYWw+IC0g U3RhdGVtZW50IGV4ZWN1dGUgb24gdGhlIGJhY2tlbmQuCisgICAgICAgICAgPC9wYXJhPgor ICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJh PgorICA8L3NlY3QyPgorCisgIDxzZWN0Mj4KKyAgICA8dGl0bGU+QXV0aG9yczwvdGl0bGU+ CisKKyAgICA8cGFyYT4KKyAgICAgIEFiaGlqaXQgTWVub24tU2VuIDxlbWFpbD5hbXNAMm5k UXVhZHJhbnQuY29tPC9lbWFpbD4sIElhbiBCYXJ3aWNrIDxlbWFpbD5pYW5AMm5kUXVhZHJh bnQuY29tPC9lbWFpbD4sIGFuZCBEYXZpZCBTdGVlbGUgPGVtYWlsPmRhdmlkQHBnbWFzdGVy cy5uZXQ8L2VtYWlsPi4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDI+Cis8L3NlY3QxPgo= --------------040509030108010203040303-- --P2lHxfw33Oba3KoisHqs85AHP7Kndklim Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAEBCAAGBQJVEFvdAAoJEIA2uIJQ5SFADcQP/ihQpIAQSwSJVH0dAARzBac3 pi8ItZoo3T3qKcM9DCLK27JG5Yhspz4GURFDylfSw9hnEziWjjeBXDstc8dcYLL4 1VETLwMCA8Kg7OGnLznnyXXD9vlvzbHvL8IIIjMugL0G04f3C3RjXKDeHzIC1oBG y5pHOYCDUDf1WWYICeNtDp2PKP8GPU6GQ8lTiuS1MloYUJ0A/qwACjzjto82pPlP ADxLZJm9EJ7vufFvv92pOtUetrczrCNxa1ltW256JZqRDhcK5nWAjz4Q16Tb9wG2 eEK6grLlUGzk8o1NCE+HninPDrBFUJcSb4WlS6U5Yu7xr5HE1VvS5GV7DDKXYYyX rrHkNkye0Cia2y1gUkIBEpeCloxqJcAkhoiv+C2Dc7m84I9eiYY5lH29pYiUKzV2 yRj4gcPWy/RqkLzIG5GWsdjvcgbXIpGeQvhp8nA1dMp351eDS0rFRhILU2PgVrBx WxLVSAHTyL8ulyLcWFWJI61hPntzgkQyzgQwpY9YIZTwBERTvD7oA43Kjco88lN4 n8uL38+nJMZN2Tc2V5W8eQH1cpvI2O1R3oHNHLgplM0qJ4ztsu6t7oA4/yV0zWfe qJCyimjQMCA5+ePB3LMK/o5iw2BniDWaXKSUkmKYWjilZD1RTtyXgjaWi1Bh3sbv EXQ0P7enW2RlBwoW7OoM =MPVC -----END PGP SIGNATURE----- --P2lHxfw33Oba3KoisHqs85AHP7Kndklim--