From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?utf-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= Subject: [PATCH 1/9] PM: Add suspend block api. Date: Tue, 5 May 2009 21:18:41 -0700 Message-ID: <1241583529-5092-2-git-send-email-arve@android.com> References: <1241583529-5092-1-git-send-email-arve@android.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1241583529-5092-1-git-send-email-arve@android.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: linux-pm-bounces@lists.linux-foundation.org Errors-To: linux-pm-bounces@lists.linux-foundation.org To: linux-pm@lists.linux-foundation.org Cc: ncunningham@crca.org.au, u.luckas@road.de, swetland@google.com List-Id: linux-pm@vger.kernel.org QWRkcyAvc3lzL3Bvd2VyL3JlcXVlc3Rfc3RhdGUsIGEgbm9uLWJsb2NraW5nIGludGVyZmFjZSB0 aGF0IHNwZWNpZmllcwp3aGljaCBzdXNwZW5kIHN0YXRlIHRvIGVudGVyIHdoZW4gbm8gc3VzcGVu ZCBibG9ja2VycyBhcmUgYWN0aXZlLiBBCnNwZWNpYWwgc3RhdGUsICJvbiIsIHN0b3BzIHRoZSBw cm9jZXNzIGJ5IGFjdGl2YXRpbmcgdGhlICJtYWluIiBzdXNwZW5kCmJsb2NrZXIuCgpTaWduZWQt b2ZmLWJ5OiBBcnZlIEhqw7hubmV2w6VnIDxhcnZlQGFuZHJvaWQuY29tPgotLS0KIERvY3VtZW50 YXRpb24vcG93ZXIvc3VzcGVuZC1ibG9ja2Vycy50eHQgfCAgIDk0ICsrKysrKysrKysrKysKIGlu Y2x1ZGUvbGludXgvc3VzcGVuZF9ibG9ja2VyLmggICAgICAgICAgfCAgIDYwICsrKysrKysrKwog a2VybmVsL3Bvd2VyL0tjb25maWcgICAgICAgICAgICAgICAgICAgICB8ICAgMTAgKysKIGtlcm5l bC9wb3dlci9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgfCAgICAxICsKIGtlcm5lbC9wb3dl ci9tYWluLmMgICAgICAgICAgICAgICAgICAgICAgfCAgIDYyICsrKysrKysrKy0KIGtlcm5lbC9w b3dlci9wb3dlci5oICAgICAgICAgICAgICAgICAgICAgfCAgICA0ICsKIGtlcm5lbC9wb3dlci9z dXNwZW5kX2Jsb2NrZXIuYyAgICAgICAgICAgfCAgMjA5ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwogNyBmaWxlcyBjaGFuZ2VkLCA0MzkgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMo LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL3Bvd2VyL3N1c3BlbmQtYmxvY2tl cnMudHh0CiBjcmVhdGUgbW9kZSAxMDA3NTUgaW5jbHVkZS9saW51eC9zdXNwZW5kX2Jsb2NrZXIu aAogY3JlYXRlIG1vZGUgMTAwNjQ0IGtlcm5lbC9wb3dlci9zdXNwZW5kX2Jsb2NrZXIuYwoKZGlm ZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXIvc3VzcGVuZC1ibG9ja2Vycy50eHQgYi9Eb2N1 bWVudGF0aW9uL3Bvd2VyL3N1c3BlbmQtYmxvY2tlcnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjVhMzNlZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9u L3Bvd2VyL3N1c3BlbmQtYmxvY2tlcnMudHh0CkBAIC0wLDAgKzEsOTQgQEAKK1N1c3BlbmQgYmxv Y2tlcnMKKz09PT09PT09PT09PT09PT0KKworU3VzcGVuZCBibG9ja2VycyBwcm92aWRlIGEgbWVj aGFuaXNtIGZvciBkZXZpY2UgZHJpdmVycyBhbmQgdXNlci1zcGFjZSBwcm9jZXNzZXMKK3RvIHBy ZXZlbnQgdGhlIHN5c3RlbSBmcm9tIGVudGVyaW5nIHN1c3BlbmQuIE9ubHkgc3VzcGVuZCBzdGF0 ZXMgcmVxdWVzdGVkCit0aHJvdWdoIC9zeXMvcG93ZXIvcmVxdWVzdF9zdGF0ZSBhcmUgcHJldmVu dGVkLiBXcml0aW5nIHRvIC9zeXMvcG93ZXIvc3RhdGUKK3dpbGwgaWdub3JlIHN1c3BlbmQgYmxv Y2tlcnMsIGFuZCBzbGVlcCBzdGF0ZXMgZW50ZXJlZCBmcm9tIGlkbGUgYXJlIHVuYWZmZWN0ZWQu CisKK1RvIHVzZSBhIHN1c3BlbmQgYmxvY2tlciwgYSBkZXZpY2UgZHJpdmVyIG5lZWRzIGEgc3Ry dWN0IHN1c3BlbmRfYmxvY2tlciBvYmplY3QKK3RoYXQgaGFzIHRvIGJlIGluaXRpYWxpemVkIHdp dGggc3VzcGVuZF9ibG9ja2VyX2luaXQuIFdoZW4gbm8gbG9uZ2VyIG5lZWRlZCwKK3RoZSBzdXNw ZW5kIGJsb2NrZXIgbXVzdCBiZSBkZXN0cm95ZWQgd2l0aCBzdXNwZW5kX2Jsb2NrZXJfZGVzdHJv eS4KKworQSBzdXNwZW5kIGJsb2NrZXIgaXMgYWN0aXZhdGVkIHVzaW5nIHN1c3BlbmRfYmxvY2ss IHdoaWNoIHByZXZlbnRzIHRoZSBzeXN0ZW0KK2Zyb20gZW50ZXJpbmcgc3VzcGVuZCB1bnRpbCB0 aGUgc3VzcGVuZCBibG9ja2VyIGlzIGRlYWN0aXZhdGVkIHdpdGgKK3N1c3BlbmRfdW5ibG9jay4g TWFueSBzdXNwZW5kIGJsb2NrZXJzIG1heSBiZSB1c2VkIHNpbXVsdGFuZW91c2x5LCBhbmQgdGhl CitzeXN0ZW0gaXMgcHJldmVudGVkIGZyb20gZW50ZXJpbmcgc3VzcGVuZCBhcyBsb25nIGFzIGF0 IGxlYXN0IG9uZSBvZiB0aGVtIGlzCithY3RpdmUuCisKK0lmIHRoZSBzdXNwZW5kIG9wZXJhdGlv biBoYXMgYWxyZWFkeSBzdGFydGVkIHdoZW4gY2FsbGluZyBzdXNwZW5kX2Jsb2NrIG9uIGEKK3N1 c3BlbmRfYmxvY2tlciwgaXQgd2lsbCBhYm9ydCB0aGUgc3VzcGVuZCBvcGVyYXRpb24gYXMgbG9u ZyBpdCBoYXMgbm90IGFscmVhZHkKK3JlYWNoZWQgY2FsbGVkIHN1c3BlbmRfb3BzLT5lbnRlci4g VGhpcyBtZWFucyB0aGF0IGNhbGxpbmcgc3VzcGVuZF9ibG9jayBmcm9tIGFuCitpbnRlcnJ1cHQg aGFuZGxlciBvciBhIGZyZWV6ZWFibGUgdGhyZWFkIGFsd2F5cyB3b3JrcywgYnV0IHNvbWUgb3Ig YWxsIGRyaXZlcnMKK21heSBiZSB0ZW1wb3JhcmlseSBzdXNwZW5kZWQuCisKK0luIGNlbGwgcGhv bmVzIG9yIG90aGVyIGVtYmVkZGVkIHN5c3RlbXMgd2hlcmUgcG93ZXJpbmcgdGhlIHNjcmVlbiBp cyBhCitzaWduaWZpY2FudCBkcmFpbiBvbiB0aGUgYmF0dGVyeSwgc3VzcGVuZCBibG9ja2VycyBj YW4gYmUgdXNlZCB0byBhbGxvdwordXNlci1zcGFjZSB0byBkZWNpZGUgd2hldGhlciBhIGtleXN0 cm9rZSByZWNlaXZlZCB3aGlsZSB0aGUgc3lzdGVtIGlzIHN1c3BlbmRlZAorc2hvdWxkIGNhdXNl IHRoZSBzY3JlZW4gdG8gYmUgdHVybmVkIGJhY2sgb24gb3IgYWxsb3cgdGhlIHN5c3RlbSB0byBn byBiYWNrIGludG8KK3N1c3BlbmQuIFVzZSBzZXRfaXJxX3dha2Ugb3IgYSBwbGF0Zm9ybSBzcGVj aWZpYyBhcGkgdG8gbWFrZSBzdXJlIHRoZSBrZXlwYWQKK2ludGVycnVwdCB3YWtlcyB1cCB0aGUg Y3B1LiBPbmNlIHRoZSBrZXlwYWQgZHJpdmVyIGhhcyByZXN1bWVkLCB0aGUgc2VxdWVuY2Ugb2YK K2V2ZW50cyBjYW4gbG9vayBsaWtlIHRoaXM6CisKKy0gVGhlIEtleXBhZCBkcml2ZXIgZ2V0cyBh biBpbnRlcnJ1cHQuIEl0IHRoZW4gY2FsbHMgc3VzcGVuZF9ibG9jayBvbiB0aGUKKyAga2V5cGFk LXNjYW4gc3VzcGVuZF9ibG9ja2VyIGFuZCBzdGFydHMgc2Nhbm5pbmcgdGhlIGtleXBhZCBtYXRy aXguCistIFRoZSBrZXlwYWQtc2NhbiBjb2RlIGRldGVjdHMgYSBrZXkgY2hhbmdlIGFuZCByZXBv cnRzIGl0IHRvIHRoZSBpbnB1dC1ldmVudAorICBkcml2ZXIuCistIFRoZSBpbnB1dC1ldmVudCBk cml2ZXIgc2VlcyB0aGUga2V5IGNoYW5nZSwgZW5xdWV1ZXMgYW4gZXZlbnQsIGFuZCBjYWxscwor ICBzdXNwZW5kX2Jsb2NrIG9uIHRoZSBpbnB1dC1ldmVudC1xdWV1ZSBzdXNwZW5kX2Jsb2NrZXIu CistIFRoZSBrZXlwYWQtc2NhbiBjb2RlIGRldGVjdHMgdGhhdCBubyBrZXlzIGFyZSBoZWxkIGFu ZCBjYWxscyBzdXNwZW5kX3VuYmxvY2sKKyAgb24gdGhlIGtleXBhZC1zY2FuIHN1c3BlbmRfYmxv Y2tlci4KKy0gVGhlIHVzZXItc3BhY2UgaW5wdXQtZXZlbnQgdGhyZWFkIHJldHVybnMgZnJvbSBz ZWxlY3QvcG9sbCwgY2FsbHMKKyAgc3VzcGVuZF9ibG9jayBvbiB0aGUgcHJvY2Vzcy1pbnB1dC1l dmVudHMgc3VzcGVuZF9ibG9ja2VyIGFuZCB0aGVuIGNhbGxzIHJlYWQKKyAgb24gdGhlIGlucHV0 LWV2ZW50IGRldmljZS4KKy0gVGhlIGlucHV0LWV2ZW50IGRyaXZlciBkZXF1ZXVlcyB0aGUga2V5 LWV2ZW50IGFuZCwgc2luY2UgdGhlIHF1ZXVlIGlzIG5vdworICBlbXB0eSwgaXQgY2FsbHMgc3Vz cGVuZF91bmJsb2NrIG9uIHRoZSBpbnB1dC1ldmVudC1xdWV1ZSBzdXNwZW5kX2Jsb2NrZXIuCist IFRoZSB1c2VyLXNwYWNlIGlucHV0LWV2ZW50IHRocmVhZCByZXR1cm5zIGZyb20gcmVhZC4gSWYg aXQgZGV0ZXJtaW5lcyB0aGF0CisgIHRoZSBrZXkgc2hvdWxkIGxlYXZlIHRoZSBzY3JlZW4gb2Zm LCBpdCBjYWxscyBzdXNwZW5kX3VuYmxvY2sgb24gdGhlCisgIHByb2Nlc3NfaW5wdXRfZXZlbnRz IHN1c3BlbmRfYmxvY2tlciBhbmQgdGhlbiBjYWxscyBzZWxlY3Qgb3IgcG9sbC4gVGhlCisgIHN5 c3RlbSB3aWxsIGF1dG9tYXRpY2FsbHkgc3VzcGVuZCBhZ2Fpbiwgc2luY2Ugbm93IG5vIHN1c3Bl bmQgYmxvY2tlcnMgYXJlCisgIGFjdGl2ZS4KKworICAgICAgICAgICAgICAgICBLZXkgcHJlc3Nl ZCAgIEtleSByZWxlYXNlZAorICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8Citr ZXlwYWQtc2NhbiAgICAgICAgICArKysrKysrKysrKysrKysrKysKK2lucHV0LWV2ZW50LXF1ZXVl ICAgICAgICArKysgICAgICAgICAgKysrCitwcm9jZXNzLWlucHV0LWV2ZW50cyAgICAgICArKysg ICAgICAgICAgKysrCisKKworRHJpdmVyIEFQSQorPT09PT09PT09PQorCitBIGRyaXZlciBjYW4g dXNlIHRoZSBzdXNwZW5kIGJsb2NrIGFwaSBieSBhZGRpbmcgYSBzdXNwZW5kX2Jsb2NrZXIgdmFy aWFibGUgdG8KK2l0cyBzdGF0ZSBhbmQgY2FsbGluZyBzdXNwZW5kX2Jsb2NrZXJfaW5pdC4gRm9y IGluc3RhbmNlOgorc3RydWN0IHN0YXRlIHsKKwlzdHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyIHN1c3Bl bmRfYmxvY2tlcjsKK30KKworaW5pdCgpIHsKKwlzdXNwZW5kX2Jsb2NrZXJfaW5pdCgmc3RhdGUt PnN1c3BlbmRfYmxvY2tlciwgInN1c3BlbmQtYmxvY2tlci1uYW1lIik7Cit9CisKK0JlZm9yZSBm cmVlaW5nIHRoZSBtZW1vcnksIHN1c3BlbmRfYmxvY2tlcl9kZXN0cm95IG11c3QgYmUgY2FsbGVk OgorCit1bmluaXQoKSB7CisJc3VzcGVuZF9ibG9ja2VyX2Rlc3Ryb3koJnN0YXRlLT5zdXNwZW5k X2Jsb2NrZXIpOworfQorCitXaGVuIHRoZSBkcml2ZXIgZGV0ZXJtaW5lcyB0aGF0IGl0IG5lZWRz IHRvIHJ1biAodXN1YWxseSBpbiBhbiBpbnRlcnJ1cHQKK2hhbmRsZXIpIGl0IGNhbGxzIHN1c3Bl bmRfYmxvY2s6CisJc3VzcGVuZF9ibG9jaygmc3RhdGUtPnN1c3BlbmRfYmxvY2tlcik7CisKK1do ZW4gaXQgbm8gbG9uZ2VyIG5lZWRzIHRvIHJ1biBpdCBjYWxscyBzdXNwZW5kX3VuYmxvY2s6CisJ c3VzcGVuZF91bmJsb2NrKCZzdGF0ZS0+c3VzcGVuZF9ibG9ja2VyKTsKKworQ2FsbGluZyBzdXNw ZW5kX2Jsb2NrIHdoZW4gdGhlIHN1c3BlbmQgYmxvY2tlciBpcyBhY3RpdmUgb3Igc3VzcGVuZF91 bmJsb2NrIHdoZW4KK2l0IGlzIG5vdCBhY3RpdmUgaGFzIG5vIGVmZmVjdC4gVGhpcyBhbGxvd3Mg ZHJpdmVycyB0byB1cGRhdGUgdGhlaXIgc3RhdGUgYW5kCitjYWxsIHN1c3BlbmQgc3VzcGVuZF9i bG9jayBvciBzdXNwZW5kX3VuYmxvY2sgYmFzZWQgb24gdGhlIHJlc3VsdC4KK0ZvciBpbnN0YW5j ZToKKworaWYgKGxpc3RfZW1wdHkoJnN0YXRlLT5wZW5kaW5nX3dvcmspKQorCXN1c3BlbmRfdW5i bG9jaygmc3RhdGUtPnN1c3BlbmRfYmxvY2tlcik7CitlbHNlCisJc3VzcGVuZF9ibG9jaygmc3Rh dGUtPnN1c3BlbmRfYmxvY2tlcik7CisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VzcGVu ZF9ibG9ja2VyLmggYi9pbmNsdWRlL2xpbnV4L3N1c3BlbmRfYmxvY2tlci5oCm5ldyBmaWxlIG1v ZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIxNjg5Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNs dWRlL2xpbnV4L3N1c3BlbmRfYmxvY2tlci5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qIGluY2x1ZGUv bGludXgvc3VzcGVuZF9ibG9ja2VyLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBH b29nbGUsIEluYy4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJl IGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAq CisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9MSU5VWF9TVVNQRU5E X0JMT0NLRVJfSAorI2RlZmluZSBfTElOVVhfU1VTUEVORF9CTE9DS0VSX0gKKworLyoqCisgKiBz dHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyIC0gdGhlIGJhc2ljIHN1c3BlbmRfYmxvY2tlciBzdHJ1Y3R1 cmUKKyAqIEBmbGFnczoJVHJhY2tzIGluaXRpYWxpemVkIGFuZCBhY3RpdmUgc3RhdGUuCisgKiBA bmFtZToJTmFtZSB1c2VkIGZvciBkZWJ1Z2dpbmcuCisgKgorICogV2hlbiBhIHN1c3BlbmRfYmxv Y2tlciBpcyBhY3RpdmUgaXQgcHJldmVudHMgdGhlIHN5c3RlbSBmcm9tIGVudGVyaW5nCisgKiBz dXNwZW5kLgorICoKKyAqIFRoZSBzdXNwZW5kX2Jsb2NrZXIgc3RydWN0dXJlIG11c3QgYmUgaW5p dGlhbGl6ZWQgYnkgc3VzcGVuZF9ibG9ja2VyX2luaXQoKQorICovCisKK3N0cnVjdCBzdXNwZW5k X2Jsb2NrZXIgeworI2lmZGVmIENPTkZJR19TVVNQRU5EX0JMT0NLRVJTCisJYXRvbWljX3QgICAg ICAgICAgICBmbGFnczsKKwljb25zdCBjaGFyICAgICAgICAgKm5hbWU7CisjZW5kaWYKK307CisK KyNpZmRlZiBDT05GSUdfU1VTUEVORF9CTE9DS0VSUworCit2b2lkIHN1c3BlbmRfYmxvY2tlcl9p bml0KHN0cnVjdCBzdXNwZW5kX2Jsb2NrZXIgKmJsb2NrZXIsIGNvbnN0IGNoYXIgKm5hbWUpOwor dm9pZCBzdXNwZW5kX2Jsb2NrZXJfZGVzdHJveShzdHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyICpibG9j a2VyKTsKK3ZvaWQgc3VzcGVuZF9ibG9jayhzdHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyICpibG9ja2Vy KTsKK3ZvaWQgc3VzcGVuZF91bmJsb2NrKHN0cnVjdCBzdXNwZW5kX2Jsb2NrZXIgKmJsb2NrZXIp OworYm9vbCBzdXNwZW5kX2Jsb2NrZXJfaXNfYWN0aXZlKHN0cnVjdCBzdXNwZW5kX2Jsb2NrZXIg KmJsb2NrZXIpOworYm9vbCBzdXNwZW5kX2lzX2Jsb2NrZWQodm9pZCk7CisKKyNlbHNlCisKK3N0 YXRpYyBpbmxpbmUgdm9pZCBzdXNwZW5kX2Jsb2NrZXJfaW5pdChzdHJ1Y3Qgc3VzcGVuZF9ibG9j a2VyICpibG9ja2VyLAorCQkJCQljb25zdCBjaGFyICpuYW1lKSB7fQorc3RhdGljIGlubGluZSB2 b2lkIHN1c3BlbmRfYmxvY2tlcl9kZXN0cm95KHN0cnVjdCBzdXNwZW5kX2Jsb2NrZXIgKmJsb2Nr ZXIpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgc3VzcGVuZF9ibG9jayhzdHJ1Y3Qgc3VzcGVuZF9i bG9ja2VyICpibG9ja2VyKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHN1c3BlbmRfdW5ibG9jayhz dHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyICpibG9ja2VyKSB7fQorc3RhdGljIGlubGluZSBib29sIHN1 c3BlbmRfYmxvY2tlcl9pc19hY3RpdmUoc3RydWN0IHN1c3BlbmRfYmxvY2tlciAqYmwpCisJCQkJ CQkJCXsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgYm9vbCBzdXNwZW5kX2lzX2Jsb2NrZWQo dm9pZCkgeyByZXR1cm4gMDsgfQorCisjZW5kaWYKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2tl cm5lbC9wb3dlci9LY29uZmlnIGIva2VybmVsL3Bvd2VyL0tjb25maWcKaW5kZXggMjNiZDRkYS4u YTM1ODdkMyAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL0tjb25maWcKKysrIGIva2VybmVsL3Bv d2VyL0tjb25maWcKQEAgLTExNiw2ICsxMTYsMTYgQEAgY29uZmlnIFNVU1BFTkRfRlJFRVpFUgog CiAJICBUdXJuaW5nIE9GRiB0aGlzIHNldHRpbmcgaXMgTk9UIHJlY29tbWVuZGVkISBJZiBpbiBk b3VidCwgc2F5IFkuCiAKK2NvbmZpZyBTVVNQRU5EX0JMT0NLRVJTCisJYm9vbCAiU3VzcGVuZCBi bG9ja2VycyIKKwlkZXBlbmRzIG9uIFBNCisJc2VsZWN0IFJUQ19MSUIKKwlkZWZhdWx0IG4KKwkt LS1oZWxwLS0tCisJICBFbmFibGUgc3VzcGVuZCBibG9ja2Vycy4gV2hlbiB1c2VyIHNwYWNlIHJl cXVlc3RzIGEgc2xlZXAgc3RhdGUKKwkgIHRocm91Z2ggL3N5cy9wb3dlci9yZXF1ZXN0X3N0YXRl LCB0aGUgcmVxdWVzdGVkIHNsZWVwIHN0YXRlIHdpbGwgYmUKKwkgIGVudGVyZWQgd2hlbiBubyBz dXNwZW5kIGJsb2NrZXJzIGFyZSBhY3RpdmUuCisKIGNvbmZpZyBISUJFUk5BVElPTgogCWJvb2wg IkhpYmVybmF0aW9uIChha2EgJ3N1c3BlbmQgdG8gZGlzaycpIgogCWRlcGVuZHMgb24gUE0gJiYg U1dBUCAmJiBBUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93 ZXIvTWFrZWZpbGUgYi9rZXJuZWwvcG93ZXIvTWFrZWZpbGUKaW5kZXggNzIwZWE0Zi4uZThjN2Y4 NSAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL01ha2VmaWxlCisrKyBiL2tlcm5lbC9wb3dlci9N YWtlZmlsZQpAQCAtNiw2ICs2LDcgQEAgZW5kaWYKIG9iai0kKENPTkZJR19QTSkJCSs9IG1haW4u bwogb2JqLSQoQ09ORklHX1BNX1NMRUVQKQkJKz0gY29uc29sZS5vCiBvYmotJChDT05GSUdfRlJF RVpFUikJCSs9IHByb2Nlc3Mubworb2JqLSQoQ09ORklHX1NVU1BFTkRfQkxPQ0tFUlMpCSs9IHN1 c3BlbmRfYmxvY2tlci5vCiBvYmotJChDT05GSUdfSElCRVJOQVRJT04pCSs9IHN3c3VzcC5vIGRp c2subyBzbmFwc2hvdC5vIHN3YXAubyB1c2VyLm8KIAogb2JqLSQoQ09ORklHX01BR0lDX1NZU1JR KQkrPSBwb3dlcm9mZi5vCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvbWFpbi5jIGIva2VybmVs L3Bvd2VyL21haW4uYwppbmRleCBmOTllZDZhLi4xODk5Y2RhIDEwMDY0NAotLS0gYS9rZXJuZWwv cG93ZXIvbWFpbi5jCisrKyBiL2tlcm5lbC9wb3dlci9tYWluLmMKQEAgLTIyLDYgKzIyLDcgQEAK ICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CiAjaW5jbHVkZSA8bGludXgvdm1zdGF0Lmg+CiAj aW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kX2Jsb2Nr ZXIuaD4KIAogI2luY2x1ZGUgInBvd2VyLmgiCiAKQEAgLTMyMSw3ICszMjIsNyBAQCBzdGF0aWMg aW50IHN1c3BlbmRfZW50ZXIoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQogCiAJZXJyb3IgPSBzeXNk ZXZfc3VzcGVuZChQTVNHX1NVU1BFTkQpOwogCWlmICghZXJyb3IpIHsKLQkJaWYgKCFzdXNwZW5k X3Rlc3QoVEVTVF9DT1JFKSkKKwkJaWYgKCFzdXNwZW5kX2lzX2Jsb2NrZWQoKSAmJiAhc3VzcGVu ZF90ZXN0KFRFU1RfQ09SRSkpCiAJCQllcnJvciA9IHN1c3BlbmRfb3BzLT5lbnRlcihzdGF0ZSk7 CiAJCXN5c2Rldl9yZXN1bWUoKTsKIAl9CkBAIC00MTMsNiArNDE0LDcgQEAgc3RhdGljIHZvaWQg c3VzcGVuZF9maW5pc2godm9pZCkKIAogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBtX3N0 YXRlc1tQTV9TVVNQRU5EX01BWF0gPSB7CisJW1BNX1NVU1BFTkRfT05dCQk9ICJvbiIsCiAJW1BN X1NVU1BFTkRfU1RBTkRCWV0JPSAic3RhbmRieSIsCiAJW1BNX1NVU1BFTkRfTUVNXQk9ICJtZW0i LAogfTsKQEAgLTU2MSw2ICs1NjMsNjEgQEAgc3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3Ry dWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKIAogcG93ZXJf YXR0cihzdGF0ZSk7CiAKKy8qKgorICoJcmVxdWVzdF9zdGF0ZSAtIGNvbnRyb2wgc3lzdGVtIHBv d2VyIHN0YXRlLgorICoKKyAqCVRoaXMgaXMgc2ltaWxhciB0byBzdGF0ZSwgYnV0IGl0IGRvZXMg bm90IGJsb2NrIHVudGlsIHRoZSBzeXN0ZW0KKyAqCXJlc3VtZXMsIGFuZCBpdCB3aWxsIHRyeSB0 byByZS1lbnRlciB0aGUgc3RhdGUgdW50aWwgYW5vdGhlciBzdGF0ZSBpcworICoJcmVxdWVzdGVk LiBTdXNwZW5kIGJsb2NrZXJzIGFyZSByZXNwZWN0ZWQgYW5kIHRoZSByZXF1ZXN0ZWQgc3RhdGUg d2lsbAorICoJb25seSBiZSBlbnRlcmVkIHdoZW4gbm8gc3VzcGVuZCBibG9ja2VycyBhcmUgYWN0 aXZlLgorICoJV3JpdGUgIm9uIiB0byBjYW5jZWwuCisgKi8KKworI2lmZGVmIENPTkZJR19TVVNQ RU5EX0JMT0NLRVJTCitzdGF0aWMgc3NpemVfdCByZXF1ZXN0X3N0YXRlX3Nob3coc3RydWN0IGtv YmplY3QgKmtvYmosCisJCQkJICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1 ZikKK3sKKwljaGFyICpzID0gYnVmOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFBNX1NV U1BFTkRfTUFYOyBpKyspIHsKKwkJaWYgKHBtX3N0YXRlc1tpXSAmJiAoaSA9PSBQTV9TVVNQRU5E X09OIHx8IHZhbGlkX3N0YXRlKGkpKSkKKwkJCXMgKz0gc3ByaW50ZihzLCAiJXMgIiwgcG1fc3Rh dGVzW2ldKTsKKwl9CisJaWYgKHMgIT0gYnVmKQorCQkvKiBjb252ZXJ0IHRoZSBsYXN0IHNwYWNl IHRvIGEgbmV3bGluZSAqLworCQkqKHMtMSkgPSAnXG4nOworCXJldHVybiAocyAtIGJ1Zik7Cit9 CisKK3N0YXRpYyBzc2l6ZV90IHJlcXVlc3Rfc3RhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtv YmosCisJCQkJICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAorCQkJCSAgIGNvbnN0IGNo YXIgKmJ1Ziwgc2l6ZV90IG4pCit7CisJc3VzcGVuZF9zdGF0ZV90IHN0YXRlID0gUE1fU1VTUEVO RF9PTjsKKwljb25zdCBjaGFyICogY29uc3QgKnM7CisJY2hhciAqcDsKKwlpbnQgbGVuOworCWlu dCBlcnJvciA9IC1FSU5WQUw7CisKKwlwID0gbWVtY2hyKGJ1ZiwgJ1xuJywgbik7CisJbGVuID0g cCA/IHAgLSBidWYgOiBuOworCisJZm9yIChzID0gJnBtX3N0YXRlc1tzdGF0ZV07IHN0YXRlIDwg UE1fU1VTUEVORF9NQVg7IHMrKywgc3RhdGUrKykgeworCQlpZiAoKnMgJiYgbGVuID09IHN0cmxl bigqcykgJiYgIXN0cm5jbXAoYnVmLCAqcywgbGVuKSkKKwkJCWJyZWFrOworCX0KKwlpZiAoc3Rh dGUgPCBQTV9TVVNQRU5EX01BWCAmJiAqcykKKwkJaWYgKHN0YXRlID09IFBNX1NVU1BFTkRfT04g fHwgdmFsaWRfc3RhdGUoc3RhdGUpKSB7CisJCQllcnJvciA9IDA7CisJCQlyZXF1ZXN0X3N1c3Bl bmRfc3RhdGUoc3RhdGUpOworCQl9CisJcmV0dXJuIGVycm9yID8gZXJyb3IgOiBuOworfQorCitw b3dlcl9hdHRyKHJlcXVlc3Rfc3RhdGUpOworI2VuZGlmIC8qIENPTkZJR19TVVNQRU5EX0JMT0NL RVJTICovCisKICNpZmRlZiBDT05GSUdfUE1fVFJBQ0UKIGludCBwbV90cmFjZV9lbmFibGVkOwog CkBAIC01ODgsNiArNjQ1LDkgQEAgcG93ZXJfYXR0cihwbV90cmFjZSk7CiAKIHN0YXRpYyBzdHJ1 Y3QgYXR0cmlidXRlICogZ1tdID0gewogCSZzdGF0ZV9hdHRyLmF0dHIsCisjaWZkZWYgQ09ORklH X1NVU1BFTkRfQkxPQ0tFUlMKKwkmcmVxdWVzdF9zdGF0ZV9hdHRyLmF0dHIsCisjZW5kaWYKICNp ZmRlZiBDT05GSUdfUE1fVFJBQ0UKIAkmcG1fdHJhY2VfYXR0ci5hdHRyLAogI2VuZGlmCmRpZmYg LS1naXQgYS9rZXJuZWwvcG93ZXIvcG93ZXIuaCBiL2tlcm5lbC9wb3dlci9wb3dlci5oCmluZGV4 IDQ2YjVlYzcuLjIyNDZiM2IgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9wb3dlci5oCisrKyBi L2tlcm5lbC9wb3dlci9wb3dlci5oCkBAIC0yMjMsMyArMjIzLDcgQEAgc3RhdGljIGlubGluZSB2 b2lkIHN1c3BlbmRfdGhhd19wcm9jZXNzZXModm9pZCkKIHsKIH0KICNlbmRpZgorCisvKiBrZXJu ZWwvcG93ZXIvc3VzcGVuZF9ibG9jay5jICovCit2b2lkIHJlcXVlc3Rfc3VzcGVuZF9zdGF0ZShz dXNwZW5kX3N0YXRlX3Qgc3RhdGUpOworCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvc3VzcGVu ZF9ibG9ja2VyLmMgYi9rZXJuZWwvcG93ZXIvc3VzcGVuZF9ibG9ja2VyLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI5Y2EyZAotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5l bC9wb3dlci9zdXNwZW5kX2Jsb2NrZXIuYwpAQCAtMCwwICsxLDIwOSBAQAorLyoga2VybmVsL3Bv d2VyL3N1c3BlbmRfYmxvY2tlci5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDggR29v Z2xlLCBJbmMuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBj b3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5o PgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KKyNp bmNsdWRlIDxsaW51eC9zdXNwZW5kX2Jsb2NrZXIuaD4KKyNpbmNsdWRlICJwb3dlci5oIgorCitl bnVtIHsKKwlERUJVR19FWElUX1NVU1BFTkQgPSAxVSA8PCAwLAorCURFQlVHX1dBS0VVUCA9IDFV IDw8IDEsCisJREVCVUdfVVNFUl9TVEFURSA9IDFVIDw8IDIsCisJREVCVUdfU1VTUEVORCA9IDFV IDw8IDMsCisJREVCVUdfU1VTUEVORF9CTE9DS0VSID0gMVUgPDwgNCwKK307CitzdGF0aWMgaW50 IGRlYnVnX21hc2sgPSBERUJVR19FWElUX1NVU1BFTkQgfCBERUJVR19XQUtFVVAgfCBERUJVR19V U0VSX1NUQVRFOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnX21hc2ssIGRlYnVnX21hc2ssIGlu dCwgU19JUlVHTyB8IFNfSVdVU1IgfCBTX0lXR1JQKTsKKworI2RlZmluZSBTQl9JTklUSUFMSVpF RCAgICAgICAgICAgICgxVSA8PCA4KQorI2RlZmluZSBTQl9BQ1RJVkUgICAgICAgICAgICAgICAg ICgxVSA8PCA5KQorCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHN0YXRlX2xvY2spOworc3RhdGlj IGF0b21pY190IHN1c3BlbmRfYmxvY2tfY291bnQ7CitzdGF0aWMgYXRvbWljX3QgY3VycmVudF9l dmVudF9udW07CitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqc3VzcGVuZF93b3JrX3F1ZXVlOwor c3RydWN0IHN1c3BlbmRfYmxvY2tlciBtYWluX3N1c3BlbmRfYmxvY2tlcjsKK3N0YXRpYyBzdXNw ZW5kX3N0YXRlX3QgcmVxdWVzdGVkX3N1c3BlbmRfc3RhdGUgPSBQTV9TVVNQRU5EX01FTTsKK3N0 YXRpYyBib29sIGVuYWJsZV9zdXNwZW5kX2Jsb2NrZXJzOworCisjZGVmaW5lIHByX2luZm9fdGlt ZShmbXQsIGFyZ3MuLi4pIFwKKwlkbyB7IFwKKwkJc3RydWN0IHRpbWVzcGVjIHRzOyBcCisJCXN0 cnVjdCBydGNfdGltZSB0bTsgXAorCQlnZXRuc3RpbWVvZmRheSgmdHMpOyBcCisJCXJ0Y190aW1l X3RvX3RtKHRzLnR2X3NlYywgJnRtKTsgXAorCQlwcl9pbmZvKGZtdCAiKCVkLSUwMmQtJTAyZCAl MDJkOiUwMmQ6JTAyZC4lMDlsdSBVVEMpXG4iICwgXAorCQkJYXJncywgXAorCQkJdG0udG1feWVh ciArIDE5MDAsIHRtLnRtX21vbiArIDEsIHRtLnRtX21kYXksIFwKKwkJCXRtLnRtX2hvdXIsIHRt LnRtX21pbiwgdG0udG1fc2VjLCB0cy50dl9uc2VjKTsgXAorCX0gd2hpbGUgKDApOworCisvKioK KyAqIHN1c3BlbmRfaXNfYmxvY2tlZCgpIC0gQ2hlY2sgaWYgc3VzcGVuZCBzaG91bGQgYmUgYmxv Y2tlZAorICoKKyAqIHN1c3BlbmRfaXNfYmxvY2tlZCBjYW4gYmUgdXNlZCBieSBnZW5lcmljIHBv d2VyIG1hbmFnZW1lbnQgY29kZSB0byBhYm9ydAorICogc3VzcGVuZC4KKyAqCisgKiBUbyBwcmVz ZXJ2ZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHN1c3BlbmRfaXNfYmxvY2tlZCByZXR1cm5zIDAg dW5sZXNzIGl0CisgKiBpcyBjYWxsZWQgZHVyaW5nIHN1c3BlbmQgaW5pdGlhdGVkIGZyb20gdGhl IHN1c3BlbmRfYmxvY2sgY29kZS4KKyAqLworYm9vbCBzdXNwZW5kX2lzX2Jsb2NrZWQodm9pZCkK K3sKKwlpZiAoIWVuYWJsZV9zdXNwZW5kX2Jsb2NrZXJzKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4g ISFhdG9taWNfcmVhZCgmc3VzcGVuZF9ibG9ja19jb3VudCk7Cit9CisKK3N0YXRpYyB2b2lkIHN1 c3BlbmRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlpbnQgcmV0OworCWlu dCBlbnRyeV9ldmVudF9udW07CisKKwllbmFibGVfc3VzcGVuZF9ibG9ja2VycyA9IHRydWU7CisJ d2hpbGUgKCFzdXNwZW5kX2lzX2Jsb2NrZWQoKSkgeworCQllbnRyeV9ldmVudF9udW0gPSBhdG9t aWNfcmVhZCgmY3VycmVudF9ldmVudF9udW0pOworCQlpZiAoZGVidWdfbWFzayAmIERFQlVHX1NV U1BFTkQpCisJCQlwcl9pbmZvKCJzdXNwZW5kOiBlbnRlciBzdXNwZW5kXG4iKTsKKwkJcmV0ID0g cG1fc3VzcGVuZChyZXF1ZXN0ZWRfc3VzcGVuZF9zdGF0ZSk7CisJCWlmIChkZWJ1Z19tYXNrICYg REVCVUdfRVhJVF9TVVNQRU5EKQorCQkJcHJfaW5mb190aW1lKCJzdXNwZW5kOiBleGl0IHN1c3Bl bmQsIHJldCA9ICVkICIsIHJldCk7CisJCWlmIChhdG9taWNfcmVhZCgmY3VycmVudF9ldmVudF9u dW0pID09IGVudHJ5X2V2ZW50X251bSkKKwkJCXByX2luZm8oInN1c3BlbmQ6IHBtX3N1c3BlbmQg cmV0dXJuZWQgd2l0aCBubyBldmVudFxuIik7CisJfQorCWVuYWJsZV9zdXNwZW5kX2Jsb2NrZXJz ID0gZmFsc2U7Cit9CitzdGF0aWMgREVDTEFSRV9XT1JLKHN1c3BlbmRfd29yaywgc3VzcGVuZF93 b3JrZXIpOworCisvKioKKyAqIHN1c3BlbmRfYmxvY2tlcl9pbml0KCkgLSBJbml0aWFsaXplIGEg c3VzcGVuZCBibG9ja2VyCisgKiBAYmxvY2tlcjoJVGhlIHN1c3BlbmQgYmxvY2tlciB0byBpbml0 aWFsaXplLgorICogQG5hbWU6CVRoZSBuYW1lIG9mIHRoZSBzdXNwZW5kIGJsb2NrZXIgdG8gc2hv dyBpbiBkZWJ1ZyBtZXNzYWdlcy4KKyAqCisgKiBUaGUgc3VzcGVuZCBibG9ja2VyIHN0cnVjdCBh bmQgbmFtZSBtdXN0IG5vdCBiZSBmcmVlZCBiZWZvcmUgY2FsbGluZworICogc3VzcGVuZF9ibG9j a2VyX2Rlc3Ryb3kuCisgKi8KK3ZvaWQgc3VzcGVuZF9ibG9ja2VyX2luaXQoc3RydWN0IHN1c3Bl bmRfYmxvY2tlciAqYmxvY2tlciwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlXQVJOX09OKCFuYW1l KTsKKworCWlmIChkZWJ1Z19tYXNrICYgREVCVUdfU1VTUEVORF9CTE9DS0VSKQorCQlwcl9pbmZv KCJzdXNwZW5kX2Jsb2NrZXJfaW5pdCBuYW1lPSVzXG4iLCBuYW1lKTsKKworCWJsb2NrZXItPm5h bWUgPSBuYW1lOworCWF0b21pY19zZXQoJmJsb2NrZXItPmZsYWdzLCBTQl9JTklUSUFMSVpFRCk7 Cit9CitFWFBPUlRfU1lNQk9MKHN1c3BlbmRfYmxvY2tlcl9pbml0KTsKKworLyoqCisgKiBzdXNw ZW5kX2Jsb2NrZXJfZGVzdHJveSgpIC0gRGVzdHJveSBhIHN1c3BlbmQgYmxvY2tlcgorICogQGJs b2NrZXI6CVRoZSBzdXNwZW5kIGJsb2NrZXIgdG8gZGVzdHJveS4KKyAqLwordm9pZCBzdXNwZW5k X2Jsb2NrZXJfZGVzdHJveShzdHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyICpibG9ja2VyKQoreworCWlu dCBmbGFnczsKKwlpZiAoZGVidWdfbWFzayAmIERFQlVHX1NVU1BFTkRfQkxPQ0tFUikKKwkJcHJf aW5mbygic3VzcGVuZF9ibG9ja2VyX2Rlc3Ryb3kgbmFtZT0lc1xuIiwgYmxvY2tlci0+bmFtZSk7 CisJZmxhZ3MgPSBhdG9taWNfeGNoZygmYmxvY2tlci0+ZmxhZ3MsIDApOworCVdBUk4oIShmbGFn cyAmIFNCX0lOSVRJQUxJWkVEKSwgInN1c3BlbmRfYmxvY2tlcl9kZXN0cm95IGNhbGxlZCBvbiAi CisJCQkJCSJ1bmluaXRpYWxpemVkIHN1c3BlbmRfYmxvY2tlclxuIik7CisJaWYgKGZsYWdzID09 IChTQl9JTklUSUFMSVpFRCB8IFNCX0FDVElWRSkpCisJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0 KCZzdXNwZW5kX2Jsb2NrX2NvdW50KSkKKwkJCXF1ZXVlX3dvcmsoc3VzcGVuZF93b3JrX3F1ZXVl LCAmc3VzcGVuZF93b3JrKTsKK30KK0VYUE9SVF9TWU1CT0woc3VzcGVuZF9ibG9ja2VyX2Rlc3Ry b3kpOworCisvKioKKyAqIHN1c3BlbmRfYmxvY2soKSAtIEJsb2NrIHN1c3BlbmQKKyAqIEBibG9j a2VyOglUaGUgc3VzcGVuZCBibG9ja2VyIHRvIHVzZQorICovCit2b2lkIHN1c3BlbmRfYmxvY2so c3RydWN0IHN1c3BlbmRfYmxvY2tlciAqYmxvY2tlcikKK3sKKwlXQVJOX09OKCEoYXRvbWljX3Jl YWQoJmJsb2NrZXItPmZsYWdzKSAmIFNCX0lOSVRJQUxJWkVEKSk7CisKKwlpZiAoZGVidWdfbWFz ayAmIERFQlVHX1NVU1BFTkRfQkxPQ0tFUikKKwkJcHJfaW5mbygic3VzcGVuZF9ibG9jazogJXNc biIsIGJsb2NrZXItPm5hbWUpOworCWlmIChhdG9taWNfY21weGNoZygmYmxvY2tlci0+ZmxhZ3Ms IFNCX0lOSVRJQUxJWkVELAorCSAgICBTQl9JTklUSUFMSVpFRCB8IFNCX0FDVElWRSkgPT0gU0Jf SU5JVElBTElaRUQpCisJCWF0b21pY19pbmMoJnN1c3BlbmRfYmxvY2tfY291bnQpOworCisJYXRv bWljX2luYygmY3VycmVudF9ldmVudF9udW0pOworfQorRVhQT1JUX1NZTUJPTChzdXNwZW5kX2Js b2NrKTsKKworLyoqCisgKiBzdXNwZW5kX3VuYmxvY2soKSAtIFVuYmxvY2sgc3VzcGVuZAorICog QGJsb2NrZXI6CVRoZSBzdXNwZW5kIGJsb2NrZXIgdG8gdW5ibG9jay4KKyAqCisgKiBJZiBubyBv dGhlciBzdXNwZW5kIGJsb2NrZXJzIGJsb2NrIHN1c3BlbmQsIHRoZSBzeXN0ZW0gd2lsbCBzdXNw ZW5kLgorICovCit2b2lkIHN1c3BlbmRfdW5ibG9jayhzdHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyICpi bG9ja2VyKQoreworCVdBUk5fT04oIShhdG9taWNfcmVhZCgmYmxvY2tlci0+ZmxhZ3MpICYgU0Jf SU5JVElBTElaRUQpKTsKKworCWlmIChkZWJ1Z19tYXNrICYgREVCVUdfU1VTUEVORF9CTE9DS0VS KQorCQlwcl9pbmZvKCJzdXNwZW5kX3VuYmxvY2s6ICVzXG4iLCBibG9ja2VyLT5uYW1lKTsKKwor CWlmIChhdG9taWNfY21weGNoZygmYmxvY2tlci0+ZmxhZ3MsIFNCX0lOSVRJQUxJWkVEIHwgU0Jf QUNUSVZFLAorCSAgICBTQl9JTklUSUFMSVpFRCkgPT0gKFNCX0lOSVRJQUxJWkVEIHwgU0JfQUNU SVZFKSkKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnN1c3BlbmRfYmxvY2tfY291bnQpKQor CQkJcXVldWVfd29yayhzdXNwZW5kX3dvcmtfcXVldWUsICZzdXNwZW5kX3dvcmspOworfQorRVhQ T1JUX1NZTUJPTChzdXNwZW5kX3VuYmxvY2spOworCisvKioKKyAqIHN1c3BlbmRfYmxvY2tlcl9p c19hY3RpdmUoKSAtIFRlc3QgaWYgYSBzdXNwZW5kIGJsb2NrZXIgaXMgYmxvY2tpbmcgc3VzcGVu ZAorICogQGJsb2NrZXI6CVRoZSBzdXNwZW5kIGJsb2NrZXIgdG8gY2hlY2suCisgKgorICogUmV0 dXJucyB0cnVlIGlmIHRoZSBzdXNwZW5kX2Jsb2NrZXIgaXMgY3VycmVudGx5IGFjdGl2ZS4KKyAq LworYm9vbCBzdXNwZW5kX2Jsb2NrZXJfaXNfYWN0aXZlKHN0cnVjdCBzdXNwZW5kX2Jsb2NrZXIg KmJsb2NrZXIpCit7CisJV0FSTl9PTighKGF0b21pY19yZWFkKCZibG9ja2VyLT5mbGFncykgJiBT Ql9JTklUSUFMSVpFRCkpOworCisJcmV0dXJuICEhKGF0b21pY19yZWFkKCZibG9ja2VyLT5mbGFn cykgJiBTQl9BQ1RJVkUpOworfQorRVhQT1JUX1NZTUJPTChzdXNwZW5kX2Jsb2NrZXJfaXNfYWN0 aXZlKTsKKwordm9pZCByZXF1ZXN0X3N1c3BlbmRfc3RhdGUoc3VzcGVuZF9zdGF0ZV90IHN0YXRl KQoreworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnN0YXRl X2xvY2ssIGlycWZsYWdzKTsKKwlpZiAoZGVidWdfbWFzayAmIERFQlVHX1VTRVJfU1RBVEUpCisJ CXByX2luZm9fdGltZSgicmVxdWVzdF9zdXNwZW5kX3N0YXRlOiAlcyAoJWQtPiVkKSBhdCAlbGxk ICIsCisJCQkgICAgIHN0YXRlICE9IFBNX1NVU1BFTkRfT04gPyAic2xlZXAiIDogIndha2V1cCIs CisJCQkgICAgIHJlcXVlc3RlZF9zdXNwZW5kX3N0YXRlLCBzdGF0ZSwKKwkJCSAgICAga3RpbWVf dG9fbnMoa3RpbWVfZ2V0KCkpKTsKKwlyZXF1ZXN0ZWRfc3VzcGVuZF9zdGF0ZSA9IHN0YXRlOwor CWlmIChzdGF0ZSA9PSBQTV9TVVNQRU5EX09OKQorCQlzdXNwZW5kX2Jsb2NrKCZtYWluX3N1c3Bl bmRfYmxvY2tlcik7CisJZWxzZQorCQlzdXNwZW5kX3VuYmxvY2soJm1haW5fc3VzcGVuZF9ibG9j a2VyKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGF0ZV9sb2NrLCBpcnFmbGFncyk7Cit9 CisKK3N0YXRpYyBpbnQgX19pbml0IHN1c3BlbmRfYmxvY2tfaW5pdCh2b2lkKQoreworCXN1c3Bl bmRfd29ya19xdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJzdXNwZW5kIik7 CisJaWYgKCFzdXNwZW5kX3dvcmtfcXVldWUpCisJCXJldHVybiAtRU5PTUVNOworCisJc3VzcGVu ZF9ibG9ja2VyX2luaXQoJm1haW5fc3VzcGVuZF9ibG9ja2VyLCAibWFpbiIpOworCXN1c3BlbmRf YmxvY2soJm1haW5fc3VzcGVuZF9ibG9ja2VyKTsKKwlyZXR1cm4gMDsKK30KKworY29yZV9pbml0 Y2FsbChzdXNwZW5kX2Jsb2NrX2luaXQpOwotLSAKMS42LjEKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LXBtIG1haWxpbmcgbGlzdApsaW51eC1w bUBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxpbnV4LWZvdW5kYXRp b24ub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcG0=