From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jason Ekstrand Subject: [PATCH 04/10] drm/syncobj: add sync obj wait interface. (v8) Date: Fri, 25 Aug 2017 10:52:22 -0700 Message-ID: <1503683548-23548-4-git-send-email-jason.ekstrand@intel.com> References: <1503683548-23548-1-git-send-email-jason.ekstrand@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pg0-x243.google.com (mail-pg0-x243.google.com [IPv6:2607:f8b0:400e:c05::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id 67DE76E8DE for ; Fri, 25 Aug 2017 17:52:42 +0000 (UTC) Received: by mail-pg0-x243.google.com with SMTP id 83so653844pgb.3 for ; Fri, 25 Aug 2017 10:52:42 -0700 (PDT) In-Reply-To: <1503683548-23548-1-git-send-email-jason.ekstrand@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Dave Airlie List-Id: dri-devel@lists.freedesktop.org RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KClRoaXMgaW50ZXJmYWNlIHdp bGwgYWxsb3cgc3luYyBvYmplY3QgdG8gYmUgdXNlZCB0byBiYWNrClZ1bGthbiBmZW5jZXMuIFRo aXMgQVBJIGlzIHByZXR0eSBtdWNoIHRoZSB2dWxrYW4gZmVuY2Ugd2FpdGluZwpBUEksIGFuZCBJ J3ZlIHBvcnRlZCB0aGUgY29kZSBmcm9tIGFtZGdwdS4KCnYyOiBhY2NlcHQgcmVsYXRpdmUgdGlt ZW91dCwgcGFzcyByZW1haW5pbmcgdGltZSBiYWNrCnRvIHVzZXJzcGFjZS4KdjM6IHJldHVybiB0 byBhYnNvbHV0ZSB0aW1lb3V0cy4KdjQ6IGFic29sdXRlIHplcm8gPSBwb2xsLAogICAgcmV3cml0 ZSBhbnkvYWxsIGNvZGUgdG8gaGF2ZSBzYW1lIG9wZXJhdGlvbiBmb3IgYXJyYXlzCiAgICByZXR1 cm4gLUVJTlZBTCBmb3IgMCBmZW5jZXMuCnY0LjE6IGZpeHVwIGZlbmNlcyBhbGxvY2F0aW9uIGNo ZWNrLCB1c2UgdTY0X3RvX3VzZXJfcHRyCnY1OiBtb3ZlIHRvIHNlYy9uc2VjLCBhbmQgdXNlIHRp bWVzcGVjNjQgZm9yIGNhbGNzLgp2NjogdXNlIC1FVElNRSBhbmQgZHJvcCB0aGUgb3V0IHN0YXR1 cyBmbGFnLiAoLUVUSU1FCmlzIHN1Z2dlc3RlZCBieSBpY2tsZSwgSSBjYW4gZmVlbCBhIHNoZWQg cGFpbnRpbmcpCnY3OiB0YWxrZWQgdG8gRGFuaWVsL0FybmQsIHVzZSBrdGltZSBhbmQgbnMgZXZl cnl3aGVyZS4Kdjg6IGJlIG1vcmUgY2FyZWZ1bCBpbiB0aGUgdGltZW91dCBjYWxjdWxhdGlvbnMK ICAgIHVzZSB1aW50MzJfdCBmb3IgY291bnRlciB2YXJpYWJsZXMgc28gd2UgZG9uJ3Qgb3ZlcmZs b3cKICAgIGdyYWNpb3VzbHkgaGFuZGxlIC1FTk9JTlQgYmVpbmcgcmV0dXJuZWQgZnJvbSBkbWFf ZmVuY2Vfd2FpdF90aW1lb3V0CgpTaWduZWQtb2ZmLWJ5OiBEYXZlIEFpcmxpZSA8YWlybGllZEBy ZWRoYXQuY29tPgpSZXZpZXdlZC1ieTogSmFzb24gRWtzdHJhbmQgPGphc29uQGpsZWtzdHJhbmQu bmV0PgpBY2tlZC1ieTogQ2hyaXN0aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29t PgotLS0KIGRyaXZlcnMvZ3B1L2RybS9kcm1faW50ZXJuYWwuaCB8ICAgMiArCiBkcml2ZXJzL2dw dS9kcm0vZHJtX2lvY3RsLmMgICAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL2RybV9zeW5jb2Jq LmMgIHwgMTQyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBpbmNs dWRlL3VhcGkvZHJtL2RybS5oICAgICAgICAgfCAgMTIgKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAx NTggaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faW50ZXJu YWwuaCBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faW50ZXJuYWwuaAppbmRleCA0ZTkwNmI4Li41MzRl NWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ludGVybmFsLmgKKysrIGIvZHJp dmVycy9ncHUvZHJtL2RybV9pbnRlcm5hbC5oCkBAIC0xNjcsMyArMTY3LDUgQEAgaW50IGRybV9z eW5jb2JqX2hhbmRsZV90b19mZF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpk YXRhLAogCQkJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2YXRlKTsKIGludCBkcm1fc3lu Y29ial9mZF90b19oYW5kbGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0 YSwKIAkJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdmF0ZSk7CitpbnQgZHJtX3N5bmNv Ympfd2FpdF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJICAg c3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2RybV9pb2N0bC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pb2N0bC5jCmluZGV4IGQ5MjBi MjEuLmI0ZjQ0MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faW9jdGwuYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lvY3RsLmMKQEAgLTY1Nyw2ICs2NTcsOCBAQCBzdGF0aWMg Y29uc3Qgc3RydWN0IGRybV9pb2N0bF9kZXNjIGRybV9pb2N0bHNbXSA9IHsKIAkJICAgICAgRFJN X1VOTE9DS0VEfERSTV9SRU5ERVJfQUxMT1cpLAogCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX1NZ TkNPQkpfRkRfVE9fSEFORExFLCBkcm1fc3luY29ial9mZF90b19oYW5kbGVfaW9jdGwsCiAJCSAg ICAgIERSTV9VTkxPQ0tFRHxEUk1fUkVOREVSX0FMTE9XKSwKKwlEUk1fSU9DVExfREVGKERSTV9J T0NUTF9TWU5DT0JKX1dBSVQsIGRybV9zeW5jb2JqX3dhaXRfaW9jdGwsCisJCSAgICAgIERSTV9V TkxPQ0tFRHxEUk1fUkVOREVSX0FMTE9XKSwKIH07CiAKICNkZWZpbmUgRFJNX0NPUkVfSU9DVExf Q09VTlQJQVJSQVlfU0laRSggZHJtX2lvY3RscyApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vZHJtX3N5bmNvYmouYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3luY29iai5jCmluZGV4IGVl YTM4ZDguLjRlODU2M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3luY29iai5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3luY29iai5jCkBAIC0xLDUgKzEsNyBAQAogLyoK ICAqIENvcHlyaWdodCAyMDE3IFJlZCBIYXQKKyAqIFBhcnRzIHBvcnRlZCBmcm9tIGFtZGdwdSAo ZmVuY2Ugd2FpdCBjb2RlKS4KKyAqIENvcHlyaWdodCAyMDE2IEFkdmFuY2VkIE1pY3JvIERldmlj ZXMsIEluYy4KICAqCiAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo YXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQogICogY29weSBvZiB0aGlzIHNvZnR3YXJl IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKQEAg LTMxLDYgKzMzLDkgQEAKICAqIHRoYXQgY29udGFpbiBhbiBvcHRpb25hbCBmZW5jZS4gVGhlIGZl bmNlIGNhbiBiZSB1cGRhdGVkIHdpdGggYSBuZXcKICAqIGZlbmNlLCBvciBiZSBOVUxMLgogICoK KyAqIHN5bmNvYmoncyBjYW4gYmUgd2FpdGVkIHVwb24sIHdoZXJlIGl0IHdpbGwgd2FpdCBmb3Ig dGhlIHVuZGVybHlpbmcKKyAqIGZlbmNlLgorICoKICAqIHN5bmNvYmoncyBjYW4gYmUgZXhwb3J0 IHRvIGZkJ3MgYW5kIGJhY2ssIHRoZXNlIGZkJ3MgYXJlIG9wYXF1ZSBhbmQKICAqIGhhdmUgbm8g b3RoZXIgdXNlIGNhc2UsIGV4Y2VwdCBwYXNzaW5nIHRoZSBzeW5jb2JqIGJldHdlZW4gcHJvY2Vz c2VzLgogICoKQEAgLTQ0NywzICs0NTIsMTQwIEBAIGRybV9zeW5jb2JqX2ZkX3RvX2hhbmRsZV9p b2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCXJldHVybiBkcm1fc3lu Y29ial9mZF90b19oYW5kbGUoZmlsZV9wcml2YXRlLCBhcmdzLT5mZCwKIAkJCQkJJmFyZ3MtPmhh bmRsZSk7CiB9CisKKy8qKgorICogZHJtX3RpbWVvdXRfYWJzX3RvX2ppZmZpZXMgLSBjYWxjdWxh dGUgamlmZmllcyB0aW1lb3V0IGZyb20gYWJzb2x1dGUgdmFsdWUKKyAqCisgKiBAdGltZW91dF9u c2VjOiB0aW1lb3V0IG5zZWMgY29tcG9uZW50IGluIG5zLCAwIGZvciBwb2xsCisgKgorICogQ2Fs Y3VsYXRlIHRoZSB0aW1lb3V0IGluIGppZmZpZXMgZnJvbSBhbiBhYnNvbHV0ZSB0aW1lIGluIHNl Yy9uc2VjLgorICovCitzdGF0aWMgc2lnbmVkIGxvbmcgZHJtX3RpbWVvdXRfYWJzX3RvX2ppZmZp ZXMoaW50NjRfdCB0aW1lb3V0X25zZWMpCit7CisJa3RpbWVfdCBhYnNfdGltZW91dCwgbm93Owor CXU2NCB0aW1lb3V0X25zLCB0aW1lb3V0X2ppZmZpZXM2NDsKKworCS8qIG1ha2UgMCB0aW1lb3V0 IG1lYW5zIHBvbGwgLSBhYnNvbHV0ZSAwIGRvZXNuJ3Qgc2VlbSB2YWxpZCAqLworCWlmICh0aW1l b3V0X25zZWMgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlhYnNfdGltZW91dCA9IG5zX3RvX2t0aW1l KHRpbWVvdXRfbnNlYyk7CisJbm93ID0ga3RpbWVfZ2V0KCk7CisKKwlpZiAoIWt0aW1lX2FmdGVy KGFic190aW1lb3V0LCBub3cpKQorCQlyZXR1cm4gMDsKKworCXRpbWVvdXRfbnMgPSBrdGltZV90 b19ucyhrdGltZV9zdWIoYWJzX3RpbWVvdXQsIG5vdykpOworCisJdGltZW91dF9qaWZmaWVzNjQg PSBuc2Vjc190b19qaWZmaWVzNjQodGltZW91dF9ucyk7CisJLyogIGNsYW1wIHRpbWVvdXQgdG8g YXZvaWQgaW5maW5pdGUgdGltZW91dCAqLworCWlmICh0aW1lb3V0X2ppZmZpZXM2NCA+PSBNQVhf U0NIRURVTEVfVElNRU9VVCAtIDEpCisJCXJldHVybiBNQVhfU0NIRURVTEVfVElNRU9VVCAtIDE7 CisKKwlyZXR1cm4gdGltZW91dF9qaWZmaWVzNjQgKyAxOworfQorCitzdGF0aWMgaW50IGRybV9z eW5jb2JqX3dhaXRfZmVuY2VzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0 IGRybV9maWxlICpmaWxlX3ByaXZhdGUsCisJCQkJICAgc3RydWN0IGRybV9zeW5jb2JqX3dhaXQg KndhaXQsCisJCQkJICAgc3RydWN0IGRtYV9mZW5jZSAqKmZlbmNlcykKK3sKKwlzaWduZWQgbG9u ZyB0aW1lb3V0ID0gZHJtX3RpbWVvdXRfYWJzX3RvX2ppZmZpZXMod2FpdC0+dGltZW91dF9uc2Vj KTsKKwlzaWduZWQgbG9uZyByZXQgPSAwOworCXVpbnQzMl90IGZpcnN0ID0gfjA7CisKKwlpZiAo d2FpdC0+ZmxhZ3MgJiBEUk1fU1lOQ09CSl9XQUlUX0ZMQUdTX1dBSVRfQUxMKSB7CisJCXVpbnQz Ml90IGk7CisJCWZvciAoaSA9IDA7IGkgPCB3YWl0LT5jb3VudF9oYW5kbGVzOyBpKyspIHsKKwkJ CXJldCA9IGRtYV9mZW5jZV93YWl0X3RpbWVvdXQoZmVuY2VzW2ldLCB0cnVlLCB0aW1lb3V0KTsK KworCQkJLyogVmFyaW91cyBkbWFfZmVuY2Ugd2FpdCBjYWxsYmFja3Mgd2lsbCByZXR1cm4KKwkJ CSAqIEVOT0VOVCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBmZW5jZSBoYXMgYWxyZWFkeQorCQkJICog YmVlbiBzaWduYWxlZC4gIFdlIG5lZWQgdG8gc2FuaXRpemUgdGhpcyB0byAwIHNvCisJCQkgKiB3 ZSBkb24ndCByZXR1cm4gZWFybHkgYW5kIHRoZSBjbGllbnQgZG9lc24ndCBzZWUKKwkJCSAqIGFu IHVuZXhwZWN0ZWQgZXJyb3IuCisJCQkgKi8KKwkJCWlmIChyZXQgPT0gLUVOT0VOVCkKKwkJCQly ZXQgPSAwOworCisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCQkJaWYgKHJldCA9 PSAwKQorCQkJCWJyZWFrOworCQkJdGltZW91dCA9IHJldDsKKwkJfQorCQlmaXJzdCA9IDA7CisJ fSBlbHNlIHsKKwkJcmV0ID0gZG1hX2ZlbmNlX3dhaXRfYW55X3RpbWVvdXQoZmVuY2VzLAorCQkJ CQkJIHdhaXQtPmNvdW50X2hhbmRsZXMsCisJCQkJCQkgdHJ1ZSwgdGltZW91dCwKKwkJCQkJCSAm Zmlyc3QpOworCX0KKworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJd2FpdC0+Zmly c3Rfc2lnbmFsZWQgPSBmaXJzdDsKKwlpZiAocmV0ID09IDApCisJCXJldHVybiAtRVRJTUU7CisJ cmV0dXJuIDA7Cit9CisKK2ludAorZHJtX3N5bmNvYmpfd2FpdF9pb2N0bChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3By aXZhdGUpCit7CisJc3RydWN0IGRybV9zeW5jb2JqX3dhaXQgKmFyZ3MgPSBkYXRhOworCXVpbnQz Ml90ICpoYW5kbGVzOworCXN0cnVjdCBkbWFfZmVuY2UgKipmZW5jZXM7CisJaW50IHJldCA9IDA7 CisJdWludDMyX3QgaTsKKworCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZF Ul9TWU5DT0JKKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoYXJncy0+ZmxhZ3MgIT0gMCAm JiBhcmdzLT5mbGFncyAhPSBEUk1fU1lOQ09CSl9XQUlUX0ZMQUdTX1dBSVRfQUxMKQorCQlyZXR1 cm4gLUVJTlZBTDsKKworCWlmIChhcmdzLT5jb3VudF9oYW5kbGVzID09IDApCisJCXJldHVybiAt RUlOVkFMOworCisJLyogR2V0IHRoZSBoYW5kbGVzIGZyb20gdXNlcnNwYWNlICovCisJaGFuZGxl cyA9IGttYWxsb2NfYXJyYXkoYXJncy0+Y291bnRfaGFuZGxlcywgc2l6ZW9mKHVpbnQzMl90KSwK KwkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoaGFuZGxlcyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01F TTsKKworCWlmIChjb3B5X2Zyb21fdXNlcihoYW5kbGVzLAorCQkJICAgdTY0X3RvX3VzZXJfcHRy KGFyZ3MtPmhhbmRsZXMpLAorCQkJICAgc2l6ZW9mKHVpbnQzMl90KSAqIGFyZ3MtPmNvdW50X2hh bmRsZXMpKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gZXJyX2ZyZWVfaGFuZGxlczsKKwl9 CisKKwlmZW5jZXMgPSBrY2FsbG9jKGFyZ3MtPmNvdW50X2hhbmRsZXMsCisJCQkgc2l6ZW9mKHN0 cnVjdCBkbWFfZmVuY2UgKiksIEdGUF9LRVJORUwpOworCWlmICghZmVuY2VzKSB7CisJCXJldCA9 IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWVfaGFuZGxlczsKKwl9CisKKwlmb3IgKGkgPSAwOyBp IDwgYXJncy0+Y291bnRfaGFuZGxlczsgaSsrKSB7CisJCXJldCA9IGRybV9zeW5jb2JqX2ZpbmRf ZmVuY2UoZmlsZV9wcml2YXRlLCBoYW5kbGVzW2ldLAorCQkJCQkgICAgICZmZW5jZXNbaV0pOwor CQlpZiAocmV0KQorCQkJZ290byBlcnJfZnJlZV9mZW5jZV9hcnJheTsKKwl9CisKKwlyZXQgPSBk cm1fc3luY29ial93YWl0X2ZlbmNlcyhkZXYsIGZpbGVfcHJpdmF0ZSwKKwkJCQkgICAgICBhcmdz LCBmZW5jZXMpOworCitlcnJfZnJlZV9mZW5jZV9hcnJheToKKwlmb3IgKGkgPSAwOyBpIDwgYXJn cy0+Y291bnRfaGFuZGxlczsgaSsrKQorCQlkbWFfZmVuY2VfcHV0KGZlbmNlc1tpXSk7CisJa2Zy ZWUoZmVuY2VzKTsKK2Vycl9mcmVlX2hhbmRsZXM6CisJa2ZyZWUoaGFuZGxlcyk7CisKKwlyZXR1 cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS9kcm0uaCBiL2luY2x1ZGUv dWFwaS9kcm0vZHJtLmgKaW5kZXggMTAxNTkzYS4uMDc1N2MxYSAxMDA2NDQKLS0tIGEvaW5jbHVk ZS91YXBpL2RybS9kcm0uaAorKysgYi9pbmNsdWRlL3VhcGkvZHJtL2RybS5oCkBAIC03MTgsNiAr NzE4LDE3IEBAIHN0cnVjdCBkcm1fc3luY29ial9oYW5kbGUgewogCV9fdTMyIHBhZDsKIH07CiAK KyNkZWZpbmUgRFJNX1NZTkNPQkpfV0FJVF9GTEFHU19XQUlUX0FMTCAoMSA8PCAwKQorc3RydWN0 IGRybV9zeW5jb2JqX3dhaXQgeworCV9fdTY0IGhhbmRsZXM7CisJLyogYWJzb2x1dGUgdGltZW91 dCAqLworCV9fczY0IHRpbWVvdXRfbnNlYzsKKwlfX3UzMiBjb3VudF9oYW5kbGVzOworCV9fdTMy IGZsYWdzOworCV9fdTMyIGZpcnN0X3NpZ25hbGVkOyAvKiBvbmx5IHZhbGlkIHdoZW4gbm90IHdh aXRpbmcgYWxsICovCisJX191MzIgcGFkOworfTsKKwogI2lmIGRlZmluZWQoX19jcGx1c3BsdXMp CiB9CiAjZW5kaWYKQEAgLTg0MCw2ICs4NTEsNyBAQCBleHRlcm4gIkMiIHsKICNkZWZpbmUgRFJN X0lPQ1RMX1NZTkNPQkpfREVTVFJPWQlEUk1fSU9XUigweEMwLCBzdHJ1Y3QgZHJtX3N5bmNvYmpf ZGVzdHJveSkKICNkZWZpbmUgRFJNX0lPQ1RMX1NZTkNPQkpfSEFORExFX1RPX0ZECURSTV9JT1dS KDB4QzEsIHN0cnVjdCBkcm1fc3luY29ial9oYW5kbGUpCiAjZGVmaW5lIERSTV9JT0NUTF9TWU5D T0JKX0ZEX1RPX0hBTkRMRQlEUk1fSU9XUigweEMyLCBzdHJ1Y3QgZHJtX3N5bmNvYmpfaGFuZGxl KQorI2RlZmluZSBEUk1fSU9DVExfU1lOQ09CSl9XQUlUCQlEUk1fSU9XUigweEMzLCBzdHJ1Y3Qg ZHJtX3N5bmNvYmpfd2FpdCkKIAogLyoqCiAgKiBEZXZpY2Ugc3BlY2lmaWMgaW9jdGxzIHNob3Vs ZCBvbmx5IGJlIGluIHRoZWlyIHJlc3BlY3RpdmUgaGVhZGVycwotLSAKMi41LjAuNDAwLmdmZjg2 ZmFmCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmkt ZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK