From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jim Bride Subject: [PATCH IGT v2 2/6] lib: Add PSR utility functions to igt library. Date: Fri, 30 Jun 2017 12:12:20 -0700 Message-ID: <1498849944-26404-3-git-send-email-jim.bride@linux.intel.com> References: <1498849944-26404-1-git-send-email-jim.bride@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id CCCDE6E85D for ; Fri, 30 Jun 2017 19:14:53 +0000 (UTC) In-Reply-To: <1498849944-26404-1-git-send-email-jim.bride@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org Cc: Paulo Zanoni , Rodrigo Vivi List-Id: intel-gfx@lists.freedesktop.org RmFjdG9yIG91dCBzb21lIGNvZGUgdGhhdCB3YXMgcmVwbGljYXRlZCBpbiB0aHJlZSB0ZXN0IHV0 aWxpdGllcyBpbnRvCnNvbWUgbmV3IElHVCBsaWJyYXJ5IGZ1bmN0aW9ucyBzbyB0aGF0IHdlIGFy ZSBjaGVja2luZyBQU1Igc3RhdHVzIGluCmEgY29uc2lzdGVudCBmYXNoaW9uIGFjcm9zcyBhbGwg b2Ygb3VyIFBTUiB0ZXN0cy4KCnYyOiAqIEFkZCBzaW5rIENSQyBoZWxwZXIgZnVuY3Rpb24KICAg ICogTWlzYy4gYnVnIGZpeGVzCiAgICAqIFJlYmFzZQoKQ2M6IFJvZHJpZ28gVml2aSA8cm9kcmln by52aXZpQGludGVsLmNvbT4KQ2M6IFBhdWxvIFphbm9uaSA8cGF1bG8uci56YW5vbmlAaW50ZWwu Y29tPgpTaWduZWQtb2ZmLWJ5OiBKaW0gQnJpZGUgPGppbS5icmlkZUBsaW51eC5pbnRlbC5jb20+ Ci0tLQogbGliL01ha2VmaWxlLnNvdXJjZXMgfCAgIDIgKwogbGliL2lndC5oICAgICAgICAgICAg fCAgIDEgKwogbGliL2lndF9wc3IuYyAgICAgICAgfCAyMzUgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBsaWIvaWd0X3Bzci5oICAgICAgICB8ICA0 MyArKysrKysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDI4MSBpbnNlcnRpb25zKCspCiBjcmVhdGUg bW9kZSAxMDA2NDQgbGliL2lndF9wc3IuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pZ3RfcHNy LmgKCmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUuc291cmNlcyBiL2xpYi9NYWtlZmlsZS5zb3Vy Y2VzCmluZGV4IDUzZmRiNTQuLjZhNzNjOGMgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZS5zb3Vy Y2VzCisrKyBiL2xpYi9NYWtlZmlsZS5zb3VyY2VzCkBAIC04Myw2ICs4Myw4IEBAIGxpYl9zb3Vy Y2VfbGlzdCA9CSAJXAogCXV3aWxkbWF0L3V3aWxkbWF0LmMJXAogCWlndF9rbW9kLmMJCVwKIAlp Z3Rfa21vZC5oCQlcCisJaWd0X3Bzci5jCQlcCisJaWd0X3Bzci5oCQlcCiAJJChOVUxMKQogCiAu UEhPTlk6IHZlcnNpb24uaC50bXAKZGlmZiAtLWdpdCBhL2xpYi9pZ3QuaCBiL2xpYi9pZ3QuaApp bmRleCBhMDY5ZGViLi4wYjhlM2E4IDEwMDY0NAotLS0gYS9saWIvaWd0LmgKKysrIGIvbGliL2ln dC5oCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiaWd0X2d0LmgiCiAjaW5jbHVkZSAiaWd0 X2ttcy5oIgogI2luY2x1ZGUgImlndF9wbS5oIgorI2luY2x1ZGUgImlndF9wc3IuaCIKICNpbmNs dWRlICJpZ3Rfc3RhdHMuaCIKICNpZmRlZiBIQVZFX0NIQU1FTElVTQogI2luY2x1ZGUgImlndF9j aGFtZWxpdW0uaCIKZGlmZiAtLWdpdCBhL2xpYi9pZ3RfcHNyLmMgYi9saWIvaWd0X3Bzci5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyODIzYmYKLS0tIC9kZXYvbnVsbAor KysgYi9saWIvaWd0X3Bzci5jCkBAIC0wLDAgKzEsMjM1IEBACisvKgorICogQ29weXJpZ2h0IMKp IDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFu dGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBv ZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAi U29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rp b24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBj b3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICog YW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25z IHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3Qg dG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQg bm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAq IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlh bCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9S CisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF IEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMg T1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1Ig T1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRP UlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElP TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBU SEUgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgImlndC5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+ CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUg PHN0cmluZy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKy8qKgorICogU0VDVElPTjppZ3RfcHNy CisgKiBAc2hvcnRfZGVzY3JpcHRpb246IFBhbmVsIFNlbGYgUmVmcmVzaCBoZWxwZXJzCisgKiBA dGl0bGU6IFBhbmVsIFNlbGYgUmVmcmVzaAorICogQGluY2x1ZGU6IGlndC5oCisgKgorICogVGhp cyBsaWJyYXJ5IHByb3ZpZGVzIHZhcmlvdXMgaGVscGVycyB0byBlbmFibGUgUGFuZWwgU2VsZiBS ZWZyZXNoLAorICogYXMgd2VsbCBhcyB0byBjaGVjayB0aGUgc3RhdGUgb2YgUFNSIG9uIHRoZSBz eXN0ZW0gKGVuYWJsZWQgdnMuCisgKiBkaXNhYmxlZCwgYWN0aXZlIHZzLiBpbmFjdGl2ZSkgb3Ig dG8gd2FpdCBmb3IgUFNSIHRvIGJlIGFjdGl2ZQorICogb3IgaW5hY3RpdmUuCisgKi8KKworLyoq CisgKiBpZ3RfcHNyX3NvdXJjZV9zdXBwb3J0OgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUg c291cmNlIHN1cHBvcnRzIFBTUi4KKyAqLworYm9vbCBpZ3RfcHNyX3NvdXJjZV9zdXBwb3J0KGlu dCBmZCkKK3sKKwljaGFyIGJ1Zls1MTJdOworCisJaWd0X2RlYnVnZnNfcmVhZChmZCwgImk5MTVf ZWRwX3Bzcl9zdGF0dXMiLCBidWYpOworCisJcmV0dXJuIHN0cnN0cihidWYsICJTb3VyY2VfT0s6 IHllc1xuIik7Cit9CisKKworLyoqCisgKiBpZ3RfcHNyX3Npbmtfc3VwcG9ydDoKKyAqCisgKiBS ZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgZURQIHBhbmVsIHN1cHBvcnRzIFBTUi4KKyAqLwor Ym9vbCBpZ3RfcHNyX3Npbmtfc3VwcG9ydChpbnQgZmQpCit7CisJY2hhciBidWZbMjU2XTsKKwor CWlndF9kZWJ1Z2ZzX3JlYWQoZmQsICJpOTE1X2VkcF9wc3Jfc3RhdHVzIiwgYnVmKTsKKwlyZXR1 cm4gc3Ryc3RyKGJ1ZiwgIlNpbmtfU3VwcG9ydDogeWVzXG4iKTsKK30KKworLyoqCisgKiBpZ3Rf cHNyX3Bvc3NpYmxlOgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBib3RoIHRoZSBzb3VyY2UgYW5k IHNpbmsgc3VwcG9ydCBQU1IuCisgKi8KK2Jvb2wgaWd0X3Bzcl9wb3NzaWJsZShpbnQgZmQpCit7 CisJY2hhciBidWZbNTEyXTsKKworCWlndF9kZWJ1Z2ZzX3JlYWQoZmQsICJpOTE1X2VkcF9wc3Jf c3RhdHVzIiwgYnVmKTsKKworCXJldHVybiBpZ3RfcHNyX3NvdXJjZV9zdXBwb3J0KGZkKSAmJiBp Z3RfcHNyX3Npbmtfc3VwcG9ydChmZCk7Cit9CisKKy8qKgorICogaWd0X3Bzcl9hY3RpdmU6Cisg KgorICogUmV0dXJucyB0cnVlIGlmIFBTUiBpcyBhY3RpdmUgb24gdGhlIHBhbmVsLgorICovCiti b29sIGlndF9wc3JfYWN0aXZlKGludCBmZCkKK3sKKwljaGFyIGJ1Zls1MTJdOworCWJvb2wgYWN0 cmV0ID0gZmFsc2U7CisJYm9vbCBod2FjdHJldCA9IGZhbHNlOworCisJaWd0X2RlYnVnZnNfcmVh ZChmZCwgImk5MTVfZWRwX3Bzcl9zdGF0dXMiLCBidWYpOworCWh3YWN0cmV0ID0gKHN0cnN0cihi dWYsICJIVyBFbmFibGVkICYgQWN0aXZlIGJpdDogeWVzXG4iKSAhPSBOVUxMKTsKKwlhY3RyZXQg PSAoc3Ryc3RyKGJ1ZiwgIkFjdGl2ZTogeWVzXG4iKSAhPSBOVUxMKTsKKwlpZ3RfZGVidWcoImh3 YWN0cmV0OiAlcyBhY3RyZXQ6ICVzXG4iLCBod2FjdHJldCA/ICJ0cnVlIiA6ICJmYWxzZSIsCisJ CSBhY3RyZXQgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKwlyZXR1cm4gaHdhY3RyZXQgJiYgYWN0cmV0 OworfQorCisvKioKKyAqIGlndF9wc3JfYXdhaXRfc3RhdHVzOgorICogQGFjdGl2ZTogQSBib29s ZWFuIHRoYXQgY2F1c2VzIHRoZSBmdW5jdGlvbiB0byB3YWl0IGZvciBQU1IgdG8gYWN0aXZhdGUK KyAqICAgICAgICAgIGlmIHNldCB0byB0cnVlLCBvciB0byB3YWl0IGZvciBQU1IgdG8gZGVhY3Rp dmF0ZSBpZiBmYWxzZS4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJlcXVlc3RlZCBjb25k aXRpb24gaXMgbWV0LgorICovCitib29sIGlndF9wc3JfYXdhaXRfc3RhdHVzKGludCBmZCwgYm9v bCBhY3RpdmUpCit7CisJY29uc3QgaW50IHRpbWVvdXQgPSAxMDsKKwlpbnQgY291bnQgPSAwOwor CXdoaWxlIChjb3VudCA8IHRpbWVvdXQpIHsKKwkJaWYgKGlndF9wc3JfYWN0aXZlKGZkKSA9PSBh Y3RpdmUpIHsKKwkJCWlndF9kZWJ1ZygiUFNSICVzIGFmdGVyICVkIHNlY29uZHMuXG4iLAorCQkJ CSAgYWN0aXZlID8gIkFjdGl2ZSIgOiAiSW5hY3RpdmUiLCBjb3VudCk7CisJCQlyZXR1cm4gdHJ1 ZTsKKwkJfQorCQljb3VudCsrOworCQlzbGVlcCgxKTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQor CisvKioKKyAqIGlndF9wc3JfZW5hYmxlZDoKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIFBT UiBmZWF0dXJlIGlzIGVuYWJsZWQuCisgKi8KK2Jvb2wgaWd0X3Bzcl9lbmFibGVkKGludCBmZCkK K3sKKwljaGFyIGJ1ZlsyNTZdOworCisJaWd0X2RlYnVnZnNfcmVhZChmZCwgImk5MTVfZWRwX3Bz cl9zdGF0dXMiLCBidWYpOworCXJldHVybiBzdHJzdHIoYnVmLCAiRW5hYmxlZDogeWVzXG4iKTsK K30KKworLyoqCisgKiBpZ3RfcHNyX3ByaW50X3N0YXR1czoKKyAqCisgKiBEdW1wcyB0aGUgY29u dGVudHMgb2YgaTkxNV9lZHBfcHNyX3N0YXR1cyBmcm9tIGRlYnVnZnMuCisgKi8KK3ZvaWQgaWd0 X3Bzcl9wcmludF9zdGF0dXMoaW50IGZkKQoreworICAgICAgICBjaGFyIGJ1ZlsyNTZdOworCisg ICAgICAgIGlndF9kZWJ1Z2ZzX3JlYWQoZmQsICJpOTE1X2VkcF9wc3Jfc3RhdHVzIiwgYnVmKTsK KyAgICAgICAgaWd0X2luZm8oIlBTUiBzdGF0dXM6XG4lc1xuIiwgYnVmKTsKK30KKworLyoqCisg KiBpZ3RfcHNyX3ZhbGlkX2Nvbm5lY3RvcjoKKyAqIEBjb25uZWN0b3I6IGEgZHJtTW9kZUNvbm5l Y3RvciBwb2ludGVyIHRvIGNoZWNrCisgKgorICogUmV0dXJucyB0cnVlIGlmIGNvbm5lY3RvciBp cyBhbiBlRFAgY29ubmVjdG9yLgorICovCitib29sIGlndF9wc3JfdmFsaWRfY29ubmVjdG9yKGRy bU1vZGVDb25uZWN0b3JQdHIgY29ubmVjdG9yKQoreworCXJldHVybiAoY29ubmVjdG9yLT5jb25u ZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfZURQKTsKK30KKworLyoqCisgKiBpZ3Rf cHNyX2ZpbmRfZ29vZF9tb2RlCisgKiBAY29ubmVjdG9yOiBhIGRybU1vZGVDb25uZWN0b3IgcG9p bnRlciB0byBmaW5kIHRoZSBtb2RlIG9uCisgKiBAbW9kZTogYSBkcm1Nb2RlTW9kZVB0ciBwb2lu dGVyIHRoYXQgaXMgc2V0IHRvIHRoZSBtYXRjaGluZyBtb2RlCisgKgorICogUmV0dXJucyB0cnVl IChhbmQgcG9wdWxhdGVzICptb2RlIHdpdGggdGhlIG1hdGNoKSBpZiBhIHZhbGlkCisgKiBQU1Ig bWRvZSBpcyBmb3VuZCwgYW5kIGZhbHNlIG90aGVyd2lzZS4KKyAqLworYm9vbCBpZ3RfcHNyX2Zp bmRfZ29vZF9tb2RlKGRybU1vZGVDb25uZWN0b3JQdHIgY29ubmVjdG9yLAorCQkJICAgIGRybU1v ZGVNb2RlSW5mb1B0ciAqbW9kZSkKK3sKKwlpbnQgaTsKKworCWlmICghY29ubmVjdG9yLT5jb3Vu dF9tb2RlcykgeworCQlpZ3Rfd2Fybigibm8gbW9kZXMgZm9yIGNvbm5lY3RvciAlZC5cbiIsCisJ CQkgY29ubmVjdG9yLT5jb25uZWN0b3JfaWQpOworCQlyZXR1cm4gZmFsc2U7CisJfSBlbHNlIHsK KwkJaWd0X2RlYnVnKCJDb25uZWN0b3IgaGFzICVkIG1vZGVzLlxuIiwgY29ubmVjdG9yLT5jb3Vu dF9tb2Rlcyk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGNvbm5lY3Rvci0+Y291bnRfbW9kZXM7 IGkrKykgeworCQlpZiAoKGNvbm5lY3Rvci0+bW9kZXNbaV0udnRvdGFsIC0KKwkJICAgICBjb25u ZWN0b3ItPm1vZGVzW2ldLnZkaXNwbGF5KSA+PSAzNikgeworCQkJaWd0X2RlYnVnKCJNb2RlICVk IGdvb2QgZm9yIFBTUi5cbiIsIGkpOworCQkJKm1vZGUgPSAmKGNvbm5lY3Rvci0+bW9kZXNbaV0p OworCQkJcmV0dXJuIHRydWU7CisJCX0gZWxzZSB7CisJCQlpZ3RfZGVidWcoIlRocm93aW5nIG91 dCBtb2RlICVkXG4iLCBpKTsKKwkJfQorCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKK2ludCBpZ3Rf cHNyX29wZW5fc2lua19jcmMoaW50IGRybV9mZCkKK3sKKwlpbnQgY3JjX2ZkOworCisJY3JjX2Zk ID0gb3BlbmF0KGRybV9mZCwgImk5MTVfc2lua19jcmNfZURQMSIsIE9fUkRPTkxZKTsKKwlpZ3Rf YXNzZXJ0X2x0ZSgwLCBjcmNfZmQpOworCXJldHVybiBjcmNfZmQ7Cit9CisKKworaW50IGlndF9w c3JfZ2V0X3NpbmtfY3JjKGludCBmZCwgY2hhciAqZGF0YSkKK3sKKwlpbnQgcmMsIGVycm5vXzsK KwljaGFyIGJ1ZlsxM107CisKKwltZW1zZXQoYnVmLCAwLCAxMyk7CisJbHNlZWsoZmQsIDAsIFNF RUtfU0VUKTsKKworCXJjID0gcmVhZChmZCwgYnVmLCAxMik7CisJZXJybm9fID0gZXJybm87CisK KwlpZiAocmMgPT0gLTEpIHsKKwkJaWYgKGVycm5vXyA9PSBFTk9UVFkpCisJCQlpZ3RfaW5mbygi U2luayBDUkMgbm90IHN1cHBvcnRlZDogcGFuZWwgZG9lc24ndCBzdXBwb3J0IGl0XG4iKTsKKwkJ ZWxzZSBpZiAoZXJybm9fICE9IEVUSU1FRE9VVCkKKwkJCWlndF9hc3NlcnRfZihyYyAhPSAtMSwg IlVuZXhwZWN0ZWQgZXJyb3I6ICVkXG4iLAorCQkJCSAgICAgZXJybm9fKTsKKwkJcmV0dXJuIGVy cm5vXzsKKwl9IGVsc2UgeworCQlpbnQgaTsKKwkJdW5zaWduZWQgbG9uZyBsb25nIHZhbCA9IHN0 cnRvdWxsKGJ1ZiwgTlVMTCwgMTYpOworCisJCWZvciAoaSA9IDU7IGkgPj0gMDsgaS0tLCB2YWwg Pj49IDgpIHsKKwkJCWRhdGFbaV0gPSAodW5zaWduZWQgY2hhcikgKHZhbCAmIDB4ZmYpOworCQl9 CisJCXJldHVybiAwOworCX0KK30KZGlmZiAtLWdpdCBhL2xpYi9pZ3RfcHNyLmggYi9saWIvaWd0 X3Bzci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NGNkZmEKLS0tIC9k ZXYvbnVsbAorKysgYi9saWIvaWd0X3Bzci5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5 cmlnaHQgwqkgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVy ZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisg KiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl cyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCBy ZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0 byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vu c2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0 IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywg c3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNv cHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUg bmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1 YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRX QVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVY UFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUg QVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFN QUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05U UkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MK KyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIElHVF9QU1JfSAorI2RlZmluZSBJ R1RfUFNSX0gKKworI2RlZmluZSBpZ3RfcHNyX2VuYWJsZSgpIGlndF9zZXRfbW9kdWxlX3BhcmFt X2ludCgiZW5hYmxlX3BzciIsIDEpCisjZGVmaW5lIGlndF9wc3JfZGlzYWJsZSgpIGlndF9zZXRf bW9kdWxlX3BhcmFtX2ludCgiZW5hYmxlX3BzciIsIDApCisKK2Jvb2wgaWd0X3Bzcl9zaW5rX3N1 cHBvcnQoaW50IGZkKTsKK2Jvb2wgaWd0X3Bzcl9zb3VyY2Vfc3VwcG9ydChpbnQgZmQpOworYm9v bCBpZ3RfcHNyX3Bvc3NpYmxlKGludCBmZCk7Citib29sIGlndF9wc3JfYWN0aXZlKGludCBmZCk7 Citib29sIGlndF9wc3JfYXdhaXRfc3RhdHVzKGludCBmZCwgYm9vbCBhY3RpdmUpOworYm9vbCBp Z3RfcHNyX2VuYWJsZWQoaW50IGZkKTsKK3ZvaWQgaWd0X3Bzcl9wcmludF9zdGF0dXMoaW50IGZk KTsKK2Jvb2wgaWd0X3Bzcl92YWxpZF9jb25uZWN0b3IoZHJtTW9kZUNvbm5lY3RvclB0ciBjb25u ZWN0b3IpOworYm9vbCBpZ3RfcHNyX2ZpbmRfZ29vZF9tb2RlKGRybU1vZGVDb25uZWN0b3JQdHIg Y29ubmVjdG9yLAorCQkJICAgIGRybU1vZGVNb2RlSW5mb1B0ciAqbW9kZSk7CitpbnQgaWd0X3Bz cl9vcGVuX3NpbmtfY3JjKGludCBkcm1fZmQpOworaW50IGlndF9wc3JfZ2V0X3NpbmtfY3JjKGlu dCBmZCwgY2hhciAqZGF0YSk7CisKKyNlbmRpZiAvKiBJR1RfUFNSX0ggKi8KLS0gCjIuNy40Cgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZngg bWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK