From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: [PATCH v9 08/27] arm/x86/vmap: Add v[z|m]alloc_xen and vm_init_type Date: Tue, 26 Apr 2016 22:38:38 -0400 Message-ID: <20160427023837.GC26540@localhost.localdomain> References: <1461598514-5440-1-git-send-email-konrad.wilk@oracle.com> <1461598514-5440-9-git-send-email-konrad.wilk@oracle.com> <571F637C02000078000E5C2E@prv-mh.provo.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1avFNX-0003Uh-I3 for xen-devel@lists.xenproject.org; Wed, 27 Apr 2016 02:39:03 +0000 Content-Disposition: inline In-Reply-To: <571F637C02000078000E5C2E@prv-mh.provo.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Jan Beulich Cc: Stefano Stabellini , Keir Fraser , ross.lagerwall@citrix.com, andrew.cooper3@citrix.com, Ian Jackson , Tim Deegan , mpohlack@amazon.de, Julien Grall , sasha.levin@oracle.com, xen-devel@lists.xenproject.org List-Id: xen-devel@lists.xenproject.org PiBXaXRoIHZtX2FsbG9jKCkgZ2V0dGluZyByZW1vdmVkLCB2bV9mcmVlKCkgc2hvdWxkIGdldCBy ZW1vdmVkCj4gaGVyZSB0b28uIEFuZCB3aXRoIHRoYXQsIHZtX2FsbG9jX3R5cGUoKSBhbmQgdm1f ZnJlZV90eXBlKCkgY2FuCj4gdGhlbiBqdXN0IGJlY29tZSB2bV9hbGxvYygpIGFuZCB2bV9mcmVl KCkgcmVzcGVjdGl2ZWx5IChhcyBzdGF0aWMKPiBpbnRlcm5hbCBmdW5jdGlvbnMpLgoKUGxlYXNl IHRha2UgYSBsb29rIGF0IHRoaXMgaW5saW5lIG9uZToKCkZyb20gMWMxMzMzNjVkOThhMDJjOGY1 MTMxY2RjZGUxMTk2MDYyM2ZhMjQ3YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogS29u cmFkIFJ6ZXN6dXRlayBXaWxrIDxrb25yYWQud2lsa0BvcmFjbGUuY29tPgpEYXRlOiBUdWUsIDI2 IEFwciAyMDE2IDE0OjAzOjA2IC0wNDAwClN1YmplY3Q6IFtQQVRDSF0gYXJtL3g4Ni92bWFwOiBB ZGQgdlt6fG1dYWxsb2NfeGVuIGFuZCB2bV9pbml0X3R5cGUKCkZvciB0aG9zZSB1c2VycyB3aG8g d2FudCB0byB1c2UgdGhlIHZpcnR1YWwgYWRkcmVzc2VzIHRoYXQKYXJlIGluIHRoZSBoeXBlcnZp c29yJ3MgY29kZS9kYXRhIHJlZ2lvbiBhZGRyZXNzIHNwYWNlIC0KdGhlc2UgdGhyZWUgbmV3IGZ1 bmN0aW9ucyBhbGxvdyB0aGF0LgoKSW1wbGVtZW50YXRpb24gd2lzZSB0aGUgdm1hcCBBUEkga2Vl cHMgdHJhY2sgb2YgdHdvIHZpcnR1YWwKYWRkcmVzcyByZWdpb25zIG5vdzoKIGEpIFZNQVBfVklS VF9TVEFSVAogYikgQW55IHByb3ZpZGVkIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSAobmVlZCBzdGFy dCBhbmQgZW5kKS4KClRoZSBhKSBvbmUgaXMgdGhlIGRlZmF1bHQgb25lIGFuZCB0aGUgZXhpc3Rp bmcgYmVoYXZpb3IKZm9yIHVzZXJzIG9mIHZtYWxsb2MsIHZtYXAsIGV0YyBpcyB0aGUgc2FtZS4K CklmIGhvd2V2ZXIgb25lIHdpc2hlcyB0byB1c2UgdGhlIGIpIG9uZSBvbmx5IGhhcyB0byB1c2UK dGhlIHZtX2luaXRfdHlwZSB0byBpbml0aWFsaXplIGFuZCB0aGUgdlttfHpdYWxsb2NfeGVuIHRv IHV0aWxpemUKaXQgKHZmcmVlIGFuZCB2dW5tYXAgYXJlIGNhcGFibGUgb2Ygc2VhcmNoaW5nIGJv dGggYWRkcmVzcyBzcGFjZXMpLgoKVGhpcyBhbGxvd3MgdXNlcnMgKHN1Y2ggYXMgeFNwbGljZSkg dG8gcHJvdmlkZSB0aGVpciBvd24KbWVjaGFuaXNtIHRvIGNoYW5nZSB0aGUgdGhlIHBhZ2UgZmxh Z3MsIGFuZCBhbHNvIHVzZSB2aXJ0dWFsCmFkZHJlc3NlcyBjbG9zZXIgdG8gdGhlIGh5cGVydmlz b3IgdmlydHVhbCBhZGRyZXNzZXMgKGF0IGxlYXN0Cm9uIHg4Nikgd2hpbGUgbm90IGhhdmluZyB0 byBkZWFsIHdpdGggdGhlIGFsbG9jYXRpb24gb2YKcGFnZXMuCgpGb3IgZXhhbXBsZSBvZiB1c2Vy cywgc2VlIHBhdGNoIHRpdGxlZCAieHNwbGljZTogSW1wbGVtZW50IHBheWxvYWQKbG9hZGluZyIs IHdoZXJlIHdlIHBhcnNlIHRoZSBwYXlsb2FkJ3MgRUxGIHJlbG9jYXRpb25zIC0gd2hpY2gKaXMg ZGVmaW5lZCB0byBiZSBzaWduZWQgMzItYml0IChvbiB4ODYpIChtYXggZGlzcGxhY2VtZW50IGhl bmNlCmlzIDJHQiB2aXJ0dWFsIHNwYWNlLCBBUk0zMiBpcyAxMjhNQikuIFRoZSBkaXNwbGFjZW1l bnQgb2YgdGhlCmh5cGVydmlzb3IgdmlydHVhbCBhZGRyZXNzZXMgdG8gdGhlIHZtYWxsb2MgKG9u IHg4NikKaXMgbW9yZSB0aGFuIDMyLWJpdHMgLSB3aGljaCBtZWFucyB0aGF0IEVMRiByZWxvY2F0 aW9ucyB3b3VsZAp0cnVuY2F0ZSB0aGUgMzQgYW5kIDMzdGggYml0LiBIZW5jZSB0aGlzIGFsdGVy bmF0ZSBBUEkuCgpXZSBhbHNvIGFkZCBhZGQgZXh0cmEgY2hlY2tzIGluIGNhc2UgdGhlIGIpIHJh bmdlIGhhcyBub3QgYmVlbgppbml0aWFsaXplZC4KClBhcnQgb2YgdGhpcyBwYXRjaCBhbHNvIHJl bW92ZXMgJ3ZtX2FsbG9jJyBhbmQgJ3ZtX2ZyZWUnCmRlY2xlcmF0aW9uIGFzIHdlIGRvIG5vdCBo YXZlIGFueSB1c2VycyBvZiBpdC4KClNpZ25lZC1vZmYtYnk6IEtvbnJhZCBSemVzenV0ZWsgV2ls ayA8a29ucmFkLndpbGtAb3JhY2xlLmNvbT4KU3VnZ2VzdGVkLWJ5OiBKYW4gQmV1bGljaCA8amJl dWxpY2hAc3VzZS5jb20+CkFja2VkLWJ5OiBKdWxpZW4gR3JhbGwgPGp1bGllbi5ncmFsbEBhcm0u Y29tPiBbQVJNXQoKLS0tCkNjOiBJYW4gSmFja3NvbiA8aWFuLmphY2tzb25AZXUuY2l0cml4LmNv bT4KQ2M6IEphbiBCZXVsaWNoIDxqYmV1bGljaEBzdXNlLmNvbT4KQ2M6IEtlaXIgRnJhc2VyIDxr ZWlyQHhlbi5vcmc+CkNjOiBUaW0gRGVlZ2FuIDx0aW1AeGVuLm9yZz4KQ2M6IFN0ZWZhbm8gU3Rh YmVsbGluaSA8c3N0YWJlbGxpbmlAa2VybmVsLm9yZz4KQ2M6IEp1bGllbiBHcmFsbCA8anVsaWVu LmdyYWxsQGFybS5jb20+Cgp2NDogTmV3IHBhdGNoLgp2NTogVXBkYXRlIHBlciBKYW4ncyBjb21t ZW50cy4KdjY6IERyb3AgdGhlIHN0cmF5IHBhcmVudGhlc2VzIG9uIHR5cGVkZWZzLgogICAgRGl0 Y2ggdGhlIHZ1bm1hcCBjYWxsYmFjay4gU3Rhc2ggYXdheSB0aGUgdmlydHVhbCBhZGRyZXNzZXMg aW4gbGlzdHMuCiAgICBEaXRjaCB0aGUgdm1hcCBjYWxsYmFjay4gSnVzdCBwcm92aWRlIHZpcnR1 YWwgYWRkcmVzcy4KICAgIERpdGNoIHRoZSB2bWFsbG9jX3JhbmdlLiBSZXF1aXJlIHVzZXJzIG9m IGFsdGVybmF0aXZlIHZpcnR1YWwgYWRkcmVzcwogICAgdG8gY2FsbCB2bWFwX2luaXRfdHlwZSBm aXJzdC4Kdjc6IERvbid0IGV4cG9zZSB0aGUgdm1hbGxvY190eXBlIGFuZCBzdWNoLiBJbnN0ZWFk IHByb3ZpZGUgYW4gd3JhcHBlcgogICAgY2FsbGVkIHZtYWxsb2NfeGVuIGZvciB0aG9zZS4KICAg IFJlbmFtZSB0aGUgZW51bSwgY2hhbmdlIG9uZSBvZiB0aGUgbmFtZXMuCiAgICBNb3ZlZCB0aGUg dnVubWFwX3R5cGUgYXJvdW5kIGluIGMgZmlsZSBzbyB3ZSBkb24ndCBoYXZlIHRvIGRlY2xhcmUK ICAgIGl0IGluIHRoZSBoZWFkZXIuCnY5OiBSZW1vdmUgdGhlIHZ1bm1hcF94ZW4sIHJlbW92ZWQg dm1fYWxsb2MgZnJvbSBoZWFkZXIuCiAgICBBZGQgdnphbGxvY194ZW4KdjEwOgogICAgUHJvcGVy bHkgQVNTRVJUIG9uIHJhbmdlcwogICAgTWFrZSB2bV9mcmVlIGFuZCB2dW5tYXAgYXV0b21hdGlj YWxseSBkZXRlY3QgdGhlIHJpZ2h0IHZhIHNwYWNlLgogICAgUmVtb3ZlIGZyb20gaGVhZGVyIHZt X2ZyZWUuIFJlbmFtZSB2bV9hbGxvY190eXBlIGFuZCB2bV9mcmVlX3R5cGUKICAgIHRvICB2bV9h bGxvYyBhbmQgdm1fZnJlZSByZXNwZWN0aXZlbHkuCi0tLQogeGVuL2FyY2gvYXJtL2tlcm5lbC5j ICB8ICAgMiArLQogeGVuL2FyY2gvYXJtL21tLmMgICAgICB8ICAgMiArLQogeGVuL2FyY2gveDg2 L21tLmMgICAgICB8ICAgMiArLQogeGVuL2NvbW1vbi92bWFwLmMgICAgICB8IDIxMiArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tCiB4ZW4vZHJpdmVycy9h Y3BpL29zbC5jIHwgICAyICstCiB4ZW4vaW5jbHVkZS94ZW4vdm1hcC5oIHwgIDIyICsrKy0tCiA2 IGZpbGVzIGNoYW5nZWQsIDE1NiBpbnNlcnRpb25zKCspLCA4NiBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS94ZW4vYXJjaC9hcm0va2VybmVsLmMgYi94ZW4vYXJjaC9hcm0va2VybmVsLmMKaW5k ZXggNjE4MDhhYy4uOTg3MWJkOSAxMDA2NDQKLS0tIGEveGVuL2FyY2gvYXJtL2tlcm5lbC5jCisr KyBiL3hlbi9hcmNoL2FybS9rZXJuZWwuYwpAQCAtMjk5LDcgKzI5OSw3IEBAIHN0YXRpYyBfX2lu aXQgaW50IGtlcm5lbF9kZWNvbXByZXNzKHN0cnVjdCBib290bW9kdWxlICptb2QpCiAgICAgICAg IHJldHVybiAtRU5PTUVNOwogICAgIH0KICAgICBtZm4gPSBfbWZuKHBhZ2VfdG9fbWZuKHBhZ2Vz KSk7Ci0gICAgb3V0cHV0ID0gX192bWFwKCZtZm4sIDEgPDwga2VybmVsX29yZGVyX291dCwgMSwg MSwgUEFHRV9IWVBFUlZJU09SKTsKKyAgICBvdXRwdXQgPSBfX3ZtYXAoJm1mbiwgMSA8PCBrZXJu ZWxfb3JkZXJfb3V0LCAxLCAxLCBQQUdFX0hZUEVSVklTT1IsIFZNQVBfREVGQVVMVCk7CiAKICAg ICByYyA9IHBlcmZvcm1fZ3VuemlwKG91dHB1dCwgaW5wdXQsIHNpemUpOwogICAgIGNsZWFuX2Rj YWNoZV92YV9yYW5nZShvdXRwdXQsIG91dHB1dF9zaXplKTsKZGlmZiAtLWdpdCBhL3hlbi9hcmNo L2FybS9tbS5jIGIveGVuL2FyY2gvYXJtL21tLmMKaW5kZXggNzA2NWMzZS4uOTRlYTA1NCAxMDA2 NDQKLS0tIGEveGVuL2FyY2gvYXJtL21tLmMKKysrIGIveGVuL2FyY2gvYXJtL21tLmMKQEAgLTgw Nyw3ICs4MDcsNyBAQCB2b2lkICppb3JlbWFwX2F0dHIocGFkZHJfdCBwYSwgc2l6ZV90IGxlbiwg dW5zaWduZWQgaW50IGF0dHJpYnV0ZXMpCiAgICAgbWZuX3QgbWZuID0gX21mbihQRk5fRE9XTihw YSkpOwogICAgIHVuc2lnbmVkIGludCBvZmZzID0gcGEgJiAoUEFHRV9TSVpFIC0gMSk7CiAgICAg dW5zaWduZWQgaW50IG5yID0gUEZOX1VQKG9mZnMgKyBsZW4pOwotICAgIHZvaWQgKnB0ciA9IF9f dm1hcCgmbWZuLCBuciwgMSwgMSwgYXR0cmlidXRlcyk7CisgICAgdm9pZCAqcHRyID0gX192bWFw KCZtZm4sIG5yLCAxLCAxLCBhdHRyaWJ1dGVzLCBWTUFQX0RFRkFVTFQpOwogCiAgICAgaWYgKCBw dHIgPT0gTlVMTCApCiAgICAgICAgIHJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEveGVuL2FyY2gv eDg2L21tLmMgYi94ZW4vYXJjaC94ODYvbW0uYwppbmRleCBhNDIwOTdmLi4yYmI5MjBiIDEwMDY0 NAotLS0gYS94ZW4vYXJjaC94ODYvbW0uYworKysgYi94ZW4vYXJjaC94ODYvbW0uYwpAQCAtNjE3 OSw3ICs2MTc5LDcgQEAgdm9pZCBfX2lvbWVtICppb3JlbWFwKHBhZGRyX3QgcGEsIHNpemVfdCBs ZW4pCiAgICAgICAgIHVuc2lnbmVkIGludCBvZmZzID0gcGEgJiAoUEFHRV9TSVpFIC0gMSk7CiAg ICAgICAgIHVuc2lnbmVkIGludCBuciA9IFBGTl9VUChvZmZzICsgbGVuKTsKIAotICAgICAgICB2 YSA9IF9fdm1hcCgmbWZuLCBuciwgMSwgMSwgUEFHRV9IWVBFUlZJU09SX05PQ0FDSEUpICsgb2Zm czsKKyAgICAgICAgdmEgPSBfX3ZtYXAoJm1mbiwgbnIsIDEsIDEsIFBBR0VfSFlQRVJWSVNPUl9O T0NBQ0hFLCBWTUFQX0RFRkFVTFQpICsgb2ZmczsKICAgICB9CiAKICAgICByZXR1cm4gKHZvaWQg X19mb3JjZSBfX2lvbWVtICopdmE7CmRpZmYgLS1naXQgYS94ZW4vY29tbW9uL3ZtYXAuYyBiL3hl bi9jb21tb24vdm1hcC5jCmluZGV4IDEzNGVkYTAuLjljODc4MmMgMTAwNjQ0Ci0tLSBhL3hlbi9j b21tb24vdm1hcC5jCisrKyBiL3hlbi9jb21tb24vdm1hcC5jCkBAIC0xMCw0MCArMTAsNDMgQEAK ICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHZtX2xvY2sp Owotc3RhdGljIHZvaWQgKl9fcmVhZF9tb3N0bHkgdm1fYmFzZTsKLSNkZWZpbmUgdm1fYml0bWFw ICgodW5zaWduZWQgbG9uZyAqKXZtX2Jhc2UpCitzdGF0aWMgdm9pZCAqX19yZWFkX21vc3RseSB2 bV9iYXNlW1ZNQVBfUkVHSU9OX05SXTsKKyNkZWZpbmUgdm1fYml0bWFwKHgpICgodW5zaWduZWQg bG9uZyAqKXZtX2Jhc2VbeF0pCiAvKiBoaWdoZXN0IGFsbG9jYXRlZCBiaXQgaW4gdGhlIGJpdG1h cCAqLwotc3RhdGljIHVuc2lnbmVkIGludCBfX3JlYWRfbW9zdGx5IHZtX3RvcDsKK3N0YXRpYyB1 bnNpZ25lZCBpbnQgX19yZWFkX21vc3RseSB2bV90b3BbVk1BUF9SRUdJT05fTlJdOwogLyogdG90 YWwgbnVtYmVyIG9mIGJpdHMgaW4gdGhlIGJpdG1hcCAqLwotc3RhdGljIHVuc2lnbmVkIGludCBf X3JlYWRfbW9zdGx5IHZtX2VuZDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19yZWFkX21vc3RseSB2 bV9lbmRbVk1BUF9SRUdJT05fTlJdOwogLyogbG93ZXN0IGtub3duIGNsZWFyIGJpdCBpbiB0aGUg Yml0bWFwICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHZtX2xvdzsKK3N0YXRpYyB1bnNpZ25lZCBp bnQgdm1fbG93W1ZNQVBfUkVHSU9OX05SXTsKIAotdm9pZCBfX2luaXQgdm1faW5pdCh2b2lkKQor dm9pZCBfX2luaXQgdm1faW5pdF90eXBlKGVudW0gdm1hcF9yZWdpb24gdHlwZSwgdm9pZCAqc3Rh cnQsIHZvaWQgKmVuZCkKIHsKICAgICB1bnNpZ25lZCBpbnQgaSwgbnI7CiAgICAgdW5zaWduZWQg bG9uZyB2YTsKIAotICAgIHZtX2Jhc2UgPSAodm9pZCAqKVZNQVBfVklSVF9TVEFSVDsKLSAgICB2 bV9lbmQgPSBQRk5fRE9XTihhcmNoX3ZtYXBfdmlydF9lbmQoKSAtIHZtX2Jhc2UpOwotICAgIHZt X2xvdyA9IFBGTl9VUCgodm1fZW5kICsgNykgLyA4KTsKLSAgICBuciA9IFBGTl9VUCgodm1fbG93 ICsgNykgLyA4KTsKLSAgICB2bV90b3AgPSBuciAqIFBBR0VfU0laRSAqIDg7CisgICAgQVNTRVJU KCF2bV9iYXNlW3R5cGVdKTsKIAotICAgIGZvciAoIGkgPSAwLCB2YSA9ICh1bnNpZ25lZCBsb25n KXZtX2JpdG1hcDsgaSA8IG5yOyArK2ksIHZhICs9IFBBR0VfU0laRSApCisgICAgdm1fYmFzZVt0 eXBlXSA9IHN0YXJ0OworICAgIHZtX2VuZFt0eXBlXSA9IFBGTl9ET1dOKGVuZCAtIHN0YXJ0KTsK KyAgICB2bV9sb3dbdHlwZV09IFBGTl9VUCgodm1fZW5kW3R5cGVdICsgNykgLyA4KTsKKyAgICBu ciA9IFBGTl9VUCgodm1fbG93W3R5cGVdICsgNykgLyA4KTsKKyAgICB2bV90b3BbdHlwZV0gPSBu ciAqIFBBR0VfU0laRSAqIDg7CisKKyAgICBmb3IgKCBpID0gMCwgdmEgPSAodW5zaWduZWQgbG9u Zyl2bV9iaXRtYXAodHlwZSk7IGkgPCBucjsgKytpLCB2YSArPSBQQUdFX1NJWkUgKQogICAgIHsK ICAgICAgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGcgPSBhbGxvY19kb21oZWFwX3BhZ2UoTlVMTCwg MCk7CiAKICAgICAgICAgbWFwX3BhZ2VzX3RvX3hlbih2YSwgcGFnZV90b19tZm4ocGcpLCAxLCBQ QUdFX0hZUEVSVklTT1IpOwogICAgICAgICBjbGVhcl9wYWdlKCh2b2lkICopdmEpOwogICAgIH0K LSAgICBiaXRtYXBfZmlsbCh2bV9iaXRtYXAsIHZtX2xvdyk7CisgICAgYml0bWFwX2ZpbGwodm1f Yml0bWFwKHR5cGUpLCB2bV9sb3dbdHlwZV0pOwogCiAgICAgLyogUG9wdWxhdGUgcGFnZSB0YWJs ZXMgZm9yIHRoZSBiaXRtYXAgaWYgbmVjZXNzYXJ5LiAqLwotICAgIHBvcHVsYXRlX3B0X3Jhbmdl KHZhLCAwLCB2bV9sb3cgLSBucik7CisgICAgcG9wdWxhdGVfcHRfcmFuZ2UodmEsIDAsIHZtX2xv d1t0eXBlXSAtIG5yKTsKIH0KIAotdm9pZCAqdm1fYWxsb2ModW5zaWduZWQgaW50IG5yLCB1bnNp Z25lZCBpbnQgYWxpZ24pCitzdGF0aWMgdm9pZCAqdm1fYWxsb2ModW5zaWduZWQgaW50IG5yLCB1 bnNpZ25lZCBpbnQgYWxpZ24sCisgICAgICAgICAgICAgICAgICAgICAgZW51bSB2bWFwX3JlZ2lv biB0KQogewogICAgIHVuc2lnbmVkIGludCBzdGFydCwgYml0OwogCkBAIC01MiwyNyArNTUsMzEg QEAgdm9pZCAqdm1fYWxsb2ModW5zaWduZWQgaW50IG5yLCB1bnNpZ25lZCBpbnQgYWxpZ24pCiAg ICAgZWxzZSBpZiAoIGFsaWduICYgKGFsaWduIC0gMSkgKQogICAgICAgICBhbGlnbiAmPSAtYWxp Z247CiAKKyAgICBBU1NFUlQoKHQgPj0gVk1BUF9ERUZBVUxUKSAmJiAodCA8IFZNQVBfUkVHSU9O X05SKSk7CisgICAgaWYgKCAhdm1fYmFzZVt0XSApCisgICAgICAgIHJldHVybiBOVUxMOworCiAg ICAgc3Bpbl9sb2NrKCZ2bV9sb2NrKTsKICAgICBmb3IgKCA7IDsgKQogICAgIHsKICAgICAgICAg c3RydWN0IHBhZ2VfaW5mbyAqcGc7CiAKLSAgICAgICAgQVNTRVJUKHZtX2xvdyA9PSB2bV90b3Ag fHwgIXRlc3RfYml0KHZtX2xvdywgdm1fYml0bWFwKSk7Ci0gICAgICAgIGZvciAoIHN0YXJ0ID0g dm1fbG93OyBzdGFydCA8IHZtX3RvcDsgKQorICAgICAgICBBU1NFUlQodm1fbG93W3RdID09IHZt X3RvcFt0XSB8fCAhdGVzdF9iaXQodm1fbG93W3RdLCB2bV9iaXRtYXAodCkpKTsKKyAgICAgICAg Zm9yICggc3RhcnQgPSB2bV9sb3dbdF07IHN0YXJ0IDwgdm1fdG9wW3RdOyApCiAgICAgICAgIHsK LSAgICAgICAgICAgIGJpdCA9IGZpbmRfbmV4dF9iaXQodm1fYml0bWFwLCB2bV90b3AsIHN0YXJ0 ICsgMSk7Ci0gICAgICAgICAgICBpZiAoIGJpdCA+IHZtX3RvcCApCi0gICAgICAgICAgICAgICAg Yml0ID0gdm1fdG9wOworICAgICAgICAgICAgYml0ID0gZmluZF9uZXh0X2JpdCh2bV9iaXRtYXAo dCksIHZtX3RvcFt0XSwgc3RhcnQgKyAxKTsKKyAgICAgICAgICAgIGlmICggYml0ID4gdm1fdG9w W3RdICkKKyAgICAgICAgICAgICAgICBiaXQgPSB2bV90b3BbdF07CiAgICAgICAgICAgICAvKgog ICAgICAgICAgICAgICogTm90ZSB0aGF0IHRoaXMgc2tpcHMgdGhlIGZpcnN0IGJpdCwgbWFraW5n IHRoZQogICAgICAgICAgICAgICogY29ycmVzcG9uZGluZyBwYWdlIGEgZ3VhcmQgb25lLgogICAg ICAgICAgICAgICovCiAgICAgICAgICAgICBzdGFydCA9IChzdGFydCArIGFsaWduKSAmIH4oYWxp Z24gLSAxKTsKLSAgICAgICAgICAgIGlmICggYml0IDwgdm1fdG9wICkKKyAgICAgICAgICAgIGlm ICggYml0IDwgdm1fdG9wW3RdICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpZiAo IHN0YXJ0ICsgbnIgPCBiaXQgKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgICAgICBzdGFydCA9IGZpbmRfbmV4dF96ZXJvX2JpdCh2bV9iaXRtYXAsIHZtX3RvcCwgYml0 ICsgMSk7CisgICAgICAgICAgICAgICAgc3RhcnQgPSBmaW5kX25leHRfemVyb19iaXQodm1fYml0 bWFwKHQpLCB2bV90b3BbdF0sIGJpdCArIDEpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg ZWxzZQogICAgICAgICAgICAgewpAQCAtODIsMTIgKzg5LDEyIEBAIHZvaWQgKnZtX2FsbG9jKHVu c2lnbmVkIGludCBuciwgdW5zaWduZWQgaW50IGFsaWduKQogICAgICAgICAgICAgfQogICAgICAg ICB9CiAKLSAgICAgICAgaWYgKCBzdGFydCA8IHZtX3RvcCApCisgICAgICAgIGlmICggc3RhcnQg PCB2bV90b3BbdF0gKQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgc3Bpbl91bmxvY2so JnZtX2xvY2spOwogCi0gICAgICAgIGlmICggdm1fdG9wID49IHZtX2VuZCApCisgICAgICAgIGlm ICggdm1fdG9wW3RdID49IHZtX2VuZFt0XSApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAog ICAgICAgICBwZyA9IGFsbG9jX2RvbWhlYXBfcGFnZShOVUxMLCAwKTsKQEAgLTk2LDIzICsxMDMs MjMgQEAgdm9pZCAqdm1fYWxsb2ModW5zaWduZWQgaW50IG5yLCB1bnNpZ25lZCBpbnQgYWxpZ24p CiAKICAgICAgICAgc3Bpbl9sb2NrKCZ2bV9sb2NrKTsKIAotICAgICAgICBpZiAoIHN0YXJ0ID49 IHZtX3RvcCApCisgICAgICAgIGlmICggc3RhcnQgPj0gdm1fdG9wW3RdICkKICAgICAgICAgewot ICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB2YSA9ICh1bnNpZ25lZCBsb25nKXZtX2JpdG1hcCAr IHZtX3RvcCAvIDg7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHZhID0gKHVuc2lnbmVkIGxv bmcpdm1fYml0bWFwKHQpICsgdm1fdG9wW3RdIC8gODsKIAogICAgICAgICAgICAgaWYgKCAhbWFw X3BhZ2VzX3RvX3hlbih2YSwgcGFnZV90b19tZm4ocGcpLCAxLCBQQUdFX0hZUEVSVklTT1IpICkK ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBjbGVhcl9wYWdlKCh2b2lkICopdmEpOwot ICAgICAgICAgICAgICAgIHZtX3RvcCArPSBQQUdFX1NJWkUgKiA4OwotICAgICAgICAgICAgICAg IGlmICggdm1fdG9wID4gdm1fZW5kICkKLSAgICAgICAgICAgICAgICAgICAgdm1fdG9wID0gdm1f ZW5kOworICAgICAgICAgICAgICAgIHZtX3RvcFt0XSArPSBQQUdFX1NJWkUgKiA4OworICAgICAg ICAgICAgICAgIGlmICggdm1fdG9wW3RdID4gdm1fZW5kW3RdICkKKyAgICAgICAgICAgICAgICAg ICAgdm1fdG9wW3RdID0gdm1fZW5kW3RdOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg ICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgZnJlZV9kb21oZWFwX3BhZ2UocGcpOwog Ci0gICAgICAgIGlmICggc3RhcnQgPj0gdm1fdG9wICkKKyAgICAgICAgaWYgKCBzdGFydCA+PSB2 bV90b3BbdF0gKQogICAgICAgICB7CiAgICAgICAgICAgICBzcGluX3VubG9jaygmdm1fbG9jayk7 CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTEyMCw0NyArMTI3LDU4IEBAIHZvaWQgKnZt X2FsbG9jKHVuc2lnbmVkIGludCBuciwgdW5zaWduZWQgaW50IGFsaWduKQogICAgIH0KIAogICAg IGZvciAoIGJpdCA9IHN0YXJ0OyBiaXQgPCBzdGFydCArIG5yOyArK2JpdCApCi0gICAgICAgIF9f c2V0X2JpdChiaXQsIHZtX2JpdG1hcCk7Ci0gICAgaWYgKCBiaXQgPCB2bV90b3AgKQotICAgICAg ICBBU1NFUlQoIXRlc3RfYml0KGJpdCwgdm1fYml0bWFwKSk7CisgICAgICAgIF9fc2V0X2JpdChi aXQsIHZtX2JpdG1hcCh0KSk7CisgICAgaWYgKCBiaXQgPCB2bV90b3BbdF0gKQorICAgICAgICBB U1NFUlQoIXRlc3RfYml0KGJpdCwgdm1fYml0bWFwKHQpKSk7CiAgICAgZWxzZQotICAgICAgICBB U1NFUlQoYml0ID09IHZtX3RvcCk7Ci0gICAgaWYgKCBzdGFydCA8PSB2bV9sb3cgKyAyICkKLSAg ICAgICAgdm1fbG93ID0gYml0OworICAgICAgICBBU1NFUlQoYml0ID09IHZtX3RvcFt0XSk7Cisg ICAgaWYgKCBzdGFydCA8PSB2bV9sb3dbdF0gKyAyICkKKyAgICAgICAgdm1fbG93W3RdID0gYml0 OwogICAgIHNwaW5fdW5sb2NrKCZ2bV9sb2NrKTsKIAotICAgIHJldHVybiB2bV9iYXNlICsgc3Rh cnQgKiBQQUdFX1NJWkU7CisgICAgcmV0dXJuIHZtX2Jhc2VbdF0gKyBzdGFydCAqIFBBR0VfU0la RTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCB2bV9pbmRleChjb25zdCB2b2lkICp2YSkKK3N0 YXRpYyB1bnNpZ25lZCBpbnQgdm1faW5kZXgoY29uc3Qgdm9pZCAqdmEsIGVudW0gdm1hcF9yZWdp b24gdHlwZSkKIHsKICAgICB1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZyl2YSAm IH4oUEFHRV9TSVpFIC0gMSk7CiAgICAgdW5zaWduZWQgaW50IGlkeDsKKyAgICB1bnNpZ25lZCBs b25nIHN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpdm1fYmFzZVt0eXBlXTsKIAotICAgIGlmICggYWRk ciA8IFZNQVBfVklSVF9TVEFSVCArICh2bV9lbmQgLyA4KSB8fAotICAgICAgICAgYWRkciA+PSBW TUFQX1ZJUlRfU1RBUlQgKyB2bV90b3AgKiBQQUdFX1NJWkUgKQorICAgIGlmICggIXN0YXJ0ICkK ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZHggPSBQRk5fRE9XTih2YSAtIHZtX2Jhc2UpOwot ICAgIHJldHVybiAhdGVzdF9iaXQoaWR4IC0gMSwgdm1fYml0bWFwKSAmJgotICAgICAgICAgICB0 ZXN0X2JpdChpZHgsIHZtX2JpdG1hcCkgPyBpZHggOiAwOworICAgIGlmICggYWRkciA8IHN0YXJ0 ICsgKHZtX2VuZFt0eXBlXSAvIDgpIHx8CisgICAgICAgICBhZGRyID49IHN0YXJ0ICsgdm1fdG9w W3R5cGVdICogUEFHRV9TSVpFICkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZHggPSBQRk5f RE9XTih2YSAtIHZtX2Jhc2VbdHlwZV0pOworICAgIHJldHVybiAhdGVzdF9iaXQoaWR4IC0gMSwg dm1fYml0bWFwKHR5cGUpKSAmJgorICAgICAgICAgICB0ZXN0X2JpdChpZHgsIHZtX2JpdG1hcCh0 eXBlKSkgPyBpZHggOiAwOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IHZtX3NpemUoY29uc3Qg dm9pZCAqdmEpCitzdGF0aWMgdW5zaWduZWQgaW50IHZtX3NpemUoY29uc3Qgdm9pZCAqdmEsIGVu dW0gdm1hcF9yZWdpb24gdHlwZSkKIHsKLSAgICB1bnNpZ25lZCBpbnQgc3RhcnQgPSB2bV9pbmRl eCh2YSksIGVuZDsKKyAgICB1bnNpZ25lZCBpbnQgc3RhcnQgPSB2bV9pbmRleCh2YSwgdHlwZSks IGVuZDsKIAogICAgIGlmICggIXN0YXJ0ICkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBlbmQg PSBmaW5kX25leHRfemVyb19iaXQodm1fYml0bWFwLCB2bV90b3AsIHN0YXJ0ICsgMSk7CisgICAg ZW5kID0gZmluZF9uZXh0X3plcm9fYml0KHZtX2JpdG1hcCh0eXBlKSwgdm1fdG9wW3R5cGVdLCBz dGFydCArIDEpOwogCi0gICAgcmV0dXJuIG1pbihlbmQsIHZtX3RvcCkgLSBzdGFydDsKKyAgICBy ZXR1cm4gbWluKGVuZCwgdm1fdG9wW3R5cGVdKSAtIHN0YXJ0OwogfQogCi12b2lkIHZtX2ZyZWUo Y29uc3Qgdm9pZCAqdmEpCitzdGF0aWMgdm9pZCB2bV9mcmVlKGNvbnN0IHZvaWQgKnZhKQogewot ICAgIHVuc2lnbmVkIGludCBiaXQgPSB2bV9pbmRleCh2YSk7CisgICAgZW51bSB2bWFwX3JlZ2lv biB0eXBlID0gVk1BUF9ERUZBVUxUOworICAgIHVuc2lnbmVkIGludCBiaXQgPSB2bV9pbmRleCh2 YSwgdHlwZSk7CisKKyAgICBpZiAoICFiaXQgKQorICAgIHsKKyAgICAgICAgdHlwZSA9IFZNQVBf WEVOOworICAgICAgICBiaXQgPSB2bV9pbmRleCh2YSwgdHlwZSk7CisgICAgfQogCiAgICAgaWYg KCAhYml0ICkKICAgICB7CkBAIC0xNjksMjkgKzE4Nyw1NSBAQCB2b2lkIHZtX2ZyZWUoY29uc3Qg dm9pZCAqdmEpCiAgICAgfQogCiAgICAgc3Bpbl9sb2NrKCZ2bV9sb2NrKTsKLSAgICBpZiAoIGJp dCA8IHZtX2xvdyApCisgICAgaWYgKCBiaXQgPCB2bV9sb3dbdHlwZV0gKQogICAgIHsKLSAgICAg ICAgdm1fbG93ID0gYml0IC0gMTsKLSAgICAgICAgd2hpbGUgKCAhdGVzdF9iaXQodm1fbG93IC0g MSwgdm1fYml0bWFwKSApCi0gICAgICAgICAgICAtLXZtX2xvdzsKKyAgICAgICAgdm1fbG93W3R5 cGVdID0gYml0IC0gMTsKKyAgICAgICAgd2hpbGUgKCAhdGVzdF9iaXQodm1fbG93W3R5cGVdIC0g MSwgdm1fYml0bWFwKHR5cGUpKSApCisgICAgICAgICAgICAtLXZtX2xvd1t0eXBlXTsKICAgICB9 Ci0gICAgd2hpbGUgKCBfX3Rlc3RfYW5kX2NsZWFyX2JpdChiaXQsIHZtX2JpdG1hcCkgKQotICAg ICAgICBpZiAoICsrYml0ID09IHZtX3RvcCApCisgICAgd2hpbGUgKCBfX3Rlc3RfYW5kX2NsZWFy X2JpdChiaXQsIHZtX2JpdG1hcCh0eXBlKSkgKQorICAgICAgICBpZiAoICsrYml0ID09IHZtX3Rv cFt0eXBlXSApCiAgICAgICAgICAgICBicmVhazsKICAgICBzcGluX3VubG9jaygmdm1fbG9jayk7 CiB9CiAKK3N0YXRpYyB2b2lkIHZ1bm1hcF9wYWdlcyhjb25zdCB2b2lkICp2YSwgdW5zaWduZWQg aW50IHBhZ2VzKQoreworI2lmbmRlZiBfUEFHRV9OT05FCisgICAgdW5zaWduZWQgbG9uZyBhZGRy ID0gKHVuc2lnbmVkIGxvbmcpdmE7CisKKyAgICBkZXN0cm95X3hlbl9tYXBwaW5ncyhhZGRyLCBh ZGRyICsgUEFHRV9TSVpFICogcGFnZXMpOworI2Vsc2UgLyogQXZvaWQgdGVhcmluZyBkb3duIGlu dGVybWVkaWF0ZSBwYWdlIHRhYmxlcy4gKi8KKyAgICBtYXBfcGFnZXNfdG9feGVuKCh1bnNpZ25l ZCBsb25nKXZhLCAwLCBwYWdlcywgX1BBR0VfTk9ORSk7CisjZW5kaWYKKyAgICB2bV9mcmVlKHZh KTsKK30KKwordm9pZCB2dW5tYXAoY29uc3Qgdm9pZCAqdmEpCit7CisgICAgZW51bSB2bWFwX3Jl Z2lvbiB0eXBlID0gVk1BUF9ERUZBVUxUOworICAgIHVuc2lnbmVkIGludCBwYWdlcyA9IHZtX3Np emUodmEsIHR5cGUpOworCisgICAgaWYgKCAhcGFnZXMgKQorICAgIHsKKyAgICAgICAgdHlwZSA9 IFZNQVBfWEVOOworICAgICAgICBwYWdlcyA9IHZtX3NpemUodmEsIHR5cGUpOworICAgIH0KKyAg ICB2dW5tYXBfcGFnZXModmEsIHBhZ2VzKTsKK30KKwogdm9pZCAqX192bWFwKGNvbnN0IG1mbl90 ICptZm4sIHVuc2lnbmVkIGludCBncmFudWxhcml0eSwKLSAgICAgICAgICAgICB1bnNpZ25lZCBp bnQgbnIsIHVuc2lnbmVkIGludCBhbGlnbiwgdW5zaWduZWQgaW50IGZsYWdzKQorICAgICAgICAg ICAgIHVuc2lnbmVkIGludCBuciwgdW5zaWduZWQgaW50IGFsaWduLCB1bnNpZ25lZCBpbnQgZmxh Z3MsCisgICAgICAgICAgICAgZW51bSB2bWFwX3JlZ2lvbiB0eXBlKQogewotICAgIHZvaWQgKnZh ID0gdm1fYWxsb2MobnIgKiBncmFudWxhcml0eSwgYWxpZ24pOworICAgIHZvaWQgKnZhID0gdm1f YWxsb2MobnIgKiBncmFudWxhcml0eSwgYWxpZ24sIHR5cGUpOwogICAgIHVuc2lnbmVkIGxvbmcg Y3VyID0gKHVuc2lnbmVkIGxvbmcpdmE7CiAKICAgICBmb3IgKCA7IHZhICYmIG5yLS07ICsrbWZu LCBjdXIgKz0gUEFHRV9TSVpFICogZ3JhbnVsYXJpdHkgKQogICAgIHsKICAgICAgICAgaWYgKCBt YXBfcGFnZXNfdG9feGVuKGN1ciwgbWZuX3goKm1mbiksIGdyYW51bGFyaXR5LCBmbGFncykgKQog ICAgICAgICB7Ci0gICAgICAgICAgICB2dW5tYXAodmEpOworICAgICAgICAgICAgdnVubWFwX3Bh Z2VzKHZhLCB2bV9zaXplKHZhLCB0eXBlKSk7CiAgICAgICAgICAgICB2YSA9IE5VTEw7CiAgICAg ICAgIH0KICAgICB9CkBAIC0yMDEsMjIgKzI0NSwxMCBAQCB2b2lkICpfX3ZtYXAoY29uc3QgbWZu X3QgKm1mbiwgdW5zaWduZWQgaW50IGdyYW51bGFyaXR5LAogCiB2b2lkICp2bWFwKGNvbnN0IG1m bl90ICptZm4sIHVuc2lnbmVkIGludCBucikKIHsKLSAgICByZXR1cm4gX192bWFwKG1mbiwgMSwg bnIsIDEsIFBBR0VfSFlQRVJWSVNPUik7Ci19Ci0KLXZvaWQgdnVubWFwKGNvbnN0IHZvaWQgKnZh KQotewotI2lmbmRlZiBfUEFHRV9OT05FCi0gICAgdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2ln bmVkIGxvbmcpdmE7Ci0KLSAgICBkZXN0cm95X3hlbl9tYXBwaW5ncyhhZGRyLCBhZGRyICsgUEFH RV9TSVpFICogdm1fc2l6ZSh2YSkpOwotI2Vsc2UgLyogQXZvaWQgdGVhcmluZyBkb3duIGludGVy bWVkaWF0ZSBwYWdlIHRhYmxlcy4gKi8KLSAgICBtYXBfcGFnZXNfdG9feGVuKCh1bnNpZ25lZCBs b25nKXZhLCAwLCB2bV9zaXplKHZhKSwgX1BBR0VfTk9ORSk7Ci0jZW5kaWYKLSAgICB2bV9mcmVl KHZhKTsKKyAgICByZXR1cm4gX192bWFwKG1mbiwgMSwgbnIsIDEsIFBBR0VfSFlQRVJWSVNPUiwg Vk1BUF9ERUZBVUxUKTsKIH0KIAotdm9pZCAqdm1hbGxvYyhzaXplX3Qgc2l6ZSkKK3N0YXRpYyB2 b2lkICp2bWFsbG9jX3R5cGUoc2l6ZV90IHNpemUsIGVudW0gdm1hcF9yZWdpb24gdHlwZSkKIHsK ICAgICBtZm5fdCAqbWZuOwogICAgIHNpemVfdCBwYWdlcywgaTsKQEAgLTIzOCw3ICsyNzAsNyBA QCB2b2lkICp2bWFsbG9jKHNpemVfdCBzaXplKQogICAgICAgICBtZm5baV0gPSBfbWZuKHBhZ2Vf dG9fbWZuKHBnKSk7CiAgICAgfQogCi0gICAgdmEgPSB2bWFwKG1mbiwgcGFnZXMpOworICAgIHZh ID0gX192bWFwKG1mbiwgMSwgcGFnZXMsIDEsIFBBR0VfSFlQRVJWSVNPUiwgdHlwZSk7CiAgICAg aWYgKCB2YSA9PSBOVUxMICkKICAgICAgICAgZ290byBlcnJvcjsKIApAQCAtMjUyLDkgKzI4NCwx OSBAQCB2b2lkICp2bWFsbG9jKHNpemVfdCBzaXplKQogICAgIHJldHVybiBOVUxMOwogfQogCi12 b2lkICp2emFsbG9jKHNpemVfdCBzaXplKQordm9pZCAqdm1hbGxvYyhzaXplX3Qgc2l6ZSkKIHsK LSAgICB2b2lkICpwID0gdm1hbGxvYyhzaXplKTsKKyAgICByZXR1cm4gdm1hbGxvY190eXBlKHNp emUsIFZNQVBfREVGQVVMVCk7Cit9CisKK3ZvaWQgKnZtYWxsb2NfeGVuKHNpemVfdCBzaXplKQor eworICAgIHJldHVybiB2bWFsbG9jX3R5cGUoc2l6ZSwgVk1BUF9YRU4pOworfQorCitzdGF0aWMg dm9pZCAqdnphbGxvY190eXBlKHNpemVfdCBzaXplLCBlbnVtIHZtYXBfcmVnaW9uIHR5cGUpCit7 CisgICAgdm9pZCAqcCA9IHZtYWxsb2NfdHlwZShzaXplLCB0eXBlKTsKICAgICBpbnQgaTsKIAog ICAgIGlmICggcCA9PSBOVUxMICkKQEAgLTI2NiwxNiArMzA4LDMyIEBAIHZvaWQgKnZ6YWxsb2Mo c2l6ZV90IHNpemUpCiAgICAgcmV0dXJuIHA7CiB9CiAKK3ZvaWQgKnZ6YWxsb2Moc2l6ZV90IHNp emUpCit7CisgICAgcmV0dXJuIHZ6YWxsb2NfdHlwZShzaXplLCBWTUFQX0RFRkFVTFQpOworfQor Cit2b2lkICp2emFsbG9jX3hlbihzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gdnphbGxvY190 eXBlKHNpemUsIFZNQVBfWEVOKTsKK30KKwogdm9pZCB2ZnJlZSh2b2lkICp2YSkKIHsKICAgICB1 bnNpZ25lZCBpbnQgaSwgcGFnZXM7CiAgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGc7CiAgICAgUEFH RV9MSVNUX0hFQUQocGdfbGlzdCk7CisgICAgZW51bSB2bWFwX3JlZ2lvbiB0eXBlID0gVk1BUF9E RUZBVUxUOwogCiAgICAgaWYgKCAhdmEgKQogICAgICAgICByZXR1cm47CiAKLSAgICBwYWdlcyA9 IHZtX3NpemUodmEpOworICAgIHBhZ2VzID0gdm1fc2l6ZSh2YSwgdHlwZSk7CisgICAgaWYgKCAh cGFnZXMgKQorICAgIHsKKyAgICAgICAgdHlwZSA9IFZNQVBfWEVOOworICAgICAgICBwYWdlcyA9 IHZtX3NpemUodmEsIHR5cGUpOworICAgIH0KICAgICBBU1NFUlQocGFnZXMpOwogCiAgICAgZm9y ICggaSA9IDA7IGkgPCBwYWdlczsgaSsrICkKQEAgLTI4NSw3ICszNDMsNyBAQCB2b2lkIHZmcmVl KHZvaWQgKnZhKQogICAgICAgICBBU1NFUlQocGFnZSk7CiAgICAgICAgIHBhZ2VfbGlzdF9hZGQo cGFnZSwgJnBnX2xpc3QpOwogICAgIH0KLSAgICB2dW5tYXAodmEpOworICAgIHZ1bm1hcF9wYWdl cyh2YSwgcGFnZXMpOwogCiAgICAgd2hpbGUgKCAocGcgPSBwYWdlX2xpc3RfcmVtb3ZlX2hlYWQo JnBnX2xpc3QpKSAhPSBOVUxMICkKICAgICAgICAgZnJlZV9kb21oZWFwX3BhZ2UocGcpOwpkaWZm IC0tZ2l0IGEveGVuL2RyaXZlcnMvYWNwaS9vc2wuYyBiL3hlbi9kcml2ZXJzL2FjcGkvb3NsLmMK aW5kZXggOGEyOGQ4Ny4uOWE0OTAyOSAxMDA2NDQKLS0tIGEveGVuL2RyaXZlcnMvYWNwaS9vc2wu YworKysgYi94ZW4vZHJpdmVycy9hY3BpL29zbC5jCkBAIC05Nyw3ICs5Nyw3IEBAIGFjcGlfb3Nf bWFwX21lbW9yeShhY3BpX3BoeXNpY2FsX2FkZHJlc3MgcGh5cywgYWNwaV9zaXplIHNpemUpCiAJ CWlmIChJU19FTkFCTEVEKENPTkZJR19YODYpICYmICEoKHBoeXMgKyBzaXplIC0gMSkgPj4gMjAp KQogCQkJcmV0dXJuIF9fdmEocGh5cyk7CiAJCXJldHVybiBfX3ZtYXAoJm1mbiwgUEZOX1VQKG9m ZnMgKyBzaXplKSwgMSwgMSwKLQkJCSAgICAgIEFDUElfTUFQX01FTV9BVFRSKSArIG9mZnM7CisJ CQkgICAgICBBQ1BJX01BUF9NRU1fQVRUUiwgVk1BUF9ERUZBVUxUKSArIG9mZnM7CiAJfQogCXJl dHVybiBfX2FjcGlfbWFwX3RhYmxlKHBoeXMsIHNpemUpOwogfQpkaWZmIC0tZ2l0IGEveGVuL2lu Y2x1ZGUveGVuL3ZtYXAuaCBiL3hlbi9pbmNsdWRlL3hlbi92bWFwLmgKaW5kZXggNTY3MWFjOC4u MzQzNGI2ZSAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUveGVuL3ZtYXAuaAorKysgYi94ZW4vaW5j bHVkZS94ZW4vdm1hcC5oCkBAIC00LDE1ICs0LDI0IEBACiAjaW5jbHVkZSA8eGVuL21tLmg+CiAj aW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAotdm9pZCAqdm1fYWxsb2ModW5zaWduZWQgaW50IG5yLCB1 bnNpZ25lZCBpbnQgYWxpZ24pOwotdm9pZCB2bV9mcmVlKGNvbnN0IHZvaWQgKik7CitlbnVtIHZt YXBfcmVnaW9uIHsKKyAgICBWTUFQX0RFRkFVTFQsCisgICAgVk1BUF9YRU4sCisgICAgVk1BUF9S RUdJT05fTlIsCit9OwogCi12b2lkICpfX3ZtYXAoY29uc3QgbWZuX3QgKm1mbiwgdW5zaWduZWQg aW50IGdyYW51bGFyaXR5LAotICAgICAgICAgICAgIHVuc2lnbmVkIGludCBuciwgdW5zaWduZWQg aW50IGFsaWduLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwordm9pZCB2bV9pbml0X3R5cGUoZW51bSB2 bWFwX3JlZ2lvbiB0eXBlLCB2b2lkICpzdGFydCwgdm9pZCAqZW5kKTsKKwordm9pZCAqX192bWFw KGNvbnN0IG1mbl90ICptZm4sIHVuc2lnbmVkIGludCBncmFudWxhcml0eSwgdW5zaWduZWQgaW50 IG5yLAorICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhbGlnbiwgdW5zaWduZWQgaW50IGZsYWdz LCBlbnVtIHZtYXBfcmVnaW9uKTsKIHZvaWQgKnZtYXAoY29uc3QgbWZuX3QgKm1mbiwgdW5zaWdu ZWQgaW50IG5yKTsKIHZvaWQgdnVubWFwKGNvbnN0IHZvaWQgKik7CisKIHZvaWQgKnZtYWxsb2Mo c2l6ZV90IHNpemUpOwordm9pZCAqdm1hbGxvY194ZW4oc2l6ZV90IHNpemUpOworCiB2b2lkICp2 emFsbG9jKHNpemVfdCBzaXplKTsKK3ZvaWQgKnZ6YWxsb2NfeGVuKHNpemVfdCBzaXplKTsKIHZv aWQgdmZyZWUodm9pZCAqdmEpOwogCiB2b2lkIF9faW9tZW0gKmlvcmVtYXAocGFkZHJfdCwgc2l6 ZV90KTsKQEAgLTI0LDcgKzMzLDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpb3VubWFwKHZvaWQg X19pb21lbSAqdmEpCiAgICAgdnVubWFwKCh2b2lkICopKGFkZHIgJiBQQUdFX01BU0spKTsKIH0K IAotdm9pZCB2bV9pbml0KHZvaWQpOwogdm9pZCAqYXJjaF92bWFwX3ZpcnRfZW5kKHZvaWQpOwor c3RhdGljIGlubGluZSB2b2lkIHZtX2luaXQodm9pZCkKK3sKKyAgICB2bV9pbml0X3R5cGUoVk1B UF9ERUZBVUxULCAodm9pZCAqKVZNQVBfVklSVF9TVEFSVCwgYXJjaF92bWFwX3ZpcnRfZW5kKCkp OworfQogCiAjZW5kaWYgLyogX19YRU5fVk1BUF9IX18gKi8KLS0gCjIuNC4zCgoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcg bGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2 ZWwK