Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1YnvxB-0001bh-SP for pgsql-hackers@arkaria.postgresql.org; Thu, 30 Apr 2015 21:25:06 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.80) (envelope-from ) id 1YnvxB-000704-9X for pgsql-hackers@arkaria.postgresql.org; Thu, 30 Apr 2015 21:25:05 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1Ynvx7-0006zv-Tt for pgsql-hackers@postgresql.org; Thu, 30 Apr 2015 21:25:02 +0000 Received: from linode.thelabyrinth.net ([198.58.117.137] helo=mail.thelabyrinth.net) by makus.postgresql.org with esmtps (TLS1.1:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84) (envelope-from ) id 1Ynvx2-0008Rz-OB; Thu, 30 Apr 2015 21:25:00 +0000 Received: from theseus.home.thelabyrinth.net (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 589CD12F97; Thu, 30 Apr 2015 21:24:54 +0000 (UTC) Message-ID: <55429DA5.40503@pgmasters.net> Date: Thu, 30 Apr 2015 17:24:53 -0400 From: David Steele User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:31.0) Gecko/20100101 Thunderbird/31.6.0 MIME-Version: 1.0 To: Fujii Masao , Sawada Masahiko CC: Simon Riggs , Tatsuo Ishii , PostgreSQL-development , Abhijit Menon-Sen , er@xs4all.nl Subject: Re: Auditing extension for PostgreSQL (Take 2) References: <552326EE.4060509@pgmasters.net> <552D2C1A.3060002@pgmasters.net> <20150415.081354.1167351714960358354.t-ishii@sraoss.co.jp> <552DA959.2010102@pgmasters.net> <552EA121.1090603@pgmasters.net> <5534FC6E.9030906@pgmasters.net> <553938A1.7030707@pgmasters.net> <553FA477.5010803@pgmasters.net> In-Reply-To: Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="DrPCcSTpqRSvpSfLxSI8Eg0ttTCQtOTme" 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) --DrPCcSTpqRSvpSfLxSI8Eg0ttTCQtOTme Content-Type: multipart/mixed; boundary="------------020704080409090401040109" This is a multi-part message in MIME format. --------------020704080409090401040109 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 4/30/15 6:05 AM, Fujii Masao wrote: > On Thu, Apr 30, 2015 at 12:57 PM, Sawada Masahiko wrote: >> >> I have changed the status this to "Ready for Committer". >=20 > The specification of "session audit logging" seems to be still unclear = to me. > For example, why doesn't "session audit logging" log queries accessing = to The idea was that queries consisting of *only* catalog relations are essentially noise. This makes the log much quieter when tools like psql or PgAdmin are in use. Queries that contain a mix of catalog and user tables are logged. However, you make a good point, so in the spirit of cautious defaults I've changed the behavior to log in this case and allow admins to turn off the behavior if they choose with a new GUC, pg_audit.log_catalog. > a catalog like pg_class? Why doesn't it log any queries executed in abo= rted > transaction state? Since there is no such information in the document, The error that aborts a transaction can easily be logged via the standard logging facility. All prior statements in the transaction will be logged with pg_audit. This is acceptable from an audit logging perspective as long as it is documented behavior, which as you point out it currently is not. This has now been documented in the caveats sections which should make it clearer to users. > I'm afraid that users would easily get confused with it. Even if we doc= ument it, > I'm not sure if the current behavior is good for the audit purpose. For= example, > some users may want to log even queries accessing to the catalogs. Agreed, and this is now the default. > I have no idea about when the current CommitFest will end. But probably= > we don't have that much time left. So I'm thinking that maybe we should= pick up > small, self-contained and useful part from the patch and focus on that.= > If we try to commit every features that the patch provides, we might ge= t > nothing at least in 9.5, I'm afraid. May 15th is the feature freeze, so that does give a little time. It's not clear to me what a "self-contained" part of the patch would be. If you have specific ideas on what could be broken out I'm interested to hear them. Patch v11 is attached with the changes discussed here plus some other improvements to the documentation suggested by Erik. --=20 - David Steele david@pgmasters.net --------------020704080409090401040109 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="pg_audit-v11.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="pg_audit-v11.patch" ZGlmZiAtLWdpdCBhL2NvbnRyaWIvTWFrZWZpbGUgYi9jb250cmliL01ha2VmaWxlCmluZGV4 IGY4NGU2ODQuLjFmM2QzZjEgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvTWFrZWZpbGUKKysrIGIv Y29udHJpYi9NYWtlZmlsZQpAQCAtMjgsNiArMjgsNyBAQCBTVUJESVJTID0gXAogCQlvaWQy bmFtZQlcCiAJCXBhZ2VpbnNwZWN0CVwKIAkJcGFzc3dvcmRjaGVjawlcCisJCXBnX2F1ZGl0 CVwKIAkJcGdfYnVmZmVyY2FjaGUJXAogCQlwZ19mcmVlc3BhY2VtYXAgXAogCQlwZ19wcmV3 YXJtCVwKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfYXVkaXQvLmdpdGlnbm9yZSBiL2NvbnRy aWIvcGdfYXVkaXQvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi5hNTI2N2NmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19hdWRpdC8uZ2l0 aWdub3JlCkBAIC0wLDAgKzEsNSBAQAorbG9nLworcmVzdWx0cy8KK3RtcF9jaGVjay8KK3Jl Z3Jlc3Npb24uZGlmZnMKK3JlZ3Jlc3Npb24ub3V0CmRpZmYgLS1naXQgYS9jb250cmliL3Bn X2F1ZGl0L01ha2VmaWxlIGIvY29udHJpYi9wZ19hdWRpdC9NYWtlZmlsZQpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjM2MDExCi0tLSAvZGV2L251bGwKKysrIGIv Y29udHJpYi9wZ19hdWRpdC9NYWtlZmlsZQpAQCAtMCwwICsxLDIxIEBACisjIHBnX2F1ZGl0 L01ha2VmaWxlCisKK01PRFVMRSA9IHBnX2F1ZGl0CitNT0RVTEVfYmlnID0gcGdfYXVkaXQK K09CSlMgPSBwZ19hdWRpdC5vCisKK0VYVEVOU0lPTiA9IHBnX2F1ZGl0CitSRUdSRVNTID0g cGdfYXVkaXQKK1JFR1JFU1NfT1BUUyA9IC0tdGVtcC1jb25maWc9JCh0b3Bfc3JjZGlyKS9j b250cmliL3BnX2F1ZGl0L3BnX2F1ZGl0LmNvbmYKK0RBVEEgPSBwZ19hdWRpdC0tMS4wLjAu c3FsCisKK2lmZGVmIFVTRV9QR1hTCitQR19DT05GSUcgPSBwZ19jb25maWcKK1BHWFMgOj0g JChzaGVsbCAkKFBHX0NPTkZJRykgLS1wZ3hzKQoraW5jbHVkZSAkKFBHWFMpCitlbHNlCitz dWJkaXIgPSBjb250cmliL3BnX2F1ZGl0Cit0b3BfYnVpbGRkaXIgPSAuLi8uLgoraW5jbHVk ZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAkKHRvcF9z cmNkaXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlmCmRpZmYgLS1naXQgYS9j b250cmliL3BnX2F1ZGl0L2V4cGVjdGVkL3BnX2F1ZGl0Lm91dCBiL2NvbnRyaWIvcGdfYXVk aXQvZXhwZWN0ZWQvcGdfYXVkaXQub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLmQyMDE0MjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX2F1ZGl0L2V4 cGVjdGVkL3BnX2F1ZGl0Lm91dApAQCAtMCwwICsxLDk2OSBAQAorLS0gTG9hZCBwZ19hdWRp dCBtb2R1bGUKK2NyZWF0ZSBleHRlbnNpb24gcGdfYXVkaXQ7CistLQorLS0gQ3JlYXRlIGEg c3VwZXJ1c2VyIHJvbGUgdGhhdCB3ZSBrbm93IHRoZSBuYW1lIG9mIGZvciB0ZXN0aW5nCitD UkVBVEUgVVNFUiBzdXBlciBTVVBFUlVTRVI7CitcY29ubmVjdCBjb250cmliX3JlZ3Jlc3Np b24gc3VwZXI7CistLQorLS0gQ3JlYXRlIGF1ZGl0b3Igcm9sZQorQ1JFQVRFIFJPTEUgYXVk aXRvcjsKKy0tCistLSBDcmVhdGUgZmlyc3QgdGVzdCB1c2VyCitDUkVBVEUgVVNFUiB1c2Vy MTsKK0FMVEVSIFJPTEUgdXNlcjEgU0VUIHBnX2F1ZGl0LmxvZyA9ICdkZGwsIFJPTEUnOwor QUxURVIgUk9MRSB1c2VyMSBTRVQgcGdfYXVkaXQubG9nX25vdGljZSA9IE9OOworLS0KKy0t IENyZWF0ZSwgc2VsZWN0LCBkcm9wIChzZWxlY3Qgd2lsbCBub3QgYmUgYXVkaXRlZCkKK1xj b25uZWN0IGNvbnRyaWJfcmVncmVzc2lvbiB1c2VyMQorQ1JFQVRFIFRBQkxFIHB1YmxpYy50 ZXN0IChpZCBJTlQpOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMSwxLERETCxDUkVBVEUg VEFCTEUsVEFCTEUscHVibGljLnRlc3QsQ1JFQVRFIFRBQkxFIHB1YmxpYy50ZXN0IChpZCBJ TlQpOworU0VMRUNUICogRlJPTSB0ZXN0OworIGlkIAorLS0tLQorKDAgcm93cykKKworRFJP UCBUQUJMRSB0ZXN0OworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMiwxLERETCxEUk9QIFRB QkxFLFRBQkxFLHB1YmxpYy50ZXN0LERST1AgVEFCTEUgdGVzdDsKKy0tCistLSBDcmVhdGUg c2Vjb25kIHRlc3QgdXNlcgorXGNvbm5lY3QgY29udHJpYl9yZWdyZXNzaW9uIHN1cGVyCitD UkVBVEUgVVNFUiB1c2VyMjsKK0FMVEVSIFJPTEUgdXNlcjIgU0VUIHBnX2F1ZGl0LmxvZyA9 ICdSZWFkLCB3cml0RSc7CitBTFRFUiBST0xFIHVzZXIyIFNFVCBwZ19hdWRpdC5sb2dfY2F0 YWxvZyA9IE9GRjsKK0FMVEVSIFJPTEUgdXNlcjIgU0VUIHBnX2F1ZGl0LmxvZ19ub3RpY2Ug PSBPTjsKK0FMVEVSIFJPTEUgdXNlcjIgU0VUIHBnX2F1ZGl0LnJvbGUgPSBhdWRpdG9yOwor XGNvbm5lY3QgY29udHJpYl9yZWdyZXNzaW9uIHVzZXIyCitDUkVBVEUgVEFCTEUgdGVzdDIg KGlkIElOVCk7CitHUkFOVCBTRUxFQ1QgT04gVEFCTEUgcHVibGljLnRlc3QyIFRPIGF1ZGl0 b3I7CistLQorLS0gUm9sZS1iYXNlZCB0ZXN0cworQ1JFQVRFIFRBQkxFIHRlc3QzCisoCisJ aWQgSU5UCispOworU0VMRUNUIGNvdW50KCopCisgIEZST00KKygKKwlTRUxFQ1QgcmVsbmFt ZQorCSAgRlJPTSBwZ19jbGFzcworCSAgTElNSVQgMQorKSBTVUJRVUVSWTsKKyBjb3VudCAK Ky0tLS0tLS0KKyAgICAgMQorKDEgcm93KQorCitTRUxFQ1QgKgorICBGUk9NIHRlc3QzLCB0 ZXN0MjsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDEsMSxSRUFELFNFTEVDVCwsLCJTRUxF Q1QgKgorICBGUk9NIHRlc3QzLCB0ZXN0MjsiCitOT1RJQ0U6ICBBVURJVDogT0JKRUNULDEs MSxSRUFELFNFTEVDVCxUQUJMRSxwdWJsaWMudGVzdDIsIlNFTEVDVCAqCisgIEZST00gdGVz dDMsIHRlc3QyOyIKKyBpZCB8IGlkIAorLS0tLSstLS0tCisoMCByb3dzKQorCitHUkFOVCBJ TlNFUlQKKyAgIE9OIFRBQkxFIHB1YmxpYy50ZXN0MworICAgVE8gYXVkaXRvcjsKKy0tCist LSBDcmVhdGUgYSB2aWV3IHRvIHRlc3QgbG9nZ2luZworQ1JFQVRFIFZJRVcgdndfdGVzdDMg QVMKK1NFTEVDVCAqCisgIEZST00gdGVzdDM7CitHUkFOVCBTRUxFQ1QKKyAgIE9OIHZ3X3Rl c3QzCisgICBUTyBhdWRpdG9yOworLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoK Ky0tIHNlbGVjdCBvbiB2d190ZXN0MworLS0gc2VsZWN0IG9uIHRlc3QyCitTRUxFQ1QgKgor ICBGUk9NIHZ3X3Rlc3QzLCB0ZXN0MjsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDIsMSxS RUFELFNFTEVDVCwsLCJTRUxFQ1QgKgorICBGUk9NIHZ3X3Rlc3QzLCB0ZXN0MjsiCitOT1RJ Q0U6ICBBVURJVDogT0JKRUNULDIsMSxSRUFELFNFTEVDVCxUQUJMRSxwdWJsaWMudGVzdDIs IlNFTEVDVCAqCisgIEZST00gdndfdGVzdDMsIHRlc3QyOyIKK05PVElDRTogIEFVRElUOiBP QkpFQ1QsMiwxLFJFQUQsU0VMRUNULFZJRVcscHVibGljLnZ3X3Rlc3QzLCJTRUxFQ1QgKgor ICBGUk9NIHZ3X3Rlc3QzLCB0ZXN0MjsiCisgaWQgfCBpZCAKKy0tLS0rLS0tLQorKDAgcm93 cykKKworLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0tIGluc2VydCBvbiB0 ZXN0MworLS0gc2VsZWN0IG9uIHRlc3QyCitXSVRIIENURSBBUworKAorCVNFTEVDVCBpZAor CSAgRlJPTSB0ZXN0MgorKQorSU5TRVJUIElOVE8gdGVzdDMKK1NFTEVDVCBpZAorICBGUk9N IGN0ZTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDMsMSxXUklURSxJTlNFUlQsLCwiV0lU SCBDVEUgQVMKKygKKwlTRUxFQ1QgaWQKKwkgIEZST00gdGVzdDIKKykKK0lOU0VSVCBJTlRP IHRlc3QzCitTRUxFQ1QgaWQKKyAgRlJPTSBjdGU7IgorTk9USUNFOiAgQVVESVQ6IE9CSkVD VCwzLDEsV1JJVEUsSU5TRVJULFRBQkxFLHB1YmxpYy50ZXN0MywiV0lUSCBDVEUgQVMKKygK KwlTRUxFQ1QgaWQKKwkgIEZST00gdGVzdDIKKykKK0lOU0VSVCBJTlRPIHRlc3QzCitTRUxF Q1QgaWQKKyAgRlJPTSBjdGU7IgorTk9USUNFOiAgQVVESVQ6IE9CSkVDVCwzLDEsUkVBRCxT RUxFQ1QsVEFCTEUscHVibGljLnRlc3QyLCJXSVRIIENURSBBUworKAorCVNFTEVDVCBpZAor CSAgRlJPTSB0ZXN0MgorKQorSU5TRVJUIElOVE8gdGVzdDMKK1NFTEVDVCBpZAorICBGUk9N IGN0ZTsiCistLQorLS0gT2JqZWN0IGxvZ2dlZCBiZWNhdXNlIG9mOgorLS0gaW5zZXJ0IG9u IHRlc3QzCitXSVRIIENURSBBUworKAorCUlOU0VSVCBJTlRPIHRlc3QzIFZBTFVFUyAoMSkK KwkJCQkgICBSRVRVUk5JTkcgaWQKKykKK0lOU0VSVCBJTlRPIHRlc3QyCitTRUxFQ1QgaWQK KyAgRlJPTSBjdGU7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw0LDEsV1JJVEUsSU5TRVJU LCwsIldJVEggQ1RFIEFTCisoCisJSU5TRVJUIElOVE8gdGVzdDMgVkFMVUVTICgxKQorCQkJ CSAgIFJFVFVSTklORyBpZAorKQorSU5TRVJUIElOVE8gdGVzdDIKK1NFTEVDVCBpZAorICBG Uk9NIGN0ZTsiCitOT1RJQ0U6ICBBVURJVDogT0JKRUNULDQsMSxXUklURSxJTlNFUlQsVEFC TEUscHVibGljLnRlc3QzLCJXSVRIIENURSBBUworKAorCUlOU0VSVCBJTlRPIHRlc3QzIFZB TFVFUyAoMSkKKwkJCQkgICBSRVRVUk5JTkcgaWQKKykKK0lOU0VSVCBJTlRPIHRlc3QyCitT RUxFQ1QgaWQKKyAgRlJPTSBjdGU7IgorR1JBTlQgVVBEQVRFIE9OIFRBQkxFIHB1YmxpYy50 ZXN0MiBUTyBhdWRpdG9yOworLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0t IGluc2VydCBvbiB0ZXN0MworLS0gdXBkYXRlIG9uIHRlc3QyCitXSVRIIENURSBBUworKAor CVVQREFURSB0ZXN0MgorCSAgIFNFVCBpZCA9IDEKKwlSRVRVUk5JTkcgaWQKKykKK0lOU0VS VCBJTlRPIHRlc3QzCitTRUxFQ1QgaWQKKyAgRlJPTSBjdGU7CitOT1RJQ0U6ICBBVURJVDog U0VTU0lPTiw1LDEsV1JJVEUsSU5TRVJULCwsIldJVEggQ1RFIEFTCisoCisJVVBEQVRFIHRl c3QyCisJICAgU0VUIGlkID0gMQorCVJFVFVSTklORyBpZAorKQorSU5TRVJUIElOVE8gdGVz dDMKK1NFTEVDVCBpZAorICBGUk9NIGN0ZTsiCitOT1RJQ0U6ICBBVURJVDogT0JKRUNULDUs MSxXUklURSxJTlNFUlQsVEFCTEUscHVibGljLnRlc3QzLCJXSVRIIENURSBBUworKAorCVVQ REFURSB0ZXN0MgorCSAgIFNFVCBpZCA9IDEKKwlSRVRVUk5JTkcgaWQKKykKK0lOU0VSVCBJ TlRPIHRlc3QzCitTRUxFQ1QgaWQKKyAgRlJPTSBjdGU7IgorTk9USUNFOiAgQVVESVQ6IE9C SkVDVCw1LDEsV1JJVEUsVVBEQVRFLFRBQkxFLHB1YmxpYy50ZXN0MiwiV0lUSCBDVEUgQVMK KygKKwlVUERBVEUgdGVzdDIKKwkgICBTRVQgaWQgPSAxCisJUkVUVVJOSU5HIGlkCispCitJ TlNFUlQgSU5UTyB0ZXN0MworU0VMRUNUIGlkCisgIEZST00gY3RlOyIKKy0tCistLSBPYmpl Y3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6CistLSBpbnNlcnQgb24gdGVzdDIKK1dJVEggQ1RFIEFT CisoCisJSU5TRVJUIElOVE8gdGVzdDIgVkFMVUVTICgxKQorCQkJCSAgIFJFVFVSTklORyBp ZAorKQorVVBEQVRFIHRlc3QzCisgICBTRVQgaWQgPSBjdGUuaWQKKyAgRlJPTSBjdGUKKyBX SEVSRSB0ZXN0My5pZCA8PiBjdGUuaWQ7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw2LDEs V1JJVEUsVVBEQVRFLCwsIldJVEggQ1RFIEFTCisoCisJSU5TRVJUIElOVE8gdGVzdDIgVkFM VUVTICgxKQorCQkJCSAgIFJFVFVSTklORyBpZAorKQorVVBEQVRFIHRlc3QzCisgICBTRVQg aWQgPSBjdGUuaWQKKyAgRlJPTSBjdGUKKyBXSEVSRSB0ZXN0My5pZCA8PiBjdGUuaWQ7Igor Tk9USUNFOiAgQVVESVQ6IE9CSkVDVCw2LDEsV1JJVEUsSU5TRVJULFRBQkxFLHB1YmxpYy50 ZXN0MiwiV0lUSCBDVEUgQVMKKygKKwlJTlNFUlQgSU5UTyB0ZXN0MiBWQUxVRVMgKDEpCisJ CQkJICAgUkVUVVJOSU5HIGlkCispCitVUERBVEUgdGVzdDMKKyAgIFNFVCBpZCA9IGN0ZS5p ZAorICBGUk9NIGN0ZQorIFdIRVJFIHRlc3QzLmlkIDw+IGN0ZS5pZDsiCistLQorLS0gQ2hh bmdlIHBlcm1pc3Npb25zIG9mIHVzZXIgMiBzbyB0aGF0IG9ubHkgb2JqZWN0IGxvZ2dpbmcg d2lsbCBiZSBkb25lCitcY29ubmVjdCBjb250cmliX3JlZ3Jlc3Npb24gc3VwZXIKK2FsdGVy IHJvbGUgdXNlcjIgc2V0IHBnX2F1ZGl0LmxvZyA9ICdOT05FJzsKK1xjb25uZWN0IGNvbnRy aWJfcmVncmVzc2lvbiB1c2VyMgorLS0KKy0tIENyZWF0ZSB0ZXN0NCBhbmQgYWRkIHBlcm1p c3Npb25zCitDUkVBVEUgVEFCTEUgdGVzdDQKKygKKwlpZCBpbnQsCisJbmFtZSB0ZXh0Cisp OworR1JBTlQgU0VMRUNUIChuYW1lKQorICAgT04gVEFCTEUgcHVibGljLnRlc3Q0CisgICBU TyBhdWRpdG9yOworR1JBTlQgVVBEQVRFIChpZCkKKyAgIE9OIFRBQkxFIHB1YmxpYy50ZXN0 NAorICAgVE8gYXVkaXRvcjsKK0dSQU5UIGluc2VydCAobmFtZSkKKyAgIE9OIFRBQkxFIHB1 YmxpYy50ZXN0NAorICAgVE8gYXVkaXRvcjsKKy0tCistLSBOb3Qgb2JqZWN0IGxvZ2dlZAor U0VMRUNUIGlkCisgIEZST00gcHVibGljLnRlc3Q0OworIGlkIAorLS0tLQorKDAgcm93cykK KworLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0tIHNlbGVjdCAobmFtZSkg b24gdGVzdDQKK1NFTEVDVCBuYW1lCisgIEZST00gcHVibGljLnRlc3Q0OworTk9USUNFOiAg QVVESVQ6IE9CSkVDVCwxLDEsUkVBRCxTRUxFQ1QsVEFCTEUscHVibGljLnRlc3Q0LCJTRUxF Q1QgbmFtZQorICBGUk9NIHB1YmxpYy50ZXN0NDsiCisgbmFtZSAKKy0tLS0tLQorKDAgcm93 cykKKworLS0KKy0tIE5vdCBvYmplY3QgbG9nZ2VkCitJTlNFUlQgSU5UTyBwdWJsaWMudGVz dDQgKGlkKQorCQkJCSAgVkFMVUVTICgxKTsKKy0tCistLSBPYmplY3QgbG9nZ2VkIGJlY2F1 c2Ugb2Y6CistLSBpbnNlcnQgKG5hbWUpIG9uIHRlc3Q0CitJTlNFUlQgSU5UTyBwdWJsaWMu dGVzdDQgKG5hbWUpCisJCQkJICBWQUxVRVMgKCd0ZXN0Jyk7CitOT1RJQ0U6ICBBVURJVDog T0JKRUNULDIsMSxXUklURSxJTlNFUlQsVEFCTEUscHVibGljLnRlc3Q0LCJJTlNFUlQgSU5U TyBwdWJsaWMudGVzdDQgKG5hbWUpCisJCQkJICBWQUxVRVMgKCd0ZXN0Jyk7IgorLS0KKy0t IE5vdCBvYmplY3QgbG9nZ2VkCitVUERBVEUgcHVibGljLnRlc3Q0CisgICBTRVQgbmFtZSA9 ICdmb28nOworLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0tIHVwZGF0ZSAo aWQpIG9uIHRlc3Q0CitVUERBVEUgcHVibGljLnRlc3Q0CisgICBTRVQgaWQgPSAxOworTk9U SUNFOiAgQVVESVQ6IE9CSkVDVCwzLDEsV1JJVEUsVVBEQVRFLFRBQkxFLHB1YmxpYy50ZXN0 NCwiVVBEQVRFIHB1YmxpYy50ZXN0NAorICAgU0VUIGlkID0gMTsiCistLQorLS0gT2JqZWN0 IGxvZ2dlZCBiZWNhdXNlIG9mOgorLS0gdXBkYXRlIChuYW1lKSBvbiB0ZXN0NAorLS0gdXBk YXRlIChuYW1lKSB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgc2VsZWN0IChuYW1lKSBkdWUgdG8g b3JkZXJpbmcKK3VwZGF0ZSBwdWJsaWMudGVzdDQgc2V0IG5hbWUgPSAnZm9vJyB3aGVyZSBu YW1lID0gJ2Jhcic7CitOT1RJQ0U6ICBBVURJVDogT0JKRUNULDQsMSxXUklURSxVUERBVEUs VEFCTEUscHVibGljLnRlc3Q0LHVwZGF0ZSBwdWJsaWMudGVzdDQgc2V0IG5hbWUgPSAnZm9v JyB3aGVyZSBuYW1lID0gJ2Jhcic7CistLQorLS0gRHJvcCB0ZXN0IHRhYmxlcworRFJPUCBU QUJMRSB0ZXN0MjsKK0RST1AgVklFVyB2d190ZXN0MzsKK0RST1AgVEFCTEUgdGVzdDM7CitE Uk9QIFRBQkxFIHRlc3Q0OworLS0KKy0tIENoYW5nZSBwZXJtaXNzaW9ucyBvZiB1c2VyIDEg c28gdGhhdCBzZXNzaW9uIGxvZ2dpbmcgd2lsbCBiZSBkb25lCitcY29ubmVjdCBjb250cmli X3JlZ3Jlc3Npb24gc3VwZXIKK2FsdGVyIHJvbGUgdXNlcjEgc2V0IHBnX2F1ZGl0LmxvZyA9 ICdEREwsIFJFQUQnOworXGNvbm5lY3QgY29udHJpYl9yZWdyZXNzaW9uIHVzZXIxCistLQor LS0gQ3JlYXRlIHRhYmxlIGlzIHNlc3Npb24gbG9nZ2VkCitDUkVBVEUgVEFCTEUgcHVibGlj LmFjY291bnQKKygKKwlpZCBJTlQsCisJbmFtZSBURVhULAorCXBhc3N3b3JkIFRFWFQsCisJ ZGVzY3JpcHRpb24gVEVYVAorKTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDEsMSxEREws Q1JFQVRFIFRBQkxFLFRBQkxFLHB1YmxpYy5hY2NvdW50LCJDUkVBVEUgVEFCTEUgcHVibGlj LmFjY291bnQKKygKKwlpZCBJTlQsCisJbmFtZSBURVhULAorCXBhc3N3b3JkIFRFWFQsCisJ ZGVzY3JpcHRpb24gVEVYVAorKTsiCistLQorLS0gU2VsZWN0IGlzIHNlc3Npb24gbG9nZ2Vk CitTRUxFQ1QgKgorICBGUk9NIGFjY291bnQ7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwy LDEsUkVBRCxTRUxFQ1QsLCwiU0VMRUNUICoKKyAgRlJPTSBhY2NvdW50OyIKKyBpZCB8IG5h bWUgfCBwYXNzd29yZCB8IGRlc2NyaXB0aW9uIAorLS0tLSstLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tCisoMCByb3dzKQorCistLQorLS0gSW5zZXJ0IGlzIG5vdCBsb2dnZWQK K0lOU0VSVCBJTlRPIGFjY291bnQgKGlkLCBuYW1lLCBwYXNzd29yZCwgZGVzY3JpcHRpb24p CisJCQkgVkFMVUVTICgxLCAndXNlcjEnLCAnSEFTSDEnLCAnYmxhaCwgYmxhaCcpOworLS0K Ky0tIENoYW5nZSBwZXJtaXNzaW9ucyBvZiB1c2VyIDEgc28gdGhhdCBvbmx5IG9iamVjdCBs b2dnaW5nIHdpbGwgYmUgZG9uZQorXGNvbm5lY3QgY29udHJpYl9yZWdyZXNzaW9uIHN1cGVy CithbHRlciByb2xlIHVzZXIxIHNldCBwZ19hdWRpdC5sb2cgPSAnbm9uZSc7CithbHRlciBy b2xlIHVzZXIxIHNldCBwZ19hdWRpdC5yb2xlID0gJ2F1ZGl0b3InOworXGNvbm5lY3QgY29u dHJpYl9yZWdyZXNzaW9uIHVzZXIxCistLQorLS0gQXVkaXRvciBncmFudHMgbm90IGxvZ2dl ZAorR1JBTlQgU0VMRUNUIChwYXNzd29yZCksCisJICBVUERBVEUgKG5hbWUsIHBhc3N3b3Jk KQorICAgT04gVEFCTEUgcHVibGljLmFjY291bnQKKyAgIFRPIGF1ZGl0b3I7CistLQorLS0g Tm90IG9iamVjdCBsb2dnZWQKK1NFTEVDVCBpZCwKKwkgICBuYW1lCisgIEZST00gYWNjb3Vu dDsKKyBpZCB8IG5hbWUgIAorLS0tLSstLS0tLS0tCisgIDEgfCB1c2VyMQorKDEgcm93KQor CistLQorLS0gT2JqZWN0IGxvZ2dlZCBiZWNhdXNlIG9mOgorLS0gc2VsZWN0IChwYXNzd29y ZCkgb24gYWNjb3VudAorU0VMRUNUIHBhc3N3b3JkCisgIEZST00gYWNjb3VudDsKK05PVElD RTogIEFVRElUOiBPQkpFQ1QsMSwxLFJFQUQsU0VMRUNULFRBQkxFLHB1YmxpYy5hY2NvdW50 LCJTRUxFQ1QgcGFzc3dvcmQKKyAgRlJPTSBhY2NvdW50OyIKKyBwYXNzd29yZCAKKy0tLS0t LS0tLS0KKyBIQVNIMQorKDEgcm93KQorCistLQorLS0gTm90IG9iamVjdCBsb2dnZWQKK1VQ REFURSBhY2NvdW50CisgICBTRVQgZGVzY3JpcHRpb24gPSAneWFkYSwgeWFkYSc7CistLQor LS0gT2JqZWN0IGxvZ2dlZCBiZWNhdXNlIG9mOgorLS0gdXBkYXRlIChwYXNzd29yZCkgb24g YWNjb3VudAorVVBEQVRFIGFjY291bnQKKyAgIFNFVCBwYXNzd29yZCA9ICdIQVNIMic7CitO T1RJQ0U6ICBBVURJVDogT0JKRUNULDIsMSxXUklURSxVUERBVEUsVEFCTEUscHVibGljLmFj Y291bnQsIlVQREFURSBhY2NvdW50CisgICBTRVQgcGFzc3dvcmQgPSAnSEFTSDInOyIKKy0t CistLSBDaGFuZ2UgcGVybWlzc2lvbnMgb2YgdXNlciAxIHNvIHRoYXQgc2Vzc2lvbiByZWxh dGlvbiBsb2dnaW5nIHdpbGwgYmUgZG9uZQorXGNvbm5lY3QgY29udHJpYl9yZWdyZXNzaW9u IHN1cGVyCithbHRlciByb2xlIHVzZXIxIHNldCBwZ19hdWRpdC5sb2dfcmVsYXRpb24gPSBv bjsKK2FsdGVyIHJvbGUgdXNlcjEgc2V0IHBnX2F1ZGl0LmxvZyA9ICdyZWFkLCBXUklURSc7 CitcY29ubmVjdCBjb250cmliX3JlZ3Jlc3Npb24gdXNlcjEKKy0tCistLSBOb3QgbG9nZ2Vk CitjcmVhdGUgdGFibGUgQUNDT1VOVF9ST0xFX01BUAorKAorCWFjY291bnRfaWQgSU5ULAor CXJvbGVfaWQgSU5UCispOworLS0KKy0tIEF1ZGl0b3IgZ3JhbnRzIG5vdCBsb2dnZWQKK0dS QU5UIFNFTEVDVAorICAgT04gVEFCTEUgcHVibGljLmFjY291bnRfcm9sZV9tYXAKKyAgIFRP IGF1ZGl0b3I7CistLQorLS0gT2JqZWN0IGxvZ2dlZCBiZWNhdXNlIG9mOgorLS0gc2VsZWN0 IChwYXNzd29yZCkgb24gYWNjb3VudAorLS0gc2VsZWN0IG9uIGFjY291bnRfcm9sZV9tYXAK Ky0tIFNlc3Npb24gbG9nZ2VkIG9uIGFsbCB0YWJsZXMgYmVjYXVzZSBsb2cgPSByZWFkIGFu ZCBsb2dfcmVsYXRpb24gPSBvbgorU0VMRUNUIGFjY291bnQucGFzc3dvcmQsCisJICAgYWNj b3VudF9yb2xlX21hcC5yb2xlX2lkCisgIEZST00gYWNjb3VudAorCSAgIElOTkVSIEpPSU4g YWNjb3VudF9yb2xlX21hcAorCQkJb24gYWNjb3VudC5pZCA9IGFjY291bnRfcm9sZV9tYXAu YWNjb3VudF9pZDsKK05PVElDRTogIEFVRElUOiBPQkpFQ1QsMSwxLFJFQUQsU0VMRUNULFRB QkxFLHB1YmxpYy5hY2NvdW50LCJTRUxFQ1QgYWNjb3VudC5wYXNzd29yZCwKKwkgICBhY2Nv dW50X3JvbGVfbWFwLnJvbGVfaWQKKyAgRlJPTSBhY2NvdW50CisJICAgSU5ORVIgSk9JTiBh Y2NvdW50X3JvbGVfbWFwCisJCQlvbiBhY2NvdW50LmlkID0gYWNjb3VudF9yb2xlX21hcC5h Y2NvdW50X2lkOyIKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDEsMSxSRUFELFNFTEVDVCxU QUJMRSxwdWJsaWMuYWNjb3VudCwiU0VMRUNUIGFjY291bnQucGFzc3dvcmQsCisJICAgYWNj b3VudF9yb2xlX21hcC5yb2xlX2lkCisgIEZST00gYWNjb3VudAorCSAgIElOTkVSIEpPSU4g YWNjb3VudF9yb2xlX21hcAorCQkJb24gYWNjb3VudC5pZCA9IGFjY291bnRfcm9sZV9tYXAu YWNjb3VudF9pZDsiCitOT1RJQ0U6ICBBVURJVDogT0JKRUNULDEsMSxSRUFELFNFTEVDVCxU QUJMRSxwdWJsaWMuYWNjb3VudF9yb2xlX21hcCwiU0VMRUNUIGFjY291bnQucGFzc3dvcmQs CisJICAgYWNjb3VudF9yb2xlX21hcC5yb2xlX2lkCisgIEZST00gYWNjb3VudAorCSAgIElO TkVSIEpPSU4gYWNjb3VudF9yb2xlX21hcAorCQkJb24gYWNjb3VudC5pZCA9IGFjY291bnRf cm9sZV9tYXAuYWNjb3VudF9pZDsiCitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwxLDEsUkVB RCxTRUxFQ1QsVEFCTEUscHVibGljLmFjY291bnRfcm9sZV9tYXAsIlNFTEVDVCBhY2NvdW50 LnBhc3N3b3JkLAorCSAgIGFjY291bnRfcm9sZV9tYXAucm9sZV9pZAorICBGUk9NIGFjY291 bnQKKwkgICBJTk5FUiBKT0lOIGFjY291bnRfcm9sZV9tYXAKKwkJCW9uIGFjY291bnQuaWQg PSBhY2NvdW50X3JvbGVfbWFwLmFjY291bnRfaWQ7IgorIHBhc3N3b3JkIHwgcm9sZV9pZCAK Ky0tLS0tLS0tLS0rLS0tLS0tLS0tCisoMCByb3dzKQorCistLQorLS0gT2JqZWN0IGxvZ2dl ZCBiZWNhdXNlIG9mOgorLS0gc2VsZWN0IChwYXNzd29yZCkgb24gYWNjb3VudAorLS0gU2Vz c2lvbiBsb2dnZWQgb24gYWxsIHRhYmxlcyBiZWNhdXNlIGxvZyA9IHJlYWQgYW5kIGxvZ19y ZWxhdGlvbiA9IG9uCitTRUxFQ1QgcGFzc3dvcmQKKyAgRlJPTSBhY2NvdW50OworTk9USUNF OiAgQVVESVQ6IE9CSkVDVCwyLDEsUkVBRCxTRUxFQ1QsVEFCTEUscHVibGljLmFjY291bnQs IlNFTEVDVCBwYXNzd29yZAorICBGUk9NIGFjY291bnQ7IgorTk9USUNFOiAgQVVESVQ6IFNF U1NJT04sMiwxLFJFQUQsU0VMRUNULFRBQkxFLHB1YmxpYy5hY2NvdW50LCJTRUxFQ1QgcGFz c3dvcmQKKyAgRlJPTSBhY2NvdW50OyIKKyBwYXNzd29yZCAKKy0tLS0tLS0tLS0KKyBIQVNI MgorKDEgcm93KQorCistLQorLS0gTm90IG9iamVjdCBsb2dnZWQKKy0tIFNlc3Npb24gbG9n Z2VkIG9uIGFsbCB0YWJsZXMgYmVjYXVzZSBsb2cgPSByZWFkIGFuZCBsb2dfcmVsYXRpb24g PSBvbgorVVBEQVRFIGFjY291bnQKKyAgIFNFVCBkZXNjcmlwdGlvbiA9ICd5YWRhLCB5YWRh JzsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDMsMSxXUklURSxVUERBVEUsVEFCTEUscHVi bGljLmFjY291bnQsIlVQREFURSBhY2NvdW50CisgICBTRVQgZGVzY3JpcHRpb24gPSAneWFk YSwgeWFkYSc7IgorLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0tIHNlbGVj dCAocGFzc3dvcmQpIG9uIGFjY291bnQgKGluIHRoZSB3aGVyZSBjbGF1c2UpCistLSBTZXNz aW9uIGxvZ2dlZCBvbiBhbGwgdGFibGVzIGJlY2F1c2UgbG9nID0gcmVhZCBhbmQgbG9nX3Jl bGF0aW9uID0gb24KK1VQREFURSBhY2NvdW50CisgICBTRVQgZGVzY3JpcHRpb24gPSAneWFk YSwgeWFkYScKKyB3aGVyZSBwYXNzd29yZCA9ICdIQVNIMic7CitOT1RJQ0U6ICBBVURJVDog T0JKRUNULDQsMSxXUklURSxVUERBVEUsVEFCTEUscHVibGljLmFjY291bnQsIlVQREFURSBh Y2NvdW50CisgICBTRVQgZGVzY3JpcHRpb24gPSAneWFkYSwgeWFkYScKKyB3aGVyZSBwYXNz d29yZCA9ICdIQVNIMic7IgorTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNCwxLFdSSVRFLFVQ REFURSxUQUJMRSxwdWJsaWMuYWNjb3VudCwiVVBEQVRFIGFjY291bnQKKyAgIFNFVCBkZXNj cmlwdGlvbiA9ICd5YWRhLCB5YWRhJworIHdoZXJlIHBhc3N3b3JkID0gJ0hBU0gyJzsiCist LQorLS0gT2JqZWN0IGxvZ2dlZCBiZWNhdXNlIG9mOgorLS0gdXBkYXRlIChwYXNzd29yZCkg b24gYWNjb3VudAorLS0gU2Vzc2lvbiBsb2dnZWQgb24gYWxsIHRhYmxlcyBiZWNhdXNlIGxv ZyA9IHJlYWQgYW5kIGxvZ19yZWxhdGlvbiA9IG9uCitVUERBVEUgYWNjb3VudAorICAgU0VU IHBhc3N3b3JkID0gJ0hBU0gyJzsKK05PVElDRTogIEFVRElUOiBPQkpFQ1QsNSwxLFdSSVRF LFVQREFURSxUQUJMRSxwdWJsaWMuYWNjb3VudCwiVVBEQVRFIGFjY291bnQKKyAgIFNFVCBw YXNzd29yZCA9ICdIQVNIMic7IgorTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNSwxLFdSSVRF LFVQREFURSxUQUJMRSxwdWJsaWMuYWNjb3VudCwiVVBEQVRFIGFjY291bnQKKyAgIFNFVCBw YXNzd29yZCA9ICdIQVNIMic7IgorLS0KKy0tIENoYW5nZSBiYWNrIHRvIHN1cGVydXNlciB0 byBkbyBleGhhdXN0aXZlIHRlc3RzCitcY29ubmVjdCBjb250cmliX3JlZ3Jlc3Npb24gc3Vw ZXIKK1NFVCBwZ19hdWRpdC5sb2cgPSAnQUxMJzsKK1NFVCBwZ19hdWRpdC5sb2dfbm90aWNl ID0gT047CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwyLDEsTUlTQyxTRVQsLCxTRVQgcGdf YXVkaXQubG9nX25vdGljZSA9IE9OOworU0VUIHBnX2F1ZGl0LmxvZ19yZWxhdGlvbiA9IE9O OworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMywxLE1JU0MsU0VULCwsU0VUIHBnX2F1ZGl0 LmxvZ19yZWxhdGlvbiA9IE9OOworU0VUIHBnX2F1ZGl0LmxvZ19wYXJhbWV0ZXIgPSBPTjsK K05PVElDRTogIEFVRElUOiBTRVNTSU9OLDQsMSxNSVNDLFNFVCwsLFNFVCBwZ19hdWRpdC5s b2dfcGFyYW1ldGVyID0gT047CistLQorLS0gU2ltcGxlIERPIGJsb2NrCitETyAkJAorQkVH SU4KKwlyYWlzZSBub3RpY2UgJ3Rlc3QnOworRU5EICQkOworTk9USUNFOiAgQVVESVQ6IFNF U1NJT04sNSwxLEZVTkNUSU9OLERPLCwsIkRPICQkCitCRUdJTgorCXJhaXNlIG5vdGljZSAn dGVzdCc7CitFTkQgJCQ7IgorTk9USUNFOiAgdGVzdAorLS0KKy0tIENyZWF0ZSB0ZXN0IHNj aGVtYQorQ1JFQVRFIFNDSEVNQSB0ZXN0OworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNiwx LERETCxDUkVBVEUgU0NIRU1BLCwsQ1JFQVRFIFNDSEVNQSB0ZXN0OworLS0KKy0tIENvcHkg YWNjb3VudCB0byBzdGRvdXQKK0NPUFkgYWNjb3VudCBUTyBzdGRvdXQ7CitOT1RJQ0U6ICBB VURJVDogU0VTU0lPTiw3LDEsUkVBRCxTRUxFQ1QsVEFCTEUscHVibGljLmFjY291bnQsQ09Q WSBhY2NvdW50IFRPIHN0ZG91dDsKKzEJdXNlcjEJSEFTSDIJeWFkYSwgeWFkYQorLS0KKy0t IENyZWF0ZSBhIHRhYmxlIGZyb20gYSBxdWVyeQorQ1JFQVRFIFRBQkxFIHRlc3QuYWNjb3Vu dF9jb3B5IEFTCitTRUxFQ1QgKgorICBGUk9NIGFjY291bnQ7CitOT1RJQ0U6ICBBVURJVDog U0VTU0lPTiw4LDEsUkVBRCxTRUxFQ1QsVEFCTEUscHVibGljLmFjY291bnQsIkNSRUFURSBU QUJMRSB0ZXN0LmFjY291bnRfY29weSBBUworU0VMRUNUICoKKyAgRlJPTSBhY2NvdW50OyIK K05PVElDRTogIEFVRElUOiBTRVNTSU9OLDgsMSxXUklURSxJTlNFUlQsVEFCTEUsdGVzdC5h Y2NvdW50X2NvcHksIkNSRUFURSBUQUJMRSB0ZXN0LmFjY291bnRfY29weSBBUworU0VMRUNU ICoKKyAgRlJPTSBhY2NvdW50OyIKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDgsMixEREws Q1JFQVRFIFRBQkxFIEFTLCwsIkNSRUFURSBUQUJMRSB0ZXN0LmFjY291bnRfY29weSBBUwor U0VMRUNUICoKKyAgRlJPTSBhY2NvdW50OyIKKy0tCistLSBDb3B5IGZyb20gc3RkaW4gdG8g YWNjb3VudCBjb3B5CitDT1BZIHRlc3QuYWNjb3VudF9jb3B5IGZyb20gc3RkaW47CitOT1RJ Q0U6ICBBVURJVDogU0VTU0lPTiw5LDEsV1JJVEUsSU5TRVJULFRBQkxFLHRlc3QuYWNjb3Vu dF9jb3B5LENPUFkgdGVzdC5hY2NvdW50X2NvcHkgZnJvbSBzdGRpbjsKKy0tCistLSBUZXN0 IHByZXBhcmVkIHN0YXRlbWVudAorUFJFUEFSRSBwZ2NsYXNzc3RtdCAob2lkKSBBUworU0VM RUNUICoKKyAgRlJPTSBhY2NvdW50CisgV0hFUkUgaWQgPSAkMTsKK05PVElDRTogIEFVRElU OiBTRVNTSU9OLDEwLDEsUkVBRCxQUkVQQVJFLCwsIlBSRVBBUkUgcGdjbGFzc3N0bXQgKG9p ZCkgQVMKK1NFTEVDVCAqCisgIEZST00gYWNjb3VudAorIFdIRVJFIGlkID0gJDE7IgorRVhF Q1VURSBwZ2NsYXNzc3RtdCAoMSk7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwxMSwxLFJF QUQsU0VMRUNULFRBQkxFLHB1YmxpYy5hY2NvdW50LCJQUkVQQVJFIHBnY2xhc3NzdG10IChv aWQpIEFTCitTRUxFQ1QgKgorICBGUk9NIGFjY291bnQKKyBXSEVSRSBpZCA9ICQxOyIsMQor Tk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMTEsMixSRUFELEVYRUNVVEUsLCxFWEVDVVRFIHBn Y2xhc3NzdG10ICgxKTsKKyBpZCB8IG5hbWUgIHwgcGFzc3dvcmQgfCBkZXNjcmlwdGlvbiAK Ky0tLS0rLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0KKyAgMSB8IHVzZXIxIHwg SEFTSDIgICAgfCB5YWRhLCB5YWRhCisoMSByb3cpCisKK0RFQUxMT0NBVEUgcGdjbGFzc3N0 bXQ7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwxMiwxLE1JU0MsREVBTExPQ0FURSwsLERF QUxMT0NBVEUgcGdjbGFzc3N0bXQ7CistLQorLS0gVGVzdCBjdXJzb3IKK0JFR0lOOworTk9U SUNFOiAgQVVESVQ6IFNFU1NJT04sMTMsMSxNSVNDLEJFR0lOLCwsQkVHSU47CitERUNMQVJF IGN0ZXN0IFNDUk9MTCBDVVJTT1IgRk9SCitTRUxFQ1QgY291bnQoKikKKyAgRlJPTQorKAor CVNFTEVDVCByZWxuYW1lCisJICBGUk9NIHBnX2NsYXNzCisJIExJTUlUIDEKKyApIHN1YnF1 ZXJ5OworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMTQsMSxSRUFELFNFTEVDVCxUQUJMRSxw Z19jYXRhbG9nLnBnX2NsYXNzLCJERUNMQVJFIGN0ZXN0IFNDUk9MTCBDVVJTT1IgRk9SCitT RUxFQ1QgY291bnQoKikKKyAgRlJPTQorKAorCVNFTEVDVCByZWxuYW1lCisJICBGUk9NIHBn X2NsYXNzCisJIExJTUlUIDEKKyApIHN1YnF1ZXJ5OyIKK05PVElDRTogIEFVRElUOiBTRVNT SU9OLDE0LDIsUkVBRCxERUNMQVJFIENVUlNPUiwsLCJERUNMQVJFIGN0ZXN0IFNDUk9MTCBD VVJTT1IgRk9SCitTRUxFQ1QgY291bnQoKikKKyAgRlJPTQorKAorCVNFTEVDVCByZWxuYW1l CisJICBGUk9NIHBnX2NsYXNzCisJIExJTUlUIDEKKyApIHN1YnF1ZXJ5OyIKK0ZFVENIIE5F WFQgRlJPTSBjdGVzdDsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDE1LDEsTUlTQyxGRVRD SCwsLEZFVENIIE5FWFQgRlJPTSBjdGVzdDsKKyBjb3VudCAKKy0tLS0tLS0KKyAgICAgMQor KDEgcm93KQorCitDTE9TRSBjdGVzdDsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDE2LDEs TUlTQyxDTE9TRSBDVVJTT1IsLCxDTE9TRSBjdGVzdDsKK0NPTU1JVDsKK05PVElDRTogIEFV RElUOiBTRVNTSU9OLDE3LDEsTUlTQyxDT01NSVQsLCxDT01NSVQ7CistLQorLS0gVHVybiBv ZmYgbG9nX2NhdGFsb2cgYW5kIHBnX2NsYXNzIHdpbGwgbm90IGJlIGxvZ2dlZAorU0VUIHBn X2F1ZGl0LmxvZ19jYXRhbG9nID0gT0ZGOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMTgs MSxNSVNDLFNFVCwsLFNFVCBwZ19hdWRpdC5sb2dfY2F0YWxvZyA9IE9GRjsKK1NFTEVDVCBj b3VudCgqKQorICBGUk9NCisoCisJU0VMRUNUIHJlbG5hbWUKKwkgIEZST00gcGdfY2xhc3MK KwkgTElNSVQgMQorICkgc3VicXVlcnk7CisgY291bnQgCistLS0tLS0tCisgICAgIDEKKygx IHJvdykKKworLS0KKy0tIFRlc3QgcHJlcGFyZWQgaW5zZXJ0CitDUkVBVEUgVEFCTEUgdGVz dC50ZXN0X2luc2VydAorKAorCWlkIElOVAorKTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9O LDE5LDEsRERMLENSRUFURSBUQUJMRSxUQUJMRSx0ZXN0LnRlc3RfaW5zZXJ0LCJDUkVBVEUg VEFCTEUgdGVzdC50ZXN0X2luc2VydAorKAorCWlkIElOVAorKTsiCitQUkVQQVJFIHBnY2xh c3NzdG10IChvaWQpIEFTCitJTlNFUlQgSU5UTyB0ZXN0LnRlc3RfaW5zZXJ0IChpZCkKKwkJ CQkJICBWQUxVRVMgKCQxKTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDIwLDEsV1JJVEUs UFJFUEFSRSwsLCJQUkVQQVJFIHBnY2xhc3NzdG10IChvaWQpIEFTCitJTlNFUlQgSU5UTyB0 ZXN0LnRlc3RfaW5zZXJ0IChpZCkKKwkJCQkJICBWQUxVRVMgKCQxKTsiCitFWEVDVVRFIHBn Y2xhc3NzdG10ICgxKTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDIxLDEsV1JJVEUsSU5T RVJULFRBQkxFLHRlc3QudGVzdF9pbnNlcnQsIlBSRVBBUkUgcGdjbGFzc3N0bXQgKG9pZCkg QVMKK0lOU0VSVCBJTlRPIHRlc3QudGVzdF9pbnNlcnQgKGlkKQorCQkJCQkgIFZBTFVFUyAo JDEpOyIsMQorTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMjEsMixXUklURSxFWEVDVVRFLCws RVhFQ1VURSBwZ2NsYXNzc3RtdCAoMSk7CistLQorLS0gQ2hlY2sgdGhhdCBwcmltYXJ5IGtl eSBjcmVhdGlvbiBpcyBsb2dnZWQKK0NSRUFURSBUQUJMRSBwdWJsaWMudGVzdAorKAorCWlk IElOVCwKKwluYW1lIFRFWFQsCisJZGVzY3JpcHRpb24gVEVYVCwKKwlDT05TVFJBSU5UIHRl c3RfcGtleSBQUklNQVJZIEtFWSAoaWQpCispOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04s MjIsMSxEREwsQ1JFQVRFIElOREVYLElOREVYLHB1YmxpYy50ZXN0X3BrZXksIkNSRUFURSBU QUJMRSBwdWJsaWMudGVzdAorKAorCWlkIElOVCwKKwluYW1lIFRFWFQsCisJZGVzY3JpcHRp b24gVEVYVCwKKwlDT05TVFJBSU5UIHRlc3RfcGtleSBQUklNQVJZIEtFWSAoaWQpCispOyIK K05PVElDRTogIEFVRElUOiBTRVNTSU9OLDIyLDIsRERMLENSRUFURSBUQUJMRSxUQUJMRSxw dWJsaWMudGVzdCwiQ1JFQVRFIFRBQkxFIHB1YmxpYy50ZXN0CisoCisJaWQgSU5ULAorCW5h bWUgVEVYVCwKKwlkZXNjcmlwdGlvbiBURVhULAorCUNPTlNUUkFJTlQgdGVzdF9wa2V5IFBS SU1BUlkgS0VZIChpZCkKKyk7IgorLS0KKy0tIENoZWNrIHRoYXQgYW5hbHl6ZSBpcyBsb2dn ZWQKK0FOQUxZWkUgdGVzdDsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDIzLDEsTUlTQyxB TkFMWVpFLCwsQU5BTFlaRSB0ZXN0OworLS0KKy0tIEdyYW50cyB0byBwdWJsaWMgc2hvdWxk IG5vdCBjYXVzZSBvYmplY3QgbG9nZ2luZyAoc2Vzc2lvbiBsb2dnaW5nIHdpbGwKKy0tIHN0 aWxsIGhhcHBlbikKK0dSQU5UIFNFTEVDVAorICBPTiBUQUJMRSBwdWJsaWMudGVzdAorICBU TyBQVUJMSUM7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwyNCwxLFJPTEUsR1JBTlQsLCwi R1JBTlQgU0VMRUNUCisgIE9OIFRBQkxFIHB1YmxpYy50ZXN0CisgIFRPIFBVQkxJQzsiCitT RUxFQ1QgKgorICBGUk9NIHRlc3Q7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwyNSwxLFJF QUQsU0VMRUNULFRBQkxFLHB1YmxpYy50ZXN0LCJTRUxFQ1QgKgorICBGUk9NIHRlc3Q7Igor IGlkIHwgbmFtZSB8IGRlc2NyaXB0aW9uIAorLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0tLQor KDAgcm93cykKKworLS0gQ2hlY2sgdGhhdCBzdGF0ZW1lbnRzIHdpdGhvdXQgY29sdW1ucyBs b2cKK1NFTEVDVAorICBGUk9NIHRlc3Q7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwyNiwx LFJFQUQsU0VMRUNULFRBQkxFLHB1YmxpYy50ZXN0LCJTRUxFQ1QKKyAgRlJPTSB0ZXN0OyIK Ky0tCisoMCByb3dzKQorCitTRUxFQ1QgMSwKKwkgICBjdXJyZW50X3VzZXI7CitOT1RJQ0U6 ICBBVURJVDogU0VTU0lPTiwyNywxLFJFQUQsU0VMRUNULCwsIlNFTEVDVCAxLAorCSAgIGN1 cnJlbnRfdXNlcjsiCisgP2NvbHVtbj8gfCBjdXJyZW50X3VzZXIgCistLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tCisgICAgICAgIDEgfCBzdXBlcgorKDEgcm93KQorCitETyAkJAorREVD TEFSRQorCXRlc3QgSU5UOworQkVHSU4KKwlTRUxFQ1QgMQorCSAgSU5UTyB0ZXN0OworRU5E ICQkOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMjgsMSxGVU5DVElPTixETywsLCJETyAk JAorREVDTEFSRQorCXRlc3QgSU5UOworQkVHSU4KKwlTRUxFQ1QgMQorCSAgSU5UTyB0ZXN0 OworRU5EICQkOyIKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDI4LDIsUkVBRCxTRUxFQ1Qs LCxTRUxFQ1QgMQorQ09OVEVYVDogIFNRTCBzdGF0ZW1lbnQgIlNFTEVDVCAxIgorUEwvcGdT UUwgZnVuY3Rpb24gaW5saW5lX2NvZGVfYmxvY2sgbGluZSA1IGF0IFNRTCBzdGF0ZW1lbnQK K2V4cGxhaW4gc2VsZWN0IDE7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwyOSwxLFJFQUQs U0VMRUNULCwsZXhwbGFpbiBzZWxlY3QgMTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDI5 LDIsTUlTQyxFWFBMQUlOLCwsZXhwbGFpbiBzZWxlY3QgMTsKKyAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0ICAoY29zdD0wLjAwLi4wLjAxIHJvd3M9MSB3aWR0 aD0wKQorKDEgcm93KQorCistLQorLS0gVGVzdCB0aGF0IGxvb2tzIGluc2lkZSBvZiBkbyBi bG9ja3MgbG9nCitJTlNFUlQgSU5UTyBURVNUIChpZCkKKwkJICBWQUxVRVMgKDEpOworTk9U SUNFOiAgQVVESVQ6IFNFU1NJT04sMzAsMSxXUklURSxJTlNFUlQsVEFCTEUscHVibGljLnRl c3QsIklOU0VSVCBJTlRPIFRFU1QgKGlkKQorCQkgIFZBTFVFUyAoMSk7IgorSU5TRVJUIElO VE8gVEVTVCAoaWQpCisJCSAgVkFMVUVTICgyKTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9O LDMxLDEsV1JJVEUsSU5TRVJULFRBQkxFLHB1YmxpYy50ZXN0LCJJTlNFUlQgSU5UTyBURVNU IChpZCkKKwkJICBWQUxVRVMgKDIpOyIKK0lOU0VSVCBJTlRPIFRFU1QgKGlkKQorCQkgIFZB TFVFUyAoMyk7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwzMiwxLFdSSVRFLElOU0VSVCxU QUJMRSxwdWJsaWMudGVzdCwiSU5TRVJUIElOVE8gVEVTVCAoaWQpCisJCSAgVkFMVUVTICgz KTsiCitETyAkJAorREVDTEFSRQorCXJlc3VsdCBSRUNPUkQ7CitCRUdJTgorCUZPUiByZXN1 bHQgSU4KKwkJU0VMRUNUIGlkCisJCSAgRlJPTSB0ZXN0CisJTE9PUAorCQlJTlNFUlQgSU5U TyB0ZXN0IChpZCkKKwkJCSBWQUxVRVMgKHJlc3VsdC5pZCArIDEwMCk7CisJRU5EIExPT1A7 CitFTkQgJCQ7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwzMywxLEZVTkNUSU9OLERPLCws IkRPICQkCitERUNMQVJFCisJcmVzdWx0IFJFQ09SRDsKK0JFR0lOCisJRk9SIHJlc3VsdCBJ TgorCQlTRUxFQ1QgaWQKKwkJICBGUk9NIHRlc3QKKwlMT09QCisJCUlOU0VSVCBJTlRPIHRl c3QgKGlkKQorCQkJIFZBTFVFUyAocmVzdWx0LmlkICsgMTAwKTsKKwlFTkQgTE9PUDsKK0VO RCAkJDsiCitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwzMywyLFJFQUQsU0VMRUNULFRBQkxF LHB1YmxpYy50ZXN0LCJTRUxFQ1QgaWQKKwkJICBGUk9NIHRlc3QiCitDT05URVhUOiAgUEwv cGdTUUwgZnVuY3Rpb24gaW5saW5lX2NvZGVfYmxvY2sgbGluZSA1IGF0IEZPUiBvdmVyIFNF TEVDVCByb3dzCitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwzMywzLFdSSVRFLElOU0VSVCxU QUJMRSxwdWJsaWMudGVzdCwiSU5TRVJUIElOVE8gdGVzdCAoaWQpCisJCQkgVkFMVUVTIChy ZXN1bHQuaWQgKyAxMDApIiwsLAorQ09OVEVYVDogIFNRTCBzdGF0ZW1lbnQgIklOU0VSVCBJ TlRPIHRlc3QgKGlkKQorCQkJIFZBTFVFUyAocmVzdWx0LmlkICsgMTAwKSIKK1BML3BnU1FM IGZ1bmN0aW9uIGlubGluZV9jb2RlX2Jsb2NrIGxpbmUgOSBhdCBTUUwgc3RhdGVtZW50CitO T1RJQ0U6ICBBVURJVDogU0VTU0lPTiwzMyw0LFdSSVRFLElOU0VSVCxUQUJMRSxwdWJsaWMu dGVzdCwiSU5TRVJUIElOVE8gdGVzdCAoaWQpCisJCQkgVkFMVUVTIChyZXN1bHQuaWQgKyAx MDApIiwsLAorQ09OVEVYVDogIFNRTCBzdGF0ZW1lbnQgIklOU0VSVCBJTlRPIHRlc3QgKGlk KQorCQkJIFZBTFVFUyAocmVzdWx0LmlkICsgMTAwKSIKK1BML3BnU1FMIGZ1bmN0aW9uIGlu bGluZV9jb2RlX2Jsb2NrIGxpbmUgOSBhdCBTUUwgc3RhdGVtZW50CitOT1RJQ0U6ICBBVURJ VDogU0VTU0lPTiwzMyw1LFdSSVRFLElOU0VSVCxUQUJMRSxwdWJsaWMudGVzdCwiSU5TRVJU IElOVE8gdGVzdCAoaWQpCisJCQkgVkFMVUVTIChyZXN1bHQuaWQgKyAxMDApIiwsLAorQ09O VEVYVDogIFNRTCBzdGF0ZW1lbnQgIklOU0VSVCBJTlRPIHRlc3QgKGlkKQorCQkJIFZBTFVF UyAocmVzdWx0LmlkICsgMTAwKSIKK1BML3BnU1FMIGZ1bmN0aW9uIGlubGluZV9jb2RlX2Js b2NrIGxpbmUgOSBhdCBTUUwgc3RhdGVtZW50CistLQorLS0gVGVzdCBvYmZ1c2NhdGVkIGR5 bmFtaWMgc3FsIGZvciBjbGVhbiBsb2dnaW5nCitETyAkJAorREVDTEFSRQorCXRhYmxlX25h bWUgVEVYVCA9ICdkb190YWJsZSc7CitCRUdJTgorCUVYRUNVVEUgJ0NSRUFURSBUQUJMRSAn IHx8IHRhYmxlX25hbWUgfHwgJyAoIndlaXJkIG5hbWUiIElOVCknOworCUVYRUNVVEUgJ0RS T1AgdGFibGUgJyB8fCB0YWJsZV9uYW1lOworRU5EICQkOworTk9USUNFOiAgQVVESVQ6IFNF U1NJT04sMzQsMSxGVU5DVElPTixETywsLCJETyAkJAorREVDTEFSRQorCXRhYmxlX25hbWUg VEVYVCA9ICdkb190YWJsZSc7CitCRUdJTgorCUVYRUNVVEUgJ0NSRUFURSBUQUJMRSAnIHx8 IHRhYmxlX25hbWUgfHwgJyAoIiJ3ZWlyZCBuYW1lIiIgSU5UKSc7CisJRVhFQ1VURSAnRFJP UCB0YWJsZSAnIHx8IHRhYmxlX25hbWU7CitFTkQgJCQ7IgorTk9USUNFOiAgQVVESVQ6IFNF U1NJT04sMzQsMixEREwsQ1JFQVRFIFRBQkxFLFRBQkxFLHB1YmxpYy5kb190YWJsZSwiQ1JF QVRFIFRBQkxFIGRvX3RhYmxlICgiIndlaXJkIG5hbWUiIiBJTlQpIgorQ09OVEVYVDogIFNR TCBzdGF0ZW1lbnQgIkNSRUFURSBUQUJMRSBkb190YWJsZSAoIndlaXJkIG5hbWUiIElOVCki CitQTC9wZ1NRTCBmdW5jdGlvbiBpbmxpbmVfY29kZV9ibG9jayBsaW5lIDUgYXQgRVhFQ1VU RSBzdGF0ZW1lbnQKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDM0LDMsRERMLERST1AgVEFC TEUsVEFCTEUscHVibGljLmRvX3RhYmxlLERST1AgdGFibGUgZG9fdGFibGUKK0NPTlRFWFQ6 ICBTUUwgc3RhdGVtZW50ICJEUk9QIHRhYmxlIGRvX3RhYmxlIgorUEwvcGdTUUwgZnVuY3Rp b24gaW5saW5lX2NvZGVfYmxvY2sgbGluZSA2IGF0IEVYRUNVVEUgc3RhdGVtZW50CistLQor LS0gR2VuZXJhdGUgYW4gZXJyb3IgYW5kIG1ha2Ugc3VyZSB0aGUgc3RhY2sgZ2V0cyBjbGVh cmVkCitETyAkJAorQkVHSU4KKwlDUkVBVEUgVEFCTEUgYm9ndXMudGVzdF9ibG9jaworCSgK KwkJaWQgSU5UCisJKTsKK0VORCAkJDsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDM1LDEs RlVOQ1RJT04sRE8sLCwiRE8gJCQKK0JFR0lOCisJQ1JFQVRFIFRBQkxFIGJvZ3VzLnRlc3Rf YmxvY2sKKwkoCisJCWlkIElOVAorCSk7CitFTkQgJCQ7IgorRVJST1I6ICBzY2hlbWEgImJv Z3VzIiBkb2VzIG5vdCBleGlzdAorTElORSAxOiBDUkVBVEUgVEFCTEUgYm9ndXMudGVzdF9i bG9jaworICAgICAgICAgICAgICAgICAgICAgXgorUVVFUlk6ICBDUkVBVEUgVEFCTEUgYm9n dXMudGVzdF9ibG9jaworCSgKKwkJaWQgSU5UCisJKQorQ09OVEVYVDogIFBML3BnU1FMIGZ1 bmN0aW9uIGlubGluZV9jb2RlX2Jsb2NrIGxpbmUgMyBhdCBTUUwgc3RhdGVtZW50CistLQor LS0gVGVzdCBhbHRlciB0YWJsZSBzdGF0ZW1lbnRzCitBTFRFUiBUQUJMRSBwdWJsaWMudGVz dAorCURST1AgQ09MVU1OIGRlc2NyaXB0aW9uIDsKK05PVElDRTogIEFVRElUOiBTRVNTSU9O LDM2LDEsRERMLEFMVEVSIFRBQkxFLFRBQkxFIENPTFVNTixwdWJsaWMudGVzdC5kZXNjcmlw dGlvbiwiQUxURVIgVEFCTEUgcHVibGljLnRlc3QKKwlEUk9QIENPTFVNTiBkZXNjcmlwdGlv biA7IgorQUxURVIgVEFCTEUgcHVibGljLnRlc3QKKwlSRU5BTUUgVE8gdGVzdDI7CitOT1RJ Q0U6ICBBVURJVDogU0VTU0lPTiwzNywxLERETCxBTFRFUiBUQUJMRSxUQUJMRSxwdWJsaWMu dGVzdCwiQUxURVIgVEFCTEUgcHVibGljLnRlc3QKKwlSRU5BTUUgVE8gdGVzdDI7IgorQUxU RVIgVEFCTEUgcHVibGljLnRlc3QyCisJU0VUIFNDSEVNQSB0ZXN0OworTk9USUNFOiAgQVVE SVQ6IFNFU1NJT04sMzgsMSxEREwsQUxURVIgVEFCTEUsSU5ERVgscHVibGljLnRlc3RfcGtl eSwiQUxURVIgVEFCTEUgcHVibGljLnRlc3QyCisJU0VUIFNDSEVNQSB0ZXN0OyIKK0FMVEVS IFRBQkxFIHRlc3QudGVzdDIKKwlBREQgQ09MVU1OIGRlc2NyaXB0aW9uIFRFWFQ7CitOT1RJ Q0U6ICBBVURJVDogU0VTU0lPTiwzOSwxLERETCxBTFRFUiBUQUJMRSxUQUJMRSx0ZXN0LnRl c3QyLCJBTFRFUiBUQUJMRSB0ZXN0LnRlc3QyCisJQUREIENPTFVNTiBkZXNjcmlwdGlvbiBU RVhUOyIKK0FMVEVSIFRBQkxFIHRlc3QudGVzdDIKKwlEUk9QIENPTFVNTiBkZXNjcmlwdGlv bjsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDQwLDEsRERMLEFMVEVSIFRBQkxFLFRBQkxF IENPTFVNTix0ZXN0LnRlc3QyLmRlc2NyaXB0aW9uLCJBTFRFUiBUQUJMRSB0ZXN0LnRlc3Qy CisJRFJPUCBDT0xVTU4gZGVzY3JpcHRpb247IgorRFJPUCBUQUJMRSB0ZXN0LnRlc3QyOwor Tk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNDEsMSxEREwsRFJPUCBUQUJMRSxUQUJMRSx0ZXN0 LnRlc3QyLERST1AgVEFCTEUgdGVzdC50ZXN0MjsKK05PVElDRTogIEFVRElUOiBTRVNTSU9O LDQxLDEsRERMLERST1AgVEFCTEUsVEFCTEUgQ09OU1RSQUlOVCx0ZXN0X3BrZXkgb24gdGVz dC50ZXN0MixEUk9QIFRBQkxFIHRlc3QudGVzdDI7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lP Tiw0MSwxLERETCxEUk9QIFRBQkxFLElOREVYLHRlc3QudGVzdF9wa2V5LERST1AgVEFCTEUg dGVzdC50ZXN0MjsKKy0tCistLSBUZXN0IG11bHRpcGxlIHN0YXRlbWVudHMgd2l0aCBvbmUg c2VtaS1jb2xvbgorQ1JFQVRFIFNDSEVNQSBmb28KKwlDUkVBVEUgVEFCTEUgZm9vLmJhciAo aWQgaW50KQorCUNSRUFURSBUQUJMRSBmb28uYmF6IChpZCBpbnQpOworTk9USUNFOiAgQVVE SVQ6IFNFU1NJT04sNDIsMSxEREwsQ1JFQVRFIFRBQkxFLFRBQkxFLGZvby5iYXIsIkNSRUFU RSBTQ0hFTUEgZm9vCisJQ1JFQVRFIFRBQkxFIGZvby5iYXIgKGlkIGludCkKKwlDUkVBVEUg VEFCTEUgZm9vLmJheiAoaWQgaW50KTsiCitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw0Miwy LERETCxDUkVBVEUgVEFCTEUsVEFCTEUsZm9vLmJheiwiQ1JFQVRFIFNDSEVNQSBmb28KKwlD UkVBVEUgVEFCTEUgZm9vLmJhciAoaWQgaW50KQorCUNSRUFURSBUQUJMRSBmb28uYmF6IChp ZCBpbnQpOyIKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDQyLDMsRERMLENSRUFURSBTQ0hF TUEsLCwiQ1JFQVRFIFNDSEVNQSBmb28KKwlDUkVBVEUgVEFCTEUgZm9vLmJhciAoaWQgaW50 KQorCUNSRUFURSBUQUJMRSBmb28uYmF6IChpZCBpbnQpOyIKKy0tCistLSBUZXN0IGFnZ3Jl Z2F0ZQorQ1JFQVRFIEZVTkNUSU9OIHB1YmxpYy5pbnRfYWRkCisoCisJYSBJTlQsCisJYiBJ TlQKKykKKwlSRVRVUk5TIElOVCBMQU5HVUFHRSBwbHBnc3FsIEFTICQkCitCRUdJTgorCXJl dHVybiBhICsgYjsKK0VORCAkJDsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDQzLDEsRERM LENSRUFURSBGVU5DVElPTiwsLCJDUkVBVEUgRlVOQ1RJT04gcHVibGljLmludF9hZGQKKygK KwlhIElOVCwKKwliIElOVAorKQorCVJFVFVSTlMgSU5UIExBTkdVQUdFIHBscGdzcWwgQVMg JCQKK0JFR0lOCisJcmV0dXJuIGEgKyBiOworRU5EICQkOyIKK1NFTEVDVCBpbnRfYWRkKDEs IDEpOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNDQsMSxSRUFELFNFTEVDVCwsLCJTRUxF Q1QgaW50X2FkZCgxLCAxKTsiCitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw0NCwyLEZVTkNU SU9OLEVYRUNVVEUsRlVOQ1RJT04scHVibGljLmludF9hZGQsIlNFTEVDVCBpbnRfYWRkKDEs IDEpOyIKKyBpbnRfYWRkIAorLS0tLS0tLS0tCisgICAgICAgMgorKDEgcm93KQorCitDUkVB VEUgQUdHUkVHQVRFIHB1YmxpYy5zdW1fdGVzdChJTlQpIChTRlVOQz1wdWJsaWMuaW50X2Fk ZCwgU1RZUEU9SU5ULCBJTklUQ09ORD0nMCcpOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04s NDUsMSxEREwsQ1JFQVRFIEFHR1JFR0FURSwsLCJDUkVBVEUgQUdHUkVHQVRFIHB1YmxpYy5z dW1fdGVzdChJTlQpIChTRlVOQz1wdWJsaWMuaW50X2FkZCwgU1RZUEU9SU5ULCBJTklUQ09O RD0nMCcpOyIKK0FMVEVSIEFHR1JFR0FURSBwdWJsaWMuc3VtX3Rlc3QoaW50ZWdlcikgUkVO QU1FIFRPIHN1bV90ZXN0MjsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDQ2LDEsRERMLEFM VEVSIEFHR1JFR0FURSwsLEFMVEVSIEFHR1JFR0FURSBwdWJsaWMuc3VtX3Rlc3QoaW50ZWdl cikgUkVOQU1FIFRPIHN1bV90ZXN0MjsKKy0tCistLSBUZXN0IGNvbnZlcnNpb24KK0NSRUFU RSBDT05WRVJTSU9OIHB1YmxpYy5jb252ZXJzaW9uX3Rlc3QgRk9SICdTUUxfQVNDSUknIFRP ICdNVUxFX0lOVEVSTkFMJyBGUk9NIHBnX2NhdGFsb2cuYXNjaWlfdG9fbWljOworTk9USUNF OiAgQVVESVQ6IFNFU1NJT04sNDcsMSxEREwsQ1JFQVRFIENPTlZFUlNJT04sLCxDUkVBVEUg Q09OVkVSU0lPTiBwdWJsaWMuY29udmVyc2lvbl90ZXN0IEZPUiAnU1FMX0FTQ0lJJyBUTyAn TVVMRV9JTlRFUk5BTCcgRlJPTSBwZ19jYXRhbG9nLmFzY2lpX3RvX21pYzsKK0FMVEVSIENP TlZFUlNJT04gcHVibGljLmNvbnZlcnNpb25fdGVzdCBSRU5BTUUgVE8gY29udmVyc2lvbl90 ZXN0MjsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDQ4LDEsRERMLEFMVEVSIENPTlZFUlNJ T04sLCxBTFRFUiBDT05WRVJTSU9OIHB1YmxpYy5jb252ZXJzaW9uX3Rlc3QgUkVOQU1FIFRP IGNvbnZlcnNpb25fdGVzdDI7CistLQorLS0gVGVzdCBjcmVhdGUvYWx0ZXIvZHJvcCBkYXRh YmFzZQorQ1JFQVRFIERBVEFCQVNFIGNvbnRyaWJfcmVncmVzc2lvbl9wZ2F1ZGl0OworTk9U SUNFOiAgQVVESVQ6IFNFU1NJT04sNDksMSxEREwsQ1JFQVRFIERBVEFCQVNFLCwsQ1JFQVRF IERBVEFCQVNFIGNvbnRyaWJfcmVncmVzc2lvbl9wZ2F1ZGl0OworQUxURVIgREFUQUJBU0Ug Y29udHJpYl9yZWdyZXNzaW9uX3BnYXVkaXQgUkVOQU1FIFRPIGNvbnRyaWJfcmVncmVzc2lv bl9wZ2F1ZGl0MjsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDUwLDEsRERMLEFMVEVSIERB VEFCQVNFLCwsQUxURVIgREFUQUJBU0UgY29udHJpYl9yZWdyZXNzaW9uX3BnYXVkaXQgUkVO QU1FIFRPIGNvbnRyaWJfcmVncmVzc2lvbl9wZ2F1ZGl0MjsKK0RST1AgREFUQUJBU0UgY29u dHJpYl9yZWdyZXNzaW9uX3BnYXVkaXQyOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNTEs MSxEREwsRFJPUCBEQVRBQkFTRSwsLERST1AgREFUQUJBU0UgY29udHJpYl9yZWdyZXNzaW9u X3BnYXVkaXQyOworLS0KKy0tIFRlc3QgdGhhdCBmcmVlcyBhIG1lbW9yeSBjb250ZXh0IGVh cmxpZXIgdGhhbiBleHBlY3RlZAorQ1JFQVRFIFRBQkxFIGhvZ2UKKygKKwlpZCBpbnQKKyk7 CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw1MiwxLERETCxDUkVBVEUgVEFCTEUsVEFCTEUs cHVibGljLmhvZ2UsIkNSRUFURSBUQUJMRSBob2dlCisoCisJaWQgaW50CispOyIKK0NSRUFU RSBGVU5DVElPTiB0ZXN0KCkKKwlSRVRVUk5TIElOVCBBUyAkJAorREVDTEFSRQorCWN1cjEg Y3Vyc29yIGZvciBzZWxlY3QgKiBmcm9tIGhvZ2U7CisJdG1wIGludDsKK0JFR0lOCisJT1BF TiBjdXIxOworCUZFVENIIGN1cjEgaW50byB0bXA7CisJUkVUVVJOIHRtcDsKK0VORCAkJAor TEFOR1VBR0UgcGxwZ3NxbCA7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw1MywxLERETCxD UkVBVEUgRlVOQ1RJT04sLCwiQ1JFQVRFIEZVTkNUSU9OIHRlc3QoKQorCVJFVFVSTlMgSU5U IEFTICQkCitERUNMQVJFCisJY3VyMSBjdXJzb3IgZm9yIHNlbGVjdCAqIGZyb20gaG9nZTsK Kwl0bXAgaW50OworQkVHSU4KKwlPUEVOIGN1cjE7CisJRkVUQ0ggY3VyMSBpbnRvIHRtcDsK KwlSRVRVUk4gdG1wOworRU5EICQkCitMQU5HVUFHRSBwbHBnc3FsIDsiCitTRUxFQ1QgdGVz dCgpOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNTQsMSxSRUFELFNFTEVDVCwsLFNFTEVD VCB0ZXN0KCk7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw1NCwyLEZVTkNUSU9OLEVYRUNV VEUsRlVOQ1RJT04scHVibGljLnRlc3QsU0VMRUNUIHRlc3QoKTsKK05PVElDRTogIEFVRElU OiBTRVNTSU9OLDU0LDMsUkVBRCxTRUxFQ1QsVEFCTEUscHVibGljLmhvZ2Usc2VsZWN0ICog ZnJvbSBob2dlCitDT05URVhUOiAgUEwvcGdTUUwgZnVuY3Rpb24gdGVzdCgpIGxpbmUgNiBh dCBPUEVOCisgdGVzdCAKKy0tLS0tLQorICAgICAKKygxIHJvdykKKworLS0KKy0tIERlbGV0 ZSBhbGwgcm93cyB0aGVuIGRlbGV0ZSAxIHJvdworU0VUIHBnX2F1ZGl0LmxvZyA9ICd3cml0 ZSc7CitTRVQgcGdfYXVkaXQucm9sZSA9ICdhdWRpdG9yJzsKK2NyZWF0ZSB0YWJsZSBiYXIK KygKKwljb2wgaW50CispOworZ3JhbnQgZGVsZXRlCisgICBvbiBiYXIKKyAgIHRvIGF1ZGl0 b3I7CitpbnNlcnQgaW50byBiYXIgKGNvbCkKKwkJIHZhbHVlcyAoMSk7CitOT1RJQ0U6ICBB VURJVDogU0VTU0lPTiw1NSwxLFdSSVRFLElOU0VSVCxUQUJMRSxwdWJsaWMuYmFyLCJpbnNl cnQgaW50byBiYXIgKGNvbCkKKwkJIHZhbHVlcyAoMSk7IgorZGVsZXRlIGZyb20gYmFyOwor Tk9USUNFOiAgQVVESVQ6IE9CSkVDVCw1NiwxLFdSSVRFLERFTEVURSxUQUJMRSxwdWJsaWMu YmFyLGRlbGV0ZSBmcm9tIGJhcjsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDU2LDEsV1JJ VEUsREVMRVRFLFRBQkxFLHB1YmxpYy5iYXIsZGVsZXRlIGZyb20gYmFyOworaW5zZXJ0IGlu dG8gYmFyIChjb2wpCisJCSB2YWx1ZXMgKDEpOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04s NTcsMSxXUklURSxJTlNFUlQsVEFCTEUscHVibGljLmJhciwiaW5zZXJ0IGludG8gYmFyIChj b2wpCisJCSB2YWx1ZXMgKDEpOyIKK2RlbGV0ZSBmcm9tIGJhcgorIHdoZXJlIGNvbCA9IDE7 CitOT1RJQ0U6ICBBVURJVDogT0JKRUNULDU4LDEsV1JJVEUsREVMRVRFLFRBQkxFLHB1Ymxp Yy5iYXIsImRlbGV0ZSBmcm9tIGJhcgorIHdoZXJlIGNvbCA9IDE7IgorTk9USUNFOiAgQVVE SVQ6IFNFU1NJT04sNTgsMSxXUklURSxERUxFVEUsVEFCTEUscHVibGljLmJhciwiZGVsZXRl IGZyb20gYmFyCisgd2hlcmUgY29sID0gMTsiCitkcm9wIHRhYmxlIGJhcjsKZGlmZiAtLWdp dCBhL2NvbnRyaWIvcGdfYXVkaXQvcGdfYXVkaXQtLTEuMC4wLnNxbCBiL2NvbnRyaWIvcGdf YXVkaXQvcGdfYXVkaXQtLTEuMC4wLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi45ZDllZTgzCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19hdWRpdC9w Z19hdWRpdC0tMS4wLjAuc3FsCkBAIC0wLDAgKzEsMjIgQEAKKy8qIHBnX2F1ZGl0L3BnX2F1 ZGl0LS0xLjAuMC5zcWwgKi8KKworLS0gY29tcGxhaW4gaWYgc2NyaXB0IGlzIHNvdXJjZWQg aW4gcHNxbCwgcmF0aGVyIHRoYW4gdmlhIENSRUFURSBFWFRFTlNJT04KK1xlY2hvIFVzZSAi Q1JFQVRFIEVYVEVOU0lPTiBwZ19hdWRpdCIgdG8gbG9hZCB0aGlzIGZpbGUuXHF1aXQKKwor Q1JFQVRFIEZVTkNUSU9OIHBnX2F1ZGl0X2RkbF9jb21tYW5kX2VuZCgpCisJUkVUVVJOUyBl dmVudF90cmlnZ2VyCisJTEFOR1VBR0UgQworCUFTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdf YXVkaXRfZGRsX2NvbW1hbmRfZW5kJzsKKworQ1JFQVRFIEVWRU5UIFRSSUdHRVIgcGdfYXVk aXRfZGRsX2NvbW1hbmRfZW5kCisJT04gZGRsX2NvbW1hbmRfZW5kCisJRVhFQ1VURSBQUk9D RURVUkUgcGdfYXVkaXRfZGRsX2NvbW1hbmRfZW5kKCk7CisKK0NSRUFURSBGVU5DVElPTiBw Z19hdWRpdF9zcWxfZHJvcCgpCisJUkVUVVJOUyBldmVudF90cmlnZ2VyCisJTEFOR1VBR0Ug QworCUFTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfYXVkaXRfc3FsX2Ryb3AnOworCitDUkVB VEUgRVZFTlQgVFJJR0dFUiBwZ19hdWRpdF9zcWxfZHJvcAorCU9OIHNxbF9kcm9wCisJRVhF Q1VURSBQUk9DRURVUkUgcGdfYXVkaXRfc3FsX2Ryb3AoKTsKZGlmZiAtLWdpdCBhL2NvbnRy aWIvcGdfYXVkaXQvcGdfYXVkaXQuYyBiL2NvbnRyaWIvcGdfYXVkaXQvcGdfYXVkaXQuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjg2Y2I2Ci0tLSAvZGV2L251 bGwKKysrIGIvY29udHJpYi9wZ19hdWRpdC9wZ19hdWRpdC5jCkBAIC0wLDAgKzEsMTg0MyBA QAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHBnX2F1ZGl0LmMKKyAqCisgKiBB biBhdWRpdGluZyBleHRlbnNpb24gZm9yIFBvc3RncmVTUUwuIEltcHJvdmVzIG9uIHN0YW5k YXJkIHN0YXRlbWVudCBsb2dnaW5nCisgKiBieSBhZGRpbmcgbW9yZSBsb2dnaW5nIGNsYXNz ZXMsIG9iamVjdCBsZXZlbCBsb2dnaW5nLCBhbmQgcHJvdmlkaW5nCisgKiBmdWxseS1xdWFs aWZpZWQgb2JqZWN0IG5hbWVzIGZvciBhbGwgRE1MIGFuZCBtYW55IERETCBzdGF0ZW1lbnRz IChTZWUKKyAqIHBnX2F1ZGl0LnNnbWwgZm9yIGRldGFpbHMpLgorICoKKyAqIENvcHlyaWdo dCAoYykgMjAxNC0yMDE1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAor ICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkJICBjb250cmliL3BnX2F1ZGl0L3BnX2F1ZGl0 LmMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jl cy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgorI2luY2x1ZGUgImFj Y2Vzcy9zeXNhdHRyLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKKyNpbmNsdWRlICJj YXRhbG9nL2NhdGFsb2cuaCIKKyNpbmNsdWRlICJjYXRhbG9nL29iamVjdGFjY2Vzcy5oIgor I2luY2x1ZGUgImNhdGFsb2cvcGdfY2xhc3MuaCIKKyNpbmNsdWRlICJjYXRhbG9nL25hbWVz cGFjZS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2RiY29tbWFuZHMuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX3Byb2MuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9ldmVudF90cmlnZ2VyLmgi CisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKKyNpbmNsdWRlICJleGVjdXRvci9z cGkuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJsaWJwcS9hdXRoLmgi CisjaW5jbHVkZSAibm9kZXMvbm9kZXMuaCIKKyNpbmNsdWRlICJ0Y29wL3V0aWxpdHkuaCIK KyNpbmNsdWRlICJ1dGlscy9hY2wuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgor I2luY2x1ZGUgInV0aWxzL2d1Yy5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgor I2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMvcmVsLmgiCisj aW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAu aCIKKworUEdfTU9EVUxFX01BR0lDOworCit2b2lkIF9QR19pbml0KHZvaWQpOworCisvKgor ICogRXZlbnQgdHJpZ2dlciBwcm90b3R5cGVzCisgKi8KK0RhdHVtIHBnX2F1ZGl0X2RkbF9j b21tYW5kX2VuZChQR19GVU5DVElPTl9BUkdTKTsKK0RhdHVtIHBnX2F1ZGl0X3NxbF9kcm9w KFBHX0ZVTkNUSU9OX0FSR1MpOworCitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2F1ZGl0X2Rk bF9jb21tYW5kX2VuZCk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2F1ZGl0X3NxbF9kcm9w KTsKKworLyoKKyAqIGF1ZGl0Um9sZSBpcyB0aGUgc3RyaW5nIHZhbHVlIG9mIHRoZSBwZ19h dWRpdC5yb2xlIEdVQywgd2hpY2ggY29udGFpbnMgdGhlCisgKiByb2xlIGZvciBncmFudC1i YXNlZCBhdWRpdGluZy4KKyAqLworY2hhciAqYXVkaXRSb2xlID0gTlVMTDsKKworLyoKKyAq IGF1ZGl0TG9nIGlzIHRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlIHBnX2F1ZGl0LmxvZyBHVUMs IGUuZy4gInJlYWQsIHdyaXRlLCBkZGwiCisgKiAoaXQncyBub3QgdXNlZCBieSB0aGUgbW9k dWxlIGJ1dCBpcyByZXF1aXJlZCBieSBEZWZpbmVDdXN0b21TdHJpbmdWYXJpYWJsZSkuCisg KiBFYWNoIHRva2VuIGNvcnJlc3BvbmRzIHRvIGEgZmxhZyBpbiBlbnVtIExvZ0NsYXNzIGJl bG93LiBXZSBjb252ZXJ0IHRoZSBsaXN0CisgKiBvZiB0b2tlbnMgaW50byBhIGJpdG1hcCBp biBhdWRpdExvZ0JpdG1hcCBmb3IgaW50ZXJuYWwgdXNlLgorICovCitjaGFyICphdWRpdExv ZyA9IE5VTEw7CitzdGF0aWMgdWludDY0IGF1ZGl0TG9nQml0bWFwID0gMDsKKworLyoKKyAq IGF1ZGl0TG9nUGFyYW1ldGVyIGNvbnRyb2xzIHdoZXRoZXIgcGFyYW1ldGVycyBwYXNzZWQg d2l0aCB0aGUgc3RhdGVtZW50IGFyZQorICogaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy4K KyAqLworYm9vbCBhdWRpdExvZ1BhcmFtZXRlciA9IGZhbHNlOworCisvKgorICogYXVkaXRM b2dSZWxhdGlvbiBjb250cm9scyB3aGV0aGVyIGFsbCByZWxhdGlvbnMgYXJlIGxvZ2dlZCBm b3IgUkVBRCBhbmQKKyAqIFdSSVRFIGNsYXNzZXMgZHVyaW5nIHNlc3Npb24gbG9nZ2luZy4K KyAqLworYm9vbCBhdWRpdExvZ1JlbGF0aW9uID0gZmFsc2U7CisKKy8qCisgKiBhdWRpdExv Z0NhdGFsb2cgYWxsb3dzIGxvZ2dpbmcgb2YgcmVsYXRpb25zIGluIHBnX2NhdGFsb2cgd2hl biBhIHF1ZXJ5CisgKiBjb250YWlucyAqYWxsKiBwZ19jYXRhbG9nIHJlbGF0aW9ucy4KKyAq LworYm9vbCBhdWRpdExvZ0NhdGFsb2cgPSBmYWxzZTsKKworLyoKKyAqIGF1ZGl0TG9nTm90 aWNlIHJhaXNlcyBhIG5vdGljZSBhcyB3ZWxsIGFzIGxvZ2dpbmcgdmlhIHRoZSBzdGFuZGFy ZCBmYWNpbGl0eS4KKyAqIFRoaXMgaXMgcHJpbWFyaWx5IGZvciB0aGUgYmVuZWZpdCBvZiB0 ZXN0aW5nLgorICovCitib29sIGF1ZGl0TG9nTm90aWNlID0gZmFsc2U7CisKKy8qCisgKiBT dHJpbmcgY29uc3RhbnRzIGZvciBhdWRpdCB0eXBlcyAtIHVzZWQgd2hlbiBsb2dnaW5nIHRv IGRpc3Rpbmd1aXNoIHNlc3Npb24KKyAqIHZzLiBvYmplY3QgYXVkaXRpbmcuCisgKi8KKyNk ZWZpbmUgQVVESVRfVFlQRV9PQkpFQ1QJIk9CSkVDVCIKKyNkZWZpbmUgQVVESVRfVFlQRV9T RVNTSU9OCSJTRVNTSU9OIgorCisvKgorICogU3RyaW5nIGNvbnN0YW50cyBmb3IgbG9nIGNs YXNzZXMgLSB1c2VkIHdoZW4gcHJvY2Vzc2luZyB0b2tlbnMgaW4gdGhlCisgKiBwZ19hdWRp dC5sb2cgR1VDLgorICovCisjZGVmaW5lIENMQVNTX0RETAkJCSJEREwiCisjZGVmaW5lIENM QVNTX0ZVTkNUSU9OCQkiRlVOQ1RJT04iCisjZGVmaW5lIENMQVNTX01JU0MJCQkiTUlTQyIK KyNkZWZpbmUgQ0xBU1NfUkVBRAkJCSJSRUFEIgorI2RlZmluZSBDTEFTU19ST0xFCQkJIlJP TEUiCisjZGVmaW5lIENMQVNTX1dSSVRFCQkJIldSSVRFIgorCisjZGVmaW5lIENMQVNTX0FM TAkJCSJBTEwiCisjZGVmaW5lIENMQVNTX05PTkUJCQkiTk9ORSIKKworLyogTG9nIGNsYXNz IGVudW0gdXNlZCB0byByZXByZXNlbnQgYml0cyBpbiBhdWRpdExvZ0JpdG1hcCAqLworZW51 bSBMb2dDbGFzcworeworCUxPR19OT05FID0gMCwKKworCS8qIERETDogQ1JFQVRFL0RST1Av QUxURVIgKi8KKwlMT0dfRERMID0gKDEgPDwgMSksCisKKwkvKiBGdW5jdGlvbiBleGVjdXRp b24gKi8KKwlMT0dfRlVOQ1RJT04gPSAoMSA8PCAyKSwKKworCS8qIFN0YXRlbWVudHMgbm90 IGNvdmVyZWQgYnkgYW5vdGhlciBjbGFzcyAqLworCUxPR19NSVNDID0gKDEgPDwgMyksCisK KwkvKiBTRUxFQ1QgKi8KKwlMT0dfUkVBRCA9ICgxIDw8IDQpLAorCisJLyogR1JBTlQsIFJF Vk9LRSwgQ1JFQVRFL0FMVEVSL0RST1AgUk9MRSAqLworCUxPR19ST0xFID0gKDEgPDwgNSks CisKKwkvKiBJTlNFUlQsIFVQREFURSwgREVMRVRFLCBUUlVOQ0FURSAqLworCUxPR19XUklU RSA9ICgxIDw8IDYpLAorCisJLyogQWJzb2x1dGVseSBldmVyeXRoaW5nICovCisJTE9HX0FM TCA9IH4odWludDY0KTAKK307CisKKy8qIFN0cmluZyBjb25zdGFudHMgZm9yIGxvZ2dpbmcg Y29tbWFuZHMgKi8KKyNkZWZpbmUgQ09NTUFORF9ERUxFVEUJCSJERUxFVEUiCisjZGVmaW5l IENPTU1BTkRfRVhFQ1VURQkJIkVYRUNVVEUiCisjZGVmaW5lIENPTU1BTkRfSU5TRVJUCQki SU5TRVJUIgorI2RlZmluZSBDT01NQU5EX1VQREFURQkJIlVQREFURSIKKyNkZWZpbmUgQ09N TUFORF9TRUxFQ1QJCSJTRUxFQ1QiCisKKyNkZWZpbmUgQ09NTUFORF9BTFRFUl9ST0xFCSJB TFRFUiBST0xFIgorI2RlZmluZSBDT01NQU5EX0RST1BfUk9MRQkiQ1JFQVRFIFJPTEUiCisK KyNkZWZpbmUgQ09NTUFORF9VTktOT1dOCQkiVU5LTk9XTiIKKworLyogU3RyaW5nIGNvbnN0 YW50cyBmb3IgbG9nZ2luZyBvYmplY3QgdHlwZXMgKi8KKyNkZWZpbmUgT0JKRUNUX1RZUEVf Q09NUE9TSVRFX1RZUEUJIkNPTVBPU0lURSBUWVBFIgorI2RlZmluZSBPQkpFQ1RfVFlQRV9G T1JFSUdOX1RBQkxFCSJGT1JFSUdOIFRBQkxFIgorI2RlZmluZSBPQkpFQ1RfVFlQRV9GVU5D VElPTgkJIkZVTkNUSU9OIgorI2RlZmluZSBPQkpFQ1RfVFlQRV9JTkRFWAkJCSJJTkRFWCIK KyNkZWZpbmUgT0JKRUNUX1RZUEVfVEFCTEUJCQkiVEFCTEUiCisjZGVmaW5lIE9CSkVDVF9U WVBFX1RPQVNUVkFMVUUJCSJUT0FTVFZBTFVFIgorI2RlZmluZSBPQkpFQ1RfVFlQRV9NQVRW SUVXCQkJIk1BVEVSSUFMSVpFRCBWSUVXIgorI2RlZmluZSBPQkpFQ1RfVFlQRV9TRVFVRU5D RQkJIlNFUVVFTkNFIgorI2RlZmluZSBPQkpFQ1RfVFlQRV9WSUVXCQkJIlZJRVciCisKKyNk ZWZpbmUgT0JKRUNUX1RZUEVfVU5LTk9XTgkJCSJVTktOT1dOIgorCisvKgorICogQW4gQXVk aXRFdmVudCByZXByZXNlbnRzIGFuIG9wZXJhdGlvbiB0aGF0IHBvdGVudGlhbGx5IGFmZmVj dHMgYSBzaW5nbGUKKyAqIG9iamVjdC4gSWYgYSBzdGF0ZW1lbnQgYWZmZWN0cyBtdWx0aXBs ZSBvYmplY3RzIG11bHRpcGxlIEF1ZGl0RXZlbnRzIG11c3QgYmUKKyAqIGNyZWF0ZWQgdG8g cmVwcmVzZW50IGl0LgorICovCit0eXBlZGVmIHN0cnVjdAoreworCWludDY0IHN0YXRlbWVu dElkOworCWludDY0IHN1YnN0YXRlbWVudElkOworCisJTG9nU3RtdExldmVsIGxvZ1N0bXRM ZXZlbDsKKwlOb2RlVGFnIGNvbW1hbmRUYWc7CisJY29uc3QgY2hhciAqY29tbWFuZDsKKwlj b25zdCBjaGFyICpvYmplY3RUeXBlOworCWNoYXIgKm9iamVjdE5hbWU7CisJY29uc3QgY2hh ciAqY29tbWFuZFRleHQ7CisJUGFyYW1MaXN0SW5mbyBwYXJhbUxpc3Q7CisKKwlib29sIGdy YW50ZWQ7CisJYm9vbCBsb2dnZWQ7Cit9IEF1ZGl0RXZlbnQ7CisKKy8qCisgKiBBIHNpbXBs ZSBGSUZPIHF1ZXVlIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc3RhY2sgb2YgYXVk aXQgZXZlbnRzLgorICovCit0eXBlZGVmIHN0cnVjdCBBdWRpdEV2ZW50U3RhY2tJdGVtCit7 CisJc3RydWN0IEF1ZGl0RXZlbnRTdGFja0l0ZW0gKm5leHQ7CisKKwlBdWRpdEV2ZW50IGF1 ZGl0RXZlbnQ7CisKKwlpbnQ2NCBzdGFja0lkOworCisJTWVtb3J5Q29udGV4dCBjb250ZXh0 QXVkaXQ7CisJTWVtb3J5Q29udGV4dENhbGxiYWNrIGNvbnRleHRDYWxsYmFjazsKK30gQXVk aXRFdmVudFN0YWNrSXRlbTsKKworQXVkaXRFdmVudFN0YWNrSXRlbSAqYXVkaXRFdmVudFN0 YWNrID0gTlVMTDsKKworLyoKKyAqIFRyYWNrIHdoZW4gYW4gaW50ZXJuYWwgc3RhdGVtZW50 IGlzIHJ1bm5pbmcgc28gaXQgaXMgbm90IGxvZ2dlZAorICovCitzdGF0aWMgYm9vbCBpbnRl cm5hbFN0YXRlbWVudCA9IGZhbHNlOworCisvKgorICogVHJhY2sgcnVubmluZyB0b3RhbCBm b3Igc3RhdGVtZW50cyBhbmQgc3Vic3RhdGVtZW50cyBhbmQgd2hldGhlciBvciBub3QKKyAq IGFueXRoaW5nIGhhcyBiZWVuIGxvZ2dlZCBzaW5jZSB0aGlzIHN0YXRlbWVudCBiZWdhbi4K KyAqLworc3RhdGljIGludDY0IHN0YXRlbWVudFRvdGFsID0gMDsKK3N0YXRpYyBpbnQ2NCBz dWJzdGF0ZW1lbnRUb3RhbCA9IDA7CitzdGF0aWMgaW50NjQgc3RhY2tUb3RhbCA9IDA7CisK K3N0YXRpYyBib29sIHN0YXRlbWVudExvZ2dlZCA9IGZhbHNlOworCisvKgorICogU3RhY2sg ZnVuY3Rpb25zCisgKgorICogQXVkaXQgZXZlbnRzIGNhbiBnbyBkb3duIHRvIG11bHRpcGxl IGxldmVscyBzbyBhIHN0YWNrIGlzIG1haW50YWluZWQgdG8ga2VlcAorICogdHJhY2sgb2Yg dGhlbS4KKyAqLworCisvKgorICogUmVzcG9uZCB0byBjYWxsYmFja3MgcmVnaXN0ZXJlZCB3 aXRoIE1lbW9yeUNvbnRleHRSZWdpc3RlclJlc2V0Q2FsbGJhY2soKS4KKyAqIFJlbW92ZXMg dGhlIGV2ZW50KHMpIG9mZiB0aGUgc3RhY2sgdGhhdCBoYXZlIGJlY29tZSBvYnNvbGV0ZSBv bmNlIHRoZQorICogTWVtb3J5Q29udGV4dCBoYXMgYmVlbiBmcmVlZC4gIFRoZSBjYWxsYmFj ayBzaG91bGQgYWx3YXlzIGJlIGZyZWVpbmcgdGhlIHRvcAorICogb2YgdGhlIHN0YWNrLCBi dXQgdGhlIGNvZGUgaXMgdG9sZXJhbnQgb2Ygb3V0LW9mLW9yZGVyIGNhbGxiYWNrcy4KKyAq Lworc3RhdGljIHZvaWQKK3N0YWNrX2ZyZWUodm9pZCAqc3RhY2tGcmVlKQoreworCUF1ZGl0 RXZlbnRTdGFja0l0ZW0gKm5leHRJdGVtID0gYXVkaXRFdmVudFN0YWNrOworCisJLyogT25s eSBwcm9jZXNzIGlmIHRoZSBzdGFjayBjb250YWlucyBpdGVtcyAqLworCXdoaWxlIChuZXh0 SXRlbSAhPSBOVUxMKQorCXsKKwkJLyogQ2hlY2sgaWYgdGhpcyBpdGVtIG1hdGNoZXMgdGhl IGl0ZW0gdG8gYmUgZnJlZWQgKi8KKwkJaWYgKG5leHRJdGVtID09IChBdWRpdEV2ZW50U3Rh Y2tJdGVtICopc3RhY2tGcmVlKQorCQl7CisJCQkvKiBNb3ZlIHRvcCBvZiBzdGFjayB0byB0 aGUgaXRlbSBhZnRlciB0aGUgZnJlZWQgaXRlbSAqLworCQkJYXVkaXRFdmVudFN0YWNrID0g bmV4dEl0ZW0tPm5leHQ7CisKKwkJCS8qIElmIHRoZSBzdGFjayBpcyBub3QgZW1wdHkgKi8K KwkJCWlmIChhdWRpdEV2ZW50U3RhY2sgPT0gTlVMTCkKKwkJCXsKKwkJCQkvKiBSZXNldCBp bnRlcm5hbCBzdGF0ZW1lbnQgaW4gY2FzZSBvZiBlcnJvciAqLworCQkJCWludGVybmFsU3Rh dGVtZW50ID0gZmFsc2U7CisKKwkJCQkvKiBSZXNldCBzdWIgc3RhdGVtZW50IHRvdGFsICov CisJCQkJc3Vic3RhdGVtZW50VG90YWwgPSAwOworCisJCQkJLyogUmVzZXQgc3RhdGVtZW50 IGxvZ2dlZCBmbGFnIHRvdGFsICovCisJCQkJc3RhdGVtZW50TG9nZ2VkID0gZmFsc2U7CisJ CQl9CisKKwkJCXJldHVybjsKKwkJfQorCisJCS8qIFN0aWxsIGxvb2tpbmcsIHRlc3QgdGhl IG5leHQgaXRlbSAqLworCQluZXh0SXRlbSA9IG5leHRJdGVtLT5uZXh0OworCX0KK30KKwor LyoKKyAqIFB1c2ggYSBuZXcgYXVkaXQgZXZlbnQgb250byB0aGUgc3RhY2sgYW5kIGNyZWF0 ZSBhIG5ldyBtZW1vcnkgY29udGV4dCB0bworICogc3RvcmUgaXQuCisgKi8KK3N0YXRpYyBB dWRpdEV2ZW50U3RhY2tJdGVtICoKK3N0YWNrX3B1c2goKQoreworCU1lbW9yeUNvbnRleHQg Y29udGV4dEF1ZGl0OworCU1lbW9yeUNvbnRleHQgY29udGV4dE9sZDsKKwlBdWRpdEV2ZW50 U3RhY2tJdGVtICpzdGFja0l0ZW07CisKKwkvKiBDcmVhdGUgYSBuZXcgbWVtb3J5IGNvbnRl eHQgKi8KKwljb250ZXh0QXVkaXQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1l bW9yeUNvbnRleHQsCisJCQkJCQkJCQkJICJwZ19hdWRpdCBzdGFjayBjb250ZXh0IiwKKwkJ CQkJCQkJCQkgQUxMT0NTRVRfREVGQVVMVF9NSU5TSVpFLAorCQkJCQkJCQkJCSBBTExPQ1NF VF9ERUZBVUxUX0lOSVRTSVpFLAorCQkJCQkJCQkJCSBBTExPQ1NFVF9ERUZBVUxUX01BWFNJ WkUpOworCWNvbnRleHRPbGQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oY29udGV4dEF1ZGl0 KTsKKworCS8qIEFsbG9jYXRlIHRoZSBzdGFjayBpdGVtICovCisJc3RhY2tJdGVtID0gcGFs bG9jMChzaXplb2YoQXVkaXRFdmVudFN0YWNrSXRlbSkpOworCisJLyogU3RvcmUgbWVtb3J5 IGNvbnRleHRzICovCisJc3RhY2tJdGVtLT5jb250ZXh0QXVkaXQgPSBjb250ZXh0QXVkaXQ7 CisKKwkvKiBJZiBpdGVtIGFscmVhZHkgb24gc3RhY2sgdGhlbiBwdXNoIGl0IGRvd24gKi8K KwlpZiAoYXVkaXRFdmVudFN0YWNrICE9IE5VTEwpCisJCXN0YWNrSXRlbS0+bmV4dCA9IGF1 ZGl0RXZlbnRTdGFjazsKKwllbHNlCisJCXN0YWNrSXRlbS0+bmV4dCA9IE5VTEw7CisKKwkv KgorCSAqIENyZWF0ZSB0aGUgdW5pcXVlIHN0YWNrSWQgLSB1c2VkIHRvIGtlZXAgdGhlIHN0 YWNrIHNhbmUgd2hlbiBtZW1vcnkKKwkgKiBjb250ZXh0cyBhcmUgZnJlZWQgdW5leHBlY3Rl ZGx5LgorCSAqLworCXN0YWNrSXRlbS0+c3RhY2tJZCA9ICsrc3RhY2tUb3RhbDsKKworCS8q CisJICogU2V0dXAgYSBjYWxsYmFjayBpbiBjYXNlIGFuIGVycm9yIGhhcHBlbnMuICBzdGFj a19mcmVlKCkgd2lsbCB0cnVuY2F0ZQorCSAqIHRoZSBzdGFjayBhdCB0aGlzIGl0ZW0uCisJ ICovCisJc3RhY2tJdGVtLT5jb250ZXh0Q2FsbGJhY2suZnVuYyA9IHN0YWNrX2ZyZWU7CisJ c3RhY2tJdGVtLT5jb250ZXh0Q2FsbGJhY2suYXJnID0gKHZvaWQgKilzdGFja0l0ZW07CisJ TWVtb3J5Q29udGV4dFJlZ2lzdGVyUmVzZXRDYWxsYmFjayhjb250ZXh0QXVkaXQsCisJCQkJ CQkJCQkgICAmc3RhY2tJdGVtLT5jb250ZXh0Q2FsbGJhY2spOworCisJLyogUHVzaCBpdGVt IG9uIHRoZSBzdGFjayAqLworCWF1ZGl0RXZlbnRTdGFjayA9IHN0YWNrSXRlbTsKKworCS8q IFJldHVybiB0byB0aGUgb2xkIG1lbW9yeSBjb250ZXh0ICovCisJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKGNvbnRleHRPbGQpOworCisJLyogUmV0dXJuIHRoZSBzdGFjayBpdGVtICovCisJ cmV0dXJuIHN0YWNrSXRlbTsKK30KKworLyoKKyAqIFBvcCBhbiBhdWRpdCBldmVudCBmcm9t IHRoZSBzdGFjayBieSBkZWxldGluZyB0aGUgbWVtb3J5IGNvbnRleHQgdGhhdAorICogY29u dGFpbnMgaXQuICBUaGUgY2FsbGJhY2sgdG8gc3RhY2tfZnJlZSgpIGRvZXMgdGhlIGFjdHVh bCBwb3AuCisgKi8KK3N0YXRpYyB2b2lkCitzdGFja19wb3AoaW50NjQgc3RhY2tJZCkKK3sK KwkvKiBNYWtlIHN1cmUgd2hhdCB3ZSB3YW50IHRvIGRlbGV0ZSBpcyBhdCB0aGUgdG9wIG9m IHRoZSBzdGFjayAqLworCWlmIChhdWRpdEV2ZW50U3RhY2sgIT0gTlVMTCAmJiBhdWRpdEV2 ZW50U3RhY2stPnN0YWNrSWQgPT0gc3RhY2tJZCkKKwl7CisJCU1lbW9yeUNvbnRleHREZWxl dGUoYXVkaXRFdmVudFN0YWNrLT5jb250ZXh0QXVkaXQpOworCX0KKwllbHNlCisJeworCQll bG9nKEVSUk9SLCAicGdfYXVkaXQgc3RhY2sgaXRlbSAlbGQgbm90IGZvdW5kIG9uIHRvcCAt IGNhbm5vdCBwb3AiLAorCQkJCQlzdGFja0lkKTsKKwl9Cit9CisKKy8qCisgKiBDaGVjayB0 aGF0IGFuIGl0ZW0gaXMgb24gdGhlIHN0YWNrLiAgSWYgbm90IGFuIGVycm9yIHdpbGwgYmUg cmFpc2VkIHNpbmNlCisgKiB0aGlzIGlzIGEgYmFkIHN0YXRlIHRvIGJlIGluLCBhbmQgaXQg bWlnaHQgbWVhbiBhdWRpdCByZWNvcmRzIGFyZSBiZWluZworICogbG9zdC4KKyAqLworc3Rh dGljIHZvaWQKK3N0YWNrX3ZhbGlkKGludDY0IHN0YWNrSWQpCit7CisJQXVkaXRFdmVudFN0 YWNrSXRlbSAqbmV4dEl0ZW0gPSBhdWRpdEV2ZW50U3RhY2s7CisKKwlpZiAobmV4dEl0ZW0g PT0gTlVMTCkKKwl7CisJCWVsb2coRVJST1IsICJwZ19hdWRpdCBzdGFjayBpdGVtICVsZCBu b3QgZm91bmQgLSBzdGFjayBpcyBlbXB0eSIsCisJCQkJCXN0YWNrSWQpOworCX0KKworCS8q IE9ubHkgcHJvY2VzcyBpZiB0aGUgc3RhY2sgY29udGFpbnMgaXRlbXMgKi8KKwl3aGlsZSAo bmV4dEl0ZW0gIT0gTlVMTCkKKwl7CisJCS8qIENoZWNrIGlmIHRoaXMgaXRlbSBtYXRjaGVz IHRoZSBpdGVtIHNlYXJjaGVkIGZvciAqLworCQlpZiAobmV4dEl0ZW0tPnN0YWNrSWQgPT0g c3RhY2tJZCkKKwkJeworCQkJcmV0dXJuOworCQl9CisKKwkJLyogU3RpbGwgbG9va2luZywg dGVzdCB0aGUgbmV4dCBpdGVtICovCisJCW5leHRJdGVtID0gbmV4dEl0ZW0tPm5leHQ7CisJ fQorCisJZWxvZyhFUlJPUiwgInBnX2F1ZGl0IHN0YWNrIGl0ZW0gJWxkIG5vdCBmb3VuZCAt IHRvcCBvZiBzdGFjayBpcyAlbGQiLAorCQkJCXN0YWNrSWQsIGF1ZGl0RXZlbnRTdGFjay0+ c3RhY2tJZCk7Cit9CisKKy8qCisgKiBBcHBlbmRzIGEgcHJvcGVybHkgcXVvdGVkIENTViBm aWVsZCB0byBTdHJpbmdJbmZvLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX3ZhbGlkX2Nz dihTdHJpbmdJbmZvRGF0YSAqYnVmZmVyLCBjb25zdCBjaGFyICphcHBlbmRTdHIpCit7CisJ Y29uc3QgY2hhciAqcENoYXI7CisKKwkvKgorCSAqIElmIHRoZSBhcHBlbmQgc3RyaW5nIGlz IG51bGwgdGhlbiByZXR1cm4uICBOVUxMIGZpZWxkcyBhcmUgbm90IHF1b3RlZAorCSAqIGlu IENTVgorCSAqLworCWlmIChhcHBlbmRTdHIgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyog T25seSBmb3JtYXQgZm9yIENTViBpZiBhcHBlbmRTdHIgY29udGFpbnM6ICIsIGNvbW1hLCBc biwgXHIgKi8KKwlpZiAoc3Ryc3RyKGFwcGVuZFN0ciwgIiwiKSB8fCBzdHJzdHIoYXBwZW5k U3RyLCAiXCIiKSB8fAorCQlzdHJzdHIoYXBwZW5kU3RyLCAiXG4iKSB8fCBzdHJzdHIoYXBw ZW5kU3RyLCAiXHIiKSkKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oYnVmZmVy LCAnIicpOworCisJCWZvciAocENoYXIgPSBhcHBlbmRTdHI7ICpwQ2hhcjsgcENoYXIrKykK KwkJeworCQkJaWYgKCpwQ2hhciA9PSAnIicpIC8qIGRvdWJsZSBzaW5nbGUgcXVvdGVzICov CisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybyhidWZmZXIsICpwQ2hhcik7CisKKwkJ CWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oYnVmZmVyLCAqcENoYXIpOworCQl9CisKKwkJ YXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybyhidWZmZXIsICciJyk7CisJfQorCS8qIEVsc2Ug anVzdCBhcHBlbmQgKi8KKwllbHNlCisJeworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1 ZmZlciwgYXBwZW5kU3RyKTsKKwl9Cit9CisKKy8qCisgKiBUYWtlcyBhbiBBdWRpdEV2ZW50 LCBjbGFzc2lmaWVzIGl0LCB0aGVuIGxvZ3MgaXQgaWYgcGVybWlzc2lvbnMgd2VyZSBncmFu dGVkCisgKiB2aWEgcm9sZXMgb3IgaWYgdGhlIHN0YXRlbWVudCBiZWxvbmdzIGluIGEgY2xh c3MgdGhhdCBpcyBiZWluZyBsb2dnZWQuCisgKi8KK3N0YXRpYyB2b2lkCitsb2dfYXVkaXRf ZXZlbnQoQXVkaXRFdmVudFN0YWNrSXRlbSAqc3RhY2tJdGVtKQoreworCU1lbW9yeUNvbnRl eHQgY29udGV4dE9sZDsKKwlTdHJpbmdJbmZvRGF0YSBhdWRpdFN0cjsKKworCS8qIEJ5IGRl ZmF1bHQgcHV0IGV2ZXJ5dGhpbmcgaW4gdGhlIE1JU0MgY2xhc3MuICovCisJZW51bSBMb2dD bGFzcyBjbGFzcyA9IExPR19NSVNDOworCWNvbnN0IGNoYXIgKmNsYXNzTmFtZSA9IENMQVNT X01JU0M7CisKKwkvKiBDbGFzc2lmeSB0aGUgc3RhdGVtZW50IHVzaW5nIGxvZyBzdG10IGxl dmVsIGFuZCB0aGUgY29tbWFuZCB0YWcgKi8KKwlzd2l0Y2ggKHN0YWNrSXRlbS0+YXVkaXRF dmVudC5sb2dTdG10TGV2ZWwpCisJeworCQkvKiBBbGwgbW9kcyBnbyBpbiBXUklURSBjbGFz cyAqLworCQljYXNlIExPR1NUTVRfTU9EOgorCQkJY2xhc3NOYW1lID0gQ0xBU1NfV1JJVEU7 CisJCQljbGFzcyA9IExPR19XUklURTsKKwkJCWJyZWFrOworCisJCS8qIFNlcGFyYXRlIFJP TEUgZnJvbSBvdGhlciBEREwgc3RhdGVtZW50cyAqLworCQljYXNlIExPR1NUTVRfRERMOgor CQkJLyogSWRlbnRpZnkgcm9sZSBzdGF0ZW1lbnRzICovCisJCQlpZiAoc3RhY2tJdGVtLT5h dWRpdEV2ZW50LmNvbW1hbmRUYWcgPT0gVF9HcmFudFN0bXQgfHwKKwkJCQlzdGFja0l0ZW0t PmF1ZGl0RXZlbnQuY29tbWFuZFRhZyA9PSBUX0dyYW50Um9sZVN0bXQgfHwKKwkJCQlzdGFj a0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZFRhZyA9PSBUX0NyZWF0ZVJvbGVTdG10IHx8CisJ CQkJKHN0YWNrSXRlbS0+YXVkaXRFdmVudC5jb21tYW5kVGFnID09IFRfUmVuYW1lU3RtdCAm JgorCQkJCSBwZ19zdHJjYXNlY21wKHN0YWNrSXRlbS0+YXVkaXRFdmVudC5jb21tYW5kLAor CQkJCQkJCSAgIENPTU1BTkRfQUxURVJfUk9MRSkgPT0gMCkgfHwKKwkJCQkoc3RhY2tJdGVt LT5hdWRpdEV2ZW50LmNvbW1hbmRUYWcgPT0gVF9Ecm9wU3RtdCAmJgorCQkJCSBwZ19zdHJj YXNlY21wKHN0YWNrSXRlbS0+YXVkaXRFdmVudC5jb21tYW5kLAorCQkJCQkJCSAgIENPTU1B TkRfRFJPUF9ST0xFKSA9PSAwKSB8fAorCQkJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5jb21t YW5kVGFnID09IFRfRHJvcFJvbGVTdG10IHx8CisJCQkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50 LmNvbW1hbmRUYWcgPT0gVF9BbHRlclJvbGVTdG10IHx8CisJCQkJc3RhY2tJdGVtLT5hdWRp dEV2ZW50LmNvbW1hbmRUYWcgPT0gVF9BbHRlclJvbGVTZXRTdG10KQorCQkJeworCQkJCWNs YXNzTmFtZSA9IENMQVNTX1JPTEU7CisJCQkJY2xhc3MgPSBMT0dfUk9MRTsKKwkJCX0KKwkJ CS8qIEVsc2UgbG9nIGFzIERETCAqLworCQkJZWxzZQorCQkJeworCQkJCWNsYXNzTmFtZSA9 IENMQVNTX0RETDsKKwkJCQljbGFzcyA9IExPR19EREw7CisJCQl9CisKKwkJLyogRmlndXJl IG91dCB0aGUgcmVzdCAqLworCQljYXNlIExPR1NUTVRfQUxMOgorCQkJc3dpdGNoIChzdGFj a0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZFRhZykKKwkJCXsKKwkJCQkvKiBSRUFEIHN0YXRl bWVudHMgKi8KKwkJCQljYXNlIFRfQ29weVN0bXQ6CisJCQkJY2FzZSBUX1NlbGVjdFN0bXQ6 CisJCQkJY2FzZSBUX1ByZXBhcmVTdG10OgorCQkJCWNhc2UgVF9QbGFubmVkU3RtdDoKKwkJ CQljYXNlIFRfRXhlY3V0ZVN0bXQ6CisJCQkJCWNsYXNzTmFtZSA9IENMQVNTX1JFQUQ7CisJ CQkJCWNsYXNzID0gTE9HX1JFQUQ7CisJCQkJCWJyZWFrOworCisJCQkJLyogUmVpbmRleCBp cyBEREwgKGJlY2F1c2UgY2x1c3RlciBpcyBEREwpICovCisJCQkJY2FzZSBUX1JlaW5kZXhT dG10OgorCQkJCQljbGFzc05hbWUgPSBDTEFTU19EREw7CisJCQkJCWNsYXNzID0gTE9HX0RE TDsKKwkJCQkJYnJlYWs7CisKKwkJCQkvKiBGVU5DVElPTiBzdGF0ZW1lbnRzICovCisJCQkJ Y2FzZSBUX0RvU3RtdDoKKwkJCQkJY2xhc3NOYW1lID0gQ0xBU1NfRlVOQ1RJT047CisJCQkJ CWNsYXNzID0gTE9HX0ZVTkNUSU9OOworCQkJCQlicmVhazsKKworCQkJCWRlZmF1bHQ6CisJ CQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBMT0dTVE1UX05PTkU6CisJ CQlicmVhazsKKwl9CisKKwkvKgorCSAqIE9ubHkgbG9nIHRoZSBzdGF0ZW1lbnQgaWY6CisJ ICoKKwkgKiAxLiBJZiBwZXJtaXNzaW9ucyB3ZXJlIGdyYW50ZWQgdmlhIHJvbGVzCisJICog Mi4gVGhlIHN0YXRlbWVudCBiZWxvbmdzIHRvIGEgY2xhc3MgdGhhdCBpcyBiZWluZyBsb2dn ZWQKKwkgKi8KKwlpZiAoIXN0YWNrSXRlbS0+YXVkaXRFdmVudC5ncmFudGVkICYmICEoYXVk aXRMb2dCaXRtYXAgJiBjbGFzcykpCisJCXJldHVybjsKKworCS8qIFVzZSBhdWRpdCBtZW1v cnkgY29udGV4dCBpbiBjYXNlIHNvbWV0aGluZyBpcyBub3QgZnJlZWQgKi8KKwljb250ZXh0 T2xkID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHN0YWNrSXRlbS0+Y29udGV4dEF1ZGl0KTsK KworCS8qIFNldCBzdGF0ZW1lbnQgYW5kIHN1YnN0YXRlbWVudCBJZHMgKi8KKwlpZiAoc3Rh Y2tJdGVtLT5hdWRpdEV2ZW50LnN0YXRlbWVudElkID09IDApCisJeworCQkvKiBJZiBub3Ro aW5nIGhhcyBiZWVuIGxvZ2dlZCB5ZXQgdGhlbiBjcmVhdGUgYSBuZXcgc3RhdGVtZW50IElk ICovCisJCWlmICghc3RhdGVtZW50TG9nZ2VkKQorCQl7CisJCQlzdGF0ZW1lbnRUb3RhbCsr OworCQkJc3RhdGVtZW50TG9nZ2VkID0gdHJ1ZTsKKwkJfQorCisJCXN0YWNrSXRlbS0+YXVk aXRFdmVudC5zdGF0ZW1lbnRJZCA9IHN0YXRlbWVudFRvdGFsOworCQlzdGFja0l0ZW0tPmF1 ZGl0RXZlbnQuc3Vic3RhdGVtZW50SWQgPSArK3N1YnN0YXRlbWVudFRvdGFsOworCX0KKwor CS8qIENyZWF0ZSB0aGUgYXVkaXQgc3RyaW5nICovCisJaW5pdFN0cmluZ0luZm8oJmF1ZGl0 U3RyKTsKKworCWFwcGVuZF92YWxpZF9jc3YoJmF1ZGl0U3RyLCBzdGFja0l0ZW0tPmF1ZGl0 RXZlbnQuY29tbWFuZCk7CisJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybygmYXVkaXRTdHIs ICcsJyk7CisKKwlhcHBlbmRfdmFsaWRfY3N2KCZhdWRpdFN0ciwgc3RhY2tJdGVtLT5hdWRp dEV2ZW50Lm9iamVjdFR5cGUpOworCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oJmF1ZGl0 U3RyLCAnLCcpOworCisJYXBwZW5kX3ZhbGlkX2NzdigmYXVkaXRTdHIsIHN0YWNrSXRlbS0+ YXVkaXRFdmVudC5vYmplY3ROYW1lKTsKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKCZh dWRpdFN0ciwgJywnKTsKKworCWFwcGVuZF92YWxpZF9jc3YoJmF1ZGl0U3RyLCBzdGFja0l0 ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZFRleHQpOworCisJLyogSWYgcGFyYW1ldGVyIGxvZ2dp bmcgaXMgdHVybmVkIG9uIGFuZCB0aGVyZSBhcmUgcGFyYW1ldGVycyB0byBsb2cgKi8KKwlp ZiAoYXVkaXRMb2dQYXJhbWV0ZXIgJiYKKwkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LnBhcmFt TGlzdCAhPSBOVUxMICYmCisJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5wYXJhbUxpc3QtPm51 bVBhcmFtcyA+IDAgJiYKKwkJIUlzQWJvcnRlZFRyYW5zYWN0aW9uQmxvY2tTdGF0ZSgpKQor CXsKKwkJUGFyYW1MaXN0SW5mbyBwYXJhbUxpc3QgPSBzdGFja0l0ZW0tPmF1ZGl0RXZlbnQu cGFyYW1MaXN0OworCQlpbnQgcGFyYW1JZHg7CisKKwkJLyogSXRlcmF0ZSB0aHJvdWdoIGFs bCBwYXJhbXMgKi8KKwkJZm9yIChwYXJhbUlkeCA9IDA7IHBhcmFtSWR4IDwgcGFyYW1MaXN0 LT5udW1QYXJhbXM7IHBhcmFtSWR4KyspCisJCXsKKwkJCVBhcmFtRXh0ZXJuRGF0YSAqcHJt ID0gJnBhcmFtTGlzdC0+cGFyYW1zW3BhcmFtSWR4XTsKKwkJCU9pZCAJCQkgdHlwZU91dHB1 dDsKKwkJCWJvb2wgCQkJIHR5cGVJc1ZhckxlbmE7CisJCQljaGFyIAkJCSpwYXJhbVN0cjsK KworCQkJLyogQWRkIGEgY29tbWEgZm9yIGVhY2ggcGFyYW0gKi8KKwkJCWFwcGVuZFN0cmlu Z0luZm9DaGFyTWFjcm8oJmF1ZGl0U3RyLCAnLCcpOworCisJCQkvKiBTa2lwIHRoaXMgcGFy YW0gaWYgbnVsbCBvciBpZiBvaWQgaXMgaW52YWxpZCAqLworCQkJaWYgKHBybS0+aXNudWxs IHx8ICFPaWRJc1ZhbGlkKHBybS0+cHR5cGUpKQorCQkJeworCQkJCWNvbnRpbnVlOworCQkJ fQorCisJCQkvKiBPdXRwdXQgdGhlIHN0cmluZyAqLworCQkJZ2V0VHlwZU91dHB1dEluZm8o cHJtLT5wdHlwZSwgJnR5cGVPdXRwdXQsICZ0eXBlSXNWYXJMZW5hKTsKKwkJCXBhcmFtU3Ry ID0gT2lkT3V0cHV0RnVuY3Rpb25DYWxsKHR5cGVPdXRwdXQsIHBybS0+dmFsdWUpOworCisJ CQlhcHBlbmRfdmFsaWRfY3N2KCZhdWRpdFN0ciwgcGFyYW1TdHIpOworCQkJcGZyZWUocGFy YW1TdHIpOworCQl9CisJfQorCisJLyogTG9nIHRoZSBhdWRpdCBzdHJpbmcgKi8KKwllbG9n KGF1ZGl0TG9nTm90aWNlID8gTk9USUNFIDogTE9HLAorCQkgIkFVRElUOiAlcywlbGQsJWxk LCVzLCVzIiwKKwkJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5ncmFudGVkID8KKwkJCQlBVURJ VF9UWVBFX09CSkVDVCA6IEFVRElUX1RZUEVfU0VTU0lPTiwKKwkJCXN0YWNrSXRlbS0+YXVk aXRFdmVudC5zdGF0ZW1lbnRJZCwKKwkJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5zdWJzdGF0 ZW1lbnRJZCwKKwkJCWNsYXNzTmFtZSwgYXVkaXRTdHIuZGF0YSk7CisKKwkvKiBNYXJrIHRo ZSBhdWRpdCBldmVudCBhcyBsb2dnZWQgKi8KKwlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQubG9n Z2VkID0gdHJ1ZTsKKworCS8qIFN3aXRjaCBiYWNrIHRvIHRoZSBvbGQgbWVtb3J5IGNvbnRl eHQgKi8KKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8oY29udGV4dE9sZCk7Cit9CisKKy8qCisg KiBDaGVjayBpZiB0aGUgcm9sZSBvciBhbnkgaW5oZXJpdGVkIHJvbGUgaGFzIGFueSBwZXJt aXNzaW9uIGluIHRoZSBtYXNrLiAgVGhlCisgKiBwdWJsaWMgcm9sZSBpcyBleGNsdWRlZCBm cm9tIHRoaXMgY2hlY2sgYW5kIHN1cGVydXNlciBwZXJtaXNzaW9ucyBhcmUgbm90CisgKiBj b25zaWRlcmVkLgorICovCitzdGF0aWMgYm9vbAorYXVkaXRfb25fYWNsKERhdHVtIGFjbERh dHVtLAorCQkJIE9pZCBhdWRpdE9pZCwKKwkJCSBBY2xNb2RlIG1hc2spCit7CisJYm9vbAkJ cmVzdWx0ID0gZmFsc2U7CisJQWNsCQkgICAqYWNsOworCUFjbEl0ZW0JICAgKmFjbEl0ZW1E YXRhOworCWludAkJCWFjbEluZGV4OworCWludAkJCWFjbFRvdGFsOworCisJLyogRGV0b2Fz dCBjb2x1bW4ncyBBQ0wgaWYgbmVjZXNzYXJ5ICovCisJYWNsID0gRGF0dW1HZXRBY2xQKGFj bERhdHVtKTsKKworCS8qIEdldCB0aGUgYWNsIGxpc3QgYW5kIHRvdGFsICovCisJYWNsVG90 YWwgPSBBQ0xfTlVNKGFjbCk7CisJYWNsSXRlbURhdGEgPSBBQ0xfREFUKGFjbCk7CisKKwkv KiBDaGVjayBwcml2aWxlZ2VzIGdyYW50ZWQgZGlyZWN0bHkgdG8gYXVkaXRPaWQgKi8KKwlm b3IgKGFjbEluZGV4ID0gMDsgYWNsSW5kZXggPCBhY2xUb3RhbDsgYWNsSW5kZXgrKykKKwl7 CisJCUFjbEl0ZW0gKmFjbEl0ZW0gPSAmYWNsSXRlbURhdGFbYWNsSW5kZXhdOworCisJCWlm IChhY2xJdGVtLT5haV9ncmFudGVlID09IGF1ZGl0T2lkICYmCisJCQlhY2xJdGVtLT5haV9w cml2cyAmIG1hc2spCisJCXsKKwkJCXJlc3VsdCA9IHRydWU7CisJCQlicmVhazsKKwkJfQor CX0KKworCS8qCisJICogQ2hlY2sgcHJpdmlsZWdlcyBncmFudGVkIGluZGlyZWN0bHkgdmlh IHJvbGUgbWVtYmVyc2hpcHMuIFdlIGRvIHRoaXMgaW4KKwkgKiBhIHNlcGFyYXRlIHBhc3Mg dG8gbWluaW1pemUgZXhwZW5zaXZlIGluZGlyZWN0IG1lbWJlcnNoaXAgdGVzdHMuICBJbgor CSAqIHBhcnRpY3VsYXIsIGl0J3Mgd29ydGggdGVzdGluZyB3aGV0aGVyIGEgZ2l2ZW4gQUNM IGVudHJ5IGdyYW50cyBhbnkKKwkgKiBwcml2aWxlZ2VzIHN0aWxsIG9mIGludGVyZXN0IGJl Zm9yZSB3ZSBwZXJmb3JtIHRoZSBoYXNfcHJpdnNfb2Zfcm9sZQorCSAqIHRlc3QuCisJICov CisJaWYgKCFyZXN1bHQpCisJeworCQlmb3IgKGFjbEluZGV4ID0gMDsgYWNsSW5kZXggPCBh Y2xUb3RhbDsgYWNsSW5kZXgrKykKKwkJeworCQkJQWNsSXRlbSAqYWNsSXRlbSA9ICZhY2xJ dGVtRGF0YVthY2xJbmRleF07CisKKwkJCS8qIERvbid0IHRlc3QgcHVibGljIG9yIGF1ZGl0 T2lkIChpdCBoYXMgYmVlbiB0ZXN0ZWQgYWxyZWFkeSkgKi8KKwkJCWlmIChhY2xJdGVtLT5h aV9ncmFudGVlID09IEFDTF9JRF9QVUJMSUMgfHwKKwkJCQlhY2xJdGVtLT5haV9ncmFudGVl ID09IGF1ZGl0T2lkKQorCQkJCWNvbnRpbnVlOworCisJCQkvKgorCQkJICogQ2hlY2sgdGhh dCB0aGUgcm9sZSBoYXMgdGhlIHJlcXVpcmVkIHByaXZpbGVnZXMgYW5kIHRoYXQgaXQgaXMK KwkJCSAqIGluaGVyaXRlZCBieSBhdWRpdE9pZC4KKwkJCSAqLworCQkJaWYgKGFjbEl0ZW0t PmFpX3ByaXZzICYgbWFzayAmJgorCQkJCWhhc19wcml2c19vZl9yb2xlKGF1ZGl0T2lkLCBh Y2xJdGVtLT5haV9ncmFudGVlKSkKKwkJCXsKKwkJCQlyZXN1bHQgPSB0cnVlOworCQkJCWJy ZWFrOworCQkJfQorCQl9CisJfQorCisJLyogaWYgd2UgaGF2ZSBhIGRldG9hc3RlZCBjb3B5 LCBmcmVlIGl0ICovCisJaWYgKGFjbCAmJiAoUG9pbnRlcikgYWNsICE9IERhdHVtR2V0UG9p bnRlcihhY2xEYXR1bSkpCisJCXBmcmVlKGFjbCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQor CisvKgorICogQ2hlY2sgaWYgYSByb2xlIGhhcyBhbnkgb2YgdGhlIHBlcm1pc3Npb25zIGlu IHRoZSBtYXNrIG9uIGEgcmVsYXRpb24uCisgKi8KK3N0YXRpYyBib29sCithdWRpdF9vbl9y ZWxhdGlvbihPaWQgcmVsT2lkLAorCQkJCSAgT2lkIGF1ZGl0T2lkLAorCQkJCSAgQWNsTW9k ZSBtYXNrKQoreworCWJvb2wJCXJlc3VsdCA9IGZhbHNlOworCUhlYXBUdXBsZQl0dXBsZTsK KwlEYXR1bQkJYWNsRGF0dW07CisJYm9vbAkJaXNOdWxsOworCisJLyogR2V0IHJlbGF0aW9u IHR1cGxlIGZyb20gcGdfY2xhc3MgKi8KKwl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShSRUxP SUQsIE9iamVjdElkR2V0RGF0dW0ocmVsT2lkKSk7CisKKwkvKiBSZXR1cm4gZmFsc2UgaWYg dHVwbGUgaXMgbm90IHZhbGlkICovCisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlKSkK KwkJcmV0dXJuIGZhbHNlOworCisJLyogR2V0IHRoZSByZWxhdGlvbidzIEFDTCAqLworCWFj bERhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFJFTE9JRCwgdHVwbGUsIEFudW1fcGdfY2xhc3Nf cmVsYWNsLAorCQkJCQkJCSAgICZpc051bGwpOworCisJLyogSWYgbm90IG51bGwgdGhlbiB0 ZXN0ICovCisJaWYgKCFpc051bGwpCisJCXJlc3VsdCA9IGF1ZGl0X29uX2FjbChhY2xEYXR1 bSwgYXVkaXRPaWQsIG1hc2spOworCisJLyogRnJlZSB0aGUgcmVsYXRpb24gdHVwbGUgKi8K KwlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoK KyAqIENoZWNrIGlmIGEgcm9sZSBoYXMgYW55IG9mIHRoZSBwZXJtaXNzaW9ucyBpbiB0aGUg bWFzayBvbiBhbiBhdHRyaWJ1dGUuCisgKi8KK3N0YXRpYyBib29sCithdWRpdF9vbl9hdHRy aWJ1dGUoT2lkIHJlbE9pZCwKKwkJCQkgICBBdHRyTnVtYmVyIGF0dE51bSwKKwkJCQkgICBP aWQgYXVkaXRPaWQsCisJCQkJICAgQWNsTW9kZSBtYXNrKQoreworCWJvb2wJCXJlc3VsdCA9 IGZhbHNlOworCUhlYXBUdXBsZQlhdHRUdXBsZTsKKwlEYXR1bQkJYWNsRGF0dW07CisJYm9v bAkJaXNOdWxsOworCisJLyogR2V0IHRoZSBhdHRyaWJ1dGUncyBBQ0wgKi8KKwlhdHRUdXBs ZSA9IFNlYXJjaFN5c0NhY2hlMihBVFROVU0sCisJCQkJCQkJICAgT2JqZWN0SWRHZXREYXR1 bShyZWxPaWQpLAorCQkJCQkJCSAgIEludDE2R2V0RGF0dW0oYXR0TnVtKSk7CisKKwkvKiBS ZXR1cm4gZmFsc2UgaWYgYXR0cmlidXRlIGlzIGludmFsaWQgKi8KKwlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQoYXR0VHVwbGUpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBPbmx5IHByb2Nl c3MgYXR0cmlidXRlIHRoYXQgaGF2ZSBub3QgYmVlbiBkcm9wcGVkICovCisJaWYgKCEoKEZv cm1fcGdfYXR0cmlidXRlKSBHRVRTVFJVQ1QoYXR0VHVwbGUpKS0+YXR0aXNkcm9wcGVkKQor CXsKKwkJYWNsRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoQVRUTlVNLCBhdHRUdXBsZSwgQW51 bV9wZ19hdHRyaWJ1dGVfYXR0YWNsLAorCQkJCQkJCQkgICAmaXNOdWxsKTsKKworCQlpZiAo IWlzTnVsbCkKKwkJCXJlc3VsdCA9IGF1ZGl0X29uX2FjbChhY2xEYXR1bSwgYXVkaXRPaWQs IG1hc2spOworCX0KKworCS8qIEZyZWUgYXR0cmlidXRlICovCisJUmVsZWFzZVN5c0NhY2hl KGF0dFR1cGxlKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBDaGVjayBpZiBh IHJvbGUgaGFzIGFueSBvZiB0aGUgcGVybWlzc2lvbnMgaW4gdGhlIG1hc2sgb24gYW4gYXR0 cmlidXRlIGluCisgKiB0aGUgcHJvdmlkZWQgc2V0LiAgSWYgdGhlIHNldCBpcyBlbXB0eSwg dGhlbiBhbGwgdmFsaWQgYXR0cmlidXRlcyBpbiB0aGUKKyAqIHJlbGF0aW9uIHdpbGwgYmUg dGVzdGVkLgorICovCitzdGF0aWMgYm9vbAorYXVkaXRfb25fYW55X2F0dHJpYnV0ZShPaWQg cmVsT2lkLAorCQkJCQkgICBPaWQgYXVkaXRPaWQsCisJCQkJCSAgIEJpdG1hcHNldCAqYXR0 cmlidXRlU2V0LAorCQkJCQkgICBBY2xNb2RlIG1vZGUpCit7CisJYm9vbCByZXN1bHQgPSBm YWxzZTsKKwlBdHRyTnVtYmVyIGNvbDsKKwlCaXRtYXBzZXQgKnRtcFNldDsKKworCS8qIElm IGJtcyBpcyBlbXB0eSB0aGVuIGNoZWNrIGZvciBhbnkgY29sdW1uIG1hdGNoICovCisJaWYg KGJtc19pc19lbXB0eShhdHRyaWJ1dGVTZXQpKQorCXsKKwkJSGVhcFR1cGxlCWNsYXNzVHVw bGU7CisJCUF0dHJOdW1iZXIJbmF0dHJzOworCQlBdHRyTnVtYmVyCWN1cnJfYXR0OworCisJ CS8qIEdldCByZWxhdGlvbiB0byBkZXRlcm1pbmUgdG90YWwgYXR0cmlidXRlICovCisJCWNs YXNzVHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoUkVMT0lELCBPYmplY3RJZEdldERhdHVtKHJl bE9pZCkpOworCisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChjbGFzc1R1cGxlKSkKKwkJCXJl dHVybiBmYWxzZTsKKworCQluYXR0cnMgPSAoKEZvcm1fcGdfY2xhc3MpIEdFVFNUUlVDVChj bGFzc1R1cGxlKSktPnJlbG5hdHRzOworCQlSZWxlYXNlU3lzQ2FjaGUoY2xhc3NUdXBsZSk7 CisKKwkJLyogQ2hlY2sgZWFjaCBjb2x1bW4gKi8KKwkJZm9yIChjdXJyX2F0dCA9IDE7IGN1 cnJfYXR0IDw9IG5hdHRyczsgY3Vycl9hdHQrKykKKwkJeworCQkJaWYgKGF1ZGl0X29uX2F0 dHJpYnV0ZShyZWxPaWQsIGN1cnJfYXR0LCBhdWRpdE9pZCwgbW9kZSkpCisJCQkJcmV0dXJu IHRydWU7CisJCX0KKwl9CisKKwkvKiBibXNfZmlyc3RfbWVtYmVyIGlzIGRlc3RydWN0aXZl LCBzbyBtYWtlIGEgY29weSBiZWZvcmUgdXNpbmcgaXQuICovCisJdG1wU2V0ID0gYm1zX2Nv cHkoYXR0cmlidXRlU2V0KTsKKworCS8qIENoZWNrIGVhY2ggY29sdW1uICovCisJd2hpbGUg KChjb2wgPSBibXNfZmlyc3RfbWVtYmVyKHRtcFNldCkpID49IDApCisJeworCQljb2wgKz0g Rmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcjsKKworCQlpZiAoY29sICE9IElu dmFsaWRBdHRyTnVtYmVyICYmCisJCQlhdWRpdF9vbl9hdHRyaWJ1dGUocmVsT2lkLCBjb2ws IGF1ZGl0T2lkLCBtb2RlKSkKKwkJeworCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCWJyZWFrOwor CQl9CisJfQorCisJLyogRnJlZSB0aGUgY29sdW1uIHNldCAqLworCWJtc19mcmVlKHRtcFNl dCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQ3JlYXRlIEF1ZGl0RXZlbnRz IGZvciBTRUxFQ1QvRE1MIG9wZXJhdGlvbnMgdmlhIGV4ZWN1dG9yIHBlcm1pc3Npb25zIGNo ZWNrcy4KKyAqLworc3RhdGljIHZvaWQKK2xvZ19zZWxlY3RfZG1sKE9pZCBhdWRpdE9pZCwg TGlzdCAqcmFuZ2VUYWJscykKK3sKKwlMaXN0Q2VsbCAqbHI7CisJYm9vbCBmaXJzdCA9IHRy dWU7CisJYm9vbCBmb3VuZCA9IGZhbHNlOworCisJLyogRG8gbm90IGxvZyBpZiB0aGlzIGlz IGFuIGludGVybmFsIHN0YXRlbWVudCAqLworCWlmIChpbnRlcm5hbFN0YXRlbWVudCkKKwkJ cmV0dXJuOworCisJZm9yZWFjaChsciwgcmFuZ2VUYWJscykKKwl7CisJCU9pZCByZWxPaWQ7 CisJCVJlbGF0aW9uIHJlbDsKKwkJUmFuZ2VUYmxFbnRyeSAqcnRlID0gbGZpcnN0KGxyKTsK KworCQkvKiBXZSBvbmx5IGNhcmUgYWJvdXQgdGFibGVzLCBhbmQgY2FuIGlnbm9yZSBzdWJx dWVyaWVzIGV0Yy4gKi8KKwkJaWYgKHJ0ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJT04pCisJ CQljb250aW51ZTsKKworCQlmb3VuZCA9IHRydWU7CisKKwkJLyoKKwkJICogRmlsdGVyIG91 dCBhbnkgc3lzdGVtIHJlbGF0aW9ucworCQkgKi8KKwkJcmVsT2lkID0gcnRlLT5yZWxpZDsK KwkJcmVsID0gcmVsYXRpb25fb3BlbihyZWxPaWQsIE5vTG9jayk7CisKKwkJaWYgKCFhdWRp dExvZ0NhdGFsb2cgJiYgSXNTeXN0ZW1OYW1lc3BhY2UoUmVsYXRpb25HZXROYW1lc3BhY2Uo cmVsKSkpCisJCXsKKwkJCXJlbGF0aW9uX2Nsb3NlKHJlbCwgTm9Mb2NrKTsKKwkJCWNvbnRp bnVlOworCQl9CisKKwkJLyoKKwkJICogRmlsbCB2YWx1ZXMgaW4gdGhlIGV2ZW50IHN0cnVj dCB0aGF0IGFyZSByZXF1aXJlZCBmb3Igc2Vzc2lvbgorCQkgKiBsb2dnaW5nLgorCQkgKi8K KwkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmdyYW50ZWQgPSBmYWxzZTsKKworCQkv KgorCQkgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBydGUgdGhlbiBzZXNzaW9uIGxvZyB1bmxl c3MgYXVkaXRMb2dSZWxhdGlvbgorCQkgKiBpcyBzZXQuCisJCSAqLworCQlpZiAoZmlyc3Qg JiYgIWF1ZGl0TG9nUmVsYXRpb24pCisJCXsKKwkJCWxvZ19hdWRpdF9ldmVudChhdWRpdEV2 ZW50U3RhY2spOworCisJCQlmaXJzdCA9IGZhbHNlOworCQl9CisKKwkJLyoKKwkJICogV2Ug ZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIHBhcnNldHJlZSBoZXJlLCBzbyB3ZSBoYXZlIHRv IGdlbmVyYXRlCisJCSAqIHRoZSBub2RlIHR5cGUsIG9iamVjdCB0eXBlLCBhbmQgY29tbWFu ZCB0YWcgYnkgZGVjb2RpbmcKKwkJICogcnRlLT5yZXF1aXJlZFBlcm1zIGFuZCBydGUtPnJl bGtpbmQuCisJCSAqLworCQlpZiAocnRlLT5yZXF1aXJlZFBlcm1zICYgQUNMX0lOU0VSVCkK KwkJeworCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmxvZ1N0bXRMZXZlbCA9IExP R1NUTVRfTU9EOworCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmNvbW1hbmRUYWcg PSBUX0luc2VydFN0bXQ7CisJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQuY29tbWFu ZCA9IENPTU1BTkRfSU5TRVJUOworCQl9CisJCWVsc2UgaWYgKHJ0ZS0+cmVxdWlyZWRQZXJt cyAmIEFDTF9VUERBVEUpCisJCXsKKwkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5s b2dTdG10TGV2ZWwgPSBMT0dTVE1UX01PRDsKKwkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRF dmVudC5jb21tYW5kVGFnID0gVF9VcGRhdGVTdG10OworCQkJYXVkaXRFdmVudFN0YWNrLT5h dWRpdEV2ZW50LmNvbW1hbmQgPSBDT01NQU5EX1VQREFURTsKKwkJfQorCQllbHNlIGlmIChy dGUtPnJlcXVpcmVkUGVybXMgJiBBQ0xfREVMRVRFKQorCQl7CisJCQlhdWRpdEV2ZW50U3Rh Y2stPmF1ZGl0RXZlbnQubG9nU3RtdExldmVsID0gTE9HU1RNVF9NT0Q7CisJCQlhdWRpdEV2 ZW50U3RhY2stPmF1ZGl0RXZlbnQuY29tbWFuZFRhZyA9IFRfRGVsZXRlU3RtdDsKKwkJCWF1 ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5jb21tYW5kID0gQ09NTUFORF9ERUxFVEU7CisJ CX0KKwkJZWxzZSBpZiAocnRlLT5yZXF1aXJlZFBlcm1zICYgQUNMX1NFTEVDVCkKKwkJewor CQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmxvZ1N0bXRMZXZlbCA9IExPR1NUTVRf QUxMOworCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmNvbW1hbmRUYWcgPSBUX1Nl bGVjdFN0bXQ7CisJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQuY29tbWFuZCA9IENP TU1BTkRfU0VMRUNUOworCQl9CisJCWVsc2UKKwkJeworCQkJYXVkaXRFdmVudFN0YWNrLT5h dWRpdEV2ZW50LmxvZ1N0bXRMZXZlbCA9IExPR1NUTVRfQUxMOworCQkJYXVkaXRFdmVudFN0 YWNrLT5hdWRpdEV2ZW50LmNvbW1hbmRUYWcgPSBUX0ludmFsaWQ7CisJCQlhdWRpdEV2ZW50 U3RhY2stPmF1ZGl0RXZlbnQuY29tbWFuZCA9IENPTU1BTkRfVU5LTk9XTjsKKwkJfQorCisJ CS8qIEdldCB0aGUgcmVsYXRpb24gdHlwZSAqLworCQlzd2l0Y2ggKHJ0ZS0+cmVsa2luZCkK KwkJeworCQkJY2FzZSBSRUxLSU5EX1JFTEFUSU9OOgorCQkJCWF1ZGl0RXZlbnRTdGFjay0+ YXVkaXRFdmVudC5vYmplY3RUeXBlID0KKwkJCQkJT0JKRUNUX1RZUEVfVEFCTEU7CisJCQkJ YnJlYWs7CisKKwkJCWNhc2UgUkVMS0lORF9JTkRFWDoKKwkJCQlhdWRpdEV2ZW50U3RhY2st PmF1ZGl0RXZlbnQub2JqZWN0VHlwZSA9CisJCQkJCU9CSkVDVF9UWVBFX0lOREVYOworCQkJ CWJyZWFrOworCisJCQljYXNlIFJFTEtJTkRfU0VRVUVOQ0U6CisJCQkJYXVkaXRFdmVudFN0 YWNrLT5hdWRpdEV2ZW50Lm9iamVjdFR5cGUgPQorCQkJCQlPQkpFQ1RfVFlQRV9TRVFVRU5D RTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBSRUxLSU5EX1RPQVNUVkFMVUU6CisJCQkJYXVk aXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50Lm9iamVjdFR5cGUgPQorCQkJCQlPQkpFQ1RfVFlQ RV9UT0FTVFZBTFVFOworCQkJCWJyZWFrOworCisJCQljYXNlIFJFTEtJTkRfVklFVzoKKwkJ CQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQub2JqZWN0VHlwZSA9CisJCQkJCU9CSkVD VF9UWVBFX1ZJRVc7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUkVMS0lORF9DT01QT1NJVEVf VFlQRToKKwkJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQub2JqZWN0VHlwZSA9CisJ CQkJCU9CSkVDVF9UWVBFX0NPTVBPU0lURV9UWVBFOworCQkJCWJyZWFrOworCisJCQljYXNl IFJFTEtJTkRfRk9SRUlHTl9UQUJMRToKKwkJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZl bnQub2JqZWN0VHlwZSA9CisJCQkJCU9CSkVDVF9UWVBFX0ZPUkVJR05fVEFCTEU7CisJCQkJ YnJlYWs7CisKKwkJCWNhc2UgUkVMS0lORF9NQVRWSUVXOgorCQkJCWF1ZGl0RXZlbnRTdGFj ay0+YXVkaXRFdmVudC5vYmplY3RUeXBlID0KKwkJCQkJT0JKRUNUX1RZUEVfTUFUVklFVzsK KwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0 RXZlbnQub2JqZWN0VHlwZSA9CisJCQkJCU9CSkVDVF9UWVBFX1VOS05PV047CisJCQkJYnJl YWs7CisJCX0KKworCQkvKiBHZXQgdGhlIHJlbGF0aW9uIG5hbWUgKi8KKwkJYXVkaXRFdmVu dFN0YWNrLT5hdWRpdEV2ZW50Lm9iamVjdE5hbWUgPQorCQkJcXVvdGVfcXVhbGlmaWVkX2lk ZW50aWZpZXIoZ2V0X25hbWVzcGFjZV9uYW1lKAorCQkJCQkJCQkJICAgUmVsYXRpb25HZXRO YW1lc3BhY2UocmVsKSksCisJCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShy ZWwpKTsKKwkJcmVsYXRpb25fY2xvc2UocmVsLCBOb0xvY2spOworCisJCS8qIFBlcmZvcm0g b2JqZWN0IGF1ZGl0aW5nIG9ubHkgaWYgdGhlIGF1ZGl0IHJvbGUgaXMgdmFsaWQgKi8KKwkJ aWYgKGF1ZGl0T2lkICE9IEludmFsaWRPaWQpCisJCXsKKwkJCUFjbE1vZGUgYXVkaXRQZXJt cyA9CisJCQkJKEFDTF9TRUxFQ1QgfCBBQ0xfVVBEQVRFIHwgQUNMX0lOU0VSVCB8IEFDTF9E RUxFVEUpICYKKwkJCQlydGUtPnJlcXVpcmVkUGVybXM7CisKKwkJCS8qCisJCQkgKiBJZiBh bnkgb2YgdGhlIHJlcXVpcmVkIHBlcm1pc3Npb25zIGZvciB0aGUgcmVsYXRpb24gYXJlIGdy YW50ZWQKKwkJCSAqIHRvIHRoZSBhdWRpdCByb2xlIHRoZW4gYXVkaXQgdGhlIHJlbGF0aW9u CisJCQkgKi8KKwkJCWlmIChhdWRpdF9vbl9yZWxhdGlvbihyZWxPaWQsIGF1ZGl0T2lkLCBh dWRpdFBlcm1zKSkKKwkJCXsKKwkJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQuZ3Jh bnRlZCA9IHRydWU7CisJCQl9CisKKwkJCS8qCisJCQkgKiBFbHNlIGNoZWNrIGlmIHRoZSBh dWRpdCByb2xlIGhhcyBjb2x1bW4tbGV2ZWwgcGVybWlzc2lvbnMgZm9yCisJCQkgKiBzZWxl Y3QsIGluc2VydCwgb3IgdXBkYXRlLgorCQkJICovCisJCQllbHNlIGlmIChhdWRpdFBlcm1z ICE9IDApCisJCQl7CisJCQkJLyoKKwkJCQkgKiBDaGVjayB0aGUgc2VsZWN0IGNvbHVtbnMg dG8gc2VlIGlmIHRoZSBhdWRpdCByb2xlIGhhcworCQkJCSAqIHByaXZlbGVnZXMgb24gYW55 IG9mIHRoZW0uCisJCQkJICovCisJCQkJaWYgKGF1ZGl0UGVybXMgJiBBQ0xfU0VMRUNUKQor CQkJCXsKKwkJCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmdyYW50ZWQgPQorCQkJ CQkJYXVkaXRfb25fYW55X2F0dHJpYnV0ZShyZWxPaWQsIGF1ZGl0T2lkLAorCQkJCQkJCQkJ CQkgICBydGUtPnNlbGVjdGVkQ29scywKKwkJCQkJCQkJCQkJICAgQUNMX1NFTEVDVCk7CisJ CQkJfQorCisJCQkJLyoKKwkJCQkgKiBDaGVjayB0aGUgbW9kaWZpZWQgY29sdW1ucyB0byBz ZWUgaWYgdGhlIGF1ZGl0IHJvbGUgaGFzCisJCQkJICogcHJpdmlsZWdlcyBvbiBhbnkgb2Yg dGhlbS4KKwkJCQkgKi8KKwkJCQlpZiAoIWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5n cmFudGVkKQorCQkJCXsKKwkJCQkJYXVkaXRQZXJtcyAmPSAoQUNMX0lOU0VSVCB8IEFDTF9V UERBVEUpOworCisJCQkJCWlmIChhdWRpdFBlcm1zKQorCQkJCQl7CisJCQkJCQlhdWRpdEV2 ZW50U3RhY2stPmF1ZGl0RXZlbnQuZ3JhbnRlZCA9CisJCQkJCQkJYXVkaXRfb25fYW55X2F0 dHJpYnV0ZShyZWxPaWQsIGF1ZGl0T2lkLAorCQkJCQkJCQkJCQkJICAgcnRlLT5tb2RpZmll ZENvbHMsCisJCQkJCQkJCQkJCQkgICBhdWRpdFBlcm1zKTsKKwkJCQkJfQorCQkJCX0KKwkJ CX0KKwkJfQorCisJCS8qIERvIHJlbGF0aW9uIGxldmVsIGxvZ2dpbmcgaWYgYSBncmFudCB3 YXMgZm91bmQgKi8KKwkJaWYgKGF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5ncmFudGVk KQorCQl7CisJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQubG9nZ2VkID0gZmFsc2U7 CisJCQlsb2dfYXVkaXRfZXZlbnQoYXVkaXRFdmVudFN0YWNrKTsKKwkJfQorCisJCS8qIERv IHJlbGF0aW9uIGxldmVsIGxvZ2dpbmcgaWYgYXVkaXRMb2dSZWxhdGlvbiBpcyBzZXQgKi8K KwkJaWYgKGF1ZGl0TG9nUmVsYXRpb24pCisJCXsKKwkJCWF1ZGl0RXZlbnRTdGFjay0+YXVk aXRFdmVudC5sb2dnZWQgPSBmYWxzZTsKKwkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVu dC5ncmFudGVkID0gZmFsc2U7CisJCQlsb2dfYXVkaXRfZXZlbnQoYXVkaXRFdmVudFN0YWNr KTsKKwkJfQorCisJCXBmcmVlKGF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5vYmplY3RO YW1lKTsKKwl9CisKKwkvKgorCSAqIElmIG5vIHRhYmxlcyB3ZXJlIGZvdW5kIHRoYXQgbWVh bnMgdGhhdCBSYW5nZVRibHMgd2FzIGVtcHR5IG9yIGFsbAorCSAqIHJlbGF0aW9ucyB3ZXJl IGluIHRoZSBzeXN0ZW0gc2NoZW1hLiAgSW4gdGhhdCBjYXNlIHN0aWxsIGxvZyBhCisJICog c2Vzc2lvbiByZWNvcmQuCisJICovCisJaWYgKCFmb3VuZCkKKwl7CisJCWF1ZGl0RXZlbnRT dGFjay0+YXVkaXRFdmVudC5ncmFudGVkID0gZmFsc2U7CisJCWF1ZGl0RXZlbnRTdGFjay0+ YXVkaXRFdmVudC5sb2dnZWQgPSBmYWxzZTsKKworCQlsb2dfYXVkaXRfZXZlbnQoYXVkaXRF dmVudFN0YWNrKTsKKwl9Cit9CisKKy8qCisgKiBDcmVhdGUgQXVkaXRFdmVudHMgZm9yIGNl cnRhaW4ga2luZHMgb2YgQ1JFQVRFLCBBTFRFUiwgYW5kIERFTEVURSBzdGF0ZW1lbnRzCisg KiB3aGVyZSB0aGUgb2JqZWN0IGNhbiBiZSBsb2dnZWQuCisgKi8KK3N0YXRpYyB2b2lkCits b2dfY3JlYXRlX2FsdGVyX2Ryb3AoT2lkIGNsYXNzSWQsCisJCQkJCSAgT2lkIG9iamVjdElk KQoreworCS8qIE9ubHkgcGVyZm9ybSB3aGVuIGNsYXNzIGlzIHJlbGF0aW9uICovCisJaWYg KGNsYXNzSWQgPT0gUmVsYXRpb25SZWxhdGlvbklkKQorCXsKKwkJUmVsYXRpb24gcmVsOwor CQlGb3JtX3BnX2NsYXNzIGNsYXNzOworCisJCS8qIE9wZW4gdGhlIHJlbGF0aW9uICovCisJ CXJlbCA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIE5vTG9jayk7CisKKwkJLyogRmlsdGVy IG91dCBhbnkgc3lzdGVtIHJlbGF0aW9ucyAqLworCQlpZiAoSXNUb2FzdE5hbWVzcGFjZShS ZWxhdGlvbkdldE5hbWVzcGFjZShyZWwpKSkKKwkJeworCQkJcmVsYXRpb25fY2xvc2UocmVs LCBOb0xvY2spOworCQkJcmV0dXJuOworCQl9CisKKwkJLyogR2V0IHJlbCBpbmZvcm1hdGlv biBhbmQgY2xvc2UgaXQgKi8KKwkJY2xhc3MgPSBSZWxhdGlvbkdldEZvcm0ocmVsKTsKKwkJ YXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50Lm9iamVjdE5hbWUgPQorCQkJcXVvdGVfcXVh bGlmaWVkX2lkZW50aWZpZXIoZ2V0X25hbWVzcGFjZV9uYW1lKAorCQkJCQkJCQkJICAgUmVs YXRpb25HZXROYW1lc3BhY2UocmVsKSksCisJCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0 aW9uTmFtZShyZWwpKTsKKwkJcmVsYXRpb25fY2xvc2UocmVsLCBOb0xvY2spOworCisJCS8q IFNldCBvYmplY3QgdHlwZSBiYXNlZCBvbiByZWxraW5kICovCisJCXN3aXRjaCAoY2xhc3Mt PnJlbGtpbmQpCisJCXsKKwkJCWNhc2UgUkVMS0lORF9SRUxBVElPTjoKKwkJCQlhdWRpdEV2 ZW50U3RhY2stPmF1ZGl0RXZlbnQub2JqZWN0VHlwZSA9CisJCQkJCU9CSkVDVF9UWVBFX1RB QkxFOworCQkJCWJyZWFrOworCisJCQljYXNlIFJFTEtJTkRfSU5ERVg6CisJCQkJYXVkaXRF dmVudFN0YWNrLT5hdWRpdEV2ZW50Lm9iamVjdFR5cGUgPQorCQkJCQlPQkpFQ1RfVFlQRV9J TkRFWDsKKwkJCQlicmVhazsKKworCQkJY2FzZSBSRUxLSU5EX1NFUVVFTkNFOgorCQkJCWF1 ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5vYmplY3RUeXBlID0KKwkJCQkJT0JKRUNUX1RZ UEVfU0VRVUVOQ0U7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUkVMS0lORF9WSUVXOgorCQkJ CWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5vYmplY3RUeXBlID0KKwkJCQkJT0JKRUNU X1RZUEVfVklFVzsKKwkJCQlicmVhazsKKworCQkJY2FzZSBSRUxLSU5EX0NPTVBPU0lURV9U WVBFOgorCQkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5vYmplY3RUeXBlID0KKwkJ CQkJT0JKRUNUX1RZUEVfQ09NUE9TSVRFX1RZUEU7CisJCQkJYnJlYWs7CisKKwkJCWNhc2Ug UkVMS0lORF9GT1JFSUdOX1RBQkxFOgorCQkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVu dC5vYmplY3RUeXBlID0KKwkJCQkJT0JKRUNUX1RZUEVfRk9SRUlHTl9UQUJMRTsKKwkJCQli cmVhazsKKworCQkJY2FzZSBSRUxLSU5EX01BVFZJRVc6CisJCQkJYXVkaXRFdmVudFN0YWNr LT5hdWRpdEV2ZW50Lm9iamVjdFR5cGUgPQorCQkJCQlPQkpFQ1RfVFlQRV9NQVRWSUVXOwor CQkJCWJyZWFrOworCisJCQkvKgorCQkJICogQW55IG90aGVyIGNhc2VzIHdpbGwgYmUgaGFu ZGxlZCBieSBsb2dfdXRpbGl0eV9jb21tYW5kKCkuCisJCQkgKi8KKwkJCWRlZmF1bHQ6CisJ CQkJcmV0dXJuOworCQkJCWJyZWFrOworCQl9CisJfQorfQorCisvKgorICogQ3JlYXRlIEF1 ZGl0RXZlbnRzIGZvciBub24tY2F0YWxvZyBmdW5jdGlvbiBleGVjdXRpb24sIGFzIGRldGVj dGVkIGJ5CisgKiBsb2dfb2JqZWN0X2FjY2VzcygpIGJlbG93LgorICovCitzdGF0aWMgdm9p ZAorbG9nX2Z1bmN0aW9uX2V4ZWN1dGUoT2lkIG9iamVjdElkKQoreworCUhlYXBUdXBsZSBw cm9jdHVwOworCUZvcm1fcGdfcHJvYyBwcm9jOworCUF1ZGl0RXZlbnRTdGFja0l0ZW0gKnN0 YWNrSXRlbTsKKworCS8qIEdldCBpbmZvIGFib3V0IHRoZSBmdW5jdGlvbi4gKi8KKwlwcm9j dHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0 SWQpKTsKKworCWlmICghcHJvY3R1cCkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBm YWlsZWQgZm9yIGZ1bmN0aW9uICV1Iiwgb2JqZWN0SWQpOworCXByb2MgPSAoRm9ybV9wZ19w cm9jKSBHRVRTVFJVQ1QocHJvY3R1cCk7CisKKwkvKgorCSAqIExvZ2dpbmcgZXhlY3V0aW9u IG9mIGFsbCBwZ19jYXRhbG9nIGZ1bmN0aW9ucyB3b3VsZCBtYWtlIHRoZSBsb2cKKwkgKiB1 bnVzYWJseSBub2lzeS4KKwkgKi8KKwlpZiAoSXNTeXN0ZW1OYW1lc3BhY2UocHJvYy0+cHJv bmFtZXNwYWNlKSkKKwl7CisJCVJlbGVhc2VTeXNDYWNoZShwcm9jdHVwKTsKKwkJcmV0dXJu OworCX0KKworCS8qIFB1c2ggYXVkaXQgZXZlbnQgb250byB0aGUgc3RhY2sgKi8KKwlzdGFj a0l0ZW0gPSBzdGFja19wdXNoKCk7CisKKwkvKiBHZW5lcmF0ZSB0aGUgZnVsbHktcXVhbGlm aWVkIGZ1bmN0aW9uIG5hbWUuICovCisJc3RhY2tJdGVtLT5hdWRpdEV2ZW50Lm9iamVjdE5h bWUgPQorCQlxdW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihnZXRfbmFtZXNwYWNlX25hbWUo cHJvYy0+cHJvbmFtZXNwYWNlKSwKKwkJCQkJCQkJICAgTmFtZVN0cihwcm9jLT5wcm9uYW1l KSk7CisJUmVsZWFzZVN5c0NhY2hlKHByb2N0dXApOworCisJLyogTG9nIHRoZSBmdW5jdGlv biBjYWxsICovCisJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmxvZ1N0bXRMZXZlbCA9IExPR1NU TVRfQUxMOworCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5jb21tYW5kVGFnID0gVF9Eb1N0bXQ7 CisJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmNvbW1hbmQgPSBDT01NQU5EX0VYRUNVVEU7CisJ c3RhY2tJdGVtLT5hdWRpdEV2ZW50Lm9iamVjdFR5cGUgPSBPQkpFQ1RfVFlQRV9GVU5DVElP TjsKKwlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZFRleHQgPSBzdGFja0l0ZW0tPm5l eHQtPmF1ZGl0RXZlbnQuY29tbWFuZFRleHQ7CisKKwlsb2dfYXVkaXRfZXZlbnQoc3RhY2tJ dGVtKTsKKworCS8qIFBvcCBhdWRpdCBldmVudCBmcm9tIHRoZSBzdGFjayAqLworCXN0YWNr X3BvcChzdGFja0l0ZW0tPnN0YWNrSWQpOworfQorCisvKgorICogTG9nIG9iamVjdCBhY2Nl c3NlcyAod2hpY2ggaXMgbW9yZSBhYm91dCBEREwgdGhhbiBETUwsIGV2ZW4gdGhvdWdoIGl0 CisgKiBzb3VuZHMgbGlrZSB0aGUgbGF0dGVyKS4KKyAqLworc3RhdGljIHZvaWQKK2xvZ19v YmplY3RfYWNjZXNzKE9iamVjdEFjY2Vzc1R5cGUgYWNjZXNzLAorCQkJCSAgT2lkIGNsYXNz SWQsCisJCQkJICBPaWQgb2JqZWN0SWQsCisJCQkJICBpbnQgc3ViSWQsCisJCQkJICB2b2lk ICphcmcpCit7CisJc3dpdGNoIChhY2Nlc3MpCisJeworCQkvKiBMb2cgZXhlY3V0ZSAqLwor CQljYXNlIE9BVF9GVU5DVElPTl9FWEVDVVRFOgorCQkJaWYgKGF1ZGl0TG9nQml0bWFwICYg TE9HX0ZVTkNUSU9OKQorCQkJCWxvZ19mdW5jdGlvbl9leGVjdXRlKG9iamVjdElkKTsKKwkJ CWJyZWFrOworCisJCS8qIExvZyBjcmVhdGUgKi8KKwkJY2FzZSBPQVRfUE9TVF9DUkVBVEU6 CisJCQlpZiAoYXVkaXRMb2dCaXRtYXAgJiBMT0dfRERMKQorCQkJeworCQkJCU9iamVjdEFj Y2Vzc1Bvc3RDcmVhdGUgKnBjID0gYXJnOworCisJCQkJaWYgKHBjLT5pc19pbnRlcm5hbCkK KwkJCQkJcmV0dXJuOworCisJCQkJbG9nX2NyZWF0ZV9hbHRlcl9kcm9wKGNsYXNzSWQsIG9i amVjdElkKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCS8qIExvZyBhbHRlciAqLworCQljYXNl IE9BVF9QT1NUX0FMVEVSOgorCQkJaWYgKGF1ZGl0TG9nQml0bWFwICYgTE9HX0RETCkKKwkJ CXsKKwkJCQlPYmplY3RBY2Nlc3NQb3N0QWx0ZXIgKnBhID0gYXJnOworCisJCQkJaWYgKHBh LT5pc19pbnRlcm5hbCkKKwkJCQkJcmV0dXJuOworCisJCQkJbG9nX2NyZWF0ZV9hbHRlcl9k cm9wKGNsYXNzSWQsIG9iamVjdElkKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCS8qIExvZyBk cm9wICovCisJCWNhc2UgT0FUX0RST1A6CisJCQlpZiAoYXVkaXRMb2dCaXRtYXAgJiBMT0df RERMKQorCQkJeworCQkJCU9iamVjdEFjY2Vzc0Ryb3AgKmRyb3AgPSBhcmc7CisKKwkJCQlp ZiAoZHJvcC0+ZHJvcGZsYWdzICYgUEVSRk9STV9ERUxFVElPTl9JTlRFUk5BTCkKKwkJCQkJ cmV0dXJuOworCisJCQkJbG9nX2NyZWF0ZV9hbHRlcl9kcm9wKGNsYXNzSWQsIG9iamVjdElk KTsKKwkJCX0KKwkJCWJyZWFrOworCisJCS8qIEFsbCBvdGhlcnMgcHJvY2Vzc2VkIGJ5IGxv Z191dGlsaXR5X2NvbW1hbmQoKSAqLworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorfQor CisvKgorICogSG9vayBmdW5jdGlvbnMKKyAqLworc3RhdGljIEV4ZWN1dG9yQ2hlY2tQZXJt c19ob29rX3R5cGUgbmV4dF9FeGVjdXRvckNoZWNrUGVybXNfaG9vayA9IE5VTEw7CitzdGF0 aWMgUHJvY2Vzc1V0aWxpdHlfaG9va190eXBlIG5leHRfUHJvY2Vzc1V0aWxpdHlfaG9vayA9 IE5VTEw7CitzdGF0aWMgb2JqZWN0X2FjY2Vzc19ob29rX3R5cGUgbmV4dF9vYmplY3RfYWNj ZXNzX2hvb2sgPSBOVUxMOworc3RhdGljIEV4ZWN1dG9yU3RhcnRfaG9va190eXBlIG5leHRf RXhlY3V0b3JTdGFydF9ob29rID0gTlVMTDsKKworLyoKKyAqIEhvb2sgRXhlY3V0b3JTdGFy dCB0byBnZXQgdGhlIHF1ZXJ5IHRleHQgYW5kIGJhc2ljIGNvbW1hbmQgdHlwZSBmb3IgcXVl cmllcworICogdGhhdCBkbyBub3QgY29udGFpbiBhIHRhYmxlIHNvIGNhbid0IGJlIGlkZW5p dGlmaWVkIGFjY3VyYXRlbHkgaW4KKyAqIEV4ZWN1dG9yQ2hlY2tQZXJtcy4KKyAqLworc3Rh dGljIHZvaWQKK3BnX2F1ZGl0X0V4ZWN1dG9yU3RhcnRfaG9vayhRdWVyeURlc2MgKnF1ZXJ5 RGVzYywgaW50IGVmbGFncykKK3sKKwlBdWRpdEV2ZW50U3RhY2tJdGVtICpzdGFja0l0ZW0g PSBOVUxMOworCisJaWYgKCFpbnRlcm5hbFN0YXRlbWVudCkKKwl7CisJCS8qIEFsbG9jYXRl IHRoZSBhdWRpdCBldmVudCAqLworCQlzdGFja0l0ZW0gPSBzdGFja19wdXNoKCk7CisKKwkJ LyogSW5pdGlhbGl6ZSBjb21tYW5kICovCisJCXN3aXRjaCAocXVlcnlEZXNjLT5vcGVyYXRp b24pCisJCXsKKwkJCWNhc2UgQ01EX1NFTEVDVDoKKwkJCQlzdGFja0l0ZW0tPmF1ZGl0RXZl bnQubG9nU3RtdExldmVsID0gTE9HU1RNVF9BTEw7CisJCQkJc3RhY2tJdGVtLT5hdWRpdEV2 ZW50LmNvbW1hbmRUYWcgPSBUX1NlbGVjdFN0bXQ7CisJCQkJc3RhY2tJdGVtLT5hdWRpdEV2 ZW50LmNvbW1hbmQgPSBDT01NQU5EX1NFTEVDVDsKKwkJCQlicmVhazsKKworCQkJY2FzZSBD TURfSU5TRVJUOgorCQkJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5sb2dTdG10TGV2ZWwgPSBM T0dTVE1UX01PRDsKKwkJCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZFRhZyA9IFRf SW5zZXJ0U3RtdDsKKwkJCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZCA9IENPTU1B TkRfSU5TRVJUOworCQkJCWJyZWFrOworCisJCQljYXNlIENNRF9VUERBVEU6CisJCQkJc3Rh Y2tJdGVtLT5hdWRpdEV2ZW50LmxvZ1N0bXRMZXZlbCA9IExPR1NUTVRfTU9EOworCQkJCXN0 YWNrSXRlbS0+YXVkaXRFdmVudC5jb21tYW5kVGFnID0gVF9VcGRhdGVTdG10OworCQkJCXN0 YWNrSXRlbS0+YXVkaXRFdmVudC5jb21tYW5kID0gQ09NTUFORF9VUERBVEU7CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgQ01EX0RFTEVURToKKwkJCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQu bG9nU3RtdExldmVsID0gTE9HU1RNVF9NT0Q7CisJCQkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50 LmNvbW1hbmRUYWcgPSBUX0RlbGV0ZVN0bXQ7CisJCQkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50 LmNvbW1hbmQgPSBDT01NQU5EX0RFTEVURTsKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoK KwkJCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQubG9nU3RtdExldmVsID0gTE9HU1RNVF9BTEw7 CisJCQkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmNvbW1hbmRUYWcgPSBUX0ludmFsaWQ7CisJ CQkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmNvbW1hbmQgPSBDT01NQU5EX1VOS05PV047CisJ CQkJYnJlYWs7CisJCX0KKworCQkvKiBJbml0aWFsaXplIHRoZSBhdWRpdCBldmVudCAqLwor CQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZFRleHQgPSBxdWVyeURlc2MtPnNvdXJj ZVRleHQ7CisJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5wYXJhbUxpc3QgPSBxdWVyeURlc2Mt PnBhcmFtczsKKwl9CisKKwkvKiBDYWxsIHRoZSBwcmV2aW91cyBob29rIG9yIHN0YW5kYXJk IGZ1bmN0aW9uICovCisJaWYgKG5leHRfRXhlY3V0b3JTdGFydF9ob29rKQorCQluZXh0X0V4 ZWN1dG9yU3RhcnRfaG9vayhxdWVyeURlc2MsIGVmbGFncyk7CisJZWxzZQorCQlzdGFuZGFy ZF9FeGVjdXRvclN0YXJ0KHF1ZXJ5RGVzYywgZWZsYWdzKTsKKworCS8qCisJICogTW92ZSB0 aGUgc3RhY2sgbWVtb3J5IGNvbnRleHQgdG8gdGhlIHF1ZXJ5IG1lbW9yeSBjb250ZXh0LiAg VGhpcyBuZWVkcyB0bworCSAqIGJlIGRvbmUgaGVyZSBiZWNhdXNlIHRoZSBxdWVyeSBjb250 ZXh0IGRvZXMgbm90IGV4aXN0IGJlZm9yZSB0aGUgY2FsbAorCSAqIHRvIHN0YW5kYXJkX0V4 ZWN1dG9yU3RhcnQoKSBidXQgdGhlIHN0YWNrIGl0ZW0gaXMgcmVxdWlyZWQgYnkKKwkgKiBw Z19hdWRpdF9FeGVjdXRvckNoZWNrUGVybXNfaG9vaygpIHdoaWNoIGlzIGNhbGxlZCBkdXJp bmcKKwkgKiBzdGFuZGFyZF9FeGVjdXRvclN0YXJ0KCkuCisJICovCisJaWYgKHN0YWNrSXRl bSkKKwl7CisJCU1lbW9yeUNvbnRleHRTZXRQYXJlbnQoc3RhY2tJdGVtLT5jb250ZXh0QXVk aXQsCisJCQkJCQkJICAgcXVlcnlEZXNjLT5lc3RhdGUtPmVzX3F1ZXJ5X2N4dCk7CisJfQor fQorCisvKgorICogSG9vayBFeGVjdXRvckNoZWNrUGVybXMgdG8gZG8gc2Vzc2lvbiBhbmQg b2JqZWN0IGF1ZGl0aW5nIGZvciBETUwuCisgKi8KK3N0YXRpYyBib29sCitwZ19hdWRpdF9F eGVjdXRvckNoZWNrUGVybXNfaG9vayhMaXN0ICpyYW5nZVRhYmxzLCBib29sIGFib3J0KQor eworCU9pZCBhdWRpdE9pZDsKKworCS8qIEdldCB0aGUgYXVkaXQgb2lkIGlmIHRoZSByb2xl IGV4aXN0cy4gKi8KKwlhdWRpdE9pZCA9IGdldF9yb2xlX29pZChhdWRpdFJvbGUsIHRydWUp OworCisJLyogTG9nIERNTCBpZiB0aGUgYXVkaXQgcm9sZSBpcyB2YWxpZCBvciBzZXNzaW9u IGxvZ2dpbmcgaXMgZW5hYmxlZC4gKi8KKwlpZiAoKGF1ZGl0T2lkICE9IEludmFsaWRPaWQg fHwgYXVkaXRMb2dCaXRtYXAgIT0gMCkgJiYKKwkJIUlzQWJvcnRlZFRyYW5zYWN0aW9uQmxv Y2tTdGF0ZSgpKQorCQlsb2dfc2VsZWN0X2RtbChhdWRpdE9pZCwgcmFuZ2VUYWJscyk7CisK KwkvKiBDYWxsIHRoZSBuZXh0IGhvb2sgZnVuY3Rpb24uICovCisJaWYgKG5leHRfRXhlY3V0 b3JDaGVja1Blcm1zX2hvb2sgJiYKKwkJISgqbmV4dF9FeGVjdXRvckNoZWNrUGVybXNfaG9v aykgKHJhbmdlVGFibHMsIGFib3J0KSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRy dWU7Cit9CisKKy8qCisgKiBIb29rIFByb2Nlc3NVdGlsaXR5IHRvIGRvIHNlc3Npb24gYXVk aXRpbmcgZm9yIERETCBhbmQgdXRpbGl0eSBjb21tYW5kcy4KKyAqLworc3RhdGljIHZvaWQK K3BnX2F1ZGl0X1Byb2Nlc3NVdGlsaXR5X2hvb2soTm9kZSAqcGFyc2V0cmVlLAorCQkJCQkJ CSBjb25zdCBjaGFyICpxdWVyeVN0cmluZywKKwkJCQkJCQkgUHJvY2Vzc1V0aWxpdHlDb250 ZXh0IGNvbnRleHQsCisJCQkJCQkJIFBhcmFtTGlzdEluZm8gcGFyYW1zLAorCQkJCQkJCSBE ZXN0UmVjZWl2ZXIgKmRlc3QsCisJCQkJCQkJIGNoYXIgKmNvbXBsZXRpb25UYWcpCit7CisJ QXVkaXRFdmVudFN0YWNrSXRlbSAqc3RhY2tJdGVtID0gTlVMTDsKKwlpbnQ2NCBzdGFja0lk OworCisJLyogQWxsb2NhdGUgdGhlIGF1ZGl0IGV2ZW50ICovCisJaWYgKCFJc0Fib3J0ZWRU cmFuc2FjdGlvbkJsb2NrU3RhdGUoKSkKKwl7CisJCS8qIFByb2Nlc3MgdG9wIGxldmVsIHV0 aWxpdHkgc3RhdGVtZW50ICovCisJCWlmIChjb250ZXh0ID09IFBST0NFU1NfVVRJTElUWV9U T1BMRVZFTCkKKwkJeworCQkJaWYgKGF1ZGl0RXZlbnRTdGFjayAhPSBOVUxMKQorCQkJCWVs b2coRVJST1IsICJwZ19hdWRpdCBzdGFjayBpcyBub3QgZW1wdHkiKTsKKworCQkJLyogU2V0 IHBhcmFtcyAqLworCQkJc3RhY2tJdGVtID0gc3RhY2tfcHVzaCgpOworCQkJc3RhY2tJdGVt LT5hdWRpdEV2ZW50LnBhcmFtTGlzdCA9IHBhcmFtczsKKwkJfQorCQllbHNlCisJCQlzdGFj a0l0ZW0gPSBzdGFja19wdXNoKCk7CisKKwkJc3RhY2tJZCA9IHN0YWNrSXRlbS0+c3RhY2tJ ZDsKKwkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmxvZ1N0bXRMZXZlbCA9IEdldENvbW1hbmRM b2dMZXZlbChwYXJzZXRyZWUpOworCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZFRh ZyA9IG5vZGVUYWcocGFyc2V0cmVlKTsKKwkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmNvbW1h bmQgPSBDcmVhdGVDb21tYW5kVGFnKHBhcnNldHJlZSk7CisJCXN0YWNrSXRlbS0+YXVkaXRF dmVudC5jb21tYW5kVGV4dCA9IHF1ZXJ5U3RyaW5nOworCisJCS8qCisJCSAqIElmIHRoaXMg aXMgYSBETyBibG9jayBsb2cgaXQgYmVmb3JlIGNhbGxpbmcgdGhlIG5leHQgUHJvY2Vzc1V0 aWxpdHkKKwkJICogaG9vay4KKwkJICovCisJCWlmIChhdWRpdExvZ0JpdG1hcCAhPSAwICYm CisJCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZFRhZyA9PSBUX0RvU3RtdCAmJgor CQkJIUlzQWJvcnRlZFRyYW5zYWN0aW9uQmxvY2tTdGF0ZSgpKQorCQl7CisJCQlsb2dfYXVk aXRfZXZlbnQoc3RhY2tJdGVtKTsKKwkJfQorCX0KKworCS8qIENhbGwgdGhlIHN0YW5kYXJk IHByb2Nlc3MgdXRpbGl0eSBjaGFpbi4gKi8KKwlpZiAobmV4dF9Qcm9jZXNzVXRpbGl0eV9o b29rKQorCQkoKm5leHRfUHJvY2Vzc1V0aWxpdHlfaG9vaykgKHBhcnNldHJlZSwgcXVlcnlT dHJpbmcsIGNvbnRleHQsCisJCQkJCQkJCQkgcGFyYW1zLCBkZXN0LCBjb21wbGV0aW9uVGFn KTsKKwllbHNlCisJCXN0YW5kYXJkX1Byb2Nlc3NVdGlsaXR5KHBhcnNldHJlZSwgcXVlcnlT dHJpbmcsIGNvbnRleHQsCisJCQkJCQkJCXBhcmFtcywgZGVzdCwgY29tcGxldGlvblRhZyk7 CisKKwkvKgorCSAqIFByb2Nlc3MgdGhlIGF1ZGl0IGV2ZW50IGlmIHRoZXJlIGlzIG9uZS4g IEFsc28gY2hlY2sgdGhhdCB0aGlzIGV2ZW50IHdhcworCSAqIG5vdCBwb3BwZWQgb2ZmIHRo ZSBzdGFjayBieSBhIG1lbW9yeSBjb250ZXh0IGJlaW5nIGZyZWVkIGVsc2V3aGVyZS4KKwkg Ki8KKwlpZiAoc3RhY2tJdGVtKQorCXsKKwkJLyoKKwkJICogTWFrZSBzdXJlIHRoZSBpdGVt IHdlIHdhbnQgdG8gbG9nIGlzIHN0aWxsIG9uIHRoZSBzdGFjayAtIGlmIG5vdCB0aGVuCisJ CSAqIHNvbWV0aGluZyBoYXMgZ29uZSB3cm9uZyBhbmQgYW4gZXJyb3Igd2lsbCBiZSByYWlz ZWQuCisJCSAqLworCQlzdGFja192YWxpZChzdGFja0lkKTsKKworCQkvKiBMb2cgdGhlIHV0 aWxpdHkgY29tbWFuZCBpZiBsb2dnaW5nIGlzIG9uLCB0aGUgY29tbWFuZCBoYXMgbm90IGFs cmVhZHkKKwkJICogYmVlbiBsb2dnZWQgYnkgYW5vdGhlciBob29rLCBhbmQgdGhlIHRyYW5z YWN0aW9uIGlzIG5vdCBhYm9ydGVkLiAqLworCQlpZiAoYXVkaXRMb2dCaXRtYXAgIT0gMCAm JiAhc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmxvZ2dlZCAmJgorCQkJIUlzQWJvcnRlZFRyYW5z YWN0aW9uQmxvY2tTdGF0ZSgpKQorCQkJbG9nX2F1ZGl0X2V2ZW50KHN0YWNrSXRlbSk7CisJ fQorfQorCisvKgorICogSG9vayBvYmplY3RfYWNjZXNzX2hvb2sgdG8gcHJvdmlkZSBmdWxs eS1xdWFsaWZpZWQgb2JqZWN0IG5hbWVzIGZvciBleGVjdXRlLAorICogY3JlYXRlLCBkcm9w LCBhbmQgYWx0ZXIgY29tbWFuZHMuICBNb3N0IG9mIHRoZSBhdWRpdCBpbmZvcm1hdGlvbiBp cyBmaWxsZWQgaW4KKyAqIGJ5IGxvZ191dGlsaXR5X2NvbW1hbmQoKS4KKyAqLworc3RhdGlj IHZvaWQKK3BnX2F1ZGl0X29iamVjdF9hY2Nlc3NfaG9vayhPYmplY3RBY2Nlc3NUeXBlIGFj Y2VzcywKKwkJCQkJCQlPaWQgY2xhc3NJZCwKKwkJCQkJCQlPaWQgb2JqZWN0SWQsCisJCQkJ CQkJaW50IHN1YklkLAorCQkJCQkJCXZvaWQgKmFyZykKK3sKKwlpZiAoYXVkaXRMb2dCaXRt YXAgIT0gMCAmJiAhSXNBYm9ydGVkVHJhbnNhY3Rpb25CbG9ja1N0YXRlKCkgJiYKKwkJYXVk aXRMb2dCaXRtYXAgJiAoTE9HX0RETCB8IExPR19GVU5DVElPTikgJiYgYXVkaXRFdmVudFN0 YWNrKQorCQlsb2dfb2JqZWN0X2FjY2VzcyhhY2Nlc3MsIGNsYXNzSWQsIG9iamVjdElkLCBz dWJJZCwgYXJnKTsKKworCWlmIChuZXh0X29iamVjdF9hY2Nlc3NfaG9vaykKKwkJKCpuZXh0 X29iamVjdF9hY2Nlc3NfaG9vaykgKGFjY2VzcywgY2xhc3NJZCwgb2JqZWN0SWQsIHN1Yklk LCBhcmcpOworfQorCisvKgorICogRXZlbnQgdHJpZ2dlciBmdW5jdGlvbnMKKyAqLworCisv KgorICogU3VwcGx5IGFkZGl0aW9uYWwgZGF0YSBmb3IgKG5vbiBkcm9wKSBzdGF0ZW1lbnRz IHRoYXQgaGF2ZSBldmVudCB0cmlnZ2VyCisgKiBzdXBwb3J0IGFuZCBjYW4gYmUgZGVwYXJz ZWQuCisgKi8KK0RhdHVtCitwZ19hdWRpdF9kZGxfY29tbWFuZF9lbmQoUEdfRlVOQ1RJT05f QVJHUykKK3sKKyNpZmRlZiBERVBBUlNFCisJLyogQ29udGludWUgb25seSBpZiBzZXNzaW9u IERETCBsb2dnaW5nIGlzIGVuYWJsZWQgKi8KKwlpZiAoYXVkaXRMb2dCaXRtYXAgJiBMT0df RERMKQorCXsKKwkJRXZlbnRUcmlnZ2VyRGF0YSAqZXZlbnREYXRhOworCQlpbnQJCQkJICBy ZXN1bHQsIHJvdzsKKwkJVHVwbGVEZXNjCQkgIHNwaVR1cERlc2M7CisJCWNvbnN0IGNoYXIJ CSAqcXVlcnk7CisJCU1lbW9yeUNvbnRleHQgCSAgY29udGV4dFF1ZXJ5OworCQlNZW1vcnlD b250ZXh0IAkgIGNvbnRleHRPbGQ7CisKKwkJLyogQmUgc3VyZSB0aGUgbW9kdWxlIHdhcyBs b2FkZWQgKi8KKwkJaWYgKCFhdWRpdEV2ZW50U3RhY2spCisJCXsKKwkJCWVsb2coRVJST1Is ICJwZ19hdWRpdCBub3QgbG9hZGVkIGJlZm9yZSBjYWxsIHRvIHBnX2F1ZGl0X2RkbF9jb21t YW5kX2VuZCgpIik7CisJCX0KKworCQkvKiBUaGlzIGlzIGFuIGludGVybmFsIHN0YXRlbWVu dCAtIGRvIG5vdCBsb2cgaXQgKi8KKwkJaW50ZXJuYWxTdGF0ZW1lbnQgPSB0cnVlOworCisJ CS8qIE1ha2Ugc3VyZSB0aGUgZnVjdGlvbiB3YXMgZmlyZWQgYXMgYSB0cmlnZ2VyICovCisJ CWlmICghQ0FMTEVEX0FTX0VWRU5UX1RSSUdHRVIoZmNpbmZvKSkKKwkJCWVsb2coRVJST1Is ICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisKKwkJLyogU3dpdGNo IG1lbW9yeSBjb250ZXh0ICovCisJCWNvbnRleHRRdWVyeSA9IEFsbG9jU2V0Q29udGV4dENy ZWF0ZSgKKwkJCQkJCUN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJInBnX2F1ZGl0X2Z1 bmNfZGRsX2NvbW1hbmRfZW5kIHRlbXBvcmFyeSBjb250ZXh0IiwKKwkJCQkJCUFMTE9DU0VU X0RFRkFVTFRfTUlOU0laRSwKKwkJCQkJCUFMTE9DU0VUX0RFRkFVTFRfSU5JVFNJWkUsCisJ CQkJCQlBTExPQ1NFVF9ERUZBVUxUX01BWFNJWkUpOworCQljb250ZXh0T2xkID0gTWVtb3J5 Q29udGV4dFN3aXRjaFRvKGNvbnRleHRRdWVyeSk7CisKKwkJLyogR2V0IGluZm9ybWF0aW9u IGFib3V0IHRyaWdnZXJlZCBldmVudHMgKi8KKwkJZXZlbnREYXRhID0gKEV2ZW50VHJpZ2dl ckRhdGEgKikgZmNpbmZvLT5jb250ZXh0OworCisJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRF dmVudC5sb2dTdG10TGV2ZWwgPQorCQkJR2V0Q29tbWFuZExvZ0xldmVsKGV2ZW50RGF0YS0+ cGFyc2V0cmVlKTsKKwkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmNvbW1hbmRUYWcg PQorCQkJbm9kZVRhZyhldmVudERhdGEtPnBhcnNldHJlZSk7CisJCWF1ZGl0RXZlbnRTdGFj ay0+YXVkaXRFdmVudC5jb21tYW5kID0KKwkJCUNyZWF0ZUNvbW1hbmRUYWcoZXZlbnREYXRh LT5wYXJzZXRyZWUpOworCisJCS8qIFJldHVybiBvYmplY3RzIGFmZmVjdGVkIGJ5IHRoZSAo bm9uIGRyb3ApIERETCBzdGF0ZW1lbnQgKi8KKwkJcXVlcnkgPSAiU0VMRUNUIFVQUEVSKG9i amVjdF90eXBlKSwgaWRlbnRpdHlcbiIKKwkJCQkiICBGUk9NIHBnX2V2ZW50X3RyaWdnZXJf ZGRsX2NvbW1hbmRzKCkiOworCisJCS8qIEF0dGVtcHQgdG8gY29ubmVjdCAqLworCQlyZXN1 bHQgPSBTUElfY29ubmVjdCgpOworCisJCWlmIChyZXN1bHQgPCAwKQorCQkJZWxvZyhFUlJP UiwgInBnX2F1ZGl0X2RkbF9jb21tYW5kX2VuZDogU1BJX2Nvbm5lY3QgcmV0dXJuZWQgJWQi LAorCQkJCQkJcmVzdWx0KTsKKworCQkvKiBFeGVjdXRlIHRoZSBxdWVyeSAqLworCQlyZXN1 bHQgPSBTUElfZXhlY3V0ZShxdWVyeSwgdHJ1ZSwgMCk7CisKKwkJaWYgKHJlc3VsdCAhPSBT UElfT0tfU0VMRUNUKQorCQkJZWxvZyhFUlJPUiwgInBnX2F1ZGl0X2RkbF9jb21tYW5kX2Vu ZDogU1BJX2V4ZWN1dGUgcmV0dXJuZWQgJWQiLAorCQkJCQkJcmVzdWx0KTsKKworCQkvKiBJ dGVyYXRlIHJldHVybmVkIHJvd3MgKi8KKwkJc3BpVHVwRGVzYyA9IFNQSV90dXB0YWJsZS0+ dHVwZGVzYzsKKworCQlmb3IgKHJvdyA9IDA7IHJvdyA8IFNQSV9wcm9jZXNzZWQ7IHJvdysr KQorCQl7CisJCQlIZWFwVHVwbGUgIHNwaVR1cGxlOworCisJCQlzcGlUdXBsZSA9IFNQSV90 dXB0YWJsZS0+dmFsc1tyb3ddOworCisJCQkvKiBTdXBwbHkgb2JqZWN0IG5hbWUgYW5kIHR5 cGUgZm9yIGF1ZGl0IGV2ZW50ICovCisJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQu b2JqZWN0VHlwZSA9CisJCQkJU1BJX2dldHZhbHVlKHNwaVR1cGxlLCBzcGlUdXBEZXNjLCAx KTsKKwkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5vYmplY3ROYW1lID0KKwkJCQlT UElfZ2V0dmFsdWUoc3BpVHVwbGUsIHNwaVR1cERlc2MsIDIpOworCisJCQkvKiBMb2cgdGhl IGF1ZGl0IGV2ZW50ICovCisJCQlsb2dfYXVkaXRfZXZlbnQoYXVkaXRFdmVudFN0YWNrKTsK KwkJfQorCisJCS8qIENvbXBsZXRlIHRoZSBxdWVyeSAqLworCQlTUElfZmluaXNoKCk7CisK KwkJLyogU3dpdGNoIHRvIHRoZSBvbGQgbWVtb3J5IGNvbnRleHQgKi8KKwkJTWVtb3J5Q29u dGV4dFN3aXRjaFRvKGNvbnRleHRPbGQpOworCQlNZW1vcnlDb250ZXh0RGVsZXRlKGNvbnRl eHRRdWVyeSk7CisKKwkJLyogTm8gbG9uZ2VyIGluIGFuIGludGVybmFsIHN0YXRlbWVudCAq LworCQlpbnRlcm5hbFN0YXRlbWVudCA9IGZhbHNlOworCX0KKyNlbmRpZgorCisJUEdfUkVU VVJOX05VTEwoKTsKK30KKworLyoKKyAqIFN1cHBseSBhZGRpdGlvbmFsIGRhdGEgZm9yIGRy b3Agc3RhdGVtZW50cyB0aGF0IGhhdmUgZXZlbnQgdHJpZ2dlciBzdXBwb3J0LgorICovCitE YXR1bQorcGdfYXVkaXRfc3FsX2Ryb3AoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlpZiAoYXVk aXRMb2dCaXRtYXAgJiBMT0dfRERMKQorCXsKKwkJaW50CQkJCSAgcmVzdWx0LCByb3c7CisJ CVR1cGxlRGVzYwkJICBzcGlUdXBEZXNjOworCQljb25zdCBjaGFyCQkgKnF1ZXJ5OworCQlN ZW1vcnlDb250ZXh0IAkgIGNvbnRleHRRdWVyeTsKKwkJTWVtb3J5Q29udGV4dCAJICBjb250 ZXh0T2xkOworCisJCS8qIEJlIHN1cmUgdGhlIG1vZHVsZSB3YXMgbG9hZGVkICovCisJCWlm ICghYXVkaXRFdmVudFN0YWNrKQorCQl7CisJCQllbG9nKEVSUk9SLCAicGdfYXVkaXQgbm90 IGxvYWRlZCBiZWZvcmUgY2FsbCB0byBwZ19hdWRpdF9zcWxfZHJvcCgpIik7CisJCX0KKwor CQkvKiBUaGlzIGlzIGFuIGludGVybmFsIHN0YXRlbWVudCAtIGRvIG5vdCBsb2cgaXQgKi8K KwkJaW50ZXJuYWxTdGF0ZW1lbnQgPSB0cnVlOworCisJCS8qIE1ha2Ugc3VyZSB0aGUgZnVj dGlvbiB3YXMgZmlyZWQgYXMgYSB0cmlnZ2VyICovCisJCWlmICghQ0FMTEVEX0FTX0VWRU5U X1RSSUdHRVIoZmNpbmZvKSkKKwkJCWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQg dHJpZ2dlciBtYW5hZ2VyIik7CisKKwkJLyogU3dpdGNoIG1lbW9yeSBjb250ZXh0ICovCisJ CWNvbnRleHRRdWVyeSA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZSgKKwkJCQkJCUN1cnJlbnRN ZW1vcnlDb250ZXh0LAorCQkJCQkJInBnX2F1ZGl0X2Z1bmNfZGRsX2NvbW1hbmRfZW5kIHRl bXBvcmFyeSBjb250ZXh0IiwKKwkJCQkJCUFMTE9DU0VUX0RFRkFVTFRfTUlOU0laRSwKKwkJ CQkJCUFMTE9DU0VUX0RFRkFVTFRfSU5JVFNJWkUsCisJCQkJCQlBTExPQ1NFVF9ERUZBVUxU X01BWFNJWkUpOworCQljb250ZXh0T2xkID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGNvbnRl eHRRdWVyeSk7CisKKwkJLyogUmV0dXJuIG9iamVjdHMgYWZmZWN0ZWQgYnkgdGhlIGRyb3Ag c3RhdGVtZW50ICovCisJCXF1ZXJ5ID0gIlNFTEVDVCBVUFBFUihvYmplY3RfdHlwZSksXG4i CisJCQkJIiAgICAgICBvYmplY3RfaWRlbnRpdHlcbiIKKwkJCQkiICBGUk9NIHBnX2V2ZW50 X3RyaWdnZXJfZHJvcHBlZF9vYmplY3RzKClcbiIKKwkJCQkiIFdIRVJFIGxvd2VyKG9iamVj dF90eXBlKSA8PiAndHlwZSdcbiIKKwkJCQkiICAgQU5EIHNjaGVtYV9uYW1lIDw+ICdwZ190 b2FzdCciOworCisJCS8qIEF0dGVtcHQgdG8gY29ubmVjdCAqLworCQlyZXN1bHQgPSBTUElf Y29ubmVjdCgpOworCisJCWlmIChyZXN1bHQgPCAwKQorCQkJZWxvZyhFUlJPUiwgInBnX2F1 ZGl0X2RkbF9kcm9wOiBTUElfY29ubmVjdCByZXR1cm5lZCAlZCIsCisJCQkJCQlyZXN1bHQp OworCisJCS8qIEV4ZWN1dGUgdGhlIHF1ZXJ5ICovCisJCXJlc3VsdCA9IFNQSV9leGVjdXRl KHF1ZXJ5LCB0cnVlLCAwKTsKKworCQlpZiAocmVzdWx0ICE9IFNQSV9PS19TRUxFQ1QpCisJ CQllbG9nKEVSUk9SLCAicGdfYXVkaXRfZGRsX2Ryb3A6IFNQSV9leGVjdXRlIHJldHVybmVk ICVkIiwKKwkJCQkJCXJlc3VsdCk7CisKKwkJLyogSXRlcmF0ZSByZXR1cm5lZCByb3dzICov CisJCXNwaVR1cERlc2MgPSBTUElfdHVwdGFibGUtPnR1cGRlc2M7CisKKwkJZm9yIChyb3cg PSAwOyByb3cgPCBTUElfcHJvY2Vzc2VkOyByb3crKykKKwkJeworCQkJSGVhcFR1cGxlICBz cGlUdXBsZTsKKworCQkJc3BpVHVwbGUgPSBTUElfdHVwdGFibGUtPnZhbHNbcm93XTsKKwor CQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50Lm9iamVjdFR5cGUgPQorCQkJCVNQSV9n ZXR2YWx1ZShzcGlUdXBsZSwgc3BpVHVwRGVzYywgMSk7CisJCQlhdWRpdEV2ZW50U3RhY2st PmF1ZGl0RXZlbnQub2JqZWN0TmFtZSA9CisJCQkJCVNQSV9nZXR2YWx1ZShzcGlUdXBsZSwg c3BpVHVwRGVzYywgMik7CisKKwkJCWxvZ19hdWRpdF9ldmVudChhdWRpdEV2ZW50U3RhY2sp OworCQl9CisKKwkJLyogQ29tcGxldGUgdGhlIHF1ZXJ5ICovCisJCVNQSV9maW5pc2goKTsK KworCQkvKiBTd2l0Y2ggdG8gdGhlIG9sZCBtZW1vcnkgY29udGV4dCAqLworCQlNZW1vcnlD b250ZXh0U3dpdGNoVG8oY29udGV4dE9sZCk7CisJCU1lbW9yeUNvbnRleHREZWxldGUoY29u dGV4dFF1ZXJ5KTsKKworCQkvKiBObyBsb25nZXIgaW4gYW4gaW50ZXJuYWwgc3RhdGVtZW50 ICovCisJCWludGVybmFsU3RhdGVtZW50ID0gZmFsc2U7CisJfQorCisJUEdfUkVUVVJOX05V TEwoKTsKK30KKworLyoKKyAqIEdVQyBjaGVjayBhbmQgYXNzaWduIGZ1bmN0aW9ucworICov CisKKy8qCisgKiBUYWtlIGEgcGdfYXVkaXQubG9nIHZhbHVlIHN1Y2ggYXMgInJlYWQsIHdy aXRlLCBkbWwiLCB2ZXJpZnkgdGhhdCBlYWNoIG9mIHRoZQorICogY29tbWEtc2VwYXJhdGVk IHRva2VucyBjb3JyZXNwb25kcyB0byBhIExvZ0NsYXNzIHZhbHVlLCBhbmQgY29udmVydCB0 aGVtIGludG8KKyAqIGEgYml0bWFwIHRoYXQgbG9nX2F1ZGl0X2V2ZW50IGNhbiBjaGVjay4K KyAqLworc3RhdGljIGJvb2wKK2NoZWNrX3BnX2F1ZGl0X2xvZyhjaGFyICoqbmV3dmFsLCB2 b2lkICoqZXh0cmEsIEd1Y1NvdXJjZSBzb3VyY2UpCit7CisJTGlzdCAqZmxhZ3M7CisJY2hh ciAqcmF3dmFsOworCUxpc3RDZWxsICpsdDsKKwl1aW50NjQgKmY7CisKKwkvKiBNYWtlIHN1 cmUgbmV3dmFsIGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgdG9rZW5zLiAqLworCXJh d3ZhbCA9IHBzdHJkdXAoKm5ld3ZhbCk7CisJaWYgKCFTcGxpdElkZW50aWZpZXJTdHJpbmco cmF3dmFsLCAnLCcsICZmbGFncykpCisJeworCQlHVUNfY2hlY2tfZXJyZGV0YWlsKCJMaXN0 IHN5bnRheCBpcyBpbnZhbGlkIik7CisJCWxpc3RfZnJlZShmbGFncyk7CisJCXBmcmVlKHJh d3ZhbCk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKgorCSAqIENoZWNrIHRoYXQgd2Ug cmVjb2duaXNlIGVhY2ggdG9rZW4sIGFuZCBhZGQgaXQgdG8gdGhlIGJpdG1hcCB3ZSdyZQor CSAqIGJ1aWxkaW5nIHVwIGluIGEgbmV3bHktYWxsb2NhdGVkIHVpbnQ2NCAqZi4KKwkgKi8K KwlmID0gKHVpbnQ2NCAqKSBtYWxsb2Moc2l6ZW9mKHVpbnQ2NCkpOworCWlmICghZikKKwkJ cmV0dXJuIGZhbHNlOworCSpmID0gMDsKKworCWZvcmVhY2gobHQsIGZsYWdzKQorCXsKKwkJ Ym9vbCBzdWJ0cmFjdCA9IGZhbHNlOworCQl1aW50NjQgY2xhc3M7CisKKwkJLyogUmV0cmll dmUgYSB0b2tlbiAqLworCQljaGFyICp0b2tlbiA9IChjaGFyICopbGZpcnN0KGx0KTsKKwor CQkvKiBJZiB0b2tlbiBpcyBwcmVjZWRlZCBieSAtLCB0aGVuIHRoZSB0b2tlbiBpcyBzdWJ0 cmFjdGl2ZS4gKi8KKwkJaWYgKHN0cnN0cih0b2tlbiwgIi0iKSA9PSB0b2tlbikKKwkJewor CQkJdG9rZW4gPSB0b2tlbiArIDE7CisJCQlzdWJ0cmFjdCA9IHRydWU7CisJCX0KKworCQkv KiBUZXN0IGVhY2ggdG9rZW4uICovCisJCWlmIChwZ19zdHJjYXNlY21wKHRva2VuLCBDTEFT U19OT05FKSA9PSAwKQorCQkJY2xhc3MgPSBMT0dfTk9ORTsKKwkJZWxzZSBpZiAocGdfc3Ry Y2FzZWNtcCh0b2tlbiwgQ0xBU1NfQUxMKSA9PSAwKQorCQkJY2xhc3MgPSBMT0dfQUxMOwor CQllbHNlIGlmIChwZ19zdHJjYXNlY21wKHRva2VuLCBDTEFTU19EREwpID09IDApCisJCQlj bGFzcyA9IExPR19EREw7CisJCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAodG9rZW4sIENMQVNT X0ZVTkNUSU9OKSA9PSAwKQorCQkJY2xhc3MgPSBMT0dfRlVOQ1RJT047CisJCWVsc2UgaWYg KHBnX3N0cmNhc2VjbXAodG9rZW4sIENMQVNTX01JU0MpID09IDApCisJCQljbGFzcyA9IExP R19NSVNDOworCQllbHNlIGlmIChwZ19zdHJjYXNlY21wKHRva2VuLCBDTEFTU19SRUFEKSA9 PSAwKQorCQkJY2xhc3MgPSBMT0dfUkVBRDsKKwkJZWxzZSBpZiAocGdfc3RyY2FzZWNtcCh0 b2tlbiwgQ0xBU1NfUk9MRSkgPT0gMCkKKwkJCWNsYXNzID0gTE9HX1JPTEU7CisJCWVsc2Ug aWYgKHBnX3N0cmNhc2VjbXAodG9rZW4sIENMQVNTX1dSSVRFKSA9PSAwKQorCQkJY2xhc3Mg PSBMT0dfV1JJVEU7CisJCWVsc2UKKwkJeworCQkJZnJlZShmKTsKKwkJCXBmcmVlKHJhd3Zh bCk7CisJCQlsaXN0X2ZyZWUoZmxhZ3MpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJ LyogQWRkIG9yIHN1YnRyYWN0IGNsYXNzIGJpdHMgZnJvbSB0aGUgbG9nIGJpdG1hcC4gKi8K KwkJaWYgKHN1YnRyYWN0KQorCQkJKmYgJj0gfmNsYXNzOworCQllbHNlCisJCQkqZiB8PSBj bGFzczsKKwl9CisKKwlwZnJlZShyYXd2YWwpOworCWxpc3RfZnJlZShmbGFncyk7CisKKwkv KgorCSAqIFN0b3JlIHRoZSBiaXRtYXAgZm9yIGFzc2lnbl9wZ19hdWRpdF9sb2cuCisJICov CisJKmV4dHJhID0gZjsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICogU2V0IHBnX2F1 ZGl0X2xvZyBmcm9tIGV4dHJhIChpZ25vcmluZyBuZXd2YWwsIHdoaWNoIGhhcyBhbHJlYWR5 IGJlZW4KKyAqIGNvbnZlcnRlZCB0byBhIGJpdG1hcCBhYm92ZSkuIE5vdGUgdGhhdCBleHRy YSBtYXkgbm90IGJlIHNldCBpZiB0aGUKKyAqIGFzc2lnbm1lbnQgaXMgdG8gYmUgc3VwcHJl c3NlZC4KKyAqLworc3RhdGljIHZvaWQKK2Fzc2lnbl9wZ19hdWRpdF9sb2coY29uc3QgY2hh ciAqbmV3dmFsLCB2b2lkICpleHRyYSkKK3sKKwlpZiAoZXh0cmEpCisJCWF1ZGl0TG9nQml0 bWFwID0gKih1aW50NjQgKilleHRyYTsKK30KKworLyoKKyAqIERlZmluZSBHVUMgdmFyaWFi bGVzIGFuZCBpbnN0YWxsIGhvb2tzIHVwb24gbW9kdWxlIGxvYWQuCisgKi8KK3ZvaWQKK19Q R19pbml0KHZvaWQpCit7CisJaWYgKElzVW5kZXJQb3N0bWFzdGVyKQorCQllcmVwb3J0KEVS Uk9SLAorCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9T VEFURSksCisJCQllcnJtc2coInBnX2F1ZGl0IG11c3QgYmUgbG9hZGVkIHZpYSBzaGFyZWRf cHJlbG9hZF9saWJyYXJpZXMiKSkpOworCisJLyoKKwkgKiBwZ19hdWRpdC5yb2xlID0gImF1 ZGl0IgorCSAqCisJICogRGVmaW5lcyBhIHJvbGUgdG8gYmUgdXNlZCBmb3IgYXVkaXRpbmcu CisJICovCisJRGVmaW5lQ3VzdG9tU3RyaW5nVmFyaWFibGUoInBnX2F1ZGl0LnJvbGUiLAor CQkJCQkJCSAgICJFbmFibGUgb2JqZWN0IGF1ZGl0aW5nIGZvciByb2xlIiwKKwkJCQkJCQkg ICBOVUxMLAorCQkJCQkJCSAgICZhdWRpdFJvbGUsCisJCQkJCQkJICAgIiIsCisJCQkJCQkJ ICAgUEdDX1NVU0VULAorCQkJCQkJCSAgIEdVQ19OT1RfSU5fU0FNUExFLAorCQkJCQkJCSAg IE5VTEwsIE5VTEwsIE5VTEwpOworCisJLyoKKwkgKiBwZ19hdWRpdC5sb2cgPSAicmVhZCwg d3JpdGUsIGRkbCIKKwkgKgorCSAqIENvbnRyb2xzIHdoYXQgY2xhc3NlcyBvZiBjb21tYW5k cyBhcmUgbG9nZ2VkLgorCSAqLworCURlZmluZUN1c3RvbVN0cmluZ1ZhcmlhYmxlKCJwZ19h dWRpdC5sb2ciLAorCQkJCQkJCSAgICJFbmFibGUgc2Vzc2lvbiBhdWRpdGluZyBmb3IgY2xh c3NlcyBvZiBjb21tYW5kcyIsCisJCQkJCQkJICAgTlVMTCwKKwkJCQkJCQkgICAmYXVkaXRM b2csCisJCQkJCQkJICAgIm5vbmUiLAorCQkJCQkJCSAgIFBHQ19TVVNFVCwKKwkJCQkJCQkg ICBHVUNfTElTVF9JTlBVVCB8IEdVQ19OT1RfSU5fU0FNUExFLAorCQkJCQkJCSAgIGNoZWNr X3BnX2F1ZGl0X2xvZywKKwkJCQkJCQkgICBhc3NpZ25fcGdfYXVkaXRfbG9nLAorCQkJCQkJ CSAgIE5VTEwpOworCisJLyoKKwkgKiBwZ19hdWRpdC5sb2dfcGFyYW1ldGVyID0gb24KKwkg KgorCSAqIENvbnRyb2xzIHdoZXRoZXIgcGFyYW1ldGVycyBwYXNzZWQgd2l0aCBhIHN0YXRl bWVudCBhcmUgbG9nZ2VkLgorCSAqLworCURlZmluZUN1c3RvbUJvb2xWYXJpYWJsZSgicGdf YXVkaXQubG9nX3BhcmFtZXRlciIsCisJCQkJCQkJICJFbmFibGUgc3RhdGVtZW50IHBhcmFt ZXRlciBsb2dnaW5nIiwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgJmF1ZGl0TG9nUGFyYW1l dGVyLAorCQkJCQkJCSBmYWxzZSwKKwkJCQkJCQkgUEdDX1NVU0VULAorCQkJCQkJCSBHVUNf Tk9UX0lOX1NBTVBMRSwKKwkJCQkJCQkgTlVMTCwgTlVMTCwgTlVMTCk7CisKKwkvKgorCSAq IHBnX2F1ZGl0LmxvZ19yZWxhdGlvbiA9IG9uCisJICoKKwkgKiBDb250cm9scyB3aGV0aGVy IHJlbGF0aW9ucyBnZXQgc2VwYXJhdGUgbG9nIGVudHJpZXMgZHVyaW5nIHNlc3Npb24KKwkg KiBsb2dnaW5nIG9mIFJFQUQgYW5kIFdSSVRFIGNsYXNzZXMuICBUaGlzIHdvcmtzIGFzIGlm IGFsbCByZWxhdGlvbnMgaW4gdGhlCisJICogZGF0YWJhc2UgaGFkIGJlZW4gYWRkZWQgdG8g dGhlIGF1ZGl0IHJvbGUgYW5kIHByb3ZpZGVzIGEgc2hvcnRjdXQgd2hlbgorCSAqIHJlYWxs eSBkZXRhaWxlZCBsb2dnaW5nIG9mIGFic29sdXRlbHkgZXZlcnkgcmVsYXRpb24gaXMgcmVx dWlyZWQuCisJICovCisJRGVmaW5lQ3VzdG9tQm9vbFZhcmlhYmxlKCJwZ19hdWRpdC5sb2df cmVsYXRpb24iLAorCQkJCQkJCSAiRW5hYmxlIHNlc3Npb24gcmVsYXRpb24gbG9nZ2luZyIs CisJCQkJCQkJIE5VTEwsCisJCQkJCQkJICZhdWRpdExvZ1JlbGF0aW9uLAorCQkJCQkJCSBm YWxzZSwKKwkJCQkJCQkgUEdDX1NVU0VULAorCQkJCQkJCSBHVUNfTk9UX0lOX1NBTVBMRSwK KwkJCQkJCQkgTlVMTCwgTlVMTCwgTlVMTCk7CisKKwkvKgorCSAqIHBnX2F1ZGl0LmxvZ19j YXRhbG9nID0gb24KKwkgKgorCSAqIENvbnRyb2xzIHdoZXRoZXIgcmVsYXRpb25zIGluIHBn X2NhdGFsb2cgYXJlIHNlc3Npb24gbG9nZ2VkIGluIHF1ZXJpZXMKKwkgKiB0aGF0IGNvbnRh aW4gKm9ubHkqIHBnX2NhdGFsb2cgcmVsYXRpb25zLgorCSAqLworCURlZmluZUN1c3RvbUJv b2xWYXJpYWJsZSgicGdfYXVkaXQubG9nX2NhdGFsb2ciLAorCQkJCQkJCSAiRW5hYmxlIGxv Z2dpbmcgb2YgcmVsYXRpb25zIGluIHBnX2NhdGFsb2ciLAorCQkJCQkJCSBOVUxMLAorCQkJ CQkJCSAmYXVkaXRMb2dDYXRhbG9nLAorCQkJCQkJCSB0cnVlLAorCQkJCQkJCSBQR0NfU1VT RVQsCisJCQkJCQkJIEdVQ19OT1RfSU5fU0FNUExFLAorCQkJCQkJCSBOVUxMLCBOVUxMLCBO VUxMKTsKKworCS8qCisJICogcGdfYXVkaXQubG9nX25vdGljZSA9IG9uCisJICoKKwkgKiBB dWRpdCBsb2dnaW5nIGlzIHJhaXNlZCBhcyBub3RpY2VzIHRoYXQgY2FuIGJlIHNlZW4gb24g dGhlIGNsaWVudC4gIFRoaXMgaXMKKwkgKiBpbnRlbmRlZCBmb3IgdGVzdGluZyBwdXJwb3Nl cy4KKwkgKi8KKwlEZWZpbmVDdXN0b21Cb29sVmFyaWFibGUoInBnX2F1ZGl0LmxvZ19ub3Rp Y2UiLAorCQkJCQkJCSAiUmFpc2UgYSBub3RpY2Ugd2hlbiBsb2dnaW5nIiwKKwkJCQkJCQkg TlVMTCwKKwkJCQkJCQkgJmF1ZGl0TG9nTm90aWNlLAorCQkJCQkJCSBmYWxzZSwKKwkJCQkJ CQkgUEdDX1NVU0VULAorCQkJCQkJCSBHVUNfTk9UX0lOX1NBTVBMRSwKKwkJCQkJCQkgTlVM TCwgTlVMTCwgTlVMTCk7CisKKwkvKgorCSAqIEluc3RhbGwgb3VyIGhvb2sgZnVuY3Rpb25z IGFmdGVyIHNhdmluZyB0aGUgZXhpc3RpbmcgcG9pbnRlcnMgdG8gcHJlc2VydmUKKwkgKiB0 aGUgY2hhaW4uCisJICovCisJbmV4dF9FeGVjdXRvclN0YXJ0X2hvb2sgPSBFeGVjdXRvclN0 YXJ0X2hvb2s7CisJRXhlY3V0b3JTdGFydF9ob29rID0gcGdfYXVkaXRfRXhlY3V0b3JTdGFy dF9ob29rOworCisJbmV4dF9FeGVjdXRvckNoZWNrUGVybXNfaG9vayA9IEV4ZWN1dG9yQ2hl Y2tQZXJtc19ob29rOworCUV4ZWN1dG9yQ2hlY2tQZXJtc19ob29rID0gcGdfYXVkaXRfRXhl Y3V0b3JDaGVja1Blcm1zX2hvb2s7CisKKwluZXh0X1Byb2Nlc3NVdGlsaXR5X2hvb2sgPSBQ cm9jZXNzVXRpbGl0eV9ob29rOworCVByb2Nlc3NVdGlsaXR5X2hvb2sgPSBwZ19hdWRpdF9Q cm9jZXNzVXRpbGl0eV9ob29rOworCisJbmV4dF9vYmplY3RfYWNjZXNzX2hvb2sgPSBvYmpl Y3RfYWNjZXNzX2hvb2s7CisJb2JqZWN0X2FjY2Vzc19ob29rID0gcGdfYXVkaXRfb2JqZWN0 X2FjY2Vzc19ob29rOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19hdWRpdC9wZ19hdWRp dC5jb25mIGIvY29udHJpYi9wZ19hdWRpdC9wZ19hdWRpdC5jb25mCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ZjRhMjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250 cmliL3BnX2F1ZGl0L3BnX2F1ZGl0LmNvbmYKQEAgLTAsMCArMSBAQAorc2hhcmVkX3ByZWxv YWRfbGlicmFyaWVzID0gcGdfYXVkaXQKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfYXVkaXQv cGdfYXVkaXQuY29udHJvbCBiL2NvbnRyaWIvcGdfYXVkaXQvcGdfYXVkaXQuY29udHJvbApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzMwYzY4Ci0tLSAvZGV2L251 bGwKKysrIGIvY29udHJpYi9wZ19hdWRpdC9wZ19hdWRpdC5jb250cm9sCkBAIC0wLDAgKzEs NSBAQAorIyBwZ19hdWRpdCBleHRlbnNpb24KK2NvbW1lbnQgPSAncHJvdmlkZXMgYXVkaXRp bmcgZnVuY3Rpb25hbGl0eScKK2RlZmF1bHRfdmVyc2lvbiA9ICcxLjAuMCcKK21vZHVsZV9w YXRobmFtZSA9ICckbGliZGlyL3BnX2F1ZGl0JworcmVsb2NhdGFibGUgPSB0cnVlCmRpZmYg LS1naXQgYS9jb250cmliL3BnX2F1ZGl0L3NxbC9wZ19hdWRpdC5zcWwgYi9jb250cmliL3Bn X2F1ZGl0L3NxbC9wZ19hdWRpdC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uMjI2ZjYwZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfYXVkaXQvc3Fs L3BnX2F1ZGl0LnNxbApAQCAtMCwwICsxLDU5NSBAQAorLS0gTG9hZCBwZ19hdWRpdCBtb2R1 bGUKK2NyZWF0ZSBleHRlbnNpb24gcGdfYXVkaXQ7CisKKy0tCistLSBDcmVhdGUgYSBzdXBl cnVzZXIgcm9sZSB0aGF0IHdlIGtub3cgdGhlIG5hbWUgb2YgZm9yIHRlc3RpbmcKK0NSRUFU RSBVU0VSIHN1cGVyIFNVUEVSVVNFUjsKK1xjb25uZWN0IGNvbnRyaWJfcmVncmVzc2lvbiBz dXBlcjsKKworLS0KKy0tIENyZWF0ZSBhdWRpdG9yIHJvbGUKK0NSRUFURSBST0xFIGF1ZGl0 b3I7CisKKy0tCistLSBDcmVhdGUgZmlyc3QgdGVzdCB1c2VyCitDUkVBVEUgVVNFUiB1c2Vy MTsKK0FMVEVSIFJPTEUgdXNlcjEgU0VUIHBnX2F1ZGl0LmxvZyA9ICdkZGwsIFJPTEUnOwor QUxURVIgUk9MRSB1c2VyMSBTRVQgcGdfYXVkaXQubG9nX25vdGljZSA9IE9OOworCistLQor LS0gQ3JlYXRlLCBzZWxlY3QsIGRyb3AgKHNlbGVjdCB3aWxsIG5vdCBiZSBhdWRpdGVkKQor XGNvbm5lY3QgY29udHJpYl9yZWdyZXNzaW9uIHVzZXIxCitDUkVBVEUgVEFCTEUgcHVibGlj LnRlc3QgKGlkIElOVCk7CitTRUxFQ1QgKiBGUk9NIHRlc3Q7CitEUk9QIFRBQkxFIHRlc3Q7 CisKKy0tCistLSBDcmVhdGUgc2Vjb25kIHRlc3QgdXNlcgorXGNvbm5lY3QgY29udHJpYl9y ZWdyZXNzaW9uIHN1cGVyCisKK0NSRUFURSBVU0VSIHVzZXIyOworQUxURVIgUk9MRSB1c2Vy MiBTRVQgcGdfYXVkaXQubG9nID0gJ1JlYWQsIHdyaXRFJzsKK0FMVEVSIFJPTEUgdXNlcjIg U0VUIHBnX2F1ZGl0LmxvZ19jYXRhbG9nID0gT0ZGOworQUxURVIgUk9MRSB1c2VyMiBTRVQg cGdfYXVkaXQubG9nX25vdGljZSA9IE9OOworQUxURVIgUk9MRSB1c2VyMiBTRVQgcGdfYXVk aXQucm9sZSA9IGF1ZGl0b3I7CisKK1xjb25uZWN0IGNvbnRyaWJfcmVncmVzc2lvbiB1c2Vy MgorQ1JFQVRFIFRBQkxFIHRlc3QyIChpZCBJTlQpOworR1JBTlQgU0VMRUNUIE9OIFRBQkxF IHB1YmxpYy50ZXN0MiBUTyBhdWRpdG9yOworCistLQorLS0gUm9sZS1iYXNlZCB0ZXN0cwor Q1JFQVRFIFRBQkxFIHRlc3QzCisoCisJaWQgSU5UCispOworCitTRUxFQ1QgY291bnQoKikK KyAgRlJPTQorKAorCVNFTEVDVCByZWxuYW1lCisJICBGUk9NIHBnX2NsYXNzCisJICBMSU1J VCAxCispIFNVQlFVRVJZOworCitTRUxFQ1QgKgorICBGUk9NIHRlc3QzLCB0ZXN0MjsKKwor R1JBTlQgSU5TRVJUCisgICBPTiBUQUJMRSBwdWJsaWMudGVzdDMKKyAgIFRPIGF1ZGl0b3I7 CisKKy0tCistLSBDcmVhdGUgYSB2aWV3IHRvIHRlc3QgbG9nZ2luZworQ1JFQVRFIFZJRVcg dndfdGVzdDMgQVMKK1NFTEVDVCAqCisgIEZST00gdGVzdDM7CisKK0dSQU5UIFNFTEVDVAor ICAgT04gdndfdGVzdDMKKyAgIFRPIGF1ZGl0b3I7CisKKy0tCistLSBPYmplY3QgbG9nZ2Vk IGJlY2F1c2Ugb2Y6CistLSBzZWxlY3Qgb24gdndfdGVzdDMKKy0tIHNlbGVjdCBvbiB0ZXN0 MgorU0VMRUNUICoKKyAgRlJPTSB2d190ZXN0MywgdGVzdDI7CisKKy0tCistLSBPYmplY3Qg bG9nZ2VkIGJlY2F1c2Ugb2Y6CistLSBpbnNlcnQgb24gdGVzdDMKKy0tIHNlbGVjdCBvbiB0 ZXN0MgorV0lUSCBDVEUgQVMKKygKKwlTRUxFQ1QgaWQKKwkgIEZST00gdGVzdDIKKykKK0lO U0VSVCBJTlRPIHRlc3QzCitTRUxFQ1QgaWQKKyAgRlJPTSBjdGU7CisKKy0tCistLSBPYmpl Y3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6CistLSBpbnNlcnQgb24gdGVzdDMKK1dJVEggQ1RFIEFT CisoCisJSU5TRVJUIElOVE8gdGVzdDMgVkFMVUVTICgxKQorCQkJCSAgIFJFVFVSTklORyBp ZAorKQorSU5TRVJUIElOVE8gdGVzdDIKK1NFTEVDVCBpZAorICBGUk9NIGN0ZTsKKworR1JB TlQgVVBEQVRFIE9OIFRBQkxFIHB1YmxpYy50ZXN0MiBUTyBhdWRpdG9yOworCistLQorLS0g T2JqZWN0IGxvZ2dlZCBiZWNhdXNlIG9mOgorLS0gaW5zZXJ0IG9uIHRlc3QzCistLSB1cGRh dGUgb24gdGVzdDIKK1dJVEggQ1RFIEFTCisoCisJVVBEQVRFIHRlc3QyCisJICAgU0VUIGlk ID0gMQorCVJFVFVSTklORyBpZAorKQorSU5TRVJUIElOVE8gdGVzdDMKK1NFTEVDVCBpZAor ICBGUk9NIGN0ZTsKKworLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0tIGlu c2VydCBvbiB0ZXN0MgorV0lUSCBDVEUgQVMKKygKKwlJTlNFUlQgSU5UTyB0ZXN0MiBWQUxV RVMgKDEpCisJCQkJICAgUkVUVVJOSU5HIGlkCispCitVUERBVEUgdGVzdDMKKyAgIFNFVCBp ZCA9IGN0ZS5pZAorICBGUk9NIGN0ZQorIFdIRVJFIHRlc3QzLmlkIDw+IGN0ZS5pZDsKKwor LS0KKy0tIENoYW5nZSBwZXJtaXNzaW9ucyBvZiB1c2VyIDIgc28gdGhhdCBvbmx5IG9iamVj dCBsb2dnaW5nIHdpbGwgYmUgZG9uZQorXGNvbm5lY3QgY29udHJpYl9yZWdyZXNzaW9uIHN1 cGVyCithbHRlciByb2xlIHVzZXIyIHNldCBwZ19hdWRpdC5sb2cgPSAnTk9ORSc7CisKK1xj b25uZWN0IGNvbnRyaWJfcmVncmVzc2lvbiB1c2VyMgorCistLQorLS0gQ3JlYXRlIHRlc3Q0 IGFuZCBhZGQgcGVybWlzc2lvbnMKK0NSRUFURSBUQUJMRSB0ZXN0NAorKAorCWlkIGludCwK KwluYW1lIHRleHQKKyk7CisKK0dSQU5UIFNFTEVDVCAobmFtZSkKKyAgIE9OIFRBQkxFIHB1 YmxpYy50ZXN0NAorICAgVE8gYXVkaXRvcjsKKworR1JBTlQgVVBEQVRFIChpZCkKKyAgIE9O IFRBQkxFIHB1YmxpYy50ZXN0NAorICAgVE8gYXVkaXRvcjsKKworR1JBTlQgaW5zZXJ0IChu YW1lKQorICAgT04gVEFCTEUgcHVibGljLnRlc3Q0CisgICBUTyBhdWRpdG9yOworCistLQor LS0gTm90IG9iamVjdCBsb2dnZWQKK1NFTEVDVCBpZAorICBGUk9NIHB1YmxpYy50ZXN0NDsK KworLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0tIHNlbGVjdCAobmFtZSkg b24gdGVzdDQKK1NFTEVDVCBuYW1lCisgIEZST00gcHVibGljLnRlc3Q0OworCistLQorLS0g Tm90IG9iamVjdCBsb2dnZWQKK0lOU0VSVCBJTlRPIHB1YmxpYy50ZXN0NCAoaWQpCisJCQkJ ICBWQUxVRVMgKDEpOworCistLQorLS0gT2JqZWN0IGxvZ2dlZCBiZWNhdXNlIG9mOgorLS0g aW5zZXJ0IChuYW1lKSBvbiB0ZXN0NAorSU5TRVJUIElOVE8gcHVibGljLnRlc3Q0IChuYW1l KQorCQkJCSAgVkFMVUVTICgndGVzdCcpOworCistLQorLS0gTm90IG9iamVjdCBsb2dnZWQK K1VQREFURSBwdWJsaWMudGVzdDQKKyAgIFNFVCBuYW1lID0gJ2Zvbyc7CisKKy0tCistLSBP YmplY3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6CistLSB1cGRhdGUgKGlkKSBvbiB0ZXN0NAorVVBE QVRFIHB1YmxpYy50ZXN0NAorICAgU0VUIGlkID0gMTsKKworLS0KKy0tIE9iamVjdCBsb2dn ZWQgYmVjYXVzZSBvZjoKKy0tIHVwZGF0ZSAobmFtZSkgb24gdGVzdDQKKy0tIHVwZGF0ZSAo bmFtZSkgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHNlbGVjdCAobmFtZSkgZHVlIHRvIG9yZGVy aW5nCit1cGRhdGUgcHVibGljLnRlc3Q0IHNldCBuYW1lID0gJ2Zvbycgd2hlcmUgbmFtZSA9 ICdiYXInOworCistLQorLS0gRHJvcCB0ZXN0IHRhYmxlcworRFJPUCBUQUJMRSB0ZXN0MjsK K0RST1AgVklFVyB2d190ZXN0MzsKK0RST1AgVEFCTEUgdGVzdDM7CitEUk9QIFRBQkxFIHRl c3Q0OworCistLQorLS0gQ2hhbmdlIHBlcm1pc3Npb25zIG9mIHVzZXIgMSBzbyB0aGF0IHNl c3Npb24gbG9nZ2luZyB3aWxsIGJlIGRvbmUKK1xjb25uZWN0IGNvbnRyaWJfcmVncmVzc2lv biBzdXBlcgorYWx0ZXIgcm9sZSB1c2VyMSBzZXQgcGdfYXVkaXQubG9nID0gJ0RETCwgUkVB RCc7CitcY29ubmVjdCBjb250cmliX3JlZ3Jlc3Npb24gdXNlcjEKKworLS0KKy0tIENyZWF0 ZSB0YWJsZSBpcyBzZXNzaW9uIGxvZ2dlZAorQ1JFQVRFIFRBQkxFIHB1YmxpYy5hY2NvdW50 CisoCisJaWQgSU5ULAorCW5hbWUgVEVYVCwKKwlwYXNzd29yZCBURVhULAorCWRlc2NyaXB0 aW9uIFRFWFQKKyk7CisKKy0tCistLSBTZWxlY3QgaXMgc2Vzc2lvbiBsb2dnZWQKK1NFTEVD VCAqCisgIEZST00gYWNjb3VudDsKKworLS0KKy0tIEluc2VydCBpcyBub3QgbG9nZ2VkCitJ TlNFUlQgSU5UTyBhY2NvdW50IChpZCwgbmFtZSwgcGFzc3dvcmQsIGRlc2NyaXB0aW9uKQor CQkJIFZBTFVFUyAoMSwgJ3VzZXIxJywgJ0hBU0gxJywgJ2JsYWgsIGJsYWgnKTsKKworLS0K Ky0tIENoYW5nZSBwZXJtaXNzaW9ucyBvZiB1c2VyIDEgc28gdGhhdCBvbmx5IG9iamVjdCBs b2dnaW5nIHdpbGwgYmUgZG9uZQorXGNvbm5lY3QgY29udHJpYl9yZWdyZXNzaW9uIHN1cGVy CithbHRlciByb2xlIHVzZXIxIHNldCBwZ19hdWRpdC5sb2cgPSAnbm9uZSc7CithbHRlciBy b2xlIHVzZXIxIHNldCBwZ19hdWRpdC5yb2xlID0gJ2F1ZGl0b3InOworXGNvbm5lY3QgY29u dHJpYl9yZWdyZXNzaW9uIHVzZXIxCisKKy0tCistLSBBdWRpdG9yIGdyYW50cyBub3QgbG9n Z2VkCitHUkFOVCBTRUxFQ1QgKHBhc3N3b3JkKSwKKwkgIFVQREFURSAobmFtZSwgcGFzc3dv cmQpCisgICBPTiBUQUJMRSBwdWJsaWMuYWNjb3VudAorICAgVE8gYXVkaXRvcjsKKworLS0K Ky0tIE5vdCBvYmplY3QgbG9nZ2VkCitTRUxFQ1QgaWQsCisJICAgbmFtZQorICBGUk9NIGFj Y291bnQ7CisKKy0tCistLSBPYmplY3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6CistLSBzZWxlY3Qg KHBhc3N3b3JkKSBvbiBhY2NvdW50CitTRUxFQ1QgcGFzc3dvcmQKKyAgRlJPTSBhY2NvdW50 OworCistLQorLS0gTm90IG9iamVjdCBsb2dnZWQKK1VQREFURSBhY2NvdW50CisgICBTRVQg ZGVzY3JpcHRpb24gPSAneWFkYSwgeWFkYSc7CisKKy0tCistLSBPYmplY3QgbG9nZ2VkIGJl Y2F1c2Ugb2Y6CistLSB1cGRhdGUgKHBhc3N3b3JkKSBvbiBhY2NvdW50CitVUERBVEUgYWNj b3VudAorICAgU0VUIHBhc3N3b3JkID0gJ0hBU0gyJzsKKworLS0KKy0tIENoYW5nZSBwZXJt aXNzaW9ucyBvZiB1c2VyIDEgc28gdGhhdCBzZXNzaW9uIHJlbGF0aW9uIGxvZ2dpbmcgd2ls bCBiZSBkb25lCitcY29ubmVjdCBjb250cmliX3JlZ3Jlc3Npb24gc3VwZXIKK2FsdGVyIHJv bGUgdXNlcjEgc2V0IHBnX2F1ZGl0LmxvZ19yZWxhdGlvbiA9IG9uOworYWx0ZXIgcm9sZSB1 c2VyMSBzZXQgcGdfYXVkaXQubG9nID0gJ3JlYWQsIFdSSVRFJzsKK1xjb25uZWN0IGNvbnRy aWJfcmVncmVzc2lvbiB1c2VyMQorCistLQorLS0gTm90IGxvZ2dlZAorY3JlYXRlIHRhYmxl IEFDQ09VTlRfUk9MRV9NQVAKKygKKwlhY2NvdW50X2lkIElOVCwKKwlyb2xlX2lkIElOVAor KTsKKworLS0KKy0tIEF1ZGl0b3IgZ3JhbnRzIG5vdCBsb2dnZWQKK0dSQU5UIFNFTEVDVAor ICAgT04gVEFCTEUgcHVibGljLmFjY291bnRfcm9sZV9tYXAKKyAgIFRPIGF1ZGl0b3I7CisK Ky0tCistLSBPYmplY3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6CistLSBzZWxlY3QgKHBhc3N3b3Jk KSBvbiBhY2NvdW50CistLSBzZWxlY3Qgb24gYWNjb3VudF9yb2xlX21hcAorLS0gU2Vzc2lv biBsb2dnZWQgb24gYWxsIHRhYmxlcyBiZWNhdXNlIGxvZyA9IHJlYWQgYW5kIGxvZ19yZWxh dGlvbiA9IG9uCitTRUxFQ1QgYWNjb3VudC5wYXNzd29yZCwKKwkgICBhY2NvdW50X3JvbGVf bWFwLnJvbGVfaWQKKyAgRlJPTSBhY2NvdW50CisJICAgSU5ORVIgSk9JTiBhY2NvdW50X3Jv bGVfbWFwCisJCQlvbiBhY2NvdW50LmlkID0gYWNjb3VudF9yb2xlX21hcC5hY2NvdW50X2lk OworCistLQorLS0gT2JqZWN0IGxvZ2dlZCBiZWNhdXNlIG9mOgorLS0gc2VsZWN0IChwYXNz d29yZCkgb24gYWNjb3VudAorLS0gU2Vzc2lvbiBsb2dnZWQgb24gYWxsIHRhYmxlcyBiZWNh dXNlIGxvZyA9IHJlYWQgYW5kIGxvZ19yZWxhdGlvbiA9IG9uCitTRUxFQ1QgcGFzc3dvcmQK KyAgRlJPTSBhY2NvdW50OworCistLQorLS0gTm90IG9iamVjdCBsb2dnZWQKKy0tIFNlc3Np b24gbG9nZ2VkIG9uIGFsbCB0YWJsZXMgYmVjYXVzZSBsb2cgPSByZWFkIGFuZCBsb2dfcmVs YXRpb24gPSBvbgorVVBEQVRFIGFjY291bnQKKyAgIFNFVCBkZXNjcmlwdGlvbiA9ICd5YWRh LCB5YWRhJzsKKworLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0tIHNlbGVj dCAocGFzc3dvcmQpIG9uIGFjY291bnQgKGluIHRoZSB3aGVyZSBjbGF1c2UpCistLSBTZXNz aW9uIGxvZ2dlZCBvbiBhbGwgdGFibGVzIGJlY2F1c2UgbG9nID0gcmVhZCBhbmQgbG9nX3Jl bGF0aW9uID0gb24KK1VQREFURSBhY2NvdW50CisgICBTRVQgZGVzY3JpcHRpb24gPSAneWFk YSwgeWFkYScKKyB3aGVyZSBwYXNzd29yZCA9ICdIQVNIMic7CisKKy0tCistLSBPYmplY3Qg bG9nZ2VkIGJlY2F1c2Ugb2Y6CistLSB1cGRhdGUgKHBhc3N3b3JkKSBvbiBhY2NvdW50Cist LSBTZXNzaW9uIGxvZ2dlZCBvbiBhbGwgdGFibGVzIGJlY2F1c2UgbG9nID0gcmVhZCBhbmQg bG9nX3JlbGF0aW9uID0gb24KK1VQREFURSBhY2NvdW50CisgICBTRVQgcGFzc3dvcmQgPSAn SEFTSDInOworCistLQorLS0gQ2hhbmdlIGJhY2sgdG8gc3VwZXJ1c2VyIHRvIGRvIGV4aGF1 c3RpdmUgdGVzdHMKK1xjb25uZWN0IGNvbnRyaWJfcmVncmVzc2lvbiBzdXBlcgorU0VUIHBn X2F1ZGl0LmxvZyA9ICdBTEwnOworU0VUIHBnX2F1ZGl0LmxvZ19ub3RpY2UgPSBPTjsKK1NF VCBwZ19hdWRpdC5sb2dfcmVsYXRpb24gPSBPTjsKK1NFVCBwZ19hdWRpdC5sb2dfcGFyYW1l dGVyID0gT047CisKKy0tCistLSBTaW1wbGUgRE8gYmxvY2sKK0RPICQkCitCRUdJTgorCXJh aXNlIG5vdGljZSAndGVzdCc7CitFTkQgJCQ7CisKKy0tCistLSBDcmVhdGUgdGVzdCBzY2hl bWEKK0NSRUFURSBTQ0hFTUEgdGVzdDsKKworLS0KKy0tIENvcHkgYWNjb3VudCB0byBzdGRv dXQKK0NPUFkgYWNjb3VudCBUTyBzdGRvdXQ7CisKKy0tCistLSBDcmVhdGUgYSB0YWJsZSBm cm9tIGEgcXVlcnkKK0NSRUFURSBUQUJMRSB0ZXN0LmFjY291bnRfY29weSBBUworU0VMRUNU ICoKKyAgRlJPTSBhY2NvdW50OworCistLQorLS0gQ29weSBmcm9tIHN0ZGluIHRvIGFjY291 bnQgY29weQorQ09QWSB0ZXN0LmFjY291bnRfY29weSBmcm9tIHN0ZGluOworMQl1c2VyMQlI QVNIMgl5YWRhLCB5YWRhCitcLgorCistLQorLS0gVGVzdCBwcmVwYXJlZCBzdGF0ZW1lbnQK K1BSRVBBUkUgcGdjbGFzc3N0bXQgKG9pZCkgQVMKK1NFTEVDVCAqCisgIEZST00gYWNjb3Vu dAorIFdIRVJFIGlkID0gJDE7CisKK0VYRUNVVEUgcGdjbGFzc3N0bXQgKDEpOworREVBTExP Q0FURSBwZ2NsYXNzc3RtdDsKKworLS0KKy0tIFRlc3QgY3Vyc29yCitCRUdJTjsKKworREVD TEFSRSBjdGVzdCBTQ1JPTEwgQ1VSU09SIEZPUgorU0VMRUNUIGNvdW50KCopCisgIEZST00K KygKKwlTRUxFQ1QgcmVsbmFtZQorCSAgRlJPTSBwZ19jbGFzcworCSBMSU1JVCAxCisgKSBz dWJxdWVyeTsKKworRkVUQ0ggTkVYVCBGUk9NIGN0ZXN0OworQ0xPU0UgY3Rlc3Q7CitDT01N SVQ7CisKKy0tCistLSBUdXJuIG9mZiBsb2dfY2F0YWxvZyBhbmQgcGdfY2xhc3Mgd2lsbCBu b3QgYmUgbG9nZ2VkCitTRVQgcGdfYXVkaXQubG9nX2NhdGFsb2cgPSBPRkY7CisKK1NFTEVD VCBjb3VudCgqKQorICBGUk9NCisoCisJU0VMRUNUIHJlbG5hbWUKKwkgIEZST00gcGdfY2xh c3MKKwkgTElNSVQgMQorICkgc3VicXVlcnk7CisKKy0tCistLSBUZXN0IHByZXBhcmVkIGlu c2VydAorQ1JFQVRFIFRBQkxFIHRlc3QudGVzdF9pbnNlcnQKKygKKwlpZCBJTlQKKyk7CisK K1BSRVBBUkUgcGdjbGFzc3N0bXQgKG9pZCkgQVMKK0lOU0VSVCBJTlRPIHRlc3QudGVzdF9p bnNlcnQgKGlkKQorCQkJCQkgIFZBTFVFUyAoJDEpOworRVhFQ1VURSBwZ2NsYXNzc3RtdCAo MSk7CisKKy0tCistLSBDaGVjayB0aGF0IHByaW1hcnkga2V5IGNyZWF0aW9uIGlzIGxvZ2dl ZAorQ1JFQVRFIFRBQkxFIHB1YmxpYy50ZXN0CisoCisJaWQgSU5ULAorCW5hbWUgVEVYVCwK KwlkZXNjcmlwdGlvbiBURVhULAorCUNPTlNUUkFJTlQgdGVzdF9wa2V5IFBSSU1BUlkgS0VZ IChpZCkKKyk7CisKKy0tCistLSBDaGVjayB0aGF0IGFuYWx5emUgaXMgbG9nZ2VkCitBTkFM WVpFIHRlc3Q7CisKKy0tCistLSBHcmFudHMgdG8gcHVibGljIHNob3VsZCBub3QgY2F1c2Ug b2JqZWN0IGxvZ2dpbmcgKHNlc3Npb24gbG9nZ2luZyB3aWxsCistLSBzdGlsbCBoYXBwZW4p CitHUkFOVCBTRUxFQ1QKKyAgT04gVEFCTEUgcHVibGljLnRlc3QKKyAgVE8gUFVCTElDOwor CitTRUxFQ1QgKgorICBGUk9NIHRlc3Q7CisKKy0tIENoZWNrIHRoYXQgc3RhdGVtZW50cyB3 aXRob3V0IGNvbHVtbnMgbG9nCitTRUxFQ1QKKyAgRlJPTSB0ZXN0OworCitTRUxFQ1QgMSwK KwkgICBjdXJyZW50X3VzZXI7CisKK0RPICQkCitERUNMQVJFCisJdGVzdCBJTlQ7CitCRUdJ TgorCVNFTEVDVCAxCisJICBJTlRPIHRlc3Q7CitFTkQgJCQ7CisKK2V4cGxhaW4gc2VsZWN0 IDE7CisKKy0tCistLSBUZXN0IHRoYXQgbG9va3MgaW5zaWRlIG9mIGRvIGJsb2NrcyBsb2cK K0lOU0VSVCBJTlRPIFRFU1QgKGlkKQorCQkgIFZBTFVFUyAoMSk7CitJTlNFUlQgSU5UTyBU RVNUIChpZCkKKwkJICBWQUxVRVMgKDIpOworSU5TRVJUIElOVE8gVEVTVCAoaWQpCisJCSAg VkFMVUVTICgzKTsKKworRE8gJCQKK0RFQ0xBUkUKKwlyZXN1bHQgUkVDT1JEOworQkVHSU4K KwlGT1IgcmVzdWx0IElOCisJCVNFTEVDVCBpZAorCQkgIEZST00gdGVzdAorCUxPT1AKKwkJ SU5TRVJUIElOVE8gdGVzdCAoaWQpCisJCQkgVkFMVUVTIChyZXN1bHQuaWQgKyAxMDApOwor CUVORCBMT09QOworRU5EICQkOworCistLQorLS0gVGVzdCBvYmZ1c2NhdGVkIGR5bmFtaWMg c3FsIGZvciBjbGVhbiBsb2dnaW5nCitETyAkJAorREVDTEFSRQorCXRhYmxlX25hbWUgVEVY VCA9ICdkb190YWJsZSc7CitCRUdJTgorCUVYRUNVVEUgJ0NSRUFURSBUQUJMRSAnIHx8IHRh YmxlX25hbWUgfHwgJyAoIndlaXJkIG5hbWUiIElOVCknOworCUVYRUNVVEUgJ0RST1AgdGFi bGUgJyB8fCB0YWJsZV9uYW1lOworRU5EICQkOworCistLQorLS0gR2VuZXJhdGUgYW4gZXJy b3IgYW5kIG1ha2Ugc3VyZSB0aGUgc3RhY2sgZ2V0cyBjbGVhcmVkCitETyAkJAorQkVHSU4K KwlDUkVBVEUgVEFCTEUgYm9ndXMudGVzdF9ibG9jaworCSgKKwkJaWQgSU5UCisJKTsKK0VO RCAkJDsKKworLS0KKy0tIFRlc3QgYWx0ZXIgdGFibGUgc3RhdGVtZW50cworQUxURVIgVEFC TEUgcHVibGljLnRlc3QKKwlEUk9QIENPTFVNTiBkZXNjcmlwdGlvbiA7CisKK0FMVEVSIFRB QkxFIHB1YmxpYy50ZXN0CisJUkVOQU1FIFRPIHRlc3QyOworCitBTFRFUiBUQUJMRSBwdWJs aWMudGVzdDIKKwlTRVQgU0NIRU1BIHRlc3Q7CisKK0FMVEVSIFRBQkxFIHRlc3QudGVzdDIK KwlBREQgQ09MVU1OIGRlc2NyaXB0aW9uIFRFWFQ7CisKK0FMVEVSIFRBQkxFIHRlc3QudGVz dDIKKwlEUk9QIENPTFVNTiBkZXNjcmlwdGlvbjsKKworRFJPUCBUQUJMRSB0ZXN0LnRlc3Qy OworCistLQorLS0gVGVzdCBtdWx0aXBsZSBzdGF0ZW1lbnRzIHdpdGggb25lIHNlbWktY29s b24KK0NSRUFURSBTQ0hFTUEgZm9vCisJQ1JFQVRFIFRBQkxFIGZvby5iYXIgKGlkIGludCkK KwlDUkVBVEUgVEFCTEUgZm9vLmJheiAoaWQgaW50KTsKKworLS0KKy0tIFRlc3QgYWdncmVn YXRlCitDUkVBVEUgRlVOQ1RJT04gcHVibGljLmludF9hZGQKKygKKwlhIElOVCwKKwliIElO VAorKQorCVJFVFVSTlMgSU5UIExBTkdVQUdFIHBscGdzcWwgQVMgJCQKK0JFR0lOCisJcmV0 dXJuIGEgKyBiOworRU5EICQkOworCitTRUxFQ1QgaW50X2FkZCgxLCAxKTsKKworQ1JFQVRF IEFHR1JFR0FURSBwdWJsaWMuc3VtX3Rlc3QoSU5UKSAoU0ZVTkM9cHVibGljLmludF9hZGQs IFNUWVBFPUlOVCwgSU5JVENPTkQ9JzAnKTsKK0FMVEVSIEFHR1JFR0FURSBwdWJsaWMuc3Vt X3Rlc3QoaW50ZWdlcikgUkVOQU1FIFRPIHN1bV90ZXN0MjsKKworLS0KKy0tIFRlc3QgY29u dmVyc2lvbgorQ1JFQVRFIENPTlZFUlNJT04gcHVibGljLmNvbnZlcnNpb25fdGVzdCBGT1Ig J1NRTF9BU0NJSScgVE8gJ01VTEVfSU5URVJOQUwnIEZST00gcGdfY2F0YWxvZy5hc2NpaV90 b19taWM7CitBTFRFUiBDT05WRVJTSU9OIHB1YmxpYy5jb252ZXJzaW9uX3Rlc3QgUkVOQU1F IFRPIGNvbnZlcnNpb25fdGVzdDI7CisKKy0tCistLSBUZXN0IGNyZWF0ZS9hbHRlci9kcm9w IGRhdGFiYXNlCitDUkVBVEUgREFUQUJBU0UgY29udHJpYl9yZWdyZXNzaW9uX3BnYXVkaXQ7 CitBTFRFUiBEQVRBQkFTRSBjb250cmliX3JlZ3Jlc3Npb25fcGdhdWRpdCBSRU5BTUUgVE8g Y29udHJpYl9yZWdyZXNzaW9uX3BnYXVkaXQyOworRFJPUCBEQVRBQkFTRSBjb250cmliX3Jl Z3Jlc3Npb25fcGdhdWRpdDI7CisKKy0tCistLSBUZXN0IHRoYXQgZnJlZXMgYSBtZW1vcnkg Y29udGV4dCBlYXJsaWVyIHRoYW4gZXhwZWN0ZWQKK0NSRUFURSBUQUJMRSBob2dlCisoCisJ aWQgaW50CispOworCitDUkVBVEUgRlVOQ1RJT04gdGVzdCgpCisJUkVUVVJOUyBJTlQgQVMg JCQKK0RFQ0xBUkUKKwljdXIxIGN1cnNvciBmb3Igc2VsZWN0ICogZnJvbSBob2dlOworCXRt cCBpbnQ7CitCRUdJTgorCU9QRU4gY3VyMTsKKwlGRVRDSCBjdXIxIGludG8gdG1wOworCVJF VFVSTiB0bXA7CitFTkQgJCQKK0xBTkdVQUdFIHBscGdzcWwgOworCitTRUxFQ1QgdGVzdCgp OworCistLQorLS0gRGVsZXRlIGFsbCByb3dzIHRoZW4gZGVsZXRlIDEgcm93CitTRVQgcGdf YXVkaXQubG9nID0gJ3dyaXRlJzsKK1NFVCBwZ19hdWRpdC5yb2xlID0gJ2F1ZGl0b3InOwor CitjcmVhdGUgdGFibGUgYmFyCisoCisJY29sIGludAorKTsKKworZ3JhbnQgZGVsZXRlCisg ICBvbiBiYXIKKyAgIHRvIGF1ZGl0b3I7CisKK2luc2VydCBpbnRvIGJhciAoY29sKQorCQkg dmFsdWVzICgxKTsKK2RlbGV0ZSBmcm9tIGJhcjsKKworaW5zZXJ0IGludG8gYmFyIChjb2wp CisJCSB2YWx1ZXMgKDEpOworZGVsZXRlIGZyb20gYmFyCisgd2hlcmUgY29sID0gMTsKKwor ZHJvcCB0YWJsZSBiYXI7CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29udHJpYi5zZ21s IGIvZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbAppbmRleCA0OWE2Y2U4Li4wYTJiYWU4IDEw MDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29udHJpYi5zZ21sCisrKyBiL2RvYy9zcmMvc2dt bC9jb250cmliLnNnbWwKQEAgLTEyNCw2ICsxMjQsNyBAQCBDUkVBVEUgRVhURU5TSU9OIDxy ZXBsYWNlYWJsZT5tb2R1bGVfbmFtZTwvPiBGUk9NIHVucGFja2FnZWQ7CiAgJmx0cmVlOwog ICZwYWdlaW5zcGVjdDsKICAmcGFzc3dvcmRjaGVjazsKKyAmcGdhdWRpdDsKICAmcGdidWZm ZXJjYWNoZTsKICAmcGdjcnlwdG87CiAgJnBnZnJlZXNwYWNlbWFwOwpkaWZmIC0tZ2l0IGEv ZG9jL3NyYy9zZ21sL2ZpbGVsaXN0LnNnbWwgYi9kb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dt bAppbmRleCA2MjY4ZDU0Li4wM2ZlYTMyIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvZmls ZWxpc3Quc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dtbApAQCAtMTI2LDYg KzEyNiw3IEBACiA8IUVOVElUWSBvaWQybmFtZSAgICAgICAgU1lTVEVNICJvaWQybmFtZS5z Z21sIj4KIDwhRU5USVRZIHBhZ2VpbnNwZWN0ICAgICBTWVNURU0gInBhZ2VpbnNwZWN0LnNn bWwiPgogPCFFTlRJVFkgcGFzc3dvcmRjaGVjayAgIFNZU1RFTSAicGFzc3dvcmRjaGVjay5z Z21sIj4KKzwhRU5USVRZIHBnYXVkaXQgICAgICAgICBTWVNURU0gInBnYXVkaXQuc2dtbCI+ CiA8IUVOVElUWSBwZ2J1ZmZlcmNhY2hlICAgU1lTVEVNICJwZ2J1ZmZlcmNhY2hlLnNnbWwi PgogPCFFTlRJVFkgcGdjcnlwdG8gICAgICAgIFNZU1RFTSAicGdjcnlwdG8uc2dtbCI+CiA8 IUVOVElUWSBwZ2ZyZWVzcGFjZW1hcCAgU1lTVEVNICJwZ2ZyZWVzcGFjZW1hcC5zZ21sIj4K ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9wZ2F1ZGl0LnNnbWwgYi9kb2Mvc3JjL3NnbWwv cGdhdWRpdC5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZjhm MzEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2Mvc3JjL3NnbWwvcGdhdWRpdC5zZ21sCkBAIC0w LDAgKzEsNjU3IEBACis8IS0tIGRvYy9zcmMvc2dtbC9wZ2F1ZGl0LnNnbWwgLS0+CisKKzxz ZWN0MSBpZD0icGdhdWRpdCIgeHJlZmxhYmVsPSJwZ2F1ZGl0Ij4KKyAgPHRpdGxlPnBnX2F1 ZGl0PC90aXRsZT4KKworICA8aW5kZXh0ZXJtIHpvbmU9InBnYXVkaXQiPgorICAgIDxwcmlt YXJ5PnBnX2F1ZGl0PC9wcmltYXJ5PgorICA8L2luZGV4dGVybT4KKworICA8cGFyYT4KKyAg ICBUaGUgPGZpbGVuYW1lPnBnX2F1ZGl0PC9maWxlbmFtZT4gZXh0ZW5zaW9uIHByb3ZpZGVz IGRldGFpbGVkIHNlc3Npb24KKyAgICBhbmQvb3Igb2JqZWN0IGF1ZGl0IGxvZ2dpbmcgdmlh IHRoZSBzdGFuZGFyZCBsb2dnaW5nIGZhY2lsaXR5LiAgVGhlIGdvYWwKKyAgICBpcyB0byBw cm92aWRlIHRoZSB0b29scyBuZWVkZWQgdG8gcHJvZHVjZSBhdWRpdCBsb2dzIHJlcXVpcmVk IHRvIHBhc3MgYW55CisgICAgZ292ZXJubWVudCwgZmluYW5jaWFsLCBvciBJU08gY2VydGlm aWNhdGlvbiBhdWRpdC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgIEFuIGF1ZGl0IGlz IGFuIG9mZmljaWFsIGluc3BlY3Rpb24gb2YgYW4gaW5kaXZpZHVhbCdzIG9yIG9yZ2FuaXph dGlvbidzCisgICAgYWNjb3VudHMsIHR5cGljYWxseSBieSBhbiBpbmRlcGVuZGVudCBib2R5 LiAgVGhlIGluZm9ybWF0aW9uIGdhdGhlcmVkIGJ5CisgICAgPGZpbGVuYW1lPnBnX2F1ZGl0 PC9maWxlbmFtZT4gaXMgcHJvcGVybHkgY2FsbGVkIGFuIGF1ZGl0IHRyYWlsIG9yIGF1ZGl0 CisgICAgbG9nLiAgVGhlIHRlcm0gYXVkaXQgbG9nIGlzIHVzZWQgaW4gdGhpcyBkb2N1bWVu dGF0aW9uLgorICA8L3BhcmE+CisKKyAgPHNlY3QyPgorICAgIDx0aXRsZT5XaHkgPGxpdGVy YWw+cGdfYXVkaXQ8Lz4/PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgQmFzaWMgc3Rh dGVtZW50IGxvZ2dpbmcgY2FuIGJlIHByb3ZpZGVkIGJ5IHRoZSBzdGFuZGFyZCBsb2dnaW5n IGZhY2lsaXR5CisgICAgICB1c2luZyA8bGl0ZXJhbD5sb2dfc3RhdGVtZW50ID0gYWxsPC8+ LiAgVGhpcyBpcyBhY2NlcHRhYmxlIGZvciBtb25pdG9yaW5nCisgICAgICBhbmQgb3RoZXIg dXNhZ2VzIGJ1dCBkb2VzIG5vdCBwcm92aWRlIHRoZSBsZXZlbCBvZiBkZXRhaWwgZ2VuZXJh bGx5CisgICAgICByZXF1aXJlZCBmb3IgYW4gYXVkaXQuICBJdCBpcyBub3QgZW5vdWdoIHRv IGhhdmUgYSBsaXN0IG9mIGFsbCB0aGUKKyAgICAgIG9wZXJhdGlvbnMgcGVyZm9ybWVkIGFn YWluc3QgdGhlIGRhdGFiYXNlLiBJdCBtdXN0IGFsc28gYmUgcG9zc2libGUgdG8KKyAgICAg IGZpbmQgcGFydGljdWxhciBzdGF0ZW1lbnRzIHRoYXQgYXJlIG9mIGludGVyZXN0IHRvIGFu IGF1ZGl0b3IuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBGb3IgZXhhbXBs ZSwgYW4gYXVkaXRvciBtYXkgd2FudCB0byB2ZXJpZnkgdGhhdCBhIHBhcnRpY3VsYXIgdGFi bGUgd2FzCisgICAgICBjcmVhdGVkIGluc2lkZSBhIGRvY3VtZW50ZWQgbWFpbnRlbmFuY2Ug d2luZG93LiAgVGhpcyBtaWdodCBzZWVtIGxpa2UgYQorICAgICAgc2ltcGxlIGpvYiBmb3Ig Z3JlcCwgYnV0IHdoYXQgaWYgeW91IGFyZSBwcmVzZW50ZWQgd2l0aCBzb21ldGhpbmcgbGlr ZQorICAgICAgdGhpcyAoaW50ZW50aW9uYWxseSBvYmZ1c2NhdGVkKSBleGFtcGxlOgorICAg IDwvcGFyYT4KKworICAgIDxwcm9ncmFtbGlzdGluZz4KK0RPICQkCitCRUdJTgorICAgIEVY RUNVVEUgJ0NSRUFURSBUQUJMRSBpbXBvcnQnIHx8ICdhbnRfdGFibGUgKGlkIElOVCknOwor RU5EICQkOworICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgICA8cGFyYT4KKyAgICAgIFN0 YW5kYXJkIGxvZ2dpbmcgd2lsbCBnaXZlIHlvdSB0aGlzOgorICAgIDwvcGFyYT4KKworICAg IDxwcm9ncmFtbGlzdGluZz4KK0xPRzogIHN0YXRlbWVudDogRE8gJCQKK0JFR0lOCisgICAg RVhFQ1VURSAnQ1JFQVRFIFRBQkxFIGltcG9ydCcgfHwgJ2FudF90YWJsZSAoaWQgSU5UKSc7 CitFTkQgJCQ7CisgICAgPC9wcm9ncmFtbGlzdGluZz4KKworICAgIDxwYXJhPgorICAgICAg SXQgYXBwZWFycyB0aGF0IGZpbmRpbmcgdGhlIHRhYmxlIG9mIGludGVyZXN0IG1heSByZXF1 aXJlIHNvbWUga25vd2xlZGdlCisgICAgICBvZiB0aGUgY29kZSBpbiBjYXNlcyB3aGVyZSB0 YWJsZXMgYXJlIGNyZWF0ZWQgZHluYW1pY2FsbHkuICBUaGlzIGlzIG5vdAorICAgICAgaWRl YWwgc2luY2UgaXQgd291bGQgYmUgcHJlZmVycmFibGUgdG8ganVzdCBzZWFyY2ggb24gdGhl IHRhYmxlIG5hbWUuCisgICAgICBUaGlzIGlzIHdoZXJlIDxsaXRlcmFsPnBnX2F1ZGl0PC8+ IGNvbWVzIGluLiAgRm9yIHRoZSBzYW1lIGlucHV0LAorICAgICAgaXQgd2lsbCBwcm9kdWNl IHRoaXMgb3V0cHV0IGluIHRoZSBsb2c6CisgICAgPC9wYXJhPgorCisgICAgPHByb2dyYW1s aXN0aW5nPgorQVVESVQ6IFNFU1NJT04sMzMsMSxGVU5DVElPTixETywsLCJETyAkJAorQkVH SU4KKyAgICBFWEVDVVRFICdDUkVBVEUgVEFCTEUgaW1wb3J0JyB8fCAnYW50X3RhYmxlIChp ZCBJTlQpJzsKK0VORCAkJDsiCitBVURJVDogU0VTU0lPTiwzMywyLERETCxDUkVBVEUgVEFC TEUsVEFCTEUscHVibGljLmltcG9ydGFudF90YWJsZSxDUkVBVEUgVEFCTEUgaW1wb3J0YW50 X3RhYmxlIChpZCBJTlQpCisgICAgPC9wcm9ncmFtbGlzdGluZz4KKworICAgIDxwYXJhPgor ICAgICAgTm90IG9ubHkgaXMgdGhlIDxsaXRlcmFsPkRPPC8+IGJsb2NrIGxvZ2dlZCwgYnV0 IHN1YnN0YXRlbWVudCAyIGNvbnRhaW5zCisgICAgICB0aGUgZnVsbCB0ZXh0IG9mIHRoZSA8 bGl0ZXJhbD5DUkVBVEUgVEFCTEU8Lz4gd2l0aCB0aGUgc3RhdGVtZW50IHR5cGUsCisgICAg ICBvYmplY3QgdHlwZSwgYW5kIGZ1bGwtcXVhbGlmaWVkIG5hbWUgdG8gbWFrZSBzZWFyY2hl cyBlYXN5LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgV2hlbiBsb2dnaW5n IDxsaXRlcmFsPlNFTEVDVDwvPiBhbmQgPGxpdGVyYWw+RE1MPC8+IHN0YXRlbWVudHMsCisg ICAgICA8bGl0ZXJhbD5wZ19hdWRpdDwvPiBjYW4gYmUgY29uZmlndXJlZCB0byBsb2cgYSBz ZXBhcmF0ZSBlbnRyeSBmb3IgZWFjaAorICAgICAgcmVsYXRpb24gcmVmZXJlbmNlZCBpbiBh IHN0YXRlbWVudC4gIE5vIHBhcnNpbmcgaXMgcmVxdWlyZWQgdG8gZmluZCBhbGwKKyAgICAg IHN0YXRlbWVudHMgdGhhdCB0b3VjaCBhIHBhcnRpY3VsYXIgdGFibGUuICBJbiBmYWN0LCB0 aGUgZ29hbCBpcyB0aGF0IHRoZQorICAgICAgc3RhdGVtZW50IHRleHQgaXMgcHJvdmlkZWQg cHJpbWFyaWx5IGZvciBkZWVwIGZvcmVuc2ljcyBhbmQgc2hvdWxkIG5vdCBiZQorICAgICAg dGhlIHJlcXVpcmVkIGZvciBhbiBhdWRpdC4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDI+CisK KyAgPHNlY3QyPgorICAgIDx0aXRsZT5Vc2FnZSBDb25zaWRlcmF0aW9uczwvdGl0bGU+CisK KyAgICA8cGFyYT4KKyAgICAgIERlcGVuZGluZyBvbiBzZXR0aW5ncywgaXQgaXMgcG9zc2li bGUgZm9yIDxsaXRlcmFsPnBnX2F1ZGl0PC9saXRlcmFsPiB0bworICAgICAgZ2VuZXJhdGUg YW4gZW5vcm1vdXMgdm9sdW1lIG9mIGxvZ2dpbmcuICBCZSBjYXJlZnVsIHRvIGRldGVybWlu ZQorICAgICAgZXhhY3RseSB3aGF0IG5lZWRzIHRvIGJlIGF1ZGl0IGxvZ2dlZCBpbiB5b3Vy IGVudmlyb25tZW50IHRvIGF2b2lkCisgICAgICBsb2dnaW5nIHRvbyBtdWNoLgorICAgIDwv cGFyYT4KKworICAgIDxwYXJhPgorICAgICAgRm9yIGV4YW1wbGUsIHdoZW4gd29ya2luZyBp biBhbiBPTEFQIGVudmlyb25tZW50IGl0IHdvdWxkIHByb2JhYmx5IG5vdCBiZQorICAgICAg d2lzZSB0byBhdWRpdCBsb2cgaW5zZXJ0cyBpbnRvIGEgbGFyZ2UgZmFjdCB0YWJsZS4gIFRo ZSBzaXplIG9mIHRoZSBsb2cKKyAgICAgIGZpbGUgd2lsbCBsaWtlbHkgYmUgbWFueSB0aW1l cyB0aGUgYWN0dWFsIGRhdGEgc2l6ZSBvZiB0aGUgaW5zZXJ0cyBiZWNhdXNlCisgICAgICB0 aGUgbG9nIGZpbGUgaXMgZXhwcmVzc2VkIGFzIHRleHQuICBTaW5jZSBsb2dzIGFyZSBnZW5l cmFsbHkgc3RvcmVkIHdpdGgKKyAgICAgIHRoZSBPUyB0aGlzIG1heSBsZWFkIHRvIGRpc2sg c3BhY2UgYmVpbmcgZXhoYXVzdGVkIHZlcnkKKyAgICAgIHF1aWNrbHkuICBJbiBjYXNlcyB3 aGVyZSBpdCBpcyBub3QgcG9zc2libGUgdG8gbGltaXQgYXVkaXQgbG9nZ2luZyB0bworICAg ICAgY2VydGFpbiB0YWJsZXMsIGJlIHN1cmUgdG8gYXNzZXNzIHRoZSBwZXJmb3JtYW5jZSBp bXBhY3Qgd2hpbGUgdGVzdGluZworICAgICAgYW5kIGFsbG9jYXRlIHBsZW50eSBvZiBzcGFj ZSBvbiB0aGUgbG9nIHZvbHVtZS4gIFRoaXMgbWF5IGFsc28gYmUgdHJ1ZSBmb3IKKyAgICAg IE9MVFAgZW52aXJvbm1lbnRzLiAgRXZlbiBpZiB0aGUgaW5zZXJ0IHZvbHVtZSBpcyBub3Qg YXMgaGlnaCwgdGhlCisgICAgICBwZXJmb3JtYW5jZSBpbXBhY3Qgb2YgYXVkaXQgbG9nZ2lu ZyBtYXkgc3RpbGwgbm90aWNlYWJseSBhZmZlY3QgbGF0ZW5jeS4KKyAgICA8L3BhcmE+CisK KyAgICA8cGFyYT4KKyAgICAgIFRvIGxpbWl0IHRoZSBudW1iZXIgb2YgcmVsYXRpb25zIGF1 ZGl0IGxvZ2dlZCBmb3IgPGxpdGVyYWw+U0VMRUNUPC8+CisgICAgICBhbmQgPGxpdGVyYWw+ RE1MPC8+IHN0YXRtZW50cywgY29uc2lkZXIgdXNpbmcgb2JqZWN0IGF1ZGl0IGxvZ2dpbmcK KyAgICAgIChzZWUgPHhyZWYgbGlua2VuZD0icGdhdWRpdC1vYmplY3QtYXVkaXQtbG9nZ2lu ZyI+KS4gIE9iamVjdCBhdWRpdCBsb2dnaW5nCisgICAgICBhbGxvd3Mgc2VsZWN0aW9uIG9m IHRoZSByZWxhdGlvbnMgdG8gYmUgbG9nZ2VkIGFsbG93aW5nIGZvciByZWR1Y3Rpb24KKyAg ICAgIG9mIHRoZSBvdmVyYWxsIGxvZyB2b2x1bWUuICBIb3dldmVyLCB3aGVuIG5ldyByZWxh dGlvbnMgYXJlIGFkZGVkIHRoZXkKKyAgICAgIG11c3QgYmUgZXhwbGljaXRseSBhZGRlZCB0 byBvYmplY3QgYXVkaXQgbG9nZ2luZy4gIEEgcHJvZ3JhbW1hdGljCisgICAgICBzb2x1dGlv biB3aGVyZSBzcGVjaWZpZWQgdGFibGVzIGFyZSBleGNsdWRlZCBmcm9tIGxvZ2dpbmcgYW5k IGFsbCBvdGhlcnMKKyAgICAgIGFyZSBpbmNsdWRlZCBtYXkgYmUgYSBnb29kIG9wdGlvbiBp biB0aGlzIGNhc2UuCisgICAgPC9wYXJhPgorICA8L3NlY3QyPgorCisgIDxzZWN0Mj4KKyAg ICA8dGl0bGU+U2V0dGluZ3M8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICBTZXR0aW5n cyBtYXkgYmUgbW9kaWZpZWQgb25seSBieSBhIHN1cGVydXNlci4gQWxsb3dpbmcgbm9ybWFs IHVzZXJzIHRvCisgICAgICBjaGFuZ2UgdGhlaXIgc2V0dGluZ3Mgd291bGQgZGVmZWF0IHRo ZSBwb2ludCBvZiBhbiBhdWRpdCBsb2cuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+Cisg ICAgICBTZXR0aW5ncyBjYW4gYmUgc3BlY2lmaWVkIGdsb2JhbGx5IChpbgorICAgICAgPGZp bGVuYW1lPnBvc3RncmVzcWwuY29uZjwvZmlsZW5hbWU+IG9yIHVzaW5nCisgICAgICA8bGl0 ZXJhbD5BTFRFUiBTWVNURU0gLi4uIFNFVDwvPiksIGF0IHRoZSBkYXRhYmFzZSBsZXZlbCAo dXNpbmcKKyAgICAgIDxsaXRlcmFsPkFMVEVSIERBVEFCQVNFIC4uLiBTRVQ8L2xpdGVyYWw+ KSwgb3IgYXQgdGhlIHJvbGUgbGV2ZWwgKHVzaW5nCisgICAgICA8bGl0ZXJhbD5BTFRFUiBS T0xFIC4uLiBTRVQ8L2xpdGVyYWw+KS4gIE5vdGUgdGhhdCBzZXR0aW5ncyBhcmUgbm90Cisg ICAgICBpbmhlcml0ZWQgdGhyb3VnaCBub3JtYWwgcm9sZSBpbmhlcml0YW5jZSBhbmQgPGxp dGVyYWw+U0VUIFJPTEU8Lz4gd2lsbAorICAgICAgbm90IGFsdGVyIGEgdXNlcidzIDxsaXRl cmFsPnBnX2F1ZGl0PC8+IHNldHRpbmdzLiAgVGhpcyBpcyBhIGxpbWl0YXRpb24KKyAgICAg IG9mIHRoZSByb2xlcyBzeXN0ZW0gYW5kIG5vdCBpbmhlcmVudCB0byA8bGl0ZXJhbD5wZ19h dWRpdDwvPi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoZSA8bGl0ZXJh bD5wZ19hdWRpdDwvPiBleHRlbnNpb24gbXVzdCBiZSBsb2FkZWQgaW4KKyAgICAgIDx4cmVm IGxpbmtlbmQ9Imd1Yy1zaGFyZWQtcHJlbG9hZC1saWJyYXJpZXMiPi4gIE90aGVyd2lzZSwg YW4gZXJyb3IKKyAgICAgIHdpbGwgYmUgcmFpc2VkIGF0IGxvYWQgdGltZSBhbmQgbm8gYXVk aXQgbG9nZ2luZyB3aWxsIG9jY3VyLgorICAgIDwvcGFyYT4KKworICAgIDx2YXJpYWJsZWxp c3Q+CisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtcGdhdWRpdC1sb2ciIHhyZWZsYWJl bD0icGdfYXVkaXQubG9nIj4KKyAgICAgICAgPHRlcm0+PHZhcm5hbWU+cGdfYXVkaXQubG9n PC92YXJuYW1lPiAoPHR5cGU+c3RyaW5nPC90eXBlPikKKyAgICAgICAgICA8aW5kZXh0ZXJt PgorICAgICAgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+cGdfYXVkaXQubG9nPC8+IGNvbmZp Z3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICAgICAgIDwvaW5kZXh0ZXJtPgor ICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4K KyAgICAgICAgICAgIFNwZWNpZmllcyB3aGljaCBjbGFzc2VzIG9mIHN0YXRlbWVudHMgd2ls bCBiZSBsb2dnZWQgYnkgc2Vzc2lvbgorICAgICAgICAgICAgYXVkaXQgbG9nZ2luZy4gIFBv c3NpYmxlIHZhbHVlcyBhcmU6CisgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgPGl0 ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgPHBh cmE+CisgICAgICAgICAgICAgICAgPGxpdGVyYWw+UkVBRDwvbGl0ZXJhbD4gLSA8bGl0ZXJh bD5TRUxFQ1Q8L2xpdGVyYWw+IGFuZAorICAgICAgICAgICAgICAgIDxsaXRlcmFsPkNPUFk8 L2xpdGVyYWw+IHdoZW4gdGhlIHNvdXJjZSBpcyBhIHJlbGF0aW9uIG9yIGEKKyAgICAgICAg ICAgICAgICBxdWVyeS4KKyAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9s aXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgPHBhcmE+ CisgICAgICAgICAgICAgICAgPGxpdGVyYWw+V1JJVEU8L2xpdGVyYWw+IC0gPGxpdGVyYWw+ SU5TRVJUPC9saXRlcmFsPiwKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbD5VUERBVEU8L2xp dGVyYWw+LCA8bGl0ZXJhbD5ERUxFVEU8L2xpdGVyYWw+LAorICAgICAgICAgICAgICAgIDxs aXRlcmFsPlRSVU5DQVRFPC9saXRlcmFsPiwgYW5kIDxsaXRlcmFsPkNPUFk8L2xpdGVyYWw+ IHdoZW4gdGhlCisgICAgICAgICAgICAgICAgZGVzdGluYXRpb24gaXMgYSByZWxhdGlvbi4K KyAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAg ICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAg ICAgPGxpdGVyYWw+RlVOQ1RJT048L2xpdGVyYWw+IC0gRnVuY3Rpb24gY2FsbHMgYW5kCisg ICAgICAgICAgICAgICAgPGxpdGVyYWw+RE88L2xpdGVyYWw+IGJsb2Nrcy4KKyAgICAgICAg ICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxs aXN0aXRlbT4KKyAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGxpdGVy YWw+Uk9MRTwvbGl0ZXJhbD4gLSBTdGF0ZW1lbnRzIHJlbGF0ZWQgdG8gcm9sZXMgYW5kCisg ICAgICAgICAgICAgICAgcHJpdmlsZWdlczogPGxpdGVyYWw+R1JBTlQ8L2xpdGVyYWw+LAor ICAgICAgICAgICAgICAgIDxsaXRlcmFsPlJFVk9LRTwvbGl0ZXJhbD4sCisgICAgICAgICAg ICAgICAgPGxpdGVyYWw+Q1JFQVRFL0FMVEVSL0RST1AgUk9MRTwvbGl0ZXJhbD4uCisgICAg ICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAg ICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxs aXRlcmFsPkRETDwvbGl0ZXJhbD4gLSBBbGwgPGxpdGVyYWw+RERMPC8+IHRoYXQgaXMgbm90 IGluY2x1ZGVkCisgICAgICAgICAgICAgICAgaW4gdGhlIDxsaXRlcmFsPlJPTEU8Lz4gY2xh c3MgcGx1cyA8bGl0ZXJhbD5SRUlOREVYPC8+LgorICAgICAgICAgICAgICA8L3BhcmE+Cisg ICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAg ICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbD5NSVNDPC9saXRlcmFs PiAtIE1pc2NlbGxhbmVvdXMgY29tbWFuZHMsIGUuZy4KKyAgICAgICAgICAgICAgICA8bGl0 ZXJhbD5ESVNDQVJEPC9saXRlcmFsPiwgPGxpdGVyYWw+RkVUQ0g8L2xpdGVyYWw+LAorICAg ICAgICAgICAgICAgIDxsaXRlcmFsPkNIRUNLUE9JTlQ8L2xpdGVyYWw+LCA8bGl0ZXJhbD5W QUNVVU08L2xpdGVyYWw+LgorICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8 L2xpc3RpdGVtPgorICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorCisgICAgICAgICAgPHBh cmE+CisgICAgICAgICAgICBNdWx0aXBsZSBjbGFzc2VzIGNhbiBiZSBwcm92aWRlZCB1c2lu ZyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IGFuZAorICAgICAgICAgICAgY2xhc3NlcyBjYW4g YmUgc3VidHJhY3RlZCBieSBwcmVmYWNpbmcgdGhlIGNsYXNzIHdpdGggYQorICAgICAgICAg ICAgPGxpdGVyYWw+LTwvPiBzaWduIChzZWUgPHhyZWYgbGlua2VuZD0icGdhdWRpdC1zZXNz aW9uLWF1ZGl0LWxvZ2dpbmciPikuCisgICAgICAgICAgICBUaGUgZGVmYXVsdCBpcyA8bGl0 ZXJhbD5ub25lPC8+LgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4K KyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMt cGdhdWRpdC1sb2ctY2F0YWxvZyIgeHJlZmxhYmVsPSJwZ19hdWRpdC5sb2dfY2F0YWxvZyI+ CisgICAgICAgIDx0ZXJtPjx2YXJuYW1lPnBnX2F1ZGl0LmxvZ19jYXRhbG9nPC92YXJuYW1l PiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pCisgICAgICAgICAgPGluZGV4dGVybT4KKyAgICAg ICAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnBnX2F1ZGl0LmxvZ19jYXRhbG9nPC8+IGNvbmZp Z3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICAgICAgIDwvaW5kZXh0ZXJtPgor ICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4K KyAgICAgICAgICAgIFNwZWNpZmllcyB0aGF0IHNlc3Npb24gbG9nZ2luZyBzaG91bGQgYmUg ZW5hYmxlZCBpbiB0aGUgY2FzZSB3aGVyZSBhbGwKKyAgICAgICAgICAgIHJlbGF0aW9ucyBp biBhIHN0YXRlbWVudCBhcmUgaW4gcGdfY2F0YWxvZy4gIERpc2FibGluZyB0aGlzIHNldHRp bmcKKyAgICAgICAgICAgIHdpbGwgcmVkdWNlIG5vaXNlIGluIHRoZSBsb2cgZnJvbSB0b29s cyBsaWtlIHBzcWwgYW5kIFBnQWRtaW4gdGhhdCBxdWVyeQorICAgICAgICAgICAgdGhlIGNh dGFsb2cgZnJlcXVlbnRseSBhbmQgaGVhdmlseS4gVGhlIGRlZmF1bHQgaXMgPGxpdGVyYWw+ b248Lz4uCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAg PC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1wZ2F1ZGl0 LWxvZy1ub3RpY2UiIHhyZWZsYWJlbD0icGdfYXVkaXQubG9nX25vdGljZSI+CisgICAgICAg IDx0ZXJtPjx2YXJuYW1lPnBnX2F1ZGl0LmxvZ19ub3RpY2U8L3Zhcm5hbWU+ICg8dHlwZT5i b29sZWFuPC90eXBlPikKKyAgICAgICAgICA8aW5kZXh0ZXJtPgorICAgICAgICAgICAgPHBy aW1hcnk+PHZhcm5hbWU+cGdfYXVkaXQubG9nX25vdGljZTwvPiBjb25maWd1cmF0aW9uIHBh cmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgICAgICA8L2luZGV4dGVybT4KKyAgICAgICAgPC90 ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAg ICBTcGVjaWZpZXMgdGhhdCB0aGUgYXVkaXQgbG9nIG1lc3NhZ2VzIHNob3VsZCBiZSByYWlz ZWQgYXMKKyAgICAgICAgICAgIDxsaXRlcmFsPk5PVElDRTwvPiBpbnN0ZWFkIG9mIDxsaXRl cmFsPkxPRzwvPi4gIFRoZSBwcmltYXJ5CisgICAgICAgICAgICBhZHZhbnRhZ2UgaXMgdGhh dCA8bGl0ZXJhbD5OT1RJQ0U8Lz4gbWVzc2FnZXMgY2FuIGJlIGV4cG9zZWQKKyAgICAgICAg ICAgIHRocm91Z2ggdGhlIHVzZXIgaW50ZXJmYWNlLiAgVGhpcyBzZXR0aW5nIGlzIHVzZWQg Zm9yIHJlZ3Jlc3Npb24KKyAgICAgICAgICAgIHRlc3RpbmcgYW5kIG1heSBhbHNvIGJlIHVz ZWZ1bCB0byBlbmQgdXNlcnMgZm9yIHRlc3RpbmcuICBJdCBpcyBub3QKKyAgICAgICAgICAg IGludGVuZGVkIHRvIGJlIHVzZWQgaW4gYSBwcm9kdWN0aW9uIGVudmlyb25tZW50IGFzIGl0 IHdpbGwgbGVhaworICAgICAgICAgICAgd2hpY2ggc3RhdGVtZW50cyBhcmUgYmVpbmcgbG9n Z2VkIHRvIHRoZSB1c2VyLiBUaGUgZGVmYXVsdCBpcworICAgICAgICAgICAgPGxpdGVyYWw+ b2ZmPC8+LgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAg IDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtcGdhdWRp dC1sb2ctcGFyYW1ldGVyIiB4cmVmbGFiZWw9InBnX2F1ZGl0LmxvZ19wYXJhbWV0ZXIiPgor ICAgICAgICA8dGVybT48dmFybmFtZT5wZ19hdWRpdC5sb2dfcGFyYW1ldGVyPC92YXJuYW1l PiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pCisgICAgICAgICAgPGluZGV4dGVybT4KKyAgICAg ICAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnBnX2F1ZGl0LmxvZ19wYXJhbWV0ZXI8Lz4gY29u ZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgICAgICAgPC9pbmRleHRlcm0+ CisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJh PgorICAgICAgICAgICAgU3BlY2lmaWVzIHRoYXQgYXVkaXQgbG9nZ2luZyBzaG91bGQgaW5j bHVkZSB0aGUgcGFyYW1ldGVycyB0aGF0CisgICAgICAgICAgICB3ZXJlIHBhc3NlZCB3aXRo IHRoZSBzdGF0ZW1lbnQuICBXaGVuIHBhcmFtZXRlcnMgYXJlIHByZXNlbnQgdGhleSB3aWxs CisgICAgICAgICAgICBiZSBpbmNsdWRlZCBpbiBDU1YgZm9ybWF0IGFmdGVyIHRoZSBzdGF0 ZW1lbnQgdGV4dC4gVGhlIGRlZmF1bHQgaXMKKyAgICAgICAgICAgIDxsaXRlcmFsPm9mZjwv Pi4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L3Zh cmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLXBnYXVkaXQtbG9n LXJlbGF0aW9uIiB4cmVmbGFiZWw9InBnX2F1ZGl0LmxvZ19yZWxhdGlvbiI+CisgICAgICAg IDx0ZXJtPjx2YXJuYW1lPnBnX2F1ZGl0LmxvZ19yZWxhdGlvbjwvdmFybmFtZT4gKDx0eXBl PmJvb2xlYW48L3R5cGU+KQorICAgICAgICAgIDxpbmRleHRlcm0+CisgICAgICAgICAgICA8 cHJpbWFyeT48dmFybmFtZT5wZ19hdWRpdC5sb2dfcmVsYXRpb248Lz4gY29uZmlndXJhdGlv biBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgICAgICAgPC9pbmRleHRlcm0+CisgICAgICAg IDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAg ICAgICAgU3BlY2lmaWVzIHdoZXRoZXIgc2Vzc2lvbiBhdWRpdCBsb2dnaW5nIHNob3VsZCBj cmVhdGUgYSBzZXBhcmF0ZQorICAgICAgICAgICAgbG9nIGVudHJ5IGZvciBlYWNoIHJlbGF0 aW9uICg8bGl0ZXJhbD5UQUJMRTwvPiwgPGxpdGVyYWw+VklFVzwvPiwKKyAgICAgICAgICAg IGV0Yy4pIHJlZmVyZW5jZWQgaW4gYSA8bGl0ZXJhbD5TRUxFQ1Q8Lz4gb3IgPGxpdGVyYWw+ RE1MPC8+CisgICAgICAgICAgICBzdGF0ZW1lbnQuICBUaGlzIGlzIGEgdXNlZnVsIHNob3J0 Y3V0IGZvciBleGhhdXN0aXZlIGxvZ2dpbmcKKyAgICAgICAgICAgIHdpdGhvdXQgdXNpbmcg b2JqZWN0IGF1ZGl0IGxvZ2dpbmcuICBUaGUgZGVmYXVsdCBpcworICAgICAgICAgICAgPGxp dGVyYWw+b2ZmPC8+LgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4K KyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMt cGdhdWRpdC1yb2xlIiB4cmVmbGFiZWw9InBnX2F1ZGl0LnJvbGUiPgorICAgICAgICA8dGVy bT48dmFybmFtZT5wZ19hdWRpdC5yb2xlPC92YXJuYW1lPiAoPHR5cGU+c3RyaW5nPC90eXBl PikKKyAgICAgICAgICA8aW5kZXh0ZXJtPgorICAgICAgICAgICAgPHByaW1hcnk+PHZhcm5h bWU+cGdfYXVkaXQucm9sZTwvPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4K KyAgICAgICAgICA8L2luZGV4dGVybT4KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlz dGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIG1h c3RlciByb2xlIHRvIHVzZSBmb3Igb2JqZWN0IGF1ZGl0IGxvZ2dpbmcuICBNdWxpcGxlCisg ICAgICAgICAgICBhdWRpdCByb2xlcyBjYW4gYmUgZGVmaW5lZCBieSBncmFudGluZyB0aGVt IHRvIHRoZSBtYXN0ZXIgcm9sZS4KKyAgICAgICAgICAgIFRoaXMgYWxsb3dzIG11bHRpcGxl IGdyb3VwcyB0byBiZSBpbiBjaGFyZ2Ugb2YgZGlmZmVyZW50IGFzcGVjdHMKKyAgICAgICAg ICAgIG9mIGF1ZGl0IGxvZ2dpbmcuICBUaGVyZSBpcyBubyBkZWZhdWx0LgorICAgICAgICAg IDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5Pgor ICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3NlY3QyPgorCisgIDxzZWN0MiBpZD0icGdhdWRp dC1zZXNzaW9uLWF1ZGl0LWxvZ2dpbmciPgorICAgIDx0aXRsZT5TZXNzaW9uIEF1ZGl0IExv Z2dpbmc8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICBTZXNzaW9uIGF1ZGl0IGxvZ2dp bmcgcHJvdmlkZXMgZGV0YWlsZWQgbG9ncyBvZiBhbGwgc3RhdGVtZW50cyBleGVjdXRlZAor ICAgICAgYnkgYSB1c2VyIGluIHRoZSBiYWNrZW5kLgorICAgIDwvcGFyYT4KKworICAgIDxz ZWN0Mz4KKyAgICAgIDx0aXRsZT5Db25maWd1cmF0aW9uPC90aXRsZT4KKworICAgICAgPHBh cmE+CisgICAgICAgIFNlc3Npb24gbG9nZ2luZyBpcyBlbmFibGVkIHdpdGggdGhlIDx4cmVm IGxpbmtlbmQ9Imd1Yy1wZ2F1ZGl0LWxvZyI+CisgICAgICAgIHNldHRpbmcuCisKKyAgICAg ICAgRW5hYmxlIHNlc3Npb24gbG9nZ2luZyBmb3IgYWxsIDxsaXRlcmFsPkRNTDwvPiBhbmQg PGxpdGVyYWw+RERMPC8+IGFuZAorICAgICAgICBsb2cgYWxsIHJlbGF0aW9ucyBpbiA8bGl0 ZXJhbD5ETUw8Lz4gc3RhdGVtZW50czoKKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Citz ZXQgcGdfYXVkaXQubG9nID0gJ3dyaXRlLCBkZGwnOworc2V0IHBnX2F1ZGl0LmxvZ19yZWxh dGlvbiA9IG9uOworICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L3BhcmE+ CisKKyAgICAgIDxwYXJhPgorICAgICAgICBFbmFibGUgc2Vzc2lvbiBsb2dnaW5nIGZvciBh bGwgY29tbWFuZHMgZXhjZXB0IDxsaXRlcmFsPk1JU0M8Lz4gYW5kCisgICAgICAgIHJhaXNl IGF1ZGl0IGxvZyBtZXNzYWdlcyBhcyA8bGl0ZXJhbD5OT1RJQ0U8Lz46CisgICAgICAgICAg PHByb2dyYW1saXN0aW5nPgorc2V0IHBnX2F1ZGl0LmxvZyA9ICdhbGwsIC1taXNjJzsKK3Nl dCBwZ19hdWRpdC5sb2dfbm90aWNlID0gb247CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGlu Zz4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3QzPgorCisgICAgPHNlY3QzPgorICAgICAg PHRpdGxlPkV4YW1wbGU8L3RpdGxlPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgSW4gdGhp cyBleGFtcGxlIHNlc3Npb24gYXVkaXQgbG9nZ2luZyBpcyB1c2VkIGZvciBsb2dnaW5nCisg ICAgICAgIDxsaXRlcmFsPkRETDwvPiBhbmQgPGxpdGVyYWw+U0VMRUNUPC8+IHN0YXRlbWVu dHMuICBOb3RlIHRoYXQgdGhlCisgICAgICAgIGluc2VydCBzdGF0ZW1lbnQgaXMgbm90IGxv Z2dlZCBzaW5jZSB0aGUgPGxpdGVyYWw+V1JJVEU8Lz4gY2xhc3MKKyAgICAgICAgaXMgbm90 IGVuYWJsZWQKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFNRTDoK KyAgICAgIDwvcGFyYT4KKyAgICAgIDxwcm9ncmFtbGlzdGluZz4KK3NldCBwZ19hdWRpdC5s b2cgPSAncmVhZCwgZGRsJzsKKworY3JlYXRlIHRhYmxlIGFjY291bnQKKygKKyAgICBpZCBp bnQsCisgICAgbmFtZSB0ZXh0LAorICAgIHBhc3N3b3JkIHRleHQsCisgICAgZGVzY3JpcHRp b24gdGV4dAorKTsKKworaW5zZXJ0IGludG8gYWNjb3VudCAoaWQsIG5hbWUsIHBhc3N3b3Jk LCBkZXNjcmlwdGlvbikKKyAgICAgICAgICAgICB2YWx1ZXMgKDEsICd1c2VyMScsICdIQVNI MScsICdibGFoLCBibGFoJyk7CisKK3NlbGVjdCAqCisgICAgZnJvbSBhY2NvdW50OworICAg ICAgPC9wcm9ncmFtbGlzdGluZz4KKworICAgICAgPHBhcmE+CisgICAgICAgIExvZyBPdXRw dXQ6CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwcm9ncmFtbGlzdGluZz4KK0FVRElUOiBT RVNTSU9OLDEsMSxEREwsQ1JFQVRFIFRBQkxFLFRBQkxFLHB1YmxpYy5hY2NvdW50LGNyZWF0 ZSB0YWJsZSBhY2NvdW50CisoCisgICAgaWQgaW50LAorICAgIG5hbWUgdGV4dCwKKyAgICBw YXNzd29yZCB0ZXh0LAorICAgIGRlc2NyaXB0aW9uIHRleHQKKyk7CitBVURJVDogU0VTU0lP TiwyLDEsUkVBRCxTRUxFQ1QsLCxzZWxlY3QgKgorICAgIGZyb20gYWNjb3VudAorICAgICAg PC9wcm9ncmFtbGlzdGluZz4KKyAgICA8L3NlY3QzPgorICA8L3NlY3QyPgorCisgIDxzZWN0 MiBpZD0icGdhdWRpdC1vYmplY3QtYXVkaXQtbG9nZ2luZyI+CisgICAgPHRpdGxlPk9iamVj dCBBdWRpdGluZzwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgIE9iamVjdCBhdWRpdCBs b2dnaW5nIGxvZ3Mgc3RhdGVtZW50cyB0aGF0IGFmZmVjdCBhIHBhcnRpY3VsYXIgcmVsYXRp b24uCisgICAgICBPbmx5IDxsaXRlcmFsPlNFTEVDVDwvPiwgPGxpdGVyYWw+SU5TRVJUPC8+ LCA8bGl0ZXJhbD5VUERBVEU8Lz4gYW5kCisgICAgICA8bGl0ZXJhbD5ERUxFVEU8Lz4gY29t bWFuZHMgYXJlIHN1cHBvcnRlZC4gIDxsaXRlcmFsPlRSVU5DQVRFPC8+IGlzIG5vdAorICAg ICAgaW5jbHVkZWQgYmVjYXVzZSB0aGVyZSBpcyBubyBzcGVjaWZpYyBwcml2aWxlZ2UgZm9y IGl0LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgT2JqZWN0IGF1ZGl0IGxv Z2dpbmcgaXMgaW50ZW5kZWQgdG8gYmUgYSBmaW5lci1ncmFpbmVkIHJlcGxhY2VtZW50IGZv cgorICAgICAgPGxpdGVyYWw+cGdfYXVkaXQubG9nID0gJ3JlYWQsIHdyaXRlJzwvbGl0ZXJh bD4uICBBcyBzdWNoLCBpdCBtYXkgbm90CisgICAgICBtYWtlIHNlbnNlIHRvIHVzZSB0aGVt IGluIGNvbmp1bmN0aW9uIGJ1dCBvbmUgcG9zc2libGUgc2NlbmFyaW8gd291bGQKKyAgICAg IGJlIHRvIHVzZSBzZXNzaW9uIGxvZ2dpbmcgdG8gY2FwdHVyZSBlYWNoIHN0YXRlbWVudCBh bmQgdGhlbiBzdXBwbGVtZW50CisgICAgICB0aGF0IHdpdGggb2JqZWN0IGxvZ2dpbmcgdG8g Z2V0IG1vcmUgZGV0YWlsIGFib3V0IHNwZWNpZmljIHJlbGF0aW9ucy4gCisgICAgPC9wYXJh PgorCisgICAgPHNlY3QzPgorICAgICAgPHRpdGxlPkNvbmZpZ3VyYXRpb248L3RpdGxlPgor CisgICAgICA8cGFyYT4KKyAgICAgICAgT2JqZWN0LWxldmVsIGF1ZGl0IGxvZ2dpbmcgaXMg aW1wbGVtZW50ZWQgdmlhIHRoZSByb2xlcyBzeXN0ZW0uICBUaGUKKyAgICAgICAgPHhyZWYg bGlua2VuZD0iZ3VjLXBnYXVkaXQtcm9sZSI+IHNldHRpbmcgZGVmaW5lcyB0aGUgcm9sZSB0 aGF0CisgICAgICAgIHdpbGwgYmUgdXNlZCBmb3IgYXVkaXQgbG9nZ2luZy4gIEEgcmVsYXRp b24gKDxsaXRlcmFsPlRBQkxFPC8+LAorICAgICAgICA8bGl0ZXJhbD5WSUVXPC8+LCBldGMu KSB3aWxsIGJlIGF1ZGl0IGxvZ2dlZCB3aGVuIHRoZSBhdWRpdCByb2xlIGhhcworICAgICAg ICBwZXJtaXNzaW9ucyBmb3IgdGhlIGNvbW1hbmQgZXhlY3V0ZWQgb3IgaW5oZXJpdHMgdGhl IHBlcm1pc3Npb25zIGZyb20KKyAgICAgICAgYW5vdGhlciByb2xlLiAgVGhpcyBhbGxvd3Mg eW91IHRvIGVmZmVjdGl2ZWx5IGhhdmUgbXVsdGlwbGUgYXVkaXQgcm9sZXMKKyAgICAgICAg ZXZlbiB0aG91Z2ggdGhlcmUgaXMgYSBzaW5nbGUgbWFzdGVyIHJvbGUgaW4gYW55IGNvbnRl eHQuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgU2V0IDx4cmVmIGxp bmtlbmQ9Imd1Yy1wZ2F1ZGl0LXJvbGUiPiB0byA8bGl0ZXJhbD5hdWRpdG9yPC8+IGFuZAor ICAgICAgZ3JhbnQgPGxpdGVyYWw+U0VMRUNUPC8+IGFuZCA8bGl0ZXJhbD5ERUxFVEU8Lz4g cHJpdmlsZWdlcyBvbiB0aGUKKyAgICAgIDxsaXRlcmFsPmFjY291bnQ8Lz4gdGFibGUuICBB bnkgPGxpdGVyYWw+U0VMRUNUPC8+IG9yCisgICAgICA8bGl0ZXJhbD5ERUxFVEU8Lz4gc3Rh dGVtZW50cyBvbiA8bGl0ZXJhbD5hY2NvdW50PC8+IHdpbGwgbm93IGJlCisgICAgICBsb2dn ZWQ6CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwcm9ncmFtbGlzdGluZz4KK3NldCBwZ19h dWRpdC5yb2xlID0gJ2F1ZGl0b3InOworCitncmFudCBzZWxlY3QsIGRlbGV0ZQorICAgb24g cHVibGljLmFjY291bnQKKyAgIHRvIGF1ZGl0b3I7CisgICAgICA8L3Byb2dyYW1saXN0aW5n PgorICAgIDwvc2VjdDM+CisKKyAgICA8c2VjdDM+CisgICAgICA8dGl0bGU+RXhhbXBsZTwv dGl0bGU+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJbiB0aGlzIGV4YW1wbGUgb2JqZWN0 IGF1ZGl0IGxvZ2dpbmcgaXMgdXNlZCB0byBpbGx1c3RyYXRlIGhvdyBhCisgICAgICAgIGdy YW51bGFyIGFwcHJvYWNoIG1heSBiZSB0YWtlbiB0b3dhcmRzIGxvZ2dpbmcgb2YgPGxpdGVy YWw+U0VMRUNUPC8+CisgICAgICAgIGFuZCA8bGl0ZXJhbD5ETUw8Lz4gc3RhdGVtZW50cy4g IE5vdGUgdGhhdCBsb2dnaW5nIG9uIHRoZQorICAgICAgICA8bGl0ZXJhbD5hY2NvdW50PC8+ IHRhYmxlIGlzIGNvbnRyb2xsZWQgYnkgY29sdW1uLWxldmVsIHBlcm1pc3Npb25zLAorICAg ICAgICB3aGlsZSBsb2dnaW5nIG9uIDxsaXRlcmFsPmFjY291bnRfcm9sZV9tYXA8Lz4gaXMg dGFibGUtbGV2ZWwuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBT UUw6CisgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorc2V0IHBn X2F1ZGl0LnJvbGUgPSAnYXVkaXRvcic7CisKK2NyZWF0ZSB0YWJsZSBhY2NvdW50CisoCisg ICAgaWQgaW50LAorICAgIG5hbWUgdGV4dCwKKyAgICBwYXNzd29yZCB0ZXh0LAorICAgIGRl c2NyaXB0aW9uIHRleHQKKyk7CisKK2dyYW50IHNlbGVjdCAocGFzc3dvcmQpCisgICBvbiBw dWJsaWMuYWNjb3VudAorICAgdG8gYXVkaXRvcjsKKworc2VsZWN0IGlkLCBuYW1lCisgIGZy b20gYWNjb3VudDsKKworc2VsZWN0IHBhc3N3b3JkCisgIGZyb20gYWNjb3VudDsKKworZ3Jh bnQgdXBkYXRlIChuYW1lLCBwYXNzd29yZCkKKyAgIG9uIHB1YmxpYy5hY2NvdW50CisgICB0 byBhdWRpdG9yOworCit1cGRhdGUgYWNjb3VudAorICAgc2V0IGRlc2NyaXB0aW9uID0gJ3lh ZGEsIHlhZGEnOworCit1cGRhdGUgYWNjb3VudAorICAgc2V0IHBhc3N3b3JkID0gJ0hBU0gy JzsKKworY3JlYXRlIHRhYmxlIGFjY291bnRfcm9sZV9tYXAKKygKKyAgICBhY2NvdW50X2lk IGludCwKKyAgICByb2xlX2lkIGludAorKTsKKworZ3JhbnQgc2VsZWN0CisgICBvbiBwdWJs aWMuYWNjb3VudF9yb2xlX21hcAorICAgdG8gYXVkaXRvcjsKKworc2VsZWN0IGFjY291bnQu cGFzc3dvcmQsCisgICAgICAgYWNjb3VudF9yb2xlX21hcC5yb2xlX2lkCisgIGZyb20gYWNj b3VudAorICAgICAgIGlubmVyIGpvaW4gYWNjb3VudF9yb2xlX21hcAorICAgICAgICAgICAg b24gYWNjb3VudC5pZCA9IGFjY291bnRfcm9sZV9tYXAuYWNjb3VudF9pZAorICAgICAgICA8 L3Byb2dyYW1saXN0aW5nPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgTG9nIE91dHB1dDoK KyAgICAgIDwvcGFyYT4KKworICAgICAgPHByb2dyYW1saXN0aW5nPgorQVVESVQ6IE9CSkVD VCwxLDEsUkVBRCxTRUxFQ1QsVEFCTEUscHVibGljLmFjY291bnQsc2VsZWN0IHBhc3N3b3Jk CisgIGZyb20gYWNjb3VudAorQVVESVQ6IE9CSkVDVCwyLDEsV1JJVEUsVVBEQVRFLFRBQkxF LHB1YmxpYy5hY2NvdW50LHVwZGF0ZSBhY2NvdW50CisgICBzZXQgcGFzc3dvcmQgPSAnSEFT SDInCitBVURJVDogT0JKRUNULDMsMSxSRUFELFNFTEVDVCxUQUJMRSxwdWJsaWMuYWNjb3Vu dCxzZWxlY3QgYWNjb3VudC5wYXNzd29yZCwKKyAgICAgICBhY2NvdW50X3JvbGVfbWFwLnJv bGVfaWQKKyAgZnJvbSBhY2NvdW50CisgICAgICAgaW5uZXIgam9pbiBhY2NvdW50X3JvbGVf bWFwCisgICAgICAgICAgICBvbiBhY2NvdW50LmlkID0gYWNjb3VudF9yb2xlX21hcC5hY2Nv dW50X2lkCitBVURJVDogT0JKRUNULDMsMSxSRUFELFNFTEVDVCxUQUJMRSxwdWJsaWMuYWNj b3VudF9yb2xlX21hcCxzZWxlY3QgYWNjb3VudC5wYXNzd29yZCwKKyAgICAgICBhY2NvdW50 X3JvbGVfbWFwLnJvbGVfaWQKKyAgZnJvbSBhY2NvdW50CisgICAgICAgaW5uZXIgam9pbiBh Y2NvdW50X3JvbGVfbWFwCisgICAgICAgICAgICBvbiBhY2NvdW50LmlkID0gYWNjb3VudF9y b2xlX21hcC5hY2NvdW50X2lkCisgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgIDwvc2Vj dDM+CisgIDwvc2VjdDI+CisKKyAgPHNlY3QyPgorICAgIDx0aXRsZT5Gb3JtYXQ8L3RpdGxl PgorCisgICAgPHBhcmE+CisgICAgICBBdWRpdCBlbnRyaWVzIGFyZSB3cml0dGVuIHRvIHRo ZSBzdGFuZGFyZCBsb2dnaW5nIGZhY2lsaXR5IGFuZCBjb250YWluCisgICAgICB0aGUgZm9s bG93aW5nIGNvbHVtbnMgaW4gY29tbWEtc2VwYXJhdGVkIGZvcm1hdDoKKworICAgICAgPG5v dGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIE91dHB1dCBpcyBjb21wbGlhbnQgQ1NW IGZvcm1hdCBvbmx5IGlmIHRoZSBsb2cgbGluZSBwcmVmaXggcG9ydGlvbgorICAgICAgICAg IG9mIGVhY2ggbG9nIGVudHJ5IGlzIHJlbW92ZWQuCisgICAgICAgIDwvcGFyYT4KKyAgICAg IDwvbm90ZT4KKworICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgPGxpc3RpdGVtPgor ICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGxpdGVyYWw+QVVESVRfVFlQRTwvPiAt IDxsaXRlcmFsPlNFU1NJT048Lz4gb3IKKyAgICAgICAgICAgIDxsaXRlcmFsPk9CSkVDVDwv Pi4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxs aXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxsaXRlcmFsPlNUQVRF TUVOVF9JRDwvPiAtIFVuaXF1ZSBzdGF0ZW1lbnQgSUQgZm9yIHRoaXMgc2Vzc2lvbi4KKyAg ICAgICAgICAgIEVhY2ggc3RhdGVtZW50IElEIHJlcHJlc2VudHMgYSBiYWNrZW5kIGNhbGwu ICBTdGF0ZW1lbnQgSURzIGFyZQorICAgICAgICAgICAgc2VxdWVudGlhbCBldmVuIGlmIHNv bWUgc3RhdGVtZW50cyBhcmUgbm90IGxvZ2dlZC4gIFRoZXJlIG1heSBiZQorICAgICAgICAg ICAgbXVsdGlwbGUgZW50cmllcyBmb3IgYSBzdGF0ZW1lbnQgSUQgd2hlbiBtb3JlIHRoYW4g b25lIHJlbGF0aW9uCisgICAgICAgICAgICBpcyBsb2dnZWQuCisgICAgICAgICAgPC9wYXJh PgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAg PHBhcmE+CisgICAgICAgICAgICA8bGl0ZXJhbD5TVUJTVEFURU1FTlRfSUQ8Lz4gLSBTZXF1 ZW50aWFsIElEIGZvciBlYWNoCisgICAgICAgICAgICBzdWJzdGF0ZW1lbnQgd2l0aGluIHRo ZSBtYWluIHN0YXRlbWVudC4gIEZvciBleGFtcGxlLCBjYWxsaW5nCisgICAgICAgICAgICBh IGZ1bmN0aW9uIGZyb20gYSBxdWVyeS4gIFN1YnN0YXRlbWVudCBJRHMgYXJlIGNvbnRpbnVv dXMKKyAgICAgICAgICAgIGV2ZW4gaWYgc29tZSBzdWJzdGF0ZW1lbnRzIGFyZSBub3QgbG9n Z2VkLiAgVGhlcmUgbWF5IGJlIG11bHRpcGxlCisgICAgICAgICAgICBlbnRyaWVzIGZvciBh IHN1YnN0YXRlbWVudCBJRCB3aGVuIG1vcmUgdGhhbiBvbmUgcmVsYXRpb24gaXMgbG9nZ2Vk LgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxp c3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGxpdGVyYWw+Q0xBU1M8 Lz4gLSBlLmcuICg8bGl0ZXJhbD5SRUFEPC8+LAorICAgICAgICAgICAgPGxpdGVyYWw+Uk9M RTwvPikgKHNlZSA8eHJlZiBsaW5rZW5kPSJndWMtcGdhdWRpdC1sb2ciPikuCisgICAgICAg ICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+Cisg ICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8bGl0ZXJhbD5DT01NQU5EPC8+IC0gZS5n LiA8bGl0ZXJhbD5BTFRFUiBUQUJMRTwvPiwKKyAgICAgICAgICAgIDxsaXRlcmFsPlNFTEVD VDwvPi4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAg IDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxsaXRlcmFsPk9C SkVDVF9UWVBFPC8+IC0gPGxpdGVyYWw+VEFCTEU8Lz4sCisgICAgICAgICAgICA8bGl0ZXJh bD5JTkRFWDwvPiwgPGxpdGVyYWw+VklFVzwvPiwgZXRjLgorICAgICAgICAgICAgQXZhaWxh YmxlIGZvciA8bGl0ZXJhbD5TRUxFQ1Q8Lz4sIDxsaXRlcmFsPkRNTDwvPiBhbmQgbW9zdAor ICAgICAgICAgICAgPGxpdGVyYWw+RERMPC8+IHN0YXRlbWVudHMuCisgICAgICAgICAgPC9w YXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAg ICAgPHBhcmE+CisgICAgICAgICAgICA8bGl0ZXJhbD5PQkpFQ1RfTkFNRTwvPiAtIFRoZSBm dWxseS1xdWFsaWZpZWQgb2JqZWN0IG5hbWUKKyAgICAgICAgICAgIChlLmcuIHB1YmxpYy5h Y2NvdW50KS4gIEF2YWlsYWJsZSBmb3IgPGxpdGVyYWw+U0VMRUNUPC8+LAorICAgICAgICAg ICAgPGxpdGVyYWw+RE1MPC8+IGFuZCBtb3N0IDxsaXRlcmFsPkRETDwvPiBzdGF0ZW1lbnRz LgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxp c3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGxpdGVyYWw+U1RBVEVN RU5UPC8+IC0gU3RhdGVtZW50IGV4ZWN1dGVkIG9uIHRoZSBiYWNrZW5kLgorICAgICAgICAg IDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvaXRlbWl6ZWRsaXN0Pgor ICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgVXNlIDx4cmVmIGxpbmtlbmQ9Imd1 Yy1sb2ctbGluZS1wcmVmaXgiPiB0byBhZGQgYW55IG90aGVyIGZpZWxkcyB0aGF0CisgICAg ICBhcmUgbmVlZGVkIHRvIHNhdGlzZnkgeW91ciBhdWRpdCBsb2cgcmVxdWlyZW1lbnRzLiAg QSB0eXBpY2FsIGxvZyBsaW5lCisgICAgICBwcmVmaXggbWlnaHQgYmUgPGxpdGVyYWw+JyVt ICV1ICVkOiAnPC8+IHdoaWNoIHdvdWxkIHByb3ZpZGUgdGhlIGRhdGUvdGltZSwKKyAgICAg IHVzZXIgbmFtZSwgYW5kIGRhdGFiYXNlIG5hbWUgZm9yIGVhY2ggYXVkaXQgbG9nLgorICAg IDwvcGFyYT4KKyAgPC9zZWN0Mj4KKworICA8c2VjdDI+CisgICAgPHRpdGxlPkNhdmVhdHM8 L3RpdGxlPgorCisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAg ICAgPHBhcmE+CisgICAgICAgICAgT2JqZWN0IHJlbmFtZXMgYXJlIGxvZ2dlZCB1bmRlciB0 aGUgbmFtZSB0aGV5IHdlcmUgcmVuYW1lZCB0by4KKyAgICAgICAgICBGb3IgZXhhbXBsZSwg cmVuYW1pbmcgYSB0YWJsZSB3aWxsIHByb2R1Y2UgdGhlIGZvbGxvd2luZyByZXN1bHQ6Cisg ICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitBTFRFUiBUQUJM RSB0ZXN0IFJFTkFNRSBUTyB0ZXN0MjsKKworQVVESVQ6IFNFU1NJT04sMzYsMSxEREwsQUxU RVIgVEFCTEUsVEFCTEUscHVibGljLnRlc3QyLEFMVEVSIFRBQkxFIHRlc3QgUkVOQU1FIFRP IHRlc3QyCisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2xpc3RpdGVtPgor CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEl0IGlzIHBv c3NpYmxlIHRvIGhhdmUgYSBjb21tYW5kIGxvZ2dlZCBtb3JlIHRoYW4gb25jZS4gIEZvciBl eGFtcGxlLAorICAgICAgICAgIHdoZW4gYSB0YWJsZSBpcyBjcmVhdGVkIHdpdGggYSBwcmlt YXJ5IGtleSBzcGVjaWZpZWQgYXQgY3JlYXRpb24gdGltZQorICAgICAgICAgIHRoZSBpbmRl eCBmb3IgdGhlIHByaW1hcnkga2V5IHdpbGwgYmUgbG9nZ2VkIGluZGVwZW5kZW50bHkgYW5k IGFub3RoZXIKKyAgICAgICAgICBhdWRpdCBsb2cgd2lsbCBiZSBtYWRlIGZvciB0aGUgaW5k ZXggdW5kZXIgdGhlIGNyZWF0ZSBlbnRyeS4gIFRoZQorICAgICAgICAgIG11bHRpcGxlIGVu dHJpZXMgd2lsbCBob3dldmVyIGJlIGNvbnRhaW5lZCB3aXRoaW4gb25lIHN0YXRlbWVudCBJ RC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKworICAgICAgPGxpc3Rp dGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBdXRvdmFjdXVtIGFuZCBBdXRvYW5h bHl6ZSBhcmUgbm90IGxvZ2dlZCwgbm9yIGFyZSB0aGV5IGludGVuZGVkIHRvIGJlLgorICAg ICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorCisgICAgICA8bGlzdGl0ZW0+Cisg ICAgICAgIDxwYXJhPgorICAgICAgICAgIFN0YXRlbWVudHMgdGhhdCBhcmUgZXhlY3V0ZWQg YWZ0ZXIgYSB0cmFuc2FjdGlvbiBlbnRlcnMgYW4gYWJvcnRlZCBzdGF0ZQorICAgICAgICAg IHdpbGwgbm90IGJlIGF1ZGl0IGxvZ2dlZC4gIEhvd2V2ZXIsIHRoZSBzdGF0ZW1lbnQgdGhh dCBjYXVzZWQgdGhlIGVycm9yCisgICAgICAgICAgYW5kIGFueSBzdWJzZXF1ZW50IHN0YXRl bWVudHMgZXhlY3V0ZWQgaW4gdGhlIGFib3J0ZWQgdHJhbnNhY3Rpb24gd2lsbAorICAgICAg ICAgIGJlIGxvZ2dlZCBhcyBFUlJPUnMgYnkgdGhlIHN0YW5kYXJkIGxvZ2dpbmcgZmFjaWxp dHkuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXpl ZGxpc3Q+CisgIDwvc2VjdDI+CisKKyAgPHNlY3QyPgorICAgIDx0aXRsZT5BdXRob3JzPC90 aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgQWJoaWppdCBNZW5vbi1TZW4gPGVtYWlsPmFt c0AybmRRdWFkcmFudC5jb208L2VtYWlsPiwgSWFuIEJhcndpY2sgPGVtYWlsPmlhbkAybmRR dWFkcmFudC5jb208L2VtYWlsPiwgYW5kIERhdmlkIFN0ZWVsZSA8ZW1haWw+ZGF2aWRAcGdt YXN0ZXJzLm5ldDwvZW1haWw+LgorICAgIDwvcGFyYT4KKyAgPC9zZWN0Mj4KKzwvc2VjdDE+ Cg== --------------020704080409090401040109-- --DrPCcSTpqRSvpSfLxSI8Eg0ttTCQtOTme 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 iQIcBAEBCAAGBQJVQp2lAAoJEIA2uIJQ5SFAhxAQAIh/NgeN0SxQHwFu1AYacjpn tKDy4OVjGbP+uj0JxUHr25qreW4ghjVxZ4h51U8z8rVV9aDAmPRHF8/7lGD4n07k g+2iSID3xWSIH+gFxql1phBLX8RAB6zSOPB0Td9AqbcVoMYohicleIwm8vV0DMJ+ IH6nZ0Kf87D8yP/z96noa2grAgUDiLCn7F1tiKOTv3yngCEOjlmWy2KEa1RCVfY1 TiOiY3+Ei/E+A7CZiLtwP9Kih+49cMRjj0y34wlE7xRCMXLNtLHWPln7ZbuHEuWe YTq4rgv3aHCE0EQ3+3brXj+iJAiq9rouj2m2Yr9Whemq+BnKDcNTxn+OcMZEPAT6 u64hPbTMw4Dbig2H2Cc8dRp6o1bLx6uLn29nxW+mFY/MA8tIyuNymc9COfxDSiMe KLJEizyDO3nKgWhRPyX5zIfGO7STa1YUXA8XI/r5BmuqbJ0uXqI5dC/L0Afy5eli FZnmEFwuz2QOrwHrVYhNGw/Wp8rqOvjMlv/hlTkmnUh4bk+RBK+YMgVrMt39NYIl Aei6ZpHts/uRjlWzRzOP5jihRo5MzM+8Qd0h8U1EnzkLpS2w6KMqUW4tNsWOcc3M Bb7JT1EVO4kRQfK5L2eeocgDiduCBj0I1YCE9Xmnk4RVaQ/L/wsn/HuPMRvS5/fC i2vJSWcaHjoqpswusiS1 =/PPv -----END PGP SIGNATURE----- --DrPCcSTpqRSvpSfLxSI8Eg0ttTCQtOTme--