Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tl0I9-008W9d-T3 for pgsql-hackers@arkaria.postgresql.org; Thu, 20 Feb 2025 06:44:14 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tl0I7-001zh2-AX for pgsql-hackers@arkaria.postgresql.org; Thu, 20 Feb 2025 06:44:11 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tl0I6-001zgu-Qv for pgsql-hackers@lists.postgresql.org; Thu, 20 Feb 2025 06:44:11 +0000 Received: from mail-qt1-x831.google.com ([2607:f8b0:4864:20::831]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tl0I4-001um1-10 for pgsql-hackers@lists.postgresql.org; Thu, 20 Feb 2025 06:44:10 +0000 Received: by mail-qt1-x831.google.com with SMTP id d75a77b69052e-4720fb0229fso5433681cf.0 for ; Wed, 19 Feb 2025 22:44:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740033846; x=1740638646; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=NNDJZUgUprwIE1QV3KObSIadFfCotWtiZZyv0Lk1TOo=; b=a7kILLEPkaRUoNVtmrld1zInbHA7wMXifPXjC+KxHd3HthYnu98zhkC+fI0Oia/dJ7 POKTz0bRnamRo+Jn8q4SdCEpn7NgJmkKNJNBFwxdCv+SKsLM905l+poRHKEmI/lbZPh5 ROH2tyYi2+y0mytjLL3DQnqZjUXenaWHcqQFuZwdBZDQHWMrIuXC9grWJcTmLFEk8ta+ RHFcpv5eRNTazNdOdybh3R74z4gX/OLAC/62iL4mk4KroBVNtSGPkn5JvhdcL1Y/oEbM 2zcVo1b7TWiMUCp3CgEXSSAR5HnZumxC+MRJ4Ppu0+0W6UhsZeAMmG88cwNg/cwKS7I+ lLoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740033846; x=1740638646; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=NNDJZUgUprwIE1QV3KObSIadFfCotWtiZZyv0Lk1TOo=; b=fobD+YwKeaQ0+uw+O5SIp3VVsSOnfXazTz2Drm8vG+MaGE/M1ny8SXi9ziC1SBlkp+ CcigqGT3VuUBKwcLggKvqqwiBu+dwNQI4krvDEo0ZzLwM73kjKiYUHM0wSnT7RB0TdYt 9SGMtQwlDLJ2TvrQq0RIuq2/qLVa8CmVBvhvoE7yGlWTraoqywZJrbl4GORVYnhbS7yu CNmLI7C4w3Wl/gSWbgo20pWHV3nDWqlJJOi0GyZfOwIjh7XAoa/M3oL7zNy87CfTqbHd yMVPZwR0eu0fwA+341h7Jt3ckM5+fnEAxO5ebC6XBotRCPJQclabfvFoPdi7mz9p7zxE /fDA== X-Forwarded-Encrypted: i=1; AJvYcCXC6mD9sq1HjQ8aRKdduryKk9Wj+yCFxOUjvZEGb0c+X5CDfWEzP4GK3AeOdcXoRqAlBh/qXVWWtaJLq9j4@lists.postgresql.org X-Gm-Message-State: AOJu0Yxfu2HMHWcHcBe+69wksy439XF5q8OZEG88yyo5hg04bbVV5/cG ri7Jlse3c+zy0f/WsZG5CLuY8XvopHoMmarRtqyXEB+dJj+pFqf4UDz1e9CI3owuqfzVHaJX+rK pahcms4yNh8nU0s8R32h3uFBGVsw= X-Gm-Gg: ASbGnctHKHfx9wAu1/njYaF1sBA07qwwzI4HfQ05H8mPNpN2xqSd3Na/roVUxPCkIWe hcHtZlprJKix0U3HqUqfKuh9k2u3Evwl6Zi47BFFP4PRqElFeXsudeyV+ZwwShuuSWjHoF6k16u K8BEL6Wwxm09hZVayMy+85xP+20XMjsDs= X-Google-Smtp-Source: AGHT+IH32MwYPOPnxnC8b6tdzCaN4E+OZOMI6SEJn8IZdUQ9qOt7/FFS/tPSStSrbvzexSZI8PZ2juqX4xLKGNVe1uQ= X-Received: by 2002:ac8:5d42:0:b0:472:fa6:ce41 with SMTP id d75a77b69052e-4720fa6d056mr55656051cf.44.1740033846248; Wed, 19 Feb 2025 22:44:06 -0800 (PST) MIME-Version: 1.0 References: <202502192109.5ifhfegolh6w@alvherre.pgsql> In-Reply-To: <202502192109.5ifhfegolh6w@alvherre.pgsql> From: Mahendra Singh Thalor Date: Thu, 20 Feb 2025 12:13:54 +0530 X-Gm-Features: AWEUYZlqQvcNbu51TC749xQxCzXhoA7Yev024m2PN4z1cuL5lAnczfxFTZeGMvQ Message-ID: Subject: Re: Non-text mode for pg_dumpall To: =?UTF-8?Q?=C3=81lvaro_Herrera?= Cc: jian he , Srinath Reddy , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000004da983062e8d33cc" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000004da983062e8d33cc Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks =C3=81lvaro for feedback. On Thu, 20 Feb 2025 at 02:39, =C3=81lvaro Herrera = wrote: > > Hello, > > I think the business with an evergrowing on_exit list needs a different > solution than a gigantic array of entries. Maybe it would make sense to > restructure that code so that there's a single on_exit item, but there > exists a list of per-database entries to clean up which are all done in > one call of the function. Then you don't need to change the hardcoded > MAX_ON_EXIT_NICELY array size there. > In the latest patch, I added one new function to clean index(on_exit_nicely_index) with each database restore. > I think it would be better to have a preparatory 0001 patch that just > moves the code to the new files, without touching anything else, and > then the new feature is introduced as a separate 0002 commit. Fixed. > > You still have a bunch of XXX items here and there which look to me like > they need to be handled before this patch can be considered final, plus Fixed. > the TODOs in the commit message. Please pgindent. I am facing some errors in pgindent. I will run pgindent in the next versio= n. Here, I am attaching updated patches for review and testing. --=20 Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --0000000000004da983062e8d33cc Content-Type: application/octet-stream; name="v19_0001_move-common-code-of-pg_dumpall-and-pg_restore-to-new_file.patch" Content-Disposition: attachment; filename="v19_0001_move-common-code-of-pg_dumpall-and-pg_restore-to-new_file.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m7cz72fj0 RnJvbSA3YTdjMjE3M2VhMDM1YzBjYTA3MzUzMzk3MzU0NWYwNjFkZjRiNDkyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogVGh1LCAyMCBGZWIgMjAyNSAwOToxMDoyMyArMDUzMApTdWJqZWN0OiBbUEFU Q0ggMS8yXSBtb3ZlIGNvbW1vbiBjb2RlIG9mIHBnX2R1bXBhbGwgYW5kIHBnX3Jlc3RvcmUgdG8g bmV3IGZpbGUKCmNvbm5lY3REYXRhYmFzZSBpcyB1c2VkIGJ5IGJvdGggcGdfZHVtcGFsbCBhbmQg cGdfcmVzdG9yZSBzbwptb3ZlIGNvbW1vbiBjb2RlIHRvIG5ldyBmaWxlLgotLS0KIHNyYy9iaW4v cGdfZHVtcC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9iaW4vcGdfZHVt cC9jb21tb25fZHVtcGFsbF9yZXN0b3JlLmMgfCAyODYgKysrKysrKysrKysrKysrKysrKysrKysK IHNyYy9iaW4vcGdfZHVtcC9jb21tb25fZHVtcGFsbF9yZXN0b3JlLmggfCAgMjQgKysKIHNyYy9i aW4vcGdfZHVtcC9tZXNvbi5idWlsZCAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9wZ19k dW1wL3BnX2R1bXBhbGwuYyAgICAgICAgICAgICB8IDI2OCArLS0tLS0tLS0tLS0tLS0tLS0tLS0K IDUgZmlsZXMgY2hhbmdlZCwgMzIxIGluc2VydGlvbnMoKyksIDI2MiBkZWxldGlvbnMoLSkKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ19kdW1wL2NvbW1vbl9kdW1wYWxsX3Jlc3Rv cmUuaAoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZSBiL3NyYy9iaW4vcGdf ZHVtcC9NYWtlZmlsZQppbmRleCAyMzNhZDE1Y2E3NS4uODYwMDZkMTExYzMgMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZQorKysgYi9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUK QEAgLTUwLDggKzUwLDggQEAgcGdfZHVtcDogcGdfZHVtcC5vIGNvbW1vbi5vIHBnX2R1bXBfc29y dC5vICQoT0JKUykgfCBzdWJtYWtlLWxpYnBxIHN1Ym1ha2UtbGlicGcKIHBnX3Jlc3RvcmU6IHBn X3Jlc3RvcmUubyAkKE9CSlMpIHwgc3VibWFrZS1saWJwcSBzdWJtYWtlLWxpYnBncG9ydCBzdWJt YWtlLWxpYnBnZmV1dGlscwogCSQoQ0MpICQoQ0ZMQUdTKSBwZ19yZXN0b3JlLm8gJChPQkpTKSAk KExERkxBR1MpICQoTERGTEFHU19FWCkgJChMSUJTKSAtbyAkQCQoWCkKIAotcGdfZHVtcGFsbDog cGdfZHVtcGFsbC5vIGR1bXB1dGlscy5vIGZpbHRlci5vICQoV0lOMzJSRVMpIHwgc3VibWFrZS1s aWJwcSBzdWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxpYnBnZmV1dGlscwotCSQoQ0MpICQoQ0ZM QUdTKSBwZ19kdW1wYWxsLm8gZHVtcHV0aWxzLm8gZmlsdGVyLm8gJChXSU4zMlJFUykgJChMREZM QUdTKSAkKExERkxBR1NfRVgpICQoTElCUykgLW8gJEAkKFgpCitwZ19kdW1wYWxsOiBwZ19kdW1w YWxsLm8gZHVtcHV0aWxzLm8gZmlsdGVyLm8gY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5vICQoV0lO MzJSRVMpIHwgc3VibWFrZS1saWJwcSBzdWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxpYnBnZmV1 dGlscworCSQoQ0MpICQoQ0ZMQUdTKSBwZ19kdW1wYWxsLm8gZHVtcHV0aWxzLm8gZmlsdGVyLm8g Y29tbW9uX2R1bXBhbGxfcmVzdG9yZS5vICQoV0lOMzJSRVMpICQoTERGTEFHUykgJChMREZMQUdT X0VYKSAkKExJQlMpIC1vICRAJChYKQogCiBpbnN0YWxsOiBhbGwgaW5zdGFsbGRpcnMKIAkkKElO U1RBTExfUFJPR1JBTSkgcGdfZHVtcCQoWCkgJyQoREVTVERJUikkKGJpbmRpciknL3BnX2R1bXAk KFgpCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5j IGIvc3JjL2Jpbi9wZ19kdW1wL2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjE2MmNmNjk0MTIKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5jCkBAIC0wLDAgKzEsMjg2 IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBjb21tb25fZHVtcGFsbF9yZXN0b3JlLmMK KyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9i YWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVn ZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogVGhpcyBpcyBhIGNv bW1vbiBmaWxlIGZvciBwZ19kdW1wYWxsIGFuZCBwZ19yZXN0b3JlLgorICogc3JjL2Jpbi9wZ19k dW1wL2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICov CisKKyNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgorCisjaW5jbHVkZSAiY29tbW9uL2Nvbm5lY3Qu aCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5oIgorI2luY2x1ZGUgImNvbW1vbi9zdHJpbmcu aCIKKyNpbmNsdWRlICJjb21tb25fZHVtcGFsbF9yZXN0b3JlLmgiCisjaW5jbHVkZSAiZHVtcHV0 aWxzLmgiCisjaW5jbHVkZSAiZmVfdXRpbHMvc3RyaW5nX3V0aWxzLmgiCisKK3N0YXRpYyBjaGFy ICpjb25zdHJ1Y3RDb25uU3RyKGNvbnN0IGNoYXIgKiprZXl3b3JkcywgY29uc3QgY2hhciAqKnZh bHVlcyk7CisjZGVmaW5lIGV4aXRfbmljZWx5KGNvZGUpIGV4aXQoY29kZSkKKworLyoKKyAqIGNv bm5lY3REYXRhYmFzZQorICoKKyAqIE1ha2UgYSBkYXRhYmFzZSBjb25uZWN0aW9uIHdpdGggdGhl IGdpdmVuIHBhcmFtZXRlcnMuICBBbgorICogaW50ZXJhY3RpdmUgcGFzc3dvcmQgcHJvbXB0IGlz IGF1dG9tYXRpY2FsbHkgaXNzdWVkIGlmIHJlcXVpcmVkLgorICoKKyAqIElmIGZhaWxfb25fZXJy b3IgaXMgZmFsc2UsIHdlIHJldHVybiBOVUxMIHdpdGhvdXQgcHJpbnRpbmcgYW55IG1lc3NhZ2UK KyAqIG9uIGZhaWx1cmUsIGJ1dCBwcmVzZXJ2ZSBhbnkgcHJvbXB0ZWQgcGFzc3dvcmQgZm9yIHRo ZSBuZXh0IHRyeS4KKyAqCisgKiBPbiBzdWNjZXNzLCB0aGUgZ2xvYmFsIHZhcmlhYmxlICdjb25u c3RyJyBpcyBzZXQgdG8gYSBjb25uZWN0aW9uIHN0cmluZworICogY29udGFpbmluZyB0aGUgb3B0 aW9ucyB1c2VkLgorICovCitQR2Nvbm4gKgorY29ubmVjdERhdGFiYXNlKGNvbnN0IGNoYXIgKmRi bmFtZSwgY29uc3QgY2hhciAqY29ubmVjdGlvbl9zdHJpbmcsCisJCQkJY29uc3QgY2hhciAqcGdo b3N0LCBjb25zdCBjaGFyICpwZ3BvcnQsIGNvbnN0IGNoYXIgKnBndXNlciwKKwkJCQl0cml2YWx1 ZSBwcm9tcHRfcGFzc3dvcmQsIGJvb2wgZmFpbF9vbl9lcnJvciwgY29uc3QgY2hhciAqcHJvZ25h bWUsCisJCQkJY29uc3QgY2hhciAqKmNvbm5zdHIsIGludCAqc2VydmVyX3ZlcnNpb24pCit7CisJ UEdjb25uCSAgICpjb25uOworCWJvb2wJCW5ld19wYXNzOworCWNvbnN0IGNoYXIgKnJlbW90ZXZl cnNpb25fc3RyOworCWludAkJCW15X3ZlcnNpb247CisJY29uc3QgY2hhciAqKmtleXdvcmRzID0g TlVMTDsKKwljb25zdCBjaGFyICoqdmFsdWVzID0gTlVMTDsKKwlQUWNvbm5pbmZvT3B0aW9uICpj b25uX29wdHMgPSBOVUxMOworCXN0YXRpYyBjaGFyICpwYXNzd29yZCA9IE5VTEw7CisJaW50CQkJ c2VydmVyX3ZlcnNpb25fdGVtcDsKKworCWlmIChwcm9tcHRfcGFzc3dvcmQgPT0gVFJJX1lFUyAm JiAhcGFzc3dvcmQpCisJCXBhc3N3b3JkID0gc2ltcGxlX3Byb21wdCgiUGFzc3dvcmQ6ICIsIGZh bHNlKTsKKworCS8qCisJICogU3RhcnQgdGhlIGNvbm5lY3Rpb24uICBMb29wIHVudGlsIHdlIGhh dmUgYSBwYXNzd29yZCBpZiByZXF1ZXN0ZWQgYnkKKwkgKiBiYWNrZW5kLgorCSAqLworCWRvCisJ eworCQlpbnQJCQlhcmdjb3VudCA9IDY7CisJCVBRY29ubmluZm9PcHRpb24gKmNvbm5fb3B0Owor CQljaGFyCSAgICplcnJfbXNnID0gTlVMTDsKKwkJaW50CQkJaSA9IDA7CisKKwkJZnJlZShrZXl3 b3Jkcyk7CisJCWZyZWUodmFsdWVzKTsKKwkJUFFjb25uaW5mb0ZyZWUoY29ubl9vcHRzKTsKKwor CQkvKgorCQkgKiBNZXJnZSB0aGUgY29ubmVjdGlvbiBpbmZvIGlucHV0cyBnaXZlbiBpbiBmb3Jt IG9mIGNvbm5lY3Rpb24gc3RyaW5nCisJCSAqIGFuZCBvdGhlciBvcHRpb25zLiAgRXhwbGljaXRs eSBkaXNjYXJkIGFueSBkYm5hbWUgdmFsdWUgaW4gdGhlCisJCSAqIGNvbm5lY3Rpb24gc3RyaW5n OyBvdGhlcndpc2UsIFBRY29ubmVjdGRiUGFyYW1zKCkgd291bGQgaW50ZXJwcmV0CisJCSAqIHRo YXQgdmFsdWUgYXMgYmVpbmcgaXRzZWxmIGEgY29ubmVjdGlvbiBzdHJpbmcuCisJCSAqLworCQlp ZiAoY29ubmVjdGlvbl9zdHJpbmcpCisJCXsKKwkJCWNvbm5fb3B0cyA9IFBRY29ubmluZm9QYXJz ZShjb25uZWN0aW9uX3N0cmluZywgJmVycl9tc2cpOworCQkJaWYgKGNvbm5fb3B0cyA9PSBOVUxM KQorCQkJCXBnX2ZhdGFsKCIlcyIsIGVycl9tc2cpOworCisJCQlmb3IgKGNvbm5fb3B0ID0gY29u bl9vcHRzOyBjb25uX29wdC0+a2V5d29yZCAhPSBOVUxMOyBjb25uX29wdCsrKQorCQkJeworCQkJ CWlmIChjb25uX29wdC0+dmFsICE9IE5VTEwgJiYgY29ubl9vcHQtPnZhbFswXSAhPSAnXDAnICYm CisJCQkJCXN0cmNtcChjb25uX29wdC0+a2V5d29yZCwgImRibmFtZSIpICE9IDApCisJCQkJCWFy Z2NvdW50Kys7CisJCQl9CisKKwkJCWtleXdvcmRzID0gcGdfbWFsbG9jMCgoYXJnY291bnQgKyAx KSAqIHNpemVvZigqa2V5d29yZHMpKTsKKwkJCXZhbHVlcyA9IHBnX21hbGxvYzAoKGFyZ2NvdW50 ICsgMSkgKiBzaXplb2YoKnZhbHVlcykpOworCisJCQlmb3IgKGNvbm5fb3B0ID0gY29ubl9vcHRz OyBjb25uX29wdC0+a2V5d29yZCAhPSBOVUxMOyBjb25uX29wdCsrKQorCQkJeworCQkJCWlmIChj b25uX29wdC0+dmFsICE9IE5VTEwgJiYgY29ubl9vcHQtPnZhbFswXSAhPSAnXDAnICYmCisJCQkJ CXN0cmNtcChjb25uX29wdC0+a2V5d29yZCwgImRibmFtZSIpICE9IDApCisJCQkJeworCQkJCQlr ZXl3b3Jkc1tpXSA9IGNvbm5fb3B0LT5rZXl3b3JkOworCQkJCQl2YWx1ZXNbaV0gPSBjb25uX29w dC0+dmFsOworCQkJCQlpKys7CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJa2V5 d29yZHMgPSBwZ19tYWxsb2MwKChhcmdjb3VudCArIDEpICogc2l6ZW9mKCprZXl3b3JkcykpOwor CQkJdmFsdWVzID0gcGdfbWFsbG9jMCgoYXJnY291bnQgKyAxKSAqIHNpemVvZigqdmFsdWVzKSk7 CisJCX0KKworCQlpZiAocGdob3N0KQorCQl7CisJCQlrZXl3b3Jkc1tpXSA9ICJob3N0IjsKKwkJ CXZhbHVlc1tpXSA9IHBnaG9zdDsKKwkJCWkrKzsKKwkJfQorCQlpZiAocGdwb3J0KQorCQl7CisJ CQlrZXl3b3Jkc1tpXSA9ICJwb3J0IjsKKwkJCXZhbHVlc1tpXSA9IHBncG9ydDsKKwkJCWkrKzsK KwkJfQorCQlpZiAocGd1c2VyKQorCQl7CisJCQlrZXl3b3Jkc1tpXSA9ICJ1c2VyIjsKKwkJCXZh bHVlc1tpXSA9IHBndXNlcjsKKwkJCWkrKzsKKwkJfQorCQlpZiAocGFzc3dvcmQpCisJCXsKKwkJ CWtleXdvcmRzW2ldID0gInBhc3N3b3JkIjsKKwkJCXZhbHVlc1tpXSA9IHBhc3N3b3JkOworCQkJ aSsrOworCQl9CisJCWlmIChkYm5hbWUpCisJCXsKKwkJCWtleXdvcmRzW2ldID0gImRibmFtZSI7 CisJCQl2YWx1ZXNbaV0gPSBkYm5hbWU7CisJCQlpKys7CisJCX0KKwkJa2V5d29yZHNbaV0gPSAi ZmFsbGJhY2tfYXBwbGljYXRpb25fbmFtZSI7CisJCXZhbHVlc1tpXSA9IHByb2duYW1lOworCQlp Kys7CisKKwkJbmV3X3Bhc3MgPSBmYWxzZTsKKwkJY29ubiA9IFBRY29ubmVjdGRiUGFyYW1zKGtl eXdvcmRzLCB2YWx1ZXMsIHRydWUpOworCisJCWlmICghY29ubikKKwkJCXBnX2ZhdGFsKCJjb3Vs ZCBub3QgY29ubmVjdCB0byBkYXRhYmFzZSBcIiVzXCIiLCBkYm5hbWUpOworCisJCWlmIChQUXN0 YXR1cyhjb25uKSA9PSBDT05ORUNUSU9OX0JBRCAmJgorCQkJUFFjb25uZWN0aW9uTmVlZHNQYXNz d29yZChjb25uKSAmJgorCQkJIXBhc3N3b3JkICYmCisJCQlwcm9tcHRfcGFzc3dvcmQgIT0gVFJJ X05PKQorCQl7CisJCQlQUWZpbmlzaChjb25uKTsKKwkJCXBhc3N3b3JkID0gc2ltcGxlX3Byb21w dCgiUGFzc3dvcmQ6ICIsIGZhbHNlKTsKKwkJCW5ld19wYXNzID0gdHJ1ZTsKKwkJfQorCX0gd2hp bGUgKG5ld19wYXNzKTsKKworCS8qIGNoZWNrIHRvIHNlZSB0aGF0IHRoZSBiYWNrZW5kIGNvbm5l Y3Rpb24gd2FzIHN1Y2Nlc3NmdWxseSBtYWRlICovCisJaWYgKFBRc3RhdHVzKGNvbm4pID09IENP Tk5FQ1RJT05fQkFEKQorCXsKKwkJaWYgKGZhaWxfb25fZXJyb3IpCisJCQlwZ19mYXRhbCgiJXMi LCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisJCWVsc2UKKwkJeworCQkJUFFmaW5pc2goY29ubik7 CisKKwkJCWZyZWUoa2V5d29yZHMpOworCQkJZnJlZSh2YWx1ZXMpOworCQkJUFFjb25uaW5mb0Zy ZWUoY29ubl9vcHRzKTsKKworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwkvKgorCSAqIE9r LCBjb25uZWN0ZWQgc3VjY2Vzc2Z1bGx5LiBSZW1lbWJlciB0aGUgb3B0aW9ucyB1c2VkLCBpbiB0 aGUgZm9ybSBvZiBhCisJICogY29ubmVjdGlvbiBzdHJpbmcuCisJICovCisJaWYgKGNvbm5zdHIp CisJCSpjb25uc3RyID0gY29uc3RydWN0Q29ublN0cihrZXl3b3JkcywgdmFsdWVzKTsKKworCWZy ZWUoa2V5d29yZHMpOworCWZyZWUodmFsdWVzKTsKKwlQUWNvbm5pbmZvRnJlZShjb25uX29wdHMp OworCisJLyogQ2hlY2sgdmVyc2lvbiAqLworCXJlbW90ZXZlcnNpb25fc3RyID0gUFFwYXJhbWV0 ZXJTdGF0dXMoY29ubiwgInNlcnZlcl92ZXJzaW9uIik7CisJaWYgKCFyZW1vdGV2ZXJzaW9uX3N0 cikKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBnZXQgc2VydmVyIHZlcnNpb24iKTsKKwlzZXJ2ZXJf dmVyc2lvbl90ZW1wID0gUFFzZXJ2ZXJWZXJzaW9uKGNvbm4pOworCWlmIChzZXJ2ZXJfdmVyc2lv bl90ZW1wID09IDApCisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcGFyc2Ugc2VydmVyIHZlcnNpb24g XCIlc1wiIiwKKwkJCQkgcmVtb3RldmVyc2lvbl9zdHIpOworCisJLyogSWYgbmVlZGVkLCB0aGVu IGNvcHkgc2VydmVyIHZlcnNpb24gdG8gb3V0ZXIgZnVuY3Rpb24uICovCisJaWYgKHNlcnZlcl92 ZXJzaW9uKQorCQkqc2VydmVyX3ZlcnNpb24gPSBzZXJ2ZXJfdmVyc2lvbl90ZW1wOworCisJbXlf dmVyc2lvbiA9IFBHX1ZFUlNJT05fTlVNOworCisJLyoKKwkgKiBXZSBhbGxvdyB0aGUgc2VydmVy IHRvIGJlIGJhY2sgdG8gOS4yLCBhbmQgdXAgdG8gYW55IG1pbm9yIHJlbGVhc2Ugb2YKKwkgKiBv dXIgb3duIG1ham9yIHZlcnNpb24uICAoU2VlIGFsc28gdmVyc2lvbiBjaGVjayBpbiBwZ19kdW1w LmMuKQorCSAqLworCWlmIChteV92ZXJzaW9uICE9IHNlcnZlcl92ZXJzaW9uX3RlbXAKKwkJJiYg KHNlcnZlcl92ZXJzaW9uX3RlbXAgPCA5MDIwMCB8fAorCQkJKHNlcnZlcl92ZXJzaW9uX3RlbXAg LyAxMDApID4gKG15X3ZlcnNpb24gLyAxMDApKSkKKwl7CisJCXBnX2xvZ19lcnJvcigiYWJvcnRp bmcgYmVjYXVzZSBvZiBzZXJ2ZXIgdmVyc2lvbiBtaXNtYXRjaCIpOworCQlwZ19sb2dfZXJyb3Jf ZGV0YWlsKCJzZXJ2ZXIgdmVyc2lvbjogJXM7ICVzIHZlcnNpb246ICVzIiwKKwkJCQkJCQlyZW1v dGV2ZXJzaW9uX3N0ciwgcHJvZ25hbWUsIFBHX1ZFUlNJT04pOworCQlleGl0X25pY2VseSgxKTsK Kwl9CisKKwlQUWNsZWFyKGV4ZWN1dGVRdWVyeShjb25uLCBBTFdBWVNfU0VDVVJFX1NFQVJDSF9Q QVRIX1NRTCkpOworCisJcmV0dXJuIGNvbm47Cit9CisKKy8qCisgKiBjb25zdHJ1Y3RDb25uU3Ry CisgKgorICogQ29uc3RydWN0IGEgY29ubmVjdGlvbiBzdHJpbmcgZnJvbSB0aGUgZ2l2ZW4ga2V5 d29yZC92YWx1ZSBwYWlycy4gSXQgaXMKKyAqIHVzZWQgdG8gcGFzcyB0aGUgY29ubmVjdGlvbiBv cHRpb25zIHRvIHRoZSBwZ19kdW1wIHN1YnByb2Nlc3MuCisgKgorICogVGhlIGZvbGxvd2luZyBw YXJhbWV0ZXJzIGFyZSBleGNsdWRlZDoKKyAqCWRibmFtZQkJLSB2YXJpZXMgaW4gZWFjaCBwZ19k dW1wIGludm9jYXRpb24KKyAqCXBhc3N3b3JkCS0gaXQncyBub3Qgc2VjdXJlIHRvIHBhc3MgYSBw YXNzd29yZCBvbiB0aGUgY29tbWFuZCBsaW5lCisgKglmYWxsYmFja19hcHBsaWNhdGlvbl9uYW1l IC0gd2UnbGwgbGV0IHBnX2R1bXAgc2V0IGl0CisgKi8KK3N0YXRpYyBjaGFyICoKK2NvbnN0cnVj dENvbm5TdHIoY29uc3QgY2hhciAqKmtleXdvcmRzLCBjb25zdCBjaGFyICoqdmFsdWVzKQorewor CVBRRXhwQnVmZmVyIGJ1ZiA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJY2hhcgkgICAqY29ubnN0 cjsKKwlpbnQJCQlpOworCWJvb2wJCWZpcnN0a2V5d29yZCA9IHRydWU7CisKKwkvKiBDb25zdHJ1 Y3QgYSBuZXcgY29ubmVjdGlvbiBzdHJpbmcgaW4ga2V5PSd2YWx1ZScgZm9ybWF0LiAqLworCWZv ciAoaSA9IDA7IGtleXdvcmRzW2ldICE9IE5VTEw7IGkrKykKKwl7CisJCWlmIChzdHJjbXAoa2V5 d29yZHNbaV0sICJkYm5hbWUiKSA9PSAwIHx8CisJCQlzdHJjbXAoa2V5d29yZHNbaV0sICJwYXNz d29yZCIpID09IDAgfHwKKwkJCXN0cmNtcChrZXl3b3Jkc1tpXSwgImZhbGxiYWNrX2FwcGxpY2F0 aW9uX25hbWUiKSA9PSAwKQorCQkJY29udGludWU7CisKKwkJaWYgKCFmaXJzdGtleXdvcmQpCisJ CQlhcHBlbmRQUUV4cEJ1ZmZlckNoYXIoYnVmLCAnICcpOworCQlmaXJzdGtleXdvcmQgPSBmYWxz ZTsKKwkJYXBwZW5kUFFFeHBCdWZmZXIoYnVmLCAiJXM9Iiwga2V5d29yZHNbaV0pOworCQlhcHBl bmRDb25uU3RyVmFsKGJ1ZiwgdmFsdWVzW2ldKTsKKwl9CisKKwljb25uc3RyID0gcGdfc3RyZHVw KGJ1Zi0+ZGF0YSk7CisJZGVzdHJveVBRRXhwQnVmZmVyKGJ1Zik7CisJcmV0dXJuIGNvbm5zdHI7 Cit9CisKKy8qCisgKiBleGVjdXRlUXVlcnkKKyAqCisgKiBSdW4gYSBxdWVyeSwgcmV0dXJuIHRo ZSByZXN1bHRzLCBleGl0IHByb2dyYW0gb24gZmFpbHVyZS4KKyAqLworUEdyZXN1bHQgKgorZXhl Y3V0ZVF1ZXJ5KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpCit7CisJUEdyZXN1bHQg ICAqcmVzOworCisJcGdfbG9nX2luZm8oImV4ZWN1dGluZyAlcyIsIHF1ZXJ5KTsKKworCXJlcyA9 IFBRZXhlYyhjb25uLCBxdWVyeSk7CisJaWYgKCFyZXMgfHwKKwkJUFFyZXN1bHRTdGF0dXMocmVz KSAhPSBQR1JFU19UVVBMRVNfT0spCisJeworCQlwZ19sb2dfZXJyb3IoInF1ZXJ5IGZhaWxlZDog JXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisJCXBnX2xvZ19lcnJvcl9kZXRhaWwoIlF1ZXJ5 IHdhczogJXMiLCBxdWVyeSk7CisJCVBRZmluaXNoKGNvbm4pOworCQlleGl0X25pY2VseSgxKTsK Kwl9CisKKwlyZXR1cm4gcmVzOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbW1v bl9kdW1wYWxsX3Jlc3RvcmUuaCBiL3NyYy9iaW4vcGdfZHVtcC9jb21tb25fZHVtcGFsbF9yZXN0 b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjdmZTFjMDBhYjcx Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbW1vbl9kdW1wYWxsX3Jlc3Rv cmUuaApAQCAtMCwwICsxLDI0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBjb21tb25f ZHVtcGFsbF9yZXN0b3JlLmgKKyAqICAgICAgQ29tbW9uIGhlYWRlciBmaWxlIGZvciBwZ19kdW1w YWxsIGFuZCBwZ19yZXN0b3JlCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIw MjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQor ICoKKyAqIElERU5USUZJQ0FUSU9OCisgKiAgICBzcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBh bGxfcmVzdG9yZS5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgQ09NTU9O X0RVTVBBTExfUkVTVE9SRV9ICisjZGVmaW5lIENPTU1PTl9EVU1QQUxMX1JFU1RPUkVfSAorCisj aW5jbHVkZSAicGdfYmFja3VwLmgiCisKK2V4dGVybiBQR2Nvbm4gKmNvbm5lY3REYXRhYmFzZShj b25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNvbm5lY3Rpb25fc3RyaW5nLCBjb25zdCBj aGFyICpwZ2hvc3QsCisJCQkJCQkJICAgY29uc3QgY2hhciAqcGdwb3J0LCBjb25zdCBjaGFyICpw Z3VzZXIsCisJCQkJCQkJICAgdHJpdmFsdWUgcHJvbXB0X3Bhc3N3b3JkLCBib29sIGZhaWxfb25f ZXJyb3IsCisJCQkJCQkJICAgY29uc3QgY2hhciAqcHJvZ25hbWUsIGNvbnN0IGNoYXIgKipjb25u c3RyLCBpbnQgKnNlcnZlcl92ZXJzaW9uKTsKK2V4dGVybiAgUEdyZXN1bHQgKmV4ZWN1dGVRdWVy eShQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KTsKKyNlbmRpZiAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogQ09NTU9OX0RVTVBBTExfUkVTVE9SRV9IICovCmRpZmYgLS1naXQgYS9z cmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQK aW5kZXggNjAzYmE2Y2ZiZjAuLjk3ZGJmYWViNjdmIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1 bXAvbWVzb24uYnVpbGQKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCkBAIC00OSw2 ICs0OSw3IEBAIGJpbl90YXJnZXRzICs9IHBnX2R1bXAKIAogcGdfZHVtcGFsbF9zb3VyY2VzID0g ZmlsZXMoCiAgICdwZ19kdW1wYWxsLmMnLAorICAnY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5jJywK ICkKIAogaWYgaG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3MnCmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2R1bXAvcGdfZHVtcGFsbC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYwppbmRleCA2 NGE2MGEyNjA5Mi4uZTI3OTkwM2Y0NjkgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19k dW1wYWxsLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYwpAQCAtMjAsNiArMjAs NyBAQAogCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hdXRoaWRfZC5oIgogI2luY2x1ZGUgImNvbW1v bi9jb25uZWN0LmgiCisjaW5jbHVkZSAiY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5oIgogI2luY2x1 ZGUgImNvbW1vbi9maWxlX3V0aWxzLmgiCiAjaW5jbHVkZSAiY29tbW9uL2hhc2hmbl91bnN0YWJs ZS5oIgogI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmgiCkBAIC03MSwxMiArNzIsNiBAQCBzdGF0 aWMgdm9pZCBidWlsZFNoU2VjTGFiZWxzKFBHY29ubiAqY29ubiwKIAkJCQkJCQkgY29uc3QgY2hh ciAqY2F0YWxvZ19uYW1lLCBPaWQgb2JqZWN0SWQsCiAJCQkJCQkJIGNvbnN0IGNoYXIgKm9ianR5 cGUsIGNvbnN0IGNoYXIgKm9iam5hbWUsCiAJCQkJCQkJIFBRRXhwQnVmZmVyIGJ1ZmZlcik7Ci1z dGF0aWMgUEdjb25uICpjb25uZWN0RGF0YWJhc2UoY29uc3QgY2hhciAqZGJuYW1lLAotCQkJCQkJ CSAgIGNvbnN0IGNoYXIgKmNvbm5lY3Rpb25fc3RyaW5nLCBjb25zdCBjaGFyICpwZ2hvc3QsCi0J CQkJCQkJICAgY29uc3QgY2hhciAqcGdwb3J0LCBjb25zdCBjaGFyICpwZ3VzZXIsCi0JCQkJCQkJ ICAgdHJpdmFsdWUgcHJvbXB0X3Bhc3N3b3JkLCBib29sIGZhaWxfb25fZXJyb3IpOwotc3RhdGlj IGNoYXIgKmNvbnN0cnVjdENvbm5TdHIoY29uc3QgY2hhciAqKmtleXdvcmRzLCBjb25zdCBjaGFy ICoqdmFsdWVzKTsKLXN0YXRpYyBQR3Jlc3VsdCAqZXhlY3V0ZVF1ZXJ5KFBHY29ubiAqY29ubiwg Y29uc3QgY2hhciAqcXVlcnkpOwogc3RhdGljIHZvaWQgZXhlY3V0ZUNvbW1hbmQoUEdjb25uICpj b25uLCBjb25zdCBjaGFyICpxdWVyeSk7CiBzdGF0aWMgdm9pZCBleHBhbmRfZGJuYW1lX3BhdHRl cm5zKFBHY29ubiAqY29ubiwgU2ltcGxlU3RyaW5nTGlzdCAqcGF0dGVybnMsCiAJCQkJCQkJCSAg IFNpbXBsZVN0cmluZ0xpc3QgKm5hbWVzKTsKQEAgLTg1LDcgKzgwLDcgQEAgc3RhdGljIHZvaWQg cmVhZF9kdW1wYWxsX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFNpbXBsZVN0cmluZ0xp c3QgKnBhdHRlcm4KIHN0YXRpYyBjaGFyIHBnX2R1bXBfYmluW01BWFBHUEFUSF07CiBzdGF0aWMg Y29uc3QgY2hhciAqcHJvZ25hbWU7CiBzdGF0aWMgUFFFeHBCdWZmZXIgcGdkdW1wb3B0czsKLXN0 YXRpYyBjaGFyICpjb25uc3RyID0gIiI7CitzdGF0aWMgY29uc3QgY2hhciAqY29ubnN0ciA9ICIi Owogc3RhdGljIGJvb2wgb3V0cHV0X2NsZWFuID0gZmFsc2U7CiBzdGF0aWMgYm9vbCBza2lwX2Fj bHMgPSBmYWxzZTsKIHN0YXRpYyBib29sIHZlcmJvc2UgPSBmYWxzZTsKQEAgLTQ2OCw3ICs0NjMs OCBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJaWYgKHBnZGIpCiAJewogCQljb25u ID0gY29ubmVjdERhdGFiYXNlKHBnZGIsIGNvbm5zdHIsIHBnaG9zdCwgcGdwb3J0LCBwZ3VzZXIs Ci0JCQkJCQkJICAgcHJvbXB0X3Bhc3N3b3JkLCBmYWxzZSk7CisJCQkJCQkJICAgcHJvbXB0X3Bh c3N3b3JkLCBmYWxzZSwKKwkJCQkJCQkgICBwcm9nbmFtZSwgJmNvbm5zdHIsICZzZXJ2ZXJfdmVy c2lvbik7CiAKIAkJaWYgKCFjb25uKQogCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb25uZWN0IHRv IGRhdGFiYXNlIFwiJXNcIiIsIHBnZGIpOwpAQCAtNDc2LDEwICs0NzIsMTIgQEAgbWFpbihpbnQg YXJnYywgY2hhciAqYXJndltdKQogCWVsc2UKIAl7CiAJCWNvbm4gPSBjb25uZWN0RGF0YWJhc2Uo InBvc3RncmVzIiwgY29ubnN0ciwgcGdob3N0LCBwZ3BvcnQsIHBndXNlciwKLQkJCQkJCQkgICBw cm9tcHRfcGFzc3dvcmQsIGZhbHNlKTsKKwkJCQkJCQkgICBwcm9tcHRfcGFzc3dvcmQsIGZhbHNl LAorCQkJCQkJCSAgIHByb2duYW1lLCAmY29ubnN0ciwgJnNlcnZlcl92ZXJzaW9uKTsKIAkJaWYg KCFjb25uKQogCQkJY29ubiA9IGNvbm5lY3REYXRhYmFzZSgidGVtcGxhdGUxIiwgY29ubnN0ciwg cGdob3N0LCBwZ3BvcnQsIHBndXNlciwKLQkJCQkJCQkJICAgcHJvbXB0X3Bhc3N3b3JkLCB0cnVl KTsKKwkJCQkJCQkJICAgcHJvbXB0X3Bhc3N3b3JkLCB0cnVlLAorCQkJCQkJCQkgICBwcm9nbmFt ZSwgJmNvbm5zdHIsICZzZXJ2ZXJfdmVyc2lvbik7CiAKIAkJaWYgKCFjb25uKQogCQl7CkBAIC0x NjUwLDI1NiArMTY0OCw2IEBAIGJ1aWxkU2hTZWNMYWJlbHMoUEdjb25uICpjb25uLCBjb25zdCBj aGFyICpjYXRhbG9nX25hbWUsIE9pZCBvYmplY3RJZCwKIAlkZXN0cm95UFFFeHBCdWZmZXIoc3Fs KTsKIH0KIAotLyoKLSAqIE1ha2UgYSBkYXRhYmFzZSBjb25uZWN0aW9uIHdpdGggdGhlIGdpdmVu IHBhcmFtZXRlcnMuICBBbgotICogaW50ZXJhY3RpdmUgcGFzc3dvcmQgcHJvbXB0IGlzIGF1dG9t YXRpY2FsbHkgaXNzdWVkIGlmIHJlcXVpcmVkLgotICoKLSAqIElmIGZhaWxfb25fZXJyb3IgaXMg ZmFsc2UsIHdlIHJldHVybiBOVUxMIHdpdGhvdXQgcHJpbnRpbmcgYW55IG1lc3NhZ2UKLSAqIG9u IGZhaWx1cmUsIGJ1dCBwcmVzZXJ2ZSBhbnkgcHJvbXB0ZWQgcGFzc3dvcmQgZm9yIHRoZSBuZXh0 IHRyeS4KLSAqCi0gKiBPbiBzdWNjZXNzLCB0aGUgZ2xvYmFsIHZhcmlhYmxlICdjb25uc3RyJyBp cyBzZXQgdG8gYSBjb25uZWN0aW9uIHN0cmluZwotICogY29udGFpbmluZyB0aGUgb3B0aW9ucyB1 c2VkLgotICovCi1zdGF0aWMgUEdjb25uICoKLWNvbm5lY3REYXRhYmFzZShjb25zdCBjaGFyICpk Ym5hbWUsIGNvbnN0IGNoYXIgKmNvbm5lY3Rpb25fc3RyaW5nLAotCQkJCWNvbnN0IGNoYXIgKnBn aG9zdCwgY29uc3QgY2hhciAqcGdwb3J0LCBjb25zdCBjaGFyICpwZ3VzZXIsCi0JCQkJdHJpdmFs dWUgcHJvbXB0X3Bhc3N3b3JkLCBib29sIGZhaWxfb25fZXJyb3IpCi17Ci0JUEdjb25uCSAgICpj b25uOwotCWJvb2wJCW5ld19wYXNzOwotCWNvbnN0IGNoYXIgKnJlbW90ZXZlcnNpb25fc3RyOwot CWludAkJCW15X3ZlcnNpb247Ci0JY29uc3QgY2hhciAqKmtleXdvcmRzID0gTlVMTDsKLQljb25z dCBjaGFyICoqdmFsdWVzID0gTlVMTDsKLQlQUWNvbm5pbmZvT3B0aW9uICpjb25uX29wdHMgPSBO VUxMOwotCXN0YXRpYyBjaGFyICpwYXNzd29yZCA9IE5VTEw7Ci0KLQlpZiAocHJvbXB0X3Bhc3N3 b3JkID09IFRSSV9ZRVMgJiYgIXBhc3N3b3JkKQotCQlwYXNzd29yZCA9IHNpbXBsZV9wcm9tcHQo IlBhc3N3b3JkOiAiLCBmYWxzZSk7Ci0KLQkvKgotCSAqIFN0YXJ0IHRoZSBjb25uZWN0aW9uLiAg TG9vcCB1bnRpbCB3ZSBoYXZlIGEgcGFzc3dvcmQgaWYgcmVxdWVzdGVkIGJ5Ci0JICogYmFja2Vu ZC4KLQkgKi8KLQlkbwotCXsKLQkJaW50CQkJYXJnY291bnQgPSA2OwotCQlQUWNvbm5pbmZvT3B0 aW9uICpjb25uX29wdDsKLQkJY2hhcgkgICAqZXJyX21zZyA9IE5VTEw7Ci0JCWludAkJCWkgPSAw OwotCi0JCWZyZWUoa2V5d29yZHMpOwotCQlmcmVlKHZhbHVlcyk7Ci0JCVBRY29ubmluZm9GcmVl KGNvbm5fb3B0cyk7Ci0KLQkJLyoKLQkJICogTWVyZ2UgdGhlIGNvbm5lY3Rpb24gaW5mbyBpbnB1 dHMgZ2l2ZW4gaW4gZm9ybSBvZiBjb25uZWN0aW9uIHN0cmluZwotCQkgKiBhbmQgb3RoZXIgb3B0 aW9ucy4gIEV4cGxpY2l0bHkgZGlzY2FyZCBhbnkgZGJuYW1lIHZhbHVlIGluIHRoZQotCQkgKiBj b25uZWN0aW9uIHN0cmluZzsgb3RoZXJ3aXNlLCBQUWNvbm5lY3RkYlBhcmFtcygpIHdvdWxkIGlu dGVycHJldAotCQkgKiB0aGF0IHZhbHVlIGFzIGJlaW5nIGl0c2VsZiBhIGNvbm5lY3Rpb24gc3Ry aW5nLgotCQkgKi8KLQkJaWYgKGNvbm5lY3Rpb25fc3RyaW5nKQotCQl7Ci0JCQljb25uX29wdHMg PSBQUWNvbm5pbmZvUGFyc2UoY29ubmVjdGlvbl9zdHJpbmcsICZlcnJfbXNnKTsKLQkJCWlmIChj b25uX29wdHMgPT0gTlVMTCkKLQkJCQlwZ19mYXRhbCgiJXMiLCBlcnJfbXNnKTsKLQotCQkJZm9y IChjb25uX29wdCA9IGNvbm5fb3B0czsgY29ubl9vcHQtPmtleXdvcmQgIT0gTlVMTDsgY29ubl9v cHQrKykKLQkJCXsKLQkJCQlpZiAoY29ubl9vcHQtPnZhbCAhPSBOVUxMICYmIGNvbm5fb3B0LT52 YWxbMF0gIT0gJ1wwJyAmJgotCQkJCQlzdHJjbXAoY29ubl9vcHQtPmtleXdvcmQsICJkYm5hbWUi KSAhPSAwKQotCQkJCQlhcmdjb3VudCsrOwotCQkJfQotCi0JCQlrZXl3b3JkcyA9IHBnX21hbGxv YzAoKGFyZ2NvdW50ICsgMSkgKiBzaXplb2YoKmtleXdvcmRzKSk7Ci0JCQl2YWx1ZXMgPSBwZ19t YWxsb2MwKChhcmdjb3VudCArIDEpICogc2l6ZW9mKCp2YWx1ZXMpKTsKLQotCQkJZm9yIChjb25u X29wdCA9IGNvbm5fb3B0czsgY29ubl9vcHQtPmtleXdvcmQgIT0gTlVMTDsgY29ubl9vcHQrKykK LQkJCXsKLQkJCQlpZiAoY29ubl9vcHQtPnZhbCAhPSBOVUxMICYmIGNvbm5fb3B0LT52YWxbMF0g IT0gJ1wwJyAmJgotCQkJCQlzdHJjbXAoY29ubl9vcHQtPmtleXdvcmQsICJkYm5hbWUiKSAhPSAw KQotCQkJCXsKLQkJCQkJa2V5d29yZHNbaV0gPSBjb25uX29wdC0+a2V5d29yZDsKLQkJCQkJdmFs dWVzW2ldID0gY29ubl9vcHQtPnZhbDsKLQkJCQkJaSsrOwotCQkJCX0KLQkJCX0KLQkJfQotCQll bHNlCi0JCXsKLQkJCWtleXdvcmRzID0gcGdfbWFsbG9jMCgoYXJnY291bnQgKyAxKSAqIHNpemVv Zigqa2V5d29yZHMpKTsKLQkJCXZhbHVlcyA9IHBnX21hbGxvYzAoKGFyZ2NvdW50ICsgMSkgKiBz aXplb2YoKnZhbHVlcykpOwotCQl9Ci0KLQkJaWYgKHBnaG9zdCkKLQkJewotCQkJa2V5d29yZHNb aV0gPSAiaG9zdCI7Ci0JCQl2YWx1ZXNbaV0gPSBwZ2hvc3Q7Ci0JCQlpKys7Ci0JCX0KLQkJaWYg KHBncG9ydCkKLQkJewotCQkJa2V5d29yZHNbaV0gPSAicG9ydCI7Ci0JCQl2YWx1ZXNbaV0gPSBw Z3BvcnQ7Ci0JCQlpKys7Ci0JCX0KLQkJaWYgKHBndXNlcikKLQkJewotCQkJa2V5d29yZHNbaV0g PSAidXNlciI7Ci0JCQl2YWx1ZXNbaV0gPSBwZ3VzZXI7Ci0JCQlpKys7Ci0JCX0KLQkJaWYgKHBh c3N3b3JkKQotCQl7Ci0JCQlrZXl3b3Jkc1tpXSA9ICJwYXNzd29yZCI7Ci0JCQl2YWx1ZXNbaV0g PSBwYXNzd29yZDsKLQkJCWkrKzsKLQkJfQotCQlpZiAoZGJuYW1lKQotCQl7Ci0JCQlrZXl3b3Jk c1tpXSA9ICJkYm5hbWUiOwotCQkJdmFsdWVzW2ldID0gZGJuYW1lOwotCQkJaSsrOwotCQl9Ci0J CWtleXdvcmRzW2ldID0gImZhbGxiYWNrX2FwcGxpY2F0aW9uX25hbWUiOwotCQl2YWx1ZXNbaV0g PSBwcm9nbmFtZTsKLQkJaSsrOwotCi0JCW5ld19wYXNzID0gZmFsc2U7Ci0JCWNvbm4gPSBQUWNv bm5lY3RkYlBhcmFtcyhrZXl3b3JkcywgdmFsdWVzLCB0cnVlKTsKLQotCQlpZiAoIWNvbm4pCi0J CQlwZ19mYXRhbCgiY291bGQgbm90IGNvbm5lY3QgdG8gZGF0YWJhc2UgXCIlc1wiIiwgZGJuYW1l KTsKLQotCQlpZiAoUFFzdGF0dXMoY29ubikgPT0gQ09OTkVDVElPTl9CQUQgJiYKLQkJCVBRY29u bmVjdGlvbk5lZWRzUGFzc3dvcmQoY29ubikgJiYKLQkJCSFwYXNzd29yZCAmJgotCQkJcHJvbXB0 X3Bhc3N3b3JkICE9IFRSSV9OTykKLQkJewotCQkJUFFmaW5pc2goY29ubik7Ci0JCQlwYXNzd29y ZCA9IHNpbXBsZV9wcm9tcHQoIlBhc3N3b3JkOiAiLCBmYWxzZSk7Ci0JCQluZXdfcGFzcyA9IHRy dWU7Ci0JCX0KLQl9IHdoaWxlIChuZXdfcGFzcyk7Ci0KLQkvKiBjaGVjayB0byBzZWUgdGhhdCB0 aGUgYmFja2VuZCBjb25uZWN0aW9uIHdhcyBzdWNjZXNzZnVsbHkgbWFkZSAqLwotCWlmIChQUXN0 YXR1cyhjb25uKSA9PSBDT05ORUNUSU9OX0JBRCkKLQl7Ci0JCWlmIChmYWlsX29uX2Vycm9yKQot CQkJcGdfZmF0YWwoIiVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOwotCQllbHNlCi0JCXsKLQkJ CVBRZmluaXNoKGNvbm4pOwotCi0JCQlmcmVlKGtleXdvcmRzKTsKLQkJCWZyZWUodmFsdWVzKTsK LQkJCVBRY29ubmluZm9GcmVlKGNvbm5fb3B0cyk7Ci0KLQkJCXJldHVybiBOVUxMOwotCQl9Ci0J fQotCi0JLyoKLQkgKiBPaywgY29ubmVjdGVkIHN1Y2Nlc3NmdWxseS4gUmVtZW1iZXIgdGhlIG9w dGlvbnMgdXNlZCwgaW4gdGhlIGZvcm0gb2YgYQotCSAqIGNvbm5lY3Rpb24gc3RyaW5nLgotCSAq LwotCWNvbm5zdHIgPSBjb25zdHJ1Y3RDb25uU3RyKGtleXdvcmRzLCB2YWx1ZXMpOwotCi0JZnJl ZShrZXl3b3Jkcyk7Ci0JZnJlZSh2YWx1ZXMpOwotCVBRY29ubmluZm9GcmVlKGNvbm5fb3B0cyk7 Ci0KLQkvKiBDaGVjayB2ZXJzaW9uICovCi0JcmVtb3RldmVyc2lvbl9zdHIgPSBQUXBhcmFtZXRl clN0YXR1cyhjb25uLCAic2VydmVyX3ZlcnNpb24iKTsKLQlpZiAoIXJlbW90ZXZlcnNpb25fc3Ry KQotCQlwZ19mYXRhbCgiY291bGQgbm90IGdldCBzZXJ2ZXIgdmVyc2lvbiIpOwotCXNlcnZlcl92 ZXJzaW9uID0gUFFzZXJ2ZXJWZXJzaW9uKGNvbm4pOwotCWlmIChzZXJ2ZXJfdmVyc2lvbiA9PSAw KQotCQlwZ19mYXRhbCgiY291bGQgbm90IHBhcnNlIHNlcnZlciB2ZXJzaW9uIFwiJXNcIiIsCi0J CQkJIHJlbW90ZXZlcnNpb25fc3RyKTsKLQotCW15X3ZlcnNpb24gPSBQR19WRVJTSU9OX05VTTsK LQotCS8qCi0JICogV2UgYWxsb3cgdGhlIHNlcnZlciB0byBiZSBiYWNrIHRvIDkuMiwgYW5kIHVw IHRvIGFueSBtaW5vciByZWxlYXNlIG9mCi0JICogb3VyIG93biBtYWpvciB2ZXJzaW9uLiAgKFNl ZSBhbHNvIHZlcnNpb24gY2hlY2sgaW4gcGdfZHVtcC5jLikKLQkgKi8KLQlpZiAobXlfdmVyc2lv biAhPSBzZXJ2ZXJfdmVyc2lvbgotCQkmJiAoc2VydmVyX3ZlcnNpb24gPCA5MDIwMCB8fAotCQkJ KHNlcnZlcl92ZXJzaW9uIC8gMTAwKSA+IChteV92ZXJzaW9uIC8gMTAwKSkpCi0JewotCQlwZ19s b2dfZXJyb3IoImFib3J0aW5nIGJlY2F1c2Ugb2Ygc2VydmVyIHZlcnNpb24gbWlzbWF0Y2giKTsK LQkJcGdfbG9nX2Vycm9yX2RldGFpbCgic2VydmVyIHZlcnNpb246ICVzOyAlcyB2ZXJzaW9uOiAl cyIsCi0JCQkJCQkJcmVtb3RldmVyc2lvbl9zdHIsIHByb2duYW1lLCBQR19WRVJTSU9OKTsKLQkJ ZXhpdF9uaWNlbHkoMSk7Ci0JfQotCi0JUFFjbGVhcihleGVjdXRlUXVlcnkoY29ubiwgQUxXQVlT X1NFQ1VSRV9TRUFSQ0hfUEFUSF9TUUwpKTsKLQotCXJldHVybiBjb25uOwotfQotCi0vKiAtLS0t LS0tLS0tCi0gKiBDb25zdHJ1Y3QgYSBjb25uZWN0aW9uIHN0cmluZyBmcm9tIHRoZSBnaXZlbiBr ZXl3b3JkL3ZhbHVlIHBhaXJzLiBJdCBpcwotICogdXNlZCB0byBwYXNzIHRoZSBjb25uZWN0aW9u IG9wdGlvbnMgdG8gdGhlIHBnX2R1bXAgc3VicHJvY2Vzcy4KLSAqCi0gKiBUaGUgZm9sbG93aW5n IHBhcmFtZXRlcnMgYXJlIGV4Y2x1ZGVkOgotICoJZGJuYW1lCQktIHZhcmllcyBpbiBlYWNoIHBn X2R1bXAgaW52b2NhdGlvbgotICoJcGFzc3dvcmQJLSBpdCdzIG5vdCBzZWN1cmUgdG8gcGFzcyBh IHBhc3N3b3JkIG9uIHRoZSBjb21tYW5kIGxpbmUKLSAqCWZhbGxiYWNrX2FwcGxpY2F0aW9uX25h bWUgLSB3ZSdsbCBsZXQgcGdfZHVtcCBzZXQgaXQKLSAqIC0tLS0tLS0tLS0KLSAqLwotc3RhdGlj IGNoYXIgKgotY29uc3RydWN0Q29ublN0cihjb25zdCBjaGFyICoqa2V5d29yZHMsIGNvbnN0IGNo YXIgKip2YWx1ZXMpCi17Ci0JUFFFeHBCdWZmZXIgYnVmID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsK LQljaGFyCSAgICpjb25uc3RyOwotCWludAkJCWk7Ci0JYm9vbAkJZmlyc3RrZXl3b3JkID0gdHJ1 ZTsKLQotCS8qIENvbnN0cnVjdCBhIG5ldyBjb25uZWN0aW9uIHN0cmluZyBpbiBrZXk9J3ZhbHVl JyBmb3JtYXQuICovCi0JZm9yIChpID0gMDsga2V5d29yZHNbaV0gIT0gTlVMTDsgaSsrKQotCXsK LQkJaWYgKHN0cmNtcChrZXl3b3Jkc1tpXSwgImRibmFtZSIpID09IDAgfHwKLQkJCXN0cmNtcChr ZXl3b3Jkc1tpXSwgInBhc3N3b3JkIikgPT0gMCB8fAotCQkJc3RyY21wKGtleXdvcmRzW2ldLCAi ZmFsbGJhY2tfYXBwbGljYXRpb25fbmFtZSIpID09IDApCi0JCQljb250aW51ZTsKLQotCQlpZiAo IWZpcnN0a2V5d29yZCkKLQkJCWFwcGVuZFBRRXhwQnVmZmVyQ2hhcihidWYsICcgJyk7Ci0JCWZp cnN0a2V5d29yZCA9IGZhbHNlOwotCQlhcHBlbmRQUUV4cEJ1ZmZlcihidWYsICIlcz0iLCBrZXl3 b3Jkc1tpXSk7Ci0JCWFwcGVuZENvbm5TdHJWYWwoYnVmLCB2YWx1ZXNbaV0pOwotCX0KLQotCWNv bm5zdHIgPSBwZ19zdHJkdXAoYnVmLT5kYXRhKTsKLQlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsK LQlyZXR1cm4gY29ubnN0cjsKLX0KLQotLyoKLSAqIFJ1biBhIHF1ZXJ5LCByZXR1cm4gdGhlIHJl c3VsdHMsIGV4aXQgcHJvZ3JhbSBvbiBmYWlsdXJlLgotICovCi1zdGF0aWMgUEdyZXN1bHQgKgot ZXhlY3V0ZVF1ZXJ5KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpCi17Ci0JUEdyZXN1 bHQgICAqcmVzOwotCi0JcGdfbG9nX2luZm8oImV4ZWN1dGluZyAlcyIsIHF1ZXJ5KTsKLQotCXJl cyA9IFBRZXhlYyhjb25uLCBxdWVyeSk7Ci0JaWYgKCFyZXMgfHwKLQkJUFFyZXN1bHRTdGF0dXMo cmVzKSAhPSBQR1JFU19UVVBMRVNfT0spCi0JewotCQlwZ19sb2dfZXJyb3IoInF1ZXJ5IGZhaWxl ZDogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7Ci0JCXBnX2xvZ19lcnJvcl9kZXRhaWwoIlF1 ZXJ5IHdhczogJXMiLCBxdWVyeSk7Ci0JCVBRZmluaXNoKGNvbm4pOwotCQlleGl0X25pY2VseSgx KTsKLQl9Ci0KLQlyZXR1cm4gcmVzOwotfQotCiAvKgogICogQXMgYWJvdmUgZm9yIGEgU1FMIGNv bW1hbmQgKHdoaWNoIHJldHVybnMgbm90aGluZykuCiAgKi8KLS0gCjIuMzkuMwoK --0000000000004da983062e8d33cc Content-Type: application/octet-stream; name="v19_0002_pg_dumpall-with-non-text_format-20th_feb.patch" Content-Disposition: attachment; filename="v19_0002_pg_dumpall-with-non-text_format-20th_feb.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m7cz72fp1 RnJvbSAwNDY5MThlNTcwMTAzNGNlOGQ1OTFiMmQ2ODFjNTlkMTU3MzU5NjRmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogVGh1LCAyMCBGZWIgMjAyNSAxMTo1NjoyNSArMDUzMApTdWJqZWN0OiBbUEFU Q0ggMi8yXSBwZ19kdW1wYWxsIHdpdGggZGlyZWN0b3J5fHRhcnxjdXN0b20gZm9ybWF0IGFuZCBy ZXN0b3JlCiBpdCAgYnkgcGdfcmVzdG9yZQoKbmV3IG9wdGlvbiB0byBwZ19kdW1wYWxsOgotRiwg LS1mb3JtYXQ9ZHx0fGN8cCAgb3V0cHV0IGZpbGUgZm9ybWF0ICggcGxhaW4gdGV4dCAoZGVmYXVs dCkpCgpFeDoxIC4vcGdfZHVtcGFsbCAtLWZvcm1hdD1kaXJlY3RvcnkgLS1maWxlPWR1bXBEaXJO YW1lCkV4OjIgLi9wZ19kdW1wYWxsIC0tZm9ybWF0PXRhciAtLWZpbGU9ZHVtcERpck5hbWUKRXg6 MyAuL3BnX2R1bXBhbGwgLS1mb3JtYXQ9Y3VzdG9tIC0tZmlsZT1kdW1wRGlyTmFtZQpFeDo0IC4v cGdfZHVtcGFsbCAtLWZvcm1hdD1wbGFpbiAtLWZpbGU9ZHVtcERpck5hbWUKCmR1bXBzIGFyZSBh czoKZ2xvYmFsLmRhdCA6OjogZ2xvYmFsIHNxbCBjb21tYW5kcyBpbiBzaW1wbGUgcGxhaW4gZm9y bWF0Cm1hcC5kYXQuICAgOjo6IGRib2lkIGRibmFtZSAtLS1lbnRyaWVzIGZvciBhbGwgZGF0YWJh c2VzIGluIHNpbXBsZSB0ZXh0IGZvcm0KZGF0YWJhc2VzLiA6OjoKICAgICAgc3ViZGlyICAgICBk Ym9pZDEgIC0+IHRvYy5kYXQgYW5kIGRhdGEgZmlsZXMgaW4gYXJjaGl2ZSBmb3JtYXQKICAgICAg c3ViZGlyICAgICBkYm9pZDIuIC0+IHRvYy5kYXQgYW5kIGRhdGEgZmlsZXMgaW4gYXJjaGl2ZSBm b3JtYXQKICAgICAgICAgICAgICBldGMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk5PVEU6CmlmIG5lZWRl ZCwgcmVzdG9yZSBzaW5nbGUgZGIgYnkgcGFydGljdWxhciBzdWJkaXIKCkV4OiAuL3BnX3Jlc3Rv cmUgLS1mb3JtYXQ9ZGlyZWN0b3J5IC1kIHBvc3RncmVzIGR1bXBEaXJOYW1lL2RhdGFiYXNlcy81 CiAgIC0tIGhlcmUsIDUgaXMgdGhlIGRib2lkIG9mIHBvc3RncmVzIGRiCiAgIC0tIHRvIGdldCBk Ym9pZCwgcmVmZXIgZGJuYW1lIGluIG1hcC5maWxlCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpuZXcgb3B0 aW9ucyB0byBwZ19yZXN0b3JlOgotZywgLS1nbG9iYWxzLW9ubHkgICAgICAgICAgIHJlc3RvcmUg b25seSBnbG9iYWwgb2JqZWN0cywgbm8gZGF0YWJhc2VzCi0tZXhjbHVkZS1kYXRhYmFzZT1QQVRU RVJOICAgZXhjbHVkZSBkYXRhYmFzZSB3aG9zZSBuYW1lIG1hdGNoZXMgcGF0dGVybgoKV2hlbiB3 ZSBnaXZlIC1nLy0tZ2xvYmFscy1vbmx5IG9wdGlvbiwgdGhlbiBvbmx5IHJlc3RvcmUgZ2xvYmFs cywgbm8gZGIgcmVzdG9yaW5nLgoKRGVzaWduOgpXaGVuIC0tZm9ybWF0PWR8dHxjIGlzIHNwZWNp ZmllZCBhbmQgdGhlcmUgaXMgbm8gdG9jLmRhdCBpbiBtYWluIGRpcmVjdG9yeSwgdGhlbiBjaGVj awpmb3IgZ2xvYmFsLmRhdCB0byByZXN0b3JlIGFsbCBkYXRhYmFzZXMuIElmIGdsb2JhbC5kYXQg ZmlsZSBpcyBleGlzdCBpbiBkaXJlY3RvcnksCnRoZW4gZmlyc3QgcmVzdG9yZSBhbGwgZ2xvYmFs cyBmcm9tIGdsb2JhbC5kYXQgYW5kIHRoZW4gcmVzdG9yZSBhbGwgZGF0YWJhc2VzIG9uZSBieSBv bmUKZnJvbSBtYXAuZGF0IGxpc3QgKGlmIGV4aXN0KQoKZm9yIC0tZXhjbHVkZS1kYXRhYmFzZT1Q QVRURVJOIGZvciBwZ19yZXN0b3JlLgphcyBvZiBub3csIFNFTEVDVCAxIFdIRVJFIFhYWCBPUEVS QVRPUihwZ19jYXRhbG9nLn4pICdeKFBBVFRFUk4pJCcgQ09MTEFURSBwZ19jYXRhbG9nLmRlZmF1 bHQKaWYgbm8gZGIgY29ubmVjdGlvbiwgdGhlbiBQQVRURVJOPU5BTUUgbWF0Y2hpbmcgb25seQoK Zm9yIGVhY2ggZGF0YWJhc2UsIHdlIGFyZSBjbGVhbmluZyBpbmRleCBvZiBleGl0X25pY2VseSBh cnJheS4KCmF0IHRoZSBlbmQgb2YgcmVzdG9yZSwgd2UgYXJlIGdpdmluZyB3YXJuaW5nIHdpdGgg dG90YWwgbnVtYmVyIG9mIGVycm9ycyAoaW5jbHVkaW5nIGdsb2JhbC5kYXQsCmFuZCBlYWNoIGRh dGFiYXNlIGVycm9ycykgYW5kIGZvciBlYWNoIGRhdGFiYXNlLCB3ZSBhcmUgcHJpbnRpbmcgd2Fy bmluZyB3aXRoIGRibmFtZSBhbmQgdG90YWwKZXJyb3JzLgoKdGhyZWFkOgpodHRwczovL3d3dy5w b3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL2ZsYXQvQ0FLWXROQXA5dk90eWRYTDNfcG5HSiUyQlRl dFp0TiUzREZZU25aU01DcVhjZVUzbWtIUHhQZyU0MG1haWwuZ21haWwuY29tIzA2NjQzM2NiNWFl MDA3Y2JlMzVmZWZkZGY3OTZkNTJmCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNn bWwgICAgIHwgIDgwICsrLQogZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwgICAgIHwg IDQxICstCiBzcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUgICAgICAgICAgICAgfCAgIDQgKy0KIHNy Yy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwLmggICAgICAgICAgfCAgIDQgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNr dXBfYXJjaGl2ZXIuYyB8ICAyMiArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYyAg ICAgIHwgICAyICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3V0aWxzLmMgICAgfCAgMTgg Kwogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5oICAgIHwgICAxICsKIHNyYy9iaW4v cGdfZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICB8ICAgMiArLQogc3JjL2Jpbi9wZ19kdW1wL3Bn X2R1bXBhbGwuYyAgICAgICAgIHwgMjg1ICsrKysrKystLQogc3JjL2Jpbi9wZ19kdW1wL3BnX3Jl c3RvcmUuYyAgICAgICAgIHwgODQ2ICsrKysrKysrKysrKysrKysrKysrKysrKysrLQogc3JjL2Jp bi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsICAgICAgIHwgICA5ICsKIHNyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0ICAgICB8ICAgMiArCiAxNCBmaWxlcyBjaGFuZ2VkLCAxMjQzIGluc2Vy dGlvbnMoKyksIDc0IGRlbGV0aW9ucygtKQogbW9kZSBjaGFuZ2UgMTAwNjQ0ID0+IDEwMDc1NSBz cmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwv cmVmL3BnX2R1bXBhbGwuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCmlu ZGV4IDM5ZDkzYzJjMGUzLi42ZTE5NzVmNWZmMCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3Jl Zi9wZ19kdW1wYWxsLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwK QEAgLTE2LDcgKzE2LDcgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAKICA8cmVmbmFtZWRp dj4KICAgPHJlZm5hbWU+cGdfZHVtcGFsbDwvcmVmbmFtZT4KLSAgPHJlZnB1cnBvc2U+ZXh0cmFj dCBhIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2UgY2x1c3Rl ciBpbnRvIGEgc2NyaXB0IGZpbGU8L3JlZnB1cnBvc2U+CisgIDxyZWZwdXJwb3NlPmV4dHJhY3Qg YSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGNsdXN0ZXIg YmFzZWQgb24gc3BlY2lmaWVkIGR1bXAgZm9ybWF0IDwvcmVmcHVycG9zZT4KICA8L3JlZm5hbWVk aXY+CiAKICA8cmVmc3lub3BzaXNkaXY+CkBAIC0xMjEsNyArMTIxLDgzIEBAIFBvc3RncmVTUUwg ZG9jdW1lbnRhdGlvbgogICAgICAgIDxwYXJhPgogICAgICAgICBTZW5kIG91dHB1dCB0byB0aGUg c3BlY2lmaWVkIGZpbGUuICBJZiB0aGlzIGlzIG9taXR0ZWQsIHRoZQogICAgICAgICBzdGFuZGFy ZCBvdXRwdXQgaXMgdXNlZC4KLSAgICAgICA8L3BhcmE+CisgICAgICAgIE5vdGU6IFRoaXMgb3B0 aW9uIGNhbiBiZSBvbWl0dGVkIG9ubHkgd2hlbiA8b3B0aW9uPi0tZm9ybWF0PC9vcHRpb24+IGlz IHBsYWluCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0 ZW50cnk+CisKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LUYgPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmZvcm1hdDwvcmVwbGFjZWFibGU+PC9vcHRpb24+ PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWZvcm1hdD08cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+Zm9ybWF0PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8 bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFNwZWNpZnkgZm9ybWF0IG9mIGR1bXAg ZmlsZXMuICBJZiB3ZSB3YW50IHRvIGR1bXAgYWxsIHRoZSBkYXRhYmFzZXMsCisgICAgICAgIHRo ZW4gcGFzcyB0aGlzIGFzIG5vbi1wbGFpbiBzbyB0aGF0IGR1bXAgb2YgYWxsIGRhdGFiYXNlcyBj YW4gYmUgdGFrZW4KKyAgICAgICAgaW4gc2VwYXJhdGUgc3ViZGlyZWN0b3J5IGluIGFyY2hpdmUg Zm9ybWF0LgorICAgICAgICBieSBkZWZhdWx0LCB0aGlzIGlzIHBsYWluIGZvcm1hdC4KKworICAg ICAgICBJZiBub24tcGxhaW4gbW9kZSBpcyBwYXNzZWQsIHRoZW4gZ2xvYmFsLmRhdCAoZ2xvYmFs IHNxbCBjb21tYW5kcykgYW5kCisgICAgICAgIG1hcC5kYXQoZGJvaWQgYW5kIGRibmFtZXMgbGlz dCBvZiBhbGwgdGhlIGRhdGFiYXNlcykgZmlsZXMgd2lsbCBiZSBjcmVhdGVkLgorICAgICAgICBB cGFydCBmcm9tIHRoZXNlIGZpbGVzLCBvbmUgc3ViZGlyZWN0b3J5IHdpdGggZGF0YWJhc2VzIG5h bWUgd2lsbCBiZSBjcmVhdGVkLgorICAgICAgICBVbmRlciB0aGlzIGRhdGFiYXNlcyBzdWJkaXJl Y3RvcnksIHRoZXJlIHdpbGwgYmUgZmlsZXMgd2l0aCBkYm9pZCBuYW1lIGZvciBlYWNoCisgICAg ICAgIGRhdGFiYXNlIGFuZCBpZiA8b3B0aW9uPi0tZm9ybWF0PC9vcHRpb24+IGlzIGRpcmVjdG9y eSwgdGhlbiB0b2MuZGF0IGFuZCBvdGhlcgorICAgICAgICBkdW1wIGZpbGVzIHdpbGwgYmUgdW5k ZXIgZGJvaWQgc3ViZGlyZWN0b3J5LgorCisgICAgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgICAg PHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmQ8L2xpdGVyYWw+PC90ZXJt PgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+ZGlyZWN0b3J5PC9saXRlcmFsPjwvdGVybT4KKyAg ICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgT3V0cHV0IGEg ZGlyZWN0b3J5LWZvcm1hdCBhcmNoaXZlIHN1aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jlc3Rv cmUuIFVuZGVyIGRib2lkCisgICAgICAgICAgIHN1YmRpcmVjdG9yeSwgdGhpcyB3aWxsIGNyZWF0 ZSBhIGRpcmVjdG9yeSB3aXRoIG9uZSBmaWxlIGZvciBlYWNoIHRhYmxlIGFuZCBsYXJnZQorICAg ICAgICAgICBvYmplY3QgYmVpbmcgZHVtcGVkLCBwbHVzIGEgc28tY2FsbGVkIFRhYmxlIG9mIENv bnRlbnRzIGZpbGUgZGVzY3JpYmluZyB0aGUgZHVtcGVkCisgICAgICAgICAgIG9iamVjdHMgaW4g YSBtYWNoaW5lLXJlYWRhYmxlIGZvcm1hdCB0aGF0IHBnX3Jlc3RvcmUgY2FuIHJlYWQuIEEgZGly ZWN0b3J5IGZvcm1hdAorICAgICAgICAgICBhcmNoaXZlIGNhbiBiZSBtYW5pcHVsYXRlZCB3aXRo IHN0YW5kYXJkIFVuaXggdG9vbHM7IGZvciBleGFtcGxlLCBmaWxlcyBpbiBhbgorICAgICAgICAg ICB1bmNvbXByZXNzZWQgYXJjaGl2ZSBjYW4gYmUgY29tcHJlc3NlZCB3aXRoIHRoZSBnemlwLCBs ejQsIG9yIHpzdGQgdG9vbHMuIFRoaXMKKyAgICAgICAgICAgZm9ybWF0IGlzIGNvbXByZXNzZWQg YnkgZGVmYXVsdCB1c2luZyBnemlwIGFuZCBhbHNvIHN1cHBvcnRzIHBhcmFsbGVsIGR1bXBzLgor ICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlz dGVudHJ5PgorCisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJh bD5wPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnBsYWluPC9saXRl cmFsPjwvdGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAg ICAgICAgT3V0cHV0IGEgcGxhaW4tdGV4dCBTUUwgc2NyaXB0IGZpbGUgKHRoZSBkZWZhdWx0KS4K KyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxp c3RlbnRyeT4KKworICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgPHRlcm0+PGxpdGVy YWw+YzwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5jdXN0b208L2xp dGVyYWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAg ICAgICAgICBPdXRwdXQgYSBjdXN0b20tZm9ybWF0IGFyY2hpdmUgc3VpdGFibGUgZm9yIGlucHV0 IGludG8gcGdfcmVzdG9yZS4gVG9nZXRoZXIgd2l0aCB0aGUKKyAgICAgICAgICAgZGlyZWN0b3J5 IG91dHB1dCBmb3JtYXQsIHRoaXMgaXMgdGhlIG1vc3QgZmxleGlibGUgb3V0cHV0IGZvcm1hdCBp biB0aGF0IGl0IGFsbG93cyBtYW51YWwKKyAgICAgICAgICAgc2VsZWN0aW9uIGFuZCByZW9yZGVy aW5nIG9mIGFyY2hpdmVkIGl0ZW1zIGR1cmluZyByZXN0b3JlLiBUaGlzIGZvcm1hdCBpcyBhbHNv CisgICAgICAgICAgIGNvbXByZXNzZWQgYnkgZGVmYXVsdC4KKyAgICAgICAgICA8L3BhcmE+Cisg ICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgICAg PHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnQ8L2xpdGVyYWw+PC90ZXJt PgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+dGFyPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAg IDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgT3V0cHV0IGEgdGFyLWZv cm1hdCBhcmNoaXZlIHN1aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jlc3RvcmUuIFRoZSB0YXIg Zm9ybWF0IGlzCisgICAgICAgICAgIGNvbXBhdGlibGUgd2l0aCB0aGUgZGlyZWN0b3J5IGZvcm1h dDogZXh0cmFjdGluZyBhIHRhci1mb3JtYXQgYXJjaGl2ZSBwcm9kdWNlcyBhIHZhbGlkCisgICAg ICAgICAgIGRpcmVjdG9yeS1mb3JtYXQgYXJjaGl2ZS4gSG93ZXZlciwgdGhlIHRhciBmb3JtYXQg ZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbi4gQWxzbywKKyAgICAgICAgICAgd2hlbiB1c2lu ZyB0YXIgZm9ybWF0IHRoZSByZWxhdGl2ZSBvcmRlciBvZiB0YWJsZSBkYXRhIGl0ZW1zIGNhbm5v dCBiZSBjaGFuZ2VkIGR1cmluZyByZXN0b3JlLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAg IDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgIDwvdmFyaWFi bGVsaXN0PgorICAgICAgICA8L3BhcmE+CiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxp c3RlbnRyeT4KIApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwg Yi9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbAppbmRleCBiOGIyN2UxNzE5ZS4uODM1 YjMzMTU3MTMgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sCisr KyBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sCkBAIC0xOCw4ICsxOCw5IEBAIFBv c3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICA8cmVmbmFtZT5wZ19yZXN0b3JlPC9yZWZuYW1lPgog CiAgIDxyZWZwdXJwb3NlPgotICAgcmVzdG9yZSBhIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9w cm9kdWN0bmFtZT4gZGF0YWJhc2UgZnJvbSBhbgotICAgYXJjaGl2ZSBmaWxlIGNyZWF0ZWQgYnkg PGFwcGxpY2F0aW9uPnBnX2R1bXA8L2FwcGxpY2F0aW9uPgorICAgcmVzdG9yZSA8cHJvZHVjdG5h bWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGZyb20gYW4KKyAgIGFyY2hpdmUg ZmlsZSBjcmVhdGVkIGJ5IDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4gb3IKKyAg IDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4KICAgPC9yZWZwdXJwb3NlPgog IDwvcmVmbmFtZWRpdj4KIApAQCAtMzcsOSArMzgsMTAgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0 aW9uCiAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CiAKICAgPHBhcmE+Ci0gICA8YXBwbGlj YXRpb24+cGdfcmVzdG9yZTwvYXBwbGljYXRpb24+IGlzIGEgdXRpbGl0eSBmb3IgcmVzdG9yaW5n IGEKKyAgIDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4gaXMgYSB1dGlsaXR5 IGZvciByZXN0b3JpbmcKICAgIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4g ZGF0YWJhc2UgZnJvbSBhbiBhcmNoaXZlCi0gICBjcmVhdGVkIGJ5IDx4cmVmIGxpbmtlbmQ9ImFw cC1wZ2R1bXAiLz4gaW4gb25lIG9mIHRoZSBub24tcGxhaW4tdGV4dAorICAgY3JlYXRlZCBieSA8 eHJlZiBsaW5rZW5kPSJhcHAtcGdkdW1wIi8+IG9yCisgICA8eHJlZiBsaW5rZW5kPSJhcHAtcGct ZHVtcGFsbCIvPiBpbiBvbmUgb2YgdGhlIG5vbi1wbGFpbi10ZXh0CiAgICBmb3JtYXRzLiAgSXQg d2lsbCBpc3N1ZSB0aGUgY29tbWFuZHMgbmVjZXNzYXJ5IHRvIHJlY29uc3RydWN0IHRoZQogICAg ZGF0YWJhc2UgdG8gdGhlIHN0YXRlIGl0IHdhcyBpbiBhdCB0aGUgdGltZSBpdCB3YXMgc2F2ZWQu ICBUaGUKICAgIGFyY2hpdmUgZmlsZXMgYWxzbyBhbGxvdyA8YXBwbGljYXRpb24+cGdfcmVzdG9y ZTwvYXBwbGljYXRpb24+IHRvCkBAIC0xNDAsNiArMTQyLDggQEAgUG9zdGdyZVNRTCBkb2N1bWVu dGF0aW9uCiAgICAgICAgIGNvbW1hbmRzIHRoYXQgbWVudGlvbiB0aGlzIGRhdGFiYXNlLgogICAg ICAgICBBY2Nlc3MgcHJpdmlsZWdlcyBmb3IgdGhlIGRhdGFiYXNlIGl0c2VsZiBhcmUgYWxzbyBy ZXN0b3JlZCwKICAgICAgICAgdW5sZXNzIDxvcHRpb24+LS1uby1hY2w8L29wdGlvbj4gaXMgc3Bl Y2lmaWVkLgorICAgICAgICA8b3B0aW9uPi0tY3JlYXRlPC9vcHRpb24+IGlzIHJlcXVpcmVkIHdo ZW4gcmVzdG9yaW5nIG11bHRpcGxlIGRhdGFiYXNlcworICAgICAgICBmcm9tIGR1bXAgb2YgPGFw cGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPi4KICAgICAgICA8L3BhcmE+CiAKICAg ICAgICA8cGFyYT4KQEAgLTE2Niw2ICsxNzAsMjUgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9u CiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlz dGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWV4Y2x1ZGUtZGF0YWJhc2U9PHJlcGxhY2Vh YmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVy bT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgRG8gbm90IHJlc3Rv cmUgZGF0YWJhc2VzIHdob3NlIG5hbWUgbWF0Y2hlcworICAgICAgICA8cmVwbGFjZWFibGUgY2xh c3M9InBhcmFtZXRlciI+cGF0dGVybjwvcmVwbGFjZWFibGU+LgorICAgICAgICBNdWx0aXBsZSBw YXR0ZXJucyBjYW4gYmUgZXhjbHVkZWQgYnkgd3JpdGluZyBtdWx0aXBsZQorICAgICAgICA8b3B0 aW9uPi0tZXhjbHVkZS1kYXRhYmFzZTwvb3B0aW9uPiBzd2l0Y2hlcy4gIFRoZQorICAgICAgICA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGF0dGVybjwvcmVwbGFjZWFibGU+IHBhcmFt ZXRlciBpcworICAgICAgICBpbnRlcnByZXRlZCBhcyBhIHBhdHRlcm4gYWNjb3JkaW5nIHRvIHRo ZSBzYW1lIHJ1bGVzIHVzZWQgYnkKKyAgICAgICAgPGFwcGxpY2F0aW9uPnBzcWw8L2FwcGxpY2F0 aW9uPidzIDxsaXRlcmFsPlxkPC9saXRlcmFsPgorICAgICAgICBjb21tYW5kcyAoc2VlIDx4cmVm IGxpbmtlbmQ9ImFwcC1wc3FsLXBhdHRlcm5zIi8+KSwKKyAgICAgICAgc28gbXVsdGlwbGUgZGF0 YWJhc2VzIGNhbiBhbHNvIGJlIGV4Y2x1ZGVkIGJ5IHdyaXRpbmcgd2lsZGNhcmQKKyAgICAgICAg Y2hhcmFjdGVycyBpbiB0aGUgcGF0dGVybi4gIFdoZW4gdXNpbmcgd2lsZGNhcmRzLCBiZSBjYXJl ZnVsIHRvCisgICAgICAgIHF1b3RlIHRoZSBwYXR0ZXJuIGlmIG5lZWRlZCB0byBwcmV2ZW50IHNo ZWxsIHdpbGRjYXJkIGV4cGFuc2lvbi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVt PgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgPHRl cm0+PG9wdGlvbj4tZTwvb3B0aW9uPjwvdGVybT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LS1leGl0 LW9uLWVycm9yPC9vcHRpb24+PC90ZXJtPgpAQCAtMzE1LDYgKzMzOCwxNiBAQCBQb3N0Z3JlU1FM IGRvY3VtZW50YXRpb24KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5Pgog CisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1nPC9vcHRpb24+PC90 ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWdsb2JhbHMtb25seTwvb3B0aW9uPjwvdGVybT4K KyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgUmVzdG9yZSBvbmx5IGds b2JhbCBvYmplY3RzIChyb2xlcyBhbmQgdGFibGVzcGFjZXMpLCBubyBkYXRhYmFzZXMuCisgICAg ICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAg ICAgPHZhcmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LUkgPHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPmluZGV4PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CiAgICAg ICA8dGVybT48b3B0aW9uPi0taW5kZXg9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmlu ZGV4PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2R1bXAvTWFrZWZpbGUgYi9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKaW5kZXggODYwMDZkMTEx YzMuLmE0ZTU1N2Q2MmM3IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKKysr IGIvc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlCkBAIC00Nyw4ICs0Nyw4IEBAIGFsbDogcGdfZHVt cCBwZ19yZXN0b3JlIHBnX2R1bXBhbGwKIHBnX2R1bXA6IHBnX2R1bXAubyBjb21tb24ubyBwZ19k dW1wX3NvcnQubyAkKE9CSlMpIHwgc3VibWFrZS1saWJwcSBzdWJtYWtlLWxpYnBncG9ydCBzdWJt YWtlLWxpYnBnZmV1dGlscwogCSQoQ0MpICQoQ0ZMQUdTKSBwZ19kdW1wLm8gY29tbW9uLm8gcGdf ZHVtcF9zb3J0Lm8gJChPQkpTKSAkKExERkxBR1MpICQoTERGTEFHU19FWCkgJChMSUJTKSAtbyAk QCQoWCkKIAotcGdfcmVzdG9yZTogcGdfcmVzdG9yZS5vICQoT0JKUykgfCBzdWJtYWtlLWxpYnBx IHN1Ym1ha2UtbGlicGdwb3J0IHN1Ym1ha2UtbGlicGdmZXV0aWxzCi0JJChDQykgJChDRkxBR1Mp IHBnX3Jlc3RvcmUubyAkKE9CSlMpICQoTERGTEFHUykgJChMREZMQUdTX0VYKSAkKExJQlMpIC1v ICRAJChYKQorcGdfcmVzdG9yZTogcGdfcmVzdG9yZS5vIGNvbW1vbl9kdW1wYWxsX3Jlc3RvcmUu byAkKE9CSlMpIHwgc3VibWFrZS1saWJwcSBzdWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxpYnBn ZmV1dGlscworCSQoQ0MpICQoQ0ZMQUdTKSBwZ19yZXN0b3JlLm8gY29tbW9uX2R1bXBhbGxfcmVz dG9yZS5vICQoT0JKUykgJChMREZMQUdTKSAkKExERkxBR1NfRVgpICQoTElCUykgLW8gJEAkKFgp CiAKIHBnX2R1bXBhbGw6IHBnX2R1bXBhbGwubyBkdW1wdXRpbHMubyBmaWx0ZXIubyBjb21tb25f ZHVtcGFsbF9yZXN0b3JlLm8gJChXSU4zMlJFUykgfCBzdWJtYWtlLWxpYnBxIHN1Ym1ha2UtbGli cGdwb3J0IHN1Ym1ha2UtbGlicGdmZXV0aWxzCiAJJChDQykgJChDRkxBR1MpIHBnX2R1bXBhbGwu byBkdW1wdXRpbHMubyBmaWx0ZXIubyBjb21tb25fZHVtcGFsbF9yZXN0b3JlLm8gJChXSU4zMlJF UykgJChMREZMQUdTKSAkKExERkxBR1NfRVgpICQoTElCUykgLW8gJEAkKFgpCmRpZmYgLS1naXQg YS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVp bGQKaW5kZXggOTdkYmZhZWI2N2YuLmRkZWNhYzVjZjA5IDEwMDY0NAotLS0gYS9zcmMvYmluL3Bn X2R1bXAvbWVzb24uYnVpbGQKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCkBAIC02 OSw2ICs2OSw3IEBAIGJpbl90YXJnZXRzICs9IHBnX2R1bXBhbGwKIAogcGdfcmVzdG9yZV9zb3Vy Y2VzID0gZmlsZXMoCiAgICdwZ19yZXN0b3JlLmMnLAorICAnY29tbW9uX2R1bXBhbGxfcmVzdG9y ZS5jJywKICkKIAogaWYgaG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3MnCmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwLmggYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgKaW5k ZXggZjBmMTliYjBiMjkuLjY1MDAwZTVhMDgzIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAv cGdfYmFja3VwLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oCkBAIC0zMDYsNyAr MzA2LDcgQEAgZXh0ZXJuIHZvaWQgU2V0QXJjaGl2ZU9wdGlvbnMoQXJjaGl2ZSAqQUgsIER1bXBP cHRpb25zICpkb3B0LCBSZXN0b3JlT3B0aW9ucyAqcm8KIAogZXh0ZXJuIHZvaWQgUHJvY2Vzc0Fy Y2hpdmVSZXN0b3JlT3B0aW9ucyhBcmNoaXZlICpBSFgpOwogCi1leHRlcm4gdm9pZCBSZXN0b3Jl QXJjaGl2ZShBcmNoaXZlICpBSFgpOworZXh0ZXJuIHZvaWQgUmVzdG9yZUFyY2hpdmUoQXJjaGl2 ZSAqQUhYLCBib29sIGFwcGVuZF9kYXRhKTsKIAogLyogT3BlbiBhbiBleGlzdGluZyBhcmNoaXZl ICovCiBleHRlcm4gQXJjaGl2ZSAqT3BlbkFyY2hpdmUoY29uc3QgY2hhciAqRmlsZVNwZWMsIGNv bnN0IEFyY2hpdmVGb3JtYXQgZm10KTsKQEAgLTMxOSw3ICszMTksNyBAQCBleHRlcm4gQXJjaGl2 ZSAqQ3JlYXRlQXJjaGl2ZShjb25zdCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1h dCBmbXQsCiAJCQkJCQkJICBEYXRhRGlyU3luY01ldGhvZCBzeW5jX21ldGhvZCk7CiAKIC8qIFRo ZSAtLWxpc3Qgb3B0aW9uICovCi1leHRlcm4gdm9pZCBQcmludFRPQ1N1bW1hcnkoQXJjaGl2ZSAq QUhYKTsKK2V4dGVybiB2b2lkIFByaW50VE9DU3VtbWFyeShBcmNoaXZlICpBSFgsIGJvb2wgYXBw ZW5kX2RhdGEpOwogCiBleHRlcm4gUmVzdG9yZU9wdGlvbnMgKk5ld1Jlc3RvcmVPcHRpb25zKHZv aWQpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMg Yi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKaW5kZXggYjlkN2FiOThjM2Uu LmI4YjA3NTYyMDY5IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hp dmVyLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCkBAIC04Miw3 ICs4Miw3IEBAIHN0YXRpYyBpbnQJUmVzdG9yaW5nVG9EQihBcmNoaXZlSGFuZGxlICpBSCk7CiBz dGF0aWMgdm9pZCBkdW1wX2xvX2J1ZihBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMgdm9pZCBk dW1wVGltZXN0YW1wKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICptc2csIHRpbWVfdCB0 aW0pOwogc3RhdGljIHZvaWQgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFy ICpmaWxlbmFtZSwKLQkJCQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXBy ZXNzaW9uX3NwZWMpOworCQkJY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVz c2lvbl9zcGVjLCBib29sIGFwcGVuZF9kYXRhKTsKIHN0YXRpYyBDb21wcmVzc0ZpbGVIYW5kbGUg KlNhdmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgUmVzdG9yZU91dHB1 dChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NGaWxlSGFuZGxlICpzYXZlZE91dHB1dCk7CiAK QEAgLTMzMSw5ICszMzEsMTQgQEAgUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhBcmNoaXZl ICpBSFgpCiAJCVN0cmljdE5hbWVzQ2hlY2socm9wdCk7CiB9CiAKLS8qIFB1YmxpYyAqLworLyoK KyAqIFJlc3RvcmVBcmNoaXZlCisgKgorICogSWYgYXBwZW5kX2RhdGEgaXMgc2V0LCB0aGVuIGFw cGVuZCBkYXRhIGludG8gZmlsZSBhcyB3ZSBhcmUgcmVzdG9yaW5nIGR1bXAKKyAqIG9mIG11bHRp cGxlIGRhdGFiYXNlcyB3aGljaCB3YXMgdGFrZW4gYnkgcGdfZHVtcGFsbC4KKyAqLwogdm9pZAot UmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQorUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhY LCBib29sIGFwcGVuZF9kYXRhKQogewogCUFyY2hpdmVIYW5kbGUgKkFIID0gKEFyY2hpdmVIYW5k bGUgKikgQUhYOwogCVJlc3RvcmVPcHRpb25zICpyb3B0ID0gQUgtPnB1YmxpYy5yb3B0OwpAQCAt NDUwLDcgKzQ1NSw3IEBAIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCkKIAkgKi8KIAlzYXYg PSBTYXZlT3V0cHV0KEFIKTsKIAlpZiAocm9wdC0+ZmlsZW5hbWUgfHwgcm9wdC0+Y29tcHJlc3Np b25fc3BlYy5hbGdvcml0aG0gIT0gUEdfQ09NUFJFU1NJT05fTk9ORSkKLQkJU2V0T3V0cHV0KEFI LCByb3B0LT5maWxlbmFtZSwgcm9wdC0+Y29tcHJlc3Npb25fc3BlYyk7CisJCVNldE91dHB1dChB SCwgcm9wdC0+ZmlsZW5hbWUsIHJvcHQtPmNvbXByZXNzaW9uX3NwZWMsIGFwcGVuZF9kYXRhKTsK IAogCWFocHJpbnRmKEFILCAiLS1cbi0tIFBvc3RncmVTUUwgZGF0YWJhc2UgZHVtcFxuLS1cblxu Iik7CiAKQEAgLTEyNjMsNyArMTI2OCw3IEBAIEFyY2hpdmVFbnRyeShBcmNoaXZlICpBSFgsIENh dGFsb2dJZCBjYXRhbG9nSWQsIER1bXBJZCBkdW1wSWQsCiAKIC8qIFB1YmxpYyAqLwogdm9pZAot UHJpbnRUT0NTdW1tYXJ5KEFyY2hpdmUgKkFIWCkKK1ByaW50VE9DU3VtbWFyeShBcmNoaXZlICpB SFgsIGJvb2wgYXBwZW5kX2RhdGEpCiB7CiAJQXJjaGl2ZUhhbmRsZSAqQUggPSAoQXJjaGl2ZUhh bmRsZSAqKSBBSFg7CiAJUmVzdG9yZU9wdGlvbnMgKnJvcHQgPSBBSC0+cHVibGljLnJvcHQ7CkBA IC0xMjc5LDcgKzEyODQsNyBAQCBQcmludFRPQ1N1bW1hcnkoQXJjaGl2ZSAqQUhYKQogCiAJc2F2 ID0gU2F2ZU91dHB1dChBSCk7CiAJaWYgKHJvcHQtPmZpbGVuYW1lKQotCQlTZXRPdXRwdXQoQUgs IHJvcHQtPmZpbGVuYW1lLCBvdXRfY29tcHJlc3Npb25fc3BlYyk7CisJCVNldE91dHB1dChBSCwg cm9wdC0+ZmlsZW5hbWUsIG91dF9jb21wcmVzc2lvbl9zcGVjLCBhcHBlbmRfZGF0YSk7CiAKIAlp ZiAoc3RyZnRpbWUoc3RhbXBfc3RyLCBzaXplb2Yoc3RhbXBfc3RyKSwgUEdEVU1QX1NUUkZUSU1F X0ZNVCwKIAkJCQkgbG9jYWx0aW1lKCZBSC0+Y3JlYXRlRGF0ZSkpID09IDApCkBAIC0xNjU4LDcg KzE2NjMsOCBAQCBhcmNocHJpbnRmKEFyY2hpdmUgKkFILCBjb25zdCBjaGFyICpmbXQsLi4uKQog CiBzdGF0aWMgdm9pZAogU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpm aWxlbmFtZSwKLQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9u X3NwZWMpCisJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9z cGVjLAorCQkgIGJvb2wgYXBwZW5kX2RhdGEpCiB7CiAJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkg7 CiAJY29uc3QgY2hhciAqbW9kZTsKQEAgLTE2NzgsNyArMTY4NCw3IEBAIFNldE91dHB1dChBcmNo aXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJZWxzZQogCQlmbiA9IGZpbGVu byhzdGRvdXQpOwogCi0JaWYgKEFILT5tb2RlID09IGFyY2hNb2RlQXBwZW5kKQorCWlmIChhcHBl bmRfZGF0YSB8fCBBSC0+bW9kZSA9PSBhcmNoTW9kZUFwcGVuZCkKIAkJbW9kZSA9IFBHX0JJTkFS WV9BOwogCWVsc2UKIAkJbW9kZSA9IFBHX0JJTkFSWV9XOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19kdW1wL3BnX2JhY2t1cF90YXIuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMK aW5kZXggYjViYTNiNDZkZDkuLmQ5NGQwZGUyYTVkIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX3Rhci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMK QEAgLTgyNiw3ICs4MjYsNyBAQCBfQ2xvc2VBcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFIKQogCQlz YXZWZXJib3NlID0gQUgtPnB1YmxpYy52ZXJib3NlOwogCQlBSC0+cHVibGljLnZlcmJvc2UgPSAw OwogCi0JCVJlc3RvcmVBcmNoaXZlKChBcmNoaXZlICopIEFIKTsKKwkJUmVzdG9yZUFyY2hpdmUo KEFyY2hpdmUgKikgQUgsIGZhbHNlKTsKIAogCQlTZXRBcmNoaXZlT3B0aW9ucygoQXJjaGl2ZSAq KSBBSCwgc2F2RG9wdCwgc2F2Um9wdCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXBfdXRpbHMuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdXRpbHMuYwppbmRl eCA3OWFlYzVmNTE1OC4uMGFjNGU2YzMyZGEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXBfdXRpbHMuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3V0aWxzLmMK QEAgLTEzLDYgKzEzLDcgQEAKICAqLwogI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCiAKKyNpbmNs dWRlICJjb21tb25fZHVtcGFsbF9yZXN0b3JlLmgiCiAjaWZkZWYgV0lOMzIKICNpbmNsdWRlICJw YXJhbGxlbC5oIgogI2VuZGlmCkBAIC0xMDQsMyArMTA1LDIwIEBAIGV4aXRfbmljZWx5KGludCBj b2RlKQogCiAJZXhpdChjb2RlKTsKIH0KKworLyoKKyAqIHJlc2V0X2V4aXRfbmljZWx5X2FycmF5 CisgKgorICogY2xlYW5zIGluZGV4IG9mIGV4aXRfbmljZWx5IGFycmF5LgorICovCit2b2lkCity ZXNldF9leGl0X25pY2VseV9hcnJheShpbnQgY29kZSkKK3sKKwlpbnQgICAgICAgICBpOworCisJ Zm9yIChpID0gb25fZXhpdF9uaWNlbHlfaW5kZXggLSAxOyBpID49IDA7IGktLSkKKwkJb25fZXhp dF9uaWNlbHlfbGlzdFtpXS5mdW5jdGlvbihjb2RlLAorCQkJCW9uX2V4aXRfbmljZWx5X2xpc3Rb aV0uYXJnKTsKKworCW9uX2V4aXRfbmljZWx5X2luZGV4ID0gMDsKK30KZGlmZiAtLWdpdCBhL3Ny Yy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdXRpbHMuaCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNr dXBfdXRpbHMuaAppbmRleCAzODU1MTk0NDUxMy4uM2JlNWM1YzMxYTIgMTAwNjQ0Ci0tLSBhL3Ny Yy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdXRpbHMuaAorKysgYi9zcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwX3V0aWxzLmgKQEAgLTMwLDYgKzMwLDcgQEAgZXh0ZXJuIGNvbnN0IGNoYXIgKnByb2du YW1lOwogZXh0ZXJuIHZvaWQgc2V0X2R1bXBfc2VjdGlvbihjb25zdCBjaGFyICphcmcsIGludCAq ZHVtcFNlY3Rpb25zKTsKIGV4dGVybiB2b2lkIG9uX2V4aXRfbmljZWx5KG9uX2V4aXRfbmljZWx5 X2NhbGxiYWNrIGZ1bmN0aW9uLCB2b2lkICphcmcpOwogZXh0ZXJuIHZvaWQgZXhpdF9uaWNlbHko aW50IGNvZGUpIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOworZXh0ZXJuIHZvaWQgcmVzZXRfZXhp dF9uaWNlbHlfYXJyYXkoaW50IGNvZGUpOwogCiAvKiBJbiBwZ19kdW1wLCB3ZSBtb2RpZnkgcGdf ZmF0YWwgdG8gY2FsbCBleGl0X25pY2VseSBpbnN0ZWFkIG9mIGV4aXQgKi8KICN1bmRlZiBwZ19m YXRhbApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdf ZHVtcC9wZ19kdW1wLmMKaW5kZXggMzBkZmRhOGMzZmYuLjJiMjhjYjM5OTA1IDEwMDY0NAotLS0g YS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1w LmMKQEAgLTExNDgsNyArMTE0OCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCSAq IHJpZ2h0IG5vdy4KIAkgKi8KIAlpZiAocGxhaW5UZXh0KQotCQlSZXN0b3JlQXJjaGl2ZShmb3V0 KTsKKwkJUmVzdG9yZUFyY2hpdmUoZm91dCwgZmFsc2UpOwogCiAJQ2xvc2VBcmNoaXZlKGZvdXQp OwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jIGIvc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXBhbGwuYwppbmRleCBlMjc5OTAzZjQ2OS4uMTFjMDM0YmM2YmMgMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1w L3BnX2R1bXBhbGwuYwpAQCAtMTUsNiArMTUsNyBAQAogCiAjaW5jbHVkZSAicG9zdGdyZXNfZmUu aCIKIAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8dGltZS5oPgogI2luY2x1ZGUg PHVuaXN0ZC5oPgogCkBAIC0yNSwxNCArMjYsMTcgQEAKICNpbmNsdWRlICJjb21tb24vaGFzaGZu X3Vuc3RhYmxlLmgiCiAjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaCIKICNpbmNsdWRlICJjb21t b24vc3RyaW5nLmgiCisjaW5jbHVkZSAiY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5oIgogI2luY2x1 ZGUgImR1bXB1dGlscy5oIgogI2luY2x1ZGUgImZlX3V0aWxzL3N0cmluZ191dGlscy5oIgogI2lu Y2x1ZGUgImZpbHRlci5oIgogI2luY2x1ZGUgImdldG9wdF9sb25nLmgiCiAjaW5jbHVkZSAicGdf YmFja3VwLmgiCisjaW5jbHVkZSAicGdfYmFja3VwX2FyY2hpdmVyLmgiCiAKIC8qIHZlcnNpb24g c3RyaW5nIHdlIGV4cGVjdCBiYWNrIGZyb20gcGdfZHVtcCAqLwogI2RlZmluZSBQR0RVTVBfVkVS U0lPTlNUUiAicGdfZHVtcCAoUG9zdGdyZVNRTCkgIiBQR19WRVJTSU9OICJcbiIKKyNkZWZpbmUg ZXhpdF9uaWNlbHkoY29kZSkgZXhpdChjb2RlKQogCiB0eXBlZGVmIHN0cnVjdAogewpAQCAtNjUs OSArNjksMTAgQEAgc3RhdGljIHZvaWQgZHJvcFRhYmxlc3BhY2VzKFBHY29ubiAqY29ubik7CiBz dGF0aWMgdm9pZCBkdW1wVGFibGVzcGFjZXMoUEdjb25uICpjb25uKTsKIHN0YXRpYyB2b2lkIGRy b3BEQnMoUEdjb25uICpjb25uKTsKIHN0YXRpYyB2b2lkIGR1bXBVc2VyQ29uZmlnKFBHY29ubiAq Y29ubiwgY29uc3QgY2hhciAqdXNlcm5hbWUpOwotc3RhdGljIHZvaWQgZHVtcERhdGFiYXNlcyhQ R2Nvbm4gKmNvbm4pOworc3RhdGljIHZvaWQgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4sIEFy Y2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQpOwogc3RhdGljIHZvaWQgZHVtcFRpbWVzdGFtcChj b25zdCBjaGFyICptc2cpOwotc3RhdGljIGludAlydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1l LCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cyk7CitzdGF0aWMgaW50CXJ1blBnRHVtcChjb25zdCBj aGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzLAorCQljaGFyICpkYmZpbGUsIEFy Y2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQpOwogc3RhdGljIHZvaWQgYnVpbGRTaFNlY0xhYmVs cyhQR2Nvbm4gKmNvbm4sCiAJCQkJCQkJIGNvbnN0IGNoYXIgKmNhdGFsb2dfbmFtZSwgT2lkIG9i amVjdElkLAogCQkJCQkJCSBjb25zdCBjaGFyICpvYmp0eXBlLCBjb25zdCBjaGFyICpvYmpuYW1l LApAQCAtNzYsNiArODEsOCBAQCBzdGF0aWMgdm9pZCBleGVjdXRlQ29tbWFuZChQR2Nvbm4gKmNv bm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KTsKIHN0YXRpYyB2b2lkIGV4cGFuZF9kYm5hbWVfcGF0dGVy bnMoUEdjb25uICpjb25uLCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJucywKIAkJCQkJCQkJICAg U2ltcGxlU3RyaW5nTGlzdCAqbmFtZXMpOwogc3RhdGljIHZvaWQgcmVhZF9kdW1wYWxsX2ZpbHRl cnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRlcm4pOworc3Rh dGljIHZvaWQgY3JlYXRlX29yX29wZW5fZGlyKGNvbnN0IGNoYXIgKmRpcm5hbWUpOworc3RhdGlj IEFyY2hpdmVGb3JtYXQgcGFyc2VEdW1wRm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1hdCk7CiAKIHN0 YXRpYyBjaGFyIHBnX2R1bXBfYmluW01BWFBHUEFUSF07CiBzdGF0aWMgY29uc3QgY2hhciAqcHJv Z25hbWU7CkBAIC0xMDIsNyArMTA5LDcgQEAgc3RhdGljIGludAlub19zdWJzY3JpcHRpb25zID0g MDsKIHN0YXRpYyBpbnQJbm9fdG9hc3RfY29tcHJlc3Npb24gPSAwOwogc3RhdGljIGludAlub191 bmxvZ2dlZF90YWJsZV9kYXRhID0gMDsKIHN0YXRpYyBpbnQJbm9fcm9sZV9wYXNzd29yZHMgPSAw Owotc3RhdGljIGludAlzZXJ2ZXJfdmVyc2lvbjsKK3N0YXRpYyBpbnQgc2VydmVyX3ZlcnNpb247 CiBzdGF0aWMgaW50CWxvYWRfdmlhX3BhcnRpdGlvbl9yb290ID0gMDsKIHN0YXRpYyBpbnQJb25f Y29uZmxpY3RfZG9fbm90aGluZyA9IDA7CiAKQEAgLTExNiw4ICsxMjMsNiBAQCBzdGF0aWMgY2hh ciAqZmlsZW5hbWUgPSBOVUxMOwogc3RhdGljIFNpbXBsZVN0cmluZ0xpc3QgZGF0YWJhc2VfZXhj bHVkZV9wYXR0ZXJucyA9IHtOVUxMLCBOVUxMfTsKIHN0YXRpYyBTaW1wbGVTdHJpbmdMaXN0IGRh dGFiYXNlX2V4Y2x1ZGVfbmFtZXMgPSB7TlVMTCwgTlVMTH07CiAKLSNkZWZpbmUgZXhpdF9uaWNl bHkoY29kZSkgZXhpdChjb2RlKQotCiBpbnQKIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkK IHsKQEAgLTE0Miw2ICsxNDcsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCXsi cGFzc3dvcmQiLCBub19hcmd1bWVudCwgTlVMTCwgJ1cnfSwKIAkJeyJuby1wcml2aWxlZ2VzIiwg bm9fYXJndW1lbnQsIE5VTEwsICd4J30sCiAJCXsibm8tYWNsIiwgbm9fYXJndW1lbnQsIE5VTEws ICd4J30sCisJCXsiZm9ybWF0IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdGJ30sCiAKIAkJ LyoKIAkJICogdGhlIGZvbGxvd2luZyBvcHRpb25zIGRvbid0IGhhdmUgYW4gZXF1aXZhbGVudCBz aG9ydCBvcHRpb24gbGV0dGVyCkBAIC0xODMsNiArMTg5LDggQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQogCWNoYXIJICAgKnBnZGIgPSBOVUxMOwogCWNoYXIJICAgKnVzZV9yb2xlID0g TlVMTDsKIAljb25zdCBjaGFyICpkdW1wZW5jb2RpbmcgPSBOVUxMOworCUFyY2hpdmVGb3JtYXQg YXJjaER1bXBGb3JtYXQgPSBhcmNoTnVsbDsKKwljb25zdCBjaGFyICpmb3JtYXROYW1lID0gInAi OwogCXRyaXZhbHVlCXByb21wdF9wYXNzd29yZCA9IFRSSV9ERUZBVUxUOwogCWJvb2wJCWRhdGFf b25seSA9IGZhbHNlOwogCWJvb2wJCWdsb2JhbHNfb25seSA9IGZhbHNlOwpAQCAtMjMyLDcgKzI0 MCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAogCXBnZHVtcG9wdHMgPSBjcmVh dGVQUUV4cEJ1ZmZlcigpOwogCi0Jd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwg ImFjZDpFOmY6Z2g6bDpPcDpyc1M6dFU6dndXeCIsIGxvbmdfb3B0aW9ucywgJm9wdGluZGV4KSkg IT0gLTEpCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjZDpFOmY6Rjpn aDpsOk9wOnJzUzp0VTp2d1d4IiwgbG9uZ19vcHRpb25zLCAmb3B0aW5kZXgpKSAhPSAtMSkKIAl7 CiAJCXN3aXRjaCAoYykKIAkJewpAQCAtMjYwLDcgKzI2OCw5IEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKmFyZ3ZbXSkKIAkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihwZ2R1bXBvcHRzLCAiIC1mICIp OwogCQkJCWFwcGVuZFNoZWxsU3RyaW5nKHBnZHVtcG9wdHMsIGZpbGVuYW1lKTsKIAkJCQlicmVh azsKLQorCQkJY2FzZSAnRic6CisJCQkJZm9ybWF0TmFtZSA9IHBnX3N0cmR1cChvcHRhcmcpOwor CQkJCWJyZWFrOwogCQkJY2FzZSAnZyc6CiAJCQkJZ2xvYmFsc19vbmx5ID0gdHJ1ZTsKIAkJCQli cmVhazsKQEAgLTQwOSw2ICs0MTksMjEgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQog CQlleGl0X25pY2VseSgxKTsKIAl9CiAKKwkvKiBHZXQgZm9ybWF0IGZvciBkdW1wLiAqLworCWFy Y2hEdW1wRm9ybWF0ID0gcGFyc2VEdW1wRm9ybWF0KGZvcm1hdE5hbWUpOworCisJLyoKKwkgKiBJ ZiBub24tcGxhaW4gZm9ybWF0IGlzIHNwZWNpZmllZCB0aGVuIHdlIG11c3QgcHJvdmlkZSB0aGUK KwkgKiBmaWxlIG5hbWUgdG8gY3JlYXRlIG9uZSBtYWluIGRpcmVjdG9yeS4KKwkgKi8KKwlpZiAo YXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwgJiYKKwkJCSghZmlsZW5hbWUgfHwgc3RyY21wKGZp bGVuYW1lLCAiIikgPT0gMCkpCisJeworCQlwZ19sb2dfZXJyb3IoIm9wdGlvbnMgLUYvLS1mb3Jt YXQ9ZHxjfHQgcmVxdWlyZXMgb3B0aW9uIC1mLy0tZmlsZSB3aXRoIG5vbi1lbXB0eSBzdHJpbmci KTsKKwkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9y bWF0aW9uLiIsIHByb2duYW1lKTsKKwkJZXhpdF9uaWNlbHkoMSk7CisJfQorCiAJLyoKIAkgKiBJ ZiBwYXNzd29yZCB2YWx1ZXMgYXJlIG5vdCByZXF1aXJlZCBpbiB0aGUgZHVtcCwgc3dpdGNoIHRv IHVzaW5nCiAJICogcGdfcm9sZXMgd2hpY2ggaXMgZXF1YWxseSB1c2VmdWwsIGp1c3QgbW9yZSBs aWtlbHkgdG8gaGF2ZSB1bnJlc3RyaWN0ZWQKQEAgLTQ1NSw2ICs0ODAsMzMgQEAgbWFpbihpbnQg YXJnYywgY2hhciAqYXJndltdKQogCWlmIChvbl9jb25mbGljdF9kb19ub3RoaW5nKQogCQlhcHBl bmRQUUV4cEJ1ZmZlclN0cihwZ2R1bXBvcHRzLCAiIC0tb24tY29uZmxpY3QtZG8tbm90aGluZyIp OwogCisJLyoKKwkgKiBPcGVuIHRoZSBvdXRwdXQgZmlsZSBpZiByZXF1aXJlZCwgb3RoZXJ3aXNl IHVzZSBzdGRvdXQuICBJZiByZXF1aXJlZCwKKwkgKiB0aGVuIGNyZWF0ZSBuZXcgZGlyZWN0b3J5 IGFuZCBnbG9iYWwuZGF0IGZpbGUuCisJICovCisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hO dWxsKQorCXsKKwkJY2hhcgl0b2NfcGF0aFtNQVhQR1BBVEhdOworCisJCS8qIENyZWF0ZSBuZXcg ZGlyZWN0b3J5IG9yIGFjY2VwdCB0aGUgZW1wdHkgZXhpc3RpbmcgZGlyZWN0b3J5LiAqLworCQlj cmVhdGVfb3Jfb3Blbl9kaXIoZmlsZW5hbWUpOworCisJCXNucHJpbnRmKHRvY19wYXRoLCBNQVhQ R1BBVEgsICIlcy9nbG9iYWwuZGF0IiwgZmlsZW5hbWUpOworCisJCU9QRiA9IGZvcGVuKHRvY19w YXRoLCBQR19CSU5BUllfVyk7CisJCWlmICghT1BGKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBv cGVuIGdsb2JhbC5kYXQgZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCX0KKwllbHNlIGlm IChmaWxlbmFtZSkKKwl7CisJCU9QRiA9IGZvcGVuKGZpbGVuYW1lLCBQR19CSU5BUllfVyk7CisJ CWlmICghT1BGKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1dCBmaWxlIFwiJXNc IjogJW0iLAorCQkJCQkgZmlsZW5hbWUpOworCX0KKwllbHNlCisJCU9QRiA9IHN0ZG91dDsKKwog CS8qCiAJICogSWYgdGhlcmUgd2FzIGEgZGF0YWJhc2Ugc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5k IGxpbmUsIHVzZSB0aGF0LAogCSAqIG90aGVyd2lzZSB0cnkgdG8gY29ubmVjdCB0byBkYXRhYmFz ZSAicG9zdGdyZXMiLCBhbmQgZmFpbGluZyB0aGF0CkBAIC00OTQsMTkgKzU0Niw2IEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlleHBhbmRfZGJuYW1lX3BhdHRlcm5zKGNvbm4sICZk YXRhYmFzZV9leGNsdWRlX3BhdHRlcm5zLAogCQkJCQkJICAgJmRhdGFiYXNlX2V4Y2x1ZGVfbmFt ZXMpOwogCi0JLyoKLQkgKiBPcGVuIHRoZSBvdXRwdXQgZmlsZSBpZiByZXF1aXJlZCwgb3RoZXJ3 aXNlIHVzZSBzdGRvdXQKLQkgKi8KLQlpZiAoZmlsZW5hbWUpCi0JewotCQlPUEYgPSBmb3Blbihm aWxlbmFtZSwgUEdfQklOQVJZX1cpOwotCQlpZiAoIU9QRikKLQkJCXBnX2ZhdGFsKCJjb3VsZCBu b3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwKLQkJCQkJIGZpbGVuYW1lKTsKLQl9Ci0J ZWxzZQotCQlPUEYgPSBzdGRvdXQ7Ci0KIAkvKgogCSAqIFNldCB0aGUgY2xpZW50IGVuY29kaW5n IGlmIHJlcXVlc3RlZC4KIAkgKi8KQEAgLTYwNiw3ICs2NDUsNyBAQCBtYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pCiAJfQogCiAJaWYgKCFnbG9iYWxzX29ubHkgJiYgIXJvbGVzX29ubHkgJiYg IXRhYmxlc3BhY2VzX29ubHkpCi0JCWR1bXBEYXRhYmFzZXMoY29ubik7CisJCWR1bXBEYXRhYmFz ZXMoY29ubiwgYXJjaER1bXBGb3JtYXQpOwogCiAJUFFmaW5pc2goY29ubik7CiAKQEAgLTYxOSw3 ICs2NTgsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCWZjbG9zZShPUEYpOwog CiAJCS8qIHN5bmMgdGhlIHJlc3VsdGluZyBmaWxlLCBlcnJvcnMgYXJlIG5vdCBmYXRhbCAqLwot CQlpZiAoZG9zeW5jKQorCQlpZiAoZG9zeW5jICYmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVs bCkpCiAJCQkodm9pZCkgZnN5bmNfZm5hbWUoZmlsZW5hbWUsIGZhbHNlKTsKIAl9CiAKQEAgLTYz MCwxMiArNjY5LDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHN0YXRpYyB2b2lk CiBoZWxwKHZvaWQpCiB7Ci0JcHJpbnRmKF8oIiVzIGV4dHJhY3RzIGEgUG9zdGdyZVNRTCBkYXRh YmFzZSBjbHVzdGVyIGludG8gYW4gU1FMIHNjcmlwdCBmaWxlLlxuXG4iKSwgcHJvZ25hbWUpOwor CXByaW50ZihfKCIlcyBleHRyYWN0cyBhIFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBiYXNl ZCBvbiBzcGVjaWZpZWQgZHVtcCBmb3JtYXQuXG5cbiIpLCBwcm9nbmFtZSk7CiAJcHJpbnRmKF8o IlVzYWdlOlxuIikpOwogCXByaW50ZihfKCIgICVzIFtPUFRJT05dLi4uXG4iKSwgcHJvZ25hbWUp OwogCiAJcHJpbnRmKF8oIlxuR2VuZXJhbCBvcHRpb25zOlxuIikpOwogCXByaW50ZihfKCIgIC1m LCAtLWZpbGU9RklMRU5BTUUgICAgICAgICAgb3V0cHV0IGZpbGUgbmFtZVxuIikpOworCXByaW50 ZihfKCIgIC1GLCAtLWZvcm1hdD1jfGR8dHxwICAgICAgICAgb3V0cHV0IGZpbGUgZm9ybWF0IChj dXN0b20sIGRpcmVjdG9yeSwgdGFyLFxuIgorCQkJICIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGxhaW4gdGV4dCAoZGVmYXVsdCkpXG4iKSk7CiAJcHJpbnRmKF8oIiAgLXYsIC0tdmVy Ym9zZSAgICAgICAgICAgICAgICB2ZXJib3NlIG1vZGVcbiIpKTsKIAlwcmludGYoXygiICAtViwg LS12ZXJzaW9uICAgICAgICAgICAgICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uLCB0aGVu IGV4aXRcbiIpKTsKIAlwcmludGYoXygiICAtLWxvY2std2FpdC10aW1lb3V0PVRJTUVPVVQgIGZh aWwgYWZ0ZXIgd2FpdGluZyBUSU1FT1VUIGZvciBhIHRhYmxlIGxvY2tcbiIpKTsKQEAgLTE0ODYs MTAgKzE1MjcsMTMgQEAgZXhwYW5kX2RibmFtZV9wYXR0ZXJucyhQR2Nvbm4gKmNvbm4sCiAgKiBE dW1wIGNvbnRlbnRzIG9mIGRhdGFiYXNlcy4KICAqLwogc3RhdGljIHZvaWQKLWR1bXBEYXRhYmFz ZXMoUEdjb25uICpjb25uKQorZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4sIEFyY2hpdmVGb3Jt YXQgYXJjaER1bXBGb3JtYXQpCiB7CiAJUEdyZXN1bHQgICAqcmVzOwogCWludAkJCWk7CisJY2hh cgkJZGJfc3ViZGlyW01BWFBHUEFUSF07CisJY2hhcgkJZGJmaWxlcGF0aFtNQVhQR1BBVEhdOwor CUZJTEUgICAgICAgKm1hcF9maWxlID0gTlVMTDsKIAogCS8qCiAJICogU2tpcCBkYXRhYmFzZXMg bWFya2VkIG5vdCBkYXRhbGxvd2Nvbm4sIHNpbmNlIHdlJ2QgYmUgdW5hYmxlIHRvIGNvbm5lY3QK QEAgLTE1MDMsNyArMTU0Nyw3IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCSAqIGRv ZXNuJ3QgaGF2ZSBzb21lIGZhaWx1cmUgbW9kZSB3aXRoIC0tY2xlYW4uCiAJICovCiAJcmVzID0g ZXhlY3V0ZVF1ZXJ5KGNvbm4sCi0JCQkJCSAgICJTRUxFQ1QgZGF0bmFtZSAiCisJCQkJCSAgICJT RUxFQ1QgZGF0bmFtZSwgb2lkICIKIAkJCQkJICAgIkZST00gcGdfZGF0YWJhc2UgZCAiCiAJCQkJ CSAgICJXSEVSRSBkYXRhbGxvd2Nvbm4gQU5EIGRhdGNvbm5saW1pdCAhPSAtMiAiCiAJCQkJCSAg ICJPUkRFUiBCWSAoZGF0bmFtZSA8PiAndGVtcGxhdGUxJyksIGRhdG5hbWUiKTsKQEAgLTE1MTEs OSArMTU1NSwzMyBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAlpZiAoUFFudHVwbGVz KHJlcykgPiAwKQogCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEYXRhYmFzZXNcbi0tXG5cbiIpOwog CisJLyoKKwkgKiBJZiBkaXJlY3RvcnkvdGFyL2N1c3RvbSBmb3JtYXQgaXMgc3BlY2lmaWVkIHRo ZW4gY3JlYXRlIGEgc3ViZGlyZWN0b3J5CisJICogdW5kZXIgdGhlIG1haW4gZGlyZWN0b3J5IGFu ZCBlYWNoIGRhdGFiYXNlIGR1bXAgZmlsZSBzdWJkaXJlY3Rvcnkgd2lsbAorCSAqIGJlIGNyZWF0 ZWQgdW5kZXIgdGhlIHN1YmRpcmVjdG9yeSBpbiBhcmNoaXZlIG1vZGUgYXMgcGVyIHNpbmdsZSBk YiBwZ19kdW1wLgorCSAqLworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJ CWNoYXIJbWFwX2ZpbGVfcGF0aFtNQVhQR1BBVEhdOworCisJCXNucHJpbnRmKGRiX3N1YmRpciwg TUFYUEdQQVRILCAiJXMvZGF0YWJhc2VzIiwgZmlsZW5hbWUpOworCisJCS8qIENyZWF0ZSBhIHN1 YmRpcmVjdG9yeSB3aXRoICdkYXRhYmFzZXMnIG5hbWUgdW5kZXIgbWFpbiBkaXJlY3RvcnkuICov CisJCWlmIChta2RpcihkYl9zdWJkaXIsIDA3NTUpICE9IDApCisJCQlwZ19mYXRhbCgiY291bGQg bm90IGNyZWF0ZSBzdWJkaXJlY3RvcnkgXCIlc1wiOiAlbSIsIGRiX3N1YmRpcik7CisKKwkJc25w cmludGYobWFwX2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAiJXMvbWFwLmRhdCIsIGZpbGVuYW1lKTsK KworCQkvKiBDcmVhdGUgYSBtYXAgZmlsZSAodG8gc3RvcmUgZGJvaWQgYW5kIGRibmFtZSkgKi8K KwkJbWFwX2ZpbGUgPSBmb3BlbihtYXBfZmlsZV9wYXRoLCBQR19CSU5BUllfVyk7CisJCWlmICgh bWFwX2ZpbGUpCisJCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gbWFwIGZpbGU6ICVzIiwgc3Ry ZXJyb3IoZXJybm8pKTsKKwl9CisKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkr KykKIAl7CiAJCWNoYXIJICAgKmRibmFtZSA9IFBRZ2V0dmFsdWUocmVzLCBpLCAwKTsKKwkJY2hh cgkgICAqb2lkID0gUFFnZXR2YWx1ZShyZXMsIGksIDEpOwogCQljb25zdCBjaGFyICpjcmVhdGVf b3B0czsKIAkJaW50CQkJcmV0OwogCkBAIC0xNTI4LDYgKzE1OTYsMTggQEAgZHVtcERhdGFiYXNl cyhQR2Nvbm4gKmNvbm4pCiAJCQljb250aW51ZTsKIAkJfQogCisJCS8qCisJCSAqIElmIHRoaXMg aXMgbm9uLXBsYWluIGR1bXAgZm9ybWF0LCB0aGVuIGFwcGVuZCBkYm9pZCBhbmQgZGJuYW1lIHRv CisJCSAqIHRoZSBtYXAuZGF0IGZpbGUuCisJCSAqLworCQlpZiAoYXJjaER1bXBGb3JtYXQgIT0g YXJjaE51bGwpCisJCXsKKwkJCXNucHJpbnRmKGRiZmlsZXBhdGgsIE1BWFBHUEFUSCwgIlwiJXNc Ii9cIiVzXCIiLCBkYl9zdWJkaXIsIG9pZCk7CisKKwkJCS8qIFB1dCBvbmUgbGluZSBlbnRyeSBm b3IgZGJvaWQgYW5kIGRibmFtZSBpbiBtYXAgZmlsZS4gKi8KKwkJCWZwcmludGYobWFwX2ZpbGUs ICIlcyAlc1xuIiwgb2lkLCBwZ19zdHJkdXAoZGJuYW1lKSk7CisJCX0KKwogCQlwZ19sb2dfaW5m bygiZHVtcGluZyBkYXRhYmFzZSBcIiVzXCIiLCBkYm5hbWUpOwogCiAJCWZwcmludGYoT1BGLCAi LS1cbi0tIERhdGFiYXNlIFwiJXNcIiBkdW1wXG4tLVxuXG4iLCBkYm5hbWUpOwpAQCAtMTU0Niw5 ICsxNjI2LDE3IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCQkJCWNyZWF0ZV9vcHRz ID0gIi0tY2xlYW4gLS1jcmVhdGUiOwogCQkJZWxzZQogCQkJewotCQkJCWNyZWF0ZV9vcHRzID0g IiI7CiAJCQkJLyogU2luY2UgcGdfZHVtcCB3b24ndCBlbWl0IGEgXGNvbm5lY3QgY29tbWFuZCwg d2UgbXVzdCAqLwotCQkJCWZwcmludGYoT1BGLCAiXFxjb25uZWN0ICVzXG5cbiIsIGRibmFtZSk7 CisJCQkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJCXsKKwkJCQkJY3JlYXRl X29wdHMgPSAiIjsKKwkJCQkJZnByaW50ZihPUEYsICJcXGNvbm5lY3QgJXNcblxuIiwgZGJuYW1l KTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJLyogRHVtcGluZyBhbGwgZGF0YWJhc2Vz IHNvIGFkZCAtLWNyZWF0ZSBvcHRpb24uICovCisJCQkJCWNyZWF0ZV9vcHRzID0gIi0tY3JlYXRl IjsKKwkJCQl9CiAJCQl9CiAJCX0KIAkJZWxzZQpAQCAtMTU1NywxOSArMTY0NSwzMCBAQCBkdW1w RGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAkJaWYgKGZpbGVuYW1lKQogCQkJZmNsb3NlKE9QRik7 CiAKLQkJcmV0ID0gcnVuUGdEdW1wKGRibmFtZSwgY3JlYXRlX29wdHMpOworCQlyZXQgPSBydW5Q Z0R1bXAoZGJuYW1lLCBjcmVhdGVfb3B0cywgZGJmaWxlcGF0aCwgYXJjaER1bXBGb3JtYXQpOwog CQlpZiAocmV0ICE9IDApCiAJCQlwZ19mYXRhbCgicGdfZHVtcCBmYWlsZWQgb24gZGF0YWJhc2Ug XCIlc1wiLCBleGl0aW5nIiwgZGJuYW1lKTsKIAogCQlpZiAoZmlsZW5hbWUpCiAJCXsKLQkJCU9Q RiA9IGZvcGVuKGZpbGVuYW1lLCBQR19CSU5BUllfQSk7CisJCQljaGFyCXRvY19wYXRoW01BWFBH UEFUSF07CisKKwkJCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwkJCQlzbnByaW50 Zih0b2NfcGF0aCwgTUFYUEdQQVRILCAiJXMvZ2xvYmFsLmRhdCIsIGZpbGVuYW1lKTsKKwkJCWVs c2UKKwkJCQlzbnByaW50Zih0b2NfcGF0aCwgTUFYUEdQQVRILCAiJXMiLCBmaWxlbmFtZSk7CisK KwkJCU9QRiA9IGZvcGVuKHRvY19wYXRoLCBQR19CSU5BUllfQSk7CiAJCQlpZiAoIU9QRikKIAkJ CQlwZ19mYXRhbCgiY291bGQgbm90IHJlLW9wZW4gdGhlIG91dHB1dCBmaWxlIFwiJXNcIjogJW0i LAotCQkJCQkJIGZpbGVuYW1lKTsKKwkJCQkJCSB0b2NfcGF0aCk7CiAJCX0KIAl9CiAKKwkvKiBD bG9zZSBtYXAgZmlsZSAqLworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwkJZmNs b3NlKG1hcF9maWxlKTsKKwogCVBRY2xlYXIocmVzKTsKIH0KIApAQCAtMTU3OSw3ICsxNjc4LDgg QEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAgKiBSdW4gcGdfZHVtcCBvbiBkYm5hbWUs IHdpdGggc3BlY2lmaWVkIG9wdGlvbnMuCiAgKi8KIHN0YXRpYyBpbnQKLXJ1blBnRHVtcChjb25z dCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzKQorcnVuUGdEdW1wKGNvbnN0 IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMsIGNoYXIgKmRiZmlsZSwKKwkJ QXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZvcm1hdCkKIHsKIAlQUUV4cEJ1ZmZlckRhdGEgY29ubnN0 cmJ1ZjsKIAlQUUV4cEJ1ZmZlckRhdGEgY21kOwpAQCAtMTU4OCwxNyArMTY4OCwzNiBAQCBydW5Q Z0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cykKIAlpbml0 UFFFeHBCdWZmZXIoJmNvbm5zdHJidWYpOwogCWluaXRQUUV4cEJ1ZmZlcigmY21kKTsKIAotCXBy aW50ZlBRRXhwQnVmZmVyKCZjbWQsICJcIiVzXCIgJXMgJXMiLCBwZ19kdW1wX2JpbiwKLQkJCQkJ ICBwZ2R1bXBvcHRzLT5kYXRhLCBjcmVhdGVfb3B0cyk7Ci0KIAkvKgotCSAqIElmIHdlIGhhdmUg YSBmaWxlbmFtZSwgdXNlIHRoZSB1bmRvY3VtZW50ZWQgcGxhaW4tYXBwZW5kIHBnX2R1bXAKLQkg KiBmb3JtYXQuCisJICogSWYgdGhpcyBpcyBub24tcGxhaW4gZm9ybWF0IGR1bXAsIHRoZW4gYXBw ZW5kIGZpbGUgbmFtZSBhbmQgZHVtcAorCSAqIGZvcm1hdCB0byB0aGUgcGdfZHVtcCBjb21tYW5k IHRvIGdldCBhcmNoaXZlIGR1bXAuCiAJICovCi0JaWYgKGZpbGVuYW1lKQotCQlhcHBlbmRQUUV4 cEJ1ZmZlclN0cigmY21kLCAiIC1GYSAiKTsKKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51 bGwpCisJeworCQlwcmludGZQUUV4cEJ1ZmZlcigmY21kLCAiXCIlc1wiIC1mICVzICVzIiwgcGdf ZHVtcF9iaW4sCisJCQkJCQkgIGRiZmlsZSwgY3JlYXRlX29wdHMpOworCisJCWlmIChhcmNoRHVt cEZvcm1hdCA9PSBhcmNoRGlyZWN0b3J5KQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwg IiAgLS1mb3JtYXQ9ZGlyZWN0b3J5ICIpOworCQllbHNlIGlmIChhcmNoRHVtcEZvcm1hdCA9PSBh cmNoQ3VzdG9tKQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAgLS1mb3JtYXQ9Y3Vz dG9tICIpOworCQllbHNlIGlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoVGFyKQorCQkJYXBwZW5k UFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAgLS1mb3JtYXQ9dGFyICIpOworCX0KIAllbHNlCi0JCWFw cGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZwICIpOworCXsKKwkJcHJpbnRmUFFFeHBCdWZm ZXIoJmNtZCwgIlwiJXNcIiAlcyAlcyIsIHBnX2R1bXBfYmluLAorCQkJCQkJcGdkdW1wb3B0cy0+ ZGF0YSwgY3JlYXRlX29wdHMpOworCisJCS8qCisJCSogSWYgd2UgaGF2ZSBhIGZpbGVuYW1lLCB1 c2UgdGhlIHVuZG9jdW1lbnRlZCBwbGFpbi1hcHBlbmQgcGdfZHVtcAorCQkqIGZvcm1hdC4KKwkJ Ki8KKwkJaWYgKGZpbGVuYW1lKQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRmEg Iik7CisJCWVsc2UKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZwICIpOworCX0K IAogCS8qCiAJICogQXBwZW5kIHRoZSBkYXRhYmFzZSBuYW1lIHRvIHRoZSBhbHJlYWR5LWNvbnN0 cnVjdGVkIHN0ZW0gb2YgY29ubmVjdGlvbgpAQCAtMTc0MywzICsxODYyLDkxIEBAIHJlYWRfZHVt cGFsbF9maWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0 ZXJuKQogCiAJZmlsdGVyX2ZyZWUoJmZzdGF0ZSk7CiB9CisKKy8qCisgKiBjcmVhdGVfb3Jfb3Bl bl9kaXIKKyAqCisgKiBUaGlzIHdpbGwgY3JlYXRlIGEgbmV3IGRpcmVjdG9yeSB3aXRoIGdpdmVu IG5hbWUuICBJZiB0aGVyZSBpcyBhbHJlYWR5IHNhbWUKKyAqIGVtcHR5IGRpcmVjdG9yeSBleGlz dCwgdGhlbiB1c2UgaXQuCisgKi8KK3N0YXRpYyB2b2lkCitjcmVhdGVfb3Jfb3Blbl9kaXIoY29u c3QgY2hhciAqZGlybmFtZSkKK3sKKwlzdHJ1Y3Qgc3RhdAkJc3Q7CisJYm9vbAkJCWlzX2VtcHR5 ID0gZmFsc2U7CisKKwkvKiB3ZSBhY2NlcHQgYW4gZW1wdHkgZXhpc3RpbmcgZGlyZWN0b3J5ICov CisJaWYgKHN0YXQoZGlybmFtZSwgJnN0KSA9PSAwICYmIFNfSVNESVIoc3Quc3RfbW9kZSkpCisJ eworCQlESVIJCSpkaXIgPSBvcGVuZGlyKGRpcm5hbWUpOworCisJCWlmIChkaXIpCisJCXsKKwkJ CXN0cnVjdCBkaXJlbnQJKmQ7CisKKwkJCWlzX2VtcHR5ID0gdHJ1ZTsKKworCQkJd2hpbGUgKGVy cm5vID0gMCwgKGQgPSByZWFkZGlyKGRpcikpKQorCQkJeworCQkJCWlmIChzdHJjbXAoZC0+ZF9u YW1lLCAiLiIpICE9IDAgJiYgc3RyY21wKGQtPmRfbmFtZSwgIi4uIikgIT0gMCkKKwkJCQl7CisJ CQkJCWlzX2VtcHR5ID0gZmFsc2U7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYg KGVycm5vKQorCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBkaXJlY3RvcnkgXCIlc1wiOiAl bSIsCisJCQkJCQlkaXJuYW1lKTsKKworCQkJaWYgKGNsb3NlZGlyKGRpcikpCisJCQkJcGdfZmF0 YWwoImNvdWxkIG5vdCBjbG9zZSBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsCisJCQkJCQlkaXJuYW1l KTsKKwkJfQorCisJCWlmKCFpc19lbXB0eSkKKwkJeworCQkJcGdfbG9nX2Vycm9yKCJkaXJlY3Rv cnkgXCIlc1wiIGV4aXN0cyBidXQgaXMgbm90IGVtcHR5IiwgZGlybmFtZSk7CisJCQlwZ19sb2df ZXJyb3JfaGludCgiSWYgeW91IHdhbnQgdG8gZHVtcCBkYXRhIG9uIHRoaXMgZGlyZWN0b3J5LCBl aXRoZXIgcmVtb3ZlIG9yIGVtcHR5ICIKKwkJCQkJCQkgICJ0aGlzIGRpcmVjdG9yeSBcIiVzXCIg b3IgcnVuICVzICIKKwkJCQkJCQkgICJ3aXRoIGFuIGFyZ3VtZW50IG90aGVyIHRoYW4gXCIlc1wi LiIsCisJCQkJCQkJICBkaXJuYW1lLCBwcm9nbmFtZSwgZGlybmFtZSk7CisJCQlleGl0X25pY2Vs eSgxKTsKKwkJfQorCX0KKwllbHNlIGlmIChta2RpcihkaXJuYW1lLCAwNzAwKSA8IDApCisJCXBn X2ZhdGFsKCJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiVzXCI6ICVtIiwgZGlybmFtZSk7 Cit9CisKKy8qCisgKiBwYXJzZUR1bXBGb3JtYXQKKyAqCisgKiBUaGlzIHdpbGwgdmFsaWRhdGUg ZHVtcCBmb3JtYXRzLgorICovCitzdGF0aWMgQXJjaGl2ZUZvcm1hdAorcGFyc2VEdW1wRm9ybWF0 KGNvbnN0IGNoYXIgKmZvcm1hdCkKK3sKKwlBcmNoaXZlRm9ybWF0CWFyY2hEdW1wRm9ybWF0Owor CisJaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAiYyIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0 ID0gYXJjaEN1c3RvbTsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgImN1c3RvbSIp ID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaEN1c3RvbTsKKwllbHNlIGlmIChwZ19zdHJj YXNlY21wKGZvcm1hdCwgImQiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hEaXJlY3Rv cnk7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJkaXJlY3RvcnkiKSA9PSAwKQor CQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hEaXJlY3Rvcnk7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNt cChmb3JtYXQsICJwIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoTnVsbDsKKwllbHNl IGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInBsYWluIikgPT0gMCkKKwkJYXJjaER1bXBGb3Jt YXQgPSBhcmNoTnVsbDsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInQiKSA9PSAw KQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hUYXI7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChm b3JtYXQsICJ0YXIiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hUYXI7CisJZWxzZQor CQlwZ19mYXRhbCgidW5yZWNvZ25pemVkIGFyY2hpdmUgZm9ybWF0IFwiJXNcIjsgcGxlYXNlIHNw ZWNpZnkgXCJjXCIsIFwiZFwiLCBcInBcIiwgb3IgXCJ0XCIiLAorCQkJCWZvcm1hdCk7CisKKwly ZXR1cm4gYXJjaER1bXBGb3JtYXQ7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdf cmVzdG9yZS5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYwppbmRleCBjNjAyMjcyZDdk Yi4uOGE3OGE1MmZiMDkgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMK KysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYwpAQCAtMiw3ICsyLDcgQEAKICAqCiAg KiBwZ19yZXN0b3JlLmMKICAqCXBnX3Jlc3RvcmUgaXMgYW4gdXRpbGl0eSBleHRyYWN0aW5nIHBv c3RncmVzIGRhdGFiYXNlIGRlZmluaXRpb25zCi0gKglmcm9tIGEgYmFja3VwIGFyY2hpdmUgY3Jl YXRlZCBieSBwZ19kdW1wIHVzaW5nIHRoZSBhcmNoaXZlcgorICoJZnJvbSBhIGJhY2t1cCBhcmNo aXZlIGNyZWF0ZWQgYnkgcGdfZHVtcC9wZ19kdW1wYWxsIHVzaW5nIHRoZSBhcmNoaXZlcgogICoJ aW50ZXJmYWNlLgogICoKICAqCXBnX3Jlc3RvcmUgd2lsbCByZWFkIHRoZSBiYWNrdXAgYXJjaGl2 ZSBhbmQKQEAgLTQxLDI3ICs0MSw3MSBAQAogI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCiAKICNp bmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaWZkZWYgSEFWRV9URVJN SU9TX0gKICNpbmNsdWRlIDx0ZXJtaW9zLmg+CiAjZW5kaWYKIAorI2luY2x1ZGUgImNvbW1vbi9j b25uZWN0LmgiCisjaW5jbHVkZSAiY29tcHJlc3NfaW8uaCIKKyNpbmNsdWRlICJjb21tb24vc3Ry aW5nLmgiCisjaW5jbHVkZSAiY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5oIgogI2luY2x1ZGUgImZl X3V0aWxzL29wdGlvbl91dGlscy5oIgorI2luY2x1ZGUgImZlX3V0aWxzL3N0cmluZ191dGlscy5o IgogI2luY2x1ZGUgImZpbHRlci5oIgogI2luY2x1ZGUgImdldG9wdF9sb25nLmgiCiAjaW5jbHVk ZSAicGFyYWxsZWwuaCIKKyNpbmNsdWRlICJwZ19iYWNrdXBfYXJjaGl2ZXIuaCIKICNpbmNsdWRl ICJwZ19iYWNrdXBfdXRpbHMuaCIKIAordHlwZWRlZiBzdHJ1Y3QgU2ltcGxlRGF0YWJhc2VPaWRM aXN0Q2VsbAoreworCXN0cnVjdCBTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCSpuZXh0OworCU9p ZAkJCQkJCQkJCWRiX29pZDsKKwljb25zdCBjaGFyCQkJCQkJCSpkYl9uYW1lOworfSBTaW1wbGVE YXRhYmFzZU9pZExpc3RDZWxsOworCit0eXBlZGVmIHN0cnVjdCBTaW1wbGVEYXRhYmFzZU9pZExp c3QKK3sKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICpoZWFkOworCVNpbXBsZURhdGFiYXNl T2lkTGlzdENlbGwgKnRhaWw7Cit9IFNpbXBsZURhdGFiYXNlT2lkTGlzdDsKKwogc3RhdGljIHZv aWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpOwogc3RhdGljIHZvaWQgcmVhZF9yZXN0b3Jl X2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFJlc3RvcmVPcHRpb25zICpvcHRzKTsKK3N0 YXRpYyBib29sIElzRmlsZUV4aXN0c0luRGlyZWN0b3J5KGNvbnN0IGNoYXIgKmRpciwgY29uc3Qg Y2hhciAqZmlsZW5hbWUpOworc3RhdGljIGludCByZXN0b3JlT25lRGF0YWJhc2UoY29uc3QgY2hh ciAqaW5wdXRGaWxlU3BlYywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsCisJCQkJCQkJICBpbnQgbnVt V29ya2VycywgYm9vbCBhcHBlbmRfZGF0YSwKKwkJCQkJCQkgIGNvbnN0IGNoYXIgKmRibmFtZSk7 CitzdGF0aWMgaW50IFJlYWRPbmVTdGF0ZW1lbnQoU3RyaW5nSW5mbyBpbkJ1ZiwgRklMRSAqcGZp bGUpOworc3RhdGljIGludCByZXN0b3JlQWxsRGF0YWJhc2VzKFBHY29ubiAqY29ubiwgY29uc3Qg Y2hhciAqZHVtcGRpcnBhdGgsCisJCQkJCQkJICAgU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRl X3BhdHRlcm5zLCBSZXN0b3JlT3B0aW9ucyAqb3B0cywgaW50IG51bVdvcmtlcnMpOworc3RhdGlj IGludCBwcm9jZXNzX2dsb2JhbF9zcWxfY29tbWFuZHMoUEdjb25uICpjb25uLCBjb25zdCBjaGFy ICpkdW1wZGlycGF0aCwKKwkJCQkJCQkJCQljb25zdCBjaGFyICpvdXRmaWxlKTsKK3N0YXRpYyB2 b2lkIGNvcHlfZ2xvYmFsX2ZpbGVfdG9fb3V0X2ZpbGUoY29uc3QgY2hhciAqb3V0ZmlsZSwgRklM RSAqcGZpbGUpOworc3RhdGljIGludCBnZXRfZGJuYW1lc19saXN0X3RvX3Jlc3RvcmUoUEdjb25u ICpjb25uLAorCQlTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmRibmFtZV9vaWRfbGlzdCwKKwkJU2lt cGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zKTsKK3N0YXRpYyBpbnQgZ2V0X2RibmFt ZV9vaWRfbGlzdF9mcm9tX21maWxlKGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLAorCQkJCQkJCQkJ CSAgU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpkYm5hbWVfb2lkX2xpc3QpOworc3RhdGljIHZvaWQg c2ltcGxlX2RiX29pZF9saXN0X2FwcGVuZChTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmxpc3QsIE9p ZCBkYl9vaWQsCisJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKmRibmFtZSk7CitzdGF0aWMgdm9pZCBz aW1wbGVfc3RyaW5nX2Z1bGxfbGlzdF9kZWxldGUoU2ltcGxlU3RyaW5nTGlzdCAqbGlzdCk7Citz dGF0aWMgdm9pZCBzaW1wbGVfZGJfb2lkX2Z1bGxfbGlzdF9kZWxldGUoU2ltcGxlRGF0YWJhc2VP aWRMaXN0ICpsaXN0KTsKK3N0YXRpYyB2b2lkIHNpbXBsZV9kYl9vaWRfbGlzdF9kZWxldGUoU2lt cGxlRGF0YWJhc2VPaWRMaXN0ICpsaXN0LAorCQkJCQkJCQkJICBTaW1wbGVEYXRhYmFzZU9pZExp c3RDZWxsICpjZWxsLAorCQkJCQkJCQkJICBTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICpwcmV2 KTsKK3N0YXRpYyB2b2lkIHNpbXBsZV9kYl9vaWRfbGlzdF9hcHBlbmQoU2ltcGxlRGF0YWJhc2VP aWRMaXN0ICpsaXN0LAorCQlPaWQgZGJfb2lkLCBjb25zdCBjaGFyICpkYm5hbWUpOworc3RhdGlj IHNpemVfdCBxdW90ZV9saXRlcmFsX2ludGVybmFsKGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3Jj LCBzaXplX3QgbGVuKTsKK3N0YXRpYyBjaGFyICpxdW90ZV9saXRlcmFsX2NzdHIoY29uc3QgY2hh ciAqcmF3c3RyKTsKIAogaW50CiBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAlSZXN0 b3JlT3B0aW9ucyAqb3B0czsKIAlpbnQJCQljOwotCWludAkJCWV4aXRfY29kZTsKIAlpbnQJCQlu dW1Xb3JrZXJzID0gMTsKLQlBcmNoaXZlICAgICpBSDsKIAljaGFyCSAgICppbnB1dEZpbGVTcGVj OwogCXN0YXRpYyBpbnQJZGlzYWJsZV90cmlnZ2VycyA9IDA7CiAJc3RhdGljIGludAllbmFibGVf cm93X3NlY3VyaXR5ID0gMDsKQEAgLTc3LDExICsxMjEsMTUgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCiAJc3RhdGljIGludAlzdHJpY3RfbmFtZXMgPSAwOwogCWJvb2wJCWRhdGFfb25s eSA9IGZhbHNlOwogCWJvb2wJCXNjaGVtYV9vbmx5ID0gZmFsc2U7CisJaW50CQkJbl9lcnJvcnMg PSAwOworCWJvb2wJCQkJZ2xvYmFsc19vbmx5ID0gZmFsc2U7CisJU2ltcGxlU3RyaW5nTGlzdAlk Yl9leGNsdWRlX3BhdHRlcm5zID0ge05VTEwsIE5VTEx9OwogCiAJc3RydWN0IG9wdGlvbiBjbWRv cHRzW10gPSB7CiAJCXsiY2xlYW4iLCAwLCBOVUxMLCAnYyd9LAogCQl7ImNyZWF0ZSIsIDAsIE5V TEwsICdDJ30sCiAJCXsiZGF0YS1vbmx5IiwgMCwgTlVMTCwgJ2EnfSwKKwkJeyJnbG9iYWxzLW9u bHkiLCAwLCBOVUxMLCAnZyd9LAogCQl7ImRibmFtZSIsIDEsIE5VTEwsICdkJ30sCiAJCXsiZXhp dC1vbi1lcnJvciIsIDAsIE5VTEwsICdlJ30sCiAJCXsiZXhjbHVkZS1zY2hlbWEiLCAxLCBOVUxM LCAnTid9LApAQCAtMTI4LDYgKzE3Niw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQog CQl7Im5vLXNlY3VyaXR5LWxhYmVscyIsIG5vX2FyZ3VtZW50LCAmbm9fc2VjdXJpdHlfbGFiZWxz LCAxfSwKIAkJeyJuby1zdWJzY3JpcHRpb25zIiwgbm9fYXJndW1lbnQsICZub19zdWJzY3JpcHRp b25zLCAxfSwKIAkJeyJmaWx0ZXIiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNH0sCisJCXsi ZXhjbHVkZS1kYXRhYmFzZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA2fSwKIAogCQl7TlVM TCwgMCwgTlVMTCwgMH0KIAl9OwpAQCAtMTU2LDcgKzIwNSw3IEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQogCQl9CiAJfQogCi0Jd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJn diwgImFjQ2Q6ZWY6RjpoOkk6ajpsTDpuOk46T3A6UDpSc1M6dDpUOlU6dndXeDEiLAorCXdoaWxl ICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhQWNDZDplZjpGOmdoOkk6ajpsTDpuOk46 T3A6UDpSc1M6dDpUOlU6dndXeDEiLAogCQkJCQkJCWNtZG9wdHMsIE5VTEwpKSAhPSAtMSkKIAl7 CiAJCXN3aXRjaCAoYykKQEAgLTE4MywxMSArMjMyLDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQogCQkJCWlmIChzdHJsZW4ob3B0YXJnKSAhPSAwKQogCQkJCQlvcHRzLT5mb3JtYXRO YW1lID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7CisJCQljYXNlICdnJzoKKwkJCQkv KiByZXN0b3JlIG9ubHkgZ2xvYmFsLmRhdCBmaWxlIGZyb20gZGlyZWN0b3J5ICovCisJCQkJZ2xv YmFsc19vbmx5ID0gdHJ1ZTsKKwkJCQlicmVhazsKIAkJCWNhc2UgJ2gnOgogCQkJCWlmIChzdHJs ZW4ob3B0YXJnKSAhPSAwKQogCQkJCQlvcHRzLT5jcGFyYW1zLnBnaG9zdCA9IHBnX3N0cmR1cChv cHRhcmcpOwogCQkJCWJyZWFrOwotCiAJCQljYXNlICdqJzoJCQkvKiBudW1iZXIgb2YgcmVzdG9y ZSBqb2JzICovCiAJCQkJaWYgKCFvcHRpb25fcGFyc2VfaW50KG9wdGFyZywgIi1qLy0tam9icyIs IDEsCiAJCQkJCQkJCQkgIFBHX01BWF9KT0JTLApAQCAtMzAyLDYgKzM1NCwxMCBAQCBtYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQkJZXhpdCgxKTsKIAkJCQlvcHRzLT5leGl0X29uX2Vy cm9yID0gdHJ1ZTsKIAkJCQlicmVhazsKKwkJCWNhc2UgNjoKKwkJCQkvKiBsaXN0IG9mIGRhdGFi YXNlcyBwYXR0ZXJucyB0aG9zZSBuZWVkcyB0byBza2lwIHdoaWxlIHJlc3RvcmluZyAqLworCQkJ CXNpbXBsZV9zdHJpbmdfbGlzdF9hcHBlbmQoJmRiX2V4Y2x1ZGVfcGF0dGVybnMsIG9wdGFyZyk7 CisJCQkJYnJlYWs7CiAKIAkJCWRlZmF1bHQ6CiAJCQkJLyogZ2V0b3B0X2xvbmcgYWxyZWFkeSBl bWl0dGVkIGEgY29tcGxhaW50ICovCkBAIC0zMjksNiArMzg1LDEzIEBAIG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQogCWlmICghb3B0cy0+Y3BhcmFtcy5kYm5hbWUgJiYgIW9wdHMtPmZpbGVu YW1lICYmICFvcHRzLT50b2NTdW1tYXJ5KQogCQlwZ19mYXRhbCgib25lIG9mIC1kLy0tZGJuYW1l IGFuZCAtZi8tLWZpbGUgbXVzdCBiZSBzcGVjaWZpZWQiKTsKIAorCWlmIChkYl9leGNsdWRlX3Bh dHRlcm5zLmhlYWQgIT0gTlVMTCAmJiBnbG9iYWxzX29ubHkpCisJeworCQlwZ19sb2dfZXJyb3Io Im9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAt Zy8tLWdsb2JhbHMtb25seSIpOworCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxw XCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQlleGl0X25pY2VseSgxKTsK Kwl9CisKIAkvKiBTaG91bGQgZ2V0IGF0IG1vc3Qgb25lIG9mIC1kIGFuZCAtZiwgZWxzZSB1c2Vy IGlzIGNvbmZ1c2VkICovCiAJaWYgKG9wdHMtPmNwYXJhbXMuZGJuYW1lKQogCXsKQEAgLTQwNCw2 ICs0NjcsMTA3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCQkgb3B0cy0+Zm9y bWF0TmFtZSk7CiAJfQogCisJLyoKKwkgKiBJZiB0b2MuZGF0IGZpbGUgZG9lcyBub3QgcHJlc2Vu dCBpbiBjdXJyZW50IHBhdGgsIHRoZW4gY2hlY2sgZm9yCisJICogZ2xvYmFsLmRhdC4gIElmIGds b2JhbC5kYXQgZmlsZSBpcyBwcmVzZW50LCB0aGVuIHJlc3RvcmUgYWxsIHRoZQorCSAqIGRhdGFi YXNlcyBmcm9tIG1hcC5kYXQoaWYgZXhpc3QpIGZpbGUgbGlzdCBhbmQgc2tpcCByZXN0b3Jpbmcg Zm9yCisJICogLS1leGNsdWRlLWRhdGFiYXNlIHBhdHRlcm5zLgorCSAqLworCWlmIChpbnB1dEZp bGVTcGVjICE9IE5VTEwgJiYgIUlzRmlsZUV4aXN0c0luRGlyZWN0b3J5KGlucHV0RmlsZVNwZWMs ICJ0b2MuZGF0IikgJiYKKwkJCUlzRmlsZUV4aXN0c0luRGlyZWN0b3J5KGlucHV0RmlsZVNwZWMs ICJnbG9iYWwuZGF0IikpCisJeworCQlQR2Nvbm4gICpjb25uID0gTlVMTDsgLyogQ29ubmVjdGlv biB0byByZXN0b3JlIGdsb2JhbCBzcWwgY29tbWFuZHMuICovCisKKwkJLyoKKwkJICogVXNlciBp cyBzdWdnZXN0ZWQgdG8gdXNlIHNpbmdsZSBkYXRhYmFzZSBkdW1wIGZvciAtLWxpc3Qgb3B0aW9u LgorCQkgKi8KKwkJaWYgKG9wdHMtPnRvY1N1bW1hcnkpCisJCQlwZ19mYXRhbCgib3B0aW9uIC1s Ly0tbGlzdCBjYW5ub3QgYmUgdXNlZCB3aGVuIHJlc3RvcmluZyBtdWx0aXBsZSBkYXRhYmFzZXMg YnkgYXJjaGl2ZSBvZiBwZ19kdW1wYWxsIik7CisKKwkJLyoKKwkJICogVG8gcmVzdG9yZSBtdWx0 aXBsZSBkYXRhYmFzZXMsIC1DIChjcmVhdGUgZGF0YWJhc2UpIG9wdGlvbiBzaG91bGQgYmUgc3Bl Y2lmaWVkLgorCQkgKiBFdmVuIHRoZXJlIGlzIHNpbmdsZSBkYXRhYmFzZSBpbiBkdW1wLCByZXBv cnQgZXJyb3IgYmVjYXVzZSBpdCBtaWdodCBiZSBwb3NzaWJsZQorCQkgKiB0aGF0IGRhdGFiYXNl IGhhc24ndCBjcmVhdGVkIHNvIGJldHRlciB3ZSByZXBvcnQgZXJyb3IuCisJCSAqLworCQlpZiAo IWdsb2JhbHNfb25seSAmJiBvcHRzLT5jcmVhdGVEQiAhPSAxKQorCQl7CisJCQlwZ19sb2dfZXJy b3IoIi1DLy0tY3JlYXRlIG9wdGlvbiBzaG91bGQgYmUgc3BlY2lmaWVkIHdoZW4gcmVzdG9yaW5n IG11bHRpcGxlIGRhdGFiYXNlcyBieSBhcmNoaXZlIG9mIHBnX2R1bXBhbGwiKTsKKwkJCXBnX2xv Z19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBw cm9nbmFtZSk7CisJCQlwZ19sb2dfZXJyb3JfaGludCgiSWYgZGIgaXMgYWxyZWFkeSBjcmVhdGVk IGFuZCBkdW1wIGhhcyBzaW5nbGUgZGIgZHVtcCwgdGhlbiB1c2UgcGFydGljdWxhciBkdW1wIGZp bGUuIik7CisJCQlleGl0X25pY2VseSgxKTsKKwkJfQorCisJCS8qCisJCSAqIENvbm5lY3QgdG8g ZGF0YWJhc2UgdG8gZXhlY3V0ZSBnbG9iYWwgc3FsIGNvbW1hbmRzIGZyb20gZ2xvYmFsLmRhdCBm aWxlLgorCQkgKi8KKwkJaWYgKG9wdHMtPmNwYXJhbXMuZGJuYW1lKQorCQl7CisJCQljb25uID0g Y29ubmVjdERhdGFiYXNlKG9wdHMtPmNwYXJhbXMuZGJuYW1lLCBOVUxMLCBvcHRzLT5jcGFyYW1z LnBnaG9zdCwKKwkJCQkJb3B0cy0+Y3BhcmFtcy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMudXNlcm5h bWUsIFRSSV9ERUZBVUxULAorCQkJCQlmYWxzZSwgcHJvZ25hbWUsIE5VTEwsIE5VTEwpOworCisJ CQlpZiAoIWNvbm4pCisJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb25uZWN0IHRvIGRhdGFiYXNl IFwiJXNcIiIsIG9wdHMtPmNwYXJhbXMuZGJuYW1lKTsKKwkJfQorCisJCS8qIElmIGdsb2JhbHMt b25seSwgdGhlbiByZXR1cm4gZnJvbSBoZXJlLiAqLworCQlpZiAoZ2xvYmFsc19vbmx5KQorCQl7 CisJCQkvKiBPcGVuIGdsb2JhbC5kYXQgZmlsZSBhbmQgZXhlY3V0ZS9hcHBlbmQgYWxsIHRoZSBn bG9iYWwgc3FsIGNvbW1hbmRzLiAqLworCQkJbl9lcnJvcnMgPSBwcm9jZXNzX2dsb2JhbF9zcWxf Y29tbWFuZHMoY29ubiwgaW5wdXRGaWxlU3BlYywKKwkJCQkJb3B0cy0+ZmlsZW5hbWUpOworCisJ CQlpZiAoY29ubikKKwkJCQlQUWZpbmlzaChjb25uKTsKKworCQkJcGdfbG9nX2luZm8oImRhdGFi YXNlcyByZXN0b3JpbmcgaXMgc2tpcHBlZCBhcyAtZy8tLWdsb2JhbHMtb25seSBvcHRpb24gaXMg c3BlY2lmaWVkIik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBOb3cgcmVzdG9yZSBhbGwgdGhl IGRhdGFiYXNlcyBmcm9tIG1hcC5kYXQgZmlsZS4gKi8KKwkJCW5fZXJyb3JzID0gcmVzdG9yZUFs bERhdGFiYXNlcyhjb25uLCBpbnB1dEZpbGVTcGVjLCBkYl9leGNsdWRlX3BhdHRlcm5zLAorCQkJ CQlvcHRzLCBudW1Xb3JrZXJzKTsKKwkJfQorCisJCS8qIEZyZWUgZGIgcGF0dGVybiBsaXN0LiAq LworCQlzaW1wbGVfc3RyaW5nX2Z1bGxfbGlzdF9kZWxldGUoJmRiX2V4Y2x1ZGVfcGF0dGVybnMp OworCX0KKwllbHNlIC8qIHByb2Nlc3MgaWYgZ2xvYmFsLmRhdCBmaWxlIGRvZXMgbm90IGV4aXN0 LiAqLworCXsKKwkJaWYgKGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZCAhPSBOVUxMKQorCQkJcGdf ZmF0YWwoIm9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2FuIGJlIHVzZWQgb25seSB3aGVuIHJl c3RvcmluZyBtdWx0aXBsZSBkYXRhYmFzZXMgYnkgYXJjaGl2ZSBvZiBwZ19kdW1wYWxsIik7CisK KwkJaWYgKGdsb2JhbHNfb25seSkKKwkJCXBnX2ZhdGFsKCJvcHRpb24gLWcvLS1nbG9iYWxzLW9u bHkgY2FuIGJlIHVzZWQgb25seSB3aGVuIHJlc3RvcmluZyBtdWx0aXBsZSBkYXRhYmFzZXMgYnkg YXJjaGl2ZSBvZiBwZ19kdW1wYWxsIik7CisKKwkJbl9lcnJvcnMgPSByZXN0b3JlT25lRGF0YWJh c2UoaW5wdXRGaWxlU3BlYywgb3B0cywgbnVtV29ya2VycywgZmFsc2UsIE5VTEwpOworCX0KKwor CS8qIGRvbmUsIHByaW50IGEgc3VtbWFyeSBvZiBpZ25vcmVkIGVycm9ycyBkdXJpbmcgcmVzdG9y ZS4gKi8KKwlpZiAobl9lcnJvcnMpCisJeworCQlwZ19sb2dfd2FybmluZygiZXJyb3JzIGlnbm9y ZWQgb24gcmVzdG9yZTogJWQiLCBuX2Vycm9ycyk7CisJCXJldHVybiAxOworCX0KKworCXJldHVy biAwOworfQorCisvKgorICogcmVzdG9yZU9uZURhdGFiYXNlCisgKgorICogVGhpcyB3aWxsIHJl c3RvcmUgb25lIGRhdGFiYXNlIHVzaW5nIHRvYy5kYXQgZmlsZS4KKyAqIGRibmFtZSBpcyB0aGUg Y3VycmVudCB0byBiZSByZXN0b3JlZCBkYXRhYmFzZSBuYW1lLgorICoKKyAqIHJldHVybnMsIG51 bWJlciBvZiBlcnJvcnMgd2hpbGUgZG9pbmcgcmVzdG9yZS4KKyAqLworc3RhdGljIGludAorcmVz dG9yZU9uZURhdGFiYXNlKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsIFJlc3RvcmVPcHRpb25z ICpvcHRzLAorCQkJCSAgIGludCBudW1Xb3JrZXJzLCBib29sIGFwcGVuZF9kYXRhLCBjb25zdCBj aGFyICpkYm5hbWUpCit7CisJQXJjaGl2ZQkJKkFIOworCWludAkJCW5fZXJyb3JzID0gMDsKKwog CUFIID0gT3BlbkFyY2hpdmUoaW5wdXRGaWxlU3BlYywgb3B0cy0+Zm9ybWF0KTsKIAogCVNldEFy Y2hpdmVPcHRpb25zKEFILCBOVUxMLCBvcHRzKTsKQEAgLTQyOSwyOSArNTkzLDI4IEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCUFILT5udW1Xb3JrZXJzID0gbnVtV29ya2VyczsKIAog CWlmIChvcHRzLT50b2NTdW1tYXJ5KQotCQlQcmludFRPQ1N1bW1hcnkoQUgpOworCQlQcmludFRP Q1N1bW1hcnkoQUgsIGFwcGVuZF9kYXRhKTsKIAllbHNlCiAJewogCQlQcm9jZXNzQXJjaGl2ZVJl c3RvcmVPcHRpb25zKEFIKTsKLQkJUmVzdG9yZUFyY2hpdmUoQUgpOworCQlSZXN0b3JlQXJjaGl2 ZShBSCwgYXBwZW5kX2RhdGEpOwogCX0KIAotCS8qIGRvbmUsIHByaW50IGEgc3VtbWFyeSBvZiBp Z25vcmVkIGVycm9ycyAqLworCS8qIHJldHVybiBudW1iZXIgb2YgZXJyb3JzICovCiAJaWYgKEFI LT5uX2Vycm9ycykKLQkJcGdfbG9nX3dhcm5pbmcoImVycm9ycyBpZ25vcmVkIG9uIHJlc3RvcmU6 ICVkIiwgQUgtPm5fZXJyb3JzKTsKKwkJbl9lcnJvcnMgPSBBSC0+bl9lcnJvcnM7CiAKIAkvKiBB SCBtYXkgYmUgZnJlZWQgaW4gQ2xvc2VBcmNoaXZlPyAqLwotCWV4aXRfY29kZSA9IEFILT5uX2Vy cm9ycyA/IDEgOiAwOwotCiAJQ2xvc2VBcmNoaXZlKEFIKTsKIAotCXJldHVybiBleGl0X2NvZGU7 CisJcmV0dXJuIG5fZXJyb3JzOwogfQogCiBzdGF0aWMgdm9pZAogdXNhZ2UoY29uc3QgY2hhciAq cHJvZ25hbWUpCiB7Ci0JcHJpbnRmKF8oIiVzIHJlc3RvcmVzIGEgUG9zdGdyZVNRTCBkYXRhYmFz ZSBmcm9tIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wLlxuXG4iKSwgcHJvZ25hbWUpOwor CXByaW50ZihfKCIlcyByZXN0b3JlcyBhIFBvc3RncmVTUUwgZGF0YWJhc2UgZnJvbSBhbiBhcmNo aXZlIGNyZWF0ZWQgYnkgcGdfZHVtcC5cbiIKKwkJCQkiSWYgYXJjaGl2ZSBpcyBjcmVhdGVkIGJ5 IHBnX2R1bXBhbGwsIHRoZW4gcmVzdG9yZXMgbXVsdGlwbGUgZGF0YWJhc2VzIGFsc28uIFxuXG4i KSwgcHJvZ25hbWUpOwogCXByaW50ZihfKCJVc2FnZTpcbiIpKTsKIAlwcmludGYoXygiICAlcyBb T1BUSU9OXS4uLiBbRklMRV1cbiIpLCBwcm9nbmFtZSk7CiAKQEAgLTQ2OSw2ICs2MzIsNyBAQCB1 c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkKIAlwcmludGYoXygiICAtYywgLS1jbGVhbiAgICAg ICAgICAgICAgICAgIGNsZWFuIChkcm9wKSBkYXRhYmFzZSBvYmplY3RzIGJlZm9yZSByZWNyZWF0 aW5nXG4iKSk7CiAJcHJpbnRmKF8oIiAgLUMsIC0tY3JlYXRlICAgICAgICAgICAgICAgICBjcmVh dGUgdGhlIHRhcmdldCBkYXRhYmFzZVxuIikpOwogCXByaW50ZihfKCIgIC1lLCAtLWV4aXQtb24t ZXJyb3IgICAgICAgICAgZXhpdCBvbiBlcnJvciwgZGVmYXVsdCBpcyB0byBjb250aW51ZVxuIikp OworCXByaW50ZihfKCIgIC1nLCAtLWdsb2JhbHMtb25seSAgICAgICAgICAgcmVzdG9yZSBvbmx5 IGdsb2JhbCBvYmplY3RzLCBubyBkYXRhYmFzZXNcbiIpKTsKIAlwcmludGYoXygiICAtSSwgLS1p bmRleD1OQU1FICAgICAgICAgICAgIHJlc3RvcmUgbmFtZWQgaW5kZXhcbiIpKTsKIAlwcmludGYo XygiICAtaiwgLS1qb2JzPU5VTSAgICAgICAgICAgICAgIHVzZSB0aGlzIG1hbnkgcGFyYWxsZWwg am9icyB0byByZXN0b3JlXG4iKSk7CiAJcHJpbnRmKF8oIiAgLUwsIC0tdXNlLWxpc3Q9RklMRU5B TUUgICAgICB1c2UgdGFibGUgb2YgY29udGVudHMgZnJvbSB0aGlzIGZpbGUgZm9yXG4iCkBAIC00 ODEsNiArNjQ1LDcgQEAgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpCiAJcHJpbnRmKF8oIiAg LVMsIC0tc3VwZXJ1c2VyPU5BTUUgICAgICAgICBzdXBlcnVzZXIgdXNlciBuYW1lIHRvIHVzZSBm b3IgZGlzYWJsaW5nIHRyaWdnZXJzXG4iKSk7CiAJcHJpbnRmKF8oIiAgLXQsIC0tdGFibGU9TkFN RSAgICAgICAgICAgICByZXN0b3JlIG5hbWVkIHJlbGF0aW9uICh0YWJsZSwgdmlldywgZXRjLilc biIpKTsKIAlwcmludGYoXygiICAtVCwgLS10cmlnZ2VyPU5BTUUgICAgICAgICAgIHJlc3RvcmUg bmFtZWQgdHJpZ2dlclxuIikpOworCXByaW50ZihfKCIgIC0tZXhjbHVkZS1kYXRhYmFzZT1QQVRU RVJOICAgZXhjbHVkZSBkYXRhYmFzZXMgd2hvc2UgbmFtZSBtYXRjaGVzIHdpdGggcGF0dGVyblxu IikpOwogCXByaW50ZihfKCIgIC14LCAtLW5vLXByaXZpbGVnZXMgICAgICAgICAgc2tpcCByZXN0 b3JhdGlvbiBvZiBhY2Nlc3MgcHJpdmlsZWdlcyAoZ3JhbnQvcmV2b2tlKVxuIikpOwogCXByaW50 ZihfKCIgIC0xLCAtLXNpbmdsZS10cmFuc2FjdGlvbiAgICAgcmVzdG9yZSBhcyBhIHNpbmdsZSB0 cmFuc2FjdGlvblxuIikpOwogCXByaW50ZihfKCIgIC0tZGlzYWJsZS10cmlnZ2VycyAgICAgICAg ICAgZGlzYWJsZSB0cmlnZ2VycyBkdXJpbmcgZGF0YS1vbmx5IHJlc3RvcmVcbiIpKTsKQEAgLTUx Myw4ICs2NzgsOCBAQCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkKIAlwcmludGYoXygiICAt LXJvbGU9Uk9MRU5BTUUgICAgICAgICAgZG8gU0VUIFJPTEUgYmVmb3JlIHJlc3RvcmVcbiIpKTsK IAogCXByaW50ZihfKCJcbiIKLQkJCSAiVGhlIG9wdGlvbnMgLUksIC1uLCAtTiwgLVAsIC10LCAt VCwgYW5kIC0tc2VjdGlvbiBjYW4gYmUgY29tYmluZWQgYW5kIHNwZWNpZmllZFxuIgotCQkJICJt dWx0aXBsZSB0aW1lcyB0byBzZWxlY3QgbXVsdGlwbGUgb2JqZWN0cy5cbiIpKTsKKwkJCSAiVGhl IG9wdGlvbnMgLUksIC1uLCAtTiwgLVAsIC10LCAtVCwgLS1zZWN0aW9uLCBhbmQgLS1leGNsdWRl LWRhdGFiYXNlIGNhbiBiZSBjb21iaW5lZFxuIgorCQkJICJhbmQgc3BlY2lmaWVkIG11bHRpcGxl IHRpbWVzIHRvIHNlbGVjdCBtdWx0aXBsZSBvYmplY3RzLlxuIikpOwogCXByaW50ZihfKCJcbklm IG5vIGlucHV0IGZpbGUgbmFtZSBpcyBzdXBwbGllZCwgdGhlbiBzdGFuZGFyZCBpbnB1dCBpcyB1 c2VkLlxuXG4iKSk7CiAJcHJpbnRmKF8oIlJlcG9ydCBidWdzIHRvIDwlcz4uXG4iKSwgUEFDS0FH RV9CVUdSRVBPUlQpOwogCXByaW50ZihfKCIlcyBob21lIHBhZ2U6IDwlcz5cbiIpLCBQQUNLQUdF X05BTUUsIFBBQ0tBR0VfVVJMKTsKQEAgLTYxOSwzICs3ODQsNjU0IEBAIHJlYWRfcmVzdG9yZV9m aWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBSZXN0b3JlT3B0aW9ucyAqb3B0cykKIAogCWZp bHRlcl9mcmVlKCZmc3RhdGUpOwogfQorCisvKgorICogSXNGaWxlRXhpc3RzSW5EaXJlY3RvcnkK KyAqCisgKiBSZXR1cm5zIHRydWUgaWYgZmlsZSBleGlzdCBpbiBjdXJyZW50IGRpcmVjdG9yeS4K KyAqLworc3RhdGljIGJvb2wKK0lzRmlsZUV4aXN0c0luRGlyZWN0b3J5KGNvbnN0IGNoYXIgKmRp ciwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJc3RydWN0IHN0YXQJCQlzdDsKKwljaGFyCQkJ CWJ1ZltNQVhQR1BBVEhdOworCisJaWYgKHNucHJpbnRmKGJ1ZiwgTUFYUEdQQVRILCAiJXMvJXMi LCBkaXIsIGZpbGVuYW1lKSA+PSBNQVhQR1BBVEgpCisJCXBnX2ZhdGFsKCJkaXJlY3RvcnkgbmFt ZSB0b28gbG9uZzogXCIlc1wiIiwgZGlyKTsKKworCXJldHVybiAoc3RhdChidWYsICZzdCkgPT0g MCAmJiBTX0lTUkVHKHN0LnN0X21vZGUpKTsKK30KKworLyoKKyAqIFJlYWRPbmVTdGF0ZW1lbnQK KyAqCisgKiBUaGlzIHdpbGwgc3RhcnQgcmVhZGluZyBmcm9tIHBhc3NlZCBmaWxlIHBvaW50ZXIg dXNpbmcgZmdldGMgYW5kIHJlYWQgdGlsbAorICogc2VtaWNvbG9uKHNxbCBzdGF0ZW1lbnQgdGVy bWluYXRvciBmb3IgZ2xvYmFsLmRhdCBmaWxlKQorICoKKyAqIEVPRiBpcyByZXR1cm5lZCBpZiBl bmQtb2YtZmlsZSBpbnB1dCBpcyBzZWVuOyB0aW1lIHRvIHNodXQgZG93bi4KKyAqLworCitzdGF0 aWMgaW50CitSZWFkT25lU3RhdGVtZW50KFN0cmluZ0luZm8gaW5CdWYsIEZJTEUgKnBmaWxlKQor eworCWludAkJCWM7IC8qIGNoYXJhY3RlciByZWFkIGZyb20gZ2V0YygpICovCisJaW50CQkJbTsK KworCVN0cmluZ0luZm9EYXRhCXE7CisJaW5pdFN0cmluZ0luZm8oJnEpOworCisJcmVzZXRTdHJp bmdJbmZvKGluQnVmKTsKKworCS8qCisJICogUmVhZCBjaGFyYWN0ZXJzIHVudGlsIEVPRiBvciB0 aGUgYXBwcm9wcmlhdGUgZGVsaW1pdGVyIGlzIHNlZW4uCisJICovCisJd2hpbGUgKChjID0gZmdl dGMocGZpbGUpKSAhPSBFT0YpCisJeworCQlpZiAoYyAhPSAnXCcnICYmIGMgIT0gJyInICYmIGMg IT0gJ1xuJyAmJiBjICE9ICc7JykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoaW5CdWYs IChjaGFyKSBjKTsKKwkJCXdoaWxlICgoYyA9IGZnZXRjKHBmaWxlKSkgIT0gRU9GKQorCQkJewor CQkJCWlmIChjICE9ICdcJycgJiYgYyAhPSAnIicgJiYgYyAhPSAnOycgJiYgYyAhPSAnXG4nKQor CQkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihpbkJ1ZiwgKGNoYXIpIGMpOworCQkJCWVsc2UKKwkJ CQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoYyA9PSAnXCcnIHx8IGMgPT0gJyInKQorCQl7 CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmcSwgKGNoYXIpIGMpOworCQkJbSA9IGM7CisKKwkJ CXdoaWxlICgoYyA9IGZnZXRjKHBmaWxlKSkgIT0gRU9GKQorCQkJeworCQkJCWFwcGVuZFN0cmlu Z0luZm9DaGFyKCZxLCAoY2hhcikgYyk7CisKKwkJCQlpZihjID09IG0pCisJCQkJeworCQkJCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKGluQnVmLCBxLmRhdGEpOworCQkJCQlyZXNldFN0cmluZ0lu Zm8oJnEpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCQlpZiAoYyA9PSAnOycp CisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGluQnVmLCAoY2hhcikgJzsnKTsKKwkJCWJy ZWFrOworCQl9CisKKwkJaWYgKGMgPT0gJ1xuJykKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGlu QnVmLCAoY2hhcikgJ1xuJyk7CisJfQorCisJLyogTm8gaW5wdXQgYmVmb3JlIEVPRiBzaWduYWwg bWVhbnMgdGltZSB0byBxdWl0LiAqLworCWlmIChjID09IEVPRiAmJiBpbkJ1Zi0+bGVuID09IDAp CisJCXJldHVybiBFT0Y7CisKKwkvKiBBZGQgJ1wwJyB0byBtYWtlIGl0IGxvb2sgdGhlIHNhbWUg YXMgbWVzc2FnZSBjYXNlLiAqLworCWFwcGVuZFN0cmluZ0luZm9DaGFyKGluQnVmLCAoY2hhcikg J1wwJyk7CisKKwlyZXR1cm4gJ1EnOworfQorCisvKgorICogZ2V0X2RibmFtZXNfbGlzdF90b19y ZXN0b3JlCisgKgorICogVGhpcyB3aWxsIHJlbW92ZSBlbnRyaWVzIGZyb20gZGJuYW1lX29pZF9s aXN0IHRoYXQgcGF0dGVybiBtYXRjaGluZyBhbnkKKyAqIGluIHRoZSBkYl9leGNsdWRlX3BhdHRl cm5zIGxpc3QuICBkYm5hbWVfb2lkX2xpc3QgbWF5YmUgaW5wbGFjZSBtb2RpZmllZC4KKyAqCisg KiByZXR1cm5zLCBudW1iZXIgb2YgZGF0YWJhc2Ugd2lsbCBiZSByZXN0b3JlZC4KKyAqCisgKi8K K3N0YXRpYyBpbnQKK2dldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9yZShQR2Nvbm4gKmNvbm4sCisJ CVNpbXBsZURhdGFiYXNlT2lkTGlzdCAqZGJuYW1lX29pZF9saXN0LAorCQlTaW1wbGVTdHJpbmdM aXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMpCit7CisJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbAkq ZGJvaWRfY2VsbCA9IGRibmFtZV9vaWRfbGlzdC0+aGVhZDsKKwlTaW1wbGVEYXRhYmFzZU9pZExp c3RDZWxsCSpkYm9pZHByZWNlbGwgPSBOVUxMOworCWludAkJCQkJCQljb3VudF9kYiA9IDA7CisJ UFFFeHBCdWZmZXIgcXVlcnk7CisJUEdyZXN1bHQgICAqcmVzOworCisJLyogUmV0dXJuIDAgaWYg dGhlcmUgaXMgbm8gZGF0YWJhc2UgdG8gcmVzdG9yZS4gKi8KKwlpZiAoZGJvaWRfY2VsbCA9PSBO VUxMKQorCQlyZXR1cm4gMDsKKworCXF1ZXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCWlm ICghY29ubikKKwkJcGdfbG9nX2luZm8oImNvbnNpZGVyaW5nIFBBVFRFUk4gYXMgTkFNRSBmb3Ig LS1leGNsdWRlLWRhdGFiYXNlIG9wdGlvbiBhcyBubyBkYiBjb25uZWN0aW9uIHdoaWxlIGRvaW5n IHBnX3Jlc3RvcmUuIik7CisKKwkvKgorCSAqIFByb2Nlc3Mgb25lIGJ5IG9uZSBhbGwgZGJuYW1l cyBhbmQgaWYgc3BlY2lmaWVkIHRvIHNraXAgcmVzdG9yaW5nLCB0aGVuCisJICogcmVtb3ZlIGRi bmFtZSBmcm9tIGxpc3QuCisJICovCisJd2hpbGUgKGRib2lkX2NlbGwgIT0gTlVMTCkKKwl7CisJ CWJvb2wJCQkJCQlza2lwX2RiX3Jlc3RvcmUgPSBmYWxzZTsKKwkJU2ltcGxlRGF0YWJhc2VPaWRM aXN0Q2VsbAkqbmV4dCA9IGRib2lkX2NlbGwtPm5leHQ7CisKKwkJZm9yIChTaW1wbGVTdHJpbmdM aXN0Q2VsbCAqY2VsbGRiID0gZGJfZXhjbHVkZV9wYXR0ZXJucy5oZWFkOyBjZWxsZGI7IGNlbGxk YiA9IGNlbGxkYi0+bmV4dCkKKwkJeworCQkJLyoKKwkJCSAqIHRoZSBjb25zdHJ1Y3QgcGF0dGVy biBtYXRjaGluZyBxdWVyeToKKwkJCSAqIFNFTEVDVCAxIFdIRVJFIFhYWCBPUEVSQVRPUihwZ19j YXRhbG9nLn4pICdeKFBBVFRFUk4pJCcgQ09MTEFURQorCQkJICogcGdfY2F0YWxvZy5kZWZhdWx0 CisJCQkgKgorCQkJICogWFhYIHJlcHJlc2VudHMgdGhlIHN0cmluZyBsaXRlcmFsIGRhdGFiYXNl IG5hbWUgZGVyaXZlZCBmcm9tIHRoZQorCQkJICogZGJuYW1lX29pZF9saXN0LCB3aGljaCBpcyBp bml0aWFsbHkgZXh0cmFjdGVkIGZyb20gdGhlIG1hcC5kYXQKKwkJCSAqIGZpbGUgbG9jYXRlZCBp biB0aGUgYmFja3VwIGRpcmVjdG9yeS4gIHRoYXQncyB3aHkgd2UgbmVlZAorCQkJICogcXVvdGVf bGl0ZXJhbF9jc3RyLgorCQkJICoKKwkJCSAqIElmIG5vIGRiIGNvbm5lY3Rpb24sIHRoZW4gY29u c2lkZXIgUEFUVEVSTiBhcyBOQU1FLgorCQkJICovCisJCQlpZiAocGdfc3RyY2FzZWNtcChkYm9p ZF9jZWxsLT5kYl9uYW1lLCBjZWxsZGItPnZhbCkgPT0gMCkKKwkJCSAgIHNraXBfZGJfcmVzdG9y ZSA9IHRydWU7CisJCQllbHNlIGlmIChjb25uKQorCQkJeworCQkJCWludAlkb3RjbnQ7CisKKwkJ CQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIlNFTEVDVCAxICIpOworCQkJCXByb2Nlc3NT UUxOYW1lUGF0dGVybihjb25uLCBxdWVyeSwgY2VsbGRiLT52YWwsIGZhbHNlLAorCQkJCQkJCQkJ ICBmYWxzZSwgTlVMTCwgcXVvdGVfbGl0ZXJhbF9jc3RyKGRib2lkX2NlbGwtPmRiX25hbWUpLAor CQkJCQkJCQkJICBOVUxMLCBOVUxMLCBOVUxMLCAmZG90Y250KTsKKworCQkJCWlmIChkb3RjbnQg PiAwKQorCQkJCXsKKwkJCQkJcGdfbG9nX2Vycm9yKCJpbXByb3BlciBxdWFsaWZpZWQgbmFtZSAo dG9vIG1hbnkgZG90dGVkIG5hbWVzKTogJXMiLAorCQkJCQkJCQkgIGNlbGxkYi0+dmFsKTsKKwkJ CQkJUFFmaW5pc2goY29ubik7CisJCQkJCWV4aXRfbmljZWx5KDEpOworCQkJCX0KKworCQkJCXJl cyA9IGV4ZWN1dGVRdWVyeShjb25uLCBxdWVyeS0+ZGF0YSk7CisKKwkJCQlpZiAoKFBRcmVzdWx0 U3RhdHVzKHJlcykgPT0gUEdSRVNfVFVQTEVTX09LKSAmJiBQUW50dXBsZXMocmVzKSkKKwkJCQl7 CisJCQkJCXNraXBfZGJfcmVzdG9yZSA9IHRydWU7CisJCQkJCXBnX2xvZ19pbmZvKCJkYXRhYmFz ZSBcIiVzXCIgaXMgbWF0Y2hpbmcgd2l0aCBleGNsdWRlIHBhdHRlcm46IFwiJXNcIiIsIGRib2lk X2NlbGwtPmRiX25hbWUsIGNlbGxkYi0+dmFsKTsKKwkJCQl9CisKKwkJCQlQUWNsZWFyKHJlcyk7 CisJCQkJcmVzZXRQUUV4cEJ1ZmZlcihxdWVyeSk7CisJCQl9CisKKwkJCWlmIChza2lwX2RiX3Jl c3RvcmUpCisJCQkJYnJlYWs7CisJCX0KKworCQkvKiBJbmNyZW1lbnQgY291bnQgaWYgZGF0YWJh c2UgbmVlZHMgdG8gYmUgcmVzdG9yZWQuICovCisJCWlmIChza2lwX2RiX3Jlc3RvcmUpCisJCXsK KwkJCXBnX2xvZ19pbmZvKCJleGNsdWRpbmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJvaWRfY2VsbC0+ ZGJfbmFtZSk7CisJCQlzaW1wbGVfZGJfb2lkX2xpc3RfZGVsZXRlKGRibmFtZV9vaWRfbGlzdCwg ZGJvaWRfY2VsbCwgZGJvaWRwcmVjZWxsKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWNvdW50X2Ri Kys7CisJCQlkYm9pZHByZWNlbGwgPSBkYm9pZF9jZWxsOworCQl9CisKKwkJLyogUHJvY2VzcyBu ZXh0IGRibmFtZSBmcm9tIGRibmFtZSBsaXN0LiAqLworCQlkYm9pZF9jZWxsID0gbmV4dDsKKwl9 CisKKwlyZXR1cm4gY291bnRfZGI7Cit9CisKKy8qCisgKiBnZXRfZGJuYW1lX29pZF9saXN0X2Zy b21fbWZpbGUKKyAqCisgKiBPcGVuIG1hcC5kYXQgZmlsZSBhbmQgcmVhZCBsaW5lIGJ5IGxpbmUg YW5kIHRoZW4gcHJlcGFyZSBhIGxpc3Qgb2YgZGF0YWJhc2UKKyAqIG5hbWVzIGFuZCBjb3JyZXNw b25kaW5nIGRiX29pZC4KKyAqCisgKiBSZXR1cm5zLCB0b3RhbCBudW1iZXIgb2YgZGF0YWJhc2Ug bmFtZXMgaW4gbWFwLmRhdCBmaWxlLgorICovCitzdGF0aWMgaW50CitnZXRfZGJuYW1lX29pZF9s aXN0X2Zyb21fbWZpbGUoY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsIFNpbXBsZURhdGFiYXNlT2lk TGlzdCAqZGJuYW1lX29pZF9saXN0KQoreworCUZJTEUgICAgKnBmaWxlOworCWNoYXIgICAgbWFw X2ZpbGVfcGF0aFtNQVhQR1BBVEhdOworCWNoYXIgICAgbGluZVtNQVhQR1BBVEhdOworCWludCAg ICAgY291bnQgPSAwOworCisJLyoKKwkgKiBJZiB0aGVyZSBpcyBvbmx5IGdsb2JhbC5kYXQgZmls ZSBpbiBkdW1wLCB0aGVuIHJldHVybiBmcm9tIGhlcmUgYXMgdGhlcmUKKwkgKiBpcyBubyBkYXRh YmFzZSB0byByZXN0b3JlLgorCSAqLworCWlmICghSXNGaWxlRXhpc3RzSW5EaXJlY3RvcnkocGdf c3RyZHVwKGR1bXBkaXJwYXRoKSwgIm1hcC5kYXQiKSkKKwl7CisJCXBnX2xvZ19pbmZvKCJkYXRh YmFzZXMgcmVzdG9yaW5nIGlzIHNraXBwZWQgYXMgbWFwLmRhdCBmaWxlIGlzIG5vdCBwcmVzZW50 IGluIFwiJXNcIiIsIGR1bXBkaXJwYXRoKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc25wcmludGYo bWFwX2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAiJXMvbWFwLmRhdCIsIGR1bXBkaXJwYXRoKTsKKwor CS8qIE9wZW4gbWFwLmRhdCBmaWxlLiAqLworCXBmaWxlID0gZm9wZW4obWFwX2ZpbGVfcGF0aCwg UEdfQklOQVJZX1IpOworCisJaWYgKHBmaWxlID09IE5VTEwpCisJCXBnX2ZhdGFsKCJjb3VsZCBu b3Qgb3BlbiBtYXAuZGF0IGZpbGU6IFwiJXNcIiIsIG1hcF9maWxlX3BhdGgpOworCisJLyogQXBw ZW5kIGFsbCB0aGUgZGJuYW1lIGFuZCBkYl9vaWQgdG8gdGhlIGxpc3QuICovCisJd2hpbGUoKGZn ZXRzKGxpbmUsIE1BWFBHUEFUSCwgcGZpbGUpKSAhPSBOVUxMKQorCXsKKwkJT2lkICAgICAgICAg ZGJfb2lkID0gSW52YWxpZE9pZDsKKwkJY2hhcgkJZGJfb2lkX3N0cltNQVhQR1BBVEggKyAxXSA9 IHsnXDAnfTsKKwkJY2hhciAgICAgICAgZGJuYW1lW01BWFBHUEFUSCArIDFdID0geydcMCd9Owor CisJCS8qIEV4dHJhY3QgZGJvaWQuICovCisJCXNzY2FuZihsaW5lLCAiJXUiICwgJmRiX29pZCk7 CisJCXNzY2FuZihsaW5lLCAiJXMiICwgZGJfb2lkX3N0cik7CisKKwkJLyogTm93IGNvcHkgZGJu YW1lLiAqLworCQlzdHJjcHkoZGJuYW1lLCBsaW5lICsgc3RybGVuKGRiX29pZF9zdHIpICsgMSk7 CisKKwkJLyogUmVtb3ZlIFxuIGZyb20gZGJhbm1lLiAqLworCQlkYm5hbWVbc3RybGVuKGRibmFt ZSkgLSAxXSA9ICdcMCc7CisKKwkJcGdfbG9nX2luZm8oImZvdW5kIGRhdGFiYXNlIFwiJXNcIiAo T0lEOiAldSkgaW4gbWFwLmRhdCBmaWxlIHdoaWxlIHJlc3RvcmluZy4iLCBkYm5hbWUsIGRiX29p ZCk7CisKKwkJLyogUmVwb3J0IGVycm9yIGFuZCBleGl0IGlmIHRoZSBmaWxlIGhhcyBhbnkgY29y cnVwdGVkIGRhdGEuICovCisJCWlmICghT2lkSXNWYWxpZChkYl9vaWQpIHx8IHN0cmxlbihkYm5h bWUpID09IDApCisJCQlwZ19mYXRhbCgiaW52YWxpZCBlbnRyeSBpbiBtYXAuZGF0IGZpbGUgYXQg bGluZSA6ICVkIiwgY291bnQgKyAxKTsKKworCQkvKgorCQkgKiBYWFggOiBiZWZvcmUgYWRkaW5n IGRibmFtZSBpbnRvIGxpc3QsIHdlIGNhbiB2ZXJpZnkgdGhhdCB0aGlzIGRiCisJCSAqIG5lZWRz IHRvIHNraXBwZWQgZm9yIHJlc3RvcmUgb3Igbm90IGJ1dCBhcyBvZiBub3csIHdlIGFyZSBtYWtp bmcKKwkJICogYSBsaXN0IG9mIGFsbCB0aGUgZGF0YWJhc2VzLgorCQkgKi8KKwkJc2ltcGxlX2Ri X29pZF9saXN0X2FwcGVuZChkYm5hbWVfb2lkX2xpc3QsIGRiX29pZCwgZGJuYW1lKTsKKwkJY291 bnQrKzsKKwl9CisKKwkvKiBDbG9zZSBtYXAuZGF0IGZpbGUuICovCisJZmNsb3NlKHBmaWxlKTsK KworCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIHJlc3RvcmVBbGxEYXRhYmFzZXMKKyAqCisg KiBUaGlzIHdpbGwgcmVzdG9yZSBkYXRhYmFzZXMgdGhvc2UgZHVtcHMgYXJlIHByZXNlbnQgaW4K KyAqIGRpcmVjdG9yeSBiYXNlZCBvbiBtYXAuZGF0IGZpbGUgbWFwcGluZy4KKyAqCisgKiBUaGlz IHdpbGwgc2tpcCByZXN0b3JpbmcgZm9yIGRhdGFiYXNlcyB0aGF0IGFyZSBzcGVjaWZpZWQgd2l0 aAorICogZXhjbHVkZS1kYXRhYmFzZSBvcHRpb24uCisgKgorICogcmV0dXJucywgbnVtYmVyIG9m IGVycm9ycyB3aGlsZSBkb2luZyByZXN0b3JlLgorICovCitzdGF0aWMgaW50CityZXN0b3JlQWxs RGF0YWJhc2VzKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsCisJCQkJCVNp bXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucywgUmVzdG9yZU9wdGlvbnMgKm9wdHMs CisJCQkJCWludCBudW1Xb3JrZXJzKQoreworCVNpbXBsZURhdGFiYXNlT2lkTGlzdAkJCWRibmFt ZV9vaWRfbGlzdCA9IHtOVUxMLCBOVUxMfTsKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCQkq ZGJvaWRfY2VsbDsKKwlpbnQJCQkJCQkJCW51bV9kYl9yZXN0b3JlID0gMDsKKwlpbnQJCQkJCQkJ CW51bV90b3RhbF9kYjsKKwlpbnQJCQkJCQkJCW5fZXJyb3JzX3RvdGFsOworCisJbnVtX3RvdGFs X2RiID0gZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlKGR1bXBkaXJwYXRoLCAmZGJuYW1l X29pZF9saXN0KTsKKworCS8qCisJICogSWYgbWFwLmRhdCBoYXMgbm8gZW50cnksIHJldHVybiBm cm9tIGhlcmUgYWZ0ZXIgcHJvY2Vzc2luZworCSAqIGdsb2JhbC5kYXQgZmlsZS4KKwkgKi8KKwlp ZiAoZGJuYW1lX29pZF9saXN0LmhlYWQgPT0gTlVMTCkKKwkJcmV0dXJuIHByb2Nlc3NfZ2xvYmFs X3NxbF9jb21tYW5kcyhjb25uLCBkdW1wZGlycGF0aCwgb3B0cy0+ZmlsZW5hbWUpOworCisJcGdf bG9nX2luZm8oImZvdW5kIHRvdGFsICVkIGRhdGFiYXNlIG5hbWVzIGluIG1hcC5kYXQgZmlsZSIs IG51bV90b3RhbF9kYik7CisKKwlpZiAoIWNvbm4pCisJeworCQlwZ19sb2dfaW5mbygidHJ5aW5n IHRvIGNvbm5lY3QgZGF0YWJhc2UgXCJwb3N0Z3Jlc1wiICB0byBkdW1wIGludG8gb3V0IGZpbGUi KTsKKworCQljb25uID0gY29ubmVjdERhdGFiYXNlKCJwb3N0Z3JlcyIsIE5VTEwsIG9wdHMtPmNw YXJhbXMucGdob3N0LAorCQkJCQkJCSAgIG9wdHMtPmNwYXJhbXMucGdwb3J0LCBvcHRzLT5jcGFy YW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwKKwkJCQkJCQkgICBmYWxzZSwgcHJvZ25hbWUsIE5V TEwsIE5VTEwpOworCisJCS8qIFRyeSB3aXRoIHRlbXBsYXRlMS4gKi8KKwkJaWYgKCFjb25uKQor CQl7CisJCQlwZ19sb2dfaW5mbygidHJ5aW5nIHRvIGNvbm5lY3QgZGF0YWJhc2UgXCJ0ZW1wbGF0 ZTFcIiBhcyBmYWlsZWQgdG8gY29ubmVjdCB0byBkYXRhYmFzZSBcInBvc3RncmVzXCIgdG8gZHVt cCBpbnRvIG91dCBmaWxlIik7CisKKwkJCWNvbm4gPSBjb25uZWN0RGF0YWJhc2UoInRlbXBsYXRl MSIsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdob3N0LAorCQkJCQkJCQkgICBvcHRzLT5jcGFyYW1z LnBncG9ydCwgb3B0cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJX0RFRkFVTFQsCisJCQkJCQkJCSAg IGZhbHNlLCBwcm9nbmFtZSwgTlVMTCwgTlVMTCk7CisJCX0KKwl9CisKKwkvKgorCSAqIHByb2Nl c3NpbmcgcGdfcmV0c29yZSAtLWV4Y2x1ZGUtZGF0YWJhc2U9UEFUVEVSTi9OQU1FIGlmIG5vIGNv bm5lY3Rpb24uCisJICovCisJbnVtX2RiX3Jlc3RvcmUgPSBnZXRfZGJuYW1lc19saXN0X3RvX3Jl c3RvcmUoY29ubiwgJmRibmFtZV9vaWRfbGlzdCwKKwkJCWRiX2V4Y2x1ZGVfcGF0dGVybnMpOwor CisJLyogT3BlbiBnbG9iYWwuZGF0IGZpbGUgYW5kIGV4ZWN1dGUvYXBwZW5kIGFsbCB0aGUgZ2xv YmFsIHNxbCBjb21tYW5kcy4gKi8KKwluX2Vycm9yc190b3RhbCA9IHByb2Nlc3NfZ2xvYmFsX3Nx bF9jb21tYW5kcyhjb25uLCBkdW1wZGlycGF0aCwgb3B0cy0+ZmlsZW5hbWUpOworCisJLyogQ2xv c2UgdGhlIGRiIGNvbm5lY3Rpb24gYXMgd2UgYXJlIGRvbmUgd2l0aCBnbG9iYWxzIGFuZCBwYXR0 ZXJucy4gKi8KKwlpZiAoY29ubikKKwkJUFFmaW5pc2goY29ubik7CisKKwkvKiBFeGl0IGlmIG5v IGRiIG5lZWRzIHRvIGJlIHJlc3RvcmVkLiAqLworCWlmIChkYm5hbWVfb2lkX2xpc3QuaGVhZCA9 PSBOVUxMKQorCXsKKwkJcGdfbG9nX2luZm8oIm5vIGRhdGFiYXNlIG5lZWRzIHRvIHJlc3RvcmUg b3V0IG9mICVkIGRhdGFiYXNlcyIsIG51bV90b3RhbF9kYik7CisJCXJldHVybiBuX2Vycm9yc190 b3RhbDsKKwl9CisKKwlwZ19sb2dfaW5mbygibmVlZHMgdG8gcmVzdG9yZSAlZCBkYXRhYmFzZXMg b3V0IG9mICVkIGRhdGFiYXNlcyIsIG51bV9kYl9yZXN0b3JlLCBudW1fdG90YWxfZGIpOworCisJ LyoKKwkgKiBUaWxsIG5vdywgd2UgbWFkZSBhIGxpc3Qgb2YgZGF0YWJhc2VzLCB0aG9zZSBuZWVk cyB0byBiZSByZXN0b3JlZAorCSAqIGFmdGVyIHNraXBwaW5nIG5hbWVzIG9mIGV4Y2x1ZGUtZGF0 YWJhc2UuICBOb3cgd2UgY2FuIGxhdW5jaCBwYXJhbGxlbAorCSAqIHdvcmtlcnMgdG8gcmVzdG9y ZSB0aGVzZSBkYXRhYmFzZXMuCisJICovCisJZGJvaWRfY2VsbCA9IGRibmFtZV9vaWRfbGlzdC5o ZWFkOworCisJd2hpbGUoZGJvaWRfY2VsbCAhPSBOVUxMKQorCXsKKwkJY2hhcgkJc3ViZGlycGF0 aFtNQVhQR1BBVEhdOworCQlpbnQJCQluX2Vycm9yczsKKworCQkvKgorCQkgKiBXZSBuZWVkIHRv IHJlc2V0IG92ZXJyaWRlX2RibmFtZSBzbyB0aGF0IG9iamVjdHMgY2FuIGJlIHJlc3RvcmVkIGlu dG8KKwkJICogYWxyZWFkeSBjcmVhdGVkIGRhdGFiYXNlLiAodXNlZCB3aXRoIC1kLy0tZGJuYW1l IG9wdGlvbikKKwkJICovCisJCWlmIChvcHRzLT5jcGFyYW1zLm92ZXJyaWRlX2RibmFtZSkKKwkJ eworCQkJcGZyZWUob3B0cy0+Y3BhcmFtcy5vdmVycmlkZV9kYm5hbWUpOworCQkJb3B0cy0+Y3Bh cmFtcy5vdmVycmlkZV9kYm5hbWUgPSBOVUxMOworCQl9CisKKwkJc25wcmludGYoc3ViZGlycGF0 aCwgTUFYUEdQQVRILCAiJXMvZGF0YWJhc2VzLyV1IiwgZHVtcGRpcnBhdGgsIGRib2lkX2NlbGwt PmRiX29pZCk7CisKKwkJcGdfbG9nX2luZm8oInJlc3RvcmluZyBkYXRhYmFzZSBcIiVzXCIiLCBk Ym9pZF9jZWxsLT5kYl9uYW1lKTsKKworCQkvKiBSZXN0b3JlIHNpbmdsZSBkYXRhYmFzZS4gKi8K KwkJbl9lcnJvcnMgPSByZXN0b3JlT25lRGF0YWJhc2Uoc3ViZGlycGF0aCwgb3B0cywgbnVtV29y a2VycywKKwkJCQl0cnVlLCBkYm9pZF9jZWxsLT5kYl9uYW1lKTsKKworCQkvKiBwcmludCBhIHN1 bW1hcnkgb2YgaWdub3JlZCBlcnJvcnMgZHVyaW5nIHNpbmdsZSBkYXRhYmFzZSByZXN0b3JlLiAq LworCQlpZiAobl9lcnJvcnMpCisJCXsKKwkJCW5fZXJyb3JzX3RvdGFsICs9IG5fZXJyb3JzOwor CQkJcGdfbG9nX3dhcm5pbmcoImVycm9ycyBpZ25vcmVkIG9uIFwiJXNcIiBkYXRhYmFzZSByZXN0 b3JlOiAlZCIsIGRib2lkX2NlbGwtPmRiX25hbWUsIG5fZXJyb3JzKTsKKwkJfQorCisJCWRib2lk X2NlbGwgPSBkYm9pZF9jZWxsLT5uZXh0OworCisJCS8qCisJCSAqIFdlIG5lZWQgdG8gcmVzZXQg RVhJVF9OSUNFTFkgd2l0aCBlYWNoIGRhdGFiYXNlIHNvIHRoYXQgd2UgY2FuIHJlc3RvcmUKKwkJ ICogbXVsdGlwbGUgZGF0YWJhc2VzIGJ5IGFyY2hpdmUuCisJCSAqLworCQlpZiAoZGJvaWRfY2Vs bCAhPSBOVUxMKQorCQkJcmVzZXRfZXhpdF9uaWNlbHlfYXJyYXkobl9lcnJvcnMgPyAxIDogMCk7 CisJfQorCisJLyogTG9nIG51bWJlciBvZiBwcm9jZXNzZWQgZGF0YWJhc2VzLiovCisJcGdfbG9n X2luZm8oIm51bWJlciBvZiByZXN0b3JlZCBkYXRhYmFzZXMgYXJlICVkIiwgbnVtX2RiX3Jlc3Rv cmUpOworCisJLyogRnJlZSBkYm5hbWUgYW5kIGRib2lkIGxpc3QuICovCisJc2ltcGxlX2RiX29p ZF9mdWxsX2xpc3RfZGVsZXRlKCZkYm5hbWVfb2lkX2xpc3QpOworCisJcmV0dXJuIG5fZXJyb3Jz X3RvdGFsOworfQorCisvKgorICogcHJvY2Vzc19nbG9iYWxfc3FsX2NvbW1hbmRzCisgKgorICog VGhpcyB3aWxsIG9wZW4gZ2xvYmFsLmRhdCBmaWxlIGFuZCB3aWxsIGV4ZWN1dGUgYWxsIGdsb2Jh bCBzcWwgY29tbWFuZHMgb25lCisgKiBieSBvbmUgc3RhdGVtZW50LgorICogU2VtaWNvbG9uIGlz IGNvbnNpZGVyZWQgYXMgc3RhdGVtZW50IHRlcm1pbmF0b3IuICBJZiBvdXRmaWxlIGlzIHBhc3Nl ZCwgdGhlbgorICogdGhpcyB3aWxsIGNvcHkgYWxsIHNxbCBjb21tYW5kcyBpbnRvIG91dGZpbGUg cmF0aGVyIHRoZW4gZXhlY3V0aW5nIHRoZW0uCisgKgorICogcmV0dXJucywgbnVtYmVyIG9mIGVy cm9ycyB3aGlsZSBwcm9jZXNzaW5nIGdsb2JhbC5kYXQKKyAqLworc3RhdGljIGludAorcHJvY2Vz c19nbG9iYWxfc3FsX2NvbW1hbmRzKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqZHVtcGRpcnBh dGgsIGNvbnN0IGNoYXIgKm91dGZpbGUpCit7CisJY2hhciAgICAgICAgICAgIGdsb2JhbF9maWxl X3BhdGhbTUFYUEdQQVRIXTsKKwlQR3Jlc3VsdAkJKnJlc3VsdDsKKwlTdHJpbmdJbmZvRGF0YQlz cWxzdGF0ZW1lbnQ7CisJRklMRQkJCSpwZmlsZTsKKwlpbnQJCQkJbl9lcnJvcnMgPSAwOworCisJ c25wcmludGYoZ2xvYmFsX2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAiJXMvZ2xvYmFsLmRhdCIsIGR1 bXBkaXJwYXRoKTsKKworCS8qIE5vdyBvcGVuIGdsb2JhbC5kYXQgZmlsZS4gKi8KKwlwZmlsZSA9 IGZvcGVuKGdsb2JhbF9maWxlX3BhdGgsIFBHX0JJTkFSWV9SKTsKKworCWlmIChwZmlsZSA9PSBO VUxMKQorCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gZ2xvYmFsLmRhdCBmaWxlOiBcIiVzXCIi LCBnbG9iYWxfZmlsZV9wYXRoKTsKKworCS8qCisJICogSWYgb3V0ZmlsZSBpcyBnaXZlbiwgdGhl biBqdXN0IGNvcHkgYWxsIGdsb2JhbC5kYXQgZmlsZSBkYXRhIGludG8KKwkgKiBvdXRmaWxlLgor CSAqLworCWlmIChvdXRmaWxlKQorCXsKKwkJY29weV9nbG9iYWxfZmlsZV90b19vdXRfZmlsZShv dXRmaWxlLCBwZmlsZSk7CisJCXJldHVybiAwOworCX0KKworCS8qIEluaXQgc3Fsc3RhdGVtZW50 IHRvIGFwcGVuZCBjb21tYW5kcy4gKi8KKwlpbml0U3RyaW5nSW5mbygmc3Fsc3RhdGVtZW50KTsK KworCS8qIFByb2Nlc3MgZmlsZSB0aWxsIEVPRiBhbmQgZXhlY3V0ZSBzcWwgc3RhdGVtZW50cy4g Ki8KKwl3aGlsZSAoUmVhZE9uZVN0YXRlbWVudCgmc3Fsc3RhdGVtZW50LCBwZmlsZSkgIT0gRU9G KQorCXsKKwkJcGdfbG9nX2luZm8oImV4ZWN1dGluZyBxdWVyeTogJXMiLCBzcWxzdGF0ZW1lbnQu ZGF0YSk7CisJCXJlc3VsdCA9IFBRZXhlYyhjb25uLCBzcWxzdGF0ZW1lbnQuZGF0YSk7CisKKwkJ c3dpdGNoIChQUXJlc3VsdFN0YXR1cyhyZXN1bHQpKQorCQl7CisJCQljYXNlIFBHUkVTX0NPTU1B TkRfT0s6CisJCQljYXNlIFBHUkVTX1RVUExFU19PSzoKKwkJCWNhc2UgUEdSRVNfRU1QVFlfUVVF Ulk6CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCW5fZXJyb3JzKys7CisJCQkJcGdfbG9n X2Vycm9yKCJjb3VsZCBub3QgZXhlY3V0ZSBxdWVyeTogXCIlc1wiIFxuQ29tbWFuZCB3YXM6IFwi JXNcIiIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pLCBzcWxzdGF0ZW1lbnQuZGF0YSk7CisJCX0KKwkJ UFFjbGVhcihyZXN1bHQpOworCX0KKworCS8qIHByaW50IGEgc3VtbWFyeSBvZiBpZ25vcmVkIGVy cm9ycyBkdXJpbmcgZ2xvYmFsLmRhdC4gKi8KKwlpZiAobl9lcnJvcnMpCisJCXBnX2xvZ193YXJu aW5nKCJlcnJvcnMgaWdub3JlZCBvbiBnbG9iYWxkLmRhdCByZXN0b3JlOiAlZCIsIG5fZXJyb3Jz KTsKKworCWZjbG9zZShwZmlsZSk7CisKKwlyZXR1cm4gbl9lcnJvcnM7Cit9CisKKy8qCisgKiBj b3B5X2dsb2JhbF9maWxlX3RvX291dF9maWxlCisgKgorICogVGhpcyB3aWxsIGNvcHkgZ2xvYmFs LmRhdCBmaWxlIGludG8gb3V0IGZpbGUuICBJZiAiLSIgaXMgdXNlZCBhcyBvdXRmaWxlLAorICog dGhlbiBwcmludCBjb21tYW5kcyB0byB0aGUgc3Rkb3V0LgorICovCitzdGF0aWMgdm9pZAorY29w eV9nbG9iYWxfZmlsZV90b19vdXRfZmlsZShjb25zdCBjaGFyICpvdXRmaWxlLCBGSUxFICpwZmls ZSkKK3sKKwljaGFyCW91dF9maWxlX3BhdGhbTUFYUEdQQVRIXTsKKwlGSUxFCSpPUEY7CisJaW50 CQljOworCisJLyogIi0iIGlzIHVzZWQgZm9yIHN0ZG91dC4gKi8KKwlpZiAoc3RyY21wKG91dGZp bGUsICItIikgPT0gMCkKKwkJT1BGID0gc3Rkb3V0OworCWVsc2UKKwl7CisJCXNucHJpbnRmKG91 dF9maWxlX3BhdGgsIE1BWFBHUEFUSCwgIiVzIiwgb3V0ZmlsZSk7CisJCU9QRiA9IGZvcGVuKG91 dF9maWxlX3BhdGgsIFBHX0JJTkFSWV9XKTsKKworCQlpZiAoT1BGID09IE5VTEwpCisJCXsKKwkJ CWZjbG9zZShwZmlsZSk7CisJCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gZmlsZTogXCIlc1wi Iiwgb3V0ZmlsZSk7CisJCX0KKwl9CisKKwkvKiBOb3cgYXBwZW5kIGdsb2JhbC5kYXQgaW50byBv dXQgZmlsZS4gKi8KKwl3aGlsZSAoKGMgPSBmZ2V0YyhwZmlsZSkpICE9IEVPRikKKwkJZnB1dGMo YywgT1BGKTsKKworCWZjbG9zZShwZmlsZSk7CisKKwkvKiBDbG9zZSBvdXQgZmlsZS4gKi8KKwlp ZiAoc3RyY21wKG91dGZpbGUsICItIikgIT0gMCkKKwkJZmNsb3NlKE9QRik7Cit9CisKKy8qCisg KiBzaW1wbGVfZGJfb2lkX2xpc3RfYXBwZW5kCisgKgorICogYXBwZW5kcyBhIG5vZGUgdG8gdGhl IGxpc3QgaW4gdGhlIGVuZC4KKyAqLworc3RhdGljIHZvaWQKK3NpbXBsZV9kYl9vaWRfbGlzdF9h cHBlbmQoU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpsaXN0LCBPaWQgZGJfb2lkLAorCQljb25zdCBj aGFyICpkYm5hbWUpCit7CisJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqY2VsbDsKKworCWNl bGwgPSBwZ19tYWxsb2Nfb2JqZWN0KFNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwpOworCisJY2Vs bC0+bmV4dCA9IE5VTEw7CisJY2VsbC0+ZGJfb2lkID0gZGJfb2lkOworCWNlbGwtPmRiX25hbWUg PSBwZ19zdHJkdXAoZGJuYW1lKTsKKworCWlmIChsaXN0LT50YWlsKQorCQlsaXN0LT50YWlsLT5u ZXh0ID0gY2VsbDsKKwllbHNlCisJCWxpc3QtPmhlYWQgPSBjZWxsOworCWxpc3QtPnRhaWwgPSBj ZWxsOworfQorCisvKgorICogc2ltcGxlX2RiX29pZF9mdWxsX2xpc3RfZGVsZXRlCisgKgorICog ZGVsZXRlIGFsbCBjZWxsIGZyb20gZGJuYW1lIGFuZCBkYm9pZCBsaXN0LgorICovCitzdGF0aWMg dm9pZAorc2ltcGxlX2RiX29pZF9mdWxsX2xpc3RfZGVsZXRlKFNpbXBsZURhdGFiYXNlT2lkTGlz dCAqbGlzdCkKK3sKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCSpjZWxsID0gbGlzdC0+aGVh ZDsKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCSpuZXh0Y2VsbCA9IE5VTEw7CisKKwl3aGls ZSAoY2VsbCkKKwl7CisJCW5leHRjZWxsID0gY2VsbC0+bmV4dDsKKwkJcGZyZWUgKGNlbGwpOwor CQljZWxsID0gbmV4dGNlbGw7CisJfQorCisJbGlzdC0+aGVhZCA9IE5VTEw7CisJbGlzdC0+dGFp bCA9IE5VTEw7Cit9CisKKy8qCisgKiBzaW1wbGVfc3RyaW5nX2Z1bGxfbGlzdF9kZWxldGUKKyAq CisgKiBkZWxldGUgYWxsIGNlbGwgZnJvbSBzdHJpbmcgbGlzdC4KKyAqLworc3RhdGljIHZvaWQK K3NpbXBsZV9zdHJpbmdfZnVsbF9saXN0X2RlbGV0ZShTaW1wbGVTdHJpbmdMaXN0ICpsaXN0KQor eworCVNpbXBsZVN0cmluZ0xpc3RDZWxsCSpjZWxsID0gbGlzdC0+aGVhZDsKKwlTaW1wbGVTdHJp bmdMaXN0Q2VsbCAgICAqY2VsbG5leHQgPSBOVUxMOworCisJd2hpbGUgKGNlbGwpCisJeworCQlj ZWxsbmV4dCA9IGNlbGwtPm5leHQ7CisJCXBmcmVlKGNlbGwpOworCQljZWxsID0gY2VsbG5leHQ7 CisJfQorCisJbGlzdC0+aGVhZCA9IE5VTEw7CisJbGlzdC0+dGFpbCA9IE5VTEw7Cit9CisKKy8q CisgKiBzaW1wbGVfZGJfb2lkX2xpc3RfZGVsZXRlCisgKgorICogZGVsZXRlIGNlbGwgZnJvbSBk YXRhYmFzZSBhbmQgb2lkIGxpc3QuCisgKi8KK3N0YXRpYyB2b2lkCitzaW1wbGVfZGJfb2lkX2xp c3RfZGVsZXRlKFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqbGlzdCwKKwkJU2ltcGxlRGF0YWJhc2VP aWRMaXN0Q2VsbCAqY2VsbCwKKwkJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqcHJldikKK3sK KwlpZiAocHJldiA9PSBOVUxMKQorCXsKKwkJbGlzdC0+aGVhZCA9IGNlbGwtPm5leHQ7CisJCXBm cmVlKGNlbGwpOworCX0KKwllbHNlCisJeworCQlwcmV2LT5uZXh0ID0gY2VsbC0+bmV4dDsKKwkJ cGZyZWUoY2VsbCk7CisJfQorfQorCisvKgorICogcXVvdGVfbGl0ZXJhbF9pbnRlcm5hbAorICov CitzdGF0aWMgc2l6ZV90CitxdW90ZV9saXRlcmFsX2ludGVybmFsKGNoYXIgKmRzdCwgY29uc3Qg Y2hhciAqc3JjLCBzaXplX3QgbGVuKQoreworCWNvbnN0IGNoYXIgKnM7CisJY2hhcgkgICAqc2F2 ZWRzdCA9IGRzdDsKKworCWZvciAocyA9IHNyYzsgcyA8IHNyYyArIGxlbjsgcysrKQorCXsKKwkJ aWYgKCpzID09ICdcXCcpCisJCXsKKwkJCSpkc3QrKyA9IEVTQ0FQRV9TVFJJTkdfU1lOVEFYOwor CQkJYnJlYWs7CisJCX0KKwl9CisKKwkqZHN0KysgPSAnXCcnOworCXdoaWxlIChsZW4tLSA+IDAp CisJeworCQlpZiAoU1FMX1NUUl9ET1VCTEUoKnNyYywgdHJ1ZSkpCisJCQkqZHN0KysgPSAqc3Jj OworCQkqZHN0KysgPSAqc3JjKys7CisJfQorCSpkc3QrKyA9ICdcJyc7CisKKwlyZXR1cm4gZHN0 IC0gc2F2ZWRzdDsKK30KKworLyoKKyAqIHF1b3RlX2xpdGVyYWxfY3N0cgorICoKKyAqCSAgcmV0 dXJucyBhIHByb3Blcmx5IHF1b3RlZCBsaXRlcmFsCisgKiBjb3BpZWQgZnJvbSBzcmMvYmFja2Vu ZC91dGlscy9hZHQvcXVvdGUuYworICovCitzdGF0aWMgY2hhciAqCitxdW90ZV9saXRlcmFsX2Nz dHIoY29uc3QgY2hhciAqcmF3c3RyKQoreworCWNoYXIJICAgKnJlc3VsdDsKKwlpbnQJCQlsZW47 CisJaW50CQkJbmV3bGVuOworCisJbGVuID0gc3RybGVuKHJhd3N0cik7CisKKwkvKiBXZSBtYWtl IGEgd29yc3QtY2FzZSByZXN1bHQgYXJlYTsgd2FzdGluZyBhIGxpdHRsZSBzcGFjZSBpcyBPSyAq LworCXJlc3VsdCA9IHBnX21hbGxvYyhsZW4gKiAyICsgMyArIDEpOworCisJbmV3bGVuID0gcXVv dGVfbGl0ZXJhbF9pbnRlcm5hbChyZXN1bHQsIHJhd3N0ciwgbGVuKTsKKwlyZXN1bHRbbmV3bGVu XSA9ICdcMCc7CisKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19k dW1wL3QvMDAxX2Jhc2ljLnBsIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCm9sZCBt b2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggMjE0MjQwZjFhZTUuLmRlNDFlYzA2ZDg2 Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbAorKysgYi9zcmMvYmluL3BnX2R1 bXAvdC8wMDFfYmFzaWMucGwKQEAgLTIxOSw2ICsyMTksMTEgQEAgY29tbWFuZF9mYWlsc19saWtl KAogCSdwZ19yZXN0b3JlOiBvcHRpb25zIC1DXC8tLWNyZWF0ZSBhbmQgLTFcLy0tc2luZ2xlLXRy YW5zYWN0aW9uIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyJwogKTsKIAorY29tbWFuZF9mYWlsc19s aWtlKAorCVsgJ3BnX3Jlc3RvcmUnLCAnLS1leGNsdWRlLWRhdGFiYXNlPWZvbycsICctLWdsb2Jh bHMtb25seScsICctZCcsICd4eHgnIF0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9u IC0tZXhjbHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIC1nXC8tLWds b2JhbHMtb25seVxFLywKKwkncGdfcmVzdG9yZTogb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBj YW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIC1nLy0tZ2xvYmFscy1vbmx5Jyk7CisKICMgYWxz byBmYWlscyBmb3IgLXIgYW5kIC10LCBidXQgaXQgc2VlbXMgcG9pbnRsZXNzIHRvIGFkZCBtb3Jl IHRlc3RzIGZvciB0aG9zZS4KIGNvbW1hbmRfZmFpbHNfbGlrZSgKIAlbICdwZ19kdW1wYWxsJywg Jy0tZXhjbHVkZS1kYXRhYmFzZT1mb28nLCAnLS1nbG9iYWxzLW9ubHknIF0sCkBAIC0yMjYsNCAr MjMxLDggQEAgY29tbWFuZF9mYWlsc19saWtlKAogCSdwZ19kdW1wYWxsOiBvcHRpb24gLS1leGNs dWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWcvLS1nbG9iYWxzLW9u bHknCiApOwogCitjb21tYW5kX2ZhaWxzX2xpa2UoCisJWyAncGdfZHVtcGFsbCcsICctLWZvcm1h dCcsICd4JyBdLAorCXFyL1xRcGdfZHVtcGFsbDogZXJyb3I6IHVucmVjb2duaXplZCBhcmNoaXZl IGZvcm1hdCAieCI7XEUvLAorCSdwZ19kdW1wYWxsOiB1bnJlY29nbml6ZWQgYXJjaGl2ZSBmb3Jt YXQnKTsKIGRvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBmYjM5 YzkxNWQ3Ni4uZTBmODRlMTUzNTIgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0yNjc3 LDYgKzI2NzcsOCBAQCBTaHV0ZG93bk1vZGUKIFNpZ25UU1ZlY3RvcgogU2ltcGxlQWN0aW9uTGlz dAogU2ltcGxlQWN0aW9uTGlzdENlbGwKK1NpbXBsZURhdGFiYXNlT2lkTGlzdAorU2ltcGxlRGF0 YWJhc2VPaWRMaXN0Q2VsbAogU2ltcGxlRWNvbnRleHRTdGFja0VudHJ5CiBTaW1wbGVPaWRMaXN0 CiBTaW1wbGVPaWRMaXN0Q2VsbAotLSAKMi4zOS4zCgo= --0000000000004da983062e8d33cc--