From owner-freebsd-hackers@FreeBSD.ORG Sat Oct 16 23:16:20 2010 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B8371106564A; Sat, 16 Oct 2010 23:16:20 +0000 (UTC) (envelope-from yanegomi@gmail.com) Received: from mail-iw0-f182.google.com (mail-iw0-f182.google.com [209.85.214.182]) by mx1.freebsd.org (Postfix) with ESMTP id 536348FC1A; Sat, 16 Oct 2010 23:16:20 +0000 (UTC) Received: by iwn41 with SMTP id 41so1156731iwn.13 for ; Sat, 16 Oct 2010 16:16:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:sender:received :in-reply-to:references:date:x-google-sender-auth:message-id:subject :from:to:cc:content-type; bh=SmVNNZqj29Gn/qpNyq5Z13mghAyt156zWSENwnw6FqI=; b=PSh7CXDeHHnAqgQCkgma+VQpYHMY/Ym8bb48ZO+rI1o6S4nn5CnwEjsN7KrzqzY+Uz LLppeMN4Be25af7TxaHBYaENm3h0478ar3hKiZlOfGpu+k/LQwrBqKoBSBYZGtau4hGJ rL5kKBfR4CurUXZs/kvvG88A+dIy5C11x4klY= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type; b=oD2FQ+IyQ7NSLUZuhGLBXcwqgshVADwJtGi3eOeSu+e/J0hcSIsq00u6rw/ypVvzgQ zxulGm3d94obdIhRwsh2FYUh/7Scbyshpm19EFLrfyBBVE5/hvceHIxt1BoQD5fv1tFK g9kwykmbNQF0np0K4uQf3K+5Q1IU6nbP+FyZU= MIME-Version: 1.0 Received: by 10.231.147.202 with SMTP id m10mr2006806ibv.2.1287270979677; Sat, 16 Oct 2010 16:16:19 -0700 (PDT) Sender: yanegomi@gmail.com Received: by 10.231.184.3 with HTTP; Sat, 16 Oct 2010 16:16:19 -0700 (PDT) In-Reply-To: References: <86fwyq8rsc.fsf@ds4.des.no> <86d3tujh72.fsf@ds4.des.no> <864of680wv.fsf@ds4.des.no> <8662zkurx9.fsf@ds4.des.no> <8662zg586z.fsf@ds4.des.no> Date: Sat, 16 Oct 2010 16:16:19 -0700 X-Google-Sender-Auth: w8N4GVWJoN2GBLcFMaxLpKUkRHE Message-ID: From: Garrett Cooper To: Garrett Cooper Content-Type: multipart/mixed; boundary=001485ea873c7936730492c421bb Cc: =?ISO-8859-1?Q?Dag=2DErling_Sm=F8rgrav?= , Ivan Voras , freebsd-hackers@freebsd.org Subject: Re: Why is TUNABLE_INT discouraged? X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 16 Oct 2010 23:16:20 -0000 --001485ea873c7936730492c421bb Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable 2010/10/16 Garrett Cooper : > 2010/8/12 Dag-Erling Sm=F8rgrav : >> Garrett Cooper writes: >>> Dag-Erling Sm=F8rgrav writes: >>> > It might be a good idea to introduce TUNABLE_POINTER and TUNABLE_SIZE= . >>> I would actually argue against doing that because it would only create >>> divergence between sysctl and tunable KPIs... >> >> Not if we also introduce corresponding SYSCTLs. =A0Note that my idea is = to >> have these as aliases for the correct primitive types. >> >>> (BTW, when you say TUNABLE_SIZE, I assume it would be a size_t quantity= ?) >> >> Yes. >> >>> Something might need to be done to the values returned by the tunables >>> though, because they don't respect boundaries, and can overflow right >>> now (which exacerbates the issue with values crammed into smaller >>> datatypes)... >> >> Yes. =A0How about this: >> >> =A0- rename getenv_quad() to getenv_signed() and getenv_unsigned() >> =A0- add min / max arguments >> =A0- implement getenv_quad() (and all the others) in terms of >> =A0 getenv_number() >> >> e.g. >> >> int >> getenv_uint(const char *name, unsigned int *data) >> { >> =A0 =A0 =A0 =A0unsigned long long tmp; >> =A0 =A0 =A0 =A0int rval; >> >> =A0 =A0 =A0 =A0if ((rval =3D getenv_unsigned(name, &tmp, 0, UINT_MAX)) = =3D=3D 0) >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*data =3D (unsigned int)tmp; >> =A0 =A0 =A0 =A0return (rval); >> } >> >> (note that due to the min / max arguments, the complexity of handling >> both signed and unsigned values in the same function probably exceeds >> the complexity of having two very similar functions) > > Here's a draft of this work des@ challenged me to a while back. It > works well as demonstrated with my tests. The only catch with > detecting bounds is that if it's the minimum in the case of signed or > maximum representable value in the case of unsigned, then strtoq, etc > will clamp the value to the maximum representable value. > > Other than that it works well, and now tunables represented by > unsigned values should work better. > > Please let me know what you all think. > > Thanks! > -Garrett > > PS I added uquad_t for consistency in the APIs, even though quad_t was > deprecated, but I didn't bump __FreeBSD_version__ -- wasn't sure if I > should have done that). Let's try with the patch attached... --001485ea873c7936730492c421bb Content-Type: application/octet-stream; name="tunables-enhancement.diff" Content-Disposition: attachment; filename="tunables-enhancement.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gfd3u0a11 SW5kZXg6IHN5cy9rZXJuL2tlcm5fZW52aXJvbm1lbnQuYwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMva2Vy bi9rZXJuX2Vudmlyb25tZW50LmMJKHJldmlzaW9uIDIxMzkzNykKKysrIHN5cy9rZXJuL2tlcm5f ZW52aXJvbm1lbnQuYwkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUg PHN5cy9zeXNlbnQuaD4KICNpbmNsdWRlIDxzeXMvc3lzcHJvdG8uaD4KICNpbmNsdWRlIDxzeXMv bGlia2Vybi5oPgorI2luY2x1ZGUgPHN5cy9saW1pdHMuaD4KICNpbmNsdWRlIDxzeXMva2Vudi5o PgogCiAjaW5jbHVkZSA8c2VjdXJpdHkvbWFjL21hY19mcmFtZXdvcmsuaD4KQEAgLTQ0MiwzMiAr NDQzLDExNSBAQAogfQogCiAvKgotICogUmV0dXJuIGEgc3RyaW5nIHZhbHVlIGZyb20gYW4gZW52 aXJvbm1lbnQgdmFyaWFibGUuCisgKiBSZXR1cm4gdGhlIG11bHRpcGxpZXIgZm9yIGEgdXNlciBz cGVjaWZpZWQgc3VmZml4IGZyb20gYSBnZXRlbnYgY2FsbC4KICAqLwordWludG1heF90CitnZXRl bnZfcGFyc2Vfc3VmZml4KGNvbnN0IGNoYXIgc3VmZml4KQoreworCXVpbnRtYXhfdCBtdWx0aXBs aWVyID0gMTsKKworCXN3aXRjaCAoc3VmZml4KSB7CisJY2FzZSAndCc6IGNhc2UgJ1QnOgorCQlt dWx0aXBsaWVyICo9IDEwMjQ7CisJY2FzZSAnZyc6IGNhc2UgJ0cnOgorCQltdWx0aXBsaWVyICo9 IDEwMjQ7CisJY2FzZSAnbSc6IGNhc2UgJ00nOgorCQltdWx0aXBsaWVyICo9IDEwMjQ7CisJY2Fz ZSAnayc6IGNhc2UgJ0snOgorCQltdWx0aXBsaWVyICo9IDEwMjQ7CisJY2FzZSAnXDAnOgorCQli cmVhazsKKwlkZWZhdWx0OgorCQltdWx0aXBsaWVyID0gMDsKKwl9CisKKwlyZXR1cm4gKG11bHRp cGxpZXIpOworfQorCisvKgorICogUmV0dXJuIGEgc2lnbmVkIHF1YW50aXR5IGZyb20gYW4gZW52 aXJvbm1lbnQgdmFyaWFibGUuCisgKi8KIGludAotZ2V0ZW52X3N0cmluZyhjb25zdCBjaGFyICpu YW1lLCBjaGFyICpkYXRhLCBpbnQgc2l6ZSkKK2dldGVudl9zaWduZWQoY29uc3QgY2hhciAqbmFt ZSwgaW50bWF4X3QgKmRhdGEsIGNvbnN0IGludG1heF90IG1pbiwKKyAgICBjb25zdCBpbnRtYXhf dCBtYXgpCiB7Ci0JY2hhciAqdG1wOworCXVpbnRtYXhfdAltdWx0aXBsaWVyOworCWludG1heF90 CWl2OworCWludAkJcmV0X2NvZGU7CisJY2hhcgkJKnZhbHVlOworCWNoYXIJCSp2dHA7CiAKLQl0 bXAgPSBnZXRlbnYobmFtZSk7Ci0JaWYgKHRtcCAhPSBOVUxMKSB7Ci0JCXN0cmxjcHkoZGF0YSwg dG1wLCBzaXplKTsKLQkJZnJlZWVudih0bXApOwotCQlyZXR1cm4gKDEpOwotCX0gZWxzZQotCQly ZXR1cm4gKDApOworCXJldF9jb2RlID0gMDsKKworCXZhbHVlID0gZ2V0ZW52KG5hbWUpOworCWlm ICh2YWx1ZSA9PSBOVUxMKQorCQlyZXR1cm4gKHJldF9jb2RlKTsKKwlpdiA9IHN0cnRvcSh2YWx1 ZSwgJnZ0cCwgMCk7CisJaWYgKHZ0cCA9PSB2YWx1ZSB8fCAodnRwWzBdICE9ICdcMCcgJiYgdnRw WzFdICE9ICdcMCcpIHx8CisJICAgIChtdWx0aXBsaWVyID0gZ2V0ZW52X3BhcnNlX3N1ZmZpeCh2 dHBbMF0pKSA9PSAwKSB7CisJCS8qIAorCQkgKiBDYXRjaCBlcnJvcnMgaW4gcGFyc2luZyB0aGUg bnVtYmVyLCBiYWQgaW5wdXQsIG9yIHRoZQorCQkgKiBzdWZmaXggaWYgb25lIHdhcyBzcGVjaWZp ZWQuCisJCSAqLworCQk7CisJfSBlbHNlIHsKKwkJaXYgKj0gbXVsdGlwbGllcjsKKwkJaWYgKG1p biA8PSBpdiAmJiBpdiA8PSBtYXgpIHsKKwkJCSpkYXRhID0gaXY7CisJCQlyZXRfY29kZSA9IDE7 CisJCX0KKwl9CisJZnJlZWVudih2YWx1ZSk7CisJcmV0dXJuIChyZXRfY29kZSk7CiB9CiAKIC8q CisgKiBSZXR1cm4gYW4gdW5zaWduZWQgcXVhbnRpdHkgZnJvbSBhbiBlbnZpcm9ubWVudCB2YXJp YWJsZS4KKyAqLworaW50CitnZXRlbnZfdW5zaWduZWQoY29uc3QgY2hhciAqbmFtZSwgdWludG1h eF90ICpkYXRhLCBjb25zdCB1aW50bWF4X3QgbWluLAorICAgIGNvbnN0IHVpbnRtYXhfdCBtYXgp Cit7CisJdWludG1heF90CW11bHRpcGxpZXI7CisJdWludG1heF90CXVpdjsKKwlpbnQJCXJldF9j b2RlOworCWNoYXIJCSp2YWx1ZTsKKwljaGFyCQkqdnRwOworCisJcmV0X2NvZGUgPSAwOworCisJ dmFsdWUgPSBnZXRlbnYobmFtZSk7CisJaWYgKHZhbHVlID09IE5VTEwpCisJCXJldHVybiAocmV0 X2NvZGUpOworCXVpdiA9IHN0cnRvdXEodmFsdWUsICZ2dHAsIDApOworCWlmICh2dHAgPT0gdmFs dWUgfHwgKHZ0cFswXSAhPSAnXDAnICYmIHZ0cFsxXSAhPSAnXDAnKSB8fAorCSAgICAobXVsdGlw bGllciA9IGdldGVudl9wYXJzZV9zdWZmaXgodnRwWzBdKSkgPT0gMCkgeworCQkvKiAKKwkJICog Q2F0Y2ggZXJyb3JzIGluIHBhcnNpbmcgdGhlIG51bWJlciwgYmFkIGlucHV0LCBvciB0aGUKKwkJ ICogc3VmZml4IGlmIG9uZSB3YXMgc3BlY2lmaWVkLgorCQkgKi8KKwkJOworCX0gZWxzZSB7CisJ CXVpdiAqPSBtdWx0aXBsaWVyOworCQlpZiAobWluIDw9IHVpdiAmJiB1aXYgPD0gbWF4KSB7CisJ CQkqZGF0YSA9IHVpdjsKKwkJCXJldF9jb2RlID0gMTsKKwkJfQorCX0KKwlmcmVlZW52KHZhbHVl KTsKKwlyZXR1cm4gKHJldF9jb2RlKTsKK30KKworLyoKICAqIFJldHVybiBhbiBpbnRlZ2VyIHZh bHVlIGZyb20gYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuCiAgKi8KIGludAogZ2V0ZW52X2ludChj b25zdCBjaGFyICpuYW1lLCBpbnQgKmRhdGEpCiB7Ci0JcXVhZF90IHRtcDsKKwlpbnRtYXhfdCB0 bXA7CiAJaW50IHJ2YWw7CiAKLQlydmFsID0gZ2V0ZW52X3F1YWQobmFtZSwgJnRtcCk7CisJcnZh bCA9IGdldGVudl9zaWduZWQobmFtZSwgJnRtcCwgSU5UX01JTiwgSU5UX01BWCk7CiAJaWYgKHJ2 YWwpCiAJCSpkYXRhID0gKGludCkgdG1wOwogCXJldHVybiAocnZhbCk7CkBAIC00NzksMTAgKzU2 MywxMCBAQAogaW50CiBnZXRlbnZfdWludChjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQg KmRhdGEpCiB7Ci0JcXVhZF90IHRtcDsKKwlpbnRtYXhfdCB0bXA7CiAJaW50IHJ2YWw7CiAKLQly dmFsID0gZ2V0ZW52X3F1YWQobmFtZSwgJnRtcCk7CisJcnZhbCA9IGdldGVudl91bnNpZ25lZChu YW1lLCAmdG1wLCAwLCBVSU5UX01BWCk7CiAJaWYgKHJ2YWwpCiAJCSpkYXRhID0gKHVuc2lnbmVk IGludCkgdG1wOwogCXJldHVybiAocnZhbCk7CkBAIC00OTQsMTAgKzU3OCwxMCBAQAogaW50CiBn ZXRlbnZfbG9uZyhjb25zdCBjaGFyICpuYW1lLCBsb25nICpkYXRhKQogewotCXF1YWRfdCB0bXA7 CisJaW50bWF4X3QgdG1wOwogCWludCBydmFsOwogCi0JcnZhbCA9IGdldGVudl9xdWFkKG5hbWUs ICZ0bXApOworCXJ2YWwgPSBnZXRlbnZfc2lnbmVkKG5hbWUsICZ0bXAsIExPTkdfTUlOLCBMT05H X01BWCk7CiAJaWYgKHJ2YWwpCiAJCSpkYXRhID0gKGxvbmcpIHRtcDsKIAlyZXR1cm4gKHJ2YWwp OwpAQCAtNTA5LDUxICs1OTMsOTAgQEAKIGludAogZ2V0ZW52X3Vsb25nKGNvbnN0IGNoYXIgKm5h bWUsIHVuc2lnbmVkIGxvbmcgKmRhdGEpCiB7Ci0JcXVhZF90IHRtcDsKKwlpbnRtYXhfdCB0bXA7 CiAJaW50IHJ2YWw7CiAKLQlydmFsID0gZ2V0ZW52X3F1YWQobmFtZSwgJnRtcCk7CisJcnZhbCA9 IGdldGVudl91bnNpZ25lZChuYW1lLCAmdG1wLCAwLCBVTE9OR19NQVgpOwogCWlmIChydmFsKQog CQkqZGF0YSA9ICh1bnNpZ25lZCBsb25nKSB0bXA7CiAJcmV0dXJuIChydmFsKTsKIH0KIAogLyoK KyAqIFJldHVybiBhIHBvaW50ZXIgZnJvbSBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAqLwor aW50CitnZXRlbnZfcG9pbnRlcihjb25zdCBjaGFyICpuYW1lLCB1aW50cHRyX3QgKmRhdGEpCit7 CisJaW50bWF4X3QgdG1wOworCWludCBydmFsOworCisJcnZhbCA9IGdldGVudl91bnNpZ25lZChu YW1lLCAmdG1wLCAwLCBVSU5UUFRSX01BWCk7CisJaWYgKHJ2YWwpCisJCSpkYXRhID0gKHVpbnRw dHJfdCkgdG1wOworCXJldHVybiAocnZhbCk7Cit9CisKKy8qCiAgKiBSZXR1cm4gYSBxdWFkX3Qg dmFsdWUgZnJvbSBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KICAqLwogaW50CiBnZXRlbnZfcXVh ZChjb25zdCBjaGFyICpuYW1lLCBxdWFkX3QgKmRhdGEpCiB7Ci0JY2hhcgkqdmFsdWU7Ci0JY2hh cgkqdnRwOwotCXF1YWRfdAlpdjsKKwlpbnRtYXhfdCB0bXA7CisJaW50IHJ2YWw7CiAKLQl2YWx1 ZSA9IGdldGVudihuYW1lKTsKLQlpZiAodmFsdWUgPT0gTlVMTCkKKwlydmFsID0gZ2V0ZW52X3Np Z25lZChuYW1lLCAmdG1wLCBRVUFEX01JTiwgUVVBRF9NQVgpOworCWlmIChydmFsKQorCQkqZGF0 YSA9IChxdWFkX3QpIHRtcDsKKwlyZXR1cm4gKHJ2YWwpOworfQorCisvKgorICogUmV0dXJuIGEg dXF1YWRfdCB2YWx1ZSBmcm9tIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLgorICovCitpbnQKK2dl dGVudl91cXVhZChjb25zdCBjaGFyICpuYW1lLCB1cXVhZF90ICpkYXRhKQoreworCWludG1heF90 IHRtcDsKKwlpbnQgcnZhbDsKKworCXJ2YWwgPSBnZXRlbnZfdW5zaWduZWQobmFtZSwgJnRtcCwg MCwgVVFVQURfTUFYKTsKKwlpZiAocnZhbCkKKwkJKmRhdGEgPSAodXF1YWRfdCkgdG1wOworCXJl dHVybiAocnZhbCk7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBzaXplX3QgdmFsdWUgZnJvbSBhbiBl bnZpcm9ubWVudCB2YXJpYWJsZS4KKyAqLworaW50CitnZXRlbnZfc2l6ZShjb25zdCBjaGFyICpu YW1lLCBzaXplX3QgKmRhdGEpCit7CisJaW50bWF4X3QgdG1wOworCWludCBydmFsOworCisJcnZh bCA9IGdldGVudl91bnNpZ25lZChuYW1lLCAmdG1wLCAwLCBTSVpFX01BWCk7CisJaWYgKHJ2YWwp CisJCSpkYXRhID0gKHNpemVfdCkgdG1wOworCXJldHVybiAocnZhbCk7Cit9CisKKy8qCisgKiBS ZXR1cm4gYSBzdHJpbmcgdmFsdWUgZnJvbSBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAqLwor aW50CitnZXRlbnZfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKmRhdGEsIHNpemVfdCBz aXplKQoreworCWNoYXIgKnRtcDsKKworCXRtcCA9IGdldGVudihuYW1lKTsKKwlpZiAodG1wICE9 IE5VTEwpIHsKKwkJc3RybGNweShkYXRhLCB0bXAsIHNpemUpOworCQlmcmVlZW52KHRtcCk7CisJ CXJldHVybiAoMSk7CisJfSBlbHNlCiAJCXJldHVybiAoMCk7Ci0JaXYgPSBzdHJ0b3EodmFsdWUs ICZ2dHAsIDApOwotCWlmICh2dHAgPT0gdmFsdWUgfHwgKHZ0cFswXSAhPSAnXDAnICYmIHZ0cFsx XSAhPSAnXDAnKSkgewotCQlmcmVlZW52KHZhbHVlKTsKLQkJcmV0dXJuICgwKTsKLQl9Ci0Jc3dp dGNoICh2dHBbMF0pIHsKLQljYXNlICd0JzogY2FzZSAnVCc6Ci0JCWl2ICo9IDEwMjQ7Ci0JY2Fz ZSAnZyc6IGNhc2UgJ0cnOgotCQlpdiAqPSAxMDI0OwotCWNhc2UgJ20nOiBjYXNlICdNJzoKLQkJ aXYgKj0gMTAyNDsKLQljYXNlICdrJzogY2FzZSAnSyc6Ci0JCWl2ICo9IDEwMjQ7Ci0JY2FzZSAn XDAnOgotCQlicmVhazsKLQlkZWZhdWx0OgotCQlmcmVlZW52KHZhbHVlKTsKLQkJcmV0dXJuICgw KTsKLQl9Ci0JKmRhdGEgPSBpdjsKLQlmcmVlZW52KHZhbHVlKTsKLQlyZXR1cm4gKDEpOwogfQog CiAvKgpAQCAtNTgzLDYgKzcwNiwxNCBAQAogfQogCiB2b2lkCit0dW5hYmxlX3VpbnRfaW5pdCh2 b2lkICpkYXRhKQoreworCXN0cnVjdCB0dW5hYmxlX3VpbnQgKmQgPSAoc3RydWN0IHR1bmFibGVf dWludCAqKWRhdGE7CisKKwlUVU5BQkxFX1VJTlRfRkVUQ0goZC0+cGF0aCwgZC0+dmFyKTsKK30K Kwordm9pZAogdHVuYWJsZV9sb25nX2luaXQodm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgdHVuYWJs ZV9sb25nICpkID0gKHN0cnVjdCB0dW5hYmxlX2xvbmcgKilkYXRhOwpAQCAtNTk5LDYgKzczMCwx NCBAQAogfQogCiB2b2lkCit0dW5hYmxlX3BvaW50ZXJfaW5pdCh2b2lkICpkYXRhKQoreworCXN0 cnVjdCB0dW5hYmxlX3BvaW50ZXIgKmQgPSAoc3RydWN0IHR1bmFibGVfcG9pbnRlciAqKWRhdGE7 CisKKwlUVU5BQkxFX1BPSU5URVJfRkVUQ0goZC0+cGF0aCwgZC0+dmFyKTsKK30KKwordm9pZAog dHVuYWJsZV9xdWFkX2luaXQodm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgdHVuYWJsZV9xdWFkICpk ID0gKHN0cnVjdCB0dW5hYmxlX3F1YWQgKilkYXRhOwpAQCAtNjA3LDYgKzc0NiwyMiBAQAogfQog CiB2b2lkCit0dW5hYmxlX3VxdWFkX2luaXQodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgdHVuYWJs ZV91cXVhZCAqZCA9IChzdHJ1Y3QgdHVuYWJsZV91cXVhZCAqKWRhdGE7CisKKwlUVU5BQkxFX1VR VUFEX0ZFVENIKGQtPnBhdGgsIGQtPnZhcik7Cit9CisKK3ZvaWQKK3R1bmFibGVfc2l6ZV9pbml0 KHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHR1bmFibGVfc2l6ZSAqZCA9IChzdHJ1Y3QgdHVuYWJs ZV9zaXplICopZGF0YTsKKworCVRVTkFCTEVfU0laRV9GRVRDSChkLT5wYXRoLCBkLT52YXIpOwor fQorCit2b2lkCiB0dW5hYmxlX3N0cl9pbml0KHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHR1bmFi bGVfc3RyICpkID0gKHN0cnVjdCB0dW5hYmxlX3N0ciAqKWRhdGE7CkluZGV4OiBzeXMvc3lzL2tl cm5lbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9zeXMva2VybmVsLmgJKHJldmlzaW9uIDIxMzkzNykK KysrIHN5cy9zeXMva2VybmVsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3NSw3ICsyNzUsOSBAQAog CiAvKgogICogaW50Ci0gKiBwbGVhc2UgYXZvaWQgdXNpbmcgZm9yIG5ldyB0dW5hYmxlcyEKKyAq CisgKiBQbGVhc2UgZG8gbm90IHVzZSBmb3IgYWRkcmVzc2VzIG9yIHBvaW50ZXJzICh1c2UgdGhl IHBvaW50ZXIgdHVuYWJsZQorICogaW5zdGVhZCksIG9yIHNpemVzICh1c2UgdGhlIHNpemUgdHVu YWJsZSBpbnN0ZWFkKS4KICAqLwogZXh0ZXJuIHZvaWQgdHVuYWJsZV9pbnRfaW5pdCh2b2lkICop Owogc3RydWN0IHR1bmFibGVfaW50IHsKQEAgLTI5NCw2ICsyOTYsMjggQEAKICNkZWZpbmUJVFVO QUJMRV9JTlRfRkVUQ0gocGF0aCwgdmFyKQlnZXRlbnZfaW50KChwYXRoKSwgKHZhcikpCiAKIC8q CisgKiB1bnNpZ25lZCBpbnQKKyAqCisgKiBQbGVhc2UgZG8gbm90IHVzZSBmb3IgYWRkcmVzc2Vz IG9yIHBvaW50ZXJzICh1c2UgdGhlIHBvaW50ZXIgdHVuYWJsZQorICogaW5zdGVhZCksIG9yIHNp emVzICh1c2UgdGhlIHNpemUgdHVuYWJsZSBpbnN0ZWFkKS4KKyAqLworZXh0ZXJuIHZvaWQgdHVu YWJsZV91aW50X2luaXQodm9pZCAqKTsKK3N0cnVjdCB0dW5hYmxlX3VpbnQgeworCWNvbnN0IGNo YXIgKnBhdGg7CisJdW5zaWduZWQgaW50ICp2YXI7Cit9OworI2RlZmluZQlUVU5BQkxFX1VJTlQo cGF0aCwgdmFyKQkJCQkJXAorCXN0YXRpYyBzdHJ1Y3QgdHVuYWJsZV91aW50IF9fQ09OQ0FUKF9f dHVuYWJsZV91aW50XywgX19MSU5FX18pID0geyBcCisJCShwYXRoKSwJCQkJCQlcCisJCSh2YXIp LAkJCQkJCVwKKwl9OwkJCQkJCQlcCisJU1lTSU5JVChfX0NPTkNBVChfX1R1bmFibGVfaW5pdF8s IF9fTElORV9fKSwJCVwKKwkgICAgU0lfU1VCX1RVTkFCTEVTLCBTSV9PUkRFUl9NSURETEUsIHR1 bmFibGVfdWludF9pbml0LCBcCisJICAgICZfX0NPTkNBVChfX3R1bmFibGVfdWludF8sIF9fTElO RV9fKSkKKworI2RlZmluZQlUVU5BQkxFX1VJTlRfRkVUQ0gocGF0aCwgdmFyKQlnZXRlbnZfdWlu dCgocGF0aCksICh2YXIpKQorCisvKgogICogbG9uZwogICovCiBleHRlcm4gdm9pZCB0dW5hYmxl X2xvbmdfaW5pdCh2b2lkICopOwpAQCAtMzMyLDggKzM1NiwyOCBAQAogI2RlZmluZQlUVU5BQkxF X1VMT05HX0ZFVENIKHBhdGgsIHZhcikJZ2V0ZW52X3Vsb25nKChwYXRoKSwgKHZhcikpCiAKIC8q Ci0gKiBxdWFkCisgKiBwb2ludGVyCiAgKi8KK2V4dGVybiB2b2lkIHR1bmFibGVfcG9pbnRlcl9p bml0KHZvaWQgKik7CitzdHJ1Y3QgdHVuYWJsZV9wb2ludGVyIHsKKwljb25zdCBjaGFyICpwYXRo OworCXVpbnRwdHJfdCAqdmFyOworfTsKKyNkZWZpbmUJVFVOQUJMRV9QT0lOVEVSKHBhdGgsIHZh cikJCQkJXAorCXN0YXRpYyBzdHJ1Y3QgdHVuYWJsZV9wb2ludGVyIF9fQ09OQ0FUKF9fdHVuYWJs ZV9wb2ludGVyXywgX19MSU5FX18pID0geyBcCisJCShwYXRoKSwJCQkJCQlcCisJCSh2YXIpLAkJ CQkJCVwKKwl9OwkJCQkJCQlcCisJU1lTSU5JVChfX0NPTkNBVChfX1R1bmFibGVfaW5pdF8sIF9f TElORV9fKSwJCVwKKwkgICAgU0lfU1VCX1RVTkFCTEVTLCBTSV9PUkRFUl9NSURETEUsIHR1bmFi bGVfcG9pbnRlcl9pbml0LCBcCisJICAgICZfX0NPTkNBVChfX3R1bmFibGVfcG9pbnRlcl8sIF9f TElORV9fKSkKKworI2RlZmluZQlUVU5BQkxFX1BPSU5URVJfRkVUQ0gocGF0aCwgdmFyKQkJCVwK KwlnZXRlbnZfcG9pbnRlcigocGF0aCksICh2YXIpKQorCisvKgorICogcXVhZF90CisgKi8KIGV4 dGVybiB2b2lkIHR1bmFibGVfcXVhZF9pbml0KHZvaWQgKik7CiBzdHJ1Y3QgdHVuYWJsZV9xdWFk IHsKIAljb25zdCBjaGFyICpwYXRoOwpAQCAtMzUwLDYgKzM5NCwyOCBAQAogCiAjZGVmaW5lCVRV TkFCTEVfUVVBRF9GRVRDSChwYXRoLCB2YXIpCWdldGVudl9xdWFkKChwYXRoKSwgKHZhcikpCiAK Ky8qCisgKiBzaXplX3QKKyAqLworZXh0ZXJuIHZvaWQgdHVuYWJsZV9zaXplX2luaXQodm9pZCAq KTsKK3N0cnVjdCB0dW5hYmxlX3NpemUgeworCWNvbnN0IGNoYXIgKnBhdGg7CisJc2l6ZV90ICp2 YXI7Cit9OworI2RlZmluZQlUVU5BQkxFX1NJWkUocGF0aCwgdmFyKQkJCQkJXAorCXN0YXRpYyBz dHJ1Y3QgdHVuYWJsZV9zaXplIF9fQ09OQ0FUKF9fdHVuYWJsZV9zaXplXywgX19MSU5FX18pID0g eyBcCisJCShwYXRoKSwJCQkJCQlcCisJCSh2YXIpLAkJCQkJCVwKKwl9OwkJCQkJCQlcCisJU1lT SU5JVChfX0NPTkNBVChfX1R1bmFibGVfaW5pdF8sIF9fTElORV9fKSwJCVwKKwkgICAgU0lfU1VC X1RVTkFCTEVTLCBTSV9PUkRFUl9NSURETEUsIHR1bmFibGVfc2l6ZV9pbml0LCBcCisJICAgICZf X0NPTkNBVChfX3R1bmFibGVfc2l6ZV8sIF9fTElORV9fKSkKKworI2RlZmluZQlUVU5BQkxFX1NJ WkVfRkVUQ0gocGF0aCwgdmFyKQlnZXRlbnZfc2l6ZSgocGF0aCksICh2YXIpKQorCisvKgorICog c3RyaW5ncworICovCiBleHRlcm4gdm9pZCB0dW5hYmxlX3N0cl9pbml0KHZvaWQgKik7CiBzdHJ1 Y3QgdHVuYWJsZV9zdHIgewogCWNvbnN0IGNoYXIgKnBhdGg7CkBAIC0zNjksNiArNDM1LDI1IEBA CiAjZGVmaW5lCVRVTkFCTEVfU1RSX0ZFVENIKHBhdGgsIHZhciwgc2l6ZSkJCQlcCiAJZ2V0ZW52 X3N0cmluZygocGF0aCksICh2YXIpLCAoc2l6ZSkpCiAKKy8qCisgKiB1cXVhZF90CisgKi8KK2V4 dGVybiB2b2lkIHR1bmFibGVfdXF1YWRfaW5pdCh2b2lkICopOworc3RydWN0IHR1bmFibGVfdXF1 YWQgeworCWNvbnN0IGNoYXIgKnBhdGg7CisJdXF1YWRfdCAqdmFyOworfTsKKyNkZWZpbmUJVFVO QUJMRV9VUVVBRChwYXRoLCB2YXIpCQkJCQlcCisJc3RhdGljIHN0cnVjdCB0dW5hYmxlX3VxdWFk IF9fQ09OQ0FUKF9fdHVuYWJsZV91cXVhZF8sIF9fTElORV9fKSA9IHsgXAorCQkocGF0aCksCQkJ CQkJXAorCQkodmFyKSwJCQkJCQlcCisJfTsJCQkJCQkJXAorCVNZU0lOSVQoX19DT05DQVQoX19U dW5hYmxlX2luaXRfLCBfX0xJTkVfXyksCQlcCisJICAgIFNJX1NVQl9UVU5BQkxFUywgU0lfT1JE RVJfTUlERExFLCB0dW5hYmxlX3VxdWFkX2luaXQsIFwKKwkgICAgJl9fQ09OQ0FUKF9fdHVuYWJs ZV91cXVhZF8sIF9fTElORV9fKSkKKworI2RlZmluZQlUVU5BQkxFX1VRVUFEX0ZFVENIKHBhdGgs IHZhcikJZ2V0ZW52X3VxdWFkKChwYXRoKSwgKHZhcikpCisKIHN0cnVjdCBpbnRyX2NvbmZpZ19o b29rIHsKIAlUQUlMUV9FTlRSWShpbnRyX2NvbmZpZ19ob29rKSBpY2hfbGlua3M7CiAJdm9pZAko KmljaF9mdW5jKSh2b2lkICphcmcpOwpJbmRleDogc3lzL3N5cy9zeXN0bS5oCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIHN5cy9zeXMvc3lzdG0uaAkocmV2aXNpb24gMjEzOTM3KQorKysgc3lzL3N5cy9zeXN0bS5o CSh3b3JraW5nIGNvcHkpCkBAIC0yNjAsMTIgKzI2MCwyMCBAQAogCiBjaGFyCSpnZXRlbnYoY29u c3QgY2hhciAqbmFtZSk7CiB2b2lkCWZyZWVlbnYoY2hhciAqZW52KTsKK3VpbnRtYXhfdCBnZXRl bnZfcGFyc2Vfc3VmZml4KGNvbnN0IGNoYXIgc3VmZml4KTsKK2ludAlnZXRlbnZfc2lnbmVkKGNv bnN0IGNoYXIgKm5hbWUsIGludG1heF90ICpkYXRhLCBjb25zdCBpbnRtYXhfdCBtaW4sCisJICAg IGNvbnN0IGludG1heF90IG1heCk7CitpbnQJZ2V0ZW52X3Vuc2lnbmVkKGNvbnN0IGNoYXIgKm5h bWUsIHVpbnRtYXhfdCAqZGF0YSwKKwkgICAgY29uc3QgdWludG1heF90IG1pbiwgY29uc3QgdWlu dG1heF90IG1heCk7CiBpbnQJZ2V0ZW52X2ludChjb25zdCBjaGFyICpuYW1lLCBpbnQgKmRhdGEp OwogaW50CWdldGVudl91aW50KGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCAqZGF0YSk7 CiBpbnQJZ2V0ZW52X2xvbmcoY29uc3QgY2hhciAqbmFtZSwgbG9uZyAqZGF0YSk7CiBpbnQJZ2V0 ZW52X3Vsb25nKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgKmRhdGEpOwotaW50CWdl dGVudl9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqZGF0YSwgaW50IHNpemUpOworaW50 CWdldGVudl9wb2ludGVyKGNvbnN0IGNoYXIgKm5hbWUsIHVpbnRwdHJfdCAqZGF0YSk7CiBpbnQJ Z2V0ZW52X3F1YWQoY29uc3QgY2hhciAqbmFtZSwgcXVhZF90ICpkYXRhKTsKK2ludAlnZXRlbnZf dXF1YWQoY29uc3QgY2hhciAqbmFtZSwgdXF1YWRfdCAqZGF0YSk7CitpbnQJZ2V0ZW52X3NpemUo Y29uc3QgY2hhciAqbmFtZSwgc2l6ZV90ICpkYXRhKTsKK2ludAlnZXRlbnZfc3RyaW5nKGNvbnN0 IGNoYXIgKm5hbWUsIGNoYXIgKmRhdGEsIHNpemVfdCBzaXplKTsKIGludAlzZXRlbnYoY29uc3Qg Y2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpOwogaW50CXVuc2V0ZW52KGNvbnN0IGNoYXIg Km5hbWUpOwogaW50CXRlc3RlbnYoY29uc3QgY2hhciAqbmFtZSk7CkluZGV4OiBzeXMvc3lzL3N5 c3RtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gc3lzL3N5cy9zeXN0bS5oCShyZXZpc2lvbiAyMTM5MzcpCisr KyBzeXMvc3lzL3N5c3RtLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2MCwxMiArMjYwLDIwIEBACiAK IGNoYXIJKmdldGVudihjb25zdCBjaGFyICpuYW1lKTsKIHZvaWQJZnJlZWVudihjaGFyICplbnYp OwordWludG1heF90IGdldGVudl9wYXJzZV9zdWZmaXgoY29uc3QgY2hhciBzdWZmaXgpOworaW50 CWdldGVudl9zaWduZWQoY29uc3QgY2hhciAqbmFtZSwgaW50bWF4X3QgKmRhdGEsIGNvbnN0IGlu dG1heF90IG1pbiwKKwkgICAgY29uc3QgaW50bWF4X3QgbWF4KTsKK2ludAlnZXRlbnZfdW5zaWdu ZWQoY29uc3QgY2hhciAqbmFtZSwgdWludG1heF90ICpkYXRhLAorCSAgICBjb25zdCB1aW50bWF4 X3QgbWluLCBjb25zdCB1aW50bWF4X3QgbWF4KTsKIGludAlnZXRlbnZfaW50KGNvbnN0IGNoYXIg Km5hbWUsIGludCAqZGF0YSk7CiBpbnQJZ2V0ZW52X3VpbnQoY29uc3QgY2hhciAqbmFtZSwgdW5z aWduZWQgaW50ICpkYXRhKTsKIGludAlnZXRlbnZfbG9uZyhjb25zdCBjaGFyICpuYW1lLCBsb25n ICpkYXRhKTsKIGludAlnZXRlbnZfdWxvbmcoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9u ZyAqZGF0YSk7Ci1pbnQJZ2V0ZW52X3N0cmluZyhjb25zdCBjaGFyICpuYW1lLCBjaGFyICpkYXRh LCBpbnQgc2l6ZSk7CitpbnQJZ2V0ZW52X3BvaW50ZXIoY29uc3QgY2hhciAqbmFtZSwgdWludHB0 cl90ICpkYXRhKTsKIGludAlnZXRlbnZfcXVhZChjb25zdCBjaGFyICpuYW1lLCBxdWFkX3QgKmRh dGEpOworaW50CWdldGVudl91cXVhZChjb25zdCBjaGFyICpuYW1lLCB1cXVhZF90ICpkYXRhKTsK K2ludAlnZXRlbnZfc2l6ZShjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgKmRhdGEpOworaW50CWdl dGVudl9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqZGF0YSwgc2l6ZV90IHNpemUpOwog aW50CXNldGVudihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7CiBpbnQJdW5z ZXRlbnYoY29uc3QgY2hhciAqbmFtZSk7CiBpbnQJdGVzdGVudihjb25zdCBjaGFyICpuYW1lKTsK SW5kZXg6IHRvb2xzL3JlZ3Jlc3Npb24vdHVuYWJsZXMvbG9uZy90ZXN0X2xvbmdfdHVuYWJsZS5z aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0tLSB0b29scy9yZWdyZXNzaW9uL3R1bmFibGVzL2xvbmcvdGVzdF9sb25n X3R1bmFibGUuc2gJKHJldmlzaW9uIDApCisrKyB0b29scy9yZWdyZXNzaW9uL3R1bmFibGVzL2xv bmcvdGVzdF9sb25nX3R1bmFibGUuc2gJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDAgQEAKKyMh L2Jpbi9zaAorIworIyBFeHBlY3RlZCB2YWx1ZXM6CisjICh1bnNldCkgICAgOiAgICAgICAgICAg MAorIyAgICAgICAwICAgIDogICAgICAgICAgIDAKKyMgICAgICA0MiAgICA6ICAgICAgICAgIDQy CisjIGFzZGYxMjM0ICAgOiAgICAgICAgICAgMCAocmVqZWN0KQorIyBMT05HX01JTi0xIDogIExP TkdfTUlOCisjIExPTkdfTUlOKzEgOiAgTE9OR19NSU4rMQorIyBMT05HX01BWC0xIDogIExPTkdf TUFYLTEKKyMgTE9OR19NQVgrMSA6ICBMT05HX01BWAorIworCitNT0ROQU1FPSIkKGJhc2VuYW1l ICIkMCIgLnNoKSIKKwordGVzdF9tb2R1bGUoKSB7CisJa2xkbG9hZCAuLyRNT0ROQU1FLmtvCisJ a2xkdW5sb2FkIC4vJE1PRE5BTUUua28KK30KKworY2FzZSAiJCgkKGRpcm5hbWUgIiQwIikvLi4v dG9vbHMvZ2V0d29yZHNpemUpIiBpbgorMzIpCisJTE9OR19NSU5fTUlOVVNfMT0iLTIxNDc0ODM2 NDkiCisJTE9OR19NSU5fUExVU18xPSItMjE0NzQ4MzY0NyIKKwlMT05HX01BWF9NSU5VU18xPTIx NDc0ODM2NDcKKwlMT05HX01BWF9QTFVTXzE9MjE0NzQ4MzY0OQorCTs7Cis2NCkKKwlMT05HX01J Tl9NSU5VU18xPSItOTIyMzM3MjAzNjg1NDc3NTgwOSIKKwlMT05HX01JTl9QTFVTXzE9Ii05MjIz MzcyMDM2ODU0Nzc1ODA3IgorCUxPTkdfTUFYX01JTlVTXzE9OTIyMzM3MjAzNjg1NDc3NTgwNgor CUxPTkdfTUFYX1BMVVNfMT05MjIzMzcyMDM2ODU0Nzc1ODA4CisJOzsKK2VzYWMKK2tlbnYgLXUg JE1PRE5BTUUudHVuYWJsZSAyPi9kZXYvbnVsbAordGVzdF9tb2R1bGUKK2ZvciBpIGluIDAgNDIg YXNkZjEyMzQgJExPTkdfTUlOX01JTlVTXzEgJExPTkdfTUlOX1BMVVNfMSAkTE9OR19NQVhfTUlO VVNfMSAkTE9OR19NQVhfUExVU18xIDsgZG8KKwlrZW52ICRNT0ROQU1FLnR1bmFibGU9IiRpIgor CXRlc3RfbW9kdWxlCitkb25lCkluZGV4OiB0b29scy9yZWdyZXNzaW9uL3R1bmFibGVzL2xvbmcv dGVzdF9sb25nX3R1bmFibGUuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0b29scy9yZWdyZXNzaW9uL3R1bmFi bGVzL2xvbmcvdGVzdF9sb25nX3R1bmFibGUuYwkocmV2aXNpb24gMCkKKysrIHRvb2xzL3JlZ3Jl c3Npb24vdHVuYWJsZXMvbG9uZy90ZXN0X2xvbmdfdHVuYWJsZS5jCShyZXZpc2lvbiAwKQpAQCAt MCwwICsxLDMxIEBACisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVz Lmg+CisjaW5jbHVkZSA8c3lzL3Byb2MuaD4KKyNpbmNsdWRlIDxzeXMvbW9kdWxlLmg+CisjaW5j bHVkZSA8c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgorCisjZGVmaW5lIE1P RFVMRV9OQU1FCSJ0ZXN0X2xvbmdfdHVuYWJsZSIKKworc3RhdGljIGxvbmcgdHVuYWJsZSA9IDA7 CisKK1RVTkFCTEVfTE9ORygidGVzdF9sb25nX3R1bmFibGUudHVuYWJsZSIsICZ0dW5hYmxlKTsK Kworc3RhdGljIGludAorbG9hZCAobW9kdWxlX3QgbSwgaW50IHdoYXQsIHZvaWQgKmFyZykKK3sK Kwlzd2l0Y2ggKHdoYXQpIHsKKwljYXNlIE1PRF9MT0FEOgorCQlwcmludGYoIiVzOiAlbGRcbiIs IE1PRFVMRV9OQU1FLCB0dW5hYmxlKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAoMCk7Cit9CisK K3N0YXRpYyBtb2R1bGVkYXRhX3QgdGVzdF9sb25nX3R1bmFibGVfbW9kID0geworCU1PRFVMRV9O QU1FLAorCWxvYWQsCit9OworREVDTEFSRV9NT0RVTEUodGVzdF9sb25nX3R1bmFibGUsIHRlc3Rf bG9uZ190dW5hYmxlX21vZCwgU0lfU1VCX0tMRCwKKyAgICBTSV9PUkRFUl9BTlkpOworTU9EVUxF X1ZFUlNJT04odGVzdF9sb25nX3R1bmFibGUsIDEpOwpJbmRleDogdG9vbHMvcmVncmVzc2lvbi90 dW5hYmxlcy9sb25nL01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHRvb2xzL3JlZ3Jlc3Npb24vdHVu YWJsZXMvbG9uZy9NYWtlZmlsZQkocmV2aXNpb24gMCkKKysrIHRvb2xzL3JlZ3Jlc3Npb24vdHVu YWJsZXMvbG9uZy9NYWtlZmlsZQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACitLTU9EPQl0 ZXN0X2xvbmdfdHVuYWJsZQorU1JDUz0JdGVzdF9sb25nX3R1bmFibGUuYworCisuaW5jbHVkZSA8 YnNkLmttb2QubWs+CkluZGV4OiB0b29scy9yZWdyZXNzaW9uL3R1bmFibGVzL3VpbnQvdGVzdF91 aW50X3R1bmFibGUuc2gKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdG9vbHMvcmVncmVzc2lvbi90dW5hYmxlcy91 aW50L3Rlc3RfdWludF90dW5hYmxlLnNoCShyZXZpc2lvbiAwKQorKysgdG9vbHMvcmVncmVzc2lv bi90dW5hYmxlcy91aW50L3Rlc3RfdWludF90dW5hYmxlLnNoCShyZXZpc2lvbiAwKQpAQCAtMCww ICsxLDI5IEBACisjIS9iaW4vc2gKKyMKKyMgRXhwZWN0ZWQgdmFsdWVzOgorIyAodW5zZXQpICAg OiAgICAgICAgICAwCisjICAgICAgLTEgICA6ICAgICAgICAgIDAgKHJlamVjdCkgCisjICAgICAg IDAgICA6ICAgICAgICAgIDAKKyMgICAgICA0MiAgIDogICAgICAgICA0MgorIyBhc2RmMTIzNCAg OiAgICAgICAgICAwIChyZWplY3QpCisjIElOVF9NQVgrMSA6ICBJTlRfTUFYKzEKKyMgVUlOVF9N QVgtMTogVUlOVF9NQVgtMQorIyBVSU5UX01BWCsxOiAgICAgICAgICAwIChyZWplY3QpCisjCisK K01PRE5BTUU9IiQoYmFzZW5hbWUgIiQwIiAuc2gpIgorCit0ZXN0X21vZHVsZSgpIHsKKwlrbGRs b2FkIC4vJE1PRE5BTUUua28KKwlrbGR1bmxvYWQgLi8kTU9ETkFNRS5rbworfQorCitJTlRfTUFY X1BMVVNfT05FPTIxNDc0ODM2NDgKK1VJTlRfTUFYX01JTlVTX09ORT00Mjk0OTY3Mjk0CitVSU5U X01BWF9QTFVTX09ORT00Mjk0OTY3Mjk2CitrZW52IC11ICRNT0ROQU1FLnR1bmFibGUgMj4vZGV2 L251bGwKK3Rlc3RfbW9kdWxlCitmb3IgaSBpbiAtMSAwIDQyIGFzZGYxMjM0ICRJTlRfTUFYX1BM VVNfT05FICRVSU5UX01BWF9NSU5VU19PTkUgJFVJTlRfTUFYX1BMVVNfT05FOyBkbworCWtlbnYg JE1PRE5BTUUudHVuYWJsZT0iJGkiCisJdGVzdF9tb2R1bGUKK2RvbmUKSW5kZXg6IHRvb2xzL3Jl Z3Jlc3Npb24vdHVuYWJsZXMvdWludC90ZXN0X3VpbnRfdHVuYWJsZS5jCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t IHRvb2xzL3JlZ3Jlc3Npb24vdHVuYWJsZXMvdWludC90ZXN0X3VpbnRfdHVuYWJsZS5jCShyZXZp c2lvbiAwKQorKysgdG9vbHMvcmVncmVzc2lvbi90dW5hYmxlcy91aW50L3Rlc3RfdWludF90dW5h YmxlLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzEgQEAKKyNpbmNsdWRlIDxzeXMvcGFyYW0u aD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcHJvYy5oPgorI2luY2x1 ZGUgPHN5cy9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lz L3N5c3RtLmg+CisKKyNkZWZpbmUgTU9EVUxFX05BTUUJInRlc3RfdWludF90dW5hYmxlIgorCitz dGF0aWMgdW5zaWduZWQgaW50IHR1bmFibGUgPSAwOworCitUVU5BQkxFX1VJTlQoInRlc3RfdWlu dF90dW5hYmxlLnR1bmFibGUiLCAmdHVuYWJsZSk7CisKK3N0YXRpYyBpbnQKK2xvYWQgKG1vZHVs ZV90IG0sIGludCB3aGF0LCB2b2lkICphcmcpCit7CisJc3dpdGNoICh3aGF0KSB7CisJY2FzZSBN T0RfTE9BRDoKKwkJcHJpbnRmKCIlczogJXVcbiIsIE1PRFVMRV9OQU1FLCB0dW5hYmxlKTsKKwkJ YnJlYWs7CisJfQorCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBtb2R1bGVkYXRhX3QgdGVzdF91 aW50X3R1bmFibGVfbW9kID0geworCU1PRFVMRV9OQU1FLAorCWxvYWQsCit9OworREVDTEFSRV9N T0RVTEUodGVzdF91aW50X3R1bmFibGUsIHRlc3RfdWludF90dW5hYmxlX21vZCwgU0lfU1VCX0tM RCwKKyAgICBTSV9PUkRFUl9BTlkpOworTU9EVUxFX1ZFUlNJT04odGVzdF91aW50X3R1bmFibGUs IDEpOwpJbmRleDogdG9vbHMvcmVncmVzc2lvbi90dW5hYmxlcy91aW50L01ha2VmaWxlCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIHRvb2xzL3JlZ3Jlc3Npb24vdHVuYWJsZXMvdWludC9NYWtlZmlsZQkocmV2aXNp b24gMCkKKysrIHRvb2xzL3JlZ3Jlc3Npb24vdHVuYWJsZXMvdWludC9NYWtlZmlsZQkocmV2aXNp b24gMCkKQEAgLTAsMCArMSw0IEBACitLTU9EPQl0ZXN0X3VpbnRfdHVuYWJsZQorU1JDUz0JdGVz dF91aW50X3R1bmFibGUuYworCisuaW5jbHVkZSA8YnNkLmttb2QubWs+CkluZGV4OiB0b29scy9y ZWdyZXNzaW9uL3R1bmFibGVzL3VxdWFkL3Rlc3RfdXF1YWRfdHVuYWJsZS5zaAo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSB0b29scy9yZWdyZXNzaW9uL3R1bmFibGVzL3VxdWFkL3Rlc3RfdXF1YWRfdHVuYWJsZS5z aAkocmV2aXNpb24gMCkKKysrIHRvb2xzL3JlZ3Jlc3Npb24vdHVuYWJsZXMvdXF1YWQvdGVzdF91 cXVhZF90dW5hYmxlLnNoCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM4IEBACisjIS9iaW4vc2gK KyMKKyMgRXhwZWN0ZWQgdmFsdWVzOgorIyAodW5zZXQpICAgIDogICAgICAgICAgIDAKKyMgICAg ICAtMSAgICA6ICAgVUxPTkdfTUFYCisjICAgICAgIDAgICAgOiAgICAgICAgICAgMAorIyAgICAg IDQyICAgIDogICAgICAgICAgNDIKKyMgYXNkZjEyMzQgICA6ICAgICAgICAgICAwIChyZWplY3Qp CisjIExPTkdfTUFYKzEgOiAgTE9OR19NQVgrMQorIyBVTE9OR19NQVgtMTogVUxPTkdfTUFYLTEK KyMgVUxPTkdfTUFYKzE6ICAgVUxPTkdfTUFYCisjCisKK01PRE5BTUU9IiQoYmFzZW5hbWUgIiQw IiAuc2gpIgorCit0ZXN0X21vZHVsZSgpIHsKKwlrbGRsb2FkIC4vJE1PRE5BTUUua28KKwlrbGR1 bmxvYWQgLi8kTU9ETkFNRS5rbworfQorCitjYXNlICIkKCQoZGlybmFtZSAiJDAiKS8uLi90b29s cy9nZXR3b3Jkc2l6ZSkiIGluCiszMikKKwlMT05HX01BWF9QTFVTXzE9MjE0NzQ4MzY0OQorCVVM T05HX01BWF9NSU5VU18xPTQyOTQ5NjcyOTUKKwlVTE9OR19NQVhfUExVU18xPTQyOTQ5NjcyOTcK Kwk7OworNjQpCisJTE9OR19NQVhfUExVU18xPTkyMjMzNzIwMzY4NTQ3NzU4MDgKKwlVTE9OR19N QVhfTUlOVVNfMT0xODQ0Njc0NDA3MzcwOTU1MTYxNAorCVVMT05HX01BWF9QTFVTXzE9MTg0NDY3 NDQwNzM3MDk1NTE2MTYKKwk7OworZXNhYwora2VudiAtdSAkTU9ETkFNRS50dW5hYmxlIDI+L2Rl di9udWxsCit0ZXN0X21vZHVsZQorZm9yIGkgaW4gLTEgMCA0MiBhc2RmMTIzNCAkTE9OR19NQVhf UExVU18xICRVTE9OR19NQVhfTUlOVVNfMSAkVUxPTkdfTUFYX1BMVVNfMTsgZG8KKwlrZW52ICRN T0ROQU1FLnR1bmFibGU9IiRpIgorCXRlc3RfbW9kdWxlCitkb25lCkluZGV4OiB0b29scy9yZWdy ZXNzaW9uL3R1bmFibGVzL3VxdWFkL3Rlc3RfdXF1YWRfdHVuYWJsZS5jCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t IHRvb2xzL3JlZ3Jlc3Npb24vdHVuYWJsZXMvdXF1YWQvdGVzdF91cXVhZF90dW5hYmxlLmMJKHJl dmlzaW9uIDApCisrKyB0b29scy9yZWdyZXNzaW9uL3R1bmFibGVzL3VxdWFkL3Rlc3RfdXF1YWRf dHVuYWJsZS5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxIEBACisjaW5jbHVkZSA8c3lzL3Bh cmFtLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3Byb2MuaD4KKyNp bmNsdWRlIDxzeXMvbW9kdWxlLmg+CisjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUg PHN5cy9zeXN0bS5oPgorCisjZGVmaW5lIE1PRFVMRV9OQU1FCSJ0ZXN0X3VxdWFkX3R1bmFibGUi CisKK3N0YXRpYyB1cXVhZF90IHR1bmFibGUgPSAwOworCitUVU5BQkxFX1VRVUFEKCJ0ZXN0X3Vx dWFkX3R1bmFibGUudHVuYWJsZSIsICZ0dW5hYmxlKTsKKworc3RhdGljIGludAorbG9hZCAobW9k dWxlX3QgbSwgaW50IHdoYXQsIHZvaWQgKmFyZykKK3sKKwlzd2l0Y2ggKHdoYXQpIHsKKwljYXNl IE1PRF9MT0FEOgorCQlwcmludGYoIiVzOiAlbHVcbiIsIE1PRFVMRV9OQU1FLCB0dW5hYmxlKTsK KwkJYnJlYWs7CisJfQorCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBtb2R1bGVkYXRhX3QgdGVz dF91cXVhZF90dW5hYmxlX21vZCA9IHsKKwlNT0RVTEVfTkFNRSwKKwlsb2FkLAorfTsKK0RFQ0xB UkVfTU9EVUxFKHRlc3RfdXF1YWRfdHVuYWJsZSwgdGVzdF91cXVhZF90dW5hYmxlX21vZCwgU0lf U1VCX0tMRCwKKyAgICBTSV9PUkRFUl9BTlkpOworTU9EVUxFX1ZFUlNJT04odGVzdF91cXVhZF90 dW5hYmxlLCAxKTsKSW5kZXg6IHRvb2xzL3JlZ3Jlc3Npb24vdHVuYWJsZXMvdXF1YWQvTWFrZWZp bGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0gdG9vbHMvcmVncmVzc2lvbi90dW5hYmxlcy91cXVhZC9NYWtlZmls ZQkocmV2aXNpb24gMCkKKysrIHRvb2xzL3JlZ3Jlc3Npb24vdHVuYWJsZXMvdXF1YWQvTWFrZWZp bGUJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorS01PRD0JdGVzdF91cXVhZF90dW5hYmxl CitTUkNTPQl0ZXN0X3VxdWFkX3R1bmFibGUuYworCisuaW5jbHVkZSA8YnNkLmttb2QubWs+Cklu ZGV4OiB0b29scy9yZWdyZXNzaW9uL3R1bmFibGVzL3Rvb2xzL2dldHdvcmRzaXplLmMKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gdG9vbHMvcmVncmVzc2lvbi90dW5hYmxlcy90b29scy9nZXR3b3Jkc2l6ZS5jCShy ZXZpc2lvbiAwKQorKysgdG9vbHMvcmVncmVzc2lvbi90dW5hYmxlcy90b29scy9nZXR3b3Jkc2l6 ZS5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKKyNpbmNsdWRlIDxzeXMvZWxmLmg+Cisj aW5jbHVkZSA8c3RkaW8uaD4KKworaW50CittYWluKHZvaWQpCit7CisJcHJpbnRmKCIlZFxuIiwg X19FTEZfV09SRF9TSVpFKTsKKwlyZXR1cm4gKDApOworfQpJbmRleDogdG9vbHMvcmVncmVzc2lv bi90dW5hYmxlcy90b29scy9NYWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0b29scy9yZWdyZXNzaW9u L3R1bmFibGVzL3Rvb2xzL01ha2VmaWxlCShyZXZpc2lvbiAwKQorKysgdG9vbHMvcmVncmVzc2lv bi90dW5hYmxlcy90b29scy9NYWtlZmlsZQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACitQ Uk9HPQkJZ2V0d29yZHNpemUKKworU1JDUz0JCWdldHdvcmRzaXplLmMKKworTk9fTUFOPQkJMQor CisuaW5jbHVkZSA8YnNkLnByb2cubWs+CkluZGV4OiB0b29scy9yZWdyZXNzaW9uL3R1bmFibGVz L3BvaW50ZXIvdGVzdF9wb2ludGVyX3R1bmFibGUuc2gKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdG9vbHMvcmVn cmVzc2lvbi90dW5hYmxlcy9wb2ludGVyL3Rlc3RfcG9pbnRlcl90dW5hYmxlLnNoCShyZXZpc2lv biAwKQorKysgdG9vbHMvcmVncmVzc2lvbi90dW5hYmxlcy9wb2ludGVyL3Rlc3RfcG9pbnRlcl90 dW5hYmxlLnNoCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1IEBACisjIS9iaW4vc2gKKyMKKyMg RXhwZWN0ZWQgdmFsdWVzOgorIyAodW5zZXQpICAgICA6ICAgICAgICAgICAgMAorIyAgICAgIC0x ICAgICA6ICAgIEFsbCAweGYncworIyAgICAgICAwICAgICA6ICAgICAgICAgIDB4MAorIyAgICAg IDQyICAgICA6ICAgICAgICAgMHgyQQorIyAzNzM1OTI4NTU5ICA6ICAgMHhkZWFkYmVlZgorIyBh c2RmMTIzNCAgICA6ICAgICAgICAgICAgMCAocmVqZWN0KQorIyBody5waHlzbWVtLTE6IGh3LnBo eXNtZW0tMQorIyBody5waHlzbWVtKzE6IGh3LnBoeXNtZW0rMQorIworCitNT0ROQU1FPSIkKGJh c2VuYW1lICIkMCIgLnNoKSIKKwordGVzdF9tb2R1bGUoKSB7CisJa2xkbG9hZCAuLyRNT0ROQU1F LmtvCisJa2xkdW5sb2FkIC4vJE1PRE5BTUUua28KK30KKwordGVzdF9tb2R1bGUKK2ZvciBpIGlu IC0xIDAgNDIgMzczNTkyODU1OSBhc2RmMTIzNCAkKCggJChzeXNjdGwgLW4gaHcucGh5c21lbSkg LSAxICkpICQoKCAkKHN5c2N0bCAtbiBody5waHlzbWVtKSArIDEgKSk7IGRvCisJa2VudiAkTU9E TkFNRS50dW5hYmxlPSIkaSIKKwl0ZXN0X21vZHVsZQorZG9uZQpJbmRleDogdG9vbHMvcmVncmVz c2lvbi90dW5hYmxlcy9wb2ludGVyL3Rlc3RfcG9pbnRlcl90dW5hYmxlLmMKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gdG9vbHMvcmVncmVzc2lvbi90dW5hYmxlcy9wb2ludGVyL3Rlc3RfcG9pbnRlcl90dW5hYmxl LmMJKHJldmlzaW9uIDApCisrKyB0b29scy9yZWdyZXNzaW9uL3R1bmFibGVzL3BvaW50ZXIvdGVz dF9wb2ludGVyX3R1bmFibGUuYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMSBAQAorI2luY2x1 ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9w cm9jLmg+CisjaW5jbHVkZSA8c3lzL21vZHVsZS5oPgorI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4K KyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKworI2RlZmluZSBNT0RVTEVfTkFNRQkidGVzdF9wb2lu dGVyX3R1bmFibGUiCisKK3N0YXRpYyB1aW50cHRyX3QgdHVuYWJsZTsKKworVFVOQUJMRV9QT0lO VEVSKCJ0ZXN0X3BvaW50ZXJfdHVuYWJsZS50dW5hYmxlIiwgJnR1bmFibGUpOworCitzdGF0aWMg aW50Citsb2FkIChtb2R1bGVfdCBtLCBpbnQgd2hhdCwgdm9pZCAqYXJnKQoreworCXN3aXRjaCAo d2hhdCkgeworCWNhc2UgTU9EX0xPQUQ6CisJCXByaW50ZigiJXM6ICVqeFxuIiwgTU9EVUxFX05B TUUsIHR1bmFibGUpOworCQlicmVhazsKKwl9CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIG1v ZHVsZWRhdGFfdCB0ZXN0X3BvaW50ZXJfdHVuYWJsZV9tb2QgPSB7CisJTU9EVUxFX05BTUUsCisJ bG9hZCwKK307CitERUNMQVJFX01PRFVMRSh0ZXN0X3BvaW50ZXJfdHVuYWJsZSwgdGVzdF9wb2lu dGVyX3R1bmFibGVfbW9kLCBTSV9TVUJfS0xELAorICAgIFNJX09SREVSX0FOWSk7CitNT0RVTEVf VkVSU0lPTih0ZXN0X3BvaW50ZXJfdHVuYWJsZSwgMSk7CkluZGV4OiB0b29scy9yZWdyZXNzaW9u L3R1bmFibGVzL3BvaW50ZXIvTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdG9vbHMvcmVncmVzc2lv bi90dW5hYmxlcy9wb2ludGVyL01ha2VmaWxlCShyZXZpc2lvbiAwKQorKysgdG9vbHMvcmVncmVz c2lvbi90dW5hYmxlcy9wb2ludGVyL01ha2VmaWxlCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQg QEAKK0tNT0Q9CXRlc3RfcG9pbnRlcl90dW5hYmxlCitTUkNTPQl0ZXN0X3BvaW50ZXJfdHVuYWJs ZS5jCisKKy5pbmNsdWRlIDxic2Qua21vZC5taz4KSW5kZXg6IHRvb2xzL3JlZ3Jlc3Npb24vdHVu YWJsZXMvc3VmZml4L3Rlc3RfdHVuYWJsZV9zdWZmaXhlcy5jCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHRvb2xz L3JlZ3Jlc3Npb24vdHVuYWJsZXMvc3VmZml4L3Rlc3RfdHVuYWJsZV9zdWZmaXhlcy5jCShyZXZp c2lvbiAwKQorKysgdG9vbHMvcmVncmVzc2lvbi90dW5hYmxlcy9zdWZmaXgvdGVzdF90dW5hYmxl X3N1ZmZpeGVzLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzEgQEAKKyNpbmNsdWRlIDxzeXMv cGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcHJvYy5oPgor I2luY2x1ZGUgPHN5cy9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVk ZSA8c3lzL3N5c3RtLmg+CisKKyNkZWZpbmUgTU9EVUxFX05BTUUJInRlc3RfdHVuYWJsZV9zdWZm aXhlcyIKKworc3RhdGljIGxvbmcgdHVuYWJsZSA9IDA7CisKK1RVTkFCTEVfTE9ORygidGVzdF90 dW5hYmxlX3N1ZmZpeGVzLnR1bmFibGUiLCAmdHVuYWJsZSk7CisKK3N0YXRpYyBpbnQKK2xvYWQg KHN0cnVjdCBtb2R1bGUgKm0sIGludCB3aGF0LCB2b2lkICphcmcpCit7CisJc3dpdGNoICh3aGF0 KSB7CisJY2FzZSBNT0RfTE9BRDoKKwkJcHJpbnRmKCIlczogJWxkXG4iLCBNT0RVTEVfTkFNRSwg dHVuYWJsZSk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgbW9kdWxl ZGF0YV90IHRlc3RfdHVuYWJsZV9zdWZmaXhlc19tb2QgPSB7CisJTU9EVUxFX05BTUUsCisJbG9h ZCwKK307CitERUNMQVJFX01PRFVMRSh0ZXN0X3R1bmFibGVfc3VmZml4ZXMsIHRlc3RfdHVuYWJs ZV9zdWZmaXhlc19tb2QsIFNJX1NVQl9LTEQsCisgICAgU0lfT1JERVJfQU5ZKTsKK01PRFVMRV9W RVJTSU9OKHRlc3RfdHVuYWJsZV9zdWZmaXhlcywgMSk7CkluZGV4OiB0b29scy9yZWdyZXNzaW9u L3R1bmFibGVzL3N1ZmZpeC9NYWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0b29scy9yZWdyZXNzaW9u L3R1bmFibGVzL3N1ZmZpeC9NYWtlZmlsZQkocmV2aXNpb24gMCkKKysrIHRvb2xzL3JlZ3Jlc3Np b24vdHVuYWJsZXMvc3VmZml4L01ha2VmaWxlCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQgQEAK K0tNT0Q9CXRlc3RfdHVuYWJsZV9zdWZmaXhlcworU1JDUz0JdGVzdF90dW5hYmxlX3N1ZmZpeGVz LmMKKworLmluY2x1ZGUgPGJzZC5rbW9kLm1rPgpJbmRleDogdG9vbHMvcmVncmVzc2lvbi90dW5h Ymxlcy9zdWZmaXgvdGVzdF90dW5hYmxlX3N1ZmZpeGVzLnNoCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHRvb2xz L3JlZ3Jlc3Npb24vdHVuYWJsZXMvc3VmZml4L3Rlc3RfdHVuYWJsZV9zdWZmaXhlcy5zaAkocmV2 aXNpb24gMCkKKysrIHRvb2xzL3JlZ3Jlc3Npb24vdHVuYWJsZXMvc3VmZml4L3Rlc3RfdHVuYWJs ZV9zdWZmaXhlcy5zaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MSBAQAorIyEvYmluL3NoCisj CisjIEV4cGVjdGVkIHZhbHVlczoKKyMgKHVuc2V0KSAgIDogICAgICAgICAgIDAKKyMgICAgICAg ICAtMTogICAgICAgICAgLTEKKyMgICAgICAgIC0xZzogICAgIC0xMDI0XjMKKyMgICAgICAgIC0x RzogICAgIC0xMDI0XjMgKHNhbWUgYXMgMWcpIAorIyAgICAgICAgLTFrOiAgICAgICAtMTAyNAor IyAgICAgICAgLTFLOiAgICAgICAtMTAyNCAoc2FtZSBhcyAxSykKKyMgICAgICAgIC0xbTogICAg IC0xMDI0XjIKKyMgICAgICAgIC0xTTogICAgIC0xMDI0XjIgKHNhbWUgYXMgMW0pCisjICAgICAg ICAtMXQ6ICAgICAtMTAyNF40CisjICAgICAgICAtMVQ6ICAgICAtMTAyNF40IChzYW1lIGFzIDF0 KQorIyAgICAgICAgLTF6OiAgICAgICAgICAgMCAocmVqZWN0KQorIyAgICAgICAgICAxOiAgICAg ICAgICAgMQorIyAgICAgICAgIDFnOiAgICAgIDEwMjReMworIyAgICAgICAgIDFHOiAgICAgIDEw MjReMyAoc2FtZSBhcyAxZykgCisjICAgICAgICAgMWs6ICAgICAgICAxMDI0CisjICAgICAgICAg MUs6ICAgICAgICAxMDI0IChzYW1lIGFzIDFLKQorIyAgICAgICAgIDFtOiAgICAgIDEwMjReMgor IyAgICAgICAgIDFNOiAgICAgIDEwMjReMiAoc2FtZSBhcyAxbSkKKyMgICAgICAgICAxdDogICAg ICAxMDI0XjQKKyMgICAgICAgICAxVDogICAgICAxMDI0XjQgKHNhbWUgYXMgMXQpCisjICAgICAg ICAgMXo6ICAgICAgICAgICAwIChyZWplY3QpCisjICAgICAgICAgMVQ6ICAgICAgICAgICAwIChy ZWplY3QpCisKK01PRE5BTUU9IiQoYmFzZW5hbWUgIiQwIiAuc2gpIgorCit0ZXN0X21vZHVsZSgp IHsKKwlrbGRsb2FkIC4vJE1PRE5BTUUua28KKwlrbGR1bmxvYWQgLi8kTU9ETkFNRS5rbworfQor CitrZW52IC11ICRNT0ROQU1FLnR1bmFibGUgMj4vZGV2L251bGwKK3Rlc3RfbW9kdWxlCitmb3Ig aSBpbiAtMSAwIDE7IGRvCisJZm9yIGogaW4gJycgZyBHIGsgSyBtIE0gdCBUIHogWjsgZG8KKwkJ a2VudiAkTU9ETkFNRS50dW5hYmxlPSIkaSRqIgorCQl0ZXN0X21vZHVsZQorCWRvbmUKK2RvbmUK SW5kZXg6IHRvb2xzL3JlZ3Jlc3Npb24vdHVuYWJsZXMvdWxvbmcvdGVzdF91bG9uZ190dW5hYmxl LnNoCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tIHRvb2xzL3JlZ3Jlc3Npb24vdHVuYWJsZXMvdWxvbmcvdGVzdF91 bG9uZ190dW5hYmxlLnNoCShyZXZpc2lvbiAwKQorKysgdG9vbHMvcmVncmVzc2lvbi90dW5hYmxl cy91bG9uZy90ZXN0X3Vsb25nX3R1bmFibGUuc2gJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzgg QEAKKyMhL2Jpbi9zaAorIworIyBFeHBlY3RlZCB2YWx1ZXM6CisjICh1bnNldCkgICAgOiAgICAg ICAgICAgMAorIyAgICAgIC0xICAgIDogICBVTE9OR19NQVgKKyMgICAgICAgMCAgICA6ICAgICAg ICAgICAwCisjICAgICAgNDIgICAgOiAgICAgICAgICA0MgorIyBhc2RmMTIzNCAgIDogICAgICAg ICAgIDAgKHJlamVjdCkKKyMgTE9OR19NQVgrMSA6ICBMT05HX01BWCsxCisjIFVMT05HX01BWC0x OiBVTE9OR19NQVgtMQorIyBVTE9OR19NQVgrMTogICBVTE9OR19NQVgKKyMKKworTU9ETkFNRT0i JChiYXNlbmFtZSAiJDAiIC5zaCkiCisKK3Rlc3RfbW9kdWxlKCkgeworCWtsZGxvYWQgLi8kTU9E TkFNRS5rbworCWtsZHVubG9hZCAuLyRNT0ROQU1FLmtvCit9CisKK2Nhc2UgIiQoJChkaXJuYW1l ICIkMCIpLy4uL3Rvb2xzL2dldHdvcmRzaXplKSIgaW4KKzMyKQorCUxPTkdfTUFYX1BMVVNfMT0y MTQ3NDgzNjQ5CisJVUxPTkdfTUFYX01JTlVTXzE9NDI5NDk2NzI5NQorCVVMT05HX01BWF9QTFVT XzE9NDI5NDk2NzI5NworCTs7Cis2NCkKKwlMT05HX01BWF9QTFVTXzE9OTIyMzM3MjAzNjg1NDc3 NTgwOAorCVVMT05HX01BWF9NSU5VU18xPTE4NDQ2NzQ0MDczNzA5NTUxNjE0CisJVUxPTkdfTUFY X1BMVVNfMT0xODQ0Njc0NDA3MzcwOTU1MTYxNgorCTs7Citlc2FjCitrZW52IC11ICRNT0ROQU1F LnR1bmFibGUgMj4vZGV2L251bGwKK3Rlc3RfbW9kdWxlCitmb3IgaSBpbiAtMSAwIDQyIGFzZGYx MjM0ICRMT05HX01BWF9QTFVTXzEgJFVMT05HX01BWF9NSU5VU18xICRVTE9OR19NQVhfUExVU18x OyBkbworCWtlbnYgJE1PRE5BTUUudHVuYWJsZT0iJGkiCisJdGVzdF9tb2R1bGUKK2RvbmUKSW5k ZXg6IHRvb2xzL3JlZ3Jlc3Npb24vdHVuYWJsZXMvdWxvbmcvTWFrZWZpbGUKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gdG9vbHMvcmVncmVzc2lvbi90dW5hYmxlcy91bG9uZy9NYWtlZmlsZQkocmV2aXNpb24gMCkK KysrIHRvb2xzL3JlZ3Jlc3Npb24vdHVuYWJsZXMvdWxvbmcvTWFrZWZpbGUJKHJldmlzaW9uIDAp CkBAIC0wLDAgKzEsNCBAQAorS01PRD0JdGVzdF91bG9uZ190dW5hYmxlCitTUkNTPQl0ZXN0X3Vs b25nX3R1bmFibGUuYworCisuaW5jbHVkZSA8YnNkLmttb2QubWs+CkluZGV4OiB0b29scy9yZWdy ZXNzaW9uL3R1bmFibGVzL3Vsb25nL3Rlc3RfdWxvbmdfdHVuYWJsZS5jCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t IHRvb2xzL3JlZ3Jlc3Npb24vdHVuYWJsZXMvdWxvbmcvdGVzdF91bG9uZ190dW5hYmxlLmMJKHJl dmlzaW9uIDApCisrKyB0b29scy9yZWdyZXNzaW9uL3R1bmFibGVzL3Vsb25nL3Rlc3RfdWxvbmdf dHVuYWJsZS5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxIEBACisjaW5jbHVkZSA8c3lzL3Bh cmFtLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3Byb2MuaD4KKyNp bmNsdWRlIDxzeXMvbW9kdWxlLmg+CisjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUg PHN5cy9zeXN0bS5oPgorCisjZGVmaW5lIE1PRFVMRV9OQU1FCSJ0ZXN0X3Vsb25nX3R1bmFibGUi CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHR1bmFibGUgPSAwOworCitUVU5BQkxFX1VMT05HKCJ0 ZXN0X3Vsb25nX3R1bmFibGUudHVuYWJsZSIsICZ0dW5hYmxlKTsKKworc3RhdGljIGludAorbG9h ZCAobW9kdWxlX3QgbSwgaW50IHdoYXQsIHZvaWQgKmFyZykKK3sKKwlzd2l0Y2ggKHdoYXQpIHsK KwljYXNlIE1PRF9MT0FEOgorCQlwcmludGYoIiVzOiAlbHVcbiIsIE1PRFVMRV9OQU1FLCB0dW5h YmxlKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBtb2R1bGVkYXRh X3QgdGVzdF91bG9uZ190dW5hYmxlX21vZCA9IHsKKwlNT0RVTEVfTkFNRSwKKwlsb2FkLAorfTsK K0RFQ0xBUkVfTU9EVUxFKHRlc3RfdWxvbmdfdHVuYWJsZSwgdGVzdF91bG9uZ190dW5hYmxlX21v ZCwgU0lfU1VCX0tMRCwKKyAgICBTSV9PUkRFUl9BTlkpOworTU9EVUxFX1ZFUlNJT04odGVzdF91 bG9uZ190dW5hYmxlLCAxKTsKSW5kZXg6IHRvb2xzL3JlZ3Jlc3Npb24vdHVuYWJsZXMvc3RyaW5n L3Rlc3Rfc3RyaW5nX3R1bmFibGUuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0b29scy9yZWdyZXNzaW9uL3R1 bmFibGVzL3N0cmluZy90ZXN0X3N0cmluZ190dW5hYmxlLmMJKHJldmlzaW9uIDApCisrKyB0b29s cy9yZWdyZXNzaW9uL3R1bmFibGVzL3N0cmluZy90ZXN0X3N0cmluZ190dW5hYmxlLmMJKHJldmlz aW9uIDApCkBAIC0wLDAgKzEsMzEgQEAKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRl IDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcHJvYy5oPgorI2luY2x1ZGUgPHN5cy9tb2R1 bGUuaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisK KyNkZWZpbmUgTU9EVUxFX05BTUUJInRlc3Rfc3RyaW5nX3R1bmFibGUiCisKK3N0YXRpYyBjaGFy IHR1bmFibGVbMTBdOworCitUVU5BQkxFX1NUUigidGVzdF9zdHJpbmdfdHVuYWJsZS50dW5hYmxl IiwgdHVuYWJsZSwgc2l6ZW9mKHR1bmFibGUpKTsKKworc3RhdGljIGludAorbG9hZCAobW9kdWxl X3QgbSwgaW50IHdoYXQsIHZvaWQgKmFyZykKK3sKKwlzd2l0Y2ggKHdoYXQpIHsKKwljYXNlIE1P RF9MT0FEOgorCQlwcmludGYoIiVzOiAlc1xuIiwgTU9EVUxFX05BTUUsIHR1bmFibGUpOworCQli cmVhazsKKwl9CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIG1vZHVsZWRhdGFfdCB0ZXN0X3N0 cmluZ190dW5hYmxlX21vZCA9IHsKKwlNT0RVTEVfTkFNRSwKKwlsb2FkLAorfTsKK0RFQ0xBUkVf TU9EVUxFKHRlc3Rfc3RyaW5nX3R1bmFibGUsIHRlc3Rfc3RyaW5nX3R1bmFibGVfbW9kLCBTSV9T VUJfS0xELAorICAgIFNJX09SREVSX0FOWSk7CitNT0RVTEVfVkVSU0lPTih0ZXN0X3N0cmluZ190 dW5hYmxlLCAxKTsKSW5kZXg6IHRvb2xzL3JlZ3Jlc3Npb24vdHVuYWJsZXMvc3RyaW5nL3Rlc3Rf c3RyaW5nX3R1bmFibGUuc2gKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdG9vbHMvcmVncmVzc2lvbi90dW5hYmxl cy9zdHJpbmcvdGVzdF9zdHJpbmdfdHVuYWJsZS5zaAkocmV2aXNpb24gMCkKKysrIHRvb2xzL3Jl Z3Jlc3Npb24vdHVuYWJsZXMvc3RyaW5nL3Rlc3Rfc3RyaW5nX3R1bmFibGUuc2gJKHJldmlzaW9u IDApCkBAIC0wLDAgKzEsMjIgQEAKKyMhL2Jpbi9zaAorIworIyBFeHBlY3RlZCB2YWx1ZXM6Cisj ICh1bnNldCkgICAgICAgICAgICAgIDogICAgICAgICAgIiIKKyMgIiIgICAgICAgICAgICAgICAg ICAgOiAgICAgICAgICAiIgorIyBhc2RmMTIzNCAgICAgICAgICAgICA6ICAgIGFzZGYxMjM0Cisj IGNoYXJhY3RlciAgICAgICAgICAgIDogICBjaGFyYWN0ZXIKKyMgYXNvcnRvZmxvbmdpc2hzdHJp bmcgOiAgIGFzb3J0b2ZsbworIworCitNT0ROQU1FPSIkKGJhc2VuYW1lICIkMCIgLnNoKSIKKwor dGVzdF9tb2R1bGUoKSB7CisJa2xkbG9hZCAuLyRNT0ROQU1FLmtvCisJa2xkdW5sb2FkIC4vJE1P RE5BTUUua28KK30KKwordGVzdF9tb2R1bGUKK2ZvciBpIGluICIiIGFzZGYxMjM0IGNoYXJhY3Rl ciBhc29ydG9mbG9uZ2lzaHN0cmluZzsgZG8KKwlrZW52ICRNT0ROQU1FLnR1bmFibGU9IiRpIgor CXRlc3RfbW9kdWxlCitkb25lCkluZGV4OiB0b29scy9yZWdyZXNzaW9uL3R1bmFibGVzL3N0cmlu Zy9NYWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0b29scy9yZWdyZXNzaW9uL3R1bmFibGVzL3N0cmlu Zy9NYWtlZmlsZQkocmV2aXNpb24gMCkKKysrIHRvb2xzL3JlZ3Jlc3Npb24vdHVuYWJsZXMvc3Ry aW5nL01ha2VmaWxlCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKK0tNT0Q9CXRlc3Rfc3Ry aW5nX3R1bmFibGUKK1NSQ1M9CXRlc3Rfc3RyaW5nX3R1bmFibGUuYworCisuaW5jbHVkZSA8YnNk Lmttb2QubWs+CkluZGV4OiB0b29scy9yZWdyZXNzaW9uL3R1bmFibGVzL3F1YWQvdGVzdF9xdWFk X3R1bmFibGUuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0b29scy9yZWdyZXNzaW9uL3R1bmFibGVzL3F1YWQv dGVzdF9xdWFkX3R1bmFibGUuYwkocmV2aXNpb24gMCkKKysrIHRvb2xzL3JlZ3Jlc3Npb24vdHVu YWJsZXMvcXVhZC90ZXN0X3F1YWRfdHVuYWJsZS5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMx IEBACisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5j bHVkZSA8c3lzL3Byb2MuaD4KKyNpbmNsdWRlIDxzeXMvbW9kdWxlLmg+CisjaW5jbHVkZSA8c3lz L2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgorCisjZGVmaW5lIE1PRFVMRV9OQU1F CSJ0ZXN0X3F1YWRfdHVuYWJsZSIKKworc3RhdGljIHF1YWRfdCB0dW5hYmxlID0gMDsKKworVFVO QUJMRV9RVUFEKCJ0ZXN0X3F1YWRfdHVuYWJsZS50dW5hYmxlIiwgJnR1bmFibGUpOworCitzdGF0 aWMgaW50Citsb2FkIChtb2R1bGVfdCBtLCBpbnQgd2hhdCwgdm9pZCAqYXJnKQoreworCXN3aXRj aCAod2hhdCkgeworCWNhc2UgTU9EX0xPQUQ6CisJCXByaW50ZigiJXM6ICVsZFxuIiwgTU9EVUxF X05BTUUsIHR1bmFibGUpOworCQlicmVhazsKKwl9CisJcmV0dXJuICgwKTsKK30KKworc3RhdGlj IG1vZHVsZWRhdGFfdCB0ZXN0X3F1YWRfdHVuYWJsZV9tb2QgPSB7CisJTU9EVUxFX05BTUUsCisJ bG9hZCwKK307CitERUNMQVJFX01PRFVMRSh0ZXN0X3F1YWRfdHVuYWJsZSwgdGVzdF9xdWFkX3R1 bmFibGVfbW9kLCBTSV9TVUJfS0xELAorICAgIFNJX09SREVSX0FOWSk7CitNT0RVTEVfVkVSU0lP Tih0ZXN0X3F1YWRfdHVuYWJsZSwgMSk7CkluZGV4OiB0b29scy9yZWdyZXNzaW9uL3R1bmFibGVz L3F1YWQvdGVzdF9xdWFkX3R1bmFibGUuc2gKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdG9vbHMvcmVncmVzc2lv bi90dW5hYmxlcy9xdWFkL3Rlc3RfcXVhZF90dW5hYmxlLnNoCShyZXZpc2lvbiAwKQorKysgdG9v bHMvcmVncmVzc2lvbi90dW5hYmxlcy9xdWFkL3Rlc3RfcXVhZF90dW5hYmxlLnNoCShyZXZpc2lv biAwKQpAQCAtMCwwICsxLDQwIEBACisjIS9iaW4vc2gKKyMKKyMgRXhwZWN0ZWQgdmFsdWVzOgor IyAodW5zZXQpICAgIDogICAgICAgICAgIDAKKyMgICAgICAgMCAgICA6ICAgICAgICAgICAwCisj ICAgICAgNDIgICAgOiAgICAgICAgICA0MgorIyBhc2RmMTIzNCAgIDogICAgICAgICAgIDAgKHJl amVjdCkKKyMgTE9OR19NSU4tMSA6ICBMT05HX01JTgorIyBMT05HX01JTisxIDogIExPTkdfTUlO KzEKKyMgTE9OR19NQVgtMSA6ICBMT05HX01BWC0xCisjIExPTkdfTUFYKzEgOiAgTE9OR19NQVgK KyMKKworTU9ETkFNRT0iJChiYXNlbmFtZSAiJDAiIC5zaCkiCisKK3Rlc3RfbW9kdWxlKCkgewor CWtsZGxvYWQgLi8kTU9ETkFNRS5rbworCWtsZHVubG9hZCAuLyRNT0ROQU1FLmtvCit9CisKK2Nh c2UgIiQoJChkaXJuYW1lICIkMCIpLy4uL3Rvb2xzL2dldHdvcmRzaXplKSIgaW4KKzMyKQorCUxP TkdfTUlOX01JTlVTXzE9Ii0yMTQ3NDgzNjQ5IgorCUxPTkdfTUlOX1BMVVNfMT0iLTIxNDc0ODM2 NDciCisJTE9OR19NQVhfTUlOVVNfMT0yMTQ3NDgzNjQ3CisJTE9OR19NQVhfUExVU18xPTIxNDc0 ODM2NDkKKwk7OworNjQpCisJTE9OR19NSU5fTUlOVVNfMT0iLTkyMjMzNzIwMzY4NTQ3NzU4MDki CisJTE9OR19NSU5fUExVU18xPSItOTIyMzM3MjAzNjg1NDc3NTgwNyIKKwlMT05HX01BWF9NSU5V U18xPTkyMjMzNzIwMzY4NTQ3NzU4MDYKKwlMT05HX01BWF9QTFVTXzE9OTIyMzM3MjAzNjg1NDc3 NTgwOAorCTs7Citlc2FjCitrZW52IC11ICRNT0ROQU1FLnR1bmFibGUgMj4vZGV2L251bGwKK3Rl c3RfbW9kdWxlCitmb3IgaSBpbiAwIDQyIGFzZGYxMjM0ICRMT05HX01JTl9NSU5VU18xICRMT05H X01JTl9QTFVTXzEgJExPTkdfTUFYX01JTlVTXzEgJExPTkdfTUFYX1BMVVNfMSA7IGRvCisJa2Vu diAkTU9ETkFNRS50dW5hYmxlPSIkaSIKKwl0ZXN0X21vZHVsZQorZG9uZQpJbmRleDogdG9vbHMv cmVncmVzc2lvbi90dW5hYmxlcy9xdWFkL01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHRvb2xzL3Jl Z3Jlc3Npb24vdHVuYWJsZXMvcXVhZC9NYWtlZmlsZQkocmV2aXNpb24gMCkKKysrIHRvb2xzL3Jl Z3Jlc3Npb24vdHVuYWJsZXMvcXVhZC9NYWtlZmlsZQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0 IEBACitLTU9EPQl0ZXN0X3F1YWRfdHVuYWJsZQorU1JDUz0JdGVzdF9xdWFkX3R1bmFibGUuYwor CisuaW5jbHVkZSA8YnNkLmttb2QubWs+CkluZGV4OiB0b29scy9yZWdyZXNzaW9uL3R1bmFibGVz L3NpemUvdGVzdF9zaXplX3R1bmFibGUuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0b29scy9yZWdyZXNzaW9u L3R1bmFibGVzL3NpemUvdGVzdF9zaXplX3R1bmFibGUuYwkocmV2aXNpb24gMCkKKysrIHRvb2xz L3JlZ3Jlc3Npb24vdHVuYWJsZXMvc2l6ZS90ZXN0X3NpemVfdHVuYWJsZS5jCShyZXZpc2lvbiAw KQpAQCAtMCwwICsxLDMxIEBACisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lz L3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3Byb2MuaD4KKyNpbmNsdWRlIDxzeXMvbW9kdWxlLmg+ CisjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgorCisjZGVm aW5lIE1PRFVMRV9OQU1FCSJ0ZXN0X3NpemVfdHVuYWJsZSIKKworc3RhdGljIHNpemVfdCB0dW5h YmxlID0gMDsKKworVFVOQUJMRV9TSVpFKCJ0ZXN0X3NpemVfdHVuYWJsZS50dW5hYmxlIiwgJnR1 bmFibGUpOworCitzdGF0aWMgaW50Citsb2FkIChtb2R1bGVfdCBtLCBpbnQgd2hhdCwgdm9pZCAq YXJnKQoreworCXN3aXRjaCAod2hhdCkgeworCWNhc2UgTU9EX0xPQUQ6CisJCXByaW50ZigiJXM6 ICV6dVxuIiwgTU9EVUxFX05BTUUsIHR1bmFibGUpOworCQlicmVhazsKKwl9CisJcmV0dXJuICgw KTsKK30KKworc3RhdGljIG1vZHVsZWRhdGFfdCB0ZXN0X3NpemVfdHVuYWJsZV9tb2QgPSB7CisJ TU9EVUxFX05BTUUsCisJbG9hZCwKK307CitERUNMQVJFX01PRFVMRSh0ZXN0X3NpemVfdHVuYWJs ZSwgdGVzdF9zaXplX3R1bmFibGVfbW9kLCBTSV9TVUJfS0xELAorICAgIFNJX09SREVSX0FOWSk7 CitNT0RVTEVfVkVSU0lPTih0ZXN0X3NpemVfdHVuYWJsZSwgMSk7CkluZGV4OiB0b29scy9yZWdy ZXNzaW9uL3R1bmFibGVzL3NpemUvdGVzdF9zaXplX3R1bmFibGUuc2gKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g dG9vbHMvcmVncmVzc2lvbi90dW5hYmxlcy9zaXplL3Rlc3Rfc2l6ZV90dW5hYmxlLnNoCShyZXZp c2lvbiAwKQorKysgdG9vbHMvcmVncmVzc2lvbi90dW5hYmxlcy9zaXplL3Rlc3Rfc2l6ZV90dW5h YmxlLnNoCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM4IEBACisjIS9iaW4vc2gKKyMKKyMgRXhw ZWN0ZWQgdmFsdWVzOgorIyAodW5zZXQpICAgIDogICAgICAgICAgIDAKKyMgICAgICAtMSAgICA6 ICAgVUxPTkdfTUFYCisjICAgICAgIDAgICAgOiAgICAgICAgICAgMAorIyAgICAgIDQyICAgIDog ICAgICAgICAgNDIKKyMgYXNkZjEyMzQgICA6ICAgICAgICAgICAwIChyZWplY3QpCisjIExPTkdf TUFYKzEgOiAgTE9OR19NQVgrMQorIyBVTE9OR19NQVgtMTogVUxPTkdfTUFYLTEKKyMgVUxPTkdf TUFYKzE6ICAgVUxPTkdfTUFYCisjCisKK01PRE5BTUU9IiQoYmFzZW5hbWUgIiQwIiAuc2gpIgor Cit0ZXN0X21vZHVsZSgpIHsKKwlrbGRsb2FkIC4vJE1PRE5BTUUua28KKwlrbGR1bmxvYWQgLi8k TU9ETkFNRS5rbworfQorCitjYXNlICIkKCQoZGlybmFtZSAiJDAiKS8uLi90b29scy9nZXR3b3Jk c2l6ZSkiIGluCiszMikKKwlMT05HX01BWF9QTFVTXzE9MjE0NzQ4MzY0OQorCVVMT05HX01BWF9N SU5VU18xPTQyOTQ5NjcyOTUKKwlVTE9OR19NQVhfUExVU18xPTQyOTQ5NjcyOTcKKwk7OworNjQp CisJTE9OR19NQVhfUExVU18xPTkyMjMzNzIwMzY4NTQ3NzU4MDgKKwlVTE9OR19NQVhfTUlOVVNf MT0xODQ0Njc0NDA3MzcwOTU1MTYxNAorCVVMT05HX01BWF9QTFVTXzE9MTg0NDY3NDQwNzM3MDk1 NTE2MTYKKwk7OworZXNhYwora2VudiAtdSAkTU9ETkFNRS50dW5hYmxlIDI+L2Rldi9udWxsCit0 ZXN0X21vZHVsZQorZm9yIGkgaW4gLTEgMCA0MiBhc2RmMTIzNCAkTE9OR19NQVhfUExVU18xICRV TE9OR19NQVhfTUlOVVNfMSAkVUxPTkdfTUFYX1BMVVNfMTsgZG8KKwlrZW52ICRNT0ROQU1FLnR1 bmFibGU9IiRpIgorCXRlc3RfbW9kdWxlCitkb25lCkluZGV4OiB0b29scy9yZWdyZXNzaW9uL3R1 bmFibGVzL3NpemUvTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdG9vbHMvcmVncmVzc2lvbi90dW5h Ymxlcy9zaXplL01ha2VmaWxlCShyZXZpc2lvbiAwKQorKysgdG9vbHMvcmVncmVzc2lvbi90dW5h Ymxlcy9zaXplL01ha2VmaWxlCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKK0tNT0Q9CXRl c3Rfc2l6ZV90dW5hYmxlCitTUkNTPQl0ZXN0X3NpemVfdHVuYWJsZS5jCisKKy5pbmNsdWRlIDxi c2Qua21vZC5taz4KSW5kZXg6IHRvb2xzL3JlZ3Jlc3Npb24vdHVuYWJsZXMvaW50L3Rlc3RfaW50 X3R1bmFibGUuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0b29scy9yZWdyZXNzaW9uL3R1bmFibGVzL2ludC90 ZXN0X2ludF90dW5hYmxlLmMJKHJldmlzaW9uIDApCisrKyB0b29scy9yZWdyZXNzaW9uL3R1bmFi bGVzL2ludC90ZXN0X2ludF90dW5hYmxlLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzEgQEAK KyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRl IDxzeXMvcHJvYy5oPgorI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMvc3lz dG0uaD4KKyNpbmNsdWRlIDxzeXMvbW9kdWxlLmg+CisKKyNkZWZpbmUgTU9EVUxFX05BTUUJInRl c3RfaW50X3R1bmFibGUiCisKK3N0YXRpYyBpbnQgdHVuYWJsZSA9IDA7CisKK1RVTkFCTEVfSU5U KCJ0ZXN0X2ludF90dW5hYmxlLnR1bmFibGUiLCAmdHVuYWJsZSk7CisKK3N0YXRpYyBpbnQKK2xv YWQgKG1vZHVsZV90IG0sIGludCB3aGF0LCB2b2lkICphcmcpCit7CisJc3dpdGNoICh3aGF0KSB7 CisJY2FzZSBNT0RfTE9BRDoKKwkJcHJpbnRmKCIlczogJWRcbiIsIE1PRFVMRV9OQU1FLCB0dW5h YmxlKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBtb2R1bGVkYXRh X3QgdGVzdF9pbnRfdHVuYWJsZV9tb2QgPSB7CisJTU9EVUxFX05BTUUsCisJbG9hZCwKK307CitE RUNMQVJFX01PRFVMRSh0ZXN0X2ludF90dW5hYmxlLCB0ZXN0X2ludF90dW5hYmxlX21vZCwgU0lf U1VCX0tMRCwKKyAgICBTSV9PUkRFUl9BTlkpOworTU9EVUxFX1ZFUlNJT04odGVzdF9pbnRfdHVu YWJsZSwgMSk7CkluZGV4OiB0b29scy9yZWdyZXNzaW9uL3R1bmFibGVzL2ludC90ZXN0X2ludF90 dW5hYmxlLnNoCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLS0tIHRvb2xzL3JlZ3Jlc3Npb24vdHVuYWJsZXMvaW50L3Rl c3RfaW50X3R1bmFibGUuc2gJKHJldmlzaW9uIDApCisrKyB0b29scy9yZWdyZXNzaW9uL3R1bmFi bGVzL2ludC90ZXN0X2ludF90dW5hYmxlLnNoCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxIEBA CisjIS9iaW4vc2gKKyMKKyMgRXhwZWN0ZWQgdmFsdWVzOgorIyAodW5zZXQpICAgOiAgICAgICAg ICAgMAorIyAgICAgIC0xICAgOiAgICAgICAgICAtMQorIyAgICAgICAwICAgOiAgICAgICAgICAg MAorIyAgICAgIDQyICAgOiAgICAgICAgICA0MgorIyBhc2RmMTIzNCAgOiAgICAgICAgICAgMCAo cmVqZWN0KQorIyBJTlRfTUlOKzEgOiAgIElOVF9NSU4rMQorIyBJTlRfTUlOLTEgOiAgICAgICAg ICAgMCAocmVqZWN0KQorIyBJTlRfTUFYLTEgOiAgIElOVF9NQVgtMQorIyBJTlRfTUFYKzEgOiAg ICAgICAgICAgMCAocmVqZWN0KQorIworCitNT0ROQU1FPSIkKGJhc2VuYW1lICIkMCIgLnNoKSIK KwordGVzdF9tb2R1bGUoKSB7CisJa2xkbG9hZCAuLyRNT0ROQU1FLmtvCisJa2xkdW5sb2FkIC4v JE1PRE5BTUUua28KK30KKworSU5UX01JTl9QTFVTX09ORT0tMjE0NzQ4MzY0NworSU5UX01JTl9N SU5VU19PTkU9LTIxNDc0ODM2NDkKK0lOVF9NQVhfTUlOVVNfT05FPTIxNDc0ODM2NDYKK0lOVF9N QVhfUExVU19PTkU9MjE0NzQ4MzY0OAora2VudiAtdSAkTU9ETkFNRS50dW5hYmxlIDI+L2Rldi9u dWxsCit0ZXN0X21vZHVsZQorZm9yIGkgaW4gLTEgMCA0MiBhc2RmMTIzNCAkSU5UX01JTl9QTFVT X09ORSAkSU5UX01JTl9NSU5VU19PTkUgJElOVF9NQVhfTUlOVVNfT05FICRJTlRfTUFYX1BMVVNf T05FOyBkbworCWtlbnYgJE1PRE5BTUUudHVuYWJsZT0iJGkiCisJdGVzdF9tb2R1bGUKK2RvbmUK SW5kZXg6IHRvb2xzL3JlZ3Jlc3Npb24vdHVuYWJsZXMvaW50L01ha2VmaWxlCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIHRvb2xzL3JlZ3Jlc3Npb24vdHVuYWJsZXMvaW50L01ha2VmaWxlCShyZXZpc2lvbiAwKQor KysgdG9vbHMvcmVncmVzc2lvbi90dW5hYmxlcy9pbnQvTWFrZWZpbGUJKHJldmlzaW9uIDApCkBA IC0wLDAgKzEsNCBAQAorS01PRD0JdGVzdF9pbnRfdHVuYWJsZQorU1JDUz0JdGVzdF9pbnRfdHVu YWJsZS5jCisKKy5pbmNsdWRlIDxic2Qua21vZC5taz4KSW5kZXg6IHRvb2xzL3JlZ3Jlc3Npb24v dHVuYWJsZXMvTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdG9vbHMvcmVncmVzc2lvbi90dW5hYmxl cy9NYWtlZmlsZQkocmV2aXNpb24gMCkKKysrIHRvb2xzL3JlZ3Jlc3Npb24vdHVuYWJsZXMvTWFr ZWZpbGUJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK1NVQkRJUj0JCXRvb2xzCQlcCisJ CWludCB1aW50CVwKKwkJbG9uZyB1bG9uZwlcCisJCXBvaW50ZXIJCVwKKwkJcXVhZCB1cXVhZAlc CisJCXNpemUJCVwKKwkJc3RyaW5nCQlcCisJCXN1ZmZpeAkJXAorCisuaW5jbHVkZSA8YnNkLnN1 YmRpci5taz4K --001485ea873c7936730492c421bb--