From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: [PATCH v3 25/25] xen/arm: split domain_build.c Date: Tue, 31 Jul 2018 16:28:08 -0700 Message-ID: <1533079688-9541-25-git-send-email-sstabellini@kernel.org> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: julien.grall@arm.com Cc: Stefano Stabellini , sstabellini@kernel.org, andrii_anisov@epam.com, xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org ZG9tYWluX2J1aWxkLmMgaXMgdG9vIGxhcmdlLgoKTW92ZSBhbGwgdGhlIEFDUEkgc3BlY2lmaWMg ZGV2aWNlIHRyZWUgZ2VuZXJhdGluZyBmdW5jdGlvbnMgZnJvbQpkb21haW5fYnVpbGQuYyB0byBh Y3BpL2FjcGlfZHRfYnVpbGQuYy4KClNpZ25lZC1vZmYtYnk6IFN0ZWZhbm8gU3RhYmVsbGluaSA8 c3RlZmFub3NAeGlsaW54LmNvbT4KLS0tCiB4ZW4vYXJjaC9hcm0vYWNwaS9NYWtlZmlsZSAgICAg ICAgfCAgIDEgKwogeGVuL2FyY2gvYXJtL2FjcGkvYWNwaV9kdF9idWlsZC5jIHwgNTkxICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB4ZW4vYXJjaC9hcm0vYWNwaS9hY3Bp X2R0X2J1aWxkLmggfCAgMzIgKysrCiB4ZW4vYXJjaC9hcm0vZG9tYWluX2J1aWxkLmMgICAgICAg fCA1ODUgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogNCBmaWxlcyBjaGFu Z2VkLCA2MjkgaW5zZXJ0aW9ucygrKSwgNTgwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAw NjQ0IHhlbi9hcmNoL2FybS9hY3BpL2FjcGlfZHRfYnVpbGQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IHhlbi9hcmNoL2FybS9hY3BpL2FjcGlfZHRfYnVpbGQuaAoKZGlmZiAtLWdpdCBhL3hlbi9hcmNo L2FybS9hY3BpL01ha2VmaWxlIGIveGVuL2FyY2gvYXJtL2FjcGkvTWFrZWZpbGUKaW5kZXggMjM5 NjNmOC4uYWMwODA0YiAxMDA2NDQKLS0tIGEveGVuL2FyY2gvYXJtL2FjcGkvTWFrZWZpbGUKKysr IGIveGVuL2FyY2gvYXJtL2FjcGkvTWFrZWZpbGUKQEAgLTEsMiArMSwzIEBACiBvYmoteSArPSBs aWIubworb2JqLXkgKz0gYWNwaV9kdF9idWlsZC5vCiBvYmoteSArPSBib290LmluaXQubwpkaWZm IC0tZ2l0IGEveGVuL2FyY2gvYXJtL2FjcGkvYWNwaV9kdF9idWlsZC5jIGIveGVuL2FyY2gvYXJt L2FjcGkvYWNwaV9kdF9idWlsZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjdlMTJkNjQKLS0tIC9kZXYvbnVsbAorKysgYi94ZW4vYXJjaC9hcm0vYWNwaS9hY3BpX2R0X2J1 aWxkLmMKQEAgLTAsMCArMSw1OTEgQEAKKyNpbmNsdWRlIDx4ZW4vbW0uaD4KKyNpbmNsdWRlIDx4 ZW4vc2NoZWQuaD4KKyNpbmNsdWRlIDx4ZW4vYWNwaS5oPgorI2luY2x1ZGUgPHhlbi9ldmVudC5o PgorI2luY2x1ZGUgPHhlbi9pb2NhcC5oPgorI2luY2x1ZGUgPHhlbi9kZXZpY2VfdHJlZS5oPgor I2luY2x1ZGUgPHhlbi9saWJmZHQvbGliZmR0Lmg+CisjaW5jbHVkZSA8eGVuL2lycS5oPgorI2lu Y2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhY3BpL2FjdGFibGVzLmg+CisjaW5jbHVkZSAi YWNwaV9kdF9idWlsZC5oIgorI2luY2x1ZGUgIi4uL2tlcm5lbC5oIgorCisvKiBPdmVycmlkZSBt YWNyb3MgZnJvbSBhc20vcGFnZS5oIHRvIG1ha2UgdGhlbSB3b3JrIHdpdGggbWZuX3QgKi8KKyN1 bmRlZiB2aXJ0X3RvX21mbgorI2RlZmluZSB2aXJ0X3RvX21mbih2YSkgX21mbihfX3ZpcnRfdG9f bWZuKHZhKSkKKworI2RlZmluZSBBQ1BJX0RPTTBfRkRUX01JTl9TSVpFIDQwOTYKKworc3RhdGlj IGludCBfX2luaXQgYWNwaV9pb21lbV9kZW55X2FjY2VzcyhzdHJ1Y3QgZG9tYWluICpkKQorewor ICAgIGFjcGlfc3RhdHVzIHN0YXR1czsKKyAgICBzdHJ1Y3QgYWNwaV90YWJsZV9zcGNyICpzcGNy ID0gTlVMTDsKKyAgICB1bnNpZ25lZCBsb25nIG1mbjsKKyAgICBpbnQgcmM7CisKKyAgICAvKiBG aXJzdGx5IHBlcm1pdCBmdWxsIE1NSU8gY2FwYWJpbGl0aWVzLiAqLworICAgIHJjID0gaW9tZW1f cGVybWl0X2FjY2VzcyhkLCAwVUwsIH4wVUwpOworICAgIGlmICggcmMgKQorICAgICAgICByZXR1 cm4gcmM7CisKKyAgICAvKiBUT0RPOiBEZW55IE1NSU8gYWNjZXNzIGZvciBTTU1VLCBHSUMgSVRT ICovCisgICAgc3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfU1BDUiwgMCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICoqKSZzcGNy KTsKKworICAgIGlmICggQUNQSV9GQUlMVVJFKHN0YXR1cykgKQorICAgIHsKKyAgICAgICAgcHJp bnRrKCJGYWlsZWQgdG8gZ2V0IFNQQ1IgdGFibGVcbiIpOworICAgICAgICByZXR1cm4gLUVJTlZB TDsKKyAgICB9CisKKyAgICBtZm4gPSBzcGNyLT5zZXJpYWxfcG9ydC5hZGRyZXNzID4+IFBBR0Vf U0hJRlQ7CisgICAgLyogRGVueSBNTUlPIGFjY2VzcyBmb3IgVUFSVCAqLworICAgIHJjID0gaW9t ZW1fZGVueV9hY2Nlc3MoZCwgbWZuLCBtZm4gKyAxKTsKKyAgICBpZiAoIHJjICkKKyAgICAgICAg cmV0dXJuIHJjOworCisgICAgLyogRGVueSBNTUlPIGFjY2VzcyBmb3IgR0lDIHJlZ2lvbnMgKi8K KyAgICByZXR1cm4gZ2ljX2lvbWVtX2RlbnlfYWNjZXNzKGQpOworfQorCitzdGF0aWMgaW50IF9f aW5pdCBhY3BpX3JvdXRlX3NwaXMoc3RydWN0IGRvbWFpbiAqZCkKK3sKKyAgICBpbnQgaSwgcmVz OworICAgIHN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKworICAgIC8qCisgICAgICogUm91dGUgdGhl IElSUSB0byBoYXJkd2FyZSBkb21haW4gYW5kIHBlcm1pdCB0aGUgYWNjZXNzLgorICAgICAqIFRo ZSBpbnRlcnJ1cHQgdHlwZSB3aWxsIGJlIHNldCBieSBzZXQgYnkgdGhlIGhhcmR3YXJlIGRvbWFp bi4KKyAgICAgKi8KKyAgICBmb3IoIGkgPSBOUl9MT0NBTF9JUlFTOyBpIDwgdmdpY19udW1faXJx cyhkKTsgaSsrICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIFRPRE86IEV4Y2x1ZGUg dGhlIFNQSXMgU01NVSB1c2VzIHdoaWNoIHNob3VsZCBub3QgYmUgcm91dGVkIHRvCisgICAgICAg ICAqIHRoZSBoYXJkd2FyZSBkb21haW4uCisgICAgICAgICAqLworICAgICAgICBkZXNjID0gaXJx X3RvX2Rlc2MoaSk7CisgICAgICAgIGlmICggZGVzYy0+YWN0aW9uICE9IE5VTEwpCisgICAgICAg ICAgICBjb250aW51ZTsKKworICAgICAgICAvKiBYWFg6IFNoYWxsIHdlIHVzZSBhIHByb3BlciBk ZXZuYW1lPyAqLworICAgICAgICByZXMgPSBtYXBfaXJxX3RvX2RvbWFpbihkLCBpLCB0cnVlLCAi QUNQSSIpOworICAgICAgICBpZiAoIHJlcyApCisgICAgICAgICAgICByZXR1cm4gcmVzOworICAg IH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBhY3BpX21ha2VfaHlw ZXJ2aXNvcl9ub2RlKGNvbnN0IHN0cnVjdCBrZXJuZWxfaW5mbyAqa2luZm8sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtZW1iYW5rIHRibF9hZGRb XSkKK3sKKyAgICBjb25zdCBjaGFyIGNvbXBhdFtdID0KKyAgICAgICAgInhlbix4ZW4tIl9fc3Ry aW5naWZ5KFhFTl9WRVJTSU9OKSIuIl9fc3RyaW5naWZ5KFhFTl9TVUJWRVJTSU9OKSJcMCIKKyAg ICAgICAgInhlbix4ZW4iOworICAgIGludCByZXM7CisgICAgLyogQ29udmVuaWVuY2UgYWxpYXMg Ki8KKyAgICB2b2lkICpmZHQgPSBraW5mby0+ZmR0OworCisgICAgZHRfZHByaW50aygiQ3JlYXRl IGh5cGVydmlzb3Igbm9kZVxuIik7CisKKyAgICAvKiBTZWUgbGludXggRG9jdW1lbnRhdGlvbi9k ZXZpY2V0cmVlL2JpbmRpbmdzL2FybS94ZW4udHh0ICovCisgICAgcmVzID0gZmR0X2JlZ2luX25v ZGUoZmR0LCAiaHlwZXJ2aXNvciIpOworICAgIGlmICggcmVzICkKKyAgICAgICAgcmV0dXJuIHJl czsKKworICAgIC8qIENhbm5vdCB1c2UgZmR0X3Byb3BlcnR5X3N0cmluZyBkdWUgdG8gZW1iZWRk ZWQgbnVsbHMgKi8KKyAgICByZXMgPSBmZHRfcHJvcGVydHkoZmR0LCAiY29tcGF0aWJsZSIsIGNv bXBhdCwgc2l6ZW9mKGNvbXBhdCkpOworICAgIGlmICggcmVzICkKKyAgICAgICAgcmV0dXJuIHJl czsKKworICAgIHJlcyA9IGFjcGlfbWFrZV9lZmlfbm9kZXMoZmR0LCB0YmxfYWRkKTsKKyAgICBp ZiAoIHJlcyApCisgICAgICAgIHJldHVybiByZXM7CisKKyAgICByZXMgPSBmZHRfZW5kX25vZGUo ZmR0KTsKKworICAgIHJldHVybiByZXM7Cit9CisKKy8qCisgKiBQcmVwYXJlIGEgbWluaW1hbCBE VEIgZm9yIERvbTAgd2hpY2ggY29udGFpbnMgYm9vdGFyZ3MsIGluaXRyZCwgbWVtb3J5CisgKiBp bmZvcm1hdGlvbiwgRUZJIHRhYmxlLgorICovCitzdGF0aWMgaW50IF9faW5pdCBjcmVhdGVfYWNw aV9kdGIoc3RydWN0IGtlcm5lbF9pbmZvICpraW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgbWVtYmFuayB0YmxfYWRkW10pCit7CisgICAgaW50IG5ld19zaXpl OworICAgIGludCByZXQ7CisKKyAgICBkdF9kcHJpbnRrKCJQcmVwYXJlIGEgbWluIERUQiBmb3Ig RE9NMFxuIik7CisKKyAgICAvKiBBbGxvY2F0ZSBtaW4gc2l6ZSBmb3IgRFQgKi8KKyAgICBuZXdf c2l6ZSA9IEFDUElfRE9NMF9GRFRfTUlOX1NJWkU7CisgICAga2luZm8tPmZkdCA9IHhtYWxsb2Nf Ynl0ZXMobmV3X3NpemUpOworCisgICAgaWYgKCBraW5mby0+ZmR0ID09IE5VTEwgKQorICAgICAg ICByZXR1cm4gLUVOT01FTTsKKworICAgIC8qIENyZWF0ZSBhIG5ldyBlbXB0eSBEVCBmb3IgRE9N MCAqLworICAgIHJldCA9IGZkdF9jcmVhdGUoa2luZm8tPmZkdCwgbmV3X3NpemUpOworICAgIGlm ICggcmV0IDwgMCApCisgICAgICAgIGdvdG8gZXJyOworCisgICAgcmV0ID0gZmR0X2ZpbmlzaF9y ZXNlcnZlbWFwKGtpbmZvLT5mZHQpOworICAgIGlmICggcmV0IDwgMCApCisgICAgICAgIGdvdG8g ZXJyOworCisgICAgcmV0ID0gZmR0X2JlZ2luX25vZGUoa2luZm8tPmZkdCwgIi8iKTsKKyAgICBp ZiAoIHJldCA8IDAgKQorICAgICAgICBnb3RvIGVycjsKKworICAgIHJldCA9IGZkdF9wcm9wZXJ0 eV9jZWxsKGtpbmZvLT5mZHQsICIjYWRkcmVzcy1jZWxscyIsIDIpOworICAgIGlmICggcmV0ICkK KyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldCA9IGZkdF9wcm9wZXJ0eV9jZWxsKGtpbmZv LT5mZHQsICIjc2l6ZS1jZWxscyIsIDEpOworICAgIGlmICggcmV0ICkKKyAgICAgICAgcmV0dXJu IHJldDsKKworICAgIC8qIENyZWF0ZSBhIGNob3NlbiBub2RlIGZvciBET00wICovCisgICAgcmV0 ID0gbWFrZV9jaG9zZW5fbm9kZShraW5mbyk7CisgICAgaWYgKCByZXQgKQorICAgICAgICBnb3Rv IGVycjsKKworICAgIHJldCA9IGFjcGlfbWFrZV9oeXBlcnZpc29yX25vZGUoa2luZm8sIHRibF9h ZGQpOworICAgIGlmICggcmV0ICkKKyAgICAgICAgZ290byBlcnI7CisKKyAgICByZXQgPSBmZHRf ZW5kX25vZGUoa2luZm8tPmZkdCk7CisgICAgaWYgKCByZXQgPCAwICkKKyAgICAgICAgZ290byBl cnI7CisKKyAgICByZXQgPSBmZHRfZmluaXNoKGtpbmZvLT5mZHQpOworICAgIGlmICggcmV0IDwg MCApCisgICAgICAgIGdvdG8gZXJyOworCisgICAgcmV0dXJuIDA7CisKKyAgZXJyOgorICAgIHBy aW50aygiRGV2aWNlIHRyZWUgZ2VuZXJhdGlvbiBmYWlsZWQgKCVkKS5cbiIsIHJldCk7CisgICAg eGZyZWUoa2luZm8tPmZkdCk7CisgICAgcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyB2b2lk IF9faW5pdCBhY3BpX21hcF9vdGhlcl90YWJsZXMoc3RydWN0IGRvbWFpbiAqZCkKK3sKKyAgICBp bnQgaTsKKyAgICB1bnNpZ25lZCBsb25nIHJlczsKKyAgICB1NjQgYWRkciwgc2l6ZTsKKworICAg IC8qIE1hcCBhbGwgQUNQSSB0YWJsZXMgdG8gRG9tMCB1c2luZyAxOjEgbWFwcGluZ3MuICovCisg ICAgZm9yKCBpID0gMDsgaSA8IGFjcGlfZ2JsX3Jvb3RfdGFibGVfbGlzdC5jb3VudDsgaSsrICkK KyAgICB7CisgICAgICAgIGFkZHIgPSBhY3BpX2dibF9yb290X3RhYmxlX2xpc3QudGFibGVzW2ld LmFkZHJlc3M7CisgICAgICAgIHNpemUgPSBhY3BpX2dibF9yb290X3RhYmxlX2xpc3QudGFibGVz W2ldLmxlbmd0aDsKKyAgICAgICAgcmVzID0gbWFwX3JlZ2lvbnNfcDJtdChkLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdhZGRyX3RvX2dmbihhZGRyKSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQRk5fVVAoc2l6ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbWFkZHJfdG9fbWZuKGFkZHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHAybV9tbWlvX2RpcmVjdF9jKTsKKyAgICAgICAgaWYgKCByZXMgKQorICAgICAgICB7CisgICAg ICAgICAgICAgcGFuaWMoWEVOTE9HX0VSUiAiVW5hYmxlIHRvIG1hcCBBQ1BJIHJlZ2lvbiAweCUi UFJJeDY0CisgICAgICAgICAgICAgICAgICAgIiAtIDB4JSJQUkl4NjQiIGluIGRvbWFpbiBcbiIs CisgICAgICAgICAgICAgICAgICAgYWRkciAmIFBBR0VfTUFTSywgUEFHRV9BTElHTihhZGRyICsg c2l6ZSkgLSAxKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGludCBfX2luaXQgYWNw aV9jcmVhdGVfcnNkcChzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgbWVtYmFuayB0YmxfYWRkW10p Cit7CisKKyAgICBzdHJ1Y3QgYWNwaV90YWJsZV9yc2RwICpyc2RwID0gTlVMTDsKKyAgICB1NjQg YWRkcjsKKyAgICB1NjQgdGFibGVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9yc2Rw KTsKKyAgICB1OCAqYmFzZV9wdHI7CisgICAgdTggY2hlY2tzdW07CisKKyAgICBhZGRyID0gYWNw aV9vc19nZXRfcm9vdF9wb2ludGVyKCk7CisgICAgaWYgKCAhYWRkciAgKQorICAgIHsKKyAgICAg ICAgcHJpbnRrKCJVbmFibGUgdG8gZ2V0IGFjcGkgcm9vdCBwb2ludGVyXG4iKTsKKyAgICAgICAg cmV0dXJuIC1FSU5WQUw7CisgICAgfQorICAgIHJzZHAgPSBhY3BpX29zX21hcF9tZW1vcnkoYWRk ciwgdGFibGVfc2l6ZSk7CisgICAgYmFzZV9wdHIgPSBkLT5hcmNoLmVmaV9hY3BpX3RhYmxlCisg ICAgICAgICAgICAgICArIGFjcGlfZ2V0X3RhYmxlX29mZnNldCh0YmxfYWRkLCBUQkxfUlNEUCk7 CisgICAgbWVtY3B5KGJhc2VfcHRyLCByc2RwLCB0YWJsZV9zaXplKTsKKyAgICBhY3BpX29zX3Vu bWFwX21lbW9yeShyc2RwLCB0YWJsZV9zaXplKTsKKworICAgIHJzZHAgPSAoc3RydWN0IGFjcGlf dGFibGVfcnNkcCAqKWJhc2VfcHRyOworICAgIC8qIFJlcGxhY2UgeHNkdF9waHlzaWNhbF9hZGRy ZXNzICovCisgICAgcnNkcC0+eHNkdF9waHlzaWNhbF9hZGRyZXNzID0gdGJsX2FkZFtUQkxfWFNE VF0uc3RhcnQ7CisgICAgY2hlY2tzdW0gPSBhY3BpX3RiX2NoZWNrc3VtKEFDUElfQ0FTVF9QVFIo dTgsIHJzZHApLCB0YWJsZV9zaXplKTsKKyAgICByc2RwLT5jaGVja3N1bSA9IHJzZHAtPmNoZWNr c3VtIC0gY2hlY2tzdW07CisKKyAgICB0YmxfYWRkW1RCTF9SU0RQXS5zdGFydCA9IGQtPmFyY2gu ZWZpX2FjcGlfZ3BhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGFjcGlfZ2V0X3Rh YmxlX29mZnNldCh0YmxfYWRkLCBUQkxfUlNEUCk7CisgICAgdGJsX2FkZFtUQkxfUlNEUF0uc2l6 ZSA9IHRhYmxlX3NpemU7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19pbml0 IGFjcGlfeHNkdF9tb2RpZnlfZW50cnkodTY0IGVudHJ5W10sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGVudHJ5X2NvdW50LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqc2lnbmF0dXJlLCB1NjQg YWRkcikKK3sKKyAgICBpbnQgaTsKKyAgICBzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxl OworICAgIHU2NCBzaXplID0gc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcik7CisKKyAg ICBmb3IoIGkgPSAwOyBpIDwgZW50cnlfY291bnQ7IGkrKyApCisgICAgeworICAgICAgICB0YWJs ZSA9IGFjcGlfb3NfbWFwX21lbW9yeShlbnRyeVtpXSwgc2l6ZSk7CisgICAgICAgIGlmICggQUNQ SV9DT01QQVJFX05BTUUodGFibGUtPnNpZ25hdHVyZSwgc2lnbmF0dXJlKSApCisgICAgICAgIHsK KyAgICAgICAgICAgIGVudHJ5W2ldID0gYWRkcjsKKyAgICAgICAgICAgIGFjcGlfb3NfdW5tYXBf bWVtb3J5KHRhYmxlLCBzaXplKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg ICAgIGFjcGlfb3NfdW5tYXBfbWVtb3J5KHRhYmxlLCBzaXplKTsKKyAgICB9Cit9CisKK3N0YXRp YyBpbnQgX19pbml0IGFjcGlfY3JlYXRlX3hzZHQoc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IG1l bWJhbmsgdGJsX2FkZFtdKQoreworICAgIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGUg PSBOVUxMOworICAgIHN0cnVjdCBhY3BpX3RhYmxlX3JzZHAgKnJzZHBfdGJsOworICAgIHN0cnVj dCBhY3BpX3RhYmxlX3hzZHQgKnhzZHQgPSBOVUxMOworICAgIHU2NCB0YWJsZV9zaXplLCBhZGRy OworICAgIHVuc2lnbmVkIGxvbmcgZW50cnlfY291bnQ7CisgICAgdTggKmJhc2VfcHRyOworICAg IHU4IGNoZWNrc3VtOworCisgICAgYWRkciA9IGFjcGlfb3NfZ2V0X3Jvb3RfcG9pbnRlcigpOwor ICAgIGlmICggIWFkZHIgKQorICAgIHsKKyAgICAgICAgcHJpbnRrKCJVbmFibGUgdG8gZ2V0IGFj cGkgcm9vdCBwb2ludGVyXG4iKTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorICAg IHJzZHBfdGJsID0gYWNwaV9vc19tYXBfbWVtb3J5KGFkZHIsIHNpemVvZihzdHJ1Y3QgYWNwaV90 YWJsZV9yc2RwKSk7CisgICAgdGFibGUgPSBhY3BpX29zX21hcF9tZW1vcnkocnNkcF90YmwtPnhz ZHRfcGh5c2ljYWxfYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl b2Yoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyKSk7CisKKyAgICAvKiBBZGQgcGxhY2UgZm9yIFNU QU8gdGFibGUgaW4gWFNEVCB0YWJsZSAqLworICAgIHRhYmxlX3NpemUgPSB0YWJsZS0+bGVuZ3Ro ICsgc2l6ZW9mKHU2NCk7CisgICAgZW50cnlfY291bnQgPSAodGFibGUtPmxlbmd0aCAtIHNpemVv ZihzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIpKQorICAgICAgICAgICAgICAgICAgLyBzaXplb2Yo dTY0KTsKKyAgICBiYXNlX3B0ciA9IGQtPmFyY2guZWZpX2FjcGlfdGFibGUKKyAgICAgICAgICAg ICAgICsgYWNwaV9nZXRfdGFibGVfb2Zmc2V0KHRibF9hZGQsIFRCTF9YU0RUKTsKKyAgICBtZW1j cHkoYmFzZV9wdHIsIHRhYmxlLCB0YWJsZS0+bGVuZ3RoKTsKKyAgICBhY3BpX29zX3VubWFwX21l bW9yeSh0YWJsZSwgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcikpOworICAgIGFjcGlf b3NfdW5tYXBfbWVtb3J5KHJzZHBfdGJsLCBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfcnNkcCkp OworCisgICAgeHNkdCA9IChzdHJ1Y3QgYWNwaV90YWJsZV94c2R0ICopYmFzZV9wdHI7CisgICAg YWNwaV94c2R0X21vZGlmeV9lbnRyeSh4c2R0LT50YWJsZV9vZmZzZXRfZW50cnksIGVudHJ5X2Nv dW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNQSV9TSUdfRkFEVCwgdGJsX2FkZFtU QkxfRkFEVF0uc3RhcnQpOworICAgIGFjcGlfeHNkdF9tb2RpZnlfZW50cnkoeHNkdC0+dGFibGVf b2Zmc2V0X2VudHJ5LCBlbnRyeV9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEFD UElfU0lHX01BRFQsIHRibF9hZGRbVEJMX01BRFRdLnN0YXJ0KTsKKyAgICB4c2R0LT50YWJsZV9v ZmZzZXRfZW50cnlbZW50cnlfY291bnRdID0gdGJsX2FkZFtUQkxfU1RBT10uc3RhcnQ7CisKKyAg ICB4c2R0LT5oZWFkZXIubGVuZ3RoID0gdGFibGVfc2l6ZTsKKyAgICBjaGVja3N1bSA9IGFjcGlf dGJfY2hlY2tzdW0oQUNQSV9DQVNUX1BUUih1OCwgeHNkdCksIHRhYmxlX3NpemUpOworICAgIHhz ZHQtPmhlYWRlci5jaGVja3N1bSAtPSBjaGVja3N1bTsKKworICAgIHRibF9hZGRbVEJMX1hTRFRd LnN0YXJ0ID0gZC0+YXJjaC5lZmlfYWNwaV9ncGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICsgYWNwaV9nZXRfdGFibGVfb2Zmc2V0KHRibF9hZGQsIFRCTF9YU0RUKTsKKyAgICB0Ymxf YWRkW1RCTF9YU0RUXS5zaXplID0gdGFibGVfc2l6ZTsKKworICAgIHJldHVybiAwOworfQorCitz dGF0aWMgaW50IF9faW5pdCBhY3BpX2NyZWF0ZV9zdGFvKHN0cnVjdCBkb21haW4gKmQsIHN0cnVj dCBtZW1iYW5rIHRibF9hZGRbXSkKK3sKKyAgICBzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRh YmxlID0gTlVMTDsKKyAgICBzdHJ1Y3QgYWNwaV90YWJsZV9zdGFvICpzdGFvID0gTlVMTDsKKyAg ICB1MzIgdGFibGVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9zdGFvKTsKKyAgICB1 MzIgb2Zmc2V0ID0gYWNwaV9nZXRfdGFibGVfb2Zmc2V0KHRibF9hZGQsIFRCTF9TVEFPKTsKKyAg ICBhY3BpX3N0YXR1cyBzdGF0dXM7CisgICAgdTggKmJhc2VfcHRyLCBjaGVja3N1bTsKKworICAg IC8qIENvcHkgT0VNIGFuZCBBU0wgY29tcGlsZXIgZmllbGRzIGZyb20gYW5vdGhlciB0YWJsZSwg dXNlIE1BRFQgKi8KKyAgICBzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19NQURULCAw LCAmdGFibGUpOworCisgICAgaWYgKCBBQ1BJX0ZBSUxVUkUoc3RhdHVzKSApCisgICAgeworICAg ICAgICBjb25zdCBjaGFyICptc2cgPSBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKTsKKwor ICAgICAgICBwcmludGsoIlNUQU86IEZhaWxlZCB0byBnZXQgTUFEVCB0YWJsZSwgJXNcbiIsIG1z Zyk7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKworICAgIGJhc2VfcHRyID0gZC0+ YXJjaC5lZmlfYWNwaV90YWJsZSArIG9mZnNldDsKKyAgICBtZW1jcHkoYmFzZV9wdHIsIHRhYmxl LCBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyKSk7CisKKyAgICBzdGFvID0gKHN0cnVj dCBhY3BpX3RhYmxlX3N0YW8gKiliYXNlX3B0cjsKKyAgICBtZW1jcHkoc3Rhby0+aGVhZGVyLnNp Z25hdHVyZSwgQUNQSV9TSUdfU1RBTywgNCk7CisgICAgc3Rhby0+aGVhZGVyLnJldmlzaW9uID0g MTsKKyAgICBzdGFvLT5oZWFkZXIubGVuZ3RoID0gdGFibGVfc2l6ZTsKKyAgICBzdGFvLT5pZ25v cmVfdWFydCA9IDE7CisgICAgY2hlY2tzdW0gPSBhY3BpX3RiX2NoZWNrc3VtKEFDUElfQ0FTVF9Q VFIodTgsIHN0YW8pLCB0YWJsZV9zaXplKTsKKyAgICBzdGFvLT5oZWFkZXIuY2hlY2tzdW0gLT0g Y2hlY2tzdW07CisKKyAgICB0YmxfYWRkW1RCTF9TVEFPXS5zdGFydCA9IGQtPmFyY2guZWZpX2Fj cGlfZ3BhICsgb2Zmc2V0OworICAgIHRibF9hZGRbVEJMX1NUQU9dLnNpemUgPSB0YWJsZV9zaXpl OworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGFjcGlfY3JlYXRlX21h ZHQoc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IG1lbWJhbmsgdGJsX2FkZFtdKQoreworICAgIHN0 cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGUgPSBOVUxMOworICAgIHN0cnVjdCBhY3BpX3Rh YmxlX21hZHQgKm1hZHQgPSBOVUxMOworICAgIHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAq aGVhZGVyOworICAgIHN0cnVjdCBhY3BpX21hZHRfZ2VuZXJpY19kaXN0cmlidXRvciAqZ2ljZDsK KyAgICB1MzIgdGFibGVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9tYWR0KTsKKyAg ICB1MzIgb2Zmc2V0ID0gYWNwaV9nZXRfdGFibGVfb2Zmc2V0KHRibF9hZGQsIFRCTF9NQURUKTsK KyAgICBpbnQgcmV0OworICAgIGFjcGlfc3RhdHVzIHN0YXR1czsKKyAgICB1OCAqYmFzZV9wdHIs IGNoZWNrc3VtOworCisgICAgc3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfTUFEVCwg MCwgJnRhYmxlKTsKKworICAgIGlmICggQUNQSV9GQUlMVVJFKHN0YXR1cykgKQorICAgIHsKKyAg ICAgICAgY29uc3QgY2hhciAqbXNnID0gYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHN0YXR1cyk7CisK KyAgICAgICAgcHJpbnRrKCJGYWlsZWQgdG8gZ2V0IE1BRFQgdGFibGUsICVzXG4iLCBtc2cpOwor ICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisKKyAgICBiYXNlX3B0ciA9IGQtPmFyY2gu ZWZpX2FjcGlfdGFibGUgKyBvZmZzZXQ7CisgICAgbWVtY3B5KGJhc2VfcHRyLCB0YWJsZSwgdGFi bGVfc2l6ZSk7CisKKyAgICAvKiBBZGQgR2VuZXJpYyBEaXN0cmlidXRvci4gKi8KKyAgICBoZWFk ZXIgPSBhY3BpX3RhYmxlX2dldF9lbnRyeV9tYWR0KEFDUElfTUFEVF9UWVBFX0dFTkVSSUNfRElT VFJJQlVUT1IsIDApOworICAgIGlmICggIWhlYWRlciApCisgICAgeworICAgICAgICBwcmludGso IkNhbid0IGdldCBHSUNEIGVudHJ5XG4iKTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAg fQorICAgIGdpY2QgPSBjb250YWluZXJfb2YoaGVhZGVyLCBzdHJ1Y3QgYWNwaV9tYWR0X2dlbmVy aWNfZGlzdHJpYnV0b3IsIGhlYWRlcik7CisgICAgbWVtY3B5KGJhc2VfcHRyICsgdGFibGVfc2l6 ZSwgZ2ljZCwKKyAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGFjcGlfbWFkdF9nZW5lcmlj X2Rpc3RyaWJ1dG9yKSk7CisgICAgdGFibGVfc2l6ZSArPSBzaXplb2Yoc3RydWN0IGFjcGlfbWFk dF9nZW5lcmljX2Rpc3RyaWJ1dG9yKTsKKworICAgIC8qIEFkZCBvdGhlciBzdWJ0YWJsZXMuICov CisgICAgcmV0ID0gZ2ljX21ha2VfaHdkb21fbWFkdChkLCBvZmZzZXQgKyB0YWJsZV9zaXplKTsK KyAgICBpZiAoIHJldCA8IDAgKQorICAgIHsKKyAgICAgICAgcHJpbnRrKCJGYWlsZWQgdG8gZ2V0 IG90aGVyIHN1YnRhYmxlc1xuIik7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKyAg ICB0YWJsZV9zaXplICs9IHJldDsKKworICAgIG1hZHQgPSAoc3RydWN0IGFjcGlfdGFibGVfbWFk dCAqKWJhc2VfcHRyOworICAgIG1hZHQtPmhlYWRlci5sZW5ndGggPSB0YWJsZV9zaXplOworICAg IGNoZWNrc3VtID0gYWNwaV90Yl9jaGVja3N1bShBQ1BJX0NBU1RfUFRSKHU4LCBtYWR0KSwgdGFi bGVfc2l6ZSk7CisgICAgbWFkdC0+aGVhZGVyLmNoZWNrc3VtIC09IGNoZWNrc3VtOworCisgICAg dGJsX2FkZFtUQkxfTUFEVF0uc3RhcnQgPSBkLT5hcmNoLmVmaV9hY3BpX2dwYSArIG9mZnNldDsK KyAgICB0YmxfYWRkW1RCTF9NQURUXS5zaXplID0gdGFibGVfc2l6ZTsKKworICAgIHJldHVybiAw OworfQorCitzdGF0aWMgaW50IF9faW5pdCBhY3BpX2NyZWF0ZV9mYWR0KHN0cnVjdCBkb21haW4g KmQsIHN0cnVjdCBtZW1iYW5rIHRibF9hZGRbXSkKK3sKKyAgICBzdHJ1Y3QgYWNwaV90YWJsZV9o ZWFkZXIgKnRhYmxlID0gTlVMTDsKKyAgICBzdHJ1Y3QgYWNwaV90YWJsZV9mYWR0ICpmYWR0ID0g TlVMTDsKKyAgICB1NjQgdGFibGVfc2l6ZTsKKyAgICBhY3BpX3N0YXR1cyBzdGF0dXM7CisgICAg dTggKmJhc2VfcHRyOworICAgIHU4IGNoZWNrc3VtOworCisgICAgc3RhdHVzID0gYWNwaV9nZXRf dGFibGUoQUNQSV9TSUdfRkFEVCwgMCwgJnRhYmxlKTsKKworICAgIGlmICggQUNQSV9GQUlMVVJF KHN0YXR1cykgKQorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqbXNnID0gYWNwaV9mb3JtYXRf ZXhjZXB0aW9uKHN0YXR1cyk7CisKKyAgICAgICAgcHJpbnRrKCJGYWlsZWQgdG8gZ2V0IEZBRFQg dGFibGUsICVzXG4iLCBtc2cpOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisKKyAg ICB0YWJsZV9zaXplID0gdGFibGUtPmxlbmd0aDsKKyAgICBiYXNlX3B0ciA9IGQtPmFyY2guZWZp X2FjcGlfdGFibGUKKyAgICAgICAgICAgICAgICsgYWNwaV9nZXRfdGFibGVfb2Zmc2V0KHRibF9h ZGQsIFRCTF9GQURUKTsKKyAgICBtZW1jcHkoYmFzZV9wdHIsIHRhYmxlLCB0YWJsZV9zaXplKTsK KyAgICBmYWR0ID0gKHN0cnVjdCBhY3BpX3RhYmxlX2ZhZHQgKiliYXNlX3B0cjsKKworICAgIC8q IFNldCBQU0NJX0NPTVBMSUFOVCBhbmQgUFNDSV9VU0VfSFZDICovCisgICAgZmFkdC0+YXJtX2Jv b3RfZmxhZ3MgfD0gKEFDUElfRkFEVF9QU0NJX0NPTVBMSUFOVCB8IEFDUElfRkFEVF9QU0NJX1VT RV9IVkMpOworICAgIGNoZWNrc3VtID0gYWNwaV90Yl9jaGVja3N1bShBQ1BJX0NBU1RfUFRSKHU4 LCBmYWR0KSwgdGFibGVfc2l6ZSk7CisgICAgZmFkdC0+aGVhZGVyLmNoZWNrc3VtIC09IGNoZWNr c3VtOworCisgICAgdGJsX2FkZFtUQkxfRkFEVF0uc3RhcnQgPSBkLT5hcmNoLmVmaV9hY3BpX2dw YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBhY3BpX2dldF90YWJsZV9vZmZzZXQo dGJsX2FkZCwgVEJMX0ZBRFQpOworICAgIHRibF9hZGRbVEJMX0ZBRFRdLnNpemUgPSB0YWJsZV9z aXplOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGVzdGltYXRlX2Fj cGlfZWZpX3NpemUoc3RydWN0IGRvbWFpbiAqZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IGtlcm5lbF9pbmZvICpraW5mbykKK3sKKyAgICBzaXplX3Qg ZWZpX3NpemUsIGFjcGlfc2l6ZSwgbWFkdF9zaXplOworICAgIHU2NCBhZGRyOworICAgIHN0cnVj dCBhY3BpX3RhYmxlX3JzZHAgKnJzZHBfdGJsOworICAgIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRl ciAqdGFibGU7CisKKyAgICBlZmlfc2l6ZSA9IGVzdGltYXRlX2VmaV9zaXplKGtpbmZvLT5tZW0u bnJfYmFua3MpOworCisgICAgYWNwaV9zaXplID0gUk9VTkRVUChzaXplb2Yoc3RydWN0IGFjcGlf dGFibGVfZmFkdCksIDgpOworICAgIGFjcGlfc2l6ZSArPSBST1VORFVQKHNpemVvZihzdHJ1Y3Qg YWNwaV90YWJsZV9zdGFvKSwgOCk7CisKKyAgICBtYWR0X3NpemUgPSBnaWNfZ2V0X2h3ZG9tX21h ZHRfc2l6ZShkKTsKKyAgICBhY3BpX3NpemUgKz0gUk9VTkRVUChtYWR0X3NpemUsIDgpOworCisg ICAgYWRkciA9IGFjcGlfb3NfZ2V0X3Jvb3RfcG9pbnRlcigpOworICAgIGlmICggIWFkZHIgKQor ICAgIHsKKyAgICAgICAgcHJpbnRrKCJVbmFibGUgdG8gZ2V0IGFjcGkgcm9vdCBwb2ludGVyXG4i KTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisgICAgcnNkcF90YmwgPSBhY3Bp X29zX21hcF9tZW1vcnkoYWRkciwgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX3JzZHApKTsKKyAg ICBpZiAoICFyc2RwX3RibCApCisgICAgeworICAgICAgICBwcmludGsoIlVuYWJsZSB0byBtYXAg UlNEUCB0YWJsZVxuIik7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKworICAgIHRh YmxlID0gYWNwaV9vc19tYXBfbWVtb3J5KHJzZHBfdGJsLT54c2R0X3BoeXNpY2FsX2FkZHJlc3Ms CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxl X2hlYWRlcikpOworICAgIGFjcGlfb3NfdW5tYXBfbWVtb3J5KHJzZHBfdGJsLCBzaXplb2Yoc3Ry dWN0IGFjcGlfdGFibGVfcnNkcCkpOworICAgIGlmICggIXRhYmxlICkKKyAgICB7CisgICAgICAg IHByaW50aygiVW5hYmxlIHRvIG1hcCBYU0RUIHRhYmxlXG4iKTsKKyAgICAgICAgcmV0dXJuIC1F SU5WQUw7CisgICAgfQorCisgICAgLyogQWRkIHBsYWNlIGZvciBTVEFPIHRhYmxlIGluIFhTRFQg dGFibGUgKi8KKyAgICBhY3BpX3NpemUgKz0gUk9VTkRVUCh0YWJsZS0+bGVuZ3RoICsgc2l6ZW9m KHU2NCksIDgpOworICAgIGFjcGlfb3NfdW5tYXBfbWVtb3J5KHRhYmxlLCBzaXplb2Yoc3RydWN0 IGFjcGlfdGFibGVfaGVhZGVyKSk7CisKKyAgICBhY3BpX3NpemUgKz0gUk9VTkRVUChzaXplb2Yo c3RydWN0IGFjcGlfdGFibGVfcnNkcCksIDgpOworICAgIGQtPmFyY2guZWZpX2FjcGlfbGVuID0g UEFHRV9BTElHTihST1VORFVQKGVmaV9zaXplLCA4KQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICArIFJPVU5EVVAoYWNwaV9zaXplLCA4KSk7CisKKyAgICByZXR1cm4gMDsK K30KKworaW50IF9faW5pdCBwcmVwYXJlX2FjcGkoc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IGtl cm5lbF9pbmZvICpraW5mbykKK3sKKyAgICBpbnQgcmMgPSAwOworICAgIGludCBvcmRlcjsKKyAg ICBzdHJ1Y3QgbWVtYmFuayB0YmxfYWRkW1RCTF9NTUFYXSA9IHt9OworCisgICAgcmMgPSBlc3Rp bWF0ZV9hY3BpX2VmaV9zaXplKGQsIGtpbmZvKTsKKyAgICBpZiAoIHJjICE9IDAgKQorICAgICAg ICByZXR1cm4gcmM7CisKKyAgICBvcmRlciA9IGdldF9vcmRlcl9mcm9tX2J5dGVzKGQtPmFyY2gu ZWZpX2FjcGlfbGVuKTsKKyAgICBkLT5hcmNoLmVmaV9hY3BpX3RhYmxlID0gYWxsb2NfeGVuaGVh cF9wYWdlcyhvcmRlciwgMCk7CisgICAgaWYgKCBkLT5hcmNoLmVmaV9hY3BpX3RhYmxlID09IE5V TEwgKQorICAgIHsKKyAgICAgICAgcHJpbnRrKCJ1bmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IVxu Iik7CisgICAgICAgIHJldHVybiAtRU5PTUVNOworICAgIH0KKyAgICBtZW1zZXQoZC0+YXJjaC5l ZmlfYWNwaV90YWJsZSwgMCwgZC0+YXJjaC5lZmlfYWNwaV9sZW4pOworCisgICAgLyoKKyAgICAg KiBGb3IgQUNQSSwgRG9tMCBkb2Vzbid0IHVzZSBraW5mby0+Z250dGFiX3N0YXJ0IHRvIGdldCB0 aGUgZ3JhbnQgdGFibGUKKyAgICAgKiByZWdpb24uIFNvIHdlIHVzZSBpdCBhcyB0aGUgQUNQSSB0 YWJsZSBtYXBwZWQgYWRkcmVzcy4gQWxzbyBpdCBuZWVkcyB0bworICAgICAqIGNoZWNrIGlmIHRo ZSBzaXplIG9mIGdyYW50IHRhYmxlIHJlZ2lvbiBpcyBlbm91Z2ggZm9yIHRob3NlIEFDUEkgdGFi bGVzLgorICAgICAqLworICAgIGQtPmFyY2guZWZpX2FjcGlfZ3BhID0ga2luZm8tPmdudHRhYl9z dGFydDsKKyAgICBpZiAoIGtpbmZvLT5nbnR0YWJfc2l6ZSA8IGQtPmFyY2guZWZpX2FjcGlfbGVu ICkKKyAgICB7CisgICAgICAgIHByaW50aygiVGhlIGdyYW50IHRhYmxlIHJlZ2lvbiBpcyBub3Qg ZW5vdWdoIHRvIGZpdCB0aGUgQUNQSSB0YWJsZXMhXG4iKTsKKyAgICAgICAgcmV0dXJuIC1FSU5W QUw7CisgICAgfQorCisgICAgcmMgPSBhY3BpX2NyZWF0ZV9mYWR0KGQsIHRibF9hZGQpOworICAg IGlmICggcmMgIT0gMCApCisgICAgICAgIHJldHVybiByYzsKKworICAgIHJjID0gYWNwaV9jcmVh dGVfbWFkdChkLCB0YmxfYWRkKTsKKyAgICBpZiAoIHJjICE9IDAgKQorICAgICAgICByZXR1cm4g cmM7CisKKyAgICByYyA9IGFjcGlfY3JlYXRlX3N0YW8oZCwgdGJsX2FkZCk7CisgICAgaWYgKCBy YyAhPSAwICkKKyAgICAgICAgcmV0dXJuIHJjOworCisgICAgcmMgPSBhY3BpX2NyZWF0ZV94c2R0 KGQsIHRibF9hZGQpOworICAgIGlmICggcmMgIT0gMCApCisgICAgICAgIHJldHVybiByYzsKKwor ICAgIHJjID0gYWNwaV9jcmVhdGVfcnNkcChkLCB0YmxfYWRkKTsKKyAgICBpZiAoIHJjICE9IDAg KQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICBhY3BpX21hcF9vdGhlcl90YWJsZXMoZCk7Cisg ICAgYWNwaV9jcmVhdGVfZWZpX3N5c3RlbV90YWJsZShkLCB0YmxfYWRkKTsKKyAgICBhY3BpX2Ny ZWF0ZV9lZmlfbW1hcF90YWJsZShkLCAma2luZm8tPm1lbSwgdGJsX2FkZCk7CisKKyAgICAvKiBN YXAgdGhlIEVGSSBhbmQgQUNQSSB0YWJsZXMgdG8gRG9tMCAqLworICAgIHJjID0gbWFwX3JlZ2lv bnNfcDJtdChkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBnYWRkcl90b19nZm4oZC0+YXJj aC5lZmlfYWNwaV9ncGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBQRk5fVVAoZC0+YXJj aC5lZmlfYWNwaV9sZW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0X3RvX21mbihk LT5hcmNoLmVmaV9hY3BpX3RhYmxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcDJtX21t aW9fZGlyZWN0X2MpOworICAgIGlmICggcmMgIT0gMCApCisgICAgeworICAgICAgICBwcmludGso WEVOTE9HX0VSUiAiVW5hYmxlIHRvIG1hcCBFRkkvQUNQSSB0YWJsZSAweCUiUFJJeDY0CisgICAg ICAgICAgICAgICAiIC0gMHglIlBSSXg2NCIgaW4gZG9tYWluICVkXG4iLAorICAgICAgICAgICAg ICAgZC0+YXJjaC5lZmlfYWNwaV9ncGEgJiBQQUdFX01BU0ssCisgICAgICAgICAgICAgICBQQUdF X0FMSUdOKGQtPmFyY2guZWZpX2FjcGlfZ3BhICsgZC0+YXJjaC5lZmlfYWNwaV9sZW4pIC0gMSwK KyAgICAgICAgICAgICAgIGQtPmRvbWFpbl9pZCk7CisgICAgICAgIHJldHVybiByYzsKKyAgICB9 CisKKyAgICAvKgorICAgICAqIEZsdXNoIHRoZSBjYWNoZSBmb3IgdGhpcyByZWdpb24sIG90aGVy d2lzZSBET00wIG1heSByZWFkIHdyb25nIGRhdGEgd2hlbgorICAgICAqIHRoZSBjYWNoZSBpcyBk aXNhYmxlZC4KKyAgICAgKi8KKyAgICBjbGVhbl9hbmRfaW52YWxpZGF0ZV9kY2FjaGVfdmFfcmFu Z2UoZC0+YXJjaC5lZmlfYWNwaV90YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZC0+YXJjaC5lZmlfYWNwaV9sZW4pOworCisgICAgcmMgPSBjcmVhdGVfYWNw aV9kdGIoa2luZm8sIHRibF9hZGQpOworICAgIGlmICggcmMgIT0gMCApCisgICAgICAgIHJldHVy biByYzsKKworICAgIHJjID0gYWNwaV9yb3V0ZV9zcGlzKGQpOworICAgIGlmICggcmMgIT0gMCAp CisgICAgICAgIHJldHVybiByYzsKKworICAgIHJjID0gYWNwaV9pb21lbV9kZW55X2FjY2Vzcyhk KTsKKyAgICBpZiAoIHJjICE9IDAgKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICAvKgorICAg ICAqIEFsbCBQUElzIGhhdmUgYmVlbiByZWdpc3RlcmVkLCBhbGxvY2F0ZSB0aGUgZXZlbnQgY2hh bm5lbAorICAgICAqIGludGVycnVwdHMuCisgICAgICovCisgICAgZXZ0Y2huX2FsbG9jYXRlKGQp OworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBtb2Rl OiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9mZnNldDogNAorICogaW5k ZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2Fy bS9hY3BpL2FjcGlfZHRfYnVpbGQuaCBiL3hlbi9hcmNoL2FybS9hY3BpL2FjcGlfZHRfYnVpbGQu aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGU3YWFiCi0tLSAvZGV2L251 bGwKKysrIGIveGVuL2FyY2gvYXJtL2FjcGkvYWNwaV9kdF9idWlsZC5oCkBAIC0wLDAgKzEsMzIg QEAKKyNpZm5kZWYgX19BUkNIX0FSTV9BQ1BJX0FDUElfRFRfQlVJTERfSF9fCisjZGVmaW5lIF9f QVJDSF9BUk1fQUNQSV9BQ1BJX0RUX0JVSUxEX0hfXworCisjaW5jbHVkZSA8eGVuL3NjaGVkLmg+ CisjaW5jbHVkZSAiLi4va2VybmVsLmgiCisKK2ludCBtYXBfaXJxX3RvX2RvbWFpbihzdHJ1Y3Qg ZG9tYWluICpkLCB1bnNpZ25lZCBpbnQgaXJxLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wg bmVlZF9tYXBwaW5nLCBjb25zdCBjaGFyICpkZXZuYW1lKTsKK2ludCBtYWtlX2Nob3Nlbl9ub2Rl KGNvbnN0IHN0cnVjdCBrZXJuZWxfaW5mbyAqa2luZm8pOwordm9pZCBldnRjaG5fYWxsb2NhdGUo c3RydWN0IGRvbWFpbiAqZCk7CisKKyNpZm5kZWYgQ09ORklHX0FDUEkKK3N0YXRpYyBpbmxpbmUg aW50IHByZXBhcmVfYWNwaShzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3Qga2VybmVsX2luZm8gKmtp bmZvKQoreworICAgIC8qIE9ubHkgYm9vdGluZyB3aXRoIEFDUEkgd2lsbCBoaXQgaGVyZSAqLwor ICAgIEJVRygpOworICAgIHJldHVybiAtRUlOVkFMOworfQorI2Vsc2UKK2ludCBwcmVwYXJlX2Fj cGkoc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IGtlcm5lbF9pbmZvICpraW5mbyk7CisjZW5kaWYK KworI2VuZGlmCisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWZp bGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9mZnNldDogNAorICogaW5kZW50LXRhYnMtbW9k ZTogbmlsCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS9kb21haW5fYnVp bGQuYyBiL3hlbi9hcmNoL2FybS9kb21haW5fYnVpbGQuYwppbmRleCAwODg4YTc2Li5hMTIzMTEx IDEwMDY0NAotLS0gYS94ZW4vYXJjaC9hcm0vZG9tYWluX2J1aWxkLmMKKysrIGIveGVuL2FyY2gv YXJtL2RvbWFpbl9idWlsZC5jCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlIDx4ZW4vaXJx Lmg+CiAjaW5jbHVkZSA8eGVuL2dyYW50X3RhYmxlLmg+CisjaW5jbHVkZSAiYWNwaS9hY3BpX2R0 X2J1aWxkLmgiCiAjaW5jbHVkZSAia2VybmVsLmgiCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgX19p bml0ZGF0YSBvcHRfZG9tMF9tYXhfdmNwdXM7CkBAIC03MDEsOCArNzAyLDYgQEAgc3RhdGljIGlu dCBfX2luaXQgbWFrZV9tZW1vcnlfbm9kZShjb25zdCBzdHJ1Y3QgZG9tYWluICpkLAogICAgIHJl dHVybiByZXM7CiB9CiAKLXN0YXRpYyB2b2lkIGV2dGNobl9hbGxvY2F0ZShzdHJ1Y3QgZG9tYWlu ICpkKTsKLQogc3RhdGljIGludCBfX2luaXQgbWFrZV9oeXBlcnZpc29yX25vZGUoc3RydWN0IGRv bWFpbiAqZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0 cnVjdCBrZXJuZWxfaW5mbyAqa2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgYWRkcmNlbGxzLCBpbnQgc2l6ZWNlbGxzKQpAQCAtMTA2Myw3ICsxMDYyLDcg QEAgc3RhdGljIGludCBfX2luaXQgbWFrZV90aW1lcl9ub2RlKGNvbnN0IHN0cnVjdCBkb21haW4g KmQsIHZvaWQgKmZkdCwKICAqIG9uIEFDUEkgc3lzdGVtcywgYW5kIERvbVVzIHN0YXJ0ZWQgZGly ZWN0bHkgZnJvbSBYZW4gYmFzZWQgb24gZGV2aWNlCiAgKiB0cmVlIGluZm9ybWF0aW9uLgogICov Ci1zdGF0aWMgaW50IF9faW5pdCBtYWtlX2Nob3Nlbl9ub2RlKGNvbnN0IHN0cnVjdCBrZXJuZWxf aW5mbyAqa2luZm8pCitpbnQgX19pbml0IG1ha2VfY2hvc2VuX25vZGUoY29uc3Qgc3RydWN0IGtl cm5lbF9pbmZvICpraW5mbykKIHsKICAgICBpbnQgcmVzOwogICAgIGNvbnN0IGNoYXIgKmJvb3Rh cmdzID0gTlVMTDsKQEAgLTExMDQsOCArMTEwMyw4IEBAIHN0YXRpYyBpbnQgX19pbml0IG1ha2Vf Y2hvc2VuX25vZGUoY29uc3Qgc3RydWN0IGtlcm5lbF9pbmZvICpraW5mbykKICAgICByZXR1cm4g cmVzOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBtYXBfaXJxX3RvX2RvbWFpbihzdHJ1Y3QgZG9t YWluICpkLCB1bnNpZ25lZCBpbnQgaXJxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYm9vbCBuZWVkX21hcHBpbmcsIGNvbnN0IGNoYXIgKmRldm5hbWUpCitpbnQgX19pbml0 IG1hcF9pcnFfdG9fZG9tYWluKHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGludCBpcnEsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbmVlZF9tYXBwaW5nLCBjb25zdCBjaGFy ICpkZXZuYW1lKQogewogICAgIGludCByZXM7CiAKQEAgLTE4MDAsNTgwICsxNzk5LDYgQEAgc3Rh dGljIGludCBfX2luaXQgcHJlcGFyZV9kdGJfaHdkb20oc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0 IGtlcm5lbF9pbmZvICpraW5mbykKICAgICByZXR1cm4gLUVJTlZBTDsKIH0KIAotI2lmZGVmIENP TkZJR19BQ1BJCi0jZGVmaW5lIEFDUElfRE9NMF9GRFRfTUlOX1NJWkUgNDA5NgotCi1zdGF0aWMg aW50IF9faW5pdCBhY3BpX2lvbWVtX2RlbnlfYWNjZXNzKHN0cnVjdCBkb21haW4gKmQpCi17Ci0g ICAgYWNwaV9zdGF0dXMgc3RhdHVzOwotICAgIHN0cnVjdCBhY3BpX3RhYmxlX3NwY3IgKnNwY3Ig PSBOVUxMOwotICAgIHVuc2lnbmVkIGxvbmcgbWZuOwotICAgIGludCByYzsKLQotICAgIC8qIEZp cnN0bHkgcGVybWl0IGZ1bGwgTU1JTyBjYXBhYmlsaXRpZXMuICovCi0gICAgcmMgPSBpb21lbV9w ZXJtaXRfYWNjZXNzKGQsIDBVTCwgfjBVTCk7Ci0gICAgaWYgKCByYyApCi0gICAgICAgIHJldHVy biByYzsKLQotICAgIC8qIFRPRE86IERlbnkgTU1JTyBhY2Nlc3MgZm9yIFNNTVUsIEdJQyBJVFMg Ki8KLSAgICBzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19TUENSLCAwLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiopJnNwY3Ip OwotCi0gICAgaWYgKCBBQ1BJX0ZBSUxVUkUoc3RhdHVzKSApCi0gICAgewotICAgICAgICBwcmlu dGsoIkZhaWxlZCB0byBnZXQgU1BDUiB0YWJsZVxuIik7Ci0gICAgICAgIHJldHVybiAtRUlOVkFM OwotICAgIH0KLQotICAgIG1mbiA9IHNwY3ItPnNlcmlhbF9wb3J0LmFkZHJlc3MgPj4gUEFHRV9T SElGVDsKLSAgICAvKiBEZW55IE1NSU8gYWNjZXNzIGZvciBVQVJUICovCi0gICAgcmMgPSBpb21l bV9kZW55X2FjY2VzcyhkLCBtZm4sIG1mbiArIDEpOwotICAgIGlmICggcmMgKQotICAgICAgICBy ZXR1cm4gcmM7Ci0KLSAgICAvKiBEZW55IE1NSU8gYWNjZXNzIGZvciBHSUMgcmVnaW9ucyAqLwot ICAgIHJldHVybiBnaWNfaW9tZW1fZGVueV9hY2Nlc3MoZCk7Ci19Ci0KLXN0YXRpYyBpbnQgX19p bml0IGFjcGlfcm91dGVfc3BpcyhzdHJ1Y3QgZG9tYWluICpkKQotewotICAgIGludCBpLCByZXM7 Ci0gICAgc3RydWN0IGlycV9kZXNjICpkZXNjOwotCi0gICAgLyoKLSAgICAgKiBSb3V0ZSB0aGUg SVJRIHRvIGhhcmR3YXJlIGRvbWFpbiBhbmQgcGVybWl0IHRoZSBhY2Nlc3MuCi0gICAgICogVGhl IGludGVycnVwdCB0eXBlIHdpbGwgYmUgc2V0IGJ5IHNldCBieSB0aGUgaGFyZHdhcmUgZG9tYWlu LgotICAgICAqLwotICAgIGZvciggaSA9IE5SX0xPQ0FMX0lSUVM7IGkgPCB2Z2ljX251bV9pcnFz KGQpOyBpKysgKQotICAgIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogVE9ETzogRXhjbHVkZSB0 aGUgU1BJcyBTTU1VIHVzZXMgd2hpY2ggc2hvdWxkIG5vdCBiZSByb3V0ZWQgdG8KLSAgICAgICAg ICogdGhlIGhhcmR3YXJlIGRvbWFpbi4KLSAgICAgICAgICovCi0gICAgICAgIGRlc2MgPSBpcnFf dG9fZGVzYyhpKTsKLSAgICAgICAgaWYgKCBkZXNjLT5hY3Rpb24gIT0gTlVMTCkKLSAgICAgICAg ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8qIFhYWDogU2hhbGwgd2UgdXNlIGEgcHJvcGVyIGRl dm5hbWU/ICovCi0gICAgICAgIHJlcyA9IG1hcF9pcnFfdG9fZG9tYWluKGQsIGksIHRydWUsICJB Q1BJIik7Ci0gICAgICAgIGlmICggcmVzICkKLSAgICAgICAgICAgIHJldHVybiByZXM7Ci0gICAg fQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGFjcGlfbWFrZV9oeXBl cnZpc29yX25vZGUoY29uc3Qgc3RydWN0IGtlcm5lbF9pbmZvICpraW5mbywKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1lbWJhbmsgdGJsX2FkZFtd KQotewotICAgIGNvbnN0IGNoYXIgY29tcGF0W10gPQotICAgICAgICAieGVuLHhlbi0iX19zdHJp bmdpZnkoWEVOX1ZFUlNJT04pIi4iX19zdHJpbmdpZnkoWEVOX1NVQlZFUlNJT04pIlwwIgotICAg ICAgICAieGVuLHhlbiI7Ci0gICAgaW50IHJlczsKLSAgICAvKiBDb252ZW5pZW5jZSBhbGlhcyAq LwotICAgIHZvaWQgKmZkdCA9IGtpbmZvLT5mZHQ7Ci0KLSAgICBkdF9kcHJpbnRrKCJDcmVhdGUg aHlwZXJ2aXNvciBub2RlXG4iKTsKLQotICAgIC8qIFNlZSBsaW51eCBEb2N1bWVudGF0aW9uL2Rl dmljZXRyZWUvYmluZGluZ3MvYXJtL3hlbi50eHQgKi8KLSAgICByZXMgPSBmZHRfYmVnaW5fbm9k ZShmZHQsICJoeXBlcnZpc29yIik7Ci0gICAgaWYgKCByZXMgKQotICAgICAgICByZXR1cm4gcmVz OwotCi0gICAgLyogQ2Fubm90IHVzZSBmZHRfcHJvcGVydHlfc3RyaW5nIGR1ZSB0byBlbWJlZGRl ZCBudWxscyAqLwotICAgIHJlcyA9IGZkdF9wcm9wZXJ0eShmZHQsICJjb21wYXRpYmxlIiwgY29t cGF0LCBzaXplb2YoY29tcGF0KSk7Ci0gICAgaWYgKCByZXMgKQotICAgICAgICByZXR1cm4gcmVz OwotCi0gICAgcmVzID0gYWNwaV9tYWtlX2VmaV9ub2RlcyhmZHQsIHRibF9hZGQpOwotICAgIGlm ICggcmVzICkKLSAgICAgICAgcmV0dXJuIHJlczsKLQotICAgIHJlcyA9IGZkdF9lbmRfbm9kZShm ZHQpOwotCi0gICAgcmV0dXJuIHJlczsKLX0KLQotLyoKLSAqIFByZXBhcmUgYSBtaW5pbWFsIERU QiBmb3IgRG9tMCB3aGljaCBjb250YWlucyBib290YXJncywgaW5pdHJkLCBtZW1vcnkKLSAqIGlu Zm9ybWF0aW9uLCBFRkkgdGFibGUuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGNyZWF0ZV9hY3Bp X2R0YihzdHJ1Y3Qga2VybmVsX2luZm8gKmtpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBtZW1iYW5rIHRibF9hZGRbXSkKLXsKLSAgICBpbnQgbmV3X3NpemU7 Ci0gICAgaW50IHJldDsKLQotICAgIGR0X2RwcmludGsoIlByZXBhcmUgYSBtaW4gRFRCIGZvciBE T00wXG4iKTsKLQotICAgIC8qIEFsbG9jYXRlIG1pbiBzaXplIGZvciBEVCAqLwotICAgIG5ld19z aXplID0gQUNQSV9ET00wX0ZEVF9NSU5fU0laRTsKLSAgICBraW5mby0+ZmR0ID0geG1hbGxvY19i eXRlcyhuZXdfc2l6ZSk7Ci0KLSAgICBpZiAoIGtpbmZvLT5mZHQgPT0gTlVMTCApCi0gICAgICAg IHJldHVybiAtRU5PTUVNOwotCi0gICAgLyogQ3JlYXRlIGEgbmV3IGVtcHR5IERUIGZvciBET00w ICovCi0gICAgcmV0ID0gZmR0X2NyZWF0ZShraW5mby0+ZmR0LCBuZXdfc2l6ZSk7Ci0gICAgaWYg KCByZXQgPCAwICkKLSAgICAgICAgZ290byBlcnI7Ci0KLSAgICByZXQgPSBmZHRfZmluaXNoX3Jl c2VydmVtYXAoa2luZm8tPmZkdCk7Ci0gICAgaWYgKCByZXQgPCAwICkKLSAgICAgICAgZ290byBl cnI7Ci0KLSAgICByZXQgPSBmZHRfYmVnaW5fbm9kZShraW5mby0+ZmR0LCAiLyIpOwotICAgIGlm ICggcmV0IDwgMCApCi0gICAgICAgIGdvdG8gZXJyOwotCi0gICAgcmV0ID0gZmR0X3Byb3BlcnR5 X2NlbGwoa2luZm8tPmZkdCwgIiNhZGRyZXNzLWNlbGxzIiwgMik7Ci0gICAgaWYgKCByZXQgKQot ICAgICAgICByZXR1cm4gcmV0OwotCi0gICAgcmV0ID0gZmR0X3Byb3BlcnR5X2NlbGwoa2luZm8t PmZkdCwgIiNzaXplLWNlbGxzIiwgMSk7Ci0gICAgaWYgKCByZXQgKQotICAgICAgICByZXR1cm4g cmV0OwotCi0gICAgLyogQ3JlYXRlIGEgY2hvc2VuIG5vZGUgZm9yIERPTTAgKi8KLSAgICByZXQg PSBtYWtlX2Nob3Nlbl9ub2RlKGtpbmZvKTsKLSAgICBpZiAoIHJldCApCi0gICAgICAgIGdvdG8g ZXJyOwotCi0gICAgcmV0ID0gYWNwaV9tYWtlX2h5cGVydmlzb3Jfbm9kZShraW5mbywgdGJsX2Fk ZCk7Ci0gICAgaWYgKCByZXQgKQotICAgICAgICBnb3RvIGVycjsKLQotICAgIHJldCA9IGZkdF9l bmRfbm9kZShraW5mby0+ZmR0KTsKLSAgICBpZiAoIHJldCA8IDAgKQotICAgICAgICBnb3RvIGVy cjsKLQotICAgIHJldCA9IGZkdF9maW5pc2goa2luZm8tPmZkdCk7Ci0gICAgaWYgKCByZXQgPCAw ICkKLSAgICAgICAgZ290byBlcnI7Ci0KLSAgICByZXR1cm4gMDsKLQotICBlcnI6Ci0gICAgcHJp bnRrKCJEZXZpY2UgdHJlZSBnZW5lcmF0aW9uIGZhaWxlZCAoJWQpLlxuIiwgcmV0KTsKLSAgICB4 ZnJlZShraW5mby0+ZmR0KTsKLSAgICByZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIHZvaWQg X19pbml0IGFjcGlfbWFwX290aGVyX3RhYmxlcyhzdHJ1Y3QgZG9tYWluICpkKQotewotICAgIGlu dCBpOwotICAgIHVuc2lnbmVkIGxvbmcgcmVzOwotICAgIHU2NCBhZGRyLCBzaXplOwotCi0gICAg LyogTWFwIGFsbCBBQ1BJIHRhYmxlcyB0byBEb20wIHVzaW5nIDE6MSBtYXBwaW5ncy4gKi8KLSAg ICBmb3IoIGkgPSAwOyBpIDwgYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LmNvdW50OyBpKysgKQot ICAgIHsKLSAgICAgICAgYWRkciA9IGFjcGlfZ2JsX3Jvb3RfdGFibGVfbGlzdC50YWJsZXNbaV0u YWRkcmVzczsKLSAgICAgICAgc2l6ZSA9IGFjcGlfZ2JsX3Jvb3RfdGFibGVfbGlzdC50YWJsZXNb aV0ubGVuZ3RoOwotICAgICAgICByZXMgPSBtYXBfcmVnaW9uc19wMm10KGQsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ2FkZHJfdG9fZ2ZuKGFkZHIpLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFBGTl9VUChzaXplKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtYWRkcl90b19tZm4oYWRkciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cDJtX21taW9fZGlyZWN0X2MpOwotICAgICAgICBpZiAoIHJlcyApCi0gICAgICAgIHsKLSAgICAg ICAgICAgICBwYW5pYyhYRU5MT0dfRVJSICJVbmFibGUgdG8gbWFwIEFDUEkgcmVnaW9uIDB4JSJQ Ukl4NjQKLSAgICAgICAgICAgICAgICAgICAiIC0gMHglIlBSSXg2NCIgaW4gZG9tYWluIFxuIiwK LSAgICAgICAgICAgICAgICAgICBhZGRyICYgUEFHRV9NQVNLLCBQQUdFX0FMSUdOKGFkZHIgKyBz aXplKSAtIDEpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1zdGF0aWMgaW50IF9faW5pdCBhY3Bp X2NyZWF0ZV9yc2RwKHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCBtZW1iYW5rIHRibF9hZGRbXSkK LXsKLQotICAgIHN0cnVjdCBhY3BpX3RhYmxlX3JzZHAgKnJzZHAgPSBOVUxMOwotICAgIHU2NCBh ZGRyOwotICAgIHU2NCB0YWJsZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX3JzZHAp OwotICAgIHU4ICpiYXNlX3B0cjsKLSAgICB1OCBjaGVja3N1bTsKLQotICAgIGFkZHIgPSBhY3Bp X29zX2dldF9yb290X3BvaW50ZXIoKTsKLSAgICBpZiAoICFhZGRyICApCi0gICAgewotICAgICAg ICBwcmludGsoIlVuYWJsZSB0byBnZXQgYWNwaSByb290IHBvaW50ZXJcbiIpOwotICAgICAgICBy ZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0gICAgcnNkcCA9IGFjcGlfb3NfbWFwX21lbW9yeShhZGRy LCB0YWJsZV9zaXplKTsKLSAgICBiYXNlX3B0ciA9IGQtPmFyY2guZWZpX2FjcGlfdGFibGUKLSAg ICAgICAgICAgICAgICsgYWNwaV9nZXRfdGFibGVfb2Zmc2V0KHRibF9hZGQsIFRCTF9SU0RQKTsK LSAgICBtZW1jcHkoYmFzZV9wdHIsIHJzZHAsIHRhYmxlX3NpemUpOwotICAgIGFjcGlfb3NfdW5t YXBfbWVtb3J5KHJzZHAsIHRhYmxlX3NpemUpOwotCi0gICAgcnNkcCA9IChzdHJ1Y3QgYWNwaV90 YWJsZV9yc2RwICopYmFzZV9wdHI7Ci0gICAgLyogUmVwbGFjZSB4c2R0X3BoeXNpY2FsX2FkZHJl c3MgKi8KLSAgICByc2RwLT54c2R0X3BoeXNpY2FsX2FkZHJlc3MgPSB0YmxfYWRkW1RCTF9YU0RU XS5zdGFydDsKLSAgICBjaGVja3N1bSA9IGFjcGlfdGJfY2hlY2tzdW0oQUNQSV9DQVNUX1BUUih1 OCwgcnNkcCksIHRhYmxlX3NpemUpOwotICAgIHJzZHAtPmNoZWNrc3VtID0gcnNkcC0+Y2hlY2tz dW0gLSBjaGVja3N1bTsKLQotICAgIHRibF9hZGRbVEJMX1JTRFBdLnN0YXJ0ID0gZC0+YXJjaC5l ZmlfYWNwaV9ncGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgYWNwaV9nZXRfdGFi bGVfb2Zmc2V0KHRibF9hZGQsIFRCTF9SU0RQKTsKLSAgICB0YmxfYWRkW1RCTF9SU0RQXS5zaXpl ID0gdGFibGVfc2l6ZTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQg YWNwaV94c2R0X21vZGlmeV9lbnRyeSh1NjQgZW50cnlbXSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZW50cnlfY291bnQsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpzaWduYXR1cmUsIHU2NCBh ZGRyKQotewotICAgIGludCBpOwotICAgIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGU7 Ci0gICAgdTY0IHNpemUgPSBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyKTsKLQotICAg IGZvciggaSA9IDA7IGkgPCBlbnRyeV9jb3VudDsgaSsrICkKLSAgICB7Ci0gICAgICAgIHRhYmxl ID0gYWNwaV9vc19tYXBfbWVtb3J5KGVudHJ5W2ldLCBzaXplKTsKLSAgICAgICAgaWYgKCBBQ1BJ X0NPTVBBUkVfTkFNRSh0YWJsZS0+c2lnbmF0dXJlLCBzaWduYXR1cmUpICkKLSAgICAgICAgewot ICAgICAgICAgICAgZW50cnlbaV0gPSBhZGRyOwotICAgICAgICAgICAgYWNwaV9vc191bm1hcF9t ZW1vcnkodGFibGUsIHNpemUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg ICAgYWNwaV9vc191bm1hcF9tZW1vcnkodGFibGUsIHNpemUpOwotICAgIH0KLX0KLQotc3RhdGlj IGludCBfX2luaXQgYWNwaV9jcmVhdGVfeHNkdChzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgbWVt YmFuayB0YmxfYWRkW10pCi17Ci0gICAgc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSA9 IE5VTEw7Ci0gICAgc3RydWN0IGFjcGlfdGFibGVfcnNkcCAqcnNkcF90Ymw7Ci0gICAgc3RydWN0 IGFjcGlfdGFibGVfeHNkdCAqeHNkdCA9IE5VTEw7Ci0gICAgdTY0IHRhYmxlX3NpemUsIGFkZHI7 Ci0gICAgdW5zaWduZWQgbG9uZyBlbnRyeV9jb3VudDsKLSAgICB1OCAqYmFzZV9wdHI7Ci0gICAg dTggY2hlY2tzdW07Ci0KLSAgICBhZGRyID0gYWNwaV9vc19nZXRfcm9vdF9wb2ludGVyKCk7Ci0g ICAgaWYgKCAhYWRkciApCi0gICAgewotICAgICAgICBwcmludGsoIlVuYWJsZSB0byBnZXQgYWNw aSByb290IHBvaW50ZXJcbiIpOwotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0gICAg cnNkcF90YmwgPSBhY3BpX29zX21hcF9tZW1vcnkoYWRkciwgc2l6ZW9mKHN0cnVjdCBhY3BpX3Rh YmxlX3JzZHApKTsKLSAgICB0YWJsZSA9IGFjcGlfb3NfbWFwX21lbW9yeShyc2RwX3RibC0+eHNk dF9waHlzaWNhbF9hZGRyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVv ZihzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIpKTsKLQotICAgIC8qIEFkZCBwbGFjZSBmb3IgU1RB TyB0YWJsZSBpbiBYU0RUIHRhYmxlICovCi0gICAgdGFibGVfc2l6ZSA9IHRhYmxlLT5sZW5ndGgg KyBzaXplb2YodTY0KTsKLSAgICBlbnRyeV9jb3VudCA9ICh0YWJsZS0+bGVuZ3RoIC0gc2l6ZW9m KHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcikpCi0gICAgICAgICAgICAgICAgICAvIHNpemVvZih1 NjQpOwotICAgIGJhc2VfcHRyID0gZC0+YXJjaC5lZmlfYWNwaV90YWJsZQotICAgICAgICAgICAg ICAgKyBhY3BpX2dldF90YWJsZV9vZmZzZXQodGJsX2FkZCwgVEJMX1hTRFQpOwotICAgIG1lbWNw eShiYXNlX3B0ciwgdGFibGUsIHRhYmxlLT5sZW5ndGgpOwotICAgIGFjcGlfb3NfdW5tYXBfbWVt b3J5KHRhYmxlLCBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyKSk7Ci0gICAgYWNwaV9v c191bm1hcF9tZW1vcnkocnNkcF90YmwsIHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9yc2RwKSk7 Ci0KLSAgICB4c2R0ID0gKHN0cnVjdCBhY3BpX3RhYmxlX3hzZHQgKiliYXNlX3B0cjsKLSAgICBh Y3BpX3hzZHRfbW9kaWZ5X2VudHJ5KHhzZHQtPnRhYmxlX29mZnNldF9lbnRyeSwgZW50cnlfY291 bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBBQ1BJX1NJR19GQURULCB0YmxfYWRkW1RC TF9GQURUXS5zdGFydCk7Ci0gICAgYWNwaV94c2R0X21vZGlmeV9lbnRyeSh4c2R0LT50YWJsZV9v ZmZzZXRfZW50cnksIGVudHJ5X2NvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNQ SV9TSUdfTUFEVCwgdGJsX2FkZFtUQkxfTUFEVF0uc3RhcnQpOwotICAgIHhzZHQtPnRhYmxlX29m ZnNldF9lbnRyeVtlbnRyeV9jb3VudF0gPSB0YmxfYWRkW1RCTF9TVEFPXS5zdGFydDsKLQotICAg IHhzZHQtPmhlYWRlci5sZW5ndGggPSB0YWJsZV9zaXplOwotICAgIGNoZWNrc3VtID0gYWNwaV90 Yl9jaGVja3N1bShBQ1BJX0NBU1RfUFRSKHU4LCB4c2R0KSwgdGFibGVfc2l6ZSk7Ci0gICAgeHNk dC0+aGVhZGVyLmNoZWNrc3VtIC09IGNoZWNrc3VtOwotCi0gICAgdGJsX2FkZFtUQkxfWFNEVF0u c3RhcnQgPSBkLT5hcmNoLmVmaV9hY3BpX2dwYQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKyBhY3BpX2dldF90YWJsZV9vZmZzZXQodGJsX2FkZCwgVEJMX1hTRFQpOwotICAgIHRibF9h ZGRbVEJMX1hTRFRdLnNpemUgPSB0YWJsZV9zaXplOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0 YXRpYyBpbnQgX19pbml0IGFjcGlfY3JlYXRlX3N0YW8oc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0 IG1lbWJhbmsgdGJsX2FkZFtdKQotewotICAgIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFi bGUgPSBOVUxMOwotICAgIHN0cnVjdCBhY3BpX3RhYmxlX3N0YW8gKnN0YW8gPSBOVUxMOwotICAg IHUzMiB0YWJsZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX3N0YW8pOwotICAgIHUz MiBvZmZzZXQgPSBhY3BpX2dldF90YWJsZV9vZmZzZXQodGJsX2FkZCwgVEJMX1NUQU8pOwotICAg IGFjcGlfc3RhdHVzIHN0YXR1czsKLSAgICB1OCAqYmFzZV9wdHIsIGNoZWNrc3VtOwotCi0gICAg LyogQ29weSBPRU0gYW5kIEFTTCBjb21waWxlciBmaWVsZHMgZnJvbSBhbm90aGVyIHRhYmxlLCB1 c2UgTUFEVCAqLwotICAgIHN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX01BRFQsIDAs ICZ0YWJsZSk7Ci0KLSAgICBpZiAoIEFDUElfRkFJTFVSRShzdGF0dXMpICkKLSAgICB7Ci0gICAg ICAgIGNvbnN0IGNoYXIgKm1zZyA9IGFjcGlfZm9ybWF0X2V4Y2VwdGlvbihzdGF0dXMpOwotCi0g ICAgICAgIHByaW50aygiU1RBTzogRmFpbGVkIHRvIGdldCBNQURUIHRhYmxlLCAlc1xuIiwgbXNn KTsKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgfQotCi0gICAgYmFzZV9wdHIgPSBkLT5h cmNoLmVmaV9hY3BpX3RhYmxlICsgb2Zmc2V0OwotICAgIG1lbWNweShiYXNlX3B0ciwgdGFibGUs IHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIpKTsKLQotICAgIHN0YW8gPSAoc3RydWN0 IGFjcGlfdGFibGVfc3RhbyAqKWJhc2VfcHRyOwotICAgIG1lbWNweShzdGFvLT5oZWFkZXIuc2ln bmF0dXJlLCBBQ1BJX1NJR19TVEFPLCA0KTsKLSAgICBzdGFvLT5oZWFkZXIucmV2aXNpb24gPSAx OwotICAgIHN0YW8tPmhlYWRlci5sZW5ndGggPSB0YWJsZV9zaXplOwotICAgIHN0YW8tPmlnbm9y ZV91YXJ0ID0gMTsKLSAgICBjaGVja3N1bSA9IGFjcGlfdGJfY2hlY2tzdW0oQUNQSV9DQVNUX1BU Uih1OCwgc3RhbyksIHRhYmxlX3NpemUpOwotICAgIHN0YW8tPmhlYWRlci5jaGVja3N1bSAtPSBj aGVja3N1bTsKLQotICAgIHRibF9hZGRbVEJMX1NUQU9dLnN0YXJ0ID0gZC0+YXJjaC5lZmlfYWNw aV9ncGEgKyBvZmZzZXQ7Ci0gICAgdGJsX2FkZFtUQkxfU1RBT10uc2l6ZSA9IHRhYmxlX3NpemU7 Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfX2luaXQgYWNwaV9jcmVhdGVfbWFk dChzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgbWVtYmFuayB0YmxfYWRkW10pCi17Ci0gICAgc3Ry dWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSA9IE5VTEw7Ci0gICAgc3RydWN0IGFjcGlfdGFi bGVfbWFkdCAqbWFkdCA9IE5VTEw7Ci0gICAgc3RydWN0IGFjcGlfc3VidGFibGVfaGVhZGVyICpo ZWFkZXI7Ci0gICAgc3RydWN0IGFjcGlfbWFkdF9nZW5lcmljX2Rpc3RyaWJ1dG9yICpnaWNkOwot ICAgIHUzMiB0YWJsZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX21hZHQpOwotICAg IHUzMiBvZmZzZXQgPSBhY3BpX2dldF90YWJsZV9vZmZzZXQodGJsX2FkZCwgVEJMX01BRFQpOwot ICAgIGludCByZXQ7Ci0gICAgYWNwaV9zdGF0dXMgc3RhdHVzOwotICAgIHU4ICpiYXNlX3B0ciwg Y2hlY2tzdW07Ci0KLSAgICBzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19NQURULCAw LCAmdGFibGUpOwotCi0gICAgaWYgKCBBQ1BJX0ZBSUxVUkUoc3RhdHVzKSApCi0gICAgewotICAg ICAgICBjb25zdCBjaGFyICptc2cgPSBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKTsKLQot ICAgICAgICBwcmludGsoIkZhaWxlZCB0byBnZXQgTUFEVCB0YWJsZSwgJXNcbiIsIG1zZyk7Ci0g ICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgIH0KLQotICAgIGJhc2VfcHRyID0gZC0+YXJjaC5l ZmlfYWNwaV90YWJsZSArIG9mZnNldDsKLSAgICBtZW1jcHkoYmFzZV9wdHIsIHRhYmxlLCB0YWJs ZV9zaXplKTsKLQotICAgIC8qIEFkZCBHZW5lcmljIERpc3RyaWJ1dG9yLiAqLwotICAgIGhlYWRl ciA9IGFjcGlfdGFibGVfZ2V0X2VudHJ5X21hZHQoQUNQSV9NQURUX1RZUEVfR0VORVJJQ19ESVNU UklCVVRPUiwgMCk7Ci0gICAgaWYgKCAhaGVhZGVyICkKLSAgICB7Ci0gICAgICAgIHByaW50aygi Q2FuJ3QgZ2V0IEdJQ0QgZW50cnlcbiIpOwotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICB9 Ci0gICAgZ2ljZCA9IGNvbnRhaW5lcl9vZihoZWFkZXIsIHN0cnVjdCBhY3BpX21hZHRfZ2VuZXJp Y19kaXN0cmlidXRvciwgaGVhZGVyKTsKLSAgICBtZW1jcHkoYmFzZV9wdHIgKyB0YWJsZV9zaXpl LCBnaWNkLAotICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgYWNwaV9tYWR0X2dlbmVyaWNf ZGlzdHJpYnV0b3IpKTsKLSAgICB0YWJsZV9zaXplICs9IHNpemVvZihzdHJ1Y3QgYWNwaV9tYWR0 X2dlbmVyaWNfZGlzdHJpYnV0b3IpOwotCi0gICAgLyogQWRkIG90aGVyIHN1YnRhYmxlcy4gKi8K LSAgICByZXQgPSBnaWNfbWFrZV9od2RvbV9tYWR0KGQsIG9mZnNldCArIHRhYmxlX3NpemUpOwot ICAgIGlmICggcmV0IDwgMCApCi0gICAgewotICAgICAgICBwcmludGsoIkZhaWxlZCB0byBnZXQg b3RoZXIgc3VidGFibGVzXG4iKTsKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgfQotICAg IHRhYmxlX3NpemUgKz0gcmV0OwotCi0gICAgbWFkdCA9IChzdHJ1Y3QgYWNwaV90YWJsZV9tYWR0 ICopYmFzZV9wdHI7Ci0gICAgbWFkdC0+aGVhZGVyLmxlbmd0aCA9IHRhYmxlX3NpemU7Ci0gICAg Y2hlY2tzdW0gPSBhY3BpX3RiX2NoZWNrc3VtKEFDUElfQ0FTVF9QVFIodTgsIG1hZHQpLCB0YWJs ZV9zaXplKTsKLSAgICBtYWR0LT5oZWFkZXIuY2hlY2tzdW0gLT0gY2hlY2tzdW07Ci0KLSAgICB0 YmxfYWRkW1RCTF9NQURUXS5zdGFydCA9IGQtPmFyY2guZWZpX2FjcGlfZ3BhICsgb2Zmc2V0Owot ICAgIHRibF9hZGRbVEJMX01BRFRdLnNpemUgPSB0YWJsZV9zaXplOwotCi0gICAgcmV0dXJuIDA7 Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGFjcGlfY3JlYXRlX2ZhZHQoc3RydWN0IGRvbWFpbiAq ZCwgc3RydWN0IG1lbWJhbmsgdGJsX2FkZFtdKQotewotICAgIHN0cnVjdCBhY3BpX3RhYmxlX2hl YWRlciAqdGFibGUgPSBOVUxMOwotICAgIHN0cnVjdCBhY3BpX3RhYmxlX2ZhZHQgKmZhZHQgPSBO VUxMOwotICAgIHU2NCB0YWJsZV9zaXplOwotICAgIGFjcGlfc3RhdHVzIHN0YXR1czsKLSAgICB1 OCAqYmFzZV9wdHI7Ci0gICAgdTggY2hlY2tzdW07Ci0KLSAgICBzdGF0dXMgPSBhY3BpX2dldF90 YWJsZShBQ1BJX1NJR19GQURULCAwLCAmdGFibGUpOwotCi0gICAgaWYgKCBBQ1BJX0ZBSUxVUkUo c3RhdHVzKSApCi0gICAgewotICAgICAgICBjb25zdCBjaGFyICptc2cgPSBhY3BpX2Zvcm1hdF9l eGNlcHRpb24oc3RhdHVzKTsKLQotICAgICAgICBwcmludGsoIkZhaWxlZCB0byBnZXQgRkFEVCB0 YWJsZSwgJXNcbiIsIG1zZyk7Ci0gICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgIH0KLQotICAg IHRhYmxlX3NpemUgPSB0YWJsZS0+bGVuZ3RoOwotICAgIGJhc2VfcHRyID0gZC0+YXJjaC5lZmlf YWNwaV90YWJsZQotICAgICAgICAgICAgICAgKyBhY3BpX2dldF90YWJsZV9vZmZzZXQodGJsX2Fk ZCwgVEJMX0ZBRFQpOwotICAgIG1lbWNweShiYXNlX3B0ciwgdGFibGUsIHRhYmxlX3NpemUpOwot ICAgIGZhZHQgPSAoc3RydWN0IGFjcGlfdGFibGVfZmFkdCAqKWJhc2VfcHRyOwotCi0gICAgLyog U2V0IFBTQ0lfQ09NUExJQU5UIGFuZCBQU0NJX1VTRV9IVkMgKi8KLSAgICBmYWR0LT5hcm1fYm9v dF9mbGFncyB8PSAoQUNQSV9GQURUX1BTQ0lfQ09NUExJQU5UIHwgQUNQSV9GQURUX1BTQ0lfVVNF X0hWQyk7Ci0gICAgY2hlY2tzdW0gPSBhY3BpX3RiX2NoZWNrc3VtKEFDUElfQ0FTVF9QVFIodTgs IGZhZHQpLCB0YWJsZV9zaXplKTsKLSAgICBmYWR0LT5oZWFkZXIuY2hlY2tzdW0gLT0gY2hlY2tz dW07Ci0KLSAgICB0YmxfYWRkW1RCTF9GQURUXS5zdGFydCA9IGQtPmFyY2guZWZpX2FjcGlfZ3Bh Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGFjcGlfZ2V0X3RhYmxlX29mZnNldCh0 YmxfYWRkLCBUQkxfRkFEVCk7Ci0gICAgdGJsX2FkZFtUQkxfRkFEVF0uc2l6ZSA9IHRhYmxlX3Np emU7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfX2luaXQgZXN0aW1hdGVfYWNw aV9lZmlfc2l6ZShzdHJ1Y3QgZG9tYWluICpkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3Qga2VybmVsX2luZm8gKmtpbmZvKQotewotICAgIHNpemVfdCBl Zmlfc2l6ZSwgYWNwaV9zaXplLCBtYWR0X3NpemU7Ci0gICAgdTY0IGFkZHI7Ci0gICAgc3RydWN0 IGFjcGlfdGFibGVfcnNkcCAqcnNkcF90Ymw7Ci0gICAgc3RydWN0IGFjcGlfdGFibGVfaGVhZGVy ICp0YWJsZTsKLQotICAgIGVmaV9zaXplID0gZXN0aW1hdGVfZWZpX3NpemUoa2luZm8tPm1lbS5u cl9iYW5rcyk7Ci0KLSAgICBhY3BpX3NpemUgPSBST1VORFVQKHNpemVvZihzdHJ1Y3QgYWNwaV90 YWJsZV9mYWR0KSwgOCk7Ci0gICAgYWNwaV9zaXplICs9IFJPVU5EVVAoc2l6ZW9mKHN0cnVjdCBh Y3BpX3RhYmxlX3N0YW8pLCA4KTsKLQotICAgIG1hZHRfc2l6ZSA9IGdpY19nZXRfaHdkb21fbWFk dF9zaXplKGQpOwotICAgIGFjcGlfc2l6ZSArPSBST1VORFVQKG1hZHRfc2l6ZSwgOCk7Ci0KLSAg ICBhZGRyID0gYWNwaV9vc19nZXRfcm9vdF9wb2ludGVyKCk7Ci0gICAgaWYgKCAhYWRkciApCi0g ICAgewotICAgICAgICBwcmludGsoIlVuYWJsZSB0byBnZXQgYWNwaSByb290IHBvaW50ZXJcbiIp OwotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0KLSAgICByc2RwX3RibCA9IGFjcGlf b3NfbWFwX21lbW9yeShhZGRyLCBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfcnNkcCkpOwotICAg IGlmICggIXJzZHBfdGJsICkKLSAgICB7Ci0gICAgICAgIHByaW50aygiVW5hYmxlIHRvIG1hcCBS U0RQIHRhYmxlXG4iKTsKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgfQotCi0gICAgdGFi bGUgPSBhY3BpX29zX21hcF9tZW1vcnkocnNkcF90YmwtPnhzZHRfcGh5c2ljYWxfYWRkcmVzcywK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVf aGVhZGVyKSk7Ci0gICAgYWNwaV9vc191bm1hcF9tZW1vcnkocnNkcF90YmwsIHNpemVvZihzdHJ1 Y3QgYWNwaV90YWJsZV9yc2RwKSk7Ci0gICAgaWYgKCAhdGFibGUgKQotICAgIHsKLSAgICAgICAg cHJpbnRrKCJVbmFibGUgdG8gbWFwIFhTRFQgdGFibGVcbiIpOwotICAgICAgICByZXR1cm4gLUVJ TlZBTDsKLSAgICB9Ci0KLSAgICAvKiBBZGQgcGxhY2UgZm9yIFNUQU8gdGFibGUgaW4gWFNEVCB0 YWJsZSAqLwotICAgIGFjcGlfc2l6ZSArPSBST1VORFVQKHRhYmxlLT5sZW5ndGggKyBzaXplb2Yo dTY0KSwgOCk7Ci0gICAgYWNwaV9vc191bm1hcF9tZW1vcnkodGFibGUsIHNpemVvZihzdHJ1Y3Qg YWNwaV90YWJsZV9oZWFkZXIpKTsKLQotICAgIGFjcGlfc2l6ZSArPSBST1VORFVQKHNpemVvZihz dHJ1Y3QgYWNwaV90YWJsZV9yc2RwKSwgOCk7Ci0gICAgZC0+YXJjaC5lZmlfYWNwaV9sZW4gPSBQ QUdFX0FMSUdOKFJPVU5EVVAoZWZpX3NpemUsIDgpCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICsgUk9VTkRVUChhY3BpX3NpemUsIDgpKTsKLQotICAgIHJldHVybiAwOwot fQotCi1zdGF0aWMgaW50IF9faW5pdCBwcmVwYXJlX2FjcGkoc3RydWN0IGRvbWFpbiAqZCwgc3Ry dWN0IGtlcm5lbF9pbmZvICpraW5mbykKLXsKLSAgICBpbnQgcmMgPSAwOwotICAgIGludCBvcmRl cjsKLSAgICBzdHJ1Y3QgbWVtYmFuayB0YmxfYWRkW1RCTF9NTUFYXSA9IHt9OwotCi0gICAgcmMg PSBlc3RpbWF0ZV9hY3BpX2VmaV9zaXplKGQsIGtpbmZvKTsKLSAgICBpZiAoIHJjICE9IDAgKQot ICAgICAgICByZXR1cm4gcmM7Ci0KLSAgICBvcmRlciA9IGdldF9vcmRlcl9mcm9tX2J5dGVzKGQt PmFyY2guZWZpX2FjcGlfbGVuKTsKLSAgICBkLT5hcmNoLmVmaV9hY3BpX3RhYmxlID0gYWxsb2Nf eGVuaGVhcF9wYWdlcyhvcmRlciwgMCk7Ci0gICAgaWYgKCBkLT5hcmNoLmVmaV9hY3BpX3RhYmxl ID09IE5VTEwgKQotICAgIHsKLSAgICAgICAgcHJpbnRrKCJ1bmFibGUgdG8gYWxsb2NhdGUgbWVt b3J5IVxuIik7Ci0gICAgICAgIHJldHVybiAtRU5PTUVNOwotICAgIH0KLSAgICBtZW1zZXQoZC0+ YXJjaC5lZmlfYWNwaV90YWJsZSwgMCwgZC0+YXJjaC5lZmlfYWNwaV9sZW4pOwotCi0gICAgLyoK LSAgICAgKiBGb3IgQUNQSSwgRG9tMCBkb2Vzbid0IHVzZSBraW5mby0+Z250dGFiX3N0YXJ0IHRv IGdldCB0aGUgZ3JhbnQgdGFibGUKLSAgICAgKiByZWdpb24uIFNvIHdlIHVzZSBpdCBhcyB0aGUg QUNQSSB0YWJsZSBtYXBwZWQgYWRkcmVzcy4gQWxzbyBpdCBuZWVkcyB0bwotICAgICAqIGNoZWNr IGlmIHRoZSBzaXplIG9mIGdyYW50IHRhYmxlIHJlZ2lvbiBpcyBlbm91Z2ggZm9yIHRob3NlIEFD UEkgdGFibGVzLgotICAgICAqLwotICAgIGQtPmFyY2guZWZpX2FjcGlfZ3BhID0ga2luZm8tPmdu dHRhYl9zdGFydDsKLSAgICBpZiAoIGtpbmZvLT5nbnR0YWJfc2l6ZSA8IGQtPmFyY2guZWZpX2Fj cGlfbGVuICkKLSAgICB7Ci0gICAgICAgIHByaW50aygiVGhlIGdyYW50IHRhYmxlIHJlZ2lvbiBp cyBub3QgZW5vdWdoIHRvIGZpdCB0aGUgQUNQSSB0YWJsZXMhXG4iKTsKLSAgICAgICAgcmV0dXJu IC1FSU5WQUw7Ci0gICAgfQotCi0gICAgcmMgPSBhY3BpX2NyZWF0ZV9mYWR0KGQsIHRibF9hZGQp OwotICAgIGlmICggcmMgIT0gMCApCi0gICAgICAgIHJldHVybiByYzsKLQotICAgIHJjID0gYWNw aV9jcmVhdGVfbWFkdChkLCB0YmxfYWRkKTsKLSAgICBpZiAoIHJjICE9IDAgKQotICAgICAgICBy ZXR1cm4gcmM7Ci0KLSAgICByYyA9IGFjcGlfY3JlYXRlX3N0YW8oZCwgdGJsX2FkZCk7Ci0gICAg aWYgKCByYyAhPSAwICkKLSAgICAgICAgcmV0dXJuIHJjOwotCi0gICAgcmMgPSBhY3BpX2NyZWF0 ZV94c2R0KGQsIHRibF9hZGQpOwotICAgIGlmICggcmMgIT0gMCApCi0gICAgICAgIHJldHVybiBy YzsKLQotICAgIHJjID0gYWNwaV9jcmVhdGVfcnNkcChkLCB0YmxfYWRkKTsKLSAgICBpZiAoIHJj ICE9IDAgKQotICAgICAgICByZXR1cm4gcmM7Ci0KLSAgICBhY3BpX21hcF9vdGhlcl90YWJsZXMo ZCk7Ci0gICAgYWNwaV9jcmVhdGVfZWZpX3N5c3RlbV90YWJsZShkLCB0YmxfYWRkKTsKLSAgICBh Y3BpX2NyZWF0ZV9lZmlfbW1hcF90YWJsZShkLCAma2luZm8tPm1lbSwgdGJsX2FkZCk7Ci0KLSAg ICAvKiBNYXAgdGhlIEVGSSBhbmQgQUNQSSB0YWJsZXMgdG8gRG9tMCAqLwotICAgIHJjID0gbWFw X3JlZ2lvbnNfcDJtdChkLAotICAgICAgICAgICAgICAgICAgICAgICAgICBnYWRkcl90b19nZm4o ZC0+YXJjaC5lZmlfYWNwaV9ncGEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBQRk5fVVAo ZC0+YXJjaC5lZmlfYWNwaV9sZW4pLAotICAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0X3Rv X21mbihkLT5hcmNoLmVmaV9hY3BpX3RhYmxlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg cDJtX21taW9fZGlyZWN0X2MpOwotICAgIGlmICggcmMgIT0gMCApCi0gICAgewotICAgICAgICBw cmludGsoWEVOTE9HX0VSUiAiVW5hYmxlIHRvIG1hcCBFRkkvQUNQSSB0YWJsZSAweCUiUFJJeDY0 Ci0gICAgICAgICAgICAgICAiIC0gMHglIlBSSXg2NCIgaW4gZG9tYWluICVkXG4iLAotICAgICAg ICAgICAgICAgZC0+YXJjaC5lZmlfYWNwaV9ncGEgJiBQQUdFX01BU0ssCi0gICAgICAgICAgICAg ICBQQUdFX0FMSUdOKGQtPmFyY2guZWZpX2FjcGlfZ3BhICsgZC0+YXJjaC5lZmlfYWNwaV9sZW4p IC0gMSwKLSAgICAgICAgICAgICAgIGQtPmRvbWFpbl9pZCk7Ci0gICAgICAgIHJldHVybiByYzsK LSAgICB9Ci0KLSAgICAvKgotICAgICAqIEZsdXNoIHRoZSBjYWNoZSBmb3IgdGhpcyByZWdpb24s IG90aGVyd2lzZSBET00wIG1heSByZWFkIHdyb25nIGRhdGEgd2hlbgotICAgICAqIHRoZSBjYWNo ZSBpcyBkaXNhYmxlZC4KLSAgICAgKi8KLSAgICBjbGVhbl9hbmRfaW52YWxpZGF0ZV9kY2FjaGVf dmFfcmFuZ2UoZC0+YXJjaC5lZmlfYWNwaV90YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZC0+YXJjaC5lZmlfYWNwaV9sZW4pOwotCi0gICAgcmMgPSBjcmVh dGVfYWNwaV9kdGIoa2luZm8sIHRibF9hZGQpOwotICAgIGlmICggcmMgIT0gMCApCi0gICAgICAg IHJldHVybiByYzsKLQotICAgIHJjID0gYWNwaV9yb3V0ZV9zcGlzKGQpOwotICAgIGlmICggcmMg IT0gMCApCi0gICAgICAgIHJldHVybiByYzsKLQotICAgIHJjID0gYWNwaV9pb21lbV9kZW55X2Fj Y2VzcyhkKTsKLSAgICBpZiAoIHJjICE9IDAgKQotICAgICAgICByZXR1cm4gcmM7Ci0KLSAgICAv KgotICAgICAqIEFsbCBQUElzIGhhdmUgYmVlbiByZWdpc3RlcmVkLCBhbGxvY2F0ZSB0aGUgZXZl bnQgY2hhbm5lbAotICAgICAqIGludGVycnVwdHMuCi0gICAgICovCi0gICAgZXZ0Y2huX2FsbG9j YXRlKGQpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0jZWxzZQotc3RhdGljIGludCBfX2luaXQgcHJl cGFyZV9hY3BpKHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCBrZXJuZWxfaW5mbyAqa2luZm8pCi17 Ci0gICAgLyogT25seSBib290aW5nIHdpdGggQUNQSSB3aWxsIGhpdCBoZXJlICovCi0gICAgQlVH KCk7Ci0gICAgcmV0dXJuIC1FSU5WQUw7Ci19Ci0jZW5kaWYKIHN0YXRpYyB2b2lkIF9faW5pdCBk dGJfbG9hZChzdHJ1Y3Qga2VybmVsX2luZm8gKmtpbmZvKQogewogICAgIHVuc2lnbmVkIGxvbmcg bGVmdDsKQEAgLTI0NDYsNyArMTg3MSw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBpbml0cmRfbG9h ZChzdHJ1Y3Qga2VybmVsX2luZm8gKmtpbmZvKQogICogTm90ZSB0aGF0IHRoaXMgc2hvdWxkIG9u bHkgYmUgY2FsbGVkIG9uY2UgYWxsIFBQSXMgdXNlZCBieSB0aGUKICAqIGhhcmR3YXJlIGRvbWFp biBoYXZlIGJlZW4gcmVnaXN0ZXJlZC4KICAqLwotc3RhdGljIHZvaWQgX19pbml0IGV2dGNobl9h bGxvY2F0ZShzdHJ1Y3QgZG9tYWluICpkKQordm9pZCBfX2luaXQgZXZ0Y2huX2FsbG9jYXRlKHN0 cnVjdCBkb21haW4gKmQpCiB7CiAgICAgaW50IHJlczsKICAgICB1NjQgdmFsOwotLSAKMS45LjEK CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2 ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xp c3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs