From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: [PATCH 10/13] drm/fb-helper: Support deferred setup Date: Tue, 4 Jul 2017 17:18:30 +0200 Message-ID: <20170704151833.17304-11-daniel.vetter@ffwll.ch> References: <20170704151833.17304-1-daniel.vetter@ffwll.ch> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170704151833.17304-1-daniel.vetter@ffwll.ch> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: DRI Development Cc: Liviu Dudau , Daniel Vetter , Intel Graphics Development , John Stultz , Thierry Reding List-Id: dri-devel@lists.freedesktop.org RkIgaGVscGVyIGNvZGUgZmFsbHMgYmFjayB0byBhIDEwMjR4NzY4IG1vZGUgaWYgbm8gb3V0cHV0 cyBhcmUgY29ubmVjdGVkCm9yIGRvbid0IHJlcG9ydCBiYWNrIGFueSBtb2RlcyB1cG9uIGluaXRp YWxpemF0aW9uLiBUaGlzIGNhbiBiZSBhbm5veWluZwpiZWNhdXNlIG91dHB1dHMgdGhhdCBhcmUg YWRkZWQgdG8gRkIgaGVscGVyIGxhdGVyIG9uIGNhbid0IGJlIHVzZWQgd2l0aApGQiBoZWxwZXIg aWYgdGhleSBkb24ndCBzdXBwb3J0IGEgbWF0Y2hpbmcgbW9kZS4KClRoZSBmYWxsYmFjayBpcyBp biBwbGFjZSBiZWNhdXNlIFZHQSBjb25uZWN0b3JzIGNhbiBoYXBwZW4gdG8gcmVwb3J0IGFuCnVu a25vd24gY29ubmVjdGlvbiBzdGF0dXMgZXZlbiB3aGVuIHRoZXkgYXJlIGluIGZhY3QgY29ubmVj dGVkLgoKU29tZSBkcml2ZXJzIGhhdmUgY3VzdG9tIHNvbHV0aW9ucyBpbiBwbGFjZSB0byBkZWZl ciBGQiBoZWxwZXIgc2V0dXAKdW50aWwgYXQgbGVhc3Qgb25lIG91dHB1dCBpcyBjb25uZWN0ZWQu IEJ1dCB0aGUgbG9naWMgYmVoaW5kIHRoZXNlCnNvbHV0aW9ucyBpcyBhbHdheXMgdGhlIHNhbWUg YW5kIHRoZXJlIGlzIG5vdGhpbmcgZHJpdmVyLXNwZWNpZmljIGFib3V0Cml0LCBzbyBhIGJldHRl ciBhbHRlcmF0aXZlIGlzIHRvIGZpeCB0aGUgRkIgaGVscGVyIGNvcmUgYW5kIGFkZCBzdXBwb3J0 CmZvciBhbGwgZHJpdmVycyBhdXRvbWF0aWNhbGx5LgoKVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQg Zm9yIGRlZmVycmVkIEZCIGhlbHBlciBzZXR1cC4gSXQgY2hlY2tzIGFsbCB0aGUKY29ubmVjdG9y cyBmb3IgdGhlaXIgY29ubmVjdGlvbiBzdGF0dXMsIGFuZCBpZiBhbGwgb2YgdGhlbSByZXBvcnQg dG8gYmUKZGlzY29ubmVjdGVkIG1hcmtzIHRoZSBGQiBoZWxwZXIgYXMgbmVlZGluZyBkZWZlcnJl ZCBzZXR1cC4gV2hldCBzZXR1cAppcyBkZWZlcnJlZCwgdGhlIEZCIGhlbHBlciBjb3JlIHdpbGwg YXV0b21hdGljYWxseSByZXRyeSBzZXR1cCBhZnRlciBhCmhvdHBsdWcgZXZlbnQsIGFuZCBpdCB3 aWxsIGtlZXAgdHJ5aW5nIHVudGlsIGl0IHN1Y2NlZWRzLgoKdjI6IFJlYmFzZSBvbnRvIG15IGVu dGlyZWx5IHJld29ya2VkIGZiZGV2IGhlbHBlciBsb2NraW5nLiBPbmUgYmlnCmRpZmZlcmVuY2Ug aXMgdGhhdCB0aGlzIHZlcnNpb24gYWdhaW4gZHJvcHMmcmVhY3F1aXJlcyB0aGUgZmJkZXYgbG9j awood2hpY2ggaXMgbm93IGZiX2hlbHBlci0+bG9jaywgYnV0IGJlZm9yZSB0aGlzIHBhdGNoIHNl cmllcyBpdCB3YXMKbW9kZV9jb25maWctPm11dGV4KSwgYmVjYXVzZSByZWdpc3Rlcl9mcmFtZWJ1 ZmZlciBtdXN0IGJlIGFibGUgdG8KcmVjdXJzZSBiYWNrIGludG8gZmJkZXYgaGVscGVyIGNvZGUg Zm9yIHRoZSBpbml0aWFsIHNjcmVlbiBzZXR1cC4KCnYzOiBfX2RybV9mYl9oZWxwZXJfaW5pdGlh bF9jb25maWcgbXVzdCBob2xkIGZiX2hlbHBlci0+bG9jayB1cG9uCnJldHVybiwgSSd2ZSBmdW1i bGVkIHRoYXQgaW4gdGhlIGRlZmVycmVkIHNldHVwIGNhc2UgKExpdml1KS4KCnY0OiBJIHdhcyBi bGluZCwgcmVkbyB0aGlzIGFsbC4gX19kcm1fZmJfaGVscGVyX2luaXRpYWxfY29uZmlnCnNob3Vs ZG4ndCBuZWVkIHRvIHJlYWNxdWlyZSBmYl9oZWxwZXItPmxvY2ssIHRoYXQganVzdCBjb25mdXNl cwpjYWxsZXJzLiBJIG15c2VsZiBnb3QgY29uZnVzZWQgYnkga2VybmVsX2ZiX2hlbHBlcl9sb2Nr IGFuZCBzb21laG93CnRob3VnaHQgaXQncyB0aGUgc2FtZSBhcyBmYl9oZWxwZXItPmxvY2suIFRz ay4KCkFsc28gc2ltcGxpZnkgdGhlIGxvZ2ljIGEgYml0ICh3ZSBkb24ndCBuZWVkIHR3byBmdW5j dGlvbnMgdG8gcHJvYmUKY29ubmVjdG9ycyksIHdlIGNhbiBzdGljayBtdWNoIGNsb3NlciB0byB0 aGUgZXhpc3RpbmcgY29kZS4gQW5kIHVwZGF0ZQpzb21lIGNvbW1lbnRzIEkndmUgc3BvdHRlZCB0 aGF0IGFyZSBvdXRkYXRlZC4KCnY1OiBEb24ndCBwYXNzIC1FQUdBSU4gdG8gZHJpdmVycywgaXQn cyBqdXN0IGFuIGludGVybmFsIGVycm9yIGNvZGUKKExpdml1KS4KCnY2OiBBZGQgX2FuZF91bmxv Y2sgc3VmZml4IHRvIGNsYXJpZnkgbG9ja2luZyAoTWFhcnRlbikKCkNjOiBMaXZpdSBEdWRhdSA8 bGl2aXVAZHVkYXUuY28udWs+CkNjOiBKb2huIFN0dWx0eiA8am9obi5zdHVsdHpAbGluYXJvLm9y Zz4KQ2M6IFRoaWVycnkgUmVkaW5nIDx0cmVkaW5nQG52aWRpYS5jb20+CkNjOiBNYWFydGVuIExh bmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXguaW50ZWwuY29tPgpUZXN0ZWQtYnk6IEpv aG4gU3R1bHR6IDxqb2huLnN0dWx0ekBsaW5hcm8ub3JnPgpTaWduZWQtb2ZmLWJ5OiBUaGllcnJ5 IFJlZGluZyA8dHJlZGluZ0BudmlkaWEuY29tPiAodjEpClNpZ25lZC1vZmYtYnk6IERhbmllbCBW ZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2RybV9m Yl9oZWxwZXIuYyB8IDEwMiArKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0t CiBpbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmggICAgIHwgIDIzICsrKysrKysrKwogMiBmaWxl cyBjaGFuZ2VkLCA5MCBpbnNlcnRpb25zKCspLCAzNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9m Yl9oZWxwZXIuYwppbmRleCBhMzVhMmFiOGU2MzAuLjEzNTM2NzU0ODAyNyAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJt X2ZiX2hlbHBlci5jCkBAIC01MzIsNiArNTMyLDkgQEAgaW50IGRybV9mYl9oZWxwZXJfcmVzdG9y ZV9mYmRldl9tb2RlX3VubG9ja2VkKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIpCiAJ aWYgKCFkcm1fZmJkZXZfZW11bGF0aW9uKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCWlmIChSRUFE X09OQ0UoZmJfaGVscGVyLT5kZWZlcnJlZF9zZXR1cCkpCisJCXJldHVybiAwOworCiAJbXV0ZXhf bG9jaygmZmJfaGVscGVyLT5sb2NrKTsKIAlyZXQgPSByZXN0b3JlX2ZiZGV2X21vZGUoZmJfaGVs cGVyKTsKIApAQCAtMTYxNiw4ICsxNjE5LDcgQEAgRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVy X3Bhbl9kaXNwbGF5KTsKIAogLyoKICAqIEFsbG9jYXRlcyB0aGUgYmFja2luZyBzdG9yYWdlIGFu ZCBzZXRzIHVwIHRoZSBmYmRldiBpbmZvIHN0cnVjdHVyZSB0aHJvdWdoCi0gKiB0aGUgLT5mYl9w cm9iZSBjYWxsYmFjayBhbmQgdGhlbiByZWdpc3RlcnMgdGhlIGZiZGV2IGFuZCBzZXRzIHVwIHRo ZSBwYW5pYwotICogbm90aWZpZXIuCisgKiB0aGUgLT5mYl9wcm9iZSBjYWxsYmFjay4KICAqLwog c3RhdGljIGludCBkcm1fZmJfaGVscGVyX3NpbmdsZV9mYl9wcm9iZShzdHJ1Y3QgZHJtX2ZiX2hl bHBlciAqZmJfaGVscGVyLAogCQkJCQkgaW50IHByZWZlcnJlZF9icHApCkBAIC0xNzE1LDEzICsx NzE3LDggQEAgc3RhdGljIGludCBkcm1fZmJfaGVscGVyX3NpbmdsZV9mYl9wcm9iZShzdHJ1Y3Qg ZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAogCX0KIAogCWlmIChjcnRjX2NvdW50ID09IDAgfHwg c2l6ZXMuZmJfd2lkdGggPT0gLTEgfHwgc2l6ZXMuZmJfaGVpZ2h0ID09IC0xKSB7Ci0JCS8qCi0J CSAqIGhtbSBldmVyeW9uZSB3ZW50IGF3YXkgLSBhc3N1bWUgVkdBIGNhYmxlIGp1c3QgZmVsbCBv dXQKLQkJICogYW5kIHdpbGwgY29tZSBiYWNrIGxhdGVyLgotCQkgKi8KLQkJRFJNX0lORk8oIkNh bm5vdCBmaW5kIGFueSBjcnRjIG9yIHNpemVzIC0gZ29pbmcgMTAyNHg3NjhcbiIpOwotCQlzaXpl cy5mYl93aWR0aCA9IHNpemVzLnN1cmZhY2Vfd2lkdGggPSAxMDI0OwotCQlzaXplcy5mYl9oZWln aHQgPSBzaXplcy5zdXJmYWNlX2hlaWdodCA9IDc2ODsKKwkJRFJNX0lORk8oIkNhbm5vdCBmaW5k IGFueSBjcnRjIG9yIHNpemVzXG4iKTsKKwkJcmV0dXJuIC1FQUdBSU47CiAJfQogCiAJLyogSGFu ZGxlIG91ciBvdmVyYWxsb2NhdGlvbiAqLwpAQCAtMjM1MCw2ICsyMzQ3LDU5IEBAIHN0YXRpYyB2 b2lkIGRybV9zZXR1cF9jcnRjcyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAogCWtm cmVlKGVuYWJsZWQpOwogfQogCisvKiBOb3RlOiBEcm9wcyBmYl9oZWxwZXItPmxvY2sgYmVmb3Jl IHJldHVybmluZy4gKi8KK3N0YXRpYyBpbnQKK19fZHJtX2ZiX2hlbHBlcl9pbml0aWFsX2NvbmZp Z19hbmRfdW5sb2NrKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCisJCQkJCSAgaW50 IGJwcF9zZWwpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGZiX2hlbHBlci0+ZGV2Owor CXN0cnVjdCBmYl9pbmZvICppbmZvOworCXVuc2lnbmVkIGludCB3aWR0aCwgaGVpZ2h0OworCWlu dCByZXQ7CisKKwl3aWR0aCA9IGRldi0+bW9kZV9jb25maWcubWF4X3dpZHRoOworCWhlaWdodCA9 IGRldi0+bW9kZV9jb25maWcubWF4X2hlaWdodDsKKworCWRybV9zZXR1cF9jcnRjcyhmYl9oZWxw ZXIsIHdpZHRoLCBoZWlnaHQpOworCXJldCA9IGRybV9mYl9oZWxwZXJfc2luZ2xlX2ZiX3Byb2Jl KGZiX2hlbHBlciwgYnBwX3NlbCk7CisJaWYgKHJldCA8IDApIHsKKwkJaWYgKHJldCA9PSAtRUFH QUlOKSB7CisJCQlmYl9oZWxwZXItPnByZWZlcnJlZF9icHAgPSBicHBfc2VsOworCQkJZmJfaGVs cGVyLT5kZWZlcnJlZF9zZXR1cCA9IHRydWU7CisJCQlyZXQgPSAwOworCQl9CisJCW11dGV4X3Vu bG9jaygmZmJfaGVscGVyLT5sb2NrKTsKKworCQlyZXR1cm4gcmV0OworCX0KKworCWZiX2hlbHBl ci0+ZGVmZXJyZWRfc2V0dXAgPSBmYWxzZTsKKworCWluZm8gPSBmYl9oZWxwZXItPmZiZGV2Owor CWluZm8tPnZhci5waXhjbG9jayA9IDA7CisKKwkvKiBOZWVkIHRvIGRyb3AgbG9ja3MgdG8gYXZv aWQgcmVjdXJzaXZlIGRlYWRsb2NrIGluCisJICogcmVnaXN0ZXJfZnJhbWVidWZmZXIuIFRoaXMg aXMgb2sgYmVjYXVzZSB0aGUgb25seSB0aGluZyBsZWZ0IHRvIGRvIGlzCisJICogcmVnaXN0ZXIg dGhlIGZiZGV2IGVtdWxhdGlvbiBpbnN0YW5jZSBpbiBrZXJuZWxfZmJfaGVscGVyX2xpc3QuICov CisJbXV0ZXhfdW5sb2NrKCZmYl9oZWxwZXItPmxvY2spOworCisJcmV0ID0gcmVnaXN0ZXJfZnJh bWVidWZmZXIoaW5mbyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlkZXZfaW5m byhkZXYtPmRldiwgImZiJWQ6ICVzIGZyYW1lIGJ1ZmZlciBkZXZpY2VcbiIsCisJCSBpbmZvLT5u b2RlLCBpbmZvLT5maXguaWQpOworCisJbXV0ZXhfbG9jaygma2VybmVsX2ZiX2hlbHBlcl9sb2Nr KTsKKwlpZiAobGlzdF9lbXB0eSgma2VybmVsX2ZiX2hlbHBlcl9saXN0KSkKKwkJcmVnaXN0ZXJf c3lzcnFfa2V5KCd2JywgJnN5c3JxX2RybV9mYl9oZWxwZXJfcmVzdG9yZV9vcCk7CisKKwlsaXN0 X2FkZCgmZmJfaGVscGVyLT5rZXJuZWxfZmJfbGlzdCwgJmtlcm5lbF9mYl9oZWxwZXJfbGlzdCk7 CisJbXV0ZXhfdW5sb2NrKCZrZXJuZWxfZmJfaGVscGVyX2xvY2spOworCisJcmV0dXJuIDA7Cit9 CisKIC8qKgogICogZHJtX2ZiX2hlbHBlcl9pbml0aWFsX2NvbmZpZyAtIHNldHVwIGEgc2FuZSBp bml0aWFsIGNvbm5lY3RvciBjb25maWd1cmF0aW9uCiAgKiBAZmJfaGVscGVyOiBmYl9oZWxwZXIg ZGV2aWNlIHN0cnVjdApAQCAtMjM5NCwzOSArMjQ0NCwxNSBAQCBzdGF0aWMgdm9pZCBkcm1fc2V0 dXBfY3J0Y3Moc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKICAqLwogaW50IGRybV9m Yl9oZWxwZXJfaW5pdGlhbF9jb25maWcoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwg aW50IGJwcF9zZWwpCiB7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGZiX2hlbHBlci0+ZGV2 OwotCXN0cnVjdCBmYl9pbmZvICppbmZvOwogCWludCByZXQ7CiAKIAlpZiAoIWRybV9mYmRldl9l bXVsYXRpb24pCiAJCXJldHVybiAwOwogCiAJbXV0ZXhfbG9jaygmZmJfaGVscGVyLT5sb2NrKTsK LQlkcm1fc2V0dXBfY3J0Y3MoZmJfaGVscGVyLAotCQkJZGV2LT5tb2RlX2NvbmZpZy5tYXhfd2lk dGgsCi0JCQlkZXYtPm1vZGVfY29uZmlnLm1heF9oZWlnaHQpOwotCXJldCA9IGRybV9mYl9oZWxw ZXJfc2luZ2xlX2ZiX3Byb2JlKGZiX2hlbHBlciwgYnBwX3NlbCk7Ci0JbXV0ZXhfdW5sb2NrKCZm Yl9oZWxwZXItPmxvY2spOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJcmV0ID0gX19kcm1f ZmJfaGVscGVyX2luaXRpYWxfY29uZmlnX2FuZF91bmxvY2soZmJfaGVscGVyLCBicHBfc2VsKTsK IAotCWluZm8gPSBmYl9oZWxwZXItPmZiZGV2OwotCWluZm8tPnZhci5waXhjbG9jayA9IDA7Ci0J cmV0ID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVy biByZXQ7Ci0KLQlkZXZfaW5mbyhkZXYtPmRldiwgImZiJWQ6ICVzIGZyYW1lIGJ1ZmZlciBkZXZp Y2VcbiIsCi0JCSBpbmZvLT5ub2RlLCBpbmZvLT5maXguaWQpOwotCi0JbXV0ZXhfbG9jaygma2Vy bmVsX2ZiX2hlbHBlcl9sb2NrKTsKLQlpZiAobGlzdF9lbXB0eSgma2VybmVsX2ZiX2hlbHBlcl9s aXN0KSkKLQkJcmVnaXN0ZXJfc3lzcnFfa2V5KCd2JywgJnN5c3JxX2RybV9mYl9oZWxwZXJfcmVz dG9yZV9vcCk7Ci0KLQlsaXN0X2FkZCgmZmJfaGVscGVyLT5rZXJuZWxfZmJfbGlzdCwgJmtlcm5l bF9mYl9oZWxwZXJfbGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZrZXJuZWxfZmJfaGVscGVyX2xvY2sp OwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2ZiX2hl bHBlcl9pbml0aWFsX2NvbmZpZyk7CiAKQEAgLTI0NTksNiArMjQ4NSwxMiBAQCBpbnQgZHJtX2Zi X2hlbHBlcl9ob3RwbHVnX2V2ZW50KHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIpCiAJ CXJldHVybiAwOwogCiAJbXV0ZXhfbG9jaygmZmJfaGVscGVyLT5sb2NrKTsKKwlpZiAoZmJfaGVs cGVyLT5kZWZlcnJlZF9zZXR1cCkgeworCQllcnIgPSBfX2RybV9mYl9oZWxwZXJfaW5pdGlhbF9j b25maWdfYW5kX3VubG9jayhmYl9oZWxwZXIsCisJCQkJZmJfaGVscGVyLT5wcmVmZXJyZWRfYnBw KTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAlpZiAoIWZiX2hlbHBlci0+ZmIgfHwgIWRybV9mYl9o ZWxwZXJfaXNfYm91bmQoZmJfaGVscGVyKSkgewogCQlmYl9oZWxwZXItPmRlbGF5ZWRfaG90cGx1 ZyA9IHRydWU7CiAJCW11dGV4X3VubG9jaygmZmJfaGVscGVyLT5sb2NrKTsKZGlmZiAtLWdpdCBh L2luY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaCBiL2luY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIu aAppbmRleCBlYTE3MGI5NmU4OGQuLmE1ZWE2ZmZkZmVjYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9k cm0vZHJtX2ZiX2hlbHBlci5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaApAQCAt MjMyLDYgKzIzMiwyOSBAQCBzdHJ1Y3QgZHJtX2ZiX2hlbHBlciB7CiAJICogbmVlZHMgdG8gYmUg cmVwcm9iZSB3aGVuIGZiZGV2IGlzIGluIGNvbnRyb2wgYWdhaW4uCiAJICovCiAJYm9vbCBkZWxh eWVkX2hvdHBsdWc7CisKKwkvKioKKwkgKiBAZGVmZXJyZWRfc2V0dXA6CisJICoKKwkgKiBJZiBu byBvdXRwdXRzIGFyZSBjb25uZWN0ZWQgKGRpc2Nvbm5lY3RlZCBvciB1bmtub3duKSB0aGUgRkIg aGVscGVyCisJICogY29kZSB3aWxsIGRlZmVyIHNldHVwIHVudGlsIGF0IGxlYXN0IG9uZSBvZiB0 aGUgb3V0cHV0cyBzaG93cyB1cC4KKwkgKiBUaGlzIGZpZWxkIGtlZXBzIHRyYWNrIG9mIHRoZSBz dGF0dXMgc28gdGhhdCBzZXR1cCBjYW4gYmUgcmV0cmllZAorCSAqIGF0IGV2ZXJ5IGhvdHBsdWcg ZXZlbnQgdW50aWwgaXQgc3VjY2VlZHMgZXZlbnR1YWxseS4KKwkgKgorCSAqIFByb3RlY3RlZCBi eSBAbG9jay4KKwkgKi8KKwlib29sIGRlZmVycmVkX3NldHVwOworCisJLyoqCisJICogQHByZWZl cnJlZF9icHA6CisJICoKKwkgKiBUZW1wb3Jhcnkgc3RvcmFnZSBmb3IgdGhlIGRyaXZlcidzIHBy ZWZlcnJlZCBCUFAgc2V0dGluZyBwYXNzZWQgdG8KKwkgKiBGQiBoZWxwZXIgaW5pdGlhbGl6YXRp b24uIFRoaXMgbmVlZHMgdG8gYmUgdHJhY2tlZCBzbyB0aGF0IGRlZmVycmVkCisJICogRkIgaGVs cGVyIHNldHVwIGNhbiBwYXNzIHRoaXMgb24uCisJICoKKwkgKiBTZWUgYWxzbzogQGRlZmVycmVk X3NldHVwCisJICovCisJaW50IHByZWZlcnJlZF9icHA7CiB9OwogCiAvKioKLS0gCjIuMTMuMgoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4 IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==