From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thierry Reding Subject: [PATCH libdrm 01/10] tests: Split helpers into library Date: Wed, 9 Dec 2015 18:37:39 +0100 Message-ID: <1449682668-22487-1-git-send-email-thierry.reding@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pf0-f172.google.com (mail-pf0-f172.google.com [209.85.192.172]) by gabe.freedesktop.org (Postfix) with ESMTPS id 313076E290 for ; Wed, 9 Dec 2015 09:37:53 -0800 (PST) Received: by pfdd184 with SMTP id d184so33207432pfd.3 for ; Wed, 09 Dec 2015 09:37:52 -0800 (PST) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Emil Velikov , Hyungwon Hwang List-Id: dri-devel@lists.freedesktop.org RnJvbTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KClNvbWUgb2YgdGhlIGhl bHBlcnMsIHN1Y2ggYXMgdGhlIHBhdHRlcm4gZHJhd2luZyBoZWxwZXJzIG9yIHRoZSBmb3JtYXQK bG9va3VwIGhlbHBlcnMsIGhhdmUgcG90ZW50aWFsIHRvIGJlIHJldXNlZC4gTW92ZSB0aGVtIGlu dG8gYSBzZXBhcmF0ZQpsaWJyYXJ5IHRvIG1ha2UgaXQgZWFzaWVyIHRvIHNoYXJlIHRoZW0uCgpB Y2tlZC1ieTogTGF1cmVudCBQaW5jaGFydCA8bGF1cmVudC5waW5jaGFydEBpZGVhc29uYm9hcmQu Y29tPgpTaWduZWQtb2ZmLWJ5OiBUaGllcnJ5IFJlZGluZyA8dHJlZGluZ0BudmlkaWEuY29tPgot LS0KIENsZWFuU3BlYy5tayAgICAgICAgICAgICAgICB8ICAgMSArCiBjb25maWd1cmUuYWMgICAg ICAgICAgICAgICAgfCAgIDEgKwogdGVzdHMvTWFrZWZpbGUuYW0gICAgICAgICAgIHwgICAyICst CiB0ZXN0cy9tb2RlcHJpbnQvTWFrZWZpbGUuYW0gfCAgIDEgKwogdGVzdHMvbW9kZXByaW50L21v ZGVwcmludC5jIHwgICAyICstCiB0ZXN0cy9tb2RldGVzdC9BbmRyb2lkLm1rICAgfCAgIDEgKwog dGVzdHMvbW9kZXRlc3QvTWFrZWZpbGUuYW0gIHwgICA4ICstCiB0ZXN0cy9tb2RldGVzdC9idWZm ZXJzLmMgICAgfCA5NjEgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KIHRlc3RzL21vZGV0ZXN0L2J1ZmZlcnMuaCAgICB8ICAxMiArLQogdGVzdHMvbW9kZXRlc3Qv Y3Vyc29yLmMgICAgIHwgICA0ICstCiB0ZXN0cy9tb2RldGVzdC9tb2RldGVzdC5jICAgfCAgMjUg Ky0KIHRlc3RzL3Byb3B0ZXN0L01ha2VmaWxlLmFtICB8ICAgNCArLQogdGVzdHMvcHJvcHRlc3Qv cHJvcHRlc3QuYyAgIHwgICAzICstCiB0ZXN0cy91dGlsL0FuZHJvaWQubWsgICAgICAgfCAgMzkg KysKIHRlc3RzL3V0aWwvTWFrZWZpbGUuYW0gICAgICB8ICAxMyArCiB0ZXN0cy91dGlsL01ha2Vm aWxlLnNvdXJjZXMgfCAgIDYgKwogdGVzdHMvdXRpbC9jb21tb24uaCAgICAgICAgIHwgIDMzICsr CiB0ZXN0cy91dGlsL2Zvcm1hdC5jICAgICAgICAgfCAxMjAgKysrKysrCiB0ZXN0cy91dGlsL2Zv cm1hdC5oICAgICAgICAgfCAgNjUgKysrCiB0ZXN0cy91dGlsL3BhdHRlcm4uYyAgICAgICAgfCA4 NzAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB0ZXN0cy91dGlsL3Bh dHRlcm4uaCAgICAgICAgfCAgMzkgKysKIHRlc3RzL3ZibHRlc3QvTWFrZWZpbGUuYW0gICB8ICAg MSArCiB0ZXN0cy92Ymx0ZXN0L3ZibHRlc3QuYyAgICAgfCAgIDIgKy0KIDIzIGZpbGVzIGNoYW5n ZWQsIDEyMjMgaW5zZXJ0aW9ucygrKSwgOTkwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAw NjQ0IHRlc3RzL3V0aWwvQW5kcm9pZC5tawogY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL3V0aWwv TWFrZWZpbGUuYW0KIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy91dGlsL01ha2VmaWxlLnNvdXJj ZXMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy91dGlsL2NvbW1vbi5oCiBjcmVhdGUgbW9kZSAx MDA2NDQgdGVzdHMvdXRpbC9mb3JtYXQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL3V0aWwv Zm9ybWF0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy91dGlsL3BhdHRlcm4uYwogY3JlYXRl IG1vZGUgMTAwNjQ0IHRlc3RzL3V0aWwvcGF0dGVybi5oCgpkaWZmIC0tZ2l0IGEvQ2xlYW5TcGVj Lm1rIGIvQ2xlYW5TcGVjLm1rCmluZGV4IDhlMjNjZDI1ZDI2ZC4uMjhhMTFkYjRlN2IwIDEwMDY0 NAotLS0gYS9DbGVhblNwZWMubWsKKysrIGIvQ2xlYW5TcGVjLm1rCkBAIC0xLDMgKzEsNCBAQAog JChjYWxsIGFkZC1jbGVhbi1zdGVwLCBybSAtcmYgJChQUk9EVUNUX09VVCkvb2JqL2luY2x1ZGUv bGliZHJtKQogJChjYWxsIGFkZC1jbGVhbi1zdGVwLCBybSAtcmYgJChQUk9EVUNUX09VVCkvb2Jq L2luY2x1ZGUvZnJlZWRyZW5vKQogJChjYWxsIGFkZC1jbGVhbi1zdGVwLCBybSAtcmYgJChQUk9E VUNUX09VVCkvb2JqL1NIQVJFRF9MSUJSQVJJRVMvbGliZHJtXyppbnRlcm1lZGlhdGVzKQorJChj YWxsIGFkZC1jbGVhbi1zdGVwLCBybSAtcmYgJChQUk9EVUNUX09VVCkvb2JqL1NUQVRJQ19MSUJS QVJJRVMvbGliZHJtXyppbnRlcm1lZGlhdGVzKQpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIv Y29uZmlndXJlLmFjCmluZGV4IGI5MjlkMzZhMjhjNS4uY2E2Y2JmNGVhYTYyIDEwMDY0NAotLS0g YS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC01MDcsNiArNTA3LDcgQEAgQUNf Q09ORklHX0ZJTEVTKFsKIAl0ZXN0cy9leHlub3MvTWFrZWZpbGUKIAl0ZXN0cy90ZWdyYS9NYWtl ZmlsZQogCXRlc3RzL25vdXZlYXUvTWFrZWZpbGUKKwl0ZXN0cy91dGlsL01ha2VmaWxlCiAJbWFu L01ha2VmaWxlCiAJbGliZHJtLnBjXSkKIEFDX09VVFBVVApkaWZmIC0tZ2l0IGEvdGVzdHMvTWFr ZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQppbmRleCBjNTNmNGFmNjcxMTEuLjdmZmMwNzZm MTZkNyAxMDA2NDQKLS0tIGEvdGVzdHMvTWFrZWZpbGUuYW0KKysrIGIvdGVzdHMvTWFrZWZpbGUu YW0KQEAgLTEsNCArMSw0IEBACi1TVUJESVJTID0gbW9kZXByaW50IHByb3B0ZXN0IG1vZGV0ZXN0 IHZibHRlc3QKK1NVQkRJUlMgPSB1dGlsIG1vZGVwcmludCBwcm9wdGVzdCBtb2RldGVzdCB2Ymx0 ZXN0CiAKIGlmIEhBVkVfTElCS01TCiBTVUJESVJTICs9IGttc3Rlc3QKZGlmZiAtLWdpdCBhL3Rl c3RzL21vZGVwcmludC9NYWtlZmlsZS5hbSBiL3Rlc3RzL21vZGVwcmludC9NYWtlZmlsZS5hbQpp bmRleCA4OTU4MDVmZDMyZTguLjYwMWRiYzk2NDI5MCAxMDA2NDQKLS0tIGEvdGVzdHMvbW9kZXBy aW50L01ha2VmaWxlLmFtCisrKyBiL3Rlc3RzL21vZGVwcmludC9NYWtlZmlsZS5hbQpAQCAtMSw2 ICsxLDcgQEAKIEFNX0NGTEFHUyA9IFwKIAkkKFdBUk5fQ0ZMQUdTKVwKIAktSSQodG9wX3NyY2Rp cikvaW5jbHVkZS9kcm0gXAorCS1JJCh0b3Bfc3JjZGlyKS90ZXN0cyBcCiAJLUkkKHRvcF9zcmNk aXIpCiAKIGlmIEhBVkVfSU5TVEFMTF9URVNUUwpkaWZmIC0tZ2l0IGEvdGVzdHMvbW9kZXByaW50 L21vZGVwcmludC5jIGIvdGVzdHMvbW9kZXByaW50L21vZGVwcmludC5jCmluZGV4IDVlOTUzZjcx ZjY0Ni4uMGQ4NTQxMDNjNWFlIDEwMDY0NAotLS0gYS90ZXN0cy9tb2RlcHJpbnQvbW9kZXByaW50 LmMKKysrIGIvdGVzdHMvbW9kZXByaW50L21vZGVwcmludC5jCkBAIC00MSw3ICs0MSw3IEBACiAj aW5jbHVkZSAieGY4NmRybS5oIgogI2luY2x1ZGUgInhmODZkcm1Nb2RlLmgiCiAKLSNkZWZpbmUg QVJSQVlfU0laRShhKSAoc2l6ZW9mKGEpIC8gc2l6ZW9mKGFbMF0pKQorI2luY2x1ZGUgInV0aWwv Y29tbW9uLmgiCiAKIGludCBjdXJyZW50OwogaW50IGNvbm5lY3RvcnM7CmRpZmYgLS1naXQgYS90 ZXN0cy9tb2RldGVzdC9BbmRyb2lkLm1rIGIvdGVzdHMvbW9kZXRlc3QvQW5kcm9pZC5tawppbmRl eCAwZmRmZTY4NTZiZDYuLmU2MTY1NThmZDY5MCAxMDA2NDQKLS0tIGEvdGVzdHMvbW9kZXRlc3Qv QW5kcm9pZC5taworKysgYi90ZXN0cy9tb2RldGVzdC9BbmRyb2lkLm1rCkBAIC04LDUgKzgsNiBA QCBMT0NBTF9TUkNfRklMRVMgOj0gJChNT0RFVEVTVF9GSUxFUykKIExPQ0FMX01PRFVMRSA6PSBt b2RldGVzdAogCiBMT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IGxpYmRybQorTE9DQUxfU1RBVElD X0xJQlJBUklFUyA6PSBsaWJkcm1fdXRpbAogCiBpbmNsdWRlICQoQlVJTERfRVhFQ1VUQUJMRSkK ZGlmZiAtLWdpdCBhL3Rlc3RzL21vZGV0ZXN0L01ha2VmaWxlLmFtIGIvdGVzdHMvbW9kZXRlc3Qv TWFrZWZpbGUuYW0KaW5kZXggOTM4MjBmYWM3Mzk1Li4yNWNlMzcyZmMzMDMgMTAwNjQ0Ci0tLSBh L3Rlc3RzL21vZGV0ZXN0L01ha2VmaWxlLmFtCisrKyBiL3Rlc3RzL21vZGV0ZXN0L01ha2VmaWxl LmFtCkBAIC00LDYgKzQsNyBAQCBBTV9DRkxBR1MgPSAkKGZpbHRlci1vdXQgLVdwb2ludGVyLWFy aXRoLCAkKFdBUk5fQ0ZMQUdTKSkKIAogQU1fQ0ZMQUdTICs9IFwKIAktSSQodG9wX3NyY2Rpcikv aW5jbHVkZS9kcm0gXAorCS1JJCh0b3Bfc3JjZGlyKS90ZXN0cyBcCiAJLUkkKHRvcF9zcmNkaXIp CiAKIGlmIEhBVkVfSU5TVEFMTF9URVNUUwpAQCAtMTgsMTEgKzE5LDggQEAgbW9kZXRlc3RfU09V UkNFUyA9ICQoTU9ERVRFU1RfRklMRVMpCiAKIG1vZGV0ZXN0X0xEQUREID0gXAogCSQodG9wX2J1 aWxkZGlyKS9saWJkcm0ubGEgXAorCSQodG9wX2J1aWxkZGlyKS90ZXN0cy91dGlsL2xpYnV0aWwu bGEgXAorCSQoQ0FJUk9fTElCUykgXAogCS1scHRocmVhZAogCi1pZiBIQVZFX0NBSVJPCi1BTV9D RkxBR1MgKz0gJChDQUlST19DRkxBR1MpCi1tb2RldGVzdF9MREFERCArPSAkKENBSVJPX0xJQlMp Ci1lbmRpZgotCiBFWFRSQV9ESVNUID0gQW5kcm9pZC5tawpkaWZmIC0tZ2l0IGEvdGVzdHMvbW9k ZXRlc3QvYnVmZmVycy5jIGIvdGVzdHMvbW9kZXRlc3QvYnVmZmVycy5jCmluZGV4IGViYjE0ZWY4 YmVkYi4uNGZkMzEwYjliMDBiIDEwMDY0NAotLS0gYS90ZXN0cy9tb2RldGVzdC9idWZmZXJzLmMK KysrIGIvdGVzdHMvbW9kZXRlc3QvYnVmZmVycy5jCkBAIC00NCwxMyArNDQsNiBAQAogCiAjaW5j bHVkZSAiYnVmZmVycy5oIgogCi0jaWZkZWYgSEFWRV9DQUlSTwotI2luY2x1ZGUgPG1hdGguaD4K LSNpbmNsdWRlIDxjYWlyby5oPgotI2VuZGlmCi0KLSNkZWZpbmUgQVJSQVlfU0laRShhcnIpIChz aXplb2YoYXJyKSAvIHNpemVvZigoYXJyKVswXSkpCi0KIHN0cnVjdCBibwogewogCWludCBmZDsK QEAgLTYyLDk1NiArNTUsNiBAQCBzdHJ1Y3QgYm8KIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCi0gKiBGb3JtYXRzCi0gKi8KLQotc3RydWN0IGNvbG9yX2NvbXBvbmVudCB7Ci0JdW5zaWdu ZWQgaW50IGxlbmd0aDsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0OwotfTsKLQotc3RydWN0IHJnYl9p bmZvIHsKLQlzdHJ1Y3QgY29sb3JfY29tcG9uZW50IHJlZDsKLQlzdHJ1Y3QgY29sb3JfY29tcG9u ZW50IGdyZWVuOwotCXN0cnVjdCBjb2xvcl9jb21wb25lbnQgYmx1ZTsKLQlzdHJ1Y3QgY29sb3Jf Y29tcG9uZW50IGFscGhhOwotfTsKLQotZW51bSB5dXZfb3JkZXIgewotCVlVVl9ZQ2JDciA9IDEs Ci0JWVVWX1lDckNiID0gMiwKLQlZVVZfWUMgPSA0LAotCVlVVl9DWSA9IDgsCi19OwotCi1zdHJ1 Y3QgeXV2X2luZm8gewotCWVudW0geXV2X29yZGVyIG9yZGVyOwotCXVuc2lnbmVkIGludCB4c3Vi OwotCXVuc2lnbmVkIGludCB5c3ViOwotCXVuc2lnbmVkIGludCBjaHJvbWFfc3RyaWRlOwotfTsK LQotc3RydWN0IGZvcm1hdF9pbmZvIHsKLQl1bnNpZ25lZCBpbnQgZm9ybWF0OwotCWNvbnN0IGNo YXIgKm5hbWU7Ci0JY29uc3Qgc3RydWN0IHJnYl9pbmZvIHJnYjsKLQljb25zdCBzdHJ1Y3QgeXV2 X2luZm8geXV2OwotfTsKLQotI2RlZmluZSBNQUtFX1JHQl9JTkZPKHJsLCBybywgZ2wsIGdvLCBi bCwgYm8sIGFsLCBhbykgXAotCS5yZ2IgPSB7IHsgKHJsKSwgKHJvKSB9LCB7IChnbCksIChnbykg fSwgeyAoYmwpLCAoYm8pIH0sIHsgKGFsKSwgKGFvKSB9IH0KLQotI2RlZmluZSBNQUtFX1lVVl9J TkZPKG9yZGVyLCB4c3ViLCB5c3ViLCBjaHJvbWFfc3RyaWRlKSBcCi0JLnl1diA9IHsgKG9yZGVy KSwgKHhzdWIpLCAoeXN1YiksIChjaHJvbWFfc3RyaWRlKSB9Ci0KLXN0YXRpYyBjb25zdCBzdHJ1 Y3QgZm9ybWF0X2luZm8gZm9ybWF0X2luZm9bXSA9IHsKLQkvKiBZVVYgcGFja2VkICovCi0JeyBE Uk1fRk9STUFUX1VZVlksICJVWVZZIiwgTUFLRV9ZVVZfSU5GTyhZVVZfWUNiQ3IgfCBZVVZfQ1ks IDIsIDIsIDIpIH0sCi0JeyBEUk1fRk9STUFUX1ZZVVksICJWWVVZIiwgTUFLRV9ZVVZfSU5GTyhZ VVZfWUNyQ2IgfCBZVVZfQ1ksIDIsIDIsIDIpIH0sCi0JeyBEUk1fRk9STUFUX1lVWVYsICJZVVlW IiwgTUFLRV9ZVVZfSU5GTyhZVVZfWUNiQ3IgfCBZVVZfWUMsIDIsIDIsIDIpIH0sCi0JeyBEUk1f Rk9STUFUX1lWWVUsICJZVllVIiwgTUFLRV9ZVVZfSU5GTyhZVVZfWUNyQ2IgfCBZVVZfWUMsIDIs IDIsIDIpIH0sCi0JLyogWVVWIHNlbWktcGxhbmFyICovCi0JeyBEUk1fRk9STUFUX05WMTIsICJO VjEyIiwgTUFLRV9ZVVZfSU5GTyhZVVZfWUNiQ3IsIDIsIDIsIDIpIH0sCi0JeyBEUk1fRk9STUFU X05WMjEsICJOVjIxIiwgTUFLRV9ZVVZfSU5GTyhZVVZfWUNyQ2IsIDIsIDIsIDIpIH0sCi0JeyBE Uk1fRk9STUFUX05WMTYsICJOVjE2IiwgTUFLRV9ZVVZfSU5GTyhZVVZfWUNiQ3IsIDIsIDEsIDIp IH0sCi0JeyBEUk1fRk9STUFUX05WNjEsICJOVjYxIiwgTUFLRV9ZVVZfSU5GTyhZVVZfWUNyQ2Is IDIsIDEsIDIpIH0sCi0JLyogWVVWIHBsYW5hciAqLwotCXsgRFJNX0ZPUk1BVF9ZVVY0MjAsICJZ VTEyIiwgTUFLRV9ZVVZfSU5GTyhZVVZfWUNiQ3IsIDIsIDIsIDEpIH0sCi0JeyBEUk1fRk9STUFU X1lWVTQyMCwgIllWMTIiLCBNQUtFX1lVVl9JTkZPKFlVVl9ZQ3JDYiwgMiwgMiwgMSkgfSwKLQkv KiBSR0IxNiAqLwotCXsgRFJNX0ZPUk1BVF9BUkdCNDQ0NCwgIkFSMTIiLCBNQUtFX1JHQl9JTkZP KDQsIDgsIDQsIDQsIDQsIDAsIDQsIDEyKSB9LAotCXsgRFJNX0ZPUk1BVF9YUkdCNDQ0NCwgIlhS MTIiLCBNQUtFX1JHQl9JTkZPKDQsIDgsIDQsIDQsIDQsIDAsIDAsIDApIH0sCi0JeyBEUk1fRk9S TUFUX0FCR1I0NDQ0LCAiQUIxMiIsIE1BS0VfUkdCX0lORk8oNCwgMCwgNCwgNCwgNCwgOCwgNCwg MTIpIH0sCi0JeyBEUk1fRk9STUFUX1hCR1I0NDQ0LCAiWEIxMiIsIE1BS0VfUkdCX0lORk8oNCwg MCwgNCwgNCwgNCwgOCwgMCwgMCkgfSwKLQl7IERSTV9GT1JNQVRfUkdCQTQ0NDQsICJSQTEyIiwg TUFLRV9SR0JfSU5GTyg0LCAxMiwgNCwgOCwgNCwgNCwgNCwgMCkgfSwKLQl7IERSTV9GT1JNQVRf UkdCWDQ0NDQsICJSWDEyIiwgTUFLRV9SR0JfSU5GTyg0LCAxMiwgNCwgOCwgNCwgNCwgMCwgMCkg fSwKLQl7IERSTV9GT1JNQVRfQkdSQTQ0NDQsICJCQTEyIiwgTUFLRV9SR0JfSU5GTyg0LCA0LCA0 LCA4LCA0LCAxMiwgNCwgMCkgfSwKLQl7IERSTV9GT1JNQVRfQkdSWDQ0NDQsICJCWDEyIiwgTUFL RV9SR0JfSU5GTyg0LCA0LCA0LCA4LCA0LCAxMiwgMCwgMCkgfSwKLQl7IERSTV9GT1JNQVRfQVJH QjE1NTUsICJBUjE1IiwgTUFLRV9SR0JfSU5GTyg1LCAxMCwgNSwgNSwgNSwgMCwgMSwgMTUpIH0s Ci0JeyBEUk1fRk9STUFUX1hSR0IxNTU1LCAiWFIxNSIsIE1BS0VfUkdCX0lORk8oNSwgMTAsIDUs IDUsIDUsIDAsIDAsIDApIH0sCi0JeyBEUk1fRk9STUFUX0FCR1IxNTU1LCAiQUIxNSIsIE1BS0Vf UkdCX0lORk8oNSwgMCwgNSwgNSwgNSwgMTAsIDEsIDE1KSB9LAotCXsgRFJNX0ZPUk1BVF9YQkdS MTU1NSwgIlhCMTUiLCBNQUtFX1JHQl9JTkZPKDUsIDAsIDUsIDUsIDUsIDEwLCAwLCAwKSB9LAot CXsgRFJNX0ZPUk1BVF9SR0JBNTU1MSwgIlJBMTUiLCBNQUtFX1JHQl9JTkZPKDUsIDExLCA1LCA2 LCA1LCAxLCAxLCAwKSB9LAotCXsgRFJNX0ZPUk1BVF9SR0JYNTU1MSwgIlJYMTUiLCBNQUtFX1JH Ql9JTkZPKDUsIDExLCA1LCA2LCA1LCAxLCAwLCAwKSB9LAotCXsgRFJNX0ZPUk1BVF9CR1JBNTU1 MSwgIkJBMTUiLCBNQUtFX1JHQl9JTkZPKDUsIDEsIDUsIDYsIDUsIDExLCAxLCAwKSB9LAotCXsg RFJNX0ZPUk1BVF9CR1JYNTU1MSwgIkJYMTUiLCBNQUtFX1JHQl9JTkZPKDUsIDEsIDUsIDYsIDUs IDExLCAwLCAwKSB9LAotCXsgRFJNX0ZPUk1BVF9SR0I1NjUsICJSRzE2IiwgTUFLRV9SR0JfSU5G Tyg1LCAxMSwgNiwgNSwgNSwgMCwgMCwgMCkgfSwKLQl7IERSTV9GT1JNQVRfQkdSNTY1LCAiQkcx NiIsIE1BS0VfUkdCX0lORk8oNSwgMCwgNiwgNSwgNSwgMTEsIDAsIDApIH0sCi0JLyogUkdCMjQg Ki8KLQl7IERSTV9GT1JNQVRfQkdSODg4LCAiQkcyNCIsIE1BS0VfUkdCX0lORk8oOCwgMCwgOCwg OCwgOCwgMTYsIDAsIDApIH0sCi0JeyBEUk1fRk9STUFUX1JHQjg4OCwgIlJHMjQiLCBNQUtFX1JH Ql9JTkZPKDgsIDE2LCA4LCA4LCA4LCAwLCAwLCAwKSB9LAotCS8qIFJHQjMyICovCi0JeyBEUk1f Rk9STUFUX0FSR0I4ODg4LCAiQVIyNCIsIE1BS0VfUkdCX0lORk8oOCwgMTYsIDgsIDgsIDgsIDAs IDgsIDI0KSB9LAotCXsgRFJNX0ZPUk1BVF9YUkdCODg4OCwgIlhSMjQiLCBNQUtFX1JHQl9JTkZP KDgsIDE2LCA4LCA4LCA4LCAwLCAwLCAwKSB9LAotCXsgRFJNX0ZPUk1BVF9BQkdSODg4OCwgIkFC MjQiLCBNQUtFX1JHQl9JTkZPKDgsIDAsIDgsIDgsIDgsIDE2LCA4LCAyNCkgfSwKLQl7IERSTV9G T1JNQVRfWEJHUjg4ODgsICJYQjI0IiwgTUFLRV9SR0JfSU5GTyg4LCAwLCA4LCA4LCA4LCAxNiwg MCwgMCkgfSwKLQl7IERSTV9GT1JNQVRfUkdCQTg4ODgsICJSQTI0IiwgTUFLRV9SR0JfSU5GTyg4 LCAyNCwgOCwgMTYsIDgsIDgsIDgsIDApIH0sCi0JeyBEUk1fRk9STUFUX1JHQlg4ODg4LCAiUlgy NCIsIE1BS0VfUkdCX0lORk8oOCwgMjQsIDgsIDE2LCA4LCA4LCAwLCAwKSB9LAotCXsgRFJNX0ZP Uk1BVF9CR1JBODg4OCwgIkJBMjQiLCBNQUtFX1JHQl9JTkZPKDgsIDgsIDgsIDE2LCA4LCAyNCwg OCwgMCkgfSwKLQl7IERSTV9GT1JNQVRfQkdSWDg4ODgsICJCWDI0IiwgTUFLRV9SR0JfSU5GTyg4 LCA4LCA4LCAxNiwgOCwgMjQsIDAsIDApIH0sCi0JeyBEUk1fRk9STUFUX0FSR0IyMTAxMDEwLCAi QVIzMCIsIE1BS0VfUkdCX0lORk8oMTAsIDIwLCAxMCwgMTAsIDEwLCAwLCAyLCAzMCkgfSwKLQl7 IERSTV9GT1JNQVRfWFJHQjIxMDEwMTAsICJYUjMwIiwgTUFLRV9SR0JfSU5GTygxMCwgMjAsIDEw LCAxMCwgMTAsIDAsIDAsIDApIH0sCi0JeyBEUk1fRk9STUFUX0FCR1IyMTAxMDEwLCAiQUIzMCIs IE1BS0VfUkdCX0lORk8oMTAsIDAsIDEwLCAxMCwgMTAsIDIwLCAyLCAzMCkgfSwKLQl7IERSTV9G T1JNQVRfWEJHUjIxMDEwMTAsICJYQjMwIiwgTUFLRV9SR0JfSU5GTygxMCwgMCwgMTAsIDEwLCAx MCwgMjAsIDAsIDApIH0sCi0JeyBEUk1fRk9STUFUX1JHQkExMDEwMTAyLCAiUkEzMCIsIE1BS0Vf UkdCX0lORk8oMTAsIDIyLCAxMCwgMTIsIDEwLCAyLCAyLCAwKSB9LAotCXsgRFJNX0ZPUk1BVF9S R0JYMTAxMDEwMiwgIlJYMzAiLCBNQUtFX1JHQl9JTkZPKDEwLCAyMiwgMTAsIDEyLCAxMCwgMiwg MCwgMCkgfSwKLQl7IERSTV9GT1JNQVRfQkdSQTEwMTAxMDIsICJCQTMwIiwgTUFLRV9SR0JfSU5G TygxMCwgMiwgMTAsIDEyLCAxMCwgMjIsIDIsIDApIH0sCi0JeyBEUk1fRk9STUFUX0JHUlgxMDEw MTAyLCAiQlgzMCIsIE1BS0VfUkdCX0lORk8oMTAsIDIsIDEwLCAxMiwgMTAsIDIyLCAwLCAwKSB9 LAotfTsKLQotdW5zaWduZWQgaW50IGZvcm1hdF9mb3VyY2MoY29uc3QgY2hhciAqbmFtZSkKLXsK LQl1bnNpZ25lZCBpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmb3JtYXRfaW5m byk7IGkrKykgewotCQlpZiAoIXN0cmNtcChmb3JtYXRfaW5mb1tpXS5uYW1lLCBuYW1lKSkKLQkJ CXJldHVybiBmb3JtYXRfaW5mb1tpXS5mb3JtYXQ7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQotICogVGVzdCBwYXR0ZXJucwotICovCi0KLXN0cnVjdCBjb2xv cl9yZ2IyNCB7Ci0JdW5zaWduZWQgaW50IHZhbHVlOjI0OwotfSBfX2F0dHJpYnV0ZV9fKChfX3Bh Y2tlZF9fKSk7Ci0KLXN0cnVjdCBjb2xvcl95dXYgewotCXVuc2lnbmVkIGNoYXIgeTsKLQl1bnNp Z25lZCBjaGFyIHU7Ci0JdW5zaWduZWQgY2hhciB2OwotfTsKLQotI2RlZmluZSBNQUtFX1lVVl82 MDFfWShyLCBnLCBiKSBcCi0JKCgoIDY2ICogKHIpICsgMTI5ICogKGcpICsgIDI1ICogKGIpICsg MTI4KSA+PiA4KSArIDE2KQotI2RlZmluZSBNQUtFX1lVVl82MDFfVShyLCBnLCBiKSBcCi0JKCgo LTM4ICogKHIpIC0gIDc0ICogKGcpICsgMTEyICogKGIpICsgMTI4KSA+PiA4KSArIDEyOCkKLSNk ZWZpbmUgTUFLRV9ZVVZfNjAxX1YociwgZywgYikgXAotCSgoKDExMiAqIChyKSAtICA5NCAqIChn KSAtICAxOCAqIChiKSArIDEyOCkgPj4gOCkgKyAxMjgpCi0KLSNkZWZpbmUgTUFLRV9ZVVZfNjAx KHIsIGcsIGIpIFwKLQl7IC55ID0gTUFLRV9ZVVZfNjAxX1kociwgZywgYiksIFwKLQkgIC51ID0g TUFLRV9ZVVZfNjAxX1UociwgZywgYiksIFwKLQkgIC52ID0gTUFLRV9ZVVZfNjAxX1YociwgZywg YikgfQotCi0jZGVmaW5lIE1BS0VfUkdCQShyZ2IsIHIsIGcsIGIsIGEpIFwKLQkoKCgocikgPj4g KDggLSAocmdiKS0+cmVkLmxlbmd0aCkpIDw8IChyZ2IpLT5yZWQub2Zmc2V0KSB8IFwKLQkgKCgo ZykgPj4gKDggLSAocmdiKS0+Z3JlZW4ubGVuZ3RoKSkgPDwgKHJnYiktPmdyZWVuLm9mZnNldCkg fCBcCi0JICgoKGIpID4+ICg4IC0gKHJnYiktPmJsdWUubGVuZ3RoKSkgPDwgKHJnYiktPmJsdWUu b2Zmc2V0KSB8IFwKLQkgKCgoYSkgPj4gKDggLSAocmdiKS0+YWxwaGEubGVuZ3RoKSkgPDwgKHJn YiktPmFscGhhLm9mZnNldCkpCi0KLSNkZWZpbmUgTUFLRV9SR0IyNChyZ2IsIHIsIGcsIGIpIFwK LQl7IC52YWx1ZSA9IE1BS0VfUkdCQShyZ2IsIHIsIGcsIGIsIDApIH0KLQotc3RhdGljIHZvaWQK LWZpbGxfc21wdGVfeXV2X3BsYW5hcihjb25zdCBzdHJ1Y3QgeXV2X2luZm8gKnl1diwKLQkJICAg ICAgdW5zaWduZWQgY2hhciAqeV9tZW0sIHVuc2lnbmVkIGNoYXIgKnVfbWVtLAotCQkgICAgICB1 bnNpZ25lZCBjaGFyICp2X21lbSwgdW5zaWduZWQgaW50IHdpZHRoLAotCQkgICAgICB1bnNpZ25l ZCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBpbnQgc3RyaWRlKQotewotCWNvbnN0IHN0cnVjdCBjb2xv cl95dXYgY29sb3JzX3RvcFtdID0gewotCQlNQUtFX1lVVl82MDEoMTkxLCAxOTIsIDE5MiksCS8q IGdyZXkgKi8KLQkJTUFLRV9ZVVZfNjAxKDE5MiwgMTkyLCAwKSwJLyogeWVsbG93ICovCi0JCU1B S0VfWVVWXzYwMSgwLCAxOTIsIDE5MiksCS8qIGN5YW4gKi8KLQkJTUFLRV9ZVVZfNjAxKDAsIDE5 MiwgMCksCS8qIGdyZWVuICovCi0JCU1BS0VfWVVWXzYwMSgxOTIsIDAsIDE5MiksCS8qIG1hZ2Vu dGEgKi8KLQkJTUFLRV9ZVVZfNjAxKDE5MiwgMCwgMCksCS8qIHJlZCAqLwotCQlNQUtFX1lVVl82 MDEoMCwgMCwgMTkyKSwJLyogYmx1ZSAqLwotCX07Ci0JY29uc3Qgc3RydWN0IGNvbG9yX3l1diBj b2xvcnNfbWlkZGxlW10gPSB7Ci0JCU1BS0VfWVVWXzYwMSgwLCAwLCAxOTIpLAkvKiBibHVlICov Ci0JCU1BS0VfWVVWXzYwMSgxOSwgMTksIDE5KSwJLyogYmxhY2sgKi8KLQkJTUFLRV9ZVVZfNjAx KDE5MiwgMCwgMTkyKSwJLyogbWFnZW50YSAqLwotCQlNQUtFX1lVVl82MDEoMTksIDE5LCAxOSks CS8qIGJsYWNrICovCi0JCU1BS0VfWVVWXzYwMSgwLCAxOTIsIDE5MiksCS8qIGN5YW4gKi8KLQkJ TUFLRV9ZVVZfNjAxKDE5LCAxOSwgMTkpLAkvKiBibGFjayAqLwotCQlNQUtFX1lVVl82MDEoMTky LCAxOTIsIDE5MiksCS8qIGdyZXkgKi8KLQl9OwotCWNvbnN0IHN0cnVjdCBjb2xvcl95dXYgY29s b3JzX2JvdHRvbVtdID0gewotCQlNQUtFX1lVVl82MDEoMCwgMzMsIDc2KSwJLyogaW4tcGhhc2Ug Ki8KLQkJTUFLRV9ZVVZfNjAxKDI1NSwgMjU1LCAyNTUpLAkvKiBzdXBlciB3aGl0ZSAqLwotCQlN QUtFX1lVVl82MDEoNTAsIDAsIDEwNiksCS8qIHF1YWRyYXR1cmUgKi8KLQkJTUFLRV9ZVVZfNjAx KDE5LCAxOSwgMTkpLAkvKiBibGFjayAqLwotCQlNQUtFX1lVVl82MDEoOSwgOSwgOSksCQkvKiAz LjUlICovCi0JCU1BS0VfWVVWXzYwMSgxOSwgMTksIDE5KSwJLyogNy41JSAqLwotCQlNQUtFX1lV Vl82MDEoMjksIDI5LCAyOSksCS8qIDExLjUlICovCi0JCU1BS0VfWVVWXzYwMSgxOSwgMTksIDE5 KSwJLyogYmxhY2sgKi8KLQl9OwotCXVuc2lnbmVkIGludCBjcyA9IHl1di0+Y2hyb21hX3N0cmlk ZTsKLQl1bnNpZ25lZCBpbnQgeHN1YiA9IHl1di0+eHN1YjsKLQl1bnNpZ25lZCBpbnQgeXN1YiA9 IHl1di0+eXN1YjsKLQl1bnNpZ25lZCBpbnQgeDsKLQl1bnNpZ25lZCBpbnQgeTsKLQotCS8qIEx1 bWEgKi8KLQlmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0ICogNiAvIDk7ICsreSkgewotCQlmb3IgKHgg PSAwOyB4IDwgd2lkdGg7ICsreCkKLQkJCXlfbWVtW3hdID0gY29sb3JzX3RvcFt4ICogNyAvIHdp ZHRoXS55OwotCQl5X21lbSArPSBzdHJpZGU7Ci0JfQotCi0JZm9yICg7IHkgPCBoZWlnaHQgKiA3 IC8gOTsgKyt5KSB7Ci0JCWZvciAoeCA9IDA7IHggPCB3aWR0aDsgKyt4KQotCQkJeV9tZW1beF0g PSBjb2xvcnNfbWlkZGxlW3ggKiA3IC8gd2lkdGhdLnk7Ci0JCXlfbWVtICs9IHN0cmlkZTsKLQl9 Ci0KLQlmb3IgKDsgeSA8IGhlaWdodDsgKyt5KSB7Ci0JCWZvciAoeCA9IDA7IHggPCB3aWR0aCAq IDUgLyA3OyArK3gpCi0JCQl5X21lbVt4XSA9IGNvbG9yc19ib3R0b21beCAqIDQgLyAod2lkdGgg KiA1IC8gNyldLnk7Ci0JCWZvciAoOyB4IDwgd2lkdGggKiA2IC8gNzsgKyt4KQotCQkJeV9tZW1b eF0gPSBjb2xvcnNfYm90dG9tWyh4IC0gd2lkdGggKiA1IC8gNykgKiAzCi0JCQkJCQkgLyAod2lk dGggLyA3KSArIDRdLnk7Ci0JCWZvciAoOyB4IDwgd2lkdGg7ICsreCkKLQkJCXlfbWVtW3hdID0g Y29sb3JzX2JvdHRvbVs3XS55OwotCQl5X21lbSArPSBzdHJpZGU7Ci0JfQotCi0JLyogQ2hyb21h ICovCi0JZm9yICh5ID0gMDsgeSA8IGhlaWdodCAvIHlzdWIgKiA2IC8gOTsgKyt5KSB7Ci0JCWZv ciAoeCA9IDA7IHggPCB3aWR0aDsgeCArPSB4c3ViKSB7Ci0JCQl1X21lbVt4KmNzL3hzdWJdID0g Y29sb3JzX3RvcFt4ICogNyAvIHdpZHRoXS51OwotCQkJdl9tZW1beCpjcy94c3ViXSA9IGNvbG9y c190b3BbeCAqIDcgLyB3aWR0aF0udjsKLQkJfQotCQl1X21lbSArPSBzdHJpZGUgKiBjcyAvIHhz dWI7Ci0JCXZfbWVtICs9IHN0cmlkZSAqIGNzIC8geHN1YjsKLQl9Ci0KLQlmb3IgKDsgeSA8IGhl aWdodCAvIHlzdWIgKiA3IC8gOTsgKyt5KSB7Ci0JCWZvciAoeCA9IDA7IHggPCB3aWR0aDsgeCAr PSB4c3ViKSB7Ci0JCQl1X21lbVt4KmNzL3hzdWJdID0gY29sb3JzX21pZGRsZVt4ICogNyAvIHdp ZHRoXS51OwotCQkJdl9tZW1beCpjcy94c3ViXSA9IGNvbG9yc19taWRkbGVbeCAqIDcgLyB3aWR0 aF0udjsKLQkJfQotCQl1X21lbSArPSBzdHJpZGUgKiBjcyAvIHhzdWI7Ci0JCXZfbWVtICs9IHN0 cmlkZSAqIGNzIC8geHN1YjsKLQl9Ci0KLQlmb3IgKDsgeSA8IGhlaWdodCAvIHlzdWI7ICsreSkg ewotCQlmb3IgKHggPSAwOyB4IDwgd2lkdGggKiA1IC8gNzsgeCArPSB4c3ViKSB7Ci0JCQl1X21l bVt4KmNzL3hzdWJdID0KLQkJCQljb2xvcnNfYm90dG9tW3ggKiA0IC8gKHdpZHRoICogNSAvIDcp XS51OwotCQkJdl9tZW1beCpjcy94c3ViXSA9Ci0JCQkJY29sb3JzX2JvdHRvbVt4ICogNCAvICh3 aWR0aCAqIDUgLyA3KV0udjsKLQkJfQotCQlmb3IgKDsgeCA8IHdpZHRoICogNiAvIDc7IHggKz0g eHN1YikgewotCQkJdV9tZW1beCpjcy94c3ViXSA9IGNvbG9yc19ib3R0b21bKHggLSB3aWR0aCAq IDUgLyA3KSAqCi0JCQkJCQkJIDMgLyAod2lkdGggLyA3KSArIDRdLnU7Ci0JCQl2X21lbVt4KmNz L3hzdWJdID0gY29sb3JzX2JvdHRvbVsoeCAtIHdpZHRoICogNSAvIDcpICoKLQkJCQkJCQkgMyAv ICh3aWR0aCAvIDcpICsgNF0udjsKLQkJfQotCQlmb3IgKDsgeCA8IHdpZHRoOyB4ICs9IHhzdWIp IHsKLQkJCXVfbWVtW3gqY3MveHN1Yl0gPSBjb2xvcnNfYm90dG9tWzddLnU7Ci0JCQl2X21lbVt4 KmNzL3hzdWJdID0gY29sb3JzX2JvdHRvbVs3XS52OwotCQl9Ci0JCXVfbWVtICs9IHN0cmlkZSAq IGNzIC8geHN1YjsKLQkJdl9tZW0gKz0gc3RyaWRlICogY3MgLyB4c3ViOwotCX0KLX0KLQotc3Rh dGljIHZvaWQKLWZpbGxfc21wdGVfeXV2X3BhY2tlZChjb25zdCBzdHJ1Y3QgeXV2X2luZm8gKnl1 diwgdW5zaWduZWQgY2hhciAqbWVtLAotCQkgICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2ln bmVkIGludCBoZWlnaHQsCi0JCSAgICAgIHVuc2lnbmVkIGludCBzdHJpZGUpCi17Ci0JY29uc3Qg c3RydWN0IGNvbG9yX3l1diBjb2xvcnNfdG9wW10gPSB7Ci0JCU1BS0VfWVVWXzYwMSgxOTEsIDE5 MiwgMTkyKSwJLyogZ3JleSAqLwotCQlNQUtFX1lVVl82MDEoMTkyLCAxOTIsIDApLAkvKiB5ZWxs b3cgKi8KLQkJTUFLRV9ZVVZfNjAxKDAsIDE5MiwgMTkyKSwJLyogY3lhbiAqLwotCQlNQUtFX1lV Vl82MDEoMCwgMTkyLCAwKSwJLyogZ3JlZW4gKi8KLQkJTUFLRV9ZVVZfNjAxKDE5MiwgMCwgMTky KSwJLyogbWFnZW50YSAqLwotCQlNQUtFX1lVVl82MDEoMTkyLCAwLCAwKSwJLyogcmVkICovCi0J CU1BS0VfWVVWXzYwMSgwLCAwLCAxOTIpLAkvKiBibHVlICovCi0JfTsKLQljb25zdCBzdHJ1Y3Qg Y29sb3JfeXV2IGNvbG9yc19taWRkbGVbXSA9IHsKLQkJTUFLRV9ZVVZfNjAxKDAsIDAsIDE5Miks CS8qIGJsdWUgKi8KLQkJTUFLRV9ZVVZfNjAxKDE5LCAxOSwgMTkpLAkvKiBibGFjayAqLwotCQlN QUtFX1lVVl82MDEoMTkyLCAwLCAxOTIpLAkvKiBtYWdlbnRhICovCi0JCU1BS0VfWVVWXzYwMSgx OSwgMTksIDE5KSwJLyogYmxhY2sgKi8KLQkJTUFLRV9ZVVZfNjAxKDAsIDE5MiwgMTkyKSwJLyog Y3lhbiAqLwotCQlNQUtFX1lVVl82MDEoMTksIDE5LCAxOSksCS8qIGJsYWNrICovCi0JCU1BS0Vf WVVWXzYwMSgxOTIsIDE5MiwgMTkyKSwJLyogZ3JleSAqLwotCX07Ci0JY29uc3Qgc3RydWN0IGNv bG9yX3l1diBjb2xvcnNfYm90dG9tW10gPSB7Ci0JCU1BS0VfWVVWXzYwMSgwLCAzMywgNzYpLAkv KiBpbi1waGFzZSAqLwotCQlNQUtFX1lVVl82MDEoMjU1LCAyNTUsIDI1NSksCS8qIHN1cGVyIHdo aXRlICovCi0JCU1BS0VfWVVWXzYwMSg1MCwgMCwgMTA2KSwJLyogcXVhZHJhdHVyZSAqLwotCQlN QUtFX1lVVl82MDEoMTksIDE5LCAxOSksCS8qIGJsYWNrICovCi0JCU1BS0VfWVVWXzYwMSg5LCA5 LCA5KSwJCS8qIDMuNSUgKi8KLQkJTUFLRV9ZVVZfNjAxKDE5LCAxOSwgMTkpLAkvKiA3LjUlICov Ci0JCU1BS0VfWVVWXzYwMSgyOSwgMjksIDI5KSwJLyogMTEuNSUgKi8KLQkJTUFLRV9ZVVZfNjAx KDE5LCAxOSwgMTkpLAkvKiBibGFjayAqLwotCX07Ci0JdW5zaWduZWQgY2hhciAqeV9tZW0gPSAo eXV2LT5vcmRlciAmIFlVVl9ZQykgPyBtZW0gOiBtZW0gKyAxOwotCXVuc2lnbmVkIGNoYXIgKmNf bWVtID0gKHl1di0+b3JkZXIgJiBZVVZfQ1kpID8gbWVtIDogbWVtICsgMTsKLQl1bnNpZ25lZCBp bnQgdSA9ICh5dXYtPm9yZGVyICYgWVVWX1lDckNiKSA/IDIgOiAwOwotCXVuc2lnbmVkIGludCB2 ID0gKHl1di0+b3JkZXIgJiBZVVZfWUNiQ3IpID8gMiA6IDA7Ci0JdW5zaWduZWQgaW50IHg7Ci0J dW5zaWduZWQgaW50IHk7Ci0KLQkvKiBMdW1hICovCi0JZm9yICh5ID0gMDsgeSA8IGhlaWdodCAq IDYgLyA5OyArK3kpIHsKLQkJZm9yICh4ID0gMDsgeCA8IHdpZHRoOyArK3gpCi0JCQl5X21lbVsy KnhdID0gY29sb3JzX3RvcFt4ICogNyAvIHdpZHRoXS55OwotCQl5X21lbSArPSBzdHJpZGU7Ci0J fQotCi0JZm9yICg7IHkgPCBoZWlnaHQgKiA3IC8gOTsgKyt5KSB7Ci0JCWZvciAoeCA9IDA7IHgg PCB3aWR0aDsgKyt4KQotCQkJeV9tZW1bMip4XSA9IGNvbG9yc19taWRkbGVbeCAqIDcgLyB3aWR0 aF0ueTsKLQkJeV9tZW0gKz0gc3RyaWRlOwotCX0KLQotCWZvciAoOyB5IDwgaGVpZ2h0OyArK3kp IHsKLQkJZm9yICh4ID0gMDsgeCA8IHdpZHRoICogNSAvIDc7ICsreCkKLQkJCXlfbWVtWzIqeF0g PSBjb2xvcnNfYm90dG9tW3ggKiA0IC8gKHdpZHRoICogNSAvIDcpXS55OwotCQlmb3IgKDsgeCA8 IHdpZHRoICogNiAvIDc7ICsreCkKLQkJCXlfbWVtWzIqeF0gPSBjb2xvcnNfYm90dG9tWyh4IC0g d2lkdGggKiA1IC8gNykgKiAzCi0JCQkJCQkgICAvICh3aWR0aCAvIDcpICsgNF0ueTsKLQkJZm9y ICg7IHggPCB3aWR0aDsgKyt4KQotCQkJeV9tZW1bMip4XSA9IGNvbG9yc19ib3R0b21bN10ueTsK LQkJeV9tZW0gKz0gc3RyaWRlOwotCX0KLQotCS8qIENocm9tYSAqLwotCWZvciAoeSA9IDA7IHkg PCBoZWlnaHQgKiA2IC8gOTsgKyt5KSB7Ci0JCWZvciAoeCA9IDA7IHggPCB3aWR0aDsgeCArPSAy KSB7Ci0JCQljX21lbVsyKngrdV0gPSBjb2xvcnNfdG9wW3ggKiA3IC8gd2lkdGhdLnU7Ci0JCQlj X21lbVsyKngrdl0gPSBjb2xvcnNfdG9wW3ggKiA3IC8gd2lkdGhdLnY7Ci0JCX0KLQkJY19tZW0g Kz0gc3RyaWRlOwotCX0KLQotCWZvciAoOyB5IDwgaGVpZ2h0ICogNyAvIDk7ICsreSkgewotCQlm b3IgKHggPSAwOyB4IDwgd2lkdGg7IHggKz0gMikgewotCQkJY19tZW1bMip4K3VdID0gY29sb3Jz X21pZGRsZVt4ICogNyAvIHdpZHRoXS51OwotCQkJY19tZW1bMip4K3ZdID0gY29sb3JzX21pZGRs ZVt4ICogNyAvIHdpZHRoXS52OwotCQl9Ci0JCWNfbWVtICs9IHN0cmlkZTsKLQl9Ci0KLQlmb3Ig KDsgeSA8IGhlaWdodDsgKyt5KSB7Ci0JCWZvciAoeCA9IDA7IHggPCB3aWR0aCAqIDUgLyA3OyB4 ICs9IDIpIHsKLQkJCWNfbWVtWzIqeCt1XSA9IGNvbG9yc19ib3R0b21beCAqIDQgLyAod2lkdGgg KiA1IC8gNyldLnU7Ci0JCQljX21lbVsyKngrdl0gPSBjb2xvcnNfYm90dG9tW3ggKiA0IC8gKHdp ZHRoICogNSAvIDcpXS52OwotCQl9Ci0JCWZvciAoOyB4IDwgd2lkdGggKiA2IC8gNzsgeCArPSAy KSB7Ci0JCQljX21lbVsyKngrdV0gPSBjb2xvcnNfYm90dG9tWyh4IC0gd2lkdGggKiA1IC8gNykg KgotCQkJCQkJICAgICAzIC8gKHdpZHRoIC8gNykgKyA0XS51OwotCQkJY19tZW1bMip4K3ZdID0g Y29sb3JzX2JvdHRvbVsoeCAtIHdpZHRoICogNSAvIDcpICoKLQkJCQkJCSAgICAgMyAvICh3aWR0 aCAvIDcpICsgNF0udjsKLQkJfQotCQlmb3IgKDsgeCA8IHdpZHRoOyB4ICs9IDIpIHsKLQkJCWNf bWVtWzIqeCt1XSA9IGNvbG9yc19ib3R0b21bN10udTsKLQkJCWNfbWVtWzIqeCt2XSA9IGNvbG9y c19ib3R0b21bN10udjsKLQkJfQotCQljX21lbSArPSBzdHJpZGU7Ci0JfQotfQotCi1zdGF0aWMg dm9pZAotZmlsbF9zbXB0ZV9yZ2IxNihjb25zdCBzdHJ1Y3QgcmdiX2luZm8gKnJnYiwgdW5zaWdu ZWQgY2hhciAqbWVtLAotCQkgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0 LCB1bnNpZ25lZCBpbnQgc3RyaWRlKQotewotCWNvbnN0IHVpbnQxNl90IGNvbG9yc190b3BbXSA9 IHsKLQkJTUFLRV9SR0JBKHJnYiwgMTkyLCAxOTIsIDE5MiwgMjU1KSwJLyogZ3JleSAqLwotCQlN QUtFX1JHQkEocmdiLCAxOTIsIDE5MiwgMCwgMjU1KSwJLyogeWVsbG93ICovCi0JCU1BS0VfUkdC QShyZ2IsIDAsIDE5MiwgMTkyLCAyNTUpLAkvKiBjeWFuICovCi0JCU1BS0VfUkdCQShyZ2IsIDAs IDE5MiwgMCwgMjU1KSwJCS8qIGdyZWVuICovCi0JCU1BS0VfUkdCQShyZ2IsIDE5MiwgMCwgMTky LCAyNTUpLAkvKiBtYWdlbnRhICovCi0JCU1BS0VfUkdCQShyZ2IsIDE5MiwgMCwgMCwgMjU1KSwJ CS8qIHJlZCAqLwotCQlNQUtFX1JHQkEocmdiLCAwLCAwLCAxOTIsIDI1NSksCQkvKiBibHVlICov Ci0JfTsKLQljb25zdCB1aW50MTZfdCBjb2xvcnNfbWlkZGxlW10gPSB7Ci0JCU1BS0VfUkdCQShy Z2IsIDAsIDAsIDE5MiwgMTI3KSwJCS8qIGJsdWUgKi8KLQkJTUFLRV9SR0JBKHJnYiwgMTksIDE5 LCAxOSwgMTI3KSwJLyogYmxhY2sgKi8KLQkJTUFLRV9SR0JBKHJnYiwgMTkyLCAwLCAxOTIsIDEy NyksCS8qIG1hZ2VudGEgKi8KLQkJTUFLRV9SR0JBKHJnYiwgMTksIDE5LCAxOSwgMTI3KSwJLyog YmxhY2sgKi8KLQkJTUFLRV9SR0JBKHJnYiwgMCwgMTkyLCAxOTIsIDEyNyksCS8qIGN5YW4gKi8K LQkJTUFLRV9SR0JBKHJnYiwgMTksIDE5LCAxOSwgMTI3KSwJLyogYmxhY2sgKi8KLQkJTUFLRV9S R0JBKHJnYiwgMTkyLCAxOTIsIDE5MiwgMTI3KSwJLyogZ3JleSAqLwotCX07Ci0JY29uc3QgdWlu dDE2X3QgY29sb3JzX2JvdHRvbVtdID0gewotCQlNQUtFX1JHQkEocmdiLCAwLCAzMywgNzYsIDI1 NSksCQkvKiBpbi1waGFzZSAqLwotCQlNQUtFX1JHQkEocmdiLCAyNTUsIDI1NSwgMjU1LCAyNTUp LAkvKiBzdXBlciB3aGl0ZSAqLwotCQlNQUtFX1JHQkEocmdiLCA1MCwgMCwgMTA2LCAyNTUpLAkv KiBxdWFkcmF0dXJlICovCi0JCU1BS0VfUkdCQShyZ2IsIDE5LCAxOSwgMTksIDI1NSksCS8qIGJs YWNrICovCi0JCU1BS0VfUkdCQShyZ2IsIDksIDksIDksIDI1NSksCQkvKiAzLjUlICovCi0JCU1B S0VfUkdCQShyZ2IsIDE5LCAxOSwgMTksIDI1NSksCS8qIDcuNSUgKi8KLQkJTUFLRV9SR0JBKHJn YiwgMjksIDI5LCAyOSwgMjU1KSwJLyogMTEuNSUgKi8KLQkJTUFLRV9SR0JBKHJnYiwgMTksIDE5 LCAxOSwgMjU1KSwJLyogYmxhY2sgKi8KLQl9OwotCXVuc2lnbmVkIGludCB4OwotCXVuc2lnbmVk IGludCB5OwotCi0JZm9yICh5ID0gMDsgeSA8IGhlaWdodCAqIDYgLyA5OyArK3kpIHsKLQkJZm9y ICh4ID0gMDsgeCA8IHdpZHRoOyArK3gpCi0JCQkoKHVpbnQxNl90ICopbWVtKVt4XSA9IGNvbG9y c190b3BbeCAqIDcgLyB3aWR0aF07Ci0JCW1lbSArPSBzdHJpZGU7Ci0JfQotCi0JZm9yICg7IHkg PCBoZWlnaHQgKiA3IC8gOTsgKyt5KSB7Ci0JCWZvciAoeCA9IDA7IHggPCB3aWR0aDsgKyt4KQot CQkJKCh1aW50MTZfdCAqKW1lbSlbeF0gPSBjb2xvcnNfbWlkZGxlW3ggKiA3IC8gd2lkdGhdOwot CQltZW0gKz0gc3RyaWRlOwotCX0KLQotCWZvciAoOyB5IDwgaGVpZ2h0OyArK3kpIHsKLQkJZm9y ICh4ID0gMDsgeCA8IHdpZHRoICogNSAvIDc7ICsreCkKLQkJCSgodWludDE2X3QgKiltZW0pW3hd ID0KLQkJCQljb2xvcnNfYm90dG9tW3ggKiA0IC8gKHdpZHRoICogNSAvIDcpXTsKLQkJZm9yICg7 IHggPCB3aWR0aCAqIDYgLyA3OyArK3gpCi0JCQkoKHVpbnQxNl90ICopbWVtKVt4XSA9Ci0JCQkJ Y29sb3JzX2JvdHRvbVsoeCAtIHdpZHRoICogNSAvIDcpICogMwotCQkJCQkgICAgICAvICh3aWR0 aCAvIDcpICsgNF07Ci0JCWZvciAoOyB4IDwgd2lkdGg7ICsreCkKLQkJCSgodWludDE2X3QgKilt ZW0pW3hdID0gY29sb3JzX2JvdHRvbVs3XTsKLQkJbWVtICs9IHN0cmlkZTsKLQl9Ci19Ci0KLXN0 YXRpYyB2b2lkCi1maWxsX3NtcHRlX3JnYjI0KGNvbnN0IHN0cnVjdCByZ2JfaW5mbyAqcmdiLCB2 b2lkICptZW0sCi0JCSB1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQsIHVu c2lnbmVkIGludCBzdHJpZGUpCi17Ci0JY29uc3Qgc3RydWN0IGNvbG9yX3JnYjI0IGNvbG9yc190 b3BbXSA9IHsKLQkJTUFLRV9SR0IyNChyZ2IsIDE5MiwgMTkyLCAxOTIpLAkvKiBncmV5ICovCi0J CU1BS0VfUkdCMjQocmdiLCAxOTIsIDE5MiwgMCksCS8qIHllbGxvdyAqLwotCQlNQUtFX1JHQjI0 KHJnYiwgMCwgMTkyLCAxOTIpLAkvKiBjeWFuICovCi0JCU1BS0VfUkdCMjQocmdiLCAwLCAxOTIs IDApLAkvKiBncmVlbiAqLwotCQlNQUtFX1JHQjI0KHJnYiwgMTkyLCAwLCAxOTIpLAkvKiBtYWdl bnRhICovCi0JCU1BS0VfUkdCMjQocmdiLCAxOTIsIDAsIDApLAkvKiByZWQgKi8KLQkJTUFLRV9S R0IyNChyZ2IsIDAsIDAsIDE5MiksCS8qIGJsdWUgKi8KLQl9OwotCWNvbnN0IHN0cnVjdCBjb2xv cl9yZ2IyNCBjb2xvcnNfbWlkZGxlW10gPSB7Ci0JCU1BS0VfUkdCMjQocmdiLCAwLCAwLCAxOTIp LAkvKiBibHVlICovCi0JCU1BS0VfUkdCMjQocmdiLCAxOSwgMTksIDE5KSwJLyogYmxhY2sgKi8K LQkJTUFLRV9SR0IyNChyZ2IsIDE5MiwgMCwgMTkyKSwJLyogbWFnZW50YSAqLwotCQlNQUtFX1JH QjI0KHJnYiwgMTksIDE5LCAxOSksCS8qIGJsYWNrICovCi0JCU1BS0VfUkdCMjQocmdiLCAwLCAx OTIsIDE5MiksCS8qIGN5YW4gKi8KLQkJTUFLRV9SR0IyNChyZ2IsIDE5LCAxOSwgMTkpLAkvKiBi bGFjayAqLwotCQlNQUtFX1JHQjI0KHJnYiwgMTkyLCAxOTIsIDE5MiksCS8qIGdyZXkgKi8KLQl9 OwotCWNvbnN0IHN0cnVjdCBjb2xvcl9yZ2IyNCBjb2xvcnNfYm90dG9tW10gPSB7Ci0JCU1BS0Vf UkdCMjQocmdiLCAwLCAzMywgNzYpLAkvKiBpbi1waGFzZSAqLwotCQlNQUtFX1JHQjI0KHJnYiwg MjU1LCAyNTUsIDI1NSksCS8qIHN1cGVyIHdoaXRlICovCi0JCU1BS0VfUkdCMjQocmdiLCA1MCwg MCwgMTA2KSwJLyogcXVhZHJhdHVyZSAqLwotCQlNQUtFX1JHQjI0KHJnYiwgMTksIDE5LCAxOSks CS8qIGJsYWNrICovCi0JCU1BS0VfUkdCMjQocmdiLCA5LCA5LCA5KSwJLyogMy41JSAqLwotCQlN QUtFX1JHQjI0KHJnYiwgMTksIDE5LCAxOSksCS8qIDcuNSUgKi8KLQkJTUFLRV9SR0IyNChyZ2Is IDI5LCAyOSwgMjkpLAkvKiAxMS41JSAqLwotCQlNQUtFX1JHQjI0KHJnYiwgMTksIDE5LCAxOSks CS8qIGJsYWNrICovCi0JfTsKLQl1bnNpZ25lZCBpbnQgeDsKLQl1bnNpZ25lZCBpbnQgeTsKLQot CWZvciAoeSA9IDA7IHkgPCBoZWlnaHQgKiA2IC8gOTsgKyt5KSB7Ci0JCWZvciAoeCA9IDA7IHgg PCB3aWR0aDsgKyt4KQotCQkJKChzdHJ1Y3QgY29sb3JfcmdiMjQgKiltZW0pW3hdID0KLQkJCQlj b2xvcnNfdG9wW3ggKiA3IC8gd2lkdGhdOwotCQltZW0gKz0gc3RyaWRlOwotCX0KLQotCWZvciAo OyB5IDwgaGVpZ2h0ICogNyAvIDk7ICsreSkgewotCQlmb3IgKHggPSAwOyB4IDwgd2lkdGg7ICsr eCkKLQkJCSgoc3RydWN0IGNvbG9yX3JnYjI0ICopbWVtKVt4XSA9Ci0JCQkJY29sb3JzX21pZGRs ZVt4ICogNyAvIHdpZHRoXTsKLQkJbWVtICs9IHN0cmlkZTsKLQl9Ci0KLQlmb3IgKDsgeSA8IGhl aWdodDsgKyt5KSB7Ci0JCWZvciAoeCA9IDA7IHggPCB3aWR0aCAqIDUgLyA3OyArK3gpCi0JCQko KHN0cnVjdCBjb2xvcl9yZ2IyNCAqKW1lbSlbeF0gPQotCQkJCWNvbG9yc19ib3R0b21beCAqIDQg LyAod2lkdGggKiA1IC8gNyldOwotCQlmb3IgKDsgeCA8IHdpZHRoICogNiAvIDc7ICsreCkKLQkJ CSgoc3RydWN0IGNvbG9yX3JnYjI0ICopbWVtKVt4XSA9Ci0JCQkJY29sb3JzX2JvdHRvbVsoeCAt IHdpZHRoICogNSAvIDcpICogMwotCQkJCQkgICAgICAvICh3aWR0aCAvIDcpICsgNF07Ci0JCWZv ciAoOyB4IDwgd2lkdGg7ICsreCkKLQkJCSgoc3RydWN0IGNvbG9yX3JnYjI0ICopbWVtKVt4XSA9 IGNvbG9yc19ib3R0b21bN107Ci0JCW1lbSArPSBzdHJpZGU7Ci0JfQotfQotCi1zdGF0aWMgdm9p ZAotZmlsbF9zbXB0ZV9yZ2IzMihjb25zdCBzdHJ1Y3QgcmdiX2luZm8gKnJnYiwgdW5zaWduZWQg Y2hhciAqbWVtLAotCQkgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0LCB1 bnNpZ25lZCBpbnQgc3RyaWRlKQotewotCWNvbnN0IHVpbnQzMl90IGNvbG9yc190b3BbXSA9IHsK LQkJTUFLRV9SR0JBKHJnYiwgMTkyLCAxOTIsIDE5MiwgMjU1KSwJLyogZ3JleSAqLwotCQlNQUtF X1JHQkEocmdiLCAxOTIsIDE5MiwgMCwgMjU1KSwJLyogeWVsbG93ICovCi0JCU1BS0VfUkdCQShy Z2IsIDAsIDE5MiwgMTkyLCAyNTUpLAkvKiBjeWFuICovCi0JCU1BS0VfUkdCQShyZ2IsIDAsIDE5 MiwgMCwgMjU1KSwJCS8qIGdyZWVuICovCi0JCU1BS0VfUkdCQShyZ2IsIDE5MiwgMCwgMTkyLCAy NTUpLAkvKiBtYWdlbnRhICovCi0JCU1BS0VfUkdCQShyZ2IsIDE5MiwgMCwgMCwgMjU1KSwJCS8q IHJlZCAqLwotCQlNQUtFX1JHQkEocmdiLCAwLCAwLCAxOTIsIDI1NSksCQkvKiBibHVlICovCi0J fTsKLQljb25zdCB1aW50MzJfdCBjb2xvcnNfbWlkZGxlW10gPSB7Ci0JCU1BS0VfUkdCQShyZ2Is IDAsIDAsIDE5MiwgMTI3KSwJCS8qIGJsdWUgKi8KLQkJTUFLRV9SR0JBKHJnYiwgMTksIDE5LCAx OSwgMTI3KSwJLyogYmxhY2sgKi8KLQkJTUFLRV9SR0JBKHJnYiwgMTkyLCAwLCAxOTIsIDEyNyks CS8qIG1hZ2VudGEgKi8KLQkJTUFLRV9SR0JBKHJnYiwgMTksIDE5LCAxOSwgMTI3KSwJLyogYmxh Y2sgKi8KLQkJTUFLRV9SR0JBKHJnYiwgMCwgMTkyLCAxOTIsIDEyNyksCS8qIGN5YW4gKi8KLQkJ TUFLRV9SR0JBKHJnYiwgMTksIDE5LCAxOSwgMTI3KSwJLyogYmxhY2sgKi8KLQkJTUFLRV9SR0JB KHJnYiwgMTkyLCAxOTIsIDE5MiwgMTI3KSwJLyogZ3JleSAqLwotCX07Ci0JY29uc3QgdWludDMy X3QgY29sb3JzX2JvdHRvbVtdID0gewotCQlNQUtFX1JHQkEocmdiLCAwLCAzMywgNzYsIDI1NSks CQkvKiBpbi1waGFzZSAqLwotCQlNQUtFX1JHQkEocmdiLCAyNTUsIDI1NSwgMjU1LCAyNTUpLAkv KiBzdXBlciB3aGl0ZSAqLwotCQlNQUtFX1JHQkEocmdiLCA1MCwgMCwgMTA2LCAyNTUpLAkvKiBx dWFkcmF0dXJlICovCi0JCU1BS0VfUkdCQShyZ2IsIDE5LCAxOSwgMTksIDI1NSksCS8qIGJsYWNr ICovCi0JCU1BS0VfUkdCQShyZ2IsIDksIDksIDksIDI1NSksCQkvKiAzLjUlICovCi0JCU1BS0Vf UkdCQShyZ2IsIDE5LCAxOSwgMTksIDI1NSksCS8qIDcuNSUgKi8KLQkJTUFLRV9SR0JBKHJnYiwg MjksIDI5LCAyOSwgMjU1KSwJLyogMTEuNSUgKi8KLQkJTUFLRV9SR0JBKHJnYiwgMTksIDE5LCAx OSwgMjU1KSwJLyogYmxhY2sgKi8KLQl9OwotCXVuc2lnbmVkIGludCB4OwotCXVuc2lnbmVkIGlu dCB5OwotCi0JZm9yICh5ID0gMDsgeSA8IGhlaWdodCAqIDYgLyA5OyArK3kpIHsKLQkJZm9yICh4 ID0gMDsgeCA8IHdpZHRoOyArK3gpCi0JCQkoKHVpbnQzMl90ICopbWVtKVt4XSA9IGNvbG9yc190 b3BbeCAqIDcgLyB3aWR0aF07Ci0JCW1lbSArPSBzdHJpZGU7Ci0JfQotCi0JZm9yICg7IHkgPCBo ZWlnaHQgKiA3IC8gOTsgKyt5KSB7Ci0JCWZvciAoeCA9IDA7IHggPCB3aWR0aDsgKyt4KQotCQkJ KCh1aW50MzJfdCAqKW1lbSlbeF0gPSBjb2xvcnNfbWlkZGxlW3ggKiA3IC8gd2lkdGhdOwotCQlt ZW0gKz0gc3RyaWRlOwotCX0KLQotCWZvciAoOyB5IDwgaGVpZ2h0OyArK3kpIHsKLQkJZm9yICh4 ID0gMDsgeCA8IHdpZHRoICogNSAvIDc7ICsreCkKLQkJCSgodWludDMyX3QgKiltZW0pW3hdID0K LQkJCQljb2xvcnNfYm90dG9tW3ggKiA0IC8gKHdpZHRoICogNSAvIDcpXTsKLQkJZm9yICg7IHgg PCB3aWR0aCAqIDYgLyA3OyArK3gpCi0JCQkoKHVpbnQzMl90ICopbWVtKVt4XSA9Ci0JCQkJY29s b3JzX2JvdHRvbVsoeCAtIHdpZHRoICogNSAvIDcpICogMwotCQkJCQkgICAgICAvICh3aWR0aCAv IDcpICsgNF07Ci0JCWZvciAoOyB4IDwgd2lkdGg7ICsreCkKLQkJCSgodWludDMyX3QgKiltZW0p W3hdID0gY29sb3JzX2JvdHRvbVs3XTsKLQkJbWVtICs9IHN0cmlkZTsKLQl9Ci19Ci0KLXN0YXRp YyB2b2lkCi1maWxsX3NtcHRlKGNvbnN0IHN0cnVjdCBmb3JtYXRfaW5mbyAqaW5mbywgdm9pZCAq cGxhbmVzWzNdLCB1bnNpZ25lZCBpbnQgd2lkdGgsCi0JICAgdW5zaWduZWQgaW50IGhlaWdodCwg dW5zaWduZWQgaW50IHN0cmlkZSkKLXsKLQl1bnNpZ25lZCBjaGFyICp1LCAqdjsKLQotCXN3aXRj aCAoaW5mby0+Zm9ybWF0KSB7Ci0JY2FzZSBEUk1fRk9STUFUX1VZVlk6Ci0JY2FzZSBEUk1fRk9S TUFUX1ZZVVk6Ci0JY2FzZSBEUk1fRk9STUFUX1lVWVY6Ci0JY2FzZSBEUk1fRk9STUFUX1lWWVU6 Ci0JCXJldHVybiBmaWxsX3NtcHRlX3l1dl9wYWNrZWQoJmluZm8tPnl1diwgcGxhbmVzWzBdLCB3 aWR0aCwKLQkJCQkJICAgICBoZWlnaHQsIHN0cmlkZSk7Ci0KLQljYXNlIERSTV9GT1JNQVRfTlYx MjoKLQljYXNlIERSTV9GT1JNQVRfTlYyMToKLQljYXNlIERSTV9GT1JNQVRfTlYxNjoKLQljYXNl IERSTV9GT1JNQVRfTlY2MToKLQkJdSA9IGluZm8tPnl1di5vcmRlciAmIFlVVl9ZQ2JDciA/IHBs YW5lc1sxXSA6IHBsYW5lc1sxXSArIDE7Ci0JCXYgPSBpbmZvLT55dXYub3JkZXIgJiBZVVZfWUNy Q2IgPyBwbGFuZXNbMV0gOiBwbGFuZXNbMV0gKyAxOwotCQlyZXR1cm4gZmlsbF9zbXB0ZV95dXZf cGxhbmFyKCZpbmZvLT55dXYsIHBsYW5lc1swXSwgdSwgdiwKLQkJCQkJICAgICB3aWR0aCwgaGVp Z2h0LCBzdHJpZGUpOwotCi0JY2FzZSBEUk1fRk9STUFUX1lVVjQyMDoKLQkJcmV0dXJuIGZpbGxf c21wdGVfeXV2X3BsYW5hcigmaW5mby0+eXV2LCBwbGFuZXNbMF0sIHBsYW5lc1sxXSwKLQkJCQkJ ICAgICBwbGFuZXNbMl0sIHdpZHRoLCBoZWlnaHQsIHN0cmlkZSk7Ci0KLQljYXNlIERSTV9GT1JN QVRfWVZVNDIwOgotCQlyZXR1cm4gZmlsbF9zbXB0ZV95dXZfcGxhbmFyKCZpbmZvLT55dXYsIHBs YW5lc1swXSwgcGxhbmVzWzJdLAotCQkJCQkgICAgIHBsYW5lc1sxXSwgd2lkdGgsIGhlaWdodCwg c3RyaWRlKTsKLQotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCNDQ0NDoKLQljYXNlIERSTV9GT1JNQVRf WFJHQjQ0NDQ6Ci0JY2FzZSBEUk1fRk9STUFUX0FCR1I0NDQ0OgotCWNhc2UgRFJNX0ZPUk1BVF9Y QkdSNDQ0NDoKLQljYXNlIERSTV9GT1JNQVRfUkdCQTQ0NDQ6Ci0JY2FzZSBEUk1fRk9STUFUX1JH Qlg0NDQ0OgotCWNhc2UgRFJNX0ZPUk1BVF9CR1JBNDQ0NDoKLQljYXNlIERSTV9GT1JNQVRfQkdS WDQ0NDQ6Ci0JY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKLQljYXNlIERSTV9GT1JNQVRfQkdSNTY1 OgotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMTU1NToKLQljYXNlIERSTV9GT1JNQVRfWFJHQjE1NTU6 Ci0JY2FzZSBEUk1fRk9STUFUX0FCR1IxNTU1OgotCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMTU1NToK LQljYXNlIERSTV9GT1JNQVRfUkdCQTU1NTE6Ci0JY2FzZSBEUk1fRk9STUFUX1JHQlg1NTUxOgot CWNhc2UgRFJNX0ZPUk1BVF9CR1JBNTU1MToKLQljYXNlIERSTV9GT1JNQVRfQkdSWDU1NTE6Ci0J CXJldHVybiBmaWxsX3NtcHRlX3JnYjE2KCZpbmZvLT5yZ2IsIHBsYW5lc1swXSwKLQkJCQkJd2lk dGgsIGhlaWdodCwgc3RyaWRlKTsKLQotCWNhc2UgRFJNX0ZPUk1BVF9CR1I4ODg6Ci0JY2FzZSBE Uk1fRk9STUFUX1JHQjg4ODoKLQkJcmV0dXJuIGZpbGxfc21wdGVfcmdiMjQoJmluZm8tPnJnYiwg cGxhbmVzWzBdLAotCQkJCQl3aWR0aCwgaGVpZ2h0LCBzdHJpZGUpOwotCWNhc2UgRFJNX0ZPUk1B VF9BUkdCODg4ODoKLQljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFU X0FCR1I4ODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKLQljYXNlIERSTV9GT1JNQVRf UkdCQTg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX1JHQlg4ODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9C R1JBODg4ODoKLQljYXNlIERSTV9GT1JNQVRfQkdSWDg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX0FS R0IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMDoKLQljYXNlIERSTV9GT1JN QVRfQUJHUjIxMDEwMTA6Ci0JY2FzZSBEUk1fRk9STUFUX1hCR1IyMTAxMDEwOgotCWNhc2UgRFJN X0ZPUk1BVF9SR0JBMTAxMDEwMjoKLQljYXNlIERSTV9GT1JNQVRfUkdCWDEwMTAxMDI6Ci0JY2Fz ZSBEUk1fRk9STUFUX0JHUkExMDEwMTAyOgotCWNhc2UgRFJNX0ZPUk1BVF9CR1JYMTAxMDEwMjoK LQkJcmV0dXJuIGZpbGxfc21wdGVfcmdiMzIoJmluZm8tPnJnYiwgcGxhbmVzWzBdLAotCQkJCQl3 aWR0aCwgaGVpZ2h0LCBzdHJpZGUpOwotCX0KLX0KLQotLyogc3dhcCB0aGVzZSBmb3IgYmlnIGVu ZGlhbi4uICovCi0jZGVmaW5lIFJFRCAgIDIKLSNkZWZpbmUgR1JFRU4gMQotI2RlZmluZSBCTFVF ICAwCi0KLXN0YXRpYyB2b2lkCi1tYWtlX3B3ZXR0eSh2b2lkICpkYXRhLCBpbnQgd2lkdGgsIGlu dCBoZWlnaHQsIGludCBzdHJpZGUsIHVpbnQzMl90IGZvcm1hdCkKLXsKLSNpZmRlZiBIQVZFX0NB SVJPCi0JY2Fpcm9fc3VyZmFjZV90ICpzdXJmYWNlOwotCWNhaXJvX3QgKmNyOwotCWludCB4LCB5 OwotCWNhaXJvX2Zvcm1hdF90IGNhaXJvX2Zvcm1hdDsKLQotCS8qIHdlIGNhbiBpZ25vcmUgdGhl IG9yZGVyIG9mIFIsRyxCIGNoYW5uZWxzICovCi0Jc3dpdGNoIChmb3JtYXQpIHsKLQljYXNlIERS TV9GT1JNQVRfWFJHQjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4OgotCWNhc2UgRFJN X0ZPUk1BVF9YQkdSODg4ODoKLQljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6Ci0JCWNhaXJvX2Zv cm1hdCA9IENBSVJPX0ZPUk1BVF9BUkdCMzI7Ci0JCWJyZWFrOwotCWNhc2UgRFJNX0ZPUk1BVF9S R0I1NjU6Ci0JY2FzZSBEUk1fRk9STUFUX0JHUjU2NToKLQkJY2Fpcm9fZm9ybWF0ID0gQ0FJUk9f Rk9STUFUX1JHQjE2XzU2NTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuOwotCX0KLQot CXN1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShkYXRhLAotCQkJ CQkJICAgICAgY2Fpcm9fZm9ybWF0LAotCQkJCQkJICAgICAgd2lkdGgsIGhlaWdodCwKLQkJCQkJ CSAgICAgIHN0cmlkZSk7Ci0JY3IgPSBjYWlyb19jcmVhdGUoc3VyZmFjZSk7Ci0JY2Fpcm9fc3Vy ZmFjZV9kZXN0cm95KHN1cmZhY2UpOwotCi0JY2Fpcm9fc2V0X2xpbmVfY2FwKGNyLCBDQUlST19M SU5FX0NBUF9TUVVBUkUpOwotCWZvciAoeCA9IDA7IHggPCB3aWR0aDsgeCArPSAyNTApCi0JCWZv ciAoeSA9IDA7IHkgPCBoZWlnaHQ7IHkgKz0gMjUwKSB7Ci0JCQljaGFyIGJ1Zls2NF07Ci0KLQkJ CWNhaXJvX21vdmVfdG8oY3IsIHgsIHkgLSAyMCk7Ci0JCQljYWlyb19saW5lX3RvKGNyLCB4LCB5 ICsgMjApOwotCQkJY2Fpcm9fbW92ZV90byhjciwgeCAtIDIwLCB5KTsKLQkJCWNhaXJvX2xpbmVf dG8oY3IsIHggKyAyMCwgeSk7Ci0JCQljYWlyb19uZXdfc3ViX3BhdGgoY3IpOwotCQkJY2Fpcm9f YXJjKGNyLCB4LCB5LCAxMCwgMCwgTV9QSSAqIDIpOwotCQkJY2Fpcm9fc2V0X2xpbmVfd2lkdGgo Y3IsIDQpOwotCQkJY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY3IsIDAsIDAsIDApOwotCQkJY2Fpcm9f c3Ryb2tlX3ByZXNlcnZlKGNyKTsKLQkJCWNhaXJvX3NldF9zb3VyY2VfcmdiKGNyLCAxLCAxLCAx KTsKLQkJCWNhaXJvX3NldF9saW5lX3dpZHRoKGNyLCAyKTsKLQkJCWNhaXJvX3N0cm9rZShjcik7 Ci0KLQkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mIGJ1ZiwgIiVkLCAlZCIsIHgsIHkpOwotCQkJY2Fp cm9fbW92ZV90byhjciwgeCArIDIwLCB5ICsgMjApOwotCQkJY2Fpcm9fdGV4dF9wYXRoKGNyLCBi dWYpOwotCQkJY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY3IsIDAsIDAsIDApOwotCQkJY2Fpcm9fc3Ry b2tlX3ByZXNlcnZlKGNyKTsKLQkJCWNhaXJvX3NldF9zb3VyY2VfcmdiKGNyLCAxLCAxLCAxKTsK LQkJCWNhaXJvX2ZpbGwoY3IpOwotCQl9Ci0KLQljYWlyb19kZXN0cm95KGNyKTsKLSNlbmRpZgot fQotCi1zdGF0aWMgdm9pZAotZmlsbF90aWxlc195dXZfcGxhbmFyKGNvbnN0IHN0cnVjdCBmb3Jt YXRfaW5mbyAqaW5mbywKLQkJICAgICAgdW5zaWduZWQgY2hhciAqeV9tZW0sIHVuc2lnbmVkIGNo YXIgKnVfbWVtLAotCQkgICAgICB1bnNpZ25lZCBjaGFyICp2X21lbSwgdW5zaWduZWQgaW50IHdp ZHRoLAotCQkgICAgICB1bnNpZ25lZCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBpbnQgc3RyaWRlKQot ewotCWNvbnN0IHN0cnVjdCB5dXZfaW5mbyAqeXV2ID0gJmluZm8tPnl1djsKLQl1bnNpZ25lZCBp bnQgY3MgPSB5dXYtPmNocm9tYV9zdHJpZGU7Ci0JdW5zaWduZWQgaW50IHhzdWIgPSB5dXYtPnhz dWI7Ci0JdW5zaWduZWQgaW50IHlzdWIgPSB5dXYtPnlzdWI7Ci0JdW5zaWduZWQgaW50IHg7Ci0J dW5zaWduZWQgaW50IHk7Ci0KLQlmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyArK3kpIHsKLQkJZm9y ICh4ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKLQkJCWRpdl90IGQgPSBkaXYoeCt5LCB3aWR0aCk7 Ci0JCQl1aW50MzJfdCByZ2IzMiA9IDB4MDAxMzA1MDIgKiAoZC5xdW90ID4+IDYpCi0JCQkJICAg ICAgICsgMHgwMDBhMTEyMCAqIChkLnJlbSA+PiA2KTsKLQkJCXN0cnVjdCBjb2xvcl95dXYgY29s b3IgPQotCQkJCU1BS0VfWVVWXzYwMSgocmdiMzIgPj4gMTYpICYgMHhmZiwKLQkJCQkJICAgICAo cmdiMzIgPj4gOCkgJiAweGZmLCByZ2IzMiAmIDB4ZmYpOwotCi0JCQl5X21lbVt4XSA9IGNvbG9y Lnk7Ci0JCQl1X21lbVt4L3hzdWIqY3NdID0gY29sb3IudTsKLQkJCXZfbWVtW3gveHN1Yipjc10g PSBjb2xvci52OwotCQl9Ci0KLQkJeV9tZW0gKz0gc3RyaWRlOwotCQlpZiAoKHkgKyAxKSAlIHlz dWIgPT0gMCkgewotCQkJdV9tZW0gKz0gc3RyaWRlICogY3MgLyB4c3ViOwotCQkJdl9tZW0gKz0g c3RyaWRlICogY3MgLyB4c3ViOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotZmlsbF90aWxl c195dXZfcGFja2VkKGNvbnN0IHN0cnVjdCBmb3JtYXRfaW5mbyAqaW5mbywgdW5zaWduZWQgY2hh ciAqbWVtLAotCQkgICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQs Ci0JCSAgICAgIHVuc2lnbmVkIGludCBzdHJpZGUpCi17Ci0JY29uc3Qgc3RydWN0IHl1dl9pbmZv ICp5dXYgPSAmaW5mby0+eXV2OwotCXVuc2lnbmVkIGNoYXIgKnlfbWVtID0gKHl1di0+b3JkZXIg JiBZVVZfWUMpID8gbWVtIDogbWVtICsgMTsKLQl1bnNpZ25lZCBjaGFyICpjX21lbSA9ICh5dXYt Pm9yZGVyICYgWVVWX0NZKSA/IG1lbSA6IG1lbSArIDE7Ci0JdW5zaWduZWQgaW50IHUgPSAoeXV2 LT5vcmRlciAmIFlVVl9ZQ3JDYikgPyAyIDogMDsKLQl1bnNpZ25lZCBpbnQgdiA9ICh5dXYtPm9y ZGVyICYgWVVWX1lDYkNyKSA/IDIgOiAwOwotCXVuc2lnbmVkIGludCB4OwotCXVuc2lnbmVkIGlu dCB5OwotCi0JZm9yICh5ID0gMDsgeSA8IGhlaWdodDsgKyt5KSB7Ci0JCWZvciAoeCA9IDA7IHgg PCB3aWR0aDsgeCArPSAyKSB7Ci0JCQlkaXZfdCBkID0gZGl2KHgreSwgd2lkdGgpOwotCQkJdWlu dDMyX3QgcmdiMzIgPSAweDAwMTMwNTAyICogKGQucXVvdCA+PiA2KQotCQkJCSAgICAgICArIDB4 MDAwYTExMjAgKiAoZC5yZW0gPj4gNik7Ci0JCQlzdHJ1Y3QgY29sb3JfeXV2IGNvbG9yID0KLQkJ CQlNQUtFX1lVVl82MDEoKHJnYjMyID4+IDE2KSAmIDB4ZmYsCi0JCQkJCSAgICAgKHJnYjMyID4+ IDgpICYgMHhmZiwgcmdiMzIgJiAweGZmKTsKLQotCQkJeV9tZW1bMip4XSA9IGNvbG9yLnk7Ci0J CQljX21lbVsyKngrdV0gPSBjb2xvci51OwotCQkJeV9tZW1bMip4KzJdID0gY29sb3IueTsKLQkJ CWNfbWVtWzIqeCt2XSA9IGNvbG9yLnY7Ci0JCX0KLQotCQl5X21lbSArPSBzdHJpZGU7Ci0JCWNf bWVtICs9IHN0cmlkZTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1maWxsX3RpbGVzX3JnYjE2KGNv bnN0IHN0cnVjdCBmb3JtYXRfaW5mbyAqaW5mbywgdW5zaWduZWQgY2hhciAqbWVtLAotCQkgdW5z aWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBpbnQgc3RyaWRl KQotewotCWNvbnN0IHN0cnVjdCByZ2JfaW5mbyAqcmdiID0gJmluZm8tPnJnYjsKLQl1bnNpZ25l ZCBjaGFyICptZW1fYmFzZSA9IG1lbTsKLQl1bnNpZ25lZCBpbnQgeCwgeTsKLQotCWZvciAoeSA9 IDA7IHkgPCBoZWlnaHQ7ICsreSkgewotCQlmb3IgKHggPSAwOyB4IDwgd2lkdGg7ICsreCkgewot CQkJZGl2X3QgZCA9IGRpdih4K3ksIHdpZHRoKTsKLQkJCXVpbnQzMl90IHJnYjMyID0gMHgwMDEz MDUwMiAqIChkLnF1b3QgPj4gNikKLQkJCQkgICAgICAgKyAweDAwMGExMTIwICogKGQucmVtID4+ IDYpOwotCQkJdWludDE2X3QgY29sb3IgPQotCQkJCU1BS0VfUkdCQShyZ2IsIChyZ2IzMiA+PiAx NikgJiAweGZmLAotCQkJCQkgIChyZ2IzMiA+PiA4KSAmIDB4ZmYsIHJnYjMyICYgMHhmZiwKLQkJ CQkJICAyNTUpOwotCi0JCQkoKHVpbnQxNl90ICopbWVtKVt4XSA9IGNvbG9yOwotCQl9Ci0JCW1l bSArPSBzdHJpZGU7Ci0JfQotCi0JbWFrZV9wd2V0dHkobWVtX2Jhc2UsIHdpZHRoLCBoZWlnaHQs IHN0cmlkZSwgaW5mby0+Zm9ybWF0KTsKLX0KLQotc3RhdGljIHZvaWQKLWZpbGxfdGlsZXNfcmdi MjQoY29uc3Qgc3RydWN0IGZvcm1hdF9pbmZvICppbmZvLCB1bnNpZ25lZCBjaGFyICptZW0sCi0J CSB1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQsIHVuc2lnbmVkIGludCBz dHJpZGUpCi17Ci0JY29uc3Qgc3RydWN0IHJnYl9pbmZvICpyZ2IgPSAmaW5mby0+cmdiOwotCXVu c2lnbmVkIGludCB4LCB5OwotCi0JZm9yICh5ID0gMDsgeSA8IGhlaWdodDsgKyt5KSB7Ci0JCWZv ciAoeCA9IDA7IHggPCB3aWR0aDsgKyt4KSB7Ci0JCQlkaXZfdCBkID0gZGl2KHgreSwgd2lkdGgp OwotCQkJdWludDMyX3QgcmdiMzIgPSAweDAwMTMwNTAyICogKGQucXVvdCA+PiA2KQotCQkJCSAg ICAgICArIDB4MDAwYTExMjAgKiAoZC5yZW0gPj4gNik7Ci0JCQlzdHJ1Y3QgY29sb3JfcmdiMjQg Y29sb3IgPQotCQkJCU1BS0VfUkdCMjQocmdiLCAocmdiMzIgPj4gMTYpICYgMHhmZiwKLQkJCQkJ ICAgKHJnYjMyID4+IDgpICYgMHhmZiwgcmdiMzIgJiAweGZmKTsKLQotCQkJKChzdHJ1Y3QgY29s b3JfcmdiMjQgKiltZW0pW3hdID0gY29sb3I7Ci0JCX0KLQkJbWVtICs9IHN0cmlkZTsKLQl9Ci19 Ci0KLXN0YXRpYyB2b2lkCi1maWxsX3RpbGVzX3JnYjMyKGNvbnN0IHN0cnVjdCBmb3JtYXRfaW5m byAqaW5mbywgdW5zaWduZWQgY2hhciAqbWVtLAotCQkgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNp Z25lZCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBpbnQgc3RyaWRlKQotewotCWNvbnN0IHN0cnVjdCBy Z2JfaW5mbyAqcmdiID0gJmluZm8tPnJnYjsKLQl1bnNpZ25lZCBjaGFyICptZW1fYmFzZSA9IG1l bTsKLQl1bnNpZ25lZCBpbnQgeCwgeTsKLQotCWZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7ICsreSkg ewotCQlmb3IgKHggPSAwOyB4IDwgd2lkdGg7ICsreCkgewotCQkJZGl2X3QgZCA9IGRpdih4K3ks IHdpZHRoKTsKLQkJCXVpbnQzMl90IHJnYjMyID0gMHgwMDEzMDUwMiAqIChkLnF1b3QgPj4gNikK LQkJCQkgICAgICAgKyAweDAwMGExMTIwICogKGQucmVtID4+IDYpOwotCQkJdWludDMyX3QgYWxw aGEgPSAoKHkgPCBoZWlnaHQvMikgJiYgKHggPCB3aWR0aC8yKSkgPyAxMjcgOiAyNTU7Ci0JCQl1 aW50MzJfdCBjb2xvciA9Ci0JCQkJTUFLRV9SR0JBKHJnYiwgKHJnYjMyID4+IDE2KSAmIDB4ZmYs Ci0JCQkJCSAgKHJnYjMyID4+IDgpICYgMHhmZiwgcmdiMzIgJiAweGZmLAotCQkJCQkgIGFscGhh KTsKLQotCQkJKCh1aW50MzJfdCAqKW1lbSlbeF0gPSBjb2xvcjsKLQkJfQotCQltZW0gKz0gc3Ry aWRlOwotCX0KLQotCW1ha2VfcHdldHR5KG1lbV9iYXNlLCB3aWR0aCwgaGVpZ2h0LCBzdHJpZGUs IGluZm8tPmZvcm1hdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1maWxsX3RpbGVzKGNvbnN0IHN0cnVj dCBmb3JtYXRfaW5mbyAqaW5mbywgdm9pZCAqcGxhbmVzWzNdLCB1bnNpZ25lZCBpbnQgd2lkdGgs Ci0JICAgdW5zaWduZWQgaW50IGhlaWdodCwgdW5zaWduZWQgaW50IHN0cmlkZSkKLXsKLQl1bnNp Z25lZCBjaGFyICp1LCAqdjsKLQotCXN3aXRjaCAoaW5mby0+Zm9ybWF0KSB7Ci0JY2FzZSBEUk1f Rk9STUFUX1VZVlk6Ci0JY2FzZSBEUk1fRk9STUFUX1ZZVVk6Ci0JY2FzZSBEUk1fRk9STUFUX1lV WVY6Ci0JY2FzZSBEUk1fRk9STUFUX1lWWVU6Ci0JCXJldHVybiBmaWxsX3RpbGVzX3l1dl9wYWNr ZWQoaW5mbywgcGxhbmVzWzBdLAotCQkJCQkgICAgIHdpZHRoLCBoZWlnaHQsIHN0cmlkZSk7Ci0K LQljYXNlIERSTV9GT1JNQVRfTlYxMjoKLQljYXNlIERSTV9GT1JNQVRfTlYyMToKLQljYXNlIERS TV9GT1JNQVRfTlYxNjoKLQljYXNlIERSTV9GT1JNQVRfTlY2MToKLQkJdSA9IGluZm8tPnl1di5v cmRlciAmIFlVVl9ZQ2JDciA/IHBsYW5lc1sxXSA6IHBsYW5lc1sxXSArIDE7Ci0JCXYgPSBpbmZv LT55dXYub3JkZXIgJiBZVVZfWUNyQ2IgPyBwbGFuZXNbMV0gOiBwbGFuZXNbMV0gKyAxOwotCQly ZXR1cm4gZmlsbF90aWxlc195dXZfcGxhbmFyKGluZm8sIHBsYW5lc1swXSwgdSwgdiwKLQkJCQkJ ICAgICB3aWR0aCwgaGVpZ2h0LCBzdHJpZGUpOwotCi0JY2FzZSBEUk1fRk9STUFUX1lVVjQyMDoK LQkJcmV0dXJuIGZpbGxfdGlsZXNfeXV2X3BsYW5hcihpbmZvLCBwbGFuZXNbMF0sIHBsYW5lc1sx XSwKLQkJCQkJICAgICBwbGFuZXNbMl0sIHdpZHRoLCBoZWlnaHQsIHN0cmlkZSk7Ci0KLQljYXNl IERSTV9GT1JNQVRfWVZVNDIwOgotCQlyZXR1cm4gZmlsbF90aWxlc195dXZfcGxhbmFyKGluZm8s IHBsYW5lc1swXSwgcGxhbmVzWzJdLAotCQkJCQkgICAgIHBsYW5lc1sxXSwgd2lkdGgsIGhlaWdo dCwgc3RyaWRlKTsKLQotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCNDQ0NDoKLQljYXNlIERSTV9GT1JN QVRfWFJHQjQ0NDQ6Ci0JY2FzZSBEUk1fRk9STUFUX0FCR1I0NDQ0OgotCWNhc2UgRFJNX0ZPUk1B VF9YQkdSNDQ0NDoKLQljYXNlIERSTV9GT1JNQVRfUkdCQTQ0NDQ6Ci0JY2FzZSBEUk1fRk9STUFU X1JHQlg0NDQ0OgotCWNhc2UgRFJNX0ZPUk1BVF9CR1JBNDQ0NDoKLQljYXNlIERSTV9GT1JNQVRf QkdSWDQ0NDQ6Ci0JY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKLQljYXNlIERSTV9GT1JNQVRfQkdS NTY1OgotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMTU1NToKLQljYXNlIERSTV9GT1JNQVRfWFJHQjE1 NTU6Ci0JY2FzZSBEUk1fRk9STUFUX0FCR1IxNTU1OgotCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMTU1 NToKLQljYXNlIERSTV9GT1JNQVRfUkdCQTU1NTE6Ci0JY2FzZSBEUk1fRk9STUFUX1JHQlg1NTUx OgotCWNhc2UgRFJNX0ZPUk1BVF9CR1JBNTU1MToKLQljYXNlIERSTV9GT1JNQVRfQkdSWDU1NTE6 Ci0JCXJldHVybiBmaWxsX3RpbGVzX3JnYjE2KGluZm8sIHBsYW5lc1swXSwKLQkJCQkJd2lkdGgs IGhlaWdodCwgc3RyaWRlKTsKLQotCWNhc2UgRFJNX0ZPUk1BVF9CR1I4ODg6Ci0JY2FzZSBEUk1f Rk9STUFUX1JHQjg4ODoKLQkJcmV0dXJuIGZpbGxfdGlsZXNfcmdiMjQoaW5mbywgcGxhbmVzWzBd LAotCQkJCQl3aWR0aCwgaGVpZ2h0LCBzdHJpZGUpOwotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4 ODoKLQljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4 OgotCWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKLQljYXNlIERSTV9GT1JNQVRfUkdCQTg4ODg6 Ci0JY2FzZSBEUk1fRk9STUFUX1JHQlg4ODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9CR1JBODg4ODoK LQljYXNlIERSTV9GT1JNQVRfQkdSWDg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX0FSR0IyMTAxMDEw OgotCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMDoKLQljYXNlIERSTV9GT1JNQVRfQUJHUjIx MDEwMTA6Ci0JY2FzZSBEUk1fRk9STUFUX1hCR1IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9S R0JBMTAxMDEwMjoKLQljYXNlIERSTV9GT1JNQVRfUkdCWDEwMTAxMDI6Ci0JY2FzZSBEUk1fRk9S TUFUX0JHUkExMDEwMTAyOgotCWNhc2UgRFJNX0ZPUk1BVF9CR1JYMTAxMDEwMjoKLQkJcmV0dXJu IGZpbGxfdGlsZXNfcmdiMzIoaW5mbywgcGxhbmVzWzBdLAotCQkJCQl3aWR0aCwgaGVpZ2h0LCBz dHJpZGUpOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLWZpbGxfcGxhaW4oY29uc3Qgc3RydWN0IGZv cm1hdF9pbmZvICppbmZvLCB2b2lkICpwbGFuZXNbM10sIHVuc2lnbmVkIGludCB3aWR0aCwKLQkg ICB1bnNpZ25lZCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBpbnQgc3RyaWRlKQotewotCW1lbXNldChw bGFuZXNbMF0sIDB4NzcsIHN0cmlkZSAqIGhlaWdodCk7Ci19Ci0KLS8qCi0gKiBmaWxsX3BhdHRl cm4gLSBGaWxsIGEgYnVmZmVyIHdpdGggYSB0ZXN0IHBhdHRlcm4KLSAqIEBmb3JtYXQ6IFBpeGVs IGZvcm1hdAotICogQHBhdHRlcm46IFRlc3QgcGF0dGVybgotICogQGJ1ZmZlcjogQnVmZmVyIG1l bW9yeQotICogQHdpZHRoOiBXaWR0aCBpbiBwaXhlbHMKLSAqIEBoZWlnaHQ6IEhlaWdodCBpbiBw aXhlbHMKLSAqIEBzdHJpZGU6IExpbmUgc3RyaWRlIChwaXRjaCkgaW4gYnl0ZXMKLSAqCi0gKiBG aWxsIHRoZSBidWZmZXIgd2l0aCB0aGUgdGVzdCBwYXR0ZXJuIHNwZWNpZmllZCBieSB0aGUgcGF0 dGVybiBwYXJhbWV0ZXIuCi0gKiBTdXBwb3J0ZWQgZm9ybWF0cyB2YXJ5IGRlcGVuZGluZyBvbiB0 aGUgc2VsZWN0ZWQgcGF0dGVybi4KLSAqLwotc3RhdGljIHZvaWQKLWZpbGxfcGF0dGVybih1bnNp Z25lZCBpbnQgZm9ybWF0LCBlbnVtIGZpbGxfcGF0dGVybiBwYXR0ZXJuLCB2b2lkICpwbGFuZXNb M10sCi0JICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQsIHVuc2ln bmVkIGludCBzdHJpZGUpCi17Ci0JY29uc3Qgc3RydWN0IGZvcm1hdF9pbmZvICppbmZvID0gTlVM TDsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZvcm1h dF9pbmZvKTsgKytpKSB7Ci0JCWlmIChmb3JtYXRfaW5mb1tpXS5mb3JtYXQgPT0gZm9ybWF0KSB7 Ci0JCQlpbmZvID0gJmZvcm1hdF9pbmZvW2ldOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAo aW5mbyA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlzd2l0Y2ggKHBhdHRlcm4pIHsKLQljYXNlIFBB VFRFUk5fVElMRVM6Ci0JCXJldHVybiBmaWxsX3RpbGVzKGluZm8sIHBsYW5lcywgd2lkdGgsIGhl aWdodCwgc3RyaWRlKTsKLQotCWNhc2UgUEFUVEVSTl9TTVBURToKLQkJcmV0dXJuIGZpbGxfc21w dGUoaW5mbywgcGxhbmVzLCB3aWR0aCwgaGVpZ2h0LCBzdHJpZGUpOwotCi0JY2FzZSBQQVRURVJO X1BMQUlOOgotCQlyZXR1cm4gZmlsbF9wbGFpbihpbmZvLCBwbGFuZXMsIHdpZHRoLCBoZWlnaHQs IHN0cmlkZSk7Ci0KLQlkZWZhdWx0OgotCQlwcmludGYoIkVycm9yOiB1bnN1cHBvcnRlZCB0ZXN0 IHBhdHRlcm4gJXUuXG4iLCBwYXR0ZXJuKTsKLQkJYnJlYWs7Ci0JfQotfQotCi0vKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQogICogQnVmZmVycyBtYW5hZ2VtZW50CiAgKi8KIApAQCAtMTA4Niw3ICsx MjksNyBAQCBzdHJ1Y3QgYm8gKgogYm9fY3JlYXRlKGludCBmZCwgdW5zaWduZWQgaW50IGZvcm1h dCwKIAkgIHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdodCwKIAkgIHVuc2ln bmVkIGludCBoYW5kbGVzWzRdLCB1bnNpZ25lZCBpbnQgcGl0Y2hlc1s0XSwKLQkgIHVuc2lnbmVk IGludCBvZmZzZXRzWzRdLCBlbnVtIGZpbGxfcGF0dGVybiBwYXR0ZXJuKQorCSAgdW5zaWduZWQg aW50IG9mZnNldHNbNF0sIGVudW0gdXRpbF9maWxsX3BhdHRlcm4gcGF0dGVybikKIHsKIAl1bnNp Z25lZCBpbnQgdmlydHVhbF9oZWlnaHQ7CiAJc3RydWN0IGJvICpibzsKQEAgLTEyODAsNyArMzIz LDcgQEAgYm9fY3JlYXRlKGludCBmZCwgdW5zaWduZWQgaW50IGZvcm1hdCwKIAkJYnJlYWs7CiAJ fQogCi0JZmlsbF9wYXR0ZXJuKGZvcm1hdCwgcGF0dGVybiwgcGxhbmVzLCB3aWR0aCwgaGVpZ2h0 LCBwaXRjaGVzWzBdKTsKKwl1dGlsX2ZpbGxfcGF0dGVybihmb3JtYXQsIHBhdHRlcm4sIHBsYW5l cywgd2lkdGgsIGhlaWdodCwgcGl0Y2hlc1swXSk7CiAJYm9fdW5tYXAoYm8pOwogCiAJcmV0dXJu IGJvOwpkaWZmIC0tZ2l0IGEvdGVzdHMvbW9kZXRlc3QvYnVmZmVycy5oIGIvdGVzdHMvbW9kZXRl c3QvYnVmZmVycy5oCmluZGV4IGFkNzNkMGU0YmE3My4uN2Y5NTM5NmI0NDAzIDEwMDY0NAotLS0g YS90ZXN0cy9tb2RldGVzdC9idWZmZXJzLmgKKysrIGIvdGVzdHMvbW9kZXRlc3QvYnVmZmVycy5o CkBAIC0yNywyMCArMjcsMTQgQEAKICNpZm5kZWYgX19CVUZGRVJTX0hfXwogI2RlZmluZSBfX0JV RkZFUlNfSF9fCiAKLXN0cnVjdCBibzsKKyNpbmNsdWRlICJ1dGlsL3BhdHRlcm4uaCIKIAotZW51 bSBmaWxsX3BhdHRlcm4gewotCVBBVFRFUk5fVElMRVMgPSAwLAotCVBBVFRFUk5fUExBSU4gPSAx LAotCVBBVFRFUk5fU01QVEUgPSAyLAotfTsKK3N0cnVjdCBibzsKIAogc3RydWN0IGJvICpib19j cmVhdGUoaW50IGZkLCB1bnNpZ25lZCBpbnQgZm9ybWF0LAogCQkgICB1bnNpZ25lZCBpbnQgd2lk dGgsIHVuc2lnbmVkIGludCBoZWlnaHQsCiAJCSAgIHVuc2lnbmVkIGludCBoYW5kbGVzWzRdLCB1 bnNpZ25lZCBpbnQgcGl0Y2hlc1s0XSwKLQkJICAgdW5zaWduZWQgaW50IG9mZnNldHNbNF0sIGVu dW0gZmlsbF9wYXR0ZXJuIHBhdHRlcm4pOworCQkgICB1bnNpZ25lZCBpbnQgb2Zmc2V0c1s0XSwg ZW51bSB1dGlsX2ZpbGxfcGF0dGVybiBwYXR0ZXJuKTsKIHZvaWQgYm9fZGVzdHJveShzdHJ1Y3Qg Ym8gKmJvKTsKIAotdW5zaWduZWQgaW50IGZvcm1hdF9mb3VyY2MoY29uc3QgY2hhciAqbmFtZSk7 Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdHMvbW9kZXRlc3QvY3Vyc29yLmMgYi90ZXN0cy9t b2RldGVzdC9jdXJzb3IuYwppbmRleCBkOGExOWJkMjIzN2UuLjZkZTgyYTRhNzE5ZiAxMDA2NDQK LS0tIGEvdGVzdHMvbW9kZXRlc3QvY3Vyc29yLmMKKysrIGIvdGVzdHMvbW9kZXRlc3QvY3Vyc29y LmMKQEAgLTQwLDExICs0MCwxMSBAQAogI2luY2x1ZGUgInhmODZkcm0uaCIKICNpbmNsdWRlICJ4 Zjg2ZHJtTW9kZS5oIgogCisjaW5jbHVkZSAidXRpbC9jb21tb24uaCIKKwogI2luY2x1ZGUgImJ1 ZmZlcnMuaCIKICNpbmNsdWRlICJjdXJzb3IuaCIKIAotI2RlZmluZSBBUlJBWV9TSVpFKGFycikg KHNpemVvZihhcnIpIC8gc2l6ZW9mKChhcnIpWzBdKSkKLQogc3RydWN0IGN1cnNvciB7CiAJaW50 IGZkOwogCXVpbnQzMl90IGJvX2hhbmRsZTsKZGlmZiAtLWdpdCBhL3Rlc3RzL21vZGV0ZXN0L21v ZGV0ZXN0LmMgYi90ZXN0cy9tb2RldGVzdC9tb2RldGVzdC5jCmluZGV4IDNiMDE5MThkMWFkYy4u MzYxYzZkYTkwMTZmIDEwMDY0NAotLS0gYS90ZXN0cy9tb2RldGVzdC9tb2RldGVzdC5jCisrKyBi L3Rlc3RzL21vZGV0ZXN0L21vZGV0ZXN0LmMKQEAgLTM3LDYgKzM3LDcgQEAKICAqIFRPRE86IHVz ZSBjYWlybyB0byB3cml0ZSB0aGUgbW9kZSBpbmZvIG9uIHRoZSBzZWxlY3RlZCBvdXRwdXQgb25j ZQogICogICAgICAgdGhlIG1vZGUgaGFzIGJlZW4gcHJvZ3JhbW1lZCwgYWxvbmcgd2l0aCBwb3Nz aWJsZSB0ZXN0IHBhdHRlcm5zLgogICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVk ZSAiY29uZmlnLmgiCiAjZW5kaWYKQEAgLTU5LDYgKzYwLDEwIEBACiAjaW5jbHVkZSAieGY4NmRy bU1vZGUuaCIKICNpbmNsdWRlICJkcm1fZm91cmNjLmgiCiAKKyNpbmNsdWRlICJ1dGlsL2NvbW1v bi5oIgorI2luY2x1ZGUgInV0aWwvZm9ybWF0LmgiCisjaW5jbHVkZSAidXRpbC9wYXR0ZXJuLmgi CisKICNpbmNsdWRlICJidWZmZXJzLmgiCiAjaW5jbHVkZSAiY3Vyc29yLmgiCiAKQEAgLTExNiw3 ICsxMjEsNiBAQCBzdHJ1Y3QgZGV2aWNlIHsKIAl9IG1vZGU7CiB9OwogCi0jZGVmaW5lIEFSUkFZ X1NJWkUoYXJyKSAoc2l6ZW9mKGFycikgLyBzaXplb2YoKGFycilbMF0pKQogc3RhdGljIGlubGlu ZSBpbnQ2NF90IFU2NDJJNjQodWludDY0X3QgdmFsKQogewogCXJldHVybiAoaW50NjRfdCkqKChp bnQ2NF90ICopJnZhbCk7CkBAIC0xMDQ3LDcgKzEwNTEsNyBAQCBzdGF0aWMgaW50IHNldF9wbGFu ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwbGFuZV9hcmcgKnApCiAJCXAtPncsIHAtPmgs IHAtPmZvcm1hdF9zdHIsIHBsYW5lX2lkKTsKIAogCXBsYW5lX2JvID0gYm9fY3JlYXRlKGRldi0+ ZmQsIHAtPmZvdXJjYywgcC0+dywgcC0+aCwgaGFuZGxlcywKLQkJCSAgICAgcGl0Y2hlcywgb2Zm c2V0cywgUEFUVEVSTl9USUxFUyk7CisJCQkgICAgIHBpdGNoZXMsIG9mZnNldHMsIFVUSUxfUEFU VEVSTl9USUxFUyk7CiAJaWYgKHBsYW5lX2JvID09IE5VTEwpCiAJCXJldHVybiAtMTsKIApAQCAt MTEyMyw4ICsxMTI3LDkgQEAgc3RhdGljIHZvaWQgc2V0X21vZGUoc3RydWN0IGRldmljZSAqZGV2 LCBzdHJ1Y3QgcGlwZV9hcmcgKnBpcGVzLCB1bnNpZ25lZCBpbnQgY28KIAkJCWRldi0+bW9kZS5o ZWlnaHQgPSBwaXBlLT5tb2RlLT52ZGlzcGxheTsKIAl9CiAKLQlibyA9IGJvX2NyZWF0ZShkZXYt PmZkLCBwaXBlc1swXS5mb3VyY2MsIGRldi0+bW9kZS53aWR0aCwgZGV2LT5tb2RlLmhlaWdodCwK LQkJICAgICAgIGhhbmRsZXMsIHBpdGNoZXMsIG9mZnNldHMsIFBBVFRFUk5fU01QVEUpOworCWJv ID0gYm9fY3JlYXRlKGRldi0+ZmQsIHBpcGVzWzBdLmZvdXJjYywgZGV2LT5tb2RlLndpZHRoLAor CQkgICAgICAgZGV2LT5tb2RlLmhlaWdodCwgaGFuZGxlcywgcGl0Y2hlcywgb2Zmc2V0cywKKwkJ ICAgICAgIFVUSUxfUEFUVEVSTl9TTVBURSk7CiAJaWYgKGJvID09IE5VTEwpCiAJCXJldHVybjsK IApAQCAtMTIwMiw3ICsxMjA3LDcgQEAgc3RhdGljIHZvaWQgc2V0X2N1cnNvcnMoc3RydWN0IGRl dmljZSAqZGV2LCBzdHJ1Y3QgcGlwZV9hcmcgKnBpcGVzLCB1bnNpZ25lZCBpbnQKIAkgKiB0cmFu c2x1Y2VudCBhbHBoYQogCSAqLwogCWJvID0gYm9fY3JlYXRlKGRldi0+ZmQsIERSTV9GT1JNQVRf QVJHQjg4ODgsIGN3LCBjaCwgaGFuZGxlcywgcGl0Y2hlcywKLQkJICAgICAgIG9mZnNldHMsIFBB VFRFUk5fUExBSU4pOworCQkgICAgICAgb2Zmc2V0cywgVVRJTF9QQVRURVJOX1BMQUlOKTsKIAlp ZiAoYm8gPT0gTlVMTCkKIAkJcmV0dXJuOwogCkBAIC0xMjQxLDkgKzEyNDYsOSBAQCBzdGF0aWMg dm9pZCB0ZXN0X3BhZ2VfZmxpcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwaXBlX2FyZyAq cGlwZXMsIHVuc2lnbmVkCiAJdW5zaWduZWQgaW50IGk7CiAJaW50IHJldDsKIAotCW90aGVyX2Jv ID0gYm9fY3JlYXRlKGRldi0+ZmQsIHBpcGVzWzBdLmZvdXJjYywKLQkJCSAgICAgZGV2LT5tb2Rl LndpZHRoLCBkZXYtPm1vZGUuaGVpZ2h0LAotCQkJICAgICBoYW5kbGVzLCBwaXRjaGVzLCBvZmZz ZXRzLCBQQVRURVJOX1BMQUlOKTsKKwlvdGhlcl9ibyA9IGJvX2NyZWF0ZShkZXYtPmZkLCBwaXBl c1swXS5mb3VyY2MsIGRldi0+bW9kZS53aWR0aCwKKwkJCSAgICAgZGV2LT5tb2RlLmhlaWdodCwg aGFuZGxlcywgcGl0Y2hlcywgb2Zmc2V0cywKKwkJCSAgICAgVVRJTF9QQVRURVJOX1BMQUlOKTsK IAlpZiAob3RoZXJfYm8gPT0gTlVMTCkKIAkJcmV0dXJuOwogCkBAIC0xMzkxLDcgKzEzOTYsNyBA QCBzdGF0aWMgaW50IHBhcnNlX2Nvbm5lY3RvcihzdHJ1Y3QgcGlwZV9hcmcgKnBpcGUsIGNvbnN0 IGNoYXIgKmFyZykKIAkJcGlwZS0+Zm9ybWF0X3N0cls0XSA9ICdcMCc7CiAJfQogCi0JcGlwZS0+ Zm91cmNjID0gZm9ybWF0X2ZvdXJjYyhwaXBlLT5mb3JtYXRfc3RyKTsKKwlwaXBlLT5mb3VyY2Mg PSB1dGlsX2Zvcm1hdF9mb3VyY2MocGlwZS0+Zm9ybWF0X3N0cik7CiAJaWYgKHBpcGUtPmZvdXJj YyA9PSAwKSAgewogCQlmcHJpbnRmKHN0ZGVyciwgInVua25vd24gZm9ybWF0ICVzXG4iLCBwaXBl LT5mb3JtYXRfc3RyKTsKIAkJcmV0dXJuIC0xOwpAQCAtMTQ0NCw3ICsxNDQ5LDcgQEAgc3RhdGlj IGludCBwYXJzZV9wbGFuZShzdHJ1Y3QgcGxhbmVfYXJnICpwbGFuZSwgY29uc3QgY2hhciAqcCkK IAkJc3RyY3B5KHBsYW5lLT5mb3JtYXRfc3RyLCAiWFIyNCIpOwogCX0KIAotCXBsYW5lLT5mb3Vy Y2MgPSBmb3JtYXRfZm91cmNjKHBsYW5lLT5mb3JtYXRfc3RyKTsKKwlwbGFuZS0+Zm91cmNjID0g dXRpbF9mb3JtYXRfZm91cmNjKHBsYW5lLT5mb3JtYXRfc3RyKTsKIAlpZiAocGxhbmUtPmZvdXJj YyA9PSAwKSB7CiAJCWZwcmludGYoc3RkZXJyLCAidW5rbm93biBmb3JtYXQgJXNcbiIsIHBsYW5l LT5mb3JtYXRfc3RyKTsKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS90ZXN0cy9wcm9w dGVzdC9NYWtlZmlsZS5hbSBiL3Rlc3RzL3Byb3B0ZXN0L01ha2VmaWxlLmFtCmluZGV4IDA1OTRl MDJlOTkwNC4uMTQyODgyMDY2NDg1IDEwMDY0NAotLS0gYS90ZXN0cy9wcm9wdGVzdC9NYWtlZmls ZS5hbQorKysgYi90ZXN0cy9wcm9wdGVzdC9NYWtlZmlsZS5hbQpAQCAtMSw2ICsxLDcgQEAKIEFN X0NGTEFHUyA9IFwKIAkkKFdBUk5fQ0ZMQUdTKVwKIAktSSQodG9wX3NyY2RpcikvaW5jbHVkZS9k cm0gXAorCS1JJCh0b3Bfc3JjZGlyKS90ZXN0cyBcCiAJLUkkKHRvcF9zcmNkaXIpCiAKIGlmIEhB VkVfSU5TVEFMTF9URVNUUwpAQCAtMTQsNCArMTUsNSBAQCBlbmRpZgogcHJvcHRlc3RfU09VUkNF UyA9IFwKIAlwcm9wdGVzdC5jCiBwcm9wdGVzdF9MREFERCA9IFwKLQkkKHRvcF9idWlsZGRpcikv bGliZHJtLmxhCisJJCh0b3BfYnVpbGRkaXIpL2xpYmRybS5sYSBcCisJJCh0b3BfYnVpbGRkaXIp L3Rlc3RzL3V0aWwvbGlidXRpbC5sYQpkaWZmIC0tZ2l0IGEvdGVzdHMvcHJvcHRlc3QvcHJvcHRl c3QuYyBiL3Rlc3RzL3Byb3B0ZXN0L3Byb3B0ZXN0LmMKaW5kZXggYjkyOTZiZGI2ZTNiLi5iNmUw MGNmY2ZjNGYgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3Byb3B0ZXN0L3Byb3B0ZXN0LmMKKysrIGIvdGVz dHMvcHJvcHRlc3QvcHJvcHRlc3QuYwpAQCAtMzUsNyArMzUsOCBAQAogI2luY2x1ZGUgInhmODZk cm0uaCIKICNpbmNsdWRlICJ4Zjg2ZHJtTW9kZS5oIgogCi0jZGVmaW5lIEFSUkFZX1NJWkUoYXJy KSAoc2l6ZW9mKGFycikgLyBzaXplb2YoKGFycilbMF0pKQorI2luY2x1ZGUgInV0aWwvY29tbW9u LmgiCisKIHN0YXRpYyBpbmxpbmUgaW50NjRfdCBVNjQySTY0KHVpbnQ2NF90IHZhbCkKIHsKIAly ZXR1cm4gKGludDY0X3QpKigoaW50NjRfdCAqKSZ2YWwpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvdXRp bC9BbmRyb2lkLm1rIGIvdGVzdHMvdXRpbC9BbmRyb2lkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMC4uNzNiYzY4MDVmMTZjCi0tLSAvZGV2L251bGwKKysrIGIvdGVz dHMvdXRpbC9BbmRyb2lkLm1rCkBAIC0wLDAgKzEsMzkgQEAKKyMKKyMgQ29weXJpZ2h0IMKpIDIw MTUgTlZJRElBIENvcnBvcmF0aW9uCisjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQs IGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisjIGNvcHkgb2YgdGhp cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3 YXJlIiksCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGlu Y2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1v ZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisjIGFuZC9vciBz ZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9t IHRoZQorIyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZv bGxvd2luZyBjb25kaXRpb25zOgorIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQg dGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisjIHBhcmFncmFwaCkg c2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv ZiB0aGUKKyMgU29mdHdhcmUuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisjIElNUExJRUQsIElO Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZLAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyMgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERF UlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyMgTElBQklMSVRZ LCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFS SVNJTkcKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUg T1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworIyBJTiBUSEUgU09GVFdBUkUuCisjCisKK0xP Q0FMX1BBVEggOj0gJChjYWxsIG15LWRpcikKKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCitpbmNs dWRlICQoTE9DQUxfUEFUSCkvTWFrZWZpbGUuc291cmNlcworCitMT0NBTF9NT0RVTEUgOj0gbGli ZHJtX3V0aWwKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCisKK0xPQ0FMX1NIQVJFRF9M SUJSQVJJRVMgOj0gbGliZHJtCisKK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKFVUSUxfRklMRVMpCisK KyMgYXZvaWQgbmFtZSBjbGFzaGVzIGJ5IHJlcXVpcmluZyB1c2VycyB0byBpbmNsdWRlIHV0aWwv Ki5oCitMT0NBTF9FWFBPUlRfQ19JTkNMVURFX0RJUlMgOj0gJChkaXIgJChMT0NBTF9QQVRIKSkK KworaW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQpkaWZmIC0tZ2l0IGEvdGVzdHMvdXRp bC9NYWtlZmlsZS5hbSBiL3Rlc3RzL3V0aWwvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mOGUwYjE3MTJjZDIKLS0tIC9kZXYvbnVsbAorKysgYi90 ZXN0cy91dGlsL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMTMgQEAKK2luY2x1ZGUgTWFrZWZpbGUu c291cmNlcworCitub2luc3RfTFRMSUJSQVJJRVMgPSBcCisJbGlidXRpbC5sYQorCitsaWJ1dGls X2xhX0NQUEZMQUdTID0gXAorCS1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlL2RybSBcCisJLUkkKHRv cF9zcmNkaXIpCisKK2xpYnV0aWxfbGFfQ0ZMQUdTID0gXAorCSQoQ0FJUk9fQ0ZMQUdTKQorCits aWJ1dGlsX2xhX1NPVVJDRVMgPSAkKFVUSUxfRklMRVMpCmRpZmYgLS1naXQgYS90ZXN0cy91dGls L01ha2VmaWxlLnNvdXJjZXMgYi90ZXN0cy91dGlsL01ha2VmaWxlLnNvdXJjZXMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5lOTFmYTcyMjY1MGYKLS0tIC9kZXYvbnVs bAorKysgYi90ZXN0cy91dGlsL01ha2VmaWxlLnNvdXJjZXMKQEAgLTAsMCArMSw2IEBACitVVElM X0ZJTEVTIDo9IFwKKwljb21tb24uaCBcCisJZm9ybWF0LmMgXAorCWZvcm1hdC5oIFwKKwlwYXR0 ZXJuLmMgXAorCXBhdHRlcm4uaApkaWZmIC0tZ2l0IGEvdGVzdHMvdXRpbC9jb21tb24uaCBiL3Rl c3RzL3V0aWwvY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw Li41ZDU3MmMyZGQwMDMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy91dGlsL2NvbW1vbi5oCkBA IC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCBUdW5nc3RlbiBHcmFwaGljcwor ICogICBKYWtvYiBCb3JuZWNyYW50eiA8amFrb2JAdHVuZ3N0ZW5ncmFwaGljcy5jb20+CisgKiBD b3B5cmlnaHQgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbgorICogICBKZXNzZSBCYXJuZXMgPGplc3Nl LmJhcm5lc0BpbnRlbC5jb20+CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhp cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3 YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxs IGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICog VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z IEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwg VEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENM QUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9G IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBE RUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgVVRJTF9DT01NT05f SAorI2RlZmluZSBVVElMX0NPTU1PTl9ICisKKyNpZm5kZWYgQVJSQVlfU0laRQorI2RlZmluZSBB UlJBWV9TSVpFKGEpIChzaXplb2YoYSkgLyBzaXplb2YoKGEpWzBdKSkKKyNlbmRpZgorCisjZW5k aWYgLyogVVRJTF9DT01NT05fSCAqLwpkaWZmIC0tZ2l0IGEvdGVzdHMvdXRpbC9mb3JtYXQuYyBi L3Rlc3RzL3V0aWwvZm9ybWF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi4wNDNjZmU3ZjFlYWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy91dGlsL2Zvcm1hdC5j CkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDggVHVuZ3N0ZW4gR3JhcGhp Y3MKKyAqICAgSmFrb2IgQm9ybmVjcmFudHogPGpha29iQHR1bmdzdGVuZ3JhcGhpY3MuY29tPgor ICogQ29weXJpZ2h0IDIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqICAgSmVzc2UgQmFybmVzIDxq ZXNzZS5iYXJuZXNAaW50ZWwuY29tPgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9m IHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJT b2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv biwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNv cHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBh bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0 byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAq IGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoK KyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G IEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1J VEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNI QUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFO WSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFD VElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9V VCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RI RVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaWZkZWYgSEFWRV9DT05G SUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4K KyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPGRy bV9mb3VyY2MuaD4KKworI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgImZvcm1hdC5oIgor CisjZGVmaW5lIE1BS0VfUkdCX0lORk8ocmwsIHJvLCBnbCwgZ28sIGJsLCBibywgYWwsIGFvKSBc CisJLnJnYiA9IHsgeyAocmwpLCAocm8pIH0sIHsgKGdsKSwgKGdvKSB9LCB7IChibCksIChibykg fSwgeyAoYWwpLCAoYW8pIH0gfQorCisjZGVmaW5lIE1BS0VfWVVWX0lORk8ob3JkZXIsIHhzdWIs IHlzdWIsIGNocm9tYV9zdHJpZGUpIFwKKwkueXV2ID0geyAob3JkZXIpLCAoeHN1YiksICh5c3Vi KSwgKGNocm9tYV9zdHJpZGUpIH0KKworc3RhdGljIGNvbnN0IHN0cnVjdCB1dGlsX2Zvcm1hdF9p bmZvIGZvcm1hdF9pbmZvW10gPSB7CisJLyogWVVWIHBhY2tlZCAqLworCXsgRFJNX0ZPUk1BVF9V WVZZLCAiVVlWWSIsIE1BS0VfWVVWX0lORk8oWVVWX1lDYkNyIHwgWVVWX0NZLCAyLCAyLCAyKSB9 LAorCXsgRFJNX0ZPUk1BVF9WWVVZLCAiVllVWSIsIE1BS0VfWVVWX0lORk8oWVVWX1lDckNiIHwg WVVWX0NZLCAyLCAyLCAyKSB9LAorCXsgRFJNX0ZPUk1BVF9ZVVlWLCAiWVVZViIsIE1BS0VfWVVW X0lORk8oWVVWX1lDYkNyIHwgWVVWX1lDLCAyLCAyLCAyKSB9LAorCXsgRFJNX0ZPUk1BVF9ZVllV LCAiWVZZVSIsIE1BS0VfWVVWX0lORk8oWVVWX1lDckNiIHwgWVVWX1lDLCAyLCAyLCAyKSB9LAor CS8qIFlVViBzZW1pLXBsYW5hciAqLworCXsgRFJNX0ZPUk1BVF9OVjEyLCAiTlYxMiIsIE1BS0Vf WVVWX0lORk8oWVVWX1lDYkNyLCAyLCAyLCAyKSB9LAorCXsgRFJNX0ZPUk1BVF9OVjIxLCAiTlYy MSIsIE1BS0VfWVVWX0lORk8oWVVWX1lDckNiLCAyLCAyLCAyKSB9LAorCXsgRFJNX0ZPUk1BVF9O VjE2LCAiTlYxNiIsIE1BS0VfWVVWX0lORk8oWVVWX1lDYkNyLCAyLCAxLCAyKSB9LAorCXsgRFJN X0ZPUk1BVF9OVjYxLCAiTlY2MSIsIE1BS0VfWVVWX0lORk8oWVVWX1lDckNiLCAyLCAxLCAyKSB9 LAorCS8qIFlVViBwbGFuYXIgKi8KKwl7IERSTV9GT1JNQVRfWVVWNDIwLCAiWVUxMiIsIE1BS0Vf WVVWX0lORk8oWVVWX1lDYkNyLCAyLCAyLCAxKSB9LAorCXsgRFJNX0ZPUk1BVF9ZVlU0MjAsICJZ VjEyIiwgTUFLRV9ZVVZfSU5GTyhZVVZfWUNyQ2IsIDIsIDIsIDEpIH0sCisJLyogUkdCMTYgKi8K Kwl7IERSTV9GT1JNQVRfQVJHQjQ0NDQsICJBUjEyIiwgTUFLRV9SR0JfSU5GTyg0LCA4LCA0LCA0 LCA0LCAwLCA0LCAxMikgfSwKKwl7IERSTV9GT1JNQVRfWFJHQjQ0NDQsICJYUjEyIiwgTUFLRV9S R0JfSU5GTyg0LCA4LCA0LCA0LCA0LCAwLCAwLCAwKSB9LAorCXsgRFJNX0ZPUk1BVF9BQkdSNDQ0 NCwgIkFCMTIiLCBNQUtFX1JHQl9JTkZPKDQsIDAsIDQsIDQsIDQsIDgsIDQsIDEyKSB9LAorCXsg RFJNX0ZPUk1BVF9YQkdSNDQ0NCwgIlhCMTIiLCBNQUtFX1JHQl9JTkZPKDQsIDAsIDQsIDQsIDQs IDgsIDAsIDApIH0sCisJeyBEUk1fRk9STUFUX1JHQkE0NDQ0LCAiUkExMiIsIE1BS0VfUkdCX0lO Rk8oNCwgMTIsIDQsIDgsIDQsIDQsIDQsIDApIH0sCisJeyBEUk1fRk9STUFUX1JHQlg0NDQ0LCAi UlgxMiIsIE1BS0VfUkdCX0lORk8oNCwgMTIsIDQsIDgsIDQsIDQsIDAsIDApIH0sCisJeyBEUk1f Rk9STUFUX0JHUkE0NDQ0LCAiQkExMiIsIE1BS0VfUkdCX0lORk8oNCwgNCwgNCwgOCwgNCwgMTIs IDQsIDApIH0sCisJeyBEUk1fRk9STUFUX0JHUlg0NDQ0LCAiQlgxMiIsIE1BS0VfUkdCX0lORk8o NCwgNCwgNCwgOCwgNCwgMTIsIDAsIDApIH0sCisJeyBEUk1fRk9STUFUX0FSR0IxNTU1LCAiQVIx NSIsIE1BS0VfUkdCX0lORk8oNSwgMTAsIDUsIDUsIDUsIDAsIDEsIDE1KSB9LAorCXsgRFJNX0ZP Uk1BVF9YUkdCMTU1NSwgIlhSMTUiLCBNQUtFX1JHQl9JTkZPKDUsIDEwLCA1LCA1LCA1LCAwLCAw LCAwKSB9LAorCXsgRFJNX0ZPUk1BVF9BQkdSMTU1NSwgIkFCMTUiLCBNQUtFX1JHQl9JTkZPKDUs IDAsIDUsIDUsIDUsIDEwLCAxLCAxNSkgfSwKKwl7IERSTV9GT1JNQVRfWEJHUjE1NTUsICJYQjE1 IiwgTUFLRV9SR0JfSU5GTyg1LCAwLCA1LCA1LCA1LCAxMCwgMCwgMCkgfSwKKwl7IERSTV9GT1JN QVRfUkdCQTU1NTEsICJSQTE1IiwgTUFLRV9SR0JfSU5GTyg1LCAxMSwgNSwgNiwgNSwgMSwgMSwg MCkgfSwKKwl7IERSTV9GT1JNQVRfUkdCWDU1NTEsICJSWDE1IiwgTUFLRV9SR0JfSU5GTyg1LCAx MSwgNSwgNiwgNSwgMSwgMCwgMCkgfSwKKwl7IERSTV9GT1JNQVRfQkdSQTU1NTEsICJCQTE1Iiwg TUFLRV9SR0JfSU5GTyg1LCAxLCA1LCA2LCA1LCAxMSwgMSwgMCkgfSwKKwl7IERSTV9GT1JNQVRf QkdSWDU1NTEsICJCWDE1IiwgTUFLRV9SR0JfSU5GTyg1LCAxLCA1LCA2LCA1LCAxMSwgMCwgMCkg fSwKKwl7IERSTV9GT1JNQVRfUkdCNTY1LCAiUkcxNiIsIE1BS0VfUkdCX0lORk8oNSwgMTEsIDYs IDUsIDUsIDAsIDAsIDApIH0sCisJeyBEUk1fRk9STUFUX0JHUjU2NSwgIkJHMTYiLCBNQUtFX1JH Ql9JTkZPKDUsIDAsIDYsIDUsIDUsIDExLCAwLCAwKSB9LAorCS8qIFJHQjI0ICovCisJeyBEUk1f Rk9STUFUX0JHUjg4OCwgIkJHMjQiLCBNQUtFX1JHQl9JTkZPKDgsIDAsIDgsIDgsIDgsIDE2LCAw LCAwKSB9LAorCXsgRFJNX0ZPUk1BVF9SR0I4ODgsICJSRzI0IiwgTUFLRV9SR0JfSU5GTyg4LCAx NiwgOCwgOCwgOCwgMCwgMCwgMCkgfSwKKwkvKiBSR0IzMiAqLworCXsgRFJNX0ZPUk1BVF9BUkdC ODg4OCwgIkFSMjQiLCBNQUtFX1JHQl9JTkZPKDgsIDE2LCA4LCA4LCA4LCAwLCA4LCAyNCkgfSwK Kwl7IERSTV9GT1JNQVRfWFJHQjg4ODgsICJYUjI0IiwgTUFLRV9SR0JfSU5GTyg4LCAxNiwgOCwg OCwgOCwgMCwgMCwgMCkgfSwKKwl7IERSTV9GT1JNQVRfQUJHUjg4ODgsICJBQjI0IiwgTUFLRV9S R0JfSU5GTyg4LCAwLCA4LCA4LCA4LCAxNiwgOCwgMjQpIH0sCisJeyBEUk1fRk9STUFUX1hCR1I4 ODg4LCAiWEIyNCIsIE1BS0VfUkdCX0lORk8oOCwgMCwgOCwgOCwgOCwgMTYsIDAsIDApIH0sCisJ eyBEUk1fRk9STUFUX1JHQkE4ODg4LCAiUkEyNCIsIE1BS0VfUkdCX0lORk8oOCwgMjQsIDgsIDE2 LCA4LCA4LCA4LCAwKSB9LAorCXsgRFJNX0ZPUk1BVF9SR0JYODg4OCwgIlJYMjQiLCBNQUtFX1JH Ql9JTkZPKDgsIDI0LCA4LCAxNiwgOCwgOCwgMCwgMCkgfSwKKwl7IERSTV9GT1JNQVRfQkdSQTg4 ODgsICJCQTI0IiwgTUFLRV9SR0JfSU5GTyg4LCA4LCA4LCAxNiwgOCwgMjQsIDgsIDApIH0sCisJ eyBEUk1fRk9STUFUX0JHUlg4ODg4LCAiQlgyNCIsIE1BS0VfUkdCX0lORk8oOCwgOCwgOCwgMTYs IDgsIDI0LCAwLCAwKSB9LAorCXsgRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMCwgIkFSMzAiLCBNQUtF X1JHQl9JTkZPKDEwLCAyMCwgMTAsIDEwLCAxMCwgMCwgMiwgMzApIH0sCisJeyBEUk1fRk9STUFU X1hSR0IyMTAxMDEwLCAiWFIzMCIsIE1BS0VfUkdCX0lORk8oMTAsIDIwLCAxMCwgMTAsIDEwLCAw LCAwLCAwKSB9LAorCXsgRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMCwgIkFCMzAiLCBNQUtFX1JHQl9J TkZPKDEwLCAwLCAxMCwgMTAsIDEwLCAyMCwgMiwgMzApIH0sCisJeyBEUk1fRk9STUFUX1hCR1Iy MTAxMDEwLCAiWEIzMCIsIE1BS0VfUkdCX0lORk8oMTAsIDAsIDEwLCAxMCwgMTAsIDIwLCAwLCAw KSB9LAorCXsgRFJNX0ZPUk1BVF9SR0JBMTAxMDEwMiwgIlJBMzAiLCBNQUtFX1JHQl9JTkZPKDEw LCAyMiwgMTAsIDEyLCAxMCwgMiwgMiwgMCkgfSwKKwl7IERSTV9GT1JNQVRfUkdCWDEwMTAxMDIs ICJSWDMwIiwgTUFLRV9SR0JfSU5GTygxMCwgMjIsIDEwLCAxMiwgMTAsIDIsIDAsIDApIH0sCisJ eyBEUk1fRk9STUFUX0JHUkExMDEwMTAyLCAiQkEzMCIsIE1BS0VfUkdCX0lORk8oMTAsIDIsIDEw LCAxMiwgMTAsIDIyLCAyLCAwKSB9LAorCXsgRFJNX0ZPUk1BVF9CR1JYMTAxMDEwMiwgIkJYMzAi LCBNQUtFX1JHQl9JTkZPKDEwLCAyLCAxMCwgMTIsIDEwLCAyMiwgMCwgMCkgfSwKK307CisKK3Vp bnQzMl90IHV0aWxfZm9ybWF0X2ZvdXJjYyhjb25zdCBjaGFyICpuYW1lKQoreworCXVuc2lnbmVk IGludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZm9ybWF0X2luZm8pOyBpKysp CisJCWlmICghc3RyY21wKGZvcm1hdF9pbmZvW2ldLm5hbWUsIG5hbWUpKQorCQkJcmV0dXJuIGZv cm1hdF9pbmZvW2ldLmZvcm1hdDsKKworCXJldHVybiAwOworfQorCitjb25zdCBzdHJ1Y3QgdXRp bF9mb3JtYXRfaW5mbyAqdXRpbF9mb3JtYXRfaW5mb19maW5kKHVpbnQzMl90IGZvcm1hdCkKK3sK Kwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZvcm1hdF9p bmZvKTsgaSsrKQorCQlpZiAoZm9ybWF0X2luZm9baV0uZm9ybWF0ID09IGZvcm1hdCkKKwkJCXJl dHVybiAmZm9ybWF0X2luZm9baV07CisKKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL3Rl c3RzL3V0aWwvZm9ybWF0LmggYi90ZXN0cy91dGlsL2Zvcm1hdC5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMmNlMWMwMjFmZDc4Ci0tLSAvZGV2L251bGwKKysrIGIv dGVzdHMvdXRpbC9mb3JtYXQuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IDIw MDggVHVuZ3N0ZW4gR3JhcGhpY3MKKyAqICAgSmFrb2IgQm9ybmVjcmFudHogPGpha29iQHR1bmdz dGVuZ3JhcGhpY3MuY29tPgorICogQ29weXJpZ2h0IDIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAq ICAgSmVzc2UgQmFybmVzIDxqZXNzZS5iYXJuZXNAaW50ZWwuY29tPgorICoKKyAqIFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUg d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhl IHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs IHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwg YmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2Yg dGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBX SVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNM VURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1F TlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVS UyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZ LCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFS SVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJF IE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLwor CisjaWZuZGVmIFVUSUxfRk9STUFUX0gKKyNkZWZpbmUgVVRJTF9GT1JNQVRfSAorCitzdHJ1Y3Qg dXRpbF9jb2xvcl9jb21wb25lbnQgeworCXVuc2lnbmVkIGludCBsZW5ndGg7CisJdW5zaWduZWQg aW50IG9mZnNldDsKK307CisKK3N0cnVjdCB1dGlsX3JnYl9pbmZvIHsKKwlzdHJ1Y3QgdXRpbF9j b2xvcl9jb21wb25lbnQgcmVkOworCXN0cnVjdCB1dGlsX2NvbG9yX2NvbXBvbmVudCBncmVlbjsK KwlzdHJ1Y3QgdXRpbF9jb2xvcl9jb21wb25lbnQgYmx1ZTsKKwlzdHJ1Y3QgdXRpbF9jb2xvcl9j b21wb25lbnQgYWxwaGE7Cit9OworCitlbnVtIHV0aWxfeXV2X29yZGVyIHsKKwlZVVZfWUNiQ3Ig PSAxLAorCVlVVl9ZQ3JDYiA9IDIsCisJWVVWX1lDID0gNCwKKwlZVVZfQ1kgPSA4LAorfTsKKwor c3RydWN0IHV0aWxfeXV2X2luZm8geworCWVudW0gdXRpbF95dXZfb3JkZXIgb3JkZXI7CisJdW5z aWduZWQgaW50IHhzdWI7CisJdW5zaWduZWQgaW50IHlzdWI7CisJdW5zaWduZWQgaW50IGNocm9t YV9zdHJpZGU7Cit9OworCitzdHJ1Y3QgdXRpbF9mb3JtYXRfaW5mbyB7CisJdWludDMyX3QgZm9y bWF0OworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3Qgc3RydWN0IHV0aWxfcmdiX2luZm8gcmdi OworCWNvbnN0IHN0cnVjdCB1dGlsX3l1dl9pbmZvIHl1djsKK307CisKK3VpbnQzMl90IHV0aWxf Zm9ybWF0X2ZvdXJjYyhjb25zdCBjaGFyICpuYW1lKTsKK2NvbnN0IHN0cnVjdCB1dGlsX2Zvcm1h dF9pbmZvICp1dGlsX2Zvcm1hdF9pbmZvX2ZpbmQodWludDMyX3QgZm9ybWF0KTsKKworI2VuZGlm IC8qIFVUSUxfRk9STUFUX0ggKi8KZGlmZiAtLWdpdCBhL3Rlc3RzL3V0aWwvcGF0dGVybi5jIGIv dGVzdHMvdXRpbC9wYXR0ZXJuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi4wMGIwOGE4Y2I4ZWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy91dGlsL3BhdHRlcm4u YwpAQCAtMCwwICsxLDg3MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IFR1bmdzdGVuIEdyYXBo aWNzCisgKiAgIEpha29iIEJvcm5lY3JhbnR6IDxqYWtvYkB0dW5nc3RlbmdyYXBoaWNzLmNvbT4K KyAqIENvcHlyaWdodCAyMDA4IEludGVsIENvcnBvcmF0aW9uCisgKiAgIEplc3NlIEJhcm5lcyA8 amVzc2UuYmFybmVzQGludGVsLmNvbT4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFu dGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBv ZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAi U29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rp b24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBj b3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICog YW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25z IHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3Qg dG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQg bm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisg KiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAq CisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBP RiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN SVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBT SEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBB TlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBB Q1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBP VVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9U SEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2lmZGVmIEhBVkVfQ09O RklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW50Lmg+ CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJp bmcuaD4KKworI2luY2x1ZGUgPGRybV9mb3VyY2MuaD4KKworI2lmZGVmIEhBVkVfQ0FJUk8KKyNp bmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNlbmRpZgorCisjaW5jbHVkZSAi Zm9ybWF0LmgiCisjaW5jbHVkZSAicGF0dGVybi5oIgorCitzdHJ1Y3QgY29sb3JfcmdiMjQgewor CXVuc2lnbmVkIGludCB2YWx1ZToyNDsKK30gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwor CitzdHJ1Y3QgY29sb3JfeXV2IHsKKwl1bnNpZ25lZCBjaGFyIHk7CisJdW5zaWduZWQgY2hhciB1 OworCXVuc2lnbmVkIGNoYXIgdjsKK307CisKKyNkZWZpbmUgTUFLRV9ZVVZfNjAxX1kociwgZywg YikgXAorCSgoKCA2NiAqIChyKSArIDEyOSAqIChnKSArICAyNSAqIChiKSArIDEyOCkgPj4gOCkg KyAxNikKKyNkZWZpbmUgTUFLRV9ZVVZfNjAxX1UociwgZywgYikgXAorCSgoKC0zOCAqIChyKSAt ICA3NCAqIChnKSArIDExMiAqIChiKSArIDEyOCkgPj4gOCkgKyAxMjgpCisjZGVmaW5lIE1BS0Vf WVVWXzYwMV9WKHIsIGcsIGIpIFwKKwkoKCgxMTIgKiAocikgLSAgOTQgKiAoZykgLSAgMTggKiAo YikgKyAxMjgpID4+IDgpICsgMTI4KQorCisjZGVmaW5lIE1BS0VfWVVWXzYwMShyLCBnLCBiKSBc CisJeyAueSA9IE1BS0VfWVVWXzYwMV9ZKHIsIGcsIGIpLCBcCisJICAudSA9IE1BS0VfWVVWXzYw MV9VKHIsIGcsIGIpLCBcCisJICAudiA9IE1BS0VfWVVWXzYwMV9WKHIsIGcsIGIpIH0KKworI2Rl ZmluZSBNQUtFX1JHQkEocmdiLCByLCBnLCBiLCBhKSBcCisJKCgoKHIpID4+ICg4IC0gKHJnYikt PnJlZC5sZW5ndGgpKSA8PCAocmdiKS0+cmVkLm9mZnNldCkgfCBcCisJICgoKGcpID4+ICg4IC0g KHJnYiktPmdyZWVuLmxlbmd0aCkpIDw8IChyZ2IpLT5ncmVlbi5vZmZzZXQpIHwgXAorCSAoKChi KSA+PiAoOCAtIChyZ2IpLT5ibHVlLmxlbmd0aCkpIDw8IChyZ2IpLT5ibHVlLm9mZnNldCkgfCBc CisJICgoKGEpID4+ICg4IC0gKHJnYiktPmFscGhhLmxlbmd0aCkpIDw8IChyZ2IpLT5hbHBoYS5v ZmZzZXQpKQorCisjZGVmaW5lIE1BS0VfUkdCMjQocmdiLCByLCBnLCBiKSBcCisJeyAudmFsdWUg PSBNQUtFX1JHQkEocmdiLCByLCBnLCBiLCAwKSB9CisKK3N0YXRpYyB2b2lkIGZpbGxfc21wdGVf eXV2X3BsYW5hcihjb25zdCBzdHJ1Y3QgdXRpbF95dXZfaW5mbyAqeXV2LAorCQkJCSAgdW5zaWdu ZWQgY2hhciAqeV9tZW0sIHVuc2lnbmVkIGNoYXIgKnVfbWVtLAorCQkJCSAgdW5zaWduZWQgY2hh ciAqdl9tZW0sIHVuc2lnbmVkIGludCB3aWR0aCwKKwkJCQkgIHVuc2lnbmVkIGludCBoZWlnaHQs IHVuc2lnbmVkIGludCBzdHJpZGUpCit7CisJY29uc3Qgc3RydWN0IGNvbG9yX3l1diBjb2xvcnNf dG9wW10gPSB7CisJCU1BS0VfWVVWXzYwMSgxOTEsIDE5MiwgMTkyKSwJLyogZ3JleSAqLworCQlN QUtFX1lVVl82MDEoMTkyLCAxOTIsIDApLAkvKiB5ZWxsb3cgKi8KKwkJTUFLRV9ZVVZfNjAxKDAs IDE5MiwgMTkyKSwJLyogY3lhbiAqLworCQlNQUtFX1lVVl82MDEoMCwgMTkyLCAwKSwJLyogZ3Jl ZW4gKi8KKwkJTUFLRV9ZVVZfNjAxKDE5MiwgMCwgMTkyKSwJLyogbWFnZW50YSAqLworCQlNQUtF X1lVVl82MDEoMTkyLCAwLCAwKSwJLyogcmVkICovCisJCU1BS0VfWVVWXzYwMSgwLCAwLCAxOTIp LAkvKiBibHVlICovCisJfTsKKwljb25zdCBzdHJ1Y3QgY29sb3JfeXV2IGNvbG9yc19taWRkbGVb XSA9IHsKKwkJTUFLRV9ZVVZfNjAxKDAsIDAsIDE5MiksCS8qIGJsdWUgKi8KKwkJTUFLRV9ZVVZf NjAxKDE5LCAxOSwgMTkpLAkvKiBibGFjayAqLworCQlNQUtFX1lVVl82MDEoMTkyLCAwLCAxOTIp LAkvKiBtYWdlbnRhICovCisJCU1BS0VfWVVWXzYwMSgxOSwgMTksIDE5KSwJLyogYmxhY2sgKi8K KwkJTUFLRV9ZVVZfNjAxKDAsIDE5MiwgMTkyKSwJLyogY3lhbiAqLworCQlNQUtFX1lVVl82MDEo MTksIDE5LCAxOSksCS8qIGJsYWNrICovCisJCU1BS0VfWVVWXzYwMSgxOTIsIDE5MiwgMTkyKSwJ LyogZ3JleSAqLworCX07CisJY29uc3Qgc3RydWN0IGNvbG9yX3l1diBjb2xvcnNfYm90dG9tW10g PSB7CisJCU1BS0VfWVVWXzYwMSgwLCAzMywgNzYpLAkvKiBpbi1waGFzZSAqLworCQlNQUtFX1lV Vl82MDEoMjU1LCAyNTUsIDI1NSksCS8qIHN1cGVyIHdoaXRlICovCisJCU1BS0VfWVVWXzYwMSg1 MCwgMCwgMTA2KSwJLyogcXVhZHJhdHVyZSAqLworCQlNQUtFX1lVVl82MDEoMTksIDE5LCAxOSks CS8qIGJsYWNrICovCisJCU1BS0VfWVVWXzYwMSg5LCA5LCA5KSwJCS8qIDMuNSUgKi8KKwkJTUFL RV9ZVVZfNjAxKDE5LCAxOSwgMTkpLAkvKiA3LjUlICovCisJCU1BS0VfWVVWXzYwMSgyOSwgMjks IDI5KSwJLyogMTEuNSUgKi8KKwkJTUFLRV9ZVVZfNjAxKDE5LCAxOSwgMTkpLAkvKiBibGFjayAq LworCX07CisJdW5zaWduZWQgaW50IGNzID0geXV2LT5jaHJvbWFfc3RyaWRlOworCXVuc2lnbmVk IGludCB4c3ViID0geXV2LT54c3ViOworCXVuc2lnbmVkIGludCB5c3ViID0geXV2LT55c3ViOwor CXVuc2lnbmVkIGludCB4OworCXVuc2lnbmVkIGludCB5OworCisJLyogTHVtYSAqLworCWZvciAo eSA9IDA7IHkgPCBoZWlnaHQgKiA2IC8gOTsgKyt5KSB7CisJCWZvciAoeCA9IDA7IHggPCB3aWR0 aDsgKyt4KQorCQkJeV9tZW1beF0gPSBjb2xvcnNfdG9wW3ggKiA3IC8gd2lkdGhdLnk7CisJCXlf bWVtICs9IHN0cmlkZTsKKwl9CisKKwlmb3IgKDsgeSA8IGhlaWdodCAqIDcgLyA5OyArK3kpIHsK KwkJZm9yICh4ID0gMDsgeCA8IHdpZHRoOyArK3gpCisJCQl5X21lbVt4XSA9IGNvbG9yc19taWRk bGVbeCAqIDcgLyB3aWR0aF0ueTsKKwkJeV9tZW0gKz0gc3RyaWRlOworCX0KKworCWZvciAoOyB5 IDwgaGVpZ2h0OyArK3kpIHsKKwkJZm9yICh4ID0gMDsgeCA8IHdpZHRoICogNSAvIDc7ICsreCkK KwkJCXlfbWVtW3hdID0gY29sb3JzX2JvdHRvbVt4ICogNCAvICh3aWR0aCAqIDUgLyA3KV0ueTsK KwkJZm9yICg7IHggPCB3aWR0aCAqIDYgLyA3OyArK3gpCisJCQl5X21lbVt4XSA9IGNvbG9yc19i b3R0b21bKHggLSB3aWR0aCAqIDUgLyA3KSAqIDMKKwkJCQkJCSAvICh3aWR0aCAvIDcpICsgNF0u eTsKKwkJZm9yICg7IHggPCB3aWR0aDsgKyt4KQorCQkJeV9tZW1beF0gPSBjb2xvcnNfYm90dG9t WzddLnk7CisJCXlfbWVtICs9IHN0cmlkZTsKKwl9CisKKwkvKiBDaHJvbWEgKi8KKwlmb3IgKHkg PSAwOyB5IDwgaGVpZ2h0IC8geXN1YiAqIDYgLyA5OyArK3kpIHsKKwkJZm9yICh4ID0gMDsgeCA8 IHdpZHRoOyB4ICs9IHhzdWIpIHsKKwkJCXVfbWVtW3gqY3MveHN1Yl0gPSBjb2xvcnNfdG9wW3gg KiA3IC8gd2lkdGhdLnU7CisJCQl2X21lbVt4KmNzL3hzdWJdID0gY29sb3JzX3RvcFt4ICogNyAv IHdpZHRoXS52OworCQl9CisJCXVfbWVtICs9IHN0cmlkZSAqIGNzIC8geHN1YjsKKwkJdl9tZW0g Kz0gc3RyaWRlICogY3MgLyB4c3ViOworCX0KKworCWZvciAoOyB5IDwgaGVpZ2h0IC8geXN1YiAq IDcgLyA5OyArK3kpIHsKKwkJZm9yICh4ID0gMDsgeCA8IHdpZHRoOyB4ICs9IHhzdWIpIHsKKwkJ CXVfbWVtW3gqY3MveHN1Yl0gPSBjb2xvcnNfbWlkZGxlW3ggKiA3IC8gd2lkdGhdLnU7CisJCQl2 X21lbVt4KmNzL3hzdWJdID0gY29sb3JzX21pZGRsZVt4ICogNyAvIHdpZHRoXS52OworCQl9CisJ CXVfbWVtICs9IHN0cmlkZSAqIGNzIC8geHN1YjsKKwkJdl9tZW0gKz0gc3RyaWRlICogY3MgLyB4 c3ViOworCX0KKworCWZvciAoOyB5IDwgaGVpZ2h0IC8geXN1YjsgKyt5KSB7CisJCWZvciAoeCA9 IDA7IHggPCB3aWR0aCAqIDUgLyA3OyB4ICs9IHhzdWIpIHsKKwkJCXVfbWVtW3gqY3MveHN1Yl0g PQorCQkJCWNvbG9yc19ib3R0b21beCAqIDQgLyAod2lkdGggKiA1IC8gNyldLnU7CisJCQl2X21l bVt4KmNzL3hzdWJdID0KKwkJCQljb2xvcnNfYm90dG9tW3ggKiA0IC8gKHdpZHRoICogNSAvIDcp XS52OworCQl9CisJCWZvciAoOyB4IDwgd2lkdGggKiA2IC8gNzsgeCArPSB4c3ViKSB7CisJCQl1 X21lbVt4KmNzL3hzdWJdID0gY29sb3JzX2JvdHRvbVsoeCAtIHdpZHRoICogNSAvIDcpICoKKwkJ CQkJCQkgMyAvICh3aWR0aCAvIDcpICsgNF0udTsKKwkJCXZfbWVtW3gqY3MveHN1Yl0gPSBjb2xv cnNfYm90dG9tWyh4IC0gd2lkdGggKiA1IC8gNykgKgorCQkJCQkJCSAzIC8gKHdpZHRoIC8gNykg KyA0XS52OworCQl9CisJCWZvciAoOyB4IDwgd2lkdGg7IHggKz0geHN1YikgeworCQkJdV9tZW1b eCpjcy94c3ViXSA9IGNvbG9yc19ib3R0b21bN10udTsKKwkJCXZfbWVtW3gqY3MveHN1Yl0gPSBj b2xvcnNfYm90dG9tWzddLnY7CisJCX0KKwkJdV9tZW0gKz0gc3RyaWRlICogY3MgLyB4c3ViOwor CQl2X21lbSArPSBzdHJpZGUgKiBjcyAvIHhzdWI7CisJfQorfQorCitzdGF0aWMgdm9pZCBmaWxs X3NtcHRlX3l1dl9wYWNrZWQoY29uc3Qgc3RydWN0IHV0aWxfeXV2X2luZm8gKnl1diwgdm9pZCAq bWVtLAorCQkJCSAgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0LAorCQkJ CSAgdW5zaWduZWQgaW50IHN0cmlkZSkKK3sKKwljb25zdCBzdHJ1Y3QgY29sb3JfeXV2IGNvbG9y c190b3BbXSA9IHsKKwkJTUFLRV9ZVVZfNjAxKDE5MSwgMTkyLCAxOTIpLAkvKiBncmV5ICovCisJ CU1BS0VfWVVWXzYwMSgxOTIsIDE5MiwgMCksCS8qIHllbGxvdyAqLworCQlNQUtFX1lVVl82MDEo MCwgMTkyLCAxOTIpLAkvKiBjeWFuICovCisJCU1BS0VfWVVWXzYwMSgwLCAxOTIsIDApLAkvKiBn cmVlbiAqLworCQlNQUtFX1lVVl82MDEoMTkyLCAwLCAxOTIpLAkvKiBtYWdlbnRhICovCisJCU1B S0VfWVVWXzYwMSgxOTIsIDAsIDApLAkvKiByZWQgKi8KKwkJTUFLRV9ZVVZfNjAxKDAsIDAsIDE5 MiksCS8qIGJsdWUgKi8KKwl9OworCWNvbnN0IHN0cnVjdCBjb2xvcl95dXYgY29sb3JzX21pZGRs ZVtdID0geworCQlNQUtFX1lVVl82MDEoMCwgMCwgMTkyKSwJLyogYmx1ZSAqLworCQlNQUtFX1lV Vl82MDEoMTksIDE5LCAxOSksCS8qIGJsYWNrICovCisJCU1BS0VfWVVWXzYwMSgxOTIsIDAsIDE5 MiksCS8qIG1hZ2VudGEgKi8KKwkJTUFLRV9ZVVZfNjAxKDE5LCAxOSwgMTkpLAkvKiBibGFjayAq LworCQlNQUtFX1lVVl82MDEoMCwgMTkyLCAxOTIpLAkvKiBjeWFuICovCisJCU1BS0VfWVVWXzYw MSgxOSwgMTksIDE5KSwJLyogYmxhY2sgKi8KKwkJTUFLRV9ZVVZfNjAxKDE5MiwgMTkyLCAxOTIp LAkvKiBncmV5ICovCisJfTsKKwljb25zdCBzdHJ1Y3QgY29sb3JfeXV2IGNvbG9yc19ib3R0b21b XSA9IHsKKwkJTUFLRV9ZVVZfNjAxKDAsIDMzLCA3NiksCS8qIGluLXBoYXNlICovCisJCU1BS0Vf WVVWXzYwMSgyNTUsIDI1NSwgMjU1KSwJLyogc3VwZXIgd2hpdGUgKi8KKwkJTUFLRV9ZVVZfNjAx KDUwLCAwLCAxMDYpLAkvKiBxdWFkcmF0dXJlICovCisJCU1BS0VfWVVWXzYwMSgxOSwgMTksIDE5 KSwJLyogYmxhY2sgKi8KKwkJTUFLRV9ZVVZfNjAxKDksIDksIDkpLAkJLyogMy41JSAqLworCQlN QUtFX1lVVl82MDEoMTksIDE5LCAxOSksCS8qIDcuNSUgKi8KKwkJTUFLRV9ZVVZfNjAxKDI5LCAy OSwgMjkpLAkvKiAxMS41JSAqLworCQlNQUtFX1lVVl82MDEoMTksIDE5LCAxOSksCS8qIGJsYWNr ICovCisJfTsKKwl1bnNpZ25lZCBjaGFyICp5X21lbSA9ICh5dXYtPm9yZGVyICYgWVVWX1lDKSA/ IG1lbSA6IG1lbSArIDE7CisJdW5zaWduZWQgY2hhciAqY19tZW0gPSAoeXV2LT5vcmRlciAmIFlV Vl9DWSkgPyBtZW0gOiBtZW0gKyAxOworCXVuc2lnbmVkIGludCB1ID0gKHl1di0+b3JkZXIgJiBZ VVZfWUNyQ2IpID8gMiA6IDA7CisJdW5zaWduZWQgaW50IHYgPSAoeXV2LT5vcmRlciAmIFlVVl9Z Q2JDcikgPyAyIDogMDsKKwl1bnNpZ25lZCBpbnQgeDsKKwl1bnNpZ25lZCBpbnQgeTsKKworCS8q IEx1bWEgKi8KKwlmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0ICogNiAvIDk7ICsreSkgeworCQlmb3Ig KHggPSAwOyB4IDwgd2lkdGg7ICsreCkKKwkJCXlfbWVtWzIqeF0gPSBjb2xvcnNfdG9wW3ggKiA3 IC8gd2lkdGhdLnk7CisJCXlfbWVtICs9IHN0cmlkZTsKKwl9CisKKwlmb3IgKDsgeSA8IGhlaWdo dCAqIDcgLyA5OyArK3kpIHsKKwkJZm9yICh4ID0gMDsgeCA8IHdpZHRoOyArK3gpCisJCQl5X21l bVsyKnhdID0gY29sb3JzX21pZGRsZVt4ICogNyAvIHdpZHRoXS55OworCQl5X21lbSArPSBzdHJp ZGU7CisJfQorCisJZm9yICg7IHkgPCBoZWlnaHQ7ICsreSkgeworCQlmb3IgKHggPSAwOyB4IDwg d2lkdGggKiA1IC8gNzsgKyt4KQorCQkJeV9tZW1bMip4XSA9IGNvbG9yc19ib3R0b21beCAqIDQg LyAod2lkdGggKiA1IC8gNyldLnk7CisJCWZvciAoOyB4IDwgd2lkdGggKiA2IC8gNzsgKyt4KQor CQkJeV9tZW1bMip4XSA9IGNvbG9yc19ib3R0b21bKHggLSB3aWR0aCAqIDUgLyA3KSAqIDMKKwkJ CQkJCSAgIC8gKHdpZHRoIC8gNykgKyA0XS55OworCQlmb3IgKDsgeCA8IHdpZHRoOyArK3gpCisJ CQl5X21lbVsyKnhdID0gY29sb3JzX2JvdHRvbVs3XS55OworCQl5X21lbSArPSBzdHJpZGU7CisJ fQorCisJLyogQ2hyb21hICovCisJZm9yICh5ID0gMDsgeSA8IGhlaWdodCAqIDYgLyA5OyArK3kp IHsKKwkJZm9yICh4ID0gMDsgeCA8IHdpZHRoOyB4ICs9IDIpIHsKKwkJCWNfbWVtWzIqeCt1XSA9 IGNvbG9yc190b3BbeCAqIDcgLyB3aWR0aF0udTsKKwkJCWNfbWVtWzIqeCt2XSA9IGNvbG9yc190 b3BbeCAqIDcgLyB3aWR0aF0udjsKKwkJfQorCQljX21lbSArPSBzdHJpZGU7CisJfQorCisJZm9y ICg7IHkgPCBoZWlnaHQgKiA3IC8gOTsgKyt5KSB7CisJCWZvciAoeCA9IDA7IHggPCB3aWR0aDsg eCArPSAyKSB7CisJCQljX21lbVsyKngrdV0gPSBjb2xvcnNfbWlkZGxlW3ggKiA3IC8gd2lkdGhd LnU7CisJCQljX21lbVsyKngrdl0gPSBjb2xvcnNfbWlkZGxlW3ggKiA3IC8gd2lkdGhdLnY7CisJ CX0KKwkJY19tZW0gKz0gc3RyaWRlOworCX0KKworCWZvciAoOyB5IDwgaGVpZ2h0OyArK3kpIHsK KwkJZm9yICh4ID0gMDsgeCA8IHdpZHRoICogNSAvIDc7IHggKz0gMikgeworCQkJY19tZW1bMip4 K3VdID0gY29sb3JzX2JvdHRvbVt4ICogNCAvICh3aWR0aCAqIDUgLyA3KV0udTsKKwkJCWNfbWVt WzIqeCt2XSA9IGNvbG9yc19ib3R0b21beCAqIDQgLyAod2lkdGggKiA1IC8gNyldLnY7CisJCX0K KwkJZm9yICg7IHggPCB3aWR0aCAqIDYgLyA3OyB4ICs9IDIpIHsKKwkJCWNfbWVtWzIqeCt1XSA9 IGNvbG9yc19ib3R0b21bKHggLSB3aWR0aCAqIDUgLyA3KSAqCisJCQkJCQkgICAgIDMgLyAod2lk dGggLyA3KSArIDRdLnU7CisJCQljX21lbVsyKngrdl0gPSBjb2xvcnNfYm90dG9tWyh4IC0gd2lk dGggKiA1IC8gNykgKgorCQkJCQkJICAgICAzIC8gKHdpZHRoIC8gNykgKyA0XS52OworCQl9CisJ CWZvciAoOyB4IDwgd2lkdGg7IHggKz0gMikgeworCQkJY19tZW1bMip4K3VdID0gY29sb3JzX2Jv dHRvbVs3XS51OworCQkJY19tZW1bMip4K3ZdID0gY29sb3JzX2JvdHRvbVs3XS52OworCQl9CisJ CWNfbWVtICs9IHN0cmlkZTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxfc21wdGVfcmdiMTYo Y29uc3Qgc3RydWN0IHV0aWxfcmdiX2luZm8gKnJnYiwgdm9pZCAqbWVtLAorCQkJICAgICB1bnNp Z25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQsCisJCQkgICAgIHVuc2lnbmVkIGlu dCBzdHJpZGUpCit7CisJY29uc3QgdWludDE2X3QgY29sb3JzX3RvcFtdID0geworCQlNQUtFX1JH QkEocmdiLCAxOTIsIDE5MiwgMTkyLCAyNTUpLAkvKiBncmV5ICovCisJCU1BS0VfUkdCQShyZ2Is IDE5MiwgMTkyLCAwLCAyNTUpLAkvKiB5ZWxsb3cgKi8KKwkJTUFLRV9SR0JBKHJnYiwgMCwgMTky LCAxOTIsIDI1NSksCS8qIGN5YW4gKi8KKwkJTUFLRV9SR0JBKHJnYiwgMCwgMTkyLCAwLCAyNTUp LAkJLyogZ3JlZW4gKi8KKwkJTUFLRV9SR0JBKHJnYiwgMTkyLCAwLCAxOTIsIDI1NSksCS8qIG1h Z2VudGEgKi8KKwkJTUFLRV9SR0JBKHJnYiwgMTkyLCAwLCAwLCAyNTUpLAkJLyogcmVkICovCisJ CU1BS0VfUkdCQShyZ2IsIDAsIDAsIDE5MiwgMjU1KSwJCS8qIGJsdWUgKi8KKwl9OworCWNvbnN0 IHVpbnQxNl90IGNvbG9yc19taWRkbGVbXSA9IHsKKwkJTUFLRV9SR0JBKHJnYiwgMCwgMCwgMTky LCAxMjcpLAkJLyogYmx1ZSAqLworCQlNQUtFX1JHQkEocmdiLCAxOSwgMTksIDE5LCAxMjcpLAkv KiBibGFjayAqLworCQlNQUtFX1JHQkEocmdiLCAxOTIsIDAsIDE5MiwgMTI3KSwJLyogbWFnZW50 YSAqLworCQlNQUtFX1JHQkEocmdiLCAxOSwgMTksIDE5LCAxMjcpLAkvKiBibGFjayAqLworCQlN QUtFX1JHQkEocmdiLCAwLCAxOTIsIDE5MiwgMTI3KSwJLyogY3lhbiAqLworCQlNQUtFX1JHQkEo cmdiLCAxOSwgMTksIDE5LCAxMjcpLAkvKiBibGFjayAqLworCQlNQUtFX1JHQkEocmdiLCAxOTIs IDE5MiwgMTkyLCAxMjcpLAkvKiBncmV5ICovCisJfTsKKwljb25zdCB1aW50MTZfdCBjb2xvcnNf Ym90dG9tW10gPSB7CisJCU1BS0VfUkdCQShyZ2IsIDAsIDMzLCA3NiwgMjU1KSwJCS8qIGluLXBo YXNlICovCisJCU1BS0VfUkdCQShyZ2IsIDI1NSwgMjU1LCAyNTUsIDI1NSksCS8qIHN1cGVyIHdo aXRlICovCisJCU1BS0VfUkdCQShyZ2IsIDUwLCAwLCAxMDYsIDI1NSksCS8qIHF1YWRyYXR1cmUg Ki8KKwkJTUFLRV9SR0JBKHJnYiwgMTksIDE5LCAxOSwgMjU1KSwJLyogYmxhY2sgKi8KKwkJTUFL RV9SR0JBKHJnYiwgOSwgOSwgOSwgMjU1KSwJCS8qIDMuNSUgKi8KKwkJTUFLRV9SR0JBKHJnYiwg MTksIDE5LCAxOSwgMjU1KSwJLyogNy41JSAqLworCQlNQUtFX1JHQkEocmdiLCAyOSwgMjksIDI5 LCAyNTUpLAkvKiAxMS41JSAqLworCQlNQUtFX1JHQkEocmdiLCAxOSwgMTksIDE5LCAyNTUpLAkv KiBibGFjayAqLworCX07CisJdW5zaWduZWQgaW50IHg7CisJdW5zaWduZWQgaW50IHk7CisKKwlm b3IgKHkgPSAwOyB5IDwgaGVpZ2h0ICogNiAvIDk7ICsreSkgeworCQlmb3IgKHggPSAwOyB4IDwg d2lkdGg7ICsreCkKKwkJCSgodWludDE2X3QgKiltZW0pW3hdID0gY29sb3JzX3RvcFt4ICogNyAv IHdpZHRoXTsKKwkJbWVtICs9IHN0cmlkZTsKKwl9CisKKwlmb3IgKDsgeSA8IGhlaWdodCAqIDcg LyA5OyArK3kpIHsKKwkJZm9yICh4ID0gMDsgeCA8IHdpZHRoOyArK3gpCisJCQkoKHVpbnQxNl90 ICopbWVtKVt4XSA9IGNvbG9yc19taWRkbGVbeCAqIDcgLyB3aWR0aF07CisJCW1lbSArPSBzdHJp ZGU7CisJfQorCisJZm9yICg7IHkgPCBoZWlnaHQ7ICsreSkgeworCQlmb3IgKHggPSAwOyB4IDwg d2lkdGggKiA1IC8gNzsgKyt4KQorCQkJKCh1aW50MTZfdCAqKW1lbSlbeF0gPQorCQkJCWNvbG9y c19ib3R0b21beCAqIDQgLyAod2lkdGggKiA1IC8gNyldOworCQlmb3IgKDsgeCA8IHdpZHRoICog NiAvIDc7ICsreCkKKwkJCSgodWludDE2X3QgKiltZW0pW3hdID0KKwkJCQljb2xvcnNfYm90dG9t Wyh4IC0gd2lkdGggKiA1IC8gNykgKiAzCisJCQkJCSAgICAgIC8gKHdpZHRoIC8gNykgKyA0XTsK KwkJZm9yICg7IHggPCB3aWR0aDsgKyt4KQorCQkJKCh1aW50MTZfdCAqKW1lbSlbeF0gPSBjb2xv cnNfYm90dG9tWzddOworCQltZW0gKz0gc3RyaWRlOworCX0KK30KKworc3RhdGljIHZvaWQgZmls bF9zbXB0ZV9yZ2IyNChjb25zdCBzdHJ1Y3QgdXRpbF9yZ2JfaW5mbyAqcmdiLCB2b2lkICptZW0s CisJCQkgICAgIHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdodCwKKwkJCSAg ICAgdW5zaWduZWQgaW50IHN0cmlkZSkKK3sKKwljb25zdCBzdHJ1Y3QgY29sb3JfcmdiMjQgY29s b3JzX3RvcFtdID0geworCQlNQUtFX1JHQjI0KHJnYiwgMTkyLCAxOTIsIDE5MiksCS8qIGdyZXkg Ki8KKwkJTUFLRV9SR0IyNChyZ2IsIDE5MiwgMTkyLCAwKSwJLyogeWVsbG93ICovCisJCU1BS0Vf UkdCMjQocmdiLCAwLCAxOTIsIDE5MiksCS8qIGN5YW4gKi8KKwkJTUFLRV9SR0IyNChyZ2IsIDAs IDE5MiwgMCksCS8qIGdyZWVuICovCisJCU1BS0VfUkdCMjQocmdiLCAxOTIsIDAsIDE5MiksCS8q IG1hZ2VudGEgKi8KKwkJTUFLRV9SR0IyNChyZ2IsIDE5MiwgMCwgMCksCS8qIHJlZCAqLworCQlN QUtFX1JHQjI0KHJnYiwgMCwgMCwgMTkyKSwJLyogYmx1ZSAqLworCX07CisJY29uc3Qgc3RydWN0 IGNvbG9yX3JnYjI0IGNvbG9yc19taWRkbGVbXSA9IHsKKwkJTUFLRV9SR0IyNChyZ2IsIDAsIDAs IDE5MiksCS8qIGJsdWUgKi8KKwkJTUFLRV9SR0IyNChyZ2IsIDE5LCAxOSwgMTkpLAkvKiBibGFj ayAqLworCQlNQUtFX1JHQjI0KHJnYiwgMTkyLCAwLCAxOTIpLAkvKiBtYWdlbnRhICovCisJCU1B S0VfUkdCMjQocmdiLCAxOSwgMTksIDE5KSwJLyogYmxhY2sgKi8KKwkJTUFLRV9SR0IyNChyZ2Is IDAsIDE5MiwgMTkyKSwJLyogY3lhbiAqLworCQlNQUtFX1JHQjI0KHJnYiwgMTksIDE5LCAxOSks CS8qIGJsYWNrICovCisJCU1BS0VfUkdCMjQocmdiLCAxOTIsIDE5MiwgMTkyKSwJLyogZ3JleSAq LworCX07CisJY29uc3Qgc3RydWN0IGNvbG9yX3JnYjI0IGNvbG9yc19ib3R0b21bXSA9IHsKKwkJ TUFLRV9SR0IyNChyZ2IsIDAsIDMzLCA3NiksCS8qIGluLXBoYXNlICovCisJCU1BS0VfUkdCMjQo cmdiLCAyNTUsIDI1NSwgMjU1KSwJLyogc3VwZXIgd2hpdGUgKi8KKwkJTUFLRV9SR0IyNChyZ2Is IDUwLCAwLCAxMDYpLAkvKiBxdWFkcmF0dXJlICovCisJCU1BS0VfUkdCMjQocmdiLCAxOSwgMTks IDE5KSwJLyogYmxhY2sgKi8KKwkJTUFLRV9SR0IyNChyZ2IsIDksIDksIDkpLAkvKiAzLjUlICov CisJCU1BS0VfUkdCMjQocmdiLCAxOSwgMTksIDE5KSwJLyogNy41JSAqLworCQlNQUtFX1JHQjI0 KHJnYiwgMjksIDI5LCAyOSksCS8qIDExLjUlICovCisJCU1BS0VfUkdCMjQocmdiLCAxOSwgMTks IDE5KSwJLyogYmxhY2sgKi8KKwl9OworCXVuc2lnbmVkIGludCB4OworCXVuc2lnbmVkIGludCB5 OworCisJZm9yICh5ID0gMDsgeSA8IGhlaWdodCAqIDYgLyA5OyArK3kpIHsKKwkJZm9yICh4ID0g MDsgeCA8IHdpZHRoOyArK3gpCisJCQkoKHN0cnVjdCBjb2xvcl9yZ2IyNCAqKW1lbSlbeF0gPQor CQkJCWNvbG9yc190b3BbeCAqIDcgLyB3aWR0aF07CisJCW1lbSArPSBzdHJpZGU7CisJfQorCisJ Zm9yICg7IHkgPCBoZWlnaHQgKiA3IC8gOTsgKyt5KSB7CisJCWZvciAoeCA9IDA7IHggPCB3aWR0 aDsgKyt4KQorCQkJKChzdHJ1Y3QgY29sb3JfcmdiMjQgKiltZW0pW3hdID0KKwkJCQljb2xvcnNf bWlkZGxlW3ggKiA3IC8gd2lkdGhdOworCQltZW0gKz0gc3RyaWRlOworCX0KKworCWZvciAoOyB5 IDwgaGVpZ2h0OyArK3kpIHsKKwkJZm9yICh4ID0gMDsgeCA8IHdpZHRoICogNSAvIDc7ICsreCkK KwkJCSgoc3RydWN0IGNvbG9yX3JnYjI0ICopbWVtKVt4XSA9CisJCQkJY29sb3JzX2JvdHRvbVt4 ICogNCAvICh3aWR0aCAqIDUgLyA3KV07CisJCWZvciAoOyB4IDwgd2lkdGggKiA2IC8gNzsgKyt4 KQorCQkJKChzdHJ1Y3QgY29sb3JfcmdiMjQgKiltZW0pW3hdID0KKwkJCQljb2xvcnNfYm90dG9t Wyh4IC0gd2lkdGggKiA1IC8gNykgKiAzCisJCQkJCSAgICAgIC8gKHdpZHRoIC8gNykgKyA0XTsK KwkJZm9yICg7IHggPCB3aWR0aDsgKyt4KQorCQkJKChzdHJ1Y3QgY29sb3JfcmdiMjQgKiltZW0p W3hdID0gY29sb3JzX2JvdHRvbVs3XTsKKwkJbWVtICs9IHN0cmlkZTsKKwl9Cit9CisKK3N0YXRp YyB2b2lkIGZpbGxfc21wdGVfcmdiMzIoY29uc3Qgc3RydWN0IHV0aWxfcmdiX2luZm8gKnJnYiwg dm9pZCAqbWVtLAorCQkJICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWln aHQsCisJCQkgICAgIHVuc2lnbmVkIGludCBzdHJpZGUpCit7CisJY29uc3QgdWludDMyX3QgY29s b3JzX3RvcFtdID0geworCQlNQUtFX1JHQkEocmdiLCAxOTIsIDE5MiwgMTkyLCAyNTUpLAkvKiBn cmV5ICovCisJCU1BS0VfUkdCQShyZ2IsIDE5MiwgMTkyLCAwLCAyNTUpLAkvKiB5ZWxsb3cgKi8K KwkJTUFLRV9SR0JBKHJnYiwgMCwgMTkyLCAxOTIsIDI1NSksCS8qIGN5YW4gKi8KKwkJTUFLRV9S R0JBKHJnYiwgMCwgMTkyLCAwLCAyNTUpLAkJLyogZ3JlZW4gKi8KKwkJTUFLRV9SR0JBKHJnYiwg MTkyLCAwLCAxOTIsIDI1NSksCS8qIG1hZ2VudGEgKi8KKwkJTUFLRV9SR0JBKHJnYiwgMTkyLCAw LCAwLCAyNTUpLAkJLyogcmVkICovCisJCU1BS0VfUkdCQShyZ2IsIDAsIDAsIDE5MiwgMjU1KSwJ CS8qIGJsdWUgKi8KKwl9OworCWNvbnN0IHVpbnQzMl90IGNvbG9yc19taWRkbGVbXSA9IHsKKwkJ TUFLRV9SR0JBKHJnYiwgMCwgMCwgMTkyLCAxMjcpLAkJLyogYmx1ZSAqLworCQlNQUtFX1JHQkEo cmdiLCAxOSwgMTksIDE5LCAxMjcpLAkvKiBibGFjayAqLworCQlNQUtFX1JHQkEocmdiLCAxOTIs IDAsIDE5MiwgMTI3KSwJLyogbWFnZW50YSAqLworCQlNQUtFX1JHQkEocmdiLCAxOSwgMTksIDE5 LCAxMjcpLAkvKiBibGFjayAqLworCQlNQUtFX1JHQkEocmdiLCAwLCAxOTIsIDE5MiwgMTI3KSwJ LyogY3lhbiAqLworCQlNQUtFX1JHQkEocmdiLCAxOSwgMTksIDE5LCAxMjcpLAkvKiBibGFjayAq LworCQlNQUtFX1JHQkEocmdiLCAxOTIsIDE5MiwgMTkyLCAxMjcpLAkvKiBncmV5ICovCisJfTsK Kwljb25zdCB1aW50MzJfdCBjb2xvcnNfYm90dG9tW10gPSB7CisJCU1BS0VfUkdCQShyZ2IsIDAs IDMzLCA3NiwgMjU1KSwJCS8qIGluLXBoYXNlICovCisJCU1BS0VfUkdCQShyZ2IsIDI1NSwgMjU1 LCAyNTUsIDI1NSksCS8qIHN1cGVyIHdoaXRlICovCisJCU1BS0VfUkdCQShyZ2IsIDUwLCAwLCAx MDYsIDI1NSksCS8qIHF1YWRyYXR1cmUgKi8KKwkJTUFLRV9SR0JBKHJnYiwgMTksIDE5LCAxOSwg MjU1KSwJLyogYmxhY2sgKi8KKwkJTUFLRV9SR0JBKHJnYiwgOSwgOSwgOSwgMjU1KSwJCS8qIDMu NSUgKi8KKwkJTUFLRV9SR0JBKHJnYiwgMTksIDE5LCAxOSwgMjU1KSwJLyogNy41JSAqLworCQlN QUtFX1JHQkEocmdiLCAyOSwgMjksIDI5LCAyNTUpLAkvKiAxMS41JSAqLworCQlNQUtFX1JHQkEo cmdiLCAxOSwgMTksIDE5LCAyNTUpLAkvKiBibGFjayAqLworCX07CisJdW5zaWduZWQgaW50IHg7 CisJdW5zaWduZWQgaW50IHk7CisKKwlmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0ICogNiAvIDk7ICsr eSkgeworCQlmb3IgKHggPSAwOyB4IDwgd2lkdGg7ICsreCkKKwkJCSgodWludDMyX3QgKiltZW0p W3hdID0gY29sb3JzX3RvcFt4ICogNyAvIHdpZHRoXTsKKwkJbWVtICs9IHN0cmlkZTsKKwl9CisK Kwlmb3IgKDsgeSA8IGhlaWdodCAqIDcgLyA5OyArK3kpIHsKKwkJZm9yICh4ID0gMDsgeCA8IHdp ZHRoOyArK3gpCisJCQkoKHVpbnQzMl90ICopbWVtKVt4XSA9IGNvbG9yc19taWRkbGVbeCAqIDcg LyB3aWR0aF07CisJCW1lbSArPSBzdHJpZGU7CisJfQorCisJZm9yICg7IHkgPCBoZWlnaHQ7ICsr eSkgeworCQlmb3IgKHggPSAwOyB4IDwgd2lkdGggKiA1IC8gNzsgKyt4KQorCQkJKCh1aW50MzJf dCAqKW1lbSlbeF0gPQorCQkJCWNvbG9yc19ib3R0b21beCAqIDQgLyAod2lkdGggKiA1IC8gNyld OworCQlmb3IgKDsgeCA8IHdpZHRoICogNiAvIDc7ICsreCkKKwkJCSgodWludDMyX3QgKiltZW0p W3hdID0KKwkJCQljb2xvcnNfYm90dG9tWyh4IC0gd2lkdGggKiA1IC8gNykgKiAzCisJCQkJCSAg ICAgIC8gKHdpZHRoIC8gNykgKyA0XTsKKwkJZm9yICg7IHggPCB3aWR0aDsgKyt4KQorCQkJKCh1 aW50MzJfdCAqKW1lbSlbeF0gPSBjb2xvcnNfYm90dG9tWzddOworCQltZW0gKz0gc3RyaWRlOwor CX0KK30KKworc3RhdGljIHZvaWQgZmlsbF9zbXB0ZShjb25zdCBzdHJ1Y3QgdXRpbF9mb3JtYXRf aW5mbyAqaW5mbywgdm9pZCAqcGxhbmVzWzNdLAorCQkgICAgICAgdW5zaWduZWQgaW50IHdpZHRo LCB1bnNpZ25lZCBpbnQgaGVpZ2h0LAorCQkgICAgICAgdW5zaWduZWQgaW50IHN0cmlkZSkKK3sK Kwl1bnNpZ25lZCBjaGFyICp1LCAqdjsKKworCXN3aXRjaCAoaW5mby0+Zm9ybWF0KSB7CisJY2Fz ZSBEUk1fRk9STUFUX1VZVlk6CisJY2FzZSBEUk1fRk9STUFUX1ZZVVk6CisJY2FzZSBEUk1fRk9S TUFUX1lVWVY6CisJY2FzZSBEUk1fRk9STUFUX1lWWVU6CisJCXJldHVybiBmaWxsX3NtcHRlX3l1 dl9wYWNrZWQoJmluZm8tPnl1diwgcGxhbmVzWzBdLCB3aWR0aCwKKwkJCQkJICAgICBoZWlnaHQs IHN0cmlkZSk7CisKKwljYXNlIERSTV9GT1JNQVRfTlYxMjoKKwljYXNlIERSTV9GT1JNQVRfTlYy MToKKwljYXNlIERSTV9GT1JNQVRfTlYxNjoKKwljYXNlIERSTV9GT1JNQVRfTlY2MToKKwkJdSA9 IGluZm8tPnl1di5vcmRlciAmIFlVVl9ZQ2JDciA/IHBsYW5lc1sxXSA6IHBsYW5lc1sxXSArIDE7 CisJCXYgPSBpbmZvLT55dXYub3JkZXIgJiBZVVZfWUNyQ2IgPyBwbGFuZXNbMV0gOiBwbGFuZXNb MV0gKyAxOworCQlyZXR1cm4gZmlsbF9zbXB0ZV95dXZfcGxhbmFyKCZpbmZvLT55dXYsIHBsYW5l c1swXSwgdSwgdiwKKwkJCQkJICAgICB3aWR0aCwgaGVpZ2h0LCBzdHJpZGUpOworCisJY2FzZSBE Uk1fRk9STUFUX1lVVjQyMDoKKwkJcmV0dXJuIGZpbGxfc21wdGVfeXV2X3BsYW5hcigmaW5mby0+ eXV2LCBwbGFuZXNbMF0sIHBsYW5lc1sxXSwKKwkJCQkJICAgICBwbGFuZXNbMl0sIHdpZHRoLCBo ZWlnaHQsIHN0cmlkZSk7CisKKwljYXNlIERSTV9GT1JNQVRfWVZVNDIwOgorCQlyZXR1cm4gZmls bF9zbXB0ZV95dXZfcGxhbmFyKCZpbmZvLT55dXYsIHBsYW5lc1swXSwgcGxhbmVzWzJdLAorCQkJ CQkgICAgIHBsYW5lc1sxXSwgd2lkdGgsIGhlaWdodCwgc3RyaWRlKTsKKworCWNhc2UgRFJNX0ZP Uk1BVF9BUkdCNDQ0NDoKKwljYXNlIERSTV9GT1JNQVRfWFJHQjQ0NDQ6CisJY2FzZSBEUk1fRk9S TUFUX0FCR1I0NDQ0OgorCWNhc2UgRFJNX0ZPUk1BVF9YQkdSNDQ0NDoKKwljYXNlIERSTV9GT1JN QVRfUkdCQTQ0NDQ6CisJY2FzZSBEUk1fRk9STUFUX1JHQlg0NDQ0OgorCWNhc2UgRFJNX0ZPUk1B VF9CR1JBNDQ0NDoKKwljYXNlIERSTV9GT1JNQVRfQkdSWDQ0NDQ6CisJY2FzZSBEUk1fRk9STUFU X1JHQjU2NToKKwljYXNlIERSTV9GT1JNQVRfQkdSNTY1OgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdC MTU1NToKKwljYXNlIERSTV9GT1JNQVRfWFJHQjE1NTU6CisJY2FzZSBEUk1fRk9STUFUX0FCR1Ix NTU1OgorCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMTU1NToKKwljYXNlIERSTV9GT1JNQVRfUkdCQTU1 NTE6CisJY2FzZSBEUk1fRk9STUFUX1JHQlg1NTUxOgorCWNhc2UgRFJNX0ZPUk1BVF9CR1JBNTU1 MToKKwljYXNlIERSTV9GT1JNQVRfQkdSWDU1NTE6CisJCXJldHVybiBmaWxsX3NtcHRlX3JnYjE2 KCZpbmZvLT5yZ2IsIHBsYW5lc1swXSwKKwkJCQkJd2lkdGgsIGhlaWdodCwgc3RyaWRlKTsKKwor CWNhc2UgRFJNX0ZPUk1BVF9CR1I4ODg6CisJY2FzZSBEUk1fRk9STUFUX1JHQjg4ODoKKwkJcmV0 dXJuIGZpbGxfc21wdGVfcmdiMjQoJmluZm8tPnJnYiwgcGxhbmVzWzBdLAorCQkJCQl3aWR0aCwg aGVpZ2h0LCBzdHJpZGUpOworCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKKwljYXNlIERSTV9G T1JNQVRfWFJHQjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4OgorCWNhc2UgRFJNX0ZP Uk1BVF9YQkdSODg4ODoKKwljYXNlIERSTV9GT1JNQVRfUkdCQTg4ODg6CisJY2FzZSBEUk1fRk9S TUFUX1JHQlg4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9CR1JBODg4ODoKKwljYXNlIERSTV9GT1JN QVRfQkdSWDg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0FSR0IyMTAxMDEwOgorCWNhc2UgRFJNX0ZP Uk1BVF9YUkdCMjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRfQUJHUjIxMDEwMTA6CisJY2FzZSBE Uk1fRk9STUFUX1hCR1IyMTAxMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9SR0JBMTAxMDEwMjoKKwlj YXNlIERSTV9GT1JNQVRfUkdCWDEwMTAxMDI6CisJY2FzZSBEUk1fRk9STUFUX0JHUkExMDEwMTAy OgorCWNhc2UgRFJNX0ZPUk1BVF9CR1JYMTAxMDEwMjoKKwkJcmV0dXJuIGZpbGxfc21wdGVfcmdi MzIoJmluZm8tPnJnYiwgcGxhbmVzWzBdLAorCQkJCQl3aWR0aCwgaGVpZ2h0LCBzdHJpZGUpOwor CX0KK30KKworLyogc3dhcCB0aGVzZSBmb3IgYmlnIGVuZGlhbi4uICovCisjZGVmaW5lIFJFRCAg IDIKKyNkZWZpbmUgR1JFRU4gMQorI2RlZmluZSBCTFVFICAwCisKK3N0YXRpYyB2b2lkIG1ha2Vf cHdldHR5KHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdo dCwKKwkJCXVuc2lnbmVkIGludCBzdHJpZGUsIHVpbnQzMl90IGZvcm1hdCkKK3sKKyNpZmRlZiBI QVZFX0NBSVJPCisJY2Fpcm9fc3VyZmFjZV90ICpzdXJmYWNlOworCWNhaXJvX3QgKmNyOworCWlu dCB4LCB5OworCWNhaXJvX2Zvcm1hdF90IGNhaXJvX2Zvcm1hdDsKKworCS8qIHdlIGNhbiBpZ25v cmUgdGhlIG9yZGVyIG9mIFIsRyxCIGNoYW5uZWxzICovCisJc3dpdGNoIChmb3JtYXQpIHsKKwlj YXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4OgorCWNh c2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKKwljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6CisJCWNh aXJvX2Zvcm1hdCA9IENBSVJPX0ZPUk1BVF9BUkdCMzI7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZP Uk1BVF9SR0I1NjU6CisJY2FzZSBEUk1fRk9STUFUX0JHUjU2NToKKwkJY2Fpcm9fZm9ybWF0ID0g Q0FJUk9fRk9STUFUX1JHQjE2XzU2NTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuOwor CX0KKworCXN1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShkYXRh LAorCQkJCQkJICAgICAgY2Fpcm9fZm9ybWF0LAorCQkJCQkJICAgICAgd2lkdGgsIGhlaWdodCwK KwkJCQkJCSAgICAgIHN0cmlkZSk7CisJY3IgPSBjYWlyb19jcmVhdGUoc3VyZmFjZSk7CisJY2Fp cm9fc3VyZmFjZV9kZXN0cm95KHN1cmZhY2UpOworCisJY2Fpcm9fc2V0X2xpbmVfY2FwKGNyLCBD QUlST19MSU5FX0NBUF9TUVVBUkUpOworCWZvciAoeCA9IDA7IHggPCB3aWR0aDsgeCArPSAyNTAp CisJCWZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7IHkgKz0gMjUwKSB7CisJCQljaGFyIGJ1Zls2NF07 CisKKwkJCWNhaXJvX21vdmVfdG8oY3IsIHgsIHkgLSAyMCk7CisJCQljYWlyb19saW5lX3RvKGNy LCB4LCB5ICsgMjApOworCQkJY2Fpcm9fbW92ZV90byhjciwgeCAtIDIwLCB5KTsKKwkJCWNhaXJv X2xpbmVfdG8oY3IsIHggKyAyMCwgeSk7CisJCQljYWlyb19uZXdfc3ViX3BhdGgoY3IpOworCQkJ Y2Fpcm9fYXJjKGNyLCB4LCB5LCAxMCwgMCwgTV9QSSAqIDIpOworCQkJY2Fpcm9fc2V0X2xpbmVf d2lkdGgoY3IsIDQpOworCQkJY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY3IsIDAsIDAsIDApOworCQkJ Y2Fpcm9fc3Ryb2tlX3ByZXNlcnZlKGNyKTsKKwkJCWNhaXJvX3NldF9zb3VyY2VfcmdiKGNyLCAx LCAxLCAxKTsKKwkJCWNhaXJvX3NldF9saW5lX3dpZHRoKGNyLCAyKTsKKwkJCWNhaXJvX3N0cm9r ZShjcik7CisKKwkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mIGJ1ZiwgIiVkLCAlZCIsIHgsIHkpOwor CQkJY2Fpcm9fbW92ZV90byhjciwgeCArIDIwLCB5ICsgMjApOworCQkJY2Fpcm9fdGV4dF9wYXRo KGNyLCBidWYpOworCQkJY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY3IsIDAsIDAsIDApOworCQkJY2Fp cm9fc3Ryb2tlX3ByZXNlcnZlKGNyKTsKKwkJCWNhaXJvX3NldF9zb3VyY2VfcmdiKGNyLCAxLCAx LCAxKTsKKwkJCWNhaXJvX2ZpbGwoY3IpOworCQl9CisKKwljYWlyb19kZXN0cm95KGNyKTsKKyNl bmRpZgorfQorCitzdGF0aWMgdm9pZCBmaWxsX3RpbGVzX3l1dl9wbGFuYXIoY29uc3Qgc3RydWN0 IHV0aWxfZm9ybWF0X2luZm8gKmluZm8sCisJCQkJICB1bnNpZ25lZCBjaGFyICp5X21lbSwgdW5z aWduZWQgY2hhciAqdV9tZW0sCisJCQkJICB1bnNpZ25lZCBjaGFyICp2X21lbSwgdW5zaWduZWQg aW50IHdpZHRoLAorCQkJCSAgdW5zaWduZWQgaW50IGhlaWdodCwgdW5zaWduZWQgaW50IHN0cmlk ZSkKK3sKKwljb25zdCBzdHJ1Y3QgdXRpbF95dXZfaW5mbyAqeXV2ID0gJmluZm8tPnl1djsKKwl1 bnNpZ25lZCBpbnQgY3MgPSB5dXYtPmNocm9tYV9zdHJpZGU7CisJdW5zaWduZWQgaW50IHhzdWIg PSB5dXYtPnhzdWI7CisJdW5zaWduZWQgaW50IHlzdWIgPSB5dXYtPnlzdWI7CisJdW5zaWduZWQg aW50IHg7CisJdW5zaWduZWQgaW50IHk7CisKKwlmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyArK3kp IHsKKwkJZm9yICh4ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKKwkJCWRpdl90IGQgPSBkaXYoeCt5 LCB3aWR0aCk7CisJCQl1aW50MzJfdCByZ2IzMiA9IDB4MDAxMzA1MDIgKiAoZC5xdW90ID4+IDYp CisJCQkJICAgICAgICsgMHgwMDBhMTEyMCAqIChkLnJlbSA+PiA2KTsKKwkJCXN0cnVjdCBjb2xv cl95dXYgY29sb3IgPQorCQkJCU1BS0VfWVVWXzYwMSgocmdiMzIgPj4gMTYpICYgMHhmZiwKKwkJ CQkJICAgICAocmdiMzIgPj4gOCkgJiAweGZmLCByZ2IzMiAmIDB4ZmYpOworCisJCQl5X21lbVt4 XSA9IGNvbG9yLnk7CisJCQl1X21lbVt4L3hzdWIqY3NdID0gY29sb3IudTsKKwkJCXZfbWVtW3gv eHN1Yipjc10gPSBjb2xvci52OworCQl9CisKKwkJeV9tZW0gKz0gc3RyaWRlOworCQlpZiAoKHkg KyAxKSAlIHlzdWIgPT0gMCkgeworCQkJdV9tZW0gKz0gc3RyaWRlICogY3MgLyB4c3ViOworCQkJ dl9tZW0gKz0gc3RyaWRlICogY3MgLyB4c3ViOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBm aWxsX3RpbGVzX3l1dl9wYWNrZWQoY29uc3Qgc3RydWN0IHV0aWxfZm9ybWF0X2luZm8gKmluZm8s CisJCQkJICB2b2lkICptZW0sIHVuc2lnbmVkIGludCB3aWR0aCwKKwkJCQkgIHVuc2lnbmVkIGlu dCBoZWlnaHQsIHVuc2lnbmVkIGludCBzdHJpZGUpCit7CisJY29uc3Qgc3RydWN0IHV0aWxfeXV2 X2luZm8gKnl1diA9ICZpbmZvLT55dXY7CisJdW5zaWduZWQgY2hhciAqeV9tZW0gPSAoeXV2LT5v cmRlciAmIFlVVl9ZQykgPyBtZW0gOiBtZW0gKyAxOworCXVuc2lnbmVkIGNoYXIgKmNfbWVtID0g KHl1di0+b3JkZXIgJiBZVVZfQ1kpID8gbWVtIDogbWVtICsgMTsKKwl1bnNpZ25lZCBpbnQgdSA9 ICh5dXYtPm9yZGVyICYgWVVWX1lDckNiKSA/IDIgOiAwOworCXVuc2lnbmVkIGludCB2ID0gKHl1 di0+b3JkZXIgJiBZVVZfWUNiQ3IpID8gMiA6IDA7CisJdW5zaWduZWQgaW50IHg7CisJdW5zaWdu ZWQgaW50IHk7CisKKwlmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyArK3kpIHsKKwkJZm9yICh4ID0g MDsgeCA8IHdpZHRoOyB4ICs9IDIpIHsKKwkJCWRpdl90IGQgPSBkaXYoeCt5LCB3aWR0aCk7CisJ CQl1aW50MzJfdCByZ2IzMiA9IDB4MDAxMzA1MDIgKiAoZC5xdW90ID4+IDYpCisJCQkJICAgICAg ICsgMHgwMDBhMTEyMCAqIChkLnJlbSA+PiA2KTsKKwkJCXN0cnVjdCBjb2xvcl95dXYgY29sb3Ig PQorCQkJCU1BS0VfWVVWXzYwMSgocmdiMzIgPj4gMTYpICYgMHhmZiwKKwkJCQkJICAgICAocmdi MzIgPj4gOCkgJiAweGZmLCByZ2IzMiAmIDB4ZmYpOworCisJCQl5X21lbVsyKnhdID0gY29sb3Iu eTsKKwkJCWNfbWVtWzIqeCt1XSA9IGNvbG9yLnU7CisJCQl5X21lbVsyKngrMl0gPSBjb2xvci55 OworCQkJY19tZW1bMip4K3ZdID0gY29sb3IudjsKKwkJfQorCisJCXlfbWVtICs9IHN0cmlkZTsK KwkJY19tZW0gKz0gc3RyaWRlOworCX0KK30KKworc3RhdGljIHZvaWQgZmlsbF90aWxlc19yZ2Ix Nihjb25zdCBzdHJ1Y3QgdXRpbF9mb3JtYXRfaW5mbyAqaW5mbywgdm9pZCAqbWVtLAorCQkJICAg ICB1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQsCisJCQkgICAgIHVuc2ln bmVkIGludCBzdHJpZGUpCit7CisJY29uc3Qgc3RydWN0IHV0aWxfcmdiX2luZm8gKnJnYiA9ICZp bmZvLT5yZ2I7CisJdm9pZCAqbWVtX2Jhc2UgPSBtZW07CisJdW5zaWduZWQgaW50IHgsIHk7CisK Kwlmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyArK3kpIHsKKwkJZm9yICh4ID0gMDsgeCA8IHdpZHRo OyArK3gpIHsKKwkJCWRpdl90IGQgPSBkaXYoeCt5LCB3aWR0aCk7CisJCQl1aW50MzJfdCByZ2Iz MiA9IDB4MDAxMzA1MDIgKiAoZC5xdW90ID4+IDYpCisJCQkJICAgICAgICsgMHgwMDBhMTEyMCAq IChkLnJlbSA+PiA2KTsKKwkJCXVpbnQxNl90IGNvbG9yID0KKwkJCQlNQUtFX1JHQkEocmdiLCAo cmdiMzIgPj4gMTYpICYgMHhmZiwKKwkJCQkJICAocmdiMzIgPj4gOCkgJiAweGZmLCByZ2IzMiAm IDB4ZmYsCisJCQkJCSAgMjU1KTsKKworCQkJKCh1aW50MTZfdCAqKW1lbSlbeF0gPSBjb2xvcjsK KwkJfQorCQltZW0gKz0gc3RyaWRlOworCX0KKworCW1ha2VfcHdldHR5KG1lbV9iYXNlLCB3aWR0 aCwgaGVpZ2h0LCBzdHJpZGUsIGluZm8tPmZvcm1hdCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxf dGlsZXNfcmdiMjQoY29uc3Qgc3RydWN0IHV0aWxfZm9ybWF0X2luZm8gKmluZm8sIHZvaWQgKm1l bSwKKwkJCSAgICAgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0LAorCQkJ ICAgICB1bnNpZ25lZCBpbnQgc3RyaWRlKQoreworCWNvbnN0IHN0cnVjdCB1dGlsX3JnYl9pbmZv ICpyZ2IgPSAmaW5mby0+cmdiOworCXVuc2lnbmVkIGludCB4LCB5OworCisJZm9yICh5ID0gMDsg eSA8IGhlaWdodDsgKyt5KSB7CisJCWZvciAoeCA9IDA7IHggPCB3aWR0aDsgKyt4KSB7CisJCQlk aXZfdCBkID0gZGl2KHgreSwgd2lkdGgpOworCQkJdWludDMyX3QgcmdiMzIgPSAweDAwMTMwNTAy ICogKGQucXVvdCA+PiA2KQorCQkJCSAgICAgICArIDB4MDAwYTExMjAgKiAoZC5yZW0gPj4gNik7 CisJCQlzdHJ1Y3QgY29sb3JfcmdiMjQgY29sb3IgPQorCQkJCU1BS0VfUkdCMjQocmdiLCAocmdi MzIgPj4gMTYpICYgMHhmZiwKKwkJCQkJICAgKHJnYjMyID4+IDgpICYgMHhmZiwgcmdiMzIgJiAw eGZmKTsKKworCQkJKChzdHJ1Y3QgY29sb3JfcmdiMjQgKiltZW0pW3hdID0gY29sb3I7CisJCX0K KwkJbWVtICs9IHN0cmlkZTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxfdGlsZXNfcmdiMzIo Y29uc3Qgc3RydWN0IHV0aWxfZm9ybWF0X2luZm8gKmluZm8sIHZvaWQgKm1lbSwKKwkJCSAgICAg dW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0LAorCQkJICAgICB1bnNpZ25l ZCBpbnQgc3RyaWRlKQoreworCWNvbnN0IHN0cnVjdCB1dGlsX3JnYl9pbmZvICpyZ2IgPSAmaW5m by0+cmdiOworCXZvaWQgKm1lbV9iYXNlID0gbWVtOworCXVuc2lnbmVkIGludCB4LCB5OworCisJ Zm9yICh5ID0gMDsgeSA8IGhlaWdodDsgKyt5KSB7CisJCWZvciAoeCA9IDA7IHggPCB3aWR0aDsg Kyt4KSB7CisJCQlkaXZfdCBkID0gZGl2KHgreSwgd2lkdGgpOworCQkJdWludDMyX3QgcmdiMzIg PSAweDAwMTMwNTAyICogKGQucXVvdCA+PiA2KQorCQkJCSAgICAgICArIDB4MDAwYTExMjAgKiAo ZC5yZW0gPj4gNik7CisJCQl1aW50MzJfdCBhbHBoYSA9ICgoeSA8IGhlaWdodC8yKSAmJiAoeCA8 IHdpZHRoLzIpKSA/IDEyNyA6IDI1NTsKKwkJCXVpbnQzMl90IGNvbG9yID0KKwkJCQlNQUtFX1JH QkEocmdiLCAocmdiMzIgPj4gMTYpICYgMHhmZiwKKwkJCQkJICAocmdiMzIgPj4gOCkgJiAweGZm LCByZ2IzMiAmIDB4ZmYsCisJCQkJCSAgYWxwaGEpOworCisJCQkoKHVpbnQzMl90ICopbWVtKVt4 XSA9IGNvbG9yOworCQl9CisJCW1lbSArPSBzdHJpZGU7CisJfQorCisJbWFrZV9wd2V0dHkobWVt X2Jhc2UsIHdpZHRoLCBoZWlnaHQsIHN0cmlkZSwgaW5mby0+Zm9ybWF0KTsKK30KKworc3RhdGlj IHZvaWQgZmlsbF90aWxlcyhjb25zdCBzdHJ1Y3QgdXRpbF9mb3JtYXRfaW5mbyAqaW5mbywgdm9p ZCAqcGxhbmVzWzNdLAorCQkgICAgICAgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQg aGVpZ2h0LAorCQkgICAgICAgdW5zaWduZWQgaW50IHN0cmlkZSkKK3sKKwl1bnNpZ25lZCBjaGFy ICp1LCAqdjsKKworCXN3aXRjaCAoaW5mby0+Zm9ybWF0KSB7CisJY2FzZSBEUk1fRk9STUFUX1VZ Vlk6CisJY2FzZSBEUk1fRk9STUFUX1ZZVVk6CisJY2FzZSBEUk1fRk9STUFUX1lVWVY6CisJY2Fz ZSBEUk1fRk9STUFUX1lWWVU6CisJCXJldHVybiBmaWxsX3RpbGVzX3l1dl9wYWNrZWQoaW5mbywg cGxhbmVzWzBdLAorCQkJCQkgICAgIHdpZHRoLCBoZWlnaHQsIHN0cmlkZSk7CisKKwljYXNlIERS TV9GT1JNQVRfTlYxMjoKKwljYXNlIERSTV9GT1JNQVRfTlYyMToKKwljYXNlIERSTV9GT1JNQVRf TlYxNjoKKwljYXNlIERSTV9GT1JNQVRfTlY2MToKKwkJdSA9IGluZm8tPnl1di5vcmRlciAmIFlV Vl9ZQ2JDciA/IHBsYW5lc1sxXSA6IHBsYW5lc1sxXSArIDE7CisJCXYgPSBpbmZvLT55dXYub3Jk ZXIgJiBZVVZfWUNyQ2IgPyBwbGFuZXNbMV0gOiBwbGFuZXNbMV0gKyAxOworCQlyZXR1cm4gZmls bF90aWxlc195dXZfcGxhbmFyKGluZm8sIHBsYW5lc1swXSwgdSwgdiwKKwkJCQkJICAgICB3aWR0 aCwgaGVpZ2h0LCBzdHJpZGUpOworCisJY2FzZSBEUk1fRk9STUFUX1lVVjQyMDoKKwkJcmV0dXJu IGZpbGxfdGlsZXNfeXV2X3BsYW5hcihpbmZvLCBwbGFuZXNbMF0sIHBsYW5lc1sxXSwKKwkJCQkJ ICAgICBwbGFuZXNbMl0sIHdpZHRoLCBoZWlnaHQsIHN0cmlkZSk7CisKKwljYXNlIERSTV9GT1JN QVRfWVZVNDIwOgorCQlyZXR1cm4gZmlsbF90aWxlc195dXZfcGxhbmFyKGluZm8sIHBsYW5lc1sw XSwgcGxhbmVzWzJdLAorCQkJCQkgICAgIHBsYW5lc1sxXSwgd2lkdGgsIGhlaWdodCwgc3RyaWRl KTsKKworCWNhc2UgRFJNX0ZPUk1BVF9BUkdCNDQ0NDoKKwljYXNlIERSTV9GT1JNQVRfWFJHQjQ0 NDQ6CisJY2FzZSBEUk1fRk9STUFUX0FCR1I0NDQ0OgorCWNhc2UgRFJNX0ZPUk1BVF9YQkdSNDQ0 NDoKKwljYXNlIERSTV9GT1JNQVRfUkdCQTQ0NDQ6CisJY2FzZSBEUk1fRk9STUFUX1JHQlg0NDQ0 OgorCWNhc2UgRFJNX0ZPUk1BVF9CR1JBNDQ0NDoKKwljYXNlIERSTV9GT1JNQVRfQkdSWDQ0NDQ6 CisJY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKKwljYXNlIERSTV9GT1JNQVRfQkdSNTY1OgorCWNh c2UgRFJNX0ZPUk1BVF9BUkdCMTU1NToKKwljYXNlIERSTV9GT1JNQVRfWFJHQjE1NTU6CisJY2Fz ZSBEUk1fRk9STUFUX0FCR1IxNTU1OgorCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMTU1NToKKwljYXNl IERSTV9GT1JNQVRfUkdCQTU1NTE6CisJY2FzZSBEUk1fRk9STUFUX1JHQlg1NTUxOgorCWNhc2Ug RFJNX0ZPUk1BVF9CR1JBNTU1MToKKwljYXNlIERSTV9GT1JNQVRfQkdSWDU1NTE6CisJCXJldHVy biBmaWxsX3RpbGVzX3JnYjE2KGluZm8sIHBsYW5lc1swXSwKKwkJCQkJd2lkdGgsIGhlaWdodCwg c3RyaWRlKTsKKworCWNhc2UgRFJNX0ZPUk1BVF9CR1I4ODg6CisJY2FzZSBEUk1fRk9STUFUX1JH Qjg4ODoKKwkJcmV0dXJuIGZpbGxfdGlsZXNfcmdiMjQoaW5mbywgcGxhbmVzWzBdLAorCQkJCQl3 aWR0aCwgaGVpZ2h0LCBzdHJpZGUpOworCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKKwljYXNl IERSTV9GT1JNQVRfWFJHQjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4OgorCWNhc2Ug RFJNX0ZPUk1BVF9YQkdSODg4ODoKKwljYXNlIERSTV9GT1JNQVRfUkdCQTg4ODg6CisJY2FzZSBE Uk1fRk9STUFUX1JHQlg4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9CR1JBODg4ODoKKwljYXNlIERS TV9GT1JNQVRfQkdSWDg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0FSR0IyMTAxMDEwOgorCWNhc2Ug RFJNX0ZPUk1BVF9YUkdCMjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRfQUJHUjIxMDEwMTA6CisJ Y2FzZSBEUk1fRk9STUFUX1hCR1IyMTAxMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9SR0JBMTAxMDEw MjoKKwljYXNlIERSTV9GT1JNQVRfUkdCWDEwMTAxMDI6CisJY2FzZSBEUk1fRk9STUFUX0JHUkEx MDEwMTAyOgorCWNhc2UgRFJNX0ZPUk1BVF9CR1JYMTAxMDEwMjoKKwkJcmV0dXJuIGZpbGxfdGls ZXNfcmdiMzIoaW5mbywgcGxhbmVzWzBdLAorCQkJCQl3aWR0aCwgaGVpZ2h0LCBzdHJpZGUpOwor CX0KK30KKworc3RhdGljIHZvaWQgZmlsbF9wbGFpbihjb25zdCBzdHJ1Y3QgdXRpbF9mb3JtYXRf aW5mbyAqaW5mbywgdm9pZCAqcGxhbmVzWzNdLAorCQkgICAgICAgdW5zaWduZWQgaW50IHdpZHRo LCB1bnNpZ25lZCBpbnQgaGVpZ2h0LAorCQkgICAgICAgdW5zaWduZWQgaW50IHN0cmlkZSkKK3sK KwltZW1zZXQocGxhbmVzWzBdLCAweDc3LCBzdHJpZGUgKiBoZWlnaHQpOworfQorCisvKgorICog dXRpbF9maWxsX3BhdHRlcm4gLSBGaWxsIGEgYnVmZmVyIHdpdGggYSB0ZXN0IHBhdHRlcm4KKyAq IEBmb3JtYXQ6IFBpeGVsIGZvcm1hdAorICogQHBhdHRlcm46IFRlc3QgcGF0dGVybgorICogQHBs YW5lczogQXJyYXkgb2YgYnVmZmVycworICogQHdpZHRoOiBXaWR0aCBpbiBwaXhlbHMKKyAqIEBo ZWlnaHQ6IEhlaWdodCBpbiBwaXhlbHMKKyAqIEBzdHJpZGU6IExpbmUgc3RyaWRlIChwaXRjaCkg aW4gYnl0ZXMKKyAqCisgKiBGaWxsIHRoZSBidWZmZXJzIHdpdGggdGhlIHRlc3QgcGF0dGVybiBz cGVjaWZpZWQgYnkgdGhlIHBhdHRlcm4gcGFyYW1ldGVyLgorICogU3VwcG9ydGVkIGZvcm1hdHMg dmFyeSBkZXBlbmRpbmcgb24gdGhlIHNlbGVjdGVkIHBhdHRlcm4uCisgKi8KK3ZvaWQgdXRpbF9m aWxsX3BhdHRlcm4odWludDMyX3QgZm9ybWF0LCBlbnVtIHV0aWxfZmlsbF9wYXR0ZXJuIHBhdHRl cm4sCisJCSAgICAgICB2b2lkICpwbGFuZXNbM10sIHVuc2lnbmVkIGludCB3aWR0aCwKKwkJICAg ICAgIHVuc2lnbmVkIGludCBoZWlnaHQsIHVuc2lnbmVkIGludCBzdHJpZGUpCit7CisJY29uc3Qg c3RydWN0IHV0aWxfZm9ybWF0X2luZm8gKmluZm87CisKKwlpbmZvID0gdXRpbF9mb3JtYXRfaW5m b19maW5kKGZvcm1hdCk7CisJaWYgKGluZm8gPT0gTlVMTCkKKwkJcmV0dXJuOworCisJc3dpdGNo IChwYXR0ZXJuKSB7CisJY2FzZSBVVElMX1BBVFRFUk5fVElMRVM6CisJCXJldHVybiBmaWxsX3Rp bGVzKGluZm8sIHBsYW5lcywgd2lkdGgsIGhlaWdodCwgc3RyaWRlKTsKKworCWNhc2UgVVRJTF9Q QVRURVJOX1NNUFRFOgorCQlyZXR1cm4gZmlsbF9zbXB0ZShpbmZvLCBwbGFuZXMsIHdpZHRoLCBo ZWlnaHQsIHN0cmlkZSk7CisKKwljYXNlIFVUSUxfUEFUVEVSTl9QTEFJTjoKKwkJcmV0dXJuIGZp bGxfcGxhaW4oaW5mbywgcGxhbmVzLCB3aWR0aCwgaGVpZ2h0LCBzdHJpZGUpOworCisJZGVmYXVs dDoKKwkJcHJpbnRmKCJFcnJvcjogdW5zdXBwb3J0ZWQgdGVzdCBwYXR0ZXJuICV1LlxuIiwgcGF0 dGVybik7CisJCWJyZWFrOworCX0KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3V0aWwvcGF0dGVybi5o IGIvdGVzdHMvdXRpbC9wYXR0ZXJuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAwLi5kNWM0MjYwY2M2ZWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy91dGlsL3BhdHRl cm4uaApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDggVHVuZ3N0ZW4gR3Jh cGhpY3MKKyAqICAgSmFrb2IgQm9ybmVjcmFudHogPGpha29iQHR1bmdzdGVuZ3JhcGhpY3MuY29t PgorICogQ29weXJpZ2h0IDIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqICAgSmVzc2UgQmFybmVz IDxqZXNzZS5iYXJuZXNAaW50ZWwuY29tPgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5 IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhl ICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmlj dGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2Us IGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisg KiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv bnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVj dCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4K KyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgor ICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ IE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5U IFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9S IEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00s IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1Ig T1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIFVUSUxf UEFUVEVSTl9ICisjZGVmaW5lIFVUSUxfUEFUVEVSTl9ICisKK2VudW0gdXRpbF9maWxsX3BhdHRl cm4geworCVVUSUxfUEFUVEVSTl9USUxFUywKKwlVVElMX1BBVFRFUk5fUExBSU4sCisJVVRJTF9Q QVRURVJOX1NNUFRFLAorfTsKKwordm9pZCB1dGlsX2ZpbGxfcGF0dGVybih1aW50MzJfdCBmb3Jt YXQsIGVudW0gdXRpbF9maWxsX3BhdHRlcm4gcGF0dGVybiwKKwkJICAgICAgIHZvaWQgKnBsYW5l c1szXSwgdW5zaWduZWQgaW50IHdpZHRoLAorCQkgICAgICAgdW5zaWduZWQgaW50IGhlaWdodCwg dW5zaWduZWQgaW50IHN0cmlkZSk7CisKKyNlbmRpZiAvKiBVVElMX1BBVFRFUk5fSCAqLwpkaWZm IC0tZ2l0IGEvdGVzdHMvdmJsdGVzdC9NYWtlZmlsZS5hbSBiL3Rlc3RzL3ZibHRlc3QvTWFrZWZp bGUuYW0KaW5kZXggNGQ4Nzg4N2E1Njg2Li4xODJlM2I2ZDI3MWMgMTAwNjQ0Ci0tLSBhL3Rlc3Rz L3ZibHRlc3QvTWFrZWZpbGUuYW0KKysrIGIvdGVzdHMvdmJsdGVzdC9NYWtlZmlsZS5hbQpAQCAt MSw2ICsxLDcgQEAKIEFNX0NGTEFHUyA9IFwKIAkkKFdBUk5fQ0ZMQUdTKVwKIAktSSQodG9wX3Ny Y2RpcikvaW5jbHVkZS9kcm0gXAorCS1JJCh0b3Bfc3JjZGlyKS90ZXN0cyBcCiAJLUkkKHRvcF9z cmNkaXIpCiAKIGlmIEhBVkVfSU5TVEFMTF9URVNUUwpkaWZmIC0tZ2l0IGEvdGVzdHMvdmJsdGVz dC92Ymx0ZXN0LmMgYi90ZXN0cy92Ymx0ZXN0L3ZibHRlc3QuYwppbmRleCBlMjdmNDVjMWI5YzEu LmRlOTNlNzcwMmIyNiAxMDA2NDQKLS0tIGEvdGVzdHMvdmJsdGVzdC92Ymx0ZXN0LmMKKysrIGIv dGVzdHMvdmJsdGVzdC92Ymx0ZXN0LmMKQEAgLTU0LDcgKzU0LDcgQEAKICNpbmNsdWRlICJ4Zjg2 ZHJtLmgiCiAjaW5jbHVkZSAieGY4NmRybU1vZGUuaCIKIAotI2RlZmluZSBBUlJBWV9TSVpFKGFy cikgKHNpemVvZihhcnIpIC8gc2l6ZW9mKChhcnIpWzBdKSkKKyNpbmNsdWRlICJ1dGlsL2NvbW1v bi5oIgogCiBleHRlcm4gY2hhciAqb3B0YXJnOwogZXh0ZXJuIGludCBvcHRpbmQsIG9wdGVyciwg b3B0b3B0OwotLSAKMi41LjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJp LWRldmVsCg==