From mboxrd@z Thu Jan 1 00:00:00 1970 From: Qiang Yu Subject: [PATCH xserver 2/6] modesetting: move ms_do_pageflip to pageflip.c Date: Wed, 17 Aug 2016 18:29:07 +0800 Message-ID: <1471429751-17269-3-git-send-email-Qiang.Yu@amd.com> References: <1471429751-17269-1-git-send-email-Qiang.Yu@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1471429751-17269-1-git-send-email-Qiang.Yu-5C7GfCeVMHo@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: xorg-devel-bounces-go0+a7rfsptAfugRpC6u6w@public.gmane.org Sender: "xorg-devel" To: xorg-devel-go0+a7rfsptAfugRpC6u6w@public.gmane.org Cc: Qiang Yu , amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: amd-gfx.lists.freedesktop.org U2lnbmVkLW9mZi1ieTogUWlhbmcgWXUgPFFpYW5nLll1QGFtZC5jb20+Ci0tLQogaHcveGZyZWU4 Ni9kcml2ZXJzL21vZGVzZXR0aW5nL01ha2VmaWxlLmFtIHwgICAxICsKIGh3L3hmcmVlODYvZHJp dmVycy9tb2Rlc2V0dGluZy9kcml2ZXIuaCAgICB8ICA0OCArKysrKysKIGh3L3hmcmVlODYvZHJp dmVycy9tb2Rlc2V0dGluZy9wYWdlZmxpcC5jICB8IDI1MSArKysrKysrKysrKysrKysrKysrKysr KysrKysrCiBody94ZnJlZTg2L2RyaXZlcnMvbW9kZXNldHRpbmcvcHJlc2VudC5jICAgfCAyNTIg LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDQgZmlsZXMgY2hhbmdlZCwgMzAwIGluc2Vy dGlvbnMoKyksIDI1MiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBody94ZnJlZTg2 L2RyaXZlcnMvbW9kZXNldHRpbmcvcGFnZWZsaXAuYwoKZGlmZiAtLWdpdCBhL2h3L3hmcmVlODYv ZHJpdmVycy9tb2Rlc2V0dGluZy9NYWtlZmlsZS5hbSBiL2h3L3hmcmVlODYvZHJpdmVycy9tb2Rl c2V0dGluZy9NYWtlZmlsZS5hbQppbmRleCBjYTdlMDVhLi40NDgyM2IwIDEwMDY0NAotLS0gYS9o dy94ZnJlZTg2L2RyaXZlcnMvbW9kZXNldHRpbmcvTWFrZWZpbGUuYW0KKysrIGIvaHcveGZyZWU4 Ni9kcml2ZXJzL21vZGVzZXR0aW5nL01ha2VmaWxlLmFtCkBAIC01NCw2ICs1NCw3IEBAIG1vZGVz ZXR0aW5nX2Rydl9sYV9TT1VSQ0VTID0gXAogCSBzaDMyMjQuYyBcCiAJIHNoMzIyNC5oIFwKIAkg dmJsYW5rLmMgXAorCSBwYWdlZmxpcC5jIFwKIAkgJChOVUxMKQogCiBkcml2ZXJtYW5kaXIgPSAk KERSSVZFUl9NQU5fRElSKQpkaWZmIC0tZ2l0IGEvaHcveGZyZWU4Ni9kcml2ZXJzL21vZGVzZXR0 aW5nL2RyaXZlci5oIGIvaHcveGZyZWU4Ni9kcml2ZXJzL21vZGVzZXR0aW5nL2RyaXZlci5oCmlu ZGV4IDQ5OGI5YmYuLmMwZDgwYTggMTAwNjQ0Ci0tLSBhL2h3L3hmcmVlODYvZHJpdmVycy9tb2Rl c2V0dGluZy9kcml2ZXIuaAorKysgYi9ody94ZnJlZTg2L2RyaXZlcnMvbW9kZXNldHRpbmcvZHJp dmVyLmgKQEAgLTE1MywzICsxNTMsNTEgQEAgQm9vbCBtc192Ymxhbmtfc2NyZWVuX2luaXQoU2Ny ZWVuUHRyIHNjcmVlbik7CiB2b2lkIG1zX3ZibGFua19jbG9zZV9zY3JlZW4oU2NyZWVuUHRyIHNj cmVlbik7CiAKIEJvb2wgbXNfcHJlc2VudF9zY3JlZW5faW5pdChTY3JlZW5QdHIgc2NyZWVuKTsK KworI2lmZGVmIEdMQU1PUgorCisvKgorICogRXZlbnQgZGF0YSBmb3IgYW4gaW4gcHJvZ3Jlc3Mg ZmxpcC4KKyAqIFRoaXMgY29udGFpbnMgYSBwb2ludGVyIHRvIHRoZSB2YmxhbmsgZXZlbnQsCisg KiBhbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZsaXAgaW4gcHJvZ3Jlc3MuCisgKiBhIHJlZmVy ZW5jZSB0byB0aGlzIGlzIHN0b3JlZCBpbiB0aGUgcGVyLWNydGMKKyAqIGZsaXBzLgorICovCitz dHJ1Y3QgbXNfZmxpcGRhdGEgeworICAgIFNjcmVlblB0ciBzY3JlZW47CisgICAgdm9pZCAqZXZl bnQ7CisgICAgLyogbnVtYmVyIG9mIENSVEMgZXZlbnRzIHJlZmVyZW5jaW5nIHRoaXMgKi8KKyAg ICBpbnQgZmxpcF9jb3VudDsKKyAgICB1aW50NjRfdCBmZV9tc2M7CisgICAgdWludDY0X3QgZmVf dXNlYzsKKyAgICB1aW50MzJfdCBvbGRfZmJfaWQ7Cit9OworCisvKgorICogUGVyIGNydGMgcGFn ZWZsaXBwaW5nIGluZm9tYXRpb24sCisgKiBUaGVzZSBhcmUgc3VibWl0dGVkIHRvIHRoZSBxdWV1 aW5nIGNvZGUKKyAqIG9uZSBvZiB0aGVtIHBlciBjcnRjIHBlciBmbGlwLgorICovCitzdHJ1Y3Qg bXNfY3J0Y19wYWdlZmxpcCB7CisgICAgQm9vbCBvbl9yZWZlcmVuY2VfY3J0YzsKKyAgICAvKiBy ZWZlcmVuY2UgdG8gdGhlIG1zX2ZsaXBkYXRhICovCisgICAgc3RydWN0IG1zX2ZsaXBkYXRhICpm bGlwZGF0YTsKK307CisKK3R5cGVkZWYgdm9pZCAoKm1zX3BhZ2VmbGlwX2hhbmRsZXJfcHJvYyko dWludDY0X3QgZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVpbnQ2NF90IHVzZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZvaWQgKmRhdGEpOworCit0eXBlZGVmIHZvaWQgKCptc19wYWdlZmxpcF9hYm9ydF9wcm9jKSh2 b2lkICpkYXRhKTsKKworaW50IG1zX2ZsdXNoX2RybV9ldmVudHMoU2NyZWVuUHRyIHNjcmVlbik7 CisKK0Jvb2wgbXNfZG9fcGFnZWZsaXAoU2NyZWVuUHRyIHNjcmVlbiwKKyAgICAgICAgICAgICAg ICAgICAgUGl4bWFwUHRyIG5ld19mcm9udCwKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqZXZl bnQsCisgICAgICAgICAgICAgICAgICAgIGludCByZWZfY3J0Y192YmxhbmtfcGlwZSwKKyAgICAg ICAgICAgICAgICAgICAgQm9vbCBhc3luYywKKyAgICAgICAgICAgICAgICAgICAgbXNfcGFnZWZs aXBfaGFuZGxlcl9wcm9jIHBhZ2VmbGlwX2hhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgIG1z X3BhZ2VmbGlwX2Fib3J0X3Byb2MgcGFnZWZsaXBfYWJvcnQpOworCisjZW5kaWYKZGlmZiAtLWdp dCBhL2h3L3hmcmVlODYvZHJpdmVycy9tb2Rlc2V0dGluZy9wYWdlZmxpcC5jIGIvaHcveGZyZWU4 Ni9kcml2ZXJzL21vZGVzZXR0aW5nL3BhZ2VmbGlwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uNDU0OTc5MgotLS0gL2Rldi9udWxsCisrKyBiL2h3L3hmcmVlODYvZHJpdmVy cy9tb2Rlc2V0dGluZy9wYWdlZmxpcC5jCkBAIC0wLDAgKzEsMjUxIEBACisvKgorICogQ29weXJp Z2h0IMKpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwg Y29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlIGFuZCBpdHMK KyAqIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhv dXQgZmVlLCBwcm92aWRlZCB0aGF0CisgKiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBl YXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisgKiBub3RpY2Ug YW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRh dGlvbiwgYW5kCisgKiB0aGF0IHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBub3Qg YmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorICogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlz dHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLAorICogd3JpdHRlbiBw cmlvciBwZXJtaXNzaW9uLiAgVGhlIGNvcHlyaWdodCBob2xkZXJzIG1ha2Ugbm8gcmVwcmVzZW50 YXRpb25zCisgKiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55 IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMKKyAqIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3Ig aW1wbGllZCB3YXJyYW50eS4KKyAqCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMgRElTQ0xBSU0g QUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKKyAqIElOQ0xVRElO RyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywg SU4gTk8KKyAqIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9S IEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFO WSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsCisgKiBEQVRB IE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNF IE9SIE9USEVSCisgKiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5F Q1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFCisgKiBPRiBUSElTIFNPRlRXQVJFLgor ICovCisKKyNpZmRlZiBIQVZFX0RJWF9DT05GSUdfSAorI2luY2x1ZGUgImRpeC1jb25maWcuaCIK KyNlbmRpZgorCisjaW5jbHVkZSA8eHNlcnZlcl9wb2xsLmg+CisjaW5jbHVkZSA8eGY4NmRybS5o PgorCisjaW5jbHVkZSAiZHJpdmVyLmgiCisKKyNpZmRlZiBHTEFNT1IKKworLyoKKyAqIEZsdXNo IHRoZSBEUk0gZXZlbnQgcXVldWUgd2hlbiBmdWxsOyBtYWtlcyBzcGFjZSBmb3IgbmV3IGV2ZW50 cy4KKyAqCisgKiBSZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3IsIDAgaWYgdGhlcmUg d2FzIG5vdGhpbmcgdG8gcHJvY2VzcywKKyAqIG9yIDEgaWYgd2UgaGFuZGxlZCBhbnkgZXZlbnRz LgorICovCitpbnQKK21zX2ZsdXNoX2RybV9ldmVudHMoU2NyZWVuUHRyIHNjcmVlbikKK3sKKyAg ICBTY3JuSW5mb1B0ciBzY3JuID0geGY4NlNjcmVlblRvU2NybihzY3JlZW4pOworICAgIG1vZGVz ZXR0aW5nUHRyIG1zID0gbW9kZXNldHRpbmdQVFIoc2Nybik7CisKKyAgICBzdHJ1Y3QgcG9sbGZk IHAgPSB7IC5mZCA9IG1zLT5mZCwgLmV2ZW50cyA9IFBPTExJTiB9OworICAgIGludCByOworCisg ICAgZG8geworICAgICAgICAgICAgciA9IHhzZXJ2ZXJfcG9sbCgmcCwgMSwgMCk7CisgICAgfSB3 aGlsZSAociA9PSAtMSAmJiAoZXJybm8gPT0gRUlOVFIgfHwgZXJybm8gPT0gRUFHQUlOKSk7CisK KyAgICAvKiBJZiB0aGVyZSB3YXMgYW4gZXJyb3IsIHIgd2lsbCBiZSA8IDAuICBSZXR1cm4gdGhh dC4gIElmIHRoZXJlIHdhcworICAgICAqIG5vdGhpbmcgdG8gcHJvY2VzcywgciA9PSAwLiAgUmV0 dXJuIHRoYXQuCisgICAgICovCisgICAgaWYgKHIgPD0gMCkKKyAgICAgICAgcmV0dXJuIHI7CisK KyAgICAvKiBUcnkgdG8gaGFuZGxlIHRoZSBldmVudC4gIElmIHRoZXJlIHdhcyBhbiBlcnJvciwg cmV0dXJuIGl0LiAqLworICAgIHIgPSBkcm1IYW5kbGVFdmVudChtcy0+ZmQsICZtcy0+ZXZlbnRf Y29udGV4dCk7CisgICAgaWYgKHIgPCAwKQorICAgICAgICByZXR1cm4gcjsKKworICAgIC8qIE90 aGVyd2lzZSByZXR1cm4gMSB0byBpbmRpY2F0ZSB0aGF0IHdlIGhhbmRsZWQgYW4gZXZlbnQuICov CisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBCb29sCitxdWV1ZV9mbGlwX29uX2NydGMoU2Ny ZWVuUHRyIHNjcmVlbiwgeGY4NkNydGNQdHIgY3J0YywKKyAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgbXNfZmxpcGRhdGEgKmZsaXBkYXRhLAorICAgICAgICAgICAgICAgICAgIGludCByZWZfY3J0 Y192YmxhbmtfcGlwZSwgdWludDMyX3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgbXNfcGFn ZWZsaXBfaGFuZGxlcl9wcm9jIHBhZ2VmbGlwX2hhbmRsZXIsCisgICAgICAgICAgICAgICAgICAg bXNfcGFnZWZsaXBfYWJvcnRfcHJvYyBwYWdlZmxpcF9hYm9ydCkKK3sKKyAgICBTY3JuSW5mb1B0 ciBzY3JuID0geGY4NlNjcmVlblRvU2NybihzY3JlZW4pOworICAgIG1vZGVzZXR0aW5nUHRyIG1z ID0gbW9kZXNldHRpbmdQVFIoc2Nybik7CisgICAgZHJtbW9kZV9jcnRjX3ByaXZhdGVfcHRyIGRy bW1vZGVfY3J0YyA9IGNydGMtPmRyaXZlcl9wcml2YXRlOworICAgIHN0cnVjdCBtc19jcnRjX3Bh Z2VmbGlwICpmbGlwOworICAgIHVpbnQzMl90IHNlcTsKKyAgICBpbnQgZXJyOworCisgICAgZmxp cCA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IG1zX2NydGNfcGFnZWZsaXApKTsKKyAgICBpZiAo ZmxpcCA9PSBOVUxMKSB7CisgICAgICAgIHhmODZEcnZNc2coc2Nybi0+c2NybkluZGV4LCBYX1dB Uk5JTkcsCisgICAgICAgICAgICAgICAgICAgImZsaXAgcXVldWU6IGNhcnJpZXIgYWxsb2MgZmFp bGVkLlxuIik7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICAvKiBPbmx5IHRo ZSByZWZlcmVuY2UgY3J0YyB3aWxsIGZpbmFsbHkgZGVsaXZlciBpdHMgcGFnZSBmbGlwCisgICAg ICogY29tcGxldGlvbiBldmVudC4gQWxsIG90aGVyIGNydGMncyBldmVudHMgd2lsbCBiZSBkaXNj YXJkZWQuCisgICAgICovCisgICAgZmxpcC0+b25fcmVmZXJlbmNlX2NydGMgPSAoZHJtbW9kZV9j cnRjLT52YmxhbmtfcGlwZSA9PSByZWZfY3J0Y192YmxhbmtfcGlwZSk7CisgICAgZmxpcC0+Zmxp cGRhdGEgPSBmbGlwZGF0YTsKKworICAgIHNlcSA9IG1zX2RybV9xdWV1ZV9hbGxvYyhjcnRjLCBm bGlwLCBwYWdlZmxpcF9oYW5kbGVyLCBwYWdlZmxpcF9hYm9ydCk7CisgICAgaWYgKCFzZXEpIHsK KyAgICAgICAgZnJlZShmbGlwKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAg IC8qIHRha2UgYSByZWZlcmVuY2Ugb24gZmxpcGRhdGEgZm9yIHVzZSBpbiBmbGlwICovCisgICAg ZmxpcGRhdGEtPmZsaXBfY291bnQrKzsKKworICAgIHdoaWxlIChkcm1Nb2RlUGFnZUZsaXAobXMt PmZkLCBkcm1tb2RlX2NydGMtPm1vZGVfY3J0Yy0+Y3J0Y19pZCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIG1zLT5kcm1tb2RlLmZiX2lkLCBmbGFncywgKHZvaWQgKikgKHVpbnRwdHJfdCkg c2VxKSkgeworICAgICAgICBlcnIgPSBlcnJubzsKKyAgICAgICAgLyogV2UgbWF5IGhhdmUgZmFp bGVkIGJlY2F1c2UgdGhlIGV2ZW50IHF1ZXVlIHdhcyBmdWxsLiAgRmx1c2ggaXQKKyAgICAgICAg ICogYW5kIHJldHJ5LiAgSWYgdGhlcmUgd2FzIG5vdGhpbmcgdG8gZmx1c2gsIHRoZW4gd2UgZmFp bGVkIGZvcgorICAgICAgICAgKiBzb21lIG90aGVyIHJlYXNvbiBhbmQgc2hvdWxkIGp1c3QgcmV0 dXJuIGFuIGVycm9yLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKG1zX2ZsdXNoX2RybV9ldmVu dHMoc2NyZWVuKSA8PSAwKSB7CisgICAgICAgICAgICB4Zjg2RHJ2TXNnKHNjcm4tPnNjcm5JbmRl eCwgWF9XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAiZmxpcCBxdWV1ZSBmYWlsZWQ6 ICVzXG4iLCBzdHJlcnJvcihlcnIpKTsKKyAgICAgICAgICAgIC8qIEFib3J0aW5nIHdpbGwgYWxz byBkZWNyZW1lbnQgZmxpcF9jb3VudCBhbmQgZnJlZShmbGlwKS4gKi8KKyAgICAgICAgICAgIG1z X2RybV9hYm9ydF9zZXEoc2Nybiwgc2VxKTsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAg ICAgICAgfQorCisgICAgICAgIC8qIFdlIGZsdXNoZWQgc29tZSBldmVudHMsIHNvIHRyeSBhZ2Fp bi4gKi8KKyAgICAgICAgeGY4NkRydk1zZyhzY3JuLT5zY3JuSW5kZXgsIFhfV0FSTklORywgImZs aXAgcXVldWUgcmV0cnlcbiIpOworICAgIH0KKworICAgIC8qIFRoZSBwYWdlIGZsaXAgc3VjY2Vk ZWQuICovCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKworQm9vbAorbXNfZG9fcGFnZWZsaXAoU2Ny ZWVuUHRyIHNjcmVlbiwKKyAgICAgICAgICAgICAgIFBpeG1hcFB0ciBuZXdfZnJvbnQsCisgICAg ICAgICAgICAgICB2b2lkICpldmVudCwKKyAgICAgICAgICAgICAgIGludCByZWZfY3J0Y192Ymxh bmtfcGlwZSwKKyAgICAgICAgICAgICAgIEJvb2wgYXN5bmMsCisgICAgICAgICAgICAgICBtc19w YWdlZmxpcF9oYW5kbGVyX3Byb2MgcGFnZWZsaXBfaGFuZGxlciwKKyAgICAgICAgICAgICAgIG1z X3BhZ2VmbGlwX2Fib3J0X3Byb2MgcGFnZWZsaXBfYWJvcnQpCit7CisjaWZuZGVmIEdMQU1PUl9I QVNfR0JNCisgICAgcmV0dXJuIEZBTFNFOworI2Vsc2UKKyAgICBTY3JuSW5mb1B0ciBzY3JuID0g eGY4NlNjcmVlblRvU2NybihzY3JlZW4pOworICAgIG1vZGVzZXR0aW5nUHRyIG1zID0gbW9kZXNl dHRpbmdQVFIoc2Nybik7CisgICAgeGY4NkNydGNDb25maWdQdHIgY29uZmlnID0gWEY4Nl9DUlRD X0NPTkZJR19QVFIoc2Nybik7CisgICAgZHJtbW9kZV9ibyBuZXdfZnJvbnRfYm87CisgICAgdWlu dDMyX3QgZmxhZ3M7CisgICAgaW50IGk7CisgICAgc3RydWN0IG1zX2ZsaXBkYXRhICpmbGlwZGF0 YTsKKyAgICBnbGFtb3JfYmxvY2tfaGFuZGxlcihzY3JlZW4pOworCisgICAgbmV3X2Zyb250X2Jv LmdibSA9IGdsYW1vcl9nYm1fYm9fZnJvbV9waXhtYXAoc2NyZWVuLCBuZXdfZnJvbnQpOworICAg IG5ld19mcm9udF9iby5kdW1iID0gTlVMTDsKKyAgICBpZiAoIW5ld19mcm9udF9iby5nYm0pIHsK KyAgICAgICAgeGY4NkRydk1zZyhzY3JuLT5zY3JuSW5kZXgsIFhfRVJST1IsCisgICAgICAgICAg ICAgICAgICAgIkZhaWxlZCB0byBnZXQgR0JNIGJvIGZvciBmbGlwIHRvIG5ldyBmcm9udC5cbiIp OworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgZmxpcGRhdGEgPSBjYWxsb2Mo MSwgc2l6ZW9mKHN0cnVjdCBtc19mbGlwZGF0YSkpOworICAgIGlmICghZmxpcGRhdGEpIHsKKyAg ICAgICAgZHJtbW9kZV9ib19kZXN0cm95KCZtcy0+ZHJtbW9kZSwgJm5ld19mcm9udF9ibyk7Cisg ICAgICAgIHhmODZEcnZNc2coc2Nybi0+c2NybkluZGV4LCBYX0VSUk9SLAorICAgICAgICAgICAg ICAgICAgICJGYWlsZWQgdG8gYWxsb2NhdGUgZmxpcGRhdGEuXG4iKTsKKyAgICAgICAgcmV0dXJu IEZBTFNFOworICAgIH0KKworICAgIGZsaXBkYXRhLT5ldmVudCA9IGV2ZW50OworICAgIGZsaXBk YXRhLT5zY3JlZW4gPSBzY3JlZW47CisKKyAgICAvKgorICAgICAqIFRha2UgYSBsb2NhbCByZWZl cmVuY2Ugb24gZmxpcGRhdGEuCisgICAgICogaWYgdGhlIGZpcnN0IGZsaXAgZmFpbHMsIHRoZSBz ZXF1ZW5jZSBhYm9ydAorICAgICAqIGNvZGUgd2lsbCBmcmVlIHRoZSBjcnRjIGZsaXAgZGF0YSwg YW5kIGRyb3AKKyAgICAgKiBpdCdzIHJlZmVyZW5jZSB3aGljaCB3b3VsZCBjYXVzZSB0aGlzIHRv IGJlCisgICAgICogZnJlZWQgd2hlbiB3ZSBzdGlsbCByZXF1aXJlZCBpdC4KKyAgICAgKi8KKyAg ICBmbGlwZGF0YS0+ZmxpcF9jb3VudCsrOworCisgICAgLyogQ3JlYXRlIGEgbmV3IGhhbmRsZSBm b3IgdGhlIGJhY2sgYnVmZmVyICovCisgICAgZmxpcGRhdGEtPm9sZF9mYl9pZCA9IG1zLT5kcm1t b2RlLmZiX2lkOworICAgIGlmIChkcm1Nb2RlQWRkRkIobXMtPmZkLCBzY3JuLT52aXJ0dWFsWCwg c2Nybi0+dmlydHVhbFksCisgICAgICAgICAgICAgICAgICAgICBzY3JuLT5kZXB0aCwgc2Nybi0+ Yml0c1BlclBpeGVsLAorICAgICAgICAgICAgICAgICAgICAgZHJtbW9kZV9ib19nZXRfcGl0Y2go Jm5ld19mcm9udF9ibyksCisgICAgICAgICAgICAgICAgICAgICBkcm1tb2RlX2JvX2dldF9oYW5k bGUoJm5ld19mcm9udF9ibyksICZtcy0+ZHJtbW9kZS5mYl9pZCkpIHsKKyAgICAgICAgZ290byBl cnJvcl9vdXQ7CisgICAgfQorCisgICAgZHJtbW9kZV9ib19kZXN0cm95KCZtcy0+ZHJtbW9kZSwg Jm5ld19mcm9udF9ibyk7CisKKyAgICBmbGFncyA9IERSTV9NT0RFX1BBR0VfRkxJUF9FVkVOVDsK KyAgICBpZiAoYXN5bmMpCisgICAgICAgIGZsYWdzIHw9IERSTV9NT0RFX1BBR0VfRkxJUF9BU1lO QzsKKworICAgIC8qIFF1ZXVlIGZsaXBzIG9uIGFsbCBlbmFibGVkIENSVENzLgorICAgICAqCisg ICAgICogTm90ZSB0aGF0IGlmL3doZW4gd2UgZ2V0IHBlci1DUlRDIGJ1ZmZlcnMsIHdlJ2xsIGhh dmUgdG8gdXBkYXRlIHRoaXMuCisgICAgICogUmlnaHQgbm93IGl0IGFzc3VtZXMgYSBzaW5nbGUg c2hhcmVkIGZiIGFjcm9zcyBhbGwgQ1JUQ3MsIHdpdGggdGhlCisgICAgICoga2VybmVsIGZpeGlu ZyB1cCB0aGUgb2Zmc2V0IG9mIGVhY2ggQ1JUQyBhcyBuZWNlc3NhcnkuCisgICAgICoKKyAgICAg KiBBbHNvLCBmbGlwcyBxdWV1ZWQgb24gZGlzYWJsZWQgb3IgaW5jb3JyZWN0bHkgY29uZmlndXJl ZCBkaXNwbGF5cworICAgICAqIG1heSBuZXZlciBjb21wbGV0ZTsgdGhpcyBpcyBhIGNvbmZpZ3Vy YXRpb24gZXJyb3IuCisgICAgICovCisgICAgZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+bnVtX2Ny dGM7IGkrKykgeworICAgICAgICB4Zjg2Q3J0Y1B0ciBjcnRjID0gY29uZmlnLT5jcnRjW2ldOwor CisgICAgICAgIGlmICghbXNfY3J0Y19vbihjcnRjKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor CisgICAgICAgIGlmICghcXVldWVfZmxpcF9vbl9jcnRjKHNjcmVlbiwgY3J0YywgZmxpcGRhdGEs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZl9jcnRjX3ZibGFua19waXBlLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgcGFnZWZsaXBfaGFuZGxlciwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZWZsaXBfYWJvcnQpKSB7CisgICAg ICAgICAgICBnb3RvIGVycm9yX3VuZG87CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAg ICAqIERvIHdlIGhhdmUgbW9yZSB0aGFuIG91ciBsb2NhbCByZWZlcmVuY2UsCisgICAgICogaWYg c28gYW5kIG5vIGVycm9ycywgdGhlbiBkcm9wIG91ciBsb2NhbAorICAgICAqIHJlZmVyZW5jZSBh bmQgcmV0dXJuIG5vdy4KKyAgICAgKi8KKyAgICBpZiAoZmxpcGRhdGEtPmZsaXBfY291bnQgPiAx KSB7CisgICAgICAgIGZsaXBkYXRhLT5mbGlwX2NvdW50LS07CisgICAgICAgIHJldHVybiBUUlVF OworICAgIH0KKworZXJyb3JfdW5kbzoKKworICAgIC8qCisgICAgICogSGF2ZSB3ZSBqdXN0IGdv dCB0aGUgbG9jYWwgcmVmZXJlbmNlPworICAgICAqIGZyZWUgdGhlIGZyYW1lYnVmZmVyIGlmIHNv IHNpbmNlIG5vYm9keSBzdWNjZXNzZnVsbHkKKyAgICAgKiBzdWJtaXR0ZWQgYW55dGhpbmcKKyAg ICAgKi8KKyAgICBpZiAoZmxpcGRhdGEtPmZsaXBfY291bnQgPT0gMSkgeworICAgICAgICBkcm1N b2RlUm1GQihtcy0+ZmQsIG1zLT5kcm1tb2RlLmZiX2lkKTsKKyAgICAgICAgbXMtPmRybW1vZGUu ZmJfaWQgPSBmbGlwZGF0YS0+b2xkX2ZiX2lkOworICAgIH0KKworZXJyb3Jfb3V0OgorICAgIHhm ODZEcnZNc2coc2Nybi0+c2NybkluZGV4LCBYX1dBUk5JTkcsICJQYWdlIGZsaXAgZmFpbGVkOiAl c1xuIiwKKyAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSk7CisgICAgLyogaWYgb25seSB0 aGUgbG9jYWwgcmVmZXJlbmNlIC0gZnJlZSB0aGUgc3RydWN0dXJlLAorICAgICAqIGVsc2UgZHJv cCB0aGUgbG9jYWwgcmVmZXJlbmNlIGFuZCByZXR1cm4gKi8KKyAgICBpZiAoZmxpcGRhdGEtPmZs aXBfY291bnQgPT0gMSkKKyAgICAgICAgZnJlZShmbGlwZGF0YSk7CisgICAgZWxzZQorICAgICAg ICBmbGlwZGF0YS0+ZmxpcF9jb3VudC0tOworCisgICAgcmV0dXJuIEZBTFNFOworI2VuZGlmIC8q IEdMQU1PUl9IQVNfR0JNICovCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaHcveGZyZWU4Ni9k cml2ZXJzL21vZGVzZXR0aW5nL3ByZXNlbnQuYyBiL2h3L3hmcmVlODYvZHJpdmVycy9tb2Rlc2V0 dGluZy9wcmVzZW50LmMKaW5kZXggZmYyNDU5NC4uZjQzMThiNCAxMDA2NDQKLS0tIGEvaHcveGZy ZWU4Ni9kcml2ZXJzL21vZGVzZXR0aW5nL3ByZXNlbnQuYworKysgYi9ody94ZnJlZTg2L2RyaXZl cnMvbW9kZXNldHRpbmcvcHJlc2VudC5jCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSA8YXNz ZXJ0Lmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUg PHhzZXJ2ZXJfcG9sbC5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+ CiAjaW5jbHVkZSA8c3RkaW50Lmg+CkBAIC03Miw0MCArNzEsNiBAQCBtc19wcmVzZW50X2dldF91 c3RfbXNjKFJSQ3J0Y1B0ciBjcnRjLCBDQVJENjQgKnVzdCwgQ0FSRDY0ICptc2MpCiB9CiAKIC8q Ci0gKiBGbHVzaCB0aGUgRFJNIGV2ZW50IHF1ZXVlIHdoZW4gZnVsbDsgbWFrZXMgc3BhY2UgZm9y IG5ldyBldmVudHMuCi0gKgotICogUmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yLCAw IGlmIHRoZXJlIHdhcyBub3RoaW5nIHRvIHByb2Nlc3MsCi0gKiBvciAxIGlmIHdlIGhhbmRsZWQg YW55IGV2ZW50cy4KLSAqLwotc3RhdGljIGludAotbXNfZmx1c2hfZHJtX2V2ZW50cyhTY3JlZW5Q dHIgc2NyZWVuKQotewotICAgIFNjcm5JbmZvUHRyIHNjcm4gPSB4Zjg2U2NyZWVuVG9TY3JuKHNj cmVlbik7Ci0gICAgbW9kZXNldHRpbmdQdHIgbXMgPSBtb2Rlc2V0dGluZ1BUUihzY3JuKTsKLQot ICAgIHN0cnVjdCBwb2xsZmQgcCA9IHsgLmZkID0gbXMtPmZkLCAuZXZlbnRzID0gUE9MTElOIH07 Ci0gICAgaW50IHI7Ci0KLSAgICBkbyB7Ci0gICAgICAgICAgICByID0geHNlcnZlcl9wb2xsKCZw LCAxLCAwKTsKLSAgICB9IHdoaWxlIChyID09IC0xICYmIChlcnJubyA9PSBFSU5UUiB8fCBlcnJu byA9PSBFQUdBSU4pKTsKLQotICAgIC8qIElmIHRoZXJlIHdhcyBhbiBlcnJvciwgciB3aWxsIGJl IDwgMC4gIFJldHVybiB0aGF0LiAgSWYgdGhlcmUgd2FzCi0gICAgICogbm90aGluZyB0byBwcm9j ZXNzLCByID09IDAuICBSZXR1cm4gdGhhdC4KLSAgICAgKi8KLSAgICBpZiAociA8PSAwKQotICAg ICAgICByZXR1cm4gcjsKLQotICAgIC8qIFRyeSB0byBoYW5kbGUgdGhlIGV2ZW50LiAgSWYgdGhl cmUgd2FzIGFuIGVycm9yLCByZXR1cm4gaXQuICovCi0gICAgciA9IGRybUhhbmRsZUV2ZW50KG1z LT5mZCwgJm1zLT5ldmVudF9jb250ZXh0KTsKLSAgICBpZiAociA8IDApCi0gICAgICAgIHJldHVy biByOwotCi0gICAgLyogT3RoZXJ3aXNlIHJldHVybiAxIHRvIGluZGljYXRlIHRoYXQgd2UgaGFu ZGxlZCBhbiBldmVudC4gKi8KLSAgICByZXR1cm4gMTsKLX0KLQotLyoKICAqIENhbGxlZCB3aGVu IHRoZSBxdWV1ZWQgdmJsYW5rIGV2ZW50IGhhcyBvY2N1cnJlZAogICovCiBzdGF0aWMgdm9pZApA QCAtMjI2LDQwICsxOTEsNiBAQCBtc19wcmVzZW50X2ZsdXNoKFdpbmRvd1B0ciB3aW5kb3cpCiAK ICNpZmRlZiBHTEFNT1IKIAotLyoKLSAqIEV2ZW50IGRhdGEgZm9yIGFuIGluIHByb2dyZXNzIGZs aXAuCi0gKiBUaGlzIGNvbnRhaW5zIGEgcG9pbnRlciB0byB0aGUgdmJsYW5rIGV2ZW50LAotICog YW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmbGlwIGluIHByb2dyZXNzLgotICogYSByZWZlcmVu Y2UgdG8gdGhpcyBpcyBzdG9yZWQgaW4gdGhlIHBlci1jcnRjCi0gKiBmbGlwcy4KLSAqLwotc3Ry dWN0IG1zX2ZsaXBkYXRhIHsKLSAgICBTY3JlZW5QdHIgc2NyZWVuOwotICAgIHZvaWQgKmV2ZW50 OwotICAgIC8qIG51bWJlciBvZiBDUlRDIGV2ZW50cyByZWZlcmVuY2luZyB0aGlzICovCi0gICAg aW50IGZsaXBfY291bnQ7Ci0gICAgdWludDY0X3QgZmVfbXNjOwotICAgIHVpbnQ2NF90IGZlX3Vz ZWM7Ci0gICAgdWludDMyX3Qgb2xkX2ZiX2lkOwotfTsKLQotLyoKLSAqIFBlciBjcnRjIHBhZ2Vm bGlwcGluZyBpbmZvbWF0aW9uLAotICogVGhlc2UgYXJlIHN1Ym1pdHRlZCB0byB0aGUgcXVldWlu ZyBjb2RlCi0gKiBvbmUgb2YgdGhlbSBwZXIgY3J0YyBwZXIgZmxpcC4KLSAqLwotc3RydWN0IG1z X2NydGNfcGFnZWZsaXAgewotICAgIEJvb2wgb25fcmVmZXJlbmNlX2NydGM7Ci0gICAgLyogcmVm ZXJlbmNlIHRvIHRoZSBtc19mbGlwZGF0YSAqLwotICAgIHN0cnVjdCBtc19mbGlwZGF0YSAqZmxp cGRhdGE7Ci19OwotCi10eXBlZGVmIHZvaWQgKCptc19wYWdlZmxpcF9oYW5kbGVyX3Byb2MpKHVp bnQ2NF90IGZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 aW50NjRfdCB1c2VjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 b2lkICpkYXRhKTsKLQotdHlwZWRlZiB2b2lkICgqbXNfcGFnZWZsaXBfYWJvcnRfcHJvYykodm9p ZCAqZGF0YSk7Ci0KIC8qKgogICogRnJlZSBhbiBtc19jcnRjX3BhZ2VmbGlwLgogICoKQEAgLTMz NCwxODkgKzI2NSw2IEBAIG1zX3ByZXNlbnRfZmxpcF9hYm9ydCh2b2lkICpkYXRhKQogICAgIG1z X3ByZXNlbnRfZmxpcF9mcmVlKGZsaXApOwogfQogCi1zdGF0aWMgQm9vbAotcXVldWVfZmxpcF9v bl9jcnRjKFNjcmVlblB0ciBzY3JlZW4sIHhmODZDcnRjUHRyIGNydGMsCi0gICAgICAgICAgICAg ICAgICAgc3RydWN0IG1zX2ZsaXBkYXRhICpmbGlwZGF0YSwKLSAgICAgICAgICAgICAgICAgICBp bnQgcmVmX2NydGNfdmJsYW5rX3BpcGUsIHVpbnQzMl90IGZsYWdzLAotICAgICAgICAgICAgICAg ICAgIG1zX3BhZ2VmbGlwX2hhbmRsZXJfcHJvYyBwYWdlZmxpcF9oYW5kbGVyLAotICAgICAgICAg ICAgICAgICAgIG1zX3BhZ2VmbGlwX2Fib3J0X3Byb2MgcGFnZWZsaXBfYWJvcnQpCi17Ci0gICAg U2NybkluZm9QdHIgc2NybiA9IHhmODZTY3JlZW5Ub1Njcm4oc2NyZWVuKTsKLSAgICBtb2Rlc2V0 dGluZ1B0ciBtcyA9IG1vZGVzZXR0aW5nUFRSKHNjcm4pOwotICAgIGRybW1vZGVfY3J0Y19wcml2 YXRlX3B0ciBkcm1tb2RlX2NydGMgPSBjcnRjLT5kcml2ZXJfcHJpdmF0ZTsKLSAgICBzdHJ1Y3Qg bXNfY3J0Y19wYWdlZmxpcCAqZmxpcDsKLSAgICB1aW50MzJfdCBzZXE7Ci0gICAgaW50IGVycjsK LQotICAgIGZsaXAgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBtc19jcnRjX3BhZ2VmbGlwKSk7 Ci0gICAgaWYgKGZsaXAgPT0gTlVMTCkgewotICAgICAgICB4Zjg2RHJ2TXNnKHNjcm4tPnNjcm5J bmRleCwgWF9XQVJOSU5HLAotICAgICAgICAgICAgICAgICAgICJmbGlwIHF1ZXVlOiBjYXJyaWVy IGFsbG9jIGZhaWxlZC5cbiIpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAg LyogT25seSB0aGUgcmVmZXJlbmNlIGNydGMgd2lsbCBmaW5hbGx5IGRlbGl2ZXIgaXRzIHBhZ2Ug ZmxpcAotICAgICAqIGNvbXBsZXRpb24gZXZlbnQuIEFsbCBvdGhlciBjcnRjJ3MgZXZlbnRzIHdp bGwgYmUgZGlzY2FyZGVkLgotICAgICAqLwotICAgIGZsaXAtPm9uX3JlZmVyZW5jZV9jcnRjID0g KGRybW1vZGVfY3J0Yy0+dmJsYW5rX3BpcGUgPT0gcmVmX2NydGNfdmJsYW5rX3BpcGUpOwotICAg IGZsaXAtPmZsaXBkYXRhID0gZmxpcGRhdGE7Ci0KLSAgICBzZXEgPSBtc19kcm1fcXVldWVfYWxs b2MoY3J0YywgZmxpcCwgcGFnZWZsaXBfaGFuZGxlciwgcGFnZWZsaXBfYWJvcnQpOwotICAgIGlm ICghc2VxKSB7Ci0gICAgICAgIGZyZWUoZmxpcCk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAg ICB9Ci0KLSAgICAvKiB0YWtlIGEgcmVmZXJlbmNlIG9uIGZsaXBkYXRhIGZvciB1c2UgaW4gZmxp cCAqLwotICAgIGZsaXBkYXRhLT5mbGlwX2NvdW50Kys7Ci0KLSAgICB3aGlsZSAoZHJtTW9kZVBh Z2VGbGlwKG1zLT5mZCwgZHJtbW9kZV9jcnRjLT5tb2RlX2NydGMtPmNydGNfaWQsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICBtcy0+ZHJtbW9kZS5mYl9pZCwgZmxhZ3MsICh2b2lkICopICh1 aW50cHRyX3QpIHNlcSkpIHsKLSAgICAgICAgZXJyID0gZXJybm87Ci0gICAgICAgIC8qIFdlIG1h eSBoYXZlIGZhaWxlZCBiZWNhdXNlIHRoZSBldmVudCBxdWV1ZSB3YXMgZnVsbC4gIEZsdXNoIGl0 Ci0gICAgICAgICAqIGFuZCByZXRyeS4gIElmIHRoZXJlIHdhcyBub3RoaW5nIHRvIGZsdXNoLCB0 aGVuIHdlIGZhaWxlZCBmb3IKLSAgICAgICAgICogc29tZSBvdGhlciByZWFzb24gYW5kIHNob3Vs ZCBqdXN0IHJldHVybiBhbiBlcnJvci4KLSAgICAgICAgICovCi0gICAgICAgIGlmIChtc19mbHVz aF9kcm1fZXZlbnRzKHNjcmVlbikgPD0gMCkgewotICAgICAgICAgICAgeGY4NkRydk1zZyhzY3Ju LT5zY3JuSW5kZXgsIFhfV0FSTklORywKLSAgICAgICAgICAgICAgICAgICAgICAgImZsaXAgcXVl dWUgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJyKSk7Ci0gICAgICAgICAgICAvKiBBYm9ydGlu ZyB3aWxsIGFsc28gZGVjcmVtZW50IGZsaXBfY291bnQgYW5kIGZyZWUoZmxpcCkuICovCi0gICAg ICAgICAgICBtc19kcm1fYWJvcnRfc2VxKHNjcm4sIHNlcSk7Ci0gICAgICAgICAgICByZXR1cm4g RkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBXZSBmbHVzaGVkIHNvbWUgZXZlbnRzLCBz byB0cnkgYWdhaW4uICovCi0gICAgICAgIHhmODZEcnZNc2coc2Nybi0+c2NybkluZGV4LCBYX1dB Uk5JTkcsICJmbGlwIHF1ZXVlIHJldHJ5XG4iKTsKLSAgICB9Ci0KLSAgICAvKiBUaGUgcGFnZSBm bGlwIHN1Y2NlZGVkLiAqLwotICAgIHJldHVybiBUUlVFOwotfQotCi0KLXN0YXRpYyBCb29sCi1t c19kb19wYWdlZmxpcChTY3JlZW5QdHIgc2NyZWVuLAotICAgICAgICAgICAgICAgUGl4bWFwUHRy IG5ld19mcm9udCwKLSAgICAgICAgICAgICAgIHZvaWQgKmV2ZW50LAotICAgICAgICAgICAgICAg aW50IHJlZl9jcnRjX3ZibGFua19waXBlLAotICAgICAgICAgICAgICAgQm9vbCBhc3luYywKLSAg ICAgICAgICAgICAgIG1zX3BhZ2VmbGlwX2hhbmRsZXJfcHJvYyBwYWdlZmxpcF9oYW5kbGVyLAot ICAgICAgICAgICAgICAgbXNfcGFnZWZsaXBfYWJvcnRfcHJvYyBwYWdlZmxpcF9hYm9ydCkKLXsK LSNpZm5kZWYgR0xBTU9SX0hBU19HQk0KLSAgICByZXR1cm4gRkFMU0U7Ci0jZWxzZQotICAgIFNj cm5JbmZvUHRyIHNjcm4gPSB4Zjg2U2NyZWVuVG9TY3JuKHNjcmVlbik7Ci0gICAgbW9kZXNldHRp bmdQdHIgbXMgPSBtb2Rlc2V0dGluZ1BUUihzY3JuKTsKLSAgICB4Zjg2Q3J0Y0NvbmZpZ1B0ciBj b25maWcgPSBYRjg2X0NSVENfQ09ORklHX1BUUihzY3JuKTsKLSAgICBkcm1tb2RlX2JvIG5ld19m cm9udF9ibzsKLSAgICB1aW50MzJfdCBmbGFnczsKLSAgICBpbnQgaTsKLSAgICBzdHJ1Y3QgbXNf ZmxpcGRhdGEgKmZsaXBkYXRhOwotICAgIGdsYW1vcl9ibG9ja19oYW5kbGVyKHNjcmVlbik7Ci0K LSAgICBuZXdfZnJvbnRfYm8uZ2JtID0gZ2xhbW9yX2dibV9ib19mcm9tX3BpeG1hcChzY3JlZW4s IG5ld19mcm9udCk7Ci0gICAgbmV3X2Zyb250X2JvLmR1bWIgPSBOVUxMOwotICAgIGlmICghbmV3 X2Zyb250X2JvLmdibSkgewotICAgICAgICB4Zjg2RHJ2TXNnKHNjcm4tPnNjcm5JbmRleCwgWF9F UlJPUiwKLSAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGdldCBHQk0gYm8gZm9yIGZsaXAg dG8gbmV3IGZyb250LlxuIik7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICBm bGlwZGF0YSA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IG1zX2ZsaXBkYXRhKSk7Ci0gICAgaWYg KCFmbGlwZGF0YSkgewotICAgICAgICBkcm1tb2RlX2JvX2Rlc3Ryb3koJm1zLT5kcm1tb2RlLCAm bmV3X2Zyb250X2JvKTsKLSAgICAgICAgeGY4NkRydk1zZyhzY3JuLT5zY3JuSW5kZXgsIFhfRVJS T1IsCi0gICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBhbGxvY2F0ZSBmbGlwZGF0YS5cbiIp OwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgZmxpcGRhdGEtPmV2ZW50ID0g ZXZlbnQ7Ci0gICAgZmxpcGRhdGEtPnNjcmVlbiA9IHNjcmVlbjsKLQotICAgIC8qCi0gICAgICog VGFrZSBhIGxvY2FsIHJlZmVyZW5jZSBvbiBmbGlwZGF0YS4KLSAgICAgKiBpZiB0aGUgZmlyc3Qg ZmxpcCBmYWlscywgdGhlIHNlcXVlbmNlIGFib3J0Ci0gICAgICogY29kZSB3aWxsIGZyZWUgdGhl IGNydGMgZmxpcCBkYXRhLCBhbmQgZHJvcAotICAgICAqIGl0J3MgcmVmZXJlbmNlIHdoaWNoIHdv dWxkIGNhdXNlIHRoaXMgdG8gYmUKLSAgICAgKiBmcmVlZCB3aGVuIHdlIHN0aWxsIHJlcXVpcmVk IGl0LgotICAgICAqLwotICAgIGZsaXBkYXRhLT5mbGlwX2NvdW50Kys7Ci0KLSAgICAvKiBDcmVh dGUgYSBuZXcgaGFuZGxlIGZvciB0aGUgYmFjayBidWZmZXIgKi8KLSAgICBmbGlwZGF0YS0+b2xk X2ZiX2lkID0gbXMtPmRybW1vZGUuZmJfaWQ7Ci0gICAgaWYgKGRybU1vZGVBZGRGQihtcy0+ZmQs IHNjcm4tPnZpcnR1YWxYLCBzY3JuLT52aXJ0dWFsWSwKLSAgICAgICAgICAgICAgICAgICAgIHNj cm4tPmRlcHRoLCBzY3JuLT5iaXRzUGVyUGl4ZWwsCi0gICAgICAgICAgICAgICAgICAgICBkcm1t b2RlX2JvX2dldF9waXRjaCgmbmV3X2Zyb250X2JvKSwKLSAgICAgICAgICAgICAgICAgICAgIGRy bW1vZGVfYm9fZ2V0X2hhbmRsZSgmbmV3X2Zyb250X2JvKSwgJm1zLT5kcm1tb2RlLmZiX2lkKSkg ewotICAgICAgICBnb3RvIGVycm9yX291dDsKLSAgICB9Ci0KLSAgICBkcm1tb2RlX2JvX2Rlc3Ry b3koJm1zLT5kcm1tb2RlLCAmbmV3X2Zyb250X2JvKTsKLQotICAgIGZsYWdzID0gRFJNX01PREVf UEFHRV9GTElQX0VWRU5UOwotICAgIGlmIChhc3luYykKLSAgICAgICAgZmxhZ3MgfD0gRFJNX01P REVfUEFHRV9GTElQX0FTWU5DOwotCi0gICAgLyogUXVldWUgZmxpcHMgb24gYWxsIGVuYWJsZWQg Q1JUQ3MuCi0gICAgICoKLSAgICAgKiBOb3RlIHRoYXQgaWYvd2hlbiB3ZSBnZXQgcGVyLUNSVEMg YnVmZmVycywgd2UnbGwgaGF2ZSB0byB1cGRhdGUgdGhpcy4KLSAgICAgKiBSaWdodCBub3cgaXQg YXNzdW1lcyBhIHNpbmdsZSBzaGFyZWQgZmIgYWNyb3NzIGFsbCBDUlRDcywgd2l0aCB0aGUKLSAg ICAgKiBrZXJuZWwgZml4aW5nIHVwIHRoZSBvZmZzZXQgb2YgZWFjaCBDUlRDIGFzIG5lY2Vzc2Fy eS4KLSAgICAgKgotICAgICAqIEFsc28sIGZsaXBzIHF1ZXVlZCBvbiBkaXNhYmxlZCBvciBpbmNv cnJlY3RseSBjb25maWd1cmVkIGRpc3BsYXlzCi0gICAgICogbWF5IG5ldmVyIGNvbXBsZXRlOyB0 aGlzIGlzIGEgY29uZmlndXJhdGlvbiBlcnJvci4KLSAgICAgKi8KLSAgICBmb3IgKGkgPSAwOyBp IDwgY29uZmlnLT5udW1fY3J0YzsgaSsrKSB7Ci0gICAgICAgIHhmODZDcnRjUHRyIGNydGMgPSBj b25maWctPmNydGNbaV07Ci0KLSAgICAgICAgaWYgKCFtc19jcnRjX29uKGNydGMpKQotICAgICAg ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKCFxdWV1ZV9mbGlwX29uX2NydGMoc2NyZWVu LCBjcnRjLCBmbGlwZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmX2Ny dGNfdmJsYW5rX3BpcGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLCBw YWdlZmxpcF9oYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlZmxp cF9hYm9ydCkpIHsKLSAgICAgICAgICAgIGdvdG8gZXJyb3JfdW5kbzsKLSAgICAgICAgfQotICAg IH0KLQotICAgIC8qCi0gICAgICogRG8gd2UgaGF2ZSBtb3JlIHRoYW4gb3VyIGxvY2FsIHJlZmVy ZW5jZSwKLSAgICAgKiBpZiBzbyBhbmQgbm8gZXJyb3JzLCB0aGVuIGRyb3Agb3VyIGxvY2FsCi0g ICAgICogcmVmZXJlbmNlIGFuZCByZXR1cm4gbm93LgotICAgICAqLwotICAgIGlmIChmbGlwZGF0 YS0+ZmxpcF9jb3VudCA+IDEpIHsKLSAgICAgICAgZmxpcGRhdGEtPmZsaXBfY291bnQtLTsKLSAg ICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotCi1lcnJvcl91bmRvOgotCi0gICAgLyoKLSAgICAg KiBIYXZlIHdlIGp1c3QgZ290IHRoZSBsb2NhbCByZWZlcmVuY2U/Ci0gICAgICogZnJlZSB0aGUg ZnJhbWVidWZmZXIgaWYgc28gc2luY2Ugbm9ib2R5IHN1Y2Nlc3NmdWxseQotICAgICAqIHN1Ym1p dHRlZCBhbnl0aGluZwotICAgICAqLwotICAgIGlmIChmbGlwZGF0YS0+ZmxpcF9jb3VudCA9PSAx KSB7Ci0gICAgICAgIGRybU1vZGVSbUZCKG1zLT5mZCwgbXMtPmRybW1vZGUuZmJfaWQpOwotICAg ICAgICBtcy0+ZHJtbW9kZS5mYl9pZCA9IGZsaXBkYXRhLT5vbGRfZmJfaWQ7Ci0gICAgfQotCi1l cnJvcl9vdXQ6Ci0gICAgeGY4NkRydk1zZyhzY3JuLT5zY3JuSW5kZXgsIFhfV0FSTklORywgIlBh Z2UgZmxpcCBmYWlsZWQ6ICVzXG4iLAotICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKTsK LSAgICAvKiBpZiBvbmx5IHRoZSBsb2NhbCByZWZlcmVuY2UgLSBmcmVlIHRoZSBzdHJ1Y3R1cmUs Ci0gICAgICogZWxzZSBkcm9wIHRoZSBsb2NhbCByZWZlcmVuY2UgYW5kIHJldHVybiAqLwotICAg IGlmIChmbGlwZGF0YS0+ZmxpcF9jb3VudCA9PSAxKQotICAgICAgICBmcmVlKGZsaXBkYXRhKTsK LSAgICBlbHNlCi0gICAgICAgIGZsaXBkYXRhLT5mbGlwX2NvdW50LS07Ci0KLSAgICByZXR1cm4g RkFMU0U7Ci0jZW5kaWYgLyogR0xBTU9SX0hBU19HQk0gKi8KLX0KLQogLyoKICAqIFRlc3QgdG8g c2VlIGlmIHBhZ2UgZmxpcHBpbmcgaXMgcG9zc2libGUgb24gdGhlIHRhcmdldCBjcnRjCiAgKi8K LS0gCjIuNy40CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Xwp4b3JnLWRldmVsQGxpc3RzLngub3JnOiBYLk9yZyBkZXZlbG9wbWVudApBcmNoaXZlczogaHR0 cDovL2xpc3RzLngub3JnL2FyY2hpdmVzL3hvcmctZGV2ZWwKSW5mbzogaHR0cHM6Ly9saXN0cy54 Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hvcmctZGV2ZWw=