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 1hhJcJ-00070q-U3 for pgsql-hackers@arkaria.postgresql.org; Sat, 29 Jun 2019 20:06:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1hhJbJ-0001js-4I for pgsql-hackers@arkaria.postgresql.org; Sat, 29 Jun 2019 20:05:33 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hhJbI-0001jl-4Q for pgsql-hackers@lists.postgresql.org; Sat, 29 Jun 2019 20:05:32 +0000 Received: from out3-smtp.messagingengine.com ([66.111.4.27]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hhJbD-0000Dg-HY for pgsql-hackers@postgresql.org; Sat, 29 Jun 2019 20:05:31 +0000 Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.nyi.internal (Postfix) with ESMTP id 0D99621E3E for ; Sat, 29 Jun 2019 16:05:25 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Sat, 29 Jun 2019 16:05:25 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-type:date:from:message-id :mime-version:subject:to:x-me-proxy:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm3; bh=T65xYPwTq85JPupvpe2R17EfArNhf thLn5T7uCc76IY=; b=lcFAqnsWgFLgkEpywt9LGh40oPn5Eawe/5SMYm1jFL/on bjDMWVMfoN/61OH7Sh63xKOWmsydN/UCtRPTYyYbqbdTyN8KR5NsWcX/fqtnjTmi olpsWJhspniRLzTNfqUDXBHtWT+itT1lpYWelvAu/ROYJtwvRKC5EuZ1JmM168Vg 04moa98YLbui6IkvLw7ewcFQsrMpbAmUhMBHvMhCz+m6j4oJbOboHpgZqto8SACi JUM55j1oxOJxhQ9lIjV8+1G87ZmHEGGeDPea9knipDmefEq/VKR/165jTwE18jcH lMO2+t9+3TTPtKTSsUDwlqbj59me4TuOspvG8C1KA== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduvddrvddvgddugeeiucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefhuffvohfkffgfgggtsehmtderre dtfeejnecuhfhrohhmpefrvghtvghrucfgihhsvghnthhrrghuthcuoehpvghtvghrrdgv ihhsvghnthhrrghuthesvdhnughquhgrughrrghnthdrtghomheqnecuffhomhgrihhnpe dvnhguqhhurggurhgrnhhtrdgtohhmnecukfhppeelfedrvdegvddrgedtrddvtddvnecu rfgrrhgrmhepmhgrihhlfhhrohhmpehpvghtvghrrdgvihhsvghnthhrrghuthesvdhnug hquhgrughrrghnthdrtghomhenucevlhhushhtvghrufhiiigvpedt X-ME-Proxy: Received: from april.pezone.net (p5df228ca.dip0.t-ipconnect.de [93.242.40.202]) by mail.messagingengine.com (Postfix) with ESMTPA id AD2A1380079 for ; Sat, 29 Jun 2019 16:05:23 -0400 (EDT) From: Peter Eisentraut Subject: base backup client as auxiliary backend process Openpgp: preference=signencrypt Autocrypt: addr=peter.eisentraut@2ndquadrant.com; prefer-encrypt=mutual; keydata= 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 3jI= To: pgsql-hackers Organization: 2ndQuadrant Message-ID: <61b8d18d-c922-ac99-b990-a31ba63cdcbb@2ndquadrant.com> Date: Sat, 29 Jun 2019 22:05:22 +0200 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------4D0CD1F1E218C27A7DDF4C65" Content-Language: en-US List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk This is a multi-part message in MIME format. --------------4D0CD1F1E218C27A7DDF4C65 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Setting up a standby instance is still quite complicated. You need to run pg_basebackup with all the right options. You need to make sure pg_basebackup has the right permissions for the target directories. The created instance has to be integrated into the operating system's start scripts. There is this slightly awkward business of the --recovery-conf option and how it interacts with other features. And you should probably run pg_basebackup under screen. And then how do you get notified when it's done. And when it's done you have to log back in and finish up. Too many steps. My idea is that the postmaster can launch a base backup worker, wait till it's done, then proceed with the rest of the startup. initdb gets a special option to create a "minimal" data directory with only a few files, directories, and the usual configuration files. Then you create a $PGDATA/basebackup.signal, start the postmaster as normal. It sees the signal file, launches an auxiliary process that runs the base backup, then proceeds with normal startup in standby mode. This makes a whole bunch of things much nicer: The connection information for where to get the base backup from comes from postgresql.conf, so you only need to specify it in one place. pg_basebackup is completely out of the picture; no need to deal with command-line options, --recovery-conf, screen, monitoring for completion, etc. If something fails, the base backup process can automatically be restarted (maybe). Operating system integration is much easier: You only call initdb and then pg_ctl or postgres, as you are already doing. Automated deployment systems don't need to wait for pg_basebackup to finish: You only call initdb, then start the server, and then you're done -- waiting for the base backup to finish can be done by the regular monitoring system. Attached is a very hackish patch to implement this. It works like this: # (assuming you have a primary already running somewhere) initdb -D data2 --minimal $EDITOR data2/postgresql.conf # set primary_conninfo pg_ctl -D data2 start (Curious side note: If you don’t set primary_conninfo in these steps, then libpq defaults apply, so the default behavior might end up being that a given instance attempts to replicate from itself.) It works for basic cases. It's missing tablespace support, proper fsyncing, progress reporting, probably more. Those would be pretty straightforward I think. The interesting bit is the delicate ordering of the postmaster startup: Normally, the pg_control file is read quite early, but if starting from a minimal data directory, we need to wait until the base backup is done. There is also the question what you do if the base backup fails halfway through. Currently you probably need to delete the whole data directory and start again with initdb. Better might be a way to start again and overwrite any existing files, but that can clearly also be dangerous. All this needs some careful analysis, but I think it's doable. Any thoughts? -- Peter Eisentraut http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services --------------4D0CD1F1E218C27A7DDF4C65 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="v1-0001-Base-backup-client-as-auxiliary-backend-process.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="v1-0001-Base-backup-client-as-auxiliary-backend-process.patc"; filename*1="h" RnJvbSAxY2YzNmRiMjUxNGIwNDQyODU3MDQ5NmZjOWQxMTQ1NTkxZmRhMGZjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogU2F0LCAyOSBKdW4gMjAxOSAyMTo1MjoyMSArMDIwMApTdWJqZWN0 OiBbUEFUQ0ggdjFdIEJhc2UgYmFja3VwIGNsaWVudCBhcyBhdXhpbGlhcnkgYmFja2VuZCBw cm9jZXNzCgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyAgICAgICAg ICAgICB8ICAxNCArLQogc3JjL2JhY2tlbmQvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jICAgICAg ICAgICAgIHwgICA5ICsKIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdzdGF0LmMgICAgICAg ICAgICAgICB8ICAgNiArCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYyAg ICAgICAgICAgfCAgOTUgKysrKystCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9NYWtlZmls ZSAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2Jhc2Vi YWNrdXBfY2xpZW50LmMgICB8ICAzMyArKwogLi4uL2xpYnBxd2FscmVjZWl2ZXIvbGlicHF3 YWxyZWNlaXZlci5jICAgICAgIHwgMzA4ICsrKysrKysrKysrKysrKysrKwogc3JjL2Jpbi9p bml0ZGIvaW5pdGRiLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDM5ICsrLQogc3JjL2lu Y2x1ZGUvYWNjZXNzL3hsb2cuaCAgICAgICAgICAgICAgICAgICAgIHwgICA0ICsKIHNyYy9p bmNsdWRlL21pc2NhZG1pbi5oICAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArCiBzcmMv aW5jbHVkZS9wZ3N0YXQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vYmFzZWJhY2t1cF9jbGllbnQuaCAgIHwgICAxICsKIHNy Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmggICAgICAgICB8ICAgNCArCiAx MyBmaWxlcyBjaGFuZ2VkLCA1MDIgaW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRpb25zKC0pCiBj cmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vYmFzZWJhY2t1cF9j bGllbnQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2Jh c2ViYWNrdXBfY2xpZW50LmgKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS94bG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKaW5kZXgg ZTA4MzIwZTgyOS4uZGE5Nzk3MDcwMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0veGxvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cu YwpAQCAtOTA1LDcgKzkwNSw2IEBAIHN0YXRpYyBYTG9nUmVjb3JkICpSZWFkQ2hlY2twb2lu dFJlY29yZChYTG9nUmVhZGVyU3RhdGUgKnhsb2dyZWFkZXIsCiAJCQkJCQkJCQkJWExvZ1Jl Y1B0ciBSZWNQdHIsIGludCB3aGljaENoa3B0aSwgYm9vbCByZXBvcnQpOwogc3RhdGljIGJv b2wgcmVzY2FuTGF0ZXN0VGltZUxpbmUodm9pZCk7CiBzdGF0aWMgdm9pZCBXcml0ZUNvbnRy b2xGaWxlKHZvaWQpOwotc3RhdGljIHZvaWQgUmVhZENvbnRyb2xGaWxlKHZvaWQpOwogc3Rh dGljIGNoYXIgKnN0cl90aW1lKHBnX3RpbWVfdCB0bm93KTsKIHN0YXRpYyBib29sIENoZWNr Rm9yU3RhbmRieVRyaWdnZXIodm9pZCk7CiAKQEAgLTQ1NzIsNyArNDU3MSw3IEBAIFdyaXRl Q29udHJvbEZpbGUodm9pZCkKIAkJCQkJCVhMT0dfQ09OVFJPTF9GSUxFKSkpOwogfQogCi1z dGF0aWMgdm9pZAordm9pZAogUmVhZENvbnRyb2xGaWxlKHZvaWQpCiB7CiAJcGdfY3JjMzJj CWNyYzsKQEAgLTYyMDksMTMgKzYyMDgsMTEgQEAgU3RhcnR1cFhMT0codm9pZCkKIAlDdXJy ZW50UmVzb3VyY2VPd25lciA9IEF1eFByb2Nlc3NSZXNvdXJjZU93bmVyOwogCiAJLyoKLQkg KiBWZXJpZnkgWExPRyBzdGF0dXMgbG9va3MgdmFsaWQuCisJICogQ2hlY2sgdGhhdCBjb250 ZW50cyBsb29rIHZhbGlkLgogCSAqLwotCWlmIChDb250cm9sRmlsZS0+c3RhdGUgPCBEQl9T SFVURE9XTkVEIHx8Ci0JCUNvbnRyb2xGaWxlLT5zdGF0ZSA+IERCX0lOX1BST0RVQ1RJT04g fHwKLQkJIVhSZWNPZmZJc1ZhbGlkKENvbnRyb2xGaWxlLT5jaGVja1BvaW50KSkKKwlpZiAo IVhSZWNPZmZJc1ZhbGlkKENvbnRyb2xGaWxlLT5jaGVja1BvaW50KSkKIAkJZXJlcG9ydChG QVRBTCwKLQkJCQkoZXJybXNnKCJjb250cm9sIGZpbGUgY29udGFpbnMgaW52YWxpZCBkYXRh IikpKTsKKwkJCQkoZXJybXNnKCJjb250cm9sIGZpbGUgY29udGFpbnMgaW52YWxpZCBjaGVj a3BvaW50IGxvY2F0aW9uIikpKTsKIAogCWlmIChDb250cm9sRmlsZS0+c3RhdGUgPT0gREJf U0hVVERPV05FRCkKIAl7CkBAIC02MjQ4LDYgKzYyNDUsOSBAQCBTdGFydHVwWExPRyh2b2lk KQogCQllcmVwb3J0KExPRywKIAkJCQkoZXJybXNnKCJkYXRhYmFzZSBzeXN0ZW0gd2FzIGlu dGVycnVwdGVkOyBsYXN0IGtub3duIHVwIGF0ICVzIiwKIAkJCQkJCXN0cl90aW1lKENvbnRy b2xGaWxlLT50aW1lKSkpKTsKKwllbHNlCisJCWVyZXBvcnQoRkFUQUwsCisJCQkJKGVycm1z ZygiY29udHJvbCBmaWxlIGNvbnRhaW5zIGludmFsaWQgZGF0YWJhc2UgY2x1c3RlciBzdGF0 ZSIpKSk7CiAKIAkvKiBUaGlzIGlzIGp1c3QgdG8gYWxsb3cgYXR0YWNoaW5nIHRvIHN0YXJ0 dXAgcHJvY2VzcyB3aXRoIGEgZGVidWdnZXIgKi8KICNpZmRlZiBYTE9HX1JFUExBWV9ERUxB WQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jIGIvc3Jj L2JhY2tlbmQvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jCmluZGV4IDQzNjI3YWI4ZjQuLjU3NzY5 YzE2MGMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Jvb3RzdHJhcC9ib290c3RyYXAuYwor KysgYi9zcmMvYmFja2VuZC9ib290c3RyYXAvYm9vdHN0cmFwLmMKQEAgLTM2LDYgKzM2LDcg QEAKICNpbmNsdWRlICJwb3N0bWFzdGVyL2Jnd3JpdGVyLmgiCiAjaW5jbHVkZSAicG9zdG1h c3Rlci9zdGFydHVwLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci93YWx3cml0ZXIuaCIKKyNp bmNsdWRlICJyZXBsaWNhdGlvbi9iYXNlYmFja3VwX2NsaWVudC5oIgogI2luY2x1ZGUgInJl cGxpY2F0aW9uL3dhbHJlY2VpdmVyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIK ICNpbmNsdWRlICJzdG9yYWdlL2J1ZnBhZ2UuaCIKQEAgLTMyNiw2ICszMjcsOSBAQCBBdXhp bGlhcnlQcm9jZXNzTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJY2FzZSBTdGFy dHVwUHJvY2VzczoKIAkJCQlzdGF0bXNnID0gcGdzdGF0X2dldF9iYWNrZW5kX2Rlc2MoQl9T VEFSVFVQKTsKIAkJCQlicmVhazsKKwkJCWNhc2UgQmFzZUJhY2t1cFByb2Nlc3M6CisJCQkJ c3RhdG1zZyA9IHBnc3RhdF9nZXRfYmFja2VuZF9kZXNjKEJfQkFTRV9CQUNLVVApOworCQkJ CWJyZWFrOwogCQkJY2FzZSBCZ1dyaXRlclByb2Nlc3M6CiAJCQkJc3RhdG1zZyA9IHBnc3Rh dF9nZXRfYmFja2VuZF9kZXNjKEJfQkdfV1JJVEVSKTsKIAkJCQlicmVhazsKQEAgLTQ1MSw2 ICs0NTUsMTEgQEAgQXV4aWxpYXJ5UHJvY2Vzc01haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKIAkJCVN0YXJ0dXBQcm9jZXNzTWFpbigpOwogCQkJcHJvY19leGl0KDEpOwkJLyogc2hv dWxkIG5ldmVyIHJldHVybiAqLwogCisJCWNhc2UgQmFzZUJhY2t1cFByb2Nlc3M6CisJCQkv KiBkb24ndCBzZXQgc2lnbmFscywgYmFzZWJhY2t1cCBoYXMgaXRzIG93biBhZ2VuZGEgKi8K KwkJCUJhc2VCYWNrdXBNYWluKCk7CisJCQlwcm9jX2V4aXQoMSk7CQkvKiBzaG91bGQgbmV2 ZXIgcmV0dXJuICovCisKIAkJY2FzZSBCZ1dyaXRlclByb2Nlc3M6CiAJCQkvKiBkb24ndCBz ZXQgc2lnbmFscywgYmd3cml0ZXIgaGFzIGl0cyBvd24gYWdlbmRhICovCiAJCQlCYWNrZ3Jv dW5kV3JpdGVyTWFpbigpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9w Z3N0YXQuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdzdGF0LmMKaW5kZXggYjRmMmIy OGI1MS4uNjY2NDkzMjE4MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9w Z3N0YXQuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bnc3RhdC5jCkBAIC0yOTM0 LDYgKzI5MzQsOSBAQCBwZ3N0YXRfYmVzdGFydCh2b2lkKQogCQkJY2FzZSBTdGFydHVwUHJv Y2VzczoKIAkJCQlsYmVlbnRyeS5zdF9iYWNrZW5kVHlwZSA9IEJfU1RBUlRVUDsKIAkJCQli cmVhazsKKwkJCWNhc2UgQmFzZUJhY2t1cFByb2Nlc3M6CisJCQkJbGJlZW50cnkuc3RfYmFj a2VuZFR5cGUgPSBCX0JBU0VfQkFDS1VQOworCQkJCWJyZWFrOwogCQkJY2FzZSBCZ1dyaXRl clByb2Nlc3M6CiAJCQkJbGJlZW50cnkuc3RfYmFja2VuZFR5cGUgPSBCX0JHX1dSSVRFUjsK IAkJCQlicmVhazsKQEAgLTQyODksNiArNDI5Miw5IEBAIHBnc3RhdF9nZXRfYmFja2VuZF9k ZXNjKEJhY2tlbmRUeXBlIGJhY2tlbmRUeXBlKQogCQljYXNlIEJfQkdfV09SS0VSOgogCQkJ YmFja2VuZERlc2MgPSAiYmFja2dyb3VuZCB3b3JrZXIiOwogCQkJYnJlYWs7CisJCWNhc2Ug Ql9CQVNFX0JBQ0tVUDoKKwkJCWJhY2tlbmREZXNjID0gImJhc2UgYmFja3VwIjsKKwkJCWJy ZWFrOwogCQljYXNlIEJfQkdfV1JJVEVSOgogCQkJYmFja2VuZERlc2MgPSAiYmFja2dyb3Vu ZCB3cml0ZXIiOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFz dGVyL3Bvc3RtYXN0ZXIuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5j CmluZGV4IDY4OGFkNDM5ZWQuLjI4N2IyMzMzOTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv cG9zdG1hc3Rlci5jCkBAIC0yNDgsNiArMjQ4LDcgQEAgYm9vbAkJcmVzdGFydF9hZnRlcl9j cmFzaCA9IHRydWU7CiAKIC8qIFBJRHMgb2Ygc3BlY2lhbCBjaGlsZCBwcm9jZXNzZXM7IDAg d2hlbiBub3QgcnVubmluZyAqLwogc3RhdGljIHBpZF90IFN0YXJ0dXBQSUQgPSAwLAorCQkJ QmFzZUJhY2t1cFBJRCA9IDAsCiAJCQlCZ1dyaXRlclBJRCA9IDAsCiAJCQlDaGVja3BvaW50 ZXJQSUQgPSAwLAogCQkJV2FsV3JpdGVyUElEID0gMCwKQEAgLTUzOSw2ICs1NDAsNyBAQCBz dGF0aWMgdm9pZCBTaG1lbUJhY2tlbmRBcnJheVJlbW92ZShCYWNrZW5kICpibik7CiAjZW5k aWYJCQkJCQkJLyogRVhFQ19CQUNLRU5EICovCiAKICNkZWZpbmUgU3RhcnR1cERhdGFCYXNl KCkJCVN0YXJ0Q2hpbGRQcm9jZXNzKFN0YXJ0dXBQcm9jZXNzKQorI2RlZmluZSBTdGFydEJh c2VCYWNrdXAoKQkJU3RhcnRDaGlsZFByb2Nlc3MoQmFzZUJhY2t1cFByb2Nlc3MpCiAjZGVm aW5lIFN0YXJ0QmFja2dyb3VuZFdyaXRlcigpIFN0YXJ0Q2hpbGRQcm9jZXNzKEJnV3JpdGVy UHJvY2VzcykKICNkZWZpbmUgU3RhcnRDaGVja3BvaW50ZXIoKQkJU3RhcnRDaGlsZFByb2Nl c3MoQ2hlY2twb2ludGVyUHJvY2VzcykKICNkZWZpbmUgU3RhcnRXYWxXcml0ZXIoKQkJU3Rh cnRDaGlsZFByb2Nlc3MoV2FsV3JpdGVyUHJvY2VzcykKQEAgLTU3Miw2ICs1NzQsOCBAQCBQ b3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWJvb2wJCWxpc3Rlbl9h ZGRyX3NhdmVkID0gZmFsc2U7CiAJaW50CQkJaTsKIAljaGFyCSAgICpvdXRwdXRfY29uZmln X3ZhcmlhYmxlID0gTlVMTDsKKwlzdHJ1Y3Qgc3RhdCBzdGF0X2J1ZjsKKwlib29sCQliYXNl YmFja3VwX3NpZ25hbF9maWxlX2ZvdW5kID0gZmFsc2U7CiAKIAlJbml0UHJvY2Vzc0dsb2Jh bHMoKTsKIApAQCAtODc3LDEyICs4ODEsMjcgQEAgUG9zdG1hc3Rlck1haW4oaW50IGFyZ2Ms IGNoYXIgKmFyZ3ZbXSkKIAkvKiBWZXJpZnkgdGhhdCBEYXRhRGlyIGxvb2tzIHJlYXNvbmFi bGUgKi8KIAljaGVja0RhdGFEaXIoKTsKIAotCS8qIENoZWNrIHRoYXQgcGdfY29udHJvbCBl eGlzdHMgKi8KLQljaGVja0NvbnRyb2xGaWxlKCk7Ci0KIAkvKiBBbmQgc3dpdGNoIHdvcmtp bmcgZGlyZWN0b3J5IGludG8gaXQgKi8KIAlDaGFuZ2VUb0RhdGFEaXIoKTsKIAorCWlmIChz dGF0KEJBU0VCQUNLVVBfU0lHTkFMX0ZJTEUsICZzdGF0X2J1ZikgPT0gMCkKKwl7CisJCWlu dCAgICAgICAgIGZkOworCisJCWZkID0gQmFzaWNPcGVuRmlsZVBlcm0oU1RBTkRCWV9TSUdO QUxfRklMRSwgT19SRFdSIHwgUEdfQklOQVJZLAorCQkJCQkJCSAgIFNfSVJVU1IgfCBTX0lX VVNSKTsKKwkJaWYgKGZkID49IDApCisJCXsKKwkJCSh2b2lkKSBwZ19mc3luYyhmZCk7CisJ CQljbG9zZShmZCk7CisJCX0KKwkJYmFzZWJhY2t1cF9zaWduYWxfZmlsZV9mb3VuZCA9IHRy dWU7CisJfQorCisJLyogQ2hlY2sgdGhhdCBwZ19jb250cm9sIGV4aXN0cyAqLworCWlmICgh YmFzZWJhY2t1cF9zaWduYWxfZmlsZV9mb3VuZCkKKwkJY2hlY2tDb250cm9sRmlsZSgpOwor CiAJLyoKIAkgKiBDaGVjayBmb3IgaW52YWxpZCBjb21iaW5hdGlvbnMgb2YgR1VDIHNldHRp bmdzLgogCSAqLwpAQCAtOTYxLDcgKzk4MCw4IEBAIFBvc3RtYXN0ZXJNYWluKGludCBhcmdj LCBjaGFyICphcmd2W10pCiAJICogcHJvY2Vzc2VzIHdpbGwgaW5oZXJpdCB0aGUgY29ycmVj dCBmdW5jdGlvbiBwb2ludGVyIGFuZCBub3QgbmVlZCB0bwogCSAqIHJlcGVhdCB0aGUgdGVz dC4KIAkgKi8KLQlMb2NhbFByb2Nlc3NDb250cm9sRmlsZShmYWxzZSk7CisJaWYgKCFiYXNl YmFja3VwX3NpZ25hbF9maWxlX2ZvdW5kKQorCQlMb2NhbFByb2Nlc3NDb250cm9sRmlsZShm YWxzZSk7CiAKIAkvKgogCSAqIEluaXRpYWxpemUgU1NMIGxpYnJhcnksIGlmIHNwZWNpZmll ZC4KQEAgLTEzNjMsNiArMTM4MywzMyBAQCBQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQogCSAqLwogCUFkZFRvRGF0YURpckxvY2tGaWxlKExPQ0tfRklMRV9MSU5F X1BNX1NUQVRVUywgUE1fU1RBVFVTX1NUQVJUSU5HKTsKIAorCWlmIChiYXNlYmFja3VwX3Np Z25hbF9maWxlX2ZvdW5kKQorCXsKKwkJQmFzZUJhY2t1cFBJRCA9IFN0YXJ0QmFzZUJhY2t1 cCgpOworCisJCS8qCisJCSAqIFhYWCB3YWl0IHVudGlsIGRvbmUKKwkJICovCisJCXdoaWxl IChCYXNlQmFja3VwUElEICE9IDApCisJCXsKKwkJCVBHX1NFVE1BU0soJlVuQmxvY2tTaWcp OworCQkJc2xlZXAoMik7CisJCQlQR19TRVRNQVNLKCZCbG9ja1NpZyk7CisJCX0KKworCQkv KgorCQkgKiBCYXNlIGJhY2t1cCBkb25lLCBub3cgc2lnbmFsIHN0YW5kYnkgbW9kZS4gIFhY WCBJcyB0aGVyZSBhIHVzZSBmb3IKKwkJICogc3dpdGNoaW5nIGludG8gKG5vbi1zdGFuZGJ5 KSByZWNvdmVyeSBoZXJlPyAgSG93IHdvdWxkIHRoYXQgYmUKKwkJICogY29uZmlndXJlZD8K KwkJICovCisJCWR1cmFibGVfcmVuYW1lKEJBU0VCQUNLVVBfU0lHTkFMX0ZJTEUsIFNUQU5E QllfU0lHTkFMX0ZJTEUsIEZBVEFMKTsKKworCQkvKgorCQkgKiBSZXJlYWQgdGhlIGNvbnRy b2wgZmlsZSB0aGF0IGNhbWUgaW4gd2l0aCB0aGUgYmFzZSBiYWNrdXAuCisJCSAqLworCQlS ZWFkQ29udHJvbEZpbGUoKTsKKwl9CisKIAkvKgogCSAqIFdlJ3JlIHJlYWR5IHRvIHJvY2sg YW5kIHJvbGwuLi4KIAkgKi8KQEAgLTI2MzEsNiArMjY3OCw4IEBAIFNJR0hVUF9oYW5kbGVy KFNJR05BTF9BUkdTKQogCQlTaWduYWxDaGlsZHJlbihTSUdIVVApOwogCQlpZiAoU3RhcnR1 cFBJRCAhPSAwKQogCQkJc2lnbmFsX2NoaWxkKFN0YXJ0dXBQSUQsIFNJR0hVUCk7CisJCWlm IChCYXNlQmFja3VwUElEICE9IDApCisJCQlzaWduYWxfY2hpbGQoQmFzZUJhY2t1cFBJRCwg U0lHSFVQKTsKIAkJaWYgKEJnV3JpdGVyUElEICE9IDApCiAJCQlzaWduYWxfY2hpbGQoQmdX cml0ZXJQSUQsIFNJR0hVUCk7CiAJCWlmIChDaGVja3BvaW50ZXJQSUQgIT0gMCkKQEAgLTI3 ODIsNiArMjgzMSw4IEBAIHBtZGllKFNJR05BTF9BUkdTKQogCiAJCQlpZiAoU3RhcnR1cFBJ RCAhPSAwKQogCQkJCXNpZ25hbF9jaGlsZChTdGFydHVwUElELCBTSUdURVJNKTsKKwkJCWlm IChCYXNlQmFja3VwUElEICE9IDApCisJCQkJc2lnbmFsX2NoaWxkKEJhc2VCYWNrdXBQSUQs IFNJR1RFUk0pOwogCQkJaWYgKEJnV3JpdGVyUElEICE9IDApCiAJCQkJc2lnbmFsX2NoaWxk KEJnV3JpdGVyUElELCBTSUdURVJNKTsKIAkJCWlmIChXYWxSZWNlaXZlclBJRCAhPSAwKQpA QCAtMjk5Nyw2ICszMDQ4LDIyIEBAIHJlYXBlcihTSUdOQUxfQVJHUykKIAkJCWNvbnRpbnVl OwogCQl9CiAKKwkJLyoKKwkJICogV2FzIGl0IHRoZSBiYXNlIGJhY2t1cCBwcm9jZXNzPwor CQkgKi8KKwkJaWYgKHBpZCA9PSBCYXNlQmFja3VwUElEKQorCQl7CisJCQlCYXNlQmFja3Vw UElEID0gMDsKKwkJCWlmIChFWElUX1NUQVRVU18wKGV4aXRzdGF0dXMpKQorCQkJCTsKKwkJ CWVsc2UgaWYgKEVYSVRfU1RBVFVTXzEoZXhpdHN0YXR1cykpCisJCQkJZWxvZyhGQVRBTCwg ImJhc2UgYmFja3VwIGZhaWxlZCIpOworCQkJZWxzZQorCQkJCUhhbmRsZUNoaWxkQ3Jhc2go cGlkLCBleGl0c3RhdHVzLAorCQkJCQkJCQkgXygiYmFzZSBiYWNrdXAgcHJvY2VzcyIpKTsK KwkJCWNvbnRpbnVlOworCQl9CisKIAkJLyoKIAkJICogV2FzIGl0IHRoZSBiZ3dyaXRlcj8g IE5vcm1hbCBleGl0IGNhbiBiZSBpZ25vcmVkOyB3ZSdsbCBzdGFydCBhIG5ldwogCQkgKiBv bmUgYXQgdGhlIG5leHQgaXRlcmF0aW9uIG9mIHRoZSBwb3N0bWFzdGVyJ3MgbWFpbiBsb29w LCBpZgpAQCAtMzUxNiw2ICszNTgzLDE4IEBAIEhhbmRsZUNoaWxkQ3Jhc2goaW50IHBpZCwg aW50IGV4aXRzdGF0dXMsIGNvbnN0IGNoYXIgKnByb2NuYW1lKQogCQlTdGFydHVwU3RhdHVz ID0gU1RBUlRVUF9TSUdOQUxFRDsKIAl9CiAKKwkvKiBUYWtlIGNhcmUgb2YgdGhlIGJhc2Ug YmFja3VwIHByb2Nlc3MgdG9vICovCisJaWYgKHBpZCA9PSBCYXNlQmFja3VwUElEKQorCQlC YXNlQmFja3VwUElEID0gMDsKKwllbHNlIGlmIChCYXNlQmFja3VwUElEICE9IDAgJiYgdGFr ZV9hY3Rpb24pCisJeworCQllcmVwb3J0KERFQlVHMiwKKwkJCQkoZXJybXNnX2ludGVybmFs KCJzZW5kaW5nICVzIHRvIHByb2Nlc3MgJWQiLAorCQkJCQkJCQkgKFNlbmRTdG9wID8gIlNJ R1NUT1AiIDogIlNJR1FVSVQiKSwKKwkJCQkJCQkJIChpbnQpIEJhc2VCYWNrdXBQSUQpKSk7 CisJCXNpZ25hbF9jaGlsZChCYXNlQmFja3VwUElELCAoU2VuZFN0b3AgPyBTSUdTVE9QIDog U0lHUVVJVCkpOworCX0KKwogCS8qIFRha2UgY2FyZSBvZiB0aGUgYmd3cml0ZXIgdG9vICov CiAJaWYgKHBpZCA9PSBCZ1dyaXRlclBJRCkKIAkJQmdXcml0ZXJQSUQgPSAwOwpAQCAtMzc1 MCw2ICszODI5LDcgQEAgUG9zdG1hc3RlclN0YXRlTWFjaGluZSh2b2lkKQogCQlpZiAoQ291 bnRDaGlsZHJlbihCQUNLRU5EX1RZUEVfTk9STUFMIHwgQkFDS0VORF9UWVBFX1dPUktFUikg PT0gMCAmJgogCQkJU3RhcnR1cFBJRCA9PSAwICYmCiAJCQlXYWxSZWNlaXZlclBJRCA9PSAw ICYmCisJCQlCYXNlQmFja3VwUElEID09IDAgJiYKIAkJCUJnV3JpdGVyUElEID09IDAgJiYK IAkJCShDaGVja3BvaW50ZXJQSUQgPT0gMCB8fAogCQkJICghRmF0YWxFcnJvciAmJiBTaHV0 ZG93biA8IEltbWVkaWF0ZVNodXRkb3duKSkgJiYKQEAgLTM4NDQsNiArMzkyNCw3IEBAIFBv c3RtYXN0ZXJTdGF0ZU1hY2hpbmUodm9pZCkKIAkJCS8qIFRoZXNlIG90aGVyIGd1eXMgc2hv dWxkIGJlIGRlYWQgYWxyZWFkeSAqLwogCQkJQXNzZXJ0KFN0YXJ0dXBQSUQgPT0gMCk7CiAJ CQlBc3NlcnQoV2FsUmVjZWl2ZXJQSUQgPT0gMCk7CisJCQlBc3NlcnQoQmFzZUJhY2t1cFBJ RCA9PSAwKTsKIAkJCUFzc2VydChCZ1dyaXRlclBJRCA9PSAwKTsKIAkJCUFzc2VydChDaGVj a3BvaW50ZXJQSUQgPT0gMCk7CiAJCQlBc3NlcnQoV2FsV3JpdGVyUElEID09IDApOwpAQCAt NDAyNyw2ICs0MTA4LDggQEAgVGVybWluYXRlQ2hpbGRyZW4oaW50IHNpZ25hbCkKIAkJaWYg KHNpZ25hbCA9PSBTSUdRVUlUIHx8IHNpZ25hbCA9PSBTSUdLSUxMKQogCQkJU3RhcnR1cFN0 YXR1cyA9IFNUQVJUVVBfU0lHTkFMRUQ7CiAJfQorCWlmIChCYXNlQmFja3VwUElEICE9IDAp CisJCXNpZ25hbF9jaGlsZChCZ1dyaXRlclBJRCwgc2lnbmFsKTsKIAlpZiAoQmdXcml0ZXJQ SUQgIT0gMCkKIAkJc2lnbmFsX2NoaWxkKEJnV3JpdGVyUElELCBzaWduYWwpOwogCWlmIChD aGVja3BvaW50ZXJQSUQgIT0gMCkKQEAgLTU0MDAsNiArNTQ4MywxMCBAQCBTdGFydENoaWxk UHJvY2VzcyhBdXhQcm9jVHlwZSB0eXBlKQogCQkJCWVyZXBvcnQoTE9HLAogCQkJCQkJKGVy cm1zZygiY291bGQgbm90IGZvcmsgc3RhcnR1cCBwcm9jZXNzOiAlbSIpKSk7CiAJCQkJYnJl YWs7CisJCQljYXNlIEJhc2VCYWNrdXBQcm9jZXNzOgorCQkJCWVyZXBvcnQoTE9HLAorCQkJ CQkJKGVycm1zZygiY291bGQgbm90IGZvcmsgYmFzZSBiYWNrdXAgcHJvY2VzczogJW0iKSkp OworCQkJCWJyZWFrOwogCQkJY2FzZSBCZ1dyaXRlclByb2Nlc3M6CiAJCQkJZXJlcG9ydChM T0csCiAJCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgZm9yayBiYWNrZ3JvdW5kIHdyaXRlciBw cm9jZXNzOiAlbSIpKSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9N YWtlZmlsZSBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL01ha2VmaWxlCmluZGV4IDU2MmI1 NWZiYWEuLjc0ODA5MzEwMGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL01ha2VmaWxlCkBAIC0x NCw3ICsxNCw3IEBAIGluY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9i YWwKIAogb3ZlcnJpZGUgQ1BQRkxBR1MgOj0gLUkuIC1JJChzcmNkaXIpICQoQ1BQRkxBR1Mp CiAKLU9CSlMgPSB3YWxzZW5kZXIubyB3YWxyZWNlaXZlcmZ1bmNzLm8gd2FscmVjZWl2ZXIu byBiYXNlYmFja3VwLm8gXAorT0JKUyA9IHdhbHNlbmRlci5vIHdhbHJlY2VpdmVyZnVuY3Mu byB3YWxyZWNlaXZlci5vIGJhc2ViYWNrdXAubyBiYXNlYmFja3VwX2NsaWVudC5vIFwKIAly ZXBsX2dyYW0ubyBzbG90Lm8gc2xvdGZ1bmNzLm8gc3luY3JlcC5vIHN5bmNyZXBfZ3JhbS5v CiAKIFNVQkRJUlMgPSBsb2dpY2FsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9iYXNlYmFja3VwX2NsaWVudC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vYmFz ZWJhY2t1cF9jbGllbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li40YTc1YTYwOTFmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vYmFzZWJhY2t1cF9jbGllbnQuYwpAQCAtMCwwICsxLDMzIEBACisjaW5jbHVkZSAicG9z dGdyZXMuaCIKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAicmVwbGljYXRp b24vYmFzZWJhY2t1cF9jbGllbnQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi93YWxyZWNl aXZlci5oIgorI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCisjaW5jbHVkZSAidXRpbHMvZ3Vj LmgiCisKK3ZvaWQKK0Jhc2VCYWNrdXBNYWluKHZvaWQpCit7CisJV2FsUmVjZWl2ZXJDb25u ICp3cmNvbm4gPSBOVUxMOworCWNoYXIJICAgKmVycjsKKworCS8qIExvYWQgdGhlIGxpYnBx LXNwZWNpZmljIGZ1bmN0aW9ucyAqLworCWxvYWRfZmlsZSgibGlicHF3YWxyZWNlaXZlciIs IGZhbHNlKTsKKwlpZiAoV2FsUmVjZWl2ZXJGdW5jdGlvbnMgPT0gTlVMTCkKKwkJZWxvZyhF UlJPUiwgImxpYnBxd2FscmVjZWl2ZXIgZGlkbid0IGluaXRpYWxpemUgY29ycmVjdGx5Iik7 CisKKwkvKiBFc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHByaW1hcnkgKi8KKwl3 cmNvbm4gPSB3YWxyY3ZfY29ubmVjdChQcmltYXJ5Q29ubkluZm8sIGZhbHNlLCBjbHVzdGVy X25hbWVbMF0gPyBjbHVzdGVyX25hbWUgOiAiYmFzZWJhY2t1cCIsICZlcnIpOworCWlmICgh d3Jjb25uKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJtc2coImNvdWxkIG5vdCBjb25u ZWN0IHRvIHRoZSBwcmltYXJ5IHNlcnZlcjogJXMiLCBlcnIpKSk7CisKKwl3YWxyY3ZfYmFz ZV9iYWNrdXAod3Jjb25uKTsKKworCXdhbHJjdl9kaXNjb25uZWN0KHdyY29ubik7CisKKwll bG9nKExPRywgImJhc2UgYmFja3VwIGNvbXBsZXRlZCIpOworCXByb2NfZXhpdCgwKTsKK30K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xpYnBxd2FscmVjZWl2ZXIv bGlicHF3YWxyZWNlaXZlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbGlicHF3YWxy ZWNlaXZlci9saWJwcXdhbHJlY2VpdmVyLmMKaW5kZXggNmViYTA4YTkyMC4uYjcyZDg0OWZk ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbGlicHF3YWxyZWNlaXZl ci9saWJwcXdhbHJlY2VpdmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbGli cHF3YWxyZWNlaXZlci9saWJwcXdhbHJlY2VpdmVyLmMKQEAgLTE3LDggKzE3LDEwIEBACiAj aW5jbHVkZSAicG9zdGdyZXMuaCIKIAogI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUg PHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KIAorI2luY2x1ZGUgImNvbW1v bi9zdHJpbmcuaCIKICNpbmNsdWRlICJsaWJwcS1mZS5oIgogI2luY2x1ZGUgInBxZXhwYnVm ZmVyLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2cuaCIKQEAgLTI3LDYgKzI5LDcgQEAKICNp bmNsdWRlICJtYi9wZ193Y2hhci5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1 ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInBndGFyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRp b24vd2FscmVjZWl2ZXIuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1 ZGUgInV0aWxzL21lbXV0aWxzLmgiCkBAIC02MSw2ICs2NCw3IEBAIHN0YXRpYyBpbnQJbGli cHFyY3Zfc2VydmVyX3ZlcnNpb24oV2FsUmVjZWl2ZXJDb25uICpjb25uKTsKIHN0YXRpYyB2 b2lkIGxpYnBxcmN2X3JlYWR0aW1lbGluZWhpc3RvcnlmaWxlKFdhbFJlY2VpdmVyQ29ubiAq Y29ubiwKIAkJCQkJCQkJCQkJIFRpbWVMaW5lSUQgdGxpLCBjaGFyICoqZmlsZW5hbWUsCiAJ CQkJCQkJCQkJCSBjaGFyICoqY29udGVudCwgaW50ICpsZW4pOworc3RhdGljIHZvaWQgbGli cHFyY3ZfYmFzZV9iYWNrdXAoV2FsUmVjZWl2ZXJDb25uICpjb25uKTsKIHN0YXRpYyBib29s IGxpYnBxcmN2X3N0YXJ0c3RyZWFtaW5nKFdhbFJlY2VpdmVyQ29ubiAqY29ubiwKIAkJCQkJ CQkJCWNvbnN0IFdhbFJjdlN0cmVhbU9wdGlvbnMgKm9wdGlvbnMpOwogc3RhdGljIHZvaWQg bGlicHFyY3ZfZW5kc3RyZWFtaW5nKFdhbFJlY2VpdmVyQ29ubiAqY29ubiwKQEAgLTg4LDYg KzkyLDcgQEAgc3RhdGljIFdhbFJlY2VpdmVyRnVuY3Rpb25zVHlwZSBQUVdhbFJlY2VpdmVy RnVuY3Rpb25zID0gewogCWxpYnBxcmN2X2lkZW50aWZ5X3N5c3RlbSwKIAlsaWJwcXJjdl9z ZXJ2ZXJfdmVyc2lvbiwKIAlsaWJwcXJjdl9yZWFkdGltZWxpbmVoaXN0b3J5ZmlsZSwKKwls aWJwcXJjdl9iYXNlX2JhY2t1cCwKIAlsaWJwcXJjdl9zdGFydHN0cmVhbWluZywKIAlsaWJw cXJjdl9lbmRzdHJlYW1pbmcsCiAJbGlicHFyY3ZfcmVjZWl2ZSwKQEAgLTM1Niw2ICszNjEs MzA5IEBAIGxpYnBxcmN2X3NlcnZlcl92ZXJzaW9uKFdhbFJlY2VpdmVyQ29ubiAqY29ubikK IAlyZXR1cm4gUFFzZXJ2ZXJWZXJzaW9uKGNvbm4tPnN0cmVhbUNvbm4pOwogfQogCisvKgor ICogWFhYIGNvcGllZCBmcm9tIHBnX2Jhc2ViYWNrdXAuYworICovCitzdGF0aWMgdm9pZAor UmVjZWl2ZUFuZFVucGFja1RhckZpbGUoUEdjb25uICpjb25uLCBQR3Jlc3VsdCAqcmVzLCBp bnQgcm93bnVtKQoreworCWNoYXIJCWN1cnJlbnRfcGF0aFtNQVhQR1BBVEhdOworCWNoYXIJ CWZpbGVuYW1lW01BWFBHUEFUSF07CisJcGdvZmZfdAkJY3VycmVudF9sZW5fbGVmdCA9IDA7 CisJaW50CQkJY3VycmVudF9wYWRkaW5nID0gMDsKKwljaGFyCSAgICpjb3B5YnVmID0gTlVM TDsKKwlGSUxFCSAgICpmaWxlID0gTlVMTDsKKworCXN0cmxjcHkoY3VycmVudF9wYXRoLCBE YXRhRGlyLCBzaXplb2YoY3VycmVudF9wYXRoKSk7CisKKwkvKgorCSAqIEdldCB0aGUgQ09Q WSBkYXRhCisJICovCisJcmVzID0gUFFnZXRSZXN1bHQoY29ubik7CisJaWYgKFBRcmVzdWx0 U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09QWV9PVVQpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJ KGVycm1zZygiY291bGQgbm90IGdldCBDT1BZIGRhdGEgc3RyZWFtOiAlcyIsCisJCQkJCQlQ UWVycm9yTWVzc2FnZShjb25uKSkpKTsKKworCXdoaWxlICgxKQorCXsKKwkJaW50CQkJcjsK KworCQlpZiAoY29weWJ1ZiAhPSBOVUxMKQorCQl7CisJCQlQUWZyZWVtZW0oY29weWJ1Zik7 CisJCQljb3B5YnVmID0gTlVMTDsKKwkJfQorCisJCXIgPSBQUWdldENvcHlEYXRhKGNvbm4s ICZjb3B5YnVmLCAwKTsKKworCQlpZiAociA9PSAtMSkKKwkJeworCQkJLyoKKwkJCSAqIEVu ZCBvZiBjaHVuaworCQkJICovCisJCQlpZiAoZmlsZSkKKwkJCQlmY2xvc2UoZmlsZSk7CisK KwkJCWJyZWFrOworCQl9CisJCWVsc2UgaWYgKHIgPT0gLTIpCisJCXsKKwkJCWVyZXBvcnQo RVJST1IsCisJCQkJCShlcnJtc2coImNvdWxkIG5vdCByZWFkIENPUFkgZGF0YTogJXMiLAor CQkJCQkJCVBRZXJyb3JNZXNzYWdlKGNvbm4pKSkpOworCQl9CisKKwkJaWYgKGZpbGUgPT0g TlVMTCkKKwkJeworCQkJaW50CQkJZmlsZW1vZGU7CisKKwkJCS8qCisJCQkgKiBObyBjdXJy ZW50IGZpbGUsIHNvIHRoaXMgbXVzdCBiZSB0aGUgaGVhZGVyIGZvciBhIG5ldyBmaWxlCisJ CQkgKi8KKwkJCWlmIChyICE9IDUxMikKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVy cm1zZygiaW52YWxpZCB0YXIgYmxvY2sgaGVhZGVyIHNpemU6ICVkIiwgcikpKTsKKworCQkJ Y3VycmVudF9sZW5fbGVmdCA9IHJlYWRfdGFyX251bWJlcigmY29weWJ1ZlsxMjRdLCAxMik7 CisKKwkJCS8qIFNldCBwZXJtaXNzaW9ucyBvbiB0aGUgZmlsZSAqLworCQkJZmlsZW1vZGUg PSByZWFkX3Rhcl9udW1iZXIoJmNvcHlidWZbMTAwXSwgOCk7CisKKwkJCS8qCisJCQkgKiBB bGwgZmlsZXMgYXJlIHBhZGRlZCB1cCB0byA1MTIgYnl0ZXMKKwkJCSAqLworCQkJY3VycmVu dF9wYWRkaW5nID0KKwkJCQkoKGN1cnJlbnRfbGVuX2xlZnQgKyA1MTEpICYgfjUxMSkgLSBj dXJyZW50X2xlbl9sZWZ0OworCisJCQkvKgorCQkJICogRmlyc3QgcGFydCBvZiBoZWFkZXIg aXMgemVybyB0ZXJtaW5hdGVkIGZpbGVuYW1lCisJCQkgKi8KKwkJCXNucHJpbnRmKGZpbGVu YW1lLCBzaXplb2YoZmlsZW5hbWUpLCAiJXMvJXMiLCBjdXJyZW50X3BhdGgsCisJCQkJCSBj b3B5YnVmKTsKKwkJCWlmIChmaWxlbmFtZVtzdHJsZW4oZmlsZW5hbWUpIC0gMV0gPT0gJy8n KQorCQkJeworCQkJCS8qCisJCQkJICogRW5kcyBpbiBhIHNsYXNoIG1lYW5zIGRpcmVjdG9y eSBvciBzeW1saW5rIHRvIGRpcmVjdG9yeQorCQkJCSAqLworCQkJCWlmIChjb3B5YnVmWzE1 Nl0gPT0gJzUnKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogRGlyZWN0b3J5CisJCQkJCSAq LworCQkJCQlmaWxlbmFtZVtzdHJsZW4oZmlsZW5hbWUpIC0gMV0gPSAnXDAnOwkvKiBSZW1v dmUgdHJhaWxpbmcgc2xhc2ggKi8KKwkJCQkJaWYgKE1ha2VQR0RpcmVjdG9yeShmaWxlbmFt ZSkgIT0gMCkKKwkJCQkJeworCQkJCQkJaWYgKGVycm5vICE9IEVFWElTVCkKKwkJCQkJCXsK KwkJCQkJCQllbG9nKEVSUk9SLCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIlc1wi OiAlbSIsCisJCQkJCQkJCSBmaWxlbmFtZSk7CisJCQkJCQl9CisJCQkJCX0KKyNpZm5kZWYg V0lOMzIKKwkJCQkJaWYgKGNobW9kKGZpbGVuYW1lLCAobW9kZV90KSBmaWxlbW9kZSkpCisJ CQkJCQllbG9nKEVSUk9SLCAiY291bGQgbm90IHNldCBwZXJtaXNzaW9ucyBvbiBkaXJlY3Rv cnkgXCIlc1wiOiAlbSIsCisJCQkJCQkJIGZpbGVuYW1lKTsKKyNlbmRpZgorCQkJCX0KKwkJ CQllbHNlIGlmIChjb3B5YnVmWzE1Nl0gPT0gJzInKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJ ICogU3ltYm9saWMgbGluaworCQkJCQkgKgorCQkJCQkgKiBJdCdzIG1vc3QgbGlrZWx5IGEg bGluayBpbiBwZ190YmxzcGMgZGlyZWN0b3J5LCB0byB0aGUKKwkJCQkJICogbG9jYXRpb24g b2YgYSB0YWJsZXNwYWNlLiBBcHBseSBhbnkgdGFibGVzcGFjZSBtYXBwaW5nCisJCQkJCSAq IGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUgKC0tdGFibGVzcGFjZS1tYXBwaW5nKS4gKFdl CisJCQkJCSAqIGJsaW5kbHkgYXBwbHkgdGhlIG1hcHBpbmcgd2l0aG91dCBjaGVja2luZyB0 aGF0IHRoZQorCQkJCQkgKiBsaW5rIHJlYWxseSBpcyBpbnNpZGUgcGdfdGJsc3BjLiBXZSBk b24ndCBleHBlY3QgdGhlcmUKKwkJCQkJICogdG8gYmUgb3RoZXIgc3ltbGlua3MgaW4gYSBk YXRhIGRpcmVjdG9yeSwgYnV0IGlmIHRoZXJlCisJCQkJCSAqIGFyZSwgeW91IGNhbiBjYWxs IGl0IGFuIHVuZG9jdW1lbnRlZCBmZWF0dXJlIHRoYXQgeW91CisJCQkJCSAqIGNhbiBtYXAg dGhlbSB0b28uKQorCQkJCQkgKi8KKyNpZmRlZiBUT0RPCisJCQkJCWZpbGVuYW1lW3N0cmxl bihmaWxlbmFtZSkgLSAxXSA9ICdcMCc7CS8qIFJlbW92ZSB0cmFpbGluZyBzbGFzaCAqLwor CisJCQkJCW1hcHBlZF90YmxzcGNfcGF0aCA9IGdldF90YWJsZXNwYWNlX21hcHBpbmcoJmNv cHlidWZbMTU3XSk7CisJCQkJCWlmIChzeW1saW5rKG1hcHBlZF90YmxzcGNfcGF0aCwgZmls ZW5hbWUpICE9IDApCisJCQkJCXsKKwkJCQkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGNy ZWF0ZSBzeW1ib2xpYyBsaW5rIGZyb20gXCIlc1wiIHRvIFwiJXNcIjogJW0iLAorCQkJCQkJ CQkJIGZpbGVuYW1lLCBtYXBwZWRfdGJsc3BjX3BhdGgpOworCQkJCQkJZXhpdCgxKTsKKwkJ CQkJfQorI2VuZGlmCisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCWVsb2coRVJST1Is ICJ1bnJlY29nbml6ZWQgbGluayBpbmRpY2F0b3IgXCIlY1wiIiwKKwkJCQkJCSBjb3B5YnVm WzE1Nl0pOworCQkJCX0KKwkJCQljb250aW51ZTsJCS8qIGRpcmVjdG9yeSBvciBsaW5rIGhh bmRsZWQgKi8KKwkJCX0KKworCQkJLyoKKwkJCSAqIHJlZ3VsYXIgZmlsZQorCQkJICovCisJ CQlmaWxlID0gZm9wZW4oZmlsZW5hbWUsICJ3YiIpOworCQkJaWYgKCFmaWxlKQorCQkJCWVs b2coRVJST1IsICJjb3VsZCBub3QgY3JlYXRlIGZpbGUgXCIlc1wiOiAlbSIsIGZpbGVuYW1l KTsKKworI2lmbmRlZiBXSU4zMgorCQkJaWYgKGNobW9kKGZpbGVuYW1lLCAobW9kZV90KSBm aWxlbW9kZSkpCisJCQkJZWxvZyhFUlJPUiwgImNvdWxkIG5vdCBzZXQgcGVybWlzc2lvbnMg b24gZmlsZSBcIiVzXCI6ICVtIiwKKwkJCQkJIGZpbGVuYW1lKTsKKyNlbmRpZgorCisJCQlp ZiAoY3VycmVudF9sZW5fbGVmdCA9PSAwKQorCQkJeworCQkJCS8qCisJCQkJICogRG9uZSB3 aXRoIHRoaXMgZmlsZSwgbmV4dCBvbmUgd2lsbCBiZSBhIG5ldyB0YXIgaGVhZGVyCisJCQkJ ICovCisJCQkJZmNsb3NlKGZpbGUpOworCQkJCWZpbGUgPSBOVUxMOworCQkJCWNvbnRpbnVl OworCQkJfQorCQl9CQkJCQkJLyogbmV3IGZpbGUgKi8KKwkJZWxzZQorCQl7CisJCQkvKgor CQkJICogQ29udGludWluZyBibG9ja3MgaW4gZXhpc3RpbmcgZmlsZQorCQkJICovCisJCQlp ZiAoY3VycmVudF9sZW5fbGVmdCA9PSAwICYmIHIgPT0gY3VycmVudF9wYWRkaW5nKQorCQkJ eworCQkJCS8qCisJCQkJICogUmVjZWl2ZWQgdGhlIHBhZGRpbmcgYmxvY2sgZm9yIHRoaXMg ZmlsZSwgaWdub3JlIGl0IGFuZAorCQkJCSAqIGNsb3NlIHRoZSBmaWxlLCB0aGVuIG1vdmUg b24gdG8gdGhlIG5leHQgdGFyIGhlYWRlci4KKwkJCQkgKi8KKwkJCQlmY2xvc2UoZmlsZSk7 CisJCQkJZmlsZSA9IE5VTEw7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmIChmd3Jp dGUoY29weWJ1ZiwgciwgMSwgZmlsZSkgIT0gMSkKKwkJCQllbG9nKEVSUk9SLCAiY291bGQg bm90IHdyaXRlIHRvIGZpbGUgXCIlc1wiOiAlbSIsIGZpbGVuYW1lKTsKKworCQkJY3VycmVu dF9sZW5fbGVmdCAtPSByOworCQkJaWYgKGN1cnJlbnRfbGVuX2xlZnQgPT0gMCAmJiBjdXJy ZW50X3BhZGRpbmcgPT0gMCkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFJlY2VpdmVkIHRoZSBs YXN0IGJsb2NrLCBhbmQgdGhlcmUgaXMgbm8gcGFkZGluZyB0byBiZQorCQkJCSAqIGV4cGVj dGVkLiBDbG9zZSB0aGUgZmlsZSBhbmQgbW92ZSBvbiB0byB0aGUgbmV4dCB0YXIKKwkJCQkg KiBoZWFkZXIuCisJCQkJICovCisJCQkJZmNsb3NlKGZpbGUpOworCQkJCWZpbGUgPSBOVUxM OworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CQkJCQkJLyogY29udGludWluZyBkYXRhIGlu IGV4aXN0aW5nIGZpbGUgKi8KKwl9CQkJCQkJCS8qIGxvb3Agb3ZlciBhbGwgZGF0YSBibG9j a3MgKi8KKworCWlmIChmaWxlICE9IE5VTEwpCisJCWVsb2coRVJST1IsICJDT1BZIHN0cmVh bSBlbmRlZCBiZWZvcmUgbGFzdCBmaWxlIHdhcyBmaW5pc2hlZCIpOworCisJaWYgKGNvcHli dWYgIT0gTlVMTCkKKwkJUFFmcmVlbWVtKGNvcHlidWYpOworfQorCisvKgorICogTWFrZSBi YXNlIGJhY2t1cCBmcm9tIHJlbW90ZSBhbmQgd3JpdGUgdG8gbG9jYWwgZGlzay4KKyAqLwor c3RhdGljIHZvaWQKK2xpYnBxcmN2X2Jhc2VfYmFja3VwKFdhbFJlY2VpdmVyQ29ubiAqY29u bikKK3sKKwlQR3Jlc3VsdCAgICpyZXM7CisKKwllbG9nKExPRywgImluaXRpYXRpbmcgYmFz ZSBiYWNrdXAsIHdhaXRpbmcgZm9yIHJlbW90ZSBjaGVja3BvaW50IHRvIGNvbXBsZXRlIik7 CisKKwlpZiAoUFFzZW5kUXVlcnkoY29ubi0+c3RyZWFtQ29ubiwgIkJBU0VfQkFDS1VQIikg PT0gMCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJybXNnKCJjb3VsZCBub3Qgc3RhcnQg YmFzZSBiYWNrdXAgb24gcmVtb3RlIHNlcnZlcjogJXMiLAorCQkJCQkJcGNob21wKFBRZXJy b3JNZXNzYWdlKGNvbm4tPnN0cmVhbUNvbm4pKSkpKTsKKworCS8qCisJICogRmlyc3QgcmVz dWx0IHNldDogV0FMIHN0YXJ0IHBvc2l0aW9uIGFuZCB0aW1lbGluZSBJRDsgd2Ugc2tpcCBp dC4KKwkgKi8KKwlyZXMgPSBQUWdldFJlc3VsdChjb25uLT5zdHJlYW1Db25uKTsKKwlpZiAo UFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19UVVBMRVNfT0spCisJeworCQlQUWNsZWFy KHJlcyk7CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycm1zZygiY291bGQgbm90IHN0YXJ0 IGJhc2UgYmFja3VwIG9uIHJlbW90ZSBzZXJ2ZXI6ICVzIiwKKwkJCQkJCXBjaG9tcChQUWVy cm9yTWVzc2FnZShjb25uLT5zdHJlYW1Db25uKSkpKSk7CisJfQorCisJZXJlcG9ydChMT0cs CisJCQkoZXJybXNnKCJyZW1vdGUgY2hlY2twb2ludCBjb21wbGV0ZWQiKSkpOworCisJUFFj bGVhcihyZXMpOworCisJLyoKKwkgKiBTZWNvbmQgcmVzdWx0IHNldDogdGFibGVzcGFjZSBp bmZvcm1hdGlvbgorCSAqLworCXJlcyA9IFBRZ2V0UmVzdWx0KGNvbm4tPnN0cmVhbUNvbm4p OworCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX1RVUExFU19PSykKKwl7CisJ CVBRY2xlYXIocmVzKTsKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJybXNnKCJjb3VsZCBu b3QgZ2V0IGJhY2t1cCBoZWFkZXI6ICVzIiwKKwkJCQkJCXBjaG9tcChQUWVycm9yTWVzc2Fn ZShjb25uLT5zdHJlYW1Db25uKSkpKSk7CisJfQorCWlmIChQUW50dXBsZXMocmVzKSA8IDEp CisJeworCQlQUWNsZWFyKHJlcyk7CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycm1zZygi bm8gZGF0YSByZXR1cm5lZCBmcm9tIHNlcnZlciIpKSk7CisJfQorCisJLyoKKwkgKiBTdGFy dCByZWNlaXZpbmcgY2h1bmtzCisJICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBQUW50dXBs ZXMocmVzKTsgaSsrKQorCXsKKwkJUmVjZWl2ZUFuZFVucGFja1RhckZpbGUoY29ubi0+c3Ry ZWFtQ29ubiwgcmVzLCBpKTsKKwl9CisKKwlQUWNsZWFyKHJlcyk7CisKKwkvKgorCSAqIEZp bmFsIHJlc3VsdCBzZXQ6IFdBTCBlbmQgcG9zaXRpb24gYW5kIHRpbWVsaW5lIElECisJICov CisJcmVzID0gUFFnZXRSZXN1bHQoY29ubi0+c3RyZWFtQ29ubik7CisJaWYgKFBRcmVzdWx0 U3RhdHVzKHJlcykgIT0gUEdSRVNfVFVQTEVTX09LKQorCXsKKwkJUFFjbGVhcihyZXMpOwor CQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJtc2coImNvdWxkIG5vdCBnZXQgd3JpdGUtYWhl YWQgbG9nIGVuZCBwb3NpdGlvbiBmcm9tIHNlcnZlcjogJXMiLAorCQkJCQkJcGNob21wKFBR ZXJyb3JNZXNzYWdlKGNvbm4tPnN0cmVhbUNvbm4pKSkpKTsKKwl9CisJaWYgKFBRbnR1cGxl cyhyZXMpICE9IDEpCisJeworCQlQUWNsZWFyKHJlcyk7CisJCWVyZXBvcnQoRVJST1IsCisJ CQkJKGVycm1zZygibm8gd3JpdGUtYWhlYWQgbG9nIGVuZCBwb3NpdGlvbiByZXR1cm5lZCBm cm9tIHNlcnZlciIpKSk7CisJfQorCVBRY2xlYXIocmVzKTsKKworCXJlcyA9IFBRZ2V0UmVz dWx0KGNvbm4tPnN0cmVhbUNvbm4pOworCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBH UkVTX0NPTU1BTkRfT0spCisJeworI2lmZGVmIFRPRE8KKwkJY29uc3QgY2hhciAqc3Fsc3Rh dGUgPSBQUXJlc3VsdEVycm9yRmllbGQocmVzLCBQR19ESUFHX1NRTFNUQVRFKTsKKworCQlp ZiAoc3Fsc3RhdGUgJiYKKwkJCXN0cmNtcChzcWxzdGF0ZSwgRVJSQ09ERV9EQVRBX0NPUlJV UFRFRCkgPT0gMCkKKwkJeworCQkJZWxvZyhFUlJPUiwgImNoZWNrc3VtIGVycm9yIG9jY3Vy cmVkIik7CisJCX0KKwkJZWxzZQorI2VuZGlmCisJCXsKKwkJCWVsb2coRVJST1IsICJmaW5h bCByZWNlaXZlIGZhaWxlZDogJXMiLAorCQkJCSBwY2hvbXAoUFFlcnJvck1lc3NhZ2UoY29u bi0+c3RyZWFtQ29ubikpKTsKKwkJfQorCX0KKwlQUWNsZWFyKHJlcyk7Cit9CisKIC8qCiAg KiBTdGFydCBzdHJlYW1pbmcgV0FMIGRhdGEgZnJvbSBnaXZlbiBzdHJlYW1pbmcgb3B0aW9u cy4KICAqCmRpZmYgLS1naXQgYS9zcmMvYmluL2luaXRkYi9pbml0ZGIuYyBiL3NyYy9iaW4v aW5pdGRiL2luaXRkYi5jCmluZGV4IGFkNWNkNDE5NGEuLjRjNGVjNzgwOTUgMTAwNjQ0Ci0t LSBhL3NyYy9iaW4vaW5pdGRiL2luaXRkYi5jCisrKyBiL3NyYy9iaW4vaW5pdGRiL2luaXRk Yi5jCkBAIC0xMzYsNiArMTM2LDcgQEAgc3RhdGljIGNoYXIgKnB3ZmlsZW5hbWUgPSBOVUxM Owogc3RhdGljIGNoYXIgKnN1cGVydXNlcl9wYXNzd29yZCA9IE5VTEw7CiBzdGF0aWMgY29u c3QgY2hhciAqYXV0aG1ldGhvZGhvc3QgPSBOVUxMOwogc3RhdGljIGNvbnN0IGNoYXIgKmF1 dGhtZXRob2Rsb2NhbCA9IE5VTEw7CitzdGF0aWMgYm9vbCBtaW5pbWFsID0gZmFsc2U7CiBz dGF0aWMgYm9vbCBkZWJ1ZyA9IGZhbHNlOwogc3RhdGljIGJvb2wgbm9jbGVhbiA9IGZhbHNl Owogc3RhdGljIGJvb2wgZG9fc3luYyA9IHRydWU7CkBAIC0yOTYyLDYgKzI5NjMsMjIgQEAg aW5pdGlhbGl6ZV9kYXRhX2RpcmVjdG9yeSh2b2lkKQogCS8qIE5vdyBjcmVhdGUgYWxsIHRo ZSB0ZXh0IGNvbmZpZyBmaWxlcyAqLwogCXNldHVwX2NvbmZpZygpOwogCisJLyoKKwkgKiBJ ZiBtaW5pbWFsIGRhdGEgZGlyZWN0b3J5IHJlcXVlc3RlZCwgd3JpdGUgYmFzZWJhY2t1cC5z aWduYWwsIGFuZCB0aGVuCisJICogd2UgYXJlIGRvbmUgaGVyZS4KKwkgKi8KKwlpZiAobWlu aW1hbCkKKwl7CisJCWNoYXIJICAgKnBhdGg7CisJCWNoYXIJICAgKmxpbmVzWzFdID0ge05V TEx9OworCisJCXBhdGggPSBwc3ByaW50ZigiJXMvYmFzZWJhY2t1cC5zaWduYWwiLCBwZ19k YXRhKTsKKwkJd3JpdGVmaWxlKHBhdGgsIGxpbmVzKTsKKwkJZnJlZShwYXRoKTsKKworCQly ZXR1cm47CisJfQorCiAJLyogQm9vdHN0cmFwIHRlbXBsYXRlMSAqLwogCWJvb3RzdHJhcF90 ZW1wbGF0ZTEoKTsKIApAQCAtMzA1Myw2ICszMDcwLDcgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQogCQl7IndhbC1zZWdzaXplIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEws IDEyfSwKIAkJeyJkYXRhLWNoZWNrc3VtcyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnayd9LAog CQl7ImFsbG93LWdyb3VwLWFjY2VzcyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnZyd9LAorCQl7 Im1pbmltYWwiLCBub19hcmd1bWVudCwgTlVMTCwgJ20nfSwKIAkJe05VTEwsIDAsIE5VTEws IDB9CiAJfTsKIApAQCAtMzA5NCw3ICszMTEyLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdKQogCiAJLyogcHJvY2VzcyBjb21tYW5kLWxpbmUgb3B0aW9ucyAqLwogCi0Jd2hp bGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImREOkU6a0w6bk5VOldBOnNTVDpY OmciLCBsb25nX29wdGlvbnMsICZvcHRpb25faW5kZXgpKSAhPSAtMSkKKwl3aGlsZSAoKGMg PSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiZEQ6RTprTDptbk5VOldBOnNTVDpYOmciLCBs b25nX29wdGlvbnMsICZvcHRpb25faW5kZXgpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAoYykK IAkJewpAQCAtMzE0OSw2ICszMTY3LDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltd KQogCQkJY2FzZSAnTCc6CiAJCQkJc2hhcmVfcGF0aCA9IHBnX3N0cmR1cChvcHRhcmcpOwog CQkJCWJyZWFrOworCQkJY2FzZSAnbSc6CisJCQkJbWluaW1hbCA9IHRydWU7CisJCQkJYnJl YWs7CiAJCQljYXNlIDE6CiAJCQkJbG9jYWxlID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJ YnJlYWs7CkBAIC0zMzYxLDkgKzMzODIsMTkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdKQogCS8qIHRyYW5zbGF0b3I6IFRoaXMgaXMgYSBwbGFjZWhvbGRlciBpbiBhIHNoZWxs IGNvbW1hbmQuICovCiAJYXBwZW5kUFFFeHBCdWZmZXIoc3RhcnRfZGJfY21kLCAiIC1sICVz IHN0YXJ0IiwgXygibG9nZmlsZSIpKTsKIAotCXByaW50ZihfKCJcblN1Y2Nlc3MuIFlvdSBj YW4gbm93IHN0YXJ0IHRoZSBkYXRhYmFzZSBzZXJ2ZXIgdXNpbmc6XG5cbiIKLQkJCSAiICAg ICVzXG5cbiIpLAotCQkgICBzdGFydF9kYl9jbWQtPmRhdGEpOworCWlmICghbWluaW1hbCkK Kwl7CisJCXByaW50ZihfKCJcblN1Y2Nlc3MuIFlvdSBjYW4gbm93IHN0YXJ0IHRoZSBkYXRh YmFzZSBzZXJ2ZXIgdXNpbmc6XG5cbiIKKwkJCQkgIiAgICAlc1xuXG4iKSwKKwkJCSAgIHN0 YXJ0X2RiX2NtZC0+ZGF0YSk7CisJfQorCWVsc2UKKwl7CisJCXByaW50ZihfKCJcblNvIGZh ciBzbyBnb29kLiBOb3cgY29uZmlndXJlIHRoZSByZXBsaWNhdGlvbiBjb25uZWN0aW9uIGlu XG4iCisJCQkJICJwb3N0Z3Jlc3FsLmNvbmYsIGFuZCB0aGVuIHN0YXJ0IHRoZSBkYXRhYmFz ZSBzZXJ2ZXIgdXNpbmc6XG5cbiIKKwkJCQkgIiAgICAlc1xuXG4iKSwKKwkJCSAgIHN0YXJ0 X2RiX2NtZC0+ZGF0YSk7CisJfQogCiAJZGVzdHJveVBRRXhwQnVmZmVyKHN0YXJ0X2RiX2Nt ZCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nLmggYi9zcmMvaW5j bHVkZS9hY2Nlc3MveGxvZy5oCmluZGV4IDIzN2Y0ZTAzNTAuLjVmMDgxOTIzYjIgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL3hsb2cuaApAQCAtMjk5LDYgKzI5OSw5IEBAIGV4dGVybiBTaXplIFhMT0dTaG1lbVNp emUodm9pZCk7CiBleHRlcm4gdm9pZCBYTE9HU2htZW1Jbml0KHZvaWQpOwogZXh0ZXJuIHZv aWQgQm9vdFN0cmFwWExPRyh2b2lkKTsKIGV4dGVybiB2b2lkIExvY2FsUHJvY2Vzc0NvbnRy b2xGaWxlKGJvb2wgcmVzZXQpOworI2lmbmRlZiBGUk9OVEVORAorZXh0ZXJuIHZvaWQgUmVh ZENvbnRyb2xGaWxlKHZvaWQpOworI2VuZGlmCiBleHRlcm4gdm9pZCBTdGFydHVwWExPRyh2 b2lkKTsKIGV4dGVybiB2b2lkIFNodXRkb3duWExPRyhpbnQgY29kZSwgRGF0dW0gYXJnKTsK IGV4dGVybiB2b2lkIEluaXRYTE9HQWNjZXNzKHZvaWQpOwpAQCAtMzU0LDYgKzM1Nyw3IEBA IGV4dGVybiB2b2lkIGRvX3BnX2Fib3J0X2JhY2t1cCh2b2lkKTsKIGV4dGVybiBTZXNzaW9u QmFja3VwU3RhdGUgZ2V0X2JhY2t1cF9zdGF0dXModm9pZCk7CiAKIC8qIEZpbGUgcGF0aCBu YW1lcyAoYWxsIHJlbGF0aXZlIHRvICRQR0RBVEEpICovCisjZGVmaW5lIEJBU0VCQUNLVVBf U0lHTkFMX0ZJTEUJImJhc2ViYWNrdXAuc2lnbmFsIgogI2RlZmluZSBSRUNPVkVSWV9TSUdO QUxfRklMRQkicmVjb3Zlcnkuc2lnbmFsIgogI2RlZmluZSBTVEFOREJZX1NJR05BTF9GSUxF CQkic3RhbmRieS5zaWduYWwiCiAjZGVmaW5lIEJBQ0tVUF9MQUJFTF9GSUxFCQkiYmFja3Vw X2xhYmVsIgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggYi9zcmMvaW5j bHVkZS9taXNjYWRtaW4uaAppbmRleCA2MWEyNGMyZTNjLi4xZjQwZDMzMjkwIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAorKysgYi9zcmMvaW5jbHVkZS9taXNjYWRt aW4uaApAQCAtMzk4LDYgKzM5OCw3IEBAIHR5cGVkZWYgZW51bQogCUNoZWNrZXJQcm9jZXNz ID0gMCwKIAlCb290c3RyYXBQcm9jZXNzLAogCVN0YXJ0dXBQcm9jZXNzLAorCUJhc2VCYWNr dXBQcm9jZXNzLAogCUJnV3JpdGVyUHJvY2VzcywKIAlDaGVja3BvaW50ZXJQcm9jZXNzLAog CVdhbFdyaXRlclByb2Nlc3MsCkBAIC00MTAsNiArNDExLDcgQEAgZXh0ZXJuIEF1eFByb2NU eXBlIE15QXV4UHJvY1R5cGU7CiAKICNkZWZpbmUgQW1Cb290c3RyYXBQcm9jZXNzKCkJCShN eUF1eFByb2NUeXBlID09IEJvb3RzdHJhcFByb2Nlc3MpCiAjZGVmaW5lIEFtU3RhcnR1cFBy b2Nlc3MoKQkJCShNeUF1eFByb2NUeXBlID09IFN0YXJ0dXBQcm9jZXNzKQorI2RlZmluZSBB bUJhc2VCYWNrdXBQcm9jZXNzKCkJCShNeUF1eFByb2NUeXBlID09IEJhc2VCYWNrdXBQcm9j ZXNzKQogI2RlZmluZSBBbUJhY2tncm91bmRXcml0ZXJQcm9jZXNzKCkgKE15QXV4UHJvY1R5 cGUgPT0gQmdXcml0ZXJQcm9jZXNzKQogI2RlZmluZSBBbUNoZWNrcG9pbnRlclByb2Nlc3Mo KQkJKE15QXV4UHJvY1R5cGUgPT0gQ2hlY2twb2ludGVyUHJvY2VzcykKICNkZWZpbmUgQW1X YWxXcml0ZXJQcm9jZXNzKCkJCShNeUF1eFByb2NUeXBlID09IFdhbFdyaXRlclByb2Nlc3Mp CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wZ3N0YXQuaCBiL3NyYy9pbmNsdWRlL3Bnc3Rh dC5oCmluZGV4IDBhM2FkM2ExODguLmU1YzM4NTMwNmUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL3Bnc3RhdC5oCisrKyBiL3NyYy9pbmNsdWRlL3Bnc3RhdC5oCkBAIC03MjIsNiArNzIy LDcgQEAgdHlwZWRlZiBlbnVtIEJhY2tlbmRUeXBlCiAJQl9BVVRPVkFDX0xBVU5DSEVSLAog CUJfQVVUT1ZBQ19XT1JLRVIsCiAJQl9CQUNLRU5ELAorCUJfQkFTRV9CQUNLVVAsCiAJQl9C R19XT1JLRVIsCiAJQl9CR19XUklURVIsCiAJQl9DSEVDS1BPSU5URVIsCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9iYXNlYmFja3VwX2NsaWVudC5oIGIvc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vYmFzZWJhY2t1cF9jbGllbnQuaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwLi5kY2QxMGI5NmYyCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vYmFzZWJhY2t1cF9jbGllbnQuaApAQCAtMCwwICsx IEBACitleHRlcm4gdm9pZCBCYXNlQmFja3VwTWFpbih2b2lkKTsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmggYi9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi93YWxyZWNlaXZlci5oCmluZGV4IDg2YTgxMzAwNTEuLmJmODk1YjE0OTQgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmgKKysrIGIv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuaApAQCAtMjE1LDYgKzIxNSw3 IEBAIHR5cGVkZWYgdm9pZCAoKndhbHJjdl9yZWFkdGltZWxpbmVoaXN0b3J5ZmlsZV9mbikg KFdhbFJlY2VpdmVyQ29ubiAqY29ubiwKIAkJCQkJCQkJCQkJCSAgIFRpbWVMaW5lSUQgdGxp LAogCQkJCQkJCQkJCQkJICAgY2hhciAqKmZpbGVuYW1lLAogCQkJCQkJCQkJCQkJICAgY2hh ciAqKmNvbnRlbnQsIGludCAqc2l6ZSk7Cit0eXBlZGVmIHZvaWQgKCp3YWxyY3ZfYmFzZV9i YWNrdXBfZm4pIChXYWxSZWNlaXZlckNvbm4gKmNvbm4pOwogdHlwZWRlZiBib29sICgqd2Fs cmN2X3N0YXJ0c3RyZWFtaW5nX2ZuKSAoV2FsUmVjZWl2ZXJDb25uICpjb25uLAogCQkJCQkJ CQkJCSAgY29uc3QgV2FsUmN2U3RyZWFtT3B0aW9ucyAqb3B0aW9ucyk7CiB0eXBlZGVmIHZv aWQgKCp3YWxyY3ZfZW5kc3RyZWFtaW5nX2ZuKSAoV2FsUmVjZWl2ZXJDb25uICpjb25uLApA QCAtMjQyLDYgKzI0Myw3IEBAIHR5cGVkZWYgc3RydWN0IFdhbFJlY2VpdmVyRnVuY3Rpb25z VHlwZQogCXdhbHJjdl9pZGVudGlmeV9zeXN0ZW1fZm4gd2FscmN2X2lkZW50aWZ5X3N5c3Rl bTsKIAl3YWxyY3Zfc2VydmVyX3ZlcnNpb25fZm4gd2FscmN2X3NlcnZlcl92ZXJzaW9uOwog CXdhbHJjdl9yZWFkdGltZWxpbmVoaXN0b3J5ZmlsZV9mbiB3YWxyY3ZfcmVhZHRpbWVsaW5l aGlzdG9yeWZpbGU7CisJd2FscmN2X2Jhc2VfYmFja3VwX2ZuIHdhbHJjdl9iYXNlX2JhY2t1 cDsKIAl3YWxyY3Zfc3RhcnRzdHJlYW1pbmdfZm4gd2FscmN2X3N0YXJ0c3RyZWFtaW5nOwog CXdhbHJjdl9lbmRzdHJlYW1pbmdfZm4gd2FscmN2X2VuZHN0cmVhbWluZzsKIAl3YWxyY3Zf cmVjZWl2ZV9mbiB3YWxyY3ZfcmVjZWl2ZTsKQEAgLTI2Nyw2ICsyNjksOCBAQCBleHRlcm4g UEdETExJTVBPUlQgV2FsUmVjZWl2ZXJGdW5jdGlvbnNUeXBlICpXYWxSZWNlaXZlckZ1bmN0 aW9uczsKIAlXYWxSZWNlaXZlckZ1bmN0aW9ucy0+d2FscmN2X3NlcnZlcl92ZXJzaW9uKGNv bm4pCiAjZGVmaW5lIHdhbHJjdl9yZWFkdGltZWxpbmVoaXN0b3J5ZmlsZShjb25uLCB0bGks IGZpbGVuYW1lLCBjb250ZW50LCBzaXplKSBcCiAJV2FsUmVjZWl2ZXJGdW5jdGlvbnMtPndh bHJjdl9yZWFkdGltZWxpbmVoaXN0b3J5ZmlsZShjb25uLCB0bGksIGZpbGVuYW1lLCBjb250 ZW50LCBzaXplKQorI2RlZmluZSB3YWxyY3ZfYmFzZV9iYWNrdXAoY29ubikgXAorCVdhbFJl Y2VpdmVyRnVuY3Rpb25zLT53YWxyY3ZfYmFzZV9iYWNrdXAoY29ubikKICNkZWZpbmUgd2Fs cmN2X3N0YXJ0c3RyZWFtaW5nKGNvbm4sIG9wdGlvbnMpIFwKIAlXYWxSZWNlaXZlckZ1bmN0 aW9ucy0+d2FscmN2X3N0YXJ0c3RyZWFtaW5nKGNvbm4sIG9wdGlvbnMpCiAjZGVmaW5lIHdh bHJjdl9lbmRzdHJlYW1pbmcoY29ubiwgbmV4dF90bGkpIFwKCmJhc2UtY29tbWl0OiBjMGZh YTcyNzUwN2VkMzRkYjBkMDI3NjlkMjFiYmFhZjk2MDVlMmU0Ci0tIAoyLjIyLjAKCg== --------------4D0CD1F1E218C27A7DDF4C65--