From owner-freebsd-net@FreeBSD.ORG Mon Oct 7 07:02:39 2013 Return-Path: Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 1D651F65 for ; Mon, 7 Oct 2013 07:02:39 +0000 (UTC) (envelope-from syuu@dokukino.com) Received: from mail-pa0-x22f.google.com (mail-pa0-x22f.google.com [IPv6:2607:f8b0:400e:c03::22f]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id E12D628C9 for ; Mon, 7 Oct 2013 07:02:38 +0000 (UTC) Received: by mail-pa0-f47.google.com with SMTP id kp14so6860202pab.6 for ; Mon, 07 Oct 2013 00:02:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dokukino.com; s=google; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :content-type; bh=ve9X9By3o5ZBkRDMqhQpD+fd7vv52QRdIhKsinGPfYM=; b=V0xmCYsj+Tw0+mYDDV3rSoye+ZPsxRTyAqLWLrdyaE8FExIpyCXCU6lXSCRihfPpJB Rbo9/xMIbiaxNoaoWRn8QXn3+ccKLdmxhi9lkgHWbcw7K5C/UTanCkx2b0tDFhfuJyV+ WdpVI+1/ru5ONcv4QbA9qBDWso+LYYNc0S+74= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:content-type; bh=ve9X9By3o5ZBkRDMqhQpD+fd7vv52QRdIhKsinGPfYM=; b=OC3kwhNivRu5RZIHeCzmc5bhak1g83d53XpwAusDJfDZFLfvF2+GgA/voNDNgsxRVq +0v6G8AafVp4Aj1HHq1No8MQHMxweELNerfF/q1G2OQJWkxQT4SmgYmorl32rn+Rfmhs EaanPCMmz4mdodJU34olktoQgNUSh8HUmFz2J66IjBjakNLLa19e96BEeHY9zpeCG66l 9N7nChV3IpdIc0k69kTo5Wi4O8G9cE6WFq1NXbRiAcLICpi4RTjrF3uNjXHPxuAGGqNF +aztGvxr/puahr/aABsM5/4K2GhEchMBFvLGFdwxVGVdKYAICd5X5nBGAV1Utz1cUlT2 gE8g== X-Gm-Message-State: ALoCoQnb/21/QxjZ4tQyqPc0vAzzvPG1KCm8lxCGf6xRvAk5AV9eC3t+ZJRJ0mF/oHgm6R6rR2yO X-Received: by 10.66.102.66 with SMTP id fm2mr30281663pab.94.1381129358458; Mon, 07 Oct 2013 00:02:38 -0700 (PDT) MIME-Version: 1.0 Received: by 10.68.220.138 with HTTP; Mon, 7 Oct 2013 00:01:58 -0700 (PDT) In-Reply-To: References: From: Takuya ASADA Date: Mon, 7 Oct 2013 16:01:58 +0900 Message-ID: Subject: Re: Adding Flow Director sysctls to ixgbe(4) (was: netmap: traffic distribution) To: "freebsd-net@freebsd.org" Content-Type: multipart/mixed; boundary=047d7bd90edecde4f304e8213c67 X-Content-Filtered-By: Mailman/MimeDel 2.1.14 X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 07 Oct 2013 07:02:39 -0000 --047d7bd90edecde4f304e8213c67 Content-Type: text/plain; charset=UTF-8 Hi, This is updated version of "ixgbetool" patch. Here's improved feature list: - signature filter list feature available - user-defined filter can be use with an ATR. To enable it, add "hw.ixgbe.cooperative_atr=1" on /boot/loader.conf Usage is as follows: ixgbetool [operation] add_sig_filter show_sig_filter del_sig_filter 2013/9/30 Takuya ASADA > Hi, > > I just implemented device specific ioctl with device specific > configuration tool. > It still doesn't support some important features such as: > - FDIR enable / disable via sysctl or tunable params > - ATR enable / disable via sysctl or tunable params > - IPv6 support on signature filter > - signature filter list > - support perfect filter > But, at least it can configure signature filter manually. > > Usage is as follows: > Usage: ixgbetool [operation] > add_sig_filter > del_sig_filter > > > 2013/9/28 hiren panchasara > >> >> >> >> On Fri, Sep 27, 2013 at 1:58 AM, Takuya ASADA wrote: >> >>> 2013/9/27 Adrian Chadd >>> >>>> On 27 September 2013 00:43, hiren panchasara < >>>> hiren.panchasara@gmail.com> wrote: >>>> >>>> >>>>> Takuya, >>>>> >>>>> I see a lot of responses/comments on proposed changes. Was anything >>>>> decided >>>>> at the end of it? As far as I can tell, its still not committed to the >>>>> tree. >>>>> >>>> >>>> I'd rather see an ioctl API for that chipset and then have a separate >>>> tool program it for now. >>>> >>> >>> Ah, like cxgbetool and cxgbe? (it has device specific tool and ioctls) >>> http://svnweb.freebsd.org/base/head/tools/tools/cxgbetool/ >>> >> >> Something like this for ixgbe would be nice to start with, imo. >> >> Cheers, >> Hiren >> >>> http://svnweb.freebsd.org/base/head/sys/dev/cxgb/ >>> >>> >>>> So, how bout we hack that up? :) >>>> >>> >>> Sound's interesting ;-) >>> Could you tell me more detail about your idea? >>> >>> >> > --047d7bd90edecde4f304e8213c67 Content-Type: application/octet-stream; name="ixgbetool-v004.diff" Content-Disposition: attachment; filename="ixgbetool-v004.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hmhcjir91 ZGlmZiAtLWdpdCBhL3N5cy9jb25mL2ZpbGVzIGIvc3lzL2NvbmYvZmlsZXMKaW5kZXggYTM3MGNm YS4uOWU1YWRhNyAxMDA2NDQKLS0tIGEvc3lzL2NvbmYvZmlsZXMKKysrIGIvc3lzL2NvbmYvZmls ZXMKQEAgLTE3MzQsNiArMTczNCw4IEBAIGRldi9peGdiZS9peGdiZV9kY2JfODI1OTguYwlvcHRp b25hbCBpeGdiZSBpbmV0IFwKIAljb21waWxlLXdpdGggIiR7Tk9STUFMX0N9IC1JJFMvZGV2L2l4 Z2JlIgogZGV2L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OS5jCW9wdGlvbmFsIGl4Z2JlIGluZXQgXAog CWNvbXBpbGUtd2l0aCAiJHtOT1JNQUxfQ30gLUkkUy9kZXYvaXhnYmUiCitkZXYvaXhnYmUvaXhn YmVfdWZpbHRlci5jCW9wdGlvbmFsIGl4Z2JlIGluZXQgXAorCWNvbXBpbGUtd2l0aCAiJHtOT1JN QUxfQ30gLUkkUy9kZXYvaXhnYmUgLURTTVAgLURJWEdCRV9GRElSIgogZGV2L2ptZS9pZl9qbWUu YwkJb3B0aW9uYWwgam1lIHBjaQogZGV2L2pveS9qb3kuYwkJCW9wdGlvbmFsIGpveQogZGV2L2pv eS9qb3lfaXNhLmMJCW9wdGlvbmFsIGpveSBpc2EKZGlmZiAtLWdpdCBhL3N5cy9kZXYvaXhnYmUv aXhnYmUuYyBiL3N5cy9kZXYvaXhnYmUvaXhnYmUuYwppbmRleCBiNjVkZjcyLi40MGQ5NDhiIDEw MDY0NAotLS0gYS9zeXMvZGV2L2l4Z2JlL2l4Z2JlLmMKKysrIGIvc3lzL2Rldi9peGdiZS9peGdi ZS5jCkBAIC0zMjYsNyArMzI2LDggQEAgc3RhdGljIGludCBpeGdiZV90b3RhbF9wb3J0czsKICoq IFRoaXMgZmVhdHVyZSBjYW4gYmUgZGlzYWJsZWQgYnkgCiAqKiBzZXR0aW5nIHRoaXMgdG8gMC4K ICovCi1zdGF0aWMgaW50IGF0cl9zYW1wbGVfcmF0ZSA9IDIwOworaW50IGl4Z2JlX2F0cl9zYW1w bGVfcmF0ZSA9IDIwOworVFVOQUJMRV9JTlQoImh3Lml4Z2JlLmF0cl9zYW1wbGVfcmF0ZSIsICZp eGdiZV9hdHJfc2FtcGxlX3JhdGUpOwogLyogCiAqKiBGbG93IERpcmVjdG9yIGFjdHVhbGx5ICdz dGVhbHMnCiAqKiBwYXJ0IG9mIHRoZSBwYWNrZXQgYnVmZmVyIGFzIGl0cwpAQCAtNDQyLDYgKzQ0 MywxMyBAQCBpeGdiZV9hdHRhY2goZGV2aWNlX3QgZGV2KQogCQkJT0lEX0FVVE8sICJlbmFibGVf YWltIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKIAkJCSZpeGdiZV9lbmFibGVfYWltLCAxLCAi SW50ZXJydXB0IE1vZGVyYXRpb24iKTsKIAorI2lmZGVmIElYR0JFX0ZESVIKKyAgICAgICAgU1lT Q1RMX0FERF9JTlQoZGV2aWNlX2dldF9zeXNjdGxfY3R4KGRldiksCisJCQlTWVNDVExfQ0hJTERS RU4oZGV2aWNlX2dldF9zeXNjdGxfdHJlZShkZXYpKSwKKwkJCU9JRF9BVVRPLCAiYXRyX3NhbXBs ZV9yYXRlIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SRCwKKwkJCSZpeGdiZV9hdHJfc2FtcGxlX3Jh dGUsIDIwLCAiQVRSIHNhbXBsZSByYXRlIik7CisjZW5kaWYKKwogCS8qCiAJKiogQWxsb3cgYSBr aW5kIG9mIHNwZWVkIGNvbnRyb2wgYnkgZm9yY2luZyB0aGUgYXV0b25lZwogCSoqIGFkdmVydGlz ZWQgc3BlZWQgbGlzdCB0byBvbmx5IGEgY2VydGFpbiB2YWx1ZSwgdGhpcwpAQCAtNjA0LDYgKzYx MiwxMyBAQCBpeGdiZV9hdHRhY2goZGV2aWNlX3QgZGV2KQogI2lmZGVmIERFVl9ORVRNQVAKIAlp eGdiZV9uZXRtYXBfYXR0YWNoKGFkYXB0ZXIpOwogI2VuZGlmIC8qIERFVl9ORVRNQVAgKi8KKwor I2lmZGVmIElYR0JFX0ZESVIKKwllcnJvciA9IGl4Z2JlX3VmaWx0ZXJfYXR0YWNoKGFkYXB0ZXIp OworCWlmIChlcnJvcikKKwkJZ290byBlcnJfbGF0ZTsKKyNlbmRpZgorCiAJSU5JVF9ERUJVR09V VCgiaXhnYmVfYXR0YWNoOiBlbmQiKTsKIAlyZXR1cm4gKDApOwogZXJyX2xhdGU6CkBAIC02OTMs NiArNzA4LDEwIEBAIGl4Z2JlX2RldGFjaChkZXZpY2VfdCBkZXYpCiAJaXhnYmVfZnJlZV9yZWNl aXZlX3N0cnVjdHVyZXMoYWRhcHRlcik7CiAJZnJlZShhZGFwdGVyLT5tdGEsIE1fREVWQlVGKTsK IAorI2lmZGVmIElYR0JFX0ZESVIKKwlpeGdiZV91ZmlsdGVyX2RldGFjaChhZGFwdGVyKTsKKyNl bmRpZgorCiAJSVhHQkVfQ09SRV9MT0NLX0RFU1RST1koYWRhcHRlcik7CiAJcmV0dXJuICgwKTsK IH0KQEAgLTE4MTYsNyArMTgzNSw3IEBAIHJldHJ5OgogCS8qIERvIHRoZSBmbG93IGRpcmVjdG9y IG1hZ2ljICovCiAJaWYgKCh0eHItPmF0cl9zYW1wbGUpICYmICghYWRhcHRlci0+ZmRpcl9yZWlu aXQpKSB7CiAJCSsrdHhyLT5hdHJfY291bnQ7Ci0JCWlmICh0eHItPmF0cl9jb3VudCA+PSBhdHJf c2FtcGxlX3JhdGUpIHsKKwkJaWYgKHR4ci0+YXRyX2NvdW50ID49IGl4Z2JlX2F0cl9zYW1wbGVf cmF0ZSkgewogCQkJaXhnYmVfYXRyKHR4ciwgbV9oZWFkKTsKIAkJCXR4ci0+YXRyX2NvdW50ID0g MDsKIAkJfQpAQCAtMzA2Miw3ICszMDgxLDcgQEAgaXhnYmVfc2V0dXBfdHJhbnNtaXRfcmluZyhz dHJ1Y3QgdHhfcmluZyAqdHhyKQogI2lmZGVmIElYR0JFX0ZESVIKIAkvKiBTZXQgdGhlIHJhdGUg YXQgd2hpY2ggd2Ugc2FtcGxlIHBhY2tldHMgKi8KIAlpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUg IT0gaXhnYmVfbWFjXzgyNTk4RUIpCi0JCXR4ci0+YXRyX3NhbXBsZSA9IGF0cl9zYW1wbGVfcmF0 ZTsKKwkJdHhyLT5hdHJfc2FtcGxlID0gaXhnYmVfYXRyX3NhbXBsZV9yYXRlOwogI2VuZGlmCiAK IAkvKiBTZXQgbnVtYmVyIG9mIGRlc2NyaXB0b3JzIGF2YWlsYWJsZSAqLwpAQCAtMzU0Niw2ICsz NTY1LDEzIEBAIGl4Z2JlX2F0cihzdHJ1Y3QgdHhfcmluZyAqdHhyLCBzdHJ1Y3QgbWJ1ZiAqbXAp CiAJY29tbW9uLmlwIF49IGlwLT5pcF9zcmMuc19hZGRyIF4gaXAtPmlwX2RzdC5zX2FkZHI7CiAK IAlxdWUgPSAmYWRhcHRlci0+cXVldWVzW3R4ci0+bWVdOworCisJaWYgKGl4Z2JlX2Nvb3BlcmF0 aXZlX2F0cikgeworCQl1MzIgaGFzaDsKKwkJaGFzaCA9IGl4Z2JlX2F0cl9jb21wdXRlX3NpZ19o YXNoXzgyNTk5KGlucHV0LCBjb21tb24pOworCQlpZiAoaXhnYmVfdWZpbHRlcl9leGlzdHMoYWRh cHRlciwgaGFzaCkpCisJCQlyZXR1cm47CisJfQogCS8qCiAJKiogVGhpcyBhc3N1bWVzIHRoZSBS eCBxdWV1ZSBhbmQgVHgKIAkqKiBxdWV1ZSBhcmUgYm91bmQgdG8gdGhlIHNhbWUgQ1BVCmRpZmYg LS1naXQgYS9zeXMvZGV2L2l4Z2JlL2l4Z2JlLmggYi9zeXMvZGV2L2l4Z2JlL2l4Z2JlLmgKaW5k ZXggNzdiNzJlZC4uMGJhMDUyMyAxMDA2NDQKLS0tIGEvc3lzL2Rldi9peGdiZS9peGdiZS5oCisr KyBiL3N5cy9kZXYvaXhnYmUvaXhnYmUuaApAQCAtOTAsNiArOTAsNyBAQAogI2luY2x1ZGUgPG1h Y2hpbmUvc21wLmg+CiAKICNpbmNsdWRlICJpeGdiZV9hcGkuaCIKKyNpbmNsdWRlICJpeGdiZV91 ZmlsdGVyLmgiCiAKIC8qIFR1bmFibGVzICovCiAKQEAgLTQ2OCw4ICs0NjksMTEgQEAgc3RydWN0 IGFkYXB0ZXIgewogCXVuc2lnbmVkIGxvbmcJCWxpbmtfaXJxOwogCiAJc3RydWN0IGl4Z2JlX2h3 X3N0YXRzIAlzdGF0czsKLX07CiAKKyNpZmRlZiBJWEdCRV9GRElSCisJc3RydWN0IGl4Z2JlX3Vm aWx0ZXIJdWZpbHRlcjsKKyNlbmRpZgorfTsKIAogLyogUHJlY2lzaW9uIFRpbWUgU3luYyAoSUVF RSAxNTg4KSBkZWZpbmVzICovCiAjZGVmaW5lIEVUSEVSVFlQRV9JRUVFMTU4OCAgICAgIDB4ODhG NwpAQCAtNTQwLDQgKzU0NCw4IEBAIGl4Z2JlX3J4X3VucmVmcmVzaGVkKHN0cnVjdCByeF9yaW5n ICpyeHIpCiAJCSAgICByeHItPm5leHRfdG9fcmVmcmVzaCAtIDEpOwogfSAgICAgICAKIAorI2lm ZGVmIElYR0JFX0ZESVIKK2V4dGVybiBpbnQgaXhnYmVfYXRyX3NhbXBsZV9yYXRlOworI2VuZGlm CisKICNlbmRpZiAvKiBfSVhHQkVfSF8gKi8KZGlmZiAtLWdpdCBhL3N5cy9kZXYvaXhnYmUvaXhn YmVfODI1OTkuYyBiL3N5cy9kZXYvaXhnYmUvaXhnYmVfODI1OTkuYwppbmRleCAzY2M4Y2Q3Li43 NGQzYWU5IDEwMDY0NAotLS0gYS9zeXMvZGV2L2l4Z2JlL2l4Z2JlXzgyNTk5LmMKKysrIGIvc3lz L2Rldi9peGdiZS9peGdiZV84MjU5OS5jCkBAIC0xNjY3LDYgKzE2NjcsNTUgQEAgczMyIGl4Z2Jl X2ZkaXJfYWRkX3NpZ25hdHVyZV9maWx0ZXJfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKIAly ZXR1cm4gSVhHQkVfU1VDQ0VTUzsKIH0KIAorLyoqCisgKiAgaXhnYmVfZmRpcl9lcmFzZV9zaWdu YXR1cmVfZmlsdGVyXzgyNTk5IC0gRXJhc2UgYSBzaWduYXR1cmUgaGFzaCBmaWx0ZXIKKyAqICBA aHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQHN0cmVhbTogaW5wdXQgYml0 c3RyZWFtCisgKiovCitzMzIgaXhnYmVfZmRpcl9lcmFzZV9zaWduYXR1cmVfZmlsdGVyXzgyNTk5 KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1bmlvbiBpeGdiZV9hdHJfaGFzaF9kd29yZCBpbnB1dCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIGl4Z2JlX2F0cl9oYXNoX2R3b3JkIGNv bW1vbikKK3sKKwl1NjQgIGZkaXJoYXNoY21kOworCXUzMiAgZmRpcmNtZDsKKworCURFQlVHRlVO QygiaXhnYmVfZmRpcl9lcmFzZV9zaWduYXR1cmVfZmlsdGVyXzgyNTk5Iik7CisKKwkvKgorCSAq IEdldCB0aGUgZmxvd190eXBlIGluIG9yZGVyIHRvIHByb2dyYW0gRkRJUkNNRCBwcm9wZXJseQor CSAqIGxvd2VzdCAyIGJpdHMgYXJlIEZESVJDTUQuTDRUWVBFLCB0aGlyZCBsb3dlc3QgYml0IGlz IEZESVJDTUQuSVBWNgorCSAqLworCXN3aXRjaCAoaW5wdXQuZm9ybWF0dGVkLmZsb3dfdHlwZSkg eworCWNhc2UgSVhHQkVfQVRSX0ZMT1dfVFlQRV9UQ1BWNDoKKwljYXNlIElYR0JFX0FUUl9GTE9X X1RZUEVfVURQVjQ6CisJY2FzZSBJWEdCRV9BVFJfRkxPV19UWVBFX1NDVFBWNDoKKwljYXNlIElY R0JFX0FUUl9GTE9XX1RZUEVfVENQVjY6CisJY2FzZSBJWEdCRV9BVFJfRkxPV19UWVBFX1VEUFY2 OgorCWNhc2UgSVhHQkVfQVRSX0ZMT1dfVFlQRV9TQ1RQVjY6CisJCWJyZWFrOworCWRlZmF1bHQ6 CisJCURFQlVHT1VUKCIgRXJyb3Igb24gZmxvdyB0eXBlIGlucHV0XG4iKTsKKwkJcmV0dXJuIElY R0JFX0VSUl9DT05GSUc7CisJfQorCisJLyogY29uZmlndXJlIEZESVJDTUQgcmVnaXN0ZXIgKi8K KwlmZGlyY21kID0gSVhHQkVfRkRJUkNNRF9DTURfUkVNT1ZFX0ZMT1cgfCAKKwkgICAgICAgICAg SVhHQkVfRkRJUkNNRF9MQVNUIHwgSVhHQkVfRkRJUkNNRF9RVUVVRV9FTjsKKwlmZGlyY21kIHw9 IGlucHV0LmZvcm1hdHRlZC5mbG93X3R5cGUgPDwgSVhHQkVfRkRJUkNNRF9GTE9XX1RZUEVfU0hJ RlQ7CisKKwkvKgorCSAqIFRoZSBsb3dlciAzMi1iaXRzIG9mIGZkaXJoYXNoY21kIGlzIGZvciBG RElSSEFTSCwgdGhlIHVwcGVyIDMyLWJpdHMKKwkgKiBpcyBmb3IgRkRJUkNNRC4gIFRoZW4gZG8g YSA2NC1iaXQgcmVnaXN0ZXIgd3JpdGUgZnJvbSBGRElSSEFTSC4KKwkgKi8KKwlmZGlyaGFzaGNt ZCA9ICh1NjQpZmRpcmNtZCA8PCAzMjsKKwlmZGlyaGFzaGNtZCB8PSBpeGdiZV9hdHJfY29tcHV0 ZV9zaWdfaGFzaF84MjU5OShpbnB1dCwgY29tbW9uKTsKKwlJWEdCRV9XUklURV9SRUc2NChodywg SVhHQkVfRkRJUkhBU0gsIGZkaXJoYXNoY21kKTsKKworCURFQlVHT1VUMSgiVHggaGFzaD0leFxu IiwgKHUzMilmZGlyaGFzaGNtZCk7CisKKwlyZXR1cm4gSVhHQkVfU1VDQ0VTUzsKK30KKwogI2Rl ZmluZSBJWEdCRV9DT01QVVRFX0JLVF9IQVNIX0lURVJBVElPTihfbikgXAogZG8geyBcCiAJdTMy IG4gPSAoX24pOyBcCmRpZmYgLS1naXQgYS9zeXMvZGV2L2l4Z2JlL2l4Z2JlX2FwaS5oIGIvc3lz L2Rldi9peGdiZS9peGdiZV9hcGkuaAppbmRleCA5MTAyM2FlLi43N2M2NDI3IDEwMDY0NAotLS0g YS9zeXMvZGV2L2l4Z2JlL2l4Z2JlX2FwaS5oCisrKyBiL3N5cy9kZXYvaXhnYmUvaXhnYmVfYXBp LmgKQEAgLTE0NCw2ICsxNDQsOSBAQCBzMzIgaXhnYmVfZmRpcl9hZGRfc2lnbmF0dXJlX2ZpbHRl cl84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAogCQkJCQkgIHVuaW9uIGl4Z2JlX2F0cl9oYXNo X2R3b3JkIGlucHV0LAogCQkJCQkgIHVuaW9uIGl4Z2JlX2F0cl9oYXNoX2R3b3JkIGNvbW1vbiwK IAkJCQkJICB1OCBxdWV1ZSk7CitzMzIgaXhnYmVfZmRpcl9lcmFzZV9zaWduYXR1cmVfZmlsdGVy XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1bmlvbiBpeGdiZV9hdHJfaGFzaF9kd29yZCBpbnB1dCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIGl4Z2JlX2F0cl9oYXNoX2R3 b3JkIGNvbW1vbik7CiBzMzIgaXhnYmVfZmRpcl9zZXRfaW5wdXRfbWFza184MjU5OShzdHJ1Y3Qg aXhnYmVfaHcgKmh3LAogCQkJCSAgICB1bmlvbiBpeGdiZV9hdHJfaW5wdXQgKmlucHV0X21hc2sp OwogczMyIGl4Z2JlX2ZkaXJfd3JpdGVfcGVyZmVjdF9maWx0ZXJfODI1OTkoc3RydWN0IGl4Z2Jl X2h3ICpodywKZGlmZiAtLWdpdCBhL3N5cy9kZXYvaXhnYmUvaXhnYmVfdWZpbHRlci5jIGIvc3lz L2Rldi9peGdiZS9peGdiZV91ZmlsdGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uZTVkNDQ2MgotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9kZXYvaXhnYmUvaXhnYmVfdWZp bHRlci5jCkBAIC0wLDAgKzEsMjYwIEBACisKKyNpbmNsdWRlICJpeGdiZS5oIgorI2luY2x1ZGUg PHN5cy9jb25mLmg+CisjaW5jbHVkZSA8c3lzL3ByaXYuaD4KKworI2lmZGVmIElYR0JFX0ZESVIK K3N0YXRpYyBkX29wZW5fdCBpeGdiZV91ZmlsdGVyX29wZW47CitzdGF0aWMgZF9jbG9zZV90IGl4 Z2JlX3VmaWx0ZXJfY2xvc2U7CitzdGF0aWMgZF9pb2N0bF90IGl4Z2JlX3VmaWx0ZXJfaW9jdGw7 CitzdGF0aWMgc3RydWN0IGNkZXZzdyBjZGV2c3cgPSB7CisgICAgICAgLmRfdmVyc2lvbiA9ICAg IERfVkVSU0lPTiwKKyAgICAgICAuZF9mbGFncyA9ICAgICAgMCwKKyAgICAgICAuZF9vcGVuID0g ICAgICAgaXhnYmVfdWZpbHRlcl9vcGVuLAorICAgICAgIC5kX2Nsb3NlID0gICAgICBpeGdiZV91 ZmlsdGVyX2Nsb3NlLAorICAgICAgIC5kX2lvY3RsID0gICAgICBpeGdiZV91ZmlsdGVyX2lvY3Rs LAorICAgICAgIC5kX25hbWUgPSAgICAgICAiaXgiLAorfTsKKworc3RhdGljIGludCB1ZmlsdGVy X2hhc2hfc2l6ZSA9IDY1NTM2OworVFVOQUJMRV9JTlQoImh3Lml4Z2JlLnVmaWx0ZXJfaGFzaF9z aXplIiwgJnVmaWx0ZXJfaGFzaF9zaXplKTsKK2ludCBpeGdiZV9jb29wZXJhdGl2ZV9hdHIgPSAw OworVFVOQUJMRV9JTlQoImh3Lml4Z2JlLmNvb3BlcmF0aXZlX2F0ciIsICZpeGdiZV9jb29wZXJh dGl2ZV9hdHIpOworCitzdGF0aWMgaW5saW5lIHZvaWQKK2xpc3RfaW5zZXJ0KHN0cnVjdCBpeGdi ZV91ZmlsdGVyICp1ZmlsdGVyLCBzdHJ1Y3QgdWZpbHRlcl9rZW50cnkgKmtlKQoreworCVRBSUxR X0lOU0VSVF9UQUlMKCZ1ZmlsdGVyLT5saXN0LCBrZSwgdHFfbGluayk7Cit9CisKK3N0YXRpYyBp bmxpbmUgdm9pZAorbGlzdF9yZW1vdmUoc3RydWN0IGl4Z2JlX3VmaWx0ZXIgKnVmaWx0ZXIsIHN0 cnVjdCB1ZmlsdGVyX2tlbnRyeSAqa2UpCit7CisJVEFJTFFfUkVNT1ZFKCZ1ZmlsdGVyLT5saXN0 LCBrZSwgdHFfbGluayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHVmaWx0ZXJfa2VudHJ5 ICoKK2xpc3RfZmluZChzdHJ1Y3QgaXhnYmVfdWZpbHRlciAqdWZpbHRlciwgdW5zaWduZWQgaWQp Cit7CisJc3RydWN0IHVmaWx0ZXJfa2VudHJ5ICprZTsKKworCVRBSUxRX0ZPUkVBQ0goa2UsICZ1 ZmlsdGVyLT5saXN0LCB0cV9saW5rKQorCQlpZiAoa2UtPmUuaWQgPT0gaWQpCisJCQlyZXR1cm4g KGtlKTsKKwlyZXR1cm4gKE5VTEwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2xpc3RfZnJl ZWFsbChzdHJ1Y3QgaXhnYmVfdWZpbHRlciAqdWZpbHRlcikKK3sKKwlzdHJ1Y3QgdWZpbHRlcl9r ZW50cnkgKmtlLCAqdDsKKworCVRBSUxRX0ZPUkVBQ0hfU0FGRShrZSwgJnVmaWx0ZXItPmxpc3Qs IHRxX2xpbmssIHQpCisJCWZyZWUoa2UsIE1fREVWQlVGKTsKK30KKworc3RhdGljIGlubGluZSB2 b2lkCitoYXNoX2luc2VydChzdHJ1Y3QgaXhnYmVfdWZpbHRlciAqdWZpbHRlciwgc3RydWN0IHVm aWx0ZXJfa2VudHJ5ICprZSkKK3sKKwlpbnQgYnVja2V0OworCQorCWJ1Y2tldCA9IGtlLT5oYXNo ICYgdWZpbHRlci0+aGFzaG1hc2s7CisJcm1fd2xvY2soJnVmaWx0ZXItPmhhc2hsb2NrKTsKKwlM SVNUX0lOU0VSVF9IRUFEKCZ1ZmlsdGVyLT5oYXNoW2J1Y2tldF0sIGtlLCBsaV9saW5rKTsKKwly bV93dW5sb2NrKCZ1ZmlsdGVyLT5oYXNobG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAor aGFzaF9yZW1vdmUoc3RydWN0IGl4Z2JlX3VmaWx0ZXIgKnVmaWx0ZXIsIHN0cnVjdCB1ZmlsdGVy X2tlbnRyeSAqa2UpCit7CisJaW50IGJ1Y2tldDsKKworCWJ1Y2tldCA9IGtlLT5oYXNoICYgdWZp bHRlci0+aGFzaG1hc2s7CisJcm1fd2xvY2soJnVmaWx0ZXItPmhhc2hsb2NrKTsKKwlMSVNUX1JF TU9WRShrZSwgbGlfbGluayk7CisJZnJlZShrZSwgTV9ERVZCVUYpOworCXJtX3d1bmxvY2soJnVm aWx0ZXItPmhhc2hsb2NrKTsKK30KKworaW50CitpeGdiZV91ZmlsdGVyX2V4aXN0cyhzdHJ1Y3Qg YWRhcHRlciAqYWRhcHRlciwgdTMyIGhhc2gpCit7CisJc3RydWN0IGl4Z2JlX3VmaWx0ZXIgKnVm aWx0ZXIgPSAmYWRhcHRlci0+dWZpbHRlcjsKKwlpbnQgYnVja2V0OworCXN0cnVjdCBybV9wcmlv dHJhY2tlciB0cmFja2VyOworCXN0cnVjdCB1ZmlsdGVyX2tlbnRyeSAqa2U7CisJaW50IGZvdW5k ID0gMDsKKworCWJ1Y2tldCA9IGhhc2ggJiB1ZmlsdGVyLT5oYXNobWFzazsKKwlybV9ybG9jaygm dWZpbHRlci0+aGFzaGxvY2ssICZ0cmFja2VyKTsKKwlMSVNUX0ZPUkVBQ0goa2UsICZ1ZmlsdGVy LT5oYXNoW2J1Y2tldF0sIGxpX2xpbmspIHsKKwkJaWYgKGtlLT5oYXNoID09IGhhc2gpIHsKKwkJ CWZvdW5kKys7CisJCQlicmVhazsKKwkJfQorCX0KKwlybV9ydW5sb2NrKCZ1ZmlsdGVyLT5oYXNo bG9jaywgJnRyYWNrZXIpOworCisJcmV0dXJuIChmb3VuZCk7Cit9CisKK2ludAoraXhnYmVfdWZp bHRlcl9hdHRhY2goc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJYWRhcHRlci0+dWZpbHRl ci5jZGV2ID0gbWFrZV9kZXYoJmNkZXZzdywgYWRhcHRlci0+aWZwLT5pZl9kdW5pdCwKKwkgICAg VUlEX1JPT1QsIEdJRF9XSEVFTCwgMDYwMCwgIiVzIiwgaWZfbmFtZShhZGFwdGVyLT5pZnApKTsK KwlpZiAoYWRhcHRlci0+dWZpbHRlci5jZGV2ID09IE5VTEwpCisJCXJldHVybiAoRU5PTUVNKTsK KworCWFkYXB0ZXItPnVmaWx0ZXIuY2Rldi0+c2lfZHJ2MSA9ICh2b2lkICopYWRhcHRlcjsKKwkJ CisJbXR4X2luaXQoJmFkYXB0ZXItPnVmaWx0ZXIubXR4LCAidWZpbHRlcl9tdHgiLCBOVUxMLCBN VFhfREVGKTsKKwlUQUlMUV9JTklUKCZhZGFwdGVyLT51ZmlsdGVyLmxpc3QpOworCWlmIChpeGdi ZV9jb29wZXJhdGl2ZV9hdHIpIHsKKwkJYWRhcHRlci0+dWZpbHRlci5oYXNoID0gaGFzaGluaXQo dWZpbHRlcl9oYXNoX3NpemUsIE1fREVWQlVGLAorCQkJJmFkYXB0ZXItPnVmaWx0ZXIuaGFzaG1h c2spOworCQlybV9pbml0X2ZsYWdzKCZhZGFwdGVyLT51ZmlsdGVyLmhhc2hsb2NrLCAidWZpbHRl cl9oYXNobG9jayIsIAorCQkJUk1fTk9XSVRORVNTKTsKKwl9CisgICAgICAgIFNZU0NUTF9BRERf SU5UKGRldmljZV9nZXRfc3lzY3RsX2N0eChhZGFwdGVyLT5kZXYpLAorCQkJU1lTQ1RMX0NISUxE UkVOKGRldmljZV9nZXRfc3lzY3RsX3RyZWUoYWRhcHRlci0+ZGV2KSksCisJCQlPSURfQVVUTywg InVmaWx0ZXJfaGFzaF9zaXplIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SRCwKKwkJCSZ1ZmlsdGVy X2hhc2hfc2l6ZSwgMjAsICJ1ZmlsdGVyIGhhc2h0YWJsZSBzaXplIik7CisgICAgICAgIFNZU0NU TF9BRERfSU5UKGRldmljZV9nZXRfc3lzY3RsX2N0eChhZGFwdGVyLT5kZXYpLAorCQkJU1lTQ1RM X0NISUxEUkVOKGRldmljZV9nZXRfc3lzY3RsX3RyZWUoYWRhcHRlci0+ZGV2KSksCisJCQlPSURf QVVUTywgImNvb3BlcmF0aXZlX2F0ciIsIENUTFRZUEVfSU5UfENUTEZMQUdfUkQsCisJCQkmaXhn YmVfY29vcGVyYXRpdmVfYXRyLCAyMCwgImNvb3BlcmF0aXZlIEFUUiIpOworCisJcmV0dXJuICgw KTsKK30KKworaW50CitpeGdiZV91ZmlsdGVyX2RldGFjaChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRl cikKK3sKKwlsaXN0X2ZyZWVhbGwoJmFkYXB0ZXItPnVmaWx0ZXIpOworCWlmIChpeGdiZV9jb29w ZXJhdGl2ZV9hdHIpIHsKKwkJcm1fZGVzdHJveSgmYWRhcHRlci0+dWZpbHRlci5oYXNobG9jayk7 CisJCWhhc2hkZXN0cm95KGFkYXB0ZXItPnVmaWx0ZXIuaGFzaCwgTV9ERVZCVUYsIAorCQkJYWRh cHRlci0+dWZpbHRlci5oYXNobWFzayk7CisJfQorCW10eF9kZXN0cm95KCZhZGFwdGVyLT51Zmls dGVyLm10eCk7CisJaWYgKGFkYXB0ZXItPnVmaWx0ZXIuY2RldikKKwkJZGVzdHJveV9kZXYoYWRh cHRlci0+dWZpbHRlci5jZGV2KTsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitpeGdi ZV91ZmlsdGVyX29wZW4oc3RydWN0IGNkZXYgKmRldiwgaW50IGZsYWdzLCBpbnQgZm1wLCBzdHJ1 Y3QgdGhyZWFkICp0ZCkKK3sKKyAgICAgICByZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50Citp eGdiZV91ZmlsdGVyX2Nsb3NlKHN0cnVjdCBjZGV2ICpkZXYsIGludCBmbGFncywgaW50IGZtdCwg c3RydWN0IHRocmVhZCAqdGQpCit7CisgICAgICAgcmV0dXJuICgwKTsKK30KKworc3RhdGljIGlu dAoraXhnYmVfdWZpbHRlcl9pb2N0bChzdHJ1Y3QgY2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIGNt ZCwgY2FkZHJfdCBkYXRhLAorICAgIGludCBmZmxhZywgc3RydWN0IHRocmVhZCAqdGQpCit7CisJ c3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIgKilkZXYtPnNpX2RydjE7 CisJc3RydWN0IGl4Z2JlX3VmaWx0ZXIgKnVmaWx0ZXIgPSAmYWRhcHRlci0+dWZpbHRlcjsKKwlp bnQgZXJyb3IgPSAwOworCisJaWYgKHByaXZfY2hlY2sodGQsIFBSSVZfRFJJVkVSKSkgeworCQly ZXR1cm4gKEVQRVJNKTsKKwl9CisKKwlpZiAoIWl4Z2JlX2Nvb3BlcmF0aXZlX2F0ciAmJiBpeGdi ZV9hdHJfc2FtcGxlX3JhdGUpCisJCXJldHVybiAoRU5PREVWKTsKKworCW10eF9sb2NrKCZ1Zmls dGVyLT5tdHgpOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBJWEdCRV9BRERfU0lHRklMVEVSOiB7 CisJCXN0cnVjdCB1ZmlsdGVyX2VudHJ5ICplID0gKHN0cnVjdCB1ZmlsdGVyX2VudHJ5ICopZGF0 YTsKKwkJc3RydWN0IHVmaWx0ZXJfa2VudHJ5ICprZTsKKwkJdW5pb24gaXhnYmVfYXRyX2hhc2hf ZHdvcmQgaW5wdXQgPSB7LmR3b3JkID0gMH07CisJCXVuaW9uIGl4Z2JlX2F0cl9oYXNoX2R3b3Jk IGNvbW1vbiA9IHsuZHdvcmQgPSAwfTsKKworCQlzd2l0Y2ggKGUtPnByb3RvKSB7CisJCWNhc2Ug VUZJTFRFUl9QUk9UT19UQ1BWNDoKKwkJCWlucHV0LmZvcm1hdHRlZC5mbG93X3R5cGUgXj0gSVhH QkVfQVRSX0ZMT1dfVFlQRV9UQ1BWNDsKKwkJCWJyZWFrOworCQljYXNlIFVGSUxURVJfUFJPVE9f VURQVjQ6CisJCQlpbnB1dC5mb3JtYXR0ZWQuZmxvd190eXBlIF49IElYR0JFX0FUUl9GTE9XX1RZ UEVfVURQVjQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVycm9yID0gRUlOVkFMOworCQkJ Z290byBvdXQ7CisJCX0KKwkJY29tbW9uLnBvcnQuc3JjIF49IGh0b25zKGUtPnNyY19wb3J0KTsK KwkJY29tbW9uLnBvcnQuZHN0IF49IGh0b25zKGUtPmRzdF9wb3J0KTsKKwkJY29tbW9uLmZsZXhf Ynl0ZXMgXj0gaHRvbnMoRVRIRVJUWVBFX0lQKTsKKwkJY29tbW9uLmlwIF49IGUtPnNyY19pcC5z X2FkZHIgXiBlLT5kc3RfaXAuc19hZGRyOworCisJCWtlID0gbWFsbG9jKHNpemVvZigqa2UpLCBN X0RFVkJVRiwgTV9OT1dBSVQgfCBNX1pFUk8pOworCQlpZiAoIWtlKSB7CisJCQllcnJvciA9IEVO T01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisJCW1lbWNweSgma2UtPmUsIGUsIHNpemVvZihrZS0+ ZSkpOworCQlrZS0+ZS5pZCA9IHVmaWx0ZXItPm5leHRfaWQrKzsKKwkJa2UtPmlucHV0ID0gaW5w dXQ7CisJCWtlLT5jb21tb24gPSBjb21tb247CisJCWlmIChpeGdiZV9jb29wZXJhdGl2ZV9hdHIp IHsKKwkJCWtlLT5oYXNoID0gaXhnYmVfYXRyX2NvbXB1dGVfc2lnX2hhc2hfODI1OTkoaW5wdXQs IAorCQkJCWNvbW1vbik7CisJCQloYXNoX2luc2VydCh1ZmlsdGVyLCBrZSk7CisJCX0KKwkJbGlz dF9pbnNlcnQodWZpbHRlciwga2UpOworCQlpeGdiZV9mZGlyX2FkZF9zaWduYXR1cmVfZmlsdGVy XzgyNTk5KCZhZGFwdGVyLT5odywKKwkJCWlucHV0LCBjb21tb24sIGUtPnF1ZV9pbmRleCk7CisJ CWJyZWFrOworCX0KKwljYXNlIElYR0JFX0dFVF9TSUdGSUxURVI6IHsKKwkJc3RydWN0IHVmaWx0 ZXJfZW50cnkgKmUgPSAoc3RydWN0IHVmaWx0ZXJfZW50cnkgKilkYXRhOworCQlzdHJ1Y3QgdWZp bHRlcl9rZW50cnkgKmtlOworCisJCWtlID0gbGlzdF9maW5kKHVmaWx0ZXIsIGUtPmlkKTsKKwkJ aWYgKGtlKQorCQkJbWVtY3B5KGUsICZrZS0+ZSwgc2l6ZW9mKCplKSk7CisJCWVsc2UKKwkJCWVy cm9yID0gRU5PRU5UOworCQlicmVhazsKKwl9OworCWNhc2UgSVhHQkVfQ0xSX1NJR0ZJTFRFUjog eworCQl1bnNpZ25lZCAqaWQgPSAodW5zaWduZWQgKilkYXRhOworCQlzdHJ1Y3QgdWZpbHRlcl9r ZW50cnkgKmtlOworCisJCWtlID0gbGlzdF9maW5kKHVmaWx0ZXIsICppZCk7CisJCWlmICgha2Up IHsKKwkJCWVycm9yID0gRU5PRU5UOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAoaXhnYmVf Y29vcGVyYXRpdmVfYXRyKQorCQkJaGFzaF9yZW1vdmUodWZpbHRlciwga2UpOworCQlsaXN0X3Jl bW92ZSh1ZmlsdGVyLCBrZSk7CisKKwkJaXhnYmVfZmRpcl9lcmFzZV9zaWduYXR1cmVfZmlsdGVy XzgyNTk5KCZhZGFwdGVyLT5odywKKwkJCWtlLT5pbnB1dCwga2UtPmNvbW1vbik7CisJCWJyZWFr OworCX0KKwljYXNlIElYR0JFX0dFVF9TSUdGSUxURVJfTEVOOiB7CisJCXVuc2lnbmVkICppZCA9 ICh1bnNpZ25lZCAqKWRhdGE7CisJCQorCQkqaWQgPSB1ZmlsdGVyLT5uZXh0X2lkOworCQlicmVh azsKKwl9CisJZGVmYXVsdDoKKwkJZXJyb3IgPSBFT1BOT1RTVVBQOworCQlicmVhazsKKwl9CisK K291dDoKKwltdHhfdW5sb2NrKCZ1ZmlsdGVyLT5tdHgpOworCXJldHVybiAoZXJyb3IpOworfQor I2VuZGlmIC8qIElYR0JFX0ZESVIgKi8KZGlmZiAtLWdpdCBhL3N5cy9kZXYvaXhnYmUvaXhnYmVf dWZpbHRlci5oIGIvc3lzL2Rldi9peGdiZS9peGdiZV91ZmlsdGVyLmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uYTJlODMzNAotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9kZXYv aXhnYmUvaXhnYmVfdWZpbHRlci5oCkBAIC0wLDAgKzEsODYgQEAKKy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgorCitDb3B5cmlnaHQgKGMpIDIwMTMgVGFrdXlhIEFTQURBCitBbGwgcmlnaHRzIHJlc2VydmVk LgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgMS4gUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAor ICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu CisKKyAyLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDaGVsc2lvIENvcnBvcmF0aW9uIG5vciB0 aGUgbmFtZXMgb2YgaXRzCisgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgICB0aGlzIHNvZnR3YXJlIHdpdGhv dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElT IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJ UyIKK0FORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4g SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUK K0xJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikg SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO CitDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0gg REFNQUdFLgorCiskRnJlZUJTRCQKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9f SVhHQkVVRklMVEVSX0hfXworI2RlZmluZSBfX0lYR0JFVUZJTFRFUl9IX18KKworZW51bSB7CisJ VUZJTFRFUl9QUk9UT19UQ1BWNCwKKwlVRklMVEVSX1BST1RPX1VEUFY0Cit9OworCitzdHJ1Y3Qg dWZpbHRlcl9lbnRyeSB7CisJdW5zaWduZWQgaWQ7CisJaW50IHByb3RvOworCXN0cnVjdCBpbl9h ZGRyIHNyY19pcDsKKwlpbnQgc3JjX3BvcnQ7CisJc3RydWN0IGluX2FkZHIgZHN0X2lwOworCWlu dCBkc3RfcG9ydDsKKwlpbnQgcXVlX2luZGV4OworfTsKKworI2RlZmluZSBJWEdCRV9BRERfU0lH RklMVEVSCV9JT1coJ2knLCAweDAsIHN0cnVjdCB1ZmlsdGVyX2VudHJ5KQorI2RlZmluZSBJWEdC RV9HRVRfU0lHRklMVEVSCV9JT1dSKCdpJywgMHgxLCBzdHJ1Y3QgdWZpbHRlcl9lbnRyeSkKKyNk ZWZpbmUgSVhHQkVfQ0xSX1NJR0ZJTFRFUglfSU9XKCdpJywgMHgyLCB1bnNpZ25lZCkKKyNkZWZp bmUgSVhHQkVfR0VUX1NJR0ZJTFRFUl9MRU4gX0lPUignaScsIDB4MywgdW5zaWduZWQpCisKKyNp ZmRlZiBfS0VSTkVMCisjaWZkZWYgSVhHQkVfRkRJUgorI2luY2x1ZGUgPHN5cy9ybWxvY2suaD4K Kworc3RydWN0IHVmaWx0ZXJfa2VudHJ5IHsKKwlzdHJ1Y3QgdWZpbHRlcl9lbnRyeSBlOworCVRB SUxRX0VOVFJZKHVmaWx0ZXJfa2VudHJ5KSB0cV9saW5rOworCUxJU1RfRU5UUlkodWZpbHRlcl9r ZW50cnkpIGxpX2xpbms7CisJdW5pb24gaXhnYmVfYXRyX2hhc2hfZHdvcmQgaW5wdXQ7CisJdW5p b24gaXhnYmVfYXRyX2hhc2hfZHdvcmQgY29tbW9uOworCXUzMiBoYXNoOworfTsKKworc3RydWN0 IGl4Z2JlX3VmaWx0ZXIgeworCXN0cnVjdCBjZGV2CQkqY2RldjsKKwlUQUlMUV9IRUFEKCwgdWZp bHRlcl9rZW50cnkpIGxpc3Q7CisJc3RydWN0IG10eAkJbXR4OworCXVuc2lnbmVkCQluZXh0X2lk OworCUxJU1RfSEVBRCgsIHVmaWx0ZXJfa2VudHJ5KSAqaGFzaDsKKwl1X2xvbmcJCQloYXNobWFz azsKKwlzdHJ1Y3Qgcm1sb2NrCQloYXNobG9jazsKK307CisKK3N0cnVjdCBhZGFwdGVyOworaW50 IGl4Z2JlX3VmaWx0ZXJfYXR0YWNoKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK2ludCBpeGdi ZV91ZmlsdGVyX2RldGFjaChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gaW50IGl4 Z2JlX2Nvb3BlcmF0aXZlX2F0cjsKK2ludCBpeGdiZV91ZmlsdGVyX2V4aXN0cyhzdHJ1Y3QgYWRh cHRlciAqYWRhcHRlciwgdTMyIGhhc2gpOworI2VuZGlmIC8qIElYR0JFX0ZESVIgKi8KKyNlbmRp ZiAvKiBfS0VSTkVMICovCisjZW5kaWYgLyogX19JWEdCRVVGSUxURVJfSF9fICovCisKZGlmZiAt LWdpdCBhL3Rvb2xzL3Rvb2xzL2l4Z2JldG9vbC9NYWtlZmlsZSBiL3Rvb2xzL3Rvb2xzL2l4Z2Jl dG9vbC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjk1ZTkz Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvdG9vbHMvaXhnYmV0b29sL01ha2VmaWxlCkBAIC0w LDAgKzEsOSBAQAorIyAkRnJlZUJTRCQKKworUFJPRz0JaXhnYmV0b29sCitTUkNTPQlpeGdiZXRv b2wuYworTk9fTUFOPQorQ0ZMQUdTKz0gLUkkey5DVVJESVJ9Ly4uLy4uLy4uL3N5cy9kZXYvaXhn YmUgLUkuCitCSU5ESVI/PSAvdXNyL3NiaW4KKworLmluY2x1ZGUgPGJzZC5wcm9nLm1rPgpkaWZm IC0tZ2l0IGEvdG9vbHMvdG9vbHMvaXhnYmV0b29sL2l4Z2JldG9vbC5jIGIvdG9vbHMvdG9vbHMv aXhnYmV0b29sL2l4Z2JldG9vbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmY1YjYxZjUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy90b29scy9peGdiZXRvb2wvaXhnYmV0 b29sLmMKQEAgLTAsMCArMSwyMzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitDb3B5cmlnaHQg KGMpIDIwMTMsIFRha3V5YSBBU0FEQS4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworIDIuIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0CisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluIHRoZQorICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAzLiBOZWl0aGVyIHRoZSBu YW1lIG9mIHRoZSBDaGVsc2lvIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAg Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk ZXJpdmVkIGZyb20KKyAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK0FORCBBTlkgRVhQUkVTUyBP UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK K0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF IENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKK0xJQUJMRSBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK0NPTlNFUVVF TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U IE9GCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig UFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitDT05UUkFDVCwgU1RSSUNUIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJ U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQi KTsKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8 ZmNudGwuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1 ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5o PgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5j bHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lz L3N5c2N0bC5oPgorI2luY2x1ZGUgPGl4Z2JlX3VmaWx0ZXIuaD4KKworc3RhdGljIHZvaWQKK3Vz YWdlKHZvaWQpCit7CisJZnByaW50ZihzdGRlcnIsICJVc2FnZTogaXhnYmV0b29sIDxpZm5hbWU+ IFtvcGVyYXRpb25dXG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlx0YWRkX3NpZ19maWx0ZXIgPHBy b3RvPiA8c3JjX2lwPiA8c3JjX3BvcnQ+IDxkc3RfaXA+IDxkc3RfcG9ydD4gPHF1ZV9pbmRleD5c biIpOworCWZwcmludGYoc3RkZXJyLCAiXHRzaG93X3NpZ19maWx0ZXJcbiIpOworCWZwcmludGYo c3RkZXJyLCAiXHRkZWxfc2lnX2ZpbHRlciA8aWQ+XG4iKTsKK30KKworc3RhdGljIGludCAKK2Fk ZF9zaWdfZmlsdGVyKGludCBmZCwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlzdHJ1Y3Qg dWZpbHRlcl9lbnRyeSBmaWx0ZXI7CisJaW50IGVycm9yOworCisJaWYgKGFyZ2MgIT0gOSkgCisJ CXJldHVybiAtMTsKKworCWlmICghc3RyY21wKGFyZ3ZbM10sICJ0Y3B2NCIpKQorCQlmaWx0ZXIu cHJvdG8gPSBVRklMVEVSX1BST1RPX1RDUFY0OworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlszXSwg InVkcHY0IikpCisJCWZpbHRlci5wcm90byA9IFVGSUxURVJfUFJPVE9fVURQVjQ7CisJZWxzZQor CQlyZXR1cm4gLTE7CisJZXJyb3IgPSBpbmV0X2F0b24oYXJndls0XSwgJmZpbHRlci5zcmNfaXAp OworCWlmIChlcnJvciAhPSAxKQorCQlyZXR1cm4gZXJyb3I7CisJZXJybm8gPSAwOworCWZpbHRl ci5zcmNfcG9ydCA9IHN0cnRvbChhcmd2WzVdLCBOVUxMLCAwKTsKKwlpZiAoZXJybm8pCisJCXJl dHVybiBlcnJubzsKKwllcnJvciA9IGluZXRfYXRvbihhcmd2WzZdLCAmZmlsdGVyLmRzdF9pcCk7 CisJaWYgKGVycm9yICE9IDEpCisJCXJldHVybiBlcnJvcjsKKwllcnJubyA9IDA7CisJZmlsdGVy LmRzdF9wb3J0ID0gc3RydG9sKGFyZ3ZbN10sIE5VTEwsIDApOworCWlmIChlcnJubykKKwkJcmV0 dXJuIGVycm5vOworCWVycm5vID0gMDsKKwlmaWx0ZXIucXVlX2luZGV4ID0gc3RydG9sKGFyZ3Zb OF0sIE5VTEwsIDApOworCWlmIChlcnJubykKKwkJcmV0dXJuIGVycm5vOworCisJZXJyb3IgPSBp b2N0bChmZCwgSVhHQkVfQUREX1NJR0ZJTFRFUiwgJmZpbHRlcik7CisJaWYgKGVycm9yKSB7CisJ CXBlcnJvcigiaXhnYmV0b29sIik7CisJCWNsb3NlKGZkKTsKKwkJZXhpdCgxKTsKKwl9CisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCitmaWx0ZXJfcHJvdG9fc3Ry KGludCBwcm90bykKK3sKKwljb25zdCBjaGFyICpzdHI7CisKKwlzd2l0Y2ggKHByb3RvKSB7CisJ Y2FzZSBVRklMVEVSX1BST1RPX1RDUFY0OgorCQlzdHIgPSAidGNwdjQiOworCQlicmVhazsKKwlj YXNlIFVGSUxURVJfUFJPVE9fVURQVjQ6CisJCXN0ciA9ICJ1ZHB2NCI7CisJCWJyZWFrOworCWRl ZmF1bHQ6CisJCXN0ciA9ICIoaW52YWwpIjsKKwl9CisJcmV0dXJuIHN0cjsKK30KKworc3RhdGlj IGludCAKK3Nob3dfc2lnX2ZpbHRlcihpbnQgZmQsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7 CisJdW5zaWduZWQgaTsKKwl1bnNpZ25lZCBsZW47CisJaW50IGVycm9yOworCisJaWYgKGFyZ2Mg IT0gMykgCisJCXJldHVybiAtMTsKKworCWVycm9yID0gaW9jdGwoZmQsIElYR0JFX0dFVF9TSUdG SUxURVJfTEVOLCAmbGVuKTsKKwlpZiAoZXJyb3IpIHsKKwkJcGVycm9yKCJpeGdiZXRvb2wiKTsK KwkJY2xvc2UoZmQpOworCQlleGl0KDEpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkr KykgeworCQlzdHJ1Y3QgdWZpbHRlcl9lbnRyeSBmaWx0ZXI7CisKKwkJZmlsdGVyLmlkID0gaTsK KwkJZXJyb3IgPSBpb2N0bChmZCwgSVhHQkVfR0VUX1NJR0ZJTFRFUiwgJmZpbHRlcik7CisJCWlm IChlcnJvcikKKwkJCWNvbnRpbnVlOworCQlwcmludGYoImlkOiAldVxuIiwgZmlsdGVyLmlkKTsK KwkJcHJpbnRmKCJwcm90bzogJXNcbiIsIGZpbHRlcl9wcm90b19zdHIoZmlsdGVyLnByb3RvKSk7 CisJCXByaW50Zigic3JjX2lwOiAlc1xuIiwgaW5ldF9udG9hKGZpbHRlci5zcmNfaXApKTsKKwkJ cHJpbnRmKCJzcmNfcG9ydDogJWRcbiIsIGZpbHRlci5zcmNfcG9ydCk7CisJCXByaW50ZigiZHN0 X2lwOiAlc1xuIiwgaW5ldF9udG9hKGZpbHRlci5kc3RfaXApKTsKKwkJcHJpbnRmKCJkc3RfcG9y dDogJWRcbiIsIGZpbHRlci5kc3RfcG9ydCk7CisJCXByaW50ZigicXVlX2luZGV4OiAlZFxuIiwg ZmlsdGVyLnF1ZV9pbmRleCk7CisJCXByaW50ZigiXG4iKTsKKwl9CisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgCitkZWxfc2lnX2ZpbHRlcihpbnQgZmQsIGludCBhcmdjLCBjaGFyICphcmd2 W10pCit7CisJdW5zaWduZWQgaWQ7CisJaW50IGVycm9yOworCisJaWYgKGFyZ2MgIT0gNCkgCisJ CXJldHVybiAtMTsKKworCWVycm5vID0gMDsKKwlpZCA9IHN0cnRvdWwoYXJndlszXSwgTlVMTCwg MCk7CisJaWYgKGVycm5vKQorCQlyZXR1cm4gZXJybm87CisKKwllcnJvciA9IGlvY3RsKGZkLCBJ WEdCRV9DTFJfU0lHRklMVEVSLCAmaWQpOworCWlmIChlcnJvcikgeworCQlwZXJyb3IoIml4Z2Jl dG9vbCIpOworCQljbG9zZShmZCk7CisJCWV4aXQoMSk7CisJfQorCXJldHVybiAwOworfQorCitp bnQgCittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaW50IHJldDsKKwljaGFyIGJ1 Zls2NF07CisJaW50IGZkOworCWludCBpZm5vOworCWludCBjb29wX2F0cjsKKwlpbnQgYXRyOwor CXNpemVfdCBjb29wX2F0cl9zaXplID0gc2l6ZW9mKGNvb3BfYXRyKTsKKwlzaXplX3QgYXRyX3Np emUgPSBzaXplb2YoYXRyKTsKKworCWlmIChhcmdjIDwgMykgeworCQl1c2FnZSgpOworCQlleGl0 KDEpOworCX0KKwlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiL2Rldi8lcyIsIGFyZ3ZbMV0p OworCWlmICgoZmQgPSBvcGVuKGJ1ZiwgT19SRFdSKSkgPCAwKSB7CisJCXBlcnJvcigiaXhnYmV0 b29sIik7CisJCWV4aXQoMSk7CisJfQorCXNzY2FuZihhcmd2WzFdLCAiaXglZCIsICZpZm5vKTsK KwlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiZGV2Lml4LiVkLmNvb3BlcmF0aXZlX2F0ciIs IGlmbm8pOworCXJldCA9IHN5c2N0bGJ5bmFtZShidWYsICZjb29wX2F0ciwgJmNvb3BfYXRyX3Np emUsIE5VTEwsIDApOworCWlmIChyZXQpIHsKKwkJcGVycm9yKCJpeGdiZXRvb2wiKTsKKwkJZXhp dCgxKTsKKwl9CisJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgImRldi5peC4lZC5hdHJfc2Ft cGxlX3JhdGUiLCBpZm5vKTsKKwlyZXQgPSBzeXNjdGxieW5hbWUoYnVmLCAmYXRyLCAmYXRyX3Np emUsIE5VTEwsIDApOworCWlmIChyZXQpIHsKKwkJcGVycm9yKCJpeGdiZXRvb2wiKTsKKwkJZXhp dCgxKTsKKwl9CisJaWYgKCFjb29wX2F0ciAmJiBhdHIpIHsKKwkJcHJpbnRmKCJUbyB1c2UgdXNl ciBkZWZpbmVkIGZpbHRlciwgeW91IG5lZWQgdG8gYWRkICdody5peGdiZS5jb29wZXJhdGl2ZV9h dHI9MScgb24gL2Jvb3QvbG9hZGVyLmNvbmYgYW5kIHJlYm9vdFxuIik7CisJCWNsb3NlKGZkKTsK KwkJZXhpdCgxKTsKKwl9CisJaWYgKCFzdHJjbXAoYXJndlsyXSwgImFkZF9zaWdfZmlsdGVyIikp CisJCXJldCA9IGFkZF9zaWdfZmlsdGVyKGZkLCBhcmdjLCBhcmd2KTsKKwllbHNlIGlmICghc3Ry Y21wKGFyZ3ZbMl0sICJzaG93X3NpZ19maWx0ZXIiKSkKKwkJcmV0ID0gc2hvd19zaWdfZmlsdGVy KGZkLCBhcmdjLCBhcmd2KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMl0sICJkZWxfc2lnX2Zp bHRlciIpKQorCQlyZXQgPSBkZWxfc2lnX2ZpbHRlcihmZCwgYXJnYywgYXJndik7CisJZWxzZSAK KwkJcmV0ID0gLTE7CisKKwlpZiAocmV0KQorCQl1c2FnZSgpOworCisJY2xvc2UoZmQpOworCisJ cmV0dXJuIChyZXQpOworfQorCg== --047d7bd90edecde4f304e8213c67--