From mboxrd@z Thu Jan 1 00:00:00 1970 From: Heiko Stuebner Subject: [PATCH v4 5/8] drm/rockchip: dsi: migrate to use dw-mipi-dsi bridge driver Date: Tue, 14 Aug 2018 12:26:51 +0200 Message-ID: <20180814102654.29113-6-heiko@sntech.de> References: <20180814102654.29113-1-heiko@sntech.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180814102654.29113-1-heiko@sntech.de> 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: mark.rutland@arm.com, devicetree@vger.kernel.org, briannorris@chromium.org, hoegsberg@gmail.com, philippe.cornu@st.com, yannick.fertre@st.com, linux-rockchip@lists.infradead.org, nickey.yang@rock-chips.com, robh+dt@kernel.org, thierry.reding@gmail.com, laurent.pinchart@ideasonboard.com, mka@chromium.org List-Id: linux-rockchip.vger.kernel.org RnJvbTogTmlja2V5IFlhbmcgPG5pY2tleS55YW5nQHJvY2stY2hpcHMuY29tPgoKQWRkIHRoZSBS T0NLQ0hJUCBEU0kgY29udHJvbGxlciBkcml2ZXIgdGhhdCB1c2VzIHRoZSBTeW5vcHN5cyBEZXNp Z25XYXJlCk1JUEkgRFNJIGhvc3QgY29udHJvbGxlciBicmlkZ2UgYW5kIHJlbW92ZSB0aGUgb2xk IHNlcGFyYXRlIG9uZS4KCmNoYW5nZXM6Cgp2MjoKICAgYWRkIGVycl9wbGxyZWYsIHJlbW92ZSB1 bm5lY2Vzc2FyeSBlbmNvZGVyLmVuYWJsZSAmIGRpc2FibGUKICAgY29ycmVjdCBzcGVsbGluZyBt aXN0YWtlcwp2MzoKICAgY2FsbCBkd19taXBpX2RzaV91bmJpbmQoKSBpbiBkd19taXBpX2RzaV9y b2NrY2hpcF91bmJpbmQoKQogICBmaXggdHlwbywgdXNlIG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0 YSgpLAogICBjaGFuZ2Ugc29tZSBiaW5kKCkgbG9naWMgaW50byBwcm9iZSgpCiAgIGFkZCAnZGV2 X3NldF9kcnZkYXRhKCknCnY0OgogIHJldHVybiAtRUlOVkFMIHdoZW4gY2FuIG5vdCBnZXQgYmVz dF9mcmVxCiAgYWRkIGEgY2xhcmlmeWluZyBjb21tZW50IHdoZW4gZ2V0IHZjbwogIGFkZCByZXZp ZXcgdGFnCnY1OgogIGtlZXAgb3VyIHBvd2VyIGRvbWFpbiBlbmFibGVkIHdoaWxlIHRvdWNoaW5n IEdSRgp2NjoKICBjaGFuZ2UgZnVuYyBuYW1lIGR3X21pcGlfZW5jb2Rlcl9kaXNhYmxlIHRvCiAg ZHdfbWlwaV9kc2lfZW5jb2Rlcl9kaXNhYmxlCnY3OgogIG5vbmUKdjg6IEhlaWtvCiAgYWRkIEFy Y2hpdCdzIFJldmlldyB0YWcKICBhZGFwdCB0byByZWNlbnQgY2hhbmdlcyBpbiB0aGUgb3JpZ2lu YWwgcm9ja2NoaXAtZHNpIGRyaXZlcgogIGJlYXV0aWZ5IGdyZi1oYW5kbGluZwogIHNwbGl0IGh3 LXNldHVwIChyZXNvdXJjZXMsIGRzaS1ob3N0KSBmcm9tIGJpbmQgaW50byBwcm9iZQp2Mi1uZXc6 IEhlaWtvCiAgYWRkIFNQRFggaGVhZGVyIGluc3RlYWQgb2YgbGljZW5zZSBibHVyYgogIGRyb3Ag b2xkIHZlcnNpb25pbmcgdG8gbm90IGNvbmZ1c2UgcGVvcGxlCnYzLW5ldzogSGVpa28KICBpbmNs dWRlIG9yZGVyaW5nCiAgbW92ZWQgaHdhY2Nlc3MgZnJvbSBtb2RlX3NldCB0byBlbmFibGUgY2Fs bGJhY2sKICBtb3ZlIHBsbHJlZl9jbGsgZW5hYmxlbWVudCB0byBiaW5kIChuZWVkZWQgYnkgYnJp ZGdlIG1vZGVfc2V0LT5sYW5lX21icHMpCnY0LW5ldzogSGVpa28KICByZWJhc2UgYWdhaW5zdCBy ZWNlbnQgcm9ja2NoaXAtZHNpIGNoYW5nZXMKICBtb3ZlIHRvIGNhbGwgY29tcG9uZW50X2FkZCBp biB0aGUgbmV3IGdsdWUgaG9zdC1hdHRhY2gKClNpZ25lZC1vZmYtYnk6IE5pY2tleSBZYW5nIDxu aWNrZXkueWFuZ0Byb2NrLWNoaXBzLmNvbT4KU2lnbmVkLW9mZi1ieTogQnJpYW4gTm9ycmlzIDxi cmlhbm5vcnJpc0BjaHJvbWl1bS5vcmc+ClJldmlld2VkLWJ5OiBCcmlhbiBOb3JyaXMgPGJyaWFu bm9ycmlzQGNocm9taXVtLm9yZz4KUmV2aWV3ZWQtYnk6IFNlYW4gUGF1bCA8c2VhbnBhdWxAY2hy b21pdW0ub3JnPgpSZXZpZXdlZC1ieTogQXJjaGl0IFRhbmVqYSA8YXJjaGl0dEBjb2RlYXVyb3Jh Lm9yZz4KU2lnbmVkLW9mZi1ieTogSGVpa28gU3R1ZWJuZXIgPGhlaWtvQHNudGVjaC5kZT4KLS0t CiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2NvbmZpZyAgICAgICAgICAgICAgfCAgICAyICst CiBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUgICAgICAgICAgICAgfCAgICAyICst CiAuLi4vZ3B1L2RybS9yb2NrY2hpcC9kdy1taXBpLWRzaS1yb2NrY2hpcC5jICAgfCAgOTM5ICsr KysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2R3LW1pcGktZHNpLmMgICAgICAg IHwgMTM0OSAtLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tj aGlwX2RybV9kcnYuYyAgIHwgICAgMiArLQogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tj aGlwX2RybV9kcnYuaCAgIHwgICAgMiArLQogNiBmaWxlcyBjaGFuZ2VkLCA5NDMgaW5zZXJ0aW9u cygrKSwgMTM1MyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vcm9ja2NoaXAvZHctbWlwaS1kc2ktcm9ja2NoaXAuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9kdy1taXBpLWRzaS5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3JvY2tjaGlwL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2Nv bmZpZwppbmRleCAwY2NjNzYyMTdlZTQuLjllYjQ3OTU1OTZkMyAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL3JvY2tjaGlwL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlw L0tjb25maWcKQEAgLTcsNyArNyw3IEBAIGNvbmZpZyBEUk1fUk9DS0NISVAKIAlzZWxlY3QgVklE RU9NT0RFX0hFTFBFUlMKIAlzZWxlY3QgRFJNX0FOQUxPR0lYX0RQIGlmIFJPQ0tDSElQX0FOQUxP R0lYX0RQCiAJc2VsZWN0IERSTV9EV19IRE1JIGlmIFJPQ0tDSElQX0RXX0hETUkKLQlzZWxlY3Qg RFJNX01JUElfRFNJIGlmIFJPQ0tDSElQX0RXX01JUElfRFNJCisJc2VsZWN0IERSTV9EV19NSVBJ X0RTSSBpZiBST0NLQ0hJUF9EV19NSVBJX0RTSQogCXNlbGVjdCBTTkRfU09DX0hETUlfQ09ERUMg aWYgUk9DS0NISVBfQ0ROX0RQICYmIFNORF9TT0MKIAloZWxwCiAJICBDaG9vc2UgdGhpcyBvcHRp b24gaWYgeW91IGhhdmUgYSBSb2NrY2hpcCBzb2MgY2hpcHNldC4KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9N YWtlZmlsZQppbmRleCBhMzE0ZTIxMDllNzYuLjBmMjJkYWQxYzk5NiAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2Nr Y2hpcC9NYWtlZmlsZQpAQCAtMTEsNyArMTEsNyBAQCByb2NrY2hpcGRybS0kKENPTkZJR19EUk1f RkJERVZfRU1VTEFUSU9OKSArPSByb2NrY2hpcF9kcm1fZmJkZXYubwogcm9ja2NoaXBkcm0tJChD T05GSUdfUk9DS0NISVBfQU5BTE9HSVhfRFApICs9IGFuYWxvZ2l4X2RwLXJvY2tjaGlwLm8KIHJv Y2tjaGlwZHJtLSQoQ09ORklHX1JPQ0tDSElQX0NETl9EUCkgKz0gY2RuLWRwLWNvcmUubyBjZG4t ZHAtcmVnLm8KIHJvY2tjaGlwZHJtLSQoQ09ORklHX1JPQ0tDSElQX0RXX0hETUkpICs9IGR3X2hk bWktcm9ja2NoaXAubwotcm9ja2NoaXBkcm0tJChDT05GSUdfUk9DS0NISVBfRFdfTUlQSV9EU0kp ICs9IGR3LW1pcGktZHNpLm8KK3JvY2tjaGlwZHJtLSQoQ09ORklHX1JPQ0tDSElQX0RXX01JUElf RFNJKSArPSBkdy1taXBpLWRzaS1yb2NrY2hpcC5vCiByb2NrY2hpcGRybS0kKENPTkZJR19ST0NL Q0hJUF9JTk5PX0hETUkpICs9IGlubm9faGRtaS5vCiByb2NrY2hpcGRybS0kKENPTkZJR19ST0NL Q0hJUF9MVkRTKSArPSByb2NrY2hpcF9sdmRzLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3JvY2tjaGlwL2R3LW1pcGktZHNpLXJvY2tjaGlwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcm9j a2NoaXAvZHctbWlwaS1kc2ktcm9ja2NoaXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLmIzYWFlODQzOWFhMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9yb2NrY2hpcC9kdy1taXBpLWRzaS1yb2NrY2hpcC5jCkBAIC0wLDAgKzEsOTM5IEBACisv LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsKKy8qCisgKiBDb3B5cmlnaHQgKEMp IEZ1emhvdSBSb2NrY2hpcCBFbGVjdHJvbmljcyBDby5MdGQKKyAqIEF1dGhvcjoKKyAqICAgICAg Q2hyaXMgWmhvbmcgPHp5d0Byb2NrLWNoaXBzLmNvbT4KKyAqICAgICAgTmlja2V5IFlhbmcgPG5p Y2tleS55YW5nQHJvY2stY2hpcHMuY29tPgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgor I2luY2x1ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4KKyNpbmNsdWRlIDxkcm0vYnJpZGdlL2R3X21p cGlfZHNpLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5o PgorI2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgor I2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4K KyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1l Lmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8dmlkZW8vbWlwaV9kaXNw bGF5Lmg+CisKKyNpbmNsdWRlICJyb2NrY2hpcF9kcm1fZHJ2LmgiCisjaW5jbHVkZSAicm9ja2No aXBfZHJtX3ZvcC5oIgorCisjZGVmaW5lIERTSV9QSFlfUlNUWgkJCTB4YTAKKyNkZWZpbmUgUEhZ X0RJU0ZPUkNFUExMCQkJMAorI2RlZmluZSBQSFlfRU5GT1JDRVBMTAkJCUJJVCgzKQorI2RlZmlu ZSBQSFlfRElTQUJMRUNMSwkJCTAKKyNkZWZpbmUgUEhZX0VOQUJMRUNMSwkJCUJJVCgyKQorI2Rl ZmluZSBQSFlfUlNUWgkJCTAKKyNkZWZpbmUgUEhZX1VOUlNUWgkJCUJJVCgxKQorI2RlZmluZSBQ SFlfU0hVVERPV05aCQkJMAorI2RlZmluZSBQSFlfVU5TSFVURE9XTloJCQlCSVQoMCkKKworI2Rl ZmluZSBEU0lfUEhZX0lGX0NGRwkJCTB4YTQKKyNkZWZpbmUgTl9MQU5FUyhuKQkJCSgoKChuKSAt IDEpICYgMHgzKSA8PCAwKQorI2RlZmluZSBQSFlfU1RPUF9XQUlUX1RJTUUoY3ljbGUpCSgoKGN5 Y2xlKSAmIDB4ZmYpIDw8IDgpCisKKyNkZWZpbmUgRFNJX1BIWV9TVEFUVVMJCQkweGIwCisjZGVm aW5lIExPQ0sJCQkJQklUKDApCisjZGVmaW5lIFNUT1BfU1RBVEVfQ0xLX0xBTkUJCUJJVCgyKQor CisjZGVmaW5lIERTSV9QSFlfVFNUX0NUUkwwCQkweGI0CisjZGVmaW5lIFBIWV9URVNUQ0xLCQkJ QklUKDEpCisjZGVmaW5lIFBIWV9VTlRFU1RDTEsJCQkwCisjZGVmaW5lIFBIWV9URVNUQ0xSCQkJ QklUKDApCisjZGVmaW5lIFBIWV9VTlRFU1RDTFIJCQkwCisKKyNkZWZpbmUgRFNJX1BIWV9UU1Rf Q1RSTDEJCTB4YjgKKyNkZWZpbmUgUEhZX1RFU1RFTgkJCUJJVCgxNikKKyNkZWZpbmUgUEhZX1VO VEVTVEVOCQkJMAorI2RlZmluZSBQSFlfVEVTVERPVVQobikJCQkoKChuKSAmIDB4ZmYpIDw8IDgp CisjZGVmaW5lIFBIWV9URVNURElOKG4pCQkJKCgobikgJiAweGZmKSA8PCAwKQorCisjZGVmaW5l IERTSV9JTlRfU1QwCQkJMHhiYworI2RlZmluZSBEU0lfSU5UX1NUMQkJCTB4YzAKKyNkZWZpbmUg RFNJX0lOVF9NU0swCQkJMHhjNAorI2RlZmluZSBEU0lfSU5UX01TSzEJCQkweGM4CisKKyNkZWZp bmUgUEhZX1NUQVRVU19USU1FT1VUX1VTCQkxMDAwMAorI2RlZmluZSBDTURfUEtUX1NUQVRVU19U SU1FT1VUX1VTCTIwMDAwCisKKyNkZWZpbmUgQllQQVNTX1ZDT19SQU5HRQlCSVQoNykKKyNkZWZp bmUgVkNPX1JBTkdFX0NPTl9TRUwodmFsKQkoKCh2YWwpICYgMHg3KSA8PCAzKQorI2RlZmluZSBW Q09fSU5fQ0FQX0NPTl9ERUZBVUxUCSgweDAgPDwgMSkKKyNkZWZpbmUgVkNPX0lOX0NBUF9DT05f TE9XCSgweDEgPDwgMSkKKyNkZWZpbmUgVkNPX0lOX0NBUF9DT05fSElHSAkoMHgyIDw8IDEpCisj ZGVmaW5lIFJFRl9CSUFTX0NVUl9TRUwJQklUKDApCisKKyNkZWZpbmUgQ1BfQ1VSUkVOVF8zVUEJ MHgxCisjZGVmaW5lIENQX0NVUlJFTlRfNF81VUEJMHgyCisjZGVmaW5lIENQX0NVUlJFTlRfN181 VUEJMHg2CisjZGVmaW5lIENQX0NVUlJFTlRfNlVBCTB4OQorI2RlZmluZSBDUF9DVVJSRU5UXzEy VUEJMHhiCisjZGVmaW5lIENQX0NVUlJFTlRfU0VMKHZhbCkJKCh2YWwpICYgMHhmKQorI2RlZmlu ZSBDUF9QUk9HUkFNX0VOCQlCSVQoNykKKworI2RlZmluZSBMUEZfUkVTSVNUT1JTXzE1XzVLT0hN CTB4MQorI2RlZmluZSBMUEZfUkVTSVNUT1JTXzEzS09ITQkweDIKKyNkZWZpbmUgTFBGX1JFU0lT VE9SU18xMV81S09ITQkweDQKKyNkZWZpbmUgTFBGX1JFU0lTVE9SU18xMF81S09ITQkweDgKKyNk ZWZpbmUgTFBGX1JFU0lTVE9SU184S09ITQkweDEwCisjZGVmaW5lIExQRl9QUk9HUkFNX0VOCQlC SVQoNikKKyNkZWZpbmUgTFBGX1JFU0lTVE9SU19TRUwodmFsKQkoKHZhbCkgJiAweDNmKQorCisj ZGVmaW5lIEhTRlJFUVJBTkdFX1NFTCh2YWwpCSgoKHZhbCkgJiAweDNmKSA8PCAxKQorCisjZGVm aW5lIElOUFVUX0RJVklERVIodmFsKQkoKCh2YWwpIC0gMSkgJiAweDdmKQorI2RlZmluZSBMT1df UFJPR1JBTV9FTgkJMAorI2RlZmluZSBISUdIX1BST0dSQU1fRU4JCUJJVCg3KQorI2RlZmluZSBM T09QX0RJVl9MT1dfU0VMKHZhbCkJKCgodmFsKSAtIDEpICYgMHgxZikKKyNkZWZpbmUgTE9PUF9E SVZfSElHSF9TRUwodmFsKQkoKCgodmFsKSAtIDEpID4+IDUpICYgMHhmKQorI2RlZmluZSBQTExf TE9PUF9ESVZfRU4JCUJJVCg1KQorI2RlZmluZSBQTExfSU5QVVRfRElWX0VOCUJJVCg0KQorCisj ZGVmaW5lIFBPV0VSX0NPTlRST0wJCUJJVCg2KQorI2RlZmluZSBJTlRFUk5BTF9SRUdfQ1VSUkVO VAlCSVQoMykKKyNkZWZpbmUgQklBU19CTE9DS19PTgkJQklUKDIpCisjZGVmaW5lIEJBTkRHQVBf T04JCUJJVCgwKQorCisjZGVmaW5lIFRFUl9SRVNJU1RPUl9ISUdICUJJVCg3KQorI2RlZmluZQlU RVJfUkVTSVNUT1JfTE9XCTAKKyNkZWZpbmUgTEVWRUxfU0hJRlRFUlNfT04JQklUKDYpCisjZGVm aW5lIFRFUl9DQUxfRE9ORQkJQklUKDUpCisjZGVmaW5lIFNFVFJEX01BWAkJKDB4NyA8PCAyKQor I2RlZmluZSBQT1dFUl9NQU5BR0UJCUJJVCgxKQorI2RlZmluZSBURVJfUkVTSVNUT1JTX09OCUJJ VCgwKQorCisjZGVmaW5lIEJJQVNFWFRSX1NFTCh2YWwpCSgodmFsKSAmIDB4NykKKyNkZWZpbmUg QkFOREdBUF9TRUwodmFsKQkoKHZhbCkgJiAweDcpCisjZGVmaW5lIFRMUF9QUk9HUkFNX0VOCQlC SVQoNykKKyNkZWZpbmUgVEhTX1BSRV9QUk9HUkFNX0VOCUJJVCg3KQorI2RlZmluZSBUSFNfWkVS T19QUk9HUkFNX0VOCUJJVCg2KQorCisjZGVmaW5lIFBMTF9CSUFTX0NVUl9TRUxfQ0FQX1ZDT19D T05UUk9MCQkweDEwCisjZGVmaW5lIFBMTF9DUF9DT05UUk9MX1BMTF9MT0NLX0JZUEFTUwkJCTB4 MTEKKyNkZWZpbmUgUExMX0xQRl9BTkRfQ1BfQ09OVFJPTAkJCQkweDEyCisjZGVmaW5lIFBMTF9J TlBVVF9ESVZJREVSX1JBVElPCQkJCTB4MTcKKyNkZWZpbmUgUExMX0xPT1BfRElWSURFUl9SQVRJ TwkJCQkweDE4CisjZGVmaW5lIFBMTF9JTlBVVF9BTkRfTE9PUF9ESVZJREVSX1JBVElPU19DT05U Uk9MCTB4MTkKKyNkZWZpbmUgQkFOREdBUF9BTkRfQklBU19DT05UUk9MCQkJMHgyMAorI2RlZmlu ZSBURVJNSU5BVElPTl9SRVNJU1RFUl9DT05UUk9MCQkJMHgyMQorI2RlZmluZSBBRkVfQklBU19C QU5ER0FQX0FOQUxPR19QUk9HUkFNTUFCSUxJVFkJCTB4MjIKKyNkZWZpbmUgSFNfUlhfQ09OVFJP TF9PRl9MQU5FXzAJCQkJMHg0NAorI2RlZmluZSBIU19UWF9DTE9DS19MQU5FX1JFUVVFU1RfU1RB VEVfVElNRV9DT05UUk9MCTB4NjAKKyNkZWZpbmUgSFNfVFhfQ0xPQ0tfTEFORV9QUkVQQVJFX1NU QVRFX1RJTUVfQ09OVFJPTAkweDYxCisjZGVmaW5lIEhTX1RYX0NMT0NLX0xBTkVfSFNfWkVST19T VEFURV9USU1FX0NPTlRST0wJMHg2MgorI2RlZmluZSBIU19UWF9DTE9DS19MQU5FX1RSQUlMX1NU QVRFX1RJTUVfQ09OVFJPTAkweDYzCisjZGVmaW5lIEhTX1RYX0NMT0NLX0xBTkVfRVhJVF9TVEFU RV9USU1FX0NPTlRST0wJMHg2NAorI2RlZmluZSBIU19UWF9DTE9DS19MQU5FX1BPU1RfVElNRV9D T05UUk9MCQkweDY1CisjZGVmaW5lIEhTX1RYX0RBVEFfTEFORV9SRVFVRVNUX1NUQVRFX1RJTUVf Q09OVFJPTAkweDcwCisjZGVmaW5lIEhTX1RYX0RBVEFfTEFORV9QUkVQQVJFX1NUQVRFX1RJTUVf Q09OVFJPTAkweDcxCisjZGVmaW5lIEhTX1RYX0RBVEFfTEFORV9IU19aRVJPX1NUQVRFX1RJTUVf Q09OVFJPTAkweDcyCisjZGVmaW5lIEhTX1RYX0RBVEFfTEFORV9UUkFJTF9TVEFURV9USU1FX0NP TlRST0wJMHg3MworI2RlZmluZSBIU19UWF9EQVRBX0xBTkVfRVhJVF9TVEFURV9USU1FX0NPTlRS T0wJCTB4NzQKKworI2RlZmluZSBEV19NSVBJX05FRURTX1BIWV9DRkdfQ0xLCUJJVCgwKQorI2Rl ZmluZSBEV19NSVBJX05FRURTX0dSRl9DTEsJCUJJVCgxKQorCisjZGVmaW5lIFJLMzI4OF9HUkZf U09DX0NPTjYJCTB4MDI1YworI2RlZmluZSBSSzMyODhfRFNJMF9MQ0RDX1NFTAkJQklUKDYpCisj ZGVmaW5lIFJLMzI4OF9EU0kxX0xDRENfU0VMCQlCSVQoOSkKKworI2RlZmluZSBSSzMzOTlfR1JG X1NPQ19DT04yMAkJMHg2MjUwCisjZGVmaW5lIFJLMzM5OV9EU0kwX0xDRENfU0VMCQlCSVQoMCkK KyNkZWZpbmUgUkszMzk5X0RTSTFfTENEQ19TRUwJCUJJVCg0KQorCisjZGVmaW5lIFJLMzM5OV9H UkZfU09DX0NPTjIyCQkweDYyNTgKKyNkZWZpbmUgUkszMzk5X0RTSTBfVFVSTlJFUVVFU1QJCSgw eGYgPDwgMTIpCisjZGVmaW5lIFJLMzM5OV9EU0kwX1RVUk5ESVNBQkxFCQkoMHhmIDw8IDgpCisj ZGVmaW5lIFJLMzM5OV9EU0kwX0ZPUkNFVFhTVE9QTU9ERQkoMHhmIDw8IDQpCisjZGVmaW5lIFJL MzM5OV9EU0kwX0ZPUkNFUlhNT0RFCQkoMHhmIDw8IDApCisKKyNkZWZpbmUgUkszMzk5X0dSRl9T T0NfQ09OMjMJCTB4NjI1YworI2RlZmluZSBSSzMzOTlfRFNJMV9UVVJORElTQUJMRQkJKDB4ZiA8 PCAxMikKKyNkZWZpbmUgUkszMzk5X0RTSTFfRk9SQ0VUWFNUT1BNT0RFCSgweGYgPDwgOCkKKyNk ZWZpbmUgUkszMzk5X0RTSTFfRk9SQ0VSWE1PREUJCSgweGYgPDwgNCkKKyNkZWZpbmUgUkszMzk5 X0RTSTFfRU5BQkxFCQkoMHhmIDw8IDApCisKKyNkZWZpbmUgUkszMzk5X0dSRl9TT0NfQ09OMjQJ CTB4NjI2MAorI2RlZmluZSBSSzMzOTlfVFhSWF9NQVNURVJTTEFWRVoJQklUKDcpCisjZGVmaW5l IFJLMzM5OV9UWFJYX0VOQUJMRUNMSwkJQklUKDYpCisjZGVmaW5lIFJLMzM5OV9UWFJYX0JBU0VE SVIJCUJJVCg1KQorCisjZGVmaW5lIEhJV09SRF9VUERBVEUodmFsLCBtYXNrKQkodmFsIHwgKG1h c2spIDw8IDE2KQorCisjZGVmaW5lIHRvX2RzaShubSkJY29udGFpbmVyX29mKG5tLCBzdHJ1Y3Qg ZHdfbWlwaV9kc2lfcm9ja2NoaXAsIG5tKQorCitlbnVtIHsKKwlCQU5ER0FQXzk3XzA3LAorCUJB TkRHQVBfOThfMDUsCisJQkFOREdBUF85OV8wMiwKKwlCQU5ER0FQXzEwMF8wMCwKKwlCQU5ER0FQ XzkzXzE3LAorCUJBTkRHQVBfOTRfMTUsCisJQkFOREdBUF85NV8xMiwKKwlCQU5ER0FQXzk2XzEw LAorfTsKKworZW51bSB7CisJQklBU0VYVFJfODdfMSwKKwlCSUFTRVhUUl85MV81LAorCUJJQVNF WFRSXzk1XzksCisJQklBU0VYVFJfMTAwLAorCUJJQVNFWFRSXzEwNV85NCwKKwlCSUFTRVhUUl8x MTFfODgsCisJQklBU0VYVFJfMTE4XzgsCisJQklBU0VYVFJfMTI3XzcsCit9OworCitzdHJ1Y3Qg cm9ja2NoaXBfZHdfZHNpX2NoaXBfZGF0YSB7CisJdTMyIHJlZzsKKworCXUzMiBsY2RzZWxfZ3Jm X3JlZzsKKwl1MzIgbGNkc2VsX2JpZzsKKwl1MzIgbGNkc2VsX2xpdDsKKworCXUzMiBlbmFibGVf Z3JmX3JlZzsKKwl1MzIgZW5hYmxlOworCisJdTMyIGxhbmVjZmcxX2dyZl9yZWc7CisJdTMyIGxh bmVjZmcxOworCXUzMiBsYW5lY2ZnMl9ncmZfcmVnOworCXUzMiBsYW5lY2ZnMjsKKworCXVuc2ln bmVkIGludCBmbGFnczsKKwl1bnNpZ25lZCBpbnQgbWF4X2RhdGFfbGFuZXM7Cit9OworCitzdHJ1 Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3Qg ZHJtX2VuY29kZXIgZW5jb2RlcjsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisKKwlzdHJ1Y3QgcmVn bWFwICpncmZfcmVnbWFwOworCXN0cnVjdCBjbGsgKnBsbHJlZl9jbGs7CisJc3RydWN0IGNsayAq Z3JmX2NsazsKKwlzdHJ1Y3QgY2xrICpwaHlfY2ZnX2NsazsKKworCXVuc2lnbmVkIGludCBsYW5l X21icHM7IC8qIHBlciBsYW5lICovCisJdTE2IGlucHV0X2RpdjsKKwl1MTYgZmVlZGJhY2tfZGl2 OworCXUzMiBmb3JtYXQ7CisKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRtZDsKKwljb25zdCBzdHJ1 Y3Qgcm9ja2NoaXBfZHdfZHNpX2NoaXBfZGF0YSAqY2RhdGE7CisJc3RydWN0IGR3X21pcGlfZHNp X3BsYXRfZGF0YSBwZGF0YTsKK307CisKK3N0cnVjdCBkcGh5X3BsbF9wYXJhbWV0ZXJfbWFwIHsK Kwl1bnNpZ25lZCBpbnQgbWF4X21icHM7CisJdTggaHNmcmVxcmFuZ2U7CisJdTggaWNwY3RybDsK Kwl1OCBscGZjdHJsOworfTsKKworLyogVGhlIHRhYmxlIGlzIGJhc2VkIG9uIDI3TUh6IERQSFkg cGxsIHJlZmVyZW5jZSBjbG9jay4gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHBoeV9wbGxfcGFy YW1ldGVyX21hcCBkcHBhX21hcFtdID0geworCXsgIDg5LCAweDAwLCBDUF9DVVJSRU5UXzNVQSwg TFBGX1JFU0lTVE9SU18xM0tPSE0gfSwKKwl7ICA5OSwgMHgxMCwgQ1BfQ1VSUkVOVF8zVUEsIExQ Rl9SRVNJU1RPUlNfMTNLT0hNIH0sCisJeyAxMDksIDB4MjAsIENQX0NVUlJFTlRfM1VBLCBMUEZf UkVTSVNUT1JTXzEzS09ITSB9LAorCXsgMTI5LCAweDAxLCBDUF9DVVJSRU5UXzNVQSwgTFBGX1JF U0lTVE9SU18xNV81S09ITSB9LAorCXsgMTM5LCAweDExLCBDUF9DVVJSRU5UXzNVQSwgTFBGX1JF U0lTVE9SU18xNV81S09ITSB9LAorCXsgMTQ5LCAweDIxLCBDUF9DVVJSRU5UXzNVQSwgTFBGX1JF U0lTVE9SU18xNV81S09ITSB9LAorCXsgMTY5LCAweDAyLCBDUF9DVVJSRU5UXzZVQSwgTFBGX1JF U0lTVE9SU18xM0tPSE0gfSwKKwl7IDE3OSwgMHgxMiwgQ1BfQ1VSUkVOVF82VUEsIExQRl9SRVNJ U1RPUlNfMTNLT0hNIH0sCisJeyAxOTksIDB4MjIsIENQX0NVUlJFTlRfNlVBLCBMUEZfUkVTSVNU T1JTXzEzS09ITSB9LAorCXsgMjE5LCAweDAzLCBDUF9DVVJSRU5UXzRfNVVBLCBMUEZfUkVTSVNU T1JTXzEzS09ITSB9LAorCXsgMjM5LCAweDEzLCBDUF9DVVJSRU5UXzRfNVVBLCBMUEZfUkVTSVNU T1JTXzEzS09ITSB9LAorCXsgMjQ5LCAweDIzLCBDUF9DVVJSRU5UXzRfNVVBLCBMUEZfUkVTSVNU T1JTXzEzS09ITSB9LAorCXsgMjY5LCAweDA0LCBDUF9DVVJSRU5UXzZVQSwgTFBGX1JFU0lTVE9S U18xMV81S09ITSB9LAorCXsgMjk5LCAweDE0LCBDUF9DVVJSRU5UXzZVQSwgTFBGX1JFU0lTVE9S U18xMV81S09ITSB9LAorCXsgMzI5LCAweDA1LCBDUF9DVVJSRU5UXzNVQSwgTFBGX1JFU0lTVE9S U18xNV81S09ITSB9LAorCXsgMzU5LCAweDE1LCBDUF9DVVJSRU5UXzNVQSwgTFBGX1JFU0lTVE9S U18xNV81S09ITSB9LAorCXsgMzk5LCAweDI1LCBDUF9DVVJSRU5UXzNVQSwgTFBGX1JFU0lTVE9S U18xNV81S09ITSB9LAorCXsgNDQ5LCAweDA2LCBDUF9DVVJSRU5UXzdfNVVBLCBMUEZfUkVTSVNU T1JTXzExXzVLT0hNIH0sCisJeyA0OTksIDB4MTYsIENQX0NVUlJFTlRfN181VUEsIExQRl9SRVNJ U1RPUlNfMTFfNUtPSE0gfSwKKwl7IDU0OSwgMHgwNywgQ1BfQ1VSUkVOVF83XzVVQSwgTFBGX1JF U0lTVE9SU18xMF81S09ITSB9LAorCXsgNTk5LCAweDE3LCBDUF9DVVJSRU5UXzdfNVVBLCBMUEZf UkVTSVNUT1JTXzEwXzVLT0hNIH0sCisJeyA2NDksIDB4MDgsIENQX0NVUlJFTlRfN181VUEsIExQ Rl9SRVNJU1RPUlNfMTFfNUtPSE0gfSwKKwl7IDY5OSwgMHgxOCwgQ1BfQ1VSUkVOVF83XzVVQSwg TFBGX1JFU0lTVE9SU18xMV81S09ITSB9LAorCXsgNzQ5LCAweDA5LCBDUF9DVVJSRU5UXzdfNVVB LCBMUEZfUkVTSVNUT1JTXzExXzVLT0hNIH0sCisJeyA3OTksIDB4MTksIENQX0NVUlJFTlRfN181 VUEsIExQRl9SRVNJU1RPUlNfMTFfNUtPSE0gfSwKKwl7IDg0OSwgMHgyOSwgQ1BfQ1VSUkVOVF83 XzVVQSwgTFBGX1JFU0lTVE9SU18xMV81S09ITSB9LAorCXsgODk5LCAweDM5LCBDUF9DVVJSRU5U XzdfNVVBLCBMUEZfUkVTSVNUT1JTXzExXzVLT0hNIH0sCisJeyA5NDksIDB4MGEsIENQX0NVUlJF TlRfMTJVQSwgTFBGX1JFU0lTVE9SU184S09ITSB9LAorCXsgOTk5LCAweDFhLCBDUF9DVVJSRU5U XzEyVUEsIExQRl9SRVNJU1RPUlNfOEtPSE0gfSwKKwl7MTA0OSwgMHgyYSwgQ1BfQ1VSUkVOVF8x MlVBLCBMUEZfUkVTSVNUT1JTXzhLT0hNIH0sCisJezEwOTksIDB4M2EsIENQX0NVUlJFTlRfMTJV QSwgTFBGX1JFU0lTVE9SU184S09ITSB9LAorCXsxMTQ5LCAweDBiLCBDUF9DVVJSRU5UXzEyVUEs IExQRl9SRVNJU1RPUlNfMTBfNUtPSE0gfSwKKwl7MTE5OSwgMHgxYiwgQ1BfQ1VSUkVOVF8xMlVB LCBMUEZfUkVTSVNUT1JTXzEwXzVLT0hNIH0sCisJezEyNDksIDB4MmIsIENQX0NVUlJFTlRfMTJV QSwgTFBGX1JFU0lTVE9SU18xMF81S09ITSB9LAorCXsxMjk5LCAweDNiLCBDUF9DVVJSRU5UXzEy VUEsIExQRl9SRVNJU1RPUlNfMTBfNUtPSE0gfSwKKwl7MTM0OSwgMHgwYywgQ1BfQ1VSUkVOVF8x MlVBLCBMUEZfUkVTSVNUT1JTXzEwXzVLT0hNIH0sCisJezEzOTksIDB4MWMsIENQX0NVUlJFTlRf MTJVQSwgTFBGX1JFU0lTVE9SU18xMF81S09ITSB9LAorCXsxNDQ5LCAweDJjLCBDUF9DVVJSRU5U XzEyVUEsIExQRl9SRVNJU1RPUlNfMTBfNUtPSE0gfSwKKwl7MTUwMCwgMHgzYywgQ1BfQ1VSUkVO VF8xMlVBLCBMUEZfUkVTSVNUT1JTXzEwXzVLT0hNIH0KK307CisKK3N0YXRpYyBpbnQgbWF4X21i cHNfdG9fcGFyYW1ldGVyKHVuc2lnbmVkIGludCBtYXhfbWJwcykKK3sKKwlpbnQgaTsKKworCWZv ciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRwcGFfbWFwKTsgaSsrKQorCQlpZiAoZHBwYV9tYXBb aV0ubWF4X21icHMgPj0gbWF4X21icHMpCisJCQlyZXR1cm4gaTsKKworCXJldHVybiAtRUlOVkFM OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZHNpX3dyaXRlKHN0cnVjdCBkd19taXBpX2RzaV9y b2NrY2hpcCAqZHNpLCB1MzIgcmVnLCB1MzIgdmFsKQoreworCXdyaXRlbCh2YWwsIGRzaS0+YmFz ZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGRzaV9yZWFkKHN0cnVjdCBkd19taXBp X2RzaV9yb2NrY2hpcCAqZHNpLCB1MzIgcmVnKQoreworCXJldHVybiByZWFkbChkc2ktPmJhc2Ug KyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZHNpX3NldChzdHJ1Y3QgZHdfbWlwaV9k c2lfcm9ja2NoaXAgKmRzaSwgdTMyIHJlZywgdTMyIG1hc2spCit7CisJZHNpX3dyaXRlKGRzaSwg cmVnLCBkc2lfcmVhZChkc2ksIHJlZykgfCBtYXNrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lk IGRzaV91cGRhdGVfYml0cyhzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRzaSwgdTMyIHJl ZywKKwkJCQkgICB1MzIgbWFzaywgdTMyIHZhbCkKK3sKKwlkc2lfd3JpdGUoZHNpLCByZWcsIChk c2lfcmVhZChkc2ksIHJlZykgJiB+bWFzaykgfCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBkd19t aXBpX2RzaV9waHlfd3JpdGUoc3RydWN0IGR3X21pcGlfZHNpX3JvY2tjaGlwICpkc2ksCisJCQkJ ICB1OCB0ZXN0X2NvZGUsCisJCQkJICB1OCB0ZXN0X2RhdGEpCit7CisJLyoKKwkgKiBXaXRoIHRo ZSBmYWxsaW5nIGVkZ2Ugb24gVEVTVENMSywgdGhlIFRFU1RESU5bNzowXSBzaWduYWwgY29udGVu dAorCSAqIGlzIGxhdGNoZWQgaW50ZXJuYWxseSBhcyB0aGUgY3VycmVudCB0ZXN0IGNvZGUuIFRl c3QgZGF0YSBpcworCSAqIHByb2dyYW1tZWQgaW50ZXJuYWxseSBieSByaXNpbmcgZWRnZSBvbiBU RVNUQ0xLLgorCSAqLworCWRzaV93cml0ZShkc2ksIERTSV9QSFlfVFNUX0NUUkwwLCBQSFlfVEVT VENMSyB8IFBIWV9VTlRFU1RDTFIpOworCisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UU1RfQ1RS TDEsIFBIWV9URVNURU4gfCBQSFlfVEVTVERPVVQoMCkgfAorCQkJCQkgIFBIWV9URVNURElOKHRl c3RfY29kZSkpOworCisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDAsIFBIWV9VTlRF U1RDTEsgfCBQSFlfVU5URVNUQ0xSKTsKKworCWRzaV93cml0ZShkc2ksIERTSV9QSFlfVFNUX0NU UkwxLCBQSFlfVU5URVNURU4gfCBQSFlfVEVTVERPVVQoMCkgfAorCQkJCQkgIFBIWV9URVNURElO KHRlc3RfZGF0YSkpOworCisJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDAsIFBIWV9U RVNUQ0xLIHwgUEhZX1VOVEVTVENMUik7Cit9CisKKy8qKgorICogbnMyYmMgLSBOYW5vc2Vjb25k cyB0byBieXRlIGNsb2NrIGN5Y2xlcworICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBu czJiYyhzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRzaSwgaW50IG5zKQoreworCXJldHVy biBESVZfUk9VTkRfVVAobnMgKiBkc2ktPmxhbmVfbWJwcyAvIDgsIDEwMDApOworfQorCisvKioK KyAqIG5zMnVpIC0gTmFub3NlY29uZHMgdG8gVUkgdGltZSBwZXJpb2RzCisgKi8KK3N0YXRpYyBp bmxpbmUgdW5zaWduZWQgaW50IG5zMnVpKHN0cnVjdCBkd19taXBpX2RzaV9yb2NrY2hpcCAqZHNp LCBpbnQgbnMpCit7CisJcmV0dXJuIERJVl9ST1VORF9VUChucyAqIGRzaS0+bGFuZV9tYnBzLCAx MDAwKTsKK30KKworc3RhdGljIGludCBkd19taXBpX2RzaV9waHlfaW5pdCh2b2lkICpwcml2X2Rh dGEpCit7CisJc3RydWN0IGR3X21pcGlfZHNpX3JvY2tjaGlwICpkc2kgPSBwcml2X2RhdGE7CisJ aW50IHJldCwgaSwgdmNvOworCisJLyoKKwkgKiBHZXQgdmNvIGZyb20gZnJlcXVlbmN5KGxhbmVf bWJwcykKKwkgKiB2Y28JZnJlcXVlbmN5IHRhYmxlCisJICogMDAwIC0gYmV0d2VlbiAgIDgwIGFu ZCAgMjAwIE1IegorCSAqIDAwMSAtIGJldHdlZW4gIDIwMCBhbmQgIDMwMCBNSHoKKwkgKiAwMTAg LSBiZXR3ZWVuICAzMDAgYW5kICA1MDAgTUh6CisJICogMDExIC0gYmV0d2VlbiAgNTAwIGFuZCAg NzAwIE1IegorCSAqIDEwMCAtIGJldHdlZW4gIDcwMCBhbmQgIDkwMCBNSHoKKwkgKiAxMDEgLSBi ZXR3ZWVuICA5MDAgYW5kIDExMDAgTUh6CisJICogMTEwIC0gYmV0d2VlbiAxMTAwIGFuZCAxMzAw IE1IegorCSAqIDExMSAtIGJldHdlZW4gMTMwMCBhbmQgMTUwMCBNSHoKKwkgKi8KKwl2Y28gPSAo ZHNpLT5sYW5lX21icHMgPCAyMDApID8gMCA6IChkc2ktPmxhbmVfbWJwcyArIDEwMCkgLyAyMDA7 CisKKwlpID0gbWF4X21icHNfdG9fcGFyYW1ldGVyKGRzaS0+bGFuZV9tYnBzKTsKKwlpZiAoaSA8 IDApIHsKKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwKKwkJCSAgICAgICJmYWlsZWQgdG8gZ2V0 IHBhcmFtZXRlciBmb3IgJWRtYnBzIGNsb2NrXG4iLAorCQkJICAgICAgZHNpLT5sYW5lX21icHMp OworCQlyZXR1cm4gaTsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5waHlf Y2ZnX2Nsayk7CisJaWYgKHJldCkgeworCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVk IHRvIGVuYWJsZSBwaHlfY2ZnX2Nsa1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJZHdfbWlw aV9kc2lfcGh5X3dyaXRlKGRzaSwgUExMX0JJQVNfQ1VSX1NFTF9DQVBfVkNPX0NPTlRST0wsCisJ CQkgICAgICBCWVBBU1NfVkNPX1JBTkdFIHwKKwkJCSAgICAgIFZDT19SQU5HRV9DT05fU0VMKHZj bykgfAorCQkJICAgICAgVkNPX0lOX0NBUF9DT05fTE9XIHwKKwkJCSAgICAgIFJFRl9CSUFTX0NV Ul9TRUwpOworCisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgUExMX0NQX0NPTlRST0xfUExM X0xPQ0tfQllQQVNTLAorCQkJICAgICAgQ1BfQ1VSUkVOVF9TRUwoZHBwYV9tYXBbaV0uaWNwY3Ry bCkpOworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIFBMTF9MUEZfQU5EX0NQX0NPTlRST0ws CisJCQkgICAgICBDUF9QUk9HUkFNX0VOIHwgTFBGX1BST0dSQU1fRU4gfAorCQkJICAgICAgTFBG X1JFU0lTVE9SU19TRUwoZHBwYV9tYXBbaV0ubHBmY3RybCkpOworCisJZHdfbWlwaV9kc2lfcGh5 X3dyaXRlKGRzaSwgSFNfUlhfQ09OVFJPTF9PRl9MQU5FXzAsCisJCQkgICAgICBIU0ZSRVFSQU5H RV9TRUwoZHBwYV9tYXBbaV0uaHNmcmVxcmFuZ2UpKTsKKworCWR3X21pcGlfZHNpX3BoeV93cml0 ZShkc2ksIFBMTF9JTlBVVF9ESVZJREVSX1JBVElPLAorCQkJICAgICAgSU5QVVRfRElWSURFUihk c2ktPmlucHV0X2RpdikpOworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIFBMTF9MT09QX0RJ VklERVJfUkFUSU8sCisJCQkgICAgICBMT09QX0RJVl9MT1dfU0VMKGRzaS0+ZmVlZGJhY2tfZGl2 KSB8CisJCQkgICAgICBMT1dfUFJPR1JBTV9FTik7CisJLyoKKwkgKiBXZSBuZWVkIHNldCBQTExf SU5QVVRfQU5EX0xPT1BfRElWSURFUl9SQVRJT1NfQ09OVFJPTCBpbW1lZGlhdGVseQorCSAqIHRv IG1ha2UgdGhlIGNvbmZpZ3VyZWQgTFNCIGVmZmVjdGl2ZSBhY2NvcmRpbmcgdG8gSVAgc2ltdWxh dGlvbgorCSAqIGFuZCBsYWIgdGVzdCByZXN1bHRzLgorCSAqIE9ubHkgaW4gdGhpcyB3YXkgY2Fu IHdlIGdldCBjb3JyZWN0IG1pcGkgcGh5IHBsbCBmcmVxdWVuY3kuCisJICovCisJZHdfbWlwaV9k c2lfcGh5X3dyaXRlKGRzaSwgUExMX0lOUFVUX0FORF9MT09QX0RJVklERVJfUkFUSU9TX0NPTlRS T0wsCisJCQkgICAgICBQTExfTE9PUF9ESVZfRU4gfCBQTExfSU5QVVRfRElWX0VOKTsKKwlkd19t aXBpX2RzaV9waHlfd3JpdGUoZHNpLCBQTExfTE9PUF9ESVZJREVSX1JBVElPLAorCQkJICAgICAg TE9PUF9ESVZfSElHSF9TRUwoZHNpLT5mZWVkYmFja19kaXYpIHwKKwkJCSAgICAgIEhJR0hfUFJP R1JBTV9FTik7CisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgUExMX0lOUFVUX0FORF9MT09Q X0RJVklERVJfUkFUSU9TX0NPTlRST0wsCisJCQkgICAgICBQTExfTE9PUF9ESVZfRU4gfCBQTExf SU5QVVRfRElWX0VOKTsKKworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIEFGRV9CSUFTX0JB TkRHQVBfQU5BTE9HX1BST0dSQU1NQUJJTElUWSwKKwkJCSAgICAgIExPV19QUk9HUkFNX0VOIHwg QklBU0VYVFJfU0VMKEJJQVNFWFRSXzEyN183KSk7CisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRz aSwgQUZFX0JJQVNfQkFOREdBUF9BTkFMT0dfUFJPR1JBTU1BQklMSVRZLAorCQkJICAgICAgSElH SF9QUk9HUkFNX0VOIHwgQkFOREdBUF9TRUwoQkFOREdBUF85Nl8xMCkpOworCisJZHdfbWlwaV9k c2lfcGh5X3dyaXRlKGRzaSwgQkFOREdBUF9BTkRfQklBU19DT05UUk9MLAorCQkJICAgICAgUE9X RVJfQ09OVFJPTCB8IElOVEVSTkFMX1JFR19DVVJSRU5UIHwKKwkJCSAgICAgIEJJQVNfQkxPQ0tf T04gfCBCQU5ER0FQX09OKTsKKworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIFRFUk1JTkFU SU9OX1JFU0lTVEVSX0NPTlRST0wsCisJCQkgICAgICBURVJfUkVTSVNUT1JfTE9XIHwgVEVSX0NB TF9ET05FIHwKKwkJCSAgICAgIFNFVFJEX01BWCB8IFRFUl9SRVNJU1RPUlNfT04pOworCWR3X21p cGlfZHNpX3BoeV93cml0ZShkc2ksIFRFUk1JTkFUSU9OX1JFU0lTVEVSX0NPTlRST0wsCisJCQkg ICAgICBURVJfUkVTSVNUT1JfSElHSCB8IExFVkVMX1NISUZURVJTX09OIHwKKwkJCSAgICAgIFNF VFJEX01BWCB8IFBPV0VSX01BTkFHRSB8CisJCQkgICAgICBURVJfUkVTSVNUT1JTX09OKTsKKwor CWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIEhTX1RYX0NMT0NLX0xBTkVfUkVRVUVTVF9TVEFU RV9USU1FX0NPTlRST0wsCisJCQkgICAgICBUTFBfUFJPR1JBTV9FTiB8IG5zMmJjKGRzaSwgNTAw KSk7CisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgSFNfVFhfQ0xPQ0tfTEFORV9QUkVQQVJF X1NUQVRFX1RJTUVfQ09OVFJPTCwKKwkJCSAgICAgIFRIU19QUkVfUFJPR1JBTV9FTiB8IG5zMnVp KGRzaSwgNDApKTsKKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCBIU19UWF9DTE9DS19MQU5F X0hTX1pFUk9fU1RBVEVfVElNRV9DT05UUk9MLAorCQkJICAgICAgVEhTX1pFUk9fUFJPR1JBTV9F TiB8IG5zMmJjKGRzaSwgMzAwKSk7CisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgSFNfVFhf Q0xPQ0tfTEFORV9UUkFJTF9TVEFURV9USU1FX0NPTlRST0wsCisJCQkgICAgICBUSFNfUFJFX1BS T0dSQU1fRU4gfCBuczJ1aShkc2ksIDEwMCkpOworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ks IEhTX1RYX0NMT0NLX0xBTkVfRVhJVF9TVEFURV9USU1FX0NPTlRST0wsCisJCQkgICAgICBCSVQo NSkgfCBuczJiYyhkc2ksIDEwMCkpOworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIEhTX1RY X0NMT0NLX0xBTkVfUE9TVF9USU1FX0NPTlRST0wsCisJCQkgICAgICBCSVQoNSkgfCAobnMyYmMo ZHNpLCA2MCkgKyA3KSk7CisKKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCBIU19UWF9EQVRB X0xBTkVfUkVRVUVTVF9TVEFURV9USU1FX0NPTlRST0wsCisJCQkgICAgICBUTFBfUFJPR1JBTV9F TiB8IG5zMmJjKGRzaSwgNTAwKSk7CisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgSFNfVFhf REFUQV9MQU5FX1BSRVBBUkVfU1RBVEVfVElNRV9DT05UUk9MLAorCQkJICAgICAgVEhTX1BSRV9Q Uk9HUkFNX0VOIHwgKG5zMnVpKGRzaSwgNTApICsgMjApKTsKKwlkd19taXBpX2RzaV9waHlfd3Jp dGUoZHNpLCBIU19UWF9EQVRBX0xBTkVfSFNfWkVST19TVEFURV9USU1FX0NPTlRST0wsCisJCQkg ICAgICBUSFNfWkVST19QUk9HUkFNX0VOIHwgKG5zMmJjKGRzaSwgMTQwKSArIDIpKTsKKwlkd19t aXBpX2RzaV9waHlfd3JpdGUoZHNpLCBIU19UWF9EQVRBX0xBTkVfVFJBSUxfU1RBVEVfVElNRV9D T05UUk9MLAorCQkJICAgICAgVEhTX1BSRV9QUk9HUkFNX0VOIHwgKG5zMnVpKGRzaSwgNjApICsg OCkpOworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIEhTX1RYX0RBVEFfTEFORV9FWElUX1NU QVRFX1RJTUVfQ09OVFJPTCwKKwkJCSAgICAgIEJJVCg1KSB8IG5zMmJjKGRzaSwgMTAwKSk7CisK KwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5waHlfY2ZnX2Nsayk7CisKKwlyZXR1cm4gcmV0 OworfQorCitzdGF0aWMgaW50Citkd19taXBpX2RzaV9nZXRfbGFuZV9tYnBzKHZvaWQgKnByaXZf ZGF0YSwgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkgIHVuc2lnbmVkIGxvbmcg bW9kZV9mbGFncywgdTMyIGxhbmVzLCB1MzIgZm9ybWF0LAorCQkJICB1bnNpZ25lZCBpbnQgKmxh bmVfbWJwcykKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRzaSA9IHByaXZfZGF0 YTsKKwlpbnQgYnBwOworCXVuc2lnbmVkIGxvbmcgbXBjbGssIHRtcDsKKwl1bnNpZ25lZCBpbnQg dGFyZ2V0X21icHMgPSAxMDAwOworCXVuc2lnbmVkIGludCBtYXhfbWJwcyA9IGRwcGFfbWFwW0FS UkFZX1NJWkUoZHBwYV9tYXApIC0gMV0ubWF4X21icHM7CisJdW5zaWduZWQgbG9uZyBiZXN0X2Zy ZXEgPSAwOworCXVuc2lnbmVkIGxvbmcgZnZjb19taW4sIGZ2Y29fbWF4LCBmaW4sIGZvdXQ7CisJ dW5zaWduZWQgaW50IG1pbl9wcmVkaXYsIG1heF9wcmVkaXY7CisJdW5zaWduZWQgaW50IF9wcmVk aXYsIHVuaW5pdGlhbGl6ZWRfdmFyKGJlc3RfcHJlZGl2KTsKKwl1bnNpZ25lZCBsb25nIF9mYmRp diwgdW5pbml0aWFsaXplZF92YXIoYmVzdF9mYmRpdik7CisJdW5zaWduZWQgbG9uZyBtaW5fZGVs dGEgPSBVTE9OR19NQVg7CisKKwlkc2ktPmZvcm1hdCA9IGZvcm1hdDsKKwlicHAgPSBtaXBpX2Rz aV9waXhlbF9mb3JtYXRfdG9fYnBwKGRzaS0+Zm9ybWF0KTsKKwlpZiAoYnBwIDwgMCkgeworCQlE Uk1fREVWX0VSUk9SKGRzaS0+ZGV2LAorCQkJICAgICAgImZhaWxlZCB0byBnZXQgYnBwIGZvciBw aXhlbCBmb3JtYXQgJWRcbiIsCisJCQkgICAgICBkc2ktPmZvcm1hdCk7CisJCXJldHVybiBicHA7 CisJfQorCisJbXBjbGsgPSBESVZfUk9VTkRfVVAobW9kZS0+Y2xvY2ssIE1TRUNfUEVSX1NFQyk7 CisJaWYgKG1wY2xrKSB7CisJCS8qIHRha2UgMSAvIDAuOCwgc2luY2UgbWJwcyBtdXN0IGJpZyB0 aGFuIGJhbmR3aWR0aCBvZiBSR0IgKi8KKwkJdG1wID0gbXBjbGsgKiAoYnBwIC8gbGFuZXMpICog MTAgLyA4OworCQlpZiAodG1wIDwgbWF4X21icHMpCisJCQl0YXJnZXRfbWJwcyA9IHRtcDsKKwkJ ZWxzZQorCQkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwKKwkJCQkgICAgICAiRFBIWSBjbG9jayBm cmVxdWVuY3kgaXMgb3V0IG9mIHJhbmdlXG4iKTsKKwl9CisKKwlmaW4gPSBjbGtfZ2V0X3JhdGUo ZHNpLT5wbGxyZWZfY2xrKTsKKwlmb3V0ID0gdGFyZ2V0X21icHMgKiBVU0VDX1BFUl9TRUM7CisK KwkvKiBjb25zdHJhaW50OiA1TWh6IDw9IEZyZWYgLyBOIDw9IDQwTUh6ICovCisJbWluX3ByZWRp diA9IERJVl9ST1VORF9VUChmaW4sIDQwICogVVNFQ19QRVJfU0VDKTsKKwltYXhfcHJlZGl2ID0g ZmluIC8gKDUgKiBVU0VDX1BFUl9TRUMpOworCisJLyogY29uc3RyYWludDogODBNSHogPD0gRnZj byA8PSAxNTAwTWh6ICovCisJZnZjb19taW4gPSA4MCAqIFVTRUNfUEVSX1NFQzsKKwlmdmNvX21h eCA9IDE1MDAgKiBVU0VDX1BFUl9TRUM7CisKKwlmb3IgKF9wcmVkaXYgPSBtaW5fcHJlZGl2OyBf cHJlZGl2IDw9IG1heF9wcmVkaXY7IF9wcmVkaXYrKykgeworCQl1NjQgdG1wOworCQl1MzIgZGVs dGE7CisJCS8qIEZ2Y28gPSBGcmVmICogTSAvIE4gKi8KKwkJdG1wID0gKHU2NClmb3V0ICogX3By ZWRpdjsKKwkJZG9fZGl2KHRtcCwgZmluKTsKKwkJX2ZiZGl2ID0gdG1wOworCQkvKgorCQkgKiBE dWUgdG8gdGhlIHVzZSBvZiBhICJieSAyIHByZS1zY2FsZXIsIiB0aGUgcmFuZ2Ugb2YgdGhlCisJ CSAqIGZlZWRiYWNrIG11bHRpcGxpY2F0aW9uIHZhbHVlIE0gaXMgbGltaXRlZCB0byBldmVuIGRp dmlzaW9uCisJCSAqIG51bWJlcnMsIGFuZCBtIG11c3QgYmUgZ3JlYXRlciB0aGFuIDYsIG5vdCBi aWdnZXIgdGhhbiA1MTIuCisJCSAqLworCQlpZiAoX2ZiZGl2IDwgNiB8fCBfZmJkaXYgPiA1MTIp CisJCQljb250aW51ZTsKKworCQlfZmJkaXYgKz0gX2ZiZGl2ICUgMjsKKworCQl0bXAgPSAodTY0 KV9mYmRpdiAqIGZpbjsKKwkJZG9fZGl2KHRtcCwgX3ByZWRpdik7CisJCWlmICh0bXAgPCBmdmNv X21pbiB8fCB0bXAgPiBmdmNvX21heCkKKwkJCWNvbnRpbnVlOworCisJCWRlbHRhID0gYWJzKGZv dXQgLSB0bXApOworCQlpZiAoZGVsdGEgPCBtaW5fZGVsdGEpIHsKKwkJCWJlc3RfcHJlZGl2ID0g X3ByZWRpdjsKKwkJCWJlc3RfZmJkaXYgPSBfZmJkaXY7CisJCQltaW5fZGVsdGEgPSBkZWx0YTsK KwkJCWJlc3RfZnJlcSA9IHRtcDsKKwkJfQorCX0KKworCWlmIChiZXN0X2ZyZXEpIHsKKwkJZHNp LT5sYW5lX21icHMgPSBESVZfUk9VTkRfVVAoYmVzdF9mcmVxLCBVU0VDX1BFUl9TRUMpOworCQkq bGFuZV9tYnBzID0gZHNpLT5sYW5lX21icHM7CisJCWRzaS0+aW5wdXRfZGl2ID0gYmVzdF9wcmVk aXY7CisJCWRzaS0+ZmVlZGJhY2tfZGl2ID0gYmVzdF9mYmRpdjsKKwl9IGVsc2UgeworCQlEUk1f REVWX0VSUk9SKGRzaS0+ZGV2LCAiQ2FuIG5vdCBmaW5kIGJlc3RfZnJlcSBmb3IgRFBIWVxuIik7 CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qg c3RydWN0IGR3X21pcGlfZHNpX3BoeV9vcHMgZHdfbWlwaV9kc2lfcm9ja2NoaXBfcGh5X29wcyA9 IHsKKwkuaW5pdCA9IGR3X21pcGlfZHNpX3BoeV9pbml0LAorCS5nZXRfbGFuZV9tYnBzID0gZHdf bWlwaV9kc2lfZ2V0X2xhbmVfbWJwcywKK307CisKK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX3Jv Y2tjaGlwX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRzaSwKKwkJCQkJaW50 IG11eCkKK3sKKwlpZiAoZHNpLT5jZGF0YS0+bGNkc2VsX2dyZl9yZWcpCisJCXJlZ21hcF93cml0 ZShkc2ktPmdyZl9yZWdtYXAsIGRzaS0+Y2RhdGEtPmxjZHNlbF9ncmZfcmVnLAorCQkJbXV4ID8g ZHNpLT5jZGF0YS0+bGNkc2VsX2xpdCA6IGRzaS0+Y2RhdGEtPmxjZHNlbF9iaWcpOworCisJaWYg KGRzaS0+Y2RhdGEtPmxhbmVjZmcxX2dyZl9yZWcpCisJCXJlZ21hcF93cml0ZShkc2ktPmdyZl9y ZWdtYXAsIGRzaS0+Y2RhdGEtPmxhbmVjZmcxX2dyZl9yZWcsCisJCQkJCSAgICAgIGRzaS0+Y2Rh dGEtPmxhbmVjZmcxKTsKKworCWlmIChkc2ktPmNkYXRhLT5sYW5lY2ZnMl9ncmZfcmVnKQorCQly ZWdtYXBfd3JpdGUoZHNpLT5ncmZfcmVnbWFwLCBkc2ktPmNkYXRhLT5sYW5lY2ZnMl9ncmZfcmVn LAorCQkJCQkgICAgICBkc2ktPmNkYXRhLT5sYW5lY2ZnMik7CisKKwlpZiAoZHNpLT5jZGF0YS0+ ZW5hYmxlX2dyZl9yZWcpCisJCXJlZ21hcF93cml0ZShkc2ktPmdyZl9yZWdtYXAsIGRzaS0+Y2Rh dGEtPmVuYWJsZV9ncmZfcmVnLAorCQkJCQkgICAgICBkc2ktPmNkYXRhLT5lbmFibGUpOworfQor CitzdGF0aWMgaW50Citkd19taXBpX2RzaV9lbmNvZGVyX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJt X2VuY29kZXIgKmVuY29kZXIsCisJCQkJIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSwKKwkJCQkgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCit7CisJc3Ry dWN0IHJvY2tjaGlwX2NydGNfc3RhdGUgKnMgPSB0b19yb2NrY2hpcF9jcnRjX3N0YXRlKGNydGNf c3RhdGUpOworCXN0cnVjdCBkd19taXBpX2RzaV9yb2NrY2hpcCAqZHNpID0gdG9fZHNpKGVuY29k ZXIpOworCisJc3dpdGNoIChkc2ktPmZvcm1hdCkgeworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjg4 ODoKKwkJcy0+b3V0cHV0X21vZGUgPSBST0NLQ0hJUF9PVVRfTU9ERV9QODg4OworCQlicmVhazsK KwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjY6CisJCXMtPm91dHB1dF9tb2RlID0gUk9DS0NISVBf T1VUX01PREVfUDY2NjsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNTY1OgorCQlz LT5vdXRwdXRfbW9kZSA9IFJPQ0tDSElQX09VVF9NT0RFX1A1NjU7CisJCWJyZWFrOworCWRlZmF1 bHQ6CisJCVdBUk5fT04oMSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXMtPm91dHB1dF90 eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX0RTSTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMg dm9pZCBkd19taXBpX2RzaV9lbmNvZGVyX2VuYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29k ZXIpCit7CisJc3RydWN0IGR3X21pcGlfZHNpX3JvY2tjaGlwICpkc2kgPSB0b19kc2koZW5jb2Rl cik7CisJaW50IHJldCwgbXV4OworCisJbXV4ID0gZHJtX29mX2VuY29kZXJfYWN0aXZlX2VuZHBv aW50X2lkKGRzaS0+ZGV2LT5vZl9ub2RlLAorCQkJCQkJJmRzaS0+ZW5jb2Rlcik7CisJaWYgKG11 eCA8IDApCisJCXJldHVybjsKKworCXBtX3J1bnRpbWVfZ2V0X3N5bmMoZHNpLT5kZXYpOworCisJ LyoKKwkgKiBGb3IgdGhlIFJLMzM5OSwgdGhlIGNsayBvZiBncmYgbXVzdCBiZSBlbmFibGVkIGJl Zm9yZSB3cml0aW5nIGdyZgorCSAqIHJlZ2lzdGVyLiBBbmQgZm9yIFJLMzI4OCBvciBvdGhlciBz b2MsIHRoaXMgZ3JmX2NsayBtdXN0IGJlIE5VTEwsCisJICogdGhlIGNsa19wcmVwYXJlX2VuYWJs ZSByZXR1cm4gdHJ1ZSBkaXJlY3RseS4KKwkgKi8KKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUo ZHNpLT5ncmZfY2xrKTsKKwlpZiAocmV0KSB7CisJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJG YWlsZWQgdG8gZW5hYmxlIGdyZl9jbGs6ICVkXG4iLCByZXQpOworCQlyZXR1cm47CisJfQorCisJ ZHdfbWlwaV9kc2lfcm9ja2NoaXBfY29uZmlnKGRzaSwgbXV4KTsKKworCWNsa19kaXNhYmxlX3Vu cHJlcGFyZShkc2ktPmdyZl9jbGspOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9lbmNv ZGVyX2Rpc2FibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBkd19t aXBpX2RzaV9yb2NrY2hpcCAqZHNpID0gdG9fZHNpKGVuY29kZXIpOworCisJcG1fcnVudGltZV9w dXQoZHNpLT5kZXYpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBl cl9mdW5jcworZHdfbWlwaV9kc2lfZW5jb2Rlcl9oZWxwZXJfZnVuY3MgPSB7CisJLmF0b21pY19j aGVjayA9IGR3X21pcGlfZHNpX2VuY29kZXJfYXRvbWljX2NoZWNrLAorCS5lbmFibGUgPSBkd19t aXBpX2RzaV9lbmNvZGVyX2VuYWJsZSwKKwkuZGlzYWJsZSA9IGR3X21pcGlfZHNpX2VuY29kZXJf ZGlzYWJsZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfZnVuY3MgZHdf bWlwaV9kc2lfZW5jb2Rlcl9mdW5jcyA9IHsKKwkuZGVzdHJveSA9IGRybV9lbmNvZGVyX2NsZWFu dXAsCit9OworCitzdGF0aWMgaW50IHJvY2tjaGlwX2RzaV9kcm1fY3JlYXRlX2VuY29kZXIoc3Ry dWN0IGR3X21pcGlfZHNpX3JvY2tjaGlwICpkc2ksCisJCQkJCSAgIHN0cnVjdCBkcm1fZGV2aWNl ICpkcm1fZGV2KQoreworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9ICZkc2ktPmVuY29k ZXI7CisJaW50IHJldDsKKworCWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gZHJtX29mX2ZpbmRf cG9zc2libGVfY3J0Y3MoZHJtX2RldiwKKwkJCQkJCQkgICAgIGRzaS0+ZGV2LT5vZl9ub2RlKTsK KworCXJldCA9IGRybV9lbmNvZGVyX2luaXQoZHJtX2RldiwgZW5jb2RlciwgJmR3X21pcGlfZHNp X2VuY29kZXJfZnVuY3MsCisJCQkgICAgICAgRFJNX01PREVfRU5DT0RFUl9EU0ksIE5VTEwpOwor CWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBlbmNvZGVyIHdp dGggZHJtXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRk KGVuY29kZXIsICZkd19taXBpX2RzaV9lbmNvZGVyX2hlbHBlcl9mdW5jcyk7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBkd19taXBpX2RzaV9yb2NrY2hpcF9iaW5kKHN0cnVjdCBkZXZp Y2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJCQkgICAgIHZvaWQg KmRhdGEpCit7CisJc3RydWN0IGR3X21pcGlfZHNpX3JvY2tjaGlwICpkc2kgPSBkZXZfZ2V0X2Ry dmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiA9IGRhdGE7CisJaW50IHJl dDsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPnBsbHJlZl9jbGspOworCWlmIChy ZXQpIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gZW5hYmxlIHBsbHJlZl9jbGs6 ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHJvY2tjaGlwX2RzaV9k cm1fY3JlYXRlX2VuY29kZXIoZHNpLCBkcm1fZGV2KTsKKwlpZiAocmV0KSB7CisJCURSTV9ERVZf RVJST1IoZGV2LCAiRmFpbGVkIHRvIGNyZWF0ZSBkcm0gZW5jb2RlclxuIik7CisJCXJldHVybiBy ZXQ7CisJfQorCisJcmV0ID0gZHdfbWlwaV9kc2lfYmluZChkc2ktPmRtZCwgJmRzaS0+ZW5jb2Rl cik7CisJaWYgKHJldCkgeworCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBiaW5kOiAl ZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IHZvaWQgZHdfbWlwaV9kc2lfcm9ja2NoaXBfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJ CQkJc3RydWN0IGRldmljZSAqbWFzdGVyLAorCQkJCQl2b2lkICpkYXRhKQoreworCXN0cnVjdCBk d19taXBpX2RzaV9yb2NrY2hpcCAqZHNpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlkd19t aXBpX2RzaV91bmJpbmQoZHNpLT5kbWQpOworCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+ cGxscmVmX2Nsayk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyBkd19t aXBpX2RzaV9yb2NrY2hpcF9vcHMgPSB7CisJLmJpbmQJPSBkd19taXBpX2RzaV9yb2NrY2hpcF9i aW5kLAorCS51bmJpbmQJPSBkd19taXBpX2RzaV9yb2NrY2hpcF91bmJpbmQsCit9OworCitzdGF0 aWMgaW50IGR3X21pcGlfZHNpX3JvY2tjaGlwX2hvc3RfYXR0YWNoKHZvaWQgKnByaXZfZGF0YSwK KwkJCQkJICAgIHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgZHdf bWlwaV9kc2lfcm9ja2NoaXAgKmRzaSA9IHByaXZfZGF0YTsKKwlpbnQgcmV0OworCisJcmV0ID0g Y29tcG9uZW50X2FkZChkc2ktPmRldiwgJmR3X21pcGlfZHNpX3JvY2tjaGlwX29wcyk7CisJaWYg KHJldCkgeworCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNv bXBvbmVudDogJWRcbiIsCisJCQkJCXJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfcm9ja2NoaXBfaG9zdF9kZXRhY2godm9p ZCAqcHJpdl9kYXRhLAorCQkJCQkgICAgc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZGV2aWNlKQor eworCXN0cnVjdCBkd19taXBpX2RzaV9yb2NrY2hpcCAqZHNpID0gcHJpdl9kYXRhOworCisJY29t cG9uZW50X2RlbChkc2ktPmRldiwgJmR3X21pcGlfZHNpX3JvY2tjaGlwX29wcyk7CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkd19taXBpX2RzaV9ob3N0X29wcyBkd19t aXBpX2RzaV9yb2NrY2hpcF9ob3N0X29wcyA9IHsKKwkuYXR0YWNoID0gZHdfbWlwaV9kc2lfcm9j a2NoaXBfaG9zdF9hdHRhY2gsCisJLmRldGFjaCA9IGR3X21pcGlfZHNpX3JvY2tjaGlwX2hvc3Rf ZGV0YWNoLAorfTsKKworc3RhdGljIGludCBkd19taXBpX2RzaV9yb2NrY2hpcF9wcm9iZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2 LT5kZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKKwlzdHJ1Y3Qg ZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRzaTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwljb25z dCBzdHJ1Y3Qgcm9ja2NoaXBfZHdfZHNpX2NoaXBfZGF0YSAqY2RhdGEgPQorCQkJCW9mX2Rldmlj ZV9nZXRfbWF0Y2hfZGF0YShkZXYpOworCWludCByZXQsIGk7CisKKwlkc2kgPSBkZXZtX2t6YWxs b2MoZGV2LCBzaXplb2YoKmRzaSksIEdGUF9LRVJORUwpOworCWlmICghZHNpKQorCQlyZXR1cm4g LUVOT01FTTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNF X01FTSwgMCk7CisJZHNpLT5iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsK KwlpZiAoSVNfRVJSKGRzaS0+YmFzZSkpIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJVbmFibGUg dG8gZ2V0IGRzaSByZWdpc3RlcnNcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkc2ktPmJhc2UpOwor CX0KKworCWkgPSAwOworCXdoaWxlIChjZGF0YVtpXS5yZWcpIHsKKwkJaWYgKGNkYXRhW2ldLnJl ZyA9PSByZXMtPnN0YXJ0KSB7CisJCQlkc2ktPmNkYXRhID0gJmNkYXRhW2ldOworCQkJYnJlYWs7 CisJCX0KKworCQlpKys7CisJfQorCisJaWYgKCFkc2ktPmNkYXRhKSB7CisJCWRldl9lcnIoZGV2 LCAibm8gZHNpLWNvbmZpZyBmb3IgJXMgbm9kZVxuIiwgbnAtPm5hbWUpOworCQlyZXR1cm4gLUVJ TlZBTDsKKwl9CisKKwlkc2ktPnBsbHJlZl9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAicmVmIik7 CisJaWYgKElTX0VSUihkc2ktPnBsbHJlZl9jbGspKSB7CisJCXJldCA9IFBUUl9FUlIoZHNpLT5w bGxyZWZfY2xrKTsKKwkJRFJNX0RFVl9FUlJPUihkZXYsCisJCQkgICAgICAiVW5hYmxlIHRvIGdl dCBwbGwgcmVmZXJlbmNlIGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisK KwlpZiAoZHNpLT5jZGF0YS0+ZmxhZ3MgJiBEV19NSVBJX05FRURTX1BIWV9DRkdfQ0xLKSB7CisJ CWRzaS0+cGh5X2NmZ19jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAicGh5X2NmZyIpOworCQlpZiAo SVNfRVJSKGRzaS0+cGh5X2NmZ19jbGspKSB7CisJCQlyZXQgPSBQVFJfRVJSKGRzaS0+cGh5X2Nm Z19jbGspOworCQkJRFJNX0RFVl9FUlJPUihkZXYsCisJCQkJICAgICAgIlVuYWJsZSB0byBnZXQg cGh5X2NmZ19jbGs6ICVkXG4iLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCWlm IChkc2ktPmNkYXRhLT5mbGFncyAmIERXX01JUElfTkVFRFNfR1JGX0NMSykgeworCQlkc2ktPmdy Zl9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAiZ3JmIik7CisJCWlmIChJU19FUlIoZHNpLT5ncmZf Y2xrKSkgeworCQkJcmV0ID0gUFRSX0VSUihkc2ktPmdyZl9jbGspOworCQkJRFJNX0RFVl9FUlJP UihkZXYsICJVbmFibGUgdG8gZ2V0IGdyZl9jbGs6ICVkXG4iLCByZXQpOworCQkJcmV0dXJuIHJl dDsKKwkJfQorCX0KKworCWRzaS0+Z3JmX3JlZ21hcCA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5 X3BoYW5kbGUobnAsICJyb2NrY2hpcCxncmYiKTsKKwlpZiAoSVNfRVJSKGRzaS0+Z3JmX3JlZ21h cCkpIHsKKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIlVuYWJsZSB0byBnZXQgcm9ja2NoaXAs Z3JmXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZHNpLT5ncmZfcmVnbWFwKTsKKwl9CisKKwlkc2kt PmRldiA9IGRldjsKKwlkc2ktPnBkYXRhLmJhc2UgPSBkc2ktPmJhc2U7CisJZHNpLT5wZGF0YS5t YXhfZGF0YV9sYW5lcyA9IGRzaS0+Y2RhdGEtPm1heF9kYXRhX2xhbmVzOworCWRzaS0+cGRhdGEu cGh5X29wcyA9ICZkd19taXBpX2RzaV9yb2NrY2hpcF9waHlfb3BzOworCWRzaS0+cGRhdGEuaG9z dF9vcHMgPSAmZHdfbWlwaV9kc2lfcm9ja2NoaXBfaG9zdF9vcHM7CisJZHNpLT5wZGF0YS5wcml2 X2RhdGEgPSBkc2k7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHNpKTsKKworCWRzaS0+ ZG1kID0gZHdfbWlwaV9kc2lfcHJvYmUocGRldiwgJmRzaS0+cGRhdGEpOworCWlmIChJU19FUlIo ZHNpLT5kbWQpKSB7CisJCXJldCA9IFBUUl9FUlIoZHNpLT5kbWQpOworCQlpZiAocmV0ICE9IC1F UFJPQkVfREVGRVIpCisJCQlEUk1fREVWX0VSUk9SKGRldiwKKwkJCQkgICAgICAiRmFpbGVkIHRv IHByb2JlIGR3X21pcGlfZHNpOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfY2xrZGlzYWJsZTsK Kwl9CisKKwlyZXR1cm4gMDsKKworZXJyX2Nsa2Rpc2FibGU6CisJY2xrX2Rpc2FibGVfdW5wcmVw YXJlKGRzaS0+cGxscmVmX2Nsayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkd19t aXBpX2RzaV9yb2NrY2hpcF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sK KwlzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRzaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRh KHBkZXYpOworCisJZHdfbWlwaV9kc2lfcmVtb3ZlKGRzaS0+ZG1kKTsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHJvY2tjaGlwX2R3X2RzaV9jaGlwX2RhdGEgcmszMjg4 X2NoaXBfZGF0YVtdID0geworCXsKKwkJLnJlZyA9IDB4ZmY5NjAwMDAsCisJCS5sY2RzZWxfZ3Jm X3JlZyA9IFJLMzI4OF9HUkZfU09DX0NPTjYsCisJCS5sY2RzZWxfYmlnID0gSElXT1JEX1VQREFU RSgwLCBSSzMyODhfRFNJMF9MQ0RDX1NFTCksCisJCS5sY2RzZWxfbGl0ID0gSElXT1JEX1VQREFU RShSSzMyODhfRFNJMF9MQ0RDX1NFTCwgUkszMjg4X0RTSTBfTENEQ19TRUwpLAorCisJCS5tYXhf ZGF0YV9sYW5lcyA9IDQsCisJfSwKKwl7CisJCS5yZWcgPSAweGZmOTY0MDAwLAorCQkubGNkc2Vs X2dyZl9yZWcgPSBSSzMyODhfR1JGX1NPQ19DT042LAorCQkubGNkc2VsX2JpZyA9IEhJV09SRF9V UERBVEUoMCwgUkszMjg4X0RTSTFfTENEQ19TRUwpLAorCQkubGNkc2VsX2xpdCA9IEhJV09SRF9V UERBVEUoUkszMjg4X0RTSTFfTENEQ19TRUwsIFJLMzI4OF9EU0kxX0xDRENfU0VMKSwKKworCQku bWF4X2RhdGFfbGFuZXMgPSA0LAorCX0sCisJeyAvKiBzZW50aW5lbCAqLyB9Cit9OworCitzdGF0 aWMgY29uc3Qgc3RydWN0IHJvY2tjaGlwX2R3X2RzaV9jaGlwX2RhdGEgcmszMzk5X2NoaXBfZGF0 YVtdID0geworCXsKKwkJLnJlZyA9IDB4ZmY5NjAwMDAsCisJCS5sY2RzZWxfZ3JmX3JlZyA9IFJL MzM5OV9HUkZfU09DX0NPTjIwLAorCQkubGNkc2VsX2JpZyA9IEhJV09SRF9VUERBVEUoMCwgUksz Mzk5X0RTSTBfTENEQ19TRUwpLAorCQkubGNkc2VsX2xpdCA9IEhJV09SRF9VUERBVEUoUkszMzk5 X0RTSTBfTENEQ19TRUwsCisJCQkJCSAgICBSSzMzOTlfRFNJMF9MQ0RDX1NFTCksCisKKwkJLmxh bmVjZmcxX2dyZl9yZWcgPSBSSzMzOTlfR1JGX1NPQ19DT04yMiwKKwkJLmxhbmVjZmcxID0gSElX T1JEX1VQREFURSgwLCBSSzMzOTlfRFNJMF9UVVJOUkVRVUVTVCB8CisJCQkJCSAgICAgUkszMzk5 X0RTSTBfVFVSTkRJU0FCTEUgfAorCQkJCQkgICAgIFJLMzM5OV9EU0kwX0ZPUkNFVFhTVE9QTU9E RSB8CisJCQkJCSAgICAgUkszMzk5X0RTSTBfRk9SQ0VSWE1PREUpLAorCisJCS5mbGFncyA9IERX X01JUElfTkVFRFNfUEhZX0NGR19DTEsgfCBEV19NSVBJX05FRURTX0dSRl9DTEssCisJCS5tYXhf ZGF0YV9sYW5lcyA9IDQsCisJfSwKKwl7CisJCS5yZWcgPSAweGZmOTY4MDAwLAorCQkubGNkc2Vs X2dyZl9yZWcgPSBSSzMzOTlfR1JGX1NPQ19DT04yMCwKKwkJLmxjZHNlbF9iaWcgPSBISVdPUkRf VVBEQVRFKDAsIFJLMzM5OV9EU0kxX0xDRENfU0VMKSwKKwkJLmxjZHNlbF9saXQgPSBISVdPUkRf VVBEQVRFKFJLMzM5OV9EU0kxX0xDRENfU0VMLAorCQkJCQkgICAgUkszMzk5X0RTSTFfTENEQ19T RUwpLAorCisJCS5sYW5lY2ZnMV9ncmZfcmVnID0gUkszMzk5X0dSRl9TT0NfQ09OMjMsCisJCS5s YW5lY2ZnMSA9IEhJV09SRF9VUERBVEUoMCwgUkszMzk5X0RTSTFfVFVSTkRJU0FCTEUgfAorCQkJ CQkgICAgIFJLMzM5OV9EU0kxX0ZPUkNFVFhTVE9QTU9ERSB8CisJCQkJCSAgICAgUkszMzk5X0RT STFfRk9SQ0VSWE1PREUgfAorCQkJCQkgICAgIFJLMzM5OV9EU0kxX0VOQUJMRSksCisKKwkJLmxh bmVjZmcyX2dyZl9yZWcgPSBSSzMzOTlfR1JGX1NPQ19DT04yNCwKKwkJLmxhbmVjZmcyID0gSElX T1JEX1VQREFURShSSzMzOTlfVFhSWF9NQVNURVJTTEFWRVogfAorCQkJCQkgIFJLMzM5OV9UWFJY X0VOQUJMRUNMSywKKwkJCQkJICBSSzMzOTlfVFhSWF9NQVNURVJTTEFWRVogfAorCQkJCQkgIFJL MzM5OV9UWFJYX0VOQUJMRUNMSyB8CisJCQkJCSAgUkszMzk5X1RYUlhfQkFTRURJUiksCisKKwkJ LmVuYWJsZV9ncmZfcmVnID0gUkszMzk5X0dSRl9TT0NfQ09OMjMsCisJCS5lbmFibGUgPSBISVdP UkRfVVBEQVRFKFJLMzM5OV9EU0kxX0VOQUJMRSwgUkszMzk5X0RTSTFfRU5BQkxFKSwKKworCQku ZmxhZ3MgPSBEV19NSVBJX05FRURTX1BIWV9DRkdfQ0xLIHwgRFdfTUlQSV9ORUVEU19HUkZfQ0xL LAorCQkubWF4X2RhdGFfbGFuZXMgPSA0LAorCX0sCisJeyAvKiBzZW50aW5lbCAqLyB9Cit9Owor CitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBkd19taXBpX2RzaV9yb2NrY2hpcF9k dF9pZHNbXSA9IHsKKwl7CisJIC5jb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzI4OC1taXBpLWRz aSIsCisJIC5kYXRhID0gJnJrMzI4OF9jaGlwX2RhdGEsCisJfSwgeworCSAuY29tcGF0aWJsZSA9 ICJyb2NrY2hpcCxyazMzOTktbWlwaS1kc2kiLAorCSAuZGF0YSA9ICZyazMzOTlfY2hpcF9kYXRh LAorCX0sCisJeyAvKiBzZW50aW5lbCAqLyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwg ZHdfbWlwaV9kc2lfcm9ja2NoaXBfZHRfaWRzKTsKKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBk d19taXBpX2RzaV9yb2NrY2hpcF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IGR3X21pcGlfZHNpX3Jv Y2tjaGlwX3Byb2JlLAorCS5yZW1vdmUJCT0gZHdfbWlwaV9kc2lfcm9ja2NoaXBfcmVtb3ZlLAor CS5kcml2ZXIJCT0geworCQkub2ZfbWF0Y2hfdGFibGUgPSBkd19taXBpX2RzaV9yb2NrY2hpcF9k dF9pZHMsCisJCS5uYW1lCT0gImR3LW1pcGktZHNpLXJvY2tjaGlwIiwKKwl9LAorfTsKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9kdy1taXBpLWRzaS5jIGIvZHJpdmVycy9n cHUvZHJtL3JvY2tjaGlwL2R3LW1pcGktZHNpLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDY2MmI2Y2I1ZDNmMC4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yb2Nr Y2hpcC9kdy1taXBpLWRzaS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTM0OSArMCwwIEBACi0vKgot ICogQ29weXJpZ2h0IChjKSAyMDE2LCBGdXpob3UgUm9ja2NoaXAgRWxlY3Ryb25pY3MgQ28uLCBM dGQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0jaW5jbHVkZSA8bGludXgv Y2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW9w b2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxl Lmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcG1fcnVu dGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgotI2luY2x1ZGUgPGxpbnV4L3Jlc2V0 Lmg+Ci0jaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgotI2luY2x1ZGUgPGRybS9kcm1fYXRv bWljX2hlbHBlci5oPgotI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgotI2luY2x1ZGUgPGRybS9k cm1fY3J0Y19oZWxwZXIuaD4KLSNpbmNsdWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+Ci0jaW5jbHVk ZSA8ZHJtL2RybV9vZi5oPgotI2luY2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4KLSNpbmNsdWRlIDxk cm0vZHJtUC5oPgotI2luY2x1ZGUgPHZpZGVvL21pcGlfZGlzcGxheS5oPgotCi0jaW5jbHVkZSAi cm9ja2NoaXBfZHJtX2Rydi5oIgotI2luY2x1ZGUgInJvY2tjaGlwX2RybV92b3AuaCIKLQotI2Rl ZmluZSBEUklWRVJfTkFNRSAgICAiZHctbWlwaS1kc2kiCi0KLSNkZWZpbmUgUkszMjg4X0dSRl9T T0NfQ09ONgkJMHgwMjVjCi0jZGVmaW5lIFJLMzI4OF9EU0kwX1NFTF9WT1BfTElUCQlCSVQoNikK LSNkZWZpbmUgUkszMjg4X0RTSTFfU0VMX1ZPUF9MSVQJCUJJVCg5KQotCi0jZGVmaW5lIFJLMzM5 OV9HUkZfU09DX0NPTjIwCQkweDYyNTAKLSNkZWZpbmUgUkszMzk5X0RTSTBfU0VMX1ZPUF9MSVQJ CUJJVCgwKQotI2RlZmluZSBSSzMzOTlfRFNJMV9TRUxfVk9QX0xJVAkJQklUKDQpCi0KLS8qIGRp c2FibGUgdHVybnJlcXVlc3QsIHR1cm5kaXNhYmxlLCBmb3JjZXR4c3RvcG1vZGUsIGZvcmNlcnht b2RlICovCi0jZGVmaW5lIFJLMzM5OV9HUkZfU09DX0NPTjIyCQkweDYyNTgKLSNkZWZpbmUgUksz Mzk5X0dSRl9EU0lfTU9ERQkJMHhmZmZmMDAwMAotCi0jZGVmaW5lIERTSV9WRVJTSU9OCQkJMHgw MAotI2RlZmluZSBEU0lfUFdSX1VQCQkJMHgwNAotI2RlZmluZSBSRVNFVAkJCQkwCi0jZGVmaW5l IFBPV0VSVVAJCQkJQklUKDApCi0KLSNkZWZpbmUgRFNJX0NMS01HUl9DRkcJCQkweDA4Ci0jZGVm aW5lIFRPX0NMS19ESVZJRFNJT04oZGl2KQkJKCgoZGl2KSAmIDB4ZmYpIDw8IDgpCi0jZGVmaW5l IFRYX0VTQ19DTEtfRElWSURTSU9OKGRpdikJKCgoZGl2KSAmIDB4ZmYpIDw8IDApCi0KLSNkZWZp bmUgRFNJX0RQSV9WQ0lECQkJMHgwYwotI2RlZmluZSBEUElfVklEKHZpZCkJCQkoKCh2aWQpICYg MHgzKSA8PCAwKQotCi0jZGVmaW5lIERTSV9EUElfQ09MT1JfQ09ESU5HCQkweDEwCi0jZGVmaW5l IEVOMThfTE9PU0VMWQkJCUJJVCg4KQotI2RlZmluZSBEUElfQ09MT1JfQ09ESU5HXzE2QklUXzEJ MHgwCi0jZGVmaW5lIERQSV9DT0xPUl9DT0RJTkdfMTZCSVRfMgkweDEKLSNkZWZpbmUgRFBJX0NP TE9SX0NPRElOR18xNkJJVF8zCTB4MgotI2RlZmluZSBEUElfQ09MT1JfQ09ESU5HXzE4QklUXzEJ MHgzCi0jZGVmaW5lIERQSV9DT0xPUl9DT0RJTkdfMThCSVRfMgkweDQKLSNkZWZpbmUgRFBJX0NP TE9SX0NPRElOR18yNEJJVAkJMHg1Ci0KLSNkZWZpbmUgRFNJX0RQSV9DRkdfUE9MCQkJMHgxNAot I2RlZmluZSBDT0xPUk1fQUNUSVZFX0xPVwkJQklUKDQpCi0jZGVmaW5lIFNIVVREX0FDVElWRV9M T1cJCUJJVCgzKQotI2RlZmluZSBIU1lOQ19BQ1RJVkVfTE9XCQlCSVQoMikKLSNkZWZpbmUgVlNZ TkNfQUNUSVZFX0xPVwkJQklUKDEpCi0jZGVmaW5lIERBVEFFTl9BQ1RJVkVfTE9XCQlCSVQoMCkK LQotI2RlZmluZSBEU0lfRFBJX0xQX0NNRF9USU0JCTB4MTgKLSNkZWZpbmUgT1VUVkFDVF9MUENN RF9USU1FKHApCQkoKChwKSAmIDB4ZmYpIDw8IDE2KQotI2RlZmluZSBJTlZBQ1RfTFBDTURfVElN RShwKQkJKChwKSAmIDB4ZmYpCi0KLSNkZWZpbmUgRFNJX0RCSV9DRkcJCQkweDIwCi0jZGVmaW5l IERTSV9EQklfQ01EU0laRQkJCTB4MjgKLQotI2RlZmluZSBEU0lfUENLSERMX0NGRwkJCTB4MmMK LSNkZWZpbmUgRU5fQ1JDX1JYCQkJQklUKDQpCi0jZGVmaW5lIEVOX0VDQ19SWAkJCUJJVCgzKQot I2RlZmluZSBFTl9CVEEJCQkJQklUKDIpCi0jZGVmaW5lIEVOX0VPVFBfUlgJCQlCSVQoMSkKLSNk ZWZpbmUgRU5fRU9UUF9UWAkJCUJJVCgwKQotCi0jZGVmaW5lIERTSV9NT0RFX0NGRwkJCTB4MzQK LSNkZWZpbmUgRU5BQkxFX1ZJREVPX01PREUJCTAKLSNkZWZpbmUgRU5BQkxFX0NNRF9NT0RFCQkJ QklUKDApCi0KLSNkZWZpbmUgRFNJX1ZJRF9NT0RFX0NGRwkJMHgzOAotI2RlZmluZSBGUkFNRV9C VEFfQUNLCQkJQklUKDE0KQotI2RlZmluZSBFTkFCTEVfTE9XX1BPV0VSCQkoMHgzZiA8PCA4KQot I2RlZmluZSBFTkFCTEVfTE9XX1BPV0VSX01BU0sJCSgweDNmIDw8IDgpCi0jZGVmaW5lIFZJRF9N T0RFX1RZUEVfTk9OX0JVUlNUX1NZTkNfUFVMU0VTCTB4MAotI2RlZmluZSBWSURfTU9ERV9UWVBF X05PTl9CVVJTVF9TWU5DX0VWRU5UUwkweDEKLSNkZWZpbmUgVklEX01PREVfVFlQRV9CVVJTVAkJ CTB4MgotI2RlZmluZSBWSURfTU9ERV9UWVBFX01BU0sJCQkweDMKLQotI2RlZmluZSBEU0lfVklE X1BLVF9TSVpFCQkweDNjCi0jZGVmaW5lIFZJRF9QS1RfU0laRShwKQkJCSgoKHApICYgMHgzZmZm KSA8PCAwKQotI2RlZmluZSBWSURfUEtUX01BWF9TSVpFCQkweDNmZmYKLQotI2RlZmluZSBEU0lf VklEX0hTQV9USU1FCQkweDQ4Ci0jZGVmaW5lIERTSV9WSURfSEJQX1RJTUUJCTB4NGMKLSNkZWZp bmUgRFNJX1ZJRF9ITElORV9USU1FCQkweDUwCi0jZGVmaW5lIERTSV9WSURfVlNBX0xJTkVTCQkw eDU0Ci0jZGVmaW5lIERTSV9WSURfVkJQX0xJTkVTCQkweDU4Ci0jZGVmaW5lIERTSV9WSURfVkZQ X0xJTkVTCQkweDVjCi0jZGVmaW5lIERTSV9WSURfVkFDVElWRV9MSU5FUwkJMHg2MAotI2RlZmlu ZSBEU0lfQ01EX01PREVfQ0ZHCQkweDY4Ci0jZGVmaW5lIE1BWF9SRF9QS1RfU0laRV9MUAkJQklU KDI0KQotI2RlZmluZSBEQ1NfTFdfVFhfTFAJCQlCSVQoMTkpCi0jZGVmaW5lIERDU19TUl8wUF9U WF9MUAkJCUJJVCgxOCkKLSNkZWZpbmUgRENTX1NXXzFQX1RYX0xQCQkJQklUKDE3KQotI2RlZmlu ZSBEQ1NfU1dfMFBfVFhfTFAJCQlCSVQoMTYpCi0jZGVmaW5lIEdFTl9MV19UWF9MUAkJCUJJVCgx NCkKLSNkZWZpbmUgR0VOX1NSXzJQX1RYX0xQCQkJQklUKDEzKQotI2RlZmluZSBHRU5fU1JfMVBf VFhfTFAJCQlCSVQoMTIpCi0jZGVmaW5lIEdFTl9TUl8wUF9UWF9MUAkJCUJJVCgxMSkKLSNkZWZp bmUgR0VOX1NXXzJQX1RYX0xQCQkJQklUKDEwKQotI2RlZmluZSBHRU5fU1dfMVBfVFhfTFAJCQlC SVQoOSkKLSNkZWZpbmUgR0VOX1NXXzBQX1RYX0xQCQkJQklUKDgpCi0jZGVmaW5lIEVOX0FDS19S UVNUCQkJQklUKDEpCi0jZGVmaW5lIEVOX1RFQVJfRlgJCQlCSVQoMCkKLQotI2RlZmluZSBDTURf TU9ERV9BTExfTFAJCQkoTUFYX1JEX1BLVF9TSVpFX0xQIHwgXAotCQkJCQkgRENTX0xXX1RYX0xQ IHwgXAotCQkJCQkgRENTX1NSXzBQX1RYX0xQIHwgXAotCQkJCQkgRENTX1NXXzFQX1RYX0xQIHwg XAotCQkJCQkgRENTX1NXXzBQX1RYX0xQIHwgXAotCQkJCQkgR0VOX0xXX1RYX0xQIHwgXAotCQkJ CQkgR0VOX1NSXzJQX1RYX0xQIHwgXAotCQkJCQkgR0VOX1NSXzFQX1RYX0xQIHwgXAotCQkJCQkg R0VOX1NSXzBQX1RYX0xQIHwgXAotCQkJCQkgR0VOX1NXXzJQX1RYX0xQIHwgXAotCQkJCQkgR0VO X1NXXzFQX1RYX0xQIHwgXAotCQkJCQkgR0VOX1NXXzBQX1RYX0xQKQotCi0jZGVmaW5lIERTSV9H RU5fSERSCQkJMHg2YwotI2RlZmluZSBHRU5fSERBVEEoZGF0YSkJCQkoKChkYXRhKSAmIDB4ZmZm ZikgPDwgOCkKLSNkZWZpbmUgR0VOX0hEQVRBX01BU0sJCQkoMHhmZmZmIDw8IDgpCi0jZGVmaW5l IEdFTl9IVFlQRSh0eXBlKQkJCSgoKHR5cGUpICYgMHhmZikgPDwgMCkKLSNkZWZpbmUgR0VOX0hU WVBFX01BU0sJCQkweGZmCi0KLSNkZWZpbmUgRFNJX0dFTl9QTERfREFUQQkJMHg3MAotCi0jZGVm aW5lIERTSV9DTURfUEtUX1NUQVRVUwkJMHg3NAotI2RlZmluZSBHRU5fQ01EX0VNUFRZCQkJQklU KDApCi0jZGVmaW5lIEdFTl9DTURfRlVMTAkJCUJJVCgxKQotI2RlZmluZSBHRU5fUExEX1dfRU1Q VFkJCQlCSVQoMikKLSNkZWZpbmUgR0VOX1BMRF9XX0ZVTEwJCQlCSVQoMykKLSNkZWZpbmUgR0VO X1BMRF9SX0VNUFRZCQkJQklUKDQpCi0jZGVmaW5lIEdFTl9QTERfUl9GVUxMCQkJQklUKDUpCi0j ZGVmaW5lIEdFTl9SRF9DTURfQlVTWQkJCUJJVCg2KQotCi0jZGVmaW5lIERTSV9UT19DTlRfQ0ZH CQkJMHg3OAotI2RlZmluZSBIU1RYX1RPX0NOVChwKQkJCSgoKHApICYgMHhmZmZmKSA8PCAxNikK LSNkZWZpbmUgTFBSWF9UT19DTlQocCkJCQkoKHApICYgMHhmZmZmKQotCi0jZGVmaW5lIERTSV9C VEFfVE9fQ05UCQkJMHg4YwotI2RlZmluZSBEU0lfTFBDTEtfQ1RSTAkJCTB4OTQKLSNkZWZpbmUg QVVUT19DTEtMQU5FX0NUUkwJCUJJVCgxKQotI2RlZmluZSBQSFlfVFhSRVFVRVNUQ0xLSFMJCUJJ VCgwKQotCi0jZGVmaW5lIERTSV9QSFlfVE1SX0xQQ0xLX0NGRwkJMHg5OAotI2RlZmluZSBQSFlf Q0xLSFMyTFBfVElNRShsYmNjKQkJKCgobGJjYykgJiAweDNmZikgPDwgMTYpCi0jZGVmaW5lIFBI WV9DTEtMUDJIU19USU1FKGxiY2MpCQkoKGxiY2MpICYgMHgzZmYpCi0KLSNkZWZpbmUgRFNJX1BI WV9UTVJfQ0ZHCQkJMHg5YwotI2RlZmluZSBQSFlfSFMyTFBfVElNRShsYmNjKQkJKCgobGJjYykg JiAweGZmKSA8PCAyNCkKLSNkZWZpbmUgUEhZX0xQMkhTX1RJTUUobGJjYykJCSgoKGxiY2MpICYg MHhmZikgPDwgMTYpCi0jZGVmaW5lIE1BWF9SRF9USU1FKGxiY2MpCQkoKGxiY2MpICYgMHg3ZmZm KQotCi0jZGVmaW5lIERTSV9QSFlfUlNUWgkJCTB4YTAKLSNkZWZpbmUgUEhZX0RJU0ZPUkNFUExM CQkJMAotI2RlZmluZSBQSFlfRU5GT1JDRVBMTAkJCUJJVCgzKQotI2RlZmluZSBQSFlfRElTQUJM RUNMSwkJCTAKLSNkZWZpbmUgUEhZX0VOQUJMRUNMSwkJCUJJVCgyKQotI2RlZmluZSBQSFlfUlNU WgkJCTAKLSNkZWZpbmUgUEhZX1VOUlNUWgkJCUJJVCgxKQotI2RlZmluZSBQSFlfU0hVVERPV05a CQkJMAotI2RlZmluZSBQSFlfVU5TSFVURE9XTloJCQlCSVQoMCkKLQotI2RlZmluZSBEU0lfUEhZ X0lGX0NGRwkJCTB4YTQKLSNkZWZpbmUgTl9MQU5FUyhuKQkJCSgoKChuKSAtIDEpICYgMHgzKSA8 PCAwKQotI2RlZmluZSBQSFlfU1RPUF9XQUlUX1RJTUUoY3ljbGUpCSgoKGN5Y2xlKSAmIDB4ZmYp IDw8IDgpCi0KLSNkZWZpbmUgRFNJX1BIWV9TVEFUVVMJCQkweGIwCi0jZGVmaW5lIExPQ0sJCQkJ QklUKDApCi0jZGVmaW5lIFNUT1BfU1RBVEVfQ0xLX0xBTkUJCUJJVCgyKQotCi0jZGVmaW5lIERT SV9QSFlfVFNUX0NUUkwwCQkweGI0Ci0jZGVmaW5lIFBIWV9URVNUQ0xLCQkJQklUKDEpCi0jZGVm aW5lIFBIWV9VTlRFU1RDTEsJCQkwCi0jZGVmaW5lIFBIWV9URVNUQ0xSCQkJQklUKDApCi0jZGVm aW5lIFBIWV9VTlRFU1RDTFIJCQkwCi0KLSNkZWZpbmUgRFNJX1BIWV9UU1RfQ1RSTDEJCTB4YjgK LSNkZWZpbmUgUEhZX1RFU1RFTgkJCUJJVCgxNikKLSNkZWZpbmUgUEhZX1VOVEVTVEVOCQkJMAot I2RlZmluZSBQSFlfVEVTVERPVVQobikJCQkoKChuKSAmIDB4ZmYpIDw8IDgpCi0jZGVmaW5lIFBI WV9URVNURElOKG4pCQkJKCgobikgJiAweGZmKSA8PCAwKQotCi0jZGVmaW5lIERTSV9JTlRfU1Qw CQkJMHhiYwotI2RlZmluZSBEU0lfSU5UX1NUMQkJCTB4YzAKLSNkZWZpbmUgRFNJX0lOVF9NU0sw CQkJMHhjNAotI2RlZmluZSBEU0lfSU5UX01TSzEJCQkweGM4Ci0KLSNkZWZpbmUgUEhZX1NUQVRV U19USU1FT1VUX1VTCQkxMDAwMAotI2RlZmluZSBDTURfUEtUX1NUQVRVU19USU1FT1VUX1VTCTIw MDAwCi0KLSNkZWZpbmUgQllQQVNTX1ZDT19SQU5HRQlCSVQoNykKLSNkZWZpbmUgVkNPX1JBTkdF X0NPTl9TRUwodmFsKQkoKCh2YWwpICYgMHg3KSA8PCAzKQotI2RlZmluZSBWQ09fSU5fQ0FQX0NP Tl9ERUZBVUxUCSgweDAgPDwgMSkKLSNkZWZpbmUgVkNPX0lOX0NBUF9DT05fTE9XCSgweDEgPDwg MSkKLSNkZWZpbmUgVkNPX0lOX0NBUF9DT05fSElHSAkoMHgyIDw8IDEpCi0jZGVmaW5lIFJFRl9C SUFTX0NVUl9TRUwJQklUKDApCi0KLSNkZWZpbmUgQ1BfQ1VSUkVOVF8zTUEJCUJJVCgzKQotI2Rl ZmluZSBDUF9QUk9HUkFNX0VOCQlCSVQoNykKLSNkZWZpbmUgTFBGX1BST0dSQU1fRU4JCUJJVCg2 KQotI2RlZmluZSBMUEZfUkVTSVNUT1JTXzIwX0tPSE0JMAotCi0jZGVmaW5lIEhTRlJFUVJBTkdF X1NFTCh2YWwpCSgoKHZhbCkgJiAweDNmKSA8PCAxKQotCi0jZGVmaW5lIElOUFVUX0RJVklERVIo dmFsKQkoKCh2YWwpIC0gMSkgJiAweDdmKQotI2RlZmluZSBMT1dfUFJPR1JBTV9FTgkJMAotI2Rl ZmluZSBISUdIX1BST0dSQU1fRU4JCUJJVCg3KQotI2RlZmluZSBMT09QX0RJVl9MT1dfU0VMKHZh bCkJKCgodmFsKSAtIDEpICYgMHgxZikKLSNkZWZpbmUgTE9PUF9ESVZfSElHSF9TRUwodmFsKQko KCgodmFsKSAtIDEpID4+IDUpICYgMHgxZikKLSNkZWZpbmUgUExMX0xPT1BfRElWX0VOCQlCSVQo NSkKLSNkZWZpbmUgUExMX0lOUFVUX0RJVl9FTglCSVQoNCkKLQotI2RlZmluZSBQT1dFUl9DT05U Uk9MCQlCSVQoNikKLSNkZWZpbmUgSU5URVJOQUxfUkVHX0NVUlJFTlQJQklUKDMpCi0jZGVmaW5l IEJJQVNfQkxPQ0tfT04JCUJJVCgyKQotI2RlZmluZSBCQU5ER0FQX09OCQlCSVQoMCkKLQotI2Rl ZmluZSBURVJfUkVTSVNUT1JfSElHSAlCSVQoNykKLSNkZWZpbmUJVEVSX1JFU0lTVE9SX0xPVwkw Ci0jZGVmaW5lIExFVkVMX1NISUZURVJTX09OCUJJVCg2KQotI2RlZmluZSBURVJfQ0FMX0RPTkUJ CUJJVCg1KQotI2RlZmluZSBTRVRSRF9NQVgJCSgweDcgPDwgMikKLSNkZWZpbmUgUE9XRVJfTUFO QUdFCQlCSVQoMSkKLSNkZWZpbmUgVEVSX1JFU0lTVE9SU19PTglCSVQoMCkKLQotI2RlZmluZSBC SUFTRVhUUl9TRUwodmFsKQkoKHZhbCkgJiAweDcpCi0jZGVmaW5lIEJBTkRHQVBfU0VMKHZhbCkJ KCh2YWwpICYgMHg3KQotI2RlZmluZSBUTFBfUFJPR1JBTV9FTgkJQklUKDcpCi0jZGVmaW5lIFRI U19QUkVfUFJPR1JBTV9FTglCSVQoNykKLSNkZWZpbmUgVEhTX1pFUk9fUFJPR1JBTV9FTglCSVQo NikKLQotI2RlZmluZSBEV19NSVBJX05FRURTX1BIWV9DRkdfQ0xLCUJJVCgwKQotI2RlZmluZSBE V19NSVBJX05FRURTX0dSRl9DTEsJCUJJVCgxKQotCi1lbnVtIHsKLQlCQU5ER0FQXzk3XzA3LAot CUJBTkRHQVBfOThfMDUsCi0JQkFOREdBUF85OV8wMiwKLQlCQU5ER0FQXzEwMF8wMCwKLQlCQU5E R0FQXzkzXzE3LAotCUJBTkRHQVBfOTRfMTUsCi0JQkFOREdBUF85NV8xMiwKLQlCQU5ER0FQXzk2 XzEwLAotfTsKLQotZW51bSB7Ci0JQklBU0VYVFJfODdfMSwKLQlCSUFTRVhUUl85MV81LAotCUJJ QVNFWFRSXzk1XzksCi0JQklBU0VYVFJfMTAwLAotCUJJQVNFWFRSXzEwNV85NCwKLQlCSUFTRVhU Ul8xMTFfODgsCi0JQklBU0VYVFJfMTE4XzgsCi0JQklBU0VYVFJfMTI3XzcsCi19OwotCi1zdHJ1 Y3QgZHdfbWlwaV9kc2lfcGxhdF9kYXRhIHsKLQl1MzIgZHNpMF9lbl9iaXQ7Ci0JdTMyIGRzaTFf ZW5fYml0OwotCXUzMiBncmZfc3dpdGNoX3JlZzsKLQl1MzIgZ3JmX2RzaTBfbW9kZTsKLQl1MzIg Z3JmX2RzaTBfbW9kZV9yZWc7Ci0JdW5zaWduZWQgaW50IGZsYWdzOwotCXVuc2lnbmVkIGludCBt YXhfZGF0YV9sYW5lczsKLX07Ci0KLXN0cnVjdCBkd19taXBpX2RzaSB7Ci0Jc3RydWN0IGRybV9l bmNvZGVyIGVuY29kZXI7Ci0Jc3RydWN0IGRybV9jb25uZWN0b3IgY29ubmVjdG9yOwotCXN0cnVj dCBtaXBpX2RzaV9ob3N0IGRzaV9ob3N0OwotCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsOwotCXN0 cnVjdCBkZXZpY2UgKmRldjsKLQlzdHJ1Y3QgcmVnbWFwICpncmZfcmVnbWFwOwotCXZvaWQgX19p b21lbSAqYmFzZTsKLQotCXN0cnVjdCBjbGsgKmdyZl9jbGs7Ci0Jc3RydWN0IGNsayAqcGxscmVm X2NsazsKLQlzdHJ1Y3QgY2xrICpwY2xrOwotCXN0cnVjdCBjbGsgKnBoeV9jZmdfY2xrOwotCi0J aW50IGRwbXNfbW9kZTsKLQl1bnNpZ25lZCBpbnQgbGFuZV9tYnBzOyAvKiBwZXIgbGFuZSAqLwot CXUzMiBjaGFubmVsOwotCXUzMiBsYW5lczsKLQl1MzIgZm9ybWF0OwotCXUxNiBpbnB1dF9kaXY7 Ci0JdTE2IGZlZWRiYWNrX2RpdjsKLQl1bnNpZ25lZCBsb25nIG1vZGVfZmxhZ3M7Ci0KLQljb25z dCBzdHJ1Y3QgZHdfbWlwaV9kc2lfcGxhdF9kYXRhICpwZGF0YTsKLX07Ci0KLWVudW0gZHdfbWlw aV9kc2lfbW9kZSB7Ci0JRFdfTUlQSV9EU0lfQ01EX01PREUsCi0JRFdfTUlQSV9EU0lfVklEX01P REUsCi19OwotCi1zdHJ1Y3QgZHBoeV9wbGxfdGVzdGRpbl9tYXAgewotCXVuc2lnbmVkIGludCBt YXhfbWJwczsKLQl1OCB0ZXN0ZGluOwotfTsKLQotLyogVGhlIHRhYmxlIGlzIGJhc2VkIG9uIDI3 TUh6IERQSFkgcGxsIHJlZmVyZW5jZSBjbG9jay4gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHBo eV9wbGxfdGVzdGRpbl9tYXAgZHB0ZGluX21hcFtdID0gewotCXsgIDkwLCAweDAwfSwgeyAxMDAs IDB4MTB9LCB7IDExMCwgMHgyMH0sIHsgMTMwLCAweDAxfSwKLQl7IDE0MCwgMHgxMX0sIHsgMTUw LCAweDIxfSwgeyAxNzAsIDB4MDJ9LCB7IDE4MCwgMHgxMn0sCi0JeyAyMDAsIDB4MjJ9LCB7IDIy MCwgMHgwM30sIHsgMjQwLCAweDEzfSwgeyAyNTAsIDB4MjN9LAotCXsgMjcwLCAweDA0fSwgeyAz MDAsIDB4MTR9LCB7IDMzMCwgMHgwNX0sIHsgMzYwLCAweDE1fSwKLQl7IDQwMCwgMHgyNX0sIHsg NDUwLCAweDA2fSwgeyA1MDAsIDB4MTZ9LCB7IDU1MCwgMHgwN30sCi0JeyA2MDAsIDB4MTd9LCB7 IDY1MCwgMHgwOH0sIHsgNzAwLCAweDE4fSwgeyA3NTAsIDB4MDl9LAotCXsgODAwLCAweDE5fSwg eyA4NTAsIDB4Mjl9LCB7IDkwMCwgMHgzOX0sIHsgOTUwLCAweDBhfSwKLQl7MTAwMCwgMHgxYX0s IHsxMDUwLCAweDJhfSwgezExMDAsIDB4M2F9LCB7MTE1MCwgMHgwYn0sCi0JezEyMDAsIDB4MWJ9 LCB7MTI1MCwgMHgyYn0sIHsxMzAwLCAweDNifSwgezEzNTAsIDB4MGN9LAotCXsxNDAwLCAweDFj fSwgezE0NTAsIDB4MmN9LCB7MTUwMCwgMHgzY30KLX07Ci0KLXN0YXRpYyBpbnQgbWF4X21icHNf dG9fdGVzdGRpbih1bnNpZ25lZCBpbnQgbWF4X21icHMpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRShkcHRkaW5fbWFwKTsgaSsrKQotCQlpZiAoZHB0ZGluX21hcFtp XS5tYXhfbWJwcyA+IG1heF9tYnBzKQotCQkJcmV0dXJuIGRwdGRpbl9tYXBbaV0udGVzdGRpbjsK LQotCXJldHVybiAtRUlOVkFMOwotfQotCi0vKgotICogVGhlIGNvbnRyb2xsZXIgc2hvdWxkIGdl bmVyYXRlIDIgZnJhbWVzIGJlZm9yZQotICogcHJlcGFyaW5nIHRoZSBwZXJpcGhlcmFsLgotICov Ci1zdGF0aWMgdm9pZCBkd19taXBpX2RzaV93YWl0X2Zvcl90d29fZnJhbWVzKHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICptb2RlKQotewotCWludCByZWZyZXNoLCB0d29fZnJhbWVzOwotCi0JcmVm cmVzaCA9IGRybV9tb2RlX3ZyZWZyZXNoKG1vZGUpOwotCXR3b19mcmFtZXMgPSBESVZfUk9VTkRf VVAoTVNFQ19QRVJfU0VDLCByZWZyZXNoKSAqIDI7Ci0JbXNsZWVwKHR3b19mcmFtZXMpOwotfQot Ci1zdGF0aWMgaW5saW5lIHN0cnVjdCBkd19taXBpX2RzaSAqaG9zdF90b19kc2koc3RydWN0IG1p cGlfZHNpX2hvc3QgKmhvc3QpCi17Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihob3N0LCBzdHJ1Y3Qg ZHdfbWlwaV9kc2ksIGRzaV9ob3N0KTsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgZHdfbWlw aV9kc2kgKmNvbl90b19kc2koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbikKLXsKLQlyZXR1cm4g Y29udGFpbmVyX29mKGNvbiwgc3RydWN0IGR3X21pcGlfZHNpLCBjb25uZWN0b3IpOwotfQotCi1z dGF0aWMgaW5saW5lIHN0cnVjdCBkd19taXBpX2RzaSAqZW5jb2Rlcl90b19kc2koc3RydWN0IGRy bV9lbmNvZGVyICplbmNvZGVyKQotewotCXJldHVybiBjb250YWluZXJfb2YoZW5jb2Rlciwgc3Ry dWN0IGR3X21pcGlfZHNpLCBlbmNvZGVyKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRzaV93 cml0ZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwgdTMyIHJlZywgdTMyIHZhbCkKLXsKLQl3cml0 ZWwodmFsLCBkc2ktPmJhc2UgKyByZWcpOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBkc2lfcmVh ZChzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwgdTMyIHJlZykKLXsKLQlyZXR1cm4gcmVhZGwoZHNp LT5iYXNlICsgcmVnKTsKLX0KLQotc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfcGh5X3dyaXRlKHN0 cnVjdCBkd19taXBpX2RzaSAqZHNpLCB1OCB0ZXN0X2NvZGUsCi0JCQkJICB1OCB0ZXN0X2RhdGEp Ci17Ci0JLyoKLQkgKiBXaXRoIHRoZSBmYWxsaW5nIGVkZ2Ugb24gVEVTVENMSywgdGhlIFRFU1RE SU5bNzowXSBzaWduYWwgY29udGVudAotCSAqIGlzIGxhdGNoZWQgaW50ZXJuYWxseSBhcyB0aGUg Y3VycmVudCB0ZXN0IGNvZGUuIFRlc3QgZGF0YSBpcwotCSAqIHByb2dyYW1tZWQgaW50ZXJuYWxs eSBieSByaXNpbmcgZWRnZSBvbiBURVNUQ0xLLgotCSAqLwotCWRzaV93cml0ZShkc2ksIERTSV9Q SFlfVFNUX0NUUkwwLCBQSFlfVEVTVENMSyB8IFBIWV9VTlRFU1RDTFIpOwotCi0JZHNpX3dyaXRl KGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDEsIFBIWV9URVNURU4gfCBQSFlfVEVTVERPVVQoMCkgfAot CQkJCQkgIFBIWV9URVNURElOKHRlc3RfY29kZSkpOwotCi0JZHNpX3dyaXRlKGRzaSwgRFNJX1BI WV9UU1RfQ1RSTDAsIFBIWV9VTlRFU1RDTEsgfCBQSFlfVU5URVNUQ0xSKTsKLQotCWRzaV93cml0 ZShkc2ksIERTSV9QSFlfVFNUX0NUUkwxLCBQSFlfVU5URVNURU4gfCBQSFlfVEVTVERPVVQoMCkg fAotCQkJCQkgIFBIWV9URVNURElOKHRlc3RfZGF0YSkpOwotCi0JZHNpX3dyaXRlKGRzaSwgRFNJ X1BIWV9UU1RfQ1RSTDAsIFBIWV9URVNUQ0xLIHwgUEhZX1VOVEVTVENMUik7Ci19Ci0KLS8qKgot ICogbnMyYmMgLSBOYW5vc2Vjb25kcyB0byBieXRlIGNsb2NrIGN5Y2xlcwotICovCi1zdGF0aWMg aW5saW5lIHVuc2lnbmVkIGludCBuczJiYyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwgaW50IG5z KQotewotCXJldHVybiBESVZfUk9VTkRfVVAobnMgKiBkc2ktPmxhbmVfbWJwcyAvIDgsIDEwMDAp OwotfQotCi0vKioKLSAqIG5zMnVpIC0gTmFub3NlY29uZHMgdG8gVUkgdGltZSBwZXJpb2RzCi0g Ki8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG5zMnVpKHN0cnVjdCBkd19taXBpX2RzaSAq ZHNpLCBpbnQgbnMpCi17Ci0JcmV0dXJuIERJVl9ST1VORF9VUChucyAqIGRzaS0+bGFuZV9tYnBz LCAxMDAwKTsKLX0KLQotc3RhdGljIGludCBkd19taXBpX2RzaV9waHlfaW5pdChzdHJ1Y3QgZHdf bWlwaV9kc2kgKmRzaSkKLXsKLQlpbnQgcmV0LCB0ZXN0ZGluLCB2Y28sIHZhbDsKLQotCXZjbyA9 IChkc2ktPmxhbmVfbWJwcyA8IDIwMCkgPyAwIDogKGRzaS0+bGFuZV9tYnBzICsgMTAwKSAvIDIw MDsKLQotCXRlc3RkaW4gPSBtYXhfbWJwc190b190ZXN0ZGluKGRzaS0+bGFuZV9tYnBzKTsKLQlp ZiAodGVzdGRpbiA8IDApIHsKLQkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwKLQkJCSAgICAgICJm YWlsZWQgdG8gZ2V0IHRlc3RkaW4gZm9yICVkbWJwcyBsYW5lIGNsb2NrXG4iLAotCQkJICAgICAg ZHNpLT5sYW5lX21icHMpOwotCQlyZXR1cm4gdGVzdGRpbjsKLQl9Ci0KLQkvKiBTdGFydCBieSBj bGVhcmluZyBQSFkgc3RhdGUgKi8KLQlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1RTVF9DVFJMMCwg UEhZX1VOVEVTVENMUik7Ci0JZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDAsIFBIWV9U RVNUQ0xSKTsKLQlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1RTVF9DVFJMMCwgUEhZX1VOVEVTVENM Uik7Ci0KLQlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5waHlfY2ZnX2Nsayk7Ci0JaWYg KHJldCkgewotCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBwaHlf Y2ZnX2Nsa1xuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JZHdfbWlwaV9kc2lfcGh5X3dyaXRl KGRzaSwgMHgxMCwgQllQQVNTX1ZDT19SQU5HRSB8Ci0JCQkJCSBWQ09fUkFOR0VfQ09OX1NFTCh2 Y28pIHwKLQkJCQkJIFZDT19JTl9DQVBfQ09OX0xPVyB8Ci0JCQkJCSBSRUZfQklBU19DVVJfU0VM KTsKLQotCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4MTEsIENQX0NVUlJFTlRfM01BKTsK LQlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDEyLCBDUF9QUk9HUkFNX0VOIHwgTFBGX1BS T0dSQU1fRU4gfAotCQkJCQkgTFBGX1JFU0lTVE9SU18yMF9LT0hNKTsKLQotCWR3X21pcGlfZHNp X3BoeV93cml0ZShkc2ksIDB4NDQsIEhTRlJFUVJBTkdFX1NFTCh0ZXN0ZGluKSk7Ci0KLQlkd19t aXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDE3LCBJTlBVVF9ESVZJREVSKGRzaS0+aW5wdXRfZGl2 KSk7Ci0JZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHgxOCwgTE9PUF9ESVZfTE9XX1NFTChk c2ktPmZlZWRiYWNrX2RpdikgfAotCQkJCQkgTE9XX1BST0dSQU1fRU4pOwotCWR3X21pcGlfZHNp X3BoeV93cml0ZShkc2ksIDB4MTgsIExPT1BfRElWX0hJR0hfU0VMKGRzaS0+ZmVlZGJhY2tfZGl2 KSB8Ci0JCQkJCSBISUdIX1BST0dSQU1fRU4pOwotCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ks IDB4MTksIFBMTF9MT09QX0RJVl9FTiB8IFBMTF9JTlBVVF9ESVZfRU4pOwotCi0JZHdfbWlwaV9k c2lfcGh5X3dyaXRlKGRzaSwgMHgyMiwgTE9XX1BST0dSQU1fRU4gfAotCQkJCQkgQklBU0VYVFJf U0VMKEJJQVNFWFRSXzEyN183KSk7Ci0JZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHgyMiwg SElHSF9QUk9HUkFNX0VOIHwKLQkJCQkJIEJBTkRHQVBfU0VMKEJBTkRHQVBfOTZfMTApKTsKLQot CWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4MjAsIFBPV0VSX0NPTlRST0wgfCBJTlRFUk5B TF9SRUdfQ1VSUkVOVCB8Ci0JCQkJCSBCSUFTX0JMT0NLX09OIHwgQkFOREdBUF9PTik7Ci0KLQlk d19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDIxLCBURVJfUkVTSVNUT1JfTE9XIHwgVEVSX0NB TF9ET05FIHwKLQkJCQkJIFNFVFJEX01BWCB8IFRFUl9SRVNJU1RPUlNfT04pOwotCWR3X21pcGlf ZHNpX3BoeV93cml0ZShkc2ksIDB4MjEsIFRFUl9SRVNJU1RPUl9ISUdIIHwgTEVWRUxfU0hJRlRF UlNfT04gfAotCQkJCQkgU0VUUkRfTUFYIHwgUE9XRVJfTUFOQUdFIHwKLQkJCQkJIFRFUl9SRVNJ U1RPUlNfT04pOwotCi0JZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHg2MCwgVExQX1BST0dS QU1fRU4gfCBuczJiYyhkc2ksIDUwMCkpOwotCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4 NjEsIFRIU19QUkVfUFJPR1JBTV9FTiB8IG5zMnVpKGRzaSwgNDApKTsKLQlkd19taXBpX2RzaV9w aHlfd3JpdGUoZHNpLCAweDYyLCBUSFNfWkVST19QUk9HUkFNX0VOIHwgbnMyYmMoZHNpLCAzMDAp KTsKLQlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDYzLCBUSFNfUFJFX1BST0dSQU1fRU4g fCBuczJ1aShkc2ksIDEwMCkpOwotCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4NjQsIEJJ VCg1KSB8IG5zMmJjKGRzaSwgMTAwKSk7Ci0JZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHg2 NSwgQklUKDUpIHwgKG5zMmJjKGRzaSwgNjApICsgNykpOwotCi0JZHdfbWlwaV9kc2lfcGh5X3dy aXRlKGRzaSwgMHg3MCwgVExQX1BST0dSQU1fRU4gfCBuczJiYyhkc2ksIDUwMCkpOwotCWR3X21p cGlfZHNpX3BoeV93cml0ZShkc2ksIDB4NzEsCi0JCQkgICAgICBUSFNfUFJFX1BST0dSQU1fRU4g fCAobnMydWkoZHNpLCA1MCkgKyA1KSk7Ci0JZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHg3 MiwKLQkJCSAgICAgIFRIU19aRVJPX1BST0dSQU1fRU4gfCAobnMyYmMoZHNpLCAxNDApICsgMikp OwotCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4NzMsCi0JCQkgICAgICBUSFNfUFJFX1BS T0dSQU1fRU4gfCAobnMydWkoZHNpLCA2MCkgKyA4KSk7Ci0JZHdfbWlwaV9kc2lfcGh5X3dyaXRl KGRzaSwgMHg3NCwgQklUKDUpIHwgbnMyYmMoZHNpLCAxMDApKTsKLQotCWRzaV93cml0ZShkc2ks IERTSV9QSFlfUlNUWiwgUEhZX0VORk9SQ0VQTEwgfCBQSFlfRU5BQkxFQ0xLIHwKLQkJCQkgICAg IFBIWV9VTlJTVFogfCBQSFlfVU5TSFVURE9XTlopOwotCi0JcmV0ID0gcmVhZGxfcG9sbF90aW1l b3V0KGRzaS0+YmFzZSArIERTSV9QSFlfU1RBVFVTLAotCQkJCSB2YWwsIHZhbCAmIExPQ0ssIDEw MDAsIFBIWV9TVEFUVVNfVElNRU9VVF9VUyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJRFJNX0RFVl9F UlJPUihkc2ktPmRldiwgImZhaWxlZCB0byB3YWl0IGZvciBwaHkgbG9jayBzdGF0ZVxuIik7Ci0J CWdvdG8gcGh5X2luaXRfZW5kOwotCX0KLQotCXJldCA9IHJlYWRsX3BvbGxfdGltZW91dChkc2kt PmJhc2UgKyBEU0lfUEhZX1NUQVRVUywKLQkJCQkgdmFsLCB2YWwgJiBTVE9QX1NUQVRFX0NMS19M QU5FLCAxMDAwLAotCQkJCSBQSFlfU1RBVFVTX1RJTUVPVVRfVVMpOwotCWlmIChyZXQgPCAwKQot CQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LAotCQkJICAgICAgImZhaWxlZCB0byB3YWl0IGZvciBw aHkgY2xrIGxhbmUgc3RvcCBzdGF0ZVxuIik7Ci0KLXBoeV9pbml0X2VuZDoKLQljbGtfZGlzYWJs ZV91bnByZXBhcmUoZHNpLT5waHlfY2ZnX2Nsayk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0 aWMgaW50IGR3X21pcGlfZHNpX2dldF9sYW5lX2JwcyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwK LQkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCi17Ci0JdW5zaWduZWQgaW50 IGksIHByZTsKLQl1bnNpZ25lZCBsb25nIG1wY2xrLCBwbGxyZWYsIHRtcDsKLQl1bnNpZ25lZCBp bnQgbSA9IDEsIG4gPSAxLCB0YXJnZXRfbWJwcyA9IDEwMDA7Ci0JdW5zaWduZWQgaW50IG1heF9t YnBzID0gZHB0ZGluX21hcFtBUlJBWV9TSVpFKGRwdGRpbl9tYXApIC0gMV0ubWF4X21icHM7Ci0J aW50IGJwcDsKLQotCWJwcCA9IG1pcGlfZHNpX3BpeGVsX2Zvcm1hdF90b19icHAoZHNpLT5mb3Jt YXQpOwotCWlmIChicHAgPCAwKSB7Ci0JCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsCi0JCQkgICAg ICAiZmFpbGVkIHRvIGdldCBicHAgZm9yIHBpeGVsIGZvcm1hdCAlZFxuIiwKLQkJCSAgICAgIGRz aS0+Zm9ybWF0KTsKLQkJcmV0dXJuIGJwcDsKLQl9Ci0KLQltcGNsayA9IERJVl9ST1VORF9VUCht b2RlLT5jbG9jaywgTVNFQ19QRVJfU0VDKTsKLQlpZiAobXBjbGspIHsKLQkJLyogdGFrZSAxIC8g MC44LCBzaW5jZSBtYnBzIG11c3QgYmlnIHRoYW4gYmFuZHdpZHRoIG9mIFJHQiAqLwotCQl0bXAg PSBtcGNsayAqIChicHAgLyBkc2ktPmxhbmVzKSAqIDEwIC8gODsKLQkJaWYgKHRtcCA8IG1heF9t YnBzKQotCQkJdGFyZ2V0X21icHMgPSB0bXA7Ci0JCWVsc2UKLQkJCURSTV9ERVZfRVJST1IoZHNp LT5kZXYsCi0JCQkJICAgICAgIkRQSFkgY2xvY2sgZnJlcXVlbmN5IGlzIG91dCBvZiByYW5nZVxu Iik7Ci0JfQotCi0JcGxscmVmID0gRElWX1JPVU5EX1VQKGNsa19nZXRfcmF0ZShkc2ktPnBsbHJl Zl9jbGspLCBVU0VDX1BFUl9TRUMpOwotCXRtcCA9IHBsbHJlZjsKLQotCS8qCi0JICogVGhlIGxp bWl0cyBvbiB0aGUgUExMIGRpdmlzb3IgYXJlOgotCSAqCi0JICoJNU1IeiA8PSAocGxscmVmIC8g bikgPD0gNDBNSHoKLQkgKgotCSAqIHdlIHdhbGsgb3ZlciB0aGVzZSB2YWx1ZXMgaW4gZGVzY3Jl YXNpbmcgb3JkZXIgc28gdGhhdCBpZiB3ZSBoaXQKLQkgKiBhbiBleGFjdCBtYXRjaCBmb3IgdGFy Z2V0X21icHMgaXQgaXMgbW9yZSBsaWtlbHkgdGhhdCAibSIgd2lsbCBiZQotCSAqIGV2ZW4uCi0J ICoKLQkgKiBUT0RPOiBlbnN1cmUgdGhhdCAibSIgaXMgZXZlbiBhZnRlciB0aGlzIGxvb3AuCi0J ICovCi0JZm9yIChpID0gcGxscmVmIC8gNTsgaSA+IChwbGxyZWYgLyA0MCk7IGktLSkgewotCQlw cmUgPSBwbGxyZWYgLyBpOwotCQlpZiAoKHRtcCA+ICh0YXJnZXRfbWJwcyAlIHByZSkpICYmICh0 YXJnZXRfbWJwcyAvIHByZSA8IDUxMikpIHsKLQkJCXRtcCA9IHRhcmdldF9tYnBzICUgcHJlOwot CQkJbiA9IGk7Ci0JCQltID0gdGFyZ2V0X21icHMgLyBwcmU7Ci0JCX0KLQkJaWYgKHRtcCA9PSAw KQotCQkJYnJlYWs7Ci0JfQotCi0JZHNpLT5sYW5lX21icHMgPSBwbGxyZWYgLyBuICogbTsKLQlk c2ktPmlucHV0X2RpdiA9IG47Ci0JZHNpLT5mZWVkYmFja19kaXYgPSBtOwotCi0JcmV0dXJuIDA7 Ci19Ci0KLXN0YXRpYyBpbnQgZHdfbWlwaV9kc2lfaG9zdF9hdHRhY2goc3RydWN0IG1pcGlfZHNp X2hvc3QgKmhvc3QsCi0JCQkJICAgc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZGV2aWNlKQotewot CXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gaG9zdF90b19kc2koaG9zdCk7Ci0KLQlpZiAoZGV2 aWNlLT5sYW5lcyA+IGRzaS0+cGRhdGEtPm1heF9kYXRhX2xhbmVzKSB7Ci0JCURSTV9ERVZfRVJS T1IoZHNpLT5kZXYsCi0JCQkgICAgICAidGhlIG51bWJlciBvZiBkYXRhIGxhbmVzKCV1KSBpcyB0 b28gbWFueVxuIiwKLQkJCSAgICAgIGRldmljZS0+bGFuZXMpOwotCQlyZXR1cm4gLUVJTlZBTDsK LQl9Ci0KLQlkc2ktPmxhbmVzID0gZGV2aWNlLT5sYW5lczsKLQlkc2ktPmNoYW5uZWwgPSBkZXZp Y2UtPmNoYW5uZWw7Ci0JZHNpLT5mb3JtYXQgPSBkZXZpY2UtPmZvcm1hdDsKLQlkc2ktPm1vZGVf ZmxhZ3MgPSBkZXZpY2UtPm1vZGVfZmxhZ3M7Ci0JZHNpLT5wYW5lbCA9IG9mX2RybV9maW5kX3Bh bmVsKGRldmljZS0+ZGV2Lm9mX25vZGUpOwotCWlmICghSVNfRVJSKGRzaS0+cGFuZWwpKQotCQly ZXR1cm4gZHJtX3BhbmVsX2F0dGFjaChkc2ktPnBhbmVsLCAmZHNpLT5jb25uZWN0b3IpOwotCi0J cmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbnQgZHdfbWlwaV9kc2lfaG9zdF9kZXRhY2go c3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCi0JCQkJICAgc3RydWN0IG1pcGlfZHNpX2Rldmlj ZSAqZGV2aWNlKQotewotCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gaG9zdF90b19kc2koaG9z dCk7Ci0KLQlkcm1fcGFuZWxfZGV0YWNoKGRzaS0+cGFuZWwpOwotCi0JcmV0dXJuIDA7Ci19Ci0K LXN0YXRpYyB2b2lkIGR3X21pcGlfbWVzc2FnZV9jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpk c2ksCi0JCQkJICAgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnKQotewotCWJvb2wgbHBt ID0gbXNnLT5mbGFncyAmIE1JUElfRFNJX01TR19VU0VfTFBNOwotCXUzMiB2YWwgPSAwOwotCi0J aWYgKG1zZy0+ZmxhZ3MgJiBNSVBJX0RTSV9NU0dfUkVRX0FDSykKLQkJdmFsIHw9IEVOX0FDS19S UVNUOwotCWlmIChscG0pCi0JCXZhbCB8PSBDTURfTU9ERV9BTExfTFA7Ci0KLQlkc2lfd3JpdGUo ZHNpLCBEU0lfTFBDTEtfQ1RSTCwgbHBtID8gMCA6IFBIWV9UWFJFUVVFU1RDTEtIUyk7Ci0JZHNp X3dyaXRlKGRzaSwgRFNJX0NNRF9NT0RFX0NGRywgdmFsKTsKLX0KLQotc3RhdGljIGludCBkd19t aXBpX2RzaV9nZW5fcGt0X2hkcl93cml0ZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwgdTMyIGhk cl92YWwpCi17Ci0JaW50IHJldDsKLQl1MzIgdmFsLCBtYXNrOwotCi0JcmV0ID0gcmVhZGxfcG9s bF90aW1lb3V0KGRzaS0+YmFzZSArIERTSV9DTURfUEtUX1NUQVRVUywKLQkJCQkgdmFsLCAhKHZh bCAmIEdFTl9DTURfRlVMTCksIDEwMDAsCi0JCQkJIENNRF9QS1RfU1RBVFVTX1RJTUVPVVRfVVMp OwotCWlmIChyZXQgPCAwKSB7Ci0JCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsCi0JCQkgICAgICAi ZmFpbGVkIHRvIGdldCBhdmFpbGFibGUgY29tbWFuZCBGSUZPXG4iKTsKLQkJcmV0dXJuIHJldDsK LQl9Ci0KLQlkc2lfd3JpdGUoZHNpLCBEU0lfR0VOX0hEUiwgaGRyX3ZhbCk7Ci0KLQltYXNrID0g R0VOX0NNRF9FTVBUWSB8IEdFTl9QTERfV19FTVBUWTsKLQlyZXQgPSByZWFkbF9wb2xsX3RpbWVv dXQoZHNpLT5iYXNlICsgRFNJX0NNRF9QS1RfU1RBVFVTLAotCQkJCSB2YWwsICh2YWwgJiBtYXNr KSA9PSBtYXNrLAotCQkJCSAxMDAwLCBDTURfUEtUX1NUQVRVU19USU1FT1VUX1VTKTsKLQlpZiAo cmV0IDwgMCkgewotCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiZmFpbGVkIHRvIHdyaXRlIGNv bW1hbmQgRklGT1xuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0 YXRpYyBpbnQgZHdfbWlwaV9kc2lfZGNzX3Nob3J0X3dyaXRlKHN0cnVjdCBkd19taXBpX2RzaSAq ZHNpLAotCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNnICptc2cpCi17Ci0JY29u c3QgdTggKnR4X2J1ZiA9IG1zZy0+dHhfYnVmOwotCXUxNiBkYXRhID0gMDsKLQl1MzIgdmFsOwot Ci0JaWYgKG1zZy0+dHhfbGVuID4gMCkKLQkJZGF0YSB8PSB0eF9idWZbMF07Ci0JaWYgKG1zZy0+ dHhfbGVuID4gMSkKLQkJZGF0YSB8PSB0eF9idWZbMV0gPDwgODsKLQotCWlmIChtc2ctPnR4X2xl biA+IDIpIHsKLQkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwKLQkJCSAgICAgICJ0b28gbG9uZyB0 eCBidWYgbGVuZ3RoICV6dSBmb3Igc2hvcnQgd3JpdGVcbiIsCi0JCQkgICAgICBtc2ctPnR4X2xl bik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXZhbCA9IEdFTl9IREFUQShkYXRhKSB8IEdF Tl9IVFlQRShtc2ctPnR5cGUpOwotCXJldHVybiBkd19taXBpX2RzaV9nZW5fcGt0X2hkcl93cml0 ZShkc2ksIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbnQgZHdfbWlwaV9kc2lfZGNzX2xvbmdfd3JpdGUo c3RydWN0IGR3X21pcGlfZHNpICpkc2ksCi0JCQkJICAgICAgY29uc3Qgc3RydWN0IG1pcGlfZHNp X21zZyAqbXNnKQotewotCWNvbnN0IHU4ICp0eF9idWYgPSBtc2ctPnR4X2J1ZjsKLQlpbnQgbGVu ID0gbXNnLT50eF9sZW4sIHBsZF9kYXRhX2J5dGVzID0gc2l6ZW9mKHUzMiksIHJldDsKLQl1MzIg aGRyX3ZhbCA9IEdFTl9IREFUQShtc2ctPnR4X2xlbikgfCBHRU5fSFRZUEUobXNnLT50eXBlKTsK LQl1MzIgcmVtYWluZGVyOwotCXUzMiB2YWw7Ci0KLQlpZiAobXNnLT50eF9sZW4gPCAzKSB7Ci0J CURSTV9ERVZfRVJST1IoZHNpLT5kZXYsCi0JCQkgICAgICAid3JvbmcgdHggYnVmIGxlbmd0aCAl enUgZm9yIGxvbmcgd3JpdGVcbiIsCi0JCQkgICAgICBtc2ctPnR4X2xlbik7Ci0JCXJldHVybiAt RUlOVkFMOwotCX0KLQotCXdoaWxlIChESVZfUk9VTkRfVVAobGVuLCBwbGRfZGF0YV9ieXRlcykp IHsKLQkJaWYgKGxlbiA8IHBsZF9kYXRhX2J5dGVzKSB7Ci0JCQlyZW1haW5kZXIgPSAwOwotCQkJ bWVtY3B5KCZyZW1haW5kZXIsIHR4X2J1ZiwgbGVuKTsKLQkJCWRzaV93cml0ZShkc2ksIERTSV9H RU5fUExEX0RBVEEsIHJlbWFpbmRlcik7Ci0JCQlsZW4gPSAwOwotCQl9IGVsc2UgewotCQkJbWVt Y3B5KCZyZW1haW5kZXIsIHR4X2J1ZiwgcGxkX2RhdGFfYnl0ZXMpOwotCQkJZHNpX3dyaXRlKGRz aSwgRFNJX0dFTl9QTERfREFUQSwgcmVtYWluZGVyKTsKLQkJCXR4X2J1ZiArPSBwbGRfZGF0YV9i eXRlczsKLQkJCWxlbiAtPSBwbGRfZGF0YV9ieXRlczsKLQkJfQotCi0JCXJldCA9IHJlYWRsX3Bv bGxfdGltZW91dChkc2ktPmJhc2UgKyBEU0lfQ01EX1BLVF9TVEFUVVMsCi0JCQkJCSB2YWwsICEo dmFsICYgR0VOX1BMRF9XX0ZVTEwpLCAxMDAwLAotCQkJCQkgQ01EX1BLVF9TVEFUVVNfVElNRU9V VF9VUyk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LAotCQkJ CSAgICAgICJmYWlsZWQgdG8gZ2V0IGF2YWlsYWJsZSB3cml0ZSBwYXlsb2FkIEZJRk9cbiIpOwot CQkJcmV0dXJuIHJldDsKLQkJfQotCX0KLQotCXJldHVybiBkd19taXBpX2RzaV9nZW5fcGt0X2hk cl93cml0ZShkc2ksIGhkcl92YWwpOwotfQotCi1zdGF0aWMgc3NpemVfdCBkd19taXBpX2RzaV9o b3N0X3RyYW5zZmVyKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0LAotCQkJCQkgY29uc3Qgc3Ry dWN0IG1pcGlfZHNpX21zZyAqbXNnKQotewotCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gaG9z dF90b19kc2koaG9zdCk7Ci0JaW50IHJldDsKLQotCWR3X21pcGlfbWVzc2FnZV9jb25maWcoZHNp LCBtc2cpOwotCi0Jc3dpdGNoIChtc2ctPnR5cGUpIHsKLQljYXNlIE1JUElfRFNJX0RDU19TSE9S VF9XUklURToKLQljYXNlIE1JUElfRFNJX0RDU19TSE9SVF9XUklURV9QQVJBTToKLQljYXNlIE1J UElfRFNJX1NFVF9NQVhJTVVNX1JFVFVSTl9QQUNLRVRfU0laRToKLQkJcmV0ID0gZHdfbWlwaV9k c2lfZGNzX3Nob3J0X3dyaXRlKGRzaSwgbXNnKTsKLQkJYnJlYWs7Ci0JY2FzZSBNSVBJX0RTSV9E Q1NfTE9OR19XUklURToKLQkJcmV0ID0gZHdfbWlwaV9kc2lfZGNzX2xvbmdfd3JpdGUoZHNpLCBt c2cpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAidW5z dXBwb3J0ZWQgbWVzc2FnZSB0eXBlIDB4JTAyeFxuIiwKLQkJCSAgICAgIG1zZy0+dHlwZSk7Ci0J CXJldCA9IC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGNvbnN0IHN0 cnVjdCBtaXBpX2RzaV9ob3N0X29wcyBkd19taXBpX2RzaV9ob3N0X29wcyA9IHsKLQkuYXR0YWNo ID0gZHdfbWlwaV9kc2lfaG9zdF9hdHRhY2gsCi0JLmRldGFjaCA9IGR3X21pcGlfZHNpX2hvc3Rf ZGV0YWNoLAotCS50cmFuc2ZlciA9IGR3X21pcGlfZHNpX2hvc3RfdHJhbnNmZXIsCi19OwotCi1z dGF0aWMgdm9pZCBkd19taXBpX2RzaV92aWRlb19tb2RlX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9k c2kgKmRzaSkKLXsKLQl1MzIgdmFsOwotCi0JdmFsID0gRU5BQkxFX0xPV19QT1dFUjsKLQotCWlm IChkc2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX0JVUlNUKQotCQl2YWwgfD0g VklEX01PREVfVFlQRV9CVVJTVDsKLQllbHNlIGlmIChkc2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RT SV9NT0RFX1ZJREVPX1NZTkNfUFVMU0UpCi0JCXZhbCB8PSBWSURfTU9ERV9UWVBFX05PTl9CVVJT VF9TWU5DX1BVTFNFUzsKLQllbHNlCi0JCXZhbCB8PSBWSURfTU9ERV9UWVBFX05PTl9CVVJTVF9T WU5DX0VWRU5UUzsKLQotCWRzaV93cml0ZShkc2ksIERTSV9WSURfTU9ERV9DRkcsIHZhbCk7Ci19 Ci0KLXN0YXRpYyB2b2lkIGR3X21pcGlfZHNpX3NldF9tb2RlKHN0cnVjdCBkd19taXBpX2RzaSAq ZHNpLAotCQkJCSBlbnVtIGR3X21pcGlfZHNpX21vZGUgbW9kZSkKLXsKLQlpZiAobW9kZSA9PSBE V19NSVBJX0RTSV9DTURfTU9ERSkgewotCQlkc2lfd3JpdGUoZHNpLCBEU0lfUFdSX1VQLCBSRVNF VCk7Ci0JCWRzaV93cml0ZShkc2ksIERTSV9NT0RFX0NGRywgRU5BQkxFX0NNRF9NT0RFKTsKLQkJ ZHNpX3dyaXRlKGRzaSwgRFNJX1BXUl9VUCwgUE9XRVJVUCk7Ci0JfSBlbHNlIHsKLQkJZHNpX3dy aXRlKGRzaSwgRFNJX1BXUl9VUCwgUkVTRVQpOwotCQlkc2lfd3JpdGUoZHNpLCBEU0lfTU9ERV9D RkcsIEVOQUJMRV9WSURFT19NT0RFKTsKLQkJZHdfbWlwaV9kc2lfdmlkZW9fbW9kZV9jb25maWco ZHNpKTsKLQkJZHNpX3dyaXRlKGRzaSwgRFNJX0xQQ0xLX0NUUkwsIFBIWV9UWFJFUVVFU1RDTEtI Uyk7Ci0JCWRzaV93cml0ZShkc2ksIERTSV9QV1JfVVAsIFBPV0VSVVApOwotCX0KLX0KLQotc3Rh dGljIHZvaWQgZHdfbWlwaV9kc2lfZGlzYWJsZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKLXsK LQlkc2lfd3JpdGUoZHNpLCBEU0lfUFdSX1VQLCBSRVNFVCk7Ci0JZHNpX3dyaXRlKGRzaSwgRFNJ X1BIWV9SU1RaLCBQSFlfUlNUWik7Ci19Ci0KLXN0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2luaXQo c3RydWN0IGR3X21pcGlfZHNpICpkc2kpCi17Ci0JLyoKLQkgKiBUaGUgbWF4aW11bSBwZXJtaXR0 ZWQgZXNjYXBlIGNsb2NrIGlzIDIwTUh6IGFuZCBpdCBpcyBkZXJpdmVkIGZyb20KLQkgKiBsYW5l Ynl0ZWNsaywgd2hpY2ggaXMgcnVubmluZyBhdCAibGFuZV9tYnBzIC8gOCIuICBUaHVzIHdlIHdh bnQ6Ci0JICoKLQkgKiAgICAgKGxhbmVfbWJwcyA+PiAzKSAvIGVzY19jbGtfZGl2aXNpb24gPCAy MAotCSAqIHdoaWNoIGlzOgotCSAqICAgICAobGFuZV9tYnBzID4+IDMpIC8gMjAgPiBlc2NfY2xr X2RpdmlzaW9uCi0JICovCi0JdTMyIGVzY19jbGtfZGl2aXNpb24gPSAoZHNpLT5sYW5lX21icHMg Pj4gMykgLyAyMCArIDE7Ci0KLQlkc2lfd3JpdGUoZHNpLCBEU0lfUFdSX1VQLCBSRVNFVCk7Ci0J ZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9SU1RaLCBQSFlfRElTRk9SQ0VQTEwgfCBQSFlfRElTQUJM RUNMSwotCQkgIHwgUEhZX1JTVFogfCBQSFlfU0hVVERPV05aKTsKLQlkc2lfd3JpdGUoZHNpLCBE U0lfQ0xLTUdSX0NGRywgVE9fQ0xLX0RJVklEU0lPTigxMCkgfAotCQkgIFRYX0VTQ19DTEtfRElW SURTSU9OKGVzY19jbGtfZGl2aXNpb24pKTsKLX0KLQotc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lf ZHBpX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwKLQkJCQkgICBzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSAqbW9kZSkKLXsKLQl1MzIgdmFsID0gMCwgY29sb3IgPSAwOwotCi0Jc3dpdGNo IChkc2ktPmZvcm1hdCkgewotCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjg4ODoKLQkJY29sb3IgPSBE UElfQ09MT1JfQ09ESU5HXzI0QklUOwotCQlicmVhazsKLQljYXNlIE1JUElfRFNJX0ZNVF9SR0I2 NjY6Ci0JCWNvbG9yID0gRFBJX0NPTE9SX0NPRElOR18xOEJJVF8yIHwgRU4xOF9MT09TRUxZOwot CQlicmVhazsKLQljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjZfUEFDS0VEOgotCQljb2xvciA9IERQ SV9DT0xPUl9DT0RJTkdfMThCSVRfMTsKLQkJYnJlYWs7Ci0JY2FzZSBNSVBJX0RTSV9GTVRfUkdC NTY1OgotCQljb2xvciA9IERQSV9DT0xPUl9DT0RJTkdfMTZCSVRfMTsKLQkJYnJlYWs7Ci0JfQot Ci0JaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OVlNZTkMpCi0JCXZhbCB8PSBWU1lO Q19BQ1RJVkVfTE9XOwotCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTkhTWU5DKQot CQl2YWwgfD0gSFNZTkNfQUNUSVZFX0xPVzsKLQotCWRzaV93cml0ZShkc2ksIERTSV9EUElfVkNJ RCwgRFBJX1ZJRChkc2ktPmNoYW5uZWwpKTsKLQlkc2lfd3JpdGUoZHNpLCBEU0lfRFBJX0NPTE9S X0NPRElORywgY29sb3IpOwotCWRzaV93cml0ZShkc2ksIERTSV9EUElfQ0ZHX1BPTCwgdmFsKTsK LQlkc2lfd3JpdGUoZHNpLCBEU0lfRFBJX0xQX0NNRF9USU0sIE9VVFZBQ1RfTFBDTURfVElNRSg0 KQotCQkgIHwgSU5WQUNUX0xQQ01EX1RJTUUoNCkpOwotfQotCi1zdGF0aWMgdm9pZCBkd19taXBp X2RzaV9wYWNrZXRfaGFuZGxlcl9jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCi17Ci0J ZHNpX3dyaXRlKGRzaSwgRFNJX1BDS0hETF9DRkcsIEVOX0NSQ19SWCB8IEVOX0VDQ19SWCB8IEVO X0JUQSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGR3X21pcGlfZHNpX3ZpZGVvX3BhY2tldF9jb25maWco c3RydWN0IGR3X21pcGlfZHNpICpkc2ksCi0JCQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqbW9kZSkKLXsKLQlkc2lfd3JpdGUoZHNpLCBEU0lfVklEX1BLVF9TSVpFLCBWSURfUEtUX1NJ WkUobW9kZS0+aGRpc3BsYXkpKTsKLX0KLQotc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfY29tbWFu ZF9tb2RlX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKLXsKLQlkc2lfd3JpdGUoZHNp LCBEU0lfVE9fQ05UX0NGRywgSFNUWF9UT19DTlQoMTAwMCkgfCBMUFJYX1RPX0NOVCgxMDAwKSk7 Ci0JZHNpX3dyaXRlKGRzaSwgRFNJX0JUQV9UT19DTlQsIDB4ZDAwKTsKLQlkc2lfd3JpdGUoZHNp LCBEU0lfTU9ERV9DRkcsIEVOQUJMRV9DTURfTU9ERSk7Ci19Ci0KLS8qIEdldCBsYW5lIGJ5dGUg Y2xvY2sgY3ljbGVzLiAqLwotc3RhdGljIHUzMiBkd19taXBpX2RzaV9nZXRfaGNvbXBvbmVudF9s YmNjKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLAotCQkJCQkgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqbW9kZSwKLQkJCQkJICAgdTMyIGhjb21wb25lbnQpCi17Ci0JdTMyIGZyYWMsIGxiY2M7 Ci0KLQlsYmNjID0gaGNvbXBvbmVudCAqIGRzaS0+bGFuZV9tYnBzICogTVNFQ19QRVJfU0VDIC8g ODsKLQotCWZyYWMgPSBsYmNjICUgbW9kZS0+Y2xvY2s7Ci0JbGJjYyA9IGxiY2MgLyBtb2RlLT5j bG9jazsKLQlpZiAoZnJhYykKLQkJbGJjYysrOwotCi0JcmV0dXJuIGxiY2M7Ci19Ci0KLXN0YXRp YyB2b2lkIGR3X21pcGlfZHNpX2xpbmVfdGltZXJfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAq ZHNpLAotCQkJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQotewotCXUzMiBodG90 YWwsIGhzYSwgaGJwLCBsYmNjOwotCi0JaHRvdGFsID0gbW9kZS0+aHRvdGFsOwotCWhzYSA9IG1v ZGUtPmhzeW5jX2VuZCAtIG1vZGUtPmhzeW5jX3N0YXJ0OwotCWhicCA9IG1vZGUtPmh0b3RhbCAt IG1vZGUtPmhzeW5jX2VuZDsKLQotCWxiY2MgPSBkd19taXBpX2RzaV9nZXRfaGNvbXBvbmVudF9s YmNjKGRzaSwgbW9kZSwgaHRvdGFsKTsKLQlkc2lfd3JpdGUoZHNpLCBEU0lfVklEX0hMSU5FX1RJ TUUsIGxiY2MpOwotCi0JbGJjYyA9IGR3X21pcGlfZHNpX2dldF9oY29tcG9uZW50X2xiY2MoZHNp LCBtb2RlLCBoc2EpOwotCWRzaV93cml0ZShkc2ksIERTSV9WSURfSFNBX1RJTUUsIGxiY2MpOwot Ci0JbGJjYyA9IGR3X21pcGlfZHNpX2dldF9oY29tcG9uZW50X2xiY2MoZHNpLCBtb2RlLCBoYnAp OwotCWRzaV93cml0ZShkc2ksIERTSV9WSURfSEJQX1RJTUUsIGxiY2MpOwotfQotCi1zdGF0aWMg dm9pZCBkd19taXBpX2RzaV92ZXJ0aWNhbF90aW1pbmdfY29uZmlnKHN0cnVjdCBkd19taXBpX2Rz aSAqZHNpLAotCQkJCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCi17Ci0J dTMyIHZhY3RpdmUsIHZzYSwgdmZwLCB2YnA7Ci0KLQl2YWN0aXZlID0gbW9kZS0+dmRpc3BsYXk7 Ci0JdnNhID0gbW9kZS0+dnN5bmNfZW5kIC0gbW9kZS0+dnN5bmNfc3RhcnQ7Ci0JdmZwID0gbW9k ZS0+dnN5bmNfc3RhcnQgLSBtb2RlLT52ZGlzcGxheTsKLQl2YnAgPSBtb2RlLT52dG90YWwgLSBt b2RlLT52c3luY19lbmQ7Ci0KLQlkc2lfd3JpdGUoZHNpLCBEU0lfVklEX1ZBQ1RJVkVfTElORVMs IHZhY3RpdmUpOwotCWRzaV93cml0ZShkc2ksIERTSV9WSURfVlNBX0xJTkVTLCB2c2EpOwotCWRz aV93cml0ZShkc2ksIERTSV9WSURfVkZQX0xJTkVTLCB2ZnApOwotCWRzaV93cml0ZShkc2ksIERT SV9WSURfVkJQX0xJTkVTLCB2YnApOwotfQotCi1zdGF0aWMgdm9pZCBkd19taXBpX2RzaV9kcGh5 X3RpbWluZ19jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCi17Ci0JZHNpX3dyaXRlKGRz aSwgRFNJX1BIWV9UTVJfQ0ZHLCBQSFlfSFMyTFBfVElNRSgweDQwKQotCQkgIHwgUEhZX0xQMkhT X1RJTUUoMHg0MCkgfCBNQVhfUkRfVElNRSgxMDAwMCkpOwotCi0JZHNpX3dyaXRlKGRzaSwgRFNJ X1BIWV9UTVJfTFBDTEtfQ0ZHLCBQSFlfQ0xLSFMyTFBfVElNRSgweDQwKQotCQkgIHwgUEhZX0NM S0xQMkhTX1RJTUUoMHg0MCkpOwotfQotCi1zdGF0aWMgdm9pZCBkd19taXBpX2RzaV9kcGh5X2lu dGVyZmFjZV9jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCi17Ci0JZHNpX3dyaXRlKGRz aSwgRFNJX1BIWV9JRl9DRkcsIFBIWV9TVE9QX1dBSVRfVElNRSgweDIwKSB8Ci0JCSAgTl9MQU5F Uyhkc2ktPmxhbmVzKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2NsZWFyX2Vycihz dHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKLXsKLQlkc2lfcmVhZChkc2ksIERTSV9JTlRfU1QwKTsK LQlkc2lfcmVhZChkc2ksIERTSV9JTlRfU1QxKTsKLQlkc2lfd3JpdGUoZHNpLCBEU0lfSU5UX01T SzAsIDApOwotCWRzaV93cml0ZShkc2ksIERTSV9JTlRfTVNLMSwgMCk7Ci19Ci0KLXN0YXRpYyB2 b2lkIGR3X21pcGlfZHNpX2VuY29kZXJfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29k ZXIpCi17Ci0Jc3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBlbmNvZGVyX3RvX2RzaShlbmNvZGVy KTsKLQotCWlmIChkc2ktPmRwbXNfbW9kZSAhPSBEUk1fTU9ERV9EUE1TX09OKQotCQlyZXR1cm47 Ci0KLQlpZiAoY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+cGNsaykpIHsKLQkJRFJNX0RFVl9FUlJP Uihkc2ktPmRldiwgIkZhaWxlZCB0byBlbmFibGUgcGNsa1xuIik7Ci0JCXJldHVybjsKLQl9Ci0K LQlkcm1fcGFuZWxfZGlzYWJsZShkc2ktPnBhbmVsKTsKLQotCWR3X21pcGlfZHNpX3NldF9tb2Rl KGRzaSwgRFdfTUlQSV9EU0lfQ01EX01PREUpOwotCWRybV9wYW5lbF91bnByZXBhcmUoZHNpLT5w YW5lbCk7Ci0KLQlkd19taXBpX2RzaV9kaXNhYmxlKGRzaSk7Ci0JcG1fcnVudGltZV9wdXQoZHNp LT5kZXYpOwotCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPnBjbGspOwotCWRzaS0+ZHBtc19t b2RlID0gRFJNX01PREVfRFBNU19PRkY7Ci19Ci0KLXN0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2Vu Y29kZXJfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKLXsKLQlzdHJ1Y3QgZHdf bWlwaV9kc2kgKmRzaSA9IGVuY29kZXJfdG9fZHNpKGVuY29kZXIpOwotCXN0cnVjdCBkcm1fZGlz cGxheV9tb2RlICptb2RlID0gJmVuY29kZXItPmNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlOwot CWNvbnN0IHN0cnVjdCBkd19taXBpX2RzaV9wbGF0X2RhdGEgKnBkYXRhID0gZHNpLT5wZGF0YTsK LQlpbnQgbXV4ID0gZHJtX29mX2VuY29kZXJfYWN0aXZlX2VuZHBvaW50X2lkKGRzaS0+ZGV2LT5v Zl9ub2RlLCBlbmNvZGVyKTsKLQl1MzIgdmFsOwotCWludCByZXQ7Ci0KLQlyZXQgPSBkd19taXBp X2RzaV9nZXRfbGFuZV9icHMoZHNpLCBtb2RlKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuOwot Ci0JaWYgKGRzaS0+ZHBtc19tb2RlID09IERSTV9NT0RFX0RQTVNfT04pCi0JCXJldHVybjsKLQot CWlmIChjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5wY2xrKSkgewotCQlEUk1fREVWX0VSUk9SKGRz aS0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBwY2xrXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCXBt X3J1bnRpbWVfZ2V0X3N5bmMoZHNpLT5kZXYpOwotCWR3X21pcGlfZHNpX2luaXQoZHNpKTsKLQlk d19taXBpX2RzaV9kcGlfY29uZmlnKGRzaSwgbW9kZSk7Ci0JZHdfbWlwaV9kc2lfcGFja2V0X2hh bmRsZXJfY29uZmlnKGRzaSk7Ci0JZHdfbWlwaV9kc2lfdmlkZW9fbW9kZV9jb25maWcoZHNpKTsK LQlkd19taXBpX2RzaV92aWRlb19wYWNrZXRfY29uZmlnKGRzaSwgbW9kZSk7Ci0JZHdfbWlwaV9k c2lfY29tbWFuZF9tb2RlX2NvbmZpZyhkc2kpOwotCWR3X21pcGlfZHNpX2xpbmVfdGltZXJfY29u ZmlnKGRzaSwgbW9kZSk7Ci0JZHdfbWlwaV9kc2lfdmVydGljYWxfdGltaW5nX2NvbmZpZyhkc2ks IG1vZGUpOwotCWR3X21pcGlfZHNpX2RwaHlfdGltaW5nX2NvbmZpZyhkc2kpOwotCWR3X21pcGlf ZHNpX2RwaHlfaW50ZXJmYWNlX2NvbmZpZyhkc2kpOwotCWR3X21pcGlfZHNpX2NsZWFyX2Vycihk c2kpOwotCi0JLyoKLQkgKiBGb3IgdGhlIFJLMzM5OSwgdGhlIGNsayBvZiBncmYgbXVzdCBiZSBl bmFibGVkIGJlZm9yZSB3cml0aW5nIGdyZgotCSAqIHJlZ2lzdGVyLiBBbmQgZm9yIFJLMzI4OCBv ciBvdGhlciBzb2MsIHRoaXMgZ3JmX2NsayBtdXN0IGJlIE5VTEwsCi0JICogdGhlIGNsa19wcmVw YXJlX2VuYWJsZSByZXR1cm4gdHJ1ZSBkaXJlY3RseS4KLQkgKi8KLQlyZXQgPSBjbGtfcHJlcGFy ZV9lbmFibGUoZHNpLT5ncmZfY2xrKTsKLQlpZiAocmV0KSB7Ci0JCURSTV9ERVZfRVJST1IoZHNp LT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIGdyZl9jbGs6ICVkXG4iLCByZXQpOwotCQlyZXR1cm47 Ci0JfQotCi0JaWYgKHBkYXRhLT5ncmZfZHNpMF9tb2RlX3JlZykKLQkJcmVnbWFwX3dyaXRlKGRz aS0+Z3JmX3JlZ21hcCwgcGRhdGEtPmdyZl9kc2kwX21vZGVfcmVnLAotCQkJICAgICBwZGF0YS0+ Z3JmX2RzaTBfbW9kZSk7Ci0KLQlkd19taXBpX2RzaV9waHlfaW5pdChkc2kpOwotCWR3X21pcGlf ZHNpX3dhaXRfZm9yX3R3b19mcmFtZXMobW9kZSk7Ci0KLQlkd19taXBpX2RzaV9zZXRfbW9kZShk c2ksIERXX01JUElfRFNJX0NNRF9NT0RFKTsKLQlpZiAoZHJtX3BhbmVsX3ByZXBhcmUoZHNpLT5w YW5lbCkpCi0JCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJmYWlsZWQgdG8gcHJlcGFyZSBwYW5l bFxuIik7Ci0KLQlkd19taXBpX2RzaV9zZXRfbW9kZShkc2ksIERXX01JUElfRFNJX1ZJRF9NT0RF KTsKLQlkcm1fcGFuZWxfZW5hYmxlKGRzaS0+cGFuZWwpOwotCi0JY2xrX2Rpc2FibGVfdW5wcmVw YXJlKGRzaS0+cGNsayk7Ci0KLQlpZiAobXV4KQotCQl2YWwgPSBwZGF0YS0+ZHNpMF9lbl9iaXQg fCAocGRhdGEtPmRzaTBfZW5fYml0IDw8IDE2KTsKLQllbHNlCi0JCXZhbCA9IHBkYXRhLT5kc2kw X2VuX2JpdCA8PCAxNjsKLQotCXJlZ21hcF93cml0ZShkc2ktPmdyZl9yZWdtYXAsIHBkYXRhLT5n cmZfc3dpdGNoX3JlZywgdmFsKTsKLQlEUk1fREVWX0RFQlVHKGRzaS0+ZGV2LAotCQkgICAgICAi dm9wICVzIG91dHB1dCB0byBkc2kwXG4iLCAobXV4KSA/ICJMSVQiIDogIkJJRyIpOwotCWRzaS0+ ZHBtc19tb2RlID0gRFJNX01PREVfRFBNU19PTjsKLQotCWNsa19kaXNhYmxlX3VucHJlcGFyZShk c2ktPmdyZl9jbGspOwotfQotCi1zdGF0aWMgaW50Ci1kd19taXBpX2RzaV9lbmNvZGVyX2F0b21p Y19jaGVjayhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCi0JCQkJIHN0cnVjdCBkcm1fY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJCQkgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNv bm5fc3RhdGUpCi17Ci0Jc3RydWN0IHJvY2tjaGlwX2NydGNfc3RhdGUgKnMgPSB0b19yb2NrY2hp cF9jcnRjX3N0YXRlKGNydGNfc3RhdGUpOwotCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gZW5j b2Rlcl90b19kc2koZW5jb2Rlcik7Ci0KLQlzd2l0Y2ggKGRzaS0+Zm9ybWF0KSB7Ci0JY2FzZSBN SVBJX0RTSV9GTVRfUkdCODg4OgotCQlzLT5vdXRwdXRfbW9kZSA9IFJPQ0tDSElQX09VVF9NT0RF X1A4ODg7Ci0JCWJyZWFrOwotCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2NjoKLQkJcy0+b3V0cHV0 X21vZGUgPSBST0NLQ0hJUF9PVVRfTU9ERV9QNjY2OwotCQlicmVhazsKLQljYXNlIE1JUElfRFNJ X0ZNVF9SR0I1NjU6Ci0JCXMtPm91dHB1dF9tb2RlID0gUk9DS0NISVBfT1VUX01PREVfUDU2NTsK LQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJV0FSTl9PTigxKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0J fQotCi0Jcy0+b3V0cHV0X3R5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfRFNJOwotCi0JcmV0dXJu IDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzCi1k d19taXBpX2RzaV9lbmNvZGVyX2hlbHBlcl9mdW5jcyA9IHsKLQkuZW5hYmxlID0gZHdfbWlwaV9k c2lfZW5jb2Rlcl9lbmFibGUsCi0JLmRpc2FibGUgPSBkd19taXBpX2RzaV9lbmNvZGVyX2Rpc2Fi bGUsCi0JLmF0b21pY19jaGVjayA9IGR3X21pcGlfZHNpX2VuY29kZXJfYXRvbWljX2NoZWNrLAot fTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyBkd19taXBpX2RzaV9l bmNvZGVyX2Z1bmNzID0gewotCS5kZXN0cm95ID0gZHJtX2VuY29kZXJfY2xlYW51cCwKLX07Ci0K LXN0YXRpYyBpbnQgZHdfbWlwaV9kc2lfY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yKQotewotCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gY29uX3Rv X2RzaShjb25uZWN0b3IpOwotCi0JcmV0dXJuIGRybV9wYW5lbF9nZXRfbW9kZXMoZHNpLT5wYW5l bCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgZHdfbWlw aV9kc2lfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKLQkuZ2V0X21vZGVzID0gZHdfbWlwaV9k c2lfY29ubmVjdG9yX2dldF9tb2RlcywKLX07Ci0KLXN0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2Ry bV9jb25uZWN0b3JfZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQotewot CWRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcihjb25uZWN0b3IpOwotCWRybV9jb25uZWN0b3JfY2xl YW51cChjb25uZWN0b3IpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jf ZnVuY3MgZHdfbWlwaV9kc2lfYXRvbWljX2Nvbm5lY3Rvcl9mdW5jcyA9IHsKLQkuZmlsbF9tb2Rl cyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKLQkuZGVzdHJveSA9 IGR3X21pcGlfZHNpX2RybV9jb25uZWN0b3JfZGVzdHJveSwKLQkucmVzZXQgPSBkcm1fYXRvbWlj X2hlbHBlcl9jb25uZWN0b3JfcmVzZXQsCi0JLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1f YXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRlLAotCS5hdG9taWNfZGVzdHJv eV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlLAotfTsK LQotc3RhdGljIGludCBkd19taXBpX2RzaV9yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJt LAotCQkJCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQotewotCXN0cnVjdCBkcm1fZW5jb2RlciAq ZW5jb2RlciA9ICZkc2ktPmVuY29kZXI7Ci0Jc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv ciA9ICZkc2ktPmNvbm5lY3RvcjsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkc2ktPmRldjsKLQlp bnQgcmV0OwotCi0JZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSBkcm1fb2ZfZmluZF9wb3NzaWJs ZV9jcnRjcyhkcm0sCi0JCQkJCQkJICAgICBkZXYtPm9mX25vZGUpOwotCS8qCi0JICogSWYgd2Ug ZmFpbGVkIHRvIGZpbmQgdGhlIENSVEMocykgd2hpY2ggdGhpcyBlbmNvZGVyIGlzCi0JICogc3Vw cG9zZWQgdG8gYmUgY29ubmVjdGVkIHRvLCBpdCdzIGJlY2F1c2UgdGhlIENSVEMgaGFzCi0JICog bm90IGJlZW4gcmVnaXN0ZXJlZCB5ZXQuICBEZWZlciBwcm9iaW5nLCBhbmQgaG9wZSB0aGF0Ci0J ICogdGhlIHJlcXVpcmVkIENSVEMgaXMgYWRkZWQgbGF0ZXIuCi0JICovCi0JaWYgKGVuY29kZXIt PnBvc3NpYmxlX2NydGNzID09IDApCi0JCXJldHVybiAtRVBST0JFX0RFRkVSOwotCi0JZHJtX2Vu Y29kZXJfaGVscGVyX2FkZCgmZHNpLT5lbmNvZGVyLAotCQkJICAgICAgICZkd19taXBpX2RzaV9l bmNvZGVyX2hlbHBlcl9mdW5jcyk7Ci0JcmV0ID0gZHJtX2VuY29kZXJfaW5pdChkcm0sICZkc2kt PmVuY29kZXIsICZkd19taXBpX2RzaV9lbmNvZGVyX2Z1bmNzLAotCQkJICAgICAgIERSTV9NT0RF X0VOQ09ERVJfRFNJLCBOVUxMKTsKLQlpZiAocmV0KSB7Ci0JCURSTV9ERVZfRVJST1IoZGV2LCAi RmFpbGVkIHRvIGluaXRpYWxpemUgZW5jb2RlciB3aXRoIGRybVxuIik7Ci0JCXJldHVybiByZXQ7 Ci0JfQotCi0JZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3RvciwKLQkJCQkgJmR3X21p cGlfZHNpX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOwotCi0JZHJtX2Nvbm5lY3Rvcl9pbml0KGRy bSwgJmRzaS0+Y29ubmVjdG9yLAotCQkJICAgJmR3X21pcGlfZHNpX2F0b21pY19jb25uZWN0b3Jf ZnVuY3MsCi0JCQkgICBEUk1fTU9ERV9DT05ORUNUT1JfRFNJKTsKLQotCWRybV9jb25uZWN0b3Jf YXR0YWNoX2VuY29kZXIoY29ubmVjdG9yLCBlbmNvZGVyKTsKLQotCXJldHVybiAwOwotfQotCi1z dGF0aWMgaW50IHJvY2tjaGlwX21pcGlfcGFyc2VfZHQoc3RydWN0IGR3X21pcGlfZHNpICpkc2kp Ci17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRzaS0+ZGV2LT5vZl9ub2RlOwotCi0JZHNp LT5ncmZfcmVnbWFwID0gc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZShucCwgInJvY2tj aGlwLGdyZiIpOwotCWlmIChJU19FUlIoZHNpLT5ncmZfcmVnbWFwKSkgewotCQlEUk1fREVWX0VS Uk9SKGRzaS0+ZGV2LCAiVW5hYmxlIHRvIGdldCByb2NrY2hpcCxncmZcbiIpOwotCQlyZXR1cm4g UFRSX0VSUihkc2ktPmdyZl9yZWdtYXApOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMg c3RydWN0IGR3X21pcGlfZHNpX3BsYXRfZGF0YSByazMyODhfbWlwaV9kc2lfZHJ2X2RhdGEgPSB7 Ci0JLmRzaTBfZW5fYml0ID0gUkszMjg4X0RTSTBfU0VMX1ZPUF9MSVQsCi0JLmRzaTFfZW5fYml0 ID0gUkszMjg4X0RTSTFfU0VMX1ZPUF9MSVQsCi0JLmdyZl9zd2l0Y2hfcmVnID0gUkszMjg4X0dS Rl9TT0NfQ09ONiwKLQkubWF4X2RhdGFfbGFuZXMgPSA0LAotfTsKLQotc3RhdGljIHN0cnVjdCBk d19taXBpX2RzaV9wbGF0X2RhdGEgcmszMzk5X21pcGlfZHNpX2Rydl9kYXRhID0gewotCS5kc2kw X2VuX2JpdCA9IFJLMzM5OV9EU0kwX1NFTF9WT1BfTElULAotCS5kc2kxX2VuX2JpdCA9IFJLMzM5 OV9EU0kxX1NFTF9WT1BfTElULAotCS5ncmZfc3dpdGNoX3JlZyA9IFJLMzM5OV9HUkZfU09DX0NP TjIwLAotCS5ncmZfZHNpMF9tb2RlID0gUkszMzk5X0dSRl9EU0lfTU9ERSwKLQkuZ3JmX2RzaTBf bW9kZV9yZWcgPSBSSzMzOTlfR1JGX1NPQ19DT04yMiwKLQkuZmxhZ3MgPSBEV19NSVBJX05FRURT X1BIWV9DRkdfQ0xLIHwgRFdfTUlQSV9ORUVEU19HUkZfQ0xLLAotCS5tYXhfZGF0YV9sYW5lcyA9 IDQsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBkd19taXBpX2RzaV9k dF9pZHNbXSA9IHsKLQl7Ci0JIC5jb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzI4OC1taXBpLWRz aSIsCi0JIC5kYXRhID0gJnJrMzI4OF9taXBpX2RzaV9kcnZfZGF0YSwKLQl9LCB7Ci0JIC5jb21w YXRpYmxlID0gInJvY2tjaGlwLHJrMzM5OS1taXBpLWRzaSIsCi0JIC5kYXRhID0gJnJrMzM5OV9t aXBpX2RzaV9kcnZfZGF0YSwKLQl9LAotCXsgLyogc2VudGluZWwgKi8gfQotfTsKLU1PRFVMRV9E RVZJQ0VfVEFCTEUob2YsIGR3X21pcGlfZHNpX2R0X2lkcyk7Ci0KLXN0YXRpYyBpbnQgZHdfbWlw aV9kc2lfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKLQkJ CSAgICB2b2lkICpkYXRhKQotewotCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9mX2lkID0K LQkJCW9mX21hdGNoX2RldmljZShkd19taXBpX2RzaV9kdF9pZHMsIGRldik7Ci0JY29uc3Qgc3Ry dWN0IGR3X21pcGlfZHNpX3BsYXRfZGF0YSAqcGRhdGEgPSBvZl9pZC0+ZGF0YTsKLQlzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0 IHJlc2V0X2NvbnRyb2wgKmFwYl9yc3Q7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRhdGE7 Ci0Jc3RydWN0IGR3X21pcGlfZHNpICpkc2k7Ci0Jc3RydWN0IHJlc291cmNlICpyZXM7Ci0JaW50 IHJldDsKLQotCWRzaSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZHNpKSwgR0ZQX0tFUk5F TCk7Ci0JaWYgKCFkc2kpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZHNpLT5kZXYgPSBkZXY7Ci0J ZHNpLT5wZGF0YSA9IHBkYXRhOwotCWRzaS0+ZHBtc19tb2RlID0gRFJNX01PREVfRFBNU19PRkY7 Ci0KLQlyZXQgPSByb2NrY2hpcF9taXBpX3BhcnNlX2R0KGRzaSk7Ci0JaWYgKHJldCkKLQkJcmV0 dXJuIHJldDsKLQotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNF X01FTSwgMCk7Ci0JZHNpLT5iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsK LQlpZiAoSVNfRVJSKGRzaS0+YmFzZSkpCi0JCXJldHVybiBQVFJfRVJSKGRzaS0+YmFzZSk7Ci0K LQlkc2ktPnBsbHJlZl9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAicmVmIik7Ci0JaWYgKElTX0VS Uihkc2ktPnBsbHJlZl9jbGspKSB7Ci0JCXJldCA9IFBUUl9FUlIoZHNpLT5wbGxyZWZfY2xrKTsK LQkJRFJNX0RFVl9FUlJPUihkZXYsCi0JCQkgICAgICAiVW5hYmxlIHRvIGdldCBwbGwgcmVmZXJl bmNlIGNsb2NrOiAlZFxuIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlkc2ktPnBjbGsg PSBkZXZtX2Nsa19nZXQoZGV2LCAicGNsayIpOwotCWlmIChJU19FUlIoZHNpLT5wY2xrKSkgewot CQlyZXQgPSBQVFJfRVJSKGRzaS0+cGNsayk7Ci0JCURSTV9ERVZfRVJST1IoZGV2LCAiVW5hYmxl IHRvIGdldCBwY2xrOiAlZFxuIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKgotCSAq IE5vdGUgdGhhdCB0aGUgcmVzZXQgd2FzIG5vdCBkZWZpbmVkIGluIHRoZSBpbml0aWFsIGRldmlj ZSB0cmVlLCBzbwotCSAqIHdlIGhhdmUgdG8gYmUgcHJlcGFyZWQgZm9yIGl0IG5vdCBiZWluZyBm b3VuZC4KLQkgKi8KLQlhcGJfcnN0ID0gZGV2bV9yZXNldF9jb250cm9sX2dldChkZXYsICJhcGIi KTsKLQlpZiAoSVNfRVJSKGFwYl9yc3QpKSB7Ci0JCXJldCA9IFBUUl9FUlIoYXBiX3JzdCk7Ci0J CWlmIChyZXQgPT0gLUVOT0VOVCkgewotCQkJYXBiX3JzdCA9IE5VTEw7Ci0JCX0gZWxzZSB7Ci0J CQlEUk1fREVWX0VSUk9SKGRldiwKLQkJCQkgICAgICAiVW5hYmxlIHRvIGdldCByZXNldCBjb250 cm9sOiAlZFxuIiwgcmV0KTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQl9Ci0KLQlpZiAoYXBiX3Jz dCkgewotCQlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5wY2xrKTsKLQkJaWYgKHJldCkg ewotCQkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gZW5hYmxlIHBjbGtcbiIpOwotCQkJ cmV0dXJuIHJldDsKLQkJfQotCi0JCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KGFwYl9yc3QpOwotCQl1 c2xlZXBfcmFuZ2UoMTAsIDIwKTsKLQkJcmVzZXRfY29udHJvbF9kZWFzc2VydChhcGJfcnN0KTsK LQotCQljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5wY2xrKTsKLQl9Ci0KLQlpZiAocGRhdGEt PmZsYWdzICYgRFdfTUlQSV9ORUVEU19QSFlfQ0ZHX0NMSykgewotCQlkc2ktPnBoeV9jZmdfY2xr ID0gZGV2bV9jbGtfZ2V0KGRldiwgInBoeV9jZmciKTsKLQkJaWYgKElTX0VSUihkc2ktPnBoeV9j ZmdfY2xrKSkgewotCQkJcmV0ID0gUFRSX0VSUihkc2ktPnBoeV9jZmdfY2xrKTsKLQkJCURSTV9E RVZfRVJST1IoZGV2LAotCQkJCSAgICAgICJVbmFibGUgdG8gZ2V0IHBoeV9jZmdfY2xrOiAlZFxu IiwgcmV0KTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQl9Ci0KLQlpZiAocGRhdGEtPmZsYWdzICYg RFdfTUlQSV9ORUVEU19HUkZfQ0xLKSB7Ci0JCWRzaS0+Z3JmX2NsayA9IGRldm1fY2xrX2dldChk ZXYsICJncmYiKTsKLQkJaWYgKElTX0VSUihkc2ktPmdyZl9jbGspKSB7Ci0JCQlyZXQgPSBQVFJf RVJSKGRzaS0+Z3JmX2Nsayk7Ci0JCQlEUk1fREVWX0VSUk9SKGRldiwgIlVuYWJsZSB0byBnZXQg Z3JmX2NsazogJWRcbiIsIHJldCk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQotCi0JcmV0ID0g Y2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+cGxscmVmX2Nsayk7Ci0JaWYgKHJldCkgewotCQlEUk1f REVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBlbmFibGUgcGxscmVmX2Nsa1xuIik7Ci0JCXJldHVy biByZXQ7Ci0JfQotCi0JcmV0ID0gZHdfbWlwaV9kc2lfcmVnaXN0ZXIoZHJtLCBkc2kpOwotCWlm IChyZXQpIHsKLQkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgbWlwaV9k c2k6ICVkXG4iLCByZXQpOwotCQlnb3RvIGVycl9wbGxyZWY7Ci0JfQotCi0JZHNpLT5kc2lfaG9z dC5vcHMgPSAmZHdfbWlwaV9kc2lfaG9zdF9vcHM7Ci0JZHNpLT5kc2lfaG9zdC5kZXYgPSBkZXY7 Ci0JcmV0ID0gbWlwaV9kc2lfaG9zdF9yZWdpc3RlcigmZHNpLT5kc2lfaG9zdCk7Ci0JaWYgKHJl dCkgewotCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBNSVBJIGhvc3Q6 ICVkXG4iLCByZXQpOwotCQlnb3RvIGVycl9jbGVhbnVwOwotCX0KLQotCWlmICghZHNpLT5wYW5l bCkgewotCQlyZXQgPSAtRVBST0JFX0RFRkVSOwotCQlnb3RvIGVycl9taXBpX2RzaV9ob3N0Owot CX0KLQotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGRzaSk7Ci0JcG1fcnVudGltZV9lbmFibGUoZGV2 KTsKLQlyZXR1cm4gMDsKLQotZXJyX21pcGlfZHNpX2hvc3Q6Ci0JbWlwaV9kc2lfaG9zdF91bnJl Z2lzdGVyKCZkc2ktPmRzaV9ob3N0KTsKLWVycl9jbGVhbnVwOgotCWRzaS0+Y29ubmVjdG9yLmZ1 bmNzLT5kZXN0cm95KCZkc2ktPmNvbm5lY3Rvcik7Ci0JZHNpLT5lbmNvZGVyLmZ1bmNzLT5kZXN0 cm95KCZkc2ktPmVuY29kZXIpOwotZXJyX3BsbHJlZjoKLQljbGtfZGlzYWJsZV91bnByZXBhcmUo ZHNpLT5wbGxyZWZfY2xrKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBkd19taXBp X2RzaV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCi0J CQkgICAgICAgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGRldl9n ZXRfZHJ2ZGF0YShkZXYpOwotCi0JbWlwaV9kc2lfaG9zdF91bnJlZ2lzdGVyKCZkc2ktPmRzaV9o b3N0KTsKLQlwbV9ydW50aW1lX2Rpc2FibGUoZGV2KTsKLQotCWRzaS0+Y29ubmVjdG9yLmZ1bmNz LT5kZXN0cm95KCZkc2ktPmNvbm5lY3Rvcik7Ci0JZHNpLT5lbmNvZGVyLmZ1bmNzLT5kZXN0cm95 KCZkc2ktPmVuY29kZXIpOwotCi0JY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+cGxscmVmX2Ns ayk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyBkd19taXBpX2RzaV9v cHMgPSB7Ci0JLmJpbmQJPSBkd19taXBpX2RzaV9iaW5kLAotCS51bmJpbmQJPSBkd19taXBpX2Rz aV91bmJpbmQsCi19OwotCi1zdGF0aWMgaW50IGR3X21pcGlfZHNpX3Byb2JlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JcmV0dXJuIGNvbXBvbmVudF9hZGQoJnBkZXYtPmRldiwg JmR3X21pcGlfZHNpX29wcyk7Ci19Ci0KLXN0YXRpYyBpbnQgZHdfbWlwaV9kc2lfcmVtb3ZlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JY29tcG9uZW50X2RlbCgmcGRldi0+ZGV2 LCAmZHdfbWlwaV9kc2lfb3BzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RydWN0IHBsYXRmb3JtX2Ry aXZlciBkd19taXBpX2RzaV9kcml2ZXIgPSB7Ci0JLnByb2JlCQk9IGR3X21pcGlfZHNpX3Byb2Jl LAotCS5yZW1vdmUJCT0gZHdfbWlwaV9kc2lfcmVtb3ZlLAotCS5kcml2ZXIJCT0gewotCQkub2Zf bWF0Y2hfdGFibGUgPSBkd19taXBpX2RzaV9kdF9pZHMsCi0JCS5uYW1lCT0gRFJJVkVSX05BTUUs Ci0JfSwKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBf ZHJtX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9kcnYuYwpp bmRleCAxZDljNGE5MjAxYzguLmJmNmUwZWY4NmFiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9j a2NoaXAvcm9ja2NoaXBfZHJtX2Rydi5jCkBAIC00MzUsNyArNDM1LDcgQEAgc3RhdGljIGludCBf X2luaXQgcm9ja2NoaXBfZHJtX2luaXQodm9pZCkKIAlBRERfUk9DS0NISVBfU1VCX0RSSVZFUihj ZG5fZHBfZHJpdmVyLCBDT05GSUdfUk9DS0NISVBfQ0ROX0RQKTsKIAlBRERfUk9DS0NISVBfU1VC X0RSSVZFUihkd19oZG1pX3JvY2tjaGlwX3BsdGZtX2RyaXZlciwKIAkJCQlDT05GSUdfUk9DS0NI SVBfRFdfSERNSSk7Ci0JQUREX1JPQ0tDSElQX1NVQl9EUklWRVIoZHdfbWlwaV9kc2lfZHJpdmVy LAorCUFERF9ST0NLQ0hJUF9TVUJfRFJJVkVSKGR3X21pcGlfZHNpX3JvY2tjaGlwX2RyaXZlciwK IAkJCQlDT05GSUdfUk9DS0NISVBfRFdfTUlQSV9EU0kpOwogCUFERF9ST0NLQ0hJUF9TVUJfRFJJ VkVSKGlubm9faGRtaV9kcml2ZXIsIENPTkZJR19ST0NLQ0hJUF9JTk5PX0hETUkpOwogCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2Rydi5oIGIvZHJp dmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9kcnYuaAppbmRleCBkNjdhZDBhM2Nm MzYuLjY3YmJkMjc0YjcxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3Jv Y2tjaGlwX2RybV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBf ZHJtX2Rydi5oCkBAIC02Niw3ICs2Niw3IEBAIGludCByb2NrY2hpcF9kcm1fd2FpdF92YWN0X2Vu ZChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHVuc2lnbmVkIGludCBtc3RpbWVvdXQpOwogCiBleHRl cm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBjZG5fZHBfZHJpdmVyOwogZXh0ZXJuIHN0cnVjdCBw bGF0Zm9ybV9kcml2ZXIgZHdfaGRtaV9yb2NrY2hpcF9wbHRmbV9kcml2ZXI7Ci1leHRlcm4gc3Ry dWN0IHBsYXRmb3JtX2RyaXZlciBkd19taXBpX2RzaV9kcml2ZXI7CitleHRlcm4gc3RydWN0IHBs YXRmb3JtX2RyaXZlciBkd19taXBpX2RzaV9yb2NrY2hpcF9kcml2ZXI7CiBleHRlcm4gc3RydWN0 IHBsYXRmb3JtX2RyaXZlciBpbm5vX2hkbWlfZHJpdmVyOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9y bV9kcml2ZXIgcm9ja2NoaXBfZHBfZHJpdmVyOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2 ZXIgcm9ja2NoaXBfbHZkc19kcml2ZXI7Ci0tIAoyLjE3LjAKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRl dmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=