From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paulo Zanoni Subject: =?utf-8?q?=5BPATCH=5D_Add_tools/intel=5Finfoframes?= Date: Fri, 13 Apr 2012 10:27:01 -0300 Message-ID: <1334323621-13475-1-git-send-email-przanoni@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-gy0-f177.google.com (mail-gy0-f177.google.com [209.85.160.177]) by gabe.freedesktop.org (Postfix) with ESMTP id D2C16A0C3B for ; Fri, 13 Apr 2012 06:27:15 -0700 (PDT) Received: by ghbf11 with SMTP id f11so1778100ghb.36 for ; Fri, 13 Apr 2012 06:27:15 -0700 (PDT) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org Errors-To: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org To: intel-gfx@lists.freedesktop.org Cc: Paulo Zanoni List-Id: intel-gfx@lists.freedesktop.org RnJvbTogUGF1bG8gWmFub25pIDxwYXVsby5yLnphbm9uaUBpbnRlbC5jb20+CgpUaGlzIGlzIGEg Y29tbWFuZC1saW5lIHRvb2wgdGhhdCBhbGxvd3MgdXMgdG8gZGlzcGxheSBhbmQgbW9kaWZ5IHRo ZQpJbmZvRnJhbWVzIHdlIHNlbmQuCgp2MjogdXNlIGFyZ3YgaW5zdGVhZCBvZiBzdGRpbgoKU2ln bmVkLW9mZi1ieTogUGF1bG8gWmFub25pIDxwYXVsby5yLnphbm9uaUBpbnRlbC5jb20+Ci0tLQoK SGkKCkkgc2VudCB0aGlzIHRvb2wgYSBsb25nIHRpbWUgYWdvLCByZWNlaXZlZCByZXZpZXdzIChh c2tpbmcgdG8gcmVhZAppbnB1dCBmcm9tIGFyZ3YgaW5zdGVhZCBvZiBzdGRpbiksIGJ1dCB0aGVu IGtpbmRhIGdhdmUgdXAgb24gaXQgc2luY2UKSSB0aG91Z2h0IGl0IHdhcyBub3QgdGhhdCB1c2Vm dWwuIEkgd2FzIHdyb25nOiB0aGlzIHRvb2wgaGFzIGFscmVhZHkKaGVscGVkIGludmVzdGlnYXRp bmcga2VybmVsLm9yZyBidWcgIzI1NzMyIChqdXN0IHJ1bm5pbmcgdGhlIHRvb2wKZml4ZXMgdGhl IHByb2JsZW0hIGJ1dCB3aHk/KSBhbmQgYSBmZXcgbWludXRlcyBhZ28gaXQgaGFzIGp1c3QgaGVs cGVkCm1lIGZpbmRpbmcgdGhlIGZpeCBmb3IgZnJlZWRlc2t0b3Aub3JnIGJ1ZyAjNDU3MjkgKGJ5 IHF1aWNrbHkgY2hhbmdpbmcKdGhlIEFWSSBJbmZvRnJhbWUgd2l0aG91dCByZWNvbXBpbGluZyB0 aGUgS2VybmVsKS4KCkkgaG9wZSBpdCB3aWxsIGFsc28gaGVscCB1cyBzb2x2aW5nIGZ1dHVyZSBw cm9ibGVtcywgc28gSSBndWVzcyBpdAptaWdodCBiZSB3b3J0aCBoYXZpbmcgdGhlIHRvb2wgb24g dGhlIG1haW4gSS1HLVQgcmVwb3NpdG9yeS4KCgogbWFuL01ha2VmaWxlLmFtICAgICAgICAgIHwg ICAgMSArCiBtYW4vaW50ZWxfaW5mb2ZyYW1lcy5tYW4gfCAgIDI2ICsrCiB0b29scy8uZ2l0aWdu b3JlICAgICAgICAgfCAgICAxICsKIHRvb2xzL01ha2VmaWxlLmFtICAgICAgICB8ICAgIDEgKwog dG9vbHMvaW50ZWxfaW5mb2ZyYW1lcy5jIHwgMTA1MCArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrCiA1IGZpbGVzIGNoYW5nZWQsIDEwNzkgaW5zZXJ0aW9ucygr KQogY3JlYXRlIG1vZGUgMTAwNjQ0IG1hbi9pbnRlbF9pbmZvZnJhbWVzLm1hbgogY3JlYXRlIG1v ZGUgMTAwNjQ0IHRvb2xzL2ludGVsX2luZm9mcmFtZXMuYwoKZGlmZiAtLWdpdCBhL21hbi9NYWtl ZmlsZS5hbSBiL21hbi9NYWtlZmlsZS5hbQppbmRleCAwZjE5N2E5Li4wZDA0ZjkzIDEwMDY0NAot LS0gYS9tYW4vTWFrZWZpbGUuYW0KKysrIGIvbWFuL01ha2VmaWxlLmFtCkBAIC02LDYgKzYsNyBA QCBhcHBtYW5fUFJFID0gCQkJCVwKIAlpbnRlbF9lcnJvcl9kZWNvZGUubWFuCQlcCiAJaW50ZWxf Z3B1X3RvcC5tYW4JCVwKIAlpbnRlbF9ndHQubWFuCQkJXAorCWludGVsX2luZm9mcmFtZXMubWFu CQlcCiAJaW50ZWxfbGlkLm1hbgkJCVwKIAlpbnRlbF9wYW5lbF9maXR0ZXIubWFuCQlcCiAJaW50 ZWxfcmVnX2R1bXBlci5tYW4JCVwKZGlmZiAtLWdpdCBhL21hbi9pbnRlbF9pbmZvZnJhbWVzLm1h biBiL21hbi9pbnRlbF9pbmZvZnJhbWVzLm1hbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi5jMjBkNGI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuL2ludGVsX2luZm9mcmFtZXMu bWFuCkBAIC0wLDAgKzEsMjYgQEAKKy5cIiBzaG9ydGhhbmQgZm9yIGRvdWJsZSBxdW90ZSB0aGF0 IHdvcmtzIGV2ZXJ5d2hlcmUuCisuZHMgcSBcTiczNCcKKy5USCBpbnRlbF9pbmZvZnJhbWVzIF9f YXBwbWFuc3VmZml4X18gX194b3JndmVyc2lvbl9fCisuU0ggTkFNRQoraW50ZWxfaW5mb2ZyYW1l cyBcLSBWaWV3IGFuZCBjaGFuZ2UgSERNSSBJbmZvRnJhbWVzCisuU0ggU1lOT1BTSVMKKy5CIGlu dGVsX2luZm9mcmFtZXMKKy5TSCBERVNDUklQVElPTgorLkIgaW50ZWxfaW5mb2ZyYW1lcworaXMg YSB0b29sIHRvIHZpZXcgYW5kIGNoYW5nZSB0aGUgSERNSSBJbmZvRnJhbWVzIHNlbnQgYnkgdGhl IEdQVS4gSXRzIG1haW4KK3B1cnBvc2UgaXMgdG8gYmUgdXNlZCBhcyBhIGRlYnVnZ2luZyB0b29s LiBJbiBzb21lIGNhc2VzIChlLmcuLCB3aGVuCitjaGFuZ2luZyBtb2RlcykgdGhlIEtlcm5lbCB3 aWxsIHVuZG8gdGhlIGNoYW5nZXMgbWFkZSBieSB0aGlzIHRvb2wuCisKK0Rlc2NyaXB0aW9ucyBv ZiB0aGUgSW5mb0ZyYW1lIGZpZWxkcyBjYW4gYmUgZm91bmQgb24gdGhlIEhETUkgYW5kIENFQS04 NjEKK3NwZWNpZmljYXRpb25zLgorCitVc2UgdGhlCisuQiAtaAorb3IKKy5CIC0taGVscAorb3B0 aW9ucyB0byBsZWFybiBob3cgdG8gdXNlIHRoZSBjb21tYW5kCisuU0ggTElNSVRBVElPTlMKK05v dCBhbGwgSERNSSBtb25pdG9ycyByZXNwZWN0IHRoZSBJbmZvRnJhbWVzIHNlbnQgdG8gdGhlbS4g T25seSBJcm9uIExha2UKK29yIG5ld2VyIGhhcmR3YXJlIGlzIHN1cHBvcnRlZCB5ZXQuCisuU0gg U0VFIEFMU08KK0hETUkgc3BlY2lmaWNhdGlvbiwgQ0VBLTg2MSBzcGVjaWZpY2F0aW9uLgpkaWZm IC0tZ2l0IGEvdG9vbHMvLmdpdGlnbm9yZSBiL3Rvb2xzLy5naXRpZ25vcmUKaW5kZXggNDQ5NTlm Yi4uNGQxYjM3YiAxMDA2NDQKLS0tIGEvdG9vbHMvLmdpdGlnbm9yZQorKysgYi90b29scy8uZ2l0 aWdub3JlCkBAIC0xMSw2ICsxMSw3IEBAIGludGVsX2dwdV9kdW1wCiBpbnRlbF9ncHVfdGltZQog aW50ZWxfZ3B1X3RvcAogaW50ZWxfZ3R0CitpbnRlbF9pbmZvZnJhbWVzCiBpbnRlbF9saWQKIGlu dGVsX3BhbmVsX2ZpdHRlcgogaW50ZWxfcmVnX2NoZWNrZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL01h a2VmaWxlLmFtIGIvdG9vbHMvTWFrZWZpbGUuYW0KaW5kZXggYTM2ODEzMC4uMDU4ODM1YyAxMDA2 NDQKLS0tIGEvdG9vbHMvTWFrZWZpbGUuYW0KKysrIGIvdG9vbHMvTWFrZWZpbGUuYW0KQEAgLTE4 LDYgKzE4LDcgQEAgYmluX1BST0dSQU1TID0gCQkJCVwKIAogbm9pbnN0X1BST0dSQU1TID0gCQkJ XAogCWludGVsX2R1bXBfZGVjb2RlIAkJXAorCWludGVsX2luZm9mcmFtZXMJCVwKIAlpbnRlbF9s aWQJCQlcCiAJaW50ZWxfcGFuZWxfZml0dGVyCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2ludGVsX2lu Zm9mcmFtZXMuYyBiL3Rvb2xzL2ludGVsX2luZm9mcmFtZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi5iZDhkNjZlCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaW50ZWxf aW5mb2ZyYW1lcy5jCkBAIC0wLDAgKzEsMTA1MCBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDEy IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhp cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3 YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJh Z3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9y dGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENP UFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVS CisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVBTElOR1MgSU4gVEhFIFNP RlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICAgIFBhdWxvIFphbm9uaSA8cGF1bG8uci56 YW5vbmlAaW50ZWwuY29tPgorICoKKyAqLworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVk ZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNp bmNsdWRlIDxnZXRvcHQuaD4KKyNpbmNsdWRlICJpbnRlbF9ncHVfdG9vbHMuaCIKKwordHlwZWRl ZiBlbnVtIHsKKwlUUkFOU0NfQSA9IDAsCisJVFJBTlNDX0IgPSAxLAorCVRSQU5TQ19DID0gMiwK KwlUUkFOU0NfSU5WQUxJRAorfSBUcmFuc2NvZGVyOworCit0eXBlZGVmIGVudW0geworCVJFR19I RE1JQiAgICAgID0gMHhlMTE0MCwKKwlSRUdfSERNSUMgICAgICA9IDB4ZTExNTAsCisJUkVHX0hE TUlEICAgICAgPSAweGUxMTYwLAorCVJFR19ESVBfQ1RMX0EgID0gMHhlMDIwMCwKKwlSRUdfRElQ X0NUTF9CICA9IDB4ZTEyMDAsCisJUkVHX0RJUF9DVExfQyAgPSAweGUyMjAwLAorCVJFR19ESVBf REFUQV9BID0gMHhlMDIwOCwKKwlSRUdfRElQX0RBVEFfQiA9IDB4ZTEyMDgsCisJUkVHX0RJUF9E QVRBX0MgPSAweGUyMjA4LAorfSBSZWdpc3RlcjsKKwordHlwZWRlZiBlbnVtIHsKKwlESVBfQVZJ ICAgID0gMCwKKwlESVBfVkVORE9SID0gMSwKKwlESVBfR0FNVVQgID0gMiwKKwlESVBfU1BEICAg ID0gMywKKwlESVBfSU5WQUxJRCwKK30gRGlwVHlwZTsKKwordHlwZWRlZiBlbnVtIHsKKwlESVBf RlJFUV9PTkNFICAgICAgICAgICAgICA9IDAsCisJRElQX0ZSRVFfRVZFUllfVlNZTkMgICAgICAg PSAxLAorCURJUF9GUkVRX0VWRVJZX09USEVSX1ZTWU5DID0gMiwKKwlESVBfRlJFUV9SRVNFUlZF RCAgICAgICAgICA9IDMsCit9IERpcEZyZXF1ZW5jeTsKKwordHlwZWRlZiBlbnVtIHsKKwlTT1VS Q0VfREVWSUNFX1VOS05PV04gICAgICAgICAgID0gMHgwMCwKKwlTT1VSQ0VfREVWSUNFX0RJR0lU QUxfU1RCICAgICAgID0gMHgwMSwKKwlTT1VSQ0VfREVWSUNFX0RWRF9QTEFZRVIgICAgICAgID0g MHgwMiwKKwlTT1VSQ0VfREVWSUNFX0RfVkhTICAgICAgICAgICAgID0gMHgwMywKKwlTT1VSQ0Vf REVWSUNFX0hERF9WSURFT1JFQ09SREVSID0gMHgwNCwKKwlTT1VSQ0VfREVWSUNFX0RWQyAgICAg ICAgICAgICAgID0gMHgwNSwKKwlTT1VSQ0VfREVWSUNFX0RTQyAgICAgICAgICAgICAgID0gMHgw NiwKKwlTT1VSQ0VfREVWSUNFX1ZJREVPX0NEICAgICAgICAgID0gMHgwNywKKwlTT1VSQ0VfREVW SUNFX0dBTUUgICAgICAgICAgICAgID0gMHgwOCwKKwlTT1VSQ0VfREVWSUNFX1BDX0dFTkVSQUwg ICAgICAgID0gMHgwOSwKKwlTT1VSQ0VfREVWSUNFX0JMVV9SQVlfRElTSyAgICAgID0gMHgwYSwK KwlTT1VSQ0VfREVWSUNFX1NVUEVSX0FVRElPX0NEICAgID0gMHgwYiwKKwlTT1VSQ0VfREVWSUNF X1JFU0VSVkVEICAgICAgICAgID0gMHgwYworfSBTb3VyY2VEZXZpY2U7CisKKyNkZWZpbmUgSERN SV9QT1JUX0VOQUJMRSAgICAgICAgICgxIDw8IDMxKQorI2RlZmluZSBIRE1JX1BPUlRfVFJBTlND T0RFUl9JQlggKDEgPDwgMzApCisjZGVmaW5lIEhETUlfUE9SVF9UUkFOU0NPREVSX0NQVCAoMyA8 PCAyOSkKKyNkZWZpbmUgSERNSV9QT1JUX0VOQ09ESU5HICAgICAgICgzIDw8IDEwKQorI2RlZmlu ZSBIRE1JX1BPUlRfTU9ERSAgICAgICAgICAgKDEgPDwgOSkKKyNkZWZpbmUgSERNSV9QT1JUX0FV RElPICAgICAgICAgICgxIDw8IDYpCisjZGVmaW5lIEhETUlfUE9SVF9ERVRFQ1RFRCAgICAgICAo MSA8PCAyKQorCisjZGVmaW5lIERJUF9DVExfRU5BQkxFICAgICAgICAgICAoMSA8PCAzMSkKKyNk ZWZpbmUgRElQX0NUTF9HQ1BfRU5BQkxFICAgICAgICgxIDw8IDI1KQorI2RlZmluZSBESVBfQ1RM X1NQRF9FTkFCTEUgICAgICAgKDEgPDwgMjQpCisjZGVmaW5lIERJUF9DVExfR0FNVVRfRU5BQkxF ICAgICAoMSA8PCAyMykKKyNkZWZpbmUgRElQX0NUTF9WRU5ET1JfRU5BQkxFICAgICgxIDw8IDIy KQorI2RlZmluZSBESVBfQ1RMX0FWSV9FTkFCTEUgICAgICAgKDEgPDwgMjEpCisjZGVmaW5lIERJ UF9DVExfQlVGRkVSX0lOREVYICAgICAoMyA8PCAxOSkKKyNkZWZpbmUgRElQX0NUTF9CVUZGRVJf QVZJICAgICAgICgwIDw8IDE5KQorI2RlZmluZSBESVBfQ1RMX0JVRkZFUl9WRU5ET1IgICAgKDEg PDwgMTkpCisjZGVmaW5lIERJUF9DVExfQlVGRkVSX0dBTVVUICAgICAoMiA8PCAxOSkKKyNkZWZp bmUgRElQX0NUTF9CVUZGRVJfU1BEICAgICAgICgzIDw8IDE5KQorI2RlZmluZSBESVBfQ1RMX0ZS RVFVRU5DWSAgICAgICAgKDMgPDwgMTYpCisjZGVmaW5lIERJUF9DVExfRlJFUV9PTkNFICAgICAg ICAoMCA8PCAxNikKKyNkZWZpbmUgRElQX0NUTF9GUkVRX0VWRVJZICAgICAgICgxIDw8IDE2KQor I2RlZmluZSBESVBfQ1RMX0ZSRVFfRVZFUllfT1RIRVIgKDIgPDwgMTYpCisjZGVmaW5lIERJUF9D VExfQlVGRkVSX1NJWkUgICAgICAoMTUgPDwgOCkKKyNkZWZpbmUgRElQX0NUTF9BQ0NFU1NfQURE UiAgICAgICgxNSA8PCAwKQorCisjZGVmaW5lIEFWSV9JTkZPRlJBTUVfVFlQRSAgICAweDgyCisj ZGVmaW5lIEFWSV9JTkZPRlJBTUVfVkVSU0lPTiAweDAxCisjZGVmaW5lIEFWSV9JTkZPRlJBTUVf TEVOR1RIICAweDBkCisjZGVmaW5lIFNQRF9JTkZPRlJBTUVfVFlQRSAgICAweDgzCisjZGVmaW5l IFNQRF9JTkZPRlJBTUVfVkVSU0lPTiAweDAxCisjZGVmaW5lIFNQRF9JTkZPRlJBTUVfTEVOR1RI ICAweDE5CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1aW50OF90IHR5cGU7CisJdWludDhfdCB2ZXJz aW9uOworCXVpbnQ4X3QgbGVuZ3RoOworCXVpbnQ4X3QgZWNjOworfSBEaXBJbmZvRnJhbWVIZWFk ZXI7CisKK3R5cGVkZWYgdW5pb24geworCXN0cnVjdCB7CisJCURpcEluZm9GcmFtZUhlYWRlciBo ZWFkZXI7CisJCXVpbnQ4X3QgY2hlY2tzdW07CisKKwkJdWludDhfdCBTICAgICA6MjsKKwkJdWlu dDhfdCBCICAgICA6MjsKKwkJdWludDhfdCBBICAgICA6MTsKKwkJdWludDhfdCBZICAgICA6MjsK KwkJdWludDhfdCBSc3ZkMCA6MTsKKworCQl1aW50OF90IFIgOjQ7CisJCXVpbnQ4X3QgTSA6MjsK KwkJdWludDhfdCBDIDoyOworCisJCXVpbnQ4X3QgU0MgIDoyOworCQl1aW50OF90IFEgICA6MjsK KwkJdWludDhfdCBFQyAgOjM7CisJCXVpbnQ4X3QgSVRDIDoxOworCisJCXVpbnQ4X3QgVklDICAg Ojc7CisJCXVpbnQ4X3QgUnN2ZDEgOjE7CisKKwkJdWludDhfdCBQUiAgICA6NDsKKwkJdWludDhf dCBSc3ZkMiA6NDsKKworCQl1aW50MTZfdCB0b3A7CisJCXVpbnQxNl90IGJvdHRvbTsKKwkJdWlu dDE2X3QgbGVmdDsKKwkJdWludDE2X3QgcmlnaHQ7CisKKwkJdWludDE2X3QgUnN2ZDM7CisJCXVp bnQzMl90IFJzdmQ0WzNdOworCX0gYXZpOworCXN0cnVjdCB7CisJCURpcEluZm9GcmFtZUhlYWRl ciBoZWFkZXI7CisJCXVpbnQ4X3QgY2hlY2tzdW07CisJCXVpbnQ4X3QgdmVuZG9yWzhdOworCQl1 aW50OF90IGRlc2NyaXB0aW9uWzE2XTsKKwkJdWludDhfdCBzb3VyY2U7CisJfSBfX2F0dHJpYnV0 ZV9fKChwYWNrZWQpKSBzcGQ7CisJc3RydWN0IHsKKwkJRGlwSW5mb0ZyYW1lSGVhZGVyIGhlYWRl cjsKKwkJdWludDhfdCBib2R5WzI3XTsKKwl9IGdlbmVyaWM7CisJdWludDhfdCBkYXRhOFsxMjhd OworCXVpbnQzMl90IGRhdGEzMlsxNl07Cit9IERpcEluZm9GcmFtZTsKKworUmVnaXN0ZXIgaGRt aV9wb3J0c1tdID0geworCVJFR19IRE1JQiwKKwlSRUdfSERNSUMsCisJUkVHX0hETUlECit9Owor UmVnaXN0ZXIgZGlwX2N0bF9yZWdzW10gPSB7CisJUkVHX0RJUF9DVExfQSwKKwlSRUdfRElQX0NU TF9CLAorCVJFR19ESVBfQ1RMX0MKK307CitSZWdpc3RlciBkaXBfZGF0YV9yZWdzW10gPSB7CisJ UkVHX0RJUF9EQVRBX0EsCisJUkVHX0RJUF9EQVRBX0IsCisJUkVHX0RJUF9EQVRBX0MKK307Citj b25zdCBjaGFyICpoZG1pX3BvcnRfbmFtZXNbXSA9IHsKKwkiSERNSUIiLAorCSJIRE1JQyIsCisJ IkhETUlEIgorfTsKK2NvbnN0IGNoYXIgKnRyYW5zY29kZXJfbmFtZXNbXSA9IHsKKwkiQSIsCisJ IkIiLAorCSJDIgorfTsKK2NvbnN0IGNoYXIgKmRpcF9mcmVxdWVuY3lfbmFtZXNbXSA9IHsKKwki b25jZSIsCisJImV2ZXJ5IHZzeW5jIiwKKwkiZXZlcnkgb3RoZXIgdnN5bmMiLAorCSJyZXNlcnZl ZCAoaW52YWxpZCkiCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqc3BkX3NvdXJjZV90b19zdHJp bmcoU291cmNlRGV2aWNlIHNvdXJjZSkKK3sKKwlzd2l0Y2ggKHNvdXJjZSkgeworCWNhc2UgU09V UkNFX0RFVklDRV9VTktOT1dOOgorCQlyZXR1cm4gInVua25vd24iOworCWNhc2UgU09VUkNFX0RF VklDRV9ESUdJVEFMX1NUQjoKKwkJcmV0dXJuICJkaWdpdGFsIHN0YiI7CisJY2FzZSBTT1VSQ0Vf REVWSUNFX0RWRF9QTEFZRVI6CisJCXJldHVybiAiZHZkIHBsYXllciI7CisJY2FzZSBTT1VSQ0Vf REVWSUNFX0RfVkhTOgorCQlyZXR1cm4gImQgdmhzIjsKKwljYXNlIFNPVVJDRV9ERVZJQ0VfSERE X1ZJREVPUkVDT1JERVI6CisJCXJldHVybiAiaGRkIHZpZGVvcmVjb3JkZXIiOworCWNhc2UgU09V UkNFX0RFVklDRV9EVkM6CisJCXJldHVybiAiZHZjIjsKKwljYXNlIFNPVVJDRV9ERVZJQ0VfRFND OgorCQlyZXR1cm4gImRzYyI7CisJY2FzZSBTT1VSQ0VfREVWSUNFX1ZJREVPX0NEOgorCQlyZXR1 cm4gInZpZGVvIGNkIjsKKwljYXNlIFNPVVJDRV9ERVZJQ0VfR0FNRToKKwkJcmV0dXJuICJnYW1l IjsKKwljYXNlIFNPVVJDRV9ERVZJQ0VfUENfR0VORVJBTDoKKwkJcmV0dXJuICJwYyBnZW5lcmFs IjsKKwljYXNlIFNPVVJDRV9ERVZJQ0VfQkxVX1JBWV9ESVNLOgorCQlyZXR1cm4gImJsdS1yYXkg ZGlzayI7CisJY2FzZSBTT1VSQ0VfREVWSUNFX1NVUEVSX0FVRElPX0NEOgorCQlyZXR1cm4gInN1 cGVyIGF1ZGlvIGNkIjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gInJlc2VydmVkIjsKKwl9Cit9CisK K3N0YXRpYyB2b2lkIGxvYWRfaW5mb2ZyYW1lKFRyYW5zY29kZXIgdHJhbnNjb2RlciwgRGlwSW5m b0ZyYW1lICpmcmFtZSwKKwkJCSAgIERpcFR5cGUgdHlwZSkKK3sKKwlSZWdpc3RlciBjdGxfcmVn ID0gZGlwX2N0bF9yZWdzW3RyYW5zY29kZXJdOworCVJlZ2lzdGVyIGRhdGFfcmVnID0gZGlwX2Rh dGFfcmVnc1t0cmFuc2NvZGVyXTsKKwl1aW50MzJfdCBjdGxfdmFsOworCXVpbnQzMl90IGk7CisK KwljdGxfdmFsID0gSU5SRUcoY3RsX3JlZyk7CisKKwljdGxfdmFsICY9IH5ESVBfQ1RMX0JVRkZF Ul9JTkRFWDsKKwljdGxfdmFsIHw9IHR5cGUgPDwgMTk7CisJT1VUUkVHKGN0bF9yZWcsIGN0bF92 YWwpOworCWN0bF92YWwgPSBJTlJFRyhjdGxfcmVnKTsKKworCWN0bF92YWwgJj0gfkRJUF9DVExf QUNDRVNTX0FERFI7CisJT1VUUkVHKGN0bF9yZWcsIGN0bF92YWwpOworCisJZm9yIChpID0gMDsg aSA8IDE2OyBpKyspIHsKKwkJY3RsX3ZhbCA9IElOUkVHKGN0bF9yZWcpOworCQlhc3NlcnQoKGN0 bF92YWwgJiBESVBfQ1RMX0FDQ0VTU19BRERSKSA9PSBpKTsKKwkJZnJhbWUtPmRhdGEzMltpXSA9 IElOUkVHKGRhdGFfcmVnKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaW5mb2ZyYW1lX3ZhbGlkX2No ZWNrc3VtKERpcEluZm9GcmFtZSAqZnJhbWUpCit7CisJaW50IGk7CisJaW50IGxlbmd0aCA9IGZy YW1lLT5nZW5lcmljLmhlYWRlci5sZW5ndGg7CisJdWludDhfdCBjc3VtOworCisJY3N1bSA9IGZy YW1lLT5nZW5lcmljLmhlYWRlci50eXBlICsgZnJhbWUtPmdlbmVyaWMuaGVhZGVyLnZlcnNpb24g KworCSAgICAgICBmcmFtZS0+Z2VuZXJpYy5oZWFkZXIubGVuZ3RoOyAvKiBubyBlY2MgKi8KKwlm b3IgKGkgPSAwOyBpIDwgbGVuZ3RoICsgMTsgaSsrKQorCQljc3VtICs9IGZyYW1lLT5nZW5lcmlj LmJvZHlbaV07CisKKwlyZXR1cm4gKGNzdW0gPT0gMCk7Cit9CisKK3N0YXRpYyB2b2lkIGluZm9m cmFtZV9maXhfY2hlY2tzdW0oRGlwSW5mb0ZyYW1lICpmcmFtZSkKK3sKKwlpbnQgaTsKKwlpbnQg bGVuZ3RoID0gZnJhbWUtPmdlbmVyaWMuaGVhZGVyLmxlbmd0aDsKKwl1aW50OF90IGNzdW07CisK Kwljc3VtID0gZnJhbWUtPmdlbmVyaWMuaGVhZGVyLnR5cGUgKyBmcmFtZS0+Z2VuZXJpYy5oZWFk ZXIudmVyc2lvbiArCisJICAgICAgIGZyYW1lLT5nZW5lcmljLmhlYWRlci5sZW5ndGg7IC8qIG5v IGVjYyAqLworCS8qIExlbmd0aCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBoZWFkZXIgZmllbGQgbm9y IHRoZSBjaGVja3N1bSAqLworCWZvciAoaSA9IDE7IGkgPCBsZW5ndGggKyAxOyBpKyspCisJCWNz dW0gKz0gZnJhbWUtPmdlbmVyaWMuYm9keVtpXTsKKwlmcmFtZS0+Z2VuZXJpYy5ib2R5WzBdID0g MHgxMDAgLSBjc3VtOworfQorCitzdGF0aWMgdm9pZCBkdW1wX3BvcnRfaW5mbyhpbnQgaGRtaV9w b3J0X2luZGV4KQoreworCVJlZ2lzdGVyIHBvcnQgPSBoZG1pX3BvcnRzW2hkbWlfcG9ydF9pbmRl eF07CisJdWludDMyX3QgdmFsID0gSU5SRUcocG9ydCk7CisJVHJhbnNjb2RlciB0cmFuc2NvZGVy OworCisJcHJpbnRmKCJcblBvcnQgJXM6XG4iLCBoZG1pX3BvcnRfbmFtZXNbaGRtaV9wb3J0X2lu ZGV4XSk7CisJcHJpbnRmKCItICVzZGV0ZWN0ZWRcbiIsIHZhbCAmIEhETUlfUE9SVF9ERVRFQ1RF RCA/ICIiIDogIm5vdCAgIik7CisJcHJpbnRmKCItICVzXG4iLCB2YWwgJiBIRE1JX1BPUlRfRU5B QkxFID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7CisKKwlpZiAoISh2YWwgJiBIRE1JX1BPUlRf RU5BQkxFKSkKKwkJcmV0dXJuOworCisJaWYgKHBjaCA+PSBQQ0hfQ1BUKQorCQl0cmFuc2NvZGVy ID0gKHZhbCAmIEhETUlfUE9SVF9UUkFOU0NPREVSX0NQVCkgPj4gMjk7CisJZWxzZQorCQl0cmFu c2NvZGVyID0gKHZhbCAmIEhETUlfUE9SVF9UUkFOU0NPREVSX0NQVCkgPj4gMzA7CisJcHJpbnRm KCItIHRyYW5zY29kZXI6ICVzXG4iLCB0cmFuc2NvZGVyX25hbWVzW3RyYW5zY29kZXJdKTsKKwor CXN3aXRjaCAoKHZhbCAmIEhETUlfUE9SVF9FTkNPRElORykgPj4gMTApIHsKKwljYXNlIDA6CisJ CXByaW50ZigiLSBtb2RlOiBTRFZPXG4iKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwcmludGYo Ii0gbW9kZTogVE1EU1xuIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ZigiLSBtb2Rl OiBJTlZBTElEIVxuIik7CisJfQorCisJcHJpbnRmKCItIG1vZGU6ICVzXG4iLCB2YWwgJiBIRE1J X1BPUlRfTU9ERSA/ICJIRE1JIiA6ICJEVkkiKTsKKwlwcmludGYoIi0gYXVkaW86ICVzXG4iLCB2 YWwgJiBIRE1JX1BPUlRfQVVESU8gPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKK30KKworc3Rh dGljIHZvaWQgZHVtcF9yYXdfaW5mb2ZyYW1lKERpcEluZm9GcmFtZSAqZnJhbWUpCit7CisJdW5z aWduZWQgaW50IGk7CisJcHJpbnRmKCItIHJhdzoiKTsKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkr KykgeworCQlpZiAoaSAlIDQgPT0gMCkKKwkJCXByaW50ZigiXG4gIik7CisJCXByaW50ZigiICUw OHgiLCBmcmFtZS0+ZGF0YTMyW2ldKTsKKwl9CisJcHJpbnRmKCJcbiIpOworfQorCitzdGF0aWMg dm9pZCBkdW1wX2F2aV9pbmZvKFRyYW5zY29kZXIgdHJhbnNjb2RlcikKK3sKKwlSZWdpc3RlciBy ZWcgPSBkaXBfY3RsX3JlZ3NbdHJhbnNjb2Rlcl07CisJdWludDMyX3QgdmFsID0gSU5SRUcocmVn KTsKKwlEaXBGcmVxdWVuY3kgZnJlcTsKKwlEaXBJbmZvRnJhbWUgZnJhbWU7CisKKwlsb2FkX2lu Zm9mcmFtZSh0cmFuc2NvZGVyLCAmZnJhbWUsIERJUF9BVkkpOworCXZhbCA9IElOUkVHKHJlZyk7 CisKKwlwcmludGYoIkFWSSBJbmZvRnJhbWU6XG4iKTsKKworCWZyZXEgPSAodmFsICYgRElQX0NU TF9GUkVRVUVOQ1kpID4+IDE2OworCXByaW50ZigiLSBmcmVxdWVuY3k6ICVzXG4iLCBkaXBfZnJl cXVlbmN5X25hbWVzW2ZyZXFdKTsKKworCWR1bXBfcmF3X2luZm9mcmFtZSgmZnJhbWUpOworCisJ cHJpbnRmKCItIHR5cGU6ICV4LCB2ZXJzaW9uOiAleCwgbGVuZ3RoOiAleCwgZWNjOiAleCwgY2hl Y2tzdW06ICV4XG4iLAorCSAgICAgICBmcmFtZS5hdmkuaGVhZGVyLnR5cGUsIGZyYW1lLmF2aS5o ZWFkZXIudmVyc2lvbiwKKwkgICAgICAgZnJhbWUuYXZpLmhlYWRlci5sZW5ndGgsIGZyYW1lLmF2 aS5oZWFkZXIuZWNjLAorCSAgICAgICBmcmFtZS5hdmkuY2hlY2tzdW0pOworCXByaW50ZigiLSBT OiAleCwgQjogJXgsIEE6ICV4LCBZOiAleCwgUnN2ZDA6ICV4XG4iLAorCSAgICAgICBmcmFtZS5h dmkuUywgZnJhbWUuYXZpLkIsIGZyYW1lLmF2aS5BLCBmcmFtZS5hdmkuWSwKKwkgICAgICAgZnJh bWUuYXZpLlJzdmQwKTsKKwlwcmludGYoIi0gUjogJXgsIE06ICV4LCBDOiAleFxuIiwKKwkgICAg ICAgZnJhbWUuYXZpLlIsIGZyYW1lLmF2aS5NLCBmcmFtZS5hdmkuQyk7CisJcHJpbnRmKCItIFND OiAleCwgUTogJXgsIEVDOiAleCwgSVRDOiAleFxuIiwKKwkgICAgICAgZnJhbWUuYXZpLlNDLCBm cmFtZS5hdmkuUSwgZnJhbWUuYXZpLkVDLCBmcmFtZS5hdmkuSVRDKTsKKwlwcmludGYoIi0gVklD OiAleCwgUnN2ZDE6ICV4XG4iLCBmcmFtZS5hdmkuVklDLCBmcmFtZS5hdmkuUnN2ZDEpOworCXBy aW50ZigiLSBQUjogJXgsIFJzdmQyOiAleFxuIiwgZnJhbWUuYXZpLlBSLCBmcmFtZS5hdmkuUnN2 ZDIpOworCXByaW50ZigiLSB0b3A6ICV4LCBib3R0b206ICV4LCBsZWZ0OiAleCwgcmlnaHQ6ICV4 XG4iLAorCSAgICAgICBmcmFtZS5hdmkudG9wLCBmcmFtZS5hdmkuYm90dG9tLCBmcmFtZS5hdmku bGVmdCwKKwkgICAgICAgZnJhbWUuYXZpLnJpZ2h0KTsKKwlwcmludGYoIi0gUnN2ZDM6ICV4LCBS c3ZkNFswXTogJXgsIFJzdmQ0WzFdOiAleCwgUnN2ZDRbMl06ICV4XG4iLAorCSAgICAgICBmcmFt ZS5hdmkuUnN2ZDMsIGZyYW1lLmF2aS5Sc3ZkNFswXSwgZnJhbWUuYXZpLlJzdmQ0WzFdLAorCSAg ICAgICBmcmFtZS5hdmkuUnN2ZDRbMl0pOworCisJaWYgKCFpbmZvZnJhbWVfdmFsaWRfY2hlY2tz dW0oJmZyYW1lKSkKKwkJcHJpbnRmKCJJbnZhbGlkIEluZm9GcmFtZSBjaGVja3N1bSFcbiIpOwor fQorCitzdGF0aWMgdm9pZCBkdW1wX3ZlbmRvcl9pbmZvKFRyYW5zY29kZXIgdHJhbnNjb2RlcikK K3sKKwlSZWdpc3RlciByZWcgPSBkaXBfY3RsX3JlZ3NbdHJhbnNjb2Rlcl07CisJdWludDMyX3Qg dmFsID0gSU5SRUcocmVnKTsKKwlEaXBGcmVxdWVuY3kgZnJlcTsKKwlEaXBJbmZvRnJhbWUgZnJh bWU7CisKKwlsb2FkX2luZm9mcmFtZSh0cmFuc2NvZGVyLCAmZnJhbWUsIERJUF9WRU5ET1IpOwor CXZhbCA9IElOUkVHKHJlZyk7CisKKwlwcmludGYoIlZlbmRvciBJbmZvRnJhbWU6XG4iKTsKKwor CWZyZXEgPSAodmFsICYgRElQX0NUTF9GUkVRVUVOQ1kpID4+IDE2OworCXByaW50ZigiLSBmcmVx dWVuY3k6ICVzXG4iLCBkaXBfZnJlcXVlbmN5X25hbWVzW2ZyZXFdKTsKKworCWR1bXBfcmF3X2lu Zm9mcmFtZSgmZnJhbWUpOworCisJaWYgKCFpbmZvZnJhbWVfdmFsaWRfY2hlY2tzdW0oJmZyYW1l KSkKKwkJcHJpbnRmKCJJbnZhbGlkIEluZm9GcmFtZSBjaGVja3N1bSFcbiIpOworfQorCitzdGF0 aWMgdm9pZCBkdW1wX2dhbXV0X2luZm8oVHJhbnNjb2RlciB0cmFuc2NvZGVyKQoreworCVJlZ2lz dGVyIHJlZyA9IGRpcF9jdGxfcmVnc1t0cmFuc2NvZGVyXTsKKwl1aW50MzJfdCB2YWwgPSBJTlJF RyhyZWcpOworCURpcEZyZXF1ZW5jeSBmcmVxOworCURpcEluZm9GcmFtZSBmcmFtZTsKKworCWxv YWRfaW5mb2ZyYW1lKHRyYW5zY29kZXIsICZmcmFtZSwgRElQX0dBTVVUKTsKKwl2YWwgPSBJTlJF RyhyZWcpOworCisJcHJpbnRmKCJHYW11dCBJbmZvRnJhbWU6XG4iKTsKKworCWZyZXEgPSAodmFs ICYgRElQX0NUTF9GUkVRVUVOQ1kpID4+IDE2OworCXByaW50ZigiLSBmcmVxdWVuY3k6ICVzXG4i LCBkaXBfZnJlcXVlbmN5X25hbWVzW2ZyZXFdKTsKKworCWR1bXBfcmF3X2luZm9mcmFtZSgmZnJh bWUpOworCisJaWYgKCFpbmZvZnJhbWVfdmFsaWRfY2hlY2tzdW0oJmZyYW1lKSkKKwkJcHJpbnRm KCJJbnZhbGlkIEluZm9GcmFtZSBjaGVja3N1bSFcbiIpOworfQorCitzdGF0aWMgdm9pZCBkdW1w X3NwZF9pbmZvKFRyYW5zY29kZXIgdHJhbnNjb2RlcikKK3sKKwlSZWdpc3RlciByZWcgPSBkaXBf Y3RsX3JlZ3NbdHJhbnNjb2Rlcl07CisJdWludDMyX3QgdmFsID0gSU5SRUcocmVnKTsKKwlEaXBG cmVxdWVuY3kgZnJlcTsKKwlEaXBJbmZvRnJhbWUgZnJhbWU7CisJY2hhciB2ZW5kb3JbOV07CisJ Y2hhciBkZXNjcmlwdGlvblsxN107CisKKwlsb2FkX2luZm9mcmFtZSh0cmFuc2NvZGVyLCAmZnJh bWUsIERJUF9TUEQpOworCXZhbCA9IElOUkVHKHJlZyk7CisKKwlwcmludGYoIlNQRCBJbmZvRnJh bWU6XG4iKTsKKworCWZyZXEgPSAodmFsICYgRElQX0NUTF9GUkVRVUVOQ1kpID4+IDE2OworCXBy aW50ZigiLSBmcmVxdWVuY3k6ICVzXG4iLCBkaXBfZnJlcXVlbmN5X25hbWVzW2ZyZXFdKTsKKwor CWR1bXBfcmF3X2luZm9mcmFtZSgmZnJhbWUpOworCisJcHJpbnRmKCItIHR5cGU6ICV4LCB2ZXJz aW9uOiAleCwgbGVuZ3RoOiAleCwgZWNjOiAleCwgY2hlY2tzdW06ICV4XG4iLAorCSAgICAgICBm cmFtZS5zcGQuaGVhZGVyLnR5cGUsIGZyYW1lLnNwZC5oZWFkZXIudmVyc2lvbiwKKwkgICAgICAg ZnJhbWUuc3BkLmhlYWRlci5sZW5ndGgsIGZyYW1lLnNwZC5oZWFkZXIuZWNjLAorCSAgICAgICBm cmFtZS5zcGQuY2hlY2tzdW0pOworCisJbWVtY3B5KHZlbmRvciwgZnJhbWUuc3BkLnZlbmRvciwg OCk7CisJdmVuZG9yWzhdID0gJ1wwJzsKKwltZW1jcHkoZGVzY3JpcHRpb24sIGZyYW1lLnNwZC5k ZXNjcmlwdGlvbiwgMTYpOworCWRlc2NyaXB0aW9uWzE2XSA9ICdcMCc7CisKKwlwcmludGYoIi0g dmVuZG9yOiAlc1xuIiwgdmVuZG9yKTsKKwlwcmludGYoIi0gZGVzY3JpcHRpb246ICVzXG4iLCBk ZXNjcmlwdGlvbik7CisJcHJpbnRmKCItIHNvdXJjZTogJXNcbiIsIHNwZF9zb3VyY2VfdG9fc3Ry aW5nKGZyYW1lLnNwZC5zb3VyY2UpKTsKKworCWlmICghaW5mb2ZyYW1lX3ZhbGlkX2NoZWNrc3Vt KCZmcmFtZSkpCisJCXByaW50ZigiSW52YWxpZCBJbmZvRnJhbWUgY2hlY2tzdW0hXG4iKTsKK30K Kworc3RhdGljIHZvaWQgZHVtcF90cmFuc2NvZGVyX2luZm8oVHJhbnNjb2RlciB0cmFuc2NvZGVy KQoreworCVJlZ2lzdGVyIHJlZyA9IGRpcF9jdGxfcmVnc1t0cmFuc2NvZGVyXTsKKwl1aW50MzJf dCB2YWwgPSBJTlJFRyhyZWcpOworCisJcHJpbnRmKCJcblRyYW5zY29kZXIgJXM6XG4iLCB0cmFu c2NvZGVyX25hbWVzW3RyYW5zY29kZXJdKTsKKwlwcmludGYoIi0gJXNcbiIsIHZhbCAmIERJUF9D VExfRU5BQkxFID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7CisJaWYgKCEodmFsICYgRElQX0NU TF9FTkFCTEUpKQorCQlyZXR1cm47CisKKwlwcmludGYoIi0gR0NQOiAlc1xuIiwgdmFsICYgRElQ X0NUTF9HQ1BfRU5BQkxFID8KKwkgICAgICAgImVuYWJsZWQiIDogImRpc2FibGVkIik7CisKKwlp ZiAodmFsICYgRElQX0NUTF9BVklfRU5BQkxFKQorCQlkdW1wX2F2aV9pbmZvKHRyYW5zY29kZXIp OworCWlmICh2YWwgJiBESVBfQ1RMX1ZFTkRPUl9FTkFCTEUpCisJCWR1bXBfdmVuZG9yX2luZm8o dHJhbnNjb2Rlcik7CisJaWYgKHZhbCAmIERJUF9DVExfR0FNVVRfRU5BQkxFKQorCQlkdW1wX2dh bXV0X2luZm8odHJhbnNjb2Rlcik7CisJaWYgKHZhbCAmIERJUF9DVExfU1BEX0VOQUJMRSkKKwkJ ZHVtcF9zcGRfaW5mbyh0cmFuc2NvZGVyKTsKK30KKworc3RhdGljIHZvaWQgZHVtcF9hbGxfaW5m byh2b2lkKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUoaGRtaV9wb3J0cyk7IGkrKykKKwkJZHVtcF9wb3J0X2luZm8oaSk7CisJZm9yIChpID0gMDsg aSA8IEFSUkFZX1NJWkUoZGlwX2N0bF9yZWdzKTsgaSsrKQorCQlkdW1wX3RyYW5zY29kZXJfaW5m byhpKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfaW5mb2ZyYW1lKFRyYW5zY29kZXIgdHJhbnNj b2RlciwgRGlwVHlwZSB0eXBlLAorCQkJICAgIERpcEluZm9GcmFtZSAqZnJhbWUpCit7CisJUmVn aXN0ZXIgY3RsX3JlZyA9IGRpcF9jdGxfcmVnc1t0cmFuc2NvZGVyXTsKKwlSZWdpc3RlciBkYXRh X3JlZyA9IGRpcF9kYXRhX3JlZ3NbdHJhbnNjb2Rlcl07CisJdWludDMyX3QgY3RsX3ZhbDsKKwl1 bnNpZ25lZCBpbnQgaTsKKworCWN0bF92YWwgPSBJTlJFRyhjdGxfcmVnKTsKKwljdGxfdmFsICY9 IH5ESVBfQ1RMX0JVRkZFUl9JTkRFWDsKKwljdGxfdmFsIHw9ICh0eXBlIDw8IDE5KTsKKwljdGxf dmFsICY9IH5ESVBfQ1RMX0FDQ0VTU19BRERSOworCU9VVFJFRyhjdGxfcmVnLCBjdGxfdmFsKTsK KworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJY3RsX3ZhbCA9IElOUkVHKGN0bF9yZWcp OworCQlhc3NlcnQoKGN0bF92YWwgJiBESVBfQ1RMX0FDQ0VTU19BRERSKSA9PSBpKTsKKwkJT1VU UkVHKGRhdGFfcmVnLCBmcmFtZS0+ZGF0YTMyW2ldKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRp c2FibGVfaW5mb2ZyYW1lKFRyYW5zY29kZXIgdHJhbnNjb2RlciwgRGlwVHlwZSB0eXBlKQorewor CVJlZ2lzdGVyIHJlZyA9IGRpcF9jdGxfcmVnc1t0cmFuc2NvZGVyXTsKKwl1aW50MzJfdCB2YWwg PSBJTlJFRyhyZWcpOworCWlmICh0eXBlID09IERJUF9BVkkpCisJCXZhbCAmPSB+RElQX0NUTF9F TkFCTEU7CisJdmFsICY9IH4oMSA8PCAoMjEgKyB0eXBlKSk7CisJT1VUUkVHKHJlZywgdmFsKTsK K30KKworc3RhdGljIHZvaWQgZW5hYmxlX2luZm9mcmFtZShUcmFuc2NvZGVyIHRyYW5zY29kZXIs IERpcFR5cGUgdHlwZSkKK3sKKwlSZWdpc3RlciByZWcgPSBkaXBfY3RsX3JlZ3NbdHJhbnNjb2Rl cl07CisJdWludDMyX3QgdmFsID0gSU5SRUcocmVnKTsKKwlpZiAodHlwZSA9PSBESVBfQVZJKQor CQl2YWwgfD0gRElQX0NUTF9FTkFCTEU7CisJdmFsIHw9ICgxIDw8ICgyMSArIHR5cGUpKTsKKwlP VVRSRUcocmVnLCB2YWwpOworfQorCitzdGF0aWMgaW50IHBhcnNlX2luZm9mcmFtZV9vcHRpb25f dShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzLAorCQkJCSAgICB1aW50MzJfdCBtaW4s IHVpbnQzMl90IG1heCwKKwkJCQkgICAgdWludDMyX3QgKnZhbHVlLCBjaGFyICoqY29tbWFuZHMp Cit7CisJaW50IHJlYWQsIHJjOworCWlmICghc3RyY21wKG5hbWUsIHMpKSB7CisJCXJjID0gc3Nj YW5mKCpjb21tYW5kcywgIiV4JW4iLCB2YWx1ZSwgJnJlYWQpOworCQkqY29tbWFuZHMgPSAmKCpj b21tYW5kcylbcmVhZF07CisJCWlmIChyYyAhPSAxKSB7CisJCQlwcmludGYoIkludmFsaWQgdmFs dWUuXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKCp2YWx1ZSA8IG1pbiB8fCAqdmFs dWUgPiBtYXgpIHsKKwkJCXByaW50ZigiVmFsdWUgb3V0c2lkZSBhbGxvd2VkIHJhbmdlLlxuIik7 CisJCQlyZXR1cm4gMDsKKwkJfQorCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgcGFyc2VfaW5mb2ZyYW1lX29wdGlvbl9zKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0 IGNoYXIgKnMsCisJCQkJICAgIGludCBtaW5fc2l6ZSwgaW50IG1heF9zaXplLAorCQkJCSAgICBj aGFyICp2YWx1ZSwgY2hhciAqKmNvbW1hbmRzKQoreworCWludCBzaXplLCByZWFkLCByYzsKKwlp ZiAoIXN0cmNtcChuYW1lLCBzKSkgeworCQlyYyA9IHNzY2FuZigqY29tbWFuZHMsICIlMzFzJW4i LCB2YWx1ZSwgJnJlYWQpOworCQkqY29tbWFuZHMgPSAmKCpjb21tYW5kcylbcmVhZF07CisJCWlm IChyYyAhPSAxKSB7CisJCQlwcmludGYoIkludmFsaWQgdmFsdWUuXG4iKTsKKwkJCXJldHVybiAw OworCQl9CisKKwkJc2l6ZSA9IHN0cmxlbih2YWx1ZSk7CisJCWlmIChzaXplIDwgbWluX3NpemUg fHwgc2l6ZSA+IG1heF9zaXplKSB7CisJCQlwcmludGYoIlN0cmluZyBlaXRoZXIgdG9vIGJpZyBv ciB0b28gc21hbGwuXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJCXJldHVybiAxOworCX0KKwly ZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2hhbmdlX2F2aV9pbmZvZnJhbWUoVHJhbnNjb2Rl ciB0cmFuc2NvZGVyLCBjaGFyICpjb21tYW5kcykKK3sKKwlSZWdpc3RlciByZWcgPSBkaXBfY3Rs X3JlZ3NbdHJhbnNjb2Rlcl07CisJdWludDMyX3QgdmFsID0gSU5SRUcocmVnKTsKKwlEaXBJbmZv RnJhbWUgZnJhbWU7CisJY2hhciBvcHRpb25bMzJdOworCXVpbnQzMl90IG9wdGlvbl92YWw7CisJ aW50IHJjLCByZWFkOworCWNoYXIgKmN1cnJlbnQgPSBjb21tYW5kczsKKworCWxvYWRfaW5mb2Zy YW1lKHRyYW5zY29kZXIsICZmcmFtZSwgRElQX0FWSSk7CisJdmFsID0gSU5SRUcocmVnKTsKKwor CXdoaWxlICgxKSB7CisJCXJjID0gc3NjYW5mKGN1cnJlbnQsICIlMzFzJW4iLCBvcHRpb24sICZy ZWFkKTsKKwkJY3VycmVudCA9ICZjdXJyZW50W3JlYWRdOworCQlpZiAocmMgPT0gRU9GKSB7CisJ CQlicmVhazsKKwkJfSBlbHNlIGlmIChyYyAhPSAxKSB7CisJCQlwcmludGYoIkludmFsaWQgb3B0 aW9uOiAlc1xuIiwgb3B0aW9uKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHBhcnNlX2lu Zm9mcmFtZV9vcHRpb25fdSgiUyIsIG9wdGlvbiwgMCwgMiwgJm9wdGlvbl92YWwsCisJCQkJCSAg ICAgJmN1cnJlbnQpKQorCQkJZnJhbWUuYXZpLlMgPSBvcHRpb25fdmFsOworCQllbHNlIGlmIChw YXJzZV9pbmZvZnJhbWVfb3B0aW9uX3UoIkIiLCBvcHRpb24sIDAsIDMsCisJCQkJCQkgICZvcHRp b25fdmFsLCAmY3VycmVudCkpCisJCQlmcmFtZS5hdmkuQiA9IG9wdGlvbl92YWw7CisJCWVsc2Ug aWYgKHBhcnNlX2luZm9mcmFtZV9vcHRpb25fdSgiQSIsIG9wdGlvbiwgMCwgMSwKKwkJCQkJCSAg Jm9wdGlvbl92YWwsICZjdXJyZW50KSkKKwkJCWZyYW1lLmF2aS5BID0gb3B0aW9uX3ZhbDsKKwkJ ZWxzZSBpZiAocGFyc2VfaW5mb2ZyYW1lX29wdGlvbl91KCJZIiwgb3B0aW9uLCAwLCAyLAorCQkJ CQkJICAmb3B0aW9uX3ZhbCwgJmN1cnJlbnQpKQorCQkJZnJhbWUuYXZpLlkgPSBvcHRpb25fdmFs OworCQllbHNlIGlmIChwYXJzZV9pbmZvZnJhbWVfb3B0aW9uX3UoIlIiLCBvcHRpb24sIDAsIDE1 LAorCQkJCQkJICAmb3B0aW9uX3ZhbCwgJmN1cnJlbnQpKQorCQkJZnJhbWUuYXZpLlIgPSBvcHRp b25fdmFsOworCQllbHNlIGlmIChwYXJzZV9pbmZvZnJhbWVfb3B0aW9uX3UoIk0iLCBvcHRpb24s IDAsIDIsCisJCQkJCQkgICZvcHRpb25fdmFsLCAmY3VycmVudCkpCisJCQlmcmFtZS5hdmkuTSA9 IG9wdGlvbl92YWw7CisJCWVsc2UgaWYgKHBhcnNlX2luZm9mcmFtZV9vcHRpb25fdSgiQyIsIG9w dGlvbiwgMCwgMywKKwkJCQkJCSAgJm9wdGlvbl92YWwsICZjdXJyZW50KSkKKwkJCWZyYW1lLmF2 aS5DID0gb3B0aW9uX3ZhbDsKKwkJZWxzZSBpZiAocGFyc2VfaW5mb2ZyYW1lX29wdGlvbl91KCJT QyIsIG9wdGlvbiwgMCwgMywKKwkJCQkJCSAgJm9wdGlvbl92YWwsICZjdXJyZW50KSkKKwkJCWZy YW1lLmF2aS5TQyA9IG9wdGlvbl92YWw7CisJCWVsc2UgaWYgKHBhcnNlX2luZm9mcmFtZV9vcHRp b25fdSgiUSIsIG9wdGlvbiwgMCwgMiwKKwkJCQkJCSAgJm9wdGlvbl92YWwsICZjdXJyZW50KSkK KwkJCWZyYW1lLmF2aS5RID0gb3B0aW9uX3ZhbDsKKwkJZWxzZSBpZiAocGFyc2VfaW5mb2ZyYW1l X29wdGlvbl91KCJFQyIsIG9wdGlvbiwgMCwgMSwKKwkJCQkJCSAgJm9wdGlvbl92YWwsJmN1cnJl bnQpKQorCQkJZnJhbWUuYXZpLkVDID0gb3B0aW9uX3ZhbDsKKwkJZWxzZSBpZiAocGFyc2VfaW5m b2ZyYW1lX29wdGlvbl91KCJJVEMiLCBvcHRpb24sIDAsIDEsCisJCQkJCQkgICZvcHRpb25fdmFs LCAmY3VycmVudCkpCisJCQlmcmFtZS5hdmkuSVRDID0gb3B0aW9uX3ZhbDsKKwkJZWxzZSBpZiAo cGFyc2VfaW5mb2ZyYW1lX29wdGlvbl91KCJWSUMiLCBvcHRpb24sIDAsIDEyNywKKwkJCQkJCSAg Jm9wdGlvbl92YWwsICZjdXJyZW50KSkKKwkJCWZyYW1lLmF2aS5WSUMgPSBvcHRpb25fdmFsOwor CQllbHNlIGlmIChwYXJzZV9pbmZvZnJhbWVfb3B0aW9uX3UoIlBSIiwgb3B0aW9uLCAwLCAxNSwK KwkJCQkJCSAgJm9wdGlvbl92YWwsICZjdXJyZW50KSkKKwkJCWZyYW1lLmF2aS5QUiA9IG9wdGlv bl92YWw7CisJCWVsc2UgaWYgKHBhcnNlX2luZm9mcmFtZV9vcHRpb25fdSgidG9wIiwgb3B0aW9u LCAwLCA2NTUzNSwKKwkJCQkJCSAgJm9wdGlvbl92YWwsICZjdXJyZW50KSkKKwkJCWZyYW1lLmF2 aS50b3AgPSBvcHRpb25fdmFsOworCQllbHNlIGlmIChwYXJzZV9pbmZvZnJhbWVfb3B0aW9uX3Uo ImJvdHRvbSIsIG9wdGlvbiwgMCwgNjU1MzUsCisJCQkJCQkgICZvcHRpb25fdmFsLCAmY3VycmVu dCkpCisJCQlmcmFtZS5hdmkuYm90dG9tID0gb3B0aW9uX3ZhbDsKKwkJZWxzZSBpZiAocGFyc2Vf aW5mb2ZyYW1lX29wdGlvbl91KCJsZWZ0Iiwgb3B0aW9uLCAwLCA2NTUzNSwKKwkJCQkJCSAgJm9w dGlvbl92YWwsICZjdXJyZW50KSkKKwkJCWZyYW1lLmF2aS5sZWZ0ID0gb3B0aW9uX3ZhbDsKKwkJ ZWxzZSBpZiAocGFyc2VfaW5mb2ZyYW1lX29wdGlvbl91KCJyaWdodCIsIG9wdGlvbiwgMCwgNjU1 MzUsCisJCQkJCQkgICZvcHRpb25fdmFsLCAmY3VycmVudCkpCisJCQlmcmFtZS5hdmkucmlnaHQg PSBvcHRpb25fdmFsOworCQllbHNlCisJCQlwcmludGYoIlVucmVjb2duaXplZCBvcHRpb246ICVz XG4iLCBvcHRpb24pOworCX0KKworCXZhbCAmPSB+RElQX0NUTF9GUkVRVUVOQ1k7CisJdmFsIHw9 IERJUF9DVExfRlJFUV9FVkVSWTsKKwlPVVRSRUcocmVnLCB2YWwpOworCisJZnJhbWUuYXZpLmhl YWRlci50eXBlID0gQVZJX0lORk9GUkFNRV9UWVBFOworCWZyYW1lLmF2aS5oZWFkZXIudmVyc2lv biA9IEFWSV9JTkZPRlJBTUVfVkVSU0lPTjsKKwlmcmFtZS5hdmkuaGVhZGVyLmxlbmd0aCA9IEFW SV9JTkZPRlJBTUVfTEVOR1RIOworCWZyYW1lLmF2aS5Sc3ZkMCA9IDA7CisJZnJhbWUuYXZpLlJz dmQxID0gMDsKKwlmcmFtZS5hdmkuUnN2ZDIgPSAwOworCWZyYW1lLmF2aS5Sc3ZkMyA9IDA7CisJ ZnJhbWUuYXZpLlJzdmQ0WzBdID0gMDsKKwlmcmFtZS5hdmkuUnN2ZDRbMV0gPSAwOworCWZyYW1l LmF2aS5Sc3ZkNFsyXSA9IDA7CisKKwlpbmZvZnJhbWVfZml4X2NoZWNrc3VtKCZmcmFtZSk7CisK KwlkaXNhYmxlX2luZm9mcmFtZSh0cmFuc2NvZGVyLCBESVBfQVZJKTsKKwl3cml0ZV9pbmZvZnJh bWUodHJhbnNjb2RlciwgRElQX0FWSSwgJmZyYW1lKTsKKwllbmFibGVfaW5mb2ZyYW1lKHRyYW5z Y29kZXIsIERJUF9BVkkpOworfQorCitzdGF0aWMgdm9pZCBjaGFuZ2Vfc3BkX2luZm9mcmFtZShU cmFuc2NvZGVyIHRyYW5zY29kZXIsIGNoYXIgKmNvbW1hbmRzKQoreworCVJlZ2lzdGVyIHJlZyA9 IGRpcF9jdGxfcmVnc1t0cmFuc2NvZGVyXTsKKwl1aW50MzJfdCB2YWwgPSBJTlJFRyhyZWcpOwor CURpcEluZm9GcmFtZSBmcmFtZTsKKwljaGFyIG9wdGlvblsxNl07CisJY2hhciBvcHRpb25fdmFs X3NbMzJdOworCXVpbnQzMl90IG9wdGlvbl92YWxfaTsKKwlpbnQgcmMsIHJlYWQ7CisJY2hhciAq Y3VycmVudCA9IGNvbW1hbmRzOworCisJbG9hZF9pbmZvZnJhbWUodHJhbnNjb2RlciwgJmZyYW1l LCBESVBfU1BEKTsKKwl2YWwgPSBJTlJFRyhyZWcpOworCisJd2hpbGUgKDEpIHsKKwkJcmMgPSBz c2NhbmYoY3VycmVudCwgIiUzMXMlbiIsIG9wdGlvbiwgJnJlYWQpOworCQljdXJyZW50ID0gJmN1 cnJlbnRbcmVhZF07CisJCWlmIChyYyA9PSBFT0YpIHsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYg KHJjICE9IDEpIHsKKwkJCXByaW50ZigiSW52YWxpZCBvcHRpb246ICVzXG4iLCBvcHRpb24pOwor CQkJY29udGludWU7CisJCX0KKworCQltZW1zZXQob3B0aW9uX3ZhbF9zLCAwLCAzMik7CisKKwkJ aWYgKHBhcnNlX2luZm9mcmFtZV9vcHRpb25fcygidmVuZG9yIiwgb3B0aW9uLCAwLCA4LAorCQkJ CQkgICAgIG9wdGlvbl92YWxfcywgJmN1cnJlbnQpKQorCQkJbWVtY3B5KGZyYW1lLnNwZC52ZW5k b3IsIG9wdGlvbl92YWxfcywgOCk7CisJCWVsc2UgaWYgKHBhcnNlX2luZm9mcmFtZV9vcHRpb25f cygiZGVzY3JpcHRpb24iLCBvcHRpb24sIDAsIDE2LAorCQkJCQkJICBvcHRpb25fdmFsX3MsICZj dXJyZW50KSkKKwkJCW1lbWNweShmcmFtZS5zcGQuZGVzY3JpcHRpb24sIG9wdGlvbl92YWxfcywg MTYpOworCQllbHNlIGlmIChwYXJzZV9pbmZvZnJhbWVfb3B0aW9uX3UoInNvdXJjZSIsIG9wdGlv biwgMCwgMHgwYywKKwkJCQkJCSAgJm9wdGlvbl92YWxfaSwgJmN1cnJlbnQpKQorCQkJZnJhbWUu c3BkLnNvdXJjZSA9IG9wdGlvbl92YWxfaTsKKwkJZWxzZQorCQkJcHJpbnRmKCJVbnJlY29nbml6 ZWQgb3B0aW9uOiAlc1xuIiwgb3B0aW9uKTsKKwl9CisKKwl2YWwgJj0gfkRJUF9DVExfRlJFUVVF TkNZOworCXZhbCB8PSBESVBfQ1RMX0ZSRVFfRVZFUllfT1RIRVI7CisJT1VUUkVHKHJlZywgdmFs KTsKKworCWZyYW1lLnNwZC5oZWFkZXIudHlwZSA9IFNQRF9JTkZPRlJBTUVfVFlQRTsKKwlmcmFt ZS5zcGQuaGVhZGVyLnZlcnNpb24gPSBTUERfSU5GT0ZSQU1FX1ZFUlNJT047CisJZnJhbWUuc3Bk LmhlYWRlci5sZW5ndGggPSBTUERfSU5GT0ZSQU1FX0xFTkdUSDsKKworCWluZm9mcmFtZV9maXhf Y2hlY2tzdW0oJmZyYW1lKTsKKworCWRpc2FibGVfaW5mb2ZyYW1lKHRyYW5zY29kZXIsIERJUF9T UEQpOworCXdyaXRlX2luZm9mcmFtZSh0cmFuc2NvZGVyLCBESVBfU1BELCAmZnJhbWUpOworCWVu YWJsZV9pbmZvZnJhbWUodHJhbnNjb2RlciwgRElQX1NQRCk7Cit9CisKK3N0YXRpYyB2b2lkIGNo YW5nZV9pbmZvZnJhbWVfY2hlY2tzdW0oVHJhbnNjb2RlciB0cmFuc2NvZGVyLCBEaXBUeXBlIHR5 cGUsCisJCQkJICAgICAgdWludDMyX3Qgc2VsZWN0ZWRfY3N1bSkKK3sKKwlEaXBJbmZvRnJhbWUg ZnJhbWU7CisKKwlsb2FkX2luZm9mcmFtZSh0cmFuc2NvZGVyLCAmZnJhbWUsIHR5cGUpOworCWZy YW1lLmdlbmVyaWMuYm9keVswXSA9IHNlbGVjdGVkX2NzdW07CisJZGlzYWJsZV9pbmZvZnJhbWUo dHJhbnNjb2RlciwgdHlwZSk7CisJd3JpdGVfaW5mb2ZyYW1lKHRyYW5zY29kZXIsIHR5cGUsICZm cmFtZSk7CisJZW5hYmxlX2luZm9mcmFtZSh0cmFuc2NvZGVyLCB0eXBlKTsKK30KKworc3RhdGlj IHZvaWQgY2hhbmdlX2luZm9mcmFtZV9mcmVxdWVuY3koVHJhbnNjb2RlciB0cmFuc2NvZGVyLCBE aXBUeXBlIHR5cGUsCisJCQkJICAgICAgIERpcEZyZXF1ZW5jeSBmcmVxdWVuY3kpCit7CisJUmVn aXN0ZXIgcmVnID0gZGlwX2N0bF9yZWdzW3RyYW5zY29kZXJdOworCXVpbnQzMl90IHZhbCA9IElO UkVHKHJlZyk7CisKKwlpZiAodHlwZSA9PSBESVBfQVZJICYmIGZyZXF1ZW5jeSAhPSBESVBfRlJF UV9FVkVSWV9WU1lOQykgeworCQlwcmludGYoIkVycm9yOiBBVkkgaW5mb2ZyYW1lIG11c3QgYmUg c2VudCBldmVyeSBWU3luYyFcbiIpOworCQlmcmVxdWVuY3kgPSBESVBfRlJFUV9FVkVSWV9WU1lO QzsKKwl9CisKKwl2YWwgJj0gfkRJUF9DVExfRlJFUVVFTkNZOworCXZhbCB8PSAoZnJlcXVlbmN5 IDw8IDE2KTsKKwlPVVRSRUcocmVnLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBkaXNhYmxlX2Rp cChUcmFuc2NvZGVyIHRyYW5zY29kZXIpCit7CisJUmVnaXN0ZXIgcmVnID0gZGlwX2N0bF9yZWdz W3RyYW5zY29kZXJdOworCXVpbnQzMl90IHZhbCA9IElOUkVHKHJlZyk7CisJdmFsICY9IH5ESVBf Q1RMX0VOQUJMRTsKKwlPVVRSRUcocmVnLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBlbmFibGVf ZGlwKFRyYW5zY29kZXIgdHJhbnNjb2RlcikKK3sKKwlSZWdpc3RlciByZWcgPSBkaXBfY3RsX3Jl Z3NbdHJhbnNjb2Rlcl07CisJdWludDMyX3QgdmFsID0gSU5SRUcocmVnKTsKKwl2YWwgfD0gRElQ X0NUTF9FTkFCTEU7CisJT1VUUkVHKHJlZywgdmFsKTsKK30KKworc3RhdGljIHZvaWQgZGlzYWJs ZV9oZG1pX3BvcnQoUmVnaXN0ZXIgcmVnKQoreworCXVpbnQzMl90IHZhbCA9IElOUkVHKHJlZyk7 CisJdmFsICY9IH5IRE1JX1BPUlRfRU5BQkxFOworCU9VVFJFRyhyZWcsIHZhbCk7Cit9CisKK3N0 YXRpYyB2b2lkIGVuYWJsZV9oZG1pX3BvcnQoUmVnaXN0ZXIgcmVnKQoreworCXVpbnQzMl90IHZh bCA9IElOUkVHKHJlZyk7CisJdmFsIHw9IEhETUlfUE9SVF9FTkFCTEU7CisJT1VUUkVHKHJlZywg dmFsKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfdXNhZ2Uodm9pZCkKK3sKK3ByaW50ZigiT3B0 aW9uczpcbiIKKyIgIC1kLCAtLWR1bXBcbiIKKyIgICAgICAgICAgZHVtcCBpbmZvcm1hdGlvbiBh Ym91dCBhbGwgdHJhbnNjb2RlcnNcbiIKKyIgIC1jLCAtLWNoYW5nZS1maWVsZHMgW2ZpZWxkc11c biIKKyIgICAgICAgICAgY2hhbmdlIGluZm9mcmFtZSBmaWVsZHMgZnJvbSBzZWxlY3RlZCB0cmFu c2NvZGVyXG4iCisiICAtaywgLS1jaGFuZ2UtY2hlY2tzdW0gW2NoZWNrc3VtXVxuIgorIiAgICAg ICAgICBjaGFuZ2UgaW5mb2ZyYW1lIGNoZWNrc3VtICh2YWx1ZSBpbiBoZXgpXG4iCisiICAtcSwg LS1jaGFuZ2UtZnJlcXVlbmN5IFtmcmVxdWVuY3ldXG4iCisiICAgICAgICAgIGNoYW5nZSBpbmZv ZnJhbWUgZnJlcXVlbmN5IChvbmNlLCBldmVyeXZzeW5jIG9yIGV2ZXJ5b3RoZXJ2c3luYylcbiIK KyIgIC1uLCAtLWRpc2FibGVcbiIKKyIgICAgICAgICAgZGlzYWJsZSB0aGUgc2VsZWN0ZWQgaW5m b2ZyYW1lIGZyb20gdGhlIHNlbGVjdGVkIHRyYW5zY29kZXJcbiIKKyIgIC1OLCAtLWVuYWJsZVxu IgorIiAgICAgICAgICBlbmFibGUgdGhlIHNlbGVjdGVkIGluZm9mcmFtZSBmcm9tIHRoZSBzZWxl Y3RlZCB0cmFuc2NvZGVyXG4iCisiICAteCwgLS1kaXNhYmxlLWluZm9mcmFtZXNcbiIKKyIgICAg ICAgICAgZGlzYWJsZSBhbGwgaW5mb2ZyYW1lcyBmcm9tIHNlbGVjdGVkIHRyYW5zY29kZXJcbiIK KyIgIC1YLCAtLWVuYWJsZS1pbmZvZnJhbWVzXG4iCisiICAgICAgICAgIGVuYWJsZSBzZW5kaW5n IGluZm9mcmFtZXMgb24gdGhlIHNlbGVjdGVkIHRyYW5zY29kZXJcbiIKKyIgIC1wLCAtLWRpc2Fi bGUtaGRtaS1wb3J0IFtwb3J0XVxuIgorIiAgICAgICAgICBkaXNhYmxlIGhkbWkgcG9ydCBvbiB0 aGUgc2VsZWN0ZWQgdHJhbnNjb2RlciAoQiwgQyBvciBEKVxuIgorIiAgLVAsIC0tZW5hYmxlLWhk bWktcG9ydCBbcG9ydF1cbiIKKyIgICAgICAgICAgZW5hYmxlIGhkbWkgcG9ydCBvbiB0aGUgc2Vs ZWN0ZWQgdHJhbnNjb2RlciAoQiwgQyBvciBEKVxuIgorIiAgLXQsIC0tdHJhbnNjb2RlclxuIgor IiAgICAgICAgICBzZWxlY3QgdHJhbnNjb2RlciAoQSwgQiBvciBDKVxuIgorIiAgLWYsIC0taW5m b2ZyYW1lXG4iCisiICAgICAgICAgIHNlbGVjdCBpbmZvZnJhbWUgKEFWSSwgVmVuZG9yLCBHYW11 dCBvciBTUEQpXG4iCisiICAtaCwgLS1oZWxwXG4iCisiICAgICAgICAgIHByaW50cyB0aGlzIG1l c3NhZ2VcbiIKKyJcbiIKKyJFeGFtcGxlczpcbiIKKyJcbiIKKyIgIER1bXAgaW5mb3JtYXRpb246 XG4iCisiICAgICAgICAgIGludGVsX2luZm9mcmFtZXNcbiIKKyJcbiIKKyIgIERpc2FibGUgb3Zl cnNjYW4gYW5kIHNldCBJVEMgb24gdHJhbnNjb2RlciBCOlxuIgorIiAgICAgICAgICBpbnRlbF9p bmZvZnJhbWVzIC10IEIgLWYgQVZJIC1jICdTIDIgSVRDIDEnXG4iCisiXG4iCisiICBNYW55IGFj dGlvbnMgb24gdGhlIHNhbWUgY29tbWFuZDpcbiIKKyIgIC0gZW5hYmxlIG92ZXJzY2FuIG9uIHRy YW5zY29kZXIgQVxuIgorIiAgLSBlbmFibGUgb3ZlcnNjYW4gYW5kIGNoYW5nZSBkZXNjcmlwdGlv biBvbiB0cmFuc2NvZGVyIEJcbiIKKyIgIC0gZGlzYWJsZSBhbGwgaW5mb2ZyYW1lcyBvbiB0cmFu c2NvZGVyIENcbiIKKyIgIC0gZHVtcCB0aGUgcmVzdWx0aW5nIHN0YXRlOlxuIgorIiAgICAgICAg ICBpbnRlbF9pbmZvZnJhbWVzIC10IEEgLWYgQVZJIC1jICdTIDEnIFxcXG4iCisiICAgICAgICAg ICAgICAgICAgICAgICAgICAgLXQgQiAtZiBBVkkgLWMgJ1MgMicgXFxcbiIKKyIgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC1mIFNQRCAtYyAnZGVzY3JpcHRpb24gTGludXgnIFxcXG4i CisiICAgICAgICAgICAgICAgICAgICAgICAgICAgLXQgQyAtLWRpc2FibGUtaW5mb2ZyYW1lcyBc XFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIC1kXG4iCisiXG4iCisiICBFdmVuIG1v cmU6XG4iCisiICAtIHByaW50IHRoZSBoZWxwIG1lc3NhZ2VcbiIKKyIgIC0gY29tcGxldGVseSBk aXNhYmxlIGFsbCBpbmZvZnJhbWVzIG9uIGFsbCB0cmFuc2NvZGVyc1xuIgorIiAgLSBkdW1wIHRo ZSBzdGF0ZSIKKyIgIC0gZW5hYmxlIHNlbmRpbmcgaW5mb2ZyYW1lcyBvbiB0cmFuc2NvZGVyIEIs IGJ1dCBkaXNhYmxlIGFsbCBpbmZvZnJhbWVzXG4iCisiICAtIGVuYWJsZSBBVkkgaW5mb2ZyYW1l cyB0cmFuc2NvZGVyIEIsIHVzZSB1bmRlcnNjYW4gYW5kIGRlY2xhcmUgSVRDXG4iCisiICAtIGFs c28gZW5hYmxlIFNQRCBpbmZvZnJhbWVzIG9uIHRoZSBzYW1lIHRyYW5zY29kZXIsIGNoYW5nZSBm cmVxdWVuY3kgdG9cbiIKKyIgICAgZXZlcnkgdnN5bmMgYW5kIGNoYW5nZSB2ZW5kb3IsIGRlc2Ny aXB0aW9uIGFuZCBzb3VyY2VcbiIKKyIgIC0gZHVtcCB0aGUgc3RhdGUgYWdhaW5cbiIKKyIgICAg ICAgICAgaW50ZWxfaW5mb2ZyYW1lcyAtaCBcXFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAg ICAgIC10IEEgLXggLXQgQiAteCAtdCBDIC14IFxcXG4iCisiICAgICAgICAgICAgICAgICAgICAg ICAgICAgLWQgXFxcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAtdCBBIC1YIC1mIEFW SSAtbiAtZiBWZW5kb3IgLW4gXFxcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAtZiBH YW11dCAtbiAtZiBTUEQgLW4gXFxcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAtZiBB VkkgLU4gLWMgJ1MgMiBJVEMgMSdcXFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIC1m IFNQRCAtcSBldmVyeXZzeW5jIFxcXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgLWMg J3ZlbmRvciBtZSBkZXNjcmlwdGlvbiBtaW5lIHNvdXJjZSAweDA5JyBcXFxuIgorIiAgICAgICAg ICAgICAgICAgICAgICAgICAgIC1kXG4iCisiXG4iCisiSW5mb2ZyYW1lIGZpZWxkcyB1c2VkIGJ5 IHRoZSAtLWNoYW5nZS1maWVsZHMgb3B0aW9uOlxuIgorIiAgLSBBVkkgaW5mb2ZyYW1lIGZpZWxk czpcbiIKKyIgICAgICAgICAgUyBCIEEgWSBSIE0gQyBTQyBRIEVDIElUQyBWSUMgUFIgdG9wIGJv dHRvbSBsZWZ0IHJpZ2h0XG4iCisiICAtIFNQRCBpbmZvZnJhbWUgZmllbGRzOlxuIgorIiAgICAg ICAgICB2ZW5kb3IgZGVzY3JpcHRpb24gc291cmNlXG4iCisiICAtIE90aGVyIGluZm9mcmFtZSBm aWVsZHMgYXJlIG5vdCBpbXBsZW1lbnRlZCB5ZXQuXG4iKTsKK30KKworI2RlZmluZSBDSEVDS19U UkFOU0NPREVSKHRyYW5zY29kZXIpICAgICAgICAgICAgICAgICAgXAorCWlmICh0cmFuc2NvZGVy ID09IFRSQU5TQ19JTlZBTElEKSB7ICAgICAgICAgICBcCisJCXByaW50ZigiVHJhbnNjb2RlciBu b3Qgc2VsZWN0ZWQuXG4iKTsgXAorCQlyZXQgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKwkJZ290byBvdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJfQorCisj ZGVmaW5lIENIRUNLX0RJUChkaXApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJ aWYgKGRpcCA9PSBESVBfSU5WQUxJRCkgeyAgICAgICAgICAgICAgICAgICAgIFwKKwkJcHJpbnRm KCJJbmZvZnJhbWUgbm90IHNlbGVjdGVkLlxuIik7ICBcCisJCXJldCA9IDE7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorCQlnb3RvIG91dDsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKwl9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaW50IG9w dDsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgcGNpX2RldmljZSAqcGNpX2RldjsKKwlUcmFuc2Nv ZGVyIHRyYW5zY29kZXIgPSBUUkFOU0NfSU5WQUxJRDsKKwlEaXBUeXBlIGRpcCA9IERJUF9JTlZB TElEOworCVJlZ2lzdGVyIGhkbWlfcG9ydDsKKworCWNoYXIgc2hvcnRfb3B0c1tdID0gImRjOms6 cTpuTnhYcFB0OmY6aCI7CisJc3RydWN0IG9wdGlvbiBsb25nX29wdHNbXSA9IHsKKwkJeyAiZHVt cCIsICAgICAgICAgICAgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICdkJyB9LAorCQl7ICJj aGFuZ2UtZmllbGRzIiwgICAgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ2MnIH0sCisJCXsg ImNoYW5nZS1jaGVja3N1bSIsICAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnaycgfSwKKwkJ eyAiY2hhbmdlLWZyZXF1ZW5jeSIsICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdxJyB9LAor CQl7ICJkaXNhYmxlIiwgICAgICAgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ24nIH0s CisJCXsgImVuYWJsZSIsICAgICAgICAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAnTicg fSwKKwkJeyAiZGlzYWJsZS1pbmZvZnJhbWVzIiwgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICd4 JyB9LAorCQl7ICJlbmFibGUtaW5mb2ZyYW1lcyIsICBub19hcmd1bWVudCwgICAgICAgTlVMTCwg J1gnIH0sCisJCXsgImRpc2FibGUtaGRtaS1wb3J0IiwgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxM LCAncCcgfSwKKwkJeyAiZW5hYmxlLWhkbWktcG9ydCIsICAgbm9fYXJndW1lbnQsICAgICAgIE5V TEwsICdQJyB9LAorCQl7ICJ0cmFuc2NvZGVyIiAsICAgICAgICByZXF1aXJlZF9hcmd1bWVudCwg TlVMTCwgJ3QnIH0sCisJCXsgImluZm9mcmFtZSIsICAgICAgICAgIHJlcXVpcmVkX2FyZ3VtZW50 LCBOVUxMLCAnZicgfSwKKwkJeyAiaGVscCIsICAgICAgICAgICAgICAgbm9fYXJndW1lbnQsICAg ICAgIE5VTEwsICdoJyB9LAorCX07CisKKwlwcmludGYoIldBUk5JTkc6IFRoaXMgaXMganVzdCBh IGRlYnVnZ2luZyB0b29sISBEb24ndCBleHBlY3QgaXQgdG8gd29yayIKKwkgICAgICAgIiBwZXJm ZWN0bHk6IHRoZSBLZXJuZWwgbWlnaHQgdW5kbyBvdXIgY2hhbmdlcy5cbiIpOworCisJcGNpX2Rl diA9IGludGVsX2dldF9wY2lfZGV2aWNlKCk7CisJaW50ZWxfcmVnaXN0ZXJfYWNjZXNzX2luaXQo cGNpX2RldiwgMCk7CisJaW50ZWxfY2hlY2tfcGNoKCk7CisKKwlpZiAoIUhBU19QQ0hfU1BMSVQo cGNpX2Rldi0+ZGV2aWNlX2lkKSkgeworCQlwcmludGYoIlRoaXMgcHJvZ3JhbSBzdGlsbCBvbmx5 IHN1cHBvcnRzIElMSyBvciBuZXdlci5cbiIpOworCQlyZXQgPSAxOworCQlnb3RvIG91dDsKKwl9 CisKKwl3aGlsZSAoMSkgeworCQlvcHQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCBzaG9ydF9v cHRzLCBsb25nX29wdHMsIE5VTEwpOworCQlpZiAob3B0ID09IC0xKQorCQkJYnJlYWs7CisKKwkJ c3dpdGNoIChvcHQpIHsKKwkJY2FzZSAnZCc6CisJCQlkdW1wX2FsbF9pbmZvKCk7CisJCQlicmVh azsKKwkJY2FzZSAnYyc6CisJCQlpZiAodHJhbnNjb2RlciA9PSBUUkFOU0NfSU5WQUxJRCkgewor CQkJCXByaW50ZigiVHJhbnNjb2RlciBub3Qgc2VsZWN0ZWQuXG4iKTsKKwkJCQlyZXQgPSAxOwor CQkJCWdvdG8gb3V0OworCQkJfQorCQkJc3dpdGNoIChkaXApIHsKKwkJCWNhc2UgRElQX0FWSToK KwkJCQljaGFuZ2VfYXZpX2luZm9mcmFtZSh0cmFuc2NvZGVyLCBvcHRhcmcpOworCQkJCWJyZWFr OworCQkJY2FzZSBESVBfVkVORE9SOgorCQkJY2FzZSBESVBfR0FNVVQ6CisJCQkJcHJpbnRmKCJP cHRpb24gbm90IGltcGxlbWVudGVkIHlldC5cbiIpOworCQkJCXJldCA9IDE7CisJCQkJZ290byBv dXQ7CisJCQljYXNlIERJUF9TUEQ6CisJCQkJY2hhbmdlX3NwZF9pbmZvZnJhbWUodHJhbnNjb2Rl ciwgb3B0YXJnKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRElQX0lOVkFMSUQ6CisJCQkJcHJpbnRm KCJJbmZvZnJhbWUgbm90IHNlbGVjdGVkLlxuIik7CisJCQkJcmV0ID0gMTsKKwkJCQlnb3RvIG91 dDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdrJzoKKwkJCUNIRUNLX1RSQU5TQ09ERVIodHJh bnNjb2Rlcik7CisJCQlDSEVDS19ESVAoZGlwKTsKKwkJCWNoYW5nZV9pbmZvZnJhbWVfY2hlY2tz dW0odHJhbnNjb2RlciwgZGlwLCBhdG9pKG9wdGFyZykpOworCQkJYnJlYWs7CisJCWNhc2UgJ3En OgorCQkJQ0hFQ0tfVFJBTlNDT0RFUih0cmFuc2NvZGVyKTsKKwkJCUNIRUNLX0RJUChkaXApOwor CQkJaWYgKCFzdHJjbXAob3B0YXJnLCAib25jZSIpKQorCQkJCWNoYW5nZV9pbmZvZnJhbWVfZnJl cXVlbmN5KHRyYW5zY29kZXIsIGRpcCwKKwkJCQkJCURJUF9GUkVRX09OQ0UpOworCQkJZWxzZSBp ZiAoIXN0cmNtcChvcHRhcmcsICJldmVyeXZzeW5jIikpCisJCQkJY2hhbmdlX2luZm9mcmFtZV9m cmVxdWVuY3kodHJhbnNjb2RlciwgZGlwLAorCQkJCQkJRElQX0ZSRVFfRVZFUllfVlNZTkMpOwor CQkJZWxzZSBpZiAoIXN0cmNtcChvcHRhcmcsICJldmVyeW90aGVydnN5bmMiKSkKKwkJCQljaGFu Z2VfaW5mb2ZyYW1lX2ZyZXF1ZW5jeSh0cmFuc2NvZGVyLCBkaXAsCisJCQkJCQlESVBfRlJFUV9F VkVSWV9PVEhFUl9WU1lOQyk7CisJCQllbHNlIHsKKwkJCQlwcmludGYoIkludmFsaWQgZnJlcXVl bmN5LlxuIik7CisJCQkJcmV0ID0gMTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCWJyZWFrOwor CQljYXNlICduJzoKKwkJCUNIRUNLX1RSQU5TQ09ERVIodHJhbnNjb2Rlcik7CisJCQlDSEVDS19E SVAoZGlwKTsKKwkJCWRpc2FibGVfaW5mb2ZyYW1lKHRyYW5zY29kZXIsIGRpcCk7CisJCQlicmVh azsKKwkJY2FzZSAnTic6CisJCQlDSEVDS19UUkFOU0NPREVSKHRyYW5zY29kZXIpOworCQkJQ0hF Q0tfRElQKGRpcCk7CisJCQllbmFibGVfaW5mb2ZyYW1lKHRyYW5zY29kZXIsIGRpcCk7CisJCQli cmVhazsKKwkJY2FzZSAneCc6CisJCQlDSEVDS19UUkFOU0NPREVSKHRyYW5zY29kZXIpOworCQkJ ZGlzYWJsZV9kaXAodHJhbnNjb2Rlcik7CisJCQlicmVhazsKKwkJY2FzZSAnWCc6CisJCQlDSEVD S19UUkFOU0NPREVSKHRyYW5zY29kZXIpOworCQkJZW5hYmxlX2RpcCh0cmFuc2NvZGVyKTsKKwkJ CWJyZWFrOworCQljYXNlICdwJzoKKwkJY2FzZSAnUCc6CisJCQlpZiAoIXN0cmNtcChvcHRhcmcs ICJCIikpCisJCQkJaGRtaV9wb3J0ID0gUkVHX0hETUlCOworCQkJZWxzZSBpZiAoIXN0cmNtcChv cHRhcmcsICJDIikpCisJCQkJaGRtaV9wb3J0ID0gUkVHX0hETUlDOworCQkJZWxzZSBpZiAoIXN0 cmNtcChvcHRhcmcsICJEIikpCisJCQkJaGRtaV9wb3J0ID0gUkVHX0hETUlEOworCQkJZWxzZSB7 CisJCQkJcHJpbnRmKCJJbnZhbGlkIEhETUkgcG9ydC5cbiIpOworCQkJCXJldCA9IDE7CisJCQkJ Z290byBvdXQ7CisJCQl9CisJCQlpZiAob3B0ID09ICdwJykKKwkJCQlkaXNhYmxlX2hkbWlfcG9y dChoZG1pX3BvcnQpOworCQkJZWxzZQorCQkJCWVuYWJsZV9oZG1pX3BvcnQoaGRtaV9wb3J0KTsK KwkJCWJyZWFrOworCQljYXNlICd0JzoKKwkJCWlmICghc3RyY21wKG9wdGFyZywgIkEiKSkKKwkJ CQl0cmFuc2NvZGVyID0gVFJBTlNDX0E7CisJCQllbHNlIGlmICghc3RyY21wKG9wdGFyZywgIkIi KSkKKwkJCQl0cmFuc2NvZGVyID0gVFJBTlNDX0I7CisJCQllbHNlIGlmIChwY2ggPj0gUENIX0NQ VCAmJiAhc3RyY21wKG9wdGFyZywgIkMiKSkgeworCQkJCXRyYW5zY29kZXIgPSBUUkFOU0NfQzsK KwkJCX0gZWxzZSB7CisJCQkJcHJpbnRmKCJJbnZhbGlkIHRyYW5zY29kZXIuXG4iKTsKKwkJCQly ZXQgPSAxOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ2YnOgorCQkJ aWYgKCFzdHJjbXAob3B0YXJnLCAiQVZJIikpCisJCQkJZGlwID0gRElQX0FWSTsKKwkJCWVsc2Ug aWYgKCFzdHJjbXAob3B0YXJnLCAiVmVuZG9yIikpCisJCQkJZGlwID0gRElQX1ZFTkRPUjsKKwkJ CWVsc2UgaWYgKCFzdHJjbXAob3B0YXJnLCAiR2FtdXQiKSkKKwkJCQlkaXAgPSBESVBfR0FNVVQ7 CisJCQllbHNlIGlmICghc3RyY21wKG9wdGFyZywgIlNQRCIpKQorCQkJCWRpcCA9IERJUF9TUEQ7 CisJCQllbHNlIHsKKwkJCQlwcmludGYoIkludmFsaWQgaW5mb2ZyYW1lLlxuIik7CisJCQkJcmV0 ID0gMTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdoJzoKKwkJCXBy aW50X3VzYWdlKCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50X3VzYWdlKCk7CisJ CQlyZXQgPSAxOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKK291dDoKKwlpbnRlbF9yZWdpc3Rl cl9hY2Nlc3NfZmluaSgpOworCXJldHVybiByZXQ7Cit9Ci0tIAoxLjcuOS41CgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBs aXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=