From mboxrd@z Thu Jan 1 00:00:00 1970 From: Robert Bragg Subject: [PATCH igt v3 01/11] igt/perf: add i915 perf stream tests for Haswell Date: Wed, 9 Nov 2016 16:15:52 +0000 Message-ID: <20161109161602.2402-2-robert@sixbynine.org> References: <20161109161602.2402-1-robert@sixbynine.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x241.google.com (mail-wm0-x241.google.com [IPv6:2a00:1450:400c:c09::241]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0A37189A74 for ; Wed, 9 Nov 2016 16:16:23 +0000 (UTC) Received: by mail-wm0-x241.google.com with SMTP id c17so30149296wmc.3 for ; Wed, 09 Nov 2016 08:16:22 -0800 (PST) In-Reply-To: <20161109161602.2402-1-robert@sixbynine.org> 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 List-Id: intel-gfx@lists.freedesktop.org U2lnbmVkLW9mZi1ieTogUm9iZXJ0IEJyYWdnIDxyb2JlcnRAc2l4YnluaW5lLm9yZz4KLS0tCiB0 ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIHwgICAgMSArCiB0ZXN0cy9wZXJmLmMgICAgICAgICAgIHwg MjIyMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDIg ZmlsZXMgY2hhbmdlZCwgMjIyMSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVz dHMvcGVyZi5jCgpkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01h a2VmaWxlLnNvdXJjZXMKaW5kZXggNmQwODFjMy4uN2M2ZGUyZiAxMDA2NDQKLS0tIGEvdGVzdHMv TWFrZWZpbGUuc291cmNlcworKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCkBAIC0yMTEsNiAr MjExLDcgQEAgVEVTVFNfcHJvZ3MgPSBcCiAJa21zX3B3cml0ZV9jcmMgXAogCWttc19zaW5rX2Ny Y19iYXNpYyBcCiAJcHJpbWVfdWRsIFwKKwlwZXJmIFwKIAkkKE5VTEwpCiAKICMgSU1QT1JUQU5U OiBUaGUgWlpfIHRlc3RzIG5lZWQgdG8gYmUgcnVuIGxhc3QhCmRpZmYgLS1naXQgYS90ZXN0cy9w ZXJmLmMgYi90ZXN0cy9wZXJmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u NDc2MmUzNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3BlcmYuYwpAQCAtMCwwICsxLDIyMjAg QEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBl cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u IG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9j dW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29m dHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgor ICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3Ry aWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJl LCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5p c2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgor ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ug KGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBh bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisg KgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkg T0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJ TUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5U IFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9S IEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00s IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1Ig T1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2luY2x1ZGUg PHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5j bHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2luY2x1ZGUgPGVycm5vLmg+ CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUg PHN5cy90aW1lcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGRpcmVudC5o PgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxwb2xsLmg+CisjaW5jbHVkZSA8bWF0aC5o PgorCisjaW5jbHVkZSAiaWd0LmgiCisjaW5jbHVkZSAiZHJtLmgiCisKK0lHVF9URVNUX0RFU0NS SVBUSU9OKCJUZXN0IHRoZSBpOTE1IHBlcmYgbWV0cmljcyBzdHJlYW1pbmcgaW50ZXJmYWNlIik7 CisKKyNkZWZpbmUgR0VONl9NSV9SRVBPUlRfUEVSRl9DT1VOVCAoKDB4MjggPDwgMjMpIHwgKDMg LSAyKSkKKworI2RlZmluZSBHRlhfT1BfUElQRV9DT05UUk9MICAgICAoKDMgPDwgMjkpIHwgKDMg PDwgMjcpIHwgKDIgPDwgMjQpKQorI2RlZmluZSBQSVBFX0NPTlRST0xfQ1NfU1RBTEwgICAgICAg ICAgICgxIDw8IDIwKQorI2RlZmluZSBQSVBFX0NPTlRST0xfR0xPQkFMX1NOQVBTSE9UX0NPVU5U X1JFU0VUICAgICAgICAoMSA8PCAxOSkKKyNkZWZpbmUgUElQRV9DT05UUk9MX1RMQl9JTlZBTElE QVRFICAgICAoMSA8PCAxOCkKKyNkZWZpbmUgUElQRV9DT05UUk9MX1NZTkNfR0ZEVCAgICAgICAg ICAoMSA8PCAxNykKKyNkZWZpbmUgUElQRV9DT05UUk9MX01FRElBX1NUQVRFX0NMRUFSICAoMSA8 PCAxNikKKyNkZWZpbmUgUElQRV9DT05UUk9MX05PX1dSSVRFICAgICAgICAgICAoMCA8PCAxNCkK KyNkZWZpbmUgUElQRV9DT05UUk9MX1dSSVRFX0lNTUVESUFURSAgICAoMSA8PCAxNCkKKyNkZWZp bmUgUElQRV9DT05UUk9MX1dSSVRFX0RFUFRIX0NPVU5UICAoMiA8PCAxNCkKKyNkZWZpbmUgUElQ RV9DT05UUk9MX1dSSVRFX1RJTUVTVEFNUCAgICAoMyA8PCAxNCkKKyNkZWZpbmUgUElQRV9DT05U Uk9MX0RFUFRIX1NUQUxMICAgICAgICAoMSA8PCAxMykKKyNkZWZpbmUgUElQRV9DT05UUk9MX1JF TkRFUl9UQVJHRVRfRkxVU0ggKDEgPDwgMTIpCisjZGVmaW5lIFBJUEVfQ09OVFJPTF9JTlNUUlVD VElPTl9JTlZBTElEQVRFICgxIDw8IDExKQorI2RlZmluZSBQSVBFX0NPTlRST0xfVEVYVFVSRV9D QUNIRV9JTlZBTElEQVRFICAgKDEgPDwgMTApIC8qIEdNNDUrIG9ubHkgKi8KKyNkZWZpbmUgUElQ RV9DT05UUk9MX0lTUF9ESVMgICAgICAgICAgICAoMSA8PCA5KQorI2RlZmluZSBQSVBFX0NPTlRS T0xfSU5URVJSVVBUX0VOQUJMRSAgICgxIDw8IDgpCisjZGVmaW5lIFBJUEVfQ09OVFJPTF9GTFVT SF9FTkFCTEUgICAgICAgKDEgPDwgNykgLyogR2VuNysgb25seSAqLworLyogR1QgKi8KKyNkZWZp bmUgUElQRV9DT05UUk9MX0RBVEFfQ0FDSEVfSU5WQUxJREFURSAgICAgICgxIDw8IDUpCisjZGVm aW5lIFBJUEVfQ09OVFJPTF9WRl9DQUNIRV9JTlZBTElEQVRFICAgICAgICAoMSA8PCA0KQorI2Rl ZmluZSBQSVBFX0NPTlRST0xfQ09OU1RfQ0FDSEVfSU5WQUxJREFURSAgICAgKDEgPDwgMykKKyNk ZWZpbmUgUElQRV9DT05UUk9MX1NUQVRFX0NBQ0hFX0lOVkFMSURBVEUgICAgICgxIDw8IDIpCisj ZGVmaW5lIFBJUEVfQ09OVFJPTF9TVEFMTF9BVF9TQ09SRUJPQVJEICAgICAgICAoMSA8PCAxKQor I2RlZmluZSBQSVBFX0NPTlRST0xfREVQVEhfQ0FDSEVfRkxVU0ggICAgICAgICAgKDEgPDwgMCkK KyNkZWZpbmUgUElQRV9DT05UUk9MX1BQR1RUX1dSSVRFICAgICAgICAoMCA8PCAyKQorI2RlZmlu ZSBQSVBFX0NPTlRST0xfR0xPQkFMX0dUVF9XUklURSAgICgxIDw8IDIpCisKKyNkZWZpbmUgTlNF Q19QRVJfU0VDIDEwMDAwMDAwMDB1bGwKKworc3RhdGljIHN0cnVjdCB7CisgICAgICAgIGNvbnN0 IGNoYXIgKm5hbWU7CisgICAgICAgIHVpbnQ2NF90IGlkOworICAgICAgICBzaXplX3Qgc2l6ZTsK KyAgICAgICAgaW50IGFfb2ZmOyAvKiBieXRlcyAqLworICAgICAgICBpbnQgbl9hOworICAgICAg ICBpbnQgZmlyc3RfYTsKKyAgICAgICAgaW50IGJfb2ZmOworICAgICAgICBpbnQgbl9iOworICAg ICAgICBpbnQgY19vZmY7CisgICAgICAgIGludCBuX2M7Cit9IGhzd19vYV9mb3JtYXRzW10gPSB7 CisgICAgICAgIHsgIkExMyIsIEk5MTVfT0FfRk9STUFUX0ExMywgLnNpemUgPSA2NCwKKyAgICAg ICAgICAgICAgICAuYV9vZmYgPSAxMiwgLm5fYSA9IDEzIH0sCisgICAgICAgIHsgIkEyOSIsIEk5 MTVfT0FfRk9STUFUX0EyOSwgLnNpemUgPSAxMjgsCisgICAgICAgICAgICAgICAgLmFfb2ZmID0g MTIsIC5uX2EgPSAyOSB9LAorICAgICAgICB7ICJBMTNfQjhfQzgiLCBJOTE1X09BX0ZPUk1BVF9B MTNfQjhfQzgsIC5zaXplID0gMTI4LAorICAgICAgICAgICAgICAgIC5hX29mZiA9IDEyLCAubl9h ID0gMTMsCisgICAgICAgICAgICAgICAgLmJfb2ZmID0gNjQsIC5uX2IgPSA4LAorICAgICAgICAg ICAgICAgIC5jX29mZiA9IDk2LCAubl9jID0gOCB9LAorICAgICAgICB7ICJBNDVfQjhfQzgiLCBJ OTE1X09BX0ZPUk1BVF9BNDVfQjhfQzgsIC5zaXplID0gMjU2LAorICAgICAgICAgICAgICAgIC5h X29mZiA9IDEyLCAgLm5fYSA9IDQ1LAorICAgICAgICAgICAgICAgIC5iX29mZiA9IDE5MiwgLm5f YiA9IDgsCisgICAgICAgICAgICAgICAgLmNfb2ZmID0gMjI0LCAubl9jID0gOCB9LAorICAgICAg ICB7ICJCNF9DOCIsIEk5MTVfT0FfRk9STUFUX0I0X0M4LCAuc2l6ZSA9IDY0LAorICAgICAgICAg ICAgICAgIC5iX29mZiA9IDE2LCAubl9iID0gNCwKKyAgICAgICAgICAgICAgICAuY19vZmYgPSAz MiwgLm5fYyA9IDggfSwKKyAgICAgICAgeyAiQjRfQzhfQTE2IiwgSTkxNV9PQV9GT1JNQVRfQjRf QzhfQTE2LCAuc2l6ZSA9IDEyOCwKKyAgICAgICAgICAgICAgICAuYl9vZmYgPSAxNiwgLm5fYiA9 IDQsCisgICAgICAgICAgICAgICAgLmNfb2ZmID0gMzIsIC5uX2MgPSA4LAorICAgICAgICAgICAg ICAgIC5hX29mZiA9IDYwLCAubl9hID0gMTYsIC5maXJzdF9hID0gMjkgfSwKKyAgICAgICAgeyAi QzRfQjgiLCBJOTE1X09BX0ZPUk1BVF9DNF9COCwgLnNpemUgPSA2NCwKKyAgICAgICAgICAgICAg ICAuY19vZmYgPSAxNiwgLm5fYyA9IDQsCisgICAgICAgICAgICAgICAgLmJfb2ZmID0gMjgsIC5u X2IgPSA4IH0sCit9OworCitzdGF0aWMgYm9vbCBoc3dfdW5kZWZpbmVkX2FfY291bnRlcnNbNDVd ID0geworICAgICAgICBbNF0gPSB0cnVlLAorICAgICAgICBbNl0gPSB0cnVlLAorICAgICAgICBb OV0gPSB0cnVlLAorICAgICAgICBbMTFdID0gdHJ1ZSwKKyAgICAgICAgWzE0XSA9IHRydWUsCisg ICAgICAgIFsxNl0gPSB0cnVlLAorICAgICAgICBbMTldID0gdHJ1ZSwKKyAgICAgICAgWzIxXSA9 IHRydWUsCisgICAgICAgIFsyNF0gPSB0cnVlLAorICAgICAgICBbMjZdID0gdHJ1ZSwKKyAgICAg ICAgWzI5XSA9IHRydWUsCisgICAgICAgIFszMV0gPSB0cnVlLAorICAgICAgICBbMzRdID0gdHJ1 ZSwKKyAgICAgICAgWzQzXSA9IHRydWUsCisgICAgICAgIFs0NF0gPSB0cnVlLAorfTsKKworc3Rh dGljIGludCBkcm1fZmQ7CitzdGF0aWMgdWludDMyX3QgZGV2aWQ7CitzdGF0aWMgaW50IGRldmlj ZTsKKworc3RhdGljIHVpbnQ2NF90IGhzd19yZW5kZXJfYmFzaWNfaWQgPSBVSU5UNjRfTUFYOwor c3RhdGljIHVpbnQ2NF90IGd0X21pbl9mcmVxX21oel9zYXZlZCA9IDA7CitzdGF0aWMgdWludDY0 X3QgZ3RfbWF4X2ZyZXFfbWh6X3NhdmVkID0gMDsKK3N0YXRpYyB1aW50NjRfdCBndF9taW5fZnJl cV9taHogPSAwOworc3RhdGljIHVpbnQ2NF90IGd0X21heF9mcmVxX21oeiA9IDA7CisKK3N0YXRp YyB1aW50NjRfdCB0aW1lc3RhbXBfZnJlcXVlbmN5ID0gMTI1MDAwMDA7CisKK3N0YXRpYyBpZ3Rf cmVuZGVyX2NvcHlmdW5jX3QgcmVuZGVyX2NvcHkgPSBOVUxMOworCitzdGF0aWMgaW50CitfX3Bl cmZfb3BlbihpbnQgZmQsIHN0cnVjdCBkcm1faTkxNV9wZXJmX29wZW5fcGFyYW0gKnBhcmFtKQor eworICAgICAgICBpbnQgcmV0ID0gaWd0X2lvY3RsKGZkLCBEUk1fSU9DVExfSTkxNV9QRVJGX09Q RU4sIHBhcmFtKTsKKworICAgICAgICBpZ3RfYXNzZXJ0KHJldCA+PSAwKTsKKyAgICAgICAgZXJy bm8gPSAwOworCisgICAgICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2xvb2t1cF9m b3JtYXQoaW50IGk5MTVfcGVyZl9mbXRfaWQpCit7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgQVJSQVlfU0laRShoc3dfb2FfZm9ybWF0cyk7IGkrKykKKyAgICAgICAgICAgICAgICBpZiAo aHN3X29hX2Zvcm1hdHNbaV0uaWQgPT0gaTkxNV9wZXJmX2ZtdF9pZCkKKyAgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybiBpOworCisgICAgICAgIGlndF9hc3NlcnQoISJyZWFjaGVkIik7Cit9 CisKK3N0YXRpYyBib29sCit0cnlfcmVhZF91NjRfZmlsZShjb25zdCBjaGFyICpmaWxlLCB1aW50 NjRfdCAqdmFsKQoreworICAgICAgICBjaGFyIGJ1ZlszMl07CisgICAgICAgIGludCBmZCwgbjsK KworICAgICAgICBmZCA9IG9wZW4oZmlsZSwgT19SRE9OTFkpOworICAgICAgICBpZiAoZmQgPCAw KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB3aGlsZSAoKG4gPSBy ZWFkKGZkLCBidWYsIHNpemVvZihidWYpIC0gMSkpIDwgMCAmJiBlcnJubyA9PSBFSU5UUikKKyAg ICAgICAgICAgICAgICA7CisgICAgICAgIGlndF9hc3NlcnQobiA+PSAwKTsKKworICAgICAgICBj bG9zZShmZCk7CisKKyAgICAgICAgYnVmW25dID0gJ1wwJzsKKyAgICAgICAgKnZhbCA9IHN0cnRv dWxsKGJ1ZiwgTlVMTCwgMCk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB1 aW50NjRfdAorcmVhZF91NjRfZmlsZShjb25zdCBjaGFyICpmaWxlKQoreworICAgICAgICB1aW50 NjRfdCB2YWw7CisKKyAgICAgICAgaWd0X2Fzc2VydF9lcSh0cnlfcmVhZF91NjRfZmlsZShmaWxl LCAmdmFsKSwgdHJ1ZSk7CisKKyAgICAgICAgcmV0dXJuIHZhbDsKK30KKworc3RhdGljIHZvaWQK K3dyaXRlX3U2NF9maWxlKGNvbnN0IGNoYXIgKmZpbGUsIHVpbnQ2NF90IHZhbCkKK3sKKyAgICAg ICAgY2hhciBidWZbMzJdOworICAgICAgICBpbnQgZmQsIGxlbiwgcmV0OworCisgICAgICAgIGZk ID0gb3BlbihmaWxlLCBPX1dST05MWSk7CisgICAgICAgIGlndF9hc3NlcnQoZmQgPj0gMCk7CisK KyAgICAgICAgbGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiUiUFJJdTY0LCB2YWwp OworICAgICAgICBpZ3RfYXNzZXJ0KGxlbiA+IDApOworCisgICAgICAgIHdoaWxlICgocmV0ID0g d3JpdGUoZmQsIGJ1ZiwgbGVuKSkgPCAwICYmIGVycm5vID09IEVJTlRSKQorICAgICAgICAgICAg ICAgIDsKKyAgICAgICAgaWd0X2Fzc2VydF9lcShyZXQsIGxlbik7CisKKyAgICAgICAgY2xvc2Uo ZmQpOworfQorCitzdGF0aWMgdWludDY0X3QKK3N5c2ZzX3JlYWQoY29uc3QgY2hhciAqZmlsZSkK K3sKKyAgICAgICAgY2hhciBidWZbNTEyXTsKKworICAgICAgICBzbnByaW50ZihidWYsIHNpemVv ZihidWYpLCAiL3N5cy9jbGFzcy9kcm0vY2FyZCVkLyVzIiwgZGV2aWNlLCBmaWxlKTsKKworICAg ICAgICByZXR1cm4gcmVhZF91NjRfZmlsZShidWYpOworfQorCitzdGF0aWMgdm9pZAorc3lzZnNf d3JpdGUoY29uc3QgY2hhciAqZmlsZSwgdWludDY0X3QgdmFsKQoreworICAgICAgICBjaGFyIGJ1 Zls1MTJdOworCisgICAgICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIvc3lzL2NsYXNz L2RybS9jYXJkJWQvJXMiLCBkZXZpY2UsIGZpbGUpOworCisgICAgICAgIHdyaXRlX3U2NF9maWxl KGJ1ZiwgdmFsKTsKK30KKworc3RhdGljIGNoYXIgKgorcmVhZF9kZWJ1Z2ZzX3JlY29yZChjb25z dCBjaGFyICpmaWxlLCBjb25zdCBjaGFyICprZXkpCit7CisgICAgICAgIEZJTEUgKmZwOworICAg ICAgICBjaGFyICpsaW5lID0gTlVMTDsKKyAgICAgICAgc2l6ZV90IGxpbmVfYnVmX3NpemUgPSAw OworICAgICAgICBpbnQgbGVuID0gMDsKKyAgICAgICAgaW50IGtleV9sZW4gPSBzdHJsZW4oa2V5 KTsKKyAgICAgICAgY2hhciAqdmFsdWUgPSBOVUxMOworCisgICAgICAgIGZwID0gaWd0X2RlYnVn ZnNfZm9wZW4oZmlsZSwgInIiKTsKKyAgICAgICAgaWd0X3JlcXVpcmUoZnApOworCisgICAgICAg IHdoaWxlICgobGVuID0gZ2V0bGluZSgmbGluZSwgJmxpbmVfYnVmX3NpemUsIGZwKSkgPiAwKSB7 CisKKyAgICAgICAgICAgICAgICBpZiAobGluZVtsZW4gLSAxXSA9PSAnXG4nKQorICAgICAgICAg ICAgICAgICAgICAgICAgbGluZVtsZW4gLSAxXSA9ICdcMCc7CisKKyAgICAgICAgICAgICAgICBp ZiAoc3RybmNtcChrZXksIGxpbmUsIGtleV9sZW4pID09IDAgJiYKKyAgICAgICAgICAgICAgICAg ICAgbGluZVtrZXlfbGVuXSA9PSAnOicgJiYKKyAgICAgICAgICAgICAgICAgICAgbGluZVtrZXlf bGVuICsgMV0gPT0gJyAnKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgIHZhbHVlID0gc3RyZHVwKGxpbmUgKyBrZXlfbGVuICsgMik7CisgICAgICAgICAgICAgICAg ICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKK2RvbmU6 CisgICAgICAgIGZyZWUobGluZSk7CisgICAgICAgIGlmIChmcCkKKyAgICAgICAgICAgICAgICBm Y2xvc2UoZnApOworICAgICAgICByZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyB1aW50NjRfdAor cmVhZF9kZWJ1Z2ZzX3U2NF9yZWNvcmQoY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqa2V5 KQoreworICAgICAgICBjaGFyICpzdHJfdmFsID0gcmVhZF9kZWJ1Z2ZzX3JlY29yZChmaWxlLCBr ZXkpOworICAgICAgICB1aW50NjRfdCB2YWw7CisKKyAgICAgICAgaWd0X3JlcXVpcmUoc3RyX3Zh bCk7CisKKyAgICAgICAgdmFsID0gc3RydG91bGwoc3RyX3ZhbCwgTlVMTCwgMCk7CisgICAgICAg IGZyZWUoc3RyX3ZhbCk7CisKKyAgICAgICAgcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGJvb2wK K2xvb2t1cF9oc3dfcmVuZGVyX2Jhc2ljX2lkKHZvaWQpCit7CisgICAgICAgIGNoYXIgYnVmWzI1 Nl07CisKKyAgICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwKKyAgICAgICAgICAgICAg ICAgIi9zeXMvY2xhc3MvZHJtL2NhcmQlZC9tZXRyaWNzLzQwM2Q4ODMyLTFhMjctNGFhNi1hNjRl LWY1Mzg5Y2U3YjIxMi9pZCIsCisgICAgICAgICAgICAgICAgIGRldmljZSk7CisKKyAgICAgICAg cmV0dXJuIHRyeV9yZWFkX3U2NF9maWxlKGJ1ZiwgJmhzd19yZW5kZXJfYmFzaWNfaWQpOworfQor CitzdGF0aWMgdm9pZAorZ3RfZnJlcXVlbmN5X3JhbmdlX3NhdmUodm9pZCkKK3sKKyAgICAgICAg Z3RfbWluX2ZyZXFfbWh6X3NhdmVkID0gc3lzZnNfcmVhZCgiZ3RfbWluX2ZyZXFfbWh6Iik7Cisg ICAgICAgIGd0X21heF9mcmVxX21oel9zYXZlZCA9IHN5c2ZzX3JlYWQoImd0X21heF9mcmVxX21o eiIpOworCisgICAgICAgIGd0X21pbl9mcmVxX21oeiA9IGd0X21pbl9mcmVxX21oel9zYXZlZDsK KyAgICAgICAgZ3RfbWF4X2ZyZXFfbWh6ID0gZ3RfbWF4X2ZyZXFfbWh6X3NhdmVkOworfQorCitz dGF0aWMgdm9pZAorZ3RfZnJlcXVlbmN5X3BpbihpbnQgZ3RfZnJlcV9taHopCit7CisgICAgICAg IGlndF9kZWJ1ZygicmVxdWVzdGluZyBwaW5uZWQgR1QgZnJlcSA9ICVkbWh6XG4iLCBndF9mcmVx X21oeik7CisKKyAgICAgICAgaWYgKGd0X2ZyZXFfbWh6ID4gZ3RfbWF4X2ZyZXFfbWh6KSB7Cisg ICAgICAgICAgICAgICAgc3lzZnNfd3JpdGUoImd0X21heF9mcmVxX21oeiIsIGd0X2ZyZXFfbWh6 KTsKKyAgICAgICAgICAgICAgICBzeXNmc193cml0ZSgiZ3RfbWluX2ZyZXFfbWh6IiwgZ3RfZnJl cV9taHopOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN5c2ZzX3dyaXRlKCJn dF9taW5fZnJlcV9taHoiLCBndF9mcmVxX21oeik7CisgICAgICAgICAgICAgICAgc3lzZnNfd3Jp dGUoImd0X21heF9mcmVxX21oeiIsIGd0X2ZyZXFfbWh6KTsKKyAgICAgICAgfQorICAgICAgICBn dF9taW5fZnJlcV9taHogPSBndF9mcmVxX21oejsKKyAgICAgICAgZ3RfbWF4X2ZyZXFfbWh6ID0g Z3RfZnJlcV9taHo7Cit9CisKK3N0YXRpYyB2b2lkCitndF9mcmVxdWVuY3lfcmFuZ2VfcmVzdG9y ZSh2b2lkKQoreworICAgICAgICBpZ3RfZGVidWcoInJlc3RvcmluZyBHVCBmcmVxdWVuY3kgcmFu Z2U6IG1pbiA9ICVkbWh6LCBtYXggPSVkbWh6LCBjdXJyZW50OiBtaW49JWRtaHosIG1heD0lZG1o elxuIiwKKyAgICAgICAgICAgICAgICAgIChpbnQpZ3RfbWluX2ZyZXFfbWh6X3NhdmVkLAorICAg ICAgICAgICAgICAgICAgKGludClndF9tYXhfZnJlcV9taHpfc2F2ZWQsCisgICAgICAgICAgICAg ICAgICAoaW50KWd0X21pbl9mcmVxX21oeiwKKyAgICAgICAgICAgICAgICAgIChpbnQpZ3RfbWF4 X2ZyZXFfbWh6KTsKKworICAgICAgICAvKiBBc3N1bWUgY3VycmVudCBtaW4vbWF4IGFyZSB0aGUg c2FtZSAqLworICAgICAgICBpZiAoZ3RfbWluX2ZyZXFfbWh6X3NhdmVkID4gZ3RfbWF4X2ZyZXFf bWh6KSB7CisgICAgICAgICAgICAgICAgc3lzZnNfd3JpdGUoImd0X21heF9mcmVxX21oeiIsIGd0 X21heF9mcmVxX21oel9zYXZlZCk7CisgICAgICAgICAgICAgICAgc3lzZnNfd3JpdGUoImd0X21p bl9mcmVxX21oeiIsIGd0X21pbl9mcmVxX21oel9zYXZlZCk7CisgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgc3lzZnNfd3JpdGUoImd0X21pbl9mcmVxX21oeiIsIGd0X21pbl9mcmVx X21oel9zYXZlZCk7CisgICAgICAgICAgICAgICAgc3lzZnNfd3JpdGUoImd0X21heF9mcmVxX21o eiIsIGd0X21heF9mcmVxX21oel9zYXZlZCk7CisgICAgICAgIH0KKworICAgICAgICBndF9taW5f ZnJlcV9taHogPSBndF9taW5fZnJlcV9taHpfc2F2ZWQ7CisgICAgICAgIGd0X21heF9mcmVxX21o eiA9IGd0X21heF9mcmVxX21oel9zYXZlZDsKK30KKworc3RhdGljIHVpbnQ2NF90Cit0aW1lYmFz ZV9zY2FsZSh1aW50MzJfdCB1MzJfZGVsdGEpCit7CisgICAgICAgIHJldHVybiAoKHVpbnQ2NF90 KXUzMl9kZWx0YSAqIE5TRUNfUEVSX1NFQykgLyB0aW1lc3RhbXBfZnJlcXVlbmN5OworfQorCisv KiBDQVBfU1lTX0FETUlOIGlzIHJlcXVpcmVkIHRvIG9wZW4gc3lzdGVtIHdpZGUgbWV0cmljcywg dW5sZXNzIHRoZSBzeXN0ZW0KKyAqIGNvbnRyb2wgcGFyYW1ldGVyIGRldi5pOTE1LnBlcmZfc3Ry ZWFtX3BhcmFub2lkID09IDAgKi8KK3N0YXRpYyB2b2lkCit0ZXN0X3N5c3RlbV93aWRlX3BhcmFu b2lkKHZvaWQpCit7CisgICAgICAgIGlndF9mb3JrKGNoaWxkLCAxKSB7CisgICAgICAgICAgICAg ICAgdWludDY0X3QgcHJvcGVydGllc1tdID0geworICAgICAgICAgICAgICAgICAgICAgICAgLyog SW5jbHVkZSBPQSByZXBvcnRzIGluIHNhbXBsZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAg IERSTV9JOTE1X1BFUkZfUFJPUF9TQU1QTEVfT0EsIHRydWUsCisKKyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIE9BIHVuaXQgY29uZmlndXJhdGlvbiAqLworICAgICAgICAgICAgICAgICAgICAg ICAgRFJNX0k5MTVfUEVSRl9QUk9QX09BX01FVFJJQ1NfU0VULCBoc3dfcmVuZGVyX2Jhc2ljX2lk LAorICAgICAgICAgICAgICAgICAgICAgICAgRFJNX0k5MTVfUEVSRl9QUk9QX09BX0ZPUk1BVCwg STkxNV9PQV9GT1JNQVRfQTQ1X0I4X0M4LAorICAgICAgICAgICAgICAgICAgICAgICAgRFJNX0k5 MTVfUEVSRl9QUk9QX09BX0VYUE9ORU5ULCAxMywgLyogMSBtaWxsaXNlY29uZCAqLworICAgICAg ICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgc3RydWN0IGRybV9pOTE1X3BlcmZfb3Blbl9w YXJhbSBwYXJhbSA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC5mbGFncyA9IEk5MTVfUEVS Rl9GTEFHX0ZEX0NMT0VYRUMgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJOTE1 X1BFUkZfRkxBR19GRF9OT05CTE9DSywKKyAgICAgICAgICAgICAgICAgICAgICAgIC5udW1fcHJv cGVydGllcyA9IHNpemVvZihwcm9wZXJ0aWVzKSAvIDE2LAorICAgICAgICAgICAgICAgICAgICAg ICAgLnByb3BlcnRpZXNfcHRyID0gKHVpbnQ2NF90KXByb3BlcnRpZXMsCisgICAgICAgICAgICAg ICAgfTsKKworICAgICAgICAgICAgICAgIHdyaXRlX3U2NF9maWxlKCIvcHJvYy9zeXMvZGV2L2k5 MTUvcGVyZl9zdHJlYW1fcGFyYW5vaWQiLCAxKTsKKworICAgICAgICAgICAgICAgIGlndF9kcm9w X3Jvb3QoKTsKKworICAgICAgICAgICAgICAgIGRvX2lvY3RsX2Vycihkcm1fZmQsIERSTV9JT0NU TF9JOTE1X1BFUkZfT1BFTiwgJnBhcmFtLCBFQUNDRVMpOworICAgICAgICB9CisKKyAgICAgICAg aWd0X3dhaXRjaGlsZHJlbigpOworCisgICAgICAgIGlndF9mb3JrKGNoaWxkLCAxKSB7CisgICAg ICAgICAgICAgICAgdWludDY0X3QgcHJvcGVydGllc1tdID0geworICAgICAgICAgICAgICAgICAg ICAgICAgLyogSW5jbHVkZSBPQSByZXBvcnRzIGluIHNhbXBsZXMgKi8KKyAgICAgICAgICAgICAg ICAgICAgICAgIERSTV9JOTE1X1BFUkZfUFJPUF9TQU1QTEVfT0EsIHRydWUsCisKKyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIE9BIHVuaXQgY29uZmlndXJhdGlvbiAqLworICAgICAgICAgICAg ICAgICAgICAgICAgRFJNX0k5MTVfUEVSRl9QUk9QX09BX01FVFJJQ1NfU0VULCBoc3dfcmVuZGVy X2Jhc2ljX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgRFJNX0k5MTVfUEVSRl9QUk9QX09B X0ZPUk1BVCwgSTkxNV9PQV9GT1JNQVRfQTQ1X0I4X0M4LAorICAgICAgICAgICAgICAgICAgICAg ICAgRFJNX0k5MTVfUEVSRl9QUk9QX09BX0VYUE9ORU5ULCAxMywgLyogMSBtaWxsaXNlY29uZCAq LworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgc3RydWN0IGRybV9pOTE1X3Bl cmZfb3Blbl9wYXJhbSBwYXJhbSA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC5mbGFncyA9 IEk5MTVfUEVSRl9GTEFHX0ZEX0NMT0VYRUMgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBJOTE1X1BFUkZfRkxBR19GRF9OT05CTE9DSywKKyAgICAgICAgICAgICAgICAgICAgICAg IC5udW1fcHJvcGVydGllcyA9IHNpemVvZihwcm9wZXJ0aWVzKSAvIDE2LAorICAgICAgICAgICAg ICAgICAgICAgICAgLnByb3BlcnRpZXNfcHRyID0gKHVpbnQ2NF90KXByb3BlcnRpZXMsCisgICAg ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBpbnQgc3RyZWFtX2ZkOworCisgICAgICAg ICAgICAgICAgd3JpdGVfdTY0X2ZpbGUoIi9wcm9jL3N5cy9kZXYvaTkxNS9wZXJmX3N0cmVhbV9w YXJhbm9pZCIsIDApOworCisgICAgICAgICAgICAgICAgaWd0X2Ryb3Bfcm9vdCgpOworCisgICAg ICAgICAgICAgICAgc3RyZWFtX2ZkID0gX19wZXJmX29wZW4oZHJtX2ZkLCAmcGFyYW0pOworICAg ICAgICAgICAgICAgIGNsb3NlKHN0cmVhbV9mZCk7CisgICAgICAgIH0KKworICAgICAgICBpZ3Rf d2FpdGNoaWxkcmVuKCk7CisKKyAgICAgICAgLyogbGVhdmUgaW4gcGFyYW5vaWQgc3RhdGUgKi8K KyAgICAgICAgd3JpdGVfdTY0X2ZpbGUoIi9wcm9jL3N5cy9kZXYvaTkxNS9wZXJmX3N0cmVhbV9w YXJhbm9pZCIsIDEpOworfQorCitzdGF0aWMgdm9pZAordGVzdF9pbnZhbGlkX29wZW5fZmxhZ3Mo dm9pZCkKK3sKKyAgICAgICAgdWludDY0X3QgcHJvcGVydGllc1tdID0geworICAgICAgICAgICAg ICAgIC8qIEluY2x1ZGUgT0EgcmVwb3J0cyBpbiBzYW1wbGVzICovCisgICAgICAgICAgICAgICAg RFJNX0k5MTVfUEVSRl9QUk9QX1NBTVBMRV9PQSwgdHJ1ZSwKKworICAgICAgICAgICAgICAgIC8q IE9BIHVuaXQgY29uZmlndXJhdGlvbiAqLworICAgICAgICAgICAgICAgIERSTV9JOTE1X1BFUkZf UFJPUF9PQV9NRVRSSUNTX1NFVCwgaHN3X3JlbmRlcl9iYXNpY19pZCwKKyAgICAgICAgICAgICAg ICBEUk1fSTkxNV9QRVJGX1BST1BfT0FfRk9STUFULCBJOTE1X09BX0ZPUk1BVF9BNDVfQjhfQzgs CisgICAgICAgICAgICAgICAgRFJNX0k5MTVfUEVSRl9QUk9QX09BX0VYUE9ORU5ULCAxMywgLyog MSBtaWxsaXNlY29uZCAqLworICAgICAgICB9OworICAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfcGVy Zl9vcGVuX3BhcmFtIHBhcmFtID0geworICAgICAgICAgICAgICAgIC5mbGFncyA9IH4wLCAvKiBV bmRlZmluZWQgZmxhZyBiaXRzIHNldCEgKi8KKyAgICAgICAgICAgICAgICAubnVtX3Byb3BlcnRp ZXMgPSBzaXplb2YocHJvcGVydGllcykgLyAxNiwKKyAgICAgICAgICAgICAgICAucHJvcGVydGll c19wdHIgPSAodWludDY0X3QpcHJvcGVydGllcywKKyAgICAgICAgfTsKKworICAgICAgICBkb19p b2N0bF9lcnIoZHJtX2ZkLCBEUk1fSU9DVExfSTkxNV9QRVJGX09QRU4sICZwYXJhbSwgRUlOVkFM KTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfaW52YWxpZF9vYV9tZXRyaWNfc2V0X2lkKHZvaWQp Cit7CisgICAgICAgIHVpbnQ2NF90IHByb3BlcnRpZXNbXSA9IHsKKyAgICAgICAgICAgICAgICAv KiBJbmNsdWRlIE9BIHJlcG9ydHMgaW4gc2FtcGxlcyAqLworICAgICAgICAgICAgICAgIERSTV9J OTE1X1BFUkZfUFJPUF9TQU1QTEVfT0EsIHRydWUsCisKKyAgICAgICAgICAgICAgICAvKiBPQSB1 bml0IGNvbmZpZ3VyYXRpb24gKi8KKyAgICAgICAgICAgICAgICBEUk1fSTkxNV9QRVJGX1BST1Bf T0FfRk9STUFULCBJOTE1X09BX0ZPUk1BVF9BNDVfQjhfQzgsCisgICAgICAgICAgICAgICAgRFJN X0k5MTVfUEVSRl9QUk9QX09BX0VYUE9ORU5ULCAxMywgLyogMSBtaWxsaXNlY29uZCAqLworICAg ICAgICAgICAgICAgIERSTV9JOTE1X1BFUkZfUFJPUF9PQV9NRVRSSUNTX1NFVCwgVUlOVDY0X01B WCwKKyAgICAgICAgfTsKKyAgICAgICAgc3RydWN0IGRybV9pOTE1X3BlcmZfb3Blbl9wYXJhbSBw YXJhbSA9IHsKKyAgICAgICAgICAgICAgICAuZmxhZ3MgPSBJOTE1X1BFUkZfRkxBR19GRF9DTE9F WEVDIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIEk5MTVfUEVSRl9GTEFHX0ZEX05PTkJMT0NL LAorICAgICAgICAgICAgICAgIC5udW1fcHJvcGVydGllcyA9IHNpemVvZihwcm9wZXJ0aWVzKSAv IDE2LAorICAgICAgICAgICAgICAgIC5wcm9wZXJ0aWVzX3B0ciA9ICh1aW50NjRfdClwcm9wZXJ0 aWVzLAorICAgICAgICB9OworICAgICAgICBpbnQgc3RyZWFtX2ZkOworCisgICAgICAgIGRvX2lv Y3RsX2Vycihkcm1fZmQsIERSTV9JT0NUTF9JOTE1X1BFUkZfT1BFTiwgJnBhcmFtLCBFSU5WQUwp OworCisgICAgICAgIHByb3BlcnRpZXNbQVJSQVlfU0laRShwcm9wZXJ0aWVzKSAtIDFdID0gMDsg LyogSUQgMCBpcyBhbHNvIGJlIHJlc2VydmVkIGFzIGludmFsaWQgKi8KKyAgICAgICAgZG9faW9j dGxfZXJyKGRybV9mZCwgRFJNX0lPQ1RMX0k5MTVfUEVSRl9PUEVOLCAmcGFyYW0sIEVJTlZBTCk7 CisKKyAgICAgICAgLyogQ2hlY2sgdGhhdCB3ZSBhcmVuJ3QganVzdCBzZWVpbmcgZmFsc2UgcG9z aXRpdmVzLi4uICovCisgICAgICAgIHByb3BlcnRpZXNbQVJSQVlfU0laRShwcm9wZXJ0aWVzKSAt IDFdID0gaHN3X3JlbmRlcl9iYXNpY19pZDsKKyAgICAgICAgc3RyZWFtX2ZkID0gX19wZXJmX29w ZW4oZHJtX2ZkLCAmcGFyYW0pOworICAgICAgICBjbG9zZShzdHJlYW1fZmQpOworCisgICAgICAg IC8qIFRoZXJlJ3Mgbm8gdmFsaWQgZGVmYXVsdCBPQSBtZXRyaWMgc2V0IElELi4uICovCisgICAg ICAgIHBhcmFtLm51bV9wcm9wZXJ0aWVzLS07CisgICAgICAgIGRvX2lvY3RsX2Vycihkcm1fZmQs IERSTV9JT0NUTF9JOTE1X1BFUkZfT1BFTiwgJnBhcmFtLCBFSU5WQUwpOworfQorCitzdGF0aWMg dm9pZAordGVzdF9pbnZhbGlkX29hX2Zvcm1hdF9pZCh2b2lkKQoreworICAgICAgICB1aW50NjRf dCBwcm9wZXJ0aWVzW10gPSB7CisgICAgICAgICAgICAgICAgLyogSW5jbHVkZSBPQSByZXBvcnRz IGluIHNhbXBsZXMgKi8KKyAgICAgICAgICAgICAgICBEUk1fSTkxNV9QRVJGX1BST1BfU0FNUExF X09BLCB0cnVlLAorCisgICAgICAgICAgICAgICAgLyogT0EgdW5pdCBjb25maWd1cmF0aW9uICov CisgICAgICAgICAgICAgICAgRFJNX0k5MTVfUEVSRl9QUk9QX09BX01FVFJJQ1NfU0VULCBoc3df cmVuZGVyX2Jhc2ljX2lkLAorICAgICAgICAgICAgICAgIERSTV9JOTE1X1BFUkZfUFJPUF9PQV9F WFBPTkVOVCwgMTMsIC8qIDEgbWlsbGlzZWNvbmQgKi8KKyAgICAgICAgICAgICAgICBEUk1fSTkx NV9QRVJGX1BST1BfT0FfRk9STUFULCBVSU5UNjRfTUFYLAorICAgICAgICB9OworICAgICAgICBz dHJ1Y3QgZHJtX2k5MTVfcGVyZl9vcGVuX3BhcmFtIHBhcmFtID0geworICAgICAgICAgICAgICAg IC5mbGFncyA9IEk5MTVfUEVSRl9GTEFHX0ZEX0NMT0VYRUMgfAorICAgICAgICAgICAgICAgICAg ICAgICAgSTkxNV9QRVJGX0ZMQUdfRkRfTk9OQkxPQ0ssCisgICAgICAgICAgICAgICAgLm51bV9w cm9wZXJ0aWVzID0gc2l6ZW9mKHByb3BlcnRpZXMpIC8gMTYsCisgICAgICAgICAgICAgICAgLnBy b3BlcnRpZXNfcHRyID0gKHVpbnQ2NF90KXByb3BlcnRpZXMsCisgICAgICAgIH07CisgICAgICAg IGludCBzdHJlYW1fZmQ7CisKKyAgICAgICAgZG9faW9jdGxfZXJyKGRybV9mZCwgRFJNX0lPQ1RM X0k5MTVfUEVSRl9PUEVOLCAmcGFyYW0sIEVJTlZBTCk7CisKKyAgICAgICAgcHJvcGVydGllc1tB UlJBWV9TSVpFKHByb3BlcnRpZXMpIC0gMV0gPSAwOyAvKiBJRCAwIGlzIGFsc28gYmUgcmVzZXJ2 ZWQgYXMgaW52YWxpZCAqLworICAgICAgICBkb19pb2N0bF9lcnIoZHJtX2ZkLCBEUk1fSU9DVExf STkxNV9QRVJGX09QRU4sICZwYXJhbSwgRUlOVkFMKTsKKworICAgICAgICAvKiBDaGVjayB0aGF0 IHdlIGFyZW4ndCBqdXN0IHNlZWluZyBmYWxzZSBwb3NpdGl2ZXMuLi4gKi8KKyAgICAgICAgcHJv cGVydGllc1tBUlJBWV9TSVpFKHByb3BlcnRpZXMpIC0gMV0gPSBJOTE1X09BX0ZPUk1BVF9BNDVf QjhfQzg7CisgICAgICAgIHN0cmVhbV9mZCA9IF9fcGVyZl9vcGVuKGRybV9mZCwgJnBhcmFtKTsK KyAgICAgICAgY2xvc2Uoc3RyZWFtX2ZkKTsKKworICAgICAgICAvKiBUaGVyZSdzIG5vIHZhbGlk IGRlZmF1bHQgT0EgZm9ybWF0Li4uICovCisgICAgICAgIHBhcmFtLm51bV9wcm9wZXJ0aWVzLS07 CisgICAgICAgIGRvX2lvY3RsX2Vycihkcm1fZmQsIERSTV9JT0NUTF9JOTE1X1BFUkZfT1BFTiwg JnBhcmFtLCBFSU5WQUwpOworfQorCitzdGF0aWMgdm9pZAordGVzdF9taXNzaW5nX3NhbXBsZV9m bGFncyh2b2lkKQoreworICAgICAgICB1aW50NjRfdCBwcm9wZXJ0aWVzW10gPSB7CisgICAgICAg ICAgICAgICAgLyogTm8gX1BST1BfU0FNUExFX3h5eiBmbGFncyAqLworCisgICAgICAgICAgICAg ICAgLyogT0EgdW5pdCBjb25maWd1cmF0aW9uICovCisgICAgICAgICAgICAgICAgRFJNX0k5MTVf UEVSRl9QUk9QX09BX01FVFJJQ1NfU0VULCBoc3dfcmVuZGVyX2Jhc2ljX2lkLAorICAgICAgICAg ICAgICAgIERSTV9JOTE1X1BFUkZfUFJPUF9PQV9FWFBPTkVOVCwgMTMsIC8qIDEgbWlsbGlzZWNv bmQgKi8KKyAgICAgICAgICAgICAgICBEUk1fSTkxNV9QRVJGX1BST1BfT0FfRk9STUFULCBJOTE1 X09BX0ZPUk1BVF9BNDVfQjhfQzgsCisgICAgICAgIH07CisgICAgICAgIHN0cnVjdCBkcm1faTkx NV9wZXJmX29wZW5fcGFyYW0gcGFyYW0gPSB7CisgICAgICAgICAgICAgICAgLmZsYWdzID0gSTkx NV9QRVJGX0ZMQUdfRkRfQ0xPRVhFQywKKyAgICAgICAgICAgICAgICAubnVtX3Byb3BlcnRpZXMg PSBzaXplb2YocHJvcGVydGllcykgLyAxNiwKKyAgICAgICAgICAgICAgICAucHJvcGVydGllc19w dHIgPSAodWludDY0X3QpcHJvcGVydGllcywKKyAgICAgICAgfTsKKworICAgICAgICBkb19pb2N0 bF9lcnIoZHJtX2ZkLCBEUk1fSU9DVExfSTkxNV9QRVJGX09QRU4sICZwYXJhbSwgRUlOVkFMKTsK K30KKworc3RhdGljIHZvaWQKK3JlYWRfMl9vYV9yZXBvcnRzKGludCBzdHJlYW1fZmQsCisgICAg ICAgICAgICAgICAgICB1aW50NjRfdCBmb3JtYXRfaWQsCisgICAgICAgICAgICAgICAgICBzaXpl X3QgZm9ybWF0X3NpemUsCisgICAgICAgICAgICAgICAgICBpbnQgZXhwb25lbnQsCisgICAgICAg ICAgICAgICAgICB1aW50MzJfdCAqb2FfcmVwb3J0MCwKKyAgICAgICAgICAgICAgICAgIHVpbnQz Ml90ICpvYV9yZXBvcnQxLAorICAgICAgICAgICAgICAgICAgYm9vbCB0aW1lcl9vbmx5KQorewor ICAgICAgICBzaXplX3Qgc2FtcGxlX3NpemUgPSAoc2l6ZW9mKHN0cnVjdCBkcm1faTkxNV9wZXJm X3JlY29yZF9oZWFkZXIpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9z aXplKTsKKyAgICAgICAgY29uc3Qgc3RydWN0IGRybV9pOTE1X3BlcmZfcmVjb3JkX2hlYWRlciAq aGVhZGVyOworICAgICAgICB1aW50MzJfdCBleHBvbmVudF9tYXNrID0gKDEgPDwgKGV4cG9uZW50 ICsgMSkpIC0gMTsKKworICAgICAgICAvKiBOb3RlOiB3ZSBhbGxvY2F0ZSBhIGxhcmdlIGJ1ZmZl ciBzbyB0aGF0IGVhY2ggcmVhZCgpIGl0ZXJhdGlvbgorICAgICAgICAgKiBzaG91bGQgc2NyYXBl ICphbGwqIHBlbmRpbmcgcmVjb3Jkcy4KKyAgICAgICAgICoKKyAgICAgICAgICogVGhlIGxhcmdl c3QgYnVmZmVyIHRoZSBPQSB1bml0IHN1cHBvcnRzIGlzIDE2TUIgYW5kIHRoZSBzbWFsbGVzdAor ICAgICAgICAgKiBPQSByZXBvcnQgZm9ybWF0IGlzIDY0Ynl0ZXMgYWxsb3dpbmcgdXAgdG8gMjYy MTQ0IHJlcG9ydHMgdG8KKyAgICAgICAgICogYmUgYnVmZmVyZWQuCisgICAgICAgICAqCisgICAg ICAgICAqIEJlaW5nIHN1cmUgd2UgYXJlIGZldGNoaW5nIGFsbCBidWZmZXJlZCByZXBvcnRzIGFs bG93cyB1cyB0bworICAgICAgICAgKiBwb3RlbnRpYWxseSB0aHJvdyBhd2F5IC8gc2tpcCBhbGwg cmVwb3J0cyB3aGVuZXZlciB3ZSBzZWUKKyAgICAgICAgICogYSBfUkVQT1JUX0xPU1Qgbm90aWZp Y2F0aW9uIGFzIGEgd2F5IG9mIGJlaW5nIHN1cmUgYXJlCisgICAgICAgICAqIG1lYXN1cmVtZW50 cyBhcmVuJ3Qgc2tld2VkIGJ5IGEgbG9zdCByZXBvcnQuCisgICAgICAgICAqCisgICAgICAgICAq IE5vdGU6IHRoYXQgaXMgaXMgdXNlZnVsIGZvciBzb21lIHRlc3RzIGJ1dCBhbHNvIG5vdCBzb21l dGhpbmcKKyAgICAgICAgICogYXBwbGljYXRpb25zIHdvdWxkIGJlIGV4cGVjdGVkIHRvIHJlc29y dCB0by4gTG9zdCByZXBvcnRzIGFyZQorICAgICAgICAgKiBzb21ld2hhdCB1bnByZWRpY3RhYmxl IGJ1dCB0eXBpY2FsbHkgZG9uJ3QgcG9zZSBhIHByb2JsZW0gLSBleGNlcHQKKyAgICAgICAgICog dG8gaW5kaWNhdGUgdGhhdCB0aGUgT0EgdW5pdCBtYXkgYmUgb3ZlciB0YXhlZCBpZiBsb3RzIG9m IHJlcG9ydHMKKyAgICAgICAgICogYXJlIGJlaW5nIGxvc3QuCisgICAgICAgICAqLworICAgICAg ICBpbnQgYnVmX3NpemUgPSAyNjIxNDQgKiAoNjQgKyBzaXplb2Yoc3RydWN0IGRybV9pOTE1X3Bl cmZfcmVjb3JkX2hlYWRlcikpOworICAgICAgICB1aW50OF90ICpidWYgPSBtYWxsb2MoYnVmX3Np emUpOworICAgICAgICBpbnQgbiA9IDA7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAx MDAwOyBpKyspIHsKKyAgICAgICAgICAgICAgICBzc2l6ZV90IGxlbjsKKworICAgICAgICAgICAg ICAgIHdoaWxlICgobGVuID0gcmVhZChzdHJlYW1fZmQsIGJ1ZiwgYnVmX3NpemUpKSA8IDAgJiYK KyAgICAgICAgICAgICAgICAgICAgICAgZXJybm8gPT0gRUlOVFIpCisgICAgICAgICAgICAgICAg ICAgICAgICA7CisKKyAgICAgICAgICAgICAgICBpZ3RfYXNzZXJ0KGxlbiA+IDApOworCisgICAg ICAgICAgICAgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgbGVuOyBvZmZzZXQg Kz0gaGVhZGVyLT5zaXplKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJf dCAqcmVwb3J0OworCisgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIgPSAodm9pZCAqKShi dWYgKyBvZmZzZXQpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZ3RfYXNzZXJ0X2VxKGhl YWRlci0+cGFkLCAwKTsgLyogUmVzZXJ2ZWQgKi8KKworICAgICAgICAgICAgICAgICAgICAgICAg LyogQ3VycmVudGx5IHRoZSBvbmx5IHRlc3QgdGhhdCBzaG91bGQgZXZlciBleHBlY3QgdG8KKyAg ICAgICAgICAgICAgICAgICAgICAgICAqIHNlZSBhIF9CVUZGRVJfTE9TVCBlcnJvciBpcyB0aGUg YnVmZmVyX2ZpbGwgdGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIG90aGVyd2lzZSBz b21ldGhpbmcgYmFkIGhhcyBwcm9iYWJseSBoYXBwZW5lZC4uLgorICAgICAgICAgICAgICAgICAg ICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICBpZ3RfYXNzZXJ0X25lcShoZWFkZXIt PnR5cGUsIERSTV9JOTE1X1BFUkZfUkVDT1JEX09BX0JVRkZFUl9MT1NUKTsKKworICAgICAgICAg ICAgICAgICAgICAgICAgLyogQXQgaGlnaCBzYW1wbGluZyBmcmVxdWVuY2llcyB0aGUgT0EgSFcg bWlnaHQgbm90IGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgKiBhYmxlIHRvIGNvcGUgd2l0 aCBhbGwgd3JpdGUgcmVxdWVzdHMgYW5kIHdpbGwgbm90aWZ5CisgICAgICAgICAgICAgICAgICAg ICAgICAgKiB1cyB0aGF0IGEgcmVwb3J0IHdhcyBsb3N0LiBXZSByZXN0YXJ0IG91ciByZWFkIG9m CisgICAgICAgICAgICAgICAgICAgICAgICAgKiB0d28gc2VxdWVudGlhbCByZXBvcnRzIGR1ZSB0 byB0aGUgdGltZWxpbmUgYmxpcCB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgKiBpbXBs aWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAg IGlmIChoZWFkZXItPnR5cGUgPT0gRFJNX0k5MTVfUEVSRl9SRUNPUkRfT0FfUkVQT1JUX0xPU1Qp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWd0X2RlYnVnKCJyZWFkIHJlc3Rh cnQ6IE9BIHRyaWdnZXIgY29sbGlzaW9uIC8gcmVwb3J0IGxvc3RcbiIpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBuID0gMDsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBYWFg6IGJyZWFrLCBiZWNhdXNlIHdlIGRvbid0IGtub3cgd2hlcmUKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICogd2l0aGluIHRoZSBzZXJpZXMgb2YgYWxyZWFkeSBy ZWFkIHJlcG9ydHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlcmUgY291 bGQgYmUgYSBibGlwIGZyb20gdGhlIGxvc3QgcmVwb3J0LgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEN1 cnJlbnRseSB0aGUgb25seSBvdGhlciByZWNvcmQgdHlwZSBleHBlY3RlZCBpcyBhCisgICAgICAg ICAgICAgICAgICAgICAgICAgKiBfU0FNUExFLiBOb3RhYmx5IHRoaXMgdGVzdCB3aWxsIG5lZWQg dXBkYXRpbmcgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIGk5MTUtcGVyZiBpcyBleHRl bmRlZCBpbiB0aGUgZnV0dXJlIHdpdGggYWRkaXRpb25hbAorICAgICAgICAgICAgICAgICAgICAg ICAgICogcmVjb3JkIHR5cGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAg ICAgICAgICAgICAgICAgICBpZ3RfYXNzZXJ0X2VxKGhlYWRlci0+dHlwZSwgRFJNX0k5MTVfUEVS Rl9SRUNPUkRfU0FNUExFKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWd0X2Fzc2VydF9l cShoZWFkZXItPnNpemUsIHNhbXBsZV9zaXplKTsKKworICAgICAgICAgICAgICAgICAgICAgICAg cmVwb3J0ID0gKGNvbnN0IHZvaWQgKikoaGVhZGVyICsgMSk7CisKKyAgICAgICAgICAgICAgICAg ICAgICAgIGlndF9kZWJ1ZygicmVhZCByZXBvcnQ6IHJlYXNvbiA9ICV4LCB0aW1lc3RhbXAgPSAl eCwgZXhwb25lbnQgbWFzaz0leFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZXBvcnRbMF0sIHJlcG9ydFsxXSwgZXhwb25lbnRfbWFzayk7CisKKyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIERvbid0IGV4cGVjdCB6ZXJvIGZvciB0aW1lc3RhbXBzICovCisgICAgICAg ICAgICAgICAgICAgICAgICBpZ3RfYXNzZXJ0X25lcShyZXBvcnRbMV0sIDApOworCisgICAgICAg ICAgICAgICAgICAgICAgICBpZiAodGltZXJfb25seSkgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBGb3IgSGFzd2VsbCB3ZSBkb24ndCBoYXZlIGEgZG9jdW1lbnRlZAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByZXBvcnQgcmVhc29uIGZpZWxkICh0aG91 Z2ggZW1waXJpY2FsbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcmVwb3J0 WzBdIGJpdCAxMCBkb2VzIHNlZW0gdG8gY29ycmVsYXRlIHdpdGgKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICogYSB0aW1lciB0cmlnZ2VyIHJlYXNvbikgc28gd2UgaW5zdGVhZCBp bmZlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB3aGljaCByZXBvcnRzIGFy ZSB0aW1lciB0cmlnZ2VyZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICog Y2hlY2tpbmcgaWYgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgYXJlCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqIHplcm8gYW5kIHRoZSBleHBvbmVudCBiaXQgaXMgc2V0Lgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKChyZXBvcnRbMV0gJiBleHBvbmVudF9tYXNrKSAhPSAoMSA8PCBleHBv bmVudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ3RfZGVi dWcoInNraXBwaW5nIG5vbiB0aW1lciByZXBvcnQgcmVhc29uPSV4XG4iLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRbMF0pOworCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWxzbyBhc3NlcnQgb3VyIGh5 cG90aGVzaXMgYWJvdXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICogcmVhc29uIGJpdC4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlndF9hc3Nl cnRfZXEocmVwb3J0WzBdICYgKDEgPDwgMTApLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAg ICBpZiAobisrID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweShv YV9yZXBvcnQwLCByZXBvcnQsIGZvcm1hdF9zaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAg IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkob2FfcmVwb3J0 MSwgcmVwb3J0LCBmb3JtYXRfc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZyZWUoYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg ICAgICAgIGZyZWUoYnVmKTsKKworICAgICAgICBpZ3RfYXNzZXJ0KCEicmVhY2hlZCIpOworfQor CitzdGF0aWMgdm9pZAorb3Blbl9hbmRfcmVhZF8yX29hX3JlcG9ydHModWludDY0X3QgZm9ybWF0 X2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGZvcm1hdF9zaXplLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4cG9uZW50LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgdWludDMyX3QgKm9hX3JlcG9ydDAsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICB1aW50MzJfdCAqb2FfcmVwb3J0MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg dGltZXJfb25seSkKK3sKKyAgICAgICAgdWludDY0X3QgcHJvcGVydGllc1tdID0geworICAgICAg ICAgICAgICAgIC8qIEluY2x1ZGUgT0EgcmVwb3J0cyBpbiBzYW1wbGVzICovCisgICAgICAgICAg ICAgICAgRFJNX0k5MTVfUEVSRl9QUk9QX1NBTVBMRV9PQSwgdHJ1ZSwKKworICAgICAgICAgICAg ICAgIC8qIE9BIHVuaXQgY29uZmlndXJhdGlvbiAqLworICAgICAgICAgICAgICAgIERSTV9JOTE1 X1BFUkZfUFJPUF9PQV9NRVRSSUNTX1NFVCwgaHN3X3JlbmRlcl9iYXNpY19pZCwKKyAgICAgICAg ICAgICAgICBEUk1fSTkxNV9QRVJGX1BST1BfT0FfRk9STUFULCBmb3JtYXRfaWQsCisgICAgICAg ICAgICAgICAgRFJNX0k5MTVfUEVSRl9QUk9QX09BX0VYUE9ORU5ULCBleHBvbmVudCwKKworICAg ICAgICB9OworICAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfcGVyZl9vcGVuX3BhcmFtIHBhcmFtID0g eworICAgICAgICAgICAgICAgIC5mbGFncyA9IEk5MTVfUEVSRl9GTEFHX0ZEX0NMT0VYRUMsCisg ICAgICAgICAgICAgICAgLm51bV9wcm9wZXJ0aWVzID0gc2l6ZW9mKHByb3BlcnRpZXMpIC8gMTYs CisgICAgICAgICAgICAgICAgLnByb3BlcnRpZXNfcHRyID0gKHVpbnQ2NF90KXByb3BlcnRpZXMs CisgICAgICAgIH07CisgICAgICAgIGludCBzdHJlYW1fZmQgPSBfX3BlcmZfb3Blbihkcm1fZmQs ICZwYXJhbSk7CisKKyAgICAgICAgcmVhZF8yX29hX3JlcG9ydHMoc3RyZWFtX2ZkLCBmb3JtYXRf aWQsIGZvcm1hdF9zaXplLCBleHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb2Ff cmVwb3J0MCwgb2FfcmVwb3J0MSwgdGltZXJfb25seSk7CisKKyAgICAgICAgY2xvc2Uoc3RyZWFt X2ZkKTsKK30KKworc3RhdGljIHZvaWQKK3ByaW50X3JlcG9ydHModWludDMyX3QgKm9hX3JlcG9y dDAsIHVpbnQzMl90ICpvYV9yZXBvcnQxLCBpbnQgZm10KQoreworICAgICAgICB1aW50MzJfdCAq YTAsICpiMCwgKmMwOworICAgICAgICB1aW50MzJfdCAqYTEsICpiMSwgKmMxOworCisgICAgICAg IC8qIE5vdCBpZGVhbCBuYW1pbmcgaGVyZSB3aXRoIGEwIG9yIGExCisgICAgICAgICAqIGRpZmZl cmVudGlhdGluZyByZXBvcnQwIG9yIDEgbm90IEEgY291bnRlciAwIG9yIDEuLi4uCisgICAgICAg ICAqLworICAgICAgICBhMCA9ICh1aW50MzJfdCAqKSgoKHVpbnQ4X3QgKilvYV9yZXBvcnQwKSAr IGhzd19vYV9mb3JtYXRzW2ZtdF0uYV9vZmYpOworICAgICAgICBiMCA9ICh1aW50MzJfdCAqKSgo KHVpbnQ4X3QgKilvYV9yZXBvcnQwKSArIGhzd19vYV9mb3JtYXRzW2ZtdF0uYl9vZmYpOworICAg ICAgICBjMCA9ICh1aW50MzJfdCAqKSgoKHVpbnQ4X3QgKilvYV9yZXBvcnQwKSArIGhzd19vYV9m b3JtYXRzW2ZtdF0uY19vZmYpOworCisgICAgICAgIGExID0gKHVpbnQzMl90ICopKCgodWludDhf dCAqKW9hX3JlcG9ydDEpICsgaHN3X29hX2Zvcm1hdHNbZm10XS5hX29mZik7CisgICAgICAgIGIx ID0gKHVpbnQzMl90ICopKCgodWludDhfdCAqKW9hX3JlcG9ydDEpICsgaHN3X29hX2Zvcm1hdHNb Zm10XS5iX29mZik7CisgICAgICAgIGMxID0gKHVpbnQzMl90ICopKCgodWludDhfdCAqKW9hX3Jl cG9ydDEpICsgaHN3X29hX2Zvcm1hdHNbZm10XS5jX29mZik7CisKKyAgICAgICAgaWd0X2RlYnVn KCJUSU1FU1RBTVA6IDFzdCA9ICUiUFJJdTMyIiwgMm5kID0gJSJQUkl1MzIiLCBkZWx0YSA9ICUi UFJJdTMyIlxuIiwKKyAgICAgICAgICAgICAgICAgIG9hX3JlcG9ydDBbMV0sIG9hX3JlcG9ydDFb MV0sIG9hX3JlcG9ydDFbMV0gLSBvYV9yZXBvcnQwWzFdKTsKKworICAgICAgICBpZiAoaHN3X29h X2Zvcm1hdHNbZm10XS5uX2MpIHsKKyAgICAgICAgICAgICAgICBpZ3RfZGVidWcoIkNMT0NLOiAx c3QgPSAlIlBSSXUzMiIsIDJuZCA9ICUiUFJJdTMyIiwgZGVsdGEgPSAlIlBSSXUzMiJcbiIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgIGMwWzJdLCBjMVsyXSwgYzFbMl0gLSBjMFsyXSk7Cisg ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGlndF9kZWJ1ZygiQ0xPQ0sgPSBOL0FcbiIp OworCisgICAgICAgIGZvciAoaW50IGogPSBoc3dfb2FfZm9ybWF0c1tmbXRdLmZpcnN0X2E7Cisg ICAgICAgICAgICAgaiA8IGhzd19vYV9mb3JtYXRzW2ZtdF0ubl9hOworICAgICAgICAgICAgIGor KykKKyAgICAgICAgeworICAgICAgICAgICAgICAgIHVpbnQzMl90IGRlbHRhID0gYTFbal0gLSBh MFtqXTsKKworICAgICAgICAgICAgICAgIGlmIChoc3dfdW5kZWZpbmVkX2FfY291bnRlcnNbal0p CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGln dF9kZWJ1ZygiQSVkOiAxc3QgPSAlIlBSSXUzMiIsIDJuZCA9ICUiUFJJdTMyIiwgZGVsdGEgPSAl IlBSSXUzMiJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGosIGEwW2pdLCBhMVtqXSwg ZGVsdGEpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBoc3dfb2Ff Zm9ybWF0c1tmbXRdLm5fYjsgaisrKSB7CisgICAgICAgICAgICAgICAgdWludDMyX3QgZGVsdGEg PSBiMVtqXSAtIGIwW2pdOworICAgICAgICAgICAgICAgIGlndF9kZWJ1ZygiQiVkOiAxc3QgPSAl IlBSSXUzMiIsIDJuZCA9ICUiUFJJdTMyIiwgZGVsdGEgPSAlIlBSSXUzMiJcbiIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgIGosIGIwW2pdLCBiMVtqXSwgZGVsdGEpOworICAgICAgICB9CisK KyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBoc3dfb2FfZm9ybWF0c1tmbXRdLm5fYzsgaisr KSB7CisgICAgICAgICAgICAgICAgdWludDMyX3QgZGVsdGEgPSBjMVtqXSAtIGMwW2pdOworICAg ICAgICAgICAgICAgIGlndF9kZWJ1ZygiQyVkOiAxc3QgPSAlIlBSSXUzMiIsIDJuZCA9ICUiUFJJ dTMyIiwgZGVsdGEgPSAlIlBSSXUzMiJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGos IGMwW2pdLCBjMVtqXSwgZGVsdGEpOworICAgICAgICB9Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0 X29hX2Zvcm1hdHModm9pZCkKK3sKKyAgICAgICAgaW50IG9hX2V4cG9uZW50ID0gMTM7CisKKyAg ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhzd19vYV9mb3JtYXRzKTsgaSsr KSB7CisgICAgICAgICAgICAgICAgdWludDMyX3Qgb2FfcmVwb3J0MFs2NF07CisgICAgICAgICAg ICAgICAgdWludDMyX3Qgb2FfcmVwb3J0MVs2NF07CisgICAgICAgICAgICAgICAgdWludDMyX3Qg KmEwLCAqYjAsICpjMDsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCAqYTEsICpiMSwgKmMxOwor ICAgICAgICAgICAgICAgIHVpbnQzMl90IHRpbWVfZGVsdGE7CisgICAgICAgICAgICAgICAgdWlu dDMyX3QgY2xvY2tfZGVsdGE7CisgICAgICAgICAgICAgICAgdWludDMyX3QgbWF4X2RlbHRhOwor CisgICAgICAgICAgICAgICAgaWd0X2RlYnVnKCJDaGVja2luZyBPQSBmb3JtYXQgJXNcbiIsIGhz d19vYV9mb3JtYXRzW2ldLm5hbWUpOworCisgICAgICAgICAgICAgICAgb3Blbl9hbmRfcmVhZF8y X29hX3JlcG9ydHMoaHN3X29hX2Zvcm1hdHNbaV0uaWQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaHN3X29hX2Zvcm1hdHNbaV0uc2l6ZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYV9leHBvbmVudCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYV9yZXBvcnQwLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9hX3JlcG9ydDEsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpOyAvKiB0aW1lciByZXBvcnRzIG9u bHkgKi8KKworICAgICAgICAgICAgICAgIHByaW50X3JlcG9ydHMob2FfcmVwb3J0MCwgb2FfcmVw b3J0MSwgaSk7CisKKyAgICAgICAgICAgICAgICBhMCA9ICh1aW50MzJfdCAqKSgoKHVpbnQ4X3Qg KilvYV9yZXBvcnQwKSArIGhzd19vYV9mb3JtYXRzW2ldLmFfb2ZmKTsKKyAgICAgICAgICAgICAg ICBiMCA9ICh1aW50MzJfdCAqKSgoKHVpbnQ4X3QgKilvYV9yZXBvcnQwKSArIGhzd19vYV9mb3Jt YXRzW2ldLmJfb2ZmKTsKKyAgICAgICAgICAgICAgICBjMCA9ICh1aW50MzJfdCAqKSgoKHVpbnQ4 X3QgKilvYV9yZXBvcnQwKSArIGhzd19vYV9mb3JtYXRzW2ldLmNfb2ZmKTsKKworICAgICAgICAg ICAgICAgIGExID0gKHVpbnQzMl90ICopKCgodWludDhfdCAqKW9hX3JlcG9ydDEpICsgaHN3X29h X2Zvcm1hdHNbaV0uYV9vZmYpOworICAgICAgICAgICAgICAgIGIxID0gKHVpbnQzMl90ICopKCgo dWludDhfdCAqKW9hX3JlcG9ydDEpICsgaHN3X29hX2Zvcm1hdHNbaV0uYl9vZmYpOworICAgICAg ICAgICAgICAgIGMxID0gKHVpbnQzMl90ICopKCgodWludDhfdCAqKW9hX3JlcG9ydDEpICsgaHN3 X29hX2Zvcm1hdHNbaV0uY19vZmYpOworCisgICAgICAgICAgICAgICAgdGltZV9kZWx0YSA9IHRp bWViYXNlX3NjYWxlKG9hX3JlcG9ydDFbMV0gLSBvYV9yZXBvcnQwWzFdKTsKKyAgICAgICAgICAg ICAgICBpZ3RfYXNzZXJ0X25lcSh0aW1lX2RlbHRhLCAwKTsKKworICAgICAgICAgICAgICAgIC8q IEMyIGNvcnJlc3BvbmRzIHRvIGEgY2xvY2sgY291bnRlciBmb3IgdGhpcyBtZXRyaWMgc2V0IGJ1 dAorICAgICAgICAgICAgICAgICAqIGl0J3Mgbm90IGluY2x1ZGVkIGluIGFsbCBvZiB0aGUgZm9y bWF0cy4gKi8KKyAgICAgICAgICAgICAgICBpZiAoaHN3X29hX2Zvcm1hdHNbaV0ubl9jKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBmcmVxOworCisgICAgICAgICAgICAgICAg ICAgICAgICAvKiBUaGUgZmlyc3QgcmVwb3J0IG1pZ2h0IGhhdmUgYSBjbG9jayBjb3VudCBvZiB6 ZXJvCisgICAgICAgICAgICAgICAgICAgICAgICAgKiBidXQgd2Ugd291bGRuJ3QgZXhwZWN0IHRo YXQgaW4gdGhlIHNlY29uZCByZXBvcnQuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAqLwor ICAgICAgICAgICAgICAgICAgICAgICAgaWd0X2Fzc2VydF9uZXEoYzFbMl0sIDApOworCisgICAg ICAgICAgICAgICAgICAgICAgICBjbG9ja19kZWx0YSA9IGMxWzJdIC0gYzBbMl07CisgICAgICAg ICAgICAgICAgICAgICAgICBpZ3RfYXNzZXJ0X25lcShjbG9ja19kZWx0YSwgMCk7CisKKyAgICAg ICAgICAgICAgICAgICAgICAgIGZyZXEgPSAoKHVpbnQ2NF90KWNsb2NrX2RlbHRhICogMTAwMCkg LyB0aW1lX2RlbHRhOworICAgICAgICAgICAgICAgICAgICAgICAgaWd0X2RlYnVnKCJmcmVxID0g JSJQUkl1NjQiXG4iLCBmcmVxKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWd0X2Fzc2Vy dChmcmVxIDw9IGd0X21heF9mcmVxX21oeik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEFzc3VtZSBydW5uaW5nIGF0IG1heCBmcmVxIGZvciBz YWtlIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgKiBiZWxvdyBzYW5pdHkgY2hlY2sgb24g Y291bnRlcnMuLi4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrX2RlbHRhID0gKGd0 X21heF9mcmVxX21oeiAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo dWludDY0X3QpdGltZV9kZWx0YSkgLyAxMDAwOworICAgICAgICAgICAgICAgIH0KKworICAgICAg ICAgICAgICAgIGlndF9kZWJ1ZygiY2xvY2sgZGVsdGEgPSAlIlBSSXUzMiJcbiIsIGNsb2NrX2Rl bHRhKTsKKworICAgICAgICAgICAgICAgIC8qIFRoZSBtYXhpbXVtIHJhdGUgZm9yIGFueSBIU1cg Y291bnRlciA9CisgICAgICAgICAgICAgICAgICogICBjbG9ja19kZWx0YSAqIDQwIEVVcworICAg ICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAgICogU2FuaXR5IGNoZWNrIHRoYXQgbm8g Y291bnRlcnMgZXhjZWVkIHRoaXMgZGVsdGEuCisgICAgICAgICAgICAgICAgICovCisgICAgICAg ICAgICAgICAgbWF4X2RlbHRhID0gY2xvY2tfZGVsdGEgKiA0MDsKKworICAgICAgICAgICAgICAg IGZvciAoaW50IGogPSBoc3dfb2FfZm9ybWF0c1tpXS5maXJzdF9hOworICAgICAgICAgICAgICAg ICAgICAgaiA8IGhzd19vYV9mb3JtYXRzW2ldLm5fYTsKKyAgICAgICAgICAgICAgICAgICAgIGor KykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBk ZWx0YSA9IGExW2pdIC0gYTBbal07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoc3df dW5kZWZpbmVkX2FfY291bnRlcnNbal0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZ3RfZGVidWcoIkElZDogZGVs dGEgPSAlIlBSSXUzMiJcbiIsIGosIGRlbHRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGln dF9hc3NlcnQoZGVsdGEgPD0gbWF4X2RlbHRhKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg ICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGhzd19vYV9mb3JtYXRzW2ldLm5fYjsgaisr KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkZWx0YSA9IGIxW2pdIC0gYjBb al07CisgICAgICAgICAgICAgICAgICAgICAgICBpZ3RfZGVidWcoIkIlZDogZGVsdGEgPSAlIlBS SXUzMiJcbiIsIGosIGRlbHRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlndF9hc3NlcnQo ZGVsdGEgPD0gbWF4X2RlbHRhKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg ICBmb3IgKGludCBqID0gMDsgaiA8IGhzd19vYV9mb3JtYXRzW2ldLm5fYzsgaisrKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkZWx0YSA9IGMxW2pdIC0gYzBbal07CisgICAg ICAgICAgICAgICAgICAgICAgICBpZ3RfZGVidWcoIkMlZDogZGVsdGEgPSAlIlBSSXUzMiJcbiIs IGosIGRlbHRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlndF9hc3NlcnQoZGVsdGEgPD0g bWF4X2RlbHRhKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KK30KKworc3RhdGljIHZv aWQKK3Rlc3Rfb2FfZXhwb25lbnRzKGludCBndF9mcmVxX21oeikKK3sKKyAgICAgICAgLyogWFhY OiBOb3RlIHRoYXQgZ3RfbWluL21heF9mcmVxX21oeiBkb24ndCBzZWVtIHRvIGJlIGEgcmVsaWFi bGUKKyAgICAgICAgICogbWVjaGFuaXNtIGZvciBmaXhpbmcgdGhlIGdwdSBmcmVxdWVuY3kgYW5k IHNpbmNlIHRoZXNlIHVuaXQgdGVzdHMKKyAgICAgICAgICogYXJlIGZvY3VzZWQgb24gdGhlIE9B IHVuaXQgbm90IHRoZSBhYmlsaXR5IHRvIHBpbiB0aGUgZnJlcXVlbmN5IHdlCisgICAgICAgICAq IHJlYWQgYmFjayB0aGUgY3VycmVudCBmcmVxdWVuY3kgZm9yIGVhY2ggaXRlcmF0aW9uIG9mIHRo aXMgdGVzdCB0bworICAgICAgICAgKiB0YWtlIHRoaXMgaW50byBhY2NvdW50LgorICAgICAgICAg Ki8KKyAgICAgICAgZ3RfZnJlcXVlbmN5X3BpbihndF9mcmVxX21oeik7CisKKyAgICAgICAgaWd0 X2RlYnVnKCJUZXN0aW5nIE9BIHRpbWVyIGV4cG9uZW50cyB3aXRoIHJlcXVlc3RlZCBHVCBmcmVx dWVuY3kgPSAlZG1oelxuIiwKKyAgICAgICAgICAgICAgICAgIGd0X2ZyZXFfbWh6KTsKKworICAg ICAgICAvKiBJdCdzIGFza2luZyBhIGxvdCB0byBzYW1wbGUgd2l0aCBhIDE2MCBuYW5vc2Vjb25k IHBlcmlvZCBhbmQgdGhlCisgICAgICAgICAqIHRlc3QgY2FuIGZhaWwgZHVlIHRvIGJ1ZmZlciBv dmVyZmxvd3MgaWYgaXQgd2Fzbid0IHBvc3NpYmxlIHRvCisgICAgICAgICAqIGtlZXAgdXAsIHNv IHdlIGRvbid0IHN0YXJ0IGZyb20gYW4gZXhwb25lbnQgb2YgemVyby4uLgorICAgICAgICAgKi8K KyAgICAgICAgZm9yIChpbnQgaSA9IDI7IGkgPCAyMDsgaSsrKSB7CisgICAgICAgICAgICAgICAg dWludDMyX3QgZXhwZWN0ZWRfdGltZXN0YW1wX2RlbHRhOworICAgICAgICAgICAgICAgIHVpbnQz Ml90IHRpbWVzdGFtcF9kZWx0YTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBvYV9yZXBvcnQw WzY0XTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBvYV9yZXBvcnQxWzY0XTsKKyAgICAgICAg ICAgICAgICB1aW50MzJfdCAqYzAsICpjMTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCB0aW1l X2RlbHRhOworICAgICAgICAgICAgICAgIHVpbnQzMl90IGNsb2NrX2RlbHRhOworICAgICAgICAg ICAgICAgIHVpbnQzMl90IGZyZXE7CisgICAgICAgICAgICAgICAgaW50IG5fZnJlcV9tYXRjaGVz ID0gMDsKKworICAgICAgICAgICAgICAgIC8qIFRoZSBleHBvbmVudCBpcyBlZmZlY3RpdmVseSBz ZWxlY3RpbmcgYSBiaXQgaW4gdGhlIHRpbWVzdGFtcAorICAgICAgICAgICAgICAgICAqIHRvIHRy aWdnZXIgcmVwb3J0cyBvbiBhbmQgc28gaW4gcHJhY3RpY2Ugd2UgZXhwZWN0IHRoZSByYXcKKyAg ICAgICAgICAgICAgICAgKiB0aW1lc3RhbXAgZGVsdGFzIGZvciBwZXJpb2RpYyByZXBvcnRzIHRv IGV4YWN0bHkgbWF0Y2ggdGhlCisgICAgICAgICAgICAgICAgICogdmFsdWUgb2YgbmV4dCBiaXQu CisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgZXhwZWN0ZWRfdGltZXN0YW1w X2RlbHRhID0gMiA8PCBpOworCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAx MDsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBndF9mcmVxX21oeiA9IHN5c2ZzX3Jl YWQoImd0X2FjdF9mcmVxX21oeiIpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZ3RfZGVi dWcoIklURVIgJWQ6IHRlc3RpbmcgT0EgZXhwb25lbnQgJWQgd2l0aCBHVCBmcmVxID0gJWRtaHpc biIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiwgaSwgZ3RfZnJlcV9taHop OworCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVuX2FuZF9yZWFkXzJfb2FfcmVwb3J0cyhJ OTE1X09BX0ZPUk1BVF9BNDVfQjhfQzgsIDI1NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGksIC8qIGV4cG9uZW50ICovCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYV9yZXBvcnQwLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2FfcmVwb3J0MSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUp OyAvKiB0aW1lciB0cmlnZ2VyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRzIG9ubHkgKi8KKworICAgICAgICAgICAg ICAgICAgICAgICAgdGltZXN0YW1wX2RlbHRhID0gb2FfcmVwb3J0MVsxXSAtIG9hX3JlcG9ydDBb MV07CisgICAgICAgICAgICAgICAgICAgICAgICBpZ3RfYXNzZXJ0X25lcSh0aW1lc3RhbXBfZGVs dGEsIDApOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGltZXN0YW1wX2RlbHRhICE9 IGV4cGVjdGVkX3RpbWVzdGFtcF9kZWx0YSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpZ3RfZGVidWcoInRpbWVzdGFtcDAgPSAldS8weCV4XG4iLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgb2FfcmVwb3J0MFsxXSwgb2FfcmVwb3J0MFsxXSk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlndF9kZWJ1ZygidGltZXN0YW1wMSA9 ICV1LzB4JXhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv YV9yZXBvcnQxWzFdLCBvYV9yZXBvcnQxWzFdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K KworICAgICAgICAgICAgICAgICAgICAgICAgaWd0X2Fzc2VydF9lcSh0aW1lc3RhbXBfZGVsdGEs IGV4cGVjdGVkX3RpbWVzdGFtcF9kZWx0YSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGMw ID0gKHVpbnQzMl90ICopKCgodWludDhfdCAqKW9hX3JlcG9ydDApICsgMjI0IC8qIEMgb2Zmc2V0 ICovKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGMxID0gKHVpbnQzMl90ICopKCgodWludDhf dCAqKW9hX3JlcG9ydDEpICsgMjI0IC8qIEMgb2Zmc2V0ICovKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGNsb2NrX2RlbHRhID0gYzFbMl0gLSBjMFsyXTsKKworICAgICAgICAgICAgICAgICAg ICAgICAgdGltZV9kZWx0YSA9IHRpbWViYXNlX3NjYWxlKHRpbWVzdGFtcF9kZWx0YSk7CisKKyAg ICAgICAgICAgICAgICAgICAgICAgIGZyZXEgPSAoKHVpbnQ2NF90KWNsb2NrX2RlbHRhICogMTAw MCkgLyB0aW1lX2RlbHRhOworICAgICAgICAgICAgICAgICAgICAgICAgaWd0X2RlYnVnKCJJVEVS ICVkOiB0aW1lIGRlbHRhID0gJSJQUkl1MzIiKG5zKSBjbG9jayBkZWx0YSA9ICUiUFJJdTMyIiBm cmVxID0gJSJQUkl1MzIiKG1oeilcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaiwgdGltZV9kZWx0YSwgY2xvY2tfZGVsdGEsIGZyZXEpOworCisgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoZnJlcSA9PSBndF9mcmVxX21oeikKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbl9mcmVxX21hdGNoZXMrKzsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg ICAgICAgICBpZ3RfZGVidWcoIm51bWJlciBvZiBpdGVyYXRpb25zIHdpdGggZXhwZWN0ZWQgY2xv Y2sgZnJlcXVlbmN5ID0gJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5fZnJlcV9t YXRjaGVzKTsKKworICAgICAgICAgICAgICAgIC8qIERvbid0IGFzc2VydCB0aGUgY2FsY3VsYXRl ZCBmcmVxdWVuY3kgZm9yIGV4dHJlbWVseSBzaG9ydAorICAgICAgICAgICAgICAgICAqIGR1cmF0 aW9ucy4uLiAqLworICAgICAgICAgICAgICAgIGlmIChpID4gMykKKyAgICAgICAgICAgICAgICAg ICAgICAgIGlndF9hc3NlcnQobl9mcmVxX21hdGNoZXMgPj0gNyk7CisgICAgICAgIH0KKworICAg ICAgICBndF9mcmVxdWVuY3lfcmFuZ2VfcmVzdG9yZSgpOworfQorCisvKiBUaGUgT0EgZXhwb25l bnQgc2VsZWN0cyBhIHRpbWVzdGFtcCBjb3VudGVyIGJpdCB0byB0cmlnZ2VyIHJlcG9ydHMgb24u CisgKgorICogV2l0aCBhIDY0Yml0IHRpbWVzdGFtcCBhbmQgbGVhc3Qgc2lnbmlmaWNhbnQgYml0 IGFwcHJveCA9PSA4MG5zIHRoZW4gdGhlIE1TQgorICogZXF1YXRlcyB0byA+IDQwIHRob3VzYW5k IHllYXJzIGFuZCBpc24ndCBleHBvc2VkIHZpYSB0aGUgaTkxNSBwZXJmIGludGVyZmFjZS4KKyAq CisgKiBUaGUgbWF4IGV4cG9uZW50IGV4cG9zZWQgaXMgZXhwZWN0ZWQgdG8gYmUgMzEsIHdoaWNo IGlzIHN0aWxsIGEgZmFpcmx5CisgKiByaWRpY3Vsb3VzIHBlcmlvZCAoPjVtaW4pIGJ1dCBpcyB0 aGUgbWF4aW11bSBleHBvbmVudCB3aGVyZSBpdCdzIHN0aWxsCisgKiBwb3NzaWJsZSB0byB1c2Ug cGVyaW9kaWMgc2FtcGxpbmcgYXMgYSBtZWFucyBmb3IgdHJhY2tpbmcgdGhlIG92ZXJmbG93IG9m CisgKiAzMmJpdCBPQSByZXBvcnQgdGltZXN0YW1wcy4KKyAqLworc3RhdGljIHZvaWQKK3Rlc3Rf aW52YWxpZF9vYV9leHBvbmVudCh2b2lkKQoreworICAgICAgICB1aW50NjRfdCBwcm9wZXJ0aWVz W10gPSB7CisgICAgICAgICAgICAgICAgLyogSW5jbHVkZSBPQSByZXBvcnRzIGluIHNhbXBsZXMg Ki8KKyAgICAgICAgICAgICAgICBEUk1fSTkxNV9QRVJGX1BST1BfU0FNUExFX09BLCB0cnVlLAor CisgICAgICAgICAgICAgICAgLyogT0EgdW5pdCBjb25maWd1cmF0aW9uICovCisgICAgICAgICAg ICAgICAgRFJNX0k5MTVfUEVSRl9QUk9QX09BX01FVFJJQ1NfU0VULCBoc3dfcmVuZGVyX2Jhc2lj X2lkLAorICAgICAgICAgICAgICAgIERSTV9JOTE1X1BFUkZfUFJPUF9PQV9GT1JNQVQsIEk5MTVf T0FfRk9STUFUX0E0NV9COF9DOCwKKyAgICAgICAgICAgICAgICBEUk1fSTkxNV9QRVJGX1BST1Bf T0FfRVhQT05FTlQsIDMxLCAvKiBtYXhpbXVtIGV4cG9uZW50IGV4cGVjdGVkCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmUgYWNjZXB0 ZWQgKi8KKyAgICAgICAgfTsKKyAgICAgICAgc3RydWN0IGRybV9pOTE1X3BlcmZfb3Blbl9wYXJh bSBwYXJhbSA9IHsKKyAgICAgICAgICAgICAgICAuZmxhZ3MgPSBJOTE1X1BFUkZfRkxBR19GRF9D TE9FWEVDLAorICAgICAgICAgICAgICAgIC5udW1fcHJvcGVydGllcyA9IHNpemVvZihwcm9wZXJ0 aWVzKSAvIDE2LAorICAgICAgICAgICAgICAgIC5wcm9wZXJ0aWVzX3B0ciA9ICh1aW50NjRfdClw cm9wZXJ0aWVzLAorICAgICAgICB9OworICAgICAgICBpbnQgc3RyZWFtX2ZkID0gX19wZXJmX29w ZW4oZHJtX2ZkLCAmcGFyYW0pOworCisgICAgICAgIGNsb3NlKHN0cmVhbV9mZCk7CisKKyAgICAg ICAgZm9yIChpbnQgaSA9IDMyOyBpIDwgNjU7IGkrKykgeworICAgICAgICAgICAgICAgIHByb3Bl cnRpZXNbN10gPSBpOworICAgICAgICAgICAgICAgIGRvX2lvY3RsX2Vycihkcm1fZmQsIERSTV9J T0NUTF9JOTE1X1BFUkZfT1BFTiwgJnBhcmFtLCBFSU5WQUwpOworICAgICAgICB9Cit9CisKKy8q IFJldHVybiB0aGUgbGFyZ2VzdCBPQSBleHBvbmVudCB0aGF0IHdpbGwgc3RpbGwgcmVzdWx0IGlu IGEgc2FtcGxpbmcKKyAqIGZyZXF1ZW5jeSBoaWdoZXIgdGhhbiB0aGUgZ2l2ZW4gZnJlcXVlbmN5 LgorICovCitzdGF0aWMgaW50CittYXhfb2FfZXhwb25lbnRfZm9yX2hpZ2hlcl9mcmVxKHVpbnQ2 NF90IGZyZXEpCit7CisgICAgICAgIC8qIE5COiB0aW1lYmFzZV9zY2FsZSgpIHRha2VzIGEgdWlu dDMyX3QgYW5kIGFuIGV4cG9uZW50IG9mIDMwCisgICAgICAgICAqIHdvdWxkIGFscmVhZHkgcmVw cmVzZW50IGEgcGVyaW9kIG9mIH4zIG1pbnV0ZXMgc28gdGhlcmUncworICAgICAgICAgKiByZWFs bHkgbm8gbmVlZCB0byBjb25zaWRlciBoaWdoZXIgZXhwb25lbnRzLgorICAgICAgICAgKi8KKyAg ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzMDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdWlu dDY0X3Qgb2FfcGVyaW9kID0gdGltZWJhc2Vfc2NhbGUoMiA8PCBpKTsKKyAgICAgICAgICAgICAg ICB1aW50MzJfdCBvYV9mcmVxID0gTlNFQ19QRVJfU0VDIC8gb2FfcGVyaW9kOworCisgICAgICAg ICAgICAgICAgaWYgKG9hX2ZyZXEgPD0gZnJlcSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl dHVybiBtYXgoMCwgaSAtIDEpOworICAgICAgICB9CisKKyAgICAgICAgaWd0X2Fzc2VydCghInJl YWNoZWQiKTsKKyAgICAgICAgcmV0dXJuIC0xOworfQorCisvKiBUaGUgbG93ZXN0IHBlcmlvZGlj IHNhbXBsaW5nIGV4cG9uZW50IGVxdWF0ZXMgdG8gYSBwZXJpb2Qgb2YgMTYwIG5hbm9zZWNvbmRz CisgKiBvciBhIGZyZXF1ZW5jeSBvZiA2LjI1TUh6IHdoaWNoIGlzIG9ubHkgcG9zc2libGUgdG8g cmVxdWVzdCBhcyByb290IGJ5CisgKiBkZWZhdWx0LiBCeSBkZWZhdWx0IHRoZSBtYXhpbXVtIE9B IHNhbXBsaW5nIHJhdGUgaXMgMTAwS0h6CisgKi8KK3N0YXRpYyB2b2lkCit0ZXN0X2xvd19vYV9l eHBvbmVudF9wZXJtaXNzaW9ucyh2b2lkKQoreworICAgICAgICBpbnQgbWF4X2ZyZXEgPSByZWFk X3U2NF9maWxlKCIvcHJvYy9zeXMvZGV2L2k5MTUvb2FfbWF4X3NhbXBsZV9yYXRlIik7CisgICAg ICAgIGludCBiYWRfZXhwb25lbnQgPSBtYXhfb2FfZXhwb25lbnRfZm9yX2hpZ2hlcl9mcmVxKG1h eF9mcmVxKTsKKyAgICAgICAgaW50IG9rX2V4cG9uZW50ID0gYmFkX2V4cG9uZW50ICsgMTsKKyAg ICAgICAgdWludDY0X3QgcHJvcGVydGllc1tdID0geworICAgICAgICAgICAgICAgIC8qIEluY2x1 ZGUgT0EgcmVwb3J0cyBpbiBzYW1wbGVzICovCisgICAgICAgICAgICAgICAgRFJNX0k5MTVfUEVS Rl9QUk9QX1NBTVBMRV9PQSwgdHJ1ZSwKKworICAgICAgICAgICAgICAgIC8qIE9BIHVuaXQgY29u ZmlndXJhdGlvbiAqLworICAgICAgICAgICAgICAgIERSTV9JOTE1X1BFUkZfUFJPUF9PQV9NRVRS SUNTX1NFVCwgaHN3X3JlbmRlcl9iYXNpY19pZCwKKyAgICAgICAgICAgICAgICBEUk1fSTkxNV9Q RVJGX1BST1BfT0FfRk9STUFULCBJOTE1X09BX0ZPUk1BVF9BNDVfQjhfQzgsCisgICAgICAgICAg ICAgICAgRFJNX0k5MTVfUEVSRl9QUk9QX09BX0VYUE9ORU5ULCBiYWRfZXhwb25lbnQsCisgICAg ICAgIH07CisgICAgICAgIHN0cnVjdCBkcm1faTkxNV9wZXJmX29wZW5fcGFyYW0gcGFyYW0gPSB7 CisgICAgICAgICAgICAgICAgLmZsYWdzID0gSTkxNV9QRVJGX0ZMQUdfRkRfQ0xPRVhFQywKKyAg ICAgICAgICAgICAgICAubnVtX3Byb3BlcnRpZXMgPSBzaXplb2YocHJvcGVydGllcykgLyAxNiwK KyAgICAgICAgICAgICAgICAucHJvcGVydGllc19wdHIgPSAodWludDY0X3QpcHJvcGVydGllcywK KyAgICAgICAgfTsKKyAgICAgICAgdWludDY0X3Qgb2FfcGVyaW9kLCBvYV9mcmVxOworCisgICAg ICAgIGlndF9hc3NlcnRfZXEobWF4X2ZyZXEsIDEwMDAwMCk7CisKKyAgICAgICAgLyogQXZvaWQg RUFDQ0VTUyBlcnJvcnMgb3BlbmluZyBhIHN0cmVhbSB3aXRob3V0IENBUF9TWVNfQURNSU4gKi8K KyAgICAgICAgd3JpdGVfdTY0X2ZpbGUoIi9wcm9jL3N5cy9kZXYvaTkxNS9wZXJmX3N0cmVhbV9w YXJhbm9pZCIsIDApOworCisgICAgICAgIGlndF9mb3JrKGNoaWxkLCAxKSB7CisgICAgICAgICAg ICAgICAgaWd0X2Ryb3Bfcm9vdCgpOworCisgICAgICAgICAgICAgICAgZG9faW9jdGxfZXJyKGRy bV9mZCwgRFJNX0lPQ1RMX0k5MTVfUEVSRl9PUEVOLCAmcGFyYW0sIEVBQ0NFUyk7CisgICAgICAg IH0KKworICAgICAgICBpZ3Rfd2FpdGNoaWxkcmVuKCk7CisKKyAgICAgICAgcHJvcGVydGllc1s3 XSA9IG9rX2V4cG9uZW50OworCisgICAgICAgIGlndF9mb3JrKGNoaWxkLCAxKSB7CisgICAgICAg ICAgICAgICAgaW50IHN0cmVhbV9mZDsKKworICAgICAgICAgICAgICAgIGlndF9kcm9wX3Jvb3Qo KTsKKworICAgICAgICAgICAgICAgIHN0cmVhbV9mZCA9IF9fcGVyZl9vcGVuKGRybV9mZCwgJnBh cmFtKTsKKyAgICAgICAgICAgICAgICBjbG9zZShzdHJlYW1fZmQpOworICAgICAgICB9CisKKyAg ICAgICAgaWd0X3dhaXRjaGlsZHJlbigpOworCisgICAgICAgIG9hX3BlcmlvZCA9IHRpbWViYXNl X3NjYWxlKDIgPDwgb2tfZXhwb25lbnQpOworICAgICAgICBvYV9mcmVxID0gTlNFQ19QRVJfU0VD IC8gb2FfcGVyaW9kOworICAgICAgICB3cml0ZV91NjRfZmlsZSgiL3Byb2Mvc3lzL2Rldi9pOTE1 L29hX21heF9zYW1wbGVfcmF0ZSIsIG9hX2ZyZXEgLSAxMDApOworCisgICAgICAgIGlndF9mb3Jr KGNoaWxkLCAxKSB7CisgICAgICAgICAgICAgICAgaWd0X2Ryb3Bfcm9vdCgpOworCisgICAgICAg ICAgICAgICAgZG9faW9jdGxfZXJyKGRybV9mZCwgRFJNX0lPQ1RMX0k5MTVfUEVSRl9PUEVOLCAm cGFyYW0sIEVBQ0NFUyk7CisgICAgICAgIH0KKworICAgICAgICBpZ3Rfd2FpdGNoaWxkcmVuKCk7 CisKKyAgICAgICAgLyogcmVzdG9yZSB0aGUgZGVmYXVsdHMgKi8KKyAgICAgICAgd3JpdGVfdTY0 X2ZpbGUoIi9wcm9jL3N5cy9kZXYvaTkxNS9vYV9tYXhfc2FtcGxlX3JhdGUiLCAxMDAwMDApOwor ICAgICAgICB3cml0ZV91NjRfZmlsZSgiL3Byb2Mvc3lzL2Rldi9pOTE1L3BlcmZfc3RyZWFtX3Bh cmFub2lkIiwgMSk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3Blcl9jb250ZXh0X21vZGVfdW5w cml2aWxlZ2VkKHZvaWQpCit7CisgICAgICAgIHVpbnQ2NF90IHByb3BlcnRpZXNbXSA9IHsKKyAg ICAgICAgICAgICAgICAvKiBTaW5nbGUgY29udGV4dCBzYW1wbGluZyAqLworICAgICAgICAgICAg ICAgIERSTV9JOTE1X1BFUkZfUFJPUF9DVFhfSEFORExFLCBVSU5UNjRfTUFYLCAvKiB1cGRhdGVk IGJlbG93ICovCisKKyAgICAgICAgICAgICAgICAvKiBJbmNsdWRlIE9BIHJlcG9ydHMgaW4gc2Ft cGxlcyAqLworICAgICAgICAgICAgICAgIERSTV9JOTE1X1BFUkZfUFJPUF9TQU1QTEVfT0EsIHRy dWUsCisKKyAgICAgICAgICAgICAgICAvKiBPQSB1bml0IGNvbmZpZ3VyYXRpb24gKi8KKyAgICAg ICAgICAgICAgICBEUk1fSTkxNV9QRVJGX1BST1BfT0FfTUVUUklDU19TRVQsIGhzd19yZW5kZXJf YmFzaWNfaWQsCisgICAgICAgICAgICAgICAgRFJNX0k5MTVfUEVSRl9QUk9QX09BX0ZPUk1BVCwg STkxNV9PQV9GT1JNQVRfQTQ1X0I4X0M4LAorICAgICAgICAgICAgICAgIERSTV9JOTE1X1BFUkZf UFJPUF9PQV9FWFBPTkVOVCwgMTMsIC8qIDEgbWlsbGlzZWNvbmQgKi8KKyAgICAgICAgfTsKKyAg ICAgICAgc3RydWN0IGRybV9pOTE1X3BlcmZfb3Blbl9wYXJhbSBwYXJhbSA9IHsKKyAgICAgICAg ICAgICAgICAuZmxhZ3MgPSBJOTE1X1BFUkZfRkxBR19GRF9DTE9FWEVDLAorICAgICAgICAgICAg ICAgIC5udW1fcHJvcGVydGllcyA9IHNpemVvZihwcm9wZXJ0aWVzKSAvIDE2LAorICAgICAgICAg ICAgICAgIC5wcm9wZXJ0aWVzX3B0ciA9ICh1aW50NjRfdClwcm9wZXJ0aWVzLAorICAgICAgICB9 OworCisgICAgICAgIC8qIHNob3VsZCBiZSBkZWZhdWx0LCBidXQganVzdCB0byBiZSBzdXJlLi4u ICovCisgICAgICAgIHdyaXRlX3U2NF9maWxlKCIvcHJvYy9zeXMvZGV2L2k5MTUvcGVyZl9zdHJl YW1fcGFyYW5vaWQiLCAxKTsKKworICAgICAgICBpZ3RfZm9yayhjaGlsZCwgMSkgeworICAgICAg ICAgICAgICAgIGRybV9pbnRlbF9jb250ZXh0ICpjb250ZXh0OworICAgICAgICAgICAgICAgIGRy bV9pbnRlbF9idWZtZ3IgKmJ1Zm1ncjsKKyAgICAgICAgICAgICAgICBpbnQgc3RyZWFtX2ZkOwor CisgICAgICAgICAgICAgICAgaWd0X2Ryb3Bfcm9vdCgpOworCisgICAgICAgICAgICAgICAgYnVm bWdyID0gZHJtX2ludGVsX2J1Zm1ncl9nZW1faW5pdChkcm1fZmQsIDQwOTYpOworICAgICAgICAg ICAgICAgIGNvbnRleHQgPSBkcm1faW50ZWxfZ2VtX2NvbnRleHRfY3JlYXRlKGJ1Zm1ncik7CisK KyAgICAgICAgICAgICAgICBpZ3RfYXNzZXJ0KGNvbnRleHQpOworCisgICAgICAgICAgICAgICAg cHJvcGVydGllc1sxXSA9IGRybV9pbnRlbF9nZW1fY29udGV4dF9nZXRfY29udGV4dF9pZChjb250 ZXh0KTsKKworICAgICAgICAgICAgICAgIHN0cmVhbV9mZCA9IF9fcGVyZl9vcGVuKGRybV9mZCwg JnBhcmFtKTsKKyAgICAgICAgICAgICAgICBjbG9zZShzdHJlYW1fZmQpOworICAgICAgICB9CisK KyAgICAgICAgaWd0X3dhaXRjaGlsZHJlbigpOworfQorCitzdGF0aWMgaW50NjRfdAorZ2V0X3Rp bWUodm9pZCkKK3sKKyAgICAgICAgc3RydWN0IHRpbWVzcGVjIHRzOworCisgICAgICAgIGNsb2Nr X2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmdHMpOworCisgICAgICAgIHJldHVybiB0cy50dl9z ZWMgKiAxMDAwMDAwMDAwICsgdHMudHZfbnNlYzsKK30KKworLyogTm90ZTogVGhlIGludGVyZmFj ZSBkb2Vzbid0IGN1cnJlbnRseSBwcm92aWRlIHN0cmljdCBndWFyYW50ZWVzIG9yIGNvbnRyb2wK KyAqIG92ZXIgdGhlIHVwcGVyIGJvdW5kIGZvciBob3cgbG9uZyBpdCBtaWdodCB0YWtlIGZvciBh IFBPTExJTiBldmVudCBhZnRlcgorICogc29tZSBPQSByZXBvcnQgaXMgd3JpdHRlbiBieSB0aGUg T0EgdW5pdC4KKyAqCisgKiBUaGUgcGxhbiBpcyB0byBhZGQgYSBwcm9wZXJ0eSBsYXRlciB0aGF0 IGdpdmVzIHNvbWUgY29udHJvbCBvdmVyIHRoZSBtYXhpbXVtCisgKiBsYXRlbmN5LCBidXQgZm9y IG5vdyB3ZSBleHBlY3QgaXQgaXMgdHVuZWQgZm9yIGEgZmFpcmx5IGxvdyBsYXRlbmN5CisgKiBz dWl0YWJsZSBmb3IgYXBwbGljYXRpb25zIHdhbnRpbmcgdG8gcHJvdmlkZSBsaXZlIGZlZWRiYWNr IGZvciBjYXB0dXJlZAorICogbWV0cmljcy4KKyAqCisgKiBBdCB0aGUgdGltZSBvZiB3cml0aW5n IHRoaXMgdGVzdCB0aGUgZHJpdmVyIHdhcyB1c2luZyBhIGZpeGVkIDIwMEh6IGhydGltZXIKKyAq IHJlZ2FyZGxlc3Mgb2YgdGhlIE9BIHNhbXBsaW5nIGV4cG9uZW50LgorICoKKyAqIFRoZXJlIGlz IG5vIGxvd2VyIGJvdW5kIHNpbmNlIGEgc3RyZWFtIGNvbmZpZ3VyZWQgZm9yIHBlcmlvZGljIHNh bXBsaW5nIG1heQorICogc3RpbGwgY29udGFpbiBvdGhlciBhdXRvbWF0aWNhbGx5IHRyaWdnZXJl ZCByZXBvcnRzLgorICoKKyAqIFdoYXQgd2UgdHJ5IGFuZCBjaGVjayBmb3IgaGVyZSBpcyB0aGF0 IGJsb2NraW5nIHJlYWRzIGRvbid0IHJldHVybiBFQUdBSU4KKyAqIGFuZCB0aGF0IHdlIGFyZW4n dCBzcGVuZGluZyBhbnkgc2lnbmlmaWNhbnQgdGltZSBidXJuaW5nIHRoZSBjcHUgaW4KKyAqIGtl cm5lbHNwYWNlLgorICovCitzdGF0aWMgdm9pZAordGVzdF9ibG9ja2luZyh2b2lkKQoreworICAg ICAgICAvKiA0MCBtaWxsaXNlY29uZHMKKyAgICAgICAgICoKKyAgICAgICAgICogSGF2aW5nIGEg cGVyaW9kIHNvbWV3aGF0ID4gc3lzY29uZihfU0NfQ0xLX1RDSykgaGVscHMgdG8gc3RvcAorICAg ICAgICAgKiBzY2hlZHVsaW5nIChsaWFibGUgdG8ga2ljayBpbiB3aGVuIHdlIG1ha2UgYmxvY2tp bmcgcG9sbCgpcy9yZWFkcykKKyAgICAgICAgICogZnJvbSBpbnRlcmZlcmluZyB3aXRoIHRoZSB0 ZXN0LgorICAgICAgICAgKi8KKyAgICAgICAgaW50IG9hX2V4cG9uZW50ID0gMTg7CisgICAgICAg IHVpbnQ2NF90IHByb3BlcnRpZXNbXSA9IHsKKyAgICAgICAgICAgICAgICAvKiBJbmNsdWRlIE9B IHJlcG9ydHMgaW4gc2FtcGxlcyAqLworICAgICAgICAgICAgICAgIERSTV9JOTE1X1BFUkZfUFJP UF9TQU1QTEVfT0EsIHRydWUsCisKKyAgICAgICAgICAgICAgICAvKiBPQSB1bml0IGNvbmZpZ3Vy YXRpb24gKi8KKyAgICAgICAgICAgICAgICBEUk1fSTkxNV9QRVJGX1BST1BfT0FfTUVUUklDU19T RVQsIGhzd19yZW5kZXJfYmFzaWNfaWQsCisgICAgICAgICAgICAgICAgRFJNX0k5MTVfUEVSRl9Q Uk9QX09BX0ZPUk1BVCwgSTkxNV9PQV9GT1JNQVRfQTQ1X0I4X0M4LAorICAgICAgICAgICAgICAg IERSTV9JOTE1X1BFUkZfUFJPUF9PQV9FWFBPTkVOVCwgb2FfZXhwb25lbnQsCisgICAgICAgIH07 CisgICAgICAgIHN0cnVjdCBkcm1faTkxNV9wZXJmX29wZW5fcGFyYW0gcGFyYW0gPSB7CisgICAg ICAgICAgICAgICAgLmZsYWdzID0gSTkxNV9QRVJGX0ZMQUdfRkRfQ0xPRVhFQywKKyAgICAgICAg ICAgICAgICAubnVtX3Byb3BlcnRpZXMgPSBzaXplb2YocHJvcGVydGllcykgLyAxNiwKKyAgICAg ICAgICAgICAgICAucHJvcGVydGllc19wdHIgPSAodWludDY0X3QpcHJvcGVydGllcywKKyAgICAg ICAgfTsKKyAgICAgICAgaW50IHN0cmVhbV9mZCA9IF9fcGVyZl9vcGVuKGRybV9mZCwgJnBhcmFt KTsKKyAgICAgICAgdWludDhfdCBidWZbMTAyNCAqIDEwMjRdOworICAgICAgICBzdHJ1Y3QgdG1z IHN0YXJ0X3RpbWVzOworICAgICAgICBzdHJ1Y3QgdG1zIGVuZF90aW1lczsKKyAgICAgICAgaW50 NjRfdCB1c2VyX25zLCBrZXJuZWxfbnM7CisgICAgICAgIGludDY0X3QgdGlja19ucyA9IDEwMDAw MDAwMDAgLyBzeXNjb25mKF9TQ19DTEtfVENLKTsKKyAgICAgICAgaW50NjRfdCBzdGFydDsKKyAg ICAgICAgaW50IG4gPSAwOworCisgICAgICAgIHRpbWVzKCZzdGFydF90aW1lcyk7CisKKyAgICAg ICAgLyogTG9vcCBmb3IgNjAwbXMgcGVyZm9ybWluZyBibG9ja2luZyByZWFkcyB3aGlsZSB0aGUg SFcgaXMgc2FtcGxpbmcgYXQKKyAgICAgICAgICogfjI1SHosIHdpdGggdGhlIGV4cGVjdGF0aW9u IHRoYXQgd2Ugc3BlbmQgbW9zdCBvZiBvdXIgdGltZSBibG9ja2VkCisgICAgICAgICAqIGluIHRo ZSBrZXJuZWwsIGFuZCBzaG91bGRuJ3QgYmUgYnVybmluZyBjcHUgY3ljbGVzIGluIHRoZSBrZXJu ZWwgaW4KKyAgICAgICAgICogYXNzb2NpYXRpb24gd2l0aCB0aGlzIHByb2Nlc3MgKHZlcmlmaWVk IGJ5IGxvb2tpbmcgYXQgc3RpbWUgYmVmb3JlCisgICAgICAgICAqIGFuZCBhZnRlciBsb29wKS4K KyAgICAgICAgICovCisgICAgICAgIGZvciAoc3RhcnQgPSBnZXRfdGltZSgpOyAoZ2V0X3RpbWUo KSAtIHN0YXJ0KSA8IDYwMDAwMDAwMDsgLyogbm9wICovKSB7CisgICAgICAgICAgICAgICAgaW50 IHJldDsKKworICAgICAgICAgICAgICAgIHdoaWxlICgocmV0ID0gcmVhZChzdHJlYW1fZmQsIGJ1 Ziwgc2l6ZW9mKGJ1ZikpKSA8IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgZXJybm8gPT0g RUlOVFIpCisgICAgICAgICAgICAgICAgICAgICAgICA7CisKKyAgICAgICAgICAgICAgICBpZ3Rf YXNzZXJ0KHJldCA+IDApOworCisgICAgICAgICAgICAgICAgbisrOworICAgICAgICB9CisKKyAg ICAgICAgdGltZXMoJmVuZF90aW1lcyk7CisKKyAgICAgICAgLyogVXNpbmcgbmFub3NlY29uZCB1 bml0cyBpcyBmYWlybHkgc2lsbHkgaGVyZSwgZ2l2ZW4gdGhlIHRpY2sgaW4tCisgICAgICAgICAq IHByZWNpc2lvbiAtIGFoIHdlbGwsIGl0J3MgY29uc2lzdGVudCB3aXRoIHRoZSBnZXRfdGltZSgp IHVuaXRzLgorICAgICAgICAgKi8KKyAgICAgICAgdXNlcl9ucyA9IChlbmRfdGltZXMudG1zX3V0 aW1lIC0gc3RhcnRfdGltZXMudG1zX3V0aW1lKSAqIHRpY2tfbnM7CisgICAgICAgIGtlcm5lbF9u cyA9IChlbmRfdGltZXMudG1zX3N0aW1lIC0gc3RhcnRfdGltZXMudG1zX3N0aW1lKSAqIHRpY2tf bnM7CisKKyAgICAgICAgaWd0X2RlYnVnKCIlZCBibG9ja2luZyByZWFkcyBpbiA1MDAgbWlsbGlz ZWNvbmRzLCB3aXRoIDFLSHogT0Egc2FtcGxpbmdcbiIsIG4pOworICAgICAgICBpZ3RfZGVidWco InRpbWUgaW4gdXNlcnNwYWNlID0gJSJQUkl1NjQibnMgKHN0YXJ0IHV0aW1lID0gJWQsIGVuZCA9 ICVkLCBucyB0aWNrcyBwZXIgc2VjID0gJWQpXG4iLAorICAgICAgICAgICAgICAgICAgdXNlcl9u cywgKGludClzdGFydF90aW1lcy50bXNfdXRpbWUsIChpbnQpZW5kX3RpbWVzLnRtc191dGltZSwg KGludCl0aWNrX25zKTsKKyAgICAgICAgaWd0X2RlYnVnKCJ0aW1lIGluIGtlcm5lbHNwYWNlID0g JSJQUkl1NjQibnMgKHN0YXJ0IHN0aW1lID0gJWQsIGVuZCA9ICVkLCBucyB0aWNrcyBwZXIgc2Vj ID0gJWQpXG4iLAorICAgICAgICAgICAgICAgICAga2VybmVsX25zLCAoaW50KXN0YXJ0X3RpbWVz LnRtc19zdGltZSwgKGludCllbmRfdGltZXMudG1zX3N0aW1lLCAoaW50KXRpY2tfbnMpOworCisg ICAgICAgIC8qIFdpdGggY29tcGxldGVseSBicm9rZW4gYmxvY2tpbmcgKGJ1dCBhbHNvIG5vdCBy ZXR1cm5pbmcgYW4gZXJyb3IpIHdlCisgICAgICAgICAqIGNvdWxkIGVuZCB1cCB3aXRoIGFuIG9w ZW4gbG9vcCwgaG9wZWZ1bGx5IHJlY29nbmlzYWJsZSB3aXRoID4gMTUKKyAgICAgICAgICogKDYw MC80MClpdGVyYXRpb25zLgorICAgICAgICAgKi8KKyAgICAgICAgaWd0X2Fzc2VydChuIDw9IDE1 KTsKKworICAgICAgICAvKiBJdCdzIGEgYml0IHRyaWNreSB0byBwdXQgYSBsb3dlciBsaW1pdCBo ZXJlLCBidXQgd2UgZXhwZWN0IGEKKyAgICAgICAgICogcmVsYXRpdmVseSBsb3cgbGF0ZW5jeSBm b3Igc2VlaW5nIHJlcG9ydHMsIHdoaWxlIHdlIGRvbid0IGN1cnJlbnRseQorICAgICAgICAgKiBn aXZlIGFueSBjb250cm9sIG92ZXIgdGhpcyBpbiB0aGUgYXBpLgorICAgICAgICAgKgorICAgICAg ICAgKiBMaW1pdGVkIHRvIGEgNSBtaWxsaXNlY29uZCBsYXRlbmN5IGFuZCA0NW1zICh3b3JzdCBj YXNlKQorICAgICAgICAgKiBwZXItaXRlcmF0aW9uIHRoYXQgY291bGQgZ2l2ZSAxMy4zIGl0ZXJh dGlvbnMuIFJvdW5kaW5nIGdpdmVzIGEgdGlueQorICAgICAgICAgKiBiaXQgbW9yZSBsYXRlbmN5 IHNsYWNrICg2bXMpLi4uCisgICAgICAgICAqLworICAgICAgICBpZ3RfYXNzZXJ0KG4gPiAxMyk7 CisKKyAgICAgICAgLyogQSBiaXQgdHJpY2t5IHRvIHB1dCBhIG51bWJlciBvbiB0aGlzLCBidXQg d2UgZG9uJ3QgZXhwZWN0IHRoZSBrZXJuZWwKKyAgICAgICAgICogdG8gdXNlIGFueSBzaWduaWZp Y2FudCBjcHUgd2hpbGUgd2FpdGluZyBhbmQgZ2l2ZW4gdGhlIGluIHByZWNpc2lvbgorICAgICAg ICAgKiBvZiBzdGltZSAobXVsdGlwbGUgb2YgQ0xLX1RDSykgd2UgZXhwZWN0IHRoaXMgdG8gcm91 bmQgdG8gemVyby4KKyAgICAgICAgICovCisgICAgICAgIGlndF9hc3NlcnRfZXEoa2VybmVsX25z LCAwKTsKKworICAgICAgICBjbG9zZShzdHJlYW1fZmQpOworfQorCitzdGF0aWMgdm9pZAordGVz dF9wb2xsaW5nKHZvaWQpCit7CisgICAgICAgIC8qIDQwIG1pbGxpc2Vjb25kcworICAgICAgICAg KgorICAgICAgICAgKiBIYXZpbmcgYSBwZXJpb2Qgc29tZXdoYXQgPiBzeXNjb25mKF9TQ19DTEtf VENLKSBoZWxwcyB0byBzdG9wCisgICAgICAgICAqIHNjaGVkdWxpbmcgKGxpYWJsZSB0byBraWNr IGluIHdoZW4gd2UgbWFrZSBibG9ja2luZyBwb2xsKClzL3JlYWRzKQorICAgICAgICAgKiBmcm9t IGludGVyZmVyaW5nIHdpdGggdGhlIHRlc3QuCisgICAgICAgICAqLworICAgICAgICBpbnQgb2Ff ZXhwb25lbnQgPSAxODsKKyAgICAgICAgdWludDY0X3QgcHJvcGVydGllc1tdID0geworICAgICAg ICAgICAgICAgIC8qIEluY2x1ZGUgT0EgcmVwb3J0cyBpbiBzYW1wbGVzICovCisgICAgICAgICAg ICAgICAgRFJNX0k5MTVfUEVSRl9QUk9QX1NBTVBMRV9PQSwgdHJ1ZSwKKworICAgICAgICAgICAg ICAgIC8qIE9BIHVuaXQgY29uZmlndXJhdGlvbiAqLworICAgICAgICAgICAgICAgIERSTV9JOTE1 X1BFUkZfUFJPUF9PQV9NRVRSSUNTX1NFVCwgaHN3X3JlbmRlcl9iYXNpY19pZCwKKyAgICAgICAg ICAgICAgICBEUk1fSTkxNV9QRVJGX1BST1BfT0FfRk9STUFULCBJOTE1X09BX0ZPUk1BVF9BNDVf QjhfQzgsCisgICAgICAgICAgICAgICAgRFJNX0k5MTVfUEVSRl9QUk9QX09BX0VYUE9ORU5ULCBv YV9leHBvbmVudCwKKyAgICAgICAgfTsKKyAgICAgICAgc3RydWN0IGRybV9pOTE1X3BlcmZfb3Bl bl9wYXJhbSBwYXJhbSA9IHsKKyAgICAgICAgICAgICAgICAuZmxhZ3MgPSBJOTE1X1BFUkZfRkxB R19GRF9DTE9FWEVDIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIEk5MTVfUEVSRl9GTEFHX0ZE X05PTkJMT0NLLAorICAgICAgICAgICAgICAgIC5udW1fcHJvcGVydGllcyA9IHNpemVvZihwcm9w ZXJ0aWVzKSAvIDE2LAorICAgICAgICAgICAgICAgIC5wcm9wZXJ0aWVzX3B0ciA9ICh1aW50NjRf dClwcm9wZXJ0aWVzLAorICAgICAgICB9OworICAgICAgICBpbnQgc3RyZWFtX2ZkID0gX19wZXJm X29wZW4oZHJtX2ZkLCAmcGFyYW0pOworICAgICAgICB1aW50OF90IGJ1ZlsxMDI0ICogMTAyNF07 CisgICAgICAgIHN0cnVjdCB0bXMgc3RhcnRfdGltZXM7CisgICAgICAgIHN0cnVjdCB0bXMgZW5k X3RpbWVzOworICAgICAgICBpbnQ2NF90IHVzZXJfbnMsIGtlcm5lbF9uczsKKyAgICAgICAgaW50 NjRfdCB0aWNrX25zID0gMTAwMDAwMDAwMCAvIHN5c2NvbmYoX1NDX0NMS19UQ0spOworICAgICAg ICBpbnQ2NF90IHN0YXJ0OworICAgICAgICBpbnQgbiA9IDA7CisKKyAgICAgICAgdGltZXMoJnN0 YXJ0X3RpbWVzKTsKKworICAgICAgICAvKiBMb29wIGZvciA2MDBtcyBwZXJmb3JtaW5nIGJsb2Nr aW5nIHBvbGxzIHdoaWxlIHRoZSBIVyBpcyBzYW1wbGluZyBhdAorICAgICAgICAgKiB+MjVIeiwg d2l0aCB0aGUgZXhwZWN0YXRpb24gdGhhdCB3ZSBzcGVuZCBtb3N0IG9mIG91ciB0aW1lIGJsb2Nr ZWQKKyAgICAgICAgICogaW4gdGhlIGtlcm5lbCwgYW5kIHNob3VsZG4ndCBiZSBidXJuaW5nIGNw dSBjeWNsZXMgaW4gdGhlIGtlcm5lbCBpbgorICAgICAgICAgKiBhc3NvY2lhdGlvbiB3aXRoIHRo aXMgcHJvY2VzcyAodmVyaWZpZWQgYnkgbG9va2luZyBhdCBzdGltZSBiZWZvcmUKKyAgICAgICAg ICogYW5kIGFmdGVyIGxvb3ApLgorICAgICAgICAgKi8KKyAgICAgICAgZm9yIChzdGFydCA9IGdl dF90aW1lKCk7IChnZXRfdGltZSgpIC0gc3RhcnQpIDwgNjAwMDAwMDAwOyAvKiBub3AgKi8pIHsK KyAgICAgICAgICAgICAgICBzdHJ1Y3QgcG9sbGZkIHBvbGxmZCA9IHsgLmZkID0gc3RyZWFtX2Zk LCAuZXZlbnRzID0gUE9MTElOIH07CisgICAgICAgICAgICAgICAgaW50IHJldDsKKworICAgICAg ICAgICAgICAgIHdoaWxlICgocmV0ID0gcG9sbCgmcG9sbGZkLCAxLCAtMSkpIDwgMCAmJgorICAg ICAgICAgICAgICAgICAgICAgICBlcnJubyA9PSBFSU5UUikKKyAgICAgICAgICAgICAgICAgICAg ICAgIDsKKyAgICAgICAgICAgICAgICBpZ3RfYXNzZXJ0X2VxKHJldCwgMSk7CisgICAgICAgICAg ICAgICAgaWd0X2Fzc2VydChwb2xsZmQucmV2ZW50cyAmIFBPTExJTik7CisKKyAgICAgICAgICAg ICAgICB3aGlsZSAoKHJldCA9IHJlYWQoc3RyZWFtX2ZkLCBidWYsIHNpemVvZihidWYpKSkgPCAw ICYmCisgICAgICAgICAgICAgICAgICAgICAgIGVycm5vID09IEVJTlRSKQorICAgICAgICAgICAg ICAgICAgICAgICAgOworCisgICAgICAgICAgICAgICAgLyogRG9uJ3QgZXhwZWN0IHRvIHNlZSBF QUdBSU4gaWYgd2UndmUgaGFkIGEgUE9MTElOIGV2ZW50CisgICAgICAgICAgICAgICAgICoKKyAg ICAgICAgICAgICAgICAgKiBYWFg6IGFjdHVhbGx5IHRoaXMgaXMgdGVjaG5pY2FsbHkgb3Zlcmx5 IHN0cmljdCBzaW5jZSB3ZSBkbworICAgICAgICAgICAgICAgICAqIGtub3dpbmdseSBhbGxvdyBm YWxzZSBwb3NpdGl2ZSBQT0xMSU4gZXZlbnRzLiBBdCBsZWFzdCBpbgorICAgICAgICAgICAgICAg ICAqIHRoZSBmdXR1cmUgd2hlbiBzdXBwb3J0aW5nIGNvbnRleHQgZmlsdGVyaW5nIG9mIG1ldHJp Y3MgZm9yCisgICAgICAgICAgICAgICAgICogR2VuOCsgaGFuZGxlZCBpbiB0aGUga2VybmVsIHRo ZW4gUE9MTElOIGV2ZW50cyBtYXkgYmUKKyAgICAgICAgICAgICAgICAgKiBkZWxpdmVyZWQgd2hl biB3ZSBrbm93IHRoZXJlIGFyZSBwZW5kaW5nIHJlcG9ydHMgdG8gcHJvY2VzcworICAgICAgICAg ICAgICAgICAqIGJ1dCBiZWZvcmUgd2UndmUgZG9uZSBhbnkgZmlsdGVyaW5nIHRvIGtub3cgZm9y IGNlcnRhaW4gdGhhdAorICAgICAgICAgICAgICAgICAqIGFueSByZXBvcnRzIGFyZSBkZXN0aW5l ZCB0byBiZSBjb3BpZWQgdG8gdXNlcnNwYWNlLgorICAgICAgICAgICAgICAgICAqCisgICAgICAg ICAgICAgICAgICogU3RpbGwsIGZvciBub3cgaXQncyBhIHJlYXNvbmFibGUgc2FuaXR5IGNoZWNr LgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKQorICAg ICAgICAgICAgICAgICAgICAgICAgaWd0X2RlYnVnKCJVbmV4cGVjdGVkIGVycm9yIHdoZW4gcmVh ZGluZyBhZnRlciBwb2xsID0gJWRcbiIsIGVycm5vKTsKKyAgICAgICAgICAgICAgICBpZ3RfYXNz ZXJ0X25lcShyZXQsIC0xKTsKKworICAgICAgICAgICAgICAgIC8qIEF0IHRoaXMgcG9pbnQsIGFm dGVyIGNvbnN1bWluZyBwZW5kaW5nIHJlcG9ydHMgKGFuZCBob3BpbmcKKyAgICAgICAgICAgICAg ICAgKiB0aGUgc2NoZWR1bGVyIGhhc24ndCBzdG9wcGVkIHVzIGZvciB0b28gbG9uZyB3ZSBub3cK KyAgICAgICAgICAgICAgICAgKiBleHBlY3QgRUFHQUlOIG9uIHJlYWQuCisgICAgICAgICAgICAg ICAgICovCisgICAgICAgICAgICAgICAgd2hpbGUgKChyZXQgPSByZWFkKHN0cmVhbV9mZCwgYnVm LCBzaXplb2YoYnVmKSkpIDwgMCAmJgorICAgICAgICAgICAgICAgICAgICAgICBlcnJubyA9PSBF SU5UUikKKyAgICAgICAgICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgICAgICBpZ3RfYXNz ZXJ0X2VxKHJldCwgLTEpOworICAgICAgICAgICAgICAgIGlndF9hc3NlcnRfZXEoZXJybm8sIEVB R0FJTik7CisKKyAgICAgICAgICAgICAgICBuKys7CisgICAgICAgIH0KKworICAgICAgICB0aW1l cygmZW5kX3RpbWVzKTsKKworICAgICAgICAvKiBVc2luZyBuYW5vc2Vjb25kIHVuaXRzIGlzIGZh aXJseSBzaWxseSBoZXJlLCBnaXZlbiB0aGUgdGljayBpbi0KKyAgICAgICAgICogcHJlY2lzaW9u IC0gYWggd2VsbCwgaXQncyBjb25zaXN0ZW50IHdpdGggdGhlIGdldF90aW1lKCkgdW5pdHMuCisg ICAgICAgICAqLworICAgICAgICB1c2VyX25zID0gKGVuZF90aW1lcy50bXNfdXRpbWUgLSBzdGFy dF90aW1lcy50bXNfdXRpbWUpICogdGlja19uczsKKyAgICAgICAga2VybmVsX25zID0gKGVuZF90 aW1lcy50bXNfc3RpbWUgLSBzdGFydF90aW1lcy50bXNfc3RpbWUpICogdGlja19uczsKKworICAg ICAgICBpZ3RfZGVidWcoIiVkIGJsb2NraW5nIHBvbGwoKXMgaW4gNjAwIG1pbGxpc2Vjb25kcywg d2l0aCAyNUh6IE9BIHNhbXBsaW5nXG4iLCBuKTsKKyAgICAgICAgaWd0X2RlYnVnKCJ0aW1lIGlu IHVzZXJzcGFjZSA9ICUiUFJJdTY0Im5zIChzdGFydCB1dGltZSA9ICVkLCBlbmQgPSAlZCwgbnMg dGlja3MgcGVyIHNlYyA9ICVkKVxuIiwKKyAgICAgICAgICAgICAgICAgIHVzZXJfbnMsIChpbnQp c3RhcnRfdGltZXMudG1zX3V0aW1lLCAoaW50KWVuZF90aW1lcy50bXNfdXRpbWUsIChpbnQpdGlj a19ucyk7CisgICAgICAgIGlndF9kZWJ1ZygidGltZSBpbiBrZXJuZWxzcGFjZSA9ICUiUFJJdTY0 Im5zIChzdGFydCBzdGltZSA9ICVkLCBlbmQgPSAlZCwgbnMgdGlja3MgcGVyIHNlYyA9ICVkKVxu IiwKKyAgICAgICAgICAgICAgICAgIGtlcm5lbF9ucywgKGludClzdGFydF90aW1lcy50bXNfc3Rp bWUsIChpbnQpZW5kX3RpbWVzLnRtc19zdGltZSwgKGludCl0aWNrX25zKTsKKworICAgICAgICAv KiBXaXRoIGNvbXBsZXRlbHkgYnJva2VuIGJsb2NraW5nIHdoaWxlIHBvbGxpbmcgKGJ1dCBzdGls bCBzb21laG93CisgICAgICAgICAqIHJlcG9ydGluZyBhIFBPTExJTiBldmVudCkgd2UgY291bGQg ZW5kIHVwIHdpdGggYW4gb3BlbiBsb29wLAorICAgICAgICAgKiBob3BlZnVsbHkgcmVjb2duaXNh YmxlIHdpdGggPiAxNSAoNjAwLzQwKWl0ZXJhdGlvbnMuCisgICAgICAgICAqLworICAgICAgICBp Z3RfYXNzZXJ0KG4gPD0gMTUpOworCisgICAgICAgIC8qIEl0J3MgYSBiaXQgdHJpY2t5IHRvIHB1 dCBhIGxvd2VyIGxpbWl0IGhlcmUsIGJ1dCB3ZSBleHBlY3QgYQorICAgICAgICAgKiByZWxhdGl2 ZWx5IGxvdyBsYXRlbmN5IGZvciBzZWVpbmcgcmVwb3J0cywgd2hpbGUgd2UgZG9uJ3QgY3VycmVu dGx5CisgICAgICAgICAqIGdpdmUgYW55IGNvbnRyb2wgb3ZlciB0aGlzIGluIHRoZSBhcGkuCisg ICAgICAgICAqCisgICAgICAgICAqIExpbWl0ZWQgdG8gYSA1IG1pbGxpc2Vjb25kIGxhdGVuY3kg YW5kIDQ1bXMgKHdvcnN0IGNhc2UpCisgICAgICAgICAqIHBlci1pdGVyYXRpb24gdGhhdCBjb3Vs ZCBnaXZlIDEzLjMgaXRlcmF0aW9ucy4gUm91bmRpbmcgZ2l2ZXMgYSB0aW55CisgICAgICAgICAq IGJpdCBtb3JlIGxhdGVuY3kgc2xhY2sgKDZtcykuLi4KKyAgICAgICAgICovCisgICAgICAgIGln dF9hc3NlcnQobiA+IDEzKTsKKworICAgICAgICAvKiBBIGJpdCB0cmlja3kgdG8gcHV0IGEgbnVt YmVyIG9uIHRoaXMsIGJ1dCB3ZSBkb24ndCBleHBlY3QgdGhlIGtlcm5lbAorICAgICAgICAgKiB0 byB1c2UgYW55IHNpZ25pZmljYW50IGNwdSB3aGlsZSB3YWl0aW5nIGFuZCBnaXZlbiB0aGUgaW4g cHJlY2lzaW9uCisgICAgICAgICAqIG9mIHN0aW1lIChtdWx0aXBsZSBvZiBDTEtfVENLKSB3ZSBl eHBlY3QgdGhpcyB0byByb3VuZCB0byB6ZXJvLgorICAgICAgICAgKi8KKyAgICAgICAgaWd0X2Fz c2VydF9lcShrZXJuZWxfbnMsIDApOworCisgICAgICAgIGNsb3NlKHN0cmVhbV9mZCk7Cit9CisK K3N0YXRpYyB2b2lkCit0ZXN0X2J1ZmZlcl9maWxsKHZvaWQpCit7CisgICAgICAgIGludCBvYV9l eHBvbmVudCA9IDU7IC8qIDUgbWljcm8gc2Vjb25kcyAqLworICAgICAgICB1aW50NjRfdCBwcm9w ZXJ0aWVzW10gPSB7CisgICAgICAgICAgICAgICAgLyogSW5jbHVkZSBPQSByZXBvcnRzIGluIHNh bXBsZXMgKi8KKyAgICAgICAgICAgICAgICBEUk1fSTkxNV9QRVJGX1BST1BfU0FNUExFX09BLCB0 cnVlLAorCisgICAgICAgICAgICAgICAgLyogT0EgdW5pdCBjb25maWd1cmF0aW9uICovCisgICAg ICAgICAgICAgICAgRFJNX0k5MTVfUEVSRl9QUk9QX09BX01FVFJJQ1NfU0VULCBoc3dfcmVuZGVy X2Jhc2ljX2lkLAorICAgICAgICAgICAgICAgIERSTV9JOTE1X1BFUkZfUFJPUF9PQV9GT1JNQVQs IEk5MTVfT0FfRk9STUFUX0E0NV9COF9DOCwKKyAgICAgICAgICAgICAgICBEUk1fSTkxNV9QRVJG X1BST1BfT0FfRVhQT05FTlQsIG9hX2V4cG9uZW50LAorICAgICAgICB9OworICAgICAgICBzdHJ1 Y3QgZHJtX2k5MTVfcGVyZl9vcGVuX3BhcmFtIHBhcmFtID0geworICAgICAgICAgICAgICAgIC5m bGFncyA9IEk5MTVfUEVSRl9GTEFHX0ZEX0NMT0VYRUMsCisgICAgICAgICAgICAgICAgLm51bV9w cm9wZXJ0aWVzID0gc2l6ZW9mKHByb3BlcnRpZXMpIC8gMTYsCisgICAgICAgICAgICAgICAgLnBy b3BlcnRpZXNfcHRyID0gKHVpbnQ2NF90KXByb3BlcnRpZXMsCisgICAgICAgIH07CisgICAgICAg IGludCBzdHJlYW1fZmQgPSBfX3BlcmZfb3Blbihkcm1fZmQsICZwYXJhbSk7CisgICAgICAgIGlu dCBidWZfc2l6ZSA9IDY1NTM2ICogKDI1NiArIHNpemVvZihzdHJ1Y3QgZHJtX2k5MTVfcGVyZl9y ZWNvcmRfaGVhZGVyKSk7CisgICAgICAgIHVpbnQ4X3QgKmJ1ZiA9IG1hbGxvYyhidWZfc2l6ZSk7 CisKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykgeworICAgICAgICAgICAg ICAgIHN0cnVjdCBkcm1faTkxNV9wZXJmX3JlY29yZF9oZWFkZXIgKmhlYWRlcjsKKyAgICAgICAg ICAgICAgICBib29sIG92ZXJmbG93X3NlZW47CisgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9 IDA7CisgICAgICAgICAgICAgICAgaW50IGxlbjsKKworICAgICAgICAgICAgICAgIC8qIEl0IHNo b3VsZCB0YWtlIH4zMzAgbWlsbGlzZWNvbmRzIHRvIGZpbGwgYSAxNk1CIE9BIGJ1ZmZlciB3aXRo IGEKKyAgICAgICAgICAgICAgICAgKiA1IG1pY3Jvc2Vjb25kIHNhbXBsaW5nIHBlcmlvZCBhbmQg MjU2IGJ5dGUgcmVwb3J0cy4gKi8KKyAgICAgICAgICAgICAgICBuYW5vc2xlZXAoJihzdHJ1Y3Qg dGltZXNwZWMpeyAudHZfc2VjID0gMCwgLnR2X25zZWMgPSA1MDAwMDAwMDAgfSwgTlVMTCk7CisK KyAgICAgICAgICAgICAgICB3aGlsZSAoKGxlbiA9IHJlYWQoc3RyZWFtX2ZkLCBidWYsIGJ1Zl9z aXplKSkgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpCisgICAgICAgICAgICAgICAgICAgICAgICA7 CisKKyAgICAgICAgICAgICAgICBpZ3RfYXNzZXJ0X25lcShsZW4sIC0xKTsKKworICAgICAgICAg ICAgICAgIG92ZXJmbG93X3NlZW4gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmb3IgKG9mZnNl dCA9IDA7IG9mZnNldCA8IGxlbjsgb2Zmc2V0ICs9IGhlYWRlci0+c2l6ZSkgeworICAgICAgICAg ICAgICAgICAgICAgICAgaGVhZGVyID0gKHZvaWQgKikoYnVmICsgb2Zmc2V0KTsKKworICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKGhlYWRlci0+dHlwZSA9PSBEUk1fSTkxNV9QRVJGX1JFQ09S RF9PQV9CVUZGRVJfTE9TVCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZs b3dfc2VlbiA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWd0 X2Fzc2VydF9lcShvdmVyZmxvd19zZWVuLCB0cnVlKTsKKworICAgICAgICAgICAgICAgIG5hbm9z bGVlcCgmKHN0cnVjdCB0aW1lc3BlYyl7IC50dl9zZWMgPSAwLCAudHZfbnNlYyA9IDEwMDAwMDAg fSwgTlVMTCk7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoKGxlbiA9IHJlYWQoc3RyZWFtX2Zk LCBidWYsIGJ1Zl9zaXplKSkgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpCisgICAgICAgICAgICAg ICAgICAgICAgICA7CisKKyAgICAgICAgICAgICAgICBpZ3RfYXNzZXJ0X25lcShsZW4sIC0xKTsK KworICAgICAgICAgICAgICAgIC8qIGV4cGVjdCB+IDIwMCByZWNvcmRzIGluIDEgbWlsbGlzZWNv bmQgKi8KKyAgICAgICAgICAgICAgICBpZ3RfYXNzZXJ0KGxlbiA+IDI1NiAqIDE1MCk7CisKKyAg ICAgICAgICAgICAgICBvdmVyZmxvd19zZWVuID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZm9y IChvZmZzZXQgPSAwOyBvZmZzZXQgPCBsZW47IG9mZnNldCArPSBoZWFkZXItPnNpemUpIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIGhlYWRlciA9ICh2b2lkICopKGJ1ZiArIG9mZnNldCk7CisK KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZWFkZXItPnR5cGUgPT0gRFJNX0k5MTVfUEVS Rl9SRUNPUkRfT0FfQlVGRkVSX0xPU1QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG92ZXJmbG93X3NlZW4gPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg ICAgIGlndF9hc3NlcnRfZXEob3ZlcmZsb3dfc2VlbiwgZmFsc2UpOworICAgICAgICB9CisKKyAg ICAgICAgZnJlZShidWYpOworCisgICAgICAgIGNsb3NlKHN0cmVhbV9mZCk7Cit9CisKK3N0YXRp YyB2b2lkCit0ZXN0X2VuYWJsZV9kaXNhYmxlKHZvaWQpCit7CisgICAgICAgIGludCBvYV9leHBv bmVudCA9IDU7IC8qIDUgbWljcm8gc2Vjb25kcyAqLworICAgICAgICB1aW50NjRfdCBwcm9wZXJ0 aWVzW10gPSB7CisgICAgICAgICAgICAgICAgLyogSW5jbHVkZSBPQSByZXBvcnRzIGluIHNhbXBs ZXMgKi8KKyAgICAgICAgICAgICAgICBEUk1fSTkxNV9QRVJGX1BST1BfU0FNUExFX09BLCB0cnVl LAorCisgICAgICAgICAgICAgICAgLyogT0EgdW5pdCBjb25maWd1cmF0aW9uICovCisgICAgICAg ICAgICAgICAgRFJNX0k5MTVfUEVSRl9QUk9QX09BX01FVFJJQ1NfU0VULCBoc3dfcmVuZGVyX2Jh c2ljX2lkLAorICAgICAgICAgICAgICAgIERSTV9JOTE1X1BFUkZfUFJPUF9PQV9GT1JNQVQsIEk5 MTVfT0FfRk9STUFUX0E0NV9COF9DOCwKKyAgICAgICAgICAgICAgICBEUk1fSTkxNV9QRVJGX1BS T1BfT0FfRVhQT05FTlQsIG9hX2V4cG9uZW50LAorICAgICAgICB9OworICAgICAgICBzdHJ1Y3Qg ZHJtX2k5MTVfcGVyZl9vcGVuX3BhcmFtIHBhcmFtID0geworICAgICAgICAgICAgICAgIC5mbGFn cyA9IEk5MTVfUEVSRl9GTEFHX0ZEX0NMT0VYRUMgfAorICAgICAgICAgICAgICAgICAgICAgICAg IEk5MTVfUEVSRl9GTEFHX0RJU0FCTEVELCAvKiBWZXJpZnkgd2Ugc3RhcnQgZGlzYWJsZWQgKi8K KyAgICAgICAgICAgICAgICAubnVtX3Byb3BlcnRpZXMgPSBzaXplb2YocHJvcGVydGllcykgLyAx NiwKKyAgICAgICAgICAgICAgICAucHJvcGVydGllc19wdHIgPSAodWludDY0X3QpcHJvcGVydGll cywKKyAgICAgICAgfTsKKyAgICAgICAgaW50IHN0cmVhbV9mZCA9IF9fcGVyZl9vcGVuKGRybV9m ZCwgJnBhcmFtKTsKKyAgICAgICAgaW50IGJ1Zl9zaXplID0gNjU1MzYgKiAoMjU2ICsgc2l6ZW9m KHN0cnVjdCBkcm1faTkxNV9wZXJmX3JlY29yZF9oZWFkZXIpKTsKKyAgICAgICAgdWludDhfdCAq YnVmID0gbWFsbG9jKGJ1Zl9zaXplKTsKKworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg NTsgaSsrKSB7CisgICAgICAgICAgICAgICAgaW50IGxlbjsKKworICAgICAgICAgICAgICAgIC8q IElmIHRoZSBzdHJlYW0gd2VyZSBlbmFibGVkIHRoZW4gaXQgd291bGQgdGFrZSB+MzMwCisgICAg ICAgICAgICAgICAgICogbWlsbGlzZWNvbmRzIHRvIGZpbGwgYSAxNk1CIE9BIGJ1ZmZlciB3aXRo IGEgNSBtaWNyb3NlY29uZAorICAgICAgICAgICAgICAgICAqIHNhbXBsaW5nIHBlcmlvZCBhbmQg MjU2IGJ5dGUgcmVwb3J0cy4KKyAgICAgICAgICAgICAgICAgKgorICAgICAgICAgICAgICAgICAq IEdpdmluZyBlbm91Z2ggdGltZSBmb3IgYW4gb3ZlcmZsb3cgbWlnaHQgaGVscCBjYXRjaCB3aGV0 aGVyCisgICAgICAgICAgICAgICAgICogdGhlIE9BIHVuaXQgaGFzIGJlZW4gZW5hYmxlZCBldmVu IGlmIHRoZSBkcml2ZXIgbWlnaHQgYXQKKyAgICAgICAgICAgICAgICAgKiBsZWFzdCBhdm9pZCBj b3B5aW5nIHJlcG9ydHMgd2hpbGUgZGlzYWJsZWQuCisgICAgICAgICAgICAgICAgICovCisgICAg ICAgICAgICAgICAgbmFub3NsZWVwKCYoc3RydWN0IHRpbWVzcGVjKXsgLnR2X3NlYyA9IDAsIC50 dl9uc2VjID0gNTAwMDAwMDAwIH0sIE5VTEwpOworCisgICAgICAgICAgICAgICAgd2hpbGUgKChs ZW4gPSByZWFkKHN0cmVhbV9mZCwgYnVmLCBidWZfc2l6ZSkpID09IC0xICYmIGVycm5vID09IEVJ TlRSKQorICAgICAgICAgICAgICAgICAgICAgICAgOworCisgICAgICAgICAgICAgICAgaWd0X2Fz c2VydF9lcShsZW4sIC0xKTsKKyAgICAgICAgICAgICAgICBpZ3RfYXNzZXJ0X2VxKGVycm5vLCBF SU8pOworCisgICAgICAgICAgICAgICAgZG9faW9jdGwoc3RyZWFtX2ZkLCBJOTE1X1BFUkZfSU9D VExfRU5BQkxFLCAwKTsKKworICAgICAgICAgICAgICAgIG5hbm9zbGVlcCgmKHN0cnVjdCB0aW1l c3BlYyl7IC50dl9zZWMgPSAwLCAudHZfbnNlYyA9IDEwMDAwMDAgfSwgTlVMTCk7CisKKyAgICAg ICAgICAgICAgICB3aGlsZSAoKGxlbiA9IHJlYWQoc3RyZWFtX2ZkLCBidWYsIGJ1Zl9zaXplKSkg PT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpCisgICAgICAgICAgICAgICAgICAgICAgICA7CisKKyAg ICAgICAgICAgICAgICBpZ3RfYXNzZXJ0X25lcShsZW4sIC0xKTsKKworICAgICAgICAgICAgICAg IC8qIGV4cGVjdCB+IDIwMCByZWNvcmRzIGluIDEgbWlsbGlzZWNvbmQgKi8KKyAgICAgICAgICAg ICAgICBpZ3RfYXNzZXJ0KGxlbiA+IDI1NiAqIDE1MCAmJiBsZW4gPCAyNTYgKiAyMDAwKTsKKwor ICAgICAgICAgICAgICAgIGRvX2lvY3RsKHN0cmVhbV9mZCwgSTkxNV9QRVJGX0lPQ1RMX0RJU0FC TEUsIDApOworCisgICAgICAgICAgICAgICAgLyogSXQncyBjb25zaWRlcmVkIGFuIGVycm9yIHRv IHJlYWQgYSBzdHJlYW0gd2hpbGUgaXQncyBkaXNhYmxlZAorICAgICAgICAgICAgICAgICAqIHNp bmNlIGl0IHdvdWxkIGJsb2NrIGluZGVmaW5pdGVseS4uLgorICAgICAgICAgICAgICAgICAqLwor ICAgICAgICAgICAgICAgIGxlbiA9IHJlYWQoc3RyZWFtX2ZkLCBidWYsIGJ1Zl9zaXplKTsKKwor ICAgICAgICAgICAgICAgIGlndF9hc3NlcnRfZXEobGVuLCAtMSk7CisgICAgICAgICAgICAgICAg aWd0X2Fzc2VydF9lcShlcnJubywgRUlPKTsKKyAgICAgICAgfQorCisgICAgICAgIGZyZWUoYnVm KTsKKworICAgICAgICBjbG9zZShzdHJlYW1fZmQpOworfQorCitzdGF0aWMgdm9pZAordGVzdF9z aG9ydF9yZWFkcyh2b2lkKQoreworICAgICAgICBpbnQgb2FfZXhwb25lbnQgPSA1OyAvKiA1IG1p Y3JvIHNlY29uZHMgKi8KKyAgICAgICAgdWludDY0X3QgcHJvcGVydGllc1tdID0geworICAgICAg ICAgICAgICAgIC8qIEluY2x1ZGUgT0EgcmVwb3J0cyBpbiBzYW1wbGVzICovCisgICAgICAgICAg ICAgICAgRFJNX0k5MTVfUEVSRl9QUk9QX1NBTVBMRV9PQSwgdHJ1ZSwKKworICAgICAgICAgICAg ICAgIC8qIE9BIHVuaXQgY29uZmlndXJhdGlvbiAqLworICAgICAgICAgICAgICAgIERSTV9JOTE1 X1BFUkZfUFJPUF9PQV9NRVRSSUNTX1NFVCwgaHN3X3JlbmRlcl9iYXNpY19pZCwKKyAgICAgICAg ICAgICAgICBEUk1fSTkxNV9QRVJGX1BST1BfT0FfRk9STUFULCBJOTE1X09BX0ZPUk1BVF9BNDVf QjhfQzgsCisgICAgICAgICAgICAgICAgRFJNX0k5MTVfUEVSRl9QUk9QX09BX0VYUE9ORU5ULCBv YV9leHBvbmVudCwKKyAgICAgICAgfTsKKyAgICAgICAgc3RydWN0IGRybV9pOTE1X3BlcmZfb3Bl bl9wYXJhbSBwYXJhbSA9IHsKKyAgICAgICAgICAgICAgICAuZmxhZ3MgPSBJOTE1X1BFUkZfRkxB R19GRF9DTE9FWEVDLAorICAgICAgICAgICAgICAgIC5udW1fcHJvcGVydGllcyA9IHNpemVvZihw cm9wZXJ0aWVzKSAvIDE2LAorICAgICAgICAgICAgICAgIC5wcm9wZXJ0aWVzX3B0ciA9ICh1aW50 NjRfdClwcm9wZXJ0aWVzLAorICAgICAgICB9OworICAgICAgICBzaXplX3QgcmVjb3JkX3NpemUg PSAyNTYgKyBzaXplb2Yoc3RydWN0IGRybV9pOTE1X3BlcmZfcmVjb3JkX2hlYWRlcik7CisgICAg ICAgIHNpemVfdCBwYWdlX3NpemUgPSBzeXNjb25mKF9TQ19QQUdFX1NJWkUpOworICAgICAgICBp bnQgemVyb19mZCA9IG9wZW4oIi9kZXYvemVybyIsIE9fUkRXUnxPX0NMT0VYRUMpOworICAgICAg ICB1aW50OF90ICpwYWdlcyA9IG1tYXAoTlVMTCwgcGFnZV9zaXplICogMiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFBST1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSwgemVy b19mZCwgMCk7CisgICAgICAgIHN0cnVjdCBkcm1faTkxNV9wZXJmX3JlY29yZF9oZWFkZXIgKmhl YWRlcjsKKyAgICAgICAgaW50IHN0cmVhbV9mZDsKKyAgICAgICAgaW50IHJldDsKKworICAgICAg ICBpZ3RfYXNzZXJ0KHBhZ2VzKTsKKworICAgICAgICByZXQgPSBtcHJvdGVjdChwYWdlcyArIHBh Z2Vfc2l6ZSwgcGFnZV9zaXplLCBQUk9UX05PTkUpOworICAgICAgICBpZ3RfYXNzZXJ0X2VxKHJl dCwgMCk7CisKKyAgICAgICAgc3RyZWFtX2ZkID0gX19wZXJmX29wZW4oZHJtX2ZkLCAmcGFyYW0p OworCisgICAgICAgIG5hbm9zbGVlcCgmKHN0cnVjdCB0aW1lc3BlYyl7IC50dl9zZWMgPSAwLCAu dHZfbnNlYyA9IDUwMDAwMDAgfSwgTlVMTCk7CisKKyAgICAgICAgLyogQXQgdGhpcyBwb2ludCB0 aGVyZSBzaG91bGQgYmUgbG90cyBvZiBwZW5kaW5nIHJlcG9ydHMgdG8gcmVhZCAqLworCisgICAg ICAgIC8qIEEgcmVhZCB0aGF0IGNhbiByZXR1cm4gYXQgbGVhc3Qgb25lIHJlY29yZCBzaG91bGQg cmVzdWx0IGluIGEgc2hvcnQKKyAgICAgICAgICogcmVhZCBub3QgYW4gRUZBVUxUIGlmIHRoZSBi dWZmZXIgaXMgc21hbGxlciB0aGFuIHRoZSByZXF1ZXN0ZWQgcmVhZAorICAgICAgICAgKiBzaXpl Li4uCisgICAgICAgICAqCisgICAgICAgICAqIEV4cGVjdCB0byBzZWUgYSBzYW1wbGUgcmVjb3Jk IGhlcmUsIGJ1dCBhdCBsZWFzdCBza2lwIG92ZXIgYW55CisgICAgICAgICAqIF9SRUNPUkRfTE9T VCBub3RpZmljYXRpb25zLgorICAgICAgICAgKi8KKyAgICAgICAgZG8geworICAgICAgICAgICAg ICAgIGhlYWRlciA9ICh2b2lkICopKHBhZ2VzICsgcGFnZV9zaXplIC0gcmVjb3JkX3NpemUpOwor ICAgICAgICAgICAgICAgIHJldCA9IHJlYWQoc3RyZWFtX2ZkLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgaGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZV9zaXplKTsK KyAgICAgICAgICAgICAgICBpZ3RfYXNzZXJ0KHJldCA+IDApOworICAgICAgICB9IHdoaWxlICho ZWFkZXItPnR5cGUgPT0gRFJNX0k5MTVfUEVSRl9SRUNPUkRfT0FfUkVQT1JUX0xPU1QpOworCisg ICAgICAgIGlndF9hc3NlcnRfZXEocmV0LCByZWNvcmRfc2l6ZSk7CisKKyAgICAgICAgLyogQSBy ZWFkIHRoYXQgY2FuJ3QgcmV0dXJuIGEgc2luZ2xlIHJlY29yZCBiZWNhdXNlIGl0IHdvdWxkIHJl c3VsdAorICAgICAgICAgKiBpbiBhIGZhdWx0IG9uIGJ1ZmZlciBvdmVycnVuIHNob3VsZCByZXN1 bHQgaW4gYW4gRUZBVUxUIGVycm9yLi4uCisgICAgICAgICAqLworICAgICAgICByZXQgPSByZWFk KHN0cmVhbV9mZCwgcGFnZXMgKyBwYWdlX3NpemUgLSAxNiwgcGFnZV9zaXplKTsKKyAgICAgICAg aWd0X2Fzc2VydF9lcShyZXQsIC0xKTsKKyAgICAgICAgaWd0X2Fzc2VydF9lcShlcnJubywgRUZB VUxUKTsKKworICAgICAgICAvKiBBIHJlYWQgdGhhdCBjYW4ndCByZXR1cm4gYSBzaW5nbGUgcmVj b3JkIGJlY2F1c2UgdGhlIGJ1ZmZlciBpcyB0b28KKyAgICAgICAgICogc21hbGwgc2hvdWxkIHJl c3VsdCBpbiBhbiBFTk9TUEMgZXJyb3IuLgorICAgICAgICAgKgorICAgICAgICAgKiBBZ2Fpbiwg c2tpcCBvdmVyIF9SRUNPUkRfTE9TVCByZWNvcmRzIChzbWFsbGVyIHRoYW4gcmVjb3JkX3NpemUv MikKKyAgICAgICAgICovCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBoZWFkZXIgPSAo dm9pZCAqKShwYWdlcyArIHBhZ2Vfc2l6ZSAtIHJlY29yZF9zaXplIC8gMik7CisgICAgICAgICAg ICAgICAgcmV0ID0gcmVhZChzdHJlYW1fZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBo ZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRfc2l6ZSAvIDIpOworICAg ICAgICB9IHdoaWxlIChyZXQgPiAwICYmIGhlYWRlci0+dHlwZSA9PSBEUk1fSTkxNV9QRVJGX1JF Q09SRF9PQV9SRVBPUlRfTE9TVCk7CisKKyAgICAgICAgaWd0X2Fzc2VydF9lcShyZXQsIC0xKTsK KyAgICAgICAgaWd0X2Fzc2VydF9lcShlcnJubywgRU5PU1BDKTsKKworICAgICAgICBjbG9zZShz dHJlYW1fZmQpOworfQorCitzdGF0aWMgdm9pZAordGVzdF9ub25fc2FtcGxpbmdfcmVhZF9lcnJv cih2b2lkKQoreworICAgICAgICB1aW50NjRfdCBwcm9wZXJ0aWVzW10gPSB7CisgICAgICAgICAg ICAgICAgLyogWFhYOiBldmVuIHdpdGhvdXQgcGVyaW9kaWMgc2FtcGxpbmcgd2UgaGF2ZSB0bwor ICAgICAgICAgICAgICAgICAqIHNwZWNpZnkgYXQgbGVhc3Qgb25lIHNhbXBsZSBsYXlvdXQgcHJv cGVydHkuLi4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBEUk1fSTkxNV9Q RVJGX1BST1BfU0FNUExFX09BLCB0cnVlLAorCisgICAgICAgICAgICAgICAgLyogT0EgdW5pdCBj b25maWd1cmF0aW9uICovCisgICAgICAgICAgICAgICAgRFJNX0k5MTVfUEVSRl9QUk9QX09BX01F VFJJQ1NfU0VULCBoc3dfcmVuZGVyX2Jhc2ljX2lkLAorICAgICAgICAgICAgICAgIERSTV9JOTE1 X1BFUkZfUFJPUF9PQV9GT1JNQVQsIEk5MTVfT0FfRk9STUFUX0E0NV9COF9DOCwKKworICAgICAg ICAgICAgICAgIC8qIFhYWDogbm8gc2FtcGxpbmcgZXhwb25lbnQgKi8KKyAgICAgICAgfTsKKyAg ICAgICAgc3RydWN0IGRybV9pOTE1X3BlcmZfb3Blbl9wYXJhbSBwYXJhbSA9IHsKKyAgICAgICAg ICAgICAgICAuZmxhZ3MgPSBJOTE1X1BFUkZfRkxBR19GRF9DTE9FWEVDLAorICAgICAgICAgICAg ICAgIC5udW1fcHJvcGVydGllcyA9IHNpemVvZihwcm9wZXJ0aWVzKSAvIDE2LAorICAgICAgICAg ICAgICAgIC5wcm9wZXJ0aWVzX3B0ciA9ICh1aW50NjRfdClwcm9wZXJ0aWVzLAorICAgICAgICB9 OworICAgICAgICBpbnQgc3RyZWFtX2ZkID0gX19wZXJmX29wZW4oZHJtX2ZkLCAmcGFyYW0pOwor ICAgICAgICB1aW50OF90IGJ1ZlsxMDI0XTsKKworICAgICAgICBpbnQgcmV0ID0gcmVhZChzdHJl YW1fZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworICAgICAgICBpZ3RfYXNzZXJ0X2VxKHJldCwgLTEp OworICAgICAgICBpZ3RfYXNzZXJ0X2VxKGVycm5vLCBFSU8pOworCisgICAgICAgIGNsb3NlKHN0 cmVhbV9mZCk7Cit9CisKKy8qIENoZWNrIHRoYXQgYXR0ZW1wdHMgdG8gcmVhZCBmcm9tIGEgc3Ry ZWFtIHdoaWxlIGl0IGlzIGRpc2FibGUgd2lsbCByZXR1cm4KKyAqIEVJTyBpbnN0ZWFkIG9mIGJs b2NraW5nIGluZGVmaW5pdGVseS4KKyAqLworc3RhdGljIHZvaWQKK3Rlc3RfZGlzYWJsZWRfcmVh ZF9lcnJvcih2b2lkKQoreworICAgICAgICBpbnQgb2FfZXhwb25lbnQgPSA1OyAvKiA1IG1pY3Jv IHNlY29uZHMgKi8KKyAgICAgICAgdWludDY0X3QgcHJvcGVydGllc1tdID0geworICAgICAgICAg ICAgICAgIC8qIFhYWDogZXZlbiB3aXRob3V0IHBlcmlvZGljIHNhbXBsaW5nIHdlIGhhdmUgdG8K KyAgICAgICAgICAgICAgICAgKiBzcGVjaWZ5IGF0IGxlYXN0IG9uZSBzYW1wbGUgbGF5b3V0IHBy b3BlcnR5Li4uCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgRFJNX0k5MTVf UEVSRl9QUk9QX1NBTVBMRV9PQSwgdHJ1ZSwKKworICAgICAgICAgICAgICAgIC8qIE9BIHVuaXQg Y29uZmlndXJhdGlvbiAqLworICAgICAgICAgICAgICAgIERSTV9JOTE1X1BFUkZfUFJPUF9PQV9N RVRSSUNTX1NFVCwgaHN3X3JlbmRlcl9iYXNpY19pZCwKKyAgICAgICAgICAgICAgICBEUk1fSTkx NV9QRVJGX1BST1BfT0FfRk9STUFULCBJOTE1X09BX0ZPUk1BVF9BNDVfQjhfQzgsCisgICAgICAg ICAgICAgICAgRFJNX0k5MTVfUEVSRl9QUk9QX09BX0VYUE9ORU5ULCBvYV9leHBvbmVudCwKKyAg ICAgICAgfTsKKyAgICAgICAgc3RydWN0IGRybV9pOTE1X3BlcmZfb3Blbl9wYXJhbSBwYXJhbSA9 IHsKKyAgICAgICAgICAgICAgICAuZmxhZ3MgPSBJOTE1X1BFUkZfRkxBR19GRF9DTE9FWEVDIHwK KyAgICAgICAgICAgICAgICAgICAgICAgICBJOTE1X1BFUkZfRkxBR19ESVNBQkxFRCwgLyogWFhY OiBvcGVuIGRpc2FibGVkICovCisgICAgICAgICAgICAgICAgLm51bV9wcm9wZXJ0aWVzID0gc2l6 ZW9mKHByb3BlcnRpZXMpIC8gMTYsCisgICAgICAgICAgICAgICAgLnByb3BlcnRpZXNfcHRyID0g KHVpbnQ2NF90KXByb3BlcnRpZXMsCisgICAgICAgIH07CisgICAgICAgIGludCBzdHJlYW1fZmQg PSBfX3BlcmZfb3Blbihkcm1fZmQsICZwYXJhbSk7CisgICAgICAgIHVpbnQzMl90IG9hX3JlcG9y dDBbNjRdOworICAgICAgICB1aW50MzJfdCBvYV9yZXBvcnQxWzY0XTsKKyAgICAgICAgdWludDMy X3QgYnVmWzEyOF0gPSB7IDAgfTsKKyAgICAgICAgaW50IHJldDsKKworCisgICAgICAgIHJldCA9 IHJlYWQoc3RyZWFtX2ZkLCBidWYsIHNpemVvZihidWYpKTsKKyAgICAgICAgaWd0X2Fzc2VydF9l cShyZXQsIC0xKTsKKyAgICAgICAgaWd0X2Fzc2VydF9lcShlcnJubywgRUlPKTsKKworICAgICAg ICBjbG9zZShzdHJlYW1fZmQpOworCisKKyAgICAgICAgcGFyYW0uZmxhZ3MgJj0gfkk5MTVfUEVS Rl9GTEFHX0RJU0FCTEVEOworICAgICAgICBzdHJlYW1fZmQgPSBfX3BlcmZfb3Blbihkcm1fZmQs ICZwYXJhbSk7CisKKyAgICAgICAgcmVhZF8yX29hX3JlcG9ydHMoc3RyZWFtX2ZkLAorICAgICAg ICAgICAgICAgICAgICAgICAgICBJOTE1X09BX0ZPUk1BVF9BNDVfQjhfQzgsIDI1NiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgb2FfZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgIG9hX3JlcG9ydDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9hX3JlcG9ydDEsCisg ICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsgLyogbm90IGp1c3QgdGltZXIgcmVwb3J0 cyAqLworCisgICAgICAgIGRvX2lvY3RsKHN0cmVhbV9mZCwgSTkxNV9QRVJGX0lPQ1RMX0RJU0FC TEUsIDApOworCisgICAgICAgIHJldCA9IHJlYWQoc3RyZWFtX2ZkLCBidWYsIHNpemVvZihidWYp KTsKKyAgICAgICAgaWd0X2Fzc2VydF9lcShyZXQsIC0xKTsKKyAgICAgICAgaWd0X2Fzc2VydF9l cShlcnJubywgRUlPKTsKKworICAgICAgICBkb19pb2N0bChzdHJlYW1fZmQsIEk5MTVfUEVSRl9J T0NUTF9FTkFCTEUsIDApOworCisgICAgICAgIHJlYWRfMl9vYV9yZXBvcnRzKHN0cmVhbV9mZCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgSTkxNV9PQV9GT1JNQVRfQTQ1X0I4X0M4LCAyNTYs CisgICAgICAgICAgICAgICAgICAgICAgICAgIG9hX2V4cG9uZW50LAorICAgICAgICAgICAgICAg ICAgICAgICAgICBvYV9yZXBvcnQwLAorICAgICAgICAgICAgICAgICAgICAgICAgICBvYV9yZXBv cnQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSk7IC8qIG5vdCBqdXN0IHRpbWVy IHJlcG9ydHMgKi8KKworICAgICAgICBjbG9zZShzdHJlYW1fZmQpOworfQorCitzdGF0aWMgdm9p ZAordGVzdF9taV9ycGModm9pZCkKK3sKKyAgICAgICAgdWludDY0X3QgcHJvcGVydGllc1tdID0g eworICAgICAgICAgICAgICAgIC8qIE5vdGU6IHdlIGhhdmUgdG8gc3BlY2lmeSBhdCBsZWFzdCBv bmUgc2FtcGxlIHByb3BlcnR5IGV2ZW4KKyAgICAgICAgICAgICAgICAgKiB0aG91Z2ggd2UgYXJl bid0IGludGVyZXN0ZWQgaW4gc2FtcGxlcyBpbiB0aGlzIGNhc2UuCisgICAgICAgICAgICAgICAg ICovCisgICAgICAgICAgICAgICAgRFJNX0k5MTVfUEVSRl9QUk9QX1NBTVBMRV9PQSwgdHJ1ZSwK KworICAgICAgICAgICAgICAgIC8qIE9BIHVuaXQgY29uZmlndXJhdGlvbiAqLworICAgICAgICAg ICAgICAgIERSTV9JOTE1X1BFUkZfUFJPUF9PQV9NRVRSSUNTX1NFVCwgaHN3X3JlbmRlcl9iYXNp Y19pZCwKKyAgICAgICAgICAgICAgICBEUk1fSTkxNV9QRVJGX1BST1BfT0FfRk9STUFULCBJOTE1 X09BX0ZPUk1BVF9BNDVfQjhfQzgsCisKKyAgICAgICAgICAgICAgICAvKiBOb3RlOiBubyBPQSBl eHBvbmVudCBzcGVjaWZpZWQgaW4gdGhpcyBjYXNlICovCisgICAgICAgIH07CisgICAgICAgIHN0 cnVjdCBkcm1faTkxNV9wZXJmX29wZW5fcGFyYW0gcGFyYW0gPSB7CisgICAgICAgICAgICAgICAg LmZsYWdzID0gSTkxNV9QRVJGX0ZMQUdfRkRfQ0xPRVhFQywKKyAgICAgICAgICAgICAgICAubnVt X3Byb3BlcnRpZXMgPSBzaXplb2YocHJvcGVydGllcykgLyAxNiwKKyAgICAgICAgICAgICAgICAu cHJvcGVydGllc19wdHIgPSAodWludDY0X3QpcHJvcGVydGllcywKKyAgICAgICAgfTsKKyAgICAg ICAgaW50IHN0cmVhbV9mZCA9IF9fcGVyZl9vcGVuKGRybV9mZCwgJnBhcmFtKTsKKyAgICAgICAg ZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyID0gZHJtX2ludGVsX2J1Zm1ncl9nZW1faW5pdChkcm1f ZmQsIDQwOTYpOworICAgICAgICBkcm1faW50ZWxfY29udGV4dCAqY29udGV4dDsKKyAgICAgICAg c3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaDsKKyAgICAgICAgZHJtX2ludGVsX2JvICpi bzsKKyAgICAgICAgdWludDMyX3QgKnJlcG9ydDMyOworICAgICAgICBpbnQgcmV0OworCisgICAg ICAgIGRybV9pbnRlbF9idWZtZ3JfZ2VtX2VuYWJsZV9yZXVzZShidWZtZ3IpOworCisgICAgICAg IGNvbnRleHQgPSBkcm1faW50ZWxfZ2VtX2NvbnRleHRfY3JlYXRlKGJ1Zm1ncik7CisgICAgICAg IGlndF9hc3NlcnQoY29udGV4dCk7CisKKyAgICAgICAgYmF0Y2ggPSBpbnRlbF9iYXRjaGJ1ZmZl cl9hbGxvYyhidWZtZ3IsIGRldmlkKTsKKworICAgICAgICBibyA9IGRybV9pbnRlbF9ib19hbGxv YyhidWZtZ3IsICJtaV9ycGMgZGVzdCBibyIsIDQwOTYsIDY0KTsKKworICAgICAgICByZXQgPSBk cm1faW50ZWxfYm9fbWFwKGJvLCB0cnVlKTsKKyAgICAgICAgaWd0X2Fzc2VydF9lcShyZXQsIDAp OworCisgICAgICAgIG1lbXNldChiby0+dmlydHVhbCwgMHg4MCwgNDA5Nik7CisgICAgICAgIGRy bV9pbnRlbF9ib191bm1hcChibyk7CisKKyAgICAgICAgQkVHSU5fQkFUQ0goMywgMSk7CisgICAg ICAgIE9VVF9CQVRDSChHRU42X01JX1JFUE9SVF9QRVJGX0NPVU5UKTsKKyAgICAgICAgT1VUX1JF TE9DKGJvLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIEk5MTVfR0VNX0RPTUFJTl9JTlNU UlVDVElPTiwKKyAgICAgICAgICAgICAgICAgIDApOyAvKiBvZmZzZXQgaW4gYnl0ZXMgKi8KKyAg ICAgICAgT1VUX0JBVENIKDB4ZGVhZGJlZWYpOyAvKiByZXBvcnQgSUQgKi8KKyAgICAgICAgQURW QU5DRV9CQVRDSCgpOworCisgICAgICAgIGludGVsX2JhdGNoYnVmZmVyX2ZsdXNoX3dpdGhfY29u dGV4dChiYXRjaCwgY29udGV4dCk7CisKKyAgICAgICAgcmV0ID0gZHJtX2ludGVsX2JvX21hcChi bywgZmFsc2UgLyogd3JpdGUgZW5hYmxlICovKTsKKyAgICAgICAgaWd0X2Fzc2VydF9lcShyZXQs IDApOworCisgICAgICAgIHJlcG9ydDMyID0gYm8tPnZpcnR1YWw7CisgICAgICAgIGlndF9hc3Nl cnRfZXEocmVwb3J0MzJbMF0sIDB4ZGVhZGJlZWYpOyAvKiByZXBvcnQgSUQgKi8KKyAgICAgICAg aWd0X2Fzc2VydF9uZXEocmVwb3J0MzJbMV0sIDApOyAvKiB0aW1lc3RhbXAgKi8KKworICAgICAg ICBpZ3RfYXNzZXJ0X25lcShyZXBvcnQzMls2M10sIDB4ODA4MDgwODApOyAvKiBlbmQgb2YgcmVw b3J0ICovCisgICAgICAgIGlndF9hc3NlcnRfZXEocmVwb3J0MzJbNjRdLCAweDgwODA4MDgwKTsg LyogYWZ0ZXIgMjU2IGJ5dGUgcmVwb3J0ICovCisKKyAgICAgICAgaW50ZWxfYmF0Y2hidWZmZXJf ZnJlZShiYXRjaCk7CisgICAgICAgIGRybV9pbnRlbF9nZW1fY29udGV4dF9kZXN0cm95KGNvbnRl eHQpOworICAgICAgICBkcm1faW50ZWxfYnVmbWdyX2Rlc3Ryb3koYnVmbWdyKTsKKyAgICAgICAg Y2xvc2Uoc3RyZWFtX2ZkKTsKK30KKworc3RhdGljIHZvaWQKK3NjcmF0Y2hfYnVmX2luaXQoZHJt X2ludGVsX2J1Zm1nciAqYnVmbWdyLAorICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWd0X2J1ZiAq YnVmLAorICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisgICAgICAgICAg ICAgICAgIHVpbnQzMl90IGNvbG9yKQoreworICAgICAgICBzaXplX3Qgc3RyaWRlID0gd2lkdGgg KiA0OworICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0cmlkZSAqIGhlaWdodDsKKwlkcm1faW50ZWxf Ym8gKmJvID0gZHJtX2ludGVsX2JvX2FsbG9jKGJ1Zm1nciwgIiIsIHNpemUsIDQwOTYpOworICAg ICAgICBpbnQgcmV0OworCisgICAgICAgIHJldCA9IGRybV9pbnRlbF9ib19tYXAoYm8sIHRydWUg Lyogd3JpdGFibGUgKi8pOworICAgICAgICBpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7CisKKyAgICAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3aWR0aCAqIGhlaWdodDsgaSsrKQorICAgICAgICAgICAg ICAgICgodWludDMyX3QgKiliby0+dmlydHVhbClbaV0gPSBjb2xvcjsKKworICAgICAgICBkcm1f aW50ZWxfYm9fdW5tYXAoYm8pOworCisJYnVmLT5ibyA9IGJvOworCWJ1Zi0+c3RyaWRlID0gc3Ry aWRlOworCWJ1Zi0+dGlsaW5nID0gSTkxNV9USUxJTkdfTk9ORTsKKwlidWYtPnNpemUgPSBzaXpl OworfQorCitzdGF0aWMgdm9pZAorZW1pdF9zdGFsbF90aW1lc3RhbXBfYW5kX3JwYyhzdHJ1Y3Qg aW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk cm1faW50ZWxfYm8gKmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRpbWVz dGFtcF9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXBvcnRfZHN0 X29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcmVwb3J0X2lk KQoreworICAgICAgICB1aW50MzJfdCBwaXBlX2N0bF9mbGFncyA9IChQSVBFX0NPTlRST0xfQ1Nf U1RBTEwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQSVBFX0NPTlRST0xf UkVOREVSX1RBUkdFVF9GTFVTSCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFBJUEVfQ09OVFJPTF9XUklURV9USU1FU1RBTVApOworCisgICAgICAgIEJFR0lOX0JBVENIKDUs IDEpOworICAgICAgICBPVVRfQkFUQ0goR0ZYX09QX1BJUEVfQ09OVFJPTCB8ICg1IC0gMikpOwor ICAgICAgICBPVVRfQkFUQ0gocGlwZV9jdGxfZmxhZ3MpOworICAgICAgICBPVVRfUkVMT0MoZHN0 LCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElP TiwKKyAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcF9vZmZzZXQpOworICAgICAgICBPVVRfQkFU Q0goMCk7IC8qIGltbSBsb3dlciAqLworICAgICAgICBPVVRfQkFUQ0goMCk7IC8qIGltbSB1cHBl ciAqLworICAgICAgICBBRFZBTkNFX0JBVENIKCk7CisKKyAgICAgICAgQkVHSU5fQkFUQ0goMywg MSk7CisgICAgICAgIE9VVF9CQVRDSChHRU42X01JX1JFUE9SVF9QRVJGX0NPVU5UKTsKKyAgICAg ICAgT1VUX1JFTE9DKGRzdCwgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCBJOTE1X0dFTV9E T01BSU5fSU5TVFJVQ1RJT04sCisgICAgICAgICAgICAgICAgICByZXBvcnRfZHN0X29mZnNldCk7 CisgICAgICAgIE9VVF9CQVRDSChyZXBvcnRfaWQpOworICAgICAgICBBRFZBTkNFX0JBVENIKCk7 Cit9CisKKy8qIFRlc3RzIHRoZSBJTlRFTF9wZXJmb3JtYW5jZV9xdWVyeSB1c2UgY2FzZSB3aGVy ZSBhbiB1bnByaXZpbGVnZWQgcHJvY2VzcworICogc2hvdWxkIGJlIGFibGUgdG8gY29uZmlndXJl IHRoZSBPQSB1bml0IGZvciBwZXItY29udGV4dCBtZXRyaWNzIChmb3IgYQorICogY29udGV4dCBh c3NvY2lhdGVkIHdpdGggdGhhdCBwcm9jZXNzJyBkcm0gZmlsZSBkZXNjcmlwdG9yKSBhbmQgdGhl IGNvdW50ZXJzCisgKiBzaG91bGQgb25seSByZWxhdGUgdG8gdGhhdCBzcGVjaWZpYyBjb250ZXh0 LgorICovCitzdGF0aWMgdm9pZAordGVzdF9wZXJfY3R4X21pX3JwYyh2b2lkKQoreworICAgICAg ICB1aW50NjRfdCBwcm9wZXJ0aWVzW10gPSB7CisgICAgICAgICAgICAgICAgRFJNX0k5MTVfUEVS Rl9QUk9QX0NUWF9IQU5ETEUsIFVJTlQ2NF9NQVgsIC8qIHVwZGF0ZWQgYmVsb3cgKi8KKworICAg ICAgICAgICAgICAgIC8qIE5vdGU6IHdlIGhhdmUgdG8gc3BlY2lmeSBhdCBsZWFzdCBvbmUgc2Ft cGxlIHByb3BlcnR5IGV2ZW4KKyAgICAgICAgICAgICAgICAgKiB0aG91Z2ggd2UgYXJlbid0IGlu dGVyZXN0ZWQgaW4gc2FtcGxlcyBpbiB0aGlzIGNhc2UKKyAgICAgICAgICAgICAgICAgKi8KKyAg ICAgICAgICAgICAgICBEUk1fSTkxNV9QRVJGX1BST1BfU0FNUExFX09BLCB0cnVlLAorCisgICAg ICAgICAgICAgICAgLyogT0EgdW5pdCBjb25maWd1cmF0aW9uICovCisgICAgICAgICAgICAgICAg RFJNX0k5MTVfUEVSRl9QUk9QX09BX01FVFJJQ1NfU0VULCBoc3dfcmVuZGVyX2Jhc2ljX2lkLAor ICAgICAgICAgICAgICAgIERSTV9JOTE1X1BFUkZfUFJPUF9PQV9GT1JNQVQsIEk5MTVfT0FfRk9S TUFUX0E0NV9COF9DOCwKKworICAgICAgICAgICAgICAgIC8qIE5vdGU6IG5vIE9BIGV4cG9uZW50 IHNwZWNpZmllZCBpbiB0aGlzIGNhc2UgKi8KKyAgICAgICAgfTsKKyAgICAgICAgc3RydWN0IGRy bV9pOTE1X3BlcmZfb3Blbl9wYXJhbSBwYXJhbSA9IHsKKyAgICAgICAgICAgICAgICAuZmxhZ3Mg PSBJOTE1X1BFUkZfRkxBR19GRF9DTE9FWEVDLAorICAgICAgICAgICAgICAgIC5udW1fcHJvcGVy dGllcyA9IHNpemVvZihwcm9wZXJ0aWVzKSAvIDE2LAorICAgICAgICAgICAgICAgIC5wcm9wZXJ0 aWVzX3B0ciA9ICh1aW50NjRfdClwcm9wZXJ0aWVzLAorICAgICAgICB9OworCisgICAgICAgIC8q IHNob3VsZCBiZSBkZWZhdWx0LCBidXQganVzdCB0byBiZSBzdXJlLi4uICovCisgICAgICAgIHdy aXRlX3U2NF9maWxlKCIvcHJvYy9zeXMvZGV2L2k5MTUvcGVyZl9zdHJlYW1fcGFyYW5vaWQiLCAx KTsKKworICAgICAgICBpZ3RfZm9yayhjaGlsZCwgMSkgeworICAgICAgICAgICAgICAgIGRybV9p bnRlbF9idWZtZ3IgKmJ1Zm1ncjsKKyAgICAgICAgICAgICAgICBkcm1faW50ZWxfY29udGV4dCAq Y29udGV4dDAsICpjb250ZXh0MTsKKyAgICAgICAgICAgICAgICBpbnQgc3RyZWFtX2ZkOworICAg ICAgICAgICAgICAgIHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2g7CisgICAgICAgICAg ICAgICAgc3RydWN0IGlndF9idWYgc3JjLCBkc3Q7CisgICAgICAgICAgICAgICAgZHJtX2ludGVs X2JvICpibzsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCAqcmVwb3J0MF8zMiwgKnJlcG9ydDFf MzI7CisgICAgICAgICAgICAgICAgdWludDY0X3QgdGltZXN0YW1wMF82NCwgdGltZXN0YW1wMV82 NDsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBkZWx0YV90czY0LCBkZWx0YV9vYTMyOworICAg ICAgICAgICAgICAgIHVpbnQ2NF90IGRlbHRhX3RzNjRfbnMsIGRlbHRhX29hMzJfbnM7CisgICAg ICAgICAgICAgICAgdWludDMyX3QgZGVsdGFfZGVsdGE7CisgICAgICAgICAgICAgICAgaW50IG5f c2FtcGxlc193cml0dGVuOworICAgICAgICAgICAgICAgIGludCB3aWR0aCA9IDgwMDsKKyAgICAg ICAgICAgICAgICBpbnQgaGVpZ2h0ID0gNjAwOworICAgICAgICAgICAgICAgIGludCByZXQ7CisK KyAgICAgICAgICAgICAgICBpZ3RfZHJvcF9yb290KCk7CisKKyAgICAgICAgICAgICAgICBidWZt Z3IgPSBkcm1faW50ZWxfYnVmbWdyX2dlbV9pbml0KGRybV9mZCwgNDA5Nik7CisgICAgICAgICAg ICAgICAgZHJtX2ludGVsX2J1Zm1ncl9nZW1fZW5hYmxlX3JldXNlKGJ1Zm1ncik7CisKKyAgICAg ICAgICAgICAgICBzY3JhdGNoX2J1Zl9pbml0KGJ1Zm1nciwgJnNyYywgd2lkdGgsIGhlaWdodCwg MHhmZjAwMDBmZik7CisgICAgICAgICAgICAgICAgc2NyYXRjaF9idWZfaW5pdChidWZtZ3IsICZk c3QsIHdpZHRoLCBoZWlnaHQsIDB4MDBmZjAwZmYpOworCisgICAgICAgICAgICAgICAgYmF0Y2gg PSBpbnRlbF9iYXRjaGJ1ZmZlcl9hbGxvYyhidWZtZ3IsIGRldmlkKTsKKworICAgICAgICAgICAg ICAgIGNvbnRleHQwID0gZHJtX2ludGVsX2dlbV9jb250ZXh0X2NyZWF0ZShidWZtZ3IpOworICAg ICAgICAgICAgICAgIGlndF9hc3NlcnQoY29udGV4dDApOworCisgICAgICAgICAgICAgICAgY29u dGV4dDEgPSBkcm1faW50ZWxfZ2VtX2NvbnRleHRfY3JlYXRlKGJ1Zm1ncik7CisgICAgICAgICAg ICAgICAgaWd0X2Fzc2VydChjb250ZXh0MSk7CisKKyAgICAgICAgICAgICAgICBpZ3RfZGVidWco InN1Ym1pdHRpbmcgd2FybSB1cCByZW5kZXJfY29weVxuIik7CisKKyAgICAgICAgICAgICAgICAv KiBTdWJtaXQgc29tZSBlYXJseSwgdW5tZWFzdXJlZCwgd29yayB0byB0aGUgY29udGV4dCB3ZSB3 YW50CisgICAgICAgICAgICAgICAgICogdG8gbWVhc3VyZSB0byB0cnkgYW5kIGNhdGNoIGlzc3Vl cyB3aXRoIGk5MTUtcGVyZgorICAgICAgICAgICAgICAgICAqIGluaXRpYWxpemluZyB0aGUgSFcg Y29udGV4dCBJRCBmb3IgZmlsdGVyaW5nLgorICAgICAgICAgICAgICAgICAqCisgICAgICAgICAg ICAgICAgICogV2UgZG8gdGhpcyBiZWNhdXNlIGk5MTUtcGVyZiBzaW5nbGUgY29udGV4dCBmaWx0 ZXJpbmcgaGFkCisgICAgICAgICAgICAgICAgICogcHJldmlvdXNseSBvbmx5IHJlbGllZCBvbiBh IGhvb2sgaW50byBjb250ZXh0IHBpbm5pbmcgdG8KKyAgICAgICAgICAgICAgICAgKiBpbml0aWFs aXplIHRoZSBIVyBjb250ZXh0IElELCBpbnN0ZWFkIG9mIGFsc28gdHJ5aW5nIHRvCisgICAgICAg ICAgICAgICAgICogZGV0ZXJtaW5lIHRoZSBIVyBJRCB3aGlsZSBvcGVuaW5nIHRoZSBzdHJlYW0s IGluIGNhc2UgaXQKKyAgICAgICAgICAgICAgICAgKiBoYXMgYWxyZWFkeSBiZWVuIHBpbm5lZC4K KyAgICAgICAgICAgICAgICAgKgorICAgICAgICAgICAgICAgICAqIFRoaXMgd2Fzbid0IG5vdGlj ZWQgYnkgdGhlIHByZXZpb3VzIHVuaXQgdGVzdCBiZWNhdXNlIHdlCisgICAgICAgICAgICAgICAg ICogd2VyZSBvcGVuaW5nIHRoZSBzdHJlYW0gd2hpbGUgdGhlIGNvbnRleHQgaGFkbid0IGJlZW4K KyAgICAgICAgICAgICAgICAgKiB0b3VjaGVkIG9yIHBpbm5lZCB5ZXQgYW5kIHNvIGl0IHdvcmtl ZCBvdXQgY29ycmVjdGx5IHRvIHdhaXQKKyAgICAgICAgICAgICAgICAgKiBmb3IgdGhlIHBpbm5p bmcgaG9vay4KKyAgICAgICAgICAgICAgICAgKgorICAgICAgICAgICAgICAgICAqIE5vdyBhIGJ1 Z2d5IHZlcnNpb24gb2YgaTkxNS1wZXJmIHdpbGwgZmFpbCB0byBtZWFzdXJlCisgICAgICAgICAg ICAgICAgICogYW55dGhpbmcgZm9yIGNvbnRleHQwIG9uY2UgdGhpcyBpbml0aWFsIHJlbmRlcl9j b3B5KCkgZW5kcworICAgICAgICAgICAgICAgICAqIHVwIHBpbm5pbmcgdGhlIGNvbnRleHQgc2lu Y2UgdGhlcmUgd29uJ3QgZXZlciBiZSBhIHBpbm5pbmcKKyAgICAgICAgICAgICAgICAgKiBob29r IGNhbGxiYWNrLgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHJlbmRlcl9j b3B5KGJhdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQwLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZzcmMsIDAsIDAsIHdpZHRoLCBoZWlnaHQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmRzdCwgMCwgMCk7CisKKyAgICAgICAgICAgICAgICBwcm9w ZXJ0aWVzWzFdID0gZHJtX2ludGVsX2dlbV9jb250ZXh0X2dldF9jb250ZXh0X2lkKGNvbnRleHQw KTsKKworICAgICAgICAgICAgICAgIGlndF9kZWJ1Zygib3BlbmluZyBpOTE1LXBlcmYgc3RyZWFt XG4iKTsKKyAgICAgICAgICAgICAgICBzdHJlYW1fZmQgPSBfX3BlcmZfb3Blbihkcm1fZmQsICZw YXJhbSk7CisKKyAgICAgICAgICAgICAgICBibyA9IGRybV9pbnRlbF9ib19hbGxvYyhidWZtZ3Is ICJtaV9ycGMgZGVzdCBibyIsIDQwOTYsIDY0KTsKKworICAgICAgICAgICAgICAgIHJldCA9IGRy bV9pbnRlbF9ib19tYXAoYm8sIHRydWUgLyogd3JpdGUgZW5hYmxlICovKTsKKyAgICAgICAgICAg ICAgICBpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7CisKKyAgICAgICAgICAgICAgICBtZW1zZXQoYm8t PnZpcnR1YWwsIDB4ODAsIDQwOTYpOworICAgICAgICAgICAgICAgIGRybV9pbnRlbF9ib191bm1h cChibyk7CisKKyAgICAgICAgICAgICAgICBlbWl0X3N0YWxsX3RpbWVzdGFtcF9hbmRfcnBjKGJh dGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm8sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MTIgLyogdGltZXN0 YW1wIG9mZnNldCAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDAsIC8qIHJlcG9ydCBkc3Qgb2Zmc2V0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAweGRlYWRiZWVmKTsgLyogcmVwb3J0IGlkICovCisKKyAgICAg ICAgICAgICAgICAvKiBFeHBsaWNpdGx5IGZsdXNoIGhlcmUgKGV2ZW4gdGhvdWdoIHRoZSByZW5k ZXJfY29weSgpIGNhbGwKKyAgICAgICAgICAgICAgICAgKiB3aWxsIGl0c2VsZiBmbHVzaCBiZWZv cmUvYWZ0ZXIgdGhlIGNvcHkpIHRvIGNsYXJpZnkgdGhhdAorICAgICAgICAgICAgICAgICAqIHRo YXQgdGhlIFBJUEVfQ09OVFJPTCArIE1JX1JQQyBjb21tYW5kcyB3aWxsIGJlIGluIGEKKyAgICAg ICAgICAgICAgICAgKiBzZXBhcmF0ZSBiYXRjaCBmcm9tIHRoZSBjb3B5LgorICAgICAgICAgICAg ICAgICAqLworICAgICAgICAgICAgICAgIGludGVsX2JhdGNoYnVmZmVyX2ZsdXNoX3dpdGhfY29u dGV4dChiYXRjaCwgY29udGV4dDApOworCisgICAgICAgICAgICAgICAgcmVuZGVyX2NvcHkoYmF0 Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDAsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJnNyYywgMCwgMCwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmZHN0LCAwLCAwKTsKKworICAgICAgICAgICAgICAgIC8qIEFub3RoZXIg cmVkdW5kYW50IGZsdXNoIHRvIGNsYXJpZnkgYmF0Y2ggYm8gaXMgZnJlZSB0byByZXVzZSAqLwor ICAgICAgICAgICAgICAgIGludGVsX2JhdGNoYnVmZmVyX2ZsdXNoX3dpdGhfY29udGV4dChiYXRj aCwgY29udGV4dDApOworCisgICAgICAgICAgICAgICAgLyogc3VibWl0IHR3byBjb3BpZXMgb24g dGhlIG90aGVyIGNvbnRleHQgdG8gYXZvaWQgYSBmYWxzZQorICAgICAgICAgICAgICAgICAqIHBv c2l0aXZlIGluIGNhc2UgdGhlIGRyaXZlciBzb21laG93IGVuZGVkIHVwIGZpbHRlcmluZyBmb3IK KyAgICAgICAgICAgICAgICAgKiBjb250ZXh0MQorICAgICAgICAgICAgICAgICAqLworICAgICAg ICAgICAgICAgIHJlbmRlcl9jb3B5KGJhdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnRleHQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzcmMsIDAsIDAsIHdpZHRo LCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRzdCwgMCwgMCk7CisKKyAg ICAgICAgICAgICAgICByZW5kZXJfY29weShiYXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb250ZXh0MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3JjLCAwLCAwLCB3 aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkc3QsIDAsIDApOwor CisgICAgICAgICAgICAgICAgLyogQW5kIGFub3RoZXIgKi8KKyAgICAgICAgICAgICAgICBpbnRl bF9iYXRjaGJ1ZmZlcl9mbHVzaF93aXRoX2NvbnRleHQoYmF0Y2gsIGNvbnRleHQxKTsKKworICAg ICAgICAgICAgICAgIGVtaXRfc3RhbGxfdGltZXN0YW1wX2FuZF9ycGMoYmF0Y2gsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUyMCAvKiB0aW1lc3RhbXAgb2Zmc2V0ICov LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU2LCAvKiBy ZXBvcnQgZHN0IG9mZnNldCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMHhiZWVmYmVlZik7IC8qIHJlcG9ydCBpZCAqLworCisgICAgICAgICAgICAgICAg aW50ZWxfYmF0Y2hidWZmZXJfZmx1c2hfd2l0aF9jb250ZXh0KGJhdGNoLCBjb250ZXh0MCk7CisK KyAgICAgICAgICAgICAgICByZXQgPSBkcm1faW50ZWxfYm9fbWFwKGJvLCBmYWxzZSAvKiB3cml0 ZSBlbmFibGUgKi8pOworICAgICAgICAgICAgICAgIGlndF9hc3NlcnRfZXEocmV0LCAwKTsKKwor ICAgICAgICAgICAgICAgIHJlcG9ydDBfMzIgPSBiby0+dmlydHVhbDsKKyAgICAgICAgICAgICAg ICBpZ3RfYXNzZXJ0X2VxKHJlcG9ydDBfMzJbMF0sIDB4ZGVhZGJlZWYpOyAvKiByZXBvcnQgSUQg Ki8KKyAgICAgICAgICAgICAgICBpZ3RfYXNzZXJ0X25lcShyZXBvcnQwXzMyWzFdLCAwKTsgLyog dGltZXN0YW1wICovCisKKyAgICAgICAgICAgICAgICByZXBvcnQxXzMyID0gcmVwb3J0MF8zMiAr IDY0OworICAgICAgICAgICAgICAgIGlndF9hc3NlcnRfZXEocmVwb3J0MV8zMlswXSwgMHhiZWVm YmVlZik7IC8qIHJlcG9ydCBJRCAqLworICAgICAgICAgICAgICAgIGlndF9hc3NlcnRfbmVxKHJl cG9ydDFfMzJbMV0sIDApOyAvKiB0aW1lc3RhbXAgKi8KKworICAgICAgICAgICAgICAgIHByaW50 X3JlcG9ydHMocmVwb3J0MF8zMiwgcmVwb3J0MV8zMiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxvb2t1cF9mb3JtYXQoSTkxNV9PQV9GT1JNQVRfQTQ1X0I4X0M4KSk7CisKKyAgICAg ICAgICAgICAgICAvKiBBNDAgPT0gTiBzYW1wbGVzIHdyaXR0ZW4gdG8gYWxsIHJlbmRlciB0YXJn ZXRzICovCisgICAgICAgICAgICAgICAgbl9zYW1wbGVzX3dyaXR0ZW4gPSByZXBvcnQxXzMyWzQz XSAtIHJlcG9ydDBfMzJbNDNdOworICAgICAgICAgICAgICAgIGlndF9kZWJ1ZygibiBzYW1wbGVz IHdyaXR0ZW4gPSAlZFxuIiwgbl9zYW1wbGVzX3dyaXR0ZW4pOworICAgICAgICAgICAgICAgIGln dF9hc3NlcnRfZXEobl9zYW1wbGVzX3dyaXR0ZW4sIHdpZHRoICogaGVpZ2h0KTsKKworICAgICAg ICAgICAgICAgIGlndF9kZWJ1ZygidGltZXN0YW1wMzIgMCA9ICV1XG4iLCByZXBvcnQwXzMyWzFd KTsKKyAgICAgICAgICAgICAgICBpZ3RfZGVidWcoInRpbWVzdGFtcDMyIDEgPSAldVxuIiwgcmVw b3J0MV8zMlsxXSk7CisKKyAgICAgICAgICAgICAgICB0aW1lc3RhbXAwXzY0ID0gKih1aW50NjRf dCAqKSgoKHVpbnQ4X3QgKiliby0+dmlydHVhbCkgKyA1MTIpOworICAgICAgICAgICAgICAgIHRp bWVzdGFtcDFfNjQgPSAqKHVpbnQ2NF90ICopKCgodWludDhfdCAqKWJvLT52aXJ0dWFsKSArIDUy MCk7CisKKyAgICAgICAgICAgICAgICBpZ3RfZGVidWcoInRpbWVzdGFtcDY0IDAgPSAlIlBSSXU2 NCJcbiIsIHRpbWVzdGFtcDBfNjQpOworICAgICAgICAgICAgICAgIGlndF9kZWJ1ZygidGltZXN0 YW1wNjQgMSA9ICUiUFJJdTY0IlxuIiwgdGltZXN0YW1wMV82NCk7CisKKyAgICAgICAgICAgICAg ICBkZWx0YV90czY0ID0gdGltZXN0YW1wMV82NCAtIHRpbWVzdGFtcDBfNjQ7CisgICAgICAgICAg ICAgICAgZGVsdGFfb2EzMiA9IHJlcG9ydDFfMzJbMV0gLSByZXBvcnQwXzMyWzFdOworCisgICAg ICAgICAgICAgICAgLyogc2FuaXR5IGNoZWNrIHRoYXQgd2UgY2FuIHBhc3MgdGhlIGRlbHRhIHRv IHRpbWViYXNlX3NjYWxlICovCisgICAgICAgICAgICAgICAgaWd0X2Fzc2VydChkZWx0YV90czY0 IDwgVUlOVDMyX01BWCk7CisgICAgICAgICAgICAgICAgZGVsdGFfb2EzMl9ucyA9IHRpbWViYXNl X3NjYWxlKGRlbHRhX29hMzIpOworICAgICAgICAgICAgICAgIGRlbHRhX3RzNjRfbnMgPSB0aW1l YmFzZV9zY2FsZShkZWx0YV90czY0KTsKKworICAgICAgICAgICAgICAgIGlndF9kZWJ1ZygidHMz MiBkZWx0YSA9ICV1LCA9ICV1bnNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRh X29hMzIsICh1bnNpZ25lZClkZWx0YV9vYTMyX25zKTsKKyAgICAgICAgICAgICAgICBpZ3RfZGVi dWcoInRzNjQgZGVsdGEgPSAldSwgPSAldW5zXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAg ICBkZWx0YV90czY0LCAodW5zaWduZWQpZGVsdGFfdHM2NF9ucyk7CisKKyAgICAgICAgICAgICAg ICAvKiBUaGUgZGVsdGEgYXMgY2FsY3VsYXRlZCB2aWEgdGhlIFBJUEVfQ09OVFJPTCB0aW1lc3Rh bXAgb3IKKyAgICAgICAgICAgICAgICAgKiB0aGUgT0EgcmVwb3J0IHRpbWVzdGFtcHMgc2hvdWxk IGJlIGFsbW9zdCBpZGVudGljYWwgYnV0CisgICAgICAgICAgICAgICAgICogYWxsb3cgYSAzMjAg bmFub3NlY29uZHMgbWFyZ2luLgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAg IGRlbHRhX2RlbHRhID0gZGVsdGFfdHM2NF9ucyA+IGRlbHRhX29hMzJfbnMgPworICAgICAgICAg ICAgICAgICAgICAgICAgKGRlbHRhX3RzNjRfbnMgLSBkZWx0YV9vYTMyX25zKSA6CisgICAgICAg ICAgICAgICAgICAgICAgICAoZGVsdGFfb2EzMl9ucyAtIGRlbHRhX3RzNjRfbnMpOworICAgICAg ICAgICAgICAgIGlndF9hc3NlcnQoZGVsdGFfZGVsdGEgPD0gMzIwKTsKKworICAgICAgICAgICAg ICAgIGludGVsX2JhdGNoYnVmZmVyX2ZyZWUoYmF0Y2gpOworICAgICAgICAgICAgICAgIGRybV9p bnRlbF9nZW1fY29udGV4dF9kZXN0cm95KGNvbnRleHQwKTsKKyAgICAgICAgICAgICAgICBkcm1f aW50ZWxfZ2VtX2NvbnRleHRfZGVzdHJveShjb250ZXh0MSk7CisgICAgICAgICAgICAgICAgZHJt X2ludGVsX2J1Zm1ncl9kZXN0cm95KGJ1Zm1ncik7CisgICAgICAgICAgICAgICAgY2xvc2Uoc3Ry ZWFtX2ZkKTsKKyAgICAgICAgfQorCisgICAgICAgIGlndF93YWl0Y2hpbGRyZW4oKTsKK30KKwor c3RhdGljIHZvaWQKK3Rlc3RfcmM2X2Rpc2FibGUodm9pZCkKK3sKKyAgICAgICAgaW50IG9hX2V4 cG9uZW50ID0gMTM7IC8qIDEgbWlsbGlzZWNvbmQgKi8KKyAgICAgICAgdWludDY0X3QgcHJvcGVy dGllc1tdID0geworICAgICAgICAgICAgICAgIC8qIEluY2x1ZGUgT0EgcmVwb3J0cyBpbiBzYW1w bGVzICovCisgICAgICAgICAgICAgICAgRFJNX0k5MTVfUEVSRl9QUk9QX1NBTVBMRV9PQSwgdHJ1 ZSwKKworICAgICAgICAgICAgICAgIC8qIE9BIHVuaXQgY29uZmlndXJhdGlvbiAqLworICAgICAg ICAgICAgICAgIERSTV9JOTE1X1BFUkZfUFJPUF9PQV9NRVRSSUNTX1NFVCwgaHN3X3JlbmRlcl9i YXNpY19pZCwKKyAgICAgICAgICAgICAgICBEUk1fSTkxNV9QRVJGX1BST1BfT0FfRk9STUFULCBJ OTE1X09BX0ZPUk1BVF9BNDVfQjhfQzgsCisgICAgICAgICAgICAgICAgRFJNX0k5MTVfUEVSRl9Q Uk9QX09BX0VYUE9ORU5ULCBvYV9leHBvbmVudCwKKyAgICAgICAgfTsKKyAgICAgICAgc3RydWN0 IGRybV9pOTE1X3BlcmZfb3Blbl9wYXJhbSBwYXJhbSA9IHsKKyAgICAgICAgICAgICAgICAuZmxh Z3MgPSBJOTE1X1BFUkZfRkxBR19GRF9DTE9FWEVDLAorICAgICAgICAgICAgICAgIC5udW1fcHJv cGVydGllcyA9IHNpemVvZihwcm9wZXJ0aWVzKSAvIDE2LAorICAgICAgICAgICAgICAgIC5wcm9w ZXJ0aWVzX3B0ciA9ICh1aW50NjRfdClwcm9wZXJ0aWVzLAorICAgICAgICB9OworICAgICAgICBp bnQgc3RyZWFtX2ZkID0gX19wZXJmX29wZW4oZHJtX2ZkLCAmcGFyYW0pOworICAgICAgICB1aW50 NjRfdCBuX2V2ZW50c19zdGFydCA9IHJlYWRfZGVidWdmc191NjRfcmVjb3JkKCJpOTE1X2RycGNf aW5mbyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIlJDNiByZXNpZGVuY3kgc2luY2UgYm9vdCIpOworICAgICAgICB1aW50NjRfdCBu X2V2ZW50c19lbmQ7CisKKyAgICAgICAgbmFub3NsZWVwKCYoc3RydWN0IHRpbWVzcGVjKXsgLnR2 X3NlYyA9IDAsIC50dl9uc2VjID0gNTAwMDAwMDAwIH0sIE5VTEwpOworCisgICAgICAgIG5fZXZl bnRzX2VuZCA9IHJlYWRfZGVidWdmc191NjRfcmVjb3JkKCJpOTE1X2RycGNfaW5mbyIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSQzYgcmVzaWRlbmN5 IHNpbmNlIGJvb3QiKTsKKworICAgICAgICBpZ3RfYXNzZXJ0X2VxKG5fZXZlbnRzX2VuZCAtIG5f ZXZlbnRzX3N0YXJ0LCAwKTsKKworICAgICAgICBjbG9zZShzdHJlYW1fZmQpOworCisgICAgICAg IG5fZXZlbnRzX3N0YXJ0ID0gcmVhZF9kZWJ1Z2ZzX3U2NF9yZWNvcmQoImk5MTVfZHJwY19pbmZv IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUkM2 IHJlc2lkZW5jeSBzaW5jZSBib290Iik7CisKKyAgICAgICAgbmFub3NsZWVwKCYoc3RydWN0IHRp bWVzcGVjKXsgLnR2X3NlYyA9IDAsIC50dl9uc2VjID0gNTAwMDAwMDAwIH0sIE5VTEwpOworCisg ICAgICAgIG5fZXZlbnRzX2VuZCA9IHJlYWRfZGVidWdmc191NjRfcmVjb3JkKCJpOTE1X2RycGNf aW5mbyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJS QzYgcmVzaWRlbmN5IHNpbmNlIGJvb3QiKTsKKworICAgICAgICBpZ3RfYXNzZXJ0X25lcShuX2V2 ZW50c19lbmQgLSBuX2V2ZW50c19zdGFydCwgMCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZAorcmVh ZF9pOTE1X21vZHVsZV9yZWYodm9pZCkKK3sKKyAgICAgICAgRklMRSAqZnAgPSBmb3BlbigiL3By b2MvbW9kdWxlcyIsICJyIik7CisgICAgICAgIGNoYXIgKmxpbmUgPSBOVUxMOworICAgICAgICBz aXplX3QgbGluZV9idWZfc2l6ZSA9IDA7CisgICAgICAgIGludCBsZW4gPSAwOworICAgICAgICB1 bnNpZ25lZCByZWZfY291bnQ7CisKKyAgICAgICAgaWd0X2Fzc2VydChmcCk7CisKKyAgICAgICAg d2hpbGUgKChsZW4gPSBnZXRsaW5lKCZsaW5lLCAmbGluZV9idWZfc2l6ZSwgZnApKSA+IDApIHsK KyAgICAgICAgICAgICAgICBpZiAoc3RybmNtcChsaW5lLCAiaTkxNSAiLCA1KSA9PSAwKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG1lbTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGludCByZXQgPSBzc2NhbmYobGluZSArIDUsICIlbHUgJXUiLCAmbWVtLCAmcmVm X2NvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlndF9hc3NlcnQocmV0ID09IDIpOwor ICAgICAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgfQorCisgICAgICAgIGlndF9hc3NlcnQoISJyZWFjaGVkIik7CisKK2RvbmU6CisgICAg ICAgIGZyZWUobGluZSk7CisgICAgICAgIGZjbG9zZShmcCk7CisgICAgICAgIHJldHVybiByZWZf Y291bnQ7Cit9CisKKy8qIGNoZWNrIHRoYXQgYW4gb3BlbiBpOTE1IHBlcmYgc3RyZWFtIGhvbGRz IGEgcmVmZXJlbmNlIG9uIHRoZSBkcm0gaTkxNSBtb2R1bGUKKyAqIGluY2x1ZGluZyBpbiB0aGUg Y29ybmVyIGNhc2Ugd2hlcmUgdGhlIG9yaWdpbmFsIGRybSBmZCBoYXMgYmVlbiBjbG9zZWQuCisg Ki8KK3N0YXRpYyB2b2lkCit0ZXN0X2k5MTVfcmVmX2NvdW50KHZvaWQpCit7CisgICAgICAgIGlu dCBvYV9leHBvbmVudCA9IDEzOyAvKiAxIG1pbGxpc2Vjb25kICovCisgICAgICAgIHVpbnQ2NF90 IHByb3BlcnRpZXNbXSA9IHsKKyAgICAgICAgICAgICAgICAvKiBJbmNsdWRlIE9BIHJlcG9ydHMg aW4gc2FtcGxlcyAqLworICAgICAgICAgICAgICAgIERSTV9JOTE1X1BFUkZfUFJPUF9TQU1QTEVf T0EsIHRydWUsCisKKyAgICAgICAgICAgICAgICAvKiBPQSB1bml0IGNvbmZpZ3VyYXRpb24gKi8K KyAgICAgICAgICAgICAgICBEUk1fSTkxNV9QRVJGX1BST1BfT0FfTUVUUklDU19TRVQsIGhzd19y ZW5kZXJfYmFzaWNfaWQsCisgICAgICAgICAgICAgICAgRFJNX0k5MTVfUEVSRl9QUk9QX09BX0ZP Uk1BVCwgSTkxNV9PQV9GT1JNQVRfQTQ1X0I4X0M4LAorICAgICAgICAgICAgICAgIERSTV9JOTE1 X1BFUkZfUFJPUF9PQV9FWFBPTkVOVCwgb2FfZXhwb25lbnQsCisgICAgICAgIH07CisgICAgICAg IHN0cnVjdCBkcm1faTkxNV9wZXJmX29wZW5fcGFyYW0gcGFyYW0gPSB7CisgICAgICAgICAgICAg ICAgLmZsYWdzID0gSTkxNV9QRVJGX0ZMQUdfRkRfQ0xPRVhFQywKKyAgICAgICAgICAgICAgICAu bnVtX3Byb3BlcnRpZXMgPSBzaXplb2YocHJvcGVydGllcykgLyAxNiwKKyAgICAgICAgICAgICAg ICAucHJvcGVydGllc19wdHIgPSAodWludDY0X3QpcHJvcGVydGllcywKKyAgICAgICAgfTsKKyAg ICAgICAgdW5zaWduZWQgYmFzZWxpbmUsIHJlZl9jb3VudDAsIHJlZl9jb3VudDE7CisgICAgICAg IGludCBzdHJlYW1fZmQ7CisgICAgICAgIHVpbnQzMl90IG9hX3JlcG9ydDBbNjRdOworICAgICAg ICB1aW50MzJfdCBvYV9yZXBvcnQxWzY0XTsKKworICAgICAgICBjbG9zZShkcm1fZmQpOworICAg ICAgICBiYXNlbGluZSA9IHJlYWRfaTkxNV9tb2R1bGVfcmVmKCk7CisgICAgICAgIGlndF9kZWJ1 ZygiYmFzZWxpbmUgcmVmIGNvdW50IChkcm0gZmQgY2xvc2VkKSA9ICV1XG4iLCBiYXNlbGluZSk7 CisKKyAgICAgICAgZHJtX2ZkID0gZHJtX29wZW5fZHJpdmVyX3JlbmRlcihEUklWRVJfSU5URUwp OworICAgICAgICByZWZfY291bnQwID0gcmVhZF9pOTE1X21vZHVsZV9yZWYoKTsKKyAgICAgICAg aWd0X2RlYnVnKCJpbml0aWFsIHJlZiBjb3VudCB3aXRoIGRybV9mZCBvcGVuID0gJXVcbiIsIHJl Zl9jb3VudDApOworICAgICAgICBpZ3RfYXNzZXJ0KHJlZl9jb3VudDAgPiBiYXNlbGluZSk7CisK KyAgICAgICAgc3RyZWFtX2ZkID0gX19wZXJmX29wZW4oZHJtX2ZkLCAmcGFyYW0pOworICAgICAg ICByZWZfY291bnQxID0gcmVhZF9pOTE1X21vZHVsZV9yZWYoKTsKKyAgICAgICAgaWd0X2RlYnVn KCJyZWYgY291bnQgYWZ0ZXIgb3BlbmluZyBpOTE1IHBlcmYgc3RyZWFtID0gJXVcbiIsIHJlZl9j b3VudDEpOworICAgICAgICBpZ3RfYXNzZXJ0KHJlZl9jb3VudDEgPiByZWZfY291bnQwKTsKKwor ICAgICAgICBjbG9zZShkcm1fZmQpOworICAgICAgICByZWZfY291bnQwID0gcmVhZF9pOTE1X21v ZHVsZV9yZWYoKTsKKyAgICAgICAgaWd0X2RlYnVnKCJyZWYgY291bnQgYWZ0ZXIgY2xvc2luZyBk cm0gZmQgPSAldVxuIiwgcmVmX2NvdW50MCk7CisKKyAgICAgICAgaWd0X2Fzc2VydChyZWZfY291 bnQwID4gYmFzZWxpbmUpOworCisgICAgICAgIHJlYWRfMl9vYV9yZXBvcnRzKHN0cmVhbV9mZCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgSTkxNV9PQV9GT1JNQVRfQTQ1X0I4X0M4LCAyNTYs CisgICAgICAgICAgICAgICAgICAgICAgICAgIG9hX2V4cG9uZW50LAorICAgICAgICAgICAgICAg ICAgICAgICAgICBvYV9yZXBvcnQwLAorICAgICAgICAgICAgICAgICAgICAgICAgICBvYV9yZXBv cnQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSk7IC8qIG5vdCBqdXN0IHRpbWVy IHJlcG9ydHMgKi8KKworICAgICAgICBjbG9zZShzdHJlYW1fZmQpOworICAgICAgICByZWZfY291 bnQwID0gcmVhZF9pOTE1X21vZHVsZV9yZWYoKTsKKyAgICAgICAgaWd0X2RlYnVnKCJyZWYgY291 bnQgYWZ0ZXIgY2xvc2luZyBpOTE1IHBlcmYgc3RyZWFtIGZkID0gJXVcbiIsIHJlZl9jb3VudDAp OworICAgICAgICBpZ3RfYXNzZXJ0X2VxKHJlZl9jb3VudDAsIGJhc2VsaW5lKTsKKworICAgICAg ICBkcm1fZmQgPSBkcm1fb3Blbl9kcml2ZXJfcmVuZGVyKERSSVZFUl9JTlRFTCk7Cit9CisKK2ln dF9tYWluCit7CisgICAgICAgIGlndF9za2lwX29uX3NpbXVsYXRpb24oKTsKKworICAgICAgICBp Z3RfZml4dHVyZSB7CisgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQgc2I7CisgICAgICAgICAg ICAgICAgaW50IHJldDsKKworICAgICAgICAgICAgICAgIGRybV9mZCA9IGRybV9vcGVuX2RyaXZl cl9yZW5kZXIoRFJJVkVSX0lOVEVMKTsKKyAgICAgICAgICAgICAgICBkZXZpZCA9IGludGVsX2dl dF9kcm1fZGV2aWQoZHJtX2ZkKTsKKyAgICAgICAgICAgICAgICBkZXZpY2UgPSBkcm1fZ2V0X2Nh cmQoKTsKKworICAgICAgICAgICAgICAgIGlndF9yZXF1aXJlKElTX0hBU1dFTEwoZGV2aWQpKTsK KyAgICAgICAgICAgICAgICBpZ3RfcmVxdWlyZShsb29rdXBfaHN3X3JlbmRlcl9iYXNpY19pZCgp KTsKKworICAgICAgICAgICAgICAgIHJldCA9IHN0YXQoIi9wcm9jL3N5cy9kZXYvaTkxNS9wZXJm X3N0cmVhbV9wYXJhbm9pZCIsICZzYik7CisgICAgICAgICAgICAgICAgaWd0X3JlcXVpcmUocmV0 ID09IDApOworICAgICAgICAgICAgICAgIHJldCA9IHN0YXQoIi9wcm9jL3N5cy9kZXYvaTkxNS9v YV9tYXhfc2FtcGxlX3JhdGUiLCAmc2IpOworICAgICAgICAgICAgICAgIGlndF9yZXF1aXJlKHJl dCA9PSAwKTsKKworICAgICAgICAgICAgICAgIGd0X2ZyZXF1ZW5jeV9yYW5nZV9zYXZlKCk7CisK KyAgICAgICAgICAgICAgICB3cml0ZV91NjRfZmlsZSgiL3Byb2Mvc3lzL2Rldi9pOTE1L3BlcmZf c3RyZWFtX3BhcmFub2lkIiwgMSk7CisKKyAgICAgICAgICAgICAgICByZW5kZXJfY29weSA9IGln dF9nZXRfcmVuZGVyX2NvcHlmdW5jKGRldmlkKTsKKyAgICAgICAgICAgICAgICBpZ3RfcmVxdWly ZV9mKHJlbmRlcl9jb3B5LCAibm8gcmVuZGVyLWNvcHkgZnVuY3Rpb25cbiIpOworICAgICAgICB9 CisKKyAgICAgICAgaWd0X3N1YnRlc3QoIm5vbi1zeXN0ZW0td2lkZS1wYXJhbm9pZCIpCisgICAg ICAgICAgICAgICAgdGVzdF9zeXN0ZW1fd2lkZV9wYXJhbm9pZCgpOworCisgICAgICAgIGlndF9z dWJ0ZXN0KCJpbnZhbGlkLW9wZW4tZmxhZ3MiKQorICAgICAgICAgICAgICAgIHRlc3RfaW52YWxp ZF9vcGVuX2ZsYWdzKCk7CisKKyAgICAgICAgaWd0X3N1YnRlc3QoImludmFsaWQtb2EtbWV0cmlj LXNldC1pZCIpCisgICAgICAgICAgICAgICAgdGVzdF9pbnZhbGlkX29hX21ldHJpY19zZXRfaWQo KTsKKworICAgICAgICBpZ3Rfc3VidGVzdCgiaW52YWxpZC1vYS1mb3JtYXQtaWQiKQorICAgICAg ICAgICAgICAgIHRlc3RfaW52YWxpZF9vYV9mb3JtYXRfaWQoKTsKKworICAgICAgICBpZ3Rfc3Vi dGVzdCgibWlzc2luZy1zYW1wbGUtZmxhZ3MiKQorICAgICAgICAgICAgICAgIHRlc3RfbWlzc2lu Z19zYW1wbGVfZmxhZ3MoKTsKKworICAgICAgICBpZ3Rfc3VidGVzdCgib2EtZm9ybWF0cyIpCisg ICAgICAgICAgICAgICAgdGVzdF9vYV9mb3JtYXRzKCk7CisKKyAgICAgICAgaWd0X3N1YnRlc3Qo ImludmFsaWQtb2EtZXhwb25lbnQiKQorICAgICAgICAgICAgICAgIHRlc3RfaW52YWxpZF9vYV9l eHBvbmVudCgpOworICAgICAgICBpZ3Rfc3VidGVzdCgibG93LW9hLWV4cG9uZW50LXBlcm1pc3Np b25zIikKKyAgICAgICAgICAgICAgICB0ZXN0X2xvd19vYV9leHBvbmVudF9wZXJtaXNzaW9ucygp OworICAgICAgICBpZ3Rfc3VidGVzdCgib2EtZXhwb25lbnRzIikgeworICAgICAgICAgICAgICAg IHRlc3Rfb2FfZXhwb25lbnRzKDQ1MCk7CisgICAgICAgICAgICAgICAgdGVzdF9vYV9leHBvbmVu dHMoNTUwKTsKKyAgICAgICAgfQorCisgICAgICAgIGlndF9zdWJ0ZXN0KCJwZXItY29udGV4dC1t b2RlLXVucHJpdmlsZWdlZCIpCisgICAgICAgICAgICAgICAgdGVzdF9wZXJfY29udGV4dF9tb2Rl X3VucHJpdmlsZWdlZCgpOworCisgICAgICAgIGlndF9zdWJ0ZXN0KCJidWZmZXItZmlsbCIpCisg ICAgICAgICAgICAgICAgdGVzdF9idWZmZXJfZmlsbCgpOworCisgICAgICAgIGlndF9zdWJ0ZXN0 KCJkaXNhYmxlZC1yZWFkLWVycm9yIikKKyAgICAgICAgICAgICAgICB0ZXN0X2Rpc2FibGVkX3Jl YWRfZXJyb3IoKTsKKyAgICAgICAgaWd0X3N1YnRlc3QoIm5vbi1zYW1wbGluZy1yZWFkLWVycm9y IikKKyAgICAgICAgICAgICAgICB0ZXN0X25vbl9zYW1wbGluZ19yZWFkX2Vycm9yKCk7CisKKyAg ICAgICAgaWd0X3N1YnRlc3QoImVuYWJsZS1kaXNhYmxlIikKKyAgICAgICAgICAgICAgICB0ZXN0 X2VuYWJsZV9kaXNhYmxlKCk7CisKKyAgICAgICAgaWd0X3N1YnRlc3QoImJsb2NraW5nIikKKyAg ICAgICAgICAgICAgICB0ZXN0X2Jsb2NraW5nKCk7CisKKyAgICAgICAgaWd0X3N1YnRlc3QoInBv bGxpbmciKQorICAgICAgICAgICAgICAgIHRlc3RfcG9sbGluZygpOworCisgICAgICAgIGlndF9z dWJ0ZXN0KCJzaG9ydC1yZWFkcyIpCisgICAgICAgICAgICAgICAgdGVzdF9zaG9ydF9yZWFkcygp OworCisgICAgICAgIGlndF9zdWJ0ZXN0KCJtaS1ycGMiKQorICAgICAgICAgICAgICAgIHRlc3Rf bWlfcnBjKCk7CisKKyAgICAgICAgaWd0X3N1YnRlc3QoIm1pLXJwYy1wZXItY3R4IikKKyAgICAg ICAgICAgICAgICB0ZXN0X3Blcl9jdHhfbWlfcnBjKCk7CisKKyAgICAgICAgaWd0X3N1YnRlc3Qo Imk5MTUtcmVmLWNvdW50IikKKyAgICAgICAgICAgICAgICB0ZXN0X2k5MTVfcmVmX2NvdW50KCk7 CisKKyAgICAgICAgaWd0X3N1YnRlc3QoInJjNi1kaXNhYmxlIikKKyAgICAgICAgICAgICAgICB0 ZXN0X3JjNl9kaXNhYmxlKCk7CisKKyAgICAgICAgaWd0X2ZpeHR1cmUgeworICAgICAgICAgICAg ICAgIC8qIGxlYXZlIHN5c2N0bCBvcHRpb25zIGluIHRoZWlyIGRlZmF1bHQgc3RhdGUuLi4gKi8K KyAgICAgICAgICAgICAgICB3cml0ZV91NjRfZmlsZSgiL3Byb2Mvc3lzL2Rldi9pOTE1L29hX21h eF9zYW1wbGVfcmF0ZSIsIDEwMDAwMCk7CisgICAgICAgICAgICAgICAgd3JpdGVfdTY0X2ZpbGUo Ii9wcm9jL3N5cy9kZXYvaTkxNS9wZXJmX3N0cmVhbV9wYXJhbm9pZCIsIDEpOworCisgICAgICAg ICAgICAgICAgZ3RfZnJlcXVlbmN5X3JhbmdlX3Jlc3RvcmUoKTsKKworICAgICAgICAgICAgICAg IGNsb3NlKGRybV9mZCk7CisgICAgICAgIH0KK30KLS0gCjIuMTAuMQoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJ bnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==