From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Anholt Subject: =?utf-8?q?=5BPATCH_01/13=5D_intel=3A_Import_intel=5Fd?= =?utf-8?q?ecode=2Ec_from_intel-gpu-tools=2E?= Date: Wed, 21 Dec 2011 10:09:31 -0800 Message-ID: <1324490983-6975-2-git-send-email-eric@anholt.net> References: <1324490983-6975-1-git-send-email-eric@anholt.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1324490983-6975-1-git-send-email-eric@anholt.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org Errors-To: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org VGhpcyBpcyBmcm9tIGNvbW1pdCBkZDlhNWI0ZjdmYjA3Yzc4ZGI0ZTc0ODFiZWRjYTFiOTgxMDMw ZTNmLgpXZSd2ZSBiZWVuIHNoYXJpbmcgdGhpcyBmaWxlIGJldHdlZW4gdGhhdCByZXBvIGFuZCBN ZXNhLCBhbmQgaXQncyB0aW1lCnRvIGJ1aWxkIGEgcmVhbCBpbnRlcmZhY2UgdXNpbmcgaXQuICBJ J20gYWxzbyBob3BpbmcgdG8gYXBwbHkgc29tZSBvZgppdHMgcGFja2V0LXdhbGtpbmcgbG9naWMg Zm9yIEFVQiBkdW1waW5nIGFuZCBiYXRjaCB2YWxpZGF0aW9uCnB1cnBvc2VzLgotLS0KIGludGVs L2ludGVsX2RlY29kZS5jIHwgMjkzMSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwogMSBmaWxlcyBjaGFuZ2VkLCAyOTMxIGluc2VydGlvbnMoKyksIDAg ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW50ZWwvaW50ZWxfZGVjb2RlLmMKCmRp ZmYgLS1naXQgYS9pbnRlbC9pbnRlbF9kZWNvZGUuYyBiL2ludGVsL2ludGVsX2RlY29kZS5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NDU3OGIKLS0tIC9kZXYvbnVsbAor KysgYi9pbnRlbC9pbnRlbF9kZWNvZGUuYwpAQCAtMCwwICsxLDI5MzEgQEAKKy8qCisgKiBDb3B5 cmlnaHQgwqkgMjAwOS0yMDExIEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n IGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5n IHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMg b3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBU SEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAq IFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlN LCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9G IENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFM SU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNp bmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0cmluZy5o PgorCisjaW5jbHVkZSAiaW50ZWxfZGVjb2RlLmgiCisjaW5jbHVkZSAiaW50ZWxfY2hpcHNldC5o IgorI2luY2x1ZGUgImludGVsX2dwdV90b29scy5oIgorCitzdGF0aWMgRklMRSAqb3V0Oworc3Rh dGljIHVpbnQzMl90IHNhdmVkX3MyID0gMCwgc2F2ZWRfczQgPSAwOworc3RhdGljIGNoYXIgc2F2 ZWRfczJfc2V0ID0gMCwgc2F2ZWRfczRfc2V0ID0gMDsKK3N0YXRpYyB1aW50MzJfdCBoZWFkX29m ZnNldCA9IDB4ZmZmZmZmZmY7IC8qIHVuZGVmaW5lZCAqLworc3RhdGljIHVpbnQzMl90IHRhaWxf b2Zmc2V0ID0gMHhmZmZmZmZmZjsgLyogdW5kZWZpbmVkICovCisKKyNpZm5kZWYgQVJSQVlfU0la RQorI2RlZmluZSBBUlJBWV9TSVpFKEEpIChzaXplb2YoQSkvc2l6ZW9mKEFbMF0pKQorI2VuZGlm CisKKyNkZWZpbmUgQlVGRkVSX0ZBSUwoX2NvdW50LCBfbGVuLCBfbmFtZSkgZG8gewkJCVwKKyAg ICBmcHJpbnRmKG91dCwgIkJ1ZmZlciBzaXplIHRvbyBzbWFsbCBpbiAlcyAoJWQgPCAlZClcbiIs CVwKKwkgICAgKF9uYW1lKSwgKF9jb3VudCksIChfbGVuKSk7CQkJCVwKKyAgICAoKmZhaWx1cmVz KSsrOwkJCQkJCVwKKyAgICByZXR1cm4gY291bnQ7CQkJCQkJXAorfSB3aGlsZSAoMCkKKworCitz dGF0aWMgZmxvYXQKK2ludF9hc19mbG9hdCh1aW50MzJfdCBpbnR2YWwpCit7CisgICAgdW5pb24g aW50ZmxvYXQgeworCXVpbnQzMl90IGk7CisJZmxvYXQgZjsKKyAgICB9IHV2YWw7CisKKyAgICB1 dmFsLmkgPSBpbnR2YWw7CisgICAgcmV0dXJuIHV2YWwuZjsKK30KKworc3RhdGljIHZvaWQKK2lu c3RyX291dCh1aW50MzJfdCAqZGF0YSwgdWludDMyX3QgaHdfb2Zmc2V0LCB1bnNpZ25lZCBpbnQg aW5kZXgsCisJICBjaGFyICpmbXQsIC4uLikKK3sKKyAgICB2YV9saXN0IHZhOworICAgIGNoYXIg KnBhcnNlaW5mbzsKKyAgICB1aW50MzJfdCBvZmZzZXQgPSBod19vZmZzZXQgKyBpbmRleCAqIDQ7 CisKKyAgICBpZiAob2Zmc2V0ID09IGhlYWRfb2Zmc2V0KQorCXBhcnNlaW5mbyA9ICJIRUFEIjsK KyAgICBlbHNlIGlmIChvZmZzZXQgPT0gdGFpbF9vZmZzZXQpCisJcGFyc2VpbmZvID0gIlRBSUwi OworICAgIGVsc2UKKwlwYXJzZWluZm8gPSAiICAgICI7CisKKyAgICBmcHJpbnRmKG91dCwgIjB4 JTA4eDogJXMgMHglMDh4OiAlcyIsIG9mZnNldCwgcGFyc2VpbmZvLAorCSAgICBkYXRhW2luZGV4 XSwKKwkgICAgaW5kZXggPT0gMCA/ICIiIDogIiAgICIpOworICAgIHZhX3N0YXJ0KHZhLCBmbXQp OworICAgIHZmcHJpbnRmKG91dCwgZm10LCB2YSk7CisgICAgdmFfZW5kKHZhKTsKK30KKworc3Rh dGljIGludAorZGVjb2RlX21pKHVpbnQzMl90ICpkYXRhLCBpbnQgY291bnQsIHVpbnQzMl90IGh3 X29mZnNldCwgaW50ICpmYWlsdXJlcykKK3sKKyAgICB1bnNpZ25lZCBpbnQgb3Bjb2RlLCBsZW4g PSAtMTsKKyAgICBjaGFyICpwb3N0X3N5bmNfb3AgPSAiIjsKKworICAgIHN0cnVjdCB7CisJdWlu dDMyX3Qgb3Bjb2RlOworCWludCBsZW5fbWFzazsKKwlpbnQgbWluX2xlbjsKKwlpbnQgbWF4X2xl bjsKKwljaGFyICpuYW1lOworICAgIH0gb3Bjb2Rlc19taVtdID0geworCXsgMHgwOCwgMCwgMSwg MSwgIk1JX0FSQl9PTl9PRkYiIH0sCisJeyAweDBhLCAwLCAxLCAxLCAiTUlfQkFUQ0hfQlVGRkVS X0VORCIgfSwKKwl7IDB4MzAsIDB4M2YsIDMsIDMsICJNSV9CQVRDSF9CVUZGRVIiIH0sCisJeyAw eDMxLCAweDNmLCAyLCAyLCAiTUlfQkFUQ0hfQlVGRkVSX1NUQVJUIiB9LAorCXsgMHgxNCwgMHgz ZiwgMywgMywgIk1JX0RJU1BMQVlfQlVGRkVSX0lORk8iIH0sCisJeyAweDA0LCAwLCAxLCAxLCAi TUlfRkxVU0giIH0sCisJeyAweDIyLCAweDFmLCAzLCAzLCAiTUlfTE9BRF9SRUdJU1RFUl9JTU0i IH0sCisJeyAweDEzLCAweDNmLCAyLCAyLCAiTUlfTE9BRF9TQ0FOX0xJTkVTX0VYQ0wiIH0sCisJ eyAweDEyLCAweDNmLCAyLCAyLCAiTUlfTE9BRF9TQ0FOX0xJTkVTX0lOQ0wiIH0sCisJeyAweDAw LCAwLCAxLCAxLCAiTUlfTk9PUCIgfSwKKwl7IDB4MTEsIDB4M2YsIDIsIDIsICJNSV9PVkVSTEFZ X0ZMSVAiIH0sCisJeyAweDA3LCAwLCAxLCAxLCAiTUlfUkVQT1JUX0hFQUQiIH0sCisJeyAweDE4 LCAweDNmLCAyLCAyLCAiTUlfU0VUX0NPTlRFWFQiIH0sCisJeyAweDIwLCAweDNmLCAzLCA0LCAi TUlfU1RPUkVfREFUQV9JTU0iIH0sCisJeyAweDIxLCAweDNmLCAzLCA0LCAiTUlfU1RPUkVfREFU QV9JTkRFWCIgfSwKKwl7IDB4MjQsIDB4M2YsIDMsIDMsICJNSV9TVE9SRV9SRUdJU1RFUl9NRU0i IH0sCisJeyAweDAyLCAwLCAxLCAxLCAiTUlfVVNFUl9JTlRFUlJVUFQiIH0sCisJeyAweDAzLCAw LCAxLCAxLCAiTUlfV0FJVF9GT1JfRVZFTlQiIH0sCisJeyAweDE2LCAweDdmLCAzLCAzLCAiTUlf U0VNQVBIT1JFX01CT1giIH0sCisJeyAweDI2LCAweDFmLCAzLCA0LCAiTUlfRkxVU0hfRFciIH0s CisJeyAweDBiLCAwLCAxLCAxLCAiTUlfU1VTUEVORF9GTFVTSCIgfSwKKyAgICB9OworCisgICAg LyogY2hlY2sgaW5zdHJ1Y3Rpb24gbGVuZ3RoICovCisgICAgZm9yIChvcGNvZGUgPSAwOyBvcGNv ZGUgPCBzaXplb2Yob3Bjb2Rlc19taSkgLyBzaXplb2Yob3Bjb2Rlc19taVswXSk7CisJIG9wY29k ZSsrKSB7CisJaWYgKChkYXRhWzBdICYgMHgxZjgwMDAwMCkgPj4gMjMgPT0gb3Bjb2Rlc19taVtv cGNvZGVdLm9wY29kZSkgeworCSAgICBsZW4gPSAxOworCSAgICBpZiAob3Bjb2Rlc19taVtvcGNv ZGVdLm1heF9sZW4gPiAxKSB7CisJCWxlbiA9IChkYXRhWzBdICYgb3Bjb2Rlc19taVtvcGNvZGVd Lmxlbl9tYXNrKSArIDI7CisJCWlmIChsZW4gPCBvcGNvZGVzX21pW29wY29kZV0ubWluX2xlbiB8 fAorCQkgICAgbGVuID4gb3Bjb2Rlc19taVtvcGNvZGVdLm1heF9sZW4pCisJCXsKKwkJICAgIGZw cmludGYob3V0LCAiQmFkIGxlbmd0aCAoJWQpIGluICVzLCBbJWQsICVkXVxuIiwKKwkJCSAgICBs ZW4sIG9wY29kZXNfbWlbb3Bjb2RlXS5uYW1lLAorCQkJICAgIG9wY29kZXNfbWlbb3Bjb2RlXS5t aW5fbGVuLAorCQkJICAgIG9wY29kZXNfbWlbb3Bjb2RlXS5tYXhfbGVuKTsKKwkJfQorCSAgICB9 CisJICAgIGJyZWFrOworCX0KKyAgICB9CisKKyAgICBzd2l0Y2ggKChkYXRhWzBdICYgMHgxZjgw MDAwMCkgPj4gMjMpIHsKKyAgICBjYXNlIDB4MGE6CisJaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNl dCwgMCwgIk1JX0JBVENIX0JVRkZFUl9FTkRcbiIpOworCXJldHVybiAtMTsKKyAgICBjYXNlIDB4 MTY6CisJaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMCwgIk1JX1NFTUFQSE9SRV9NQk9YJXMl cyVzJXMgJXVcbiIsCisJCSAgZGF0YVswXSAmICgxPDwyMikgPyAiIGdsb2JhbCBndHQsIiA6ICIi LAorCQkgIGRhdGFbMF0gJiAoMTw8MjEpID8gIiB1cGRhdGUgc2VtYXBob3JlLCIgOiAiIiwKKwkJ ICBkYXRhWzBdICYgKDE8PDIwKSA/ICIgY29tcGFyZSBzZW1hcGhvcmUsIiA6ICIiLAorCQkgIGRh dGFbMF0gJiAoMTw8MTgpID8gIiB1c2UgY29tcGFyZSByZWciIDogIiIsCisJCSAgKGRhdGFbMF0g JiAoMHgzPDwxNikpID4+IDE2KTsKKwlpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCAxLCAidmFs dWVcbiIpOworCWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIDIsICJhZGRyZXNzXG4iKTsKKwly ZXR1cm4gbGVuOworICAgIGNhc2UgMHgyMToKKwlpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCAw LCAiTUlfU1RPUkVfREFUQV9JTkRFWCVzXG4iLAorCQkgIGRhdGFbMF0gJiAoMTw8MjEpID8gIiB1 c2UgcGVyLXByb2Nlc3MgSFdTLCIgOiAiIik7CisJaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwg MSwgImluZGV4XG4iKTsKKwlpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCAyLCAiZHdvcmRcbiIp OworCWlmIChsZW4gPT0gNCkKKwkJaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMywgInVwcGVy IGR3b3JkXG4iKTsKKwlyZXR1cm4gbGVuOworICAgIGNhc2UgMHgwMDoKKwlpZiAoZGF0YVswXSAm ICgxPDwyMikpCisJCWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIDAsICJNSV9OT09QIHdyaXRl IE5PUElEIHJlZywgdmFsPTB4JXhcbiIsCisJCQkgIGRhdGFbMF0gJiAoKDE8PDIyKSAtIDEpKTsK KwllbHNlCisJCWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIDAsICJNSV9OT09QXG4iKTsKKwly ZXR1cm4gbGVuOworICAgIGNhc2UgMHgyNjoKKwlzd2l0Y2ggKGRhdGFbMF0gJiAoMHgzPDwxNCkp IHsKKwljYXNlICgwPDwxNCk6IHBvc3Rfc3luY19vcCA9ICJubyB3cml0ZSI7IGJyZWFrOworCWNh c2UgKDE8PDE0KTogcG9zdF9zeW5jX29wID0gIndyaXRlIGRhdGEiOyBicmVhazsKKwljYXNlICgy PDwxNCk6IHBvc3Rfc3luY19vcCA9ICJyZXNlcnZlZCI7IGJyZWFrOworCWNhc2UgKDM8PDE0KTog cG9zdF9zeW5jX29wID0gIndyaXRlIFRJTUVTVEFNUCI7IGJyZWFrOworCX0KKwlpbnN0cl9vdXQo ZGF0YSwgaHdfb2Zmc2V0LCAwLCAiTUlfRkxVU0hfRFclcyVzJXMlcyBwb3N0X3N5bmNfb3A9JyVz JyAlcyVzXG4iLAorCQkgIGRhdGFbMF0gJiAoMTw8MjIpID8gIiBlbmFibGUgcHJvdGVjdGVkIG1l bSAoQkNTLW9ubHkpLCIgOiAiIiwKKwkJICBkYXRhWzBdICYgKDE8PDIxKSA/ICIgc3RvcmUgaW4g aHdzLCIgOiAiIiwKKwkJICBkYXRhWzBdICYgKDE8PDE4KSA/ICIgaW52YWxpZGF0ZSB0bGIsIiA6 ICIiLAorCQkgIGRhdGFbMF0gJiAoMTw8MTcpID8gIiBmbHVzaCBnZmR0LCIgOiAiIiwKKwkJICBw b3N0X3N5bmNfb3AsCisJCSAgZGF0YVswXSAmICgxPDw4KSA/ICIgZW5hYmxlIG5vdGlmeSBpbnRl cnJ1cHQsIiA6ICIiLAorCQkgIGRhdGFbMF0gJiAoMTw8NykgPyAiIGludmFsaWRhdGUgdmlkZW8g c3RhdGUgKEJDUy1vbmx5KSwiIDogIiIpOworCWlmIChkYXRhWzBdICYgKDE8PDIxKSkKKwkJaW5z dHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMSwgImh3cyBpbmRleFxuIik7CisJZWxzZQorCQlpbnN0 cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCAxLCAiYWRkcmVzc1xuIik7CisJaW5zdHJfb3V0KGRhdGEs IGh3X29mZnNldCwgMiwgImR3b3JkXG4iKTsKKwlpZiAobGVuID09IDQpCisJCWluc3RyX291dChk YXRhLCBod19vZmZzZXQsIDMsICJ1cHBlciBkd29yZFxuIik7CisJcmV0dXJuIGxlbjsKKyAgICB9 CisKKyAgICBmb3IgKG9wY29kZSA9IDA7IG9wY29kZSA8IHNpemVvZihvcGNvZGVzX21pKSAvIHNp emVvZihvcGNvZGVzX21pWzBdKTsKKwkgb3Bjb2RlKyspIHsKKwlpZiAoKGRhdGFbMF0gJiAweDFm ODAwMDAwKSA+PiAyMyA9PSBvcGNvZGVzX21pW29wY29kZV0ub3Bjb2RlKSB7CisKKwkgICAgaW5z dHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMCwgIiVzXG4iLCBvcGNvZGVzX21pW29wY29kZV0ubmFt ZSk7CisJICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKGkgPj0gY291 bnQpCisJCSAgICBCVUZGRVJfRkFJTChjb3VudCwgbGVuLCBvcGNvZGVzX21pW29wY29kZV0ubmFt ZSk7CisJCWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIGksICJkd29yZCAlZFxuIiwgaSk7CisJ ICAgIH0KKworCSAgICByZXR1cm4gbGVuOworCX0KKyAgICB9CisKKyAgICBpbnN0cl9vdXQoZGF0 YSwgaHdfb2Zmc2V0LCAwLCAiTUkgVU5LTk9XTlxuIik7CisgICAgKCpmYWlsdXJlcykrKzsKKyAg ICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK2RlY29kZV8yZF9icjAwKHVpbnQzMl90ICpk YXRhLCBpbnQgY291bnQsIHVpbnQzMl90IGh3X29mZnNldCwgY2hhciAqY21kKQoreworICAgIGlu c3RyX291dChkYXRhLCBod19vZmZzZXQsIDAsCisJICAgICAgIiVzIChyZ2IgJXNhYmxlZCwgYWxw aGEgJXNhYmxlZCwgc3JjIHRpbGUgJWQsIGRzdCB0aWxlICVkKVxuIiwKKwkgICAgICBjbWQsCisJ ICAgICAgKGRhdGFbY291bnRdICYgKDEgPDwgMjApKSA/ICJlbiIgOiAiZGlzIiwKKwkgICAgICAo ZGF0YVtjb3VudF0gJiAoMSA8PCAyMSkpID8gImVuIiA6ICJkaXMiLAorCSAgICAgIChkYXRhW2Nv dW50XSA+PiAxNSkgJiAxLAorCSAgICAgIChkYXRhW2NvdW50XSA+PiAxMSkgJiAxKTsKK30KKwor c3RhdGljIHZvaWQKK2RlY29kZV8yZF9icjAxKHVpbnQzMl90ICpkYXRhLCBpbnQgY291bnQsIHVp bnQzMl90IGh3X29mZnNldCkKK3sKKyAgICBjaGFyICpmb3JtYXQ7CisgICAgc3dpdGNoICgoZGF0 YVtjb3VudF0gPj4gMjQpICYgMHgzKSB7CisgICAgY2FzZSAwOgorCWZvcm1hdD0iOCI7CisJYnJl YWs7CisgICAgY2FzZSAxOgorCWZvcm1hdD0iNTY1IjsKKwlicmVhazsKKyAgICBjYXNlIDI6CisJ Zm9ybWF0PSIxNTU1IjsKKwlicmVhazsKKyAgICBjYXNlIDM6CisJZm9ybWF0PSI4ODg4IjsKKwli cmVhazsKKyAgICB9CisKKyAgICBpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCBjb3VudCwgImZv cm1hdCAlcywgcGl0Y2ggJWQsIHJvcCAweCUwMngsICIKKwkgICAgICAiY2xpcHBpbmcgJXNhYmxl ZCwgJXMlcyBcbiIsCisKKwkgICAgICBmb3JtYXQsCisJICAgICAgKHNob3J0KShkYXRhW2NvdW50 XSAmIDB4ZmZmZiksCisJICAgICAgKGRhdGFbY291bnRdID4+IDE2KSAmMHhmZiwKKwkgICAgICBk YXRhW2NvdW50XSAmICgxIDw8IDMwKSA/ICJlbiIgOiAiZGlzIiwKKwkgICAgICBkYXRhW2NvdW50 XSAmICgxIDw8IDMxKSA/ICJzb2xpZCBwYXR0ZXJuIGVuYWJsZWQsICIgOiAiIiwKKwkgICAgICBk YXRhW2NvdW50XSAmICgxIDw8IDMxKSA/ICJtb25vIHBhdHRlcm4gdHJhbnNwYXJlbmN5IGVuYWJs ZWQsICIgOiAiIik7CisKK30KKworc3RhdGljIGludAorZGVjb2RlXzJkKHVpbnQzMl90ICpkYXRh LCBpbnQgY291bnQsIHVpbnQzMl90IGh3X29mZnNldCwgaW50ICpmYWlsdXJlcykKK3sKKyAgICB1 bnNpZ25lZCBpbnQgb3Bjb2RlLCBsZW47CisKKyAgICBzdHJ1Y3QgeworCXVpbnQzMl90IG9wY29k ZTsKKwlpbnQgbWluX2xlbjsKKwlpbnQgbWF4X2xlbjsKKwljaGFyICpuYW1lOworICAgIH0gb3Bj b2Rlc18yZFtdID0geworCXsgMHg0MCwgNSwgNSwgIkNPTE9SX0JMVCIgfSwKKwl7IDB4NDMsIDYs IDYsICJTUkNfQ09QWV9CTFQiIH0sCisJeyAweDAxLCA4LCA4LCAiWFlfU0VUVVBfQkxUIiB9LAor CXsgMHgxMSwgOSwgOSwgIlhZX1NFVFVQX01PTk9fUEFUVEVSTl9TTF9CTFQiIH0sCisJeyAweDAz LCAzLCAzLCAiWFlfU0VUVVBfQ0xJUF9CTFQiIH0sCisJeyAweDI0LCAyLCAyLCAiWFlfUElYRUxf QkxUIiB9LAorCXsgMHgyNSwgMywgMywgIlhZX1NDQU5MSU5FU19CTFQiIH0sCisJeyAweDI2LCA0 LCA0LCAiWV9URVhUX0JMVCIgfSwKKwl7IDB4MzEsIDUsIDEzNCwgIlhZX1RFWFRfSU1NRURJQVRF X0JMVCIgfSwKKwl7IDB4NTAsIDYsIDYsICJYWV9DT0xPUl9CTFQiIH0sCisJeyAweDUxLCA2LCA2 LCAiWFlfUEFUX0JMVCIgfSwKKwl7IDB4NzYsIDgsIDgsICJYWV9QQVRfQ0hST01BX0JMVCIgfSwK Kwl7IDB4NzIsIDcsIDEzNSwgIlhZX1BBVF9CTFRfSU1NRURJQVRFIiB9LAorCXsgMHg3NywgOSwg MTM3LCAiWFlfUEFUX0NIUk9NQV9CTFRfSU1NRURJQVRFIiB9LAorCXsgMHg1MiwgOSwgOSwgIlhZ X01PTk9fUEFUX0JMVCIgfSwKKwl7IDB4NTksIDcsIDcsICJYWV9NT05PX1BBVF9GSVhFRF9CTFQi IH0sCisJeyAweDUzLCA4LCA4LCAiWFlfU1JDX0NPUFlfQkxUIiB9LAorCXsgMHg1NCwgOCwgOCwg IlhZX01PTk9fU1JDX0NPUFlfQkxUIiB9LAorCXsgMHg3MSwgOSwgMTM3LCAiWFlfTU9OT19TUkNf Q09QWV9JTU1FRElBVEVfQkxUIiB9LAorCXsgMHg1NSwgOSwgOSwgIlhZX0ZVTExfQkxUIiB9LAor CXsgMHg1NSwgOSwgMTM3LCAiWFlfRlVMTF9JTU1FRElBVEVfUEFUVEVSTl9CTFQiIH0sCisJeyAw eDU2LCA5LCA5LCAiWFlfRlVMTF9NT05PX1NSQ19CTFQiIH0sCisJeyAweDc1LCAxMCwgMTM4LCAi WFlfRlVMTF9NT05PX1NSQ19JTU1FRElBVEVfUEFUVEVSTl9CTFQiIH0sCisJeyAweDU3LCAxMiwg MTIsICJYWV9GVUxMX01PTk9fUEFUVEVSTl9CTFQiIH0sCisJeyAweDU4LCAxMiwgMTIsICJYWV9G VUxMX01PTk9fUEFUVEVSTl9NT05PX1NSQ19CTFQiIH0sCisgICAgfTsKKworICAgIHN3aXRjaCAo KGRhdGFbMF0gJiAweDFmYzAwMDAwKSA+PiAyMikgeworICAgIGNhc2UgMHgyNToKKwlpbnN0cl9v dXQoZGF0YSwgaHdfb2Zmc2V0LCAwLAorCQkgICJYWV9TQ0FOTElORVNfQkxUIChwYXR0ZXJuIHNl ZWQgKCVkLCAlZCksIGRzdCB0aWxlICVkKVxuIiwKKwkJICAoZGF0YVswXSA+PiAxMikgJjB4OCwK KwkJICAoZGF0YVswXSA+PiA4KSAmMHg4LAorCQkgIChkYXRhWzBdID4+IDExKSAmIDEpOworCisJ bGVuID0gKGRhdGFbMF0gJiAweDAwMDAwMGZmKSArIDI7CisJaWYgKGxlbiAhPSAzKQorCSAgICBm cHJpbnRmKG91dCwgIkJhZCBjb3VudCBpbiBYWV9TQ0FOTElORVNfQkxUXG4iKTsKKwlpZiAoY291 bnQgPCAzKQorCSAgICBCVUZGRVJfRkFJTChjb3VudCwgbGVuLCAiWFlfU0NBTkxJTkVTX0JMVCIp OworCisJaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMSwgImRlc3QgKCVkLCVkKVxuIiwKKwkJ ICBkYXRhWzFdICYgMHhmZmZmLCBkYXRhWzFdID4+IDE2KTsKKwlpbnN0cl9vdXQoZGF0YSwgaHdf b2Zmc2V0LCAyLCAiZGVzdCAoJWQsJWQpXG4iLAorCQkgIGRhdGFbMl0gJiAweGZmZmYsIGRhdGFb Ml0gPj4gMTYpOworCXJldHVybiBsZW47CisgICAgY2FzZSAweDAxOgorCWRlY29kZV8yZF9icjAw KGRhdGEsIDAsIGh3X29mZnNldCwgIlhZX1NFVFVQX0JMVCIpOworCisJbGVuID0gKGRhdGFbMF0g JiAweDAwMDAwMGZmKSArIDI7CisJaWYgKGxlbiAhPSA4KQorCSAgICBmcHJpbnRmKG91dCwgIkJh ZCBjb3VudCBpbiBYWV9TRVRVUF9CTFRcbiIpOworCWlmIChjb3VudCA8IDgpCisJICAgIEJVRkZF Ul9GQUlMKGNvdW50LCBsZW4sICJYWV9TRVRVUF9CTFQiKTsKKworCWRlY29kZV8yZF9icjAxKGRh dGEsIDEsIGh3X29mZnNldCk7CisJaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMiwgImNsaXBy ZWN0ICglZCwlZClcbiIsCisJCSAgZGF0YVsyXSAmIDB4ZmZmZiwgZGF0YVsyXSA+PiAxNik7CisJ aW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMywgImNsaXByZWN0ICglZCwlZClcbiIsCisJCSAg ZGF0YVszXSAmIDB4ZmZmZiwgZGF0YVszXSA+PiAxNik7CisJaW5zdHJfb3V0KGRhdGEsIGh3X29m ZnNldCwgNCwgInNldHVwIGRzdCBvZmZzZXQgMHglMDh4XG4iLCBkYXRhWzRdKTsKKwlpbnN0cl9v dXQoZGF0YSwgaHdfb2Zmc2V0LCA1LCAic2V0dXAgYmFja2dyb3VuZCBjb2xvclxuIik7CisJaW5z dHJfb3V0KGRhdGEsIGh3X29mZnNldCwgNiwgInNldHVwIGZvcmVncm91bmQgY29sb3JcbiIpOwor CWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIDcsICJjb2xvciBwYXR0ZXJuIG9mZnNldFxuIik7 CisJcmV0dXJuIGxlbjsKKyAgICBjYXNlIDB4MDM6CisJZGVjb2RlXzJkX2JyMDAoZGF0YSwgMCwg aHdfb2Zmc2V0LCAiWFlfU0VUVVBfQ0xJUF9CTFQiKTsKKworCWxlbiA9IChkYXRhWzBdICYgMHgw MDAwMDBmZikgKyAyOworCWlmIChsZW4gIT0gMykKKwkgICAgZnByaW50ZihvdXQsICJCYWQgY291 bnQgaW4gWFlfU0VUVVBfQ0xJUF9CTFRcbiIpOworCWlmIChjb3VudCA8IDMpCisJICAgIEJVRkZF Ul9GQUlMKGNvdW50LCBsZW4sICJYWV9TRVRVUF9DTElQX0JMVCIpOworCisJaW5zdHJfb3V0KGRh dGEsIGh3X29mZnNldCwgMSwgImNsaXByZWN0ICglZCwlZClcbiIsCisJCSAgZGF0YVsxXSAmIDB4 ZmZmZiwgZGF0YVsyXSA+PiAxNik7CisJaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMiwgImNs aXByZWN0ICglZCwlZClcbiIsCisJCSAgZGF0YVsyXSAmIDB4ZmZmZiwgZGF0YVszXSA+PiAxNik7 CisJcmV0dXJuIGxlbjsKKyAgICBjYXNlIDB4MTE6CisJZGVjb2RlXzJkX2JyMDAoZGF0YSwgMCwg aHdfb2Zmc2V0LCAiWFlfU0VUVVBfTU9OT19QQVRURVJOX1NMX0JMVCIpOworCisJbGVuID0gKGRh dGFbMF0gJiAweDAwMDAwMGZmKSArIDI7CisJaWYgKGxlbiAhPSA5KQorCSAgICBmcHJpbnRmKG91 dCwgIkJhZCBjb3VudCBpbiBYWV9TRVRVUF9NT05PX1BBVFRFUk5fU0xfQkxUXG4iKTsKKwlpZiAo Y291bnQgPCA5KQorCSAgICBCVUZGRVJfRkFJTChjb3VudCwgbGVuLCAiWFlfU0VUVVBfTU9OT19Q QVRURVJOX1NMX0JMVCIpOworCisJZGVjb2RlXzJkX2JyMDEoZGF0YSwgMSwgaHdfb2Zmc2V0KTsK KwlpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCAyLCAiY2xpcHJlY3QgKCVkLCVkKVxuIiwKKwkJ ICBkYXRhWzJdICYgMHhmZmZmLCBkYXRhWzJdID4+IDE2KTsKKwlpbnN0cl9vdXQoZGF0YSwgaHdf b2Zmc2V0LCAzLCAiY2xpcHJlY3QgKCVkLCVkKVxuIiwKKwkJICBkYXRhWzNdICYgMHhmZmZmLCBk YXRhWzNdID4+IDE2KTsKKwlpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCA0LCAic2V0dXAgZHN0 IG9mZnNldCAweCUwOHhcbiIsIGRhdGFbNF0pOworCWluc3RyX291dChkYXRhLCBod19vZmZzZXQs IDUsICJzZXR1cCBiYWNrZ3JvdW5kIGNvbG9yXG4iKTsKKwlpbnN0cl9vdXQoZGF0YSwgaHdfb2Zm c2V0LCA2LCAic2V0dXAgZm9yZWdyb3VuZCBjb2xvclxuIik7CisJaW5zdHJfb3V0KGRhdGEsIGh3 X29mZnNldCwgNywgIm1vbm8gcGF0dGVybiBkdzBcbiIpOworCWluc3RyX291dChkYXRhLCBod19v ZmZzZXQsIDgsICJtb25vIHBhdHRlcm4gZHcxXG4iKTsKKwlyZXR1cm4gbGVuOworICAgIGNhc2Ug MHg1MDoKKwlkZWNvZGVfMmRfYnIwMChkYXRhLCAwLCBod19vZmZzZXQsICJYWV9DT0xPUl9CTFQi KTsKKworCWxlbiA9IChkYXRhWzBdICYgMHgwMDAwMDBmZikgKyAyOworCWlmIChsZW4gIT0gNikK KwkgICAgZnByaW50ZihvdXQsICJCYWQgY291bnQgaW4gWFlfQ09MT1JfQkxUXG4iKTsKKwlpZiAo Y291bnQgPCA2KQorCSAgICBCVUZGRVJfRkFJTChjb3VudCwgbGVuLCAiWFlfQ09MT1JfQkxUIik7 CisKKwlkZWNvZGVfMmRfYnIwMShkYXRhLCAxLCBod19vZmZzZXQpOworCWluc3RyX291dChkYXRh LCBod19vZmZzZXQsIDIsICIoJWQsJWQpXG4iLAorCQkgIGRhdGFbMl0gJiAweGZmZmYsIGRhdGFb Ml0gPj4gMTYpOworCWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIDMsICIoJWQsJWQpXG4iLAor CQkgIGRhdGFbM10gJiAweGZmZmYsIGRhdGFbM10gPj4gMTYpOworCWluc3RyX291dChkYXRhLCBo d19vZmZzZXQsIDQsICJvZmZzZXQgMHglMDh4XG4iLCBkYXRhWzRdKTsKKwlpbnN0cl9vdXQoZGF0 YSwgaHdfb2Zmc2V0LCA1LCAiY29sb3JcbiIpOworCXJldHVybiBsZW47CisgICAgY2FzZSAweDUz OgorCWRlY29kZV8yZF9icjAwKGRhdGEsIDAsIGh3X29mZnNldCwgIlhZX1NSQ19DT1BZX0JMVCIp OworCisJbGVuID0gKGRhdGFbMF0gJiAweDAwMDAwMGZmKSArIDI7CisJaWYgKGxlbiAhPSA4KQor CSAgICBmcHJpbnRmKG91dCwgIkJhZCBjb3VudCBpbiBYWV9TUkNfQ09QWV9CTFRcbiIpOworCWlm IChjb3VudCA8IDgpCisJICAgIEJVRkZFUl9GQUlMKGNvdW50LCBsZW4sICJYWV9TUkNfQ09QWV9C TFQiKTsKKworCWRlY29kZV8yZF9icjAxKGRhdGEsIDEsIGh3X29mZnNldCk7CisJaW5zdHJfb3V0 KGRhdGEsIGh3X29mZnNldCwgMiwgImRzdCAoJWQsJWQpXG4iLAorCQkgIGRhdGFbMl0gJiAweGZm ZmYsIGRhdGFbMl0gPj4gMTYpOworCWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIDMsICJkc3Qg KCVkLCVkKVxuIiwKKwkJICBkYXRhWzNdICYgMHhmZmZmLCBkYXRhWzNdID4+IDE2KTsKKwlpbnN0 cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCA0LCAiZHN0IG9mZnNldCAweCUwOHhcbiIsIGRhdGFbNF0p OworCWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIDUsICJzcmMgKCVkLCVkKVxuIiwKKwkJICBk YXRhWzVdICYgMHhmZmZmLCBkYXRhWzVdID4+IDE2KTsKKwlpbnN0cl9vdXQoZGF0YSwgaHdfb2Zm c2V0LCA2LCAic3JjIHBpdGNoICVkXG4iLAorCQkgIChzaG9ydCkoZGF0YVs2XSAmIDB4ZmZmZikp OworCWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIDcsICJzcmMgb2Zmc2V0IDB4JTA4eFxuIiwg ZGF0YVs3XSk7CisJcmV0dXJuIGxlbjsKKyAgICB9CisKKyAgICBmb3IgKG9wY29kZSA9IDA7IG9w Y29kZSA8IHNpemVvZihvcGNvZGVzXzJkKSAvIHNpemVvZihvcGNvZGVzXzJkWzBdKTsKKwkgb3Bj b2RlKyspIHsKKwlpZiAoKGRhdGFbMF0gJiAweDFmYzAwMDAwKSA+PiAyMiA9PSBvcGNvZGVzXzJk W29wY29kZV0ub3Bjb2RlKSB7CisJICAgIHVuc2lnbmVkIGludCBpOworCisJICAgIGxlbiA9IDE7 CisJICAgIGluc3RyX291dChkYXRhLCBod19vZmZzZXQsIDAsICIlc1xuIiwgb3Bjb2Rlc18yZFtv cGNvZGVdLm5hbWUpOworCSAgICBpZiAob3Bjb2Rlc18yZFtvcGNvZGVdLm1heF9sZW4gPiAxKSB7 CisJCWxlbiA9IChkYXRhWzBdICYgMHgwMDAwMDBmZikgKyAyOworCQlpZiAobGVuIDwgb3Bjb2Rl c18yZFtvcGNvZGVdLm1pbl9sZW4gfHwKKwkJICAgIGxlbiA+IG9wY29kZXNfMmRbb3Bjb2RlXS5t YXhfbGVuKQorCQl7CisJCSAgICBmcHJpbnRmKG91dCwgIkJhZCBjb3VudCBpbiAlc1xuIiwgb3Bj b2Rlc18yZFtvcGNvZGVdLm5hbWUpOworCQl9CisJICAgIH0KKworCSAgICBmb3IgKGkgPSAxOyBp IDwgbGVuOyBpKyspIHsKKwkJaWYgKGkgPj0gY291bnQpCisJCSAgICBCVUZGRVJfRkFJTChjb3Vu dCwgbGVuLCBvcGNvZGVzXzJkW29wY29kZV0ubmFtZSk7CisJCWluc3RyX291dChkYXRhLCBod19v ZmZzZXQsIGksICJkd29yZCAlZFxuIiwgaSk7CisJICAgIH0KKworCSAgICByZXR1cm4gbGVuOwor CX0KKyAgICB9CisKKyAgICBpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCAwLCAiMkQgVU5LTk9X TlxuIik7CisgICAgKCpmYWlsdXJlcykrKzsKKyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIGlu dAorZGVjb2RlXzNkXzFjKHVpbnQzMl90ICpkYXRhLCBpbnQgY291bnQsIHVpbnQzMl90IGh3X29m ZnNldCwgaW50ICpmYWlsdXJlcykKK3sKKyAgICB1aW50MzJfdCBvcGNvZGU7CisKKyAgICBvcGNv ZGUgPSAoZGF0YVswXSAmIDB4MDBmODAwMDApID4+IDE5OworCisgICAgc3dpdGNoIChvcGNvZGUp IHsKKyAgICBjYXNlIDB4MTE6CisJaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMCwgIjNEU1RB VEVfREVQVEhfU1VCUkVDVEFOR0xFX0RJU0FCTEVcbiIpOworCXJldHVybiAxOworICAgIGNhc2Ug MHgxMDoKKwlpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCAwLCAiM0RTVEFURV9TQ0lTU09SX0VO QUJMRSAlc1xuIiwKKwkJZGF0YVswXSYxPyJlbmFibGVkIjoiZGlzYWJsZWQiKTsKKwlyZXR1cm4g MTsKKyAgICBjYXNlIDB4MDE6CisJaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMCwgIjNEU1RB VEVfTUFQX0NPT1JEX1NFVF9JODMwXG4iKTsKKwlyZXR1cm4gMTsKKyAgICBjYXNlIDB4MGE6CisJ aW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMCwgIjNEU1RBVEVfTUFQX0NVQkVfSTgzMFxuIik7 CisJcmV0dXJuIDE7CisgICAgY2FzZSAweDA1OgorCWluc3RyX291dChkYXRhLCBod19vZmZzZXQs IDAsICIzRFNUQVRFX01BUF9URVhfU1RSRUFNX0k4MzBcbiIpOworCXJldHVybiAxOworICAgIH0K KworICAgIGluc3RyX291dChkYXRhLCBod19vZmZzZXQsIDAsICIzRCBVTktOT1dOOiAzZF8xYyBv cGNvZGUgPSAweCV4XG4iLAorCSAgICAgIG9wY29kZSk7CisgICAgKCpmYWlsdXJlcykrKzsKKyAg ICByZXR1cm4gMTsKK30KKworLyoqIFNldHMgdGhlIHN0cmluZyBkc3RuYW1lIHRvIGRlc2NyaWJl IHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgUFMgaW5zdHJ1Y3Rpb24gKi8KK3N0YXRpYyB2b2lkCitp OTE1X2dldF9pbnN0cnVjdGlvbl9kc3QodWludDMyX3QgKmRhdGEsIGludCBpLCBjaGFyICpkc3Ru YW1lLCBpbnQgZG9fbWFzaykKK3sKKyAgICB1aW50MzJfdCBhMCA9IGRhdGFbaV07CisgICAgaW50 IGRzdF9uciA9IChhMCA+PiAxNCkgJiAweGY7CisgICAgY2hhciBkc3RtYXNrWzhdOworICAgIGNo YXIgKnNhdDsKKworICAgIGlmIChkb19tYXNrKSB7CisJaWYgKCgoYTAgPj4gMTApICYgMHhmKSA9 PSAweGYpIHsKKwkgICAgZHN0bWFza1swXSA9IDA7CisJfSBlbHNlIHsKKwkgICAgaW50IGRzdG1h c2tfaW5kZXggPSAwOworCisJICAgIGRzdG1hc2tbZHN0bWFza19pbmRleCsrXSA9ICcuJzsKKwkg ICAgaWYgKGEwICYgKDEgPDwgMTApKQorCQlkc3RtYXNrW2RzdG1hc2tfaW5kZXgrK10gPSAneCc7 CisJICAgIGlmIChhMCAmICgxIDw8IDExKSkKKwkJZHN0bWFza1tkc3RtYXNrX2luZGV4KytdID0g J3knOworCSAgICBpZiAoYTAgJiAoMSA8PCAxMikpCisJCWRzdG1hc2tbZHN0bWFza19pbmRleCsr XSA9ICd6JzsKKwkgICAgaWYgKGEwICYgKDEgPDwgMTMpKQorCQlkc3RtYXNrW2RzdG1hc2tfaW5k ZXgrK10gPSAndyc7CisJICAgIGRzdG1hc2tbZHN0bWFza19pbmRleCsrXSA9IDA7CisJfQorCisJ aWYgKGEwICYgKDEgPDwgMjIpKQorCSAgICBzYXQgPSAiLnNhdCI7CisJZWxzZQorCSAgICBzYXQg PSAiIjsKKyAgICB9IGVsc2UgeworCWRzdG1hc2tbMF0gPSAwOworCXNhdCA9ICIiOworICAgIH0K KworICAgIHN3aXRjaCAoKGEwID4+IDE5KSAmIDB4NykgeworICAgIGNhc2UgMDoKKwlpZiAoZHN0 X25yID4gMTUpCisJICAgIGZwcmludGYob3V0LCAiYmFkIGRlc3RpbmF0aW9uIHJlZyBSJWRcbiIs IGRzdF9ucik7CisJc3ByaW50Zihkc3RuYW1lLCAiUiVkJXMlcyIsIGRzdF9uciwgZHN0bWFzaywg c2F0KTsKKwlicmVhazsKKyAgICBjYXNlIDQ6CisJaWYgKGRzdF9uciA+IDApCisJICAgIGZwcmlu dGYob3V0LCAiYmFkIGRlc3RpbmF0aW9uIHJlZyBvQyVkXG4iLCBkc3RfbnIpOworCXNwcmludGYo ZHN0bmFtZSwgIm9DJXMlcyIsIGRzdG1hc2ssIHNhdCk7CisJYnJlYWs7CisgICAgY2FzZSA1Ogor CWlmIChkc3RfbnIgPiAwKQorCSAgICBmcHJpbnRmKG91dCwgImJhZCBkZXN0aW5hdGlvbiByZWcg b0QlZFxuIiwgZHN0X25yKTsKKwlzcHJpbnRmKGRzdG5hbWUsICJvRCVzJXMiLCAgZHN0bWFzaywg c2F0KTsKKwlicmVhazsKKyAgICBjYXNlIDY6CisJaWYgKGRzdF9uciA+IDMpCisJICAgIGZwcmlu dGYob3V0LCAiYmFkIGRlc3RpbmF0aW9uIHJlZyBVJWRcbiIsIGRzdF9ucik7CisJc3ByaW50Zihk c3RuYW1lLCAiVSVkJXMlcyIsIGRzdF9uciwgZHN0bWFzaywgc2F0KTsKKwlicmVhazsKKyAgICBk ZWZhdWx0OgorCXNwcmludGYoZHN0bmFtZSwgIlJFU0VSVkVEIik7CisJYnJlYWs7CisgICAgfQor fQorCitzdGF0aWMgY2hhciAqCitpOTE1X2dldF9jaGFubmVsX3N3aXp6bGUodWludDMyX3Qgc2Vs ZWN0KQoreworICAgIHN3aXRjaCAoc2VsZWN0ICYgMHg3KSB7CisgICAgY2FzZSAwOgorCXJldHVy biAoc2VsZWN0ICYgOCkgPyAiLXgiIDogIngiOworICAgIGNhc2UgMToKKwlyZXR1cm4gKHNlbGVj dCAmIDgpID8gIi15IiA6ICJ5IjsKKyAgICBjYXNlIDI6CisJcmV0dXJuIChzZWxlY3QgJiA4KSA/ ICIteiIgOiAieiI7CisgICAgY2FzZSAzOgorCXJldHVybiAoc2VsZWN0ICYgOCkgPyAiLXciIDog InciOworICAgIGNhc2UgNDoKKwlyZXR1cm4gKHNlbGVjdCAmIDgpID8gIi0wIiA6ICIwIjsKKyAg ICBjYXNlIDU6CisJcmV0dXJuIChzZWxlY3QgJiA4KSA/ICItMSIgOiAiMSI7CisgICAgZGVmYXVs dDoKKwlyZXR1cm4gKHNlbGVjdCAmIDgpID8gIi1iYWQiIDogImJhZCI7CisgICAgfQorfQorCitz dGF0aWMgdm9pZAoraTkxNV9nZXRfaW5zdHJ1Y3Rpb25fc3JjX25hbWUodWludDMyX3Qgc3JjX3R5 cGUsIHVpbnQzMl90IHNyY19uciwgY2hhciAqbmFtZSkKK3sKKyAgICBzd2l0Y2ggKHNyY190eXBl KSB7CisgICAgY2FzZSAwOgorCXNwcmludGYobmFtZSwgIlIlZCIsIHNyY19ucik7CisJaWYgKHNy Y19uciA+IDE1KQorCSAgICBmcHJpbnRmKG91dCwgImJhZCBzcmMgcmVnICVzXG4iLCBuYW1lKTsK KwlicmVhazsKKyAgICBjYXNlIDE6CisJaWYgKHNyY19uciA8IDgpCisJICAgIHNwcmludGYobmFt ZSwgIlQlZCIsIHNyY19ucik7CisJZWxzZSBpZiAoc3JjX25yID09IDgpCisJICAgIHNwcmludGYo bmFtZSwgIkRJRkZVU0UiKTsKKwllbHNlIGlmIChzcmNfbnIgPT0gOSkKKwkgICAgc3ByaW50Zihu YW1lLCAiU1BFQ1VMQVIiKTsKKwllbHNlIGlmIChzcmNfbnIgPT0gMTApCisJICAgIHNwcmludGYo bmFtZSwgIkZPRyIpOworCWVsc2UgeworCSAgICBmcHJpbnRmKG91dCwgImJhZCBzcmMgcmVnIFQl ZFxuIiwgc3JjX25yKTsKKwkgICAgc3ByaW50ZihuYW1lLCAiUkVTRVJWRUQiKTsKKwl9CisJYnJl YWs7CisgICAgY2FzZSAyOgorCXNwcmludGYobmFtZSwgIkMlZCIsIHNyY19ucik7CisJaWYgKHNy Y19uciA+IDMxKQorCSAgICBmcHJpbnRmKG91dCwgImJhZCBzcmMgcmVnICVzXG4iLCBuYW1lKTsK KwlicmVhazsKKyAgICBjYXNlIDQ6CisJc3ByaW50ZihuYW1lLCAib0MiKTsKKwlpZiAoc3JjX25y ID4gMCkKKwkgICAgZnByaW50ZihvdXQsICJiYWQgc3JjIHJlZyBvQyVkXG4iLCBzcmNfbnIpOwor CWJyZWFrOworICAgIGNhc2UgNToKKwlzcHJpbnRmKG5hbWUsICJvRCIpOworCWlmIChzcmNfbnIg PiAwKQorCSAgICBmcHJpbnRmKG91dCwgImJhZCBzcmMgcmVnIG9EJWRcbiIsIHNyY19ucik7CisJ YnJlYWs7CisgICAgY2FzZSA2OgorCXNwcmludGYobmFtZSwgIlUlZCIsIHNyY19ucik7CisJaWYg KHNyY19uciA+IDMpCisJICAgIGZwcmludGYob3V0LCAiYmFkIHNyYyByZWcgJXNcbiIsIG5hbWUp OworCWJyZWFrOworICAgIGRlZmF1bHQ6CisJZnByaW50ZihvdXQsICJiYWQgc3JjIHJlZyB0eXBl ICVkXG4iLCBzcmNfdHlwZSk7CisJc3ByaW50ZihuYW1lLCAiUkVTRVJWRUQiKTsKKwlicmVhazsK KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitpOTE1X2dldF9pbnN0cnVjdGlvbl9zcmMwKHVpbnQz Ml90ICpkYXRhLCBpbnQgaSwgY2hhciAqc3JjbmFtZSkKK3sKKyAgICB1aW50MzJfdCBhMCA9IGRh dGFbaV07CisgICAgdWludDMyX3QgYTEgPSBkYXRhW2kgKyAxXTsKKyAgICBpbnQgc3JjX25yID0g KGEwID4+IDIpICYgMHgxZjsKKyAgICBjaGFyICpzd2l6emxlX3ggPSBpOTE1X2dldF9jaGFubmVs X3N3aXp6bGUoKGExID4+IDI4KSAmIDB4Zik7CisgICAgY2hhciAqc3dpenpsZV95ID0gaTkxNV9n ZXRfY2hhbm5lbF9zd2l6emxlKChhMSA+PiAyNCkgJiAweGYpOworICAgIGNoYXIgKnN3aXp6bGVf eiA9IGk5MTVfZ2V0X2NoYW5uZWxfc3dpenpsZSgoYTEgPj4gMjApICYgMHhmKTsKKyAgICBjaGFy ICpzd2l6emxlX3cgPSBpOTE1X2dldF9jaGFubmVsX3N3aXp6bGUoKGExID4+IDE2KSAmIDB4Zik7 CisgICAgY2hhciBzd2l6emxlWzEwMF07CisKKyAgICBpOTE1X2dldF9pbnN0cnVjdGlvbl9zcmNf bmFtZSgoYTAgPj4gNykgJiAweDcsIHNyY19uciwgc3JjbmFtZSk7CisgICAgc3ByaW50Zihzd2l6 emxlLCAiLiVzJXMlcyVzIiwgc3dpenpsZV94LCBzd2l6emxlX3ksIHN3aXp6bGVfeiwgc3dpenps ZV93KTsKKyAgICBpZiAoc3RyY21wKHN3aXp6bGUsICIueHl6dyIpICE9IDApCisJc3RyY2F0KHNy Y25hbWUsIHN3aXp6bGUpOworfQorCitzdGF0aWMgdm9pZAoraTkxNV9nZXRfaW5zdHJ1Y3Rpb25f c3JjMSh1aW50MzJfdCAqZGF0YSwgaW50IGksIGNoYXIgKnNyY25hbWUpCit7CisgICAgdWludDMy X3QgYTEgPSBkYXRhW2kgKyAxXTsKKyAgICB1aW50MzJfdCBhMiA9IGRhdGFbaSArIDJdOworICAg IGludCBzcmNfbnIgPSAoYTEgPj4gOCkgJiAweDFmOworICAgIGNoYXIgKnN3aXp6bGVfeCA9IGk5 MTVfZ2V0X2NoYW5uZWxfc3dpenpsZSgoYTEgPj4gNCkgJiAweGYpOworICAgIGNoYXIgKnN3aXp6 bGVfeSA9IGk5MTVfZ2V0X2NoYW5uZWxfc3dpenpsZSgoYTEgPj4gMCkgJiAweGYpOworICAgIGNo YXIgKnN3aXp6bGVfeiA9IGk5MTVfZ2V0X2NoYW5uZWxfc3dpenpsZSgoYTIgPj4gMjgpICYgMHhm KTsKKyAgICBjaGFyICpzd2l6emxlX3cgPSBpOTE1X2dldF9jaGFubmVsX3N3aXp6bGUoKGEyID4+ IDI0KSAmIDB4Zik7CisgICAgY2hhciBzd2l6emxlWzEwMF07CisKKyAgICBpOTE1X2dldF9pbnN0 cnVjdGlvbl9zcmNfbmFtZSgoYTEgPj4gMTMpICYgMHg3LCBzcmNfbnIsIHNyY25hbWUpOworICAg IHNwcmludGYoc3dpenpsZSwgIi4lcyVzJXMlcyIsIHN3aXp6bGVfeCwgc3dpenpsZV95LCBzd2l6 emxlX3osIHN3aXp6bGVfdyk7CisgICAgaWYgKHN0cmNtcChzd2l6emxlLCAiLnh5enciKSAhPSAw KQorCXN0cmNhdChzcmNuYW1lLCBzd2l6emxlKTsKK30KKworc3RhdGljIHZvaWQKK2k5MTVfZ2V0 X2luc3RydWN0aW9uX3NyYzIodWludDMyX3QgKmRhdGEsIGludCBpLCBjaGFyICpzcmNuYW1lKQor eworICAgIHVpbnQzMl90IGEyID0gZGF0YVtpICsgMl07CisgICAgaW50IHNyY19uciA9IChhMiA+ PiAxNikgJiAweDFmOworICAgIGNoYXIgKnN3aXp6bGVfeCA9IGk5MTVfZ2V0X2NoYW5uZWxfc3dp enpsZSgoYTIgPj4gMTIpICYgMHhmKTsKKyAgICBjaGFyICpzd2l6emxlX3kgPSBpOTE1X2dldF9j aGFubmVsX3N3aXp6bGUoKGEyID4+IDgpICYgMHhmKTsKKyAgICBjaGFyICpzd2l6emxlX3ogPSBp OTE1X2dldF9jaGFubmVsX3N3aXp6bGUoKGEyID4+IDQpICYgMHhmKTsKKyAgICBjaGFyICpzd2l6 emxlX3cgPSBpOTE1X2dldF9jaGFubmVsX3N3aXp6bGUoKGEyID4+IDApICYgMHhmKTsKKyAgICBj aGFyIHN3aXp6bGVbMTAwXTsKKworICAgIGk5MTVfZ2V0X2luc3RydWN0aW9uX3NyY19uYW1lKChh MiA+PiAyMSkgJiAweDcsIHNyY19uciwgc3JjbmFtZSk7CisgICAgc3ByaW50Zihzd2l6emxlLCAi LiVzJXMlcyVzIiwgc3dpenpsZV94LCBzd2l6emxlX3ksIHN3aXp6bGVfeiwgc3dpenpsZV93KTsK KyAgICBpZiAoc3RyY21wKHN3aXp6bGUsICIueHl6dyIpICE9IDApCisJc3RyY2F0KHNyY25hbWUs IHN3aXp6bGUpOworfQorCitzdGF0aWMgdm9pZAoraTkxNV9nZXRfaW5zdHJ1Y3Rpb25fYWRkcih1 aW50MzJfdCBzcmNfdHlwZSwgdWludDMyX3Qgc3JjX25yLCBjaGFyICpuYW1lKQoreworICAgIHN3 aXRjaCAoc3JjX3R5cGUpIHsKKyAgICBjYXNlIDA6CisJc3ByaW50ZihuYW1lLCAiUiVkIiwgc3Jj X25yKTsKKwlpZiAoc3JjX25yID4gMTUpCisJICAgIGZwcmludGYob3V0LCAiYmFkIHNyYyByZWcg JXNcbiIsIG5hbWUpOworCWJyZWFrOworICAgIGNhc2UgMToKKwlpZiAoc3JjX25yIDwgOCkKKwkg ICAgc3ByaW50ZihuYW1lLCAiVCVkIiwgc3JjX25yKTsKKwllbHNlIGlmIChzcmNfbnIgPT0gOCkK KwkgICAgc3ByaW50ZihuYW1lLCAiRElGRlVTRSIpOworCWVsc2UgaWYgKHNyY19uciA9PSA5KQor CSAgICBzcHJpbnRmKG5hbWUsICJTUEVDVUxBUiIpOworCWVsc2UgaWYgKHNyY19uciA9PSAxMCkK KwkgICAgc3ByaW50ZihuYW1lLCAiRk9HIik7CisJZWxzZSB7CisJICAgIGZwcmludGYob3V0LCAi YmFkIHNyYyByZWcgVCVkXG4iLCBzcmNfbnIpOworCSAgICBzcHJpbnRmKG5hbWUsICJSRVNFUlZF RCIpOworCX0KKwlicmVhazsKKyAgICBjYXNlIDQ6CisJc3ByaW50ZihuYW1lLCAib0MiKTsKKwlp ZiAoc3JjX25yID4gMCkKKwkgICAgZnByaW50ZihvdXQsICJiYWQgc3JjIHJlZyBvQyVkXG4iLCBz cmNfbnIpOworCWJyZWFrOworICAgIGNhc2UgNToKKwlzcHJpbnRmKG5hbWUsICJvRCIpOworCWlm IChzcmNfbnIgPiAwKQorCSAgICBmcHJpbnRmKG91dCwgImJhZCBzcmMgcmVnIG9EJWRcbiIsIHNy Y19ucik7CisJYnJlYWs7CisgICAgZGVmYXVsdDoKKwlmcHJpbnRmKG91dCwgImJhZCBzcmMgcmVn IHR5cGUgJWRcbiIsIHNyY190eXBlKTsKKwlzcHJpbnRmKG5hbWUsICJSRVNFUlZFRCIpOworCWJy ZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK2k5MTVfZGVjb2RlX2FsdTEodWludDMyX3Qg KmRhdGEsIHVpbnQzMl90IGh3X29mZnNldCwKKwkJIGludCBpLCBjaGFyICppbnN0cl9wcmVmaXgs IGNoYXIgKm9wX25hbWUpCit7CisgICAgY2hhciBkc3RbMTAwXSwgc3JjMFsxMDBdOworCisgICAg aTkxNV9nZXRfaW5zdHJ1Y3Rpb25fZHN0KGRhdGEsIGksIGRzdCwgMSk7CisgICAgaTkxNV9nZXRf aW5zdHJ1Y3Rpb25fc3JjMChkYXRhLCBpLCBzcmMwKTsKKworICAgIGluc3RyX291dChkYXRhLCBo d19vZmZzZXQsIGkrKywgIiVzOiAlcyAlcywgJXNcbiIsIGluc3RyX3ByZWZpeCwKKwkgICAgICBv cF9uYW1lLCBkc3QsIHNyYzApOworICAgIGluc3RyX291dChkYXRhLCBod19vZmZzZXQsIGkrKywg IiVzXG4iLCBpbnN0cl9wcmVmaXgpOworICAgIGluc3RyX291dChkYXRhLCBod19vZmZzZXQsIGkr KywgIiVzXG4iLCBpbnN0cl9wcmVmaXgpOworfQorCitzdGF0aWMgdm9pZAoraTkxNV9kZWNvZGVf YWx1Mih1aW50MzJfdCAqZGF0YSwgdWludDMyX3QgaHdfb2Zmc2V0LAorCQkgaW50IGksIGNoYXIg Kmluc3RyX3ByZWZpeCwgY2hhciAqb3BfbmFtZSkKK3sKKyAgICBjaGFyIGRzdFsxMDBdLCBzcmMw WzEwMF0sIHNyYzFbMTAwXTsKKworICAgIGk5MTVfZ2V0X2luc3RydWN0aW9uX2RzdChkYXRhLCBp LCBkc3QsIDEpOworICAgIGk5MTVfZ2V0X2luc3RydWN0aW9uX3NyYzAoZGF0YSwgaSwgc3JjMCk7 CisgICAgaTkxNV9nZXRfaW5zdHJ1Y3Rpb25fc3JjMShkYXRhLCBpLCBzcmMxKTsKKworICAgIGlu c3RyX291dChkYXRhLCBod19vZmZzZXQsIGkrKywgIiVzOiAlcyAlcywgJXMsICVzXG4iLCBpbnN0 cl9wcmVmaXgsCisJICAgICAgb3BfbmFtZSwgZHN0LCBzcmMwLCBzcmMxKTsKKyAgICBpbnN0cl9v dXQoZGF0YSwgaHdfb2Zmc2V0LCBpKyssICIlc1xuIiwgaW5zdHJfcHJlZml4KTsKKyAgICBpbnN0 cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCBpKyssICIlc1xuIiwgaW5zdHJfcHJlZml4KTsKK30KKwor c3RhdGljIHZvaWQKK2k5MTVfZGVjb2RlX2FsdTModWludDMyX3QgKmRhdGEsIHVpbnQzMl90IGh3 X29mZnNldCwKKwkJIGludCBpLCBjaGFyICppbnN0cl9wcmVmaXgsIGNoYXIgKm9wX25hbWUpCit7 CisgICAgY2hhciBkc3RbMTAwXSwgc3JjMFsxMDBdLCBzcmMxWzEwMF0sIHNyYzJbMTAwXTsKKwor ICAgIGk5MTVfZ2V0X2luc3RydWN0aW9uX2RzdChkYXRhLCBpLCBkc3QsIDEpOworICAgIGk5MTVf Z2V0X2luc3RydWN0aW9uX3NyYzAoZGF0YSwgaSwgc3JjMCk7CisgICAgaTkxNV9nZXRfaW5zdHJ1 Y3Rpb25fc3JjMShkYXRhLCBpLCBzcmMxKTsKKyAgICBpOTE1X2dldF9pbnN0cnVjdGlvbl9zcmMy KGRhdGEsIGksIHNyYzIpOworCisgICAgaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgaSsrLCAi JXM6ICVzICVzLCAlcywgJXMsICVzXG4iLCBpbnN0cl9wcmVmaXgsCisJICAgICAgb3BfbmFtZSwg ZHN0LCBzcmMwLCBzcmMxLCBzcmMyKTsKKyAgICBpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCBp KyssICIlc1xuIiwgaW5zdHJfcHJlZml4KTsKKyAgICBpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0 LCBpKyssICIlc1xuIiwgaW5zdHJfcHJlZml4KTsKK30KKworc3RhdGljIHZvaWQKK2k5MTVfZGVj b2RlX3RleCh1aW50MzJfdCAqZGF0YSwgdWludDMyX3QgaHdfb2Zmc2V0LCBpbnQgaSwgY2hhciAq aW5zdHJfcHJlZml4LAorCQljaGFyICp0ZXhfbmFtZSkKK3sKKyAgICB1aW50MzJfdCB0MCA9IGRh dGFbaV07CisgICAgdWludDMyX3QgdDEgPSBkYXRhW2kgKyAxXTsKKyAgICBjaGFyIGRzdF9uYW1l WzEwMF07CisgICAgY2hhciBhZGRyX25hbWVbMTAwXTsKKyAgICBpbnQgc2FtcGxlcl9ucjsKKwor ICAgIGk5MTVfZ2V0X2luc3RydWN0aW9uX2RzdChkYXRhLCBpLCBkc3RfbmFtZSwgMCk7CisgICAg aTkxNV9nZXRfaW5zdHJ1Y3Rpb25fYWRkcigodDEgPj4gMjQpICYgMHg3LAorCQkJICAgICAgKHQx ID4+IDE3KSAmIDB4ZiwKKwkJCSAgICAgIGFkZHJfbmFtZSk7CisgICAgc2FtcGxlcl9uciA9IHQw ICYgMHhmOworCisgICAgaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgaSsrLCAiJXM6ICVzICVz LCBTJWQsICVzXG4iLCBpbnN0cl9wcmVmaXgsCisJICAgICAgdGV4X25hbWUsIGRzdF9uYW1lLCBz YW1wbGVyX25yLCBhZGRyX25hbWUpOworICAgIGluc3RyX291dChkYXRhLCBod19vZmZzZXQsIGkr KywgIiVzXG4iLCBpbnN0cl9wcmVmaXgpOworICAgIGluc3RyX291dChkYXRhLCBod19vZmZzZXQs IGkrKywgIiVzXG4iLCBpbnN0cl9wcmVmaXgpOworfQorCitzdGF0aWMgdm9pZAoraTkxNV9kZWNv ZGVfZGNsKHVpbnQzMl90ICpkYXRhLCB1aW50MzJfdCBod19vZmZzZXQsIGludCBpLCBjaGFyICpp bnN0cl9wcmVmaXgpCit7CisgICAgdWludDMyX3QgZDAgPSBkYXRhW2ldOworICAgIGNoYXIgKnNh bXBsZXR5cGU7CisgICAgaW50IGRjbF9uciA9IChkMCA+PiAxNCkgJiAweGY7CisgICAgY2hhciAq ZGNsX3ggPSBkMCAmICgxIDw8IDEwKSA/ICJ4IiA6ICIiOworICAgIGNoYXIgKmRjbF95ID0gZDAg JiAoMSA8PCAxMSkgPyAieSIgOiAiIjsKKyAgICBjaGFyICpkY2xfeiA9IGQwICYgKDEgPDwgMTIp ID8gInoiIDogIiI7CisgICAgY2hhciAqZGNsX3cgPSBkMCAmICgxIDw8IDEzKSA/ICJ3IiA6ICIi OworICAgIGNoYXIgZGNsX21hc2tbMTBdOworCisgICAgc3dpdGNoICgoZDAgPj4gMTkpICYgMHgz KSB7CisgICAgY2FzZSAxOgorCXNwcmludGYoZGNsX21hc2ssICIuJXMlcyVzJXMiLCBkY2xfeCwg ZGNsX3ksIGRjbF96LCBkY2xfdyk7CisJaWYgKHN0cmNtcChkY2xfbWFzaywgIi4iKSA9PSAwKQor CSAgICBmcHJpbnRmKG91dCwgImJhZCAoZW1wdHkpIGRjbCBtYXNrXG4iKTsKKworCWlmIChkY2xf bnIgPiAxMCkKKwkgICAgZnByaW50ZihvdXQsICJiYWQgVCVkIGRjbCByZWdpc3RlciBudW1iZXJc biIsIGRjbF9ucik7CisJaWYgKGRjbF9uciA8IDgpIHsKKwkgICAgaWYgKHN0cmNtcChkY2xfbWFz aywgIi54IikgIT0gMCAmJgorCQlzdHJjbXAoZGNsX21hc2ssICIueHkiKSAhPSAwICYmCisJCXN0 cmNtcChkY2xfbWFzaywgIi54eiIpICE9IDAgJiYKKwkJc3RyY21wKGRjbF9tYXNrLCAiLnciKSAh PSAwICYmCisJCXN0cmNtcChkY2xfbWFzaywgIi54eXp3IikgIT0gMCkgeworCQlmcHJpbnRmKG91 dCwgImJhZCBUJWQuJXMgZGNsIG1hc2tcbiIsIGRjbF9uciwgZGNsX21hc2spOworCSAgICB9CisJ ICAgIGluc3RyX291dChkYXRhLCBod19vZmZzZXQsIGkrKywgIiVzOiBEQ0wgVCVkJXNcbiIsIGlu c3RyX3ByZWZpeCwKKwkJICAgICAgZGNsX25yLCBkY2xfbWFzayk7CisJfSBlbHNlIHsKKwkgICAg aWYgKHN0cmNtcChkY2xfbWFzaywgIi54eiIpID09IDApCisJCWZwcmludGYob3V0LCAiZXJyYXRh ZWQgYmFkIGRjbCBtYXNrICVzXG4iLCBkY2xfbWFzayk7CisJICAgIGVsc2UgaWYgKHN0cmNtcChk Y2xfbWFzaywgIi54dyIpID09IDApCisJCWZwcmludGYob3V0LCAiZXJyYXRhZWQgYmFkIGRjbCBt YXNrICVzXG4iLCBkY2xfbWFzayk7CisJICAgIGVsc2UgaWYgKHN0cmNtcChkY2xfbWFzaywgIi54 enciKSA9PSAwKQorCQlmcHJpbnRmKG91dCwgImVycmF0YWVkIGJhZCBkY2wgbWFzayAlc1xuIiwg ZGNsX21hc2spOworCisJICAgIGlmIChkY2xfbnIgPT0gOCkgeworCQlpbnN0cl9vdXQoZGF0YSwg aHdfb2Zmc2V0LCBpKyssICIlczogRENMIERJRkZVU0Ulc1xuIiwgaW5zdHJfcHJlZml4LAorCQkJ ICBkY2xfbWFzayk7CisJICAgIH0gZWxzZSBpZiAoZGNsX25yID09IDkpIHsKKwkJaW5zdHJfb3V0 KGRhdGEsIGh3X29mZnNldCwgaSsrLCAiJXM6IERDTCBTUEVDVUxBUiVzXG4iLCBpbnN0cl9wcmVm aXgsCisJCQkgIGRjbF9tYXNrKTsKKwkgICAgfSBlbHNlIGlmIChkY2xfbnIgPT0gMTApIHsKKwkJ aW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgaSsrLCAiJXM6IERDTCBGT0clc1xuIiwgaW5zdHJf cHJlZml4LAorCQkJICBkY2xfbWFzayk7CisJICAgIH0KKwl9CisJaW5zdHJfb3V0KGRhdGEsIGh3 X29mZnNldCwgaSsrLCAiJXNcbiIsIGluc3RyX3ByZWZpeCk7CisJaW5zdHJfb3V0KGRhdGEsIGh3 X29mZnNldCwgaSsrLCAiJXNcbiIsIGluc3RyX3ByZWZpeCk7CisJYnJlYWs7CisgICAgY2FzZSAz OgorCXN3aXRjaCAoKGQwID4+IDIyKSAmIDB4MykgeworCWNhc2UgMDoKKwkgICAgc2FtcGxldHlw ZSA9ICIyRCI7CisJICAgIGJyZWFrOworCWNhc2UgMToKKwkgICAgc2FtcGxldHlwZSA9ICJDVUJF IjsKKwkgICAgYnJlYWs7CisJY2FzZSAyOgorCSAgICBzYW1wbGV0eXBlID0gIjNEIjsKKwkgICAg YnJlYWs7CisJZGVmYXVsdDoKKwkgICAgc2FtcGxldHlwZSA9ICJSRVNFUlZFRCI7CisJICAgIGJy ZWFrOworCX0KKwlpZiAoZGNsX25yID4gMTUpCisJICAgIGZwcmludGYob3V0LCAiYmFkIFMlZCBk Y2wgcmVnaXN0ZXIgbnVtYmVyXG4iLCBkY2xfbnIpOworCWluc3RyX291dChkYXRhLCBod19vZmZz ZXQsIGkrKywgIiVzOiBEQ0wgUyVkICVzXG4iLCBpbnN0cl9wcmVmaXgsCisJCSAgZGNsX25yLCBz YW1wbGV0eXBlKTsKKwlpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCBpKyssICIlc1xuIiwgaW5z dHJfcHJlZml4KTsKKwlpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCBpKyssICIlc1xuIiwgaW5z dHJfcHJlZml4KTsKKwlicmVhazsKKyAgICBkZWZhdWx0OgorCWluc3RyX291dChkYXRhLCBod19v ZmZzZXQsIGkrKywgIiVzOiBEQ0wgUkVTRVJWRUQlZFxuIiwgaW5zdHJfcHJlZml4LCBkY2xfbnIp OworCWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIGkrKywgIiVzXG4iLCBpbnN0cl9wcmVmaXgp OworCWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIGkrKywgIiVzXG4iLCBpbnN0cl9wcmVmaXgp OworICAgIH0KK30KKworc3RhdGljIHZvaWQKK2k5MTVfZGVjb2RlX2luc3RydWN0aW9uKHVpbnQz Ml90ICpkYXRhLCB1aW50MzJfdCBod19vZmZzZXQsCisJCQlpbnQgaSwgY2hhciAqaW5zdHJfcHJl Zml4KQoreworICAgIHN3aXRjaCAoKGRhdGFbaV0gPj4gMjQpICYgMHgxZikgeworICAgIGNhc2Ug MHgwOgorCWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIGkrKywgIiVzOiBOT1BcbiIsIGluc3Ry X3ByZWZpeCk7CisJaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgaSsrLCAiJXNcbiIsIGluc3Ry X3ByZWZpeCk7CisJaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgaSsrLCAiJXNcbiIsIGluc3Ry X3ByZWZpeCk7CisJYnJlYWs7CisgICAgY2FzZSAweDAxOgorCWk5MTVfZGVjb2RlX2FsdTIoZGF0 YSwgaHdfb2Zmc2V0LCBpLCBpbnN0cl9wcmVmaXgsICJBREQiKTsKKwlicmVhazsKKyAgICBjYXNl IDB4MDI6CisJaTkxNV9kZWNvZGVfYWx1MShkYXRhLCBod19vZmZzZXQsIGksIGluc3RyX3ByZWZp eCwgIk1PViIpOworCWJyZWFrOworICAgIGNhc2UgMHgwMzoKKwlpOTE1X2RlY29kZV9hbHUyKGRh dGEsIGh3X29mZnNldCwgaSwgaW5zdHJfcHJlZml4LCAiTVVMIik7CisJYnJlYWs7CisgICAgY2Fz ZSAweDA0OgorCWk5MTVfZGVjb2RlX2FsdTMoZGF0YSwgaHdfb2Zmc2V0LCBpLCBpbnN0cl9wcmVm aXgsICJNQUQiKTsKKwlicmVhazsKKyAgICBjYXNlIDB4MDU6CisJaTkxNV9kZWNvZGVfYWx1Myhk YXRhLCBod19vZmZzZXQsIGksIGluc3RyX3ByZWZpeCwgIkRQMkFERCIpOworCWJyZWFrOworICAg IGNhc2UgMHgwNjoKKwlpOTE1X2RlY29kZV9hbHUyKGRhdGEsIGh3X29mZnNldCwgaSwgaW5zdHJf cHJlZml4LCAiRFAzIik7CisJYnJlYWs7CisgICAgY2FzZSAweDA3OgorCWk5MTVfZGVjb2RlX2Fs dTIoZGF0YSwgaHdfb2Zmc2V0LCBpLCBpbnN0cl9wcmVmaXgsICJEUDQiKTsKKwlicmVhazsKKyAg ICBjYXNlIDB4MDg6CisJaTkxNV9kZWNvZGVfYWx1MShkYXRhLCBod19vZmZzZXQsIGksIGluc3Ry X3ByZWZpeCwgIkZSQyIpOworCWJyZWFrOworICAgIGNhc2UgMHgwOToKKwlpOTE1X2RlY29kZV9h bHUxKGRhdGEsIGh3X29mZnNldCwgaSwgaW5zdHJfcHJlZml4LCAiUkNQIik7CisJYnJlYWs7Cisg ICAgY2FzZSAweDBhOgorCWk5MTVfZGVjb2RlX2FsdTEoZGF0YSwgaHdfb2Zmc2V0LCBpLCBpbnN0 cl9wcmVmaXgsICJSU1EiKTsKKwlicmVhazsKKyAgICBjYXNlIDB4MGI6CisJaTkxNV9kZWNvZGVf YWx1MShkYXRhLCBod19vZmZzZXQsIGksIGluc3RyX3ByZWZpeCwgIkVYUCIpOworCWJyZWFrOwor ICAgIGNhc2UgMHgwYzoKKwlpOTE1X2RlY29kZV9hbHUxKGRhdGEsIGh3X29mZnNldCwgaSwgaW5z dHJfcHJlZml4LCAiTE9HIik7CisJYnJlYWs7CisgICAgY2FzZSAweDBkOgorCWk5MTVfZGVjb2Rl X2FsdTIoZGF0YSwgaHdfb2Zmc2V0LCBpLCBpbnN0cl9wcmVmaXgsICJDTVAiKTsKKwlicmVhazsK KyAgICBjYXNlIDB4MGU6CisJaTkxNV9kZWNvZGVfYWx1MihkYXRhLCBod19vZmZzZXQsIGksIGlu c3RyX3ByZWZpeCwgIk1JTiIpOworCWJyZWFrOworICAgIGNhc2UgMHgwZjoKKwlpOTE1X2RlY29k ZV9hbHUyKGRhdGEsIGh3X29mZnNldCwgaSwgaW5zdHJfcHJlZml4LCAiTUFYIik7CisJYnJlYWs7 CisgICAgY2FzZSAweDEwOgorCWk5MTVfZGVjb2RlX2FsdTEoZGF0YSwgaHdfb2Zmc2V0LCBpLCBp bnN0cl9wcmVmaXgsICJGTFIiKTsKKwlicmVhazsKKyAgICBjYXNlIDB4MTE6CisJaTkxNV9kZWNv ZGVfYWx1MShkYXRhLCBod19vZmZzZXQsIGksIGluc3RyX3ByZWZpeCwgIk1PRCIpOworCWJyZWFr OworICAgIGNhc2UgMHgxMjoKKwlpOTE1X2RlY29kZV9hbHUxKGRhdGEsIGh3X29mZnNldCwgaSwg aW5zdHJfcHJlZml4LCAiVFJDIik7CisJYnJlYWs7CisgICAgY2FzZSAweDEzOgorCWk5MTVfZGVj b2RlX2FsdTIoZGF0YSwgaHdfb2Zmc2V0LCBpLCBpbnN0cl9wcmVmaXgsICJTR0UiKTsKKwlicmVh azsKKyAgICBjYXNlIDB4MTQ6CisJaTkxNV9kZWNvZGVfYWx1MihkYXRhLCBod19vZmZzZXQsIGks IGluc3RyX3ByZWZpeCwgIlNMVCIpOworCWJyZWFrOworICAgIGNhc2UgMHgxNToKKwlpOTE1X2Rl Y29kZV90ZXgoZGF0YSwgaHdfb2Zmc2V0LCBpLCBpbnN0cl9wcmVmaXgsICJURVhMRCIpOworCWJy ZWFrOworICAgIGNhc2UgMHgxNjoKKwlpOTE1X2RlY29kZV90ZXgoZGF0YSwgaHdfb2Zmc2V0LCBp LCBpbnN0cl9wcmVmaXgsICJURVhMRFAiKTsKKwlicmVhazsKKyAgICBjYXNlIDB4MTc6CisJaTkx NV9kZWNvZGVfdGV4KGRhdGEsIGh3X29mZnNldCwgaSwgaW5zdHJfcHJlZml4LCAiVEVYTERCIik7 CisJYnJlYWs7CisgICAgY2FzZSAweDE5OgorCWk5MTVfZGVjb2RlX2RjbChkYXRhLCBod19vZmZz ZXQsIGksIGluc3RyX3ByZWZpeCk7CisJYnJlYWs7CisgICAgZGVmYXVsdDoKKwlpbnN0cl9vdXQo ZGF0YSwgaHdfb2Zmc2V0LCBpKyssICIlczogdW5rbm93blxuIiwgaW5zdHJfcHJlZml4KTsKKwlp bnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCBpKyssICIlc1xuIiwgaW5zdHJfcHJlZml4KTsKKwlp bnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCBpKyssICIlc1xuIiwgaW5zdHJfcHJlZml4KTsKKwli cmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBjaGFyICoKK2RlY29kZV9jb21wYXJlX2Z1bmModWlu dDMyX3Qgb3ApCit7CisgICAgc3dpdGNoIChvcCYweDcpIHsKKyAgICBjYXNlIDA6IHJldHVybiAi YWx3YXlzIjsKKyAgICBjYXNlIDE6IHJldHVybiAibmV2ZXIiOworICAgIGNhc2UgMjogcmV0dXJu ICJsZXNzIjsKKyAgICBjYXNlIDM6IHJldHVybiAiZXF1YWwiOworICAgIGNhc2UgNDogcmV0dXJu ICJsZXF1YWwiOworICAgIGNhc2UgNTogcmV0dXJuICJncmVhdGVyIjsKKyAgICBjYXNlIDY6IHJl dHVybiAibm90ZXF1YWwiOworICAgIGNhc2UgNzogcmV0dXJuICJnZXF1YWwiOworICAgIH0KKyAg ICByZXR1cm4gIiI7Cit9CisKK3N0YXRpYyBjaGFyICoKK2RlY29kZV9zdGVuY2lsX29wKHVpbnQz Ml90IG9wKQoreworICAgIHN3aXRjaCAob3AmMHg3KSB7CisgICAgY2FzZSAwOiByZXR1cm4gImtl ZXAiOworICAgIGNhc2UgMTogcmV0dXJuICJ6ZXJvIjsKKyAgICBjYXNlIDI6IHJldHVybiAicmVw bGFjZSI7CisgICAgY2FzZSAzOiByZXR1cm4gImluY3Jfc2F0IjsKKyAgICBjYXNlIDQ6IHJldHVy biAiZGVjcl9zYXQiOworICAgIGNhc2UgNTogcmV0dXJuICJncmVhdGVyIjsKKyAgICBjYXNlIDY6 IHJldHVybiAiaW5jciI7CisgICAgY2FzZSA3OiByZXR1cm4gImRlY3IiOworICAgIH0KKyAgICBy ZXR1cm4gIiI7Cit9CisKK3N0YXRpYyBjaGFyICoKK2RlY29kZV9sb2dpY19vcCh1aW50MzJfdCBv cCkKK3sKKyAgICBzd2l0Y2ggKG9wJjB4ZikgeworICAgIGNhc2UgMDogcmV0dXJuICJjbGVhciI7 CisgICAgY2FzZSAxOiByZXR1cm4gIm5vciI7CisgICAgY2FzZSAyOiByZXR1cm4gImFuZF9pbnYi OworICAgIGNhc2UgMzogcmV0dXJuICJjb3B5X2ludiI7CisgICAgY2FzZSA0OiByZXR1cm4gImFu ZF9ydnJzZSI7CisgICAgY2FzZSA1OiByZXR1cm4gImludiI7CisgICAgY2FzZSA2OiByZXR1cm4g InhvciI7CisgICAgY2FzZSA3OiByZXR1cm4gIm5hbmQiOworICAgIGNhc2UgODogcmV0dXJuICJh bmQiOworICAgIGNhc2UgOTogcmV0dXJuICJlcXVpdiI7CisgICAgY2FzZSAxMDogcmV0dXJuICJu b29wIjsKKyAgICBjYXNlIDExOiByZXR1cm4gIm9yX2ludiI7CisgICAgY2FzZSAxMjogcmV0dXJu ICJjb3B5IjsKKyAgICBjYXNlIDEzOiByZXR1cm4gIm9yX3J2cnNlIjsKKyAgICBjYXNlIDE0OiBy ZXR1cm4gIm9yIjsKKyAgICBjYXNlIDE1OiByZXR1cm4gInNldCI7CisgICAgfQorICAgIHJldHVy biAiIjsKK30KKworc3RhdGljIGNoYXIgKgorZGVjb2RlX2JsZW5kX2ZhY3QodWludDMyX3Qgb3Ap Cit7CisgICAgc3dpdGNoIChvcCYweGYpIHsKKyAgICBjYXNlIDE6IHJldHVybiAiemVybyI7Cisg ICAgY2FzZSAyOiByZXR1cm4gIm9uZSI7CisgICAgY2FzZSAzOiByZXR1cm4gInNyY19jb2xyIjsK KyAgICBjYXNlIDQ6IHJldHVybiAiaW52X3NyY19jb2xyIjsKKyAgICBjYXNlIDU6IHJldHVybiAi c3JjX2FscGhhIjsKKyAgICBjYXNlIDY6IHJldHVybiAiaW52X3NyY19hbHBoYSI7CisgICAgY2Fz ZSA3OiByZXR1cm4gImRzdF9hbHBoYSI7CisgICAgY2FzZSA4OiByZXR1cm4gImludl9kc3RfYWxw aGEiOworICAgIGNhc2UgOTogcmV0dXJuICJkc3RfY29sciI7CisgICAgY2FzZSAxMDogcmV0dXJu ICJpbnZfZHN0X2NvbHIiOworICAgIGNhc2UgMTE6IHJldHVybiAic3JjX2FscGhhX3NhdCI7Cisg ICAgY2FzZSAxMjogcmV0dXJuICJjbnN0X2NvbHIiOworICAgIGNhc2UgMTM6IHJldHVybiAiaW52 X2Nuc3RfY29sciI7CisgICAgY2FzZSAxNDogcmV0dXJuICJjbnN0X2FscGhhIjsKKyAgICBjYXNl IDE1OiByZXR1cm4gImludl9jb25zdF9hbHBoYSI7CisgICAgfQorICAgIHJldHVybiAiIjsKK30K Kworc3RhdGljIGNoYXIgKgorZGVjb2RlX3RleF9jb29yZF9tb2RlKHVpbnQzMl90IG1vZGUpCit7 CisgICAgc3dpdGNoIChtb2RlJjB4NykgeworICAgIGNhc2UgMDogcmV0dXJuICJ3cmFwIjsKKyAg ICBjYXNlIDE6IHJldHVybiAibWlycm9yIjsKKyAgICBjYXNlIDI6IHJldHVybiAiY2xhbXBfZWRn ZSI7CisgICAgY2FzZSAzOiByZXR1cm4gImN1YmUiOworICAgIGNhc2UgNDogcmV0dXJuICJjbGFt cF9ib3JkZXIiOworICAgIGNhc2UgNTogcmV0dXJuICJtaXJyb3Jfb25jZSI7CisgICAgfQorICAg IHJldHVybiAiIjsKK30KKworc3RhdGljIGNoYXIgKgorZGVjb2RlX3NhbXBsZV9maWx0ZXIodWlu dDMyX3QgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUmMHg3KSB7CisgICAgY2FzZSAwOiByZXR1 cm4gIm5lYXJlc3QiOworICAgIGNhc2UgMTogcmV0dXJuICJsaW5lYXIiOworICAgIGNhc2UgMjog cmV0dXJuICJhbmlzb3Ryb3BpYyI7CisgICAgY2FzZSAzOiByZXR1cm4gIjR4NF8xIjsKKyAgICBj YXNlIDQ6IHJldHVybiAiNHg0XzIiOworICAgIGNhc2UgNTogcmV0dXJuICI0eDRfZmxhdCI7Cisg ICAgY2FzZSA2OiByZXR1cm4gIjZ4NV9tb25vIjsKKyAgICB9CisgICAgcmV0dXJuICIiOworfQor CitzdGF0aWMgaW50CitkZWNvZGVfM2RfMWQodWludDMyX3QgKmRhdGEsIGludCBjb3VudCwKKwkg ICAgIHVpbnQzMl90IGh3X29mZnNldCwKKwkgICAgIHVpbnQzMl90IGRldmlkLAorCSAgICAgaW50 ICpmYWlsdXJlcykKK3sKKyAgICB1bnNpZ25lZCBpbnQgbGVuLCBpLCBjLCBpZHgsIHdvcmQsIG1h cCwgc2FtcGxlciwgaW5zdHI7CisgICAgY2hhciAqZm9ybWF0LCAqemZvcm1hdCwgKnR5cGU7Cisg ICAgdWludDMyX3Qgb3Bjb2RlOworCisgICAgc3RydWN0IHsKKwl1aW50MzJfdCBvcGNvZGU7CisJ aW50IGk4MzBfb25seTsKKwlpbnQgbWluX2xlbjsKKwlpbnQgbWF4X2xlbjsKKwljaGFyICpuYW1l OworICAgIH0gb3Bjb2Rlc18zZF8xZFtdID0geworCXsgMHg4NiwgMCwgNCwgNCwgIjNEU1RBVEVf Q0hST01BX0tFWSIgfSwKKwl7IDB4ODgsIDAsIDIsIDIsICIzRFNUQVRFX0NPTlNUQU5UX0JMRU5E X0NPTE9SIiB9LAorCXsgMHg5OSwgMCwgMiwgMiwgIjNEU1RBVEVfREVGQVVMVF9ESUZGVVNFIiB9 LAorCXsgMHg5YSwgMCwgMiwgMiwgIjNEU1RBVEVfREVGQVVMVF9TUEVDVUxBUiIgfSwKKwl7IDB4 OTgsIDAsIDIsIDIsICIzRFNUQVRFX0RFRkFVTFRfWiIgfSwKKwl7IDB4OTcsIDAsIDIsIDIsICIz RFNUQVRFX0RFUFRIX09GRlNFVF9TQ0FMRSIgfSwKKwl7IDB4OWQsIDAsIDY1LCA2NSwgIjNEU1RB VEVfRklMVEVSX0NPRUZGSUNJRU5UU180WDQiIH0sCisJeyAweDllLCAwLCA0LCA0LCAiM0RTVEFU RV9NT05PX0ZJTFRFUiIgfSwKKwl7IDB4ODksIDAsIDQsIDQsICIzRFNUQVRFX0ZPR19NT0RFIiB9 LAorCXsgMHg4ZiwgMCwgMiwgMTYsICIzRFNUQVRFX01BUF9QQUxMRVRFX0xPQURfMzIiIH0sCisJ eyAweDgzLCAwLCAyLCAyLCAiM0RTVEFURV9TUEFOX1NUSVBQTEUiIH0sCisJeyAweDhjLCAxLCAy LCAyLCAiM0RTVEFURV9NQVBfQ09PUkRfVFJBTlNGT1JNX0k4MzAiIH0sCisJeyAweDhiLCAxLCAy LCAyLCAiM0RTVEFURV9NQVBfVkVSVEVYX1RSQU5TRk9STV9JODMwIiB9LAorCXsgMHg4ZCwgMSwg MywgMywgIjNEU1RBVEVfV19TVEFURV9JODMwIiB9LAorCXsgMHgwMSwgMSwgMiwgMiwgIjNEU1RB VEVfQ09MT1JfRkFDVE9SX0k4MzAiIH0sCisJeyAweDAyLCAxLCAyLCAyLCAiM0RTVEFURV9NQVBf Q09PUkRfU0VUQklORF9JODMwIiB9LAorICAgIH0sICpvcGNvZGVfM2RfMWQ7CisKKyAgICBvcGNv ZGUgPSAoZGF0YVswXSAmIDB4MDBmZjAwMDApID4+IDE2OworCisgICAgc3dpdGNoIChvcGNvZGUp IHsKKyAgICBjYXNlIDB4MDc6CisJLyogVGhpcyBpbnN0cnVjdGlvbiBpcyB1bnVzdWFsLiAgQSAw IGxlbmd0aCBtZWFucyBqdXN0IDEgRFdPUkQgaW5zdGVhZCBvZgorCSAqIDIuICBUaGUgMCBsZW5n dGggaXMgc3BlY2lmaWVkIGluIG9uZSBwbGFjZSB0byBiZSB1bnN1cHBvcnRlZCwgYnV0CisJICog c3RhdGVkIHRvIGJlIHJlcXVpcmVkIGluIGFub3RoZXIsIGFuZCAwIGxlbmd0aCBMT0FEX0lORElS RUNUcyBhcHBlYXIKKwkgKiB0byBjYXVzZSBubyBoYXJtIGF0IGxlYXN0LgorCSAqLworCWluc3Ry X291dChkYXRhLCBod19vZmZzZXQsIDAsICIzRFNUQVRFX0xPQURfSU5ESVJFQ1RcbiIpOworCWxl biA9IChkYXRhWzBdICYgMHgwMDAwMDBmZikgKyAxOworCWkgPSAxOworCWlmIChkYXRhWzBdICYg KDB4MDEgPDwgOCkpIHsKKwkgICAgaWYgKGkgKyAyID49IGNvdW50KQorCQlCVUZGRVJfRkFJTChj b3VudCwgbGVuLCAiM0RTVEFURV9MT0FEX0lORElSRUNUIik7CisJICAgIGluc3RyX291dChkYXRh LCBod19vZmZzZXQsIGkrKywgIlNJUy4wXG4iKTsKKwkgICAgaW5zdHJfb3V0KGRhdGEsIGh3X29m ZnNldCwgaSsrLCAiU0lTLjFcbiIpOworCX0KKwlpZiAoZGF0YVswXSAmICgweDAyIDw8IDgpKSB7 CisJICAgIGlmIChpICsgMSA+PSBjb3VudCkKKwkJQlVGRkVSX0ZBSUwoY291bnQsIGxlbiwgIjNE U1RBVEVfTE9BRF9JTkRJUkVDVCIpOworCSAgICBpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCBp KyssICJESVMuMFxuIik7CisJfQorCWlmIChkYXRhWzBdICYgKDB4MDQgPDwgOCkpIHsKKwkgICAg aWYgKGkgKyAyID49IGNvdW50KQorCQlCVUZGRVJfRkFJTChjb3VudCwgbGVuLCAiM0RTVEFURV9M T0FEX0lORElSRUNUIik7CisJICAgIGluc3RyX291dChkYXRhLCBod19vZmZzZXQsIGkrKywgIlNT Qi4wXG4iKTsKKwkgICAgaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgaSsrLCAiU1NCLjFcbiIp OworCX0KKwlpZiAoZGF0YVswXSAmICgweDA4IDw8IDgpKSB7CisJICAgIGlmIChpICsgMiA+PSBj b3VudCkKKwkJQlVGRkVSX0ZBSUwoY291bnQsIGxlbiwgIjNEU1RBVEVfTE9BRF9JTkRJUkVDVCIp OworCSAgICBpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCBpKyssICJNU0IuMFxuIik7CisJICAg IGluc3RyX291dChkYXRhLCBod19vZmZzZXQsIGkrKywgIk1TQi4xXG4iKTsKKwl9CisJaWYgKGRh dGFbMF0gJiAoMHgxMCA8PCA4KSkgeworCSAgICBpZiAoaSArIDIgPj0gY291bnQpCisJCUJVRkZF Ul9GQUlMKGNvdW50LCBsZW4sICIzRFNUQVRFX0xPQURfSU5ESVJFQ1QiKTsKKwkgICAgaW5zdHJf b3V0KGRhdGEsIGh3X29mZnNldCwgaSsrLCAiUFNQLjBcbiIpOworCSAgICBpbnN0cl9vdXQoZGF0 YSwgaHdfb2Zmc2V0LCBpKyssICJQU1AuMVxuIik7CisJfQorCWlmIChkYXRhWzBdICYgKDB4MjAg PDwgOCkpIHsKKwkgICAgaWYgKGkgKyAyID49IGNvdW50KQorCQlCVUZGRVJfRkFJTChjb3VudCwg bGVuLCAiM0RTVEFURV9MT0FEX0lORElSRUNUIik7CisJICAgIGluc3RyX291dChkYXRhLCBod19v ZmZzZXQsIGkrKywgIlBTQy4wXG4iKTsKKwkgICAgaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwg aSsrLCAiUFNDLjFcbiIpOworCX0KKwlpZiAobGVuICE9IGkpIHsKKwkgICAgZnByaW50ZihvdXQs ICJCYWQgY291bnQgaW4gM0RTVEFURV9MT0FEX0lORElSRUNUXG4iKTsKKwkgICAgKCpmYWlsdXJl cykrKzsKKwkgICAgcmV0dXJuIGxlbjsKKwl9CisJcmV0dXJuIGxlbjsKKyAgICBjYXNlIDB4MDQ6 CisJaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMCwgIjNEU1RBVEVfTE9BRF9TVEFURV9JTU1F RElBVEVfMVxuIik7CisJbGVuID0gKGRhdGFbMF0gJiAweDAwMDAwMDBmKSArIDI7CisJaSA9IDE7 CisJZm9yICh3b3JkID0gMDsgd29yZCA8PSA4OyB3b3JkKyspIHsKKwkgICAgaWYgKGRhdGFbMF0g JiAoMSA8PCAoNCArIHdvcmQpKSkgeworCQlpZiAoaSA+PSBjb3VudCkKKwkJICAgIEJVRkZFUl9G QUlMKGNvdW50LCBsZW4sICIzRFNUQVRFX0xPQURfU1RBVEVfSU1NRURJQVRFXzEiKTsKKworCQkv KiBzYXZlIHZlcnRleCBzdGF0ZSBmb3IgZGVjb2RlICovCisJCWlmICghSVNfR0VOMihkZXZpZCkp IHsKKwkJCWlmICh3b3JkID09IDIpIHsKKwkJCQlzYXZlZF9zMl9zZXQgPSAxOworCQkJCXNhdmVk X3MyID0gZGF0YVtpXTsKKwkJCX0KKwkJCWlmICh3b3JkID09IDQpIHsKKwkJCQlzYXZlZF9zNF9z ZXQgPSAxOworCQkJCXNhdmVkX3M0ID0gZGF0YVtpXTsKKwkJCX0KKworCQkJc3dpdGNoICh3b3Jk KSB7CisJCQljYXNlIDA6CisJCQkJaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgaSwgIlMwOiB2 Ym8gb2Zmc2V0OiAweCUwOHglc1xuIiwKKwkJCQkJICBkYXRhW2ldJih+MSksZGF0YVtpXSYxPyIs IGF1dG8gY2FjaGUgaW52YWxpZGF0ZSBkaXNhYmxlZCI6IiIpOworCQkJCWJyZWFrOworCQkJY2Fz ZSAxOgorCQkJCWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIGksICJTMTogdmVydGV4IHdpZHRo OiAlaSwgdmVydGV4IHBpdGNoOiAlaVxuIiwKKwkJCQkJICAoZGF0YVtpXT4+MjQpJjB4M2YsKGRh dGFbaV0+PjE2KSYweDNmKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQlpbnN0cl9vdXQo ZGF0YSwgaHdfb2Zmc2V0LCBpLCAiUzI6IHRleGNvb3JkIGZvcm1hdHM6ICIpOworCQkJCWZvciAo aW50IHRleF9udW0gPSAwOyB0ZXhfbnVtIDwgODsgdGV4X251bSsrKSB7CisJCQkJCXN3aXRjaCgo ZGF0YVtpXT4+dGV4X251bSo0KSYweGYpIHsKKwkJCQkJY2FzZSAwOiBmcHJpbnRmKG91dCwgIiVp PTJEICIsIHRleF9udW0pOyBicmVhazsKKwkJCQkJY2FzZSAxOiBmcHJpbnRmKG91dCwgIiVpPTNE ICIsIHRleF9udW0pOyBicmVhazsKKwkJCQkJY2FzZSAyOiBmcHJpbnRmKG91dCwgIiVpPTREICIs IHRleF9udW0pOyBicmVhazsKKwkJCQkJY2FzZSAzOiBmcHJpbnRmKG91dCwgIiVpPTFEICIsIHRl eF9udW0pOyBicmVhazsKKwkJCQkJY2FzZSA0OiBmcHJpbnRmKG91dCwgIiVpPTJEXzE2ICIsIHRl eF9udW0pOyBicmVhazsKKwkJCQkJY2FzZSA1OiBmcHJpbnRmKG91dCwgIiVpPTREXzE2ICIsIHRl eF9udW0pOyBicmVhazsKKwkJCQkJY2FzZSAweGY6IGZwcmludGYob3V0LCAiJWk9TlAgIiwgdGV4 X251bSk7IGJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJCWZwcmludGYob3V0LCAiXG4iKTsKKwor CQkJCWJyZWFrOworCQkJY2FzZSAzOgorCQkJCWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIGks ICJTMzogbm90IGRvY3VtZW50ZWRcbiIsIHdvcmQpOworCQkJCWJyZWFrOworCQkJY2FzZSA0Ogor CQkJCXsKKwkJCQkJY2hhciAqY3VsbG1vZGUgPSAiIjsKKwkJCQkJY2hhciAqdmZtdF94eXp3ID0g IiI7CisJCQkJCXN3aXRjaCgoZGF0YVtpXT4+MTMpJjB4MykgeworCQkJCQljYXNlIDA6IGN1bGxt b2RlID0gImJvdGgiOyBicmVhazsKKwkJCQkJY2FzZSAxOiBjdWxsbW9kZSA9ICJub25lIjsgYnJl YWs7CisJCQkJCWNhc2UgMjogY3VsbG1vZGUgPSAiY3ciOyBicmVhazsKKwkJCQkJY2FzZSAzOiBj dWxsbW9kZSA9ICJjY3ciOyBicmVhazsKKwkJCQkJfQorCQkJCQlzd2l0Y2goZGF0YVtpXSAmICg3 PDw2IHwgMTw8MikpIHsKKwkJCQkJY2FzZSAxPDw2OiB2Zm10X3h5encgPSAiWFlaLCI7IGJyZWFr OworCQkJCQljYXNlIDI8PDY6IHZmbXRfeHl6dyA9ICJYWVpXLCI7IGJyZWFrOworCQkJCQljYXNl IDM8PDY6IHZmbXRfeHl6dyA9ICJYWSwiOyBicmVhazsKKwkJCQkJY2FzZSA0PDw2OiB2Zm10X3h5 encgPSAiWFlXLCI7IGJyZWFrOworCQkJCQljYXNlIDE8PDYgfCAxPDwyOiB2Zm10X3h5encgPSAi WFlaRiwiOyBicmVhazsKKwkJCQkJY2FzZSAyPDw2IHwgMTw8MjogdmZtdF94eXp3ID0gIlhZWldG LCI7IGJyZWFrOworCQkJCQljYXNlIDM8PDYgfCAxPDwyOiB2Zm10X3h5encgPSAiWFlGLCI7IGJy ZWFrOworCQkJCQljYXNlIDQ8PDYgfCAxPDwyOiB2Zm10X3h5encgPSAiWFlXRiwiOyBicmVhazsK KwkJCQkJfQorCQkJCQlpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCBpLCAiUzQ6IHBvaW50X3dp ZHRoPSVpLCBsaW5lX3dpZHRoPSUuMWYsIgorCQkJCQkJICAiJXMlcyVzJXMlcyBjdWxsbW9kZT0l cywgdmZtdD0lcyVzJXMlcyVzJXMgIgorCQkJCQkJICAiJXMlc1xuIiwKKwkJCQkJCSAgKGRhdGFb aV0+PjIzKSYweDFmZiwKKwkJCQkJCSAgKChkYXRhW2ldPj4xOSkmMHhmKSAvIDIuMCwKKwkJCQkJ CSAgZGF0YVtpXSYoMHhmPDwxNSk/IiBmbGF0c2hhZGU9IjoiIiwKKwkJCQkJCSAgZGF0YVtpXSYo MTw8MTgpPyJBbHBoYSwiOiIiLAorCQkJCQkJICBkYXRhW2ldJigxPDwxNyk/IkZvZywiOiIiLAor CQkJCQkJICBkYXRhW2ldJigxPDwxNik/IlNwZWN1bGFyLCI6IiIsCisJCQkJCQkgIGRhdGFbaV0m KDE8PDE1KT8iQ29sb3IsIjoiIiwKKwkJCQkJCSAgY3VsbG1vZGUsCisJCQkJCQkgIGRhdGFbaV0m KDE8PDEyKT8iUG9pbnRXaWR0aCwiOiIiLAorCQkJCQkJICBkYXRhW2ldJigxPDwxMSk/IlNwZWNG b2csIjoiIiwKKwkJCQkJCSAgZGF0YVtpXSYoMTw8MTApPyJDb2xvciwiOiIiLAorCQkJCQkJICBk YXRhW2ldJigxPDw5KT8iRGVwdGhPZnMsIjoiIiwKKwkJCQkJCSAgdmZtdF94eXp3LAorCQkJCQkJ ICBkYXRhW2ldJigxPDw5KT8iRm9nUGFyYW0sIjoiIiwKKwkJCQkJCSAgZGF0YVtpXSYoMTw8NSk/ ImZvcmNlIGRlZmF1bHQgZGlmZnVzZSwgIjoiIiwKKwkJCQkJCSAgZGF0YVtpXSYoMTw8NCk/ImZv cmNlIGRlZmF1bHQgc3BlY3VsYXIsICI6IiIsCisJCQkJCQkgIGRhdGFbaV0mKDE8PDMpPyJsb2Nh bCBkZXB0aCBvZnMgZW5hYmxlLCAiOiIiLAorCQkJCQkJICBkYXRhW2ldJigxPDwxKT8icG9pbnQg c3ByaXRlIGVuYWJsZSwgIjoiIiwKKwkJCQkJCSAgZGF0YVtpXSYoMTw8MCk/ImxpbmUgQUEgZW5h YmxlLCAiOiIiKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJY2FzZSA1OgorCQkJCXsKKwkJCQkJ aW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgaSwgIlM1OiVzJXMlcyVzJXMiCisJCQkJCQkgICIl cyVzJXMlcyBzdGVuY2lsX3JlZj0weCV4LCBzdGVuY2lsX3Rlc3Q9JXMsICIKKwkJCQkJCSAgInN0 ZW5jaWxfZmFpbD0lcywgc3RlbmNpbF9wYXNzX3pfZmFpbD0lcywgIgorCQkJCQkJICAic3RlbmNp bF9wYXNzX3pfcGFzcz0lcywgJXMlcyVzJXNcbiIsCisJCQkJCQkgIGRhdGFbaV0mKDB4Zjw8Mjgp PyIgd3JpdGVfZGlzYWJsZT0iOiIiLAorCQkJCQkJICBkYXRhW2ldJigxPDwzMSk/IkFscGhhLCI6 IiIsCisJCQkJCQkgIGRhdGFbaV0mKDE8PDMwKT8iUmVkLCI6IiIsCisJCQkJCQkgIGRhdGFbaV0m KDE8PDI5KT8iR3JlZW4sIjoiIiwKKwkJCQkJCSAgZGF0YVtpXSYoMTw8MjgpPyJCbHVlLCI6IiIs CisJCQkJCQkgIGRhdGFbaV0mKDE8PDI3KT8iIGZvcmNlIGRlZmF1bHQgcG9pbnQgc2l6ZSwiOiIi LAorCQkJCQkJICBkYXRhW2ldJigxPDwyNik/IiBsYXN0IHBpeGVsIGVuYWJsZSwiOiIiLAorCQkJ CQkJICBkYXRhW2ldJigxPDwyNSk/IiBnbG9iYWwgZGVwdGggb2ZzIGVuYWJsZSwiOiIiLAorCQkJ CQkJICBkYXRhW2ldJigxPDwyNCk/IiBmb2cgZW5hYmxlLCI6IiIsCisJCQkJCQkgIChkYXRhW2ld Pj4xNikmMHhmZiwKKwkJCQkJCSAgZGVjb2RlX2NvbXBhcmVfZnVuYyhkYXRhW2ldPj4xMyksCisJ CQkJCQkgIGRlY29kZV9zdGVuY2lsX29wKGRhdGFbaV0+PjEwKSwKKwkJCQkJCSAgZGVjb2RlX3N0 ZW5jaWxfb3AoZGF0YVtpXT4+NyksCisJCQkJCQkgIGRlY29kZV9zdGVuY2lsX29wKGRhdGFbaV0+ PjQpLAorCQkJCQkJICBkYXRhW2ldJigxPDwzKT8ic3RlbmNpbCB3cml0ZSBlbmFibGUsICI6IiIs CisJCQkJCQkgIGRhdGFbaV0mKDE8PDIpPyJzdGVuY2lsIHRlc3QgZW5hYmxlLCAiOiIiLAorCQkJ CQkJICBkYXRhW2ldJigxPDwxKT8iY29sb3IgZGl0aGVyIGVuYWJsZSwgIjoiIiwKKwkJCQkJCSAg ZGF0YVtpXSYoMTw8MCk/ImxvZ2ljb3AgZW5hYmxlLCAiOiIiKTsKKwkJCQl9CisJCQkJYnJlYWs7 CisJCQljYXNlIDY6CisJCQkJaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgaSwgIlM2OiAlc2Fs cGhhX3Rlc3Q9JXMsIGFscGhhX3JlZj0weCV4LCAiCisJCQkJCSAgImRlcHRoX3Rlc3Q9JXMsICVz c3JjX2JsbmRfZmN0PSVzLCBkc3RfYmxuZF9mY3Q9JXMsICIKKwkJCQkJICAiJXMlc3RyaXN0cmlw X3Byb3Zva2luZ192ZXJ0ZXg9JWlcbiIsCisJCQkJCSAgZGF0YVtpXSYoMTw8MzEpPyJhbHBoYSB0 ZXN0IGVuYWJsZSwgIjoiIiwKKwkJCQkJICBkZWNvZGVfY29tcGFyZV9mdW5jKGRhdGFbaV0+PjI4 KSwKKwkJCQkJICBkYXRhW2ldJigweGZmPDwyMCksCisJCQkJCSAgZGVjb2RlX2NvbXBhcmVfZnVu YyhkYXRhW2ldPj4xNiksCisJCQkJCSAgZGF0YVtpXSYoMTw8MTUpPyJjYnVmIGJsZW5kIGVuYWJs ZSwgIjoiIiwKKwkJCQkJICBkZWNvZGVfYmxlbmRfZmFjdChkYXRhW2ldPj44KSwKKwkJCQkJICBk ZWNvZGVfYmxlbmRfZmFjdChkYXRhW2ldPj40KSwKKwkJCQkJICBkYXRhW2ldJigxPDwzKT8iZGVw dGggd3JpdGUgZW5hYmxlLCAiOiIiLAorCQkJCQkgIGRhdGFbaV0mKDE8PDIpPyJjYnVmIHdyaXRl IGVuYWJsZSwgIjoiIiwKKwkJCQkJICBkYXRhW2ldJigweDMpKTsKKwkJCQlicmVhazsKKwkJCWNh c2UgNzoKKwkJCQlpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCBpLCAiUzc6IGRlcHRoIG9mZnNl dCBjb25zdGFudDogMHglMDh4XG4iLCBkYXRhW2ldKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBl bHNlIHsKKwkJCWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIGksICJTJWQ6IDB4JTA4eFxuIiwg aSwgZGF0YVtpXSk7CisJCX0KKwkJaSsrOworCSAgICB9CisJfQorCWlmIChsZW4gIT0gaSkgewor CSAgICBmcHJpbnRmKG91dCwgIkJhZCBjb3VudCBpbiAzRFNUQVRFX0xPQURfU1RBVEVfSU1NRURJ QVRFXzFcbiIpOworCSAgICAoKmZhaWx1cmVzKSsrOworCX0KKwlyZXR1cm4gbGVuOworICAgIGNh c2UgMHgwMzoKKwlpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCAwLCAiM0RTVEFURV9MT0FEX1NU QVRFX0lNTUVESUFURV8yXG4iKTsKKwlsZW4gPSAoZGF0YVswXSAmIDB4MDAwMDAwMGYpICsgMjsK KwlpID0gMTsKKwlmb3IgKHdvcmQgPSA2OyB3b3JkIDw9IDE0OyB3b3JkKyspIHsKKwkgICAgaWYg KGRhdGFbMF0gJiAoMSA8PCB3b3JkKSkgeworCQlpZiAoaSA+PSBjb3VudCkKKwkJICAgIEJVRkZF Ul9GQUlMKGNvdW50LCBsZW4sICIzRFNUQVRFX0xPQURfU1RBVEVfSU1NRURJQVRFXzIiKTsKKwor CQlpZiAod29yZCA9PSA2KQorCQkgICAgaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgaSsrLCAi VEJDRlxuIik7CisJCWVsc2UgaWYgKHdvcmQgPj0gNyAmJiB3b3JkIDw9IDEwKSB7CisJCSAgICBp bnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCBpKyssICJUQiVkQ1xuIiwgd29yZCAtIDcpOworCQkg ICAgaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgaSsrLCAiVEIlZEFcbiIsIHdvcmQgLSA3KTsK KwkJfSBlbHNlIGlmICh3b3JkID49IDExICYmIHdvcmQgPD0gMTQpIHsKKwkJICAgIGluc3RyX291 dChkYXRhLCBod19vZmZzZXQsIGksICJUTSVkUzA6IG9mZnNldD0weCUwOHgsICVzXG4iLAorCQkJ ICAgICAgd29yZCAtIDExLAorCQkJICAgICAgZGF0YVtpXSYweGZmZmZmZmZlLAorCQkJICAgICAg ZGF0YVtpXSYxPyJ1c2UgZmVuY2UiOiIiKTsKKwkJICAgIGkrKzsKKwkJICAgIGluc3RyX291dChk YXRhLCBod19vZmZzZXQsIGksICJUTSVkUzE6IGhlaWdodD0laSwgd2lkdGg9JWksICVzXG4iLAor CQkJICAgICAgd29yZCAtIDExLAorCQkJICAgICAgZGF0YVtpXT4+MjEsIChkYXRhW2ldPj4xMCkm MHgzZmYsCisJCQkgICAgICBkYXRhW2ldJjI/KGRhdGFbaV0mMT8ieS10aWxlZCI6IngtdGlsZWQi KToiIik7CisJCSAgICBpKys7CisJCSAgICBpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCBpLCAi VE0lZFMyOiBwaXRjaD0laSwgXG4iLAorCQkJICAgICAgd29yZCAtIDExLAorCQkJICAgICAgKChk YXRhW2ldPj4yMSkgKyAxKSo0KTsKKwkJICAgIGkrKzsKKwkJICAgIGluc3RyX291dChkYXRhLCBo d19vZmZzZXQsIGkrKywgIlRNJWRTM1xuIiwgd29yZCAtIDExKTsKKwkJICAgIGluc3RyX291dChk YXRhLCBod19vZmZzZXQsIGkrKywgIlRNJWRTNDogZGZsdCBjb2xvclxuIiwgd29yZCAtIDExKTsK KwkJfQorCSAgICB9CisJfQorCWlmIChsZW4gIT0gaSkgeworCSAgICBmcHJpbnRmKG91dCwgIkJh ZCBjb3VudCBpbiAzRFNUQVRFX0xPQURfU1RBVEVfSU1NRURJQVRFXzJcbiIpOworCSAgICAoKmZh aWx1cmVzKSsrOworCX0KKwlyZXR1cm4gbGVuOworICAgIGNhc2UgMHgwMDoKKwlpbnN0cl9vdXQo ZGF0YSwgaHdfb2Zmc2V0LCAwLCAiM0RTVEFURV9NQVBfU1RBVEVcbiIpOworCWxlbiA9IChkYXRh WzBdICYgMHgwMDAwMDAzZikgKyAyOworCWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIDEsICJt YXNrXG4iKTsKKworCWkgPSAyOworCWZvciAobWFwID0gMDsgbWFwIDw9IDE1OyBtYXArKykgewor CSAgICBpZiAoZGF0YVsxXSAmICgxIDw8IG1hcCkpIHsKKwkJaW50IHdpZHRoLCBoZWlnaHQsIHBp dGNoLCBkd29yZDsKKwkJY29uc3QgY2hhciAqdGlsaW5nOworCisJCWlmIChpICsgMyA+PSBjb3Vu dCkKKwkJICAgIEJVRkZFUl9GQUlMKGNvdW50LCBsZW4sICIzRFNUQVRFX01BUF9TVEFURSIpOwor CisJCWR3b3JkID0gZGF0YVtpXTsKKwkJaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgaSsrLCAi bWFwICVkIE1TMiAlcyVzJXNcbiIsIG1hcCwKKwkJCSAgZHdvcmQmKDE8PDMxKT8idW50cnVzdGVk IHN1cmZhY2UsICI6IiIsCisJCQkgIGR3b3JkJigxPDwxKT8idmVydGljYWwgbGluZSBzdHJpZGUg ZW5hYmxlLCAiOiIiLAorCQkJICBkd29yZCYoMTw8MCk/InZlcnRpY2FsIG9mcyBlbmFibGUsICI6 IiIpOworCisJCWR3b3JkID0gZGF0YVtpXTsKKwkJd2lkdGggPSAoKGR3b3JkID4+IDEwKSAmICgo MSA8PCAxMSkgLSAxKSkrMTsKKwkJaGVpZ2h0ID0gKChkd29yZCA+PiAyMSkgJiAoKDEgPDwgMTEp IC0gMSkpKzE7CisKKwkJdGlsaW5nID0gIm5vbmUiOworCQlpZiAoZHdvcmQgJiAoMSA8PCAyKSkK KwkJCXRpbGluZyA9ICJmZW5jZWQiOworCQllbHNlIGlmIChkd29yZCAmICgxIDw8IDEpKQorCQkJ dGlsaW5nID0gZHdvcmQgJiAoMSA8PCAwKSA/ICJZIiA6ICJYIjsKKwkJdHlwZSA9ICIgQkFEIjsK KwkJZm9ybWF0ID0gIkJBRCI7CisJCXN3aXRjaCAoKGR3b3JkPj43KSAmIDB4NykgeworCQljYXNl IDE6CisJCSAgICB0eXBlID0gIjhiIjsKKwkJICAgIHN3aXRjaCAoKGR3b3JkPj4zKSAmIDB4Zikg eworCQkgICAgY2FzZSAwOiBmb3JtYXQgPSAiSSI7IGJyZWFrOworCQkgICAgY2FzZSAxOiBmb3Jt YXQgPSAiTCI7IGJyZWFrOworCQkgICAgY2FzZSA0OiBmb3JtYXQgPSAiQSI7IGJyZWFrOworCQkg ICAgY2FzZSA1OiBmb3JtYXQgPSAiIG1vbm8iOyBicmVhazsgfQorCQkgICAgYnJlYWs7CisJCWNh c2UgMjoKKwkJICAgIHR5cGUgPSAiMTZiIjsKKwkJICAgIHN3aXRjaCAoKGR3b3JkPj4zKSAmIDB4 ZikgeworCQkgICAgY2FzZSAwOiBmb3JtYXQgPSAiIHJnYjU2NSI7IGJyZWFrOworCQkgICAgY2Fz ZSAxOiBmb3JtYXQgPSAiIGFyZ2IxNTU1IjsgYnJlYWs7CisJCSAgICBjYXNlIDI6IGZvcm1hdCA9 ICIgYXJnYjQ0NDQiOyBicmVhazsKKwkJICAgIGNhc2UgNTogZm9ybWF0ID0gIiBheTg4IjsgYnJl YWs7CisJCSAgICBjYXNlIDY6IGZvcm1hdCA9ICIgYnVtcDY1NSI7IGJyZWFrOworCQkgICAgY2Fz ZSA3OiBmb3JtYXQgPSAiSSI7IGJyZWFrOworCQkgICAgY2FzZSA4OiBmb3JtYXQgPSAiTCI7IGJy ZWFrOworCQkgICAgY2FzZSA5OiBmb3JtYXQgPSAiQSI7IGJyZWFrOyB9CisJCSAgICBicmVhazsK KwkJY2FzZSAzOgorCQkgICAgdHlwZSA9ICIzMmIiOworCQkgICAgc3dpdGNoICgoZHdvcmQ+PjMp ICYgMHhmKSB7CisJCSAgICBjYXNlIDA6IGZvcm1hdCA9ICIgYXJnYjg4ODgiOyBicmVhazsKKwkJ ICAgIGNhc2UgMTogZm9ybWF0ID0gIiBhYmdyODg4OCI7IGJyZWFrOworCQkgICAgY2FzZSAyOiBm b3JtYXQgPSAiIHhyZ2I4ODg4IjsgYnJlYWs7CisJCSAgICBjYXNlIDM6IGZvcm1hdCA9ICIgeGJn cjg4ODgiOyBicmVhazsKKwkJICAgIGNhc2UgNDogZm9ybWF0ID0gIiBxd3Z1ODg4OCI7IGJyZWFr OworCQkgICAgY2FzZSA1OiBmb3JtYXQgPSAiIGF4dnU4ODg4IjsgYnJlYWs7CisJCSAgICBjYXNl IDY6IGZvcm1hdCA9ICIgbHh2dTg4ODgiOyBicmVhazsKKwkJICAgIGNhc2UgNzogZm9ybWF0ID0g IiB4bHZ1ODg4OCI7IGJyZWFrOworCQkgICAgY2FzZSA4OiBmb3JtYXQgPSAiIGFyZ2IyMTAxMDEw IjsgYnJlYWs7CisJCSAgICBjYXNlIDk6IGZvcm1hdCA9ICIgYWJncjIxMDEwMTAiOyBicmVhazsK KwkJICAgIGNhc2UgMTA6IGZvcm1hdCA9ICIgYXd2dTIxMDEwMTAiOyBicmVhazsKKwkJICAgIGNh c2UgMTE6IGZvcm1hdCA9ICIgZ3IxNjE2IjsgYnJlYWs7CisJCSAgICBjYXNlIDEyOiBmb3JtYXQg PSAiIHZ1MTYxNiI7IGJyZWFrOworCQkgICAgY2FzZSAxMzogZm9ybWF0ID0gIiB4STgyNCI7IGJy ZWFrOworCQkgICAgY2FzZSAxNDogZm9ybWF0ID0gIiB4QTgyNCI7IGJyZWFrOworCQkgICAgY2Fz ZSAxNTogZm9ybWF0ID0gIiB4TDgyNCI7IGJyZWFrOyB9CisJCSAgICBicmVhazsKKwkJY2FzZSA1 OgorCQkgICAgdHlwZSA9ICI0MjIiOworCQkgICAgc3dpdGNoICgoZHdvcmQ+PjMpICYgMHhmKSB7 CisJCSAgICBjYXNlIDA6IGZvcm1hdCA9ICIgeXV2X3N3YXB5IjsgYnJlYWs7CisJCSAgICBjYXNl IDE6IGZvcm1hdCA9ICIgeXV2IjsgYnJlYWs7CisJCSAgICBjYXNlIDI6IGZvcm1hdCA9ICIgeXV2 X3N3YXB1diI7IGJyZWFrOworCQkgICAgY2FzZSAzOiBmb3JtYXQgPSAiIHl1dl9zd2FwdXZ5Ijsg YnJlYWs7IH0KKwkJICAgIGJyZWFrOworCQljYXNlIDY6CisJCSAgICB0eXBlID0gImNvbXByZXNz ZWQiOworCQkgICAgc3dpdGNoICgoZHdvcmQ+PjMpICYgMHg3KSB7CisJCSAgICBjYXNlIDA6IGZv cm1hdCA9ICIgZHh0MSI7IGJyZWFrOworCQkgICAgY2FzZSAxOiBmb3JtYXQgPSAiIGR4dDJfMyI7 IGJyZWFrOworCQkgICAgY2FzZSAyOiBmb3JtYXQgPSAiIGR4dDRfNSI7IGJyZWFrOworCQkgICAg Y2FzZSAzOiBmb3JtYXQgPSAiIGZ4dDEiOyBicmVhazsKKwkJICAgIGNhc2UgNDogZm9ybWF0ID0g IiBkeHQxX3JiIjsgYnJlYWs7IH0KKwkJICAgIGJyZWFrOworCQljYXNlIDc6CisJCSAgICB0eXBl ID0gIjRiIGluZGV4ZWQiOworCQkgICAgc3dpdGNoICgoZHdvcmQ+PjMpICYgMHhmKSB7CisJCSAg ICBjYXNlIDc6IGZvcm1hdCA9ICIgYXJnYjg4ODgiOyBicmVhazsgfQorCQkgICAgYnJlYWs7CisJ CX0KKwkJZHdvcmQgPSBkYXRhW2ldOworCQlpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCBpKyss ICJtYXAgJWQgTVMzIFt3aWR0aD0lZCwgaGVpZ2h0PSVkLCBmb3JtYXQ9JXMlcywgdGlsaW5nPSVz JXNdXG4iLAorCQkJICBtYXAsIHdpZHRoLCBoZWlnaHQsIHR5cGUsIGZvcm1hdCwgdGlsaW5nLAor CQkJICBkd29yZCYoMTw8OSk/IiBwYWxldHRlIHNlbGVjdCI6IiIpOworCisJCWR3b3JkID0gZGF0 YVtpXTsKKwkJcGl0Y2ggPSA0KigoKGR3b3JkID4+IDIxKSAmICgoMSA8PCAxMSkgLSAxKSkrMSk7 CisJCWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIGkrKywgIm1hcCAlZCBNUzQgW3BpdGNoPSVk LCBtYXhfbG9kPSVpLCB2b2xfZGVwdGg9JWksIGN1YmVfZmFjZV9lbmE9JXgsICVzXVxuIiwKKwkJ CSAgbWFwLCBwaXRjaCwKKwkJCSAgKGR3b3JkPj45KSYweDNmLCBkd29yZCYweGZmLCAoZHdvcmQ+ PjE1KSYweDNmLAorCQkJICBkd29yZCYoMTw8OCk/Im1pcGxheW91dCBsZWdhY3kiOiJtaXBsYXlv dXQgcmlnaHQiKTsKKwkgICAgfQorCX0KKwlpZiAobGVuICE9IGkpIHsKKwkgICAgZnByaW50Zihv dXQsICJCYWQgY291bnQgaW4gM0RTVEFURV9NQVBfU1RBVEVcbiIpOworCSAgICAoKmZhaWx1cmVz KSsrOworCSAgICByZXR1cm4gbGVuOworCX0KKwlyZXR1cm4gbGVuOworICAgIGNhc2UgMHgwNjoK KwlpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCAwLCAiM0RTVEFURV9QSVhFTF9TSEFERVJfQ09O U1RBTlRTXG4iKTsKKwlsZW4gPSAoZGF0YVswXSAmIDB4MDAwMDAwZmYpICsgMjsKKworCWkgPSAy OworCWZvciAoYyA9IDA7IGMgPD0gMzE7IGMrKykgeworCSAgICBpZiAoZGF0YVsxXSAmICgxIDw8 IGMpKSB7CisJCWlmIChpICsgNCA+PSBjb3VudCkKKwkJICAgIEJVRkZFUl9GQUlMKGNvdW50LCBs ZW4sICIzRFNUQVRFX1BJWEVMX1NIQURFUl9DT05TVEFOVFMiKTsKKwkJaW5zdHJfb3V0KGRhdGEs IGh3X29mZnNldCwgaSwgIkMlZC5YID0gJWZcbiIsCisJCQkgIGMsIGludF9hc19mbG9hdChkYXRh W2ldKSk7CisJCWkrKzsKKwkJaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgaSwgIkMlZC5ZID0g JWZcbiIsCisJCQkgIGMsIGludF9hc19mbG9hdChkYXRhW2ldKSk7CisJCWkrKzsKKwkJaW5zdHJf b3V0KGRhdGEsIGh3X29mZnNldCwgaSwgIkMlZC5aID0gJWZcbiIsCisJCQkgIGMsIGludF9hc19m bG9hdChkYXRhW2ldKSk7CisJCWkrKzsKKwkJaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgaSwg IkMlZC5XID0gJWZcbiIsCisJCQkgIGMsIGludF9hc19mbG9hdChkYXRhW2ldKSk7CisJCWkrKzsK KwkgICAgfQorCX0KKwlpZiAobGVuICE9IGkpIHsKKwkgICAgZnByaW50ZihvdXQsICJCYWQgY291 bnQgaW4gM0RTVEFURV9QSVhFTF9TSEFERVJfQ09OU1RBTlRTXG4iKTsKKwkgICAgKCpmYWlsdXJl cykrKzsKKwl9CisJcmV0dXJuIGxlbjsKKyAgICBjYXNlIDB4MDU6CisJaW5zdHJfb3V0KGRhdGEs IGh3X29mZnNldCwgMCwgIjNEU1RBVEVfUElYRUxfU0hBREVSX1BST0dSQU1cbiIpOworCWxlbiA9 IChkYXRhWzBdICYgMHgwMDAwMDBmZikgKyAyOworCWlmICgobGVuIC0gMSkgJSAzICE9IDAgfHwg bGVuID4gMzcwKSB7CisJICAgIGZwcmludGYob3V0LCAiQmFkIGNvdW50IGluIDNEU1RBVEVfUElY RUxfU0hBREVSX1BST0dSQU1cbiIpOworCSAgICAoKmZhaWx1cmVzKSsrOworCX0KKwlpID0gMTsK Kwlmb3IgKGluc3RyID0gMDsgaW5zdHIgPCAobGVuIC0gMSkgLyAzOyBpbnN0cisrKSB7CisJICAg IGNoYXIgaW5zdHJfcHJlZml4WzEwXTsKKworCSAgICBpZiAoaSArIDMgPj0gY291bnQpCisJCUJV RkZFUl9GQUlMKGNvdW50LCBsZW4sICIzRFNUQVRFX1BJWEVMX1NIQURFUl9QUk9HUkFNIik7CisJ ICAgIHNwcmludGYoaW5zdHJfcHJlZml4LCAiUFMlMDNkIiwgaW5zdHIpOworCSAgICBpOTE1X2Rl Y29kZV9pbnN0cnVjdGlvbihkYXRhLCBod19vZmZzZXQsIGksIGluc3RyX3ByZWZpeCk7CisJICAg IGkgKz0gMzsKKwl9CisJcmV0dXJuIGxlbjsKKyAgICBjYXNlIDB4MDE6CisJaWYgKElTX0dFTjIo ZGV2aWQpKQorCQlicmVhazsKKwlpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCAwLCAiM0RTVEFU RV9TQU1QTEVSX1NUQVRFXG4iKTsKKwlpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCAxLCAibWFz a1xuIik7CisJbGVuID0gKGRhdGFbMF0gJiAweDAwMDAwMDNmKSArIDI7CisJaSA9IDI7CisJZm9y IChzYW1wbGVyID0gMDsgc2FtcGxlciA8PSAxNTsgc2FtcGxlcisrKSB7CisJICAgIGlmIChkYXRh WzFdICYgKDEgPDwgc2FtcGxlcikpIHsKKwkJdWludDMyX3QgZHdvcmQ7CisJCWNoYXIgKm1pcF9m aWx0ZXIgPSAiIjsKKwkJaWYgKGkgKyAzID49IGNvdW50KQorCQkgICAgQlVGRkVSX0ZBSUwoY291 bnQsIGxlbiwgIjNEU1RBVEVfU0FNUExFUl9TVEFURSIpOworCQlkd29yZCA9IGRhdGFbaV07CisJ CXN3aXRjaCAoKGR3b3JkPj4yMCkmMHgzKSB7CisJCWNhc2UgMDogbWlwX2ZpbHRlciA9ICJub25l IjsgYnJlYWs7CisJCWNhc2UgMTogbWlwX2ZpbHRlciA9ICJuZWFyZXN0IjsgYnJlYWs7CisJCWNh c2UgMzogbWlwX2ZpbHRlciA9ICJsaW5lYXIiOyBicmVhazsKKwkJfQorCQlpbnN0cl9vdXQoZGF0 YSwgaHdfb2Zmc2V0LCBpKyssICJzYW1wbGVyICVkIFNTMjolcyVzJXMgIgorCQkJICAiYmFzZV9t aXBfbGV2ZWw9JWksIG1pcF9maWx0ZXI9JXMsIG1hZ19maWx0ZXI9JXMsIG1pbl9maWx0ZXI9JXMg IgorCQkJICAibG9kX2JpYXM9JS4yZiwlcyBtYXhfYW5pc289JWksIHNoYWRvd19mdW5jPSVzXG4i LCBzYW1wbGVyLAorCQkJICBkd29yZCYoMTw8MzEpPyIgcmV2ZXJzZSBnYW1tYSwiOiIiLAorCQkJ ICBkd29yZCYoMTw8MzApPyIgcGFja2VkMnBsYW5hciwiOiIiLAorCQkJICBkd29yZCYoMTw8Mjkp PyIgY29sb3JzcGFjZSBjb252ZXJzaW9uLCI6IiIsCisJCQkgIChkd29yZD4+MjIpJjB4MWYsCisJ CQkgIG1pcF9maWx0ZXIsCisJCQkgIGRlY29kZV9zYW1wbGVfZmlsdGVyKGR3b3JkPj4xNyksCisJ CQkgIGRlY29kZV9zYW1wbGVfZmlsdGVyKGR3b3JkPj4xNCksCisJCQkgICgoZHdvcmQ+PjUpJjB4 MWZmKS8oMHgxMCoxLjApLAorCQkJICBkd29yZCYoMTw8NCk/IiBzaGFkb3csIjoiIiwKKwkJCSAg ZHdvcmQmKDE8PDMpPzQ6MiwKKwkJCSAgZGVjb2RlX2NvbXBhcmVfZnVuYyhkd29yZCkpOworCQlk d29yZCA9IGRhdGFbaV07CisJCWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIGkrKywgInNhbXBs ZXIgJWQgU1MzOiBtaW5fbG9kPSUuMmYsJXMgIgorCQkJICAidGNtb2RlX3g9JXMsIHRjbW9kZV95 PSVzLCB0Y21vZGVfej0lcywlcyB0ZXhtYXBfaWR4PSVpLCVzXG4iLAorCQkJICBzYW1wbGVyLCAo KGR3b3JkPj4yNCkmMHhmZikvKDB4MTAqMS4wKSwKKwkJCSAgZHdvcmQmKDE8PDE3KT8iIGtpbGwg cGl4ZWwgZW5hYmxlLCI6IiIsCisJCQkgIGRlY29kZV90ZXhfY29vcmRfbW9kZShkd29yZD4+MTIp LAorCQkJICBkZWNvZGVfdGV4X2Nvb3JkX21vZGUoZHdvcmQ+PjkpLAorCQkJICBkZWNvZGVfdGV4 X2Nvb3JkX21vZGUoZHdvcmQ+PjYpLAorCQkJICBkd29yZCYoMTw8NSk/IiBub3JtYWxpemVkIGNv b3JkcywiOiIiLAorCQkJICAoZHdvcmQ+PjEpJjB4ZiwKKwkJCSAgZHdvcmQmKDE8PDApPyIgZGVp bnRlcmxhY2VyLCI6IiIpOworCQlkd29yZCA9IGRhdGFbaV07CisJCWluc3RyX291dChkYXRhLCBo d19vZmZzZXQsIGkrKywgInNhbXBsZXIgJWQgU1M0OiBib3JkZXIgY29sb3JcbiIsCisJCQkgIHNh bXBsZXIsICgoZHdvcmQ+PjI0KSYweGZmKS8oMHgxMCoxLjApLAorCQkJICBkd29yZCk7CisJICAg IH0KKwl9CisJaWYgKGxlbiAhPSBpKSB7CisJICAgIGZwcmludGYob3V0LCAiQmFkIGNvdW50IGlu IDNEU1RBVEVfU0FNUExFUl9TVEFURVxuIik7CisJICAgICgqZmFpbHVyZXMpKys7CisJfQorCXJl dHVybiBsZW47CisgICAgY2FzZSAweDg1OgorCWxlbiA9IChkYXRhWzBdICYgMHgwMDAwMDAwZikg KyAyOworCisJaWYgKGxlbiAhPSAyKQorCSAgICBmcHJpbnRmKG91dCwgIkJhZCBjb3VudCBpbiAz RFNUQVRFX0RFU1RfQlVGRkVSX1ZBUklBQkxFU1xuIik7CisJaWYgKGNvdW50IDwgMikKKwkgICAg QlVGRkVSX0ZBSUwoY291bnQsIGxlbiwgIjNEU1RBVEVfREVTVF9CVUZGRVJfVkFSSUFCTEVTIik7 CisKKwlpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCAwLAorCQkgICIzRFNUQVRFX0RFU1RfQlVG RkVSX1ZBUklBQkxFU1xuIik7CisKKwlzd2l0Y2ggKChkYXRhWzFdID4+IDgpICYgMHhmKSB7CisJ Y2FzZSAweDA6IGZvcm1hdCA9ICJnOCI7IGJyZWFrOworCWNhc2UgMHgxOiBmb3JtYXQgPSAieDFy NWc1YjUiOyBicmVhazsKKwljYXNlIDB4MjogZm9ybWF0ID0gInI1ZzZiNSI7IGJyZWFrOworCWNh c2UgMHgzOiBmb3JtYXQgPSAiYThyOGc4YjgiOyBicmVhazsKKwljYXNlIDB4NDogZm9ybWF0ID0g InljcmNiX3N3YXB5IjsgYnJlYWs7CisJY2FzZSAweDU6IGZvcm1hdCA9ICJ5Y3JjYl9ub3JtYWwi OyBicmVhazsKKwljYXNlIDB4NjogZm9ybWF0ID0gInljcmNiX3N3YXB1diI7IGJyZWFrOworCWNh c2UgMHg3OiBmb3JtYXQgPSAieWNyY2Jfc3dhcHV2eSI7IGJyZWFrOworCWNhc2UgMHg4OiBmb3Jt YXQgPSAiYTRyNGc0YjQiOyBicmVhazsKKwljYXNlIDB4OTogZm9ybWF0ID0gImExcjVnNWI1Ijsg YnJlYWs7CisJY2FzZSAweGE6IGZvcm1hdCA9ICJhMnIxMGcxMGIxMCI7IGJyZWFrOworCWRlZmF1 bHQ6IGZvcm1hdCA9ICJCQUQiOyBicmVhazsKKwl9CisJc3dpdGNoICgoZGF0YVsxXSA+PiAyKSAm IDB4MykgeworCWNhc2UgMHgwOiB6Zm9ybWF0ID0gInUxNiI7IGJyZWFrOworCWNhc2UgMHgxOiB6 Zm9ybWF0ID0gImYxNiI7IGJyZWFrOworCWNhc2UgMHgyOiB6Zm9ybWF0ID0gInUyNHg4IjsgYnJl YWs7CisJZGVmYXVsdDogemZvcm1hdCA9ICJCQUQiOyBicmVhazsKKwl9CisJaW5zdHJfb3V0KGRh dGEsIGh3X29mZnNldCwgMSwgIiVzIGZvcm1hdCwgJXMgZGVwdGggZm9ybWF0LCBlYXJseSBaICVz YWJsZWRcbiIsCisJCSAgZm9ybWF0LCB6Zm9ybWF0LAorCQkgIChkYXRhWzFdICYgKDEgPDwgMzEp KSA/ICJlbiIgOiAiZGlzIik7CisJcmV0dXJuIGxlbjsKKworICAgIGNhc2UgMHg4ZToKKwl7CisJ ICAgIGNvbnN0IGNoYXIgKm5hbWUsICp0aWxpbmc7CisKKwkgICAgbGVuID0gKGRhdGFbMF0gJiAw eDAwMDAwMDBmKSArIDI7CisJICAgIGlmIChsZW4gIT0gMykKKwkJZnByaW50ZihvdXQsICJCYWQg Y291bnQgaW4gM0RTVEFURV9CVUZGRVJfSU5GT1xuIik7CisJICAgIGlmIChjb3VudCA8IDMpCisJ CUJVRkZFUl9GQUlMKGNvdW50LCBsZW4sICIzRFNUQVRFX0JVRkZFUl9JTkZPIik7CisKKwkgICAg c3dpdGNoKChkYXRhWzFdID4+IDI0KSAmIDB4NykgeworCSAgICBjYXNlIDB4MzogbmFtZSA9ICJj b2xvciI7IGJyZWFrOworCSAgICBjYXNlIDB4NzogbmFtZSA9ICJkZXB0aCI7IGJyZWFrOworCSAg ICBkZWZhdWx0OiBuYW1lID0gInVua25vd24iOyBicmVhazsKKwkgICAgfQorCisJICAgIHRpbGlu ZyA9ICJub25lIjsKKwkgICAgaWYgKGRhdGFbMV0gJiAoMSA8PCAyMykpCisJCXRpbGluZyA9ICJm ZW5jZWQiOworCSAgICBlbHNlIGlmIChkYXRhWzFdICYgKDEgPDwgMjIpKQorCQl0aWxpbmcgPSBk YXRhWzFdICYgKDEgPDwgMjEpID8gIlkiIDogIlgiOworCisJICAgIGluc3RyX291dChkYXRhLCBo d19vZmZzZXQsIDAsICIzRFNUQVRFX0JVRkZFUl9JTkZPXG4iKTsKKwkgICAgaW5zdHJfb3V0KGRh dGEsIGh3X29mZnNldCwgMSwgIiVzLCB0aWxpbmcgPSAlcywgcGl0Y2g9JWRcbiIsIG5hbWUsIHRp bGluZywgZGF0YVsxXSYweGZmZmYpOworCisJICAgIGluc3RyX291dChkYXRhLCBod19vZmZzZXQs IDIsICJhZGRyZXNzXG4iKTsKKwkgICAgcmV0dXJuIGxlbjsKKwl9CisgICAgY2FzZSAweDgxOgor CWxlbiA9IChkYXRhWzBdICYgMHgwMDAwMDAwZikgKyAyOworCisJaWYgKGxlbiAhPSAzKQorCSAg ICBmcHJpbnRmKG91dCwgIkJhZCBjb3VudCBpbiAzRFNUQVRFX1NDSVNTT1JfUkVDVEFOR0xFXG4i KTsKKwlpZiAoY291bnQgPCAzKQorCSAgICBCVUZGRVJfRkFJTChjb3VudCwgbGVuLCAiM0RTVEFU RV9TQ0lTU09SX1JFQ1RBTkdMRSIpOworCisJaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMCwK KwkJICAiM0RTVEFURV9TQ0lTU09SX1JFQ1RBTkdMRVxuIik7CisJaW5zdHJfb3V0KGRhdGEsIGh3 X29mZnNldCwgMSwgIiglZCwlZClcbiIsCisJCSAgZGF0YVsxXSAmIDB4ZmZmZiwgZGF0YVsxXSA+ PiAxNik7CisJaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMiwgIiglZCwlZClcbiIsCisJCSAg ZGF0YVsyXSAmIDB4ZmZmZiwgZGF0YVsyXSA+PiAxNik7CisKKwlyZXR1cm4gbGVuOworICAgIGNh c2UgMHg4MDoKKwlsZW4gPSAoZGF0YVswXSAmIDB4MDAwMDAwMGYpICsgMjsKKworCWlmIChsZW4g IT0gNSkKKwkgICAgZnByaW50ZihvdXQsICJCYWQgY291bnQgaW4gM0RTVEFURV9EUkFXSU5HX1JF Q1RBTkdMRVxuIik7CisJaWYgKGNvdW50IDwgNSkKKwkgICAgQlVGRkVSX0ZBSUwoY291bnQsIGxl biwgIjNEU1RBVEVfRFJBV0lOR19SRUNUQU5HTEUiKTsKKworCWluc3RyX291dChkYXRhLCBod19v ZmZzZXQsIDAsCisJCSAgIjNEU1RBVEVfRFJBV0lOR19SRUNUQU5HTEVcbiIpOworCWluc3RyX291 dChkYXRhLCBod19vZmZzZXQsIDEsICIlc1xuIiwKKwkJICBkYXRhWzFdJigxPDwzMCk/ImRlcHRo IG9mcyBkaXNhYmxlZCAiOiIiKTsKKwlpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCAyLCAiKCVk LCVkKVxuIiwKKwkJICBkYXRhWzJdICYgMHhmZmZmLCBkYXRhWzJdID4+IDE2KTsKKwlpbnN0cl9v dXQoZGF0YSwgaHdfb2Zmc2V0LCAzLCAiKCVkLCVkKVxuIiwKKwkJICBkYXRhWzNdICYgMHhmZmZm LCBkYXRhWzNdID4+IDE2KTsKKwlpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCA0LCAiKCVkLCVk KVxuIiwKKwkJICBkYXRhWzRdICYgMHhmZmZmLCBkYXRhWzRdID4+IDE2KTsKKworCXJldHVybiBs ZW47CisgICAgY2FzZSAweDljOgorCWxlbiA9IChkYXRhWzBdICYgMHgwMDAwMDAwZikgKyAyOwor CisJaWYgKGxlbiAhPSA3KQorCSAgICBmcHJpbnRmKG91dCwgIkJhZCBjb3VudCBpbiAzRFNUQVRF X0NMRUFSX1BBUkFNRVRFUlNcbiIpOworCWlmIChjb3VudCA8IDcpCisJICAgIEJVRkZFUl9GQUlM KGNvdW50LCBsZW4sICIzRFNUQVRFX0NMRUFSX1BBUkFNRVRFUlMiKTsKKworCWluc3RyX291dChk YXRhLCBod19vZmZzZXQsIDAsCisJCSAgIjNEU1RBVEVfQ0xFQVJfUEFSQU1FVEVSU1xuIik7CisJ aW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMSwgInByaW1fdHlwZT0lcywgY2xlYXI9JXMlcyVz XG4iLAorCQkgIGRhdGFbMV0mKDE8PDE2KT8iQ0xFQVJfUkVDVCI6IlpPTkVfSU5JVCIsCisJCSAg ZGF0YVsxXSYoMTw8Mik/ImNvbG9yLCI6IiIsCisJCSAgZGF0YVsxXSYoMTw8MSk/ImRlcHRoLCI6 IiIsCisJCSAgZGF0YVsxXSYoMTw8MCk/InN0ZW5jaWwsIjoiIik7CisJaW5zdHJfb3V0KGRhdGEs IGh3X29mZnNldCwgMiwgImNsZWFyIGNvbG9yXG4iKTsKKwlpbnN0cl9vdXQoZGF0YSwgaHdfb2Zm c2V0LCAzLCAiY2xlYXIgZGVwdGgvc3RlbmNpbFxuIik7CisJaW5zdHJfb3V0KGRhdGEsIGh3X29m ZnNldCwgNCwgImNvbG9yIHZhbHVlIChyZ2JhODg4OClcbiIpOworCWluc3RyX291dChkYXRhLCBo d19vZmZzZXQsIDUsICJkZXB0aCB2YWx1ZSAlZlxuIiwKKwkJICBpbnRfYXNfZmxvYXQoZGF0YVs1 XSkpOworCWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIDYsICJjbGVhciBzdGVuY2lsXG4iKTsK KwlyZXR1cm4gbGVuOworICAgIH0KKworICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0la RShvcGNvZGVzXzNkXzFkKTsgaWR4KyspCisgICAgeworCW9wY29kZV8zZF8xZCA9ICZvcGNvZGVz XzNkXzFkW2lkeF07CisJaWYgKG9wY29kZV8zZF8xZC0+aTgzMF9vbmx5ICYmICFJU19HRU4yKGRl dmlkKSkKKwkgICAgY29udGludWU7CisKKwlpZiAoKChkYXRhWzBdICYgMHgwMGZmMDAwMCkgPj4g MTYpID09IG9wY29kZV8zZF8xZC0+b3Bjb2RlKSB7CisJICAgIGxlbiA9IDE7CisKKwkgICAgaW5z dHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMCwgIiVzXG4iLCBvcGNvZGVfM2RfMWQtPm5hbWUpOwor CSAgICBpZiAob3Bjb2RlXzNkXzFkLT5tYXhfbGVuID4gMSkgeworCQlsZW4gPSAoZGF0YVswXSAm IDB4MDAwMGZmZmYpICsgMjsKKwkJaWYgKGxlbiA8IG9wY29kZV8zZF8xZC0+bWluX2xlbiB8fAor CQkgICAgbGVuID4gb3Bjb2RlXzNkXzFkLT5tYXhfbGVuKQorCQl7CisJCSAgICBmcHJpbnRmKG91 dCwgIkJhZCBjb3VudCBpbiAlc1xuIiwKKwkJCSAgICBvcGNvZGVfM2RfMWQtPm5hbWUpOworCQkg ICAgKCpmYWlsdXJlcykrKzsKKwkJfQorCSAgICB9CisKKwkgICAgZm9yIChpID0gMTsgaSA8IGxl bjsgaSsrKSB7CisJCWlmIChpID49IGNvdW50KQorCQkgICAgQlVGRkVSX0ZBSUwoY291bnQsIGxl biwgIG9wY29kZV8zZF8xZC0+bmFtZSk7CisJCWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIGks ICJkd29yZCAlZFxuIiwgaSk7CisJICAgIH0KKworCSAgICByZXR1cm4gbGVuOworCX0KKyAgICB9 CisKKyAgICBpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCAwLCAiM0QgVU5LTk9XTjogM2RfMWQg b3Bjb2RlID0gMHgleFxuIiwgb3Bjb2RlKTsKKyAgICAoKmZhaWx1cmVzKSsrOworICAgIHJldHVy biAxOworfQorCitzdGF0aWMgaW50CitkZWNvZGVfM2RfcHJpbWl0aXZlKHVpbnQzMl90ICpkYXRh LCBpbnQgY291bnQsIHVpbnQzMl90IGh3X29mZnNldCwKKwkJICAgIGludCAqZmFpbHVyZXMpCit7 CisgICAgY2hhciBpbW1lZGlhdGUgPSAoZGF0YVswXSAmICgxIDw8IDIzKSkgPT0gMDsKKyAgICB1 bnNpZ25lZCBpbnQgbGVuLCBpLCBqLCByZXQ7CisgICAgY2hhciAqcHJpbXR5cGU7CisgICAgaW50 IG9yaWdpbmFsX3MyID0gc2F2ZWRfczI7CisgICAgaW50IG9yaWdpbmFsX3M0ID0gc2F2ZWRfczQ7 CisKKyAgICBzd2l0Y2ggKChkYXRhWzBdID4+IDE4KSAmIDB4ZikgeworICAgIGNhc2UgMHgwOiBw cmltdHlwZSA9ICJUUklMSVNUIjsgYnJlYWs7CisgICAgY2FzZSAweDE6IHByaW10eXBlID0gIlRS SVNUUklQIjsgYnJlYWs7CisgICAgY2FzZSAweDI6IHByaW10eXBlID0gIlRSSVNUUklQX1JFVkVS U0UiOyBicmVhazsKKyAgICBjYXNlIDB4MzogcHJpbXR5cGUgPSAiVFJJRkFOIjsgYnJlYWs7Cisg ICAgY2FzZSAweDQ6IHByaW10eXBlID0gIlBPTFlHT04iOyBicmVhazsKKyAgICBjYXNlIDB4NTog cHJpbXR5cGUgPSAiTElORUxJU1QiOyBicmVhazsKKyAgICBjYXNlIDB4NjogcHJpbXR5cGUgPSAi TElORVNUUklQIjsgYnJlYWs7CisgICAgY2FzZSAweDc6IHByaW10eXBlID0gIlJFQ1RMSVNUIjsg YnJlYWs7CisgICAgY2FzZSAweDg6IHByaW10eXBlID0gIlBPSU5UTElTVCI7IGJyZWFrOworICAg IGNhc2UgMHg5OiBwcmltdHlwZSA9ICJESUIiOyBicmVhazsKKyAgICBjYXNlIDB4YTogcHJpbXR5 cGUgPSAiQ0xFQVJfUkVDVCI7IHNhdmVkX3M0ID0gMyA8PCA2OyBzYXZlZF9zMiA9IH4wOyBicmVh azsKKyAgICBkZWZhdWx0OiBwcmltdHlwZSA9ICJ1bmtub3duIjsgYnJlYWs7CisgICAgfQorCisg ICAgLyogWFhYOiAzRFBSSU1fRElCIG5vdCBzdXBwb3J0ZWQgKi8KKyAgICBpZiAoaW1tZWRpYXRl KSB7CisJbGVuID0gKGRhdGFbMF0gJiAweDAwMDNmZmZmKSArIDI7CisJaW5zdHJfb3V0KGRhdGEs IGh3X29mZnNldCwgMCwgIjNEUFJJTUlUSVZFIGlubGluZSAlc1xuIiwgcHJpbXR5cGUpOworCWlm IChjb3VudCA8IGxlbikKKwkgICAgQlVGRkVSX0ZBSUwoY291bnQsIGxlbiwgICIzRFBSSU1JVElW RSBpbmxpbmUiKTsKKwlpZiAoIXNhdmVkX3MyX3NldCB8fCAhc2F2ZWRfczRfc2V0KSB7CisJICAg IGZwcmludGYob3V0LCAidW5rbm93biB2ZXJ0ZXggZm9ybWF0XG4iKTsKKwkgICAgZm9yIChpID0g MTsgaSA8IGxlbjsgaSsrKSB7CisJCWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIGksCisJCQkg ICIgICAgICAgICAgIHZlcnRleCBkYXRhICglZiBmbG9hdClcbiIsCisJCQkgIGludF9hc19mbG9h dChkYXRhW2ldKSk7CisJICAgIH0KKwl9IGVsc2UgeworCSAgICB1bnNpZ25lZCBpbnQgdmVydGV4 ID0gMDsKKwkgICAgZm9yIChpID0gMTsgaSA8IGxlbjspIHsKKwkJdW5zaWduZWQgaW50IHRjOwor CisjZGVmaW5lIFZFUlRFWF9PVVQoZm10LCAuLi4pIGRvIHsJCQkJCVwKKyAgICBpZiAoaSA8IGxl bikJCQkJCQkJXAorCWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIGksICIgViVkLiJmbXQiXG4i LCB2ZXJ0ZXgsIF9fVkFfQVJHU19fKTsgXAorICAgIGVsc2UJCQkJCQkJCVwKKwlmcHJpbnRmKG91 dCwgIiBtaXNzaW5nIGRhdGEgaW4gViVkXG4iLCB2ZXJ0ZXgpOwkJCVwKKyAgICBpKys7CQkJCQkJ CQlcCit9IHdoaWxlICgwKQorCisJCVZFUlRFWF9PVVQoIlggPSAlZiIsIGludF9hc19mbG9hdChk YXRhW2ldKSk7CisJCVZFUlRFWF9PVVQoIlkgPSAlZiIsIGludF9hc19mbG9hdChkYXRhW2ldKSk7 CisJICAgICAgICBzd2l0Y2ggKHNhdmVkX3M0ID4+IDYgJiAweDcpIHsKKwkJY2FzZSAweDE6CisJ CSAgICBWRVJURVhfT1VUKCJaID0gJWYiLCBpbnRfYXNfZmxvYXQoZGF0YVtpXSkpOworCQkgICAg YnJlYWs7CisJCWNhc2UgMHgyOgorCQkgICAgVkVSVEVYX09VVCgiWiA9ICVmIiwgaW50X2FzX2Zs b2F0KGRhdGFbaV0pKTsKKwkJICAgIFZFUlRFWF9PVVQoIlcgPSAlZiIsIGludF9hc19mbG9hdChk YXRhW2ldKSk7CisJCSAgICBicmVhazsKKwkJY2FzZSAweDM6CisJCSAgICBicmVhazsKKwkJY2Fz ZSAweDQ6CisJCSAgICBWRVJURVhfT1VUKCJXID0gJWYiLCBpbnRfYXNfZmxvYXQoZGF0YVtpXSkp OworCQkgICAgYnJlYWs7CisJCWRlZmF1bHQ6CisJCSAgICBmcHJpbnRmKG91dCwgImJhZCBTNCBw b3NpdGlvbiBtYXNrXG4iKTsKKwkJfQorCisJCWlmIChzYXZlZF9zNCAmICgxIDw8IDEwKSkgewor CQkgICAgVkVSVEVYX09VVCgiY29sb3IgPSAoQT0weCUwMngsIFI9MHglMDJ4LCBHPTB4JTAyeCwg IgorCQkJICAgICAgICJCPTB4JTAyeCkiLAorCQkJICAgICAgIGRhdGFbaV0gPj4gMjQsCisJCQkg ICAgICAgKGRhdGFbaV0gPj4gMTYpICYgMHhmZiwKKwkJCSAgICAgICAoZGF0YVtpXSA+PiA4KSAm IDB4ZmYsCisJCQkgICAgICAgZGF0YVtpXSAmIDB4ZmYpOworCQl9CisJCWlmIChzYXZlZF9zNCAm ICgxIDw8IDExKSkgeworCQkgICAgVkVSVEVYX09VVCgic3BlYyA9IChBPTB4JTAyeCwgUj0weCUw MngsIEc9MHglMDJ4LCAiCisJCQkgICAgICAgIkI9MHglMDJ4KSIsCisJCQkgICAgICAgZGF0YVtp XSA+PiAyNCwKKwkJCSAgICAgICAoZGF0YVtpXSA+PiAxNikgJiAweGZmLAorCQkJICAgICAgIChk YXRhW2ldID4+IDgpICYgMHhmZiwKKwkJCSAgICAgICBkYXRhW2ldICYgMHhmZik7CisJCX0KKwkJ aWYgKHNhdmVkX3M0ICYgKDEgPDwgMTIpKQorCQkgICAgVkVSVEVYX09VVCgid2lkdGggPSAweCUw OHgpIiwgZGF0YVtpXSk7CisKKwkJZm9yICh0YyA9IDA7IHRjIDw9IDc7IHRjKyspIHsKKwkJICAg IHN3aXRjaCAoKHNhdmVkX3MyID4+ICh0YyAqIDQpKSAmIDB4ZikgeworCQkgICAgY2FzZSAweDA6 CisJCQlWRVJURVhfT1VUKCJUJWQuWCA9ICVmIiwgdGMsIGludF9hc19mbG9hdChkYXRhW2ldKSk7 CisJCQlWRVJURVhfT1VUKCJUJWQuWSA9ICVmIiwgdGMsIGludF9hc19mbG9hdChkYXRhW2ldKSk7 CisJCQlicmVhazsKKwkJICAgIGNhc2UgMHgxOgorCQkJVkVSVEVYX09VVCgiVCVkLlggPSAlZiIs IHRjLCBpbnRfYXNfZmxvYXQoZGF0YVtpXSkpOworCQkJVkVSVEVYX09VVCgiVCVkLlkgPSAlZiIs IHRjLCBpbnRfYXNfZmxvYXQoZGF0YVtpXSkpOworCQkJVkVSVEVYX09VVCgiVCVkLlogPSAlZiIs IHRjLCBpbnRfYXNfZmxvYXQoZGF0YVtpXSkpOworCQkJYnJlYWs7CisJCSAgICBjYXNlIDB4MjoK KwkJCVZFUlRFWF9PVVQoIlQlZC5YID0gJWYiLCB0YywgaW50X2FzX2Zsb2F0KGRhdGFbaV0pKTsK KwkJCVZFUlRFWF9PVVQoIlQlZC5ZID0gJWYiLCB0YywgaW50X2FzX2Zsb2F0KGRhdGFbaV0pKTsK KwkJCVZFUlRFWF9PVVQoIlQlZC5aID0gJWYiLCB0YywgaW50X2FzX2Zsb2F0KGRhdGFbaV0pKTsK KwkJCVZFUlRFWF9PVVQoIlQlZC5XID0gJWYiLCB0YywgaW50X2FzX2Zsb2F0KGRhdGFbaV0pKTsK KwkJCWJyZWFrOworCQkgICAgY2FzZSAweDM6CisJCQlWRVJURVhfT1VUKCJUJWQuWCA9ICVmIiwg dGMsIGludF9hc19mbG9hdChkYXRhW2ldKSk7CisJCQlicmVhazsKKwkJICAgIGNhc2UgMHg0Ogor CQkJVkVSVEVYX09VVCgiVCVkLlhZID0gMHglMDh4IGhhbGYtZmxvYXQiLCB0YywgZGF0YVtpXSk7 CisJCQlicmVhazsKKwkJICAgIGNhc2UgMHg1OgorCQkJVkVSVEVYX09VVCgiVCVkLlhZID0gMHgl MDh4IGhhbGYtZmxvYXQiLCB0YywgZGF0YVtpXSk7CisJCQlWRVJURVhfT1VUKCJUJWQuWlcgPSAw eCUwOHggaGFsZi1mbG9hdCIsIHRjLCBkYXRhW2ldKTsKKwkJCWJyZWFrOworCQkgICAgY2FzZSAw eGY6CisJCQlicmVhazsKKwkJICAgIGRlZmF1bHQ6CisJCQlmcHJpbnRmKG91dCwgImJhZCBTMi5U JWQgZm9ybWF0XG4iLCB0Yyk7CisJCSAgICB9CisJCX0KKwkJdmVydGV4Kys7CisJICAgIH0KKwl9 CisKKwlyZXQgPSBsZW47CisgICAgfSBlbHNlIHsKKwkvKiBpbmRpcmVjdCB2ZXJ0aWNlcyAqLwor CWxlbiA9IGRhdGFbMF0gJiAweDAwMDBmZmZmOyAvKiBpbmRleCBjb3VudCAqLworCWlmIChkYXRh WzBdICYgKDEgPDwgMTcpKSB7CisJICAgIC8qIHJhbmRvbSB2ZXJ0ZXggYWNjZXNzICovCisJICAg IGlmIChjb3VudCA8IChsZW4gKyAxKSAvIDIgKyAxKSB7CisJCUJVRkZFUl9GQUlMKGNvdW50LCAo bGVuICsgMSkgLyAyICsgMSwKKwkJCSAgICAiM0RQUklNSVRJVkUgcmFuZG9tIGluZGlyZWN0Iik7 CisJICAgIH0KKwkgICAgaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMCwKKwkJICAgICAgIjNE UFJJTUlUSVZFIHJhbmRvbSBpbmRpcmVjdCAlcyAoJWQpXG4iLCBwcmltdHlwZSwgbGVuKTsKKwkg ICAgaWYgKGxlbiA9PSAwKSB7CisJCS8qIHZlcnRleCBpbmRpY2VzIGNvbnRpbnVlIHVudGlsIDB4 ZmZmZiBpcyBmb3VuZCAqLworCQlmb3IgKGkgPSAxOyBpIDwgY291bnQ7IGkrKykgeworCQkgICAg aWYgKChkYXRhW2ldICYgMHhmZmZmKSA9PSAweGZmZmYpIHsKKwkJCWluc3RyX291dChkYXRhLCBo d19vZmZzZXQsIGksCisJCQkJICAiICAgIGluZGljZXM6ICh0ZXJtaW5hdG9yKVxuIik7CisJCQly ZXQgPSBpOworCQkJZ290byBvdXQ7CisJCSAgICB9IGVsc2UgaWYgKChkYXRhW2ldID4+IDE2KSA9 PSAweGZmZmYpIHsKKwkJCWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIGksCisJCQkJICAiICAg IGluZGljZXM6IDB4JTA0eCwgKHRlcm1pbmF0b3IpXG4iLAorCQkJCSAgZGF0YVtpXSAmIDB4ZmZm Zik7CisJCQlyZXQgPSBpOworCQkJZ290byBvdXQ7CisJCSAgICB9IGVsc2UgeworCQkJaW5zdHJf b3V0KGRhdGEsIGh3X29mZnNldCwgaSwKKwkJCQkgICIgICAgaW5kaWNlczogMHglMDR4LCAweCUw NHhcbiIsCisJCQkJICBkYXRhW2ldICYgMHhmZmZmLCBkYXRhW2ldID4+IDE2KTsKKwkJICAgIH0K KwkJfQorCQlmcHJpbnRmKG91dCwKKwkJCSIzRFBSSU1JVElWRTogbm8gdGVybWluYXRvciBmb3Vu ZCBpbiBpbmRleCBidWZmZXJcbiIpOworCQkoKmZhaWx1cmVzKSsrOworCQlyZXQgPSBjb3VudDsK KwkJZ290byBvdXQ7CisJICAgIH0gZWxzZSB7CisJCS8qIGZpeGVkIHNpemUgdmVydGV4IGluZGV4 IGJ1ZmZlciAqLworCQlmb3IgKGogPSAxLCBpID0gMDsgaSA8IGxlbjsgaSArPSAyLCBqKyspIHsK KwkJICAgIGlmIChpICogMiA9PSBsZW4gLSAxKSB7CisJCQlpbnN0cl9vdXQoZGF0YSwgaHdfb2Zm c2V0LCBqLAorCQkJCSAgIiAgICBpbmRpY2VzOiAweCUwNHhcbiIsCisJCQkJICBkYXRhW2pdICYg MHhmZmZmKTsKKwkJICAgIH0gZWxzZSB7CisJCQlpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCBq LAorCQkJCSAgIiAgICBpbmRpY2VzOiAweCUwNHgsIDB4JTA0eFxuIiwKKwkJCQkgIGRhdGFbal0g JiAweGZmZmYsIGRhdGFbal0gPj4gMTYpOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgcmV0 ID0gKGxlbiArIDEpIC8gMiArIDE7CisJICAgIGdvdG8gb3V0OworCX0gZWxzZSB7CisJICAgIC8q IHNlcXVlbnRpYWwgdmVydGV4IGFjY2VzcyAqLworCSAgICBpZiAoY291bnQgPCAyKQorCQlCVUZG RVJfRkFJTChjb3VudCwgMiwgIjNEUFJJTUlUSVZFIHNlcSBpbmRpcmVjdCIpOworCSAgICBpbnN0 cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCAwLAorCQkgICAgICAiM0RQUklNSVRJVkUgc2VxdWVudGlh bCBpbmRpcmVjdCAlcywgJWQgc3RhcnRpbmcgZnJvbSAiCisJCSAgICAgICIlZFxuIiwgcHJpbXR5 cGUsIGxlbiwgZGF0YVsxXSAmIDB4ZmZmZik7CisJICAgIGluc3RyX291dChkYXRhLCBod19vZmZz ZXQsIDEsICIgICAgICAgICAgIHN0YXJ0XG4iKTsKKwkgICAgcmV0ID0gMjsKKwkgICAgZ290byBv dXQ7CisJfQorICAgIH0KKworb3V0OgorICAgIHNhdmVkX3MyID0gb3JpZ2luYWxfczI7CisgICAg c2F2ZWRfczQgPSBvcmlnaW5hbF9zNDsKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50 CitkZWNvZGVfM2QodWludDMyX3QgKmRhdGEsIGludCBjb3VudCwgdWludDMyX3QgaHdfb2Zmc2V0 LCB1aW50MzJfdCBkZXZpZCwgaW50ICpmYWlsdXJlcykKK3sKKyAgICB1aW50MzJfdCBvcGNvZGU7 CisgICAgdW5zaWduZWQgaW50IGlkeDsKKworICAgIHN0cnVjdCB7CisJdWludDMyX3Qgb3Bjb2Rl OworCWludCBtaW5fbGVuOworCWludCBtYXhfbGVuOworCWNoYXIgKm5hbWU7CisgICAgfSBvcGNv ZGVzXzNkW10gPSB7CisJeyAweDA2LCAxLCAxLCAiM0RTVEFURV9BTlRJX0FMSUFTSU5HIiB9LAor CXsgMHgwOCwgMSwgMSwgIjNEU1RBVEVfQkFDS0ZBQ0VfU1RFTkNJTF9PUFMiIH0sCisJeyAweDA5 LCAxLCAxLCAiM0RTVEFURV9CQUNLRkFDRV9TVEVOQ0lMX01BU0tTIiB9LAorCXsgMHgxNiwgMSwg MSwgIjNEU1RBVEVfQ09PUkRfU0VUX0JJTkRJTkdTIiB9LAorCXsgMHgxNSwgMSwgMSwgIjNEU1RB VEVfRk9HX0NPTE9SIiB9LAorCXsgMHgwYiwgMSwgMSwgIjNEU1RBVEVfSU5ERVBFTkRFTlRfQUxQ SEFfQkxFTkQiIH0sCisJeyAweDBkLCAxLCAxLCAiM0RTVEFURV9NT0RFU180IiB9LAorCXsgMHgw YywgMSwgMSwgIjNEU1RBVEVfTU9ERVNfNSIgfSwKKwl7IDB4MDcsIDEsIDEsICIzRFNUQVRFX1JB U1RFUklaQVRJT05fUlVMRVMiIH0sCisgICAgfSwgKm9wY29kZV8zZDsKKworICAgIG9wY29kZSA9 IChkYXRhWzBdICYgMHgxZjAwMDAwMCkgPj4gMjQ7CisKKyAgICBzd2l0Y2ggKG9wY29kZSkgewor ICAgIGNhc2UgMHgxZjoKKwlyZXR1cm4gZGVjb2RlXzNkX3ByaW1pdGl2ZShkYXRhLCBjb3VudCwg aHdfb2Zmc2V0LCBmYWlsdXJlcyk7CisgICAgY2FzZSAweDFkOgorCXJldHVybiBkZWNvZGVfM2Rf MWQoZGF0YSwgY291bnQsIGh3X29mZnNldCwgZGV2aWQsIGZhaWx1cmVzKTsKKyAgICBjYXNlIDB4 MWM6CisJcmV0dXJuIGRlY29kZV8zZF8xYyhkYXRhLCBjb3VudCwgaHdfb2Zmc2V0LCBmYWlsdXJl cyk7CisgICAgfQorCisgICAgZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKG9wY29kZXNf M2QpOyBpZHgrKykgeworCW9wY29kZV8zZCA9ICZvcGNvZGVzXzNkW2lkeF07CisJaWYgKG9wY29k ZSA9PSBvcGNvZGVfM2QtPm9wY29kZSkgeworCSAgICB1bnNpZ25lZCBpbnQgbGVuID0gMSwgaTsK KworCSAgICBpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCAwLCAiJXNcbiIsIG9wY29kZV8zZC0+ bmFtZSk7CisJICAgIGlmIChvcGNvZGVfM2QtPm1heF9sZW4gPiAxKSB7CisJCWxlbiA9IChkYXRh WzBdICYgMHhmZikgKyAyOworCQlpZiAobGVuIDwgb3Bjb2RlXzNkLT5taW5fbGVuIHx8CisJCSAg ICBsZW4gPiBvcGNvZGVfM2QtPm1heF9sZW4pCisJCXsKKwkJICAgIGZwcmludGYob3V0LCAiQmFk IGNvdW50IGluICVzXG4iLCBvcGNvZGVfM2QtPm5hbWUpOworCQl9CisJICAgIH0KKworCSAgICBm b3IgKGkgPSAxOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKGkgPj0gY291bnQpCisJCSAgICBCVUZG RVJfRkFJTChjb3VudCwgbGVuLCBvcGNvZGVfM2QtPm5hbWUpOworCQlpbnN0cl9vdXQoZGF0YSwg aHdfb2Zmc2V0LCBpLCAiZHdvcmQgJWRcbiIsIGkpOworCSAgICB9CisJICAgIHJldHVybiBsZW47 CisJfQorICAgIH0KKworICAgIGluc3RyX291dChkYXRhLCBod19vZmZzZXQsIDAsICIzRCBVTktO T1dOOiAzZCBvcGNvZGUgPSAweCV4XG4iLCBvcGNvZGUpOworICAgICgqZmFpbHVyZXMpKys7Cisg ICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2dldF85NjVfc3VyZmFjZXR5 cGUodW5zaWduZWQgaW50IHN1cmZhY2V0eXBlKQoreworICAgIHN3aXRjaCAoc3VyZmFjZXR5cGUp IHsKKyAgICBjYXNlIDA6IHJldHVybiAiMUQiOworICAgIGNhc2UgMTogcmV0dXJuICIyRCI7Cisg ICAgY2FzZSAyOiByZXR1cm4gIjNEIjsKKyAgICBjYXNlIDM6IHJldHVybiAiQ1VCRSI7CisgICAg Y2FzZSA0OiByZXR1cm4gIkJVRkZFUiI7CisgICAgY2FzZSA3OiByZXR1cm4gIk5VTEwiOworICAg IGRlZmF1bHQ6IHJldHVybiAidW5rbm93biI7CisgICAgfQorfQorCitzdGF0aWMgY29uc3QgY2hh ciAqCitnZXRfOTY1X2RlcHRoZm9ybWF0KHVuc2lnbmVkIGludCBkZXB0aGZvcm1hdCkKK3sKKyAg ICBzd2l0Y2ggKGRlcHRoZm9ybWF0KSB7CisgICAgY2FzZSAwOiByZXR1cm4gInM4X3oyNGZsb2F0 IjsKKyAgICBjYXNlIDE6IHJldHVybiAiejMyZmxvYXQiOworICAgIGNhc2UgMjogcmV0dXJuICJ6 MjRzOCI7CisgICAgY2FzZSA1OiByZXR1cm4gInoxNiI7CisgICAgZGVmYXVsdDogcmV0dXJuICJ1 bmtub3duIjsKKyAgICB9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2dldF85NjVfZWxlbWVu dF9jb21wb25lbnQodWludDMyX3QgZGF0YSwgaW50IGNvbXBvbmVudCkKK3sKKyAgICB1aW50MzJf dCBjb21wb25lbnRfY29udHJvbCA9IChkYXRhID4+ICgxNiArICgzIC0gY29tcG9uZW50KSAqIDQp KSAmIDB4NzsKKworICAgIHN3aXRjaCAoY29tcG9uZW50X2NvbnRyb2wpIHsKKyAgICBjYXNlIDA6 CisJcmV0dXJuICJub3N0b3JlIjsKKyAgICBjYXNlIDE6CisJc3dpdGNoIChjb21wb25lbnQpIHsK KwljYXNlIDA6IHJldHVybiAiWCI7CisJY2FzZSAxOiByZXR1cm4gIlkiOworCWNhc2UgMjogcmV0 dXJuICJaIjsKKwljYXNlIDM6IHJldHVybiAiVyI7CisJZGVmYXVsdDogcmV0dXJuICJmYWlsIjsK Kwl9CisgICAgY2FzZSAyOgorCXJldHVybiAiMC4wIjsKKyAgICBjYXNlIDM6CisJcmV0dXJuICIx LjAiOworICAgIGNhc2UgNDoKKwlyZXR1cm4gIjB4MSI7CisgICAgY2FzZSA1OgorCXJldHVybiAi VklEIjsKKyAgICBkZWZhdWx0OgorCXJldHVybiAiZmFpbCI7CisgICAgfQorfQorCitzdGF0aWMg Y29uc3QgY2hhciAqCitnZXRfOTY1X3ByaW1fdHlwZSh1aW50MzJfdCBkYXRhKQoreworICAgIHVp bnQzMl90IHByaW10eXBlID0gKGRhdGEgPj4gMTApICYgMHgxZjsKKworICAgIHN3aXRjaCAocHJp bXR5cGUpIHsKKyAgICBjYXNlIDB4MDE6IHJldHVybiAicG9pbnQgbGlzdCI7CisgICAgY2FzZSAw eDAyOiByZXR1cm4gImxpbmUgbGlzdCI7CisgICAgY2FzZSAweDAzOiByZXR1cm4gImxpbmUgc3Ry aXAiOworICAgIGNhc2UgMHgwNDogcmV0dXJuICJ0cmkgbGlzdCI7CisgICAgY2FzZSAweDA1OiBy ZXR1cm4gInRyaSBzdHJpcCI7CisgICAgY2FzZSAweDA2OiByZXR1cm4gInRyaSBmYW4iOworICAg IGNhc2UgMHgwNzogcmV0dXJuICJxdWFkIGxpc3QiOworICAgIGNhc2UgMHgwODogcmV0dXJuICJx dWFkIHN0cmlwIjsKKyAgICBjYXNlIDB4MDk6IHJldHVybiAibGluZSBsaXN0IGFkaiI7CisgICAg Y2FzZSAweDBhOiByZXR1cm4gImxpbmUgc3RyaXAgYWRqIjsKKyAgICBjYXNlIDB4MGI6IHJldHVy biAidHJpIGxpc3QgYWRqIjsKKyAgICBjYXNlIDB4MGM6IHJldHVybiAidHJpIHN0cmlwIGFkaiI7 CisgICAgY2FzZSAweDBkOiByZXR1cm4gInRyaSBzdHJpcCByZXZlcnNlIjsKKyAgICBjYXNlIDB4 MGU6IHJldHVybiAicG9seWdvbiI7CisgICAgY2FzZSAweDBmOiByZXR1cm4gInJlY3QgbGlzdCI7 CisgICAgY2FzZSAweDEwOiByZXR1cm4gImxpbmUgbG9vcCI7CisgICAgY2FzZSAweDExOiByZXR1 cm4gInBvaW50IGxpc3QgYmYiOworICAgIGNhc2UgMHgxMjogcmV0dXJuICJsaW5lIHN0cmlwIGNv bnQiOworICAgIGNhc2UgMHgxMzogcmV0dXJuICJsaW5lIHN0cmlwIGJmIjsKKyAgICBjYXNlIDB4 MTQ6IHJldHVybiAibGluZSBzdHJpcCBjb250IGJmIjsKKyAgICBjYXNlIDB4MTU6IHJldHVybiAi dHJpIGZhbiBubyBzdGlwcGxlIjsKKyAgICBkZWZhdWx0OiByZXR1cm4gImZhaWwiOworICAgIH0K K30KKworc3RhdGljIGludAoraTk2NV9kZWNvZGVfdXJiX2ZlbmNlKHVpbnQzMl90ICpkYXRhLCB1 aW50MzJfdCBod19vZmZzZXQsIGludCBsZW4sIGludCBjb3VudCwKKwkJICAgICAgaW50ICpmYWls dXJlcykKK3sKKwl1aW50MzJfdCB2c19mZW5jZSwgY2xpcF9mZW5jZSwgZ3NfZmVuY2UsIHNmX2Zl bmNlLCB2ZmVfZmVuY2UsIGNzX2ZlbmNlOworCisJaWYgKGxlbiAhPSAzKQorCSAgICBmcHJpbnRm KG91dCwgIkJhZCBjb3VudCBpbiBVUkJfRkVOQ0VcbiIpOworCWlmIChjb3VudCA8IDMpCisJICAg IEJVRkZFUl9GQUlMKGNvdW50LCBsZW4sICJVUkJfRkVOQ0UiKTsKKworCXZzX2ZlbmNlID0gZGF0 YVsxXSAmIDB4M2ZmOworCWdzX2ZlbmNlID0gKGRhdGFbMV0gPj4gMTApICYgMHgzZmY7CisJY2xp cF9mZW5jZSA9IChkYXRhWzFdID4+IDIwKSAmIDB4M2ZmOworCXNmX2ZlbmNlID0gZGF0YVsyXSAm IDB4M2ZmOworCXZmZV9mZW5jZSA9IChkYXRhWzJdID4+IDEwKSAmIDB4M2ZmOworCWNzX2ZlbmNl ID0gKGRhdGFbMl0gPj4gMjApICYgMHg3ZmY7CisKKwlpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0 LCAwLCAiVVJCX0ZFTkNFOiAlcyVzJXMlcyVzJXNcbiIsCisJCQkoZGF0YVswXSA+PiAxMykgJiAx ID8gImNzICIgOiAiIiwKKwkJCShkYXRhWzBdID4+IDEyKSAmIDEgPyAidmZlICIgOiAiIiwKKwkJ CShkYXRhWzBdID4+IDExKSAmIDEgPyAic2YgIiA6ICIiLAorCQkJKGRhdGFbMF0gPj4gMTApICYg MSA/ICJjbGlwICIgOiAiIiwKKwkJCShkYXRhWzBdID4+IDkpICAmIDEgPyAiZ3MgIiA6ICIiLAor CQkJKGRhdGFbMF0gPj4gOCkgICYgMSA/ICJ2cyAiIDogIiIpOworCWluc3RyX291dChkYXRhLCBo d19vZmZzZXQsIDEsCisJCSAgInZzIGZlbmNlOiAlZCwgY2xpcF9mZW5jZTogJWQsIGdzX2ZlbmNl OiAlZFxuIiwKKwkJICB2c19mZW5jZSwgY2xpcF9mZW5jZSwgZ3NfZmVuY2UpOworCWluc3RyX291 dChkYXRhLCBod19vZmZzZXQsIDIsCisJCSAgInNmIGZlbmNlOiAlZCwgdmZlX2ZlbmNlOiAlZCwg Y3NfZmVuY2U6ICVkXG4iLAorCQkgIHNmX2ZlbmNlLCB2ZmVfZmVuY2UsIGNzX2ZlbmNlKTsKKwlp ZiAoZ3NfZmVuY2UgPCB2c19mZW5jZSkKKwkgICAgZnByaW50ZihvdXQsICJncyBmZW5jZSA8IHZz IGZlbmNlIVxuIik7CisJaWYgKGNsaXBfZmVuY2UgPCBnc19mZW5jZSkKKwkgICAgZnByaW50Zihv dXQsICJjbGlwIGZlbmNlIDwgZ3MgZmVuY2UhXG4iKTsKKwlpZiAoc2ZfZmVuY2UgPCBjbGlwX2Zl bmNlKQorCSAgICBmcHJpbnRmKG91dCwgInNmIGZlbmNlIDwgY2xpcCBmZW5jZSFcbiIpOworCWlm IChjc19mZW5jZSA8IHNmX2ZlbmNlKQorCSAgICBmcHJpbnRmKG91dCwgImNzIGZlbmNlIDwgc2Yg ZmVuY2UhXG4iKTsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyB2b2lkCitzdGF0ZV9iYXNl X291dCh1aW50MzJfdCAqZGF0YSwgdWludDMyX3QgaHdfb2Zmc2V0LCB1bnNpZ25lZCBpbnQgaW5k ZXgsCisJICAgICAgIGNoYXIgKm5hbWUpCit7CisgICAgaWYgKGRhdGFbaW5kZXhdICYgMSkgewor CWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIGluZGV4LCAiJXMgc3RhdGUgYmFzZSBhZGRyZXNz IDB4JTA4eFxuIiwKKwkJICBuYW1lLCBkYXRhW2luZGV4XSAmIH4xKTsKKyAgICB9IGVsc2Ugewor CWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIGluZGV4LCAiJXMgc3RhdGUgYmFzZSBub3QgdXBk YXRlZFxuIiwKKwkJICBuYW1lKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitzdGF0ZV9tYXhf b3V0KHVpbnQzMl90ICpkYXRhLCB1aW50MzJfdCBod19vZmZzZXQsIHVuc2lnbmVkIGludCBpbmRl eCwKKwkgICAgICBjaGFyICpuYW1lKQoreworICAgIGlmIChkYXRhW2luZGV4XSAmIDEpIHsKKwlp ZiAoZGF0YVtpbmRleF0gPT0gMSkgeworCSAgICBpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCBp bmRleCwKKwkJICAgICAgIiVzIHN0YXRlIHVwcGVyIGJvdW5kIGRpc2FibGVkXG4iLCBuYW1lKTsK Kwl9IGVsc2UgeworCSAgICBpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCBpbmRleCwgIiVzIHN0 YXRlIHVwcGVyIGJvdW5kIDB4JTA4eFxuIiwKKwkJICAgICAgbmFtZSwgZGF0YVtpbmRleF0gJiB+ MSk7CisJfQorICAgIH0gZWxzZSB7CisJaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgaW5kZXgs ICIlcyBzdGF0ZSB1cHBlciBib3VuZCBub3QgdXBkYXRlZFxuIiwKKwkJICBuYW1lKTsKKyAgICB9 Cit9CisKK3N0YXRpYyBpbnQKK2RlY29kZV8zZF85NjUodWludDMyX3QgKmRhdGEsIGludCBjb3Vu dCwgdWludDMyX3QgaHdfb2Zmc2V0LCB1aW50MzJfdCBkZXZpZCwgaW50ICpmYWlsdXJlcykKK3sK KyAgICB1aW50MzJfdCBvcGNvZGU7CisgICAgdW5zaWduZWQgaW50IGlkeCwgbGVuOworICAgIGlu dCBpLCBzYmFfbGVuOworICAgIGNoYXIgKmRlc2MxID0gTlVMTDsKKworICAgIHN0cnVjdCB7CisJ dWludDMyX3Qgb3Bjb2RlOworCWludCBtaW5fbGVuOworCWludCBtYXhfbGVuOworCWNoYXIgKm5h bWU7CisgICAgfSBvcGNvZGVzXzNkW10gPSB7CisJeyAweDYwMDAsIDMsIDMsICJVUkJfRkVOQ0Ui IH0sCisJeyAweDYwMDEsIDIsIDIsICJDU19VUkJfU1RBVEUiIH0sCisJeyAweDYwMDIsIDIsIDIs ICJDT05TVEFOVF9CVUZGRVIiIH0sCisJeyAweDYxMDEsIDYsIDYsICJTVEFURV9CQVNFX0FERFJF U1MiIH0sCisJeyAweDYxMDIsIDIsIDIgLCAiU1RBVEVfU0lQIiB9LAorCXsgMHg2MTA0LCAxLCAx LCAiM0RTVEFURV9QSVBFTElORV9TRUxFQ1QiIH0sCisJeyAweDY4MGIsIDEsIDEsICIzRFNUQVRF X1ZGX1NUQVRJU1RJQ1MiIH0sCisJeyAweDY5MDQsIDEsIDEsICIzRFNUQVRFX1BJUEVMSU5FX1NF TEVDVCIgfSwKKwl7IDB4NzgwMCwgNywgNywgIjNEU1RBVEVfUElQRUxJTkVEX1BPSU5URVJTIiB9 LAorCXsgMHg3ODAxLCA2LCA2LCAiM0RTVEFURV9CSU5ESU5HX1RBQkxFX1BPSU5URVJTIiB9LAor CXsgMHg3ODA4LCA1LCAyNTcsICIzRFNUQVRFX1ZFUlRFWF9CVUZGRVJTIiB9LAorCXsgMHg3ODA5 LCAzLCAyNTYsICIzRFNUQVRFX1ZFUlRFWF9FTEVNRU5UUyIgfSwKKwl7IDB4NzgwYSwgMywgMywg IjNEU1RBVEVfSU5ERVhfQlVGRkVSIiB9LAorCXsgMHg3ODBiLCAxLCAxLCAiM0RTVEFURV9WRl9T VEFUSVNUSUNTIiB9LAorCXsgMHg3OTAwLCA0LCA0LCAiM0RTVEFURV9EUkFXSU5HX1JFQ1RBTkdM RSIgfSwKKwl7IDB4NzkwMSwgNSwgNSwgIjNEU1RBVEVfQ09OU1RBTlRfQ09MT1IiIH0sCisJeyAw eDc5MDUsIDUsIDcsICIzRFNUQVRFX0RFUFRIX0JVRkZFUiIgfSwKKwl7IDB4NzkwNiwgMiwgMiwg IjNEU1RBVEVfUE9MWV9TVElQUExFX09GRlNFVCIgfSwKKwl7IDB4NzkwNywgMzMsIDMzLCAiM0RT VEFURV9QT0xZX1NUSVBQTEVfUEFUVEVSTiIgfSwKKwl7IDB4NzkwOCwgMywgMywgIjNEU1RBVEVf TElORV9TVElQUExFIiB9LAorCXsgMHg3OTA5LCAyLCAyLCAiM0RTVEFURV9HTE9CQUxfREVQVEhf T0ZGU0VUX0NMQU1QIiB9LAorCXsgMHg3OTA5LCAyLCAyLCAiM0RTVEFURV9DTEVBUl9QQVJBTVMi IH0sCisJeyAweDc5MGEsIDMsIDMsICIzRFNUQVRFX0FBX0xJTkVfUEFSQU1FVEVSUyIgfSwKKwl7 IDB4NzkwYiwgNCwgNCwgIjNEU1RBVEVfR1NfU1ZCX0lOREVYIiB9LAorCXsgMHg3OTBkLCAzLCAz LCAiM0RTVEFURV9NVUxUSVNBTVBMRSIgfSwKKwl7IDB4NzkxMCwgMiwgMiwgIjNEU1RBVEVfQ0xF QVJfUEFSQU1TIiB9LAorCXsgMHg3YjAwLCA2LCA2LCAiM0RQUklNSVRJVkUiIH0sCisJeyAweDc4 MDIsIDQsIDQsICIzRFNUQVRFX1NBTVBMRVJfU1RBVEVfUE9JTlRFUlMiIH0sCisJeyAweDc4MDUs IDMsIDMsICIzRFNUQVRFX1VSQiIgfSwKKwl7IDB4NzgwZCwgNCwgNCwgIjNEU1RBVEVfVklFV1BP UlRfU1RBVEVfUE9JTlRFUlMiIH0sCisJeyAweDc4MGUsIDQsIDQsICIzRFNUQVRFX0NDX1NUQVRF X1BPSU5URVJTIiB9LAorCXsgMHg3ODBmLCAyLCAyLCAiM0RTVEFURV9TQ0lTU09SX1NUQVRFX1BP SU5URVJTIiB9LAorCXsgMHg3ODEwLCA2LCA2LCAiM0RTVEFURV9WU19TVEFURSIgfSwKKwl7IDB4 NzgxMSwgNywgNywgIjNEU1RBVEVfR1NfU1RBVEUiIH0sCisJeyAweDc4MTIsIDQsIDQsICIzRFNU QVRFX0NMSVBfU1RBVEUiIH0sCisJeyAweDc4MTMsIDIwLCAyMCwgIjNEU1RBVEVfU0ZfU1RBVEUi IH0sCisJeyAweDc4MTQsIDksIDksICIzRFNUQVRFX1dNX1NUQVRFIiB9LAorCXsgMHg3ODE1LCA1 LCA1LCAiM0RTVEFURV9DT05TVEFOVF9WU19TVEFURSIgfSwKKwl7IDB4NzgxNiwgNSwgNSwgIjNE U1RBVEVfQ09OU1RBTlRfR1NfU1RBVEUiIH0sCisJeyAweDc4MTcsIDUsIDUsICIzRFNUQVRFX0NP TlNUQU5UX1BTX1NUQVRFIiB9LAorCXsgMHg3ODE4LCAyLCAyLCAiM0RTVEFURV9TQU1QTEVfTUFT SyIgfSwKKyAgIH0sICpvcGNvZGVfM2Q7CisKKyAgICBsZW4gPSAoZGF0YVswXSAmIDB4MDAwMGZm ZmYpICsgMjsKKworICAgIG9wY29kZSA9IChkYXRhWzBdICYgMHhmZmZmMDAwMCkgPj4gMTY7Cisg ICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIDB4NjAwMDoKKwlsZW4gPSAoZGF0YVswXSAm IDB4MDAwMDAwZmYpICsgMjsKKwlyZXR1cm4gaTk2NV9kZWNvZGVfdXJiX2ZlbmNlKGRhdGEsIGh3 X29mZnNldCwgbGVuLCBjb3VudCwgZmFpbHVyZXMpOworICAgIGNhc2UgMHg2MDAxOgorCWluc3Ry X291dChkYXRhLCBod19vZmZzZXQsIDAsICJDU19VUkJfU1RBVEVcbiIpOworCWluc3RyX291dChk YXRhLCBod19vZmZzZXQsIDEsICJlbnRyeV9zaXplOiAlZCBbJWQgYnl0ZXNdLCBuX2VudHJpZXM6 ICVkXG4iLAorCQkJKGRhdGFbMV0gPj4gNCkgJiAweDFmLAorCQkJKCgoZGF0YVsxXSA+PiA0KSAm IDB4MWYpICsgMSkgKiA2NCwKKwkJCWRhdGFbMV0gJiAweDcpOworCXJldHVybiBsZW47CisgICAg Y2FzZSAweDYwMDI6CisJbGVuID0gKGRhdGFbMF0gJiAweDAwMDAwMGZmKSArIDI7CisJaW5zdHJf b3V0KGRhdGEsIGh3X29mZnNldCwgMCwgIkNPTlNUQU5UX0JVRkZFUjogJXNcbiIsCisJCQkoZGF0 YVswXSA+PiA4KSAmIDEgPyAidmFsaWQiIDogImludmFsaWQiKTsKKwlpbnN0cl9vdXQoZGF0YSwg aHdfb2Zmc2V0LCAxLCAib2Zmc2V0OiAweCUwOHgsIGxlbmd0aDogJWQgYnl0ZXNcbiIsCisJCQlk YXRhWzFdICYgfjB4M2YsICgoZGF0YVsxXSAmIDB4M2YpICsgMSkgKiA2NCk7CisJcmV0dXJuIGxl bjsKKyAgICBjYXNlIDB4NjEwMToKKwlpID0gMDsKKwlpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0 LCAwLAorCQkgICJTVEFURV9CQVNFX0FERFJFU1NcbiIpOworCWkrKzsKKworCWlmIChJU19HRU42 KGRldmlkKSB8fCBJU19HRU43KGRldmlkKSkKKwkgICAgc2JhX2xlbiA9IDEwOworCWVsc2UgaWYg KElTX0dFTjUoZGV2aWQpKQorCSAgICBzYmFfbGVuID0gODsKKwllbHNlCisJICAgIHNiYV9sZW4g PSA2OworCWlmIChsZW4gIT0gc2JhX2xlbikKKwkgICAgZnByaW50ZihvdXQsICJCYWQgY291bnQg aW4gU1RBVEVfQkFTRV9BRERSRVNTXG4iKTsKKwlpZiAobGVuICE9IHNiYV9sZW4pCisJICAgIEJV RkZFUl9GQUlMKGNvdW50LCBsZW4sICJTVEFURV9CQVNFX0FERFJFU1MiKTsKKworCXN0YXRlX2Jh c2Vfb3V0KGRhdGEsIGh3X29mZnNldCwgaSsrLCAiZ2VuZXJhbCIpOworCXN0YXRlX2Jhc2Vfb3V0 KGRhdGEsIGh3X29mZnNldCwgaSsrLCAic3VyZmFjZSIpOworCWlmIChJU19HRU42KGRldmlkKSB8 fCBJU19HRU43KGRldmlkKSkKKwkgICAgc3RhdGVfYmFzZV9vdXQoZGF0YSwgaHdfb2Zmc2V0LCBp KyssICJkeW5hbWljIik7CisJc3RhdGVfYmFzZV9vdXQoZGF0YSwgaHdfb2Zmc2V0LCBpKyssICJp bmRpcmVjdCIpOworCWlmIChJU19HRU41KGRldmlkKSB8fCBJU19HRU42KGRldmlkKSB8fCBJU19H RU43KGRldmlkKSkKKwkgICAgc3RhdGVfYmFzZV9vdXQoZGF0YSwgaHdfb2Zmc2V0LCBpKyssICJp bnN0cnVjdGlvbiIpOworCisJc3RhdGVfbWF4X291dChkYXRhLCBod19vZmZzZXQsIGkrKywgImdl bmVyYWwiKTsKKwlpZiAoSVNfR0VONihkZXZpZCkgfHwgSVNfR0VONyhkZXZpZCkpCisJICAgIHN0 YXRlX21heF9vdXQoZGF0YSwgaHdfb2Zmc2V0LCBpKyssICJkeW5hbWljIik7CisJc3RhdGVfbWF4 X291dChkYXRhLCBod19vZmZzZXQsIGkrKywgImluZGlyZWN0Iik7CisJaWYgKElTX0dFTjUoZGV2 aWQpIHx8IElTX0dFTjYoZGV2aWQpIHx8IElTX0dFTjcoZGV2aWQpKQorCSAgICBzdGF0ZV9tYXhf b3V0KGRhdGEsIGh3X29mZnNldCwgaSsrLCAiaW5zdHJ1Y3Rpb24iKTsKKworCXJldHVybiBsZW47 CisgICAgY2FzZSAweDc4MDA6CisJaWYgKGxlbiAhPSA3KQorCSAgICBmcHJpbnRmKG91dCwgIkJh ZCBjb3VudCBpbiAzRFNUQVRFX1BJUEVMSU5FRF9QT0lOVEVSU1xuIik7CisJaWYgKGNvdW50IDwg NykKKwkgICAgQlVGRkVSX0ZBSUwoY291bnQsIGxlbiwgIjNEU1RBVEVfUElQRUxJTkVEX1BPSU5U RVJTIik7CisKKwlpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCAwLAorCQkgICIzRFNUQVRFX1BJ UEVMSU5FRF9QT0lOVEVSU1xuIik7CisJaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMSwgIlZT IHN0YXRlXG4iKTsKKwlpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCAyLCAiR1Mgc3RhdGVcbiIp OworCWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIDMsICJDbGlwIHN0YXRlXG4iKTsKKwlpbnN0 cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCA0LCAiU0Ygc3RhdGVcbiIpOworCWluc3RyX291dChkYXRh LCBod19vZmZzZXQsIDUsICJXTSBzdGF0ZVxuIik7CisJaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNl dCwgNiwgIkNDIHN0YXRlXG4iKTsKKwlyZXR1cm4gbGVuOworICAgIGNhc2UgMHg3ODAxOgorCWxl biA9IChkYXRhWzBdICYgMHgwMDAwMDBmZikgKyAyOworCWlmIChsZW4gIT0gNiAmJiBsZW4gIT0g NCkKKwkgICAgZnByaW50ZihvdXQsICJCYWQgY291bnQgaW4gM0RTVEFURV9CSU5ESU5HX1RBQkxF X1BPSU5URVJTXG4iKTsKKwlpZiAobGVuID09IDYpIHsKKwkgICAgaWYgKGNvdW50IDwgNikKKwkJ QlVGRkVSX0ZBSUwoY291bnQsIGxlbiwgIjNEU1RBVEVfQklORElOR19UQUJMRV9QT0lOVEVSUyIp OworCSAgICBpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCAwLAorCQkgICAgICAiM0RTVEFURV9C SU5ESU5HX1RBQkxFX1BPSU5URVJTXG4iKTsKKwkgICAgaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNl dCwgMSwgIlZTIGJpbmRpbmcgdGFibGVcbiIpOworCSAgICBpbnN0cl9vdXQoZGF0YSwgaHdfb2Zm c2V0LCAyLCAiR1MgYmluZGluZyB0YWJsZVxuIik7CisJICAgIGluc3RyX291dChkYXRhLCBod19v ZmZzZXQsIDMsICJDbGlwIGJpbmRpbmcgdGFibGVcbiIpOworCSAgICBpbnN0cl9vdXQoZGF0YSwg aHdfb2Zmc2V0LCA0LCAiU0YgYmluZGluZyB0YWJsZVxuIik7CisJICAgIGluc3RyX291dChkYXRh LCBod19vZmZzZXQsIDUsICJXTSBiaW5kaW5nIHRhYmxlXG4iKTsKKwl9IGVsc2UgeworCSAgICBp ZiAoY291bnQgPCA0KQorCQlCVUZGRVJfRkFJTChjb3VudCwgbGVuLCAiM0RTVEFURV9CSU5ESU5H X1RBQkxFX1BPSU5URVJTIik7CisKKwkgICAgaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMCwK KwkJICAgICAgIjNEU1RBVEVfQklORElOR19UQUJMRV9QT0lOVEVSUzogVlMgbW9kICVkLCAiCisJ CSAgICAgICJHUyBtb2QgJWQsIFBTIG1vZCAlZFxuIiwKKwkJICAgICAgKGRhdGFbMF0gJiAoMSA8 PCA4KSkgIT0gMCwKKwkJICAgICAgKGRhdGFbMF0gJiAoMSA8PCA5KSkgIT0gMCwKKwkJICAgICAg KGRhdGFbMF0gJiAoMSA8PCAxMikpICE9IDApOworCSAgICBpbnN0cl9vdXQoZGF0YSwgaHdfb2Zm c2V0LCAxLCAiVlMgYmluZGluZyB0YWJsZVxuIik7CisJICAgIGluc3RyX291dChkYXRhLCBod19v ZmZzZXQsIDIsICJHUyBiaW5kaW5nIHRhYmxlXG4iKTsKKwkgICAgaW5zdHJfb3V0KGRhdGEsIGh3 X29mZnNldCwgMywgIldNIGJpbmRpbmcgdGFibGVcbiIpOworCX0KKworCXJldHVybiBsZW47Cisg ICAgY2FzZSAweDc4MDI6CisgICAgICAgIGxlbiA9IChkYXRhWzBdICYgMHhmZikgKyAyOworICAg ICAgICBpZiAobGVuICE9IDQpCisgICAgICAgICAgICBmcHJpbnRmKG91dCwgIkJhZCBjb3VudCBp biAzRFNUQVRFX1NBTVBMRVJfU1RBVEVfUE9JTlRFUlNcbiIpOworCWlmIChjb3VudCA8IDQpCisJ ICAgIEJVRkZFUl9GQUlMKGNvdW50LCBsZW4sICIzRFNUQVRFX1NBTVBMRVJfU1RBVEVfUE9JTlRF UlMiKTsKKyAgICAgICAgaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMCwgIjNEU1RBVEVfU0FN UExFUl9TVEFURV9QT0lOVEVSUzogVlMgbW9kICVkLCAiCisgICAgICAgICAgICAgICAgICAiR1Mg bW9kICVkLCBQUyBtb2QgJWRcbiIsCisgICAgICAgICAgICAgICAgICAoZGF0YVswXSAmICgxIDw8 IDgpKSAhPSAwLAorICAgICAgICAgICAgICAgICAgKGRhdGFbMF0gJiAoMSA8PCA5KSkgIT0gMCwK KyAgICAgICAgICAgICAgICAgIChkYXRhWzBdICYgKDEgPDwgMTIpKSAhPSAwKTsKKyAgICAgICAg aW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMSwgIlZTIHNhbXBsZXIgc3RhdGVcbiIpOworICAg ICAgICBpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCAyLCAiR1Mgc2FtcGxlciBzdGF0ZVxuIik7 CisgICAgICAgIGluc3RyX291dChkYXRhLCBod19vZmZzZXQsIDMsICJXTSBzYW1wbGVyIHN0YXRl XG4iKTsKKyAgICAgICAgcmV0dXJuIGxlbjsKKyAgICBjYXNlIDB4NzgwNToKKyAgICAgICAgbGVu ID0gKGRhdGFbMF0gJiAweGZmKSArIDI7CisgICAgICAgIGlmIChsZW4gIT0gMykKKyAgICAgICAg ICAgIGZwcmludGYob3V0LCAiQmFkIGNvdW50IGluIDNEU1RBVEVfVVJCXG4iKTsKKwlpZiAoY291 bnQgPCAzKQorCSAgICBCVUZGRVJfRkFJTChjb3VudCwgbGVuLCAiM0RTVEFURV9VUkIiKTsKKyAg ICAgICAgaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMCwgIjNEU1RBVEVfVVJCXG4iKTsKKyAg ICAgICAgaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMSwgIlZTIGVudHJpZXMgJWQsIGFsbG9j IHNpemUgJWQgKDEwMjRiaXQgcm93KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFb MV0gJiAweGZmZmYsICgoZGF0YVsxXSA+PiAxNikgJiAweDA3ZikgKyAxKTsKKyAgICAgICAgaW5z dHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMiwgIkdTIGVudHJpZXMgJWQsIGFsbG9jIHNpemUgJWQg KDEwMjRiaXQgcm93KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIChkYXRhWzJdID4+IDgp ICYgMHgzZmYsIChkYXRhWzJdICYgNykgKyAxKTsKKyAgICAgICAgcmV0dXJuIGxlbjsKKworICAg IGNhc2UgMHg3ODA4OgorCWxlbiA9IChkYXRhWzBdICYgMHhmZikgKyAyOworCWlmICgobGVuIC0g MSkgJSA0ICE9IDApCisJICAgIGZwcmludGYob3V0LCAiQmFkIGNvdW50IGluIDNEU1RBVEVfVkVS VEVYX0JVRkZFUlNcbiIpOworCWlmIChjb3VudCA8IGxlbikKKwkgICAgQlVGRkVSX0ZBSUwoY291 bnQsIGxlbiwgIjNEU1RBVEVfVkVSVEVYX0JVRkZFUlMiKTsKKwlpbnN0cl9vdXQoZGF0YSwgaHdf b2Zmc2V0LCAwLCAiM0RTVEFURV9WRVJURVhfQlVGRkVSU1xuIik7CisKKwlmb3IgKGkgPSAxOyBp IDwgbGVuOykgeworCSAgICBpbnQgaWR4LCBhY2Nlc3M7CisJICAgIGlmIChJU19HRU42KGRldmlk KSkgeworICAgICAgICAgICAgICAgIGlkeCA9IDI2OworICAgICAgICAgICAgICAgIGFjY2VzcyA9 IDIwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZHggPSAyNzsKKyAg ICAgICAgICAgICAgICBhY2Nlc3MgPSAyNjsKKyAgICAgICAgICAgIH0KKwkgICAgaW5zdHJfb3V0 KGRhdGEsIGh3X29mZnNldCwgaSwgImJ1ZmZlciAlZDogJXMsIHBpdGNoICVkYlxuIiwKKwkJICAg ICAgZGF0YVtpXSA+PiBpZHgsCisJCSAgICAgIGRhdGFbaV0gJiAoMSA8PCBhY2Nlc3MpID8gInJh bmRvbSIgOiAic2VxdWVudGlhbCIsCisJCSAgICAgIGRhdGFbaV0gJiAweDA3ZmYpOworCSAgICBp Kys7CisJICAgIGluc3RyX291dChkYXRhLCBod19vZmZzZXQsIGkrKywgImJ1ZmZlciBhZGRyZXNz XG4iKTsKKwkgICAgaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgaSsrLCAibWF4IGluZGV4XG4i KTsKKwkgICAgaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgaSsrLCAibWJ6XG4iKTsKKwl9CisJ cmV0dXJuIGxlbjsKKworICAgIGNhc2UgMHg3ODA5OgorCWxlbiA9IChkYXRhWzBdICYgMHhmZikg KyAyOworCWlmICgobGVuICsgMSkgJSAyICE9IDApCisJICAgIGZwcmludGYob3V0LCAiQmFkIGNv dW50IGluIDNEU1RBVEVfVkVSVEVYX0VMRU1FTlRTXG4iKTsKKwlpZiAoY291bnQgPCBsZW4pCisJ ICAgIEJVRkZFUl9GQUlMKGNvdW50LCBsZW4sICIzRFNUQVRFX1ZFUlRFWF9FTEVNRU5UUyIpOwor CWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIDAsICIzRFNUQVRFX1ZFUlRFWF9FTEVNRU5UU1xu Iik7CisKKwlmb3IgKGkgPSAxOyBpIDwgbGVuOykgeworCSAgICBpbnN0cl9vdXQoZGF0YSwgaHdf b2Zmc2V0LCBpLCAiYnVmZmVyICVkOiAlc3ZhbGlkLCB0eXBlIDB4JTA0eCwgIgorCQkgICAgICAi c3JjIG9mZnNldCAweCUwNHggYnl0ZXNcbiIsCisJCSAgICAgIGRhdGFbaV0gPj4gKElTX0dFTjYo ZGV2aWQpID8gMjYgOiAyNyksCisJCSAgICAgIGRhdGFbaV0gJiAoMSA8PCAoSVNfR0VONihkZXZp ZCkgPyAyNSA6IDI2KSkgPyAiIiA6ICJpbiIsCisJCSAgICAgIChkYXRhW2ldID4+IDE2KSAmIDB4 MWZmLAorCQkgICAgICBkYXRhW2ldICYgMHgwN2ZmKTsKKwkgICAgaSsrOworCSAgICBpbnN0cl9v dXQoZGF0YSwgaHdfb2Zmc2V0LCBpLCAiKCVzLCAlcywgJXMsICVzKSwgIgorCQkgICAgICAiZHN0 IG9mZnNldCAweCUwMnggYnl0ZXNcbiIsCisJCSAgICAgIGdldF85NjVfZWxlbWVudF9jb21wb25l bnQoZGF0YVtpXSwgMCksCisJCSAgICAgIGdldF85NjVfZWxlbWVudF9jb21wb25lbnQoZGF0YVtp XSwgMSksCisJCSAgICAgIGdldF85NjVfZWxlbWVudF9jb21wb25lbnQoZGF0YVtpXSwgMiksCisJ CSAgICAgIGdldF85NjVfZWxlbWVudF9jb21wb25lbnQoZGF0YVtpXSwgMyksCisJCSAgICAgIChk YXRhW2ldICYgMHhmZikgKiA0KTsKKwkgICAgaSsrOworCX0KKwlyZXR1cm4gbGVuOworCisgICAg Y2FzZSAweDc4MGQ6CisJbGVuID0gKGRhdGFbMF0gJiAweGZmKSArIDI7CisJaWYgKGxlbiAhPSA0 KQorCSAgICBmcHJpbnRmKG91dCwgIkJhZCBjb3VudCBpbiAzRFNUQVRFX1ZJRVdQT1JUX1NUQVRF X1BPSU5URVJTXG4iKTsKKwlpZiAoY291bnQgPCBsZW4pCisJICAgIEJVRkZFUl9GQUlMKGNvdW50 LCBsZW4sICIzRFNUQVRFX1ZJRVdQT1JUX1NUQVRFX1BPSU5URVJTIik7CisJaW5zdHJfb3V0KGRh dGEsIGh3X29mZnNldCwgMCwgIjNEU1RBVEVfVklFV1BPUlRfU1RBVEVfUE9JTlRFUlNcbiIpOwor CWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIDEsICJjbGlwXG4iKTsKKwlpbnN0cl9vdXQoZGF0 YSwgaHdfb2Zmc2V0LCAyLCAic2ZcbiIpOworCWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIDMs ICJjY1xuIik7CisJcmV0dXJuIGxlbjsKKworICAgIGNhc2UgMHg3ODBhOgorCWxlbiA9IChkYXRh WzBdICYgMHhmZikgKyAyOworCWlmIChsZW4gIT0gMykKKwkgICAgZnByaW50ZihvdXQsICJCYWQg Y291bnQgaW4gM0RTVEFURV9JTkRFWF9CVUZGRVJcbiIpOworCWlmIChjb3VudCA8IGxlbikKKwkg ICAgQlVGRkVSX0ZBSUwoY291bnQsIGxlbiwgIjNEU1RBVEVfSU5ERVhfQlVGRkVSIik7CisJaW5z dHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMCwgIjNEU1RBVEVfSU5ERVhfQlVGRkVSXG4iKTsKKwlp bnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCAxLCAiYmVnaW5uaW5nIGJ1ZmZlciBhZGRyZXNzXG4i KTsKKwlpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCAyLCAiZW5kaW5nIGJ1ZmZlciBhZGRyZXNz XG4iKTsKKwlyZXR1cm4gbGVuOworCisgICAgY2FzZSAweDc4MGU6CisgICAgICAgIGxlbiA9IChk YXRhWzBdICYgMHhmZikgKyAyOworICAgICAgICBpZiAobGVuICE9IDQpCisgICAgICAgICAgICBm cHJpbnRmKG91dCwgIkJhZCBjb3VudCBpbiAzRFNUQVRFX0NDX1NUQVRFX1BPSU5URVJTXG4iKTsK KwlpZiAoY291bnQgPCA0KQorCSAgICBCVUZGRVJfRkFJTChjb3VudCwgbGVuLCAiM0RTVEFURV9D Q19TVEFURV9QT0lOVEVSUyIpOworICAgICAgICBpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCAw LCAiM0RTVEFURV9DQ19TVEFURV9QT0lOVEVSU1xuIik7CisgICAgICAgIGluc3RyX291dChkYXRh LCBod19vZmZzZXQsIDEsICJibGVuZCBjaGFuZ2UgJWRcbiIsIGRhdGFbMV0gJiAxKTsKKyAgICAg ICAgaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMiwgImRlcHRoIHN0ZW5jaWwgY2hhbmdlICVk XG4iLCBkYXRhWzJdICYgMSk7CisgICAgICAgIGluc3RyX291dChkYXRhLCBod19vZmZzZXQsIDMs ICJjYyBjaGFuZ2UgJWRcbiIsIGRhdGFbM10gJiAxKTsKKyAgICAgICAgcmV0dXJuIGxlbjsKKwor ICAgIGNhc2UgMHg3ODBmOgorICAgICAgICBsZW4gPSAoZGF0YVswXSAmIDB4ZmYpICsgMjsKKyAg ICAgICAgaWYgKGxlbiAhPSAyKQorICAgICAgICAgICAgZnByaW50ZihvdXQsICJCYWQgY291bnQg aW4gM0RTVEFURV9TQ0lTU09SX1BPSU5URVJTXG4iKTsKKwlpZiAoY291bnQgPCAyKQorCSAgICBC VUZGRVJfRkFJTChjb3VudCwgbGVuLCAiM0RTVEFURV9TQ0lTU09SX1BPSU5URVJTIik7CisgICAg ICAgIGluc3RyX291dChkYXRhLCBod19vZmZzZXQsIDAsICIzRFNUQVRFX1NDSVNTT1JfUE9JTlRF UlNcbiIpOworICAgICAgICBpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCAxLCAic2Npc3NvciBy ZWN0IG9mZnNldFxuIik7CisgICAgICAgIHJldHVybiBsZW47CisKKyAgICBjYXNlIDB4NzgxMDoK KyAgICAgICAgbGVuID0gKGRhdGFbMF0gJiAweGZmKSArIDI7CisgICAgICAgIGlmIChsZW4gIT0g NikKKyAgICAgICAgICAgIGZwcmludGYob3V0LCAiQmFkIGNvdW50IGluIDNEU1RBVEVfVlNcbiIp OworCWlmIChjb3VudCA8IDYpCisJICAgIEJVRkZFUl9GQUlMKGNvdW50LCBsZW4sICIzRFNUQVRF X1ZTIik7CisgICAgICAgIGluc3RyX291dChkYXRhLCBod19vZmZzZXQsIDAsICIzRFNUQVRFX1ZT XG4iKTsKKyAgICAgICAgaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMSwgImtlcm5lbCBwb2lu dGVyXG4iKTsKKyAgICAgICAgaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMiwgIlNQRj0lZCwg Vk1FPSVkLCBTYW1wbGVyIENvdW50ICVkLCAiCisgICAgICAgICAgICAgICAgICAiQmluZGluZyB0 YWJsZSBjb3VudCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgIChkYXRhWzJdID4+IDMxKSAmIDEs CisgICAgICAgICAgICAgICAgICAoZGF0YVsyXSA+PiAzMCkgJiAxLAorICAgICAgICAgICAgICAg ICAgKGRhdGFbMl0gPj4gMjcpICYgNywKKyAgICAgICAgICAgICAgICAgIChkYXRhWzJdID4+IDE4 KSAmIDB4ZmYpOworICAgICAgICBpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCAzLCAic2NyYXRj aCBvZmZzZXRcbiIpOworICAgICAgICBpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCA0LCAiRGlz cGF0Y2ggR1JGIHN0YXJ0ICVkLCBWVUUgcmVhZCBsZW5ndGggJWQsICIKKyAgICAgICAgICAgICAg ICAgICJWVUUgcmVhZCBvZmZzZXQgJWRcbiIsCisgICAgICAgICAgICAgICAgICAoZGF0YVs0XSA+ PiAyMCkgJiAweDFmLAorICAgICAgICAgICAgICAgICAgKGRhdGFbNF0gPj4gMTEpICYgMHgzZiwK KyAgICAgICAgICAgICAgICAgIChkYXRhWzRdID4+IDQpICYgMHgzZik7CisgICAgICAgIGluc3Ry X291dChkYXRhLCBod19vZmZzZXQsIDUsICJNYXggVGhyZWFkcyAlZCwgVmVydGV4IENhY2hlICVz YWJsZSwgIgorICAgICAgICAgICAgICAgICAgIlZTIGZ1bmMgJXNhYmxlXG4iLAorICAgICAgICAg ICAgICAgICAgKChkYXRhWzVdID4+IDI1KSAmIDB4N2YpICsgMSwKKyAgICAgICAgICAgICAgICAg IChkYXRhWzVdICYgKDEgPDwgMSkpICE9IDAgPyAiZGlzIiA6ICJlbiIsCisgICAgICAgICAgICAg ICAgICAoZGF0YVs1XSAmIDEpICE9IDAgPyAiZW4iIDogImRpcyIpOworICAgICAgICByZXR1cm4g bGVuOworCisgICAgY2FzZSAweDc4MTE6CisgICAgICAgIGxlbiA9IChkYXRhWzBdICYgMHhmZikg KyAyOworICAgICAgICBpZiAobGVuICE9IDcpCisgICAgICAgICAgICBmcHJpbnRmKG91dCwgIkJh ZCBjb3VudCBpbiAzRFNUQVRFX0dTXG4iKTsKKwlpZiAoY291bnQgPCA3KQorCSAgICBCVUZGRVJf RkFJTChjb3VudCwgbGVuLCAiM0RTVEFURV9HUyIpOworICAgICAgICBpbnN0cl9vdXQoZGF0YSwg aHdfb2Zmc2V0LCAwLCAiM0RTVEFURV9HU1xuIik7CisgICAgICAgIGluc3RyX291dChkYXRhLCBo d19vZmZzZXQsIDEsICJrZXJuZWwgcG9pbnRlclxuIik7CisgICAgICAgIGluc3RyX291dChkYXRh LCBod19vZmZzZXQsIDIsICJTUEY9JWQsIFZNRT0lZCwgU2FtcGxlciBDb3VudCAlZCwgIgorICAg ICAgICAgICAgICAgICAgIkJpbmRpbmcgdGFibGUgY291bnQgJWRcbiIsCisgICAgICAgICAgICAg ICAgICAoZGF0YVsyXSA+PiAzMSkgJiAxLAorICAgICAgICAgICAgICAgICAgKGRhdGFbMl0gPj4g MzApICYgMSwKKyAgICAgICAgICAgICAgICAgIChkYXRhWzJdID4+IDI3KSAmIDcsCisgICAgICAg ICAgICAgICAgICAoZGF0YVsyXSA+PiAxOCkgJiAweGZmKTsKKyAgICAgICAgaW5zdHJfb3V0KGRh dGEsIGh3X29mZnNldCwgMywgInNjcmF0Y2ggb2Zmc2V0XG4iKTsKKyAgICAgICAgaW5zdHJfb3V0 KGRhdGEsIGh3X29mZnNldCwgNCwgIkRpc3BhdGNoIEdSRiBzdGFydCAlZCwgVlVFIHJlYWQgbGVu Z3RoICVkLCAiCisgICAgICAgICAgICAgICAgICAiVlVFIHJlYWQgb2Zmc2V0ICVkXG4iLAorICAg ICAgICAgICAgICAgICAgKGRhdGFbNF0gJiAweGYpLAorICAgICAgICAgICAgICAgICAgKGRhdGFb NF0gPj4gMTEpICYgMHgzZiwKKyAgICAgICAgICAgICAgICAgIChkYXRhWzRdID4+IDQpICYgMHgz Zik7CisgICAgICAgIGluc3RyX291dChkYXRhLCBod19vZmZzZXQsIDUsICJNYXggVGhyZWFkcyAl ZCwgUmVuZGVyaW5nICVzYWJsZVxuIiwKKyAgICAgICAgICAgICAgICAgICgoZGF0YVs1XSA+PiAy NSkgJiAweDdmKSArIDEsCisgICAgICAgICAgICAgICAgICAoZGF0YVs1XSAmICgxIDw8IDgpKSAh PSAwID8gImVuIiA6ICJkaXMiKTsKKyAgICAgICAgaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwg NiwgIlJlb3JkZXIgJXNhYmxlLCBEaXNjYXJkIEFkamFjZW55ICVzYWJsZSwgIgorICAgICAgICAg ICAgICAgICAgIkdTICVzYWJsZVxuIiwKKyAgICAgICAgICAgICAgICAgIChkYXRhWzZdICYgKDEg PDwgMzApKSAhPSAwID8gImVuIiA6ICJkaXMiLAorICAgICAgICAgICAgICAgICAgKGRhdGFbNl0g JiAoMSA8PCAyOSkpICE9IDAgPyAiZW4iIDogImRpcyIsCisgICAgICAgICAgICAgICAgICAoZGF0 YVs2XSAmICgxIDw8IDE1KSkgIT0gMCA/ICJlbiIgOiAiZGlzIik7CisgICAgICAgIHJldHVybiBs ZW47CisKKyAgICBjYXNlIDB4NzgxMjoKKyAgICAgICAgbGVuID0gKGRhdGFbMF0gJiAweGZmKSAr IDI7CisgICAgICAgIGlmIChsZW4gIT0gNCkKKyAgICAgICAgICAgIGZwcmludGYob3V0LCAiQmFk IGNvdW50IGluIDNEU1RBVEVfQ0xJUFxuIik7CisJaWYgKGNvdW50IDwgNCkKKwkgICAgQlVGRkVS X0ZBSUwoY291bnQsIGxlbiwgIjNEU1RBVEVfQ0xJUCIpOworICAgICAgICBpbnN0cl9vdXQoZGF0 YSwgaHdfb2Zmc2V0LCAwLCAiM0RTVEFURV9DTElQXG4iKTsKKyAgICAgICAgaW5zdHJfb3V0KGRh dGEsIGh3X29mZnNldCwgMSwgIlVzZXJDbGlwIGRpc3RhbmNlIGN1bGwgdGVzdCBtYXNrIDB4JXhc biIsCisgICAgICAgICAgICAgICAgICBkYXRhWzFdICYgMHhmZik7CisgICAgICAgIGluc3RyX291 dChkYXRhLCBod19vZmZzZXQsIDIsICJDbGlwICVzYWJsZSwgQVBJIG1vZGUgJXMsIFZpZXdwb3J0 IFhZIHRlc3QgJXNhYmxlLCAiCisgICAgICAgICAgICAgICAgICAiVmlld3BvcnQgWiB0ZXN0ICVz YWJsZSwgR3VhcmRiYW5kIHRlc3QgJXNhYmxlLCBDbGlwIG1vZGUgJWQsICIKKyAgICAgICAgICAg ICAgICAgICJQZXJzcGVjdGl2ZSBEaXZpZGUgJXNhYmxlLCBOb24tUGVyc3BlY3RpdmUgQmFyeWNl bnRyaWMgJXNhYmxlLCAiCisgICAgICAgICAgICAgICAgICAiVHJpIFByb3Zva2luZyAlZCwgTGlu ZSBQcm92b2tpbmcgJWQsIFRyaWZhbiBQcm92b2tpbmcgJWRcbiIsCisgICAgICAgICAgICAgICAg ICAoZGF0YVsyXSAmICgxIDw8IDMxKSkgIT0gMCA/ICJlbiIgOiAiZGlzIiwKKyAgICAgICAgICAg ICAgICAgIChkYXRhWzJdICYgKDEgPDwgMzApKSAhPSAwID8gIkQzRCIgOiAiT0dMIiwKKyAgICAg ICAgICAgICAgICAgIChkYXRhWzJdICYgKDEgPDwgMjgpKSAhPSAwID8gImVuIiA6ICJkaXMiLAor ICAgICAgICAgICAgICAgICAgKGRhdGFbMl0gJiAoMSA8PCAyNykpICE9IDAgPyAiZW4iIDogImRp cyIsCisgICAgICAgICAgICAgICAgICAoZGF0YVsyXSAmICgxIDw8IDI2KSkgIT0gMCA/ICJlbiIg OiAiZGlzIiwKKyAgICAgICAgICAgICAgICAgIChkYXRhWzJdID4+IDEzKSAmIDcsCisgICAgICAg ICAgICAgICAgICAoZGF0YVsyXSAmICgxIDw8IDkpKSAhPSAwID8gImRpcyIgOiAiZW4iLAorICAg ICAgICAgICAgICAgICAgKGRhdGFbMl0gJiAoMSA8PCA4KSkgIT0gMCA/ICJlbiIgOiAiZGlzIiwK KyAgICAgICAgICAgICAgICAgIChkYXRhWzJdID4+IDQpICYgMywKKyAgICAgICAgICAgICAgICAg IChkYXRhWzJdID4+IDIpICYgMywKKyAgICAgICAgICAgICAgICAgIChkYXRhWzJdICYgMykpOwor ICAgICAgICBpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCAzLCAiTWluIFBvaW50V2lkdGggJWQs IE1heCBQb2ludFdpZHRoICVkLCAiCisgICAgICAgICAgICAgICAgICAiRm9yY2UgWmVybyBSVEFJ bmRleCAlc2FibGUsIE1heCBWUEluZGV4ICVkXG4iLAorICAgICAgICAgICAgICAgICAgKGRhdGFb M10gPj4gMTcpICYgMHg3ZmYsCisgICAgICAgICAgICAgICAgICAoZGF0YVszXSA+PiA2KSAmIDB4 N2ZmLAorICAgICAgICAgICAgICAgICAgKGRhdGFbM10gJiAoMSA8PCA1KSkgIT0gMCA/ICJlbiIg OiAiZGlzIiwKKyAgICAgICAgICAgICAgICAgIChkYXRhWzNdICYgMHhmKSk7CisgICAgICAgIHJl dHVybiBsZW47CisKKyAgICBjYXNlIDB4NzgxMzoKKyAgICAgICAgbGVuID0gKGRhdGFbMF0gJiAw eGZmKSArIDI7CisgICAgICAgIGlmIChsZW4gIT0gMjApCisgICAgICAgICAgICBmcHJpbnRmKG91 dCwgIkJhZCBjb3VudCBpbiAzRFNUQVRFX1NGXG4iKTsKKwlpZiAoY291bnQgPCAyMCkKKwkgICAg QlVGRkVSX0ZBSUwoY291bnQsIGxlbiwgIjNEU1RBVEVfU0YiKTsKKyAgICAgICAgaW5zdHJfb3V0 KGRhdGEsIGh3X29mZnNldCwgMCwgIjNEU1RBVEVfU0ZcbiIpOworICAgICAgICBpbnN0cl9vdXQo ZGF0YSwgaHdfb2Zmc2V0LCAxLCAiQXR0cmliIE91dCAlZCwgQXR0cmliIFN3aXp6bGUgJXNhYmxl LCBWVUUgcmVhZCBsZW5ndGggJWQsICIKKyAgICAgICAgICAgICAgICAgICJWVUUgcmVhZCBvZmZz ZXQgJWRcbiIsCisgICAgICAgICAgICAgICAgICAoZGF0YVsxXSA+PiAyMikgJiAweDNmLAorICAg ICAgICAgICAgICAgICAgKGRhdGFbMV0gJiAoMSA8PCAyMSkpICE9IDAgPyAiZW4iIDogImRpcyIs CisgICAgICAgICAgICAgICAgICAoZGF0YVsxXSA+PiAxMSkgJiAweDFmLAorICAgICAgICAgICAg ICAgICAgKGRhdGFbMV0gPj4gNCkgJiAweDNmKTsKKyAgICAgICAgaW5zdHJfb3V0KGRhdGEsIGh3 X29mZnNldCwgMiwgIkxlZ2FjeSBHbG9iYWwgRGVwdGhCaWFzICVzYWJsZSwgRnJvbnRGYWNlIGZp bGwgJWQsIEJGIGZpbGwgJWQsICIKKyAgICAgICAgICAgICAgICAgICJWUCB0cmFuc2Zvcm0gJXNh YmxlLCBGcm9udFdpbmRpbmdfJXNcbiIsCisgICAgICAgICAgICAgICAgICAoZGF0YVsyXSAmICgx IDw8IDExKSkgIT0gMCA/ICJlbiIgOiAiZGlzIiwKKyAgICAgICAgICAgICAgICAgIChkYXRhWzJd ID4+IDUpICYgMywKKyAgICAgICAgICAgICAgICAgIChkYXRhWzJdID4+IDMpICYgMywKKyAgICAg ICAgICAgICAgICAgIChkYXRhWzJdICYgKDEgPDwgMSkpICE9IDAgPyAiZW4iIDogImRpcyIsCisg ICAgICAgICAgICAgICAgICAoZGF0YVsyXSAmIDEpICE9IDAgPyAiQ0NXIiA6ICJDVyIpOworICAg ICAgICBpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCAzLCAiQUEgJXNhYmxlLCBDdWxsTW9kZSAl ZCwgU2Npc3NvciAlc2FibGUsIE11bHRpc2FtcGxlIG0gb2RlICVkXG4iLAorICAgICAgICAgICAg ICAgICAgKGRhdGFbM10gJiAoMSA8PCAzMSkpICE9IDAgPyAiZW4iIDogImRpcyIsCisgICAgICAg ICAgICAgICAgICAoZGF0YVszXSA+PiAyOSkgJiAzLAorICAgICAgICAgICAgICAgICAgKGRhdGFb M10gJiAoMSA8PCAxMSkpICE9IDAgPyAiZW4iIDogImRpcyIsCisgICAgICAgICAgICAgICAgICAo ZGF0YVszXSA+PiA4KSAmIDMpOworICAgICAgICBpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCA0 LCAiTGFzdCBQaXhlbCAlc2FibGUsIFN1YlBpeGVsIFByZWNpc2lvbiAlZCwgVXNlIFBpeGVsV2lk dGggJWRcbiIsCisgICAgICAgICAgICAgICAgICAoZGF0YVs0XSAmICgxIDw8IDMxKSkgIT0gMCA/ ICJlbiIgOiAiZGlzIiwKKyAgICAgICAgICAgICAgICAgIChkYXRhWzRdICYgKDEgPDwgMTIpKSAh PSAwID8gNCA6IDgsCisgICAgICAgICAgICAgICAgICAoZGF0YVs0XSAmICgxIDw8IDExKSkgIT0g MCk7CisgICAgICAgIGluc3RyX291dChkYXRhLCBod19vZmZzZXQsIDUsICJHbG9iYWwgRGVwdGgg T2Zmc2V0IENvbnN0YW50ICVmXG4iLCBkYXRhWzVdKTsKKyAgICAgICAgaW5zdHJfb3V0KGRhdGEs IGh3X29mZnNldCwgNiwgIkdsb2JhbCBEZXB0aCBPZmZzZXQgU2NhbGUgJWZcbiIsIGRhdGFbNl0p OworICAgICAgICBpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCA3LCAiR2xvYmFsIERlcHRoIE9m ZnNldCBDbGFtcCAlZlxuIiwgZGF0YVs3XSk7CisgICAgICAgIGludCBpLCBqOworICAgICAgICBm b3IgKGkgPSAwLCBqID0gMDsgaSA8IDg7IGkrKywgais9MikKKyAgICAgICAgICAgIGluc3RyX291 dChkYXRhLCBod19vZmZzZXQsIGkrOCwgIkF0dHJpYiAlZCAoT3ZlcnJpZGUgJXMlcyVzJXMsIENv bnN0IFNvdXJjZSAlZCwgU3dpenpsZSBTZWxlY3QgJWQsICIKKyAgICAgICAgICAgICAgICAgICJT b3VyY2UgJWQpOyBBdHRyaWIgJWQgKE92ZXJyaWRlICVzJXMlcyVzLCBDb25zdCBTb3VyY2UgJWQs IFN3aXp6bGUgU2VsZWN0ICVkLCBTb3VyY2UgJWQpXG4iLAorICAgICAgICAgICAgICAgICAgaisx LAorICAgICAgICAgICAgICAgICAgKGRhdGFbOCtpXSAmICgxIDw8IDMxKSkgIT0gMCA/ICJXIjoi IiwKKyAgICAgICAgICAgICAgICAgIChkYXRhWzgraV0gJiAoMSA8PCAzMCkpICE9IDAgPyAiWiI6 IiIsCisgICAgICAgICAgICAgICAgICAoZGF0YVs4K2ldICYgKDEgPDwgMjkpKSAhPSAwID8gIlki OiIiLAorICAgICAgICAgICAgICAgICAgKGRhdGFbOCtpXSAmICgxIDw8IDI4KSkgIT0gMCA/ICJY IjoiIiwKKyAgICAgICAgICAgICAgICAgIChkYXRhWzgraV0gPj4gMjUpICYgMywgKGRhdGFbOCtp XSA+PiAyMikgJiAzLAorICAgICAgICAgICAgICAgICAgKGRhdGFbOCtpXSA+PiAxNikgJiAweDFm LAorICAgICAgICAgICAgICAgICAgaiwKKyAgICAgICAgICAgICAgICAgIChkYXRhWzgraV0gJiAo MSA8PCAxNSkpICE9IDAgPyAiVyI6IiIsCisgICAgICAgICAgICAgICAgICAoZGF0YVs4K2ldICYg KDEgPDwgMTQpKSAhPSAwID8gIloiOiIiLAorICAgICAgICAgICAgICAgICAgKGRhdGFbOCtpXSAm ICgxIDw8IDEzKSkgIT0gMCA/ICJZIjoiIiwKKyAgICAgICAgICAgICAgICAgIChkYXRhWzgraV0g JiAoMSA8PCAxMikpICE9IDAgPyAiWCI6IiIsCisgICAgICAgICAgICAgICAgICAoZGF0YVs4K2ld ID4+IDkpICYgMywgKGRhdGFbOCtpXSA+PiA2KSAmIDMsCisgICAgICAgICAgICAgICAgICAoZGF0 YVs4K2ldICYgMHgxZikpOworCWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIDE2LCAiUG9pbnQg U3ByaXRlIFRleENvb3JkIEVuYWJsZVxuIik7CisgICAgICAgIGluc3RyX291dChkYXRhLCBod19v ZmZzZXQsIDE3LCAiQ29uc3QgSW50ZXJwIEVuYWJsZVxuIik7CisgICAgICAgIGluc3RyX291dChk YXRhLCBod19vZmZzZXQsIDE4LCAiQXR0cmliIDctMCBXcmFwU2hvcnRlc3QgRW5hYmxlXG4iKTsK KyAgICAgICAgaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMTksICJBdHRyaWIgMTUtOCBXcmFw U2hvcnRlc3QgRW5hYmxlXG4iKTsKKworICAgICAgICByZXR1cm4gbGVuOworCisgICAgY2FzZSAw eDc4MTQ6CisgICAgICAgIGxlbiA9IChkYXRhWzBdICYgMHhmZikgKyAyOworICAgICAgICBpZiAo bGVuICE9IDkpCisgICAgICAgICAgICBmcHJpbnRmKG91dCwgIkJhZCBjb3VudCBpbiAzRFNUQVRF X1dNXG4iKTsKKwlpZiAoY291bnQgPCA5KQorCSAgICBCVUZGRVJfRkFJTChjb3VudCwgbGVuLCAi M0RTVEFURV9XTSIpOworICAgICAgICBpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCAwLCAiM0RT VEFURV9XTVxuIik7CisgICAgICAgIGluc3RyX291dChkYXRhLCBod19vZmZzZXQsIDEsICJrZXJu ZWwgc3RhcnQgcG9pbnRlciAwXG4iKTsKKyAgICAgICAgaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNl dCwgMiwgIlNQRj0lZCwgVk1FPSVkLCBTYW1wbGVyIENvdW50ICVkLCAiCisgICAgICAgICAgICAg ICAgICAiQmluZGluZyB0YWJsZSBjb3VudCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgIChkYXRh WzJdID4+IDMxKSAmIDEsCisgICAgICAgICAgICAgICAgICAoZGF0YVsyXSA+PiAzMCkgJiAxLAor ICAgICAgICAgICAgICAgICAgKGRhdGFbMl0gPj4gMjcpICYgNywKKyAgICAgICAgICAgICAgICAg IChkYXRhWzJdID4+IDE4KSAmIDB4ZmYpOworICAgICAgICBpbnN0cl9vdXQoZGF0YSwgaHdfb2Zm c2V0LCAzLCAic2NyYXRjaCBvZmZzZXRcbiIpOworICAgICAgICBpbnN0cl9vdXQoZGF0YSwgaHdf b2Zmc2V0LCA0LCAiRGVwdGggQ2xlYXIgJWQsIERlcHRoIFJlc29sdmUgJWQsIEhpWiBSZXNvbHZl ICVkLCAiCisgICAgICAgICAgICAgICAgICAiRGlzcGF0Y2ggR1JGIHN0YXJ0WzBdICVkLCBzdGFy dFsxXSAlZCwgc3RhcnRbMl0gJWRcbiIsCisgICAgICAgICAgICAgICAgICAoZGF0YVs0XSAmICgx IDw8IDMwKSkgIT0gMCwKKyAgICAgICAgICAgICAgICAgIChkYXRhWzRdICYgKDEgPDwgMjgpKSAh PSAwLAorICAgICAgICAgICAgICAgICAgKGRhdGFbNF0gJiAoMSA8PCAyNykpICE9IDAsCisgICAg ICAgICAgICAgICAgICAoZGF0YVs0XSA+PiAxNikgJiAweDdmLAorICAgICAgICAgICAgICAgICAg KGRhdGFbNF0gPj4gOCkgJiAweDdmLAorICAgICAgICAgICAgICAgICAgKGRhdGFbNF0gJiAweDdm KSk7CisgICAgICAgIGluc3RyX291dChkYXRhLCBod19vZmZzZXQsIDUsICJNYXhUaHJlYWRzICVk LCBQUyBLaWxsUGl4ZWwgJWQsIFBTIGNvbXB1dGVkIFogJWQsICIKKyAgICAgICAgICAgICAgICAg ICJQUyB1c2Ugc291cmNlWiAlZCwgVGhyZWFkIERpc3BhdGNoICVkLCBQUyB1c2Ugc291cmNlVyAl ZCwgRGlzcGF0Y2gzMiAlZCwgIgorICAgICAgICAgICAgICAgICAgIkRpc3BhdGNoMTYgJWQsIERp c3BhdGNoOCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICgoZGF0YVs1XSA+PiAyNSkgJiAweDdm KSArIDEsCisgICAgICAgICAgICAgICAgICAoZGF0YVs1XSAmICgxIDw8IDIyKSkgIT0gMCwKKyAg ICAgICAgICAgICAgICAgIChkYXRhWzVdICYgKDEgPDwgMjEpKSAhPSAwLAorICAgICAgICAgICAg ICAgICAgKGRhdGFbNV0gJiAoMSA8PCAyMCkpICE9IDAsCisgICAgICAgICAgICAgICAgICAoZGF0 YVs1XSAmICgxIDw8IDE5KSkgIT0gMCwKKyAgICAgICAgICAgICAgICAgIChkYXRhWzVdICYgKDEg PDwgOCkpICE9IDAsCisgICAgICAgICAgICAgICAgICAoZGF0YVs1XSAmICgxIDw8IDIpKSAhPSAw LAorICAgICAgICAgICAgICAgICAgKGRhdGFbNV0gJiAoMSA8PCAxKSkgIT0gMCwKKyAgICAgICAg ICAgICAgICAgIChkYXRhWzVdICYgKDEgPDwgMCkpICE9IDApOworICAgICAgICBpbnN0cl9vdXQo ZGF0YSwgaHdfb2Zmc2V0LCA2LCAiTnVtIFNGIG91dHB1dCAlZCwgUG9zIFhZIG9mZnNldCAlZCwg WlcgaW50ZXJwIG1vZGUgJWQgLCAiCisgICAgICAgICAgICAgICAgICAiQmFyeWNlbnRyaWMgaW50 ZXJwIG1vZGUgMHgleCwgUG9pbnQgcmFzdGVyIHJ1bGUgJWQsIE11bHRpc2FtcGxlIG1vZGUgJWQs ICIKKyAgICAgICAgICAgICAgICAgICJNdWx0aXNhbXBsZSBEaXNwYXRjaCBtb2RlICVkXG4iLAor ICAgICAgICAgICAgICAgICAgKGRhdGFbNl0gPj4gMjApICYgMHgzZiwKKyAgICAgICAgICAgICAg ICAgIChkYXRhWzZdID4+IDE4KSAmIDMsCisgICAgICAgICAgICAgICAgICAoZGF0YVs2XSA+PiAx NikgJiAzLAorICAgICAgICAgICAgICAgICAgKGRhdGFbNl0gPj4gMTApICYgMHgzZiwKKyAgICAg ICAgICAgICAgICAgIChkYXRhWzZdICYgKDEgPDwgOSkpICE9IDAsCisgICAgICAgICAgICAgICAg ICAoZGF0YVs2XSA+PiAxKSAmIDMsCisgICAgICAgICAgICAgICAgICAoZGF0YVs2XSAmIDEpKTsK KyAgICAgICAgaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgNywgImtlcm5lbCBzdGFydCBwb2lu dGVyIDFcbiIpOworICAgICAgICBpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCA4LCAia2VybmVs IHN0YXJ0IHBvaW50ZXIgMlxuIik7CisKKyAgICAgICAgcmV0dXJuIGxlbjsKKworICAgIGNhc2Ug MHg3OTAwOgorCWlmIChsZW4gIT0gNCkKKwkgICAgZnByaW50ZihvdXQsICJCYWQgY291bnQgaW4g M0RTVEFURV9EUkFXSU5HX1JFQ1RBTkdMRVxuIik7CisJaWYgKGNvdW50IDwgNCkKKwkgICAgQlVG RkVSX0ZBSUwoY291bnQsIGxlbiwgIjNEU1RBVEVfRFJBV0lOR19SRUNUQU5HTEUiKTsKKworCWlu c3RyX291dChkYXRhLCBod19vZmZzZXQsIDAsCisJCSAgIjNEU1RBVEVfRFJBV0lOR19SRUNUQU5H TEVcbiIpOworCWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIDEsICJ0b3AgbGVmdDogJWQsJWRc biIsCisJCSAgZGF0YVsxXSAmIDB4ZmZmZiwKKwkJICAoZGF0YVsxXSA+PiAxNikgJiAweGZmZmYp OworCWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIDIsICJib3R0b20gcmlnaHQ6ICVkLCVkXG4i LAorCQkgIGRhdGFbMl0gJiAweGZmZmYsCisJCSAgKGRhdGFbMl0gPj4gMTYpICYgMHhmZmZmKTsK KwlpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCAzLCAib3JpZ2luOiAlZCwlZFxuIiwKKwkJICAo aW50KWRhdGFbM10gJiAweGZmZmYsCisJCSAgKChpbnQpZGF0YVszXSA+PiAxNikgJiAweGZmZmYp OworCisJcmV0dXJuIGxlbjsKKworICAgIGNhc2UgMHg3OTA1OgorCWlmIChsZW4gPCA1IHx8IGxl biA+IDcpCisJICAgIGZwcmludGYob3V0LCAiQmFkIGNvdW50IGluIDNEU1RBVEVfREVQVEhfQlVG RkVSXG4iKTsKKwlpZiAoY291bnQgPCBsZW4pCisJICAgIEJVRkZFUl9GQUlMKGNvdW50LCBsZW4s ICIzRFNUQVRFX0RFUFRIX0JVRkZFUiIpOworCisJaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwg MCwKKwkJICAiM0RTVEFURV9ERVBUSF9CVUZGRVJcbiIpOworCWlmIChJU19HRU41KGRldmlkKSB8 fCBJU19HRU42KGRldmlkKSkKKyAgICAgICAgICAgIGluc3RyX291dChkYXRhLCBod19vZmZzZXQs IDEsICIlcywgJXMsIHBpdGNoID0gJWQgYnl0ZXMsICVzdGlsZWQsIEhpWiAlZCwgU2VwZXJhdGUg U3RlbmNpbCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgZ2V0Xzk2NV9zdXJmYWNldHlwZShk YXRhWzFdID4+IDI5KSwKKyAgICAgICAgICAgICAgICAgICAgZ2V0Xzk2NV9kZXB0aGZvcm1hdCgo ZGF0YVsxXSA+PiAxOCkgJiAweDcpLAorICAgICAgICAgICAgICAgICAgICAoZGF0YVsxXSAmIDB4 MDAwMWZmZmYpICsgMSwKKyAgICAgICAgICAgICAgICAgICAgZGF0YVsxXSAmICgxIDw8IDI3KSA/ ICIiIDogIm5vdCAiLAorICAgICAgICAgICAgICAgICAgICAoZGF0YVsxXSAmICgxIDw8IDIyKSkg IT0gMCwKKyAgICAgICAgICAgICAgICAgICAgKGRhdGFbMV0gJiAoMSA8PCAyMSkpICE9IDApOwor ICAgICAgICBlbHNlCisgICAgICAgICAgICBpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCAxLCAi JXMsICVzLCBwaXRjaCA9ICVkIGJ5dGVzLCAlc3RpbGVkXG4iLAorICAgICAgICAgICAgICAgICAg ICBnZXRfOTY1X3N1cmZhY2V0eXBlKGRhdGFbMV0gPj4gMjkpLAorICAgICAgICAgICAgICAgICAg ICBnZXRfOTY1X2RlcHRoZm9ybWF0KChkYXRhWzFdID4+IDE4KSAmIDB4NyksCisgICAgICAgICAg ICAgICAgICAgIChkYXRhWzFdICYgMHgwMDAxZmZmZikgKyAxLAorICAgICAgICAgICAgICAgICAg ICBkYXRhWzFdICYgKDEgPDwgMjcpID8gIiIgOiAibm90ICIpOworCWluc3RyX291dChkYXRhLCBo d19vZmZzZXQsIDIsICJkZXB0aCBvZmZzZXRcbiIpOworCWluc3RyX291dChkYXRhLCBod19vZmZz ZXQsIDMsICIlZHglZFxuIiwKKwkJICAoKGRhdGFbM10gJiAweDAwMDdmZmMwKSA+PiA2KSArIDEs CisJCSAgKChkYXRhWzNdICYgMHhmZmY4MDAwMCkgPj4gMTkpICsgMSk7CisJaW5zdHJfb3V0KGRh dGEsIGh3X29mZnNldCwgNCwgInZvbHVtZSBkZXB0aFxuIik7CisJaWYgKGxlbiA+PSA2KQorCSAg ICBpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCA1LCAiXG4iKTsKKwlpZiAobGVuID49IDcpIHsK KyAgICAgICAgICAgIGlmIChJU19HRU42KGRldmlkKSkKKyAgICAgICAgICAgICAgICBpbnN0cl9v dXQoZGF0YSwgaHdfb2Zmc2V0LCA2LCAiXG4iKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg ICAgICAgICBpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCA2LCAicmVuZGVyIHRhcmdldCB2aWV3 IGV4dGVudFxuIik7CisgICAgICAgIH0KKworCisJcmV0dXJuIGxlbjsKKworICAgIGNhc2UgMHg3 YTAwOgorCWlmIChpbnRlbF9nZW4oZGV2aWQpID49IDYpIHsKKwkJaW50IGk7CisJCWxlbiA9IChk YXRhWzBdICYgMHhmZikgKyAyOworCQlpZiAobGVuICE9IDQgJiYgbGVuICE9IDUpCisJCQlmcHJp bnRmKG91dCwgIkJhZCBjb3VudCBpbiBQSVBFX0NPTlRST0xcbiIpOworCQlpZiAoY291bnQgPCBs ZW4pCisJCQlCVUZGRVJfRkFJTChjb3VudCwgbGVuLCAiUElQRV9DT05UUk9MIik7CisKKwkJc3dp dGNoICgoZGF0YVsxXSA+PiAxNCkgJiAweDMpIHsKKwkJY2FzZSAwOiBkZXNjMSA9ICJubyB3cml0 ZSI7IGJyZWFrOworCQljYXNlIDE6IGRlc2MxID0gInF3b3JkIHdyaXRlIjsgYnJlYWs7CisJCWNh c2UgMjogZGVzYzEgPSAiUFNfREVQVEhfQ09VTlQgd3JpdGUiOyBicmVhazsKKwkJY2FzZSAzOiBk ZXNjMSA9ICJUSU1FU1RBTVAgd3JpdGUiOyBicmVhazsKKwkJfQorCQlpbnN0cl9vdXQoZGF0YSwg aHdfb2Zmc2V0LCAwLCAiUElQRV9DT05UUk9MXG4iKTsKKwkJaW5zdHJfb3V0KGRhdGEsIGh3X29m ZnNldCwgMSwKKwkJCSAgIiVzLCAlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMl c1xuIiwKKwkJCSAgZGVzYzEsCisJCQkgIGRhdGFbMV0gJiAoMSA8PCAyMCkgPyAiY3Mgc3RhbGws ICIgOiAiIiwKKwkJCSAgZGF0YVsxXSAmICgxIDw8IDE5KSA/ICJnbG9iYWwgc25hcHNob3QgY291 bnQgcmVzZXQsICIgOiAiIiwKKwkJCSAgZGF0YVsxXSAmICgxIDw8IDE4KSA/ICJ0bGIgaW52YWxp ZGF0ZSwgIiA6ICIiLAorCQkJICBkYXRhWzFdICYgKDEgPDwgMTcpID8gImdmZHQgZmx1c2gsICIg OiAiIiwKKwkJCSAgZGF0YVsxXSAmICgxIDw8IDE3KSA/ICJtZWRpYSBzdGF0ZSBjbGVhciwgIiA6 ICIiLAorCQkJICBkYXRhWzFdICYgKDEgPDwgMTMpID8gImRlcHRoIHN0YWxsLCAiIDogIiIsCisJ CQkgIGRhdGFbMV0gJiAoMSA8PCAxMikgPyAicmVuZGVyIHRhcmdldCBjYWNoZSBmbHVzaCwgIiA6 ICIiLAorCQkJICBkYXRhWzFdICYgKDEgPDwgMTEpID8gImluc3RydWN0aW9uIGNhY2hlIGludmFs aWRhdGUsICIgOiAiIiwKKwkJCSAgZGF0YVsxXSAmICgxIDw8IDEwKSA/ICJ0ZXh0dXJlIGNhY2hl IGludmFsaWRhdGUsICIgOiAiIiwKKwkJCSAgZGF0YVsxXSAmICgxIDw8IDkpID8gImluZGlyZWN0 IHN0YXRlIGludmFsaWRhdGUsICIgOiAiIiwKKwkJCSAgZGF0YVsxXSAmICgxIDw8IDgpID8gIm5v dGlmeSBpcnEsICIgOiAiIiwKKwkJCSAgZGF0YVsxXSAmICgxIDw8IDcpID8gIlBJUEVfQ09OVFJP TCBmbHVzaCwgIiA6ICIiLAorCQkJICBkYXRhWzFdICYgKDEgPDwgNikgPyAicHJvdGVjdCBtZW0g YXBwX2lkLCAiIDogIiIsCisJCQkgIGRhdGFbMV0gJiAoMSA8PCA1KSA/ICJEQyBmbHVzaCwgIiA6 ICIiLAorCQkJICBkYXRhWzFdICYgKDEgPDwgNCkgPyAidmYgZmV0Y2ggaW52YWxpZGF0ZSwgIiA6 ICIiLAorCQkJICBkYXRhWzFdICYgKDEgPDwgMykgPyAiY29uc3RhbnQgY2FjaGUgaW52YWxpZGF0 ZSwgIiA6ICIiLAorCQkJICBkYXRhWzFdICYgKDEgPDwgMikgPyAic3RhdGUgY2FjaGUgaW52YWxp ZGF0ZSwgIiA6ICIiLAorCQkJICBkYXRhWzFdICYgKDEgPDwgMSkgPyAic3RhbGwgYXQgc2NvcmVi b2FyZCwgIiA6ICIiLAorCQkJICBkYXRhWzFdICYgKDEgPDwgMCkgPyAiZGVwdGggY2FjaGUgZmx1 c2gsICIgOiAiIik7CisJCWlmIChsZW4gPT0gNSkgeworCQkgICAgaW5zdHJfb3V0KGRhdGEsIGh3 X29mZnNldCwgMiwgImRlc3RpbmF0aW9uIGFkZHJlc3NcbiIpOworCQkgICAgaW5zdHJfb3V0KGRh dGEsIGh3X29mZnNldCwgMywgImltbWVkaWF0ZSBkd29yZCBsb3dcbiIpOworCQkgICAgaW5zdHJf b3V0KGRhdGEsIGh3X29mZnNldCwgNCwgImltbWVkaWF0ZSBkd29yZCBoaWdoXG4iKTsKKwkJfSBl bHNlIHsKKwkJICAgIGZvciAoaSA9IDI7IGkgPCBsZW47IGkrKykgeworCQkJaW5zdHJfb3V0KGRh dGEsIGh3X29mZnNldCwgaSwgIlxuIik7CisJCSAgICB9CisJCX0KKwkJcmV0dXJuIGxlbjsKKwl9 IGVsc2UgeworCQlsZW4gPSAoZGF0YVswXSAmIDB4ZmYpICsgMjsKKwkJaWYgKGxlbiAhPSA0KQor CQkJZnByaW50ZihvdXQsICJCYWQgY291bnQgaW4gUElQRV9DT05UUk9MXG4iKTsKKwkJaWYgKGNv dW50IDwgbGVuKQorCQkJQlVGRkVSX0ZBSUwoY291bnQsIGxlbiwgIlBJUEVfQ09OVFJPTCIpOwor CisJCXN3aXRjaCAoKGRhdGFbMF0gPj4gMTQpICYgMHgzKSB7CisJCWNhc2UgMDogZGVzYzEgPSAi bm8gd3JpdGUiOyBicmVhazsKKwkJY2FzZSAxOiBkZXNjMSA9ICJxd29yZCB3cml0ZSI7IGJyZWFr OworCQljYXNlIDI6IGRlc2MxID0gIlBTX0RFUFRIX0NPVU5UIHdyaXRlIjsgYnJlYWs7CisJCWNh c2UgMzogZGVzYzEgPSAiVElNRVNUQU1QIHdyaXRlIjsgYnJlYWs7CisJCX0KKwkJaW5zdHJfb3V0 KGRhdGEsIGh3X29mZnNldCwgMCwKKwkJCSAgIlBJUEVfQ09OVFJPTDogJXMsICVzZGVwdGggc3Rh bGwsICVzUkMgd3JpdGUgZmx1c2gsICIKKwkJCSAgIiVzaW5zdCBmbHVzaFxuIiwKKwkJCSAgZGVz YzEsCisJCQkgIGRhdGFbMF0gJiAoMSA8PCAxMykgPyAiIiA6ICJubyAiLAorCQkJICBkYXRhWzBd ICYgKDEgPDwgMTIpID8gIiIgOiAibm8gIiwKKwkJCSAgZGF0YVswXSAmICgxIDw8IDExKSA/ICIi IDogIm5vICIpOworCQlpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCAxLCAiZGVzdGluYXRpb24g YWRkcmVzc1xuIik7CisJCWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIDIsICJpbW1lZGlhdGUg ZHdvcmQgbG93XG4iKTsKKwkJaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMywgImltbWVkaWF0 ZSBkd29yZCBoaWdoXG4iKTsKKwkJcmV0dXJuIGxlbjsKKwl9CisgICAgY2FzZSAweDdiMDA6CisJ bGVuID0gKGRhdGFbMF0gJiAweGZmKSArIDI7CisJaWYgKGxlbiAhPSA2KQorCSAgICBmcHJpbnRm KG91dCwgIkJhZCBjb3VudCBpbiAzRFBSSU1JVElWRVxuIik7CisJaWYgKGNvdW50IDwgbGVuKQor CSAgICBCVUZGRVJfRkFJTChjb3VudCwgbGVuLCAiM0RQUklNSVRJVkUiKTsKKworCWluc3RyX291 dChkYXRhLCBod19vZmZzZXQsIDAsCisJCSAgIjNEUFJJTUlUSVZFOiAlcyAlc1xuIiwKKwkJICBn ZXRfOTY1X3ByaW1fdHlwZShkYXRhWzBdKSwKKwkJICAoZGF0YVswXSAmICgxIDw8IDE1KSkgPyAi cmFuZG9tIiA6ICJzZXF1ZW50aWFsIik7CisJaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMSwg InZlcnRleCBjb3VudFxuIik7CisJaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMiwgInN0YXJ0 IHZlcnRleFxuIik7CisJaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMywgImluc3RhbmNlIGNv dW50XG4iKTsKKwlpbnN0cl9vdXQoZGF0YSwgaHdfb2Zmc2V0LCA0LCAic3RhcnQgaW5zdGFuY2Vc biIpOworCWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIDUsICJpbmRleCBiaWFzXG4iKTsKKwly ZXR1cm4gbGVuOworICAgIH0KKworICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShv cGNvZGVzXzNkKTsgaWR4KyspIHsKKwlvcGNvZGVfM2QgPSAmb3Bjb2Rlc18zZFtpZHhdOworCWlm ICgoZGF0YVswXSAmIDB4ZmZmZjAwMDApID4+IDE2ID09IG9wY29kZV8zZC0+b3Bjb2RlKSB7CisJ ICAgIHVuc2lnbmVkIGludCBpOworCSAgICBsZW4gPSAxOworCisJICAgIGluc3RyX291dChkYXRh LCBod19vZmZzZXQsIDAsICIlc1xuIiwgb3Bjb2RlXzNkLT5uYW1lKTsKKwkgICAgaWYgKG9wY29k ZV8zZC0+bWF4X2xlbiA+IDEpIHsKKwkJbGVuID0gKGRhdGFbMF0gJiAweGZmKSArIDI7CisJCWlm IChsZW4gPCBvcGNvZGVfM2QtPm1pbl9sZW4gfHwKKwkJICAgIGxlbiA+IG9wY29kZV8zZC0+bWF4 X2xlbikKKwkJeworCQkgICAgZnByaW50ZihvdXQsICJCYWQgY291bnQgaW4gJXNcbiIsIG9wY29k ZV8zZC0+bmFtZSk7CisJCX0KKwkgICAgfQorCisJICAgIGZvciAoaSA9IDE7IGkgPCBsZW47IGkr KykgeworCQlpZiAoaSA+PSBjb3VudCkKKwkJICAgIEJVRkZFUl9GQUlMKGNvdW50LCBsZW4sIG9w Y29kZV8zZC0+bmFtZSk7CisJCWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIGksICJkd29yZCAl ZFxuIiwgaSk7CisJICAgIH0KKwkgICAgcmV0dXJuIGxlbjsKKwl9CisgICAgfQorCisgICAgaW5z dHJfb3V0KGRhdGEsIGh3X29mZnNldCwgMCwgIjNEIFVOS05PV046IDNkXzk2NSBvcGNvZGUgPSAw eCV4XG4iLCBvcGNvZGUpOworICAgICgqZmFpbHVyZXMpKys7CisgICAgcmV0dXJuIDE7Cit9CisK K3N0YXRpYyBpbnQKK2RlY29kZV8zZF9pODMwKHVpbnQzMl90ICpkYXRhLCBpbnQgY291bnQsIHVp bnQzMl90IGh3X29mZnNldCwgdWludDMyX3QgZGV2aWQsIGludCAqZmFpbHVyZXMpCit7CisgICAg dW5zaWduZWQgaW50IGlkeDsKKyAgICB1aW50MzJfdCBvcGNvZGU7CisKKyAgICBzdHJ1Y3Qgewor CXVpbnQzMl90IG9wY29kZTsKKwlpbnQgbWluX2xlbjsKKwlpbnQgbWF4X2xlbjsKKwljaGFyICpu YW1lOworICAgIH0gb3Bjb2Rlc18zZFtdID0geworCXsgMHgwMiwgMSwgMSwgIjNEU1RBVEVfTU9E RVNfMyIgfSwKKwl7IDB4MDMsIDEsIDEsICIzRFNUQVRFX0VOQUJMRVNfMSJ9LAorCXsgMHgwNCwg MSwgMSwgIjNEU1RBVEVfRU5BQkxFU18yIn0sCisJeyAweDA1LCAxLCAxLCAiM0RTVEFURV9WRlQw In0sCisJeyAweDA2LCAxLCAxLCAiM0RTVEFURV9BQSJ9LAorCXsgMHgwNywgMSwgMSwgIjNEU1RB VEVfUkFTVEVSSVpBVElPTl9SVUxFUyIgfSwKKwl7IDB4MDgsIDEsIDEsICIzRFNUQVRFX01PREVT XzEiIH0sCisJeyAweDA5LCAxLCAxLCAiM0RTVEFURV9TVEVOQ0lMX1RFU1QiIH0sCisJeyAweDBh LCAxLCAxLCAiM0RTVEFURV9WRlQxIn0sCisJeyAweDBiLCAxLCAxLCAiM0RTVEFURV9JTkRQVF9B TFBIQV9CTEVORCIgfSwKKwl7IDB4MGMsIDEsIDEsICIzRFNUQVRFX01PREVTXzUiIH0sCisJeyAw eDBkLCAxLCAxLCAiM0RTVEFURV9NQVBfQkxFTkRfT1AiIH0sCisJeyAweDBlLCAxLCAxLCAiM0RT VEFURV9NQVBfQkxFTkRfQVJHIiB9LAorCXsgMHgwZiwgMSwgMSwgIjNEU1RBVEVfTU9ERVNfMiIg fSwKKwl7IDB4MTUsIDEsIDEsICIzRFNUQVRFX0ZPR19DT0xPUiIgfSwKKwl7IDB4MTYsIDEsIDEs ICIzRFNUQVRFX01PREVTXzQiIH0sCisgICAgfSwgKm9wY29kZV8zZDsKKworICAgIG9wY29kZSA9 IChkYXRhWzBdICYgMHgxZjAwMDAwMCkgPj4gMjQ7CisKKyAgICBzd2l0Y2ggKG9wY29kZSkgewor ICAgIGNhc2UgMHgxZjoKKwlyZXR1cm4gZGVjb2RlXzNkX3ByaW1pdGl2ZShkYXRhLCBjb3VudCwg aHdfb2Zmc2V0LCBmYWlsdXJlcyk7CisgICAgY2FzZSAweDFkOgorCXJldHVybiBkZWNvZGVfM2Rf MWQoZGF0YSwgY291bnQsIGh3X29mZnNldCwgZGV2aWQsIGZhaWx1cmVzKTsKKyAgICBjYXNlIDB4 MWM6CisJcmV0dXJuIGRlY29kZV8zZF8xYyhkYXRhLCBjb3VudCwgaHdfb2Zmc2V0LCBmYWlsdXJl cyk7CisgICAgfQorCisgICAgZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKG9wY29kZXNf M2QpOyBpZHgrKykgeworCW9wY29kZV8zZCA9ICZvcGNvZGVzXzNkW2lkeF07CisJaWYgKChkYXRh WzBdICYgMHgxZjAwMDAwMCkgPj4gMjQgPT0gb3Bjb2RlXzNkLT5vcGNvZGUpIHsKKwkgICAgdW5z aWduZWQgaW50IGxlbiA9IDEsIGk7CisKKwkgICAgaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwg MCwgIiVzXG4iLCBvcGNvZGVfM2QtPm5hbWUpOworCSAgICBpZiAob3Bjb2RlXzNkLT5tYXhfbGVu ID4gMSkgeworCQlsZW4gPSAoZGF0YVswXSAmIDB4ZmYpICsgMjsKKwkJaWYgKGxlbiA8IG9wY29k ZV8zZC0+bWluX2xlbiB8fAorCQkgICAgbGVuID4gb3Bjb2RlXzNkLT5tYXhfbGVuKQorCQl7CisJ CSAgICBmcHJpbnRmKG91dCwgIkJhZCBjb3VudCBpbiAlc1xuIiwgb3Bjb2RlXzNkLT5uYW1lKTsK KwkJfQorCSAgICB9CisKKwkgICAgZm9yIChpID0gMTsgaSA8IGxlbjsgaSsrKSB7CisJCWlmIChp ID49IGNvdW50KQorCQkgICAgQlVGRkVSX0ZBSUwoY291bnQsIGxlbiwgb3Bjb2RlXzNkLT5uYW1l KTsKKwkJaW5zdHJfb3V0KGRhdGEsIGh3X29mZnNldCwgaSwgImR3b3JkICVkXG4iLCBpKTsKKwkg ICAgfQorCSAgICByZXR1cm4gbGVuOworCX0KKyAgICB9CisKKyAgICBpbnN0cl9vdXQoZGF0YSwg aHdfb2Zmc2V0LCAwLCAiM0QgVU5LTk9XTjogM2RfaTgzMCBvcGNvZGUgPSAweCV4XG4iLCBvcGNv ZGUpOworICAgICgqZmFpbHVyZXMpKys7CisgICAgcmV0dXJuIDE7Cit9CisKKy8qKgorICogRGVj b2RlcyBhbiBpODMwLWk5MTUgYmF0Y2ggYnVmZmVyLCB3cml0aW5nIHRoZSBvdXRwdXQgdG8gc3Rk b3V0LgorICoKKyAqIFxwYXJhbSBkYXRhIGJhdGNoIGJ1ZmZlciBjb250ZW50cworICogXHBhcmFt IGNvdW50IG51bWJlciBvZiBEV09SRHMgdG8gZGVjb2RlIGluIHRoZSBiYXRjaCBidWZmZXIKKyAq IFxwYXJhbSBod19vZmZzZXQgaGFyZHdhcmUgYWRkcmVzcyBmb3IgdGhlIGJ1ZmZlcgorICovCitp bnQKK2ludGVsX2RlY29kZSh1aW50MzJfdCAqZGF0YSwgaW50IGNvdW50LAorCSAgICAgdWludDMy X3QgaHdfb2Zmc2V0LAorCSAgICAgdWludDMyX3QgZGV2aWQsCisJICAgICB1aW50MzJfdCBpZ25v cmVfZW5kX29mX2JhdGNoYnVmZmVyKQoreworICAgIGludCByZXQ7CisgICAgaW50IGluZGV4ID0g MDsKKyAgICBpbnQgZmFpbHVyZXMgPSAwOworCisgICAgb3V0ID0gc3Rkb3V0OworCisgICAgd2hp bGUgKGluZGV4IDwgY291bnQpIHsKKwlzd2l0Y2ggKChkYXRhW2luZGV4XSAmIDB4ZTAwMDAwMDAp ID4+IDI5KSB7CisJY2FzZSAweDA6CisJICAgIHJldCA9IGRlY29kZV9taShkYXRhICsgaW5kZXgs IGNvdW50IC0gaW5kZXgsCisJCQkgICAgICAgaHdfb2Zmc2V0ICsgaW5kZXggKiA0LCAmZmFpbHVy ZXMpOworCisJICAgIC8qIElmIE1JX0JBVENIQlVGRkVSX0VORCBoYXBwZW5lZCwgdGhlbiBkdW1w IHRoZSByZXN0IG9mIHRoZQorCSAgICAgKiBvdXRwdXQgaW4gY2FzZSB3ZSBzb21lIGRheSB3YW50 IGl0IGluIGRlYnVnZ2luZywgYnV0IGRvbid0CisJICAgICAqIGRlY29kZSBpdCBzaW5jZSBpdCds bCBqdXN0IGNvbmZ1c2UgaW4gdGhlIGNvbW1vbiBjYXNlLgorCSAgICAgKi8KKwkgICAgaWYgKHJl dCA9PSAtMSkgeworCQlpZiAoaWdub3JlX2VuZF9vZl9iYXRjaGJ1ZmZlcikgeworCQkgICAgaW5k ZXgrKzsKKwkJfSBlbHNlIHsKKwkJICAgIGZvciAoaW5kZXggPSBpbmRleCArIDE7IGluZGV4IDwg Y291bnQ7IGluZGV4KyspIHsKKwkJCWluc3RyX291dChkYXRhLCBod19vZmZzZXQsIGluZGV4LCAi XG4iKTsKKwkJICAgIH0KKwkJfQorCSAgICB9IGVsc2UKKwkJaW5kZXggKz0gcmV0OworCSAgICBi cmVhazsKKwljYXNlIDB4MjoKKwkgICAgaW5kZXggKz0gZGVjb2RlXzJkKGRhdGEgKyBpbmRleCwg Y291bnQgLSBpbmRleCwKKwkJCSAgICAgICBod19vZmZzZXQgKyBpbmRleCAqIDQsICZmYWlsdXJl cyk7CisJICAgIGJyZWFrOworCWNhc2UgMHgzOgorCSAgICBpZiAoSVNfOTY1KGRldmlkKSkgewor CQlpbmRleCArPSBkZWNvZGVfM2RfOTY1KGRhdGEgKyBpbmRleCwgY291bnQgLSBpbmRleCwKKwkJ CQkgICAgICAgaHdfb2Zmc2V0ICsgaW5kZXggKiA0LAorCQkJCSAgICAgICBkZXZpZCwgJmZhaWx1 cmVzKTsKKwkgICAgfSBlbHNlIGlmIChJU19HRU4zKGRldmlkKSkgeworCQlpbmRleCArPSBkZWNv ZGVfM2QoZGF0YSArIGluZGV4LCBjb3VudCAtIGluZGV4LAorCQkJCSAgIGh3X29mZnNldCArIGlu ZGV4ICogNCwKKwkJCQkgICBkZXZpZCwgJmZhaWx1cmVzKTsKKwkgICAgfSBlbHNlIHsKKwkJaW5k ZXggKz0gZGVjb2RlXzNkX2k4MzAoZGF0YSArIGluZGV4LCBjb3VudCAtIGluZGV4LAorCQkJCQlo d19vZmZzZXQgKyBpbmRleCAqIDQsCisJCQkJCWRldmlkLCAmZmFpbHVyZXMpOworCSAgICB9CisJ ICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIGluc3RyX291dChkYXRhLCBod19vZmZzZXQsIGlu ZGV4LCAiVU5LTk9XTlxuIik7CisJICAgIGZhaWx1cmVzKys7CisJICAgIGluZGV4Kys7CisJICAg IGJyZWFrOworCX0KKwlmZmx1c2gob3V0KTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFpbHVyZXM7 Cit9CisKK3ZvaWQgaW50ZWxfZGVjb2RlX2NvbnRleHRfcmVzZXQodm9pZCkKK3sKKyAgICBzYXZl ZF9zMl9zZXQgPSAwOworICAgIHNhdmVkX3M0X3NldCA9IDE7Cit9CisKK3ZvaWQgaW50ZWxfZGVj b2RlX2NvbnRleHRfc2V0X2hlYWRfdGFpbCh1aW50MzJfdCBoZWFkLCB1aW50MzJfdCB0YWlsKQor eworCWhlYWRfb2Zmc2V0ID0gaGVhZDsKKwl0YWlsX29mZnNldCA9IHRhaWw7Cit9Ci0tIAoxLjcu Ny4zCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRl bC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=