From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27021 invoked by alias); 16 Feb 2017 16:03:52 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 40558 Received: (qmail 7496 invoked from network); 16 Feb 2017 16:03:51 -0000 X-Qmail-Scanner-Diagnostics: from new1-smtp.messagingengine.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(66.111.4.221):SA:0(-0.4/5.0):. Processed in 2.598984 secs); 16 Feb 2017 16:03:51 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-0.4 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS,T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.1 X-Envelope-From: psprint2@fastmail.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | Received-SPF: pass (ns1.primenet.com.au: SPF record at spf.messagingengine.com designates 66.111.4.221 as permitted sender) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=fastmail.com; h= content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to:x-me-sender :x-me-sender:x-sasl-enc; s=mesmtp; bh=eDKoMRX97LCkT6Js6DSt47MsJ8 U=; b=yPgwN98mPFCJAkpqTRDvClCuJGYzjkwE7//G+5NIFrAyptt3tJ3Kdz98I1 UJtJbEBonflxWJexrURbGUvLH+zoW7xVEXsNuWdoeyHLT1YJr0f+NhTht05wirw8 pgRS3GmU5aI+hmXbSPVR8jrVEdEFVyIJg2YznYfpENlROztyw= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d= messagingengine.com; h=content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-me-sender:x-me-sender:x-sasl-enc; s=smtpout; bh=eD KoMRX97LCkT6Js6DSt47MsJ8U=; b=gnwZkFSQlq5Ozcm62dNxWKpRQhh6uAwzry /9vZDLFAZMkKpvdgbcXNpDZ0uZsmcdDHtplf9Y+ITrpveGGGbUxxJxnC+iWn1LH7 y7D+QoRD5yx8mJxYGuESTKaXr3or87dzlUKqpYir+5RRMY2FyVHTPzVYSO1YK2nR P46T50pak= X-ME-Sender: Message-Id: <1487261017.1907093.883202288.270632CF@webmail.messagingengine.com> From: Sebastian Gniazdowski To: zsh-workers@zsh.org MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: multipart/mixed; boundary="_----------=_148726101719070930" X-Mailer: MessagingEngine.com Webmail Interface - ajax-7cfc9722 References: <1487074831.317363.880495280.04595B08@webmail.messagingengine.com> <1487154163.615323.881647656.040AB25F@webmail.messagingengine.com> <20170216101658.46555c47@pwslap01u.europe.root.pri> <1487245575.1843244.882932424.59844A89@webmail.messagingengine.com> <20170216125215.1b744bf6@pwslap01u.europe.root.pri> <1487255103.1880827.883083384.73295E85@webmail.messagingengine.com> <1487255450.1882152.883095336.5DDBE902@webmail.messagingengine.com> <20170216151152.0f5a07ef@pwslap01u.europe.root.pri> In-Reply-To: <20170216151152.0f5a07ef@pwslap01u.europe.root.pri> Date: Thu, 16 Feb 2017 08:03:37 -0800 Subject: Re: [PATCH] db/gdbm rewrite --_----------=_148726101719070930 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" On Thu, Feb 16, 2017, at 07:11 AM, Peter Stephenson wrote: > Yes, it doesn't fix the problem, and it looks like it's a bit more > subtle than simply a wrong length. > > I've managed to get valgrind reporting errors but with and without > --enable-zsh-mem. Here's one without: --enable-zsh-debug is on > but that's all. > > I'm afraid that's all I'm going to have time to do. > > pws > > % zmodload zsh/db/gdbm > % ztie -d db/gdbm -f db.gdbm dbase > % dbase[testkey]=somewhat > ==25034== Invalid write of size 1 > ==25034== at 0x80E0B78: metafy (utils.c:4652) I've used HEAP_ALLOC instead of HEAP_DUP in argument for metafy. Fixing this resolves valgrind report. Important catch.. Hopefully it will resolve enable-zsh-mem problem (I cannot reproduce that). Sending as complete patch plus db_gdbm.c file. -- Sebastian Gniazdowski psprint2@fastmail.com --_----------=_148726101719070930 Content-Disposition: attachment; filename="db_gdbm_rewrite4.diff" Content-Id: <1487260920.1906338.6e427fbb2f744cada44684fe395e72afdeb6a781.1C17DF94@content.messagingengine.com> Content-Transfer-Encoding: base64 Content-Type: text/plain; name="db_gdbm_rewrite4.diff" ZGlmZiAtLWdpdCBhL0RvYy9ac2gvbW9kX2RiX2dkYm0ueW8gYi9Eb2MvWnNo L21vZF9kYl9nZGJtLnlvCmluZGV4IDkwOTc0MjkuLjY5OWU5YWIgMTAwNjQ0 Ci0tLSBhL0RvYy9ac2gvbW9kX2RiX2dkYm0ueW8KKysrIGIvRG9jL1pzaC9t b2RfZGJfZ2RibS55bwpAQCAtNDMsNiArNDMsMTcgQEAgbG9jYWwgc2NvcGUg KGZ1bmN0aW9uKSBlbmRzLiAgTm90ZSB0aGF0IGEgcmVhZG9ubHkgcGFyYW1l dGVyIG1heSBub3QgYmUKIGV4cGxpY2l0bHkgdW5zZXQsIHNvIHRoZSBvbmx5 IHdheSB0byB1bnNldCBhIGdsb2JhbCBwYXJhbWV0ZXIgY3JlYXRlZCB3aXRo CiBgdHQoenRpZSAtciknIGlzIHRvIHVzZSBgdHQoenVudGllIC11KScuCiAp CitmaW5kZXgoemdkYm1wYXRoKQorY2luZGV4KGRhdGFiYXNlIGZpbGUgcGF0 aCwgcmVhZGluZykKK2l0ZW0odHQoemdkYm1wYXRoKSB2YXIocGFyYW1ldGVy bmFtZSkpKAorUHV0IHBhdGggdG8gZGF0YWJhc2UgZmlsZSBhc3NpZ25lZCB0 byB2YXIocGFyYW1ldGVybmFtZSkgaW50byB0dChSRVBMWSkKK3NjYWxhci4K KykKK2ZpbmRleCh6Z2RibV90aWVkKQorY2luZGV4KGRhdGFiYXNlIHRpZWQg YXJyYXlzLCBlbnVtZXJhdGluZykKK2l0ZW0odHQoemdkYm1fdGllZCkpKAor QXJyYXkgaG9sZGluZyBuYW1lcyBvZiBhbGwgdGllZCBwYXJhbWV0ZXJzLgor KQogZW5kaXRlbSgpCiAKIFRoZSBmaWVsZHMgb2YgYW4gYXNzb2NpYXRpdmUg YXJyYXkgdGllZCB0byBHREJNIGFyZSBuZWl0aGVyIGNhY2hlZCBub3IKZGlm ZiAtLWdpdCBhL1NyYy9Nb2R1bGVzL2RiX2dkYm0uYyBiL1NyYy9Nb2R1bGVz L2RiX2dkYm0uYwppbmRleCAzMTBlMzI5Li44YTYxYjJmIDEwMDY0NAotLS0g YS9TcmMvTW9kdWxlcy9kYl9nZGJtLmMKKysrIGIvU3JjL01vZHVsZXMvZGJf Z2RibS5jCkBAIC02LDYgKzYsOSBAQAogICogQ29weXJpZ2h0IChjKSAyMDA4 IENsaW50IEFkYW1zCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKKyAq IE1vZGlmaWNhdGlvbnMgY29weXJpZ2h0IChjKSAyMDE3IFNlYmFzdGlhbiBH bmlhemRvd3NraQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCiAgKiBQ ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCB3aXRob3V0IHdyaXR0ZW4g YWdyZWVtZW50IGFuZCB3aXRob3V0CiAgKiBsaWNlbnNlIG9yIHJveWFsdHkg ZmVlcywgdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRo aXMKICAqIHNvZnR3YXJlIGFuZCB0byBkaXN0cmlidXRlIG1vZGlmaWVkIHZl cnNpb25zIG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQpAQCAtMzEsNiArMzQs MTUgQEAKICNpbmNsdWRlICJkYl9nZGJtLm1kaCIKICNpbmNsdWRlICJkYl9n ZGJtLnBybyIKIAorI2lmbmRlZiBQTV9VUFRPREFURQorI2RlZmluZSBQTV9V UFRPREFURSAgICAgKDE8PDE5KSAvKiBQYXJhbWV0ZXIgaGFzIHVwLXRvLWRh dGUgZGF0YSAoZS5nLiBsb2FkZWQgZnJvbSBEQikgKi8KKyNlbmRpZgorCitz dGF0aWMgUGFyYW0gY3JlYXRlaGFzaCggY2hhciAqbmFtZSwgaW50IGZsYWdz ICk7CitzdGF0aWMgaW50IGFwcGVuZF90aWVkX25hbWUoIGNvbnN0IGNoYXIg Km5hbWUgKTsKK3N0YXRpYyBpbnQgcmVtb3ZlX3RpZWRfbmFtZSggY29uc3Qg Y2hhciAqbmFtZSApOworY2hhciAqdW5tZXRhZnlfemFsbG9jKGNvbnN0IGNo YXIgKnRvX2NvcHksIGludCAqbmV3X2xlbik7CisKIC8qCiAgKiBNYWtlIHN1 cmUgd2UgaGF2ZSBhbGwgdGhlIGJpdHMgSSdtIHVzaW5nIGZvciBtZW1vcnkg bWFwcGluZywgb3RoZXJ3aXNlCiAgKiBJIGRvbid0IGtub3cgd2hhdCBJJ20g ZG9pbmcuCkBAIC00MSw4ICs1MywzNCBAQAogCiBzdGF0aWMgY2hhciAqYmFj a3R5cGUgPSAiZGIvZ2RibSI7CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ3N1 X3NjYWxhciBnZGJtX2dzdSA9Ci17IGdkYm1nZXRmbiwgZ2RibXNldGZuLCBn ZGJtdW5zZXRmbiB9OworLyoKKyAqIExvbmdlciBHU1Ugc3RydWN0dXJlLCB0 byBjYXJyeSBHREJNX0ZJTEUgb2Ygb3duaW5nCisgKiBkYXRhYmFzZS4gRXZl cnkgcGFyYW1ldGVyIChoYXNoIHZhbHVlKSByZWNlaXZlcyBHU1UKKyAqIHBv aW50ZXIgYW5kIHRodXMgYWxzbyByZWNlaXZlcyBHREJNX0ZJTEUgLSB0aGlz IHdheQorICogcGFyYW1ldGVycyBjYW4gYWNjZXNzIHByb3BlciBkYXRhYmFz ZS4KKyAqCisgKiBNYWluIEhhc2hUYWJsZSBwYXJhbWV0ZXIgaGFzIHRoZSBz YW1lIGluc3RhbmNlIG9mCisgKiB0aGUgY3VzdG9tIEdTVSBzdHJ1Y3QgaW4g dS5oYXNoLT50bXBkYXRhIGZpZWxkLgorICogV2hlbiBkYXRhYmFzZSBpcyBj bG9zZWQsIGBkYmZgIGZpZWxkIGlzIHNldCB0byBOVUxMCisgKiBhbmQgaGFz aCB2YWx1ZXMga25vdyB0byBub3QgYWNjZXNzIGRhdGFiYXNlIHdoZW4KKyAq IGJlaW5nIHVuc2V0ICh0b3RhbCBwdXJnZSBhdCB6dW50aWUpLgorICoKKyAq IFdoZW4gZGF0YWJhc2UgY2xvc2luZyBpcyBlbmRlZCwgY3VzdG9tIEdTVSBz dHJ1Y3QKKyAqIGlzIGZyZWVkLiBPbmx5IG5ldyB6dGllIGNyZWF0ZXMgbmV3 IGN1c3RvbSBHU1UKKyAqIHN0cnVjdCBpbnN0YW5jZS4KKyAqLworCitzdHJ1 Y3QgZ3N1X3NjYWxhcl9leHQgeworICAgIHN0cnVjdCBnc3Vfc2NhbGFyIHN0 ZDsKKyAgICBHREJNX0ZJTEUgZGJmOworICAgIGNoYXIgKmRiZmlsZV9wYXRo OworfTsKKworLyogU291cmNlIHN0cnVjdHVyZSAtIHdpbGwgYmUgY29waWVk IHRvIGFsbG9jYXRlZCBvbmUsCisgKiB3aXRoIGBkYmZgIGZpbGxlZC4gYGRi ZmAgYWxsb2NhdGlvbiA8LT4gZ3N1IGFsbG9jYXRpb24uICovCitzdGF0aWMg Y29uc3Qgc3RydWN0IGdzdV9zY2FsYXJfZXh0IGdkYm1fZ3N1X2V4dCA9Cit7 IHsgZ2RibWdldGZuLCBnZGJtc2V0Zm4sIGdkYm11bnNldGZuIH0sIDAsIDAg fTsKKwogLyoqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBnc3VfaGFzaCBnZGJt X2hhc2hfZ3N1ID0KIHsgaGFzaGdldGZuLCBnZGJtaGFzaHNldGZuLCBnZGJt aGFzaHVuc2V0Zm4gfTsKQEAgLTUwLDYgKzg4LDE3IEBAIHN0YXRpYyBjb25z dCBzdHJ1Y3QgZ3N1X2hhc2ggZ2RibV9oYXNoX2dzdSA9CiBzdGF0aWMgc3Ry dWN0IGJ1aWx0aW4gYmludGFiW10gPSB7CiAgICAgQlVJTFRJTigienRpZSIs IDAsIGJpbl96dGllLCAxLCAtMSwgMCwgImQ6ZjpyIiwgTlVMTCksCiAgICAg QlVJTFRJTigienVudGllIiwgMCwgYmluX3p1bnRpZSwgMSwgLTEsIDAsICJ1 IiwgTlVMTCksCisgICAgQlVJTFRJTigiemdkYm1wYXRoIiwgMCwgYmluX3pn ZGJtcGF0aCwgMSwgLTEsIDAsICIiLCBOVUxMKSwKK307CisKKyNkZWZpbmUg Uk9BUlJQQVJBTURFRihuYW1lLCB2YXIpIFwKKyAgICB7IG5hbWUsIFBNX0FS UkFZIHwgUE1fUkVBRE9OTFksICh2b2lkICopIHZhciwgTlVMTCwgIE5VTEws IE5VTEwsIE5VTEwgfQorCisvKiBIb2xkcyBuYW1lcyBvZiBhbGwgdGllZCBw YXJhbWV0ZXJzICovCitjaGFyICoqemdkYm1fdGllZDsKKworc3RhdGljIHN0 cnVjdCBwYXJhbWRlZiBwYXRhYltdID0geworICAgIFJPQVJSUEFSQU1ERUYo ICJ6Z2RibV90aWVkIiwgJnpnZGJtX3RpZWQgKSwKIH07CiAKIC8qKi8KQEAg LTc3LDggKzEyNiw3IEBAIGJpbl96dGllKGNoYXIgKm5hbSwgY2hhciAqKmFy Z3MsIE9wdGlvbnMgb3BzLCBVTlVTRUQoaW50IGZ1bmMpKQogICAgIH0KIAog ICAgIC8qIEhlcmUgc2hvdWxkIGJlIGEgbG9va3VwIG9mIHRoZSBiYWNrZW5k IHR5cGUgYWdhaW5zdAotICAgICAqIGEgcmVnaXN0cnkuCi0gICAgICovCisg ICAgICogYSByZWdpc3RyeSwgaWYgZ2VuZXJhbSBEQiBtZWNoYW5pc20gaXMg dG8gYmUgYWRkZWQgKi8KICAgICBpZiAoc3RyY21wKE9QVF9BUkcob3BzLCAn ZCcpLCBiYWNrdHlwZSkgIT0gMCkgewogICAgICAgICB6d2Fybm5hbShuYW0s ICJ1bnN1cHBvcnRlZCBiYWNrZW5kIHR5cGUgYCVzJyIsIE9QVF9BUkcob3Bz LCAnZCcpKTsKIAlyZXR1cm4gMTsKQEAgLTkyLDcgKzE0MCw4IEBAIGJpbl96 dGllKGNoYXIgKm5hbSwgY2hhciAqKmFyZ3MsIE9wdGlvbnMgb3BzLCBVTlVT RUQoaW50IGZ1bmMpKQogCS8qCiAJICogVW5zZXQgYW55IGV4aXN0aW5nIHBh cmFtZXRlci4gIE5vdGUgdGhlcmUncyBubyBpbXBsaWNpdAogCSAqICJsb2Nh bCIgaGVyZSwgYnV0IGlmIHRoZSBleGlzdGluZyBwYXJhbWV0ZXIgaXMgbG9j YWwKLQkgKiB0aGF0IHdpbGwgYmUgcmVmbGVjdGVkIGluIHRoZSBuZXcgb25l LgorCSAqIHRoZW4gbmV3IHBhcmFtZXRlciB3aWxsIGJlIGFsc28gbG9jYWwg d2l0aG91dCBmb2xsb3dpbmcKKyAgICAgICAgICogdW5zZXQuCiAJICoKIAkg KiBXZSBuZWVkIHRvIGRvIHRoaXMgYmVmb3JlIGF0dGVtcHRpbmcgdG8gb3Bl biB0aGUgREIKIAkgKiBpbiBjYXNlIHRoaXMgdmFyaWFibGUgaXMgYWxyZWFk eSB0aWVkIHRvIGEgREIuCkBAIC0xMDYsMTUgKzE1NSwxNSBAQCBiaW5fenRp ZShjaGFyICpuYW0sIGNoYXIgKiphcmdzLCBPcHRpb25zIG9wcywgVU5VU0VE KGludCBmdW5jKSkKICAgICB9CiAKICAgICBkYmYgPSBnZGJtX29wZW4ocmVz b3VyY2VfbmFtZSwgMCwgcmVhZF93cml0ZSwgMDY2NiwgMCk7Ci0gICAgaWYo ZGJmKQotCWFkZG1vZHVsZWZkKGdkYm1fZmRlc2MoZGJmKSwgRkRUX0lOVEVS TkFMKTsKLSAgICBlbHNlIHsKKyAgICBpZihkYmYpIHsKKwlhZGRtb2R1bGVm ZChnZGJtX2ZkZXNjKGRiZiksIEZEVF9NT0RVTEUpOworICAgICAgICBhcHBl bmRfdGllZF9uYW1lKHBtbmFtZSk7CisgICAgfSBlbHNlIHsKIAl6d2Fybm5h bShuYW0sICJlcnJvciBvcGVuaW5nIGRhdGFiYXNlIGZpbGUgJXMiLCByZXNv dXJjZV9uYW1lKTsKIAlyZXR1cm4gMTsKICAgICB9CiAKLSAgICBpZiAoISh0 aWVkX3BhcmFtID0gY3JlYXRlc3BlY2lhbGhhc2gocG1uYW1lLCAmZ2V0Z2Ri bW5vZGUsICZzY2FuZ2RibWtleXMsCi0JCQkJCSBwbWZsYWdzKSkpIHsKKyAg ICBpZiAoISh0aWVkX3BhcmFtID0gY3JlYXRlaGFzaChwbW5hbWUsIHBtZmxh Z3MpKSkgewogICAgICAgICB6d2Fybm5hbShuYW0sICJjYW5ub3QgY3JlYXRl IHRoZSByZXF1ZXN0ZWQgcGFyYW1ldGVyICVzIiwgcG1uYW1lKTsKIAlmZHRh YmxlW2dkYm1fZmRlc2MoZGJmKV0gPSBGRFRfVU5VU0VEOwogCWdkYm1fY2xv c2UoZGJmKTsKQEAgLTEyMiw4ICsxNzEsMjMgQEAgYmluX3p0aWUoY2hhciAq bmFtLCBjaGFyICoqYXJncywgT3B0aW9ucyBvcHMsIFVOVVNFRChpbnQgZnVu YykpCiAgICAgfQogCiAgICAgdGllZF9wYXJhbS0+Z3N1LmggPSAmZ2RibV9o YXNoX2dzdTsKLSAgICB0aWVkX3BhcmFtLT51Lmhhc2gtPnRtcGRhdGEgPSAo dm9pZCAqKWRiZjsKIAorICAgIC8qIEFsbG9jYXRlIHBhcmFtZXRlciBzdWIt Z3N1LCBmaWxsIGRiZiBmaWVsZC4gCisgICAgICogZGJmIGFsbG9jYXRpb24g aXMgMSB0byAxIGFjY29tcGFuaWVkIGJ5CisgICAgICogZ3N1X3NjYWxhcl9l eHQgYWxsb2NhdGlvbi4gKi8KKworICAgIHN0cnVjdCBnc3Vfc2NhbGFyX2V4 dCAqZGJmX2NhcnJpZXIgPSAoc3RydWN0IGdzdV9zY2FsYXJfZXh0ICopIHph bGxvYyhzaXplb2Yoc3RydWN0IGdzdV9zY2FsYXJfZXh0KSk7CisgICAgZGJm X2NhcnJpZXItPnN0ZCA9IGdkYm1fZ3N1X2V4dC5zdGQ7CisgICAgZGJmX2Nh cnJpZXItPmRiZiA9IGRiZjsKKyAgICB0aWVkX3BhcmFtLT51Lmhhc2gtPnRt cGRhdGEgPSAodm9pZCAqKWRiZl9jYXJyaWVyOworCisgICAgLyogRmlsbCBh bHNvIGZpbGUgcGF0aCBmaWVsZCAqLworICAgIGlmICgqcmVzb3VyY2VfbmFt ZSAhPSAnLycpIHsKKyAgICAgICAgLyogQ29kZSBjb3BpZWQgZnJvbSBjaGVj a19hdXRvbG9hZCgpICovCisgICAgICAgIHJlc291cmNlX25hbWUgPSB6aHRy aWNhdChtZXRhZnkoemdldGN3ZCgpLCAtMSwgTUVUQV9IRUFQRFVQKSwgIi8i LCByZXNvdXJjZV9uYW1lKTsKKyAgICAgICAgcmVzb3VyY2VfbmFtZSA9IHhz eW1saW5rKHJlc291cmNlX25hbWUsIDEpOworICAgIH0KKyAgICBkYmZfY2Fy cmllci0+ZGJmaWxlX3BhdGggPSB6dHJkdXAocmVzb3VyY2VfbmFtZSk7CiAg ICAgcmV0dXJuIDA7CiB9CiAKQEAgLTE2Miw2ICsyMjYsNTMgQEAgYmluX3p1 bnRpZShjaGFyICpuYW0sIGNoYXIgKiphcmdzLCBPcHRpb25zIG9wcywgVU5V U0VEKGludCBmdW5jKSkKIH0KIAogLyoqLworc3RhdGljIGludAorYmluX3pn ZGJtcGF0aChjaGFyICpuYW0sIGNoYXIgKiphcmdzLCBPcHRpb25zIG9wcywg VU5VU0VEKGludCBmdW5jKSkKK3sKKyAgICBQYXJhbSBwbTsKKyAgICBjaGFy ICpwbW5hbWU7CisKKyAgICBwbW5hbWUgPSAqYXJnczsKKworICAgIGlmICgh cG1uYW1lKSB7CisgICAgICAgIHp3YXJubmFtKG5hbSwgInBhcmFtZXRlciBu YW1lICh3aG9zZSBwYXRoIGlzIHRvIGJlIHdyaXR0ZW4gdG8gJFJFUExZKSBp cyByZXF1aXJlZCIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAg ICBwbSA9IChQYXJhbSkgcGFyYW10YWItPmdldG5vZGUocGFyYW10YWIsIHBt bmFtZSk7CisgICAgaWYoIXBtKSB7CisgICAgICAgIHp3YXJubmFtKG5hbSwg Im5vIHN1Y2ggcGFyYW1ldGVyOiAlcyIsIHBtbmFtZSk7CisgICAgICAgIHJl dHVybiAxOworICAgIH0KKworICAgIGlmIChwbS0+Z3N1LmggIT0gJmdkYm1f aGFzaF9nc3UpIHsKKyAgICAgICAgendhcm5uYW0obmFtLCAibm90IGEgdGll ZCBnZGJtIHBhcmFtZXRlcjogJXMiLCBwbW5hbWUpOworICAgICAgICByZXR1 cm4gMTsKKyAgICB9CisKKyAgICAvKiBQYXJhbm9pYSwgaXQgKndpbGwqIGJl IGFsd2F5cyBzZXQgKi8KKyAgICBpZiAoKChzdHJ1Y3QgZ3N1X3NjYWxhcl9l eHQgKilwbS0+dS5oYXNoLT50bXBkYXRhKS0+ZGJmaWxlX3BhdGgpIHsKKyAg ICAgICAgc2V0c3BhcmFtKCJSRVBMWSIsIHp0cmR1cCgoKHN0cnVjdCBnc3Vf c2NhbGFyX2V4dCAqKXBtLT51Lmhhc2gtPnRtcGRhdGEpLT5kYmZpbGVfcGF0 aCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHNldHNwYXJhbSgiUkVQTFki LCB6dHJkdXAoIiIpKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwor LyoKKyAqIFRoZSBwYXJhbSBpcyBhY3R1YWwgcGFyYW0gaW4gaGFzaCDigJPC oGFsd2F5cywgYmVjYXVzZQorICogZ2V0Z2RibW5vZGUgY3JlYXRlcyBldmVy eSBuZXcga2V5IHNlZW4uIEhvd2V2ZXIsIGl0CisgKiBtaWdodCBiZSBub3Qg UE1fVVBUT0RBVEUgLSB3aGljaCBtZWFucyB0aGF0IGRhdGFiYXNlCisgKiB3 YXNuJ3QgeWV0IHF1ZXJpZWQuCisgKgorICogSXQgd2lsbCBiZSBsZWZ0IGlu IHRoaXMgc3RhdGUgaWYgZGF0YWJhc2UgZG9lc24ndAorICogY29udGFpbiBz dWNoIGtleS4gVGhhdCBtaWdodCBiZSBhIGRyYXdiYWNrLCBtYXliZQorICog c2V0dGluZyB0byBlbXB0eSB2YWx1ZSBoYXMgc2Vuc2UsIGFzIG5vIG90aGVy IHdyaXRlcgorICogY2FuIGV4aXN0LiBUaGlzIHdvdWxkIHJlbW92ZSBzdWJ0 bGUgaGNhbGxvYygxKSBsZWFrLgorICovCisKKy8qKi8KIHN0YXRpYyBjaGFy ICoKIGdkYm1nZXRmbihQYXJhbSBwbSkKIHsKQEAgLTE2OSwxOCArMjgwLDU2 IEBAIGdkYm1nZXRmbihQYXJhbSBwbSkKICAgICBpbnQgcmV0OwogICAgIEdE Qk1fRklMRSBkYmY7CiAKLSAgICBrZXkuZHB0ciA9IHBtLT5ub2RlLm5hbTsK LSAgICBrZXkuZHNpemUgPSBzdHJsZW4oa2V5LmRwdHIpOworICAgIC8qIEtl eSBhbHJlYWR5IHJldHJpZXZlZD8gVGhlcmUgaXMgbm8gc2Vuc2Ugb2YgYXNr aW5nIHRoZQorICAgICAqIGRhdGFiYXNlIGFnYWluLCBiZWNhdXNlOgorICAg ICAqIC0gdGhlcmUgY2FuIGJlIG9ubHkgbXVsdGlwbGUgcmVhZGVycworICAg ICAqIC0gc28sIG5vIHdyaXRlciArIHJlYWRlciB1c2UgaXMgYWxsb3dlZAor ICAgICAqCisgICAgICogVGh1czoKKyAgICAgKiAtIGlmIHdlIGFyZSB3cml0 ZXJzLCB3ZSBmb3Igc3VyZSBoYXZlIG5ld2VzdCBjb3B5IG9mIGRhdGEKKyAg ICAgKiAtIGlmIHdlIGFyZSByZWFkZXJzLCB3ZSBmb3Igc3VyZSBoYXZlIG5l d2VzdCBjb3B5IG9mIGRhdGEKKyAgICAgKi8KKyAgICBpZiAoIHBtLT5ub2Rl LmZsYWdzICYgUE1fVVBUT0RBVEUgKSB7CisgICAgICAgIHJldHVybiBwbS0+ dS5zdHIgPyBwbS0+dS5zdHIgOiAoY2hhciAqKSBoY2FsbG9jKDEpOworICAg IH0KKworICAgIC8qIFVubWV0YWZ5IGtleS4gR0RCTSBmaXRzIG5pY2UgaW50 byB0aGlzCisgICAgICogcHJvY2VzcywgYXMgaXQgdXNlcyBsZW5ndGggb2Yg ZGF0YSAqLworICAgIGludCB1bWxlbiA9IDA7CisgICAgY2hhciAqdW1rZXkg PSB1bm1ldGFmeV96YWxsb2MocG0tPm5vZGUubmFtLCZ1bWxlbik7CisKKyAg ICBrZXkuZHB0ciA9IHVta2V5OworICAgIGtleS5kc2l6ZSA9IHVtbGVuOwor CisgICAgZGJmID0gKChzdHJ1Y3QgZ3N1X3NjYWxhcl9leHQgKilwbS0+Z3N1 LnMpLT5kYmY7CisKKyAgICBpZigocmV0ID0gZ2RibV9leGlzdHMoZGJmLCBr ZXkpKSkgeworICAgICAgICAvKiBXZSBoYXZlIGRhdGEg4oCTIHN0b3JlIGl0 LCByZXR1cm4gaXQgKi8KKyAgICAgICAgcG0tPm5vZGUuZmxhZ3MgfD0gUE1f VVBUT0RBVEU7CiAKLSAgICBkYmYgPSAoR0RCTV9GSUxFKShwbS0+dS5oYXNo LT50bXBkYXRhKTsKLSAgICByZXQgPSBnZGJtX2V4aXN0cyhkYmYsIGtleSk7 Ci0gICAgaWYocmV0KSB7CiAgICAgICAgIGNvbnRlbnQgPSBnZGJtX2ZldGNo KGRiZiwga2V5KTsKLSAgICB9IGVsc2UgewotICAgICAgICBjb250ZW50LmRw dHIgPSBkdXBzdHJpbmcoIiIpOworCisgICAgICAgIC8qIEVuc3VyZSB0aGVy ZSdzIG5vIGxlYWsgKi8KKyAgICAgICAgaWYgKHBtLT51LnN0cikgeworICAg ICAgICAgICAgenNmcmVlKHBtLT51LnN0cik7CisgICAgICAgIH0KKworICAg ICAgICAvKiBNZXRhZnkgcmV0dXJuZWQgZGF0YS4gQWxsIGZpdHMgLSBtZXRh ZnkKKyAgICAgICAgICogY2FuIG9idGFpbiBkYXRhIGxlbmd0aCB0byBhdm9p ZCB1c2luZyBcMCAqLworICAgICAgICBwbS0+dS5zdHIgPSBtZXRhZnkoY29u dGVudC5kcHRyLCBjb250ZW50LmRzaXplLCBNRVRBX0RVUCk7CisKKyAgICAg ICAgLyogRnJlZSBrZXksIHJlc3RvcmluZyBpdHMgb3JpZ2luYWwgbGVuZ3Ro ICovCisgICAgICAgIHpzZnJlZSh1bWtleSk7CisKKyAgICAgICAgLyogQ2Fu IHJldHVybiBwb2ludGVyLCBjb3JyZWN0bHkgc2F2ZWQgaW5zaWRlIGhhc2gg Ki8KKyAgICAgICAgcmV0dXJuIHBtLT51LnN0cjsKICAgICB9CiAKLSAgICBy ZXR1cm4gY29udGVudC5kcHRyOworICAgIC8qIEZyZWUga2V5ICovCisgICAg enNmcmVlKHVta2V5KTsKKworICAgIC8qIENhbiB0aGlzIGJlICIiID8gKi8K KyAgICByZXR1cm4gKGNoYXIgKikgaGNhbGxvYygxKTsKIH0KIAogLyoqLwpA QCAtMTkwLDc4ICszMzksMTI2IEBAIGdkYm1zZXRmbihQYXJhbSBwbSwgY2hh ciAqdmFsKQogICAgIGRhdHVtIGtleSwgY29udGVudDsKICAgICBHREJNX0ZJ TEUgZGJmOwogCi0gICAga2V5LmRwdHIgPSBwbS0+bm9kZS5uYW07Ci0gICAg a2V5LmRzaXplID0gc3RybGVuKGtleS5kcHRyKTsKLSAgICBjb250ZW50LmRw dHIgPSB2YWw7Ci0gICAgY29udGVudC5kc2l6ZSA9IHN0cmxlbihjb250ZW50 LmRwdHIpOworICAgIC8qIFNldCBpcyBkb25lIG9uIHBhcmFtZXRlciBhbmQg b24gZGF0YWJhc2UuCisgICAgICogU2VlIHRoZSBhbGxvd2VkIHdvcmtlcnMg LyByZWFkZXJzIGNvbW1lbnQKKyAgICAgKiBhdCBnZGJtZ2V0Zm4oKSAqLwor CisgICAgLyogUGFyYW1ldGVyICovCisgICAgaWYgKHBtLT51LnN0cikgewor ICAgICAgICB6c2ZyZWUocG0tPnUuc3RyKTsKKyAgICAgICAgcG0tPnUuc3Ry ID0gTlVMTDsKKyAgICAgICAgcG0tPm5vZGUuZmxhZ3MgJj0gfihQTV9VUFRP REFURSk7CisgICAgfQorCisgICAgaWYgKHZhbCkgeworICAgICAgICBwbS0+ dS5zdHIgPSB6dHJkdXAodmFsKTsKKyAgICAgICAgcG0tPm5vZGUuZmxhZ3Mg fD0gUE1fVVBUT0RBVEU7CisgICAgfQorCisgICAgLyogRGF0YWJhc2UgKi8K KyAgICBkYmYgPSAoKHN0cnVjdCBnc3Vfc2NhbGFyX2V4dCAqKXBtLT5nc3Uu cyktPmRiZjsKKyAgICBpZiAoZGJmKSB7CisgICAgICAgIGludCB1bWxlbiA9 IDA7CisgICAgICAgIGNoYXIgKnVta2V5ID0gdW5tZXRhZnlfemFsbG9jKHBt LT5ub2RlLm5hbSwmdW1sZW4pOwogCi0gICAgZGJmID0gKEdEQk1fRklMRSko cG0tPnUuaGFzaC0+dG1wZGF0YSk7Ci0gICAgKHZvaWQpZ2RibV9zdG9yZShk YmYsIGtleSwgY29udGVudCwgR0RCTV9SRVBMQUNFKTsKKyAgICAgICAga2V5 LmRwdHIgPSB1bWtleTsKKyAgICAgICAga2V5LmRzaXplID0gdW1sZW47CisK KyAgICAgICAgaWYgKHZhbCkgeworICAgICAgICAgICAgLyogVW5tZXRhZnkg d2l0aCBleGFjdCB6YWxsb2Mgc2l6ZSAqLworICAgICAgICAgICAgY2hhciAq dW12YWwgPSB1bm1ldGFmeV96YWxsb2ModmFsLCZ1bWxlbik7CisKKyAgICAg ICAgICAgIC8qIFN0b3JlICovCisgICAgICAgICAgICBjb250ZW50LmRwdHIg PSB1bXZhbDsKKyAgICAgICAgICAgIGNvbnRlbnQuZHNpemUgPSB1bWxlbjsK KyAgICAgICAgICAgICh2b2lkKWdkYm1fc3RvcmUoZGJmLCBrZXksIGNvbnRl bnQsIEdEQk1fUkVQTEFDRSk7CisKKyAgICAgICAgICAgIC8qIEZyZWUgKi8K KyAgICAgICAgICAgIHpzZnJlZSh1bXZhbCk7CisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAodm9pZClnZGJtX2RlbGV0ZShkYmYsIGtleSk7Cisg ICAgICAgIH0KKworICAgICAgICAvKiBGcmVlIGtleSAqLworICAgICAgICB6 c2ZyZWUodW1rZXkpOworICAgIH0KIH0KIAogLyoqLwogc3RhdGljIHZvaWQK IGdkYm11bnNldGZuKFBhcmFtIHBtLCBVTlVTRUQoaW50IHVtKSkKIHsKLSAg ICBkYXR1bSBrZXk7Ci0gICAgR0RCTV9GSUxFIGRiZjsKLQotICAgIGtleS5k cHRyID0gcG0tPm5vZGUubmFtOwotICAgIGtleS5kc2l6ZSA9IHN0cmxlbihr ZXkuZHB0cik7Ci0KLSAgICBkYmYgPSAoR0RCTV9GSUxFKShwbS0+dS5oYXNo LT50bXBkYXRhKTsKLSAgICAodm9pZClnZGJtX2RlbGV0ZShkYmYsIGtleSk7 CisgICAgLyogU2V0IHdpdGggTlVMTCAqLworICAgIGdkYm1zZXRmbihwbSwg TlVMTCk7CiB9CiAKIC8qKi8KIHN0YXRpYyBIYXNoTm9kZQogZ2V0Z2RibW5v ZGUoSGFzaFRhYmxlIGh0LCBjb25zdCBjaGFyICpuYW1lKQogewotICAgIGlu dCBsZW47Ci0gICAgY2hhciAqbmFtZXU7Ci0gICAgUGFyYW0gcG0gPSBOVUxM OwotCi0gICAgbmFtZXUgPSBkdXBzdHJpbmcobmFtZSk7Ci0gICAgdW5tZXRh ZnkobmFtZXUsICZsZW4pOwotCi0gICAgcG0gPSAoUGFyYW0pIGhjYWxsb2Mo c2l6ZW9mKHN0cnVjdCBwYXJhbSkpOwotICAgIHBtLT5ub2RlLm5hbSA9IG5h bWV1OwotICAgIHBtLT5ub2RlLmZsYWdzID0gUE1fU0NBTEFSOwotICAgIHBt LT5nc3UucyA9ICZnZGJtX2dzdTsKLSAgICBwbS0+dS5oYXNoID0gaHQ7Cisg ICAgSGFzaE5vZGUgaG4gPSBnZXRoYXNobm9kZTIoIGh0LCBuYW1lICk7Cisg ICAgUGFyYW0gdmFsX3BtID0gKFBhcmFtKSBobjsKKworICAgIC8qIEVudHJ5 IGZvciBrZXkgZG9lc24ndCBleGlzdD8gQ3JlYXRlIGl0IG5vdywKKyAgICAg KiBpdCB3aWxsIGJlIGludGVyZmFjaW5nIGJldHdlZW4gdGhlIGRhdGFiYXNl CisgICAgICogYW5kIFpzaCAtIHRocm91Z2ggc3BlY2lhbCBnZGJtX2dzdS4g U28sIGFueQorICAgICAqIHNlZW4ga2V5IHJlc3VsdHMgaW4gbmV3IGludGVy ZmFjaW5nIHBhcmFtZXRlci4KKyAgICAgKgorICAgICAqIFByZXZpb3VzIGNv ZGUgd2FzIHJldHVybmluZyBoZWFwIGFyZW5hIFBhcmFtCisgICAgICogdGhh dCB3YXNuJ3QgYWN0dWFsbHkgYWRkZWQgdG8gdGhlIGhhc2guIEl0IHdhcwor ICAgICAqIHBsYWlubHkgbmFtZSAvIGRhdGFiYXNlLWtleSBob2xkZXIuIEhl cmUgd2UKKyAgICAgKiBhZGQgdGhlIFBhcmFtIHRvIGl0cyBoYXNoLCBpdCBp cyBub3QgUE1fVVBUT0RBVEUuCisgICAgICogSXQgd2lsbCBiZSBsb2FkZWQg ZnJvbSBkYXRhYmFzZSAqYW5kIGZpbGxlZCoKKyAgICAgKiBvciBsZWZ0IGlu IHRoYXQgc3RhdGUgaWYgdGhlIGRhdGFiYXNlIGRvZXNuJ3QKKyAgICAgKiBj b250YWluIGl0LgorICAgICAqCisgICAgICogTm8gaGVhcCBhcmVuYSBtZW1v cnkgaXMgdXNlZCwgbWVtb3J5IHVzYWdlIGlzCisgICAgICogbm93IGxpbWl0 ZWQgLSBieSBudW1iZXIgb2YgZGlzdGluY3Qga2V5cyBzZWVuLAorICAgICAq IG5vdCBieSBudW1iZXIgb2Yga2V5ICp1c2VzKi4KKyAgICAgKiAqLworCisg ICAgaWYgKCAhIHZhbF9wbSApIHsKKyAgICAgICAgdmFsX3BtID0gKFBhcmFt KSB6c2hjYWxsb2MoIHNpemVvZiAoKnZhbF9wbSkgKTsKKyAgICAgICAgdmFs X3BtLT5ub2RlLmZsYWdzID0gUE1fU0NBTEFSIHwgUE1fSEFTSEVMRU07IC8q IG5vIFBNX1VQVE9EQVRFICovCisgICAgICAgIHZhbF9wbS0+Z3N1LnMgPSAo R3N1U2NhbGFyKSBodC0+dG1wZGF0YTsKKyAgICAgICAgaHQtPmFkZG5vZGUo IGh0LCB6dHJkdXAoIG5hbWUgKSwgdmFsX3BtICk7IC8vIHNldHMgcG0tPm5v ZGUubmFtCisgICAgfQogCi0gICAgcmV0dXJuICZwbS0+bm9kZTsKKyAgICBy ZXR1cm4gKEhhc2hOb2RlKSB2YWxfcG07CiB9CiAKIC8qKi8KIHN0YXRpYyB2 b2lkCiBzY2FuZ2RibWtleXMoSGFzaFRhYmxlIGh0LCBTY2FuRnVuYyBmdW5j LCBpbnQgZmxhZ3MpCiB7Ci0gICAgUGFyYW0gcG0gPSBOVUxMOwotICAgIGRh dHVtIGtleSwgY29udGVudDsKLSAgICBHREJNX0ZJTEUgZGJmID0gKEdEQk1f RklMRSkoaHQtPnRtcGRhdGEpOwotCi0gICAgcG0gPSAoUGFyYW0pIGhjYWxs b2Moc2l6ZW9mKHN0cnVjdCBwYXJhbSkpOwotCi0gICAgcG0tPm5vZGUuZmxh Z3MgPSBQTV9TQ0FMQVI7Ci0gICAgcG0tPmdzdS5zID0gJm51bGxzZXRzY2Fs YXJfZ3N1OworICAgIGRhdHVtIGtleTsKKyAgICBHREJNX0ZJTEUgZGJmID0g KChzdHJ1Y3QgZ3N1X3NjYWxhcl9leHQgKilodC0+dG1wZGF0YSktPmRiZjsK IAorICAgIC8qIEl0ZXJhdGUga2V5cyBhZGRpbmcgdGhlbSB0byBoYXNoLCBz bworICAgICAqIHdlIGhhdmUgUGFyYW0gdG8gdXNlIGluIGBmdW5jYCAqLwog ICAgIGtleSA9IGdkYm1fZmlyc3RrZXkoZGJmKTsKIAogICAgIHdoaWxlKGtl eS5kcHRyKSB7Ci0JY29udGVudCA9IGdkYm1fZmV0Y2goZGJmLCBrZXkpOwot Ci0JcG0tPm5vZGUubmFtID0ga2V5LmRwdHI7Ci0JcG0tPnUuc3RyID0gY29u dGVudC5kcHRyOwotCXBtLT5nc3UucyA9ICZudWxsc2V0c2NhbGFyX2dzdTsK KyAgICAgICAgLyogVGhpcyByZXR1cm5zIGRhdGFiYXNlLWludGVyZmFjaW5n IFBhcmFtLAorICAgICAgICAgKiBpdCB3aWxsIHJldHVybiB1LnN0ciBvciBm aXJzdCBmZXRjaCBkYXRhCisgICAgICAgICAqIGlmIG5vdCBQTV9VUFRPREFU RSAobmV3bHkgY3JlYXRlZCkgKi8KKyAgICAgICAgY2hhciAqemtleSA9IHp0 cmR1cHBmeChrZXkuZHB0ciwga2V5LmRzaXplKTsKKyAgICAgICAgSGFzaE5v ZGUgaG4gPSBnZXRnZGJtbm9kZShodCwgemtleSk7CisgICAgICAgIHpzZnJl ZSggemtleSApOwogCi0JZnVuYygmcG0tPm5vZGUsIGZsYWdzKTsKKwlmdW5j KGhuLCBmbGFncyk7CiAKKyAgICAgICAgLyogSXRlcmF0ZSAtIG5vIHByb2Js ZW0gYXMgaW50ZXJmYWNpbmcgUGFyYW0KKyAgICAgICAgICogd2lsbCBkbyBh dCBtb3N0IG9ubHkgZmV0Y2hlcywgbm90IHN0b3JlcyAqLwogICAgICAgICBr ZXkgPSBnZGJtX25leHRrZXkoZGJmLCBrZXkpOwogICAgIH0KIAogfQogCisv KgorICogUmVwbGFjZSBkYXRhYmFzZSB3aXRoIG5ldyBoYXNoCisgKi8KKwog LyoqLwogc3RhdGljIHZvaWQKIGdkYm1oYXNoc2V0Zm4oUGFyYW0gcG0sIEhh c2hUYWJsZSBodCkKQEAgLTI3NCw3ICs0NzEsNyBAQCBnZGJtaGFzaHNldGZu KFBhcmFtIHBtLCBIYXNoVGFibGUgaHQpCiAgICAgaWYgKCFwbS0+dS5oYXNo IHx8IHBtLT51Lmhhc2ggPT0gaHQpCiAJcmV0dXJuOwogCi0gICAgaWYgKCEo ZGJmID0gKEdEQk1fRklMRSkocG0tPnUuaGFzaC0+dG1wZGF0YSkpKQorICAg IGlmICghKGRiZiA9ICgoc3RydWN0IGdzdV9zY2FsYXJfZXh0ICopcG0tPnUu aGFzaC0+dG1wZGF0YSktPmRiZikpCiAJcmV0dXJuOwogCiAgICAga2V5ID0g Z2RibV9maXJzdGtleShkYmYpOwpAQCAtMjkyLDYgKzQ4OSw5IEBAIGdkYm1o YXNoc2V0Zm4oUGFyYW0gcG0sIEhhc2hUYWJsZSBodCkKICAgICBpZiAoIWh0 KQogCXJldHVybjsKIAorICAgICAvKiBQdXQgbmV3IHN0cmluZ3MgaW50byBk YXRhYmFzZSwgd2FpdGluZworICAgICAgKiBmb3IgdGhlaXIgaW50ZXJmYWNp bmctUGFyYW1zIHRvIGJlIGNyZWF0ZWQgKi8KKwogICAgIGZvciAoaSA9IDA7 IGkgPCBodC0+aHNpemU7IGkrKykKIAlmb3IgKGhuID0gaHQtPm5vZGVzW2ld OyBobjsgaG4gPSBobi0+bmV4dCkgewogCSAgICBzdHJ1Y3QgdmFsdWUgdjsK QEAgLTMwMSwxNiArNTAxLDI5IEBAIGdkYm1oYXNoc2V0Zm4oUGFyYW0gcG0s IEhhc2hUYWJsZSBodCkKIAkgICAgdi5hcnIgPSBOVUxMOwogCSAgICB2LnBt ID0gKFBhcmFtKSBobjsKIAotCSAgICBrZXkuZHB0ciA9IHYucG0tPm5vZGUu bmFtOwotCSAgICBrZXkuZHNpemUgPSBzdHJsZW4oa2V5LmRwdHIpOworICAg ICAgICAgICAgLyogVW5tZXRhZnkga2V5ICovCisgICAgICAgICAgICBpbnQg dW1sZW4gPSAwOworICAgICAgICAgICAgY2hhciAqdW1rZXkgPSB1bm1ldGFm eV96YWxsb2Modi5wbS0+bm9kZS5uYW0sJnVtbGVuKTsKKworCSAgICBrZXku ZHB0ciA9IHVta2V5OworCSAgICBrZXkuZHNpemUgPSB1bWxlbjsKIAogCSAg ICBxdWV1ZV9zaWduYWxzKCk7CiAKLQkgICAgY29udGVudC5kcHRyID0gZ2V0 c3RydmFsdWUoJnYpOwotCSAgICBjb250ZW50LmRzaXplID0gc3RybGVuKGNv bnRlbnQuZHB0cik7CisgICAgICAgICAgICAvKiBVbm1ldGFmeSAqLworICAg ICAgICAgICAgY2hhciAqdW12YWwgPSB1bm1ldGFmeV96YWxsb2MoZ2V0c3Ry dmFsdWUoJnYpLCZ1bWxlbik7CiAKKyAgICAgICAgICAgIC8qIFN0b3JlICov CisJICAgIGNvbnRlbnQuZHB0ciA9IHVtdmFsOworCSAgICBjb250ZW50LmRz aXplID0gdW1sZW47CiAJICAgICh2b2lkKWdkYm1fc3RvcmUoZGJmLCBrZXks IGNvbnRlbnQsIEdEQk1fUkVQTEFDRSk7CQogCisgICAgICAgICAgICAvKiBG cmVlIC0gdGhhbmtzIHRvIHVubWV0YWZ5X3phbGxvYyBzaXplIG9mCisgICAg ICAgICAgICAgKiB0aGUgc3RyaW5ncyBpcyBleGFjdCB6YWxsb2Mgc2l6ZSAt IGNhbgorICAgICAgICAgICAgICogcGFzcyB0byB6c2ZyZWUgKi8KKyAgICAg ICAgICAgIHpzZnJlZSh1bXZhbCk7CisgICAgICAgICAgICB6c2ZyZWUodW1r ZXkpOworCiAJICAgIHVucXVldWVfc2lnbmFscygpOwogCX0KIH0KQEAgLTMx OSwxNSArNTMyLDE5IEBAIGdkYm1oYXNoc2V0Zm4oUGFyYW0gcG0sIEhhc2hU YWJsZSBodCkKIHN0YXRpYyB2b2lkCiBnZGJtdW50aWUoUGFyYW0gcG0pCiB7 Ci0gICAgR0RCTV9GSUxFIGRiZiA9IChHREJNX0ZJTEUpKHBtLT51Lmhhc2gt PnRtcGRhdGEpOworICAgIEdEQk1fRklMRSBkYmYgPSAoKHN0cnVjdCBnc3Vf c2NhbGFyX2V4dCAqKXBtLT51Lmhhc2gtPnRtcGRhdGEpLT5kYmY7CiAgICAg SGFzaFRhYmxlIGh0ID0gcG0tPnUuaGFzaDsKIAogICAgIGlmIChkYmYpIHsg LyogcGFyYW5vaWEgKi8KIAlmZHRhYmxlW2dkYm1fZmRlc2MoZGJmKV0gPSBG RFRfVU5VU0VEOwotCWdkYm1fY2xvc2UoZGJmKTsKLSAgICB9CisgICAgICAg IGdkYm1fY2xvc2UoZGJmKTsKIAotICAgIGh0LT50bXBkYXRhID0gTlVMTDsK KyAgICAgICAgLyogTGV0IGhhc2ggZmllbGRzIGtub3cgdGhlcmUncyBubyBi YWNrZW5kICovCisgICAgICAgICgoc3RydWN0IGdzdV9zY2FsYXJfZXh0ICop aHQtPnRtcGRhdGEpLT5kYmYgPSBOVUxMOworCisgICAgICAgIC8qIFJlbW92 ZSBmcm9tIGxpc3Qgb2YgdGllZCBwYXJhbWV0ZXJzICovCisgICAgICAgIHJl bW92ZV90aWVkX25hbWUocG0tPm5vZGUubmFtKTsKKyAgICB9CiAKICAgICAv KiBmb3IgY29tcGxldGVuZXNzIC4uLiBjcmVhdGVzcGVjaWFsaGFzaCgpIHNo b3VsZCBoYXZlIGFuIGludmVyc2UgKi8KICAgICBodC0+Z2V0bm9kZSA9IGh0 LT5nZXRub2RlMiA9IGdldGhhc2hub2RlMjsKQEAgLTM0Miw4ICs1NTksMjAg QEAgc3RhdGljIHZvaWQKIGdkYm1oYXNodW5zZXRmbihQYXJhbSBwbSwgVU5V U0VEKGludCBleHApKQogewogICAgIGdkYm11bnRpZShwbSk7Ci0gICAgLyog aGFzaCB0YWJsZSBpcyBub3cgbm9ybWFsLCBzbyBwcm9jZWVkIG5vcm1hbGx5 Li4uICovCisKKyAgICAvKiBSZW1lbWJlciBjdXN0b20gR1NVIHN0cnVjdHVy ZSBhc3NpZ25lZCB0bworICAgICAqIHUuaGFzaC0+dG1wZGF0YSBiZWZvcmUg aGFzaCBnZXRzIGRlbGV0ZWQgKi8KKyAgICBzdHJ1Y3QgZ3N1X3NjYWxhcl9l eHQgKiBnc3VfZXh0ID0gcG0tPnUuaGFzaC0+dG1wZGF0YTsKKworICAgIC8q IFVzZXMgbm9ybWFsIHVuc2V0dGVyLiBXaWxsIGRlbGV0ZSBhbGwgb3duZWQK KyAgICAgKiBwYXJhbWV0ZXJzIGFuZCBhbHNvIGhhc2h0YWJsZS4gKi8KICAg ICBwbS0+Z3N1LmgtPnNldGZuKHBtLCBOVUxMKTsKKworICAgIC8qIERvbid0 IG5lZWQgY3VzdG9tIEdTVSBzdHJ1Y3R1cmUgd2l0aCBpdHMKKyAgICAgKiBH REJNX0ZJTEUgcG9pbnRlciBhbnltb3JlICovCisgICAgenNmcmVlKCBnc3Vf ZXh0LT5kYmZpbGVfcGF0aCApOworICAgIHpmcmVlKCBnc3VfZXh0LCBzaXpl b2Yoc3RydWN0IGdzdV9zY2FsYXJfZXh0KSk7CisKICAgICBwbS0+bm9kZS5m bGFncyB8PSBQTV9VTlNFVDsKIH0KIApAQCAtMzU1LDcgKzU4NCw3IEBAIHN0 YXRpYyBzdHJ1Y3QgZmVhdHVyZXMgbW9kdWxlX2ZlYXR1cmVzID0gewogICAg IGJpbnRhYiwgc2l6ZW9mKGJpbnRhYikvc2l6ZW9mKCpiaW50YWIpLAogICAg IE5VTEwsIDAsCiAgICAgTlVMTCwgMCwKLSAgICBOVUxMLCAwLAorICAgIHBh dGFiLCBzaXplb2YocGF0YWIpL3NpemVvZigqcGF0YWIpLAogICAgIDAKIH07 CiAKQEAgLTM4NSw2ICs2MTQsNyBAQCBlbmFibGVzXyhNb2R1bGUgbSwgaW50 ICoqZW5hYmxlcykKIGludAogYm9vdF8oVU5VU0VEKE1vZHVsZSBtKSkKIHsK KyAgICB6Z2RibV90aWVkID0genNoY2FsbG9jKCgxKSAqIHNpemVvZihjaGFy ICopKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMzkyLDYgKzYyMiw3IEBA IGJvb3RfKFVOVVNFRChNb2R1bGUgbSkpCiBpbnQKIGNsZWFudXBfKE1vZHVs ZSBtKQogeworICAgIC8qIFRoaXMgZnJlZXMgYHpnZGJtX3RpZWRgICovCiAg ICAgcmV0dXJuIHNldGZlYXR1cmVlbmFibGVzKG0sICZtb2R1bGVfZmVhdHVy ZXMsIE5VTEwpOwogfQogCkBAIC00MDEsMyArNjMyLDEzNyBAQCBmaW5pc2hf KFVOVVNFRChNb2R1bGUgbSkpCiB7CiAgICAgcmV0dXJuIDA7CiB9CisKKy8q KioqKioqKioqKioqKioqKioqKioKKyAqIFV0aWxpdHkgZnVuY3Rpb25zICoK KyAqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBQYXJhbSBjcmVh dGVoYXNoKCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MgKSB7CisgICAgUGFyYW0g cG07CisgICAgSGFzaFRhYmxlIGh0OworCisgICAgcG0gPSBjcmVhdGVwYXJh bShuYW1lLCBQTV9TUEVDSUFMIHwgUE1fSEFTSEVEKTsKKyAgICBpZiAoIXBt KSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChw bS0+b2xkKQorCXBtLT5sZXZlbCA9IGxvY2FsbGV2ZWw7CisKKyAgICAvKiBU aGlzIGNyZWF0ZXMgc3RhbmRhcmQgaGFzaC4gKi8KKyAgICBodCA9IHBtLT51 Lmhhc2ggPSBuZXdwYXJhbXRhYmxlKDMyLCBuYW1lKTsKKyAgICBpZiAoIXBt LT51Lmhhc2gpIHsKKyAgICAgICAgcGFyYW10YWItPnJlbW92ZW5vZGUocGFy YW10YWIsIG5hbWUpOworICAgICAgICBwYXJhbXRhYi0+ZnJlZW5vZGUoJnBt LT5ub2RlKTsKKyAgICAgICAgendhcm5uYW0obmFtZSwgIk91dCBvZiBtZW1v cnkgd2hlbiBhbGxvY2F0aW5nIGhhc2giKTsKKyAgICB9CisKKyAgICAvKiBU aGVzZSBwcm92aWRlIHNwZWNpYWwgZmVhdHVyZXMgKi8KKyAgICBodC0+Z2V0 bm9kZSA9IGh0LT5nZXRub2RlMiA9IGdldGdkYm1ub2RlOworICAgIGh0LT5z Y2FudGFiID0gc2NhbmdkYm1rZXlzOworCisgICAgcmV0dXJuIHBtOworfQor CisvKgorICogQWRkcyBwYXJhbWV0ZXIgbmFtZSB0byBgemdkYm1fdGllZGAK KyAqLworCitzdGF0aWMgaW50IGFwcGVuZF90aWVkX25hbWUoIGNvbnN0IGNo YXIgKm5hbWUgKSB7CisgICAgaW50IG9sZF9sZW4gPSBhcnJsZW4oemdkYm1f dGllZCk7CisgICAgY2hhciAqKm5ld196Z2RibV90aWVkID0genNoY2FsbG9j KCAob2xkX2xlbisyKSAqIHNpemVvZihjaGFyICopKTsKKworICAgIC8qIENv cHkgKi8KKyAgICBjaGFyICoqcCA9IHpnZGJtX3RpZWQ7CisgICAgY2hhciAq KmRzdCA9IG5ld196Z2RibV90aWVkOworICAgIHdoaWxlICgqcCkgeworICAg ICAgICAqZHN0KysgPSAqcCsrOworICAgIH0KKworICAgIC8qIEFwcGVuZCBu ZXcgb25lICovCisgICAgKmRzdCA9IHp0cmR1cChuYW1lKTsKKworICAgIC8q IFN1YnN0aXR1dGUsIGZyZWUgb2xkIG9uZSAqLworICAgIHpmcmVlKHpnZGJt X3RpZWQsIHNpemVvZihjaGFyICopICogKG9sZF9sZW4gKyAxKSk7CisgICAg emdkYm1fdGllZCA9IG5ld196Z2RibV90aWVkOworCisgICAgcmV0dXJuIDA7 Cit9CisKKy8qCisgKiBSZW1vdmVzIHBhcmFtZXRlciBuYW1lIGZyb20gYHpn ZGJtX3RpZWRgCisgKi8KKworc3RhdGljIGludCByZW1vdmVfdGllZF9uYW1l KCBjb25zdCBjaGFyICpuYW1lICkgeworICAgIGludCBvbGRfbGVuID0gYXJy bGVuKHpnZGJtX3RpZWQpOworCisgICAgLyogVHdvIHN0YWdlLCB0byBhbHdh eXMgaGF2ZSBhcnJsZW4oKSA9PSB6ZnJlZS1zaXplIC0gMS4KKyAgICAgKiBD b3VsZCBkbyBhbGxvY2F0aW9uIGFuZCByZXZlcnQgd2hlbiBgbm90IGZvdW5k YCwgYnV0CisgICAgICogd2hhdCB3b3VsZCBiZSBiZXR0ZXIgYWJvdXQgdGhh dC4gKi8KKworICAgIC8qIEZpbmQgb25lIHRvIHJlbW92ZSAqLworICAgIGNo YXIgKipwID0gemdkYm1fdGllZDsKKyAgICB3aGlsZSAoKnApIHsKKyAgICAg ICAgaWYgKDA9PXN0cmNtcChuYW1lLCpwKSkgeworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgIH0KKyAgICAgICAgcCsrOworICAgIH0KKworICAgIC8q IENvcHkgeCsxIHRvIHggKi8KKyAgICB3aGlsZSAoKnApIHsKKyAgICAgICAg KnA9KihwKzEpOworICAgICAgICBwKys7CisgICAgfQorCisgICAgLyogU2Vj b25kIHN0YWdlLiBTaXplIGNoYW5nZWQ/IE9ubHkgb2xkX3NpemUtMQorICAg ICAqIGNoYW5nZSBpcyBwb3NzaWJsZSwgYnV0Li4gcGFyYW5vaWEgd2F5ICov CisgICAgaW50IG5ld19sZW4gPSBhcnJsZW4oemdkYm1fdGllZCk7CisgICAg aWYgKG5ld19sZW4gIT0gb2xkX2xlbikgeworICAgICAgICBjaGFyICoqbmV3 X3pnZGJtX3RpZWQgPSB6c2hjYWxsb2MoKG5ld19sZW4rMSkgKiBzaXplb2Yo Y2hhciAqKSk7CisKKyAgICAgICAgLyogQ29weSAqLworICAgICAgICBwID0g emdkYm1fdGllZDsKKyAgICAgICAgY2hhciAqKmRzdCA9IG5ld196Z2RibV90 aWVkOworICAgICAgICB3aGlsZSAoKnApIHsKKyAgICAgICAgICAgICpkc3Qr KyA9ICpwKys7CisgICAgICAgIH0KKyAgICAgICAgKmRzdCA9IE5VTEw7CisK KyAgICAgICAgLyogU3Vic3RpdHV0ZSwgZnJlZSBvbGQgb25lICovCisgICAg ICAgIHpmcmVlKHpnZGJtX3RpZWQsIHNpemVvZihjaGFyICopICogKG9sZF9s ZW4gKyAxKSk7CisgICAgICAgIHpnZGJtX3RpZWQgPSBuZXdfemdkYm1fdGll ZDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIFVubWV0 YWZ5IHRoYXQ6CisgKiAtIGR1cGxpY2F0ZXMgYnVmZXIgdG8gd29yayBvbiBp dCwKKyAqIC0gZG9lcyB6YWxsb2Mgb2YgZXhhY3Qgc2l6ZSBmb3IgdGhlIG5l dyBzdHJpbmcsCisgKiAtIHJlc3RvcmVzIHdvcmsgYnVmZmVyIHRvIG9yaWdp bmFsIGNvbnRlbnQsIHRvIHJlc3RvcmUgc3RybGVuCisgKgorICogTm8genNm cmVlKCktY29uZnVzaW5nIHN0cmluZyB3aWxsIGJlIHByb2R1Y2VkLgorICov CitjaGFyICp1bm1ldGFmeV96YWxsb2MoY29uc3QgY2hhciAqdG9fY29weSwg aW50ICpuZXdfbGVuKSB7CisgICAgY2hhciAqd29yaywgKnRvX3JldHVybjsK KyAgICBpbnQgbXlfbmV3X2xlbiA9IDA7CisKKyAgICB3b3JrID0genRyZHVw KHRvX2NvcHkpOworICAgIHdvcmsgPSB1bm1ldGFmeSh3b3JrLCZteV9uZXdf bGVuKTsKKworICAgIGlmIChuZXdfbGVuKQorICAgICAgICAqbmV3X2xlbiA9 IG15X25ld19sZW47CisKKyAgICAvKiBUaGlzIHN0cmluZyBjYW4gYmUgY29y cmVjdGx5IHpzZnJlZSgpLWQgKi8KKyAgICB0b19yZXR1cm4gPSAoY2hhciAq KSB6YWxsb2MoKG15X25ld19sZW4rMSkqc2l6ZW9mKGNoYXIpKTsKKyAgICBt ZW1jcHkodG9fcmV0dXJuLCB3b3JrLCBzaXplb2YoY2hhcikqbXlfbmV3X2xl bik7IC8vIG1lbWNweSBoYW5kbGVzICQnXDAnCisgICAgdG9fcmV0dXJuW215 X25ld19sZW5dPSdcMCc7CisKKyAgICAvKiBSZXN0b3JlIG9yaWdpbmFsIHN0 cmxlbiBhbmQgY29ycmVjdGx5IGZyZWUgKi8KKyAgICBzdHJjcHkod29yaywg dG9fY29weSk7CisgICAgenNmcmVlKHdvcmspOworCisgICAgcmV0dXJuIHRv X3JldHVybjsKK30KZGlmZiAtLWdpdCBhL1NyYy9Nb2R1bGVzL2RiX2dkYm0u bWRkIGIvU3JjL01vZHVsZXMvZGJfZ2RibS5tZGQKaW5kZXggY2U3OTI2Yi4u MjEwYzIyMSAxMDA2NDQKLS0tIGEvU3JjL01vZHVsZXMvZGJfZ2RibS5tZGQK KysrIGIvU3JjL01vZHVsZXMvZGJfZ2RibS5tZGQKQEAgLTcsNiArNyw2IEBA IGZpCiAnCiBsb2FkPW5vCiAKLWF1dG9mZWF0dXJlcz0iYjp6dGllIGI6enVu dGllIgorYXV0b2ZlYXR1cmVzPSJiOnp0aWUgYjp6dW50aWUgYjp6Z2RibXBh dGggcDp6Z2RibV90aWVkIgogCiBvYmplY3RzPSJkYl9nZGJtLm8iCmRpZmYg LS1naXQgYS9UZXN0L1YxMWRiX2dkYm0uenRzdCBiL1Rlc3QvVjExZGJfZ2Ri bS56dHN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEx MDc2ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0L1YxMWRiX2dkYm0uenRz dApAQCAtMCwwICsxLDI4NSBAQAorIyBUZXN0cyBmb3IgdGhlIHpzaC9wYXJh bS9wcml2YXRlIG1vZHVsZQorCislcHJlcAorCisgbW9kbmFtZT0ienNoL2Ri L2dkYm0iCisgZGJmaWxlPWRiLmdkYm0KKyBpZiAhIHptb2Rsb2FkICRtb2Ru YW1lIDsgdGhlbgorICAgWlRTVF91bmltcGxlbWVudGVkPSJjYW4ndCBsb2Fk ICRtb2RuYW1lIG1vZHVsZSBmb3IgdGVzdGluZyIKKyBmaQorIHJtIC1mIGRi LmdkYm0KKworJXRlc3QKKworICh6bW9kbG9hZCAtdSAkbW9kbmFtZSAmJiB6 bW9kbG9hZCAkbW9kbmFtZSkKKzA6dW5sb2FkIGFuZCByZWxvYWQgdGhlIG1v ZHVsZSB3aXRob3V0IGNyYXNoaW5nCisKKyB6dGllIC1kIGRiL2dkYm0gLWYg JGRiZmlsZSBkYmFzZQorIHp1bnRpZSBkYmFzZQorMDpjcmVhdGUgdGhlIGRh dGFiYXNlCisKKyB6dGllIC1yIC1kIGRiL2dkYm0gLWYgJGRiZmlsZSBkYmFz ZQorIHp1bnRpZSAtdSBkYmFzZQorMDpvcGVuIHRoZSBkYXRhYmFzZSByZWFk LW9ubHkKKworIHp0aWUgLWQgZGIvZ2RibSAtZiAkZGJmaWxlIGRiYXNlCisg ZGJhc2VbdGVzdGtleV09dGVzdGRhdGEKKyB6dW50aWUgZGJhc2UKKyB6dGll IC1yIC1kIGRiL2dkYm0gLWYgJGRiZmlsZSBkYmFzZQorIGVjaG8gJGRiYXNl W3Rlc3RrZXldCisgenVudGllIC11IGRiYXNlCiswOnN0b3JlIGtleSBpbiBk YXRhYmFzZQorPnRlc3RkYXRhCisKKyB6dGllIC1kIGRiL2dkYm0gLWYgJGRi ZmlsZSBkYmFzZTIKKyB1bnNldCAnZGJhc2UyW3Rlc3RrZXldJworIHp1bnRp ZSBkYmFzZTIKKyB6dGllIC1kIGRiL2dkYm0gLWYgJGRiZmlsZSBkYmFzZQor IGVjaG8gJGRiYXNlW3Rlc3RrZXldCisgenVudGllIGRiYXNlCiswOnJlbW92 ZSBrZXkgZnJvbSBkYXRhYmFzZSAoZGlmZmVyZW50IHZhcmlhYmxlcykKKz4K KworIHp0aWUgLWQgZGIvZ2RibSAtZiAkZGJmaWxlIGRiYXNlCisgZGJhc2Vb dGVzdGtleV09dGVzdGRhdGEKKyB6dW50aWUgZGJhc2UKKyB6dGllIC1yIC1k IGRiL2dkYm0gLWYgJGRiZmlsZSBkYmFzZQorIGVjaG8gJGRiYXNlW3Rlc3Rr ZXldCisgenVudGllIC11IGRiYXNlCisgenRpZSAtZCBkYi9nZGJtIC1mICRk YmZpbGUgZGJhc2UKKyB1bnNldCAnZGJhc2VbdGVzdGtleV0nCisgenVudGll IGRiYXNlCisgenRpZSAtciAtZCBkYi9nZGJtIC1mICRkYmZpbGUgZGJhc2UK KyBlY2hvICRkYmFzZVt0ZXN0a2V5XQorIHp1bnRpZSAtdSBkYmFzZQorMDpz dG9yZSAmIHJlbW92ZSBrZXkgZnJvbSBkYXRhYmFzZSAodGhlIHNhbWUgdmFy aWFibGVzKQorPnRlc3RkYXRhCis+CisKKyB6dGllIC1kIGRiL2dkYm0gLWYg JGRiZmlsZSBkYmFzZQorIGRiYXNlW3Rlc3RrZXldPXRlc3RkYXRhCisgZGJh c2VbdGVzdGtleTJdPSRkYmFzZVt0ZXN0a2V5XQorIGRiYXNlW3Rlc3RrZXkz XT0kZGJhc2VbdGVzdGtleV14JGRiYXNlW3Rlc3RrZXkyXQorIHp1bnRpZSBk YmFzZQorIHp0aWUgLWQgZGIvZ2RibSAtZiAkZGJmaWxlIGRiYXNlCisgZWNo byAkZGJhc2VbdGVzdGtleV0KKyBlY2hvICRkYmFzZVt0ZXN0a2V5Ml0KKyBl Y2hvICRkYmFzZVt0ZXN0a2V5M10KKyB6dW50aWUgZGJhc2UKKzA6c3RvcmUg MiBrZXlzIGZldGNoaW5nIDFzdAorPnRlc3RkYXRhCis+dGVzdGRhdGEKKz50 ZXN0ZGF0YXh0ZXN0ZGF0YQorCisgenRpZSAtZCBkYi9nZGJtIC1mICRkYmZp bGUgZGJhc2UKKyB2YWw9JGRiYXNlW3Rlc3RrZXkyXQorIHVuc2V0ICdkYmFz ZVt0ZXN0a2V5Ml0nCisgZWNobyAkdmFsCisgenVudGllIGRiYXNlCiswOnVu c2V0IGtleSB0aGF0IHdhcyBmZXRjaGVkCis+dGVzdGRhdGEKKworIHp0aWUg LXIgLWQgZGIvZ2RibSAtZiAkZGJmaWxlIGRiYXNlCisgcHJpbnQgLXJsIC0t ICIkeyhrdilkYmFzZVtAXX0iCisgenVudGllIC11IGRiYXNlCiswOnNjYW4g cmVhZC1vbmx5IHRpZWQgaGFzaAorPnRlc3RrZXkKKz50ZXN0ZGF0YQorPnRl c3RrZXkzCis+dGVzdGRhdGF4dGVzdGRhdGEKKworIHp0aWUgLWQgZGIvZ2Ri bSAtZiAkZGJmaWxlIGRiYXNlCisgbG9jYWwgLWEgYXJyCisgYXJyPSggIiR7 KGt2KWRiYXNlW0BdfSIgKQorIHByaW50IC1ybCAtLSAiJHthcnJbQF19Igor IHp1bnRpZSBkYmFzZQorMDpkaWZmZXJlbnQgc2NhbiwgYWxzbyByZWFkLXdy aXRlIG1vZGUKKz50ZXN0a2V5Cis+dGVzdGRhdGEKKz50ZXN0a2V5MworPnRl c3RkYXRheHRlc3RkYXRhCisKKyB6dGllIC1kIGRiL2dkYm0gLWYgJGRiZmls ZSBkYmFzZQorIGRiYXNlPSggYSBiIGMgZCApCisgenVudGllIGRiYXNlCisg enRpZSAtZCBkYi9nZGJtIC1mICRkYmZpbGUgZGJhc2UKKyBwcmludCAtcmwg LS0gIiR7KGt2KWRiYXNlW0BdfSIKKyB6dW50aWUgZGJhc2UKKzA6cmVwbGFj ZSBoYXNoIC8gZGF0YWJhc2UsIHNjYW4KKz5jCis+ZAorPmEKKz5iCisKKyB6 dGllIC1kIGRiL2dkYm0gLWYgJGRiZmlsZSBkYmFzZQorIGxvY2FsIC1hIGFy cgorIGFycj0oICIke2RiYXNlW0BdfSIgKQorIHByaW50IC1ybCAtLSAiJHth cnJbQF19IgorIHp1bnRpZSBkYmFzZQorMDpzY2FuIHdpdGggbm8gKGt2KQor PmQKKz5iCisKKyB6dGllIC1kIGRiL2dkYm0gLWYgJGRiZmlsZSBkYmFzZQor IHByaW50IC1ybCAtLSAiJHsoaylkYmFzZVtAXX0iCisgenVudGllIGRiYXNl CiswOnNjYW4gd2l0aCBrZXlzIG9ubHkgKGspCis+YworPmEKKworIHp0aWUg LWQgZGIvZ2RibSAtZiAkZGJmaWxlIGRiYXNlCisgcHJpbnQgLXJsIC0tICIk eyh2KWRiYXNlW0BdfSIKKyB6dW50aWUgZGJhc2UKKzA6c2NhbiB3aXRoIGtl eXMgb25seSBleHBsaWNpdCAodikKKz5kCis+YgorCisgcm0gLWYgJGRiZmls ZQorIHp0aWUgLXIgLWQgZGIvZ2RibSAtZiAkZGJmaWxlIGRiYXNlIDI+L2Rl di9udWxsCisxOnJlYWQtb25seSBvcGVuIG5vbi1leGlzdGVudCBkYXRhYmFz ZQorCisgenRpZSAtZCBkYi9nZGJtIC1mICRkYmZpbGUgZGJhc2UKKyBkYmFz ZSs9KCBhIGIgKQorIGVjaG8gJGRiYXNlW2FdCisgenVudGllIGRiYXNlCisg enRpZSAtciAtZCBkYi9nZGJtIC1mICRkYmZpbGUgZGJhc2UKKyBlY2hvICRk YmFzZVthXQorIHByaW50IC1ybCAtLSAiJHsoa3YpZGJhc2VbQF19IgorIHp1 bnRpZSAtdSBkYmFzZQorIHp0aWUgLWQgZGIvZ2RibSAtZiAkZGJmaWxlIGRi YXNlCisgZGJhc2UrPSggYyBkICkKKyBlY2hvICRkYmFzZVthXQorIGVjaG8g JGRiYXNlW2NdCisgcHJpbnQgLXJsIC0tICIkeyhrdilkYmFzZVtAXX0iCisg enVudGllIGRiYXNlCisgenRpZSAtciAtZCBkYi9nZGJtIC1mICRkYmZpbGUg ZGJhc2UKKyBlY2hvICRkYmFzZVthXQorIGVjaG8gJGRiYXNlW2NdCisgcHJp bnQgLXJsIC0tICIkeyhrdilkYmFzZVtAXX0iCisgenVudGllIC11IGRiYXNl CiswOkFwcGVuZCB3aXRoICs9KCApLCBhbHNvIHdpdGggZXhpc3RpbmcgZGF0 YSwgYWxzbyAoa3YpIHNjYW4KKz5iCis+YgorPmEKKz5iCis+YgorPmQKKz5j Cis+ZAorPmEKKz5iCis+YgorPmQKKz5jCis+ZAorPmEKKz5iCisKKyB6dGll IC1kIGRiL2dkYm0gLWYgJGRiZmlsZSBkYmFzZQorIGVjaG8gJHsodClkYmFz ZX0KKyB6dW50aWUgZGJhc2UKKzA6VHlwZSBvZiB0aWVkIHBhcmFtZXRlcgor PmFzc29jaWF0aW9uLXNwZWNpYWwKKworIHR5cGVzZXQgLWdhIGRiYXNlCisg enRpZSAtZCBkYi9nZGJtIC1mICRkYmZpbGUgZGJhc2UKKyBlY2hvICR7KHQp ZGJhc2V9CisgenVudGllIGRiYXNlCiswOlR5cGUgb2YgdGllZCBwYXJhbWV0 ZXIsIHdpdGggcHJlY2VkaW5nIHVuc2V0Cis+YXNzb2NpYXRpb24tc3BlY2lh bAorCisgbG9jYWwgLWEgZGJhc2UKKyB6dGllIC1kIGRiL2dkYm0gLWYgJGRi ZmlsZSBkYmFzZQorIGVjaG8gJHsodClkYmFzZX0KKyB6dW50aWUgZGJhc2UK KzA6VHlwZSBvZiB0aWVkIHBhcmFtZXRlciwgd2l0aCBsb2NhbCBwYXJhbWV0 ZXIgYWxyZWFkeSBleGlzdGluZworPmFzc29jaWF0aW9uLWxvY2FsLXNwZWNp YWwKKworIGxvY2FsIC1hIGRiYXNlCisgZGJhc2U9KCBmcm9tYXJyYXkgKQor ICgpIHsKKyAgICAgbG9jYWwgLWEgZGJhc2UKKyAgICAgenRpZSAtZCBkYi9n ZGJtIC1mICRkYmZpbGUgZGJhc2UKKyAgICAgZWNobyAkeyh0KWRiYXNlfQor ICAgICB6dW50aWUgZGJhc2UKKyB9CisgZWNobyAkZGJhc2VbMV0KKyB6dGll IC1kIGRiL2dkYm0gLWYgJGRiZmlsZSBkYmFzZTIKKyBlY2hvICJDYW4gY29u bmVjdCwgc28gdW50aWUgaGFwcGVuZWQ6IiAkZGJhc2UyW2FdCisgenVudGll IGRiYXNlMgorMDpUZXN0IG9mIGF1dG9tYXRpYyB1bnRpZSAodXNlIG9mIGxv Y2FsIHNjb3BlKSBhbmQgb2Ygc2NvcGluZworPmFzc29jaWF0aW9uLWxvY2Fs LXNwZWNpYWwKKz5mcm9tYXJyYXkKKz5DYW4gY29ubmVjdCwgc28gdW50aWUg aGFwcGVuZWQ6IGIKKworIGVjaG8gJHpnZGJtX3RpZWQgJHsjemdkYm1fdGll ZH0KKyB6dGllIC1yIC1kIGRiL2dkYm0gLWYgJGRiZmlsZSBkYmFzZQorIGVj aG8gJHpnZGJtX3RpZWQgJHsjemdkYm1fdGllZH0KKyB6dGllIC1kIGRiL2dk Ym0gLWYgJHtkYmZpbGV9MiBkYmFzZTIKKyBlY2hvICR6Z2RibV90aWVkICR7 I3pnZGJtX3RpZWR9CisgenVudGllIC11IGRiYXNlCisgZWNobyAkemdkYm1f dGllZCAkeyN6Z2RibV90aWVkfQorIHp1bnRpZSBkYmFzZTIKKyBlY2hvICR6 Z2RibV90aWVkICR7I3pnZGJtX3RpZWR9CiswOnpnZGJtX3RpZWQgcGFyYW1l dGVyCis+MAorPmRiYXNlIDEKKz5kYmFzZSBkYmFzZTIgMgorPmRiYXNlMiAx Cis+MAorCisgdW5zZXQgemdkYm1fdGllZCAyPi9kZXYvbnVsbAorMTp1bnNl dCBvZiByZWFkLW9ubHkgemdkYm1fdGllZCBwYXJhbWV0ZXIKKworIHp0aWUg LWQgZGIvZ2RibSAtZiAkZGJmaWxlIGRiYXNlCisgZGJhc2Vb5ryi5a2XXT3m vKLlrZcKKyBlY2hvICRkYmFzZVvmvKLlrZddCisgenVudGllIGRiYXNlCisg enRpZSAtciAtZCBkYi9nZGJtIC1mICRkYmZpbGUgZGJhc2UKKyBlY2hvICRk YmFzZVvmvKLlrZddCisgenVudGllIC11IGRiYXNlCiswOlVuaWNvZGUgdGVz dAorPua8ouWtlworPua8ouWtlworCisga2V5PSJhYiIkJ1wwJyJlZiIKKyB6 dGllIC1kIGRiL2dkYm0gLWYgJGRiZmlsZSBkYmFzZQorIGRiYXNlWyRrZXld PXZhbHVlCisgZWNobyAkZGJhc2VbJGtleV0KKyB6dW50aWUgZGJhc2UKKyB6 dGllIC1yIC1kIGRiL2dkYm0gLWYgJGRiZmlsZSBkYmFzZQorIGVjaG8gJGRi YXNlWyRrZXldCisgenVudGllIC11IGRiYXNlCisgenRpZSAtZCBkYi9nZGJt IC1mICRkYmZpbGUgZGJhc2UKKyBkYmFzZVska2V5XT0ka2V5CisgenVudGll IGRiYXNlCisgenRpZSAtZCBkYi9nZGJtIC1mICRkYmZpbGUgZGJhc2UKKyBb WyAiJGRiYXNlWyRrZXldIiA9ICIka2V5IiBdXSAmJiBlY2hvIGNvcnJlY3QK KyB6dW50aWUgZGJhc2UKKzA6TWV0YWZpY2F0aW9uIG9mICQnXDAnCis+dmFs dWUKKz52YWx1ZQorPmNvcnJlY3QKKworIHp0aWUgLWQgZGIvZ2RibSAtZiAk ZGJmaWxlIGRiYXNlCisgZGJhc2U9KCDmvKLlrZcg5ryi5a2XICkKKyBlY2hv ICRkYmFzZVvmvKLlrZddCisgenVudGllIGRiYXNlCisgenRpZSAtZCBkYi9n ZGJtIC1mICRkYmZpbGUgZGJhc2UKKyBlY2hvICRkYmFzZVvmvKLlrZddCisg enVudGllIGRiYXNlCisga2V5PSJhYiIkJ1wwJyJlZiIKKyB6dGllIC1kIGRi L2dkYm0gLWYgJGRiZmlsZSBkYmFzZQorIGRiYXNlKz0oICRrZXkgJGtleSAp CisgenVudGllIGRiYXNlCisgenRpZSAtciAtZCBkYi9nZGJtIC1mICRkYmZp bGUgZGJhc2UKKyBbWyAiJGRiYXNlWyRrZXldIiA9ICIka2V5IiBdXSAmJiBl Y2hvIGNvcnJlY3QKKyB6dW50aWUgLXUgZGJhc2UKKzA6VW5pY29kZSAmIG1l dGFmaWNhdGlvbiB0ZXN0LCBkaWZmZXJlbnQgaGFzaCBhY2Nlc3MKKz7mvKLl rZcKKz7mvKLlrZcKKz5jb3JyZWN0CisKKyVjbGVhbgorCisgIHJtIC1mICR7 ZGJmaWxlfSoK --_----------=_148726101719070930 Content-Disposition: attachment; filename="db_gdbm.c.txt" Content-Id: <1487260925.1906886.6e4b451ef1be6220c52193aee942ef83128d7c5e.3B425DF8@content.messagingengine.com> Content-Transfer-Encoding: base64 Content-Type: text/plain; name="db_gdbm.c.txt" LyoKICogZGJfZ2RibS5jIC0gYmluZGluZ3MgZm9yIGdkYm0KICoKICogVGhp cyBmaWxlIGlzIHBhcnQgb2YgenNoLCB0aGUgWiBzaGVsbC4KICoKICogQ29w eXJpZ2h0IChjKSAyMDA4IENsaW50IEFkYW1zCiAqIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCiAqCiAqIE1vZGlmaWNhdGlvbnMgY29weXJpZ2h0IChjKSAyMDE3 IFNlYmFzdGlhbiBHbmlhemRvd3NraQogKiBBbGwgcmlnaHRzIHJlc2VydmVk LgogKgogKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCB3aXRob3V0 IHdyaXR0ZW4gYWdyZWVtZW50IGFuZCB3aXRob3V0CiAqIGxpY2Vuc2Ugb3Ig cm95YWx0eSBmZWVzLCB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3Ry aWJ1dGUgdGhpcwogKiBzb2Z0d2FyZSBhbmQgdG8gZGlzdHJpYnV0ZSBtb2Rp ZmllZCB2ZXJzaW9ucyBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICogcHVy cG9zZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhlIGZvbGxvd2luZwogKiB0d28gcGFyYWdyYXBocyBhcHBlYXIg aW4gYWxsIGNvcGllcyBvZiB0aGlzIHNvZnR3YXJlLgogKgogKiBJbiBubyBl dmVudCBzaGFsbCBDbGludCBBZGFtcyBvciB0aGUgWnNoIERldmVsb3BtZW50 CiAqIEdyb3VwIGJlIGxpYWJsZSB0byBhbnkgcGFydHkgZm9yIGRpcmVjdCwg aW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwsIG9yCiAqIGNvbnNlcXVl bnRpYWwgZGFtYWdlcyBhcmlzaW5nIG91dCBvZiB0aGUgdXNlIG9mIHRoaXMg c29mdHdhcmUgYW5kIGl0cwogKiBkb2N1bWVudGF0aW9uLCBldmVuIGlmIFBl dGVyIFN0ZXBoZW5zb24sIFN2ZW4gV2lzY2hub3dza3kgYW5kIHRoZSBac2gK ICogRGV2ZWxvcG1lbnQgR3JvdXAgaGF2ZSBiZWVuIGFkdmlzZWQgb2YgdGhl IHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlLgogKgogKiBDbGludCBBZGFt cyBhbmQgdGhlIFpzaCBEZXZlbG9wbWVudCBHcm91cAogKiBzcGVjaWZpY2Fs bHkgZGlzY2xhaW0gYW55IHdhcnJhbnRpZXMsIGluY2x1ZGluZywgYnV0IG5v dCBsaW1pdGVkIHRvLCB0aGUKICogaW1wbGllZCB3YXJyYW50aWVzIG9mIG1l cmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1 cnBvc2UuCiAqIFRoZSBzb2Z0d2FyZSBwcm92aWRlZCBoZXJldW5kZXIgaXMg b24gYW4gImFzIGlzIiBiYXNpcywgYW5kIFBldGVyCiAqIFN0ZXBoZW5zb24s IFN2ZW4gV2lzY2hub3dza3kgYW5kIHRoZSBac2ggRGV2ZWxvcG1lbnQgR3Jv dXAgaGF2ZSBubwogKiBvYmxpZ2F0aW9uIHRvIHByb3ZpZGUgbWFpbnRlbmFu Y2UsIHN1cHBvcnQsIHVwZGF0ZXMsIGVuaGFuY2VtZW50cywgb3IKICogbW9k aWZpY2F0aW9ucy4KICoKICovCgojaW5jbHVkZSAiZGJfZ2RibS5tZGgiCiNp bmNsdWRlICJkYl9nZGJtLnBybyIKCiNpZm5kZWYgUE1fVVBUT0RBVEUKI2Rl ZmluZSBQTV9VUFRPREFURSAgICAgKDE8PDE5KSAvKiBQYXJhbWV0ZXIgaGFz IHVwLXRvLWRhdGUgZGF0YSAoZS5nLiBsb2FkZWQgZnJvbSBEQikgKi8KI2Vu ZGlmCgpzdGF0aWMgUGFyYW0gY3JlYXRlaGFzaCggY2hhciAqbmFtZSwgaW50 IGZsYWdzICk7CnN0YXRpYyBpbnQgYXBwZW5kX3RpZWRfbmFtZSggY29uc3Qg Y2hhciAqbmFtZSApOwpzdGF0aWMgaW50IHJlbW92ZV90aWVkX25hbWUoIGNv bnN0IGNoYXIgKm5hbWUgKTsKY2hhciAqdW5tZXRhZnlfemFsbG9jKGNvbnN0 IGNoYXIgKnRvX2NvcHksIGludCAqbmV3X2xlbik7CgovKgogKiBNYWtlIHN1 cmUgd2UgaGF2ZSBhbGwgdGhlIGJpdHMgSSdtIHVzaW5nIGZvciBtZW1vcnkg bWFwcGluZywgb3RoZXJ3aXNlCiAqIEkgZG9uJ3Qga25vdyB3aGF0IEknbSBk b2luZy4KICovCiNpZiBkZWZpbmVkKEhBVkVfR0RCTV9IKSAmJiBkZWZpbmVk KEhBVkVfR0RCTV9PUEVOKQoKI2luY2x1ZGUgPGdkYm0uaD4KCnN0YXRpYyBj aGFyICpiYWNrdHlwZSA9ICJkYi9nZGJtIjsKCi8qCiAqIExvbmdlciBHU1Ug c3RydWN0dXJlLCB0byBjYXJyeSBHREJNX0ZJTEUgb2Ygb3duaW5nCiAqIGRh dGFiYXNlLiBFdmVyeSBwYXJhbWV0ZXIgKGhhc2ggdmFsdWUpIHJlY2VpdmVz IEdTVQogKiBwb2ludGVyIGFuZCB0aHVzIGFsc28gcmVjZWl2ZXMgR0RCTV9G SUxFIC0gdGhpcyB3YXkKICogcGFyYW1ldGVycyBjYW4gYWNjZXNzIHByb3Bl ciBkYXRhYmFzZS4KICoKICogTWFpbiBIYXNoVGFibGUgcGFyYW1ldGVyIGhh cyB0aGUgc2FtZSBpbnN0YW5jZSBvZgogKiB0aGUgY3VzdG9tIEdTVSBzdHJ1 Y3QgaW4gdS5oYXNoLT50bXBkYXRhIGZpZWxkLgogKiBXaGVuIGRhdGFiYXNl IGlzIGNsb3NlZCwgYGRiZmAgZmllbGQgaXMgc2V0IHRvIE5VTEwKICogYW5k IGhhc2ggdmFsdWVzIGtub3cgdG8gbm90IGFjY2VzcyBkYXRhYmFzZSB3aGVu CiAqIGJlaW5nIHVuc2V0ICh0b3RhbCBwdXJnZSBhdCB6dW50aWUpLgogKgog KiBXaGVuIGRhdGFiYXNlIGNsb3NpbmcgaXMgZW5kZWQsIGN1c3RvbSBHU1Ug c3RydWN0CiAqIGlzIGZyZWVkLiBPbmx5IG5ldyB6dGllIGNyZWF0ZXMgbmV3 IGN1c3RvbSBHU1UKICogc3RydWN0IGluc3RhbmNlLgogKi8KCnN0cnVjdCBn c3Vfc2NhbGFyX2V4dCB7CiAgICBzdHJ1Y3QgZ3N1X3NjYWxhciBzdGQ7CiAg ICBHREJNX0ZJTEUgZGJmOwogICAgY2hhciAqZGJmaWxlX3BhdGg7Cn07Cgov KiBTb3VyY2Ugc3RydWN0dXJlIC0gd2lsbCBiZSBjb3BpZWQgdG8gYWxsb2Nh dGVkIG9uZSwKICogd2l0aCBgZGJmYCBmaWxsZWQuIGBkYmZgIGFsbG9jYXRp b24gPC0+IGdzdSBhbGxvY2F0aW9uLiAqLwpzdGF0aWMgY29uc3Qgc3RydWN0 IGdzdV9zY2FsYXJfZXh0IGdkYm1fZ3N1X2V4dCA9CnsgeyBnZGJtZ2V0Zm4s IGdkYm1zZXRmbiwgZ2RibXVuc2V0Zm4gfSwgMCwgMCB9OwoKLyoqLwpzdGF0 aWMgY29uc3Qgc3RydWN0IGdzdV9oYXNoIGdkYm1faGFzaF9nc3UgPQp7IGhh c2hnZXRmbiwgZ2RibWhhc2hzZXRmbiwgZ2RibWhhc2h1bnNldGZuIH07Cgpz dGF0aWMgc3RydWN0IGJ1aWx0aW4gYmludGFiW10gPSB7CiAgICBCVUlMVElO KCJ6dGllIiwgMCwgYmluX3p0aWUsIDEsIC0xLCAwLCAiZDpmOnIiLCBOVUxM KSwKICAgIEJVSUxUSU4oInp1bnRpZSIsIDAsIGJpbl96dW50aWUsIDEsIC0x LCAwLCAidSIsIE5VTEwpLAogICAgQlVJTFRJTigiemdkYm1wYXRoIiwgMCwg YmluX3pnZGJtcGF0aCwgMSwgLTEsIDAsICIiLCBOVUxMKSwKfTsKCiNkZWZp bmUgUk9BUlJQQVJBTURFRihuYW1lLCB2YXIpIFwKICAgIHsgbmFtZSwgUE1f QVJSQVkgfCBQTV9SRUFET05MWSwgKHZvaWQgKikgdmFyLCBOVUxMLCAgTlVM TCwgTlVMTCwgTlVMTCB9CgovKiBIb2xkcyBuYW1lcyBvZiBhbGwgdGllZCBw YXJhbWV0ZXJzICovCmNoYXIgKip6Z2RibV90aWVkOwoKc3RhdGljIHN0cnVj dCBwYXJhbWRlZiBwYXRhYltdID0gewogICAgUk9BUlJQQVJBTURFRiggInpn ZGJtX3RpZWQiLCAmemdkYm1fdGllZCApLAp9OwoKLyoqLwpzdGF0aWMgaW50 CmJpbl96dGllKGNoYXIgKm5hbSwgY2hhciAqKmFyZ3MsIE9wdGlvbnMgb3Bz LCBVTlVTRUQoaW50IGZ1bmMpKQp7CiAgICBjaGFyICpyZXNvdXJjZV9uYW1l LCAqcG1uYW1lOwogICAgR0RCTV9GSUxFIGRiZiA9IE5VTEw7CiAgICBpbnQg cmVhZF93cml0ZSA9IEdEQk1fU1lOQywgcG1mbGFncyA9IFBNX1JFTU9WQUJM RTsKICAgIFBhcmFtIHRpZWRfcGFyYW07CgogICAgaWYoIU9QVF9JU1NFVChv cHMsJ2QnKSkgewogICAgICAgIHp3YXJubmFtKG5hbSwgInlvdSBtdXN0IHBh c3MgYC1kICVzJyIsIGJhY2t0eXBlKTsKCXJldHVybiAxOwogICAgfQogICAg aWYoIU9QVF9JU1NFVChvcHMsJ2YnKSkgewogICAgICAgIHp3YXJubmFtKG5h bSwgInlvdSBtdXN0IHBhc3MgYC1mJyB3aXRoIGEgZmlsZW5hbWUiLCBOVUxM KTsKCXJldHVybiAxOwogICAgfQogICAgaWYgKE9QVF9JU1NFVChvcHMsJ3In KSkgewoJcmVhZF93cml0ZSB8PSBHREJNX1JFQURFUjsKCXBtZmxhZ3MgfD0g UE1fUkVBRE9OTFk7CiAgICB9IGVsc2UgewoJcmVhZF93cml0ZSB8PSBHREJN X1dSQ1JFQVQ7CiAgICB9CgogICAgLyogSGVyZSBzaG91bGQgYmUgYSBsb29r dXAgb2YgdGhlIGJhY2tlbmQgdHlwZSBhZ2FpbnN0CiAgICAgKiBhIHJlZ2lz dHJ5LCBpZiBnZW5lcmFtIERCIG1lY2hhbmlzbSBpcyB0byBiZSBhZGRlZCAq LwogICAgaWYgKHN0cmNtcChPUFRfQVJHKG9wcywgJ2QnKSwgYmFja3R5cGUp ICE9IDApIHsKICAgICAgICB6d2Fybm5hbShuYW0sICJ1bnN1cHBvcnRlZCBi YWNrZW5kIHR5cGUgYCVzJyIsIE9QVF9BUkcob3BzLCAnZCcpKTsKCXJldHVy biAxOwogICAgfQoKICAgIHJlc291cmNlX25hbWUgPSBPUFRfQVJHKG9wcywg J2YnKTsKICAgIHBtbmFtZSA9ICphcmdzOwoKICAgIGlmICgodGllZF9wYXJh bSA9IChQYXJhbSlwYXJhbXRhYi0+Z2V0bm9kZShwYXJhbXRhYiwgcG1uYW1l KSkgJiYKCSEodGllZF9wYXJhbS0+bm9kZS5mbGFncyAmIFBNX1VOU0VUKSkg ewoJLyoKCSAqIFVuc2V0IGFueSBleGlzdGluZyBwYXJhbWV0ZXIuICBOb3Rl IHRoZXJlJ3Mgbm8gaW1wbGljaXQKCSAqICJsb2NhbCIgaGVyZSwgYnV0IGlm IHRoZSBleGlzdGluZyBwYXJhbWV0ZXIgaXMgbG9jYWwKCSAqIHRoZW4gbmV3 IHBhcmFtZXRlciB3aWxsIGJlIGFsc28gbG9jYWwgd2l0aG91dCBmb2xsb3dp bmcKICAgICAgICAgKiB1bnNldC4KCSAqCgkgKiBXZSBuZWVkIHRvIGRvIHRo aXMgYmVmb3JlIGF0dGVtcHRpbmcgdG8gb3BlbiB0aGUgREIKCSAqIGluIGNh c2UgdGhpcyB2YXJpYWJsZSBpcyBhbHJlYWR5IHRpZWQgdG8gYSBEQi4KCSAq CgkgKiBUaGlzIGNhbiBmYWlsIGlmIHRoZSB2YXJpYWJsZSBpcyByZWFkb25s eSBvciByZXN0cmljdGVkLgoJICogV2UgY291bGQgY2FsbCB1bnNldHBhcmFt KCkgYW5kIGNoZWNrIGVycmZsYWcgaW5zdGVhZAoJICogb2YgdGhlIHJldHVy biBzdGF0dXMuCgkgKi8KCWlmICh1bnNldHBhcmFtX3BtKHRpZWRfcGFyYW0s IDAsIDEpKQoJICAgIHJldHVybiAxOwogICAgfQoKICAgIGRiZiA9IGdkYm1f b3BlbihyZXNvdXJjZV9uYW1lLCAwLCByZWFkX3dyaXRlLCAwNjY2LCAwKTsK ICAgIGlmKGRiZikgewoJYWRkbW9kdWxlZmQoZ2RibV9mZGVzYyhkYmYpLCBG RFRfTU9EVUxFKTsKICAgICAgICBhcHBlbmRfdGllZF9uYW1lKHBtbmFtZSk7 CiAgICB9IGVsc2UgewoJendhcm5uYW0obmFtLCAiZXJyb3Igb3BlbmluZyBk YXRhYmFzZSBmaWxlICVzIiwgcmVzb3VyY2VfbmFtZSk7CglyZXR1cm4gMTsK ICAgIH0KCiAgICBpZiAoISh0aWVkX3BhcmFtID0gY3JlYXRlaGFzaChwbW5h bWUsIHBtZmxhZ3MpKSkgewogICAgICAgIHp3YXJubmFtKG5hbSwgImNhbm5v dCBjcmVhdGUgdGhlIHJlcXVlc3RlZCBwYXJhbWV0ZXIgJXMiLCBwbW5hbWUp OwoJZmR0YWJsZVtnZGJtX2ZkZXNjKGRiZildID0gRkRUX1VOVVNFRDsKCWdk Ym1fY2xvc2UoZGJmKTsKCXJldHVybiAxOwogICAgfQoKICAgIHRpZWRfcGFy YW0tPmdzdS5oID0gJmdkYm1faGFzaF9nc3U7CgogICAgLyogQWxsb2NhdGUg cGFyYW1ldGVyIHN1Yi1nc3UsIGZpbGwgZGJmIGZpZWxkLiAKICAgICAqIGRi ZiBhbGxvY2F0aW9uIGlzIDEgdG8gMSBhY2NvbXBhbmllZCBieQogICAgICog Z3N1X3NjYWxhcl9leHQgYWxsb2NhdGlvbi4gKi8KCiAgICBzdHJ1Y3QgZ3N1 X3NjYWxhcl9leHQgKmRiZl9jYXJyaWVyID0gKHN0cnVjdCBnc3Vfc2NhbGFy X2V4dCAqKSB6YWxsb2Moc2l6ZW9mKHN0cnVjdCBnc3Vfc2NhbGFyX2V4dCkp OwogICAgZGJmX2NhcnJpZXItPnN0ZCA9IGdkYm1fZ3N1X2V4dC5zdGQ7CiAg ICBkYmZfY2Fycmllci0+ZGJmID0gZGJmOwogICAgdGllZF9wYXJhbS0+dS5o YXNoLT50bXBkYXRhID0gKHZvaWQgKilkYmZfY2FycmllcjsKCiAgICAvKiBG aWxsIGFsc28gZmlsZSBwYXRoIGZpZWxkICovCiAgICBpZiAoKnJlc291cmNl X25hbWUgIT0gJy8nKSB7CiAgICAgICAgLyogQ29kZSBjb3BpZWQgZnJvbSBj aGVja19hdXRvbG9hZCgpICovCiAgICAgICAgcmVzb3VyY2VfbmFtZSA9IHpo dHJpY2F0KG1ldGFmeSh6Z2V0Y3dkKCksIC0xLCBNRVRBX0hFQVBEVVApLCAi LyIsIHJlc291cmNlX25hbWUpOwogICAgICAgIHJlc291cmNlX25hbWUgPSB4 c3ltbGluayhyZXNvdXJjZV9uYW1lLCAxKTsKICAgIH0KICAgIGRiZl9jYXJy aWVyLT5kYmZpbGVfcGF0aCA9IHp0cmR1cChyZXNvdXJjZV9uYW1lKTsKICAg IHJldHVybiAwOwp9CgovKiovCnN0YXRpYyBpbnQKYmluX3p1bnRpZShjaGFy ICpuYW0sIGNoYXIgKiphcmdzLCBPcHRpb25zIG9wcywgVU5VU0VEKGludCBm dW5jKSkKewogICAgUGFyYW0gcG07CiAgICBjaGFyICpwbW5hbWU7CiAgICBp bnQgcmV0ID0gMDsKCiAgICBmb3IgKHBtbmFtZSA9ICphcmdzOyAqYXJncysr OyBwbW5hbWUgPSAqYXJncykgewoJcG0gPSAoUGFyYW0pIHBhcmFtdGFiLT5n ZXRub2RlKHBhcmFtdGFiLCBwbW5hbWUpOwoJaWYoIXBtKSB7CgkgICAgendh cm5uYW0obmFtLCAiY2Fubm90IHVudGllICVzIiwgcG1uYW1lKTsKCSAgICBy ZXQgPSAxOwoJICAgIGNvbnRpbnVlOwoJfQoJaWYgKHBtLT5nc3UuaCAhPSAm Z2RibV9oYXNoX2dzdSkgewoJICAgIHp3YXJubmFtKG5hbSwgIm5vdCBhIHRp ZWQgZ2RibSBoYXNoOiAlcyIsIHBtbmFtZSk7CgkgICAgcmV0ID0gMTsKCSAg ICBjb250aW51ZTsKCX0KCglxdWV1ZV9zaWduYWxzKCk7CglpZiAoT1BUX0lT U0VUKG9wcywndScpKQoJICAgIGdkYm11bnRpZShwbSk7CS8qIGNsZWFyIHJl YWQtb25seS1uZXNzICovCglpZiAodW5zZXRwYXJhbV9wbShwbSwgMCwgMSkp IHsKCSAgICAvKiBhc3N1bWUgYWxyZWFkeSByZXBvcnRlZCAqLwoJICAgIHJl dCA9IDE7Cgl9Cgl1bnF1ZXVlX3NpZ25hbHMoKTsKICAgIH0KCiAgICByZXR1 cm4gcmV0Owp9CgovKiovCnN0YXRpYyBpbnQKYmluX3pnZGJtcGF0aChjaGFy ICpuYW0sIGNoYXIgKiphcmdzLCBPcHRpb25zIG9wcywgVU5VU0VEKGludCBm dW5jKSkKewogICAgUGFyYW0gcG07CiAgICBjaGFyICpwbW5hbWU7CgogICAg cG1uYW1lID0gKmFyZ3M7CgogICAgaWYgKCFwbW5hbWUpIHsKICAgICAgICB6 d2Fybm5hbShuYW0sICJwYXJhbWV0ZXIgbmFtZSAod2hvc2UgcGF0aCBpcyB0 byBiZSB3cml0dGVuIHRvICRSRVBMWSkgaXMgcmVxdWlyZWQiKTsKICAgICAg ICByZXR1cm4gMTsKICAgIH0KCiAgICBwbSA9IChQYXJhbSkgcGFyYW10YWIt PmdldG5vZGUocGFyYW10YWIsIHBtbmFtZSk7CiAgICBpZighcG0pIHsKICAg ICAgICB6d2Fybm5hbShuYW0sICJubyBzdWNoIHBhcmFtZXRlcjogJXMiLCBw bW5hbWUpOwogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgIGlmIChwbS0+ Z3N1LmggIT0gJmdkYm1faGFzaF9nc3UpIHsKICAgICAgICB6d2Fybm5hbShu YW0sICJub3QgYSB0aWVkIGdkYm0gcGFyYW1ldGVyOiAlcyIsIHBtbmFtZSk7 CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgLyogUGFyYW5vaWEsIGl0 ICp3aWxsKiBiZSBhbHdheXMgc2V0ICovCiAgICBpZiAoKChzdHJ1Y3QgZ3N1 X3NjYWxhcl9leHQgKilwbS0+dS5oYXNoLT50bXBkYXRhKS0+ZGJmaWxlX3Bh dGgpIHsKICAgICAgICBzZXRzcGFyYW0oIlJFUExZIiwgenRyZHVwKCgoc3Ry dWN0IGdzdV9zY2FsYXJfZXh0ICopcG0tPnUuaGFzaC0+dG1wZGF0YSktPmRi ZmlsZV9wYXRoKSk7CiAgICB9IGVsc2UgewogICAgICAgIHNldHNwYXJhbSgi UkVQTFkiLCB6dHJkdXAoIiIpKTsKICAgIH0KCiAgICByZXR1cm4gMDsKfQoK LyoKICogVGhlIHBhcmFtIGlzIGFjdHVhbCBwYXJhbSBpbiBoYXNoIOKAk8Kg YWx3YXlzLCBiZWNhdXNlCiAqIGdldGdkYm1ub2RlIGNyZWF0ZXMgZXZlcnkg bmV3IGtleSBzZWVuLiBIb3dldmVyLCBpdAogKiBtaWdodCBiZSBub3QgUE1f VVBUT0RBVEUgLSB3aGljaCBtZWFucyB0aGF0IGRhdGFiYXNlCiAqIHdhc24n dCB5ZXQgcXVlcmllZC4KICoKICogSXQgd2lsbCBiZSBsZWZ0IGluIHRoaXMg c3RhdGUgaWYgZGF0YWJhc2UgZG9lc24ndAogKiBjb250YWluIHN1Y2gga2V5 LiBUaGF0IG1pZ2h0IGJlIGEgZHJhd2JhY2ssIG1heWJlCiAqIHNldHRpbmcg dG8gZW1wdHkgdmFsdWUgaGFzIHNlbnNlLCBhcyBubyBvdGhlciB3cml0ZXIK ICogY2FuIGV4aXN0LiBUaGlzIHdvdWxkIHJlbW92ZSBzdWJ0bGUgaGNhbGxv YygxKSBsZWFrLgogKi8KCi8qKi8Kc3RhdGljIGNoYXIgKgpnZGJtZ2V0Zm4o UGFyYW0gcG0pCnsKICAgIGRhdHVtIGtleSwgY29udGVudDsKICAgIGludCBy ZXQ7CiAgICBHREJNX0ZJTEUgZGJmOwoKICAgIC8qIEtleSBhbHJlYWR5IHJl dHJpZXZlZD8gVGhlcmUgaXMgbm8gc2Vuc2Ugb2YgYXNraW5nIHRoZQogICAg ICogZGF0YWJhc2UgYWdhaW4sIGJlY2F1c2U6CiAgICAgKiAtIHRoZXJlIGNh biBiZSBvbmx5IG11bHRpcGxlIHJlYWRlcnMKICAgICAqIC0gc28sIG5vIHdy aXRlciArIHJlYWRlciB1c2UgaXMgYWxsb3dlZAogICAgICoKICAgICAqIFRo dXM6CiAgICAgKiAtIGlmIHdlIGFyZSB3cml0ZXJzLCB3ZSBmb3Igc3VyZSBo YXZlIG5ld2VzdCBjb3B5IG9mIGRhdGEKICAgICAqIC0gaWYgd2UgYXJlIHJl YWRlcnMsIHdlIGZvciBzdXJlIGhhdmUgbmV3ZXN0IGNvcHkgb2YgZGF0YQog ICAgICovCiAgICBpZiAoIHBtLT5ub2RlLmZsYWdzICYgUE1fVVBUT0RBVEUg KSB7CiAgICAgICAgcmV0dXJuIHBtLT51LnN0ciA/IHBtLT51LnN0ciA6IChj aGFyICopIGhjYWxsb2MoMSk7CiAgICB9CgogICAgLyogVW5tZXRhZnkga2V5 LiBHREJNIGZpdHMgbmljZSBpbnRvIHRoaXMKICAgICAqIHByb2Nlc3MsIGFz IGl0IHVzZXMgbGVuZ3RoIG9mIGRhdGEgKi8KICAgIGludCB1bWxlbiA9IDA7 CiAgICBjaGFyICp1bWtleSA9IHVubWV0YWZ5X3phbGxvYyhwbS0+bm9kZS5u YW0sJnVtbGVuKTsKCiAgICBrZXkuZHB0ciA9IHVta2V5OwogICAga2V5LmRz aXplID0gdW1sZW47CgogICAgZGJmID0gKChzdHJ1Y3QgZ3N1X3NjYWxhcl9l eHQgKilwbS0+Z3N1LnMpLT5kYmY7CgogICAgaWYoKHJldCA9IGdkYm1fZXhp c3RzKGRiZiwga2V5KSkpIHsKICAgICAgICAvKiBXZSBoYXZlIGRhdGEg4oCT IHN0b3JlIGl0LCByZXR1cm4gaXQgKi8KICAgICAgICBwbS0+bm9kZS5mbGFn cyB8PSBQTV9VUFRPREFURTsKCiAgICAgICAgY29udGVudCA9IGdkYm1fZmV0 Y2goZGJmLCBrZXkpOwoKICAgICAgICAvKiBFbnN1cmUgdGhlcmUncyBubyBs ZWFrICovCiAgICAgICAgaWYgKHBtLT51LnN0cikgewogICAgICAgICAgICB6 c2ZyZWUocG0tPnUuc3RyKTsKICAgICAgICB9CgogICAgICAgIC8qIE1ldGFm eSByZXR1cm5lZCBkYXRhLiBBbGwgZml0cyAtIG1ldGFmeQogICAgICAgICAq IGNhbiBvYnRhaW4gZGF0YSBsZW5ndGggdG8gYXZvaWQgdXNpbmcgXDAgKi8K ICAgICAgICBwbS0+dS5zdHIgPSBtZXRhZnkoY29udGVudC5kcHRyLCBjb250 ZW50LmRzaXplLCBNRVRBX0RVUCk7CgogICAgICAgIC8qIEZyZWUga2V5LCBy ZXN0b3JpbmcgaXRzIG9yaWdpbmFsIGxlbmd0aCAqLwogICAgICAgIHpzZnJl ZSh1bWtleSk7CgogICAgICAgIC8qIENhbiByZXR1cm4gcG9pbnRlciwgY29y cmVjdGx5IHNhdmVkIGluc2lkZSBoYXNoICovCiAgICAgICAgcmV0dXJuIHBt LT51LnN0cjsKICAgIH0KCiAgICAvKiBGcmVlIGtleSAqLwogICAgenNmcmVl KHVta2V5KTsKCiAgICAvKiBDYW4gdGhpcyBiZSAiIiA/ICovCiAgICByZXR1 cm4gKGNoYXIgKikgaGNhbGxvYygxKTsKfQoKLyoqLwpzdGF0aWMgdm9pZApn ZGJtc2V0Zm4oUGFyYW0gcG0sIGNoYXIgKnZhbCkKewogICAgZGF0dW0ga2V5 LCBjb250ZW50OwogICAgR0RCTV9GSUxFIGRiZjsKCiAgICAvKiBTZXQgaXMg ZG9uZSBvbiBwYXJhbWV0ZXIgYW5kIG9uIGRhdGFiYXNlLgogICAgICogU2Vl IHRoZSBhbGxvd2VkIHdvcmtlcnMgLyByZWFkZXJzIGNvbW1lbnQKICAgICAq IGF0IGdkYm1nZXRmbigpICovCgogICAgLyogUGFyYW1ldGVyICovCiAgICBp ZiAocG0tPnUuc3RyKSB7CiAgICAgICAgenNmcmVlKHBtLT51LnN0cik7CiAg ICAgICAgcG0tPnUuc3RyID0gTlVMTDsKICAgICAgICBwbS0+bm9kZS5mbGFn cyAmPSB+KFBNX1VQVE9EQVRFKTsKICAgIH0KCiAgICBpZiAodmFsKSB7CiAg ICAgICAgcG0tPnUuc3RyID0genRyZHVwKHZhbCk7CiAgICAgICAgcG0tPm5v ZGUuZmxhZ3MgfD0gUE1fVVBUT0RBVEU7CiAgICB9CgogICAgLyogRGF0YWJh c2UgKi8KICAgIGRiZiA9ICgoc3RydWN0IGdzdV9zY2FsYXJfZXh0ICopcG0t PmdzdS5zKS0+ZGJmOwogICAgaWYgKGRiZikgewogICAgICAgIGludCB1bWxl biA9IDA7CiAgICAgICAgY2hhciAqdW1rZXkgPSB1bm1ldGFmeV96YWxsb2Mo cG0tPm5vZGUubmFtLCZ1bWxlbik7CgogICAgICAgIGtleS5kcHRyID0gdW1r ZXk7CiAgICAgICAga2V5LmRzaXplID0gdW1sZW47CgogICAgICAgIGlmICh2 YWwpIHsKICAgICAgICAgICAgLyogVW5tZXRhZnkgd2l0aCBleGFjdCB6YWxs b2Mgc2l6ZSAqLwogICAgICAgICAgICBjaGFyICp1bXZhbCA9IHVubWV0YWZ5 X3phbGxvYyh2YWwsJnVtbGVuKTsKCiAgICAgICAgICAgIC8qIFN0b3JlICov CiAgICAgICAgICAgIGNvbnRlbnQuZHB0ciA9IHVtdmFsOwogICAgICAgICAg ICBjb250ZW50LmRzaXplID0gdW1sZW47CiAgICAgICAgICAgICh2b2lkKWdk Ym1fc3RvcmUoZGJmLCBrZXksIGNvbnRlbnQsIEdEQk1fUkVQTEFDRSk7Cgog ICAgICAgICAgICAvKiBGcmVlICovCiAgICAgICAgICAgIHpzZnJlZSh1bXZh bCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgKHZvaWQpZ2RibV9k ZWxldGUoZGJmLCBrZXkpOwogICAgICAgIH0KCiAgICAgICAgLyogRnJlZSBr ZXkgKi8KICAgICAgICB6c2ZyZWUodW1rZXkpOwogICAgfQp9CgovKiovCnN0 YXRpYyB2b2lkCmdkYm11bnNldGZuKFBhcmFtIHBtLCBVTlVTRUQoaW50IHVt KSkKewogICAgLyogU2V0IHdpdGggTlVMTCAqLwogICAgZ2RibXNldGZuKHBt LCBOVUxMKTsKfQoKLyoqLwpzdGF0aWMgSGFzaE5vZGUKZ2V0Z2RibW5vZGUo SGFzaFRhYmxlIGh0LCBjb25zdCBjaGFyICpuYW1lKQp7CiAgICBIYXNoTm9k ZSBobiA9IGdldGhhc2hub2RlMiggaHQsIG5hbWUgKTsKICAgIFBhcmFtIHZh bF9wbSA9IChQYXJhbSkgaG47CgogICAgLyogRW50cnkgZm9yIGtleSBkb2Vz bid0IGV4aXN0PyBDcmVhdGUgaXQgbm93LAogICAgICogaXQgd2lsbCBiZSBp bnRlcmZhY2luZyBiZXR3ZWVuIHRoZSBkYXRhYmFzZQogICAgICogYW5kIFpz aCAtIHRocm91Z2ggc3BlY2lhbCBnZGJtX2dzdS4gU28sIGFueQogICAgICog c2VlbiBrZXkgcmVzdWx0cyBpbiBuZXcgaW50ZXJmYWNpbmcgcGFyYW1ldGVy LgogICAgICoKICAgICAqIFByZXZpb3VzIGNvZGUgd2FzIHJldHVybmluZyBo ZWFwIGFyZW5hIFBhcmFtCiAgICAgKiB0aGF0IHdhc24ndCBhY3R1YWxseSBh ZGRlZCB0byB0aGUgaGFzaC4gSXQgd2FzCiAgICAgKiBwbGFpbmx5IG5hbWUg LyBkYXRhYmFzZS1rZXkgaG9sZGVyLiBIZXJlIHdlCiAgICAgKiBhZGQgdGhl IFBhcmFtIHRvIGl0cyBoYXNoLCBpdCBpcyBub3QgUE1fVVBUT0RBVEUuCiAg ICAgKiBJdCB3aWxsIGJlIGxvYWRlZCBmcm9tIGRhdGFiYXNlICphbmQgZmls bGVkKgogICAgICogb3IgbGVmdCBpbiB0aGF0IHN0YXRlIGlmIHRoZSBkYXRh YmFzZSBkb2Vzbid0CiAgICAgKiBjb250YWluIGl0LgogICAgICoKICAgICAq IE5vIGhlYXAgYXJlbmEgbWVtb3J5IGlzIHVzZWQsIG1lbW9yeSB1c2FnZSBp cwogICAgICogbm93IGxpbWl0ZWQgLSBieSBudW1iZXIgb2YgZGlzdGluY3Qg a2V5cyBzZWVuLAogICAgICogbm90IGJ5IG51bWJlciBvZiBrZXkgKnVzZXMq LgogICAgICogKi8KCiAgICBpZiAoICEgdmFsX3BtICkgewogICAgICAgIHZh bF9wbSA9IChQYXJhbSkgenNoY2FsbG9jKCBzaXplb2YgKCp2YWxfcG0pICk7 CiAgICAgICAgdmFsX3BtLT5ub2RlLmZsYWdzID0gUE1fU0NBTEFSIHwgUE1f SEFTSEVMRU07IC8qIG5vIFBNX1VQVE9EQVRFICovCiAgICAgICAgdmFsX3Bt LT5nc3UucyA9IChHc3VTY2FsYXIpIGh0LT50bXBkYXRhOwogICAgICAgIGh0 LT5hZGRub2RlKCBodCwgenRyZHVwKCBuYW1lICksIHZhbF9wbSApOyAvLyBz ZXRzIHBtLT5ub2RlLm5hbQogICAgfQoKICAgIHJldHVybiAoSGFzaE5vZGUp IHZhbF9wbTsKfQoKLyoqLwpzdGF0aWMgdm9pZApzY2FuZ2RibWtleXMoSGFz aFRhYmxlIGh0LCBTY2FuRnVuYyBmdW5jLCBpbnQgZmxhZ3MpCnsKICAgIGRh dHVtIGtleTsKICAgIEdEQk1fRklMRSBkYmYgPSAoKHN0cnVjdCBnc3Vfc2Nh bGFyX2V4dCAqKWh0LT50bXBkYXRhKS0+ZGJmOwoKICAgIC8qIEl0ZXJhdGUg a2V5cyBhZGRpbmcgdGhlbSB0byBoYXNoLCBzbwogICAgICogd2UgaGF2ZSBQ YXJhbSB0byB1c2UgaW4gYGZ1bmNgICovCiAgICBrZXkgPSBnZGJtX2ZpcnN0 a2V5KGRiZik7CgogICAgd2hpbGUoa2V5LmRwdHIpIHsKICAgICAgICAvKiBU aGlzIHJldHVybnMgZGF0YWJhc2UtaW50ZXJmYWNpbmcgUGFyYW0sCiAgICAg ICAgICogaXQgd2lsbCByZXR1cm4gdS5zdHIgb3IgZmlyc3QgZmV0Y2ggZGF0 YQogICAgICAgICAqIGlmIG5vdCBQTV9VUFRPREFURSAobmV3bHkgY3JlYXRl ZCkgKi8KICAgICAgICBjaGFyICp6a2V5ID0genRyZHVwcGZ4KGtleS5kcHRy LCBrZXkuZHNpemUpOwogICAgICAgIEhhc2hOb2RlIGhuID0gZ2V0Z2RibW5v ZGUoaHQsIHprZXkpOwogICAgICAgIHpzZnJlZSggemtleSApOwoKCWZ1bmMo aG4sIGZsYWdzKTsKCiAgICAgICAgLyogSXRlcmF0ZSAtIG5vIHByb2JsZW0g YXMgaW50ZXJmYWNpbmcgUGFyYW0KICAgICAgICAgKiB3aWxsIGRvIGF0IG1v c3Qgb25seSBmZXRjaGVzLCBub3Qgc3RvcmVzICovCiAgICAgICAga2V5ID0g Z2RibV9uZXh0a2V5KGRiZiwga2V5KTsKICAgIH0KCn0KCi8qCiAqIFJlcGxh Y2UgZGF0YWJhc2Ugd2l0aCBuZXcgaGFzaAogKi8KCi8qKi8Kc3RhdGljIHZv aWQKZ2RibWhhc2hzZXRmbihQYXJhbSBwbSwgSGFzaFRhYmxlIGh0KQp7CiAg ICBpbnQgaTsKICAgIEhhc2hOb2RlIGhuOwogICAgR0RCTV9GSUxFIGRiZjsK ICAgIGRhdHVtIGtleSwgY29udGVudDsKCiAgICBpZiAoIXBtLT51Lmhhc2gg fHwgcG0tPnUuaGFzaCA9PSBodCkKCXJldHVybjsKCiAgICBpZiAoIShkYmYg PSAoKHN0cnVjdCBnc3Vfc2NhbGFyX2V4dCAqKXBtLT51Lmhhc2gtPnRtcGRh dGEpLT5kYmYpKQoJcmV0dXJuOwoKICAgIGtleSA9IGdkYm1fZmlyc3RrZXko ZGJmKTsKICAgIHdoaWxlIChrZXkuZHB0cikgewoJcXVldWVfc2lnbmFscygp OwoJKHZvaWQpZ2RibV9kZWxldGUoZGJmLCBrZXkpOwoJZnJlZShrZXkuZHB0 cik7Cgl1bnF1ZXVlX3NpZ25hbHMoKTsKCWtleSA9IGdkYm1fZmlyc3RrZXko ZGJmKTsKICAgIH0KCiAgICAvKiBqdXN0IGRlbGV0ZWQgZXZlcnl0aGluZywg Y2xlYW4gdXAgKi8KICAgICh2b2lkKWdkYm1fcmVvcmdhbml6ZShkYmYpOwoK ICAgIGlmICghaHQpCglyZXR1cm47CgogICAgIC8qIFB1dCBuZXcgc3RyaW5n cyBpbnRvIGRhdGFiYXNlLCB3YWl0aW5nCiAgICAgICogZm9yIHRoZWlyIGlu dGVyZmFjaW5nLVBhcmFtcyB0byBiZSBjcmVhdGVkICovCgogICAgZm9yIChp ID0gMDsgaSA8IGh0LT5oc2l6ZTsgaSsrKQoJZm9yIChobiA9IGh0LT5ub2Rl c1tpXTsgaG47IGhuID0gaG4tPm5leHQpIHsKCSAgICBzdHJ1Y3QgdmFsdWUg djsKCgkgICAgdi5pc2FyciA9IHYuZmxhZ3MgPSB2LnN0YXJ0ID0gMDsKCSAg ICB2LmVuZCA9IC0xOwoJICAgIHYuYXJyID0gTlVMTDsKCSAgICB2LnBtID0g KFBhcmFtKSBobjsKCiAgICAgICAgICAgIC8qIFVubWV0YWZ5IGtleSAqLwog ICAgICAgICAgICBpbnQgdW1sZW4gPSAwOwogICAgICAgICAgICBjaGFyICp1 bWtleSA9IHVubWV0YWZ5X3phbGxvYyh2LnBtLT5ub2RlLm5hbSwmdW1sZW4p OwoKCSAgICBrZXkuZHB0ciA9IHVta2V5OwoJICAgIGtleS5kc2l6ZSA9IHVt bGVuOwoKCSAgICBxdWV1ZV9zaWduYWxzKCk7CgogICAgICAgICAgICAvKiBV bm1ldGFmeSAqLwogICAgICAgICAgICBjaGFyICp1bXZhbCA9IHVubWV0YWZ5 X3phbGxvYyhnZXRzdHJ2YWx1ZSgmdiksJnVtbGVuKTsKCiAgICAgICAgICAg IC8qIFN0b3JlICovCgkgICAgY29udGVudC5kcHRyID0gdW12YWw7CgkgICAg Y29udGVudC5kc2l6ZSA9IHVtbGVuOwoJICAgICh2b2lkKWdkYm1fc3RvcmUo ZGJmLCBrZXksIGNvbnRlbnQsIEdEQk1fUkVQTEFDRSk7CQoKICAgICAgICAg ICAgLyogRnJlZSAtIHRoYW5rcyB0byB1bm1ldGFmeV96YWxsb2Mgc2l6ZSBv ZgogICAgICAgICAgICAgKiB0aGUgc3RyaW5ncyBpcyBleGFjdCB6YWxsb2Mg c2l6ZSAtIGNhbgogICAgICAgICAgICAgKiBwYXNzIHRvIHpzZnJlZSAqLwog ICAgICAgICAgICB6c2ZyZWUodW12YWwpOwogICAgICAgICAgICB6c2ZyZWUo dW1rZXkpOwoKCSAgICB1bnF1ZXVlX3NpZ25hbHMoKTsKCX0KfQoKLyoqLwpz dGF0aWMgdm9pZApnZGJtdW50aWUoUGFyYW0gcG0pCnsKICAgIEdEQk1fRklM RSBkYmYgPSAoKHN0cnVjdCBnc3Vfc2NhbGFyX2V4dCAqKXBtLT51Lmhhc2gt PnRtcGRhdGEpLT5kYmY7CiAgICBIYXNoVGFibGUgaHQgPSBwbS0+dS5oYXNo OwoKICAgIGlmIChkYmYpIHsgLyogcGFyYW5vaWEgKi8KCWZkdGFibGVbZ2Ri bV9mZGVzYyhkYmYpXSA9IEZEVF9VTlVTRUQ7CiAgICAgICAgZ2RibV9jbG9z ZShkYmYpOwoKICAgICAgICAvKiBMZXQgaGFzaCBmaWVsZHMga25vdyB0aGVy ZSdzIG5vIGJhY2tlbmQgKi8KICAgICAgICAoKHN0cnVjdCBnc3Vfc2NhbGFy X2V4dCAqKWh0LT50bXBkYXRhKS0+ZGJmID0gTlVMTDsKCiAgICAgICAgLyog UmVtb3ZlIGZyb20gbGlzdCBvZiB0aWVkIHBhcmFtZXRlcnMgKi8KICAgICAg ICByZW1vdmVfdGllZF9uYW1lKHBtLT5ub2RlLm5hbSk7CiAgICB9CgogICAg LyogZm9yIGNvbXBsZXRlbmVzcyAuLi4gY3JlYXRlc3BlY2lhbGhhc2goKSBz aG91bGQgaGF2ZSBhbiBpbnZlcnNlICovCiAgICBodC0+Z2V0bm9kZSA9IGh0 LT5nZXRub2RlMiA9IGdldGhhc2hub2RlMjsKICAgIGh0LT5zY2FudGFiID0g TlVMTDsKCiAgICBwbS0+bm9kZS5mbGFncyAmPSB+KFBNX1NQRUNJQUx8UE1f UkVBRE9OTFkpOwogICAgcG0tPmdzdS5oID0gJnN0ZGhhc2hfZ3N1Owp9Cgov KiovCnN0YXRpYyB2b2lkCmdkYm1oYXNodW5zZXRmbihQYXJhbSBwbSwgVU5V U0VEKGludCBleHApKQp7CiAgICBnZGJtdW50aWUocG0pOwoKICAgIC8qIFJl bWVtYmVyIGN1c3RvbSBHU1Ugc3RydWN0dXJlIGFzc2lnbmVkIHRvCiAgICAg KiB1Lmhhc2gtPnRtcGRhdGEgYmVmb3JlIGhhc2ggZ2V0cyBkZWxldGVkICov CiAgICBzdHJ1Y3QgZ3N1X3NjYWxhcl9leHQgKiBnc3VfZXh0ID0gcG0tPnUu aGFzaC0+dG1wZGF0YTsKCiAgICAvKiBVc2VzIG5vcm1hbCB1bnNldHRlci4g V2lsbCBkZWxldGUgYWxsIG93bmVkCiAgICAgKiBwYXJhbWV0ZXJzIGFuZCBh bHNvIGhhc2h0YWJsZS4gKi8KICAgIHBtLT5nc3UuaC0+c2V0Zm4ocG0sIE5V TEwpOwoKICAgIC8qIERvbid0IG5lZWQgY3VzdG9tIEdTVSBzdHJ1Y3R1cmUg d2l0aCBpdHMKICAgICAqIEdEQk1fRklMRSBwb2ludGVyIGFueW1vcmUgKi8K ICAgIHpzZnJlZSggZ3N1X2V4dC0+ZGJmaWxlX3BhdGggKTsKICAgIHpmcmVl KCBnc3VfZXh0LCBzaXplb2Yoc3RydWN0IGdzdV9zY2FsYXJfZXh0KSk7Cgog ICAgcG0tPm5vZGUuZmxhZ3MgfD0gUE1fVU5TRVQ7Cn0KCiNlbHNlCiMgZXJy b3Igbm8gZ2RibQojZW5kaWYgLyogaGF2ZSBnZGJtICovCgpzdGF0aWMgc3Ry dWN0IGZlYXR1cmVzIG1vZHVsZV9mZWF0dXJlcyA9IHsKICAgIGJpbnRhYiwg c2l6ZW9mKGJpbnRhYikvc2l6ZW9mKCpiaW50YWIpLAogICAgTlVMTCwgMCwK ICAgIE5VTEwsIDAsCiAgICBwYXRhYiwgc2l6ZW9mKHBhdGFiKS9zaXplb2Yo KnBhdGFiKSwKICAgIDAKfTsKCi8qKi8KaW50CnNldHVwXyhVTlVTRUQoTW9k dWxlIG0pKQp7CiAgICByZXR1cm4gMDsKfQoKLyoqLwppbnQKZmVhdHVyZXNf KE1vZHVsZSBtLCBjaGFyICoqKmZlYXR1cmVzKQp7CiAgICAqZmVhdHVyZXMg PSBmZWF0dXJlc2FycmF5KG0sICZtb2R1bGVfZmVhdHVyZXMpOwogICAgcmV0 dXJuIDA7Cn0KCi8qKi8KaW50CmVuYWJsZXNfKE1vZHVsZSBtLCBpbnQgKipl bmFibGVzKQp7CiAgICByZXR1cm4gaGFuZGxlZmVhdHVyZXMobSwgJm1vZHVs ZV9mZWF0dXJlcywgZW5hYmxlcyk7Cn0KCi8qKi8KaW50CmJvb3RfKFVOVVNF RChNb2R1bGUgbSkpCnsKICAgIHpnZGJtX3RpZWQgPSB6c2hjYWxsb2MoKDEp ICogc2l6ZW9mKGNoYXIgKikpOwogICAgcmV0dXJuIDA7Cn0KCi8qKi8KaW50 CmNsZWFudXBfKE1vZHVsZSBtKQp7CiAgICAvKiBUaGlzIGZyZWVzIGB6Z2Ri bV90aWVkYCAqLwogICAgcmV0dXJuIHNldGZlYXR1cmVlbmFibGVzKG0sICZt b2R1bGVfZmVhdHVyZXMsIE5VTEwpOwp9CgovKiovCmludApmaW5pc2hfKFVO VVNFRChNb2R1bGUgbSkpCnsKICAgIHJldHVybiAwOwp9CgovKioqKioqKioq KioqKioqKioqKioqCiAqIFV0aWxpdHkgZnVuY3Rpb25zICoKICoqKioqKioq KioqKioqKioqKioqKi8KCnN0YXRpYyBQYXJhbSBjcmVhdGVoYXNoKCBjaGFy ICpuYW1lLCBpbnQgZmxhZ3MgKSB7CiAgICBQYXJhbSBwbTsKICAgIEhhc2hU YWJsZSBodDsKCiAgICBwbSA9IGNyZWF0ZXBhcmFtKG5hbWUsIFBNX1NQRUNJ QUwgfCBQTV9IQVNIRUQpOwogICAgaWYgKCFwbSkgewogICAgICAgIHJldHVy biBOVUxMOwogICAgfQoKICAgIGlmIChwbS0+b2xkKQoJcG0tPmxldmVsID0g bG9jYWxsZXZlbDsKCiAgICAvKiBUaGlzIGNyZWF0ZXMgc3RhbmRhcmQgaGFz aC4gKi8KICAgIGh0ID0gcG0tPnUuaGFzaCA9IG5ld3BhcmFtdGFibGUoMzIs IG5hbWUpOwogICAgaWYgKCFwbS0+dS5oYXNoKSB7CiAgICAgICAgcGFyYW10 YWItPnJlbW92ZW5vZGUocGFyYW10YWIsIG5hbWUpOwogICAgICAgIHBhcmFt dGFiLT5mcmVlbm9kZSgmcG0tPm5vZGUpOwogICAgICAgIHp3YXJubmFtKG5h bWUsICJPdXQgb2YgbWVtb3J5IHdoZW4gYWxsb2NhdGluZyBoYXNoIik7CiAg ICB9CgogICAgLyogVGhlc2UgcHJvdmlkZSBzcGVjaWFsIGZlYXR1cmVzICov CiAgICBodC0+Z2V0bm9kZSA9IGh0LT5nZXRub2RlMiA9IGdldGdkYm1ub2Rl OwogICAgaHQtPnNjYW50YWIgPSBzY2FuZ2RibWtleXM7CgogICAgcmV0dXJu IHBtOwp9CgovKgogKiBBZGRzIHBhcmFtZXRlciBuYW1lIHRvIGB6Z2RibV90 aWVkYAogKi8KCnN0YXRpYyBpbnQgYXBwZW5kX3RpZWRfbmFtZSggY29uc3Qg Y2hhciAqbmFtZSApIHsKICAgIGludCBvbGRfbGVuID0gYXJybGVuKHpnZGJt X3RpZWQpOwogICAgY2hhciAqKm5ld196Z2RibV90aWVkID0genNoY2FsbG9j KCAob2xkX2xlbisyKSAqIHNpemVvZihjaGFyICopKTsKCiAgICAvKiBDb3B5 ICovCiAgICBjaGFyICoqcCA9IHpnZGJtX3RpZWQ7CiAgICBjaGFyICoqZHN0 ID0gbmV3X3pnZGJtX3RpZWQ7CiAgICB3aGlsZSAoKnApIHsKICAgICAgICAq ZHN0KysgPSAqcCsrOwogICAgfQoKICAgIC8qIEFwcGVuZCBuZXcgb25lICov CiAgICAqZHN0ID0genRyZHVwKG5hbWUpOwoKICAgIC8qIFN1YnN0aXR1dGUs IGZyZWUgb2xkIG9uZSAqLwogICAgemZyZWUoemdkYm1fdGllZCwgc2l6ZW9m KGNoYXIgKikgKiAob2xkX2xlbiArIDEpKTsKICAgIHpnZGJtX3RpZWQgPSBu ZXdfemdkYm1fdGllZDsKCiAgICByZXR1cm4gMDsKfQoKLyoKICogUmVtb3Zl cyBwYXJhbWV0ZXIgbmFtZSBmcm9tIGB6Z2RibV90aWVkYAogKi8KCnN0YXRp YyBpbnQgcmVtb3ZlX3RpZWRfbmFtZSggY29uc3QgY2hhciAqbmFtZSApIHsK ICAgIGludCBvbGRfbGVuID0gYXJybGVuKHpnZGJtX3RpZWQpOwoKICAgIC8q IFR3byBzdGFnZSwgdG8gYWx3YXlzIGhhdmUgYXJybGVuKCkgPT0gemZyZWUt c2l6ZSAtIDEuCiAgICAgKiBDb3VsZCBkbyBhbGxvY2F0aW9uIGFuZCByZXZl cnQgd2hlbiBgbm90IGZvdW5kYCwgYnV0CiAgICAgKiB3aGF0IHdvdWxkIGJl IGJldHRlciBhYm91dCB0aGF0LiAqLwoKICAgIC8qIEZpbmQgb25lIHRvIHJl bW92ZSAqLwogICAgY2hhciAqKnAgPSB6Z2RibV90aWVkOwogICAgd2hpbGUg KCpwKSB7CiAgICAgICAgaWYgKDA9PXN0cmNtcChuYW1lLCpwKSkgewogICAg ICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgcCsrOwogICAgfQoK ICAgIC8qIENvcHkgeCsxIHRvIHggKi8KICAgIHdoaWxlICgqcCkgewogICAg ICAgICpwPSoocCsxKTsKICAgICAgICBwKys7CiAgICB9CgogICAgLyogU2Vj b25kIHN0YWdlLiBTaXplIGNoYW5nZWQ/IE9ubHkgb2xkX3NpemUtMQogICAg ICogY2hhbmdlIGlzIHBvc3NpYmxlLCBidXQuLiBwYXJhbm9pYSB3YXkgKi8K ICAgIGludCBuZXdfbGVuID0gYXJybGVuKHpnZGJtX3RpZWQpOwogICAgaWYg KG5ld19sZW4gIT0gb2xkX2xlbikgewogICAgICAgIGNoYXIgKipuZXdfemdk Ym1fdGllZCA9IHpzaGNhbGxvYygobmV3X2xlbisxKSAqIHNpemVvZihjaGFy ICopKTsKCiAgICAgICAgLyogQ29weSAqLwogICAgICAgIHAgPSB6Z2RibV90 aWVkOwogICAgICAgIGNoYXIgKipkc3QgPSBuZXdfemdkYm1fdGllZDsKICAg ICAgICB3aGlsZSAoKnApIHsKICAgICAgICAgICAgKmRzdCsrID0gKnArKzsK ICAgICAgICB9CiAgICAgICAgKmRzdCA9IE5VTEw7CgogICAgICAgIC8qIFN1 YnN0aXR1dGUsIGZyZWUgb2xkIG9uZSAqLwogICAgICAgIHpmcmVlKHpnZGJt X3RpZWQsIHNpemVvZihjaGFyICopICogKG9sZF9sZW4gKyAxKSk7CiAgICAg ICAgemdkYm1fdGllZCA9IG5ld196Z2RibV90aWVkOwogICAgfQoKICAgIHJl dHVybiAwOwp9CgovKgogKiBVbm1ldGFmeSB0aGF0OgogKiAtIGR1cGxpY2F0 ZXMgYnVmZXIgdG8gd29yayBvbiBpdCwKICogLSBkb2VzIHphbGxvYyBvZiBl eGFjdCBzaXplIGZvciB0aGUgbmV3IHN0cmluZywKICogLSByZXN0b3JlcyB3 b3JrIGJ1ZmZlciB0byBvcmlnaW5hbCBjb250ZW50LCB0byByZXN0b3JlIHN0 cmxlbgogKgogKiBObyB6c2ZyZWUoKS1jb25mdXNpbmcgc3RyaW5nIHdpbGwg YmUgcHJvZHVjZWQuCiAqLwpjaGFyICp1bm1ldGFmeV96YWxsb2MoY29uc3Qg Y2hhciAqdG9fY29weSwgaW50ICpuZXdfbGVuKSB7CiAgICBjaGFyICp3b3Jr LCAqdG9fcmV0dXJuOwogICAgaW50IG15X25ld19sZW4gPSAwOwoKICAgIHdv cmsgPSB6dHJkdXAodG9fY29weSk7CiAgICB3b3JrID0gdW5tZXRhZnkod29y aywmbXlfbmV3X2xlbik7CgogICAgaWYgKG5ld19sZW4pCiAgICAgICAgKm5l d19sZW4gPSBteV9uZXdfbGVuOwoKICAgIC8qIFRoaXMgc3RyaW5nIGNhbiBi ZSBjb3JyZWN0bHkgenNmcmVlKCktZCAqLwogICAgdG9fcmV0dXJuID0gKGNo YXIgKikgemFsbG9jKChteV9uZXdfbGVuKzEpKnNpemVvZihjaGFyKSk7CiAg ICBtZW1jcHkodG9fcmV0dXJuLCB3b3JrLCBzaXplb2YoY2hhcikqbXlfbmV3 X2xlbik7IC8vIG1lbWNweSBoYW5kbGVzICQnXDAnCiAgICB0b19yZXR1cm5b bXlfbmV3X2xlbl09J1wwJzsKCiAgICAvKiBSZXN0b3JlIG9yaWdpbmFsIHN0 cmxlbiBhbmQgY29ycmVjdGx5IGZyZWUgKi8KICAgIHN0cmNweSh3b3JrLCB0 b19jb3B5KTsKICAgIHpzZnJlZSh3b3JrKTsKCiAgICByZXR1cm4gdG9fcmV0 dXJuOwp9Cg== --_----------=_148726101719070930--