From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23829 invoked by alias); 2 Jun 2014 18:58:56 -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 23817 invoked by uid 89); 2 Jun 2014 18:58:56 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.1 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW,RP_MATCHES_RCVD,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-wi0-f171.google.com Received: from mail-wi0-f171.google.com (HELO mail-wi0-f171.google.com) (209.85.212.171) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Mon, 02 Jun 2014 18:58:50 +0000 Received: by mail-wi0-f171.google.com with SMTP id cc10so5114565wib.16 for ; Mon, 02 Jun 2014 11:58:45 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:date:message-id:subject:from:to :content-type; bh=EPmyYwGpgGaVF/FKTmSZYofh7Cxr2bYZEfywJfZFjq8=; b=JyBdYmhpYqmibKxKJML7KhQb3OVb7gSKUkFz9XJLfPaqV/mjPqke2eGpBN1msM7qiV eKOlpypViDCmLO/9U6fFwzNa6M2B3/RJW0LmespYSqFA4BKzn19daxzU49tFJTZhDVie zvPSkSTyn23ft59g+jSB6QSjKbABZHQzOsEdsWtbZc1SBz6ot7J3iOu6HRxm6n9rQPQh wX2qvI3ysqQz/TkpeTt2i8/zrZoWp64kNM9bicOo/v/Q2oC2KHW+YK09aIu2M/7xqKjI F2Fg4A3eBX84QtM32Y+djyU+bhknghQafbkM7PupqnP9UQFhyRRQ7GTS12Unx//UO3Ox 0Y7g== X-Gm-Message-State: ALoCoQm1CdCW6RtrpkS+PVDMnH965muMaqog2bC3XkvmJSsuF5TvMFz/JL55JF5ujnr+NPHGQuOR MIME-Version: 1.0 X-Received: by 10.180.107.130 with SMTP id hc2mr24652289wib.7.1401735524573; Mon, 02 Jun 2014 11:58:44 -0700 (PDT) Received: by 10.217.51.7 with HTTP; Mon, 2 Jun 2014 11:58:44 -0700 (PDT) Date: Mon, 02 Jun 2014 18:58:00 -0000 Message-ID: Subject: [PATCH 4/4 v20] Add xmethod support to the Python API From: Siva Chandra To: gdb-patches Content-Type: multipart/mixed; boundary=089e01494d5207c26404fadefc84 X-IsSubscribed: yes X-SW-Source: 2014-06/txt/msg00037.txt.bz2 --089e01494d5207c26404fadefc84 Content-Type: text/plain; charset=UTF-8 Content-length: 1452 Doug> Well, almost all of them ... Sorry, I had sent an older version v19 in my local repo. The attached v20 should have all of them addressed. ChangeLog 2014-06-02 Siva Chandra Reddy * python/py-xmethods.c: New file. * python/py-objfile.c (objfile_object): New field 'xmethods'. (objfpy_dealloc): XDECREF on the new xmethods field. (objfpy_new, objfile_to_objfile_object): Initialize xmethods field. (objfpy_get_xmethods): New function. (objfile_getset): New entry 'xmethods'. * python/py-progspace.c (pspace_object): New field 'xmethods'. (pspy_dealloc): XDECREF on the new xmethods field. (pspy_new, pspace_to_pspace_object): Initialize xmethods field. (pspy_get_xmethods): New function. (pspace_getset): New entry 'xmethods'. * python/python-internal.h: Add declarations for new functions. * python/python.c (_initialize_python): Invoke gdbpy_initialize_xmethods. * python/lib/gdb/__init__.py (xmethods): New attribute. * python/lib/gdb/xmethod.py: New file. * python/lib/gdb/command/xmethods.py: New file. testuite/ * gdb.python/py-xmethods.cc: New testcase to test xmethods. * gdb.python/py-xmethods.exp: New tests to test xmethods. * gdb.python/py-xmethods.py: Python script supporting the new testcase and tests. --089e01494d5207c26404fadefc84 Content-Type: text/plain; charset=US-ASCII; name="xmethod_python_api_v20.txt" Content-Disposition: attachment; filename="xmethod_python_api_v20.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hvy54ob00 Content-length: 87910 ZGlmZiAtLWdpdCBhL2dkYi9NYWtlZmlsZS5pbiBiL2dkYi9NYWtlZmlsZS5p bgppbmRleCBmMmMxNmVjLi5iYjg2NjAyIDEwMDY0NAotLS0gYS9nZGIvTWFr ZWZpbGUuaW4KKysrIGIvZ2RiL01ha2VmaWxlLmluCkBAIC0zNDQsNiArMzQ0 LDcgQEAgU1VCRElSX1BZVEhPTl9PQlMgPSBcCiAJcHktYnJlYWtwb2ludC5v IFwKIAlweS1jbWQubyBcCiAJcHktY29udGludWVldmVudC5vIFwKKwlweS14 bWV0aG9kcy5vIFwKIAlweS1ldmVudC5vIFwKIAlweS1ldnRyZWdpc3RyeS5v IFwKIAlweS1ldnRzLm8gXApAQCAtMzgwLDYgKzM4MSw3IEBAIFNVQkRJUl9Q WVRIT05fU1JDUyA9IFwKIAlweXRob24vcHktYnJlYWtwb2ludC5jIFwKIAlw eXRob24vcHktY21kLmMgXAogCXB5dGhvbi9weS1jb250aW51ZWV2ZW50LmMg XAorCXB5dGhvbi9weS14bWV0aG9kcy5jIFwKIAlweXRob24vcHktZXZlbnQu YyBcCiAJcHl0aG9uL3B5LWV2dHJlZ2lzdHJ5LmMgXAogCXB5dGhvbi9weS1l dnRzLmMgXApAQCAtMjM3OCw2ICsyMzgwLDEwIEBAIHB5LWNvbnRpbnVlZXZl bnQubzogJChzcmNkaXIpL3B5dGhvbi9weS1jb250aW51ZWV2ZW50LmMKIAkk KENPTVBJTEUpICQoUFlUSE9OX0NGTEFHUykgJChzcmNkaXIpL3B5dGhvbi9w eS1jb250aW51ZWV2ZW50LmMKIAkkKFBPU1RDT01QSUxFKQogCitweS14bWV0 aG9kcy5vOiAkKHNyY2RpcikvcHl0aG9uL3B5LXhtZXRob2RzLmMKKwkkKENP TVBJTEUpICQoUFlUSE9OX0NGTEFHUykgJChzcmNkaXIpL3B5dGhvbi9weS14 bWV0aG9kcy5jCisJJChQT1NUQ09NUElMRSkKKwogcHktZXZlbnQubzogJChz cmNkaXIpL3B5dGhvbi9weS1ldmVudC5jCiAJJChDT01QSUxFKSAkKFBZVEhP Tl9DRkxBR1MpICQoc3JjZGlyKS9weXRob24vcHktZXZlbnQuYwogCSQoUE9T VENPTVBJTEUpCmRpZmYgLS1naXQgYS9nZGIvZGF0YS1kaXJlY3RvcnkvTWFr ZWZpbGUuaW4gYi9nZGIvZGF0YS1kaXJlY3RvcnkvTWFrZWZpbGUuaW4KaW5k ZXggMzI4OGU1MC4uYjlmY2MwMyAxMDA2NDQKLS0tIGEvZ2RiL2RhdGEtZGly ZWN0b3J5L01ha2VmaWxlLmluCisrKyBiL2dkYi9kYXRhLWRpcmVjdG9yeS9N YWtlZmlsZS5pbgpAQCAtNjMsOCArNjMsMTAgQEAgUFlUSE9OX0ZJTEVTID0g XAogCWdkYi90eXBlcy5weSBcCiAJZ2RiL3ByaW50aW5nLnB5IFwKIAlnZGIv cHJvbXB0LnB5IFwKKwlnZGIveG1ldGhvZC5weSBcCiAJZ2RiL2NvbW1hbmQv Ym91bmRfcmVnaXN0ZXJzLnB5IFwKIAlnZGIvY29tbWFuZC9fX2luaXRfXy5w eSBcCisJZ2RiL2NvbW1hbmQveG1ldGhvZHMucHkgXAogCWdkYi9jb21tYW5k L2ZyYW1lX2ZpbHRlcnMucHkgXAogCWdkYi9jb21tYW5kL3R5cGVfcHJpbnRl cnMucHkgXAogCWdkYi9jb21tYW5kL3ByZXR0eV9wcmludGVycy5weSBcCmRp ZmYgLS1naXQgYS9nZGIvcHl0aG9uL2xpYi9nZGIvX19pbml0X18ucHkgYi9n ZGIvcHl0aG9uL2xpYi9nZGIvX19pbml0X18ucHkKaW5kZXggOTVhNzZjMi4u NTU3ZTE2OCAxMDA2NDQKLS0tIGEvZ2RiL3B5dGhvbi9saWIvZ2RiL19faW5p dF9fLnB5CisrKyBiL2dkYi9weXRob24vbGliL2dkYi9fX2luaXRfXy5weQpA QCAtNjcsNiArNjcsOCBAQCBwcmV0dHlfcHJpbnRlcnMgPSBbXQogCiAjIElu aXRpYWwgdHlwZSBwcmludGVycy4KIHR5cGVfcHJpbnRlcnMgPSBbXQorIyBJ bml0aWFsIHhtZXRob2QgbWF0Y2hlcnMuCit4bWV0aG9kcyA9IFtdCiAjIElu aXRpYWwgZnJhbWUgZmlsdGVycy4KIGZyYW1lX2ZpbHRlcnMgPSB7fQogCmRp ZmYgLS1naXQgYS9nZGIvcHl0aG9uL2xpYi9nZGIvY29tbWFuZC94bWV0aG9k cy5weSBiL2dkYi9weXRob24vbGliL2dkYi9jb21tYW5kL3htZXRob2RzLnB5 Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZjljZGQK LS0tIC9kZXYvbnVsbAorKysgYi9nZGIvcHl0aG9uL2xpYi9nZGIvY29tbWFu ZC94bWV0aG9kcy5weQpAQCAtMCwwICsxLDI3MiBAQAorIyBYbWV0aG9kIGNv bW1hbmRzLgorIyBDb3B5cmlnaHQgMjAxMy0yMDE0IEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vu c2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBz ZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitpbXBvcnQg Z2RiCitpbXBvcnQgcmUKKworIiIiR0RCIGNvbW1hbmRzIGZvciB3b3JraW5n IHdpdGggeG1ldGhvZHMuIiIiCisKKworZGVmIHZhbGlkYXRlX3htX3JlZ2V4 cChwYXJ0X25hbWUsIHJlZ2V4cCk6CisgICAgdHJ5OgorICAgICAgICByZXR1 cm4gcmUuY29tcGlsZShyZWdleHApCisgICAgZXhjZXB0IFN5bnRheEVycm9y OgorICAgICAgICByYWlzZSBTeW50YXhFcnJvcigiSW52YWxpZCAlcyByZWdl eHA6ICVzIiwgcGFydF9uYW1lLCByZWdleHApCisKKworZGVmIHBhcnNlX3ht X2NvbW1hbmRfYXJncyhhcmcpOgorICAgICIiIlBhcnNlcyB0aGUgYXJndW1l bnRzIHBhc3NlZCB0byBhIHhtZXRob2QgY29tbWFuZC4KKworICAgIEFyZ3Vt ZW50czoKKyAgICAgICAgYXJnOiBUaGUgYXJndW1lbnQgc3RyaW5nIHBhc3Nl ZCB0byBhIHhtZXRob2QgY29tbWFuZC4KKworICAgIFJldHVybnM6CisgICAg ICAgIEEgMy10dXBsZTogKDxsb2N1cyBtYXRjaGluZyByZWd1bGFyIGV4cHJl c3Npb24+LAorICAgICAgICAgICAgICAgICAgICA8bWF0Y2hlciBtYXRjaGlu ZyByZWd1bGFyIGV4cHJlc3Npb24+LAorICAgICAgICAgICAgICAgICAgICA8 bmFtZSBtYXRjaGluZyByZWd1bGFyIGV4cGVyZXNzaW9uPikKKyAgICAiIiIK KyAgICBhcmd2ID0gZ2RiLnN0cmluZ190b19hcmd2KGFyZykKKyAgICBhcmdj ID0gbGVuKGFyZ3YpCisgICAgaWYgYXJnYyA+IDI6CisgICAgICAgIHJhaXNl IFN5bnRheEVycm9yKCJUb28gbWFueSBhcmd1bWVudHMgdG8gY29tbWFuZC4i KQorICAgIGxvY3VzX3JlZ2V4cCA9ICIiCisgICAgbWF0Y2hlcl9uYW1lX3Jl Z2V4cCA9ICIiCisgICAgeG1fbmFtZV9yZWdleHAgPSBOb25lCisgICAgaWYg YXJnYyA+PSAxOgorICAgICAgICBsb2N1c19yZWdleHAgPSBhcmd2WzBdCisg ICAgaWYgYXJnYyA9PSAyOgorICAgICAgICBwYXJ0cyA9IGFyZ3ZbMV0uc3Bs aXQoIjsiLCAxKQorICAgICAgICBtYXRjaGVyX25hbWVfcmVnZXhwID0gcGFy dHNbMF0KKyAgICAgICAgaWYgbGVuKHBhcnRzKSA+IDE6CisgICAgICAgICAg ICB4bV9uYW1lX3JlZ2V4cCA9IHBhcnRzWzFdCisgICAgaWYgeG1fbmFtZV9y ZWdleHA6CisgICAgICAgIG5hbWVfcmUgPSB2YWxpZGF0ZV94bV9yZWdleHAo InhtZXRob2QgbmFtZSIsIHhtX25hbWVfcmVnZXhwKQorICAgIGVsc2U6Cisg ICAgICAgIG5hbWVfcmUgPSBOb25lCisgICAgcmV0dXJuICh2YWxpZGF0ZV94 bV9yZWdleHAoImxvY3VzIiwgbG9jdXNfcmVnZXhwKSwKKyAgICAgICAgICAg IHZhbGlkYXRlX3htX3JlZ2V4cCgibWF0Y2hlciBuYW1lIiwgbWF0Y2hlcl9u YW1lX3JlZ2V4cCksCisgICAgICAgICAgICBuYW1lX3JlKQorCisKK2RlZiBn ZXRfZ2xvYmFsX21ldGhvZF9tYXRjaGVycyhsb2N1c19yZSwgbWF0Y2hlcl9y ZSk6CisgICAgIiIiUmV0dXJucyBhIGRpY3Qgb2YgbWF0Y2hpbmcgZ2xvYmFs bHkgcmVnaXN0ZXJlZCB4bWV0aG9kcy4KKworICAgIEFyZ3VtZW50czoKKyAg ICAgICAgbG9jdXNfcmU6IEV2ZW4gdGhvdWdoIG9ubHkgZ2xvYmFsbHkgcmVn aXN0ZXJlZCB4bWV0aG9kcyBhcmUKKyAgICAgICAgICAgICAgICAgIGxvb2tl ZCB1cCwgdGhleSB3aWxsIGJlIGxvb2tlZCB1cCBvbmx5IGlmICdnbG9iYWwn IG1hdGNoZXMKKyAgICAgICAgICAgICAgICAgIExPQ1VTX1JFLgorICAgICAg ICBtYXRjaGVyX3JlOiBUaGUgcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5n IHRoZSBuYW1lcyBvZiB4bWV0aG9kcy4KKworICAgIFJldHVybnM6CisgICAg ICAgIEEgZGljdCBvZiBtYXRjaGluZyBnbG9iYWxseSByZWdpc3RlcmVkIHht ZXRob2QgbWF0Y2hlcnMuICBUaGUgb25seQorICAgICAgICBrZXkgaW4gdGhl IGRpY3Qgd2lsbCBiZSAnZ2xvYmFsJy4KKyAgICAiIiIKKyAgICBsb2N1c19z dHIgPSAiZ2xvYmFsIgorICAgIHhtX2RpY3QgPSB7IGxvY3VzX3N0cjogW10g fQorICAgIGlmIGxvY3VzX3JlLm1hdGNoKCJnbG9iYWwiKToKKyAgICAgICAg eG1fZGljdFtsb2N1c19zdHJdLmV4dGVuZCgKKyAgICAgICAgICAgIFttIGZv ciBtIGluIGdkYi54bWV0aG9kcyBpZiBtYXRjaGVyX3JlLm1hdGNoKG0ubmFt ZSldKQorICAgIHJldHVybiB4bV9kaWN0CisKKworZGVmIGdldF9tZXRob2Rf bWF0Y2hlcnNfaW5fbG9jaShsb2NpLCBsb2N1c19yZSwgbWF0Y2hlcl9yZSk6 CisgICAgIiIiUmV0dXJucyBhIGRpY3Qgb2YgbWF0Y2hpbmcgcmVnaXN0ZXJl ZCB4bWV0aG9kcyBpbiB0aGUgTE9DSS4KKworICAgIEFyZ3VtZW50czoKKyAg ICAgICAgbG9jaTogVGhlIGxpc3Qgb2YgbG9jaSB0byBsb29rdXAgbWF0Y2hp bmcgeG1ldGhvZHMgaW4uCisgICAgICAgIGxvY3VzX3JlOiBYbWV0aG9kIG1h dGNoZXJzIHdpbGwgYmUgbG9va2VkIHVwIGluIGEgcGFydGljdWxhciBsb2N1 cworICAgICAgICAgICAgICAgICAgb25seSBpZiBpdHMgZmlsZW5hbWUgbWF0 Y2hlcyB0aGUgcmVndWxhciBleHByZXNzaW9uIExPQ1VTX1JFLgorICAgICAg ICBtYXRjaGVyX3JlOiBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNo IHRoZSB4bWV0aG9kIG1hdGNoZXIKKyAgICAgICAgICAgICAgICAgICAgbmFt ZXMuCisKKyAgICBSZXR1cm5zOgorICAgICAgICBBIGRpY3Qgb2YgbWF0Y2hp bmcgeG1ldGhvZCBtYXRjaGVycy4gIFRoZSBrZXlzIG9mIHRoZSBkaWN0IGFy ZSB0aGUKKyAgICAgICAgZmlsZW5hbWVzIG9mIHRoZSBsb2NpIHRoZSB4bWV0 aG9kIG1hdGNoZXJzIGJlbG9uZyB0by4KKyAgICAiIiIKKyAgICB4bV9kaWN0 ID0ge30KKyAgICBmb3IgbG9jdXMgaW4gbG9jaToKKyAgICAgICAgaWYgaXNp bnN0YW5jZShsb2N1cywgZ2RiLlByb2dzcGFjZSk6CisgICAgICAgICAgICBp ZiAobm90IGxvY3VzX3JlLm1hdGNoKGxvY3VzLmZpbGVuYW1lKSBhbmQKKyAg ICAgICAgICAgICAgICBub3QgbG9jdXNfcmUubWF0Y2goJ3Byb2dzcGFjZScp KToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgbG9j dXNfdHlwZSA9ICJwcm9nc3BhY2UiCisgICAgICAgIGVsc2U6CisgICAgICAg ICAgICBpZiBub3QgbG9jdXNfcmUubWF0Y2gobG9jdXMuZmlsZW5hbWUpOgor ICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBsb2N1c190 eXBlID0gIm9iamZpbGUiCisgICAgICAgIGxvY3VzX3N0ciA9ICIlcyAlcyIg JSAobG9jdXNfdHlwZSwgbG9jdXMuZmlsZW5hbWUpCisgICAgICAgIHhtX2Rp Y3RbbG9jdXNfc3RyXSA9IFsKKyAgICAgICAgICAgIG0gZm9yIG0gaW4gbG9j dXMueG1ldGhvZHMgaWYgbWF0Y2hlcl9yZS5tYXRjaChtLm5hbWUpXQorICAg IHJldHVybiB4bV9kaWN0CisKKworZGVmIHByaW50X3htX2luZm8oeG1fZGlj dCwgbmFtZV9yZSk6CisgICAgIiIiUHJpbnQgYSBkaWN0aW9uYXJ5IG9mIHht ZXRob2RzLiIiIgorICAgIGRlZiBnZXRfc3RhdHVzX3N0cmluZyhtZXRob2Qp OgorICAgICAgICBpZiBub3QgbS5lbmFibGVkOgorICAgICAgICAgICAgcmV0 dXJuICIgW2Rpc2FibGVkXSIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICBy ZXR1cm4gIiIKKworICAgIGlmIG5vdCB4bV9kaWN0OgorICAgICAgICByZXR1 cm4KKyAgICBmb3IgbG9jdXNfc3RyIGluIHhtX2RpY3Q6CisgICAgICAgIGlm IG5vdCB4bV9kaWN0W2xvY3VzX3N0cl06CisgICAgICAgICAgICBjb250aW51 ZQorICAgICAgICBwcmludCAoIlhtZXRob2RzIGluICVzOiIgJSBsb2N1c19z dHIpCisgICAgICAgIGZvciBtYXRjaGVyIGluIHhtX2RpY3RbbG9jdXNfc3Ry XToKKyAgICAgICAgICAgIHByaW50ICgiICAlcyIgJSBtYXRjaGVyLm5hbWUp CisgICAgICAgICAgICBpZiBub3QgbWF0Y2hlci5tZXRob2RzOgorICAgICAg ICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmb3IgbSBpbiBtYXRj aGVyLm1ldGhvZHM6CisgICAgICAgICAgICAgICAgaWYgbmFtZV9yZSBpcyBO b25lIG9yIG5hbWVfcmUubWF0Y2gobS5uYW1lKToKKyAgICAgICAgICAgICAg ICAgICAgcHJpbnQgKCIgICAgJXMlcyIgJSAobS5uYW1lLCBnZXRfc3RhdHVz X3N0cmluZyhtKSkpCisKKworZGVmIHNldF94bV9zdGF0dXMxKHhtX2RpY3Qs IG5hbWVfcmUsIHN0YXR1cyk6CisgICAgIiIiU2V0IHRoZSBzdGF0dXMgKGVu YWJsZWQvZGlzYWJsZWQpIG9mIGEgZGljdGlvbmFyeSBvZiB4bWV0aG9kcy4i IiIKKyAgICBmb3IgbG9jdXNfc3RyLCBtYXRjaGVycyBpbiB4bV9kaWN0Lml0 ZXJpdGVtcygpOgorICAgICAgICBmb3IgbWF0Y2hlciBpbiBtYXRjaGVyczoK KyAgICAgICAgICAgIGlmIG5vdCBuYW1lX3JlOgorICAgICAgICAgICAgICAg ICMgSWYgdGhlIG5hbWUgcmVnZXggaXMgbWlzc2luZywgdGhlbiBzZXQgdGhl IHN0YXR1cyBvZiB0aGUKKyAgICAgICAgICAgICAgICAjIG1hdGNoZXIgYW5k IG1vdmUgb24uCisgICAgICAgICAgICAgICAgbWF0Y2hlci5lbmFibGVkID0g c3RhdHVzCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAg IGlmIG5vdCBtYXRjaGVyLm1ldGhvZHM6CisgICAgICAgICAgICAgICAgIyBU aGUgbWV0aG9kcyBhdHRyaWJ1dGUgY291bGQgYmUgTm9uZS4gIE1vdmUgb24u CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGZvciBt IGluIG1hdGNoZXIubWV0aG9kczoKKyAgICAgICAgICAgICAgICBpZiBuYW1l X3JlLm1hdGNoKG0ubmFtZSk6CisgICAgICAgICAgICAgICAgICAgIG0uZW5h YmxlZCA9IHN0YXR1cworCisKK2RlZiBzZXRfeG1fc3RhdHVzKGFyZywgc3Rh dHVzKToKKyAgICAiIiJTZXQgdGhlIHN0YXR1cyAoZW5hYmxlZC9kaXNhYmxl ZCkgb2YgeG1ldGhvZHMgbWF0Y2hpbmcgQVJHLgorICAgIFRoaXMgaXMgYSBo ZWxwZXIgZnVuY3Rpb24gZm9yIGVuYWJsZS9kaXNhYmxlIGNvbW1hbmRzLiAg QVJHIGlzIHRoZQorICAgIGFyZ3VtZW50IHN0cmluZyBwYXNzZWQgdG8gdGhl IGNvbW1hbmRzLgorICAgICIiIgorICAgIGxvY3VzX3JlLCBtYXRjaGVyX3Jl LCBuYW1lX3JlID0gcGFyc2VfeG1fY29tbWFuZF9hcmdzKGFyZykKKyAgICBz ZXRfeG1fc3RhdHVzMShnZXRfZ2xvYmFsX21ldGhvZF9tYXRjaGVycyhsb2N1 c19yZSwgbWF0Y2hlcl9yZSksIG5hbWVfcmUsCisgICAgICAgICAgICAgICAg ICAgc3RhdHVzKQorICAgIHNldF94bV9zdGF0dXMxKAorICAgICAgICBnZXRf bWV0aG9kX21hdGNoZXJzX2luX2xvY2koCisgICAgICAgICAgICBbZ2RiLmN1 cnJlbnRfcHJvZ3NwYWNlKCldLCBsb2N1c19yZSwgbWF0Y2hlcl9yZSksCisg ICAgICAgIG5hbWVfcmUsCisgICAgICAgIHN0YXR1cykKKyAgICBzZXRfeG1f c3RhdHVzMSgKKyAgICAgICAgZ2V0X21ldGhvZF9tYXRjaGVyc19pbl9sb2Np KGdkYi5vYmpmaWxlcygpLCBsb2N1c19yZSwgbWF0Y2hlcl9yZSksCisgICAg ICAgIG5hbWVfcmUsCisgICAgICAgIHN0YXR1cykKKworCitjbGFzcyBJbmZv WE1ldGhvZChnZGIuQ29tbWFuZCk6CisgICAgIiIiR0RCIGNvbW1hbmQgdG8g bGlzdCByZWdpc3RlcmVkIHhtZXRob2QgbWF0Y2hlcnMuCisKKyAgICBVc2Fn ZTogaW5mbyB4bWV0aG9kIFtsb2N1cy1yZWdleHAgW25hbWUtcmVnZXhwXV0K KworICAgIExPQ1VTLVJFR0VYUCBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBt YXRjaGluZyB0aGUgbG9jYXRpb24gb2YgdGhlCisgICAgeG1ldGhvZCBtYXRj aGVycy4gIElmIGl0IGlzIG9taXR0ZWQsIGFsbCByZWdpc3RlcmVkIHhtZXRo b2QgbWF0Y2hlcnMKKyAgICBmcm9tIGFsbCBsb2NpIGFyZSBsaXN0ZWQuICBB IGxvY3VzIGNvdWxkIGJlICdnbG9iYWwnLCBhIHJlZ3VsYXIgZXhwcmVzc2lv bgorICAgIG1hdGNoaW5nIHRoZSBjdXJyZW50IHByb2dyYW0gc3BhY2UncyBm aWxlbmFtZSwgb3IgYSByZWd1bGFyIGV4cHJlc3Npb24KKyAgICBtYXRjaGlu ZyBmaWxlbmFtZXMgb2Ygb2JqZmlsZXMuICBMb2N1cyBjb3VsZCBiZSAncHJv Z3NwYWNlJyB0byBzcGVjaWZ5IHRoYXQKKyAgICBvbmx5IHhtZXRob2RzIGZy b20gdGhlIGN1cnJlbnQgcHJvZ3NwYWNlIHNob3VsZCBiZSBsaXN0ZWQuCisK KyAgICBOQU1FLVJFR0VYUCBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRj aGluZyB0aGUgbmFtZXMgb2YgeG1ldGhvZAorICAgIG1hdGNoZXJzLiAgSWYg dGhpcyBvbWl0dGVkIGZvciBhIHNwZWNpZmllZCBsb2N1cywgdGhlbiBhbGwg cmVnaXN0ZXJlZAorICAgIHhtZXRob2RzIGluIHRoZSBsb2N1cyBhcmUgbGlz dGVkLiAgVG8gbGlzdCBvbmx5IGEgY2VydGFpbiB4bWV0aG9kcworICAgIG1h bmFnZWQgYnkgYSBzaW5nbGUgbWF0Y2hlciwgdGhlIG5hbWUgcmVnZXhwIGNh biBiZSBzcGVjaWZpZWQgYXMKKyAgICBtYXRjaGVyLW5hbWUtcmVnZXhwO3ht ZXRob2QtbmFtZS1yZWdleHAuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0 X18oc2VsZik6CisgICAgICAgIHN1cGVyKEluZm9YTWV0aG9kLCBzZWxmKS5f X2luaXRfXygiaW5mbyB4bWV0aG9kIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdkYi5DT01NQU5EX0RBVEEpCisKKyAg ICBkZWYgaW52b2tlKHNlbGYsIGFyZywgZnJvbV90dHkpOgorICAgICAgICBs b2N1c19yZSwgbWF0Y2hlcl9yZSwgbmFtZV9yZSA9IHBhcnNlX3htX2NvbW1h bmRfYXJncyhhcmcpCisgICAgICAgIHByaW50X3htX2luZm8oZ2V0X2dsb2Jh bF9tZXRob2RfbWF0Y2hlcnMobG9jdXNfcmUsIG1hdGNoZXJfcmUpLAorICAg ICAgICAgICAgICAgICAgICAgIG5hbWVfcmUpCisgICAgICAgIHByaW50X3ht X2luZm8oCisgICAgICAgICAgICBnZXRfbWV0aG9kX21hdGNoZXJzX2luX2xv Y2koCisgICAgICAgICAgICAgICAgW2dkYi5jdXJyZW50X3Byb2dzcGFjZSgp XSwgbG9jdXNfcmUsIG1hdGNoZXJfcmUpLAorICAgICAgICAgICAgbmFtZV9y ZSkKKyAgICAgICAgcHJpbnRfeG1faW5mbygKKyAgICAgICAgICAgIGdldF9t ZXRob2RfbWF0Y2hlcnNfaW5fbG9jaShnZGIub2JqZmlsZXMoKSwgbG9jdXNf cmUsIG1hdGNoZXJfcmUpLAorICAgICAgICAgICAgbmFtZV9yZSkKKworCitj bGFzcyBFbmFibGVYTWV0aG9kKGdkYi5Db21tYW5kKToKKyAgICAiIiJHREIg Y29tbWFuZCB0byBlbmFibGUgYSBzcGVjaWZpZWQgKGdyb3VwIG9mKSB4bWV0 aG9kKHMpLgorCisgICAgVXNhZ2U6IGVuYWJsZSB4bWV0aG9kIFtsb2N1cy1y ZWdleHAgW25hbWUtcmVnZXhwXV0KKworICAgIExPQ1VTLVJFR0VYUCBpcyBh IHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyB0aGUgbG9jYXRpb24gb2Yg dGhlCisgICAgeG1ldGhvZCBtYXRjaGVycy4gIElmIGl0IGlzIG9taXR0ZWQs IGFsbCByZWdpc3RlcmVkIHhtZXRob2RzIG1hdGNoZXJzCisgICAgZnJvbSBh bGwgbG9jaSBhcmUgZW5hYmxlZC4gIEEgbG9jdXMgY291bGQgYmUgJ2dsb2Jh bCcsIGEgcmVndWxhciBleHByZXNzaW9uCisgICAgbWF0Y2hpbmcgdGhlIGN1 cnJlbnQgcHJvZ3JhbSBzcGFjZSdzIGZpbGVuYW1lLCBvciBhIHJlZ3VsYXIg ZXhwcmVzc2lvbgorICAgIG1hdGNoaW5nIGZpbGVuYW1lcyBvZiBvYmpmaWxl cy4gIExvY3VzIGNvdWxkIGJlICdwcm9nc3BhY2UnIHRvIHNwZWNpZnkgdGhh dAorICAgIG9ubHkgeG1ldGhvZHMgZnJvbSB0aGUgY3VycmVudCBwcm9nc3Bh Y2Ugc2hvdWxkIGJlIGVuYWJsZWQuCisKKyAgICBOQU1FLVJFR0VYUCBpcyBh IHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyB0aGUgbmFtZXMgb2YgeG1l dGhvZHMKKyAgICB3aXRoaW4gYSBnaXZlbiBsb2N1cy4gIElmIHRoaXMgb21p dHRlZCBmb3IgYSBzcGVjaWZpZWQgbG9jdXMsIHRoZW4gYWxsCisgICAgcmVn aXN0ZXJlZCB4bWV0aG9kIG1hdGNoZXJzIGluIHRoZSBsb2N1cyBhcmUgZW5h YmxlZC4gIFRvIGVuYWJsZSBvbmx5CisgICAgYSBjZXJ0YWluIHhtZXRob2Rz IG1hbmFnZWQgYnkgYSBzaW5nbGUgbWF0Y2hlciwgdGhlIG5hbWUgcmVnZXhw IGNhbiBiZQorICAgIHNwZWNpZmllZCBhcyBtYXRjaGVyLW5hbWUtcmVnZXhw O3htZXRob2QtbmFtZS1yZWdleHAuCisgICAgIiIiCisKKyAgICBkZWYgX19p bml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKEVuYWJsZVhNZXRob2QsIHNl bGYpLl9faW5pdF9fKCJlbmFibGUgeG1ldGhvZCIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYi5DT01NQU5EX0RB VEEpCisKKyAgICBkZWYgaW52b2tlKHNlbGYsIGFyZywgZnJvbV90dHkpOgor ICAgICAgICBzZXRfeG1fc3RhdHVzKGFyZywgVHJ1ZSkKKworCitjbGFzcyBE aXNhYmxlWE1ldGhvZChnZGIuQ29tbWFuZCk6CisgICAgIiIiR0RCIGNvbW1h bmQgdG8gZGlzYWJsZSBhIHNwZWNpZmllZCAoZ3JvdXAgb2YpIHhtZXRob2Qo cykuCisKKyAgICBVc2FnZTogZGlzYWJsZSB4bWV0aG9kIFtsb2N1cy1yZWdl eHAgW25hbWUtcmVnZXhwXV0KKworICAgIExPQ1VTLVJFR0VYUCBpcyBhIHJl Z3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyB0aGUgbG9jYXRpb24gb2YgdGhl CisgICAgeG1ldGhvZCBtYXRjaGVycy4gIElmIGl0IGlzIG9taXR0ZWQsIGFs bCByZWdpc3RlcmVkIHhtZXRob2QgbWF0Y2hlcnMKKyAgICBmcm9tIGFsbCBs b2NpIGFyZSBkaXNhYmxlZC4gIEEgbG9jdXMgY291bGQgYmUgJ2dsb2JhbCcs IGEgcmVndWxhcgorICAgIGV4cHJlc3Npb24gbWF0Y2hpbmcgdGhlIGN1cnJl bnQgcHJvZ3JhbSBzcGFjZSdzIGZpbGVuYW1lLCBvciBhIHJlZ3VsYXIKKyAg ICBleHByZXNzaW9uIGZpbGVuYW1lcyBvZiBvYmpmaWxlcy4gTG9jdXMgY291 bGQgYmUgJ3Byb2dzcGFjZScgdG8gc3BlY2lmeQorICAgIHRoYXQgb25seSB4 bWV0aG9kcyBmcm9tIHRoZSBjdXJyZW50IHByb2dzcGFjZSBzaG91bGQgYmUg ZGlzYWJsZWQuCisKKyAgICBOQU1FLVJFR0VYUCBpcyBhIHJlZ3VsYXIgZXhw cmVzc2lvbiBtYXRjaGluZyB0aGUgbmFtZXMgb2YgeG1ldGhvZHMKKyAgICB3 aXRoaW4gYSBnaXZlbiBsb2N1cy4gIElmIHRoaXMgb21pdHRlZCBmb3IgYSBz cGVjaWZpZWQgbG9jdXMsIHRoZW4gYWxsCisgICAgcmVnaXN0ZXJlZCB4bWV0 aG9kIG1hdGNoZXJzIGluIHRoZSBsb2N1cyBhcmUgZGlzYWJsZWQuICBUbyBk aXNhYmxlCisgICAgb25seSBhIGNlcnRhaW4geG1ldGhvZHMgbWFuYWdlZCBi eSBhIHNpbmdsZSBtYXRjaGVyLCB0aGUgbmFtZSByZWdleHAKKyAgICBjYW4g YmUgc3BlY2lmaWVkIGFzIG1hdGNoZXItbmFtZS1yZWdleHA7eG1ldGhvZC1u YW1lLXJlZ2V4cC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxm KToKKyAgICAgICAgc3VwZXIoRGlzYWJsZVhNZXRob2QsIHNlbGYpLl9faW5p dF9fKCJkaXNhYmxlIHhtZXRob2QiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZ2RiLkNPTU1BTkRfREFUQSkKKwor ICAgIGRlZiBpbnZva2Uoc2VsZiwgYXJnLCBmcm9tX3R0eSk6CisgICAgICAg IHNldF94bV9zdGF0dXMoYXJnLCBGYWxzZSkKKworCitkZWYgcmVnaXN0ZXJf eG1ldGhvZF9jb21tYW5kcygpOgorICAgICIiIkluc3RhbGxzIHRoZSB4bWV0 aG9kIGNvbW1hbmRzLiIiIgorICAgIEluZm9YTWV0aG9kKCkKKyAgICBFbmFi bGVYTWV0aG9kKCkKKyAgICBEaXNhYmxlWE1ldGhvZCgpCisKKworcmVnaXN0 ZXJfeG1ldGhvZF9jb21tYW5kcygpCmRpZmYgLS1naXQgYS9nZGIvcHl0aG9u L2xpYi9nZGIveG1ldGhvZC5weSBiL2dkYi9weXRob24vbGliL2dkYi94bWV0 aG9kLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEy ZWYxOGEKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvcHl0aG9uL2xpYi9nZGIv eG1ldGhvZC5weQpAQCAtMCwwICsxLDI1OSBAQAorIyBQeXRob24gc2lkZSBv ZiB0aGUgc3VwcG9ydCBmb3IgeG1ldGhvZHMuCisjIENvcHlyaWdodCAoQykg MjAxMy0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisj IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGgg dGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+LgorCisiIiJVdGlsaXRpZXMgZm9yIGRlZmluaW5nIHht ZXRob2RzIiIiCisKK2ltcG9ydCBnZGIKK2ltcG9ydCByZQoraW1wb3J0IHN5 cworCisKK2lmIHN5cy52ZXJzaW9uX2luZm9bMF0gPiAyOgorICAgICMgUHl0 aG9uIDMgcmVtb3ZlZCBiYXNlc3RyaW5nIGFuZCBsb25nCisgICAgYmFzZXN0 cmluZyA9IHN0cgorICAgIGxvbmcgPSBpbnQKKworCitjbGFzcyBYTWV0aG9k KG9iamVjdCk6CisgICAgIiIiQmFzZSBjbGFzcyAob3IgYSB0ZW1wbGF0ZSkg Zm9yIGFuIHhtZXRob2QgZGVzY3JpcHRpb24uCisKKyAgICBDdXJyZW50bHks IHRoZSBkZXNjcmlwdGlvbiByZXF1aXJlcyBvbmx5IHRoZSAnbmFtZScgYW5k ICdlbmFibGVkJworICAgIGF0dHJpYnV0ZXMuICBEZXNjcmlwdGlvbiBvYmpl Y3RzIGFyZSBtYW5hZ2VkIGJ5ICdYTWV0aG9kTWF0Y2hlcicKKyAgICBvYmpl Y3RzIChzZWUgYmVsb3cpLiAgTm90ZSB0aGF0IHRoaXMgaXMgb25seSBhIHRl bXBsYXRlIGZvciB0aGUKKyAgICBpbnRlcmZhY2Ugb2YgdGhlIFhNZXRob2RN YXRjaGVyLm1ldGhvZHMgb2JqZWN0cy4gIE9uZSBjb3VsZCB1c2UKKyAgICB0 aGlzIGNsYXNzIG9yIGNob29zZSB0byB1c2UgYW4gb2JqZWN0IHdoaWNoIHN1 cHBvcnRzIHRoaXMgZXhhY3Qgc2FtZQorICAgIGludGVyZmFjZS4gIEFsc28s IGFuIFhNZXRob2RNYXRjaGVyIGNhbiBjaG9vc2Ugbm90IHVzZSBpdCAnbWV0 aG9kcycKKyAgICBhdHRyaWJ1dGUuICBJbiBzdWNoIGNhc2VzIHRoaXMgY2xh c3MgKG9yIGFuIGVxdWl2YWxlbnQpIGlzIG5vdCB1c2VkLgorCisgICAgQXR0 cmlidXRlczoKKyAgICAgICAgbmFtZTogVGhlIG5hbWUgb2YgdGhlIHhtZXRo b2QuCisgICAgICAgIGVuYWJsZWQ6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlm IHRoZSB4bWV0aG9kIGlzIGVuYWJsZWQuCisgICAgIiIiCisKKyAgICBkZWYg X19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAgIHNlbGYubmFtZSA9IG5h bWUKKyAgICAgICAgc2VsZi5lbmFibGVkID0gVHJ1ZQorCisKK2NsYXNzIFhN ZXRob2RNYXRjaGVyKG9iamVjdCk6CisgICAgIiIiQWJzdHJhY3QgYmFzZSBj bGFzcyBmb3IgbWF0Y2hpbmcgYW4geG1ldGhvZC4KKworICAgIFdoZW4gbG9v a2luZyBmb3IgeG1ldGhvZHMsIEdEQiBpbnZva2VzIHRoZSBgbWF0Y2gnIG1l dGhvZCBvZiBhCisgICAgcmVnaXN0ZXJlZCB4bWV0aG9kIG1hdGNoZXIgdG8g bWF0Y2ggdGhlIG9iamVjdCB0eXBlIGFuZCBtZXRob2QgbmFtZS4KKyAgICBU aGUgYG1hdGNoJyBtZXRob2QgaW4gY29uY3JldGUgY2xhc3NlcyBkZXJpdmVk IGZyb20gdGhpcyBjbGFzcyBzaG91bGQKKyAgICByZXR1cm4gYW4gYFhNZXRo b2RXb3JrZXInIG9iamVjdCwgb3IgYSBsaXN0IG9mIGBYTWV0aG9kV29ya2Vy JworICAgIG9iamVjdHMgaWYgdGhlcmUgaXMgYSBtYXRjaCAoc2VlIGJlbG93 IGZvciAnWE1ldGhvZFdvcmtlcicgY2xhc3MpLgorCisgICAgQXR0cmlidXRl czoKKyAgICAgICAgbmFtZTogVGhlIG5hbWUgb2YgdGhlIG1hdGNoZXIuCisg ICAgICAgIGVuYWJsZWQ6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBt YXRjaGVyIGlzIGVuYWJsZWQuCisgICAgICAgIG1ldGhvZHM6IEEgc2VxdWVu Y2Ugb2Ygb2JqZWN0cyBvZiB0eXBlICdYTWV0aG9kJywgb3Igb2JqZWN0cwor ICAgICAgICAgICAgd2hpY2ggaGF2ZSBhdCBsZWFzdCB0aGUgYXR0cmlidXRl cyBvZiBhbiAnWE1ldGhvZCcgb2JqZWN0LgorICAgICAgICAgICAgVGhpcyBs aXN0IGlzIHVzZWQgYnkgdGhlICdlbmFibGUnLydkaXNhYmxlJy8naW5mbycg Y29tbWFuZHMgdG8KKyAgICAgICAgICAgIGVuYWJsZS9kaXNhYmxlL2xpc3Qg dGhlIHhtZXRob2RzIHJlZ2lzdGVyZWQgd2l0aCBHREIuICBTZWUKKyAgICAg ICAgICAgIHRoZSAnbWF0Y2gnIG1ldGhvZCBiZWxvdyB0byBrbm93IGhvdyB0 aGlzIHNlcXVlbmNlIGlzIHVzZWQuCisgICAgICAgICAgICBUaGlzIGF0dHJp YnV0ZSBpcyBOb25lIGlmIHRoZSBtYXRjaGVyIGNob29zZXMgbm90IGhhdmUg YW55CisgICAgICAgICAgICB4bWV0aG9kcyBtYW5hZ2VkIGJ5IGl0LgorICAg ICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAg ICAiIiIKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIG5hbWU6IEFuIGlk ZW50aWZ5aW5nIG5hbWUgZm9yIHRoZSB4bWV0aG9kIG9yIHRoZSBncm91cCBv ZgorICAgICAgICAgICAgICAgICAgeG1ldGhvZHMgcmV0dXJuZWQgYnkgdGhl IGBtYXRjaCcgbWV0aG9kLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5u YW1lID0gbmFtZQorICAgICAgICBzZWxmLmVuYWJsZWQgPSBUcnVlCisgICAg ICAgIHNlbGYubWV0aG9kcyA9IE5vbmUKKworICAgIGRlZiBtYXRjaChzZWxm LCBjbGFzc190eXBlLCBtZXRob2RfbmFtZSk6CisgICAgICAgICIiIk1hdGNo IGNsYXNzIHR5cGUgYW5kIG1ldGhvZCBuYW1lLgorCisgICAgICAgIEluIGRl cml2ZWQgY2xhc3NlcywgaXQgc2hvdWxkIHJldHVybiBhbiBYTWV0aG9kV29y a2VyIG9iamVjdCwgb3IgYQorICAgICAgICBzZXF1ZW5jZSBvZiAnWE1ldGhv ZFdvcmtlcicgb2JqZWN0cy4gIE9ubHkgdGhvc2UgeG1ldGhvZCB3b3JrZXJz CisgICAgICAgIHdob3NlIGNvcnJlc3BvbmRpbmcgJ1hNZXRob2QnIGRlc2Ny aXB0b3Igb2JqZWN0IGlzIGVuYWJsZWQgc2hvdWxkIGJlCisgICAgICAgIHJl dHVybmVkLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBjbGFzc190 eXBlOiBUaGUgY2xhc3MgdHlwZSAoZ2RiLlR5cGUgb2JqZWN0KSB0byBtYXRj aC4KKyAgICAgICAgICAgIG1ldGhvZF9uYW1lOiBUaGUgbmFtZSAoc3RyaW5n KSBvZiB0aGUgbWV0aG9kIHRvIG1hdGNoLgorICAgICAgICAiIiIKKyAgICAg ICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiWE1ldGhvZE1hdGNoZXIg bWF0Y2giKQorCisKK2NsYXNzIFhNZXRob2RXb3JrZXIob2JqZWN0KToKKyAg ICAiIiJCYXNlIGNsYXNzIGZvciBhbGwgeG1ldGhvZCB3b3JrZXJzIGRlZmlu ZWQgaW4gUHl0aG9uLgorCisgICAgQW4geG1ldGhvZCB3b3JrZXIgaXMgYW4g b2JqZWN0IHdoaWNoIG1hdGNoZXMgdGhlIG1ldGhvZCBhcmd1bWVudHMsIGFu ZAorICAgIGludm9rZXMgdGhlIG1ldGhvZCB3aGVuIEdEQiB3YW50cyBpdCB0 by4gIEludGVybmFsbHksIEdEQiBmaXJzdCBpbnZva2VzIHRoZQorICAgICdn ZXRfYXJnX3R5cGVzJyBtZXRob2QgdG8gcGVyZm9ybSBvdmVybG9hZCByZXNv bHV0aW9uLiAgSWYgR0RCIHNlbGVjdHMgdG8KKyAgICBpbnZva2UgdGhpcyBQ eXRob24geG1ldGhvZCwgdGhlbiBpdCBpbnZva2VzIGl0IHZpYSB0aGUgb3Zl cnJpZGRlbgorICAgICdfX2NhbGxfXycgbWV0aG9kLgorCisgICAgRGVyaXZl ZCBjbGFzc2VzIHNob3VsZCBvdmVycmlkZSB0aGUgJ2dldF9hcmdfdHlwZXMn IGFuZCAnX19jYWxsX18nIG1ldGhvZHMuCisgICAgIiIiCisKKyAgICBkZWYg Z2V0X2FyZ190eXBlcyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGFyZ3Vt ZW50cyB0eXBlcyBvZiBhbiB4bWV0aG9kLgorCisgICAgICAgIEEgc2VxdWVu Y2Ugb2YgZ2RiLlR5cGUgb2JqZWN0cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBh cmd1bWVudHMgb2YgdGhlCisgICAgICAgIHhtZXRob2QgYXJlIHJldHVybmVk LiAgSWYgdGhlIHhtZXRob2QgdGFrZXMgbm8gYXJndW1lbnRzLCB0aGVuICdO b25lJworICAgICAgICBvciBhbiBlbXB0eSBzZXF1ZW5jZSBpcyByZXR1cm5l ZC4gIElmIHRoZSB4bWV0aG9kIHRha2VzIG9ubHkgYSBzaW5nbGUKKyAgICAg ICAgYXJndW1lbnQsIHRoZW4gYSBnZGIuVHlwZSBvYmplY3Qgb3IgYSBzZXF1 ZW5jZSB3aXRoIGEgc2luZ2xlIGdkYi5UeXBlCisgICAgICAgIGVsZW1lbnQg aXMgcmV0dXJuZWQuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJ bXBsZW1lbnRlZEVycm9yKCJYTWV0aG9kV29ya2VyIGdldF9hcmdfdHlwZXMi KQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzKToKKyAgICAgICAg IiIiSW52b2tlIHRoZSB4bWV0aG9kLgorCisgICAgICAgIEFyZ3M6CisgICAg ICAgICAgICBhcmdzOiBBcmd1bWVudHMgdG8gdGhlIG1ldGhvZC4gIEVhY2gg ZWxlbWVudCBvZiB0aGUgdHVwbGUgaXMgYQorICAgICAgICAgICAgICAgIGdk Yi5WYWx1ZSBvYmplY3QuICBUaGUgZmlyc3QgZWxlbWVudCBpcyB0aGUgJ3Ro aXMnIHBvaW50ZXIKKyAgICAgICAgICAgICAgICB2YWx1ZS4KKworICAgICAg ICBSZXR1cm5zOgorICAgICAgICAgICAgQSBnZGIuVmFsdWUgY29ycmVzcG9u ZGluZyB0byB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIHhtZXRob2QuCisg ICAgICAgICAgICBSZXR1cm5zICdOb25lJyBpZiB0aGUgbWV0aG9kIGRvZXMg bm90IHJldHVybiBhbnl0aGluZy4KKyAgICAgICAgIiIiCisgICAgICAgIHJh aXNlIE5vdEltcGxlbWVudGVkRXJyb3IoIlhNZXRob2RXb3JrZXIgX19jYWxs X18iKQorCisKK2NsYXNzIFNpbXBsZVhNZXRob2RNYXRjaGVyKFhNZXRob2RN YXRjaGVyKToKKyAgICAiIiJBIHV0aWxpdHkgY2xhc3MgdG8gaW1wbGVtZW50 IHNpbXBsZSB4bWV0aG9kIG1hdGhlcnMgYW5kIHdvcmtlcnMuCisKKyAgICBT ZWUgdGhlIF9faW5pdF9fIG1ldGhvZCBiZWxvdyBmb3IgaW5mb3JtYXRpb24g b24gaG93IGluc3RhbmNlcyBvZiB0aGlzCisgICAgY2xhc3MgY2FuIGJlIHVz ZWQuCisKKyAgICBGb3Igc2ltcGxlIGNsYXNzZXMgYW5kIG1ldGhvZHMsIG9u ZSBjYW4gY2hvb3NlIHRvIHVzZSB0aGlzIGNsYXNzLiAgRm9yCisgICAgY29t cGxleCB4bWV0aG9kcywgd2hpY2ggbmVlZCB0byByZXBsYWNlL2ltcGxlbWVu dCB0ZW1wbGF0ZSBtZXRob2RzIG9uCisgICAgcG9zc2libHkgdGVtcGxhdGUg Y2xhc3Nlcywgb25lIHNob3VsZCBpbXBsZW1lbnQgdGhlaXIgb3duIHhtZXRo b2QKKyAgICBtYXRjaGVycyBhbmQgd29ya2Vycy4gIFNlZSBweS14bWV0aG9k cy5weSBpbiB0ZXN0c3VpdGUvZ2RiLnB5dGhvbgorICAgIGRpcmVjdG9yeSBv ZiB0aGUgR0RCIHNvdXJjZSB0cmVlIGZvciBleGFtcGxlcy4KKyAgICAiIiIK KworICAgIGNsYXNzIFNpbXBsZVhNZXRob2RXb3JrZXIoWE1ldGhvZFdvcmtl cik6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2RfZnVuY3Rp b24sIGFyZ190eXBlcyk6CisgICAgICAgICAgICBzZWxmLl9hcmdfdHlwZXMg PSBhcmdfdHlwZXMKKyAgICAgICAgICAgIHNlbGYuX21ldGhvZF9mdW5jdGlv biA9IG1ldGhvZF9mdW5jdGlvbgorCisgICAgICAgIGRlZiBnZXRfYXJnX3R5 cGVzKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2FyZ190eXBl cworCisgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncyk6CisgICAg ICAgICAgICByZXR1cm4gc2VsZi5fbWV0aG9kX2Z1bmN0aW9uKCphcmdzKQor CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgY2xhc3NfbWF0Y2hl ciwgbWV0aG9kX21hdGNoZXIsIG1ldGhvZF9mdW5jdGlvbiwKKyAgICAgICAg ICAgICAgICAgKmFyZ190eXBlcyk6CisgICAgICAgICIiIgorICAgICAgICBB cmdzOgorICAgICAgICAgICAgbmFtZTogTmFtZSBvZiB0aGUgeG1ldGhvZCBt YXRjaGVyLgorICAgICAgICAgICAgY2xhc3NfbWF0Y2hlcjogQSByZWd1bGFy IGV4cHJlc3Npb24gdXNlZCB0byBtYXRjaCB0aGUgbmFtZSBvZiB0aGUKKyAg ICAgICAgICAgICAgICBjbGFzcyB3aG9zZSBtZXRob2QgdGhpcyB4bWV0aG9k IGlzIGltcGxlbWVudGluZy9yZXBsYWNpbmcuCisgICAgICAgICAgICBtZXRo b2RfbWF0Y2hlcjogQSByZWd1bGFyIGV4cHJlc3Npb24gdXNlZCB0byBtYXRj aCB0aGUgbmFtZSBvZiB0aGUKKyAgICAgICAgICAgICAgICBtZXRob2QgdGhp cyB4bWV0aG9kIGlzIGltcGxlbWVudGluZy9yZXBsYWNpbmcuCisgICAgICAg ICAgICBtZXRob2RfZnVuY3Rpb246IEEgUHl0aG9uIGNhbGxhYmxlIHdoaWNo IHdvdWxkIGJlIGNhbGxlZCB2aWEgdGhlCisgICAgICAgICAgICAgICAgJ2lu dm9rZScgbWV0aG9kIG9mIHRoZSB3b3JrZXIgcmV0dXJuZWQgYnkgdGhlIG9i amVjdHMgb2YgdGhpcworICAgICAgICAgICAgICAgIGNsYXNzLiAgVGhpcyBj YWxsYWJsZSBzaG91bGQgYWNjZXB0IHRoZSBvYmplY3QgKCp0aGlzKSBhcyB0 aGUKKyAgICAgICAgICAgICAgICBmaXJzdCBhcmd1bWVudCBmb2xsb3dlZCBi eSB0aGUgcmVzdCBvZiB0aGUgYXJndW1lbnRzIHRvIHRoZQorICAgICAgICAg ICAgICAgIG1ldGhvZC4gQWxsIGFyZ3VtZW50cyB0byB0aGlzIGZ1bmN0aW9u IHNob3VsZCBiZSBnZGIuVmFsdWUKKyAgICAgICAgICAgICAgICBvYmplY3Rz LgorICAgICAgICAgICAgYXJnX3R5cGVzOiBUaGUgZ2RiLlR5cGUgb2JqZWN0 cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBhcmd1bWVudHMgdGhhdAorICAgICAg ICAgICAgICAgIHRoaXMgeG1ldGhvZCB0YWtlcy4gSXQgY2FuIGJlIE5vbmUs IG9yIGFuIGVtcHR5IHNlcXVlbmNlLAorICAgICAgICAgICAgICAgIG9yIGEg c2luZ2xlIGdkYi5UeXBlIG9iamVjdCwgb3IgYSBzZXF1ZW5jZSBvZiBnZGIu VHlwZSBvYmplY3RzLgorICAgICAgICAiIiIKKyAgICAgICAgWE1ldGhvZE1h dGNoZXIuX19pbml0X18oc2VsZiwgbmFtZSkKKyAgICAgICAgYXNzZXJ0IGNh bGxhYmxlKG1ldGhvZF9mdW5jdGlvbiksICgKKyAgICAgICAgICAgICJUaGUg J21ldGhvZF9mdW5jdGlvbicgYXJndW1lbnQgdG8gJ1NpbXBsZVhNZXRob2RN YXRjaGVyJyAiCisgICAgICAgICAgICAiX19pbml0X18gbWV0aG9kIHNob3Vs ZCBiZSBhIGNhbGxhYmxlLiIpCisgICAgICAgIHNlbGYuX21ldGhvZF9mdW5j dGlvbiA9IG1ldGhvZF9mdW5jdGlvbgorICAgICAgICBzZWxmLl9jbGFzc19t YXRjaGVyID0gY2xhc3NfbWF0Y2hlcgorICAgICAgICBzZWxmLl9tZXRob2Rf bWF0Y2hlciA9IG1ldGhvZF9tYXRjaGVyCisgICAgICAgIHNlbGYuX2FyZ190 eXBlcyA9IGFyZ190eXBlcworCisgICAgZGVmIG1hdGNoKHNlbGYsIGNsYXNz X3R5cGUsIG1ldGhvZF9uYW1lKToKKyAgICAgICAgY20gPSByZS5tYXRjaChz ZWxmLl9jbGFzc19tYXRjaGVyLCBzdHIoY2xhc3NfdHlwZS51bnF1YWxpZmll ZCgpLnRhZykpCisgICAgICAgIG1tID0gcmUubWF0Y2goc2VsZi5fbWV0aG9k X21hdGNoZXIsIG1ldGhvZF9uYW1lKQorICAgICAgICBpZiBjbSBhbmQgbW06 CisgICAgICAgICAgICByZXR1cm4gU2ltcGxlWE1ldGhvZE1hdGNoZXIuU2lt cGxlWE1ldGhvZFdvcmtlcigKKyAgICAgICAgICAgICAgICBzZWxmLl9tZXRo b2RfZnVuY3Rpb24sIHNlbGYuX2FyZ190eXBlcykKKworCisjIEEgaGVscGVy IGZ1bmN0aW9uIGZvciByZWdpc3Rlcl94bWV0aG9kX21hdGNoZXIgd2hpY2gg cmV0dXJucyBhbiBlcnJvcgorIyBvYmplY3QgaWYgTUFUQ0hFUiBpcyBub3Qg aGF2aW5nIHRoZSByZXF1aXNpdGUgYXR0cmlidXRlcyBpbiB0aGUgcHJvcGVy CisjIGZvcm1hdC4KKworZGVmIF92YWxpZGF0ZV94bWV0aG9kX21hdGNoZXIo bWF0Y2hlcik6CisgICAgaWYgbm90IGhhc2F0dHIobWF0Y2hlciwgIm1hdGNo Iik6CisgICAgICAgIHJldHVybiBUeXBlRXJyb3IoIlhtZXRob2QgbWF0Y2hl ciBpcyBtaXNzaW5nIG1ldGhvZDogbWF0Y2giKQorICAgIGlmIG5vdCBoYXNh dHRyKG1hdGNoZXIsICJuYW1lIik6CisgICAgICAgIHJldHVybiBUeXBlRXJy b3IoIlhtZXRob2QgbWF0Y2hlciBpcyBtaXNzaW5nIGF0dHJpYnV0ZTogbmFt ZSIpCisgICAgaWYgbm90IGhhc2F0dHIobWF0Y2hlciwgImVuYWJsZWQiKToK KyAgICAgICAgcmV0dXJuIFR5cGVFcnJvcigiWG1ldGhvZCBtYXRjaGVyIGlz IG1pc3NpbmcgYXR0cmlidXRlOiBlbmFibGVkIikKKyAgICBpZiBub3QgaXNp bnN0YW5jZShtYXRjaGVyLm5hbWUsIGJhc2VzdHJpbmcpOgorICAgICAgICBy ZXR1cm4gVHlwZUVycm9yKCJBdHRyaWJ1dGUgJ25hbWUnIG9mIHhtZXRob2Qg bWF0Y2hlciBpcyBub3QgYSAiCisgICAgICAgICAgICAgICAgICAgICAgICAg InN0cmluZyIpCisgICAgaWYgbWF0Y2hlci5uYW1lLmZpbmQoIjsiKSA+PSAw OgorICAgICAgICByZXR1cm4gVmFsdWVFcnJvcigiWG1ldGhvZCBtYXRjaGVy IG5hbWUgY2Fubm90IGNvbnRhaW4gJzsnIGluIGl0IikKKworCisjIEEgaGVs cGVyIGZ1bmN0aW9uIGZvciByZWdpc3Rlcl94bWV0aG9kX21hdGNoZXIgd2hp Y2ggbG9va3MgdXAgYW4gCisjIHhtZXRob2QgbWF0Y2hlciB3aXRoIE5BTUUg aW4gTE9DVVMuICBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgeG1ldGhvZAor IyBtYXRjaGVyIGluICd4bWV0aG9kcycgc2VxdWVuY2UgYXR0cmlidXRlIG9m IHRoZSBMT0NVUy4gIElmIE5BTUUgaXMgbm90CisjIGZvdW5kIGluIExPQ1VT LCB0aGVuIC0xIGlzIHJldHVybmVkLgorCitkZWYgX2xvb2t1cF94bWV0aG9k X21hdGNoZXIobG9jdXMsIG5hbWUpOgorICAgIGZvciBpIGluIHJhbmdlKDAs IGxlbihsb2N1cy54bWV0aG9kcykpOgorICAgICAgICBpZiBsb2N1cy54bWV0 aG9kc1tpXS5uYW1lID09IG5hbWU6CisgICAgICAgICAgICByZXR1cm4gaQor ICAgIHJldHVybiAtMQorCisKK2RlZiByZWdpc3Rlcl94bWV0aG9kX21hdGNo ZXIobG9jdXMsIG1hdGNoZXIsIHJlcGxhY2U9RmFsc2UpOgorICAgICIiIlJl Z2lzdGVycyBhIHhtZXRob2QgbWF0Y2hlciBNQVRDSEVSIHdpdGggYSBMT0NV Uy4KKworICAgIEFyZ3VtZW50czoKKyAgICAgICAgbG9jdXM6IFRoZSBsb2N1 cyBpbiB3aGljaCB0aGUgeG1ldGhvZHMgc2hvdWxkIGJlIHJlZ2lzdGVyZWQu CisgICAgICAgICAgICBJdCBjYW4gYmUgJ05vbmUnIHRvIGluZGljYXRlIHRo YXQgdGhlIHhtZXRob2RzIHNob3VsZCBiZQorICAgICAgICAgICAgcmVnaXN0 ZXJlZCBnbG9iYWxseS4gT3IsIGl0IGNvdWxkIGJlIGEgZ2RiLk9iamZpbGUg b3IgYQorICAgICAgICAgICAgZ2RiLlByb2dzcGFjZSBvYmplY3QgaW4gd2hp Y2ggdGhlIHhtZXRob2RzIHNob3VsZCBiZQorICAgICAgICAgICAgcmVnaXN0 ZXJlZC4KKyAgICAgICAgbWF0Y2hlcjogVGhlIHhtZXRob2QgbWF0Y2hlciB0 byByZWdpc3RlciB3aXRoIHRoZSBMT0NVUy4gIEl0CisgICAgICAgICAgICBz aG91bGQgYmUgYW4gaW5zdGFuY2Ugb2YgJ1hNZXRob2RNYXRjaGVyJyBjbGFz cy4KKyAgICAgICAgcmVwbGFjZTogSWYgVHJ1ZSwgcmVwbGFjZSBhbnkgZXhp c3RpbmcgeG1ldGhvZCBtYXRjaGVyIHdpdGggdGhlCisgICAgICAgICAgICBz YW1lIG5hbWUgaW4gdGhlIGxvY3VzLiAgT3RoZXJ3aXNlLCBpZiBhIG1hdGNo ZXIgd2l0aCB0aGUgc2FtZSBuYW1lCisgICAgICAgICAgICBleGlzdHMgaW4g dGhlIGxvY3VzLCByYWlzZSBhbiBleGNlcHRpb24uCisgICAgIiIiCisgICAg ZXJyID0gX3ZhbGlkYXRlX3htZXRob2RfbWF0Y2hlcihtYXRjaGVyKQorICAg IGlmIGVycjoKKyAgICAgICAgcmFpc2UgZXJyCisgICAgaWYgbm90IGxvY3Vz OgorICAgICAgICBsb2N1cyA9IGdkYgorICAgIGlmIGxvY3VzID09IGdkYjoK KyAgICAgICAgbG9jdXNfbmFtZSA9ICJnbG9iYWwiCisgICAgZWxzZToKKyAg ICAgICAgbG9jdXNfbmFtZSA9IGxvY3VzLmZpbGVuYW1lCisgICAgaW5kZXgg PSBfbG9va3VwX3htZXRob2RfbWF0Y2hlcihsb2N1cywgbWF0Y2hlci5uYW1l KQorICAgIGlmIGluZGV4ID49IDA6CisgICAgICAgIGlmIHJlcGxhY2U6Cisg ICAgICAgICAgICBkZWwgbG9jdXMueG1ldGhvZHNbaW5kZXhdCisgICAgICAg IGVsc2U6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIlhtZXRo b2QgbWF0Y2hlciBhbHJlYWR5IHJlZ2lzdGVyZWQgd2l0aCAiCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiAlcyIgJSAobG9jdXNfbmFt ZSwgbWF0Y2hlci5uYW1lKSkKKyAgICBpZiBnZGIucGFyYW1ldGVyKCJ2ZXJi b3NlIik6CisgICAgICAgIGdkYi53cml0ZSgiUmVnaXN0ZXJpbmcgeG1ldGhv ZCBtYXRjaGVyICclcycgd2l0aCAlcycgLi4uXG4iKQorICAgIGxvY3VzLnht ZXRob2RzLmluc2VydCgwLCBtYXRjaGVyKQpkaWZmIC0tZ2l0IGEvZ2RiL3B5 dGhvbi9weS1vYmpmaWxlLmMgYi9nZGIvcHl0aG9uL3B5LW9iamZpbGUuYwpp bmRleCA5N2ZiMGJlLi41ZDAwZDYyIDEwMDY0NAotLS0gYS9nZGIvcHl0aG9u L3B5LW9iamZpbGUuYworKysgYi9nZGIvcHl0aG9uL3B5LW9iamZpbGUuYwpA QCAtMzcsNiArMzcsOSBAQCB0eXBlZGVmIHN0cnVjdAogICBQeU9iamVjdCAq ZnJhbWVfZmlsdGVyczsKICAgLyogVGhlIHR5cGUtcHJpbnRlciBsaXN0LiAg Ki8KICAgUHlPYmplY3QgKnR5cGVfcHJpbnRlcnM7CisKKyAgLyogVGhlIGRl YnVnIG1ldGhvZCBtYXRjaGVyIGxpc3QuICAqLworICBQeU9iamVjdCAqeG1l dGhvZHM7CiB9IG9iamZpbGVfb2JqZWN0OwogCiBzdGF0aWMgUHlUeXBlT2Jq ZWN0IG9iamZpbGVfb2JqZWN0X3R5cGUKQEAgLTY3LDYgKzcwLDcgQEAgb2Jq ZnB5X2RlYWxsb2MgKFB5T2JqZWN0ICpvKQogICBQeV9YREVDUkVGIChzZWxm LT5wcmludGVycyk7CiAgIFB5X1hERUNSRUYgKHNlbGYtPmZyYW1lX2ZpbHRl cnMpOwogICBQeV9YREVDUkVGIChzZWxmLT50eXBlX3ByaW50ZXJzKTsKKyAg UHlfWERFQ1JFRiAoc2VsZi0+eG1ldGhvZHMpOwogICBQeV9UWVBFIChzZWxm KS0+dHBfZnJlZSAoc2VsZik7CiB9CiAKQEAgLTk5LDYgKzEwMywxMyBAQCBv YmpmcHlfbmV3IChQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdz LCBQeU9iamVjdCAqa2V5d29yZHMpCiAJICBQeV9ERUNSRUYgKHNlbGYpOwog CSAgcmV0dXJuIE5VTEw7CiAJfQorCisgICAgICBzZWxmLT54bWV0aG9kcyA9 IFB5TGlzdF9OZXcgKDApOworICAgICAgaWYgKHNlbGYtPnhtZXRob2RzID09 IE5VTEwpCisJeworCSAgUHlfREVDUkVGIChzZWxmKTsKKwkgIHJldHVybiBO VUxMOworCX0KICAgICB9CiAgIHJldHVybiAoUHlPYmplY3QgKikgc2VsZjsK IH0KQEAgLTE5Myw2ICsyMDQsMTcgQEAgb2JqZnB5X2dldF90eXBlX3ByaW50 ZXJzIChQeU9iamVjdCAqbywgdm9pZCAqaWdub3JlKQogICByZXR1cm4gc2Vs Zi0+dHlwZV9wcmludGVyczsKIH0KIAorLyogR2V0IHRoZSAneG1ldGhvZHMn IGF0dHJpYnV0ZS4gICovCisKK1B5T2JqZWN0ICoKK29iamZweV9nZXRfeG1l dGhvZHMgKFB5T2JqZWN0ICpvLCB2b2lkICppZ25vcmUpCit7CisgIG9iamZp bGVfb2JqZWN0ICpzZWxmID0gKG9iamZpbGVfb2JqZWN0ICopIG87CisKKyAg UHlfSU5DUkVGIChzZWxmLT54bWV0aG9kcyk7CisgIHJldHVybiBzZWxmLT54 bWV0aG9kczsKK30KKwogLyogU2V0IHRoZSAndHlwZV9wcmludGVycycgYXR0 cmlidXRlLiAgKi8KIAogc3RhdGljIGludApAQCAtMjkyLDYgKzMxNCwxMyBA QCBvYmpmaWxlX3RvX29iamZpbGVfb2JqZWN0IChzdHJ1Y3Qgb2JqZmlsZSAq b2JqZmlsZSkKIAkgICAgICByZXR1cm4gTlVMTDsKIAkgICAgfQogCisJICBv YmplY3QtPnhtZXRob2RzID0gUHlMaXN0X05ldyAoMCk7CisJICBpZiAob2Jq ZWN0LT54bWV0aG9kcyA9PSBOVUxMKQorCSAgICB7CisJICAgICAgUHlfREVD UkVGIChvYmplY3QpOworCSAgICAgIHJldHVybiBOVUxMOworCSAgICB9CisK IAkgIHNldF9vYmpmaWxlX2RhdGEgKG9iamZpbGUsIG9iamZweV9vYmpmaWxl X2RhdGFfa2V5LCBvYmplY3QpOwogCX0KICAgICB9CkBAIC0zMzMsNiArMzYy LDggQEAgc3RhdGljIFB5R2V0U2V0RGVmIG9iamZpbGVfZ2V0c2V0W10gPQog ICAgIG9iamZweV9zZXRfZnJhbWVfZmlsdGVycywgIkZyYW1lIEZpbHRlcnMu IiwgTlVMTCB9LAogICB7ICJ0eXBlX3ByaW50ZXJzIiwgb2JqZnB5X2dldF90 eXBlX3ByaW50ZXJzLCBvYmpmcHlfc2V0X3R5cGVfcHJpbnRlcnMsCiAgICAg IlR5cGUgcHJpbnRlcnMuIiwgTlVMTCB9LAorICB7ICJ4bWV0aG9kcyIsIG9i amZweV9nZXRfeG1ldGhvZHMsIE5VTEwsCisgICAgIkRlYnVnIG1ldGhvZHMu IiwgTlVMTCB9LAogICB7IE5VTEwgfQogfTsKIApkaWZmIC0tZ2l0IGEvZ2Ri L3B5dGhvbi9weS1wcm9nc3BhY2UuYyBiL2dkYi9weXRob24vcHktcHJvZ3Nw YWNlLmMKaW5kZXggZGI0YzU2NC4uYjAwOTJjNSAxMDA2NDQKLS0tIGEvZ2Ri L3B5dGhvbi9weS1wcm9nc3BhY2UuYworKysgYi9nZGIvcHl0aG9uL3B5LXBy b2dzcGFjZS5jCkBAIC0zOSw2ICszOSw5IEBAIHR5cGVkZWYgc3RydWN0CiAg IFB5T2JqZWN0ICpmcmFtZV9maWx0ZXJzOwogICAvKiBUaGUgdHlwZS1wcmlu dGVyIGxpc3QuICAqLwogICBQeU9iamVjdCAqdHlwZV9wcmludGVyczsKKwor ICAvKiBUaGUgZGVidWcgbWV0aG9kIGxpc3QuICAqLworICBQeU9iamVjdCAq eG1ldGhvZHM7CiB9IHBzcGFjZV9vYmplY3Q7CiAKIHN0YXRpYyBQeVR5cGVP YmplY3QgcHNwYWNlX29iamVjdF90eXBlCkBAIC03NSw2ICs3OCw3IEBAIHBz cHlfZGVhbGxvYyAoUHlPYmplY3QgKnNlbGYpCiAgIFB5X1hERUNSRUYgKHBz X3NlbGYtPnByaW50ZXJzKTsKICAgUHlfWERFQ1JFRiAocHNfc2VsZi0+ZnJh bWVfZmlsdGVycyk7CiAgIFB5X1hERUNSRUYgKHBzX3NlbGYtPnR5cGVfcHJp bnRlcnMpOworICBQeV9YREVDUkVGIChwc19zZWxmLT54bWV0aG9kcyk7CiAg IFB5X1RZUEUgKHNlbGYpLT50cF9mcmVlIChzZWxmKTsKIH0KIApAQCAtMTA3 LDYgKzExMSwxMyBAQCBwc3B5X25ldyAoUHlUeXBlT2JqZWN0ICp0eXBlLCBQ eU9iamVjdCAqYXJncywgUHlPYmplY3QgKmtleXdvcmRzKQogCSAgUHlfREVD UkVGIChzZWxmKTsKIAkgIHJldHVybiBOVUxMOwogCX0KKworICAgICAgc2Vs Zi0+eG1ldGhvZHMgPSBQeUxpc3RfTmV3ICgwKTsKKyAgICAgIGlmIChzZWxm LT54bWV0aG9kcyA9PSBOVUxMKQorCXsKKwkgIFB5X0RFQ1JFRiAoc2VsZik7 CisJICByZXR1cm4gTlVMTDsKKwl9CiAgICAgfQogICByZXR1cm4gKFB5T2Jq ZWN0ICopIHNlbGY7CiB9CkBAIC0yMDEsNiArMjEyLDE3IEBAIHBzcHlfZ2V0 X3R5cGVfcHJpbnRlcnMgKFB5T2JqZWN0ICpvLCB2b2lkICppZ25vcmUpCiAg IHJldHVybiBzZWxmLT50eXBlX3ByaW50ZXJzOwogfQogCisvKiBHZXQgdGhl ICd4bWV0aG9kcycgYXR0cmlidXRlLiAgKi8KKworUHlPYmplY3QgKgorcHNw eV9nZXRfeG1ldGhvZHMgKFB5T2JqZWN0ICpvLCB2b2lkICppZ25vcmUpCit7 CisgIHBzcGFjZV9vYmplY3QgKnNlbGYgPSAocHNwYWNlX29iamVjdCAqKSBv OworCisgIFB5X0lOQ1JFRiAoc2VsZi0+eG1ldGhvZHMpOworICByZXR1cm4g c2VsZi0+eG1ldGhvZHM7Cit9CisKIC8qIFNldCB0aGUgJ3R5cGVfcHJpbnRl cnMnIGF0dHJpYnV0ZS4gICovCiAKIHN0YXRpYyBpbnQKQEAgLTI5Nyw2ICsz MTksMTMgQEAgcHNwYWNlX3RvX3BzcGFjZV9vYmplY3QgKHN0cnVjdCBwcm9n cmFtX3NwYWNlICpwc3BhY2UpCiAJICAgICAgcmV0dXJuIE5VTEw7CiAJICAg IH0KIAorCSAgb2JqZWN0LT54bWV0aG9kcyA9IFB5TGlzdF9OZXcgKDApOwor CSAgaWYgKG9iamVjdC0+eG1ldGhvZHMgPT0gTlVMTCkKKwkgICAgeworCSAg ICAgIFB5X0RFQ1JFRiAob2JqZWN0KTsKKwkgICAgICByZXR1cm4gTlVMTDsK KwkgICAgfQorCiAJICBzZXRfcHJvZ3JhbV9zcGFjZV9kYXRhIChwc3BhY2Us IHBzcHlfcHNwYWNlX2RhdGFfa2V5LCBvYmplY3QpOwogCX0KICAgICB9CkBA IC0zMjksNiArMzU4LDggQEAgc3RhdGljIFB5R2V0U2V0RGVmIHBzcGFjZV9n ZXRzZXRbXSA9CiAgICAgIkZyYW1lIGZpbHRlcnMuIiwgTlVMTCB9LAogICB7 ICJ0eXBlX3ByaW50ZXJzIiwgcHNweV9nZXRfdHlwZV9wcmludGVycywgcHNw eV9zZXRfdHlwZV9wcmludGVycywKICAgICAiVHlwZSBwcmludGVycy4iLCBO VUxMIH0sCisgIHsgInhtZXRob2RzIiwgcHNweV9nZXRfeG1ldGhvZHMsIE5V TEwsCisgICAgIkRlYnVnIG1ldGhvZHMuIiwgTlVMTCB9LAogICB7IE5VTEwg fQogfTsKIApkaWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9weS14bWV0aG9kcy5j IGIvZ2RiL3B5dGhvbi9weS14bWV0aG9kcy5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjAwNjJiMmQKLS0tIC9kZXYvbnVsbAorKysg Yi9nZGIvcHl0aG9uL3B5LXhtZXRob2RzLmMKQEAgLTAsMCArMSw2NDIgQEAK Ky8qIFN1cHBvcnQgZm9yIGRlYnVnIG1ldGhvZHMgaW4gUHl0aG9uLgorCisg ICBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgor CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg YWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSAiZGVm cy5oIgorI2luY2x1ZGUgImFyY2gtdXRpbHMuaCIKKyNpbmNsdWRlICJleHRl bnNpb24tcHJpdi5oIgorI2luY2x1ZGUgIm9iamZpbGVzLmgiCisjaW5jbHVk ZSAidmFsdWUuaCIKKyNpbmNsdWRlICJsYW5ndWFnZS5oIgorCisjaW5jbHVk ZSAicHl0aG9uLmgiCisjaW5jbHVkZSAicHl0aG9uLWludGVybmFsLmgiCisK K3N0YXRpYyBjb25zdCBjaGFyIGVuYWJsZWRfZmllbGRfbmFtZVtdID0gImVu YWJsZWQiOworc3RhdGljIGNvbnN0IGNoYXIgbWF0Y2hfbWV0aG9kX25hbWVb XSA9ICJtYXRjaCI7CitzdGF0aWMgY29uc3QgY2hhciBnZXRfYXJnX3R5cGVz X21ldGhvZF9uYW1lW10gPSAiZ2V0X2FyZ190eXBlcyI7CitzdGF0aWMgY29u c3QgY2hhciBpbnZva2VfbWV0aG9kX25hbWVbXSA9ICJpbnZva2UiOworc3Rh dGljIGNvbnN0IGNoYXIgbWF0Y2hlcnNfYXR0cl9zdHJbXSA9ICJ4bWV0aG9k cyI7CisKK3N0YXRpYyBQeU9iamVjdCAqcHlfbWF0Y2hfbWV0aG9kX25hbWUg PSBOVUxMOworc3RhdGljIFB5T2JqZWN0ICpweV9nZXRfYXJnX3R5cGVzX21l dGhvZF9uYW1lID0gTlVMTDsKK3N0YXRpYyBQeU9iamVjdCAqcHlfaW52b2tl X21ldGhvZF9uYW1lID0gTlVMTDsKKworc3RydWN0IGdkYnB5X3dvcmtlcl9k YXRhCit7CisgIFB5T2JqZWN0ICp3b3JrZXI7CisgIFB5T2JqZWN0ICp0aGlz X3R5cGU7Cit9OworCitzdGF0aWMgc3RydWN0IHhtZXRob2Rfd29ya2VyICpu ZXdfcHl0aG9uX3htZXRob2Rfd29ya2VyIChQeU9iamVjdCAqaXRlbSwKKwkJ CQkJCQkgUHlPYmplY3QgKnB5X29ial90eXBlKTsKKworLyogSW1wbGVtZW50 YXRpb24gb2YgZnJlZV94bWV0aG9kX3dvcmtlcl9kYXRhIGZvciBQeXRob24u ICAqLworCit2b2lkCitnZGJweV9mcmVlX3htZXRob2Rfd29ya2VyX2RhdGEg KGNvbnN0IHN0cnVjdCBleHRlbnNpb25fbGFuZ3VhZ2VfZGVmbiAqZXh0bGFu ZywKKwkJCQl2b2lkICpkYXRhKQoreworICBzdHJ1Y3QgZ2RicHlfd29ya2Vy X2RhdGEgKndvcmtlcl9kYXRhID0gZGF0YTsKKyAgc3RydWN0IGNsZWFudXAg KmNsZWFudXBzOworCisgIGdkYl9hc3NlcnQgKHdvcmtlcl9kYXRhLT53b3Jr ZXIgIT0gTlVMTCAmJiB3b3JrZXJfZGF0YS0+dGhpc190eXBlICE9IE5VTEwp OworCisgIC8qIFdlIGRvbid0IGRvIG11Y2ggaGVyZSwgYnV0IHdlIHN0aWxs IG5lZWQgdGhlIEdJTC4gICovCisgIGNsZWFudXBzID0gZW5zdXJlX3B5dGhv bl9lbnYgKGdldF9jdXJyZW50X2FyY2ggKCksIGN1cnJlbnRfbGFuZ3VhZ2Up OworCisgIFB5X0RFQ1JFRiAod29ya2VyX2RhdGEtPndvcmtlcik7CisgIFB5 X0RFQ1JFRiAod29ya2VyX2RhdGEtPnRoaXNfdHlwZSk7CisgIHhmcmVlICh3 b3JrZXJfZGF0YSk7CisKKyAgZG9fY2xlYW51cHMgKGNsZWFudXBzKTsKK30K KworLyogSW1wbGVtZW50YXRpb24gb2YgY2xvbmVfeG1ldGhvZF93b3JrZXJf ZGF0YSBmb3IgUHl0aG9uLiAgKi8KKwordm9pZCAqCitnZGJweV9jbG9uZV94 bWV0aG9kX3dvcmtlcl9kYXRhIChjb25zdCBzdHJ1Y3QgZXh0ZW5zaW9uX2xh bmd1YWdlX2RlZm4gKmV4dGxhbmcsCisJCQkJIHZvaWQgKmRhdGEpCit7Cisg IHN0cnVjdCBnZGJweV93b3JrZXJfZGF0YSAqd29ya2VyX2RhdGEgPSBkYXRh LCAqbmV3X2RhdGE7CisgIHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwczsKKwor ICBnZGJfYXNzZXJ0ICh3b3JrZXJfZGF0YS0+d29ya2VyICE9IE5VTEwgJiYg d29ya2VyX2RhdGEtPnRoaXNfdHlwZSAhPSBOVUxMKTsKKworICAvKiBXZSBk b24ndCBkbyBtdWNoIGhlcmUsIGJ1dCB3ZSBzdGlsbCBuZWVkIHRoZSBHSUwu ICAqLworICBjbGVhbnVwcyA9IGVuc3VyZV9weXRob25fZW52IChnZXRfY3Vy cmVudF9hcmNoICgpLCBjdXJyZW50X2xhbmd1YWdlKTsKKworICBuZXdfZGF0 YSA9IFhDTkVXIChzdHJ1Y3QgZ2RicHlfd29ya2VyX2RhdGEpOworICBuZXdf ZGF0YS0+d29ya2VyID0gd29ya2VyX2RhdGEtPndvcmtlcjsKKyAgbmV3X2Rh dGEtPnRoaXNfdHlwZSA9IHdvcmtlcl9kYXRhLT50aGlzX3R5cGU7CisgIFB5 X0lOQ1JFRiAobmV3X2RhdGEtPndvcmtlcik7CisgIFB5X0lOQ1JFRiAobmV3 X2RhdGEtPnRoaXNfdHlwZSk7CisKKyAgZG9fY2xlYW51cHMgKGNsZWFudXBz KTsKKworICByZXR1cm4gbmV3X2RhdGE7Cit9CisKKy8qIEludm9rZSB0aGUg Im1hdGNoIiBtZXRob2Qgb2YgdGhlIE1BVENIRVIgYW5kIHJldHVybiBhIG5l dyByZWZlcmVuY2UKKyAgIHRvIHRoZSByZXN1bHQuICBSZXR1cm5zIE5VTEwg b24gZXJyb3IuICAqLworCitzdGF0aWMgUHlPYmplY3QgKgoraW52b2tlX21h dGNoX21ldGhvZCAoUHlPYmplY3QgKm1hdGNoZXIsIFB5T2JqZWN0ICpweV9v YmpfdHlwZSwKKwkJICAgICBjb25zdCBjaGFyICp4bWV0aG9kX25hbWUpCit7 CisgIFB5T2JqZWN0ICpweV94bWV0aG9kX25hbWU7CisgIFB5T2JqZWN0ICpt YXRjaF9tZXRob2QsICplbmFibGVkX2ZpZWxkLCAqbWF0Y2hfcmVzdWx0Owor ICBzdHJ1Y3QgY2xlYW51cCAqY2xlYW51cHM7CisgIGludCBlbmFibGVkOwor CisgIGNsZWFudXBzID0gbWFrZV9jbGVhbnVwIChudWxsX2NsZWFudXAsIE5V TEwpOworCisgIGVuYWJsZWRfZmllbGQgPSBQeU9iamVjdF9HZXRBdHRyU3Ry aW5nIChtYXRjaGVyLCBlbmFibGVkX2ZpZWxkX25hbWUpOworICBpZiAoZW5h YmxlZF9maWVsZCA9PSBOVUxMKQorICAgIHsKKyAgICAgIGRvX2NsZWFudXBz IChjbGVhbnVwcyk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIG1h a2VfY2xlYW51cF9weV9kZWNyZWYgKGVuYWJsZWRfZmllbGQpOworCisgIGVu YWJsZWQgPSBQeU9iamVjdF9Jc1RydWUgKGVuYWJsZWRfZmllbGQpOworICBp ZiAoZW5hYmxlZCA9PSAtMSkKKyAgICB7CisgICAgICBkb19jbGVhbnVwcyAo Y2xlYW51cHMpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICBpZiAo ZW5hYmxlZCA9PSAwKQorICAgIHsKKyAgICAgIC8qIFJldHVybiAnTm9uZScg aWYgdGhlIG1hdGNoZXIgaXMgbm90IGVuYWJsZWQuICAqLworICAgICAgZG9f Y2xlYW51cHMgKGNsZWFudXBzKTsKKyAgICAgIFB5X1JFVFVSTl9OT05FOwor ICAgIH0KKworICBtYXRjaF9tZXRob2QgPSBQeU9iamVjdF9HZXRBdHRyU3Ry aW5nIChtYXRjaGVyLCBtYXRjaF9tZXRob2RfbmFtZSk7CisgIGlmIChtYXRj aF9tZXRob2QgPT0gTlVMTCkKKyAgICB7CisgICAgICBkb19jbGVhbnVwcyAo Y2xlYW51cHMpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICBtYWtl X2NsZWFudXBfcHlfZGVjcmVmIChtYXRjaF9tZXRob2QpOworCisgIHB5X3ht ZXRob2RfbmFtZSA9IFB5U3RyaW5nX0Zyb21TdHJpbmcgKHhtZXRob2RfbmFt ZSk7CisgIGlmIChweV94bWV0aG9kX25hbWUgPT0gTlVMTCkKKyAgICB7Cisg ICAgICBkb19jbGVhbnVwcyAoY2xlYW51cHMpOworICAgICAgcmV0dXJuIE5V TEw7CisgICAgfQorICBtYWtlX2NsZWFudXBfcHlfZGVjcmVmIChweV94bWV0 aG9kX25hbWUpOworCisgIG1hdGNoX3Jlc3VsdCA9IFB5T2JqZWN0X0NhbGxN ZXRob2RPYmpBcmdzIChtYXRjaGVyLAorCQkJCQkgICAgIHB5X21hdGNoX21l dGhvZF9uYW1lLAorCQkJCQkgICAgIHB5X29ial90eXBlLAorCQkJCQkgICAg IHB5X3htZXRob2RfbmFtZSwKKwkJCQkJICAgICBOVUxMKTsKKworICBkb19j bGVhbnVwcyAoY2xlYW51cHMpOworCisgIHJldHVybiBtYXRjaF9yZXN1bHQ7 Cit9CisKKy8qIEltcGxlbWVudGF0aW9uIG9mIGdldF9tYXRjaGluZ194bWV0 aG9kX3dvcmtlcnMgZm9yIFB5dGhvbi4gICovCisKK2VudW0gZXh0X2xhbmdf cmMKK2dkYnB5X2dldF9tYXRjaGluZ194bWV0aG9kX3dvcmtlcnMKKyAgKGNv bnN0IHN0cnVjdCBleHRlbnNpb25fbGFuZ3VhZ2VfZGVmbiAqZXh0bGFuZywK KyAgIHN0cnVjdCB0eXBlICpvYmpfdHlwZSwgY29uc3QgY2hhciAqbWV0aG9k X25hbWUsCisgICB4bWV0aG9kX3dvcmtlcl92ZWMgKipkbV92ZWMpCit7Cisg IHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwczsKKyAgc3RydWN0IG9iamZpbGUg Km9iamZpbGU7CisgIFZFQyAoeG1ldGhvZF93b3JrZXJfcHRyKSAqd29ya2Vy X3ZlYyA9IE5VTEw7CisgIFB5T2JqZWN0ICpweV90eXBlLCAqcHlfcHJvZ3Nw YWNlOworICBQeU9iamVjdCAqcHlfeG1ldGhvZF9tYXRjaGVyX2xpc3QgPSBO VUxMLCAqbGlzdF9pdGVyLCAqbWF0Y2hlcjsKKworICBnZGJfYXNzZXJ0IChv YmpfdHlwZSAhPSBOVUxMICYmIG1ldGhvZF9uYW1lICE9IE5VTEwpOworCisg IGNsZWFudXBzID0gZW5zdXJlX3B5dGhvbl9lbnYgKGdldF9jdXJyZW50X2Fy Y2ggKCksIGN1cnJlbnRfbGFuZ3VhZ2UpOworCisgIHB5X3R5cGUgPSB0eXBl X3RvX3R5cGVfb2JqZWN0IChvYmpfdHlwZSk7CisgIGlmIChweV90eXBlID09 IE5VTEwpCisgICAgeworICAgICAgZ2RicHlfcHJpbnRfc3RhY2sgKCk7Cisg ICAgICBkb19jbGVhbnVwcyAoY2xlYW51cHMpOworCisgICAgICByZXR1cm4g RVhUX0xBTkdfUkNfRVJST1I7CisgICAgfQorICBtYWtlX2NsZWFudXBfcHlf ZGVjcmVmIChweV90eXBlKTsKKworICAvKiBDcmVhdGUgYW4gZW1wdHkgbGlz dCBvZiBkZWJ1ZyBtZXRob2RzLiAgKi8KKyAgcHlfeG1ldGhvZF9tYXRjaGVy X2xpc3QgPSBQeUxpc3RfTmV3ICgwKTsKKyAgaWYgKHB5X3htZXRob2RfbWF0 Y2hlcl9saXN0ID09IE5VTEwpCisgICAgeworICAgICAgZ2RicHlfcHJpbnRf c3RhY2sgKCk7CisgICAgICBkb19jbGVhbnVwcyAoY2xlYW51cHMpOworCisg ICAgICByZXR1cm4gRVhUX0xBTkdfUkNfRVJST1I7CisgICAgfQorCisgIC8q IEdhdGhlciBkZWJ1ZyBtZXRob2QgbWF0Y2hlcnMgcmVnaXN0ZXJlZCB3aXRo IHRoZSBvYmplY3QgZmlsZXMuCisgICAgIFRoaXMgY291bGQgYmUgZG9uZSBk aWZmZXJlbnRseSBieSBpdGVyYXRpbmcgb3ZlciBlYWNoIG9iamZpbGUncyBt YXRjaGVyCisgICAgIGxpc3QgaW5kaXZpZHVhbGx5LCBidXQgdGhlcmUncyBu byBkYXRhIHlldCB0byBzaG93IGl0J3MgbmVlZGVkLiAgKi8KKyAgQUxMX09C SkZJTEVTIChvYmpmaWxlKQorICAgIHsKKyAgICAgIFB5T2JqZWN0ICpweV9v YmpmaWxlID0gb2JqZmlsZV90b19vYmpmaWxlX29iamVjdCAob2JqZmlsZSk7 CisgICAgICBQeU9iamVjdCAqb2JqZmlsZV9tYXRjaGVycywgKnRlbXAgPSBw eV94bWV0aG9kX21hdGNoZXJfbGlzdDsKKworICAgICAgaWYgKHB5X29iamZp bGUgPT0gTlVMTCkKKwl7CisJICBnZGJweV9wcmludF9zdGFjayAoKTsKKwkg IFB5X0RFQ1JFRiAocHlfeG1ldGhvZF9tYXRjaGVyX2xpc3QpOworCSAgZG9f Y2xlYW51cHMgKGNsZWFudXBzKTsKKworCSAgcmV0dXJuIEVYVF9MQU5HX1JD X0VSUk9SOworCX0KKworICAgICAgb2JqZmlsZV9tYXRjaGVycyA9IG9iamZw eV9nZXRfeG1ldGhvZHMgKHB5X29iamZpbGUsIE5VTEwpOworICAgICAgcHlf eG1ldGhvZF9tYXRjaGVyX2xpc3QgPSBQeVNlcXVlbmNlX0NvbmNhdCAodGVt cCwgb2JqZmlsZV9tYXRjaGVycyk7CisgICAgICBQeV9ERUNSRUYgKHRlbXAp OworICAgICAgUHlfREVDUkVGIChvYmpmaWxlX21hdGNoZXJzKTsKKyAgICAg IGlmIChweV94bWV0aG9kX21hdGNoZXJfbGlzdCA9PSBOVUxMKQorCXsKKwkg IGdkYnB5X3ByaW50X3N0YWNrICgpOworCSAgZG9fY2xlYW51cHMgKGNsZWFu dXBzKTsKKworCSAgcmV0dXJuIEVYVF9MQU5HX1JDX0VSUk9SOworCX0KKyAg ICB9CisKKyAgLyogR2F0aGVyIGRlYnVnIG1ldGhvZHMgbWF0Y2hlcnMgcmVn aXN0ZXJlZCB3aXRoIHRoZSBjdXJyZW50IHByb2dyYW0KKyAgICAgc3BhY2Uu ICAqLworICBweV9wcm9nc3BhY2UgPSBwc3BhY2VfdG9fcHNwYWNlX29iamVj dCAoY3VycmVudF9wcm9ncmFtX3NwYWNlKTsKKyAgaWYgKHB5X3Byb2dzcGFj ZSAhPSBOVUxMKQorICAgIHsKKyAgICAgIFB5T2JqZWN0ICp0ZW1wID0gcHlf eG1ldGhvZF9tYXRjaGVyX2xpc3Q7CisgICAgICBQeU9iamVjdCAqcHNwYWNl X21hdGNoZXJzID0gcHNweV9nZXRfeG1ldGhvZHMgKHB5X3Byb2dzcGFjZSwg TlVMTCk7CisKKyAgICAgIHB5X3htZXRob2RfbWF0Y2hlcl9saXN0ID0gUHlT ZXF1ZW5jZV9Db25jYXQgKHRlbXAsIHBzcGFjZV9tYXRjaGVycyk7CisgICAg ICBQeV9ERUNSRUYgKHRlbXApOworICAgICAgUHlfREVDUkVGIChwc3BhY2Vf bWF0Y2hlcnMpOworICAgICAgaWYgKHB5X3htZXRob2RfbWF0Y2hlcl9saXN0 ID09IE5VTEwpCisJeworCSAgZ2RicHlfcHJpbnRfc3RhY2sgKCk7CisJICBk b19jbGVhbnVwcyAoY2xlYW51cHMpOworCisJICByZXR1cm4gRVhUX0xBTkdf UkNfRVJST1I7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGdk YnB5X3ByaW50X3N0YWNrICgpOworICAgICAgUHlfREVDUkVGIChweV94bWV0 aG9kX21hdGNoZXJfbGlzdCk7CisgICAgICBkb19jbGVhbnVwcyAoY2xlYW51 cHMpOworCisgICAgICByZXR1cm4gRVhUX0xBTkdfUkNfRVJST1I7CisgICAg fQorCisgIC8qIEdhdGhlciBkZWJ1ZyBtZXRob2QgbWF0Y2hlcnMgcmVnaXN0 ZXJlZCBnbG9iYWxseS4gICovCisgIGlmIChnZGJfcHl0aG9uX21vZHVsZSAh PSBOVUxMCisgICAgICAmJiBQeU9iamVjdF9IYXNBdHRyU3RyaW5nIChnZGJf cHl0aG9uX21vZHVsZSwgbWF0Y2hlcnNfYXR0cl9zdHIpKQorICAgIHsKKyAg ICAgIFB5T2JqZWN0ICpnZGJfbWF0Y2hlcnM7CisgICAgICBQeU9iamVjdCAq dGVtcCA9IHB5X3htZXRob2RfbWF0Y2hlcl9saXN0OworCisgICAgICBnZGJf bWF0Y2hlcnMgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nIChnZGJfcHl0aG9u X21vZHVsZSwKKwkJCQkJICAgICBtYXRjaGVyc19hdHRyX3N0cik7CisgICAg ICBpZiAoZ2RiX21hdGNoZXJzICE9IE5VTEwpCisJeworCSAgcHlfeG1ldGhv ZF9tYXRjaGVyX2xpc3QgPSBQeVNlcXVlbmNlX0NvbmNhdCAodGVtcCwgZ2Ri X21hdGNoZXJzKTsKKwkgIFB5X0RFQ1JFRiAodGVtcCk7CisJICBQeV9ERUNS RUYgKGdkYl9tYXRjaGVycyk7CisJICBpZiAocHlfeG1ldGhvZF9tYXRjaGVy X2xpc3QgPT0gTlVMTCkKKwkgICAgeworCSAgICAgIGdkYnB5X3ByaW50X3N0 YWNrICgpOworCSAgICAgIGRvX2NsZWFudXBzIChjbGVhbnVwcyk7CisKKwkg ICAgICByZXR1cm4gRVhUX0xBTkdfUkNfRVJST1I7CisJICAgIH0KKwl9Cisg ICAgICBlbHNlCisJeworCSAgZ2RicHlfcHJpbnRfc3RhY2sgKCk7CisJICBQ eV9ERUNSRUYgKHB5X3htZXRob2RfbWF0Y2hlcl9saXN0KTsKKwkgIGRvX2Ns ZWFudXBzIChjbGVhbnVwcyk7CisKKwkgIHJldHVybiBFWFRfTEFOR19SQ19F UlJPUjsKKwl9CisgICAgfQorCisgIC8qIFNhZmUgdG8gbWFrZSBhIGNsZWFu dXAgZm9yIHB5X3htZXRob2RfbWF0Y2hlcl9saXN0IG5vdyBhcyBpdAorICAg ICB3aWxsIG5vdCBjaGFuZ2UgYW55IG1vcmUuICAqLworICBtYWtlX2NsZWFu dXBfcHlfZGVjcmVmIChweV94bWV0aG9kX21hdGNoZXJfbGlzdCk7CisKKyAg bGlzdF9pdGVyID0gUHlPYmplY3RfR2V0SXRlciAocHlfeG1ldGhvZF9tYXRj aGVyX2xpc3QpOworICBpZiAobGlzdF9pdGVyID09IE5VTEwpCisgICAgewor ICAgICAgZ2RicHlfcHJpbnRfc3RhY2sgKCk7CisgICAgICBkb19jbGVhbnVw cyAoY2xlYW51cHMpOworCisgICAgICByZXR1cm4gRVhUX0xBTkdfUkNfRVJS T1I7CisgICAgfQorICB3aGlsZSAoKG1hdGNoZXIgPSBQeUl0ZXJfTmV4dCAo bGlzdF9pdGVyKSkgIT0gTlVMTCkKKyAgICB7CisgICAgICBQeU9iamVjdCAq bWF0Y2hfcmVzdWx0ID0gaW52b2tlX21hdGNoX21ldGhvZCAobWF0Y2hlciwg cHlfdHlwZSwKKwkJCQkJCSAgICBtZXRob2RfbmFtZSk7CisKKyAgICAgIGlm IChtYXRjaF9yZXN1bHQgPT0gTlVMTCkKKwl7CisJICBnZGJweV9wcmludF9z dGFjayAoKTsKKwkgIFB5X0RFQ1JFRiAobWF0Y2hlcik7CisJICBkb19jbGVh bnVwcyAoY2xlYW51cHMpOworCisJICByZXR1cm4gRVhUX0xBTkdfUkNfRVJS T1I7CisJfQorICAgICAgaWYgKG1hdGNoX3Jlc3VsdCA9PSBQeV9Ob25lKQor CTsgLyogVGhpcyBtZWFucyB0aGVyZSB3YXMgbm8gbWF0Y2guICAqLworICAg ICAgZWxzZSBpZiAoUHlTZXF1ZW5jZV9DaGVjayAobWF0Y2hfcmVzdWx0KSkK Kwl7CisJICBQeU9iamVjdCAqaXRlciA9IFB5T2JqZWN0X0dldEl0ZXIgKG1h dGNoX3Jlc3VsdCk7CisJICBQeU9iamVjdCAqcHlfd29ya2VyOworCisJICBp ZiAoaXRlciA9PSBOVUxMKQorCSAgICB7CisJICAgICAgZ2RicHlfcHJpbnRf c3RhY2sgKCk7CisJICAgICAgUHlfREVDUkVGIChtYXRjaGVyKTsKKwkgICAg ICBQeV9ERUNSRUYgKG1hdGNoX3Jlc3VsdCk7CisJICAgICAgZG9fY2xlYW51 cHMgKGNsZWFudXBzKTsKKworCSAgICAgIHJldHVybiBFWFRfTEFOR19SQ19F UlJPUjsKKwkgICAgfQorCSAgd2hpbGUgKChweV93b3JrZXIgPSBQeUl0ZXJf TmV4dCAoaXRlcikpICE9IE5VTEwpCisJICAgIHsKKwkgICAgICBzdHJ1Y3Qg eG1ldGhvZF93b3JrZXIgKndvcmtlcjsKKworCSAgICAgIHdvcmtlciA9IG5l d19weXRob25feG1ldGhvZF93b3JrZXIgKHB5X3dvcmtlciwgcHlfdHlwZSk7 CisJICAgICAgVkVDX3NhZmVfcHVzaCAoeG1ldGhvZF93b3JrZXJfcHRyLCB3 b3JrZXJfdmVjLCB3b3JrZXIpOworCSAgICAgIFB5X0RFQ1JFRiAocHlfd29y a2VyKTsKKwkgICAgfQorCSAgUHlfREVDUkVGIChpdGVyKTsKKwkgIC8qIFJl cG9ydCBhbnkgZXJyb3IgdGhhdCBjb3VsZCBoYXZlIG9jY3VycmVkIHdoaWxl IGl0ZXJhdGluZy4gICovCisJICBpZiAoUHlFcnJfT2NjdXJyZWQgKCkpCisJ ICAgIHsKKwkgICAgICBnZGJweV9wcmludF9zdGFjayAoKTsKKwkgICAgICBQ eV9ERUNSRUYgKG1hdGNoZXIpOworCSAgICAgIFB5X0RFQ1JFRiAobWF0Y2hf cmVzdWx0KTsKKwkgICAgICBkb19jbGVhbnVwcyAoY2xlYW51cHMpOworCisJ ICAgICAgcmV0dXJuIEVYVF9MQU5HX1JDX0VSUk9SOworCSAgICB9CisJfQor ICAgICAgZWxzZQorCXsKKwkgIHN0cnVjdCB4bWV0aG9kX3dvcmtlciAqd29y a2VyOworCisJICB3b3JrZXIgPSBuZXdfcHl0aG9uX3htZXRob2Rfd29ya2Vy IChtYXRjaF9yZXN1bHQsIHB5X3R5cGUpOworCSAgVkVDX3NhZmVfcHVzaCAo eG1ldGhvZF93b3JrZXJfcHRyLCB3b3JrZXJfdmVjLCB3b3JrZXIpOworCX0K KworICAgICAgUHlfREVDUkVGIChtYXRjaF9yZXN1bHQpOworICAgICAgUHlf REVDUkVGIChtYXRjaGVyKTsKKyAgICB9CisgIFB5X0RFQ1JFRiAobGlzdF9p dGVyKTsKKyAgLyogUmVwb3J0IGFueSBlcnJvciB0aGF0IGNvdWxkIGhhdmUg b2NjdXJyZWQgd2hpbGUgaXRlcmF0aW5nLiAgKi8KKyAgaWYgKFB5RXJyX09j Y3VycmVkICgpKQorICAgIHsKKyAgICAgIGdkYnB5X3ByaW50X3N0YWNrICgp OworICAgICAgZG9fY2xlYW51cHMgKGNsZWFudXBzKTsKKworICAgICAgcmV0 dXJuIEVYVF9MQU5HX1JDX0VSUk9SOworICAgIH0KKworICBkb19jbGVhbnVw cyAoY2xlYW51cHMpOworICAqZG1fdmVjID0gd29ya2VyX3ZlYzsKKworICBy ZXR1cm4gRVhUX0xBTkdfUkNfT0s7Cit9CisKKy8qIEltcGxlbWVudGF0aW9u IG9mIGdldF94bWV0aG9kX2FyZ190eXBlcyBmb3IgUHl0aG9uLiAgKi8KKwor ZW51bSBleHRfbGFuZ19yYworZ2RicHlfZ2V0X3htZXRob2RfYXJnX3R5cGVz IChjb25zdCBzdHJ1Y3QgZXh0ZW5zaW9uX2xhbmd1YWdlX2RlZm4gKmV4dGxh bmcsCisJCQkgICAgIHN0cnVjdCB4bWV0aG9kX3dvcmtlciAqd29ya2VyLAor CQkJICAgICBpbnQgKm5hcmdzLCBzdHJ1Y3QgdHlwZSAqKiphcmdfdHlwZXMp Cit7CisgIHN0cnVjdCBnZGJweV93b3JrZXJfZGF0YSAqd29ya2VyX2RhdGEg PSB3b3JrZXItPmRhdGE7CisgIFB5T2JqZWN0ICpweV93b3JrZXIgPSB3b3Jr ZXJfZGF0YS0+d29ya2VyOworICBQeU9iamVjdCAqZ2V0X2FyZ190eXBlc19t ZXRob2Q7CisgIFB5T2JqZWN0ICpweV9hcmd0eXBlX2xpc3QsICpsaXN0X2l0 ZXIgPSBOVUxMLCAqaXRlbTsKKyAgc3RydWN0IGNsZWFudXAgKmNsZWFudXBz OworICBzdHJ1Y3QgdHlwZSAqKnR5cGVfYXJyYXksICpvYmpfdHlwZTsKKyAg aW50IGkgPSAxLCBhcmdfY291bnQ7CisKKyAgLyogU2V0IG5hcmdzIHRvIC0x IHNvIHRoYXQgYW55IHByZW1hdHVyZSByZXR1cm4gZnJvbSB0aGlzIGZ1bmN0 aW9uIHJldHVybnMKKyAgICAgYW4gaW52YWxpZC91bnVzYWJsZSBudW1iZXIg b2YgYXJnIHR5cGVzLiAgKi8KKyAgKm5hcmdzID0gLTE7CisKKyAgY2xlYW51 cHMgPSBlbnN1cmVfcHl0aG9uX2VudiAoZ2V0X2N1cnJlbnRfYXJjaCAoKSwg Y3VycmVudF9sYW5ndWFnZSk7CisKKyAgZ2V0X2FyZ190eXBlc19tZXRob2Qg PSAgUHlPYmplY3RfR2V0QXR0clN0cmluZyAocHlfd29ya2VyLAorCQkJCQkJ ICBnZXRfYXJnX3R5cGVzX21ldGhvZF9uYW1lKTsKKyAgaWYgKGdldF9hcmdf dHlwZXNfbWV0aG9kID09IE5VTEwpCisgICAgeworICAgICAgZ2RicHlfcHJp bnRfc3RhY2sgKCk7CisgICAgICBkb19jbGVhbnVwcyAoY2xlYW51cHMpOwor CisgICAgICByZXR1cm4gRVhUX0xBTkdfUkNfRVJST1I7CisgICAgfQorICBt YWtlX2NsZWFudXBfcHlfZGVjcmVmIChnZXRfYXJnX3R5cGVzX21ldGhvZCk7 CisKKyAgcHlfYXJndHlwZV9saXN0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9i akFyZ3MgKHB5X3dvcmtlciwKKwkJCQkJCXB5X2dldF9hcmdfdHlwZXNfbWV0 aG9kX25hbWUsCisJCQkJCQlOVUxMKTsKKyAgaWYgKHB5X2FyZ3R5cGVfbGlz dCA9PSBOVUxMKQorICAgIHsKKyAgICAgIGdkYnB5X3ByaW50X3N0YWNrICgp OworICAgICAgZG9fY2xlYW51cHMgKGNsZWFudXBzKTsKKworICAgICAgcmV0 dXJuIEVYVF9MQU5HX1JDX0VSUk9SOworICAgIH0KKyAgbWFrZV9jbGVhbnVw X3B5X2RlY3JlZiAocHlfYXJndHlwZV9saXN0KTsKKyAgaWYgKHB5X2FyZ3R5 cGVfbGlzdCA9PSBQeV9Ob25lKQorICAgIGFyZ19jb3VudCA9IDA7CisgIGVs c2UgaWYgKFB5U2VxdWVuY2VfQ2hlY2sgKHB5X2FyZ3R5cGVfbGlzdCkpCisg ICAgeworICAgICAgYXJnX2NvdW50ID0gUHlTZXF1ZW5jZV9TaXplIChweV9h cmd0eXBlX2xpc3QpOworICAgICAgaWYgKGFyZ19jb3VudCA9PSAtMSkKKwl7 CisJICBnZGJweV9wcmludF9zdGFjayAoKTsKKwkgIGRvX2NsZWFudXBzIChj bGVhbnVwcyk7CisKKwkgIHJldHVybiBFWFRfTEFOR19SQ19FUlJPUjsKKwl9 CisKKyAgICAgIGxpc3RfaXRlciA9IFB5T2JqZWN0X0dldEl0ZXIgKHB5X2Fy Z3R5cGVfbGlzdCk7CisgICAgICBpZiAobGlzdF9pdGVyID09IE5VTEwpCisJ eworCSAgZ2RicHlfcHJpbnRfc3RhY2sgKCk7CisJICBkb19jbGVhbnVwcyAo Y2xlYW51cHMpOworCisJICByZXR1cm4gRVhUX0xBTkdfUkNfRVJST1I7CisJ fQorICAgICAgbWFrZV9jbGVhbnVwX3B5X2RlY3JlZiAobGlzdF9pdGVyKTsK KyAgICB9CisgIGVsc2UKKyAgICBhcmdfY291bnQgPSAxOworCisgIC8qIElu Y2x1ZGUgdGhlICd0aGlzJyBhcmd1bWVudCBpbiB0aGUgc2l6ZS4gICovCisg IHR5cGVfYXJyYXkgPSBYQ05FV1ZFQyAoc3RydWN0IHR5cGUgKiwgYXJnX2Nv dW50ICsgMSk7CisgIGkgPSAxOworICBpZiAobGlzdF9pdGVyICE9IE5VTEwp CisgICAgeworICAgICAgd2hpbGUgKChpdGVtID0gUHlJdGVyX05leHQgKGxp c3RfaXRlcikpICE9IE5VTEwpCisJeworCSAgc3RydWN0IHR5cGUgKmFyZ190 eXBlID0gdHlwZV9vYmplY3RfdG9fdHlwZSAoaXRlbSk7CisKKwkgIFB5X0RF Q1JFRiAoaXRlbSk7CisJICBpZiAoYXJnX3R5cGUgPT0gTlVMTCkKKwkgICAg eworCSAgICAgIFB5RXJyX1NldFN0cmluZyAoUHlFeGNfVHlwZUVycm9yLAor CQkJICAgICAgIF8oIkFyZyB0eXBlIHJldHVybmVkIGJ5IHRoZSBnZXRfYXJn X3R5cGVzICIKKwkJCQkgIm1ldGhvZCBvZiBhIGRlYnVnIG1ldGhvZCB3b3Jr ZXIgb2JqZWN0IGlzICIKKwkJCQkgIm5vdCBhIGdkYi5UeXBlIG9iamVjdC4i KSk7CisJICAgICAgYnJlYWs7CisJICAgIH0KKworCSAgdHlwZV9hcnJheVtp XSA9IGFyZ190eXBlOworCSAgaSsrOworCX0KKyAgICB9CisgIGVsc2UgaWYg KGFyZ19jb3VudCA9PSAxKQorICAgIHsKKyAgICAgIC8qIHB5X2FyZ3R5cGVf bGlzdCBpcyBub3QgYWN0dWFsbHkgYSBsaXN0IGJ1dCBhIHNpbmdsZSBnZGIu VHlwZQorCSBvYmplY3QuICAqLworICAgICAgc3RydWN0IHR5cGUgKmFyZ190 eXBlID0gdHlwZV9vYmplY3RfdG9fdHlwZSAocHlfYXJndHlwZV9saXN0KTsK KworICAgICAgaWYgKGFyZ190eXBlID09IE5VTEwpCisJeworCSAgUHlFcnJf U2V0U3RyaW5nIChQeUV4Y19UeXBlRXJyb3IsCisJCQkgICBfKCJBcmcgdHlw ZSByZXR1cm5lZCBieSB0aGUgZ2V0X2FyZ190eXBlcyBtZXRob2QgIgorCQkJ ICAgICAib2YgYW4geG1ldGhvZCB3b3JrZXIgb2JqZWN0IGlzIG5vdCBhIGdk Yi5UeXBlICIKKwkJCSAgICAgIm9iamVjdC4iKSk7CisJfQorICAgICAgZWxz ZQorCXsKKwkgIHR5cGVfYXJyYXlbaV0gPSBhcmdfdHlwZTsKKwkgIGkrKzsK Kwl9CisgICAgfQorICBpZiAoUHlFcnJfT2NjdXJyZWQgKCkpCisgICAgewor ICAgICAgZ2RicHlfcHJpbnRfc3RhY2sgKCk7CisgICAgICBkb19jbGVhbnVw cyAoY2xlYW51cHMpOworICAgICAgeGZyZWUgKHR5cGVfYXJyYXkpOworCisg ICAgICByZXR1cm4gRVhUX0xBTkdfUkNfRVJST1I7CisgICAgfQorCisgIC8q IEFkZCB0aGUgdHlwZSBvZiAndGhpcycgYXMgdGhlIGZpcnN0IGFyZ3VtZW50 LiAgVGhlICd0aGlzJyBwb2ludGVyIHNob3VsZAorICAgICBiZSBhICdjb25z dCcgdmFsdWUuICBIZW5jZSwgY3JlYXRlIGEgJ2NvbnN0JyB2YXJpYW50IG9m IHRoZSAndGhpcycgcG9pbnRlcgorICAgICB0eXBlLiAgKi8KKyAgb2JqX3R5 cGUgPSB0eXBlX29iamVjdF90b190eXBlICh3b3JrZXJfZGF0YS0+dGhpc190 eXBlKTsKKyAgdHlwZV9hcnJheVswXSA9IG1ha2VfY3ZfdHlwZSAoMSwgMCwg bG9va3VwX3BvaW50ZXJfdHlwZSAob2JqX3R5cGUpLCBOVUxMKTsKKyAgKm5h cmdzID0gaTsKKyAgKmFyZ190eXBlcyA9IHR5cGVfYXJyYXk7CisgIGRvX2Ns ZWFudXBzIChjbGVhbnVwcyk7CisKKyAgcmV0dXJuIEVYVF9MQU5HX1JDX09L OworfQorCisvKiBJbXBsZW1lbnRhdGlvbiBvZiBpbnZva2VfeG1ldGhvZCBm b3IgUHl0aG9uLiAgKi8KKworc3RydWN0IHZhbHVlICoKK2dkYnB5X2ludm9r ZV94bWV0aG9kIChjb25zdCBzdHJ1Y3QgZXh0ZW5zaW9uX2xhbmd1YWdlX2Rl Zm4gKmV4dGxhbmcsCisJCSAgICAgIHN0cnVjdCB4bWV0aG9kX3dvcmtlciAq d29ya2VyLAorCQkgICAgICBzdHJ1Y3QgdmFsdWUgKm9iaiwgc3RydWN0IHZh bHVlICoqYXJncywgaW50IG5hcmdzKQoreworICBpbnQgaTsKKyAgc3RydWN0 IGNsZWFudXAgKmNsZWFudXBzOworICBQeU9iamVjdCAqcHlfdmFsdWVfb2Jq LCAqcHlfYXJnX3R1cGxlLCAqcHlfcmVzdWx0OworICBzdHJ1Y3QgdHlwZSAq b2JqX3R5cGUsICp0aGlzX3R5cGU7CisgIHN0cnVjdCB2YWx1ZSAqcmVzID0g TlVMTDsKKyAgc3RydWN0IGdkYnB5X3dvcmtlcl9kYXRhICp3b3JrZXJfZGF0 YSA9IHdvcmtlci0+ZGF0YTsKKyAgUHlPYmplY3QgKnhtZXRob2Rfd29ya2Vy ID0gd29ya2VyX2RhdGEtPndvcmtlcjsKKworICBjbGVhbnVwcyA9IGVuc3Vy ZV9weXRob25fZW52IChnZXRfY3VycmVudF9hcmNoICgpLCBjdXJyZW50X2xh bmd1YWdlKTsKKworICBvYmpfdHlwZSA9IGNoZWNrX3R5cGVkZWYgKHZhbHVl X3R5cGUgKG9iaikpOworICB0aGlzX3R5cGUgPSBjaGVja190eXBlZGVmICh0 eXBlX29iamVjdF90b190eXBlICh3b3JrZXJfZGF0YS0+dGhpc190eXBlKSk7 CisgIGlmIChUWVBFX0NPREUgKG9ial90eXBlKSA9PSBUWVBFX0NPREVfUFRS KQorICAgIHsKKyAgICAgIHN0cnVjdCB0eXBlICp0aGlzX3B0ciA9IGxvb2t1 cF9wb2ludGVyX3R5cGUgKHRoaXNfdHlwZSk7CisKKyAgICAgIGlmICghdHlw ZXNfZXF1YWwgKG9ial90eXBlLCB0aGlzX3B0cikpCisJb2JqID0gdmFsdWVf Y2FzdCAodGhpc19wdHIsIG9iaik7CisgICAgfQorICBlbHNlIGlmIChUWVBF X0NPREUgKG9ial90eXBlKSA9PSBUWVBFX0NPREVfUkVGKQorICAgIHsKKyAg ICAgIHN0cnVjdCB0eXBlICp0aGlzX3JlZiA9IGxvb2t1cF9yZWZlcmVuY2Vf dHlwZSAodGhpc190eXBlKTsKKworICAgICAgaWYgKCF0eXBlc19lcXVhbCAo b2JqX3R5cGUsIHRoaXNfcmVmKSkKKwlvYmogPSB2YWx1ZV9jYXN0ICh0aGlz X3JlZiwgb2JqKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAo IXR5cGVzX2VxdWFsIChvYmpfdHlwZSwgdGhpc190eXBlKSkKKwlvYmogPSB2 YWx1ZV9jYXN0ICh0aGlzX3R5cGUsIG9iaik7CisgICAgfQorICBweV92YWx1 ZV9vYmogPSB2YWx1ZV90b192YWx1ZV9vYmplY3QgKG9iaik7CisgIGlmIChw eV92YWx1ZV9vYmogPT0gTlVMTCkKKyAgICB7CisgICAgICBnZGJweV9wcmlu dF9zdGFjayAoKTsKKyAgICAgIGVycm9yIChfKCJFcnJvciB3aGlsZSBleGVj dXRpbmcgUHl0aG9uIGNvZGUuIikpOworICAgIH0KKyAgbWFrZV9jbGVhbnVw X3B5X2RlY3JlZiAocHlfdmFsdWVfb2JqKTsKKworICBweV9hcmdfdHVwbGUg PSBQeVR1cGxlX05ldyAobmFyZ3MgKyAxKTsKKyAgaWYgKHB5X2FyZ190dXBs ZSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGdkYnB5X3ByaW50X3N0YWNrICgp OworICAgICAgZXJyb3IgKF8oIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBQeXRo b24gY29kZS4iKSk7CisgICAgfQorICBtYWtlX2NsZWFudXBfcHlfZGVjcmVm IChweV9hcmdfdHVwbGUpOworCisgIC8qIFB5VHVwbGVfU0VUX0lURU0gc3Rl YWxzIHRoZSByZWZlcmVuY2Ugb2YgdGhlIGVsZW1lbnQuICBIZW5jZSBJTkNS RUYgdGhlCisgICAgIHJlZmVyZW5jZSB0byB0aGUgJ3RoaXMnIG9iamVjdCBh cyB3ZSBoYXZlIGEgY2xlYW51cCB0byBERUNSRUYgaXQuICAqLworICBQeV9J TkNSRUYgKHB5X3ZhbHVlX29iaik7CisgIFB5VHVwbGVfU0VUX0lURU0gKHB5 X2FyZ190dXBsZSwgMCwgcHlfdmFsdWVfb2JqKTsKKworICBmb3IgKGkgPSAw OyBpIDwgbmFyZ3M7IGkrKykKKyAgICB7CisgICAgICBQeU9iamVjdCAqcHlf dmFsdWVfYXJnID0gdmFsdWVfdG9fdmFsdWVfb2JqZWN0IChhcmdzW2ldKTsK KworICAgICAgaWYgKHB5X3ZhbHVlX2FyZyA9PSBOVUxMKQorCXsKKwkgIGdk YnB5X3ByaW50X3N0YWNrICgpOworCSAgZXJyb3IgKF8oIkVycm9yIHdoaWxl IGV4ZWN1dGluZyBQeXRob24gY29kZS4iKSk7CisJfQorCisgICAgICBQeVR1 cGxlX1NFVF9JVEVNIChweV9hcmdfdHVwbGUsIGkgKyAxLCBweV92YWx1ZV9h cmcpOworICAgIH0KKworICBweV9yZXN1bHQgPSBQeU9iamVjdF9DYWxsT2Jq ZWN0ICh4bWV0aG9kX3dvcmtlciwgcHlfYXJnX3R1cGxlKTsKKyAgaWYgKHB5 X3Jlc3VsdCA9PSBOVUxMKQorICAgIHsKKyAgICAgIGdkYnB5X3ByaW50X3N0 YWNrICgpOworICAgICAgZXJyb3IgKF8oIkVycm9yIHdoaWxlIGV4ZWN1dGlu ZyBQeXRob24gY29kZS4iKSk7CisgICAgfQorICBtYWtlX2NsZWFudXBfcHlf ZGVjcmVmIChweV9yZXN1bHQpOworCisgIGlmIChweV9yZXN1bHQgIT0gUHlf Tm9uZSkKKyAgICB7CisgICAgICByZXMgPSBjb252ZXJ0X3ZhbHVlX2Zyb21f cHl0aG9uIChweV9yZXN1bHQpOworICAgICAgaWYgKHJlcyA9PSBOVUxMKQor CXsKKwkgIGdkYnB5X3ByaW50X3N0YWNrICgpOworCSAgZXJyb3IgKF8oIkVy cm9yIHdoaWxlIGV4ZWN1dGluZyBQeXRob24gY29kZS4iKSk7CisJfQorICAg IH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHJlcyA9IGFsbG9jYXRlX3ZhbHVl IChsb29rdXBfdHlwZW5hbWUgKHB5dGhvbl9sYW5ndWFnZSwgcHl0aG9uX2dk YmFyY2gsCisJCQkJCSAgICAgInZvaWQiLCBOVUxMLCAwKSk7CisgICAgfQor CisgIGRvX2NsZWFudXBzIChjbGVhbnVwcyk7CisKKyAgcmV0dXJuIHJlczsK K30KKworLyogQ3JlYXRlcyBhIG5ldyBQeXRob24geG1ldGhvZF93b3JrZXIg b2JqZWN0LgorICAgVGhlIG5ldyBvYmplY3QgaGFzIGRhdGEgb2YgdHlwZSAn c3RydWN0IGdkYnB5X3dvcmtlcl9kYXRhJyBjb21wb3NlZAorICAgd2l0aCB0 aGUgY29tcG9uZW50cyBQWV9XT1JLRVIgYW5kIFRISVNfVFlQRS4gICovCisK K3N0YXRpYyBzdHJ1Y3QgeG1ldGhvZF93b3JrZXIgKgorbmV3X3B5dGhvbl94 bWV0aG9kX3dvcmtlciAoUHlPYmplY3QgKnB5X3dvcmtlciwgUHlPYmplY3Qg KnRoaXNfdHlwZSkKK3sKKyAgc3RydWN0IGdkYnB5X3dvcmtlcl9kYXRhICpk YXRhOworCisgIGdkYl9hc3NlcnQgKHB5X3dvcmtlciAhPSBOVUxMICYmIHRo aXNfdHlwZSAhPSBOVUxMKTsKKworICBkYXRhID0gWENORVcgKHN0cnVjdCBn ZGJweV93b3JrZXJfZGF0YSk7CisgIGRhdGEtPndvcmtlciA9IHB5X3dvcmtl cjsKKyAgZGF0YS0+dGhpc190eXBlID0gdGhpc190eXBlOworICBQeV9JTkNS RUYgKHB5X3dvcmtlcik7CisgIFB5X0lOQ1JFRiAodGhpc190eXBlKTsKKwor ICByZXR1cm4gbmV3X3htZXRob2Rfd29ya2VyICgmZXh0ZW5zaW9uX2xhbmd1 YWdlX3B5dGhvbiwgZGF0YSk7Cit9CisKK2ludAorZ2RicHlfaW5pdGlhbGl6 ZV94bWV0aG9kcyAodm9pZCkKK3sKKyAgcHlfbWF0Y2hfbWV0aG9kX25hbWUg PSBQeVN0cmluZ19Gcm9tU3RyaW5nIChtYXRjaF9tZXRob2RfbmFtZSk7Cisg IGlmIChweV9tYXRjaF9tZXRob2RfbmFtZSA9PSBOVUxMKQorICAgIHJldHVy biAtMTsKKworICBweV9pbnZva2VfbWV0aG9kX25hbWUgPSBQeVN0cmluZ19G cm9tU3RyaW5nIChpbnZva2VfbWV0aG9kX25hbWUpOworICBpZiAocHlfaW52 b2tlX21ldGhvZF9uYW1lID09IE5VTEwpCisgICAgcmV0dXJuIC0xOworCisg IHB5X2dldF9hcmdfdHlwZXNfbWV0aG9kX25hbWUKKyAgICA9IFB5U3RyaW5n X0Zyb21TdHJpbmcgKGdldF9hcmdfdHlwZXNfbWV0aG9kX25hbWUpOworICBp ZiAocHlfZ2V0X2FyZ190eXBlc19tZXRob2RfbmFtZSA9PSBOVUxMKQorICAg IHJldHVybiAtMTsKKworICByZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL2dk Yi9weXRob24vcHl0aG9uLWludGVybmFsLmggYi9nZGIvcHl0aG9uL3B5dGhv bi1pbnRlcm5hbC5oCmluZGV4IDA3NjUwZjcuLjljMDY2MjEgMTAwNjQ0Ci0t LSBhL2dkYi9weXRob24vcHl0aG9uLWludGVybmFsLmgKKysrIGIvZ2RiL3B5 dGhvbi9weXRob24taW50ZXJuYWwuaApAQCAtMzA3LDYgKzMwNywyNCBAQCBl eHRlcm4gZW51bSBleHRfbGFuZ19icF9zdG9wIGdkYnB5X2JyZWFrcG9pbnRf Y29uZF9zYXlzX3N0b3AKICAgKGNvbnN0IHN0cnVjdCBleHRlbnNpb25fbGFu Z3VhZ2VfZGVmbiAqLCBzdHJ1Y3QgYnJlYWtwb2ludCAqKTsKIGV4dGVybiBp bnQgZ2RicHlfYnJlYWtwb2ludF9oYXNfY29uZCAoY29uc3Qgc3RydWN0IGV4 dGVuc2lvbl9sYW5ndWFnZV9kZWZuICosCiAJCQkJICAgICAgc3RydWN0IGJy ZWFrcG9pbnQgKmIpOworCitleHRlcm4gdm9pZCAqZ2RicHlfY2xvbmVfeG1l dGhvZF93b3JrZXJfZGF0YQorICAoY29uc3Qgc3RydWN0IGV4dGVuc2lvbl9s YW5ndWFnZV9kZWZuICpleHRsYW5nLCB2b2lkICpkYXRhKTsKK2V4dGVybiB2 b2lkIGdkYnB5X2ZyZWVfeG1ldGhvZF93b3JrZXJfZGF0YQorICAoY29uc3Qg c3RydWN0IGV4dGVuc2lvbl9sYW5ndWFnZV9kZWZuICpleHRsYW5nLCB2b2lk ICpkYXRhKTsKK2V4dGVybiBlbnVtIGV4dF9sYW5nX3JjIGdkYnB5X2dldF9t YXRjaGluZ194bWV0aG9kX3dvcmtlcnMKKyAgKGNvbnN0IHN0cnVjdCBleHRl bnNpb25fbGFuZ3VhZ2VfZGVmbiAqZXh0bGFuZywKKyAgIHN0cnVjdCB0eXBl ICpvYmpfdHlwZSwgY29uc3QgY2hhciAqbWV0aG9kX25hbWUsCisgICB4bWV0 aG9kX3dvcmtlcl92ZWMgKipkbV92ZWMpOworZXh0ZXJuIGVudW0gZXh0X2xh bmdfcmMgZ2RicHlfZ2V0X3htZXRob2RfYXJnX3R5cGVzCisgIChjb25zdCBz dHJ1Y3QgZXh0ZW5zaW9uX2xhbmd1YWdlX2RlZm4gKmV4dGxhbmcsCisgICBz dHJ1Y3QgeG1ldGhvZF93b3JrZXIgKndvcmtlciwKKyAgIGludCAqbmFyZ3Ms CisgICBzdHJ1Y3QgdHlwZSAqKiphcmdfdHlwZXMpOworZXh0ZXJuIHN0cnVj dCB2YWx1ZSAqZ2RicHlfaW52b2tlX3htZXRob2QKKyAgKGNvbnN0IHN0cnVj dCBleHRlbnNpb25fbGFuZ3VhZ2VfZGVmbiAqZXh0bGFuZywKKyAgIHN0cnVj dCB4bWV0aG9kX3dvcmtlciAqd29ya2VyLAorICAgc3RydWN0IHZhbHVlICpv YmosIHN0cnVjdCB2YWx1ZSAqKmFyZ3MsIGludCBuYXJncyk7CiAMCiBQeU9i amVjdCAqZ2RicHlfaGlzdG9yeSAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0 ICphcmdzKTsKIFB5T2JqZWN0ICpnZGJweV9icmVha3BvaW50cyAoUHlPYmpl Y3QgKiwgUHlPYmplY3QgKik7CkBAIC0zNDUsMTEgKzM2MywxMyBAQCBQeU9i amVjdCAqcHNwYWNlX3RvX3BzcGFjZV9vYmplY3QgKHN0cnVjdCBwcm9ncmFt X3NwYWNlICopCiAgICAgQ1BZQ0hFQ0tFUl9SRVRVUk5TX0JPUlJPV0VEX1JF RjsKIFB5T2JqZWN0ICpwc3B5X2dldF9wcmludGVycyAoUHlPYmplY3QgKiwg dm9pZCAqKTsKIFB5T2JqZWN0ICpwc3B5X2dldF9mcmFtZV9maWx0ZXJzIChQ eU9iamVjdCAqLCB2b2lkICopOworUHlPYmplY3QgKnBzcHlfZ2V0X3htZXRo b2RzIChQeU9iamVjdCAqLCB2b2lkICopOwogCiBQeU9iamVjdCAqb2JqZmls ZV90b19vYmpmaWxlX29iamVjdCAoc3RydWN0IG9iamZpbGUgKikKICAgICBD UFlDSEVDS0VSX1JFVFVSTlNfQk9SUk9XRURfUkVGOwogUHlPYmplY3QgKm9i amZweV9nZXRfcHJpbnRlcnMgKFB5T2JqZWN0ICosIHZvaWQgKik7CiBQeU9i amVjdCAqb2JqZnB5X2dldF9mcmFtZV9maWx0ZXJzIChQeU9iamVjdCAqLCB2 b2lkICopOworUHlPYmplY3QgKm9iamZweV9nZXRfeG1ldGhvZHMgKFB5T2Jq ZWN0ICosIHZvaWQgKik7CiAKIFB5T2JqZWN0ICpnZGJhcmNoX3RvX2FyY2hf b2JqZWN0IChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCk7CiAKQEAgLTQzMCw2 ICs0NTAsOCBAQCBpbnQgZ2RicHlfaW5pdGlhbGl6ZV9uZXdfb2JqZmlsZV9l dmVudCAodm9pZCkKICAgQ1BZQ0hFQ0tFUl9ORUdBVElWRV9SRVNVTFRfU0VU U19FWENFUFRJT047CiBpbnQgZ2RicHlfaW5pdGlhbGl6ZV9hcmNoICh2b2lk KQogICBDUFlDSEVDS0VSX05FR0FUSVZFX1JFU1VMVF9TRVRTX0VYQ0VQVElP TjsKK2ludCBnZGJweV9pbml0aWFsaXplX3htZXRob2RzICh2b2lkKQorICBD UFlDSEVDS0VSX05FR0FUSVZFX1JFU1VMVF9TRVRTX0VYQ0VQVElPTjsKIAog c3RydWN0IGNsZWFudXAgKm1ha2VfY2xlYW51cF9weV9kZWNyZWYgKFB5T2Jq ZWN0ICpweSk7CiBzdHJ1Y3QgY2xlYW51cCAqbWFrZV9jbGVhbnVwX3B5X3hk ZWNyZWYgKFB5T2JqZWN0ICpweSk7CmRpZmYgLS1naXQgYS9nZGIvcHl0aG9u L3B5dGhvbi5jIGIvZ2RiL3B5dGhvbi9weXRob24uYwppbmRleCBjYmZhNzNh Li4zNjlhMjQ5IDEwMDY0NAotLS0gYS9nZGIvcHl0aG9uL3B5dGhvbi5jCisr KyBiL2dkYi9weXRob24vcHl0aG9uLmMKQEAgLTE4Niw3ICsxODYsMTMgQEAg c3RhdGljIGNvbnN0IHN0cnVjdCBleHRlbnNpb25fbGFuZ3VhZ2Vfb3BzIHB5 dGhvbl9leHRlbnNpb25fb3BzID0KICAgZ2RicHlfc2V0X3F1aXRfZmxhZywK ICAgZ2RicHlfY2hlY2tfcXVpdF9mbGFnLAogCi0gIGdkYnB5X2JlZm9yZV9w cm9tcHRfaG9vaworICBnZGJweV9iZWZvcmVfcHJvbXB0X2hvb2ssCisKKyAg Z2RicHlfY2xvbmVfeG1ldGhvZF93b3JrZXJfZGF0YSwKKyAgZ2RicHlfZnJl ZV94bWV0aG9kX3dvcmtlcl9kYXRhLAorICBnZGJweV9nZXRfbWF0Y2hpbmdf eG1ldGhvZF93b3JrZXJzLAorICBnZGJweV9nZXRfeG1ldGhvZF9hcmdfdHlw ZXMsCisgIGdkYnB5X2ludm9rZV94bWV0aG9kCiB9OwogCiAvKiBBcmNoaXRl Y3R1cmUgYW5kIGxhbmd1YWdlIHRvIGJlIHVzZWQgaW4gY2FsbGJhY2tzIGZy b20KQEAgLTE3NTIsNyArMTc1OCw4IEBAIG1lc3NhZ2UgPT0gYW4gZXJyb3Ig bWVzc2FnZSB3aXRob3V0IGEgc3RhY2sgd2lsbCBiZSBwcmludGVkLiIpLAog ICAgICAgfHwgZ2RicHlfaW5pdGlhbGl6ZV9leGl0ZWRfZXZlbnQgKCkgPCAw CiAgICAgICB8fCBnZGJweV9pbml0aWFsaXplX3RocmVhZF9ldmVudCAoKSA8 IDAKICAgICAgIHx8IGdkYnB5X2luaXRpYWxpemVfbmV3X29iamZpbGVfZXZl bnQgKCkgIDwgMAotICAgICAgfHwgZ2RicHlfaW5pdGlhbGl6ZV9hcmNoICgp IDwgMCkKKyAgICAgIHx8IGdkYnB5X2luaXRpYWxpemVfYXJjaCAoKSA8IDAK KyAgICAgIHx8IGdkYnB5X2luaXRpYWxpemVfeG1ldGhvZHMgKCkgPCAwKQog ICAgIGdvdG8gZmFpbDsKIAogICBnZGJweV90b19zdHJpbmdfY3N0ID0gUHlT dHJpbmdfRnJvbVN0cmluZyAoInRvX3N0cmluZyIpOwpkaWZmIC0tZ2l0IGEv Z2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LXhtZXRob2RzLmNjIGIvZ2Ri L3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LXhtZXRob2RzLmNjCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NjM3ZDgKLS0tIC9kZXYv bnVsbAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHkteG1ldGhv ZHMuY2MKQEAgLTAsMCArMSwxNzAgQEAKKy8qIFRoaXMgdGVzdGNhc2UgaXMg cGFydCBvZiBHREIsIHRoZSBHTlUgZGVidWdnZXIuCisKKyAgIENvcHlyaWdo dCAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcg d2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSAgPGh0dHA6Ly93d3cu Z251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPGlvc3RyZWFt PgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgZG9wCit7 CisKK2NsYXNzIEEKK3sKK3B1YmxpYzoKKyAgaW50IGE7CisgIGludCBhcnJh eSBbMTBdOworICB2aXJ0dWFsIH5BICgpOworICBpbnQgb3BlcmF0b3IrIChj b25zdCBBICZvYmopOworICBpbnQgb3BlcmF0b3ItIChjb25zdCBBICZvYmop OworICB2aXJ0dWFsIGludCBnZXRhICh2b2lkKTsKK307CisKK0E6On5BICgp IHsgfQorCitpbnQKK0E6Om9wZXJhdG9yKyAoY29uc3QgQSAmb2JqKQorewor ICBjb3V0IDw8ICJGcm9tIENDIDxBX3BsdXNfQT46IiA8PCBlbmRsOworICBy ZXR1cm4gYSArIG9iai5hOworfQorCitpbnQKK0E6Om9wZXJhdG9yLSAoY29u c3QgQSAmb2JqKQoreworICBjb3V0IDw8ICJGcm9tIENDIDxBX21pbnVzX0E+ OiIgPDwgZW5kbDsKKyAgcmV0dXJuIGEgLSBvYmouYTsKK30KKworaW50CitB OjpnZXRhICh2b2lkKQoreworICBjb3V0IDw8ICJGcm9tIENDIEE6OmdldGE6 IiA8PCBlbmRsOworICByZXR1cm4gYTsKK30KKworY2xhc3MgQiA6IHB1Ymxp YyBBCit7CitwdWJsaWM6CisgIHZpcnR1YWwgaW50IGdldGEgKHZvaWQpOwor fTsKKworaW50CitCOjpnZXRhICh2b2lkKQoreworICBjb3V0IDw8ICJGcm9t IENDIEI6OmdldGE6IiA8PCBlbmRsOworICByZXR1cm4gMiAqIGE7Cit9CisK K3R5cGVkZWYgQiBCdDsKKwordHlwZWRlZiBCdCBCdHQ7CisKK2NsYXNzIEUg OiBwdWJsaWMgQQoreworcHVibGljOgorICAvKiBUaGlzIGNsYXNzIGhhcyBh IG1lbWJlciBuYW1lZCAnYScsIHdoaWxlIHRoZSBiYXNlIGNsYXNzIGFsc28g aGFzIGEKKyAgICAgbWVtYmVyIG5hbWVkICdhJy4gIFdoZW4gb25lIGludm9r ZXMgQTo6Z2V0YSgpLCBBOjphIHNob3VsZCBiZQorICAgICByZXR1cm5lZCBh bmQgbm90IEU6OmEgYXMgdGhlICdnZXRhJyBtZXRob2QgaXMgZGVmaW5lZCBv biBjbGFzcyAnQScuCisgICAgIFRoaXMgY2xhc3MgdGVzdHMgdGhpcyBhc3Bl Y3Qgb2YgZGVidWcgbWV0aG9kcy4gICovCisgIGludCBhOworfTsKKwordGVt cGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBHCit7CisgcHVibGljOgorICB0 ZW1wbGF0ZSA8dHlwZW5hbWUgVDE+CisgIGludCBzaXplX2RpZmYgKCk7CisK KyAgdGVtcGxhdGUgPGludCBNPgorICBpbnQgc2l6ZV9tdWwgKCk7CisKKyAg dGVtcGxhdGUgPHR5cGVuYW1lIFQxPgorICBUIG11bChjb25zdCBUMSB0MSk7 CisKKyBwdWJsaWM6CisgIFQgdDsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFt ZSBUPgordGVtcGxhdGUgPHR5cGVuYW1lIFQxPgoraW50CitHPFQ+OjpzaXpl X2RpZmYgKCkKK3sKKyAgY291dCA8PCAiRnJvbSBDQyBHPD46OnNpemVfZGlm ZjoiIDw8IGVuZGw7CisgIHJldHVybiBzaXplb2YgKFQxKSAtIHNpemVvZiAo VCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordGVtcGxhdGUgPGlu dCBNPgoraW50CitHPFQ+OjpzaXplX211bCAoKQoreworICBjb3V0IDw8ICJG cm9tIENDIEc8Pjo6c2l6ZV9tdWw6IiA8PCBlbmRsOworICByZXR1cm4gTSAq IHNpemVvZiAoVCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordGVt cGxhdGUgPHR5cGVuYW1lIFQxPgorVAorRzxUPjo6bXVsIChjb25zdCBUMSB0 MSkKK3sKKyAgY291dCA8PCAiRnJvbSBDQyBHPD46Om11bDoiIDw8IGVuZGw7 CisgIHJldHVybiB0MSAqIHQ7Cit9CisKK30gIC8vIG5hbWVzcGF4ZSBkb3AK KwordXNpbmcgbmFtZXNwYWNlIGRvcDsKKworaW50IG1haW4odm9pZCkKK3sK KyAgQSBhMSwgYTI7CisgIGExLmEgPSA1OworICBhMi5hID0gMTA7CisKKyAg QiBiMTsKKyAgYjEuYSA9IDMwOworICBBICphX3B0ciA9ICZiMTsKKworICBC dCBidDsKKyAgYnQuYSA9IDQwOworCisgIEJ0dCBidHQ7CisgIGJ0dC5hID0g LTU7CisKKyAgRzxpbnQ+IGcsICpnX3B0cjsKKyAgZy50ID0gNTsKKyAgZ19w dHIgPSAmZzsKKworICBFIGU7CisgIEUgJmVfcmVmID0gZTsKKyAgRSAqZV9w dHIgPSAmZTsKKyAgZS5hID0gMTAwMDsKKyAgZS5BOjphID0gMTAwOworCisg IGludCBkaWZmID0gZy5zaXplX2RpZmY8ZmxvYXQ+ICgpOworICBpbnQgc211 bCA9IGcuc2l6ZV9tdWw8Mj4gKCk7CisgIGludCBtdWwgPSBnLm11bCAoMS4w KTsKKworICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspCisgICAgewor ICAgICAgYTEuYXJyYXlbaV0gPSBhMi5hcnJheVtpXSA9IGk7CisgICAgfQor CisgIHJldHVybiAwOyAvKiBCcmVhayBoZXJlLiAgKi8KK30KZGlmZiAtLWdp dCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS14bWV0aG9kcy5leHAg Yi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHkteG1ldGhvZHMuZXhwCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YjZmZmEKLS0t IC9kZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHkt eG1ldGhvZHMuZXhwCkBAIC0wLDAgKzEsMTI3IEBACisjIENvcHlyaWdodCAy MDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor IyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisj CisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBw cm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNl bnNlcy8+LgorCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHREIgdGVz dHN1aXRlLiAgSXQgdGVzdHMgdGhlIGRlYnVnIG1ldGhvZHMKKyMgZmVhdHVy ZSBpbiB0aGUgUHl0aG9uIGV4dGVuc2lvbiBsYW5ndWFnZS4KKworbG9hZF9s aWIgZ2RiLXB5dGhvbi5leHAKKworaWYgeyBbc2tpcF9jcGx1c190ZXN0c10g fSB7IGNvbnRpbnVlIH0KKworc3RhbmRhcmRfdGVzdGZpbGUgcHkteG1ldGhv ZHMuY2MKKworaWYge1twcmVwYXJlX2Zvcl90ZXN0aW5nICR0ZXN0ZmlsZS5l eHAgJHRlc3RmaWxlICRzcmNmaWxlIHtkZWJ1ZyBjKyt9XX0geworICAgIHJl dHVybiAtMQorfQorCisjIFNraXAgYWxsIHRlc3RzIGlmIFB5dGhvbiBzY3Jp cHRpbmcgaXMgbm90IGVuYWJsZWQuCitpZiB7IFtza2lwX3B5dGhvbl90ZXN0 c10gfSB7IGNvbnRpbnVlIH0KKworaWYgIVtydW50b19tYWluXSB7CisgICBy ZXR1cm4gLTEKK30KKworc2V0IHhtZXRob2RzX3NjcmlwdCBbZ2RiX3JlbW90 ZV9kb3dubG9hZCBob3N0IFwKKwkJICAgICAke3NyY2Rpcn0vJHtzdWJkaXJ9 LyR7dGVzdGZpbGV9LnB5XQorCitnZGJfYnJlYWtwb2ludCBbZ2RiX2dldF9s aW5lX251bWJlciAiQnJlYWsgaGVyZS4iXQorZ2RiX2NvbnRpbnVlX3RvX2Jy ZWFrcG9pbnQgIkJyZWFrIGhlcmUiICIuKkJyZWFrIGhlcmUuKiIKKworIyBU ZXN0cyBiZWZvcmUgbG9hZGluZyB0aGUgZGVidWcgbWV0aG9kcy4KK2dkYl90 ZXN0ICJwIGExICsgYTIiICJGcm9tIENDIDxBX3BsdXNfQT4uKjE1IiAiQmVm b3JlOiBhMSArIGEyIgorZ2RiX3Rlc3QgInAgYTIgLSBhMSIgIkZyb20gQ0Mg PEFfbWludXNfQT4uKjUiICJCZWZvcmU6IGExIC0gYTIiCitnZGJfdGVzdCAi cCBiMSAtIGExIiAiRnJvbSBDQyA8QV9taW51c19BPi4qMjUiICJCZWZvcmU6 IGIxIC0gYTEiCitnZGJfdGVzdCAicCBhMS5nZXRhKCkiICJGcm9tIENDIEE6 OmdldGEuKjUiICJCZWZvcmU6IGExLmdldGEoKSIKK2dkYl90ZXN0ICJwICsr YTEiICJObyBzeW1ib2wuKiIgIkJlZm9yZTogKythMSIKK2dkYl90ZXN0ICJw IGExLmdldGFycmF5aW5kKDUpIiAiQ291bGRuJ3QgZmluZCBtZXRob2QuKiIg XAorICAiQmVmb3JlOiBhMS5nZXRhcnJheWluZCg1KSIKK2dkYl90ZXN0ICJw IGFfcHRyLT5nZXRhKCkiICJGcm9tIENDIEI6OmdldGEuKjYwIiAiQmVmb3Jl OiBhX3B0ci0+Z2V0YSgpIgorZ2RiX3Rlc3QgInAgZS5nZXRhKCkiICJGcm9t IENDIEE6OmdldGEuKjEwMCIgIkJlZm9yZTogZS5nZXRhKCkiCitnZGJfdGVz dCAicCBnLnNpemVfZGlmZjxmbG9hdD4oKSIgIkZyb20gQ0MgRzw+OjpzaXpl X2RpZmYuKiIgXAorICAiQmVmb3JlOiBnLnNpemVfZGlmZjxmbG9hdD4oKSIK K2dkYl90ZXN0ICJwIGcuc2l6ZV9kaWZmPHVuc2lnbmVkIGxvbmc+KCkiICJD b3VsZG4ndCBmaW5kIG1ldGhvZC4qIiBcCisgICJCZWZvcmU6IGcuc2l6ZV9k aWZmPHVuc2lnbmVkIGxvbmc+KCkiCitnZGJfdGVzdCAicCBnLnNpemVfbXVs PDI+KCkiICJGcm9tIENDIEc8Pjo6c2l6ZV9tdWwuKiIgXAorICAiQmVmb3Jl OiBnLnNpemVfbXVsPDI+KCkiCitnZGJfdGVzdCAicCBnLnNpemVfbXVsPDU+ KCkiICJDb3VsZG4ndCBmaW5kIG1ldGhvZC4qIiBcCisgICJCZWZvcmU6IGcu c2l6ZV9tdWw8NT4oKSIKK2dkYl90ZXN0ICJwIGcubXVsPGRvdWJsZT4oMi4w KSIgIkZyb20gQ0MgRzw+OjptdWwuKiIgXAorICAiQmVmb3JlOiBnLm11bDxk b3VibGU+KDIuMCkiCitnZGJfdGVzdCAicCBnLm11bDxjaGFyPignYScpIiAi Q291bGRuJ3QgZmluZCBtZXRob2QuKiIgXAorICAiQmVmb3JlOiBnLm11bDxj aGFyPignYScpIgorCisjIExvYWQgdGhlIHNjcmlwdCB3aGljaCBhZGRzIHRo ZSBkZWJ1ZyBtZXRob2RzLgorZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJzb3VyY2Ug JHt4bWV0aG9kc19zY3JpcHR9IiAibG9hZCB0aGUgc2NyaXB0IGZpbGUiCisK KyMgVGVzdHMgYWZ0ZXIgbG9hZGluZyBkZWJ1ZyBtZXRob2RzLgorZ2RiX3Rl c3QgInAgYTEgKyBhMiIgIkZyb20gUHl0aG9uIDxBX3BsdXNfQT4uKjE1IiAi QWZ0ZXI6IGExICsgYTIiCitnZGJfdGVzdCAicCBhMiAtIGExIiAiRnJvbSBD QyA8QV9taW51c19BPi4qNSIgIkFmdGVyOiBhMSAtIGEyIgorZ2RiX3Rlc3Qg InAgYjEgKyBhMSIgIkZyb20gUHl0aG9uIDxBX3BsdXNfQT4uKjM1IiAiQWZ0 ZXI6IGIxICsgYTEiCitnZGJfdGVzdCAicCBiMSAtIGExIiAiRnJvbSBDQyA8 QV9taW51c19BPi4qMjUiICJBZnRlcjogYjEgLSBhMSIKK2dkYl90ZXN0ICJw IGExLmdldGEoKSIgIkZyb20gUHl0aG9uIDxBX2dldGE+Lio1IiAiQWZ0ZXI6 IGExLmdldGEoKSIKK2dkYl90ZXN0ICJwICsrYTEiICJGcm9tIFB5dGhvbiA8 cGx1c19wbHVzX0E+Lio2IiAiQWZ0ZXI6ICsrYTEiCitnZGJfdGVzdCAicCBh MS5nZXRhcnJheWluZCg1KSIgIkZyb20gUHl0aG9uIDxBX2dldGFycmF5aW5k Pi4qNSIgXAorICAiQWZ0ZXI6IGExLmdldGFycmF5aW5kKDUpIgorIyBOb3Rl IHRoZSBmb2xsb3dpbmcgdGVzdC4gIFhtZXRob2RzIG9uIGR5bmFtYyB0eXBl cyBhcmUgbm90IGxvb2tlZCB1cAorIyBjdXJyZW50bHkuICBIZW5jZSwgZXZl biB0aG91Z2ggYV9wdHIgcG9pbnRzIHRvIGEgQiBvYmplY3QsIHRoZSB4bWV0 aG9kCisjIGRlZmluZWQgZm9yIEEgb2JqZWN0cyBpcyBpbnZva2VkLgorZ2Ri X3Rlc3QgInAgYV9wdHItPmdldGEoKSIgIkZyb20gUHl0aG9uIDxBX2dldGE+ LiozMCIgIkFmdGVyOiBhX3B0ci0+Z2V0YSgpIgorZ2RiX3Rlc3QgInAgZS5n ZXRhKCkiICJGcm9tIFB5dGhvbiA8QV9nZXRhPi4qMTAwIiAiQWZ0ZXI6IGUu Z2V0YSgpIgorZ2RiX3Rlc3QgInAgZV9wdHItPmdldGEoKSIgIkZyb20gUHl0 aG9uIDxBX2dldGE+LioxMDAiICJBZnRlcjogZV9wdHItPmdldGEoKSIKK2dk Yl90ZXN0ICJwIGVfcmVmLmdldGEoKSIgIkZyb20gUHl0aG9uIDxBX2dldGE+ LioxMDAiICJBZnRlcjogZV9yZWYuZ2V0YSgpIgorZ2RiX3Rlc3QgInAgZS5t ZXRob2QoMTApIiAiRnJvbSBQeXRob24gPEVfbWV0aG9kX2ludD4uKiIgIkFm dGVyOiBlLm1ldGhvZCgxMCkiCitnZGJfdGVzdCAicCBlLm1ldGhvZCgnYScp IiAiRnJvbSBQeXRob24gPEVfbWV0aG9kX2NoYXI+LioiIFwKKyAgIkFmdGVy OiBlLm1ldGhvZCgnYScpIgorZ2RiX3Rlc3QgInAgZy5zaXplX2RpZmY8Zmxv YXQ+ICAoKSIgIkZyb20gUHl0aG9uIEc8Pjo6c2l6ZV9kaWZmLioiIFwKKyAg IkFmdGVyOiBnLnNpemVfZGlmZjxmbG9hdD4oKSIKK2dkYl90ZXN0ICJwIGcu c2l6ZV9kaWZmPCAgdW5zaWduZWQgbG9uZyAgPigpIiAiRnJvbSBQeXRob24g Rzw+OjpzaXplX2RpZmYuKiIgXAorICAiQWZ0ZXI6IGcuc2l6ZV9kaWZmPHVu c2lnbmVkIGxvbmc+KCkiCitnZGJfdGVzdCAicCBnLnNpemVfbXVsPDI+KCki ICJGcm9tIFB5dGhvbiBHPD46OnNpemVfbXVsLioiIFwKKyAgIkFmdGVyOiBn LnNpemVfbXVsPDI+KCkiCitnZGJfdGVzdCAicCBnLnNpemVfbXVsPCAgNSAg PigpIiAiRnJvbSBQeXRob24gRzw+OjpzaXplX211bC4qIiBcCisgICJBZnRl cjogZy5zaXplX211bDwgIDUgID4oKSIKK2dkYl90ZXN0ICJwIGcubXVsPGRv dWJsZT4oMi4wKSIgIkZyb20gUHl0aG9uIEc8Pjo6bXVsLioiIFwKKyAgIkFm dGVyOiBnLm11bDxkb3VibGU+KDIuMCkiCitnZGJfdGVzdCAicCBnLm11bDxj aGFyPignYScpIiAiRnJvbSBQeXRob24gRzw+OjptdWwuKiIgXAorZ2RiX3Rl c3QgInAgZ19wdHItPm11bDxjaGFyPignYScpIiAiRnJvbSBQeXRob24gRzw+ OjptdWwuKiIgXAorICAiQWZ0ZXI6IGdfcHRyLT5tdWw8Y2hhcj4oJ2EnKSIK KworIyBUZXN0cyBmb3IgJ2Rpc2FibGUvZW5hYmxlIHhtZXRob2QnIGNvbW1h bmQuCitnZGJfdGVzdF9ub19vdXRwdXQgImRpc2FibGUgeG1ldGhvZCAuKnht ZXRob2RzIEdfbWV0aG9kcyIgXAorICAiRGlzYWJsZSBHX21ldGhvZHMiCitn ZGJfdGVzdCAicCBnLm11bDxjaGFyPignYScpIiAiQ291bGRuJ3QgZmluZCBt ZXRob2QuKiIgXAorICAiZy5tdWw8Y2hhcj4oJ2EnKSBhZnRlciBkaXNhYmxp bmcgR19tZXRob2RzIgorZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJlbmFibGUgeG1l dGhvZCAuKnhtZXRob2RzIEdfbWV0aG9kcyIgXAorICAiRW5hYmxlIEdfbWV0 aG9kcyIKK2dkYl90ZXN0ICJwIGcubXVsPGNoYXI+KCdhJykiICJGcm9tIFB5 dGhvbiBHPD46Om11bC4qIiBcCisgICJBZnRlciBlbmFibGluZyBHX21ldGhv ZHMiCitnZGJfdGVzdF9ub19vdXRwdXQgImRpc2FibGUgeG1ldGhvZCAuKnht ZXRob2RzIEdfbWV0aG9kczttdWwiIFwKKyAgIkRpc2FibGUgR19tZXRob2Rz O211bCIKK2dkYl90ZXN0ICJwIGcubXVsPGNoYXI+KCdhJykiICJDb3VsZG4n dCBmaW5kIG1ldGhvZC4qIiBcCisgICJnLm11bDxjaGFyPignYScpIGFmdGVy IGRpc2FibGluZyBHX21ldGhvZHM7bXVsIgorZ2RiX3Rlc3Rfbm9fb3V0cHV0 ICJlbmFibGUgeG1ldGhvZCAuKnhtZXRob2RzIEdfbWV0aG9kczttdWwiIFwK KyAgIkVuYWJsZSBHX21ldGhvZHM7bXVsIgorZ2RiX3Rlc3QgInAgZy5tdWw8 Y2hhcj4oJ2EnKSIgIkZyb20gUHl0aG9uIEc8Pjo6bXVsLioiIFwKKyAgIkFm dGVyIGVuYWJsaW5nIEdfbWV0aG9kczttdWwiCisKKyMgVGVzdCBmb3IgJ2lu Zm8geG1ldGhvZHMnIGNvbW1hbmQKK2dkYl90ZXN0ICJpbmZvIHhtZXRob2Qg Z2xvYmFsIHBsdXMiICJnbG9iYWwuKnBsdXNfcGx1c19BIiBcCisgICJpbmZv IHhtZXRob2QgZ2xvYmFsIHBsdXMgMSIKK2dkYl90ZXN0X25vX291dHB1dCAi ZGlzYWJsZSB4bWV0aG9kIC4qeG1ldGhvZHMgRV9tZXRob2RzO21ldGhvZF9p bnQiIFwKKyAgImRpc2FibGUgeG1ldGhvZCAuKnhtZXRob2RzIEVfbWV0aG9k czttZXRob2RfaW50IgorZ2RiX3Rlc3QgImluZm8geG1ldGhvZCAuKnhtZXRo b2RzIEVfbWV0aG9kczttZXRob2RfaW50IiAiLiogXFxcW2Rpc2FibGVkXFxc XSIgXAorICAiaW5mbyB4bWV0aG9kIHhtZXRob2RzIEVfbWV0aG9kczttZXRo b2RfaW50IgorCityZW1vdGVfZmlsZSBob3N0IGRlbGV0ZSAke3htZXRob2Rz X3NjcmlwdH0KZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhv bi9weS14bWV0aG9kcy5weSBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9w eS14bWV0aG9kcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi42ZmVjZjJiCi0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3Rlc3RzdWl0 ZS9nZGIucHl0aG9uL3B5LXhtZXRob2RzLnB5CkBAIC0wLDAgKzEsMjE4IEBA CisjIENvcHlyaWdodCAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg SW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFs b25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93 d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFRoaXMgZmlsZSBpcyBwYXJ0 IG9mIHRoZSBHREIgdGVzdHN1aXRlLiAgSXQgdGVzdCB0aGUgeG1ldGhvZHMg c3VwcG9ydAorIyBpbiB0aGUgUHl0aG9uIGV4dGVuc2lvbiBsYW5ndWFnZS4K KworaW1wb3J0IGdkYgoraW1wb3J0IHJlCisKK2Zyb20gZ2RiLnhtZXRob2Qg aW1wb3J0IFhNZXRob2QKK2Zyb20gZ2RiLnhtZXRob2QgaW1wb3J0IFhNZXRo b2RNYXRjaGVyLCBYTWV0aG9kV29ya2VyCitmcm9tIGdkYi54bWV0aG9kIGlt cG9ydCBTaW1wbGVYTWV0aG9kTWF0Y2hlcgorCisKK2RlZiBBX3BsdXNfQShv YmosIG9wcik6CisgIHByaW50ICgnRnJvbSBQeXRob24gPEFfcGx1c19BPjon KQorICByZXR1cm4gb2JqWydhJ10gKyBvcHJbJ2EnXQorCisKK2RlZiBwbHVz X3BsdXNfQShvYmopOgorICBwcmludCAoJ0Zyb20gUHl0aG9uIDxwbHVzX3Bs dXNfQT46JykKKyAgcmV0dXJuIG9ialsnYSddICsgMQorCisKK2RlZiBBX2dl dGEob2JqKToKKyAgcHJpbnQgKCdGcm9tIFB5dGhvbiA8QV9nZXRhPjonKQor ICByZXR1cm4gb2JqWydhJ10KKworCitkZWYgQV9nZXRhcnJheWluZChvYmos IGluZGV4KToKKyAgcHJpbnQgJ0Zyb20gUHl0aG9uIDxBX2dldGFycmF5aW5k PjonCisgIHJldHVybiBvYmpbJ2FycmF5J11baW5kZXhdCisKKwordHlwZV9B ID0gZ2RiLnBhcnNlX2FuZF9ldmFsKCcoZG9wOjpBICopIDAnKS50eXBlLnRh cmdldCgpCit0eXBlX0IgPSBnZGIucGFyc2VfYW5kX2V2YWwoJyhkb3A6OkIg KikgMCcpLnR5cGUudGFyZ2V0KCkKK3R5cGVfaW50ID0gZ2RiLnBhcnNlX2Fu ZF9ldmFsKCcoaW50ICopIDAnKS50eXBlLnRhcmdldCgpCisKKworIyBUaGUg RSBjbGFzcyBtYXRjaGVyIGFuZCB3b3JrZXIgdGVzdCB0d28gdGhpbmdzOgor IyAgIDEuIHhtZXRob2QgcmV0dXJuaW5nIE5vbmUuCisjICAgMi4gTWF0Y2hl ciByZXR1cm5pbmcgYSBsaXN0IG9mIHdvcmtlcnMuCisKK2NsYXNzIEVfbWV0 aG9kX2NoYXJfd29ya2VyKFhNZXRob2RXb3JrZXIpOgorICAgIGRlZiBfX2lu aXRfXyhzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGdldF9hcmdf dHlwZXMoc2VsZik6CisgICAgICAgIHJldHVybiBnZGIubG9va3VwX3R5cGUo J2NoYXInKQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIG9iaiwgYXJnKToK KyAgICAgICAgcHJpbnQgJ0Zyb20gUHl0aG9uIDxFX21ldGhvZF9jaGFyPicK KyAgICAgICAgcmV0dXJuIE5vbmUKKworCitjbGFzcyBFX21ldGhvZF9pbnRf d29ya2VyKFhNZXRob2RXb3JrZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxm KToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGdldF9hcmdfdHlwZXMoc2Vs Zik6CisgICAgICAgIHJldHVybiBnZGIubG9va3VwX3R5cGUoJ2ludCcpCisK KyAgICBkZWYgX19jYWxsX18oc2VsZiwgb2JqLCBhcmcpOgorICAgICAgICBw cmludCAnRnJvbSBQeXRob24gPEVfbWV0aG9kX2ludD4nCisgICAgICAgIHJl dHVybiBOb25lCisKKworY2xhc3MgRV9tZXRob2RfbWF0Y2hlcihYTWV0aG9k TWF0Y2hlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBY TWV0aG9kTWF0Y2hlci5fX2luaXRfXyhzZWxmLCAnRV9tZXRob2RzJykKKyAg ICAgICAgc2VsZi5tZXRob2RzID0gW1hNZXRob2QoJ21ldGhvZF9pbnQnKSwg WE1ldGhvZCgnbWV0aG9kX2NoYXInKV0KKworICAgIGRlZiBtYXRjaChzZWxm LCBjbGFzc190eXBlLCBtZXRob2RfbmFtZSk6CisgICAgICAgIGNsYXNzX3Rh ZyA9IGNsYXNzX3R5cGUudW5xdWFsaWZpZWQoKS50YWcKKyAgICAgICAgaWYg bm90IHJlLm1hdGNoKCdeZG9wOjpFJCcsIGNsYXNzX3RhZyk6CisgICAgICAg ICAgICByZXR1cm4gTm9uZQorCWlmIG5vdCByZS5tYXRjaCgnXm1ldGhvZCQn LCBtZXRob2RfbmFtZSk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAg ICAgICB3b3JrZXJzID0gW10KKyAgICAgICAgaWYgc2VsZi5tZXRob2RzWzBd LmVuYWJsZWQ6CisgICAgICAgICAgICB3b3JrZXJzLmFwcGVuZChFX21ldGhv ZF9pbnRfd29ya2VyKCkpCisgICAgICAgIGlmIHNlbGYubWV0aG9kc1sxXS5l bmFibGVkOgorICAgICAgICAgICAgd29ya2Vycy5hcHBlbmQoRV9tZXRob2Rf Y2hhcl93b3JrZXIoKSkKKyAgICAgICAgcmV0dXJuIHdvcmtlcnMKKworCisj IFRoZSBHIGNsYXNzIG1ldGhvZCBtYXRjaGVyIGFuZCB3b3JrZXIgaWxsdXN0 cmF0ZSBob3cgdG8gd3JpdGUKKyMgeG1ldGhvZCBtYXRjaGVycyBhbmQgd29y a2VycyBmb3IgdGVtcGxhdGUgY2xhc3NlcyBhbmQgdGVtcGxhdGUKKyMgbWV0 aG9kcy4KKworY2xhc3MgR19zaXplX2RpZmZfd29ya2VyKFhNZXRob2RXb3Jr ZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjbGFzc190ZW1wbGF0ZV90 eXBlLCBtZXRob2RfdGVtcGxhdGVfdHlwZSk6CisgICAgICAgIHNlbGYuX2Ns YXNzX3RlbXBsYXRlX3R5cGUgPSBjbGFzc190ZW1wbGF0ZV90eXBlCisgICAg ICAgIHNlbGYuX21ldGhvZF90ZW1wbGF0ZV90eXBlID0gbWV0aG9kX3RlbXBs YXRlX3R5cGUKKworICAgIGRlZiBnZXRfYXJnX3R5cGVzKHNlbGYpOgorICAg ICAgICBwYXNzCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgb2JqKToKKyAg ICAgICAgcHJpbnQgKCdGcm9tIFB5dGhvbiBHPD46OnNpemVfZGlmZigpJykK KyAgICAgICAgcmV0dXJuIChzZWxmLl9tZXRob2RfdGVtcGxhdGVfdHlwZS5z aXplb2YgLQorICAgICAgICAgICAgICAgIHNlbGYuX2NsYXNzX3RlbXBsYXRl X3R5cGUuc2l6ZW9mKQorCisKK2NsYXNzIEdfc2l6ZV9tdWxfd29ya2VyKFhN ZXRob2RXb3JrZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjbGFzc190 ZW1wbGF0ZV90eXBlLCBtZXRob2RfdGVtcGxhdGVfdmFsKToKKyAgICAgICAg c2VsZi5fY2xhc3NfdGVtcGxhdGVfdHlwZSA9IGNsYXNzX3RlbXBsYXRlX3R5 cGUKKyAgICAgICAgc2VsZi5fbWV0aG9kX3RlbXBsYXRlX3ZhbCA9IG1ldGhv ZF90ZW1wbGF0ZV92YWwKKworICAgIGRlZiBnZXRfYXJnX3R5cGVzKHNlbGYp OgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgb2Jq KToKKyAgICAgICAgcHJpbnQgKCdGcm9tIFB5dGhvbiBHPD46OnNpemVfbXVs KCknKQorICAgICAgICByZXR1cm4gc2VsZi5fY2xhc3NfdGVtcGxhdGVfdHlw ZS5zaXplb2YgKiBzZWxmLl9tZXRob2RfdGVtcGxhdGVfdmFsCisKKworY2xh c3MgR19tdWxfd29ya2VyKFhNZXRob2RXb3JrZXIpOgorICAgIGRlZiBfX2lu aXRfXyhzZWxmLCBjbGFzc190ZW1wbGF0ZV90eXBlLCBtZXRob2RfdGVtcGxh dGVfdHlwZSk6CisgICAgICAgIHNlbGYuX2NsYXNzX3RlbXBsYXRlX3R5cGUg PSBjbGFzc190ZW1wbGF0ZV90eXBlCisgICAgICAgIHNlbGYuX21ldGhvZF90 ZW1wbGF0ZV90eXBlID0gbWV0aG9kX3RlbXBsYXRlX3R5cGUKKworICAgIGRl ZiBnZXRfYXJnX3R5cGVzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5f bWV0aG9kX3RlbXBsYXRlX3R5cGUKKworICAgIGRlZiBfX2NhbGxfXyhzZWxm LCBvYmosIGFyZyk6CisgICAgICAgIHByaW50ICgnRnJvbSBQeXRob24gRzw+ OjptdWwoKScpCisgICAgICAgIHJldHVybiBvYmpbJ3QnXSAqIGFyZworCisK K2NsYXNzIEdfbWV0aG9kc19tYXRjaGVyKFhNZXRob2RNYXRjaGVyKToKKyAg ICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIFhNZXRob2RNYXRjaGVy Ll9faW5pdF9fKHNlbGYsICdHX21ldGhvZHMnKQorICAgICAgICBzZWxmLm1l dGhvZHMgPSBbWE1ldGhvZCgnc2l6ZV9kaWZmJyksCisgICAgICAgICAgICAg ICAgICAgICAgICBYTWV0aG9kKCdzaXplX211bCcpLAorICAgICAgICAgICAg ICAgICAgICAgICAgWE1ldGhvZCgnbXVsJyldCisKKyAgICBkZWYgX2lzX2Vu YWJsZWQoc2VsZiwgbmFtZSk6CisgICAgICAgIGZvciBtZXRob2QgaW4gc2Vs Zi5tZXRob2RzOgorICAgICAgICAgICAgaWYgbWV0aG9kLm5hbWUgPT0gbmFt ZSBhbmQgbWV0aG9kLmVuYWJsZWQ6CisgICAgICAgICAgICAgICAgcmV0dXJu IFRydWUKKworICAgIGRlZiBtYXRjaChzZWxmLCBjbGFzc190eXBlLCBtZXRo b2RfbmFtZSk6CisgICAgICAgIGNsYXNzX3RhZyA9IGNsYXNzX3R5cGUudW5x dWFsaWZpZWQoKS50YWcKKyAgICAgICAgaWYgbm90IHJlLm1hdGNoKCdeZG9w OjpHPFsgXSpbX2EtekEtWl1bIF9hLXpBLVowLTldKj4kJywKKyAgICAgICAg ICAgICAgICAgICAgICAgIGNsYXNzX3RhZyk6CisgICAgICAgICAgICByZXR1 cm4gTm9uZQorICAgICAgICB0X25hbWUgPSBjbGFzc190YWdbNzotMV0KKyAg ICAgICAgdHJ5OgorICAgICAgICAgICAgdF90eXBlID0gZ2RiLmxvb2t1cF90 eXBlKHRfbmFtZSkKKyAgICAgICAgZXhjZXB0IGdkYi5lcnJvcjoKKyAgICAg ICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGlmIHJlLm1hdGNoKCdec2l6 ZV9kaWZmPFsgXSpbX2EtekEtWl1bIF9hLXpBLVowLTldKj4kJywgbWV0aG9k X25hbWUpOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2lzX2VuYWJsZWQo J3NpemVfZGlmZicpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisg ICAgICAgICAgICB0MV9uYW1lID0gbWV0aG9kX25hbWVbMTA6LTFdCisgICAg ICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdDFfdHlwZSA9IGdkYi5s b29rdXBfdHlwZSh0MV9uYW1lKQorICAgICAgICAgICAgICAgIHJldHVybiBH X3NpemVfZGlmZl93b3JrZXIodF90eXBlLCB0MV90eXBlKQorICAgICAgICAg ICAgZXhjZXB0IGdkYi5lcnJvcjoKKyAgICAgICAgICAgICAgICByZXR1cm4g Tm9uZQorICAgICAgICBpZiByZS5tYXRjaCgnXnNpemVfbXVsPFsgXSpbMC05 XStbIF0qPiQnLCBtZXRob2RfbmFtZSk6CisgICAgICAgICAgICBpZiBub3Qg c2VsZi5faXNfZW5hYmxlZCgnc2l6ZV9tdWwnKToKKyAgICAgICAgICAgICAg ICByZXR1cm4gTm9uZQorICAgICAgICAgICAgbV92YWwgPSBpbnQobWV0aG9k X25hbWVbOTotMV0pCisgICAgICAgICAgICByZXR1cm4gR19zaXplX211bF93 b3JrZXIodF90eXBlLCBtX3ZhbCkKKyAgICAgICAgaWYgcmUubWF0Y2goJ15t dWw8WyBdKltfYS16QS1aXVsgX2EtekEtWjAtOV0qPiQnLCBtZXRob2RfbmFt ZSk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5faXNfZW5hYmxlZCgnbXVs Jyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAg IHQxX25hbWUgPSBtZXRob2RfbmFtZVs0Oi0xXQorICAgICAgICAgICAgdHJ5 OgorICAgICAgICAgICAgICAgIHQxX3R5cGUgPSBnZGIubG9va3VwX3R5cGUo dDFfbmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR19tdWxfd29ya2Vy KHRfdHlwZSwgdDFfdHlwZSkKKyAgICAgICAgICAgIGV4Y2VwdCBnZGIuZXJy b3I6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworCitnbG9iYWxf ZG1fbGlzdCA9IFsKKyAgICBTaW1wbGVYTWV0aG9kTWF0Y2hlcignQV9wbHVz X0EnLAorICAgICAgICAgICAgICAgICAgICAgICAgICdeZG9wOjpBJCcsCisg ICAgICAgICAgICAgICAgICAgICAgICAgJ29wZXJhdG9yXCsnLAorICAgICAg ICAgICAgICAgICAgICAgICAgIEFfcGx1c19BLAorICAgICAgICAgICAgICAg ICAgICAgICAgICMgVGhpcyBpcyBhIHJlcGxhY2VtZW50LCBoZW5jZSBtYXRj aCB0aGUgYXJnIHR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAjIGV4 YWN0bHkhCisgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZV9BLmNvbnN0 KCkucmVmZXJlbmNlKCkpLAorICAgIFNpbXBsZVhNZXRob2RNYXRjaGVyKCdw bHVzX3BsdXNfQScsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ15kb3A6 OkEkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnb3BlcmF0b3JcK1wr JywKKyAgICAgICAgICAgICAgICAgICAgICAgICBwbHVzX3BsdXNfQSksCisg ICAgU2ltcGxlWE1ldGhvZE1hdGNoZXIoJ0FfZ2V0YScsCisgICAgICAgICAg ICAgICAgICAgICAgICAgJ15kb3A6OkEkJywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAnXmdldGEkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBB X2dldGEpLAorICAgIFNpbXBsZVhNZXRob2RNYXRjaGVyKCdBX2dldGFycmF5 aW5kJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXmRvcDo6QSQnLAor ICAgICAgICAgICAgICAgICAgICAgICAgICdeZ2V0YXJyYXlpbmQkJywKKyAg ICAgICAgICAgICAgICAgICAgICAgICBBX2dldGFycmF5aW5kLAorICAgICAg ICAgICAgICAgICAgICAgICAgIHR5cGVfaW50KSwKK10KKworZm9yIG1hdGNo ZXIgaW4gZ2xvYmFsX2RtX2xpc3Q6CisgICAgZ2RiLnhtZXRob2QucmVnaXN0 ZXJfeG1ldGhvZF9tYXRjaGVyKGdkYiwgbWF0Y2hlcikKK2dkYi54bWV0aG9k LnJlZ2lzdGVyX3htZXRob2RfbWF0Y2hlcihnZGIuY3VycmVudF9wcm9nc3Bh Y2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH X21ldGhvZHNfbWF0Y2hlcigpKQorZ2RiLnhtZXRob2QucmVnaXN0ZXJfeG1l dGhvZF9tYXRjaGVyKGdkYi5jdXJyZW50X3Byb2dzcGFjZSgpLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVfbWV0aG9kX21hdGNo ZXIoKSkK --089e01494d5207c26404fadefc84--