From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18077 invoked by alias); 6 Sep 2013 15:35:27 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 18062 invoked by uid 89); 6 Sep 2013 15:35:25 -0000 Received: from mail-wi0-f171.google.com (HELO mail-wi0-f171.google.com) (209.85.212.171) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Fri, 06 Sep 2013 15:35:25 +0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=4.3 required=5.0 tests=AWL,BAYES_50,KAM_STOCKTIP,NO_RELAYS,T_FILL_THIS_FORM_SHORT autolearn=no version=3.3.2 X-HELO: mail-wi0-f171.google.com Received: by mail-wi0-f171.google.com with SMTP id hm2so1059526wib.4 for ; Fri, 06 Sep 2013 08:35:10 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:date:message-id:subject:from:to :content-type; bh=6VC8i0dnnyYTAgSXr5MmvASm4Aq8hSx9FqLuKlX+4vw=; b=gqK/W0h+8aoXcY9snuvHtLzMVenDBTqMPdoVtO396YM9RHMUQqUE4VwgaW3Dp2bq5a Czj8vCVhh9R+YJmw5wkIrk8Cz5zijfq1B9KusC4320uJ1+PiGvDurcMRPvCUWhpye6Sc uVngM/fL6I/vZIIQY3E9JkYdQWQMdHdH3UUb3BbpASxIMLNqDPhiBhxEUnY+fFzRjfBn hlL1uIPrODACuTCZQz9MJ1VQIruDDK6/Yb2Z8YFkEnxDaMHtqmImOnyL19kp21AY+EhN NJpu4tvL33gK/acaAOSMwte+7IeVp4d5qTqBJZ34dmt2CPjZOvrxr3/0nyGktz1ia/wX TIwg== X-Gm-Message-State: ALoCoQlQ66zAKO21mxEPBjFYY//+Qb8ogbi1YlHsOc5f1rRIrFw9t7dSpYtMYf3GFpeYJoC9074d MIME-Version: 1.0 X-Received: by 10.180.9.140 with SMTP id z12mr2443718wia.37.1378481710268; Fri, 06 Sep 2013 08:35:10 -0700 (PDT) Received: by 10.216.148.70 with HTTP; Fri, 6 Sep 2013 08:35:10 -0700 (PDT) Date: Fri, 06 Sep 2013 15:35:00 -0000 Message-ID: Subject: beginnings of Guile support From: Doug Evans To: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=001a11c239d2ab951104e5b8c816 X-SW-Source: 2013-09/txt/msg00241.txt.bz2 --001a11c239d2ab951104e5b8c816 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 346 Hi. As a personal project, I'm adding scheme scripting to gdb. This patch is very preliminary (no docs, etc. etc. etc.), but I want to give people a heads up. To try to plug scheme in cleanly I've created scripting.[ch] as the interface between gdb and python/scheme. It's not complete, not least of which is varobj.c, but it feels reasonable. --001a11c239d2ab951104e5b8c816 Content-Type: text/plain; charset=US-ASCII; name="scheme.patch.txt" Content-Disposition: attachment; filename="scheme.patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hl9ked1o0 Content-length: 333886 SW5kZXg6IE1ha2VmaWxlLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT IGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvTWFrZWZpbGUuaW4sdgpyZXRyaWV2 aW5nIHJldmlzaW9uIDEuMTI2NwpkaWZmIC11IC1wIC1yMS4xMjY3IE1ha2Vm aWxlLmluCi0tLSBNYWtlZmlsZS5pbgkyMiBBdWcgMjAxMyAyMzo0NjoyOCAt MDAwMAkxLjEyNjcKKysrIE1ha2VmaWxlLmluCTYgU2VwIDIwMTMgMTU6MTc6 MTIgLTAwMDAKQEAgLTI3Miw2ICsyNzIsMzQgQEAgU1VCRElSX1RVSV9MREZM QUdTPQogU1VCRElSX1RVSV9DRkxBR1M9IFwKIAktRFRVST0xCiAKKyMgc2No ZW1lIHN1YiBkaXJlY3RvcnkgZGVmaW5pdG9ucyBmb3IgZ3VpbGUgc3VwcG9y dAorCitTVUJESVJfU0NIRU1FX09CUyA9IFwKKwlzY2hlbWUubyBcCisJc2Nt LWJyZWFrcG9pbnQubyBcCisJc2NtLWV4Y2VwdGlvbi5vIFwKKwlzY20taXRl cmF0b3IubyBcCisJc2NtLXByZXR0eS1wcmludC5vIFwKKwlzY20tc21vYnMu byBcCisJc2NtLXR5cGUubyBcCisJc2NtLXR5cGUtcHJpbnRlcnMubyBcCisJ c2NtLXV0aWxzLm8gXAorCXNjbS12YWx1ZS5vCitTVUJESVJfU0NIRU1FX1NS Q1MgPSBcCisJc2NoZW1lL3NjaGVtZS5jIFwKKwlzY2hlbWUvc2NtLWJyZWFr cG9pbnQuYyBcCisJc2NoZW1lL3NjbS1leGNlcHRpb24uYyBcCisJc2NoZW1l L3NjbS1pdGVyYXRvci5jIFwKKwlzY2hlbWUvc2NtLXByZXR0eS1wcmludC5j IFwKKwlzY2hlbWUvc2NtLXNtb2JzLmMgXAorCXNjaGVtZS9zY20tdHlwZS5j IFwKKwlzY2hlbWUvc2NtLXR5cGUtcHJpbnRlcnMuYyBcCisJc2NoZW1lL3Nj bS11dGlscy5jIFwKKwlzY2hlbWUvc2NtLXZhbHVlLmMKK1NVQkRJUl9TQ0hF TUVfREVQUyA9CitTVUJESVJfU0NIRU1FX0xERkxBR1M9CitTVUJESVJfU0NI RU1FX0NGTEFHUz0KKwogIwogIyBweXRob24gc3ViIGRpcmVjdG9yeSBkZWZp bml0b25zCiAjCkBAIC00NTAsNyArNDc4LDcgQEAgQ0ZMQUdTID0gQENGTEFH U0AKICMgYXJlIHNvbWV0aW1lcyBhIGxpdHRsZSBnZW5lcmljLCB3ZSB0aGlu ayB0aGF0IHRoZSByaXNrIG9mIGNvbGxpc2lvbgogIyB3aXRoIG90aGVyIGhl YWRlciBmaWxlcyBpcyBoaWdoLiAgSWYgdGhhdCBoYXBwZW5zLCB3ZSB0cnkg dG8gbWl0aWdhdGUKICMgYSBiaXQgdGhlIGNvbnNlcXVlbmNlcyBieSBwdXR0 aW5nIHRoZSBQeXRob24gaW5jbHVkZXMgbGFzdCBpbiB0aGUgbGlzdC4KLUlO VEVSTkFMX0NQUEZMQUdTID0gQENQUEZMQUdTQCBAUFlUSE9OX0NQUEZMQUdT QAorSU5URVJOQUxfQ1BQRkxBR1MgPSBAQ1BQRkxBR1NAIEBTQ0hFTUVfQ1BQ RkxBR1NAIEBQWVRIT05fQ1BQRkxBR1NACiAKICMgTmVlZCB0byBwYXNzIHRo aXMgdG8gdGVzdHN1aXRlIGZvciAibWFrZSBjaGVjayIuICBQcm9iYWJseSBz aG91bGQgYmUKICMgY29uc2lzdGVudCB3aXRoIHRvcC1sZXZlbCBNYWtlZmls ZS5pbiBhbmQgZ2RiL3Rlc3RzdWl0ZS9NYWtlZmlsZS5pbgpAQCAtNDgzLDcg KzUxMSw4IEBAIElOVEVSTkFMX0xERkxBR1MgPSAkKENGTEFHUykgJChHTE9C QUxfQ0YKICMgWE1fQ0xJQlMsIGRlZmluZWQgaW4gKmNvbmZpZyBmaWxlcywg aGF2ZSBob3N0LWRlcGVuZGVudCBsaWJzLgogIyBMSUJJQkVSVFkgYXBwZWFy cyB0d2ljZSBvbiBwdXJwb3NlLgogQ0xJQlMgPSAkKFNJTSkgJChSRUFETElO RSkgJChPUENPREVTKSAkKEJGRCkgJChJTlRMKSAkKExJQklCRVJUWSkgJChM SUJERUNOVU1CRVIpIFwKLQkkKFhNX0NMSUJTKSAkKE5BVF9DTElCUykgJChH REJUS0xJQlMpIEBMSUJTQCBAUFlUSE9OX0xJQlNAIFwKKwkkKFhNX0NMSUJT KSAkKE5BVF9DTElCUykgJChHREJUS0xJQlMpIFwKKwlATElCU0AgQFNDSEVN RV9MSUJTQCBAUFlUSE9OX0xJQlNAIFwKIAkkKExJQkVYUEFUKSAkKExJQkxa TUEpICQoTElCQkFCRUxUUkFDRSkgXAogCSQoTElCSUJFUlRZKSAkKFdJTjMy TElCUykgJChMSUJHTlUpCiBDREVQUyA9ICQoWE1fQ0RFUFMpICQoTkFUX0NE RVBTKSAkKFNJTSkgJChCRkQpICQoUkVBRExJTkVfREVQUykgXApAQCAtNzUy LDcgKzc4MSw3IEBAIFNGSUxFUyA9IGFkYS1leHAueSBhZGEtbGFuZy5jIGFk YS10eXBlcHIKIAlwcm9jLXNlcnZpY2UubGlzdCBwcm9nc3BhY2UuYyBcCiAJ cHJvbG9ndWUtdmFsdWUuYyBwc3ltdGFiLmMgXAogCXJlZ2NhY2hlLmMgcmVn Z3JvdXBzLmMgcmVtb3RlLmMgcmVtb3RlLWZpbGVpby5jIHJlbW90ZS1ub3Rp Zi5jIHJldmVyc2UuYyBcCi0Jc2VudGluZWwtZnJhbWUuYyBcCisJc2NyaXB0 aW5nLmMgc2VudGluZWwtZnJhbWUuYyBcCiAJc2VyaWFsLmMgc2VyLWJhc2Uu YyBzZXItdW5peC5jIHNraXAuYyBcCiAJc29saWIuYyBzb2xpYi10YXJnZXQu YyBzb3VyY2UuYyBcCiAJc3RhYnNyZWFkLmMgc3RhY2suYyBwcm9iZS5jIHN0 YXAtcHJvYmUuYyBzdGQtcmVncy5jIFwKQEAgLTkxMiw2ICs5NDEsNyBAQCBD T01NT05fT0JTID0gJChERVBGSUxFUykgJChDT05GSUdfT0JTKSAkCiAJb3Nh YmkubyBjb3B5aW5nLm8gXAogCW1lbWF0dHIubyBtZW0tYnJlYWsubyB0YXJn ZXQubyBwYXJzZS5vIGxhbmd1YWdlLm8gYnVpbGRzeW0ubyBcCiAJZmluZGNt ZC5vIFwKKwlzY3JpcHRpbmcubyBcCiAJc3RkLXJlZ3MubyBcCiAJc2lnbmFs cy5vIFwKIAlleGVjLm8gcmV2ZXJzZS5vIFwKQEAgLTEwNzMsNiArMTEwMyw5 IEBAIGluc3RhbGwtb25seTogJChDT05GSUdfSU5TVEFMTCkKIAlmaQogCUAk KE1BS0UpIERPPWluc3RhbGwgIkRPRElSUz0kKFNVQkRJUlMpIiAkKEZMQUdT X1RPX1BBU1MpIHN1YmRpcl9kbwogCitpbnN0YWxsLXNjaGVtZToKKwkkKFNI RUxMKSAkKHNyY2RpcikvLi4vbWtpbnN0YWxsZGlycyAkKERFU1RESVIpJChH REJfREFUQURJUikvc2NoZW1lL2dkYgorCiBpbnN0YWxsLXB5dGhvbjoKIAkk KFNIRUxMKSAkKHNyY2RpcikvLi4vbWtpbnN0YWxsZGlycyAkKERFU1RESVIp JChHREJfREFUQURJUikvcHl0aG9uL2dkYgogCkBAIC0yMTIwLDcgKzIxNTMs NTIgQEAgdHVpLXdpbnNvdXJjZS5vOiAkKHNyY2RpcikvdHVpL3R1aS13aW5z bwogCSQoQ09NUElMRSkgJChzcmNkaXIpL3R1aS90dWktd2luc291cmNlLmMK IAkkKFBPU1RDT01QSUxFKQogCisjIEd1aWxlIHN1cHBvcnQuCisjIGdkYi9z Y2hlbWUgZGVwZW5kZW5jaWVzCiAjCisjIE5lZWQgdG8gZXhwbGljaXRseSBz cGVjaWZ5IHRoZSBjb21waWxlIHJ1bGUgYXMgbWFrZSB3aWxsIGRvIG5vdGhp bmcKKyMgb3IgdHJ5IHRvIGNvbXBpbGUgdGhlIG9iamVjdCBmaWxlIGludG8g dGhlIHN1Yi1kaXJlY3RvcnkuCisKK3NjaGVtZS5vOiAkKHNyY2Rpcikvc2No ZW1lL3NjaGVtZS5jCisJJChDT01QSUxFKSAkKHNyY2Rpcikvc2NoZW1lL3Nj aGVtZS5jCisJJChQT1NUQ09NUElMRSkKKworc2NtLWJyZWFrcG9pbnQubzog JChzcmNkaXIpL3NjaGVtZS9zY20tYnJlYWtwb2ludC5jCisJJChDT01QSUxF KSAkKHNyY2Rpcikvc2NoZW1lL3NjbS1icmVha3BvaW50LmMKKwkkKFBPU1RD T01QSUxFKQorCitzY20tZXhjZXB0aW9uLm86ICQoc3JjZGlyKS9zY2hlbWUv c2NtLWV4Y2VwdGlvbi5jCisJJChDT01QSUxFKSAkKHNyY2Rpcikvc2NoZW1l L3NjbS1leGNlcHRpb24uYworCSQoUE9TVENPTVBJTEUpCisKK3NjbS1pdGVy YXRvci5vOiAkKHNyY2Rpcikvc2NoZW1lL3NjbS1pdGVyYXRvci5jCisJJChD T01QSUxFKSAkKHNyY2Rpcikvc2NoZW1lL3NjbS1pdGVyYXRvci5jCisJJChQ T1NUQ09NUElMRSkKKworc2NtLXByZXR0eS1wcmludC5vOiAkKHNyY2Rpcikv c2NoZW1lL3NjbS1wcmV0dHktcHJpbnQuYworCSQoQ09NUElMRSkgJChzcmNk aXIpL3NjaGVtZS9zY20tcHJldHR5LXByaW50LmMKKwkkKFBPU1RDT01QSUxF KQorCitzY20tc21vYnMubzogJChzcmNkaXIpL3NjaGVtZS9zY20tc21vYnMu YworCSQoQ09NUElMRSkgJChzcmNkaXIpL3NjaGVtZS9zY20tc21vYnMuYwor CSQoUE9TVENPTVBJTEUpCisKK3NjbS10eXBlLm86ICQoc3JjZGlyKS9zY2hl bWUvc2NtLXR5cGUuYworCSQoQ09NUElMRSkgJChzcmNkaXIpL3NjaGVtZS9z Y20tdHlwZS5jCisJJChQT1NUQ09NUElMRSkKKworc2NtLXR5cGUtcHJpbnRl cnMubzogJChzcmNkaXIpL3NjaGVtZS9zY20tdHlwZS1wcmludGVycy5jCisJ JChDT01QSUxFKSAkKHNyY2Rpcikvc2NoZW1lL3NjbS10eXBlLXByaW50ZXJz LmMKKwkkKFBPU1RDT01QSUxFKQorCitzY20tdXRpbHMubzogJChzcmNkaXIp L3NjaGVtZS9zY20tdXRpbHMuYworCSQoQ09NUElMRSkgJChzcmNkaXIpL3Nj aGVtZS9zY20tdXRpbHMuYworCSQoUE9TVENPTVBJTEUpCisKK3NjbS12YWx1 ZS5vOiAkKHNyY2Rpcikvc2NoZW1lL3NjbS12YWx1ZS5jCisJJChDT01QSUxF KSAkKHNyY2Rpcikvc2NoZW1lL3NjbS12YWx1ZS5jCisJJChQT1NUQ09NUElM RSkKKwogIyBnZGIvcHl0aG9uLyBkZXBlbmRlbmNpZXMKICMKICMgTmVlZCB0 byBleHBsaWNpdGx5IHNwZWNpZnkgdGhlIGNvbXBpbGUgcnVsZSBhcyBtYWtl IHdpbGwgZG8gbm90aGluZwpJbmRleDogYXV0by1sb2FkLmMKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9hdXRv LWxvYWQuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMQpkaWZmIC11IC1w IC1yMS4yMSBhdXRvLWxvYWQuYwotLS0gYXV0by1sb2FkLmMJMjIgQXByIDIw MTMgMTY6NDY6MTQgLTAwMDAJMS4yMQorKysgYXV0by1sb2FkLmMJNiBTZXAg MjAxMyAxNToxNzoxMiAtMDAwMApAQCAtODQ2LDcgKzg0Niw3IEBAIGxvYWRf YXV0b19zY3JpcHRzX2Zvcl9vYmpmaWxlIChzdHJ1Y3Qgb2IKICAgaWYgKGF1 dG9fbG9hZF9nZGJfc2NyaXB0cykKICAgICBhdXRvX2xvYWRfb2JqZmlsZV9z Y3JpcHQgKG9iamZpbGUsICZzY3JpcHRfbGFuZ3VhZ2VfZ2RiKTsKIAotICBn ZGJweV9sb2FkX2F1dG9fc2NyaXB0c19mb3Jfb2JqZmlsZSAob2JqZmlsZSk7 CisgIGxvYWRfc2xhbmdfYXV0b19zY3JpcHRzX2Zvcl9vYmpmaWxlIChvYmpm aWxlKTsKIH0KIAogLyogVGhpcyBpcyBhIG5ld19vYmpmaWxlIG9ic2VydmVy IGNhbGxiYWNrIHRvIGF1dG8tbG9hZCBzY3JpcHRzLgpAQCAtMTIzNCw2ICsx MjM0LDcgQEAgVXNhZ2U6IGluZm8gYXV0by1sb2FkIGxvY2FsLWdkYmluaXQi KSwKIAkgICBhdXRvX2xvYWRfaW5mb19jbWRsaXN0X2dldCAoKSk7CiAKICAg YXV0b19sb2FkX2RpciA9IHhzdHJkdXAgKEFVVE9fTE9BRF9ESVIpOworICAv LyBUT0RPOiB4eXpkamUKICAgc2NyaXB0c19kaXJlY3RvcnlfaGVscCA9IHhz dHJwcmludGYgKAogI2lmZGVmIEhBVkVfUFlUSE9OCiAJCQkJICAgICAgIF8o IlwKSW5kZXg6IGJyZWFrcG9pbnQuYwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2JyZWFrcG9pbnQuYyx2CnJl dHJpZXZpbmcgcmV2aXNpb24gMS43NzYKZGlmZiAtdSAtcCAtcjEuNzc2IGJy ZWFrcG9pbnQuYwotLS0gYnJlYWtwb2ludC5jCTIzIEF1ZyAyMDEzIDA2OjIy OjA5IC0wMDAwCTEuNzc2CisrKyBicmVha3BvaW50LmMJNiBTZXAgMjAxMyAx NToxNzoxMiAtMDAwMApAQCAtMTA0OCwxNCArMTA0OCw2IEBAIGNvbmRpdGlv bl9jb21tYW5kIChjaGFyICphcmcsIGludCBmcm9tX3QKICAgQUxMX0JSRUFL UE9JTlRTIChiKQogICAgIGlmIChiLT5udW1iZXIgPT0gYm51bSkKICAgICAg IHsKLQkvKiBDaGVjayBpZiB0aGlzIGJyZWFrcG9pbnQgaGFzIGEgUHl0aG9u IG9iamVjdCBhc3NpZ25lZCB0bwotCSAgIGl0LCBhbmQgaWYgaXQgaGFzIGEg ZGVmaW5pdGlvbiBvZiB0aGUgInN0b3AiCi0JICAgbWV0aG9kLiAgVGhpcyBt ZXRob2QgYW5kIGNvbmRpdGlvbnMgZW50ZXJlZCBpbnRvIEdEQiBmcm9tCi0J ICAgdGhlIENMSSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiAgKi8KLQlpZiAo Yi0+cHlfYnBfb2JqZWN0Ci0JICAgICYmIGdkYnB5X2JyZWFrcG9pbnRfaGFz X3B5X2NvbmQgKGItPnB5X2JwX29iamVjdCkpCi0JICBlcnJvciAoXygiQ2Fu bm90IHNldCBhIGNvbmRpdGlvbiB3aGVyZSBhIFB5dGhvbiAnc3RvcCcgIgot CQkgICAibWV0aG9kIGhhcyBiZWVuIGRlZmluZWQgaW4gdGhlIGJyZWFrcG9p bnQuIikpOwogCXNldF9icmVha3BvaW50X2NvbmRpdGlvbiAoYiwgcCwgZnJv bV90dHkpOwogCiAJaWYgKGlzX2JyZWFrcG9pbnQgKGIpKQpAQCAtNDYwOSw3 ICs0NjAxLDcgQEAgYnBzdGF0X3ByaW50IChicHN0YXQgYnMsIGludCBraW5k KQogICByZXR1cm4gUFJJTlRfVU5LTk9XTjsKIH0KIAotLyogRXZhbHVhdGUg dGhlIGV4cHJlc3Npb24gRVhQIGFuZCByZXR1cm4gMSBpZiB2YWx1ZSBpcyB6 ZXJvLiAgVGhpcyBpcworLyogRXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gRVhQ IGFuZCByZXR1cm4gMSBpZiB2YWx1ZSBpcyBub256ZXJvLiAgVGhpcyBpcwog ICAgdXNlZCBpbnNpZGUgYSBjYXRjaF9lcnJvcnMgdG8gZXZhbHVhdGUgdGhl IGJyZWFrcG9pbnQgY29uZGl0aW9uLgogICAgVGhlIGFyZ3VtZW50IGlzIGEg InN0cnVjdCBleHByZXNzaW9uICoiIHRoYXQgaGFzIGJlZW4gY2FzdCB0byBh CiAgICAiY2hhciAqIiB0byBtYWtlIGl0IHBhc3MgdGhyb3VnaCBjYXRjaF9l cnJvcnMuICAqLwpAQCAtNDYxOCw3ICs0NjEwLDcgQEAgc3RhdGljIGludAog YnJlYWtwb2ludF9jb25kX2V2YWwgKHZvaWQgKmV4cCkKIHsKICAgc3RydWN0 IHZhbHVlICptYXJrID0gdmFsdWVfbWFyayAoKTsKLSAgaW50IGkgPSAhdmFs dWVfdHJ1ZSAoZXZhbHVhdGVfZXhwcmVzc2lvbiAoKHN0cnVjdCBleHByZXNz aW9uICopIGV4cCkpOworICBpbnQgaSA9IHZhbHVlX3RydWUgKGV2YWx1YXRl X2V4cHJlc3Npb24gKChzdHJ1Y3QgZXhwcmVzc2lvbiAqKSBleHApKTsKIAog ICB2YWx1ZV9mcmVlX3RvX21hcmsgKG1hcmspOwogICByZXR1cm4gaTsKQEAg LTUwNTksNyArNTA1MSw2IEBAIGJwc3RhdF9jaGVja193YXRjaHBvaW50IChi cHN0YXQgYnMpCiAgICAgfQogfQogCi0KIC8qIENoZWNrIGNvbmRpdGlvbnMg KGNvbmRpdGlvbiBwcm9wZXIsIGZyYW1lLCB0aHJlYWQgYW5kIGlnbm9yZSBj b3VudCkKICAgIG9mIGJyZWFrcG9pbnQgcmVmZXJyZWQgdG8gYnkgQlMuICBJ ZiB3ZSBzaG91bGQgbm90IHN0b3AgZm9yIHRoaXMKICAgIGJyZWFrcG9pbnQs IHNldCBCUy0+c3RvcCB0byAwLiAgKi8KQEAgLTUwNzAsNiArNTA2MSwxMiBA QCBicHN0YXRfY2hlY2tfYnJlYWtwb2ludF9jb25kaXRpb25zIChicHN0CiAg IGludCB0aHJlYWRfaWQgPSBwaWRfdG9fdGhyZWFkX2lkIChwdGlkKTsKICAg Y29uc3Qgc3RydWN0IGJwX2xvY2F0aW9uICpibDsKICAgc3RydWN0IGJyZWFr cG9pbnQgKmI7CisgIHN0cnVjdCBleHByZXNzaW9uICpjbGlfY29uZDsKKyAg aW50IGNsaV9jb25kX2lzX25vbnplcm8gPSAwOworICBpbnQgaGF2ZV9zbGFu Z19jb25kOworICBpbnQgc2xhbmdfY29uZF9pc19ub256ZXJvID0gMDsKKwor ICBnZGJfYXNzZXJ0IChicy0+c3RvcCk7CiAKICAgLyogQlMgaXMgYnVpbHQg Zm9yIGV4aXN0aW5nIHN0cnVjdCBicmVha3BvaW50LiAgKi8KICAgYmwgPSBi cy0+YnBfbG9jYXRpb25fYXQ7CkBAIC01MDgzLDExMSArNTA4MCwxMjcgQEAg YnBzdGF0X2NoZWNrX2JyZWFrcG9pbnRfY29uZGl0aW9ucyAoYnBzdAogCiAg IGlmIChmcmFtZV9pZF9wIChiLT5mcmFtZV9pZCkKICAgICAgICYmICFmcmFt ZV9pZF9lcSAoYi0+ZnJhbWVfaWQsIGdldF9zdGFja19mcmFtZV9pZCAoZ2V0 X2N1cnJlbnRfZnJhbWUgKCkpKSkKLSAgICBicy0+c3RvcCA9IDA7Ci0gIGVs c2UgaWYgKGJzLT5zdG9wKQogICAgIHsKLSAgICAgIGludCB2YWx1ZV9pc196 ZXJvID0gMDsKLSAgICAgIHN0cnVjdCBleHByZXNzaW9uICpjb25kOworICAg ICAgYnMtPnN0b3AgPSAwOworICAgICAgcmV0dXJuOworICAgIH0KIAotICAg ICAgLyogRXZhbHVhdGUgUHl0aG9uIGJyZWFrcG9pbnRzIHRoYXQgaGF2ZSBh ICJzdG9wIgotCSBtZXRob2QgaW1wbGVtZW50ZWQuICAqLwotICAgICAgaWYg KGItPnB5X2JwX29iamVjdCkKLQlicy0+c3RvcCA9IGdkYnB5X3Nob3VsZF9z dG9wIChiLT5weV9icF9vYmplY3QpOworICAvKiBEb24ndCBldmFsdWF0ZSB0 aGUgY29uZGl0aW9uIGlmIHRoaXMgaXMgYSB0aHJlYWQtc3BlY2lmaWMgYnJl YWtwb2ludCBmb3IKKyAgICAgYSBkaWZmZXJlbnQgdGhyZWFkLiAgKi8KIAot ICAgICAgaWYgKGlzX3dhdGNocG9pbnQgKGIpKQotCXsKLQkgIHN0cnVjdCB3 YXRjaHBvaW50ICp3ID0gKHN0cnVjdCB3YXRjaHBvaW50ICopIGI7CisgIGlm IChiLT50aHJlYWQgIT0gLTEgJiYgYi0+dGhyZWFkICE9IHRocmVhZF9pZCkK KyAgICB7CisgICAgICBicy0+c3RvcCA9IDA7CisgICAgICByZXR1cm47Cisg ICAgfQogCi0JICBjb25kID0gdy0+Y29uZF9leHA7Ci0JfQotICAgICAgZWxz ZQotCWNvbmQgPSBibC0+Y29uZDsKKyAgLyogU2ltaWxhcmx5LCBkb24ndCBl dmFsdWF0ZSB0aGUgY29uZGl0aW9uIGlmIHdlJ3JlIHN0aWxsIGlnbm9yaW5n IHRoaXMKKyAgICAgYnJlYWtwb2ludC4gICovCiAKLSAgICAgIGlmIChjb25k ICYmIGItPmRpc3Bvc2l0aW9uICE9IGRpc3BfZGVsX2F0X25leHRfc3RvcCkK LQl7Ci0JICBpbnQgd2l0aGluX2N1cnJlbnRfc2NvcGUgPSAxOwotCSAgc3Ry dWN0IHdhdGNocG9pbnQgKiB3OworICBpZiAoYi0+aWdub3JlX2NvdW50ID4g MCkKKyAgICB7CisgICAgICBiLT5pZ25vcmVfY291bnQtLTsKKyAgICAgIGJz LT5zdG9wID0gMDsKKyAgICAgIC8qIEluY3JlYXNlIHRoZSBoaXQgY291bnQg ZXZlbiB0aG91Z2ggd2UgZG9uJ3Qgc3RvcC4gICovCisgICAgICArKyhiLT5o aXRfY291bnQpOworICAgICAgb2JzZXJ2ZXJfbm90aWZ5X2JyZWFrcG9pbnRf bW9kaWZpZWQgKGIpOworICAgICAgcmV0dXJuOworICAgIH0JCiAKLQkgIC8q IFdlIHVzZSB2YWx1ZV9tYXJrIGFuZCB2YWx1ZV9mcmVlX3RvX21hcmsgYmVj YXVzZSBpdCBjb3VsZAotCSAgICAgYmUgYSBsb25nIHRpbWUgYmVmb3JlIHdl IHJldHVybiB0byB0aGUgY29tbWFuZCBsZXZlbCBhbmQKLQkgICAgIGNhbGwg ZnJlZV9hbGxfdmFsdWVzLiAgV2UgY2FuJ3QgY2FsbCBmcmVlX2FsbF92YWx1 ZXMKLQkgICAgIGJlY2F1c2Ugd2UgbWlnaHQgYmUgaW4gdGhlIG1pZGRsZSBv ZiBldmFsdWF0aW5nIGEKLQkgICAgIGZ1bmN0aW9uIGNhbGwuICAqLwotCSAg c3RydWN0IHZhbHVlICptYXJrID0gdmFsdWVfbWFyayAoKTsKKyAgLyogVGhl IGRlZmF1bHQgaXMgdG8gc3RvcCB3aGVuIHRoZSBicmVha3BvaW50IGlzIHJl YWNoZWQuCisgICAgIEhvd2V2ZXIsIGlmIHRoZSBicmVha3BvaW50IGhhcyBh IGNvbmRpdGlvbiAoZWl0aGVyIGZyb20gdGhlIENMSSwKKyAgICAgb3IgZnJv bSBhIHNjcmlwdGluZyBsYW5ndWFnZSksIHRoZW4gb25seSBzdG9wIGlmIGF0 IGxlYXN0IG9uZSBvZgorICAgICB0aGUgY29uZGl0aW9ucyBpcyBUUlVFLiAg Ki8KIAotCSAgaWYgKGlzX3dhdGNocG9pbnQgKGIpKQotCSAgICB3ID0gKHN0 cnVjdCB3YXRjaHBvaW50ICopIGI7Ci0JICBlbHNlCi0JICAgIHcgPSBOVUxM OworICAvKiBFdmFsdWF0ZSBQeXRob24vU2NoZW1lIGJyZWFrcG9pbnRzIHRo YXQgaGF2ZSBhICJzdG9wIgorICAgICBtZXRob2QgaW1wbGVtZW50ZWQuICAq LworICBoYXZlX3NsYW5nX2NvbmQgPSBicmVha3BvaW50X2hhc19zbGFuZ19j b25kIChiKTsKKyAgaWYgKGhhdmVfc2xhbmdfY29uZCkKKyAgICBzbGFuZ19j b25kX2lzX25vbnplcm8gPSBicmVha3BvaW50X3NsYW5nX2NvbmRfc2F5c19z dG9wIChiKTsKIAotCSAgLyogTmVlZCB0byBzZWxlY3QgdGhlIGZyYW1lLCB3 aXRoIGFsbCB0aGF0IGltcGxpZXMgc28gdGhhdAotCSAgICAgdGhlIGNvbmRp dGlvbnMgd2lsbCBoYXZlIHRoZSByaWdodCBjb250ZXh0LiAgQmVjYXVzZSB3 ZQotCSAgICAgdXNlIHRoZSBmcmFtZSwgd2Ugd2lsbCBub3Qgc2VlIGFuIGlu bGluZWQgZnVuY3Rpb24ncwotCSAgICAgdmFyaWFibGVzIHdoZW4gd2UgYXJy aXZlIGF0IGEgYnJlYWtwb2ludCBhdCB0aGUgc3RhcnQKLQkgICAgIG9mIHRo ZSBpbmxpbmVkIGZ1bmN0aW9uOyB0aGUgY3VycmVudCBmcmFtZSB3aWxsIGJl IHRoZQotCSAgICAgY2FsbCBzaXRlLiAgKi8KLQkgIGlmICh3ID09IE5VTEwg fHwgdy0+Y29uZF9leHBfdmFsaWRfYmxvY2sgPT0gTlVMTCkKLQkgICAgc2Vs ZWN0X2ZyYW1lIChnZXRfY3VycmVudF9mcmFtZSAoKSk7Ci0JICBlbHNlCi0J ICAgIHsKLQkgICAgICBzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWU7CisgIGlm IChpc193YXRjaHBvaW50IChiKSkKKyAgICB7CisgICAgICBzdHJ1Y3Qgd2F0 Y2hwb2ludCAqdyA9IChzdHJ1Y3Qgd2F0Y2hwb2ludCAqKSBiOwogCi0JICAg ICAgLyogRm9yIGxvY2FsIHdhdGNocG9pbnQgZXhwcmVzc2lvbnMsIHdoaWNo IHBhcnRpY3VsYXIKLQkJIGluc3RhbmNlIG9mIGEgbG9jYWwgaXMgYmVpbmcg d2F0Y2hlZCBtYXR0ZXJzLCBzbyB3ZQotCQkga2VlcCB0cmFjayBvZiB0aGUg ZnJhbWUgdG8gZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24KLQkJIGluLiAgVG8g ZXZhbHVhdGUgdGhlIGNvbmRpdGlvbiBob3dldmVyLCBpdCBkb2Vzbid0Ci0J CSByZWFsbHkgbWF0dGVyIHdoaWNoIGluc3RhbnRpYXRpb24gb2YgdGhlIGZ1 bmN0aW9uCi0JCSB3aGVyZSB0aGUgY29uZGl0aW9uIG1ha2VzIHNlbnNlIHRy aWdnZXJzIHRoZQotCQkgd2F0Y2hwb2ludC4gIFRoaXMgYWxsb3dzIGFuIGV4 cHJlc3Npb24gbGlrZSAid2F0Y2gKLQkJIGdsb2JhbCBpZiBxID4gMTAiIHNl dCBpbiBgZnVuYycsIGNhdGNoIHdyaXRlcyB0bwotCQkgZ2xvYmFsIG9uIGFs bCB0aHJlYWRzIHRoYXQgY2FsbCBgZnVuYycsIG9yIGNhdGNoCi0JCSB3cml0 ZXMgb24gYWxsIHJlY3Vyc2l2ZSBjYWxscyBvZiBgZnVuYycgYnkgYSBzaW5n bGUKLQkJIHRocmVhZC4gIFdlIHNpbXBseSBhbHdheXMgZXZhbHVhdGUgdGhl IGNvbmRpdGlvbiBpbgotCQkgdGhlIGlubmVybW9zdCBmcmFtZSB0aGF0J3Mg ZXhlY3V0aW5nIHdoZXJlIGl0IG1ha2VzCi0JCSBzZW5zZSB0byBldmFsdWF0 ZSB0aGUgY29uZGl0aW9uLiAgSXQgc2VlbXMKLQkJIGludHVpdGl2ZS4gICov Ci0JICAgICAgZnJhbWUgPSBibG9ja19pbm5lcm1vc3RfZnJhbWUgKHctPmNv bmRfZXhwX3ZhbGlkX2Jsb2NrKTsKLQkgICAgICBpZiAoZnJhbWUgIT0gTlVM TCkKLQkJc2VsZWN0X2ZyYW1lIChmcmFtZSk7Ci0JICAgICAgZWxzZQotCQl3 aXRoaW5fY3VycmVudF9zY29wZSA9IDA7Ci0JICAgIH0KLQkgIGlmICh3aXRo aW5fY3VycmVudF9zY29wZSkKLQkgICAgdmFsdWVfaXNfemVybwotCSAgICAg ID0gY2F0Y2hfZXJyb3JzIChicmVha3BvaW50X2NvbmRfZXZhbCwgY29uZCwK LQkJCSAgICAgICJFcnJvciBpbiB0ZXN0aW5nIGJyZWFrcG9pbnQgY29uZGl0 aW9uOlxuIiwKLQkJCSAgICAgIFJFVFVSTl9NQVNLX0FMTCk7Ci0JICBlbHNl Ci0JICAgIHsKLQkgICAgICB3YXJuaW5nIChfKCJXYXRjaHBvaW50IGNvbmRp dGlvbiBjYW5ub3QgYmUgdGVzdGVkICIKLQkJCSAiaW4gdGhlIGN1cnJlbnQg c2NvcGUiKSk7Ci0JICAgICAgLyogSWYgd2UgZmFpbGVkIHRvIHNldCB0aGUg cmlnaHQgY29udGV4dCBmb3IgdGhpcwotCQkgd2F0Y2hwb2ludCwgdW5jb25k aXRpb25hbGx5IHJlcG9ydCBpdC4gICovCi0JICAgICAgdmFsdWVfaXNfemVy byA9IDA7Ci0JICAgIH0KLQkgIC8qIEZJWE1FLXNvbWVkYXksIHNob3VsZCBn aXZlIGJyZWFrcG9pbnQgIy4gICovCi0JICB2YWx1ZV9mcmVlX3RvX21hcmsg KG1hcmspOwotCX0KKyAgICAgIGNsaV9jb25kID0gdy0+Y29uZF9leHA7Cisg ICAgfQorICBlbHNlCisgICAgY2xpX2NvbmQgPSBibC0+Y29uZDsKIAotICAg ICAgaWYgKGNvbmQgJiYgdmFsdWVfaXNfemVybykKLQl7Ci0JICBicy0+c3Rv cCA9IDA7CisgIGlmIChjbGlfY29uZCAmJiBiLT5kaXNwb3NpdGlvbiAhPSBk aXNwX2RlbF9hdF9uZXh0X3N0b3ApCisgICAgeworICAgICAgaW50IHdpdGhp bl9jdXJyZW50X3Njb3BlID0gMTsKKyAgICAgIHN0cnVjdCB3YXRjaHBvaW50 ICogdzsKKworICAgICAgLyogV2UgdXNlIHZhbHVlX21hcmsgYW5kIHZhbHVl X2ZyZWVfdG9fbWFyayBiZWNhdXNlIGl0IGNvdWxkCisJIGJlIGEgbG9uZyB0 aW1lIGJlZm9yZSB3ZSByZXR1cm4gdG8gdGhlIGNvbW1hbmQgbGV2ZWwgYW5k CisJIGNhbGwgZnJlZV9hbGxfdmFsdWVzLiAgV2UgY2FuJ3QgY2FsbCBmcmVl X2FsbF92YWx1ZXMKKwkgYmVjYXVzZSB3ZSBtaWdodCBiZSBpbiB0aGUgbWlk ZGxlIG9mIGV2YWx1YXRpbmcgYQorCSBmdW5jdGlvbiBjYWxsLiAgKi8KKyAg ICAgIHN0cnVjdCB2YWx1ZSAqbWFyayA9IHZhbHVlX21hcmsgKCk7CisKKyAg ICAgIGlmIChpc193YXRjaHBvaW50IChiKSkKKwl3ID0gKHN0cnVjdCB3YXRj aHBvaW50ICopIGI7CisgICAgICBlbHNlCisJdyA9IE5VTEw7CisKKyAgICAg IC8qIE5lZWQgdG8gc2VsZWN0IHRoZSBmcmFtZSwgd2l0aCBhbGwgdGhhdCBp bXBsaWVzIHNvIHRoYXQKKwkgdGhlIGNvbmRpdGlvbnMgd2lsbCBoYXZlIHRo ZSByaWdodCBjb250ZXh0LiAgQmVjYXVzZSB3ZQorCSB1c2UgdGhlIGZyYW1l LCB3ZSB3aWxsIG5vdCBzZWUgYW4gaW5saW5lZCBmdW5jdGlvbidzCisJIHZh cmlhYmxlcyB3aGVuIHdlIGFycml2ZSBhdCBhIGJyZWFrcG9pbnQgYXQgdGhl IHN0YXJ0CisJIG9mIHRoZSBpbmxpbmVkIGZ1bmN0aW9uOyB0aGUgY3VycmVu dCBmcmFtZSB3aWxsIGJlIHRoZQorCSBjYWxsIHNpdGUuICAqLworICAgICAg aWYgKHcgPT0gTlVMTCB8fCB3LT5jb25kX2V4cF92YWxpZF9ibG9jayA9PSBO VUxMKQorCXNlbGVjdF9mcmFtZSAoZ2V0X2N1cnJlbnRfZnJhbWUgKCkpOwor ICAgICAgZWxzZQorCXsKKwkgIHN0cnVjdCBmcmFtZV9pbmZvICpmcmFtZTsK KworCSAgLyogRm9yIGxvY2FsIHdhdGNocG9pbnQgZXhwcmVzc2lvbnMsIHdo aWNoIHBhcnRpY3VsYXIKKwkgICAgIGluc3RhbmNlIG9mIGEgbG9jYWwgaXMg YmVpbmcgd2F0Y2hlZCBtYXR0ZXJzLCBzbyB3ZQorCSAgICAga2VlcCB0cmFj ayBvZiB0aGUgZnJhbWUgdG8gZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24KKwkg ICAgIGluLiAgVG8gZXZhbHVhdGUgdGhlIGNvbmRpdGlvbiBob3dldmVyLCBp dCBkb2Vzbid0CisJICAgICByZWFsbHkgbWF0dGVyIHdoaWNoIGluc3RhbnRp YXRpb24gb2YgdGhlIGZ1bmN0aW9uCisJICAgICB3aGVyZSB0aGUgY29uZGl0 aW9uIG1ha2VzIHNlbnNlIHRyaWdnZXJzIHRoZQorCSAgICAgd2F0Y2hwb2lu dC4gIFRoaXMgYWxsb3dzIGFuIGV4cHJlc3Npb24gbGlrZSAid2F0Y2gKKwkg ICAgIGdsb2JhbCBpZiBxID4gMTAiIHNldCBpbiBgZnVuYycsIGNhdGNoIHdy aXRlcyB0bworCSAgICAgZ2xvYmFsIG9uIGFsbCB0aHJlYWRzIHRoYXQgY2Fs bCBgZnVuYycsIG9yIGNhdGNoCisJICAgICB3cml0ZXMgb24gYWxsIHJlY3Vy c2l2ZSBjYWxscyBvZiBgZnVuYycgYnkgYSBzaW5nbGUKKwkgICAgIHRocmVh ZC4gIFdlIHNpbXBseSBhbHdheXMgZXZhbHVhdGUgdGhlIGNvbmRpdGlvbiBp bgorCSAgICAgdGhlIGlubmVybW9zdCBmcmFtZSB0aGF0J3MgZXhlY3V0aW5n IHdoZXJlIGl0IG1ha2VzCisJICAgICBzZW5zZSB0byBldmFsdWF0ZSB0aGUg Y29uZGl0aW9uLiAgSXQgc2VlbXMKKwkgICAgIGludHVpdGl2ZS4gICovCisJ ICBmcmFtZSA9IGJsb2NrX2lubmVybW9zdF9mcmFtZSAody0+Y29uZF9leHBf dmFsaWRfYmxvY2spOworCSAgaWYgKGZyYW1lICE9IE5VTEwpCisJICAgIHNl bGVjdF9mcmFtZSAoZnJhbWUpOworCSAgZWxzZQorCSAgICB3aXRoaW5fY3Vy cmVudF9zY29wZSA9IDA7CiAJfQotICAgICAgZWxzZSBpZiAoYi0+dGhyZWFk ICE9IC0xICYmIGItPnRocmVhZCAhPSB0aHJlYWRfaWQpCisgICAgICBpZiAo d2l0aGluX2N1cnJlbnRfc2NvcGUpCisJY2xpX2NvbmRfaXNfbm9uemVybwor CSAgPSBjYXRjaF9lcnJvcnMgKGJyZWFrcG9pbnRfY29uZF9ldmFsLCBjbGlf Y29uZCwKKwkJCSAgIkVycm9yIGluIHRlc3RpbmcgYnJlYWtwb2ludCBjb25k aXRpb246XG4iLAorCQkJICBSRVRVUk5fTUFTS19BTEwpOworICAgICAgZWxz ZQogCXsKLQkgIGJzLT5zdG9wID0gMDsKKwkgIHdhcm5pbmcgKF8oIldhdGNo cG9pbnQgY29uZGl0aW9uIGNhbm5vdCBiZSB0ZXN0ZWQgIgorCQkgICAgICJp biB0aGUgY3VycmVudCBzY29wZSIpKTsKKwkgIC8qIElmIHdlIGZhaWxlZCB0 byBzZXQgdGhlIHJpZ2h0IGNvbnRleHQgZm9yIHRoaXMKKwkgICAgIHdhdGNo cG9pbnQsIHVuY29uZGl0aW9uYWxseSByZXBvcnQgaXQuICAqLworCSAgY2xp X2NvbmRfaXNfbm9uemVybyA9IDE7CiAJfQotICAgICAgZWxzZSBpZiAoYi0+ aWdub3JlX2NvdW50ID4gMCkKLQl7Ci0JICBiLT5pZ25vcmVfY291bnQtLTsK LQkgIGJzLT5zdG9wID0gMDsKLQkgIC8qIEluY3JlYXNlIHRoZSBoaXQgY291 bnQgZXZlbiB0aG91Z2ggd2UgZG9uJ3Qgc3RvcC4gICovCi0JICArKyhiLT5o aXRfY291bnQpOwotCSAgb2JzZXJ2ZXJfbm90aWZ5X2JyZWFrcG9pbnRfbW9k aWZpZWQgKGIpOwotCX0JCisgICAgICAvKiBGSVhNRS1zb21lZGF5LCBzaG91 bGQgZ2l2ZSBicmVha3BvaW50ICMuICAqLworICAgICAgdmFsdWVfZnJlZV90 b19tYXJrIChtYXJrKTsKICAgICB9Ci19CiAKKyAgaWYgKGNsaV9jb25kIHx8 IGhhdmVfc2xhbmdfY29uZCkKKyAgICB7CisgICAgICBpZiAoY2xpX2NvbmRf aXNfbm9uemVybyB8fCBzbGFuZ19jb25kX2lzX25vbnplcm8pCisJOyAvKiBO b3RoaW5nIHRvIGRvLCBicy0+c3RvcCBhbHJlYWR5IHNldC4gICovCisgICAg ICBlbHNlCisJYnMtPnN0b3AgPSAwOworICAgIH0KK30KIAogLyogR2V0IGEg YnBzdGF0IGFzc29jaWF0ZWQgd2l0aCBoYXZpbmcganVzdCBzdG9wcGVkIGF0 IGFkZHJlc3MKICAgIEJQX0FERFIgaW4gdGhyZWFkIFBUSUQuCkluZGV4OiBi cmVha3BvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog L2N2cy9zcmMvc3JjL2dkYi9icmVha3BvaW50LmgsdgpyZXRyaWV2aW5nIHJl dmlzaW9uIDEuMjAyCmRpZmYgLXUgLXAgLXIxLjIwMiBicmVha3BvaW50LmgK LS0tIGJyZWFrcG9pbnQuaAkyNyBKdWwgMjAxMyAwNzoxMTo0NiAtMDAwMAkx LjIwMgorKysgYnJlYWtwb2ludC5oCTYgU2VwIDIwMTMgMTU6MTc6MTIgLTAw MDAKQEAgLTI4LDcgKzI4LDggQEAKIAogc3RydWN0IHZhbHVlOwogc3RydWN0 IGJsb2NrOwotc3RydWN0IGJyZWFrcG9pbnRfb2JqZWN0Oworc3RydWN0IGdk YnB5X2JyZWFrcG9pbnRfb2JqZWN0Oworc3RydWN0IGdkYnNjbV9icmVha3Bv aW50X29iamVjdDsKIHN0cnVjdCBnZXRfbnVtYmVyX29yX3JhbmdlX3N0YXRl Owogc3RydWN0IHRocmVhZF9pbmZvOwogc3RydWN0IGJwc3RhdHM7CkBAIC03 NTYsOCArNzU3LDExIEBAIHN0cnVjdCBicmVha3BvaW50CiAgICAgICAgUHl0 aG9uIG9iamVjdCB0aGF0IGhhcyBiZWVuIGFzc29jaWF0ZWQgd2l0aCB0aGlz IGJyZWFrcG9pbnQuCiAgICAgICAgVGhpcyBpcyBhbHdheXMgTlVMTCBmb3Ig YSBHREIgdGhhdCBpcyBub3Qgc2NyaXB0IGVuYWJsZWQuICBJdAogICAgICAg IGNhbiBzb21ldGltZXMgYmUgTlVMTCBmb3IgZW5hYmxlZCBHREJzIGFzIG5v dCBhbGwgYnJlYWtwb2ludAotICAgICAgIHR5cGVzIGFyZSB0cmFja2VkIGJ5 IHRoZSBQeXRob24gc2NyaXB0aW5nIEFQSS4gICovCi0gICAgc3RydWN0IGJy ZWFrcG9pbnRfb2JqZWN0ICpweV9icF9vYmplY3Q7CisgICAgICAgdHlwZXMg YXJlIHRyYWNrZWQgYnkgdGhlIHNjcmlwdGluZyBsYW5ndWFnZSBBUEkuICAq LworICAgIHN0cnVjdCBnZGJweV9icmVha3BvaW50X29iamVjdCAqcHlfYnBf b2JqZWN0OworCisgICAgLyogU2FtZSBhcyBweV9icF9vYmplY3QsIGJ1dCBm b3IgR3VpbGUuICAqLworICAgIHN0cnVjdCBnZGJzY21fYnJlYWtwb2ludF9v YmplY3QgKnNjbV9icF9vYmplY3Q7CiAgIH07CiAKIC8qIEFuIGluc3RhbmNl IG9mIHRoaXMgdHlwZSBpcyB1c2VkIHRvIHJlcHJlc2VudCBhIHdhdGNocG9p bnQuICBJdApJbmRleDogY29uZmlndXJlLmFjCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvY29uZmlndXJlLmFj LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIxMwpkaWZmIC11IC1wIC1yMS4y MTMgY29uZmlndXJlLmFjCi0tLSBjb25maWd1cmUuYWMJMjIgQXVnIDIwMTMg MjM6NDY6MjggLTAwMDAJMS4yMTMKKysrIGNvbmZpZ3VyZS5hYwk2IFNlcCAy MDEzIDE1OjE3OjEyIC0wMDAwCkBAIC03MTIsNiArNzEyLDEwIEBAIGVsc2UK ICAgZmkKIGZpCiAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKyMgQ2hl Y2sgZm9yIGxpYnB5dGhvbi4gICMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t ICMKKwogZG5sIFV0aWxpdHkgdG8gc2ltcGxpZnkgZmluZGluZyBsaWJweXRo b24uCiBkbmwgJDEgPSBweXRob25YLlkKIGRubCAkMiA9IHRoZSBzaGVsbCB2 YXJpYWJsZSB0byBhc3NpZ24gdGhlIHJlc3VsdCB0bwpAQCAtMTA1MCw2ICsx MDU0LDEyMCBAQCBBQ19TVUJTVChQWVRIT05fQ0ZMQUdTKQogQUNfU1VCU1Qo UFlUSE9OX0NQUEZMQUdTKQogQUNfU1VCU1QoUFlUSE9OX0xJQlMpCiAKKyMg LS0tLS0tLS0tLS0tLS0tLS0tLS0gIworIyBDaGVjayBmb3IgbGliZ3VpbGUu ICAjCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKworZG5sIFV0aWxpdHkg dG8gc2ltcGxpZnkgZmluZGluZyBsaWJndWlsZS4KK2RubCAkMSA9IGd1aWxl LWNvbmZpZy1wcm9ncmFtCitkbmwgJDIgPSB5ZXN8bm8sIGluZGljYXRpbmcg d2hldGhlciB0byBmbGFnIGVycm9ycyBvciBpZ25vcmUgdGhlbQorZG5sICQz ID0gdGhlIHNoZWxsIHZhcmlhYmxlIHRvIGFzc2lnbiB0aGUgcmVzdWx0IHRv CitkbmwgICAgICBJZiBsaWJndWlsZSBpcyBmb3VuZCB3ZSBzdG9yZSAieWVz IiBoZXJlLgorCitkbmwgRklYTUU6IE5lZWQgdG8gc3VwcG9ydCBwa2ctY29u ZmlnIGd1aWxlLTIuMCAtLWNmbGFnc3wtLWxpYnMKKworQUNfREVGVU4oW0FD X1RSWV9MSUJHVUlMRV0sCitbCisgIGd1aWxlX2NvbmZpZz0kMQorICBmbGFn X2Vycm9ycz0kMgorICBkZWZpbmUoW2hhdmVfbGliZ3VpbGVfdmFyXSwkMykK KyAgZm91bmRfdXNhYmxlX2d1aWxlPWNoZWNraW5nCisgIEFDX01TR19DSEVD S0lORyhbZm9yIHVzYWJsZSBndWlsZSBmcm9tICR7Z3VpbGVfY29uZmlnfV0p CisgIG5ld19DUFBGTEFHUz1gJHtndWlsZV9jb25maWd9IGNvbXBpbGVgCisg IGlmIHRlc3QgJD8gIT0gMDsgdGhlbgorICAgIGlmIHRlc3QgIiR7ZmxhZ19l cnJvcnN9IiA9IHllczsgdGhlbgorICAgICAgQUNfRVJST1IoZmFpbHVyZSBy dW5uaW5nIGd1aWxlLWNvbmZpZyBjb21waWxlKQorICAgIGZpCisgICAgZm91 bmRfdXNhYmxlX2d1aWxlPW5vCisgIGZpCisgIG5ld19MSUJTPWAke2d1aWxl X2NvbmZpZ30gbGlua2AKKyAgaWYgdGVzdCAkPyAhPSAwOyB0aGVuCisgICAg aWYgdGVzdCAiJHtmbGFnX2Vycm9yc30iID0geWVzOyB0aGVuCisgICAgICBB Q19FUlJPUihmYWlsdXJlIHJ1bm5pbmcgZ3VpbGUtY29uZmlnIGxpbmspCisg ICAgZmkKKyAgICBmb3VuZF91c2FibGVfZ3VpbGU9bm8KKyAgZmkKKyAgaWYg dGVzdCAiJHtmb3VuZF91c2FibGVfZ3VpbGV9IiA9IGNoZWNraW5nOyB0aGVu CisgICAgc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKKyAgICBzYXZlX0xJQlM9 JExJQlMKKyAgICBDUFBGTEFHUz0iJENQUEZMQUdTICRuZXdfQ1BQRkxBR1Mi CisgICAgTElCUz0iJExJQlMgJG5ld19MSUJTIgorICAgIEFDX0xJTktfSUZF TFNFKEFDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlICJsaWJndWlsZS5oIl1d LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW3NjbV9p bml0X2d1aWxlICgpO11dKSwKKyAgICAgICAgICAgICAgICAgICBbaGF2ZV9s aWJndWlsZV92YXI9eWVzCisgICAgICAgICAgICAgICAgICAgIGZvdW5kX3Vz YWJsZV9ndWlsZT15ZXMKKyAgICAgICAgICAgICAgICAgICAgU0NIRU1FX0NQ UEZMQUdTPSRuZXdfQ1BQRkxBR1MKKyAgICAgICAgICAgICAgICAgICAgU0NI RU1FX0xJQlM9JG5ld19MSUJTXSwKKwkJICAgW2ZvdW5kX3VzYWJsZV9ndWls ZT1ub10pCisgICAgQ1BQRkxBR1M9JHNhdmVfQ1BQRkxBR1MKKyAgICBMSUJT PSRzYXZlX0xJQlMKKyAgZmkKKyAgQUNfTVNHX1JFU1VMVChbJHtmb3VuZF91 c2FibGVfZ3VpbGV9XSkKK10pCisKK2RubCBUaGVyZSBhcmUgc2V2ZXJhbCBk aWZmZXJlbnQgdmFsdWVzIGZvciAtLXdpdGgtZ3VpbGU6CitkbmwKK2RubCBu byAtICAgRG9uJ3QgaW5jbHVkZSBndWlsZSBzdXBwb3J0LgorZG5sIHllcyAt ICBJbmNsdWRlIGd1aWxlIHN1cHBvcnQsIGVycm9yIGlmIGl0J3MgbWlzc2lu Zy4KK2RubCAgICAgICAgVGhlIGd1aWxlLWNvbmZpZyBwcm9ncmFtIG11c3Qg YmUgaW4gJFBBVEguCitkbmwgYXV0byAtIFNhbWUgYXMgInllcyIsIGJ1dCBp ZiBndWlsZSBpcyBtaXNzaW5nIGZyb20gdGhlIHN5c3RlbSwKK2RubCAgICAg ICAgZmFsbCBiYWNrIHRvICJubyIuCitkbmwgL3BhdGgvdG8vZ3VpbGUtY29u ZmlnIC0KK2RubCAgICAgICAgVXNlIHRoZSBndWlsZS1jb25maWcgcHJvZ3Jh bSBsb2NhdGVkIGluIHRoaXMgZGlyZWN0b3J5LgorZG5sICAgICAgICBOT1RF OiBUaGlzIG5lZWRuJ3QgYmUgdGhlICJyZWFsIiBndWlsZS1jb25maWcgcHJv Z3JhbS4KK2RubCAgICAgICAgSW4gYSBjcm9zcy1jb21waWxhdGlvbiBzY2Vu YXJpbyAoYnVpbGQgIT0gaG9zdCksIHRoaXMgY291bGQgYmUKK2RubCAgICAg ICAgYSBzaGVsbCBzY3JpcHQgdGhhdCBwcm92aWRlcyB3aGF0IGd1aWxlLWNv bmZpZyBwcm92aWRlcyBmb3IKK2RubCAgICAgICAgImNvbXBpbGUiIGFuZCAi bGluayIuCisKK0FDX0FSR19XSVRIKGd1aWxlLAorICBBU19IRUxQX1NUUklO RyhbLS13aXRoLWd1aWxlQDw6QD1HVUlMRUA6PkBdLCBbaW5jbHVkZSBndWls ZSBzdXBwb3J0IChhdXRvL3llcy9uby88Z3VpbGUtY29uZmlnLXByb2dyYW0+ KV0pLAorICBbXSwgW3dpdGhfZ3VpbGU9YXV0b10pCitBQ19NU0dfQ0hFQ0tJ TkcoW3doZXRoZXIgdG8gdXNlIGd1aWxlXSkKK0FDX01TR19SRVNVTFQoWyR3 aXRoX2d1aWxlXSkKKworaGF2ZV9saWJndWlsZT1ubworY2FzZSAiJHt3aXRo X2d1aWxlfSIgaW4KK25vKQorICBBQ19NU0dfV0FSTihbZ3VpbGUgc3VwcG9y dCBkaXNhYmxlZDsgc29tZSBmZWF0dXJlcyBtYXkgYmUgdW5hdmFpbGFibGUu XSkKKyAgOzsKK2F1dG8pCisgIEFDX1RSWV9MSUJHVUlMRShndWlsZS1jb25m aWcsIG5vLCBoYXZlX2xpYmd1aWxlKQorICA7OworeWVzKQorICBBQ19UUllf TElCR1VJTEUoZ3VpbGUtY29uZmlnLCB5ZXMsIGhhdmVfbGliZ3VpbGUpCisg IDs7CitbW1xcL11dKiB8ID86W1tcXC9dXSopCisgIEFDX1RSWV9MSUJHVUlM RSgke3dpdGhfZ3VpbGV9LCB5ZXMsIGhhdmVfbGliZ3VpbGUpCisgIDs7Cisq LyopCisgICMgRGlzYWxsb3cgLS13aXRoLWd1aWxlPWZvby9iYXIuCisgIEFD X0VSUk9SKGludmFsaWQgdmFsdWUgZm9yIC0td2l0aC1ndWlsZSkKKyAgOzsK KyopCisgIEFDX0VSUk9SKGludmFsaWQgdmFsdWUgZm9yIC0td2l0aC1ndWls ZSkKKyAgOzsKK2VzYWMKKworaWYgdGVzdCAiJHtoYXZlX2xpYmd1aWxlfSIg IT0gbm87IHRoZW4KKyAgQUNfREVGSU5FKEhBVkVfU0NIRU1FLCAxLCBbRGVm aW5lIGlmIEd1aWxlIGludGVycHJldGVyIGlzIGJlaW5nIGxpbmtlZCBpbi5d KQorICBDT05GSUdfT0JTPSIkQ09ORklHX09CUyBcJChTVUJESVJfU0NIRU1F X09CUykiCisgIENPTkZJR19ERVBTPSIkQ09ORklHX0RFUFMgXCQoU1VCRElS X1NDSEVNRV9ERVBTKSIKKyAgQ09ORklHX1NSQ1M9IiRDT05GSUdfU1JDUyBc JChTVUJESVJfU0NIRU1FX1NSQ1MpIgorICBDT05GSUdfSU5TVEFMTD0iJENP TkZJR19JTlNUQUxMIGluc3RhbGwtc2NoZW1lIgorICBFTkFCTEVfQ0ZMQUdT PSIkRU5BQkxFX0NGTEFHUyBcJChTVUJESVJfU0NIRU1FX0NGTEFHUykiCitl bHNlCisgICMgRXZlbiBpZiBHdWlsZSBzdXBwb3J0IGlzIG5vdCBjb21waWxl ZCBpbiwgd2UgbmVlZCB0byBoYXZlIHRoZXNlIGZpbGVzCisgICMgaW5jbHVk ZWQuCisgIENPTkZJR19PQlM9IiRDT05GSUdfT0JTIHNjaGVtZS5vIgorICBD T05GSUdfU1JDUz0iJENPTkZJR19TUkNTIHNjaGVtZS9zY2hlbWUuYyIKK2Zp CitBQ19TVUJTVChTQ0hFTUVfQ1BQRkxBR1MpCitBQ19TVUJTVChTQ0hFTUVf TElCUykKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIworIyBDaGVjayBm b3IgbGlibWNoZWNrLiAgIworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwor CiAjIEVuYWJsZSAtbG1jaGVjayBieSBkZWZhdWx0IChpdCBwcm92aWRlcyBj aGVhcC1lbm91Z2ggbWVtb3J5IG1hbmdsaW5nKSwKICMgYnV0IHR1cm4gaXQg b2ZmIGlmIFB5dGhvbiBpcyBlbmFibGVkIHdpdGggdGhyZWFkcywgc2luY2Ug LWxtY2hlY2sgaXMKICMgbm90IHRocmVhZCBzYWZlIChodHRwOi8vc291cmNl d2FyZS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTk5MzkpLApJbmRl eDogY3AtdmFscHJpbnQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm aWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2NwLXZhbHByaW50LmMsdgpyZXRyaWV2 aW5nIHJldmlzaW9uIDEuOTEKZGlmZiAtdSAtcCAtcjEuOTEgY3AtdmFscHJp bnQuYwotLS0gY3AtdmFscHJpbnQuYwk5IEp1bCAyMDEzIDE2OjU3OjA5IC0w MDAwCTEuOTEKKysrIGNwLXZhbHByaW50LmMJNiBTZXAgMjAxMyAxNToxNzox MiAtMDAwMApAQCAtNTg3LDE3ICs1ODcsMTYgQEAgY3BfcHJpbnRfdmFsdWUg KHN0cnVjdCB0eXBlICp0eXBlLCBzdHJ1YwogCXsKIAkgIGludCByZXN1bHQg PSAwOwogCi0JICAvKiBBdHRlbXB0IHRvIHJ1biB0aGUgUHl0aG9uIHByZXR0 eS1wcmludGVycyBvbiB0aGUKKwkgIC8qIEF0dGVtcHQgdG8gcnVuIHRoZSBz Y3JpcHRpbmcgbGFuZ3VhZ2UgcHJldHR5LXByaW50ZXJzIG9uIHRoZQogCSAg ICAgYmFzZWNsYXNzIGlmIHBvc3NpYmxlLiAgKi8KIAkgIGlmICghb3B0aW9u cy0+cmF3KQotCSAgICByZXN1bHQgPSBhcHBseV92YWxfcHJldHR5X3ByaW50 ZXIgKGJhc2VjbGFzcywgYmFzZV92YWxhZGRyLAotCQkJCQkgICAgICAgdGhp c29mZnNldCArIGJvZmZzZXQsCi0JCQkJCSAgICAgICB2YWx1ZV9hZGRyZXNz IChiYXNlX3ZhbCksCi0JCQkJCSAgICAgICBzdHJlYW0sIHJlY3Vyc2UsIGJh c2VfdmFsLAotCQkJCQkgICAgICAgb3B0aW9ucywgY3VycmVudF9sYW5ndWFn ZSk7CisJICAgIHJlc3VsdCA9IGFwcGx5X3ZhbF9zbGFuZ19wcmV0dHlfcHJp bnRlciAoYmFzZWNsYXNzLCBiYXNlX3ZhbGFkZHIsCisJCQkJCQkgICAgIHRo aXNvZmZzZXQgKyBib2Zmc2V0LAorCQkJCQkJICAgICB2YWx1ZV9hZGRyZXNz IChiYXNlX3ZhbCksCisJCQkJCQkgICAgIHN0cmVhbSwgcmVjdXJzZSwgYmFz ZV92YWwsCisJCQkJCQkgICAgIG9wdGlvbnMsCisJCQkJCQkgICAgIGN1cnJl bnRfbGFuZ3VhZ2UpOwogCi0KLQkgIAkgIAogCSAgaWYgKCFyZXN1bHQpCiAJ ICAgIGNwX3ByaW50X3ZhbHVlX2ZpZWxkcyAoYmFzZWNsYXNzLCB0aGlzdHlw ZSwgYmFzZV92YWxhZGRyLAogCQkJCSAgIHRoaXNvZmZzZXQgKyBib2Zmc2V0 LApJbmRleDogZGVmcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp bGU6IC9jdnMvc3JjL3NyYy9nZGIvZGVmcy5oLHYKcmV0cmlldmluZyByZXZp c2lvbiAxLjMzMgpkaWZmIC11IC1wIC1yMS4zMzIgZGVmcy5oCi0tLSBkZWZz LmgJOSBKdWwgMjAxMyAxNjo1NzowOSAtMDAwMAkxLjMzMgorKysgZGVmcy5o CTYgU2VwIDIwMTMgMTU6MTc6MTIgLTAwMDAKQEAgLTE2Nyw3ICsxNjcsOSBA QCBleHRlcm4gY2hhciAqZGVidWdfZmlsZV9kaXJlY3Rvcnk7CiAgICBmb3Ig UHl0aG9uIGFuZCBHREIgU0lHSU5UIGhhbmRsaW5nIHRvIGNvZXhpc3Qgc2Vh bWxlc3NseS4KIAogICAgSWYgR0RCIGlzIGJ1aWx0IHdpdGhvdXQgUHl0aG9u LCBpdCBpbnN0ZWFkIHVzZXMgaXRzIHRyYWRpdGlvbmFsCi0gICB2YXJpYWJs ZXMuICAqLworICAgdmFyaWFibGVzLgorCisgICBUT0RPOiBHdWlsZSBzdXBw b3J0LiAgKi8KIAogLyogQ2xlYXIgdGhlIHF1aXQgZmxhZy4gICovCiBleHRl cm4gdm9pZCBjbGVhcl9xdWl0X2ZsYWcgKHZvaWQpOwpAQCAtNDE3LDYgKzQx OSw3IEBAIGVudW0gY29tbWFuZF9jb250cm9sX3R5cGUKICAgICBpZl9jb250 cm9sLAogICAgIGNvbW1hbmRzX2NvbnRyb2wsCiAgICAgcHl0aG9uX2NvbnRy b2wsCisgICAgc2NoZW1lX2NvbnRyb2wsCiAgICAgd2hpbGVfc3RlcHBpbmdf Y29udHJvbCwKICAgICBpbnZhbGlkX2NvbnRyb2wKICAgfTsKSW5kZXg6IGxh bmd1YWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2 cy9zcmMvc3JjL2dkYi9sYW5ndWFnZS5oLHYKcmV0cmlldmluZyByZXZpc2lv biAxLjg5CmRpZmYgLXUgLXAgLXIxLjg5IGxhbmd1YWdlLmgKLS0tIGxhbmd1 YWdlLmgJMTMgTWFyIDIwMTMgMTg6MzQ6NTMgLTAwMDAJMS44OQorKysgbGFu Z3VhZ2UuaAk2IFNlcCAyMDEzIDE1OjE3OjEyIC0wMDAwCkBAIC0yNCwxMCAr MjQsMTIgQEAKICNkZWZpbmUgTEFOR1VBR0VfSCAxCiAKIC8qIEZvcndhcmQg ZGVjbHMgZm9yIHByb3RvdHlwZXMuICAqLworc3RydWN0IGJsb2NrOwogc3Ry dWN0IHZhbHVlOwogc3RydWN0IG9iamZpbGU7CiBzdHJ1Y3QgZnJhbWVfaW5m bzsKIHN0cnVjdCBleHByZXNzaW9uOworc3RydWN0IHN5bWJvbDsKIHN0cnVj dCB1aV9maWxlOwogc3RydWN0IHZhbHVlX3ByaW50X29wdGlvbnM7CiBzdHJ1 Y3QgdHlwZV9wcmludF9vcHRpb25zOwpJbmRleDogc2NyaXB0aW5nLmMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogc2NyaXB0aW5nLmMKZGlm ZiAtTiBzY3JpcHRpbmcuYwotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6 MDA6MDAgLTAwMDAKKysrIHNjcmlwdGluZy5jCTYgU2VwIDIwMTMgMTU6MTc6 MTIgLTAwMDAKQEAgLTAsMCArMSw0MjIgQEAKKy8qIEludGVyZmFjZSBiZXR3 ZWVuIGdkYiBhbmQgaXRzIHNjcmlwdGluZyBsYW5ndWFnZXMuCisKKyAgIENv cHlyaWdodCAoQykgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgorCisgICBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0 aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUu b3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBOb3RlOiBXaXRoIGZldyBleGNl cHRpb25zLCBleHRlcm5hbCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBpbiB0 aGlzIGZpbGUKKyAgIGhhdmUgInNsYW5nIiBpbiB0aGUgbmFtZSwgYW5kIG5v IG90aGVyIHN5bWJvbCBpbiBnZGIgZG9lcy4gICovCisKKyNpbmNsdWRlICJk ZWZzLmgiCisjaW5jbHVkZSAiYnJlYWtwb2ludC5oIgorI2luY2x1ZGUgInNj cmlwdGluZy5oIgorI2luY2x1ZGUgInNjaGVtZS9zY2hlbWUuaCIKKyNpbmNs dWRlICJweXRob24vcHl0aG9uLmgiCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg c2NyaXB0X2xhbmcgKiBjb25zdCBzY3JpcHRpbmdfbGFuZ3VhZ2VzW10gPQor eworICAvKiBQeXRob24gYXBwZWFycyBmaXJzdCB0byBhdm9pZCBicmVha2lu ZyBleGlzdGluZyBjb2RlIGlmIHRoZXJlIGFyZQorICAgICBwcm9ibGVtcyBp biB0aGUgbmV3IEd1aWxlIHN1cHBvcnQuICBFLmcuIGlmIHRoZXJlJ3MgYSBQ eXRob24KKyAgICAgcHJldHR5LXByaW50ZXIgdGhlbiBpdCBoYXMgcHJpb3Jp dHkuICAqLworI2lmZGVmIEhBVkVfUFlUSE9OCisgICZweXRob25fc2NyaXB0 aW5nX2ludGVyZmFjZSwKKyNlbmRpZgorI2lmZGVmIEhBVkVfU0NIRU1FCisg ICZzY2hlbWVfc2NyaXB0aW5nX2ludGVyZmFjZSwKKyNlbmRpZgorICBOVUxM Cit9OworCisjZGVmaW5lIEFMTF9TQ1JJUFRJTkdfTEFOR1VBR0VTKGksIHNs YW5nKSBcCisgIGZvciAoLyppbnQqLyBpID0gMCwgc2xhbmcgPSBzY3JpcHRp bmdfbGFuZ3VhZ2VzWzBdOyBcCisgICAgICAgc2xhbmcgIT0gTlVMTDsgXAor ICAgICAgIHNsYW5nID0gc2NyaXB0aW5nX2xhbmd1YWdlc1srK2ldKQorCit2 b2lkCitmaW5pc2hfc2xhbmdfaW5pdGlhbGl6YXRpb24gKHZvaWQpCit7Cisg IGludCBpOworICBjb25zdCBzdHJ1Y3Qgc2NyaXB0X2xhbmcgKnNsYW5nOwor CisgIEFMTF9TQ1JJUFRJTkdfTEFOR1VBR0VTIChpLCBzbGFuZykKKyAgICB7 CisgICAgICBzbGFuZy0+ZmluaXNoX2luaXRpYWxpemF0aW9uICgpOworICAg IH0KK30KKworI2lmbmRlZiBIQVZFX1BZVEhPTgorCisvKiBUaHJvdyBVTlNV UFBPUlRFRF9FUlJPUiBpZiBjYWxsZWQuCisgICBUaGlzIGlzIHVzZWQgdG8g aW1wbGVtZW50IHNjcmlwdF9leHRfe3NvZnQsaGFyZH0uICAqLworCitzdGF0 aWMgdm9pZAorc291cmNlX3B5dGhvbl91bnN1cHBvcnRlZCAoRklMRSAqZiwg Y29uc3QgY2hhciAqZmlsZSkKK3sKKyAgdGhyb3dfZXJyb3IgKFVOU1VQUE9S VEVEX0VSUk9SLAorCSAgICAgICBfKCJQeXRob24gc2NyaXB0aW5nIGlzIG5v dCBzdXBwb3J0ZWQgaW4gdGhpcyBjb3B5IG9mIEdEQi4iKSk7Cit9CisKKyNl bmRpZgorCisjaWZuZGVmIEhBVkVfU0NIRU1FCisKKy8qIFRocm93IFVOU1VQ UE9SVEVEX0VSUk9SIGlmIGNhbGxlZC4KKyAgIFRoaXMgaXMgdXNlZCB0byBp bXBsZW1lbnQgc2NyaXB0X2V4dF97c29mdCxoYXJkfS4gICovCisKK3N0YXRp YyB2b2lkCitzb3VyY2Vfc2NoZW1lX3Vuc3VwcG9ydGVkIChGSUxFICpmLCBj b25zdCBjaGFyICpmaWxlKQoreworICB0aHJvd19lcnJvciAoVU5TVVBQT1JU RURfRVJST1IsCisJICAgICAgIF8oIlNjaGVtZSBzY3JpcHRpbmcgaXMgbm90 IHN1cHBvcnRlZCBpbiB0aGlzIGNvcHkgb2YgR0RCLiIpKTsKK30KKworI2Vu ZGlmCisKKy8qIFJldHVybiBUUlVFIGlmIEZJTEUgaGFzIGV4dGVuc2lvbiBF WFRFTlNJT04uICAqLworCitzdGF0aWMgaW50CitoYXNfZXh0ZW5zaW9uIChj b25zdCBjaGFyICpmaWxlLCBjb25zdCBjaGFyICpleHRlbnNpb24pCit7Cisg IGludCBmaWxlX2xlbiA9IHN0cmxlbiAoZmlsZSk7CisgIGludCBleHRlbnNp b25fbGVuID0gc3RybGVuIChleHRlbnNpb24pOworCisgIHJldHVybiAoZmls ZV9sZW4gPiBleHRlbnNpb25fbGVuCisJICAmJiBzdHJjbXAgKCZmaWxlW2Zp bGVfbGVuIC0gZXh0ZW5zaW9uX2xlbl0sIGV4dGVuc2lvbikgPT0gMCk7Cit9 CisKKy8qIFJldHVybiBhIGZ1bmN0aW9uIHRvIGxvYWQgRklMRS4KKyAgIElm IEZJTEUgc3BlY2lmaWVzIGEgc2NyaXB0aW5nIGxhbmd1YWdlIHdlIHN1cHBv cnQgYnV0IHdoaWNoIGlzIG5vdAorICAgZW5hYmxlZCB0aGVuIHJldHVybiBh IGZ1bmN0aW9uIHRoYXQgdGhyb3dzIFVOU1VQUE9SVEVEX0VSUk9SLgorICAg T3RoZXJ3aXNlIHJldHVybiBOVUxMLgorCisgICBOb3RlOiBUaGlzIGNvdWxk IGJlIGEgbG90IGNsZWFuZXIgaWYgbm90IGZvciBzY3JpcHRfZXh0X3NvZnQu ICAqLworCitzbGFuZ19zb3VyY2VyX2Z1bmMgKgorZ2V0X3NsYW5nX3NvdXJj ZXIgKGNvbnN0IGNoYXIgKmZpbGUpCit7CisgIGlmIChoYXNfZXh0ZW5zaW9u IChmaWxlLCAiLnB5IikpCisgICAgeworI2lmZGVmIEhBVkVfUFlUSE9OCisg ICAgICByZXR1cm4gcHl0aG9uX3NjcmlwdGluZ19pbnRlcmZhY2Uuc291cmNl X3NjcmlwdDsKKyNlbHNlCisgICAgICByZXR1cm4gc291cmNlX3B5dGhvbl91 bnN1cHBvcnRlZDsKKyNlbmRpZgorICAgIH0KKworICBpZiAoaGFzX2V4dGVu c2lvbiAoZmlsZSwgIi5zY20iKSkKKyAgICB7CisjaWZkZWYgSEFWRV9TQ0hF TUUKKyAgICAgIHJldHVybiBzY2hlbWVfc2NyaXB0aW5nX2ludGVyZmFjZS5z b3VyY2Vfc2NyaXB0OworI2Vsc2UKKyAgICAgIHJldHVybiBzb3VyY2Vfc2No ZW1lX3Vuc3VwcG9ydGVkOworI2VuZGlmCisgICAgfQorCisgIHJldHVybiBO VUxMOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitzY3JpcHRfbGFuZ19u YW1lX2Zyb21fY29udHJvbF9jb21tYW5kIChzdHJ1Y3QgY29tbWFuZF9saW5l ICpjbWQpCit7CisgIHN3aXRjaCAoY21kLT5jb250cm9sX3R5cGUpCisgICAg eworICAgIGNhc2UgcHl0aG9uX2NvbnRyb2w6CisgICAgICByZXR1cm4gIlB5 dGhvbiI7CisgICAgY2FzZSBzY2hlbWVfY29udHJvbDoKKyAgICAgIHJldHVy biAiU2NoZW1lIjsKKyAgICBkZWZhdWx0OgorICAgICAgZ2RiX2Fzc2VydF9u b3RfcmVhY2hlZCAoImludmFsaWQgc2NyaXB0aW5nIGxhbmd1YWdlIGluIGNs aSBjb21tYW5kIik7CisgICAgfQorfQorCit2b2lkCitldmFsX3NsYW5nX2Zy b21fY29udHJvbF9jb21tYW5kIChzdHJ1Y3QgY29tbWFuZF9saW5lICpjbWQp Cit7CisgIGludCBpOworICBjb25zdCBzdHJ1Y3Qgc2NyaXB0X2xhbmcgKnNs YW5nOworICBjb25zdCBjaGFyICpzY3JpcHRfbGFuZ19uYW1lOworCisgIEFM TF9TQ1JJUFRJTkdfTEFOR1VBR0VTIChpLCBzbGFuZykKKyAgICB7CisgICAg ICBpZiAoc2xhbmctPmNsaV9jb250cm9sX3R5cGUgPT0gY21kLT5jb250cm9s X3R5cGUpCisJeworCSAgc2xhbmctPmV2YWxfZnJvbV9jb250cm9sX2NvbW1h bmQgKGNtZCk7CisJICByZXR1cm47CisJfQorICAgIH0KKworICAvKiBUaGlz IHJlcXVlc3RlZCBzY3JpcHRpbmcgbGFuZ3VhZ2UgaXMgbm90IHN1cHBvcnRl ZC4gICovCisKKyAgZXJyb3IgKF8oIiVzIHNjcmlwdGluZyBpcyBub3Qgc3Vw cG9ydGVkIGluIHRoaXMgY29weSBvZiBHREIuIiksCisJIHNjcmlwdF9sYW5n X25hbWVfZnJvbV9jb250cm9sX2NvbW1hbmQgKGNtZCkpOworfQorCit2b2lk Citsb2FkX3NsYW5nX2F1dG9fc2NyaXB0c19mb3Jfb2JqZmlsZSAoc3RydWN0 IG9iamZpbGUgKm9iamZpbGUpCit7CisgIGludCBpOworICBjb25zdCBzdHJ1 Y3Qgc2NyaXB0X2xhbmcgKnNsYW5nOworCisgIEFMTF9TQ1JJUFRJTkdfTEFO R1VBR0VTIChpLCBzbGFuZykKKyAgICB7CisgICAgICBzbGFuZy0+bG9hZF9h dXRvX3NjcmlwdHNfZm9yX29iamZpbGUgKG9iamZpbGUpOworICAgIH0KK30K KwwKK3N0cnVjdCBzbGFuZ190eXBlX3ByaW50ZXJzICoKK3N0YXJ0X3NsYW5n X3R5cGVfcHJpbnRlcnMgKHZvaWQpCit7CisgIHN0cnVjdCBzbGFuZ190eXBl X3ByaW50ZXJzICpwcmludGVycyA9IFhaQUxMT0MgKHN0cnVjdCBzbGFuZ190 eXBlX3ByaW50ZXJzKTsKKyAgaW50IGk7CisgIGNvbnN0IHN0cnVjdCBzY3Jp cHRfbGFuZyAqc2xhbmc7CisKKyAgQUxMX1NDUklQVElOR19MQU5HVUFHRVMg KGksIHNsYW5nKQorICAgIHsKKyAgICAgIHNsYW5nLT5zdGFydF90eXBlX3By aW50ZXJzIChwcmludGVycyk7CisgICAgfQorCisgIHJldHVybiBwcmludGVy czsKK30KKworY2hhciAqCithcHBseV9zbGFuZ190eXBlX3ByaW50ZXJzIChz dHJ1Y3Qgc2xhbmdfdHlwZV9wcmludGVycyAqcHJpbnRlcnMsCisJCQkgICBz dHJ1Y3QgdHlwZSAqdHlwZSkKK3sKKyAgaW50IGk7CisgIGNvbnN0IHN0cnVj dCBzY3JpcHRfbGFuZyAqc2xhbmc7CisKKyAgQUxMX1NDUklQVElOR19MQU5H VUFHRVMgKGksIHNsYW5nKQorICAgIHsKKyAgICAgIGNoYXIgKnJlc3VsdCA9 IHNsYW5nLT5hcHBseV90eXBlX3ByaW50ZXJzIChwcmludGVycywgdHlwZSk7 CisKKyAgICAgIGlmIChyZXN1bHQgIT0gTlVMTCkKKwlyZXR1cm4gcmVzdWx0 OworICAgIH0KKworICByZXR1cm4gTlVMTDsKK30KKwordm9pZAorZnJlZV9z bGFuZ190eXBlX3ByaW50ZXJzIChzdHJ1Y3Qgc2xhbmdfdHlwZV9wcmludGVy cyAqcHJpbnRlcnMpCit7CisgIGludCBpOworICBjb25zdCBzdHJ1Y3Qgc2Ny aXB0X2xhbmcgKnNsYW5nOworCisgIEFMTF9TQ1JJUFRJTkdfTEFOR1VBR0VT IChpLCBzbGFuZykKKyAgICB7CisgICAgICBzbGFuZy0+ZnJlZV90eXBlX3By aW50ZXJzIChwcmludGVycyk7CisgICAgfQorCisgIHhmcmVlIChwcmludGVy cyk7Cit9CisMCitpbnQKK2FwcGx5X3ZhbF9zbGFuZ19wcmV0dHlfcHJpbnRl ciAoc3RydWN0IHR5cGUgKnR5cGUsIGNvbnN0IGdkYl9ieXRlICp2YWxhZGRy LAorCQkJCWludCBlbWJlZGRlZF9vZmZzZXQsIENPUkVfQUREUiBhZGRyZXNz LAorCQkJCXN0cnVjdCB1aV9maWxlICpzdHJlYW0sIGludCByZWN1cnNlLAor CQkJCWNvbnN0IHN0cnVjdCB2YWx1ZSAqdmFsLAorCQkJCWNvbnN0IHN0cnVj dCB2YWx1ZV9wcmludF9vcHRpb25zICpvcHRpb25zLAorCQkJCWNvbnN0IHN0 cnVjdCBsYW5ndWFnZV9kZWZuICpsYW5ndWFnZSkKK3sKKyAgaW50IGk7Cisg IGNvbnN0IHN0cnVjdCBzY3JpcHRfbGFuZyAqc2xhbmc7CisKKyAgQUxMX1ND UklQVElOR19MQU5HVUFHRVMgKGksIHNsYW5nKQorICAgIHsKKyAgICAgIGlm IChzbGFuZy0+YXBwbHlfdmFsX3ByZXR0eV9wcmludGVyID09IE5VTEwpCisJ Y29udGludWU7CisgICAgICBpZiAoc2xhbmctPmFwcGx5X3ZhbF9wcmV0dHlf cHJpbnRlciAodHlwZSwgdmFsYWRkciwgZW1iZWRkZWRfb2Zmc2V0LAorCQkJ CQkgICBhZGRyZXNzLCBzdHJlYW0sIHJlY3Vyc2UsIHZhbCwKKwkJCQkJICAg b3B0aW9ucywgbGFuZ3VhZ2UpKQorCXJldHVybiAxOworICAgIH0KKworICBy ZXR1cm4gMDsKK30KKworZW51bSBweV9idF9zdGF0dXMKK2FwcGx5X3NsYW5n X2ZyYW1lX2ZpbHRlciAoc3RydWN0IGZyYW1lX2luZm8gKmZyYW1lLCBpbnQg ZmxhZ3MsCisJCQkgIGVudW0gcHlfZnJhbWVfYXJncyBhcmdzX3R5cGUsIHN0 cnVjdCB1aV9vdXQgKm91dCwKKwkJCSAgaW50IGZyYW1lX2xvdywgaW50IGZy YW1lX2hpZ2gpCit7CisgIGludCBpOworICBjb25zdCBzdHJ1Y3Qgc2NyaXB0 X2xhbmcgKnNsYW5nOworCisgIEFMTF9TQ1JJUFRJTkdfTEFOR1VBR0VTIChp LCBzbGFuZykKKyAgICB7CisgICAgICBlbnVtIHB5X2J0X3N0YXR1cyBzdGF0 dXM7CisKKyAgICAgIGlmIChzbGFuZy0+YXBwbHlfZnJhbWVfZmlsdGVyID09 IE5VTEwpCisJY29udGludWU7CisgICAgICBzdGF0dXMgPSBzbGFuZy0+YXBw bHlfZnJhbWVfZmlsdGVyIChmcmFtZSwgZmxhZ3MsIGFyZ3NfdHlwZSwgb3V0 LAorCQkJCQkgIGZyYW1lX2xvdywgZnJhbWVfaGlnaCk7CisgICAgICBpZiAo c3RhdHVzICE9IFBZX0JUX05PX0ZJTFRFUlMpCisJcmV0dXJuIHN0YXR1czsK KyAgICB9CisKKyAgLyogVE9ETzogV2hhdCB0byBkbyBpZiBib3RoIEd1aWxl IGFuZCBQeXRob24gZmlsdGVycyBhcmUgcmVnaXN0ZXJlZCwKKyAgICAgYW5k IGFwcGxpY2FibGUuICAqLworCisgIHJldHVybiBQWV9CVF9OT19GSUxURVJT OworfQorCit2b2lkCitwcmVzZXJ2ZV9zbGFuZ192YWx1ZXMgKHN0cnVjdCBv YmpmaWxlICpvYmpmaWxlLCBodGFiX3QgY29waWVkX3R5cGVzKQoreworICBp bnQgaTsKKyAgY29uc3Qgc3RydWN0IHNjcmlwdF9sYW5nICpzbGFuZzsKKwor ICBBTExfU0NSSVBUSU5HX0xBTkdVQUdFUyAoaSwgc2xhbmcpCisgICAgewor ICAgICAgc2xhbmctPnByZXNlcnZlX3ZhbHVlcyAob2JqZmlsZSwgY29waWVk X3R5cGVzKTsKKyAgICB9Cit9CisMCitpbnQKK2JyZWFrcG9pbnRfaGFzX3Ns YW5nX2NvbmQgKHN0cnVjdCBicmVha3BvaW50ICpiKQoreworICAvKiBUaGUg Y29kZSBpcyBvcmdhbml6ZWQgc28gdGhhdCB0aGUgYXNzZXJ0cyBhcmUgZG9u ZSBmaXJzdC4gICovCisKKyNpZm5kZWYgSEFWRV9QWVRIT04KKyAgZ2RiX2Fz c2VydCAoYi0+cHlfYnBfb2JqZWN0ID09IE5VTEwpOworI2VuZGlmCisKKyNp Zm5kZWYgSEFWRV9TQ0hFTUUKKyAgZ2RiX2Fzc2VydCAoYi0+c2NtX2JwX29i amVjdCA9PSBOVUxMKTsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9QWVRIT04K KyAgaWYgKHB5dGhvbl9zY3JpcHRpbmdfaW50ZXJmYWNlLmJyZWFrcG9pbnRf aGFzX2NvbmQgKGIpKQorICAgIHJldHVybiAxOworI2VuZGlmCisKKyNpZmRl ZiBIQVZFX1NDSEVNRQorICBpZiAoc2NoZW1lX3NjcmlwdGluZ19pbnRlcmZh Y2UuYnJlYWtwb2ludF9oYXNfY29uZCAhPSBOVUxMCisgICAgICAmJiBzY2hl bWVfc2NyaXB0aW5nX2ludGVyZmFjZS5icmVha3BvaW50X2hhc19jb25kIChi KSkKKyAgICByZXR1cm4gMTsKKyNlbmRpZgorCisgIHJldHVybiAwOworfQor CitpbnQKK2JyZWFrcG9pbnRfc2xhbmdfY29uZF9zYXlzX3N0b3AgKHN0cnVj dCBicmVha3BvaW50ICpiKQoreworICAvKiBUaGUgY29kZSBpcyBvcmdhbml6 ZWQgc28gdGhhdCB0aGUgYXNzZXJ0cyBhcmUgZG9uZSBmaXJzdC4gICovCisK KyNpZm5kZWYgSEFWRV9QWVRIT04KKyAgZ2RiX2Fzc2VydCAoYi0+cHlfYnBf b2JqZWN0ID09IE5VTEwpOworI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9TQ0hF TUUKKyAgZ2RiX2Fzc2VydCAoYi0+c2NtX2JwX29iamVjdCA9PSBOVUxMKTsK KyNlbmRpZgorCisjaWZkZWYgSEFWRV9QWVRIT04KKyAgaWYgKHB5dGhvbl9z Y3JpcHRpbmdfaW50ZXJmYWNlLmJyZWFrcG9pbnRfY29uZF9zYXlzX3N0b3Ag KGIpKQorICAgIHJldHVybiAxOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX1ND SEVNRQorICBpZiAoc2NoZW1lX3NjcmlwdGluZ19pbnRlcmZhY2UuYnJlYWtw b2ludF9jb25kX3NheXNfc3RvcCAhPSBOVUxMCisgICAgICAmJiBzY2hlbWVf c2NyaXB0aW5nX2ludGVyZmFjZS5icmVha3BvaW50X2NvbmRfc2F5c19zdG9w IChiKSkKKyAgICByZXR1cm4gMTsKKyNlbmRpZgorCisgIHJldHVybiAwOwor fQorDAorLyogXkMvU0lHSU5UIHN1cHBvcnQuCisgICBUaGlzIHJlcXVpcmVz IGNvb3BlcmF0aW9uIHdpdGggdGhlIHNjcmlwdGluZyBsYW5ndWFnZXMgc28g dGhlIHN1cHBvcnQKKyAgIGlzIGRlZmluZWQgaGVyZS4KKyAgIFRoZSBwcm90 b3R5cGVzIGZvciB0aGVzZSBhcmUgaW4gZGVmcy5oLgorCisgICBUT0RPOiBH dWlsZSBzdXBwb3J0LiAgKi8KKworI2lmbmRlZiBIQVZFX1BZVEhPTgorLyog Tm9uemVybyBtZWFucyBhIHF1aXQgaGFzIGJlZW4gcmVxdWVzdGVkLiAgKi8K K3N0YXRpYyBpbnQgcXVpdF9mbGFnOworI2VuZGlmIC8qIEhBVkVfUFlUSE9O ICovCisKKy8qIENsZWFyIHRoZSBxdWl0IGZsYWcuICAqLworCit2b2lkCitj bGVhcl9xdWl0X2ZsYWcgKHZvaWQpCit7CisjaWZkZWYgSEFWRV9QWVRIT04K KyAgcHl0aG9uX3NjcmlwdGluZ19pbnRlcmZhY2UuY2xlYXJfcXVpdF9mbGFn ICgpOworI2Vsc2UKKyAgcXVpdF9mbGFnID0gMDsKKyNlbmRpZgorfQorCisv KiBTZXQgdGhlIHF1aXQgZmxhZy4gICovCisKK3ZvaWQKK3NldF9xdWl0X2Zs YWcgKHZvaWQpCit7CisjaWZkZWYgSEFWRV9QWVRIT04KKyAgcHl0aG9uX3Nj cmlwdGluZ19pbnRlcmZhY2Uuc2V0X3F1aXRfZmxhZyAoKTsKKyNlbHNlCisg IHF1aXRfZmxhZyA9IDE7CisjZW5kaWYKK30KKworLyogUmV0dXJuIHRydWUg aWYgdGhlIHF1aXQgZmxhZyBoYXMgYmVlbiBzZXQsIGZhbHNlIG90aGVyd2lz ZS4gICovCisKK2ludAorY2hlY2tfcXVpdF9mbGFnICh2b2lkKQoreworI2lm ZGVmIEhBVkVfUFlUSE9OCisgIHJldHVybiBweXRob25fc2NyaXB0aW5nX2lu dGVyZmFjZS5jaGVja19xdWl0X2ZsYWcgKCk7CisjZWxzZQorICAvKiBUaGlz IGlzIHdyaXR0ZW4gaW4gYSBwYXJ0aWN1bGFyIHdheSB0byBhdm9pZCByYWNl cy4gICovCisgIGlmIChxdWl0X2ZsYWcpCisgICAgeworICAgICAgcXVpdF9m bGFnID0gMDsKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICByZXR1cm4g MDsKKyNlbmRpZgorfQorDAorLyogU29tZSBjb2RlIChNSSkgd2FudHMgdG8g a25vdyBpZiBhIHBhcnRpY3VsYXIgc2NyaXB0aW5nIGxhbmd1YWdlCisgICBz dWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQuICAqLworCisvKiBSZXR1cm4gbm9u LXplcm8gaWYgUHl0aG9uIHNjcmlwdGluZyBzdWNjZXNzZnVsbHkgaW5pdGlh bGl6ZWQuICAqLworCitpbnQKK3NsYW5nX3B5dGhvbl9pbml0aWFsaXplZCAo dm9pZCkKK3sKKyNpZmRlZiBIQVZFX1BZVEhPTgorICByZXR1cm4gcHl0aG9u X3NjcmlwdGluZ19pbnRlcmZhY2UuaW5pdGlhbGl6ZWQgKCk7CisjZWxzZQor ICByZXR1cm4gMDsKKyNlbmRpZgorfQorCisvKiBSZXR1cm4gbm9uLXplcm8g aWYgU2NoZW1lIHNjcmlwdGluZyBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQu ICAqLworCitpbnQKK3NsYW5nX3NjaGVtZV9pbml0aWFsaXplZCAodm9pZCkK K3sKKyNpZmRlZiBIQVZFX1NDSEVNRQorICByZXR1cm4gc2NoZW1lX3Njcmlw dGluZ19pbnRlcmZhY2UuaW5pdGlhbGl6ZWQgKCk7CisjZWxzZQorICByZXR1 cm4gMDsKKyNlbmRpZgorfQpJbmRleDogc2NyaXB0aW5nLmgKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQpSQ1MgZmlsZTogc2NyaXB0aW5nLmgKZGlmZiAtTiBz Y3JpcHRpbmcuaAotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAg LTAwMDAKKysrIHNjcmlwdGluZy5oCTYgU2VwIDIwMTMgMTU6MTc6MTIgLTAw MDAKQEAgLTAsMCArMSwxOTUgQEAKKy8qIEludGVyZmFjZSBiZXR3ZWVuIGdk YiBhbmQgaXRzIHNjcmlwdGluZyBsYW5ndWFnZXMuCisKKyAgIENvcHlyaWdo dCAoQykgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwor ICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgorCisgICBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAg IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9u IDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor CisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlz IHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xp Y2Vuc2VzLz4uICAqLworCisjaWZuZGVmIFNDUklQVElOR19ICisjZGVmaW5l IFNDUklQVElOR19ICisKKyNpbmNsdWRlICJtaS9taS1jbWRzLmgiIC8qIEZv ciBQUklOVF9OT19WQUxVRVMsIGV0Yy4gICovCisKK3N0cnVjdCBicmVha3Bv aW50X29iamVjdDsKK3N0cnVjdCBjb21tYW5kX2xpbmU7CitzdHJ1Y3QgZnJh bWVfaW5mbzsKK3N0cnVjdCBsYW5ndWFnZV9kZWZuOworc3RydWN0IG9iamZp bGU7CitzdHJ1Y3QgdHlwZTsKK3N0cnVjdCB1aV9maWxlOworc3RydWN0IHVp X291dDsKK3N0cnVjdCB2YWx1ZTsKK3N0cnVjdCB2YWx1ZV9wcmludF9vcHRp b25zOworCit0eXBlZGVmIHZvaWQgc2xhbmdfc291cmNlcl9mdW5jIChGSUxF ICosIGNvbnN0IGNoYXIgKik7CisKKy8qIFB5dGhvbiBmcmFtZS1maWx0ZXIg c3RhdHVzIHJldHVybiB2YWx1ZXMuICAqLworCitlbnVtIHB5X2J0X3N0YXR1 cworICB7CisgICAgLyogUmV0dXJuIHdoZW4gYW4gZXJyb3IgaGFzIG9jY3Vy cmVkIGluIHByb2Nlc3NpbmcgZnJhbWUgZmlsdGVycywKKyAgICAgICBvciB3 aGVuIHByaW50aW5nIHRoZSBzdGFjay4gICovCisgICAgUFlfQlRfRVJST1Ig PSAtMSwKKworICAgIC8qIFJldHVybiBmcm9tIGludGVybmFsIHJvdXRpbmVz IHRvIGluZGljYXRlIHRoYXQgdGhlIGZ1bmN0aW9uCisgICAgICAgc3VjY2Vl ZGVkLiAgKi8KKyAgICBQWV9CVF9PSyA9IDEsCisKKyAgICAvKiBSZXR1cm4g d2hlbiB0aGUgZnJhbWUgZmlsdGVyIHByb2Nlc3MgaXMgY29tcGxldGUsIGFu ZCBhbGwKKyAgICAgICBvcGVyYXRpb25zIGhhdmUgc3VjY2VlZGVkLiAgKi8K KyAgICBQWV9CVF9DT01QTEVURUQgPSAyLAorCisgICAgLyogUmV0dXJuIHdo ZW4gdGhlIGZyYW1lIGZpbHRlciBwcm9jZXNzIGlzIGNvbXBsZXRlLCBidXQg dGhlcmUKKyAgICAgICB3ZXJlIG5vIGZpbHRlciByZWdpc3RlcmVkIGFuZCBl bmFibGVkIHRvIHByb2Nlc3MuICovCisgICAgUFlfQlRfTk9fRklMVEVSUyA9 IDMKKyAgfTsKKworLyogRmxhZ3MgdG8gcGFzcyB0byBhcHBseV9mcmFtZV9m aWx0ZXIuICAqLworCitlbnVtIGZyYW1lX2ZpbHRlcl9mbGFncworICB7Cisg ICAgLyogU2V0IHRoaXMgZmxhZyBpZiBmcmFtZSBsZXZlbCBpcyB0byBiZSBw cmludGVkLiAgKi8KKyAgICBQUklOVF9MRVZFTCA9IDEsCisKKyAgICAvKiBT ZXQgdGhpcyBmbGFnIGlmIGZyYW1lIGluZm9ybWF0aW9uIGlzIHRvIGJlIHBy aW50ZWQuICAqLworICAgIFBSSU5UX0ZSQU1FX0lORk8gPSAyLAorCisgICAg LyogU2V0IHRoaXMgZmxhZyBpZiBmcmFtZSBhcmd1bWVudHMgYXJlIHRvIGJl IHByaW50ZWQuICAqLworICAgIFBSSU5UX0FSR1MgPSA0LAorCisgICAgLyog U2V0IHRoaXMgZmxhZyBpZiBmcmFtZSBsb2NhbHMgYXJlIHRvIGJlIHByaW50 ZWQuICAqLworICAgIFBSSU5UX0xPQ0FMUyA9IDgsCisgIH07CisKKy8qIEEg Y2hvaWNlIG9mIHRoZSBkaWZmZXJlbnQgZnJhbWUgYXJndW1lbnQgcHJpbnRp bmcgc3RyYXRlZ2llcyB0aGF0CisgICBjYW4gb2NjdXIgaW4gZGlmZmVyZW50 IGNhc2VzIG9mIGZyYW1lIGZpbHRlciBpbnN0YW50aWF0aW9uLiAgKi8KKwor ZW51bSBweV9mcmFtZV9hcmdzCisgIHsKKyAgICAvKiBQcmludCBubyB2YWx1 ZXMgZm9yIGFyZ3VtZW50cyB3aGVuIGludm9rZWQgZnJvbSB0aGUgTUkuICov CisgICAgTk9fVkFMVUVTID0gUFJJTlRfTk9fVkFMVUVTLAorCisgICAgTUlf UFJJTlRfQUxMX1ZBTFVFUyA9IFBSSU5UX0FMTF9WQUxVRVMsCisKKyAgICAv KiBQcmludCBvbmx5IHNpbXBsZSB2YWx1ZXMgKHdoYXQgTUkgZGVmaW5lcyBh cyAic2ltcGxlIikgZm9yCisgICAgICAgYXJndW1lbnRzIHdoZW4gaW52b2tl ZCBmcm9tIHRoZSBNSS4gKi8KKyAgICBNSV9QUklOVF9TSU1QTEVfVkFMVUVT ID0gUFJJTlRfU0lNUExFX1ZBTFVFUywKKworICAgIC8qIFByaW50IG9ubHkg c2NhbGFyIHZhbHVlcyBmb3IgYXJndW1lbnRzIHdoZW4gaW52b2tlZCBmcm9t IHRoZSBDTEkuICovCisgICAgQ0xJX1NDQUxBUl9WQUxVRVMsCisKKyAgICAv KiBQcmludCBhbGwgdmFsdWVzIGZvciBhcmd1bWVudHMgd2hlbiBpbnZva2Vk IGZyb20gdGhlIENMSS4gKi8KKyAgICBDTElfQUxMX1ZBTFVFUworICB9Owor CitzdHJ1Y3Qgc2xhbmdfdHlwZV9wcmludGVycworeworICB2b2lkICpweV90 eXBlX3ByaW50ZXJzOworICB2b2lkICpzY21fdHlwZV9wcmludGVyczsKK307 CisKKy8qIFRoZSBpbnRlcmZhY2UgYmV0d2VlbiBHREIgYW5kIGEgc2NyaXB0 aW5nIGxhbmd1YWdlLiAgKi8KKworc3RydWN0IHNjcmlwdF9sYW5nCit7Cisg IGNvbnN0IGNoYXIgKm5hbWU7CisgIGNvbnN0IGNoYXIgKmNhcGl0YWxpemVk X25hbWU7CisgIGNvbnN0IGNoYXIgKmV4dGVuc2lvbjsKKyAgY29uc3QgY2hh ciAqYXV0b19sb2FkX3N1ZmZpeDsKKworICBlbnVtIGNvbW1hbmRfY29udHJv bF90eXBlIGNsaV9jb250cm9sX3R5cGU7CisKKyAgdm9pZCAoKmZpbmlzaF9p bml0aWFsaXphdGlvbikgKHZvaWQpOworCisgIGludCAoKmluaXRpYWxpemVk KSAodm9pZCk7CisKKyAgc2xhbmdfc291cmNlcl9mdW5jICpzb3VyY2Vfc2Ny aXB0OworICB2b2lkICgqZXZhbF9mcm9tX2NvbnRyb2xfY29tbWFuZCkgKHN0 cnVjdCBjb21tYW5kX2xpbmUgKik7CisgIHZvaWQgKCpsb2FkX2F1dG9fc2Ny aXB0c19mb3Jfb2JqZmlsZSkgKHN0cnVjdCBvYmpmaWxlICopOworCisgIHZv aWQgKCpzdGFydF90eXBlX3ByaW50ZXJzKSAoc3RydWN0IHNsYW5nX3R5cGVf cHJpbnRlcnMgKik7CisgIC8qIFRoaXMgZnVuY3Rpb24gaGFzIGEgYml0IG9m IGEgZnVubnkgbmFtZSwgc2luY2UgaXQgYWN0dWFsbHkgYXBwbGllcworICAg ICByZWNvZ25pemVycywgYnV0IHRoaXMgc2VlbWVkIGNsZWFyZXIgZ2l2ZW4g dGhlIHN0YXJ0X3R5cGVfcHJpbnRlcnMKKyAgICAgYW5kIGZyZWVfdHlwZV9w cmludGVycyBmdW5jdGlvbnMuICAqLworICBjaGFyICooKmFwcGx5X3R5cGVf cHJpbnRlcnMpIChjb25zdCBzdHJ1Y3Qgc2xhbmdfdHlwZV9wcmludGVycyAq LAorCQkJCXN0cnVjdCB0eXBlICopOworICB2b2lkICgqZnJlZV90eXBlX3By aW50ZXJzKSAoc3RydWN0IHNsYW5nX3R5cGVfcHJpbnRlcnMgKik7CisKKyAg aW50ICgqYXBwbHlfdmFsX3ByZXR0eV9wcmludGVyKSAoc3RydWN0IHR5cGUg KnR5cGUsIGNvbnN0IGdkYl9ieXRlICp2YWxhZGRyLAorCQkJCSAgIGludCBl bWJlZGRlZF9vZmZzZXQsIENPUkVfQUREUiBhZGRyZXNzLAorCQkJCSAgIHN0 cnVjdCB1aV9maWxlICpzdHJlYW0sIGludCByZWN1cnNlLAorCQkJCSAgIGNv bnN0IHN0cnVjdCB2YWx1ZSAqdmFsLAorCQkJCSAgIGNvbnN0IHN0cnVjdCB2 YWx1ZV9wcmludF9vcHRpb25zICpvcHRpb25zLAorCQkJCSAgIGNvbnN0IHN0 cnVjdCBsYW5ndWFnZV9kZWZuICpsYW5ndWFnZSk7CisKKyAgZW51bSBweV9i dF9zdGF0dXMgKCphcHBseV9mcmFtZV9maWx0ZXIpIChzdHJ1Y3QgZnJhbWVf aW5mbyAqZnJhbWUsIGludCBmbGFncywKKwkJCQkJICAgZW51bSBweV9mcmFt ZV9hcmdzIGFyZ3NfdHlwZSwKKwkJCQkJICAgc3RydWN0IHVpX291dCAqb3V0 LAorCQkJCQkgICBpbnQgZnJhbWVfbG93LCBpbnQgZnJhbWVfaGlnaCk7CisK KyAgdm9pZCAoKnByZXNlcnZlX3ZhbHVlcykgKHN0cnVjdCBvYmpmaWxlICos IGh0YWJfdCBjb3BpZWRfdHlwZXMpOworCisgIGludCAoKmJyZWFrcG9pbnRf aGFzX2NvbmQpIChzdHJ1Y3QgYnJlYWtwb2ludCAqKTsKKyAgaW50ICgqYnJl YWtwb2ludF9jb25kX3NheXNfc3RvcCkgKHN0cnVjdCBicmVha3BvaW50ICop OworCisgIGludCAoKmNoZWNrX3F1aXRfZmxhZykgKHZvaWQpOworICB2b2lk ICgqY2xlYXJfcXVpdF9mbGFnKSAodm9pZCk7CisgIHZvaWQgKCpzZXRfcXVp dF9mbGFnKSAodm9pZCk7CisKKyAgLyogVE9ETzogdmFyb2JqLmMgKi8KK307 CisKKy8qIFdyYXBwZXJzIGZvciBlYWNoIHNjcmlwdGluZyBBUEkgZnVuY3Rp b24uICAqLworCitleHRlcm4gdm9pZCBmaW5pc2hfc2xhbmdfaW5pdGlhbGl6 YXRpb24gKHZvaWQpOworCitleHRlcm4gc2xhbmdfc291cmNlcl9mdW5jICpn ZXRfc2xhbmdfc291cmNlciAoY29uc3QgY2hhciAqZmlsZSk7CisKK2V4dGVy biB2b2lkIGV2YWxfc2xhbmdfZnJvbV9jb250cm9sX2NvbW1hbmQgKHN0cnVj dCBjb21tYW5kX2xpbmUgKmNtZCk7CisKK2V4dGVybiB2b2lkIGxvYWRfc2xh bmdfYXV0b19zY3JpcHRzX2Zvcl9vYmpmaWxlIChzdHJ1Y3Qgb2JqZmlsZSAq KTsKKworZXh0ZXJuIHN0cnVjdCBzbGFuZ190eXBlX3ByaW50ZXJzICpzdGFy dF9zbGFuZ190eXBlX3ByaW50ZXJzICh2b2lkKTsKKworZXh0ZXJuIGNoYXIg KmFwcGx5X3NsYW5nX3R5cGVfcHJpbnRlcnMgKHN0cnVjdCBzbGFuZ190eXBl X3ByaW50ZXJzICosCisJCQkJCXN0cnVjdCB0eXBlICopOworCitleHRlcm4g dm9pZCBmcmVlX3NsYW5nX3R5cGVfcHJpbnRlcnMgKHN0cnVjdCBzbGFuZ190 eXBlX3ByaW50ZXJzICopOworCitleHRlcm4gaW50IGFwcGx5X3ZhbF9zbGFu Z19wcmV0dHlfcHJpbnRlcgorICAoc3RydWN0IHR5cGUgKnR5cGUsIGNvbnN0 IGdkYl9ieXRlICp2YWxhZGRyLAorICAgaW50IGVtYmVkZGVkX29mZnNldCwg Q09SRV9BRERSIGFkZHJlc3MsCisgICBzdHJ1Y3QgdWlfZmlsZSAqc3RyZWFt LCBpbnQgcmVjdXJzZSwKKyAgIGNvbnN0IHN0cnVjdCB2YWx1ZSAqdmFsLAor ICAgY29uc3Qgc3RydWN0IHZhbHVlX3ByaW50X29wdGlvbnMgKm9wdGlvbnMs CisgICBjb25zdCBzdHJ1Y3QgbGFuZ3VhZ2VfZGVmbiAqbGFuZ3VhZ2UpOwor CitleHRlcm4gZW51bSBweV9idF9zdGF0dXMgYXBwbHlfc2xhbmdfZnJhbWVf ZmlsdGVyCisgIChzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWUsIGludCBmbGFn cywgZW51bSBweV9mcmFtZV9hcmdzIGFyZ3NfdHlwZSwKKyAgIHN0cnVjdCB1 aV9vdXQgKm91dCwgaW50IGZyYW1lX2xvdywgaW50IGZyYW1lX2hpZ2gpOwor CitleHRlcm4gdm9pZCBwcmVzZXJ2ZV9zbGFuZ192YWx1ZXMgKHN0cnVjdCBv YmpmaWxlICosIGh0YWJfdCBjb3BpZWRfdHlwZXMpOworCitleHRlcm4gaW50 IGJyZWFrcG9pbnRfaGFzX3NsYW5nX2NvbmQgKHN0cnVjdCBicmVha3BvaW50 ICopOworCitleHRlcm4gaW50IGJyZWFrcG9pbnRfc2xhbmdfY29uZF9zYXlz X3N0b3AgKHN0cnVjdCBicmVha3BvaW50ICopOworCisvKiBSZXR1cm4gbm9u LXplcm8gaWYgUHl0aG9uIHNjcmlwdGluZyBzdWNjZXNzZnVsbHkgaW5pdGlh bGl6ZWQuICAqLworZXh0ZXJuIGludCBzbGFuZ19weXRob25faW5pdGlhbGl6 ZWQgKHZvaWQpOworCisvKiBSZXR1cm4gbm9uLXplcm8gaWYgU2NoZW1lIHNj cmlwdGluZyBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQuICAqLworZXh0ZXJu IGludCBzbGFuZ19zY2hlbWVfaW5pdGlhbGl6ZWQgKHZvaWQpOworCisjZW5k aWYgLyogU0NSSVBUSU5HX0ggKi8KSW5kZXg6IHN0YWNrLmMKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9zdGFj ay5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI3OQpkaWZmIC11IC1wIC1y MS4yNzkgc3RhY2suYwotLS0gc3RhY2suYwkyMCBBdWcgMjAxMyAxNjozMDoy MCAtMDAwMAkxLjI3OQorKysgc3RhY2suYwk2IFNlcCAyMDEzIDE1OjE3OjEy IC0wMDAwCkBAIC0xNzcwLDEwICsxNzcwLDEwIEBAIGJhY2t0cmFjZV9jb21t YW5kXzEgKGNoYXIgKmNvdW50X2V4cCwgaW4KICAgICAgIGVsc2UKIAlhcmdf dHlwZSA9IE5PX1ZBTFVFUzsKIAotICAgICAgcmVzdWx0ID0gYXBwbHlfZnJh bWVfZmlsdGVyIChnZXRfY3VycmVudF9mcmFtZSAoKSwgZmxhZ3MsIGFyZ190 eXBlLAotCQkJCSAgIGN1cnJlbnRfdWlvdXQsIHB5X3N0YXJ0LCBweV9lbmQp OwotCisgICAgICByZXN1bHQgPSBhcHBseV9zbGFuZ19mcmFtZV9maWx0ZXIg KGdldF9jdXJyZW50X2ZyYW1lICgpLCBmbGFncywgYXJnX3R5cGUsCisJCQkJ CSBjdXJyZW50X3Vpb3V0LCBweV9zdGFydCwgcHlfZW5kKTsKICAgICB9CisK ICAgLyogUnVuIHRoZSBpbmJ1aWx0IGJhY2t0cmFjZSBpZiB0aGVyZSBhcmUg bm8gZmlsdGVycyByZWdpc3RlcmVkLCBvcgogICAgICAibm8tZmlsdGVycyIg aGFzIGJlZW4gc3BlY2lmaWVkIGZyb20gdGhlIGNvbW1hbmQuICAqLwogICBp ZiAobm9fZmlsdGVycyB8fCAgcmVzdWx0ID09IFBZX0JUX05PX0ZJTFRFUlMp CkluZGV4OiB0b3AuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl OiAvY3ZzL3NyYy9zcmMvZ2RiL3RvcC5jLHYKcmV0cmlldmluZyByZXZpc2lv biAxLjI0MQpkaWZmIC11IC1wIC1yMS4yNDEgdG9wLmMKLS0tIHRvcC5jCTE1 IEF1ZyAyMDEzIDA4OjE4OjMxIC0wMDAwCTEuMjQxCisrKyB0b3AuYwk2IFNl cCAyMDEzIDE1OjE3OjEyIC0wMDAwCkBAIC0xODgxLDExICsxODgxLDkgQEAg Z2RiX2luaXQgKGNoYXIgKmFyZ3YwKQogICBpZiAoZGVwcmVjYXRlZF9pbml0 X3VpX2hvb2spCiAgICAgZGVwcmVjYXRlZF9pbml0X3VpX2hvb2sgKGFyZ3Yw KTsKIAotI2lmZGVmIEhBVkVfUFlUSE9OCiAgIC8qIFB5dGhvbiBpbml0aWFs aXphdGlvbiBjYW4gcmVxdWlyZSB2YXJpb3VzIGNvbW1hbmRzIHRvIGJlCiAg ICAgIGluc3RhbGxlZC4gIEZvciBleGFtcGxlICJpbmZvIHByZXR0eS1wcmlu dGVyIiBuZWVkcyB0aGUgImluZm8iCiAgICAgIHByZWZpeCB0byBiZSBpbnN0 YWxsZWQuICBLZWVwIHRoaW5ncyBzaW1wbGUgYW5kIGp1c3QgZG8gZmluYWwK ICAgICAgcHl0aG9uIGluaXRpYWxpemF0aW9uIGhlcmUuICAqLwotICBmaW5p c2hfcHl0aG9uX2luaXRpYWxpemF0aW9uICgpOwotI2VuZGlmCisgIGZpbmlz aF9zbGFuZ19pbml0aWFsaXphdGlvbiAoKTsKIH0KSW5kZXg6IHR5cGVwcmlu dC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3Jj L3NyYy9nZGIvdHlwZXByaW50LmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu NTMKZGlmZiAtdSAtcCAtcjEuNTMgdHlwZXByaW50LmMKLS0tIHR5cGVwcmlu dC5jCTI4IE1hciAyMDEzIDE3OjI1OjQ3IC0wMDAwCTEuNTMKKysrIHR5cGVw cmludC5jCTYgU2VwIDIwMTMgMTU6MTc6MTIgLTAwMDAKQEAgLTI0OCw3ICsy NDgsNyBAQCBkb19mcmVlX2dsb2JhbF90YWJsZSAodm9pZCAqYXJnKQogICBz dHJ1Y3QgdHlwZV9wcmludF9vcHRpb25zICpmbGFncyA9IGFyZzsKIAogICBm cmVlX3R5cGVkZWZfaGFzaCAoZmxhZ3MtPmdsb2JhbF90eXBlZGVmcyk7Ci0g IGZyZWVfdHlwZV9wcmludGVycyAoZmxhZ3MtPmdsb2JhbF9wcmludGVycyk7 CisgIGZyZWVfc2xhbmdfdHlwZV9wcmludGVycyAoZmxhZ3MtPmdsb2JhbF9w cmludGVycyk7CiB9CiAKIC8qIENyZWF0ZSB0aGUgZ2xvYmFsIHR5cGVkZWYg aGFzaC4gICovCkBAIC0yNTgsMTMgKzI1OCwxMyBAQCBjcmVhdGVfZ2xvYmFs X3R5cGVkZWZfdGFibGUgKHN0cnVjdCB0eXBlCiB7CiAgIGdkYl9hc3NlcnQg KGZsYWdzLT5nbG9iYWxfdHlwZWRlZnMgPT0gTlVMTCAmJiBmbGFncy0+Z2xv YmFsX3ByaW50ZXJzID09IE5VTEwpOwogICBmbGFncy0+Z2xvYmFsX3R5cGVk ZWZzID0gY3JlYXRlX3R5cGVkZWZfaGFzaCAoKTsKLSAgZmxhZ3MtPmdsb2Jh bF9wcmludGVycyA9IHN0YXJ0X3R5cGVfcHJpbnRlcnMgKCk7CisgIGZsYWdz LT5nbG9iYWxfcHJpbnRlcnMgPSBzdGFydF9zbGFuZ190eXBlX3ByaW50ZXJz ICgpOwogICByZXR1cm4gbWFrZV9jbGVhbnVwIChkb19mcmVlX2dsb2JhbF90 YWJsZSwgZmxhZ3MpOwogfQogCiAvKiBMb29rIHVwIHRoZSB0eXBlIFQgaW4g dGhlIGdsb2JhbCB0eXBlZGVmIGhhc2guICBJZiBpdCBpcyBmb3VuZCwKICAg IHJldHVybiB0aGUgdHlwZWRlZiBuYW1lLiAgSWYgaXQgaXMgbm90IGZvdW5k LCBhcHBseSB0aGUKLSAgIHR5cGUtcHJpbnRlcnMsIGlmIGFueSwgZ2l2ZW4g Ynkgc3RhcnRfdHlwZV9wcmludGVycyBhbmQgcmV0dXJuIHRoZQorICAgdHlw ZS1wcmludGVycywgaWYgYW55LCBnaXZlbiBieSBzdGFydF9zbGFuZ190eXBl X3ByaW50ZXJzIGFuZCByZXR1cm4gdGhlCiAgICByZXN1bHQuICBBIE5VTEwg cmV0dXJuIG1lYW5zIHRoYXQgdGhlIG5hbWUgd2FzIG5vdCBmb3VuZC4gICov CiAKIHN0YXRpYyBjb25zdCBjaGFyICoKQEAgLTI4OCw3ICsyODgsNyBAQCBm aW5kX2dsb2JhbF90eXBlZGVmIChjb25zdCBzdHJ1Y3QgdHlwZV9wCiAgICAg ICByZXR1cm4gbmV3X3RmLT5uYW1lOwogICAgIH0KIAotICAvKiBQdXQgYW4g ZW50cnkgaW50byB0aGUgaGFzaCB0YWJsZSBub3csIGluIGNhc2UgYXBwbHlf dHlwZV9wcmludGVycworICAvKiBQdXQgYW4gZW50cnkgaW50byB0aGUgaGFz aCB0YWJsZSBub3csIGluIGNhc2UgYXBwbHlfc2xhbmdfdHlwZV9wcmludGVy cwogICAgICByZWN1cnNlcy4gICovCiAgIG5ld190ZiA9IFhPQk5FVyAoJmZs YWdzLT5nbG9iYWxfdHlwZWRlZnMtPnN0b3JhZ2UsIHN0cnVjdCB0eXBlZGVm X2ZpZWxkKTsKICAgbmV3X3RmLT5uYW1lID0gTlVMTDsKQEAgLTI5Niw3ICsy OTYsNyBAQCBmaW5kX2dsb2JhbF90eXBlZGVmIChjb25zdCBzdHJ1Y3QgdHlw ZV9wCiAKICAgKnNsb3QgPSBuZXdfdGY7CiAKLSAgYXBwbGllZCA9IGFwcGx5 X3R5cGVfcHJpbnRlcnMgKGZsYWdzLT5nbG9iYWxfcHJpbnRlcnMsIHQpOwor ICBhcHBsaWVkID0gYXBwbHlfc2xhbmdfdHlwZV9wcmludGVycyAoZmxhZ3Mt Pmdsb2JhbF9wcmludGVycywgdCk7CiAKICAgaWYgKGFwcGxpZWQgIT0gTlVM TCkKICAgICB7CkluZGV4OiB0eXBlcHJpbnQuaAo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL3R5cGVwcmludC5o LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE3CmRpZmYgLXUgLXAgLXIxLjE3 IHR5cGVwcmludC5oCi0tLSB0eXBlcHJpbnQuaAkxIEphbiAyMDEzIDA2OjQx OjI5IC0wMDAwCTEuMTcKKysrIHR5cGVwcmludC5oCTYgU2VwIDIwMTMgMTU6 MTc6MTIgLTAwMDAKQEAgLTIyLDYgKzIyLDcgQEAKIGVudW0gbGFuZ3VhZ2U7 CiBzdHJ1Y3QgdWlfZmlsZTsKIHN0cnVjdCB0eXBlZGVmX2hhc2hfdGFibGU7 CitzdHJ1Y3Qgc2xhbmdfdHlwZV9wcmludGVyczsKIAogc3RydWN0IHR5cGVf cHJpbnRfb3B0aW9ucwogewpAQCAtNDQsNyArNDUsNyBAQCBzdHJ1Y3QgdHlw ZV9wcmludF9vcHRpb25zCiAKICAgLyogVGhlIGxpc3Qgb2YgdHlwZSBwcmlu dGVycyBhc3NvY2lhdGVkIHdpdGggdGhlIGdsb2JhbCB0eXBlZGVmCiAgICAg IHRhYmxlLiAgVGhpcyBpcyBpbnRlbnRpb25hbGx5IG9wYXF1ZS4gICovCi0g IHZvaWQgKmdsb2JhbF9wcmludGVyczsKKyAgc3RydWN0IHNsYW5nX3R5cGVf cHJpbnRlcnMgKmdsb2JhbF9wcmludGVyczsKIH07CiAKIGV4dGVybiBjb25z dCBzdHJ1Y3QgdHlwZV9wcmludF9vcHRpb25zIHR5cGVfcHJpbnRfcmF3X29w dGlvbnM7CkluZGV4OiB1dGlscy5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K UkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvdXRpbHMuYyx2CnJldHJpZXZp bmcgcmV2aXNpb24gMS4zMDYKZGlmZiAtdSAtcCAtcjEuMzA2IHV0aWxzLmMK LS0tIHV0aWxzLmMJMTMgQXVnIDIwMTMgMDg6MzE6MjAgLTAwMDAJMS4zMDYK KysrIHV0aWxzLmMJNiBTZXAgMjAxMyAxNToxNzoxMiAtMDAwMApAQCAtMTE3 LDEyICsxMTcsNiBAQCBzdGF0aWMgaW50IGRlYnVnX3RpbWVzdGFtcCA9IDA7 CiAKIGludCBqb2JfY29udHJvbDsKIAotI2lmbmRlZiBIQVZFX1BZVEhPTgot LyogTm9uemVybyBtZWFucyBhIHF1aXQgaGFzIGJlZW4gcmVxdWVzdGVkLiAg Ki8KLQotaW50IHF1aXRfZmxhZzsKLSNlbmRpZiAvKiBIQVZFX1BZVEhPTiAq LwotCiAvKiBOb256ZXJvIG1lYW5zIHF1aXQgaW1tZWRpYXRlbHkgaWYgQ29u dHJvbC1DIGlzIHR5cGVkIG5vdywgcmF0aGVyCiAgICB0aGFuIHdhaXRpbmcg dW50aWwgUVVJVCBpcyBleGVjdXRlZC4gIEJlIGNhcmVmdWwgaW4gc2V0dGlu ZyB0aGlzOwogICAgY29kZSB3aGljaCBleGVjdXRlcyB3aXRoIGltbWVkaWF0 ZV9xdWl0IHNldCBoYXMgdG8gYmUgdmVyeSBjYXJlZnVsCkBAIC0xMzYsNDEg KzEzMCw2IEBAIGludCBxdWl0X2ZsYWc7CiAKIGludCBpbW1lZGlhdGVfcXVp dDsKIAotI2lmbmRlZiBIQVZFX1BZVEhPTgotCi0vKiBDbGVhciB0aGUgcXVp dCBmbGFnLiAgKi8KLQotdm9pZAotY2xlYXJfcXVpdF9mbGFnICh2b2lkKQot ewotICBxdWl0X2ZsYWcgPSAwOwotfQotCi0vKiBTZXQgdGhlIHF1aXQgZmxh Zy4gICovCi0KLXZvaWQKLXNldF9xdWl0X2ZsYWcgKHZvaWQpCi17Ci0gIHF1 aXRfZmxhZyA9IDE7Ci19Ci0KLS8qIFJldHVybiB0cnVlIGlmIHRoZSBxdWl0 IGZsYWcgaGFzIGJlZW4gc2V0LCBmYWxzZSBvdGhlcndpc2UuICAqLwotCi1p bnQKLWNoZWNrX3F1aXRfZmxhZyAodm9pZCkKLXsKLSAgLyogVGhpcyBpcyB3 cml0dGVuIGluIGEgcGFydGljdWxhciB3YXkgdG8gYXZvaWQgcmFjZXMuICAq LwotICBpZiAocXVpdF9mbGFnKQotICAgIHsKLSAgICAgIHF1aXRfZmxhZyA9 IDA7Ci0gICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgcmV0dXJuIDA7Ci19 Ci0KLSNlbmRpZiAvKiBIQVZFX1BZVEhPTiAqLwotCiAvKiBOb256ZXJvIG1l YW5zIHRoYXQgc3RyaW5ncyB3aXRoIGNoYXJhY3RlciB2YWx1ZXMgPjB4N0Yg c2hvdWxkIGJlIHByaW50ZWQKICAgIGFzIG9jdGFsIGVzY2FwZXMuICBaZXJv IG1lYW5zIGp1c3QgcHJpbnQgdGhlIHZhbHVlIChlLmcuIGl0J3MgYW4KICAg IGludGVybmF0aW9uYWwgY2hhcmFjdGVyLCBhbmQgdGhlIHRlcm1pbmFsIG9y IHdpbmRvdyBjYW4gY29wZS4pICAqLwpJbmRleDogdmFscHJpbnQuYwo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2Ri L3ZhbHByaW50LmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTM4CmRpZmYg LXUgLXAgLXIxLjEzOCB2YWxwcmludC5jCi0tLSB2YWxwcmludC5jCTE3IEp1 bCAyMDEzIDIwOjM1OjExIC0wMDAwCTEuMTM4CisrKyB2YWxwcmludC5jCTYg U2VwIDIwMTMgMTU6MTc6MTIgLTAwMDAKQEAgLTc2MSw5ICs3NjEsOSBAQCB2 YWxfcHJpbnQgKHN0cnVjdCB0eXBlICp0eXBlLCBjb25zdCBnZGJfCiAKICAg aWYgKCFvcHRpb25zLT5yYXcpCiAgICAgewotICAgICAgcmV0ID0gYXBwbHlf dmFsX3ByZXR0eV9wcmludGVyICh0eXBlLCB2YWxhZGRyLCBlbWJlZGRlZF9v ZmZzZXQsCi0JCQkJICAgICAgYWRkcmVzcywgc3RyZWFtLCByZWN1cnNlLAot CQkJCSAgICAgIHZhbCwgb3B0aW9ucywgbGFuZ3VhZ2UpOworICAgICAgcmV0 ID0gYXBwbHlfdmFsX3NsYW5nX3ByZXR0eV9wcmludGVyICh0eXBlLCB2YWxh ZGRyLCBlbWJlZGRlZF9vZmZzZXQsCisJCQkJCSAgICBhZGRyZXNzLCBzdHJl YW0sIHJlY3Vyc2UsCisJCQkJCSAgICB2YWwsIG9wdGlvbnMsIGxhbmd1YWdl KTsKICAgICAgIGlmIChyZXQpCiAJcmV0dXJuOwogICAgIH0KQEAgLTg1OCwx MiArODU4LDEyIEBAIHZhbHVlX3ByaW50IChzdHJ1Y3QgdmFsdWUgKnZhbCwg c3RydWN0IHUKIAogICBpZiAoIW9wdGlvbnMtPnJhdykKICAgICB7Ci0gICAg ICBpbnQgciA9IGFwcGx5X3ZhbF9wcmV0dHlfcHJpbnRlciAodmFsdWVfdHlw ZSAodmFsKSwKLQkJCQkJdmFsdWVfY29udGVudHNfZm9yX3ByaW50aW5nICh2 YWwpLAotCQkJCQl2YWx1ZV9lbWJlZGRlZF9vZmZzZXQgKHZhbCksCi0JCQkJ CXZhbHVlX2FkZHJlc3MgKHZhbCksCi0JCQkJCXN0cmVhbSwgMCwKLQkJCQkJ dmFsLCBvcHRpb25zLCBjdXJyZW50X2xhbmd1YWdlKTsKKyAgICAgIGludCBy ID0gYXBwbHlfdmFsX3NsYW5nX3ByZXR0eV9wcmludGVyICh2YWx1ZV90eXBl ICh2YWwpLAorCQkJCQkgICAgICB2YWx1ZV9jb250ZW50c19mb3JfcHJpbnRp bmcgKHZhbCksCisJCQkJCSAgICAgIHZhbHVlX2VtYmVkZGVkX29mZnNldCAo dmFsKSwKKwkJCQkJICAgICAgdmFsdWVfYWRkcmVzcyAodmFsKSwKKwkJCQkJ ICAgICAgc3RyZWFtLCAwLAorCQkJCQkgICAgICB2YWwsIG9wdGlvbnMsIGN1 cnJlbnRfbGFuZ3VhZ2UpOwogCiAgICAgICBpZiAocikKIAlyZXR1cm47Cklu ZGV4OiB2YWx1ZS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6 IC9jdnMvc3JjL3NyYy9nZGIvdmFsdWUuYyx2CnJldHJpZXZpbmcgcmV2aXNp b24gMS4xNzkKZGlmZiAtdSAtcCAtcjEuMTc5IHZhbHVlLmMKLS0tIHZhbHVl LmMJNSBBdWcgMjAxMyAxNTo1MTowMiAtMDAwMAkxLjE3OQorKysgdmFsdWUu Ywk2IFNlcCAyMDEzIDE1OjE3OjEyIC0wMDAwCkBAIC0yMjMwLDcgKzIyMzAs NyBAQCBwcmVzZXJ2ZV92YWx1ZXMgKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxl CiAgIGZvciAodmFyID0gaW50ZXJuYWx2YXJzOyB2YXI7IHZhciA9IHZhci0+ bmV4dCkKICAgICBwcmVzZXJ2ZV9vbmVfaW50ZXJuYWx2YXIgKHZhciwgb2Jq ZmlsZSwgY29waWVkX3R5cGVzKTsKIAotICBwcmVzZXJ2ZV9weXRob25fdmFs dWVzIChvYmpmaWxlLCBjb3BpZWRfdHlwZXMpOworICBwcmVzZXJ2ZV9zbGFu Z192YWx1ZXMgKG9iamZpbGUsIGNvcGllZF90eXBlcyk7CiAKICAgaHRhYl9k ZWxldGUgKGNvcGllZF90eXBlcyk7CiB9CkluZGV4OiBjbGkvY2xpLWNtZHMu Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9z cmMvZ2RiL2NsaS9jbGktY21kcy5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAx LjE1OQpkaWZmIC11IC1wIC1yMS4xNTkgY2xpLWNtZHMuYwotLS0gY2xpL2Ns aS1jbWRzLmMJMTcgSnVsIDIwMTMgMjA6MjY6MjggLTAwMDAJMS4xNTkKKysr IGNsaS9jbGktY21kcy5jCTYgU2VwIDIwMTMgMTU6MTc6MTIgLTAwMDAKQEAg LTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlICJjbGkvY2xpLXV0aWxzLmgiCiAK ICNpbmNsdWRlICJweXRob24vcHl0aG9uLmgiCisjaW5jbHVkZSAic2NoZW1l L3NjaGVtZS5oIgogCiAjaWZkZWYgVFVJCiAjaW5jbHVkZSAidHVpL3R1aS5o IgkvKiBGb3IgdHVpX2FjdGl2ZSBldC5hbC4gICovCkBAIC01MjIsMjMgKzUy MywyNyBAQCBmaW5kX2FuZF9vcGVuX3NjcmlwdCAoY29uc3QgY2hhciAqc2Ny aXB0CiBzdGF0aWMgdm9pZAogc291cmNlX3NjcmlwdF9mcm9tX3N0cmVhbSAo RklMRSAqc3RyZWFtLCBjb25zdCBjaGFyICpmaWxlKQogewotICBpZiAoc2Ny aXB0X2V4dF9tb2RlICE9IHNjcmlwdF9leHRfb2ZmCi0gICAgICAmJiBzdHJs ZW4gKGZpbGUpID4gMyAmJiAhc3RyY21wICgmZmlsZVtzdHJsZW4gKGZpbGUp IC0gM10sICIucHkiKSkKKyAgaWYgKHNjcmlwdF9leHRfbW9kZSAhPSBzY3Jp cHRfZXh0X29mZikKICAgICB7Ci0gICAgICB2b2xhdGlsZSBzdHJ1Y3QgZ2Ri X2V4Y2VwdGlvbiBlOworICAgICAgc2xhbmdfc291cmNlcl9mdW5jICpzb3Vy Y2VyID0gZ2V0X3NsYW5nX3NvdXJjZXIgKGZpbGUpOwogCi0gICAgICBUUllf Q0FUQ0ggKGUsIFJFVFVSTl9NQVNLX0VSUk9SKQotCXsKLQkgIHNvdXJjZV9w eXRob25fc2NyaXB0IChzdHJlYW0sIGZpbGUpOwotCX0KLSAgICAgIGlmIChl LnJlYXNvbiA8IDApCisgICAgICBpZiAoc291cmNlciAhPSBOVUxMKQogCXsK KwkgIHZvbGF0aWxlIHN0cnVjdCBnZGJfZXhjZXB0aW9uIGU7CisKKwkgIFRS WV9DQVRDSCAoZSwgUkVUVVJOX01BU0tfRVJST1IpCisJICAgIHsKKwkgICAg ICBzb3VyY2VyIChzdHJlYW0sIGZpbGUpOworCSAgICB9CisJICBpZiAoZS5y ZWFzb24gPj0gMCkKKwkgICAgcmV0dXJuOwogCSAgLyogU2hvdWxkIHdlIGZh bGxiYWNrIHRvIHllIG9sZGUgR0RCIHNjcmlwdCBtb2RlPyAgKi8KIAkgIGlm IChzY3JpcHRfZXh0X21vZGUgPT0gc2NyaXB0X2V4dF9zb2Z0Ci0JICAgICAg JiYgZS5yZWFzb24gPT0gUkVUVVJOX0VSUk9SICYmIGUuZXJyb3IgPT0gVU5T VVBQT1JURURfRVJST1IpCisJICAgICAgJiYgZS5yZWFzb24gPT0gUkVUVVJO X0VSUk9SCisJICAgICAgJiYgZS5lcnJvciA9PSBVTlNVUFBPUlRFRF9FUlJP UikKIAkgICAgewogCSAgICAgIGZzZWVrIChzdHJlYW0sIDAsIFNFRUtfU0VU KTsKLQkgICAgICBzY3JpcHRfZnJvbV9maWxlIChzdHJlYW0sIChjaGFyKikg ZmlsZSk7CisJICAgICAgLyogU2NyaXB0IGlzIGxvYWRlZCBiZWxvdy4gICov CiAJICAgIH0KIAkgIGVsc2UKIAkgICAgewpAQCAtNTQ3LDggKzU1Miw4IEBA IHNvdXJjZV9zY3JpcHRfZnJvbV9zdHJlYW0gKEZJTEUgKnN0cmVhbSwKIAkg ICAgfQogCX0KICAgICB9Ci0gIGVsc2UKLSAgICBzY3JpcHRfZnJvbV9maWxl IChzdHJlYW0sIGZpbGUpOworCisgIHNjcmlwdF9mcm9tX2ZpbGUgKHN0cmVh bSwgZmlsZSk7CiB9CiAKIC8qIFdvcmtlciB0byBwZXJmb3JtIHRoZSAic291 cmNlIiBjb21tYW5kLgpAQCAtMTIyNCw3ICsxMjI5LDcgQEAgc2hvd191c2Vy IChjaGFyICphcmdzLCBpbnQgZnJvbV90dHkpCiAgICAgICBjb25zdCBjaGFy ICpjb21uYW1lID0gYXJnczsKIAogICAgICAgYyA9IGxvb2t1cF9jbWQgKCZj b21uYW1lLCBjbWRsaXN0LCAiIiwgMCwgMSk7Ci0gICAgICAvKiBjLT51c2Vy X2NvbW1hbmRzIHdvdWxkIGJlIE5VTEwgaWYgaXQncyBhIHB5dGhvbiBjb21t YW5kLiAgKi8KKyAgICAgIC8qIGMtPnVzZXJfY29tbWFuZHMgd291bGQgYmUg TlVMTCBpZiBpdCdzIGEgcHl0aG9uL3NjaGVtZSBjb21tYW5kLiAgKi8KICAg ICAgIGlmIChjLT5jbGFzcyAhPSBjbGFzc191c2VyIHx8ICFjLT51c2VyX2Nv bW1hbmRzKQogCWVycm9yIChfKCJOb3QgYSB1c2VyIGNvbW1hbmQuIikpOwog ICAgICAgc2hvd191c2VyXzEgKGMsICIiLCBhcmdzLCBnZGJfc3Rkb3V0KTsK QEAgLTE4NDksNyArMTg1NCw3IEBAIHlvdSBtdXN0IHR5cGUgXCJkaXNhc3Nl bWJsZSAnZm9vLmMnOjpiYXIKIFJ1biB0aGUgYGBtYWtlJycgcHJvZ3JhbSB1 c2luZyB0aGUgcmVzdCBvZiB0aGUgbGluZSBhcyBhcmd1bWVudHMuIikpOwog ICBzZXRfY21kX2NvbXBsZXRlciAoYywgZmlsZW5hbWVfY29tcGxldGVyKTsK ICAgYWRkX2NtZCAoInVzZXIiLCBub19jbGFzcywgc2hvd191c2VyLCBfKCJc Ci1TaG93IGRlZmluaXRpb25zIG9mIG5vbi1weXRob24gdXNlciBkZWZpbmVk IGNvbW1hbmRzLlxuXAorU2hvdyBkZWZpbml0aW9ucyBvZiBub24tcHl0aG9u L3NjaGVtZSB1c2VyIGRlZmluZWQgY29tbWFuZHMuXG5cCiBBcmd1bWVudCBp cyB0aGUgbmFtZSBvZiB0aGUgdXNlciBkZWZpbmVkIGNvbW1hbmQuXG5cCiBX aXRoIG5vIGFyZ3VtZW50LCBzaG93IGRlZmluaXRpb25zIG9mIGFsbCB1c2Vy IGRlZmluZWQgY29tbWFuZHMuIiksICZzaG93bGlzdCk7CiAgIGFkZF9jb20g KCJhcHJvcG9zIiwgY2xhc3Nfc3VwcG9ydCwgYXByb3Bvc19jb21tYW5kLApA QCAtMTg1Nyw4ICsxODYyLDggQEAgV2l0aCBubyBhcmd1bWVudCwgc2hvdyBk ZWZpbml0aW9ucyBvZiBhbAogCiAgIGFkZF9zZXRzaG93X3VpbnRlZ2VyX2Nt ZCAoIm1heC11c2VyLWNhbGwtZGVwdGgiLCBub19jbGFzcywKIAkJCSAgICZt YXhfdXNlcl9jYWxsX2RlcHRoLCBfKCJcCi1TZXQgdGhlIG1heCBjYWxsIGRl cHRoIGZvciBub24tcHl0aG9uIHVzZXItZGVmaW5lZCBjb21tYW5kcy4iKSwg XygiXAotU2hvdyB0aGUgbWF4IGNhbGwgZGVwdGggZm9yIG5vbi1weXRob24g dXNlci1kZWZpbmVkIGNvbW1hbmRzLiIpLCBOVUxMLAorU2V0IHRoZSBtYXgg Y2FsbCBkZXB0aCBmb3Igbm9uLXB5dGhvbi9zY2hlbWUgdXNlci1kZWZpbmVk IGNvbW1hbmRzLiIpLCBfKCJcCitTaG93IHRoZSBtYXggY2FsbCBkZXB0aCBm b3Igbm9uLXB5dGhvbi9zY2hlbWUgdXNlci1kZWZpbmVkIGNvbW1hbmRzLiIp LCBOVUxMLAogCQkJICAgIE5VTEwsCiAJCQkgICAgc2hvd19tYXhfdXNlcl9j YWxsX2RlcHRoLAogCQkJICAgICZzZXRsaXN0LCAmc2hvd2xpc3QpOwpJbmRl eDogY2xpL2NsaS1zY3JpcHQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD UyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2NsaS9jbGktc2NyaXB0LmMsdgpy ZXRyaWV2aW5nIHJldmlzaW9uIDEuODQKZGlmZiAtdSAtcCAtcjEuODQgY2xp LXNjcmlwdC5jCi0tLSBjbGkvY2xpLXNjcmlwdC5jCTEgQXVnIDIwMTMgMDk6 MDk6NTggLTAwMDAJMS44NAorKysgY2xpL2NsaS1zY3JpcHQuYwk2IFNlcCAy MDEzIDE1OjE3OjEyIC0wMDAwCkBAIC0zMSw4ICszMSw4IEBACiAjaW5jbHVk ZSAiY2xpL2NsaS1kZWNvZGUuaCIKICNpbmNsdWRlICJjbGkvY2xpLXNjcmlw dC5oIgogI2luY2x1ZGUgImdkYl9hc3NlcnQuaCIKLQogI2luY2x1ZGUgInB5 dGhvbi9weXRob24uaCIKKyNpbmNsdWRlICJzY2hlbWUvc2NoZW1lLmgiCiAj aW5jbHVkZSAiaW50ZXJwcy5oIgogCiAvKiBQcm90b3R5cGVzIGZvciBsb2Nh bCBmdW5jdGlvbnMuICAqLwpAQCAtMjU1LDYgKzI1NSwxOSBAQCBwcmludF9j b21tYW5kX2xpbmVzIChzdHJ1Y3QgdWlfb3V0ICp1aW91CiAJICBjb250aW51 ZTsKIAl9CiAKKyAgICAgIGlmIChsaXN0LT5jb250cm9sX3R5cGUgPT0gc2No ZW1lX2NvbnRyb2wpCisJeworCSAgdWlfb3V0X2ZpZWxkX3N0cmluZyAodWlv dXQsIE5VTEwsICJzY2hlbWUiKTsKKwkgIHVpX291dF90ZXh0ICh1aW91dCwg IlxuIik7CisJICBwcmludF9jb21tYW5kX2xpbmVzICh1aW91dCwgKmxpc3Qt PmJvZHlfbGlzdCwgZGVwdGggKyAxKTsKKwkgIGlmIChkZXB0aCkKKwkgICAg dWlfb3V0X3NwYWNlcyAodWlvdXQsIDIgKiBkZXB0aCk7CisJICB1aV9vdXRf ZmllbGRfc3RyaW5nICh1aW91dCwgTlVMTCwgImVuZCIpOworCSAgdWlfb3V0 X3RleHQgKHVpb3V0LCAiXG4iKTsKKwkgIGxpc3QgPSBsaXN0LT5uZXh0Owor CSAgY29udGludWU7CisJfQorCiAgICAgICAvKiBJZ25vcmUgaWxsZWdhbCBj b21tYW5kIHR5cGUgYW5kIHRyeSBuZXh0LiAgKi8KICAgICAgIGxpc3QgPSBs aXN0LT5uZXh0OwogICAgIH0JCQkJLyogd2hpbGUgKGxpc3QpICovCkBAIC01 NTYsNiArNTY5LDcgQEAgZXhlY3V0ZV9jb250cm9sX2NvbW1hbmQgKHN0cnVj dCBjb21tYW5kXwogCiAJYnJlYWs7CiAgICAgICB9CisKICAgICBjYXNlIGNv bW1hbmRzX2NvbnRyb2w6CiAgICAgICB7CiAJLyogQnJlYWtwb2ludCBjb21t YW5kcyBsaXN0LCByZWNvcmQgdGhlIGNvbW1hbmRzIGluIHRoZQpAQCAtNTY3 LDEyICs1ODEsMTIgQEAgZXhlY3V0ZV9jb250cm9sX2NvbW1hbmQgKHN0cnVj dCBjb21tYW5kXwogCXJldCA9IGNvbW1hbmRzX2Zyb21fY29udHJvbF9jb21t YW5kIChuZXdfbGluZSwgY21kKTsKIAlicmVhazsKICAgICAgIH0KKwogICAg IGNhc2UgcHl0aG9uX2NvbnRyb2w6Ci0gICAgICB7Ci0JZXZhbF9weXRob25f ZnJvbV9jb250cm9sX2NvbW1hbmQgKGNtZCk7Ci0JcmV0ID0gc2ltcGxlX2Nv bnRyb2w7Ci0JYnJlYWs7Ci0gICAgICB9CisgICAgY2FzZSBzY2hlbWVfY29u dHJvbDoKKyAgICAgIGV2YWxfc2xhbmdfZnJvbV9jb250cm9sX2NvbW1hbmQg KGNtZCk7CisgICAgICByZXQgPSBzaW1wbGVfY29udHJvbDsKKyAgICAgIGJy ZWFrOwogCiAgICAgZGVmYXVsdDoKICAgICAgIHdhcm5pbmcgKF8oIkludmFs aWQgY29udHJvbCB0eXBlIGluIGNhbm5lZCBjb21tYW5kcyBzdHJ1Y3R1cmUu IikpOwpAQCAtMTAwNyw2ICsxMDIxLDExIEBAIHByb2Nlc3NfbmV4dF9saW5l IChjaGFyICpwLCBzdHJ1Y3QgY29tbWEKIAkgICAgIGhlcmUuICAqLwogCSAg KmNvbW1hbmQgPSBidWlsZF9jb21tYW5kX2xpbmUgKHB5dGhvbl9jb250cm9s LCAiIik7CiAJfQorICAgICAgZWxzZSBpZiAocF9lbmQgLSBwID09IDYgJiYg IXN0cm5jbXAgKHAsICJzY2hlbWUiLCA2KSkKKwl7CisJICAvKiBOb3RlIHRo YXQgd2UgaWdub3JlIHRoZSBpbmxpbmUgInNjaGVtZSBjb21tYW5kIiBmb3Jt IGhlcmUuICAqLworCSAgKmNvbW1hbmQgPSBidWlsZF9jb21tYW5kX2xpbmUg KHNjaGVtZV9jb250cm9sLCAiIik7CisJfQogICAgICAgZWxzZSBpZiAocF9l bmQgLSBwID09IDEwICYmICFzdHJuY21wIChwLCAibG9vcF9icmVhayIsIDEw KSkKIAl7CiAJICAqY29tbWFuZCA9IChzdHJ1Y3QgY29tbWFuZF9saW5lICop CkBAIC0xMDk0LDcgKzExMTMsOCBAQCByZWN1cnNlX3JlYWRfY29udHJvbF9z dHJ1Y3R1cmUgKGNoYXIgKiAoCiAKICAgICAgIG5leHQgPSBOVUxMOwogICAg ICAgdmFsID0gcHJvY2Vzc19uZXh0X2xpbmUgKHJlYWRfbmV4dF9saW5lX2Z1 bmMgKCksICZuZXh0LCAKLQkJCSAgICAgICBjdXJyZW50X2NtZC0+Y29udHJv bF90eXBlICE9IHB5dGhvbl9jb250cm9sLAorCQkJICAgICAgIGN1cnJlbnRf Y21kLT5jb250cm9sX3R5cGUgIT0gcHl0aG9uX2NvbnRyb2wKKwkJCSAgICAg ICAmJiBjdXJyZW50X2NtZC0+Y29udHJvbF90eXBlICE9IHNjaGVtZV9jb250 cm9sLAogCQkJICAgICAgIHZhbGlkYXRvciwgY2xvc3VyZSk7CiAKICAgICAg IC8qIEp1c3Qgc2tpcCBibGFua3MgYW5kIGNvbW1lbnRzLiAgKi8KQEAgLTEx MDMsMTAgKzExMjMsMTIgQEAgcmVjdXJzZV9yZWFkX2NvbnRyb2xfc3RydWN0 dXJlIChjaGFyICogKAogCiAgICAgICBpZiAodmFsID09IGVuZF9jb21tYW5k KQogCXsKKwkgIC8qIEZJWE1FOiBtYWtlIHN3aXRjaCAqLwogCSAgaWYgKGN1 cnJlbnRfY21kLT5jb250cm9sX3R5cGUgPT0gd2hpbGVfY29udHJvbAogCSAg ICAgIHx8IGN1cnJlbnRfY21kLT5jb250cm9sX3R5cGUgPT0gd2hpbGVfc3Rl cHBpbmdfY29udHJvbAogCSAgICAgIHx8IGN1cnJlbnRfY21kLT5jb250cm9s X3R5cGUgPT0gaWZfY29udHJvbAogCSAgICAgIHx8IGN1cnJlbnRfY21kLT5j b250cm9sX3R5cGUgPT0gcHl0aG9uX2NvbnRyb2wKKwkgICAgICB8fCBjdXJy ZW50X2NtZC0+Y29udHJvbF90eXBlID09IHNjaGVtZV9jb250cm9sCiAJICAg ICAgfHwgY3VycmVudF9jbWQtPmNvbnRyb2xfdHlwZSA9PSBjb21tYW5kc19j b250cm9sKQogCSAgICB7CiAJICAgICAgLyogU3VjY2VzcyByZWFkaW5nIGFu IGVudGlyZSBjYW5uZWQgc2VxdWVuY2Ugb2YgY29tbWFuZHMuICAqLwpAQCAt MTE2MCw2ICsxMTgyLDcgQEAgcmVjdXJzZV9yZWFkX2NvbnRyb2xfc3RydWN0 dXJlIChjaGFyICogKAogCSAgfHwgbmV4dC0+Y29udHJvbF90eXBlID09IHdo aWxlX3N0ZXBwaW5nX2NvbnRyb2wKIAkgIHx8IG5leHQtPmNvbnRyb2xfdHlw ZSA9PSBpZl9jb250cm9sCiAJICB8fCBuZXh0LT5jb250cm9sX3R5cGUgPT0g cHl0aG9uX2NvbnRyb2wKKwkgIHx8IG5leHQtPmNvbnRyb2xfdHlwZSA9PSBz Y2hlbWVfY29udHJvbAogCSAgfHwgbmV4dC0+Y29udHJvbF90eXBlID09IGNv bW1hbmRzX2NvbnRyb2wpCiAJewogCSAgY29udHJvbF9sZXZlbCsrOwpAQCAt MTI3OCw2ICsxMzAxLDcgQEAgcmVhZF9jb21tYW5kX2xpbmVzXzEgKGNoYXIg KiAoKnJlYWRfbmV4dAogICAgICAgaWYgKG5leHQtPmNvbnRyb2xfdHlwZSA9 PSB3aGlsZV9jb250cm9sCiAJICB8fCBuZXh0LT5jb250cm9sX3R5cGUgPT0g aWZfY29udHJvbAogCSAgfHwgbmV4dC0+Y29udHJvbF90eXBlID09IHB5dGhv bl9jb250cm9sCisJICB8fCBuZXh0LT5jb250cm9sX3R5cGUgPT0gc2NoZW1l X2NvbnRyb2wKIAkgIHx8IG5leHQtPmNvbnRyb2xfdHlwZSA9PSBjb21tYW5k c19jb250cm9sCiAJICB8fCBuZXh0LT5jb250cm9sX3R5cGUgPT0gd2hpbGVf c3RlcHBpbmdfY29udHJvbCkKIAl7CkluZGV4OiBkYXRhLWRpcmVjdG9yeS9N YWtlZmlsZS5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv Y3ZzL3NyYy9zcmMvZ2RiL2RhdGEtZGlyZWN0b3J5L01ha2VmaWxlLmluLHYK cmV0cmlldmluZyByZXZpc2lvbiAxLjE3CmRpZmYgLXUgLXAgLXIxLjE3IE1h a2VmaWxlLmluCi0tLSBkYXRhLWRpcmVjdG9yeS9NYWtlZmlsZS5pbgkyMiBB dWcgMjAxMyAyMDozMjo1NCAtMDAwMAkxLjE3CisrKyBkYXRhLWRpcmVjdG9y eS9NYWtlZmlsZS5pbgk2IFNlcCAyMDEzIDE1OjE3OjEzIC0wMDAwCkBAIC0x OSw4ICsxOSw5IEBACiBzcmNkaXIgPSBAc3JjZGlyQAogU1lTQ0FMTFNfU1JD RElSID0gJChzcmNkaXIpLy4uL3N5c2NhbGxzCiBQWVRIT05fU1JDRElSID0g JChzcmNkaXIpLy4uL3B5dGhvbi9saWIKK1NDSEVNRV9TUkNESVIgPSAkKHNy Y2RpcikvLi4vc2NoZW1lL2xpYgogU1lTVEVNX0dEQklOSVRfU1JDRElSID0g JChzcmNkaXIpLy4uL3N5c3RlbS1nZGJpbml0Ci1WUEFUSCA9ICQoc3JjZGly KTokKFNZU0NBTExTX1NSQ0RJUik6JChQWVRIT05fU1JDRElSKTokKFNZU1RF TV9HREJJTklUX1NSQ0RJUikKK1ZQQVRIID0gJChzcmNkaXIpOiQoU1lTQ0FM TFNfU1JDRElSKTokKFBZVEhPTl9TUkNESVIpOiQoU0NIRU1FX1NSQ0RJUik6 JChTWVNURU1fR0RCSU5JVF9TUkNESVIpCiAKIHRvcF9zcmNkaXIgPSBAdG9w X3NyY2RpckAKIHRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACkBAIC03 MCw2ICs3MSwxMSBAQCBQWVRIT05fRklMRVMgPSBcCiAJZ2RiL2Z1bmN0aW9u L19faW5pdF9fLnB5IFwKIAlnZGIvZnVuY3Rpb24vc3RyZm5zLnB5CiAKK1ND SEVNRV9ESVIgPSBzY2hlbWUKK1NDSEVNRV9JTlNUQUxMX0RJUiA9ICQoREVT VERJUikkKEdEQl9EQVRBRElSKS8kKFNDSEVNRV9ESVIpCitTQ0hFTUVfRklM RVMgPSBcCisJLi9nZGIuc2NtCisKIFNZU1RFTV9HREJJTklUX0RJUiA9IHN5 c3RlbS1nZGJpbml0CiBTWVNURU1fR0RCSU5JVF9JTlNUQUxMX0RJUiA9ICQo REVTVERJUikkKEdEQl9EQVRBRElSKS8kKFNZU1RFTV9HREJJTklUX0RJUikK IFNZU1RFTV9HREJJTklUX0ZJTEVTID0gXApAQCAtMTA5LDcgKzExNSw3IEBA IEZMQUdTX1RPX1BBU1MgPSBcCiAJIlJVTlRFU1RGTEFHUz0kKFJVTlRFU1RG TEFHUykiCiAKIC5QSE9OWTogYWxsCi1hbGw6IHN0YW1wLXN5c2NhbGxzIHN0 YW1wLXB5dGhvbiBzdGFtcC1zeXN0ZW0tZ2RiaW5pdAorYWxsOiBzdGFtcC1z eXNjYWxscyBzdGFtcC1weXRob24gc3RhbXAtc2NoZW1lIHN0YW1wLXN5c3Rl bS1nZGJpbml0CiAKICMgRm9yIHBvcnRhYmlsaXR5J3Mgc2FrZSwgd2UgbmVl ZCB0byBoYW5kbGUgc3lzdGVtcyB0aGF0IGRvbid0IGhhdmUKICMgc3ltYm9s aWMgbGlua3MuCkBAIC0xOTMsNiArMTk5LDQzIEBAIHVuaW5zdGFsbC1weXRo b246CiAJICBkb25lIFwKIAlkb25lCiAKK3N0YW1wLXNjaGVtZTogTWFrZWZp bGUgJChTQ0hFTUVfRklMRVMpCisJcm0gLXJmIC4vJChTQ0hFTUVfRElSKQor CWZpbGVzPSckKFNDSEVNRV9GSUxFUyknIDsgXAorCWZvciBmaWxlIGluICQk ZmlsZXMgOyBkbyBcCisJICBkaXI9YGVjaG8gIiQkZmlsZSIgfCBzZWQgJ3Ms L1teL10qJCQsLCdgIDsgXAorCSAgJChJTlNUQUxMX0RJUikgLi8kKFNDSEVN RV9ESVIpLyQkZGlyIDsgXAorCSAgJChJTlNUQUxMX0RBVEEpICQoU0NIRU1F X1NSQ0RJUikvJCRmaWxlIC4vJChTQ0hFTUVfRElSKS8kJGRpciA7IFwKKwlk b25lCisJdG91Y2ggJEAKKworLlBIT05ZOiBjbGVhbi1zY2hlbWUKK2NsZWFu LXNjaGVtZToKKwlybSAtcmYgJChTQ0hFTUVfRElSKQorCXJtIC1mIHN0YW1w LXNjaGVtZQorCisuUEhPTlk6IGluc3RhbGwtc2NoZW1lCitpbnN0YWxsLXNj aGVtZToKKwlmaWxlcz0nJChTQ0hFTUVfRklMRVMpJyA7IFwKKwlmb3IgZmls ZSBpbiAkJGZpbGVzIDsgZG8gXAorCSAgZGlyPWBlY2hvICIkJGZpbGUiIHwg c2VkICdzLC9bXi9dKiQkLCwnYCA7IFwKKwkgICQoSU5TVEFMTF9ESVIpICQo U0NIRU1FX0lOU1RBTExfRElSKS8kJGRpciA7IFwKKwkgICQoSU5TVEFMTF9E QVRBKSAuLyQoU0NIRU1FX0RJUikvJCRmaWxlICQoU0NIRU1FX0lOU1RBTExf RElSKS8kJGRpciA7IFwKKwlkb25lCisKKy5QSE9OWTogdW5pbnN0YWxsLXNj aGVtZQordW5pbnN0YWxsLXNjaGVtZToKKwlmaWxlcz0nJChTQ0hFTUVfRklM RVMpJyA7IFwKKwlmb3IgZmlsZSBpbiAkJGZpbGVzIDsgZG8gXAorCSAgc2xh c2hkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkICdzLC9bXi9dKiQkLCwnYCA7 IFwKKwkgIHJtIC1mICQoU0NIRU1FX0lOU1RBTExfRElSKS8kJGZpbGUgOyBc CisJICB3aGlsZSB0ZXN0ICJ4JCRmaWxlIiAhPSAieCQkc2xhc2hkaXIiIDsg ZG8gXAorCSAgICBybWRpciAyPi9kZXYvbnVsbCAiJChTQ0hFTUVfSU5TVEFM TF9ESVIpJCRzbGFzaGRpciIgOyBcCisJICAgIGZpbGU9IiQkc2xhc2hkaXIi IDsgXAorCSAgICBzbGFzaGRpcj1gZWNobyAiJCRmaWxlIiB8IHNlZCAncywv W14vXSokJCwsJ2AgOyBcCisJICBkb25lIFwKKwlkb25lCisKIHN0YW1wLXN5 c3RlbS1nZGJpbml0OiBNYWtlZmlsZSAkKFNZU1RFTV9HREJJTklUX0ZJTEVT KQogCXJtIC1yZiAuLyQoU1lTVEVNX0dEQklOSVRfRElSKQogCW1rZGlyIC4v JChTWVNURU1fR0RCSU5JVF9ESVIpCkBAIC0yNDQsMTMgKzI4NywxNSBAQCBp bnN0YWxsOiBhbGwKIAlAJChNQUtFKSAkKEZMQUdTX1RPX1BBU1MpIGluc3Rh bGwtb25seQogCiAuUEhPTlk6IGluc3RhbGwtb25seQotaW5zdGFsbC1vbmx5 OiBpbnN0YWxsLXN5c2NhbGxzIGluc3RhbGwtcHl0aG9uIGluc3RhbGwtc3lz dGVtLWdkYmluaXQKK2luc3RhbGwtb25seTogaW5zdGFsbC1zeXNjYWxscyBp bnN0YWxsLXB5dGhvbiBpbnN0YWxsLXNjaGVtZSBcCisJaW5zdGFsbC1zeXN0 ZW0tZ2RiaW5pdAogCiAuUEhPTlk6IHVuaW5zdGFsbAotdW5pbnN0YWxsOiB1 bmluc3RhbGwtc3lzY2FsbHMgdW5pbnN0YWxsLXB5dGhvbiB1bmluc3RhbGwt c3lzdGVtLWdkYmluaXQKK3VuaW5zdGFsbDogdW5pbnN0YWxsLXN5c2NhbGxz IHVuaW5zdGFsbC1weXRob24gdW5pbnN0YWxsLXNjaGVtZSBcCisJdW5pbnN0 YWxsLXN5c3RlbS1nZGJpbml0CiAKIC5QSE9OWTogY2xlYW4KLWNsZWFuOiBj bGVhbi1zeXNjYWxscyBjbGVhbi1weXRob24gY2xlYW4tc3lzdGVtLWdkYmlu aXQKK2NsZWFuOiBjbGVhbi1zeXNjYWxscyBjbGVhbi1weXRob24gY2xlYW4t c2NoZW1lIGNsZWFuLXN5c3RlbS1nZGJpbml0CiAKIC5QSE9OWTogbWFpbnRh aW5lci1jbGVhbiByZWFsY2xlYW4gZGlzdGNsZWFuCiBtYWludGFpbmVyLWNs ZWFuIHJlYWxjbGVhbiBkaXN0Y2xlYW46IGNsZWFuCkluZGV4OiBtaS9taS1j bWQtc3RhY2suYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv Y3ZzL3NyYy9zcmMvZ2RiL21pL21pLWNtZC1zdGFjay5jLHYKcmV0cmlldmlu ZyByZXZpc2lvbiAxLjc0CmRpZmYgLXUgLXAgLXIxLjc0IG1pLWNtZC1zdGFj ay5jCi0tLSBtaS9taS1jbWQtc3RhY2suYwk4IEF1ZyAyMDEzIDA1OjEwOjEw IC0wMDAwCTEuNzQKKysrIG1pL21pLWNtZC1zdGFjay5jCTYgU2VwIDIwMTMg MTU6MTc6MTMgLTAwMDAKQEAgLTE1MSw5ICsxNTEsOSBAQCBtaV9jbWRfc3Rh Y2tfbGlzdF9mcmFtZXMgKGNoYXIgKmNvbW1hbmQsCiAgICAgICBpZiAocHlf ZnJhbWVfbG93ID09IC0xKQogCXB5X2ZyYW1lX2xvdysrOwogCi0gICAgICBy ZXN1bHQgPSBhcHBseV9mcmFtZV9maWx0ZXIgKGdldF9jdXJyZW50X2ZyYW1l ICgpLCBmbGFncywKLQkJCQkgICBOT19WQUxVRVMsICBjdXJyZW50X3Vpb3V0 LAotCQkJCSAgIHB5X2ZyYW1lX2xvdywgZnJhbWVfaGlnaCk7CisgICAgICBy ZXN1bHQgPSBhcHBseV9zbGFuZ19mcmFtZV9maWx0ZXIgKGdldF9jdXJyZW50 X2ZyYW1lICgpLCBmbGFncywKKwkJCQkJIE5PX1ZBTFVFUywgIGN1cnJlbnRf dWlvdXQsCisJCQkJCSBweV9mcmFtZV9sb3csIGZyYW1lX2hpZ2gpOwogICAg IH0KIAogICAvKiBSdW4gdGhlIGluYnVpbHQgYmFja3RyYWNlIGlmIHRoZXJl IGFyZSBubyBmaWx0ZXJzIHJlZ2lzdGVyZWQsIG9yCkBAIC0yNTcsOCArMjU3 LDggQEAgbWlfY21kX3N0YWNrX2xpc3RfbG9jYWxzIChjaGFyICpjb21tYW5k LAogICAgICB7CiAgICAgICAgaW50IGZsYWdzID0gUFJJTlRfTEVWRUwgfCBQ UklOVF9MT0NBTFM7CiAKLSAgICAgICByZXN1bHQgPSBhcHBseV9mcmFtZV9m aWx0ZXIgKGZyYW1lLCBmbGFncywgcHJpbnRfdmFsdWUsCi0JCQkJICAgIGN1 cnJlbnRfdWlvdXQsIDAsIDApOworICAgICAgIHJlc3VsdCA9IGFwcGx5X3Ns YW5nX2ZyYW1lX2ZpbHRlciAoZnJhbWUsIGZsYWdzLCBwcmludF92YWx1ZSwK KwkJCQkJICBjdXJyZW50X3Vpb3V0LCAwLCAwKTsKICAgICAgfQogCiAgICAv KiBSdW4gdGhlIGluYnVpbHQgYmFja3RyYWNlIGlmIHRoZXJlIGFyZSBubyBm aWx0ZXJzIHJlZ2lzdGVyZWQsIG9yCkBAIC0zMzIsOSArMzMyLDkgQEAgbWlf Y21kX3N0YWNrX2xpc3RfYXJncyAoY2hhciAqY29tbWFuZCwgYwogICAgICAg aWYgKHB5X2ZyYW1lX2xvdyA9PSAtMSkKIAlweV9mcmFtZV9sb3crKzsKIAot ICAgICAgcmVzdWx0ID0gYXBwbHlfZnJhbWVfZmlsdGVyIChnZXRfY3VycmVu dF9mcmFtZSAoKSwgZmxhZ3MsCi0JCQkJICAgcHJpbnRfdmFsdWVzLCBjdXJy ZW50X3Vpb3V0LAotCQkJCSAgIHB5X2ZyYW1lX2xvdywgZnJhbWVfaGlnaCk7 CisgICAgICByZXN1bHQgPSBhcHBseV9zbGFuZ19mcmFtZV9maWx0ZXIgKGdl dF9jdXJyZW50X2ZyYW1lICgpLCBmbGFncywKKwkJCQkJIHByaW50X3ZhbHVl cywgY3VycmVudF91aW91dCwKKwkJCQkJIHB5X2ZyYW1lX2xvdywgZnJhbWVf aGlnaCk7CiAgICAgfQogCiAgICAgIC8qIFJ1biB0aGUgaW5idWlsdCBiYWNr dHJhY2UgaWYgdGhlcmUgYXJlIG5vIGZpbHRlcnMgcmVnaXN0ZXJlZCwgb3IK QEAgLTQxNiw4ICs0MTYsOCBAQCBtaV9jbWRfc3RhY2tfbGlzdF92YXJpYWJs ZXMgKGNoYXIgKmNvbW1hCiAgICAgIHsKICAgICAgICBpbnQgZmxhZ3MgPSBQ UklOVF9MRVZFTCB8IFBSSU5UX0FSR1MgfCBQUklOVF9MT0NBTFM7CiAKLSAg ICAgICByZXN1bHQgPSBhcHBseV9mcmFtZV9maWx0ZXIgKGZyYW1lLCBmbGFn cywgcHJpbnRfdmFsdWUsCi0JCQkJICAgIGN1cnJlbnRfdWlvdXQsIDAsIDAp OworICAgICAgIHJlc3VsdCA9IGFwcGx5X3NsYW5nX2ZyYW1lX2ZpbHRlciAo ZnJhbWUsIGZsYWdzLCBwcmludF92YWx1ZSwKKwkJCQkJICBjdXJyZW50X3Vp b3V0LCAwLCAwKTsKICAgICAgfQogCiAgICAvKiBSdW4gdGhlIGluYnVpbHQg YmFja3RyYWNlIGlmIHRoZXJlIGFyZSBubyBmaWx0ZXJzIHJlZ2lzdGVyZWQs IG9yCkluZGV4OiBtaS9taS1tYWluLmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9taS9taS1tYWluLmMsdgpy ZXRyaWV2aW5nIHJldmlzaW9uIDEuMjM4CmRpZmYgLXUgLXAgLXIxLjIzOCBt aS1tYWluLmMKLS0tIG1pL21pLW1haW4uYwkyNSBKdWwgMjAxMyAxMDozOToz OSAtMDAwMAkxLjIzOAorKysgbWkvbWktbWFpbi5jCTYgU2VwIDIwMTMgMTU6 MTc6MTMgLTAwMDAKQEAgLTUyLDkgKzUyLDcgQEAKICNpbmNsdWRlICJjdGYu aCIKICNpbmNsdWRlICJhZGEtbGFuZy5oIgogI2luY2x1ZGUgImxpbmVzcGVj LmgiCi0jaWZkZWYgSEFWRV9QWVRIT04KLSNpbmNsdWRlICJweXRob24vcHl0 aG9uLWludGVybmFsLmgiCi0jZW5kaWYKKyNpbmNsdWRlICJzY3JpcHRpbmcu aCIKIAogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8c3lzL3RpbWUu aD4KQEAgLTE3NjgsMTAgKzE3NjYsMTAgQEAgbWlfY21kX2xpc3RfZmVhdHVy ZXMgKGNoYXIgKmNvbW1hbmQsIGNoYQogICAgICAgdWlfb3V0X2ZpZWxkX3N0 cmluZyAodWlvdXQsIE5VTEwsICJicmVha3BvaW50LW5vdGlmaWNhdGlvbnMi KTsKICAgICAgIHVpX291dF9maWVsZF9zdHJpbmcgKHVpb3V0LCBOVUxMLCAi YWRhLXRhc2staW5mbyIpOwogICAgICAgCi0jaWYgSEFWRV9QWVRIT04KLSAg ICAgIGlmIChnZGJfcHl0aG9uX2luaXRpYWxpemVkKQorICAgICAgaWYgKHNs YW5nX3B5dGhvbl9pbml0aWFsaXplZCAoKSkKIAl1aV9vdXRfZmllbGRfc3Ry aW5nICh1aW91dCwgTlVMTCwgInB5dGhvbiIpOwotI2VuZGlmCisgICAgICBp ZiAoc2xhbmdfc2NoZW1lX2luaXRpYWxpemVkICgpKQorCXVpX291dF9maWVs ZF9zdHJpbmcgKHVpb3V0LCBOVUxMLCAic2NoZW1lIik7CiAgICAgICAKICAg ICAgIGRvX2NsZWFudXBzIChjbGVhbnVwKTsKICAgICAgIHJldHVybjsKSW5k ZXg6IHB5dGhvbi9weS1hdXRvLWxvYWQuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL3B5dGhvbi9weS1hdXRv LWxvYWQuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yOApkaWZmIC11IC1w IC1yMS4yOCBweS1hdXRvLWxvYWQuYwotLS0gcHl0aG9uL3B5LWF1dG8tbG9h ZC5jCTIwIE1heSAyMDEzIDIwOjI4OjUxIC0wMDAwCTEuMjgKKysrIHB5dGhv bi9weS1hdXRvLWxvYWQuYwk2IFNlcCAyMDEzIDE1OjE3OjEzIC0wMDAwCkBA IC0yMTgsNyArMjE4LDggQEAgYXV0b19sb2FkX3NlY3Rpb25fc2NyaXB0cyAo c3RydWN0IG9iamZpbAogICAgIH0KIH0KIAotLyogTG9hZCBhbnkgUHl0aG9u IGF1dG8tbG9hZGVkIHNjcmlwdHMgZm9yIE9CSkZJTEUuICAqLworLyogTG9h ZCBhbnkgUHl0aG9uIGF1dG8tbG9hZGVkIHNjcmlwdHMgZm9yIE9CSkZJTEUu CisgICBUaGlzIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGluIHRoaXMgZmls ZS4gICovCiAKIHZvaWQKIGdkYnB5X2xvYWRfYXV0b19zY3JpcHRzX2Zvcl9v YmpmaWxlIChzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSkKQEAgLTI4NSwxMSAr Mjg2LDQgQEAgUHJpbnQgdGhlIGxpc3Qgb2YgYXV0b21hdGljYWxseSBsb2Fk ZWQgUAogICByZXR1cm4gMDsKIH0KIAotI2Vsc2UgLyogISBIQVZFX1BZVEhP TiAqLwotCi12b2lkCi1nZGJweV9sb2FkX2F1dG9fc2NyaXB0c19mb3Jfb2Jq ZmlsZSAoc3RydWN0IG9iamZpbGUgKm9iamZpbGUpCi17Ci19Ci0KLSNlbmRp ZiAvKiAhIEhBVkVfUFlUSE9OICovCisjZW5kaWYgLyogSEFWRV9QWVRIT04g Ki8KSW5kZXg6IHB5dGhvbi9weS1icmVha3BvaW50LmMKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9weXRob24v cHktYnJlYWtwb2ludC5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQxCmRp ZmYgLXUgLXAgLXIxLjQxIHB5LWJyZWFrcG9pbnQuYwotLS0gcHl0aG9uL3B5 LWJyZWFrcG9pbnQuYwkzMCBNYXkgMjAxMyAxNzozMDowMyAtMDAwMAkxLjQx CisrKyBweXRob24vcHktYnJlYWtwb2ludC5jCTYgU2VwIDIwMTMgMTU6MTc6 MTMgLTAwMDAKQEAgLTM3LDcgKzM3LDcgQEAgc3RhdGljIGludCBicHB5X2xp dmU7CiAKIC8qIFZhcmlhYmxlcyB1c2VkIHRvIHBhc3MgaW5mb3JtYXRpb24g YmV0d2VlbiB0aGUgQnJlYWtwb2ludAogICAgY29uc3RydWN0b3IgYW5kIHRo ZSBicmVha3BvaW50LWNyZWF0ZWQgaG9vayBmdW5jdGlvbi4gICovCi1icmVh a3BvaW50X29iamVjdCAqYnBweV9wZW5kaW5nX29iamVjdDsKK2dkYnB5X2Jy ZWFrcG9pbnRfb2JqZWN0ICpicHB5X3BlbmRpbmdfb2JqZWN0OwogCiAvKiBG dW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIGEgUHl0aG9uIGNvbmRpdGlv biBpcyBldmFsdWF0ZWQuICAqLwogc3RhdGljIGNoYXIgKiBjb25zdCBzdG9w X2Z1bmMgPSAic3RvcCI7CkBAIC03Niw3ICs3Niw3IEBAIHN0YXRpYyBzdHJ1 Y3QgcHlicF9jb2RlIHB5YnBfd2F0Y2hfdHlwZXMKIHN0YXRpYyBQeU9iamVj dCAqCiBicHB5X2lzX3ZhbGlkIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3Qg KmFyZ3MpCiB7Ci0gIGJyZWFrcG9pbnRfb2JqZWN0ICpzZWxmX2JwID0gKGJy ZWFrcG9pbnRfb2JqZWN0ICopIHNlbGY7CisgIGdkYnB5X2JyZWFrcG9pbnRf b2JqZWN0ICpzZWxmX2JwID0gKGdkYnB5X2JyZWFrcG9pbnRfb2JqZWN0ICop IHNlbGY7CiAKICAgaWYgKHNlbGZfYnAtPmJwKQogICAgIFB5X1JFVFVSTl9U UlVFOwpAQCAtODcsNyArODcsNyBAQCBicHB5X2lzX3ZhbGlkIChQeU9iamVj dCAqc2VsZiwgUHlPYmplY3QgCiBzdGF0aWMgUHlPYmplY3QgKgogYnBweV9n ZXRfZW5hYmxlZCAoUHlPYmplY3QgKnNlbGYsIHZvaWQgKmNsb3N1cmUpCiB7 Ci0gIGJyZWFrcG9pbnRfb2JqZWN0ICpzZWxmX2JwID0gKGJyZWFrcG9pbnRf b2JqZWN0ICopIHNlbGY7CisgIGdkYnB5X2JyZWFrcG9pbnRfb2JqZWN0ICpz ZWxmX2JwID0gKGdkYnB5X2JyZWFrcG9pbnRfb2JqZWN0ICopIHNlbGY7CiAK ICAgQlBQWV9SRVFVSVJFX1ZBTElEIChzZWxmX2JwKTsKICAgaWYgKCEgc2Vs Zl9icC0+YnApCkBAIC0xMDEsNyArMTAxLDcgQEAgYnBweV9nZXRfZW5hYmxl ZCAoUHlPYmplY3QgKnNlbGYsIHZvaWQgKgogc3RhdGljIFB5T2JqZWN0ICoK IGJwcHlfZ2V0X3NpbGVudCAoUHlPYmplY3QgKnNlbGYsIHZvaWQgKmNsb3N1 cmUpCiB7Ci0gIGJyZWFrcG9pbnRfb2JqZWN0ICpzZWxmX2JwID0gKGJyZWFr cG9pbnRfb2JqZWN0ICopIHNlbGY7CisgIGdkYnB5X2JyZWFrcG9pbnRfb2Jq ZWN0ICpzZWxmX2JwID0gKGdkYnB5X2JyZWFrcG9pbnRfb2JqZWN0ICopIHNl bGY7CiAKICAgQlBQWV9SRVFVSVJFX1ZBTElEIChzZWxmX2JwKTsKICAgaWYg KHNlbGZfYnAtPmJwLT5zaWxlbnQpCkBAIC0xMTMsNyArMTEzLDcgQEAgYnBw eV9nZXRfc2lsZW50IChQeU9iamVjdCAqc2VsZiwgdm9pZCAqYwogc3RhdGlj IGludAogYnBweV9zZXRfZW5hYmxlZCAoUHlPYmplY3QgKnNlbGYsIFB5T2Jq ZWN0ICpuZXd2YWx1ZSwgdm9pZCAqY2xvc3VyZSkKIHsKLSAgYnJlYWtwb2lu dF9vYmplY3QgKnNlbGZfYnAgPSAoYnJlYWtwb2ludF9vYmplY3QgKikgc2Vs ZjsKKyAgZ2RicHlfYnJlYWtwb2ludF9vYmplY3QgKnNlbGZfYnAgPSAoZ2Ri cHlfYnJlYWtwb2ludF9vYmplY3QgKikgc2VsZjsKICAgaW50IGNtcDsKICAg dm9sYXRpbGUgc3RydWN0IGdkYl9leGNlcHRpb24gZXhjZXB0OwogCkBAIC0x NTMsNyArMTUzLDcgQEAgYnBweV9zZXRfZW5hYmxlZCAoUHlPYmplY3QgKnNl bGYsIFB5T2JqZQogc3RhdGljIGludAogYnBweV9zZXRfc2lsZW50IChQeU9i amVjdCAqc2VsZiwgUHlPYmplY3QgKm5ld3ZhbHVlLCB2b2lkICpjbG9zdXJl KQogewotICBicmVha3BvaW50X29iamVjdCAqc2VsZl9icCA9IChicmVha3Bv aW50X29iamVjdCAqKSBzZWxmOworICBnZGJweV9icmVha3BvaW50X29iamVj dCAqc2VsZl9icCA9IChnZGJweV9icmVha3BvaW50X29iamVjdCAqKSBzZWxm OwogICBpbnQgY21wOwogCiAgIEJQUFlfU0VUX1JFUVVJUkVfVkFMSUQgKHNl bGZfYnApOwpAQCAtMTg0LDcgKzE4NCw3IEBAIGJwcHlfc2V0X3NpbGVudCAo UHlPYmplY3QgKnNlbGYsIFB5T2JqZWMKIHN0YXRpYyBpbnQKIGJwcHlfc2V0 X3RocmVhZCAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpuZXd2YWx1ZSwg dm9pZCAqY2xvc3VyZSkKIHsKLSAgYnJlYWtwb2ludF9vYmplY3QgKnNlbGZf YnAgPSAoYnJlYWtwb2ludF9vYmplY3QgKikgc2VsZjsKKyAgZ2RicHlfYnJl YWtwb2ludF9vYmplY3QgKnNlbGZfYnAgPSAoZ2RicHlfYnJlYWtwb2ludF9v YmplY3QgKikgc2VsZjsKICAgbG9uZyBpZDsKIAogICBCUFBZX1NFVF9SRVFV SVJFX1ZBTElEIChzZWxmX2JwKTsKQEAgLTIyNSw3ICsyMjUsNyBAQCBicHB5 X3NldF90aHJlYWQgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjCiBzdGF0aWMg aW50CiBicHB5X3NldF90YXNrIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3Qg Km5ld3ZhbHVlLCB2b2lkICpjbG9zdXJlKQogewotICBicmVha3BvaW50X29i amVjdCAqc2VsZl9icCA9IChicmVha3BvaW50X29iamVjdCAqKSBzZWxmOwor ICBnZGJweV9icmVha3BvaW50X29iamVjdCAqc2VsZl9icCA9IChnZGJweV9i cmVha3BvaW50X29iamVjdCAqKSBzZWxmOwogICBsb25nIGlkOwogICBpbnQg dmFsaWRfaWQgPSAwOwogICB2b2xhdGlsZSBzdHJ1Y3QgZ2RiX2V4Y2VwdGlv biBleGNlcHQ7CkBAIC0yNzgsNyArMjc4LDcgQEAgYnBweV9zZXRfdGFzayAo UHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0IAogc3RhdGljIFB5T2JqZWN0ICoK IGJwcHlfZGVsZXRlX2JyZWFrcG9pbnQgKFB5T2JqZWN0ICpzZWxmLCBQeU9i amVjdCAqYXJncykKIHsKLSAgYnJlYWtwb2ludF9vYmplY3QgKnNlbGZfYnAg PSAoYnJlYWtwb2ludF9vYmplY3QgKikgc2VsZjsKKyAgZ2RicHlfYnJlYWtw b2ludF9vYmplY3QgKnNlbGZfYnAgPSAoZ2RicHlfYnJlYWtwb2ludF9vYmpl Y3QgKikgc2VsZjsKICAgdm9sYXRpbGUgc3RydWN0IGdkYl9leGNlcHRpb24g ZXhjZXB0OwogCiAgIEJQUFlfUkVRVUlSRV9WQUxJRCAoc2VsZl9icCk7CkBA IC0yOTcsNyArMjk3LDcgQEAgYnBweV9kZWxldGVfYnJlYWtwb2ludCAoUHlP YmplY3QgKnNlbGYsIAogc3RhdGljIGludAogYnBweV9zZXRfaWdub3JlX2Nv dW50IChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5ld3ZhbHVlLCB2b2lk ICpjbG9zdXJlKQogewotICBicmVha3BvaW50X29iamVjdCAqc2VsZl9icCA9 IChicmVha3BvaW50X29iamVjdCAqKSBzZWxmOworICBnZGJweV9icmVha3Bv aW50X29iamVjdCAqc2VsZl9icCA9IChnZGJweV9icmVha3BvaW50X29iamVj dCAqKSBzZWxmOwogICBsb25nIHZhbHVlOwogICB2b2xhdGlsZSBzdHJ1Y3Qg Z2RiX2V4Y2VwdGlvbiBleGNlcHQ7CiAKQEAgLTMzNSw3ICszMzUsNyBAQCBi cHB5X3NldF9pZ25vcmVfY291bnQgKFB5T2JqZWN0ICpzZWxmLCBQCiBzdGF0 aWMgaW50CiBicHB5X3NldF9oaXRfY291bnQgKFB5T2JqZWN0ICpzZWxmLCBQ eU9iamVjdCAqbmV3dmFsdWUsIHZvaWQgKmNsb3N1cmUpCiB7Ci0gIGJyZWFr cG9pbnRfb2JqZWN0ICpzZWxmX2JwID0gKGJyZWFrcG9pbnRfb2JqZWN0ICop IHNlbGY7CisgIGdkYnB5X2JyZWFrcG9pbnRfb2JqZWN0ICpzZWxmX2JwID0g KGdkYnB5X2JyZWFrcG9pbnRfb2JqZWN0ICopIHNlbGY7CiAKICAgQlBQWV9T RVRfUkVRVUlSRV9WQUxJRCAoc2VsZl9icCk7CiAKQEAgLTM3MCw3ICszNzAs NyBAQCBzdGF0aWMgUHlPYmplY3QgKgogYnBweV9nZXRfbG9jYXRpb24gKFB5 T2JqZWN0ICpzZWxmLCB2b2lkICpjbG9zdXJlKQogewogICBjaGFyICpzdHI7 Ci0gIGJyZWFrcG9pbnRfb2JqZWN0ICpvYmogPSAoYnJlYWtwb2ludF9vYmpl Y3QgKikgc2VsZjsKKyAgZ2RicHlfYnJlYWtwb2ludF9vYmplY3QgKm9iaiA9 IChnZGJweV9icmVha3BvaW50X29iamVjdCAqKSBzZWxmOwogCiAgIEJQUFlf UkVRVUlSRV9WQUxJRCAob2JqKTsKIApAQCAtMzg5LDcgKzM4OSw3IEBAIHN0 YXRpYyBQeU9iamVjdCAqCiBicHB5X2dldF9leHByZXNzaW9uIChQeU9iamVj dCAqc2VsZiwgdm9pZCAqY2xvc3VyZSkKIHsKICAgY2hhciAqc3RyOwotICBi cmVha3BvaW50X29iamVjdCAqb2JqID0gKGJyZWFrcG9pbnRfb2JqZWN0ICop IHNlbGY7CisgIGdkYnB5X2JyZWFrcG9pbnRfb2JqZWN0ICpvYmogPSAoZ2Ri cHlfYnJlYWtwb2ludF9vYmplY3QgKikgc2VsZjsKICAgc3RydWN0IHdhdGNo cG9pbnQgKndwOwogCiAgIEJQUFlfUkVRVUlSRV9WQUxJRCAob2JqKTsKQEAg LTQxMSw3ICs0MTEsNyBAQCBzdGF0aWMgUHlPYmplY3QgKgogYnBweV9nZXRf Y29uZGl0aW9uIChQeU9iamVjdCAqc2VsZiwgdm9pZCAqY2xvc3VyZSkKIHsK ICAgY2hhciAqc3RyOwotICBicmVha3BvaW50X29iamVjdCAqb2JqID0gKGJy ZWFrcG9pbnRfb2JqZWN0ICopIHNlbGY7CisgIGdkYnB5X2JyZWFrcG9pbnRf b2JqZWN0ICpvYmogPSAoZ2RicHlfYnJlYWtwb2ludF9vYmplY3QgKikgc2Vs ZjsKIAogICBCUFBZX1JFUVVJUkVfVkFMSUQgKG9iaik7CiAKQEAgLTQyOSw3 ICs0MjksNyBAQCBzdGF0aWMgaW50CiBicHB5X3NldF9jb25kaXRpb24gKFB5 T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbmV3dmFsdWUsIHZvaWQgKmNsb3N1 cmUpCiB7CiAgIGNoYXIgKmV4cDsKLSAgYnJlYWtwb2ludF9vYmplY3QgKnNl bGZfYnAgPSAoYnJlYWtwb2ludF9vYmplY3QgKikgc2VsZjsKKyAgZ2RicHlf YnJlYWtwb2ludF9vYmplY3QgKnNlbGZfYnAgPSAoZ2RicHlfYnJlYWtwb2lu dF9vYmplY3QgKikgc2VsZjsKICAgdm9sYXRpbGUgc3RydWN0IGdkYl9leGNl cHRpb24gZXhjZXB0OwogCiAgIEJQUFlfU0VUX1JFUVVJUkVfVkFMSUQgKHNl bGZfYnApOwpAQCAtNDY2LDcgKzQ2Niw3IEBAIGJwcHlfc2V0X2NvbmRpdGlv biAoUHlPYmplY3QgKnNlbGYsIFB5T2IKIHN0YXRpYyBQeU9iamVjdCAqCiBi cHB5X2dldF9jb21tYW5kcyAoUHlPYmplY3QgKnNlbGYsIHZvaWQgKmNsb3N1 cmUpCiB7Ci0gIGJyZWFrcG9pbnRfb2JqZWN0ICpzZWxmX2JwID0gKGJyZWFr cG9pbnRfb2JqZWN0ICopIHNlbGY7CisgIGdkYnB5X2JyZWFrcG9pbnRfb2Jq ZWN0ICpzZWxmX2JwID0gKGdkYnB5X2JyZWFrcG9pbnRfb2JqZWN0ICopIHNl bGY7CiAgIHN0cnVjdCBicmVha3BvaW50ICpicCA9IHNlbGZfYnAtPmJwOwog ICBsb25nIGxlbmd0aDsKICAgdm9sYXRpbGUgc3RydWN0IGdkYl9leGNlcHRp b24gZXhjZXB0OwpAQCAtNTA3LDcgKzUwNyw3IEBAIGJwcHlfZ2V0X2NvbW1h bmRzIChQeU9iamVjdCAqc2VsZiwgdm9pZCAKIHN0YXRpYyBQeU9iamVjdCAq CiBicHB5X2dldF90eXBlIChQeU9iamVjdCAqc2VsZiwgdm9pZCAqY2xvc3Vy ZSkKIHsKLSAgYnJlYWtwb2ludF9vYmplY3QgKnNlbGZfYnAgPSAoYnJlYWtw b2ludF9vYmplY3QgKikgc2VsZjsKKyAgZ2RicHlfYnJlYWtwb2ludF9vYmpl Y3QgKnNlbGZfYnAgPSAoZ2RicHlfYnJlYWtwb2ludF9vYmplY3QgKikgc2Vs ZjsKIAogICBCUFBZX1JFUVVJUkVfVkFMSUQgKHNlbGZfYnApOwogCkBAIC01 MTksNyArNTE5LDcgQEAgYnBweV9nZXRfdHlwZSAoUHlPYmplY3QgKnNlbGYs IHZvaWQgKmNsbwogc3RhdGljIFB5T2JqZWN0ICoKIGJwcHlfZ2V0X3Zpc2li aWxpdHkgKFB5T2JqZWN0ICpzZWxmLCB2b2lkICpjbG9zdXJlKQogewotICBi cmVha3BvaW50X29iamVjdCAqc2VsZl9icCA9IChicmVha3BvaW50X29iamVj dCAqKSBzZWxmOworICBnZGJweV9icmVha3BvaW50X29iamVjdCAqc2VsZl9i cCA9IChnZGJweV9icmVha3BvaW50X29iamVjdCAqKSBzZWxmOwogCiAgIEJQ UFlfUkVRVUlSRV9WQUxJRCAoc2VsZl9icCk7CiAKQEAgLTUzMyw3ICs1MzMs NyBAQCBicHB5X2dldF92aXNpYmlsaXR5IChQeU9iamVjdCAqc2VsZiwgdm9p CiBzdGF0aWMgUHlPYmplY3QgKgogYnBweV9nZXRfbnVtYmVyIChQeU9iamVj dCAqc2VsZiwgdm9pZCAqY2xvc3VyZSkKIHsKLSAgYnJlYWtwb2ludF9vYmpl Y3QgKnNlbGZfYnAgPSAoYnJlYWtwb2ludF9vYmplY3QgKikgc2VsZjsKKyAg Z2RicHlfYnJlYWtwb2ludF9vYmplY3QgKnNlbGZfYnAgPSAoZ2RicHlfYnJl YWtwb2ludF9vYmplY3QgKikgc2VsZjsKIAogICBCUFBZX1JFUVVJUkVfVkFM SUQgKHNlbGZfYnApOwogCkBAIC01NDQsNyArNTQ0LDcgQEAgYnBweV9nZXRf bnVtYmVyIChQeU9iamVjdCAqc2VsZiwgdm9pZCAqYwogc3RhdGljIFB5T2Jq ZWN0ICoKIGJwcHlfZ2V0X3RocmVhZCAoUHlPYmplY3QgKnNlbGYsIHZvaWQg KmNsb3N1cmUpCiB7Ci0gIGJyZWFrcG9pbnRfb2JqZWN0ICpzZWxmX2JwID0g KGJyZWFrcG9pbnRfb2JqZWN0ICopIHNlbGY7CisgIGdkYnB5X2JyZWFrcG9p bnRfb2JqZWN0ICpzZWxmX2JwID0gKGdkYnB5X2JyZWFrcG9pbnRfb2JqZWN0 ICopIHNlbGY7CiAKICAgQlBQWV9SRVFVSVJFX1ZBTElEIChzZWxmX2JwKTsK IApAQCAtNTU4LDcgKzU1OCw3IEBAIGJwcHlfZ2V0X3RocmVhZCAoUHlPYmpl Y3QgKnNlbGYsIHZvaWQgKmMKIHN0YXRpYyBQeU9iamVjdCAqCiBicHB5X2dl dF90YXNrIChQeU9iamVjdCAqc2VsZiwgdm9pZCAqY2xvc3VyZSkKIHsKLSAg YnJlYWtwb2ludF9vYmplY3QgKnNlbGZfYnAgPSAoYnJlYWtwb2ludF9vYmpl Y3QgKikgc2VsZjsKKyAgZ2RicHlfYnJlYWtwb2ludF9vYmplY3QgKnNlbGZf YnAgPSAoZ2RicHlfYnJlYWtwb2ludF9vYmplY3QgKikgc2VsZjsKIAogICBC UFBZX1JFUVVJUkVfVkFMSUQgKHNlbGZfYnApOwogCkBAIC01NzIsNyArNTcy LDcgQEAgYnBweV9nZXRfdGFzayAoUHlPYmplY3QgKnNlbGYsIHZvaWQgKmNs bwogc3RhdGljIFB5T2JqZWN0ICoKIGJwcHlfZ2V0X2hpdF9jb3VudCAoUHlP YmplY3QgKnNlbGYsIHZvaWQgKmNsb3N1cmUpCiB7Ci0gIGJyZWFrcG9pbnRf b2JqZWN0ICpzZWxmX2JwID0gKGJyZWFrcG9pbnRfb2JqZWN0ICopIHNlbGY7 CisgIGdkYnB5X2JyZWFrcG9pbnRfb2JqZWN0ICpzZWxmX2JwID0gKGdkYnB5 X2JyZWFrcG9pbnRfb2JqZWN0ICopIHNlbGY7CiAKICAgQlBQWV9SRVFVSVJF X1ZBTElEIChzZWxmX2JwKTsKIApAQCAtNTgzLDcgKzU4Myw3IEBAIGJwcHlf Z2V0X2hpdF9jb3VudCAoUHlPYmplY3QgKnNlbGYsIHZvaWQKIHN0YXRpYyBQ eU9iamVjdCAqCiBicHB5X2dldF9pZ25vcmVfY291bnQgKFB5T2JqZWN0ICpz ZWxmLCB2b2lkICpjbG9zdXJlKQogewotICBicmVha3BvaW50X29iamVjdCAq c2VsZl9icCA9IChicmVha3BvaW50X29iamVjdCAqKSBzZWxmOworICBnZGJw eV9icmVha3BvaW50X29iamVjdCAqc2VsZl9icCA9IChnZGJweV9icmVha3Bv aW50X29iamVjdCAqKSBzZWxmOwogCiAgIEJQUFlfUkVRVUlSRV9WQUxJRCAo c2VsZl9icCk7CiAKQEAgLTYxMyw3ICs2MTMsNyBAQCBicHB5X2luaXQgKFB5 T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJnCiAJcmV0dXJuIC0xOwogICAg IH0KIAotICBicHB5X3BlbmRpbmdfb2JqZWN0ID0gKGJyZWFrcG9pbnRfb2Jq ZWN0ICopIHNlbGY7CisgIGJwcHlfcGVuZGluZ19vYmplY3QgPSAoZ2RicHlf YnJlYWtwb2ludF9vYmplY3QgKikgc2VsZjsKICAgYnBweV9wZW5kaW5nX29i amVjdC0+bnVtYmVyID0gLTE7CiAgIGJwcHlfcGVuZGluZ19vYmplY3QtPmJw ID0gTlVMTDsKICAgCkBAIC02NjIsNyArNjYyLDcgQEAgYnBweV9pbml0IChQ eU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZwogICAgICAgcmV0dXJuIC0x OwogICAgIH0KIAotICBCUFBZX1NFVF9SRVFVSVJFX1ZBTElEICgoYnJlYWtw b2ludF9vYmplY3QgKikgc2VsZik7CisgIEJQUFlfU0VUX1JFUVVJUkVfVkFM SUQgKChnZGJweV9icmVha3BvaW50X29iamVjdCAqKSBzZWxmKTsKICAgcmV0 dXJuIDA7CiB9CiAKQEAgLTcyMCwxNyArNzIwLDI0IEBAIGdkYnB5X2JyZWFr cG9pbnRzIChQeU9iamVjdCAqc2VsZiwgUHlPYmoKIC8qIENhbGwgdGhlICJz dG9wIiBtZXRob2QgKGlmIGltcGxlbWVudGVkKSBpbiB0aGUgYnJlYWtwb2lu dAogICAgY2xhc3MuICBJZiB0aGUgbWV0aG9kIHJldHVybnMgVHJ1ZSwgdGhl IGluZmVyaW9yICB3aWxsIGJlCiAgICBzdG9wcGVkIGF0IHRoZSBicmVha3Bv aW50LiAgT3RoZXJ3aXNlIHRoZSBpbmZlcmlvciB3aWxsIGJlCi0gICBhbGxv d2VkIHRvIGNvbnRpbnVlLiAgKi8KKyAgIGFsbG93ZWQgdG8gY29udGludWUg KGFzc3VtaW5nIG90aGVyIHNjcmlwdGluZyBsYW5ndWFnZSBjb25kaXRpb25z CisgICBkb24ndCBmaXJlKS4gICovCiAKIGludAotZ2RicHlfc2hvdWxkX3N0 b3AgKHN0cnVjdCBicmVha3BvaW50X29iamVjdCAqYnBfb2JqKQorZ2RicHlf YnJlYWtwb2ludF9jb25kX3NheXNfc3RvcCAoc3RydWN0IGJyZWFrcG9pbnQg KmIpCiB7Ci0gIGludCBzdG9wID0gMTsKLQorICBpbnQgc3RvcDsKKyAgc3Ry dWN0IGdkYnB5X2JyZWFrcG9pbnRfb2JqZWN0ICpicF9vYmogPSBiLT5weV9i cF9vYmplY3Q7CiAgIFB5T2JqZWN0ICpweV9icCA9IChQeU9iamVjdCAqKSBi cF9vYmo7Ci0gIHN0cnVjdCBicmVha3BvaW50ICpiID0gYnBfb2JqLT5icDsK LSAgc3RydWN0IGdkYmFyY2ggKmdhcmNoID0gYi0+Z2RiYXJjaCA/IGItPmdk YmFyY2ggOiBnZXRfY3VycmVudF9hcmNoICgpOwotICBzdHJ1Y3QgY2xlYW51 cCAqY2xlYW51cCA9IGVuc3VyZV9weXRob25fZW52IChnYXJjaCwgY3VycmVu dF9sYW5ndWFnZSk7CisgIHN0cnVjdCBnZGJhcmNoICpnYXJjaDsKKyAgc3Ry dWN0IGNsZWFudXAgKmNsZWFudXA7CisKKyAgaWYgKGJwX29iaiA9PSBOVUxM KQorICAgIHJldHVybiAwOworCisgIHN0b3AgPSAxOworICBnYXJjaCA9IGIt PmdkYmFyY2ggPyBiLT5nZGJhcmNoIDogZ2V0X2N1cnJlbnRfYXJjaCAoKTsK KyAgY2xlYW51cCA9IGVuc3VyZV9weXRob25fZW52IChnYXJjaCwgY3VycmVu dF9sYW5ndWFnZSk7CiAKICAgaWYgKGJwX29iai0+aXNfZmluaXNoX2JwKQog ICAgIGJwZmluaXNocHlfcHJlX3N0b3BfaG9vayAoYnBfb2JqKTsKQEAgLTc2 NSwyMiArNzcyLDIzIEBAIGdkYnB5X3Nob3VsZF9zdG9wIChzdHJ1Y3QgYnJl YWtwb2ludF9vYmoKICAgcmV0dXJuIHN0b3A7CiB9CiAKLS8qIENoZWNrcyBp ZiB0aGUgICJzdG9wIiBtZXRob2QgZXhpc3RzIGluIHRoaXMgYnJlYWtwb2lu dC4KLSAgIFVzZWQgYnkgY29uZGl0aW9uX2NvbW1hbmQgdG8gZW5zdXJlIG11 dHVhbCBleGNsdXNpb24gb2YgYnJlYWtwb2ludAotICAgY29uZGl0aW9ucy4g ICovCisvKiBSZXR1cm4gVFJVRSBpZiB0aGUgInN0b3AiIG1ldGhvZCBleGlz dHMgaW4gdGhpcyBicmVha3BvaW50LiAgKi8KIAogaW50Ci1nZGJweV9icmVh a3BvaW50X2hhc19weV9jb25kIChzdHJ1Y3QgYnJlYWtwb2ludF9vYmplY3Qg KmJwX29iaikKK2dkYnB5X2JyZWFrcG9pbnRfaGFzX2NvbmQgKHN0cnVjdCBi cmVha3BvaW50ICpiKQogewotICBpbnQgaGFzX2Z1bmMgPSAwOwotICBQeU9i amVjdCAqcHlfYnAgPSAoUHlPYmplY3QgKikgYnBfb2JqOwotICBzdHJ1Y3Qg Z2RiYXJjaCAqZ2FyY2ggPSBicF9vYmotPmJwLT5nZGJhcmNoID8gYnBfb2Jq LT5icC0+Z2RiYXJjaCA6Ci0gICAgZ2V0X2N1cnJlbnRfYXJjaCAoKTsKLSAg c3RydWN0IGNsZWFudXAgKmNsZWFudXAgPSBlbnN1cmVfcHl0aG9uX2VudiAo Z2FyY2gsIGN1cnJlbnRfbGFuZ3VhZ2UpOwotICAKLSAgaWYgKHB5X2JwICE9 IE5VTEwpCi0gICAgaGFzX2Z1bmMgPSBQeU9iamVjdF9IYXNBdHRyU3RyaW5n IChweV9icCwgc3RvcF9mdW5jKTsKLQorICBpbnQgaGFzX2Z1bmM7CisgIFB5 T2JqZWN0ICpweV9icDsKKyAgc3RydWN0IGdkYmFyY2ggKmdhcmNoOworICBz dHJ1Y3QgY2xlYW51cCAqY2xlYW51cDsKKworICBpZiAoYi0+cHlfYnBfb2Jq ZWN0ID09IE5VTEwpCisgICAgcmV0dXJuIDA7CisKKyAgcHlfYnAgPSAoUHlP YmplY3QgKikgYi0+cHlfYnBfb2JqZWN0OworICBnYXJjaCA9IGItPmdkYmFy Y2ggPyBiLT5nZGJhcmNoIDogZ2V0X2N1cnJlbnRfYXJjaCAoKTsKKyAgY2xl YW51cCA9IGVuc3VyZV9weXRob25fZW52IChnYXJjaCwgY3VycmVudF9sYW5n dWFnZSk7CisgIGhhc19mdW5jID0gUHlPYmplY3RfSGFzQXR0clN0cmluZyAo cHlfYnAsIHN0b3BfZnVuYyk7CiAgIGRvX2NsZWFudXBzIChjbGVhbnVwKTsK IAogICByZXR1cm4gaGFzX2Z1bmM7CkBAIC03OTUsNyArODAzLDcgQEAgZ2Ri cHlfYnJlYWtwb2ludF9oYXNfcHlfY29uZCAoc3RydWN0IGJyZQogc3RhdGlj IHZvaWQKIGdkYnB5X2JyZWFrcG9pbnRfY3JlYXRlZCAoc3RydWN0IGJyZWFr cG9pbnQgKmJwKQogewotICBicmVha3BvaW50X29iamVjdCAqbmV3YnA7Cisg IGdkYnB5X2JyZWFrcG9pbnRfb2JqZWN0ICpuZXdicDsKICAgUHlHSUxTdGF0 ZV9TVEFURSBzdGF0ZTsKIAogICBpZiAoYnAtPm51bWJlciA8IDAgJiYgYnBw eV9wZW5kaW5nX29iamVjdCA9PSBOVUxMKQpAQCAtODE2LDcgKzgyNCw3IEBA IGdkYnB5X2JyZWFrcG9pbnRfY3JlYXRlZCAoc3RydWN0IGJyZWFrcG8KICAg ICAgIGJwcHlfcGVuZGluZ19vYmplY3QgPSBOVUxMOwogICAgIH0KICAgZWxz ZQotICAgIG5ld2JwID0gUHlPYmplY3RfTmV3IChicmVha3BvaW50X29iamVj dCwgJmJyZWFrcG9pbnRfb2JqZWN0X3R5cGUpOworICAgIG5ld2JwID0gUHlP YmplY3RfTmV3IChnZGJweV9icmVha3BvaW50X29iamVjdCwgJmJyZWFrcG9p bnRfb2JqZWN0X3R5cGUpOwogICBpZiAobmV3YnApCiAgICAgewogICAgICAg bmV3YnAtPm51bWJlciA9IGJwLT5udW1iZXI7CkBAIC04NDQsNyArODUyLDcg QEAgZ2RicHlfYnJlYWtwb2ludF9kZWxldGVkIChzdHJ1Y3QgYnJlYWtwbwog ICBpbnQgbnVtID0gYi0+bnVtYmVyOwogICBQeUdJTFN0YXRlX1NUQVRFIHN0 YXRlOwogICBzdHJ1Y3QgYnJlYWtwb2ludCAqYnAgPSBOVUxMOwotICBicmVh a3BvaW50X29iamVjdCAqYnBfb2JqOworICBnZGJweV9icmVha3BvaW50X29i amVjdCAqYnBfb2JqOwogCiAgIHN0YXRlID0gUHlHSUxTdGF0ZV9FbnN1cmUg KCk7CiAgIGJwID0gZ2V0X2JyZWFrcG9pbnQgKG51bSk7CkBAIC05MDUsMzcg KzkxMyw2IEBAIGdkYnB5X2luaXRpYWxpemVfYnJlYWtwb2ludHMgKHZvaWQp CiAKIAwKIAotLyogSGVscGVyIGZ1bmN0aW9uIHRoYXQgb3ZlcnJpZGVzIHRo aXMgUHl0aG9uIG9iamVjdCdzCi0gICBQeU9iamVjdF9HZW5lcmljU2V0QXR0 ciB0byBhbGxvdyBleHRyYSB2YWxpZGF0aW9uIG9mIHRoZSBhdHRyaWJ1dGUK LSAgIGJlaW5nIHNldC4gICovCi0KLXN0YXRpYyBpbnQgCi1sb2NhbF9zZXRh dHRybyAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpuYW1lLCBQeU9iamVj dCAqdikKLXsKLSAgYnJlYWtwb2ludF9vYmplY3QgKm9iaiA9IChicmVha3Bv aW50X29iamVjdCAqKSBzZWxmOyAgCi0gIGNoYXIgKmF0dHIgPSBweXRob25f c3RyaW5nX3RvX2hvc3Rfc3RyaW5nIChuYW1lKTsKLSAgCi0gIGlmIChhdHRy ID09IE5VTEwpCi0gICAgcmV0dXJuIC0xOwotICAKLSAgLyogSWYgdGhlIGF0 dHJpYnV0ZSB0cnlpbmcgdG8gYmUgc2V0IGlzIHRoZSAic3RvcCIgbWV0aG9k LAotICAgICBidXQgd2UgYWxyZWFkeSBoYXZlIGEgY29uZGl0aW9uIHNldCBp biB0aGUgQ0xJLCBkaXNhbGxvdyB0aGlzCi0gICAgIG9wZXJhdGlvbi4gICov Ci0gIGlmIChzdHJjbXAgKGF0dHIsIHN0b3BfZnVuYykgPT0gMCAmJiBvYmot PmJwLT5jb25kX3N0cmluZykKLSAgICB7Ci0gICAgICB4ZnJlZSAoYXR0cik7 Ci0gICAgICBQeUVycl9TZXRTdHJpbmcgKFB5RXhjX1J1bnRpbWVFcnJvciwg Ci0JCSAgICAgICBfKCJDYW5ub3Qgc2V0ICdzdG9wJyBtZXRob2QuICBUaGVy ZSBpcyBhbiAiIFwKLQkJCSAiZXhpc3RpbmcgR0RCIGNvbmRpdGlvbiBhdHRh Y2hlZCB0byB0aGUgIiBcCi0JCQkgImJyZWFrcG9pbnQuIikpOwotICAgICAg cmV0dXJuIC0xOwotICAgIH0KLSAgCi0gIHhmcmVlIChhdHRyKTsKLSAgCi0g IHJldHVybiBQeU9iamVjdF9HZW5lcmljU2V0QXR0ciAoKFB5T2JqZWN0ICop c2VsZiwgbmFtZSwgdik7ICAKLX0KLQogc3RhdGljIFB5R2V0U2V0RGVmIGJy ZWFrcG9pbnRfb2JqZWN0X2dldHNldFtdID0gewogICB7ICJlbmFibGVkIiwg YnBweV9nZXRfZW5hYmxlZCwgYnBweV9zZXRfZW5hYmxlZCwKICAgICAiQm9v bGVhbiB0ZWxsaW5nIHdoZXRoZXIgdGhlIGJyZWFrcG9pbnQgaXMgZW5hYmxl ZC4iLCBOVUxMIH0sCkBAIC05ODksNyArOTY2LDcgQEAgUHlUeXBlT2JqZWN0 IGJyZWFrcG9pbnRfb2JqZWN0X3R5cGUgPQogewogICBQeVZhck9iamVjdF9I RUFEX0lOSVQgKE5VTEwsIDApCiAgICJnZGIuQnJlYWtwb2ludCIsCQkgIC8q dHBfbmFtZSovCi0gIHNpemVvZiAoYnJlYWtwb2ludF9vYmplY3QpLAkgIC8q dHBfYmFzaWNzaXplKi8KKyAgc2l6ZW9mIChnZGJweV9icmVha3BvaW50X29i amVjdCksIC8qdHBfYmFzaWNzaXplKi8KICAgMCwJCQkJICAvKnRwX2l0ZW1z aXplKi8KICAgMCwJCQkJICAvKnRwX2RlYWxsb2MqLwogICAwLAkJCQkgIC8q dHBfcHJpbnQqLwpAQCAtMTAwNCw3ICs5ODEsNyBAQCBQeVR5cGVPYmplY3Qg YnJlYWtwb2ludF9vYmplY3RfdHlwZSA9CiAgIDAsCQkJCSAgLyp0cF9jYWxs Ki8KICAgMCwJCQkJICAvKnRwX3N0ciovCiAgIDAsCQkJCSAgLyp0cF9nZXRh dHRybyovCi0gIChzZXRhdHRyb2Z1bmMpbG9jYWxfc2V0YXR0cm8sICAgLyp0 cF9zZXRhdHRybyAqLworICAwLAkJCQkgIC8qdHBfc2V0YXR0cm8gKi8KICAg MCwJCQkJICAvKnRwX2FzX2J1ZmZlciovCiAgIFB5X1RQRkxBR1NfREVGQVVM VCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsICAvKnRwX2ZsYWdzKi8KICAgIkdE QiBicmVha3BvaW50IG9iamVjdCIsCSAgLyogdHBfZG9jICovCkluZGV4OiBw eXRob24vcHktZmluaXNoYnJlYWtwb2ludC5jCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvcHl0aG9uL3B5LWZp bmlzaGJyZWFrcG9pbnQuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNgpk aWZmIC11IC1wIC1yMS4xNiBweS1maW5pc2hicmVha3BvaW50LmMKLS0tIHB5 dGhvbi9weS1maW5pc2hicmVha3BvaW50LmMJMjAgTWF5IDIwMTMgMjA6MzY6 MTggLTAwMDAJMS4xNgorKysgcHl0aG9uL3B5LWZpbmlzaGJyZWFrcG9pbnQu Ywk2IFNlcCAyMDEzIDE1OjE3OjEzIC0wMDAwCkBAIC0zOSw3ICszOSw3IEBA IHN0YXRpYyBjaGFyICogY29uc3Qgb3V0b2ZzY29wZV9mdW5jID0gIm8KIHN0 cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3QKIHsKICAgLyogZ2RiLkJy ZWFrcG9pbnQgYmFzZSBjbGFzcy4gICovCi0gIGJyZWFrcG9pbnRfb2JqZWN0 IHB5X2JwOworICBnZGJweV9icmVha3BvaW50X29iamVjdCBweV9icDsKICAg LyogZ2RiLlR5cGUgb2JqZWN0IG9mIHRoZSB2YWx1ZSByZXR1cm4gYnkgdGhl IGJyZWFrcG9pbnRlZCBmdW5jdGlvbi4KICAgICAgTWF5IGJlIE5VTEwgaWYg bm8gZGVidWcgaW5mb3JtYXRpb24gd2FzIGF2YWlsYWJsZSBvciByZXR1cm4g dHlwZQogICAgICB3YXMgVk9JRC4gICovCkBAIC05MCw3ICs5MCw3IEBAIGJw ZmluaXNocHlfZGVhbGxvYyAoUHlPYmplY3QgKnNlbGYpCiAgICBgcmV0dXJu X3ZhbHVlJywgaWYgcG9zc2libGUuICAqLwogCiB2b2lkCi1icGZpbmlzaHB5 X3ByZV9zdG9wX2hvb2sgKHN0cnVjdCBicmVha3BvaW50X29iamVjdCAqYnBf b2JqKQorYnBmaW5pc2hweV9wcmVfc3RvcF9ob29rIChzdHJ1Y3QgZ2RicHlf YnJlYWtwb2ludF9vYmplY3QgKmJwX29iaikKIHsKICAgc3RydWN0IGZpbmlz aF9icmVha3BvaW50X29iamVjdCAqc2VsZl9maW5pc2hicCA9CiAgICAgICAg IChzdHJ1Y3QgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0ICopIGJwX29iajsK QEAgLTEzMyw3ICsxMzMsNyBAQCBicGZpbmlzaHB5X3ByZV9zdG9wX2hvb2sg KHN0cnVjdCBicmVha3BvCiAgICBvZiB0aGUgZ2RiLkZpbmlzaEJyZWFrcG9p bnQgb2JqZWN0IEJQX09CSi4gICovCiAKIHZvaWQKLWJwZmluaXNocHlfcG9z dF9zdG9wX2hvb2sgKHN0cnVjdCBicmVha3BvaW50X29iamVjdCAqYnBfb2Jq KQorYnBmaW5pc2hweV9wb3N0X3N0b3BfaG9vayAoc3RydWN0IGdkYnB5X2Jy ZWFrcG9pbnRfb2JqZWN0ICpicF9vYmopCiB7CiAgIHZvbGF0aWxlIHN0cnVj dCBnZGJfZXhjZXB0aW9uIGV4Y2VwdDsKIApAQCAtMzIwLDcgKzMyMCw3IEBA IGJwZmluaXNocHlfaW5pdCAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWMKIHN0 YXRpYyB2b2lkCiBicGZpbmlzaHB5X291dF9vZl9zY29wZSAoc3RydWN0IGZp bmlzaF9icmVha3BvaW50X29iamVjdCAqYnBmaW5pc2hfb2JqKQogewotICBi cmVha3BvaW50X29iamVjdCAqYnBfb2JqID0gKGJyZWFrcG9pbnRfb2JqZWN0 ICopIGJwZmluaXNoX29iajsKKyAgZ2RicHlfYnJlYWtwb2ludF9vYmplY3Qg KmJwX29iaiA9IChnZGJweV9icmVha3BvaW50X29iamVjdCAqKSBicGZpbmlz aF9vYmo7CiAgIFB5T2JqZWN0ICpweV9vYmogPSAoUHlPYmplY3QgKikgYnBf b2JqOwogCiAgIGlmIChicGZpbmlzaF9vYmotPnB5X2JwLmJwLT5lbmFibGVf c3RhdGUgPT0gYnBfZW5hYmxlZApJbmRleDogcHl0aG9uL3B5LWZyYW1lZmls dGVyLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9z cmMvc3JjL2dkYi9weXRob24vcHktZnJhbWVmaWx0ZXIuYyx2CnJldHJpZXZp bmcgcmV2aXNpb24gMS4xCmRpZmYgLXUgLXAgLXIxLjEgcHktZnJhbWVmaWx0 ZXIuYwotLS0gcHl0aG9uL3B5LWZyYW1lZmlsdGVyLmMJMTAgTWF5IDIwMTMg MTA6MjY6MDIgLTAwMDAJMS4xCisrKyBweXRob24vcHktZnJhbWVmaWx0ZXIu Ywk2IFNlcCAyMDEzIDE1OjE3OjEzIC0wMDAwCkBAIC0xNDU0LDExICsxNDU0 LDkgQEAgYm9vdHN0cmFwX3B5dGhvbl9mcmFtZV9maWx0ZXJzIChzdHJ1Y3Qg ZgogICAgIG9yIFBZX0JUX0NPTVBMRVRFRCBvbiBzdWNjZXNzLiovCiAKIGVu dW0gcHlfYnRfc3RhdHVzCi1hcHBseV9mcmFtZV9maWx0ZXIgKHN0cnVjdCBm cmFtZV9pbmZvICpmcmFtZSwgaW50IGZsYWdzLAotCQkgICAgZW51bSBweV9m cmFtZV9hcmdzIGFyZ3NfdHlwZSwKLQkJICAgIHN0cnVjdCB1aV9vdXQgKm91 dCwgaW50IGZyYW1lX2xvdywKLQkJICAgIGludCBmcmFtZV9oaWdoKQotCitn ZGJweV9hcHBseV9mcmFtZV9maWx0ZXIgKHN0cnVjdCBmcmFtZV9pbmZvICpm cmFtZSwgaW50IGZsYWdzLAorCQkJICBlbnVtIHB5X2ZyYW1lX2FyZ3MgYXJn c190eXBlLAorCQkJICBzdHJ1Y3QgdWlfb3V0ICpvdXQsIGludCBmcmFtZV9s b3csIGludCBmcmFtZV9oaWdoKQogewogICBzdHJ1Y3QgZ2RiYXJjaCAqZ2Ri YXJjaCA9IE5VTEw7CiAgIHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwczsKSW5k ZXg6IHB5dGhvbi9weS1wcmV0dHlwcmludC5jCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvcHl0aG9uL3B5LXBy ZXR0eXByaW50LmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzYKZGlmZiAt dSAtcCAtcjEuMzYgcHktcHJldHR5cHJpbnQuYwotLS0gcHl0aG9uL3B5LXBy ZXR0eXByaW50LmMJOSBKdWwgMjAxMyAxNjo1NzowOSAtMDAwMAkxLjM2Cisr KyBweXRob24vcHktcHJldHR5cHJpbnQuYwk2IFNlcCAyMDEzIDE1OjE3OjEz IC0wMDAwCkBAIC0zMDAsNyArMzAwLDcgQEAgcHJpbnRfc3RhY2tfdW5sZXNz X21lbW9yeV9lcnJvciAoc3RydWN0IAogICAgIGdkYnB5X3ByaW50X3N0YWNr ICgpOwogfQogCi0vKiBIZWxwZXIgZm9yIGFwcGx5X3ZhbF9wcmV0dHlfcHJp bnRlciB3aGljaCBjYWxscyB0b19zdHJpbmcgYW5kCisvKiBIZWxwZXIgZm9y IGdkYnB5X2FwcGx5X3ZhbF9wcmV0dHlfcHJpbnRlciB3aGljaCBjYWxscyB0 b19zdHJpbmcgYW5kCiAgICBmb3JtYXRzIHRoZSByZXN1bHQuICAqLwogCiBz dGF0aWMgZW51bSBzdHJpbmdfcmVwcl9yZXN1bHQKQEAgLTQ2Nyw3ICs0Njcs NyBAQCBwdXNoX2R1bW15X3B5dGhvbl9mcmFtZSAodm9pZCkKIH0KICNlbmRp ZgogCi0vKiBIZWxwZXIgZm9yIGFwcGx5X3ZhbF9wcmV0dHlfcHJpbnRlciB0 aGF0IGZvcm1hdHMgY2hpbGRyZW4gb2YgdGhlCisvKiBIZWxwZXIgZm9yIGdk YnB5X2FwcGx5X3ZhbF9wcmV0dHlfcHJpbnRlciB0aGF0IGZvcm1hdHMgY2hp bGRyZW4gb2YgdGhlCiAgICBwcmludGVyLCBpZiBhbnkgZXhpc3QuICBJZiBp c19weV9ub25lIGlzIHRydWUsIHRoZW4gbm90aGluZyBoYXMKICAgIGJlZW4g cHJpbnRlZCBieSB0b19zdHJpbmcsIGFuZCBmb3JtYXQgb3V0cHV0IGFjY29y ZGluZ2x5LiAqLwogc3RhdGljIHZvaWQKQEAgLTY4NywxMiArNjg3LDEyIEBA IHByaW50X2NoaWxkcmVuIChQeU9iamVjdCAqcHJpbnRlciwgY29uc3QKIH0K IAogaW50Ci1hcHBseV92YWxfcHJldHR5X3ByaW50ZXIgKHN0cnVjdCB0eXBl ICp0eXBlLCBjb25zdCBnZGJfYnl0ZSAqdmFsYWRkciwKLQkJCSAgaW50IGVt YmVkZGVkX29mZnNldCwgQ09SRV9BRERSIGFkZHJlc3MsCi0JCQkgIHN0cnVj dCB1aV9maWxlICpzdHJlYW0sIGludCByZWN1cnNlLAotCQkJICBjb25zdCBz dHJ1Y3QgdmFsdWUgKnZhbCwKLQkJCSAgY29uc3Qgc3RydWN0IHZhbHVlX3By aW50X29wdGlvbnMgKm9wdGlvbnMsCi0JCQkgIGNvbnN0IHN0cnVjdCBsYW5n dWFnZV9kZWZuICpsYW5ndWFnZSkKK2dkYnB5X2FwcGx5X3ZhbF9wcmV0dHlf cHJpbnRlciAoc3RydWN0IHR5cGUgKnR5cGUsIGNvbnN0IGdkYl9ieXRlICp2 YWxhZGRyLAorCQkJCWludCBlbWJlZGRlZF9vZmZzZXQsIENPUkVfQUREUiBh ZGRyZXNzLAorCQkJCXN0cnVjdCB1aV9maWxlICpzdHJlYW0sIGludCByZWN1 cnNlLAorCQkJCWNvbnN0IHN0cnVjdCB2YWx1ZSAqdmFsLAorCQkJCWNvbnN0 IHN0cnVjdCB2YWx1ZV9wcmludF9vcHRpb25zICpvcHRpb25zLAorCQkJCWNv bnN0IHN0cnVjdCBsYW5ndWFnZV9kZWZuICpsYW5ndWFnZSkKIHsKICAgc3Ry dWN0IGdkYmFyY2ggKmdkYmFyY2ggPSBnZXRfdHlwZV9hcmNoICh0eXBlKTsK ICAgUHlPYmplY3QgKnByaW50ZXIgPSBOVUxMOwpAQCAtODM5LDE3ICs4Mzks NCBAQCBnZGJweV9kZWZhdWx0X3Zpc3VhbGl6ZXIgKFB5T2JqZWN0ICpzZWxm CiAgIHJldHVybiBjb25zOwogfQogCi0jZWxzZSAvKiBIQVZFX1BZVEhPTiAq LwotCi1pbnQKLWFwcGx5X3ZhbF9wcmV0dHlfcHJpbnRlciAoc3RydWN0IHR5 cGUgKnR5cGUsIGNvbnN0IGdkYl9ieXRlICp2YWxhZGRyLAotCQkJICBpbnQg ZW1iZWRkZWRfb2Zmc2V0LCBDT1JFX0FERFIgYWRkcmVzcywKLQkJCSAgc3Ry dWN0IHVpX2ZpbGUgKnN0cmVhbSwgaW50IHJlY3Vyc2UsCi0JCQkgIGNvbnN0 IHN0cnVjdCB2YWx1ZSAqdmFsLAotCQkJICBjb25zdCBzdHJ1Y3QgdmFsdWVf cHJpbnRfb3B0aW9ucyAqb3B0aW9ucywKLQkJCSAgY29uc3Qgc3RydWN0IGxh bmd1YWdlX2RlZm4gKmxhbmd1YWdlKQotewotICByZXR1cm4gMDsKLX0KLQog I2VuZGlmIC8qIEhBVkVfUFlUSE9OICovCkluZGV4OiBweXRob24vcHktdmFs dWUuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Ny Yy9zcmMvZ2RiL3B5dGhvbi9weS12YWx1ZS5jLHYKcmV0cmlldmluZyByZXZp c2lvbiAxLjQzCmRpZmYgLXUgLXAgLXIxLjQzIHB5LXZhbHVlLmMKLS0tIHB5 dGhvbi9weS12YWx1ZS5jCTMwIE1heSAyMDEzIDE3OjE4OjU0IC0wMDAwCTEu NDMKKysrIHB5dGhvbi9weS12YWx1ZS5jCTYgU2VwIDIwMTMgMTU6MTc6MTMg LTAwMDAKQEAgLTMwLDggKzMwLDYgQEAKICNpbmNsdWRlICJjcC1hYmkuaCIK ICNpbmNsdWRlICJweXRob24uaCIKIAotI2lmZGVmIEhBVkVfUFlUSE9OCi0K ICNpbmNsdWRlICJweXRob24taW50ZXJuYWwuaCIKIAogLyogRXZlbiB0aG91 Z2ggUHl0aG9uIHNjYWxhciB0eXBlcyBkaXJlY3RseSBtYXAgdG8gaG9zdCB0 eXBlcywgd2UgdXNlCkBAIC0xNjMsNyArMTYxLDcgQEAgdmFscHlfbmV3IChQ eVR5cGVPYmplY3QgKnN1YnR5cGUsIFB5T2JqZQogLyogSXRlcmF0ZSBvdmVy IGFsbCB0aGUgVmFsdWUgb2JqZWN0cywgY2FsbGluZyBwcmVzZXJ2ZV9vbmVf dmFsdWUgb24KICAgIGVhY2guICAqLwogdm9pZAotcHJlc2VydmVfcHl0aG9u X3ZhbHVlcyAoc3RydWN0IG9iamZpbGUgKm9iamZpbGUsIGh0YWJfdCBjb3Bp ZWRfdHlwZXMpCitnZGJweV9wcmVzZXJ2ZV92YWx1ZXMgKHN0cnVjdCBvYmpm aWxlICpvYmpmaWxlLCBodGFiX3QgY29waWVkX3R5cGVzKQogewogICB2YWx1 ZV9vYmplY3QgKml0ZXI7CiAKQEAgLTE1MzQsMTMgKzE1MzIsMyBAQCBQeVR5 cGVPYmplY3QgdmFsdWVfb2JqZWN0X3R5cGUgPSB7CiAgIDAsCQkJCSAgLyog dHBfYWxsb2MgKi8KICAgdmFscHlfbmV3CQkJICAvKiB0cF9uZXcgKi8KIH07 Ci0KLSNlbHNlCi0KLXZvaWQKLXByZXNlcnZlX3B5dGhvbl92YWx1ZXMgKHN0 cnVjdCBvYmpmaWxlICpvYmpmaWxlLCBodGFiX3QgY29waWVkX3R5cGVzKQot ewotICAvKiBOb3RoaW5nLiAgKi8KLX0KLQotI2VuZGlmIC8qIEhBVkVfUFlU SE9OICovCkluZGV4OiBweXRob24vcHl0aG9uLWludGVybmFsLmgKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9w eXRob24vcHl0aG9uLWludGVybmFsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u IDEuNzgKZGlmZiAtdSAtcCAtcjEuNzggcHl0aG9uLWludGVybmFsLmgKLS0t IHB5dGhvbi9weXRob24taW50ZXJuYWwuaAkzMCBNYXkgMjAxMyAwODo1Njo1 NiAtMDAwMAkxLjc4CisrKyBweXRob24vcHl0aG9uLWludGVybmFsLmgJNiBT ZXAgMjAxMyAxNToxNzoxMyAtMDAwMApAQCAtMjAsNiArMjAsOCBAQAogI2lm bmRlZiBHREJfUFlUSE9OX0lOVEVSTkFMX0gKICNkZWZpbmUgR0RCX1BZVEhP Tl9JTlRFUk5BTF9ICiAKKyNpbmNsdWRlICJzY3JpcHRpbmcuaCIKKwogLyog VGhlc2UgV0lUSF8qIG1hY3JvcyBhcmUgZGVmaW5lZCBieSB0aGUgQ1B5dGhv biBBUEkgY2hlY2tlciB0aGF0CiAgICBjb21lcyB3aXRoIHRoZSBQeXRob24g cGx1Z2luIGZvciBHQ0MuICBTZWU6CiAgICBodHRwczovL2djYy1weXRob24t cGx1Z2luLnJlYWR0aGVkb2NzLm9yZy9lbi9sYXRlc3QvY3B5Y2hlY2tlci5o dG1sCkBAIC0yMjMsNyArMjI1LDcgQEAgZXh0ZXJuIFB5VHlwZU9iamVjdCBi cmVha3BvaW50X29iamVjdF90eQogZXh0ZXJuIFB5VHlwZU9iamVjdCBmcmFt ZV9vYmplY3RfdHlwZQogICAgIENQWUNIRUNLRVJfVFlQRV9PQkpFQ1RfRk9S X1RZUEVERUYgKCJmcmFtZV9vYmplY3QiKTsKIAotdHlwZWRlZiBzdHJ1Y3Qg YnJlYWtwb2ludF9vYmplY3QKK3R5cGVkZWYgc3RydWN0IGdkYnB5X2JyZWFr cG9pbnRfb2JqZWN0CiB7CiAgIFB5T2JqZWN0X0hFQUQKIApAQCAtMjM2LDcg KzIzOCw3IEBAIHR5cGVkZWYgc3RydWN0IGJyZWFrcG9pbnRfb2JqZWN0CiAK ICAgLyogMSBpcyB0aGlzIGlzIGEgRmluaXNoQnJlYWtwb2ludCBvYmplY3Qs IDAgb3RoZXJ3aXNlLiAgKi8KICAgaW50IGlzX2ZpbmlzaF9icDsKLX0gYnJl YWtwb2ludF9vYmplY3Q7Cit9IGdkYnB5X2JyZWFrcG9pbnRfb2JqZWN0Owog CiAvKiBSZXF1aXJlIHRoYXQgQlJFQUtQT0lOVCBiZSBhIHZhbGlkIGJyZWFr cG9pbnQgSUQ7IHRocm93IGEgUHl0aG9uCiAgICBleGNlcHRpb24gaWYgaXQg aXMgaW52YWxpZC4gICovCkBAIC0yNjMsNyArMjY1LDcgQEAgdHlwZWRlZiBz dHJ1Y3QgYnJlYWtwb2ludF9vYmplY3QKIAogLyogVmFyaWFibGVzIHVzZWQg dG8gcGFzcyBpbmZvcm1hdGlvbiBiZXR3ZWVuIHRoZSBCcmVha3BvaW50CiAg ICBjb25zdHJ1Y3RvciBhbmQgdGhlIGJyZWFrcG9pbnQtY3JlYXRlZCBob29r IGZ1bmN0aW9uLiAgKi8KLWV4dGVybiBicmVha3BvaW50X29iamVjdCAqYnBw eV9wZW5kaW5nX29iamVjdDsKK2V4dGVybiBnZGJweV9icmVha3BvaW50X29i amVjdCAqYnBweV9wZW5kaW5nX29iamVjdDsKIAogCiB0eXBlZGVmIHN0cnVj dApAQCAtMjc5LDcgKzI4MSwzMyBAQCB0eXBlZGVmIHN0cnVjdAogCiBleHRl cm4gc3RydWN0IGNtZF9saXN0X2VsZW1lbnQgKnNldF9weXRob25fbGlzdDsK IGV4dGVybiBzdHJ1Y3QgY21kX2xpc3RfZWxlbWVudCAqc2hvd19weXRob25f bGlzdDsKLQorDAordm9pZCBnZGJweV9maW5pc2hfaW5pdGlhbGl6YXRpb24g KHZvaWQpOworaW50IGdkYnB5X2luaXRpYWxpemVkICh2b2lkKTsKK3NsYW5n X3NvdXJjZXJfZnVuYyBnZGJweV9zb3VyY2Vfc2NyaXB0Owordm9pZCBnZGJw eV9ldmFsX2Zyb21fY29udHJvbF9jb21tYW5kIChzdHJ1Y3QgY29tbWFuZF9s aW5lICpjbWQpOwordm9pZCBnZGJweV9sb2FkX2F1dG9fc2NyaXB0c19mb3Jf b2JqZmlsZSAoc3RydWN0IG9iamZpbGUgKm9iamZpbGUpOwordm9pZCBnZGJw eV9zdGFydF90eXBlX3ByaW50ZXJzIChzdHJ1Y3Qgc2xhbmdfdHlwZV9wcmlu dGVycyAqKTsKK2NoYXIgKmdkYnB5X2FwcGx5X3R5cGVfcHJpbnRlcnMgKGNv bnN0IHN0cnVjdCBzbGFuZ190eXBlX3ByaW50ZXJzICosCisJCQkJIHN0cnVj dCB0eXBlICopOwordm9pZCBnZGJweV9mcmVlX3R5cGVfcHJpbnRlcnMgKHN0 cnVjdCBzbGFuZ190eXBlX3ByaW50ZXJzICopOworaW50IGdkYnB5X2FwcGx5 X3ZhbF9wcmV0dHlfcHJpbnRlcgorICAoc3RydWN0IHR5cGUgKnR5cGUsIGNv bnN0IGdkYl9ieXRlICp2YWxhZGRyLAorICAgaW50IGVtYmVkZGVkX29mZnNl dCwgQ09SRV9BRERSIGFkZHJlc3MsCisgICBzdHJ1Y3QgdWlfZmlsZSAqc3Ry ZWFtLCBpbnQgcmVjdXJzZSwKKyAgIGNvbnN0IHN0cnVjdCB2YWx1ZSAqdmFs LAorICAgY29uc3Qgc3RydWN0IHZhbHVlX3ByaW50X29wdGlvbnMgKm9wdGlv bnMsCisgICBjb25zdCBzdHJ1Y3QgbGFuZ3VhZ2VfZGVmbiAqbGFuZ3VhZ2Up OworZW51bSBweV9idF9zdGF0dXMgZ2RicHlfYXBwbHlfZnJhbWVfZmlsdGVy CisgIChzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWUsIGludCBmbGFncywgZW51 bSBweV9mcmFtZV9hcmdzIGFyZ3NfdHlwZSwKKyAgIHN0cnVjdCB1aV9vdXQg Km91dCwgaW50IGZyYW1lX2xvdywgaW50IGZyYW1lX2hpZ2gpOwordm9pZCBn ZGJweV9wcmVzZXJ2ZV92YWx1ZXMgKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxl LCBodGFiX3QgY29waWVkX3R5cGVzKTsKK2ludCBnZGJweV9icmVha3BvaW50 X2hhc19jb25kIChzdHJ1Y3QgYnJlYWtwb2ludCAqKTsKK2ludCBnZGJweV9i cmVha3BvaW50X2NvbmRfc2F5c19zdG9wIChzdHJ1Y3QgYnJlYWtwb2ludCAq KTsKK3ZvaWQgZ2RicHlfY2xlYXJfcXVpdF9mbGFnICh2b2lkKTsKK3ZvaWQg Z2RicHlfc2V0X3F1aXRfZmxhZyAodm9pZCk7CitpbnQgZ2RicHlfY2hlY2tf cXVpdF9mbGFnICh2b2lkKTsKKwwKIFB5T2JqZWN0ICpnZGJweV9oaXN0b3J5 IChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpOwogUHlPYmplY3Qg KmdkYnB5X2JyZWFrcG9pbnRzIChQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsK IFB5T2JqZWN0ICpnZGJweV9mcmFtZV9zdG9wX3JlYXNvbl9zdHJpbmcgKFB5 T2JqZWN0ICosIFB5T2JqZWN0ICopOwpAQCAtNDYxLDggKzQ4OSw4IEBAIFB5 T2JqZWN0ICpnZGJweV9nZXRfdmFyb2JqX3ByZXR0eV9wcmludGUKIGNoYXIg KmdkYnB5X2dldF9kaXNwbGF5X2hpbnQgKFB5T2JqZWN0ICpwcmludGVyKTsK IFB5T2JqZWN0ICpnZGJweV9kZWZhdWx0X3Zpc3VhbGl6ZXIgKFB5T2JqZWN0 ICpzZWxmLCBQeU9iamVjdCAqYXJncyk7CiAKLXZvaWQgYnBmaW5pc2hweV9w cmVfc3RvcF9ob29rIChzdHJ1Y3QgYnJlYWtwb2ludF9vYmplY3QgKmJwX29i aik7Ci12b2lkIGJwZmluaXNocHlfcG9zdF9zdG9wX2hvb2sgKHN0cnVjdCBi cmVha3BvaW50X29iamVjdCAqYnBfb2JqKTsKK3ZvaWQgYnBmaW5pc2hweV9w cmVfc3RvcF9ob29rIChzdHJ1Y3QgZ2RicHlfYnJlYWtwb2ludF9vYmplY3Qg KmJwX29iaik7Cit2b2lkIGJwZmluaXNocHlfcG9zdF9zdG9wX2hvb2sgKHN0 cnVjdCBnZGJweV9icmVha3BvaW50X29iamVjdCAqYnBfb2JqKTsKIAogZXh0 ZXJuIFB5T2JqZWN0ICpnZGJweV9kb2NfY3N0OwogZXh0ZXJuIFB5T2JqZWN0 ICpnZGJweV9jaGlsZHJlbl9jc3Q7CkluZGV4OiBweXRob24vcHl0aG9uLmMK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3Jj L2dkYi9weXRob24vcHl0aG9uLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu MTIxCmRpZmYgLXUgLXAgLXIxLjEyMSBweXRob24uYwotLS0gcHl0aG9uL3B5 dGhvbi5jCTE4IEp1biAyMDEzIDE4OjQyOjA5IC0wMDAwCTEuMTIxCisrKyBw eXRob24vcHl0aG9uLmMJNiBTZXAgMjAxMyAxNToxNzoxMyAtMDAwMApAQCAt MTA0LDYgKzEwNCw0MSBAQCBQeU9iamVjdCAqZ2RicHlfZ2RiX2Vycm9yOwog LyogVGhlIGBnZGIuTWVtb3J5RXJyb3InIGV4Y2VwdGlvbi4gICovCiBQeU9i amVjdCAqZ2RicHlfZ2RiX21lbW9yeV9lcnJvcjsKIAorLyogVGhlIGludGVy ZmFjZSBiZXR3ZWVuIGdkYiBwcm9wZXIgYW5kIHB5dGhvbiBzY3JpcHRpbmcu ICAqLworCitjb25zdCBzdHJ1Y3Qgc2NyaXB0X2xhbmcgcHl0aG9uX3Njcmlw dGluZ19pbnRlcmZhY2UgPQoreworICAicHl0aG9uIiwKKyAgIlB5dGhvbiIs CisgICIucHkiLAorICAiLWdkYi5weSIsCisgIHB5dGhvbl9jb250cm9sLAor CisgIGdkYnB5X2ZpbmlzaF9pbml0aWFsaXphdGlvbiwKKyAgZ2RicHlfaW5p dGlhbGl6ZWQsCisKKyAgZ2RicHlfc291cmNlX3NjcmlwdCwKKyAgZ2RicHlf ZXZhbF9mcm9tX2NvbnRyb2xfY29tbWFuZCwKKyAgZ2RicHlfbG9hZF9hdXRv X3NjcmlwdHNfZm9yX29iamZpbGUsCisKKyAgZ2RicHlfc3RhcnRfdHlwZV9w cmludGVycywKKyAgZ2RicHlfYXBwbHlfdHlwZV9wcmludGVycywKKyAgZ2Ri cHlfZnJlZV90eXBlX3ByaW50ZXJzLAorCisgIGdkYnB5X2FwcGx5X3ZhbF9w cmV0dHlfcHJpbnRlciwKKworICBnZGJweV9hcHBseV9mcmFtZV9maWx0ZXIs CisKKyAgZ2RicHlfcHJlc2VydmVfdmFsdWVzLAorCisgIGdkYnB5X2JyZWFr cG9pbnRfaGFzX2NvbmQsCisgIGdkYnB5X2JyZWFrcG9pbnRfY29uZF9zYXlz X3N0b3AsCisKKyAgZ2RicHlfY2hlY2tfcXVpdF9mbGFnLAorICBnZGJweV9j bGVhcl9xdWl0X2ZsYWcsCisgIGdkYnB5X3NldF9xdWl0X2ZsYWcsCit9Owor CiAvKiBBcmNoaXRlY3R1cmUgYW5kIGxhbmd1YWdlIHRvIGJlIHVzZWQgaW4g Y2FsbGJhY2tzIGZyb20KICAgIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIuICAq Lwogc3RydWN0IGdkYmFyY2ggKnB5dGhvbl9nZGJhcmNoOwpAQCAtMTcwLDcg KzIwNSw3IEBAIGVuc3VyZV9weXRob25fZW52IChzdHJ1Y3QgZ2RiYXJjaCAq Z2RiYXIKIC8qIENsZWFyIHRoZSBxdWl0IGZsYWcuICAqLwogCiB2b2lkCi1j bGVhcl9xdWl0X2ZsYWcgKHZvaWQpCitnZGJweV9jbGVhcl9xdWl0X2ZsYWcg KHZvaWQpCiB7CiAgIC8qIFRoaXMgY2xlYXJzIHRoZSBmbGFnIGFzIGEgc2lk ZSBlZmZlY3QuICAqLwogICBQeU9TX0ludGVycnVwdE9jY3VycmVkICgpOwpA QCAtMTc5LDcgKzIxNCw3IEBAIGNsZWFyX3F1aXRfZmxhZyAodm9pZCkKIC8q IFNldCB0aGUgcXVpdCBmbGFnLiAgKi8KIAogdm9pZAotc2V0X3F1aXRfZmxh ZyAodm9pZCkKK2dkYnB5X3NldF9xdWl0X2ZsYWcgKHZvaWQpCiB7CiAgIFB5 RXJyX1NldEludGVycnVwdCAoKTsKIH0KQEAgLTE4Nyw3ICsyMjIsNyBAQCBz ZXRfcXVpdF9mbGFnICh2b2lkKQogLyogUmV0dXJuIHRydWUgaWYgdGhlIHF1 aXQgZmxhZyBoYXMgYmVlbiBzZXQsIGZhbHNlIG90aGVyd2lzZS4gICovCiAK IGludAotY2hlY2tfcXVpdF9mbGFnICh2b2lkKQorZ2RicHlfY2hlY2tfcXVp dF9mbGFnICh2b2lkKQogewogICByZXR1cm4gUHlPU19JbnRlcnJ1cHRPY2N1 cnJlZCAoKTsKIH0KQEAgLTM0NCw3ICszNzksNyBAQCBjb21wdXRlX3B5dGhv bl9zdHJpbmcgKHN0cnVjdCBjb21tYW5kX2xpCiAgICBldmFsdWF0ZSBpdHMg Ym9keSB1c2luZyB0aGUgUHl0aG9uIGludGVycHJldGVyLiAgKi8KIAogdm9p ZAotZXZhbF9weXRob25fZnJvbV9jb250cm9sX2NvbW1hbmQgKHN0cnVjdCBj b21tYW5kX2xpbmUgKmNtZCkKK2dkYnB5X2V2YWxfZnJvbV9jb250cm9sX2Nv bW1hbmQgKHN0cnVjdCBjb21tYW5kX2xpbmUgKmNtZCkKIHsKICAgaW50IHJl dDsKICAgY2hhciAqc2NyaXB0OwpAQCAtNzcwLDcgKzgwNSw3IEBAIGdkYnB5 X2ZpbmRfcGNfbGluZSAoUHlPYmplY3QgKnNlbGYsIFB5T2IKICAgIHRoZSB0 cmFjZWJhY2sgYW5kIGNsZWFyIHRoZSBlcnJvciBpbmRpY2F0b3IuICAqLwog CiB2b2lkCi1zb3VyY2VfcHl0aG9uX3NjcmlwdCAoRklMRSAqZmlsZSwgY29u c3QgY2hhciAqZmlsZW5hbWUpCitnZGJweV9zb3VyY2Vfc2NyaXB0IChGSUxF ICpmaWxlLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKIHsKICAgc3RydWN0IGNs ZWFudXAgKmNsZWFudXA7CiAKQEAgLTEyMjUsMTggKzEyNjAsMTggQEAgZ2Ri cHlfb2JqZmlsZXMgKFB5T2JqZWN0ICp1bnVzZWQxLCBQeU9iagogICByZXR1 cm4gbGlzdDsKIH0KIAotLyogQ29tcHV0ZSB0aGUgbGlzdCBvZiBhY3RpdmUg dHlwZSBwcmludGVycyBhbmQgcmV0dXJuIGl0LiAgVGhlIHJlc3VsdAotICAg b2YgdGhpcyBmdW5jdGlvbiBjYW4gYmUgcGFzc2VkIHRvIGFwcGx5X3R5cGVf cHJpbnRlcnMsIGFuZCBzaG91bGQKLSAgIGJlIGZyZWVkIGJ5IGZyZWVfdHlw ZV9wcmludGVycy4gICovCisvKiBDb21wdXRlIHRoZSBsaXN0IG9mIGFjdGl2 ZSBweXRob24gdHlwZSBwcmludGVycyBhbmQgc3RvcmUgdGhlbSBpbgorICAg U0xBTkdfUFJJTlRFUlMtPnB5X3R5cGVfcHJpbnRlcnMuICBUaGUgcHJvZHVj dCBvZiB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkKKyAgIGdkYnB5X2FwcGx5 X3R5cGVfcHJpbnRlcnMsIGFuZCBmcmVlZCBieSBnZGJweV9mcmVlX3R5cGVf cHJpbnRlcnMuICAqLwogCi12b2lkICoKLXN0YXJ0X3R5cGVfcHJpbnRlcnMg KHZvaWQpCit2b2lkCitnZGJweV9zdGFydF90eXBlX3ByaW50ZXJzIChzdHJ1 Y3Qgc2xhbmdfdHlwZV9wcmludGVycyAqc2xhbmdfcHJpbnRlcnMpCiB7CiAg IHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwczsKLSAgUHlPYmplY3QgKnR5cGVf bW9kdWxlLCAqZnVuYyA9IE5VTEwsICpyZXN1bHRfb2JqID0gTlVMTDsKKyAg UHlPYmplY3QgKnR5cGVfbW9kdWxlLCAqZnVuYyA9IE5VTEwsICpwcmludGVy c19vYmogPSBOVUxMOwogCiAgIGlmICghZ2RiX3B5dGhvbl9pbml0aWFsaXpl ZCkKLSAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm47CiAKICAgY2xlYW51 cHMgPSBlbnN1cmVfcHl0aG9uX2VudiAoZ2V0X2N1cnJlbnRfYXJjaCAoKSwg Y3VycmVudF9sYW5ndWFnZSk7CiAKQEAgLTEyNTQsMzIgKzEyODksMzAgQEAg c3RhcnRfdHlwZV9wcmludGVycyAodm9pZCkKICAgICAgIGdvdG8gZG9uZTsK ICAgICB9CiAKLSAgcmVzdWx0X29iaiA9IFB5T2JqZWN0X0NhbGxGdW5jdGlv bk9iakFyZ3MgKGZ1bmMsIChjaGFyICopIE5VTEwpOwotICBpZiAocmVzdWx0 X29iaiA9PSBOVUxMKQorICBwcmludGVyc19vYmogPSBQeU9iamVjdF9DYWxs RnVuY3Rpb25PYmpBcmdzIChmdW5jLCAoY2hhciAqKSBOVUxMKTsKKyAgaWYg KHByaW50ZXJzX29iaiA9PSBOVUxMKQogICAgIGdkYnB5X3ByaW50X3N0YWNr ICgpOworICBlbHNlCisgICAgc2xhbmdfcHJpbnRlcnMtPnB5X3R5cGVfcHJp bnRlcnMgPSBwcmludGVyc19vYmo7CiAKICBkb25lOgogICBQeV9YREVDUkVG ICh0eXBlX21vZHVsZSk7CiAgIFB5X1hERUNSRUYgKGZ1bmMpOwogICBkb19j bGVhbnVwcyAoY2xlYW51cHMpOwotICByZXR1cm4gcmVzdWx0X29iajsKIH0K IAogLyogSWYgVFlQRSBpcyByZWNvZ25pemVkIGJ5IHNvbWUgdHlwZSBwcmlu dGVyLCByZXR1cm4gYSBuZXdseQogICAgYWxsb2NhdGVkIHN0cmluZyBob2xk aW5nIHRoZSB0eXBlJ3MgcmVwbGFjZW1lbnQgbmFtZS4gIFRoZSBjYWxsZXIK LSAgIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIHRoZSBzdHJpbmcuICBP dGhlcndpc2UsIHJldHVybiBOVUxMLgotCi0gICBUaGlzIGZ1bmN0aW9uIGhh cyBhIGJpdCBvZiBhIGZ1bm55IG5hbWUsIHNpbmNlIGl0IGFjdHVhbGx5IGFw cGxpZXMKLSAgIHJlY29nbml6ZXJzLCBidXQgdGhpcyBzZWVtZWQgY2xlYXJl ciBnaXZlbiB0aGUgc3RhcnRfdHlwZV9wcmludGVycwotICAgYW5kIGZyZWVf dHlwZV9wcmludGVycyBmdW5jdGlvbnMuICAqLworICAgaXMgcmVzcG9uc2li bGUgZm9yIGZyZWVpbmcgdGhlIHN0cmluZy4gIE90aGVyd2lzZSwgcmV0dXJu IE5VTEwuICAqLwogCiBjaGFyICoKLWFwcGx5X3R5cGVfcHJpbnRlcnMgKHZv aWQgKnByaW50ZXJzLCBzdHJ1Y3QgdHlwZSAqdHlwZSkKK2dkYnB5X2FwcGx5 X3R5cGVfcHJpbnRlcnMgKGNvbnN0IHN0cnVjdCBzbGFuZ190eXBlX3ByaW50 ZXJzICpzbGFuZ19wcmludGVycywKKwkJCSAgIHN0cnVjdCB0eXBlICp0eXBl KQogewogICBzdHJ1Y3QgY2xlYW51cCAqY2xlYW51cHM7CiAgIFB5T2JqZWN0 ICp0eXBlX29iaiwgKnR5cGVfbW9kdWxlID0gTlVMTCwgKmZ1bmMgPSBOVUxM OwogICBQeU9iamVjdCAqcmVzdWx0X29iaiA9IE5VTEw7Ci0gIFB5T2JqZWN0 ICpwcmludGVyc19vYmogPSBwcmludGVyczsKKyAgUHlPYmplY3QgKnByaW50 ZXJzX29iaiA9IHNsYW5nX3ByaW50ZXJzLT5weV90eXBlX3ByaW50ZXJzOwog ICBjaGFyICpyZXN1bHQgPSBOVUxMOwogCiAgIGlmIChwcmludGVyc19vYmog PT0gTlVMTCkKQEAgLTEzMzgsMTAgKzEzNzEsMTAgQEAgYXBwbHlfdHlwZV9w cmludGVycyAodm9pZCAqcHJpbnRlcnMsIHN0cgogLyogRnJlZSB0aGUgcmVz dWx0IG9mIHN0YXJ0X3R5cGVfcHJpbnRlcnMuICAqLwogCiB2b2lkCi1mcmVl X3R5cGVfcHJpbnRlcnMgKHZvaWQgKmFyZykKK2dkYnB5X2ZyZWVfdHlwZV9w cmludGVycyAoc3RydWN0IHNsYW5nX3R5cGVfcHJpbnRlcnMgKnNsYW5nX3By aW50ZXJzKQogewogICBzdHJ1Y3QgY2xlYW51cCAqY2xlYW51cHM7Ci0gIFB5 T2JqZWN0ICpwcmludGVycyA9IGFyZzsKKyAgUHlPYmplY3QgKnByaW50ZXJz ID0gc2xhbmdfcHJpbnRlcnMtPnB5X3R5cGVfcHJpbnRlcnM7CiAKICAgaWYg KHByaW50ZXJzID09IE5VTEwpCiAgICAgcmV0dXJuOwpAQCAtMTM4MSw2MSAr MTQxNCw2IEBAIHB5dGhvbl9jb21tYW5kIChjaGFyICphcmcsIGludCBmcm9t X3R0eSkKICAgcHl0aG9uX2ludGVyYWN0aXZlX2NvbW1hbmQgKGFyZywgZnJv bV90dHkpOwogfQogCi12b2lkCi1ldmFsX3B5dGhvbl9mcm9tX2NvbnRyb2xf Y29tbWFuZCAoc3RydWN0IGNvbW1hbmRfbGluZSAqY21kKQotewotICBlcnJv ciAoXygiUHl0aG9uIHNjcmlwdGluZyBpcyBub3Qgc3VwcG9ydGVkIGluIHRo aXMgY29weSBvZiBHREIuIikpOwotfQotCi12b2lkCi1zb3VyY2VfcHl0aG9u X3NjcmlwdCAoRklMRSAqZmlsZSwgY29uc3QgY2hhciAqZmlsZW5hbWUpCi17 Ci0gIHRocm93X2Vycm9yIChVTlNVUFBPUlRFRF9FUlJPUiwKLQkgICAgICAg XygiUHl0aG9uIHNjcmlwdGluZyBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMg Y29weSBvZiBHREIuIikpOwotfQotCi1pbnQKLWdkYnB5X3Nob3VsZF9zdG9w IChzdHJ1Y3QgYnJlYWtwb2ludF9vYmplY3QgKmJwX29iaikKLXsKLSAgaW50 ZXJuYWxfZXJyb3IgKF9fRklMRV9fLCBfX0xJTkVfXywKLQkJICBfKCJnZGJw eV9zaG91bGRfc3RvcCBjYWxsZWQgd2hlbiBQeXRob24gc2NyaXB0aW5nIGlz ICAiIFwKLQkJICAgICJub3Qgc3VwcG9ydGVkLiIpKTsKLX0KLQotaW50Ci1n ZGJweV9icmVha3BvaW50X2hhc19weV9jb25kIChzdHJ1Y3QgYnJlYWtwb2lu dF9vYmplY3QgKmJwX29iaikKLXsKLSAgaW50ZXJuYWxfZXJyb3IgKF9fRklM RV9fLCBfX0xJTkVfXywKLQkJICBfKCJnZGJweV9icmVha3BvaW50X2hhc19w eV9jb25kIGNhbGxlZCB3aGVuIFB5dGhvbiAiIFwKLQkJICAgICJzY3JpcHRp bmcgaXMgbm90IHN1cHBvcnRlZC4iKSk7Ci19Ci0KLXZvaWQgKgotc3RhcnRf dHlwZV9wcmludGVycyAodm9pZCkKLXsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0K LWNoYXIgKgotYXBwbHlfdHlwZV9wcmludGVycyAodm9pZCAqaWdub3JlLCBz dHJ1Y3QgdHlwZSAqdHlwZSkKLXsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLXZv aWQKLWZyZWVfdHlwZV9wcmludGVycyAodm9pZCAqYXJnKQotewotfQotCi1l bnVtIHB5X2J0X3N0YXR1cwotYXBwbHlfZnJhbWVfZmlsdGVyIChzdHJ1Y3Qg ZnJhbWVfaW5mbyAqZnJhbWUsIGludCBmbGFncywKLQkJICAgIGVudW0gcHlf ZnJhbWVfYXJncyBhcmdzX3R5cGUsCi0JCSAgICBzdHJ1Y3QgdWlfb3V0ICpv dXQsIGludCBmcmFtZV9sb3csCi0JCSAgICBpbnQgZnJhbWVfaGlnaCkKLXsK LSAgcmV0dXJuIFBZX0JUX05PX0ZJTFRFUlM7Ci19Ci0KICNlbmRpZiAvKiBI QVZFX1BZVEhPTiAqLwogCiAMCkBAIC0xNzM1LDcgKzE3MTMsNyBAQCBtZXNz YWdlID09IGFuIGVycm9yIG1lc3NhZ2Ugd2l0aG91dCBhIHN0CiAgICBjb21t YW5kIGluc3RhbGxlZC4gICovCiAKIHZvaWQKLWZpbmlzaF9weXRob25faW5p dGlhbGl6YXRpb24gKHZvaWQpCitnZGJweV9maW5pc2hfaW5pdGlhbGl6YXRp b24gKHZvaWQpCiB7CiAgIFB5T2JqZWN0ICptOwogICBjaGFyICpnZGJfcHl0 aG9uZGlyOwpAQCAtMTgxNiw2ICsxNzk0LDEyIEBAIGZpbmlzaF9weXRob25f aW5pdGlhbGl6YXRpb24gKHZvaWQpCiAKICNlbmRpZiAvKiBIQVZFX1BZVEhP TiAqLwogCitpbnQKK2dkYnB5X2luaXRpYWxpemVkICh2b2lkKQoreworICBy ZXR1cm4gZ2RiX3B5dGhvbl9pbml0aWFsaXplZDsKK30KKwogDAogCiAjaWZk ZWYgSEFWRV9QWVRIT04KSW5kZXg6IHB5dGhvbi9weXRob24uaAo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL3B5 dGhvbi9weXRob24uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMgpkaWZm IC11IC1wIC1yMS4yMiBweXRob24uaAotLS0gcHl0aG9uL3B5dGhvbi5oCTEw IE1heSAyMDEzIDEwOjI2OjAyIC0wMDAwCTEuMjIKKysrIHB5dGhvbi9weXRo b24uaAk2IFNlcCAyMDEzIDE1OjE3OjEzIC0wMDAwCkBAIC0yMCwxMDUgKzIw LDE1IEBACiAjaWZuZGVmIEdEQl9QWVRIT05fSAogI2RlZmluZSBHREJfUFlU SE9OX0gKIAotI2luY2x1ZGUgInZhbHVlLmgiCi0jaW5jbHVkZSAibWkvbWkt Y21kcy5oIgotCi1zdHJ1Y3QgYnJlYWtwb2ludF9vYmplY3Q7CisjaW5jbHVk ZSAic2NyaXB0aW5nLmgiCiAKIC8qIFRoZSBzdWZmaXggb2YgcGVyLW9iamZp bGUgc2NyaXB0cyB0byBhdXRvLWxvYWQuCiAgICBFLmcuIFdoZW4gdGhlIHBy b2dyYW0gbG9hZHMgbGliZm9vLnNvLCBsb29rIGZvciBsaWJmb28tZ2RiLnB5 LiAgKi8KKy8vIFRPRE86IHh5emRqZQogI2RlZmluZSBHREJQWV9BVVRPX0ZJ TEVfTkFNRSAiLWdkYi5weSIKIAotLyogUHl0aG9uIGZyYW1lLWZpbHRlciBz dGF0dXMgcmV0dXJuIHZhbHVlcy4gICovCi1lbnVtIHB5X2J0X3N0YXR1cwot ICB7Ci0gICAgLyogUmV0dXJuIHdoZW4gYW4gZXJyb3IgaGFzIG9jY3VycmVk IGluIHByb2Nlc3NpbmcgZnJhbWUgZmlsdGVycywKLSAgICAgICBvciB3aGVu IHByaW50aW5nIHRoZSBzdGFjay4gICovCi0gICAgUFlfQlRfRVJST1IgPSAt MSwKLQotICAgIC8qIFJldHVybiBmcm9tIGludGVybmFsIHJvdXRpbmVzIHRv IGluZGljYXRlIHRoYXQgdGhlIGZ1bmN0aW9uCi0gICAgICAgc3VjY2VlZGVk LiAgKi8KLSAgICBQWV9CVF9PSyA9IDEsCi0KLSAgICAvKiBSZXR1cm4gd2hl biB0aGUgZnJhbWUgZmlsdGVyIHByb2Nlc3MgaXMgY29tcGxldGUsIGFuZCBh bGwKLSAgICAgICBvcGVyYXRpb25zIGhhdmUgc3VjY2VlZGVkLiAgKi8KLSAg ICBQWV9CVF9DT01QTEVURUQgPSAyLAotCi0gICAgLyogUmV0dXJuIHdoZW4g dGhlIGZyYW1lIGZpbHRlciBwcm9jZXNzIGlzIGNvbXBsZXRlLCBidXQgdGhl cmUKLSAgICAgICB3ZXJlIG5vIGZpbHRlciByZWdpc3RlcmVkIGFuZCBlbmFi bGVkIHRvIHByb2Nlc3MuICovCi0gICAgUFlfQlRfTk9fRklMVEVSUyA9IDMK LSAgfTsKLQotLyogRmxhZ3MgdG8gcGFzcyB0byBhcHBseV9mcmFtZV9maWx0 ZXIuICAqLwotCi1lbnVtIGZyYW1lX2ZpbHRlcl9mbGFncwotICB7Ci0gICAg LyogU2V0IHRoaXMgZmxhZyBpZiBmcmFtZSBsZXZlbCBpcyB0byBiZSBwcmlu dGVkLiAgKi8KLSAgICBQUklOVF9MRVZFTCA9IDEsCi0KLSAgICAvKiBTZXQg dGhpcyBmbGFnIGlmIGZyYW1lIGluZm9ybWF0aW9uIGlzIHRvIGJlIHByaW50 ZWQuICAqLwotICAgIFBSSU5UX0ZSQU1FX0lORk8gPSAyLAotCi0gICAgLyog U2V0IHRoaXMgZmxhZyBpZiBmcmFtZSBhcmd1bWVudHMgYXJlIHRvIGJlIHBy aW50ZWQuICAqLwotICAgIFBSSU5UX0FSR1MgPSA0LAotCi0gICAgLyogU2V0 IHRoaXMgZmxhZyBpZiBmcmFtZSBsb2NhbHMgYXJlIHRvIGJlIHByaW50ZWQu ICAqLwotICAgIFBSSU5UX0xPQ0FMUyA9IDgsCi0gIH07Ci0KLS8qIEEgY2hv aWNlIG9mIHRoZSBkaWZmZXJlbnQgZnJhbWUgYXJndW1lbnQgcHJpbnRpbmcg c3RyYXRlZ2llcyB0aGF0Ci0gICBjYW4gb2NjdXIgaW4gZGlmZmVyZW50IGNh c2VzIG9mIGZyYW1lIGZpbHRlciBpbnN0YW50aWF0aW9uLiAgKi8KLXR5cGVk ZWYgZW51bSBweV9mcmFtZV9hcmdzCi17Ci0gIC8qIFByaW50IG5vIHZhbHVl cyBmb3IgYXJndW1lbnRzIHdoZW4gaW52b2tlZCBmcm9tIHRoZSBNSS4gKi8K LSAgTk9fVkFMVUVTID0gUFJJTlRfTk9fVkFMVUVTLAotCi0gIE1JX1BSSU5U X0FMTF9WQUxVRVMgPSBQUklOVF9BTExfVkFMVUVTLAotCi0gIC8qIFByaW50 IG9ubHkgc2ltcGxlIHZhbHVlcyAod2hhdCBNSSBkZWZpbmVzIGFzICJzaW1w bGUiKSBmb3IKLSAgICAgYXJndW1lbnRzIHdoZW4gaW52b2tlZCBmcm9tIHRo ZSBNSS4gKi8KLSAgTUlfUFJJTlRfU0lNUExFX1ZBTFVFUyA9IFBSSU5UX1NJ TVBMRV9WQUxVRVMsCi0KLQotICAvKiBQcmludCBvbmx5IHNjYWxhciB2YWx1 ZXMgZm9yIGFyZ3VtZW50cyB3aGVuIGludm9rZWQgZnJvbSB0aGUKLSAgICAg Q0xJLiAqLwotICBDTElfU0NBTEFSX1ZBTFVFUywKLQotICAvKiBQcmludCBh bGwgdmFsdWVzIGZvciBhcmd1bWVudHMgd2hlbiBpbnZva2VkIGZyb20gdGhl Ci0gICAgIENMSS4gKi8KLSAgQ0xJX0FMTF9WQUxVRVMKLX0gcHlfZnJhbWVf YXJnczsKLQotZXh0ZXJuIHZvaWQgZmluaXNoX3B5dGhvbl9pbml0aWFsaXph dGlvbiAodm9pZCk7Ci0KLXZvaWQgZXZhbF9weXRob25fZnJvbV9jb250cm9s X2NvbW1hbmQgKHN0cnVjdCBjb21tYW5kX2xpbmUgKik7Ci0KLXZvaWQgc291 cmNlX3B5dGhvbl9zY3JpcHQgKEZJTEUgKmZpbGUsIGNvbnN0IGNoYXIgKmZp bGVuYW1lKTsKLQotaW50IGFwcGx5X3ZhbF9wcmV0dHlfcHJpbnRlciAoc3Ry dWN0IHR5cGUgKnR5cGUsIGNvbnN0IGdkYl9ieXRlICp2YWxhZGRyLAotCQkJ ICAgICAgaW50IGVtYmVkZGVkX29mZnNldCwgQ09SRV9BRERSIGFkZHJlc3Ms Ci0JCQkgICAgICBzdHJ1Y3QgdWlfZmlsZSAqc3RyZWFtLCBpbnQgcmVjdXJz ZSwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCB2YWx1ZSAqdmFsLAotCQkJICAg ICAgY29uc3Qgc3RydWN0IHZhbHVlX3ByaW50X29wdGlvbnMgKm9wdGlvbnMs Ci0JCQkgICAgICBjb25zdCBzdHJ1Y3QgbGFuZ3VhZ2VfZGVmbiAqbGFuZ3Vh Z2UpOwotCi1lbnVtIHB5X2J0X3N0YXR1cyBhcHBseV9mcmFtZV9maWx0ZXIg KHN0cnVjdCBmcmFtZV9pbmZvICpmcmFtZSwgaW50IGZsYWdzLAotCQkJCSAg ICAgIGVudW0gcHlfZnJhbWVfYXJncyBhcmdzX3R5cGUsCi0JCQkJICAgICAg c3RydWN0IHVpX291dCAqb3V0LCBpbnQgZnJhbWVfbG93LAotCQkJCSAgICAg IGludCBmcmFtZV9oaWdoKTsKLQotdm9pZCBwcmVzZXJ2ZV9weXRob25fdmFs dWVzIChzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSwgaHRhYl90IGNvcGllZF90 eXBlcyk7Ci0KLXZvaWQgZ2RicHlfbG9hZF9hdXRvX3NjcmlwdHNfZm9yX29i amZpbGUgKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlKTsKLQotaW50IGdkYnB5 X3Nob3VsZF9zdG9wIChzdHJ1Y3QgYnJlYWtwb2ludF9vYmplY3QgKmJwX29i aik7Ci0KLWludCBnZGJweV9icmVha3BvaW50X2hhc19weV9jb25kIChzdHJ1 Y3QgYnJlYWtwb2ludF9vYmplY3QgKmJwX29iaik7Ci0KLXZvaWQgKnN0YXJ0 X3R5cGVfcHJpbnRlcnMgKHZvaWQpOwotCi1jaGFyICphcHBseV90eXBlX3By aW50ZXJzICh2b2lkICosIHN0cnVjdCB0eXBlICp0eXBlKTsKLQotdm9pZCBm cmVlX3R5cGVfcHJpbnRlcnMgKHZvaWQgKmFyZyk7CisjaWZkZWYgSEFWRV9Q WVRIT04KK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc2NyaXB0X2xhbmcgcHl0aG9u X3NjcmlwdGluZ19pbnRlcmZhY2U7CisjZW5kaWYKIAogI2VuZGlmIC8qIEdE Ql9QWVRIT05fSCAqLwpkaWZmIC1ycE4gLVUgMiBzY2hlbWU9L2xpYi9nZGIu c2NtIHNjaGVtZS9saWIvZ2RiLnNjbQotLS0gc2NoZW1lPS9saWIvZ2RiLnNj bQkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorKysgc2No ZW1lL2xpYi9nZGIuc2NtCTIwMTMtMDktMDUgMjM6MTc6MTMuODYzOTY0Mjgy IC0wNzAwCkBAIC0wLDAgKzEsMTggQEAKKzs7IFNjaGVtZSBnZGIgbW9kdWxl LgorOzsKKzs7IENvcHlyaWdodCAoQykgMjAxMyBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIEluYy4KKzs7Cis7OyBUaGlzIGZpbGUgaXMgcGFydCBvZiBH REIuCis7OworOzsgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKzs7IGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5Cis7OyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgor OzsgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKzs7Cis7 OyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKzs7IGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCis7 OyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCis7OyBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorOzsKKzs7IFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlCis7OyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwg c2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KZGlmZiAtcnBO IC1VIDIgc2NoZW1lPS9zY2hlbWUtaW50ZXJuYWwuaCBzY2hlbWUvc2NoZW1l LWludGVybmFsLmgKLS0tIHNjaGVtZT0vc2NoZW1lLWludGVybmFsLmgJMTk2 OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKKysrIHNjaGVtZS9z Y2hlbWUtaW50ZXJuYWwuaAkyMDEzLTA5LTA2IDA3OjUxOjE2Ljg3Mzk2NjQ5 MyAtMDcwMApAQCAtMCwwICsxLDE4OCBAQAorLyogSW50ZXJuYWwgaGVhZGVy IGZvciBnZGIvc2NoZW1lIGNvZGUuCisKKyAgIENvcHlyaWdodCAoQykgMjAx MyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBm aWxlIGlzIHBhcnQgb2YgR0RCLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhl IExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0u ICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u ICAqLworCisjaWZuZGVmIEdEQl9TQ0hFTUVfSU5URVJOQUxfSAorI2RlZmlu ZSBHREJfU0NIRU1FX0lOVEVSTkFMX0gKKworI2luY2x1ZGUgInNjcmlwdGlu Zy5oIgorI2luY2x1ZGUgImxpYmd1aWxlLmgiCisjaW5jbHVkZSAic2NoZW1l L3NjbS1zbW9icy5oIgorCisvKiBTY2hlbWUgdmFyaWFibGVzIHRvIGRlZmlu ZSBkdXJpbmcgaW5pdGlhbGl6YXRpb24uICAqLworCit0eXBlZGVmIHN0cnVj dAoreworICBjb25zdCBjaGFyICpuYW1lOworICBTQ00gdmFsdWU7Cit9IHNj aGVtZV92YXJpYWJsZTsKKworLyogU2NoZW1lIGZ1bmN0aW9ucyB0byBkZWZp bmUgZHVyaW5nIGluaXRpYWxpemF0aW9uLiAgKi8KKwordHlwZWRlZiBzdHJ1 Y3QKK3sKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgaW50IHJlcXVpcmVkOwor ICBpbnQgb3B0aW9uYWw7CisgIGludCByZXN0OworICBzY21fdF9zdWJyIGZ1 bmM7Cit9IHNjaGVtZV9mdW5jdGlvbjsKKworLyogRW5zdXJlIG5ldyBjb2Rl IGRvZXNuJ3QgYWNjaWRlbnRhbGx5IHRyeSB0byB1c2UgdGhpcy4gICovCisj dW5kZWYgc2NtX21ha2Vfc21vYl90eXBlCisjZGVmaW5lIHNjbV9tYWtlX3Nt b2JfdHlwZSBVU0VfZ2Ric2NtX21ha2Vfc21vYl90eXBlX0lOU1RFQUQKKwor LyogVGhleSBicm91Z2h0IG92ZXIgKCkgPT0gI2YgZnJvbSBsaXNwLgorICAg TGV0J3MgYXZvaWQgdGhhdCBmb3Igbm93LiAgKi8KKyN1bmRlZiBzY21faXNf Ym9vbAorI3VuZGVmIHNjbV9pc19mYWxzZQorI3VuZGVmIHNjbV9pc190cnVl CisjZGVmaW5lIHNjbV9pc19ib29sIFVTRV9nZGJzY21faXNfYm9vbF9JTlNU RUFECisjZGVmaW5lIHNjbV9pc19mYWxzZSBVU0VfZ2Ric2NtX2lzX2ZhbHNl X0lOU1RFQUQKKyNkZWZpbmUgc2NtX2lzX3RydWUgVVNFX2dkYnNjbV9pc190 cnVlX0lOU1RFQUQKKyNkZWZpbmUgZ2Ric2NtX2lzX2Jvb2woc2NtKSBcCisg IChzY21faXNfZXEgKChzY20pLCBTQ01fQk9PTF9GKSB8fCBzY21faXNfZXEg KChzY20pLCBTQ01fQk9PTF9UKSkKKyNkZWZpbmUgZ2Ric2NtX2lzX2ZhbHNl KHNjbSkgc2NtX2lzX2VxICgoc2NtKSwgU0NNX0JPT0xfRikKKyNkZWZpbmUg Z2Ric2NtX2lzX3RydWUoc2NtKSAoISBnZGJzY21faXNfZmFsc2UgKHNjbSkp CisKKy8qIF9fZnVuYyBpcyBpbiBDOTksIGJ1dCB3ZSBwcm92aWRlIGEgd3Jh cHBlciAianVzdCBpbiBjYXNlIiwKKyAgIGFuZCBiZWNhdXNlIEZVTkNfTkFN RSBpcyB0aGUgY2Fub25pY2FsIHZhbHVlIHVzZWQgaW4gZ3VpbGUgc291cmNl cy4KKyAgIElXQk4gdG8gdXNlIHRoZSBTY2hlbWUgdmVyc2lvbiBvZiB0aGUg bmFtZSAoZS5nLiBmb28tYmFyIHZzIGZvb19iYXIpLAorICAgYnV0IGxldCdz IEtJU1MgZm9yIG5vdy4gICovCisjZGVmaW5lIEZVTkNfTkFNRSBfX2Z1bmNf XworCitleHRlcm4gY29uc3QgY2hhciBnZGJzY21fbW9kdWxlX25hbWVbXTsK KworZXh0ZXJuIGludCBnZGJfc2NoZW1lX2luaXRpYWxpemVkOworCitleHRl cm4gU0NNIGdkYnNjbV9pbnZhbGlkX3R5cGVfc3ltYm9sOworCitleHRlcm4g U0NNIGdkYnNjbV9tYXBfc3RyaW5nOworZXh0ZXJuIFNDTSBnZGJzY21fYXJy YXlfc3RyaW5nOworZXh0ZXJuIFNDTSBnZGJzY21fc3RyaW5nX3N0cmluZzsK KworZXh0ZXJuIHZvaWQgZ2Ric2NtX2RlZmluZV92YXJpYWJsZXMgKGNvbnN0 IHNjaGVtZV92YXJpYWJsZSAqLCBpbnQgcHVibGljKTsKKworZXh0ZXJuIHZv aWQgZ2Ric2NtX2RlZmluZV9mdW5jdGlvbnMgKGNvbnN0IHNjaGVtZV9mdW5j dGlvbiAqLCBpbnQgcHVibGljKTsKKworZXh0ZXJuIHZvaWQgZ2Ric2NtX3By aW50ZiAoU0NNIHBvcnQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKKwor ZXh0ZXJuIHZvaWQgZ2Ric2NtX2Rpc3BsYXkgKFNDTSBvYmopOworCitleHRl cm4gdm9pZCBnZGJzY21fcGFyc2VfZnVuY3Rpb25fYXJncyAoY29uc3QgY2hh ciAqZnVuY3Rpb25fbmFtZSwKKwkJCQkJY29uc3QgY2hhciAqIGNvbnN0ICog a2V5d29yZHMsCisJCQkJCWNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKKwor ZXh0ZXJuIFNDTSBnZGJzY21fY190b19zY21fc3RyaW5nIChjb25zdCBjaGFy ICpzdHJpbmcpOworCitleHRlcm4gY2hhciAqZ2Ric2NtX3NjbV90b19jX3N0 cmluZyAoU0NNIHN0cmluZyk7CisKK2V4dGVybiBTQ00gZ2Ric2NtX2Nfc3Ry aW5nX3RvX3N5bWJvbCAoY29uc3QgY2hhciAqc3ltYm9sKTsKKworZXh0ZXJu IGNoYXIgKmdkYnNjbV9zY21fdG9faG9zdF9zdHJpbmcgKFNDTSBzdHJpbmcp OworCitleHRlcm4gU0NNIGdkYnNjbV9zY21fc3RyaW5nX3RvX3RhcmdldF9z Y21fc3RyaW5nIChTQ00gc3RyaW5nKTsKKworZXh0ZXJuIGNoYXIgKmdkYnNj bV9zY21fc3RyaW5nX3RvX3RhcmdldF9jX3N0cmluZyAoU0NNIHN0cmluZywg c2l6ZV90ICpsZW5ndGgsCisJCQkJCQkgICBTQ00gKmV4Y2VwdGlvbik7CisK K2V4dGVybiBpbnQgZ2Ric2NtX2lzX3Byb2NlZHVyZSAoU0NNIHByb2MpOwor CitleHRlcm4gU0NNIGdkYnNjbV9tYWtlX2V4Y2VwdGlvbiAoU0NNIHRhZywg U0NNIGFyZ3MpOworCitleHRlcm4gaW50IGdkYnNjbV9pc19leGNlcHRpb24g KFNDTSBzY20pOworCitleHRlcm4gdm9pZCBnZGJzY21fY29udmVydF9nZGJf ZXhjZXB0aW9uIChzdHJ1Y3QgZ2RiX2V4Y2VwdGlvbiBleGNlcHRpb24pCisg IEFUVFJJQlVURV9OT1JFVFVSTjsKKworZXh0ZXJuIGNoYXIgKmdkYnNjbV9l eGNlcHRpb25fdG9fc3RyaW5nIChTQ00gZXhjZXB0aW9uKTsKKworZXh0ZXJu IGludCBnZGJzY21fZXhjZXB0aW9uX21hdGNoZXNfbWVtb3J5X2Vycm9yIChT Q00gZXhjZXB0aW9uKTsKKworZXh0ZXJuIHZvaWQgZ2Ric2NtX3ByaW50X2V4 Y2VwdGlvbiAoU0NNIGV4Y2VwdGlvbik7CisKK2V4dGVybiB2b2lkIGdkYnNj bV9wcmludF9zdGFjayAodm9pZCk7CisKK2V4dGVybiBTQ00gZ2Ric2NtX3Nh ZmVfY2FsbF8wIChTQ00gcHJvYyk7CisKK2V4dGVybiBTQ00gZ2Ric2NtX3Nh ZmVfY2FsbF8xIChTQ00gcHJvYywgU0NNIGFyZzApOworCitleHRlcm4gU0NN IGdkYnNjbV9zYWZlX2NhbGxfMiAoU0NNIHByb2MsIFNDTSBhcmcwLCBTQ00g YXJnMSk7CisKK2V4dGVybiBTQ00gZ2Ric2NtX3NhZmVfYXBwbHlfMSAoU0NN IHByb2MsIFNDTSBhcmcwLCBTQ00gYXJncyk7CisKK2V4dGVybiBTQ00gZ2Ri c2NtX3ZhbHVlX3RvX3ZhbHVlX29iamVjdCAoc3RydWN0IHZhbHVlICp2YWwp OworCitleHRlcm4gaW50IGdkYnNjbV9pc190eXBlIChTQ00gc2NtKTsKKwor ZXh0ZXJuIGludCBnZGJzY21faXNfdmFsdWUgKFNDTSBzY20pOworDAorLyog U2ltcGxlIGl0ZXJhdG9yIHN1cHBvcnQuICAqLworCit0eXBlZGVmIHN0cnVj dAoreworICBnZGJfc21vYiBiYXNlOworCisgIFNDTSBvYmplY3Q7CisgIFND TSBwcm9ncmVzczsKKyAgU0NNIG5leHRfeDsKK30gaXRlcmF0b3Jfc21vYjsK KworZXh0ZXJuIGNvbnN0IGNoYXIgZ2Ric2NtX2l0ZXJhdG9yX3Ntb2JfbmFt ZVtdOworCitleHRlcm4gU0NNIGdkYnNjbV9tYWtlX2l0ZXJhdG9yIChTQ00g b2JqZWN0LCBTQ00gcHJvZ3Jlc3MsIFNDTSBuZXh0KTsKKworZXh0ZXJuIGlu dCBnZGJzY21faXNfaXRlcmF0b3IgKFNDTSBzY20pOworDAorLyogc3RyaXB0 X2xhbmcgbWV0aG9kcyAqLworZXh0ZXJuIHZvaWQgZ2Ric2NtX3N0YXJ0X3R5 cGVfcHJpbnRlcnMgKHN0cnVjdCBzbGFuZ190eXBlX3ByaW50ZXJzICopOwor ZXh0ZXJuIGNoYXIgKmdkYnNjbV9hcHBseV90eXBlX3ByaW50ZXJzIChjb25z dCBzdHJ1Y3Qgc2xhbmdfdHlwZV9wcmludGVycyAqLAorCQkJCQkgc3RydWN0 IHR5cGUgKik7CitleHRlcm4gdm9pZCBnZGJzY21fZnJlZV90eXBlX3ByaW50 ZXJzIChzdHJ1Y3Qgc2xhbmdfdHlwZV9wcmludGVycyAqX3ByaW50ZXJzKTsK K2V4dGVybiB2b2lkIGdkYnNjbV9wcmVzZXJ2ZV92YWx1ZXMgKHN0cnVjdCBv YmpmaWxlICosIGh0YWJfdCBjb3BpZWRfdHlwZXMpOworZXh0ZXJuIGludCBn ZGJzY21fYXBwbHlfdmFsX3ByZXR0eV9wcmludGVyCisgIChzdHJ1Y3QgdHlw ZSAqdHlwZSwgY29uc3QgZ2RiX2J5dGUgKnZhbGFkZHIsCisgICBpbnQgZW1i ZWRkZWRfb2Zmc2V0LCBDT1JFX0FERFIgYWRkcmVzcywKKyAgIHN0cnVjdCB1 aV9maWxlICpzdHJlYW0sIGludCByZWN1cnNlLAorICAgY29uc3Qgc3RydWN0 IHZhbHVlICp2YWwsCisgICBjb25zdCBzdHJ1Y3QgdmFsdWVfcHJpbnRfb3B0 aW9ucyAqb3B0aW9ucywKKyAgIGNvbnN0IHN0cnVjdCBsYW5ndWFnZV9kZWZu ICpsYW5ndWFnZSk7CitleHRlcm4gaW50IGdkYnNjbV9icmVha3BvaW50X2hh c19jb25kIChzdHJ1Y3QgYnJlYWtwb2ludCAqYik7CitleHRlcm4gaW50IGdk YnNjbV9icmVha3BvaW50X2NvbmRfc2F5c19zdG9wIChzdHJ1Y3QgYnJlYWtw b2ludCAqYik7CisMCisvKiBJbml0aWFsaXplcnMgZm9yIGVhY2ggcGllY2Ug b2YgU2NoZW1lIHN1cHBvcnQuICAqLworZXh0ZXJuIHZvaWQgZ2Ric2NtX2lu aXRpYWxpemVfYnJlYWtwb2ludHMgKHZvaWQpOworZXh0ZXJuIHZvaWQgZ2Ri c2NtX2luaXRpYWxpemVfZXhjZXB0aW9ucyAodm9pZCk7CitleHRlcm4gdm9p ZCBnZGJzY21faW5pdGlhbGl6ZV9pdGVyYXRvcnMgKHZvaWQpOworZXh0ZXJu IHZvaWQgZ2Ric2NtX2luaXRpYWxpemVfdHlwZXMgKHZvaWQpOworZXh0ZXJu IHZvaWQgZ2Ric2NtX2luaXRpYWxpemVfdmFsdWVzICh2b2lkKTsKK2V4dGVy biB2b2lkIGdkYnNjbV9pbml0aWFsaXplX3ByZXR0eV9wcmludGVycyAodm9p ZCk7CisMCisvKiBVc2UgdGhpcyBhZnRlciBhIFRSWV9FWENFUFQgdG8gdGhy b3cgdGhlIGFwcHJvcHJpYXRlIFNjaGVtZSBleGNlcHRpb24uICAqLworLy8g RklYTUU6d2lwCisKKyNkZWZpbmUgR0RCX1NDTV9IQU5ETEVfRVhDRVBUSU9O KGV4Y2VwdGlvbikJCVwKKyAgZG8gewkJCQkJCQlcCisgICAgaWYgKGV4Y2Vw dGlvbi5yZWFzb24gPCAwKQkJCQlcCisgICAgICB7CQkJCQkJCVwKKwlnZGJz Y21fY29udmVydF9nZGJfZXhjZXB0aW9uIChleGNlcHRpb24pOwlcCisgICAg ICAgIC8qTk9UUkVBQ0hFRCAqLwkJCQkJXAorICAgICAgfQkJCQkJCQlcCisg IH0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBHREJfU0NIRU1FX0lOVEVSTkFM X0ggKi8KZGlmZiAtcnBOIC1VIDIgc2NoZW1lPS9zY2hlbWUuYyBzY2hlbWUv c2NoZW1lLmMKLS0tIHNjaGVtZT0vc2NoZW1lLmMJMTk2OS0xMi0zMSAxNjow MDowMC4wMDAwMDAwMDAgLTA4MDAKKysrIHNjaGVtZS9zY2hlbWUuYwkyMDEz LTA5LTA2IDA4OjAyOjEwLjg0MzAwODk0NiAtMDcwMApAQCAtMCwwICsxLDcw MSBAQAorLyogR2VuZXJhbCBnZGIvc2NoZW1lIGNvZGUuCisKKyAgIENvcHly aWdodCAoQykgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K KworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgorCisgICBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK KyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisg ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3Jn L2xpY2Vuc2VzLz4uICAqLworCisvKiBOb3RlczoKKworICAgTm9tZW5jbGF0 dXJlOgorICAgV2UgdXNlIEd1aWxlJ3MgaW1wbGVtZW50YXRpb24gb2YgU2No ZW1lLCBidXQgdGhhdCdzIGFuIGltcGxlbWVudGF0aW9uCisgICBkZXRhaWwg d2Ugc2hvdWxkbid0IGV4cG9zZSB0byB0aGUgdXNlci4gIFRoZXJlZm9yZSwg d2UgZ2VuZXJhbGx5IHVzZQorICAgInNjaGVtZSIgb3IgInNjbSIgaW5zdGVh ZCBvZiAiZ3VpbGUiIGluIHN5bWJvbCBuYW1lcywgYW5kIGRlZmluaXRlbHkg Zm9yCisgICBldmVyeXRoaW5nIHVzZXItZmFjaW5nLgorCisgICBJbXBvcnRp bmc6CisgICBZb3UgZ2VuZXJhbGx5IHdhbnQgdG8gaW1wb3J0IHRoZSBnZGIg bW9kdWxlIHdpdGggYSBwcmVmaXguCisgICBFLmcuICh1c2UtbW9kdWxlcyAo KGdkYikgIzpyZW5hbWVyIChzeW1ib2wtcHJlZml4LXByb2MgJ2dkYjopKSkK KyAgIFRoaXMgZ2l2ZXMgZXZlcnkgc3ltYm9sIGEgImdkYjoiIHByZWZpeC4K KyovCisKKy8qIFdBUk5JTkc6IFVuY2F1Z2h0IFNjaGVtZSBleGNlcHRpb25z IGFyZSBiYWQuCisgICBXZSBwcm90ZWN0IGFnYWluc3QgdGhlbSBhcyBtdWNo IGFzIHdlIGNhbiwgYnV0IHdlJ3JlIGFsc28gY2FyZWZ1bCB0byBiZQorICAg bm90IG92ZXJseSBjYXV0aW91cy4KKyAgIEhvdyBleHBlbnNpdmUgYXJlIHNp bXBsZSBvcGVyYXRpb25zIGJ5IHByb3RlY3RpbmcgdGhlbSB3aXRoIHNjbV9j YXRjaD8gICovCisKKy8qIElOQ09NUExFVEUgVE9ETyBMSVNUOgorICAgLSBs ZWF2aW5nIG91dCBvYnZpb3VzIHRoaW5ncyBsaWtlIG1pc3NpbmcgZnVuY3Rp b25hbGl0eQorICAgLSBndWlsZSBzbmFyZmluZz8KKyAgIC0gcmV2aWV3IG1l bW9yeSBtYW5hZ2VtZW50IG9mIHN0cmluZyB3cmFwcGVycworICAgLSBlcnJv ciByZXBvcnRpbmc6IGFyZ3VtZW50IHBvc2l0aW9uczogb3JpZ2luIDAgb3Ig MT8KKyAgIC0gImdvYiIsIHRvbyBjbG9zZSB0byAiZ2RiIgorICAgLSBnc21v YjogY2FuIGdvb3BzIGluaGVyaXQgZnJvbSBzbW9icz8KKyAgIC0gZ3Ntb2I6 IGdvYmo/IGdkYnNjbT8gZ2Rib2JqPworICAgLSBnZGIgY2xlYW51cHMvZXhj ZXB0aW9ucyB2cyBTY2hlbWUgZXhjZXB0aW9ucywgYW5kIHRoZWlyIGludGVy bWl4aW5nIC4uLgorICAgICAtIG1vcmUgY2F0Y2hlcywgbW9yZSBzY21fd2l0 aF9ndWlsZSwgLi4uCisgICAgIC0gc3RhY2sgcHJpbnRpbmcKKyAgIC0gbGF6 eSBzdHJpbmdzCisgICAtIGZvb19hc3NlcnRfYmFyIC0gU2NoZW1lIHVzZXMg dGhlIHdvcmQgImFzc2VydCIgdG8gbWVhbiB0aHJvdyBhIFNjaGVtZQorICAg ICBleGNlcHRpb24gdXBvbiBmYWlsdXJlLCBub3Qgc3VyZSBpdCdsbCBiZSBj b25mdXNpbmcgaW4gZ2RiL2d1aWxlIGNvZGUKKyAgIC0gb3VyIHVzZSBvZiBG VU5DX05BTUUgZGlmZmVycyBmcm9tIEd1aWxlJ3MKKyAgIC0gdGhlIGRvY3Mg YXJlIGNvbmZsaWN0aW5nIG9uIHdoZXRoZXIgc21vYiBmcmVlIGZ1bmN0aW9u cyBoYXZlIHRvIGZyZWUKKyAgICAgdGhlIHNtb2IgaXRzZWxmCisgICAtIGhv dyBpcyBpdCBkZWNpZGVkIGEgc21vYiBpcyBubyBsb25nZXIgcmVmZXJlbmNl ZD8KKyAgICAgLSBubyBtb3JlIHJlZmVyZW5jZSB0byB0aGUgc21vYiBpdHNl bGY/CisgICAgIC0gbm8gbW9yZSByZWZlcmVuY2UgdG8gdGhlICJjZWxsIiB0 aGF0IGhhcyB0aGUgc21vYiBjb2RlICsgZGF0YSBwdHI/CisgICAtIGF1ZGl0 IGdkYnNjbV9tYWtlX2V4Y2VwdGlvbiBjYWxscworICAgLSBhdWRpdCBHQyBv ZiBzbW9icworICAgLSByZWYgdnMgZ2V0IHZzIDxub3RoaW5nPgorICAgLSBp MThuCisqLworCisvKiBJbXBsZW1lbnRhdGlvbiBub3RlczoKKyAgIC0gZG9u J3QgdXNlIHNjbV9pc19mYWxzZSwgYmxlY2g6IHRoZXkgYnJvdWdodCBvdmVy ICgpID09ICNmIGZyb20gbGlzcAorKi8KKworI2luY2x1ZGUgImRlZnMuaCIK KyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlICJicmVha3BvaW50Lmgi CisjaW5jbHVkZSAiY2xpL2NsaS1jbWRzLmgiCisjaW5jbHVkZSAiY2xpL2Ns aS1zY3JpcHQuaCIKKyNpbmNsdWRlICJjbGkvY2xpLXV0aWxzLmgiCisjaW5j bHVkZSAiY29tbWFuZC5oIgorI2luY2x1ZGUgImdkYmNtZC5oIgorI2luY2x1 ZGUgImludGVycHMuaCIKKyNpbmNsdWRlICJzY3JpcHRpbmcuaCIKKyNpbmNs dWRlICJ1dGlscy5oIgorI2lmZGVmIEhBVkVfU0NIRU1FCisjaW5jbHVkZSAi c2NoZW1lL3NjaGVtZS5oIgorI2luY2x1ZGUgInNjaGVtZS9zY2hlbWUtaW50 ZXJuYWwuaCIKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TQ0hFTUUKKworc3Rh dGljIHZvaWQgZ2Ric2NtX2ZpbmlzaF9pbml0aWFsaXphdGlvbiAodm9pZCk7 CitzdGF0aWMgaW50IGdkYnNjbV9pbml0aWFsaXplZCAodm9pZCk7CitzdGF0 aWMgdm9pZCBnZGJzY21fZXZhbF9mcm9tX2NvbnRyb2xfY29tbWFuZCAoc3Ry dWN0IGNvbW1hbmRfbGluZSAqKTsKK3N0YXRpYyBzbGFuZ19zb3VyY2VyX2Z1 bmMgZ2Ric2NtX3NvdXJjZV9zY3JpcHQ7CitzdGF0aWMgdm9pZCBnZGJzY21f bG9hZF9hdXRvX3NjcmlwdHNfZm9yX29iamZpbGUgKHN0cnVjdCBvYmpmaWxl ICopOworCitpbnQgZ2RiX3NjaGVtZV9pbml0aWFsaXplZDsKKworLyogVGhl c2Ugc3ltYm9scyBhcmUgbmVlZGVkLgorICAgVG8gc2ltcGxpZnkgdGhpbmdz IHdlIHJlY29yZCB0aGVtIGluIGdsb2JhbHMuCisgICBTdG9yaW5nIHRoZW0g aW4gZ2xvYmFscyBpcyBzdWZmaWNpZW50IHRvIHByb3RlY3QgdGhlbSBmcm9t IHRoZQorICAgZ2FyYmFnZSBjb2xsZWN0b3IuICAqLworU0NNIGdkYnNjbV9p bnZhbGlkX3R5cGVfc3ltYm9sOworCisvKiBQcmV0dHktcHJpbnRlciBkaXNw bGF5IGhpbnRzIGFyZSBzcGVjaWZpZWQgYnkgc3RyaW5ncy4gICovCitTQ00g Z2Ric2NtX21hcF9zdHJpbmc7CitTQ00gZ2Ric2NtX2FycmF5X3N0cmluZzsK K1NDTSBnZGJzY21fc3RyaW5nX3N0cmluZzsKKworLyogVGhlIG5hbWUgb2Yg dGhlIGdkYiBtb2R1bGUuICAqLworY29uc3QgY2hhciBnZGJzY21fbW9kdWxl X25hbWVbXSA9ICJnZGIiOworCisvKiBUaGUgaW50ZXJmYWNlIGJldHdlZW4g Z2RiIHByb3BlciBhbmQgcHl0aG9uIHNjcmlwdGluZy4gICovCisKK2NvbnN0 IHN0cnVjdCBzY3JpcHRfbGFuZyBzY2hlbWVfc2NyaXB0aW5nX2ludGVyZmFj ZSA9Cit7CisgICJzY2hlbWUiLAorICAiU2NoZW1lIiwKKyAgIi5zY20iLAor ICAiLWdkYi5zY20iLAorICBzY2hlbWVfY29udHJvbCwKKworICBnZGJzY21f ZmluaXNoX2luaXRpYWxpemF0aW9uLAorICBnZGJzY21faW5pdGlhbGl6ZWQs CisKKyAgZ2Ric2NtX3NvdXJjZV9zY3JpcHQsCisgIGdkYnNjbV9ldmFsX2Zy b21fY29udHJvbF9jb21tYW5kLAorICBnZGJzY21fbG9hZF9hdXRvX3Njcmlw dHNfZm9yX29iamZpbGUsCisKKyAgZ2Ric2NtX3N0YXJ0X3R5cGVfcHJpbnRl cnMsCisgIGdkYnNjbV9hcHBseV90eXBlX3ByaW50ZXJzLAorICBnZGJzY21f ZnJlZV90eXBlX3ByaW50ZXJzLAorCisgIGdkYnNjbV9hcHBseV92YWxfcHJl dHR5X3ByaW50ZXIsCisKKyAgTlVMTCwgLy9nZGJzY21fYXBwbHlfZnJhbWVf ZmlsdGVyLAorCisgIGdkYnNjbV9wcmVzZXJ2ZV92YWx1ZXMsCisKKyAgZ2Ri c2NtX2JyZWFrcG9pbnRfaGFzX2NvbmQsCisgIGdkYnNjbV9icmVha3BvaW50 X2NvbmRfc2F5c19zdG9wLAorCisgIE5VTEwsIC8vZ2Ric2NtX2NoZWNrX3F1 aXRfZmxhZywKKyAgTlVMTCwgLy9nZGJzY21fY2xlYXJfcXVpdF9mbGFnLAor ICBOVUxMLCAvL2dkYnNjbV9zZXRfcXVpdF9mbGFnLAorCisgIC8qIFRPRE86 IHZhcm9iai5jICovCit9OworCisvKiBFdmFsdWF0ZSBhIFNjaGVtZSBjb21t YW5kLCBwcmludCB0aGUgcmVzdWx0IG9mIGV4cHJlc3Npb25zLCBidXQgZG9u J3QKKyAgIGF1dG9tYXRpY2FsbHkgcHJpbnQgdGhlIHN0YWNrIG9uIGVycm9y cy4gICovCisKK3N0YXRpYyBpbnQKK2V2YWxfc2NoZW1lX2NvbW1hbmQgKGNv bnN0IGNoYXIgKmNvbW1hbmQpCit7CisgIFNDTSByZXN1bHQgPSBzY21fY19l dmFsX3N0cmluZyAoY29tbWFuZCk7CisgIFNDTSBwb3J0ID0gc2NtX2N1cnJl bnRfb3V0cHV0X3BvcnQgKCk7CisKKyAgc2NtX2Rpc3BsYXkgKHJlc3VsdCwg cG9ydCk7CisgIC8qIFNhdmUgdGhlIHVzZXIgZnJvbSBoYXZpbmcgdG8gYWx3 YXlzIGFkZCBvbmUuICAqLworICBzY21fbmV3bGluZSAocG9ydCk7CisKKyAg cmV0dXJuIDA7Cit9CisKKy8qIEltcGxlbWVudGF0aW9uIG9mIHRoZSBnZGIg InNjaGVtZS1pbnRlcmFjdGl2ZSIgY29tbWFuZC4gICovCisKK3N0YXRpYyB2 b2lkCitzY2hlbWVfaW50ZXJhY3RpdmVfY29tbWFuZCAoY2hhciAqYXJnLCBp bnQgZnJvbV90dHkpCit7CisgIHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwOwor ICBpbnQgZXJyOworCisgIGNsZWFudXAgPSBtYWtlX2NsZWFudXBfcmVzdG9y ZV9pbnRlZ2VyICgmaW50ZXJwcmV0ZXJfYXN5bmMpOworICBpbnRlcnByZXRl cl9hc3luYyA9IDA7CisKKyAgYXJnID0gc2tpcF9zcGFjZXMgKGFyZyk7CisK KyAgLyogVE9ETzogVGhpcyBleHBsaWNpdGx5IHJlamVjdHMgYW55IGFyZ3Vt ZW50cyBmb3Igbm93LgorICAgICAiSXQgaXMgZWFzaWVyIHRvIHJlbGF4IGEg cmVzdHJpY3Rpb24gdGhhbiBpbXBvc2Ugb25lIGFmdGVyIHRoZSBmYWN0LiIK KyAgICAgV2Ugd291bGQgKmxpa2UqIHRvIGJlIGFibGUgdG8gcGFzcyBhcmd1 bWVudHMgdG8gdGhlIGludGVyYWN0aXZlIHNoZWxsCisgICAgIGJ1dCB0aGF0 J3Mgbm90IHdoYXQgcHl0aG9uLWludGVyYWN0aXZlIGRvZXMuICBVbnRpbCB0 aGVyZSBpcyB0aW1lIHRvCisgICAgIHNvcnQgaXQgb3V0LCB3ZSBmb3JiaWQg YXJndW1lbnRzLiAgKi8KKworICBpZiAoYXJnICYmICphcmcpCisgICAgewor ICAgICAgaWYgKDApCisJeworCSAgaW50IGxlbiA9IHN0cmxlbiAoYXJnKTsK KwkgIGNoYXIgKnNjcmlwdCA9IHhtYWxsb2MgKGxlbiArIDIpOworCisJICBz dHJjcHkgKHNjcmlwdCwgYXJnKTsKKwkgIHNjcmlwdFtsZW5dID0gJ1xuJzsK KwkgIHNjcmlwdFtsZW4gKyAxXSA9ICdcMCc7CisJICBlcnIgPSBldmFsX3Nj aGVtZV9jb21tYW5kIChzY3JpcHQpOworCSAgeGZyZWUgKHNjcmlwdCk7CisJ fQorICAgICAgZWxzZQorCWVycm9yIChfKCJzY2hlbWUtaW50ZXJhY3RpdmUg Y3VycmVudGx5IGRvZXMgbm90IHRha2UgYW55IGFyZ3VtZW50cyIpKTsKKyAg ICB9CisgIGVsc2UKKyAgICB7CisgICAgICBkb250X3JlcGVhdCAoKTsKKyAg ICAgIC8qIEl0J3MgdW5mb3J0dW5hdGUgdG8gaGF2ZSB0byByZXNvcnQgdG8g c29tZXRoaW5nIGxpa2UgdGhpcywgYnV0CisJIHNjbV9zaGVsbCBkb2Vzbid0 IHJldHVybi4gIDotKCAgSSBmb3VuZCB0aGlzIGluIG9uIGd1aWxlLXVzZXJz QC4gICovCisgICAgICBzY21fY2FsbF8xIChzY21fY19wdWJsaWNfcmVmICgi c3lzdGVtIHJlcGwgcmVwbCIsICJzdGFydC1yZXBsIiksCisJCSAgc2NtX2Zy b21fbG9jYWxlX3N5bWJvbCAoInNjaGVtZSIpKTsKKyAgICAgIGVyciA9IDA7 CisgICAgfQorCisgIGlmIChlcnIpCisgICAgeworICAgICAgLy9nZGJzY21f cHJpbnRfc3RhY2sgKCk7IC0gVE9ETywgc2NtX2Rpc3BsYXlfZXJyb3IsIG9y IHdoYXRldmVyCisgICAgICBlcnJvciAoXygiRXJyb3Igd2hpbGUgZXhlY3V0 aW5nIFNjaGVtZSBjb2RlLiIpKTsKKyAgICB9CisKKyAgZG9fY2xlYW51cHMg KGNsZWFudXApOworfQorCisvKiBHaXZlbiBhIGNvbW1hbmRfbGluZSwgcmV0 dXJuIGEgY29tbWFuZCBzdHJpbmcgc3VpdGFibGUgZm9yIHBhc3NpbmcKKyAg IHRvIFNjaGVtZS4gIExpbmVzIGluIHRoZSBzdHJpbmcgYXJlIHNlcGFyYXRl ZCBieSBuZXdsaW5lcy4gIFRoZSByZXR1cm4KKyAgIHZhbHVlIGlzIGFsbG9j YXRlZCB1c2luZyB4bWFsbG9jIGFuZCB0aGUgY2FsbGVyIGlzIHJlc3BvbnNp YmxlIGZvcgorICAgZnJlZWluZyBpdC4gICovCisKK3N0YXRpYyBjaGFyICoK K2NvbXB1dGVfc2NoZW1lX3N0cmluZyAoc3RydWN0IGNvbW1hbmRfbGluZSAq bCkKK3sKKyAgc3RydWN0IGNvbW1hbmRfbGluZSAqaXRlcjsKKyAgY2hhciAq c2NyaXB0ID0gTlVMTDsKKyAgaW50IHNpemUgPSAwOworICBpbnQgaGVyZTsK KworICBmb3IgKGl0ZXIgPSBsOyBpdGVyOyBpdGVyID0gaXRlci0+bmV4dCkK KyAgICBzaXplICs9IHN0cmxlbiAoaXRlci0+bGluZSkgKyAxOworCisgIHNj cmlwdCA9IHhtYWxsb2MgKHNpemUgKyAxKTsKKyAgaGVyZSA9IDA7CisgIGZv ciAoaXRlciA9IGw7IGl0ZXI7IGl0ZXIgPSBpdGVyLT5uZXh0KQorICAgIHsK KyAgICAgIGludCBsZW4gPSBzdHJsZW4gKGl0ZXItPmxpbmUpOworCisgICAg ICBzdHJjcHkgKCZzY3JpcHRbaGVyZV0sIGl0ZXItPmxpbmUpOworICAgICAg aGVyZSArPSBsZW47CisgICAgICBzY3JpcHRbaGVyZSsrXSA9ICdcbic7Cisg ICAgfQorICBzY3JpcHRbaGVyZV0gPSAnXDAnOworICByZXR1cm4gc2NyaXB0 OworfQorCisvKiBXcmFwcGVyIHRvIGV2YWwgYSBDIHN0cmluZyBpbiB0aGUg R3VpbGUgaW50ZXJwcmV0ZXIuICAqLworCitzdGF0aWMgdm9pZCAqCitldmFs X3NjaGVtZV9zdHJpbmcgKHZvaWQgKnN0cmluZykKK3sKKyAgU0NNIHJlc3Vs dCA9IHNjbV9jX2V2YWxfc3RyaW5nIChzdHJpbmcpOworCisgIHJldHVybiBO VUxMOworfQorCisvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZ2RiICJzY2hl bWUiIGNvbW1hbmQuCisgICBOb3RlOiBUaGlzIGRvZXNuJ3QgZGlzcGxheSB0 aGUgcmVzdWx0IG9uIHB1cnBvc2UsIGZvciBjb25zaXN0ZW5jeSB3aXRoCisg ICBQeXRob24uICBJZiB0aGUgdXNlciB3YW50cyBzb21ldGhpbmcgZGlzcGxh eWVkLCB1c2UgKGRpc3BsYXkgLi4uKS4gICovCisKK3N0YXRpYyB2b2lkCitz Y2hlbWVfY29tbWFuZCAoY2hhciAqYXJnLCBpbnQgZnJvbV90dHkpCit7Cisg IHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwOworCisgIGNsZWFudXAgPSBtYWtl X2NsZWFudXBfcmVzdG9yZV9pbnRlZ2VyICgmaW50ZXJwcmV0ZXJfYXN5bmMp OworICBpbnRlcnByZXRlcl9hc3luYyA9IDA7CisKKyAgYXJnID0gc2tpcF9z cGFjZXMgKGFyZyk7CisgIGlmIChhcmcgJiYgKmFyZykKKyAgICB7CisgICAg ICBpZiAoc2NtX3dpdGhfZ3VpbGUgKGV2YWxfc2NoZW1lX3N0cmluZywgYXJn KSkKKwllcnJvciAoXygiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIFNjaGVtZSBj b2RlLiIpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBzdHJ1Y3Qg Y29tbWFuZF9saW5lICpsID0gZ2V0X2NvbW1hbmRfbGluZSAoc2NoZW1lX2Nv bnRyb2wsICIiKTsKKworICAgICAgbWFrZV9jbGVhbnVwX2ZyZWVfY29tbWFu ZF9saW5lcyAoJmwpOworICAgICAgZXhlY3V0ZV9jb250cm9sX2NvbW1hbmRf dW50cmFjZWQgKGwpOworICAgIH0KKworICBkb19jbGVhbnVwcyAoY2xlYW51 cCk7Cit9CisKKy8qIFRha2UgYSBjb21tYW5kIGxpbmUgc3RydWN0dXJlIHJl cHJlc2VudGluZyBhICdzY2hlbWUnIGNvbW1hbmQsIGFuZAorICAgZXZhbHVh dGUgaXRzIGJvZHkgdXNpbmcgdGhlIFNjaGVtZSBpbnRlcnByZXRlci4KKyAg IFRoaXMgaXMgdGhlIHNjcmlwdF9sYW5nLmV2YWxfZnJvbV9jb250cm9sX2Nv bW1hbmQgIm1ldGhvZCIuICAqLworCitzdGF0aWMgdm9pZAorZ2Ric2NtX2V2 YWxfZnJvbV9jb250cm9sX2NvbW1hbmQgKHN0cnVjdCBjb21tYW5kX2xpbmUg KmNtZCkKK3sKKyAgdm9pZCAqcmV0OworICBjaGFyICpzY3JpcHQ7CisgIHN0 cnVjdCBjbGVhbnVwICpjbGVhbnVwOworCisgIGlmIChjbWQtPmJvZHlfY291 bnQgIT0gMSkKKyAgICBlcnJvciAoXygiSW52YWxpZCBcInNjaGVtZVwiIGJs b2NrIHN0cnVjdHVyZS4iKSk7CisKKyAgY2xlYW51cCA9IG1ha2VfY2xlYW51 cCAobnVsbF9jbGVhbnVwLCBOVUxMKTsKKworICBzY3JpcHQgPSBjb21wdXRl X3NjaGVtZV9zdHJpbmcgKGNtZC0+Ym9keV9saXN0WzBdKTsKKyAgcmV0ID0g c2NtX3dpdGhfZ3VpbGUgKGV2YWxfc2NoZW1lX3N0cmluZywgc2NyaXB0KTsK KyAgeGZyZWUgKHNjcmlwdCk7CisgIGlmIChyZXQpIC8vIEZJWE1FCisgICAg ZXJyb3IgKF8oIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBTY2hlbWUgY29kZS4i KSk7CisKKyAgZG9fY2xlYW51cHMgKGNsZWFudXApOworfQorCisvKiBzY21f dF9jYXRjaF9ib2R5IGhlbHBlciBmdW5jdGlvbiBmb3Igc2FmZV9zb3VyY2Vf c2NoZW1lX3NjcmlwdC4gICovCisKK3N0YXRpYyBTQ00KK3NhZmVfc291cmNl X3NjaGVtZV9zY3JpcHRfYm9keSAodm9pZCAqZGF0YSkKK3sKKyAgY29uc3Qg Y2hhciAqZmlsZW5hbWUgPSBkYXRhOworCisgIC8qIEZJWE1FOiBUaGUgR3Vp bGUgZG9jcyBkb24ndCBzcGVjaWZ5IHdoYXQgdGhlIHJlc3VsdCBpcy4KKyAg ICAgTWF5YmUgaXQncyBTQ01fVU5TUEVDSUZJRUQsIGJ1dCB0aGUgZG9jcyBz aG91bGQgc3BlY2lmeSB0aGF0LiA6LSkgKi8KKyAgc2NtX2NfcHJpbWl0aXZl X2xvYWQgKGZpbGVuYW1lKTsKKworICAvKiBJZiB3ZSBnZXQgaGVyZSB0aGUg bG9hZCBzdWNjZWVkZWQuICAqLworICByZXR1cm4gU0NNX0JPT0xfRjsKK30K KworLyogc2NtX3RfY2F0Y2hfaGFuZGxlciBoZWxwZXIgZnVuY3Rpb24gZm9y IHNhZmVfc291cmNlX3NjaGVtZV9zY3JpcHQuICAqLworCitzdGF0aWMgU0NN CitzYWZlX3NvdXJjZV9zY2hlbWVfc2NyaXB0X2hhbmRsZXIgKHZvaWQgKmRh dGEsIFNDTSBrZXksIFNDTSBhcmdzKQoreworICByZXR1cm4gYXJnczsKK30K KworLyogVHJ5IHRvIGxvYWQgYSBzY3JpcHQsIGNhdGNoaW5nIGFsbCBlcnJv cnMuCisgICBUaGUgcmVzdWx0IGlzICNmIGlmIHRoZSBsb2FkIHN1Y2NlZWRl ZCwgb3RoZXJ3aXNlIGl0IGlzIHRoZSA0LWFyZ3VtZW50CisgICBlcnJvciBz cGVjOiAoc3ViciwgbWVzc2FnZSwgYXJncywgcmVzdCkuICAqLworCitzdGF0 aWMgU0NNCitzYWZlX3NvdXJjZV9zY2hlbWVfc2NyaXB0IChjb25zdCBjaGFy ICpmaWxlbmFtZSkKK3sKKyAgY2hhciAqZGF0YSA9IChjaGFyKikgZmlsZW5h bWU7CisgIFNDTSBzdGF0dXM7CisKKyAgLyogUGFzcyBTQ01fQk9PTF9UIGZv ciB0YWcgdG8gY2F0Y2ggYWxsIGVycm9ycy4gICovCisgIHN0YXR1cyA9IHNj bV9jX2NhdGNoIChTQ01fQk9PTF9ULCBzYWZlX3NvdXJjZV9zY2hlbWVfc2Ny aXB0X2JvZHksIGRhdGEsCisJCQlzYWZlX3NvdXJjZV9zY2hlbWVfc2NyaXB0 X2hhbmRsZXIsIE5VTEwsCisJCQlOVUxMLCBOVUxMKTsKKworICByZXR1cm4g c3RhdHVzOworfQorCisvKiBSZWFkIGEgZmlsZSBhcyBTY2hlbWUgY29kZS4K KyAgIFRoaXMgaXMgdGhlIHNjcmlwdF9sYW5nLnNvdXJjZV9zY3JpcHQgIm1l dGhvZCIuCisgICBGSUxFIGlzIHRoZSBmaWxlIHRvIHJ1bi4gIEZJTEVOQU1F IGlzIG5hbWUgb2YgdGhlIGZpbGUgRklMRS4KKyAgIFRoaXMgZG9lcyBub3Qg dGhyb3cgYW55IGVycm9ycy4gIElmIGFuIGV4Y2VwdGlvbiBvY2N1cnMgcHl0 aG9uIHdpbGwgcHJpbnQKKyAgIHRoZSB0cmFjZWJhY2sgYW5kIGNsZWFyIHRo ZSBlcnJvciBpbmRpY2F0b3IuICAqLworCitzdGF0aWMgdm9pZAorZ2Ric2Nt X3NvdXJjZV9zY3JpcHQgKEZJTEUgKmZpbGUsIGNvbnN0IGNoYXIgKmZpbGVu YW1lKQoreworICBTQ00gc3RhdHVzID0gc2FmZV9zb3VyY2Vfc2NoZW1lX3Nj cmlwdCAoZmlsZW5hbWUpOworCisgIC8vVE9ETzogcHJpbnQgZXJyb3IgbWVz c2FnZT8KK30KKworLyogTG9hZCBhbnkgU2NoZW1lIGF1dG8tbG9hZGVkIHNj cmlwdHMgZm9yIE9CSkZJTEUuCisgICBUaGlzIGlzIHRoZSBzY3JpcHRfbGFu Zy5sb2FkX2F1dG9fc2NyaXB0c19mb3Jfb2JqZmlsZSAibWV0aG9kIi4gICov CisKK3N0YXRpYyB2b2lkCitnZGJzY21fbG9hZF9hdXRvX3NjcmlwdHNfZm9y X29iamZpbGUgKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlKQoreworICAvL1RP RE8KK30KKwwKKy8qIEEgU2NoZW1lIGZ1bmN0aW9uIHdoaWNoIGV2YWx1YXRl cyBhIHN0cmluZyB1c2luZyB0aGUgZ2RiIENMSS4gICovCisKK3N0YXRpYyBT Q00KK2V4ZWN1dGVfZ2RiX2NvbW1hbmQgKFNDTSBjb21tYW5kX3NjbSwgU0NN IHJlc3QpCit7CisgIGludCBmcm9tX3R0eSA9IDAsIHRvX3N0cmluZyA9IDA7 CisgIHZvbGF0aWxlIHN0cnVjdCBnZGJfZXhjZXB0aW9uIGV4Y2VwdDsKKyAg c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBrZXl3b3Jkc1tdID0KKyAgewor ICAgICJmcm9tLXR0eSIsICJ0by1zdHJpbmciLCBOVUxMCisgIH07CisgIGNo YXIgKmNvbW1hbmQ7CisgIGNoYXIgKnJlc3VsdCA9IE5VTEw7CisgIGNvbnN0 IGNoYXIgKmZ1bmN0aW9uX25hbWUgPSAiKGdkYiBleGVjdXRlKSI7CisKKyAg Z2Ric2NtX3BhcnNlX2Z1bmN0aW9uX2FyZ3MgKGZ1bmN0aW9uX25hbWUsIGtl eXdvcmRzLCAicyN0dCIsCisJCQkgICAgICBjb21tYW5kX3NjbSwgJmNvbW1h bmQsIHJlc3QsCisJCQkgICAgICAmZnJvbV90dHksICZ0b19zdHJpbmcpOwor CisgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCisgICAg eworICAgICAgLyogQ29weSB0aGUgYXJndW1lbnQgdGV4dCBpbiBjYXNlIHRo ZSBjb21tYW5kIG1vZGlmaWVzIGl0LiAgKi8KKyAgICAgIGNoYXIgKmNvcHkg PSB4c3RyZHVwIChjb21tYW5kKTsKKyAgICAgIHN0cnVjdCBjbGVhbnVwICpj bGVhbnVwID0gbWFrZV9jbGVhbnVwICh4ZnJlZSwgY29weSk7CisKKyAgICAg IHhmcmVlIChjb21tYW5kKTsKKyAgICAgIG1ha2VfY2xlYW51cF9yZXN0b3Jl X2ludGVnZXIgKCZpbnRlcnByZXRlcl9hc3luYyk7CisgICAgICBpbnRlcnBy ZXRlcl9hc3luYyA9IDA7CisKKyAgICAgIHByZXZlbnRfZG9udF9yZXBlYXQg KCk7CisgICAgICBpZiAodG9fc3RyaW5nKQorCXJlc3VsdCA9IGV4ZWN1dGVf Y29tbWFuZF90b19zdHJpbmcgKGNvcHksIGZyb21fdHR5KTsKKyAgICAgIGVs c2UKKwl7CisJICBleGVjdXRlX2NvbW1hbmQgKGNvcHksIGZyb21fdHR5KTsK KwkgIHJlc3VsdCA9IE5VTEw7CisJfQorCisgICAgICBkb19jbGVhbnVwcyAo Y2xlYW51cCk7CisgICAgfQorICBHREJfU0NNX0hBTkRMRV9FWENFUFRJT04g KGV4Y2VwdCk7CisKKyAgLyogRG8gYW55IGNvbW1hbmRzIGF0dGFjaGVkIHRv IGJyZWFrcG9pbnQgd2Ugc3RvcHBlZCBhdC4gICovCisgIGJwc3RhdF9kb19h Y3Rpb25zICgpOworCisgIGlmIChyZXN1bHQpCisgICAgeworICAgICAgU0NN IHIgPSBnZGJzY21fY190b19zY21fc3RyaW5nIChyZXN1bHQpOworICAgICAg eGZyZWUgKHJlc3VsdCk7CisgICAgICByZXR1cm4gcjsKKyAgICB9CisgIHJl dHVybiBTQ01fVU5TUEVDSUZJRUQ7Cit9CisKKyNlbHNlIC8qICEgSEFWRV9T Q0hFTUUgKi8KKworLyogRHVtbXkgaW1wbGVtZW50YXRpb24gb2YgdGhlIGdk YiAic2NoZW1lLWludGVyYWN0aXZlIiBhbmQgInNjaGVtZSIKKyAgIGNvbW1h bmQuICovCisKK3N0YXRpYyB2b2lkCitzY2hlbWVfaW50ZXJhY3RpdmVfY29t bWFuZCAoY2hhciAqYXJnLCBpbnQgZnJvbV90dHkpCit7CisgIGFyZyA9IHNr aXBfc3BhY2VzIChhcmcpOworICBpZiAoYXJnICYmICphcmcpCisgICAgZXJy b3IgKF8oIlNjaGVtZSBzY3JpcHRpbmcgaXMgbm90IHN1cHBvcnRlZCBpbiB0 aGlzIGNvcHkgb2YgR0RCLiIpKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIHN0 cnVjdCBjb21tYW5kX2xpbmUgKmwgPSBnZXRfY29tbWFuZF9saW5lIChzY2hl bWVfY29udHJvbCwgIiIpOworICAgICAgc3RydWN0IGNsZWFudXAgKmNsZWFu dXBzID0gbWFrZV9jbGVhbnVwX2ZyZWVfY29tbWFuZF9saW5lcyAoJmwpOwor CisgICAgICBleGVjdXRlX2NvbnRyb2xfY29tbWFuZF91bnRyYWNlZCAobCk7 CisgICAgICBkb19jbGVhbnVwcyAoY2xlYW51cHMpOworICAgIH0KK30KKwor c3RhdGljIHZvaWQKK3NjaGVtZV9jb21tYW5kIChjaGFyICphcmcsIGludCBm cm9tX3R0eSkKK3sKKyAgc2NoZW1lX2ludGVyYWN0aXZlX2NvbW1hbmQgKGFy ZywgZnJvbV90dHkpOworfQorCisjZW5kaWYgLyogISBIQVZFX1NDSEVNRSAq LworDAorLyogTGlzdHMgZm9yICdzZXQsc2hvdyxpbmZvIHNjaGVtZScgY29t bWFuZHMuICAqLworCitzdGF0aWMgc3RydWN0IGNtZF9saXN0X2VsZW1lbnQg KnNldF9zY2hlbWVfbGlzdDsKK3N0YXRpYyBzdHJ1Y3QgY21kX2xpc3RfZWxl bWVudCAqc2hvd19zY2hlbWVfbGlzdDsKK3N0YXRpYyBzdHJ1Y3QgY21kX2xp c3RfZWxlbWVudCAqaW5mb19zY2hlbWVfbGlzdDsKKworLyogRnVuY3Rpb24g Zm9yIHVzZSBieSAnc2V0IHNjaGVtZScgcHJlZml4IGNvbW1hbmQuICAqLwor CitzdGF0aWMgdm9pZAorc2V0X3NjaGVtZV9jb21tYW5kIChjaGFyICphcmdz LCBpbnQgZnJvbV90dHkpCit7CisgIGhlbHBfbGlzdCAoc2V0X3NjaGVtZV9s aXN0LCAic2V0IHNjaGVtZSAiLCBhbGxfY29tbWFuZHMsCisJICAgICBnZGJf c3Rkb3V0KTsKK30KKworLyogRnVuY3Rpb24gZm9yIHVzZSBieSAnc2hvdyBz Y2hlbWUnIHByZWZpeCBjb21tYW5kLiAgKi8KKworc3RhdGljIHZvaWQKK3No b3dfc2NoZW1lX2NvbW1hbmQgKGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSkK K3sKKyAgY21kX3Nob3dfbGlzdCAoc2hvd19zY2hlbWVfbGlzdCwgZnJvbV90 dHksICIiKTsKK30KKworLyogVGhlICJpbmZvIHNjaGVtZSIgY29tbWFuZCBp cyBkZWZpbmVkIGFzIGEgcHJlZml4LCB3aXRoCisgICBhbGxvd191bmtub3du IDAuICBUaGVyZWZvcmUsIGl0cyBvd24gZGVmaW5pdGlvbiBpcyBjYWxsZWQg b25seSBmb3IKKyAgICJpbmZvIHNjaGVtZSIgd2l0aCBubyBhcmdzLiAgKi8K Kworc3RhdGljIHZvaWQKK2luZm9fc2NoZW1lX2NvbW1hbmQgKGNoYXIgKmFy Z3MsIGludCBmcm9tX3R0eSkKK3sKKyAgcHJpbnRmX3VuZmlsdGVyZWQgKF8o IlwiaW5mbyBzY2hlbWVcIiBtdXN0IGJlIGZvbGxvd2VkIgorCQkgICAgICAg IiBieSB0aGUgbmFtZSBvZiBhbiBpbmZvIGNvbW1hbmQuXG4iKSk7CisgIGhl bHBfbGlzdCAoaW5mb19zY2hlbWVfbGlzdCwgImluZm8gc2NoZW1lICIsIC0x LCBnZGJfc3Rkb3V0KTsKK30KKwwKKy8qIEluaXRpYWxpemF0aW9uLiAgKi8K KworI2lmZGVmIEhBVkVfU0NIRU1FCisKKy8qIERlZmluZSBWQVJJQUJMRVMg aW4gdGhlIGdkYiBtb2R1bGUuICAqLworCit2b2lkCitnZGJzY21fZGVmaW5l X3ZhcmlhYmxlcyAoY29uc3Qgc2NoZW1lX3ZhcmlhYmxlICp2YXJpYWJsZXMs IGludCBwdWJsaWMpCit7CisgIGNvbnN0IHNjaGVtZV92YXJpYWJsZSAqc3Y7 CisKKyAgZm9yIChzdiA9IHZhcmlhYmxlczsgc3YtPm5hbWUgIT0gTlVMTDsg KytzdikKKyAgICB7CisgICAgICBzY21fY19kZWZpbmUgKHN2LT5uYW1lLCBz di0+dmFsdWUpOworICAgICAgaWYgKHB1YmxpYykKKwlzY21fY19leHBvcnQg KHN2LT5uYW1lLCBOVUxMKTsKKyAgICB9Cit9CisKKy8qIERlZmluZSBGVU5D VElPTlMgaW4gdGhlIGdkYiBtb2R1bGUuICAqLworCit2b2lkCitnZGJzY21f ZGVmaW5lX2Z1bmN0aW9ucyAoY29uc3Qgc2NoZW1lX2Z1bmN0aW9uICpmdW5j dGlvbnMsIGludCBwdWJsaWMpCit7CisgIGNvbnN0IHNjaGVtZV9mdW5jdGlv biAqc2Y7CisKKyAgZm9yIChzZiA9IGZ1bmN0aW9uczsgc2YtPm5hbWUgIT0g TlVMTDsgKytzZikKKyAgICB7CisgICAgICBzY21fY19kZWZpbmVfZ3N1YnIg KHNmLT5uYW1lLCBzZi0+cmVxdWlyZWQsIHNmLT5vcHRpb25hbCwgc2YtPnJl c3QsCisJCQkgIHNmLT5mdW5jKTsKKyAgICAgIGlmIChwdWJsaWMpCisJc2Nt X2NfZXhwb3J0IChzZi0+bmFtZSwgTlVMTCk7CisgICAgfQorfQorCisvKiBJ bnN0YWxsIHRoZSBnZGIgc2NoZW1lIG1vZHVsZS4KKyAgIFRoZSByZXN1bHQg aXMgYSBib29sZWFuIGluZGljYXRpbmcgc3VjY2Vzcy4KKyAgIElmIGluaXRp YWxpemluZyB0aGUgZ2RiIG1vZHVsZSBmYWlscyBhbiBlcnJvciBtZXNzYWdl IGlzIHByaW50ZWQuICAqLworCitzdGF0aWMgdm9pZAoraW5pdGlhbGl6ZV9n ZGJfbW9kdWxlICh2b2lkICpkYXRhKQoreworICBjaGFyICpnZGJfc2NoZW1l X2RpciA9IGNvbmNhdCAoZ2RiX2RhdGFkaXIsIFNMQVNIX1NUUklORywgInNj aGVtZSIsIE5VTEwpOworICBjaGFyICpnZGJfbW9kdWxlX2ZpbGUgPSBjb25j YXQgKGdkYl9zY2hlbWVfZGlyLCBTTEFTSF9TVFJJTkcsICJnZGIuc2NtIiwK KwkJCQkgIE5VTEwpOworICBTQ00gc3RhdHVzOworCisgIC8qIFRoZSBzbW9i IHN1cHBvcnQgbXVzdCBiZSBpbml0aWFsaXplZCBlYXJseS4gICovCisgIGdk YnNjbV9pbml0aWFsaXplX3Ntb2JzICgpOworICBnZGJzY21faW5pdGlhbGl6 ZV9leGNlcHRpb25zICgpOworICBnZGJzY21faW5pdGlhbGl6ZV9icmVha3Bv aW50cyAoKTsKKyAgZ2Ric2NtX2luaXRpYWxpemVfaXRlcmF0b3JzICgpOwor ICBnZGJzY21faW5pdGlhbGl6ZV9wcmV0dHlfcHJpbnRlcnMgKCk7CisgIGdk YnNjbV9pbml0aWFsaXplX3R5cGVzICgpOworICBnZGJzY21faW5pdGlhbGl6 ZV92YWx1ZXMgKCk7CisKKyAgc2NtX2NfZGVmaW5lX2dzdWJyICgiZXhlY3V0 ZSIsIDEsIDAsIDEsIGV4ZWN1dGVfZ2RiX2NvbW1hbmQpOworCisgIGdkYnNj bV9pbnZhbGlkX3R5cGVfc3ltYm9sID0gZ2Ric2NtX2Nfc3RyaW5nX3RvX3N5 bWJvbCAoImludmFsaWQtdHlwZSIpOworCisgIGdkYnNjbV9tYXBfc3RyaW5n ID0gc2NtX2Zyb21fdXRmOF9zdHJpbmcgKCJtYXAiKTsKKyAgZ2Ric2NtX2Fy cmF5X3N0cmluZyA9IHNjbV9mcm9tX3V0Zjhfc3RyaW5nICgiYXJyYXkiKTsK KyAgZ2Ric2NtX3N0cmluZ19zdHJpbmcgPSBzY21fZnJvbV91dGY4X3N0cmlu ZyAoInN0cmluZyIpOworCisgIHN0YXR1cyA9IHNhZmVfc291cmNlX3NjaGVt ZV9zY3JpcHQgKGdkYl9tb2R1bGVfZmlsZSk7CisKKyAgaWYgKGdkYnNjbV9p c190cnVlIChzdGF0dXMpKQorICAgIHsKKyAgICAgIC8qIFNvbWUgcm9idXN0 bmVzcyBjaGVja2luZyBiZWZvcmUgd2Ugc3RhcnQgYWNjZXNzaW5nIFNUQVRV Uy4gICovCisgICAgICBpZiAoc2NtX2xpc3RfcCAoc3RhdHVzKSAmJiBzY21f aWxlbmd0aCAoc3RhdHVzKSA+PSAzKQorCXsKKwkgIFNDTSBtZXNzYWdlID0g c2NtX2xpc3RfcmVmIChzdGF0dXMsIHNjbV9mcm9tX3NpZ25lZF9pbnRlZ2Vy ICgxKSk7CisJICBTQ00gYXJncyA9IHNjbV9saXN0X3JlZiAoc3RhdHVzLCBz Y21fZnJvbV9zaWduZWRfaW50ZWdlciAoMikpOworCisJICBzY21fZGlzcGxh eV9lcnJvcl9tZXNzYWdlIChtZXNzYWdlLCBhcmdzLAorCQkJCSAgICAgc2Nt X2N1cnJlbnRfb3V0cHV0X3BvcnQgKCkpOworCX0KKyAgICAgIGVsc2UKKwl7 CisJICBTQ00gcG9ydCA9IHNjbV9jdXJyZW50X291dHB1dF9wb3J0ICgpOwor CisJICBwcmludGZfZmlsdGVyZWQgKF8oIlVua25vd24gZmFpbHVyZSBsb2Fk aW5nIGdkYiBtb2R1bGU6XG4iKSk7CisJICBzY21fZGlzcGxheSAoc3RhdHVz LCBwb3J0KTsKKwkgIHNjbV9uZXdsaW5lIChwb3J0KTsKKwl9CisgICAgICB3 YXJuaW5nIChfKCJcbiIKKwkJICJDb3VsZCBub3QgY29tcGxldGUgU2NoZW1l IGdkYiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gZnJvbTpcbiIKKwkJICIlcy5c biIKKwkJICJMaW1pdGVkIFNjaGVtZSBzdXBwb3J0IGlzIGF2YWlsYWJsZS5c biIKKwkJICJTdWdnZXN0IHBhc3NpbmcgLS1kYXRhLWRpcmVjdG9yeT0vcGF0 aC90by9nZGIvZGF0YS1kaXJlY3RvcnkuXG4iKSwKKwkJIGdkYl9tb2R1bGVf ZmlsZSk7CisgICAgfQorCisgIHhmcmVlIChnZGJfbW9kdWxlX2ZpbGUpOwor ICB4ZnJlZSAoZ2RiX3NjaGVtZV9kaXIpOworCisgIGdkYl9zY2hlbWVfaW5p dGlhbGl6ZWQgPSAxOworfQorCisvKiBBIGNhbGxiYWNrIHRvIGZpbmlzaCBH dWlsZSBpbml0aWFsaXphdGlvbiBhZnRlciBnZGIgaGFzIGZpbmlzaGVkIGFs bCBpdHMKKyAgIGluaXRpYWxpemF0aW9uLgorICAgVGhpcyBpcyB0aGUgc2Ny aXB0X2xhbmcuZmluaXNoX2luaXRpYWxpemF0aW9uICJtZXRob2QiLiAgKi8K Kworc3RhdGljIHZvaWQKK2dkYnNjbV9maW5pc2hfaW5pdGlhbGl6YXRpb24g KHZvaWQpCit7CisgIC8qIFJlc3RvcmUgdGhlIGVudmlyb25tZW50IHRvIHRo ZSB1c2VyIGludGVyYWN0aW9uIG9uZS4gICovCisgIHNjbV9zZXRfY3VycmVu dF9tb2R1bGUgKHNjbV9pbnRlcmFjdGlvbl9lbnZpcm9ubWVudCAoKSk7Cit9 CisKKy8qIFRoZSBzY3JpcHRfbGFuZy5pbml0aWFsaXplZCAibWV0aG9kIi4g ICovCisKK3N0YXRpYyBpbnQKK2dkYnNjbV9pbml0aWFsaXplZCAodm9pZCkK K3sKKyAgcmV0dXJuIGdkYl9zY2hlbWVfaW5pdGlhbGl6ZWQ7Cit9CisKKyNl bmRpZiAvKiBIQVZFX1NDSEVNRSAqLworCisvKiBJbnN0YWxsIHRoZSB2YXJp b3VzIGdkYiBjb21tYW5kcyB1c2VkIGJ5IFNjaGVtZS4gICovCisKK3N0YXRp YyB2b2lkCitpbnN0YWxsX2dkYl9jb21tYW5kcyAodm9pZCkKK3sKKyAgYWRk X2NvbSAoInNjaGVtZS1pbnRlcmFjdGl2ZSIsIGNsYXNzX29ic2N1cmUsCisJ ICAgc2NoZW1lX2ludGVyYWN0aXZlX2NvbW1hbmQsCisjaWZkZWYgSEFWRV9T Q0hFTUUKKwkgICBfKCJcCitTdGFydCBhbiBpbnRlcmFjdGl2ZSBTY2hlbWUg cHJvbXB0LlxuXAorXG5cCitUbyByZXR1cm4gdG8gR0RCLCB0eXBlIHRoZSBF T0YgY2hhcmFjdGVyIChlLmcuLCBDdHJsLUQgb24gYW4gZW1wdHlcblwKK3By b21wdCkuXG5cCitcblwKK0FsdGVybmF0aXZlbHksIGEgc2luZ2xlLWxpbmUg U2NoZW1lIGNvbW1hbmQgY2FuIGJlIGdpdmVuIGFzIGFuXG5cCithcmd1bWVu dCwgYW5kIGlmIHRoZSBjb21tYW5kIGlzIGFuIGV4cHJlc3Npb24sIHRoZSBy ZXN1bHQgd2lsbCBiZVxuXAorcHJpbnRlZC4gIEZvciBleGFtcGxlOlxuXAor XG5cCisgICAgKGdkYikgc2NoZW1lLWludGVyYWN0aXZlICgyICsgMylcblwK KyAgICA1XG5cCisiKQorI2Vsc2UgLyogSEFWRV9TQ0hFTUUgKi8KKwkgICBf KCJcCitTdGFydCBhIFNjaGVtZSBpbnRlcmFjdGl2ZSBwcm9tcHQuXG5cCitc blwKK1NjaGVtZSBzY3JpcHRpbmcgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlz IGNvcHkgb2YgR0RCLlxuXAorVGhpcyBjb21tYW5kIGlzIG9ubHkgYSBwbGFj ZWhvbGRlci4iKQorI2VuZGlmIC8qIEhBVkVfU0NIRU1FICovCisJICAgKTsK KyAgYWRkX2NvbV9hbGlhcyAoInNjbWkiLCAic2NoZW1lLWludGVyYWN0aXZl IiwgY2xhc3Nfb2JzY3VyZSwgMSk7CisKKyAgYWRkX2NvbSAoInNjaGVtZSIs IGNsYXNzX29ic2N1cmUsIHNjaGVtZV9jb21tYW5kLAorI2lmZGVmIEhBVkVf U0NIRU1FCisJICAgXygiXAorRXZhbHVhdGUgYSBTY2hlbWUgY29tbWFuZC5c blwKK1xuXAorVGhlIGNvbW1hbmQgY2FuIGJlIGdpdmVuIGFzIGFuIGFyZ3Vt ZW50LCBmb3IgaW5zdGFuY2U6XG5cCitcblwKKyAgICBzY2hlbWUgKHByaW50 IDIzKSA7O0ZJWE1FXG5cCitcblwKK0lmIG5vIGFyZ3VtZW50IGlzIGdpdmVu LCB0aGUgZm9sbG93aW5nIGxpbmVzIGFyZSByZWFkIGFuZCB1c2VkXG5cCith cyB0aGUgU2NoZW1lIGNvbW1hbmRzLiAgVHlwZSBhIGxpbmUgY29udGFpbmlu ZyBcImVuZFwiIHRvIGluZGljYXRlXG5cCit0aGUgZW5kIG9mIHRoZSBjb21t YW5kLiIpCisjZWxzZSAvKiBIQVZFX1NDSEVNRSAqLworCSAgIF8oIlwKK0V2 YWx1YXRlIGEgU2NoZW1lIGNvbW1hbmQuXG5cCitcblwKK1NjaGVtZSBzY3Jp cHRpbmcgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGNvcHkgb2YgR0RCLlxu XAorVGhpcyBjb21tYW5kIGlzIG9ubHkgYSBwbGFjZWhvbGRlci4iKQorI2Vu ZGlmIC8qIEhBVkVfU0NIRU1FICovCisJICAgKTsKKyAgYWRkX2NvbV9hbGlh cyAoInNjbSIsICJzY2hlbWUiLCBjbGFzc19vYnNjdXJlLCAxKTsKKworICBh ZGRfcHJlZml4X2NtZCAoInNjaGVtZSIsIGNsYXNzX29ic2N1cmUsIHNldF9z Y2hlbWVfY29tbWFuZCwKKwkJICBfKCJQcmVmaXggY29tbWFuZCBmb3Igc2No ZW1lIHByZWZlcmVuY2Ugc2V0dGluZ3MuIiksCisJCSAgJnNldF9zY2hlbWVf bGlzdCwgInNldCBzY2hlbWUgIiwgMCwKKwkJICAmc2V0bGlzdCk7CisgIGFk ZF9hbGlhc19jbWQgKCJzY20iLCAic2NoZW1lIiwgY2xhc3Nfb2JzY3VyZSwg MSwgJnNldGxpc3QpOworCisgIGFkZF9wcmVmaXhfY21kICgic2NoZW1lIiwg Y2xhc3Nfb2JzY3VyZSwgc2hvd19zY2hlbWVfY29tbWFuZCwKKwkJICBfKCJQ cmVmaXggY29tbWFuZCBmb3Igc2NoZW1lIHByZWZlcmVuY2Ugc2V0dGluZ3Mu IiksCisJCSAgJnNob3dfc2NoZW1lX2xpc3QsICJzaG93IHNjaGVtZSAiLCAw LAorCQkgICZzaG93bGlzdCk7CisgIGFkZF9hbGlhc19jbWQgKCJzY20iLCAi c2NoZW1lIiwgY2xhc3Nfb2JzY3VyZSwgMSwgJnNob3dsaXN0KTsKKworICBh ZGRfcHJlZml4X2NtZCAoInNjaGVtZSIsIGNsYXNzX29ic2N1cmUsIGluZm9f c2NoZW1lX2NvbW1hbmQsCisJCSAgXygiUHJlZml4IGNvbW1hbmQgZm9yIHNj aGVtZSBpbmZvIGRpc3BsYXlzLiIpLAorCQkgICZpbmZvX3NjaGVtZV9saXN0 LCAiaW5mbyBzY2hlbWUgIiwgMCwKKwkJICAmaW5mb2xpc3QpOworICBhZGRf aW5mb19hbGlhcyAoInNjbSIsICJzY2hlbWUiLCAxKTsKK30KKworLyogUHJv dmlkZSBhIHByb3RvdHlwZSB0byBzaWxlbmNlIC1XbWlzc2luZy1wcm90b3R5 cGVzLiAgKi8KK2V4dGVybiBpbml0aWFsaXplX2ZpbGVfZnR5cGUgX2luaXRp YWxpemVfc2NoZW1lOworCit2b2lkCitfaW5pdGlhbGl6ZV9zY2hlbWUgKHZv aWQpCit7CisgIGluc3RhbGxfZ2RiX2NvbW1hbmRzICgpOworCisjaWYgSEFW RV9TQ0hFTUUKKyAgLyogVGhlIEd1aWxlIGRvY3Mgc2F5IHNjbV9pbml0X2d1 aWxlIGlzbid0IGFzIHBvcnRhYmxlIGFzIHRoZSBvdGhlciBHdWlsZQorICAg ICBpbml0aWFsaXphdGlvbiByb3V0aW5lcy4gIEhvd2V2ZXIsIHRoaXMgaXMg dGhlIGVhc2llc3QgdG8gdXNlLgorICAgICBXZSBjYW4gc3dpdGNoIHRvIGEg bW9yZSBwb3J0YWJsZSByb3V0aW5lIGlmL3doZW4gdGhlIG5lZWQgYXJpc2Vz CisgICAgIGFuZCBpZiBpdCBjYW4gYmUgdXNlZCB3aXRoIGdkYi4gICovCisg IHNjbV9pbml0X2d1aWxlICgpOworICBzY21fY19ldmFsX3N0cmluZyAoIihk ZWZpbmUtbW9kdWxlIChnZGIpICM6dmVyc2lvbiAoMCkpIik7CisgIHNjbV9j X2RlZmluZV9tb2R1bGUgKCJnZGIiLCBpbml0aWFsaXplX2dkYl9tb2R1bGUs IE5VTEwpOworI2VuZGlmCit9CmRpZmYgLXJwTiAtVSAyIHNjaGVtZT0vc2No ZW1lLmggc2NoZW1lL3NjaGVtZS5oCi0tLSBzY2hlbWU9L3NjaGVtZS5oCTE5 NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKyBzY2hlbWUv c2NoZW1lLmgJMjAxMy0wOS0wNiAwNzo1NDoyMi4xNTI5Nzg1MjEgLTA3MDAK QEAgLTAsMCArMSwzNCBAQAorLyogR2VuZXJhbCBnZGIvc2NoZW1lIGNvZGUu CisKKyAgIENvcHlyaWdodCAoQykgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgor CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg YWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdEQl9T Q0hFTUVfSAorI2RlZmluZSBHREJfU0NIRU1FX0gKKworI2luY2x1ZGUgInNj cmlwdGluZy5oIgorCisvKiBUaGUgc3VmZml4IG9mIHBlci1vYmpmaWxlIHNj cmlwdHMgdG8gYXV0by1sb2FkLgorICAgRS5nLiBXaGVuIHRoZSBwcm9ncmFt IGxvYWRzIGxpYmZvby5zbywgbG9vayBmb3IgbGliZm9vLWdkYi5zY20uICAq LworLy8gVE9ETzogeHl6ZGplCisjZGVmaW5lIEdEQlNDTV9BVVRPX0ZJTEVf TkFNRSAiLWdkYi5zY20iCisKKyNpZmRlZiBIQVZFX1NDSEVNRQorZXh0ZXJu IGNvbnN0IHN0cnVjdCBzY3JpcHRfbGFuZyBzY2hlbWVfc2NyaXB0aW5nX2lu dGVyZmFjZTsKKyNlbmRpZgorCisjZW5kaWYgLyogR0RCX1NDSEVNRV9IICov CmRpZmYgLXJwTiAtVSAyIHNjaGVtZT0vc2NtLWJyZWFrcG9pbnQuYyBzY2hl bWUvc2NtLWJyZWFrcG9pbnQuYwotLS0gc2NoZW1lPS9zY20tYnJlYWtwb2lu dC5jCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKyBz Y2hlbWUvc2NtLWJyZWFrcG9pbnQuYwkyMDEzLTA5LTA2IDA3OjUxOjUzLjQ3 Njk2ODg2OSAtMDcwMApAQCAtMCwwICsxLDk0OCBAQAorLyogZ2RiL3NjaGVt ZSBpbnRlcmZhY2UgdG8gYnJlYWtwb2ludHMKKworICAgQ29weXJpZ2h0IChD KSAyMDA4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisK KyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKworICAgVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cisg ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhp cyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgImRlZnMuaCIKKyNpbmNsdWRl ICJ2YWx1ZS5oIgorI2luY2x1ZGUgImV4Y2VwdGlvbnMuaCIKKyNpbmNsdWRl ICJicmVha3BvaW50LmgiCisjaW5jbHVkZSAiZ2RiY21kLmgiCisjaW5jbHVk ZSAiZ2RidGhyZWFkLmgiCisjaW5jbHVkZSAib2JzZXJ2ZXIuaCIKKyNpbmNs dWRlICJjbGkvY2xpLXNjcmlwdC5oIgorI2luY2x1ZGUgImFkYS1sYW5nLmgi CisjaW5jbHVkZSAiYXJjaC11dGlscy5oIgorI2luY2x1ZGUgImxhbmd1YWdl LmgiCisjaW5jbHVkZSAic2NoZW1lLWludGVybmFsLmgiCisKKy8qIFRoZSBu YW1lIG9mIHRoaXMgdHlwZWRlZiBpcyBrbm93biB0byBicmVha3BvaW50Lmgu ICAqLworCit0eXBlZGVmIHN0cnVjdCBnZGJzY21fYnJlYWtwb2ludF9vYmpl Y3QKK3sKKyAgLyogVGhpcyBhbHdheXMgYXBwZWFycyBmaXJzdC4gICovCisg IGdkYl9zbW9iIGJhc2U7CisKKyAgLyogVGhlIGJyZWFrcG9pbnQgbnVtYmVy IGFjY29yZGluZyB0byBnZGIuCisgICAgIFRoaXMgaXMgcmVjb3JkZWQgaGVy ZSBiZWNhdXNlIEJQIHdpbGwgYmUgTlVMTCB3aGVuIGRlbGV0ZWQuICAqLwor ICBpbnQgbnVtYmVyOworCisgIC8qIFRoZSBnZGIgYnJlYWtwb2ludCBvYmpl Y3QsIG9yIE5VTEwgaWYgdGhlIGJyZWFrcG9pbnQgaGFzIGJlZW4gZGVsZXRl ZC4gICovCisgIHN0cnVjdCBicmVha3BvaW50ICpicDsKKworICAvKiBCYWNr bGluayB0byBvdXIgY29udGFpbmluZyBTQ00uCisgICAgIFRoaXMgaXMgbmVl ZGVkIHdoZW4gd2UgYXJlIGRlbGV0ZWQsIHdlIG5lZWQgdG8gdW5wcm90ZWN0 IHRoZSBvYmplY3QKKyAgICAgZnJvbSBHQy4gICovCisgIFNDTSBjb250YWlu aW5nX3NjbTsKKworICAvKiBBIHN0b3AgY29uZGl0aW9uIG9yICNmLiAgKi8K KyAgU0NNIHN0b3A7Cit9IGJyZWFrcG9pbnRfc21vYjsKKworc3RhdGljIGNv bnN0IGNoYXIgYnJlYWtwb2ludF9zbW9iX25hbWVbXSA9ICJnZGI6YnJlYWtw b2ludCI7CisKKy8qIFRoZSB0YWcgR3VpbGUga25vd3MgdGhlIGJyZWFrcG9p bnQgc21vYiBieS4gICovCitzdGF0aWMgc2NtX3RfYml0cyBicmVha3BvaW50 X3Ntb2JfdGFnOworCisvKiBWYXJpYWJsZSB1c2VkIHRvIHBhc3MgaW5mb3Jt YXRpb24gYmV0d2VlbiB0aGUgYnJlYWtwb2ludF9zbW9iCisgICBjb25zdHJ1 Y3RvciBhbmQgdGhlIGJyZWFrcG9pbnQtY3JlYXRlZCBob29rIGZ1bmN0aW9u LiAgKi8KK3N0YXRpYyBTQ00gcGVuZGluZ19icmVha3BvaW50X3Ntb2IgPSBT Q01fQk9PTF9GOworCisvKiBUaGlzIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB2 YXJpb3VzIGdkYi5icF8qIGNvbnN0YW50cy4gICovCitzdHJ1Y3Qgc2NtYnBf Y29kZQoreworICAvKiBUaGUgbmFtZS4gICovCisgIGNvbnN0IGNoYXIgKm5h bWU7CisgIC8qIFRoZSBjb2RlLiAgKi8KKyAgaW50IGNvZGU7Cit9OworCisj ZGVmaW5lIEFTU0VSVF9WQUxJRF9CS1BUKHNlbGYsIGJwX3Ntb2IsIGZ1bmNf bmFtZSkJCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgYXNzZXJ0X2lzX2Jy ZWFrcG9pbnQgKChzZWxmKSwgKGZ1bmNfbmFtZSkpOwkJCQlcCisgICAgYnBf c21vYiA9IChicmVha3BvaW50X3Ntb2IgKikgU0NNX1NNT0JfREFUQSAoc2Vs Zik7CQkJXAorICAgIGFzc2VydF9pc192YWxpZF9icmVha3BvaW50ICgoYnBf c21vYiksIChmdW5jX25hbWUpLCAoc2VsZikpOwlcCisgIH0gd2hpbGUgKDAp CisKKy8qIEVudHJpZXMgcmVsYXRlZCB0byB0aGUgdHlwZSBvZiB1c2VyIHNl dCBicmVha3BvaW50cy4gICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Nt YnBfY29kZSBzY21icF9jb2Rlc1tdID0KK3sKKyAgeyAiQlBfTk9ORSIsIGJw X25vbmUgfSwKKyAgeyAiQlBfQlJFQUtQT0lOVCIsIGJwX2JyZWFrcG9pbnQg fSwKKyAgeyAiQlBfV0FUQ0hQT0lOVCIsIGJwX3dhdGNocG9pbnQgfSwKKyAg eyAiQlBfSEFSRFdBUkVfV0FUQ0hQT0lOVCIsIGJwX2hhcmR3YXJlX3dhdGNo cG9pbnQgfSwKKyAgeyAiQlBfUkVBRF9XQVRDSFBPSU5UIiwgYnBfcmVhZF93 YXRjaHBvaW50IH0sCisgIHsgIkJQX0FDQ0VTU19XQVRDSFBPSU5UIiwgYnBf YWNjZXNzX3dhdGNocG9pbnQgfSwKKyAgeyBOVUxMIH0gLyogU2VudGluZWwu ICAqLworfTsKKworLyogRW50cmllcyByZWxhdGVkIHRvIHRoZSB0eXBlIG9m IHdhdGNocG9pbnQuICAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNjbWJw X2NvZGUgc2NtYnBfd2F0Y2hfdHlwZXNbXSA9Cit7CisgIHsgIldQX1JFQUQi LCBod19yZWFkIH0sCisgIHsgIldQX1dSSVRFIiwgaHdfd3JpdGUgfSwKKyAg eyAiV1BfQUNDRVNTIiwgaHdfYWNjZXNzIH0sCisgIHsgTlVMTCB9IC8qIFNl bnRpbmVsLiAgKi8KK307CisKK3N0YXRpYyBTQ00KK21hcmtfYnJlYWtwb2lu dF9zbW9iIChTQ00gc21vYikKK3sKKyAgYnJlYWtwb2ludF9zbW9iICpicF9z bW9iID0KKyAgICAoYnJlYWtwb2ludF9zbW9iICopIFNDTV9TTU9CX0RBVEEg KHNtb2IpOworCisgIHNjbV9nY19tYXJrIChicF9zbW9iLT5jb250YWluaW5n X3NjbSk7CisgIHNjbV9nY19tYXJrIChicF9zbW9iLT5zdG9wKTsKKyAgLyog RG8gdGhpcyBsYXN0LiAgKi8KKyAgcmV0dXJuIGdkYnNjbV9tYXJrX2dzbW9i ICgmYnBfc21vYi0+YmFzZSk7Cit9CisKK3N0YXRpYyBzaXplX3QKK2ZyZWVf YnJlYWtwb2ludF9zbW9iIChTQ00gc21vYikKK3sKKyAgYnJlYWtwb2ludF9z bW9iICpicF9zbW9iID0KKyAgICAoYnJlYWtwb2ludF9zbW9iICopIFNDTV9T TU9CX0RBVEEgKHNtb2IpOworCisgIGlmIChicF9zbW9iLT5icCkKKyAgICBi cF9zbW9iLT5icC0+c2NtX2JwX29iamVjdCA9IE5VTEw7CisgIHJldHVybiAw OworfQorCitzdGF0aWMgaW50CitwcmludF9icmVha3BvaW50X3Ntb2IgKFND TSBzbW9iLCBTQ00gcG9ydCwgc2NtX3ByaW50X3N0YXRlICpwc3RhdGUpCit7 CisgIGJyZWFrcG9pbnRfc21vYiAqYnBfc21vYiA9CisgICAgKGJyZWFrcG9p bnRfc21vYiAqKSBTQ01fU01PQl9EQVRBIChzbW9iKTsKKworICBnZGJzY21f cHJpbnRmIChwb3J0LCAiIzwlcyAiLCBicmVha3BvaW50X3Ntb2JfbmFtZSk7 CisKKyAgLy8gVE9ETzogV2hhdCBlbHNlIHRvIGRpc3BsYXk/CisKKyAgc2Nt X3B1dHMgKCI+IiwgcG9ydCk7CisKKyAgc2NtX3JlbWVtYmVyX3VwdG9faGVy ZV8xIChzbW9iKTsKKworICAvKiBOb24temVybyBtZWFucyBzdWNjZXNzLiAg Ki8KKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBTQ00KK21ha2VfYnJlYWtw b2ludF9zbW9iICh2b2lkKQoreworICBicmVha3BvaW50X3Ntb2IgKmJwX3Nt b2IgPSAoYnJlYWtwb2ludF9zbW9iICopCisgICAgc2NtX2djX21hbGxvYyAo c2l6ZW9mIChicmVha3BvaW50X3Ntb2IpLCBicmVha3BvaW50X3Ntb2JfbmFt ZSk7CisgIFNDTSBzbW9iOworCisgIGJwX3Ntb2ItPm51bWJlciA9IC0xOwor ICBicF9zbW9iLT5icCA9IE5VTEw7CisgIGJwX3Ntb2ItPnN0b3AgPSBTQ01f Qk9PTF9GOworICBzbW9iID0gc2NtX25ld19zbW9iIChicmVha3BvaW50X3Nt b2JfdGFnLCAoc2NtX3RfYml0cykgYnBfc21vYik7CisgIGJwX3Ntb2ItPmNv bnRhaW5pbmdfc2NtID0gc21vYjsKKyAgZ2Ric2NtX2luaXRfZ3Ntb2IgKHNt b2IsICZicF9zbW9iLT5iYXNlLCBicmVha3BvaW50X3Ntb2JfbmFtZSk7CisK KyAgcmV0dXJuIHNtb2I7Cit9CisKKy8qIFJldHVybiBub24temVybyBpZiBT Q00gaXMgYSBicmVha3BvaW50IHNtb2IuICAqLworCitzdGF0aWMgaW50Citn ZGJzY21faXNfYnJlYWtwb2ludCAoU0NNIHNjbSkKK3sKKyAgaWYgKFNDTV9J TVAgKHNjbSkpCisgICAgcmV0dXJuIDA7CisgIHJldHVybiBTQ01fVFlQMTYg KHNjbSkgPT0gYnJlYWtwb2ludF9zbW9iX3RhZzsKK30KKworc3RhdGljIFND TQorZ2Ric2NtX2JyZWFrcG9pbnRfcCAoU0NNIHNjbSkKK3sKKyAgcmV0dXJu IHNjbV9mcm9tX2Jvb2wgKGdkYnNjbV9pc19icmVha3BvaW50IChzY20pKTsK K30KKwwKKy8qIFJldHVybiBub24temVybyBpZiBicmVha3BvaW50IEIgaXMg dmFsaWQuICAqLworCitzdGF0aWMgaW50CiticHNjbV9pc192YWxpZCAoYnJl YWtwb2ludF9zbW9iICpzZWxmX2JwKQoreworICByZXR1cm4gc2VsZl9icC0+ YnAgIT0gTlVMTDsKK30KKworLyogVGhyb3cgYSBTY2hlbWUgZXJyb3IgaWYg U0VMRiBpcyBub3QgYSBicmVha3BvaW50IHNtb2IuICAqLworCitzdGF0aWMg dm9pZAorYXNzZXJ0X2lzX2JyZWFrcG9pbnQgKFNDTSBzZWxmLCBjb25zdCBj aGFyICpmdW5jX25hbWUpCit7CisgIFNDTV9BU1NFUlRfVFlQRSAoZ2Ric2Nt X2lzX2JyZWFrcG9pbnQgKHNlbGYpLCBzZWxmLCAwLCBmdW5jX25hbWUsCisJ CSAgIGJyZWFrcG9pbnRfc21vYl9uYW1lKTsKK30KKworLyogVGhyb3cgYSBT Y2hlbWUgZXJyb3IgaWYgU0VMRl9CUCBpcyBub3QgYSB2YWxpZCBicmVha3Bv aW50IHNtb2IuICAqLworCitzdGF0aWMgdm9pZAorYXNzZXJ0X2lzX3ZhbGlk X2JyZWFrcG9pbnQgKGJyZWFrcG9pbnRfc21vYiAqc2VsZl9icCwKKwkJCSAg ICBjb25zdCBjaGFyICpmdW5jX25hbWUsIFNDTSBzZWxmKQoreworICBpZiAo IWJwc2NtX2lzX3ZhbGlkIChzZWxmX2JwKSkKKyAgICBzY21fbWlzY19lcnJv ciAoZnVuY19uYW1lLCAiaW52YWxpZCBicmVha3BvaW50Iiwgc2VsZik7Cit9 CisKKy8qIFNjaGVtZSBmdW5jdGlvbiB3aGljaCBjaGVja3MgdGhlIHZhbGlk aXR5IG9mIGEgYnJlYWtwb2ludCBvYmplY3QuICAqLworCitzdGF0aWMgU0NN CiticHNjbV92YWxpZF9wIChTQ00gc2VsZikKK3sKKyAgYnJlYWtwb2ludF9z bW9iICpzZWxmX2JwOworCisgIGFzc2VydF9pc19icmVha3BvaW50IChzZWxm LCBGVU5DX05BTUUpOworICBzZWxmX2JwID0gKGJyZWFrcG9pbnRfc21vYiAq KSBTQ01fU01PQl9EQVRBIChzZWxmKTsKKworICByZXR1cm4gc2NtX2Zyb21f Ym9vbCAoYnBzY21faXNfdmFsaWQgKHNlbGZfYnApKTsKK30KKworLyogU2No ZW1lIGZ1bmN0aW9uIHRvIHRlc3Qgd2hldGhlciBvciBub3QgdGhlIGJyZWFr cG9pbnQgaXMgZW5hYmxlZC4gICovCisKK3N0YXRpYyBTQ00KK2Jwc2NtX2Vu YWJsZWRfcCAoU0NNIHNlbGYpCit7CisgIGJyZWFrcG9pbnRfc21vYiAqc2Vs Zl9icDsKKworICBBU1NFUlRfVkFMSURfQktQVCAoc2VsZiwgc2VsZl9icCwg RlVOQ19OQU1FKTsKKworICByZXR1cm4gc2NtX2Zyb21fYm9vbCAoc2VsZl9i cC0+YnAtPmVuYWJsZV9zdGF0ZSA9PSBicF9lbmFibGVkKTsKK30KKworLyog U2NoZW1lIGZ1bmN0aW9uIHRvIHNldCB0aGUgZW5hYmxlZCBzdGF0ZSBvZiBh IGJyZWFrcG9pbnQuICAqLworCitzdGF0aWMgU0NNCiticHNjbV9zZXRfZW5h YmxlZF94IChTQ00gc2VsZiwgU0NNIG5ld3ZhbHVlKQoreworICBicmVha3Bv aW50X3Ntb2IgKnNlbGZfYnA7CisgIHZvbGF0aWxlIHN0cnVjdCBnZGJfZXhj ZXB0aW9uIGV4Y2VwdDsKKworICBBU1NFUlRfVkFMSURfQktQVCAoc2VsZiwg c2VsZl9icCwgRlVOQ19OQU1FKTsKKyAgU0NNX0FTU0VSVF9UWVBFIChnZGJz Y21faXNfYm9vbCAobmV3dmFsdWUpLCBuZXd2YWx1ZSwgMSwgRlVOQ19OQU1F LAorCQkgICAiYm9vbGVhbiIpOworCisgIFRSWV9DQVRDSCAoZXhjZXB0LCBS RVRVUk5fTUFTS19BTEwpCisgICAgeworICAgICAgaWYgKGdkYnNjbV9pc190 cnVlIChuZXd2YWx1ZSkpCisJZW5hYmxlX2JyZWFrcG9pbnQgKHNlbGZfYnAt PmJwKTsKKyAgICAgIGVsc2UKKwlkaXNhYmxlX2JyZWFrcG9pbnQgKHNlbGZf YnAtPmJwKTsKKyAgICB9CisgIEdEQl9TQ01fSEFORExFX0VYQ0VQVElPTiAo ZXhjZXB0KTsKKworICByZXR1cm4gU0NNX1VOU1BFQ0lGSUVEOworfQorCisv KiBTY2hlbWUgZnVuY3Rpb24gdG8gdGVzdCB3aGV0aGVyIG9yIG5vdCB0aGUg YnJlYWtwb2ludCBpcyBzaWxlbnQuICAqLworCitzdGF0aWMgU0NNCiticHNj bV9zaWxlbnRfcCAoU0NNIHNlbGYpCit7CisgIGJyZWFrcG9pbnRfc21vYiAq c2VsZl9icDsKKworICBBU1NFUlRfVkFMSURfQktQVCAoc2VsZiwgc2VsZl9i cCwgRlVOQ19OQU1FKTsKKworICByZXR1cm4gc2NtX2Zyb21fYm9vbCAoc2Vs Zl9icC0+YnAtPnNpbGVudCk7Cit9CisKKy8qIFNjaGVtZSBmdW5jdGlvbiB0 byBzZXQgdGhlICdzaWxlbnQnIHN0YXRlIG9mIGEgYnJlYWtwb2ludC4gICov CisKK3N0YXRpYyBTQ00KK2Jwc2NtX3NldF9zaWxlbnRfeCAoU0NNIHNlbGYs IFNDTSBuZXd2YWx1ZSkKK3sKKyAgYnJlYWtwb2ludF9zbW9iICpzZWxmX2Jw OworCisgIEFTU0VSVF9WQUxJRF9CS1BUIChzZWxmLCBzZWxmX2JwLCBGVU5D X05BTUUpOworICBTQ01fQVNTRVJUX1RZUEUgKGdkYnNjbV9pc19ib29sIChu ZXd2YWx1ZSksIG5ld3ZhbHVlLCAxLCBGVU5DX05BTUUsCisJCSAgICJib29s ZWFuIik7CisKKyAgYnJlYWtwb2ludF9zZXRfc2lsZW50IChzZWxmX2JwLT5i cCwgZ2Ric2NtX2lzX3RydWUgKG5ld3ZhbHVlKSk7CisKKyAgcmV0dXJuIFND TV9VTlNQRUNJRklFRDsKK30KKworLyogU2NoZW1lIGZ1bmN0aW9uIHRvIGdl dCB0aGUgYnJlYWtwb2ludCdzIGlnbm9yZSBjb3VudC4gICovCisKK3N0YXRp YyBTQ00KK2Jwc2NtX3JlZl9pZ25vcmVfY291bnQgKFNDTSBzZWxmKQorewor ICBicmVha3BvaW50X3Ntb2IgKnNlbGZfYnA7CisKKyAgQVNTRVJUX1ZBTElE X0JLUFQgKHNlbGYsIHNlbGZfYnAsIEZVTkNfTkFNRSk7CisKKyAgcmV0dXJu IHNjbV9mcm9tX2xvbmcgKHNlbGZfYnAtPmJwLT5pZ25vcmVfY291bnQpOwor fQorCisvKiBTY2hlbWUgZnVuY3Rpb24gdG8gc2V0IHRoZSBpZ25vcmUgY291 bnQgb2YgYSBicmVha3BvaW50LiAgKi8KKworc3RhdGljIFNDTQorYnBzY21f c2V0X2lnbm9yZV9jb3VudF94IChTQ00gc2VsZiwgU0NNIG5ld3ZhbHVlKQor eworICBicmVha3BvaW50X3Ntb2IgKnNlbGZfYnA7CisgIGxvbmcgdmFsdWU7 CisgIHZvbGF0aWxlIHN0cnVjdCBnZGJfZXhjZXB0aW9uIGV4Y2VwdDsKKwor ICBBU1NFUlRfVkFMSURfQktQVCAoc2VsZiwgc2VsZl9icCwgRlVOQ19OQU1F KTsKKworICBpZiAoIXNjbV9pc19zaWduZWRfaW50ZWdlciAobmV3dmFsdWUs IExPTkdfTUlOLCBMT05HX01BWCkpCisgICAgc2NtX21pc2NfZXJyb3IgKEZV TkNfTkFNRSwgImlnbm9yZV9jb3VudCBtdXN0IGJlIGFuIGludGVnZXIiLCBu ZXd2YWx1ZSk7CisKKyAgdmFsdWUgPSBzY21fdG9fbG9uZyAobmV3dmFsdWUp OworICBpZiAodmFsdWUgPCAwKQorICAgIHZhbHVlID0gMDsKKworICBUUllf Q0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQorICAgIHsKKyAgICAg IHNldF9pZ25vcmVfY291bnQgKHNlbGZfYnAtPm51bWJlciwgKGludCkgdmFs dWUsIDApOworICAgIH0KKyAgR0RCX1NDTV9IQU5ETEVfRVhDRVBUSU9OIChl eGNlcHQpOworCisgIHJldHVybiBTQ01fVU5TUEVDSUZJRUQ7Cit9CisKKy8q IFNjaGVtZSBmdW5jdGlvbiB0byBnZXQgdGhlIGJyZWFrcG9pbnQncyBoaXQg Y291bnQuICAqLworCitzdGF0aWMgU0NNCiticHNjbV9yZWZfaGl0X2NvdW50 IChTQ00gc2VsZikKK3sKKyAgYnJlYWtwb2ludF9zbW9iICpzZWxmX2JwOwor CisgIEFTU0VSVF9WQUxJRF9CS1BUIChzZWxmLCBzZWxmX2JwLCBGVU5DX05B TUUpOworCisgIHJldHVybiBzY21fZnJvbV9sb25nIChzZWxmX2JwLT5icC0+ aGl0X2NvdW50KTsKK30KKworLyogU2NoZW1lIGZ1bmN0aW9uIHRvIHNldCB0 aGUgaGl0IGNvdW50IG9mIGEgYnJlYWtwb2ludC4gICovCisKK3N0YXRpYyBT Q00KK2Jwc2NtX3NldF9oaXRfY291bnRfeCAoU0NNIHNlbGYsIFNDTSBuZXd2 YWx1ZSkKK3sKKyAgYnJlYWtwb2ludF9zbW9iICpzZWxmX2JwOworICBsb25n IHZhbHVlOworICB2b2xhdGlsZSBzdHJ1Y3QgZ2RiX2V4Y2VwdGlvbiBleGNl cHQ7CisKKyAgQVNTRVJUX1ZBTElEX0JLUFQgKHNlbGYsIHNlbGZfYnAsIEZV TkNfTkFNRSk7CisKKyAgaWYgKCFzY21faXNfc2lnbmVkX2ludGVnZXIgKG5l d3ZhbHVlLCBMT05HX01JTiwgTE9OR19NQVgpKQorICAgIHNjbV9taXNjX2Vy cm9yIChGVU5DX05BTUUsICJoaXRfY291bnQgbXVzdCBiZSBhbiBpbnRlZ2Vy IiwgbmV3dmFsdWUpOworCisgIHZhbHVlID0gc2NtX3RvX2xvbmcgKG5ld3Zh bHVlKTsKKyAgaWYgKHZhbHVlIDwgMCkKKyAgICB2YWx1ZSA9IDA7CisKKyAg aWYgKHZhbHVlICE9IDApCisgICAgc2NtX21pc2NfZXJyb3IgKEZVTkNfTkFN RSwgImhpdF9jb3VudCBtdXN0IGJlIHplcm8iLCBuZXd2YWx1ZSk7CisKKyAg c2VsZl9icC0+YnAtPmhpdF9jb3VudCA9IDA7CisKKyAgcmV0dXJuIFNDTV9V TlNQRUNJRklFRDsKK30KKworLyogU2NoZW1lIGZ1bmN0aW9uIHRvIGdldCB0 aGUgYnJlYWtwb2ludCdzIHRocmVhZCBJRC4gICovCisKK3N0YXRpYyBTQ00K K2Jwc2NtX3JlZl90aHJlYWQgKFNDTSBzZWxmKQoreworICBicmVha3BvaW50 X3Ntb2IgKnNlbGZfYnA7CisKKyAgQVNTRVJUX1ZBTElEX0JLUFQgKHNlbGYs IHNlbGZfYnAsIEZVTkNfTkFNRSk7CisKKyAgaWYgKHNlbGZfYnAtPmJwLT50 aHJlYWQgPT0gLTEpCisgICAgcmV0dXJuIFNDTV9CT09MX0Y7CisKKyAgcmV0 dXJuIHNjbV9mcm9tX2xvbmcgKHNlbGZfYnAtPmJwLT50aHJlYWQpOworfQor CisvKiBTY2hlbWUgZnVuY3Rpb24gdG8gc2V0IHRoZSB0aHJlYWQgb2YgYSBi cmVha3BvaW50LiAgKi8KKworc3RhdGljIFNDTQorYnBzY21fc2V0X3RocmVh ZF94IChTQ00gc2VsZiwgU0NNIG5ld3ZhbHVlKQoreworICBicmVha3BvaW50 X3Ntb2IgKnNlbGZfYnA7CisgIGxvbmcgaWQ7CisKKyAgQVNTRVJUX1ZBTElE X0JLUFQgKHNlbGYsIHNlbGZfYnAsIEZVTkNfTkFNRSk7CisKKyAgaWYgKHNj bV9pc19zaWduZWRfaW50ZWdlciAobmV3dmFsdWUsIExPTkdfTUlOLCBMT05H X01BWCkpCisgICAgeworICAgICAgaWQgPSBzY21fdG9fbG9uZyAobmV3dmFs dWUpOworICAgICAgaWYgKCEgdmFsaWRfdGhyZWFkX2lkIChpZCkpCisJc2Nt X21pc2NfZXJyb3IgKEZVTkNfTkFNRSwgImludmFsaWQgdGhyZWFkIGlkIiwg bmV3dmFsdWUpOworICAgIH0KKyAgZWxzZSBpZiAobmV3dmFsdWUgPT0gU0NN X0JPT0xfRikKKyAgICBpZCA9IC0xOworICBlbHNlCisgICAgeworICAgICAg c2NtX21pc2NfZXJyb3IgKEZVTkNfTkFNRSwgInRocmVhZCBpZCBtdXN0IGJl IGFuIGludGVnZXIgb3IgI2YiLAorCQkgICAgICBuZXd2YWx1ZSk7CisgICAg fQorCisgIGJyZWFrcG9pbnRfc2V0X3RocmVhZCAoc2VsZl9icC0+YnAsIGlk KTsKKworICByZXR1cm4gU0NNX1VOU1BFQ0lGSUVEOworfQorCisvKiBTY2hl bWUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBicmVha3BvaW50J3MgdGFzayBJRCAo aW4gQWRhKS4gICovCisKK3N0YXRpYyBTQ00KK2Jwc2NtX3JlZl90YXNrIChT Q00gc2VsZikKK3sKKyAgYnJlYWtwb2ludF9zbW9iICpzZWxmX2JwOworCisg IEFTU0VSVF9WQUxJRF9CS1BUIChzZWxmLCBzZWxmX2JwLCBGVU5DX05BTUUp OworCisgIGlmIChzZWxmX2JwLT5icC0+dGFzayA9PSAwKQorICAgIHJldHVy biBTQ01fQk9PTF9GOworCisgIHJldHVybiBzY21fZnJvbV9sb25nIChzZWxm X2JwLT5icC0+dGFzayk7Cit9CisKKy8qIFNjaGVtZSBmdW5jdGlvbiB0byBz ZXQgdGhlIChBZGEpIHRhc2sgb2YgYSBicmVha3BvaW50LiAgKi8KKworc3Rh dGljIFNDTQorYnBzY21fc2V0X3Rhc2tfeCAoU0NNIHNlbGYsIFNDTSBuZXd2 YWx1ZSkKK3sKKyAgYnJlYWtwb2ludF9zbW9iICpzZWxmX2JwOworICBsb25n IGlkOworICBpbnQgdmFsaWRfaWQgPSAwOworICB2b2xhdGlsZSBzdHJ1Y3Qg Z2RiX2V4Y2VwdGlvbiBleGNlcHQ7CisKKyAgQVNTRVJUX1ZBTElEX0JLUFQg KHNlbGYsIHNlbGZfYnAsIEZVTkNfTkFNRSk7CisKKyAgaWYgKHNjbV9pc19z aWduZWRfaW50ZWdlciAobmV3dmFsdWUsIExPTkdfTUlOLCBMT05HX01BWCkp CisgICAgeworICAgICAgaWQgPSBzY21fdG9fbG9uZyAobmV3dmFsdWUpOwor CisgICAgICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQor CXsKKwkgIHZhbGlkX2lkID0gdmFsaWRfdGFza19pZCAoaWQpOworCX0KKyAg ICAgIEdEQl9TQ01fSEFORExFX0VYQ0VQVElPTiAoZXhjZXB0KTsKKworICAg ICAgaWYgKCEgdmFsaWRfaWQpCisJc2NtX21pc2NfZXJyb3IgKEZVTkNfTkFN RSwgImludmFsaWQgdGFzayBpZCIsIG5ld3ZhbHVlKTsKKyAgICB9CisgIGVs c2UgaWYgKG5ld3ZhbHVlID09IFNDTV9CT09MX0YpCisgICAgaWQgPSAwOwor ICBlbHNlCisgICAgc2NtX21pc2NfZXJyb3IgKEZVTkNfTkFNRSwgInRhc2sg aWQgbXVzdCBiZSBhbiBpbnRlZ2VyIG9yICNmIiwgbmV3dmFsdWUpOworCisg IGJyZWFrcG9pbnRfc2V0X3Rhc2sgKHNlbGZfYnAtPmJwLCBpZCk7CisKKyAg cmV0dXJuIFNDTV9VTlNQRUNJRklFRDsKK30KKworLyogU2NoZW1lIGZ1bmN0 aW9uIHRvIGdldCB0aGUgbG9jYXRpb24gb2YgYSBicmVha3BvaW50LiAgKi8K Kworc3RhdGljIFNDTQorYnBzY21fcmVmX2xvY2F0aW9uIChTQ00gc2VsZikK K3sKKyAgYnJlYWtwb2ludF9zbW9iICpzZWxmX2JwOworICBjaGFyICpzdHI7 CisKKyAgQVNTRVJUX1ZBTElEX0JLUFQgKHNlbGYsIHNlbGZfYnAsIEZVTkNf TkFNRSk7CisKKyAgaWYgKHNlbGZfYnAtPmJwLT50eXBlICE9IGJwX2JyZWFr cG9pbnQpCisgICAgcmV0dXJuIFNDTV9CT09MX0Y7CisKKyAgc3RyID0gc2Vs Zl9icC0+YnAtPmFkZHJfc3RyaW5nOworICBpZiAoISBzdHIpCisgICAgc3Ry ID0gIiI7CisKKyAgLy9UT0RPOiBob3N0IGNoYXJzZXQKKyAgcmV0dXJuIGdk YnNjbV9jX3RvX3NjbV9zdHJpbmcgKHN0cik7Cit9CisKKy8qIFNjaGVtZSBm dW5jdGlvbiB0byBnZXQgdGhlIGJyZWFrcG9pbnQgZXhwcmVzc2lvbi4gICov CisKK3N0YXRpYyBTQ00KK2Jwc2NtX3JlZl9leHByZXNzaW9uIChTQ00gc2Vs ZikKK3sKKyAgYnJlYWtwb2ludF9zbW9iICpzZWxmX2JwOworICBjaGFyICpz dHI7CisgIHN0cnVjdCB3YXRjaHBvaW50ICp3cDsKKworICBBU1NFUlRfVkFM SURfQktQVCAoc2VsZiwgc2VsZl9icCwgRlVOQ19OQU1FKTsKKworICBpZiAo IWlzX3dhdGNocG9pbnQgKHNlbGZfYnAtPmJwKSkKKyAgICByZXR1cm4gU0NN X0JPT0xfRjsKKworICB3cCA9IChzdHJ1Y3Qgd2F0Y2hwb2ludCAqKSBzZWxm X2JwLT5icDsKKworICBzdHIgPSB3cC0+ZXhwX3N0cmluZzsKKyAgaWYgKCEg c3RyKQorICAgIHN0ciA9ICIiOworCisgIC8vVE9ETzogaG9zdCBjaGFyc2V0 CisgIHJldHVybiBnZGJzY21fY190b19zY21fc3RyaW5nIChzdHIpOworfQor CisvKiBTY2hlbWUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBjb25kaXRpb24gZXhw cmVzc2lvbiBvZiBhIGJyZWFrcG9pbnQuICAqLworCitzdGF0aWMgU0NNCiti cHNjbV9yZWZfY29uZGl0aW9uIChTQ00gc2VsZikKK3sKKyAgYnJlYWtwb2lu dF9zbW9iICpzZWxmX2JwOworICBjaGFyICpzdHI7CisKKyAgQVNTRVJUX1ZB TElEX0JLUFQgKHNlbGYsIHNlbGZfYnAsIEZVTkNfTkFNRSk7CisKKyAgc3Ry ID0gc2VsZl9icC0+YnAtPmNvbmRfc3RyaW5nOworICBpZiAoISBzdHIpCisg ICAgcmV0dXJuIFNDTV9CT09MX0Y7CisKKyAgLy9UT0RPOiBob3N0IGNoYXJz ZXQKKyAgcmV0dXJuIGdkYnNjbV9jX3RvX3NjbV9zdHJpbmcgKHN0cik7Cit9 CisKKy8qIFNjaGVtZSBmdW5jdGlvbiB0byBzZXQgdGhlIGNvbmRpdGlvbiBv ZiBhIGJyZWFrcG9pbnQuICAqLworCitzdGF0aWMgU0NNCiticHNjbV9zZXRf Y29uZGl0aW9uX3ggKFNDTSBzZWxmLCBTQ00gbmV3dmFsdWUpCit7CisgIGJy ZWFrcG9pbnRfc21vYiAqc2VsZl9icDsKKyAgY2hhciAqZXhwOworICB2b2xh dGlsZSBzdHJ1Y3QgZ2RiX2V4Y2VwdGlvbiBleGNlcHQ7CisKKyAgQVNTRVJU X1ZBTElEX0JLUFQgKHNlbGYsIHNlbGZfYnAsIEZVTkNfTkFNRSk7CisgIFND TV9BU1NFUlRfVFlQRSAoc2NtX2lzX3N0cmluZyAobmV3dmFsdWUpLCBuZXd2 YWx1ZSwgMSwgRlVOQ19OQU1FLCAic3RyaW5nIik7CisKKyAgaWYgKGdkYnNj bV9pc19mYWxzZSAobmV3dmFsdWUpKQorICAgIGV4cCA9IE5VTEw7CisgIGVs c2UKKyAgICB7CisgICAgICAvL1RPRE86IGhvc3QgY2hhcnNldAorICAgICAg ZXhwID0gZ2Ric2NtX3NjbV90b19jX3N0cmluZyAobmV3dmFsdWUpOworICAg IH0KKworICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQor ICAgIHsKKyAgICAgIHNldF9icmVha3BvaW50X2NvbmRpdGlvbiAoc2VsZl9i cC0+YnAsIGV4cCA/IGV4cCA6ICIiLCAwKTsKKyAgICB9CisKKyAgeGZyZWUg KGV4cCk7CisKKyAgR0RCX1NDTV9IQU5ETEVfRVhDRVBUSU9OIChleGNlcHQp OworCisgIHJldHVybiBTQ01fVU5TUEVDSUZJRUQ7Cit9CisKKy8qIFNjaGVt ZSBmdW5jdGlvbiB0byBnZXQgdGhlIGNvbW1hbmRzIGF0dGFjaGVkIHRvIGEg YnJlYWtwb2ludC4gICovCisKK3N0YXRpYyBTQ00KK2Jwc2NtX3JlZl9jb21t YW5kcyAoU0NNIHNlbGYpCit7CisgIGJyZWFrcG9pbnRfc21vYiAqc2VsZl9i cDsKKyAgc3RydWN0IGJyZWFrcG9pbnQgKmJwOworICBsb25nIGxlbmd0aDsK KyAgdm9sYXRpbGUgc3RydWN0IGdkYl9leGNlcHRpb24gZXhjZXB0OworICBz dHJ1Y3QgdWlfZmlsZSAqc3RyaW5nX2ZpbGU7CisgIHN0cnVjdCBjbGVhbnVw ICpjaGFpbjsKKyAgU0NNIHJlc3VsdDsKKyAgY2hhciAqY21kc3RyOworCisg IEFTU0VSVF9WQUxJRF9CS1BUIChzZWxmLCBzZWxmX2JwLCBGVU5DX05BTUUp OworICBicCA9IHNlbGZfYnAtPmJwOworCisgIGlmIChicC0+Y29tbWFuZHMg PT0gTlVMTCkKKyAgICByZXR1cm4gU0NNX0JPT0xfRjsKKworICBzdHJpbmdf ZmlsZSA9IG1lbV9maWxlb3BlbiAoKTsKKyAgY2hhaW4gPSBtYWtlX2NsZWFu dXBfdWlfZmlsZV9kZWxldGUgKHN0cmluZ19maWxlKTsKKworICB1aV9vdXRf cmVkaXJlY3QgKGN1cnJlbnRfdWlvdXQsIHN0cmluZ19maWxlKTsKKyAgVFJZ X0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKKyAgICB7CisgICAg ICBwcmludF9jb21tYW5kX2xpbmVzIChjdXJyZW50X3Vpb3V0LCBicmVha3Bv aW50X2NvbW1hbmRzIChicCksIDApOworICAgIH0KKyAgdWlfb3V0X3JlZGly ZWN0IChjdXJyZW50X3Vpb3V0LCBOVUxMKTsKKyAgaWYgKGV4Y2VwdC5yZWFz b24gPCAwKQorICAgIHsKKyAgICAgIGRvX2NsZWFudXBzIChjaGFpbik7Cisg ICAgICBnZGJzY21fY29udmVydF9nZGJfZXhjZXB0aW9uIChleGNlcHQpOwor ICAgIH0KKworICBjbWRzdHIgPSB1aV9maWxlX3hzdHJkdXAgKHN0cmluZ19m aWxlLCAmbGVuZ3RoKTsKKyAgbWFrZV9jbGVhbnVwICh4ZnJlZSwgY21kc3Ry KTsKKyAgLy9UT0RPOiBob3N0IGNoYXJzZXQKKyAgcmVzdWx0ID0gZ2Ric2Nt X2NfdG9fc2NtX3N0cmluZyAoY21kc3RyKTsKKyAgZG9fY2xlYW51cHMgKGNo YWluKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogU2NoZW1lIGZ1bmN0 aW9uIHRvIGdldCB0aGUgYnJlYWtwb2ludCB0eXBlLiAgKi8KKworc3RhdGlj IFNDTQorYnBzY21fcmVmX3R5cGUgKFNDTSBzZWxmKQoreworICBicmVha3Bv aW50X3Ntb2IgKnNlbGZfYnA7CisKKyAgQVNTRVJUX1ZBTElEX0JLUFQgKHNl bGYsIHNlbGZfYnAsIEZVTkNfTkFNRSk7CisKKyAgcmV0dXJuIHNjbV9mcm9t X2xvbmcgKHNlbGZfYnAtPmJwLT50eXBlKTsKK30KKworLyogU2NoZW1lIGZ1 bmN0aW9uIHRvIGdldCB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgYnJlYWtwb2lu dC4gICovCisKK3N0YXRpYyBTQ00KK2Jwc2NtX3JlZl92aXNpYmxlIChTQ00g c2VsZikKK3sKKyAgYnJlYWtwb2ludF9zbW9iICpzZWxmX2JwOworCisgIEFT U0VSVF9WQUxJRF9CS1BUIChzZWxmLCBzZWxmX2JwLCBGVU5DX05BTUUpOwor CisgIHJldHVybiBzY21fZnJvbV9ib29sIChzZWxmX2JwLT5icC0+bnVtYmVy ID49IDApOworfQorCisvKiBTY2hlbWUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBi cmVha3BvaW50J3MgbnVtYmVyLiAgKi8KKworc3RhdGljIFNDTQorYnBzY21f cmVmX251bWJlciAoU0NNIHNlbGYpCit7CisgIGJyZWFrcG9pbnRfc21vYiAq c2VsZl9icDsKKworICBBU1NFUlRfVkFMSURfQktQVCAoc2VsZiwgc2VsZl9i cCwgRlVOQ19OQU1FKTsKKworICByZXR1cm4gc2NtX2Zyb21fbG9uZyAoc2Vs Zl9icC0+bnVtYmVyKTsKK30KKworLyogU2NoZW1lIGZ1bmN0aW9uIHRvIGNy ZWF0ZSBhIG5ldyBicmVha3BvaW50LiAgKi8KKworc3RhdGljIFNDTQorYnBz Y21fbWFrZV9icmVha3BvaW50IChTQ00gc3BlY19zY20sIFNDTSByZXN0KQor eworICBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGtleXdvcmRzW10gPQor ICAgIHsgInR5cGUiLCAid3BfY2xhc3MiLCAiaW50ZXJuYWwiLCBOVUxMIH07 CisgIGNoYXIgKnNwZWM7CisgIGludCB0eXBlID0gYnBfYnJlYWtwb2ludDsK KyAgaW50IGFjY2Vzc190eXBlID0gaHdfd3JpdGU7CisgIGludCBpbnRlcm5h bCA9IDA7CisgIFNDTSBzbW9iOworICB2b2xhdGlsZSBzdHJ1Y3QgZ2RiX2V4 Y2VwdGlvbiBleGNlcHQ7CisKKyAgZ2Ric2NtX3BhcnNlX2Z1bmN0aW9uX2Fy Z3MgKEZVTkNfTkFNRSwga2V5d29yZHMsICJzI2lpdCIsCisJCQkgICAgICBz cGVjX3NjbSwgJnNwZWMsIHJlc3QsCisJCQkgICAgICAmdHlwZSwgJmFjY2Vz c190eXBlLCAmaW50ZXJuYWwpOworCisgIHNtb2IgPSBtYWtlX2JyZWFrcG9p bnRfc21vYiAoKTsKKyAgcGVuZGluZ19icmVha3BvaW50X3Ntb2IgPSBzbW9i OworCisgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCisg ICAgeworICAgICAgc3RydWN0IGNsZWFudXAgKmNsZWFudXAgPSBtYWtlX2Ns ZWFudXAgKHhmcmVlLCBzcGVjKTsKKworICAgICAgc3dpdGNoICh0eXBlKQor CXsKKwljYXNlIGJwX2JyZWFrcG9pbnQ6CisJICB7CisJICAgIGNyZWF0ZV9i cmVha3BvaW50ICh0YXJnZXRfZ2RiYXJjaCAoKSwKKwkJCSAgICAgICBzcGVj LCBOVUxMLCAtMSwgTlVMTCwKKwkJCSAgICAgICAwLAorCQkJICAgICAgIDAs IGJwX2JyZWFrcG9pbnQsCisJCQkgICAgICAgMCwKKwkJCSAgICAgICBBVVRP X0JPT0xFQU5fVFJVRSwKKwkJCSAgICAgICAmYmtwdF9icmVha3BvaW50X29w cywKKwkJCSAgICAgICAwLCAxLCBpbnRlcm5hbCwgMCk7CisJICAgIGJyZWFr OworCSAgfQorICAgICAgICBjYXNlIGJwX3dhdGNocG9pbnQ6CisJICB7CisJ ICAgIGlmIChhY2Nlc3NfdHlwZSA9PSBod193cml0ZSkKKwkgICAgICB3YXRj aF9jb21tYW5kX3dyYXBwZXIgKHNwZWMsIDAsIGludGVybmFsKTsKKwkgICAg ZWxzZSBpZiAoYWNjZXNzX3R5cGUgPT0gaHdfYWNjZXNzKQorCSAgICAgIGF3 YXRjaF9jb21tYW5kX3dyYXBwZXIgKHNwZWMsIDAsIGludGVybmFsKTsKKwkg ICAgZWxzZSBpZiAoYWNjZXNzX3R5cGUgPT0gaHdfcmVhZCkKKwkgICAgICBy d2F0Y2hfY29tbWFuZF93cmFwcGVyIChzcGVjLCAwLCBpbnRlcm5hbCk7CisJ ICAgIGVsc2UKKwkgICAgICBlcnJvciAoXygiSW52YWxpZCB3YXRjaHBvaW50 IGFjY2VzcyB0eXBlLiIpKTsKKwkgICAgYnJlYWs7CisJICB9CisJZGVmYXVs dDoKKwkgIGVycm9yIChfKCJJbnZhbGlkIGJyZWFrcG9pbnQgdHlwZS4iKSk7 CisJfQorCisgICAgICBkb19jbGVhbnVwcyAoY2xlYW51cCk7CisgICAgfQor ICBHREJfU0NNX0hBTkRMRV9FWENFUFRJT04gKGV4Y2VwdCk7CisKKyAgewor ICAgIGJyZWFrcG9pbnRfc21vYiAqYnBfc21vYjsKKworICAgIC8qIFNhbml0 eSBjaGVjay4gICovCisgICAgQVNTRVJUX1ZBTElEX0JLUFQgKHNtb2IsIGJw X3Ntb2IsIEZVTkNfTkFNRSk7CisgIH0KKyAgcmV0dXJuIHNtb2I7Cit9CisK Ky8qIFNjaGVtZSBmdW5jdGlvbiB3aGljaCBkZWxldGVzIHRoZSB1bmRlcmx5 aW5nIEdEQiBicmVha3BvaW50LiAgVGhpcworICAgdHJpZ2dlcnMgdGhlIGJy ZWFrcG9pbnRfZGVsZXRlZCBvYnNlcnZlciB3aGljaCB3aWxsIGNhbGwKKyAg IGdkYnNjbV9icmVha3BvaW50X2RlbGV0ZWQ7IHRoYXQgZnVuY3Rpb24gY2xl YW5zIHVwIHRoZSBTY2hlbWUKKyAgIHNlY3Rpb25zLiAgKi8KKworc3RhdGlj IFNDTQorYnBzY21fZGVsZXRlX3ggKFNDTSBzZWxmKQoreworICBicmVha3Bv aW50X3Ntb2IgKnNlbGZfYnA7CisgIHZvbGF0aWxlIHN0cnVjdCBnZGJfZXhj ZXB0aW9uIGV4Y2VwdDsKKworICBBU1NFUlRfVkFMSURfQktQVCAoc2VsZiwg c2VsZl9icCwgRlVOQ19OQU1FKTsKKworICBUUllfQ0FUQ0ggKGV4Y2VwdCwg UkVUVVJOX01BU0tfQUxMKQorICAgIHsKKyAgICAgIGRlbGV0ZV9icmVha3Bv aW50IChzZWxmX2JwLT5icCk7CisgICAgfQorICBHREJfU0NNX0hBTkRMRV9F WENFUFRJT04gKGV4Y2VwdCk7CisKKyAgcmV0dXJuIFNDTV9VTlNQRUNJRklF RDsKK30KKwwKKy8qIGl0ZXJhdGVfb3Zlcl9icmVha3BvaW50cyBmdW5jdGlv biBmb3IgZ2Ric2NtX2JyZWFrcG9pbnRzLiAgKi8KKworc3RhdGljIGludAor YnVpbGRfYnBfbGlzdCAoc3RydWN0IGJyZWFrcG9pbnQgKmIsIHZvaWQgKmFy ZykKK3sKKyAgU0NNICpsaXN0ID0gYXJnOworICBTQ00gKmJwID0gKFNDTSAq KSBiLT5zY21fYnBfb2JqZWN0OworCisgIC8qIE5vdCBhbGwgYnJlYWtwb2lu dHMgd2lsbCBoYXZlIGEgY29tcGFuaW9uIFNjaGVtZSBvYmplY3QuCisgICAg IE9ubHkgYnJlYWtwb2ludHMgdGhhdCB0cmlnZ2VyIHRoZSBjcmVhdGVkX2Jy ZWFrcG9pbnQgb2JzZXJ2ZXIgY2FsbAorICAgICBnZXQgYSBjb21wYW5pb24g b2JqZWN0ICh0aGlzIGluY2x1ZGVzIFNjaGVtZS1jcmVhdGVkIGJyZWFrcG9p bnRzKS4gICovCisKKyAgaWYgKGJwICE9IE5VTEwpCisgICAgKmxpc3QgPSBz Y21fY29ucyAoKmJwLCAqbGlzdCk7CisKKyAgcmV0dXJuIDA7Cit9CisKKy8q IFNjaGVtZSBmdW5jdGlvbiB0byByZXR1cm4gYSBsaXN0IGhvbGRpbmcgYWxs IGJyZWFrcG9pbnRzLiAgKi8KKworc3RhdGljIFNDTQorZ2Ric2NtX2JyZWFr cG9pbnRzICh2b2lkKQoreworICBTQ00gbGlzdCA9IFNDTV9FT0w7CisKKyAg LyogSWYgaXRlcmF0ZV9vdmVyX2JyZWFrcG9pbnRzIHJldHVybnMgbm9uLU5V TEwgaXQgbWVhbnMgdGhlIGl0ZXJhdGlvbgorICAgICB0ZXJtaW5hdGVkIGVh cmx5LgorICAgICBJbiB0aGF0IGNhc2UgYWJhbmRvbiBidWlsZGluZyB0aGUg bGlzdCBhbmQgcmV0dXJuICNmLiAgKi8KKyAgaWYgKGl0ZXJhdGVfb3Zlcl9i cmVha3BvaW50cyAoYnVpbGRfYnBfbGlzdCwgJmxpc3QpICE9IE5VTEwpCisg ICAgcmV0dXJuIFNDTV9CT09MX0Y7CisKKyAgcmV0dXJuIHNjbV9yZXZlcnNl X3ggKGxpc3QsIFNDTV9FT0wpOworfQorCisvKiBSZXR1cm4gVFJVRSBpZiAi c3RvcCIgaGFzIGJlZW4gc2V0IGZvciB0aGlzIGJyZWFrcG9pbnQuCisKKyAg IFRoaXMgaXMgdGhlIHNjcmlwdF9sYW5nLmJyZWFrcG9pbnRfaGFzX2NvbmQg Im1ldGhvZCIuICAqLworCitpbnQKK2dkYnNjbV9icmVha3BvaW50X2hhc19j b25kIChzdHJ1Y3QgYnJlYWtwb2ludCAqYikKK3sKKyAgYnJlYWtwb2ludF9z bW9iICpicF9zbW9iOworICBTQ00gc2NtX2JwOworCisgIGlmIChiLT5zY21f YnBfb2JqZWN0ID09IE5VTEwpCisgICAgcmV0dXJuIDA7CisKKyAgYnBfc21v YiA9IGItPnNjbV9icF9vYmplY3Q7CisKKyAgcmV0dXJuIGdkYnNjbV9pc19w cm9jZWR1cmUgKGJwX3Ntb2ItPnN0b3ApOworfQorCisvKiBDYWxsIHRoZSAi c3RvcCIgbWV0aG9kIChpZiBpbXBsZW1lbnRlZCkgaW4gdGhlIGJyZWFrcG9p bnQgY2xhc3MuCisgICBJZiB0aGUgbWV0aG9kIHJldHVybnMgI3QsIHRoZSBp bmZlcmlvciB3aWxsIGJlIHN0b3BwZWQgYXQgdGhlIGJyZWFrcG9pbnQuCisg ICBPdGhlcndpc2UgdGhlIGluZmVyaW9yIHdpbGwgYmUgYWxsb3dlZCB0byBj b250aW51ZSAoYXNzdW1pbmcgb3RoZXIKKyAgIGNvbmRpdGlvbnMgZG9uJ3Qg aW5kaWNhdGUgInN0b3AiKS4KKworICAgVGhpcyBpcyB0aGUgc2NyaXB0X2xh bmcuYnJlYWtwb2ludF9jb25kX3NheXNfc3RvcCAibWV0aG9kIi4gICovCisK K2ludAorZ2Ric2NtX2JyZWFrcG9pbnRfY29uZF9zYXlzX3N0b3AgKHN0cnVj dCBicmVha3BvaW50ICpiKQoreworICBicmVha3BvaW50X3Ntb2IgKmJwX3Nt b2I7CisgIGludCBzdG9wOworCisgIGlmIChiLT5zY21fYnBfb2JqZWN0ID09 IE5VTEwpCisgICAgcmV0dXJuIDA7CisKKyAgYnBfc21vYiA9IGItPnNjbV9i cF9vYmplY3Q7CisKKyAgLyogRklYTUU6IElmIHRoZXJlIGlzIG5vICJzdG9w IiB3ZSByZXR1cm4gdHJ1ZT8gICovCisgIHN0b3AgPSAxOworCisgIGlmIChn ZGJzY21faXNfcHJvY2VkdXJlIChicF9zbW9iLT5zdG9wKSkKKyAgICB7Cisg ICAgICBTQ00gcmVzdWx0ID0gZ2Ric2NtX3NhZmVfY2FsbF8xIChicF9zbW9i LT5zdG9wLCBicF9zbW9iLT5jb250YWluaW5nX3NjbSk7CisKKyAgICAgIGlm IChnZGJzY21faXNfZXhjZXB0aW9uIChyZXN1bHQpKQorCXsKKwkgIGdkYnNj bV9wcmludF9zdGFjayAoKTsKKwkgIGdkYnNjbV9wcmludF9leGNlcHRpb24g KHJlc3VsdCk7CisJfQorICAgICAgLyogSWYgdGhlICJzdG9wIiBmdW5jdGlv biByZXR1cm5zIEZhbHNlIHRoYXQgbWVhbnMKKwkgdGhlIFNjaGVtZSBicmVh a3BvaW50IHdhbnRzIEdEQiB0byBjb250aW51ZS4gICovCisgICAgICBlbHNl IGlmIChnZGJzY21faXNfZmFsc2UgKHJlc3VsdCkpCisJc3RvcCA9IDA7Cisg ICAgfQorCisgIHJldHVybiBzdG9wOworfQorDAorLyogRXZlbnQgY2FsbGJh Y2sgZnVuY3Rpb25zLiAgKi8KKworLyogQ2FsbGJhY2sgdGhhdCBpcyB1c2Vk IHdoZW4gYSBicmVha3BvaW50IGlzIGNyZWF0ZWQuCisgICBUaGlzIGZ1bmN0 aW9uIHdpbGwgdXNlIHBlbmRpbmdfYnJlYWtwb2ludF9vYmplY3QgaWYgaXQg ZXhpc3RzLAorICAgb3IgY3JlYXRlIGEgbmV3IFNjaGVtZSBicmVha3BvaW50 IG9iamVjdC4gICovCisKK3N0YXRpYyB2b2lkCiticmVha3BvaW50X2NyZWF0 ZWQgKHN0cnVjdCBicmVha3BvaW50ICpicCkKK3sKKyAgU0NNIHNtb2I7Cisg IGJyZWFrcG9pbnRfc21vYiAqYnBfc21vYjsKKworICBpZiAoYnAtPm51bWJl ciA8IDAgJiYgZ2Ric2NtX2lzX2ZhbHNlIChwZW5kaW5nX2JyZWFrcG9pbnRf c21vYikpCisgICAgcmV0dXJuOworCisgIGlmIChicC0+dHlwZSAhPSBicF9i cmVha3BvaW50CisgICAgICAmJiBicC0+dHlwZSAhPSBicF93YXRjaHBvaW50 CisgICAgICAmJiBicC0+dHlwZSAhPSBicF9oYXJkd2FyZV93YXRjaHBvaW50 CisgICAgICAmJiBicC0+dHlwZSAhPSBicF9yZWFkX3dhdGNocG9pbnQKKyAg ICAgICYmIGJwLT50eXBlICE9IGJwX2FjY2Vzc193YXRjaHBvaW50KQorICAg IHJldHVybjsKKworICAvKiBwZW5kaW5nX2JyZWFrcG9pbnRfc21vYiBpcyBu b24tI2YgaWYgd2UgZ2V0IGhlcmUgdmlhIFNjaGVtZS4KKyAgICAgT3RoZXJ3 aXNlIHNvbWVvbmUgZWxzZSBjcmVhdGVkIHRoZSBicmVha3BvaW50IChlLmcu ICJiIG1haW4iKS4gICovCisgIGlmICghIGdkYnNjbV9pc19mYWxzZSAocGVu ZGluZ19icmVha3BvaW50X3Ntb2IpKQorICAgIHsKKyAgICAgIHNtb2IgPSBw ZW5kaW5nX2JyZWFrcG9pbnRfc21vYjsKKyAgICAgIHBlbmRpbmdfYnJlYWtw b2ludF9zbW9iID0gU0NNX0JPT0xfRjsKKyAgICB9CisgIGVsc2UKKyAgICB7 CisgICAgICBzbW9iID0gbWFrZV9icmVha3BvaW50X3Ntb2IgKCk7CisgICAg fQorCisgIGJwX3Ntb2IgPSAoYnJlYWtwb2ludF9zbW9iICopIFNDTV9TTU9C X0RBVEEgKHNtb2IpOworICBicF9zbW9iLT5udW1iZXIgPSBicC0+bnVtYmVy OworICBicF9zbW9iLT5icCA9IGJwOworICBicF9zbW9iLT5jb250YWluaW5n X3NjbSA9IHNtb2I7CisgIGJwX3Ntb2ItPmJwLT5zY21fYnBfb2JqZWN0ID0g YnBfc21vYjsKKworICAvKiBUaGUgU0NNIG9mIHRoaXMgYnJlYWtwb2ludCBp cyBub3QgbmVjZXNzYXJpbHkgaW4gR0MtY29udHJvbGxlZCBtZW1vcnksCisg ICAgIHNvIHdlIG5lZWQgdG8gcHJvdGVjdCBpdCBmcm9tIEdDIHVudGlsIHRo ZSBicmVha3BvaW50IGlzIGRlbGV0ZWQuICAqLworICBzY21fZ2NfcHJvdGVj dF9vYmplY3QgKHNtb2IpOworfQorCisvKiBDYWxsYmFjayB0aGF0IGlzIHVz ZWQgd2hlbiBhIGJyZWFrcG9pbnQgaXMgZGVsZXRlZC4gIFRoaXMgd2lsbAor ICAgaW52YWxpZGF0ZSB0aGUgY29ycmVzcG9uZGluZyBTY2hlbWUgb2JqZWN0 LiAgKi8KKworc3RhdGljIHZvaWQKK2JyZWFrcG9pbnRfZGVsZXRlZCAoc3Ry dWN0IGJyZWFrcG9pbnQgKmIpCit7CisgIGludCBudW0gPSBiLT5udW1iZXI7 CisgIHN0cnVjdCBicmVha3BvaW50ICpicDsKKworICAvKiBGSVhNRTogV2h5 IHRoZSBsb29rdXA/ICBXZSBoYXZlIEIuICAqLworCisgIGJwID0gZ2V0X2Jy ZWFrcG9pbnQgKG51bSk7CisgIGlmIChicCkKKyAgICB7CisgICAgICBicmVh a3BvaW50X3Ntb2IgKmJwX3Ntb2IgPSBicC0+c2NtX2JwX29iamVjdDsKKwor ICAgICAgaWYgKGJwX3Ntb2IpCisJeworCSAgYnBfc21vYi0+YnAgPSBOVUxM OworCSAgc2NtX2djX3VucHJvdGVjdF9vYmplY3QgKGJwX3Ntb2ItPmNvbnRh aW5pbmdfc2NtKTsKKwl9CisgICAgfQorfQorDAorLyogSW5pdGlhbGl6ZSB0 aGUgU2NoZW1lIGJyZWFrcG9pbnQgY29kZS4gICovCisKK3N0YXRpYyBjb25z dCBzY2hlbWVfdmFyaWFibGUgYnJlYWtwb2ludF92YXJpYWJsZXNbXSA9Cit7 CisgIHsgIippbml0LWJyZWFrcG9pbnQqIiwgU0NNX0JPT0xfRiB9LAorICB7 IE5VTEwsIFNDTV9CT09MX0YgfQorfTsKKworc3RhdGljIGNvbnN0IHNjaGVt ZV9mdW5jdGlvbiBicmVha3BvaW50X2Z1bmN0aW9uc1tdID0KK3sKKyAgeyAi bWFrZS1icmVha3BvaW50IiwgMSwgMCwgMSwgYnBzY21fbWFrZV9icmVha3Bv aW50IH0sCisgIHsgImJyZWFrcG9pbnQ/IiwgMSwgMCwgMCwgZ2Ric2NtX2Jy ZWFrcG9pbnRfcCB9LAorICB7ICJicmVha3BvaW50cyIsIDAsIDAsIDAsIGdk YnNjbV9icmVha3BvaW50cyB9LAorICB7ICJicmVha3BvaW50LWRlbGV0ZSEi LCAxLCAwLCAwLCBicHNjbV9kZWxldGVfeCB9LAorCisgIHsgImJyZWFrcG9p bnQtdmFsaWQ/IiwgMSwgMCwgMCwgYnBzY21fdmFsaWRfcCB9LAorICB7ICJi cmVha3BvaW50LWVuYWJsZWQ/IiwgMSwgMCwgMCwgYnBzY21fZW5hYmxlZF9w IH0sCisgIHsgImJyZWFrcG9pbnQtc2V0LWVuYWJsZWQhIiwgMiwgMCwgMCwg YnBzY21fc2V0X2VuYWJsZWRfeCB9LAorICB7ICJicmVha3BvaW50LXNpbGVu dD8iLCAxLCAwLCAwLCBicHNjbV9zaWxlbnRfcCB9LAorICB7ICJicmVha3Bv aW50LXNldC1zaWxlbnQhIiwgMiwgMCwgMCwgYnBzY21fc2V0X3NpbGVudF94 IH0sCisgIHsgImJyZWFrcG9pbnQtcmVmLWlnbm9yZS1jb3VudCIsIDEsIDAs IDAsIGJwc2NtX3JlZl9pZ25vcmVfY291bnQgfSwKKyAgeyAiYnJlYWtwb2lu dC1zZXQtaWdub3JlLWNvdW50IiwgMiwgMCwgMCwgYnBzY21fc2V0X2lnbm9y ZV9jb3VudF94IH0sCisgIHsgImJyZWFrcG9pbnQtcmVmLWhpdC1jb3VudCIs IDEsIDAsIDAsIGJwc2NtX3JlZl9oaXRfY291bnQgfSwKKyAgeyAiYnJlYWtw b2ludC1zZXQtaGl0LWNvdW50IiwgMiwgMCwgMCwgYnBzY21fc2V0X2hpdF9j b3VudF94IH0sCisgIHsgImJyZWFrcG9pbnQtcmVmLXRocmVhZCIsIDEsIDAs IDAsIGJwc2NtX3JlZl90aHJlYWQgfSwKKyAgeyAiYnJlYWtwb2ludC1zZXQt dGhyZWFkISIsIDIsIDAsIDAsIGJwc2NtX3NldF90aHJlYWRfeCB9LAorICB7 ICJicmVha3BvaW50LXJlZi10YXNrIiwgMSwgMCwgMCwgYnBzY21fcmVmX3Rh c2sgfSwKKyAgeyAiYnJlYWtwb2ludC1zZXQtdGFzayEiLCAyLCAwLCAwLCBi cHNjbV9zZXRfdGFza194IH0sCisgIHsgImJyZWFrcG9pbnQtcmVmLWxvY2F0 aW9uIiwgMSwgMCwgMCwgYnBzY21fcmVmX2xvY2F0aW9uIH0sCisgIHsgImJy ZWFrcG9pbnQtcmVmLWV4cHJlc3Npb24iLCAxLCAwLCAwLCBicHNjbV9yZWZf ZXhwcmVzc2lvbiB9LAorICB7ICJicmVha3BvaW50LXJlZi1jb25kaXRpb24i LCAxLCAwLCAwLCBicHNjbV9yZWZfY29uZGl0aW9uIH0sCisgIHsgImJyZWFr cG9pbnQtc2V0LWNvbmRpdGlvbiEiLCAyLCAwLCAwLCBicHNjbV9zZXRfY29u ZGl0aW9uX3ggfSwKKyAgeyAiYnJlYWtwb2ludC1yZWYtY29tbWFuZHMiLCAx LCAwLCAwLCBicHNjbV9yZWZfY29tbWFuZHMgfSwKKyAgeyAiYnJlYWtwb2lu dC1yZWYtdHlwZSIsIDEsIDAsIDAsIGJwc2NtX3JlZl90eXBlIH0sCisgIHsg ImJyZWFrcG9pbnQtcmVmLXZpc2libGUiLCAxLCAwLCAwLCBicHNjbV9yZWZf dmlzaWJsZSB9LAorICB7ICJicmVha3BvaW50LXJlZi1udW1iZXIiLCAxLCAw LCAwLCBicHNjbV9yZWZfbnVtYmVyIH0sCisKKyAgeyBOVUxMLCAwLCAwLCAw LCBOVUxMIH0KK307CisKK3ZvaWQKK2dkYnNjbV9pbml0aWFsaXplX2JyZWFr cG9pbnRzICh2b2lkKQoreworICBpbnQgaTsKKworICBicmVha3BvaW50X3Nt b2JfdGFnID0KKyAgICBnZGJzY21fbWFrZV9zbW9iX3R5cGUgKGJyZWFrcG9p bnRfc21vYl9uYW1lLCBzaXplb2YgKGJyZWFrcG9pbnRfc21vYikpOworICBz Y21fc2V0X3Ntb2JfbWFyayAoYnJlYWtwb2ludF9zbW9iX3RhZywgbWFya19i cmVha3BvaW50X3Ntb2IpOworICBzY21fc2V0X3Ntb2JfZnJlZSAoYnJlYWtw b2ludF9zbW9iX3RhZywgZnJlZV9icmVha3BvaW50X3Ntb2IpOworICBzY21f c2V0X3Ntb2JfcHJpbnQgKGJyZWFrcG9pbnRfc21vYl90YWcsIHByaW50X2Jy ZWFrcG9pbnRfc21vYik7CisKKyAgb2JzZXJ2ZXJfYXR0YWNoX2JyZWFrcG9p bnRfY3JlYXRlZCAoYnJlYWtwb2ludF9jcmVhdGVkKTsKKyAgb2JzZXJ2ZXJf YXR0YWNoX2JyZWFrcG9pbnRfZGVsZXRlZCAoYnJlYWtwb2ludF9kZWxldGVk KTsKKworICBnZGJzY21fZGVmaW5lX3ZhcmlhYmxlcyAoYnJlYWtwb2ludF92 YXJpYWJsZXMsIDEpOworICBnZGJzY21fZGVmaW5lX2Z1bmN0aW9ucyAoYnJl YWtwb2ludF9mdW5jdGlvbnMsIDEpOworCisgIC8qIEFkZCBicmVha3BvaW50 IHR5cGVzIGNvbnN0YW50cy4gICovCisgIGZvciAoaSA9IDA7IHNjbWJwX2Nv ZGVzW2ldLm5hbWU7ICsraSkKKyAgICB7CisgICAgICBzY21fY19kZWZpbmUg KHNjbWJwX2NvZGVzW2ldLm5hbWUsIHNjbV9mcm9tX2ludCAoc2NtYnBfY29k ZXNbaV0uY29kZSkpOworICAgICAgc2NtX2NfZXhwb3J0IChzY21icF9jb2Rl c1tpXS5uYW1lLCBOVUxMKTsKKyAgICB9CisKKyAgLyogQWRkIHdhdGNocG9p bnQgdHlwZXMgY29uc3RhbnRzLiAgKi8KKyAgZm9yIChpID0gMDsgc2NtYnBf d2F0Y2hfdHlwZXNbaV0ubmFtZTsgKytpKQorICAgIHsKKyAgICAgIHNjbV9j X2RlZmluZSAoc2NtYnBfd2F0Y2hfdHlwZXNbaV0ubmFtZSwKKwkJICAgIHNj bV9mcm9tX2ludCAoc2NtYnBfd2F0Y2hfdHlwZXNbaV0uY29kZSkpOworICAg ICAgc2NtX2NfZXhwb3J0IChzY21icF93YXRjaF90eXBlc1tpXS5uYW1lLCBO VUxMKTsKKyAgICB9Cit9CmRpZmYgLXJwTiAtVSAyIHNjaGVtZT0vc2NtLWV4 Y2VwdGlvbi5jIHNjaGVtZS9zY20tZXhjZXB0aW9uLmMKLS0tIHNjaGVtZT0v c2NtLWV4Y2VwdGlvbi5jCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAw IC0wODAwCisrKyBzY2hlbWUvc2NtLWV4Y2VwdGlvbi5jCTIwMTMtMDktMDYg MDc6NTI6MDAuMTA3OTY5MzAwIC0wNzAwCkBAIC0wLDAgKzEsMjUzIEBACisv KiBnZGIvc2NoZW1lIGV4Y2VwdGlvbiBzdXBwb3J0LgorCisgICBDb3B5cmln aHQgKEMpIDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisK KyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKworICAgVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cisg ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhp cyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgImRlZnMuaCIKKyNpbmNsdWRl ICJnZGJfYXNzZXJ0LmgiCisjaW5jbHVkZSAic2NoZW1lL3NjaGVtZS1pbnRl cm5hbC5oIgorCisvKiBTTU9CIHRvIGhhbmRsZSBleGNlcHRpb25zIGJldHdl ZW4gZ2RiIGFuZCBTY2hlbWUuICAqLworCit0eXBlZGVmIHN0cnVjdAorewor ICBnZGJfc21vYiBiYXNlOworCisgIFNDTSB0YWc7CisgIFNDTSBhcmdzOwor fSBleGNlcHRpb25fc21vYjsKKworc3RhdGljIGNvbnN0IGNoYXIgZXhjZXB0 aW9uX3Ntb2JfbmFtZVtdID0gImdkYjpleGNlcHRpb24iOworCisvKiBUaGUg dGFnIEd1aWxlIGtub3dzIHRoZSBleGNlcHRpb24gc21vYiBieS4gICovCitz dGF0aWMgc2NtX3RfYml0cyBleGNlcHRpb25fc21vYl90YWc7CisKK3N0YXRp YyBTQ00KK21hcmtfZXhjZXB0aW9uX3Ntb2IgKFNDTSBzZWxmKQoreworICBl eGNlcHRpb25fc21vYiAqZV9zbW9iID0gKGV4Y2VwdGlvbl9zbW9iICopIFND TV9TTU9CX0RBVEEgKHNlbGYpOworCisgIHNjbV9nY19tYXJrIChlX3Ntb2It PnRhZyk7CisgIHNjbV9nY19tYXJrIChlX3Ntb2ItPmFyZ3MpOworICAvKiBE byB0aGlzIGxhc3QuICAqLworICByZXR1cm4gZ2Ric2NtX21hcmtfZ3Ntb2Ig KCZlX3Ntb2ItPmJhc2UpOworfQorCitzdGF0aWMgaW50CitwcmludF9leGNl cHRpb25fc21vYiAoU0NNIHNlbGYsIFNDTSBwb3J0LCBzY21fcHJpbnRfc3Rh dGUgKnBzdGF0ZSkKK3sKKyAgZXhjZXB0aW9uX3Ntb2IgKmVfc21vYiA9IChl eGNlcHRpb25fc21vYiAqKSBTQ01fU01PQl9EQVRBIChzZWxmKTsKKworICBn ZGJzY21fcHJpbnRmIChwb3J0LCAiIzwlcyAiLCBleGNlcHRpb25fc21vYl9u YW1lKTsKKyAgc2NtX2Rpc3BsYXkgKGVfc21vYi0+dGFnLCBwb3J0KTsKKyAg c2NtX3B1dHMgKCIgIiwgcG9ydCk7CisgIHNjbV9kaXNwbGF5IChlX3Ntb2It PmFyZ3MsIHBvcnQpOworICBzY21fcHV0cyAoIj4iLCBwb3J0KTsKKworICBz Y21fcmVtZW1iZXJfdXB0b19oZXJlXzEgKHNlbGYpOworCisgIC8qIE5vbi16 ZXJvIG1lYW5zIHN1Y2Nlc3MuICAqLworICByZXR1cm4gMTsKK30KKworU0NN CitnZGJzY21fbWFrZV9leGNlcHRpb24gKFNDTSB0YWcsIFNDTSBhcmdzKQor eworICBleGNlcHRpb25fc21vYiAqZV9zbW9iID0gKGV4Y2VwdGlvbl9zbW9i ICopCisgICAgc2NtX2djX21hbGxvYyAoc2l6ZW9mIChleGNlcHRpb25fc21v YiksIGV4Y2VwdGlvbl9zbW9iX25hbWUpOworICBTQ00gc21vYjsKKworICBl X3Ntb2ItPnRhZyA9IFNDTV9CT09MX0Y7CisgIGVfc21vYi0+YXJncyA9IFND TV9CT09MX0Y7CisgIHNtb2IgPSBzY21fbmV3X3Ntb2IgKGV4Y2VwdGlvbl9z bW9iX3RhZywgKHNjbV90X2JpdHMpIGVfc21vYik7CisgIGdkYnNjbV9pbml0 X2dzbW9iIChzbW9iLCAmZV9zbW9iLT5iYXNlLCBleGNlcHRpb25fc21vYl9u YW1lKTsKKyAgcmV0dXJuIHNtb2I7Cit9CisKK2ludAorZ2Ric2NtX2lzX2V4 Y2VwdGlvbiAoU0NNIHNjbSkKK3sKKyAgaWYgKFNDTV9JTVAgKHNjbSkpCisg ICAgcmV0dXJuIDA7CisgIHJldHVybiBTQ01fVFlQMTYgKHNjbSkgPT0gZXhj ZXB0aW9uX3Ntb2JfdGFnOworfQorCitzdGF0aWMgU0NNCitnZGJzY21fZXhj ZXB0aW9uX3AgKFNDTSBzY20pCit7CisgIHJldHVybiBzY21fZnJvbV9ib29s IChnZGJzY21faXNfZXhjZXB0aW9uIChzY20pKTsKK30KKwwKKy8qIENvbnZl cnQgYSBHREIgZXhjZXB0aW9uIHRvIHRoZSBhcHByb3ByaWF0ZSBTY2hlbWUg ZXhjZXB0aW9uLgorICAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4u ICAqLworLy8gRklYTUU6d2lwCisKK3ZvaWQKK2dkYnNjbV9jb252ZXJ0X2dk Yl9leGNlcHRpb24gKHN0cnVjdCBnZGJfZXhjZXB0aW9uIGV4Y2VwdGlvbikK K3sKKyAgY29uc3QgY2hhciAqa2V5OworCisgIGlmIChleGNlcHRpb24ucmVh c29uID09IFJFVFVSTl9RVUlUKQorICAgIGtleSA9ICJpbnRlcnJ1cHQiOwor ICBlbHNlIGlmIChleGNlcHRpb24uZXJyb3IgPT0gTUVNT1JZX0VSUk9SKQor ICAgIGtleSA9ICJtZW1vcnktZXJyb3IiOworICBlbHNlCisgICAga2V5ID0g ImdkYi1lcnJvciI7CisKKyAgc2NtX2Vycm9yIChnZGJzY21fY19zdHJpbmdf dG9fc3ltYm9sIChrZXkpLAorCSAgICAgImdkYnNjbV9jb252ZXJ0X2dkYl9l eGNlcHRpb24iLCAiflMiLAorCSAgICAgc2NtX2xpc3RfMSAoZ2Ric2NtX2Nf dG9fc2NtX3N0cmluZyAoZXhjZXB0aW9uLm1lc3NhZ2UpKSwKKwkgICAgIFND TV9CT09MX0YpOworfQorCisvKiBSZXR1cm4gYSBzdHJpbmcgZGVzY3JpcHRp b24gb2YgZXhjZXB0aW9uIHNtb2IgRVhDRVBUSU9OLiAgKi8KKworY2hhciAq CitnZGJzY21fZXhjZXB0aW9uX3RvX3N0cmluZyAoU0NNIGV4Y2VwdGlvbikK K3sKKyAgcmV0dXJuICJUT0RPIjsKK30KKworLyogUmV0dXJuIG5vbi16ZXJv IGlmIEVYQ0VQVElPTiBpcyBhIG1lbW9yeSBlcnJvci4gICovCisKK2ludAor Z2Ric2NtX2V4Y2VwdGlvbl9tYXRjaGVzX21lbW9yeV9lcnJvciAoU0NNIGV4 Y2VwdGlvbikKK3sKKyAgcmV0dXJuIDA7IC8vVE9ETworfQorCit2b2lkCitn ZGJzY21fcHJpbnRfZXhjZXB0aW9uIChTQ00gZXhjZXB0aW9uKQoreworICAv L1RPRE8KK30KKwordm9pZAorZ2Ric2NtX3ByaW50X3N0YWNrICh2b2lkKQor eworICAvL1RPRE8KK30KKwwKKy8qIFV0aWxpdGllcyB0byBzYWZlbHkgY2Fs bCBTY2hlbWUgY29kZSwgY2F0Y2hpbmcgYWxsIGV4Y2VwdGlvbnMuCisgICBU aGUgcmVzdWx0IGlzIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgZnVuY3Rp b24sIG9yIGlmIGFuIGV4Y2VwdGlvbgorICAgaXMgY2FsbGVkIHRoZW4gdGhl IHJlc3VsdCBpcyBhIGdkYnNjbV9leGNlcHRpb25fc21vYiBvYmplY3QsIHdo aWNoIGNhbgorICAgYmUgdGVzdGVkIGZvciB3aXRoIGdkYnNjbV9pc19leGNl cHRpb25fc21vYi4gICovCisKKy8qIFRPRE86IFVzZSBwcmUtdW53aW5kIGhh bmRsZXIgd2hlbiB3ZSB3YW50IHRvIHByaW50IHRoZSBzdGFjay4gICovCisK K3N0YXRpYyBTQ00KK3NhZmVfY2FsbF91bndpbmRfaGFuZGxlciAodm9pZCAq ZGF0YSwgU0NNIHRhZywgU0NNIGFyZ3MpCit7CisgIHJldHVybiBnZGJzY21f bWFrZV9leGNlcHRpb24gKHRhZywgYXJncyk7Cit9CisKK3N0YXRpYyBTQ00K K3NhZmVfY2FsbF8wX2JvZHkgKHZvaWQgKmFyZ3NwKQoreworICBTQ00gKmFy Z3MgPSBhcmdzcDsKKworICByZXR1cm4gc2NtX2NhbGxfMCAoYXJnc1swXSk7 Cit9CisKK1NDTQorZ2Ric2NtX3NhZmVfY2FsbF8wIChTQ00gcHJvYykKK3sK KyAgU0NNIGFyZ3NbXSA9IHsgcHJvYyB9OworCisgIC8qIFBhc3MgU0NNX0JP T0xfVCBmb3IgdGFnIHRvIGNhdGNoIGFsbCBlcnJvcnMuICAqLworICByZXR1 cm4gc2NtX2NfY2F0Y2ggKFNDTV9CT09MX1QsIHNhZmVfY2FsbF8wX2JvZHks IGFyZ3MsCisJCSAgICAgIHNhZmVfY2FsbF91bndpbmRfaGFuZGxlciwgTlVM TCwgTlVMTCwgTlVMTCk7Cit9CisKK3N0YXRpYyBTQ00KK3NhZmVfY2FsbF8x X2JvZHkgKHZvaWQgKmFyZ3NwKQoreworICBTQ00gKmFyZ3MgPSBhcmdzcDsK KworICByZXR1cm4gc2NtX2NhbGxfMSAoYXJnc1swXSwgYXJnc1sxXSk7Cit9 CisKK1NDTQorZ2Ric2NtX3NhZmVfY2FsbF8xIChTQ00gcHJvYywgU0NNIGFy ZzApCit7CisgIFNDTSBhcmdzW10gPSB7IHByb2MsIGFyZzAgfTsKKworICAv KiBQYXNzIFNDTV9CT09MX1QgZm9yIHRhZyB0byBjYXRjaCBhbGwgZXJyb3Jz LiAgKi8KKyAgcmV0dXJuIHNjbV9jX2NhdGNoIChTQ01fQk9PTF9ULCBzYWZl X2NhbGxfMV9ib2R5LCBhcmdzLAorCQkgICAgICBzYWZlX2NhbGxfdW53aW5k X2hhbmRsZXIsIE5VTEwsIE5VTEwsIE5VTEwpOworfQorCitzdGF0aWMgU0NN CitzYWZlX2NhbGxfMl9ib2R5ICh2b2lkICphcmdzcCkKK3sKKyAgU0NNICph cmdzID0gYXJnc3A7CisKKyAgcmV0dXJuIHNjbV9jYWxsXzIgKGFyZ3NbMF0s IGFyZ3NbMV0sIGFyZ3NbMl0pOworfQorCitTQ00KK2dkYnNjbV9zYWZlX2Nh bGxfMiAoU0NNIHByb2MsIFNDTSBhcmcwLCBTQ00gYXJnMSkKK3sKKyAgU0NN IGFyZ3NbXSA9IHsgcHJvYywgYXJnMCwgYXJnMSB9OworCisgIC8qIFBhc3Mg U0NNX0JPT0xfVCBmb3IgdGFnIHRvIGNhdGNoIGFsbCBlcnJvcnMuICAqLwor ICByZXR1cm4gc2NtX2NfY2F0Y2ggKFNDTV9CT09MX1QsIHNhZmVfY2FsbF8y X2JvZHksIGFyZ3MsCisJCSAgICAgIHNhZmVfY2FsbF91bndpbmRfaGFuZGxl ciwgTlVMTCwgTlVMTCwgTlVMTCk7Cit9CisKK3N0YXRpYyBTQ00KK3NhZmVf YXBwbHlfMV9ib2R5ICh2b2lkICphcmdzcCkKK3sKKyAgU0NNICphcmdzID0g YXJnc3A7CisKKyAgcmV0dXJuIHNjbV9hcHBseV8xIChhcmdzWzBdLCBhcmdz WzFdLCBhcmdzWzJdKTsKK30KKworU0NNCitnZGJzY21fc2FmZV9hcHBseV8x IChTQ00gcHJvYywgU0NNIGFyZzAsIFNDTSByZXN0KQoreworICBTQ00gYXJn c1tdID0geyBwcm9jLCBhcmcwLCByZXN0IH07CisKKyAgLyogUGFzcyBTQ01f Qk9PTF9UIGZvciB0YWcgdG8gY2F0Y2ggYWxsIGVycm9ycy4gICovCisgIHJl dHVybiBzY21fY19jYXRjaCAoU0NNX0JPT0xfVCwgc2FmZV9hcHBseV8xX2Jv ZHksIGFyZ3MsCisJCSAgICAgIHNhZmVfY2FsbF91bndpbmRfaGFuZGxlciwg TlVMTCwgTlVMTCwgTlVMTCk7Cit9CisMCitzdGF0aWMgY29uc3Qgc2NoZW1l X3ZhcmlhYmxlIGV4Y2VwdGlvbl92YXJpYWJsZXNbXSA9Cit7CisgIHsgIipp bml0LWV4Y2VwdGlvbioiLCBTQ01fQk9PTF9GIH0sCisgIHsgTlVMTCwgU0NN X0JPT0xfRiB9Cit9OworCitzdGF0aWMgY29uc3Qgc2NoZW1lX2Z1bmN0aW9u IGV4Y2VwdGlvbl9mdW5jdGlvbnNbXSA9Cit7CisgIHsgIm1ha2UtZXhjZXB0 aW9uIiwgMiwgMCwgMCwgZ2Ric2NtX21ha2VfZXhjZXB0aW9uIH0sCisgIHsg ImV4Y2VwdGlvbj8iLCAxLCAwLCAwLCBnZGJzY21fZXhjZXB0aW9uX3AgfSwK KyAgeyBOVUxMLCAwLCAwLCAwLCBOVUxMIH0KK307CisKK3ZvaWQKK2dkYnNj bV9pbml0aWFsaXplX2V4Y2VwdGlvbnMgKHZvaWQpCit7CisgIGV4Y2VwdGlv bl9zbW9iX3RhZyA9IGdkYnNjbV9tYWtlX3Ntb2JfdHlwZSAoZXhjZXB0aW9u X3Ntb2JfbmFtZSwKKwkJCQkJICAgICAgc2l6ZW9mIChleGNlcHRpb25fc21v YikpOworICBzY21fc2V0X3Ntb2JfbWFyayAoZXhjZXB0aW9uX3Ntb2JfdGFn LCBtYXJrX2V4Y2VwdGlvbl9zbW9iKTsKKyAgc2NtX3NldF9zbW9iX3ByaW50 IChleGNlcHRpb25fc21vYl90YWcsIHByaW50X2V4Y2VwdGlvbl9zbW9iKTsK KworICBnZGJzY21fZGVmaW5lX3ZhcmlhYmxlcyAoZXhjZXB0aW9uX3Zhcmlh YmxlcywgMSk7CisgIGdkYnNjbV9kZWZpbmVfZnVuY3Rpb25zIChleGNlcHRp b25fZnVuY3Rpb25zLCAxKTsKK30KZGlmZiAtcnBOIC1VIDIgc2NoZW1lPS9z Y20taXRlcmF0b3IuYyBzY2hlbWUvc2NtLWl0ZXJhdG9yLmMKLS0tIHNjaGVt ZT0vc2NtLWl0ZXJhdG9yLmMJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAw MDAgLTA4MDAKKysrIHNjaGVtZS9zY20taXRlcmF0b3IuYwkyMDEzLTA5LTA2 IDA3OjUyOjA3LjU3MDk2OTc4NCAtMDcwMApAQCAtMCwwICsxLDE3NSBAQAor LyogU2ltcGxlIGl0ZXJhdG9ycyBmb3IgZ2RiL3NjaGVtZS4KKworICAgQ29w eXJpZ2h0IChDKSAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j LgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl cnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK KyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRo IHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5v cmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlICJkZWZzLmgiCisjaW5j bHVkZSAic2NoZW1lL3NjaGVtZS1pbnRlcm5hbC5oIgorCitjb25zdCBjaGFy IGdkYnNjbV9pdGVyYXRvcl9zbW9iX25hbWVbXSA9ICJnZGI6aXRlcmF0b3Ii OworCisvKiBUaGUgdGFnIEd1aWxlIGtub3dzIHRoZSBpdGVyYXRvciBzbW9i IGJ5LiAgKi8KK3N0YXRpYyBzY21fdF9iaXRzIGl0ZXJhdG9yX3Ntb2JfdGFn OworCitzdGF0aWMgU0NNCittYXJrX2l0ZXJhdG9yX3Ntb2IgKFNDTSBzZWxm KQoreworICBpdGVyYXRvcl9zbW9iICppX3Ntb2IgPSAoaXRlcmF0b3Jfc21v YiAqKSBTQ01fU01PQl9EQVRBIChzZWxmKTsKKworICBzY21fZ2NfbWFyayAo aV9zbW9iLT5vYmplY3QpOworICBzY21fZ2NfbWFyayAoaV9zbW9iLT5wcm9n cmVzcyk7CisgIHNjbV9nY19tYXJrIChpX3Ntb2ItPm5leHRfeCk7CisgIC8q IERvIHRoaXMgbGFzdC4gICovCisgIHJldHVybiBnZGJzY21fbWFya19nc21v YiAoJmlfc21vYi0+YmFzZSk7Cit9CisKK3N0YXRpYyBpbnQKK3ByaW50X2l0 ZXJhdG9yX3Ntb2IgKFNDTSBzZWxmLCBTQ00gcG9ydCwgc2NtX3ByaW50X3N0 YXRlICpwc3RhdGUpCit7CisgIGl0ZXJhdG9yX3Ntb2IgKmlfc21vYiA9IChp dGVyYXRvcl9zbW9iICopIFNDTV9TTU9CX0RBVEEgKHNlbGYpOworCisgIGdk YnNjbV9wcmludGYgKHBvcnQsICIjPCVzICIsIGdkYnNjbV9pdGVyYXRvcl9z bW9iX25hbWUpOworICBzY21fZGlzcGxheSAoaV9zbW9iLT5vYmplY3QsIHBv cnQpOworICBzY21fcHV0cyAoIiAiLCBwb3J0KTsKKyAgc2NtX2Rpc3BsYXkg KGlfc21vYi0+cHJvZ3Jlc3MsIHBvcnQpOworICBzY21fcHV0cyAoIiAiLCBw b3J0KTsKKyAgc2NtX2Rpc3BsYXkgKGlfc21vYi0+bmV4dF94LCBwb3J0KTsK KyAgc2NtX3B1dHMgKCI+IiwgcG9ydCk7CisKKyAgc2NtX3JlbWVtYmVyX3Vw dG9faGVyZV8xIChzZWxmKTsKKworICAvKiBOb24temVybyBtZWFucyBzdWNj ZXNzLiAgKi8KKyAgcmV0dXJuIDE7Cit9CisKKy8qIFRPRE86IGtleXdvcmQg YXJncz8gKi8KKworU0NNCitnZGJzY21fbWFrZV9pdGVyYXRvciAoU0NNIG9i amVjdCwgU0NNIHByb2dyZXNzLCBTQ00gbmV4dCkKK3sKKyAgaXRlcmF0b3Jf c21vYiAqaV9zbW9iID0gKGl0ZXJhdG9yX3Ntb2IgKikKKyAgICBzY21fZ2Nf bWFsbG9jIChzaXplb2YgKGl0ZXJhdG9yX3Ntb2IpLCBnZGJzY21faXRlcmF0 b3Jfc21vYl9uYW1lKTsKKyAgU0NNIHNtb2I7CisKKyAgU0NNX0FTU0VSVF9U WVBFIChnZGJzY21faXNfcHJvY2VkdXJlIChuZXh0KSwgbmV4dCwgMiwgRlVO Q19OQU1FLAorCQkgICAicHJvY2VkdXJlIik7CisKKyAgaV9zbW9iLT5vYmpl Y3QgPSBvYmplY3Q7CisgIGlfc21vYi0+cHJvZ3Jlc3MgPSBwcm9ncmVzczsK KyAgaV9zbW9iLT5uZXh0X3ggPSBuZXh0OworICBzbW9iID0gc2NtX25ld19z bW9iIChpdGVyYXRvcl9zbW9iX3RhZywgKHNjbV90X2JpdHMpIGlfc21vYik7 CisgIGdkYnNjbV9pbml0X2dzbW9iIChzbW9iLCAmaV9zbW9iLT5iYXNlLCBn ZGJzY21faXRlcmF0b3Jfc21vYl9uYW1lKTsKKyAgcmV0dXJuIHNtb2I7Cit9 CisKK2ludAorZ2Ric2NtX2lzX2l0ZXJhdG9yIChTQ00gc2NtKQoreworICBp ZiAoU0NNX0lNUCAoc2NtKSkKKyAgICByZXR1cm4gMDsKKyAgcmV0dXJuIFND TV9UWVAxNiAoc2NtKSA9PSBpdGVyYXRvcl9zbW9iX3RhZzsKK30KKworc3Rh dGljIFNDTQorZ2Ric2NtX2l0ZXJhdG9yX3AgKFNDTSBzY20pCit7CisgIHJl dHVybiBzY21fZnJvbV9ib29sIChnZGJzY21faXNfaXRlcmF0b3IgKHNjbSkp OworfQorDAorc3RhdGljIHZvaWQKK2Fzc2VydF9pc19pdGVyYXRvciAoU0NN IHNlbGYsIGNvbnN0IGNoYXIgKmZ1bmNfbmFtZSkKK3sKKyAgU0NNX0FTU0VS VF9UWVBFIChnZGJzY21faXNfaXRlcmF0b3IgKHNlbGYpLCBzZWxmLCAwLCBm dW5jX25hbWUsCisJCSAgIGdkYnNjbV9pdGVyYXRvcl9zbW9iX25hbWUpOwor fQorCitzdGF0aWMgU0NNCitnZGJzY21faXRlcmF0b3Jfb2JqZWN0IChTQ00g c2VsZikKK3sKKyAgaXRlcmF0b3Jfc21vYiAqaV9zbW9iOworCisgIGFzc2Vy dF9pc19pdGVyYXRvciAoc2VsZiwgRlVOQ19OQU1FKTsKKyAgaV9zbW9iID0g KGl0ZXJhdG9yX3Ntb2IgKikgU0NNX1NNT0JfREFUQSAoc2VsZik7CisKKyAg cmV0dXJuIGlfc21vYi0+b2JqZWN0OworfQorCitzdGF0aWMgU0NNCitnZGJz Y21faXRlcmF0b3JfcmVmX3Byb2dyZXNzIChTQ00gc2VsZikKK3sKKyAgaXRl cmF0b3Jfc21vYiAqaV9zbW9iOworCisgIGFzc2VydF9pc19pdGVyYXRvciAo c2VsZiwgRlVOQ19OQU1FKTsKKyAgaV9zbW9iID0gKGl0ZXJhdG9yX3Ntb2Ig KikgU0NNX1NNT0JfREFUQSAoc2VsZik7CisKKyAgcmV0dXJuIGlfc21vYi0+ cHJvZ3Jlc3M7Cit9CisKK3N0YXRpYyBTQ00KK2dkYnNjbV9pdGVyYXRvcl9z ZXRfcHJvZ3Jlc3NfeCAoU0NNIHNlbGYsIFNDTSB2YWx1ZSkKK3sKKyAgaXRl cmF0b3Jfc21vYiAqaV9zbW9iOworCisgIGFzc2VydF9pc19pdGVyYXRvciAo c2VsZiwgRlVOQ19OQU1FKTsKKyAgaV9zbW9iID0gKGl0ZXJhdG9yX3Ntb2Ig KikgU0NNX1NNT0JfREFUQSAoc2VsZik7CisKKyAgaV9zbW9iLT5wcm9ncmVz cyA9IHZhbHVlOworICByZXR1cm4gU0NNX1VOU1BFQ0lGSUVEOworfQorCitz dGF0aWMgU0NNCitnZGJzY21faXRlcmF0b3JfbmV4dF94IChTQ00gc2VsZikK K3sKKyAgaXRlcmF0b3Jfc21vYiAqaV9zbW9iOworCisgIGFzc2VydF9pc19p dGVyYXRvciAoc2VsZiwgRlVOQ19OQU1FKTsKKyAgaV9zbW9iID0gKGl0ZXJh dG9yX3Ntb2IgKikgU0NNX1NNT0JfREFUQSAoc2VsZik7CisgIC8qIFdlIGxl YXZlIHR5cGUtY2hlY2tpbmcgb2YgdGhlIHByb2NlZHVyZSB0byBnZGJzY21f c2FmZV9jYWxsXzEuICAqLworCisgIHJldHVybiBnZGJzY21fc2FmZV9jYWxs XzEgKGlfc21vYi0+bmV4dF94LCBzZWxmKTsKK30KKwwKKy8qIEluaXRpYWxp emUgdGhlIFNjaGVtZSBpdGVyYXRvciBjb2RlLiAgKi8KKworc3RhdGljIGNv bnN0IHNjaGVtZV92YXJpYWJsZSBpdGVyYXRvcl92YXJpYWJsZXNbXSA9Cit7 CisgIHsgIippbml0LWl0ZXJhdG9yKiIsIFNDTV9CT09MX0YgfSwKKyAgeyBO VUxMLCBTQ01fQk9PTF9GIH0KK307CisKK3N0YXRpYyBjb25zdCBzY2hlbWVf ZnVuY3Rpb24gaXRlcmF0b3JfZnVuY3Rpb25zW10gPQoreworICB7ICJtYWtl LWl0ZXJhdG9yIiwgMiwgMCwgMCwgZ2Ric2NtX21ha2VfaXRlcmF0b3IgfSwK KyAgeyAiaXRlcmF0b3I/IiwgMSwgMCwgMCwgZ2Ric2NtX2l0ZXJhdG9yX3Ag fSwKKyAgeyAiaXRlcmF0b3Itb2JqZWN0IiwgMSwgMCwgMCwgZ2Ric2NtX2l0 ZXJhdG9yX29iamVjdCB9LAorICB7ICJpdGVyYXRvci1yZWYtcHJvZ3Jlc3Mi LCAxLCAwLCAwLCBnZGJzY21faXRlcmF0b3JfcmVmX3Byb2dyZXNzIH0sCisg IHsgIml0ZXJhdG9yLXNldC1wcm9ncmVzcyEiLCAyLCAwLCAwLCBnZGJzY21f aXRlcmF0b3Jfc2V0X3Byb2dyZXNzX3ggfSwKKyAgeyAiaXRlcmF0b3ItbmV4 dCEiLCAxLCAwLCAwLCBnZGJzY21faXRlcmF0b3JfbmV4dF94IH0sCisgIHsg TlVMTCwgMCwgMCwgMCwgTlVMTCB9Cit9OworCit2b2lkCitnZGJzY21faW5p dGlhbGl6ZV9pdGVyYXRvcnMgKHZvaWQpCit7CisgIGl0ZXJhdG9yX3Ntb2Jf dGFnID0gZ2Ric2NtX21ha2Vfc21vYl90eXBlIChnZGJzY21faXRlcmF0b3Jf c21vYl9uYW1lLAorCQkJCQkgICAgIHNpemVvZiAoaXRlcmF0b3Jfc21vYikp OworICBzY21fc2V0X3Ntb2JfbWFyayAoaXRlcmF0b3Jfc21vYl90YWcsIG1h cmtfaXRlcmF0b3Jfc21vYik7CisgIHNjbV9zZXRfc21vYl9wcmludCAoaXRl cmF0b3Jfc21vYl90YWcsIHByaW50X2l0ZXJhdG9yX3Ntb2IpOworCisgIGdk YnNjbV9kZWZpbmVfdmFyaWFibGVzIChpdGVyYXRvcl92YXJpYWJsZXMsIDEp OworICBnZGJzY21fZGVmaW5lX2Z1bmN0aW9ucyAoaXRlcmF0b3JfZnVuY3Rp b25zLCAxKTsKK30KZGlmZiAtcnBOIC1VIDIgc2NoZW1lPS9zY20tcHJldHR5 LXByaW50LmMgc2NoZW1lL3NjbS1wcmV0dHktcHJpbnQuYwotLS0gc2NoZW1l PS9zY20tcHJldHR5LXByaW50LmMJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAw MDAwMDAgLTA4MDAKKysrIHNjaGVtZS9zY20tcHJldHR5LXByaW50LmMJMjAx My0wOS0wNiAwNzo1MjoxMy4zOTM5NzAxNjIgLTA3MDAKQEAgLTAsMCArMSw5 MDUgQEAKKy8qIGdkYi9zY2hlbWUgcHJldHR5LXByaW50aW5nLgorCisgICBD b3B5cmlnaHQgKEMpIDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKworICAgVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgImRlZnMuaCIKKyNp bmNsdWRlICJnZGJfYXNzZXJ0LmgiCisjaW5jbHVkZSAic3ltdGFiLmgiIC8q IE5lZWRlZCBieSBsYW5ndWFnZS5oLiAgKi8KKyNpbmNsdWRlICJsYW5ndWFn ZS5oIgorI2luY2x1ZGUgInZhbHVlLmgiCisjaW5jbHVkZSAidmFscHJpbnQu aCIKKyNpbmNsdWRlICJzY2hlbWUvc2NoZW1lLWludGVybmFsLmgiCisKKy8q IFJldHVybiB0eXBlIG9mIHByaW50X3N0cmluZ19yZXByLiAgKi8KKworZW51 bSBzdHJpbmdfcmVwcl9yZXN1bHQKKyAgeworICAgIC8qIFRoZSBzdHJpbmcg bWV0aG9kIHJldHVybmVkIE5vbmUuICAqLworICAgIFNUUklOR19SRVBSX05P TkUsCisgICAgLyogVGhlIHN0cmluZyBtZXRob2QgaGFkIGFuIGVycm9yLiAg Ki8KKyAgICBTVFJJTkdfUkVQUl9FUlJPUiwKKyAgICAvKiBFdmVyeXRoaW5n IG9rLiAgKi8KKyAgICBTVFJJTkdfUkVQUl9PSworICB9OworCisvKiBTTU9C IGZvciBwcmV0dHktcHJpbnRlciBtYXRjaGVycy4gICovCisKK3R5cGVkZWYg c3RydWN0Cit7CisgIGdkYl9zbW9iIGJhc2U7CisKKyAgU0NNIG5hbWU7Cisg IFNDTSBlbmFibGVkOworICBTQ00gbG9va3VwOworICAvL1RPRE86IHN1YnBy aW50ZXJzPyAgT3IgdXNlIGV4dGVybmFsIGNsYXNzIG1lY2hhbmlzbT8KK30g cHJldHR5X3ByaW50ZXJfbWF0Y2hlcl9zbW9iOworCisvKiBTTU9CIGZvciBw cmV0dHktcHJpbnRlcnMuICAqLworCit0eXBlZGVmIHN0cnVjdAoreworICBn ZGJfc21vYiBiYXNlOworCisgIFNDTSBkaXNwbGF5X2hpbnQ7CisgIFNDTSB0 b19zdHJpbmc7CisgIFNDTSBjaGlsZHJlbjsKK30gcHJldHR5X3ByaW50ZXJf c21vYjsKKworc3RhdGljIGNvbnN0IGNoYXIgcHJldHR5X3ByaW50ZXJfbWF0 Y2hlcl9zbW9iX25hbWVbXSA9CisgICJnZGI6cHJldHR5LXByaW50ZXItbWF0 Y2hlciI7CitzdGF0aWMgY29uc3QgY2hhciBwcmV0dHlfcHJpbnRlcl9zbW9i X25hbWVbXSA9ICJnZGI6cHJldHR5LXByaW50ZXIiOworCisvKiBUaGUgdGFn IEd1aWxlIGtub3dzIHRoZSBwcmV0dHktcHJpbnRlciBzbW9icyBieS4gICov CitzdGF0aWMgc2NtX3RfYml0cyBwcmV0dHlfcHJpbnRlcl9tYXRjaGVyX3Nt b2JfdGFnOworc3RhdGljIHNjbV90X2JpdHMgcHJldHR5X3ByaW50ZXJfc21v Yl90YWc7CisKKy8qIEdsb2JhbCBsaXN0IG9mIHByZXR0eS1wcmludGVycy4g ICovCitzdGF0aWMgY29uc3QgY2hhciBwcmV0dHlfcHJpbnRlcl9saXN0X25h bWVbXSA9ICIqcHJldHR5LXByaW50ZXJzKiI7CisMCisvKiBQcmV0dHktcHJp bnRlciBtYXRjaGVyIHNtb2JzLiAgKi8KKworc3RhdGljIFNDTQorbWFya19w cmV0dHlfcHJpbnRlcl9tYXRjaGVyX3Ntb2IgKFNDTSBzZWxmKQoreworICBw cmV0dHlfcHJpbnRlcl9tYXRjaGVyX3Ntb2IgKm1hdGNoZXJfc21vYiA9Cisg ICAgKHByZXR0eV9wcmludGVyX21hdGNoZXJfc21vYiAqKSBTQ01fU01PQl9E QVRBIChzZWxmKTsKKworICBzY21fZ2NfbWFyayAobWF0Y2hlcl9zbW9iLT5u YW1lKTsKKyAgc2NtX2djX21hcmsgKG1hdGNoZXJfc21vYi0+ZW5hYmxlZCk7 CisgIHNjbV9nY19tYXJrIChtYXRjaGVyX3Ntb2ItPmxvb2t1cCk7CisgIC8q IERvIHRoaXMgbGFzdC4gICovCisgIHJldHVybiBnZGJzY21fbWFya19nc21v YiAoJm1hdGNoZXJfc21vYi0+YmFzZSk7Cit9CisKK3N0YXRpYyBpbnQKK3By aW50X3ByZXR0eV9wcmludGVyX21hdGNoZXJfc21vYiAoU0NNIHNlbGYsIFND TSBwb3J0LCBzY21fcHJpbnRfc3RhdGUgKnBzdGF0ZSkKK3sKKyAgcHJldHR5 X3ByaW50ZXJfbWF0Y2hlcl9zbW9iICptYXRjaGVyX3Ntb2IgPQorICAgIChw cmV0dHlfcHJpbnRlcl9tYXRjaGVyX3Ntb2IgKikgU0NNX1NNT0JfREFUQSAo c2VsZik7CisKKyAgZ2Ric2NtX3ByaW50ZiAocG9ydCwgIiM8JXMgIiwgcHJl dHR5X3ByaW50ZXJfbWF0Y2hlcl9zbW9iX25hbWUpOworICBzY21fZGlzcGxh eSAobWF0Y2hlcl9zbW9iLT5uYW1lLCBwb3J0KTsKKyAgc2NtX3B1dHMgKCI+ IiwgcG9ydCk7CisKKyAgc2NtX3JlbWVtYmVyX3VwdG9faGVyZV8xIChzZWxm KTsKKworICAvKiBOb24temVybyBtZWFucyBzdWNjZXNzLiAgKi8KKyAgcmV0 dXJuIDE7Cit9CisKKy8vIFRPRE86IGtleXdvcmQgYXJncz8KKworc3RhdGlj IFNDTQorbWFrZV9wcmV0dHlfcHJpbnRlcl9tYXRjaGVyIChTQ00gbmFtZSwg U0NNIGxvb2t1cCwgU0NNIGVuYWJsZWQpCit7CisgIHByZXR0eV9wcmludGVy X21hdGNoZXJfc21vYiAqbWF0Y2hlcl9zbW9iID0gKHByZXR0eV9wcmludGVy X21hdGNoZXJfc21vYiAqKQorICAgIHNjbV9nY19tYWxsb2MgKHNpemVvZiAo cHJldHR5X3ByaW50ZXJfbWF0Y2hlcl9zbW9iKSwKKwkJICAgcHJldHR5X3By aW50ZXJfbWF0Y2hlcl9zbW9iX25hbWUpOworICBTQ00gc21vYjsKKworICBT Q01fQVNTRVJUX1RZUEUgKHNjbV9pc19zdHJpbmcgKG5hbWUpLCBuYW1lLCAw LCBGVU5DX05BTUUsICJzdHJpbmciKTsKKyAgU0NNX0FTU0VSVF9UWVBFIChn ZGJzY21faXNfcHJvY2VkdXJlIChsb29rdXApLCBsb29rdXAsIDEsIEZVTkNf TkFNRSwKKwkJICAgInByb2NlZHVyZSIpOworICBTQ01fQVNTRVJUX1RZUEUg KGdkYnNjbV9pc19ib29sIChlbmFibGVkKSwgZW5hYmxlZCwgMiwgRlVOQ19O QU1FLCAiYm9vbGVhbiIpOworCisgIG1hdGNoZXJfc21vYi0+bmFtZSA9IG5h bWU7CisgIG1hdGNoZXJfc21vYi0+bG9va3VwID0gbG9va3VwOworICBtYXRj aGVyX3Ntb2ItPmVuYWJsZWQgPSBlbmFibGVkOworICBzbW9iID0gc2NtX25l d19zbW9iIChwcmV0dHlfcHJpbnRlcl9tYXRjaGVyX3Ntb2JfdGFnLAorCQkg ICAgICAgKHNjbV90X2JpdHMpIG1hdGNoZXJfc21vYik7CisgIGdkYnNjbV9p bml0X2dzbW9iIChzbW9iLCAmbWF0Y2hlcl9zbW9iLT5iYXNlLAorCQkgICAg IHByZXR0eV9wcmludGVyX21hdGNoZXJfc21vYl9uYW1lKTsKKyAgcmV0dXJu IHNtb2I7Cit9CisKK3N0YXRpYyBpbnQKK2dkYnNjbV9pc19wcmV0dHlfcHJp bnRlcl9tYXRjaGVyIChTQ00gc2NtKQoreworICBpZiAoU0NNX0lNUCAoc2Nt KSkKKyAgICByZXR1cm4gMDsKKyAgcmV0dXJuIFNDTV9UWVAxNiAoc2NtKSA9 PSBwcmV0dHlfcHJpbnRlcl9tYXRjaGVyX3Ntb2JfdGFnOworfQorCitzdGF0 aWMgU0NNCitwcmV0dHlfcHJpbnRlcl9tYXRjaGVyX3AgKFNDTSBzY20pCit7 CisgIHJldHVybiBzY21fZnJvbV9ib29sIChnZGJzY21faXNfcHJldHR5X3By aW50ZXJfbWF0Y2hlciAoc2NtKSk7Cit9CisMCisvKiBUaGUgcHJpbnRlciBw cmludGVyIHNtb2IuCisgICBUaGVzZSBhcmUgY3JlYXRlZCB3aGVuIGEgbWF0 Y2hlciByZWNvZ25pemVzIGEgdmFsdWUuICAqLworCitzdGF0aWMgU0NNCitt YXJrX3ByZXR0eV9wcmludGVyX3Ntb2IgKFNDTSBzZWxmKQoreworICBwcmV0 dHlfcHJpbnRlcl9zbW9iICpwcF9zbW9iID0KKyAgICAocHJldHR5X3ByaW50 ZXJfc21vYiAqKSBTQ01fU01PQl9EQVRBIChzZWxmKTsKKworICBzY21fZ2Nf bWFyayAocHBfc21vYi0+ZGlzcGxheV9oaW50KTsKKyAgc2NtX2djX21hcmsg KHBwX3Ntb2ItPnRvX3N0cmluZyk7CisgIHNjbV9nY19tYXJrIChwcF9zbW9i LT5jaGlsZHJlbik7CisgIC8qIERvIHRoaXMgbGFzdC4gICovCisgIHJldHVy biBnZGJzY21fbWFya19nc21vYiAoJnBwX3Ntb2ItPmJhc2UpOworfQorCitz dGF0aWMgaW50CitwcmludF9wcmV0dHlfcHJpbnRlcl9zbW9iIChTQ00gc2Vs ZiwgU0NNIHBvcnQsIHNjbV9wcmludF9zdGF0ZSAqcHN0YXRlKQoreworICBw cmV0dHlfcHJpbnRlcl9zbW9iICpwcF9zbW9iID0KKyAgICAocHJldHR5X3By aW50ZXJfc21vYiAqKSBTQ01fU01PQl9EQVRBIChzZWxmKTsKKworICBnZGJz Y21fcHJpbnRmIChwb3J0LCAiIzwlcyAiLCBwcmV0dHlfcHJpbnRlcl9zbW9i X25hbWUpOworICBzY21fZGlzcGxheSAocHBfc21vYi0+ZGlzcGxheV9oaW50 LCBwb3J0KTsKKyAgc2NtX3B1dHMgKCIgIiwgcG9ydCk7CisgIHNjbV9kaXNw bGF5IChwcF9zbW9iLT50b19zdHJpbmcsIHBvcnQpOworICBzY21fcHV0cyAo IiAiLCBwb3J0KTsKKyAgc2NtX2Rpc3BsYXkgKHBwX3Ntb2ItPmNoaWxkcmVu LCBwb3J0KTsKKyAgc2NtX3B1dHMgKCI+IiwgcG9ydCk7CisKKyAgc2NtX3Jl bWVtYmVyX3VwdG9faGVyZV8xIChzZWxmKTsKKworICAvKiBOb24temVybyBt ZWFucyBzdWNjZXNzLiAgKi8KKyAgcmV0dXJuIDE7Cit9CisKKy8vIFRPRE86 IGtleXdvcmQgYXJncz8KKworc3RhdGljIFNDTQorbWFrZV9wcmV0dHlfcHJp bnRlciAoU0NNIGRpc3BsYXlfaGludCwgU0NNIHRvX3N0cmluZywgU0NNIGNo aWxkcmVuKQoreworICBwcmV0dHlfcHJpbnRlcl9zbW9iICpwcF9zbW9iID0g KHByZXR0eV9wcmludGVyX3Ntb2IgKikKKyAgICBzY21fZ2NfbWFsbG9jIChz aXplb2YgKHByZXR0eV9wcmludGVyX3Ntb2IpLAorCQkgICBwcmV0dHlfcHJp bnRlcl9zbW9iX25hbWUpOworICBTQ00gc21vYjsKKworICBwcF9zbW9iLT5k aXNwbGF5X2hpbnQgPSBkaXNwbGF5X2hpbnQ7CisgIHBwX3Ntb2ItPnRvX3N0 cmluZyA9IHRvX3N0cmluZzsKKyAgcHBfc21vYi0+Y2hpbGRyZW4gPSBjaGls ZHJlbjsKKyAgc21vYiA9IHNjbV9uZXdfc21vYiAocHJldHR5X3ByaW50ZXJf c21vYl90YWcsIChzY21fdF9iaXRzKSBwcF9zbW9iKTsKKyAgZ2Ric2NtX2lu aXRfZ3Ntb2IgKHNtb2IsICZwcF9zbW9iLT5iYXNlLCBwcmV0dHlfcHJpbnRl cl9zbW9iX25hbWUpOworICByZXR1cm4gc21vYjsKK30KKworc3RhdGljIGlu dAorZ2Ric2NtX2lzX3ByZXR0eV9wcmludGVyIChTQ00gc2NtKQoreworICBp ZiAoU0NNX0lNUCAoc2NtKSkKKyAgICByZXR1cm4gMDsKKyAgcmV0dXJuIFND TV9UWVAxNiAoc2NtKSA9PSBwcmV0dHlfcHJpbnRlcl9zbW9iX3RhZzsKK30K Kworc3RhdGljIFNDTQorcHJldHR5X3ByaW50ZXJfcCAoU0NNIHNjbSkKK3sK KyAgcmV0dXJuIHNjbV9mcm9tX2Jvb2wgKGdkYnNjbV9pc19wcmV0dHlfcHJp bnRlciAoc2NtKSk7Cit9CisMCisvKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGZp bmRfcHJldHR5X3ByaW50ZXIgd2hpY2ggaXRlcmF0ZXMgb3ZlciBhIGxpc3Qs CisgICBjYWxscyBlYWNoIGZ1bmN0aW9uIGFuZCBpbnNwZWN0cyBvdXRwdXQu ICBUaGlzIHdpbGwgcmV0dXJuIGEKKyAgIHByZXR0eS1wcmludGVyIG9iamVj dCBpZiBvbmUgcmVjb2duaXplcyBWQUxVRS4gIElmIG5vIHByaW50ZXIgaXMg Zm91bmQsCisgICBpdCB3aWxsIHJldHVybiAjZi4gIE9uIGVycm9yLCBpdCB3 aWxsIHJldHVybiBhbiBleGNlcHRpb24gc21vYi4KKworICAgTm90ZTogVGhp cyBoYXMgdG8gYmUgZWZmaWNpZW50IGFuZCBjYXJlZnVsLgorICAgV2UgZG9u J3Qgd2FudCB0byBleGNlc3NpdmVseSBzbG93IGRvd24gcHJpbnRpbmcgb2Yg dmFsdWVzLCBidXQgd2UgY2FuJ3QKKyAgIHByZXZlbnQgYW55IGtpbmQgb2Yg cmFuZG9tIGNydWQgZnJvbSBhcHBlYXJpbmcgaW4gdGhlIHByZXR0eS1wcmlu dGVyIGxpc3QsCisgICBhbmQgd2UgY2FuJ3QgY3Jhc2ggYmVjYXVzZSBvZiBp dC4gICovCisKK3N0YXRpYyBTQ00KK3NlYXJjaF9wcF9saXN0IChTQ00gbGlz dCwgU0NNIHZhbHVlKQoreworICBTQ00gb3JpZ19saXN0ID0gbGlzdDsKKwor ICBpZiAoc2NtX2lzX251bGwgKGxpc3QpKQorICAgIHJldHVybiBTQ01fQk9P TF9GOworICBTQ01fQVNTRVJUX1RZUEUgKHNjbV9pc19wYWlyIChsaXN0KSwg bGlzdCwgMCwgRlVOQ19OQU1FLCAibGlzdCIpOworCisgIC8qIFRPRE86IFRo aXMgZG9lc24ndCBoYW5kbGUgYSBsb29wIGluIHRoZSBsaXN0ICh3aGljaCB3 b3VsZCBjYXVzZQorICAgICBhbiBpbmZpbml0ZSBsb29wKS4gIExhdGVyLiAg Ki8KKworICBmb3IgKCA7IHNjbV9pc19wYWlyIChsaXN0KTsgbGlzdCA9IHNj bV9jZHIgKGxpc3QpKQorICAgIHsKKyAgICAgIFNDTSBtYXRjaGVyX29iamVj dCA9IHNjbV9jYXIgKGxpc3QpOworICAgICAgU0NNIHByaW50ZXI7CisgICAg ICBwcmV0dHlfcHJpbnRlcl9tYXRjaGVyX3Ntb2IgKm1hdGNoZXJfc21vYjsK KworICAgICAgaWYgKCFnZGJzY21faXNfcHJldHR5X3ByaW50ZXJfbWF0Y2hl ciAobWF0Y2hlcl9vYmplY3QpKQorCXsKKwkgIHJldHVybiBnZGJzY21fbWFr ZV9leGNlcHRpb24gKGdkYnNjbV9pbnZhbGlkX3R5cGVfc3ltYm9sLAorCQkJ CQltYXRjaGVyX29iamVjdCk7CisJfQorCisgICAgICBtYXRjaGVyX3Ntb2Ig PQorCShwcmV0dHlfcHJpbnRlcl9tYXRjaGVyX3Ntb2IgKikgU0NNX1NNT0Jf REFUQSAobWF0Y2hlcl9vYmplY3QpOworCisgICAgICAvKiBTa2lwIGlmIGRp c2FibGVkLiAgKi8KKyAgICAgIGlmIChnZGJzY21faXNfZmFsc2UgKG1hdGNo ZXJfc21vYi0+ZW5hYmxlZCkpCisJY29udGludWU7CisKKyAgICAgIGlmICgh Z2Ric2NtX2lzX3Byb2NlZHVyZSAobWF0Y2hlcl9zbW9iLT5sb29rdXApKQor CXsKKwkgIHJldHVybiBnZGJzY21fbWFrZV9leGNlcHRpb24gKGdkYnNjbV9p bnZhbGlkX3R5cGVfc3ltYm9sLAorCQkJCQltYXRjaGVyX3Ntb2ItPmxvb2t1 cCk7CisJfQorCisgICAgICBwcmludGVyID0gZ2Ric2NtX3NhZmVfY2FsbF8y IChtYXRjaGVyX3Ntb2ItPmxvb2t1cCwgbWF0Y2hlcl9vYmplY3QsCisJCQkJ ICAgIHZhbHVlKTsKKyAgICAgIGlmICghZ2Ric2NtX2lzX2ZhbHNlIChwcmlu dGVyKSkKKwl7CisJICBpZiAoZ2Ric2NtX2lzX2V4Y2VwdGlvbiAocHJpbnRl cikpCisJICAgIHJldHVybiBwcmludGVyOworCSAgaWYgKCFnZGJzY21faXNf cHJldHR5X3ByaW50ZXIgKHByaW50ZXIpKQorCSAgICB7CisJICAgICAgcmV0 dXJuIGdkYnNjbV9tYWtlX2V4Y2VwdGlvbiAoZ2Ric2NtX2ludmFsaWRfdHlw ZV9zeW1ib2wsCisJCQkJCSAgICBwcmludGVyKTsKKwkgICAgfQorCSAgcmV0 dXJuIHByaW50ZXI7CisJfQorICAgIH0KKworICBTQ01fQVNTRVJUX1RZUEUg KHNjbV9pc19udWxsIChsaXN0KSwgb3JpZ19saXN0LCAwLCBGVU5DX05BTUUs ICJsaXN0Iik7CisKKyAgcmV0dXJuIFNDTV9CT09MX0Y7Cit9CisKKy8qIFN1 YnJvdXRpbmUgb2YgZmluZF9wcmV0dHlfcHJpbnRlciB0byBzaW1wbGlmeSBp dC4KKyAgIExvb2sgZm9yIGEgcHJldHR5LXByaW50ZXIgdG8gcHJpbnQgVkFM VUUgaW4gYWxsIG9iamZpbGVzLgorICAgSWYgdGhlcmUncyBhbiBlcnJvciBh biBleGNlcHRpb24gc21vYiBpcyByZXR1cm5lZC4KKyAgIFRoZSByZXN1bHQg aXMgI2YsIGlmIG5vIHByZXR0eS1wcmludGVyIHdhcyBmb3VuZC4KKyAgIE90 aGVyd2lzZSB0aGUgcmVzdWx0IGlzIHRoZSBwcmV0dHktcHJpbnRlciBzbW9i LiAgKi8KKworc3RhdGljIFNDTQorZmluZF9wcmV0dHlfcHJpbnRlcl9mcm9t X29iamZpbGVzIChTQ00gdmFsdWUpCit7CisgIHJldHVybiBTQ01fQk9PTF9G OyAvL1RPRE8KK30KKworLyogU3Vicm91dGluZSBvZiBmaW5kX3ByZXR0eV9w cmludGVyIHRvIHNpbXBsaWZ5IGl0LgorICAgTG9vayBmb3IgYSBwcmV0dHkt cHJpbnRlciB0byBwcmludCBWQUxVRSBpbiB0aGUgY3VycmVudCBwcm9ncmFt IHNwYWNlLgorICAgSWYgdGhlcmUncyBhbiBlcnJvciBhbiBleGNlcHRpb24g c21vYiBpcyByZXR1cm5lZC4KKyAgIFRoZSByZXN1bHQgaXMgI2YsIGlmIG5v IHByZXR0eS1wcmludGVyIHdhcyBmb3VuZC4KKyAgIE90aGVyd2lzZSB0aGUg cmVzdWx0IGlzIHRoZSBwcmV0dHktcHJpbnRlciBzbW9iLiAgKi8KKworc3Rh dGljIFNDTQorZmluZF9wcmV0dHlfcHJpbnRlcl9mcm9tX3Byb2dzcGFjZSAo U0NNIHZhbHVlKQoreworICByZXR1cm4gU0NNX0JPT0xfRjsgLy9UT0RPCit9 CisKKy8qIFN1YnJvdXRpbmUgb2YgZmluZF9wcmV0dHlfcHJpbnRlciB0byBz aW1wbGlmeSBpdC4KKyAgIExvb2sgZm9yIGEgcHJldHR5LXByaW50ZXIgdG8g cHJpbnQgVkFMVUUgaW4gdGhlIGdkYiBtb2R1bGUuCisgICBJZiB0aGVyZSdz IGFuIGVycm9yIGEgU2NoZW1lIGV4Y2VwdGlvbiBpcyByZXR1cm5lZC4KKyAg IFRoZSByZXN1bHQgaXMgI2YsIGlmIG5vIHByZXR0eS1wcmludGVyIHdhcyBm b3VuZC4KKyAgIE90aGVyd2lzZSB0aGUgcmVzdWx0IGlzIHRoZSBwcmV0dHkt cHJpbnRlciBzbW9iLiAgKi8KKworc3RhdGljIFNDTQorZmluZF9wcmV0dHlf cHJpbnRlcl9mcm9tX2dkYiAoU0NNIHZhbHVlKQoreworICBTQ00gcHBfbGlz dCwgcHA7CisKKyAgLyogRmV0Y2ggdGhlIGdsb2JhbCBwcmV0dHkgcHJpbnRl ciBsaXN0LiAgKi8KKyAgcHBfbGlzdCA9IHNjbV9jX3ByaXZhdGVfcmVmIChn ZGJzY21fbW9kdWxlX25hbWUsIHByZXR0eV9wcmludGVyX2xpc3RfbmFtZSk7 CisgIHBwID0gc2VhcmNoX3BwX2xpc3QgKHBwX2xpc3QsIHZhbHVlKTsKKyAg cmV0dXJuIHBwOworfQorCisvKiBGaW5kIHRoZSBwcmV0dHktcHJpbnRpbmcg Y29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIFZBTFVFLiAgSWYgbm8KKyAgIHBy ZXR0eS1wcmludGVyIGV4aXN0cywgcmV0dXJuICNmLiAgSWYgb25lIGV4aXN0 cywgcmV0dXJuIHRoZQorICAgZnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRzIGl0 LiAgT24gZXJyb3IsIGFuIGV4Y2VwdGlvbiBzbW9iIGlzIHJldHVybmVkLiAg Ki8KKworc3RhdGljIFNDTQorZmluZF9wcmV0dHlfcHJpbnRlciAoU0NNIHZh bHVlKQoreworICBTQ00gZnVuY3Rpb247CisKKyAgLyogTG9vayBhdCB0aGUg cHJldHR5LXByaW50ZXIgbGlzdCBmb3IgZWFjaCBvYmpmaWxlCisgICAgIGlu IHRoZSBjdXJyZW50IHByb2dyYW0tc3BhY2UuICAqLworICBmdW5jdGlvbiA9 IGZpbmRfcHJldHR5X3ByaW50ZXJfZnJvbV9vYmpmaWxlcyAodmFsdWUpOwor ICBpZiAoZ2Ric2NtX2lzX3RydWUgKGZ1bmN0aW9uKSkKKyAgICByZXR1cm4g ZnVuY3Rpb247CisKKyAgLyogTG9vayBhdCB0aGUgcHJldHR5LXByaW50ZXIg bGlzdCBmb3IgdGhlIGN1cnJlbnQgcHJvZ3JhbS1zcGFjZS4gICovCisgIGZ1 bmN0aW9uID0gZmluZF9wcmV0dHlfcHJpbnRlcl9mcm9tX3Byb2dzcGFjZSAo dmFsdWUpOworICBpZiAoZ2Ric2NtX2lzX3RydWUgKGZ1bmN0aW9uKSkKKyAg ICByZXR1cm4gZnVuY3Rpb247CisKKyAgLyogTG9vayBhdCB0aGUgcHJldHR5 LXByaW50ZXIgbGlzdCBpbiB0aGUgZ2RiIG1vZHVsZS4gICovCisgIGZ1bmN0 aW9uID0gZmluZF9wcmV0dHlfcHJpbnRlcl9mcm9tX2dkYiAodmFsdWUpOwor ICByZXR1cm4gZnVuY3Rpb247Cit9CisKKy8qIFByZXR0eS1wcmludCBhIHNp bmdsZSB2YWx1ZSwgdmlhIHRoZSBwcmludGVyIHNtb2IgUFJJTlRFUi4KKyAg IFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIFBSSU5U RVIgaXMgYSBwcmludGVyIHNtb2IuCisgICBJZiB0aGUgZnVuY3Rpb24gcmV0 dXJucyBhIHN0cmluZywgYW4gU0NNIGNvbnRhaW5pbmcgdGhlIHN0cmluZwor ICAgaXMgcmV0dXJuZWQuICBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyAjZiB0 aGF0IG1lYW5zIHRoZSBwcmV0dHkKKyAgIHByaW50ZXIgcmV0dXJuZWQgI2Yg YXMgYSB2YWx1ZS4gIE90aGVyd2lzZSwgaWYgdGhlIGZ1bmN0aW9uIHJldHVy bnMKKyAgIGdkYiBhIHZhbHVlLCAqT1VUX1ZBTFVFIGlzIHNldCB0byB0aGUg dmFsdWUgYW5kICN0IGlzIHJldHVybmVkLgorICAgSXQgaXMgYW4gZXJyb3Ig aWYgdGhlIHByaW50ZXIgcmV0dXJucyAjdC4KKyAgIE9uIGVycm9yLCBhbiBl eGNlcHRpb24gc21vYiBpcyByZXR1cm5lZC4gICovCisKK3N0YXRpYyBTQ00K K3ByZXR0eV9wcmludF9vbmVfdmFsdWUgKFNDTSBwcmludGVyLCBzdHJ1Y3Qg dmFsdWUgKipvdXRfdmFsdWUpCit7CisgIHZvbGF0aWxlIHN0cnVjdCBnZGJf ZXhjZXB0aW9uIGV4Y2VwdDsKKyAgU0NNIHJlc3VsdCA9IFNDTV9CT09MX0Y7 CisKKyAgKm91dF92YWx1ZSA9IE5VTEw7CisgIFRSWV9DQVRDSCAoZXhjZXB0 LCBSRVRVUk5fTUFTS19BTEwpCisgICAgeworICAgICAgcHJldHR5X3ByaW50 ZXJfc21vYiAqcHBfc21vYiA9CisJKHByZXR0eV9wcmludGVyX3Ntb2IgKikg U0NNX1NNT0JfREFUQSAocHJpbnRlcik7CisKKyAgICAgIHJlc3VsdCA9IGdk YnNjbV9zYWZlX2NhbGxfMSAocHBfc21vYi0+dG9fc3RyaW5nLCBwcmludGVy KTsKKyAgICAgIGlmIChnZGJzY21faXNfZmFsc2UgKHJlc3VsdCkpCisJOyAv KiBEb25lLiAgKi8KKyAgICAgIGVsc2UgaWYgKHNjbV9pc19zdHJpbmcgKHJl c3VsdCkKKwkgICAgICAgLypUT0RPOiB8fCBnZGJzY21faXNfbGF6eV9zdHJp bmcgKHJlc3VsdCkqLykKKwk7IC8qIERvbmUuICAqLworI2lmIDAgLy9UT0RP CisgICAgICBlbHNlIGlmIChnZGJzY21faXNfdmFsdWUgKHJlc3VsdCkpCisJ eworCSAgKm91dF92YWx1ZSA9IGdkYnNjbV9jb252ZXJ0X3ZhbHVlX2Zyb21f c2NoZW1lIChyZXN1bHQpOworCSAgcmVzdWx0ID0gU0NNX0JPT0xfVDsKKwl9 CisjZW5kaWYKKyAgICAgIGVsc2UgaWYgKGdkYnNjbV9pc19leGNlcHRpb24g KHJlc3VsdCkpCisJOyAvKiBEb25lLiAgKi8KKyAgICAgIGVsc2UKKwl7CisJ ICAvKiBJbnZhbGlkIHJlc3VsdCBmcm9tIHRvLXN0cmluZy4gICovCisJICBy ZXN1bHQgPSBnZGJzY21fbWFrZV9leGNlcHRpb24gKGdkYnNjbV9pbnZhbGlk X3R5cGVfc3ltYm9sLCByZXN1bHQpOworCX0KKyAgICB9CisKKyAgcmV0dXJu IHJlc3VsdDsKK30KKworLyogUmV0dXJuIHRoZSBkaXNwbGF5IGhpbnQgZm9y IHRoZSBvYmplY3QgcHJpbnRlciwgUFJJTlRFUi4KKyAgIFRoZSBjYWxsZXIg aXMgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIFBSSU5URVIgaXMgYSBwcmlu dGVyIHNtb2IuCisgICBSZXR1cm4gI2YgaWYgdGhlcmUgaXMgbm8gZGlzcGxh eV9oaW50IG1ldGhvZCwgb3IgaWYgdGhlIG1ldGhvZCBkaWQgbm90CisgICBy ZXR1cm4gYSBzdHJpbmcuICBPbiBlcnJvciwgcHJpbnQgc3RhY2sgdHJhY2Ug YW5kIHJldHVybiAjZi4KKyAgIE9uIHN1Y2Nlc3MsIHJldHVybiB0aGUgc3Ry aW5nIGluIFNDTSBmb3JtLiAgKi8KKworc3RhdGljIFNDTQorZ2V0X2Rpc3Bs YXlfaGludCAoU0NNIHByaW50ZXIpCit7CisgIHByZXR0eV9wcmludGVyX3Nt b2IgKnBwX3Ntb2IgPQorICAgIChwcmV0dHlfcHJpbnRlcl9zbW9iICopIFND TV9TTU9CX0RBVEEgKHByaW50ZXIpOworICBTQ00gaGludDsKKworICBpZiAo IWdkYnNjbV9pc19wcm9jZWR1cmUgKHBwX3Ntb2ItPmRpc3BsYXlfaGludCkp CisgICAgcmV0dXJuIFNDTV9CT09MX0Y7CisKKyAgaGludCA9IGdkYnNjbV9z YWZlX2NhbGxfMSAocHBfc21vYi0+ZGlzcGxheV9oaW50LCBwcmludGVyKTsK KyAgaWYgKHNjbV9pc19zdHJpbmcgKGhpbnQpKQorICAgIHJldHVybiBoaW50 OworICBpZiAoZ2Ric2NtX2lzX2V4Y2VwdGlvbiAoaGludCkpCisgICAgewor ICAgICAgZ2Ric2NtX3ByaW50X3N0YWNrICgpOworICAgICAgZ2Ric2NtX3By aW50X2V4Y2VwdGlvbiAoaGludCk7CisgICAgICByZXR1cm4gU0NNX0JPT0xf RjsKKyAgICB9CisgIHJldHVybiBTQ01fQk9PTF9GOworfQorCisvKiBBIHdy YXBwZXIgZm9yIGdkYnNjbV9wcmludF9zdGFjayB0aGF0IGlnbm9yZXMgbWVt b3J5IGVycm9ycy4gICovCisKK3N0YXRpYyB2b2lkCitwcmludF9zdGFja191 bmxlc3NfbWVtb3J5X2Vycm9yIChTQ00gZXhjZXB0aW9uLCBzdHJ1Y3QgdWlf ZmlsZSAqc3RyZWFtKQoreworICBpZiAoZ2Ric2NtX2V4Y2VwdGlvbl9tYXRj aGVzX21lbW9yeV9lcnJvciAoZXhjZXB0aW9uKSkKKyAgICB7CisgICAgICBj aGFyICptc2cgPSBnZGJzY21fZXhjZXB0aW9uX3RvX3N0cmluZyAoZXhjZXB0 aW9uKTsKKyAgICAgIHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwID0gbWFrZV9j bGVhbnVwICh4ZnJlZSwgbXNnKTsKKworICAgICAgaWYgKG1zZyA9PSBOVUxM IHx8ICptc2cgPT0gJ1wwJykKKwlmcHJpbnRmX2ZpbHRlcmVkIChzdHJlYW0s IF8oIjxlcnJvciByZWFkaW5nIHZhcmlhYmxlPiIpKTsKKyAgICAgIGVsc2UK KwlmcHJpbnRmX2ZpbHRlcmVkIChzdHJlYW0sIF8oIjxlcnJvciByZWFkaW5n IHZhcmlhYmxlOiAlcz4iKSwgbXNnKTsKKworICAgICAgZG9fY2xlYW51cHMg KGNsZWFudXApOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGdkYnNj bV9wcmludF9zdGFjayAoKTsKKyAgICAgIGdkYnNjbV9wcmludF9leGNlcHRp b24gKGV4Y2VwdGlvbik7CisgICAgfQorfQorCisvKiBIZWxwZXIgZm9yIGdk YnNjbV9hcHBseV92YWxfcHJldHR5X3ByaW50ZXIgd2hpY2ggY2FsbHMgdG9f c3RyaW5nIGFuZAorICAgZm9ybWF0cyB0aGUgcmVzdWx0LiAgKi8KKworc3Rh dGljIGVudW0gc3RyaW5nX3JlcHJfcmVzdWx0CitwcmludF9zdHJpbmdfcmVw ciAoU0NNIHByaW50ZXIsIFNDTSBoaW50LAorCQkgICBzdHJ1Y3QgdWlfZmls ZSAqc3RyZWFtLCBpbnQgcmVjdXJzZSwKKwkJICAgY29uc3Qgc3RydWN0IHZh bHVlX3ByaW50X29wdGlvbnMgKm9wdGlvbnMsCisJCSAgIGNvbnN0IHN0cnVj dCBsYW5ndWFnZV9kZWZuICpsYW5ndWFnZSwKKwkJICAgc3RydWN0IGdkYmFy Y2ggKmdkYmFyY2gpCit7CisgIHN0cnVjdCB2YWx1ZSAqcmVwbGFjZW1lbnQg PSBOVUxMOworICBTQ00gc2NtX3N0ciA9IFNDTV9CT09MX0Y7CisgIGVudW0g c3RyaW5nX3JlcHJfcmVzdWx0IHJlc3VsdCA9IFNUUklOR19SRVBSX0VSUk9S OworCisgIHNjbV9zdHIgPSBwcmV0dHlfcHJpbnRfb25lX3ZhbHVlIChwcmlu dGVyLCAmcmVwbGFjZW1lbnQpOworICBpZiAoZ2Ric2NtX2lzX2ZhbHNlIChz Y21fc3RyKSkKKyAgICB7CisgICAgICByZXN1bHQgPSBTVFJJTkdfUkVQUl9O T05FOworICAgIH0KKyAgZWxzZSBpZiAoc2NtX2lzX2VxIChzY21fc3RyLCBT Q01fQk9PTF9UKSkKKyAgICB7CisgICAgICBzdHJ1Y3QgdmFsdWVfcHJpbnRf b3B0aW9ucyBvcHRzID0gKm9wdGlvbnM7CisKKyAgICAgIGdkYl9hc3NlcnQg KHJlcGxhY2VtZW50ICE9IE5VTEwpOworICAgICAgb3B0cy5hZGRyZXNzcHJp bnQgPSAwOworICAgICAgY29tbW9uX3ZhbF9wcmludCAocmVwbGFjZW1lbnQs IHN0cmVhbSwgcmVjdXJzZSwgJm9wdHMsIGxhbmd1YWdlKTsKKyAgICAgIHJl c3VsdCA9IFNUUklOR19SRVBSX09LOworICAgIH0KKyAgZWxzZSBpZiAoc2Nt X2lzX3N0cmluZyAoc2NtX3N0cikpCisgICAgeworICAgICAgc3RydWN0IGNs ZWFudXAgKmNsZWFudXAgPSBtYWtlX2NsZWFudXAgKG51bGxfY2xlYW51cCwg TlVMTCk7CisKKyNpZiAwIC8vIFRPRE8KKyAgICAgIGlmIChnZGJzY21faXNf bGF6eV9zdHJpbmcgKHNjbV9zdHIpKQorCXsKKwkgIENPUkVfQUREUiBhZGRy OworCSAgbG9uZyBsZW5ndGg7CisJICBzdHJ1Y3QgdHlwZSAqdHlwZTsKKwkg IGNoYXIgKmVuY29kaW5nID0gTlVMTDsKKwkgIHN0cnVjdCB2YWx1ZV9wcmlu dF9vcHRpb25zIGxvY2FsX29wdHMgPSAqb3B0aW9uczsKKworCSAgbWFrZV9j bGVhbnVwIChmcmVlX2N1cnJlbnRfY29udGVudHMsICZlbmNvZGluZyk7CisJ ICBnZGJzY21fZXh0cmFjdF9sYXp5X3N0cmluZyAoc2NtX3N0ciwgJmFkZHIs ICZ0eXBlLAorCQkJCSAgICAgICZsZW5ndGgsICZlbmNvZGluZyk7CisKKwkg IGxvY2FsX29wdHMuYWRkcmVzc3ByaW50ID0gMDsKKwkgIHZhbF9wcmludF9z dHJpbmcgKHR5cGUsIGVuY29kaW5nLCBhZGRyLCAoaW50KSBsZW5ndGgsCisJ CQkgICAgc3RyZWFtLCAmbG9jYWxfb3B0cyk7CisJICByZXN1bHQgPSBTVFJJ TkdfUkVQUl9PSzsKKwl9CisgICAgICBlbHNlCisjZW5kaWYKKwl7CisJICBz aXplX3QgbGVuZ3RoOworCSAgU0NNIGV4Y2VwdGlvbjsKKwkgIGNoYXIgKnN0 cmluZyA9IGdkYnNjbV9zY21fc3RyaW5nX3RvX3RhcmdldF9jX3N0cmluZyAo c2NtX3N0ciwKKwkJCQkJCQkgICAgICAgJmxlbmd0aCwKKwkJCQkJCQkgICAg ICAgJmV4Y2VwdGlvbik7CisKKwkgIGlmIChzdHJpbmcgIT0gTlVMTCkKKwkg ICAgeworCSAgICAgIHN0cnVjdCB0eXBlICp0eXBlID0gYnVpbHRpbl90eXBl IChnZGJhcmNoKS0+YnVpbHRpbl9jaGFyOworCisJICAgICAgbWFrZV9jbGVh bnVwICh4ZnJlZSwgc3RyaW5nKTsKKwkgICAgICBpZiAoc2NtX2lzX3N0cmlu ZyAoaGludCkKKwkJICAmJiBnZGJzY21faXNfdHJ1ZSAoc2NtX3N0cmluZ19l cXVhbF9wIChoaW50LAorCQkJCQkJCSBnZGJzY21fc3RyaW5nX3N0cmluZykp KQorCQl7CisJCSAgTEFfUFJJTlRfU1RSSU5HIChzdHJlYW0sIHR5cGUsIChn ZGJfYnl0ZSAqKSBzdHJpbmcsCisJCQkJICAgbGVuZ3RoLCBOVUxMLCAwLCBv cHRpb25zKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJZnB1dHNfZmlsdGVyZWQg KHN0cmluZywgc3RyZWFtKTsKKwkgICAgICByZXN1bHQgPSBTVFJJTkdfUkVQ Ul9PSzsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgZ2Ric2Nt X3ByaW50X2V4Y2VwdGlvbiAoZXhjZXB0aW9uKTsKKwkgICAgICByZXN1bHQg PSBTVFJJTkdfUkVQUl9FUlJPUjsKKwkgICAgfQorCX0KKworICAgICAgZG9f Y2xlYW51cHMgKGNsZWFudXApOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAg ICAgIGdkYl9hc3NlcnQgKGdkYnNjbV9pc19leGNlcHRpb24gKHNjbV9zdHIp KTsKKyAgICAgIHByaW50X3N0YWNrX3VubGVzc19tZW1vcnlfZXJyb3IgKHNj bV9zdHIsIHN0cmVhbSk7CisgICAgICByZXN1bHQgPSBTVFJJTkdfUkVQUl9F UlJPUjsKKyAgICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogUHJp bnQgYW4gaW52YWxpZGF0ZSB0eXBlIGVycm9yLCBhbmQgdGhlIHN0YWNrLiAg Ki8KKworc3RhdGljIHZvaWQKK3ByaW50X2ludmFsaWRfdHlwZV9lcnJvciAo U0NNIG9iamVjdCkKK3sKKyAgU0NNIGV4Y2VwdGlvbiA9IGdkYnNjbV9tYWtl X2V4Y2VwdGlvbiAoZ2Ric2NtX2ludmFsaWRfdHlwZV9zeW1ib2wsIG9iamVj dCk7CisKKyAgZ2Ric2NtX3ByaW50X3N0YWNrICgpOworICBnZGJzY21fcHJp bnRfZXhjZXB0aW9uIChleGNlcHRpb24pOworfQorCisvKiBIZWxwZXIgZm9y IGdkYnNjbV9hcHBseV92YWxfcHJldHR5X3ByaW50ZXIgdGhhdCBmb3JtYXRz IGNoaWxkcmVuIG9mIHRoZQorICAgcHJpbnRlciwgaWYgYW55IGV4aXN0Lgor ICAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgUFJJ TlRFUiBpcyBhIHByaW50ZXIgc21vYi4KKyAgIElmIFBSSU5URURfTk9USElO RyBpcyB0cnVlLCB0aGVuIG5vdGhpbmcgaGFzIGJlZW4gcHJpbnRlZCBieSB0 b19zdHJpbmcsCisgICBhbmQgZm9ybWF0IG91dHB1dCBhY2NvcmRpbmdseS4g Ki8KKworc3RhdGljIHZvaWQKK3ByaW50X2NoaWxkcmVuIChTQ00gcHJpbnRl ciwgU0NNIGhpbnQsCisJCXN0cnVjdCB1aV9maWxlICpzdHJlYW0sIGludCBy ZWN1cnNlLAorCQljb25zdCBzdHJ1Y3QgdmFsdWVfcHJpbnRfb3B0aW9ucyAq b3B0aW9ucywKKwkJY29uc3Qgc3RydWN0IGxhbmd1YWdlX2RlZm4gKmxhbmd1 YWdlLAorCQlpbnQgcHJpbnRlZF9ub3RoaW5nKQoreworICBwcmV0dHlfcHJp bnRlcl9zbW9iICpwcF9zbW9iID0KKyAgICAocHJldHR5X3ByaW50ZXJfc21v YiAqKSBTQ01fU01PQl9EQVRBIChwcmludGVyKTsKKyAgaXRlcmF0b3Jfc21v YiAqaV9zbW9iOworICBpbnQgaXNfc3RyaW5nLCBpc19tYXAsIGlzX2FycmF5 LCBkb25lX2ZsYWcsIHByZXR0eTsKKyAgdW5zaWduZWQgaW50IGk7CisgIFND TSBjaGlsZHJlbiwgaXRlciwgc3RhdHVzOworICBzdHJ1Y3QgY2xlYW51cCAq Y2xlYW51cHM7CisKKyAgaWYgKGdkYnNjbV9pc19mYWxzZSAocHBfc21vYi0+ Y2hpbGRyZW4pKQorICAgIHJldHVybjsKKyAgaWYgKCFnZGJzY21faXNfcHJv Y2VkdXJlIChwcF9zbW9iLT5jaGlsZHJlbikpCisgICAgeworICAgICAgcHJp bnRfaW52YWxpZF90eXBlX2Vycm9yIChwcF9zbW9iLT5jaGlsZHJlbik7Cisg ICAgICByZXR1cm47CisgICAgfQorCisgIGNsZWFudXBzID0gbWFrZV9jbGVh bnVwIChudWxsX2NsZWFudXAsIE5VTEwpOworCisgIC8qIElmIHdlIGFyZSBw cmludGluZyBhIG1hcCBvciBhbiBhcnJheSwgd2Ugd2FudCBzb21lIHNwZWNp YWwKKyAgICAgZm9ybWF0dGluZy4gICovCisgIGlzX3N0cmluZyA9IHNjbV9p c19zdHJpbmcgKGhpbnQpOworICBpc19tYXAgPSAoaXNfc3RyaW5nCisJICAg ICYmIGdkYnNjbV9pc190cnVlIChzY21fc3RyaW5nX2VxdWFsX3AgKGhpbnQs CisJCQkJCQkgICBnZGJzY21fbWFwX3N0cmluZykpKTsKKyAgaXNfYXJyYXkg PSAoaXNfc3RyaW5nCisJICAgICAgJiYgZ2Ric2NtX2lzX3RydWUgKHNjbV9z dHJpbmdfZXF1YWxfcCAoaGludCwKKwkJCQkJCSAgICAgZ2Ric2NtX2FycmF5 X3N0cmluZykpKTsKKworICBjaGlsZHJlbiA9IGdkYnNjbV9zYWZlX2NhbGxf MSAocHBfc21vYi0+Y2hpbGRyZW4sIHByaW50ZXIpOworICBpZiAoZ2Ric2Nt X2lzX2V4Y2VwdGlvbiAoY2hpbGRyZW4pKQorICAgIHsKKyAgICAgIHByaW50 X3N0YWNrX3VubGVzc19tZW1vcnlfZXJyb3IgKGNoaWxkcmVuLCBzdHJlYW0p OworICAgICAgZ290byBkb25lOworICAgIH0KKyAgLyogV2UgY29tYmluZSB0 d28gc3RlcHMgaGVyZTogZ2V0IGNoaWxkcmVuLCBtYWtlIGFuIGl0ZXJhdG9y IG91dCBvZiB0aGVtLgorICAgICBUaGlzIHNpbXBsaWZpZXMgdGhpbmdzIGJl Y2F1c2UgdGhlcmUncyBubyBsYW5ndWFnZSBtZWFucyBvZiBjcmVhdGluZwor ICAgICBpdGVyYXRvcnMsIGFuZCBpdCdzIHRoZSBwcmludGVyIG9iamVjdCB0 aGF0IGtub3dzIGhvdyBpdCB3aWxsIHdhbnQgaXRzCisgICAgIGNoaWxkcmVu IGl0ZXJhdGVkIG92ZXIuICAqLworICBpZiAoIWdkYnNjbV9pc19pdGVyYXRv ciAoY2hpbGRyZW4pKQorICAgIHsKKyAgICAgIHByaW50X2ludmFsaWRfdHlw ZV9lcnJvciAoY2hpbGRyZW4pOworICAgICAgZ290byBkb25lOworICAgIH0K KyAgaXRlciA9IGNoaWxkcmVuOworICBpX3Ntb2IgPSAoaXRlcmF0b3Jfc21v YiAqKSBTQ01fU01PQl9EQVRBIChpdGVyKTsKKworICAvKiBVc2UgdGhlIHBy ZXR0eWZvcm1hdF9hcnJheXMgb3B0aW9uIGlmIHdlIGFyZSBwcmludGluZyBh biBhcnJheSwKKyAgICAgYW5kIHRoZSBwcmV0dHkgb3B0aW9uIG90aGVyd2lz ZS4gICovCisgIGlmIChpc19hcnJheSkKKyAgICBwcmV0dHkgPSBvcHRpb25z LT5wcmV0dHlmb3JtYXRfYXJyYXlzOworICBlbHNlCisgICAgeworICAgICAg aWYgKG9wdGlvbnMtPnByZXR0eWZvcm1hdCA9PSBWYWxfcHJldHR5Zm9ybWF0 KQorCXByZXR0eSA9IDE7CisgICAgICBlbHNlCisJcHJldHR5ID0gb3B0aW9u cy0+cHJldHR5Zm9ybWF0X3N0cnVjdHM7CisgICAgfQorCisgIGRvbmVfZmxh ZyA9IDA7CisgIGZvciAoaSA9IDA7IGkgPCBvcHRpb25zLT5wcmludF9tYXg7 ICsraSkKKyAgICB7CisgICAgICBTQ00gc2NtX25hbWUsIHNjbV92OworICAg ICAgU0NNIGl0ZW0gPSBnZGJzY21fc2FmZV9jYWxsXzEgKGlfc21vYi0+bmV4 dF94LCBpdGVyKTsKKyAgICAgIGNoYXIgKm5hbWU7CisgICAgICBzdHJ1Y3Qg Y2xlYW51cCAqaW5uZXJfY2xlYW51cCA9IG1ha2VfY2xlYW51cCAobnVsbF9j bGVhbnVwLCBOVUxMKTsKKworICAgICAgaWYgKGdkYnNjbV9pc19leGNlcHRp b24gKGl0ZW0pKQorCXsKKwkgIHByaW50X3N0YWNrX3VubGVzc19tZW1vcnlf ZXJyb3IgKGl0ZW0sIHN0cmVhbSk7CisJICBicmVhazsKKwl9CisgICAgICBl bHNlIGlmIChnZGJzY21faXNfZmFsc2UgKGl0ZW0pKQorCXsKKwkgIC8qIFNl dCBhIGZsYWcgc28gd2UgY2FuIGtub3cgd2hldGhlciB3ZSBwcmludGVkIGFs bCB0aGUKKwkgICAgIGF2YWlsYWJsZSBlbGVtZW50cy4gICovCisJICBkb25l X2ZsYWcgPSAxOworCSAgYnJlYWs7CisJfQorCisgICAgICBpZiAoISBzY21f aXNfcGFpciAoaXRlbSkpCisJeworCSAgcHJpbnRfaW52YWxpZF90eXBlX2Vy cm9yIChpdGVtKTsKKwkgIGNvbnRpbnVlOworCX0KKyAgICAgIHNjbV9uYW1l ID0gc2NtX2NhciAoaXRlbSk7CisgICAgICBzY21fdiA9IHNjbV9jZHIgKGl0 ZW0pOworICAgICAgaWYgKCFzY21faXNfc3RyaW5nIChzY21fbmFtZSkpCisJ eworCSAgLy9UT0RPOiBmbGFnIGVycm9yCisJfQorICAgICAgbmFtZSA9IGdk YnNjbV9zY21fdG9fY19zdHJpbmcgKHNjbV9uYW1lKTsKKyAgICAgIG1ha2Vf Y2xlYW51cCAoeGZyZWUsIG5hbWUpOworCisgICAgICAvKiBQcmludCBpbml0 aWFsICJ7Ii4gIEZvciBvdGhlciBlbGVtZW50cywgdGhlcmUgYXJlIHRocmVl CisJIGNhc2VzOgorCSAxLiBNYXBzLiAgUHJpbnQgYSAiLCIgYWZ0ZXIgZWFj aCB2YWx1ZSBlbGVtZW50LgorCSAyLiBBcnJheXMuICBBbHdheXMgcHJpbnQg YSAiLCIuCisJIDMuIE90aGVyLiAgQWx3YXlzIHByaW50IGEgIiwiLiAgKi8K KyAgICAgIGlmIChpID09IDApCisJeworICAgICAgICAgaWYgKHByaW50ZWRf bm90aGluZykKKyAgICAgICAgICAgZnB1dHNfZmlsdGVyZWQgKCJ7Iiwgc3Ry ZWFtKTsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgZnB1dHNfZmlsdGVy ZWQgKCIgPSB7Iiwgc3RyZWFtKTsKKyAgICAgICB9CisKKyAgICAgIGVsc2Ug aWYgKCEgaXNfbWFwIHx8IGkgJSAyID09IDApCisJZnB1dHNfZmlsdGVyZWQg KHByZXR0eSA/ICIsIiA6ICIsICIsIHN0cmVhbSk7CisKKyAgICAgIC8qIElu IHN1bW1hcnkgbW9kZSwgd2UganVzdCB3YW50IHRvIHByaW50ICI9IHsuLi59 IiBpZiB0aGVyZSBpcworCSBhIHZhbHVlLiAgKi8KKyAgICAgIGlmIChvcHRp b25zLT5zdW1tYXJ5KQorCXsKKwkgIC8qIFRoaXMgaW5jcmVtZW50IHRyaWNr cyB0aGUgcG9zdC1sb29wIGxvZ2ljIHRvIHByaW50IHdoYXQKKwkgICAgIHdl IHdhbnQuICAqLworCSAgKytpOworCSAgLyogTGlrZXdpc2UuICAqLworCSAg cHJldHR5ID0gMDsKKwkgIGJyZWFrOworCX0KKworICAgICAgaWYgKCEgaXNf bWFwIHx8IGkgJSAyID09IDApCisJeworCSAgaWYgKHByZXR0eSkKKwkgICAg eworCSAgICAgIGZwdXRzX2ZpbHRlcmVkICgiXG4iLCBzdHJlYW0pOworCSAg ICAgIHByaW50X3NwYWNlc19maWx0ZXJlZCAoMiArIDIgKiByZWN1cnNlLCBz dHJlYW0pOworCSAgICB9CisJICBlbHNlCisJICAgIHdyYXBfaGVyZSAobl9z cGFjZXMgKDIgKyAyICpyZWN1cnNlKSk7CisJfQorCisgICAgICBpZiAoaXNf bWFwICYmIGkgJSAyID09IDApCisJZnB1dHNfZmlsdGVyZWQgKCJbIiwgc3Ry ZWFtKTsKKyAgICAgIGVsc2UgaWYgKGlzX2FycmF5KQorCXsKKwkgIC8qIFdl IHByaW50IHRoZSBpbmRleCwgbm90IHdoYXRldmVyIHRoZSBjaGlsZCBtZXRo b2QKKwkgICAgIHJldHVybmVkIGFzIHRoZSBuYW1lLiAgKi8KKwkgIGlmIChv cHRpb25zLT5wcmludF9hcnJheV9pbmRleGVzKQorCSAgICBmcHJpbnRmX2Zp bHRlcmVkIChzdHJlYW0sICJbJWRdID0gIiwgaSk7CisJfQorICAgICAgZWxz ZSBpZiAoISBpc19tYXApCisJeworCSAgZnB1dHNfZmlsdGVyZWQgKG5hbWUs IHN0cmVhbSk7CisJICBmcHV0c19maWx0ZXJlZCAoIiA9ICIsIHN0cmVhbSk7 CisJfQorCisjaWYgMCAvL1RPRE8KKyAgICAgIGlmIChnZGJzY21faXNfbGF6 eV9zdHJpbmcgKHNjbV92KSkKKwl7CisJICBDT1JFX0FERFIgYWRkcjsKKwkg IHN0cnVjdCB0eXBlICp0eXBlOworCSAgbG9uZyBsZW5ndGg7CisJICBjaGFy ICplbmNvZGluZyA9IE5VTEw7CisJICBzdHJ1Y3QgdmFsdWVfcHJpbnRfb3B0 aW9ucyBsb2NhbF9vcHRzID0gKm9wdGlvbnM7CisKKwkgIG1ha2VfY2xlYW51 cCAoZnJlZV9jdXJyZW50X2NvbnRlbnRzLCAmZW5jb2RpbmcpOworCSAgZ2Ri c2NtX2V4dHJhY3RfbGF6eV9zdHJpbmcgKHNjbV92LCAmYWRkciwgJnR5cGUs ICZsZW5ndGgsICZlbmNvZGluZyk7CisKKwkgIGxvY2FsX29wdHMuYWRkcmVz c3ByaW50ID0gMDsKKwkgIHZhbF9wcmludF9zdHJpbmcgKHR5cGUsIGVuY29k aW5nLCBhZGRyLCAoaW50KSBsZW5ndGgsIHN0cmVhbSwKKwkJCSAgICAmbG9j YWxfb3B0cyk7CisJfQorICAgICAgZWxzZQorI2VuZGlmCisgICAgICBpZiAo c2NtX2lzX3N0cmluZyAoc2NtX3YpKQorCXsKKwkgIGNoYXIgKm91dHB1dDsK KworCSAgb3V0cHV0ID0gZ2Ric2NtX3NjbV90b19ob3N0X3N0cmluZyAoc2Nt X3YpOworCSAgaWYgKCFvdXRwdXQpCisJICAgIGdkYnNjbV9wcmludF9zdGFj ayAoKTsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGZwdXRzX2ZpbHRlcmVk IChvdXRwdXQsIHN0cmVhbSk7CisJICAgICAgeGZyZWUgKG91dHB1dCk7CisJ ICAgIH0KKwl9CisjaWYgMCAvL1RPRE8KKyAgICAgIGVsc2UKKwl7CisJICBz dHJ1Y3QgdmFsdWUgKnZhbHVlID0gY29udmVydF92YWx1ZV9mcm9tX3NjaGVt ZSAoc2NtX3YpOworCisJICBpZiAodmFsdWUgPT0gTlVMTCkKKwkgICAgewor CSAgICAgIGdkYnNjbV9wcmludF9zdGFjayAoKTsKKwkgICAgICBlcnJvciAo XygiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIFNjaGVtZSBjb2RlLiIpKTsKKwkg ICAgfQorCSAgZWxzZQorCSAgICBjb21tb25fdmFsX3ByaW50ICh2YWx1ZSwg c3RyZWFtLCByZWN1cnNlICsgMSwgb3B0aW9ucywgbGFuZ3VhZ2UpOworCX0K KyNlbmRpZgorCisgICAgICBpZiAoaXNfbWFwICYmIGkgJSAyID09IDApCisJ ZnB1dHNfZmlsdGVyZWQgKCJdID0gIiwgc3RyZWFtKTsKKworICAgICAgZG9f Y2xlYW51cHMgKGlubmVyX2NsZWFudXApOworICAgIH0KKworICBpZiAoaSkK KyAgICB7CisgICAgICBpZiAoIWRvbmVfZmxhZykKKwl7CisJICBpZiAocHJl dHR5KQorCSAgICB7CisJICAgICAgZnB1dHNfZmlsdGVyZWQgKCJcbiIsIHN0 cmVhbSk7CisJICAgICAgcHJpbnRfc3BhY2VzX2ZpbHRlcmVkICgyICsgMiAq IHJlY3Vyc2UsIHN0cmVhbSk7CisJICAgIH0KKwkgIGZwdXRzX2ZpbHRlcmVk ICgiLi4uIiwgc3RyZWFtKTsKKwl9CisgICAgICBpZiAocHJldHR5KQorCXsK KwkgIGZwdXRzX2ZpbHRlcmVkICgiXG4iLCBzdHJlYW0pOworCSAgcHJpbnRf c3BhY2VzX2ZpbHRlcmVkICgyICogcmVjdXJzZSwgc3RyZWFtKTsKKwl9Cisg ICAgICBmcHV0c19maWx0ZXJlZCAoIn0iLCBzdHJlYW0pOworICAgIH0KKwor IGRvbmU6CisgIGRvX2NsZWFudXBzIChjbGVhbnVwcyk7CisKKyAgLyogUGxh eSBpdCBzYWZlLCBtYWtlIHN1cmUgSVRFUiBkb2Vzbid0IGdldCBHQydkLiAg Ki8KKyAgc2NtX3JlbWVtYmVyX3VwdG9faGVyZV8xIChpdGVyKTsKK30KKwor LyogVGhpcyBpcyB0aGUgc2NyaXB0X2xhbmcuYXBwbHlfdmFsX3ByZXR0eV9w cmludGVyICJtZXRob2QiLiAgKi8KKworaW50CitnZGJzY21fYXBwbHlfdmFs X3ByZXR0eV9wcmludGVyIChzdHJ1Y3QgdHlwZSAqdHlwZSwgY29uc3QgZ2Ri X2J5dGUgKnZhbGFkZHIsCisJCQkJIGludCBlbWJlZGRlZF9vZmZzZXQsIENP UkVfQUREUiBhZGRyZXNzLAorCQkJCSBzdHJ1Y3QgdWlfZmlsZSAqc3RyZWFt LCBpbnQgcmVjdXJzZSwKKwkJCQkgY29uc3Qgc3RydWN0IHZhbHVlICp2YWws CisJCQkJIGNvbnN0IHN0cnVjdCB2YWx1ZV9wcmludF9vcHRpb25zICpvcHRp b25zLAorCQkJCSBjb25zdCBzdHJ1Y3QgbGFuZ3VhZ2VfZGVmbiAqbGFuZ3Vh Z2UpCit7CisgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0X3R5cGVf YXJjaCAodHlwZSk7CisgIFNDTSBleGNlcHRpb24gPSBTQ01fQk9PTF9GOwor ICBTQ00gcHJpbnRlciA9IFNDTV9CT09MX0Y7CisgIFNDTSB2YWxfb2JqID0g U0NNX0JPT0xfRjsKKyAgc3RydWN0IHZhbHVlICp2YWx1ZTsKKyAgU0NNIGhp bnQgPSBTQ01fQk9PTF9GOworICBzdHJ1Y3QgY2xlYW51cCAqY2xlYW51cHM7 CisgIGludCByZXN1bHQgPSAwOworICBlbnVtIHN0cmluZ19yZXByX3Jlc3Vs dCBwcmludF9yZXN1bHQ7CisKKyAgLyogTm8gcHJldHR5LXByaW50ZXIgc3Vw cG9ydCBmb3IgdW5hdmFpbGFibGUgdmFsdWVzLiAgKi8KKyAgaWYgKCF2YWx1 ZV9ieXRlc19hdmFpbGFibGUgKHZhbCwgZW1iZWRkZWRfb2Zmc2V0LCBUWVBF X0xFTkdUSCAodHlwZSkpKQorICAgIHJldHVybiAwOworCisgIGlmICghZ2Ri X3NjaGVtZV9pbml0aWFsaXplZCkKKyAgICByZXR1cm4gMDsKKworICBjbGVh bnVwcyA9IG1ha2VfY2xlYW51cCAobnVsbF9jbGVhbnVwLCBOVUxMKTsKKwor ICAvKiBJbnN0YW50aWF0ZSB0aGUgcHJpbnRlci4gICovCisgIGlmICh2YWxh ZGRyKQorICAgIHZhbGFkZHIgKz0gZW1iZWRkZWRfb2Zmc2V0OworICB2YWx1 ZSA9IHZhbHVlX2Zyb21fY29udGVudHNfYW5kX2FkZHJlc3MgKHR5cGUsIHZh bGFkZHIsCisJCQkJCSAgIGFkZHJlc3MgKyBlbWJlZGRlZF9vZmZzZXQpOwor CisgIHNldF92YWx1ZV9jb21wb25lbnRfbG9jYXRpb24gKHZhbHVlLCB2YWwp OworICAvKiBzZXRfdmFsdWVfY29tcG9uZW50X2xvY2F0aW9uIHJlc2V0cyB0 aGUgYWRkcmVzcywgc28gd2UgbWF5CisgICAgIG5lZWQgdG8gc2V0IGl0IGFn YWluLiAgKi8KKyAgaWYgKFZBTFVFX0xWQUwgKHZhbHVlKSAhPSBsdmFsX2lu dGVybmFsdmFyCisgICAgICAmJiBWQUxVRV9MVkFMICh2YWx1ZSkgIT0gbHZh bF9pbnRlcm5hbHZhcl9jb21wb25lbnQKKyAgICAgICYmIFZBTFVFX0xWQUwg KHZhbHVlKSAhPSBsdmFsX2NvbXB1dGVkKQorICAgIHNldF92YWx1ZV9hZGRy ZXNzICh2YWx1ZSwgYWRkcmVzcyArIGVtYmVkZGVkX29mZnNldCk7CisKKyAg dmFsX29iaiA9IGdkYnNjbV92YWx1ZV90b192YWx1ZV9vYmplY3QgKHZhbHVl KTsKKworICAvKiBGaW5kIHRoZSBjb25zdHJ1Y3Rvci4gICovCisgIHByaW50 ZXIgPSBmaW5kX3ByZXR0eV9wcmludGVyICh2YWxfb2JqKTsKKworICBpZiAo Z2Ric2NtX2lzX2V4Y2VwdGlvbiAocHJpbnRlcikpCisgICAgeworICAgICAg ZXhjZXB0aW9uID0gcHJpbnRlcjsKKyAgICAgIGdvdG8gZG9uZTsKKyAgICB9 CisgIGlmIChnZGJzY21faXNfZmFsc2UgKHByaW50ZXIpKQorICAgIGdvdG8g ZG9uZTsKKyAgaWYgKCFnZGJzY21faXNfcGxhaW5fZ3Ntb2IgKHByaW50ZXIp KQorICAgIHsKKyAgICAgIGV4Y2VwdGlvbiA9IGdkYnNjbV9tYWtlX2V4Y2Vw dGlvbiAoZ2Ric2NtX2ludmFsaWRfdHlwZV9zeW1ib2wsIHByaW50ZXIpOwor ICAgICAgZ290byBkb25lOworICAgIH0KKworICAvKiBJZiB3ZSBhcmUgcHJp bnRpbmcgYSBtYXAsIHdlIHdhbnQgc29tZSBzcGVjaWFsIGZvcm1hdHRpbmcu ICAqLworICBoaW50ID0gZ2V0X2Rpc3BsYXlfaGludCAocHJpbnRlcik7CisK KyAgLyogUHJpbnQgdGhlIHNlY3Rpb24gKi8KKyAgcHJpbnRfcmVzdWx0ID0g cHJpbnRfc3RyaW5nX3JlcHIgKHByaW50ZXIsIGhpbnQsIHN0cmVhbSwgcmVj dXJzZSwKKwkJCQkgICAgb3B0aW9ucywgbGFuZ3VhZ2UsIGdkYmFyY2gpOwor ICBpZiAocHJpbnRfcmVzdWx0ICE9IFNUUklOR19SRVBSX0VSUk9SKQorICAg IHByaW50X2NoaWxkcmVuIChwcmludGVyLCBoaW50LCBzdHJlYW0sIHJlY3Vy c2UsIG9wdGlvbnMsIGxhbmd1YWdlLAorCQkgICAgcHJpbnRfcmVzdWx0ID09 IFNUUklOR19SRVBSX05PTkUpOworCisgIHJlc3VsdCA9IDE7CisKKyBkb25l OgorICBpZiAoZ2Ric2NtX2lzX2V4Y2VwdGlvbiAoZXhjZXB0aW9uKSkKKyAg ICBwcmludF9zdGFja191bmxlc3NfbWVtb3J5X2Vycm9yIChleGNlcHRpb24s IHN0cmVhbSk7CisgIGRvX2NsZWFudXBzIChjbGVhbnVwcyk7CisgIHJldHVy biByZXN1bHQ7Cit9CisMCisvKiBJbml0aWFsaXplIHRoZSBTY2hlbWUgcHJl dHR5LXByaW50ZXIgY29kZS4gICovCisKK3N0YXRpYyBjb25zdCBzY2hlbWVf dmFyaWFibGUgcHJldHR5X3ByaW50ZXJfdmFyaWFibGVzW10gPQoreworICB7 ICIqaW5pdC1wcmV0dHktcHJpbnRlci1tYXRjaGVyKiIsIFNDTV9CT09MX0Yg fSwKKyAgeyAiKmluaXQtcHJldHR5LXByaW50ZXIqIiwgU0NNX0JPT0xfRiB9 LAorICB7IE5VTEwsIFNDTV9CT09MX0YgfQorfTsKKworc3RhdGljIGNvbnN0 IHNjaGVtZV9mdW5jdGlvbiBwcmV0dHlfcHJpbnRlcl9mdW5jdGlvbnNbXSA9 Cit7CisgIHsgIm1ha2UtcHJldHR5LXByaW50ZXItbWF0Y2hlciIsIDMsIDAs IDAsIG1ha2VfcHJldHR5X3ByaW50ZXJfbWF0Y2hlciB9LAorICB7ICJwcmV0 dHktcHJpbnRlci1tYXRjaGVyPyIsIDEsIDAsIDAsIHByZXR0eV9wcmludGVy X21hdGNoZXJfcCB9LAorICB7ICJtYWtlLXByZXR0eS1wcmludGVyIiwgMiwg MCwgMCwgbWFrZV9wcmV0dHlfcHJpbnRlciB9LAorICB7ICJwcmV0dHktcHJp bnRlcj8iLCAxLCAwLCAwLCBwcmV0dHlfcHJpbnRlcl9wIH0sCisgIHsgTlVM TCwgMCwgMCwgMCwgTlVMTCB9Cit9OworCit2b2lkCitnZGJzY21faW5pdGlh bGl6ZV9wcmV0dHlfcHJpbnRlcnMgKHZvaWQpCit7CisgIHByZXR0eV9wcmlu dGVyX21hdGNoZXJfc21vYl90YWcgPQorICAgIGdkYnNjbV9tYWtlX3Ntb2Jf dHlwZSAocHJldHR5X3ByaW50ZXJfbWF0Y2hlcl9zbW9iX25hbWUsCisJCQkg ICBzaXplb2YgKHByZXR0eV9wcmludGVyX21hdGNoZXJfc21vYikpOworICBz Y21fc2V0X3Ntb2JfbWFyayAocHJldHR5X3ByaW50ZXJfbWF0Y2hlcl9zbW9i X3RhZywKKwkJICAgICBtYXJrX3ByZXR0eV9wcmludGVyX21hdGNoZXJfc21v Yik7CisgIHNjbV9zZXRfc21vYl9wcmludCAocHJldHR5X3ByaW50ZXJfbWF0 Y2hlcl9zbW9iX3RhZywKKwkJICAgICAgcHJpbnRfcHJldHR5X3ByaW50ZXJf bWF0Y2hlcl9zbW9iKTsKKworICBwcmV0dHlfcHJpbnRlcl9zbW9iX3RhZyA9 CisgICAgZ2Ric2NtX21ha2Vfc21vYl90eXBlIChwcmV0dHlfcHJpbnRlcl9z bW9iX25hbWUsCisJCQkgICBzaXplb2YgKHByZXR0eV9wcmludGVyX3Ntb2Ip KTsKKyAgc2NtX3NldF9zbW9iX21hcmsgKHByZXR0eV9wcmludGVyX3Ntb2Jf dGFnLCBtYXJrX3ByZXR0eV9wcmludGVyX3Ntb2IpOworICBzY21fc2V0X3Nt b2JfcHJpbnQgKHByZXR0eV9wcmludGVyX3Ntb2JfdGFnLCBwcmludF9wcmV0 dHlfcHJpbnRlcl9zbW9iKTsKKworICBnZGJzY21fZGVmaW5lX3ZhcmlhYmxl cyAocHJldHR5X3ByaW50ZXJfdmFyaWFibGVzLCAxKTsKKyAgZ2Ric2NtX2Rl ZmluZV9mdW5jdGlvbnMgKHByZXR0eV9wcmludGVyX2Z1bmN0aW9ucywgMSk7 CisKKyAgc2NtX2NfZGVmaW5lIChwcmV0dHlfcHJpbnRlcl9saXN0X25hbWUs IFNDTV9FT0wpOworfQpkaWZmIC1ycE4gLVUgMiBzY2hlbWU9L3NjbS1zbW9i cy5jIHNjaGVtZS9zY20tc21vYnMuYwotLS0gc2NoZW1lPS9zY20tc21vYnMu YwkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorKysgc2No ZW1lL3NjbS1zbW9icy5jCTIwMTMtMDktMDYgMDc6NTI6MjEuNTkyOTcwNjk0 IC0wNzAwCkBAIC0wLDAgKzEsMjgyIEBACisvKiBnZGIvc2NoZW1lIHNtb2Jz IChnc21vYiBpcyBwcm9ub3VuY2VkICJnZWUgc21vYiIpCisKKyAgIENvcHly aWdodCAoQykgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K KworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgorCisgICBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK KyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisg ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3Jn L2xpY2Vuc2VzLz4uICAqLworCisvKiBTbW9icyBhcmUgR3VpbGUncyAic21h bGwgb2JqZWN0Ii4KKyAgIFRoZXkgYXJlIHVzZWQgdG8gZXhwb3J0IEMgc3Ry dWN0cyBpbnRvIFNjaGVtZS4KKworICAgTm90ZTogVGhlcmUncyBvbmx5IHJv b20gaW4gdGhlIGVuY29kaW5nIHNwYWNlIGZvciAyNTYsIGFuZCB3aGlsZSB3 ZSB3b24ndAorICAgY29tZSBjbG9zZSB0byB0aGF0LCBtaXhlZCB3aXRoIG90 aGVyIGxpYnJhcmllcyBtYXliZSBzb21lZGF5IHdlIGNvdWxkLgorICAgV2Ug ZG9uJ3Qgd29ycnkgYWJvdXQgaXQgbm93LCBleGNlcHQgdG8gYmUgYXdhcmUg b2YgdGhlIGlzc3VlLgorICAgV2UgY291bGQgYWxsb2NhdGUganVzdCBhIGZl dyBzbW9icyBhbmQgdXNlIHRoZSB1bnVzZWQgc21vYiBmbGFncyBmaWVsZCB0 bworICAgc3BlY2lmeSB0aGUgZ2RiIHNtb2Iga2luZCwgdGhhdCBpcyBsZWZ0 IGZvciBhbm90aGVyIGRheSBpZiBpdCBldmVyIGlzCisgICBuZWVkZWQuCisK KyAgIFdlIHdhbnQgdGhlIG9iamVjdHMgd2UgZXhwb3J0IHRvIFNjaGVtZSB0 byBiZSBleHRlbnNpYmxlIGJ5IHRoZSB1c2VyLgorICAgQSBnc21vYiBhZGRz IHNpbXBsZSBBUEkgb24gdG9wIG9mIHNtb2JzIHRvIHN1cHBvcnQgdGhpcy4K KyAgIFRoaXMgYWxsb3dzIEdEQiBvYmplY3RzIHRvIGJlIGVhc2lseSBleHRl bmRhYmxlIGluIGEgdXNlZnVsIG1hbm5lci4KKyAgIFRvIHRoYXQgZW5kLCBh bGwgc21vYnMgaW4gZ2RiIGhhdmUgZ2RiX3Ntb2IgYXMgdGhlIGZpcnN0IG1l bWJlci4KKworICAgQSBnc21vYiBjb25zaXN0cyBvZiB0d28gY29tbW9uIHBp ZWNlczogdnRhYmxlLCB2YWx1ZXMuCisgICBUaGluayBvZiAidnRhYmxlIiBh cyB0aGUgaW1tdXRhYmxlIHBhcnQgb2YgdGhlIGV4dGVuZGVkIG9iamVjdCAo ZS5nLiwKKyAgIGEgdmVjdG9yIGRlc2NyaWJpbmcgdGhlIG9iamVjdCkgYW5k ICJ2YWx1ZXMiIGFzIHRoZSBtdXRhYmxlIHBhcnQuCisgICBUaGUgZm9ybSBv ZiB2dGFibGUgYW5kIHZhbHVlcyBpcyBkZWZpbmVkIGJ5IHRoZSBpbXBsZW1l bnRhdGlvbiBvZiB0aGUKKyAgIG9iamVjdCBBUEkuICBXaGVuIGEgZ3Ntb2Ig aXMgY29uc3RydWN0ZWQgd2UgY2FsbCBvdXQgdG8gU2NoZW1lIHRvCisgICBp bml0aWFsaXplIHRoZW0gIEFmdGVyd2FyZHMgR0RCIGRvZXNuJ3QgdG91Y2gg dGhlbSwgZXhjZXB0IHRvIG1hcmsgdGhlbQorICAgd2hlbiBhc2tlZCBieSBH Qy4KKyovCisKKyNpbmNsdWRlICJkZWZzLmgiCisjaW5jbHVkZSAiaGFzaHRh Yi5oIgorI2luY2x1ZGUgImdkYl9hc3NlcnQuaCIKKyNpbmNsdWRlICJzY2hl bWUtaW50ZXJuYWwuaCIKKworLyogV2UgbmVlZCB0byBjYWxsIHRoaXMuICBV bmRvIG91ciBoYWNrIHRvIHByZXZlbnQgb3RoZXJzIGZyb20gY2FsbGluZyBp dC4gICovCisjdW5kZWYgc2NtX21ha2Vfc21vYl90eXBlCisKK3N0YXRpYyBj b25zdCBjaGFyIHBsYWluX2dzbW9iX25hbWVbXSA9ICJnZGI6cGxhaW4tZ3Nt b2IiOworCitzdGF0aWMgaHRhYl90IHJlZ2lzdGVyZWRfZ3Ntb2JzOworCisv KiBUaGUgdGFnIEd1aWxlIGtub3dzIHRoZSBwbGFpbiBnc21vYiBieS4gICov CitzdGF0aWMgc2NtX3RfYml0cyBwbGFpbl9nc21vYl90YWc7CisKKy8qIEhh c2ggZnVuY3Rpb24gZm9yIHJlZ2lzdGVyZWRfZ3Ntb2JzIGhhc2ggdGFibGUu ICAqLworCitzdGF0aWMgaGFzaHZhbF90CitoYXNoX3NjbV90X2JpdHMgKGNv bnN0IHZvaWQgKml0ZW0pCit7CisgIHVpbnRwdHJfdCB2ID0gKHVpbnRwdHJf dCkgaXRlbTsKKworICByZXR1cm4gdjsKK30KKworLyogRXF1YWxpdHkgZnVu Y3Rpb24gZm9yIHJlZ2lzdGVyZWRfZ3Ntb2JzIGhhc2ggdGFibGUuICAqLwor CitzdGF0aWMgaW50CitlcV9zY21fdF9iaXRzIChjb25zdCB2b2lkICppdGVt X2xocywgY29uc3Qgdm9pZCAqaXRlbV9yaHMpCit7CisgIHJldHVybiBpdGVt X2xocyA9PSBpdGVtX3JoczsKK30KKworLyogUmVjb3JkIEdTTU9CX0NPREUg YXMgYmVpbmcgYSBnZGIgc21vYi4KKyAgIEdTTU9CX0NPREUgaXMgdGhlIHJl c3VsdCBvZiBzY21fbWFrZV9zbW9iX3R5cGUuICAqLworCitzdGF0aWMgdm9p ZAorcmVnaXN0ZXJfZ3Ntb2IgKHNjbV90X2JpdHMgZ3Ntb2JfY29kZSkKK3sK KyAgdm9pZCAqKnNsb3Q7CisKKyAgc2xvdCA9IGh0YWJfZmluZF9zbG90IChy ZWdpc3RlcmVkX2dzbW9icywgKHZvaWQgKikgZ3Ntb2JfY29kZSwgSU5TRVJU KTsKKyAgZ2RiX2Fzc2VydCAoKnNsb3QgPT0gTlVMTCk7CisgICpzbG90ID0g KHZvaWQgKikgZ3Ntb2JfY29kZTsKK30KKworLyogUmV0dXJuIG5vbi16ZXJv IGlmIFNDTSBpcyBhIHJlZ2lzdGVyZWQgZ2RiIG9iamVjdC4gICovCisKK3N0 YXRpYyBpbnQKK2dzbW9iX3AgKFNDTSBzY20pCit7CisgIHZvaWQgKipzbG90 OworCisgIC8qIFRoaXMgZGlncyBpbnRvIEd1aWxlIGludGVybmFscyBhIGJp dC4KKyAgICAgSWYgdGhpcyBpc24ndCBrb3NoZXIsIElXQk4gaWYgR3VpbGUg ZXhwb3J0ZWQgd2hhdCB3ZSBuZWVkLiAgKi8KKyAgaWYgKFNDTV9JTVAgKHNj bSkpCisgICAgcmV0dXJuIDA7CisgIHNsb3QgPSBodGFiX2ZpbmRfc2xvdCAo cmVnaXN0ZXJlZF9nc21vYnMsICh2b2lkICopIFNDTV9UWVAxNiAoc2NtKSwg Tk9fSU5TRVJUKTsKKyAgcmV0dXJuIHNsb3QgIT0gTlVMTDsKK30KKworLyog Tm90ZSB0byBzZWxmOiBMZWF2ZSBfZ3Ntb2IgaW4gdGhlIG5hbWUuICAqLwor CitpbnQKK2dkYnNjbV9pc19wbGFpbl9nc21vYiAoU0NNIHNjbSkKK3sKKyAg aWYgKFNDTV9JTVAgKHNjbSkpCisgICAgcmV0dXJuIDA7CisgIHJldHVybiBT Q01fVFlQMTYgKHNjbSkgPT0gcGxhaW5fZ3Ntb2JfdGFnOworfQorCisvKiBD YWxsIHRoaXMgdG8gcmVnaXN0ZXIgYSBzbW9iLCBpbnN0ZWFkIG9mIHNjbV9t YWtlX3Ntb2JfdHlwZS4gICovCisKK3NjbV90X2JpdHMKK2dkYnNjbV9tYWtl X3Ntb2JfdHlwZSAoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IHNpemUpCit7 CisgIHNjbV90X2JpdHMgcmVzdWx0ID0gc2NtX21ha2Vfc21vYl90eXBlIChu YW1lLCBzaXplKTsKKworICByZWdpc3Rlcl9nc21vYiAocmVzdWx0KTsKKyAg cmV0dXJuIHJlc3VsdDsKK30KKworLyogQ2FsbCBvdXQgdG8gU2NoZW1lIHRv IGluaXRpYWxpemUgU01PQi4KKyAgIElmIHRoZSBpbml0aWFsaXplciB0aHJv d3MgYW4gZXhjZXB0aW9uIHByaW50IHRoZSBleGNlcHRpb24gYW5kIGxlYXZl CisgICB2dGFibGUsdmFsdWVzIGFzICNmLiAgVGhpcyBzaG91bGRuJ3QgaGFw cGVuIGV4Y2VwdCB3aGVuIHRoZXJlIGFyZSBidWdzCisgICBpbiB0aGUgaW5p dGlhbGl6ZXIuICAqLworCit2b2lkCitnZGJzY21faW5pdF9nc21vYiAoU0NN IHNtb2IsIGdkYl9zbW9iICpiYXNlLCBjb25zdCBjaGFyICpraW5kKQorewor ICBTQ00gcHJvYywgc3RhdHVzOworICBjb25zdCBjaGFyICpjb2xvbjsKKyAg Y2hhciAqaW5pdGVyOworCisgIGJhc2UtPmtpbmQgPSBraW5kOworICBiYXNl LT52dGFibGUgPSBTQ01fQk9PTF9GOworICBiYXNlLT52YWx1ZXMgPSBTQ01f Qk9PTF9GOworCisgIC8qIFJlbW92ZSBhbnkgbGVhZGluZyAiZ2RiOiIgZnJv bSBraW5kLiAgKi8KKyAgY29sb24gPSBzdHJjaHIgKGtpbmQsICc6Jyk7Cisg IGlmIChjb2xvbiAhPSBOVUxMKQorICAgIGtpbmQgPSBjb2xvbiArIDE7CisK KyAgaW5pdGVyID0geHN0cnByaW50ZiAoIippbml0LSVzKiIsIGtpbmQpOwor ICBwcm9jID0gc2NtX2NfcHVibGljX3JlZiAoZ2Ric2NtX21vZHVsZV9uYW1l LCBpbml0ZXIpOworICBpZiAoZ2Ric2NtX2lzX2ZhbHNlIChwcm9jKSkKKyAg ICByZXR1cm47CisgIGlmIChnZGJzY21faXNfcHJvY2VkdXJlIChwcm9jKSkK KyAgICB7CisgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRlcnIs ICJiYWQgdmFsdWUgZm9yIFNjaGVtZSBpbml0aWFsaXplciAlcyIsCisJCQkg IGluaXRlcik7CisgICAgfQorICBzdGF0dXMgPSBnZGJzY21fc2FmZV9jYWxs XzEgKHByb2MsIHNtb2IpOworICBpZiAoZ2Ric2NtX2lzX2V4Y2VwdGlvbiAo c3RhdHVzKSkKKyAgICB7CisgICAgICBnZGJzY21fcHJpbnRfZXhjZXB0aW9u IChzdGF0dXMpOworICAgICAgYmFzZS0+dnRhYmxlID0gU0NNX0JPT0xfRjsK KyAgICAgIGJhc2UtPnZhbHVlcyA9IFNDTV9CT09MX0Y7CisgICAgfQorfQor CisvKiBDYWxsIHRoaXMgZnJvbSBlYWNoIHNtb2IncyAibWFyayIgcm91dGlu ZS4KKyAgIEluIGdlbmVyYWwsIHRoaXMgc2hvdWxkIGJlIGNhbGxlZCBhczog cmV0dXJuIGdkYnNjbV9tYXJrX2dzbW9iIChiYXNlKTsgICovCisKK1NDTQor Z2Ric2NtX21hcmtfZ3Ntb2IgKGdkYl9zbW9iICpiYXNlKQoreworICBzY21f Z2NfbWFyayAoYmFzZS0+dnRhYmxlKTsKKyAgLyogUmV0dXJuIHRoZSBsYXN0 IG9uZSB0byBtYXJrIGFzIGFuIG9wdGltaXphdGlvbi4KKyAgICAgVGhlIG1h cmtpbmcgaW5mcmFzdHJ1Y3R1cmUgd2lsbCBtYXJrIGl0IGZvciB1cy4gICov CisgIHJldHVybiBiYXNlLT52YWx1ZXM7Cit9CisMCisvKiBQbGFpbiBnc21v YnMgYXJlIGZvciBvYmplY3RzIHRoYXQgZG9uJ3QgbmVlZCBhbnkgaW50ZXJu YWwgc3RvcmFnZSBidXQKKyAgIHdoaWNoIHdhbnQgdG8gdXNlIHRoZSBnc21v YiBBUEkuICBXZSBjb3VsZCBzdGlsbCBjcmVhdGUgYSBkaWZmZXJlbnQgc21v YgorICAgZm9yIGVhY2ggdHlwZSwgYnV0IHdlIGF2b2lkIHRoaXMgdG8gbm90 IHB1c2ggdGhlIDI1NiBsaW1pdCBpbiAjc21vYnMuCisgICBTdWNoIG9iamVj dHMgY2FuIHN0aWxsIGJlIGRpc3Rpbmd1aXNoIGluIFNjaGVtZSB2aWEgZ3Nt b2Ita2luZC4gICovCisKK3N0YXRpYyBTQ00KK21hcmtfcGxhaW5fZ3Ntb2Ig KFNDTSBzZWxmKQoreworICBnZGJfc21vYiAqZ19zbW9iID0gKGdkYl9zbW9i ICopIFNDTV9TTU9CX0RBVEEgKHNlbGYpOworCisgIC8qIERvIHRoaXMgbGFz dC4gICovCisgIHJldHVybiBnZGJzY21fbWFya19nc21vYiAoZ19zbW9iKTsK K30KKworc3RhdGljIGludAorcHJpbnRfcGxhaW5fZ3Ntb2IgKFNDTSBzZWxm LCBTQ00gcG9ydCwgc2NtX3ByaW50X3N0YXRlICpwc3RhdGUpCit7CisgIGdk Yl9zbW9iICpnX3Ntb2IgPSAoZ2RiX3Ntb2IgKikgU0NNX1NNT0JfREFUQSAo c2VsZik7CisKKyAgZ2Ric2NtX3ByaW50ZiAocG9ydCwgIiM8JXMiLCBwbGFp bl9nc21vYl9uYW1lKTsKKworICAvLyBUT0RPOiBXaGVuIHRvIGRpc3BsYXkg YXR0cmlidXRlcz8KKworICBzY21fcHV0cyAoIj4iLCBwb3J0KTsKKworICBz Y21fcmVtZW1iZXJfdXB0b19oZXJlXzEgKHNlbGYpOworCisgIC8qIE5vbi16 ZXJvIG1lYW5zIHN1Y2Nlc3MuICAqLworICByZXR1cm4gMTsKK30KKwwKKy8q IEFjY2Vzc29ycyB0byB0aGUgdnRhYmxlL3ZhbHVlcyBTQ01zLiAgKi8KKwor c3RhdGljIHZvaWQKK2Fzc2VydF92YWxpZF9nc21vYiAoU0NNIHNlbGYsIGNv bnN0IGNoYXIgKmZ1bmNfbmFtZSkKK3sKKyAgU0NNX0FTU0VSVF9UWVBFIChn c21vYl9wIChzZWxmKSwgc2VsZiwgMCwgZnVuY19uYW1lLCAiZ2RiLXNtb2Ii KTsKK30KKworc3RhdGljIFNDTQorZ3Ntb2JfcmVmX3Z0YWJsZSAoU0NNIHNl bGYpCit7CisgIGdkYl9zbW9iICpiYXNlOworCisgIGFzc2VydF92YWxpZF9n c21vYiAoc2VsZiwgRlVOQ19OQU1FKTsKKyAgYmFzZSA9IChnZGJfc21vYiAq KSBTQ01fU01PQl9EQVRBIChzZWxmKTsKKyAgcmV0dXJuIGJhc2UtPnZ0YWJs ZTsKK30KKworc3RhdGljIFNDTQorZ3Ntb2Jfc2V0X3Z0YWJsZV94IChTQ00g c2VsZiwgU0NNIHZ0YWJsZSkKK3sKKyAgZ2RiX3Ntb2IgKmJhc2U7CisKKyAg YXNzZXJ0X3ZhbGlkX2dzbW9iIChzZWxmLCBGVU5DX05BTUUpOworICBiYXNl ID0gKGdkYl9zbW9iICopIFNDTV9TTU9CX0RBVEEgKHNlbGYpOworICBiYXNl LT52dGFibGUgPSB2dGFibGU7CisgIHJldHVybiBTQ01fVU5TUEVDSUZJRUQ7 Cit9CisKK3N0YXRpYyBTQ00KK2dzbW9iX3JlZl92YWx1ZXMgKFNDTSBzZWxm KQoreworICBnZGJfc21vYiAqYmFzZTsKKworICBhc3NlcnRfdmFsaWRfZ3Nt b2IgKHNlbGYsIEZVTkNfTkFNRSk7CisgIGJhc2UgPSAoZ2RiX3Ntb2IgKikg U0NNX1NNT0JfREFUQSAoc2VsZik7CisgIHJldHVybiBiYXNlLT52YWx1ZXM7 Cit9CisKK3N0YXRpYyBTQ00KK2dzbW9iX3NldF92YWx1ZXNfeCAoU0NNIHNl bGYsIFNDTSB2YWx1ZXMpCit7CisgIGdkYl9zbW9iICpiYXNlOworCisgIGFz c2VydF92YWxpZF9nc21vYiAoc2VsZiwgRlVOQ19OQU1FKTsKKyAgYmFzZSA9 IChnZGJfc21vYiAqKSBTQ01fU01PQl9EQVRBIChzZWxmKTsKKyAgYmFzZS0+ dmFsdWVzID0gdmFsdWVzOworICByZXR1cm4gU0NNX1VOU1BFQ0lGSUVEOwor fQorDAorLyogSW5pdGlhbGl6ZSB0aGUgU2NoZW1lIGJyZWFrcG9pbnQgY29k ZS4gICovCisKK3N0YXRpYyBjb25zdCBzY2hlbWVfZnVuY3Rpb24gZ3Ntb2Jf ZnVuY3Rpb25zW10gPQoreworICB7ICJnc21vYi1yZWYtdnRhYmxlIiwgMSwg MCwgMCwgZ3Ntb2JfcmVmX3Z0YWJsZSB9LAorICB7ICJnc21vYi1zZXQtdnRh YmxlISIsIDIsIDAsIDAsIGdzbW9iX3NldF92dGFibGVfeCB9LAorICB7ICJn c21vYi1yZWYtdmFsdWVzIiwgMSwgMCwgMCwgZ3Ntb2JfcmVmX3ZhbHVlcyB9 LAorICB7ICJnc21vYi1zZXQtdmFsdWVzISIsIDIsIDAsIDAsIGdzbW9iX3Nl dF92YWx1ZXNfeCB9LAorICB7IE5VTEwsIDAsIDAsIDAsIE5VTEwgfQorfTsK Kwordm9pZAorZ2Ric2NtX2luaXRpYWxpemVfc21vYnMgKHZvaWQpCit7Cisg IHJlZ2lzdGVyZWRfZ3Ntb2JzID0gaHRhYl9jcmVhdGVfYWxsb2MgKDEwLAor CQkJCSAgICAgICBoYXNoX3NjbV90X2JpdHMsIGVxX3NjbV90X2JpdHMsCisJ CQkJICAgICAgIE5VTEwsIHhjYWxsb2MsIHhmcmVlKTsKKworICBwbGFpbl9n c21vYl90YWcgPSBnZGJzY21fbWFrZV9zbW9iX3R5cGUgKHBsYWluX2dzbW9i X25hbWUsCisJCQkJCSAgIHNpemVvZiAoZ2RiX3Ntb2IpKTsKKyAgc2NtX3Nl dF9zbW9iX21hcmsgKHBsYWluX2dzbW9iX3RhZywgbWFya19wbGFpbl9nc21v Yik7CisgIHNjbV9zZXRfc21vYl9wcmludCAocGxhaW5fZ3Ntb2JfdGFnLCBw cmludF9wbGFpbl9nc21vYik7CisKKyAgZ2Ric2NtX2RlZmluZV9mdW5jdGlv bnMgKGdzbW9iX2Z1bmN0aW9ucywgMSk7Cit9CmRpZmYgLXJwTiAtVSAyIHNj aGVtZT0vc2NtLXNtb2JzLmggc2NoZW1lL3NjbS1zbW9icy5oCi0tLSBzY2hl bWU9L3NjbS1zbW9icy5oCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAw IC0wODAwCisrKyBzY2hlbWUvc2NtLXNtb2JzLmgJMjAxMy0wOS0wNiAwNzo1 NDozMy4yODY5NzkyNDMgLTA3MDAKQEAgLTAsMCArMSw2MyBAQAorLyogc2Nt L2dkYiBzbW9icyAoc21vYnMgYXJlIEd1aWxlJ3MgInNtYWxsIG9iamVjdHMi IGZhY2lsaXR5KQorCisgICBDb3B5cmlnaHQgKEMpIDIwMTMgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0 IG9mIEdEQi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBv cgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor ICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBz ZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lm bmRlZiBHREJfU0NIRU1FX1NNT0JTX0gKKyNkZWZpbmUgR0RCX1NDSEVNRV9T TU9CU19ICisKKy8qIEFsbCBnZGIgc21vYnMgY29udGFpbiB0aGlzIHN0cnVj dCBhcyB0aGUgZmlyc3QgbWVtYmVyLgorICAgSXQgYWxsb3dzIGZvciBleHRl bmRpbmcgdGhlbSB3aXRob3V0IHR5aW5nIGdkYiB0byBob3cgdGhleSdyZSBl eHRlbmRlZC4KKworICAgVGhpbmsgb2YgInZ0YWJsZSIgYXMgdGhlIGltbXV0 YWJsZSBwYXJ0IG9mIHRoZSBleHRlbmRlZCBvYmplY3QgKGUuZy4sCisgICBh IHZlY3RvciBkZXNjcmliaW5nIHRoZSBvYmplY3QpIGFuZCAidmFsdWVzIiBh cyB0aGUgbXV0YWJsZSBwYXJ0LgorICAgVGhlIGZvcm0gb2YgdnRhYmxlIGFu ZCB2YWx1ZXMgaXMgZGVmaW5lZCBieSB0aGUgaW1wbGVtZW50YXRpb24gb2Yg dGhlCisgICBvYmplY3QgQVBJLiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sK KyAgLyogVGhlIGtpbmQgb2Ygb2JqZWN0LCBlLmcuICJ2YWx1ZSIuCisgICAg IFRoaXMgaXMgYXNzdW1lZCB0byBiZSBhIGxpdGVyYWwgQyBzdHJpbmcgKG5v dCBtYWxsb2MnZCkuICAqLworICBjb25zdCBjaGFyICpraW5kOworCisgIC8q IEEgdnRhYmxlIG9yIGRlc2NyaXB0aW9uIG9mIHRoZSBvYmplY3QuICAqLwor ICBTQ00gdnRhYmxlOworCisgIC8qIFRoZSBzZXQgb2YgdmFsdWVzIG9mIHRo ZSBvYmplY3QgKGUuZy4gc3RydWN0dXJlIG1lbWJlcnMpLiAgKi8KKyAgU0NN IHZhbHVlczsKK30gZ2RiX3Ntb2I7CisKKy8qIFJldHVybiBub24temVybyBp ZiBTQ00gaXMgYSBwbGFpbiBnZGIgc21vYi4KKyAgIEEgcGxhaW4gZ3Ntb2Ig aXMgb25lIHRoYXQgZG9lc24ndCBoYXZlIGEgc3BlY2lmaWMgcHVycG9zZS4K KyAgIEl0IGFsbG93cyBjcmVhdGluZyBhbiBhcmJpdHJhcnkgbnVtYmVyIG9m IGtpbmRzIG9mIG9iamVjdHMgdGhhdCB1c2UKKyAgIHRoZSBzYW1lIGFwaS4g ICovCitpbnQgZ2Ric2NtX2lzX3BsYWluX2dzbW9iIChTQ00gc2NtKTsKKwor LyogUmVnaXN0ZXIgYSBzbW9iLiAgQ2FsbCB0aGlzIGluc3RlYWQgb2Ygc2Nt X21ha2Vfc21vYl90eXBlLiAgKi8KK2V4dGVybiBzY21fdF9iaXRzIGdkYnNj bV9tYWtlX3Ntb2JfdHlwZSAoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IHNp emUpOworCisvKiBJbml0aWFsaXplIHRoZSBTY2hlbWUgcGFydCBvZiBhIGdk YiBzbW9iLiAgKi8KK2V4dGVybiB2b2lkIGdkYnNjbV9pbml0X2dzbW9iIChT Q00gc21vYiwgZ2RiX3Ntb2IgKmJhc2UsCisJCQkgICAgICAgY29uc3QgY2hh ciAqa2luZCk7CisKKy8qIFRoZSAibWFyayIgZnVuY3Rpb24gZm9yIHN0cnVj dCBnZGJfc21vYi4gICovCitleHRlcm4gU0NNIGdkYnNjbV9tYXJrX2dzbW9i IChnZGJfc21vYiAqYmFzZSk7CisKKy8qIENhbGxlZCBlYXJseSBpbiBnZGIv c2NoZW1lIGluaXRpYWxpemF0aW9uLiAgKi8KK2V4dGVybiB2b2lkIGdkYnNj bV9pbml0aWFsaXplX3Ntb2JzICh2b2lkKTsKKworI2VuZGlmIC8qIEdEQl9T Q0hFTUVfU01PQlNfSCAqLwpkaWZmIC1ycE4gLVUgMiBzY2hlbWU9L3NjbS10 eXBlLXByaW50ZXJzLmMgc2NoZW1lL3NjbS10eXBlLXByaW50ZXJzLmMKLS0t IHNjaGVtZT0vc2NtLXR5cGUtcHJpbnRlcnMuYwkxOTY5LTEyLTMxIDE2OjAw OjAwLjAwMDAwMDAwMCAtMDgwMAorKysgc2NoZW1lL3NjbS10eXBlLXByaW50 ZXJzLmMJMjAxMy0wOS0wNiAwNzo1MzozNi40ODc5NzU1NTYgLTA3MDAKQEAg LTAsMCArMSw0MiBAQAorLyogVHlwZSBwcmludGVycyBmb3IgZ2RiL3NjaGVt ZS4KKworICAgQ29weXJpZ2h0IChDKSAyMDEzIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIu CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg ICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRw Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlICJk ZWZzLmgiCisjaW5jbHVkZSAiZ2RiX2Fzc2VydC5oIgorI2luY2x1ZGUgInNj cmlwdGluZy5oIgorI2luY2x1ZGUgInNjaGVtZS1pbnRlcm5hbC5oIgorCit2 b2lkCitnZGJzY21fc3RhcnRfdHlwZV9wcmludGVycyAoc3RydWN0IHNsYW5n X3R5cGVfcHJpbnRlcnMgKnNsYW5nX3ByaW50ZXJzKQoreworICAvL1RPRE8K K30KKworY2hhciAqCitnZGJzY21fYXBwbHlfdHlwZV9wcmludGVycyAoY29u c3Qgc3RydWN0IHNsYW5nX3R5cGVfcHJpbnRlcnMgKnNsYW5nX3ByaW50ZXJz LAorCQkJICAgIHN0cnVjdCB0eXBlICp0eXBlKQoreworICByZXR1cm4gTlVM TDsgLy9UT0RPCit9CisKK3ZvaWQKK2dkYnNjbV9mcmVlX3R5cGVfcHJpbnRl cnMgKHN0cnVjdCBzbGFuZ190eXBlX3ByaW50ZXJzICpzbGFuZ19wcmludGVy cykKK3sKKyAgLy9UT0RPCit9CmRpZmYgLXJwTiAtVSAyIHNjaGVtZT0vc2Nt LXR5cGUuYyBzY2hlbWUvc2NtLXR5cGUuYwotLS0gc2NoZW1lPS9zY20tdHlw ZS5jCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKyBz Y2hlbWUvc2NtLXR5cGUuYwkyMDEzLTA5LTA2IDA3OjUzOjQyLjEwOTk3NTky MSAtMDcwMApAQCAtMCwwICsxLDEzMTggQEAKKy8qIGdkYi9zY2hlbWUgaW50 ZXJmYWNlIHRvIHR5cGVzLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAx MyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBm aWxlIGlzIHBhcnQgb2YgR0RCLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhl IExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0u ICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u ICAqLworCisvLyBUT0RPOiBFeHRyYWN0IGNvbW1vbiBiaXRzIHdpdGggcHkt dHlwZS5jIGludG8gdXRpbGl0aWVzIGluIGNvcmUgZ2RiLgorLy8gRS5nLiwg dHlwZSBjb21wYXJpc29ucworCisjaW5jbHVkZSAiZGVmcy5oIgorI2luY2x1 ZGUgInZhbHVlLmgiCisjaW5jbHVkZSAiZXhjZXB0aW9ucy5oIgorI2luY2x1 ZGUgImNoYXJzZXQuaCIKKyNpbmNsdWRlICJnZGJ0eXBlcy5oIgorI2luY2x1 ZGUgIm9iamZpbGVzLmgiCisjaW5jbHVkZSAibGFuZ3VhZ2UuaCIKKyNpbmNs dWRlICJ2ZWMuaCIKKyNpbmNsdWRlICJiY2FjaGUuaCIKKyNpbmNsdWRlICJk d2FyZjJsb2MuaCIKKyNpbmNsdWRlICJ0eXBlcHJpbnQuaCIKKyNpbmNsdWRl ICJzY2hlbWUtaW50ZXJuYWwuaCIKKworLyogQSBzbW9iIGNvbnRhaW5pbmcg Z2RiIHR5cGVzLiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX3R5cGVfc21vYgor eworICBnZGJfc21vYiBiYXNlOworCisgIHN0cnVjdCB0eXBlICp0eXBlOwor CisgIC8qIElmIGEgVHlwZSBvYmplY3QgaXMgYXNzb2NpYXRlZCB3aXRoIGFu IG9iamZpbGUsIGl0IGlzIGtlcHQgb24gYQorICAgICBkb3VibHktbGlua2Vk IGxpc3QsIHJvb3RlZCBpbiB0aGUgb2JqZmlsZS4gIFRoaXMgbGV0cyB1cyBj b3B5IHRoZQorICAgICB1bmRlcmx5aW5nIHN0cnVjdCB0eXBlIHdoZW4gdGhl IG9iamZpbGUgaXMgZGVsZXRlZC4gICovCisgIHN0cnVjdCBfdHlwZV9zbW9i ICpwcmV2OworICBzdHJ1Y3QgX3R5cGVfc21vYiAqbmV4dDsKK30gdHlwZV9z bW9iOworCisvKiBBIGZpZWxkIHNtb2IuICAqLworCit0eXBlZGVmIHN0cnVj dAoreworICBnZGJfc21vYiBiYXNlOworCisgIC8qIEJhY2tsaW5rIHRvIHRo ZSBjb250YWluaW5nIHR5cGUsIGFuZCBmaWVsZCBudW1iZXIuICAqLworICAv KiBGSVhNRTogRG8gd2UgbmVlZCBzb21lIG1lY2hhbmlzbSBsaWtlIHdoYXQg Zy1icmVha3BvaW50LmMgdXNlcyB0bworICAgICBmbGFnIGZyZWVkIHR5cGVz IGFzIGludmFsaWQ/ICAqLworICBTQ00gdHlwZV9zY207CisgIGludCBmaWVs ZF9udW07Cit9IGZpZWxkX3Ntb2I7CisKKy8qIFRoaXMgaXMgdXNlZCB0byBp bml0aWFsaXplIHZhcmlvdXMgZ2RiLlRZUEVfIGNvbnN0YW50cy4gICovCisK K3N0cnVjdCB0eXNjbV9jb2RlCit7CisgIC8qIFRoZSBjb2RlLiAgKi8KKyAg ZW51bSB0eXBlX2NvZGUgY29kZTsKKyAgLyogVGhlIG5hbWUuICAqLworICBj b25zdCBjaGFyICpuYW1lOworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgdHlw ZV9zbW9iX25hbWVbXSA9ICJnZGI6dHlwZSI7CitzdGF0aWMgY29uc3QgY2hh ciBmaWVsZF9zbW9iX25hbWVbXSA9ICJnZGI6ZmllbGQiOworCitzdGF0aWMg Y29uc3QgY2hhciBub3RfY29tcG9zaXRlX2Vycm9yW10gPQorICAidHlwZSBp cyBub3QgYSBzdHJ1Y3R1cmUsIHVuaW9uLCBvciBlbnVtIHR5cGUiOworCisv KiBUaGUgdGFnIEd1aWxlIGtub3dzIHRoZSB0eXBlIHNtb2IgYnkuICAqLwor c3RhdGljIHNjbV90X2JpdHMgdHlwZV9zbW9iX3RhZzsKKworLyogVGhlIHRh ZyBHdWlsZSBrbm93cyB0aGUgZmllbGQgc21vYiBieS4gICovCitzdGF0aWMg c2NtX3RfYml0cyBmaWVsZF9zbW9iX3RhZzsKKworLyogVGhlICJuZXh0IiBw cm9jZWR1cmUgZm9yIGZpZWxkIGl0ZXJhdG9ycy4gICovCitzdGF0aWMgU0NN IHR5c2NtX25leHRfZmllbGRfc2NtOworCisvLyBmb3J3YXJkIGRlY2xzCitz dGF0aWMgdm9pZCB0eXNjbV9zZXRfdHlwZSAodHlwZV9zbW9iICpvYmosIHN0 cnVjdCB0eXBlICp0eXBlKTsKK3N0YXRpYyB2b2lkIHR5c2NtX2RlYWxsb2Nf dHlwZSAoU0NNIG9iaik7CitzdGF0aWMgc3RydWN0IHR5cGUgKnR5c2NtX2dl dF9jb21wb3NpdGUgKHN0cnVjdCB0eXBlICp0eXBlKTsKKworI2RlZmluZSBF TlRSWShYKSB7IFgsICNYIH0KKworc3RhdGljIGNvbnN0IHN0cnVjdCB0eXNj bV9jb2RlIHR5c2NtX2NvZGVzW10gPQoreworICBFTlRSWSAoVFlQRV9DT0RF X0JJVFNUUklORyksCisgIEVOVFJZIChUWVBFX0NPREVfUFRSKSwKKyAgRU5U UlkgKFRZUEVfQ09ERV9BUlJBWSksCisgIEVOVFJZIChUWVBFX0NPREVfU1RS VUNUKSwKKyAgRU5UUlkgKFRZUEVfQ09ERV9VTklPTiksCisgIEVOVFJZIChU WVBFX0NPREVfRU5VTSksCisgIEVOVFJZIChUWVBFX0NPREVfRkxBR1MpLAor ICBFTlRSWSAoVFlQRV9DT0RFX0ZVTkMpLAorICBFTlRSWSAoVFlQRV9DT0RF X0lOVCksCisgIEVOVFJZIChUWVBFX0NPREVfRkxUKSwKKyAgRU5UUlkgKFRZ UEVfQ09ERV9WT0lEKSwKKyAgRU5UUlkgKFRZUEVfQ09ERV9TRVQpLAorICBF TlRSWSAoVFlQRV9DT0RFX1JBTkdFKSwKKyAgRU5UUlkgKFRZUEVfQ09ERV9T VFJJTkcpLAorICBFTlRSWSAoVFlQRV9DT0RFX0VSUk9SKSwKKyAgRU5UUlkg KFRZUEVfQ09ERV9NRVRIT0QpLAorICBFTlRSWSAoVFlQRV9DT0RFX01FVEhP RFBUUiksCisgIEVOVFJZIChUWVBFX0NPREVfTUVNQkVSUFRSKSwKKyAgRU5U UlkgKFRZUEVfQ09ERV9SRUYpLAorICBFTlRSWSAoVFlQRV9DT0RFX0NIQVIp LAorICBFTlRSWSAoVFlQRV9DT0RFX0JPT0wpLAorICBFTlRSWSAoVFlQRV9D T0RFX0NPTVBMRVgpLAorICBFTlRSWSAoVFlQRV9DT0RFX1RZUEVERUYpLAor ICBFTlRSWSAoVFlQRV9DT0RFX05BTUVTUEFDRSksCisgIEVOVFJZIChUWVBF X0NPREVfREVDRkxPQVQpLAorICBFTlRSWSAoVFlQRV9DT0RFX0lOVEVSTkFM X0ZVTkNUSU9OKSwKKyAgeyBUWVBFX0NPREVfVU5ERUYsIE5VTEwgfQorfTsK KworI3VuZGVmIEVOVFJZCisMCisvKiBUeXBlIHNtb2JzLiAgKi8KKworc3Rh dGljIFNDTQorbWFya190eXBlX3Ntb2IgKFNDTSBzZWxmKQoreworICB0eXBl X3Ntb2IgKnRfc21vYiA9ICh0eXBlX3Ntb2IgKikgU0NNX1NNT0JfREFUQSAo c2VsZik7CisKKyAgLyogRG8gdGhpcyBsYXN0LiAgKi8KKyAgcmV0dXJuIGdk YnNjbV9tYXJrX2dzbW9iICgmdF9zbW9iLT5iYXNlKTsKK30KKworc3RhdGlj IHNpemVfdAorZnJlZV90eXBlX3Ntb2IgKFNDTSBzZWxmKQoreworICB0eXNj bV9kZWFsbG9jX3R5cGUgKHNlbGYpOworICByZXR1cm4gMDsKK30KKworc3Rh dGljIGludAorcHJpbnRfdHlwZV9zbW9iIChTQ00gc2VsZiwgU0NNIHBvcnQs IHNjbV9wcmludF9zdGF0ZSAqcHN0YXRlKQoreworICB0eXBlX3Ntb2IgKnRf c21vYiA9ICh0eXBlX3Ntb2IgKikgU0NNX1NNT0JfREFUQSAoc2VsZik7Cisg IGNvbnN0IGNoYXIgKm5hbWUgPSB0eXBlX25hbWVfbm9fdGFnICh0X3Ntb2It PnR5cGUpOworCisgIGdkYnNjbV9wcmludGYgKHBvcnQsICIjPCVzICIsIHR5 cGVfc21vYl9uYW1lKTsKKyAgc2NtX3B1dHMgKG5hbWUgPyBuYW1lIDogInt1 bm5hbWVkfSIsIHBvcnQpOworICBzY21fcHV0cyAoIj4iLCBwb3J0KTsKKwor ICBzY21fcmVtZW1iZXJfdXB0b19oZXJlXzEgKHNlbGYpOworCisgIC8qIE5v bi16ZXJvIG1lYW5zIHN1Y2Nlc3MuICAqLworICByZXR1cm4gMTsKK30KKwor c3RhdGljIFNDTQordHlzY21fbWFrZV90eXBlX3Ntb2IgKHN0cnVjdCB0eXBl ICp0eXBlKQoreworICB0eXBlX3Ntb2IgKnRfc21vYiA9ICh0eXBlX3Ntb2Ig KikKKyAgICBzY21fZ2NfbWFsbG9jIChzaXplb2YgKHR5cGVfc21vYiksIHR5 cGVfc21vYl9uYW1lKTsKKyAgU0NNIHJlc3VsdDsKKworICB0X3Ntb2ItPnR5 cGUgPSB0eXBlOworICAvKiBUaGlzIGZpbGxzIGluIG5leHQscHJldi4gICov CisgIHR5c2NtX3NldF90eXBlICh0X3Ntb2IsIHR5cGUpOworICByZXN1bHQg PSBzY21fbmV3X3Ntb2IgKHR5cGVfc21vYl90YWcsIChzY21fdF9iaXRzKSB0 X3Ntb2IpOworICBnZGJzY21faW5pdF9nc21vYiAocmVzdWx0LCAmdF9zbW9i LT5iYXNlLCB0eXBlX3Ntb2JfbmFtZSk7CisgIHJldHVybiByZXN1bHQ7Cit9 CisKK2ludAorZ2Ric2NtX2lzX3R5cGUgKFNDTSBzZWxmKQoreworICBpZiAo U0NNX0lNUCAoc2VsZikpCisgICAgcmV0dXJuIDA7CisgIHJldHVybiBTQ01f VFlQMTYgKHNlbGYpID09IHR5cGVfc21vYl90YWc7Cit9CisKK3N0YXRpYyBT Q00KK2dkYnNjbV90eXBlX3AgKFNDTSBzZWxmKQoreworICByZXR1cm4gc2Nt X2Zyb21fYm9vbCAoZ2Ric2NtX2lzX3R5cGUgKHNlbGYpKTsKK30KKworLyog Q3JlYXRlIGEgbmV3IHR5cGUgc21vYiByZWZlcnJpbmcgdG8gVFlQRS4gICov CisKK3N0YXRpYyBTQ00KK2dkYnNjbV90eXBlX3RvX3R5cGVfb2JqZWN0IChz dHJ1Y3QgdHlwZSAqdHlwZSkKK3sKKyAgcmV0dXJuIHR5c2NtX21ha2VfdHlw ZV9zbW9iICh0eXBlKTsKK30KKwwKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2Jq ZmlsZV9kYXRhICp0eXNjbV9vYmpmaWxlX2RhdGFfa2V5OworCitzdGF0aWMg dm9pZAorc2F2ZV9vYmpmaWxlX3R5cGVzIChzdHJ1Y3Qgb2JqZmlsZSAqb2Jq ZmlsZSwgdm9pZCAqZGF0dW0pCit7CisgIHR5cGVfc21vYiAqb2JqID0gZGF0 dW07CisgIGh0YWJfdCBjb3BpZWRfdHlwZXM7CisKKyAgaWYgKCFnZGJfc2No ZW1lX2luaXRpYWxpemVkKQorICAgIHJldHVybjsKKworICBjb3BpZWRfdHlw ZXMgPSBjcmVhdGVfY29waWVkX3R5cGVzX2hhc2ggKG9iamZpbGUpOworCisg IHdoaWxlIChvYmopCisgICAgeworICAgICAgdHlwZV9zbW9iICpuZXh0ID0g b2JqLT5uZXh0OworCisgICAgICBodGFiX2VtcHR5IChjb3BpZWRfdHlwZXMp OworCisgICAgICBvYmotPnR5cGUgPSBjb3B5X3R5cGVfcmVjdXJzaXZlIChv YmpmaWxlLCBvYmotPnR5cGUsIGNvcGllZF90eXBlcyk7CisKKyAgICAgIG9i ai0+bmV4dCA9IE5VTEw7CisgICAgICBvYmotPnByZXYgPSBOVUxMOworCisg ICAgICBvYmogPSBuZXh0OworICAgIH0KKworICBodGFiX2RlbGV0ZSAoY29w aWVkX3R5cGVzKTsKK30KKworc3RhdGljIHZvaWQKK3R5c2NtX3NldF90eXBl ICh0eXBlX3Ntb2IgKm9iaiwgc3RydWN0IHR5cGUgKnR5cGUpCit7CisgIG9i ai0+dHlwZSA9IHR5cGU7CisgIG9iai0+cHJldiA9IE5VTEw7CisgIGlmICh0 eXBlICYmIFRZUEVfT0JKRklMRSAodHlwZSkpCisgICAgeworICAgICAgc3Ry dWN0IG9iamZpbGUgKm9iamZpbGUgPSBUWVBFX09CSkZJTEUgKHR5cGUpOwor CisgICAgICBvYmotPm5leHQgPSBvYmpmaWxlX2RhdGEgKG9iamZpbGUsIHR5 c2NtX29iamZpbGVfZGF0YV9rZXkpOworICAgICAgaWYgKG9iai0+bmV4dCkK KwlvYmotPm5leHQtPnByZXYgPSBvYmo7CisgICAgICBzZXRfb2JqZmlsZV9k YXRhIChvYmpmaWxlLCB0eXNjbV9vYmpmaWxlX2RhdGFfa2V5LCBvYmopOwor ICAgIH0KKyAgZWxzZQorICAgIG9iai0+bmV4dCA9IE5VTEw7Cit9CisKK3N0 YXRpYyB2b2lkCit0eXNjbV9kZWFsbG9jX3R5cGUgKFNDTSBvYmopCit7Cisg IHR5cGVfc21vYiAqdF9zbW9iID0gKHR5cGVfc21vYiAqKSBTQ01fU01PQl9E QVRBIChvYmopOworCisgIGlmICh0X3Ntb2ItPnByZXYpCisgICAgdF9zbW9i LT5wcmV2LT5uZXh0ID0gdF9zbW9iLT5uZXh0OworICBlbHNlIGlmICh0X3Nt b2ItPnR5cGUgJiYgVFlQRV9PQkpGSUxFICh0X3Ntb2ItPnR5cGUpKQorICAg IHsKKyAgICAgIC8qIE11c3QgcmVzZXQgaGVhZCBvZiBsaXN0LiAgKi8KKyAg ICAgIHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlID0gVFlQRV9PQkpGSUxFICh0 X3Ntb2ItPnR5cGUpOworCisgICAgICBpZiAob2JqZmlsZSkKKwlzZXRfb2Jq ZmlsZV9kYXRhIChvYmpmaWxlLCB0eXNjbV9vYmpmaWxlX2RhdGFfa2V5LCB0 X3Ntb2ItPm5leHQpOworICAgIH0KKyAgaWYgKHRfc21vYi0+bmV4dCkKKyAg ICB0X3Ntb2ItPm5leHQtPnByZXYgPSB0X3Ntb2ItPnByZXY7Cit9CisMCisv KiBGaWVsZCBzbW9icy4gICovCisKK3N0YXRpYyBTQ00KK21hcmtfZmllbGRf c21vYiAoU0NNIHNlbGYpCit7CisgIGZpZWxkX3Ntb2IgKmZfc21vYiA9IChm aWVsZF9zbW9iICopIFNDTV9TTU9CX0RBVEEgKHNlbGYpOworCisgIHNjbV9n Y19tYXJrIChmX3Ntb2ItPnR5cGVfc2NtKTsKKyAgLyogRG8gdGhpcyBsYXN0 LiAgKi8KKyAgcmV0dXJuIGdkYnNjbV9tYXJrX2dzbW9iICgmZl9zbW9iLT5i YXNlKTsKK30KKworc3RhdGljIGludAorcHJpbnRfZmllbGRfc21vYiAoU0NN IHNlbGYsIFNDTSBwb3J0LCBzY21fcHJpbnRfc3RhdGUgKnBzdGF0ZSkKK3sK KyAgZmllbGRfc21vYiAqZl9zbW9iID0gKGZpZWxkX3Ntb2IgKikgU0NNX1NN T0JfREFUQSAoc2VsZik7CisKKyAgZ2Ric2NtX3ByaW50ZiAocG9ydCwgIiM8 JXMgIiwgZmllbGRfc21vYl9uYW1lKTsKKyAgc2NtX2Rpc3BsYXkgKGZfc21v Yi0+dHlwZV9zY20sIHBvcnQpOworICBnZGJzY21fcHJpbnRmIChwb3J0LCAi ICVkIiwgZl9zbW9iLT5maWVsZF9udW0pOworICBzY21fcHV0cyAoIj4iLCBw b3J0KTsKKworICBzY21fcmVtZW1iZXJfdXB0b19oZXJlXzEgKHNlbGYpOwor CisgIC8qIE5vbi16ZXJvIG1lYW5zIHN1Y2Nlc3MuICAqLworICByZXR1cm4g MTsKK30KKworc3RhdGljIFNDTQordHlzY21fbWFrZV9maWVsZF9zbW9iIChT Q00gdHlwZV9zY20sIGludCBmaWVsZF9udW0pCit7CisgIGZpZWxkX3Ntb2Ig KmZfc21vYiA9IChmaWVsZF9zbW9iICopCisgICAgc2NtX2djX21hbGxvYyAo c2l6ZW9mIChmaWVsZF9zbW9iKSwgZmllbGRfc21vYl9uYW1lKTsKKyAgU0NN IHJlc3VsdDsKKworICBmX3Ntb2ItPnR5cGVfc2NtID0gdHlwZV9zY207Cisg IGZfc21vYi0+ZmllbGRfbnVtID0gZmllbGRfbnVtOworICByZXN1bHQgPSBz Y21fbmV3X3Ntb2IgKGZpZWxkX3Ntb2JfdGFnLCAoc2NtX3RfYml0cykgZl9z bW9iKTsKKyAgZ2Ric2NtX2luaXRfZ3Ntb2IgKHJlc3VsdCwgJmZfc21vYi0+ YmFzZSwgZmllbGRfc21vYl9uYW1lKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30K Kworc3RhdGljIGludAorZ2Ric2NtX2lzX2ZpZWxkIChTQ00gc2VsZikKK3sK KyAgaWYgKFNDTV9JTVAgKHNlbGYpKQorICAgIHJldHVybiAwOworICByZXR1 cm4gU0NNX1RZUDE2IChzZWxmKSA9PSBmaWVsZF9zbW9iX3RhZzsKK30KKwor c3RhdGljIFNDTQorZ2Ric2NtX2ZpZWxkX3AgKFNDTSBzZWxmKQoreworICBy ZXR1cm4gc2NtX2Zyb21fYm9vbCAoZ2Ric2NtX2lzX2ZpZWxkIChzZWxmKSk7 Cit9CisMCisvKiBUeXBlIHNtb2IgYWNjZXNzb3JzLiAgKi8KKworI2RlZmlu ZSBBU1NFUlRfR0RCX1RZUEUoZnVuY19uYW1lLCBzZWxmLCB0X3Ntb2IsIHR5 cGUpCSAgICBcCisgIGRvIHsJCQkJCQkJICAgIFwKKyAgICBhc3NlcnRfaXNf dHlwZSAoc2VsZiwgZnVuY19uYW1lKTsJCQkgICAgXAorICAgIHRfc21vYiA9 ICh0eXBlX3Ntb2IgKikgU0NNX1NNT0JfREFUQSAoc2VsZik7CSAgICBcCisg ICAgdHlwZSA9IHRfc21vYi0+dHlwZTsJCQkJICAgIFwKKyAgfSB3aGlsZSAo MCkKKworc3RhdGljIHZvaWQKK2Fzc2VydF9pc190eXBlIChTQ00gc2VsZiwg Y29uc3QgY2hhciAqZnVuY19uYW1lKQoreworICBTQ01fQVNTRVJUX1RZUEUg KGdkYnNjbV9pc190eXBlIChzZWxmKSwgc2VsZiwgMCwgZnVuY19uYW1lLCB0 eXBlX3Ntb2JfbmFtZSk7Cit9CisKKy8qIFJldHVybiB0aGUgY29kZSBmb3Ig dGhpcyB0eXBlLiAgKi8KKworc3RhdGljIFNDTQordHlzY21fdHlwZV9jb2Rl IChTQ00gc2VsZikKK3sKKyAgdHlwZV9zbW9iICp0X3Ntb2I7CisgIHN0cnVj dCB0eXBlICp0eXBlOworCisgIEFTU0VSVF9HREJfVFlQRSAoRlVOQ19OQU1F LCBzZWxmLCB0X3Ntb2IsIHR5cGUpOworCisgIHJldHVybiBzY21fZnJvbV9p bnQgKFRZUEVfQ09ERSAodHlwZSkpOworfQorCisvKiBSZXR1cm4gYSBsaXN0 IG9mIGFsbCBmaWVsZHMuICBFYWNoIGZpZWxkIGlzIGEgZ2RiOmZpZWxkIG9i amVjdC4gICovCisKK3N0YXRpYyBTQ00KK3R5c2NtX3R5cGVfZmllbGRzIChT Q00gc2VsZikKK3sKKyAgdHlwZV9zbW9iICp0X3Ntb2I7CisgIHN0cnVjdCB0 eXBlICp0eXBlOworICBTQ00gcmVzdWx0OworICBpbnQgaTsKKworICBBU1NF UlRfR0RCX1RZUEUgKEZVTkNfTkFNRSwgc2VsZiwgdF9zbW9iLCB0eXBlKTsK KworICB0eXBlID0gdHlzY21fZ2V0X2NvbXBvc2l0ZSAodHlwZSk7CisgIGlm ICh0eXBlID09IE5VTEwpCisgICAgc2NtX21pc2NfZXJyb3IgKEZVTkNfTkFN RSwgbm90X2NvbXBvc2l0ZV9lcnJvciwgc2VsZik7CisKKyAgcmVzdWx0ID0g U0NNX0VPTDsKKyAgZm9yIChpID0gMDsgaSA8IFRZUEVfTkZJRUxEUyAodHlw ZSk7ICsraSkKKyAgICByZXN1bHQgPSBzY21fY29ucyAodHlzY21fbWFrZV9m aWVsZF9zbW9iIChzZWxmLCBpKSwgcmVzdWx0KTsKKworICByZXR1cm4gc2Nt X3JldmVyc2VfeCAocmVzdWx0LCBTQ01fRU9MKTsKK30KKworLyogUmV0dXJu IHRoZSB0eXBlJ3MgdGFnLCBvciAjZi4gICovCisKK3N0YXRpYyBTQ00KK3R5 c2NtX3R5cGVfdGFnIChTQ00gc2VsZikKK3sKKyAgdHlwZV9zbW9iICp0X3Nt b2I7CisgIHN0cnVjdCB0eXBlICp0eXBlOworCisgIEFTU0VSVF9HREJfVFlQ RSAoRlVOQ19OQU1FLCBzZWxmLCB0X3Ntb2IsIHR5cGUpOworCisgIGlmICgh VFlQRV9UQUdfTkFNRSAodHlwZSkpCisgICAgcmV0dXJuIFNDTV9CT09MX0Y7 CisgIHJldHVybiBnZGJzY21fY190b19zY21fc3RyaW5nIChUWVBFX1RBR19O QU1FICh0eXBlKSk7Cit9CisKKy8qIFJldHVybiB0aGUgc2l6ZSBvZiB0aGUg dHlwZSByZXByZXNlbnRlZCBieSBTRUxGLCBpbiBieXRlcy4gICovCisKK3N0 YXRpYyBTQ00KK3R5c2NtX3R5cGVfc2l6ZW9mIChTQ00gc2VsZikKK3sKKyAg dHlwZV9zbW9iICp0X3Ntb2I7CisgIHN0cnVjdCB0eXBlICp0eXBlOworICB2 b2xhdGlsZSBzdHJ1Y3QgZ2RiX2V4Y2VwdGlvbiBleGNlcHQ7CisKKyAgQVNT RVJUX0dEQl9UWVBFIChGVU5DX05BTUUsIHNlbGYsIHRfc21vYiwgdHlwZSk7 CisKKyAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKKyAg ICB7CisgICAgICBjaGVja190eXBlZGVmICh0eXBlKTsKKyAgICB9CisgIC8q IElnbm9yZSBleGNlcHRpb25zLiAgKi8KKworICByZXR1cm4gc2NtX2Zyb21f bG9uZyAoVFlQRV9MRU5HVEggKHR5cGUpKTsKK30KKworLyogUmV0dXJuIHRo ZSB0eXBlLCBzdHJpcHBlZCBvZiB0eXBlZGVmcy4gKi8KKworc3RhdGljIFND TQordHlzY21fdHlwZV9zdHJpcF90eXBlZGVmcyAoU0NNIHNlbGYpCit7Cisg IHR5cGVfc21vYiAqdF9zbW9iOworICBzdHJ1Y3QgdHlwZSAqdHlwZTsKKyAg dm9sYXRpbGUgc3RydWN0IGdkYl9leGNlcHRpb24gZXhjZXB0OworCisgIEFT U0VSVF9HREJfVFlQRSAoRlVOQ19OQU1FLCBzZWxmLCB0X3Ntb2IsIHR5cGUp OworCisgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCisg ICAgeworICAgICAgdHlwZSA9IGNoZWNrX3R5cGVkZWYgKHR5cGUpOworICAg IH0KKyAgR0RCX1NDTV9IQU5ETEVfRVhDRVBUSU9OIChleGNlcHQpOworCisg IHJldHVybiBnZGJzY21fdHlwZV90b190eXBlX29iamVjdCAodHlwZSk7Cit9 CisKKy8qIFN0cmlwIHR5cGVkZWZzIGFuZCBwb2ludGVycy9yZWZlcmVuY2Ug ZnJvbSBhIHR5cGUuICBUaGVuIGNoZWNrIHRoYXQKKyAgIGl0IGlzIGEgc3Ry dWN0LCB1bmlvbiwgb3IgZW51bSB0eXBlLiAgSWYgbm90LCByZXR1cm4gTlVM TC4gICovCisKK3N0YXRpYyBzdHJ1Y3QgdHlwZSAqCit0eXNjbV9nZXRfY29t cG9zaXRlIChzdHJ1Y3QgdHlwZSAqdHlwZSkKK3sKKyAgdm9sYXRpbGUgc3Ry dWN0IGdkYl9leGNlcHRpb24gZXhjZXB0OworCisgIGZvciAoOzspCisgICAg eworICAgICAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkK Kwl7CisJICB0eXBlID0gY2hlY2tfdHlwZWRlZiAodHlwZSk7CisJfQorICAg ICAgR0RCX1NDTV9IQU5ETEVfRVhDRVBUSU9OIChleGNlcHQpOworCisgICAg ICBpZiAoVFlQRV9DT0RFICh0eXBlKSAhPSBUWVBFX0NPREVfUFRSCisJICAm JiBUWVBFX0NPREUgKHR5cGUpICE9IFRZUEVfQ09ERV9SRUYpCisJYnJlYWs7 CisgICAgICB0eXBlID0gVFlQRV9UQVJHRVRfVFlQRSAodHlwZSk7CisgICAg fQorCisgIC8qIElmIHRoaXMgaXMgbm90IGEgc3RydWN0LCB1bmlvbiwgb3Ig ZW51bSB0eXBlLCByYWlzZSBUeXBlRXJyb3IKKyAgICAgZXhjZXB0aW9uLiAg Ki8KKyAgaWYgKFRZUEVfQ09ERSAodHlwZSkgIT0gVFlQRV9DT0RFX1NUUlVD VAorICAgICAgJiYgVFlQRV9DT0RFICh0eXBlKSAhPSBUWVBFX0NPREVfVU5J T04KKyAgICAgICYmIFRZUEVfQ09ERSAodHlwZSkgIT0gVFlQRV9DT0RFX0VO VU0pCisgICAgcmV0dXJuIE5VTEw7CisKKyAgcmV0dXJuIHR5cGU7Cit9CisK Ky8qIEhlbHBlciBmb3IgdHlzY21fYXJyYXkgYW5kIHR5c2NtX3ZlY3Rvci4g ICovCisKK3N0YXRpYyBTQ00KK3R5c2NtX2FycmF5XzEgKFNDTSBzZWxmLCBT Q00gbjFfc2NtLCBTQ00gbjJfc2NtLCBpbnQgaXNfdmVjdG9yKQoreworICB0 eXBlX3Ntb2IgKnRfc21vYjsKKyAgc3RydWN0IHR5cGUgKnR5cGU7CisgIGxv bmcgbjEsIG4yID0gMDsKKyAgc3RydWN0IHR5cGUgKmFycmF5ID0gTlVMTDsK KyAgdm9sYXRpbGUgc3RydWN0IGdkYl9leGNlcHRpb24gZXhjZXB0OworCisg IEFTU0VSVF9HREJfVFlQRSAoRlVOQ19OQU1FLCBzZWxmLCB0X3Ntb2IsIHR5 cGUpOworCisgIGdkYnNjbV9wYXJzZV9mdW5jdGlvbl9hcmdzIChGVU5DX05B TUUsIE5VTEwsICJsfGwiLAorCQkJICAgICAgbjFfc2NtLCAmbjEsIG4yX3Nj bSwgJm4yKTsKKworICBpZiAoU0NNX1VOQk5EUCAobjJfc2NtKSkKKyAgICB7 CisgICAgICBuMiA9IG4xOworICAgICAgbjEgPSAwOworICAgIH0KKworICBp ZiAobjIgPCBuMSkKKyAgICB7CisgICAgICBzY21fbWlzY19lcnJvciAoRlVO Q19OQU1FLCAiYXJyYXkgbGVuZ3RoIG11c3Qgbm90IGJlIG5lZ2F0aXZlIiwK KwkJICAgICAgc2NtX2NvbnMgKHNjbV9mcm9tX2xvbmcgKG4xKSwgc2NtX2Zy b21fbG9uZyAobjIpKSk7CisgICAgfQorCisgIFRSWV9DQVRDSCAoZXhjZXB0 LCBSRVRVUk5fTUFTS19BTEwpCisgICAgeworICAgICAgYXJyYXkgPSBsb29r dXBfYXJyYXlfcmFuZ2VfdHlwZSAodHlwZSwgbjEsIG4yKTsKKyAgICAgIGlm IChpc192ZWN0b3IpCisJbWFrZV92ZWN0b3JfdHlwZSAoYXJyYXkpOworICAg IH0KKyAgR0RCX1NDTV9IQU5ETEVfRVhDRVBUSU9OIChleGNlcHQpOworCisg IHJldHVybiBnZGJzY21fdHlwZV90b190eXBlX29iamVjdCAoYXJyYXkpOwor fQorCisvKiBSZXR1cm4gYW4gYXJyYXkgdHlwZS4gICovCisKK3N0YXRpYyBT Q00KK3R5c2NtX3R5cGVfYXJyYXkgKFNDTSBzZWxmLCBTQ00gbjEsIFNDTSBu MikKK3sKKyAgcmV0dXJuIHR5c2NtX2FycmF5XzEgKHNlbGYsIG4xLCBuMiwg MCk7Cit9CisKKy8qIFJldHVybiBhIHZlY3RvciB0eXBlLiAgKi8KKworc3Rh dGljIFNDTQordHlzY21fdHlwZV92ZWN0b3IgKFNDTSBzZWxmLCBTQ00gbjEs IFNDTSBuMikKK3sKKyAgcmV0dXJuIHR5c2NtX2FycmF5XzEgKHNlbGYsIG4x LCBuMiwgMSk7Cit9CisKKy8qIFJldHVybiBhIFR5cGUgb2JqZWN0IHdoaWNo IHJlcHJlc2VudHMgYSBwb2ludGVyIHRvIFNFTEYuICAqLworCitzdGF0aWMg U0NNCit0eXNjbV90eXBlX3BvaW50ZXIgKFNDTSBzZWxmKQoreworICB0eXBl X3Ntb2IgKnRfc21vYjsKKyAgc3RydWN0IHR5cGUgKnR5cGU7CisgIHZvbGF0 aWxlIHN0cnVjdCBnZGJfZXhjZXB0aW9uIGV4Y2VwdDsKKworICBBU1NFUlRf R0RCX1RZUEUgKEZVTkNfTkFNRSwgc2VsZiwgdF9zbW9iLCB0eXBlKTsKKwor ICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQorICAgIHsK KyAgICAgIHR5cGUgPSBsb29rdXBfcG9pbnRlcl90eXBlICh0eXBlKTsKKyAg ICB9CisgIEdEQl9TQ01fSEFORExFX0VYQ0VQVElPTiAoZXhjZXB0KTsKKwor ICByZXR1cm4gZ2Ric2NtX3R5cGVfdG9fdHlwZV9vYmplY3QgKHR5cGUpOwor fQorCisvKiBSZXR1cm4gdGhlIHJhbmdlIG9mIGEgdHlwZSByZXByZXNlbnRl ZCBieSBTRUxGLiAgVGhlIHJldHVybiB0eXBlIGlzCisgICBhIGxpc3QuICBU aGUgZmlyc3QgZWxlbWVudCBpcyB0aGUgbG93IGJvdW5kLCBhbmQgdGhlIHNl Y29uZCBlbGVtZW50CisgICBpcyB0aGUgaGlnaCBib3VuZC4gICovCisKK3N0 YXRpYyBTQ00KK3R5c2NtX3R5cGVfcmFuZ2UgKFNDTSBzZWxmKQoreworICB0 eXBlX3Ntb2IgKnRfc21vYjsKKyAgc3RydWN0IHR5cGUgKnR5cGU7CisgIFND TSBsb3dfc2NtLCBoaWdoX3NjbTsKKyAgLyogSW5pdGlhbGl6ZSB0aGVzZSB0 byBhcHBlYXNlIEdDQyB3YXJuaW5ncy4gICovCisgIExPTkdFU1QgbG93ID0g MCwgaGlnaCA9IDA7CisKKyAgQVNTRVJUX0dEQl9UWVBFIChGVU5DX05BTUUs IHNlbGYsIHRfc21vYiwgdHlwZSk7CisKKyAgaWYgKFRZUEVfQ09ERSAodHlw ZSkgIT0gVFlQRV9DT0RFX0FSUkFZCisgICAgICAmJiBUWVBFX0NPREUgKHR5 cGUpICE9IFRZUEVfQ09ERV9TVFJJTkcKKyAgICAgICYmIFRZUEVfQ09ERSAo dHlwZSkgIT0gVFlQRV9DT0RFX1JBTkdFKQorICAgIHNjbV9taXNjX2Vycm9y IChGVU5DX05BTUUsICJ0aGlzIHR5cGUgZG9lcyBub3QgaGF2ZSBhIHJhbmdl Iiwgc2VsZik7CisKKyAgc3dpdGNoIChUWVBFX0NPREUgKHR5cGUpKQorICAg IHsKKyAgICBjYXNlIFRZUEVfQ09ERV9BUlJBWToKKyAgICBjYXNlIFRZUEVf Q09ERV9TVFJJTkc6CisgICAgICBsb3cgPSBUWVBFX0xPV19CT1VORCAoVFlQ RV9JTkRFWF9UWVBFICh0eXBlKSk7CisgICAgICBoaWdoID0gVFlQRV9ISUdI X0JPVU5EIChUWVBFX0lOREVYX1RZUEUgKHR5cGUpKTsKKyAgICAgIGJyZWFr OworICAgIGNhc2UgVFlQRV9DT0RFX1JBTkdFOgorICAgICAgbG93ID0gVFlQ RV9MT1dfQk9VTkQgKHR5cGUpOworICAgICAgaGlnaCA9IFRZUEVfSElHSF9C T1VORCAodHlwZSk7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgbG93X3Nj bSA9IHNjbV9mcm9tX2xvbmcgKGxvdyk7CisgIGhpZ2hfc2NtID0gc2NtX2Zy b21fbG9uZyAoaGlnaCk7CisKKyAgcmV0dXJuIHNjbV9saXN0XzIgKGxvd19z Y20sIGhpZ2hfc2NtKTsKK30KKworLyogUmV0dXJuIGEgVHlwZSBvYmplY3Qg d2hpY2ggcmVwcmVzZW50cyBhIHJlZmVyZW5jZSB0byBTRUxGLiAgKi8KKwor c3RhdGljIFNDTQordHlzY21fdHlwZV9yZWZlcmVuY2UgKFNDTSBzZWxmKQor eworICB0eXBlX3Ntb2IgKnRfc21vYjsKKyAgc3RydWN0IHR5cGUgKnR5cGU7 CisgIHZvbGF0aWxlIHN0cnVjdCBnZGJfZXhjZXB0aW9uIGV4Y2VwdDsKKwor ICBBU1NFUlRfR0RCX1RZUEUgKEZVTkNfTkFNRSwgc2VsZiwgdF9zbW9iLCB0 eXBlKTsKKworICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxM KQorICAgIHsKKyAgICAgIHR5cGUgPSBsb29rdXBfcmVmZXJlbmNlX3R5cGUg KHR5cGUpOworICAgIH0KKyAgR0RCX1NDTV9IQU5ETEVfRVhDRVBUSU9OIChl eGNlcHQpOworCisgIHJldHVybiBnZGJzY21fdHlwZV90b190eXBlX29iamVj dCAodHlwZSk7Cit9CisKKy8qIFJldHVybiBhIFR5cGUgb2JqZWN0IHdoaWNo IHJlcHJlc2VudHMgdGhlIHRhcmdldCB0eXBlIG9mIFNFTEYuICAqLworCitz dGF0aWMgU0NNCit0eXNjbV90eXBlX3RhcmdldCAoU0NNIHNlbGYpCit7Cisg IHR5cGVfc21vYiAqdF9zbW9iOworICBzdHJ1Y3QgdHlwZSAqdHlwZTsKKwor ICBBU1NFUlRfR0RCX1RZUEUgKEZVTkNfTkFNRSwgc2VsZiwgdF9zbW9iLCB0 eXBlKTsKKworICBpZiAoIVRZUEVfVEFSR0VUX1RZUEUgKHR5cGUpKQorICAg IHNjbV9taXNjX2Vycm9yIChGVU5DX05BTUUsICJ0eXBlIGRvZXMgbm90IGhh dmUgYSB0YXJnZXQiLCBzZWxmKTsKKworICByZXR1cm4gZ2Ric2NtX3R5cGVf dG9fdHlwZV9vYmplY3QgKFRZUEVfVEFSR0VUX1RZUEUgKHR5cGUpKTsKK30K KworLyogUmV0dXJuIGEgY29uc3QtcXVhbGlmaWVkIHR5cGUgdmFyaWFudC4g ICovCisKK3N0YXRpYyBTQ00KK3R5c2NtX3R5cGVfY29uc3QgKFNDTSBzZWxm KQoreworICB0eXBlX3Ntb2IgKnRfc21vYjsKKyAgc3RydWN0IHR5cGUgKnR5 cGU7CisgIHZvbGF0aWxlIHN0cnVjdCBnZGJfZXhjZXB0aW9uIGV4Y2VwdDsK KworICBBU1NFUlRfR0RCX1RZUEUgKEZVTkNfTkFNRSwgc2VsZiwgdF9zbW9i LCB0eXBlKTsKKworICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tf QUxMKQorICAgIHsKKyAgICAgIHR5cGUgPSBtYWtlX2N2X3R5cGUgKDEsIDAs IHR5cGUsIE5VTEwpOworICAgIH0KKyAgR0RCX1NDTV9IQU5ETEVfRVhDRVBU SU9OIChleGNlcHQpOworCisgIHJldHVybiBnZGJzY21fdHlwZV90b190eXBl X29iamVjdCAodHlwZSk7Cit9CisKKy8qIFJldHVybiBhIHZvbGF0aWxlLXF1 YWxpZmllZCB0eXBlIHZhcmlhbnQuICAqLworCitzdGF0aWMgU0NNCit0eXNj bV90eXBlX3ZvbGF0aWxlIChTQ00gc2VsZikKK3sKKyAgdHlwZV9zbW9iICp0 X3Ntb2I7CisgIHN0cnVjdCB0eXBlICp0eXBlOworICB2b2xhdGlsZSBzdHJ1 Y3QgZ2RiX2V4Y2VwdGlvbiBleGNlcHQ7CisKKyAgQVNTRVJUX0dEQl9UWVBF IChGVU5DX05BTUUsIHNlbGYsIHRfc21vYiwgdHlwZSk7CisKKyAgVFJZX0NB VENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKKyAgICB7CisgICAgICB0 eXBlID0gbWFrZV9jdl90eXBlICgwLCAxLCB0eXBlLCBOVUxMKTsKKyAgICB9 CisgIEdEQl9TQ01fSEFORExFX0VYQ0VQVElPTiAoZXhjZXB0KTsKKworICBy ZXR1cm4gZ2Ric2NtX3R5cGVfdG9fdHlwZV9vYmplY3QgKHR5cGUpOworfQor CisvKiBSZXR1cm4gYW4gdW5xdWFsaWZpZWQgdHlwZSB2YXJpYW50LiAgKi8K Kworc3RhdGljIFNDTQordHlzY21fdHlwZV91bnF1YWxpZmllZCAoU0NNIHNl bGYpCit7CisgIHR5cGVfc21vYiAqdF9zbW9iOworICBzdHJ1Y3QgdHlwZSAq dHlwZTsKKyAgdm9sYXRpbGUgc3RydWN0IGdkYl9leGNlcHRpb24gZXhjZXB0 OworCisgIEFTU0VSVF9HREJfVFlQRSAoRlVOQ19OQU1FLCBzZWxmLCB0X3Nt b2IsIHR5cGUpOworCisgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFT S19BTEwpCisgICAgeworICAgICAgdHlwZSA9IG1ha2VfY3ZfdHlwZSAoMCwg MCwgdHlwZSwgTlVMTCk7CisgICAgfQorICBHREJfU0NNX0hBTkRMRV9FWENF UFRJT04gKGV4Y2VwdCk7CisKKyAgcmV0dXJuIGdkYnNjbV90eXBlX3RvX3R5 cGVfb2JqZWN0ICh0eXBlKTsKK30KKworLy8gVE9ETzogdGVtcGxhdGUgc3Vw cG9ydCBlbGlkZWQKKworc3RhdGljIFNDTQordHlzY21fdHlwZV9zdHJpbmcg KFNDTSBzZWxmKQoreworICB0eXBlX3Ntb2IgKnRfc21vYjsKKyAgc3RydWN0 IHR5cGUgKnR5cGU7CisgIHZvbGF0aWxlIHN0cnVjdCBnZGJfZXhjZXB0aW9u IGV4Y2VwdDsKKyAgY2hhciAqdGhldHlwZSA9IE5VTEw7CisgIFNDTSByZXN1 bHQ7CisKKyAgQVNTRVJUX0dEQl9UWVBFIChGVU5DX05BTUUsIHNlbGYsIHRf c21vYiwgdHlwZSk7CisKKyAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9N QVNLX0FMTCkKKyAgICB7CisgICAgICBzdHJ1Y3QgY2xlYW51cCAqb2xkX2No YWluOworICAgICAgc3RydWN0IHVpX2ZpbGUgKnN0YjsKKworICAgICAgc3Ri ID0gbWVtX2ZpbGVvcGVuICgpOworICAgICAgb2xkX2NoYWluID0gbWFrZV9j bGVhbnVwX3VpX2ZpbGVfZGVsZXRlIChzdGIpOworCisgICAgICBMQV9QUklO VF9UWVBFICh0eXBlLCAiIiwgc3RiLCAtMSwgMCwgJnR5cGVfcHJpbnRfcmF3 X29wdGlvbnMpOworCisgICAgICB0aGV0eXBlID0gdWlfZmlsZV94c3RyZHVw IChzdGIsIE5VTEwpOworICAgICAgZG9fY2xlYW51cHMgKG9sZF9jaGFpbik7 CisgICAgfQorICBpZiAoZXhjZXB0LnJlYXNvbiA8IDApCisgICAgeworICAg ICAgeGZyZWUgKHRoZXR5cGUpOworICAgICAgR0RCX1NDTV9IQU5ETEVfRVhD RVBUSU9OIChleGNlcHQpOworICAgIH0KKworICAvLyBUT0RPOiBob3N0IGNo YXJzZXQKKyAgcmVzdWx0ID0gZ2Ric2NtX2NfdG9fc2NtX3N0cmluZyAodGhl dHlwZSk7CisgIHhmcmVlICh0aGV0eXBlKTsKKworICByZXR1cm4gcmVzdWx0 OworfQorDAorLyogUmV0dXJuIG51bWJlciBvZiBmaWVsZHMuICAqLworCitz dGF0aWMgU0NNCit0eXNjbV90eXBlX2xlbmd0aCAoU0NNIHNlbGYpCit7Cisg IHR5cGVfc21vYiAqdF9zbW9iOworICBzdHJ1Y3QgdHlwZSAqdHlwZTsKKwor ICBBU1NFUlRfR0RCX1RZUEUgKEZVTkNfTkFNRSwgc2VsZiwgdF9zbW9iLCB0 eXBlKTsKKworICB0eXBlID0gdHlzY21fZ2V0X2NvbXBvc2l0ZSAodHlwZSk7 CisgIGlmICh0eXBlID09IE5VTEwpCisgICAgc2NtX21pc2NfZXJyb3IgKEZV TkNfTkFNRSwgbm90X2NvbXBvc2l0ZV9lcnJvciwgc2VsZik7CisKKyAgcmV0 dXJuIHNjbV9mcm9tX2xvbmcgKFRZUEVfTkZJRUxEUyAodHlwZSkpOworfQor CisvKiBSZXR1cm4gYSBnZGI6ZmllbGQgb2JqZWN0IGZvciB0aGUgZmllbGQg bmFtZWQgYnkgdGhlIGFyZ3VtZW50LiAgKi8KKworc3RhdGljIFNDTQordHlz Y21fdHlwZV9yZWZfZmllbGQgKFNDTSBzZWxmLCBTQ00gZmllbGRfc2NtKQor eworICB0eXBlX3Ntb2IgKnRfc21vYjsKKyAgc3RydWN0IHR5cGUgKnR5cGU7 CisgIGNoYXIgKmZpZWxkOworICBpbnQgaTsKKyAgc3RydWN0IGNsZWFudXAg KmNsZWFudXBzOworCisgIEFTU0VSVF9HREJfVFlQRSAoRlVOQ19OQU1FLCBz ZWxmLCB0X3Ntb2IsIHR5cGUpOworICBTQ01fQVNTRVJUX1RZUEUgKHNjbV9p c19zdHJpbmcgKGZpZWxkX3NjbSksIGZpZWxkX3NjbSwgMSwgRlVOQ19OQU1F LAorCQkgICAic3RyaW5nIik7CisKKyAgZmllbGQgPSBnZGJzY21fc2NtX3Rv X2Nfc3RyaW5nIChmaWVsZF9zY20pOworICBjbGVhbnVwcyA9IG1ha2VfY2xl YW51cCAoeGZyZWUsIGZpZWxkKTsKKworICAvKiBXZSB3YW50IGp1c3QgZmll bGRzIG9mIHRoaXMgdHlwZSwgbm90IG9mIGJhc2UgdHlwZXMsIHNvIGluc3Rl YWQgb2YKKyAgICAgdXNpbmcgbG9va3VwX3N0cnVjdF9lbHRfdHlwZSwgcG9y dGlvbnMgb2YgdGhhdCBmdW5jdGlvbiBhcmUKKyAgICAgY29waWVkIGhlcmUu ICAqLworCisgIHR5cGUgPSB0eXNjbV9nZXRfY29tcG9zaXRlICh0eXBlKTsK KyAgaWYgKHR5cGUgPT0gTlVMTCkKKyAgICBzY21fbWlzY19lcnJvciAoRlVO Q19OQU1FLCBub3RfY29tcG9zaXRlX2Vycm9yLCBzZWxmKTsKKworICBmb3Ig KGkgPSAwOyBpIDwgVFlQRV9ORklFTERTICh0eXBlKTsgaSsrKQorICAgIHsK KyAgICAgIGNvbnN0IGNoYXIgKnRfZmllbGRfbmFtZSA9IFRZUEVfRklFTERf TkFNRSAodHlwZSwgaSk7CisKKyAgICAgIGlmICh0X2ZpZWxkX25hbWUgJiYg KHN0cmNtcF9pdyAodF9maWVsZF9uYW1lLCBmaWVsZCkgPT0gMCkpCisJcmV0 dXJuIHR5c2NtX21ha2VfZmllbGRfc21vYiAoc2VsZiwgaSk7CisgICAgfQor CisgIHNjbV9taXNjX2Vycm9yIChGVU5DX05BTUUsICJ1bmtub3duIGZpZWxk IiwgZmllbGRfc2NtKTsKK30KKworLyogUmV0dXJuIGJvb2xlYW4gaW5kaWNh dGluZyBpZiB0eXBlIFNFTEYgaGFzIEZJRUxEX1NDTSAoYSBzdHJpbmcpLiAg Ki8KKworc3RhdGljIFNDTQordHlzY21fdHlwZV9oYXNfZmllbGRfcCAoU0NN IHNlbGYsIFNDTSBmaWVsZF9zY20pCit7CisgIHR5cGVfc21vYiAqdF9zbW9i OworICBzdHJ1Y3QgdHlwZSAqdHlwZTsKKyAgY2hhciAqZmllbGQ7CisgIGlu dCBpOworICBzdHJ1Y3QgY2xlYW51cCAqY2xlYW51cHM7CisKKyAgQVNTRVJU X0dEQl9UWVBFIChGVU5DX05BTUUsIHNlbGYsIHRfc21vYiwgdHlwZSk7Cisg IFNDTV9BU1NFUlRfVFlQRSAoc2NtX2lzX3N0cmluZyAoZmllbGRfc2NtKSwg ZmllbGRfc2NtLCAxLCBGVU5DX05BTUUsCisJCSAgICJzdHJpbmciKTsKKwor ICBmaWVsZCA9IGdkYnNjbV9zY21fdG9fY19zdHJpbmcgKGZpZWxkX3NjbSk7 CisgIGNsZWFudXBzID0gbWFrZV9jbGVhbnVwICh4ZnJlZSwgZmllbGQpOwor CisgIC8qIFdlIHdhbnQganVzdCBmaWVsZHMgb2YgdGhpcyB0eXBlLCBub3Qg b2YgYmFzZSB0eXBlcywgc28gaW5zdGVhZCBvZgorICAgICB1c2luZyBsb29r dXBfc3RydWN0X2VsdF90eXBlLCBwb3J0aW9ucyBvZiB0aGF0IGZ1bmN0aW9u IGFyZQorICAgICBjb3BpZWQgaGVyZS4gICovCisKKyAgdHlwZSA9IHR5c2Nt X2dldF9jb21wb3NpdGUgKHR5cGUpOworICBpZiAodHlwZSA9PSBOVUxMKQor ICAgIHNjbV9taXNjX2Vycm9yIChGVU5DX05BTUUsIG5vdF9jb21wb3NpdGVf ZXJyb3IsIHNlbGYpOworCisgIGZvciAoaSA9IDA7IGkgPCBUWVBFX05GSUVM RFMgKHR5cGUpOyBpKyspCisgICAgeworICAgICAgY29uc3QgY2hhciAqdF9m aWVsZF9uYW1lID0gVFlQRV9GSUVMRF9OQU1FICh0eXBlLCBpKTsKKworICAg ICAgaWYgKHRfZmllbGRfbmFtZSAmJiAoc3RyY21wX2l3ICh0X2ZpZWxkX25h bWUsIGZpZWxkKSA9PSAwKSkKKwlyZXR1cm4gU0NNX0JPT0xfVDsKKyAgICB9 CisgIHJldHVybiBTQ01fQk9PTF9GOworfQorCisvKiBNYWtlIGEgZmllbGQg aXRlcmF0b3Igb2JqZWN0LiAgKi8KKworc3RhdGljIFNDTQordHlzY21fbWFr ZV9maWVsZF9pdGVyIChTQ00gc2VsZikKK3sKKyAgdHlwZV9zbW9iICp0X3Nt b2I7CisgIHN0cnVjdCB0eXBlICp0eXBlOworCisgIEFTU0VSVF9HREJfVFlQ RSAoRlVOQ19OQU1FLCBzZWxmLCB0X3Ntb2IsIHR5cGUpOworCisgIC8qIENo ZWNrIHRoYXQgInNlbGYiIGlzIGEgc3RydWN0dXJlIG9yIHVuaW9uIHR5cGUu ICAqLworICBTQ01fQVNTRVJUX1RZUEUgKHR5c2NtX2dldF9jb21wb3NpdGUg KHRfc21vYi0+dHlwZSkgIT0gTlVMTCwKKwkJICAgc2VsZiwgMCwgRlVOQ19O QU1FLCAiY29tcG9zaXRlIHR5cGUiKTsKKworICByZXR1cm4gZ2Ric2NtX21h a2VfaXRlcmF0b3IgKHNlbGYsIHNjbV9mcm9tX2ludCAoMCksIHR5c2NtX25l eHRfZmllbGRfc2NtKTsKK30KKworLyogUmV0dXJuIHRoZSBuZXh0IGZpZWxk IGluIHRoZSBpdGVyYXRpb24gdGhyb3VnaCB0aGUgbGlzdCBvZiBmaWVsZHMg b2YgdGhlCisgICB0eXBlLiAgU0VMRiBpcyBhIGdkYjppdGVyYXRvciBzbW9i IGNyZWF0ZWQgYnkgdHlzY21fbWFrZV9maWVsZF9pdGVyLiAgKi8KKworc3Rh dGljIFNDTQordHlzY21fbmV4dF9maWVsZCAoU0NNIHNlbGYpCit7CisgIGl0 ZXJhdG9yX3Ntb2IgKml0ZXJfc21vYjsKKyAgdHlwZV9zbW9iICp0X3Ntb2I7 CisgIHN0cnVjdCB0eXBlICp0eXBlOworICBTQ00gcmVzdWx0OworICBpbnQg ZmllbGQ7CisKKyAgU0NNX0FTU0VSVF9UWVBFIChnZGJzY21faXNfaXRlcmF0 b3IgKHNlbGYpLCBzZWxmLCAwLCBGVU5DX05BTUUsCisJCSAgIGdkYnNjbV9p dGVyYXRvcl9zbW9iX25hbWUpOworICBpdGVyX3Ntb2IgPSAoaXRlcmF0b3Jf c21vYiAqKSBTQ01fU01PQl9EQVRBIChzZWxmKTsKKworICBTQ01fQVNTRVJU X1RZUEUgKGdkYnNjbV9pc190eXBlIChpdGVyX3Ntb2ItPm9iamVjdCksIGl0 ZXJfc21vYi0+b2JqZWN0LAorCQkgICAwLCBGVU5DX05BTUUsIHR5cGVfc21v Yl9uYW1lKTsKKyAgdF9zbW9iID0gKHR5cGVfc21vYiAqKSBTQ01fU01PQl9E QVRBIChpdGVyX3Ntb2ItPm9iamVjdCk7CisgIHR5cGUgPSB0X3Ntb2ItPnR5 cGU7CisKKyAgU0NNX0FTU0VSVF9UWVBFIChzY21faXNfc2lnbmVkX2ludGVn ZXIgKGl0ZXJfc21vYi0+cHJvZ3Jlc3MsCisJCQkJCSAgMCwgVFlQRV9ORklF TERTICh0eXBlKSksCisJCSAgIGl0ZXJfc21vYi0+cHJvZ3Jlc3MsIDAsIEZV TkNfTkFNRSwgImludGVnZXIiKTsKKyAgZmllbGQgPSBzY21fdG9faW50IChp dGVyX3Ntb2ItPnByb2dyZXNzKTsKKworICBpZiAoZmllbGQgPCBUWVBFX05G SUVMRFMgKHR5cGUpKQorICAgIHsKKyAgICAgIHJlc3VsdCA9IHR5c2NtX21h a2VfZmllbGRfc21vYiAoaXRlcl9zbW9iLT5vYmplY3QsIGZpZWxkKTsKKyAg ICAgIGl0ZXJfc21vYi0+cHJvZ3Jlc3MgPSBzY21fZnJvbV9pbnQgKGZpZWxk ICsgMSk7CisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICByZXR1 cm4gU0NNX0JPT0xfRjsKK30KKwwKKy8qIEZpZWxkIHNtb2IgYWNjZXNzb3Jz LiAgKi8KKworI2RlZmluZSBBU1NFUlRfR0RCX0ZJRUxEKGZ1bmNfbmFtZSwg c2VsZiwgZl9zbW9iLCBmaWVsZCkJXAorICBkbyB7CQkJCQkJCQlcCisgICAg dHlwZV9zbW9iICp0X3Ntb2I7CQkJCQkJXAorICAgIGFzc2VydF9pc19maWVs ZCAoc2VsZiwgZnVuY19uYW1lKTsJCQkJXAorICAgIGZfc21vYiA9IChmaWVs ZF9zbW9iICopIFNDTV9TTU9CX0RBVEEgKHNlbGYpOwkJXAorICAgIGFzc2Vy dF9pc190eXBlIChmX3Ntb2ItPnR5cGVfc2NtLCBmdW5jX25hbWUpOwkJXAor ICAgIHRfc21vYiA9ICh0eXBlX3Ntb2IgKikgU0NNX1NNT0JfREFUQSAoZl9z bW9iLT50eXBlX3NjbSk7CVwKKyAgICBmaWVsZCA9ICZUWVBFX0ZJRUxEICh0 X3Ntb2ItPnR5cGUsIGZfc21vYi0+ZmllbGRfbnVtKTsJXAorICB9IHdoaWxl ICgwKQorCisjZGVmaW5lIEFTU0VSVF9HREJfRklFTERfV0lUSF9UWVBFKGZ1 bmNfbmFtZSwgc2VsZiwgZl9zbW9iLCBmaWVsZCwgdF9zbW9iKSBcCisgIGRv IHsJCQkJCQkJCQlcCisgICAgYXNzZXJ0X2lzX2ZpZWxkIChzZWxmLCBmdW5j X25hbWUpOwkJCQkJXAorICAgIGZfc21vYiA9IChmaWVsZF9zbW9iICopIFND TV9TTU9CX0RBVEEgKHNlbGYpOwkJCVwKKyAgICBhc3NlcnRfaXNfdHlwZSAo Zl9zbW9iLT50eXBlX3NjbSwgZnVuY19uYW1lKTsJCQlcCisgICAgdF9zbW9i ID0gKHR5cGVfc21vYiAqKSBTQ01fU01PQl9EQVRBIChmX3Ntb2ItPnR5cGVf c2NtKTsJCVwKKyAgICBmaWVsZCA9ICZUWVBFX0ZJRUxEICh0X3Ntb2ItPnR5 cGUsIGZfc21vYi0+ZmllbGRfbnVtKTsJCVwKKyAgfSB3aGlsZSAoMCkKKwor c3RhdGljIHZvaWQKK2Fzc2VydF9pc19maWVsZCAoU0NNIHNlbGYsIGNvbnN0 IGNoYXIgKmZ1bmNfbmFtZSkKK3sKKyAgU0NNX0FTU0VSVF9UWVBFIChnZGJz Y21faXNfZmllbGQgKHNlbGYpLCBzZWxmLCAwLCBmdW5jX25hbWUsCisJCSAg IGZpZWxkX3Ntb2JfbmFtZSk7Cit9CisKKy8qIFJldHVybiB0aGUgbmFtZSBv ZiB0aGlzIGZpZWxkLiAgKi8KKworc3RhdGljIFNDTQordHlzY21fZmllbGRf bmFtZSAoU0NNIHNlbGYpCit7CisgIGZpZWxkX3Ntb2IgKmZfc21vYjsKKyAg c3RydWN0IGZpZWxkICpmaWVsZDsKKworICBBU1NFUlRfR0RCX0ZJRUxEIChG VU5DX05BTUUsIHNlbGYsIGZfc21vYiwgZmllbGQpOworCisgIGlmIChGSUVM RF9OQU1FICgqZmllbGQpKQorICAgIHJldHVybiBnZGJzY21fY190b19zY21f c3RyaW5nIChGSUVMRF9OQU1FICgqZmllbGQpKTsKKyAgcmV0dXJuIFNDTV9C T09MX0Y7Cit9CisKK3N0YXRpYyBTQ00KK3R5c2NtX2ZpZWxkX3R5cGUgKFND TSBzZWxmKQoreworICBmaWVsZF9zbW9iICpmX3Ntb2I7CisgIHN0cnVjdCBm aWVsZCAqZmllbGQ7CisKKyAgQVNTRVJUX0dEQl9GSUVMRCAoRlVOQ19OQU1F LCBzZWxmLCBmX3Ntb2IsIGZpZWxkKTsKKworICAvKiBBIGZpZWxkIGNhbiBo YXZlIGEgTlVMTCB0eXBlIGluIHNvbWUgc2l0dWF0aW9ucy4gICovCisgIGlm IChGSUVMRF9UWVBFICgqZmllbGQpKQorICAgIHJldHVybiBnZGJzY21fdHlw ZV90b190eXBlX29iamVjdCAoRklFTERfVFlQRSAoKmZpZWxkKSk7CisgIHJl dHVybiBTQ01fQk9PTF9GOworfQorCitzdGF0aWMgU0NNCit0eXNjbV9maWVs ZF9lbnVtdmFsIChTQ00gc2VsZikKK3sKKyAgdHlwZV9zbW9iICp0X3Ntb2I7 CisgIGZpZWxkX3Ntb2IgKmZfc21vYjsKKyAgc3RydWN0IGZpZWxkICpmaWVs ZDsKKworICBBU1NFUlRfR0RCX0ZJRUxEX1dJVEhfVFlQRSAoRlVOQ19OQU1F LCBzZWxmLCBmX3Ntb2IsIGZpZWxkLCB0X3Ntb2IpOworICBTQ01fQVNTRVJU X1RZUEUgKFRZUEVfQ09ERSAodF9zbW9iLT50eXBlKSA9PSBUWVBFX0NPREVf RU5VTSwKKwkJICAgc2VsZiwgMCwgRlVOQ19OQU1FLCAiZW51bSB0eXBlIik7 CisKKyAgcmV0dXJuIHNjbV9mcm9tX2xvbmcgKEZJRUxEX0VOVU1WQUwgKCpm aWVsZCkpOworfQorCitzdGF0aWMgU0NNCit0eXNjbV9maWVsZF9iaXRwb3Mg KFNDTSBzZWxmKQoreworICB0eXBlX3Ntb2IgKnRfc21vYjsKKyAgZmllbGRf c21vYiAqZl9zbW9iOworICBzdHJ1Y3QgZmllbGQgKmZpZWxkOworCisgIEFT U0VSVF9HREJfRklFTERfV0lUSF9UWVBFIChGVU5DX05BTUUsIHNlbGYsIGZf c21vYiwgZmllbGQsIHRfc21vYik7CisgIFNDTV9BU1NFUlRfVFlQRSAoVFlQ RV9DT0RFICh0X3Ntb2ItPnR5cGUpICE9IFRZUEVfQ09ERV9FTlVNLAorCQkg ICBzZWxmLCAwLCBGVU5DX05BTUUsICJub24tZW51bSB0eXBlIik7CisKKyAg cmV0dXJuIHNjbV9mcm9tX2xvbmcgKEZJRUxEX0JJVFBPUyAoKmZpZWxkKSk7 Cit9CisKK3N0YXRpYyBTQ00KK3R5c2NtX2ZpZWxkX2JpdHNpemUgKFNDTSBz ZWxmKQoreworICBmaWVsZF9zbW9iICpmX3Ntb2I7CisgIHN0cnVjdCBmaWVs ZCAqZmllbGQ7CisKKyAgQVNTRVJUX0dEQl9GSUVMRCAoRlVOQ19OQU1FLCBz ZWxmLCBmX3Ntb2IsIGZpZWxkKTsKKworICByZXR1cm4gc2NtX2Zyb21fbG9u ZyAoRklFTERfQklUUE9TICgqZmllbGQpKTsKK30KKworc3RhdGljIFNDTQor dHlzY21fZmllbGRfYXJ0aWZpY2lhbF9wIChTQ00gc2VsZikKK3sKKyAgZmll bGRfc21vYiAqZl9zbW9iOworICBzdHJ1Y3QgZmllbGQgKmZpZWxkOworCisg IEFTU0VSVF9HREJfRklFTEQgKEZVTkNfTkFNRSwgc2VsZiwgZl9zbW9iLCBm aWVsZCk7CisKKyAgcmV0dXJuIHNjbV9mcm9tX2Jvb2wgKEZJRUxEX0FSVElG SUNJQUwgKCpmaWVsZCkpOworfQorCitzdGF0aWMgU0NNCit0eXNjbV9maWVs ZF9iYXNlY2xhc3NfcCAoU0NNIHNlbGYpCit7CisgIHR5cGVfc21vYiAqdF9z bW9iOworICBmaWVsZF9zbW9iICpmX3Ntb2I7CisgIHN0cnVjdCBmaWVsZCAq ZmllbGQ7CisKKyAgQVNTRVJUX0dEQl9GSUVMRF9XSVRIX1RZUEUgKEZVTkNf TkFNRSwgc2VsZiwgZl9zbW9iLCBmaWVsZCwgdF9zbW9iKTsKKworICBpZiAo VFlQRV9DT0RFICh0X3Ntb2ItPnR5cGUpID09IFRZUEVfQ09ERV9DTEFTUykK KyAgICB7CisgICAgICByZXR1cm4gc2NtX2Zyb21fYm9vbCAoZl9zbW9iLT5m aWVsZF9udW0KKwkJCSAgICA8IFRZUEVfTl9CQVNFQ0xBU1NFUyAodF9zbW9i LT50eXBlKSk7CisgICAgfQorICByZXR1cm4gU0NNX0JPT0xfRjsKK30KKwwK Ky8vIEZJWE1FOiBNb3N0IG9mIHRoaXMgY2FuIGJlIG1vdmVkIHRvIGdkYiBj b3JlIGFuZCBzaGFyZWQgd2l0aCBweXRob24uICAqLworCisvKiBBbiBlbnRy eSBpbiB0aGUgdHlwZS1lcXVhbGl0eSBiY2FjaGUuICAqLworCit0eXBlZGVm IHN0cnVjdCB0eXBlX2VxdWFsaXR5X2VudHJ5Cit7CisgIHN0cnVjdCB0eXBl ICp0eXBlMSwgKnR5cGUyOworfSB0eXBlX2VxdWFsaXR5X2VudHJ5X2Q7CisK K0RFRl9WRUNfTyAodHlwZV9lcXVhbGl0eV9lbnRyeV9kKTsKKworLyogQSBo ZWxwZXIgZnVuY3Rpb24gdG8gY29tcGFyZSB0d28gc3RyaW5ncy4gIFJldHVy bnMgMSBpZiB0aGV5IGFyZQorICAgdGhlIHNhbWUsIDAgb3RoZXJ3aXNlLiAg SGFuZGxlcyBOVUxMcyBwcm9wZXJseS4gICovCisKK3N0YXRpYyBpbnQKK2Nv bXBhcmVfbWF5YmVfbnVsbF9zdHJpbmdzIChjb25zdCBjaGFyICpzLCBjb25z dCBjaGFyICp0KQoreworICBpZiAocyA9PSBOVUxMICYmIHQgIT0gTlVMTCkK KyAgICByZXR1cm4gMDsKKyAgZWxzZSBpZiAocyAhPSBOVUxMICYmIHQgPT0g TlVMTCkKKyAgICByZXR1cm4gMDsKKyAgZWxzZSBpZiAocyA9PSBOVUxMICYm IHQ9PSBOVUxMKQorICAgIHJldHVybiAxOworICByZXR1cm4gc3RyY21wIChz LCB0KSA9PSAwOworfQorCisvKiBBIGhlbHBlciBmdW5jdGlvbiBmb3IgdHlz Y21fcmljaGNvbXBhcmUgdGhhdCBjaGVja3MgdHdvIHR5cGVzIGZvcgorICAg ImRlZXAiIGVxdWFsaXR5LiAgUmV0dXJucyBub24temVybyBpZiB0aGUgdHlw ZXMgYXJlIGNvbnNpZGVyZWQgdGhlCisgICBzYW1lLCB6ZXJvIG90aGVyd2lz ZS4gICovCisKK3N0YXRpYyBpbnQKK2NoZWNrX3R5cGVzX2VxdWFsIChzdHJ1 Y3QgdHlwZSAqdHlwZTEsIHN0cnVjdCB0eXBlICp0eXBlMiwKKwkJICAgVkVD ICh0eXBlX2VxdWFsaXR5X2VudHJ5X2QpICoqd29ya2xpc3QpCit7CisgIENI RUNLX1RZUEVERUYgKHR5cGUxKTsKKyAgQ0hFQ0tfVFlQRURFRiAodHlwZTIp OworCisgIGlmICh0eXBlMSA9PSB0eXBlMikKKyAgICByZXR1cm4gMTsKKwor ICBpZiAoVFlQRV9DT0RFICh0eXBlMSkgIT0gVFlQRV9DT0RFICh0eXBlMikK KyAgICAgIHx8IFRZUEVfTEVOR1RIICh0eXBlMSkgIT0gVFlQRV9MRU5HVEgg KHR5cGUyKQorICAgICAgfHwgVFlQRV9VTlNJR05FRCAodHlwZTEpICE9IFRZ UEVfVU5TSUdORUQgKHR5cGUyKQorICAgICAgfHwgVFlQRV9OT1NJR04gKHR5 cGUxKSAhPSBUWVBFX05PU0lHTiAodHlwZTIpCisgICAgICB8fCBUWVBFX1ZB UkFSR1MgKHR5cGUxKSAhPSBUWVBFX1ZBUkFSR1MgKHR5cGUyKQorICAgICAg fHwgVFlQRV9WRUNUT1IgKHR5cGUxKSAhPSBUWVBFX1ZFQ1RPUiAodHlwZTIp CisgICAgICB8fCBUWVBFX05PVFRFWFQgKHR5cGUxKSAhPSBUWVBFX05PVFRF WFQgKHR5cGUyKQorICAgICAgfHwgVFlQRV9JTlNUQU5DRV9GTEFHUyAodHlw ZTEpICE9IFRZUEVfSU5TVEFOQ0VfRkxBR1MgKHR5cGUyKQorICAgICAgfHwg VFlQRV9ORklFTERTICh0eXBlMSkgIT0gVFlQRV9ORklFTERTICh0eXBlMikp CisgICAgcmV0dXJuIDA7CisKKyAgaWYgKCFjb21wYXJlX21heWJlX251bGxf c3RyaW5ncyAoVFlQRV9UQUdfTkFNRSAodHlwZTEpLAorCQkJCSAgIFRZUEVf VEFHX05BTUUgKHR5cGUyKSkpCisgICAgcmV0dXJuIDA7CisgIGlmICghY29t cGFyZV9tYXliZV9udWxsX3N0cmluZ3MgKFRZUEVfTkFNRSAodHlwZTEpLCBU WVBFX05BTUUgKHR5cGUyKSkpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKFRZ UEVfQ09ERSAodHlwZTEpID09IFRZUEVfQ09ERV9SQU5HRSkKKyAgICB7Cisg ICAgICBpZiAobWVtY21wIChUWVBFX1JBTkdFX0RBVEEgKHR5cGUxKSwgVFlQ RV9SQU5HRV9EQVRBICh0eXBlMiksCisJCSAgc2l6ZW9mICgqVFlQRV9SQU5H RV9EQVRBICh0eXBlMSkpKSAhPSAwKQorCXJldHVybiAwOworICAgIH0KKyAg ZWxzZQorICAgIHsKKyAgICAgIGludCBpOworCisgICAgICBmb3IgKGkgPSAw OyBpIDwgVFlQRV9ORklFTERTICh0eXBlMSk7ICsraSkKKwl7CisJICBjb25z dCBzdHJ1Y3QgZmllbGQgKmZpZWxkMSA9ICZUWVBFX0ZJRUxEICh0eXBlMSwg aSk7CisJICBjb25zdCBzdHJ1Y3QgZmllbGQgKmZpZWxkMiA9ICZUWVBFX0ZJ RUxEICh0eXBlMiwgaSk7CisJICBzdHJ1Y3QgdHlwZV9lcXVhbGl0eV9lbnRy eSBlbnRyeTsKKworCSAgaWYgKEZJRUxEX0FSVElGSUNJQUwgKCpmaWVsZDEp ICE9IEZJRUxEX0FSVElGSUNJQUwgKCpmaWVsZDIpCisJICAgICAgfHwgRklF TERfQklUU0laRSAoKmZpZWxkMSkgIT0gRklFTERfQklUU0laRSAoKmZpZWxk MikKKwkgICAgICB8fCBGSUVMRF9MT0NfS0lORCAoKmZpZWxkMSkgIT0gRklF TERfTE9DX0tJTkQgKCpmaWVsZDIpKQorCSAgICByZXR1cm4gMDsKKwkgIGlm ICghY29tcGFyZV9tYXliZV9udWxsX3N0cmluZ3MgKEZJRUxEX05BTUUgKCpm aWVsZDEpLAorCQkJCQkgICBGSUVMRF9OQU1FICgqZmllbGQyKSkpCisJICAg IHJldHVybiAwOworCSAgc3dpdGNoIChGSUVMRF9MT0NfS0lORCAoKmZpZWxk MSkpCisJICAgIHsKKwkgICAgY2FzZSBGSUVMRF9MT0NfS0lORF9CSVRQT1M6 CisJICAgICAgaWYgKEZJRUxEX0JJVFBPUyAoKmZpZWxkMSkgIT0gRklFTERf QklUUE9TICgqZmllbGQyKSkKKwkJcmV0dXJuIDA7CisJICAgICAgYnJlYWs7 CisJICAgIGNhc2UgRklFTERfTE9DX0tJTkRfRU5VTVZBTDoKKwkgICAgICBp ZiAoRklFTERfRU5VTVZBTCAoKmZpZWxkMSkgIT0gRklFTERfRU5VTVZBTCAo KmZpZWxkMikpCisJCXJldHVybiAwOworCSAgICAgIGJyZWFrOworCSAgICBj YXNlIEZJRUxEX0xPQ19LSU5EX1BIWVNBRERSOgorCSAgICAgIGlmIChGSUVM RF9TVEFUSUNfUEhZU0FERFIgKCpmaWVsZDEpCisJCSAgIT0gRklFTERfU1RB VElDX1BIWVNBRERSICgqZmllbGQyKSkKKwkJcmV0dXJuIDA7CisJICAgICAg YnJlYWs7CisJICAgIGNhc2UgRklFTERfTE9DX0tJTkRfUEhZU05BTUU6CisJ ICAgICAgaWYgKCFjb21wYXJlX21heWJlX251bGxfc3RyaW5ncyAoRklFTERf U1RBVElDX1BIWVNOQU1FICgqZmllbGQxKSwKKwkJCQkJICAgICAgIEZJRUxE X1NUQVRJQ19QSFlTTkFNRSAoKmZpZWxkMikpKQorCQlyZXR1cm4gMDsKKwkg ICAgICBicmVhazsKKwkgICAgY2FzZSBGSUVMRF9MT0NfS0lORF9EV0FSRl9C TE9DSzoKKwkgICAgICB7CisJCXN0cnVjdCBkd2FyZjJfbG9jZXhwcl9iYXRv biAqYmxvY2sxLCAqYmxvY2syOworCisJCWJsb2NrMSA9IEZJRUxEX0RXQVJG X0JMT0NLICgqZmllbGQxKTsKKwkJYmxvY2syID0gRklFTERfRFdBUkZfQkxP Q0sgKCpmaWVsZDIpOworCQlpZiAoYmxvY2sxLT5wZXJfY3UgIT0gYmxvY2sy LT5wZXJfY3UKKwkJICAgIHx8IGJsb2NrMS0+c2l6ZSAhPSBibG9jazItPnNp emUKKwkJICAgIHx8IG1lbWNtcCAoYmxvY2sxLT5kYXRhLCBibG9jazItPmRh dGEsIGJsb2NrMS0+c2l6ZSkgIT0gMCkKKwkJICByZXR1cm4gMDsKKwkgICAg ICB9CisJICAgICAgYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJICAgICAgaW50 ZXJuYWxfZXJyb3IgKF9fRklMRV9fLCBfX0xJTkVfXywgXygiVW5zdXBwb3J0 ZWQgZmllbGQga2luZCAiCisJCQkJCQkgICAgIiVkIGJ5IGNoZWNrX3R5cGVz X2VxdWFsIiksCisJCQkgICAgICBGSUVMRF9MT0NfS0lORCAoKmZpZWxkMSkp OworCSAgICB9CisKKwkgIGVudHJ5LnR5cGUxID0gRklFTERfVFlQRSAoKmZp ZWxkMSk7CisJICBlbnRyeS50eXBlMiA9IEZJRUxEX1RZUEUgKCpmaWVsZDIp OworCSAgVkVDX3NhZmVfcHVzaCAodHlwZV9lcXVhbGl0eV9lbnRyeV9kLCAq d29ya2xpc3QsICZlbnRyeSk7CisJfQorICAgIH0KKworICBpZiAoVFlQRV9U QVJHRVRfVFlQRSAodHlwZTEpICE9IE5VTEwpCisgICAgeworICAgICAgc3Ry dWN0IHR5cGVfZXF1YWxpdHlfZW50cnkgZW50cnk7CisKKyAgICAgIGlmIChU WVBFX1RBUkdFVF9UWVBFICh0eXBlMikgPT0gTlVMTCkKKwlyZXR1cm4gMDsK KworICAgICAgZW50cnkudHlwZTEgPSBUWVBFX1RBUkdFVF9UWVBFICh0eXBl MSk7CisgICAgICBlbnRyeS50eXBlMiA9IFRZUEVfVEFSR0VUX1RZUEUgKHR5 cGUyKTsKKyAgICAgIFZFQ19zYWZlX3B1c2ggKHR5cGVfZXF1YWxpdHlfZW50 cnlfZCwgKndvcmtsaXN0LCAmZW50cnkpOworICAgIH0KKyAgZWxzZSBpZiAo VFlQRV9UQVJHRVRfVFlQRSAodHlwZTIpICE9IE5VTEwpCisgICAgcmV0dXJu IDA7CisKKyAgcmV0dXJuIDE7Cit9CisKKy8qIENoZWNrIHR5cGVzIG9uIGEg d29ya2xpc3QgZm9yIGVxdWFsaXR5LiAgUmV0dXJucyB6ZXJvIGlmIGFueSBw YWlyCisgICBpcyBub3QgZXF1YWwsIG5vbi16ZXJvIGlmIHRoZXkgYXJlIGFs bCBjb25zaWRlcmVkIGVxdWFsLiAgKi8KKworc3RhdGljIGludAorY2hlY2tf dHlwZXNfd29ya2xpc3QgKFZFQyAodHlwZV9lcXVhbGl0eV9lbnRyeV9kKSAq KndvcmtsaXN0LAorCQkgICAgICBzdHJ1Y3QgYmNhY2hlICpjYWNoZSkKK3sK KyAgd2hpbGUgKCFWRUNfZW1wdHkgKHR5cGVfZXF1YWxpdHlfZW50cnlfZCwg KndvcmtsaXN0KSkKKyAgICB7CisgICAgICBzdHJ1Y3QgdHlwZV9lcXVhbGl0 eV9lbnRyeSBlbnRyeTsKKyAgICAgIGludCBhZGRlZDsKKworICAgICAgZW50 cnkgPSAqVkVDX2xhc3QgKHR5cGVfZXF1YWxpdHlfZW50cnlfZCwgKndvcmts aXN0KTsKKyAgICAgIFZFQ19wb3AgKHR5cGVfZXF1YWxpdHlfZW50cnlfZCwg KndvcmtsaXN0KTsKKworICAgICAgLyogSWYgdGhlIHR5cGUgcGFpciBoYXMg YWxyZWFkeSBiZWVuIHZpc2l0ZWQsIHdlIGtub3cgaXQgaXMKKwkgb2suICAq LworICAgICAgYmNhY2hlX2Z1bGwgKCZlbnRyeSwgc2l6ZW9mIChlbnRyeSks IGNhY2hlLCAmYWRkZWQpOworICAgICAgaWYgKCFhZGRlZCkKKwljb250aW51 ZTsKKworICAgICAgaWYgKGNoZWNrX3R5cGVzX2VxdWFsIChlbnRyeS50eXBl MSwgZW50cnkudHlwZTIsIHdvcmtsaXN0KSA9PSAwKQorCXJldHVybiAwOwor ICAgIH0KKworICByZXR1cm4gMTsKK30KKworLyogZXF1YWw/IGZvciB0eXBl cy4gICovCisKK3N0YXRpYyBTQ00KK3R5c2NtX3R5cGVfZXF1YWxfcCAoU0NN IHR5cGUxX3NjbSwgU0NNIHR5cGUyX3NjbSkKK3sKKyAgdHlwZV9zbW9iICp0 eXBlMV9zbW9iLCAqdHlwZTJfc21vYjsKKyAgc3RydWN0IHR5cGUgKnR5cGUx LCAqdHlwZTI7CisgIHZvbGF0aWxlIHN0cnVjdCBnZGJfZXhjZXB0aW9uIGV4 Y2VwdDsKKyAgaW50IHJlc3VsdCA9IDA7CisKKyAgU0NNX0FTU0VSVF9UWVBF IChnZGJzY21faXNfdHlwZSAodHlwZTFfc2NtKSwgdHlwZTFfc2NtLCAwLCBG VU5DX05BTUUsCisJCSAgIHR5cGVfc21vYl9uYW1lKTsKKyAgU0NNX0FTU0VS VF9UWVBFIChnZGJzY21faXNfdHlwZSAodHlwZTJfc2NtKSwgdHlwZTJfc2Nt LCAxLCBGVU5DX05BTUUsCisJCSAgIHR5cGVfc21vYl9uYW1lKTsKKyAgdHlw ZTFfc21vYiA9ICh0eXBlX3Ntb2IgKikgU0NNX1NNT0JfREFUQSAodHlwZTFf c2NtKTsKKyAgdHlwZTJfc21vYiA9ICh0eXBlX3Ntb2IgKikgU0NNX1NNT0Jf REFUQSAodHlwZTJfc2NtKTsKKyAgdHlwZTEgPSB0eXBlMV9zbW9iLT50eXBl OworICB0eXBlMiA9IHR5cGUyX3Ntb2ItPnR5cGU7CisKKyAgaWYgKHR5cGUx ID09IHR5cGUyKQorICAgIHJlc3VsdCA9IDE7CisgIGVsc2UKKyAgICB7Cisg ICAgICBzdHJ1Y3QgYmNhY2hlICpjYWNoZTsKKyAgICAgIFZFQyAodHlwZV9l cXVhbGl0eV9lbnRyeV9kKSAqd29ya2xpc3QgPSBOVUxMOworICAgICAgc3Ry dWN0IHR5cGVfZXF1YWxpdHlfZW50cnkgZW50cnk7CisKKyAgICAgIGNhY2hl ID0gYmNhY2hlX3htYWxsb2MgKE5VTEwsIE5VTEwpOworCisgICAgICBlbnRy eS50eXBlMSA9IHR5cGUxOworICAgICAgZW50cnkudHlwZTIgPSB0eXBlMjsK KyAgICAgIFZFQ19zYWZlX3B1c2ggKHR5cGVfZXF1YWxpdHlfZW50cnlfZCwg d29ya2xpc3QsICZlbnRyeSk7CisKKyAgICAgIFRSWV9DQVRDSCAoZXhjZXB0 LCBSRVRVUk5fTUFTS19BTEwpCisJeworCSAgcmVzdWx0ID0gY2hlY2tfdHlw ZXNfd29ya2xpc3QgKCZ3b3JrbGlzdCwgY2FjaGUpOworCX0KKyAgICAgIC8q IGNoZWNrX3R5cGVzX3dvcmtsaXN0IGNhbGxzIHNldmVyYWwgbmVzdGVkIGhl bHBlciBmdW5jdGlvbnMsCisJIHNvbWUgb2Ygd2hpY2ggY2FuIHJhaXNlIGEg R0RCIEV4Y2VwdGlvbiwgc28gd2UganVzdCBjaGVjaworCSBhbmQgY29udmVy dCBoZXJlLiAgSWYgdGhlcmUgaXMgYSBHREIgZXhjZXB0aW9uLCBhIGNvbXBh cmlzb24KKwkgaXMgbm90IGNhcGFibGUgKG9yIHRydXN0ZWQpLCBzbyBleGl0 LiAgKi8KKyAgICAgIGJjYWNoZV94ZnJlZSAoY2FjaGUpOworICAgICAgVkVD X2ZyZWUgKHR5cGVfZXF1YWxpdHlfZW50cnlfZCwgd29ya2xpc3QpOworICAg ICAgR0RCX1NDTV9IQU5ETEVfRVhDRVBUSU9OIChleGNlcHQpOworICAgIH0K KworICByZXR1cm4gc2NtX2Zyb21fYm9vbCAocmVzdWx0KTsKK30KKwwKKy8q IEltcGxlbWVudGF0aW9uIG9mIGdkYjpsb29rdXAtdHlwZS4gICovCisKK3N0 YXRpYyBzdHJ1Y3QgdHlwZSAqCit0eXNjbV9sb29rdXBfdHlwZW5hbWUgKGNv bnN0IGNoYXIgKnR5cGVfbmFtZSwgY29uc3Qgc3RydWN0IGJsb2NrICpibG9j aykKK3sKKyAgc3RydWN0IHR5cGUgKnR5cGUgPSBOVUxMOworICB2b2xhdGls ZSBzdHJ1Y3QgZ2RiX2V4Y2VwdGlvbiBleGNlcHQ7CisKKyAgVFJZX0NBVENI IChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKKyAgICB7CisgICAgICBpZiAo IXN0cm5jbXAgKHR5cGVfbmFtZSwgInN0cnVjdCAiLCA3KSkKKwl0eXBlID0g bG9va3VwX3N0cnVjdCAodHlwZV9uYW1lICsgNywgTlVMTCk7CisgICAgICBl bHNlIGlmICghc3RybmNtcCAodHlwZV9uYW1lLCAidW5pb24gIiwgNikpCisJ dHlwZSA9IGxvb2t1cF91bmlvbiAodHlwZV9uYW1lICsgNiwgTlVMTCk7Cisg ICAgICBlbHNlIGlmICghc3RybmNtcCAodHlwZV9uYW1lLCAiZW51bSAiLCA1 KSkKKwl0eXBlID0gbG9va3VwX2VudW0gKHR5cGVfbmFtZSArIDUsIE5VTEwp OworICAgICAgZWxzZQorCXR5cGUgPSBsb29rdXBfdHlwZW5hbWUgKGN1cnJl bnRfbGFuZ3VhZ2UsIHRhcmdldF9nZGJhcmNoICgpLAorCQkJCXR5cGVfbmFt ZSwgYmxvY2ssIDApOworICAgIH0KKyAgaWYgKGV4Y2VwdC5yZWFzb24gPCAw KQorICAgIHJldHVybiBOVUxMOworCisgIHJldHVybiB0eXBlOworfQorCisv LyBUT0RPOiBsZWdhY3kgdGVtcGxhdGUgc3VwcG9ydCBsZWZ0IG91dCB1bnRp bCBuZWVkZWQKKworLy8gVE9ETzogc3VwcG9ydCBmb3IgbG9va2luZyB1cCB0 eXBlIGluIGJsb2NrCisKK3N0YXRpYyBTQ00KK2dkYnNjbV9sb29rdXBfdHlw ZSAoU0NNIG5hbWVfc2NtKQoreworICBjb25zdCBjaGFyICpuYW1lOworICBz dHJ1Y3QgdHlwZSAqdHlwZTsKKworICBnZGJzY21fcGFyc2VfZnVuY3Rpb25f YXJncyAoRlVOQ19OQU1FLCBOVUxMLCAicyIsIG5hbWVfc2NtLCAmbmFtZSk7 CisKKyAgdHlwZSA9IHR5c2NtX2xvb2t1cF90eXBlbmFtZSAobmFtZSwgTlVM TCk7CisgIGlmICh0eXBlKQorICAgIHJldHVybiBnZGJzY21fdHlwZV90b190 eXBlX29iamVjdCAodHlwZSk7CisgIHJldHVybiBTQ01fQk9PTF9GOworfQor DAorLyogSW5pdGlhbGl6ZSB0aGUgU2NoZW1lIHR5cGUgY29kZS4gICovCisK K3N0YXRpYyBjb25zdCBzY2hlbWVfdmFyaWFibGUgdHlwZV92YXJpYWJsZXNb XSA9Cit7CisgIHsgIippbml0LXR5cGUqIiwgU0NNX0JPT0xfRiB9LAorICB7 ICIqaW5pdC1maWVsZCoiLCBTQ01fQk9PTF9GIH0sCisgIHsgTlVMTCwgU0NN X0JPT0xfRiB9Cit9OworCitzdGF0aWMgY29uc3Qgc2NoZW1lX2Z1bmN0aW9u IHR5cGVfZnVuY3Rpb25zW10gPQoreworICB7ICJ0eXBlPyIsIDEsIDAsIDAs IGdkYnNjbV90eXBlX3AgfSwKKyAgeyAibG9va3VwLXR5cGUiLCAxLCAwLCAw LCBnZGJzY21fbG9va3VwX3R5cGUgfSwKKworICB7ICJ0eXBlLWNvZGUiLCAx LCAwLCAwLCB0eXNjbV90eXBlX2NvZGUgfSwKKyAgeyAidHlwZS1maWVsZHMi LCAxLCAwLCAwLCB0eXNjbV90eXBlX2ZpZWxkcyB9LAorICB7ICJ0eXBlLXRh ZyIsIDEsIDAsIDAsIHR5c2NtX3R5cGVfdGFnIH0sCisgIHsgInR5cGUtc2l6 ZW9mIiwgMSwgMCwgMCwgdHlzY21fdHlwZV9zaXplb2YgfSwKKyAgeyAidHlw ZS1zdHJpcC10eXBlZGVmcyIsIDEsIDAsIDAsIHR5c2NtX3R5cGVfc3RyaXBf dHlwZWRlZnMgfSwKKyAgeyAidHlwZS1hcnJheSIsIDIsIDEsIDAsIHR5c2Nt X3R5cGVfYXJyYXkgfSwKKyAgeyAidHlwZS12ZWN0b3IiLCAyLCAxLCAwLCB0 eXNjbV90eXBlX3ZlY3RvciB9LAorICB7ICJ0eXBlLXBvaW50ZXIiLCAxLCAw LCAwLCB0eXNjbV90eXBlX3BvaW50ZXIgfSwKKyAgeyAidHlwZS1yYW5nZSIs IDEsIDAsIDAsIHR5c2NtX3R5cGVfcmFuZ2UgfSwKKyAgeyAidHlwZS1yZWZl cmVuY2UiLCAxLCAwLCAwLCB0eXNjbV90eXBlX3JlZmVyZW5jZSB9LAorICB7 ICJ0eXBlLXRhcmdldCIsIDEsIDAsIDAsIHR5c2NtX3R5cGVfdGFyZ2V0IH0s CisgIHsgInR5cGUtY29uc3QiLCAxLCAwLCAwLCB0eXNjbV90eXBlX2NvbnN0 IH0sCisgIHsgInR5cGUtdm9sYXRpbGUiLCAxLCAwLCAwLCB0eXNjbV90eXBl X3ZvbGF0aWxlIH0sCisgIHsgInR5cGUtdW5xdWFsaWZpZWQiLCAxLCAwLCAw LCB0eXNjbV90eXBlX3VucXVhbGlmaWVkIH0sCisgIHsgInR5cGUtc3RyaW5n IiwgMSwgMCwgMCwgdHlzY21fdHlwZV9zdHJpbmcgfSwKKyAgeyAidHlwZS1l cXVhbD8iLCAyLCAwLCAwLCB0eXNjbV90eXBlX2VxdWFsX3AgfSwKKworICB7 ICJ0eXBlLWxlbmd0aCIsIDEsIDAsIDAsIHR5c2NtX3R5cGVfbGVuZ3RoIH0s CisgIHsgInR5cGUtcmVmLWZpZWxkIiwgMiwgMCwgMCwgdHlzY21fdHlwZV9y ZWZfZmllbGQgfSwKKyAgeyAidHlwZS1oYXMtZmllbGQ/IiwgMiwgMCwgMCwg dHlzY21fdHlwZV9oYXNfZmllbGRfcCB9LAorCisgIHsgImZpZWxkPyIsIDEs IDAsIDAsIGdkYnNjbV9maWVsZF9wIH0sCisgIHsgIm1ha2UtZmllbGQtaXRl ciIsIDEsIDAsIDAsIHR5c2NtX21ha2VfZmllbGRfaXRlciB9LAorCisgIHsg ImZpZWxkLW5hbWUiLCAxLCAwLCAwLCB0eXNjbV9maWVsZF9uYW1lIH0sCisg IHsgImZpZWxkLXR5cGUiLCAxLCAwLCAwLCB0eXNjbV9maWVsZF90eXBlIH0s CisgIHsgImZpZWxkLWVudW12YWwiLCAxLCAwLCAwLCB0eXNjbV9maWVsZF9l bnVtdmFsIH0sCisgIHsgImZpZWxkLWJpdHBvcyIsIDEsIDAsIDAsIHR5c2Nt X2ZpZWxkX2JpdHBvcyB9LAorICB7ICJmaWVsZC1iaXRzaXplIiwgMSwgMCwg MCwgdHlzY21fZmllbGRfYml0c2l6ZSB9LAorICB7ICJmaWVsZC1hcnRpZmlj aWFsPyIsIDEsIDAsIDAsIHR5c2NtX2ZpZWxkX2FydGlmaWNpYWxfcCB9LAor ICB7ICJmaWVsZC1iYXNlY2xhc3M/IiwgMSwgMCwgMCwgdHlzY21fZmllbGRf YmFzZWNsYXNzX3AgfSwKKworICB7IE5VTEwsIDAsIDAsIDAsIE5VTEwgfQor fTsKKwordm9pZAorZ2Ric2NtX2luaXRpYWxpemVfdHlwZXMgKHZvaWQpCit7 CisgIGludCBpOworCisgIHR5c2NtX29iamZpbGVfZGF0YV9rZXkKKyAgICA9 IHJlZ2lzdGVyX29iamZpbGVfZGF0YV93aXRoX2NsZWFudXAgKHNhdmVfb2Jq ZmlsZV90eXBlcywgTlVMTCk7CisKKyAgZm9yIChpID0gMDsgdHlzY21fY29k ZXNbaV0ubmFtZTsgKytpKQorICAgIHsKKyAgICAgIHNjbV9jX2RlZmluZSAo dHlzY21fY29kZXNbaV0ubmFtZSwgc2NtX2Zyb21faW50ICh0eXNjbV9jb2Rl c1tpXS5jb2RlKSk7CisgICAgICBzY21fY19leHBvcnQgKHR5c2NtX2NvZGVz W2ldLm5hbWUsIE5VTEwpOworICAgIH0KKworICB0eXBlX3Ntb2JfdGFnID0g Z2Ric2NtX21ha2Vfc21vYl90eXBlICh0eXBlX3Ntb2JfbmFtZSwKKwkJCQkJ IHNpemVvZiAodHlwZV9zbW9iKSk7CisgIHNjbV9zZXRfc21vYl9tYXJrICh0 eXBlX3Ntb2JfdGFnLCBtYXJrX3R5cGVfc21vYik7CisgIHNjbV9zZXRfc21v Yl9mcmVlICh0eXBlX3Ntb2JfdGFnLCBmcmVlX3R5cGVfc21vYik7CisgIHNj bV9zZXRfc21vYl9wcmludCAodHlwZV9zbW9iX3RhZywgcHJpbnRfdHlwZV9z bW9iKTsKKworICBmaWVsZF9zbW9iX3RhZyA9IGdkYnNjbV9tYWtlX3Ntb2Jf dHlwZSAoZmllbGRfc21vYl9uYW1lLAorCQkJCQkgIHNpemVvZiAoZmllbGRf c21vYikpOworICBzY21fc2V0X3Ntb2JfbWFyayAoZmllbGRfc21vYl90YWcs IG1hcmtfZmllbGRfc21vYik7CisgIHNjbV9zZXRfc21vYl9wcmludCAoZmll bGRfc21vYl90YWcsIHByaW50X2ZpZWxkX3Ntb2IpOworCisgIGdkYnNjbV9k ZWZpbmVfdmFyaWFibGVzICh0eXBlX3ZhcmlhYmxlcywgMSk7CisgIGdkYnNj bV9kZWZpbmVfZnVuY3Rpb25zICh0eXBlX2Z1bmN0aW9ucywgMSk7CisKKyAg dHlzY21fbmV4dF9maWVsZF9zY20gPQorICAgIHNjbV9jX2RlZmluZV9nc3Vi ciAoIiVuZXh0LWZpZWxkIiwgMSwgMCwgMCwgdHlzY21fbmV4dF9maWVsZCk7 Cit9CmRpZmYgLXJwTiAtVSAyIHNjaGVtZT0vc2NtLXV0aWxzLmMgc2NoZW1l L3NjbS11dGlscy5jCi0tLSBzY2hlbWU9L3NjbS11dGlscy5jCTE5NjktMTIt MzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKyBzY2hlbWUvc2NtLXV0 aWxzLmMJMjAxMy0wOS0wNiAwNzo1Mzo0OS43NDE5NzY0MTcgLTA3MDAKQEAg LTAsMCArMSwzODkgQEAKKy8qIEdlbmVyYWwgdXRpbGl0eSByb3V0aW5lcyBm b3IgZ2RiL3NjaGVtZSBjb2RlLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMTMg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmls ZSBpcyBwYXJ0IG9mIEdEQi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBM aWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAg SWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAg Ki8KKworI2luY2x1ZGUgImRlZnMuaCIKKyNpbmNsdWRlIDxzdGRhcmcuaD4K KyNpbmNsdWRlICJnZGJfYXNzZXJ0LmgiCisjaW5jbHVkZSAic2NoZW1lLWlu dGVybmFsLmgiCisKKy8qIHNjbV9wcmludGYsIGFsYXMgaXQgZG9lc24ndCBl eGlzdC4gICovCisKK3ZvaWQKK2dkYnNjbV9wcmludGYgKFNDTSBwb3J0LCBj b25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdzOwor ICBjaGFyICpzdHJpbmc7CisKKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7 CisgIHN0cmluZyA9IHhzdHJ2cHJpbnRmIChmb3JtYXQsIGFyZ3MpOworICB2 YV9lbmQgKGFyZ3MpOworICBzY21fcHV0cyAoc3RyaW5nLCBwb3J0KTsKKyAg eGZyZWUgKHN0cmluZyk7Cit9CisKKy8qIFV0aWxpdHkgZm9yIGNhbGxpbmcg ZnJvbSBnZGIgdG8gcHJpbnQgYW4gU0NNIG9iamVjdC4gICovCisKK3ZvaWQK K2dkYnNjbV9kaXNwbGF5IChTQ00gb2JqKQoreworICBTQ00gcG9ydCA9IHNj bV9jdXJyZW50X291dHB1dF9wb3J0ICgpOworCisgIHNjbV9kaXNwbGF5IChv YmosIHBvcnQpOworICBzY21fbmV3bGluZSAocG9ydCk7Cit9CisKKy8qIFN1 YnJvdXRpbmUgb2YgZ2Ric2NtX3BhcnNlX2Z1bmN0aW9uX2FyZ3MgdG8gc2lt cGxpZnkgaXQuCisgICBSZXR1cm4gdGhlIG51bWJlciBvZiBrZXl3b3JkIGFy Z3VtZW50cy4gICovCisKK3N0YXRpYyBpbnQKK2NvdW50X2tleXdvcmRzIChj b25zdCBjaGFyICogY29uc3QgKiBrZXl3b3JkcykKK3sKKyAgaW50IGk7CisK KyAgaWYgKGtleXdvcmRzID09IE5VTEwpCisgICAgcmV0dXJuIDA7CisgIGZv ciAoaSA9IDA7IGtleXdvcmRzW2ldICE9IE5VTEw7ICsraSkKKyAgICBjb250 aW51ZTsKKworICByZXR1cm4gaTsKK30KKworLyogU3Vicm91dGluZSBvZiBn ZGJzY21fcGFyc2VfZnVuY3Rpb25fYXJncyB0byBzaW1wbGlmeSBpdC4KKyAg IFZhbGlkYXRlIGFuIGFyZ3VtZW50IGZvcm1hdCBzdHJpbmcuCisgICBUaGUg cmVzdWx0IGlzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmICIuIiB3YXMgc2Vl bi4gICovCisKK3N0YXRpYyBpbnQKK3ZhbGlkYXRlX2FyZ19mb3JtYXQgKGNv bnN0IGNoYXIgKmZvcm1hdCkKK3sKKyAgY29uc3QgY2hhciAqcDsKKyAgaW50 IGxlbmd0aCA9IHN0cmxlbiAoZm9ybWF0KTsKKyAgaW50IG9wdGlvbmFsX3Bv c2l0aW9uID0gLTE7CisgIGludCBrZXl3b3JkX3Bvc2l0aW9uID0gLTE7Cisg IGludCBkb3Rfc2VlbiA9IDA7CisKKyAgZ2RiX2Fzc2VydCAobGVuZ3RoID4g MCk7CisKKyAgZm9yIChwID0gZm9ybWF0OyAqcCAhPSAnXDAnOyArK3ApCisg ICAgeworICAgICAgc3dpdGNoICgqcCkKKwl7CisJY2FzZSAncyc6CisJY2Fz ZSAndCc6CisJICBicmVhazsKKwljYXNlICd8JzoKKwkgIGdkYl9hc3NlcnQg KGtleXdvcmRfcG9zaXRpb24gPCAwKTsKKwkgIGdkYl9hc3NlcnQgKG9wdGlv bmFsX3Bvc2l0aW9uIDwgMCk7CisJICBvcHRpb25hbF9wb3NpdGlvbiA9IHAg LSBmb3JtYXQ7CisJICBicmVhazsKKwljYXNlICcjJzoKKwkgIGdkYl9hc3Nl cnQgKGtleXdvcmRfcG9zaXRpb24gPCAwKTsKKwkgIGtleXdvcmRfcG9zaXRp b24gPSBwIC0gZm9ybWF0OworCSAgYnJlYWs7CisJY2FzZSAnLic6CisJICBn ZGJfYXNzZXJ0IChwWzFdID09ICdcMCcpOworCSAgZG90X3NlZW4gPSAxOwor CSAgYnJlYWs7CisJZGVmYXVsdDoKKwkgIGdkYl9hc3NlcnRfbm90X3JlYWNo ZWQgKCJpbnZhbGlkIHNjaGVtZSBhcmd1bWVudCBmb3JtYXQgY2hhcmFjdGVy Iik7CisJfQorICAgIH0KKworICByZXR1cm4gZG90X3NlZW47Cit9CisKKy8q IFN1YnJvdXRpbmUgb2YgZ2Ric2NtX3BhcnNlX2Z1bmN0aW9uX2FyZ3MgdG8g c2ltcGxpZnkgaXQuCisgICBDaGVjayB0aGUgdHlwZSBvZiBBUkcgYWdhaW5z dCBGT1JNQVRfQ0hBUiBhbmQgZXh0cmFjdCB0aGUgdmFsdWUuCisgICBQT1NJ VElPTiBpcyB0aGUgcG9zaXRpb24gb2YgQVJHIGluIHRoZSBhcmd1bWVudCBs aXN0LiAgKi8KKworc3RhdGljIHZvaWQKK2V4dHJhY3RfYXJnIChjaGFyIGZv cm1hdF9jaGFyLCBTQ00gYXJnLCB2b2lkICphcmdwLAorCSAgICAgY29uc3Qg Y2hhciAqZnVuY3Rpb25fbmFtZSwgaW50IHBvc2l0aW9uKQoreworICBzd2l0 Y2ggKGZvcm1hdF9jaGFyKQorICAgIHsKKyAgICBjYXNlICdzJzoKKyAgICAg IHsKKwljaGFyICoqYXJnX3B0ciA9IGFyZ3A7CisKKwlTQ01fQVNTRVJUX1RZ UEUgKGdkYnNjbV9pc190cnVlIChzY21fc3RyaW5nX3AgKGFyZykpLCBhcmcs IHBvc2l0aW9uLAorCQkJIGZ1bmN0aW9uX25hbWUsICJzdHJpbmciKTsKKwkq YXJnX3B0ciA9IGdkYnNjbV9zY21fdG9fY19zdHJpbmcgKGFyZyk7CisJYnJl YWs7CisgICAgICB9CisgICAgY2FzZSAndCc6CisgICAgICB7CisJaW50ICph cmdfcHRyID0gYXJncDsKKworCS8qIFdoaWxlIGluIFNjaGVtZSwgYW55dGhp bmcgbm9uLSNmIGlzICJ0cnVlIiwgd2UncmUgc3RyaWN0LiAgKi8KKwlTQ01f QVNTRVJUX1RZUEUgKGdkYnNjbV9pc19ib29sIChhcmcpLCBhcmcsIHBvc2l0 aW9uLCBmdW5jdGlvbl9uYW1lLAorCQkJICJib29sZWFuIik7CisJKmFyZ19w dHIgPSBnZGJzY21faXNfdHJ1ZSAoYXJnKTsKKwlicmVhazsKKyAgICAgIH0K KyAgICBjYXNlICdsJzoKKyAgICAgIHsKKwlsb25nICphcmdfcHRyID0gYXJn cDsKKworCVNDTV9BU1NFUlRfVFlQRSAoc2NtX2lzX3NpZ25lZF9pbnRlZ2Vy IChhcmcsIExPTkdfTUlOLCBMT05HX01BWCksCisJCQkgYXJnLCBwb3NpdGlv biwgZnVuY3Rpb25fbmFtZSwgImxvbmciKTsKKwkqYXJnX3B0ciA9IHNjbV90 b19sb25nIChhcmcpOworCWJyZWFrOworICAgICAgfQorICAgIGRlZmF1bHQ6 CisgICAgICBnZGJfYXNzZXJ0X25vdF9yZWFjaGVkICgiaW52YWxpZCBzY2hl bWUgYXJndW1lbnQgZm9ybWF0IGNoYXJhY3RlciIpOworICAgIH0KK30KKwor LyogTG9vayB1cCBLRVlXT1JEIGluIEtFWVdPUkRfTElTVC4KKyAgIFRoZSBy ZXN1bHQgaXMgdGhlIGluZGV4IG9mIHRoZSBrZXl3b3JkIGluIHRoZSBsaXN0 IG9yIC0xIGlmIG5vdCBmb3VuZC4gICovCisKK3N0YXRpYyBpbnQKK2xvb2t1 cF9rZXl3b3JkIChjb25zdCBjaGFyICogY29uc3QgKiBrZXl3b3JkX2xpc3Qs IFNDTSBrZXl3b3JkKQoreworICByZXR1cm4gLTE7IC8vVE9ETworfQorCisv KiBVdGlsaXR5IHRvIHBhcnNlIHJlcXVpcmVkLCBvcHRpb25hbCwgYW5kIGtl eXdvcmQgYXJndW1lbnRzIHRvIFNjaGVtZQorICAgZnVuY3Rpb25zLiAgTW9k ZWxsZWQgb24gUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzLCBidXQgbm8g YXR0ZW1wdCBpcyBtYWRlCisgICBhdCBzaW1pbGFyaXR5IG9yIGZ1bmN0aW9u YWxpdHkuCisgICBUaGVyZSBpcyBubyByZXN1bHQsIGlmIHRoZXJlJ3MgYW4g ZXJyb3IgYSBTY2hlbWUgZXhjZXB0aW9uIGlzIHRocm93bi4KKworICAgS0VZ V09SRFMgbWF5IGJlIE5VTEwgaWYgdGhlcmUgYXJlIG5vIGtleXdvcmRzLgor CisgICBGT1JNQVQ6CisgICBzIC0gc3RyaW5nIC0+IGNoYXIgKiwgbWFsbG9j J2QKKyAgIHQgLSBib29sZWFuIChnZGIgdXNlcyAidCIsIGZvciBiaVQ/KSAt PiBpbnQKKyAgIGwgLSBsb25nCisgICB8IC0gaW5kaWNhdGVzIHRoZSBuZXh0 IHNldCBpcyBmb3Igb3B0aW9uYWwgYXJndW1lbnRzCisgICAjIC0gaW5kaWNh dGVzIHRoZSBuZXh0IHNldCBpcyBmb3Iga2V5d29yZCBhcmd1bWVudHMgKG11 c3QgZm9sbG93IHwpCisgICAuIC0gaW5kaWNhdGVzICJyZXN0IiBhcmd1bWVu dHMgYXJlIHByZXNlbnQsIHRoaXMgY2hhcmFjdGVyIG11c3QgYXBwZWFyIGxh c3QKKworICAgRk9STUFUIG11c3QgbWF0Y2ggdGhlIGRlZmluaXRpb24gZnJv bSBzY21fY197bWFrZSxkZWZpbmV9X2dzdWJyLgorICAgUmVxdWlyZWQgYW5k IG9wdGlvbmFsIGFyZ3VtZW50cyBhcHBlYXIgaW4gb3JkZXIgaW4gdGhlIGZv cm1hdCBzdHJpbmcuCisgICBBZnRlcndhcmRzLCBrZXl3b3JkLWJhc2VkIGFy Z3VtZW50cyBhcmUgcHJvY2Vzc2VkLiAgVGhlcmUgbXVzdCBiZSBhcyBtYW55 CisgICByZW1haW5pbmcgY2hhcmFjdGVycyBpbiB0aGUgZm9ybWF0IHN0cmlu ZyBhcyB0aGVpciBhcmUga2V5d29yZHMuCisgICBFeGNlcHQgZm9yICJ8Iy4i LCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gdGhlIGZvcm1hdCBzdHJp bmcgbXVzdCBtYXRjaAorICAgI3JlcXVpcmVkICsgI29wdGlvbmFsICsgI2tl eXdvcmRzLgorCisgICBUaGUgZnVuY3Rpb24gaXMgcmVxdWlyZWQgdG8gYmUg ZGVmaW5lZCBpbiBhIGNvbXBhdGlibGUgbWFubmVyOgorICAgI3JlcXVpcmVk LWFyZ3MgYW5kICNvcHRpb25hbC1hcmd1bWVudHMgbXVzdCBtYXRjaCwgYW5k IHJlc3QtYXJndW1lbnRzCisgICBtdXN0IGJlIHNwZWNpZmllZCBpZiBrZXl3 b3JkIGFyZ3MgYXJlIGRlc2lyZWQsIGFuZC9vciByZWd1bGFyICJyZXN0IiBh cmdzLgorCisgICBFeGFtcGxlOiAgRm9yIHRoaXMgZnVuY3Rpb24sCisgICBz Y21fY19kZWZpbmVfZ3N1YnIgKCJleGVjdXRlIiwgMiwgMywgMSwgZm9vKTsK KyAgIHRoZSBmb3JtYXQgc3RyaW5nICsga2V5d29yZCBsaXN0IGNvdWxkIGJl IGFueSBvZjoKKyAgIDEpICJzc3x0dHQjdHQiLCB7ICJrZXkxIiwgImtleTIi LCBOVUxMIH0KKyAgIDIpICJzc3x0dHQuIiwgeyBOVUxMIH0KKyAgIDMpICJz c3x0dHQjdC4iLCB7ICJrZXkxIiwgTlVMTCB9CisKKyAgIEZvciByZXF1aXJl ZCBhbmQgb3B0aW9uYWwgYXJncyBwYXNzIHRoZSBTQ00gb2YgdGhlIGFyZ3Vt ZW50LCBhbmQgYQorICAgcG9pbnRlciB0byB0aGUgdmFsdWUgdG8gaG9sZCB0 aGUgcGFyc2VkIHJlc3VsdCAodHlwZSBkZXBlbmRzIG9uIGZvcm1hdAorICAg Y2hhcikuICBBZnRlciB0aGF0IHBhc3MgdGhlIFNDTSBjb250YWluaW5nIHRo ZSAicmVzdCIgYXJndW1lbnRzIGZvbGxvd2VkCisgICBieSBwb2ludGVycyB0 byB2YWx1ZXMgdG8gaG9sZCBwYXJzZWQga2V5d29yZCBhcmd1bWVudHMsIGFu ZCBpZiBzcGVjaWZpZWQKKyAgIGEgcG9pbnRlciB0byBob2xkIHRoZSByZW1h aW5pbmcgY29udGVudHMgb2YgInJlc3QiLgorCisgICBJZiBib3RoIGtleXdv cmQgYW5kIHJlc3QgYXJndW1lbnRzIGFyZSBwcmVzZW50LCB0aGUgY2FsbGVy IG11c3QgcGFzcyBhCisgICBwb2ludGVyIHRvIGNvbnRhaW4gdGhlIG5ldyB2 YWx1ZSBvZiByZXN0IChhZnRlciBrZXl3b3JkIGFyZ3MgaGF2ZSBiZWVuCisg ICByZW1vdmVkKS4KKworICAgVGhlcmUncyBjdXJyZW50bHkgbm8gd2F5LCB0 aGF0IEkga25vdyBvZiwgdG8gc3BlY2lmeSBkZWZhdWx0IHZhbHVlcyBmb3IK KyAgIG9wdGlvbmFsIGFyZ3VtZW50cyBpbiBDLXByb3ZpZGVkIGZ1bmN0aW9u cy4gIEF0IHRoZSBtb21lbnQgdGhleSdyZSBhCisgICB3b3JrLWluLXByb2dy ZXNzLiAgVGhlIGNhbGxlciBzaG91bGQgdGVzdCBTQ01fVU5CTkRQIGZvciBl YWNoIG9wdGlvbmFsCisgICBhcmd1bWVudC4gIFVuYm91bmQgb3B0aW9uYWwg YXJndW1lbnRzIGFyZSBpZ25vcmVkLiAgKi8KKwordm9pZAorZ2Ric2NtX3Bh cnNlX2Z1bmN0aW9uX2FyZ3MgKGNvbnN0IGNoYXIgKmZ1bmN0aW9uX25hbWUs CisJCQkgICAgY29uc3QgY2hhciAqIGNvbnN0ICprZXl3b3JkcywKKwkJCSAg ICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdz OworICBjb25zdCBjaGFyICpwOworICBpbnQgaSwgaGF2ZV9yZXN0LCBudW1f a2V5d29yZHMsIGxlbmd0aCwgcG9zaXRpb247CisgIGludCBoYXZlX29wdGlv bmFsID0gMDsKKyAgU0NNIHJlc3QgPSBTQ01fRU9MOworCisgIGhhdmVfcmVz dCA9IHZhbGlkYXRlX2FyZ19mb3JtYXQgKGZvcm1hdCk7CisgIG51bV9rZXl3 b3JkcyA9IGNvdW50X2tleXdvcmRzIChrZXl3b3Jkcyk7CisKKyAgdmFfc3Rh cnQgKGFyZ3MsIGZvcm1hdCk7CisKKyAgcCA9IGZvcm1hdDsKKyAgcG9zaXRp b24gPSAwOworCisgIC8qIFByb2Nlc3MgcmVxdWlyZWQsIG9wdGlvbmFsIGFy Z3VtZW50cy4gICovCisKKyAgd2hpbGUgKCpwICYmICpwICE9ICcjJyAmJiAq cCAhPSAnLicpCisgICAgeworICAgICAgU0NNIGFyZzsKKyAgICAgIHZvaWQg KmFyZ3B0cjsKKworICAgICAgaWYgKCpwID09ICd8JykKKwl7CisJICBoYXZl X29wdGlvbmFsID0gMTsKKwkgICsrcDsKKwkgIGNvbnRpbnVlOworCX0KKwor ICAgICAgYXJnID0gdmFfYXJnIChhcmdzLCBTQ00pOworICAgICAgaWYgKCFo YXZlX29wdGlvbmFsIHx8ICFTQ01fVU5CTkRQIChhcmcpKQorCXsKKwkgIGFy Z3B0ciA9IHZhX2FyZyAoYXJncywgdm9pZCAqKTsKKwkgIGV4dHJhY3RfYXJn ICgqcCwgYXJnLCBhcmdwdHIsIGZ1bmN0aW9uX25hbWUsIHBvc2l0aW9uKTsK Kwl9CisgICAgICArK3A7CisgICAgICArK3Bvc2l0aW9uOworICAgIH0KKwor ICAvKiBQcm9jZXNzIGtleXdvcmQgYXJndW1lbnRzLiAgKi8KKworICBpZiAo aGF2ZV9yZXN0IHx8IG51bV9rZXl3b3JkcyA+IDApCisgICAgcmVzdCA9IHZh X2FyZyAoYXJncywgU0NNKTsKKworICBpZiAobnVtX2tleXdvcmRzID4gMCkK KyAgICB7CisgICAgICBTQ00gKmtleXdvcmRfYXJncyA9IChTQ00gKikgYWxs b2NhIChudW1fa2V5d29yZHMgKiBzaXplb2YgKFNDTSkpOworICAgICAgaW50 ICprZXl3b3JkX3Bvc2l0aW9ucyA9IChpbnQgKikgYWxsb2NhIChudW1fa2V5 d29yZHMgKiBzaXplb2YgKGludCkpOworCisgICAgICBnZGJfYXNzZXJ0ICgq cCA9PSAnIycpOworICAgICAgKytwOworCisgICAgICBmb3IgKGkgPSAwOyBp IDwgbnVtX2tleXdvcmRzOyArK2kpCisJeworCSAga2V5d29yZF9hcmdzW2ld ID0gU0NNX1VOU1BFQ0lGSUVEOworCSAga2V5d29yZF9wb3NpdGlvbnNbaV0g PSAtMTsKKwl9CisKKyAgICAgIHdoaWxlIChzY21faXNfcGFpciAocmVzdCkK KwkgICAgICYmIHNjbV9pc19rZXl3b3JkIChzY21fY2FyIChyZXN0KSkpCisJ eworCSAgU0NNIGtleXdvcmQgPSBzY21fY2FyIChyZXN0KTsKKworCSAgaSA9 IGxvb2t1cF9rZXl3b3JkIChrZXl3b3Jkcywga2V5d29yZCk7CisJICBpZiAo aSA8IDApCisJICAgIHNjbV9taXNjX2Vycm9yIChmdW5jdGlvbl9uYW1lLCAi dW5yZWNvZ25pemVkIGtleXdvcmQiLCBrZXl3b3JkKTsKKwkgIGlmICghc2Nt X2lzX3BhaXIgKHNjbV9jZHIgKHJlc3QpKSkKKwkgICAgeworCSAgICAgIHNj bV9taXNjX2Vycm9yIChmdW5jdGlvbl9uYW1lLAorCQkJICAgICAgIm1pc3Np bmcgdmFsdWUgZm9yIGtleXdvcmQgYXJndW1lbnQiLAorCQkJICAgICAga2V5 d29yZCk7CisJICAgIH0KKwkgIGtleXdvcmRfYXJnc1tpXSA9IHNjbV9jYWRy IChyZXN0KTsKKwkgIGtleXdvcmRfcG9zaXRpb25zW2ldID0gcG9zaXRpb24g KyAxOworCSAgcmVzdCA9IHNjbV9jZGRyIChyZXN0KTsKKwkgIHBvc2l0aW9u ICs9IDI7CisJfQorCisgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2tleXdv cmRzOyArK2kpCisJeworCSAgdm9pZCAqYXJncHRyID0gdmFfYXJnIChhcmdz LCB2b2lkICopOworCSAgU0NNIGFyZyA9IGtleXdvcmRfYXJnc1tpXTsKKwor CSAgLyogTWF5YmUgbm90IGtvc2hlci4gICovCisJICBpZiAoISBzY21faXNf ZXEgKGFyZywgU0NNX1VOU1BFQ0lGSUVEKSkKKwkgICAgeworCSAgICAgIGV4 dHJhY3RfYXJnIChwW2ldLCBhcmcsIGFyZ3B0ciwgZnVuY3Rpb25fbmFtZSwK KwkJCSAgIGtleXdvcmRfcG9zaXRpb25zW2ldKTsKKwkgICAgfQorCX0KKyAg ICB9CisKKyAgLyogUHJvY2VzcyAicmVzdCIgYXJndW1lbnRzLiAgKi8KKwor ICBpZiAoaGF2ZV9yZXN0KQorICAgIHsKKyAgICAgIGlmIChudW1fa2V5d29y ZHMgPiAwKQorCXsKKwkgIFNDTSAqcmVzdF9wdHIgPSB2YV9hcmcgKGFyZ3Ms IFNDTSAqKTsKKworCSAgKnJlc3RfcHRyID0gcmVzdDsKKwl9CisgICAgfQor ICBlbHNlCisgICAgeworICAgICAgaWYgKCEgc2NtX2lzX251bGwgKHJlc3Qp KQorCXsKKwkgIC8qIEZJWE1FOiBQZXJoYXBzIHRoaXMgc2hvdWxkIGNhbGwg c2NtX3dyb25nX251bV9hcmdzLiAgKi8KKwkgIHNjbV9taXNjX2Vycm9yIChm dW5jdGlvbl9uYW1lLCAidG9vIG1hbnkgYXJndW1lbnRzIiwgcmVzdCk7CisJ fQorICAgIH0KKworICB2YV9lbmQgKGFyZ3MpOworfQorCisvKiBDb252ZXJ0 IGEgQyAodXRmOCkgc3RyaW5nIHRvIGFuIFNDTSBzdHJpbmcuICAqLworCitT Q00KK2dkYnNjbV9jX3RvX3NjbV9zdHJpbmcgKGNvbnN0IGNoYXIgKnN0cmlu ZykKK3sKKyAgcmV0dXJuIHNjbV9mcm9tX3V0Zjhfc3RyaW5nIChzdHJpbmcp OworfQorCisvKiBDb252ZXJ0IGFuIFNDTSBzdHJpbmcgdG8gYSBDICh1dGY4 KSBzdHJpbmcuCisgICBTcGFjZSBmb3IgdGhlIHJlc3VsdCBpcyBhbGxvY2F0 ZWQgd2l0aCBtYWxsb2MsIGNhbGxlciBtdXN0IGZyZWUuICAqLworCitjaGFy ICoKK2dkYnNjbV9zY21fdG9fY19zdHJpbmcgKFNDTSBzdHJpbmcpCit7Cisg IC8qIFRPRE86IGRlYWwgd2l0aCBndWlsZSBtZW1vcnkgb2YgaW50ZXJtZWRp YXRlIHJlc3VsdCAqLworICAvKiBUT0RPOiBjaGFyc2V0cyAqLworICByZXR1 cm4geHN0cmR1cCAoc2NtX3RvX3V0Zjhfc3RyaW5nIChzdHJpbmcpKTsKK30K KworLyogUmV0dXJuIGFuIFNDTSBzeW1ib2wgZm9yIFNUUklORy4gICovCisK K1NDTQorZ2Ric2NtX2Nfc3RyaW5nX3RvX3N5bWJvbCAoY29uc3QgY2hhciAq c3ltYm9sKQoreworICByZXR1cm4gc2NtX2Zyb21fdXRmOF9zeW1ib2wgKHN5 bWJvbCk7Cit9CisKKy8qIEZJWE1FOndpcCAqLworCitjaGFyICoKK2dkYnNj bV9zY21fdG9faG9zdF9zdHJpbmcgKFNDTSBzdHJpbmcpCit7CisgIHJldHVy biBnZGJzY21fc2NtX3RvX2Nfc3RyaW5nIChzdHJpbmcpOworfQorCisvKiBG SVhNRTp3aXAgKi8KKworU0NNCitnZGJzY21fc2NtX3N0cmluZ190b190YXJn ZXRfc2NtX3N0cmluZyAoU0NNIHN0cmluZykKK3sKKyAgcmV0dXJuIHN0cmlu ZzsKK30KKworLyogUmVzdWx0IGlzIHN0b3JlZCBpbiBhIG1hbGxvYydkIGJ1 ZmZlci4gICovCisvL0ZJWE1FOndpcAorCitjaGFyICoKK2dkYnNjbV9zY21f c3RyaW5nX3RvX3RhcmdldF9jX3N0cmluZyAoU0NNIHN0cmluZywgc2l6ZV90 ICpsZW5ndGgsCisJCQkJICAgICAgU0NNICpleGNlcHRpb24pCit7CisgIGNo YXIgKnJlc3VsdCA9IHNjbV90b191dGY4X3N0cmluZ24gKHN0cmluZywgbGVu Z3RoKTsKKworICAqZXhjZXB0aW9uID0gU0NNX0JPT0xfRjsKKyAgcmV0dXJu IHJlc3VsdDsKK30KKworaW50CitnZGJzY21faXNfcHJvY2VkdXJlIChTQ00g cHJvYykKK3sKKyAgcmV0dXJuIGdkYnNjbV9pc190cnVlIChzY21fcHJvY2Vk dXJlX3AgKHByb2MpKTsKK30KZGlmZiAtcnBOIC1VIDIgc2NoZW1lPS9zY20t dmFsdWUuYyBzY2hlbWUvc2NtLXZhbHVlLmMKLS0tIHNjaGVtZT0vc2NtLXZh bHVlLmMJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKKysr IHNjaGVtZS9zY20tdmFsdWUuYwkyMDEzLTA5LTA2IDA3OjUzOjU0Ljg4NDk3 Njc1MSAtMDcwMApAQCAtMCwwICsxLDIzNyBAQAorLyogZ2RiL3NjaGVtZSBp bnRlcmZhY2UgdG8gdmFsdWVzLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMTMg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmls ZSBpcyBwYXJ0IG9mIEdEQi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBM aWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAg SWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAg Ki8KKworI2luY2x1ZGUgImRlZnMuaCIKKyNpbmNsdWRlICJnZGJfYXNzZXJ0 LmgiCisjaW5jbHVkZSAic3ltdGFiLmgiIC8qIE5lZWRlZCBieSBsYW5ndWFn ZS5oLiAgKi8KKyNpbmNsdWRlICJsYW5ndWFnZS5oIgorI2luY2x1ZGUgInZh bHVlLmgiCisjaW5jbHVkZSAidmFscHJpbnQuaCIKKyNpbmNsdWRlICJzY2hl bWUtaW50ZXJuYWwuaCIKKworLyogU01PQiB0byBleHBvc2UgYSBnZGIgdmFs dWUgdG8gU2NoZW1lLiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX3ZhbHVlX3Nt b2IKK3sKKyAgLyogVGhpcyBhbHdheXMgYXBwZWFycyBmaXJzdC4gICovCisg IGdkYl9zbW9iIGJhc2U7CisKKyAgc3RydWN0IF92YWx1ZV9zbW9iICpuZXh0 OworICBzdHJ1Y3QgX3ZhbHVlX3Ntb2IgKnByZXY7CisgIHN0cnVjdCB2YWx1 ZSAqdmFsdWU7Cit9IHZhbHVlX3Ntb2I7CisKK3N0YXRpYyBjb25zdCBjaGFy IHZhbHVlX3Ntb2JfbmFtZVtdID0gImdkYjp2YWx1ZSI7CisKKy8qIFRoZSB0 YWcgR3VpbGUga25vd3MgdGhlIHZhbHVlIHNtb2IgYnkuICAqLworc3RhdGlj IHNjbV90X2JpdHMgdmFsdWVfc21vYl90YWc7CisKKy8qIExpc3Qgb2YgYWxs IHZhbHVlcyB3aGljaCBhcmUgY3VycmVudGx5IGV4cG9zZWQgdG8gU2NoZW1l LiBJdCBpcworICAgbWFpbnRhaW5lZCBzbyB0aGF0IHdoZW4gYW4gb2JqZmls ZSBpcyBkaXNjYXJkZWQsIHByZXNlcnZlX3ZhbHVlcworICAgY2FuIGNvcHkg dGhlIHZhbHVlcycgdHlwZXMgaWYgbmVlZGVkLiAgKi8KK3N0YXRpYyB2YWx1 ZV9zbW9iICp2YWx1ZXNfaW5fc2NoZW1lOworCisvKiBJdGVyYXRlIG92ZXIg YWxsIHRoZSBWYWx1ZSBvYmplY3RzLCBjYWxsaW5nIHByZXNlcnZlX29uZV92 YWx1ZSBvbiBlYWNoLgorICAgVGhpcyBpcyB0aGUgc2NyaXB0X2xhbmcucHJl c2VydmVfdmFsdWVzICJtZXRob2QiLiAgKi8KKwordm9pZAorZ2Ric2NtX3By ZXNlcnZlX3ZhbHVlcyAoc3RydWN0IG9iamZpbGUgKm9iamZpbGUsIGh0YWJf dCBjb3BpZWRfdHlwZXMpCit7CisgIHZhbHVlX3Ntb2IgKml0ZXI7CisKKyAg Zm9yIChpdGVyID0gdmFsdWVzX2luX3NjaGVtZTsgaXRlcjsgaXRlciA9IGl0 ZXItPm5leHQpCisgICAgcHJlc2VydmVfb25lX3ZhbHVlIChpdGVyLT52YWx1 ZSwgb2JqZmlsZSwgY29waWVkX3R5cGVzKTsKK30KKworLyogSGVscGVyIHRv IGFkZCBhIHZhbHVlX3Ntb2IgdG8gdGhlIGdsb2JhbCBsaXN0LiAgKi8KKwor c3RhdGljIHZvaWQKK3JlbWVtYmVyX3NjaGVtZV92YWx1ZSAodmFsdWVfc21v YiAqdl9zbW9iKQoreworICB2X3Ntb2ItPm5leHQgPSB2YWx1ZXNfaW5fc2No ZW1lOworICBpZiAodl9zbW9iLT5uZXh0KQorICAgIHZfc21vYi0+bmV4dC0+ cHJldiA9IHZfc21vYjsKKyAgdl9zbW9iLT5wcmV2ID0gTlVMTDsKKyAgdmFs dWVzX2luX3NjaGVtZSA9IHZfc21vYjsKK30KKworLyogSGVscGVyIHRvIHJl bW92ZSBhIHZhbHVlX3Ntb2IgZnJvbSB0aGUgZ2xvYmFsIGxpc3QuICAqLwor CitzdGF0aWMgdm9pZAorZm9yZ2V0X3ZhbHVlX3Ntb2IgKHZhbHVlX3Ntb2Ig KnZfc21vYikKK3sKKyAgLyogUmVtb3ZlIFNFTEYgZnJvbSB0aGUgZ2xvYmFs IGxpc3QuICAqLworICBpZiAodl9zbW9iLT5wcmV2KQorICAgIHZfc21vYi0+ cHJldi0+bmV4dCA9IHZfc21vYi0+bmV4dDsKKyAgZWxzZQorICAgIHsKKyAg ICAgIGdkYl9hc3NlcnQgKHZhbHVlc19pbl9zY2hlbWUgPT0gdl9zbW9iKTsK KyAgICAgIHZhbHVlc19pbl9zY2hlbWUgPSB2X3Ntb2ItPm5leHQ7CisgICAg fQorICBpZiAodl9zbW9iLT5uZXh0KQorICAgIHZfc21vYi0+bmV4dC0+cHJl diA9IHZfc21vYi0+cHJldjsKK30KKworc3RhdGljIFNDTQorbWFya192YWx1 ZV9zbW9iIChTQ00gc2VsZikKK3sKKyAgdmFsdWVfc21vYiAqdl9zbW9iID0g KHZhbHVlX3Ntb2IgKikgU0NNX1NNT0JfREFUQSAoc2VsZik7CisKKyAgLyog RG8gdGhpcyBsYXN0LiAgKi8KKyAgcmV0dXJuIGdkYnNjbV9tYXJrX2dzbW9i ICgmdl9zbW9iLT5iYXNlKTsKK30KKworc3RhdGljIHNpemVfdAorZnJlZV92 YWx1ZV9zbW9iIChTQ00gc2VsZikKK3sKKyAgdmFsdWVfc21vYiAqdl9zbW9i ID0gKHZhbHVlX3Ntb2IgKikgU0NNX1NNT0JfREFUQSAoc2VsZik7CisKKyAg Zm9yZ2V0X3ZhbHVlX3Ntb2IgKHZfc21vYik7CisgIHZhbHVlX2ZyZWUgKHZf c21vYi0+dmFsdWUpOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50 CitwcmludF92YWx1ZV9zbW9iIChTQ00gc2VsZiwgU0NNIHBvcnQsIHNjbV9w cmludF9zdGF0ZSAqcHN0YXRlKQoreworICB2YWx1ZV9zbW9iICp2X3Ntb2Ig PSAodmFsdWVfc21vYiAqKSBTQ01fU01PQl9EQVRBIChzZWxmKTsKKyAgY2hh ciAqcyA9IE5VTEw7CisgIHN0cnVjdCB2YWx1ZV9wcmludF9vcHRpb25zIG9w dHM7CisgIHZvbGF0aWxlIHN0cnVjdCBnZGJfZXhjZXB0aW9uIGV4Y2VwdDsK KworICBnZGJzY21fcHJpbnRmIChwb3J0LCAiIzwlcyAiLCB2YWx1ZV9zbW9i X25hbWUpOworCisgIGdldF91c2VyX3ByaW50X29wdGlvbnMgKCZvcHRzKTsK KyAgb3B0cy5kZXJlZl9yZWYgPSAwOworCisgIFRSWV9DQVRDSCAoZXhjZXB0 LCBSRVRVUk5fTUFTS19BTEwpCisgICAgeworICAgICAgc3RydWN0IHVpX2Zp bGUgKnN0YiA9IG1lbV9maWxlb3BlbiAoKTsKKyAgICAgIHN0cnVjdCBjbGVh bnVwICpvbGRfY2hhaW4gPSBtYWtlX2NsZWFudXBfdWlfZmlsZV9kZWxldGUg KHN0Yik7CisKKyAgICAgIGNvbW1vbl92YWxfcHJpbnQgKHZfc21vYi0+dmFs dWUsIHN0YiwgMCwgJm9wdHMsIGN1cnJlbnRfbGFuZ3VhZ2UpOworICAgICAg cyA9IHVpX2ZpbGVfeHN0cmR1cCAoc3RiLCBOVUxMKTsKKworICAgICAgZG9f Y2xlYW51cHMgKG9sZF9jaGFpbik7CisgICAgfQorICBHREJfU0NNX0hBTkRM RV9FWENFUFRJT04gKGV4Y2VwdCk7CisKKyAgaWYgKHMgIT0gTlVMTCkKKyAg ICB7CisgICAgICBzY21fcHV0cyAocywgcG9ydCk7CisgICAgICB4ZnJlZSAo cyk7CisgICAgfQorCisgIC8vIFRPRE86IFdoZW4gdG8gZGlzcGxheSBhdHRy aWJ1dGVzPworCisgIHNjbV9wdXRzICgiPiIsIHBvcnQpOworCisgIHNjbV9y ZW1lbWJlcl91cHRvX2hlcmVfMSAoc2VsZik7CisKKyAgLyogTm9uLXplcm8g bWVhbnMgc3VjY2Vzcy4gICovCisgIHJldHVybiAxOworfQorCitzdGF0aWMg U0NNCittYWtlX3ZhbHVlX3Ntb2IgKHN0cnVjdCB2YWx1ZSAqdmFsKQorewor ICB2YWx1ZV9zbW9iICp2X3Ntb2IgPSAodmFsdWVfc21vYiAqKQorICAgIHNj bV9nY19tYWxsb2MgKHNpemVvZiAodmFsdWVfc21vYiksIHZhbHVlX3Ntb2Jf bmFtZSk7CisgIFNDTSBzbW9iOworCisgIHZfc21vYi0+dmFsdWUgPSB2YWw7 CisgIC8qIFRoaXMgZmlsbHMgaW4gbmV4dCxwcmV2LiAgKi8KKyAgcmVtZW1i ZXJfc2NoZW1lX3ZhbHVlICh2X3Ntb2IpOworICBzbW9iID0gc2NtX25ld19z bW9iICh2YWx1ZV9zbW9iX3RhZywgKHNjbV90X2JpdHMpIHZfc21vYik7Cisg IGdkYnNjbV9pbml0X2dzbW9iIChzbW9iLCAmdl9zbW9iLT5iYXNlLCB2YWx1 ZV9zbW9iX25hbWUpOworCisgIHJldHVybiBzbW9iOworfQorCisvKiBSZXR1 cm5zIGFuIG9iamVjdCBmb3IgYSB2YWx1ZSB3aGljaCBpcyByZWxlYXNlZCBm cm9tIHRoZSBhbGxfdmFsdWVzIGNoYWluLAorICAgc28gaXRzIGxpZmV0aW1l IGlzIG5vdCBib3VuZCB0byB0aGUgZXhlY3V0aW9uIG9mIGEgY29tbWFuZC4g ICovCisKK1NDTQorZ2Ric2NtX3ZhbHVlX3RvX3ZhbHVlX29iamVjdCAoc3Ry dWN0IHZhbHVlICp2YWwpCit7CisgIHJldHVybiBtYWtlX3ZhbHVlX3Ntb2Ig KHZhbCk7Cit9CisKK2ludAorZ2Ric2NtX2lzX3ZhbHVlIChTQ00gc2NtKQor eworICBpZiAoU0NNX0lNUCAoc2NtKSkKKyAgICByZXR1cm4gMDsKKyAgcmV0 dXJuIFNDTV9UWVAxNiAoc2NtKSA9PSB2YWx1ZV9zbW9iX3RhZzsKK30KKwor c3RhdGljIFNDTQordmFsdWVfcCAoU0NNIHNjbSkKK3sKKyAgcmV0dXJuIHNj bV9mcm9tX2Jvb2wgKGdkYnNjbV9pc192YWx1ZSAoc2NtKSk7Cit9CisMCisv KiBQYXJzZSBhIHN0cmluZyBhbmQgZXZhbHVhdGUgaXQgYXMgYW4gZXhwcmVz c2lvbi4gICovCisKK3N0YXRpYyBTQ00KK3BhcnNlX2FuZF9ldmFsX2Zyb21f c2NoZW1lIChTQ00gZXhwcl9zY20pCit7CisgIGNvbnN0IGNoYXIgKmV4cHJf c3RyOworICBzdHJ1Y3QgdmFsdWUgKnJlc3VsdCA9IE5VTEw7CisgIHZvbGF0 aWxlIHN0cnVjdCBnZGJfZXhjZXB0aW9uIGV4Y2VwdDsKKworICBnZGJzY21f cGFyc2VfZnVuY3Rpb25fYXJncyAoRlVOQ19OQU1FLCBOVUxMLCAicyIsIGV4 cHJfc2NtLCAmZXhwcl9zdHIpOworCisgIFRSWV9DQVRDSCAoZXhjZXB0LCBS RVRVUk5fTUFTS19BTEwpCisgICAgeworICAgICAgcmVzdWx0ID0gcGFyc2Vf YW5kX2V2YWwgKGV4cHJfc3RyKTsKKyAgICB9CisgIEdEQl9TQ01fSEFORExF X0VYQ0VQVElPTiAoZXhjZXB0KTsKKworICByZXR1cm4gZ2Ric2NtX3ZhbHVl X3RvX3ZhbHVlX29iamVjdCAocmVzdWx0KTsKK30KKwwKKy8qIEluaXRpYWxp emUgdGhlIFNjaGVtZSBicmVha3BvaW50IGNvZGUuICAqLworCitzdGF0aWMg Y29uc3Qgc2NoZW1lX3ZhcmlhYmxlIHZhbHVlX3ZhcmlhYmxlc1tdID0KK3sK KyAgeyAiKmluaXQtdmFsdWUqIiwgU0NNX0JPT0xfRiB9LAorICB7IE5VTEws IFNDTV9CT09MX0YgfQorfTsKKworc3RhdGljIGNvbnN0IHNjaGVtZV9mdW5j dGlvbiB2YWx1ZV9mdW5jdGlvbnNbXSA9Cit7CisgIHsgInZhbHVlPyIsIDEs IDAsIDAsIHZhbHVlX3AgfSwKKyAgeyAicGFyc2UtYW5kLWV2YWwiLCAxLCAw LCAwLCBwYXJzZV9hbmRfZXZhbF9mcm9tX3NjaGVtZSB9LAorICB7IE5VTEws IDAsIDAsIDAsIE5VTEwgfQorfTsKKwordm9pZAorZ2Ric2NtX2luaXRpYWxp emVfdmFsdWVzICh2b2lkKQoreworICB2YWx1ZV9zbW9iX3RhZyA9IGdkYnNj bV9tYWtlX3Ntb2JfdHlwZSAodmFsdWVfc21vYl9uYW1lLAorCQkJCQkgIHNp emVvZiAodmFsdWVfc21vYikpOworICBzY21fc2V0X3Ntb2JfbWFyayAodmFs dWVfc21vYl90YWcsIG1hcmtfdmFsdWVfc21vYik7CisgIHNjbV9zZXRfc21v Yl9mcmVlICh2YWx1ZV9zbW9iX3RhZywgZnJlZV92YWx1ZV9zbW9iKTsKKyAg c2NtX3NldF9zbW9iX3ByaW50ICh2YWx1ZV9zbW9iX3RhZywgcHJpbnRfdmFs dWVfc21vYik7CisKKyAgZ2Ric2NtX2RlZmluZV92YXJpYWJsZXMgKHZhbHVl X3ZhcmlhYmxlcywgMSk7CisgIGdkYnNjbV9kZWZpbmVfZnVuY3Rpb25zICh2 YWx1ZV9mdW5jdGlvbnMsIDEpOworfQo= --001a11c239d2ab951104e5b8c816--