Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hqvSO-0003N0-8I for pgsql-hackers@arkaria.postgresql.org; Fri, 26 Jul 2019 08:20:04 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1hqvSM-0003VQ-LX for pgsql-hackers@arkaria.postgresql.org; Fri, 26 Jul 2019 08:20:02 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hqvSM-0003V9-0P for pgsql-hackers@lists.postgresql.org; Fri, 26 Jul 2019 08:20:02 +0000 Received: from courriel.mines-paristech.fr ([77.158.173.149] helo=antispam-1.ensmp.fr) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.92) (envelope-from ) id 1hqvSH-00061A-PJ for pgsql-hackers@lists.postgresql.org; Fri, 26 Jul 2019 08:20:00 +0000 Received: from smtp-4.mines-paristech.fr (smtp-4.ensmp.fr [77.158.173.143]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by antispam-1.ensmp.fr (antispam.mines-paristech.fr) with ESMTPS id 33DDF55FA2; Fri, 26 Jul 2019 10:19:54 +0200 (CEST) Received: from lancre (89-160-187-23.du.xdsl.is [89.160.187.23]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp-4.mines-paristech.fr (Postfix) with ESMTPSA id AEE762C0297; Fri, 26 Jul 2019 10:19:53 +0200 (CEST) Date: Fri, 26 Jul 2019 08:19:47 +0000 (GMT) From: Fabien COELHO X-X-Sender: fabien@lancre To: Kyotaro Horiguchi cc: daniel@manitou-mail.org, peter.eisentraut@2ndquadrant.com, iwata.aya@jp.fujitsu.com, PostgreSQL Developers Subject: Re: psql - add SHOW_ALL_RESULTS option In-Reply-To: <20190726.131704.86173346.horikyota.ntt@gmail.com> Message-ID: References: <522881f5-a081-4229-a51b-b230e1321236@manitou-mail.org> <20190726.131704.86173346.horikyota.ntt@gmail.com> User-Agent: Alpine 2.21 (DEB 202 2017-01-01) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="8323329-1102959102-1564129193=:13195" X-CLAMAV-SCAN: ok X-VRSPAM-SCORE: 0 X-VRSPAM-STATE: legit X-VRSPAM-CAUSE: gggruggvucftvghtrhhoucdtuddrgeduvddrkeeggddtfecutefuodetggdotefrucfrrhhofhhilhgvmecuggftfghnshhusghstghrihgsvgenuceurghilhhouhhtmecufedttdenucenucfjughrpeffhffvufgjkfhffgggtgesmhdtreertdervdenucfhrhhomhephfgrsghivghnucevqffgnffjqfcuoegtohgvlhhhohestghrihdrvghnshhmphdrfhhrqeenucfkphepkeelrdduiedtrddukeejrddvfeenucfrrghrrghmpehmohguvgepshhmthhpohhuth X-VRSPAM-EXTCAUSE: mhhouggvpehsmhhtphhouhht List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --8323329-1102959102-1564129193=:13195 Content-Type: text/plain; format=flowed; charset=US-ASCII Hello Kyotaro-san, >> Attached a v2 for the always-show-all-results variant. Thanks for the >> debug! > > I have some comments on this patch. > > I'm +1 for always output all results without having knobs. That makes 4 opinions expressed towards this change of behavior, and none against. > Documentation (psql-ref.sgml) has another place that needs the > same amendment. Indeed. > Looking the output for -t, -0, -A or something like, we might need > to introduce result-set separator. Yep, possibly. I'm not sure this is material for this patch, though. > # -eH looks broken for me but it would be another issue. It seems to work for me. Could you be more precise about how it is broken? > Valid setting of FETCH_COUNT disables this feature. I think it is > unwanted behavior. Yes and no: this behavior (bug, really) is pre-existing, FETCH_COUNT does not work with combined queries: sh> /usr/bin/psql psql (12beta2 ...) fabien=# \set FETCH_COUNT 2 fabien=# SELECT 1234 \; SELECT 5432 ; fabien=# same thing with pg 11.4, and probably down to every version of postgres since the feature was implemented... I think that fixing this should be a separate bug report and patch. I'll try to look at it. Thanks for the feedback. Attached v3 with further documentation updates. -- Fabien. --8323329-1102959102-1564129193=:13195 Content-Type: text/x-diff; name=psql-always-show-results-3.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=psql-always-show-results-3.patch ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcHNxbC1yZWYuc2dtbCBi L2RvYy9zcmMvc2dtbC9yZWYvcHNxbC1yZWYuc2dtbA0KaW5kZXggNzc4OWZj NjE3Ny4uNGU2YWI1YTBhNSAxMDA2NDQNCi0tLSBhL2RvYy9zcmMvc2dtbC9y ZWYvcHNxbC1yZWYuc2dtbA0KKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wc3Fs LXJlZi5zZ21sDQpAQCAtMTI3LDE4ICsxMjcsMTEgQEAgZWNobyAnXHggXFwg U0VMRUNUICogRlJPTSBmb287JyB8IHBzcWwNCiAgICAgICAgY29tbWFuZHMg aW5jbHVkZWQgaW4gdGhlIHN0cmluZyB0byBkaXZpZGUgaXQgaW50byBtdWx0 aXBsZQ0KICAgICAgICB0cmFuc2FjdGlvbnMuICAoU2VlIDx4cmVmIGxpbmtl bmQ9InByb3RvY29sLWZsb3ctbXVsdGktc3RhdGVtZW50Ii8+DQogICAgICAg IGZvciBtb3JlIGRldGFpbHMgYWJvdXQgaG93IHRoZSBzZXJ2ZXIgaGFuZGxl cyBtdWx0aS1xdWVyeSBzdHJpbmdzLikNCi0gICAgICAgQWxzbywgPGFwcGxp Y2F0aW9uPnBzcWw8L2FwcGxpY2F0aW9uPiBvbmx5IHByaW50cyB0aGUNCi0g ICAgICAgcmVzdWx0IG9mIHRoZSBsYXN0IDxhY3JvbnltPlNRTDwvYWNyb255 bT4gY29tbWFuZCBpbiB0aGUgc3RyaW5nLg0KLSAgICAgICBUaGlzIGlzIGRp ZmZlcmVudCBmcm9tIHRoZSBiZWhhdmlvciB3aGVuIHRoZSBzYW1lIHN0cmlu ZyBpcyByZWFkIGZyb20NCi0gICAgICAgYSBmaWxlIG9yIGZlZCB0byA8YXBw bGljYXRpb24+cHNxbDwvYXBwbGljYXRpb24+J3Mgc3RhbmRhcmQgaW5wdXQs DQotICAgICAgIGJlY2F1c2UgdGhlbiA8YXBwbGljYXRpb24+cHNxbDwvYXBw bGljYXRpb24+IHNlbmRzDQotICAgICAgIGVhY2ggPGFjcm9ueW0+U1FMPC9h Y3JvbnltPiBjb21tYW5kIHNlcGFyYXRlbHkuDQogICAgICAgPC9wYXJhPg0K ICAgICAgIDxwYXJhPg0KLSAgICAgICBCZWNhdXNlIG9mIHRoaXMgYmVoYXZp b3IsIHB1dHRpbmcgbW9yZSB0aGFuIG9uZSBTUUwgY29tbWFuZCBpbiBhDQot ICAgICAgIHNpbmdsZSA8b3B0aW9uPi1jPC9vcHRpb24+IHN0cmluZyBvZnRl biBoYXMgdW5leHBlY3RlZCByZXN1bHRzLg0KLSAgICAgICBJdCdzIGJldHRl ciB0byB1c2UgcmVwZWF0ZWQgPG9wdGlvbj4tYzwvb3B0aW9uPiBjb21tYW5k cyBvciBmZWVkDQotICAgICAgIG11bHRpcGxlIGNvbW1hbmRzIHRvIDxhcHBs aWNhdGlvbj5wc3FsPC9hcHBsaWNhdGlvbj4ncyBzdGFuZGFyZCBpbnB1dCwN CisgICAgICAgSWYgaGF2aW5nIHNldmVyYWwgY29tbWFuZHMgZXhlY3V0ZWQg aW4gb25lIHRyYW5zYWN0aW9uIGlzIG5vdCBkZXNpcmVkLCANCisgICAgICAg dXNlIHJlcGVhdGVkIDxvcHRpb24+LWM8L29wdGlvbj4gY29tbWFuZHMgb3Ig ZmVlZCBtdWx0aXBsZSBjb21tYW5kcyB0bw0KKyAgICAgICA8YXBwbGljYXRp b24+cHNxbDwvYXBwbGljYXRpb24+J3Mgc3RhbmRhcmQgaW5wdXQsDQogICAg ICAgIGVpdGhlciB1c2luZyA8YXBwbGljYXRpb24+ZWNobzwvYXBwbGljYXRp b24+IGFzIGlsbHVzdHJhdGVkIGFib3ZlLCBvcg0KICAgICAgICB2aWEgYSBz aGVsbCBoZXJlLWRvY3VtZW50LCBmb3IgZXhhbXBsZToNCiA8cHJvZ3JhbWxp c3Rpbmc+DQpAQCAtMzM1NSwxMCArMzM0OCw4IEBAIHNlbGVjdCAxXDsgc2Vs ZWN0IDJcOyBzZWxlY3QgMzsNCiAgICAgICAgIGNvbW1hbmRzIGluY2x1ZGVk IGluIHRoZSBzdHJpbmcgdG8gZGl2aWRlIGl0IGludG8gbXVsdGlwbGUNCiAg ICAgICAgIHRyYW5zYWN0aW9ucy4gIChTZWUgPHhyZWYgbGlua2VuZD0icHJv dG9jb2wtZmxvdy1tdWx0aS1zdGF0ZW1lbnQiLz4NCiAgICAgICAgIGZvciBt b3JlIGRldGFpbHMgYWJvdXQgaG93IHRoZSBzZXJ2ZXIgaGFuZGxlcyBtdWx0 aS1xdWVyeSBzdHJpbmdzLikNCi0gICAgICAgIDxhcHBsaWNhdGlvbj5wc3Fs PC9hcHBsaWNhdGlvbj4gcHJpbnRzIG9ubHkgdGhlIGxhc3QgcXVlcnkgcmVz dWx0DQotICAgICAgICBpdCByZWNlaXZlcyBmb3IgZWFjaCByZXF1ZXN0OyBp biB0aGlzIGV4YW1wbGUsIGFsdGhvdWdoIGFsbA0KLSAgICAgICAgdGhyZWUg PGNvbW1hbmQ+U0VMRUNUPC9jb21tYW5kPnMgYXJlIGluZGVlZCBleGVjdXRl ZCwgPGFwcGxpY2F0aW9uPnBzcWw8L2FwcGxpY2F0aW9uPg0KLSAgICAgICAg b25seSBwcmludHMgdGhlIDxsaXRlcmFsPjM8L2xpdGVyYWw+Lg0KKyAgICAg ICAgPGFwcGxpY2F0aW9uPnBzcWw8L2FwcGxpY2F0aW9uPiBwcmludHMgYWxs IHJlc3VsdHMgaXQgcmVjZWl2ZXMsIG9uZQ0KKyAgICAgICAgYWZ0ZXIgdGhl IG90aGVyLg0KICAgICAgICAgPC9wYXJhPg0KICAgICAgICAgPC9saXN0aXRl bT4NCiAgICAgICA8L3Zhcmxpc3RlbnRyeT4NCmRpZmYgLS1naXQgYS9zcmMv YmluL3BzcWwvY29tbW9uLmMgYi9zcmMvYmluL3BzcWwvY29tbW9uLmMNCmlu ZGV4IDQ0YTc4MjQ3OGQuLjQ1MzRjNDU4NTQgMTAwNjQ0DQotLS0gYS9zcmMv YmluL3BzcWwvY29tbW9uLmMNCisrKyBiL3NyYy9iaW4vcHNxbC9jb21tb24u Yw0KQEAgLTQ3Miw2ICs0NzIsMTYgQEAgUmVzZXRDYW5jZWxDb25uKHZvaWQp DQogI2VuZGlmDQogfQ0KIA0KK3N0YXRpYyB2b2lkDQorU2hvd0Vycm9yTWVz c2FnZShjb25zdCBQR3Jlc3VsdCAqcmVzdWx0KQ0KK3sNCisJY29uc3QgY2hh ciAqZXJyb3IgPSBQUWVycm9yTWVzc2FnZShwc2V0LmRiKTsNCisNCisJaWYg KHN0cmxlbihlcnJvcikpDQorCQlwZ19sb2dfaW5mbygiJXMiLCBlcnJvcik7 DQorDQorCUNoZWNrQ29ubmVjdGlvbigpOw0KK30NCiANCiAvKg0KICAqIEFj Y2VwdFJlc3VsdA0KQEAgLTQ4Miw3ICs0OTIsNyBAQCBSZXNldENhbmNlbENv bm4odm9pZCkNCiAgKiBSZXR1cm5zIHRydWUgZm9yIHZhbGlkIHJlc3VsdCwg ZmFsc2UgZm9yIGVycm9yIHN0YXRlLg0KICAqLw0KIHN0YXRpYyBib29sDQot QWNjZXB0UmVzdWx0KGNvbnN0IFBHcmVzdWx0ICpyZXN1bHQpDQorQWNjZXB0 UmVzdWx0KGNvbnN0IFBHcmVzdWx0ICpyZXN1bHQsIGJvb2wgc2hvd19lcnJv cikNCiB7DQogCWJvb2wJCU9LOw0KIA0KQEAgLTUxMywxNSArNTIzLDggQEAg QWNjZXB0UmVzdWx0KGNvbnN0IFBHcmVzdWx0ICpyZXN1bHQpDQogCQkJCWJy ZWFrOw0KIAkJfQ0KIA0KLQlpZiAoIU9LKQ0KLQl7DQotCQljb25zdCBjaGFy ICplcnJvciA9IFBRZXJyb3JNZXNzYWdlKHBzZXQuZGIpOw0KLQ0KLQkJaWYg KHN0cmxlbihlcnJvcikpDQotCQkJcGdfbG9nX2luZm8oIiVzIiwgZXJyb3Ip Ow0KLQ0KLQkJQ2hlY2tDb25uZWN0aW9uKCk7DQotCX0NCisJaWYgKCFPSyAm JiBzaG93X2Vycm9yKQ0KKwkJU2hvd0Vycm9yTWVzc2FnZShyZXN1bHQpOw0K IA0KIAlyZXR1cm4gT0s7DQogfQ0KQEAgLTcwMSw3ICs3MDQsNyBAQCBQU1FM ZXhlYyhjb25zdCBjaGFyICpxdWVyeSkNCiANCiAJUmVzZXRDYW5jZWxDb25u KCk7DQogDQotCWlmICghQWNjZXB0UmVzdWx0KHJlcykpDQorCWlmICghQWNj ZXB0UmVzdWx0KHJlcywgdHJ1ZSkpDQogCXsNCiAJCUNsZWFyT3JTYXZlUmVz dWx0KHJlcyk7DQogCQlyZXMgPSBOVUxMOw0KQEAgLTc0Myw3ICs3NDYsNyBA QCBQU1FMZXhlY1dhdGNoKGNvbnN0IGNoYXIgKnF1ZXJ5LCBjb25zdCBwcmlu dFF1ZXJ5T3B0ICpvcHQpDQogDQogCVJlc2V0Q2FuY2VsQ29ubigpOw0KIA0K LQlpZiAoIUFjY2VwdFJlc3VsdChyZXMpKQ0KKwlpZiAoIUFjY2VwdFJlc3Vs dChyZXMsIHRydWUpKQ0KIAl7DQogCQlDbGVhck9yU2F2ZVJlc3VsdChyZXMp Ow0KIAkJcmV0dXJuIDA7DQpAQCAtOTk5LDE5OSArMTAwMiwxMTMgQEAgbG9v cF9leGl0Og0KIAlyZXR1cm4gc3VjY2VzczsNCiB9DQogDQotDQogLyoNCi0g KiBQcm9jZXNzUmVzdWx0OiB1dGlsaXR5IGZ1bmN0aW9uIGZvciB1c2UgYnkg U2VuZFF1ZXJ5KCkgb25seQ0KLSAqDQotICogV2hlbiBvdXIgY29tbWFuZCBz dHJpbmcgY29udGFpbmVkIGEgQ09QWSBGUk9NIFNURElOIG9yIENPUFkgVE8g U1RET1VULA0KLSAqIFBRZXhlYygpIGhhcyBzdG9wcGVkIGF0IHRoZSBQR3Jl c3VsdCBhc3NvY2lhdGVkIHdpdGggdGhlIGZpcnN0IHN1Y2gNCi0gKiBjb21t YW5kLiAgSW4gdGhhdCBldmVudCwgd2UnbGwgbWFyc2hhbCBkYXRhIGZvciB0 aGUgQ09QWSBhbmQgdGhlbiBjeWNsZQ0KLSAqIHRocm91Z2ggYW55IHN1YnNl cXVlbnQgUEdyZXN1bHQgb2JqZWN0cy4NCi0gKg0KLSAqIFdoZW4gdGhlIGNv bW1hbmQgc3RyaW5nIGNvbnRhaW5lZCBubyBzdWNoIENPUFkgY29tbWFuZCwg dGhpcyBmdW5jdGlvbg0KLSAqIGRlZ2VuZXJhdGVzIHRvIGFuIEFjY2VwdFJl c3VsdCgpIGNhbGwuDQotICoNCi0gKiBDaGFuZ2VzIGl0cyBhcmd1bWVudCB0 byBwb2ludCB0byB0aGUgbGFzdCBQR3Jlc3VsdCBvZiB0aGUgY29tbWFuZCBz dHJpbmcsDQotICogb3IgTlVMTCBpZiB0aGF0IHJlc3VsdCB3YXMgZm9yIGEg Q09QWSBUTyBTVERPVVQuICAoUmV0dXJuaW5nIE5VTEwgcHJldmVudHMNCi0g KiB0aGUgY29tbWFuZCBzdGF0dXMgZnJvbSBiZWluZyBwcmludGVkLCB3aGlj aCB3ZSB3YW50IGluIHRoYXQgY2FzZSBzbyB0aGF0DQotICogdGhlIHN0YXR1 cyBsaW5lIGRvZXNuJ3QgZ2V0IHRha2VuIGFzIHBhcnQgb2YgdGhlIENPUFkg ZGF0YS4pDQotICoNCi0gKiBSZXR1cm5zIHRydWUgb24gY29tcGxldGUgc3Vj Y2VzcywgZmFsc2Ugb3RoZXJ3aXNlLiAgUG9zc2libGUgZmFpbHVyZSBtb2Rl cw0KLSAqIGluY2x1ZGUgcHVyZWx5IGNsaWVudC1zaWRlIHByb2JsZW1zOyBj aGVjayB0aGUgdHJhbnNhY3Rpb24gc3RhdHVzIGZvciB0aGUNCi0gKiBzZXJ2 ZXItc2lkZSBvcGluaW9uLg0KKyAqIE1hcnNoYWwgdGhlIENPUFkgZGF0YS4g IEVpdGhlciBzdWJyb3V0aW5lIHdpbGwgZ2V0IHRoZQ0KKyAqIGNvbm5lY3Rp b24gb3V0IG9mIGl0cyBDT1BZIHN0YXRlLCB0aGVuIGNhbGwgUFFyZXN1bHRT dGF0dXMoKQ0KKyAqIG9uY2UgYW5kIHJlcG9ydCBhbnkgZXJyb3IuDQorICoN CisgKiBGb3IgQ09QWSBPVVQsIGRpcmVjdCB0aGUgb3V0cHV0IHRvIHBzZXQu Y29weVN0cmVhbSBpZiBpdCdzIHNldCwNCisgKiBvdGhlcndpc2UgdG8gcHNl dC5nZm5hbWUgaWYgaXQncyBzZXQsIG90aGVyd2lzZSB0byBxdWVyeUZvdXQu DQorICogRm9yIENPUFkgSU4sIHVzZSBwc2V0LmNvcHlTdHJlYW0gYXMgZGF0 YSBzb3VyY2UgaWYgaXQncyBzZXQsDQorICogb3RoZXJ3aXNlIGN1cl9jbWRf c291cmNlLg0KKyAqDQorICogVXBkYXRlIHJlc3VsdCBpZiBmdXJ0aGVyIHBy b2Nlc3NpbmcgaXMgbmVjZXNzYXJ5LiAgKFJldHVybmluZyBOVUxMDQorICog cHJldmVudHMgdGhlIGNvbW1hbmQgc3RhdHVzIGZyb20gYmVpbmcgcHJpbnRl ZCwgd2hpY2ggd2Ugd2FudCBpbiB0aGF0DQorICogY2FzZSBzbyB0aGF0IHRo ZSBzdGF0dXMgbGluZSBkb2Vzbid0IGdldCB0YWtlbiBhcyBwYXJ0IG9mIHRo ZSBDT1BZIGRhdGEuKQ0KICAqLw0KIHN0YXRpYyBib29sDQotUHJvY2Vzc1Jl c3VsdChQR3Jlc3VsdCAqKnJlc3VsdHMpDQorSGFuZGxlQ29weVJlc3VsdChQ R3Jlc3VsdCAqKnJlc3VsdCkNCiB7DQogCWJvb2wJCXN1Y2Nlc3MgPSB0cnVl Ow0KLQlib29sCQlmaXJzdF9jeWNsZSA9IHRydWU7DQorCUZJTEUJICAgKmNv cHlzdHJlYW07DQorCVBHcmVzdWx0ICAgKmNvcHlfcmVzdWx0Ow0KKwlFeGVj U3RhdHVzVHlwZSByZXN1bHRfc3RhdHVzID0gUFFyZXN1bHRTdGF0dXMoKnJl c3VsdCk7DQogDQotCWZvciAoOzspDQorCUFzc2VydChyZXN1bHRfc3RhdHVz ID09IFBHUkVTX0NPUFlfT1VUIHx8DQorCQkgICByZXN1bHRfc3RhdHVzID09 IFBHUkVTX0NPUFlfSU4pOw0KKw0KKwlTZXRDYW5jZWxDb25uKCk7DQorCWlm IChyZXN1bHRfc3RhdHVzID09IFBHUkVTX0NPUFlfT1VUKQ0KIAl7DQotCQlF eGVjU3RhdHVzVHlwZSByZXN1bHRfc3RhdHVzOw0KLQkJYm9vbAkJaXNfY29w eTsNCi0JCVBHcmVzdWx0ICAgKm5leHRfcmVzdWx0Ow0KKwkJYm9vbAkJbmVl ZF9jbG9zZSA9IGZhbHNlOw0KKwkJYm9vbAkJaXNfcGlwZSA9IGZhbHNlOw0K IA0KLQkJaWYgKCFBY2NlcHRSZXN1bHQoKnJlc3VsdHMpKQ0KKwkJaWYgKHBz ZXQuY29weVN0cmVhbSkNCiAJCXsNCi0JCQkvKg0KLQkJCSAqIEZhaWx1cmUg YXQgdGhpcyBwb2ludCBpcyBhbHdheXMgYSBzZXJ2ZXItc2lkZSBmYWlsdXJl IG9yIGENCi0JCQkgKiBmYWlsdXJlIHRvIHN1Ym1pdCB0aGUgY29tbWFuZCBz dHJpbmcuICBFaXRoZXIgd2F5LCB3ZSdyZQ0KLQkJCSAqIGZpbmlzaGVkIHdp dGggdGhpcyBjb21tYW5kIHN0cmluZy4NCi0JCQkgKi8NCi0JCQlzdWNjZXNz ID0gZmFsc2U7DQotCQkJYnJlYWs7DQorCQkJLyogaW52b2tlZCBieSBcY29w eSAqLw0KKwkJCWNvcHlzdHJlYW0gPSBwc2V0LmNvcHlTdHJlYW07DQogCQl9 DQotDQotCQlyZXN1bHRfc3RhdHVzID0gUFFyZXN1bHRTdGF0dXMoKnJlc3Vs dHMpOw0KLQkJc3dpdGNoIChyZXN1bHRfc3RhdHVzKQ0KKwkJZWxzZSBpZiAo cHNldC5nZm5hbWUpDQogCQl7DQotCQkJY2FzZSBQR1JFU19FTVBUWV9RVUVS WToNCi0JCQljYXNlIFBHUkVTX0NPTU1BTkRfT0s6DQotCQkJY2FzZSBQR1JF U19UVVBMRVNfT0s6DQotCQkJCWlzX2NvcHkgPSBmYWxzZTsNCi0JCQkJYnJl YWs7DQotDQotCQkJY2FzZSBQR1JFU19DT1BZX09VVDoNCi0JCQljYXNlIFBH UkVTX0NPUFlfSU46DQotCQkJCWlzX2NvcHkgPSB0cnVlOw0KLQkJCQlicmVh azsNCi0NCi0JCQlkZWZhdWx0Og0KLQkJCQkvKiBBY2NlcHRSZXN1bHQoKSBz aG91bGQgaGF2ZSBjYXVnaHQgYW55dGhpbmcgZWxzZS4gKi8NCi0JCQkJaXNf Y29weSA9IGZhbHNlOw0KLQkJCQlwZ19sb2dfZXJyb3IoInVuZXhwZWN0ZWQg UFFyZXN1bHRTdGF0dXM6ICVkIiwgcmVzdWx0X3N0YXR1cyk7DQotCQkJCWJy ZWFrOw0KLQkJfQ0KLQ0KLQkJaWYgKGlzX2NvcHkpDQotCQl7DQotCQkJLyoN Ci0JCQkgKiBNYXJzaGFsIHRoZSBDT1BZIGRhdGEuICBFaXRoZXIgc3Vicm91 dGluZSB3aWxsIGdldCB0aGUNCi0JCQkgKiBjb25uZWN0aW9uIG91dCBvZiBp dHMgQ09QWSBzdGF0ZSwgdGhlbiBjYWxsIFBRcmVzdWx0U3RhdHVzKCkNCi0J CQkgKiBvbmNlIGFuZCByZXBvcnQgYW55IGVycm9yLg0KLQkJCSAqDQotCQkJ ICogRm9yIENPUFkgT1VULCBkaXJlY3QgdGhlIG91dHB1dCB0byBwc2V0LmNv cHlTdHJlYW0gaWYgaXQncyBzZXQsDQotCQkJICogb3RoZXJ3aXNlIHRvIHBz ZXQuZ2ZuYW1lIGlmIGl0J3Mgc2V0LCBvdGhlcndpc2UgdG8gcXVlcnlGb3V0 Lg0KLQkJCSAqIEZvciBDT1BZIElOLCB1c2UgcHNldC5jb3B5U3RyZWFtIGFz IGRhdGEgc291cmNlIGlmIGl0J3Mgc2V0LA0KLQkJCSAqIG90aGVyd2lzZSBj dXJfY21kX3NvdXJjZS4NCi0JCQkgKi8NCi0JCQlGSUxFCSAgICpjb3B5c3Ry ZWFtOw0KLQkJCVBHcmVzdWx0ICAgKmNvcHlfcmVzdWx0Ow0KLQ0KLQkJCVNl dENhbmNlbENvbm4oKTsNCi0JCQlpZiAocmVzdWx0X3N0YXR1cyA9PSBQR1JF U19DT1BZX09VVCkNCisJCQkvKiBpbnZva2VkIGJ5IFxnICovDQorCQkJaWYg KG9wZW5RdWVyeU91dHB1dEZpbGUocHNldC5nZm5hbWUsDQorCQkJCQkJCQkJ JmNvcHlzdHJlYW0sICZpc19waXBlKSkNCiAJCQl7DQotCQkJCWJvb2wJCW5l ZWRfY2xvc2UgPSBmYWxzZTsNCi0JCQkJYm9vbAkJaXNfcGlwZSA9IGZhbHNl Ow0KLQ0KLQkJCQlpZiAocHNldC5jb3B5U3RyZWFtKQ0KLQkJCQl7DQotCQkJ CQkvKiBpbnZva2VkIGJ5IFxjb3B5ICovDQotCQkJCQljb3B5c3RyZWFtID0g cHNldC5jb3B5U3RyZWFtOw0KLQkJCQl9DQotCQkJCWVsc2UgaWYgKHBzZXQu Z2ZuYW1lKQ0KLQkJCQl7DQotCQkJCQkvKiBpbnZva2VkIGJ5IFxnICovDQot CQkJCQlpZiAob3BlblF1ZXJ5T3V0cHV0RmlsZShwc2V0LmdmbmFtZSwNCi0J CQkJCQkJCQkJCSZjb3B5c3RyZWFtLCAmaXNfcGlwZSkpDQotCQkJCQl7DQot CQkJCQkJbmVlZF9jbG9zZSA9IHRydWU7DQotCQkJCQkJaWYgKGlzX3BpcGUp DQotCQkJCQkJCWRpc2FibGVfc2lncGlwZV90cmFwKCk7DQotCQkJCQl9DQot CQkJCQllbHNlDQotCQkJCQkJY29weXN0cmVhbSA9IE5VTEw7CS8qIGRpc2Nh cmQgQ09QWSBkYXRhIGVudGlyZWx5ICovDQotCQkJCX0NCi0JCQkJZWxzZQ0K LQkJCQl7DQotCQkJCQkvKiBmYWxsIGJhY2sgdG8gdGhlIGdlbmVyaWMgcXVl cnkgb3V0cHV0IHN0cmVhbSAqLw0KLQkJCQkJY29weXN0cmVhbSA9IHBzZXQu cXVlcnlGb3V0Ow0KLQkJCQl9DQotDQotCQkJCXN1Y2Nlc3MgPSBoYW5kbGVD b3B5T3V0KHBzZXQuZGIsDQotCQkJCQkJCQkJCWNvcHlzdHJlYW0sDQotCQkJ CQkJCQkJCSZjb3B5X3Jlc3VsdCkNCi0JCQkJCSYmIHN1Y2Nlc3MNCi0JCQkJ CSYmIChjb3B5c3RyZWFtICE9IE5VTEwpOw0KLQ0KLQkJCQkvKg0KLQkJCQkg KiBTdXBwcmVzcyBzdGF0dXMgcHJpbnRpbmcgaWYgdGhlIHJlcG9ydCB3b3Vs ZCBnbyB0byB0aGUgc2FtZQ0KLQkJCQkgKiBwbGFjZSBhcyB0aGUgQ09QWSBk YXRhIGp1c3Qgd2VudC4gIE5vdGUgdGhpcyBkb2Vzbid0DQotCQkJCSAqIHBy ZXZlbnQgZXJyb3IgcmVwb3J0aW5nLCBzaW5jZSBoYW5kbGVDb3B5T3V0IGRp ZCB0aGF0Lg0KLQkJCQkgKi8NCi0JCQkJaWYgKGNvcHlzdHJlYW0gPT0gcHNl dC5xdWVyeUZvdXQpDQotCQkJCXsNCi0JCQkJCVBRY2xlYXIoY29weV9yZXN1 bHQpOw0KLQkJCQkJY29weV9yZXN1bHQgPSBOVUxMOw0KLQkJCQl9DQotDQot CQkJCWlmIChuZWVkX2Nsb3NlKQ0KLQkJCQl7DQotCQkJCQkvKiBjbG9zZSBc ZyBhcmd1bWVudCBmaWxlL3BpcGUgKi8NCi0JCQkJCWlmIChpc19waXBlKQ0K LQkJCQkJew0KLQkJCQkJCXBjbG9zZShjb3B5c3RyZWFtKTsNCi0JCQkJCQly ZXN0b3JlX3NpZ3BpcGVfdHJhcCgpOw0KLQkJCQkJfQ0KLQkJCQkJZWxzZQ0K LQkJCQkJew0KLQkJCQkJCWZjbG9zZShjb3B5c3RyZWFtKTsNCi0JCQkJCX0N Ci0JCQkJfQ0KKwkJCQluZWVkX2Nsb3NlID0gdHJ1ZTsNCisJCQkJaWYgKGlz X3BpcGUpDQorCQkJCQlkaXNhYmxlX3NpZ3BpcGVfdHJhcCgpOw0KIAkJCX0N CiAJCQllbHNlDQotCQkJew0KLQkJCQkvKiBDT1BZIElOICovDQotCQkJCWNv cHlzdHJlYW0gPSBwc2V0LmNvcHlTdHJlYW0gPyBwc2V0LmNvcHlTdHJlYW0g OiBwc2V0LmN1cl9jbWRfc291cmNlOw0KLQkJCQlzdWNjZXNzID0gaGFuZGxl Q29weUluKHBzZXQuZGIsDQotCQkJCQkJCQkJICAgY29weXN0cmVhbSwNCi0J CQkJCQkJCQkgICBQUWJpbmFyeVR1cGxlcygqcmVzdWx0cyksDQotCQkJCQkJ CQkJICAgJmNvcHlfcmVzdWx0KSAmJiBzdWNjZXNzOw0KLQkJCX0NCi0JCQlS ZXNldENhbmNlbENvbm4oKTsNCi0NCi0JCQkvKg0KLQkJCSAqIFJlcGxhY2Ug dGhlIFBHUkVTX0NPUFlfT1VUL0lOIHJlc3VsdCB3aXRoIENPUFkgY29tbWFu ZCdzIGV4aXQNCi0JCQkgKiBzdGF0dXMsIG9yIHdpdGggTlVMTCBpZiB3ZSB3 YW50IHRvIHN1cHByZXNzIHByaW50aW5nIGFueXRoaW5nLg0KLQkJCSAqLw0K LQkJCVBRY2xlYXIoKnJlc3VsdHMpOw0KLQkJCSpyZXN1bHRzID0gY29weV9y ZXN1bHQ7DQorCQkJCWNvcHlzdHJlYW0gPSBOVUxMOwkvKiBkaXNjYXJkIENP UFkgZGF0YSBlbnRpcmVseSAqLw0KIAkJfQ0KLQkJZWxzZSBpZiAoZmlyc3Rf Y3ljbGUpDQorCQllbHNlDQogCQl7DQotCQkJLyogZmFzdCBwYXRoOiBubyBD T1BZIGNvbW1hbmRzOyBQUWV4ZWMgdmlzaXRlZCBhbGwgcmVzdWx0cyAqLw0K LQkJCWJyZWFrOw0KKwkJCS8qIGZhbGwgYmFjayB0byB0aGUgZ2VuZXJpYyBx dWVyeSBvdXRwdXQgc3RyZWFtICovDQorCQkJY29weXN0cmVhbSA9IHBzZXQu cXVlcnlGb3V0Ow0KIAkJfQ0KIA0KKwkJc3VjY2VzcyA9IGhhbmRsZUNvcHlP dXQocHNldC5kYiwNCisJCQkJCQkJCWNvcHlzdHJlYW0sDQorCQkJCQkJCQkm Y29weV9yZXN1bHQpDQorCQkJJiYgc3VjY2Vzcw0KKwkJCSYmIChjb3B5c3Ry ZWFtICE9IE5VTEwpOw0KKw0KIAkJLyoNCi0JCSAqIENoZWNrIFBRZ2V0UmVz dWx0KCkgYWdhaW4uICBJbiB0aGUgdHlwaWNhbCBjYXNlIG9mIGEgc2luZ2xl LWNvbW1hbmQNCi0JCSAqIHN0cmluZywgaXQgd2lsbCByZXR1cm4gTlVMTC4g IE90aGVyd2lzZSwgd2UnbGwgaGF2ZSBvdGhlciByZXN1bHRzDQotCQkgKiB0 byBwcm9jZXNzIHRoYXQgbWF5IGluY2x1ZGUgb3RoZXIgQ09QWXMuICBXZSBr ZWVwIHRoZSBsYXN0IHJlc3VsdC4NCisJCSAqIFN1cHByZXNzIHN0YXR1cyBw cmludGluZyBpZiB0aGUgcmVwb3J0IHdvdWxkIGdvIHRvIHRoZSBzYW1lDQor CQkgKiBwbGFjZSBhcyB0aGUgQ09QWSBkYXRhIGp1c3Qgd2VudC4gIE5vdGUg dGhpcyBkb2Vzbid0DQorCQkgKiBwcmV2ZW50IGVycm9yIHJlcG9ydGluZywg c2luY2UgaGFuZGxlQ29weU91dCBkaWQgdGhhdC4NCiAJCSAqLw0KLQkJbmV4 dF9yZXN1bHQgPSBQUWdldFJlc3VsdChwc2V0LmRiKTsNCi0JCWlmICghbmV4 dF9yZXN1bHQpDQotCQkJYnJlYWs7DQorCQlpZiAoY29weXN0cmVhbSA9PSBw c2V0LnF1ZXJ5Rm91dCkNCisJCXsNCisJCQlQUWNsZWFyKGNvcHlfcmVzdWx0 KTsNCisJCQljb3B5X3Jlc3VsdCA9IE5VTEw7DQorCQl9DQogDQotCQlQUWNs ZWFyKCpyZXN1bHRzKTsNCi0JCSpyZXN1bHRzID0gbmV4dF9yZXN1bHQ7DQot CQlmaXJzdF9jeWNsZSA9IGZhbHNlOw0KKwkJaWYgKG5lZWRfY2xvc2UpDQor CQl7DQorCQkJLyogY2xvc2UgXGcgYXJndW1lbnQgZmlsZS9waXBlICovDQor CQkJaWYgKGlzX3BpcGUpDQorCQkJew0KKwkJCQlwY2xvc2UoY29weXN0cmVh bSk7DQorCQkJCXJlc3RvcmVfc2lncGlwZV90cmFwKCk7DQorCQkJfQ0KKwkJ CWVsc2UNCisJCQl7DQorCQkJCWZjbG9zZShjb3B5c3RyZWFtKTsNCisJCQl9 DQorCQl9DQogCX0NCisJZWxzZQ0KKwl7DQorCQkvKiBDT1BZIElOICovDQor CQljb3B5c3RyZWFtID0gcHNldC5jb3B5U3RyZWFtID8gcHNldC5jb3B5U3Ry ZWFtIDogcHNldC5jdXJfY21kX3NvdXJjZTsNCisJCXN1Y2Nlc3MgPSBoYW5k bGVDb3B5SW4ocHNldC5kYiwNCisJCQkJCQkJICAgY29weXN0cmVhbSwNCisJ CQkJCQkJICAgUFFiaW5hcnlUdXBsZXMoKnJlc3VsdCksDQorCQkJCQkJCSAg ICZjb3B5X3Jlc3VsdCkgJiYgc3VjY2VzczsNCisJfQ0KKwlSZXNldENhbmNl bENvbm4oKTsNCiANCi0JU2V0UmVzdWx0VmFyaWFibGVzKCpyZXN1bHRzLCBz dWNjZXNzKTsNCi0NCi0JLyogbWF5IG5lZWQgdGhpcyB0byByZWNvdmVyIGZy b20gY29ubiBsb3NzIGR1cmluZyBDT1BZICovDQotCWlmICghZmlyc3RfY3lj bGUgJiYgIUNoZWNrQ29ubmVjdGlvbigpKQ0KLQkJcmV0dXJuIGZhbHNlOw0K KwlQUWNsZWFyKCpyZXN1bHQpOw0KKwkqcmVzdWx0ID0gY29weV9yZXN1bHQ7 DQogDQogCXJldHVybiBzdWNjZXNzOw0KIH0NCiANCi0NCiAvKg0KICAqIFBy aW50UXVlcnlTdGF0dXM6IHJlcG9ydCBjb21tYW5kIHN0YXR1cyBhcyByZXF1 aXJlZA0KICAqDQotICogTm90ZTogVXRpbGl0eSBmdW5jdGlvbiBmb3IgdXNl IGJ5IFByaW50UXVlcnlSZXN1bHRzKCkgb25seS4NCisgKiBOb3RlOiBVdGls aXR5IGZ1bmN0aW9uIGZvciB1c2UgYnkgSGFuZGxlUXVlcnlSZXN1bHQoKSBv bmx5Lg0KICAqLw0KIHN0YXRpYyB2b2lkDQogUHJpbnRRdWVyeVN0YXR1cyhQ R3Jlc3VsdCAqcmVzdWx0cykNCkBAIC0xMjE5LDQzICsxMTM2LDQ0IEBAIFBy aW50UXVlcnlTdGF0dXMoUEdyZXN1bHQgKnJlc3VsdHMpDQogDQogDQogLyoN Ci0gKiBQcmludFF1ZXJ5UmVzdWx0czogcHJpbnQgb3V0IChvciBzdG9yZSBv ciBleGVjdXRlKSBxdWVyeSByZXN1bHRzIGFzIHJlcXVpcmVkDQotICoNCi0g KiBOb3RlOiBVdGlsaXR5IGZ1bmN0aW9uIGZvciB1c2UgYnkgU2VuZFF1ZXJ5 KCkgb25seS4NCisgKiBIYW5kbGVRdWVyeVJlc3VsdDogcHJpbnQgb3V0LCBz dG9yZSBvciBleGVjdXRlIG9uZSBxdWVyeSByZXN1bHQNCisgKiBhcyByZXF1 aXJlZC4NCiAgKg0KICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcXVlcnkgZXhl Y3V0ZWQgc3VjY2Vzc2Z1bGx5LCBmYWxzZSBvdGhlcndpc2UuDQogICovDQog c3RhdGljIGJvb2wNCi1QcmludFF1ZXJ5UmVzdWx0cyhQR3Jlc3VsdCAqcmVz dWx0cykNCitIYW5kbGVRdWVyeVJlc3VsdChQR3Jlc3VsdCAqcmVzdWx0LCBi b29sIGxhc3QpDQogew0KIAlib29sCQlzdWNjZXNzOw0KIAljb25zdCBjaGFy ICpjbWRzdGF0dXM7DQogDQotCWlmICghcmVzdWx0cykNCisJaWYgKHJlc3Vs dCA9PSBOVUxMKQ0KIAkJcmV0dXJuIGZhbHNlOw0KIA0KLQlzd2l0Y2ggKFBR cmVzdWx0U3RhdHVzKHJlc3VsdHMpKQ0KKwlzd2l0Y2ggKFBRcmVzdWx0U3Rh dHVzKHJlc3VsdCkpDQogCXsNCiAJCWNhc2UgUEdSRVNfVFVQTEVTX09LOg0K IAkJCS8qIHN0b3JlIG9yIGV4ZWN1dGUgb3IgcHJpbnQgdGhlIGRhdGEgLi4u ICovDQotCQkJaWYgKHBzZXQuZ3NldF9wcmVmaXgpDQotCQkJCXN1Y2Nlc3Mg PSBTdG9yZVF1ZXJ5VHVwbGUocmVzdWx0cyk7DQotCQkJZWxzZSBpZiAocHNl dC5nZXhlY19mbGFnKQ0KLQkJCQlzdWNjZXNzID0gRXhlY1F1ZXJ5VHVwbGVz KHJlc3VsdHMpOw0KLQkJCWVsc2UgaWYgKHBzZXQuY3Jvc3N0YWJfZmxhZykN Ci0JCQkJc3VjY2VzcyA9IFByaW50UmVzdWx0c0luQ3Jvc3N0YWIocmVzdWx0 cyk7DQorCQkJaWYgKGxhc3QgJiYgcHNldC5nc2V0X3ByZWZpeCkNCisJCQkJ c3VjY2VzcyA9IFN0b3JlUXVlcnlUdXBsZShyZXN1bHQpOw0KKwkJCWVsc2Ug aWYgKGxhc3QgJiYgcHNldC5nZXhlY19mbGFnKQ0KKwkJCQlzdWNjZXNzID0g RXhlY1F1ZXJ5VHVwbGVzKHJlc3VsdCk7DQorCQkJZWxzZSBpZiAobGFzdCAm JiBwc2V0LmNyb3NzdGFiX2ZsYWcpDQorCQkJCXN1Y2Nlc3MgPSBQcmludFJl c3VsdHNJbkNyb3NzdGFiKHJlc3VsdCk7DQogCQkJZWxzZQ0KLQkJCQlzdWNj ZXNzID0gUHJpbnRRdWVyeVR1cGxlcyhyZXN1bHRzKTsNCisJCQkJc3VjY2Vz cyA9IFByaW50UXVlcnlUdXBsZXMocmVzdWx0KTsNCisNCiAJCQkvKiBpZiBp dCdzIElOU0VSVC9VUERBVEUvREVMRVRFIFJFVFVSTklORywgYWxzbyBwcmlu dCBzdGF0dXMgKi8NCi0JCQljbWRzdGF0dXMgPSBQUWNtZFN0YXR1cyhyZXN1 bHRzKTsNCisJCQljbWRzdGF0dXMgPSBQUWNtZFN0YXR1cyhyZXN1bHQpOw0K IAkJCWlmIChzdHJuY21wKGNtZHN0YXR1cywgIklOU0VSVCIsIDYpID09IDAg fHwNCiAJCQkJc3RybmNtcChjbWRzdGF0dXMsICJVUERBVEUiLCA2KSA9PSAw IHx8DQogCQkJCXN0cm5jbXAoY21kc3RhdHVzLCAiREVMRVRFIiwgNikgPT0g MCkNCi0JCQkJUHJpbnRRdWVyeVN0YXR1cyhyZXN1bHRzKTsNCisJCQkJUHJp bnRRdWVyeVN0YXR1cyhyZXN1bHQpOw0KKw0KIAkJCWJyZWFrOw0KIA0KIAkJ Y2FzZSBQR1JFU19DT01NQU5EX09LOg0KLQkJCVByaW50UXVlcnlTdGF0dXMo cmVzdWx0cyk7DQorCQkJUHJpbnRRdWVyeVN0YXR1cyhyZXN1bHQpOw0KIAkJ CXN1Y2Nlc3MgPSB0cnVlOw0KIAkJCWJyZWFrOw0KIA0KQEAgLTEyNjUsNyAr MTE4Myw3IEBAIFByaW50UXVlcnlSZXN1bHRzKFBHcmVzdWx0ICpyZXN1bHRz KQ0KIA0KIAkJY2FzZSBQR1JFU19DT1BZX09VVDoNCiAJCWNhc2UgUEdSRVNf Q09QWV9JTjoNCi0JCQkvKiBub3RoaW5nIHRvIGRvIGhlcmUgKi8NCisJCQkv KiBub3RoaW5nIHRvIGRvIGhlcmU6IGFscmVhZHkgcHJvY2Vzc2VkICovDQog CQkJc3VjY2VzcyA9IHRydWU7DQogCQkJYnJlYWs7DQogDQpAQCAtMTI3OCw3 ICsxMTk2LDcgQEAgUHJpbnRRdWVyeVJlc3VsdHMoUEdyZXN1bHQgKnJlc3Vs dHMpDQogCQlkZWZhdWx0Og0KIAkJCXN1Y2Nlc3MgPSBmYWxzZTsNCiAJCQlw Z19sb2dfZXJyb3IoInVuZXhwZWN0ZWQgUFFyZXN1bHRTdGF0dXM6ICVkIiwN Ci0JCQkJCQkgUFFyZXN1bHRTdGF0dXMocmVzdWx0cykpOw0KKwkJCQkJCSBQ UXJlc3VsdFN0YXR1cyhyZXN1bHQpKTsNCiAJCQlicmVhazsNCiAJfQ0KIA0K QEAgLTEyODcsNiArMTIwNSwxNTMgQEAgUHJpbnRRdWVyeVJlc3VsdHMoUEdy ZXN1bHQgKnJlc3VsdHMpDQogCXJldHVybiBzdWNjZXNzOw0KIH0NCiANCisv Kg0KKyAqIERhdGEgc3RydWN0dXJlIGFuZCBmdW5jdGlvbnMgdG8gcmVjb3Jk IG5vdGljZXMgd2hpbGUgdGhleSBhcmUNCisgKiBlbWl0dGVkLCBzbyB0aGF0 IHRoZXkgY2FuIGJlIHNob3duIGxhdGVyLg0KKyAqDQorICogV2UgbmVlZCB0 byBrbm93IHdoaWNoIHJlc3VsdCBpcyBsYXN0LCB3aGljaCByZXF1aXJlcyB0 byBleHRyYWN0DQorICogb25lIHJlc3VsdCBpbiBhZHZhbmNlLCBoZW5jZSB0 d28gYnVmZmVycyBhcmUgbmVlZGVkLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0 IHsNCisJYm9vbAkJCWluX2ZsaXA7DQorCVBRRXhwQnVmZmVyRGF0YQlmbGlw Ow0KKwlQUUV4cEJ1ZmZlckRhdGEJZmxvcDsNCit9IHRfbm90aWNlX21lc3Nh Z2VzOw0KKw0KK3N0YXRpYyB2b2lkDQorQXBwZW5kTm90aWNlTWVzc2FnZSh2 b2lkICphcmcsIGNvbnN0IGNoYXIgKm1zZykNCit7DQorCXRfbm90aWNlX21l c3NhZ2VzICpub3RlcyA9ICh0X25vdGljZV9tZXNzYWdlcyopIGFyZzsNCisJ YXBwZW5kUFFFeHBCdWZmZXJTdHIobm90ZXMtPmluX2ZsaXAgPyAmbm90ZXMt PmZsaXAgOiAmbm90ZXMtPmZsb3AsIG1zZyk7DQorfQ0KKw0KK3N0YXRpYyB2 b2lkDQorU2hvd05vdGljZU1lc3NhZ2UodF9ub3RpY2VfbWVzc2FnZXMgKm5v dGVzKQ0KK3sNCisJUFFFeHBCdWZmZXJEYXRhCSpjdXJyZW50ID0gbm90ZXMt PmluX2ZsaXAgPyAmbm90ZXMtPmZsaXAgOiAmbm90ZXMtPmZsb3A7DQorCWlm IChjdXJyZW50LT5kYXRhICE9IE5VTEwgJiYgKmN1cnJlbnQtPmRhdGEgIT0g J1wwJykNCisJCXBnX2xvZ19pbmZvKCIlcyIsIGN1cnJlbnQtPmRhdGEpOw0K KwlyZXNldFBRRXhwQnVmZmVyKGN1cnJlbnQpOw0KK30NCisNCisvKg0KKyAq IFNlbmRRdWVyeUFuZFByb2Nlc3NSZXN1bHRzOiB1dGlsaXR5IGZ1bmN0aW9u IGZvciB1c2UgYnkgU2VuZFF1ZXJ5KCkgb25seQ0KKyAqDQorICogU2VuZHMg cXVlcnkgYW5kIGN5Y2xlcyB0aHJvdWdoIFBHcmVzdWx0IG9iamVjdHMuDQor ICoNCisgKiBXaGVuIG91ciBjb21tYW5kIHN0cmluZyBjb250YWluZWQgYSBD T1BZIEZST00gU1RESU4gb3IgQ09QWSBUTyBTVERPVVQsDQorICogdGhlIFBH cmVzdWx0IGFzc29jaWF0ZWQgd2l0aCB0aGVzZSBjb21tYW5kcyBtdXN0IGJl IHByb2Nlc3NlZC4gIEluIHRoYXQNCisgKiBldmVudCwgd2UnbGwgbWFyc2hh bCBkYXRhIGZvciB0aGUgQ09QWS4NCisgKg0KKyAqIFJldHVybnMgdHJ1ZSBv biBjb21wbGV0ZSBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuICBQb3NzaWJs ZSBmYWlsdXJlIG1vZGVzDQorICogaW5jbHVkZSBwdXJlbHkgY2xpZW50LXNp ZGUgcHJvYmxlbXM7IGNoZWNrIHRoZSB0cmFuc2FjdGlvbiBzdGF0dXMgZm9y IHRoZQ0KKyAqIHNlcnZlci1zaWRlIG9waW5pb24uDQorICoNCisgKiBOb3Rl IHRoYXQgb24gYSBjb21iaW5lZCBxdWVyeSwgZmFpbHVyZSBkb2VzIG5vdCBt ZWFuIHRoYXQgbm90aGluZyB3YXMNCisgKiBjb21taXR0ZWQuDQorICovDQor c3RhdGljIGJvb2wNCitTZW5kUXVlcnlBbmRQcm9jZXNzUmVzdWx0cyhjb25z dCBjaGFyICpxdWVyeSwgZG91YmxlICpwZWxhcHNlZF9tc2VjKQ0KK3sNCisJ Ym9vbAkJCQlzdWNjZXNzOw0KKwlpbnN0cl90aW1lCQkJYmVmb3JlOw0KKwlQ R3Jlc3VsdAkJICAgKnJlc3VsdDsNCisJdF9ub3RpY2VfbWVzc2FnZXMJbm90 ZXM7DQorDQorCWlmIChwc2V0LnRpbWluZykNCisJCUlOU1RSX1RJTUVfU0VU X0NVUlJFTlQoYmVmb3JlKTsNCisNCisJc3VjY2VzcyA9IFBRc2VuZFF1ZXJ5 KHBzZXQuZGIsIHF1ZXJ5KTsNCisJUmVzZXRDYW5jZWxDb25uKCk7DQorDQor CWlmICghc3VjY2VzcykNCisJCXJldHVybiBmYWxzZTsNCisNCisJLyogaW50 ZXJjZXB0IG5vdGljZXMgKi8NCisJbm90ZXMuaW5fZmxpcCA9IHRydWU7DQor CWluaXRQUUV4cEJ1ZmZlcigmbm90ZXMuZmxpcCk7DQorCWluaXRQUUV4cEJ1 ZmZlcigmbm90ZXMuZmxvcCk7DQorCVBRc2V0Tm90aWNlUHJvY2Vzc29yKHBz ZXQuZGIsIEFwcGVuZE5vdGljZU1lc3NhZ2UsICZub3Rlcyk7DQorDQorCS8q IGZpcnN0IHJlc3VsdCAqLw0KKwlyZXN1bHQgPSBQUWdldFJlc3VsdChwc2V0 LmRiKTsNCisNCisJd2hpbGUgKHJlc3VsdCAhPSBOVUxMKQ0KKwl7DQorCQlF eGVjU3RhdHVzVHlwZSByZXN1bHRfc3RhdHVzOw0KKwkJUEdyZXN1bHQgICAq bmV4dF9yZXN1bHQ7DQorCQlib29sCQlsYXN0Ow0KKw0KKwkJaWYgKCFBY2Nl cHRSZXN1bHQocmVzdWx0LCBmYWxzZSkpDQorCQl7DQorCQkJLyogc29tZSBl cnJvciBvY2N1cmVkLCByZWNvcmQgdGhhdCAqLw0KKwkJCVNob3dOb3RpY2VN ZXNzYWdlKCZub3Rlcyk7DQorCQkJU2hvd0Vycm9yTWVzc2FnZShyZXN1bHQp Ow0KKwkJCVNldFJlc3VsdFZhcmlhYmxlcyhyZXN1bHQsIGZhbHNlKTsNCisJ CQlDbGVhck9yU2F2ZVJlc3VsdChyZXN1bHQpOw0KKwkJCXN1Y2Nlc3MgPSBm YWxzZTsNCisNCisJCQkvKiBhbmQgc3dpdGNoIHRvIG5leHQgcmVzdWx0ICov DQorCQkJcmVzdWx0ID0gUFFnZXRSZXN1bHQocHNldC5kYik7DQorCQkJY29u dGludWU7DQorCQl9DQorDQorCQkvKiBtdXN0IGhhbmRsZSBDT1BZIGJlZm9y ZSBjaGFuZ2luZyB0aGUgY3VycmVudCByZXN1bHQgKi8NCisJCXJlc3VsdF9z dGF0dXMgPSBQUXJlc3VsdFN0YXR1cyhyZXN1bHQpOw0KKwkJaWYgKHJlc3Vs dF9zdGF0dXMgPT0gUEdSRVNfQ09QWV9JTiB8fA0KKwkJCXJlc3VsdF9zdGF0 dXMgPT0gUEdSRVNfQ09QWV9PVVQpDQorCQl7DQorCQkJU2hvd05vdGljZU1l c3NhZ2UoJm5vdGVzKTsNCisJCQlIYW5kbGVDb3B5UmVzdWx0KCZyZXN1bHQp Ow0KKwkJfQ0KKw0KKwkJLyoNCisJCSAqIENoZWNrIFBRZ2V0UmVzdWx0KCkg YWdhaW4uICBJbiB0aGUgdHlwaWNhbCBjYXNlIG9mIGEgc2luZ2xlLWNvbW1h bmQNCisJCSAqIHN0cmluZywgaXQgd2lsbCByZXR1cm4gTlVMTC4gIE90aGVy d2lzZSwgd2UnbGwgaGF2ZSBvdGhlciByZXN1bHRzDQorCQkgKiB0byBwcm9j ZXNzIHRoYXQgbWF5IGluY2x1ZGUgb3RoZXIgQ09QWXMuDQorCQkgKi8NCisJ CW5vdGVzLmluX2ZsaXAgPSAhbm90ZXMuaW5fZmxpcDsNCisJCW5leHRfcmVz dWx0ID0gUFFnZXRSZXN1bHQocHNldC5kYik7DQorCQlub3Rlcy5pbl9mbGlw ID0gIW5vdGVzLmluX2ZsaXA7DQorCQlsYXN0ID0gKG5leHRfcmVzdWx0ID09 IE5VTEwpOw0KKw0KKwkJLyogdGltaW5nIG1lYXN1cmUgYmVmb3JlIHByaW50 aW5nIHRoZSBsYXN0IHJlc3VsdCAqLw0KKwkJaWYgKGxhc3QgJiYgcHNldC50 aW1pbmcpDQorCQl7DQorCQkJaW5zdHJfdGltZQlub3c7DQorCQkJSU5TVFJf VElNRV9TRVRfQ1VSUkVOVChub3cpOw0KKwkJCUlOU1RSX1RJTUVfU1VCVFJB Q1Qobm93LCBiZWZvcmUpOw0KKwkJCSpwZWxhcHNlZF9tc2VjID0gSU5TVFJf VElNRV9HRVRfTUlMTElTRUMobm93KTsNCisJCX0NCisNCisJCS8qIG5vdGlj ZXMgYWxyZWFkeSBzaG93IGFib3ZlIGZvciBjb3B5ICovDQorCQlTaG93Tm90 aWNlTWVzc2FnZSgmbm90ZXMpOw0KKw0KKwkJLyogdGhpcyBtYXkgb3IgbWF5 IG5vdCBwcmludCBzb21ldGhpbmcgZGVwZW5kaW5nIG9uIHNldHRpbmdzICov DQorCQlpZiAocmVzdWx0ICE9IE5VTEwpDQorCQkJc3VjY2VzcyAmPSBIYW5k bGVRdWVyeVJlc3VsdChyZXN1bHQsIGxhc3QpOw0KKw0KKwkJLyogc2V0IHZh cmlhYmxlcyBvbiBsYXN0IHJlc3VsdCBpZiBhbGwgd2VudCB3ZWxsICovDQor CQlpZiAobGFzdCAmJiBzdWNjZXNzKQ0KKwkJCVNldFJlc3VsdFZhcmlhYmxl cyhyZXN1bHQsIHRydWUpOw0KKw0KKwkJQ2xlYXJPclNhdmVSZXN1bHQocmVz dWx0KTsNCisJCW5vdGVzLmluX2ZsaXAgPSAhbm90ZXMuaW5fZmxpcDsNCisJ CXJlc3VsdCA9IG5leHRfcmVzdWx0Ow0KKwl9DQorDQorCS8qIHJlc2V0IG5v dGljZSBob29rICovDQorCVBRc2V0Tm90aWNlUHJvY2Vzc29yKHBzZXQuZGIs IE5vdGljZVByb2Nlc3NvciwgTlVMTCk7DQorCXRlcm1QUUV4cEJ1ZmZlcigm bm90ZXMuZmxpcCk7DQorCXRlcm1QUUV4cEJ1ZmZlcigmbm90ZXMuZmxvcCk7 DQorDQorCS8qIG1heSBuZWVkIHRoaXMgdG8gcmVjb3ZlciBmcm9tIGNvbm4g bG9zcyBkdXJpbmcgQ09QWSAqLw0KKwlpZiAoIUNoZWNrQ29ubmVjdGlvbigp KQ0KKwkJcmV0dXJuIGZhbHNlOw0KKw0KKwlyZXR1cm4gc3VjY2VzczsNCit9 DQorDQogDQogLyoNCiAgKiBTZW5kUXVlcnk6IHNlbmQgdGhlIHF1ZXJ5IHN0 cmluZyB0byB0aGUgYmFja2VuZA0KQEAgLTEzMDMsNyArMTM2OCw3IEBAIFBy aW50UXVlcnlSZXN1bHRzKFBHcmVzdWx0ICpyZXN1bHRzKQ0KIGJvb2wNCiBT ZW5kUXVlcnkoY29uc3QgY2hhciAqcXVlcnkpDQogew0KLQlQR3Jlc3VsdCAg ICpyZXN1bHRzOw0KKwlQR3Jlc3VsdCAgICpyZXN1bHRzID0gTlVMTDsNCiAJ UEdUcmFuc2FjdGlvblN0YXR1c1R5cGUgdHJhbnNhY3Rpb25fc3RhdHVzOw0K IAlkb3VibGUJCWVsYXBzZWRfbXNlYyA9IDA7DQogCWJvb2wJCU9LID0gZmFs c2U7DQpAQCAtMTQwOCwyOCArMTQ3Myw3IEBAIFNlbmRRdWVyeShjb25zdCBj aGFyICpxdWVyeSkNCiAJCQkgcHNldC5jcm9zc3RhYl9mbGFnIHx8ICFpc19z ZWxlY3RfY29tbWFuZChxdWVyeSkpDQogCXsNCiAJCS8qIERlZmF1bHQgZmV0 Y2gtaXQtYWxsLWFuZC1wcmludCBtb2RlICovDQotCQlpbnN0cl90aW1lCWJl Zm9yZSwNCi0JCQkJCWFmdGVyOw0KLQ0KLQkJaWYgKHBzZXQudGltaW5nKQ0K LQkJCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQoYmVmb3JlKTsNCi0NCi0JCXJl c3VsdHMgPSBQUWV4ZWMocHNldC5kYiwgcXVlcnkpOw0KLQ0KLQkJLyogdGhl c2Ugb3BlcmF0aW9ucyBhcmUgaW5jbHVkZWQgaW4gdGhlIHRpbWluZyByZXN1 bHQ6ICovDQotCQlSZXNldENhbmNlbENvbm4oKTsNCi0JCU9LID0gUHJvY2Vz c1Jlc3VsdCgmcmVzdWx0cyk7DQotDQotCQlpZiAocHNldC50aW1pbmcpDQot CQl7DQotCQkJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVChhZnRlcik7DQotCQkJ SU5TVFJfVElNRV9TVUJUUkFDVChhZnRlciwgYmVmb3JlKTsNCi0JCQllbGFw c2VkX21zZWMgPSBJTlNUUl9USU1FX0dFVF9NSUxMSVNFQyhhZnRlcik7DQot CQl9DQotDQotCQkvKiBidXQgcHJpbnRpbmcgcmVzdWx0cyBpc24ndDogKi8N Ci0JCWlmIChPSyAmJiByZXN1bHRzKQ0KLQkJCU9LID0gUHJpbnRRdWVyeVJl c3VsdHMocmVzdWx0cyk7DQorCQlPSyA9IFNlbmRRdWVyeUFuZFByb2Nlc3NS ZXN1bHRzKHF1ZXJ5LCAmZWxhcHNlZF9tc2VjKTsNCiAJfQ0KIAllbHNlDQog CXsNCkBAIC0xNjA2LDcgKzE2NTAsNyBAQCBEZXNjcmliZVF1ZXJ5KGNvbnN0 IGNoYXIgKnF1ZXJ5LCBkb3VibGUgKmVsYXBzZWRfbXNlYykNCiAJUFFjbGVh cihyZXN1bHRzKTsNCiANCiAJcmVzdWx0cyA9IFBRZGVzY3JpYmVQcmVwYXJl ZChwc2V0LmRiLCAiIik7DQotCU9LID0gQWNjZXB0UmVzdWx0KHJlc3VsdHMp ICYmDQorCU9LID0gQWNjZXB0UmVzdWx0KHJlc3VsdHMsIHRydWUpICYmDQog CQkoUFFyZXN1bHRTdGF0dXMocmVzdWx0cykgPT0gUEdSRVNfQ09NTUFORF9P Syk7DQogCWlmIChPSyAmJiByZXN1bHRzKQ0KIAl7DQpAQCAtMTY1NCw3ICsx Njk4LDcgQEAgRGVzY3JpYmVRdWVyeShjb25zdCBjaGFyICpxdWVyeSwgZG91 YmxlICplbGFwc2VkX21zZWMpDQogCQkJUFFjbGVhcihyZXN1bHRzKTsNCiAN CiAJCQlyZXN1bHRzID0gUFFleGVjKHBzZXQuZGIsIGJ1Zi5kYXRhKTsNCi0J CQlPSyA9IEFjY2VwdFJlc3VsdChyZXN1bHRzKTsNCisJCQlPSyA9IEFjY2Vw dFJlc3VsdChyZXN1bHRzLCB0cnVlKTsNCiANCiAJCQlpZiAocHNldC50aW1p bmcpDQogCQkJew0KQEAgLTE2NjQsNyArMTcwOCw3IEBAIERlc2NyaWJlUXVl cnkoY29uc3QgY2hhciAqcXVlcnksIGRvdWJsZSAqZWxhcHNlZF9tc2VjKQ0K IAkJCX0NCiANCiAJCQlpZiAoT0sgJiYgcmVzdWx0cykNCi0JCQkJT0sgPSBQ cmludFF1ZXJ5UmVzdWx0cyhyZXN1bHRzKTsNCisJCQkJT0sgPSBIYW5kbGVR dWVyeVJlc3VsdChyZXN1bHRzLCB0cnVlKTsNCiANCiAJCQl0ZXJtUFFFeHBC dWZmZXIoJmJ1Zik7DQogCQl9DQpAQCAtMTcyMyw3ICsxNzY3LDcgQEAgRXhl Y1F1ZXJ5VXNpbmdDdXJzb3IoY29uc3QgY2hhciAqcXVlcnksIGRvdWJsZSAq ZWxhcHNlZF9tc2VjKQ0KIAlpZiAoUFF0cmFuc2FjdGlvblN0YXR1cyhwc2V0 LmRiKSA9PSBQUVRSQU5TX0lETEUpDQogCXsNCiAJCXJlc3VsdHMgPSBQUWV4 ZWMocHNldC5kYiwgIkJFR0lOIik7DQotCQlPSyA9IEFjY2VwdFJlc3VsdChy ZXN1bHRzKSAmJg0KKwkJT0sgPSBBY2NlcHRSZXN1bHQocmVzdWx0cywgdHJ1 ZSkgJiYNCiAJCQkoUFFyZXN1bHRTdGF0dXMocmVzdWx0cykgPT0gUEdSRVNf Q09NTUFORF9PSyk7DQogCQlDbGVhck9yU2F2ZVJlc3VsdChyZXN1bHRzKTsN CiAJCWlmICghT0spDQpAQCAtMTczNyw3ICsxNzgxLDcgQEAgRXhlY1F1ZXJ5 VXNpbmdDdXJzb3IoY29uc3QgY2hhciAqcXVlcnksIGRvdWJsZSAqZWxhcHNl ZF9tc2VjKQ0KIAkJCQkJICBxdWVyeSk7DQogDQogCXJlc3VsdHMgPSBQUWV4 ZWMocHNldC5kYiwgYnVmLmRhdGEpOw0KLQlPSyA9IEFjY2VwdFJlc3VsdChy ZXN1bHRzKSAmJg0KKwlPSyA9IEFjY2VwdFJlc3VsdChyZXN1bHRzLCB0cnVl KSAmJg0KIAkJKFBRcmVzdWx0U3RhdHVzKHJlc3VsdHMpID09IFBHUkVTX0NP TU1BTkRfT0spOw0KIAlpZiAoIU9LKQ0KIAkJU2V0UmVzdWx0VmFyaWFibGVz KHJlc3VsdHMsIE9LKTsNCkBAIC0xODE0LDcgKzE4NTgsNyBAQCBFeGVjUXVl cnlVc2luZ0N1cnNvcihjb25zdCBjaGFyICpxdWVyeSwgZG91YmxlICplbGFw c2VkX21zZWMpDQogCQkJCWlzX3BhZ2VyID0gZmFsc2U7DQogCQkJfQ0KIA0K LQkJCU9LID0gQWNjZXB0UmVzdWx0KHJlc3VsdHMpOw0KKwkJCU9LID0gQWNj ZXB0UmVzdWx0KHJlc3VsdHMsIHRydWUpOw0KIAkJCUFzc2VydCghT0spOw0K IAkJCVNldFJlc3VsdFZhcmlhYmxlcyhyZXN1bHRzLCBPSyk7DQogCQkJQ2xl YXJPclNhdmVSZXN1bHQocmVzdWx0cyk7DQpAQCAtMTkyMyw3ICsxOTY3LDcg QEAgY2xlYW51cDoNCiAJcmVzdWx0cyA9IFBRZXhlYyhwc2V0LmRiLCAiQ0xP U0UgX3BzcWxfY3Vyc29yIik7DQogCWlmIChPSykNCiAJew0KLQkJT0sgPSBB Y2NlcHRSZXN1bHQocmVzdWx0cykgJiYNCisJCU9LID0gQWNjZXB0UmVzdWx0 KHJlc3VsdHMsIHRydWUpICYmDQogCQkJKFBRcmVzdWx0U3RhdHVzKHJlc3Vs dHMpID09IFBHUkVTX0NPTU1BTkRfT0spOw0KIAkJQ2xlYXJPclNhdmVSZXN1 bHQocmVzdWx0cyk7DQogCX0NCkBAIC0xOTMzLDcgKzE5NzcsNyBAQCBjbGVh bnVwOg0KIAlpZiAoc3RhcnRlZF90eG4pDQogCXsNCiAJCXJlc3VsdHMgPSBQ UWV4ZWMocHNldC5kYiwgT0sgPyAiQ09NTUlUIiA6ICJST0xMQkFDSyIpOw0K LQkJT0sgJj0gQWNjZXB0UmVzdWx0KHJlc3VsdHMpICYmDQorCQlPSyAmPSBB Y2NlcHRSZXN1bHQocmVzdWx0cywgdHJ1ZSkgJiYNCiAJCQkoUFFyZXN1bHRT dGF0dXMocmVzdWx0cykgPT0gUEdSRVNfQ09NTUFORF9PSyk7DQogCQlDbGVh ck9yU2F2ZVJlc3VsdChyZXN1bHRzKTsNCiAJfQ0KZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weTIub3V0IGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9jb3B5Mi5vdXQNCmluZGV4IGM1M2VkM2ViZjUu LjljOGM4MzYxZjggMTAwNjQ0DQotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2NvcHkyLm91dA0KKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9jb3B5Mi5vdXQNCkBAIC00NzUsMTAgKzQ3NSwxMCBAQCBjb3B5IGNo ZWNrX2Nvbl90YmwgZnJvbSBzdGRpbjsNCiBOT1RJQ0U6ICBpbnB1dCA9IHsi ZjEiOjF9DQogTk9USUNFOiAgaW5wdXQgPSB7ImYxIjpudWxsfQ0KIGNvcHkg Y2hlY2tfY29uX3RibCBmcm9tIHN0ZGluOw0KLU5PVElDRTogIGlucHV0ID0g eyJmMSI6MH0NCiBFUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJjaGVj a19jb25fdGJsIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJjaGVja19j b25fdGJsX2NoZWNrIg0KIERFVEFJTDogIEZhaWxpbmcgcm93IGNvbnRhaW5z ICgwKS4NCiBDT05URVhUOiAgQ09QWSBjaGVja19jb25fdGJsLCBsaW5lIDE6 ICIwIg0KK05PVElDRTogIGlucHV0ID0geyJmMSI6MH0NCiBzZWxlY3QgKiBm cm9tIGNoZWNrX2Nvbl90Ymw7DQogIGYxIA0KIC0tLS0NCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvcHlkbWwub3V0IGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb3B5ZG1sLm91dA0KaW5kZXggMWI1 MzM5NjJjNi4uYjVhMjI1NjI4ZiAxMDA2NDQNCi0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvY29weWRtbC5vdXQNCisrKyBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvY29weWRtbC5vdXQNCkBAIC04NCwxMCArODQsMTAg QEAgZHJvcCBydWxlIHFxcSBvbiBjb3B5ZG1sX3Rlc3Q7DQogY3JlYXRlIGZ1 bmN0aW9uIHFxcV90cmlnKCkgcmV0dXJucyB0cmlnZ2VyIGFzICQkDQogYmVn aW4NCiBpZiB0Z19vcCBpbiAoJ0lOU0VSVCcsICdVUERBVEUnKSB0aGVuDQot ICAgIHJhaXNlIG5vdGljZSAnJSAlJywgdGdfb3AsIG5ldy5pZDsNCisgICAg cmFpc2Ugbm90aWNlICclICUgJScsIHRnX3doZW4sIHRnX29wLCBuZXcuaWQ7 DQogICAgIHJldHVybiBuZXc7DQogZWxzZQ0KLSAgICByYWlzZSBub3RpY2Ug JyUgJScsIHRnX29wLCBvbGQuaWQ7DQorICAgIHJhaXNlIG5vdGljZSAnJSAl ICUnLCB0Z193aGVuLCB0Z19vcCwgb2xkLmlkOw0KICAgICByZXR1cm4gb2xk Ow0KIGVuZCBpZjsNCiBlbmQNCkBAIC05NywxNiArOTcsMTYgQEAgY3JlYXRl IHRyaWdnZXIgcXFxYmVmIGJlZm9yZSBpbnNlcnQgb3IgdXBkYXRlIG9yIGRl bGV0ZSBvbiBjb3B5ZG1sX3Rlc3QNCiBjcmVhdGUgdHJpZ2dlciBxcXFhZiBh ZnRlciBpbnNlcnQgb3IgdXBkYXRlIG9yIGRlbGV0ZSBvbiBjb3B5ZG1sX3Rl c3QNCiAgICAgZm9yIGVhY2ggcm93IGV4ZWN1dGUgcHJvY2VkdXJlIHFxcV90 cmlnKCk7DQogY29weSAoaW5zZXJ0IGludG8gY29weWRtbF90ZXN0ICh0KSB2 YWx1ZXMgKCdmJykgcmV0dXJuaW5nIGlkKSB0byBzdGRvdXQ7DQotTk9USUNF OiAgSU5TRVJUIDgNCitOT1RJQ0U6ICBCRUZPUkUgSU5TRVJUIDgNCiA4DQot Tk9USUNFOiAgSU5TRVJUIDgNCitOT1RJQ0U6ICBBRlRFUiBJTlNFUlQgOA0K IGNvcHkgKHVwZGF0ZSBjb3B5ZG1sX3Rlc3Qgc2V0IHQgPSAnZycgd2hlcmUg dCA9ICdmJyByZXR1cm5pbmcgaWQpIHRvIHN0ZG91dDsNCi1OT1RJQ0U6ICBV UERBVEUgOA0KK05PVElDRTogIEJFRk9SRSBVUERBVEUgOA0KIDgNCi1OT1RJ Q0U6ICBVUERBVEUgOA0KK05PVElDRTogIEFGVEVSIFVQREFURSA4DQogY29w eSAoZGVsZXRlIGZyb20gY29weWRtbF90ZXN0IHdoZXJlIHQgPSAnZycgcmV0 dXJuaW5nIGlkKSB0byBzdGRvdXQ7DQotTk9USUNFOiAgREVMRVRFIDgNCitO T1RJQ0U6ICBCRUZPUkUgREVMRVRFIDgNCiA4DQotTk9USUNFOiAgREVMRVRF IDgNCitOT1RJQ0U6ICBBRlRFUiBERUxFVEUgOA0KIGRyb3AgdGFibGUgY29w eWRtbF90ZXN0Ow0KIGRyb3AgZnVuY3Rpb24gcXFxX3RyaWcoKTsNCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvcHlzZWxlY3Qu b3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb3B5c2VsZWN0Lm91 dA0KaW5kZXggNzI4NjVmZTFlYi4uMzlhYjhmYzg3YSAxMDA2NDQNCi0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weXNlbGVjdC5vdXQNCisr KyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weXNlbGVjdC5vdXQN CkBAIC0xMjYsNyArMTI2LDcgQEAgY29weSAoc2VsZWN0IDEpIHRvIHN0ZG91 dFw7IHNlbGVjdCAxLzA7CS0tIHJvdywgdGhlbiBlcnJvcg0KIEVSUk9SOiAg ZGl2aXNpb24gYnkgemVybw0KIHNlbGVjdCAxLzBcOyBjb3B5IChzZWxlY3Qg MSkgdG8gc3Rkb3V0OyAtLSBlcnJvciBvbmx5DQogRVJST1I6ICBkaXZpc2lv biBieSB6ZXJvDQotY29weSAoc2VsZWN0IDEpIHRvIHN0ZG91dFw7IGNvcHkg KHNlbGVjdCAyKSB0byBzdGRvdXRcOyBzZWxlY3QgMFw7IHNlbGVjdCAzOyAt LSAxIDIgMw0KK2NvcHkgKHNlbGVjdCAxKSB0byBzdGRvdXRcOyBjb3B5IChz ZWxlY3QgMikgdG8gc3Rkb3V0XDsgc2VsZWN0IDNcOyBzZWxlY3QgNDsgLS0g MSAyIDMgNA0KIDENCiAyDQogID9jb2x1bW4/IA0KQEAgLTEzNCw4ICsxMzQs MTggQEAgY29weSAoc2VsZWN0IDEpIHRvIHN0ZG91dFw7IGNvcHkgKHNlbGVj dCAyKSB0byBzdGRvdXRcOyBzZWxlY3QgMFw7IHNlbGVjdCAzOyAtLQ0KICAg ICAgICAgMw0KICgxIHJvdykNCiANCisgP2NvbHVtbj8gDQorLS0tLS0tLS0t LQ0KKyAgICAgICAgNA0KKygxIHJvdykNCisNCiBjcmVhdGUgdGFibGUgdGVz dDMgKGMgaW50KTsNCiBzZWxlY3QgMFw7IGNvcHkgdGVzdDMgZnJvbSBzdGRp blw7IGNvcHkgdGVzdDMgZnJvbSBzdGRpblw7IHNlbGVjdCAxOyAtLSAxDQor ID9jb2x1bW4/IA0KKy0tLS0tLS0tLS0NCisgICAgICAgIDANCisoMSByb3cp DQorDQogID9jb2x1bW4/IA0KIC0tLS0tLS0tLS0NCiAgICAgICAgIDENCmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0 IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dA0KaW5kZXgg ZWY1MzRhMzZhMC4uYTkzNzM2MTg3YSAxMDA2NDQNCi0tLSBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQNCisrKyBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQNCkBAIC00NzYwLDMgKzQ3NjAsODcg QEAgT3duaW5nIHRhYmxlOiAicGdfY2F0YWxvZy5wZ19zdGF0aXN0aWMiDQog SW5kZXhlczoNCiAgICAgInBnX3RvYXN0XzI2MTlfaW5kZXgiIFBSSU1BUlkg S0VZLCBidHJlZSAoY2h1bmtfaWQsIGNodW5rX3NlcSkNCiANCistLQ0KKy0t IGNvbWJpbmVkIHF1ZXJpZXMNCistLQ0KK1xlY2hvICcjIGNvbWJpbmVkIHF1 ZXJpZXMgdGVzdHMnDQorIyBjb21iaW5lZCBxdWVyaWVzIHRlc3RzDQorQ1JF QVRFIEZVTkNUSU9OIHdhcm4obXNnIFRFWFQpIFJFVFVSTlMgQk9PTEVBTiBB UyAkJA0KKyAgQkVHSU4gUkFJU0UgTk9USUNFICd3YXJuICUnLCBtc2cgOyBS RVRVUk4gVFJVRSA7IEVORA0KKyQkIExBTkdVQUdFIHBscGdzcWw7DQorLS0g c2hvdyBib3RoDQorU0VMRUNUIDEgQVMgb25lIFw7IFNFTEVDVCB3YXJuKCcx LjUnKSBcOyBTRUxFQ1QgMiBBUyB0d28gOw0KKyBvbmUgDQorLS0tLS0NCisg ICAxDQorKDEgcm93KQ0KKw0KK05PVElDRTogIHdhcm4gMS41DQorQ09OVEVY VDogIFBML3BnU1FMIGZ1bmN0aW9uIHdhcm4odGV4dCkgbGluZSAyIGF0IFJB SVNFDQorIHdhcm4gDQorLS0tLS0tDQorIHQNCisoMSByb3cpDQorDQorIHR3 byANCistLS0tLQ0KKyAgIDINCisoMSByb3cpDQorDQorLS0gXGdzZXQgYXBw bGllcyB0byBsYXN0IHF1ZXJ5IG9ubHkNCitTRUxFQ1QgMyBBUyB0aHJlZSBc OyBTRUxFQ1Qgd2FybignMy41JykgXDsgU0VMRUNUIDQgQVMgZm91ciBcZ3Nl dA0KKyB0aHJlZSANCistLS0tLS0tDQorICAgICAzDQorKDEgcm93KQ0KKw0K K05PVElDRTogIHdhcm4gMy41DQorQ09OVEVYVDogIFBML3BnU1FMIGZ1bmN0 aW9uIHdhcm4odGV4dCkgbGluZSAyIGF0IFJBSVNFDQorIHdhcm4gDQorLS0t LS0tDQorIHQNCisoMSByb3cpDQorDQorXGVjaG8gOnRocmVlIDpmb3VyDQor OnRocmVlIDQNCistLSBzeW50YXggZXJyb3Igc3RvcHMgYWxsIHByb2Nlc3Np bmcNCitTRUxFQ1QgNSBcOyBTRUxFQ1QgNiArIFw7IFNFTEVDVCB3YXJuKCc2 LjUnKSBcOyBTRUxFQ1QgNyA7DQorRVJST1I6ICBzeW50YXggZXJyb3IgYXQg b3IgbmVhciAiOyINCitMSU5FIDE6IFNFTEVDVCA1IDsgU0VMRUNUIDYgKyA7 IFNFTEVDVCB3YXJuKCc2LjUnKSA7IFNFTEVDVCA3IDsNCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBeDQorLS0gd2l0aCBhYm9ydGVkIHRyYW5z YWN0aW9uLCBzdG9wIG9uIGZpcnN0IGVycm9yDQorQkVHSU4gXDsgU0VMRUNU IDggQVMgZWlnaHQgXDsgU0VMRUNUIDkvMCBBUyBuaW5lIFw7IFJPTExCQUNL IFw7IFNFTEVDVCAxMCBBUyB0ZW4gOw0KKyBlaWdodCANCistLS0tLS0tDQor ICAgICA4DQorKDEgcm93KQ0KKw0KK0VSUk9SOiAgZGl2aXNpb24gYnkgemVy bw0KKy0tIGNsb3NlIHByZXZpb3VzbHkgYWJvcnRlZCB0cmFuc2FjdGlvbg0K K1JPTExCQUNLOw0KKy0tIG1pc2MgU1FMIGNvbW1hbmRzDQorLS0gKG5vbiBT RUxFQ1Qgb3V0cHV0IGlzIHNlbnQgdG8gc3RkZXJyLCB0aHVzIGlzIG5vdCBz aG93biBpbiBleHBlY3RlZCByZXN1bHRzKQ0KK1NFTEVDVCAnb2snIEFTICJi ZWdpbiIgXDsNCitDUkVBVEUgVEFCTEUgcHNxbF9jb21pY3MocyBURVhUKSBc Ow0KK0lOU0VSVCBJTlRPIHBzcWxfY29taWNzIFZBTFVFUyAoJ0NhbHZpbicp LCAoJ2hvYmJlcycpIFw7DQorQ09QWSBwc3FsX2NvbWljcyBGUk9NIFNURElO IFw7DQorVVBEQVRFIHBzcWxfY29taWNzIFNFVCBzID0gJ0hvYmJlcycgV0hF UkUgcyA9ICdob2JiZXMnIFw7DQorREVMRVRFIEZST00gcHNxbF9jb21pY3Mg V0hFUkUgcyA9ICdNb2UnIFw7DQorQ09QWSBwc3FsX2NvbWljcyBUTyBTVERP VVQgXDsNCitUUlVOQ0FURSBwc3FsX2NvbWljcyBcOw0KK0RST1AgVEFCTEUg cHNxbF9jb21pY3MgXDsNCitTRUxFQ1QgJ29rJyBBUyAiZG9uZSIgOw0KKyBi ZWdpbiANCistLS0tLS0tDQorIG9rDQorKDEgcm93KQ0KKw0KK0NhbHZpbg0K K1N1c2llDQorSG9iYmVzDQorIGRvbmUgDQorLS0tLS0tDQorIG9rDQorKDEg cm93KQ0KKw0KK0RST1AgRlVOQ1RJT04gd2FybihURVhUKTsNCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3RyYW5zYWN0aW9ucy5v dXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3RyYW5zYWN0aW9ucy5v dXQNCmluZGV4IDFiMzE2Y2M5YjguLjNlNjJmODM5MTggMTAwNjQ0DQotLS0g YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3RyYW5zYWN0aW9ucy5vdXQN CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdHJhbnNhY3Rpb25z Lm91dA0KQEAgLTg1NSwxMSArODU1LDIxIEBAIERST1AgVEFCTEUgYWJjOw0K IC0tIHRlc3RzIHJlbHkgb24gdGhlIGZhY3QgdGhhdCBwc3FsIHdpbGwgbm90 IGJyZWFrIFNRTCBjb21tYW5kcyBhcGFydCBhdCBhDQogLS0gYmFja3NsYXNo LXF1b3RlZCBzZW1pY29sb24sIGJ1dCB3aWxsIHNlbmQgdGhlbSBhcyBvbmUg UXVlcnkuDQogY3JlYXRlIHRlbXAgdGFibGUgaV90YWJsZSAoZjEgaW50KTsN Ci0tLSBwc3FsIHdpbGwgc2hvdyBvbmx5IHRoZSBsYXN0IHJlc3VsdCBpbiBh IG11bHRpLXN0YXRlbWVudCBRdWVyeQ0KLVNFTEVDVCAxXDsgU0VMRUNUIDJc OyBTRUxFQ1QgMzsNCi0gP2NvbHVtbj8gDQotLS0tLS0tLS0tLQ0KLSAgICAg ICAgMw0KKy0tIHBzcWwgd2lsbCBzaG93IGFsbCByZXN1bHRzIG9mIGEgbXVs dGktc3RhdGVtZW50IFF1ZXJ5DQorU0VMRUNUIDEgQVMgb25lXDsgU0VMRUNU IDIgQVMgdHdvXDsgU0VMRUNUIDMgQVMgdGhyZWU7DQorIG9uZSANCistLS0t LQ0KKyAgIDENCisoMSByb3cpDQorDQorIHR3byANCistLS0tLQ0KKyAgIDIN CisoMSByb3cpDQorDQorIHRocmVlIA0KKy0tLS0tLS0NCisgICAgIDMNCiAo MSByb3cpDQogDQogLS0gdGhpcyBpbXBsaWNpdGx5IGNvbW1pdHM6DQpAQCAt ODcxLDYgKzg4MSwxMiBAQCBpbnNlcnQgaW50byBpX3RhYmxlIHZhbHVlcygx KVw7IHNlbGVjdCAqIGZyb20gaV90YWJsZTsNCiANCiAtLSAxLzAgZXJyb3Ig d2lsbCBjYXVzZSByb2xsaW5nIGJhY2sgdGhlIHdob2xlIGltcGxpY2l0IHRy YW5zYWN0aW9uDQogaW5zZXJ0IGludG8gaV90YWJsZSB2YWx1ZXMoMilcOyBz ZWxlY3QgKiBmcm9tIGlfdGFibGVcOyBzZWxlY3QgMS8wOw0KKyBmMSANCist LS0tDQorICAxDQorICAyDQorKDIgcm93cykNCisNCiBFUlJPUjogIGRpdmlz aW9uIGJ5IHplcm8NCiBzZWxlY3QgKiBmcm9tIGlfdGFibGU7DQogIGYxIA0K QEAgLTg4OSw5ICs5MDUsMTkgQEAgcm9sbGJhY2s7ICAtLSB3ZSBhcmUgbm90 IGluIGEgdHJhbnNhY3Rpb24gYXQgdGhpcyBwb2ludA0KIFdBUk5JTkc6ICB0 aGVyZSBpcyBubyB0cmFuc2FjdGlvbiBpbiBwcm9ncmVzcw0KIC0tIGJlZ2lu IGNvbnZlcnRzIGltcGxpY2l0IHRyYW5zYWN0aW9uIGludG8gYSByZWd1bGFy IG9uZSB0aGF0DQogLS0gY2FuIGV4dGVuZCBwYXN0IHRoZSBlbmQgb2YgdGhl IFF1ZXJ5DQotc2VsZWN0IDFcOyBiZWdpblw7IGluc2VydCBpbnRvIGlfdGFi bGUgdmFsdWVzKDUpOw0KK3NlbGVjdCAxIEFTIG9uZVw7IGJlZ2luXDsgaW5z ZXJ0IGludG8gaV90YWJsZSB2YWx1ZXMoNSk7DQorIG9uZSANCistLS0tLQ0K KyAgIDENCisoMSByb3cpDQorDQogY29tbWl0Ow0KLXNlbGVjdCAxXDsgYmVn aW5cOyBpbnNlcnQgaW50byBpX3RhYmxlIHZhbHVlcyg2KTsNCitzZWxlY3Qg MSBBUyBvbmVcOyBiZWdpblw7IGluc2VydCBpbnRvIGlfdGFibGUgdmFsdWVz KDYpOw0KKyBvbmUgDQorLS0tLS0NCisgICAxDQorKDEgcm93KQ0KKw0KIHJv bGxiYWNrOw0KIC0tIGNvbW1pdCBpbiBpbXBsaWNpdC10cmFuc2FjdGlvbiBz dGF0ZSBjb21taXRzIGJ1dCBpc3N1ZXMgYSB3YXJuaW5nLg0KIGluc2VydCBp bnRvIGlfdGFibGUgdmFsdWVzKDcpXDsgY29tbWl0XDsgaW5zZXJ0IGludG8g aV90YWJsZSB2YWx1ZXMoOClcOyBzZWxlY3QgMS8wOw0KQEAgLTkxNywyMyAr OTQzLDUzIEBAIHNlbGVjdCAqIGZyb20gaV90YWJsZTsNCiByb2xsYmFjazsg IC0tIHdlIGFyZSBub3QgaW4gYSB0cmFuc2FjdGlvbiBhdCB0aGlzIHBvaW50 DQogV0FSTklORzogIHRoZXJlIGlzIG5vIHRyYW5zYWN0aW9uIGluIHByb2dy ZXNzDQogLS0gaW1wbGljaXQgdHJhbnNhY3Rpb24gYmxvY2sgaXMgc3RpbGwg YSB0cmFuc2FjdGlvbiBibG9jaywgZm9yIGUuZy4gVkFDVVVNDQotU0VMRUNU IDFcOyBWQUNVVU07DQorU0VMRUNUIDEgQVMgb25lXDsgVkFDVVVNOw0KKyBv bmUgDQorLS0tLS0NCisgICAxDQorKDEgcm93KQ0KKw0KIEVSUk9SOiAgVkFD VVVNIGNhbm5vdCBydW4gaW5zaWRlIGEgdHJhbnNhY3Rpb24gYmxvY2sNCi1T RUxFQ1QgMVw7IENPTU1JVFw7IFZBQ1VVTTsNCitTRUxFQ1QgMiBBUyB0d29c OyBDT01NSVRcOyBWQUNVVU07DQogV0FSTklORzogIHRoZXJlIGlzIG5vIHRy YW5zYWN0aW9uIGluIHByb2dyZXNzDQorIHR3byANCistLS0tLQ0KKyAgIDIN CisoMSByb3cpDQorDQogRVJST1I6ICBWQUNVVU0gY2Fubm90IHJ1biBpbnNp ZGUgYSB0cmFuc2FjdGlvbiBibG9jaw0KIC0tIHdlIGRpc2FsbG93IHNhdmVw b2ludC1yZWxhdGVkIGNvbW1hbmRzIGluIGltcGxpY2l0LXRyYW5zYWN0aW9u IHN0YXRlDQotU0VMRUNUIDFcOyBTQVZFUE9JTlQgc3A7DQorU0VMRUNUIDMg QVMgdGhyZWVcOyBTQVZFUE9JTlQgc3A7DQorIHRocmVlIA0KKy0tLS0tLS0N CisgICAgIDMNCisoMSByb3cpDQorDQogRVJST1I6ICBTQVZFUE9JTlQgY2Fu IG9ubHkgYmUgdXNlZCBpbiB0cmFuc2FjdGlvbiBibG9ja3MNCi1TRUxFQ1Qg MVw7IENPTU1JVFw7IFNBVkVQT0lOVCBzcDsNCitTRUxFQ1QgNCBBUyBmb3Vy XDsgQ09NTUlUXDsgU0FWRVBPSU5UIHNwOw0KIFdBUk5JTkc6ICB0aGVyZSBp cyBubyB0cmFuc2FjdGlvbiBpbiBwcm9ncmVzcw0KKyBmb3VyIA0KKy0tLS0t LQ0KKyAgICA0DQorKDEgcm93KQ0KKw0KIEVSUk9SOiAgU0FWRVBPSU5UIGNh biBvbmx5IGJlIHVzZWQgaW4gdHJhbnNhY3Rpb24gYmxvY2tzDQotUk9MTEJB Q0sgVE8gU0FWRVBPSU5UIHNwXDsgU0VMRUNUIDI7DQorUk9MTEJBQ0sgVE8g U0FWRVBPSU5UIHNwXDsgU0VMRUNUIDUgQVMgZml2ZTsNCiBFUlJPUjogIFJP TExCQUNLIFRPIFNBVkVQT0lOVCBjYW4gb25seSBiZSB1c2VkIGluIHRyYW5z YWN0aW9uIGJsb2Nrcw0KLVNFTEVDVCAyXDsgUkVMRUFTRSBTQVZFUE9JTlQg c3BcOyBTRUxFQ1QgMzsNCitTRUxFQ1QgNiBBUyBzaXhcOyBSRUxFQVNFIFNB VkVQT0lOVCBzcFw7IFNFTEVDVCA3IEFTIHNldmVuOw0KKyBzaXggDQorLS0t LS0NCisgICA2DQorKDEgcm93KQ0KKw0KIEVSUk9SOiAgUkVMRUFTRSBTQVZF UE9JTlQgY2FuIG9ubHkgYmUgdXNlZCBpbiB0cmFuc2FjdGlvbiBibG9ja3MN CiAtLSBidXQgdGhpcyBpcyBPSywgYmVjYXVzZSB0aGUgQkVHSU4gY29udmVy dHMgaXQgdG8gYSByZWd1bGFyIHhhY3QNCi1TRUxFQ1QgMVw7IEJFR0lOXDsg U0FWRVBPSU5UIHNwXDsgUk9MTEJBQ0sgVE8gU0FWRVBPSU5UIHNwXDsgQ09N TUlUOw0KK1NFTEVDVCA4XDsgQkVHSU5cOyBTQVZFUE9JTlQgc3BcOyBST0xM QkFDSyBUTyBTQVZFUE9JTlQgc3BcOyBDT01NSVQ7DQorID9jb2x1bW4/IA0K Ky0tLS0tLS0tLS0NCisgICAgICAgIDgNCisoMSByb3cpDQorDQogLS0gVGVz dCBmb3Igc3VjY2Vzc2Z1bCBjbGVhbnVwIG9mIGFuIGFib3J0ZWQgdHJhbnNh Y3Rpb24gYXQgc2Vzc2lvbiBleGl0Lg0KIC0tIFRISVMgTVVTVCBCRSBUSEUg TEFTVCBURVNUIElOIFRISVMgRklMRS4NCiBiZWdpbjsNCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5ZG1sLnNxbCBiL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL2NvcHlkbWwuc3FsDQppbmRleCA5YTI5ZjljOWFjLi40 NTc4MzQyMjUzIDEwMDY0NA0KLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwv Y29weWRtbC5zcWwNCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvcHlk bWwuc3FsDQpAQCAtNzAsMTAgKzcwLDEwIEBAIGRyb3AgcnVsZSBxcXEgb24g Y29weWRtbF90ZXN0Ow0KIGNyZWF0ZSBmdW5jdGlvbiBxcXFfdHJpZygpIHJl dHVybnMgdHJpZ2dlciBhcyAkJA0KIGJlZ2luDQogaWYgdGdfb3AgaW4gKCdJ TlNFUlQnLCAnVVBEQVRFJykgdGhlbg0KLSAgICByYWlzZSBub3RpY2UgJyUg JScsIHRnX29wLCBuZXcuaWQ7DQorICAgIHJhaXNlIG5vdGljZSAnJSAlICUn LCB0Z193aGVuLCB0Z19vcCwgbmV3LmlkOw0KICAgICByZXR1cm4gbmV3Ow0K IGVsc2UNCi0gICAgcmFpc2Ugbm90aWNlICclICUnLCB0Z19vcCwgb2xkLmlk Ow0KKyAgICByYWlzZSBub3RpY2UgJyUgJSAlJywgdGdfd2hlbiwgdGdfb3As IG9sZC5pZDsNCiAgICAgcmV0dXJuIG9sZDsNCiBlbmQgaWY7DQogZW5kDQpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weXNlbGVjdC5z cWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5c2VsZWN0LnNxbA0KaW5k ZXggMWQ5OGRhZDNjOC4uYWJjMzM5MDRjMCAxMDA2NDQNCi0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2NvcHlzZWxlY3Quc3FsDQorKysgYi9zcmMvdGVz dC9yZWdyZXNzL3NxbC9jb3B5c2VsZWN0LnNxbA0KQEAgLTg0LDcgKzg0LDcg QEAgZHJvcCB0YWJsZSB0ZXN0MTsNCiAtLSBwc3FsIGhhbmRsaW5nIG9mIENP UFkgaW4gbXVsdGktY29tbWFuZCBzdHJpbmdzDQogY29weSAoc2VsZWN0IDEp IHRvIHN0ZG91dFw7IHNlbGVjdCAxLzA7CS0tIHJvdywgdGhlbiBlcnJvcg0K IHNlbGVjdCAxLzBcOyBjb3B5IChzZWxlY3QgMSkgdG8gc3Rkb3V0OyAtLSBl cnJvciBvbmx5DQotY29weSAoc2VsZWN0IDEpIHRvIHN0ZG91dFw7IGNvcHkg KHNlbGVjdCAyKSB0byBzdGRvdXRcOyBzZWxlY3QgMFw7IHNlbGVjdCAzOyAt LSAxIDIgMw0KK2NvcHkgKHNlbGVjdCAxKSB0byBzdGRvdXRcOyBjb3B5IChz ZWxlY3QgMikgdG8gc3Rkb3V0XDsgc2VsZWN0IDNcOyBzZWxlY3QgNDsgLS0g MSAyIDMgNA0KIA0KIGNyZWF0ZSB0YWJsZSB0ZXN0MyAoYyBpbnQpOw0KIHNl bGVjdCAwXDsgY29weSB0ZXN0MyBmcm9tIHN0ZGluXDsgY29weSB0ZXN0MyBm cm9tIHN0ZGluXDsgc2VsZWN0IDE7IC0tIDENCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL3NxbC9wc3FsLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3BzcWwuc3FsDQppbmRleCAyZTM3OTg0OTYyLi40Y2YzZDZlYjlkIDEw MDY0NA0KLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHNxbC5zcWwNCisr KyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BzcWwuc3FsDQpAQCAtMTEzNCwz ICsxMTM0LDM4IEBAIGRyb3Agcm9sZSByZWdyZXNzX3BhcnRpdGlvbmluZ19y b2xlOw0KIA0KIC0tIFxkIG9uIHRvYXN0IHRhYmxlICh1c2UgcGdfc3RhdGlz dGljJ3MgdG9hc3QgdGFibGUsIHdoaWNoIGhhcyBhIGtub3duIG5hbWUpDQog XGQgcGdfdG9hc3QucGdfdG9hc3RfMjYxOQ0KKw0KKy0tDQorLS0gY29tYmlu ZWQgcXVlcmllcw0KKy0tDQorXGVjaG8gJyMgY29tYmluZWQgcXVlcmllcyB0 ZXN0cycNCitDUkVBVEUgRlVOQ1RJT04gd2Fybihtc2cgVEVYVCkgUkVUVVJO UyBCT09MRUFOIEFTICQkDQorICBCRUdJTiBSQUlTRSBOT1RJQ0UgJ3dhcm4g JScsIG1zZyA7IFJFVFVSTiBUUlVFIDsgRU5EDQorJCQgTEFOR1VBR0UgcGxw Z3NxbDsNCistLSBzaG93IGJvdGgNCitTRUxFQ1QgMSBBUyBvbmUgXDsgU0VM RUNUIHdhcm4oJzEuNScpIFw7IFNFTEVDVCAyIEFTIHR3byA7DQorLS0gXGdz ZXQgYXBwbGllcyB0byBsYXN0IHF1ZXJ5IG9ubHkNCitTRUxFQ1QgMyBBUyB0 aHJlZSBcOyBTRUxFQ1Qgd2FybignMy41JykgXDsgU0VMRUNUIDQgQVMgZm91 ciBcZ3NldA0KK1xlY2hvIDp0aHJlZSA6Zm91cg0KKy0tIHN5bnRheCBlcnJv ciBzdG9wcyBhbGwgcHJvY2Vzc2luZw0KK1NFTEVDVCA1IFw7IFNFTEVDVCA2 ICsgXDsgU0VMRUNUIHdhcm4oJzYuNScpIFw7IFNFTEVDVCA3IDsNCistLSB3 aXRoIGFib3J0ZWQgdHJhbnNhY3Rpb24sIHN0b3Agb24gZmlyc3QgZXJyb3IN CitCRUdJTiBcOyBTRUxFQ1QgOCBBUyBlaWdodCBcOyBTRUxFQ1QgOS8wIEFT IG5pbmUgXDsgUk9MTEJBQ0sgXDsgU0VMRUNUIDEwIEFTIHRlbiA7DQorLS0g Y2xvc2UgcHJldmlvdXNseSBhYm9ydGVkIHRyYW5zYWN0aW9uDQorUk9MTEJB Q0s7DQorLS0gbWlzYyBTUUwgY29tbWFuZHMNCistLSAobm9uIFNFTEVDVCBv dXRwdXQgaXMgc2VudCB0byBzdGRlcnIsIHRodXMgaXMgbm90IHNob3duIGlu IGV4cGVjdGVkIHJlc3VsdHMpDQorU0VMRUNUICdvaycgQVMgImJlZ2luIiBc Ow0KK0NSRUFURSBUQUJMRSBwc3FsX2NvbWljcyhzIFRFWFQpIFw7DQorSU5T RVJUIElOVE8gcHNxbF9jb21pY3MgVkFMVUVTICgnQ2FsdmluJyksICgnaG9i YmVzJykgXDsNCitDT1BZIHBzcWxfY29taWNzIEZST00gU1RESU4gXDsNCitV UERBVEUgcHNxbF9jb21pY3MgU0VUIHMgPSAnSG9iYmVzJyBXSEVSRSBzID0g J2hvYmJlcycgXDsNCitERUxFVEUgRlJPTSBwc3FsX2NvbWljcyBXSEVSRSBz ID0gJ01vZScgXDsNCitDT1BZIHBzcWxfY29taWNzIFRPIFNURE9VVCBcOw0K K1RSVU5DQVRFIHBzcWxfY29taWNzIFw7DQorRFJPUCBUQUJMRSBwc3FsX2Nv bWljcyBcOw0KK1NFTEVDVCAnb2snIEFTICJkb25lIiA7DQorTW9lDQorU3Vz aWUNCitcLg0KK0RST1AgRlVOQ1RJT04gd2FybihURVhUKTsNCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC90cmFuc2FjdGlvbnMuc3FsIGIv c3JjL3Rlc3QvcmVncmVzcy9zcWwvdHJhbnNhY3Rpb25zLnNxbA0KaW5kZXgg ODEyZTQwYTFhMy4uNWQxMmZhOGU4NiAxMDA2NDQNCi0tLSBhL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL3RyYW5zYWN0aW9ucy5zcWwNCisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL3RyYW5zYWN0aW9ucy5zcWwNCkBAIC00ODksOCArNDg5 LDggQEAgRFJPUCBUQUJMRSBhYmM7DQogDQogY3JlYXRlIHRlbXAgdGFibGUg aV90YWJsZSAoZjEgaW50KTsNCiANCi0tLSBwc3FsIHdpbGwgc2hvdyBvbmx5 IHRoZSBsYXN0IHJlc3VsdCBpbiBhIG11bHRpLXN0YXRlbWVudCBRdWVyeQ0K LVNFTEVDVCAxXDsgU0VMRUNUIDJcOyBTRUxFQ1QgMzsNCistLSBwc3FsIHdp bGwgc2hvdyBhbGwgcmVzdWx0cyBvZiBhIG11bHRpLXN0YXRlbWVudCBRdWVy eQ0KK1NFTEVDVCAxIEFTIG9uZVw7IFNFTEVDVCAyIEFTIHR3b1w7IFNFTEVD VCAzIEFTIHRocmVlOw0KIA0KIC0tIHRoaXMgaW1wbGljaXRseSBjb21taXRz Og0KIGluc2VydCBpbnRvIGlfdGFibGUgdmFsdWVzKDEpXDsgc2VsZWN0ICog ZnJvbSBpX3RhYmxlOw0KQEAgLTUwOCw5ICs1MDgsOSBAQCByb2xsYmFjazsg IC0tIHdlIGFyZSBub3QgaW4gYSB0cmFuc2FjdGlvbiBhdCB0aGlzIHBvaW50 DQogDQogLS0gYmVnaW4gY29udmVydHMgaW1wbGljaXQgdHJhbnNhY3Rpb24g aW50byBhIHJlZ3VsYXIgb25lIHRoYXQNCiAtLSBjYW4gZXh0ZW5kIHBhc3Qg dGhlIGVuZCBvZiB0aGUgUXVlcnkNCi1zZWxlY3QgMVw7IGJlZ2luXDsgaW5z ZXJ0IGludG8gaV90YWJsZSB2YWx1ZXMoNSk7DQorc2VsZWN0IDEgQVMgb25l XDsgYmVnaW5cOyBpbnNlcnQgaW50byBpX3RhYmxlIHZhbHVlcyg1KTsNCiBj b21taXQ7DQotc2VsZWN0IDFcOyBiZWdpblw7IGluc2VydCBpbnRvIGlfdGFi bGUgdmFsdWVzKDYpOw0KK3NlbGVjdCAxIEFTIG9uZVw7IGJlZ2luXDsgaW5z ZXJ0IGludG8gaV90YWJsZSB2YWx1ZXMoNik7DQogcm9sbGJhY2s7DQogDQog LS0gY29tbWl0IGluIGltcGxpY2l0LXRyYW5zYWN0aW9uIHN0YXRlIGNvbW1p dHMgYnV0IGlzc3VlcyBhIHdhcm5pbmcuDQpAQCAtNTIzLDE3ICs1MjMsMTcg QEAgc2VsZWN0ICogZnJvbSBpX3RhYmxlOw0KIHJvbGxiYWNrOyAgLS0gd2Ug YXJlIG5vdCBpbiBhIHRyYW5zYWN0aW9uIGF0IHRoaXMgcG9pbnQNCiANCiAt LSBpbXBsaWNpdCB0cmFuc2FjdGlvbiBibG9jayBpcyBzdGlsbCBhIHRyYW5z YWN0aW9uIGJsb2NrLCBmb3IgZS5nLiBWQUNVVU0NCi1TRUxFQ1QgMVw7IFZB Q1VVTTsNCi1TRUxFQ1QgMVw7IENPTU1JVFw7IFZBQ1VVTTsNCitTRUxFQ1Qg MSBBUyBvbmVcOyBWQUNVVU07DQorU0VMRUNUIDIgQVMgdHdvXDsgQ09NTUlU XDsgVkFDVVVNOw0KIA0KIC0tIHdlIGRpc2FsbG93IHNhdmVwb2ludC1yZWxh dGVkIGNvbW1hbmRzIGluIGltcGxpY2l0LXRyYW5zYWN0aW9uIHN0YXRlDQot U0VMRUNUIDFcOyBTQVZFUE9JTlQgc3A7DQotU0VMRUNUIDFcOyBDT01NSVRc OyBTQVZFUE9JTlQgc3A7DQotUk9MTEJBQ0sgVE8gU0FWRVBPSU5UIHNwXDsg U0VMRUNUIDI7DQotU0VMRUNUIDJcOyBSRUxFQVNFIFNBVkVQT0lOVCBzcFw7 IFNFTEVDVCAzOw0KK1NFTEVDVCAzIEFTIHRocmVlXDsgU0FWRVBPSU5UIHNw Ow0KK1NFTEVDVCA0IEFTIGZvdXJcOyBDT01NSVRcOyBTQVZFUE9JTlQgc3A7 DQorUk9MTEJBQ0sgVE8gU0FWRVBPSU5UIHNwXDsgU0VMRUNUIDUgQVMgZml2 ZTsNCitTRUxFQ1QgNiBBUyBzaXhcOyBSRUxFQVNFIFNBVkVQT0lOVCBzcFw7 IFNFTEVDVCA3IEFTIHNldmVuOw0KIA0KIC0tIGJ1dCB0aGlzIGlzIE9LLCBi ZWNhdXNlIHRoZSBCRUdJTiBjb252ZXJ0cyBpdCB0byBhIHJlZ3VsYXIgeGFj dA0KLVNFTEVDVCAxXDsgQkVHSU5cOyBTQVZFUE9JTlQgc3BcOyBST0xMQkFD SyBUTyBTQVZFUE9JTlQgc3BcOyBDT01NSVQ7DQorU0VMRUNUIDhcOyBCRUdJ Tlw7IFNBVkVQT0lOVCBzcFw7IFJPTExCQUNLIFRPIFNBVkVQT0lOVCBzcFw7 IENPTU1JVDsNCiANCiANCiAtLSBUZXN0IGZvciBzdWNjZXNzZnVsIGNsZWFu dXAgb2YgYW4gYWJvcnRlZCB0cmFuc2FjdGlvbiBhdCBzZXNzaW9uIGV4aXQu DQo= --8323329-1102959102-1564129193=:13195--