From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chao Gao Subject: [PATCH v4 14/28] x86/vvtd: Handle interrupt translation faults Date: Fri, 17 Nov 2017 14:22:21 +0800 Message-ID: <1510899755-40237-15-git-send-email-chao.gao@intel.com> References: <1510899755-40237-1-git-send-email-chao.gao@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1510899755-40237-1-git-send-email-chao.gao@intel.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: Lan Tianyu , Kevin Tian , Stefano Stabellini , Wei Liu , Konrad Rzeszutek Wilk , George Dunlap , Ian Jackson , Tim Deegan , Jan Beulich , Andrew Cooper , Chao Gao , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= List-Id: xen-devel@lists.xenproject.org SW50ZXJydXB0IHRyYW5zbGF0aW9uIGZhdWx0cyBhcmUgbm9uLXJlY292ZXJhYmxlIGZhdWx0LiBX aGVuIGZhdWx0cwphcmUgdHJpZ2dlcmVkLCBpdCBuZWVkcyB0byBwb3B1bGF0ZSBmYXVsdCBpbmZv IHRvIEZhdWx0IFJlY29yZGluZwpSZWdpc3RlcnMgYW5kIGluamVjdCBtc2kgaW50ZXJydXB0IHRv IG5vdGlmeSBndWVzdCBJT01NVSBkcml2ZXIKdG8gZGVhbCB3aXRoIGZhdWx0cy4KClRoaXMgcGF0 Y2ggZW11bGF0ZXMgaGFyZHdhcmUncyBoYW5kbGluZyBpbnRlcnJ1cHQgdHJhbnNsYXRpb24KZmF1 bHRzIChtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcm9jZXNzIGNhbiBiZSBmb3VuZCBpbiBW VC1kIHNwZWMsCmNoaXB0ZXIgIlRyYW5zbGF0aW9uIEZhdWx0cyIsIHNlY3Rpb24gIk5vbi1SZWNv dmVyYWJsZSBGYXVsdApSZXBvcnRpbmciIGFuZCBzZWN0aW9uICJOb24tUmVjb3ZlcmFibGUgTG9n Z2luZyIpLgpTcGVjaWZpY2FsbHksIHZpb21tdV9yZWNvcmRfZmF1bHQoKSByZWNvcmRzIHRoZSBm YXVsdCBpbmZvcm1hdGlvbiBhbmQKdmlvbW11X3JlcG9ydF9ub25fcmVjb3ZlcmFibGVfZmF1bHQo KSByZXBvcnRzIGZhdWx0cyB0byBzb2Z0d2FyZS4KQ3VycmVudGx5LCBvbmx5IFByaW1hcnkgRmF1 bHQgTG9nZ2luZyBpcyBzdXBwb3J0ZWQgYW5kIHRoZSBOdW1iZXIgb2YKRmF1bHQtcmVjb3JkaW5n IFJlZ2lzdGVycyBpcyAxLgoKU2lnbmVkLW9mZi1ieTogQ2hhbyBHYW8gPGNoYW8uZ2FvQGludGVs LmNvbT4KU2lnbmVkLW9mZi1ieTogTGFuIFRpYW55dSA8dGlhbnl1LmxhbkBpbnRlbC5jb20+Cgot LS0KdjQ6CiAtIGludHJvZHVjZSBhIGxvY2sgdG8gcHJvdGVjdCBmYXVsdC1ldmVudCByZWxhdGVk IHJlZ3MKLS0tCiB4ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92dGQvaW9tbXUuaCB8ICA1MSArKysr KystCiB4ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92dGQvdnZ0ZC5jICB8IDI4OCArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKy0KIDIgZmlsZXMgY2hhbmdlZCwgMzMzIGluc2VydGlv bnMoKyksIDYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvcGFzc3Rocm91 Z2gvdnRkL2lvbW11LmggYi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92dGQvaW9tbXUuaAppbmRl eCA4MmVkZDJhLi5kYzJkZjc1IDEwMDY0NAotLS0gYS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92 dGQvaW9tbXUuaAorKysgYi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92dGQvaW9tbXUuaApAQCAt MTk2LDI2ICsxOTYsNjcgQEAKICNkZWZpbmUgRE1BX0NDTURfQ0FJR19NQVNLKHgpICgoKHU2NCl4 KSAmICgodTY0KSAweDMgPDwgNTkpKQogCiAvKiBGRUNUTF9SRUcgKi8KLSNkZWZpbmUgRE1BX0ZF Q1RMX0lNICAgICAgICAoKHVpbnQzMl90KTEgPDwgMzEpCisjZGVmaW5lIERNQV9GRUNUTF9JTV9T SElGVCAgMzEKKyNkZWZpbmUgRE1BX0ZFQ1RMX0lQX1NISUZUICAzMAorI2RlZmluZSBETUFfRkVD VExfSU0gICAgICAgICgodWludDMyX3QpMSA8PCBETUFfRkVDVExfSU1fU0hJRlQpCisjZGVmaW5l IERNQV9GRUNUTF9JUCAgICAgICAgKCh1aW50MzJfdCkxIDw8IERNQV9GRUNUTF9JUF9TSElGVCkK IAogLyogRlNUU19SRUcgKi8KLSNkZWZpbmUgRE1BX0ZTVFNfUEZPICAgICAgICAoKHVpbnQzMl90 KTEgPDwgMCkKLSNkZWZpbmUgRE1BX0ZTVFNfUFBGICAgICAgICAoKHVpbnQzMl90KTEgPDwgMSkK KyNkZWZpbmUgRE1BX0ZTVFNfUEZPX1NISUZUICAwCisjZGVmaW5lIERNQV9GU1RTX1BQRl9TSElG VCAgMQorI2RlZmluZSBETUFfRlNUU19QUk9fU0hJRlQgIDcKKworI2RlZmluZSBETUFfRlNUU19Q Rk8gICAgICAgICgodWludDMyX3QpMSA8PCBETUFfRlNUU19QRk9fU0hJRlQpCisjZGVmaW5lIERN QV9GU1RTX1BQRiAgICAgICAgKCh1aW50MzJfdCkxIDw8IERNQV9GU1RTX1BQRl9TSElGVCkKICNk ZWZpbmUgRE1BX0ZTVFNfQUZPICAgICAgICAoKHVpbnQzMl90KTEgPDwgMikKICNkZWZpbmUgRE1B X0ZTVFNfQVBGICAgICAgICAoKHVpbnQzMl90KTEgPDwgMykKICNkZWZpbmUgRE1BX0ZTVFNfSVFF ICAgICAgICAoKHVpbnQzMl90KTEgPDwgNCkKICNkZWZpbmUgRE1BX0ZTVFNfSUNFICAgICAgICAo KHVpbnQzMl90KTEgPDwgNSkKICNkZWZpbmUgRE1BX0ZTVFNfSVRFICAgICAgICAoKHVpbnQzMl90 KTEgPDwgNikKLSNkZWZpbmUgRE1BX0ZTVFNfRkFVTFRTICAgIERNQV9GU1RTX1BGTyB8IERNQV9G U1RTX1BQRiB8IERNQV9GU1RTX0FGTyB8IERNQV9GU1RTX0FQRiB8IERNQV9GU1RTX0lRRSB8IERN QV9GU1RTX0lDRSB8IERNQV9GU1RTX0lURQorI2RlZmluZSBETUFfRlNUU19QUk8gICAgICAgICgo dWludDMyX3QpMSA8PCBETUFfRlNUU19QUk9fU0hJRlQpCisjZGVmaW5lIERNQV9GU1RTX0ZBVUxU UyAgICAgKERNQV9GU1RTX1BGTyB8IERNQV9GU1RTX1BQRiB8IERNQV9GU1RTX0FGTyB8IFwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRE1BX0ZTVFNfQVBGIHwgRE1BX0ZTVFNfSVFFIHwg RE1BX0ZTVFNfSUNFIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUFfRlNUU19J VEUgfCBETUFfRlNUU19QUk8pCisjZGVmaW5lIERNQV9GU1RTX1JXMUNTICAgICAgKERNQV9GU1RT X1BGTyB8IERNQV9GU1RTX0FGTyB8IERNQV9GU1RTX0FQRiB8IFwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRE1BX0ZTVFNfSVFFIHwgRE1BX0ZTVFNfSUNFIHwgRE1BX0ZTVFNfSVRFIHwg XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUFfRlNUU19QUk8pCiAjZGVmaW5lIGRt YV9mc3RzX2ZhdWx0X3JlY29yZF9pbmRleChzKSAoKChzKSA+PiA4KSAmIDB4ZmYpCiAKIC8qIEZS Q0RfUkVHLCAzMiBiaXRzIGFjY2VzcyAqLwotI2RlZmluZSBETUFfRlJDRF9GICgoKHU2NCkxKSA8 PCAzMSkKKyNkZWZpbmUgRE1BX0ZSQ0RfTEVOICAgICAgICAgICAgMHgxMAorI2RlZmluZSBETUFf RlJDRDJfT0ZGU0VUICAgICAgICAweDgKKyNkZWZpbmUgRE1BX0ZSQ0QzX09GRlNFVCAgICAgICAg MHhjCisjZGVmaW5lIERNQV9GUkNEX0ZfU0hJRlQgICAgICAgIDMxCisjZGVmaW5lIERNQV9GUkNE X0YgKCh1NjQpMSA8PCBETUFfRlJDRF9GX1NISUZUKQogI2RlZmluZSBkbWFfZnJjZF90eXBlKGQp ICgoZCA+PiAzMCkgJiAxKQogI2RlZmluZSBkbWFfZnJjZF9mYXVsdF9yZWFzb24oYykgKGMgJiAw eGZmKQogI2RlZmluZSBkbWFfZnJjZF9zb3VyY2VfaWQoYykgKGMgJiAweGZmZmYpCiAjZGVmaW5l IGRtYV9mcmNkX3BhZ2VfYWRkcihkKSAoZCAmICgoKHU2NCktMSkgPDwgMTIpKSAvKiBsb3cgNjQg Yml0ICovCiAKK3N0cnVjdCB2dGRfZmF1bHRfcmVjb3JkX3JlZ2lzdGVyCit7CisgICAgdW5pb24g eworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgdWludDY0X3QgbG87CisgICAgICAgICAg ICB1aW50NjRfdCBoaTsKKyAgICAgICAgfSBiaXRzOworICAgICAgICBzdHJ1Y3QgeworICAgICAg ICAgICAgdWludDY0X3QgcnN2ZDAgICAgICAgICAgOjEyLAorICAgICAgICAgICAgICAgICAgICAg ZmF1bHRfaW5mbyAgICAgOjUyOworICAgICAgICAgICAgdWludDY0X3Qgc291cmNlX2lkICAgICAg OjE2LAorICAgICAgICAgICAgICAgICAgICAgcnN2ZDEgICAgICAgICAgOjksCisgICAgICAgICAg ICAgICAgICAgICBwbXIgICAgICAgICAgICA6MSwgIC8qIFByaXZpbGVnZSBNb2RlIFJlcXVlc3Rl ZCAqLworICAgICAgICAgICAgICAgICAgICAgZXhlICAgICAgICAgICAgOjEsICAvKiBFeGVjdXRl IFBlcm1pc3Npb24gUmVxdWVzdGVkICovCisgICAgICAgICAgICAgICAgICAgICBwYXNpZF9wICAg ICAgICA6MSwgIC8qIFBBU0lEIFByZXNlbnQgKi8KKyAgICAgICAgICAgICAgICAgICAgIGZhdWx0 X3JlYXNvbiAgIDo4LCAgLyogRmF1bHQgUmVhc29uICovCisgICAgICAgICAgICAgICAgICAgICBw YXNpZF92YWwgICAgICA6MjAsIC8qIFBBU0lEIFZhbHVlICovCisgICAgICAgICAgICAgICAgICAg ICBhZGRyX3R5cGUgICAgICA6MiwgIC8qIEFkZHJlc3MgVHlwZSAqLworICAgICAgICAgICAgICAg ICAgICAgdHlwZSAgICAgICAgICAgOjEsICAvKiBUeXBlLiAoMCkgV3JpdGUgKDEpIFJlYWQvQXRv bWljT3AgKi8KKyAgICAgICAgICAgICAgICAgICAgIGZhdWx0ICAgICAgICAgIDoxOyAgLyogRmF1 bHQgKi8KKyAgICAgICAgfSBmaWVsZHM7CisgICAgfTsKK307CisKIC8qIEludGVycnVwdCByZW1h cHBpbmcgdHJhbnNpdGlvbiBmYXVsdHMgKi8KICNkZWZpbmUgVlREX0ZSX0lSX1JFUV9SU1ZEICAg ICAgMHgyMAogI2RlZmluZSBWVERfRlJfSVJfSU5ERVhfT1ZFUiAgICAweDIxCmRpZmYgLS1naXQg YS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92dGQvdnZ0ZC5jIGIveGVuL2RyaXZlcnMvcGFzc3Ro cm91Z2gvdnRkL3Z2dGQuYwppbmRleCBkM2RlYzAxLi44MzgwNWQxIDEwMDY0NAotLS0gYS94ZW4v ZHJpdmVycy9wYXNzdGhyb3VnaC92dGQvdnZ0ZC5jCisrKyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJv dWdoL3Z0ZC92dnRkLmMKQEAgLTQzLDYgKzQzLDcgQEAKIHN0cnVjdCBodm1faHdfdnZ0ZCB7CiAg ICAgYm9vbCBlaW1fZW5hYmxlZDsKICAgICBib29sIGludHJlbWFwX2VuYWJsZWQ7CisgICAgdWlu dDMyX3QgZmF1bHRfaW5kZXg7CiAKICAgICAvKiBJbnRlcnJ1cHQgcmVtYXBwaW5nIHRhYmxlIGJh c2UgZ2ZuIGFuZCB0aGUgbWF4IG9mIGVudHJpZXMgKi8KICAgICB1aW50MTZfdCBpcnRfbWF4X2Vu dHJ5OwpAQCAtNTgsNiArNTksMTIgQEAgc3RydWN0IHZ2dGQgewogICAgIHN0cnVjdCBkb21haW4g KmRvbWFpbjsKICAgICAvKiAjIG9mIGluLWZsaWdodCBpbnRlcnJ1cHRzICovCiAgICAgYXRvbWlj X3QgaW5mbGlnaHRfaW50cjsKKyAgICAvKgorICAgICAqIFRoaXMgbG9jayBwcm90ZWN0cyBmYXVs dC1ldmVudCByZWxhdGVkIHJlZ2lzdGVycyAoRE1BUl9GRVhYWF9SRUcpLgorICAgICAqIEl0J3Mg dXNlZCBmb3IgZHJhaW5pbmcgaW4tZmxpZ2h0IGZhdWx0IGV2ZW50cyBiZWZvcmUgcmVzcG9uZGlu ZworICAgICAqIGd1ZXN0J3MgcHJvZ3JhbW1pbmcgdG8gdGhvc2UgcmVnaXN0ZXJzLgorICAgICAq LworICAgIHNwaW5sb2NrX3QgZmVfbG9jazsKIAogICAgIHN0cnVjdCBodm1faHdfdnZ0ZCBodzsK ICAgICB2b2lkICppcnRfYmFzZTsKQEAgLTg3LDYgKzk0LDIxIEBAIGJvb2xlYW5fcnVudGltZV9w YXJhbSgidmlvbW11X3ZlcmJvc2UiLCB2aW9tbXVfdmVyYm9zZSk7CiAjZW5kaWYKIAogI2RlZmlu ZSBWVlREX1JFR19QT1ModnZ0ZCwgb2Zmc2V0KSAmKHZ2dGQtPmh3LnJlZ3Nbb2Zmc2V0L3NpemVv Zih1aW50MzJfdCldKQorc3RhdGljIGlubGluZSBpbnQgdnZ0ZF90ZXN0X2FuZF9zZXRfYml0KHN0 cnVjdCB2dnRkICp2dnRkLCB1aW50MzJfdCByZWcsIGludCBucikKK3sKKyAgICByZXR1cm4gdGVz dF9hbmRfc2V0X2JpdChuciwgVlZURF9SRUdfUE9TKHZ2dGQsIHJlZykpOworfQorCitzdGF0aWMg aW5saW5lIGludCB2dnRkX3Rlc3RfYW5kX2NsZWFyX2JpdChzdHJ1Y3QgdnZ0ZCAqdnZ0ZCwgdWlu dDMyX3QgcmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IG5yKQoreworICAgIHJldHVybiB0ZXN0X2FuZF9jbGVhcl9iaXQobnIsIFZWVERfUkVHX1BPUyh2 dnRkLCByZWcpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdnZ0ZF90ZXN0X2JpdChzdHJ1Y3Qg dnZ0ZCAqdnZ0ZCwgdWludDMyX3QgcmVnLCBpbnQgbnIpCit7CisgICAgcmV0dXJuIHRlc3RfYml0 KG5yLCBWVlREX1JFR19QT1ModnZ0ZCwgcmVnKSk7Cit9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB2 dnRkX3NldF9iaXQoc3RydWN0IHZ2dGQgKnZ2dGQsIHVpbnQzMl90IHJlZywgaW50IG5yKQogewpA QCAtMjM4LDYgKzI2MCwzMCBAQCBzdGF0aWMgaW50IHZ2dGRfZGVsaXZlcnkoc3RydWN0IGRvbWFp biAqZCwgdWludDhfdCB2ZWN0b3IsCiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHZ2 dGRfZ2VuZXJhdGVfaW50ZXJydXB0KGNvbnN0IHN0cnVjdCB2dnRkICp2dnRkLCB1aW50NjRfdCBh ZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZGF0YSkK K3sKKyAgICBib29sIGRtID0gYWRkciAmIE1TSV9BRERSX0RFU1RNT0RFX01BU0s7CisgICAgdWlu dDMyX3QgZGVzdCA9IE1BU0tfRVhUUihhZGRyLCBNU0lfQUREUl9ERVNUX0lEX01BU0spOworICAg IHVpbnQ4X3QgZGxtID0gTUFTS19FWFRSKGRhdGEsIE1TSV9EQVRBX0RFTElWRVJZX01PREVfTUFT Syk7CisgICAgdWludDhfdCB0bSA9IE1BU0tfRVhUUihkYXRhLCBNU0lfREFUQV9UUklHR0VSX01B U0spOworICAgIHVpbnQ4X3QgdmVjdG9yID0gZGF0YSAmIE1TSV9EQVRBX1ZFQ1RPUl9NQVNLOwor CisgICAgdnZ0ZF9kZWJ1ZygiZCVkOiBnZW5lcmF0aW5nIG1zaSAlbHggJXhcbiIsIHZ2dGQtPmRv bWFpbi0+ZG9tYWluX2lkLCBhZGRyLAorICAgICAgICAgICAgICAgZGF0YSk7CisKKyAgICBpZiAo IHZ2dGQtPmh3LmVpbV9lbmFibGVkICkKKyAgICAgICAgZGVzdCB8PSAoYWRkciA+PiA0MCkgPDwg ODsKKworICAgIHZ2dGRfZGVsaXZlcnkodnZ0ZC0+ZG9tYWluLCB2ZWN0b3IsIGRlc3QsIGRtLCBk bG0sIHRtKTsKK30KKworc3RhdGljIHZvaWQgdnZ0ZF9ub3RpZnlfZmF1bHQoY29uc3Qgc3RydWN0 IHZ2dGQgKnZ2dGQpCit7CisgICAgdnZ0ZF9nZW5lcmF0ZV9pbnRlcnJ1cHQodnZ0ZCwgdnZ0ZF9n ZXRfcmVnX3F1YWQodnZ0ZCwgRE1BUl9GRUFERFJfUkVHKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2dnRkX2dldF9yZWcodnZ0ZCwgRE1BUl9GRURBVEFfUkVHKSk7Cit9CisKIC8qIENv bXB1dGluZyB0aGUgSVJURSBpbmRleCBmb3IgYSBnaXZlbiBpbnRlcnJ1cHQgcmVxdWVzdC4gV2hl biBzdWNjZXNzLCByZXR1cm4KICAqIDAgYW5kIHNldCBpbmRleCB0byByZWZlcmVuY2UgdGhlIGNv cnJlc3BvbmRpbmcgSVJURS4gT3RoZXJ3aXNlLCByZXR1cm4gPCAwLAogICogaS5lLiAtMSB3aGVu IHRoZSBpcnEgcmVxdWVzdCBpc24ndCBhbiByZW1hcHBpbmcgZm9ybWF0LgpAQCAtMjkwLDYgKzMz NiwxOTggQEAgc3RhdGljIGlubGluZSB1aW50MzJfdCBpcnRlX2Rlc3Qoc3RydWN0IHZ2dGQgKnZ2 dGQsIHVpbnQzMl90IGRlc3QpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTUFT S19FWFRSKGRlc3QsIElSVEVfeEFQSUNfREVTVF9NQVNLKTsKIH0KIAorc3RhdGljIHZvaWQgdnZ0 ZF9yZXBvcnRfbm9uX3JlY292ZXJhYmxlX2ZhdWx0KHN0cnVjdCB2dnRkICp2dnRkLCBpbnQgcmVh c29uKQoreworICAgIHVpbnQzMl90IGZzdHMgPSB2dnRkX2dldF9yZWcodnZ0ZCwgRE1BUl9GU1RT X1JFRyk7CisKKyAgICB2dnRkX3NldF9iaXQodnZ0ZCwgRE1BUl9GU1RTX1JFRywgcmVhc29uKTsK KworICAgIC8qCisgICAgICogQWNjb3JvZGluZyB0byBWVC1kIHNwZWMgIk5vbi1SZWNvdmVyYWJs ZSBGYXVsdCBFdmVudCIgY2hhcHRlciwgaWYKKyAgICAgKiB0aGVyZSBhcmUgYW55IHByZXZpb3Vz bHkgcmVwb3J0ZWQgaW50ZXJydXB0IGNvbmRpdGlvbnMgdGhhdCBhcmUgeWV0IHRvCisgICAgICog YmUgc2V2aWNlcyBieSBzb2Z0d2FyZSwgdGhlIEZhdWx0IEV2ZW50IGludGVycnJ1cHQgaXMgbm90 IGdlbmVyYXRlZC4KKyAgICAgKi8KKyAgICBpZiAoIGZzdHMgJiBETUFfRlNUU19GQVVMVFMgKQor ICAgICAgICByZXR1cm47CisKKyAgICB2dnRkX3NldF9iaXQodnZ0ZCwgRE1BUl9GRUNUTF9SRUcs IERNQV9GRUNUTF9JUF9TSElGVCk7CisgICAgaWYgKCAhdnZ0ZF90ZXN0X2JpdCh2dnRkLCBETUFS X0ZFQ1RMX1JFRywgRE1BX0ZFQ1RMX0lNX1NISUZUKSApCisgICAgeworICAgICAgICB2dnRkX25v dGlmeV9mYXVsdCh2dnRkKTsKKyAgICAgICAgdnZ0ZF9jbGVhcl9iaXQodnZ0ZCwgRE1BUl9GRUNU TF9SRUcsIERNQV9GRUNUTF9JUF9TSElGVCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB2dnRk X3VwZGF0ZV9wcGYoc3RydWN0IHZ2dGQgKnZ2dGQpCit7CisgICAgaW50IGk7CisgICAgdWludDY0 X3QgY2FwID0gdnZ0ZF9nZXRfcmVnX3F1YWQodnZ0ZCwgRE1BUl9DQVBfUkVHKTsKKyAgICB1bnNp Z25lZCBpbnQgYmFzZSA9IGNhcF9mYXVsdF9yZWdfb2Zmc2V0KGNhcCk7CisKKyAgICBmb3IgKCBp ID0gMDsgaSA8IGNhcF9udW1fZmF1bHRfcmVncyhjYXApOyBpKysgKQorICAgIHsKKyAgICAgICAg aWYgKCB2dnRkX3Rlc3RfYml0KHZ2dGQsIGJhc2UgKyBpICogRE1BX0ZSQ0RfTEVOICsgRE1BX0ZS Q0QzX09GRlNFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIERNQV9GUkNEX0ZfU0hJRlQp ICkKKyAgICAgICAgeworICAgICAgICAgICAgdnZ0ZF9yZXBvcnRfbm9uX3JlY292ZXJhYmxlX2Zh dWx0KHZ2dGQsIERNQV9GU1RTX1BQRl9TSElGVCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg ICAgIH0KKyAgICB9CisgICAgLyoKKyAgICAgKiBObyBQcmltYXJ5IEZhdWx0IGlzIGluIEZhdWx0 IFJlY29yZCBSZWdpc3RlcnMsIHRodXMgY2xlYXIgUFBGIGJpdCBpbgorICAgICAqIEZTVFMuCisg ICAgICovCisgICAgdnZ0ZF9jbGVhcl9iaXQodnZ0ZCwgRE1BUl9GU1RTX1JFRywgRE1BX0ZTVFNf UFBGX1NISUZUKTsKKworICAgIC8qIElmIG5vIGZhdWx0IGlzIGluIEZTVFMsIGNsZWFyIHBlbmRp bmcgYml0IGluIEZFQ1RMLiAqLworICAgIGlmICggISh2dnRkX2dldF9yZWcodnZ0ZCwgRE1BUl9G U1RTX1JFRykgJiBETUFfRlNUU19GQVVMVFMpICkKKyAgICAgICAgdnZ0ZF9jbGVhcl9iaXQodnZ0 ZCwgRE1BUl9GRUNUTF9SRUcsIERNQV9GRUNUTF9JUF9TSElGVCk7Cit9CisKKy8qCisgKiBDb21t aXQgYSBmYXVsdCB0byBlbXVsYXRlZCBGYXVsdCBSZWNvcmQgUmVnaXN0ZXJzLgorICovCitzdGF0 aWMgdm9pZCB2dnRkX2NvbW1pdF9mcmNkKHN0cnVjdCB2dnRkICp2dnRkLCBpbnQgaWR4LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdnRkX2ZhdWx0X3JlY29yZF9y ZWdpc3RlciAqZnJjZCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgYmFzZSA9IGNhcF9mYXVsdF9yZWdf b2Zmc2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ2dGRfZ2V0X3JlZ19xdWFkKHZ2 dGQsIERNQVJfQ0FQX1JFRykpOworCisgICAgdnZ0ZF9zZXRfcmVnX3F1YWQodnZ0ZCwgYmFzZSAr IGlkeCAqIERNQV9GUkNEX0xFTiwgZnJjZC0+Yml0cy5sbyk7CisgICAgdnZ0ZF9zZXRfcmVnX3F1 YWQodnZ0ZCwgYmFzZSArIGlkeCAqIERNQV9GUkNEX0xFTiArIDgsIGZyY2QtPmJpdHMuaGkpOwor ICAgIHZ2dGRfdXBkYXRlX3BwZih2dnRkKTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgRlJDRCBm b3IgdGhlIGNhbGxlci4gSWYgc3VjY2VzcywgcmV0dXJuIHRoZSBGUkkuIE9yLCByZXR1cm4gLTEK KyAqIHdoZW4gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCB2dnRkX2FsbG9jX2ZyY2Qoc3RydWN0 IHZ2dGQgKnZ2dGQpCit7CisgICAgaW50IHByZXY7CisgICAgdWludDY0X3QgY2FwID0gdnZ0ZF9n ZXRfcmVnX3F1YWQodnZ0ZCwgRE1BUl9DQVBfUkVHKTsKKyAgICB1bnNpZ25lZCBpbnQgYmFzZSA9 IGNhcF9mYXVsdF9yZWdfb2Zmc2V0KGNhcCk7CisKKyAgICAvKiBTZXQgdGhlIEYgYml0IHRvIGlu ZGljYXRlIHRoZSBGUkNEIGlzIGluIHVzZS4gKi8KKyAgICBpZiAoICF2dnRkX3Rlc3RfYW5kX3Nl dF9iaXQodnZ0ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSArIHZ2dGQt Pmh3LmZhdWx0X2luZGV4ICogRE1BX0ZSQ0RfTEVOICsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRE1BX0ZSQ0QzX09GRlNFVCwgRE1BX0ZSQ0RfRl9TSElGVCkgKQorICAgIHsKKyAg ICAgICAgcHJldiA9IHZ2dGQtPmh3LmZhdWx0X2luZGV4OworICAgICAgICB2dnRkLT5ody5mYXVs dF9pbmRleCA9IChwcmV2ICsgMSkgJSBjYXBfbnVtX2ZhdWx0X3JlZ3MoY2FwKTsKKyAgICAgICAg cmV0dXJuIHZ2dGQtPmh3LmZhdWx0X2luZGV4OworICAgIH0KKyAgICByZXR1cm4gLUVOT01FTTsK K30KKworc3RhdGljIHZvaWQgdnZ0ZF9mcmVlX2ZyY2Qoc3RydWN0IHZ2dGQgKnZ2dGQsIGludCBp KQoreworICAgIHVuc2lnbmVkIGludCBiYXNlID0gY2FwX2ZhdWx0X3JlZ19vZmZzZXQoCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdnZ0ZF9nZXRfcmVnX3F1YWQodnZ0ZCwgRE1BUl9DQVBf UkVHKSk7CisKKyAgICB2dnRkX2NsZWFyX2JpdCh2dnRkLCBiYXNlICsgaSAqIERNQV9GUkNEX0xF TiArIERNQV9GUkNEM19PRkZTRVQsCisgICAgICAgICAgICAgICAgICAgRE1BX0ZSQ0RfRl9TSElG VCk7Cit9CisKK3N0YXRpYyBpbnQgdnZ0ZF9yZWNvcmRfZmF1bHQoc3RydWN0IHZ2dGQgKnZ2dGQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhcmNoX2lycV9yZW1h cHBpbmdfcmVxdWVzdCAqcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IHJlYXNvbikKK3sKKyAgICBzdHJ1Y3QgdnRkX2ZhdWx0X3JlY29yZF9yZWdpc3RlciBmcmNkOwor ICAgIGludCBmYXVsdF9pbmRleDsKKyAgICB1aW50MzJfdCBpcnRfaW5kZXg7CisKKyAgICBzcGlu X2xvY2soJnZ2dGQtPmZlX2xvY2spOworICAgIHN3aXRjaChyZWFzb24pCisgICAgeworICAgIGNh c2UgVlREX0ZSX0lSX1JFUV9SU1ZEOgorICAgIGNhc2UgVlREX0ZSX0lSX0lOREVYX09WRVI6Cisg ICAgY2FzZSBWVERfRlJfSVJfRU5UUllfUDoKKyAgICBjYXNlIFZURF9GUl9JUl9ST09UX0lOVkFM OgorICAgIGNhc2UgVlREX0ZSX0lSX0lSVEVfUlNWRDoKKyAgICBjYXNlIFZURF9GUl9JUl9SRVFf Q09NUEFUOgorICAgIGNhc2UgVlREX0ZSX0lSX1NJRF9FUlI6CisgICAgICAgIGlmICggdnZ0ZF90 ZXN0X2JpdCh2dnRkLCBETUFSX0ZTVFNfUkVHLCBETUFfRlNUU19QRk9fU0hJRlQpICkKKyAgICAg ICAgICAgIGdvdG8gb3V0OworCisgICAgICAgIC8qIE5vIGF2YWlsYWJsZSBGYXVsdCBSZWNvcmQg bWVhbnMgRmF1bHQgb3ZlcmZsb3dlZCAqLworICAgICAgICBmYXVsdF9pbmRleCA9IHZ2dGRfYWxs b2NfZnJjZCh2dnRkKTsKKyAgICAgICAgaWYgKCBmYXVsdF9pbmRleCA8IDAgKQorICAgICAgICB7 CisgICAgICAgICAgICB2dnRkX3JlcG9ydF9ub25fcmVjb3ZlcmFibGVfZmF1bHQodnZ0ZCwgRE1B X0ZTVFNfUEZPX1NISUZUKTsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisgICAg ICAgIG1lbXNldCgmZnJjZCwgMCwgc2l6ZW9mKGZyY2QpKTsKKyAgICAgICAgZnJjZC5maWVsZHMu ZmF1bHRfcmVhc29uID0gcmVhc29uOworICAgICAgICBpZiAoIGlycV9yZW1hcHBpbmdfcmVxdWVz dF9pbmRleChyZXF1ZXN0LCAmaXJ0X2luZGV4KSApCisgICAgICAgICAgICBnb3RvIG91dDsKKyAg ICAgICAgZnJjZC5maWVsZHMuZmF1bHRfaW5mbyA9IGlydF9pbmRleDsKKyAgICAgICAgZnJjZC5m aWVsZHMuc291cmNlX2lkID0gcmVxdWVzdC0+c291cmNlX2lkOworICAgICAgICBmcmNkLmZpZWxk cy5mYXVsdCA9IDE7CisgICAgICAgIHZ2dGRfY29tbWl0X2ZyY2QodnZ0ZCwgZmF1bHRfaW5kZXgs ICZmcmNkKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICB2dnRkX2Rl YnVnKCJkJWQ6IGNhbid0IGhhbmRsZSB2dnRkIGZhdWx0IChyZWFzb24gMHgleCkiLAorICAgICAg ICAgICAgICAgICAgIHZ2dGQtPmRvbWFpbi0+ZG9tYWluX2lkLCByZWFzb24pOworICAgICAgICBi cmVhazsKKyAgICB9CisKKyBvdXQ6CisgICAgc3Bpbl91bmxvY2soJnZ2dGQtPmZlX2xvY2spOwor ICAgIHJldHVybiBYODZFTVVMX09LQVk7Cit9CisKK3N0YXRpYyBpbnQgdnZ0ZF93cml0ZV9mcmNk MyhzdHJ1Y3QgdnZ0ZCAqdnZ0ZCwgdWludDMyX3QgdmFsKQoreworICAgIC8qIFdyaXRpbmcgYSAx IG1lYW5zIGNsZWFyIGZhdWx0ICovCisgICAgaWYgKCB2YWwgJiBETUFfRlJDRF9GICkKKyAgICB7 CisgICAgICAgIHZ2dGRfZnJlZV9mcmNkKHZ2dGQsIDApOworICAgICAgICB2dnRkX3VwZGF0ZV9w cGYodnZ0ZCk7CisgICAgfQorICAgIHJldHVybiBYODZFTVVMX09LQVk7Cit9CisKK3N0YXRpYyB2 b2lkIHZ2dGRfd3JpdGVfZmVjdGwoc3RydWN0IHZ2dGQgKnZ2dGQsIHVpbnQzMl90IHZhbCkKK3sK KyAgICAvKgorICAgICAqIE9ubHkgRE1BX0ZFQ1RMX0lNIGJpdCBpcyB3cml0YWJsZS4gR2VuZXJh dGUgcGVuZGluZyBldmVudCB3aGVuIHVubWFzay4KKyAgICAgKi8KKyAgICBpZiAoICEodmFsICYg RE1BX0ZFQ1RMX0lNKSApCisgICAgeworICAgICAgICAvKiBDbGVhciBJTSAqLworICAgICAgICB2 dnRkX2NsZWFyX2JpdCh2dnRkLCBETUFSX0ZFQ1RMX1JFRywgRE1BX0ZFQ1RMX0lNX1NISUZUKTsK KyAgICAgICAgaWYgKCB2dnRkX3Rlc3RfYW5kX2NsZWFyX2JpdCh2dnRkLCBETUFSX0ZFQ1RMX1JF RywgRE1BX0ZFQ1RMX0lQX1NISUZUKSApCisgICAgICAgICAgICB2dnRkX25vdGlmeV9mYXVsdCh2 dnRkKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICB2dnRkX3NldF9iaXQodnZ0ZCwgRE1BUl9G RUNUTF9SRUcsIERNQV9GRUNUTF9JTV9TSElGVCk7Cit9CisKK3N0YXRpYyB2b2lkIHZ2dGRfd3Jp dGVfZnN0cyhzdHJ1Y3QgdnZ0ZCAqdnZ0ZCwgdWludDMyX3QgdmFsKQoreworICAgIGludCBpLCBt YXhfZmF1bHRfaW5kZXggPSBETUFfRlNUU19QUk9fU0hJRlQ7CisgICAgdWludDY0X3QgYml0c190 b19jbGVhciA9IHZhbCAmIERNQV9GU1RTX1JXMUNTOworCisgICAgaWYgKCBiaXRzX3RvX2NsZWFy ICkKKyAgICB7CisgICAgICAgIGkgPSBmaW5kX2ZpcnN0X2JpdCgmYml0c190b19jbGVhciwgbWF4 X2ZhdWx0X2luZGV4IC8gOCArIDEpOworICAgICAgICB3aGlsZSAoIGkgPD0gbWF4X2ZhdWx0X2lu ZGV4ICkKKyAgICAgICAgeworICAgICAgICAgICAgdnZ0ZF9jbGVhcl9iaXQodnZ0ZCwgRE1BUl9G U1RTX1JFRywgaSk7CisgICAgICAgICAgICBpID0gZmluZF9uZXh0X2JpdCgmYml0c190b19jbGVh ciwgbWF4X2ZhdWx0X2luZGV4IC8gOCArIDEsIGkgKyAxKTsKKyAgICAgICAgfQorICAgIH0KKwor ICAgIC8qCisgICAgICogQ2xlYXIgSVAgZmllbGQgd2hlbiBhbGwgc3RhdHVzIGZpZWxkcyBpbiB0 aGUgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICogYmVpbmcgY2xlYXIuCisgICAgICovCisg ICAgaWYgKCAhKCh2dnRkX2dldF9yZWcodnZ0ZCwgRE1BUl9GU1RTX1JFRykgJiBETUFfRlNUU19G QVVMVFMpKSApCisgICAgICAgIHZ2dGRfY2xlYXJfYml0KHZ2dGQsIERNQVJfRkVDVExfUkVHLCBE TUFfRkVDVExfSVBfU0hJRlQpOworfQorCiBzdGF0aWMgdm9pZCB3cml0ZV9nY21kX2lyZShzdHJ1 Y3QgdnZ0ZCAqdnZ0ZCwgdWludDMyX3QgdmFsKQogewogICAgIGJvb2wgc2V0ID0gdmFsICYgRE1B X0dDTURfSVJFOwpAQCAtMzkxLDExICs2MjksNDcgQEAgc3RhdGljIGludCB2dnRkX3JlYWQoc3Ry dWN0IHZjcHUgKnYsIHVuc2lnbmVkIGxvbmcgYWRkciwKICAgICByZXR1cm4gWDg2RU1VTF9PS0FZ OwogfQogCitzdGF0aWMgdm9pZCB2dnRkX3dyaXRlX2ZhdWx0X3JlZ3Moc3RydWN0IHZ2dGQgKnZ2 dGQsIHVuc2lnbmVkIGxvbmcgdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBsZW4pCit7CisgICAgdW5zaWduZWQg aW50IGZhdWx0X29mZnNldCA9IGNhcF9mYXVsdF9yZWdfb2Zmc2V0KAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdnZ0ZF9nZXRfcmVnX3F1YWQodnZ0ZCwgRE1BUl9DQVBfUkVH KSk7CisKKyAgICBzcGluX2xvY2soJnZ2dGQtPmZlX2xvY2spOworICAgIGZvciAoIDsgbGVuIDsg bGVuIC09IDQsIG9mZnNldCArPSA0LCB2YWwgPSB2YWwgPj4gMzIpCisgICAgeworICAgICAgICBz d2l0Y2ggKCBvZmZzZXQgKQorICAgICAgICB7CisgICAgICAgIGNhc2UgRE1BUl9GU1RTX1JFRzoK KyAgICAgICAgICAgIHZ2dGRfd3JpdGVfZnN0cyh2dnRkLCB2YWwpOworICAgICAgICAgICAgYnJl YWs7CisKKyAgICAgICAgY2FzZSBETUFSX0ZFQ1RMX1JFRzoKKyAgICAgICAgICAgIHZ2dGRfd3Jp dGVfZmVjdGwodnZ0ZCwgdmFsKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ug RE1BUl9GRURBVEFfUkVHOgorICAgICAgICBjYXNlIERNQVJfRkVBRERSX1JFRzoKKyAgICAgICAg Y2FzZSBETUFSX0ZFVUFERFJfUkVHOgorICAgICAgICAgICAgdnZ0ZF9zZXRfcmVnKHZ2dGQsIG9m ZnNldCwgdmFsKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAg ICAgICAgICBpZiAoIG9mZnNldCA9PSAoZmF1bHRfb2Zmc2V0ICsgRE1BX0ZSQ0QzX09GRlNFVCkg KQorICAgICAgICAgICAgICAgICB2dnRkX3dyaXRlX2ZyY2QzKHZ2dGQsIHZhbCk7CisgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBzcGluX3VubG9jaygmdnZ0ZC0+ZmVf bG9jayk7Cit9CisKIHN0YXRpYyBpbnQgdnZ0ZF93cml0ZShzdHJ1Y3QgdmNwdSAqdiwgdW5zaWdu ZWQgbG9uZyBhZGRyLAogICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW4sIHVu c2lnbmVkIGxvbmcgdmFsKQogewogICAgIHN0cnVjdCB2dnRkICp2dnRkID0gZG9tYWluX3Z2dGQo di0+ZG9tYWluKTsKICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gYWRkciAtIHZ2dGQtPmJhc2Vf YWRkcjsKKyAgICB1bnNpZ25lZCBpbnQgZmF1bHRfb2Zmc2V0ID0gY2FwX2ZhdWx0X3JlZ19vZmZz ZXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dnRkX2dldF9yZWdfcXVh ZCh2dnRkLCBETUFSX0NBUF9SRUcpKTsKIAogICAgIHZ2dGRfaW5mbygiV3JpdGUgb2Zmc2V0ICV4 IGxlbiAlZCB2YWwgJWx4XG4iLCBvZmZzZXQsIGxlbiwgdmFsKTsKIApAQCAtNDE5LDcgKzY5Mywx OCBAQCBzdGF0aWMgaW50IHZ2dGRfd3JpdGUoc3RydWN0IHZjcHUgKnYsIHVuc2lnbmVkIGxvbmcg YWRkciwKICAgICAgICAgdnZ0ZF9zZXRfcmVnKHZ2dGQsIG9mZnNldCwgdmFsKTsKICAgICAgICAg YnJlYWs7CiAKKyAgICBjYXNlIERNQVJfRlNUU19SRUc6CisgICAgY2FzZSBETUFSX0ZFQ1RMX1JF RzoKKyAgICBjYXNlIERNQVJfRkVEQVRBX1JFRzoKKyAgICBjYXNlIERNQVJfRkVBRERSX1JFRzoK KyAgICBjYXNlIERNQVJfRkVVQUREUl9SRUc6CisgICAgICAgIHZ2dGRfd3JpdGVfZmF1bHRfcmVn cyh2dnRkLCB2YWwsIG9mZnNldCwgbGVuKTsKKyAgICAgICAgYnJlYWs7CisKICAgICBkZWZhdWx0 OgorICAgICAgICBpZiAoIChvZmZzZXQgPT0gKGZhdWx0X29mZnNldCArIERNQV9GUkNEMl9PRkZT RVQpKSB8fAorICAgICAgICAgICAgIChvZmZzZXQgPT0gKGZhdWx0X29mZnNldCArIERNQV9GUkNE M19PRkZTRVQpKSApCisgICAgICAgICAgICB2dnRkX3dyaXRlX2ZhdWx0X3JlZ3ModnZ0ZCwgdmFs LCBvZmZzZXQsIGxlbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNDQ4LDcgKzczMyw3 IEBAIHN0YXRpYyB2b2lkIHZ2dGRfaGFuZGxlX2ZhdWx0KHN0cnVjdCB2dnRkICp2dnRkLAogICAg IGNhc2UgVlREX0ZSX0lSX1JFUV9SU1ZEOgogICAgIGNhc2UgVlREX0ZSX0lSX0lOREVYX09WRVI6 CiAgICAgY2FzZSBWVERfRlJfSVJfUk9PVF9JTlZBTDoKLSAgICAgICAgLyogVE9ETzogaGFuZGxl IGZhdWx0IChlLmcuIHJlY29yZCBhbmQgcmVwb3J0IHRoaXMgZmF1bHQgdG8gVk0gKi8KKyAgICAg ICAgdnZ0ZF9yZWNvcmRfZmF1bHQodnZ0ZCwgaXJxLCBmYXVsdCk7CiAgICAgICAgIGJyZWFrOwog CiAgICAgZGVmYXVsdDoKQEAgLTYwNyw2ICs4OTIsNyBAQCBzdGF0aWMgaW50IHZ2dGRfY3JlYXRl KHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCB2aW9tbXUgKnZpb21tdSkKICAgICB2dnRkLT5iYXNl X2FkZHIgPSB2aW9tbXUtPmJhc2VfYWRkcmVzczsKICAgICB2dnRkLT5kb21haW4gPSBkOwogICAg IHJlZ2lzdGVyX21taW9faGFuZGxlcihkLCAmdnZ0ZF9tbWlvX29wcyk7CisgICAgc3Bpbl9sb2Nr X2luaXQoJnZ2dGQtPmZlX2xvY2spOwogCiAgICAgdmlvbW11LT5wcml2ID0gdnZ0ZDsKIAotLSAK MS44LjMuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Clhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9s aXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=