From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: [PATCH v2 21/21] xen/arm: split domain_build.c Date: Fri, 6 Jul 2018 16:12:16 -0700 Message-ID: <1530918736-13965-21-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 ICAgfCAgIDEgKwogeGVuL2FyY2gvYXJtL2FjcGkvYWNwaV9kdF9idWlsZC5jIHwgNTg4ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB4ZW4vYXJjaC9hcm0vYWNwaS9hY3Bp X2R0X2J1aWxkLmggfCAgMzIgKysrCiB4ZW4vYXJjaC9hcm0vZG9tYWluX2J1aWxkLmMgICAgICAg fCA1ODIgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogNCBmaWxlcyBjaGFu Z2VkLCA2MjYgaW5zZXJ0aW9ucygrKSwgNTc3IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAw NjQ0IHhlbi9hcmNoL2FybS9hY3BpL2FjcGlfZHRfYnVpbGQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IHhlbi9hcmNoL2FybS9hY3BpL2FjcGlfZHRfYnVpbGQuaAoKZGlmZiAtLWdpdCBhL3hlbi9hcmNo L2FybS9hY3BpL01ha2VmaWxlIGIveGVuL2FyY2gvYXJtL2FjcGkvTWFrZWZpbGUKaW5kZXggMjM5 NjNmOC4uYWMwODA0YiAxMDA2NDQKLS0tIGEveGVuL2FyY2gvYXJtL2FjcGkvTWFrZWZpbGUKKysr IGIveGVuL2FyY2gvYXJtL2FjcGkvTWFrZWZpbGUKQEAgLTEsMiArMSwzIEBACiBvYmoteSArPSBs aWIubworb2JqLXkgKz0gYWNwaV9kdF9idWlsZC5vCiBvYmoteSArPSBib290LmluaXQubwpkaWZm IC0tZ2l0IGEveGVuL2FyY2gvYXJtL2FjcGkvYWNwaV9kdF9idWlsZC5jIGIveGVuL2FyY2gvYXJt L2FjcGkvYWNwaV9kdF9idWlsZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjE5ZjcwYTEKLS0tIC9kZXYvbnVsbAorKysgYi94ZW4vYXJjaC9hcm0vYWNwaS9hY3BpX2R0X2J1 aWxkLmMKQEAgLTAsMCArMSw1ODggQEAKKyNpbmNsdWRlIDx4ZW4vbW0uaD4KKyNpbmNsdWRlIDx4 ZW4vc2NoZWQuaD4KKyNpbmNsdWRlIDx4ZW4vYWNwaS5oPgorI2luY2x1ZGUgPHhlbi9ldmVudC5o PgorI2luY2x1ZGUgPHhlbi9pb2NhcC5oPgorI2luY2x1ZGUgPHhlbi9kZXZpY2VfdHJlZS5oPgor I2luY2x1ZGUgPHhlbi9saWJmZHQvbGliZmR0Lmg+CisjaW5jbHVkZSA8eGVuL2lycS5oPgorI2lu Y2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhY3BpL2FjdGFibGVzLmg+CisjaW5jbHVkZSAi YWNwaV9kdF9idWlsZC5oIgorI2luY2x1ZGUgIi4uL2tlcm5lbC5oIgorCisvKiBPdmVycmlkZSBt YWNyb3MgZnJvbSBhc20vcGFnZS5oIHRvIG1ha2UgdGhlbSB3b3JrIHdpdGggbWZuX3QgKi8KKyN1 bmRlZiB2aXJ0X3RvX21mbgorI2RlZmluZSB2aXJ0X3RvX21mbih2YSkgX21mbihfX3ZpcnRfdG9f bWZuKHZhKSkKKworI2RlZmluZSBBQ1BJX0RPTTBfRkRUX01JTl9TSVpFIDQwOTYKKworc3RhdGlj IGludCBhY3BpX2lvbWVtX2RlbnlfYWNjZXNzKHN0cnVjdCBkb21haW4gKmQpCit7CisgICAgYWNw aV9zdGF0dXMgc3RhdHVzOworICAgIHN0cnVjdCBhY3BpX3RhYmxlX3NwY3IgKnNwY3IgPSBOVUxM OworICAgIHVuc2lnbmVkIGxvbmcgbWZuOworICAgIGludCByYzsKKworICAgIC8qIEZpcnN0bHkg cGVybWl0IGZ1bGwgTU1JTyBjYXBhYmlsaXRpZXMuICovCisgICAgcmMgPSBpb21lbV9wZXJtaXRf YWNjZXNzKGQsIDBVTCwgfjBVTCk7CisgICAgaWYgKCByYyApCisgICAgICAgIHJldHVybiByYzsK KworICAgIC8qIFRPRE86IERlbnkgTU1JTyBhY2Nlc3MgZm9yIFNNTVUsIEdJQyBJVFMgKi8KKyAg ICBzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19TUENSLCAwLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiopJnNwY3IpOworCisg ICAgaWYgKCBBQ1BJX0ZBSUxVUkUoc3RhdHVzKSApCisgICAgeworICAgICAgICBwcmludGsoIkZh aWxlZCB0byBnZXQgU1BDUiB0YWJsZVxuIik7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAg IH0KKworICAgIG1mbiA9IHNwY3ItPnNlcmlhbF9wb3J0LmFkZHJlc3MgPj4gUEFHRV9TSElGVDsK KyAgICAvKiBEZW55IE1NSU8gYWNjZXNzIGZvciBVQVJUICovCisgICAgcmMgPSBpb21lbV9kZW55 X2FjY2VzcyhkLCBtZm4sIG1mbiArIDEpOworICAgIGlmICggcmMgKQorICAgICAgICByZXR1cm4g cmM7CisKKyAgICAvKiBEZW55IE1NSU8gYWNjZXNzIGZvciBHSUMgcmVnaW9ucyAqLworICAgIHJl dHVybiBnaWNfaW9tZW1fZGVueV9hY2Nlc3MoZCk7Cit9CisKK3N0YXRpYyBpbnQgYWNwaV9yb3V0 ZV9zcGlzKHN0cnVjdCBkb21haW4gKmQpCit7CisgICAgaW50IGksIHJlczsKKyAgICBzdHJ1Y3Qg aXJxX2Rlc2MgKmRlc2M7CisKKyAgICAvKgorICAgICAqIFJvdXRlIHRoZSBJUlEgdG8gaGFyZHdh cmUgZG9tYWluIGFuZCBwZXJtaXQgdGhlIGFjY2Vzcy4KKyAgICAgKiBUaGUgaW50ZXJydXB0IHR5 cGUgd2lsbCBiZSBzZXQgYnkgc2V0IGJ5IHRoZSBoYXJkd2FyZSBkb21haW4uCisgICAgICovCisg ICAgZm9yKCBpID0gTlJfTE9DQUxfSVJRUzsgaSA8IHZnaWNfbnVtX2lycXMoZCk7IGkrKyApCisg ICAgeworICAgICAgICAvKgorICAgICAgICAgKiBUT0RPOiBFeGNsdWRlIHRoZSBTUElzIFNNTVUg dXNlcyB3aGljaCBzaG91bGQgbm90IGJlIHJvdXRlZCB0bworICAgICAgICAgKiB0aGUgaGFyZHdh cmUgZG9tYWluLgorICAgICAgICAgKi8KKyAgICAgICAgZGVzYyA9IGlycV90b19kZXNjKGkpOwor ICAgICAgICBpZiAoIGRlc2MtPmFjdGlvbiAhPSBOVUxMKQorICAgICAgICAgICAgY29udGludWU7 CisKKyAgICAgICAgLyogWFhYOiBTaGFsbCB3ZSB1c2UgYSBwcm9wZXIgZGV2bmFtZT8gKi8KKyAg ICAgICAgcmVzID0gbWFwX2lycV90b19kb21haW4oZCwgaSwgdHJ1ZSwgIkFDUEkiKTsKKyAgICAg ICAgaWYgKCByZXMgKQorICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisKKyAgICByZXR1 cm4gMDsKK30KKworc3RhdGljIGludCBhY3BpX21ha2VfaHlwZXJ2aXNvcl9ub2RlKGNvbnN0IHN0 cnVjdCBrZXJuZWxfaW5mbyAqa2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IG1lbWJhbmsgdGJsX2FkZFtdKQoreworICAgIGNvbnN0IGNoYXIgY29tcGF0 W10gPQorICAgICAgICAieGVuLHhlbi0iX19zdHJpbmdpZnkoWEVOX1ZFUlNJT04pIi4iX19zdHJp bmdpZnkoWEVOX1NVQlZFUlNJT04pIlwwIgorICAgICAgICAieGVuLHhlbiI7CisgICAgaW50IHJl czsKKyAgICAvKiBDb252ZW5pZW5jZSBhbGlhcyAqLworICAgIHZvaWQgKmZkdCA9IGtpbmZvLT5m ZHQ7CisKKyAgICBkdF9kcHJpbnRrKCJDcmVhdGUgaHlwZXJ2aXNvciBub2RlXG4iKTsKKworICAg IC8qIFNlZSBsaW51eCBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL3hlbi50 eHQgKi8KKyAgICByZXMgPSBmZHRfYmVnaW5fbm9kZShmZHQsICJoeXBlcnZpc29yIik7CisgICAg aWYgKCByZXMgKQorICAgICAgICByZXR1cm4gcmVzOworCisgICAgLyogQ2Fubm90IHVzZSBmZHRf cHJvcGVydHlfc3RyaW5nIGR1ZSB0byBlbWJlZGRlZCBudWxscyAqLworICAgIHJlcyA9IGZkdF9w cm9wZXJ0eShmZHQsICJjb21wYXRpYmxlIiwgY29tcGF0LCBzaXplb2YoY29tcGF0KSk7CisgICAg aWYgKCByZXMgKQorICAgICAgICByZXR1cm4gcmVzOworCisgICAgcmVzID0gYWNwaV9tYWtlX2Vm aV9ub2RlcyhmZHQsIHRibF9hZGQpOworICAgIGlmICggcmVzICkKKyAgICAgICAgcmV0dXJuIHJl czsKKworICAgIHJlcyA9IGZkdF9lbmRfbm9kZShmZHQpOworCisgICAgcmV0dXJuIHJlczsKK30K KworLyoKKyAqIFByZXBhcmUgYSBtaW5pbWFsIERUQiBmb3IgRG9tMCB3aGljaCBjb250YWlucyBi b290YXJncywgaW5pdHJkLCBtZW1vcnkKKyAqIGluZm9ybWF0aW9uLCBFRkkgdGFibGUuCisgKi8K K3N0YXRpYyBpbnQgY3JlYXRlX2FjcGlfZHRiKHN0cnVjdCBrZXJuZWxfaW5mbyAqa2luZm8sIHN0 cnVjdCBtZW1iYW5rIHRibF9hZGRbXSkKK3sKKyAgICBpbnQgbmV3X3NpemU7CisgICAgaW50IHJl dDsKKworICAgIGR0X2RwcmludGsoIlByZXBhcmUgYSBtaW4gRFRCIGZvciBET00wXG4iKTsKKwor ICAgIC8qIEFsbG9jYXRlIG1pbiBzaXplIGZvciBEVCAqLworICAgIG5ld19zaXplID0gQUNQSV9E T00wX0ZEVF9NSU5fU0laRTsKKyAgICBraW5mby0+ZmR0ID0geG1hbGxvY19ieXRlcyhuZXdfc2l6 ZSk7CisKKyAgICBpZiAoIGtpbmZvLT5mZHQgPT0gTlVMTCApCisgICAgICAgIHJldHVybiAtRU5P TUVNOworCisgICAgLyogQ3JlYXRlIGEgbmV3IGVtcHR5IERUIGZvciBET00wICovCisgICAgcmV0 ID0gZmR0X2NyZWF0ZShraW5mby0+ZmR0LCBuZXdfc2l6ZSk7CisgICAgaWYgKCByZXQgPCAwICkK KyAgICAgICAgZ290byBlcnI7CisKKyAgICByZXQgPSBmZHRfZmluaXNoX3Jlc2VydmVtYXAoa2lu Zm8tPmZkdCk7CisgICAgaWYgKCByZXQgPCAwICkKKyAgICAgICAgZ290byBlcnI7CisKKyAgICBy ZXQgPSBmZHRfYmVnaW5fbm9kZShraW5mby0+ZmR0LCAiLyIpOworICAgIGlmICggcmV0IDwgMCAp CisgICAgICAgIGdvdG8gZXJyOworCisgICAgcmV0ID0gZmR0X3Byb3BlcnR5X2NlbGwoa2luZm8t PmZkdCwgIiNhZGRyZXNzLWNlbGxzIiwgMik7CisgICAgaWYgKCByZXQgKQorICAgICAgICByZXR1 cm4gcmV0OworCisgICAgcmV0ID0gZmR0X3Byb3BlcnR5X2NlbGwoa2luZm8tPmZkdCwgIiNzaXpl LWNlbGxzIiwgMSk7CisgICAgaWYgKCByZXQgKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAg LyogQ3JlYXRlIGEgY2hvc2VuIG5vZGUgZm9yIERPTTAgKi8KKyAgICByZXQgPSBtYWtlX2Nob3Nl bl9ub2RlKGtpbmZvKTsKKyAgICBpZiAoIHJldCApCisgICAgICAgIGdvdG8gZXJyOworCisgICAg cmV0ID0gYWNwaV9tYWtlX2h5cGVydmlzb3Jfbm9kZShraW5mbywgdGJsX2FkZCk7CisgICAgaWYg KCByZXQgKQorICAgICAgICBnb3RvIGVycjsKKworICAgIHJldCA9IGZkdF9lbmRfbm9kZShraW5m by0+ZmR0KTsKKyAgICBpZiAoIHJldCA8IDAgKQorICAgICAgICBnb3RvIGVycjsKKworICAgIHJl dCA9IGZkdF9maW5pc2goa2luZm8tPmZkdCk7CisgICAgaWYgKCByZXQgPCAwICkKKyAgICAgICAg Z290byBlcnI7CisKKyAgICByZXR1cm4gMDsKKworICBlcnI6CisgICAgcHJpbnRrKCJEZXZpY2Ug dHJlZSBnZW5lcmF0aW9uIGZhaWxlZCAoJWQpLlxuIiwgcmV0KTsKKyAgICB4ZnJlZShraW5mby0+ ZmR0KTsKKyAgICByZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHZvaWQgYWNwaV9tYXBfb3Ro ZXJfdGFibGVzKHN0cnVjdCBkb21haW4gKmQpCit7CisgICAgaW50IGk7CisgICAgdW5zaWduZWQg bG9uZyByZXM7CisgICAgdTY0IGFkZHIsIHNpemU7CisKKyAgICAvKiBNYXAgYWxsIEFDUEkgdGFi bGVzIHRvIERvbTAgdXNpbmcgMToxIG1hcHBpbmdzLiAqLworICAgIGZvciggaSA9IDA7IGkgPCBh Y3BpX2dibF9yb290X3RhYmxlX2xpc3QuY291bnQ7IGkrKyApCisgICAgeworICAgICAgICBhZGRy ID0gYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1tpXS5hZGRyZXNzOworICAgICAgICBz aXplID0gYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1tpXS5sZW5ndGg7CisgICAgICAg IHJlcyA9IG1hcF9yZWdpb25zX3AybXQoZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBnYWRkcl90b19nZm4oYWRkciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEZO X1VQKHNpemUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hZGRyX3RvX21mbihh ZGRyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMm1fbW1pb19kaXJlY3RfYyk7 CisgICAgICAgIGlmICggcmVzICkKKyAgICAgICAgeworICAgICAgICAgICAgIHBhbmljKFhFTkxP R19FUlIgIlVuYWJsZSB0byBtYXAgQUNQSSByZWdpb24gMHglIlBSSXg2NAorICAgICAgICAgICAg ICAgICAgICIgLSAweCUiUFJJeDY0IiBpbiBkb21haW4gXG4iLAorICAgICAgICAgICAgICAgICAg IGFkZHIgJiBQQUdFX01BU0ssIFBBR0VfQUxJR04oYWRkciArIHNpemUpIC0gMSk7CisgICAgICAg IH0KKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgYWNwaV9jcmVhdGVfcnNkcChzdHJ1Y3QgZG9tYWlu ICpkLCBzdHJ1Y3QgbWVtYmFuayB0YmxfYWRkW10pCit7CisKKyAgICBzdHJ1Y3QgYWNwaV90YWJs ZV9yc2RwICpyc2RwID0gTlVMTDsKKyAgICB1NjQgYWRkcjsKKyAgICB1NjQgdGFibGVfc2l6ZSA9 IHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9yc2RwKTsKKyAgICB1OCAqYmFzZV9wdHI7CisgICAg dTggY2hlY2tzdW07CisKKyAgICBhZGRyID0gYWNwaV9vc19nZXRfcm9vdF9wb2ludGVyKCk7Cisg ICAgaWYgKCAhYWRkciAgKQorICAgIHsKKyAgICAgICAgcHJpbnRrKCJVbmFibGUgdG8gZ2V0IGFj cGkgcm9vdCBwb2ludGVyXG4iKTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorICAg IHJzZHAgPSBhY3BpX29zX21hcF9tZW1vcnkoYWRkciwgdGFibGVfc2l6ZSk7CisgICAgYmFzZV9w dHIgPSBkLT5hcmNoLmVmaV9hY3BpX3RhYmxlCisgICAgICAgICAgICAgICArIGFjcGlfZ2V0X3Rh YmxlX29mZnNldCh0YmxfYWRkLCBUQkxfUlNEUCk7CisgICAgbWVtY3B5KGJhc2VfcHRyLCByc2Rw LCB0YWJsZV9zaXplKTsKKyAgICBhY3BpX29zX3VubWFwX21lbW9yeShyc2RwLCB0YWJsZV9zaXpl KTsKKworICAgIHJzZHAgPSAoc3RydWN0IGFjcGlfdGFibGVfcnNkcCAqKWJhc2VfcHRyOworICAg IC8qIFJlcGxhY2UgeHNkdF9waHlzaWNhbF9hZGRyZXNzICovCisgICAgcnNkcC0+eHNkdF9waHlz aWNhbF9hZGRyZXNzID0gdGJsX2FkZFtUQkxfWFNEVF0uc3RhcnQ7CisgICAgY2hlY2tzdW0gPSBh Y3BpX3RiX2NoZWNrc3VtKEFDUElfQ0FTVF9QVFIodTgsIHJzZHApLCB0YWJsZV9zaXplKTsKKyAg ICByc2RwLT5jaGVja3N1bSA9IHJzZHAtPmNoZWNrc3VtIC0gY2hlY2tzdW07CisKKyAgICB0Ymxf YWRkW1RCTF9SU0RQXS5zdGFydCA9IGQtPmFyY2guZWZpX2FjcGlfZ3BhCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICArIGFjcGlfZ2V0X3RhYmxlX29mZnNldCh0YmxfYWRkLCBUQkxfUlNE UCk7CisgICAgdGJsX2FkZFtUQkxfUlNEUF0uc2l6ZSA9IHRhYmxlX3NpemU7CisKKyAgICByZXR1 cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWNwaV94c2R0X21vZGlmeV9lbnRyeSh1NjQgZW50cnlb XSwgdW5zaWduZWQgbG9uZyBlbnRyeV9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciAqc2lnbmF0dXJlLCB1NjQgYWRkcikKK3sKKyAgICBpbnQgaTsKKyAgICBz dHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlOworICAgIHU2NCBzaXplID0gc2l6ZW9mKHN0 cnVjdCBhY3BpX3RhYmxlX2hlYWRlcik7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgZW50cnlfY291 bnQ7IGkrKyApCisgICAgeworICAgICAgICB0YWJsZSA9IGFjcGlfb3NfbWFwX21lbW9yeShlbnRy eVtpXSwgc2l6ZSk7CisgICAgICAgIGlmICggQUNQSV9DT01QQVJFX05BTUUodGFibGUtPnNpZ25h dHVyZSwgc2lnbmF0dXJlKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGVudHJ5W2ldID0gYWRk cjsKKyAgICAgICAgICAgIGFjcGlfb3NfdW5tYXBfbWVtb3J5KHRhYmxlLCBzaXplKTsKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGFjcGlfb3NfdW5tYXBfbWVtb3J5KHRh YmxlLCBzaXplKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgYWNwaV9jcmVhdGVfeHNkdChzdHJ1 Y3QgZG9tYWluICpkLCBzdHJ1Y3QgbWVtYmFuayB0YmxfYWRkW10pCit7CisgICAgc3RydWN0IGFj cGlfdGFibGVfaGVhZGVyICp0YWJsZSA9IE5VTEw7CisgICAgc3RydWN0IGFjcGlfdGFibGVfcnNk cCAqcnNkcF90Ymw7CisgICAgc3RydWN0IGFjcGlfdGFibGVfeHNkdCAqeHNkdCA9IE5VTEw7Cisg ICAgdTY0IHRhYmxlX3NpemUsIGFkZHI7CisgICAgdW5zaWduZWQgbG9uZyBlbnRyeV9jb3VudDsK KyAgICB1OCAqYmFzZV9wdHI7CisgICAgdTggY2hlY2tzdW07CisKKyAgICBhZGRyID0gYWNwaV9v c19nZXRfcm9vdF9wb2ludGVyKCk7CisgICAgaWYgKCAhYWRkciApCisgICAgeworICAgICAgICBw cmludGsoIlVuYWJsZSB0byBnZXQgYWNwaSByb290IHBvaW50ZXJcbiIpOworICAgICAgICByZXR1 cm4gLUVJTlZBTDsKKyAgICB9CisgICAgcnNkcF90YmwgPSBhY3BpX29zX21hcF9tZW1vcnkoYWRk ciwgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX3JzZHApKTsKKyAgICB0YWJsZSA9IGFjcGlfb3Nf bWFwX21lbW9yeShyc2RwX3RibC0+eHNkdF9waHlzaWNhbF9hZGRyZXNzLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIpKTsKKwor ICAgIC8qIEFkZCBwbGFjZSBmb3IgU1RBTyB0YWJsZSBpbiBYU0RUIHRhYmxlICovCisgICAgdGFi bGVfc2l6ZSA9IHRhYmxlLT5sZW5ndGggKyBzaXplb2YodTY0KTsKKyAgICBlbnRyeV9jb3VudCA9 ICh0YWJsZS0+bGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcikpCisgICAg ICAgICAgICAgICAgICAvIHNpemVvZih1NjQpOworICAgIGJhc2VfcHRyID0gZC0+YXJjaC5lZmlf YWNwaV90YWJsZQorICAgICAgICAgICAgICAgKyBhY3BpX2dldF90YWJsZV9vZmZzZXQodGJsX2Fk ZCwgVEJMX1hTRFQpOworICAgIG1lbWNweShiYXNlX3B0ciwgdGFibGUsIHRhYmxlLT5sZW5ndGgp OworICAgIGFjcGlfb3NfdW5tYXBfbWVtb3J5KHRhYmxlLCBzaXplb2Yoc3RydWN0IGFjcGlfdGFi bGVfaGVhZGVyKSk7CisgICAgYWNwaV9vc191bm1hcF9tZW1vcnkocnNkcF90YmwsIHNpemVvZihz dHJ1Y3QgYWNwaV90YWJsZV9yc2RwKSk7CisKKyAgICB4c2R0ID0gKHN0cnVjdCBhY3BpX3RhYmxl X3hzZHQgKiliYXNlX3B0cjsKKyAgICBhY3BpX3hzZHRfbW9kaWZ5X2VudHJ5KHhzZHQtPnRhYmxl X29mZnNldF9lbnRyeSwgZW50cnlfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBB Q1BJX1NJR19GQURULCB0YmxfYWRkW1RCTF9GQURUXS5zdGFydCk7CisgICAgYWNwaV94c2R0X21v ZGlmeV9lbnRyeSh4c2R0LT50YWJsZV9vZmZzZXRfZW50cnksIGVudHJ5X2NvdW50LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgQUNQSV9TSUdfTUFEVCwgdGJsX2FkZFtUQkxfTUFEVF0uc3Rh cnQpOworICAgIHhzZHQtPnRhYmxlX29mZnNldF9lbnRyeVtlbnRyeV9jb3VudF0gPSB0YmxfYWRk W1RCTF9TVEFPXS5zdGFydDsKKworICAgIHhzZHQtPmhlYWRlci5sZW5ndGggPSB0YWJsZV9zaXpl OworICAgIGNoZWNrc3VtID0gYWNwaV90Yl9jaGVja3N1bShBQ1BJX0NBU1RfUFRSKHU4LCB4c2R0 KSwgdGFibGVfc2l6ZSk7CisgICAgeHNkdC0+aGVhZGVyLmNoZWNrc3VtIC09IGNoZWNrc3VtOwor CisgICAgdGJsX2FkZFtUQkxfWFNEVF0uc3RhcnQgPSBkLT5hcmNoLmVmaV9hY3BpX2dwYQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBhY3BpX2dldF90YWJsZV9vZmZzZXQodGJsX2Fk ZCwgVEJMX1hTRFQpOworICAgIHRibF9hZGRbVEJMX1hTRFRdLnNpemUgPSB0YWJsZV9zaXplOwor CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWNwaV9jcmVhdGVfc3RhbyhzdHJ1Y3Qg ZG9tYWluICpkLCBzdHJ1Y3QgbWVtYmFuayB0YmxfYWRkW10pCit7CisgICAgc3RydWN0IGFjcGlf dGFibGVfaGVhZGVyICp0YWJsZSA9IE5VTEw7CisgICAgc3RydWN0IGFjcGlfdGFibGVfc3RhbyAq c3RhbyA9IE5VTEw7CisgICAgdTMyIHRhYmxlX3NpemUgPSBzaXplb2Yoc3RydWN0IGFjcGlfdGFi bGVfc3Rhbyk7CisgICAgdTMyIG9mZnNldCA9IGFjcGlfZ2V0X3RhYmxlX29mZnNldCh0YmxfYWRk LCBUQkxfU1RBTyk7CisgICAgYWNwaV9zdGF0dXMgc3RhdHVzOworICAgIHU4ICpiYXNlX3B0ciwg Y2hlY2tzdW07CisKKyAgICAvKiBDb3B5IE9FTSBhbmQgQVNMIGNvbXBpbGVyIGZpZWxkcyBmcm9t IGFub3RoZXIgdGFibGUsIHVzZSBNQURUICovCisgICAgc3RhdHVzID0gYWNwaV9nZXRfdGFibGUo QUNQSV9TSUdfTUFEVCwgMCwgJnRhYmxlKTsKKworICAgIGlmICggQUNQSV9GQUlMVVJFKHN0YXR1 cykgKQorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqbXNnID0gYWNwaV9mb3JtYXRfZXhjZXB0 aW9uKHN0YXR1cyk7CisKKyAgICAgICAgcHJpbnRrKCJTVEFPOiBGYWlsZWQgdG8gZ2V0IE1BRFQg dGFibGUsICVzXG4iLCBtc2cpOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisKKyAg ICBiYXNlX3B0ciA9IGQtPmFyY2guZWZpX2FjcGlfdGFibGUgKyBvZmZzZXQ7CisgICAgbWVtY3B5 KGJhc2VfcHRyLCB0YWJsZSwgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcikpOworCisg ICAgc3RhbyA9IChzdHJ1Y3QgYWNwaV90YWJsZV9zdGFvICopYmFzZV9wdHI7CisgICAgbWVtY3B5 KHN0YW8tPmhlYWRlci5zaWduYXR1cmUsIEFDUElfU0lHX1NUQU8sIDQpOworICAgIHN0YW8tPmhl YWRlci5yZXZpc2lvbiA9IDE7CisgICAgc3Rhby0+aGVhZGVyLmxlbmd0aCA9IHRhYmxlX3NpemU7 CisgICAgc3Rhby0+aWdub3JlX3VhcnQgPSAxOworICAgIGNoZWNrc3VtID0gYWNwaV90Yl9jaGVj a3N1bShBQ1BJX0NBU1RfUFRSKHU4LCBzdGFvKSwgdGFibGVfc2l6ZSk7CisgICAgc3Rhby0+aGVh ZGVyLmNoZWNrc3VtIC09IGNoZWNrc3VtOworCisgICAgdGJsX2FkZFtUQkxfU1RBT10uc3RhcnQg PSBkLT5hcmNoLmVmaV9hY3BpX2dwYSArIG9mZnNldDsKKyAgICB0YmxfYWRkW1RCTF9TVEFPXS5z aXplID0gdGFibGVfc2l6ZTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFjcGlf Y3JlYXRlX21hZHQoc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IG1lbWJhbmsgdGJsX2FkZFtdKQor eworICAgIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGUgPSBOVUxMOworICAgIHN0cnVj dCBhY3BpX3RhYmxlX21hZHQgKm1hZHQgPSBOVUxMOworICAgIHN0cnVjdCBhY3BpX3N1YnRhYmxl X2hlYWRlciAqaGVhZGVyOworICAgIHN0cnVjdCBhY3BpX21hZHRfZ2VuZXJpY19kaXN0cmlidXRv ciAqZ2ljZDsKKyAgICB1MzIgdGFibGVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9t YWR0KTsKKyAgICB1MzIgb2Zmc2V0ID0gYWNwaV9nZXRfdGFibGVfb2Zmc2V0KHRibF9hZGQsIFRC TF9NQURUKTsKKyAgICBpbnQgcmV0OworICAgIGFjcGlfc3RhdHVzIHN0YXR1czsKKyAgICB1OCAq YmFzZV9wdHIsIGNoZWNrc3VtOworCisgICAgc3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9T SUdfTUFEVCwgMCwgJnRhYmxlKTsKKworICAgIGlmICggQUNQSV9GQUlMVVJFKHN0YXR1cykgKQor ICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqbXNnID0gYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHN0 YXR1cyk7CisKKyAgICAgICAgcHJpbnRrKCJGYWlsZWQgdG8gZ2V0IE1BRFQgdGFibGUsICVzXG4i LCBtc2cpOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisKKyAgICBiYXNlX3B0ciA9 IGQtPmFyY2guZWZpX2FjcGlfdGFibGUgKyBvZmZzZXQ7CisgICAgbWVtY3B5KGJhc2VfcHRyLCB0 YWJsZSwgdGFibGVfc2l6ZSk7CisKKyAgICAvKiBBZGQgR2VuZXJpYyBEaXN0cmlidXRvci4gKi8K KyAgICBoZWFkZXIgPSBhY3BpX3RhYmxlX2dldF9lbnRyeV9tYWR0KEFDUElfTUFEVF9UWVBFX0dF TkVSSUNfRElTVFJJQlVUT1IsIDApOworICAgIGlmICggIWhlYWRlciApCisgICAgeworICAgICAg ICBwcmludGsoIkNhbid0IGdldCBHSUNEIGVudHJ5XG4iKTsKKyAgICAgICAgcmV0dXJuIC1FSU5W QUw7CisgICAgfQorICAgIGdpY2QgPSBjb250YWluZXJfb2YoaGVhZGVyLCBzdHJ1Y3QgYWNwaV9t YWR0X2dlbmVyaWNfZGlzdHJpYnV0b3IsIGhlYWRlcik7CisgICAgbWVtY3B5KGJhc2VfcHRyICsg dGFibGVfc2l6ZSwgZ2ljZCwKKyAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGFjcGlfbWFk dF9nZW5lcmljX2Rpc3RyaWJ1dG9yKSk7CisgICAgdGFibGVfc2l6ZSArPSBzaXplb2Yoc3RydWN0 IGFjcGlfbWFkdF9nZW5lcmljX2Rpc3RyaWJ1dG9yKTsKKworICAgIC8qIEFkZCBvdGhlciBzdWJ0 YWJsZXMuICovCisgICAgcmV0ID0gZ2ljX21ha2VfaHdkb21fbWFkdChkLCBvZmZzZXQgKyB0YWJs ZV9zaXplKTsKKyAgICBpZiAoIHJldCA8IDAgKQorICAgIHsKKyAgICAgICAgcHJpbnRrKCJGYWls ZWQgdG8gZ2V0IG90aGVyIHN1YnRhYmxlc1xuIik7CisgICAgICAgIHJldHVybiAtRUlOVkFMOwor ICAgIH0KKyAgICB0YWJsZV9zaXplICs9IHJldDsKKworICAgIG1hZHQgPSAoc3RydWN0IGFjcGlf dGFibGVfbWFkdCAqKWJhc2VfcHRyOworICAgIG1hZHQtPmhlYWRlci5sZW5ndGggPSB0YWJsZV9z aXplOworICAgIGNoZWNrc3VtID0gYWNwaV90Yl9jaGVja3N1bShBQ1BJX0NBU1RfUFRSKHU4LCBt YWR0KSwgdGFibGVfc2l6ZSk7CisgICAgbWFkdC0+aGVhZGVyLmNoZWNrc3VtIC09IGNoZWNrc3Vt OworCisgICAgdGJsX2FkZFtUQkxfTUFEVF0uc3RhcnQgPSBkLT5hcmNoLmVmaV9hY3BpX2dwYSAr IG9mZnNldDsKKyAgICB0YmxfYWRkW1RCTF9NQURUXS5zaXplID0gdGFibGVfc2l6ZTsKKworICAg IHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFjcGlfY3JlYXRlX2ZhZHQoc3RydWN0IGRvbWFp biAqZCwgc3RydWN0IG1lbWJhbmsgdGJsX2FkZFtdKQoreworICAgIHN0cnVjdCBhY3BpX3RhYmxl X2hlYWRlciAqdGFibGUgPSBOVUxMOworICAgIHN0cnVjdCBhY3BpX3RhYmxlX2ZhZHQgKmZhZHQg PSBOVUxMOworICAgIHU2NCB0YWJsZV9zaXplOworICAgIGFjcGlfc3RhdHVzIHN0YXR1czsKKyAg ICB1OCAqYmFzZV9wdHI7CisgICAgdTggY2hlY2tzdW07CisKKyAgICBzdGF0dXMgPSBhY3BpX2dl dF90YWJsZShBQ1BJX1NJR19GQURULCAwLCAmdGFibGUpOworCisgICAgaWYgKCBBQ1BJX0ZBSUxV UkUoc3RhdHVzKSApCisgICAgeworICAgICAgICBjb25zdCBjaGFyICptc2cgPSBhY3BpX2Zvcm1h dF9leGNlcHRpb24oc3RhdHVzKTsKKworICAgICAgICBwcmludGsoIkZhaWxlZCB0byBnZXQgRkFE VCB0YWJsZSwgJXNcbiIsIG1zZyk7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKwor ICAgIHRhYmxlX3NpemUgPSB0YWJsZS0+bGVuZ3RoOworICAgIGJhc2VfcHRyID0gZC0+YXJjaC5l ZmlfYWNwaV90YWJsZQorICAgICAgICAgICAgICAgKyBhY3BpX2dldF90YWJsZV9vZmZzZXQodGJs X2FkZCwgVEJMX0ZBRFQpOworICAgIG1lbWNweShiYXNlX3B0ciwgdGFibGUsIHRhYmxlX3NpemUp OworICAgIGZhZHQgPSAoc3RydWN0IGFjcGlfdGFibGVfZmFkdCAqKWJhc2VfcHRyOworCisgICAg LyogU2V0IFBTQ0lfQ09NUExJQU5UIGFuZCBQU0NJX1VTRV9IVkMgKi8KKyAgICBmYWR0LT5hcm1f Ym9vdF9mbGFncyB8PSAoQUNQSV9GQURUX1BTQ0lfQ09NUExJQU5UIHwgQUNQSV9GQURUX1BTQ0lf VVNFX0hWQyk7CisgICAgY2hlY2tzdW0gPSBhY3BpX3RiX2NoZWNrc3VtKEFDUElfQ0FTVF9QVFIo dTgsIGZhZHQpLCB0YWJsZV9zaXplKTsKKyAgICBmYWR0LT5oZWFkZXIuY2hlY2tzdW0gLT0gY2hl Y2tzdW07CisKKyAgICB0YmxfYWRkW1RCTF9GQURUXS5zdGFydCA9IGQtPmFyY2guZWZpX2FjcGlf Z3BhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGFjcGlfZ2V0X3RhYmxlX29mZnNl dCh0YmxfYWRkLCBUQkxfRkFEVCk7CisgICAgdGJsX2FkZFtUQkxfRkFEVF0uc2l6ZSA9IHRhYmxl X3NpemU7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlc3RpbWF0ZV9hY3BpX2Vm aV9zaXplKHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCBrZXJuZWxfaW5mbyAqa2luZm8pCit7Cisg ICAgc2l6ZV90IGVmaV9zaXplLCBhY3BpX3NpemUsIG1hZHRfc2l6ZTsKKyAgICB1NjQgYWRkcjsK KyAgICBzdHJ1Y3QgYWNwaV90YWJsZV9yc2RwICpyc2RwX3RibDsKKyAgICBzdHJ1Y3QgYWNwaV90 YWJsZV9oZWFkZXIgKnRhYmxlOworCisgICAgZWZpX3NpemUgPSBlc3RpbWF0ZV9lZmlfc2l6ZShr aW5mby0+bWVtLm5yX2JhbmtzKTsKKworICAgIGFjcGlfc2l6ZSA9IFJPVU5EVVAoc2l6ZW9mKHN0 cnVjdCBhY3BpX3RhYmxlX2ZhZHQpLCA4KTsKKyAgICBhY3BpX3NpemUgKz0gUk9VTkRVUChzaXpl b2Yoc3RydWN0IGFjcGlfdGFibGVfc3RhbyksIDgpOworCisgICAgbWFkdF9zaXplID0gZ2ljX2dl dF9od2RvbV9tYWR0X3NpemUoZCk7CisgICAgYWNwaV9zaXplICs9IFJPVU5EVVAobWFkdF9zaXpl LCA4KTsKKworICAgIGFkZHIgPSBhY3BpX29zX2dldF9yb290X3BvaW50ZXIoKTsKKyAgICBpZiAo ICFhZGRyICkKKyAgICB7CisgICAgICAgIHByaW50aygiVW5hYmxlIHRvIGdldCBhY3BpIHJvb3Qg cG9pbnRlclxuIik7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKworICAgIHJzZHBf dGJsID0gYWNwaV9vc19tYXBfbWVtb3J5KGFkZHIsIHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9y c2RwKSk7CisgICAgaWYgKCAhcnNkcF90YmwgKQorICAgIHsKKyAgICAgICAgcHJpbnRrKCJVbmFi bGUgdG8gbWFwIFJTRFAgdGFibGVcbiIpOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9 CisKKyAgICB0YWJsZSA9IGFjcGlfb3NfbWFwX21lbW9yeShyc2RwX3RibC0+eHNkdF9waHlzaWNh bF9hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qg YWNwaV90YWJsZV9oZWFkZXIpKTsKKyAgICBhY3BpX29zX3VubWFwX21lbW9yeShyc2RwX3RibCwg c2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX3JzZHApKTsKKyAgICBpZiAoICF0YWJsZSApCisgICAg eworICAgICAgICBwcmludGsoIlVuYWJsZSB0byBtYXAgWFNEVCB0YWJsZVxuIik7CisgICAgICAg IHJldHVybiAtRUlOVkFMOworICAgIH0KKworICAgIC8qIEFkZCBwbGFjZSBmb3IgU1RBTyB0YWJs ZSBpbiBYU0RUIHRhYmxlICovCisgICAgYWNwaV9zaXplICs9IFJPVU5EVVAodGFibGUtPmxlbmd0 aCArIHNpemVvZih1NjQpLCA4KTsKKyAgICBhY3BpX29zX3VubWFwX21lbW9yeSh0YWJsZSwgc2l6 ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcikpOworCisgICAgYWNwaV9zaXplICs9IFJPVU5E VVAoc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX3JzZHApLCA4KTsKKyAgICBkLT5hcmNoLmVmaV9h Y3BpX2xlbiA9IFBBR0VfQUxJR04oUk9VTkRVUChlZmlfc2l6ZSwgOCkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKyBST1VORFVQKGFjcGlfc2l6ZSwgOCkpOworCisgICAg cmV0dXJuIDA7Cit9CisKK2ludCBwcmVwYXJlX2FjcGkoc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0 IGtlcm5lbF9pbmZvICpraW5mbykKK3sKKyAgICBpbnQgcmMgPSAwOworICAgIGludCBvcmRlcjsK KyAgICBzdHJ1Y3QgbWVtYmFuayB0YmxfYWRkW1RCTF9NTUFYXSA9IHt9OworCisgICAgcmMgPSBl c3RpbWF0ZV9hY3BpX2VmaV9zaXplKGQsIGtpbmZvKTsKKyAgICBpZiAoIHJjICE9IDAgKQorICAg ICAgICByZXR1cm4gcmM7CisKKyAgICBvcmRlciA9IGdldF9vcmRlcl9mcm9tX2J5dGVzKGQtPmFy Y2guZWZpX2FjcGlfbGVuKTsKKyAgICBkLT5hcmNoLmVmaV9hY3BpX3RhYmxlID0gYWxsb2NfeGVu aGVhcF9wYWdlcyhvcmRlciwgMCk7CisgICAgaWYgKCBkLT5hcmNoLmVmaV9hY3BpX3RhYmxlID09 IE5VTEwgKQorICAgIHsKKyAgICAgICAgcHJpbnRrKCJ1bmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5 IVxuIik7CisgICAgICAgIHJldHVybiAtRU5PTUVNOworICAgIH0KKyAgICBtZW1zZXQoZC0+YXJj aC5lZmlfYWNwaV90YWJsZSwgMCwgZC0+YXJjaC5lZmlfYWNwaV9sZW4pOworCisgICAgLyoKKyAg ICAgKiBGb3IgQUNQSSwgRG9tMCBkb2Vzbid0IHVzZSBraW5mby0+Z250dGFiX3N0YXJ0IHRvIGdl dCB0aGUgZ3JhbnQgdGFibGUKKyAgICAgKiByZWdpb24uIFNvIHdlIHVzZSBpdCBhcyB0aGUgQUNQ SSB0YWJsZSBtYXBwZWQgYWRkcmVzcy4gQWxzbyBpdCBuZWVkcyB0bworICAgICAqIGNoZWNrIGlm IHRoZSBzaXplIG9mIGdyYW50IHRhYmxlIHJlZ2lvbiBpcyBlbm91Z2ggZm9yIHRob3NlIEFDUEkg dGFibGVzLgorICAgICAqLworICAgIGQtPmFyY2guZWZpX2FjcGlfZ3BhID0ga2luZm8tPmdudHRh Yl9zdGFydDsKKyAgICBpZiAoIGtpbmZvLT5nbnR0YWJfc2l6ZSA8IGQtPmFyY2guZWZpX2FjcGlf bGVuICkKKyAgICB7CisgICAgICAgIHByaW50aygiVGhlIGdyYW50IHRhYmxlIHJlZ2lvbiBpcyBu b3QgZW5vdWdoIHRvIGZpdCB0aGUgQUNQSSB0YWJsZXMhXG4iKTsKKyAgICAgICAgcmV0dXJuIC1F SU5WQUw7CisgICAgfQorCisgICAgcmMgPSBhY3BpX2NyZWF0ZV9mYWR0KGQsIHRibF9hZGQpOwor ICAgIGlmICggcmMgIT0gMCApCisgICAgICAgIHJldHVybiByYzsKKworICAgIHJjID0gYWNwaV9j cmVhdGVfbWFkdChkLCB0YmxfYWRkKTsKKyAgICBpZiAoIHJjICE9IDAgKQorICAgICAgICByZXR1 cm4gcmM7CisKKyAgICByYyA9IGFjcGlfY3JlYXRlX3N0YW8oZCwgdGJsX2FkZCk7CisgICAgaWYg KCByYyAhPSAwICkKKyAgICAgICAgcmV0dXJuIHJjOworCisgICAgcmMgPSBhY3BpX2NyZWF0ZV94 c2R0KGQsIHRibF9hZGQpOworICAgIGlmICggcmMgIT0gMCApCisgICAgICAgIHJldHVybiByYzsK KworICAgIHJjID0gYWNwaV9jcmVhdGVfcnNkcChkLCB0YmxfYWRkKTsKKyAgICBpZiAoIHJjICE9 IDAgKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICBhY3BpX21hcF9vdGhlcl90YWJsZXMoZCk7 CisgICAgYWNwaV9jcmVhdGVfZWZpX3N5c3RlbV90YWJsZShkLCB0YmxfYWRkKTsKKyAgICBhY3Bp X2NyZWF0ZV9lZmlfbW1hcF90YWJsZShkLCAma2luZm8tPm1lbSwgdGJsX2FkZCk7CisKKyAgICAv KiBNYXAgdGhlIEVGSSBhbmQgQUNQSSB0YWJsZXMgdG8gRG9tMCAqLworICAgIHJjID0gbWFwX3Jl Z2lvbnNfcDJtdChkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBnYWRkcl90b19nZm4oZC0+ YXJjaC5lZmlfYWNwaV9ncGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBQRk5fVVAoZC0+ YXJjaC5lZmlfYWNwaV9sZW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0X3RvX21m bihkLT5hcmNoLmVmaV9hY3BpX3RhYmxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcDJt X21taW9fZGlyZWN0X2MpOworICAgIGlmICggcmMgIT0gMCApCisgICAgeworICAgICAgICBwcmlu dGsoWEVOTE9HX0VSUiAiVW5hYmxlIHRvIG1hcCBFRkkvQUNQSSB0YWJsZSAweCUiUFJJeDY0Cisg ICAgICAgICAgICAgICAiIC0gMHglIlBSSXg2NCIgaW4gZG9tYWluICVkXG4iLAorICAgICAgICAg ICAgICAgZC0+YXJjaC5lZmlfYWNwaV9ncGEgJiBQQUdFX01BU0ssCisgICAgICAgICAgICAgICBQ QUdFX0FMSUdOKGQtPmFyY2guZWZpX2FjcGlfZ3BhICsgZC0+YXJjaC5lZmlfYWNwaV9sZW4pIC0g MSwKKyAgICAgICAgICAgICAgIGQtPmRvbWFpbl9pZCk7CisgICAgICAgIHJldHVybiByYzsKKyAg ICB9CisKKyAgICAvKgorICAgICAqIEZsdXNoIHRoZSBjYWNoZSBmb3IgdGhpcyByZWdpb24sIG90 aGVyd2lzZSBET00wIG1heSByZWFkIHdyb25nIGRhdGEgd2hlbgorICAgICAqIHRoZSBjYWNoZSBp cyBkaXNhYmxlZC4KKyAgICAgKi8KKyAgICBjbGVhbl9hbmRfaW52YWxpZGF0ZV9kY2FjaGVfdmFf cmFuZ2UoZC0+YXJjaC5lZmlfYWNwaV90YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZC0+YXJjaC5lZmlfYWNwaV9sZW4pOworCisgICAgcmMgPSBjcmVhdGVf YWNwaV9kdGIoa2luZm8sIHRibF9hZGQpOworICAgIGlmICggcmMgIT0gMCApCisgICAgICAgIHJl dHVybiByYzsKKworICAgIHJjID0gYWNwaV9yb3V0ZV9zcGlzKGQpOworICAgIGlmICggcmMgIT0g MCApCisgICAgICAgIHJldHVybiByYzsKKworICAgIHJjID0gYWNwaV9pb21lbV9kZW55X2FjY2Vz cyhkKTsKKyAgICBpZiAoIHJjICE9IDAgKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICAvKgor ICAgICAqIEFsbCBQUElzIGhhdmUgYmVlbiByZWdpc3RlcmVkLCBhbGxvY2F0ZSB0aGUgZXZlbnQg Y2hhbm5lbAorICAgICAqIGludGVycnVwdHMuCisgICAgICovCisgICAgZXZ0Y2huX2FsbG9jYXRl KGQpOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBt b2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9mZnNldDogNAorICog aW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL3hlbi9hcmNo L2FybS9hY3BpL2FjcGlfZHRfYnVpbGQuaCBiL3hlbi9hcmNoL2FybS9hY3BpL2FjcGlfZHRfYnVp bGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGU3YWFiCi0tLSAvZGV2 L251bGwKKysrIGIveGVuL2FyY2gvYXJtL2FjcGkvYWNwaV9kdF9idWlsZC5oCkBAIC0wLDAgKzEs MzIgQEAKKyNpZm5kZWYgX19BUkNIX0FSTV9BQ1BJX0FDUElfRFRfQlVJTERfSF9fCisjZGVmaW5l IF9fQVJDSF9BUk1fQUNQSV9BQ1BJX0RUX0JVSUxEX0hfXworCisjaW5jbHVkZSA8eGVuL3NjaGVk Lmg+CisjaW5jbHVkZSAiLi4va2VybmVsLmgiCisKK2ludCBtYXBfaXJxX3RvX2RvbWFpbihzdHJ1 Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBpbnQgaXJxLAorICAgICAgICAgICAgICAgICAgICAgIGJv b2wgbmVlZF9tYXBwaW5nLCBjb25zdCBjaGFyICpkZXZuYW1lKTsKK2ludCBtYWtlX2Nob3Nlbl9u b2RlKGNvbnN0IHN0cnVjdCBrZXJuZWxfaW5mbyAqa2luZm8pOwordm9pZCBldnRjaG5fYWxsb2Nh dGUoc3RydWN0IGRvbWFpbiAqZCk7CisKKyNpZm5kZWYgQ09ORklHX0FDUEkKK3N0YXRpYyBpbmxp bmUgaW50IHByZXBhcmVfYWNwaShzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3Qga2VybmVsX2luZm8g KmtpbmZvKQoreworICAgIC8qIE9ubHkgYm9vdGluZyB3aXRoIEFDUEkgd2lsbCBoaXQgaGVyZSAq LworICAgIEJVRygpOworICAgIHJldHVybiAtRUlOVkFMOworfQorI2Vsc2UKK2ludCBwcmVwYXJl X2FjcGkoc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IGtlcm5lbF9pbmZvICpraW5mbyk7CisjZW5k aWYKKworI2VuZGlmCisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBj LWZpbGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9mZnNldDogNAorICogaW5kZW50LXRhYnMt bW9kZTogbmlsCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS9kb21haW5f YnVpbGQuYyBiL3hlbi9hcmNoL2FybS9kb21haW5fYnVpbGQuYwppbmRleCA5ZjU4MDAyLi4wMWFh MGNmIDEwMDY0NAotLS0gYS94ZW4vYXJjaC9hcm0vZG9tYWluX2J1aWxkLmMKKysrIGIveGVuL2Fy Y2gvYXJtL2RvbWFpbl9idWlsZC5jCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlIDx4ZW4v aXJxLmg+CiAjaW5jbHVkZSA8eGVuL2dyYW50X3RhYmxlLmg+CisjaW5jbHVkZSAiYWNwaS9hY3Bp X2R0X2J1aWxkLmgiCiAjaW5jbHVkZSAia2VybmVsLmgiCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQg X19pbml0ZGF0YSBvcHRfZG9tMF9tYXhfdmNwdXM7CkBAIC01OTksOCArNjAwLDYgQEAgc3RhdGlj IGludCBtYWtlX21lbW9yeV9ub2RlKGNvbnN0IHN0cnVjdCBkb21haW4gKmQsCiAgICAgcmV0dXJu IHJlczsKIH0KIAotc3RhdGljIHZvaWQgZXZ0Y2huX2FsbG9jYXRlKHN0cnVjdCBkb21haW4gKmQp OwotCiBzdGF0aWMgaW50IG1ha2VfaHlwZXJ2aXNvcl9ub2RlKHN0cnVjdCBkb21haW4gKmQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfaW5mbyAq a2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhZGRyY2VsbHMsIGlu dCBzaXplY2VsbHMpCkBAIC05NTgsNyArOTU3LDcgQEAgc3RhdGljIGludCBtYWtlX3RpbWVyX25v ZGUoY29uc3Qgc3RydWN0IGRvbWFpbiAqZCwgdm9pZCAqZmR0LAogICogb24gQUNQSSBzeXN0ZW1z LCBhbmQgRG9tVXMgc3RhcnRlZCBkaXJlY3RseSBmcm9tIFhlbiBiYXNlZCBvbiBkZXZpY2UKICAq IHRyZWUgaW5mb3JtYXRpb24uCiAgKi8KLXN0YXRpYyBpbnQgbWFrZV9jaG9zZW5fbm9kZShjb25z dCBzdHJ1Y3Qga2VybmVsX2luZm8gKmtpbmZvKQoraW50IG1ha2VfY2hvc2VuX25vZGUoY29uc3Qg c3RydWN0IGtlcm5lbF9pbmZvICpraW5mbykKIHsKICAgICBpbnQgcmVzOwogICAgIGNvbnN0IGNo YXIgKmJvb3RhcmdzID0gTlVMTDsKQEAgLTk5OSw4ICs5OTgsOCBAQCBzdGF0aWMgaW50IG1ha2Vf Y2hvc2VuX25vZGUoY29uc3Qgc3RydWN0IGtlcm5lbF9pbmZvICpraW5mbykKICAgICByZXR1cm4g cmVzOwogfQogCi1zdGF0aWMgaW50IG1hcF9pcnFfdG9fZG9tYWluKHN0cnVjdCBkb21haW4gKmQs IHVuc2lnbmVkIGludCBpcnEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbmVl ZF9tYXBwaW5nLCBjb25zdCBjaGFyICpkZXZuYW1lKQoraW50IG1hcF9pcnFfdG9fZG9tYWluKHN0 cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGludCBpcnEsCisgICAgICAgICAgICAgICAgICAgICAg Ym9vbCBuZWVkX21hcHBpbmcsIGNvbnN0IGNoYXIgKmRldm5hbWUpCiAKIHsKICAgICBpbnQgcmVz OwpAQCAtMTcwMCw1NzcgKzE2OTksNiBAQCBzdGF0aWMgaW50IHByZXBhcmVfZHRiX2h3ZG9tKHN0 cnVjdCBkb21haW4gKmQsIHN0cnVjdCBrZXJuZWxfaW5mbyAqa2luZm8pCiAgICAgcmV0dXJuIC1F SU5WQUw7CiB9CiAKLSNpZmRlZiBDT05GSUdfQUNQSQotI2RlZmluZSBBQ1BJX0RPTTBfRkRUX01J Tl9TSVpFIDQwOTYKLQotc3RhdGljIGludCBhY3BpX2lvbWVtX2RlbnlfYWNjZXNzKHN0cnVjdCBk b21haW4gKmQpCi17Ci0gICAgYWNwaV9zdGF0dXMgc3RhdHVzOwotICAgIHN0cnVjdCBhY3BpX3Rh YmxlX3NwY3IgKnNwY3IgPSBOVUxMOwotICAgIHVuc2lnbmVkIGxvbmcgbWZuOwotICAgIGludCBy YzsKLQotICAgIC8qIEZpcnN0bHkgcGVybWl0IGZ1bGwgTU1JTyBjYXBhYmlsaXRpZXMuICovCi0g ICAgcmMgPSBpb21lbV9wZXJtaXRfYWNjZXNzKGQsIDBVTCwgfjBVTCk7Ci0gICAgaWYgKCByYyAp Ci0gICAgICAgIHJldHVybiByYzsKLQotICAgIC8qIFRPRE86IERlbnkgTU1JTyBhY2Nlc3MgZm9y IFNNTVUsIEdJQyBJVFMgKi8KLSAgICBzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19T UENSLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgYWNwaV90YWJsZV9o ZWFkZXIgKiopJnNwY3IpOwotCi0gICAgaWYgKCBBQ1BJX0ZBSUxVUkUoc3RhdHVzKSApCi0gICAg ewotICAgICAgICBwcmludGsoIkZhaWxlZCB0byBnZXQgU1BDUiB0YWJsZVxuIik7Ci0gICAgICAg IHJldHVybiAtRUlOVkFMOwotICAgIH0KLQotICAgIG1mbiA9IHNwY3ItPnNlcmlhbF9wb3J0LmFk ZHJlc3MgPj4gUEFHRV9TSElGVDsKLSAgICAvKiBEZW55IE1NSU8gYWNjZXNzIGZvciBVQVJUICov Ci0gICAgcmMgPSBpb21lbV9kZW55X2FjY2VzcyhkLCBtZm4sIG1mbiArIDEpOwotICAgIGlmICgg cmMgKQotICAgICAgICByZXR1cm4gcmM7Ci0KLSAgICAvKiBEZW55IE1NSU8gYWNjZXNzIGZvciBH SUMgcmVnaW9ucyAqLwotICAgIHJldHVybiBnaWNfaW9tZW1fZGVueV9hY2Nlc3MoZCk7Ci19Ci0K LXN0YXRpYyBpbnQgYWNwaV9yb3V0ZV9zcGlzKHN0cnVjdCBkb21haW4gKmQpCi17Ci0gICAgaW50 IGksIHJlczsKLSAgICBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7Ci0KLSAgICAvKgotICAgICAqIFJv dXRlIHRoZSBJUlEgdG8gaGFyZHdhcmUgZG9tYWluIGFuZCBwZXJtaXQgdGhlIGFjY2Vzcy4KLSAg ICAgKiBUaGUgaW50ZXJydXB0IHR5cGUgd2lsbCBiZSBzZXQgYnkgc2V0IGJ5IHRoZSBoYXJkd2Fy ZSBkb21haW4uCi0gICAgICovCi0gICAgZm9yKCBpID0gTlJfTE9DQUxfSVJRUzsgaSA8IHZnaWNf bnVtX2lycXMoZCk7IGkrKyApCi0gICAgewotICAgICAgICAvKgotICAgICAgICAgKiBUT0RPOiBF eGNsdWRlIHRoZSBTUElzIFNNTVUgdXNlcyB3aGljaCBzaG91bGQgbm90IGJlIHJvdXRlZCB0bwot ICAgICAgICAgKiB0aGUgaGFyZHdhcmUgZG9tYWluLgotICAgICAgICAgKi8KLSAgICAgICAgZGVz YyA9IGlycV90b19kZXNjKGkpOwotICAgICAgICBpZiAoIGRlc2MtPmFjdGlvbiAhPSBOVUxMKQot ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLyogWFhYOiBTaGFsbCB3ZSB1c2UgYSBw cm9wZXIgZGV2bmFtZT8gKi8KLSAgICAgICAgcmVzID0gbWFwX2lycV90b19kb21haW4oZCwgaSwg dHJ1ZSwgIkFDUEkiKTsKLSAgICAgICAgaWYgKCByZXMgKQotICAgICAgICAgICAgcmV0dXJuIHJl czsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhY3BpX21ha2VfaHlw ZXJ2aXNvcl9ub2RlKGNvbnN0IHN0cnVjdCBrZXJuZWxfaW5mbyAqa2luZm8sCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1lbWJhbmsgdGJsX2FkZFtdKQotewot ICAgIGNvbnN0IGNoYXIgY29tcGF0W10gPQotICAgICAgICAieGVuLHhlbi0iX19zdHJpbmdpZnko WEVOX1ZFUlNJT04pIi4iX19zdHJpbmdpZnkoWEVOX1NVQlZFUlNJT04pIlwwIgotICAgICAgICAi eGVuLHhlbiI7Ci0gICAgaW50IHJlczsKLSAgICAvKiBDb252ZW5pZW5jZSBhbGlhcyAqLwotICAg IHZvaWQgKmZkdCA9IGtpbmZvLT5mZHQ7Ci0KLSAgICBkdF9kcHJpbnRrKCJDcmVhdGUgaHlwZXJ2 aXNvciBub2RlXG4iKTsKLQotICAgIC8qIFNlZSBsaW51eCBEb2N1bWVudGF0aW9uL2RldmljZXRy ZWUvYmluZGluZ3MvYXJtL3hlbi50eHQgKi8KLSAgICByZXMgPSBmZHRfYmVnaW5fbm9kZShmZHQs ICJoeXBlcnZpc29yIik7Ci0gICAgaWYgKCByZXMgKQotICAgICAgICByZXR1cm4gcmVzOwotCi0g ICAgLyogQ2Fubm90IHVzZSBmZHRfcHJvcGVydHlfc3RyaW5nIGR1ZSB0byBlbWJlZGRlZCBudWxs cyAqLwotICAgIHJlcyA9IGZkdF9wcm9wZXJ0eShmZHQsICJjb21wYXRpYmxlIiwgY29tcGF0LCBz aXplb2YoY29tcGF0KSk7Ci0gICAgaWYgKCByZXMgKQotICAgICAgICByZXR1cm4gcmVzOwotCi0g ICAgcmVzID0gYWNwaV9tYWtlX2VmaV9ub2RlcyhmZHQsIHRibF9hZGQpOwotICAgIGlmICggcmVz ICkKLSAgICAgICAgcmV0dXJuIHJlczsKLQotICAgIHJlcyA9IGZkdF9lbmRfbm9kZShmZHQpOwot Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotLyoKLSAqIFByZXBhcmUgYSBtaW5pbWFsIERUQiBmb3Ig RG9tMCB3aGljaCBjb250YWlucyBib290YXJncywgaW5pdHJkLCBtZW1vcnkKLSAqIGluZm9ybWF0 aW9uLCBFRkkgdGFibGUuCi0gKi8KLXN0YXRpYyBpbnQgY3JlYXRlX2FjcGlfZHRiKHN0cnVjdCBr ZXJuZWxfaW5mbyAqa2luZm8sIHN0cnVjdCBtZW1iYW5rIHRibF9hZGRbXSkKLXsKLSAgICBpbnQg bmV3X3NpemU7Ci0gICAgaW50IHJldDsKLQotICAgIGR0X2RwcmludGsoIlByZXBhcmUgYSBtaW4g RFRCIGZvciBET00wXG4iKTsKLQotICAgIC8qIEFsbG9jYXRlIG1pbiBzaXplIGZvciBEVCAqLwot ICAgIG5ld19zaXplID0gQUNQSV9ET00wX0ZEVF9NSU5fU0laRTsKLSAgICBraW5mby0+ZmR0ID0g eG1hbGxvY19ieXRlcyhuZXdfc2l6ZSk7Ci0KLSAgICBpZiAoIGtpbmZvLT5mZHQgPT0gTlVMTCAp Ci0gICAgICAgIHJldHVybiAtRU5PTUVNOwotCi0gICAgLyogQ3JlYXRlIGEgbmV3IGVtcHR5IERU IGZvciBET00wICovCi0gICAgcmV0ID0gZmR0X2NyZWF0ZShraW5mby0+ZmR0LCBuZXdfc2l6ZSk7 Ci0gICAgaWYgKCByZXQgPCAwICkKLSAgICAgICAgZ290byBlcnI7Ci0KLSAgICByZXQgPSBmZHRf ZmluaXNoX3Jlc2VydmVtYXAoa2luZm8tPmZkdCk7Ci0gICAgaWYgKCByZXQgPCAwICkKLSAgICAg ICAgZ290byBlcnI7Ci0KLSAgICByZXQgPSBmZHRfYmVnaW5fbm9kZShraW5mby0+ZmR0LCAiLyIp OwotICAgIGlmICggcmV0IDwgMCApCi0gICAgICAgIGdvdG8gZXJyOwotCi0gICAgcmV0ID0gZmR0 X3Byb3BlcnR5X2NlbGwoa2luZm8tPmZkdCwgIiNhZGRyZXNzLWNlbGxzIiwgMik7Ci0gICAgaWYg KCByZXQgKQotICAgICAgICByZXR1cm4gcmV0OwotCi0gICAgcmV0ID0gZmR0X3Byb3BlcnR5X2Nl bGwoa2luZm8tPmZkdCwgIiNzaXplLWNlbGxzIiwgMSk7Ci0gICAgaWYgKCByZXQgKQotICAgICAg ICByZXR1cm4gcmV0OwotCi0gICAgLyogQ3JlYXRlIGEgY2hvc2VuIG5vZGUgZm9yIERPTTAgKi8K LSAgICByZXQgPSBtYWtlX2Nob3Nlbl9ub2RlKGtpbmZvKTsKLSAgICBpZiAoIHJldCApCi0gICAg ICAgIGdvdG8gZXJyOwotCi0gICAgcmV0ID0gYWNwaV9tYWtlX2h5cGVydmlzb3Jfbm9kZShraW5m bywgdGJsX2FkZCk7Ci0gICAgaWYgKCByZXQgKQotICAgICAgICBnb3RvIGVycjsKLQotICAgIHJl dCA9IGZkdF9lbmRfbm9kZShraW5mby0+ZmR0KTsKLSAgICBpZiAoIHJldCA8IDAgKQotICAgICAg ICBnb3RvIGVycjsKLQotICAgIHJldCA9IGZkdF9maW5pc2goa2luZm8tPmZkdCk7Ci0gICAgaWYg KCByZXQgPCAwICkKLSAgICAgICAgZ290byBlcnI7Ci0KLSAgICByZXR1cm4gMDsKLQotICBlcnI6 Ci0gICAgcHJpbnRrKCJEZXZpY2UgdHJlZSBnZW5lcmF0aW9uIGZhaWxlZCAoJWQpLlxuIiwgcmV0 KTsKLSAgICB4ZnJlZShraW5mby0+ZmR0KTsKLSAgICByZXR1cm4gLUVJTlZBTDsKLX0KLQotc3Rh dGljIHZvaWQgYWNwaV9tYXBfb3RoZXJfdGFibGVzKHN0cnVjdCBkb21haW4gKmQpCi17Ci0gICAg aW50IGk7Ci0gICAgdW5zaWduZWQgbG9uZyByZXM7Ci0gICAgdTY0IGFkZHIsIHNpemU7Ci0KLSAg ICAvKiBNYXAgYWxsIEFDUEkgdGFibGVzIHRvIERvbTAgdXNpbmcgMToxIG1hcHBpbmdzLiAqLwot ICAgIGZvciggaSA9IDA7IGkgPCBhY3BpX2dibF9yb290X3RhYmxlX2xpc3QuY291bnQ7IGkrKyAp Ci0gICAgewotICAgICAgICBhZGRyID0gYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1tp XS5hZGRyZXNzOwotICAgICAgICBzaXplID0gYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxl c1tpXS5sZW5ndGg7Ci0gICAgICAgIHJlcyA9IG1hcF9yZWdpb25zX3AybXQoZCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBnYWRkcl90b19nZm4oYWRkciksCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUEZOX1VQKHNpemUpLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1hZGRyX3RvX21mbihhZGRyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwMm1fbW1pb19kaXJlY3RfYyk7Ci0gICAgICAgIGlmICggcmVzICkKLSAgICAgICAgewotICAg ICAgICAgICAgIHBhbmljKFhFTkxPR19FUlIgIlVuYWJsZSB0byBtYXAgQUNQSSByZWdpb24gMHgl IlBSSXg2NAotICAgICAgICAgICAgICAgICAgICIgLSAweCUiUFJJeDY0IiBpbiBkb21haW4gXG4i LAotICAgICAgICAgICAgICAgICAgIGFkZHIgJiBQQUdFX01BU0ssIFBBR0VfQUxJR04oYWRkciAr IHNpemUpIC0gMSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXN0YXRpYyBpbnQgYWNwaV9jcmVh dGVfcnNkcChzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgbWVtYmFuayB0YmxfYWRkW10pCi17Ci0K LSAgICBzdHJ1Y3QgYWNwaV90YWJsZV9yc2RwICpyc2RwID0gTlVMTDsKLSAgICB1NjQgYWRkcjsK LSAgICB1NjQgdGFibGVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9yc2RwKTsKLSAg ICB1OCAqYmFzZV9wdHI7Ci0gICAgdTggY2hlY2tzdW07Ci0KLSAgICBhZGRyID0gYWNwaV9vc19n ZXRfcm9vdF9wb2ludGVyKCk7Ci0gICAgaWYgKCAhYWRkciAgKQotICAgIHsKLSAgICAgICAgcHJp bnRrKCJVbmFibGUgdG8gZ2V0IGFjcGkgcm9vdCBwb2ludGVyXG4iKTsKLSAgICAgICAgcmV0dXJu IC1FSU5WQUw7Ci0gICAgfQotICAgIHJzZHAgPSBhY3BpX29zX21hcF9tZW1vcnkoYWRkciwgdGFi bGVfc2l6ZSk7Ci0gICAgYmFzZV9wdHIgPSBkLT5hcmNoLmVmaV9hY3BpX3RhYmxlCi0gICAgICAg ICAgICAgICArIGFjcGlfZ2V0X3RhYmxlX29mZnNldCh0YmxfYWRkLCBUQkxfUlNEUCk7Ci0gICAg bWVtY3B5KGJhc2VfcHRyLCByc2RwLCB0YWJsZV9zaXplKTsKLSAgICBhY3BpX29zX3VubWFwX21l bW9yeShyc2RwLCB0YWJsZV9zaXplKTsKLQotICAgIHJzZHAgPSAoc3RydWN0IGFjcGlfdGFibGVf cnNkcCAqKWJhc2VfcHRyOwotICAgIC8qIFJlcGxhY2UgeHNkdF9waHlzaWNhbF9hZGRyZXNzICov Ci0gICAgcnNkcC0+eHNkdF9waHlzaWNhbF9hZGRyZXNzID0gdGJsX2FkZFtUQkxfWFNEVF0uc3Rh cnQ7Ci0gICAgY2hlY2tzdW0gPSBhY3BpX3RiX2NoZWNrc3VtKEFDUElfQ0FTVF9QVFIodTgsIHJz ZHApLCB0YWJsZV9zaXplKTsKLSAgICByc2RwLT5jaGVja3N1bSA9IHJzZHAtPmNoZWNrc3VtIC0g Y2hlY2tzdW07Ci0KLSAgICB0YmxfYWRkW1RCTF9SU0RQXS5zdGFydCA9IGQtPmFyY2guZWZpX2Fj cGlfZ3BhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGFjcGlfZ2V0X3RhYmxlX29m ZnNldCh0YmxfYWRkLCBUQkxfUlNEUCk7Ci0gICAgdGJsX2FkZFtUQkxfUlNEUF0uc2l6ZSA9IHRh YmxlX3NpemU7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgYWNwaV94c2R0X21v ZGlmeV9lbnRyeSh1NjQgZW50cnlbXSwgdW5zaWduZWQgbG9uZyBlbnRyeV9jb3VudCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqc2lnbmF0dXJlLCB1NjQgYWRkcikK LXsKLSAgICBpbnQgaTsKLSAgICBzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlOwotICAg IHU2NCBzaXplID0gc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcik7Ci0KLSAgICBmb3Io IGkgPSAwOyBpIDwgZW50cnlfY291bnQ7IGkrKyApCi0gICAgewotICAgICAgICB0YWJsZSA9IGFj cGlfb3NfbWFwX21lbW9yeShlbnRyeVtpXSwgc2l6ZSk7Ci0gICAgICAgIGlmICggQUNQSV9DT01Q QVJFX05BTUUodGFibGUtPnNpZ25hdHVyZSwgc2lnbmF0dXJlKSApCi0gICAgICAgIHsKLSAgICAg ICAgICAgIGVudHJ5W2ldID0gYWRkcjsKLSAgICAgICAgICAgIGFjcGlfb3NfdW5tYXBfbWVtb3J5 KHRhYmxlLCBzaXplKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGFj cGlfb3NfdW5tYXBfbWVtb3J5KHRhYmxlLCBzaXplKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbnQg YWNwaV9jcmVhdGVfeHNkdChzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgbWVtYmFuayB0YmxfYWRk W10pCi17Ci0gICAgc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSA9IE5VTEw7Ci0gICAg c3RydWN0IGFjcGlfdGFibGVfcnNkcCAqcnNkcF90Ymw7Ci0gICAgc3RydWN0IGFjcGlfdGFibGVf eHNkdCAqeHNkdCA9IE5VTEw7Ci0gICAgdTY0IHRhYmxlX3NpemUsIGFkZHI7Ci0gICAgdW5zaWdu ZWQgbG9uZyBlbnRyeV9jb3VudDsKLSAgICB1OCAqYmFzZV9wdHI7Ci0gICAgdTggY2hlY2tzdW07 Ci0KLSAgICBhZGRyID0gYWNwaV9vc19nZXRfcm9vdF9wb2ludGVyKCk7Ci0gICAgaWYgKCAhYWRk ciApCi0gICAgewotICAgICAgICBwcmludGsoIlVuYWJsZSB0byBnZXQgYWNwaSByb290IHBvaW50 ZXJcbiIpOwotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0gICAgcnNkcF90YmwgPSBh Y3BpX29zX21hcF9tZW1vcnkoYWRkciwgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX3JzZHApKTsK LSAgICB0YWJsZSA9IGFjcGlfb3NfbWFwX21lbW9yeShyc2RwX3RibC0+eHNkdF9waHlzaWNhbF9h ZGRyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgYWNw aV90YWJsZV9oZWFkZXIpKTsKLQotICAgIC8qIEFkZCBwbGFjZSBmb3IgU1RBTyB0YWJsZSBpbiBY U0RUIHRhYmxlICovCi0gICAgdGFibGVfc2l6ZSA9IHRhYmxlLT5sZW5ndGggKyBzaXplb2YodTY0 KTsKLSAgICBlbnRyeV9jb3VudCA9ICh0YWJsZS0+bGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBhY3Bp X3RhYmxlX2hlYWRlcikpCi0gICAgICAgICAgICAgICAgICAvIHNpemVvZih1NjQpOwotICAgIGJh c2VfcHRyID0gZC0+YXJjaC5lZmlfYWNwaV90YWJsZQotICAgICAgICAgICAgICAgKyBhY3BpX2dl dF90YWJsZV9vZmZzZXQodGJsX2FkZCwgVEJMX1hTRFQpOwotICAgIG1lbWNweShiYXNlX3B0ciwg dGFibGUsIHRhYmxlLT5sZW5ndGgpOwotICAgIGFjcGlfb3NfdW5tYXBfbWVtb3J5KHRhYmxlLCBz aXplb2Yoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyKSk7Ci0gICAgYWNwaV9vc191bm1hcF9tZW1v cnkocnNkcF90YmwsIHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9yc2RwKSk7Ci0KLSAgICB4c2R0 ID0gKHN0cnVjdCBhY3BpX3RhYmxlX3hzZHQgKiliYXNlX3B0cjsKLSAgICBhY3BpX3hzZHRfbW9k aWZ5X2VudHJ5KHhzZHQtPnRhYmxlX29mZnNldF9lbnRyeSwgZW50cnlfY291bnQsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICBBQ1BJX1NJR19GQURULCB0YmxfYWRkW1RCTF9GQURUXS5zdGFy dCk7Ci0gICAgYWNwaV94c2R0X21vZGlmeV9lbnRyeSh4c2R0LT50YWJsZV9vZmZzZXRfZW50cnks IGVudHJ5X2NvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNQSV9TSUdfTUFEVCwg dGJsX2FkZFtUQkxfTUFEVF0uc3RhcnQpOwotICAgIHhzZHQtPnRhYmxlX29mZnNldF9lbnRyeVtl bnRyeV9jb3VudF0gPSB0YmxfYWRkW1RCTF9TVEFPXS5zdGFydDsKLQotICAgIHhzZHQtPmhlYWRl ci5sZW5ndGggPSB0YWJsZV9zaXplOwotICAgIGNoZWNrc3VtID0gYWNwaV90Yl9jaGVja3N1bShB Q1BJX0NBU1RfUFRSKHU4LCB4c2R0KSwgdGFibGVfc2l6ZSk7Ci0gICAgeHNkdC0+aGVhZGVyLmNo ZWNrc3VtIC09IGNoZWNrc3VtOwotCi0gICAgdGJsX2FkZFtUQkxfWFNEVF0uc3RhcnQgPSBkLT5h cmNoLmVmaV9hY3BpX2dwYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBhY3BpX2dl dF90YWJsZV9vZmZzZXQodGJsX2FkZCwgVEJMX1hTRFQpOwotICAgIHRibF9hZGRbVEJMX1hTRFRd LnNpemUgPSB0YWJsZV9zaXplOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWNw aV9jcmVhdGVfc3RhbyhzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgbWVtYmFuayB0YmxfYWRkW10p Ci17Ci0gICAgc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSA9IE5VTEw7Ci0gICAgc3Ry dWN0IGFjcGlfdGFibGVfc3RhbyAqc3RhbyA9IE5VTEw7Ci0gICAgdTMyIHRhYmxlX3NpemUgPSBz aXplb2Yoc3RydWN0IGFjcGlfdGFibGVfc3Rhbyk7Ci0gICAgdTMyIG9mZnNldCA9IGFjcGlfZ2V0 X3RhYmxlX29mZnNldCh0YmxfYWRkLCBUQkxfU1RBTyk7Ci0gICAgYWNwaV9zdGF0dXMgc3RhdHVz OwotICAgIHU4ICpiYXNlX3B0ciwgY2hlY2tzdW07Ci0KLSAgICAvKiBDb3B5IE9FTSBhbmQgQVNM IGNvbXBpbGVyIGZpZWxkcyBmcm9tIGFub3RoZXIgdGFibGUsIHVzZSBNQURUICovCi0gICAgc3Rh dHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfTUFEVCwgMCwgJnRhYmxlKTsKLQotICAgIGlm ICggQUNQSV9GQUlMVVJFKHN0YXR1cykgKQotICAgIHsKLSAgICAgICAgY29uc3QgY2hhciAqbXNn ID0gYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHN0YXR1cyk7Ci0KLSAgICAgICAgcHJpbnRrKCJTVEFP OiBGYWlsZWQgdG8gZ2V0IE1BRFQgdGFibGUsICVzXG4iLCBtc2cpOwotICAgICAgICByZXR1cm4g LUVJTlZBTDsKLSAgICB9Ci0KLSAgICBiYXNlX3B0ciA9IGQtPmFyY2guZWZpX2FjcGlfdGFibGUg KyBvZmZzZXQ7Ci0gICAgbWVtY3B5KGJhc2VfcHRyLCB0YWJsZSwgc2l6ZW9mKHN0cnVjdCBhY3Bp X3RhYmxlX2hlYWRlcikpOwotCi0gICAgc3RhbyA9IChzdHJ1Y3QgYWNwaV90YWJsZV9zdGFvICop YmFzZV9wdHI7Ci0gICAgbWVtY3B5KHN0YW8tPmhlYWRlci5zaWduYXR1cmUsIEFDUElfU0lHX1NU QU8sIDQpOwotICAgIHN0YW8tPmhlYWRlci5yZXZpc2lvbiA9IDE7Ci0gICAgc3Rhby0+aGVhZGVy Lmxlbmd0aCA9IHRhYmxlX3NpemU7Ci0gICAgc3Rhby0+aWdub3JlX3VhcnQgPSAxOwotICAgIGNo ZWNrc3VtID0gYWNwaV90Yl9jaGVja3N1bShBQ1BJX0NBU1RfUFRSKHU4LCBzdGFvKSwgdGFibGVf c2l6ZSk7Ci0gICAgc3Rhby0+aGVhZGVyLmNoZWNrc3VtIC09IGNoZWNrc3VtOwotCi0gICAgdGJs X2FkZFtUQkxfU1RBT10uc3RhcnQgPSBkLT5hcmNoLmVmaV9hY3BpX2dwYSArIG9mZnNldDsKLSAg ICB0YmxfYWRkW1RCTF9TVEFPXS5zaXplID0gdGFibGVfc2l6ZTsKLQotICAgIHJldHVybiAwOwot fQotCi1zdGF0aWMgaW50IGFjcGlfY3JlYXRlX21hZHQoc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0 IG1lbWJhbmsgdGJsX2FkZFtdKQotewotICAgIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFi bGUgPSBOVUxMOwotICAgIHN0cnVjdCBhY3BpX3RhYmxlX21hZHQgKm1hZHQgPSBOVUxMOwotICAg IHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqaGVhZGVyOwotICAgIHN0cnVjdCBhY3BpX21h ZHRfZ2VuZXJpY19kaXN0cmlidXRvciAqZ2ljZDsKLSAgICB1MzIgdGFibGVfc2l6ZSA9IHNpemVv ZihzdHJ1Y3QgYWNwaV90YWJsZV9tYWR0KTsKLSAgICB1MzIgb2Zmc2V0ID0gYWNwaV9nZXRfdGFi bGVfb2Zmc2V0KHRibF9hZGQsIFRCTF9NQURUKTsKLSAgICBpbnQgcmV0OwotICAgIGFjcGlfc3Rh dHVzIHN0YXR1czsKLSAgICB1OCAqYmFzZV9wdHIsIGNoZWNrc3VtOwotCi0gICAgc3RhdHVzID0g YWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfTUFEVCwgMCwgJnRhYmxlKTsKLQotICAgIGlmICggQUNQ SV9GQUlMVVJFKHN0YXR1cykgKQotICAgIHsKLSAgICAgICAgY29uc3QgY2hhciAqbXNnID0gYWNw aV9mb3JtYXRfZXhjZXB0aW9uKHN0YXR1cyk7Ci0KLSAgICAgICAgcHJpbnRrKCJGYWlsZWQgdG8g Z2V0IE1BRFQgdGFibGUsICVzXG4iLCBtc2cpOwotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAg ICB9Ci0KLSAgICBiYXNlX3B0ciA9IGQtPmFyY2guZWZpX2FjcGlfdGFibGUgKyBvZmZzZXQ7Ci0g ICAgbWVtY3B5KGJhc2VfcHRyLCB0YWJsZSwgdGFibGVfc2l6ZSk7Ci0KLSAgICAvKiBBZGQgR2Vu ZXJpYyBEaXN0cmlidXRvci4gKi8KLSAgICBoZWFkZXIgPSBhY3BpX3RhYmxlX2dldF9lbnRyeV9t YWR0KEFDUElfTUFEVF9UWVBFX0dFTkVSSUNfRElTVFJJQlVUT1IsIDApOwotICAgIGlmICggIWhl YWRlciApCi0gICAgewotICAgICAgICBwcmludGsoIkNhbid0IGdldCBHSUNEIGVudHJ5XG4iKTsK LSAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgfQotICAgIGdpY2QgPSBjb250YWluZXJfb2Yo aGVhZGVyLCBzdHJ1Y3QgYWNwaV9tYWR0X2dlbmVyaWNfZGlzdHJpYnV0b3IsIGhlYWRlcik7Ci0g ICAgbWVtY3B5KGJhc2VfcHRyICsgdGFibGVfc2l6ZSwgZ2ljZCwKLSAgICAgICAgICAgICAgICBz aXplb2Yoc3RydWN0IGFjcGlfbWFkdF9nZW5lcmljX2Rpc3RyaWJ1dG9yKSk7Ci0gICAgdGFibGVf c2l6ZSArPSBzaXplb2Yoc3RydWN0IGFjcGlfbWFkdF9nZW5lcmljX2Rpc3RyaWJ1dG9yKTsKLQot ICAgIC8qIEFkZCBvdGhlciBzdWJ0YWJsZXMuICovCi0gICAgcmV0ID0gZ2ljX21ha2VfaHdkb21f bWFkdChkLCBvZmZzZXQgKyB0YWJsZV9zaXplKTsKLSAgICBpZiAoIHJldCA8IDAgKQotICAgIHsK LSAgICAgICAgcHJpbnRrKCJGYWlsZWQgdG8gZ2V0IG90aGVyIHN1YnRhYmxlc1xuIik7Ci0gICAg ICAgIHJldHVybiAtRUlOVkFMOwotICAgIH0KLSAgICB0YWJsZV9zaXplICs9IHJldDsKLQotICAg IG1hZHQgPSAoc3RydWN0IGFjcGlfdGFibGVfbWFkdCAqKWJhc2VfcHRyOwotICAgIG1hZHQtPmhl YWRlci5sZW5ndGggPSB0YWJsZV9zaXplOwotICAgIGNoZWNrc3VtID0gYWNwaV90Yl9jaGVja3N1 bShBQ1BJX0NBU1RfUFRSKHU4LCBtYWR0KSwgdGFibGVfc2l6ZSk7Ci0gICAgbWFkdC0+aGVhZGVy LmNoZWNrc3VtIC09IGNoZWNrc3VtOwotCi0gICAgdGJsX2FkZFtUQkxfTUFEVF0uc3RhcnQgPSBk LT5hcmNoLmVmaV9hY3BpX2dwYSArIG9mZnNldDsKLSAgICB0YmxfYWRkW1RCTF9NQURUXS5zaXpl ID0gdGFibGVfc2l6ZTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFjcGlfY3Jl YXRlX2ZhZHQoc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IG1lbWJhbmsgdGJsX2FkZFtdKQotewot ICAgIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGUgPSBOVUxMOwotICAgIHN0cnVjdCBh Y3BpX3RhYmxlX2ZhZHQgKmZhZHQgPSBOVUxMOwotICAgIHU2NCB0YWJsZV9zaXplOwotICAgIGFj cGlfc3RhdHVzIHN0YXR1czsKLSAgICB1OCAqYmFzZV9wdHI7Ci0gICAgdTggY2hlY2tzdW07Ci0K LSAgICBzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19GQURULCAwLCAmdGFibGUpOwot Ci0gICAgaWYgKCBBQ1BJX0ZBSUxVUkUoc3RhdHVzKSApCi0gICAgewotICAgICAgICBjb25zdCBj aGFyICptc2cgPSBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKTsKLQotICAgICAgICBwcmlu dGsoIkZhaWxlZCB0byBnZXQgRkFEVCB0YWJsZSwgJXNcbiIsIG1zZyk7Ci0gICAgICAgIHJldHVy biAtRUlOVkFMOwotICAgIH0KLQotICAgIHRhYmxlX3NpemUgPSB0YWJsZS0+bGVuZ3RoOwotICAg IGJhc2VfcHRyID0gZC0+YXJjaC5lZmlfYWNwaV90YWJsZQotICAgICAgICAgICAgICAgKyBhY3Bp X2dldF90YWJsZV9vZmZzZXQodGJsX2FkZCwgVEJMX0ZBRFQpOwotICAgIG1lbWNweShiYXNlX3B0 ciwgdGFibGUsIHRhYmxlX3NpemUpOwotICAgIGZhZHQgPSAoc3RydWN0IGFjcGlfdGFibGVfZmFk dCAqKWJhc2VfcHRyOwotCi0gICAgLyogU2V0IFBTQ0lfQ09NUExJQU5UIGFuZCBQU0NJX1VTRV9I VkMgKi8KLSAgICBmYWR0LT5hcm1fYm9vdF9mbGFncyB8PSAoQUNQSV9GQURUX1BTQ0lfQ09NUExJ QU5UIHwgQUNQSV9GQURUX1BTQ0lfVVNFX0hWQyk7Ci0gICAgY2hlY2tzdW0gPSBhY3BpX3RiX2No ZWNrc3VtKEFDUElfQ0FTVF9QVFIodTgsIGZhZHQpLCB0YWJsZV9zaXplKTsKLSAgICBmYWR0LT5o ZWFkZXIuY2hlY2tzdW0gLT0gY2hlY2tzdW07Ci0KLSAgICB0YmxfYWRkW1RCTF9GQURUXS5zdGFy dCA9IGQtPmFyY2guZWZpX2FjcGlfZ3BhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAr IGFjcGlfZ2V0X3RhYmxlX29mZnNldCh0YmxfYWRkLCBUQkxfRkFEVCk7Ci0gICAgdGJsX2FkZFtU QkxfRkFEVF0uc2l6ZSA9IHRhYmxlX3NpemU7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGlj IGludCBlc3RpbWF0ZV9hY3BpX2VmaV9zaXplKHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCBrZXJu ZWxfaW5mbyAqa2luZm8pCi17Ci0gICAgc2l6ZV90IGVmaV9zaXplLCBhY3BpX3NpemUsIG1hZHRf c2l6ZTsKLSAgICB1NjQgYWRkcjsKLSAgICBzdHJ1Y3QgYWNwaV90YWJsZV9yc2RwICpyc2RwX3Ri bDsKLSAgICBzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlOwotCi0gICAgZWZpX3NpemUg PSBlc3RpbWF0ZV9lZmlfc2l6ZShraW5mby0+bWVtLm5yX2JhbmtzKTsKLQotICAgIGFjcGlfc2l6 ZSA9IFJPVU5EVVAoc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2ZhZHQpLCA4KTsKLSAgICBhY3Bp X3NpemUgKz0gUk9VTkRVUChzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfc3RhbyksIDgpOwotCi0g ICAgbWFkdF9zaXplID0gZ2ljX2dldF9od2RvbV9tYWR0X3NpemUoZCk7Ci0gICAgYWNwaV9zaXpl ICs9IFJPVU5EVVAobWFkdF9zaXplLCA4KTsKLQotICAgIGFkZHIgPSBhY3BpX29zX2dldF9yb290 X3BvaW50ZXIoKTsKLSAgICBpZiAoICFhZGRyICkKLSAgICB7Ci0gICAgICAgIHByaW50aygiVW5h YmxlIHRvIGdldCBhY3BpIHJvb3QgcG9pbnRlclxuIik7Ci0gICAgICAgIHJldHVybiAtRUlOVkFM OwotICAgIH0KLQotICAgIHJzZHBfdGJsID0gYWNwaV9vc19tYXBfbWVtb3J5KGFkZHIsIHNpemVv ZihzdHJ1Y3QgYWNwaV90YWJsZV9yc2RwKSk7Ci0gICAgaWYgKCAhcnNkcF90YmwgKQotICAgIHsK LSAgICAgICAgcHJpbnRrKCJVbmFibGUgdG8gbWFwIFJTRFAgdGFibGVcbiIpOwotICAgICAgICBy ZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0KLSAgICB0YWJsZSA9IGFjcGlfb3NfbWFwX21lbW9yeShy c2RwX3RibC0+eHNkdF9waHlzaWNhbF9hZGRyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIpKTsKLSAgICBhY3BpX29zX3Vu bWFwX21lbW9yeShyc2RwX3RibCwgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX3JzZHApKTsKLSAg ICBpZiAoICF0YWJsZSApCi0gICAgewotICAgICAgICBwcmludGsoIlVuYWJsZSB0byBtYXAgWFNE VCB0YWJsZVxuIik7Ci0gICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgIH0KLQotICAgIC8qIEFk ZCBwbGFjZSBmb3IgU1RBTyB0YWJsZSBpbiBYU0RUIHRhYmxlICovCi0gICAgYWNwaV9zaXplICs9 IFJPVU5EVVAodGFibGUtPmxlbmd0aCArIHNpemVvZih1NjQpLCA4KTsKLSAgICBhY3BpX29zX3Vu bWFwX21lbW9yeSh0YWJsZSwgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcikpOwotCi0g ICAgYWNwaV9zaXplICs9IFJPVU5EVVAoc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX3JzZHApLCA4 KTsKLSAgICBkLT5hcmNoLmVmaV9hY3BpX2xlbiA9IFBBR0VfQUxJR04oUk9VTkRVUChlZmlfc2l6 ZSwgOCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBST1VORFVQKGFj cGlfc2l6ZSwgOCkpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcHJlcGFyZV9h Y3BpKHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCBrZXJuZWxfaW5mbyAqa2luZm8pCi17Ci0gICAg aW50IHJjID0gMDsKLSAgICBpbnQgb3JkZXI7Ci0gICAgc3RydWN0IG1lbWJhbmsgdGJsX2FkZFtU QkxfTU1BWF0gPSB7fTsKLQotICAgIHJjID0gZXN0aW1hdGVfYWNwaV9lZmlfc2l6ZShkLCBraW5m byk7Ci0gICAgaWYgKCByYyAhPSAwICkKLSAgICAgICAgcmV0dXJuIHJjOwotCi0gICAgb3JkZXIg PSBnZXRfb3JkZXJfZnJvbV9ieXRlcyhkLT5hcmNoLmVmaV9hY3BpX2xlbik7Ci0gICAgZC0+YXJj aC5lZmlfYWNwaV90YWJsZSA9IGFsbG9jX3hlbmhlYXBfcGFnZXMob3JkZXIsIDApOwotICAgIGlm ICggZC0+YXJjaC5lZmlfYWNwaV90YWJsZSA9PSBOVUxMICkKLSAgICB7Ci0gICAgICAgIHByaW50 aygidW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSFcbiIpOwotICAgICAgICByZXR1cm4gLUVOT01F TTsKLSAgICB9Ci0gICAgbWVtc2V0KGQtPmFyY2guZWZpX2FjcGlfdGFibGUsIDAsIGQtPmFyY2gu ZWZpX2FjcGlfbGVuKTsKLQotICAgIC8qCi0gICAgICogRm9yIEFDUEksIERvbTAgZG9lc24ndCB1 c2Uga2luZm8tPmdudHRhYl9zdGFydCB0byBnZXQgdGhlIGdyYW50IHRhYmxlCi0gICAgICogcmVn aW9uLiBTbyB3ZSB1c2UgaXQgYXMgdGhlIEFDUEkgdGFibGUgbWFwcGVkIGFkZHJlc3MuIEFsc28g aXQgbmVlZHMgdG8KLSAgICAgKiBjaGVjayBpZiB0aGUgc2l6ZSBvZiBncmFudCB0YWJsZSByZWdp b24gaXMgZW5vdWdoIGZvciB0aG9zZSBBQ1BJIHRhYmxlcy4KLSAgICAgKi8KLSAgICBkLT5hcmNo LmVmaV9hY3BpX2dwYSA9IGtpbmZvLT5nbnR0YWJfc3RhcnQ7Ci0gICAgaWYgKCBraW5mby0+Z250 dGFiX3NpemUgPCBkLT5hcmNoLmVmaV9hY3BpX2xlbiApCi0gICAgewotICAgICAgICBwcmludGso IlRoZSBncmFudCB0YWJsZSByZWdpb24gaXMgbm90IGVub3VnaCB0byBmaXQgdGhlIEFDUEkgdGFi bGVzIVxuIik7Ci0gICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgIH0KLQotICAgIHJjID0gYWNw aV9jcmVhdGVfZmFkdChkLCB0YmxfYWRkKTsKLSAgICBpZiAoIHJjICE9IDAgKQotICAgICAgICBy ZXR1cm4gcmM7Ci0KLSAgICByYyA9IGFjcGlfY3JlYXRlX21hZHQoZCwgdGJsX2FkZCk7Ci0gICAg aWYgKCByYyAhPSAwICkKLSAgICAgICAgcmV0dXJuIHJjOwotCi0gICAgcmMgPSBhY3BpX2NyZWF0 ZV9zdGFvKGQsIHRibF9hZGQpOwotICAgIGlmICggcmMgIT0gMCApCi0gICAgICAgIHJldHVybiBy YzsKLQotICAgIHJjID0gYWNwaV9jcmVhdGVfeHNkdChkLCB0YmxfYWRkKTsKLSAgICBpZiAoIHJj ICE9IDAgKQotICAgICAgICByZXR1cm4gcmM7Ci0KLSAgICByYyA9IGFjcGlfY3JlYXRlX3JzZHAo ZCwgdGJsX2FkZCk7Ci0gICAgaWYgKCByYyAhPSAwICkKLSAgICAgICAgcmV0dXJuIHJjOwotCi0g ICAgYWNwaV9tYXBfb3RoZXJfdGFibGVzKGQpOwotICAgIGFjcGlfY3JlYXRlX2VmaV9zeXN0ZW1f dGFibGUoZCwgdGJsX2FkZCk7Ci0gICAgYWNwaV9jcmVhdGVfZWZpX21tYXBfdGFibGUoZCwgJmtp bmZvLT5tZW0sIHRibF9hZGQpOwotCi0gICAgLyogTWFwIHRoZSBFRkkgYW5kIEFDUEkgdGFibGVz IHRvIERvbTAgKi8KLSAgICByYyA9IG1hcF9yZWdpb25zX3AybXQoZCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgZ2FkZHJfdG9fZ2ZuKGQtPmFyY2guZWZpX2FjcGlfZ3BhKSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgUEZOX1VQKGQtPmFyY2guZWZpX2FjcGlfbGVuKSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgdmlydF90b19tZm4oZC0+YXJjaC5lZmlfYWNwaV90YWJsZSksCi0g ICAgICAgICAgICAgICAgICAgICAgICAgIHAybV9tbWlvX2RpcmVjdF9jKTsKLSAgICBpZiAoIHJj ICE9IDAgKQotICAgIHsKLSAgICAgICAgcHJpbnRrKFhFTkxPR19FUlIgIlVuYWJsZSB0byBtYXAg RUZJL0FDUEkgdGFibGUgMHglIlBSSXg2NAotICAgICAgICAgICAgICAgIiAtIDB4JSJQUkl4NjQi IGluIGRvbWFpbiAlZFxuIiwKLSAgICAgICAgICAgICAgIGQtPmFyY2guZWZpX2FjcGlfZ3BhICYg UEFHRV9NQVNLLAotICAgICAgICAgICAgICAgUEFHRV9BTElHTihkLT5hcmNoLmVmaV9hY3BpX2dw YSArIGQtPmFyY2guZWZpX2FjcGlfbGVuKSAtIDEsCi0gICAgICAgICAgICAgICBkLT5kb21haW5f aWQpOwotICAgICAgICByZXR1cm4gcmM7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBGbHVzaCB0 aGUgY2FjaGUgZm9yIHRoaXMgcmVnaW9uLCBvdGhlcndpc2UgRE9NMCBtYXkgcmVhZCB3cm9uZyBk YXRhIHdoZW4KLSAgICAgKiB0aGUgY2FjaGUgaXMgZGlzYWJsZWQuCi0gICAgICovCi0gICAgY2xl YW5fYW5kX2ludmFsaWRhdGVfZGNhY2hlX3ZhX3JhbmdlKGQtPmFyY2guZWZpX2FjcGlfdGFibGUs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQtPmFyY2guZWZpX2Fj cGlfbGVuKTsKLQotICAgIHJjID0gY3JlYXRlX2FjcGlfZHRiKGtpbmZvLCB0YmxfYWRkKTsKLSAg ICBpZiAoIHJjICE9IDAgKQotICAgICAgICByZXR1cm4gcmM7Ci0KLSAgICByYyA9IGFjcGlfcm91 dGVfc3BpcyhkKTsKLSAgICBpZiAoIHJjICE9IDAgKQotICAgICAgICByZXR1cm4gcmM7Ci0KLSAg ICByYyA9IGFjcGlfaW9tZW1fZGVueV9hY2Nlc3MoZCk7Ci0gICAgaWYgKCByYyAhPSAwICkKLSAg ICAgICAgcmV0dXJuIHJjOwotCi0gICAgLyoKLSAgICAgKiBBbGwgUFBJcyBoYXZlIGJlZW4gcmVn aXN0ZXJlZCwgYWxsb2NhdGUgdGhlIGV2ZW50IGNoYW5uZWwKLSAgICAgKiBpbnRlcnJ1cHRzLgot ICAgICAqLwotICAgIGV2dGNobl9hbGxvY2F0ZShkKTsKLQotICAgIHJldHVybiAwOwotfQotI2Vs c2UKLXN0YXRpYyBpbnQgcHJlcGFyZV9hY3BpKHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCBrZXJu ZWxfaW5mbyAqa2luZm8pCi17Ci0gICAgLyogT25seSBib290aW5nIHdpdGggQUNQSSB3aWxsIGhp dCBoZXJlICovCi0gICAgQlVHKCk7Ci0gICAgcmV0dXJuIC1FSU5WQUw7Ci19Ci0jZW5kaWYKIHN0 YXRpYyB2b2lkIGR0Yl9sb2FkKHN0cnVjdCBrZXJuZWxfaW5mbyAqa2luZm8pCiB7CiAgICAgdW5z aWduZWQgbG9uZyBsZWZ0OwpAQCAtMjM0Myw3ICsxNzcxLDcgQEAgc3RhdGljIHZvaWQgaW5pdHJk X2xvYWQoc3RydWN0IGtlcm5lbF9pbmZvICpraW5mbykKICAqIE5vdGUgdGhhdCB0aGlzIHNob3Vs ZCBvbmx5IGJlIGNhbGxlZCBvbmNlIGFsbCBQUElzIHVzZWQgYnkgdGhlCiAgKiBoYXJkd2FyZSBk b21haW4gaGF2ZSBiZWVuIHJlZ2lzdGVyZWQuCiAgKi8KLXN0YXRpYyB2b2lkIGV2dGNobl9hbGxv Y2F0ZShzdHJ1Y3QgZG9tYWluICpkKQordm9pZCBldnRjaG5fYWxsb2NhdGUoc3RydWN0IGRvbWFp biAqZCkKIHsKICAgICBpbnQgcmVzOwogICAgIHU2NCB2YWw7Ci0tIAoxLjkuMQoKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5n IGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJv amVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=