From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1760586AbYFLMyj (ORCPT ); Thu, 12 Jun 2008 08:54:39 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1758211AbYFLMyb (ORCPT ); Thu, 12 Jun 2008 08:54:31 -0400 Received: from wf-out-1314.google.com ([209.85.200.173]:37450 "EHLO wf-out-1314.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1759047AbYFLMya (ORCPT ); Thu, 12 Jun 2008 08:54:30 -0400 DomainKey-Signature: a=rsa-sha1; c=nofws; d=googlemail.com; s=gamma; h=message-id:date:from:reply-to:to:subject:cc:in-reply-to :mime-version:content-type:references; b=yIYRxluhVoQL0ajuzhbjrshWMSOdUE7RJIOPE2/ThK88sfwyfv3rVTuXkfO2G3uMSP bYk/51VsXFUf+9FtIgSSH/BESC7M40ezQY3bKbjwIef1J8ItWxrqhDSKZEb3S2JIUMdh JR8GXdh1Sv8xl3RaZvWzCDpFkFCmjSAKiQ1sU= Message-ID: <7c86c4470806120554w38a11307qa34511cf4f8b4aba@mail.gmail.com> Date: Thu, 12 Jun 2008 14:54:15 +0200 From: "stephane eranian" Reply-To: eranian@gmail.com To: "Greg KH" Subject: Re: [patch 12/21] perfmon2 minimal: sysfs interface Cc: linux-kernel@vger.kernel.org In-Reply-To: <7c86c4470806110800w465f1c91k7e8f0bb8fba18ca3@mail.gmail.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_13300_30308438.1213275255794" References: <484daff1.1358560a.0808.0267@mx.google.com> <20080611144955.GA20145@kroah.com> <7c86c4470806110800w465f1c91k7e8f0bb8fba18ca3@mail.gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org ------=_Part_13300_30308438.1213275255794 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline Greg, I looked at the documentation and the examples. Find attached an updated version of the perfmon-sysfs.diff patch. I have grouped attribute functions into common show/store functions with a strcmp on the attribute name. I have also used the kobject_init_and_add() function. Once thing still confusing to me is the business with kobject_put() after a kobject_init_and_add(). Is that necessary to drop the ref count to zero? Also when you link to a parent, like this: pfm_kernel_kobj = kobject_create_and_add("perfmon", kernel_kobj); Does this increment the ref count on the parent? In any case, let me know if there are still things that must be changed/simplified in my file. Thanks. ------=_Part_13300_30308438.1213275255794 Content-Type: application/octet-stream; name=perfmon-sysfs.diff Content-Transfer-Encoding: base64 X-Attachment-Id: f_fhdcqnch0 Content-Disposition: attachment; filename=perfmon-sysfs.diff U3ViamVjdDogc3lzZnMgaW50ZXJmYWNlCgpUaGlzIHBhdGNoIGFkZHMgdGhlIHN5c2ZzIGludGVy ZmFjZSB0byB0aGUgcGVyZm1vbjIgc3Vic3lzdGVtLiBJdCBpcwp1c2VkIGZvciBjb25maWd1cmF0 aW9uIG9mIHRoZSBpbnRlcmZhY2UuIEl0IGV4cG9zZXMgdGhlIFBNVSByZWdpc3RlcgptYXBwaW5n cyBhbmQgdmFyaW91cyBhdHRyaWJ1dGVzIG9mIHRoZSBzdWJzeXN0ZW0uCgpTaWduZWQtb2ZmLWJ5 OiBTdGVwaGFuZSBFcmFuaWFuIDxlcmFuaWFuQGdtYWlsLmNvbT4KLS0KCkluZGV4OiBvL3BlcmZt b24vcGVyZm1vbl9pbml0LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gby5vcmlnL3BlcmZtb24vcGVyZm1vbl9p bml0LmMJMjAwOC0wNi0xMSAyMzo1NDowNy4wMDAwMDAwMDAgKzAyMDAKKysrIG8vcGVyZm1vbi9w ZXJmbW9uX2luaXQuYwkyMDA4LTA2LTExIDIzOjU0OjMzLjAwMDAwMDAwMCArMDIwMApAQCAtNjIs NiArNjIsOSBAQAogCWlmIChwZm1faW5pdF9mcygpKQogCQlnb3RvIGVycm9yX2Rpc2FibGU7CiAK KwlpZiAocGZtX2luaXRfc3lzZnMoKSkKKwkJZ290byBlcnJvcl9kaXNhYmxlOworCiAJLyogbm90 IGNyaXRpY2FsLCBzbyBubyBlcnJvciBjaGVja2luZyAqLwogCXBmbV9pbml0X2RlYnVnZnMoKTsK IApJbmRleDogby9wZXJmbW9uL3BlcmZtb25fc3lzZnMuYwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251 bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrIG8vcGVyZm1vbi9wZXJm bW9uX3N5c2ZzLmMJMjAwOC0wNi0xMiAxNDo0Mjo1MS4wMDAwMDAwMDAgKzAyMDAKQEAgLTAsMCAr MSwzNDggQEAKKy8qCisgKiBwZXJmbW9uX3N5c2ZzLmM6IHBlcmZtb24yIHN5c2ZzIGludGVyZmFj ZQorICoKKyAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBwZXJmbW9uMiBpbnRlcmZhY2Ugd2hp Y2gKKyAqIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgaGFyZHdhcmUgcGVyZm9ybWFuY2UgY291bnRl cnMKKyAqIG9mIHRoZSBob3N0IHByb2Nlc3Nvci4KKyAqCisgKiBUaGUgaW5pdGlhbCB2ZXJzaW9u IG9mIHBlcmZtb24uYyB3YXMgd3JpdHRlbiBieQorICogR2FuZXNoIFZlbmtpdGFjaGFsYW0sIElC TSBDb3JwLgorICoKKyAqIFRoZW4gaXQgd2FzIG1vZGlmaWVkIGZvciBwZXJmbW9uLTEueCBieSBT dGVwaGFuZSBFcmFuaWFuIGFuZAorICogRGF2aWQgTW9zYmVyZ2VyLCBIZXdsZXR0IFBhY2thcmQg Q28uCisgKgorICogVmVyc2lvbiBQZXJmbW9uLTIueCBpcyBhIGNvbXBsZXRlIHJld3JpdGUgb2Yg cGVyZm1vbi0xLngKKyAqIGJ5IFN0ZXBoYW5lIEVyYW5pYW4sIEhld2xldHQgUGFja2FyZCBDby4K KyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNiBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1l bnQgQ29tcGFueSwgTC5QLgorICogQ29udHJpYnV0ZWQgYnkgU3RlcGhhbmUgRXJhbmlhbiA8ZXJh bmlhbkBocGwuaHAuY29tPgorICogICAgICAgICAgICAgICAgRGF2aWQgTW9zYmVyZ2VyLVRhbmcg PGRhdmlkbUBocGwuaHAuY29tPgorICoKKyAqIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcGVyZm1v biBhdmFpbGFibGUgYXQ6CisgKiAJaHR0cDovL3BlcmZtb24yLnNmLm5ldAorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor ICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m dHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBC b3N0b24sIE1BCisgKiAwMjExMS0xMzA3IFVTQQorICovCisjaW5jbHVkZSA8bGludXgva2VybmVs Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+IC8qIGZvciBFWFBPUlRfU1lNQk9MICovCisj aW5jbHVkZSA8bGludXgvcGVyZm1vbl9rZXJuLmg+CisjaW5jbHVkZSAicGVyZm1vbl9wcml2Lmgi CisKK3N0cnVjdCBwZm1fYXR0cmlidXRlIHsKKwlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7CisJc3Np emVfdCAoKnNob3cpKHZvaWQgKiwgc3RydWN0IHBmbV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKik7 CisJc3NpemVfdCAoKnN0b3JlKSh2b2lkICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK307Cisj ZGVmaW5lIHRvX2F0dHIobikgY29udGFpbmVyX29mKG4sIHN0cnVjdCBwZm1fYXR0cmlidXRlLCBh dHRyKTsKKworI2RlZmluZSBQRk1fUk9TX0FUVFIoX25hbWUsIF9zaG93KSBcCisJc3RydWN0IHBm bV9hdHRyaWJ1dGUgYXR0cl8jI19uYW1lID0gX19BVFRSKF9uYW1lLCAwNDQ0LCBfc2hvdywgTlVM TCkKKworI2RlZmluZSBQRk1fUk9fQVRUUihfbmFtZSwgX3Nob3cpIFwKKwlzdHJ1Y3Qga29ial9h dHRyaWJ1dGUgYXR0cl8jI19uYW1lID0gX19BVFRSKF9uYW1lLCAwNDQ0LCBfc2hvdywgTlVMTCkK KworI2RlZmluZSBQRk1fUldfQVRUUihfbmFtZSwgX3Nob3csIF9zdG9yZSkgCQkJXAorCXN0cnVj dCBrb2JqX2F0dHJpYnV0ZSBhdHRyXyMjX25hbWUgPSBfX0FUVFIoX25hbWUsIDA2NDQsIF9zaG93 LCBfc3RvcmUpCisKKyNkZWZpbmUgaXNfYXR0cl9uYW1lKGEsIG4pICghc3RyY21wKChhKS0+YXR0 ci5uYW1lLCBuKSkKK2ludCBwZm1fc3lzZnNfYWRkX3BtdShzdHJ1Y3QgcGZtX3BtdV9jb25maWcg KnBtdSk7CisKK3N0YXRpYyBzdHJ1Y3Qga29iamVjdCAqcGZtX2tlcm5lbF9rb2JqOworCitzdGF0 aWMgc3NpemVfdCBwZm1fcG11X2F0dHJfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJc3Ry dWN0IGF0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBwZm1fcG11X2NvbmZp ZyAqcG11ID0gdG9fcG11KGtvYmopOworCXN0cnVjdCBwZm1fYXR0cmlidXRlICphdHRyaWJ1dGUg PSB0b19hdHRyKGF0dHIpOworCXJldHVybiBhdHRyaWJ1dGUtPnNob3cgPyBhdHRyaWJ1dGUtPnNo b3cocG11LCBhdHRyaWJ1dGUsIGJ1ZikgOiAtRUlPOworfQorCitzdGF0aWMgc3NpemVfdCBwZm1f cmVnc19hdHRyX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCisJCXN0cnVjdCBhdHRyaWJ1dGUg KmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcGZtX3JlZ21hcF9kZXNjICpyZWcgPSB0b19y ZWcoa29iaik7CisJc3RydWN0IHBmbV9hdHRyaWJ1dGUgKmF0dHJpYnV0ZSA9IHRvX2F0dHIoYXR0 cik7CisJcmV0dXJuIGF0dHJpYnV0ZS0+c2hvdyA/IGF0dHJpYnV0ZS0+c2hvdyhyZWcsIGF0dHJp YnV0ZSwgYnVmKSA6IC1FSU87Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZnNfb3BzIHBmbV9wbXVf c3lzZnNfb3BzID0geworCS5zaG93ID0gcGZtX3BtdV9hdHRyX3Nob3cKK307CisKK3N0YXRpYyBz dHJ1Y3Qgc3lzZnNfb3BzIHBmbV9yZWdzX3N5c2ZzX29wcyA9IHsKKwkuc2hvdyAgPSBwZm1fcmVn c19hdHRyX3Nob3cKK307CisKKworc3RhdGljIHN0cnVjdCBrb2JqX3R5cGUgcGZtX3BtdV9rdHlw ZSA9IHsKKwkuc3lzZnNfb3BzID0gJnBmbV9wbXVfc3lzZnNfb3BzLAorfTsKKworc3RhdGljIHN0 cnVjdCBrb2JqX3R5cGUgcGZtX3JlZ3Nfa3R5cGUgPSB7CisJLnN5c2ZzX29wcyA9ICZwZm1fcmVn c19zeXNmc19vcHMsCit9OworCitzdGF0aWMgc3NpemVfdCBwZm1fY29udHJvbHNfc2hvdyhzdHJ1 Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYp Cit7CisKKwlpZiAoaXNfYXR0cl9uYW1lKGF0dHIsICJ2ZXJzaW9uIikpCisJCXJldHVybiBzbnBy aW50ZihidWYsIFBBR0VfU0laRSwgIiV1LiV1XG4iLCAgUEZNX1ZFUlNJT05fTUFKLCBQRk1fVkVS U0lPTl9NSU4pOworCisJaWYgKGlzX2F0dHJfbmFtZShhdHRyLCAidGFza19zZXNzaW9uc19jb3Vu dCIpKQorCQlyZXR1cm4gcGZtX3N5c2ZzX3Jlc19zaG93KGJ1ZiwgUEFHRV9TSVpFLCAwKTsKKwor CWlmIChpc19hdHRyX25hbWUoYXR0ciwgImRlYnVnIikpCisJCXJldHVybiBzbnByaW50ZihidWYs IFBBR0VfU0laRSwgIiVkXG4iLCBwZm1fY29udHJvbHMuZGVidWcpOworCisJaWYgKGlzX2F0dHJf bmFtZShhdHRyLCAidGFza19ncm91cCIpKQorCQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJ WkUsICIlZFxuIiwgcGZtX2NvbnRyb2xzLnRhc2tfZ3JvdXApOworCisJaWYgKGlzX2F0dHJfbmFt ZShhdHRyLCAiYXJnX21lbV9tYXgiKSkKKwkJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpF LCAiJXp1XG4iLCBwZm1fY29udHJvbHMuYXJnX21lbV9tYXgpOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBzc2l6ZV90IHBmbV9jb250cm9sc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwg c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAorCQkJIAkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6 ZV90IGNvdW50KQoreworCXNpemVfdCBkOworCisJaWYgKHNzY2FuZihidWYsICIlenUiLCAmZCkg IT0gMSkKKwkJZ290byBza2lwOworCisJaWYgKGlzX2F0dHJfbmFtZShhdHRyLCAiZGVidWciKSkK KwkJcGZtX2NvbnRyb2xzLmRlYnVnID0gZDsKKworCWlmIChpc19hdHRyX25hbWUoYXR0ciwgInRh c2tfZ3JvdXAiKSkKKwkJcGZtX2NvbnRyb2xzLnRhc2tfZ3JvdXAgPSBkOworCisJaWYgKGlzX2F0 dHJfbmFtZShhdHRyLCAiYXJnX21lbV9tYXgiKSkgeworCQkvKgorCQkgKiB3ZSBpbXBvc2UgYSBw YWdlIGFzIHRoZSBtaW5pbXVtLgorCQkgKgorCQkgKiBUaGlzIGxpbWl0IG1heSBiZSBzbWFsbGVy IHRoYW4gdGhlIHN0YWNrIGJ1ZmZlcgorCQkgKiBhdmFpbGFibGUgYW5kIHRoYXQgaXMgZmluZS4K KwkJICovCisJCWlmIChkID49IFBBR0VfU0laRSkKKwkJCXBmbV9jb250cm9scy5hcmdfbWVtX21h eCA9IGQ7CisJfQorCitza2lwOgorCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIC9zeXMva2Vy bmVsL3BlcmZtb24gYXR0cmlidXRlcworICovCitzdGF0aWMgUEZNX1JPX0FUVFIodmVyc2lvbiwg cGZtX2NvbnRyb2xzX3Nob3cpOworc3RhdGljIFBGTV9ST19BVFRSKHRhc2tfc2Vzc2lvbnNfY291 bnQsIHBmbV9jb250cm9sc19zaG93KTsKK3N0YXRpYyBQRk1fUldfQVRUUihkZWJ1ZywgcGZtX2Nv bnRyb2xzX3Nob3csIHBmbV9jb250cm9sc19zdG9yZSk7CitzdGF0aWMgUEZNX1JXX0FUVFIodGFz a19ncm91cCwgcGZtX2NvbnRyb2xzX3Nob3csIHBmbV9jb250cm9sc19zdG9yZSk7CitzdGF0aWMg UEZNX1JXX0FUVFIoYXJnX21lbV9tYXgsIHBmbV9jb250cm9sc19zaG93LCBwZm1fY29udHJvbHNf c3RvcmUpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcGZtX2tlcm5lbF9hdHRyc1tdID0g eworCSZhdHRyX3ZlcnNpb24uYXR0ciwKKwkmYXR0cl90YXNrX3Nlc3Npb25zX2NvdW50LmF0dHIs CisJJmF0dHJfZGVidWcuYXR0ciwKKwkmYXR0cl90YXNrX2dyb3VwLmF0dHIsCisJJmF0dHJfYXJn X21lbV9tYXguYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91 cCBwZm1fa2VybmVsX2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gcGZtX2tlcm5lbF9hdHRycywK K307CisKKy8qCisgKiBwZXItcmVnIGF0dHJpYnV0ZXMKKyAqLworc3RhdGljIHNzaXplX3QgcGZt X3JlZ19zaG93KHZvaWQgKmRhdGEsIHN0cnVjdCBwZm1fYXR0cmlidXRlICphdHRyLCBjaGFyICpi dWYpCit7CisJc3RydWN0IHBmbV9yZWdtYXBfZGVzYyAqcmVnOworCWludCB3OworCisJcmVnID0g ZGF0YTsKKworCWlmIChpc19hdHRyX25hbWUoYXR0ciwgIm5hbWUiKSkKKwkJcmV0dXJuIHNucHJp bnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIHJlZy0+ZGVzYyk7CisKKwlpZiAoaXNfYXR0cl9u YW1lKGF0dHIsICJkZmxfdmFsIikpCisJCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwg IjB4JWxseFxuIiwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKXJlZy0+ZGZsX3ZhbCk7CisKKwlp ZiAoaXNfYXR0cl9uYW1lKGF0dHIsICJ3aWR0aCIpKSB7CisJCXcgPSAocmVnLT50eXBlICYgUEZN X1JFR19DNjQpID8KKwkJICAgIHBmbV9wbXVfY29uZi0+Y291bnRlcl93aWR0aCA6IDY0OworCQly ZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgdyk7CisJfQorCisJaWYgKGlz X2F0dHJfbmFtZShhdHRyLCAicnN2ZF9tc2siKSkKKwkJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFH RV9TSVpFLCAiMHglbGx4XG4iLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmVnLT5yc3ZkX21z ayk7CisKKwlpZiAoaXNfYXR0cl9uYW1lKGF0dHIsICJhZGRyIikpCisJCXJldHVybiBzbnByaW50 ZihidWYsIFBBR0VfU0laRSwgIjB4JWx4XG4iLCByZWctPmh3X2FkZHIpOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBQRk1fUk9TX0FUVFIobmFtZSwgcGZtX3JlZ19zaG93KTsKK3N0YXRpYyBQ Rk1fUk9TX0FUVFIoZGZsX3ZhbCwgcGZtX3JlZ19zaG93KTsKK3N0YXRpYyBQRk1fUk9TX0FUVFIo cnN2ZF9tc2ssIHBmbV9yZWdfc2hvdyk7CitzdGF0aWMgUEZNX1JPU19BVFRSKHdpZHRoLCBwZm1f cmVnX3Nob3cpOworc3RhdGljIFBGTV9ST1NfQVRUUihhZGRyLCBwZm1fcmVnX3Nob3cpOworCitz dGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcGZtX3JlZ19hdHRyc1tdID0geworCSZhdHRyX25hbWUu YXR0ciwKKwkmYXR0cl9kZmxfdmFsLmF0dHIsCisJJmF0dHJfcnN2ZF9tc2suYXR0ciwKKwkmYXR0 cl93aWR0aC5hdHRyLAorCSZhdHRyX2FkZHIuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgc3Ry dWN0IGF0dHJpYnV0ZV9ncm91cCBwZm1fcmVnX2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gcGZt X3JlZ19hdHRycywKK307CisKK3N0YXRpYyBzc2l6ZV90IG1vZGVsX3Nob3codm9pZCAqaW5mbywg c3RydWN0IHBmbV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcGZtX3Bt dV9jb25maWcgKnAgPSBpbmZvOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVz XG4iLCBwLT5wbXVfbmFtZSk7Cit9CitzdGF0aWMgUEZNX1JPU19BVFRSKG1vZGVsLCBtb2RlbF9z aG93KTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBmbV9wbXVfZGVzY19hdHRyc1tdID0g eworCSZhdHRyX21vZGVsLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1 dGVfZ3JvdXAgcGZtX3BtdV9kZXNjX2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gcGZtX3BtdV9k ZXNjX2F0dHJzLAorfTsKKworc3RhdGljIGludCBwZm1fc3lzZnNfYWRkX3BtdV9yZWdzKHN0cnVj dCBwZm1fcG11X2NvbmZpZyAqcG11KQoreworCXN0cnVjdCBwZm1fcmVnbWFwX2Rlc2MgKnJlZzsK Kwl1bnNpZ25lZCBpbnQgaSwgazsKKwlpbnQgcmV0OworCisJcmVnID0gcG11LT5wbWNfZGVzYzsK Kwlmb3IgKGkgPSAwOyBpIDwgcG11LT5udW1fcG1jX2VudHJpZXM7IGkrKywgcmVnKyspIHsKKwor CQlpZiAoIShyZWctPnR5cGUgJiBQRk1fUkVHX0kpKQorCQkJY29udGludWU7CisKKwkJcmV0ID0g a29iamVjdF9pbml0X2FuZF9hZGQoJnJlZy0+a29iaiwgJnBmbV9yZWdzX2t0eXBlLAorCQkJCQkg ICAmcG11LT5rb2JqLCAicG1jJXUiLCBpKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gdW5kb19wbWNz OworCisJCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcmVnLT5rb2JqLCAmcGZtX3JlZ19hdHRy X2dyb3VwKTsKKwkJaWYgKHJldCkgeworCQkJa29iamVjdF9kZWwoJnJlZy0+a29iaik7CisJCQln b3RvIHVuZG9fcG1jczsKKwkJfQorCX0KKworCXJlZyA9IHBtdS0+cG1kX2Rlc2M7CisJZm9yIChp ID0gMDsgaSA8IHBtdS0+bnVtX3BtZF9lbnRyaWVzOyBpKyssIHJlZysrKSB7CisKKwkJaWYgKCEo cmVnLT50eXBlICYgUEZNX1JFR19JKSkKKwkJCWNvbnRpbnVlOworCisJCXJldCA9IGtvYmplY3Rf aW5pdF9hbmRfYWRkKCZyZWctPmtvYmosICZwZm1fcmVnc19rdHlwZSwKKwkJCQkJICAgJnBtdS0+ a29iaiwgInBtZCV1IiwgaSk7CisJCWlmIChyZXQpCisJCQlnb3RvIHVuZG9fcG1kczsKKworCQly ZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnJlZy0+a29iaiwgJnBmbV9yZWdfYXR0cl9ncm91cCk7 CisJCWlmIChyZXQpIHsKKwkJCWtvYmplY3RfZGVsKCZyZWctPmtvYmopOworCQkJZ290byB1bmRv X3BtZHM7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit1bmRvX3BtZHM6CisJcmVnID0gcG11LT5wbWRf ZGVzYzsKKwlmb3IgKGsgPSAwOyBrIDwgaTsgaysrLCByZWcrKykgeworCQlpZiAoIShyZWctPnR5 cGUgJiBQRk1fUkVHX0kpKQorCQkJY29udGludWU7CisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmcmVn LT5rb2JqLCAmcGZtX3JlZ19hdHRyX2dyb3VwKTsKKwkJa29iamVjdF9kZWwoJnJlZy0+a29iaik7 CisJfQorCWkgPSBwbXUtPm51bV9wbWNfZW50cmllczsKKwkvKiBmYWxsIHRocm91Z2ggKi8KK3Vu ZG9fcG1jczoKKwlyZWcgPSBwbXUtPnBtY19kZXNjOworCWZvciAoayA9IDA7IGsgPCBpOyBrKyss IHJlZysrKSB7CisJCWlmICghKHJlZy0+dHlwZSAmIFBGTV9SRUdfSSkpCisJCQljb250aW51ZTsK KwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZyZWctPmtvYmosICZwZm1fcmVnX2F0dHJfZ3JvdXApOwor CQlrb2JqZWN0X2RlbCgmcmVnLT5rb2JqKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAq IHdoZW4gYSBQTVUgZGVzY3JpcHRpb24gbW9kdWxlIGlzIGluc2VydGVkLCB3ZSBjcmVhdGUKKyAq IGEgcG11X2Rlc2Mgc3ViZGlyIGluIHN5c2ZzIGFuZCB3ZSBwb3B1bGF0ZSBpdCB3aXRoCisgKiBQ TVUgc3BlY2lmaWMgaW5mb3JtYXRpb24sIHN1Y2ggYXMgcmVnaXN0ZXIgbWFwcGluZ3MKKyAqLwor aW50IHBmbV9zeXNmc19hZGRfcG11KHN0cnVjdCBwZm1fcG11X2NvbmZpZyAqcG11KQoreworCWlu dCByZXQ7CisKKwlyZXQgPSBrb2JqZWN0X2luaXRfYW5kX2FkZCgmcG11LT5rb2JqLCAmcGZtX3Bt dV9rdHlwZSwKKwkJCQkgICBwZm1fa2VybmVsX2tvYmosICJwbXVfZGVzYyIpOworCWlmIChyZXQp CisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnBtdS0+a29iaiwg JnBmbV9wbXVfZGVzY19hdHRyX2dyb3VwKTsKKwlpZiAocmV0KQorCQlrb2JqZWN0X2RlbCgmcG11 LT5rb2JqKTsKKworCXJldCA9IHBmbV9zeXNmc19hZGRfcG11X3JlZ3MocG11KTsKKwlpZiAocmV0 KSB7CisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmcG11LT5rb2JqLCAmcGZtX3BtdV9kZXNjX2F0dHJf Z3JvdXApOworCQlrb2JqZWN0X2RlbCgmcG11LT5rb2JqKTsKKwl9IGVsc2UKKwkJa29iamVjdF91 ZXZlbnQoJnBtdS0+a29iaiwgS09CSl9BREQpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IF9f aW5pdCBwZm1faW5pdF9zeXNmcyh2b2lkKQoreworCWludCByZXQ7CisKKwlwZm1fa2VybmVsX2tv YmogPSBrb2JqZWN0X2NyZWF0ZV9hbmRfYWRkKCJwZXJmbW9uIiwga2VybmVsX2tvYmopOworCWlm ICghcGZtX2tlcm5lbF9rb2JqKSB7CisJCVBGTV9FUlIoImNhbm5vdCBhZGQga2VybmVsIG9iamVj dCIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAo cGZtX2tlcm5lbF9rb2JqLCAmcGZtX2tlcm5lbF9hdHRyX2dyb3VwKTsKKwlpZiAocmV0KSB7CisJ CWtvYmplY3RfcHV0KHBmbV9rZXJuZWxfa29iaik7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYg KHBmbV9wbXVfY29uZikKKwkJcGZtX3N5c2ZzX2FkZF9wbXUocGZtX3BtdV9jb25mKTsKKworCXJl dHVybiAwOworfQpJbmRleDogby9wZXJmbW9uL3BlcmZtb25fcHJpdi5oCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t IG8ub3JpZy9wZXJmbW9uL3BlcmZtb25fcHJpdi5oCTIwMDgtMDYtMTEgMjM6NTQ6MzIuMDAwMDAw MDAwICswMjAwCisrKyBvL3BlcmZtb24vcGVyZm1vbl9wcml2LmgJMjAwOC0wNi0xMiAxNDo0Nzoy Mi4wMDAwMDAwMDAgKzAyMDAKQEAgLTUyLDYgKzUyLDggQEAKIAogdm9pZCBwZm1fZnJlZV9jb250 ZXh0KHN0cnVjdCBwZm1fY29udGV4dCAqY3R4KTsKIAorc3NpemVfdCBwZm1fc3lzZnNfcmVzX3No b3coY2hhciAqYnVmLCBzaXplX3Qgc3osIGludCB3aGF0KTsKKwogaW50IHBmbV9wbXVfYWNxdWly ZSh2b2lkKTsKIHZvaWQgcGZtX3BtdV9yZWxlYXNlKHZvaWQpOwogCkluZGV4OiBvL3BlcmZtb24v cGVyZm1vbl9yZXMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBvLm9yaWcvcGVyZm1vbi9wZXJmbW9uX3Jlcy5j CTIwMDgtMDYtMTEgMjM6NTQ6MzAuMDAwMDAwMDAwICswMjAwCisrKyBvL3BlcmZtb24vcGVyZm1v bl9yZXMuYwkyMDA4LTA2LTExIDIzOjU0OjMzLjAwMDAwMDAwMCArMDIwMApAQCAtMTg4LDMgKzE4 OCwzNiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBmbV9yZXNfbG9jaywgZmxhZ3MpOwog fQogRVhQT1JUX1NZTUJPTChwZm1fc2Vzc2lvbl9hbGxjcHVzX3JlbGVhc2UpOworCisvKioKKyAq IHBmbV9zeXNmc19yZXNfc2hvdyAtIHJldHVybiBjdXJybnQgcmVzb3VyY2RlIHVzYWdlIGZvciBz eXNmcworICogQGJ1ZjogYnVmZmVyIHRvIGhvbGQgc3RyaW5nIGluIHJldHVybgorICogQHN6OiBz aXplIG9mIGJ1ZgorICogQHdoYXQ6IHdoYXQgdG8gcHJvZHVjZQorICogICAgICAgIHdoYXQ9MCA6 IHRocmVhZF9zZXNzaW9ucworICogICAgICAgIHdoYXQ9MSA6IGNwdXNfd2VpZ2h0KHN5c19jcHVt YXNrKQorICogICAgICAgIHdoYXQ9MiA6IHNtcGxfYnVmX21lbV9jdXIKKyAqICAgICAgICB3aGF0 PTMgOiBwbXUgbW9kZWwgbmFtZQorICoKKyAqIGNhbGxlZCBmcm9tIHBlcmZtb25fc3lzZnMuYwor ICogcmV0dXJuIG51bWJlciBvZiBieXRlcyB3cml0dGVuIGludG8gYnVmICh1cCB0byBzeikKKyAq Lworc3NpemVfdCBwZm1fc3lzZnNfcmVzX3Nob3coY2hhciAqYnVmLCBzaXplX3Qgc3osIGludCB3 aGF0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGZt X3Jlc19sb2NrLCBmbGFncyk7CisKKwlzd2l0Y2ggKHdoYXQpIHsKKwljYXNlIDA6IHNucHJpbnRm KGJ1Ziwgc3osICIldVxuIiwgcGZtX3Jlcy50aHJlYWRfc2Vzc2lvbnMpOworCQlicmVhazsKKwlj YXNlIDE6IHNucHJpbnRmKGJ1Ziwgc3osICIlZFxuIiwgY3B1c193ZWlnaHQocGZtX3Jlcy5zeXNf Y3B1bWFzaykpOworCQlicmVhazsKKwljYXNlIDM6CisJCXNucHJpbnRmKGJ1Ziwgc3osICIlc1xu IiwKKwkJCXBmbV9wbXVfY29uZiA/CXBmbV9wbXVfY29uZi0+cG11X25hbWUKKwkJCQkgICAgIDoJ InVua25vd25cbiIpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZm1fcmVzX2xvY2ss IGZsYWdzKTsKKwlyZXR1cm4gc3RybGVuKGJ1Zik7Cit9CkluZGV4OiBvL3BlcmZtb24vTWFrZWZp bGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0gby5vcmlnL3BlcmZtb24vTWFrZWZpbGUJMjAwOC0wNi0xMSAyMzo1 NDozMi4wMDAwMDAwMDAgKzAyMDAKKysrIG8vcGVyZm1vbi9NYWtlZmlsZQkyMDA4LTA2LTEyIDE0 OjQ3OjIyLjAwMDAwMDAwMCArMDIwMApAQCAtNSw0ICs1LDUgQEAKIG9iai0kKENPTkZJR19QRVJG TU9OKSA9IHBlcmZtb25fY3R4Lm8gcGVyZm1vbl9jdHhzdy5vCQlcCiAJCQlwZXJmbW9uX2ZpbGUu byBwZXJmbW9uX2F0dGFjaC5vIAlcCiAJCQlwZXJmbW9uX3Jlcy5vIHBlcmZtb25faW5pdC5vCQlc Ci0JCQlwZXJmbW9uX2ludHIubyBwZXJmbW9uX3BtdS5vCisJCQlwZXJmbW9uX2ludHIubyBwZXJm bW9uX3BtdS5vCQlcCisJCQlwZXJmbW9uX3N5c2ZzLm8KSW5kZXg6IG8vcGVyZm1vbi9wZXJmbW9u X3BtdS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIG8ub3JpZy9wZXJmbW9uL3BlcmZtb25fcG11LmMJMjAwOC0w Ni0xMSAyMzo1NDozMi4wMDAwMDAwMDAgKzAyMDAKKysrIG8vcGVyZm1vbi9wZXJmbW9uX3BtdS5j CTIwMDgtMDYtMTEgMjM6NTQ6MzMuMDAwMDAwMDAwICswMjAwCkBAIC0xNjQsNiArMTY0LDEwIEBA CiAJcGZtX3BtdV9jb25mID0gY2ZnOwogCXBmbV9wbXVfY29uZi0+b3ZmbF9tYXNrID0gKDFVTEwg PDwgY2ZnLT5jb3VudGVyX3dpZHRoKSAtIDE7CiAKKwlyZXQgPSBwZm1fc3lzZnNfYWRkX3BtdShw Zm1fcG11X2NvbmYpOworCWlmIChyZXQpCisJCXBmbV9wbXVfY29uZiA9IE5VTEw7CisKIHVubG9j azoKIAlzcGluX3VubG9jaygmcGZtX3BtdV9jb25mX2xvY2spOwogCkluZGV4OiBvL0RvY3VtZW50 YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcGVyZm1vbgo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwJ MTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrIG8vRG9jdW1lbnRhdGlvbi9B QkkvdGVzdGluZy9zeXNmcy1wZXJmbW9uCTIwMDgtMDYtMTEgMjM6NTQ6MzMuMDAwMDAwMDAwICsw MjAwCkBAIC0wLDAgKzEsMzggQEAKK1doYXQ6CQkvc3lzL2tlcm5lbC9wZXJmbW9uCitEYXRlOgkJ SnVuZSAyMDA4CitLZXJuZWxWZXJzaW9uOgkyLjYuMjYKK0NvbnRhY3Q6CWVyYW5pYW5AZ21haWwu Y29tCisKK0Rlc2NyaXB0aW9uOglwcm92aWRlIHRoZSBjb25maWd1cmF0aW9uIGludGVyZmFjZSBm b3IgdGhlIHBlcmZtb24yIHN1YnN5c3RlbXMuCisJICAgICAgICBUaGUgdHJlZSBjb250YWlucyBp bmZvcm1hdGlvbiBhYm91dCB0aGUgZGV0ZWN0ZWQgaGFyZHdhcmUsIGN1cnJlbnQKKwkJc3RhdGUg b2YgdGhlIHN1YnN5c3RlbSBhcyB3ZWxsIGFzIHNvbWUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJz LgorCisJCVRoZSB0cmVlIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgZW50cmllczoKKworICAg CS9zeXMva2VybmVsL3BlcmZtb24vdmVyc2lvbiAocmVhZC1vbmx5KToKKworCQlQZXJmbW9uMiBp bnRlcmZhY2UgcmV2aXNpb24gbnVtYmVyLgorCisJL3N5cy9rZXJuZWwvcGVyZm1vbi90YXNrX3Nl c3Npb25zX2NvdW50IChyZWFkLW9ubHkpOgorCisJCU51bWJlciBvZiBwZXItdGhyZWFkIGNvbnRl eHRzIGN1cnJlbnRseSBhdHRhY2hlZCB0byB0aHJlYWRzLgorCisJL3N5cy9rZXJuZWwvcGVyZm1v bi9kZWJ1ZyAocmVhZC13cml0ZSk6CisKKwkJRW5hYmxlIHBlcmZtb24yIGRlYnVnZ2luZyBvdXRw dXQgdmlhIGtsb2dkLiBEZWJ1ZyBtZXNzYWdlcyBwcm9kdWNlZCBkdXJpbmcKKwkJUE1VIGludGVy cnVwdCBoYW5kbGluZyBhcmUgbm90IGNvbnRyb2xsZWQgYnkgdGhpcyBlbnRyeS4gVGhlIHRyYWNl cyBhIHJhdGUtbGltaXRlZAorCQl0byBhdm9pZCBmbG9vZGluZyBvZiB0aGUgY29uc29sZS4gSXQg aXMgcG9zc2libGUgdG8gY2hhbmdlIHRoZSB0aHJvdHRsaW5nCisJICAgICAgICB2aWEgL3Byb2Mv c3lzL2tlcm5lbC9wcmludGtfcmF0ZWxpbWl0LiBUaGUgdmFsdWUgaXMgaW50ZXJwcmV0ZWQgYXMg YSBiaXRtYXNrLgorCQlFYWNoIGJpdCBlbmFibGVzIGEgcGFydGljdWxhciB0eXBlIG9mIGRlYnVn IG1lc3NhZ2VzLiBSZWZlciB0byB0aGUgZmlsZQorCQlpbmNsdWRlL2xpbnV4L3BlcmZtb25fa2Vy bi5oIGZvciBtb3JlIGluZm9ybWF0aW9uCisKKwkvc3lzL2tlcm5lbC9wZXJmbW9uL3Rhc2tfZ3Jv dXAgKHJlYWQtd3JpdGUpOgorCisJCVVzZXJzIGdyb3VwIGFsbG93ZWQgdG8gY3JlYXRlIGEgcGVy LXRocmVhZCBjb250ZXh0IChzZXNzaW9uKS4KKyAgIAkJLTEgbWVhbnMgYW55IGdyb3VwLiBUaGlz IGNvbnRyb2wgd2lsbCBiZSBrZXB0IHVudGlsIHdlIGZpbmQgYQorCQlwYWNrYWdlIGFibGUgdG8g Y29udHJvbCBjYXBhYmlsaXRpZXMgdmlhIFBBTS4KKworCS9zeXMva2VybmVsL3BlcmZtb24vYXJn X21lbV9tYXgocmVhZC13cml0ZSk6CisKKwkJTWF4aW11bSBzaXplIG9mIHZlY3RvciBhcmd1bWVu dHMgZXhwcmVzc2VkIGluIGJ5dGVzLiBDYW4gYmUgbW9kaWZpZWQKKwkJYnV0IG11c3QgYmUgYXQg bGVhc3QgYSBwYWdlLiBEZWZhdWx0IGlzIFBBR0VfU0laRQpJbmRleDogby9Eb2N1bWVudGF0aW9u L0FCSS90ZXN0aW5nL3N5c2ZzLXBlcmZtb24tcG11Cj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIC9kZXYvbnVsbAkx OTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysgby9Eb2N1bWVudGF0aW9uL0FC SS90ZXN0aW5nL3N5c2ZzLXBlcmZtb24tcG11CTIwMDgtMDYtMTEgMjM6NTQ6MzMuMDAwMDAwMDAw ICswMjAwCkBAIC0wLDAgKzEsNDYgQEAKK1doYXQ6CQkvc3lzL2tlcm5lbC9wZXJmbW9uL3BtdQor RGF0ZToJCUp1bmUgMjAwOAorS2VybmVsVmVyc2lvbjoJMi42LjI2CitDb250YWN0OgllcmFuaWFu QGdtYWlsLmNvbQorCitEZXNjcmlwdGlvbjoJcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUg Y3VycmVudGx5IGxvYWRlZCBQTVUgZGVzY3JpcHRpb24gbW9kdWxlLgorCQlUaGUgbW9kdWxlIGNv bnRhaW5zIHRoZSBtYXBwaW5nIG9mIHRoZSBhY3R1YWwgcGVyZm9ybWFuY2UgY291bnRlciByZWdp c3RlcnMKKwkJb250byB0aGUgbG9naWNhbCBQTVUgZXhwb3NlZCBieSBwZXJmbW9uLiAgVGhlcmUg aXMgYXQgbW9zdCBvbmUgUE1VIGRlc2NyaXB0aW9uCisJCW1vZHVsZSBsb2FkZWQgYXQgYW55IHRp bWUuCisKKwkJVGhlIHN5c2ZzIFBNVSB0cmVlIHByb3ZpZGVzIGEgZGVzY3JpcHRpb24gb2YgdGhl IG1hcHBpbmcgZm9yIGVhY2ggcmVnaXN0ZXIuCisJCVRoZXJlIGlzIG9uZSBzdWJkaXIgcGVyIGNv bmZpZyBhbmQgZGF0YSByZWdpc3RlcnMgYWxvbmcgYW4gZW50cnkgZm9yIHRoZQorCQluYW1lIG9m IHRoZSBQTVUgbW9kZWwuCisKKwkJVGhlIG1vZGVsIGVudHJ5IGlzIGFzIGZvbGxvd3M6CisKKwkv c3lzL2tlcm5lbC9wZXJmbW9uL3BtdV9kZXNjL21vZGVsIChyZWFkLW9ubHkpOgorCisJCU5hbWUg b2YgdGhlIFBNVSBtb2RlbCBpcyBjbGVhciB0ZXh0IGFuZCB6ZXJvIHRlcm1pbmF0ZWQuCisKKwkJ VGhlbiBmb3IgZWFjaCBsb2dpY2FsIFBNVSByZWdpc3RlciwgWFgsIGdldHMgYSBzdWJ0cmVlIHdp dGggdGhlIGZvbGxvd2luZyBlbnRyaWVzOgorCisJL3N5cy9rZXJuZWwvcGVyZm1vbi9wbXVfZGVz Yy9wbSpYWC9hZGRyIChyZWFkLW9ubHkpOgorCisJCVRoZSBwaHlzaWNhbCBhZGRyZXNzIG9yIGlu ZGV4IG9mIHRoZSBhY3R1YWwgdW5kZXJseWluZyBoYXJkd2FyZSByZWdpc3Rlci4KKwkJT24gSXRh bml1bSwgaXQgY29ycmVzcG9uZHMgdG8gdGhlIGluZGV4LiBCdXQgb24gWDg2IHByb2Nlc3Nvciwg dGhpcyBpcworCQl0aGUgYWN0dWFsIE1TUiBhZGRyZXNzLgorCisJL3N5cy9rZXJuZWwvcGVyZm1v bi9wbXVfZGVzYy9wbSpYWC9kZmxfdmFsIChyZWFkLW9ubHkpOgorCisJCVRoZSBkZWZhdWx0IHZh bHVlIG9mIHRoZSByZWdpc3RlciBpbiBoZXhhZGVjaW1hbC4KKworCS9zeXMva2VybmVsL3BlcmZt b24vcG11X2Rlc2MvcG0qWFgvbmFtZSAocmVhZC1vbmx5KToKKworCQlUaGUgbmFtZSBvZiB0aGUg aGFyZHdhcmUgcmVnaXN0ZXIuCisKKwkvc3lzL2tlcm5lbC9wZXJmbW9uL3BtdV9kZXNjL3BtKlhY L3JzdmRfbXNrIChyZWFkLW9ubHkpOgorCisJCVRoZSBiaXRtYXNrIG9mIHJlc2VydmVkIGJpdHMs IGkuZS4sIGJpdHMgd2hpY2ggY2Fubm90IGJlIGNoYW5nZWQgYnkKKwkJYXBwbGljYXRpb25zLiBX aGVuIGEgYml0IGlzIHNldCwgaXQgbWVhbnMgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGluIHRoZQor CQlhY3R1YWwgcmVnaXN0ZXIgaXMgcmVzZXJ2ZWQuCisKKwkvc3lzL2tlcm5lbC9wZXJmbW9uL3Bt dV9kZXNjL3BtKlhYL3dpZHRoIChyZWFkLW9ubHkpOgorCisJCXRoZSB3aWR0aCBpbiBiaXRzIG9m IHRoZSByZWdpc3RlcnMuIFRoaXMgZmllbGQgaXMgb25seSByZWxldmFudCBmb3IgY291bnRlcgor CQlyZWdpc3RlcnMuCg== ------=_Part_13300_30308438.1213275255794--