From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30363 invoked by alias); 28 Jan 2014 11:19:45 -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 30351 invoked by uid 89); 28 Jan 2014 11:19:44 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,KAM_STOCKGEN,RCVD_IN_DNSWL_LOW,RP_MATCHES_RCVD,SPF_PASS autolearn=no version=3.3.2 X-HELO: mail-ee0-f50.google.com Received: from mail-ee0-f50.google.com (HELO mail-ee0-f50.google.com) (74.125.83.50) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Tue, 28 Jan 2014 11:19:36 +0000 Received: by mail-ee0-f50.google.com with SMTP id d17so151988eek.37 for ; Tue, 28 Jan 2014 03:19:32 -0800 (PST) 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=3n5iBW340ifTv/3Bp2lC/vgXUtf3btxk5A4SwnbWeBA=; b=dGG4iIYXMxMVbCOjbV1EdJxGMfG1C3lEjfWTAiaFPqlMZkxLNHJBX94+tkim9R0QTx XNxIYxfDx5vwRgE6T+aOhArsUaW7lRxTAUZ0EjJDeyfTFP3PAgPoNkb6tCdgKpYhzvfc Whjf6ujrbJj9G44JYutUdAR1g5VRrfUXT9ZxYg2cNKgxKT91A4ryjYAxBWLgtcX3BpFD /r0Rt5YB7CBEmf6pRT78gUrsU/WvhqTdsLAleDfiWnBbXX0daCEFMSsHw3HaW//TxeCE zv6r2RExzjSPHrL2lEpZhqGei9J/1SVMiaV3DlZsp0frt99/CCO4Edtz5LhxbIUuO3pv 0L5w== X-Gm-Message-State: ALoCoQmytIa/GbflUOmIhEPDHnOxDNy0QxL/v2jKsc8iIHoYzF88Rkd6Wg5HZ7D6EvmT+2szG95+ipAxwPxlu9kYNH1zl8+D6sWXnYaqe3V+J44b192N7pWav1/jcpnAhwqqEGrExc7PrTBd8DJkD2AvpRWLdfRfHeAnfkiy6IAqF/6s4k8B5s7XdRdzBTQNIJieKc6GwqDCnlv5fkyiQRAxp6cNvzKLQg== MIME-Version: 1.0 X-Received: by 10.15.25.67 with SMTP id k43mr1245700eeu.48.1390907972236; Tue, 28 Jan 2014 03:19:32 -0800 (PST) Received: by 10.14.80.138 with HTTP; Tue, 28 Jan 2014 03:19:31 -0800 (PST) Date: Tue, 28 Jan 2014 11:19:00 -0000 Message-ID: Subject: [Patch v8] Debug methods using GDB Python From: Siva Chandra To: gdb-patches Content-Type: multipart/mixed; boundary=089e01681a0e99e8d804f105ffbc X-IsSubscribed: yes X-SW-Source: 2014-01/txt/msg00991.txt.bz2 --089e01681a0e99e8d804f105ffbc Content-Type: text/plain; charset=UTF-8 Content-length: 2852 Hi, Attached is the latest version of the patch which adds the debug methods feature to the GDB Python API. Changes from v7: 1. I have cleaned up all formatting issues that I could identify. Given that the patch is fairly large, I will not be surprised if I missed some. 2. Fixed a memory leak. I still do not have doc changes included in the patch. Would be good to get feedback on the code changes while I am working on the doc changes. v7 posting for reference: https://sourceware.org/ml/gdb-patches/2014-01/msg00882.html 2014-01-28 Siva Chandra Reddy * Makefile.in: Add entries for new files. * data-directory/Makefile.in: Add entries for new Python files. * eval.c (evaluate_subexp_standard): Lookup and invoke methods defined in extension languages. * valarith.c (value_x_binop, value_x_unop): Lookup and invoke overloaded operator methods defined in extension languages. * valops.c (find_oload_method_list, find_method_list, find_overload_match, find_oload_champ): Lookup methods defined in extension languages. (value_has_indirect_dynamic_type): New function to determine the indirect dynamic type of a value. * value.h (find_overload_match): Update signature. * ext-function.c: New file. * ext-function.h: New file. * python/py-debugmethods.c: New file. * python/py-objfile.c (objfile_object): New field 'debugmethod_matchers'. (objfpy_dealloc): XDECREF on the new debugmethod_matcherss field. (objfpy_new, objfile_to_objfile_object): Initialize debugmethod_macthers field. (objfpy_get_debugmethod_matchers): New function. (objfile_getset): New entry 'debugmethod_matchers'. * python/py-progspace.c (pspace_object): New field 'debugmethod_matchers'. (pspy_dealloc): XDECREF on the new debugmethod_matchers field. (pspy_new, pspace_to_pspace_object): Initialize debugmethod_matchers field. (pspy_get_debugmethod_matchers): New function. (pspace_getset): New entry 'debug_methods'. * python/python-internal.h: Add declarations for new functions. * python/python.c (_initialize_python): Invoke gdbpy_initialize_debugmethods. * python/python.h: Add declarations of new functions. * python/lib/gdb/__init__.py (debug_methods): New attribute. * python/lib/gdb/debugmethods.py: New file. * python/lib/gdb/command/debugmethods.py: New file. testuite/ * gdb.python/py-debugmethods.cc: New testcase to test debug methods. * gdb.python/py-debugmethods.exp: New tests to test debug methods. * gdb.python/py-debugmethods.py: Python script supporting the new testcase and tests. --089e01681a0e99e8d804f105ffbc Content-Type: text/plain; charset=US-ASCII; name="dm_patch_v8.txt" Content-Disposition: attachment; filename="dm_patch_v8.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hqz2enni0 Content-length: 138743 ZGlmZiAtLWdpdCBhL2dkYi9NYWtlZmlsZS5pbiBiL2dkYi9NYWtlZmlsZS5p bgppbmRleCBlZDg0ZTM1Li45MDA2ZGZhIDEwMDY0NAotLS0gYS9nZGIvTWFr ZWZpbGUuaW4KKysrIGIvZ2RiL01ha2VmaWxlLmluCkBAIC0yOTIsNiArMjky LDcgQEAgU1VCRElSX1BZVEhPTl9PQlMgPSBcCiAJcHktYnJlYWtwb2ludC5v IFwKIAlweS1jbWQubyBcCiAJcHktY29udGludWVldmVudC5vIFwKKwlweS1k ZWJ1Z21ldGhvZHMubyBcCiAJcHktZXZlbnQubyBcCiAJcHktZXZ0cmVnaXN0 cnkubyBcCiAJcHktZXZ0cy5vIFwKQEAgLTMyOCw2ICszMjksNyBAQCBTVUJE SVJfUFlUSE9OX1NSQ1MgPSBcCiAJcHl0aG9uL3B5LWJyZWFrcG9pbnQuYyBc CiAJcHl0aG9uL3B5LWNtZC5jIFwKIAlweXRob24vcHktY29udGludWVldmVu dC5jIFwKKwlweXRob24vcHktZGVidWdtZXRob2RzLmMgXAogCXB5dGhvbi9w eS1ldmVudC5jIFwKIAlweXRob24vcHktZXZ0cmVnaXN0cnkuYyBcCiAJcHl0 aG9uL3B5LWV2dHMuYyBcCkBAIC03MzksNyArNzQxLDcgQEAgU0ZJTEVTID0g YWRhLWV4cC55IGFkYS1sYW5nLmMgYWRhLXR5cGVwcmludC5jIGFkYS12YWxw cmludC5jIGFkYS10YXNrcy5jIFwKIAlkd2FyZjJleHByLmMgZHdhcmYybG9j LmMgZHdhcmYycmVhZC5jIGR3YXJmMi1mcmFtZS5jIFwKIAlkd2FyZjItZnJh bWUtdGFpbGNhbGwuYyBcCiAJZWxmcmVhZC5jIGVudmlyb24uYyBldmFsLmMg ZXZlbnQtbG9vcC5jIGV2ZW50LXRvcC5jIFwKLQlleGNlcHRpb25zLmMgZXhw cHJpbnQuYyBcCisJZXhjZXB0aW9ucy5jIGV4cHByaW50LmMgZXh0LWZ1bmN0 aW9uLmMgXAogCWYtZXhwLnkgZi1sYW5nLmMgZi10eXBlcHJpbnQuYyBmLXZh bHByaW50LmMgZmlsZXN5c3RlbS5jIFwKIAlmaW5kY21kLmMgZmluZHZhci5j IGZyYW1lLmMgZnJhbWUtYmFzZS5jIGZyYW1lLXVud2luZC5jIFwKIAlnZGJh cmNoLmMgYXJjaC11dGlscy5jIGdkYl9iZmQuYyBnZGJfb2JzdGFjay5jIFwK QEAgLTg0MSw3ICs4NDMsNyBAQCByczYwMDAtdGRlcC5oIHJzNjAwMC1haXgt dGRlcC5oIFwKIGNvbW1vbi9nZGJfbG9jYWxlLmggYXJjaC11dGlscy5oIHRy YWQtZnJhbWUuaCBnbnUtbmF0LmggXAogbGFuZ3VhZ2UuaCBuYnNkLXRkZXAu aCBzb2xpYi1zdnI0LmggXAogbWFjcm9leHAuaCB1aS1maWxlLmggcmVnY2Fj aGUuaCB0cmFjZXBvaW50LmggaTM4Ni10ZGVwLmggXAotaW5mLWNoaWxkLmgg cC1sYW5nLmggZXZlbnQtdG9wLmggZ2RidHlwZXMuaCB1c2VyLXJlZ3MuaCBc CitpbmYtY2hpbGQuaCBwLWxhbmcuaCBldmVudC10b3AuaCBleHQtZnVuY3Rp b24uaCBnZGJ0eXBlcy5oIHVzZXItcmVncy5oIFwKIHJlZ2Zvcm1hdHMvcmVn ZGVmLmggY29uZmlnL2FscGhhL25tLW9zZjMuaCAgY29uZmlnL2kzODYvbm0t aTM4NmdudS5oIFwKIGNvbmZpZy9pMzg2L25tLWZic2QuaCBcCiBjb25maWcv bm0tbnRvLmggY29uZmlnL3NwYXJjL25tLXNvbDIuaCBjb25maWcvbm0tbGlu dXguaCBcCkBAIC05NjQsNyArOTY2LDggQEAgQ09NTU9OX09CUyA9ICQoREVQ RklMRVMpICQoQ09ORklHX09CUykgJChZWU9CSikgXAogCWluZmVyaW9yLm8g b3NkYXRhLm8gZ2RiX3VzbGVlcC5vIHJlY29yZC5vIHJlY29yZC1mdWxsLm8g Z2NvcmUubyBcCiAJZ2RiX3ZlY3MubyBqaXQubyBwcm9nc3BhY2UubyBza2lw Lm8gcHJvYmUubyBcCiAJY29tbW9uLXV0aWxzLm8gYnVmZmVyLm8gcHRpZC5v IGdkYi1kbGZjbi5vIGNvbW1vbi1hZ2VudC5vIFwKLQlmb3JtYXQubyByZWdp c3RyeS5vIGJ0cmFjZS5vIHJlY29yZC1idHJhY2UubyB3YWl0c3RhdHVzLm8K Kwlmb3JtYXQubyByZWdpc3RyeS5vIGJ0cmFjZS5vIHJlY29yZC1idHJhY2Uu byB3YWl0c3RhdHVzLm8gXAorCWV4dC1mdW5jdGlvbi5vCiAKIFRTT0JTID0g aW5mbG93Lm8KIApAQCAtMjIxNiw2ICsyMjE5LDEwIEBAIHB5LWNvbnRpbnVl ZXZlbnQubzogJChzcmNkaXIpL3B5dGhvbi9weS1jb250aW51ZWV2ZW50LmMK IAkkKENPTVBJTEUpICQoUFlUSE9OX0NGTEFHUykgJChzcmNkaXIpL3B5dGhv bi9weS1jb250aW51ZWV2ZW50LmMKIAkkKFBPU1RDT01QSUxFKQogCitweS1k ZWJ1Z21ldGhvZHMubzogJChzcmNkaXIpL3B5dGhvbi9weS1kZWJ1Z21ldGhv ZHMuYworCSQoQ09NUElMRSkgJChQWVRIT05fQ0ZMQUdTKSAkKHNyY2Rpcikv cHl0aG9uL3B5LWRlYnVnbWV0aG9kcy5jCisJJChQT1NUQ09NUElMRSkKKwog cHktZXZlbnQubzogJChzcmNkaXIpL3B5dGhvbi9weS1ldmVudC5jCiAJJChD T01QSUxFKSAkKFBZVEhPTl9DRkxBR1MpICQoc3JjZGlyKS9weXRob24vcHkt ZXZlbnQuYwogCSQoUE9TVENPTVBJTEUpCmRpZmYgLS1naXQgYS9nZGIvZGF0 YS1kaXJlY3RvcnkvTWFrZWZpbGUuaW4gYi9nZGIvZGF0YS1kaXJlY3Rvcnkv TWFrZWZpbGUuaW4KaW5kZXggMjlhNDhlNC4uOTcyODU0YSAxMDA2NDQKLS0t IGEvZ2RiL2RhdGEtZGlyZWN0b3J5L01ha2VmaWxlLmluCisrKyBiL2dkYi9k YXRhLWRpcmVjdG9yeS9NYWtlZmlsZS5pbgpAQCAtNjIsOCArNjIsMTAgQEAg UFlUSE9OX0ZJTEVTID0gXAogCWdkYi90eXBlcy5weSBcCiAJZ2RiL3ByaW50 aW5nLnB5IFwKIAlnZGIvcHJvbXB0LnB5IFwKKwlnZGIvZGVidWdtZXRob2Rz LnB5IFwKIAlnZGIvY29tbWFuZC9ib3VuZF9yZWdpc3RlcnMucHkgXAogCWdk Yi9jb21tYW5kL19faW5pdF9fLnB5IFwKKwlnZGIvY29tbWFuZC9kZWJ1Z21l dGhvZHMucHkgXAogCWdkYi9jb21tYW5kL2ZyYW1lX2ZpbHRlcnMucHkgXAog CWdkYi9jb21tYW5kL3R5cGVfcHJpbnRlcnMucHkgXAogCWdkYi9jb21tYW5k L3ByZXR0eV9wcmludGVycy5weSBcCmRpZmYgLS1naXQgYS9nZGIvZXZhbC5j IGIvZ2RiL2V2YWwuYwppbmRleCA5NDlmNzZjLi5iOTFmZmEwIDEwMDY0NAot LS0gYS9nZGIvZXZhbC5jCisrKyBiL2dkYi9ldmFsLmMKQEAgLTIyLDYgKzIy LDcgQEAKICNpbmNsdWRlICJzeW10YWIuaCIKICNpbmNsdWRlICJnZGJ0eXBl cy5oIgogI2luY2x1ZGUgInZhbHVlLmgiCisjaW5jbHVkZSAiZXh0LWZ1bmN0 aW9uLmgiCiAjaW5jbHVkZSAiZXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgInRh cmdldC5oIgogI2luY2x1ZGUgImZyYW1lLmgiCkBAIC0xNTkyLDExICsxNTkz LDExIEBAIGV2YWx1YXRlX3N1YmV4cF9zdGFuZGFyZCAoc3RydWN0IHR5cGUg KmV4cGVjdF90eXBlLAogICAgICAgICAgIGZ1bmNfbmFtZSA9IChjaGFyICop IGFsbG9jYSAobmFtZV9sZW4gKyAxKTsKICAgICAgICAgICBzdHJjcHkgKGZ1 bmNfbmFtZSwgJmV4cC0+ZWx0c1tzdHJpbmdfcGMgKyAxXS5zdHJpbmcpOwog Ci0gICAgICAgICAgZmluZF9vdmVybG9hZF9tYXRjaCAoJmFyZ3ZlY1sxXSwg bmFyZ3MsIGZ1bmNfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBOT05fTUVUSE9ELCAvKiBub3QgbWV0aG9kICovCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgLyogcGFzcyBOVUxM IHN5bWJvbCBzaW5jZQorCSAgZmluZF9vdmVybG9hZF9tYXRjaCAoJmFyZ3Zl Y1sxXSwgbmFyZ3MsIGZ1bmNfbmFtZSwKKwkJCSAgICAgICBOT05fTUVUSE9E LCAvKiBub3QgbWV0aG9kICovCisJCQkgICAgICAgTlVMTCwgTlVMTCwgLyog cGFzcyBOVUxMIHN5bWJvbCBzaW5jZQogCQkJCQkgICAgICBzeW1ib2wgaXMg dW5rbm93biAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V TEwsICZzeW1wLCBOVUxMLCAwKTsKKwkJCSAgICAgICBOVUxMLCAmc3ltcCwg TlVMTCwgTlVMTCwgMCk7CiAKICAgICAgICAgICAvKiBOb3cgZml4IHRoZSBl eHByZXNzaW9uIGJlaW5nIGV2YWx1YXRlZC4gICovCiAgICAgICAgICAgZXhw LT5lbHRzW3NhdmVfcG9zMSArIDJdLnN5bWJvbCA9IHN5bXA7CkBAIC0xNjI2 LDExICsxNjI3LDEyIEBAIGV2YWx1YXRlX3N1YmV4cF9zdGFuZGFyZCAoc3Ry dWN0IHR5cGUgKmV4cGVjdF90eXBlLAogCSAgICAgIC8qIExhbmd1YWdlIGlz IEMrKywgZG8gc29tZSBvdmVybG9hZCByZXNvbHV0aW9uIGJlZm9yZQogCQkg ZXZhbHVhdGlvbi4gICovCiAJICAgICAgc3RydWN0IHZhbHVlICp2YWxwID0g TlVMTDsKKwkgICAgICBzdHJ1Y3QgZXh0X2ZuX2Rlc2NyaXB0b3IgKmV4dF9m bnAgPSBOVUxMOwogCiAJICAgICAgKHZvaWQpIGZpbmRfb3ZlcmxvYWRfbWF0 Y2ggKCZhcmd2ZWNbMV0sIG5hcmdzLCB0c3RyLAotCSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBNRVRIT0QsIC8qIG1ldGhvZCAqLworCQkJ CQkgIE1FVEhPRCwgLyogbWV0aG9kICovCiAJCQkJCSAgJmFyZzIsICAvKiB0 aGUgb2JqZWN0ICovCi0JCQkJCSAgTlVMTCwgJnZhbHAsIE5VTEwsCisJCQkJ CSAgTlVMTCwgJnZhbHAsIE5VTEwsICZleHRfZm5wLAogCQkJCQkgICZzdGF0 aWNfbWVtZnVuY3AsIDApOwogCiAJICAgICAgaWYgKG9wID09IE9QX1NDT1BF ICYmICFzdGF0aWNfbWVtZnVuY3ApCkBAIC0xNjQwLDkgKzE2NDIsMzggQEAg ZXZhbHVhdGVfc3ViZXhwX3N0YW5kYXJkIChzdHJ1Y3QgdHlwZSAqZXhwZWN0 X3R5cGUsCiAJCQkgICAiYHRoaXMnIHBvaW50ZXIiKSwKIAkJCSBmdW5jdGlv bl9uYW1lKTsKIAkJfQotCSAgICAgIGFyZ3ZlY1sxXSA9IGFyZzI7CS8qIHRo ZSBgYHRoaXMnJyBwb2ludGVyICovCi0JICAgICAgYXJndmVjWzBdID0gdmFs cDsJLyogVXNlIHRoZSBtZXRob2QgZm91bmQgYWZ0ZXIgb3ZlcmxvYWQKLQkJ CQkgICByZXNvbHV0aW9uLiAgKi8KKworCSAgICAgIC8qIElmIGEgbWV0aG9k IGltcGxlbWVudGVkIGluIGFuIGV4dGVuc2lvbiBsYW5ndWFnZSBpcyB0aGUg YmVzdAorCQkgbWF0Y2gsIHRoZW4gaW52b2tlIGl0LiAgKi8KKwkgICAgICBp ZiAoZXh0X2ZucCkKKwkJeworCQkgIGlmIChleHRfZm5faXNfbWV0aG9kIChl eHRfZm5wKSkKKwkJICAgIHsKKwkJICAgICAgc3RydWN0IHZhbHVlICpyZXRf dmFsOworCisJCSAgICAgIHJldF92YWwgPSBleHRfZm5faW52b2tlX21ldGhv ZCAoZXh0X2ZucCwgYXJnMiwgYXJndmVjICsgMiwKKwkJCQkJCSAgICAgIG5h cmdzIC0gMSk7CisJCSAgICAgIGlmIChyZXRfdmFsID09IE5VTEwpCisJCQll cnJvciAoXygiRXJyb3IgaW52b2tpbmcgZGVidWcgbWV0aG9kIGZvciBtZXRo b2QgJXMuIiksCisJCQkgICAgICAgdHN0cik7CisKKwkJICAgICAgeGZyZWUg KGV4dF9mbnApOworCisJCSAgICAgIHJldHVybiByZXRfdmFsOworCQkgICAg fQorCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgLyogVGhpcyBlbHNlIHNo b3VsZCBub3QgYmUgdGFrZW4gYXMgb25seSBkZWJ1ZyBtZXRob2RzCisJCQkg YXJlIHN1cHBvcnRlZCBjdXJyZW50bHkuICAqLworCQkgICAgICBpbnRlcm5h bF9lcnJvciAoX19GSUxFX18sIF9fTElORV9fLAorCQkJCSAgICAgIF8oIklu dm9raW5nIGFuIGV4dGVuc2lvbiBsYW5ndWFnZSAiCisJCQkJCSJmdW5jdGlv biAobm90IGEgbWV0aG9kKS4iKSk7CisJCSAgICB9CisJCX0KKworCSAgICAg IGFyZ3ZlY1sxXSA9IGFyZzI7ICAgICAvKiB0aGUgYGB0aGlzJycgcG9pbnRl ciAqLworCSAgICAgIGFyZ3ZlY1swXSA9IHZhbHA7ICAgICAvKiBVc2UgdGhl IG1ldGhvZCBmb3VuZCBhZnRlciBvdmVybG9hZAorCQkJCSAgICAgICByZXNv bHV0aW9uLiAgKi8KIAkgICAgfQogCSAgZWxzZQogCSAgICAvKiBOb24tQysr IGNhc2UgLS0gb3Igbm8gb3ZlcmxvYWQgcmVzb2x1dGlvbi4gICovCkBAIC0x Njk5LDkgKzE3MzAsOSBAQCBldmFsdWF0ZV9zdWJleHBfc3RhbmRhcmQgKHN0 cnVjdCB0eXBlICpleHBlY3RfdHlwZSwKIAogCSAgICAgICh2b2lkKSBmaW5k X292ZXJsb2FkX21hdGNoICgmYXJndmVjWzFdLCBuYXJncywKIAkJCQkJICBO VUxMLCAgICAgICAgLyogbm8gbmVlZCBmb3IgbmFtZSAqLwotCSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBOT05fTUVUSE9ELCAgLyogbm90 IG1ldGhvZCAqLwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBOVUxMLCBmdW5jdGlvbiwgLyogdGhlIGZ1bmN0aW9uICovCi0JCQkJCSAg TlVMTCwgJnN5bXAsIE5VTEwsIG5vX2FkbCk7CisJCQkJCSAgTk9OX01FVEhP RCwgIC8qIG5vdCBtZXRob2QgKi8KKwkJCQkJICBOVUxMLCBmdW5jdGlvbiwg LyogdGhlIGZ1bmN0aW9uICovCisJCQkJCSAgTlVMTCwgJnN5bXAsIE5VTEws IE5VTEwsIG5vX2FkbCk7CiAKIAkgICAgICBpZiAob3AgPT0gT1BfVkFSX1ZB TFVFKQogCQl7CmRpZmYgLS1naXQgYS9nZGIvZXh0LWZ1bmN0aW9uLmMgYi9n ZGIvZXh0LWZ1bmN0aW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uMmRiNWI0ZAotLS0gL2Rldi9udWxsCisrKyBiL2dkYi9leHQt ZnVuY3Rpb24uYwpAQCAtMCwwICsxLDE3NCBAQAorLyogU3VwcG9ydCBmb3Ig ZnVuY3Rpb25zIGRlZmluZWQgaW4gZXh0ZW5zaW9uIGxhbmd1YWdlcy4KKwor ICAgQ29weXJpZ2h0IChDKSAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAg IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlICJkZWZzLmgi CisjaW5jbHVkZSAiY2xlYW51cHMuaCIKKyNpbmNsdWRlICJleHQtZnVuY3Rp b24uaCIKKworI2luY2x1ZGUgImdkYl9hc3NlcnQuaCIKKyNpbmNsdWRlICJ2 ZWMuaCIKKworc3RydWN0IGV4dF9mbl9kZXNjcmlwdG9yCisgIHsKKyAgICBj b25zdCBzdHJ1Y3QgZXh0X2Z1bmNfb3BzICpsYW5nOworCisgICAgaW50IGlz X21ldGhvZDsKKworICAgIHZvaWQgKmV4dF9vYmplY3Q7CisgIH07CisKK3R5 cGVkZWYgc3RydWN0IGV4dF9mdW5jX29wcyAqZXh0X2xhbmdfcDsKK0RFRl9W RUNfUCAoZXh0X2xhbmdfcCk7CitzdGF0aWMgVkVDIChleHRfbGFuZ19wKSAq ZXh0X2xhbmdfdmVjID0gTlVMTDsKKworLyogUmVnaXN0ZXJzIGFuIGV4dGVu c2lvbiBsYW5ndWFnZSB3aXRoIEdEQi4gICovCisKK3ZvaWQKK3JlZ2lzdGVy X2V4dF9sYW5nIChzdHJ1Y3QgZXh0X2Z1bmNfb3BzICpsYW5nKQoreworICBp ZiAoZXh0X2xhbmdfdmVjID09IE5VTEwpCisgICAgZXh0X2xhbmdfdmVjID0g VkVDX2FsbG9jIChleHRfbGFuZ19wLCAxKTsKKyAgICAgIAorICBWRUNfc2Fm ZV9wdXNoIChleHRfbGFuZ19wLCBleHRfbGFuZ192ZWMsIGxhbmcpOworfQor CisvKiBSZXR1cm5zIGEgbmV3IGV4dF9mbl9kZXNjcmlwdG9yIG9iamVjdC4g IExBTkcgaXMgdGhlIGV4dGVudGlvbiBsYW5ndWFnZSB0aGUKKyAgIG5ldyBl eHRlbnNpb24gZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgaW4uICBJU19NRVRI T0QgaW5kaWNhdGVzIHdoZXRoZXIgdGhlCisgICBuZXcgZXh0ZW5zaW9uIGZ1 bmN0aW9uIGlzIGEgbWV0aG9kLiAgRVhUX09CSiBpcyB0aGUgZXh0ZW5zaW9u IGxhbmd1YWdlCisgICBzcGVjaWZpYyBkYXRhIHRvIGJlIGVuY2Fwc3VsYXRl ZCBpbiB0aGUgZXh0X2ZuX2Rlc2NyaXB0b3IuICAqLworCitzdHJ1Y3QgZXh0 X2ZuX2Rlc2NyaXB0b3IgKgorbmV3X2V4dF9mdW5jdGlvbiAoY29uc3Qgc3Ry dWN0IGV4dF9mdW5jX29wcyAqbGFuZywgaW50IGlzX21ldGhvZCwgdm9pZCAq ZXh0X29iaikKK3sKKyAgc3RydWN0IGV4dF9mbl9kZXNjcmlwdG9yICpleHRf Zm4gPSBYQ05FVyAoc3RydWN0IGV4dF9mbl9kZXNjcmlwdG9yKTsKKworICBl eHRfZm4tPmlzX21ldGhvZCA9IGlzX21ldGhvZDsKKyAgZXh0X2ZuLT5sYW5n ID0gbGFuZzsKKyAgZXh0X2ZuLT5leHRfb2JqZWN0ID0gZXh0X29iajsKKwor ICByZXR1cm4gZXh0X2ZuOworfQorCisvKiBDbG9uZXMgRVhUX0ZOIGFuZCBy ZXR1cm5zIGEgbmV3IGJ1dCBpZGVudGljYWwgZXh0X2ZuX2Rlc2NyaXB0b3Iu ICAqLworCitzdHJ1Y3QgZXh0X2ZuX2Rlc2NyaXB0b3IgKgorZXh0X2ZuX2Ns b25lIChzdHJ1Y3QgZXh0X2ZuX2Rlc2NyaXB0b3IgKmV4dF9mbikKK3sKKyAg c3RydWN0IGV4dF9mbl9kZXNjcmlwdG9yICpuZXdfZXh0X2ZuOworICBjb25z dCBzdHJ1Y3QgZXh0X2Z1bmNfb3BzICpsYW5nID0gZXh0X2ZuLT5sYW5nOwor CisgIG5ld19leHRfZm4gPSBuZXdfZXh0X2Z1bmN0aW9uIChsYW5nLCBleHRf Zm4tPmlzX21ldGhvZCwKKwkJCQkgbGFuZy0+Y2xvbmVfZXh0X29iamVjdCAo ZXh0X2ZuLT5leHRfb2JqZWN0KSk7CisKKyAgcmV0dXJuIG5ld19leHRfZm47 Cit9CisKKy8qIElmIGEgbWV0aG9kIG9mIG5hbWUgTUVUSE9EIGlzIHRvIGJl IGludm9rZWQgb24gYW4gb2JqZWN0IG9mIHR5cGUgVFlQRSwgdGhlbgorICAg YWxsIGVudGVuc2lvbiBsYW5ndWFnZXMgYXJlIHNlYXJjaGVkIGZvciBpbXBs ZW1lbnRhdGlvbnMgb2YgbWV0aG9kcyB3aXRoIAorICAgbmFtZSBNRVRIT0Qg aW4gdGhlIGV4dGVuc2lvbiBsYW5ndWFnZXMuICBBbGwgbWF0Y2hlcyBmb3Vu ZCBhcmUgcmV0dXJuZWQgYXMKKyAgIGEgdmVjdG9yICdzdHJ1Y3QgZW50X2Zu X2Rlc2NyaXB0b3InIG9iamVjdHMuICBJZiBubyBtYXRjaGluZyBtZXRob2Rz IGFyZQorICAgZm91bmQsIE5VTEwgaXMgcmV0dXJuZWQuICAqLworCitWRUMg KGV4dF9mbl9kZXNjcmlwdG9yX3ApICoKK2dldF9tYXRjaGluZ19leHRfbWV0 aG9kcyAoc3RydWN0IHR5cGUgKnR5cGUsIGNvbnN0IGNoYXIgKm1ldGhvZCkK K3sKKyAgVkVDIChleHRfZm5fZGVzY3JpcHRvcl9wKSAqZXh0X21ldGhvZHMg PSBOVUxMOworICBleHRfbGFuZ19wIGxhbmc7CisgIGludCBpOworCisgIGZv ciAoaSA9IDA7IFZFQ19pdGVyYXRlIChleHRfbGFuZ19wLCBleHRfbGFuZ192 ZWMsIGksIGxhbmcpOyBpKyspCisgICAgeworICAgICAgVkVDIChleHRfZm5f ZGVzY3JpcHRvcl9wKSAqbGFuZ19tZXRob2RzLCAqbmV3X3ZlYzsKKworICAg ICAgbGFuZ19tZXRob2RzID0gbGFuZy0+Z2V0X21hdGNoaW5nX2V4dF9tZXRo b2RzICh0eXBlLCBtZXRob2QpOworICAgICAgbmV3X3ZlYyA9IFZFQ19tZXJn ZSAoZXh0X2ZuX2Rlc2NyaXB0b3JfcCwgZXh0X21ldGhvZHMsIGxhbmdfbWV0 aG9kcyk7CisKKyAgICAgIFZFQ19mcmVlIChleHRfZm5fZGVzY3JpcHRvcl9w LCBleHRfbWV0aG9kcyk7CisgICAgICBWRUNfZnJlZSAoZXh0X2ZuX2Rlc2Ny aXB0b3JfcCwgbGFuZ19tZXRob2RzKTsKKyAgICAgIGV4dF9tZXRob2RzID0g bmV3X3ZlYzsKKyAgICB9CisKKyAgcmV0dXJuIGV4dF9tZXRob2RzOworfQor CisvKiBHaXZlbiBhbiBmdW5jdGlvbiBFWFRfRk4gaW1wbGVtZW50ZWQgaW4g YW4gZXh0ZW5zaW9uIGxhbmd1YWdlLCByZXR1cm5zIGFuCisgICBhcnJheSBv ZiB0eXBlcyBvZiB0aGUgYXJndW1lbnRzIHRoZSBmdW5jdGlvbiBhY2NlcHRz LiAgVGhlIGxlbmd0aCBvZiB0aGUKKyAgIGFycmF5IGlzIHJldHVybmVkIGlu IE5BUkdTLiAgVGhlIHR5cGUgb2YgdGhlICd0aGlzJyBvYmplY3QgaXMgcmV0 dXJuZWQgYXMKKyAgIHRoZSBmaXJzdCBhcmd1bWVudCBpZiBFWFRfRk4gaXMg YSBtZXRob2QuICBJZiBFWFRfRk4gZG9lcyBub3QgdGFrZSBhbnkKKyAgIGFy Z3VtZW50cywgdGhlbiBOVUxMIGlzIHJldHVybmVkIHdpdGggMCBpbiBOQVJH Uy4gICovCisKK3N0cnVjdCB0eXBlICoqCitleHRfZm5fZ2V0X2FyZ3R5cGVz IChzdHJ1Y3QgZXh0X2ZuX2Rlc2NyaXB0b3IgKmV4dF9mbiwgaW50ICpuYXJn cykKK3sKKyAgZ2RiX2Fzc2VydCAoZXh0X2ZuICYmIGV4dF9mbi0+bGFuZyAm JiBleHRfZm4tPmxhbmctPmdldF9leHRfZm5fYXJndHlwZXMpOworCisgIHJl dHVybiBleHRfZm4tPmxhbmctPmdldF9leHRfZm5fYXJndHlwZXMgKGV4dF9m bi0+ZXh0X29iamVjdCwgbmFyZ3MpOworfQorCisvKiBJZiBFWFRfRk4gaXMg YSBtZXRob2QgaW1wbGVtZW50ZWQgaW4gYW4gZXh0ZW5zaW9uIGxhbmd1YWdl LCBpbnZva2VzICBpdCBhbmQKKyAgIHJldHVybnMgdGhlIHJlc3VsdGluZyB2 YWx1ZS4gIFRoZSBtZXRob2QgaXMgaW52b2tlZCBvbiBPQkogd2l0aCBhcmd1 bWVudHMKKyAgIEFSR1MuICBOQVJHUyBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBB UkdTIGFycmF5LiAgKi8KKworc3RydWN0IHZhbHVlICoKK2V4dF9mbl9pbnZv a2VfbWV0aG9kIChzdHJ1Y3QgZXh0X2ZuX2Rlc2NyaXB0b3IgKmV4dF9mbiwg c3RydWN0IHZhbHVlICpvYmosCisJCSAgICAgIHN0cnVjdCB2YWx1ZSAqKmFy Z3MsIGludCBuYXJncykKK3sKKyAgZ2RiX2Fzc2VydCAoZXh0X2ZuICYmIGV4 dF9mbi0+aXNfbWV0aG9kICYmIGV4dF9mbi0+bGFuZworCSAgICAgICYmIGV4 dF9mbi0+bGFuZy0+aW52b2tlX21ldGhvZCk7CisKKyAgcmV0dXJuIGV4dF9m bi0+bGFuZy0+aW52b2tlX21ldGhvZCAoZXh0X2ZuLT5leHRfb2JqZWN0LCBv YmosIGFyZ3MsIG5hcmdzKTsKK30KKworLyogUmV0dXJucyB0cnVlIGlmIEVY VF9GTiBpcyBhIG1ldGhvZCwgMCBvdGhlcndpc2UuICAqLworCitpbnQKK2V4 dF9mbl9pc19tZXRob2QgKHN0cnVjdCBleHRfZm5fZGVzY3JpcHRvciAqZXh0 X2ZuKQoreworICBpZiAoZXh0X2ZuICE9IE5VTEwpCisgICAgcmV0dXJuIGV4 dF9mbi0+aXNfbWV0aG9kOworCisgIHJldHVybiAwOworfQorCisvKiBGcmVl cyBhIHZlY3RvciBvZiBleHRfZm5fZGVzY3JpcHRvcnMgVkVDLiAgKi8KKwor c3RhdGljIHZvaWQKK2V4dF9mbl92ZWNfZnJlZSAodm9pZCAqdmVjKQorewor ICBpbnQgaTsKKyAgc3RydWN0IGV4dF9mbl9kZXNjcmlwdG9yICpleHRfZm47 CisgIFZFQyAoZXh0X2ZuX2Rlc2NyaXB0b3JfcCkgKnYgPSAoVkVDIChleHRf Zm5fZGVzY3JpcHRvcl9wKSAqKSB2ZWM7CisKKyAgZm9yIChpID0gMDsgVkVD X2l0ZXJhdGUgKGV4dF9mbl9kZXNjcmlwdG9yX3AsIHYsIGksIGV4dF9mbik7 IGkrKykKKyAgICB7CisgICAgICBleHRfZm4tPmxhbmctPmZyZWVfZXh0X29i aiAoZXh0X2ZuLT5leHRfb2JqZWN0KTsKKyAgICAgIHhmcmVlIChleHRfZm4p OworICAgIH0KKworICBWRUNfZnJlZSAoZXh0X2ZuX2Rlc2NyaXB0b3JfcCwg dik7Cit9CisKKy8qIFJldHVybiBhIGNsZWFudXAgb2JqZWN0IHRvIGZyZWUg YSB2ZWN0b3IgVkVDIG9mIGV4dGVuc2lvbiBmdW5jdGlvbgorICAgZGVzY3Jp cHRvcnMuICAqLworCitzdHJ1Y3QgY2xlYW51cCAqCittYWtlX2V4dF9mbl92 ZWNfY2xlYW51cCAoVkVDIChleHRfZm5fZGVzY3JpcHRvcl9wKSAqdmVjKQor eworICByZXR1cm4gbWFrZV9jbGVhbnVwIChleHRfZm5fdmVjX2ZyZWUsICh2 b2lkICopIHZlYyk7Cit9CmRpZmYgLS1naXQgYS9nZGIvZXh0LWZ1bmN0aW9u LmggYi9nZGIvZXh0LWZ1bmN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uZTg1ODRhYgotLS0gL2Rldi9udWxsCisrKyBiL2dk Yi9leHQtZnVuY3Rpb24uaApAQCAtMCwwICsxLDc1IEBACisvKiBTdXBwb3J0 IGZvciBmdW5jdGlvbnMgZGVmaW5lZCBpbiBleHRlbnNpb24gbGFuZ3VhZ2Vz LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4K KworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmICFkZWZpbmVk IChFWFRfRlVOQ1RJT05fSCkKKyNkZWZpbmUgRVhUX0ZVTkNUSU9OX0gKKwor I2luY2x1ZGUgInZlYy5oIgorCitzdHJ1Y3QgY2xlYW51cDsKK3N0cnVjdCB2 YWx1ZTsKK3N0cnVjdCB0eXBlOworc3RydWN0IGV4dF9mbl9kZXNjcmlwdG9y OworCit0eXBlZGVmIHN0cnVjdCBleHRfZm5fZGVzY3JpcHRvciAqZXh0X2Zu X2Rlc2NyaXB0b3JfcDsKK0RFRl9WRUNfUCAoZXh0X2ZuX2Rlc2NyaXB0b3Jf cCk7Cit0eXBlZGVmIFZFQyAoZXh0X2ZuX2Rlc2NyaXB0b3JfcCkgZXh0X2Zu X3ZlYzsKKwordHlwZWRlZiBzdHJ1Y3QgdmFsdWUqIChpbnZva2VfbWV0aG9k X2Z0eXBlKSAodm9pZCAqZXh0X29iaiwKKwkJCQkJICAgICBzdHJ1Y3QgdmFs dWUgKiwKKwkJCQkJICAgICBzdHJ1Y3QgdmFsdWUgKiosIGludCBuYXJncyk7 CisKK3R5cGVkZWYgdm9pZCAqIChjbG9uZV9leHRfb2JqX2Z0eXBlKSAodm9p ZCAqZXh0X29iaik7CisKK3R5cGVkZWYgdm9pZCAoZnJlZV9leHRfb2JqX2Z0 eXBlKSAodm9pZCAqZXh0X29iaik7CisKK3R5cGVkZWYgZXh0X2ZuX3ZlYyAq KGdldF9tYXRjaGluZ19leHRfbWV0aG9kc19mdHlwZSkgKHN0cnVjdCB0eXBl ICp0eXBlLAorCQkJCQkJICAgICAgY29uc3QgY2hhciAqbWV0aG9kKTsKKwor dHlwZWRlZiBzdHJ1Y3QgdHlwZSoqIChnZXRfZXh0X2ZuX2FyZ3R5cGVzX2Z0 eXBlKSAodm9pZCAqZXh0X29iaiwgaW50ICpuYXJncyk7CisKK3N0cnVjdCBl eHRfZnVuY19vcHMKKyAgeworICAgIGNsb25lX2V4dF9vYmpfZnR5cGUgKmNs b25lX2V4dF9vYmplY3Q7CisgICAgZnJlZV9leHRfb2JqX2Z0eXBlICpmcmVl X2V4dF9vYmo7CisgICAgZ2V0X21hdGNoaW5nX2V4dF9tZXRob2RzX2Z0eXBl ICpnZXRfbWF0Y2hpbmdfZXh0X21ldGhvZHM7CisgICAgZ2V0X2V4dF9mbl9h cmd0eXBlc19mdHlwZSAqZ2V0X2V4dF9mbl9hcmd0eXBlczsKKyAgICBpbnZv a2VfbWV0aG9kX2Z0eXBlICppbnZva2VfbWV0aG9kOworICB9OworCitleHRl cm4gdm9pZCByZWdpc3Rlcl9leHRfbGFuZyAoc3RydWN0IGV4dF9mdW5jX29w cyAqbGFuZyk7CisKK2V4dGVybiBzdHJ1Y3QgdmFsdWUgKmV4dF9mbl9pbnZv a2VfbWV0aG9kIChzdHJ1Y3QgZXh0X2ZuX2Rlc2NyaXB0b3IgKiwKKwkJCQkJ ICAgc3RydWN0IHZhbHVlICosCisJCQkJCSAgIHN0cnVjdCB2YWx1ZSAqKiwg aW50IG5hcmdzKTsKKworZXh0ZXJuIHN0cnVjdCBleHRfZm5fZGVzY3JpcHRv ciAqZXh0X2ZuX2Nsb25lIChzdHJ1Y3QgZXh0X2ZuX2Rlc2NyaXB0b3IgKik7 CisKK2V4dGVybiBzdHJ1Y3QgZXh0X2ZuX2Rlc2NyaXB0b3IgKm5ld19leHRf ZnVuY3Rpb24gKAorICAgIGNvbnN0IHN0cnVjdCBleHRfZnVuY19vcHMgKmxh bmcsIGludCBpc19tZXRob2QsIHZvaWQgKmV4dF9vYmopOworCitleHRlcm4g ZXh0X2ZuX3ZlYyAqZ2V0X21hdGNoaW5nX2V4dF9tZXRob2RzIChzdHJ1Y3Qg dHlwZSAqLCBjb25zdCBjaGFyICopOworCitleHRlcm4gc3RydWN0IHR5cGUg KipleHRfZm5fZ2V0X2FyZ3R5cGVzIChzdHJ1Y3QgZXh0X2ZuX2Rlc2NyaXB0 b3IgKiwgaW50ICopOworCitleHRlcm4gaW50IGV4dF9mbl9pc19tZXRob2Qg KHN0cnVjdCBleHRfZm5fZGVzY3JpcHRvciAqKTsKKworZXh0ZXJuIHN0cnVj dCBjbGVhbnVwKiBtYWtlX2V4dF9mbl92ZWNfY2xlYW51cCAoVkVDIChleHRf Zm5fZGVzY3JpcHRvcl9wKSAqdmVjKTsKKworI2VuZGlmIC8qIEVYVF9GVU5D VElPTl9IICovCmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL2xpYi9nZGIvX19p bml0X18ucHkgYi9nZGIvcHl0aG9uL2xpYi9nZGIvX19pbml0X18ucHkKaW5k ZXggOTVhNzZjMi4uNzZlMzVkYyAxMDA2NDQKLS0tIGEvZ2RiL3B5dGhvbi9s aWIvZ2RiL19faW5pdF9fLnB5CisrKyBiL2dkYi9weXRob24vbGliL2dkYi9f X2luaXRfXy5weQpAQCAtNjcsNiArNjcsOCBAQCBwcmV0dHlfcHJpbnRlcnMg PSBbXQogCiAjIEluaXRpYWwgdHlwZSBwcmludGVycy4KIHR5cGVfcHJpbnRl cnMgPSBbXQorIyBJbml0aWFsIGRlYnVnX21ldGhvZHMuCitkZWJ1Z21ldGhv ZF9tYXRjaGVycyA9IFtdCiAjIEluaXRpYWwgZnJhbWUgZmlsdGVycy4KIGZy YW1lX2ZpbHRlcnMgPSB7fQogCmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL2xp Yi9nZGIvY29tbWFuZC9kZWJ1Z21ldGhvZHMucHkgYi9nZGIvcHl0aG9uL2xp Yi9nZGIvY29tbWFuZC9kZWJ1Z21ldGhvZHMucHkKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uY2FjNWMwOQotLS0gL2Rldi9udWxsCisr KyBiL2dkYi9weXRob24vbGliL2dkYi9jb21tYW5kL2RlYnVnbWV0aG9kcy5w eQpAQCAtMCwwICsxLDI2MSBAQAorIyBEZWJ1ZyBtZXRob2QgY29tbWFuZHMu CisjIENvcHlyaWdodCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg SW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFs b25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93 d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitpbXBvcnQgZ2RiCitpbXBvcnQg cmUKKworIiIiR0RCIGNvbW1hbmRzIGZvciB3b3JraW5nIHdpdGggZGVidWct bWV0aG9kcy4iIiIKKworCitkZWYgdmFsaWRhdGVfZG1fcmVnZXhwKHBhcnRf bmFtZSwgcmVnZXhwKToKKyAgdHJ5OgorICAgIHJldHVybiByZS5jb21waWxl KHJlZ2V4cCkKKyAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgIHJhaXNlIFN5 bnRheEVycm9yKCJJbnZhbGlkICVzIHJlZ2V4cDogJXMiLCBwYXJ0X25hbWUs IHJlZ2V4cCkKKworCitkZWYgcGFyc2VfZG1fY29tbWFuZF9hcmdzKGFyZyk6 CisgICAgIiIiUGFyc2VzIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIGEgZGVi dWcgbWV0aG9kIGNvbW1hbmQuCisKKyAgICBBcmd1bWVudHM6CisgICAgICAg IGFyZzogVGhlIGFyZ3VtZW50IHN0cmluZyBwYXNzZWQgdG8gYSBkZWJ1ZyBt ZXRob2QgY29tbWFuZC4KKworICAgIFJldHVybnM6CisgICAgICAgIEEgMi10 dXBsZTogKDxsb2N1cyBtYXRjaGluZyByZWd1bGFyIGV4cHJlc3Npb24+LAor ICAgICAgICAgICAgICAgICAgICA8bmFtZSBtYXRjaGluZyByZWd1bGFyIGV4 cHJlc3Npb24+KQorICAgICIiIgorICAgIGFyZ3YgPSBnZGIuc3RyaW5nX3Rv X2FyZ3YoYXJnKQorICAgIGFyZ2MgPSBsZW4oYXJndikKKyAgICBpZiBhcmdj ID4gMjoKKyAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoIlRvbyBtYW55IGFy Z3VtZW50cyB0byBjb21tYW5kLiIpCisgICAgbG9jdXNfcmVnZXhwID0gIiIK KyAgICBtYXRjaGVyX25hbWVfcmVnZXhwID0gIiIKKyAgICBkbV9uYW1lX3Jl Z2V4cCA9IE5vbmUKKyAgICBpZiBhcmdjID49IDE6CisgICAgICAgIGxvY3Vz X3JlZ2V4cCA9IGFyZ3ZbMF0KKyAgICBpZiBhcmdjID09IDI6CisgICAgICAg IHBhcnRzID0gYXJndlsxXS5zcGxpdCgiOyIsIDEpCisgICAgICAgIG1hdGNo ZXJfbmFtZV9yZWdleHAgPSBwYXJ0c1swXQorICAgICAgICBpZiBsZW4ocGFy dHMpID4gMToKKyAgICAgICAgICAgIGRtX25hbWVfcmVnZXhwID0gcGFydHNb MV0KKyAgICBpZiBkbV9uYW1lX3JlZ2V4cDoKKyAgICAgICAgbmFtZV9yZSA9 IHZhbGlkYXRlX2RtX3JlZ2V4cCgiZGVidWdtZXRob2QgbmFtZSIsIGRtX25h bWVfcmVnZXhwKQorICAgIGVsc2U6CisgICAgICAgIG5hbWVfcmUgPSBOb25l CisgICAgcmV0dXJuICh2YWxpZGF0ZV9kbV9yZWdleHAoImxvY3VzIiwgbG9j dXNfcmVnZXhwKSwKKyAgICAgICAgICAgIHZhbGlkYXRlX2RtX3JlZ2V4cCgi bWF0Y2hlciBuYW1lIiwgbWF0Y2hlcl9uYW1lX3JlZ2V4cCksCisgICAgICAg ICAgICBuYW1lX3JlKQorCisKK2RlZiBnZXRfZ2xvYmFsX21ldGhvZF9tYXRj aGVycyhsb2N1c19yZSwgbWF0Y2hlcl9yZSk6CisgICAgIiIiUmV0dXJucyBh IGRpY3Qgb2YgbWF0Y2hpbmcgZ2xvYmFsbHkgcmVnaXN0ZXJlZCBkZWJ1ZyBt ZXRob2RzLgorCisgICAgQXJndW1lbnRzOgorICAgICAgICBsb2N1c19yZTog RXZlbiB0aG91Z2ggb25seSBnbG9iYWxseSByZWdpc3RlcmVkIGRlYnVnIG1l dGhvZHMgYXJlCisgICAgICAgICAgICAgICAgICBsb29rZWQgdXAsIHRoZXkg d2lsbCBiZSBsb29rZWQgdXAgb25seSBpZiAnZ2xvYmFsJyBtYXRjaGVzCisg ICAgICAgICAgICAgICAgICBMT0NVU19SRS4KKyAgICAgICAgbmFtZV9yZTog VGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyB0aGUgbmFtZXMgb2Yg ZGVidWcgbWV0aG9kcy4KKyAgICBSZXR1cm5zOgorICAgICAgICBBIGRpY3Qg b2YgbWF0Y2hpbmcgZ2xvYmFsbHkgcmVnaXN0ZXJlZCBkZWJ1ZyBtZXRob2Rz LiAgVGhlIG9ubHkga2V5IGluCisgICAgICAgIHRoZSBkaWN0IHdpbGwgYmUg J2dsb2JhbCcuCisgICAgIiIiCisgICAgbG9jdXNfc3RyID0gInJlZ2lzdGVy ZWQgZ2xvYmFsbHkiCisgICAgZG1fZGljdCA9IHsgbG9jdXNfc3RyOiBbXSB9 CisgICAgaWYgbG9jdXNfcmUubWF0Y2goImdsb2JhbCIpOgorICAgICAgICBk bV9kaWN0W2xvY3VzX3N0cl0uZXh0ZW5kKAorICAgICAgICAgICAgW20gZm9y IG0gaW4gZ2RiLmRlYnVnbWV0aG9kX21hdGNoZXJzIGlmIG1hdGNoZXJfcmUu bWF0Y2gobS5uYW1lKV0KKyAgICAgICAgKQorICAgIHJldHVybiBkbV9kaWN0 CisKKworZGVmIGdldF9tZXRob2RfbWF0Y2hlcnNfaW5fbG9jaShsb2NpLCBs b2N1c19yZSwgbWF0Y2hlcl9yZSk6CisgICAgIiIiUmV0dXJucyBhIGRpY3Qg b2YgbWFjdGhpbmcgcmVnaXN0ZXJlZCBkZWJ1ZyBtZXRob2RzIGluIHRoZSBM T0NJLgorCisgICAgQXJndW1lbnRzOgorICAgICAgICBsb2NpOiBUaGUgbGlz dCBvZiBsb2NpIHRvIGxvb2t1cCBtYXRjaGluZyBkZWJ1ZyBtZXRob2RzIGlu LgorICAgICAgICBsb2N1c19yZTogRGVidWcgbWV0aG9kcyB3aWxsIGJlIGxv b2tlZCB1cCBpbiBhIHBhcnRpY3VsYXIgbG9jdXMgb25seQorICAgICAgICAg ICAgICAgICAgaWYgaXRzIGZpbGVuYW1lIG1hdGNoZXMgdGhlIHJlZ3VsYXIg ZXhwcmVzc2lvbiBMT0NVU19SRS4KKyAgICAgICAgbmFtZV9yZTogVGhlIHJl Z3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgbmFtZXMgb2YgZGVidWcg bWV0aG9kcy4KKworICAgIFJldHVybnM6CisgICAgICAgIEEgZGljdCBvZiBt YXRjaGluZyBkZWJ1ZyBtZXRob2RzLiAgVGhlIGtleXMgb2YgdGhlIGRpY3Qg YXJlIHRoZQorICAgICAgICBmaWxlbmFtZXMgb2YgdGhlIGxvY2kgdGhlIGRl YnVnIG1ldGhvZHMgYmVsb25nIHRvLgorICAgICIiIgorICAgIGRtX2RpY3Qg PSB7fQorICAgIGZvciBsb2N1cyBpbiBsb2NpOgorICAgICAgICBpZiBub3Qg bG9jdXNfcmUubWF0Y2gobG9jdXMuZmlsZW5hbWUpOgorICAgICAgICAgICAg Y29udGludWUKKyAgICAgICAgbG9jdXNfdHlwZSA9ICJvYmpmaWxlIgorICAg ICAgICBpZiBpc2luc3RhbmNlKGxvY3VzLCBnZGIuUHJvZ3NwYWNlKToKKyAg ICAgICAgICAgIGxvY3VzX3R5cGUgPSAicHJvZ3NwYWNlIgorICAgICAgICBs b2N1c19zdHIgPSAicmVnaXN0ZXJlZCB3aXRoICVzICVzIiAlIChsb2N1c190 eXBlLCBsb2N1cy5maWxlbmFtZSkKKyAgICAgICAgZG1fZGljdFtsb2N1c19z dHJdID0gWworICAgICAgICAgICAgbSBmb3IgbSBpbiBsb2N1cy5kZWJ1Z21l dGhvZF9tYXRjaGVycyBpZiBtYXRjaGVyX3JlLm1hdGNoKG0ubmFtZSkKKyAg ICAgICAgXQorICAgIHJldHVybiBkbV9kaWN0CisKKworZGVmIGdldF9zdGF0 dXMobSk6CisgICAgaWYgbS5lbmFibGVkOgorICAgICAgICByZXR1cm4gImVu YWJsZWQiCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuICJkaXNhYmxlZCIK KworCitkZWYgcHJpbnRfZG1faW5mbyhkbV9kaWN0LCBuYW1lX3JlKToKKyAg ICAiIiJQcmludCBhIGRpY3Rpb25hcnkgb2YgZGVidWcgbWV0aG9kcyB3aXRo IGFuIG9wdGlvbmFsIGhlYWRlci4iIiIKKyAgICBpZiBub3QgZG1fZGljdDoK KyAgICAgICAgcmV0dXJuCisgICAgZm9yIGxvY3VzX3N0ciBpbiBkbV9kaWN0 OgorICAgICAgICBwcmludCAoIkRlYnVnIG1ldGhvZHMgJXM6IiAlIGxvY3Vz X3N0cikKKyAgICAgICAgZm9yIG1hdGNoZXIgaW4gZG1fZGljdFtsb2N1c19z dHJdOgorICAgICAgICAgICAgcHJpbnQgKCIgICVzIC0gJXMiICUgKG1hdGNo ZXIubmFtZSwgZ2V0X3N0YXR1cyhtYXRjaGVyKSkpCisgICAgICAgICAgICBp ZiBub3QgbWF0Y2hlci5tZXRob2RzOgorICAgICAgICAgICAgICAgIGNvbnRp bnVlCisgICAgICAgICAgICBmb3IgbSBpbiBtYXRjaGVyLm1ldGhvZHM6Cisg ICAgICAgICAgICAgICAgaWYgbmFtZV9yZSBpcyBOb25lIG9yIG5hbWVfcmUu bWF0Y2gobS5uYW1lKToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgKCIg ICAgJXMgLSAlcyIgJSAobS5uYW1lLCBnZXRfc3RhdHVzKG0pKSkKKyAgICAg ICAgICAgIAorCitkZWYgc2V0X2RtX3N0YXR1czEoZG1fZGljdCwgbmFtZV9y ZSwgc3RhdHVzKToKKyAgICAiIiJTZXQgdGhlIHN0YXR1cyAoZW5hYmxlZC9k aXNhYmxlZCkgb2YgYSBkaWN0aW9uYXJ5IG9mIGRlYnVnIG1ldGhvZHMuIiIi CisgICAgZm9yIGxvY3VzX3N0ciwgbWF0Y2hlcnMgaW4gZG1fZGljdC5pdGVy aXRlbXMoKToKKyAgICAgICAgaWYgbm90IG1hdGNoZXJzOgorICAgICAgICAg ICAgY29udGludWUKKyAgICAgICAgZm9yIG1hdGNoZXIgaW4gbWF0Y2hlcnM6 CisgICAgICAgICAgICBpZiBub3QgbmFtZV9yZToKKyAgICAgICAgICAgICAg ICBtYXRjaGVyLmVuYWJsZWQgPSBzdGF0dXMKKyAgICAgICAgICAgICAgICBj b250aW51ZQorICAgICAgICAgICAgaWYgbm90IG1hdGNoZXIubWV0aG9kczoK KyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZm9yIG0g aW4gbWF0Y2hlci5tZXRob2RzOgorICAgICAgICAgICAgICAgIGlmIG5hbWVf cmUubWF0Y2gobS5uYW1lKToKKyAgICAgICAgICAgICAgICAgICAgbS5lbmFi bGVkID0gc3RhdHVzCisKKworZGVmIHNldF9kbV9zdGF0dXMoYXJnLCBzdGF0 dXMpOgorICAgICIiIlNldCB0aGUgc3RhdHVzIChlbmFibGVkL2Rpc2FibGVk KSBvZiBkZWJ1ZyBtZXRob2RzIG1hdGNoaW5nIEFSRy4KKyAgICBUaGlzIGlz IGEgaGVscGVyIGZ1bmN0aW9uIGZvciBlbmFibGUvZGlzYWJsZSBjb21tYW5k cy4gIEFSRyBpcyB0aGUKKyAgICBhcmd1bWVudCBzdHJpbmcgcGFzc2VkIHRv IHRoZSBjb21tYW5kcy4KKyAgICAiIiIKKyAgICBsb2N1c19yZSwgbWF0Y2hl cl9yZSwgbmFtZV9yZSA9IHBhcnNlX2RtX2NvbW1hbmRfYXJncyhhcmcpCisg ICAgc2V0X2RtX3N0YXR1czEoZ2V0X2dsb2JhbF9tZXRob2RfbWF0Y2hlcnMo bG9jdXNfcmUsIG1hdGNoZXJfcmUpLCBuYW1lX3JlLAorICAgICAgICAgICAg ICAgICAgIHN0YXR1cykKKyAgICBzZXRfZG1fc3RhdHVzMSgKKyAgICAgICAg Z2V0X21ldGhvZF9tYXRjaGVyc19pbl9sb2NpKGdkYi5wcm9nc3BhY2VzKCks IGxvY3VzX3JlLCBtYXRjaGVyX3JlKSwKKyAgICAgICAgbmFtZV9yZSwKKyAg ICAgICAgc3RhdHVzCisgICAgKQorICAgIHNldF9kbV9zdGF0dXMxKAorICAg ICAgICBnZXRfbWV0aG9kX21hdGNoZXJzX2luX2xvY2koZ2RiLm9iamZpbGVz KCksIGxvY3VzX3JlLCBtYXRjaGVyX3JlKSwKKyAgICAgICAgbmFtZV9yZSwK KyAgICAgICAgc3RhdHVzCisgICAgKQorCisKK2NsYXNzIEluZm9EZWJ1Z01l dGhvZChnZGIuQ29tbWFuZCk6CisgICAgIiIiR0RCIGNvbW1hbmQgdG8gbGlz dCByZWdpc3RlcmVkIGRlYnVnIG1ldGhvZCBtYXRjaGVycy4KKworICAgIFVz YWdlOiBpbmZvIGRlYnVnLW1ldGhvZCBbbG9jdXMtcmVnZXhwIFtuYW1lLXJl Z2V4cF1dCisKKyAgICBMT0NVUy1SRUdFWFAgaXMgYSByZWd1bGFyIGV4cHJl c3Npb24gbWF0Y2hpbmcgdGhlIGxvY2F0aW9uIG9mIHRoZSBkZWJ1ZworICAg IG1ldGhvZCBtYXRjaGVyc3MuICBJZiBpdCBpcyBvbW1pdHRlZCwgYWxsIHJl Z2lzdGVyZWQgZGVidWcgbWV0aG9kcyBmcm9tIGFsbAorICAgIGxvY2kgYXJl IGxpc3RlZC4gIEEgbG9jdXMgY291bGQgYmUgJ2dsb2JhbCcsIGEgcmVndWxh ciBleHByZXNzaW9uIG1hdGNoaW5nCisgICAgZmlsZW5hbWVzIG9mIHByb2dy YW0gc3BhY2VzLCBvciBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyBm aWxlbmFtZXMgb2YKKyAgICBvYmpmaWxlcy4KKworICAgIE5BTUUtUkVHRVhQ IGlzIGEgcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIHRoZSBuYW1lcyBv ZiBkZWJ1ZyBtZXRob2QKKyAgICBtYXRjaGVycy4gIElmIHRoaXMgb21pdHRl ZCBmb3IgYSBzcGVjaWZpZWQgbG9jdXMsIHRoZW4gYWxsIHJlZ2lzdGVyZWQg ZGVidWcKKyAgICBtZXRob2RzIGluIHRoZSBsb2N1cyBhcmUgbGlzdGVkLiAg VG8gbGlzdCBvbmx5IGEgY2VydGFpbiBkZWJ1ZyBtZXRob2RzCisgICAgbWFu YWdlZCBieSBhIHNpbmdsZSBtYXRjaGVyLCB0aGUgbmFtZSByZWdleHAgY2Fu IGJlIHNwZWNpZmllZCBhcworICAgIG1hdGNoZXItbmFtZS1yZWdleHA7ZGVi dWctbWV0aG9kLW5hbWUtcmVnZXhwLgorICAgICIiIgorCisgICAgZGVmIF9f aW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcihJbmZvRGVidWdNZXRob2Qs IHNlbGYpLl9faW5pdF9fKCJpbmZvIGRlYnVnbWV0aG9kIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiLkNP TU1BTkRfREFUQSkKKworICAgIGRlZiBpbnZva2Uoc2VsZiwgYXJnLCBmcm9t X3R0eSk6CisgICAgICAgIGxvY3VzX3JlLCBtYXRjaGVyX3JlLCBuYW1lX3Jl ID0gcGFyc2VfZG1fY29tbWFuZF9hcmdzKGFyZykKKyAgICAgICAgcHJpbnRf ZG1faW5mbyhnZXRfZ2xvYmFsX21ldGhvZF9tYXRjaGVycyhsb2N1c19yZSwg bWF0Y2hlcl9yZSksCisgICAgICAgICAgICAgICAgICAgICAgbmFtZV9yZSkK KyAgICAgICAgcHJpbnRfZG1faW5mbygKKyAgICAgICAgICAgIGdldF9tZXRo b2RfbWF0Y2hlcnNfaW5fbG9jaSgKKyAgICAgICAgICAgICAgICBnZGIucHJv Z3NwYWNlcygpLCBsb2N1c19yZSwgbWF0Y2hlcl9yZSksCisgICAgICAgICAg ICBuYW1lX3JlCisgICAgICAgICkKKyAgICAgICAgcHJpbnRfZG1faW5mbygK KyAgICAgICAgICAgIGdldF9tZXRob2RfbWF0Y2hlcnNfaW5fbG9jaShnZGIu b2JqZmlsZXMoKSwgbG9jdXNfcmUsIG1hdGNoZXJfcmUpLAorICAgICAgICAg ICAgbmFtZV9yZQorICAgICAgICApCisKKworY2xhc3MgRW5hYmxlRGVidWdN ZXRob2QoZ2RiLkNvbW1hbmQpOgorICAgICIiIkdEQiBjb21tYW5kIHRvIGVu YWJsZSBhIHNwZWNpZmllZCAoZ3JvdXAgb2YpIGRlYnVnIG1ldGhvZChzKS4K KworICAgIFVzYWdlOiBlbmFibGUgZGVidWctbWV0aG9kIFtsb2N1cy1yZWdl eHAgW25hbWUtcmVnZXhwXV0KKworICAgIExPQ1VTLVJFR0VYUCBpcyBhIHJl Z3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyB0aGUgbG9jYXRpb24gb2YgdGhl IGRlYnVnCisgICAgbWV0aG9kcy4gIElmIGl0IGlzIG9tbWl0dGVkLCBhbGwg cmVnaXN0ZXJlZCBkZWJ1ZyBtZXRob2RzIGZyb20gYWxsIGxvY2kKKyAgICBh cmUgZW5hYmxlZC4gIEEgbG9jdXMgY291bGQgYmUgJ2dsb2JhbCcsIGEgcmVn dWxhciBleHByZXNzaW9uIG1hdGNoaW5nCisgICAgZmlsZW5hbWVzIG9mIHBy b2dyYW0gc3BhY2VzIG9yIGEgcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5n IGZpbGVuYW1lcyBvZgorICAgIG9iamZpbGVzLgorCisgICAgTkFNRS1SRUdF WFAgaXMgYSByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgdGhlIG5hbWVz IG9mIGRlYnVnIG1ldGhvZHMKKyAgICB3aXRoaW4gYSBnaXZlbiBsb2N1cy4g IElmIHRoaXMgb21pdHRlZCBmb3IgYSBzcGVjaWZpZWQgbG9jdXMsIHRoZW4g YWxsCisgICAgcmVnaXN0ZXJlZCBkZWJ1ZyBtZXRob2RzIGluIHRoZSBsb2N1 cyBhcmUgZW5hYmxlZC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhz ZWxmKToKKyAgICAgICAgc3VwZXIoRW5hYmxlRGVidWdNZXRob2QsIHNlbGYp Ll9faW5pdF9fKCJlbmFibGUgZGVidWdtZXRob2QiLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiLkNPTU1B TkRfREFUQSkKKworICAgIGRlZiBpbnZva2Uoc2VsZiwgYXJnLCBmcm9tX3R0 eSk6CisgICAgICAgIHNldF9kbV9zdGF0dXMoYXJnLCBUcnVlKQorICAgICAg ICAKKworY2xhc3MgRGlzYWJsZURlYnVnTWV0aG9kKGdkYi5Db21tYW5kKToK KyAgICAiIiJHREIgY29tbWFuZCB0byBkaXNhYmxlIGEgc3BlY2lmaWVkIChn cm91cCBvZikgZGVidWcgbWV0aG9kKHMpLgorCisgICAgVXNhZ2U6IGRpc2Fi bGUgZGVidWctbWV0aG9kIFtsb2N1cy1yZWdleHAgW25hbWUtcmVnZXhwXV0K KworICAgIExPQ1VTLVJFR0VYUCBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBt YXRjaGluZyB0aGUgbG9jYXRpb24gb2YgdGhlIGRlYnVnCisgICAgbWV0aG9k cy4gIElmIGl0IGlzIG9tbWl0dGVkLCBhbGwgcmVnaXN0ZXJlZCBkZWJ1ZyBt ZXRob2RzIGZyb20gYWxsIGxvY2kKKyAgICBhcmUgZGlzYWJsZWQuICBBIGxv Y3VzIGNvdWxkIGJlICdnbG9iYWwnLCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBt YXRjaGluZworICAgIGZpbGVuYW1lcyBvZiBwcm9ncmFtIHNwYWNlcyBvciBh IHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyBmaWxlbmFtZXMgb2YKKyAg ICBvYmpmaWxlcy4KKworICAgIE5BTUUtUkVHRVhQIGlzIGEgcmVndWxhciBl eHByZXNzaW9uIG1hdGNoaW5nIHRoZSBuYW1lcyBvZiBkZWJ1ZyBtZXRob2Rz CisgICAgd2l0aGluIGEgZ2l2ZW4gbG9jdXMuICBJZiB0aGlzIG9taXR0ZWQg Zm9yIGEgc3BlY2lmaWVkIGxvY3VzLCB0aGVuIGFsbAorICAgIHJlZ2lzdGVy ZWQgZGVidWcgbWV0aG9kcyBpbiB0aGUgbG9jdXMgYXJlIGRpc2FibGVkLgor ICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBz dXBlcihEaXNhYmxlRGVidWdNZXRob2QsIHNlbGYpLl9faW5pdF9fKCJkaXNh YmxlIGRlYnVnbWV0aG9kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdkYi5DT01NQU5EX0RBVEEpCisKKyAg ICBkZWYgaW52b2tlKHNlbGYsIGFyZywgZnJvbV90dHkpOgorICAgICAgICBz ZXRfZG1fc3RhdHVzKGFyZywgRmFsc2UpCisgICAgICAgIAorCitkZWYgcmVn aXN0ZXJfZGVidWdfbWV0aG9kX2NvbW1hbmRzKCk6CisgICAgIiIiSW5zdGFs bHMgdGhlIGRlYnVnIG1ldGhvZCBjb21tYW5kcy4iIiIKKyAgICBJbmZvRGVi dWdNZXRob2QoKQorICAgIEVuYWJsZURlYnVnTWV0aG9kKCkKKyAgICBEaXNh YmxlRGVidWdNZXRob2QoKQorCisKK3JlZ2lzdGVyX2RlYnVnX21ldGhvZF9j b21tYW5kcygpCmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL2xpYi9nZGIvZGVi dWdtZXRob2RzLnB5IGIvZ2RiL3B5dGhvbi9saWIvZ2RiL2RlYnVnbWV0aG9k cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODA4 OGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3B5dGhvbi9saWIvZ2RiL2Rl YnVnbWV0aG9kcy5weQpAQCAtMCwwICsxLDIzNiBAQAorIyBQeXRob24gc2lk ZSBvZiB0aGUgc3VwcG9ydCBmb3IgZGVidWcgbWV0aG9kcy4KKyMgQ29weXJp Z2h0IChDKSAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgor CisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LgorCisiIiJVdGlsaXRpZXMgZm9yIGRlZmluaW5n IGRlYnVnIG1ldGhvZHMiIiIKKworaW1wb3J0IGdkYgoraW1wb3J0IHJlCitp bXBvcnQgc3lzCisKK2lmIHN5cy52ZXJzaW9uX2luZm9bMF0gPiAyOgorICAg ICMgUHl0aG9uIDMgcmVtb3ZlZCBiYXNlc3RyaW5nIGFuZCBsb25nCisgICAg YmFzZXN0cmluZyA9IHN0cgorICAgIGxvbmcgPSBpbnQKKworY2xhc3MgRGVi dWdNZXRob2Qob2JqZWN0KToKKyAgICAiIiJCYXNlIGNsYXNzIChvciBhIHBy b3RvdHlwZSkgZm9yIGRlYnVnIG1ldGhvZCBkZXNjcmlwdGlvbi4KKworICAg IEN1cnJlbnRseSwgdGhlIGRlc2NyaXB0aW9uIG9ubHkgcmVxdWlyZXMgb25s eSAnbmFtZScgYW5kICdlbmFibGVkJworICAgIGF0dHJpYnV0ZXMuICBEZXNj cmlwdGlvbiBvYmplY3RzIGFyZSBtYW5hZ2VkIGJ5ICdEZWJ1Z01ldGhvZE1h dGNoZXInCisgICAgb2JqZWN0cyAoc2VlIGJlbG93KS4KKworICAgIEF0dHJp YnV0ZXM6CisgICAgICAgIG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBkZWJ1ZyBt ZXRob2QuCisgICAgICAgIGVuYWJsZWQ6IEEgYm9vbGVhbiBpbmRpY2F0aW5n IGlmIHRoZSBkZWJ1ZyBtZXRob2QgaXMgZW5hYmxlZC4KKyAgICAiIiIKKwor ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5u YW1lID0gbmFtZQorICAgICAgICBzZWxmLmVuYWJsZWQgPSBUcnVlCisKKwor Y2xhc3MgRGVidWdNZXRob2RNYXRjaGVyKG9iamVjdCk6CisgICAgIiIiQWJz dHJhY3QgYmFzZSBjbGFzcyBmb3IgbWF0Y2hpbmcgYSBkZWJ1ZyBtZXRob2Qu CisKKyAgICBXaGVuIGxvb2tpbmcgZm9yIGRlYnVnIG1ldGhvZHMsIEdEQiBp bnZva2VzIHRoZSBgbWF0Y2gnIG1ldGhvZCBvZiBhCisgICAgcmVnaXN0ZXJl ZCBkZWJ1ZyBtZXRob2QgbWF0Y2hlciB0byBtYXRjaCB0aGUgb2JqZWN0IHR5 cGUgYW5kIG1ldGhvZCBuYW1lLgorICAgIFRoZSBgbWF0Y2gnIG1ldGhvZCBp biBjb25jcmV0ZSBjbGFzc2VzIGRlcml2ZWQgZnJvbSB0aGlzIGNsYXNzIHNo b3VsZAorICAgIHJldHVybiBhIGBEZWJ1Z01ldGhvZFdvcmtlcicgb2JqZWN0 LCBvciBhIGxpc3Qgb2YgYERlYnVnTWV0aG9kV29ya2VyJworICAgIG9iamVj dHMgaWYgdGhlcmUgaXMgYSBtYXRjaCAoc2VlIGJlbG93IGZvciAnRGVidWdN ZXRob2RXb3JrZXInIGNsYXNzKS4KKworICAgIEF0dHJpYnV0ZXM6CisgICAg ICAgIG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBtYXRjaGVyLgorICAgICAgICBl bmFibGVkOiBBIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgbWF0Y2hlciBp cyBlbmFibGVkLgorICAgICAgICBkZWJ1Z19tZXRob2RzOiBBIHNlcXVlbmNl IG9mIG9iamVjdHMgb2YgdHlwZSAnRGVidWdNZXRob2QnLCBvciBvYmplY3Rz CisgICAgICAgICAgICB3aGljaCBoYXZlIGF0bGVhc3QgdGhlIGF0dHJpYnV0 ZSBvZiBhICdEZWJ1Z01ldGhvZCcgb2JqZWN0LgorICAgICAgICAgICAgVGhp cyBsaXN0IGlzIHVzZWQgYnkgdGhlICdlbmFibGUnLydkaXNhYmxlJy8naW5m bycgY29tbWFuZHMgdG8KKyAgICAgICAgICAgIGVuYWJsZS9kaXNhYmxlL2xp c3QgdGhlIGRlYnVnIG1ldGhvZHMgcmVnaXN0ZXJlZCB3aXRoIEdEQi4gIFNl ZQorICAgICAgICAgICAgdGhlICdtYXRjaCcgbWV0aG9kIGJlbG93IHRvIGtu b3cgaG93IHRoaXMgc2VxdWVuY2UgaXMgdG8gYmUgdXNlZC4KKyAgICAiIiIK KworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgIiIi CisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBuYW1lOiBBbiBpZGVudGlm eWluZyBuYW1lIGZvciB0aGUgZGVidWcgbWV0aG9kIG9yIHRoZSBncm91cCBv ZgorICAgICAgICAgICAgICAgICAgZGVidWcgbWV0aG9kcyByZXR1cm5lZCBi eSB0aGUgYG1hdGNoJyBtZXRob2QuCisgICAgICAgICIiIgorICAgICAgICBz ZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuZW5hYmxlZCA9IFRydWUK KyAgICAgICAgc2VsZi5tZXRob2RzID0gTm9uZQorCisgICAgZGVmIG1hdGNo KHNlbGYsIGNsYXNzX3R5cGUsIG1ldGhvZF9uYW1lKToKKyAgICAgICAgIiIi TWF0Y2ggY2xhc3MgdHlwZSBhbmQgbWV0aG9kIG5hbWUuCisKKyAgICAgICAg SW4gZGVyaXZlZCBjbGFzc2VzLCBpdCBzaG91bGQgcmV0dXJuIGEgRGVidWdN ZXRob2RXb3JrZXIgb2JqZWN0LCBvciBhCisgICAgICAgIHNlcXVlbmNlIG9m ICdEZWJ1Z01ldGhvZFdvcmtlcicgb2JqZWN0cy4gIE9ubHkgdGhvc2UgZGVi dWcgbWV0aG9kCisgICAgICAgIHdvcmtlcnMgd2hvc2UgY29ycmVzcG9uZGlu ZyAnRGVidWdNZXRob2QnIGRlc2NyaXB0b3Igb2JqZWN0IGlzIGVuYWJsZWQK KyAgICAgICAgc2hvdWxkIGJlIHJldHVybmVkLgorCisgICAgICAgIEFyZ3M6 CisgICAgICAgICAgICBjbGFzc190eXBlOiBUaGUgY2xhc3MgdHlwZSAoZ2Ri LlR5cGUgb2JqZWN0KSB0byBtYXRjaC4KKyAgICAgICAgICAgIG1ldGhvZF9u YW1lOiBUaGUgbmFtZSAoc3RyaW5nKSBvZiB0aGUgbWV0aG9kIHRvIG1hdGNo LgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRF cnJvcigiRGVidWdNZXRob2RNYXRjaGVyIG1hdGNoIikKKworCitjbGFzcyBE ZWJ1Z01ldGhvZFdvcmtlcihvYmplY3QpOgorICAgICIiIkJhc2UgY2xhc3Mg Zm9yIGFsbCBkZWJ1ZyBtZXRob2Qgd29ya2VycyBkZWZpbmVkIGluIFB5dGhv bi4KKworICAgIEEgZGVidWcgbWV0aG9kIHdvcmtlciBpcyBhbiBvYmplY3Qg d2hpY2ggbWF0Y2hlcyB0aGUgbWV0aG9kIGFyZ3VtZW50cywgYW5kCisgICAg aW52b2tlcyB0aGUgbWV0aG9kIHdoZW4gR0RCIHdhbnRzIGl0IHRvLiAgSW50 ZXJuYWxseSwgR0RCIGZpcnN0IGludm9rZXMgdGhlCisgICAgJ2dldF9hcmd0 eXBlcycgbWV0aG9kIHRvIHBlcmZvcm0gb3ZlcmxvYWQgcmVzb2x1dGlvbi4g IElmIEdEQiBzZWxlY3RzIHRvIAorICAgIGludm9rZSB0aGlzIFB5dGhvbiBk ZWJ1ZyBtZXRob2QsIHRoZW4gaXQgaW52b2tlcyBpdCB2aWEgdGhlIG92ZXJy aWRkZW4KKyAgICAnaW52b2tlJyBtZXRob2QuCisKKyAgICBEZXJpdmVkIGNs YXNzZXMgc2hvdWxkIG92ZXJyaWRlIHRoZSAnZ2V0X2FyZ3R5cGVzJyBhbmQg J2ludm9rZScgbWV0aG9kcy4KKyAgICAiIiIKKworICAgIGRlZiBnZXRfYXJn dHlwZXMoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhIHNlcXVlbmNlIG9m IGdkYi5UeXBlIG9iamVjdHMgY29ycmVzcG9uZGluZyB0byB0aGUgYXJndW1l bnRzCisgICAgICAgICAgIG9mIHRoZSBkZWJ1ZyBtZXRob2QuCisgICAgICAg ICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJEZWJ1 Z01ldGhvZCBnZXRfYXJndHlwZXMiKQorCisgICAgZGVmIGludm9rZShzZWxm LCBvYmosIGFyZ3MpOgorICAgICAgICAiIiJJbnZva2UgdGhlIGRlYnVnIG1l dGhvZC4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgb2JqOiBUaGUg Z2RiLlZhbHVlIG9mIHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIG1ldGhvZCBp cyB0byBiZQorICAgICAgICAgICAgICAgICBpbnZva2VkLgorICAgICAgICAg ICAgYXJnczogVGhlIHR1cGxlIG9mIGFyZ3VtZW50cyB0byB0aGUgbWV0aG9k LgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRF cnJvcigiRGVidWdNZXRob2QgaW52b2tlIikKKworCitjbGFzcyBTaW1wbGVE ZWJ1Z01ldGhvZE1hdGNoZXIoRGVidWdNZXRob2RNYXRjaGVyKToKKyAgICAi IiJUaGlzIGlzIGEgdXRpbGl0eSBjbGFzcyB3aGljaCBkb2VzIG5hbWUgbWF0 Y2ggYnkgY2xhc3MgbmFtZSBvZiB0aGUKKyAgICBvYmplY3RzIG9uIHdoaWNo IHRoZSBkZWJ1ZyBtZXRob2RzIGFyZSBkZWZpbmVkLiAgRm9yIHNpbXBsZSBj bGFzc2VzIGFuZAorICAgIG1ldGhvZHMsIG9uZSBjYW4gY2hvb3NlIHRvIHVz ZSB0aGlzIGNsYXNzLiAgRm9yIGNvbXBsZXggZGVidWcgbWV0aG9kcywKKyAg ICB3aGljaCBuZWVkIHRvIHJlcGxhY2UvaW1wbGVtZW50IHRlbXBsYXRlIHNv dXJjZSBtZXRob2RzIG9uIHBvc3NpYmx5CisgICAgdGVtcGxhdGUgY2xhc3Nl cywgb25lIHNob3VsZCBpbXBsZW1lbnQgdGhlaXIgb3duIGRlYnVnIG1ldGhv ZCBjbGFzc2VzCisgICAgZGVyaXZpbmcgZnJvbSB0aGUgYmFzZSBjbGFzcyAn RGVidWdNZXRob2QnLiAgU2VlIHRoZSBweS1kZWJ1Z21ldGhvZHMucHkKKyAg ICBpbiB0aGUgdGVzdHN1aXRlL2dkYi5weXRob24gZGlyZWN0b3J5IG9mIHRo ZSBHREIgc291cmNlIHRyZWUgZm9yCisgICAgZXhhbXBsZXMuCisgICAgIiIi CisKKyAgICBjbGFzcyBTaW1wbGVEZWJ1Z01ldGhvZFdvcmtlcihEZWJ1Z01l dGhvZFdvcmtlcik6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRo b2RfZnVuY3Rpb24sIGFyZ3R5cGVzKToKKyAgICAgICAgICAgIHNlbGYuX2Fy Z3R5cGVzID0gYXJndHlwZXMKKyAgICAgICAgICAgIHNlbGYuX21ldGhvZF9m dW5jdGlvbiA9IG1ldGhvZF9mdW5jdGlvbgorCisgICAgICAgIGRlZiBnZXRf YXJndHlwZXMoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fYXJn dHlwZXMKKworICAgICAgICBkZWYgaW52b2tlKHNlbGYsIG9iaiwgYXJncyk6 CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fbWV0aG9kX2Z1bmN0aW9uKG9i aiwgKmFyZ3MpCisKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBj bGFzc19tYXRjaGVyLCBtZXRob2RfbWF0Y2hlciwgbWV0aG9kX2Z1bmN0aW9u LAorICAgICAgICAgICAgICAgICAqYXJndHlwZXMpOgorICAgICAgICAiIiIK KyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIG5hbWU6IE5hbWUgb2YgdGhl IGRlYnVnIG1ldGhvZCBtYXRjaGVyLgorICAgICAgICAgICAgY2xhc3NfbWF0 Y2hlcjogQSByZWd1bGFyIGV4cHJlc3Npb24gdXNlZCB0byBtYXRjaCB0aGUg bmFtZSBvZiB0aGUKKyAgICAgICAgICAgICAgICBjbGFzcyB3aG9zZSBtZXRo b2QgdGhpcyBkZWJ1ZyBtZXRob2QgaXMgaW1wbGVtZW50aW5nL3JlcGxhY2lu Zy4KKyAgICAgICAgICAgIG1ldGhvZF9tYXRjaGVyOiBBIHJlZ3VsYXIgZXhw cmVzc2lvbiB1c2VkIHRvIG1hdGNoIHRoZSBuYW1lIG9mIHRoZQorICAgICAg ICAgICAgICAgIG1ldGhvZCB0aGlzIGRlYnVnIG1ldGhvZCBpcyBpbXBsZW1l bnRpbmcvcmVwbGFjaW5nLgorICAgICAgICAgICAgbWV0aG9kX2Z1bmN0aW9u OiBBIFB5dGhvbiBjYWxsYWJsZSB3aGljaCB3b3VsZCBiZSBjYWxsZWQgdmlh IHRoZQorICAgICAgICAgICAgICAgIGludm9rZSB0aGVtIG9mIHRoaXMgY2xh c3MgdG8gYWN0dWFsbHkgaW52b2tlIHRoZSBkZWJ1ZyBtZXRob2QuCisgICAg ICAgICAgICAgICAgVGhpcyBjYWxsYWJsZSBzaG91bGQgYWNjZXB0IHRoZSBv YmplY3QgKCp0aGlzKSBhcyB0aGUgZmlyc3QKKyAgICAgICAgICAgICAgICBh cmd1bWVudCBmb2xsb3dlZCBieSB0aGUgcmVzdCBvZiB0aGUgYXJndW1lbnRz IHRvIHRoZSBtZXRob2QuCisgICAgICAgICAgICBhcmd0eXBlczogVGhlIGdk Yi5UeXBlIG9iamVjdHMgY29ycmVzcG9uZGluZyB0byB0aGUgYXJndW1lbnRz IHRoYXQKKyAgICAgICAgICAgICAgICB0aGlzIGRlYnVnIG1ldGhvZCB0YWtl cy4KKyAgICAgICAgIiIiCisgICAgICAgIERlYnVnTWV0aG9kTWF0Y2hlci5f X2luaXRfXyhzZWxmLCBuYW1lKQorICAgICAgICBhc3NlcnQgY2FsbGFibGUo bWV0aG9kX2Z1bmN0aW9uKSwgKAorICAgICAgICAgICAgIlRoZSAnbWV0aG9k X2Z1bmN0aW9uJyBhcmd1bWVudCB0byAnU2ltcGxlRGVidWdNZXRob2RNYXRj aGVyJyAiCisgICAgICAgICAgICAiX19pbml0X18gbWV0aG9kIHNob3VsZCBi ZSBhIGNhbGxhYmxlLiIpCisgICAgICAgIHNlbGYuX21ldGhvZF9mdW5jdGlv biA9IG1ldGhvZF9mdW5jdGlvbgorICAgICAgICBzZWxmLl9jbGFzc19tYXRj aGVyID0gY2xhc3NfbWF0Y2hlcgorICAgICAgICBzZWxmLl9tZXRob2RfbWF0 Y2hlciA9IG1ldGhvZF9tYXRjaGVyCisgICAgICAgIHNlbGYuX2FyZ3R5cGVz ID0gYXJndHlwZXMKKworICAgIGRlZiBtYXRjaChzZWxmLCBjbGFzc190eXBl LCBtZXRob2RfbmFtZSk6CisgICAgICAgIGNtID0gcmUubWF0Y2goc2VsZi5f Y2xhc3NfbWF0Y2hlciwgc3RyKGNsYXNzX3R5cGUudW5xdWFsaWZpZWQoKS50 YWcpKQorICAgICAgICBtbSA9IHJlLm1hdGNoKHNlbGYuX21ldGhvZF9tYXRj aGVyLCBtZXRob2RfbmFtZSkKKyAgICAgICAgaWYgY20gYW5kIG1tOgorICAg ICAgICAgICAgcmV0dXJuIFNpbXBsZURlYnVnTWV0aG9kTWF0Y2hlci5TaW1w bGVEZWJ1Z01ldGhvZFdvcmtlcigKKyAgICAgICAgICAgICAgICBzZWxmLl9t ZXRob2RfZnVuY3Rpb24sIHNlbGYuX2FyZ3R5cGVzKQorCisKKyMgQSBoZWxw ZXIgZnVuY3Rpb24gZm9yIHJlZ2lzdGVyX2RlYnVnbWV0aG9kX21hdGNoZXIg d2hpY2ggcmV0dXJucyBhbiBlcnJvcgorIyBvYmplY3QgaWYgTUFUQ0hFUiBp cyBub3QgaGF2aW5nIHRoZSByZXF1aXNpdGUgYXR0cmlidXRlcyBpbiB0aGUg cHJvcGVyCisjIGZvcm1hdC4KK2RlZiB2YWxpZGF0ZV9kZWJ1Z21ldGhvZF9t YXRjaGVyKG1hdGNoZXIpOgorICAgIGlmIG5vdCBpc2luc3RhbmNlKG1hdGNo ZXIsIERlYnVnTWV0aG9kTWF0Y2hlcik6CisgICAgICAgIHJldHVybiBUeXBl RXJyb3IoIkRlYnVnIG1ldGhvZCBtYXRjaGVyIGlzIG5vdCBhbiBpbnN0YW5j ZSBvZiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIidEZWJ1Z01ldGhv ZE1hdGNoZXInIikKKyAgICBpZiBub3QgaGFzYXR0cihtYXRjaGVyLCAibmFt ZSIpOgorICAgICAgICByZXR1cm4gVHlwZUVycm9yKCJEZWJ1ZyBtZXRob2Qg bWF0Y2hlciBpcyBtaXNzaW5nIGF0dHJpYnV0ZTogbmFtZSIpCisgICAgaWYg bm90IGhhc2F0dHIobWF0Y2hlciwgImVuYWJsZWQiKToKKyAgICAgICAgcmV0 dXJuIFR5cGVFcnJvcigiRGVidWcgbWV0aG9kIG1hdGNoZXIgaXMgbWlzc2lu ZyBhdHRyaWJ1dGU6IGVuYWJsZWQiKQorICAgIGlmIG5vdCBpc2luc3RhbmNl KG1hdGNoZXIubmFtZSwgYmFzZXN0cmluZyk6CisgICAgICAgIHJldHVybiBU eXBlRXJyb3IoIkF0dHJpYnV0ZSAnbmFtZScgb2YgZGVidWcgbWV0aG9kIG1h dGNoZXIgaXMgbm90IGEgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJz dHJpbmciKQorICAgIGlmIG1hdGNoZXIubmFtZS5maW5kKCI7IikgPj0gMDoK KyAgICAgICAgcmV0dXJuIFZhbHVlRXJyb3IoIkRlYnVnIG1ldGhvZCBtYXRj aGVyIG5hbWUgY2Fubm90IGNvbnRhaW4gJzsnIGluIGl0IikKKworCisjIEEg aGVscGVyIGZ1bmN0aW9uIGZvciByZWdpc3Rlcl9kZWJ1Z21ldGhvZF9tYXRj aGVyIHdoaWNoIGxvb2tzIHVwIGEgZGVidWcKKyMgbWV0aG9kIG1hdGNoZXIg d2l0aCBOQU1FIGluIExPQ1VTLiAgUmV0dXJucyB0aGUgaW5kZXggb2YgdGhl IGRlYnVnIG1ldGhvZAorIyBtYXRjaGVyIGluICdkZWJ1Z19tZXRob2RfbWF0 Y2hlcnMnIHNlcXVlbmNlIGF0dHJpYnV0ZSBvZiB0aGUgTE9DVVMuCitkZWYg bG9va3VwX2RlYnVnbWV0aG9kX21hdGNoZXIobG9jdXMsIG5hbWUpOgorICAg IGkgPSAwCisgICAgZm9yIG0gaW4gbG9jdXMuZGVidWdtZXRob2RfbWF0Y2hl cnM6CisgICAgICAgIGlmIG0ubmFtZSA9PSBuYW1lOgorICAgICAgICAgICAg cmV0dXJuIGkKKyAgICAgICAgaSA9IGkgKyAxCisKKworZGVmIHJlZ2lzdGVy X2RlYnVnbWV0aG9kX21hdGNoZXIobG9jdXMsIG1hdGNoZXIsIHJlcGxhY2U9 RmFsc2UpOgorICAgICIiIlJlZ2lzdGVycyBhIGRlYnVnIG1ldGhvZCBtYXRj aGVyIE1BVENIRVIgd2l0aCBhIExPQ1VTLgorCisgICAgQXJndW1lbnRzOgor ICAgICAgICBsb2N1czogVGhlIGxvY3VzIGluIHdoaWNoIHRoZSBkZWJ1ZyBt ZXRob2RzIHNob3VsZCBiZSByZWdpc3RlcmVkLiAgSXQKKyAgICAgICAgICAg ICAgIGNhbiBiZSAnTm9uZScgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZGVidWcg bWV0aG9kcyBzaG91bGQgYmUKKyAgICAgICAgICAgICAgIHJlZ2lzdGVyZWQg Z2xvYmFsbHkuIE9yLCBpdCBjb3VsZCBiZSBhIGdkYi5PYmpmaWxlIG9yIGEK KyAgICAgICAgICAgICAgIGdkYi5Qcm9nc3BhY2Ugb2JqZWN0IGluIHdoaWNo IHRoZSBkZWJ1ZyBtZXRob2RzIHNob3VsZCBiZQorICAgICAgICAgICAgICAg cmVnaXN0ZXJlZC4KKyAgICAgICAgbWF0Y2hlcjogVGhlIGRlYnVnIG1ldGhv ZCBtYXRjaGVyIHRvIHJlZ2lzdGVyIHdpdGggdGhlIExPQ1VTLiAgSXQKKyAg ICAgICAgICAgIHNob3VsZCBiZSBhbiBpbnN0YW5jZSBvZiAnRGVidWdNZXRo b2RNYXRjaGVyJyBjbGFzcy4KKyAgICAgICAgcmVwbGFjZTogSWYgVHJ1ZSwg cmVwbGFjZSBhbnkgZXhpc3RpbmcgZGVidWcgbWV0aG9kIG1hdGNoZXIgd2l0 aCB0aGUKKyAgICAgICAgICAgIHNhbWUgbmFtZSBpbiB0aGUgbG9jdXMuICBP dGhlcndpc2UsIGlmIGEgbWF0Y2hlciB3aXRoIHRoZSBzYW1lIG5hbWUKKyAg ICAgICAgICAgIGV4aXN0cyBpbiB0aGUgbG9jdXMsIHJhaXNlIGFuIGV4Y2Vw dGlvbi4KKyAgICAiIiIKKyAgICBlcnIgPSB2YWxpZGF0ZV9kZWJ1Z21ldGhv ZF9tYXRjaGVyKG1hdGNoZXIpCisgICAgaWYgZXJyOgorICAgICAgICByYWlz ZSBlcnIKKyAgICBpZiBub3QgbG9jdXM6CisgICAgICAgIGxvY3VzID0gZ2Ri CisgICAgaWYgbG9jdXMgPT0gZ2RiOgorICAgICAgICBsb2N1c19uYW1lID0g J0dEQiBnbG9iYWxseScKKyAgICBlbHNlOgorICAgICAgICBsb2N1c19uYW1l ID0gbG9jdXMuZmlsZW5hbWUKKyAgICBpbmRleCA9IGxvb2t1cF9kZWJ1Z21l dGhvZF9tYXRjaGVyKGxvY3VzLCBtYXRjaGVyLm5hbWUpCisgICAgaWYgaW5k ZXg6CisgICAgICAgIGlmIHJlcGxhY2U6CisgICAgICAgICAgICBkZWwgbG9j dXMuZGVidWdtZXRob2RfbWF0Y2hlcnNbaW5kZXhdCisgICAgICAgIGVsc2U6 CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0RlYnVnIG1ldGhv ZCBtYXRjaGVyIGFscmVhZHkgcmVnaXN0ZXJlZCB3aXRoICcKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAnJXM6ICVzJyAlIChsb2N1c19uYW1l LCBuZXdfbWV0aG9kLm5hbWUpKQorICAgIGlmIGdkYi5wYXJhbWV0ZXIoInZl cmJvc2UiKToKKyAgICAgICAgZ2RiLndyaXRlKCJSZWdpc3RlcmluZyBkZWJ1 ZyBtZXRob2QgbWF0Y2hlciAnJXMnIHdpdGggJXMnIC4uLlxuIikgCisgICAg bG9jdXMuZGVidWdtZXRob2RfbWF0Y2hlcnMuaW5zZXJ0KDAsIG1hdGNoZXIp CmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5LWRlYnVnbWV0aG9kcy5jIGIv Z2RiL3B5dGhvbi9weS1kZWJ1Z21ldGhvZHMuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi5kYTA2MmRjCi0tLSAvZGV2L251bGwKKysr IGIvZ2RiL3B5dGhvbi9weS1kZWJ1Z21ldGhvZHMuYwpAQCAtMCwwICsxLDYz OCBAQAorLyogU3VwcG9ydCBmb3IgZGVidWcgbWV0aG9kcyBpbiBQeXRob24u CisKKyAgIENvcHlyaWdodCAoQykgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgor CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg YWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSAiZGVm cy5oIgorI2luY2x1ZGUgImFyY2gtdXRpbHMuaCIKKyNpbmNsdWRlICJleHQt ZnVuY3Rpb24uaCIKKyNpbmNsdWRlICJvYmpmaWxlcy5oIgorI2luY2x1ZGUg InZhbHVlLmgiCisjaW5jbHVkZSAibGFuZ3VhZ2UuaCIKKworI2luY2x1ZGUg InB5dGhvbi5oIgorCisjaWZkZWYgSEFWRV9QWVRIT04KKyNpbmNsdWRlICJw eXRob24taW50ZXJuYWwuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgZW5hYmxl ZF9maWVsZF9uYW1lW10gPSAiZW5hYmxlZCI7CitzdGF0aWMgY29uc3QgY2hh ciBtYXRjaF9tZXRob2RfbmFtZVtdID0gIm1hdGNoIjsKK3N0YXRpYyBjb25z dCBjaGFyIGdldF9hcmd0eXBlc19tZXRob2RfbmFtZVtdID0gImdldF9hcmd0 eXBlcyI7CitzdGF0aWMgY29uc3QgY2hhciBpbnZva2VfbWV0aG9kX25hbWVb XSA9ICJpbnZva2UiOworc3RhdGljIGNvbnN0IGNoYXIgbWF0Y2hlcnNfYXR0 cl9zdHJbXSA9ICJkZWJ1Z21ldGhvZF9tYXRjaGVycyI7CisKK3N0YXRpYyBQ eU9iamVjdCAqcHlfbWF0Y2hfbWV0aG9kX25hbWUgPSBOVUxMOworc3RhdGlj IFB5T2JqZWN0ICpweV9nZXRfYXJndHlwZXNfbWV0aG9kX25hbWUgPSBOVUxM Oworc3RhdGljIFB5T2JqZWN0ICpweV9pbnZva2VfbWV0aG9kX25hbWUgPSBO VUxMOworCitzdHJ1Y3QgcHlfZXh0X29iamVjdAoreworICBQeU9iamVjdCAq d29ya2VyOworICBQeU9iamVjdCAqdGhpc190eXBlOworfTsKKworc3RhdGlj IHN0cnVjdCBleHRfZm5fZGVzY3JpcHRvciAqbmV3X3B5dGhvbl9leHRfbWV0 aG9kIChQeU9iamVjdCAqaXRlbSwKKwkJCQkJCQlQeU9iamVjdCAqcHlfb2Jq X3R5cGUpOworCisvKiBJbXBsZW1lbnRhdGlvbiBvZiBmcmVlX2V4dF9vYmpf ZnR5cGUuICAqLworCitzdGF0aWMgdm9pZAorcHlfZnJlZV9leHRfb2JqZWN0 ICh2b2lkICpleHRfb2JqKQoreworICBzdHJ1Y3QgcHlfZXh0X29iamVjdCAq ZXh0X29iamVjdCA9IGV4dF9vYmo7CisKKyAgUHlfWERFQ1JFRiAoZXh0X29i amVjdC0+d29ya2VyKTsKKyAgUHlfWERFQ1JFRiAoZXh0X29iamVjdC0+dGhp c190eXBlKTsKKyAgeGZyZWUgKGV4dF9vYmplY3QpOworfQorCisvKiBJbXBs ZW1lbnRhdGlvbiBvZiBjbG9uZV9leHRfb2JqX2Z0eXBlLiAgKi8KKworc3Rh dGljIHZvaWQgKgorcHlfY2xvbmVfZXh0X29iamVjdCAodm9pZCAqZXh0X29i aikKK3sKKyAgc3RydWN0IHB5X2V4dF9vYmplY3QgKmV4dF9vYmplY3QgPSBl eHRfb2JqLCAqbmV3X29iamVjdDsKKworICBuZXdfb2JqZWN0ID0gWENORVcg KHN0cnVjdCBweV9leHRfb2JqZWN0KTsgCisgIG5ld19vYmplY3QtPndvcmtl ciA9IGV4dF9vYmplY3QtPndvcmtlcjsKKyAgbmV3X29iamVjdC0+dGhpc190 eXBlID0gZXh0X29iamVjdC0+dGhpc190eXBlOworICBQeV9YSU5DUkVGIChu ZXdfb2JqZWN0LT53b3JrZXIpOworICBQeV9YSU5DUkVGIChuZXdfb2JqZWN0 LT50aGlzX3R5cGUpOworCisgIHJldHVybiBuZXdfb2JqZWN0OworfQorCisv KiBJbnZva2UgdGhlICJtYXRjaCIgbWV0aG9kIG9mIHRoZSBNQVRDSEVSIGFu ZCByZXR1cm4gYSBuZXcgcmVmZXJlbmNlCisgICB0byB0aGUgcmVzdWx0LiBS ZXR1cm5zIE5VTEwgb24gZXJyb3IuICAqLworCitzdGF0aWMgUHlPYmplY3Qg KgoraW52b2tlX21hdGNoX21ldGhvZCAoUHlPYmplY3QgKm1hdGNoZXIsIFB5 T2JqZWN0ICpweV9vYmpfdHlwZSwKKwkJICAgICBjb25zdCBjaGFyICpkZWJ1 Z21ldGhvZF9uYW1lKQoreworICBQeU9iamVjdCAqcHlfZGVidWdtZXRob2Rf bmFtZTsKKyAgUHlPYmplY3QgKm1hdGNoX21ldGhvZCwgKmVuYWJsZWRfZmll bGQsICptYXRjaF9yZXN1bHQ7CisgIHN0cnVjdCBjbGVhbnVwICpjbGVhbnVw czsKKyAgaW50IGVuYWJsZWQ7CisKKyAgaWYgKGRlYnVnbWV0aG9kX25hbWUg PT0gTlVMTCkKKyAgICByZXR1cm4gTlVMTDsKKworICBjbGVhbnVwcyA9IG1h a2VfY2xlYW51cCAobnVsbF9jbGVhbnVwLCBOVUxMKTsKKworICBlbmFibGVk X2ZpZWxkID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyAobWF0Y2hlciwgZW5h YmxlZF9maWVsZF9uYW1lKTsKKyAgaWYgKGVuYWJsZWRfZmllbGQgPT0gTlVM TCkKKyAgICB7CisgICAgICBnZGJweV9wcmludF9zdGFjayAoKTsKKyAgICAg IGRvX2NsZWFudXBzIChjbGVhbnVwcyk7CisKKyAgICAgIHJldHVybiBOVUxM OworICAgIH0KKyAgbWFrZV9jbGVhbnVwX3B5X2RlY3JlZiAoZW5hYmxlZF9m aWVsZCk7CisKKyAgZW5hYmxlZCA9IFB5T2JqZWN0X0lzVHJ1ZSAoZW5hYmxl ZF9maWVsZCk7CisgIGlmIChlbmFibGVkID09IC0xKQorICAgIHsKKyAgICAg IGdkYnB5X3ByaW50X3N0YWNrICgpOworICAgICAgZG9fY2xlYW51cHMgKGNs ZWFudXBzKTsKKworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICBpZiAo ZW5hYmxlZCA9PSAwKQorICAgIHsKKyAgICAgIGRvX2NsZWFudXBzIChjbGVh bnVwcyk7CisKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICBtYXRj aF9tZXRob2QgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nIChtYXRjaGVyLCBt YXRjaF9tZXRob2RfbmFtZSk7CisgIGlmIChtYXRjaF9tZXRob2QgPT0gTlVM TCkKKyAgICB7CisgICAgICBnZGJweV9wcmludF9zdGFjayAoKTsKKyAgICAg IGRvX2NsZWFudXBzIChjbGVhbnVwcyk7CisKKyAgICAgIHJldHVybiBOVUxM OworICAgIH0KKyAgbWFrZV9jbGVhbnVwX3B5X2RlY3JlZiAobWF0Y2hfbWV0 aG9kKTsKKyAgaWYgKCFQeUNhbGxhYmxlX0NoZWNrIChtYXRjaF9tZXRob2Qp KQorICAgIHsKKyAgICAgIHdhcm5pbmcgKF8oIkF0dHJpYnV0ZSAnJXMnIG9m IGEgcmVnaXN0ZXJlZCBQeXRob24gZGVidWcgbWV0aG9kIG1hY3RoZXIgIgor CQkgImlzIG5vdCBhIGNhbGxhYmxlLiAgSWdub3JlZCEiKSwgbWF0Y2hfbWV0 aG9kX25hbWUpOworICAgICAgZG9fY2xlYW51cHMgKGNsZWFudXBzKTsKKwor ICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgIHB5X2RlYnVnbWV0aG9k X25hbWUgPSBQeVN0cmluZ19Gcm9tU3RyaW5nIChkZWJ1Z21ldGhvZF9uYW1l KTsKKyAgaWYgKHB5X2RlYnVnbWV0aG9kX25hbWUgPT0gTlVMTCkKKyAgICB7 CisgICAgICBnZGJweV9wcmludF9zdGFjayAoKTsKKyAgICAgIGRvX2NsZWFu dXBzIChjbGVhbnVwcyk7CisKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0K KyAgbWFrZV9jbGVhbnVwX3B5X2RlY3JlZiAocHlfZGVidWdtZXRob2RfbmFt ZSk7CisKKyAgbWF0Y2hfcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9i akFyZ3MgKG1hdGNoZXIsCisJCQkJCSAgICAgcHlfbWF0Y2hfbWV0aG9kX25h bWUsCisJCQkJCSAgICAgcHlfb2JqX3R5cGUsCisJCQkJCSAgICAgcHlfZGVi dWdtZXRob2RfbmFtZSwKKwkJCQkJICAgICBOVUxMKTsKKyAgaWYgKG1hdGNo X3Jlc3VsdCA9PSBOVUxMKQorICAgIGdkYnB5X3ByaW50X3N0YWNrICgpOwor ICBkb19jbGVhbnVwcyAoY2xlYW51cHMpOworCisgIHJldHVybiBtYXRjaF9y ZXN1bHQ7Cit9CisKKy8qIEV4dGVuZCBMSVNUMSB3aXRoIExJU1QyLgorICAg U2ltaWxhciB0byBsaXN0LmV4dGVuZC4gIFByaW50cyB0aGUgc3RhY2sgYW5k IHJldHVybnMgTlVMTCBvbiBlcnJvci4gKi8KKworc3RhdGljIFB5T2JqZWN0 ICoKK21hdGNoZXJfbGlzdF9leHRlbmQgKFB5T2JqZWN0ICpsaXN0MSwgUHlP YmplY3QgKmxpc3QyKQoreworICBQeU9iamVjdCAqbmV3X2xpc3QgPSBQeVNl cXVlbmNlX0NvbmNhdCAobGlzdDEsIGxpc3QyKTsKKworICBpZiAobmV3X2xp c3QgPT0gTlVMTCkKKyAgICBnZGJweV9wcmludF9zdGFjayAoKTsKKworICBy ZXR1cm4gbmV3X2xpc3Q7Cit9CisKKy8qIEltcGxlbWVudGF0aW9uIG9mIGdl dF9tYXRjaGluZ19leHRfbWV0aG9kc19mdHlwZS4KKyAgIFJldHVybiBhIG9m IHZlY3RvciBtZXRob2RzIHdpdGggbmFtZSBNRVRIT0RfTkFNRSBkZWZpbmVk IGluIFB5dGhvbiBmb3IKKyAgIG9iamVjdHMgb2YgdHlwZSBPQkpfVFlQRS4g IFJldHVybnMgTlVMTCBpZiBubyBtYXRjaGVzIGFyZSBmb3VuZC4gICovCisK K3N0YXRpYyBWRUMgKGV4dF9mbl9kZXNjcmlwdG9yX3ApICoKK3B5X2RlYnVn bWV0aG9kX25hbWVfbWF0Y2ggKHN0cnVjdCB0eXBlICpvYmpfdHlwZSwgY29u c3QgY2hhciAqbWV0aG9kX25hbWUpCit7CisgIHN0cnVjdCBjbGVhbnVwICpj bGVhbnVwczsKKyAgc3RydWN0IG9iamZpbGUgKm9iamZpbGU7CisgIFZFQyAo ZXh0X2ZuX2Rlc2NyaXB0b3JfcCkgKndvcmtlcl92ZWMgPSBOVUxMOworICBQ eU9iamVjdCAqcHlfdHlwZSwgKnB5X3Byb2dzcGFjZTsKKyAgUHlPYmplY3Qg KnB5X2RlYnVnbWV0aG9kX21hdGNoZXJfbGlzdCA9IE5VTEwsICpsaXN0X2l0 ZXIsICptYXRjaGVyOworCisgIGlmIChvYmpfdHlwZSA9PSBOVUxMIHx8IG1l dGhvZF9uYW1lID09IE5VTEwpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgcHlf dHlwZSA9IHR5cGVfdG9fdHlwZV9vYmplY3QgKG9ial90eXBlKTsKKyAgaWYg KHB5X3R5cGUgPT0gTlVMTCkKKyAgICByZXR1cm4gTlVMTDsKKyAgbWFrZV9j bGVhbnVwX3B5X2RlY3JlZiAocHlfdHlwZSk7CisKKyAgLyogQ3JlYXRlIGFu IGVtcHl0IGxpc3Qgb2YgZGVidWcgbWV0aG9kcy4gICovCisgIHB5X2RlYnVn bWV0aG9kX21hdGNoZXJfbGlzdCA9IFB5TGlzdF9OZXcgKDApOworICBpZiAo cHlfZGVidWdtZXRob2RfbWF0Y2hlcl9saXN0ID09IE5VTEwpCisgICAgcmV0 dXJuIE5VTEw7CisKKyAgY2xlYW51cHMgPSBlbnN1cmVfcHl0aG9uX2VudiAo Z2V0X2N1cnJlbnRfYXJjaCAoKSwgY3VycmVudF9sYW5ndWFnZSk7CisKKyAg LyogR2F0aGVyIGRlYnVnIG1ldGhvZHMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBv YmplY3QgZmlsZXMuICAqLworICBBTExfT0JKRklMRVMgKG9iamZpbGUpCisg ICAgeworICAgICAgUHlPYmplY3QgKnB5X29iamZpbGUgPSBvYmpmaWxlX3Rv X29iamZpbGVfb2JqZWN0IChvYmpmaWxlKTsKKyAgICAgIFB5T2JqZWN0ICpv YmpmaWxlX21hdGNoZXJzLCAqdGVtcCA9IHB5X2RlYnVnbWV0aG9kX21hdGNo ZXJfbGlzdDsKKworICAgICAgaWYgKHB5X29iamZpbGUgPT0gTlVMTCkKKwl7 CisJICBnZGJweV9wcmludF9zdGFjayAoKTsKKwkgIGNvbnRpbnVlOworCX0K KworICAgICAgb2JqZmlsZV9tYXRjaGVycyA9IG9iamZweV9nZXRfZGVidWdt ZXRob2RfbWF0Y2hlcnMgKHB5X29iamZpbGUsIE5VTEwpOworICAgICAgcHlf ZGVidWdtZXRob2RfbWF0Y2hlcl9saXN0ID0gbWF0Y2hlcl9saXN0X2V4dGVu ZCAodGVtcCwKKwkJCQkJCQkgb2JqZmlsZV9tYXRjaGVycyk7CisgICAgICBp ZiAocHlfZGVidWdtZXRob2RfbWF0Y2hlcl9saXN0ID09IE5VTEwpCisJcHlf ZGVidWdtZXRob2RfbWF0Y2hlcl9saXN0ID0gdGVtcDsKKyAgICAgIGVsc2UK KwlQeV9ERUNSRUYgKHRlbXApOworICAgICAgUHlfWERFQ1JFRiAob2JqZmls ZV9tYXRjaGVycyk7CisgICAgfQorCisgIC8qIEdhdGhlciBkZWJ1ZyBtZXRo b2RzIG1hdGNoZXJzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgY3VycmVudCBwcm9n cmFtCisgICAgIHNwYWNlLiAgKi8KKyAgcHlfcHJvZ3NwYWNlID0gcHNwYWNl X3RvX3BzcGFjZV9vYmplY3QgKGN1cnJlbnRfcHJvZ3JhbV9zcGFjZSk7Cisg IGlmIChweV9wcm9nc3BhY2UgIT0gTlVMTCkKKyAgICB7CisgICAgICBQeU9i amVjdCAqdGVtcCA9IHB5X2RlYnVnbWV0aG9kX21hdGNoZXJfbGlzdDsKKyAg ICAgIFB5T2JqZWN0ICpwc3BhY2VfbWF0Y2hlcnMgPSBwc3B5X2dldF9kZWJ1 Z21ldGhvZF9tYXRjaGVycyAocHlfcHJvZ3NwYWNlLAorCQkJCQkJCQkgTlVM TCk7CisKKyAgICAgIHB5X2RlYnVnbWV0aG9kX21hdGNoZXJfbGlzdCA9IG1h dGNoZXJfbGlzdF9leHRlbmQgKHRlbXAsIHBzcGFjZV9tYXRjaGVycyk7Cisg ICAgICBpZiAocHlfZGVidWdtZXRob2RfbWF0Y2hlcl9saXN0ID09IE5VTEwp CisJcHlfZGVidWdtZXRob2RfbWF0Y2hlcl9saXN0ID0gdGVtcDsKKyAgICAg IGVsc2UKKwlQeV9ERUNSRUYgKHRlbXApOworICAgICAgUHlfWERFQ1JFRiAo cHNwYWNlX21hdGNoZXJzKTsKKyAgICB9CisgIGVsc2UKKyAgICBnZGJweV9w cmludF9zdGFjayAoKTsKKworICAvKiBHYXRoZXIgZGVidWcgbWV0aG9kcyBy ZWdpc3RlcmVkIGdsb2JhbGx5LiAgKi8KKyAgaWYgKGdkYl9weXRob25fbW9k dWxlICE9IE5VTEwKKyAgICAgICYmIFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcg KGdkYl9weXRob25fbW9kdWxlLCBtYXRjaGVyc19hdHRyX3N0cikpCisgICAg eworICAgICAgUHlPYmplY3QgKmdkYl9tYXRjaGVyczsKKyAgICAgIFB5T2Jq ZWN0ICp0ZW1wID0gcHlfZGVidWdtZXRob2RfbWF0Y2hlcl9saXN0OworCisg ICAgICBnZGJfbWF0Y2hlcnMgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nIChn ZGJfcHl0aG9uX21vZHVsZSwKKwkJCQkJICAgICBtYXRjaGVyc19hdHRyX3N0 cik7CisgICAgICBpZiAoZ2RiX21hdGNoZXJzICE9IE5VTEwpCisJeworCSAg cHlfZGVidWdtZXRob2RfbWF0Y2hlcl9saXN0ID0gbWF0Y2hlcl9saXN0X2V4 dGVuZCAodGVtcCwKKwkJCQkJCQkgICAgIGdkYl9tYXRjaGVycyk7CisJICBp ZiAocHlfZGVidWdtZXRob2RfbWF0Y2hlcl9saXN0ID09IE5VTEwpCisJICAg IHB5X2RlYnVnbWV0aG9kX21hdGNoZXJfbGlzdCA9IHRlbXA7CisJICBlbHNl CisJICAgIFB5X0RFQ1JFRiAodGVtcCk7CisJICBQeV9ERUNSRUYgKGdkYl9t YXRjaGVycyk7CisJfQorICAgICAgZWxzZQorCWdkYnB5X3ByaW50X3N0YWNr ICgpOworICAgIH0KKworICBsaXN0X2l0ZXIgPSBQeU9iamVjdF9HZXRJdGVy IChweV9kZWJ1Z21ldGhvZF9tYXRjaGVyX2xpc3QpOworICBpZiAobGlzdF9p dGVyID09IE5VTEwpCisgICAgeworICAgICAgZ2RicHlfcHJpbnRfc3RhY2sg KCk7CisgICAgICBQeV9ERUNSRUYgKHB5X2RlYnVnbWV0aG9kX21hdGNoZXJf bGlzdCk7CisgICAgICBkb19jbGVhbnVwcyAoY2xlYW51cHMpOworICAgICAg cmV0dXJuIE5VTEw7CisgICAgfQorICB3aGlsZSAoKG1hdGNoZXIgPSBQeUl0 ZXJfTmV4dCAobGlzdF9pdGVyKSkpCisgICAgeworICAgICAgUHlPYmplY3Qg Km1hdGNoX3Jlc3VsdCA9IGludm9rZV9tYXRjaF9tZXRob2QgKG1hdGNoZXIs IHB5X3R5cGUsCisJCQkJCQkgICAgbWV0aG9kX25hbWUpOworCisgICAgICBp ZiAobWF0Y2hfcmVzdWx0ID09IFB5X05vbmUgfHwgbWF0Y2hfcmVzdWx0ID09 IE5VTEwpCisJOworICAgICAgZWxzZSBpZiAoUHlTZXF1ZW5jZV9DaGVjayAo bWF0Y2hfcmVzdWx0KSkKKwl7CisJICBQeU9iamVjdCAqaXRlciA9IFB5T2Jq ZWN0X0dldEl0ZXIgKG1hdGNoX3Jlc3VsdCk7CisJICBQeU9iamVjdCAqd29y a2VyOworCisJICBpZiAoaXRlciA9PSBOVUxMKQorCSAgICB7CisJICAgICAg Z2RicHlfcHJpbnRfc3RhY2sgKCk7CisJICAgICAgUHlfREVDUkVGIChtYXRj aGVyKTsKKwkgICAgICBQeV9ERUNSRUYgKG1hdGNoX3Jlc3VsdCk7CisJICAg ICAgZG9fY2xlYW51cHMgKGNsZWFudXBzKTsKKworCSAgICAgIGNvbnRpbnVl OworCSAgICB9CisJICB3aGlsZSAoKHdvcmtlciA9IFB5SXRlcl9OZXh0IChp dGVyKSkpCisJICAgIHsKKwkgICAgICBzdHJ1Y3QgZXh0X2ZuX2Rlc2NyaXB0 b3IgKmV4dF9mbjsKKworCSAgICAgIGV4dF9mbiA9IG5ld19weXRob25fZXh0 X21ldGhvZCAod29ya2VyLCBweV90eXBlKTsKKwkgICAgICBWRUNfc2FmZV9w dXNoIChleHRfZm5fZGVzY3JpcHRvcl9wLCB3b3JrZXJfdmVjLCBleHRfZm4p OworCSAgICAgIFB5X0RFQ1JFRiAod29ya2VyKTsKKwkgICAgfQorCSAgUHlf REVDUkVGIChpdGVyKTsKKwkgIC8qIFJlcG9ydCBhbnkgZXJyb3IgdGhhdCBj b3VsZCBoYXZlIG9jY3VycmVkIHdoaWxlIGl0ZXJhdGluZy4gICovCisJICBp ZiAoUHlFcnJfT2NjdXJyZWQgKCkpCisJICAgIGdkYnB5X3ByaW50X3N0YWNr ICgpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBzdHJ1Y3QgZXh0X2ZuX2Rl c2NyaXB0b3IgKmV4dF9mbjsKKworCSAgZXh0X2ZuID0gbmV3X3B5dGhvbl9l eHRfbWV0aG9kIChtYXRjaF9yZXN1bHQsIHB5X3R5cGUpOworCSAgVkVDX3Nh ZmVfcHVzaCAoZXh0X2ZuX2Rlc2NyaXB0b3JfcCwgd29ya2VyX3ZlYywgZXh0 X2ZuKTsKKwl9CisKKyAgICAgIFB5X1hERUNSRUYgKG1hdGNoX3Jlc3VsdCk7 CisgICAgICBQeV9ERUNSRUYgKG1hdGNoZXIpOworICAgIH0KKyAgUHlfREVD UkVGIChsaXN0X2l0ZXIpOworICAvKiBSZXBvcnQgYW55IGVycm9yIHRoYXQg Y291bGQgaGF2ZSBvY2N1cnJlZCB3aGlsZSBpdGVyYXRpbmcuICAqLworICBp ZiAoUHlFcnJfT2NjdXJyZWQgKCkpCisgICAgZ2RicHlfcHJpbnRfc3RhY2sg KCk7CisKKyAgUHlfREVDUkVGIChweV9kZWJ1Z21ldGhvZF9tYXRjaGVyX2xp c3QpOworICBkb19jbGVhbnVwcyAoY2xlYW51cHMpOworCisgIHJldHVybiB3 b3JrZXJfdmVjOworfQorCisvKiBJbXBsZW1lbnRhdGlvbiBvZiBnZXRfZXh0 X2ZuX2FyZ3R5cGVzX2Z0eXBlLgorICAgUmV0dXJuIGFuIGFycnkgb2YgYXJn dW1lbnQgdHlwZXMgZm9yIGV4dGVuc2lvbiBlbmNhcHN1bGF0ZWQgaW4gRVhU X09CSi4KKyAgIE5BUkdTIGNvbnRhaW5zIHRoZSBsZW5ndGggb2YgdGhlIGFy cmF5LiAgKi8KKworc3RhdGljIHN0cnVjdCB0eXBlICoqCitweV9leHRfZm5f Z2V0X2FyZ3R5cGVzICh2b2lkICpleHRfb2JqLCBpbnQgKm5hcmdzKQorewor ICBzdHJ1Y3QgcHlfZXh0X29iamVjdCAqZXh0X29iamVjdCA9IGV4dF9vYmo7 CisgIFB5T2JqZWN0ICp3b3JrZXIgPSBleHRfb2JqZWN0LT53b3JrZXI7Cisg IFB5T2JqZWN0ICpnZXRfYXJndHlwZXNfbWV0aG9kOworICBQeU9iamVjdCAq cHlfYXJndHlwZV9saXN0LCAqbGlzdF9pdGVyID0gTlVMTCwgKml0ZW07Cisg IHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwczsKKyAgc3RydWN0IHR5cGUgKip0 eXBlX2FycmF5LCAqb2JqX3R5cGU7CisgIGludCBpID0gMSwgYXJnX2NvdW50 OworCisgIC8qIFNldCBuYXJncyB0byAwIHNvIHRoYXQgYW55IHByZW1hdHVy ZSByZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9uIHJldHVybnMKKyAgICAgMCBh cmcgdHlwZXMuICAqLworICAqbmFyZ3MgPSAwOworCisgIGNsZWFudXBzID0g ZW5zdXJlX3B5dGhvbl9lbnYgKGdldF9jdXJyZW50X2FyY2ggKCksIGN1cnJl bnRfbGFuZ3VhZ2UpOworCisgIGdldF9hcmd0eXBlc19tZXRob2QgPSAgUHlP YmplY3RfR2V0QXR0clN0cmluZyAod29ya2VyLAorCQkJCQkJIGdldF9hcmd0 eXBlc19tZXRob2RfbmFtZSk7CisgIGlmIChnZXRfYXJndHlwZXNfbWV0aG9k ID09IE5VTEwpCisgICAgeworICAgICAgZ2RicHlfcHJpbnRfc3RhY2sgKCk7 CisgICAgICBkb19jbGVhbnVwcyAoY2xlYW51cHMpOworCisgICAgICByZXR1 cm4gTlVMTDsKKyAgICB9CisgIG1ha2VfY2xlYW51cF9weV9kZWNyZWYgKGdl dF9hcmd0eXBlc19tZXRob2QpOworCisgIGlmICghUHlDYWxsYWJsZV9DaGVj ayAoZ2V0X2FyZ3R5cGVzX21ldGhvZCkpCisgICAgeworICAgICAgd2Fybmlu ZyAoXygiQXR0cmlidXRlICclcycgb2YgYSByZWdpc3RlcmVkIFB5dGhvbiBk ZWJ1ZyBtZXRob2QgaXMgbm90ICIKKwkJICJjYWxsYWJsZS4gIElnbm9yZWQh IiksIGdldF9hcmd0eXBlc19tZXRob2RfbmFtZSk7CisgICAgICBkb19jbGVh bnVwcyAoY2xlYW51cHMpOworCisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9 CisKKyAgcHlfYXJndHlwZV9saXN0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9i akFyZ3MgKHdvcmtlciwKKwkJCQkJCXB5X2dldF9hcmd0eXBlc19tZXRob2Rf bmFtZSwKKwkJCQkJCU5VTEwpOworICBpZiAocHlfYXJndHlwZV9saXN0ID09 IE5VTEwpCisgICAgeworICAgICAgZ2RicHlfcHJpbnRfc3RhY2sgKCk7Cisg ICAgICBkb19jbGVhbnVwcyAoY2xlYW51cHMpOworCisgICAgICByZXR1cm4g TlVMTDsKKyAgICB9CisgIG1ha2VfY2xlYW51cF9weV9kZWNyZWYgKHB5X2Fy Z3R5cGVfbGlzdCk7CisgIGlmIChweV9hcmd0eXBlX2xpc3QgPT0gUHlfTm9u ZSkKKyAgICBhcmdfY291bnQgPSAwOworICBlbHNlIGlmIChQeVNlcXVlbmNl X0NoZWNrIChweV9hcmd0eXBlX2xpc3QpKQorICAgIHsKKyAgICAgIGFyZ19j b3VudCA9IFB5U2VxdWVuY2VfU2l6ZSAocHlfYXJndHlwZV9saXN0KTsKKyAg ICAgIGlmIChhcmdfY291bnQgPT0gLTEpCisJeworCSAgZ2RicHlfcHJpbnRf c3RhY2sgKCk7CisJICBkb19jbGVhbnVwcyAoY2xlYW51cHMpOworCisJICBy ZXR1cm4gTlVMTDsKKwl9CisKKyAgICAgIGxpc3RfaXRlciA9IFB5T2JqZWN0 X0dldEl0ZXIgKHB5X2FyZ3R5cGVfbGlzdCk7CisgICAgICBpZiAobGlzdF9p dGVyID09IE5VTEwpCisJeworCSAgZ2RicHlfcHJpbnRfc3RhY2sgKCk7CisJ ICBkb19jbGVhbnVwcyAoY2xlYW51cHMpOworCisJICByZXR1cm4gTlVMTDsK Kwl9CisgICAgICBtYWtlX2NsZWFudXBfcHlfZGVjcmVmIChsaXN0X2l0ZXIp OworICAgIH0KKyAgZWxzZQorICAgIGFyZ19jb3VudCA9IDE7CisKKyAgLyog SW5jbHVkZSB0aGUgJ3RoaXMnIGFyZ3VtZW50IGluIHRoZSBzaXplLiAgKi8K KyAgdHlwZV9hcnJheSA9IFhDTkVXVkVDIChzdHJ1Y3QgdHlwZSAqLCBhcmdf Y291bnQgKyAxKTsKKyAgaSA9IDE7CisgIGlmIChsaXN0X2l0ZXIgIT0gTlVM TCkKKyAgICB7CisgICAgICB3aGlsZSAoKGl0ZW0gPSBQeUl0ZXJfTmV4dCAo bGlzdF9pdGVyKSkpCisJeworCSAgc3RydWN0IHR5cGUgKmFyZ190eXBlID0g dHlwZV9vYmplY3RfdG9fdHlwZSAoaXRlbSk7CisKKwkgIFB5X0RFQ1JFRiAo aXRlbSk7CisJICBpZiAoYXJnX3R5cGUgPT0gTlVMTCkKKwkgICAgeworCSAg ICAgIFB5RXJyX1NldFN0cmluZyAoUHlFeGNfVHlwZUVycm9yLAorCQkJICAg ICAgIF8oIkFyZyB0eXBlIHJldHVybmVkIGJ5IHRoZSBnZXRfYXJndHlwZXMg bWV0aG9kICIKKwkJCQkgIm9mIGEgZGVidWcgbWV0aG9kIHdvcmtlciBvYmpl Y3QgaXMgbm90IGEgIgorCQkJCSAiZ2RiLlR5cGUgb2JqZWN0LiIpKTsKKwkg ICAgICBicmVhazsKKwkgICAgfQorCisJICB0eXBlX2FycmF5W2ldID0gYXJn X3R5cGU7CisJICBpKys7CisJfQorICAgIH0KKyAgZWxzZSBpZiAoYXJnX2Nv dW50ID09IDEpCisgICAgeworICAgICAgLyogcHlfYXJndHlwZV9saXN0IGlz IG5vdCBhY3R1YWxseSBhIGxpc3QgYnV0IGEgc2luZ2xlIGdkYi5UeXBlCisJ IG9iamVjdC4gICovCisgICAgICBzdHJ1Y3QgdHlwZSAqYXJnX3R5cGUgPSB0 eXBlX29iamVjdF90b190eXBlIChweV9hcmd0eXBlX2xpc3QpOworCisgICAg ICBpZiAoYXJnX3R5cGUgPT0gTlVMTCkKKwlQeUVycl9TZXRTdHJpbmcgKFB5 RXhjX1R5cGVFcnJvciwKKwkJCSBfKCJBcmcgdHlwZSByZXR1cm5lZCBieSB0 aGUgZ2V0X2FyZ3R5cGVzIG1ldGhvZCAiCisJCQkgICAib2YgYSBkZWJ1ZyBt ZXRob2Qgd29ya2VyIG9iamVjdCBpcyBub3QgYSBnZGIuVHlwZSAiCisJCQkg ICAib2JqZWN0LiIpKTsKKyAgICAgIGVsc2UKKwl7CisJICB0eXBlX2FycmF5 WzFdID0gYXJnX3R5cGU7CisJICBpKys7CisJfQorICAgIH0KKyAgaWYgKFB5 RXJyX09jY3VycmVkICgpKQorICAgIHsKKyAgICAgIGdkYnB5X3ByaW50X3N0 YWNrICgpOworICAgICAgZG9fY2xlYW51cHMgKGNsZWFudXBzKTsKKyAgICAg IHhmcmVlICh0eXBlX2FycmF5KTsKKworICAgICAgcmV0dXJuIE5VTEw7Cisg ICAgfQorCisgIC8qIEFkZCB0aGUgdHlwZSBvZiAndGhpcycgYXMgdGhlIGZp cnN0IGFyZ3VtZW50LiAgKi8KKyAgb2JqX3R5cGUgPSB0eXBlX29iamVjdF90 b190eXBlIChleHRfb2JqZWN0LT50aGlzX3R5cGUpOworICB0eXBlX2FycmF5 WzBdID0gbWFrZV9jdl90eXBlICgxLCAwLCBsb29rdXBfcG9pbnRlcl90eXBl IChvYmpfdHlwZSksIE5VTEwpOworICAqbmFyZ3MgPSBpOworCisgIGRvX2Ns ZWFudXBzIChjbGVhbnVwcyk7CisKKyAgcmV0dXJuIHR5cGVfYXJyYXk7Cit9 CisKKy8qIEltcGxlbWVudGF0aW9uIG9mIGludm9rZV9tZXRob2RfZnR5cGUu CisgICBJbnZva2VzIGEgbWV0aG9kIGRlZmluZWQgaW4gUHl0aG9uLiAgVGhl IHZhbHVlIHJldHVybmVkIGJ5IHRoZSBtZXRob2QgaXMKKyAgIHJldHVybmVk LiAgTlVMTCBpcyByZXR1cm5lZCBpbiBjYXNlIG9mIGVycm9ycy4gICovCisK K3N0YXRpYyBzdHJ1Y3QgdmFsdWUgKgorcHlfZXh0X2ZuX2ludm9rZV9tZXRo b2QgKHZvaWQgKmV4dF9vYmosIHN0cnVjdCB2YWx1ZSAqb2JqLCBzdHJ1Y3Qg dmFsdWUgKiphcmdzLAorCQkJIGludCBuYXJncykKK3sKKyAgaW50IGk7Cisg IHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwczsKKyAgUHlPYmplY3QgKnB5X3Zh bHVlX29iaiwgKnB5X2FyZ190dXBsZSwgKnB5X3Jlc3VsdDsKKyAgUHlPYmpl Y3QgKmludm9rZV9tZXRob2Q7CisgIHN0cnVjdCB0eXBlICpvYmpfdHlwZSwg KnRoaXNfdHlwZTsKKyAgc3RydWN0IHZhbHVlICpyZXN1bHQgPSBOVUxMOwor ICBzdHJ1Y3QgcHlfZXh0X29iamVjdCAqcHlfZXh0X29iaiA9IGV4dF9vYmo7 CisgIFB5T2JqZWN0ICpkZWJ1Z21ldGhvZF93b3JrZXIgPSBweV9leHRfb2Jq LT53b3JrZXI7CisKKyAgY2xlYW51cHMgPSBlbnN1cmVfcHl0aG9uX2VudiAo Z2V0X2N1cnJlbnRfYXJjaCAoKSwgY3VycmVudF9sYW5ndWFnZSk7CisKKyAg aW52b2tlX21ldGhvZCA9ICBQeU9iamVjdF9HZXRBdHRyU3RyaW5nIChkZWJ1 Z21ldGhvZF93b3JrZXIsCisJCQkJCSAgIGludm9rZV9tZXRob2RfbmFtZSk7 CisgIGlmIChpbnZva2VfbWV0aG9kID09IE5VTEwpCisgICAgeworICAgICAg Z2RicHlfcHJpbnRfc3RhY2sgKCk7CisgICAgICBkb19jbGVhbnVwcyAoY2xl YW51cHMpOworCisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIG1ha2Vf Y2xlYW51cF9weV9kZWNyZWYgKGludm9rZV9tZXRob2QpOworCisgIGlmICgh UHlDYWxsYWJsZV9DaGVjayAoaW52b2tlX21ldGhvZCkpCisgICAgeworICAg ICAgd2FybmluZyAoXygiQXR0cmlidXRlICclcycgb2YgYSByZWdpc3RlcmVk IFB5dGhvbiBkZWJ1ZyBtZXRob2QgaXMgbm90ICIKKwkJICJjYWxsYWJsZS4g IElnbm9yZWQhIiksIGludm9rZV9tZXRob2RfbmFtZSk7CisgICAgICBkb19j bGVhbnVwcyAoY2xlYW51cHMpOworCisgICAgICByZXR1cm4gTlVMTDsKKyAg ICB9CisKKyAgb2JqX3R5cGUgPSBjaGVja190eXBlZGVmICh2YWx1ZV90eXBl IChvYmopKTsKKyAgdGhpc190eXBlID0gY2hlY2tfdHlwZWRlZiAodHlwZV9v YmplY3RfdG9fdHlwZSAocHlfZXh0X29iai0+dGhpc190eXBlKSk7CisgIGlm IChUWVBFX0NPREUgKG9ial90eXBlKSA9PSBUWVBFX0NPREVfUFRSKQorICAg IHsKKyAgICAgIHN0cnVjdCB0eXBlICp0aGlzX3B0ciA9IGxvb2t1cF9wb2lu dGVyX3R5cGUgKHRoaXNfdHlwZSk7CisKKyAgICAgIGlmICghdHlwZXNfZXF1 YWwgKG9ial90eXBlLCB0aGlzX3B0cikpCisJb2JqID0gdmFsdWVfY2FzdCAo dGhpc19wdHIsIG9iaik7CisgICAgfQorICBlbHNlIGlmIChUWVBFX0NPREUg KG9ial90eXBlKSA9PSBUWVBFX0NPREVfUkVGKQorICAgIHsKKyAgICAgIHN0 cnVjdCB0eXBlICp0aGlzX3JlZiA9IGxvb2t1cF9yZWZlcmVuY2VfdHlwZSAo dGhpc190eXBlKTsKKworICAgICAgaWYgKCF0eXBlc19lcXVhbCAob2JqX3R5 cGUsIHRoaXNfcmVmKSkKKwlvYmogPSB2YWx1ZV9jYXN0ICh0aGlzX3JlZiwg b2JqKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAoIXR5cGVz X2VxdWFsIChvYmpfdHlwZSwgdGhpc190eXBlKSkKKwlvYmogPSB2YWx1ZV9j YXN0ICh0aGlzX3R5cGUsIG9iaik7CisgICAgfQorICBweV92YWx1ZV9vYmog PSB2YWx1ZV90b192YWx1ZV9vYmplY3QgKG9iaik7CisgIGlmIChweV92YWx1 ZV9vYmogPT0gTlVMTCkKKyAgICB7CisgICAgICBnZGJweV9wcmludF9zdGFj ayAoKTsKKyAgICAgIGRvX2NsZWFudXBzIChjbGVhbnVwcyk7CisKKyAgICAg IHJldHVybiBOVUxMOworICAgIH0KKyAgbWFrZV9jbGVhbnVwX3B5X2RlY3Jl ZiAocHlfdmFsdWVfb2JqKTsKKworICBweV9hcmdfdHVwbGUgPSBQeVR1cGxl X05ldyAobmFyZ3MpOworICBpZiAocHlfYXJnX3R1cGxlID09IE5VTEwpCisg ICAgeworICAgICAgZ2RicHlfcHJpbnRfc3RhY2sgKCk7CisgICAgICBkb19j bGVhbnVwcyAoY2xlYW51cHMpOworCisgICAgICByZXR1cm4gTlVMTDsKKyAg ICB9CisgIG1ha2VfY2xlYW51cF9weV9kZWNyZWYgKHB5X2FyZ190dXBsZSk7 CisKKyAgZm9yIChpID0gMDsgaSA8IG5hcmdzOyBpKyspCisgICAgeworICAg ICAgUHlPYmplY3QgKnB5X3ZhbHVlX2FyZyA9IHZhbHVlX3RvX3ZhbHVlX29i amVjdCAoYXJnc1tpXSk7CisKKyAgICAgIGlmIChweV92YWx1ZV9hcmcgPT0g TlVMTCkKKwl7CisJICBnZGJweV9wcmludF9zdGFjayAoKTsKKwkgIGRvX2Ns ZWFudXBzIChjbGVhbnVwcyk7CisJICByZXR1cm4gTlVMTDsKKwl9CisKKyAg ICAgIFB5VHVwbGVfU0VUX0lURU0gKHB5X2FyZ190dXBsZSwgaSwgcHlfdmFs dWVfYXJnKTsKKyAgICB9CisKKyAgcHlfcmVzdWx0ID0gUHlPYmplY3RfQ2Fs bE1ldGhvZE9iakFyZ3MgKGRlYnVnbWV0aG9kX3dvcmtlciwKKwkJCQkJICBw eV9pbnZva2VfbWV0aG9kX25hbWUsCisJCQkJCSAgcHlfdmFsdWVfb2JqLAor CQkJCQkgIHB5X2FyZ190dXBsZSwgTlVMTCk7CisgIGlmIChweV9yZXN1bHQg PT0gTlVMTCkKKyAgICB7CisgICAgICBnZGJweV9wcmludF9zdGFjayAoKTsK KyAgICAgIGRvX2NsZWFudXBzIChjbGVhbnVwcyk7CisKKyAgICAgIHJldHVy biBOVUxMOworICAgIH0KKyAgbWFrZV9jbGVhbnVwX3B5X2RlY3JlZiAocHlf cmVzdWx0KTsKKworICAvKiBDaGVjayB0aGF0IGEgZGVidWcgbWV0aG9kIGRp ZCBub3QgcmV0dXJuIE5vbmUuICAqLworICBpZiAocHlfcmVzdWx0ICE9IFB5 X05vbmUpCisgICAgeworICAgICAgcmVzdWx0ID0gY29udmVydF92YWx1ZV9m cm9tX3B5dGhvbiAocHlfcmVzdWx0KTsKKyAgICAgIGlmIChyZXN1bHQgPT0g TlVMTCkKKwlnZGJweV9wcmludF9zdGFjayAoKTsKKworICAgIH0KKyAgZWxz ZQorICAgIHJlc3VsdCA9IGFsbG9jYXRlX3ZhbHVlIChsb29rdXBfdHlwZW5h bWUgKHB5dGhvbl9sYW5ndWFnZSwgcHl0aG9uX2dkYmFyY2gsCisJCQkJCSAg ICAgICJ2b2lkIiwgTlVMTCwgMCkpOworCisgIGRvX2NsZWFudXBzIChjbGVh bnVwcyk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHN0cnVj dCBleHRfZnVuY19vcHMgcHl0aG9uX2V4dF9sYW5nID0geworICBweV9jbG9u ZV9leHRfb2JqZWN0LAorICBweV9mcmVlX2V4dF9vYmplY3QsCisgIHB5X2Rl YnVnbWV0aG9kX25hbWVfbWF0Y2gsCisgIHB5X2V4dF9mbl9nZXRfYXJndHlw ZXMsCisgIHB5X2V4dF9mbl9pbnZva2VfbWV0aG9kCit9OworCisvKiBDcmVh dGVzIGEgbmV3IHB5dGhvbiBleHRfZnVuY3Rpb25fZGVzY3JpcHRvci4gIFdP UktFUiBpcyB0aGUgY29ycmVzcG9uZGluZworICAgZGVidWcgbWV0aG9kIHdv cmtlciBmb3Igb2JqZWN0IG9mIFRISVNfVFlQRS4gICovCisKK3N0YXRpYyBz dHJ1Y3QgZXh0X2ZuX2Rlc2NyaXB0b3IgKgorbmV3X3B5dGhvbl9leHRfbWV0 aG9kIChQeU9iamVjdCAqd29ya2VyLCBQeU9iamVjdCAqdGhpc190eXBlKQor eworICBzdHJ1Y3QgcHlfZXh0X29iamVjdCAqZXh0X29iamVjdCA9IFhDTkVX IChzdHJ1Y3QgcHlfZXh0X29iamVjdCk7CisKKyAgZXh0X29iamVjdC0+d29y a2VyID0gd29ya2VyOworICBleHRfb2JqZWN0LT50aGlzX3R5cGUgPSB0aGlz X3R5cGU7CisgIFB5X1hJTkNSRUYgKHdvcmtlcik7CisgIFB5X1hJTkNSRUYg KHRoaXNfdHlwZSk7CisKKyAgcmV0dXJuIG5ld19leHRfZnVuY3Rpb24gKCZw eXRob25fZXh0X2xhbmcsIDEsIGV4dF9vYmplY3QpOworfQorCisvKiBJbml0 aWFsaXplcyB0aGUgUHl0aG9uIGRlYnVnIG1ldGhvZCBzdXBwb3J0LiAgKi8K KworaW50CitnZGJweV9pbml0aWFsaXplX2RlYnVnbWV0aG9kcyAodm9pZCkK K3sKKyAgcmVnaXN0ZXJfZXh0X2xhbmcgKCZweXRob25fZXh0X2xhbmcpOwor CisgIHB5X21hdGNoX21ldGhvZF9uYW1lID0gUHlTdHJpbmdfRnJvbVN0cmlu ZyAobWF0Y2hfbWV0aG9kX25hbWUpOworICBpZiAocHlfbWF0Y2hfbWV0aG9k X25hbWUgPT0gTlVMTCkKKyAgICByZXR1cm4gLTE7CisKKyAgcHlfaW52b2tl X21ldGhvZF9uYW1lID0gUHlTdHJpbmdfRnJvbVN0cmluZyAoaW52b2tlX21l dGhvZF9uYW1lKTsKKyAgaWYgKHB5X2ludm9rZV9tZXRob2RfbmFtZSA9PSBO VUxMKQorICAgIHJldHVybiAtMTsKKworICBweV9nZXRfYXJndHlwZXNfbWV0 aG9kX25hbWUgPSBQeVN0cmluZ19Gcm9tU3RyaW5nIChnZXRfYXJndHlwZXNf bWV0aG9kX25hbWUpOworICBpZiAocHlfZ2V0X2FyZ3R5cGVzX21ldGhvZF9u YW1lID09IE5VTEwpCisgICAgcmV0dXJuIC0xOworCisgIHJldHVybiAxOwor fQorCisjZW5kaWYgLyogSEFWRV9QWVRIT04gKi8KZGlmZiAtLWdpdCBhL2dk Yi9weXRob24vcHktb2JqZmlsZS5jIGIvZ2RiL3B5dGhvbi9weS1vYmpmaWxl LmMKaW5kZXggOTdmYjBiZS4uZmQ0MjU0YSAxMDA2NDQKLS0tIGEvZ2RiL3B5 dGhvbi9weS1vYmpmaWxlLmMKKysrIGIvZ2RiL3B5dGhvbi9weS1vYmpmaWxl LmMKQEAgLTM3LDYgKzM3LDkgQEAgdHlwZWRlZiBzdHJ1Y3QKICAgUHlPYmpl Y3QgKmZyYW1lX2ZpbHRlcnM7CiAgIC8qIFRoZSB0eXBlLXByaW50ZXIgbGlz dC4gICovCiAgIFB5T2JqZWN0ICp0eXBlX3ByaW50ZXJzOworCisgIC8qIFRo ZSBkZWJ1ZyBtZXRob2QgbWF0Y2hlciBsaXN0LiAgKi8KKyAgUHlPYmplY3Qg KmRlYnVnbWV0aG9kX21hdGNoZXJzOwogfSBvYmpmaWxlX29iamVjdDsKIAog c3RhdGljIFB5VHlwZU9iamVjdCBvYmpmaWxlX29iamVjdF90eXBlCkBAIC02 Nyw2ICs3MCw3IEBAIG9iamZweV9kZWFsbG9jIChQeU9iamVjdCAqbykKICAg UHlfWERFQ1JFRiAoc2VsZi0+cHJpbnRlcnMpOwogICBQeV9YREVDUkVGIChz ZWxmLT5mcmFtZV9maWx0ZXJzKTsKICAgUHlfWERFQ1JFRiAoc2VsZi0+dHlw ZV9wcmludGVycyk7CisgIFB5X1hERUNSRUYgKHNlbGYtPmRlYnVnbWV0aG9k X21hdGNoZXJzKTsKICAgUHlfVFlQRSAoc2VsZiktPnRwX2ZyZWUgKHNlbGYp OwogfQogCkBAIC05OSw2ICsxMDMsMTMgQEAgb2JqZnB5X25ldyAoUHlUeXBl T2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmtleXdv cmRzKQogCSAgUHlfREVDUkVGIChzZWxmKTsKIAkgIHJldHVybiBOVUxMOwog CX0KKworICAgICAgc2VsZi0+ZGVidWdtZXRob2RfbWF0Y2hlcnMgPSBQeUxp c3RfTmV3ICgwKTsKKyAgICAgIGlmIChzZWxmLT5kZWJ1Z21ldGhvZF9tYXRj aGVycyA9PSBOVUxMKQorCXsKKwkgIFB5X0RFQ1JFRiAoc2VsZik7CisJICBy ZXR1cm4gTlVMTDsKKwl9CiAgICAgfQogICByZXR1cm4gKFB5T2JqZWN0ICop IHNlbGY7CiB9CkBAIC0xOTMsNiArMjA0LDE3IEBAIG9iamZweV9nZXRfdHlw ZV9wcmludGVycyAoUHlPYmplY3QgKm8sIHZvaWQgKmlnbm9yZSkKICAgcmV0 dXJuIHNlbGYtPnR5cGVfcHJpbnRlcnM7CiB9CiAKKy8qIEdldCB0aGUgJ2Rl YnVnbWV0aG9kX21hdGNoZXJzJyBhdHRyaWJ1dGUuICAqLworCitQeU9iamVj dCAqCitvYmpmcHlfZ2V0X2RlYnVnbWV0aG9kX21hdGNoZXJzIChQeU9iamVj dCAqbywgdm9pZCAqaWdub3JlKQoreworICBvYmpmaWxlX29iamVjdCAqc2Vs ZiA9IChvYmpmaWxlX29iamVjdCAqKSBvOworCisgIFB5X0lOQ1JFRiAoc2Vs Zi0+ZGVidWdtZXRob2RfbWF0Y2hlcnMpOworICByZXR1cm4gc2VsZi0+ZGVi dWdtZXRob2RfbWF0Y2hlcnM7Cit9CisKIC8qIFNldCB0aGUgJ3R5cGVfcHJp bnRlcnMnIGF0dHJpYnV0ZS4gICovCiAKIHN0YXRpYyBpbnQKQEAgLTI5Miw2 ICszMTQsMTMgQEAgb2JqZmlsZV90b19vYmpmaWxlX29iamVjdCAoc3RydWN0 IG9iamZpbGUgKm9iamZpbGUpCiAJICAgICAgcmV0dXJuIE5VTEw7CiAJICAg IH0KIAorCSAgb2JqZWN0LT5kZWJ1Z21ldGhvZF9tYXRjaGVycyA9IFB5TGlz dF9OZXcgKDApOworCSAgaWYgKG9iamVjdC0+ZGVidWdtZXRob2RfbWF0Y2hl cnMgPT0gTlVMTCkKKwkgICAgeworCSAgICAgIFB5X0RFQ1JFRiAob2JqZWN0 KTsKKwkgICAgICByZXR1cm4gTlVMTDsKKwkgICAgfQorCiAJICBzZXRfb2Jq ZmlsZV9kYXRhIChvYmpmaWxlLCBvYmpmcHlfb2JqZmlsZV9kYXRhX2tleSwg b2JqZWN0KTsKIAl9CiAgICAgfQpAQCAtMzMzLDYgKzM2Miw4IEBAIHN0YXRp YyBQeUdldFNldERlZiBvYmpmaWxlX2dldHNldFtdID0KICAgICBvYmpmcHlf c2V0X2ZyYW1lX2ZpbHRlcnMsICJGcmFtZSBGaWx0ZXJzLiIsIE5VTEwgfSwK ICAgeyAidHlwZV9wcmludGVycyIsIG9iamZweV9nZXRfdHlwZV9wcmludGVy cywgb2JqZnB5X3NldF90eXBlX3ByaW50ZXJzLAogICAgICJUeXBlIHByaW50 ZXJzLiIsIE5VTEwgfSwKKyAgeyAiZGVidWdtZXRob2RfbWF0Y2hlcnMiLCBv YmpmcHlfZ2V0X2RlYnVnbWV0aG9kX21hdGNoZXJzLCBOVUxMLAorICAgICJE ZWJ1ZyBtZXRob2RzLiIsIE5VTEwgfSwKICAgeyBOVUxMIH0KIH07CiAKZGlm ZiAtLWdpdCBhL2dkYi9weXRob24vcHktcHJvZ3NwYWNlLmMgYi9nZGIvcHl0 aG9uL3B5LXByb2dzcGFjZS5jCmluZGV4IGNkYTVhODYuLmM2NWQ4NjMgMTAw NjQ0Ci0tLSBhL2dkYi9weXRob24vcHktcHJvZ3NwYWNlLmMKKysrIGIvZ2Ri L3B5dGhvbi9weS1wcm9nc3BhY2UuYwpAQCAtMzksNiArMzksOSBAQCB0eXBl ZGVmIHN0cnVjdAogICBQeU9iamVjdCAqZnJhbWVfZmlsdGVyczsKICAgLyog VGhlIHR5cGUtcHJpbnRlciBsaXN0LiAgKi8KICAgUHlPYmplY3QgKnR5cGVf cHJpbnRlcnM7CisKKyAgLyogVGhlIGRlYnVnIG1ldGhvZCBsaXN0LiAgKi8K KyAgUHlPYmplY3QgKmRlYnVnbWV0aG9kX21hdGNoZXJzOwogfSBwc3BhY2Vf b2JqZWN0OwogCiBzdGF0aWMgUHlUeXBlT2JqZWN0IHBzcGFjZV9vYmplY3Rf dHlwZQpAQCAtNzUsNiArNzgsNyBAQCBwc3B5X2RlYWxsb2MgKFB5T2JqZWN0 ICpzZWxmKQogICBQeV9YREVDUkVGIChwc19zZWxmLT5wcmludGVycyk7CiAg IFB5X1hERUNSRUYgKHBzX3NlbGYtPmZyYW1lX2ZpbHRlcnMpOwogICBQeV9Y REVDUkVGIChwc19zZWxmLT50eXBlX3ByaW50ZXJzKTsKKyAgUHlfWERFQ1JF RiAocHNfc2VsZi0+ZGVidWdtZXRob2RfbWF0Y2hlcnMpOwogICBQeV9UWVBF IChzZWxmKS0+dHBfZnJlZSAoc2VsZik7CiB9CiAKQEAgLTEwNyw2ICsxMTEs MTMgQEAgcHNweV9uZXcgKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3Qg KmFyZ3MsIFB5T2JqZWN0ICprZXl3b3JkcykKIAkgIFB5X0RFQ1JFRiAoc2Vs Zik7CiAJICByZXR1cm4gTlVMTDsKIAl9CisKKyAgICAgIHNlbGYtPmRlYnVn bWV0aG9kX21hdGNoZXJzID0gUHlMaXN0X05ldyAoMCk7CisgICAgICBpZiAo c2VsZi0+ZGVidWdtZXRob2RfbWF0Y2hlcnMgPT0gTlVMTCkKKwl7CisJICBQ eV9ERUNSRUYgKHNlbGYpOworCSAgcmV0dXJuIE5VTEw7CisJfQogICAgIH0K ICAgcmV0dXJuIChQeU9iamVjdCAqKSBzZWxmOwogfQpAQCAtMjAxLDYgKzIx MiwxNyBAQCBwc3B5X2dldF90eXBlX3ByaW50ZXJzIChQeU9iamVjdCAqbywg dm9pZCAqaWdub3JlKQogICByZXR1cm4gc2VsZi0+dHlwZV9wcmludGVyczsK IH0KIAorLyogR2V0IHRoZSAnZGVidWdtZXRob2RfbWF0Y2hlcnMnIGF0dHJp YnV0ZS4gICovCisKK1B5T2JqZWN0ICoKK3BzcHlfZ2V0X2RlYnVnbWV0aG9k X21hdGNoZXJzIChQeU9iamVjdCAqbywgdm9pZCAqaWdub3JlKQoreworICBw c3BhY2Vfb2JqZWN0ICpzZWxmID0gKHBzcGFjZV9vYmplY3QgKikgbzsKKwor ICBQeV9JTkNSRUYgKHNlbGYtPmRlYnVnbWV0aG9kX21hdGNoZXJzKTsKKyAg cmV0dXJuIHNlbGYtPmRlYnVnbWV0aG9kX21hdGNoZXJzOworfQorCiAvKiBT ZXQgdGhlICd0eXBlX3ByaW50ZXJzJyBhdHRyaWJ1dGUuICAqLwogCiBzdGF0 aWMgaW50CkBAIC0yODgsNiArMzEwLDEzIEBAIHBzcGFjZV90b19wc3BhY2Vf b2JqZWN0IChzdHJ1Y3QgcHJvZ3JhbV9zcGFjZSAqcHNwYWNlKQogCSAgICAg IHJldHVybiBOVUxMOwogCSAgICB9CiAKKwkgIG9iamVjdC0+ZGVidWdtZXRo b2RfbWF0Y2hlcnMgPSBQeUxpc3RfTmV3ICgwKTsKKwkgIGlmIChvYmplY3Qt PmRlYnVnbWV0aG9kX21hdGNoZXJzID09IE5VTEwpCisJICAgIHsKKwkgICAg ICBQeV9ERUNSRUYgKG9iamVjdCk7CisJICAgICAgcmV0dXJuIE5VTEw7CisJ ICAgIH0KKwogCSAgc2V0X3Byb2dyYW1fc3BhY2VfZGF0YSAocHNwYWNlLCBw c3B5X3BzcGFjZV9kYXRhX2tleSwgb2JqZWN0KTsKIAl9CiAgICAgfQpAQCAt MzIwLDYgKzM0OSw4IEBAIHN0YXRpYyBQeUdldFNldERlZiBwc3BhY2VfZ2V0 c2V0W10gPQogICAgICJGcmFtZSBmaWx0ZXJzLiIsIE5VTEwgfSwKICAgeyAi dHlwZV9wcmludGVycyIsIHBzcHlfZ2V0X3R5cGVfcHJpbnRlcnMsIHBzcHlf c2V0X3R5cGVfcHJpbnRlcnMsCiAgICAgIlR5cGUgcHJpbnRlcnMuIiwgTlVM TCB9LAorICB7ICJkZWJ1Z21ldGhvZF9tYXRjaGVycyIsIHBzcHlfZ2V0X2Rl YnVnbWV0aG9kX21hdGNoZXJzLCBOVUxMLAorICAgICJEZWJ1ZyBtZXRob2Rz LiIsIE5VTEwgfSwKICAgeyBOVUxMIH0KIH07CiAKZGlmZiAtLWdpdCBhL2dk Yi9weXRob24vcHl0aG9uLWludGVybmFsLmggYi9nZGIvcHl0aG9uL3B5dGhv bi1pbnRlcm5hbC5oCmluZGV4IGVmNWNkM2YuLjhlNThjNjIgMTAwNjQ0Ci0t LSBhL2dkYi9weXRob24vcHl0aG9uLWludGVybmFsLmgKKysrIGIvZ2RiL3B5 dGhvbi9weXRob24taW50ZXJuYWwuaApAQCAtMzE3LDExICszMTcsMTMgQEAg UHlPYmplY3QgKnBzcGFjZV90b19wc3BhY2Vfb2JqZWN0IChzdHJ1Y3QgcHJv Z3JhbV9zcGFjZSAqKQogICAgIENQWUNIRUNLRVJfUkVUVVJOU19CT1JST1dF RF9SRUY7CiBQeU9iamVjdCAqcHNweV9nZXRfcHJpbnRlcnMgKFB5T2JqZWN0 ICosIHZvaWQgKik7CiBQeU9iamVjdCAqcHNweV9nZXRfZnJhbWVfZmlsdGVy cyAoUHlPYmplY3QgKiwgdm9pZCAqKTsKK1B5T2JqZWN0ICpwc3B5X2dldF9k ZWJ1Z21ldGhvZF9tYXRjaGVycyAoUHlPYmplY3QgKiwgdm9pZCAqKTsKIAog UHlPYmplY3QgKm9iamZpbGVfdG9fb2JqZmlsZV9vYmplY3QgKHN0cnVjdCBv YmpmaWxlICopCiAgICAgQ1BZQ0hFQ0tFUl9SRVRVUk5TX0JPUlJPV0VEX1JF RjsKIFB5T2JqZWN0ICpvYmpmcHlfZ2V0X3ByaW50ZXJzIChQeU9iamVjdCAq LCB2b2lkICopOwogUHlPYmplY3QgKm9iamZweV9nZXRfZnJhbWVfZmlsdGVy cyAoUHlPYmplY3QgKiwgdm9pZCAqKTsKK1B5T2JqZWN0ICpvYmpmcHlfZ2V0 X2RlYnVnbWV0aG9kX21hdGNoZXJzIChQeU9iamVjdCAqLCB2b2lkICopOwog CiBQeU9iamVjdCAqZ2RiYXJjaF90b19hcmNoX29iamVjdCAoc3RydWN0IGdk YmFyY2ggKmdkYmFyY2gpOwogCkBAIC00MDIsNiArNDA0LDggQEAgaW50IGdk YnB5X2luaXRpYWxpemVfbmV3X29iamZpbGVfZXZlbnQgKHZvaWQpCiAgIENQ WUNIRUNLRVJfTkVHQVRJVkVfUkVTVUxUX1NFVFNfRVhDRVBUSU9OOwogaW50 IGdkYnB5X2luaXRpYWxpemVfYXJjaCAodm9pZCkKICAgQ1BZQ0hFQ0tFUl9O RUdBVElWRV9SRVNVTFRfU0VUU19FWENFUFRJT047CitpbnQgZ2RicHlfaW5p dGlhbGl6ZV9kZWJ1Z21ldGhvZHMgKHZvaWQpCisgIENQWUNIRUNLRVJfTkVH QVRJVkVfUkVTVUxUX1NFVFNfRVhDRVBUSU9OOwogCiBzdHJ1Y3QgY2xlYW51 cCAqbWFrZV9jbGVhbnVwX3B5X2RlY3JlZiAoUHlPYmplY3QgKnB5KTsKIHN0 cnVjdCBjbGVhbnVwICptYWtlX2NsZWFudXBfcHlfeGRlY3JlZiAoUHlPYmpl Y3QgKnB5KTsKZGlmZiAtLWdpdCBhL2dkYi9weXRob24vcHl0aG9uLmMgYi9n ZGIvcHl0aG9uL3B5dGhvbi5jCmluZGV4IDMzN2MxNzAuLmQwZTBhYmEgMTAw NjQ0Ci0tLSBhL2dkYi9weXRob24vcHl0aG9uLmMKKysrIGIvZ2RiL3B5dGhv bi9weXRob24uYwpAQCAtMTY4OCw3ICsxNjg4LDggQEAgbWVzc2FnZSA9PSBh biBlcnJvciBtZXNzYWdlIHdpdGhvdXQgYSBzdGFjayB3aWxsIGJlIHByaW50 ZWQuIiksCiAgICAgICB8fCBnZGJweV9pbml0aWFsaXplX2V4aXRlZF9ldmVu dCAoKSA8IDAKICAgICAgIHx8IGdkYnB5X2luaXRpYWxpemVfdGhyZWFkX2V2 ZW50ICgpIDwgMAogICAgICAgfHwgZ2RicHlfaW5pdGlhbGl6ZV9uZXdfb2Jq ZmlsZV9ldmVudCAoKSAgPCAwCi0gICAgICB8fCBnZGJweV9pbml0aWFsaXpl X2FyY2ggKCkgPCAwKQorICAgICAgfHwgZ2RicHlfaW5pdGlhbGl6ZV9hcmNo ICgpIDwgMAorICAgICAgfHwgZ2RicHlfaW5pdGlhbGl6ZV9kZWJ1Z21ldGhv ZHMgKCkgPCAwKQogICAgIGdvdG8gZmFpbDsKIAogICBvYnNlcnZlcl9hdHRh Y2hfYmVmb3JlX3Byb21wdCAoYmVmb3JlX3Byb21wdF9ob29rKTsKZGlmZiAt LWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1kZWJ1Z21ldGhv ZHMuY2MgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZGVidWdtZXRo b2RzLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBm ZmM1OWYKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5w eXRob24vcHktZGVidWdtZXRob2RzLmNjCkBAIC0wLDAgKzEsMTkyIEBACisv KiBUaGlzIHRlc3RjYXNlIGlzIHBhcnQgb2YgR0RCLCB0aGUgR05VIGRlYnVn Z2VyLgorCisgICBDb3B5cmlnaHQgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAg IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNl LCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K KworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90 LCBzZWUgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisK KyNpbmNsdWRlIDxpb3N0cmVhbT4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsK KworbmFtZXNwYWNlIGRvcAoreworCitjbGFzcyBBCit7CisgcHVibGljOgor ICBpbnQgYTsKKyAgaW50IGFycmF5IFsxMF07CisgIHZpcnR1YWwgfkEgKCk7 CisgIGludCBvcGVyYXRvcisgKGNvbnN0IEEgJm9iaik7CisgIHZpcnR1YWwg aW50IG9wZXJhdG9yLSAoY29uc3QgQSAmb2JqKTsKKyAgdmlydHVhbCBpbnQg Z2V0YSAoKTsKK307CisKK0E6On5BICgpIHsgfQorCitpbnQKK0E6Om9wZXJh dG9yKyAoY29uc3QgQSAmb2JqKQoreworICBjb3V0IDw8ICJGcm9tIENDIDxB X3BsdXNfQT46IiA8PCBlbmRsOworICByZXR1cm4gYSArIG9iai5hOworfQor CitpbnQgQTo6b3BlcmF0b3ItIChjb25zdCBBICZvYmopCit7CisgIGNvdXQg PDwgIkZyb20gQ0MgPEFfbWludXNfQT46IiA8PCBlbmRsOworICByZXR1cm4g YSAtIG9iai5hOworfQorCitpbnQgQTo6Z2V0YSAodm9pZCkKK3sKKyAgY291 dCA8PCAiRnJvbSBDQyBnZXRhOiIgPDwgZW5kbDsKKyAgcmV0dXJuIGE7Cit9 CisKK2NsYXNzIEIgOiBwdWJsaWMgQQoreworIHB1YmxpYzoKKyAgdmlydHVh bCBpbnQgb3BlcmF0b3IqIChjb25zdCBCICZvYmopOworfTsKKworaW50CitC OjpvcGVyYXRvciogKGNvbnN0IEIgJm9iaikKK3sKKyAgY291dCA8PCAiRnJv bSBDQyA8Ql9zdGFyX0I+OiIgPDwgZW5kbDsKKyAgcmV0dXJuIGEgKiBvYmou YTsKK30KKwordHlwZWRlZiBCIEJ0OworCit0eXBlZGVmIEJ0IEJ0dDsKKwor Y2xhc3MgQyA6IHB1YmxpYyBCdAoreworIHB1YmxpYzoKKyAgdmlydHVhbCB+ QygpOworfTsKKworQzo6fkMgKCkgeyB9CisKK2NsYXNzIEQgOiBwdWJsaWMg QgoreworIHB1YmxpYzoKKyAgLyogVGhpcyBjbGFzcyBvdmVycmlkZXMgdGhl IHZpcnR1YWwgb3BlcmF0b3IqIGRlZmluZWQgaW4gQi4gIFRoZQorICAgICBh c3NvY2lhdGVkIFB5dGhvbiBzY3JpcHQgcmVwbGFjZXMgQjo6b3BlcmF0b3Iq IGJ1dCBub3QgRDo6b3BlcmF0b3IqLgorICAgICBIZW5jZSwgaWYgd2UgaGF2 ZSBhIHJlZmVyZW5jZSBwb2ludGluZyB0byBhbiBpbnN0YW5jZSBvZiBELCB0 aGUgQysrCisgICAgIHZlcnNpb24gb2YgRDo6b3BlcmF0b3IqIHNob3VsZCBi ZSBpbnZva2VkIGFuZCBub3QgdGhlIFB5dGhvbiB2ZXJzaW9uCisgICAgIEI6 Om9wZXJhdG9yKiBldmVuIGFmdGVyIGxvYWRpbmcgdGhlIHB5dGhvbiBzY3Jp cHQuICAqLworICB2aXJ0dWFsIGludCBvcGVyYXRvciogKGNvbnN0IEIgJm9i aik7Cit9OworCitpbnQKK0Q6Om9wZXJhdG9yKiAoY29uc3QgQiAmb2JqKQor eworICBjb3V0IDw8ICJGcm9tIENDIDxEX3N0YXJfRD46IiA8PCBlbmRsOwor ICByZXR1cm4gYSAqIG9iai5hOworfQorCitjbGFzcyBFIDogcHVibGljIEEK K3sKKyBwdWJsaWM6CisgIC8qIFRoaXMgY2xhc3MgaGFzIGEgbWVtYmVyIG5h bWVkICdhJywgd2hpbGUgdGhlIGJhc2UgY2xhc3MgYWxzbyBoYXMgYQorICAg ICBtZW1iZXIgbmFtZWQgJ2EnLiAgV2hlbiBvbmUgaW52b2tlcyBBOjpnZXRh KCksIEE6OmEgc2hvdWxkIGJlCisgICAgIHJldHVybmVkIGFuZCBub3QgRTo6 YSBhcyB0aGUgJ2dldGEnIG1ldGhvZCBpcyBkZWZpbmVkIG9uIGNsYXNzICdB Jy4KKyAgICAgVGhpcyBjbGFzcyB0ZXN0cyB0aGlzIGFzcGVjdCBvZiBkZWJ1 ZyBtZXRob2RzLiAgKi8KKyAgaW50IGE7Cit9OworCit0ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4KK2NsYXNzIEcKK3sKKyBwdWJsaWM6CisgIHRlbXBsYXRlIDx0 eXBlbmFtZSBUMT4KKyAgaW50IHNpemVfZGlmZiAoKTsKKworICB0ZW1wbGF0 ZSA8aW50IE0+CisgIGludCBzaXplX211bCAoKTsKKworICB0ZW1wbGF0ZSA8 dHlwZW5hbWUgVDE+CisgIFQgbXVsKGNvbnN0IFQxIHQxKTsKKworIHB1Ymxp YzoKKyAgVCB0OworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit0ZW1w bGF0ZSA8dHlwZW5hbWUgVDE+CitpbnQKK0c8VD46OnNpemVfZGlmZiAoKQor eworICBjb3V0IDw8ICJGcm9tIENDIEc8Pjo6c2l6ZV9kaWZmOiIgPDwgZW5k bDsKKyAgcmV0dXJuIHNpemVvZiAoVDEpIC0gc2l6ZW9mIChUKTsKK30KKwor dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZSA8aW50IE0+CitpbnQK K0c8VD46OnNpemVfbXVsICgpCit7CisgIGNvdXQgPDwgIkZyb20gQ0MgRzw+ OjpzaXplX211bDoiIDw8IGVuZGw7CisgIHJldHVybiBNICogc2l6ZW9mIChU KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZSA8dHlw ZW5hbWUgVDE+CitUCitHPFQ+OjptdWwgKGNvbnN0IFQxIHQxKQoreworICBj b3V0IDw8ICJGcm9tIENDIEc8Pjo6bXVsOiIgPDwgZW5kbDsKKyAgcmV0dXJu IHQxICogdDsKK30KKworfQorCit1c2luZyBuYW1lc3BhY2UgZG9wOworCitp bnQgbWFpbih2b2lkKQoreworICBBIGExLCBhMjsKKyAgYTEuYSA9IDU7Cisg IGEyLmEgPSAxMDsKKyAgQyBjMTsKKyAgYzEuYSA9IDIwOworICBCIGIxOwor ICBiMS5hID0gMzA7CisgIEQgZDE7CisgIGQxLmEgPSA1MDsKKyAgQnQgYnQ7 CisgIGJ0LmEgPSA0MDsKKyAgQSAmcmVmX2MgPSBjMTsKKyAgQiAmcmVmX2Qg PSBkMTsKKyAgQnR0IGJ0dDsKKyAgYnR0LmEgPSAtNTsKKyAgRzxpbnQ+IGcs ICpnX3B0cjsKKyAgZy50ID0gNTsKKyAgZ19wdHIgPSAmZzsKKyAgRSBlOwor ICBlLmEgPSAxMDAwOworICBlLkE6OmEgPSAxMDA7CisKKyAgaW50IGRpZmYg PSBnLnNpemVfZGlmZjxmbG9hdD4gKCk7CisgIGludCBzbXVsID0gZy5zaXpl X211bDwyPiAoKTsKKyAgaW50IG11bCA9IGcubXVsICgxLjApOworCisgIGZv ciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykKKyAgICB7CisgICAgICBhMS5h cnJheVtpXSA9IGEyLmFycmF5W2ldID0gaTsKKyAgICB9CisKKyAgcmV0dXJu IDA7IC8qIEJyZWFrIGhlcmUuICAqLyAKK30KZGlmZiAtLWdpdCBhL2dkYi90 ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1kZWJ1Z21ldGhvZHMuZXhwIGIvZ2Ri L3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWRlYnVnbWV0aG9kcy5leHAKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThkOGQ1MgotLS0g L2Rldi9udWxsCisrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1k ZWJ1Z21ldGhvZHMuZXhwCkBAIC0wLDAgKzEsMTI1IEBACisjIENvcHlyaWdo dCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisj IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhp cyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy8+LgorCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHREIg dGVzdHN1aXRlLiAgSXQgdGVzdHMgdGhlIGRlYnVnIG1ldGhvZHMKKyMgZmVh dHVyZSBpbiB0aGUgUHl0aG9uIGV4dGVuc2lvbiBsYW5ndWFnZS4KKworbG9h ZF9saWIgZ2RiLXB5dGhvbi5leHAKKworaWYgeyBbc2tpcF9jcGx1c190ZXN0 c10gfSB7IGNvbnRpbnVlIH0KKworc3RhbmRhcmRfdGVzdGZpbGUgcHktZGVi dWdtZXRob2RzLmNjCisKK2lmIHtbcHJlcGFyZV9mb3JfdGVzdGluZyAkdGVz dGZpbGUuZXhwICR0ZXN0ZmlsZSAkc3JjZmlsZSB7ZGVidWcgYysrfV19IHsK KyAgICByZXR1cm4gLTEKK30KKworIyBTa2lwIGFsbCB0ZXN0cyBpZiBQeXRo b24gc2NyaXB0aW5nIGlzIG5vdCBlbmFibGVkLgoraWYgeyBbc2tpcF9weXRo b25fdGVzdHNdIH0geyBjb250aW51ZSB9CisKK2lmICFbcnVudG9fbWFpbl0g eworICAgcmV0dXJuIC0xCit9CisKK3NldCBkZWJ1Z19tZXRob2RzX3Njcmlw dCAiJHtzcmNkaXJ9LyR7c3ViZGlyfS8ke3Rlc3RmaWxlfS5weSIKKworZ2Ri X2JyZWFrcG9pbnQgW2dkYl9nZXRfbGluZV9udW1iZXIgIkJyZWFrIGhlcmUu Il0KK2dkYl9jb250aW51ZV90b19icmVha3BvaW50ICJCcmVhayBoZXJlIiAi LipCcmVhayBoZXJlLioiCisKKyMgVGVzdHMgYmVmb3JlIGxvYWRpbmcgdGhl IGRlYnVnIG1ldGhvZHMuCitnZGJfdGVzdCAicCBhMSArIGEyIiAiRnJvbSBD QyA8QV9wbHVzX0E+LioxNSIgIkJlZm9yZTogYTEgKyBhMiIKK2dkYl90ZXN0 ICJwIGEyIC0gYTEiICJGcm9tIENDIDxBX21pbnVzX0E+Lio1IiAiQmVmb3Jl OiBhMSAtIGEyIgorZ2RiX3Rlc3QgInAgYjEgLSBhMSIgIkZyb20gQ0MgPEFf bWludXNfQT4uKjI1IiAiQmVmb3JlOiBiMSAtIGExIgorZ2RiX3Rlc3QgInAg YzEgLSBhMSIgIkZyb20gQ0MgPEFfbWludXNfQT4uKjE1IiAiQmVmb3JlOiBj MSAtIGExIgorZ2RiX3Rlc3QgInAgYzEgLSBjMSIgIkZyb20gQ0MgPEFfbWlu dXNfQT4uKjAiICJCZWZvcmU6IGMxIC0gYzEiCitnZGJfdGVzdCAicCBhMS5n ZXRhKCkiICJGcm9tIENDIGdldGEuKjUiICJCZWZvcmU6IGExLmdldGEoKSIK K2dkYl90ZXN0ICJwIHJlZl9jIC0gYTEiICJGcm9tIENDIDxBX21pbnVzX0E+ LioxNSIgIkJlZm9yZTogcmVmX2MgLSBhMSIKK2dkYl90ZXN0ICJwIHJlZl9j IC0gYzEiICJGcm9tIENDIDxBX21pbnVzX0E+LiowIiAiQmVmb3JlOiByZWZf YyAtIGMxIgorZ2RiX3Rlc3QgInAgYjEgKiBiMSIgIkZyb20gQ0MgPEJfc3Rh cl9CPi4qOTAwIiAiQmVmb3JlOiBiMSAqIGIxIgorZ2RiX3Rlc3QgInAgcmVm X2MgKiBiMSIgIk5vIHN5bWJvbC4qIiAiQmVmb3JlOiByZWZfYyAqIGIxIgor Z2RiX3Rlc3QgInAgcmVmX2QgKiBiMSIgIkZyb20gQ0MgPERfc3Rhcl9EPi4q MTUwMCIgIkJlZm9yZTogcmVmX2QgKiBiMSIKK2dkYl90ZXN0ICJwIGJ0ICog YzEiICJGcm9tIENDIDxCX3N0YXJfQj4uKjgwMCIgIkJlZm9yZTogYnQgKiBj MSIKK2dkYl90ZXN0ICJwICsrYTEiICJObyBzeW1ib2wuKiIgIkJlZm9yZTog KythMSIKK2dkYl90ZXN0ICJwIGExLmdldGFycmF5aW5kKDUpIiAiQ291bGRu J3QgZmluZCBtZXRob2QuKiIgXAorICAiQmVmb3JlOiBhMS5nZXRhcnJheWlu ZCg1KSIKK2dkYl90ZXN0ICJwIGUuZ2V0YSgpIiAiRnJvbSBDQyBnZXRhLiox MDAiICJCZWZvcmU6IGUuZ2V0YSgpIgorZ2RiX3Rlc3QgInAgZy5zaXplX2Rp ZmY8ZmxvYXQ+KCkiICJGcm9tIENDIEc8Pjo6c2l6ZV9kaWZmLioiIFwKKyAg IkJlZm9yZTogZy5zaXplX2RpZmY8ZmxvYXQ+KCkiCitnZGJfdGVzdCAicCBn LnNpemVfZGlmZjx1bnNpZ25lZCBsb25nPigpIiAiQ291bGRuJ3QgZmluZCBt ZXRob2QuKiIgXAorICAiQmVmb3JlOiBnLnNpemVfZGlmZjx1bnNpZ25lZCBs b25nPigpIgorZ2RiX3Rlc3QgInAgZy5zaXplX211bDwyPigpIiAiRnJvbSBD QyBHPD46OnNpemVfbXVsLioiIFwKKyAgIkJlZm9yZTogZy5zaXplX211bDwy PigpIgorZ2RiX3Rlc3QgInAgZy5zaXplX211bDw1PigpIiAiQ291bGRuJ3Qg ZmluZCBtZXRob2QuKiIgXAorICAiQmVmb3JlOiBnLnNpemVfbXVsPDU+KCki CitnZGJfdGVzdCAicCBnLm11bDxkb3VibGU+KDIuMCkiICJGcm9tIENDIEc8 Pjo6bXVsLioiIFwKKyAgIkJlZm9yZTogZy5tdWw8ZG91YmxlPigyLjApIgor Z2RiX3Rlc3QgInAgZy5tdWw8Y2hhcj4oJ2EnKSIgIkNvdWxkbid0IGZpbmQg bWV0aG9kLioiIFwKKyAgIkJlZm9yZTogZy5tdWw8Y2hhcj4oJ2EnKSIKKwor IyBMb2FkIHRoZSBzY3JpcHQgd2hpY2ggYWRkcyB0aGUgZGVidWcgbWV0aG9k cy4KK2dkYl90ZXN0X25vX291dHB1dCAic291cmNlICR7ZGVidWdfbWV0aG9k c19zY3JpcHR9IiAibG9hZCB0aGUgc2NyaXB0IGZpbGUiCisKKyMgVGVzdHMg YWZ0ZXIgbG9hZGluZyBkZWJ1ZyBtZXRob2RzLgorZ2RiX3Rlc3QgInAgYTEg KyBhMiIgIkZyb20gUHl0aG9uIDxBX3BsdXNfQT4uKjE1IiAiQWZ0ZXI6IGEx ICsgYTIiCitnZGJfdGVzdCAicCBhMiAtIGExIiAiRnJvbSBDQyA8QV9taW51 c19BPi4qNSIgIkFmdGVyOiBhMSAtIGEyIgorZ2RiX3Rlc3QgInAgYjEgLSBh MSIgIkZyb20gQ0MgPEFfbWludXNfQT4uKjI1IiAiQWZ0ZXI6IGIxIC0gYTIi CitnZGJfdGVzdCAicCBjMSAtIGExIiAiRnJvbSBDQyA8QV9taW51c19BPi4q MTUiICJBZnRlcjogYzEgLSBhMSIKK2dkYl90ZXN0ICJwIGMxIC0gYzEiICJG cm9tIFB5dGhvbiA8Q19taW51c19DPi4qMCIgIkFmdGVyOiBjMSAtIGMxIgor Z2RiX3Rlc3QgInAgYTEuZ2V0YSgpIiAiRnJvbSBQeXRob24gPEFfZ2V0YT4u KjUiICJBZnRlcjogYTEuZ2V0YSgpIgorZ2RiX3Rlc3QgInAgcmVmX2MgLSBh MSIgIkZyb20gQ0MgPEFfbWludXNfQT4uKjE1IiAiQWZ0ZXI6IHJlZl9jIC0g YTEiCitnZGJfdGVzdCAicCByZWZfYyAtIGMxIiAiRnJvbSBQeXRob24gPENf bWludXNfQz4uKjAiICJBZnRlcjogcmVmX2MgLSBjMSIKK2dkYl90ZXN0ICJw IGIxICogYjEiICJGcm9tIFB5dGhvbiA8Ql9zdGFyX0I+Lio5MDAiICJBZnRl cjogYjEgKiBiMSIKK2dkYl90ZXN0ICJwIHJlZl9jICogYjEiICJObyBzeW1i b2wuKiIgIkFmdGVyOiByZWZfYyAqIGIxIGZhaWx1cmUiCitnZGJfdGVzdCAi cCByZWZfZCAqIGIxIiAiRnJvbSBDQyA8RF9zdGFyX0Q+LioxNTAwIiAiQWZ0 ZXI6IHJlZl9kICogYjEiCitnZGJfdGVzdCAicCBidCAqIGMxIiAiRnJvbSBQ eXRob24gPEJfc3Rhcl9CPi4qODAwIiAiQWZ0ZXI6IGJ0ICogYzEiCitnZGJf dGVzdCAicCArK2ExIiAiRnJvbSBQeXRob24gPHBsdXNfcGx1c19BPi4qNiIg IkFmdGVyOiArK2ExIgorZ2RiX3Rlc3QgInAgYTEuZ2V0YXJyYXlpbmQoNSki ICJGcm9tIFB5dGhvbiA8QV9nZXRhcnJheWluZD4uKjUiIFwKKyAgIkFmdGVy OiBhMS5nZXRhcnJheWluZCg1KSIKK2dkYl90ZXN0ICJwIGUuZ2V0YSgpIiAi RnJvbSBQeXRob24gPEFfZ2V0YT4uKjEwMCIgIkFmdGVyOiBlLmdldGEoKSIK K2dkYl90ZXN0ICJwIGcuc2l6ZV9kaWZmPGZsb2F0PiAgKCkiICJGcm9tIFB5 dGhvbiBHPD46OnNpemVfZGlmZi4qIiBcCisgICJBZnRlcjogZy5zaXplX2Rp ZmY8ZmxvYXQ+KCkiCitnZGJfdGVzdCAicCBnLnNpemVfZGlmZjwgIHVuc2ln bmVkIGxvbmcgID4oKSIgIkZyb20gUHl0aG9uIEc8Pjo6c2l6ZV9kaWZmLioi IFwKKyAgIkFmdGVyOiBnLnNpemVfZGlmZjx1bnNpZ25lZCBsb25nPigpIgor Z2RiX3Rlc3QgInAgZy5zaXplX211bDwyPigpIiAiRnJvbSBQeXRob24gRzw+ OjpzaXplX211bC4qIiBcCisgICJBZnRlcjogZy5zaXplX211bDwyPigpIgor Z2RiX3Rlc3QgInAgZy5zaXplX211bDwgIDUgID4oKSIgIkZyb20gUHl0aG9u IEc8Pjo6c2l6ZV9tdWwuKiIgXAorICAiQWZ0ZXI6IGcuc2l6ZV9tdWw8ICA1 ICA+KCkiCitnZGJfdGVzdCAicCBnLm11bDxkb3VibGU+KDIuMCkiICJGcm9t IFB5dGhvbiBHPD46Om11bC4qIiBcCisgICJBZnRlcjogZy5tdWw8ZG91Ymxl PigyLjApIgorZ2RiX3Rlc3QgInAgZy5tdWw8Y2hhcj4oJ2EnKSIgIkZyb20g UHl0aG9uIEc8Pjo6bXVsLioiIFwKK2dkYl90ZXN0ICJwIGdfcHRyLT5tdWw8 Y2hhcj4oJ2EnKSIgIkZyb20gUHl0aG9uIEc8Pjo6bXVsLioiIFwKKyAgIkFm dGVyOiBnLT5tdWw8Y2hhcj4oJ2EnKSIKKworIyBUZXN0cyBmb3IgJ2Rpc2Fi bGUvZW5hYmxlIGRlYnVnbWV0aG9kJyBjb21tYW5kLgorZ2RiX3Rlc3Rfbm9f b3V0cHV0ICJkaXNhYmxlIGRlYnVnbWV0aG9kIC4qZGVidWdtZXRob2RzIEdf bWV0aG9kcyIgXAorICAiRGlzYWJsZSBHX21ldGhvZHMiCitnZGJfdGVzdCAi cCBnLm11bDxjaGFyPignYScpIiAiQ291bGRuJ3QgZmluZCBtZXRob2QuKiIg XAorICAiZy5tdWw8Y2hhcj4oJ2EnKSBhZnRlciBkaXNhYmxpbmcgR19tZXRo b2RzIgorZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJlbmFibGUgZGVidWdtZXRob2Qg LipkZWJ1Z21ldGhvZHMgR19tZXRob2RzIiBcCisgICJFbmFibGUgR19tZXRo b2RzIgorZ2RiX3Rlc3QgInAgZy5tdWw8Y2hhcj4oJ2EnKSIgIkZyb20gUHl0 aG9uIEc8Pjo6bXVsLioiIFwKKyAgIkFmdGVyIGVuYWJsaW5nIEdfbWV0aG9k cyIKK2dkYl90ZXN0X25vX291dHB1dCAiZGlzYWJsZSBkZWJ1Z21ldGhvZCAu KmRlYnVnbWV0aG9kcyBHX21ldGhvZHM7bXVsIiBcCisgICJEaXNhYmxlIEdf bWV0aG9kczttdWwiCitnZGJfdGVzdCAicCBnLm11bDxjaGFyPignYScpIiAi Q291bGRuJ3QgZmluZCBtZXRob2QuKiIgXAorICAiZy5tdWw8Y2hhcj4oJ2En KSBhZnRlciBkaXNhYmxpbmcgR19tZXRob2RzO211bCIKK2dkYl90ZXN0X25v X291dHB1dCAiZW5hYmxlIGRlYnVnbWV0aG9kIC4qZGVidWdtZXRob2RzIEdf bWV0aG9kczttdWwiIFwKKyAgIkVuYWJsZSBHX21ldGhvZHM7bXVsIgorZ2Ri X3Rlc3QgInAgZy5tdWw8Y2hhcj4oJ2EnKSIgIkZyb20gUHl0aG9uIEc8Pjo6 bXVsLioiIFwKKyAgIkFmdGVyIGVuYWJsaW5nIEdfbWV0aG9kczttdWwiCisK KyMgVGVzdCBmb3IgJ2luZm8gZGVidWctbWV0aG9kcycgY29tbWFuZAorZ2Ri X3Rlc3QgImluZm8gZGVidWdtZXRob2QgZ2xvYmFsIHBsdXMiICJnbG9iYWwu KnBsdXNfcGx1c19BIC0gZW5hYmxlZCIgXAorICAiaW5mbyBkZWJ1Zy1tZXRo b2QgZ2xvYmFsIHBsdXMiCmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dk Yi5weXRob24vcHktZGVidWdtZXRob2RzLnB5IGIvZ2RiL3Rlc3RzdWl0ZS9n ZGIucHl0aG9uL3B5LWRlYnVnbWV0aG9kcy5weQpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi5kMjYzZDQ4Ci0tLSAvZGV2L251bGwKKysr IGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWRlYnVnbWV0aG9kcy5w eQpAQCAtMCwwICsxLDE4NSBAQAorIyBDb3B5cmlnaHQgMjAxMyBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRo ZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElm IG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKwor IyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR0RCIHRlc3RzdWl0ZS4gIEl0 IGltcGxlbWVudHMgZGVidWcgbWV0aG9kcworIyBpbiB0aGUgUHl0aG9uIGV4 dGVuc2lvbiBsYW5ndWFnZS4KKworaW1wb3J0IGdkYgoraW1wb3J0IHJlCisK K2Zyb20gZ2RiLmRlYnVnbWV0aG9kcyBpbXBvcnQgRGVidWdNZXRob2QsIERl YnVnTWV0aG9kTWF0Y2hlciwgRGVidWdNZXRob2RXb3JrZXIKK2Zyb20gZ2Ri LmRlYnVnbWV0aG9kcyBpbXBvcnQgU2ltcGxlRGVidWdNZXRob2RNYXRjaGVy CisKK2RlZiBBX3BsdXNfQShvYmosIG9wcik6CisgIHByaW50ICgnRnJvbSBQ eXRob24gPEFfcGx1c19BPjonKQorICByZXR1cm4gb2JqWydhJ10gKyBvcHJb J2EnXQorCitkZWYgcGx1c19wbHVzX0Eob2JqKToKKyAgcHJpbnQgKCdGcm9t IFB5dGhvbiA8cGx1c19wbHVzX0E+OicpCisgIHJldHVybiBvYmpbJ2EnXSAr IDEKKworZGVmIENfbWludXNfQyhvYmosIG9wcik6CisgICMgVGhpcyBmdW5j dGlvbiBpcyBub3QgZGVmaW5lZCBmb3Igb2JqZWN0cyBvZiBjbGFzcyBDIGlu IHRoZSBhc3NvY2lhdGVkIEMrKworICAjIGZpbGUuICBIb3dldmVyLCBDIGlz IGRlcml2ZWQgZnJvbSBBIHdoaWNoIGhhcyBhIHZpcnR1YWwgb3BlcmF0b3It IG1ldGhvZC4KKyAgIyBIZW5jZSwgaWYgYW4gb3BlcmF0b3IgJy0nIGlzIHVz ZWQgb24gYSByZWZlcmVuY2UgcG9pbnRpbmcgdG8gJ0MnIGFmdGVyCisgICMg bG9hZGluZyB0aGlzIHNjcmlwdCwgdGhlbiB0aGlzIFB5dGhvbiB2ZXJzaW9u IHNob3VsZCBiZSBpbnZva2VkLgorICBwcmludCAoJ0Zyb20gUHl0aG9uIDxD X21pbnVzX0M+OicpCisgIHJldHVybiBvYmpbJ2EnXSAtIG9wclsnYSddCisK K2RlZiBCX3N0YXJfQihvYmosIG9wcik6CisgIHByaW50ICgnRnJvbSBQeXRo b24gPEJfc3Rhcl9CPjonKQorICByZXR1cm4gb2JqWydhJ10gKiBvcHJbJ2En XQorCitkZWYgQV9nZXRhKG9iaik6CisgIHByaW50ICgnRnJvbSBQeXRob24g PEFfZ2V0YT46JykKKyAgcmV0dXJuIG9ialsnYSddCisKK2RlZiBBX2dldGFy cmF5aW5kKG9iaiwgaW5kZXgpOgorICBwcmludCAnRnJvbSBQeXRob24gPEFf Z2V0YXJyYXlpbmQ+OicKKyAgcmV0dXJuIG9ialsnYXJyYXknXVtpbmRleF0K KworCit0eXBlX0EgPSBnZGIucGFyc2VfYW5kX2V2YWwoJyhkb3A6OkEgKikg MCcpLnR5cGUudGFyZ2V0KCkKK3R5cGVfQiA9IGdkYi5wYXJzZV9hbmRfZXZh bCgnKGRvcDo6QiAqKSAwJykudHlwZS50YXJnZXQoKQordHlwZV9DID0gZ2Ri LnBhcnNlX2FuZF9ldmFsKCcoZG9wOjpDICopIDAnKS50eXBlLnRhcmdldCgp Cit0eXBlX2ludCA9IGdkYi5wYXJzZV9hbmRfZXZhbCgnKGludCAqKSAwJyku dHlwZS50YXJnZXQoKQorCisKK2NsYXNzIEdfc2l6ZV9kaWZmX3dvcmtlcihE ZWJ1Z01ldGhvZFdvcmtlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNs YXNzX3RlbXBsYXRlX3R5cGUsIG1ldGhvZF90ZW1wbGF0ZV90eXBlKToKKyAg ICAgICAgc2VsZi5fY2xhc3NfdGVtcGxhdGVfdHlwZSA9IGNsYXNzX3RlbXBs YXRlX3R5cGUKKyAgICAgICAgc2VsZi5fbWV0aG9kX3RlbXBsYXRlX3R5cGUg PSBtZXRob2RfdGVtcGxhdGVfdHlwZQorCisgICAgZGVmIGdldF9hcmd0eXBl cyhzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGludm9rZShzZWxm LCBvYmosIGFyZ3MpOgorICAgICAgICBwcmludCAoJ0Zyb20gUHl0aG9uIEc8 Pjo6c2l6ZV9kaWZmKCknKQorICAgICAgICByZXR1cm4gKHNlbGYuX21ldGhv ZF90ZW1wbGF0ZV90eXBlLnNpemVvZiAtCisgICAgICAgICAgICAgICAgc2Vs Zi5fY2xhc3NfdGVtcGxhdGVfdHlwZS5zaXplb2YpCisKKworY2xhc3MgR19z aXplX211bF93b3JrZXIoRGVidWdNZXRob2RXb3JrZXIpOgorICAgIGRlZiBf X2luaXRfXyhzZWxmLCBjbGFzc190ZW1wbGF0ZV90eXBlLCBtZXRob2RfdGVt cGxhdGVfdmFsKToKKyAgICAgICAgc2VsZi5fY2xhc3NfdGVtcGxhdGVfdHlw ZSA9IGNsYXNzX3RlbXBsYXRlX3R5cGUKKyAgICAgICAgc2VsZi5fbWV0aG9k X3RlbXBsYXRlX3ZhbCA9IG1ldGhvZF90ZW1wbGF0ZV92YWwKKworICAgIGRl ZiBnZXRfYXJndHlwZXMoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRl ZiBpbnZva2Uoc2VsZiwgb2JqLCBhcmdzKToKKyAgICAgICAgcHJpbnQgKCdG cm9tIFB5dGhvbiBHPD46OnNpemVfbXVsKCknKQorICAgICAgICByZXR1cm4g c2VsZi5fY2xhc3NfdGVtcGxhdGVfdHlwZS5zaXplb2YgKiBzZWxmLl9tZXRo b2RfdGVtcGxhdGVfdmFsCisKKworY2xhc3MgR19tdWxfd29ya2VyKERlYnVn TWV0aG9kV29ya2VyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2xhc3Nf dGVtcGxhdGVfdHlwZSwgbWV0aG9kX3RlbXBsYXRlX3R5cGUpOgorICAgICAg ICBzZWxmLl9jbGFzc190ZW1wbGF0ZV90eXBlID0gY2xhc3NfdGVtcGxhdGVf dHlwZQorICAgICAgICBzZWxmLl9tZXRob2RfdGVtcGxhdGVfdHlwZSA9IG1l dGhvZF90ZW1wbGF0ZV90eXBlCisKKyAgICBkZWYgZ2V0X2FyZ3R5cGVzKHNl bGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbWV0aG9kX3RlbXBsYXRlX3R5 cGUKKworICAgIGRlZiBpbnZva2Uoc2VsZiwgb2JqLCBhcmdzKToKKyAgICAg ICAgcHJpbnQgKCdGcm9tIFB5dGhvbiBHPD46Om11bCgpJykKKyAgICAgICAg cmV0dXJuIG9ialsndCddICogYXJnc1swXQorCisKK2NsYXNzIEdfbWV0aG9k c19tYXRjaGVyKERlYnVnTWV0aG9kTWF0Y2hlcik6CisgICAgZGVmIF9faW5p dF9fKHNlbGYpOgorICAgICAgICBEZWJ1Z01ldGhvZE1hdGNoZXIuX19pbml0 X18oc2VsZiwgJ0dfbWV0aG9kcycpCisgICAgICAgIHNlbGYubWV0aG9kcyA9 IFtEZWJ1Z01ldGhvZCgnc2l6ZV9kaWZmJyksCisgICAgICAgICAgICAgICAg ICAgICAgICBEZWJ1Z01ldGhvZCgnc2l6ZV9tdWwnKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgIERlYnVnTWV0aG9kKCdtdWwnKV0KKworICAgIGRlZiBf aXNfZW5hYmxlZChzZWxmLCBuYW1lKToKKyAgICAgICAgZm9yIG1ldGhvZCBp biBzZWxmLm1ldGhvZHM6CisgICAgICAgICAgICBpZiBtZXRob2QubmFtZSA9 PSBuYW1lIGFuZCBtZXRob2QuZW5hYmxlZDoKKyAgICAgICAgICAgICAgICBy ZXR1cm4gVHJ1ZQorCisgICAgZGVmIG1hdGNoKHNlbGYsIGNsYXNzX3R5cGUs IG1ldGhvZF9uYW1lKToKKyAgICAgICAgY2xhc3NfdGFnID0gY2xhc3NfdHlw ZS51bnF1YWxpZmllZCgpLnRhZworICAgICAgICBpZiBub3QgcmUubWF0Y2go J15kb3A6Okc8WyBdKltfYS16QS1aXVsgX2EtekEtWjAtOV0qPiQnLAorICAg ICAgICAgICAgICAgICAgICAgICAgY2xhc3NfdGFnKToKKyAgICAgICAgICAg IHJldHVybiBOb25lCisgICAgICAgIHRfbmFtZSA9IGNsYXNzX3RhZ1s3Oi0x XQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0X3R5cGUgPSBnZGIubG9v a3VwX3R5cGUodF9uYW1lKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgor ICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgaWYgcmUubWF0Y2go J15zaXplX2RpZmY8WyBdKltfYS16QS1aXVsgX2EtekEtWjAtOV0qPiQnLCBt ZXRob2RfbmFtZSk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5faXNfZW5h YmxlZCgnc2l6ZV9kaWZmJyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5v bmUKKyAgICAgICAgICAgIHQxX25hbWUgPSBtZXRob2RfbmFtZVsxMDotMV0K KyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0MV90eXBlID0g Z2RiLmxvb2t1cF90eXBlKHQxX25hbWUpCisgICAgICAgICAgICAgICAgcmV0 dXJuIEdfc2l6ZV9kaWZmX3dvcmtlcih0X3R5cGUsIHQxX3R5cGUpCisgICAg ICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHJl dHVybiBOb25lCisgICAgICAgIGlmIHJlLm1hdGNoKCdec2l6ZV9tdWw8WyBd KlswLTldK1sgXSo+JCcsIG1ldGhvZF9uYW1lKToKKyAgICAgICAgICAgIGlm IG5vdCBzZWxmLl9pc19lbmFibGVkKCdzaXplX211bCcpOgorICAgICAgICAg ICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICBtX3ZhbCA9IGludCht ZXRob2RfbmFtZVs5Oi0xXSkKKyAgICAgICAgICAgIHJldHVybiBHX3NpemVf bXVsX3dvcmtlcih0X3R5cGUsIG1fdmFsKQorICAgICAgICBpZiByZS5tYXRj aCgnXm11bDxbIF0qW19hLXpBLVpdWyBfYS16QS1aMC05XSo+JCcsIG1ldGhv ZF9uYW1lKToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9pc19lbmFibGVk KCdtdWwnKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAg ICAgICAgdDFfbmFtZSA9IG1ldGhvZF9uYW1lWzQ6LTFdCisgICAgICAgICAg ICB0cnk6CisgICAgICAgICAgICAgICAgdDFfdHlwZSA9IGdkYi5sb29rdXBf dHlwZSh0MV9uYW1lKQorICAgICAgICAgICAgICAgIHJldHVybiBHX211bF93 b3JrZXIodF90eXBlLCB0MV90eXBlKQorICAgICAgICAgICAgZXhjZXB0IEV4 Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisKK2ds b2JhbF9kbV9saXN0ID0gWworICAgIFNpbXBsZURlYnVnTWV0aG9kTWF0Y2hl cignQV9wbHVzX0EnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn XmRvcDo6QSQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3Bl cmF0b3JcKycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFfcGx1 c19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRoaXMgaXMg YSByZXBsYWNlbWVudCwgaGVuY2UgbWF0Y2ggdGhlIGFyZyB0eXBlCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICMgZXhhY3RseSEKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdHlwZV9BLmNvbnN0KCkucmVmZXJlbmNl KCkpLAorICAgIFNpbXBsZURlYnVnTWV0aG9kTWF0Y2hlcigncGx1c19wbHVz X0EnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXmRvcDo6QSQn LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3BlcmF0b3JcK1wr JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1c19wbHVzX0Ep LAorICAgIFNpbXBsZURlYnVnTWV0aG9kTWF0Y2hlcignQ19taW51c19DJywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ15kb3A6OkMkJywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29wZXJhdG9yXC0nLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBDX21pbnVzX0MsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHR5cGVfQyksCisgICAgU2ltcGxlRGVi dWdNZXRob2RNYXRjaGVyKCdCX3N0YXJfQicsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdeZG9wOjpCJCcsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICdvcGVyYXRvclwqJywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQl9zdGFyX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICMgVGhpcyBpcyBhIHJlcGxhY2VtZW50LCBoZW5jZSBtYXRjaCB0aGUg YXJnIHR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBleGFj dGx5IQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlX0IuY29u c3QoKS5yZWZlcmVuY2UoKSksCisgICAgU2ltcGxlRGVidWdNZXRob2RNYXRj aGVyKCdBX2dldGEnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn XmRvcDo6QSQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXmdl dGEkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQV9nZXRhKSwK KyAgICBTaW1wbGVEZWJ1Z01ldGhvZE1hdGNoZXIoJ0FfZ2V0YXJyYXlpbmQn LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXmRvcDo6QSQnLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXmdldGFycmF5aW5kJCcs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFfZ2V0YXJyYXlpbmQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfaW50KSwKK10K KworZm9yIG1hdGNoZXIgaW4gZ2xvYmFsX2RtX2xpc3Q6CisgICAgZ2RiLmRl YnVnbWV0aG9kcy5yZWdpc3Rlcl9kZWJ1Z21ldGhvZF9tYXRjaGVyKGdkYiwg bWF0Y2hlcikKK2dkYi5kZWJ1Z21ldGhvZHMucmVnaXN0ZXJfZGVidWdtZXRo b2RfbWF0Y2hlcihnZGIuY3VycmVudF9wcm9nc3BhY2UoKSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX21ldGhv ZHNfbWF0Y2hlcigpKQpkaWZmIC0tZ2l0IGEvZ2RiL3ZhbGFyaXRoLmMgYi9n ZGIvdmFsYXJpdGguYwppbmRleCA4ZTg2M2UzLi42ZjNlZDYyIDEwMDY0NAot LS0gYS9nZGIvdmFsYXJpdGguYworKysgYi9nZGIvdmFsYXJpdGguYwpAQCAt MzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlICJp bmZjYWxsLmgiCiAjaW5jbHVkZSAiZXhjZXB0aW9ucy5oIgorI2luY2x1ZGUg ImV4dC1mdW5jdGlvbi5oIgogCiAvKiBEZWZpbmUgd2hldGhlciBvciBub3Qg dGhlIEMgb3BlcmF0b3IgJy8nIHRydW5jYXRlcyB0b3dhcmRzIHplcm8gZm9y CiAgICBkaWZmZXJlbnRseSBzaWduZWQgb3BlcmFuZHMgKHRydW5jYXRpb24g ZGlyZWN0aW9uIGlzIHVuZGVmaW5lZCBpbiBDKS4gICovCkBAIC0yODUsMjEg KzI4NiwyNyBAQCB1bm9wX3VzZXJfZGVmaW5lZF9wIChlbnVtIGV4cF9vcGNv ZGUgb3AsIHN0cnVjdCB2YWx1ZSAqYXJnMSkKICAgIGV4cGxpY2l0bHksIGFu ZCBwZXJmb3JtIGNvcnJlY3Qgb3ZlcmxvYWQgcmVzb2x1dGlvbiBpbiBhbGwg b2YgdGhlIGFib3ZlCiAgICBzaXR1YXRpb25zIG9yIGNvbWJpbmF0aW9ucyB0 aGVyZW9mLiAgKi8KIAotc3RhdGljIHN0cnVjdCB2YWx1ZSAqCitzdGF0aWMg dm9pZAogdmFsdWVfdXNlcl9kZWZpbmVkX2NwcF9vcCAoc3RydWN0IHZhbHVl ICoqYXJncywgaW50IG5hcmdzLCBjaGFyICpvcGVyYXRvciwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCAqc3RhdGljX21lbWZ1bmNwKQorCQkJ ICAgc3RydWN0IHZhbHVlICoqc3JjX2ZuLAorCQkJICAgc3RydWN0IGV4dF9m bl9kZXNjcmlwdG9yICoqZXh0X2ZuLAorCQkJICAgaW50ICpzdGF0aWNfbWVt ZnVuY3ApCiB7CiAKICAgc3RydWN0IHN5bWJvbCAqc3ltcCA9IE5VTEw7CiAg IHN0cnVjdCB2YWx1ZSAqdmFscCA9IE5VTEw7CisgIHN0cnVjdCBleHRfZm5f ZGVzY3JpcHRvciAqZXh0X2ZucCA9IE5VTEw7CiAKICAgZmluZF9vdmVybG9h ZF9tYXRjaCAoYXJncywgbmFyZ3MsIG9wZXJhdG9yLCBCT1RIIC8qIGNvdWxk IGJlIG1ldGhvZCAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgJmFyZ3Nb MF0gLyogb2JqcCAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgTlVMTCAv KiBwYXNzIE5VTEwgc3ltYm9sIHNpbmNlIHN5bWJvbCBpcyB1bmtub3duICov LAotICAgICAgICAgICAgICAgICAgICAgICAmdmFscCwgJnN5bXAsIHN0YXRp Y19tZW1mdW5jcCwgMCk7CisJCSAgICAgICAmYXJnc1swXSAvKiBvYmpwICov LAorCQkgICAgICAgTlVMTCAvKiBwYXNzIE5VTEwgc3ltYm9sIHNpbmNlIHN5 bWJvbCBpcyB1bmtub3duICovLAorCQkgICAgICAgJnZhbHAsICZzeW1wLCAm ZXh0X2ZucCwgc3RhdGljX21lbWZ1bmNwLCAwKTsKIAogICBpZiAodmFscCkK LSAgICByZXR1cm4gdmFscDsKKyAgICB7CisgICAgICAqc3JjX2ZuID0gdmFs cDsKKyAgICAgIHJldHVybjsKKyAgICB9CiAKICAgaWYgKHN5bXApCiAgICAg ewpAQCAtMzA3LDcgKzMxNCwxNCBAQCB2YWx1ZV91c2VyX2RlZmluZWRfY3Bw X29wIChzdHJ1Y3QgdmFsdWUgKiphcmdzLCBpbnQgbmFyZ3MsIGNoYXIgKm9w ZXJhdG9yLAogICAgICAgICAgZXhwZWN0IGEgcmVmZXJlbmNlIGFzIGl0cyBm aXJzdCBhcmd1bWVudAogICAgICAgICAgcmF0aGVyIHRoZSBleHBsaWNpdCBz dHJ1Y3R1cmUuICAqLwogICAgICAgYXJnc1swXSA9IHZhbHVlX2luZCAoYXJn c1swXSk7Ci0gICAgICByZXR1cm4gdmFsdWVfb2ZfdmFyaWFibGUgKHN5bXAs IDApOworICAgICAgKnNyY19mbiA9IHZhbHVlX29mX3ZhcmlhYmxlIChzeW1w LCAwKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgaWYgKGV4dF9mbnAp CisgICAgeworICAgICAgKmV4dF9mbiA9IGV4dF9mbnA7CisgICAgICByZXR1 cm47CiAgICAgfQogCiAgIGVycm9yIChfKCJDb3VsZCBub3QgZmluZCAlcy4i KSwgb3BlcmF0b3IpOwpAQCAtMzE2LDE5ICszMzAsMjIgQEAgdmFsdWVfdXNl cl9kZWZpbmVkX2NwcF9vcCAoc3RydWN0IHZhbHVlICoqYXJncywgaW50IG5h cmdzLCBjaGFyICpvcGVyYXRvciwKIC8qIExvb2t1cCB1c2VyIGRlZmluZWQg b3BlcmF0b3IgTkFNRS4gIFJldHVybiBhIHZhbHVlIHJlcHJlc2VudGluZyB0 aGUKICAgIGZ1bmN0aW9uLCBvdGhlcndpc2UgcmV0dXJuIE5VTEwuICAqLwog Ci1zdGF0aWMgc3RydWN0IHZhbHVlICoKK3N0YXRpYyB2b2lkCiB2YWx1ZV91 c2VyX2RlZmluZWRfb3AgKHN0cnVjdCB2YWx1ZSAqKmFyZ3AsIHN0cnVjdCB2 YWx1ZSAqKmFyZ3MsIGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAg ICAgIGludCAqc3RhdGljX21lbWZ1bmNwLCBpbnQgbmFyZ3MpCisJCSAgICAg ICBpbnQgKnN0YXRpY19tZW1mdW5jcCwgaW50IG5hcmdzLAorCQkgICAgICAg c3RydWN0IHZhbHVlICoqc3JjX2ZuLCBzdHJ1Y3QgZXh0X2ZuX2Rlc2NyaXB0 b3IgKipleHRfZm4pCiB7CiAgIHN0cnVjdCB2YWx1ZSAqcmVzdWx0ID0gTlVM TDsKIAogICBpZiAoY3VycmVudF9sYW5ndWFnZS0+bGFfbGFuZ3VhZ2UgPT0g bGFuZ3VhZ2VfY3BsdXMpCi0gICAgcmVzdWx0ID0gdmFsdWVfdXNlcl9kZWZp bmVkX2NwcF9vcCAoYXJncywgbmFyZ3MsIG5hbWUsIHN0YXRpY19tZW1mdW5j cCk7CisgICAgdmFsdWVfdXNlcl9kZWZpbmVkX2NwcF9vcCAoYXJncywgbmFy Z3MsIG5hbWUsIHNyY19mbiwgZXh0X2ZuLAorCQkJICAgICAgIHN0YXRpY19t ZW1mdW5jcCk7CiAgIGVsc2UKLSAgICByZXN1bHQgPSB2YWx1ZV9zdHJ1Y3Rf ZWx0IChhcmdwLCBhcmdzLCBuYW1lLCBzdGF0aWNfbWVtZnVuY3AsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cnVjdHVyZSIpOwotCi0g IHJldHVybiByZXN1bHQ7CisgICAgeworICAgICAgcmVzdWx0ID0gdmFsdWVf c3RydWN0X2VsdCAoYXJncCwgYXJncywgbmFtZSwgc3RhdGljX21lbWZ1bmNw LAorCQkJCSAic3RydWN0dXJlIik7CisgICAgICAqc3JjX2ZuID0gcmVzdWx0 OworICAgIH0KIH0KIAogLyogV2Uga25vdyBlaXRoZXIgYXJnMSBvciBhcmcy IGlzIGEgc3RydWN0dXJlLCBzbyB0cnkgdG8gZmluZCB0aGUgcmlnaHQKQEAg LTM0NSw2ICszNjIsNyBAQCB2YWx1ZV94X2Jpbm9wIChzdHJ1Y3QgdmFsdWUg KmFyZzEsIHN0cnVjdCB2YWx1ZSAqYXJnMiwgZW51bSBleHBfb3Bjb2RlIG9w LAogCSAgICAgICBlbnVtIGV4cF9vcGNvZGUgb3RoZXJvcCwgZW51bSBub3Np ZGUgbm9zaWRlKQogewogICBzdHJ1Y3QgdmFsdWUgKiphcmd2ZWM7CisgIHN0 cnVjdCBleHRfZm5fZGVzY3JpcHRvciAqZXh0X2ZuID0gTlVMTDsKICAgY2hh ciAqcHRyOwogICBjaGFyIHRzdHJbMTNdOwogICBpbnQgc3RhdGljX21lbWZ1 bmNwOwpAQCAtMzU5LDYgKzM3Nyw3IEBAIHZhbHVlX3hfYmlub3AgKHN0cnVj dCB2YWx1ZSAqYXJnMSwgc3RydWN0IHZhbHVlICphcmcyLCBlbnVtIGV4cF9v cGNvZGUgb3AsCiAgICAgZXJyb3IgKF8oIkNhbid0IGRvIHRoYXQgYmluYXJ5 IG9wIG9uIHRoYXQgdHlwZSIpKTsJLyogRklYTUUgYmUgZXhwbGljaXQgKi8K IAogICBhcmd2ZWMgPSAoc3RydWN0IHZhbHVlICoqKSBhbGxvY2EgKHNpemVv ZiAoc3RydWN0IHZhbHVlICopICogNCk7CisgIGFyZ3ZlY1swXSA9IE5VTEw7 CiAgIGFyZ3ZlY1sxXSA9IHZhbHVlX2FkZHIgKGFyZzEpOwogICBhcmd2ZWNb Ml0gPSBhcmcyOwogICBhcmd2ZWNbM10gPSAwOwpAQCAtNDcxLDggKzQ5MCw4 IEBAIHZhbHVlX3hfYmlub3AgKHN0cnVjdCB2YWx1ZSAqYXJnMSwgc3RydWN0 IHZhbHVlICphcmcyLCBlbnVtIGV4cF9vcGNvZGUgb3AsCiAgICAgICBlcnJv ciAoXygiSW52YWxpZCBiaW5hcnkgb3BlcmF0aW9uIHNwZWNpZmllZC4iKSk7 CiAgICAgfQogCi0gIGFyZ3ZlY1swXSA9IHZhbHVlX3VzZXJfZGVmaW5lZF9v cCAoJmFyZzEsIGFyZ3ZlYyArIDEsIHRzdHIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJnN0YXRpY19tZW1mdW5jcCwgMik7Cisg IHZhbHVlX3VzZXJfZGVmaW5lZF9vcCAoJmFyZzEsIGFyZ3ZlYyArIDEsIHRz dHIsICZzdGF0aWNfbWVtZnVuY3AsIDIsCisJCQkgJmFyZ3ZlY1swXSwgJmV4 dF9mbik7CiAKICAgaWYgKGFyZ3ZlY1swXSkKICAgICB7CkBAIC00OTIsNiAr NTExLDI5IEBAIHZhbHVlX3hfYmlub3AgKHN0cnVjdCB2YWx1ZSAqYXJnMSwg c3RydWN0IHZhbHVlICphcmcyLCBlbnVtIGV4cF9vcGNvZGUgb3AsCiAgICAg ICByZXR1cm4gY2FsbF9mdW5jdGlvbl9ieV9oYW5kIChhcmd2ZWNbMF0sIDIg LSBzdGF0aWNfbWVtZnVuY3AsCiAJCQkJICAgIGFyZ3ZlYyArIDEpOwogICAg IH0KKyAgaWYgKGV4dF9mbikKKyAgICB7CisgICAgICBpZiAoZXh0X2ZuX2lz X21ldGhvZCAoZXh0X2ZuKSkKKwl7CisJICBzdHJ1Y3QgdmFsdWUgKnJldF92 YWwgPSBleHRfZm5faW52b2tlX21ldGhvZCAoZXh0X2ZuLCBhcmcxLCAmYXJn MiwgMSk7CisKKwkgIGlmIChyZXRfdmFsID09IE5VTEwpCisJICAgICAgZXJy b3IgKF8oIkVycm9yIGludm9raW5nIGRlYnVnIG1ldGhvZCBpbXBsZW1lbnRh dGlvbiBmb3IgIgorCQkgICAgICAgIm1ldGhvZCAlcyIpLCB0c3RyKTsKKwor CSAgeGZyZWUgKGV4dF9mbik7CisKKwkgIHJldHVybiByZXRfdmFsOworCX0K KyAgICAgIGVsc2UKKwl7CisJICAvKiBUaGlzIGVsc2Ugc2hvdWxkIG5vdCBi ZSB0YWtlbiBhcyBvbmx5IGRlYnVnIG1ldGhvZHMKKwkgICAgIGFyZSBzdXBw b3J0ZWQgY3VycmVudGx5LiAgKi8KKwkgIGludGVybmFsX2Vycm9yIChfX0ZJ TEVfXywgX19MSU5FX18sCisJCQkgIF8oIkludm9raW5nIGFuIGV4dGVuc2lv biBsYW5ndWFnZSAiCisJCQkgICAgImZ1bmN0aW9uIChub3QgYSBtZXRob2Qp LiIpKTsKKwl9CisgICAgfQogICB0aHJvd19lcnJvciAoTk9UX0ZPVU5EX0VS Uk9SLAogICAgICAgICAgICAgICAgXygibWVtYmVyIGZ1bmN0aW9uICVzIG5v dCBmb3VuZCIpLCB0c3RyKTsKICNpZmRlZiBsaW50CkBAIC01MTAsNiArNTUy LDcgQEAgdmFsdWVfeF91bm9wIChzdHJ1Y3QgdmFsdWUgKmFyZzEsIGVudW0g ZXhwX29wY29kZSBvcCwgZW51bSBub3NpZGUgbm9zaWRlKQogewogICBzdHJ1 Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IGdldF90eXBlX2FyY2ggKHZhbHVlX3R5 cGUgKGFyZzEpKTsKICAgc3RydWN0IHZhbHVlICoqYXJndmVjOworICBzdHJ1 Y3QgZXh0X2ZuX2Rlc2NyaXB0b3IgKmV4dF9mbjsKICAgY2hhciAqcHRyOwog ICBjaGFyIHRzdHJbMTNdLCBtYW5nbGVfdHN0clsxM107CiAgIGludCBzdGF0 aWNfbWVtZnVuY3AsIG5hcmdzOwpAQCAtNTIzLDYgKzU2Niw3IEBAIHZhbHVl X3hfdW5vcCAoc3RydWN0IHZhbHVlICphcmcxLCBlbnVtIGV4cF9vcGNvZGUg b3AsIGVudW0gbm9zaWRlIG5vc2lkZSkKICAgICBlcnJvciAoXygiQ2FuJ3Qg ZG8gdGhhdCB1bmFyeSBvcCBvbiB0aGF0IHR5cGUiKSk7CS8qIEZJWE1FIGJl IGV4cGxpY2l0ICovCiAKICAgYXJndmVjID0gKHN0cnVjdCB2YWx1ZSAqKikg YWxsb2NhIChzaXplb2YgKHN0cnVjdCB2YWx1ZSAqKSAqIDQpOworICBhcmd2 ZWNbMF0gPSBOVUxMOwogICBhcmd2ZWNbMV0gPSB2YWx1ZV9hZGRyIChhcmcx KTsKICAgYXJndmVjWzJdID0gMDsKIApAQCAtNTc0LDggKzYxOCw4IEBAIHZh bHVlX3hfdW5vcCAoc3RydWN0IHZhbHVlICphcmcxLCBlbnVtIGV4cF9vcGNv ZGUgb3AsIGVudW0gbm9zaWRlIG5vc2lkZSkKICAgICAgIGVycm9yIChfKCJJ bnZhbGlkIHVuYXJ5IG9wZXJhdGlvbiBzcGVjaWZpZWQuIikpOwogICAgIH0K IAotICBhcmd2ZWNbMF0gPSB2YWx1ZV91c2VyX2RlZmluZWRfb3AgKCZhcmcx LCBhcmd2ZWMgKyAxLCB0c3RyLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZzdGF0aWNfbWVtZnVuY3AsIG5hcmdzKTsKKyAgdmFs dWVfdXNlcl9kZWZpbmVkX29wICgmYXJnMSwgYXJndmVjICsgMSwgdHN0ciwg JnN0YXRpY19tZW1mdW5jcCwgbmFyZ3MsCisJCQkgJmFyZ3ZlY1swXSwgJmV4 dF9mbik7CiAKICAgaWYgKGFyZ3ZlY1swXSkKICAgICB7CkBAIC01OTQsNiAr NjM4LDI5IEBAIHZhbHVlX3hfdW5vcCAoc3RydWN0IHZhbHVlICphcmcxLCBl bnVtIGV4cF9vcGNvZGUgb3AsIGVudW0gbm9zaWRlIG5vc2lkZSkKIAkgIHJl dHVybiB2YWx1ZV96ZXJvIChyZXR1cm5fdHlwZSwgVkFMVUVfTFZBTCAoYXJn MSkpOwogCX0KICAgICAgIHJldHVybiBjYWxsX2Z1bmN0aW9uX2J5X2hhbmQg KGFyZ3ZlY1swXSwgbmFyZ3MsIGFyZ3ZlYyArIDEpOworICAgIH0gCisgIGlm IChleHRfZm4pCisgICAgeworICAgICAgaWYgKGV4dF9mbl9pc19tZXRob2Qg KGV4dF9mbikpCisJeworCSAgc3RydWN0IHZhbHVlICpyZXRfdmFsID0gZXh0 X2ZuX2ludm9rZV9tZXRob2QgKGV4dF9mbiwgYXJnMSwgTlVMTCwgMCk7CisK KwkgIGlmIChyZXRfdmFsID09IE5VTEwpCisJICAgICAgZXJyb3IgKF8oIkVy cm9yIGludm9raW5nIGRlYnVnIG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBmb3Ig IgorCQkgICAgICAgIm1ldGhvZCAlcyIpLCB0c3RyKTsKKworCSAgeGZyZWUg KGV4dF9mbik7CisKKwkgIHJldHVybiByZXRfdmFsOworCX0KKyAgICAgIGVs c2UKKwl7CisJICAvKiBUaGlzIGVsc2Ugc2hvdWxkIG5vdCBiZSB0YWtlbiBh cyBvbmx5IGRlYnVnIG1ldGhvZHMKKwkgICAgIGFyZSBzdXBwb3J0ZWQgY3Vy cmVudGx5LiAgKi8KKwkgIGludGVybmFsX2Vycm9yIChfX0ZJTEVfXywgX19M SU5FX18sCisJCQkgIF8oIkludm9raW5nIGFuIGV4dGVuc2lvbiBsYW5ndWFn ZSAiCisJCQkgICAgImZ1bmN0aW9uIChub3QgYSBtZXRob2QpLiIpKTsKKwl9 CiAgICAgfQogICB0aHJvd19lcnJvciAoTk9UX0ZPVU5EX0VSUk9SLAogICAg ICAgICAgICAgICAgXygibWVtYmVyIGZ1bmN0aW9uICVzIG5vdCBmb3VuZCIp LCB0c3RyKTsKZGlmZiAtLWdpdCBhL2dkYi92YWxvcHMuYyBiL2dkYi92YWxv cHMuYwppbmRleCBkZWIwMWNiLi44NjY4MWNiIDEwMDY0NAotLS0gYS9nZGIv dmFsb3BzLmMKKysrIGIvZ2RiL3ZhbG9wcy5jCkBAIC00Miw2ICs0Miw3IEBA CiAjaW5jbHVkZSAib2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJvYmpmaWxlcy5o IgogI2luY2x1ZGUgImV4Y2VwdGlvbnMuaCIKKyNpbmNsdWRlICJleHQtZnVu Y3Rpb24uaCIKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBvdmVybG9hZF9kZWJ1 ZzsKIC8qIExvY2FsIGZ1bmN0aW9ucy4gICovCkBAIC03MCw4ICs3MSw4IEBA IGludCBmaW5kX29sb2FkX2NoYW1wX25hbWVzcGFjZV9sb29wIChzdHJ1Y3Qg dmFsdWUgKiosIGludCwKIAkJCQkgICAgIGNvbnN0IGludCBub19hZGwpOwog CiBzdGF0aWMgaW50IGZpbmRfb2xvYWRfY2hhbXAgKHN0cnVjdCB2YWx1ZSAq KiwgaW50LCBpbnQsIGludCwKLQkJCSAgICAgc3RydWN0IGZuX2ZpZWxkICos IHN0cnVjdCBzeW1ib2wgKiosCi0JCQkgICAgIHN0cnVjdCBiYWRuZXNzX3Zl Y3RvciAqKik7CisJCQkgICAgIHN0cnVjdCBmbl9maWVsZCAqLCBWRUMgKGV4 dF9mbl9kZXNjcmlwdG9yX3ApICosCisJCQkgICAgIHN0cnVjdCBzeW1ib2wg KiosIHN0cnVjdCBiYWRuZXNzX3ZlY3RvciAqKik7CiAKIHN0YXRpYyBpbnQg b2xvYWRfbWV0aG9kX3N0YXRpYyAoaW50LCBzdHJ1Y3QgZm5fZmllbGQgKiwg aW50KTsKIApAQCAtOTgsOSArOTksMTAgQEAgc3RhdGljIENPUkVfQUREUiBh bGxvY2F0ZV9zcGFjZV9pbl9pbmZlcmlvciAoaW50KTsKIAogc3RhdGljIHN0 cnVjdCB2YWx1ZSAqY2FzdF9pbnRvX2NvbXBsZXggKHN0cnVjdCB0eXBlICos IHN0cnVjdCB2YWx1ZSAqKTsKIAotc3RhdGljIHN0cnVjdCBmbl9maWVsZCAq ZmluZF9tZXRob2RfbGlzdCAoc3RydWN0IHZhbHVlICoqLCBjb25zdCBjaGFy ICosCi0JCQkJCSAgaW50LCBzdHJ1Y3QgdHlwZSAqLCBpbnQgKiwKLQkJCQkJ ICBzdHJ1Y3QgdHlwZSAqKiwgaW50ICopOworc3RhdGljIHZvaWQgZmluZF9t ZXRob2RfbGlzdCAoc3RydWN0IHZhbHVlICoqLCBjb25zdCBjaGFyICosCisJ CQkgICAgICBpbnQsIHN0cnVjdCB0eXBlICosIHN0cnVjdCBmbl9maWVsZCAq KiwgaW50ICosCisJCQkgICAgICBWRUMgKGV4dF9mbl9kZXNjcmlwdG9yX3Ap ICoqLAorCQkJICAgICAgc3RydWN0IHR5cGUgKiosIGludCAqKTsKIAogdm9p ZCBfaW5pdGlhbGl6ZV92YWxvcHMgKHZvaWQpOwogCkBAIC0yMjkzLDUyICsy Mjk1LDc2IEBAIHZhbHVlX3N0cnVjdF9lbHRfYml0cG9zIChzdHJ1Y3QgdmFs dWUgKiphcmdwLCBpbnQgYml0cG9zLCBzdHJ1Y3QgdHlwZSAqZnR5cGUsCiAK IC8qIFNlYXJjaCB0aHJvdWdoIHRoZSBtZXRob2RzIG9mIGFuIG9iamVjdCAo YW5kIGl0cyBiYXNlcykgdG8gZmluZCBhCiAgICBzcGVjaWZpZWQgbWV0aG9k LiAgUmV0dXJuIHRoZSBwb2ludGVyIHRvIHRoZSBmbl9maWVsZCBsaXN0IG9m Ci0gICBvdmVybG9hZGVkIGluc3RhbmNlcy4KKyAgIG92ZXJsb2FkZWQgaW5z dGFuY2VzIGRlZmluZWQgaW4gdGhlIHNvdXJjZSBsYW5ndWFnZS4gIElmIGF2 YWlsYWJsZQorICAgYW5kIG1hdGNoaW5nLCBhIHZlY3RvciBtYXRjaGluZy9v dmVybG9hZGVkIGRlYnVnIG1ldGhvZHMgZGVmaW5lZCBpbgorICAgZXh0ZW5z aW9uIGxhbmd1YWdlcyBhcmUgYWxzbyByZXR1cm5lZC4KIAogICAgSGVscGVy IGZ1bmN0aW9uIGZvciB2YWx1ZV9maW5kX29sb2FkX2xpc3QuCiAgICBBUkdQ IGlzIGEgcG9pbnRlciB0byBhIHBvaW50ZXIgdG8gYSB2YWx1ZSAodGhlIG9i amVjdCkuCiAgICBNRVRIT0QgaXMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUg bWV0aG9kIG5hbWUuCiAgICBPRkZTRVQgaXMgdGhlIG9mZnNldCB3aXRoaW4g dGhlIHZhbHVlLgogICAgVFlQRSBpcyB0aGUgYXNzdW1lZCB0eXBlIG9mIHRo ZSBvYmplY3QuCisgICBGTl9MSVNUIFRoZSBwb2ludGVyIHRvIG1hdGNoaW5n IG92ZXJsb2FkZWQgaW5zdGFuY2VzIGRlZmluZWQgaW4KKyAgICAgIHNvdXJj ZSBsYW5ndWFnZS4KICAgIE5VTV9GTlMgaXMgdGhlIG51bWJlciBvZiBvdmVy bG9hZGVkIGluc3RhbmNlcy4KKyAgIEVYVF9GTl9WRUMgVGhlIHZlY3RvciBt YXRjaGluZyBkZWJ1ZyBtZXRob2RzIGRlZmluZWQgaW4gZXh0ZW5zaW9uCisg ICAgICBsYW5ndWFnZXMuCiAgICBCQVNFVFlQRSBpcyBzZXQgdG8gdGhlIGFj dHVhbCB0eXBlIG9mIHRoZSBzdWJvYmplY3Qgd2hlcmUgdGhlCiAgICAgICBt ZXRob2QgaXMgZm91bmQuCiAgICBCT0ZGU0VUIGlzIHRoZSBvZmZzZXQgb2Yg dGhlIGJhc2Ugc3Vib2JqZWN0IHdoZXJlIHRoZSBtZXRob2QgaXMgZm91bmQu ICAqLwogCi1zdGF0aWMgc3RydWN0IGZuX2ZpZWxkICoKK3N0YXRpYyB2b2lk CiBmaW5kX21ldGhvZF9saXN0IChzdHJ1Y3QgdmFsdWUgKiphcmdwLCBjb25z dCBjaGFyICptZXRob2QsCi0JCSAgaW50IG9mZnNldCwgc3RydWN0IHR5cGUg KnR5cGUsIGludCAqbnVtX2ZucywKKwkJICBpbnQgb2Zmc2V0LCBzdHJ1Y3Qg dHlwZSAqdHlwZSwKKwkJICBzdHJ1Y3QgZm5fZmllbGQgKipmbl9saXN0LCBp bnQgKm51bV9mbnMsCisJCSAgVkVDIChleHRfZm5fZGVzY3JpcHRvcl9wKSAq KmV4dF9mbl92ZWMsCiAJCSAgc3RydWN0IHR5cGUgKipiYXNldHlwZSwgaW50 ICpib2Zmc2V0KQogewogICBpbnQgaTsKLSAgc3RydWN0IGZuX2ZpZWxkICpm OwotICBDSEVDS19UWVBFREVGICh0eXBlKTsKKyAgc3RydWN0IGZuX2ZpZWxk ICpmID0gTlVMTDsKIAotICAqbnVtX2ZucyA9IDA7CisgIENIRUNLX1RZUEVE RUYgKHR5cGUpOwogCiAgIC8qIEZpcnN0IGNoZWNrIGluIG9iamVjdCBpdHNl bGYuICAqLwotICBmb3IgKGkgPSBUWVBFX05GTl9GSUVMRFMgKHR5cGUpIC0g MTsgaSA+PSAwOyBpLS0pCi0gICAgewotICAgICAgLyogcGFpOiBGSVhNRSBX aGF0IGFib3V0IG9wZXJhdG9ycyBhbmQgdHlwZSBjb252ZXJzaW9ucz8gICov Ci0gICAgICBjb25zdCBjaGFyICpmbl9maWVsZF9uYW1lID0gVFlQRV9GTl9G SUVMRExJU1RfTkFNRSAodHlwZSwgaSk7CiAKLSAgICAgIGlmIChmbl9maWVs ZF9uYW1lICYmIChzdHJjbXBfaXcgKGZuX2ZpZWxkX25hbWUsIG1ldGhvZCkg PT0gMCkpCi0JewotCSAgaW50IGxlbiA9IFRZUEVfRk5fRklFTERMSVNUX0xF TkdUSCAodHlwZSwgaSk7Ci0JICBzdHJ1Y3QgZm5fZmllbGQgKmYgPSBUWVBF X0ZOX0ZJRUxETElTVDEgKHR5cGUsIGkpOworICBpZiAoZm5fbGlzdCAmJiAh KCpmbl9saXN0KSkKKyAgICBmb3IgKGkgPSBUWVBFX05GTl9GSUVMRFMgKHR5 cGUpIC0gMTsgaSA+PSAwOyBpLS0pCisgICAgICB7CisJLyogcGFpOiBGSVhN RSBXaGF0IGFib3V0IG9wZXJhdG9ycyBhbmQgdHlwZSBjb252ZXJzaW9ucz8g ICovCisJY29uc3QgY2hhciAqZm5fZmllbGRfbmFtZSA9IFRZUEVfRk5fRklF TERMSVNUX05BTUUgKHR5cGUsIGkpOworICAKKwlpZiAoZm5fZmllbGRfbmFt ZSAmJiAoc3RyY21wX2l3IChmbl9maWVsZF9uYW1lLCBtZXRob2QpID09IDAp KQorICAJeworICAJICBpbnQgbGVuID0gVFlQRV9GTl9GSUVMRExJU1RfTEVO R1RIICh0eXBlLCBpKTsKKyAgCSAgZiA9IFRZUEVfRk5fRklFTERMSVNUMSAo dHlwZSwgaSk7CisJICAqZm5fbGlzdCA9IGY7CisgIAorICAJICAqbnVtX2Zu cyA9IGxlbjsKKyAgCSAgKmJhc2V0eXBlID0gdHlwZTsKKyAgCSAgKmJvZmZz ZXQgPSBvZmZzZXQ7CisgIAorICAJICAvKiBSZXNvbHZlIGFueSBzdHViIG1l dGhvZHMuICAqLworICAJICBjaGVja19zdHViX21ldGhvZF9ncm91cCAodHlw ZSwgaSk7CisgIAorCSAgYnJlYWs7CisgIAl9CisgICAgICB9CiAKLQkgICpu dW1fZm5zID0gbGVuOwotCSAgKmJhc2V0eXBlID0gdHlwZTsKLQkgICpib2Zm c2V0ID0gb2Zmc2V0OworICBpZiAoZXh0X2ZuX3ZlYykKKyAgICB7CisgICAg ICBWRUMgKGV4dF9mbl9kZXNjcmlwdG9yX3ApICplZl92ZWMgPSBOVUxMLCAq bmV3X3ZlYyA9IE5VTEw7CiAKLQkgIC8qIFJlc29sdmUgYW55IHN0dWIgbWV0 aG9kcy4gICovCi0JICBjaGVja19zdHViX21ldGhvZF9ncm91cCAodHlwZSwg aSk7CisgICAgICBlZl92ZWMgPSBnZXRfbWF0Y2hpbmdfZXh0X21ldGhvZHMg KHR5cGUsIG1ldGhvZCk7CisgICAgICBuZXdfdmVjID0gVkVDX21lcmdlIChl eHRfZm5fZGVzY3JpcHRvcl9wLCAqZXh0X2ZuX3ZlYywgZWZfdmVjKTsKIAot CSAgcmV0dXJuIGY7Ci0JfQorICAgICAgVkVDX2ZyZWUgKGV4dF9mbl9kZXNj cmlwdG9yX3AsICpleHRfZm5fdmVjKTsKKyAgICAgIFZFQ19mcmVlIChleHRf Zm5fZGVzY3JpcHRvcl9wLCBlZl92ZWMpOworICAgICAgKmV4dF9mbl92ZWMg PSBuZXdfdmVjOwogICAgIH0KIAotICAvKiBOb3QgZm91bmQgaW4gb2JqZWN0 LCBjaGVjayBpbiBiYXNlIHN1Ym9iamVjdHMuICAqLworICAvKiBJZiBzb3Vy Y2UgbWV0aG9kcyBhcmUgbm90IGZvdW5kIGluIGN1cnJlbnQgY2xhc3MsIGxv b2sgZm9yIHRoZW0gaW4gdGhlCisgICAgIGJhc2UgY2xhc3Nlcy4gIFdlIGhh dmUgdG8gZ28gdGhyb3VnaCB0aGUgYmFzZSBjbGFzc2VzIHRvIGdhdGhlciBl eHRlbnNpb24KKyAgICAgbWV0aG9kcyBhbnl3YXkuICAqLwogICBmb3IgKGkg PSBUWVBFX05fQkFTRUNMQVNTRVMgKHR5cGUpIC0gMTsgaSA+PSAwOyBpLS0p CiAgICAgewogICAgICAgaW50IGJhc2Vfb2Zmc2V0OwpAQCAtMjM1NSwxMyAr MjM4MSwxMSBAQCBmaW5kX21ldGhvZF9saXN0IChzdHJ1Y3QgdmFsdWUgKiph cmdwLCBjb25zdCBjaGFyICptZXRob2QsCiAJewogCSAgYmFzZV9vZmZzZXQg PSBUWVBFX0JBU0VDTEFTU19CSVRQT1MgKHR5cGUsIGkpIC8gODsKIAl9Ci0g ICAgICBmID0gZmluZF9tZXRob2RfbGlzdCAoYXJncCwgbWV0aG9kLCBiYXNl X29mZnNldCArIG9mZnNldCwKLQkJCSAgICBUWVBFX0JBU0VDTEFTUyAodHlw ZSwgaSksIG51bV9mbnMsIAotCQkJICAgIGJhc2V0eXBlLCBib2Zmc2V0KTsK LSAgICAgIGlmIChmKQotCXJldHVybiBmOworICAgICAgCisgICAgICBmaW5k X21ldGhvZF9saXN0IChhcmdwLCBtZXRob2QsIGJhc2Vfb2Zmc2V0ICsgb2Zm c2V0LAorCQkJVFlQRV9CQVNFQ0xBU1MgKHR5cGUsIGkpLCBmbl9saXN0LCBu dW1fZm5zLAorCQkJZXh0X2ZuX3ZlYywgYmFzZXR5cGUsIGJvZmZzZXQpOwog ICAgIH0KLSAgcmV0dXJuIE5VTEw7CiB9CiAKIC8qIFJldHVybiB0aGUgbGlz dCBvZiBvdmVybG9hZGVkIG1ldGhvZHMgb2YgYSBzcGVjaWZpZWQgbmFtZS4K QEAgLTIzNjksMTQgKzIzOTMsMjAgQEAgZmluZF9tZXRob2RfbGlzdCAoc3Ry dWN0IHZhbHVlICoqYXJncCwgY29uc3QgY2hhciAqbWV0aG9kLAogICAgQVJH UCBpcyBhIHBvaW50ZXIgdG8gYSBwb2ludGVyIHRvIGEgdmFsdWUgKHRoZSBv YmplY3QpLgogICAgTUVUSE9EIGlzIHRoZSBtZXRob2QgbmFtZS4KICAgIE9G RlNFVCBpcyB0aGUgb2Zmc2V0IHdpdGhpbiB0aGUgdmFsdWUgY29udGVudHMu CisgICBGTl9MSVNUIFRoZSBwb2ludGVyIHRvIG1hdGNoaW5nIG92ZXJsb2Fk ZWQgaW5zdGFuY2VzIGRlZmluZWQgaW4KKyAgICAgIHNvdXJjZSBsYW5ndWFn ZS4KICAgIE5VTV9GTlMgaXMgdGhlIG51bWJlciBvZiBvdmVybG9hZGVkIGlu c3RhbmNlcy4KKyAgIEVYVF9GTl9WRUMgVGhlIHZlY3RvciBtYXRjaGluZyBk ZWJ1ZyBtZXRob2RzIGRlZmluZWQgaW4gZXh0ZW5zaW9uCisgICAgICBsYW5n dWFnZXMuCiAgICBCQVNFVFlQRSBpcyBzZXQgdG8gdGhlIHR5cGUgb2YgdGhl IGJhc2Ugc3Vib2JqZWN0IHRoYXQgZGVmaW5lcyB0aGUKICAgICAgIG1ldGhv ZC4KICAgIEJPRkZTRVQgaXMgdGhlIG9mZnNldCBvZiB0aGUgYmFzZSBzdWJv YmplY3Qgd2hpY2ggZGVmaW5lcyB0aGUgbWV0aG9kLiAgKi8KIAotc3RhdGlj IHN0cnVjdCBmbl9maWVsZCAqCitzdGF0aWMgdm9pZAogdmFsdWVfZmluZF9v bG9hZF9tZXRob2RfbGlzdCAoc3RydWN0IHZhbHVlICoqYXJncCwgY29uc3Qg Y2hhciAqbWV0aG9kLAotCQkJICAgICAgaW50IG9mZnNldCwgaW50ICpudW1f Zm5zLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvZmZz ZXQsIHN0cnVjdCBmbl9maWVsZCAqKmZuX2xpc3QsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgKm51bV9mbnMsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBWRUMgKGV4dF9mbl9kZXNjcmlwdG9yX3ApICoq ZXh0X2ZuX3ZlYywKIAkJCSAgICAgIHN0cnVjdCB0eXBlICoqYmFzZXR5cGUs IGludCAqYm9mZnNldCkKIHsKICAgc3RydWN0IHR5cGUgKnQ7CkBAIC0yMzk4 LDggKzI0MjgsMzQgQEAgdmFsdWVfZmluZF9vbG9hZF9tZXRob2RfbGlzdCAo c3RydWN0IHZhbHVlICoqYXJncCwgY29uc3QgY2hhciAqbWV0aG9kLAogICAg IGVycm9yIChfKCJBdHRlbXB0IHRvIGV4dHJhY3QgYSBjb21wb25lbnQgb2Yg YSAiCiAJICAgICAidmFsdWUgdGhhdCBpcyBub3QgYSBzdHJ1Y3Qgb3IgdW5p b24iKSk7CiAKLSAgcmV0dXJuIGZpbmRfbWV0aG9kX2xpc3QgKGFyZ3AsIG1l dGhvZCwgMCwgdCwgbnVtX2ZucywgCi0JCQkgICBiYXNldHlwZSwgYm9mZnNl dCk7CisgIC8qIENsZWFyIHRoZSBsaXN0cy4gICovCisgIGlmIChmbl9saXN0 KQorICAgIHsKKyAgICAgICpmbl9saXN0ID0gTlVMTDsKKyAgICAgICpudW1f Zm5zID0gMDsKKyAgICB9CisgIGlmIChleHRfZm5fdmVjKQorICAgICpleHRf Zm5fdmVjID0gVkVDX2FsbG9jIChleHRfZm5fZGVzY3JpcHRvcl9wLCAxKTsK KworICBmaW5kX21ldGhvZF9saXN0IChhcmdwLCBtZXRob2QsIDAsIHQsIGZu X2xpc3QsIG51bV9mbnMsIGV4dF9mbl92ZWMsCisJCSAgICBiYXNldHlwZSwg Ym9mZnNldCk7Cit9CisKKy8qIFJldHVybiB0aGUgZHluYW1pYyB0eXBlIG9m IE9CSi4gICovCisKK3N0YXRpYyBzdHJ1Y3QgdHlwZSAqCit2YWx1ZV9oYXNf aW5kaXJlY3RfZHluYW1pY190eXBlIChzdHJ1Y3QgdmFsdWUgKm9iaikKK3sK KyAgc3RydWN0IHR5cGUgKnN0eXBlLCAqZHR5cGUsICpkdHlwZV9pbmQ7CisK KyAgc3R5cGUgPSBjaGVja190eXBlZGVmIChUWVBFX1RBUkdFVF9UWVBFICh2 YWx1ZV90eXBlIChvYmopKSk7CisgIGR0eXBlX2luZCA9IHZhbHVlX3J0dGlf aW5kaXJlY3RfdHlwZSAob2JqLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgZHR5 cGUgPSBkdHlwZV9pbmQgPyBjaGVja190eXBlZGVmIChUWVBFX1RBUkdFVF9U WVBFIChkdHlwZV9pbmQpKSA6IHN0eXBlOworCisgIGlmIChjbGFzc190eXBl c19zYW1lX3AgKHN0eXBlLCBkdHlwZSkpCisgICAgcmV0dXJuIE5VTEw7Cisg IGVsc2UKKyAgICByZXR1cm4gZHR5cGVfaW5kOwogfQogCiAvKiBHaXZlbiBh biBhcnJheSBvZiBhcmd1bWVudHMgKEFSR1MpICh3aGljaCBpbmNsdWRlcyBh bgpAQCAtMjQyNyw5ICsyNDgzLDExIEBAIHZhbHVlX2ZpbmRfb2xvYWRfbWV0 aG9kX2xpc3QgKHN0cnVjdCB2YWx1ZSAqKmFyZ3AsIGNvbnN0IGNoYXIgKm1l dGhvZCwKICAgIFJldHVybiB2YWx1ZSBpcyBhbiBpbnRlZ2VyOiAwIC0+IGdv b2QgbWF0Y2gsIDEwIC0+IGRlYnVnZ2VyIGFwcGxpZWQKICAgIG5vbi1zdGFu ZGFyZCBjb2VyY2lvbnMsIDEwMCAtPiBpbmNvbXBhdGlibGUuCiAKLSAgIElm IGEgbWV0aG9kIGlzIGJlaW5nIHNlYXJjaGVkIGZvciwgVkFMUCB3aWxsIGhv bGQgdGhlIHZhbHVlLgotICAgSWYgYSBub24tbWV0aG9kIGlzIGJlaW5nIHNl YXJjaGVkIGZvciwgU1lNUCB3aWxsIGhvbGQgdGhlIHN5bWJvbCAKLSAgIGZv ciBpdC4KKyAgIElmIHRoZSBiZXN0IG1hdGNoIGlzIGEgZGVidWcgZnVuY3Rp b24vbWV0aG9kIGltcGxlbWVudGVkIGluIGFuIGV4dGVuc2lvbgorICAgbGFu Z3VhZ2UsIHRoZW4gRVhUX0ZOIHdpbGwgaG9sZCB0aGUgbWF0Y2hpbmcgZnVu Y3Rpb24vbWV0aG9kLiAgT3RoZXJ3aXNlLAorICAgVkFMUCB3aWxsIGhvbGQg dGhlIHZhbHVlIGlmIGEgbWV0aG9kIGlzIGJlaW5nIHNlYXJjaGVkIGZvciwg b3IgU1lNUCB3aWxsCisgICBob2xkIHRoZSBzeW1ib2wgZm9yIHRoZSBtYXRj aGluZyBmdW5jdGlvbiBpZiBhIG5vbi1tZXRob2QgaXMgYmVpbmcKKyAgIHNl YXJjaGVkIGZvci4KIAogICAgSWYgYSBtZXRob2QgaXMgYmVpbmcgc2VhcmNo ZWQgZm9yLCBhbmQgaXQgaXMgYSBzdGF0aWMgbWV0aG9kLAogICAgdGhlbiBT VEFUSUNQIHdpbGwgcG9pbnQgdG8gYSBub24temVybyB2YWx1ZS4KQEAgLTI0 NDcsNiArMjUwNSw3IEBAIGZpbmRfb3ZlcmxvYWRfbWF0Y2ggKHN0cnVjdCB2 YWx1ZSAqKmFyZ3MsIGludCBuYXJncywKIAkJICAgICBjb25zdCBjaGFyICpu YW1lLCBlbnVtIG9sb2FkX3NlYXJjaF90eXBlIG1ldGhvZCwKIAkJICAgICBz dHJ1Y3QgdmFsdWUgKipvYmpwLCBzdHJ1Y3Qgc3ltYm9sICpmc3ltLAogCQkg ICAgIHN0cnVjdCB2YWx1ZSAqKnZhbHAsIHN0cnVjdCBzeW1ib2wgKipzeW1w LCAKKwkJICAgICBzdHJ1Y3QgZXh0X2ZuX2Rlc2NyaXB0b3IgKipleHRfZm4s CiAJCSAgICAgaW50ICpzdGF0aWNwLCBjb25zdCBpbnQgbm9fYWRsKQogewog ICBzdHJ1Y3QgdmFsdWUgKm9iaiA9IChvYmpwID8gKm9ianAgOiBOVUxMKTsK QEAgLTI0NTQsMTYgKzI1MTMsMjQgQEAgZmluZF9vdmVybG9hZF9tYXRjaCAo c3RydWN0IHZhbHVlICoqYXJncywgaW50IG5hcmdzLAogICAvKiBJbmRleCBv ZiBiZXN0IG92ZXJsb2FkZWQgZnVuY3Rpb24uICAqLwogICBpbnQgZnVuY19v bG9hZF9jaGFtcCA9IC0xOwogICBpbnQgbWV0aG9kX29sb2FkX2NoYW1wID0g LTE7CisgIGludCBzcmNfbWV0aG9kX29sb2FkX2NoYW1wID0gLTE7CisgIGlu dCBzcmNfbWV0aG9kX29sb2FkX2NoYW1wX2JrcCA9IC0xOworICBpbnQgZXh0 X21ldGhvZF9vbG9hZF9jaGFtcCA9IC0xOworICBpbnQgc3JjX2FuZF9leHRf ZXF1YWwgPSAwOwogCiAgIC8qIFRoZSBtZWFzdXJlIGZvciB0aGUgY3VycmVu dCBiZXN0IG1hdGNoLiAgKi8KICAgc3RydWN0IGJhZG5lc3NfdmVjdG9yICpt ZXRob2RfYmFkbmVzcyA9IE5VTEw7CiAgIHN0cnVjdCBiYWRuZXNzX3ZlY3Rv ciAqZnVuY19iYWRuZXNzID0gTlVMTDsKKyAgc3RydWN0IGJhZG5lc3NfdmVj dG9yICpleHRfbWV0aG9kX2JhZG5lc3MgPSBOVUxMOworICBzdHJ1Y3QgYmFk bmVzc192ZWN0b3IgKnNyY19tZXRob2RfYmFkbmVzcyA9IE5VTEw7CiAKICAg c3RydWN0IHZhbHVlICp0ZW1wID0gb2JqOwogICAvKiBGb3IgbWV0aG9kcywg dGhlIGxpc3Qgb2Ygb3ZlcmxvYWRlZCBtZXRob2RzLiAgKi8KICAgc3RydWN0 IGZuX2ZpZWxkICpmbnNfcHRyID0gTlVMTDsKICAgLyogRm9yIG5vbi1tZXRo b2RzLCB0aGUgbGlzdCBvZiBvdmVybG9hZGVkIGZ1bmN0aW9uIHN5bWJvbHMu ICAqLwogICBzdHJ1Y3Qgc3ltYm9sICoqb2xvYWRfc3ltcyA9IE5VTEw7Cisg IC8qIEZvciBleHRlbnNpb24gZnVuY3Rpb25zLCB0aGUgVkVDIG9mIGV4dGVu c2lvbiBmdW5jdGlvbiBkZXNjcmlwdG9ycy4gICovCisgIFZFQyAoZXh0X2Zu X2Rlc2NyaXB0b3JfcCkgKmV4dF9mbl92ZWMgPSBOVUxMOwogICAvKiBOdW1i ZXIgb2Ygb3ZlcmxvYWRlZCBpbnN0YW5jZXMgYmVpbmcgY29uc2lkZXJlZC4g ICovCiAgIGludCBudW1fZm5zID0gMDsKICAgc3RydWN0IHR5cGUgKmJhc2V0 eXBlID0gTlVMTDsKQEAgLTI0NzUsNiArMjU0Miw4IEBAIGZpbmRfb3Zlcmxv YWRfbWF0Y2ggKHN0cnVjdCB2YWx1ZSAqKmFyZ3MsIGludCBuYXJncywKICAg Y29uc3QgY2hhciAqZnVuY19uYW1lID0gTlVMTDsKICAgZW51bSBvbG9hZF9j bGFzc2lmaWNhdGlvbiBtYXRjaF9xdWFsaXR5OwogICBlbnVtIG9sb2FkX2Ns YXNzaWZpY2F0aW9uIG1ldGhvZF9tYXRjaF9xdWFsaXR5ID0gSU5DT01QQVRJ QkxFOworICBlbnVtIG9sb2FkX2NsYXNzaWZpY2F0aW9uIHNyY19tZXRob2Rf bWF0Y2hfcXVhbGl0eSA9IElOQ09NUEFUSUJMRTsKKyAgZW51bSBvbG9hZF9j bGFzc2lmaWNhdGlvbiBleHRfbWV0aG9kX21hdGNoX3F1YWxpdHkgPSBJTkNP TVBBVElCTEU7CiAgIGVudW0gb2xvYWRfY2xhc3NpZmljYXRpb24gZnVuY19t YXRjaF9xdWFsaXR5ID0gSU5DT01QQVRJQkxFOwogCiAgIC8qIEdldCB0aGUg bGlzdCBvZiBvdmVybG9hZGVkIG1ldGhvZHMgb3IgZnVuY3Rpb25zLiAgKi8K QEAgLTI1MDMsMTIgKzI1NzIsMTIgQEAgZmluZF9vdmVybG9hZF9tYXRjaCAo c3RydWN0IHZhbHVlICoqYXJncywgaW50IG5hcmdzLAogCX0KIAogICAgICAg LyogUmV0cmlldmUgdGhlIGxpc3Qgb2YgbWV0aG9kcyB3aXRoIHRoZSBuYW1l IE5BTUUuICAqLwotICAgICAgZm5zX3B0ciA9IHZhbHVlX2ZpbmRfb2xvYWRf bWV0aG9kX2xpc3QgKCZ0ZW1wLCBuYW1lLCAKLQkJCQkJICAgICAgMCwgJm51 bV9mbnMsIAotCQkJCQkgICAgICAmYmFzZXR5cGUsICZib2Zmc2V0KTsKKyAg ICAgIHZhbHVlX2ZpbmRfb2xvYWRfbWV0aG9kX2xpc3QgKCZ0ZW1wLCBuYW1l LCAwLCAmZm5zX3B0ciwgJm51bV9mbnMsCisJCQkJICAgIGV4dF9mbiA/ICZl eHRfZm5fdmVjIDogTlVMTCwKKwkJCQkgICAgJmJhc2V0eXBlLCAmYm9mZnNl dCk7CiAgICAgICAvKiBJZiB0aGlzIGlzIGEgbWV0aG9kIG9ubHkgc2VhcmNo LCBhbmQgbm8gbWV0aG9kcyB3ZXJlIGZvdW5kCiAgICAgICAgICB0aGUgc2Vh cmNoIGhhcyBmYWlsZC4gICovCi0gICAgICBpZiAobWV0aG9kID09IE1FVEhP RCAmJiAoIWZuc19wdHIgfHwgIW51bV9mbnMpKQorICAgICAgaWYgKG1ldGhv ZCA9PSBNRVRIT0QgJiYgKCFmbnNfcHRyIHx8ICFudW1fZm5zKSAmJiAhZXh0 X2ZuX3ZlYykKIAllcnJvciAoXygiQ291bGRuJ3QgZmluZCBtZXRob2QgJXMl cyVzIiksCiAJICAgICAgIG9ial90eXBlX25hbWUsCiAJICAgICAgIChvYmpf dHlwZV9uYW1lICYmICpvYmpfdHlwZV9uYW1lKSA/ICI6OiIgOiAiIiwKQEAg LTI1MTksMTggKzI1ODgsODIgQEAgZmluZF9vdmVybG9hZF9tYXRjaCAoc3Ry dWN0IHZhbHVlICoqYXJncywgaW50IG5hcmdzLAogICAgICAgaWYgKGZuc19w dHIpCiAJewogCSAgZ2RiX2Fzc2VydCAoVFlQRV9ET01BSU5fVFlQRSAoZm5z X3B0clswXS50eXBlKSAhPSBOVUxMKTsKLQkgIG1ldGhvZF9vbG9hZF9jaGFt cCA9IGZpbmRfb2xvYWRfY2hhbXAgKGFyZ3MsIG5hcmdzLCBtZXRob2QsCi0J ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1f Zm5zLCBmbnNfcHRyLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgb2xvYWRfc3ltcywgJm1ldGhvZF9iYWRuZXNzKTsKLQot CSAgbWV0aG9kX21hdGNoX3F1YWxpdHkgPQotCSAgICAgIGNsYXNzaWZ5X29s b2FkX21hdGNoIChtZXRob2RfYmFkbmVzcywgbmFyZ3MsCi0JICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG9sb2FkX21ldGhvZF9zdGF0aWMgKG1ldGhv ZCwgZm5zX3B0ciwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbWV0aG9kX29sb2FkX2NoYW1wKSk7CisJICBz cmNfbWV0aG9kX29sb2FkX2NoYW1wID0gZmluZF9vbG9hZF9jaGFtcCAoYXJn cywgbmFyZ3MsIG1ldGhvZCwKKwkJCQkJCSAgICAgbnVtX2ZucywgZm5zX3B0 ciwgTlVMTCwKKwkJCQkJCSAgICAgb2xvYWRfc3ltcywKKwkJCQkJCSAgICAg JnNyY19tZXRob2RfYmFkbmVzcyk7CisKKwkgIHNyY19tZXRob2RfbWF0Y2hf cXVhbGl0eSA9CisJICAgICAgY2xhc3NpZnlfb2xvYWRfbWF0Y2ggKAorCQkg IHNyY19tZXRob2RfYmFkbmVzcywgbmFyZ3MsCisJCSAgb2xvYWRfbWV0aG9k X3N0YXRpYyAobWV0aG9kLCBmbnNfcHRyLAorCQkJCSAgICAgICBzcmNfbWV0 aG9kX29sb2FkX2NoYW1wKSk7CisKKwkgIG1ha2VfY2xlYW51cCAoeGZyZWUs IHNyY19tZXRob2RfYmFkbmVzcyk7CisJfQogCi0JICBtYWtlX2NsZWFudXAg KHhmcmVlLCBtZXRob2RfYmFkbmVzcyk7CisgICAgICBpZiAoZXh0X2ZuICYm IFZFQ19sZW5ndGggKGV4dF9mbl9kZXNjcmlwdG9yX3AsIGV4dF9mbl92ZWMp KQorCXsKKwkgIGV4dF9tZXRob2Rfb2xvYWRfY2hhbXAgPSBmaW5kX29sb2Fk X2NoYW1wIChhcmdzLCBuYXJncywgbWV0aG9kLAorCQkJCQkJICAgICAwLCBO VUxMLCBleHRfZm5fdmVjLAorCQkJCQkJICAgICBOVUxMLCAmZXh0X21ldGhv ZF9iYWRuZXNzKTsKKwkgIGV4dF9tZXRob2RfbWF0Y2hfcXVhbGl0eSA9IGNs YXNzaWZ5X29sb2FkX21hdGNoIChleHRfbWV0aG9kX2JhZG5lc3MsCisJCQkJ CQkJICAgbmFyZ3MsIDApOworCSAgbWFrZV9jbGVhbnVwICh4ZnJlZSwgZXh0 X21ldGhvZF9iYWRuZXNzKTsKKwkgIG1ha2VfZXh0X2ZuX3ZlY19jbGVhbnVw IChleHRfZm5fdmVjKTsKIAl9CiAKKyAgICAgIGlmIChzcmNfbWV0aG9kX29s b2FkX2NoYW1wID49IDAgJiYgZXh0X21ldGhvZF9vbG9hZF9jaGFtcCA+PSAw KQorCXsKKwkgIHN3aXRjaCAoY29tcGFyZV9iYWRuZXNzIChleHRfbWV0aG9k X2JhZG5lc3MsIHNyY19tZXRob2RfYmFkbmVzcykpCisJICAgIHsKKwkgICAg ICBjYXNlIDA6IC8qIFNyYyBtZXRob2QgYW5kIGV4dCBtZXRob2QgYXJlIGVx dWFsbHkgZ29vZC4gICovCisJCXNyY19hbmRfZXh0X2VxdWFsID0gMTsKKwkg ICAgICBjYXNlIDE6IC8qIFNyYyBtZXRob2QgYW5kIGV4dCBtZXRob2QgYXJl IGluY29tcGF0aWJsZSAgKi8KKwkJLyogaWYgZXh0IG1ldGhvZCBtYXRjaCBp cyBub3Qgc3RhbmRhcmQsIHRoZW4gbGV0IHNvdXJjZSBtZXRob2QKKwkJICAg d2luLiAgKi8KKwkJaWYgKGV4dF9tZXRob2RfbWF0Y2hfcXVhbGl0eSAhPSBT VEFOREFSRCkKKwkJICB7CisJCSAgICBtZXRob2Rfb2xvYWRfY2hhbXAgPSBz cmNfbWV0aG9kX29sb2FkX2NoYW1wOworCQkgICAgbWV0aG9kX2JhZG5lc3Mg PSBzcmNfbWV0aG9kX2JhZG5lc3M7CisJCSAgICBleHRfbWV0aG9kX29sb2Fk X2NoYW1wID0gLTE7CisJCSAgICBtZXRob2RfbWF0Y2hfcXVhbGl0eSA9IHNy Y19tZXRob2RfbWF0Y2hfcXVhbGl0eTsKKwkJICAgIGJyZWFrOworCQkgIH0K KwkgICAgICBjYXNlIDI6IC8qIEV4dCBtZXRob2QgaXMgY2hhbXBpb24uICAq LworCQltZXRob2Rfb2xvYWRfY2hhbXAgPSBleHRfbWV0aG9kX29sb2FkX2No YW1wOworCQltZXRob2RfYmFkbmVzcyA9IGV4dF9tZXRob2RfYmFkbmVzczsK KwkJc3JjX21ldGhvZF9vbG9hZF9jaGFtcF9ia3AgPSBzcmNfbWV0aG9kX29s b2FkX2NoYW1wOworCQlzcmNfbWV0aG9kX29sb2FkX2NoYW1wID0gLTE7CisJ CW1ldGhvZF9tYXRjaF9xdWFsaXR5ID0gZXh0X21ldGhvZF9tYXRjaF9xdWFs aXR5OworCQlicmVhazsKKwkgICAgICBjYXNlIDM6IC8qIFNyYyBtZXRob2Qg aXMgY2hhbXBpb24uICAqLworCQltZXRob2Rfb2xvYWRfY2hhbXAgPSBzcmNf bWV0aG9kX29sb2FkX2NoYW1wOworCQltZXRob2RfYmFkbmVzcyA9IHNyY19t ZXRob2RfYmFkbmVzczsKKwkJZXh0X21ldGhvZF9vbG9hZF9jaGFtcCA9IC0x OworCQltZXRob2RfbWF0Y2hfcXVhbGl0eSA9IHNyY19tZXRob2RfbWF0Y2hf cXVhbGl0eTsKKwkJYnJlYWs7CisJICAgICAgZGVmYXVsdDoKKwkJZXJyb3Ig KF8oIkludGVybmFsIGVycm9yOiB1bmV4cGVjdGVkIG92ZXJsb2FkIGNvbXBh cmlzb24gIgorCQkJICJyZXN1bHQiKSk7CisJCWJyZWFrOworCSAgICB9CisJ fQorICAgICAgZWxzZQorCXsKKwkgIGlmIChzcmNfbWV0aG9kX29sb2FkX2No YW1wID49IDApCisJICAgIHsKKwkgICAgICBtZXRob2Rfb2xvYWRfY2hhbXAg PSBzcmNfbWV0aG9kX29sb2FkX2NoYW1wOworCSAgICAgIG1ldGhvZF9iYWRu ZXNzID0gc3JjX21ldGhvZF9iYWRuZXNzOworCSAgICAgIG1ldGhvZF9tYXRj aF9xdWFsaXR5ID0gc3JjX21ldGhvZF9tYXRjaF9xdWFsaXR5OworCSAgICB9 CisJICBpZiAoZXh0X21ldGhvZF9vbG9hZF9jaGFtcCA+PSAwKQorCSAgICB7 CisJICAgICAgbWV0aG9kX29sb2FkX2NoYW1wID0gZXh0X21ldGhvZF9vbG9h ZF9jaGFtcDsKKwkgICAgICBtZXRob2RfYmFkbmVzcyA9IGV4dF9tZXRob2Rf YmFkbmVzczsKKwkgICAgICBtZXRob2RfbWF0Y2hfcXVhbGl0eSA9IGV4dF9t ZXRob2RfbWF0Y2hfcXVhbGl0eTsKKwkgICAgfQorCX0KICAgICB9CiAKICAg aWYgKG1ldGhvZCA9PSBOT05fTUVUSE9EIHx8IG1ldGhvZCA9PSBCT1RIKQpA QCAtMjY3MywyMSArMjgwNiw2IEBAIGZpbmRfb3ZlcmxvYWRfbWF0Y2ggKHN0 cnVjdCB2YWx1ZSAqKmFyZ3MsIGludCBuYXJncywKIAkJIGZ1bmNfbmFtZSk7 CiAgICAgfQogCi0gIGlmIChzdGF0aWNwICE9IE5VTEwpCi0gICAgKnN0YXRp Y3AgPSBvbG9hZF9tZXRob2Rfc3RhdGljIChtZXRob2QsIGZuc19wdHIsIG1l dGhvZF9vbG9hZF9jaGFtcCk7Ci0KLSAgaWYgKG1ldGhvZF9vbG9hZF9jaGFt cCA+PSAwKQotICAgIHsKLSAgICAgIGlmIChUWVBFX0ZOX0ZJRUxEX1ZJUlRV QUxfUCAoZm5zX3B0ciwgbWV0aG9kX29sb2FkX2NoYW1wKSkKLQkqdmFscCA9 IHZhbHVlX3ZpcnR1YWxfZm5fZmllbGQgKCZ0ZW1wLCBmbnNfcHRyLCBtZXRo b2Rfb2xvYWRfY2hhbXAsCi0JCQkJCWJhc2V0eXBlLCBib2Zmc2V0KTsKLSAg ICAgIGVsc2UKLQkqdmFscCA9IHZhbHVlX2ZuX2ZpZWxkICgmdGVtcCwgZm5z X3B0ciwgbWV0aG9kX29sb2FkX2NoYW1wLAotCQkJCWJhc2V0eXBlLCBib2Zm c2V0KTsKLSAgICB9Ci0gIGVsc2UKLSAgICAqc3ltcCA9IG9sb2FkX3N5bXNb ZnVuY19vbG9hZF9jaGFtcF07Ci0KICAgaWYgKG9ianApCiAgICAgewogICAg ICAgc3RydWN0IHR5cGUgKnRlbXBfdHlwZSA9IGNoZWNrX3R5cGVkZWYgKHZh bHVlX3R5cGUgKHRlbXApKTsKQEAgLTI2OTcsMTAgKzI4MTUsNjUgQEAgZmlu ZF9vdmVybG9hZF9tYXRjaCAoc3RydWN0IHZhbHVlICoqYXJncywgaW50IG5h cmdzLAogCSAgJiYgKFRZUEVfQ09ERSAob2JqdHlwZSkgPT0gVFlQRV9DT0RF X1BUUgogCSAgICAgIHx8IFRZUEVfQ09ERSAob2JqdHlwZSkgPT0gVFlQRV9D T0RFX1JFRikpCiAJewotCSAgdGVtcCA9IHZhbHVlX2FkZHIgKHRlbXApOwor CSAgKm9ianAgPSB2YWx1ZV9hZGRyICh0ZW1wKTsKKwl9CisgICAgICBlbHNl CisJKm9ianAgPSB0ZW1wOworICAgIH0KKworICBpZiAoc3RhdGljcCAhPSBO VUxMKQorICAgICpzdGF0aWNwID0gb2xvYWRfbWV0aG9kX3N0YXRpYyAobWV0 aG9kLCBmbnNfcHRyLCBtZXRob2Rfb2xvYWRfY2hhbXApOworCisgIGlmICht ZXRob2Rfb2xvYWRfY2hhbXAgPj0gMCkKKyAgICB7CisgICAgICBpZiAoc3Jj X21ldGhvZF9vbG9hZF9jaGFtcCA+PSAwKQorCXsKKwkgIGlmIChUWVBFX0ZO X0ZJRUxEX1ZJUlRVQUxfUCAoZm5zX3B0ciwgbWV0aG9kX29sb2FkX2NoYW1w KSkKKwkgICAgeworCSAgICAgIHN0cnVjdCB0eXBlICpkdHlwZTsKKyAgICAg IAorCSAgICAgIGR0eXBlID0gdmFsdWVfaGFzX2luZGlyZWN0X2R5bmFtaWNf dHlwZSAoYXJnc1swXSk7CisJICAgICAgaWYgKGR0eXBlKQorCQl7CisJCSAg YXJnc1swXSA9IHZhbHVlX2Nhc3QgKGR0eXBlLCBhcmdzWzBdKTsKKwkJICBk b19jbGVhbnVwcyAoYWxsX2NsZWFudXBzKTsKKwkJICByZXR1cm4gZmluZF9v dmVybG9hZF9tYXRjaCAoYXJncywgbmFyZ3MsIG5hbWUsIG1ldGhvZCwKKwkJ CQkJICAgICAgb2JqcCwgZnN5bSwgdmFscCwgc3ltcCwgZXh0X2ZuLAorCQkJ CQkgICAgICBzdGF0aWNwLCBub19hZGwpOworCQl9CisJICAgICAgZWxzZQor CQkqdmFscCA9IHZhbHVlX3ZpcnR1YWxfZm5fZmllbGQgKCZ0ZW1wLCBmbnNf cHRyLAorCQkJCQkJbWV0aG9kX29sb2FkX2NoYW1wLAorCQkJCQkJYmFzZXR5 cGUsIGJvZmZzZXQpOworCSAgICB9CisJICBlbHNlCisJICAgICp2YWxwID0g dmFsdWVfZm5fZmllbGQgKCZ0ZW1wLCBmbnNfcHRyLCBtZXRob2Rfb2xvYWRf Y2hhbXAsCisJCQkJICAgIGJhc2V0eXBlLCBib2Zmc2V0KTsKKwl9CisgICAg ICBlbHNlCisJeworCSAgaWYgKHNyY19hbmRfZXh0X2VxdWFsIAorCSAgICAg ICYmIFRZUEVfRk5fRklFTERfVklSVFVBTF9QIChmbnNfcHRyLCBzcmNfbWV0 aG9kX29sb2FkX2NoYW1wX2JrcCkpCisJICAgIHsKKwkgICAgICBzdHJ1Y3Qg dHlwZSAqZHR5cGU7CisgICAgICAKKwkgICAgICBkdHlwZSA9IHZhbHVlX2hh c19pbmRpcmVjdF9keW5hbWljX3R5cGUgKGFyZ3NbMF0pOworCSAgICAgIGlm IChkdHlwZSkKKwkJeworCQkgIGFyZ3NbMF0gPSB2YWx1ZV9jYXN0IChkdHlw ZSwgYXJnc1swXSk7CisJCSAgZG9fY2xlYW51cHMgKGFsbF9jbGVhbnVwcyk7 CisJCSAgcmV0dXJuIGZpbmRfb3ZlcmxvYWRfbWF0Y2ggKGFyZ3MsIG5hcmdz LCBuYW1lLCBtZXRob2QsCisJCQkJCSAgICAgIG9ianAsIGZzeW0sIHZhbHAs IHN5bXAsIGV4dF9mbiwKKwkJCQkJICAgICAgc3RhdGljcCwgbm9fYWRsKTsK KwkJfQorCSAgICB9CisKKwkgICpleHRfZm4gPSBleHRfZm5fY2xvbmUgKFZF Q19pbmRleCAoZXh0X2ZuX2Rlc2NyaXB0b3JfcCwgZXh0X2ZuX3ZlYywKKwkJ CQkJICAgICBleHRfbWV0aG9kX29sb2FkX2NoYW1wKSk7CiAJfQotICAgICAg Km9ianAgPSB0ZW1wOwogICAgIH0KKyAgZWxzZQorICAgICpzeW1wID0gb2xv YWRfc3ltc1tmdW5jX29sb2FkX2NoYW1wXTsKIAogICBkb19jbGVhbnVwcyAo YWxsX2NsZWFudXBzKTsKIApAQCAtMjgzNSw3ICszMDA4LDcgQEAgZmluZF9v bG9hZF9jaGFtcF9uYW1lc3BhY2VfbG9vcCAoc3RydWN0IHZhbHVlICoqYXJn cywgaW50IG5hcmdzLAogICAgICsrbnVtX2ZuczsKIAogICBuZXdfb2xvYWRf Y2hhbXAgPSBmaW5kX29sb2FkX2NoYW1wIChhcmdzLCBuYXJncywgMCwgbnVt X2ZucywKLQkJCQkgICAgICBOVUxMLCBuZXdfb2xvYWRfc3ltcywKKwkJCQkg ICAgICBOVUxMLCBOVUxMLCBuZXdfb2xvYWRfc3ltcywKIAkJCQkgICAgICAm bmV3X29sb2FkX2NoYW1wX2J2KTsKIAogICAvKiBDYXNlIDE6IFdlIGZvdW5k IGEgZ29vZCBtYXRjaC4gIEZyZWUgZWFybGllciBtYXRjaGVzIChpZiBhbnkp LApAQCAtMjg3Myw3ICszMDQ2LDkgQEAgZmluZF9vbG9hZF9jaGFtcF9uYW1l c3BhY2VfbG9vcCAoc3RydWN0IHZhbHVlICoqYXJncywgaW50IG5hcmdzLAog CiAvKiBMb29rIGZvciBhIGZ1bmN0aW9uIHRvIHRha2UgTkFSR1MgYXJncyBv ZiBBUkdTLiAgRmluZAogICAgdGhlIGJlc3QgbWF0Y2ggZnJvbSBhbW9uZyB0 aGUgb3ZlcmxvYWRlZCBtZXRob2RzIG9yIGZ1bmN0aW9ucwotICAgKGRlcGVu ZGluZyBvbiBNRVRIT0QpIGdpdmVuIGJ5IEZOU19QVFIgb3IgT0xPQURfU1lN UywgcmVzcGVjdGl2ZWx5LgorICAgZ2l2ZW4gYnkgRk5TX1BUUiBvciBPTE9B RF9TWU1TIG9yIEVYVF9GTl9WRUMsIHJlc3BlY3RpdmVseS4gIElmCisgICBF WFRfRk5fVkVDIGlzIE5VTEwsIHRoZW4gTUVUSE9EIGluZGljYXRlcyB3aGV0 aGVyIHRvIHVzZSBGTlNfUFRSCisgICBvciBPTE9BRF9TWU1TIHRvIGZpbmQg dGhlIGJlc3QgbWF0Y2guCiAgICBUaGUgbnVtYmVyIG9mIG1ldGhvZHMvZnVu Y3Rpb25zIGluIHRoZSBsaXN0IGlzIGdpdmVuIGJ5IE5VTV9GTlMuCiAgICBS ZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBiZXN0IG1hdGNoOyBzdG9yZSBhbiBp bmRpY2F0aW9uIG9mIHRoZQogICAgcXVhbGl0eSBvZiB0aGUgbWF0Y2ggaW4g T0xPQURfQ0hBTVBfQlYuCkBAIC0yODgzLDEwICszMDU4LDEyIEBAIGZpbmRf b2xvYWRfY2hhbXBfbmFtZXNwYWNlX2xvb3AgKHN0cnVjdCB2YWx1ZSAqKmFy Z3MsIGludCBuYXJncywKIHN0YXRpYyBpbnQKIGZpbmRfb2xvYWRfY2hhbXAg KHN0cnVjdCB2YWx1ZSAqKmFyZ3MsIGludCBuYXJncywgaW50IG1ldGhvZCwK IAkJICBpbnQgbnVtX2Zucywgc3RydWN0IGZuX2ZpZWxkICpmbnNfcHRyLAor CQkgIFZFQyAoZXh0X2ZuX2Rlc2NyaXB0b3JfcCkgKmV4dF9mbl92ZWMsCiAJ CSAgc3RydWN0IHN5bWJvbCAqKm9sb2FkX3N5bXMsCiAJCSAgc3RydWN0IGJh ZG5lc3NfdmVjdG9yICoqb2xvYWRfY2hhbXBfYnYpCiB7CiAgIGludCBpeDsK KyAgaW50IGV4dF9mbl92ZWNfbiA9IDA7CiAgIC8qIEEgbWVhc3VyZSBvZiBo b3cgZ29vZCBhbiBvdmVybG9hZGVkIGluc3RhbmNlIGlzLiAgKi8KICAgc3Ry dWN0IGJhZG5lc3NfdmVjdG9yICpidjsKICAgLyogSW5kZXggb2YgYmVzdCBv dmVybG9hZGVkIGZ1bmN0aW9uLiAgKi8KQEAgLTI4OTYsMTggKzMwNzMsMjcg QEAgZmluZF9vbG9hZF9jaGFtcCAoc3RydWN0IHZhbHVlICoqYXJncywgaW50 IG5hcmdzLCBpbnQgbWV0aG9kLAogICAvKiAwID0+IG5vIGFtYmlndWl0eSwg MSA9PiB0d28gZ29vZCBmdW5jcywgMiA9PiBpbmNvbXBhcmFibGUgZnVuY3Mu ICAqLwogCiAgICpvbG9hZF9jaGFtcF9idiA9IE5VTEw7CisgIGV4dF9mbl92 ZWNfbiA9IGV4dF9mbl92ZWMgPyBWRUNfbGVuZ3RoIChleHRfZm5fZGVzY3Jp cHRvcl9wLCBleHRfZm5fdmVjKSA6IDA7CiAKICAgLyogQ29uc2lkZXIgZWFj aCBjYW5kaWRhdGUgaW4gdHVybi4gICovCi0gIGZvciAoaXggPSAwOyBpeCA8 IG51bV9mbnM7IGl4KyspCisgIGZvciAoaXggPSAwOyAoaXggPCBudW1fZm5z KSB8fCAoaXggPCBleHRfZm5fdmVjX24pOyBpeCsrKQogICAgIHsKICAgICAg IGludCBqajsKLSAgICAgIGludCBzdGF0aWNfb2Zmc2V0ID0gb2xvYWRfbWV0 aG9kX3N0YXRpYyAobWV0aG9kLCBmbnNfcHRyLCBpeCk7CisgICAgICBpbnQg c3RhdGljX29mZnNldCA9IDA7CiAgICAgICBpbnQgbnBhcm1zOwogICAgICAg c3RydWN0IHR5cGUgKipwYXJtX3R5cGVzOworICAgICAgc3RydWN0IGV4dF9m bl9kZXNjcmlwdG9yICpleHRfZm4gPSBOVUxMOworCisgICAgICBpZiAoZXh0 X2ZuX3ZlYykKKwlleHRfZm4gPSBWRUNfaW5kZXggKGV4dF9mbl9kZXNjcmlw dG9yX3AsIGV4dF9mbl92ZWMsIGl4KTsKIAogICAgICAgaWYgKG1ldGhvZCkK IAl7Ci0JICBucGFybXMgPSBUWVBFX05GSUVMRFMgKFRZUEVfRk5fRklFTERf VFlQRSAoZm5zX3B0ciwgaXgpKTsKKwkgIGlmIChmbnNfcHRyKQorCSAgICB7 CisJICAgICAgc3RhdGljX29mZnNldCA9IG9sb2FkX21ldGhvZF9zdGF0aWMg KG1ldGhvZCwgZm5zX3B0ciwgaXgpOworCSAgICAgIG5wYXJtcyA9IFRZUEVf TkZJRUxEUyAoVFlQRV9GTl9GSUVMRF9UWVBFIChmbnNfcHRyLCBpeCkpOwor CSAgICB9CiAJfQogICAgICAgZWxzZQogCXsKQEAgLTI5MTYsMTMgKzMxMDIs MTggQEAgZmluZF9vbG9hZF9jaGFtcCAoc3RydWN0IHZhbHVlICoqYXJncywg aW50IG5hcmdzLCBpbnQgbWV0aG9kLAogCX0KIAogICAgICAgLyogUHJlcGFy ZSBhcnJheSBvZiBwYXJhbWV0ZXIgdHlwZXMuICAqLwotICAgICAgcGFybV90 eXBlcyA9IChzdHJ1Y3QgdHlwZSAqKikgCi0JeG1hbGxvYyAobnBhcm1zICog KHNpemVvZiAoc3RydWN0IHR5cGUgKikpKTsKLSAgICAgIGZvciAoamogPSAw OyBqaiA8IG5wYXJtczsgamorKykKLQlwYXJtX3R5cGVzW2pqXSA9IChtZXRo b2QKLQkJCSAgPyAoVFlQRV9GTl9GSUVMRF9BUkdTIChmbnNfcHRyLCBpeClb ampdLnR5cGUpCi0JCQkgIDogVFlQRV9GSUVMRF9UWVBFIChTWU1CT0xfVFlQ RSAob2xvYWRfc3ltc1tpeF0pLCAKLQkJCQkJICAgICBqaikpOworICAgICAg aWYgKGZuc19wdHIgfHwgb2xvYWRfc3ltcykKKwl7CisJICBwYXJtX3R5cGVz ID0gKHN0cnVjdCB0eXBlICoqKSAKKwkgICAgeG1hbGxvYyAobnBhcm1zICog KHNpemVvZiAoc3RydWN0IHR5cGUgKikpKTsKKwkgIGZvciAoamogPSAwOyBq aiA8IG5wYXJtczsgamorKykKKwkgICAgcGFybV90eXBlc1tqal0gPSAobWV0 aG9kCisJCQkgICAgICA/IChUWVBFX0ZOX0ZJRUxEX0FSR1MgKGZuc19wdHIs IGl4KVtqal0udHlwZSkKKwkJCSAgICAgIDogVFlQRV9GSUVMRF9UWVBFIChT WU1CT0xfVFlQRSAob2xvYWRfc3ltc1tpeF0pLCAKKwkJCSAgICAgIGpqKSk7 CisJfQorICAgICAgZWxzZQorCXBhcm1fdHlwZXMgPSBleHRfZm5fZ2V0X2Fy Z3R5cGVzIChleHRfZm4sICZucGFybXMpOwogCiAgICAgICAvKiBDb21wYXJl IHBhcmFtZXRlciB0eXBlcyB0byBzdXBwbGllZCBhcmd1bWVudCB0eXBlcy4g IFNraXAKICAgICAgICAgIFRISVMgZm9yIHN0YXRpYyBtZXRob2RzLiAgKi8K ZGlmZiAtLWdpdCBhL2dkYi92YWx1ZS5oIGIvZ2RiL3ZhbHVlLmgKaW5kZXgg Zjg0NjY2OS4uNzRjYWM4NCAxMDA2NDQKLS0tIGEvZ2RiL3ZhbHVlLmgKKysr IGIvZ2RiL3ZhbHVlLmgKQEAgLTMxLDYgKzMxLDcgQEAgc3RydWN0IHR5cGU7 CiBzdHJ1Y3QgdWlfZmlsZTsKIHN0cnVjdCBsYW5ndWFnZV9kZWZuOwogc3Ry dWN0IHZhbHVlX3ByaW50X29wdGlvbnM7CitzdHJ1Y3QgZXh0X2ZuX2Rlc2Ny aXB0b3I7CiAKIC8qIFRoZSBzdHJ1Y3R1cmUgd2hpY2ggZGVmaW5lcyB0aGUg dHlwZSBvZiBhIHZhbHVlLiAgSXQgc2hvdWxkIG5ldmVyCiAgICBiZSBwb3Nz aWJsZSBmb3IgYSBwcm9ncmFtIGx2YWwgdmFsdWUgdG8gc3Vydml2ZSBvdmVy IGEgY2FsbCB0byB0aGUKQEAgLTY5MCw2ICs2OTEsNyBAQCBleHRlcm4gaW50 IGZpbmRfb3ZlcmxvYWRfbWF0Y2ggKHN0cnVjdCB2YWx1ZSAqKmFyZ3MsIGlu dCBuYXJncywKIAkJCQllbnVtIG9sb2FkX3NlYXJjaF90eXBlIG1ldGhvZCwK IAkJCQlzdHJ1Y3QgdmFsdWUgKipvYmpwLCBzdHJ1Y3Qgc3ltYm9sICpmc3lt LAogCQkJCXN0cnVjdCB2YWx1ZSAqKnZhbHAsIHN0cnVjdCBzeW1ib2wgKipz eW1wLAorCQkJCXN0cnVjdCBleHRfZm5fZGVzY3JpcHRvciAqKmV4dF9mbiwK IAkJCQlpbnQgKnN0YXRpY3AsIGNvbnN0IGludCBub19hZGwpOwogCiBleHRl cm4gc3RydWN0IHZhbHVlICp2YWx1ZV9maWVsZCAoc3RydWN0IHZhbHVlICph cmcxLCBpbnQgZmllbGRubyk7Cg== --089e01681a0e99e8d804f105ffbc--