From mboxrd@z Thu Jan 1 00:00:00 1970 From: Zhongze Liu Subject: [PATCH 5/6] libxl: support mapping static shared memory areas during domain creation Date: Wed, 23 Aug 2017 02:08:39 +0800 Message-ID: <20170822180840.20981-6-blackskygg@gmail.com> References: <20170822180840.20981-1-blackskygg@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170822180840.20981-1-blackskygg@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: Stefano Stabellini , Wei Liu , Zhongze Liu , George Dunlap , Andrew Cooper , Ian Jackson , Tim Deegan , Julien Grall , Jan Beulich List-Id: xen-devel@lists.xenproject.org QWRkIGxpYnhsX19zc2htX2FkZCB0byBtYXAgc2hhcmVkIHBhZ2VzIGZyb20gb25lIERvbVUgdG8g YW5vdGhlciwgVGhlIG1hcHBpbmcKcHJvY2VzcyBpbnZvbHZlcyB0aGUgZm9sbHdpbmcgc3RlcHM6 CgogICogU2V0IGRlZmF1bHRzIGFuZCBjaGVjayBmb3IgZnVydGhlciBlcnJvcnMgaW4gdGhlIHN0 YXRpY19zaG0gY29uZmlnczoKICAgIG92ZXJsYXBwaW5nIGFyZWFzLCBpbnZhbGlkIHJhbmdlcywg ZHVwbGljYXRlZCBtYXN0ZXIgZG9tYWluLAogICAgbm8gbWFzdGVyIGRvbWFpbiBldGMuCiAgKiBX cml0ZSBpbmZvbWF0aW9uIG9mIHN0YXRpYyBzaGFyZWQgbWVtb3J5IGFyZWFzIGludG8gdGhlIGFw cHJvcHJpYXRlCiAgICB4ZW5zdG9yZSBwYXRocy4KICAqIHVzZSB4Y19kb21haW5fYWRkX3RvX3Bo eXNtYXBfYmF0Y2ggdG8gZG8gdGhlIHBhZ2Ugc2hhcmluZy4KClRlbXBvcmFyaWx5IG1hcmsgdGhp cyBhcyB1bnN1cHBvcnRlZCBvbiB4ODYgYmVjYXVzZSBjYWxsaW5nIHAybV9hZGRfZm9yZWdpbiBv bgp0d28gZG9tVSdzIGlzIGN1cnJlbnRseSBub3QgYWxsb3dkIG9uIHg4NiAoc2VlIHRoZSBjb21t ZW50cyBpbgp4ODYvbW0vcDJtLmM6cDJtX2FkZF9mb3JlZ2luIGZvciBtb3JlIGRldGFpbHMpLgoK VGhpcyBpcyBmb3IgdGhlIHByb3Bvc2FsICJBbGxvdyBzZXR0aW5nIHVwIHNoYXJlZCBtZW1vcnkg YXJlYXMgYmV0d2VlbiBWTXMKZnJvbSB4bCBjb25maWcgZmlsZSIgKHNlZSBbMV0pLgoKWzFdIGh0 dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvYXJjaGl2ZXMvaHRtbC94ZW4tZGV2ZWwvMjAxNy0w Ny9tc2cwMzA0Ny5odG1sCgpTaWduZWQtb2ZmLWJ5OiBaaG9uZ3plIExpdSA8YmxhY2tza3lnZ0Bn bWFpbC5jb20+CgpDYzogQW5kcmV3IENvb3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbT4K Q2M6IEdlb3JnZSBEdW5sYXAgPEdlb3JnZS5EdW5sYXBAZXUuY2l0cml4LmNvbT4KQ2M6IElhbiBK YWNrc29uIDxpYW4uamFja3NvbkBldS5jaXRyaXguY29tPgpDYzogSmFuIEJldWxpY2ggPGpiZXVs aWNoQHN1c2UuY29tPgpDYzogS29ucmFkIFJ6ZXN6dXRlayBXaWxrIDxrb25yYWQud2lsa0BvcmFj bGUuY29tPgpDYzogU3RlZmFubyBTdGFiZWxsaW5pIDxzc3RhYmVsbGluaUBrZXJuZWwub3JnPgpD YzogVGltIERlZWdhbiA8dGltQHhlbi5vcmc+CkNjOiBXZWkgTGl1IDx3ZWkubGl1MkBjaXRyaXgu Y29tPgpDYzogSnVsaWVuIEdyYWxsIDxqdWxpZW4uZ3JhbGxAYXJtLmNvbT4KQ2M6IHhlbi1kZXZl bEBsaXN0cy54ZW4ub3JnCi0tLQogdG9vbHMvbGlieGwvTWFrZWZpbGUgICAgICAgICB8ICAgMiAr LQogdG9vbHMvbGlieGwvbGlieGxfYXJjaC5oICAgICB8ICAgNiArCiB0b29scy9saWJ4bC9saWJ4 bF9hcm0uYyAgICAgIHwgIDE1ICsrCiB0b29scy9saWJ4bC9saWJ4bF9jcmVhdGUuYyAgIHwgIDI3 ICsrKysKIHRvb2xzL2xpYnhsL2xpYnhsX2ludGVybmFsLmggfCAgMTQgKysKIHRvb2xzL2xpYnhs L2xpYnhsX3NzaG0uYyAgICAgfCAzMzYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwogdG9vbHMvbGlieGwvbGlieGxfeDg2LmMgICAgICB8ICAxOCArKysKIHRvb2xz L2xpYnhsL2xpYnhsX3hzaGVscC5jICAgfCAgIDggKysKIDggZmlsZXMgY2hhbmdlZCwgNDI1IGlu c2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy9saWJ4 bC9saWJ4bF9zc2htLmMKCmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9NYWtlZmlsZSBiL3Rvb2xz L2xpYnhsL01ha2VmaWxlCmluZGV4IDNiNjNmYjJjYWQuLmZkNjI0YjI4ZjMgMTAwNjQ0Ci0tLSBh L3Rvb2xzL2xpYnhsL01ha2VmaWxlCisrKyBiL3Rvb2xzL2xpYnhsL01ha2VmaWxlCkBAIC0xMzgs NyArMTM4LDcgQEAgTElCWExfT0JKUyA9IGZsZXhhcnJheS5vIGxpYnhsLm8gbGlieGxfY3JlYXRl Lm8gbGlieGxfZG0ubyBsaWJ4bF9wY2kubyBcCiAJCQlsaWJ4bF9kb21fc3VzcGVuZC5vIGxpYnhs X2RvbV9zYXZlLm8gbGlieGxfdXNiLm8gXAogCQkJbGlieGxfdnRwbS5vIGxpYnhsX25pYy5vIGxp YnhsX2Rpc2subyBsaWJ4bF9jb25zb2xlLm8gXAogCQkJbGlieGxfY3B1cG9vbC5vIGxpYnhsX21l bS5vIGxpYnhsX3NjaGVkLm8gbGlieGxfdG1lbS5vIFwKLQkJCWxpYnhsXzlwZnMubyBsaWJ4bF9k b21haW4ubyBcCisJCQlsaWJ4bF85cGZzLm8gbGlieGxfZG9tYWluLm8gbGlieGxfc3NobS5vIFwK ICAgICAgICAgICAgICAgICAgICAgICAgICQoTElCWExfT0JKUy15KQogTElCWExfT0JKUyArPSBs aWJ4bF9nZW5pZC5vCiBMSUJYTF9PQkpTICs9IF9saWJ4bF90eXBlcy5vIGxpYnhsX2ZsYXNrLm8g X2xpYnhsX3R5cGVzX2ludGVybmFsLm8KZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX2Fy Y2guaCBiL3Rvb2xzL2xpYnhsL2xpYnhsX2FyY2guaAppbmRleCA1ZTFmYzYwNjBlLi4xZDY4MWQ4 ODYzIDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF9hcmNoLmgKKysrIGIvdG9vbHMvbGli eGwvbGlieGxfYXJjaC5oCkBAIC03MSw2ICs3MSwxMiBAQCBpbnQgbGlieGxfX2FyY2hfZXh0cmFf bWVtb3J5KGxpYnhsX19nYyAqZ2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGxpYnhsX2RvbWFpbl9idWlsZF9pbmZvICppbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1aW50NjRfdCAqb3V0KTsKIAorX2hpZGRlbgorYm9vbCBsaWJ4bF9fYXJjaF9kb21haW5f c3VwcG9ydF9zc2htKGNvbnN0IGxpYnhsX2RvbWFpbl9idWlsZF9pbmZvICpiX2luZm8pOworCitf aGlkZGVuCitpbnQgbGlieGxfX2FyY2hfZG9tYWluX3NzaG1fY2FjaGVwb2xpY3lfc2V0ZGVmYXVs dChsaWJ4bF9zdGF0aWNfc2htICpzc2htKTsKKwogI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRl ZmluZWQoX194ODZfNjRfXykKIAogI2RlZmluZSBMQVBJQ19CQVNFX0FERFJFU1MgIDB4ZmVlMDAw MDAKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX2FybS5jIGIvdG9vbHMvbGlieGwvbGli eGxfYXJtLmMKaW5kZXggZDg0MmQ4ODhlYi4uMDk3NTEwOWMwYyAxMDA2NDQKLS0tIGEvdG9vbHMv bGlieGwvbGlieGxfYXJtLmMKKysrIGIvdG9vbHMvbGlieGwvbGlieGxfYXJtLmMKQEAgLTEwNjUs NiArMTA2NSwyMSBAQCB2b2lkIGxpYnhsX19hcmNoX2RvbWFpbl9idWlsZF9pbmZvX2FjcGlfc2V0 ZGVmYXVsdCgKICAgICBsaWJ4bF9kZWZib29sX3NldGRlZmF1bHQoJmJfaW5mby0+YWNwaSwgZmFs c2UpOwogfQogCitib29sIGxpYnhsX19hcmNoX2RvbWFpbl9zdXBwb3J0X3NzaG0oY29uc3QgbGli eGxfZG9tYWluX2J1aWxkX2luZm8gKmJfaW5mbykKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor aW50IGxpYnhsX19hcmNoX2RvbWFpbl9zc2htX2NhY2hlcG9saWN5X3NldGRlZmF1bHQobGlieGxf c3RhdGljX3NobSAqc3NobSkKK3sKKyAgICBpZiAoc3NobS0+Y2FjaGVfcG9saWN5ID09IExJQlhM X1NTSE1fQ0FDSEVQT0xJQ1lfVU5LTk9XTikKKyAgICAgICAgc3NobS0+Y2FjaGVfcG9saWN5ID0g TElCWExfU1NITV9DQUNIRVBPTElDWV9BUk1fTk9STUFMOworICAgIGlmIChzc2htLT5jYWNoZV9w b2xpY3kgPj0gTElCWExfU1NITV9DQUNIRVBPTElDWV9YODZfTk9STUFMKQorICAgICAgICByZXR1 cm4gRVJST1JfSU5WQUw7CisKKyAgICByZXR1cm4gMDsKK30KKwogLyoKICAqIExvY2FsIHZhcmlh YmxlczoKICAqIG1vZGU6IEMKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX2NyZWF0ZS5j IGIvdG9vbHMvbGlieGwvbGlieGxfY3JlYXRlLmMKaW5kZXggMTE1ODMwM2UxYS4uOGU1ZWM0ODZk MiAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfY3JlYXRlLmMKKysrIGIvdG9vbHMvbGli eGwvbGlieGxfY3JlYXRlLmMKQEAgLTUwMSw2ICs1MDEsMTQgQEAgaW50IGxpYnhsX19kb21haW5f YnVpbGQobGlieGxfX2djICpnYywKICAgICAgICAgcmV0ID0gRVJST1JfSU5WQUw7CiAgICAgICAg IGdvdG8gb3V0OwogICAgIH0KKworICAgIC8qIHRoZSBwMm0gaGFzIGJlZW4gc2V0dXAsIHdlIGNv dWxkIG1hcCB0aGUgc3RhdGljIHNoYXJlZCBtZW1vcnkgbm93LiAqLworICAgIHJldCA9IGxpYnhs X19zc2htX2FkZChnYywgZG9taWQsIGRfY29uZmlnLT5zc2htcywgZF9jb25maWctPm51bV9zc2ht cyk7CisgICAgaWYgKHJldCAhPSAwKSB7CisgICAgICAgIExPRyhFUlJPUiwgImZhaWxlZCB0byBt YXAgc3RhdGljIHNoYXJlZCBtZW1vcnkiKTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCiAg ICAgcmV0ID0gbGlieGxfX2J1aWxkX3Bvc3QoZ2MsIGRvbWlkLCBpbmZvLCBzdGF0ZSwgdm1lbnRz LCBsb2NhbGVudHMpOwogb3V0OgogICAgIHJldHVybiByZXQ7CkBAIC05MTgsNiArOTI2LDI1IEBA IHN0YXRpYyB2b2lkIGluaXRpYXRlX2RvbWFpbl9jcmVhdGUobGlieGxfX2VnYyAqZWdjLAogICAg ICAgICBnb3RvIGVycm9yX291dDsKICAgICB9CiAKKyAgICBpZiAoZF9jb25maWctPm51bV9zc2ht cyAhPSAwICYmCisgICAgICAgICFsaWJ4bF9fYXJjaF9kb21haW5fc3VwcG9ydF9zc2htKCZkX2Nv bmZpZy0+Yl9pbmZvKSkgeworICAgICAgICBMT0dEKEVSUk9SLCBkb21pZCwgInN0YXRpY19zaG0g aXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRvbWFpbiB0eXBlLiIpOworICAgICAgICByZXQgPSBF UlJPUl9JTlZBTDsKKyAgICAgICAgZ290byBlcnJvcl9vdXQ7CisgICAgfQorCisgICAgcmV0ID0g bGlieGxfX3NzaG1fY2hlY2tfb3ZlcmxhcChnYywgZG9taWQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkX2NvbmZpZy0+c3NobXMsIGRfY29uZmlnLT5udW1fc3NobXMpOwor ICAgIGlmIChyZXQpIGdvdG8gZXJyb3Jfb3V0OworCisgICAgZm9yIChpID0gMDsgaSA8IGRfY29u ZmlnLT5udW1fc3NobXM7ICsraSkgeworICAgICAgICByZXQgPSBsaWJ4bF9fc3NobV9zZXRkZWZh dWx0KGdjLCBkb21pZCwgJmRfY29uZmlnLT5zc2htc1tpXSk7CisgICAgICAgIGlmIChyZXQpIHsK KyAgICAgICAgICAgIExPR0QoRVJST1IsIGRvbWlkLCAiVW5hYmxlIHRvIHNldCBkZWZhdWx0cyBm b3Igc3RhdGljIHNzaG0iKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3Jfb3V0OworICAgICAgICB9 CisgICAgfQorCiAgICAgcmV0ID0gbGlieGxfX2RvbWFpbl9tYWtlKGdjLCBkX2NvbmZpZywgJmRv bWlkLCAmc3RhdGUtPmNvbmZpZyk7CiAgICAgaWYgKHJldCkgewogICAgICAgICBMT0dEKEVSUk9S LCBkb21pZCwgImNhbm5vdCBtYWtlIGRvbWFpbjogJWQiLCByZXQpOwpkaWZmIC0tZ2l0IGEvdG9v bHMvbGlieGwvbGlieGxfaW50ZXJuYWwuaCBiL3Rvb2xzL2xpYnhsL2xpYnhsX2ludGVybmFsLmgK aW5kZXggNzI0NzUwOTY3Yy4uNzRiYzBhY2IyMSAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGli eGxfaW50ZXJuYWwuaAorKysgYi90b29scy9saWJ4bC9saWJ4bF9pbnRlcm5hbC5oCkBAIC03MjEs NiArNzIxLDcgQEAgX2hpZGRlbiBjaGFyICoqbGlieGxfX3hzX2RpcmVjdG9yeShsaWJ4bF9fZ2Mg KmdjLCB4c190cmFuc2FjdGlvbl90IHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGludCAqbmIpOwogICAgLyogT24gZXJyb3I6 IHJldHVybnMgTlVMTCwgc2V0cyBlcnJubyAobm8gbG9nZ2luZykgKi8KIF9oaWRkZW4gY2hhciAq bGlieGxfX3hzX2xpYnhsX3BhdGgobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQpOworX2hp ZGRlbiBjaGFyICpsaWJ4bF9feHNfZ2V0X3NzaG1wYXRoKGxpYnhsX19nYyAqZ2MsIGNvbnN0IGNo YXIgKmlkKTsKIAogX2hpZGRlbiBpbnQgbGlieGxfX2JhY2tlbmRwYXRoX3BhcnNlX2RvbWlkKGxp YnhsX19nYyAqZ2MsIGNvbnN0IGNoYXIgKmJlX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGlieGxfZG9taWQgKmRvbWlkX291dCk7CkBAIC00MzUyLDYg KzQzNTMsMTkgQEAgc3RhdGljIGlubGluZSBib29sIGxpYnhsX19hY3BpX2RlZmJvb2xfdmFsKGNv bnN0IGxpYnhsX2RvbWFpbl9idWlsZF9pbmZvICpiX2luZm8KIH0KICNlbmRpZgogCisvKgorICog U2V0IHVwIHN0YXRpYyBzaGFyZWQgcmFtIHBhZ2VzIGZvciBIVk0gZG9tYWlucyB0byBjb21tdW5p Y2F0ZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFmdGVyIHRo ZSBtZW1vcnkgbWFwIGlzIGNvbnN0cnVjdGVkCisgKiBhbmQgYmVmb3JlIGFueSBmdXJ0aGVyIG1l bW9yeSBhY2Nlc3MuICovCitfaGlkZGVuIGludCBsaWJ4bF9fc3NobV9hZGQobGlieGxfX2djICpn YywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfc3Rh dGljX3NobSAqc3NobSwgaW50IGxlbik7CisKK19oaWRkZW4gaW50IGxpYnhsX19zc2htX2NoZWNr X292ZXJsYXAobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX3N0YXRpY19zaG0gKnNzaG1zLCBpbnQgbGVuKTsK K19oaWRkZW4gaW50IGxpYnhsX19zc2htX3NldGRlZmF1bHQobGlieGxfX2djICpnYywgdWludDMy X3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX3N0YXRp Y19zaG0gKnNzaG0pOworCiAvKgogICogTG9jYWwgdmFyaWFibGVzOgogICogbW9kZTogQwpkaWZm IC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxfc3NobS5jIGIvdG9vbHMvbGlieGwvbGlieGxfc3No bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmUxNmMyNGNjYjkKLS0t IC9kZXYvbnVsbAorKysgYi90b29scy9saWJ4bC9saWJ4bF9zc2htLmMKQEAgLTAsMCArMSwzMzYg QEAKKyNpbmNsdWRlICJsaWJ4bF9vc2RlcHMuaCIKKyNpbmNsdWRlICJsaWJ4bF9pbnRlcm5hbC5o IgorI2luY2x1ZGUgImxpYnhsX2FyY2guaCIKKworI2RlZmluZSBTU0hNX0VSUk9SKGRvbWlkLCBz c2htaWQsIGYsIC4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIExPR0Qo RVJST1IsIGRvbWlkLCAic3RhdGljX3NobSBpZCA9ICVzOiAiIGYsIHNzaG1pZCwgIyNfX1ZBX0FS R1NfXykKKworCisvKiBTZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGxpYnhsX3N0YXRpY19zaG0gKi8K K2ludCBsaWJ4bF9fc3NobV9zZXRkZWZhdWx0KGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlk LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX3N0YXRpY19zaG0gKnNz aG0pCit7CisgICAgaW50IHJjOworCisgICAgaWYgKHNzaG0tPnJvbGUgPT0gTElCWExfU1NITV9S T0xFX1VOS05PV04pIHsKKyAgICAgICAgc3NobS0+cm9sZSA9IExJQlhMX1NTSE1fUk9MRV9TTEFW RTsKKyAgICB9CisgICAgaWYgKHNzaG0tPnByb3QgPT0gTElCWExfU1NITV9QUk9UX1VOS05PV04p IHsKKyAgICAgICAgc3NobS0+cHJvdCA9IExJQlhMX1NTSE1fUFJPVF9SVzsKKyAgICB9CisgICAg Lyogcm9sZS1zcGVjaWZpYyBjaGVja3MgKi8KKyAgICBpZiAoTElCWExfU1NITV9ST0xFX1NMQVZF ID09IHNzaG0tPnJvbGUpIHsKKyAgICAgICAgaWYgKHNzaG0tPm9mZnNldCA9PSBMSUJYTF9TU0hN X1JBTkdFX1VOS05PV04pIHsKKyAgICAgICAgICAgIHNzaG0tPm9mZnNldCA9IDA7CisgICAgICAg IH0KKyAgICAgICAgaWYgKHNzaG0tPmNhY2hlX3BvbGljeSAhPSBMSUJYTF9TU0hNX0NBQ0hFUE9M SUNZX1VOS05PV04pIHsKKyAgICAgICAgICAgIFNTSE1fRVJST1IoZG9taWQsIHNzaG0tPmlkLAor ICAgICAgICAgICAgICAgICAgICAgICAiY2FjaGVfcG9saWN5IGlzIG9ubHkgYXBwbGljYWJsZSB0 byBtYXN0ZXIgZG9tYWlucyIpOworICAgICAgICAgICAgcmV0dXJuIEVSUk9SX0lOVkFMOworICAg ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHNzaG0tPm9mZnNldCAhPSBMSUJYTF9T U0hNX1JBTkdFX1VOS05PV04pIHsKKyAgICAgICAgICAgIFNTSE1fRVJST1IoZG9taWQsIHNzaG0t PmlkLAorICAgICAgICAgICAgICAgICAgICAgICAib2Zmc2V0IGlzIG9ubHkgYXBwbGljYWJsZSB0 byBzbGF2ZSBkb21haW5zIik7CisgICAgICAgICAgICByZXR1cm4gRVJST1JfSU5WQUw7CisgICAg ICAgIH0KKyAgICAgICAgcmMgPSBsaWJ4bF9fYXJjaF9kb21haW5fc3NobV9jYWNoZXBvbGljeV9z ZXRkZWZhdWx0KHNzaG0pOworICAgICAgICBpZiAocmMpIHsKKyAgICAgICAgICAgIFNTSE1fRVJS T1IoZG9taWQsIHNzaG0tPmlkLAorICAgICAgICAgICAgICAgICAgICAgICAiY2FjaGUgcG9saWN5 IG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIpOworICAgICAgICAgICAgcmV0dXJuIEVS Uk9SX0lOVkFMOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKy8qIENv bXBhcmUgZnVuY3Rpb24gZm9yIHNvcnRpbmcgc3NobSByYW5nZXMgYnkgc3NobS0+YmVnaW4gKi8K K3N0YXRpYyBpbnQgc3NobV9yYW5nZV9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikK K3sKKyAgICBsaWJ4bF9zdGF0aWNfc2htICpjb25zdCAqc3NobWEgPSBhLCAqY29uc3QgKnNzaG1i ID0gYjsKKyAgICByZXR1cm4gKCpzc2htYSktPmJlZ2luID4gKCpzc2htYiktPmJlZ2luID8gMSA6 IC0xOworfQorCisvKiBjaGVjayBpZiB0aGUgc3NobSBzbGF2ZSBjb25maWdzIGluIEBzc2htIG92 ZXJsYXAgKi8KK2ludCBsaWJ4bF9fc3NobV9jaGVja19vdmVybGFwKGxpYnhsX19nYyAqZ2MsIHVp bnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhs X3N0YXRpY19zaG0gKnNzaG1zLCBpbnQgbGVuKQoreworCisgICAgY29uc3QgbGlieGxfc3RhdGlj X3NobSAqKnNsYXZlX3NzaG1zID0gTlVMTDsKKyAgICBpbnQgbnVtX3NsYXZlczsKKyAgICBpbnQg aTsKKworICAgIHNsYXZlX3NzaG1zID0gbGlieGxfX2NhbGxvYyhnYywgbGVuLCBzaXplb2Yoc2xh dmVfc3NobXNbMF0pKTsKKyAgICBudW1fc2xhdmVzID0gMDsKKyAgICBmb3IgKGkgPSAwOyBpIDwg bGVuOyArK2kpIHsKKyAgICAgICAgaWYgKExJQlhMX1NTSE1fUk9MRV9TTEFWRSA9PSBzc2htc1tp XS5yb2xlKQorICAgICAgICAgICAgc2xhdmVfc3NobXNbbnVtX3NsYXZlcysrXSA9IHNzaG1zICsg aTsKKyAgICB9CisgICAgcXNvcnQoc2xhdmVfc3NobXMsIG51bV9zbGF2ZXMsIHNpemVvZihzbGF2 ZV9zc2htc1swXSksIHNzaG1fcmFuZ2VfY21wKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBudW1f c2xhdmVzIC0gMTsgKytpKSB7CisgICAgICAgIGlmIChzbGF2ZV9zc2htc1tpKzFdLT5iZWdpbiA8 IHNsYXZlX3NzaG1zW2ldLT5lbmQpIHsKKyAgICAgICAgICAgIFNTSE1fRVJST1IoZG9taWQsIHNs YXZlX3NzaG1zW2krMV0tPmlkLCAic2xhdmUgcmFuZ2VzIG92ZXJsYXAuIik7CisgICAgICAgICAg ICByZXR1cm4gRVJST1JfSU5WQUw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsK K30KKworLyogVGhlIGNhbGxlciBoYXZlIHRvIGd1YXJlbnRlZSB0aGF0IHNzaG0tPmJlZ2luIDwg c3NobS0+ZW5kICovCitzdGF0aWMgaW50IGxpYnhsX19zc2htX2RvX21hcChsaWJ4bF9fZ2MgKmdj LCB1aW50MzJfdCBtaWQsIHVpbnQzMl90IHNpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxpYnhsX3N0YXRpY19zaG0gKnNzaG0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1aW50NjRfdCBtYmVnaW4sIHVpbnQ2NF90IG1lbmQpCit7CisgICAgaW50IHJjOworICAgIGlu dCBpOworICAgIHVuc2lnbmVkIGludCBudW1fbXBhZ2VzLCBudW1fc3BhZ2VzLCBvZmZzZXQ7Cisg ICAgaW50ICplcnJzOworICAgIHhlbl91bG9uZ190ICppZHhzOworICAgIHhlbl9wZm5fdCAqZ3Bm bnM7CisKKyAgICBudW1fbXBhZ2VzID0gKG1lbmQgLSBtYmVnaW4pID4+IDEyOworICAgIG51bV9z cGFnZXMgPSAoc3NobS0+ZW5kIC0gc3NobS0+YmVnaW4pID4+IDEyOworICAgIG9mZnNldCA9IHNz aG0tPm9mZnNldCA+PiAxMjsKKworICAgIC8qIENoZWNrIHJhbmdlLiBUZXN0IG9mZnNldCA8IG1w YWdlcyBmaXJzdCB0byBhdm9pZCBvdmVyZmxvdyAqLworICAgIGlmICgob2Zmc2V0ID49IG51bV9t cGFnZXMpIHx8IChudW1fbXBhZ2VzIC0gb2Zmc2V0IDwgbnVtX3NwYWdlcykpIHsKKyAgICAgICAg U1NITV9FUlJPUihzaWQsIHNzaG0tPmlkLCAiZXhjZWVkcyBtYXN0ZXIncyBhZGRyZXNzIHNwYWNl LiIpOworICAgICAgICByYyA9IEVSUk9SX0lOVkFMOworICAgICAgICBnb3RvIG91dDsKKyAgICB9 CisKKyAgICAvKiBmaWxsIG91dCB0aGUgcGZuJ3MgYW5kIGRvIHRoZSBtYXBwaW5nICovCisgICAg ZXJycyA9IGxpYnhsX19jYWxsb2MoZ2MsIG51bV9zcGFnZXMsIHNpemVvZihpbnQpKTsKKyAgICBp ZHhzID0gbGlieGxfX2NhbGxvYyhnYywgbnVtX3NwYWdlcywgc2l6ZW9mKHhlbl91bG9uZ190KSk7 CisgICAgZ3BmbnMgPSBsaWJ4bF9fY2FsbG9jKGdjLCBudW1fc3BhZ2VzLCBzaXplb2YoeGVuX3Bm bl90KSk7CisgICAgZm9yIChpID0gMDsgaSA8IG51bV9zcGFnZXM7IGkrKykgeworICAgICAgICBp ZHhzW2ldID0gKG1iZWdpbiA+PiAxMikgKyBvZmZzZXQgKyBpOworICAgICAgICBncGZuc1tpXT0g KHNzaG0tPmJlZ2luID4+IDEyKSArIGk7CisgICAgfQorICAgIHJjID0geGNfZG9tYWluX2FkZF90 b19waHlzbWFwX2JhdGNoKENUWC0+eGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpZCwgbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFhFTk1BUFNQQUNFX2dtZm5fZm9yZWlnbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBudW1fc3BhZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlkeHMsIGdwZm5zLCBlcnJzKTsKKworICAgIGZvciAoaSA9IDA7IGk8IG51bV9z cGFnZXM7IGkrKykgeworICAgICAgICBpZiAoZXJyc1tpXSkgeworICAgICAgICAgICAgU1NITV9F UlJPUihzaWQsIHNzaG0tPmlkLAorICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgbWFwIGF0 IGFkZHJlc3MgMHglIlBSSXg2NCIuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgc3NobS0+YmVn aW4gKyAob2Zmc2V0IDw8IDEyKSApOworICAgICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAg ICAgICB9CisgICAgfQorICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICByYyA9IDA7CisKK291 dDoKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgbGlieGxfX3NzaG1fYWRkX3NsYXZl KGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfc3RhdGljX3NobSAqc3NobSkKK3sKKyAgICBpbnQgcmM7CisgICAgY2hh ciAqc3NobV9wYXRoLCAqc2xhdmVfcGF0aCwgKmRvbV9wYXRoLCAqZG9tX3NzaG1fcGF0aCwgKmRv bV9yb2xlX3BhdGg7CisgICAgY2hhciAqZW50c1s5XTsKKyAgICBjb25zdCBjaGFyICp4c192YWx1 ZTsKKyAgICBsaWJ4bF9zdGF0aWNfc2htIG1hc3Rlcl9zc2htOworICAgIHVpbnQzMl90IG1hc3Rl cl9kb21pZDsKKyAgICB4c190cmFuc2FjdGlvbl90IHh0ID0gWEJUX05VTEw7CisKKyAgICBzc2ht X3BhdGggPSBsaWJ4bF9feHNfZ2V0X3NzaG1wYXRoKGdjLCBzc2htLT5pZCk7CisgICAgc2xhdmVf cGF0aCA9IEdDU1BSSU5URigiJXMvc2xhdmVzLyUiUFJJdTMyLCBzc2htX3BhdGgsIGRvbWlkKTsK KyAgICBkb21fcGF0aCA9IGxpYnhsX194c19nZXRfZG9tcGF0aChnYywgZG9taWQpOworICAgIC8q IHRoZSBkb21haW4gc2hvdWxkIGJlIGluIHhlbnN0b3JlIGJ5IG5vdyAqLworICAgIGFzc2VydChk b21fcGF0aCk7CisgICAgZG9tX3NzaG1fcGF0aCA9IEdDU1BSSU5URigiJXMvc3RhdGljX3NobS8l cyIsIGRvbV9wYXRoLCBzc2htLT5pZCk7CisgICAgZG9tX3JvbGVfcGF0aCA9IEdDU1BSSU5URigi JXMvcm9sZSIsIGRvbV9zc2htX3BhdGgpOworCisgICAgLyogcHJlcGFyZSB0aGUgc2xhdmUgeGVu c3RvcmUgZW50cmllcyAqLworICAgIGVudHNbMF0gPSAiYmVnaW4iOworICAgIGVudHNbMV0gPSBH Q1NQUklOVEYoIjB4JSJQUkl4NjQsIHNzaG0tPmJlZ2luKTsKKyAgICBlbnRzWzJdID0gImVuZCI7 CisgICAgZW50c1szXSA9IEdDU1BSSU5URigiMHglIlBSSXg2NCwgc3NobS0+ZW5kKTsKKyAgICBl bnRzWzRdID0gIm9mZnNldCI7CisgICAgZW50c1s1XSA9IEdDU1BSSU5URigiMHglIlBSSXg2NCwg c3NobS0+b2Zmc2V0KTsKKyAgICBlbnRzWzZdID0gInByb3QiOworICAgIGVudHNbN10gPSBsaWJ4 bF9fc3RyZHVwKGdjLCBsaWJ4bF9zc2htX3Byb3RfdG9fc3RyaW5nKHNzaG0tPnByb3QpKTsKKyAg ICBlbnRzWzhdID0gTlVMTDsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgcmMgPSBsaWJ4bF9f eHNfdHJhbnNhY3Rpb25fc3RhcnQoZ2MsICZ4dCk7CisgICAgICAgIGlmIChyYykgZ290byBvdXQ7 CisKKyAgICAgICAgaWYgKCFsaWJ4bF9feHNfcmVhZChnYywgeHQsIHNzaG1fcGF0aCkpIHsKKyAg ICAgICAgICAgIFNTSE1fRVJST1IoZG9taWQsIHNzaG0tPmlkLCAibm8gbWFzdGVyIGZvdW5kLiIp OworICAgICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAgICAgICAgZ290byBvdXQ7Cisg ICAgICAgIH0KKworICAgICAgICAvKiBldmVyeSBJRCBjYW4gYXBwZWFyIGluIGVhY2ggZG9tYWlu IGF0IG1vc3Qgb25jZSAqLworICAgICAgICBpZiAobGlieGxfX3hzX3JlYWQoZ2MsIHh0LCBkb21f c3NobV9wYXRoKSkgeworICAgICAgICAgICAgU1NITV9FUlJPUihkb21pZCwgc3NobS0+aWQsCisg ICAgICAgICAgICAgICAgICAgICAgICJkb21haW4gdHJpZWQgdG8gbWFwIHRoZSBzYW1lIElEIHR3 aWNlLiIpOworICAgICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAgICAgICAgZ290byBv dXQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBsb29rIGF0IHRoZSBtYXN0ZXIgaW5mbyBhbmQg c2VlIGlmIHdlIGNvdWxkIGRvIHRoZSBtYXBwaW5nICovCisgICAgICAgIHJjID0gbGlieGxfX3hz X3JlYWRfY2hlY2tlZChnYywgeHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBHQ1NQUklOVEYoIiVzL3Byb3QiLCBzc2htX3BhdGgpLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJnhzX3ZhbHVlKTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKyAg ICAgICAgbGlieGxfc3NobV9wcm90X2Zyb21fc3RyaW5nKHhzX3ZhbHVlLCAmbWFzdGVyX3NzaG0u cHJvdCk7CisKKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfcmVhZF9jaGVja2VkKGdjLCB4dCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJXMvYmVnaW4iLCBz c2htX3BhdGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnhzX3ZhbHVl KTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKyAgICAgICAgbWFzdGVyX3NzaG0uYmVnaW4g PSBzdHJ0b3VsbCh4c192YWx1ZSwgTlVMTCwgMTYpOworCisgICAgICAgIHJjID0gbGlieGxfX3hz X3JlYWRfY2hlY2tlZChnYywgeHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBHQ1NQUklOVEYoIiVzL2VuZCIsIHNzaG1fcGF0aCksCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmeHNfdmFsdWUpOworICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworICAg ICAgICBtYXN0ZXJfc3NobS5lbmQgPSBzdHJ0b3VsbCh4c192YWx1ZSwgTlVMTCwgMTYpOworCisg ICAgICAgIHJjID0gbGlieGxfX3hzX3JlYWRfY2hlY2tlZChnYywgeHQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVzL21hc3RlciIsIHNzaG1fcGF0aCks CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeHNfdmFsdWUpOworICAgICAg ICBpZiAocmMpIGdvdG8gb3V0OworICAgICAgICBtYXN0ZXJfZG9taWQgPSBzdHJ0b3VsbCh4c192 YWx1ZSwgTlVMTCwgMTYpOworCisgICAgICAgIC8qIGNoZWNrIGlmIHRoZSBzbGF2ZSBpcyBhc2tp bmcgdG9vIG11Y2ggcGVybWlzc2lvbiAqLworICAgICAgICBpZiAoTElCWExfU1NITV9QUk9UX1VO S05PV04gPT0gc3NobS0+cHJvdCkgeworICAgICAgICAgICAgc3NobS0+cHJvdCA9IG1hc3Rlcl9z c2htLnByb3Q7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1hc3Rlcl9zc2htLnByb3QgPCBzc2ht LT5wcm90KSB7CisgICAgICAgICAgICBTU0hNX0VSUk9SKGRvbWlkLCBzc2htLT5pZCwgInNsYXZl IGlzIGFza2luZyB0b28gbXVjaCBwZXJtaXNzaW9uLiIpOworICAgICAgICAgICAgcmMgPSBFUlJP Ul9JTlZBTDsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisKKyAgICAgICAgLyog YWxsIGNoZWNrcyBwYXNzZWQsIGRvIHRoZSBqb2IgKi8KKyAgICAgICAgcmMgPSBsaWJ4bF9fc3No bV9kb19tYXAoZ2MsIG1hc3Rlcl9kb21pZCwgZG9taWQsIHNzaG0sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1hc3Rlcl9zc2htLmJlZ2luLCBtYXN0ZXJfc3NobS5lbmQpOworICAg ICAgICBpZiAocmMpIHsKKyAgICAgICAgICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAgICAgICAg ICBnb3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHdyaXRlIHRoZSByZXN1bHQgdG8g eGVuc3RvcmUgYW5kIGNvbW1pdCAqLworICAgICAgICByYyA9IGxpYnhsX194c193cml0ZV9jaGVj a2VkKGdjLCB4dCwgZG9tX3JvbGVfcGF0aCwgInNsYXZlIik7CisgICAgICAgIGlmIChyYykgZ290 byBvdXQ7CisgICAgICAgIGxpYnhsX194c193cml0ZXYoZ2MsIHh0LCBzbGF2ZV9wYXRoLCBlbnRz KTsKKworICAgICAgICByYyA9IGxpYnhsX194c190cmFuc2FjdGlvbl9jb21taXQoZ2MsICZ4dCk7 CisgICAgICAgIGlmICghcmMpIGJyZWFrOworICAgICAgICBpZiAocmMgPCAwKSBnb3RvIG91dDsK KyAgICB9CisKKyAgICByYyA9IDA7CitvdXQ6CisgICAgbGlieGxfX3hzX3RyYW5zYWN0aW9uX2Fi b3J0KGdjLCAmeHQpOworICAgIHJldHVybiByYzsKK30KKworc3RhdGljIGludCBsaWJ4bF9fc3No bV9hZGRfbWFzdGVyKGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX3N0YXRpY19zaG0gKnNzaG0pCit7CisgICAgaW50 IHJjOworICAgIGNoYXIgKnNzaG1fcGF0aCwgKmRvbV9wYXRoLCAqZG9tX3JvbGVfcGF0aDsKKyAg ICBjaGFyICplbnRzWzEzXTsKKyAgICBzdHJ1Y3QgeHNfcGVybWlzc2lvbnMgbm9wZXJtOworICAg IHhzX3RyYW5zYWN0aW9uX3QgeHQgPSBYQlRfTlVMTDsKKworICAgIHNzaG1fcGF0aCA9IGxpYnhs X194c19nZXRfc3NobXBhdGgoZ2MsIHNzaG0tPmlkKTsKKyAgICBkb21fcGF0aCA9IGxpYnhsX194 c19nZXRfZG9tcGF0aChnYywgZG9taWQpOworICAgIC8qIHRoZSBkb21haW4gc2hvdWxkIGJlIGlu IHhlbnN0b3JlIGJ5IG5vdyAqLworICAgIGFzc2VydChkb21fcGF0aCk7CisgICAgZG9tX3JvbGVf cGF0aCA9IEdDU1BSSU5URigiJXMvc3RhdGljX3NobS8lcy9yb2xlIiwgZG9tX3BhdGgsIHNzaG0t PmlkKTsKKworICAgIC8qIHByZXBhcmUgdGhlIHhlbnN0b3JlIGVudHJpZXMgKi8KKyAgICBlbnRz WzBdID0gIm1hc3RlciI7CisgICAgZW50c1sxXSA9IEdDU1BSSU5URigiJSJQUkl1MzIsIGRvbWlk KTsKKyAgICBlbnRzWzJdID0gImJlZ2luIjsKKyAgICBlbnRzWzNdID0gR0NTUFJJTlRGKCIweCUi UFJJeDY0LCBzc2htLT5iZWdpbik7CisgICAgZW50c1s0XSA9ICJlbmQiOworICAgIGVudHNbNV0g PSBHQ1NQUklOVEYoIjB4JSJQUkl4NjQsIHNzaG0tPmVuZCk7CisgICAgZW50c1s2XSA9ICJwcm90 IjsKKyAgICBlbnRzWzddID0gbGlieGxfX3N0cmR1cChnYywgbGlieGxfc3NobV9wcm90X3RvX3N0 cmluZyhzc2htLT5wcm90KSk7CisgICAgZW50c1s4XSA9ICJjYWNoZV9wb2xpY3kiOworICAgIGVu dHNbOV0gPSBsaWJ4bF9fc3RyZHVwKGdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp YnhsX3NzaG1fY2FjaGVwb2xpY3lfdG9fc3RyaW5nKHNzaG0tPmNhY2hlX3BvbGljeSkpOworICAg IGVudHNbMTBdID0gInN0YXR1cyI7CisgICAgZW50c1sxMV0gPSAiYWxpdmUiOworICAgIGVudHNb MTJdID0gTlVMTDsKKworICAgIC8qIGNvdWxkIG9ubHkgYmUgYWNjZXNzZWQgYnkgRG9tMCAqLwor ICAgIG5vcGVybS5pZCA9IDA7CisgICAgbm9wZXJtLnBlcm1zID0gWFNfUEVSTV9OT05FOworCisg ICAgZm9yICg7OykgeworICAgICAgICByYyA9IGxpYnhsX194c190cmFuc2FjdGlvbl9zdGFydChn YywgJnh0KTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKworICAgICAgICBpZiAoIWxpYnhs X194c19yZWFkKGdjLCB4dCwgc3NobV9wYXRoKSkgeworICAgICAgICAgICAgLyogZXZlcnkgSUQg Y2FuIGFwcGVhciBpbiBlYWNoIGRvbWFpbiBhdCBtb3N0IG9uY2UgKi8KKyAgICAgICAgICAgIGlm IChsaWJ4bF9feHNfcmVhZChnYywgeHQsIGRvbV9yb2xlX3BhdGgpKSB7CisgICAgICAgICAgICAg ICAgU1NITV9FUlJPUihkb21pZCwgc3NobS0+aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAiZG9tYWluIHRyaWVkIHRvIG1hcCB0aGUgc2FtZSBJRCB0d2ljZS4iKTsKKyAgICAgICAgICAg ICAgICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICByYyA9IGxpYnhsX194c193cml0ZV9jaGVja2VkKGdjLCB4dCwg ZG9tX3JvbGVfcGF0aCwgIm1hc3RlciIpOworICAgICAgICAgICAgaWYgKHJjKSBnb3RvIG91dDs7 CisKKyAgICAgICAgICAgIGxpYnhsX194c19ta25vZChnYywgeHQsIHNzaG1fcGF0aCwgJm5vcGVy bSwgMSk7CisgICAgICAgICAgICBsaWJ4bF9feHNfd3JpdGV2KGdjLCB4dCwgc3NobV9wYXRoLCBl bnRzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFNTSE1fRVJST1IoZG9taWQsIHNz aG0tPmlkLCAiY2FuIG9ubHkgaGF2ZSBvbmUgbWFzdGVyLiIpOworICAgICAgICAgICAgcmMgPSBF UlJPUl9GQUlMOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKworICAgICAgICBy YyA9IGxpYnhsX194c190cmFuc2FjdGlvbl9jb21taXQoZ2MsICZ4dCk7CisgICAgICAgIGlmICgh cmMpIGJyZWFrOworICAgICAgICBpZiAocmMgPCAwKSBnb3RvIG91dDsKKyAgICB9CisKKyAgICBy YyA9IDA7CitvdXQ6CisgICAgbGlieGxfX3hzX3RyYW5zYWN0aW9uX2Fib3J0KGdjLCAmeHQpOwor ICAgIHJldHVybiByYzsKK30KKworaW50IGxpYnhsX19zc2htX2FkZChsaWJ4bF9fZ2MgKmdjLCAg dWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgIGxpYnhsX3N0YXRpY19zaG0gKnNz aG1zLCBpbnQgbGVuKQoreworICAgIGludCByYywgaTsKKworICAgIGlmICghbGVuKSByZXR1cm4g MDsKKworICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkgeworICAgICAgICBpZiAoTElCWExf U1NITV9ST0xFX1NMQVZFID09IHNzaG1zW2ldLnJvbGUpIHsKKyAgICAgICAgICAgIHJjID0gbGli eGxfX3NzaG1fYWRkX3NsYXZlKGdjLCBkb21pZCwgc3NobXMraSk7CisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICByYyA9IGxpYnhsX19zc2htX2FkZF9tYXN0ZXIoZ2MsIGRvbWlkLCBzc2ht cytpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmMpICByZXR1cm4gcmM7CisgICAgfQorCisg ICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisg KiBjLWJhc2ljLW9mZnNldDogNAorICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6Cisg Ki8KZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX3g4Ni5jIGIvdG9vbHMvbGlieGwvbGli eGxfeDg2LmMKaW5kZXggNDU1ZjZmMGJlZC4uOGRkMzRmZDdiYSAxMDA2NDQKLS0tIGEvdG9vbHMv bGlieGwvbGlieGxfeDg2LmMKKysrIGIvdG9vbHMvbGlieGwvbGlieGxfeDg2LmMKQEAgLTU4Nyw2 ICs1ODcsMjQgQEAgdm9pZCBsaWJ4bF9fYXJjaF9kb21haW5fYnVpbGRfaW5mb19hY3BpX3NldGRl ZmF1bHQoCiAgICAgbGlieGxfZGVmYm9vbF9zZXRkZWZhdWx0KCZiX2luZm8tPmFjcGksIHRydWUp OwogfQogCitib29sIGxpYnhsX19hcmNoX2RvbWFpbl9zdXBwb3J0X3NzaG0oY29uc3QgbGlieGxf ZG9tYWluX2J1aWxkX2luZm8gKmJfaW5mbykKK3sKKyAgICAvKiBGSVhNRTogTWFyayB0aGlzIGFz IHVuc3VwcG9ydGVkIHNpbmNlIGNhbGxpbmcgcDJtX2FkZF9mb3JlaWduIG9uIHR3bworICAgICAq IERvbVUncyBpcyBjdXJyZW50bHkgbm90IGFsbG93ZCBvbiB4ODYsIHNlZSB0aGUgY29tbWVudHMg aW4gCisgICAgICogeDg2L21tL3AybS5jOiBwMm1fYWRkX2ZvcmVpZ24gKi8KKyAgICAgcmV0dXJu IGZhbHNlOworfQorCitpbnQgbGlieGxfX2FyY2hfZG9tYWluX3NzaG1fY2FjaGVwb2xpY3lfc2V0 ZGVmYXVsdChsaWJ4bF9zdGF0aWNfc2htICpzc2htKQoreworICAgIGlmIChzc2htLT5jYWNoZV9w b2xpY3kgPT0gTElCWExfU1NITV9DQUNIRVBPTElDWV9VTktOT1dOKQorICAgICAgICBzc2htLT5j YWNoZV9wb2xpY3kgPSBMSUJYTF9TU0hNX0NBQ0hFUE9MSUNZX1g4Nl9OT1JNQUw7CisgICAgaWYg KHNzaG0tPmNhY2hlX3BvbGljeSA8IExJQlhMX1NTSE1fQ0FDSEVQT0xJQ1lfWDg2X05PUk1BTCkK KyAgICAgICAgcmV0dXJuIEVSUk9SX0lOVkFMOworCisgICAgcmV0dXJuIDA7Cit9CisKIC8qCiAg KiBMb2NhbCB2YXJpYWJsZXM6CiAgKiBtb2RlOiBDCmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9s aWJ4bF94c2hlbHAuYyBiL3Rvb2xzL2xpYnhsL2xpYnhsX3hzaGVscC5jCmluZGV4IGM0YTE4ZGYz NTMuLmQ5MWZiZjVmZGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsX3hzaGVscC5jCisr KyBiL3Rvb2xzL2xpYnhsL2xpYnhsX3hzaGVscC5jCkBAIC0xOTMsNiArMTkzLDE0IEBAIGNoYXIg KmxpYnhsX194c19saWJ4bF9wYXRoKGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkKQogICAg IHJldHVybiBzOwogfQogCitjaGFyICpsaWJ4bF9feHNfZ2V0X3NzaG1wYXRoKGxpYnhsX19nYyAq Z2MsIGNvbnN0IGNoYXIgKmlkKQoreworICAgIGNoYXIgKnMgPSBHQ1NQUklOVEYoIi9sb2NhbC9z dGF0aWNfc2htLyVzIiwgaWQpOworICAgIGlmICghcykKKyAgICAgICAgTE9HRShFUlJPUiwgImNh bm5vdCBhbGxvY2F0ZSBzdGF0aWMgc2htIHBhdGgiKTsKKyAgICByZXR1cm4gczsKK30KKwogaW50 IGxpYnhsX194c19yZWFkX21hbmRhdG9yeShsaWJ4bF9fZ2MgKmdjLCB4c190cmFuc2FjdGlvbl90 IHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0 IGNoYXIgKipyZXN1bHRfb3V0KQogewotLSAKMi4xNC4wCgoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2 ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==