From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: Re: [RFC PATCH 06/31] cpufreq: make cpufreq driver more generalizable Date: Tue, 5 Dec 2017 12:48:32 -0800 (PST) Message-ID: References: <1510247421-24094-1-git-send-email-olekstysh@gmail.com> <1510247421-24094-7-git-send-email-olekstysh@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eMK8q-0003wx-8k for xen-devel@lists.xenproject.org; Tue, 05 Dec 2017 20:48:36 +0000 In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Oleksandr Tyshchenko , andrew.cooper3@citrix.com, jbeulich@suse.com Cc: xen-devel@lists.xenproject.org, Oleksandr Dmytryshyn , Stefano Stabellini , Julien Grall , Oleksandr Tyshchenko List-Id: xen-devel@lists.xenproject.org T24gVHVlLCA1IERlYyAyMDE3LCBPbGVrc2FuZHIgVHlzaGNoZW5rbyB3cm90ZToKPiBIaSBTdGVm YW5vCj4gCj4gT24gVHVlLCBEZWMgNSwgMjAxNyBhdCAxMjo0NiBBTSwgU3RlZmFubyBTdGFiZWxs aW5pCj4gPHNzdGFiZWxsaW5pQGtlcm5lbC5vcmc+IHdyb3RlOgo+ID4gT24gTW9uLCA0IERlYyAy MDE3LCBPbGVrc2FuZHIgVHlzaGNoZW5rbyB3cm90ZToKPiA+PiBIaSwgU3RlZmFubwo+ID4+Cj4g Pj4gT24gU2F0LCBEZWMgMiwgMjAxNyBhdCAzOjM3IEFNLCBTdGVmYW5vIFN0YWJlbGxpbmkKPiA+ PiA8c3N0YWJlbGxpbmlAa2VybmVsLm9yZz4gd3JvdGU6Cj4gPj4gPiBPbiBUaHUsIDkgTm92IDIw MTcsIE9sZWtzYW5kciBUeXNoY2hlbmtvIHdyb3RlOgo+ID4+ID4+IEZyb206IE9sZWtzYW5kciBE bXl0cnlzaHluIDxvbGVrc2FuZHIuZG15dHJ5c2h5bkBnbG9iYWxsb2dpYy5jb20+Cj4gPj4gPj4K PiA+PiA+PiBGaXJzdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY3B1ZnJlcSBkcml2ZXIgaGFzIGJl ZW4KPiA+PiA+PiB3cml0dGVuIHdpdGggeDg2IGluIG1pbmQuIFRoaXMgcGF0Y2ggbWFrZXMgcG9z c2libGUKPiA+PiA+PiB0aGUgY3B1ZnJlcSBkcml2ZXIgYmUgd29ya2luZyBvbiBib3RoIHg4NiBh bmQgYXJtCj4gPj4gPj4gYXJjaGl0ZWN0dXJlcy4KPiA+PiA+Pgo+ID4+ID4+IFRoaXMgaXMgYSBy ZWJhc2VkIHZlcnNpb24gb2YgdGhlIG9yaWdpbmFsIHBhdGNoOgo+ID4+ID4+IGh0dHBzOi8vbGlz dHMueGVuLm9yZy9hcmNoaXZlcy9odG1sL3hlbi1kZXZlbC8yMDE0LTExL21zZzAwOTMyLmh0bWwK PiA+PiA+Pgo+ID4+ID4+IFNpZ25lZC1vZmYtYnk6IE9sZWtzYW5kciBEbXl0cnlzaHluIDxvbGVr c2FuZHIuZG15dHJ5c2h5bkBnbG9iYWxsb2dpYy5jb20+Cj4gPj4gPj4gU2lnbmVkLW9mZi1ieTog T2xla3NhbmRyIFR5c2hjaGVua28gPG9sZWtzYW5kcl90eXNoY2hlbmtvQGVwYW0uY29tPgo+ID4+ ID4+IENDOiBKYW4gQmV1bGljaCA8amJldWxpY2hAc3VzZS5jb20+Cj4gPj4gPj4gQ0M6IEFuZHJl dyBDb29wZXIgPGFuZHJldy5jb29wZXIzQGNpdHJpeC5jb20+Cj4gPj4gPj4gQ0M6IFN0ZWZhbm8g U3RhYmVsbGluaSA8c3N0YWJlbGxpbmlAa2VybmVsLm9yZz4KPiA+PiA+PiBDQzogSnVsaWVuIEdy YWxsIDxqdWxpZW4uZ3JhbGxAbGluYXJvLm9yZz4KPiA+PiA+PiAtLS0KPiA+PiA+PiAgeGVuL2Ry aXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMgICAgfCA4MSArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrLS0tCj4gPj4gPj4gIHhlbi9pbmNsdWRlL3B1YmxpYy9wbGF0Zm9ybS5oICAg IHwgIDEgKwo+ID4+ID4+ICB4ZW4vaW5jbHVkZS94ZW4vcHJvY2Vzc29yX3BlcmYuaCB8ICA2ICsr Kwo+ID4+ID4+ICAzIGZpbGVzIGNoYW5nZWQsIDgyIGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25z KC0pCj4gPj4gPj4KPiA+PiA+PiBkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvY3B1ZnJlcS9jcHVm cmVxLmMgYi94ZW4vZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYwo+ID4+ID4+IGluZGV4IGFiOTA5 ZTIuLjY0ZTFhZTcgMTAwNjQ0Cj4gPj4gPj4gLS0tIGEveGVuL2RyaXZlcnMvY3B1ZnJlcS9jcHVm cmVxLmMKPiA+PiA+PiArKysgYi94ZW4vZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYwo+ID4+ID4+ IEBAIC00Miw3ICs0Miw2IEBACj4gPj4gPj4gICNpbmNsdWRlIDxhc20vaW8uaD4KPiA+PiA+PiAg I2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KPiA+PiA+PiAgI2luY2x1ZGUgPGFzbS9wZXJjcHUu aD4KPiA+PiA+PiAtI2luY2x1ZGUgPGFjcGkvYWNwaS5oPgo+ID4+ID4+ICAjaW5jbHVkZSA8eGVu L2NwdWZyZXEuaD4KPiA+PiA+Pgo+ID4+ID4+ICBzdGF0aWMgdW5zaWduZWQgaW50IF9fcmVhZF9t b3N0bHkgdXNyX21pbl9mcmVxOwo+ID4+ID4+IEBAIC0yMDYsNiArMjA1LDcgQEAgaW50IGNwdWZy ZXFfYWRkX2NwdSh1bnNpZ25lZCBpbnQgY3B1KQo+ID4+ID4+ICAgICAgfSBlbHNlIHsKPiA+PiA+ PiAgICAgICAgICAvKiBkb21haW4gc2FuaXR5IGNoZWNrIHVuZGVyIHdoYXRldmVyIGNvb3JkaW5h dGlvbiB0eXBlICovCj4gPj4gPj4gICAgICAgICAgZmlyc3RjcHUgPSBjcHVtYXNrX2ZpcnN0KGNw dWZyZXFfZG9tLT5tYXApOwo+ID4+ID4+ICsjaWZkZWYgQ09ORklHX0FDUEkKPiA+PiA+PiAgICAg ICAgICBpZiAoKHBlcmYtPmRvbWFpbl9pbmZvLmNvb3JkX3R5cGUgIT0KPiA+PiA+PiAgICAgICAg ICAgICAgcHJvY2Vzc29yX3BtaW5mb1tmaXJzdGNwdV0tPnBlcmYuZG9tYWluX2luZm8uY29vcmRf dHlwZSkgfHwKPiA+PiA+PiAgICAgICAgICAgICAgKHBlcmYtPmRvbWFpbl9pbmZvLm51bV9wcm9j ZXNzb3JzICE9Cj4gPj4gPj4gQEAgLTIyMSw2ICsyMjEsMTkgQEAgaW50IGNwdWZyZXFfYWRkX2Nw dSh1bnNpZ25lZCBpbnQgY3B1KQo+ID4+ID4+ICAgICAgICAgICAgICAgICAgKTsKPiA+PiA+PiAg ICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPj4gPj4gICAgICAgICAgfQo+ID4+ID4+ICsj ZWxzZSAvKiAhQ09ORklHX0FDUEkgKi8KPiA+PiA+PiArICAgICAgICBpZiAoKHBlcmYtPmRvbWFp bl9pbmZvLm51bV9wcm9jZXNzb3JzICE9Cj4gPj4gPj4gKyAgICAgICAgICAgIHByb2Nlc3Nvcl9w bWluZm9bZmlyc3RjcHVdLT5wZXJmLmRvbWFpbl9pbmZvLm51bV9wcm9jZXNzb3JzKSkgewo+ID4+ ID4+ICsKPiA+PiA+PiArICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiY3B1ZnJlcSBm YWlsIHRvIGFkZCBDUFUlZDoiCj4gPj4gPj4gKyAgICAgICAgICAgICAgICAgICAiaW5jb3JyZWN0 IG51bSBwcm9jZXNzb3JzICglIlBSSXU2NCIpLCAiCj4gPj4gPj4gKyAgICAgICAgICAgICAgICAg ICAiZXhwZWN0KCUiUFJJdTY0IilcbiIsCj4gPj4gPj4gKyAgICAgICAgICAgICAgICAgICBjcHUs IHBlcmYtPmRvbWFpbl9pbmZvLm51bV9wcm9jZXNzb3JzLAo+ID4+ID4+ICsgICAgICAgICAgICAg ICAgICAgcHJvY2Vzc29yX3BtaW5mb1tmaXJzdGNwdV0tPnBlcmYuZG9tYWluX2luZm8ubnVtX3By b2Nlc3NvcnMKPiA+PiA+PiArICAgICAgICAgICAgICAgICk7Cj4gPj4gPj4gKyAgICAgICAgICAg IHJldHVybiAtRUlOVkFMOwo+ID4+ID4+ICsgICAgICAgIH0KPiA+PiA+PiArI2VuZGlmIC8qIENP TkZJR19BQ1BJICovCj4gPj4gPgo+ID4+ID4gV2h5IGlzIHRoaXMgbmVjZXNzYXJ5PyBJIGFtIGFz a2luZyB0aGlzIHF1ZXN0aW9uLCBiZWNhdXNlIEkgdGhpbmsgaXQKPiA+PiA+IHdvdWxkIGJlIGJl c3QgdG8gYXZvaWQgbW9yZSAjaWZkZWYncyBpZiB3ZSBjYW4gYXZvaWQgdGhlbSwgYW5kIHNvbWUg b2YKPiA+PiA+IHRoZSBjb2RlICNpZmRlZidlZCBkb2Vzbid0IGxvb2sgdmVyeSBhY3BpIHNwZWNp ZmljIChhdCBsZWFzdCBhdCBmaXJzdAo+ID4+ID4gc2lnaHQpLiBJdCBkb2Vzbid0IGxvb2sgbGlr ZSB0aGlzIGNoYW5nZSBpcyB2ZXJ5IGJlbmVmaWNpYWwuIFdoYXQgYW0gSQo+ID4+ID4gbWlzc2lu Zz8KPiA+Pgo+ID4+IFByb2JhYmx5LCB0aGUgb3JpZ2luYWwgYXV0aG9yIG9mIHRoaXMgcGF0Y2gg d2FudGVkIHRvIGF2b2lkIHBsYXlpbmcKPiA+PiB3aXRoIHNvbWUgc3R1ZmYgKGNvZGUgJiB2YXJp YWJsZXMpIHdoaWNoIGRpZG4ndCBtYWtlIHNlbnNlL3dvdWxkbid0IGJlCj4gPj4gdXNlZCBvbiBu b24tQUNQSSBzeXN0ZW1zLgo+ID4+Cj4gPj4gQWdyZWUgaGVyZSwgd2UgYXJlIGFibGUgdG8gYXZv aWQgdGhpcyAjaWZkZWYgYXMgd2VsbCBhcyBtYW55IG90aGVycy4gSQo+ID4+IGRvbid0IHNlZSBh biBpc3N1ZSwgZm9yIGV4YW1wbGUsIHRvIHByaW50IHNvbWV0aGluZyBkZWZhdWx0aW5nIGZvcgo+ ID4+IGNvb3JkX3R5cGUvbnVtX2VudHJpZXMvcmV2aXNpb24vZXRjLgo+ID4KPiA+IEkgYWdyZWUK PiA+Cj4gPgo+ID4+ID4KPiA+PiA+Cj4gPj4gPj4gICAgICB9Cj4gPj4gPj4KPiA+PiA+PiAgICAg IGlmICghZG9tZXhpc3QgfHwgaHdfYWxsKSB7Cj4gPj4gPj4gQEAgLTM4MCw2ICszOTMsNyBAQCBp bnQgY3B1ZnJlcV9kZWxfY3B1KHVuc2lnbmVkIGludCBjcHUpCj4gPj4gPj4gICAgICByZXR1cm4g MDsKPiA+PiA+PiAgfQo+ID4+ID4+Cj4gPj4gPj4gKyNpZmRlZiBDT05GSUdfQUNQSQo+ID4+ID4+ ICBzdGF0aWMgdm9pZCBwcmludF9QQ1Qoc3RydWN0IHhlbl9wY3RfcmVnaXN0ZXIgKnB0cikKPiA+ PiA+PiAgewo+ID4+ID4+ICAgICAgcHJpbnRrKCJcdF9QQ1Q6IGRlc2NyaXB0b3I9JWQsIGxlbmd0 aD0lZCwgc3BhY2VfaWQ9JWQsICIKPiA+PiA+PiBAQCAtMzg3LDEyICs0MDEsMTQgQEAgc3RhdGlj IHZvaWQgcHJpbnRfUENUKHN0cnVjdCB4ZW5fcGN0X3JlZ2lzdGVyICpwdHIpCj4gPj4gPj4gICAg ICAgICAgICAgcHRyLT5kZXNjcmlwdG9yLCBwdHItPmxlbmd0aCwgcHRyLT5zcGFjZV9pZCwgcHRy LT5iaXRfd2lkdGgsCj4gPj4gPj4gICAgICAgICAgICAgcHRyLT5iaXRfb2Zmc2V0LCBwdHItPnJl c2VydmVkLCBwdHItPmFkZHJlc3MpOwo+ID4+ID4+ICB9Cj4gPj4gPj4gKyNlbmRpZiAvKiBDT05G SUdfQUNQSSAqLwo+ID4+ID4KPiA+PiA+IHNhbWUgcXVlc3Rpb24KPiA+Pgo+ID4+IGRlZmluaXRl bHkgb21pdCAjaWZkZWYKPiA+Pgo+ID4+ID4KPiA+PiA+Cj4gPj4gPj4gIHN0YXRpYyB2b2lkIHBy aW50X1BTUyhzdHJ1Y3QgeGVuX3Byb2Nlc3Nvcl9weCAqcHRyLCBpbnQgY291bnQpCj4gPj4gPj4g IHsKPiA+PiA+PiAgICAgIGludCBpOwo+ID4+ID4+ICAgICAgcHJpbnRrKCJcdF9QU1M6IHN0YXRl X2NvdW50PSVkXG4iLCBjb3VudCk7Cj4gPj4gPj4gICAgICBmb3IgKGk9MDsgaTxjb3VudDsgaSsr KXsKPiA+PiA+PiArI2lmZGVmIENPTkZJR19BQ1BJCj4gPj4gPj4gICAgICAgICAgcHJpbnRrKCJc dFN0YXRlJWQ6ICUiUFJJZDY0Ik1IeiAlIlBSSWQ2NCJtVyAlIlBSSWQ2NCJ1cyAiCj4gPj4gPj4g ICAgICAgICAgICAgICAgICIlIlBSSWQ2NCJ1cyAlIyJQUkl4NjQiICUjIlBSSXg2NCJcbiIsCj4g Pj4gPj4gICAgICAgICAgICAgICAgIGksCj4gPj4gPj4gQEAgLTQwMiwxNSArNDE4LDI2IEBAIHN0 YXRpYyB2b2lkIHByaW50X1BTUyhzdHJ1Y3QgeGVuX3Byb2Nlc3Nvcl9weCAqcHRyLCBpbnQgY291 bnQpCj4gPj4gPj4gICAgICAgICAgICAgICAgIHB0cltpXS5idXNfbWFzdGVyX2xhdGVuY3ksCj4g Pj4gPj4gICAgICAgICAgICAgICAgIHB0cltpXS5jb250cm9sLAo+ID4+ID4+ICAgICAgICAgICAg ICAgICBwdHJbaV0uc3RhdHVzKTsKPiA+PiA+PiArI2Vsc2UgLyogIUNPTkZJR19BQ1BJICovCj4g Pj4gPj4gKyAgICAgICAgcHJpbnRrKCJcdFN0YXRlJWQ6ICUiUFJJZDY0Ik1IeiAlIlBSSWQ2NCJ1 c1xuIiwKPiA+PiA+PiArICAgICAgICAgICAgICAgaSwKPiA+PiA+PiArICAgICAgICAgICAgICAg cHRyW2ldLmNvcmVfZnJlcXVlbmN5LAo+ID4+ID4+ICsgICAgICAgICAgICAgICBwdHJbaV0udHJh bnNpdGlvbl9sYXRlbmN5KTsKPiA+PiA+PiArI2VuZGlmIC8qIENPTkZJR19BQ1BJICovCj4gPj4g Pj4gICAgICB9Cj4gPj4gPj4gIH0KPiA+PiA+Cj4gPj4gPiBzYW1lIHF1ZXN0aW9uCj4gPj4KPiA+ PiBzYW1lIGFuc3dlcikKPiA+Pgo+ID4+ID4KPiA+PiA+Cj4gPj4gPj4gIHN0YXRpYyB2b2lkIHBy aW50X1BTRCggc3RydWN0IHhlbl9wc2RfcGFja2FnZSAqcHRyKQo+ID4+ID4+ICB7Cj4gPj4gPj4g KyNpZmRlZiBDT05GSUdfQUNQSQo+ID4+ID4+ICAgICAgcHJpbnRrKCJcdF9QU0Q6IG51bV9lbnRy aWVzPSUiUFJJZDY0IiByZXY9JSJQUklkNjQKPiA+PiA+PiAgICAgICAgICAgICAiIGRvbWFpbj0l IlBSSWQ2NCIgY29vcmRfdHlwZT0lIlBSSWQ2NCIgbnVtX3Byb2Nlc3NvcnM9JSJQUklkNjQiXG4i LAo+ID4+ID4+ICAgICAgICAgICAgIHB0ci0+bnVtX2VudHJpZXMsIHB0ci0+cmV2aXNpb24sIHB0 ci0+ZG9tYWluLCBwdHItPmNvb3JkX3R5cGUsCj4gPj4gPj4gICAgICAgICAgICAgcHRyLT5udW1f cHJvY2Vzc29ycyk7Cj4gPj4gPj4gKyNlbHNlIC8qICFDT05GSUdfQUNQSSAqLwo+ID4+ID4+ICsg ICAgcHJpbnRrKCJcdF9QU0Q6ICBkb21haW49JSJQUklkNjQiIG51bV9wcm9jZXNzb3JzPSUiUFJJ ZDY0IlxuIiwKPiA+PiA+PiArICAgICAgICAgICBwdHItPmRvbWFpbiwgcHRyLT5udW1fcHJvY2Vz c29ycyk7Cj4gPj4gPj4gKyNlbmRpZiAvKiBDT05GSUdfQUNQSSAqLwo+ID4+ID4+ICB9Cj4gPj4g Pgo+ID4+ID4gc2FtZSBxdWVzdGlvbgo+ID4+Cj4gPj4gc2FtZSBhbnN3ZXIpCj4gPj4KPiA+PiA+ Cj4gPj4gPgo+ID4+ID4+ICBzdGF0aWMgdm9pZCBwcmludF9QUEModW5zaWduZWQgaW50IHBsYXRm b3JtX2xpbWl0KQo+ID4+ID4+IEBAIC00MTgsMTMgKzQ0NSw1MyBAQCBzdGF0aWMgdm9pZCBwcmlu dF9QUEModW5zaWduZWQgaW50IHBsYXRmb3JtX2xpbWl0KQo+ID4+ID4+ICAgICAgcHJpbnRrKCJc dF9QUEM6ICVkXG4iLCBwbGF0Zm9ybV9saW1pdCk7Cj4gPj4gPj4gIH0KPiA+PiA+Pgo+ID4+ID4+ ICtzdGF0aWMgaW5saW5lIGJvb2wgaXNfcHNzX2RhdGEoc3RydWN0IHhlbl9wcm9jZXNzb3JfcGVy Zm9ybWFuY2UgKnB4KQo+ID4+ID4+ICt7Cj4gPj4gPj4gKyNpZmRlZiBDT05GSUdfQUNQSQo+ID4+ ID4+ICsgICAgcmV0dXJuIHB4LT5mbGFncyAmIFhFTl9QWF9QU1M7Cj4gPj4gPj4gKyNlbHNlCj4g Pj4gPj4gKyAgICByZXR1cm4gcHgtPmZsYWdzID09IFhFTl9QWF9EQVRBOwo+ID4+ID4+ICsjZW5k aWYKPiA+PiA+PiArfQo+ID4+ID4+ICsKPiA+PiA+PiArc3RhdGljIGlubGluZSBib29sIGlzX3Bz ZF9kYXRhKHN0cnVjdCB4ZW5fcHJvY2Vzc29yX3BlcmZvcm1hbmNlICpweCkKPiA+PiA+PiArewo+ ID4+ID4+ICsjaWZkZWYgQ09ORklHX0FDUEkKPiA+PiA+PiArICAgIHJldHVybiBweC0+ZmxhZ3Mg JiBYRU5fUFhfUFNEOwo+ID4+ID4+ICsjZWxzZQo+ID4+ID4+ICsgICAgcmV0dXJuIHB4LT5mbGFn cyA9PSBYRU5fUFhfREFUQTsKPiA+PiA+PiArI2VuZGlmCj4gPj4gPj4gK30KPiA+PiA+PiArCj4g Pj4gPj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19wcGNfZGF0YShzdHJ1Y3QgeGVuX3Byb2Nlc3Nv cl9wZXJmb3JtYW5jZSAqcHgpCj4gPj4gPj4gK3sKPiA+PiA+PiArI2lmZGVmIENPTkZJR19BQ1BJ Cj4gPj4gPj4gKyAgICByZXR1cm4gcHgtPmZsYWdzICYgWEVOX1BYX1BQQzsKPiA+PiA+PiArI2Vs c2UKPiA+PiA+PiArICAgIHJldHVybiBweC0+ZmxhZ3MgPT0gWEVOX1BYX0RBVEE7Cj4gPj4gPj4g KyNlbmRpZgo+ID4+ID4+ICt9Cj4gPj4gPj4gKwo+ID4+ID4+ICtzdGF0aWMgaW5saW5lIGJvb2wg aXNfYWxsX2RhdGEoc3RydWN0IHhlbl9wcm9jZXNzb3JfcGVyZm9ybWFuY2UgKnB4KQo+ID4+ID4+ ICt7Cj4gPj4gPj4gKyNpZmRlZiBDT05GSUdfQUNQSQo+ID4+ID4+ICsgICAgcmV0dXJuIHB4LT5m bGFncyA9PSAoIFhFTl9QWF9QQ1QgfCBYRU5fUFhfUFNTIHwgWEVOX1BYX1BTRCB8IFhFTl9QWF9Q UEMgKTsKPiA+PiA+PiArI2Vsc2UKPiA+PiA+PiArICAgIHJldHVybiBweC0+ZmxhZ3MgPT0gWEVO X1BYX0RBVEE7Cj4gPj4gPj4gKyNlbmRpZgo+ID4+ID4+ICt9Cj4gPj4gPgo+ID4+ID4gQ291bGQg eW91IHBsZWFzZSBleHBsYWluIGhlcmUgYW5kIGluIHRoZSBjb21taXQgbWVzc2FnZSB0aGUgaWRl YSBiZWhpbmQKPiA+PiA+IHRoaXM/IEl0IGxvb2tzIGxpa2Ugd2Ugd2FudCB0byBnZXQgcmlkIG9m IHRoZSBkaWZmZXJlbnQgZmxhZ3Mgb24KPiA+PiA+IG5vbi1BQ1BJIHN5c3RlbXM/IFdoeSBjYW4n dCB3ZSByZXVzZSB0aGUgc2FtZSBmbGFncz8KPiA+Pgo+ID4+IFlvdSBhcmUgcmlnaHQuIEluZGVl ZCBsb29rcyByZWR1bmRhbnQuCj4gPj4gSSB3aWxsIGRyb3AgYWxsIHRoZXNlIGhlbHBlcnMgYW5k IHJldXNlIGV4aXN0aW5nIGZsYWdzLiBJZiB3ZSBhcmUKPiA+PiBwcmV0ZW5kaW5nIHRvIGJlIGFu IFAtc3RhdGUgZHJpdmVyIGFuZCB1cGxvYWRpbmcgdGhlIHNhbWUgUC1zdGF0ZSBkYXRhCj4gPj4g d2hpY2ggWzFdIHVwbG9hZHMKPiA+PiB0aGVuIEkgd2lsbCBqdXN0IHJldXNlIGV4aXN0aW5nIGZs YWdzLiBJdCB3aWxsIGNvc3QgbWUgbm90aGluZy4KPiA+Cj4gPiBNYWtlcyBzZW5zZQo+ID4KPiA+ Cj4gPj4gTWF5IEkgYXNrIHlvdSB0byB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIFsyXT8gSXQg bG9va3MgbGlrZSBhIGhhY2sKPiA+PiByaWdodCBub3csIGJ1dCBob3cgdG8gbWFrZSBpdCBpbiBh IHByb3BlciB3YXk/Cj4gPj4KPiA+PiBbMV0gaHR0cHM6Ly9naXRodWIuY29tL3RvcnZhbGRzL2xp bnV4L2Jsb2IvbWFzdGVyL2RyaXZlcnMveGVuL3hlbi1hY3BpLXByb2Nlc3Nvci5jI0wyMTAKPiA+ PiBbMl0gaHR0cHM6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS94ZW4tZGV2ZWxAbGlzdHMueGVuLm9y Zy9tc2cxMjg0MTAuaHRtbAo+ID4KPiA+IFJlZ2FyZGluZyBbMl06Cj4gPgo+ID4gVGhpcyBpcyBz b21ldGhpbmcgdGhhdCBuZWVkcyB0byBiZSBhZ3JlZWQgd2l0aCB0aGUgeDg2IG1haW50YWluZXJz Lgo+ID4gSG93ZXZlciwgSSB3b3VsZCBtb3ZlIHRoZSBjb3B5X2Zyb21fZ3Vlc3QgKGFuZCBldmVy eXRoaW5nIHJlbGF0ZWQgdG8KPiA+IHBhcnNpbmcgY2FsbGVyIHByb3ZpZGVkIGFyZ3VtZW50cykg dG8KPiA+IHhlbi9hcmNoL3g4Ni9wbGF0Zm9ybV9oeXBlcmNhbGwuYzpkb19wbGF0Zm9ybV9vcC4K PiA+Cj4gPiBUaGVuLCBJIHdvdWxkIG1ha2Ugc2V0X3B4X3BtaW5mbyBsb29rIGxpa2UgYSByZWd1 bGFyIGZ1bmN0aW9uIHRoYXQKPiA+IHRha2VzIHJlZ3VsYXIgYXJndW1lbnRzIChubyBYRU5fR1VF U1RfSEFORExFcyksIHNvIHRoYXQgaXQgY2FuIGJlIGNhbGxlZAo+ID4gb24gQVJNIHdpdGhvdXQg aGF2aW5nIHRvICJmYWtlIiBhbiBoeXBlcmNhbGwuCj4gCj4gSnVzdCB0byBjbGFyaWZ5Ogo+IAo+ IFRoZSBjdXJyZW50IGZ1bmN0aW9uIGludGVyZmFjZSBpczoKPiBpbnQgc2V0X3B4X3BtaW5mbyh1 aW50MzJfdCBhY3BpX2lkLCBzdHJ1Y3QgeGVuX3Byb2Nlc3Nvcl9wZXJmb3JtYW5jZQo+ICpkb20w X3B4X2luZm8pCj4gd2hlcmUgImRvbTBfcHhfaW5mbyIgYXJndW1lbnQgY29udGFpbnMgWEVOX0dV RVNUX0hBTkRMRSB3ZSB3b3VsZCBsaWtlCj4gdG8gYXZvaWQgcGxheWluZyB3aXRoIGluIGNhc2Ug b2YgQVJNLgo+IAo+IFRoZSBpZGVhIHRvIG1vdmUgb3BlcmF0aW9uIG92ZXIgWEVOX0dVRVNUX0hB TkRMRSAoY29weV9mcm9tX2d1ZXN0KSBvdXQKPiBvZiB0aGUgZnVuY3Rpb24gc291bmRzIHJlYXNv bmFibGUuCj4gQnV0IHdoYXQgZnVuY3Rpb24gaW50ZXJmYWNlIHdlIHdpbGwgZW5kIHVwIHdpdGg/ Cj4gCj4gTG9va3MgbGlrZSB3ZSBuZWVkIGVpdGhlciB0byBwYXNzIGVhY2ggc3RydWN0dXJlIGZp ZWxkIGFzIGEgc2VwYXJhdGUKPiBhcmd1bWVudCwgc28gIm5ldyIgZnVuY3Rpb24gaW50ZXJmYWNl IHdpbGwgYmUgdGhlIGZvbGxvd2luZzoKPiBpbnQgc2V0X3B4X3BtaW5mbyh1aW50MzJfdCBhY3Bp X2lkLCB1aW50MzJfdCBmbGFncywgLi4uICwgc3RydWN0Cj4geGVuX3Byb2Nlc3Nvcl9weCAqc3Rh dGVzLCAuLi4gLCB1aW50MzJfdCBzaGFyZWRfdHlwZSkKPiBvciB0byByZXVzZSAic3RydWN0IHBy b2Nlc3Nvcl9wZXJmb3JtYW5jZSIgc29tZWhvdyBpbiBvcmRlciB0byByZWR1Y2UKPiBhIHNjb3Bl IG9mIHBvc3NpYmxlIGFyZ3VtZW50cy4uLgo+IAo+IE9yIEkgbWlzc2VkIHNvbWV0aGluZz8KCllv dSBhcmUgcmlnaHQuIFdlIG5lZWQgdG8gZGVmaW5lIGEgbmV3IHN0cnVjdCBmb3IgaW50ZXJuYWwg dXNhZ2UsIGZvcgpleGFtcGxlOgoKc3RydWN0IHhlbl9wcm9jZXNzb3JfcGVyZm9ybWFuY2VfaW50 ZXJuYWwgewogICAgdWludDMyX3QgZmxhZ3M7ICAgICAvKiBmbGFnIGZvciBQeCBzdWIgaW5mbyB0 eXBlICovCiAgICB1aW50MzJfdCBwbGF0Zm9ybV9saW1pdDsgIC8qIFBsYXRmb3JtIGxpbWl0YXRp b24gb24gZnJlcSB1c2FnZSAqLwogICAgc3RydWN0IHhlbl9wY3RfcmVnaXN0ZXIgY29udHJvbF9y ZWdpc3RlcjsKICAgIHN0cnVjdCB4ZW5fcGN0X3JlZ2lzdGVyIHN0YXR1c19yZWdpc3RlcjsKICAg IHVpbnQzMl90IHN0YXRlX2NvdW50OyAgICAgLyogdG90YWwgYXZhaWxhYmxlIHBlcmZvcm1hbmNl IHN0YXRlcyAqLwogICAgc3RydWN0IHhlbl9wcm9jZXNzb3JfcHggc3RhdGVzOwogICAgc3RydWN0 IHhlbl9wc2RfcGFja2FnZSBkb21haW5faW5mbzsKICAgIHVpbnQzMl90IHNoYXJlZF90eXBlOyAg ICAgLyogY29vcmRpbmF0aW9uIHR5cGUgb2YgdGhpcyBwcm9jZXNzb3IgKi8KfTsKCkphbiwgQW5k cmV3LCBkb2VzIHRoaXMgc291bmQgbGlrZSBhIGdvb2QgYXBwcm9hY2ggdG8geW91PwoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxp bmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5w cm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZlbA==