Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pTnCl-0002rC-0s for pgsql-hackers@arkaria.postgresql.org; Sun, 19 Feb 2023 17:10:27 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pTnCj-00089r-Fw for pgsql-hackers@arkaria.postgresql.org; Sun, 19 Feb 2023 17:10:25 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pTnCi-000889-Ib for pgsql-hackers@lists.postgresql.org; Sun, 19 Feb 2023 17:10:25 +0000 Received: from mail-ed1-x52a.google.com ([2a00:1450:4864:20::52a]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pTnCb-0003oO-Ha for pgsql-hackers@lists.postgresql.org; Sun, 19 Feb 2023 17:10:23 +0000 Received: by mail-ed1-x52a.google.com with SMTP id eg19so4369736edb.0 for ; Sun, 19 Feb 2023 09:10:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=sAIPI3S0f0l7+QJRz1vbfRK53kLP18UY1i28pQTn52g=; b=Q4FNGH4BuJuE63wpZ1F9qkwKbqiIf/ptn1GGvwAWKLzZxSLkZz5dTkrOnGpOcxBXVU MrI4QhIgo+b/916Y0/PKhgVmjQNF/XyI5OTXg1xQQ//7OLSnwR2c3D2wweSlxwoFEjDx FZ709/3F0NKxGhdd8/Ko4QikcuGp8o+Zgq9HH7wMqghyOHlelA4wayNdb0/VDuBjWydf tmoLs36pveiBVyIJv9nfHzDJcdMYUrgYySFkFvLYGw+5T4SI2byMUqq5CzE9viejngPu 7ys9fGQKl03SdByBmnwP2i6oH0EAiEav5+15z7DXPfMxPt2N7qQudIa2JeoP9I8t9a+q MJ5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=sAIPI3S0f0l7+QJRz1vbfRK53kLP18UY1i28pQTn52g=; b=WGEvQ7mQVwi5jDemBNOe5b2zkfNjSjy3lz8XqJZcnu+pQgVYYns/j3rhmp9rZt7knq mjkOzdankpcKeivsBWAfMBHojhfL8fyhDMupGRvJz5EoS4lac/Zp9eUR5AXruBHUoV40 WDuXMUqCQ/BKkAOwXfghpEig2G83DGKmlF2uyR3L6ySbS3mjzSu3GzwXMCWUL8qqVIUE aFhkC5Icxm6kZSidQAuHXgDG7WUxPuqiF8+MNWGfQMg+ipPG44krHGKR/jVcF5SXo+wp JMDyA7o8nVn4Uh59JfOhmLLmL1ZwW5cTJbtS3ywayjTfiEyq8Vc3TTe9gZoTK1eDDIbk TF6A== X-Gm-Message-State: AO0yUKWc2gPGMaglgKUcxrYSmQ1tJfslN7C92wPQ8crMIhAXcN8uC5bM gMEZtvC++JabbK9wL68fOBz9OZ4Nokd775byKdnTPacLqMONrYgiGYESuBbMtYs8tID2f34bzGz XCsMlPffwh3L2tG58bHoUu2b2uErS5nsuR6E0UMDV1w4A/P9F4i939WWPdpgLMLaBMB2zSudfzm gaogjmmUnNvO565+8T+Fz30eybouP4VG/5XBYEmMYbLIS2ou4SmJp8 X-Google-Smtp-Source: AK7set+7KtCZJWrljMQY6m4+MHad8SwYvHhXcCpcsD6R6xIppeLMfZs4qOajd1Ox9K7TJRxzI80jPA== X-Received: by 2002:a17:907:212c:b0:878:5bce:291a with SMTP id qo12-20020a170907212c00b008785bce291amr7188174ejb.36.1676826615518; Sun, 19 Feb 2023 09:10:15 -0800 (PST) Received: from [10.137.0.17] (ip-86-49-228-162.bb.vodafone.cz. [86.49.228.162]) by smtp.gmail.com with ESMTPSA id y14-20020a1709064b0e00b008c979c74732sm1114906eju.156.2023.02.19.09.10.14 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 19 Feb 2023 09:10:14 -0800 (PST) Content-Type: multipart/mixed; boundary="------------svO0l9foLms6unOl0KQH4LJu" Message-ID: <535565cd-b69f-c064-a845-15c0fc44db4a@enterprisedb.com> Date: Sun, 19 Feb 2023 18:10:13 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.1 Subject: Re: Add LZ4 compression in pg_dump Content-Language: en-US To: gkokolatos@pm.me, "shiy.fnst@fujitsu.com" Cc: Michael Paquier , Justin Pryzby , "pgsql-hackers@lists.postgresql.org" , Rachel Heaton References: <7zu6GYFi72jByVk2SEe_nd8r1DHhwA35vSntAE9sAfiMX9Lfk6bwimkwmu7GDgYaEvL27SE4qF1uK4_LHWQM4H-SXOwkMAI-GV8PKGmED_E=@pm.me> <-myGeDiZ-ePDRyi18026Iu2HTTfmwfjWaJn4OWJ2F3oglZUfJTOQ7FARPW7gYxE4vK3b0HpwYoiHR45nfOWReRvvJZfCBfJzPP5iJyn4muk=@pm.me> <20230125180020.GF22427@telsasoft.com> <20230126062846.GO22427@telsasoft.com> <6YZqN2HEE4yJxxxXWiMl4QWwKzLon0SdKETTGVkT9zjWnXMftGZjLKHHjGFuwC_5I6xL2s8nMXdLQGA4vEFveYXSHbfD9K9pDQvEJF2y99o=@pm.me> From: Tomas Vondra In-Reply-To: X-CLOUD-SEC-AV-Info: enterprisedb,google_mail,monitor X-CLOUD-SEC-AV-Sent: true X-Gm-Spam: 0 X-Gm-Phishy: 0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------svO0l9foLms6unOl0KQH4LJu Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi Georgios, I spent some time looking at the patch again, and IMO it's RFC. But I need some help with the commit messages - I updated 0001 and 0002 but I wasn't quite sure what some of the stuff meant to say and/or it seemed maybe coming from an earlier patch version and obsolete. Could you go over them and check if I got it right? Also feel free to update the list of reviewers (I compiled that from substantial reviews on the thread). The 0003 commit message seems somewhat confusing - I added some XXX lines asking about unclear stuff. regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --------------svO0l9foLms6unOl0KQH4LJu Content-Type: text/x-patch; charset=UTF-8; name="0001-Prepare-pg_dump-internals-for-additional-compres-v29.patch" Content-Disposition: attachment; filename*0="0001-Prepare-pg_dump-internals-for-additional-compres-v29.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAxYzBmZGQ2YjI5NDQxMTM2OGQ0YWJkMzUyYzQ2YmQzMWM1OGJhMTIxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NA cG0ubWU+CkRhdGU6IFRodSwgMTYgRmViIDIwMjMgMTA6NDc6NTkgKzAwMDAKU3ViamVjdDog W1BBVENIIDEvM10gUHJlcGFyZSBwZ19kdW1wIGludGVybmFscyBmb3IgYWRkaXRpb25hbCBj b21wcmVzc2lvbgogbWV0aG9kcwoKQ29tbWl0IGJmOWFhNDkwZGIgYSBnZW5lcmljIGNvbXBy ZXNzaW9uIEFQSSBpbiBjb21wcmVzc19pby57YyxofSB0byBtYWtlCnJldXNlIGVhc2llciwg YW5kIGFsbG93IGFkZGluZyBtb3JlIGNvbXByZXNzaW9uIGFsZ29yaXRobXMuIEhvd2V2ZXIs CnBnX2JhY2t1cF9hcmNoaXZlci5jIHdhcyBub3Qgc3dpdGNoZWQgdG8gdGhpcyBBUEkgYW5k IGNvbnRpbnVlZCB0byBjYWxsCnRoZSBjb21wcmVzc2lvbiBkaXJlY3RseS4KClRoaXMgY29t bWl0IHRlYWNoZXMgcGdfYmFja3VwX2FyY2hpdmVyLmMgYWJvdXQgdGhlIGNvbXByZXNzaW9u IEFQSSwgc28KdGhhdCBpdCBjYW4gYmVuZWZpdCBmcm9tIGJmOWFhNDkwZGIgKHNpbXBsZXIg Y29kZSwgZWFzaWVyIGFkZGl0aW9uIG9mCm5ldyBjb21wcmVzc2lvbiBtZXRob2RzKS4KCk1v c3Qgb2YgdGhlIGNvZGUgd2FzIHdyaXR0ZW4gYnkgR2Vvcmdpb3MgS29rb2xhdG9zLiBSYWNo ZWwgSGVhdG9uIHByb3ZpZGVkCmludmFsdWFibGUgaGVscCBvdXQgd2l0aCBleHBhbmRpbmcg dGhlIHRlc3RpbmcgY292ZXJhZ2UsIHRlc3Rpbmcgb24KZGlmZmVyZW50IHBsYXRmb3JtcyBh bmQgcHJvdmlkaW5nIGRlYnVnIGluZm9ybWF0aW9uIG9uIHRob3NlLCBhcyB3ZWxsIGFzCm5h dGl2ZSBzcGVha2VyIHdvcmRpbmcuCgpBdXRob3I6IEdlb3JnaW9zIEtva29sYXRvcywgUmFj aGVsIEhlYXRvbgpSZXZpZXdlZC1ieTogTWljaGFlbCBQYXF1aWVyLCBKdXN0aW4gUHJ5emJ5 LCBEYW5pZWwgR3VzdGFmc3NvbiwgVG9tYXMKVm9uZHJhCkRpc2N1c3Npb246IGh0dHBzOi8v cG9zdGdyLmVzL20vZmFVTkVPcHRzOXZ1bkVhTG5teG1HLURsZExTZ19xbDEzN09DM0pZRG1n ck9NSG0xUnZ2V1kySWRCa3ZfQ1J4bTVzcENDYl9PbUtOazJUMDNUTW0wZkJFV3ZlRkY5d0Ex V2l6UHVBZ0I3U3MlM0QlNDBwcm90b25tYWlsLmNvbQotLS0KIHNyYy9iaW4vcGdfZHVtcC9j b21wcmVzc19pby5jICAgICAgICB8ICA5MiArKysrKysrKysrKysrKystLS0KIHNyYy9iaW4v cGdfZHVtcC9jb21wcmVzc19pby5oICAgICAgICB8ICAgNCArCiBzcmMvYmluL3BnX2R1bXAv cGdfYmFja3VwX2FyY2hpdmVyLmMgfCAxMzggKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0t CiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmggfCAgMjcgKy0tLS0tCiA0 IGZpbGVzIGNoYW5nZWQsIDEzMyBpbnNlcnRpb25zKCspLCAxMjggZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMgYi9zcmMvYmluL3Bn X2R1bXAvY29tcHJlc3NfaW8uYwppbmRleCA3YTJjODBiYmM0Yy4uZTE3MzNjZTU3Y2YgMTAw NjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jCisrKyBiL3NyYy9iaW4v cGdfZHVtcC9jb21wcmVzc19pby5jCkBAIC01Niw2ICs1NiwzNiBAQAogI2luY2x1ZGUgImNv bXByZXNzX2lvLmgiCiAjaW5jbHVkZSAicGdfYmFja3VwX3V0aWxzLmgiCiAKKyNpZmRlZiBI QVZFX0xJQloKKyNpbmNsdWRlIDx6bGliLmg+CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKiBHZW5lcmljIGZ1bmN0aW9ucworICotLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKi8KKworY2hhciAqCitzdXBwb3J0c19jb21wcmVzc2lvbihjb25zdCBwZ19jb21w cmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7CisJY29uc3QgcGdfY29t cHJlc3NfYWxnb3JpdGhtCWFsZ29yaXRobSA9IGNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGht OworCWJvb2wJCQkJCQlzdXBwb3J0ZWQgPSBmYWxzZTsKKworCWlmIChhbGdvcml0aG0gPT0g UEdfQ09NUFJFU1NJT05fTk9ORSkKKwkJc3VwcG9ydGVkID0gdHJ1ZTsKKyNpZmRlZiBIQVZF X0xJQloKKwlpZiAoYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCisJCXN1cHBv cnRlZCA9IHRydWU7CisjZW5kaWYKKworCWlmICghc3VwcG9ydGVkKQorCQlyZXR1cm4gcHNw cmludGYoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVz IiwKKwkJCQkJCWdldF9jb21wcmVzc19hbGdvcml0aG1fbmFtZShhbGdvcml0aG0pKTsKKwor CXJldHVybiBOVUxMOworfQorCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogQ29t cHJlc3NvciBBUEkKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDkwLDE2ICs1MjAs MTkgQEAgY2ZvcGVuX3dyaXRlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUs CiB9CiAKIC8qCi0gKiBPcGVucyBmaWxlICdwYXRoJyBpbiAnbW9kZScuIElmIGNvbXByZXNz aW9uIGlzIEdaSVAsIHRoZSBmaWxlCi0gKiBpcyBvcGVuZWQgd2l0aCBsaWJ6IGd6b3Blbigp LCBvdGhlcndpc2Ugd2l0aCBwbGFpbiBmb3BlbigpLgorICogVGhpcyBpcyB0aGUgd29ya2hv cnNlIGZvciBjZm9wZW4oKSBvciBjZmRvcGVuKCkuIEl0IG9wZW5zIGZpbGUgJ3BhdGgnIG9y CisgKiBhc3NvY2lhdGVzIGEgc3RyZWFtICdmZCcsIGlmICdmZCcgaXMgYSB2YWxpZCBkZXNj cmlwdG9yLCBpbiAnbW9kZScuIFRoZQorICogZGVzY3JpcHRvciBpcyBub3QgZHVwJ2VkIGFu ZCBpdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZG8gc28uCisgKiBUaGUg Y2FsbGVyIG11c3QgdmVyaWZ5IHRoYXQgdGhlICdjb21wcmVzc19hbGdvcml0aG0nIGlzIHN1 cHBvcnRlZCBieSB0aGUKKyAqIGN1cnJlbnQgYnVpbGQuCiAgKgogICogT24gZmFpbHVyZSwg cmV0dXJuIE5VTEwgd2l0aCBhbiBlcnJvciBjb2RlIGluIGVycm5vLgogICovCi1jZnAgKgot Y2ZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCi0JICAgY29uc3Qg cGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQorc3RhdGljIGNm cCAqCitjZm9wZW5faW50ZXJuYWwoY29uc3QgY2hhciAqcGF0aCwgaW50IGZkLCBjb25zdCBj aGFyICptb2RlLAorCQkJCXBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25f c3BlYykKIHsKLQljZnAJCSAgICpmcCA9IHBnX21hbGxvYyhzaXplb2YoY2ZwKSk7CisJY2Zw CQkgICAqZnAgPSBwZ19tYWxsb2MwKHNpemVvZihjZnApKTsKIAogCWlmIChjb21wcmVzc2lv bl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQogCXsKQEAgLTUxMSwx NSArNTQ0LDIwIEBAIGNmb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2Rl LAogCiAJCQlzbnByaW50Zihtb2RlX2NvbXByZXNzaW9uLCBzaXplb2YobW9kZV9jb21wcmVz c2lvbiksICIlcyVkIiwKIAkJCQkJIG1vZGUsIGNvbXByZXNzaW9uX3NwZWMubGV2ZWwpOwot CQkJZnAtPmNvbXByZXNzZWRmcCA9IGd6b3BlbihwYXRoLCBtb2RlX2NvbXByZXNzaW9uKTsK KwkJCWlmIChmZCA+PSAwKQorCQkJCWZwLT5jb21wcmVzc2VkZnAgPSBnemRvcGVuKGZkLCBt b2RlX2NvbXByZXNzaW9uKTsKKwkJCWVsc2UKKwkJCQlmcC0+Y29tcHJlc3NlZGZwID0gZ3pv cGVuKHBhdGgsIG1vZGVfY29tcHJlc3Npb24pOwogCQl9CiAJCWVsc2UKIAkJewogCQkJLyog ZG9uJ3Qgc3BlY2lmeSBhIGxldmVsLCBqdXN0IHVzZSB0aGUgemxpYiBkZWZhdWx0ICovCi0J CQlmcC0+Y29tcHJlc3NlZGZwID0gZ3pvcGVuKHBhdGgsIG1vZGUpOworCQkJaWYgKGZkID49 IDApCisJCQkJZnAtPmNvbXByZXNzZWRmcCA9IGd6ZG9wZW4oZmQsIG1vZGUpOworCQkJZWxz ZQorCQkJCWZwLT5jb21wcmVzc2VkZnAgPSBnem9wZW4ocGF0aCwgbW9kZSk7CiAJCX0KIAot CQlmcC0+dW5jb21wcmVzc2VkZnAgPSBOVUxMOwogCQlpZiAoZnAtPmNvbXByZXNzZWRmcCA9 PSBOVUxMKQogCQl7CiAJCQlmcmVlX2tlZXBfZXJybm8oZnApOwpAQCAtNTMxLDEwICs1Njks MTEgQEAgY2ZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCiAJfQog CWVsc2UKIAl7Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCWZwLT5jb21wcmVzc2VkZnAgPSBOVUxM OwotI2VuZGlmCi0JCWZwLT51bmNvbXByZXNzZWRmcCA9IGZvcGVuKHBhdGgsIG1vZGUpOwor CQlpZiAoZmQgPj0gMCkKKwkJCWZwLT51bmNvbXByZXNzZWRmcCA9IGZkb3BlbihmZCwgbW9k ZSk7CisJCWVsc2UKKwkJCWZwLT51bmNvbXByZXNzZWRmcCA9IGZvcGVuKHBhdGgsIG1vZGUp OworCiAJCWlmIChmcC0+dW5jb21wcmVzc2VkZnAgPT0gTlVMTCkKIAkJewogCQkJZnJlZV9r ZWVwX2Vycm5vKGZwKTsKQEAgLTU0NSw2ICs1ODQsMzMgQEAgY2ZvcGVuKGNvbnN0IGNoYXIg KnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCiAJcmV0dXJuIGZwOwogfQogCisvKgorICogT3Bl bnMgZmlsZSAncGF0aCcgaW4gJ21vZGUnIGFuZCBjb21wcmVzc2lvbiBhcyBkZWZpbmVkIGlu CisgKiBjb21wcmVzc2lvbl9zcGVjLiBUaGUgY2FsbGVyIG11c3QgdmVyaWZ5IHRoYXQgdGhl IGNvbXByZXNzaW9uCisgKiBpcyBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgYnVpbGQuCisg KgorICogT24gZmFpbHVyZSwgcmV0dXJuIE5VTEwgd2l0aCBhbiBlcnJvciBjb2RlIGluIGVy cm5vLgorICovCitjZnAgKgorY2ZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIg Km1vZGUsCisJICAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lv bl9zcGVjKQoreworCXJldHVybiBjZm9wZW5faW50ZXJuYWwocGF0aCwgLTEsIG1vZGUsIGNv bXByZXNzaW9uX3NwZWMpOworfQorCisvKgorICogQXNzb2NpYXRlcyBhIHN0cmVhbSAnZmQn LCBpZiAnZmQnIGlzIGEgdmFsaWQgZGVzY3JpcHRvciwgaW4gJ21vZGUnCisgKiBhbmQgY29t cHJlc3Npb24gYXMgZGVmaW5lZCBpbiBjb21wcmVzc2lvbl9zcGVjLiBUaGUgY2FsbGVyIG11 c3QKKyAqIHZlcmlmeSB0aGF0IHRoZSBjb21wcmVzc2lvbiBpcyBzdXBwb3J0ZWQgYnkgdGhl IGN1cnJlbnQgYnVpbGQuCisgKgorICogT24gZmFpbHVyZSwgcmV0dXJuIE5VTEwgd2l0aCBh biBlcnJvciBjb2RlIGluIGVycm5vLgorICovCitjZnAgKgorY2Zkb3BlbihpbnQgZmQsIGNv bnN0IGNoYXIgKm1vZGUsCisJCWNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29t cHJlc3Npb25fc3BlYykKK3sKKwlyZXR1cm4gY2ZvcGVuX2ludGVybmFsKE5VTEwsIGZkLCBt b2RlLCBjb21wcmVzc2lvbl9zcGVjKTsKK30KIAogaW50CiBjZnJlYWQodm9pZCAqcHRyLCBp bnQgc2l6ZSwgY2ZwICpmcCkKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVz c19pby5oIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmgKaW5kZXggYTQyOWRjNDc4 OWQuLjhiZWIxMDU4ZWMyIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nf aW8uaAorKysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uaApAQCAtMjEsNiArMjEs OCBAQAogI2RlZmluZSBaTElCX09VVF9TSVpFCTQwOTYKICNkZWZpbmUgWkxJQl9JTl9TSVpF CTQwOTYKIAorZXh0ZXJuIGNoYXIgKnN1cHBvcnRzX2NvbXByZXNzaW9uKGNvbnN0IHBnX2Nv bXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7CisKIC8qIFByb3RvdHlw ZSBmb3IgY2FsbGJhY2sgZnVuY3Rpb24gdG8gV3JpdGVEYXRhVG9BcmNoaXZlKCkgKi8KIHR5 cGVkZWYgdm9pZCAoKldyaXRlRnVuYykgKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFy ICpidWYsIHNpemVfdCBsZW4pOwogCkBAIC01NCw2ICs1Niw4IEBAIHR5cGVkZWYgc3RydWN0 IGNmcCBjZnA7CiAKIGV4dGVybiBjZnAgKmNmb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25z dCBjaGFyICptb2RlLAogCQkJCSAgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24g Y29tcHJlc3Npb25fc3BlYyk7CitleHRlcm4gY2ZwICpjZmRvcGVuKGludCBmZCwgY29uc3Qg Y2hhciAqbW9kZSwKKwkJCQkJY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21w cmVzc2lvbl9zcGVjKTsKIGV4dGVybiBjZnAgKmNmb3Blbl9yZWFkKGNvbnN0IGNoYXIgKnBh dGgsIGNvbnN0IGNoYXIgKm1vZGUpOwogZXh0ZXJuIGNmcCAqY2ZvcGVuX3dyaXRlKGNvbnN0 IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCiAJCQkJCQkgY29uc3QgcGdfY29tcHJl c3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXBfYXJjaGl2ZXIuYwppbmRleCAyNjliZmNlMDE5Yi4uZTAyY2UyMmRiMmUgMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYworKysgYi9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNl bmRpZgogCiAjaW5jbHVkZSAiY29tbW9uL3N0cmluZy5oIgorI2luY2x1ZGUgImNvbXByZXNz X2lvLmgiCiAjaW5jbHVkZSAiZHVtcHV0aWxzLmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMvc3Ry aW5nX3V0aWxzLmgiCiAjaW5jbHVkZSAibGliL3N0cmluZ2luZm8uaCIKQEAgLTQzLDEzICs0 NCw2IEBACiAjZGVmaW5lIFRFWFRfRFVNUF9IRUFERVIgIi0tXG4tLSBQb3N0Z3JlU1FMIGRh dGFiYXNlIGR1bXBcbi0tXG5cbiIKICNkZWZpbmUgVEVYVF9EVU1QQUxMX0hFQURFUiAiLS1c bi0tIFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBkdW1wXG4tLVxuXG4iCiAKLS8qIHN0 YXRlIG5lZWRlZCB0byBzYXZlL3Jlc3RvcmUgYW4gYXJjaGl2ZSdzIG91dHB1dCB0YXJnZXQg Ki8KLXR5cGVkZWYgc3RydWN0IF9vdXRwdXRDb250ZXh0Ci17Ci0Jdm9pZAkgICAqT0Y7Ci0J aW50CQkJZ3pPdXQ7Ci19IE91dHB1dENvbnRleHQ7Ci0KIC8qCiAgKiBTdGF0ZSBmb3IgdHJh Y2tpbmcgVG9jRW50cnlzIHRoYXQgYXJlIHJlYWR5IHRvIHByb2Nlc3MgZHVyaW5nIGEgcGFy YWxsZWwKICAqIHJlc3RvcmUuICAoVGhpcyB1c2VkIHRvIGJlIGEgbGlzdCwgYW5kIHdlIHN0 aWxsIGNhbGwgaXQgdGhhdCwgdGhvdWdoIG5vdwpAQCAtMTAxLDggKzk1LDggQEAgc3RhdGlj IHZvaWQgZHVtcF9sb19idWYoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgZHVt cFRpbWVzdGFtcChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqbXNnLCB0aW1lX3Qg dGltKTsKIHN0YXRpYyB2b2lkIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3Qg Y2hhciAqZmlsZW5hbWUsCiAJCQkJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlv biBjb21wcmVzc2lvbl9zcGVjKTsKLXN0YXRpYyBPdXRwdXRDb250ZXh0IFNhdmVPdXRwdXQo QXJjaGl2ZUhhbmRsZSAqQUgpOwotc3RhdGljIHZvaWQgUmVzdG9yZU91dHB1dChBcmNoaXZl SGFuZGxlICpBSCwgT3V0cHV0Q29udGV4dCBzYXZlZENvbnRleHQpOworc3RhdGljIGNmcCAq U2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCk7CitzdGF0aWMgdm9pZCBSZXN0b3JlT3V0 cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjZnAgKnNhdmVkT3V0cHV0KTsKIAogc3RhdGljIGlu dAlyZXN0b3JlX3RvY19lbnRyeShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlLCBi b29sIGlzX3BhcmFsbGVsKTsKIHN0YXRpYyB2b2lkIHJlc3RvcmVfdG9jX2VudHJpZXNfcHJl Zm9yayhBcmNoaXZlSGFuZGxlICpBSCwKQEAgLTI3NywxMSArMjcxLDggQEAgQ2xvc2VBcmNo aXZlKEFyY2hpdmUgKkFIWCkKIAlBSC0+Q2xvc2VQdHIoQUgpOwogCiAJLyogQ2xvc2UgdGhl IG91dHB1dCAqLwotCWVycm5vID0gMDsJCQkJCS8qIGluIGNhc2UgZ3pjbG9zZSgpIGRvZXNu J3Qgc2V0IGl0ICovCi0JaWYgKEFILT5nek91dCkKLQkJcmVzID0gR1pDTE9TRShBSC0+T0Yp OwotCWVsc2UgaWYgKEFILT5PRiAhPSBzdGRvdXQpCi0JCXJlcyA9IGZjbG9zZShBSC0+T0Yp OworCWVycm5vID0gMDsKKwlyZXMgPSBjZmNsb3NlKEFILT5PRik7CiAKIAlpZiAocmVzICE9 IDApCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2Ugb3V0cHV0IGZpbGU6ICVtIik7CkBA IC0zNjMsNyArMzU0LDcgQEAgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQogCVJlc3Rv cmVPcHRpb25zICpyb3B0ID0gQUgtPnB1YmxpYy5yb3B0OwogCWJvb2wJCXBhcmFsbGVsX21v ZGU7CiAJVG9jRW50cnkgICAqdGU7Ci0JT3V0cHV0Q29udGV4dCBzYXY7CisJY2ZwCQkgICAq c2F2OwogCiAJQUgtPnN0YWdlID0gU1RBR0VfSU5JVElBTElaSU5HOwogCkBAIC0zOTEsMTcg KzM4MiwyMSBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJLyoKIAkgKiBNYWtl IHN1cmUgd2Ugd29uJ3QgbmVlZCAoZGUpY29tcHJlc3Npb24gd2UgaGF2ZW4ndCBnb3QKIAkg Ki8KLSNpZm5kZWYgSEFWRV9MSUJaCi0JaWYgKEFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29y aXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQICYmCi0JCUFILT5QcmludFRvY0RhdGFQdHIg IT0gTlVMTCkKKwlpZiAoQUgtPlByaW50VG9jRGF0YVB0ciAhPSBOVUxMKQogCXsKIAkJZm9y ICh0ZSA9IEFILT50b2MtPm5leHQ7IHRlICE9IEFILT50b2M7IHRlID0gdGUtPm5leHQpCiAJ CXsKIAkJCWlmICh0ZS0+aGFkRHVtcGVyICYmICh0ZS0+cmVxcyAmIFJFUV9EQVRBKSAhPSAw KQotCQkJCXBnX2ZhdGFsKCJjYW5ub3QgcmVzdG9yZSBmcm9tIGNvbXByZXNzZWQgYXJjaGl2 ZSAoY29tcHJlc3Npb24gbm90IHN1cHBvcnRlZCBpbiB0aGlzIGluc3RhbGxhdGlvbikiKTsK KwkJCXsKKwkJCQljaGFyICplcnJtc2cgPSBzdXBwb3J0c19jb21wcmVzc2lvbihBSC0+Y29t cHJlc3Npb25fc3BlYyk7CisJCQkJaWYgKGVycm1zZykKKwkJCQkJcGdfZmF0YWwoImNhbm5v dCByZXN0b3JlIGRhdGEgZnJvbSBjb21wcmVzc2VkIGFyY2hpdmUgKCVzKSIsCisJCQkJCQkJ ICBlcnJtc2cpOworCQkJCWVsc2UKKwkJCQkJYnJlYWs7CisJCQl9CiAJCX0KIAl9Ci0jZW5k aWYKIAogCS8qCiAJICogUHJlcGFyZSBpbmRleCBhcnJheXMsIHNvIHdlIGNhbiBhc3N1bWUg d2UgaGF2ZSB0aGVtIHRocm91Z2hvdXQgcmVzdG9yZS4KQEAgLTExMzMsNyArMTEyOCw3IEBA IFByaW50VE9DU3VtbWFyeShBcmNoaXZlICpBSFgpCiAJVG9jRW50cnkgICAqdGU7CiAJcGdf Y29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBvdXRfY29tcHJlc3Npb25fc3BlYyA9IHswfTsKIAl0 ZVNlY3Rpb24JY3VyU2VjdGlvbjsKLQlPdXRwdXRDb250ZXh0IHNhdjsKKwljZnAJCSAgICpz YXY7CiAJY29uc3QgY2hhciAqZm10TmFtZTsKIAljaGFyCQlzdGFtcF9zdHJbNjRdOwogCkBA IC0xNTA4LDU4ICsxNTAzLDMyIEBAIHN0YXRpYyB2b2lkCiBTZXRPdXRwdXQoQXJjaGl2ZUhh bmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCQkgIGNvbnN0IHBnX2NvbXByZXNz X3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKIHsKLQlpbnQJCQlmbjsKKwljb25z dCBjaGFyICptb2RlOworCWludAkJCWZuID0gLTE7CiAKIAlpZiAoZmlsZW5hbWUpCiAJewog CQlpZiAoc3RyY21wKGZpbGVuYW1lLCAiLSIpID09IDApCiAJCQlmbiA9IGZpbGVubyhzdGRv dXQpOwotCQllbHNlCi0JCQlmbiA9IC0xOwogCX0KIAllbHNlIGlmIChBSC0+RkgpCiAJCWZu ID0gZmlsZW5vKEFILT5GSCk7CiAJZWxzZSBpZiAoQUgtPmZTcGVjKQogCXsKLQkJZm4gPSAt MTsKIAkJZmlsZW5hbWUgPSBBSC0+ZlNwZWM7CiAJfQogCWVsc2UKIAkJZm4gPSBmaWxlbm8o c3Rkb3V0KTsKIAotCS8qIElmIGNvbXByZXNzaW9uIGV4cGxpY2l0bHkgcmVxdWVzdGVkLCB1 c2UgZ3pvcGVuICovCi0jaWZkZWYgSEFWRV9MSUJaCi0JaWYgKGNvbXByZXNzaW9uX3NwZWMu YWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCi0JewotCQljaGFyCQlmbW9kZVsx NF07CisJaWYgKEFILT5tb2RlID09IGFyY2hNb2RlQXBwZW5kKQorCQltb2RlID0gUEdfQklO QVJZX0E7CisJZWxzZQorCQltb2RlID0gUEdfQklOQVJZX1c7CiAKLQkJLyogRG9uJ3QgdXNl IFBHX0JJTkFSWV94IHNpbmNlIHRoaXMgaXMgemxpYiAqLwotCQlzcHJpbnRmKGZtb2RlLCAi d2IlZCIsIGNvbXByZXNzaW9uX3NwZWMubGV2ZWwpOwotCQlpZiAoZm4gPj0gMCkKLQkJCUFI LT5PRiA9IGd6ZG9wZW4oZHVwKGZuKSwgZm1vZGUpOwotCQllbHNlCi0JCQlBSC0+T0YgPSBn em9wZW4oZmlsZW5hbWUsIGZtb2RlKTsKLQkJQUgtPmd6T3V0ID0gMTsKLQl9CisJaWYgKGZu ID49IDApCisJCUFILT5PRiA9IGNmZG9wZW4oZHVwKGZuKSwgbW9kZSwgY29tcHJlc3Npb25f c3BlYyk7CiAJZWxzZQotI2VuZGlmCi0JewkJCQkJCQkvKiBVc2UgZm9wZW4gKi8KLQkJaWYg KEFILT5tb2RlID09IGFyY2hNb2RlQXBwZW5kKQotCQl7Ci0JCQlpZiAoZm4gPj0gMCkKLQkJ CQlBSC0+T0YgPSBmZG9wZW4oZHVwKGZuKSwgUEdfQklOQVJZX0EpOwotCQkJZWxzZQotCQkJ CUFILT5PRiA9IGZvcGVuKGZpbGVuYW1lLCBQR19CSU5BUllfQSk7Ci0JCX0KLQkJZWxzZQot CQl7Ci0JCQlpZiAoZm4gPj0gMCkKLQkJCQlBSC0+T0YgPSBmZG9wZW4oZHVwKGZuKSwgUEdf QklOQVJZX1cpOwotCQkJZWxzZQotCQkJCUFILT5PRiA9IGZvcGVuKGZpbGVuYW1lLCBQR19C SU5BUllfVyk7Ci0JCX0KLQkJQUgtPmd6T3V0ID0gMDsKLQl9CisJCUFILT5PRiA9IGNmb3Bl bihmaWxlbmFtZSwgbW9kZSwgY29tcHJlc3Npb25fc3BlYyk7CiAKIAlpZiAoIUFILT5PRikK IAl7CkBAIC0xNTcwLDMzICsxNTM5LDI0IEBAIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpB SCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJfQogfQogCi1zdGF0aWMgT3V0cHV0Q29udGV4 dAorc3RhdGljIGNmcCAqCiBTYXZlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFIKQogewotCU91 dHB1dENvbnRleHQgc2F2OwotCi0Jc2F2Lk9GID0gQUgtPk9GOwotCXNhdi5nek91dCA9IEFI LT5nek91dDsKLQotCXJldHVybiBzYXY7CisJcmV0dXJuIChjZnAgKikgQUgtPk9GOwogfQog CiBzdGF0aWMgdm9pZAotUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgT3V0cHV0 Q29udGV4dCBzYXZlZENvbnRleHQpCitSZXN0b3JlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFI LCBjZnAgKnNhdmVkT3V0cHV0KQogewogCWludAkJCXJlczsKIAotCWVycm5vID0gMDsJCQkJ CS8qIGluIGNhc2UgZ3pjbG9zZSgpIGRvZXNuJ3Qgc2V0IGl0ICovCi0JaWYgKEFILT5nek91 dCkKLQkJcmVzID0gR1pDTE9TRShBSC0+T0YpOwotCWVsc2UKLQkJcmVzID0gZmNsb3NlKEFI LT5PRik7CisJZXJybm8gPSAwOworCXJlcyA9IGNmY2xvc2UoQUgtPk9GKTsKIAogCWlmIChy ZXMgIT0gMCkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBvdXRwdXQgZmlsZTogJW0i KTsKIAotCUFILT5nek91dCA9IHNhdmVkQ29udGV4dC5nek91dDsKLQlBSC0+T0YgPSBzYXZl ZENvbnRleHQuT0Y7CisJQUgtPk9GID0gc2F2ZWRPdXRwdXQ7CiB9CiAKIApAQCAtMTcyMCwy MiArMTY4MCwxNyBAQCBhaHdyaXRlKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIHNp emVfdCBubWVtYiwgQXJjaGl2ZUhhbmRsZSAqQUgpCiAKIAkJYnl0ZXNfd3JpdHRlbiA9IHNp emUgKiBubWVtYjsKIAl9Ci0JZWxzZSBpZiAoQUgtPmd6T3V0KQotCQlieXRlc193cml0dGVu ID0gR1pXUklURShwdHIsIHNpemUsIG5tZW1iLCBBSC0+T0YpOwogCWVsc2UgaWYgKEFILT5D dXN0b21PdXRQdHIpCiAJCWJ5dGVzX3dyaXR0ZW4gPSBBSC0+Q3VzdG9tT3V0UHRyKEFILCBw dHIsIHNpemUgKiBubWVtYik7CiAKKwkvKgorCSAqIElmIHdlJ3JlIGRvaW5nIGEgcmVzdG9y ZSwgYW5kIGl0J3MgZGlyZWN0IHRvIERCLCBhbmQgd2UncmUgY29ubmVjdGVkCisJICogdGhl biBzZW5kIGl0IHRvIHRoZSBEQi4KKwkgKi8KKwllbHNlIGlmIChSZXN0b3JpbmdUb0RCKEFI KSkKKwkJYnl0ZXNfd3JpdHRlbiA9IEV4ZWN1dGVTcWxDb21tYW5kQnVmKCZBSC0+cHVibGlj LCAoY29uc3QgY2hhciAqKSBwdHIsIHNpemUgKiBubWVtYik7CiAJZWxzZQotCXsKLQkJLyoK LQkJICogSWYgd2UncmUgZG9pbmcgYSByZXN0b3JlLCBhbmQgaXQncyBkaXJlY3QgdG8gREIs IGFuZCB3ZSdyZQotCQkgKiBjb25uZWN0ZWQgdGhlbiBzZW5kIGl0IHRvIHRoZSBEQi4KLQkJ ICovCi0JCWlmIChSZXN0b3JpbmdUb0RCKEFIKSkKLQkJCWJ5dGVzX3dyaXR0ZW4gPSBFeGVj dXRlU3FsQ29tbWFuZEJ1ZigmQUgtPnB1YmxpYywgKGNvbnN0IGNoYXIgKikgcHRyLCBzaXpl ICogbm1lbWIpOwotCQllbHNlCi0JCQlieXRlc193cml0dGVuID0gZndyaXRlKHB0ciwgc2l6 ZSwgbm1lbWIsIEFILT5PRikgKiBzaXplOwotCX0KKwkJYnl0ZXNfd3JpdHRlbiA9IGNmd3Jp dGUocHRyLCBzaXplICogbm1lbWIsIEFILT5PRik7CiAKIAlpZiAoYnl0ZXNfd3JpdHRlbiAh PSBzaXplICogbm1lbWIpCiAJCVdSSVRFX0VSUk9SX0VYSVQ7CkBAIC0yMjI0LDYgKzIxNzks NyBAQCBfYWxsb2NBSChjb25zdCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1h dCBmbXQsCiAJCSBTZXR1cFdvcmtlclB0clR5cGUgc2V0dXBXb3JrZXJQdHIpCiB7CiAJQXJj aGl2ZUhhbmRsZSAqQUg7CisJcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBvdXRfY29tcHJl c3Nfc3BlYyA9IHswfTsKIAogCXBnX2xvZ19kZWJ1ZygiYWxsb2NhdGluZyBBSCBmb3IgJXMs IGZvcm1hdCAlZCIsCiAJCQkJIEZpbGVTcGVjID8gRmlsZVNwZWMgOiAiKHN0ZGlvKSIsIGZt dCk7CkBAIC0yMjc3LDggKzIyMzMsOCBAQCBfYWxsb2NBSChjb25zdCBjaGFyICpGaWxlU3Bl YywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQsCiAJbWVtc2V0KCYoQUgtPnNxbHBhcnNlKSwg MCwgc2l6ZW9mKEFILT5zcWxwYXJzZSkpOwogCiAJLyogT3BlbiBzdGRvdXQgd2l0aCBubyBj b21wcmVzc2lvbiBmb3IgQUggb3V0cHV0IGhhbmRsZSAqLwotCUFILT5nek91dCA9IDA7Ci0J QUgtPk9GID0gc3Rkb3V0OworCW91dF9jb21wcmVzc19zcGVjLmFsZ29yaXRobSA9IFBHX0NP TVBSRVNTSU9OX05PTkU7CisJQUgtPk9GID0gY2Zkb3BlbihkdXAoZmlsZW5vKHN0ZG91dCkp LCBQR19CSU5BUllfQSwgb3V0X2NvbXByZXNzX3NwZWMpOwogCiAJLyoKIAkgKiBPbiBXaW5k b3dzLCB3ZSBuZWVkIHRvIHVzZSBiaW5hcnkgbW9kZSB0byByZWFkL3dyaXRlIG5vbi10ZXh0 IGZpbGVzLApAQCAtMzcxMiw2ICszNjY4LDcgQEAgV3JpdGVIZWFkKEFyY2hpdmVIYW5kbGUg KkFIKQogdm9pZAogUmVhZEhlYWQoQXJjaGl2ZUhhbmRsZSAqQUgpCiB7CisJY2hhcgkgICAq ZXJybXNnOwogCWNoYXIJCXZtYWosCiAJCQkJdm1pbiwKIAkJCQl2cmV2OwpAQCAtMzc4MSwx MCArMzczOCwxMyBAQCBSZWFkSGVhZChBcmNoaXZlSGFuZGxlICpBSCkKIAllbHNlCiAJCUFI LT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX0daSVA7CiAK LSNpZm5kZWYgSEFWRV9MSUJaCi0JaWYgKEFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRo bSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQotCQlwZ19sb2dfd2FybmluZygiYXJjaGl2ZSBp cyBjb21wcmVzc2VkLCBidXQgdGhpcyBpbnN0YWxsYXRpb24gZG9lcyBub3Qgc3VwcG9ydCBj b21wcmVzc2lvbiAtLSBubyBkYXRhIHdpbGwgYmUgYXZhaWxhYmxlIik7Ci0jZW5kaWYKKwll cnJtc2cgPSBzdXBwb3J0c19jb21wcmVzc2lvbihBSC0+Y29tcHJlc3Npb25fc3BlYyk7CisJ aWYgKGVycm1zZykKKwl7CisJCXBnX2xvZ193YXJuaW5nKCJhcmNoaXZlIGlzIGNvbXByZXNz ZWQsIGJ1dCB0aGlzIGluc3RhbGxhdGlvbiBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9u ICglcykgLS0gbm8gZGF0YSB3aWxsIGJlIGF2YWlsYWJsZSIsCisJCQkJCQllcnJtc2cpOwor CQlwZ19mcmVlKGVycm1zZyk7CisJfQogCiAJaWYgKEFILT52ZXJzaW9uID49IEtfVkVSU18x XzQpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZl ci5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCmluZGV4IGY3MjQ0 NmVkNWI0Li40NzI1ZTQ5NzQ3YiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2Jh Y2t1cF9hcmNoaXZlci5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2 ZXIuaApAQCAtMzIsMzAgKzMyLDYgQEAKIAogI2RlZmluZSBMT0JCVUZTSVpFIDE2Mzg0CiAK LSNpZmRlZiBIQVZFX0xJQloKLSNpbmNsdWRlIDx6bGliLmg+Ci0jZGVmaW5lIEdaQ0xPU0Uo ZmgpIGd6Y2xvc2UoZmgpCi0jZGVmaW5lIEdaV1JJVEUocCwgcywgbiwgZmgpIGd6d3JpdGUo ZmgsIHAsIChuKSAqIChzKSkKLSNkZWZpbmUgR1pSRUFEKHAsIHMsIG4sIGZoKSBnenJlYWQo ZmgsIHAsIChuKSAqIChzKSkKLSNkZWZpbmUgR1pFT0YoZmgpCWd6ZW9mKGZoKQotI2Vsc2UK LSNkZWZpbmUgR1pDTE9TRShmaCkgZmNsb3NlKGZoKQotI2RlZmluZSBHWldSSVRFKHAsIHMs IG4sIGZoKSAoZndyaXRlKHAsIHMsIG4sIGZoKSAqIChzKSkKLSNkZWZpbmUgR1pSRUFEKHAs IHMsIG4sIGZoKSBmcmVhZChwLCBzLCBuLCBmaCkKLSNkZWZpbmUgR1pFT0YoZmgpCWZlb2Yo ZmgpCi0vKiB0aGlzIGlzIGp1c3QgdGhlIHJlZGVmaW5pdGlvbiBvZiBhIGxpYnogY29uc3Rh bnQgKi8KLSNkZWZpbmUgWl9ERUZBVUxUX0NPTVBSRVNTSU9OICgtMSkKLQotdHlwZWRlZiBz dHJ1Y3QgX3pfc3RyZWFtCi17Ci0Jdm9pZAkgICAqbmV4dF9pbjsKLQl2b2lkCSAgICpuZXh0 X291dDsKLQlzaXplX3QJCWF2YWlsX2luOwotCXNpemVfdAkJYXZhaWxfb3V0OwotfSB6X3N0 cmVhbTsKLXR5cGVkZWYgel9zdHJlYW0gKnpfc3RyZWFtcDsKLSNlbmRpZgotCiAvKiBEYXRh IGJsb2NrIHR5cGVzICovCiAjZGVmaW5lIEJMS19EQVRBIDEKICNkZWZpbmUgQkxLX0JMT0JT IDMKQEAgLTMxOSw4ICsyOTUsNyBAQCBzdHJ1Y3QgX2FyY2hpdmVIYW5kbGUKIAogCWNoYXIJ ICAgKmZTcGVjOwkJCS8qIEFyY2hpdmUgRmlsZSBTcGVjICovCiAJRklMRQkgICAqRkg7CQkJ CS8qIEdlbmVyYWwgcHVycG9zZSBmaWxlIGhhbmRsZSAqLwotCXZvaWQJICAgKk9GOwotCWlu dAkJCWd6T3V0OwkJCS8qIE91dHB1dCBmaWxlICovCisJdm9pZAkgICAqT0Y7CQkJCS8qIE91 dHB1dCBmaWxlICovCiAKIAlzdHJ1Y3QgX3RvY0VudHJ5ICp0b2M7CQkvKiBIZWFkZXIgb2Yg Y2lyY3VsYXIgbGlzdCBvZiBUT0MgZW50cmllcyAqLwogCWludAkJCXRvY0NvdW50OwkJLyog TnVtYmVyIG9mIFRPQyBlbnRyaWVzICovCi0tIAoyLjM5LjEKCg== --------------svO0l9foLms6unOl0KQH4LJu Content-Type: text/x-patch; charset=UTF-8; name="0002-Introduce-a-generic-pg_dump-compression-API-v29.patch" Content-Disposition: attachment; filename*0="0002-Introduce-a-generic-pg_dump-compression-API-v29.patch" Content-Transfer-Encoding: base64 RnJvbSBmNTAwMmU1NjNiNDhhMDE5NjE0MzkxMDc0OGNlMGQ2YjkyYTM4N2M5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NA cG0ubWU+CkRhdGU6IFRodSwgMTYgRmViIDIwMjMgMTE6MDA6MjUgKzAwMDAKU3ViamVjdDog W1BBVENIIDIvM10gSW50cm9kdWNlIGEgZ2VuZXJpYyBwZ19kdW1wIGNvbXByZXNzaW9uIEFQ SQoKU3dpdGNoIHBnX2R1bXAgdG8gdXNlIHRoZSBDb21wcmVzc2lvbiBBUEksIGltcGxlbWVu dGVkIGJ5IGJmOWFhNDkwZGIuCgpUaGUgQ29tcHJlc3NGaWxlSGFuZGxlIHJlcGxhY2VzIHRo ZSBjZnAqIGZhbWlseSBvZiBmdW5jdGlvbnMgd2l0aCBhCnN0cnVjdCBvZiBjYWxsYmFja3Mg Zm9yIGFjY2Vzc2luZyAoY29tcHJlc3NlZCkgZmlsZXMuIFRoaXMgYWxsb3dzIGFkZGluZwpu ZXcgY29tcHJlc3Npb24gbWV0aG9kcyBzaW1wbHkgYnkgaW50cm9kdWNpbmcgYSBuZXcgc3Ry dWN0IGluc3RhbmNlIHdpdGgKYXBwcm9wcmlhdGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGNh bGxiYWNrcy4KCkFyY2hpdmVzIGNvbXByZXNzZWQgdXNpbmcgY3VzdG9tIGNvbXByZXNzaW9u IG1ldGhvZHMgc3RvcmUgYW4gaWRlbnRpZmllcgpvZiB0aGUgY29tcHJlc3Npb24gYWxnb3Jp dGhtIGluIHRoZWlyIGhlYWRlciBpbnN0ZWFkIG9mIHRoZSBjb21wcmVzc2lvbgpsZXZlbC4g VGhlIGhlYWRlciB2ZXJzaW9uIGlzIGJ1bXBlZC4KCk1vc3Qgb2YgdGhlIGNvZGUgd2FzIHdy aXR0ZW4gYnkgR2Vvcmdpb3MgS29rb2xhdG9zLiBSYWNoZWwgSGVhdG9uIHByb3ZpZGVkCmlu dmFsdWFibGUgaGVscCBvdXQgd2l0aCBleHBhbmRpbmcgdGhlIHRlc3RpbmcgY292ZXJhZ2Us IHRlc3Rpbmcgb24KZGlmZmVyZW50IHBsYXRmb3JtcyBhbmQgcHJvdmlkaW5nIGRlYnVnIGlu Zm9ybWF0aW9uIG9uIHRob3NlLCBhcyB3ZWxsIGFzCm5hdGl2ZSBzcGVha2VyIHdvcmRpbmcu CgpBdXRob3I6IEdlb3JnaW9zIEtva29sYXRvcywgUmFjaGVsIEhlYXRvbgpSZXZpZXdlZC1i eTogTWljaGFlbCBQYXF1aWVyLCBKdXN0aW4gUHJ5emJ5LCBEYW5pZWwgR3VzdGFmc3Nvbiwg VG9tYXMKVm9uZHJhCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vZmFVTkVPcHRz OXZ1bkVhTG5teG1HLURsZExTZ19xbDEzN09DM0pZRG1nck9NSG0xUnZ2V1kySWRCa3ZfQ1J4 bTVzcENDYl9PbUtOazJUMDNUTW0wZkJFV3ZlRkY5d0ExV2l6UHVBZ0I3U3MlM0QlNDBwcm90 b25tYWlsLmNvbQotLS0KIHNyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZSAgICAgICAgICAgICAg fCAgIDIgKwogc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAuYyAgICAgICB8IDQwMSAr KysrKysrKysrKysrKwogc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAuaCAgICAgICB8 ICAyNCArCiBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYyAgICAgICAgIHwgNzQ0ICsr KysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8u aCAgICAgICAgIHwgMTY2ICsrKysrLQogc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX25vbmUu YyAgICAgICB8IDIwNiArKysrKysrCiBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nfbm9uZS5o ICAgICAgIHwgIDI0ICsKIHNyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCAgICAgICAgICAg fCAgIDIgKwogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jICB8ICA5MSAr Ky0tCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmggIHwgICA1ICstCiBz cmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2N1c3RvbS5jICAgIHwgIDI3ICstCiBzcmMvYmlu L3BnX2R1bXAvcGdfYmFja3VwX2RpcmVjdG9yeS5jIHwgIDk0ICsrLS0KIHNyYy9iaW4vcGdf ZHVtcC90LzAwMl9wZ19kdW1wLnBsICAgICAgfCAgMTAgKy0KIHNyYy9pbmNsdWRlL2NvbW1v bi9jb21wcmVzc2lvbi5oICAgICAgfCAgIDQgKwogc3JjL3Rvb2xzL3BnaW5jbHVkZS9jcGx1 c3BsdXNjaGVjayAgICB8ICAgMiArCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dCAgICAgIHwgICAyICsKIDE2IGZpbGVzIGNoYW5nZWQsIDEwNTMgaW5zZXJ0aW9ucygrKSwg NzUxIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfZHVtcC9j b21wcmVzc19nemlwLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2R1bXAvY29t cHJlc3NfZ3ppcC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ19kdW1wL2NvbXBy ZXNzX25vbmUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVz c19ub25lLmgKCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUgYi9zcmMv YmluL3BnX2R1bXAvTWFrZWZpbGUKaW5kZXggZWYxZWQwZjNlNTEuLjAwMTNiYzA4MGNmIDEw MDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKKysrIGIvc3JjL2Jpbi9wZ19k dW1wL01ha2VmaWxlCkBAIC0yNCw3ICsyNCw5IEBAIExERkxBR1NfSU5URVJOQUwgKz0gLUwk KHRvcF9idWlsZGRpcikvc3JjL2ZlX3V0aWxzIC1scGdmZXV0aWxzICQobGlicHFfcGdwb3J0 KQogCiBPQkpTID0gXAogCSQoV0lOMzJSRVMpIFwKKwljb21wcmVzc19nemlwLm8gXAogCWNv bXByZXNzX2lvLm8gXAorCWNvbXByZXNzX25vbmUubyBcCiAJZHVtcHV0aWxzLm8gXAogCXBh cmFsbGVsLm8gXAogCXBnX2JhY2t1cF9hcmNoaXZlci5vIFwKZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmMgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nf Z3ppcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yNGU2OGZk MDIyMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19nemlw LmMKQEAgLTAsMCArMSw0MDEgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGNv bXByZXNzX2d6aXAuYworICoJIFJvdXRpbmVzIGZvciBhcmNoaXZlcnMgdG8gcmVhZCBvciB3 cml0ZSBhIGd6aXAgY29tcHJlc3NlZCBkYXRhIHN0cmVhbS4KKyAqCisgKiBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDE5OTYtMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQg R3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUg VW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAg IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCisjaW5jbHVkZSA8dW5pc3Rk Lmg+CisKKyNpbmNsdWRlICJjb21wcmVzc19nemlwLmgiCisjaW5jbHVkZSAicGdfYmFja3Vw X3V0aWxzLmgiCisKKyNpZmRlZiBIQVZFX0xJQloKKyNpbmNsdWRlICJ6bGliLmgiCisKKy8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ29tcHJlc3NvciBBUEkKKyAqLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICovCit0eXBlZGVmIHN0cnVjdCBHemlwQ29tcHJlc3NvclN0YXRl Cit7CisJel9zdHJlYW1wCXpwOworCisJdm9pZAkgICAqb3V0YnVmOworCXNpemVfdAkJb3V0 c2l6ZTsKK30gR3ppcENvbXByZXNzb3JTdGF0ZTsKKworLyogUHJpdmF0ZSByb3V0aW5lcyB0 aGF0IHN1cHBvcnQgZ3ppcCBjb21wcmVzc2VkIGRhdGEgSS9PICovCitzdGF0aWMgdm9pZAor RGVmbGF0ZUNvbXByZXNzb3JHemlwKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3Rh dGUgKmNzLCBib29sIGZsdXNoKQoreworCUd6aXBDb21wcmVzc29yU3RhdGUgKmd6aXBjcyA9 IChHemlwQ29tcHJlc3NvclN0YXRlICopIGNzLT5wcml2YXRlX2RhdGE7CisJel9zdHJlYW1w CXpwID0gZ3ppcGNzLT56cDsKKwl2b2lkCSAgICpvdXQgPSBnemlwY3MtPm91dGJ1ZjsKKwlp bnQJCQlyZXMgPSBaX09LOworCisJd2hpbGUgKGd6aXBjcy0+enAtPmF2YWlsX2luICE9IDAg fHwgZmx1c2gpCisJeworCQlyZXMgPSBkZWZsYXRlKHpwLCBmbHVzaCA/IFpfRklOSVNIIDog Wl9OT19GTFVTSCk7CisJCWlmIChyZXMgPT0gWl9TVFJFQU1fRVJST1IpCisJCQlwZ19mYXRh bCgiY291bGQgbm90IGNvbXByZXNzIGRhdGE6ICVzIiwgenAtPm1zZyk7CisJCWlmICgoZmx1 c2ggJiYgKHpwLT5hdmFpbF9vdXQgPCBnemlwY3MtPm91dHNpemUpKQorCQkJfHwgKHpwLT5h dmFpbF9vdXQgPT0gMCkKKwkJCXx8ICh6cC0+YXZhaWxfaW4gIT0gMCkKKwkJCSkKKwkJewor CQkJLyoKKwkJCSAqIEV4dHJhIHBhcmFub2lhOiBhdm9pZCB6ZXJvLWxlbmd0aCBjaHVua3Ms IHNpbmNlIGEgemVybyBsZW5ndGgKKwkJCSAqIGNodW5rIGlzIHRoZSBFT0YgbWFya2VyIGlu IHRoZSBjdXN0b20gZm9ybWF0LiBUaGlzIHNob3VsZCBuZXZlcgorCQkJICogaGFwcGVuIGJ1 dC4uLgorCQkJICovCisJCQlpZiAoenAtPmF2YWlsX291dCA8IGd6aXBjcy0+b3V0c2l6ZSkK KwkJCXsKKwkJCQkvKgorCQkJCSAqIEFueSB3cml0ZSBmdW5jdGlvbiBzaG91bGQgZG8gaXRz IG93biBlcnJvciBjaGVja2luZyBidXQgdG8KKwkJCQkgKiBtYWtlIHN1cmUgd2UgZG8gYSBj aGVjayBoZXJlIGFzIHdlbGwuLi4KKwkJCQkgKi8KKwkJCQlzaXplX3QJCWxlbiA9IGd6aXBj cy0+b3V0c2l6ZSAtIHpwLT5hdmFpbF9vdXQ7CisKKwkJCQljcy0+d3JpdGVGKEFILCAoY2hh ciAqKSBvdXQsIGxlbik7CisJCQl9CisJCQl6cC0+bmV4dF9vdXQgPSBvdXQ7CisJCQl6cC0+ YXZhaWxfb3V0ID0gZ3ppcGNzLT5vdXRzaXplOworCQl9CisKKwkJaWYgKHJlcyA9PSBaX1NU UkVBTV9FTkQpCisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitFbmRDb21wcmVz c29yR3ppcChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcykKK3sKKwlH emlwQ29tcHJlc3NvclN0YXRlICpnemlwY3MgPSAoR3ppcENvbXByZXNzb3JTdGF0ZSAqKSBj cy0+cHJpdmF0ZV9kYXRhOworCXpfc3RyZWFtcAl6cDsKKworCWlmIChnemlwY3MtPnpwKQor CXsKKwkJenAgPSBnemlwY3MtPnpwOworCQl6cC0+bmV4dF9pbiA9IE5VTEw7CisJCXpwLT5h dmFpbF9pbiA9IDA7CisKKwkJLyogRmx1c2ggYW55IHJlbWFpbmluZyBkYXRhIGZyb20gemxp YiBidWZmZXIgKi8KKwkJRGVmbGF0ZUNvbXByZXNzb3JHemlwKEFILCBjcywgdHJ1ZSk7CisK KwkJaWYgKGRlZmxhdGVFbmQoenApICE9IFpfT0spCisJCQlwZ19mYXRhbCgiY291bGQgbm90 IGNsb3NlIGNvbXByZXNzaW9uIHN0cmVhbTogJXMiLCB6cC0+bXNnKTsKKworCQlwZ19mcmVl KGd6aXBjcy0+b3V0YnVmKTsKKwkJcGdfZnJlZShnemlwY3MtPnpwKTsKKwl9CisKKwlwZ19m cmVlKGd6aXBjcyk7CisJY3MtPnByaXZhdGVfZGF0YSA9IE5VTEw7Cit9CisKK3N0YXRpYyB2 b2lkCitXcml0ZURhdGFUb0FyY2hpdmVHemlwKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVz c29yU3RhdGUgKmNzLAorCQkJCQkgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExlbikK K3sKKwlHemlwQ29tcHJlc3NvclN0YXRlICpnemlwY3MgPSAoR3ppcENvbXByZXNzb3JTdGF0 ZSAqKSBjcy0+cHJpdmF0ZV9kYXRhOworCXpfc3RyZWFtcAl6cDsKKworCWlmICghZ3ppcGNz LT56cCkKKwl7CisJCXpwID0gZ3ppcGNzLT56cCA9ICh6X3N0cmVhbXApIHBnX21hbGxvYyhz aXplb2Yoel9zdHJlYW0pKTsKKwkJenAtPnphbGxvYyA9IFpfTlVMTDsKKwkJenAtPnpmcmVl ID0gWl9OVUxMOworCQl6cC0+b3BhcXVlID0gWl9OVUxMOworCisJCS8qCisJCSAqIG91dHNp emUgaXMgdGhlIGJ1ZmZlciBzaXplIHdlIHRlbGwgemxpYiBpdCBjYW4gb3V0cHV0IHRvLiAg V2UKKwkJICogYWN0dWFsbHkgYWxsb2NhdGUgb25lIGV4dHJhIGJ5dGUgYmVjYXVzZSBzb21l IHJvdXRpbmVzIHdhbnQgdG8KKwkJICogYXBwZW5kIGEgdHJhaWxpbmcgemVybyBieXRlIHRv IHRoZSB6bGliIG91dHB1dC4KKwkJICovCisJCWd6aXBjcy0+b3V0YnVmID0gcGdfbWFsbG9j KFpMSUJfT1VUX1NJWkUgKyAxKTsKKwkJZ3ppcGNzLT5vdXRzaXplID0gWkxJQl9PVVRfU0la RTsKKworCQkvKgorCQkgKiBBIGxldmVsIG9mIHplcm8gc2ltcGx5IGNvcGllcyB0aGUgaW5w dXQgb25lIGJsb2NrIGF0IHRoZSB0aW1lLiBUaGlzCisJCSAqIGlzIHByb2JhYmx5IG5vdCB3 aGF0IHRoZSB1c2VyIHdhbnRlZCB3aGVuIGNhbGxpbmcgdGhpcyBpbnRlcmZhY2UuCisJCSAq LworCQlpZiAoY3MtPmNvbXByZXNzaW9uX3NwZWMubGV2ZWwgPT0gMCkKKwkJCXBnX2ZhdGFs KCJyZXF1ZXN0ZWQgdG8gY29tcHJlc3MgdGhlIGFyY2hpdmUgeWV0IG5vIGxldmVsIHdhcyBz cGVjaWZpZWQiKTsKKworCQlpZiAoZGVmbGF0ZUluaXQoenAsIGNzLT5jb21wcmVzc2lvbl9z cGVjLmxldmVsKSAhPSBaX09LKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBpbml0aWFsaXpl IGNvbXByZXNzaW9uIGxpYnJhcnk6ICVzIiwgenAtPm1zZyk7CisKKwkJLyogSnVzdCBiZSBw YXJhbm9pZCAtIG1heWJlIEVuZCBpcyBjYWxsZWQgYWZ0ZXIgU3RhcnQsIHdpdGggbm8gV3Jp dGUgKi8KKwkJenAtPm5leHRfb3V0ID0gZ3ppcGNzLT5vdXRidWY7CisJCXpwLT5hdmFpbF9v dXQgPSBnemlwY3MtPm91dHNpemU7CisJfQorCisJZ3ppcGNzLT56cC0+bmV4dF9pbiA9ICh2 b2lkICopIHVuY29uc3RpZnkodm9pZCAqLCBkYXRhKTsKKwlnemlwY3MtPnpwLT5hdmFpbF9p biA9IGRMZW47CisJRGVmbGF0ZUNvbXByZXNzb3JHemlwKEFILCBjcywgZmFsc2UpOworfQor CitzdGF0aWMgdm9pZAorUmVhZERhdGFGcm9tQXJjaGl2ZUd6aXAoQXJjaGl2ZUhhbmRsZSAq QUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpCit7CisJel9zdHJlYW1wCXpwOworCWNoYXIJICAg Km91dDsKKwlpbnQJCQlyZXMgPSBaX09LOworCXNpemVfdAkJY250OworCWNoYXIJICAgKmJ1 ZjsKKwlzaXplX3QJCWJ1ZmxlbjsKKworCXpwID0gKHpfc3RyZWFtcCkgcGdfbWFsbG9jKHNp emVvZih6X3N0cmVhbSkpOworCXpwLT56YWxsb2MgPSBaX05VTEw7CisJenAtPnpmcmVlID0g Wl9OVUxMOworCXpwLT5vcGFxdWUgPSBaX05VTEw7CisKKwlidWYgPSBwZ19tYWxsb2MoWkxJ Ql9JTl9TSVpFKTsKKwlidWZsZW4gPSBaTElCX0lOX1NJWkU7CisKKwlvdXQgPSBwZ19tYWxs b2MoWkxJQl9PVVRfU0laRSArIDEpOworCisJaWYgKGluZmxhdGVJbml0KHpwKSAhPSBaX09L KQorCQlwZ19mYXRhbCgiY291bGQgbm90IGluaXRpYWxpemUgY29tcHJlc3Npb24gbGlicmFy eTogJXMiLAorCQkJCSB6cC0+bXNnKTsKKworCS8qIG5vIG1pbmltYWwgY2h1bmsgc2l6ZSBm b3IgemxpYiAqLworCXdoaWxlICgoY250ID0gY3MtPnJlYWRGKEFILCAmYnVmLCAmYnVmbGVu KSkpCisJeworCQl6cC0+bmV4dF9pbiA9ICh2b2lkICopIGJ1ZjsKKwkJenAtPmF2YWlsX2lu ID0gY250OworCisJCXdoaWxlICh6cC0+YXZhaWxfaW4gPiAwKQorCQl7CisJCQl6cC0+bmV4 dF9vdXQgPSAodm9pZCAqKSBvdXQ7CisJCQl6cC0+YXZhaWxfb3V0ID0gWkxJQl9PVVRfU0la RTsKKworCQkJcmVzID0gaW5mbGF0ZSh6cCwgMCk7CisJCQlpZiAocmVzICE9IFpfT0sgJiYg cmVzICE9IFpfU1RSRUFNX0VORCkKKwkJCQlwZ19mYXRhbCgiY291bGQgbm90IHVuY29tcHJl c3MgZGF0YTogJXMiLCB6cC0+bXNnKTsKKworCQkJb3V0W1pMSUJfT1VUX1NJWkUgLSB6cC0+ YXZhaWxfb3V0XSA9ICdcMCc7CisJCQlhaHdyaXRlKG91dCwgMSwgWkxJQl9PVVRfU0laRSAt IHpwLT5hdmFpbF9vdXQsIEFIKTsKKwkJfQorCX0KKworCXpwLT5uZXh0X2luID0gTlVMTDsK Kwl6cC0+YXZhaWxfaW4gPSAwOworCXdoaWxlIChyZXMgIT0gWl9TVFJFQU1fRU5EKQorCXsK KwkJenAtPm5leHRfb3V0ID0gKHZvaWQgKikgb3V0OworCQl6cC0+YXZhaWxfb3V0ID0gWkxJ Ql9PVVRfU0laRTsKKwkJcmVzID0gaW5mbGF0ZSh6cCwgMCk7CisJCWlmIChyZXMgIT0gWl9P SyAmJiByZXMgIT0gWl9TVFJFQU1fRU5EKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCB1bmNv bXByZXNzIGRhdGE6ICVzIiwgenAtPm1zZyk7CisKKwkJb3V0W1pMSUJfT1VUX1NJWkUgLSB6 cC0+YXZhaWxfb3V0XSA9ICdcMCc7CisJCWFod3JpdGUob3V0LCAxLCBaTElCX09VVF9TSVpF IC0genAtPmF2YWlsX291dCwgQUgpOworCX0KKworCWlmIChpbmZsYXRlRW5kKHpwKSAhPSBa X09LKQorCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIGNvbXByZXNzaW9uIGxpYnJhcnk6 ICVzIiwgenAtPm1zZyk7CisKKwlmcmVlKGJ1Zik7CisJZnJlZShvdXQpOworCWZyZWUoenAp OworfQorCisvKiBQdWJsaWMgcm91dGluZXMgdGhhdCBzdXBwb3J0IGd6aXAgY29tcHJlc3Nl ZCBkYXRhIEkvTyAqLwordm9pZAorSW5pdENvbXByZXNzb3JHemlwKENvbXByZXNzb3JTdGF0 ZSAqY3MsCisJCQkJICAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVz c2lvbl9zcGVjKQoreworCUd6aXBDb21wcmVzc29yU3RhdGUgKmd6aXBjczsKKworCWNzLT5y ZWFkRGF0YSA9IFJlYWREYXRhRnJvbUFyY2hpdmVHemlwOworCWNzLT53cml0ZURhdGEgPSBX cml0ZURhdGFUb0FyY2hpdmVHemlwOworCWNzLT5lbmQgPSBFbmRDb21wcmVzc29yR3ppcDsK KworCWNzLT5jb21wcmVzc2lvbl9zcGVjID0gY29tcHJlc3Npb25fc3BlYzsKKworCWd6aXBj cyA9IChHemlwQ29tcHJlc3NvclN0YXRlICopIHBnX21hbGxvYzAoc2l6ZW9mKEd6aXBDb21w cmVzc29yU3RhdGUpKTsKKworCWNzLT5wcml2YXRlX2RhdGEgPSBnemlwY3M7Cit9CisKKwor LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDb21wcmVzcyBGaWxlIEFQSQorICotLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworc3RhdGljIHNpemVfdAorR3ppcF9yZWFkKHZv aWQgKnB0ciwgc2l6ZV90IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCWd6 RmlsZQkJZ3pmcCA9IChnekZpbGUpIENGSC0+cHJpdmF0ZV9kYXRhOworCXNpemVfdAkJcmV0 OworCisJcmV0ID0gZ3pyZWFkKGd6ZnAsIHB0ciwgc2l6ZSk7CisJaWYgKHJldCAhPSBzaXpl ICYmICFnemVvZihnemZwKSkKKwl7CisJCWludAkJCWVycm51bTsKKwkJY29uc3QgY2hhciAq ZXJybXNnID0gZ3plcnJvcihnemZwLCAmZXJybnVtKTsKKworCQlwZ19mYXRhbCgiY291bGQg bm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsCisJCQkJIGVycm51bSA9PSBaX0VSUk5P ID8gc3RyZXJyb3IoZXJybm8pIDogZXJybXNnKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQor CitzdGF0aWMgc2l6ZV90CitHemlwX3dyaXRlKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNp emUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCWd6RmlsZQkJZ3pmcCA9IChnekZp bGUpIENGSC0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIGd6d3JpdGUoZ3pmcCwgcHRyLCBz aXplKTsKK30KKworc3RhdGljIGludAorR3ppcF9nZXRjKENvbXByZXNzRmlsZUhhbmRsZSAq Q0ZIKQoreworCWd6RmlsZQkJZ3pmcCA9IChnekZpbGUpIENGSC0+cHJpdmF0ZV9kYXRhOwor CWludAkJCXJldDsKKworCWVycm5vID0gMDsKKwlyZXQgPSBnemdldGMoZ3pmcCk7CisJaWYg KHJldCA9PSBFT0YpCisJeworCQlpZiAoIWd6ZW9mKGd6ZnApKQorCQkJcGdfZmF0YWwoImNv dWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOwor CQllbHNlCisJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiBl bmQgb2YgZmlsZSIpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjaGFyICoK K0d6aXBfZ2V0cyhjaGFyICpwdHIsIGludCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNG SCkKK3sKKwlnekZpbGUJCWd6ZnAgPSAoZ3pGaWxlKSBDRkgtPnByaXZhdGVfZGF0YTsKKwor CXJldHVybiBnemdldHMoZ3pmcCwgcHRyLCBzaXplKTsKK30KKworc3RhdGljIGludAorR3pp cF9jbG9zZShDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlnekZpbGUJCWd6ZnAgPSAo Z3pGaWxlKSBDRkgtPnByaXZhdGVfZGF0YTsKKworCUNGSC0+cHJpdmF0ZV9kYXRhID0gTlVM TDsKKworCXJldHVybiBnemNsb3NlKGd6ZnApOworfQorCitzdGF0aWMgaW50CitHemlwX2Vv ZihDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlnekZpbGUJCWd6ZnAgPSAoZ3pGaWxl KSBDRkgtPnByaXZhdGVfZGF0YTsKKworCXJldHVybiBnemVvZihnemZwKTsKK30KKworc3Rh dGljIGNvbnN0IGNoYXIgKgorR3ppcF9nZXRfZXJyb3IoQ29tcHJlc3NGaWxlSGFuZGxlICpD RkgpCit7CisJZ3pGaWxlCQlnemZwID0gKGd6RmlsZSkgQ0ZILT5wcml2YXRlX2RhdGE7CisJ Y29uc3QgY2hhciAqZXJybXNnOworCWludAkJCWVycm51bTsKKworCWVycm1zZyA9IGd6ZXJy b3IoZ3pmcCwgJmVycm51bSk7CisJaWYgKGVycm51bSA9PSBaX0VSUk5PKQorCQllcnJtc2cg PSBzdHJlcnJvcihlcnJubyk7CisKKwlyZXR1cm4gZXJybXNnOworfQorCitzdGF0aWMgaW50 CitHemlwX29wZW4oY29uc3QgY2hhciAqcGF0aCwgaW50IGZkLCBjb25zdCBjaGFyICptb2Rl LCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlnekZpbGUJCWd6ZnA7CisJY2hhcgkJ bW9kZV9jb21wcmVzc2lvblszMl07CisKKwlpZiAoQ0ZILT5jb21wcmVzc2lvbl9zcGVjLmxl dmVsICE9IFpfREVGQVVMVF9DT01QUkVTU0lPTikKKwl7CisJCS8qCisJCSAqIHVzZXIgaGFz IHNwZWNpZmllZCBhIGNvbXByZXNzaW9uIGxldmVsLCBzbyB0ZWxsIHpsaWIgdG8gdXNlIGl0 CisJCSAqLworCQlzbnByaW50Zihtb2RlX2NvbXByZXNzaW9uLCBzaXplb2YobW9kZV9jb21w cmVzc2lvbiksICIlcyVkIiwKKwkJCQkgbW9kZSwgQ0ZILT5jb21wcmVzc2lvbl9zcGVjLmxl dmVsKTsKKwl9CisJZWxzZQorCQlzdHJjcHkobW9kZV9jb21wcmVzc2lvbiwgbW9kZSk7CisK KwlpZiAoZmQgPj0gMCkKKwkJZ3pmcCA9IGd6ZG9wZW4oZHVwKGZkKSwgbW9kZV9jb21wcmVz c2lvbik7CisJZWxzZQorCQlnemZwID0gZ3pvcGVuKHBhdGgsIG1vZGVfY29tcHJlc3Npb24p OworCisJaWYgKGd6ZnAgPT0gTlVMTCkKKwkJcmV0dXJuIDE7CisKKwlDRkgtPnByaXZhdGVf ZGF0YSA9IGd6ZnA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorR3ppcF9vcGVu X3dyaXRlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsIENvbXByZXNzRmls ZUhhbmRsZSAqQ0ZIKQoreworCWNoYXIJICAgKmZuYW1lOworCWludAkJCXJldDsKKwlpbnQJ CQlzYXZlX2Vycm5vOworCisJZm5hbWUgPSBwc3ByaW50ZigiJXMuZ3oiLCBwYXRoKTsKKwly ZXQgPSBDRkgtPm9wZW5fZnVuYyhmbmFtZSwgLTEsIG1vZGUsIENGSCk7CisKKwlzYXZlX2Vy cm5vID0gZXJybm87CisJcGdfZnJlZShmbmFtZSk7CisJZXJybm8gPSBzYXZlX2Vycm5vOwor CisJcmV0dXJuIHJldDsKK30KKwordm9pZAorSW5pdENvbXByZXNzRmlsZUhhbmRsZUd6aXAo Q29tcHJlc3NGaWxlSGFuZGxlICpDRkgsCisJCQkJCQkgICBjb25zdCBwZ19jb21wcmVzc19z cGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7CisJQ0ZILT5vcGVuX2Z1bmMgPSBH emlwX29wZW47CisJQ0ZILT5vcGVuX3dyaXRlX2Z1bmMgPSBHemlwX29wZW5fd3JpdGU7CisJ Q0ZILT5yZWFkX2Z1bmMgPSBHemlwX3JlYWQ7CisJQ0ZILT53cml0ZV9mdW5jID0gR3ppcF93 cml0ZTsKKwlDRkgtPmdldHNfZnVuYyA9IEd6aXBfZ2V0czsKKwlDRkgtPmdldGNfZnVuYyA9 IEd6aXBfZ2V0YzsKKwlDRkgtPmNsb3NlX2Z1bmMgPSBHemlwX2Nsb3NlOworCUNGSC0+ZW9m X2Z1bmMgPSBHemlwX2VvZjsKKwlDRkgtPmdldF9lcnJvcl9mdW5jID0gR3ppcF9nZXRfZXJy b3I7CisKKwlDRkgtPmNvbXByZXNzaW9uX3NwZWMgPSBjb21wcmVzc2lvbl9zcGVjOworCisJ Q0ZILT5wcml2YXRlX2RhdGEgPSBOVUxMOworfQorI2Vsc2UJCQkJCQkJLyogSEFWRV9MSUJa ICovCit2b2lkCitJbml0Q29tcHJlc3Nvckd6aXAoQ29tcHJlc3NvclN0YXRlICpjcywKKwkJ CQkgICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMp Cit7CisJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lv biB3aXRoICVzIiwgImd6aXAiKTsKK30KKwordm9pZAorSW5pdENvbXByZXNzRmlsZUhhbmRs ZUd6aXAoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgsCisJCQkJCQkgICBjb25zdCBwZ19jb21w cmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7CisJcGdfZmF0YWwoInRo aXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwgImd6aXAi KTsKK30KKyNlbmRpZgkJCQkJCQkvKiBIQVZFX0xJQlogKi8KZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmggYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nf Z3ppcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yMzkyYzY5 N2I0YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19nemlw LmgKQEAgLTAsMCArMSwyNCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogY29t cHJlc3NfZ3ppcC5oCisgKgkgR1pJUCBpbnRlcmZhY2UgdG8gY29tcHJlc3NfaW8uYyByb3V0 aW5lcworICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIzLCBQb3N0Z3Jl U1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChj KSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisg KiBJREVOVElGSUNBVElPTgorICoJICAgc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAu aAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIF9DT01QUkVTU19H WklQX0hfCisjZGVmaW5lIF9DT01QUkVTU19HWklQX0hfCisKKyNpbmNsdWRlICJjb21wcmVz c19pby5oIgorCitleHRlcm4gdm9pZCBJbml0Q29tcHJlc3Nvckd6aXAoQ29tcHJlc3NvclN0 YXRlICpjcywKKwkJCQkJCQkgICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNv bXByZXNzaW9uX3NwZWMpOworZXh0ZXJuIHZvaWQgSW5pdENvbXByZXNzRmlsZUhhbmRsZUd6 aXAoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgsCisJCQkJCQkJCQkgICBjb25zdCBwZ19jb21w cmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOworCisjZW5kaWYJCQkJCQkJ LyogX0NPTVBSRVNTX0daSVBfSF8gKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9j b21wcmVzc19pby5jIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMKaW5kZXggZTE3 MzNjZTU3Y2YuLmM1MDdlZWI3YjNkIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvY29t cHJlc3NfaW8uYworKysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYwpAQCAtOSw0 MiArOSw1NCBAQAogICoKICAqIFRoaXMgZmlsZSBpbmNsdWRlcyB0d28gQVBJcyBmb3IgZGVh bGluZyB3aXRoIGNvbXByZXNzZWQgZGF0YS4gVGhlIGZpcnN0CiAgKiBwcm92aWRlcyBtb3Jl IGZsZXhpYmlsaXR5LCB1c2luZyBjYWxsYmFja3MgdG8gcmVhZC93cml0ZSBkYXRhIGZyb20g dGhlCi0gKiB1bmRlcmx5aW5nIHN0cmVhbS4gVGhlIHNlY29uZCBBUEkgaXMgYSB3cmFwcGVy IGFyb3VuZCBmb3Blbi9nem9wZW4gYW5kCisgKiB1bmRlcmx5aW5nIHN0cmVhbS4gVGhlIHNl Y29uZCBBUEkgaXMgYSB3cmFwcGVyIGFyb3VuZCBmb3BlbiBhbmQKICAqIGZyaWVuZHMsIHBy b3ZpZGluZyBhbiBpbnRlcmZhY2Ugc2ltaWxhciB0byB0aG9zZSwgYnV0IGFic3RyYWN0cyBh d2F5Ci0gKiB0aGUgcG9zc2libGUgY29tcHJlc3Npb24uIEJvdGggQVBJcyB1c2UgbGlieiBm b3IgdGhlIGNvbXByZXNzaW9uLCBidXQKLSAqIHRoZSBzZWNvbmQgQVBJIHVzZXMgZ3ppcCBo ZWFkZXJzLCBzbyB0aGUgcmVzdWx0aW5nIGZpbGVzIGNhbiBiZSBlYXNpbHkKLSAqIG1hbmlw dWxhdGVkIHdpdGggdGhlIGd6aXAgdXRpbGl0eS4KKyAqIHRoZSBwb3NzaWJsZSBjb21wcmVz c2lvbi4gVGhlIHNlY29uZCBBUEkgaXMgYWltZWQgZm9yIHRoZSByZXN1bHRpbmcKKyAqIGZp bGVzIHRvIGJlIGVhc2lseSBtYW5pcHVsYXRlZCB3aXRoIGFuIGV4dGVybmFsIGNvbXByZXNz aW9uIHV0aWxpdHkKKyAqIHByb2dyYW0uCisgKgorICogVGhpcyBmaWxlIGFsc28gaW5jbHVk ZXMgdGhlIGltcGxlbWVudGF0aW9uIHdoZW4gY29tcHJlc3Npb24gaXMgbm9uZSBmb3IKKyAq IGJvdGggQVBJJ3MuCiAgKgogICogQ29tcHJlc3NvciBBUEkKICAqIC0tLS0tLS0tLS0tLS0t CiAgKgogICoJVGhlIGludGVyZmFjZSBmb3Igd3JpdGluZyB0byBhbiBhcmNoaXZlIGNvbnNp c3RzIG9mIHRocmVlIGZ1bmN0aW9uczoKLSAqCUFsbG9jYXRlQ29tcHJlc3NvciwgV3JpdGVE YXRhVG9BcmNoaXZlIGFuZCBFbmRDb21wcmVzc29yLiBGaXJzdCB5b3UgY2FsbAotICoJQWxs b2NhdGVDb21wcmVzc29yLCB0aGVuIHdyaXRlIGFsbCB0aGUgZGF0YSBieSBjYWxsaW5nIFdy aXRlRGF0YVRvQXJjaGl2ZQotICoJYXMgbWFueSB0aW1lcyBhcyBuZWVkZWQsIGFuZCBmaW5h bGx5IEVuZENvbXByZXNzb3IuIFdyaXRlRGF0YVRvQXJjaGl2ZQotICoJYW5kIEVuZENvbXBy ZXNzb3Igd2lsbCBjYWxsIHRoZSBXcml0ZUZ1bmMgdGhhdCB3YXMgcHJvdmlkZWQgdG8KLSAq CUFsbG9jYXRlQ29tcHJlc3NvciBmb3IgZWFjaCBjaHVuayBvZiBjb21wcmVzc2VkIGRhdGEu Ci0gKgotICoJVGhlIGludGVyZmFjZSBmb3IgcmVhZGluZyBhbiBhcmNoaXZlIGNvbnNpc3Rz IG9mIGp1c3Qgb25lIGZ1bmN0aW9uOgotICoJUmVhZERhdGFGcm9tQXJjaGl2ZS4gUmVhZERh dGFGcm9tQXJjaGl2ZSByZWFkcyB0aGUgd2hvbGUgY29tcHJlc3NlZCBpbnB1dAotICoJc3Ry ZWFtLCBieSByZXBlYXRlZGx5IGNhbGxpbmcgdGhlIGdpdmVuIFJlYWRGdW5jLiBSZWFkRnVu YyByZXR1cm5zIHRoZQotICoJY29tcHJlc3NlZCBkYXRhIGNodW5rIGF0IGEgdGltZSwgYW5k IFJlYWREYXRhRnJvbUFyY2hpdmUgZGVjb21wcmVzc2VzIGl0Ci0gKglhbmQgcGFzc2VzIHRo ZSBkZWNvbXByZXNzZWQgZGF0YSB0byBhaHdyaXRlKCksIHVudGlsIFJlYWRGdW5jIHJldHVy bnMgMAotICoJdG8gc2lnbmFsIEVPRi4KKyAqCUFsbG9jYXRlQ29tcHJlc3Nvciwgd3JpdGVE YXRhLCBhbmQgRW5kQ29tcHJlc3Nvci4gRmlyc3QgeW91IGNhbGwKKyAqCUFsbG9jYXRlQ29t cHJlc3NvciwgdGhlbiB3cml0ZSBhbGwgdGhlIGRhdGEgYnkgY2FsbGluZyB3cml0ZURhdGEg YXMgbWFueQorICoJdGltZXMgYXMgbmVlZGVkLCBhbmQgZmluYWxseSBFbmRDb21wcmVzc29y LiB3cml0ZURhdGEgd2lsbCBjYWxsIHRoZQorICoJV3JpdGVGdW5jIHRoYXQgd2FzIHByb3Zp ZGVkIHRvIEFsbG9jYXRlQ29tcHJlc3NvciBmb3IgZWFjaCBjaHVuayBvZgorICoJY29tcHJl c3NlZCBkYXRhLgogICoKLSAqCVRoZSBpbnRlcmZhY2UgaXMgdGhlIHNhbWUgZm9yIGNvbXBy ZXNzZWQgYW5kIHVuY29tcHJlc3NlZCBzdHJlYW1zLgorICoJVGhlIGludGVyZmFjZSBmb3Ig cmVhZGluZyBhbiBhcmNoaXZlIGNvbnNpc3RzIG9mIHRoZSBzYW1lIHRocmVlIGZ1bmN0aW9u czoKKyAqCUFsbG9jYXRlQ29tcHJlc3NvciwgcmVhZERhdGEsIGFuZCBFbmRDb21wcmVzc29y LiBGaXJzdCB5b3UgY2FsbAorICoJQWxsb2NhdGVDb21wcmVzc29yLCB0aGVuIHJlYWQgYWxs IHRoZSBkYXRhIGJ5IGNhbGxpbmcgcmVhZERhdGEgdG8gcmVhZCB0aGUKKyAqCXdob2xlIGNv bXByZXNzZWQgc3RyZWFtIHdoaWNoIHJlcGVhdGVkbHkgY2FsbHMgdGhlIGdpdmVuIFJlYWRG dW5jLiBSZWFkRnVuYworICoJcmV0dXJucyB0aGUgY29tcHJlc3NlZCBkYXRhIG9uZSBjaHVu ayBhdCBhIHRpbWUuIFRoZW4gcmVhZERhdGEgZGVjb21wcmVzc2VzCisgKglpdCBhbmQgcGFz c2VzIHRoZSBkZWNvbXByZXNzZWQgZGF0YSB0byBhaHdyaXRlKCksIHVudGlsIFJlYWRGdW5j IHJldHVybnMgMAorICoJdG8gc2lnbmFsIEVPRi4gVGhlIGludGVyZmFjZSBpcyB0aGUgc2Ft ZSBmb3IgY29tcHJlc3NlZCBhbmQgdW5jb21wcmVzc2VkCisgKglzdHJlYW1zLgogICoKICAq IENvbXByZXNzZWQgc3RyZWFtIEFQSQogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoK LSAqCVRoZSBjb21wcmVzc2VkIHN0cmVhbSBBUEkgaXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUg QyBzdGFuZGFyZCBmb3BlbigpIGFuZAotICoJbGlieidzIGd6b3BlbigpIEFQSXMuIEl0IGFs bG93cyB5b3UgdG8gdXNlIHRoZSBzYW1lIGZ1bmN0aW9ucyBmb3IKLSAqCWNvbXByZXNzZWQg YW5kIHVuY29tcHJlc3NlZCBzdHJlYW1zLiBjZm9wZW5fcmVhZCgpIGZpcnN0IHRyaWVzIHRv IG9wZW4KLSAqCXRoZSBmaWxlIHdpdGggZ2l2ZW4gbmFtZSwgYW5kIGlmIGl0IGZhaWxzLCBp dCB0cmllcyB0byBvcGVuIHRoZSBzYW1lCi0gKglmaWxlIHdpdGggdGhlIC5neiBzdWZmaXgu IGNmb3Blbl93cml0ZSgpIG9wZW5zIGEgZmlsZSBmb3Igd3JpdGluZywgYW4KLSAqCWV4dHJh IGFyZ3VtZW50IHNwZWNpZmllcyBpZiB0aGUgZmlsZSBzaG91bGQgYmUgY29tcHJlc3NlZCwg YW5kIGFkZHMgdGhlCi0gKgkuZ3ogc3VmZml4IHRvIHRoZSBmaWxlbmFtZSBpZiBzby4gVGhp cyBhbGxvd3MgeW91IHRvIGVhc2lseSBoYW5kbGUgYm90aAotICoJY29tcHJlc3NlZCBhbmQg dW5jb21wcmVzc2VkIGZpbGVzLgorICoJVGhlIGNvbXByZXNzZWQgc3RyZWFtIEFQSSBpcyBw cm92aWRpbmcgYSBzZXQgb2YgZnVuY3Rpb24gcG9pbnRlcnMgZm9yCisgKglvcGVuaW5nLCBy ZWFkaW5nLCB3cml0aW5nLCBhbmQgZmluYWxseSBjbG9zaW5nIGZpbGVzLiBUaGUgaW1wbGVt ZW50ZWQKKyAqCWZ1bmN0aW9uIHBvaW50ZXJzIGFyZSBkb2N1bWVudGVkIGluIHRoZSBjb3Jy ZXNwb25kaW5nIGhlYWRlciBmaWxlIGFuZCBhcmUKKyAqCWNvbW1vbiBmb3IgYWxsIHN0cmVh bXMuIEl0IGFsbG93cyB0aGUgY2FsbGVyIHRvIHVzZSB0aGUgc2FtZSBmdW5jdGlvbnMgZm9y CisgKglib3RoIGNvbXByZXNzZWQgYW5kIHVuY29tcHJlc3NlZCBzdHJlYW1zLgorICoKKyAq CVRoZSBpbnRlcmZhY2UgY29uc2lzdHMgb2YgdGhyZWUgZnVuY3Rpb25zLCBJbml0Q29tcHJl c3NGaWxlSGFuZGxlLAorICoJSW5pdERpc2NvdmVyQ29tcHJlc3NGaWxlSGFuZGxlLCBhbmQg RW5kQ29tcHJlc3NGaWxlSGFuZGxlLiBJZiB0aGUKKyAqCWNvbXByZXNzaW9uIGlzIGtub3du LCB0aGVuIHN0YXJ0IGJ5IGNhbGxpbmcgSW5pdENvbXByZXNzRmlsZUhhbmRsZSwKKyAqCW90 aGVyd2lzZSBkaXNjb3ZlciBpdCBieSB1c2luZyBJbml0RGlzY292ZXJDb21wcmVzc0ZpbGVI YW5kbGUuIFRoZW4gY2FsbAorICoJdGhlIGZ1bmN0aW9uIHBvaW50ZXJzIGFzIHJlcXVpcmVk IGZvciB0aGUgcmVhZC93cml0ZSBvcGVyYXRpb25zLiBGaW5hbGx5CisgKgljYWxsIEVuZENv bXByZXNzRmlsZUhhbmRsZSB0byBlbmQgdGhlIHN0cmVhbS4KKyAqCisgKglJbml0RGlzY292 ZXJDb21wcmVzc0ZpbGVIYW5kbGUgdHJpZXMgdG8gZGVmZmVyIHRoZSBjb21wcmVzc2lvbiBi eSB0aGUKKyAqCWZpbGVuYW1lIHN1ZmZpeC4gSWYgdGhlIHN1ZmZpeCBpcyBub3QgeWV0IGtu b3duLCB0aGVuIGl0IHRyaWVzIHRvIHNpbXBseQorICoJb3BlbiB0aGUgZmlsZSwgYW5kIGlm IGl0IGZhaWxzLCBpdCB0cmllcyB0byBvcGVuIHRoZSBzYW1lIGZpbGUgd2l0aCB0aGUgLmd6 CisgKglzdWZmaXguCiAgKgogICogSURFTlRJRklDQVRJT04KICAqCSAgIHNyYy9iaW4vcGdf ZHVtcC9jb21wcmVzc19pby5jCkBAIC01MywxMyArNjUsMTQgQEAKICAqLwogI2luY2x1ZGUg InBvc3RncmVzX2ZlLmgiCiAKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHVu aXN0ZC5oPgorCisjaW5jbHVkZSAiY29tcHJlc3NfZ3ppcC5oIgogI2luY2x1ZGUgImNvbXBy ZXNzX2lvLmgiCisjaW5jbHVkZSAiY29tcHJlc3Nfbm9uZS5oIgogI2luY2x1ZGUgInBnX2Jh Y2t1cF91dGlscy5oIgogCi0jaWZkZWYgSEFWRV9MSUJaCi0jaW5jbHVkZSA8emxpYi5oPgot I2VuZGlmCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogR2VuZXJpYyBmdW5jdGlv bnMKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtOTEsMTEwICsxMDQsMjUgQEAgc3Vw cG9ydHNfY29tcHJlc3Npb24oY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21w cmVzc2lvbl9zcGVjKQogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIAotLyogdHlw ZWRlZiBhcHBlYXJzIGluIGNvbXByZXNzX2lvLmggKi8KLXN0cnVjdCBDb21wcmVzc29yU3Rh dGUKLXsKLQlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWM7Ci0J V3JpdGVGdW5jCXdyaXRlRjsKLQotI2lmZGVmIEhBVkVfTElCWgotCXpfc3RyZWFtcAl6cDsK LQljaGFyCSAgICp6bGliT3V0OwotCXNpemVfdAkJemxpYk91dFNpemU7Ci0jZW5kaWYKLX07 Ci0KLS8qIFJvdXRpbmVzIHRoYXQgc3VwcG9ydCB6bGliIGNvbXByZXNzZWQgZGF0YSBJL08g Ki8KLSNpZmRlZiBIQVZFX0xJQloKLXN0YXRpYyB2b2lkIEluaXRDb21wcmVzc29yWmxpYihD b21wcmVzc29yU3RhdGUgKmNzLCBpbnQgbGV2ZWwpOwotc3RhdGljIHZvaWQgRGVmbGF0ZUNv bXByZXNzb3JabGliKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAot CQkJCQkJCQkgIGJvb2wgZmx1c2gpOwotc3RhdGljIHZvaWQgUmVhZERhdGFGcm9tQXJjaGl2 ZVpsaWIoQXJjaGl2ZUhhbmRsZSAqQUgsIFJlYWRGdW5jIHJlYWRGKTsKLXN0YXRpYyB2b2lk IFdyaXRlRGF0YVRvQXJjaGl2ZVpsaWIoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JT dGF0ZSAqY3MsCi0JCQkJCQkJCSAgIGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBkTGVuKTsK LXN0YXRpYyB2b2lkIEVuZENvbXByZXNzb3JabGliKEFyY2hpdmVIYW5kbGUgKkFILCBDb21w cmVzc29yU3RhdGUgKmNzKTsKLSNlbmRpZgotCi0vKiBSb3V0aW5lcyB0aGF0IHN1cHBvcnQg dW5jb21wcmVzc2VkIGRhdGEgSS9PICovCi1zdGF0aWMgdm9pZCBSZWFkRGF0YUZyb21BcmNo aXZlTm9uZShBcmNoaXZlSGFuZGxlICpBSCwgUmVhZEZ1bmMgcmVhZEYpOwotc3RhdGljIHZv aWQgV3JpdGVEYXRhVG9BcmNoaXZlTm9uZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3Nv clN0YXRlICpjcywKLQkJCQkJCQkJICAgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGRMZW4p OwotCi0vKiBQdWJsaWMgaW50ZXJmYWNlIHJvdXRpbmVzICovCi0KLS8qIEFsbG9jYXRlIGEg bmV3IGNvbXByZXNzb3IgKi8KKy8qCisgKiBBbGxvY2F0ZSBhIG5ldyBjb21wcmVzc29yLgor ICovCiBDb21wcmVzc29yU3RhdGUgKgogQWxsb2NhdGVDb21wcmVzc29yKGNvbnN0IHBnX2Nv bXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYywKLQkJCQkgICBXcml0ZUZ1 bmMgd3JpdGVGKQorCQkJCSAgIFJlYWRGdW5jIHJlYWRGLCBXcml0ZUZ1bmMgd3JpdGVGKQog ewogCUNvbXByZXNzb3JTdGF0ZSAqY3M7CiAKLSNpZm5kZWYgSEFWRV9MSUJaCi0JaWYgKGNv bXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCi0JCXBn X2ZhdGFsKCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAl cyIsICJnemlwIik7Ci0jZW5kaWYKLQogCWNzID0gKENvbXByZXNzb3JTdGF0ZSAqKSBwZ19t YWxsb2MwKHNpemVvZihDb21wcmVzc29yU3RhdGUpKTsKKwljcy0+cmVhZEYgPSByZWFkRjsK IAljcy0+d3JpdGVGID0gd3JpdGVGOwotCWNzLT5jb21wcmVzc2lvbl9zcGVjID0gY29tcHJl c3Npb25fc3BlYzsKLQotCS8qCi0JICogUGVyZm9ybSBjb21wcmVzc2lvbiBhbGdvcml0aG0g c3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uCi0JICovCi0jaWZkZWYgSEFWRV9MSUJaCi0JaWYg KGNzLT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQ KQotCQlJbml0Q29tcHJlc3NvclpsaWIoY3MsIGNzLT5jb21wcmVzc2lvbl9zcGVjLmxldmVs KTsKLSNlbmRpZgotCi0JcmV0dXJuIGNzOwotfQogCi0vKgotICogUmVhZCBhbGwgY29tcHJl c3NlZCBkYXRhIGZyb20gdGhlIGlucHV0IHN0cmVhbSAodmlhIHJlYWRGKSBhbmQgcHJpbnQg aXQKLSAqIG91dCB3aXRoIGFod3JpdGUoKS4KLSAqLwotdm9pZAotUmVhZERhdGFGcm9tQXJj aGl2ZShBcmNoaXZlSGFuZGxlICpBSCwKLQkJCQkJY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lm aWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjLAotCQkJCQlSZWFkRnVuYyByZWFkRikKLXsKIAlp ZiAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fTk9ORSkK LQkJUmVhZERhdGFGcm9tQXJjaGl2ZU5vbmUoQUgsIHJlYWRGKTsKLQlpZiAoY29tcHJlc3Np b25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKLQl7Ci0jaWZkZWYg SEFWRV9MSUJaCi0JCVJlYWREYXRhRnJvbUFyY2hpdmVabGliKEFILCByZWFkRik7Ci0jZWxz ZQotCQlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9u IHdpdGggJXMiLCAiZ3ppcCIpOwotI2VuZGlmCi0JfQotfQorCQlJbml0Q29tcHJlc3Nvck5v bmUoY3MsIGNvbXByZXNzaW9uX3NwZWMpOworCWVsc2UgaWYgKGNvbXByZXNzaW9uX3NwZWMu YWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCisJCUluaXRDb21wcmVzc29yR3pp cChjcywgY29tcHJlc3Npb25fc3BlYyk7CiAKLS8qCi0gKiBDb21wcmVzcyBhbmQgd3JpdGUg ZGF0YSB0byB0aGUgb3V0cHV0IHN0cmVhbSAodmlhIHdyaXRlRikuCi0gKi8KLXZvaWQKLVdy aXRlRGF0YVRvQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpj cywKLQkJCQkgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExlbikKLXsKLQlzd2l0Y2gg KGNzLT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSkKLQl7Ci0JCWNhc2UgUEdfQ09NUFJF U1NJT05fR1pJUDoKLSNpZmRlZiBIQVZFX0xJQloKLQkJCVdyaXRlRGF0YVRvQXJjaGl2ZVps aWIoQUgsIGNzLCBkYXRhLCBkTGVuKTsKLSNlbHNlCi0JCQlwZ19mYXRhbCgidGhpcyBidWls ZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLCAiZ3ppcCIpOwotI2Vu ZGlmCi0JCQlicmVhazsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgotCQkJV3JpdGVE YXRhVG9BcmNoaXZlTm9uZShBSCwgY3MsIGRhdGEsIGRMZW4pOwotCQkJYnJlYWs7Ci0JCWNh c2UgUEdfQ09NUFJFU1NJT05fTFo0OgotCQkJLyogZmFsbHRocm91Z2ggKi8KLQkJY2FzZSBQ R19DT01QUkVTU0lPTl9aU1REOgotCQkJcGdfZmF0YWwoImludmFsaWQgY29tcHJlc3Npb24g bWV0aG9kIik7Ci0JCQlicmVhazsKLQl9CisJcmV0dXJuIGNzOwogfQogCiAvKgpAQCAtMjAz LDIzMyArMTMxLDMxIEBAIFdyaXRlRGF0YVRvQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCwg Q29tcHJlc3NvclN0YXRlICpjcywKIHZvaWQKIEVuZENvbXByZXNzb3IoQXJjaGl2ZUhhbmRs ZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpCiB7Ci0jaWZkZWYgSEFWRV9MSUJaCi0JaWYg KGNzLT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQ KQotCQlFbmRDb21wcmVzc29yWmxpYihBSCwgY3MpOwotI2VuZGlmCi0JZnJlZShjcyk7CisJ Y3MtPmVuZChBSCwgY3MpOworCXBnX2ZyZWUoY3MpOwogfQogCi0vKiBQcml2YXRlIHJvdXRp bmVzLCBzcGVjaWZpYyB0byBlYWNoIGNvbXByZXNzaW9uIG1ldGhvZC4gKi8KLQotI2lmZGVm IEhBVkVfTElCWgotLyoKLSAqIEZ1bmN0aW9ucyBmb3IgemxpYiBjb21wcmVzc2VkIG91dHB1 dC4KLSAqLwotCi1zdGF0aWMgdm9pZAotSW5pdENvbXByZXNzb3JabGliKENvbXByZXNzb3JT dGF0ZSAqY3MsIGludCBsZXZlbCkKLXsKLQl6X3N0cmVhbXAJenA7Ci0KLQl6cCA9IGNzLT56 cCA9ICh6X3N0cmVhbXApIHBnX21hbGxvYyhzaXplb2Yoel9zdHJlYW0pKTsKLQl6cC0+emFs bG9jID0gWl9OVUxMOwotCXpwLT56ZnJlZSA9IFpfTlVMTDsKLQl6cC0+b3BhcXVlID0gWl9O VUxMOwotCi0JLyoKLQkgKiB6bGliT3V0U2l6ZSBpcyB0aGUgYnVmZmVyIHNpemUgd2UgdGVs bCB6bGliIGl0IGNhbiBvdXRwdXQgdG8uICBXZQotCSAqIGFjdHVhbGx5IGFsbG9jYXRlIG9u ZSBleHRyYSBieXRlIGJlY2F1c2Ugc29tZSByb3V0aW5lcyB3YW50IHRvIGFwcGVuZCBhCi0J ICogdHJhaWxpbmcgemVybyBieXRlIHRvIHRoZSB6bGliIG91dHB1dC4KLQkgKi8KLQljcy0+ emxpYk91dCA9IChjaGFyICopIHBnX21hbGxvYyhaTElCX09VVF9TSVpFICsgMSk7Ci0JY3Mt PnpsaWJPdXRTaXplID0gWkxJQl9PVVRfU0laRTsKLQotCWlmIChkZWZsYXRlSW5pdCh6cCwg bGV2ZWwpICE9IFpfT0spCi0JCXBnX2ZhdGFsKCJjb3VsZCBub3QgaW5pdGlhbGl6ZSBjb21w cmVzc2lvbiBsaWJyYXJ5OiAlcyIsCi0JCQkJIHpwLT5tc2cpOwotCi0JLyogSnVzdCBiZSBw YXJhbm9pZCAtIG1heWJlIEVuZCBpcyBjYWxsZWQgYWZ0ZXIgU3RhcnQsIHdpdGggbm8gV3Jp dGUgKi8KLQl6cC0+bmV4dF9vdXQgPSAodm9pZCAqKSBjcy0+emxpYk91dDsKLQl6cC0+YXZh aWxfb3V0ID0gY3MtPnpsaWJPdXRTaXplOwotfQotCi1zdGF0aWMgdm9pZAotRW5kQ29tcHJl c3NvclpsaWIoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpCi17Ci0J el9zdHJlYW1wCXpwID0gY3MtPnpwOwotCi0JenAtPm5leHRfaW4gPSBOVUxMOwotCXpwLT5h dmFpbF9pbiA9IDA7Ci0KLQkvKiBGbHVzaCBhbnkgcmVtYWluaW5nIGRhdGEgZnJvbSB6bGli IGJ1ZmZlciAqLwotCURlZmxhdGVDb21wcmVzc29yWmxpYihBSCwgY3MsIHRydWUpOwotCi0J aWYgKGRlZmxhdGVFbmQoenApICE9IFpfT0spCi0JCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xv c2UgY29tcHJlc3Npb24gc3RyZWFtOiAlcyIsIHpwLT5tc2cpOwotCi0JZnJlZShjcy0+emxp Yk91dCk7Ci0JZnJlZShjcy0+enApOwotfQotCi1zdGF0aWMgdm9pZAotRGVmbGF0ZUNvbXBy ZXNzb3JabGliKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLCBib29s IGZsdXNoKQotewotCXpfc3RyZWFtcAl6cCA9IGNzLT56cDsKLQljaGFyCSAgICpvdXQgPSBj cy0+emxpYk91dDsKLQlpbnQJCQlyZXMgPSBaX09LOwotCi0Jd2hpbGUgKGNzLT56cC0+YXZh aWxfaW4gIT0gMCB8fCBmbHVzaCkKLQl7Ci0JCXJlcyA9IGRlZmxhdGUoenAsIGZsdXNoID8g Wl9GSU5JU0ggOiBaX05PX0ZMVVNIKTsKLQkJaWYgKHJlcyA9PSBaX1NUUkVBTV9FUlJPUikK LQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY29tcHJlc3MgZGF0YTogJXMiLCB6cC0+bXNnKTsK LQkJaWYgKChmbHVzaCAmJiAoenAtPmF2YWlsX291dCA8IGNzLT56bGliT3V0U2l6ZSkpCi0J CQl8fCAoenAtPmF2YWlsX291dCA9PSAwKQotCQkJfHwgKHpwLT5hdmFpbF9pbiAhPSAwKQot CQkJKQotCQl7Ci0JCQkvKgotCQkJICogRXh0cmEgcGFyYW5vaWE6IGF2b2lkIHplcm8tbGVu Z3RoIGNodW5rcywgc2luY2UgYSB6ZXJvIGxlbmd0aAotCQkJICogY2h1bmsgaXMgdGhlIEVP RiBtYXJrZXIgaW4gdGhlIGN1c3RvbSBmb3JtYXQuIFRoaXMgc2hvdWxkIG5ldmVyCi0JCQkg KiBoYXBwZW4gYnV0Li4uCi0JCQkgKi8KLQkJCWlmICh6cC0+YXZhaWxfb3V0IDwgY3MtPnps aWJPdXRTaXplKQotCQkJewotCQkJCS8qCi0JCQkJICogQW55IHdyaXRlIGZ1bmN0aW9uIHNo b3VsZCBkbyBpdHMgb3duIGVycm9yIGNoZWNraW5nIGJ1dCB0bwotCQkJCSAqIG1ha2Ugc3Vy ZSB3ZSBkbyBhIGNoZWNrIGhlcmUgYXMgd2VsbC4uLgotCQkJCSAqLwotCQkJCXNpemVfdAkJ bGVuID0gY3MtPnpsaWJPdXRTaXplIC0genAtPmF2YWlsX291dDsKLQotCQkJCWNzLT53cml0 ZUYoQUgsIG91dCwgbGVuKTsKLQkJCX0KLQkJCXpwLT5uZXh0X291dCA9ICh2b2lkICopIG91 dDsKLQkJCXpwLT5hdmFpbF9vdXQgPSBjcy0+emxpYk91dFNpemU7Ci0JCX0KLQotCQlpZiAo cmVzID09IFpfU1RSRUFNX0VORCkKLQkJCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHZvaWQK LVdyaXRlRGF0YVRvQXJjaGl2ZVpsaWIoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JT dGF0ZSAqY3MsCi0JCQkJCSAgIGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBkTGVuKQotewot CWNzLT56cC0+bmV4dF9pbiA9ICh2b2lkICopIHVuY29uc3RpZnkoY2hhciAqLCBkYXRhKTsK LQljcy0+enAtPmF2YWlsX2luID0gZExlbjsKLQlEZWZsYXRlQ29tcHJlc3NvclpsaWIoQUgs IGNzLCBmYWxzZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1SZWFkRGF0YUZyb21BcmNoaXZlWmxp YihBcmNoaXZlSGFuZGxlICpBSCwgUmVhZEZ1bmMgcmVhZEYpCi17Ci0Jel9zdHJlYW1wCXpw OwotCWNoYXIJICAgKm91dDsKLQlpbnQJCQlyZXMgPSBaX09LOwotCXNpemVfdAkJY250Owot CWNoYXIJICAgKmJ1ZjsKLQlzaXplX3QJCWJ1ZmxlbjsKLQotCXpwID0gKHpfc3RyZWFtcCkg cGdfbWFsbG9jKHNpemVvZih6X3N0cmVhbSkpOwotCXpwLT56YWxsb2MgPSBaX05VTEw7Ci0J enAtPnpmcmVlID0gWl9OVUxMOwotCXpwLT5vcGFxdWUgPSBaX05VTEw7Ci0KLQlidWYgPSBw Z19tYWxsb2MoWkxJQl9JTl9TSVpFKTsKLQlidWZsZW4gPSBaTElCX0lOX1NJWkU7Ci0KLQlv dXQgPSBwZ19tYWxsb2MoWkxJQl9PVVRfU0laRSArIDEpOwotCi0JaWYgKGluZmxhdGVJbml0 KHpwKSAhPSBaX09LKQotCQlwZ19mYXRhbCgiY291bGQgbm90IGluaXRpYWxpemUgY29tcHJl c3Npb24gbGlicmFyeTogJXMiLAotCQkJCSB6cC0+bXNnKTsKLQotCS8qIG5vIG1pbmltYWwg Y2h1bmsgc2l6ZSBmb3IgemxpYiAqLwotCXdoaWxlICgoY250ID0gcmVhZEYoQUgsICZidWYs ICZidWZsZW4pKSkKLQl7Ci0JCXpwLT5uZXh0X2luID0gKHZvaWQgKikgYnVmOwotCQl6cC0+ YXZhaWxfaW4gPSBjbnQ7Ci0KLQkJd2hpbGUgKHpwLT5hdmFpbF9pbiA+IDApCi0JCXsKLQkJ CXpwLT5uZXh0X291dCA9ICh2b2lkICopIG91dDsKLQkJCXpwLT5hdmFpbF9vdXQgPSBaTElC X09VVF9TSVpFOwotCi0JCQlyZXMgPSBpbmZsYXRlKHpwLCAwKTsKLQkJCWlmIChyZXMgIT0g Wl9PSyAmJiByZXMgIT0gWl9TVFJFQU1fRU5EKQotCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qg dW5jb21wcmVzcyBkYXRhOiAlcyIsIHpwLT5tc2cpOwotCi0JCQlvdXRbWkxJQl9PVVRfU0la RSAtIHpwLT5hdmFpbF9vdXRdID0gJ1wwJzsKLQkJCWFod3JpdGUob3V0LCAxLCBaTElCX09V VF9TSVpFIC0genAtPmF2YWlsX291dCwgQUgpOwotCQl9Ci0JfQotCi0JenAtPm5leHRfaW4g PSBOVUxMOwotCXpwLT5hdmFpbF9pbiA9IDA7Ci0Jd2hpbGUgKHJlcyAhPSBaX1NUUkVBTV9F TkQpCi0JewotCQl6cC0+bmV4dF9vdXQgPSAodm9pZCAqKSBvdXQ7Ci0JCXpwLT5hdmFpbF9v dXQgPSBaTElCX09VVF9TSVpFOwotCQlyZXMgPSBpbmZsYXRlKHpwLCAwKTsKLQkJaWYgKHJl cyAhPSBaX09LICYmIHJlcyAhPSBaX1NUUkVBTV9FTkQpCi0JCQlwZ19mYXRhbCgiY291bGQg bm90IHVuY29tcHJlc3MgZGF0YTogJXMiLCB6cC0+bXNnKTsKLQotCQlvdXRbWkxJQl9PVVRf U0laRSAtIHpwLT5hdmFpbF9vdXRdID0gJ1wwJzsKLQkJYWh3cml0ZShvdXQsIDEsIFpMSUJf T1VUX1NJWkUgLSB6cC0+YXZhaWxfb3V0LCBBSCk7Ci0JfQotCi0JaWYgKGluZmxhdGVFbmQo enApICE9IFpfT0spCi0JCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgY29tcHJlc3Npb24g bGlicmFyeTogJXMiLCB6cC0+bXNnKTsKLQotCWZyZWUoYnVmKTsKLQlmcmVlKG91dCk7Ci0J ZnJlZSh6cCk7Ci19Ci0jZW5kaWYJCQkJCQkJLyogSEFWRV9MSUJaICovCi0KLQotLyoKLSAq IEZ1bmN0aW9ucyBmb3IgdW5jb21wcmVzc2VkIG91dHB1dC4KLSAqLwotCi1zdGF0aWMgdm9p ZAotUmVhZERhdGFGcm9tQXJjaGl2ZU5vbmUoQXJjaGl2ZUhhbmRsZSAqQUgsIFJlYWRGdW5j IHJlYWRGKQotewotCXNpemVfdAkJY250OwotCWNoYXIJICAgKmJ1ZjsKLQlzaXplX3QJCWJ1 ZmxlbjsKLQotCWJ1ZiA9IHBnX21hbGxvYyhaTElCX09VVF9TSVpFKTsKLQlidWZsZW4gPSBa TElCX09VVF9TSVpFOwotCi0Jd2hpbGUgKChjbnQgPSByZWFkRihBSCwgJmJ1ZiwgJmJ1Zmxl bikpKQotCXsKLQkJYWh3cml0ZShidWYsIDEsIGNudCwgQUgpOwotCX0KLQotCWZyZWUoYnVm KTsKLX0KLQotc3RhdGljIHZvaWQKLVdyaXRlRGF0YVRvQXJjaGl2ZU5vbmUoQXJjaGl2ZUhh bmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCi0JCQkJCSAgIGNvbnN0IGNoYXIgKmRh dGEsIHNpemVfdCBkTGVuKQotewotCWNzLT53cml0ZUYoQUgsIGRhdGEsIGRMZW4pOwotfQot Ci0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogQ29tcHJlc3NlZCBzdHJlYW0gQVBJ CiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCiAvKgotICogY2ZwIHJlcHJlc2Vu dHMgYW4gb3BlbiBzdHJlYW0sIHdyYXBwaW5nIHRoZSB1bmRlcmx5aW5nIEZJTEUgb3IgZ3pG aWxlCi0gKiBwb2ludGVyLiBUaGlzIGlzIG9wYXF1ZSB0byB0aGUgY2FsbGVycy4KKyAqIFBy aXZhdGUgcm91dGluZXMKICAqLwotc3RydWN0IGNmcAorc3RhdGljIGludAoraGFzU3VmZml4 KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpzdWZmaXgpCiB7Ci0JRklMRQkg ICAqdW5jb21wcmVzc2VkZnA7Ci0jaWZkZWYgSEFWRV9MSUJaCi0JZ3pGaWxlCQljb21wcmVz c2VkZnA7Ci0jZW5kaWYKLX07CisJaW50CQkJZmlsZW5hbWVsZW4gPSBzdHJsZW4oZmlsZW5h bWUpOworCWludAkJCXN1ZmZpeGxlbiA9IHN0cmxlbihzdWZmaXgpOwogCi0jaWZkZWYgSEFW RV9MSUJaCi1zdGF0aWMgaW50CWhhc1N1ZmZpeChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29u c3QgY2hhciAqc3VmZml4KTsKLSNlbmRpZgorCWlmIChmaWxlbmFtZWxlbiA8IHN1ZmZpeGxl bikKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gbWVtY21wKCZmaWxlbmFtZVtmaWxlbmFtZWxl biAtIHN1ZmZpeGxlbl0sCisJCQkJICBzdWZmaXgsCisJCQkJICBzdWZmaXhsZW4pID09IDA7 Cit9CiAKIC8qIGZyZWUoKSB3aXRob3V0IGNoYW5naW5nIGVycm5vOyB1c2VmdWwgaW4gc2V2 ZXJhbCBwbGFjZXMgYmVsb3cgKi8KIHN0YXRpYyB2b2lkCkBAIC00NDIsMzI0ICsxNjgsMTAy IEBAIGZyZWVfa2VlcF9lcnJubyh2b2lkICpwKQogfQogCiAvKgotICogT3BlbiBhIGZpbGUg Zm9yIHJlYWRpbmcuICdwYXRoJyBpcyB0aGUgZmlsZSB0byBvcGVuLCBhbmQgJ21vZGUnIHNo b3VsZAotICogYmUgZWl0aGVyICJyIiBvciAicmIiLgotICoKLSAqIElmIHRoZSBmaWxlIGF0 ICdwYXRoJyBkb2VzIG5vdCBleGlzdCwgd2UgYXBwZW5kIHRoZSAiLmd6IiBzdWZmaXggKGlm ICdwYXRoJwotICogZG9lc24ndCBhbHJlYWR5IGhhdmUgaXQpIGFuZCB0cnkgYWdhaW4uIFNv IGlmIHlvdSBwYXNzICJmb28iIGFzICdwYXRoJywKLSAqIHRoaXMgd2lsbCBvcGVuIGVpdGhl ciAiZm9vIiBvciAiZm9vLmd6Ii4KLSAqCi0gKiBPbiBmYWlsdXJlLCByZXR1cm4gTlVMTCB3 aXRoIGFuIGVycm9yIGNvZGUgaW4gZXJybm8uCisgKiBQdWJsaWMgaW50ZXJmYWNlCiAgKi8K LWNmcCAqCi1jZm9wZW5fcmVhZChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2Rl KQotewotCWNmcAkJICAgKmZwOwotCi0JcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21w cmVzc2lvbl9zcGVjID0gezB9OwotCi0jaWZkZWYgSEFWRV9MSUJaCi0JaWYgKGhhc1N1ZmZp eChwYXRoLCAiLmd6IikpCi0JewotCQljb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9IFBH X0NPTVBSRVNTSU9OX0daSVA7Ci0JCWZwID0gY2ZvcGVuKHBhdGgsIG1vZGUsIGNvbXByZXNz aW9uX3NwZWMpOwotCX0KLQllbHNlCi0jZW5kaWYKLQl7Ci0JCWNvbXByZXNzaW9uX3NwZWMu YWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKLQkJZnAgPSBjZm9wZW4ocGF0aCwg bW9kZSwgY29tcHJlc3Npb25fc3BlYyk7Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCWlmIChmcCA9 PSBOVUxMKQotCQl7Ci0JCQljaGFyCSAgICpmbmFtZTsKLQotCQkJZm5hbWUgPSBwc3ByaW50 ZigiJXMuZ3oiLCBwYXRoKTsKLQkJCWNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0gUEdf Q09NUFJFU1NJT05fR1pJUDsKLQkJCWZwID0gY2ZvcGVuKGZuYW1lLCBtb2RlLCBjb21wcmVz c2lvbl9zcGVjKTsKLQkJCWZyZWVfa2VlcF9lcnJubyhmbmFtZSk7Ci0JCX0KLSNlbmRpZgot CX0KLQlyZXR1cm4gZnA7Ci19CiAKIC8qCi0gKiBPcGVuIGEgZmlsZSBmb3Igd3JpdGluZy4g J3BhdGgnIGluZGljYXRlcyB0aGUgcGF0aCBuYW1lLCBhbmQgJ21vZGUnIG11c3QKLSAqIGJl IGEgZmlsZW1vZGUgYXMgYWNjZXB0ZWQgYnkgZm9wZW4oKSBhbmQgZ3pvcGVuKCkgdGhhdCBp bmRpY2F0ZXMgd3JpdGluZwotICogKCJ3IiwgIndiIiwgImEiLCBvciAiYWIiKS4KLSAqCi0g KiBJZiAnY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0nIGlzIEdaSVAsIGEgZ3ppcCBjb21w cmVzc2VkIHN0cmVhbSBpcyBvcGVuZWQsCi0gKiBhbmQgJ2NvbXByZXNzaW9uX3NwZWMubGV2 ZWwnIHVzZWQuIFRoZSAiLmd6IiBzdWZmaXggaXMgYXV0b21hdGljYWxseSBhZGRlZCB0bwot ICogJ3BhdGgnIGluIHRoYXQgY2FzZS4KLSAqCi0gKiBPbiBmYWlsdXJlLCByZXR1cm4gTlVM TCB3aXRoIGFuIGVycm9yIGNvZGUgaW4gZXJybm8uCisgKiBJbml0aWFsaXplIGEgY29tcHJl c3MgZmlsZSBoYW5kbGUgZm9yIHRoZSBzcGVjaWZpZWQgY29tcHJlc3Npb24gYWxnb3JpdGht LgogICovCi1jZnAgKgotY2ZvcGVuX3dyaXRlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNo YXIgKm1vZGUsCi0JCQkgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVz c2lvbl9zcGVjKQorQ29tcHJlc3NGaWxlSGFuZGxlICoKK0luaXRDb21wcmVzc0ZpbGVIYW5k bGUoY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQog ewotCWNmcAkJICAgKmZwOwotCi0JaWYgKGNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09 IFBHX0NPTVBSRVNTSU9OX05PTkUpCi0JCWZwID0gY2ZvcGVuKHBhdGgsIG1vZGUsIGNvbXBy ZXNzaW9uX3NwZWMpOwotCWVsc2UKLQl7Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCWNoYXIJICAg KmZuYW1lOwotCi0JCWZuYW1lID0gcHNwcmludGYoIiVzLmd6IiwgcGF0aCk7Ci0JCWZwID0g Y2ZvcGVuKGZuYW1lLCBtb2RlLCBjb21wcmVzc2lvbl9zcGVjKTsKLQkJZnJlZV9rZWVwX2Vy cm5vKGZuYW1lKTsKLSNlbHNlCi0JCXBnX2ZhdGFsKCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1 cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsICJnemlwIik7Ci0JCWZwID0gTlVMTDsJCQkJ Lyoga2VlcCBjb21waWxlciBxdWlldCAqLwotI2VuZGlmCi0JfQotCXJldHVybiBmcDsKLX0K LQotLyoKLSAqIFRoaXMgaXMgdGhlIHdvcmtob3JzZSBmb3IgY2ZvcGVuKCkgb3IgY2Zkb3Bl bigpLiBJdCBvcGVucyBmaWxlICdwYXRoJyBvcgotICogYXNzb2NpYXRlcyBhIHN0cmVhbSAn ZmQnLCBpZiAnZmQnIGlzIGEgdmFsaWQgZGVzY3JpcHRvciwgaW4gJ21vZGUnLiBUaGUKLSAq IGRlc2NyaXB0b3IgaXMgbm90IGR1cCdlZCBhbmQgaXQgaXMgdGhlIGNhbGxlcidzIHJlc3Bv bnNpYmlsaXR5IHRvIGRvIHNvLgotICogVGhlIGNhbGxlciBtdXN0IHZlcmlmeSB0aGF0IHRo ZSAnY29tcHJlc3NfYWxnb3JpdGhtJyBpcyBzdXBwb3J0ZWQgYnkgdGhlCi0gKiBjdXJyZW50 IGJ1aWxkLgotICoKLSAqIE9uIGZhaWx1cmUsIHJldHVybiBOVUxMIHdpdGggYW4gZXJyb3Ig Y29kZSBpbiBlcnJuby4KLSAqLwotc3RhdGljIGNmcCAqCi1jZm9wZW5faW50ZXJuYWwoY29u c3QgY2hhciAqcGF0aCwgaW50IGZkLCBjb25zdCBjaGFyICptb2RlLAotCQkJCXBnX2NvbXBy ZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKLXsKLQljZnAJCSAgICpmcCA9 IHBnX21hbGxvYzAoc2l6ZW9mKGNmcCkpOwotCi0JaWYgKGNvbXByZXNzaW9uX3NwZWMuYWxn b3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCi0JewotI2lmZGVmIEhBVkVfTElCWgot CQlpZiAoY29tcHJlc3Npb25fc3BlYy5sZXZlbCAhPSBaX0RFRkFVTFRfQ09NUFJFU1NJT04p Ci0JCXsKLQkJCS8qIHVzZXIgaGFzIHNwZWNpZmllZCBhIGNvbXByZXNzaW9uIGxldmVsLCBz byB0ZWxsIHpsaWIgdG8gdXNlIGl0ICovCi0JCQljaGFyCQltb2RlX2NvbXByZXNzaW9uWzMy XTsKLQotCQkJc25wcmludGYobW9kZV9jb21wcmVzc2lvbiwgc2l6ZW9mKG1vZGVfY29tcHJl c3Npb24pLCAiJXMlZCIsCi0JCQkJCSBtb2RlLCBjb21wcmVzc2lvbl9zcGVjLmxldmVsKTsK LQkJCWlmIChmZCA+PSAwKQotCQkJCWZwLT5jb21wcmVzc2VkZnAgPSBnemRvcGVuKGZkLCBt b2RlX2NvbXByZXNzaW9uKTsKLQkJCWVsc2UKLQkJCQlmcC0+Y29tcHJlc3NlZGZwID0gZ3pv cGVuKHBhdGgsIG1vZGVfY29tcHJlc3Npb24pOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJLyog ZG9uJ3Qgc3BlY2lmeSBhIGxldmVsLCBqdXN0IHVzZSB0aGUgemxpYiBkZWZhdWx0ICovCi0J CQlpZiAoZmQgPj0gMCkKLQkJCQlmcC0+Y29tcHJlc3NlZGZwID0gZ3pkb3BlbihmZCwgbW9k ZSk7Ci0JCQllbHNlCi0JCQkJZnAtPmNvbXByZXNzZWRmcCA9IGd6b3BlbihwYXRoLCBtb2Rl KTsKLQkJfQorCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIOwogCi0JCWlmIChmcC0+Y29tcHJl c3NlZGZwID09IE5VTEwpCi0JCXsKLQkJCWZyZWVfa2VlcF9lcnJubyhmcCk7Ci0JCQlmcCA9 IE5VTEw7Ci0JCX0KLSNlbHNlCi0JCXBnX2ZhdGFsKCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1 cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsICJnemlwIik7Ci0jZW5kaWYKLQl9Ci0JZWxz ZQotCXsKLQkJaWYgKGZkID49IDApCi0JCQlmcC0+dW5jb21wcmVzc2VkZnAgPSBmZG9wZW4o ZmQsIG1vZGUpOwotCQllbHNlCi0JCQlmcC0+dW5jb21wcmVzc2VkZnAgPSBmb3BlbihwYXRo LCBtb2RlKTsKKwlDRkggPSBwZ19tYWxsb2MwKHNpemVvZihDb21wcmVzc0ZpbGVIYW5kbGUp KTsKIAotCQlpZiAoZnAtPnVuY29tcHJlc3NlZGZwID09IE5VTEwpCi0JCXsKLQkJCWZyZWVf a2VlcF9lcnJubyhmcCk7Ci0JCQlmcCA9IE5VTEw7Ci0JCX0KLQl9CisJaWYgKGNvbXByZXNz aW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX05PTkUpCisJCUluaXRDb21w cmVzc0ZpbGVIYW5kbGVOb25lKENGSCwgY29tcHJlc3Npb25fc3BlYyk7CisJZWxzZSBpZiAo Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKKwkJ SW5pdENvbXByZXNzRmlsZUhhbmRsZUd6aXAoQ0ZILCBjb21wcmVzc2lvbl9zcGVjKTsKIAot CXJldHVybiBmcDsKKwlyZXR1cm4gQ0ZIOwogfQogCiAvKgotICogT3BlbnMgZmlsZSAncGF0 aCcgaW4gJ21vZGUnIGFuZCBjb21wcmVzc2lvbiBhcyBkZWZpbmVkIGluCi0gKiBjb21wcmVz c2lvbl9zcGVjLiBUaGUgY2FsbGVyIG11c3QgdmVyaWZ5IHRoYXQgdGhlIGNvbXByZXNzaW9u Ci0gKiBpcyBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgYnVpbGQuCisgKiBPcGVuIGEgZmls ZSBmb3IgcmVhZGluZy4gJ3BhdGgnIGlzIHRoZSBmaWxlIHRvIG9wZW4sIGFuZCAnbW9kZScg c2hvdWxkCisgKiBiZSBlaXRoZXIgInIiIG9yICJyYiIuCiAgKgotICogT24gZmFpbHVyZSwg cmV0dXJuIE5VTEwgd2l0aCBhbiBlcnJvciBjb2RlIGluIGVycm5vLgotICovCi1jZnAgKgot Y2ZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCi0JICAgY29uc3Qg cGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQotewotCXJldHVy biBjZm9wZW5faW50ZXJuYWwocGF0aCwgLTEsIG1vZGUsIGNvbXByZXNzaW9uX3NwZWMpOwot fQotCi0vKgotICogQXNzb2NpYXRlcyBhIHN0cmVhbSAnZmQnLCBpZiAnZmQnIGlzIGEgdmFs aWQgZGVzY3JpcHRvciwgaW4gJ21vZGUnCi0gKiBhbmQgY29tcHJlc3Npb24gYXMgZGVmaW5l ZCBpbiBjb21wcmVzc2lvbl9zcGVjLiBUaGUgY2FsbGVyIG11c3QKLSAqIHZlcmlmeSB0aGF0 IHRoZSBjb21wcmVzc2lvbiBpcyBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgYnVpbGQuCisg KiBJZiB0aGUgZmlsZSBhdCAncGF0aCcgY29udGFpbnMgdGhlIHN1ZmZpeCBvZiBhIHN1cHBv cnRlZCBjb21wcmVzc2lvbiBtZXRob2QsCisgKiBjdXJyZW50bHkgdGhpcyBpbmNsdWRlcyBv bmx5ICIuZ3oiLCB0aGVuIHRoaXMgY29tcHJlc3Npb24gd2lsbCBiZSB1c2VkCisgKiB0aHJv dWdob3V0LiBPdGhlcndpc2UgdGhlIGNvbXByZXNzaW9uIHdpbGwgYmUgZGVmZXJyZWQgYnkg aXRlcmF0aXZlbHkgdHJ5aW5nCisgKiB0byBvcGVuIHRoZSBmaWxlIGF0ICdwYXRoJywgZmly c3QgYXMgaXMsIHRoZW4gYnkgYXBwZW5kaW5nIGtub3duIGNvbXByZXNzaW9uCisgKiBzdWZm aXhlcy4gU28gaWYgeW91IHBhc3MgImZvbyIgYXMgJ3BhdGgnLCB0aGlzIHdpbGwgb3BlbiBl aXRoZXIgImZvbyIgb3IKKyAqICJmb28uZ3oiLCB0cnlpbmcgaW4gdGhhdCBvcmRlci4KICAq CiAgKiBPbiBmYWlsdXJlLCByZXR1cm4gTlVMTCB3aXRoIGFuIGVycm9yIGNvZGUgaW4gZXJy bm8uCiAgKi8KLWNmcCAqCi1jZmRvcGVuKGludCBmZCwgY29uc3QgY2hhciAqbW9kZSwKLQkJ Y29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQorQ29t cHJlc3NGaWxlSGFuZGxlICoKK0luaXREaXNjb3ZlckNvbXByZXNzRmlsZUhhbmRsZShjb25z dCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlKQogewotCXJldHVybiBjZm9wZW5faW50 ZXJuYWwoTlVMTCwgZmQsIG1vZGUsIGNvbXByZXNzaW9uX3NwZWMpOwotfQorCUNvbXByZXNz RmlsZUhhbmRsZSAqQ0ZIID0gTlVMTDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwljaGFyCSAgICpm bmFtZTsKKwlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMgPSB7 MH07CiAKLWludAotY2ZyZWFkKHZvaWQgKnB0ciwgaW50IHNpemUsIGNmcCAqZnApCi17Ci0J aW50CQkJcmV0OworCWNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJ T05fTk9ORTsKIAotCWlmIChzaXplID09IDApCi0JCXJldHVybiAwOworCUFzc2VydChzdHJj bXAobW9kZSwgUEdfQklOQVJZX1IpID09IDApOwogCi0jaWZkZWYgSEFWRV9MSUJaCi0JaWYg KGZwLT5jb21wcmVzc2VkZnApCi0JewotCQlyZXQgPSBnenJlYWQoZnAtPmNvbXByZXNzZWRm cCwgcHRyLCBzaXplKTsKLQkJaWYgKHJldCAhPSBzaXplICYmICFnemVvZihmcC0+Y29tcHJl c3NlZGZwKSkKLQkJewotCQkJaW50CQkJZXJybnVtOwotCQkJY29uc3QgY2hhciAqZXJybXNn ID0gZ3plcnJvcihmcC0+Y29tcHJlc3NlZGZwLCAmZXJybnVtKTsKKwlmbmFtZSA9IHN0cmR1 cChwYXRoKTsKIAotCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmls ZTogJXMiLAotCQkJCQkgZXJybnVtID09IFpfRVJSTk8gPyBzdHJlcnJvcihlcnJubykgOiBl cnJtc2cpOwotCQl9Ci0JfQorCWlmIChoYXNTdWZmaXgoZm5hbWUsICIuZ3oiKSkKKwkJY29t cHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9HWklQOwogCWVsc2UK LSNlbmRpZgogCXsKLQkJcmV0ID0gZnJlYWQocHRyLCAxLCBzaXplLCBmcC0+dW5jb21wcmVz c2VkZnApOwotCQlpZiAocmV0ICE9IHNpemUgJiYgIWZlb2YoZnAtPnVuY29tcHJlc3NlZGZw KSkKLQkJCVJFQURfRVJST1JfRVhJVChmcC0+dW5jb21wcmVzc2VkZnApOwotCX0KLQlyZXR1 cm4gcmV0OwotfQotCi1pbnQKLWNmd3JpdGUoY29uc3Qgdm9pZCAqcHRyLCBpbnQgc2l6ZSwg Y2ZwICpmcCkKLXsKLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAtPmNvbXByZXNzZWRmcCkK LQkJcmV0dXJuIGd6d3JpdGUoZnAtPmNvbXByZXNzZWRmcCwgcHRyLCBzaXplKTsKLQllbHNl Ci0jZW5kaWYKLQkJcmV0dXJuIGZ3cml0ZShwdHIsIDEsIHNpemUsIGZwLT51bmNvbXByZXNz ZWRmcCk7Ci19Ci0KLWludAotY2ZnZXRjKGNmcCAqZnApCi17Ci0JaW50CQkJcmV0OworCQli b29sCQlleGlzdHM7CiAKKwkJZXhpc3RzID0gKHN0YXQocGF0aCwgJnN0KSA9PSAwKTsKKwkJ LyogYXZvaWQgdW51c2VkIHdhcm5pbmcgaWYgaXQgaXMgbm90IGJ1aWx0IHdpdGggY29tcHJl c3Npb24gKi8KKwkJaWYgKGV4aXN0cykKKwkJCWNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGht ID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKICNpZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAtPmNv bXByZXNzZWRmcCkKLQl7Ci0JCXJldCA9IGd6Z2V0YyhmcC0+Y29tcHJlc3NlZGZwKTsKLQkJ aWYgKHJldCA9PSBFT0YpCisJCWlmICghZXhpc3RzKQogCQl7Ci0JCQlpZiAoIWd6ZW9mKGZw LT5jb21wcmVzc2VkZnApKQotCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlu cHV0IGZpbGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKLQkJCWVsc2UKLQkJCQlwZ19mYXRh bCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiBlbmQgb2YgZmlsZSIpOworCQkJ ZnJlZV9rZWVwX2Vycm5vKGZuYW1lKTsKKwkJCWZuYW1lID0gcHNwcmludGYoIiVzLmd6Iiwg cGF0aCk7CisJCQlleGlzdHMgPSAoc3RhdChmbmFtZSwgJnN0KSA9PSAwKTsKKworCQkJaWYg KGV4aXN0cykKKwkJCQljb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNT SU9OX0daSVA7CiAJCX0KLQl9Ci0JZWxzZQogI2VuZGlmCi0JewotCQlyZXQgPSBmZ2V0Yyhm cC0+dW5jb21wcmVzc2VkZnApOwotCQlpZiAocmV0ID09IEVPRikKLQkJCVJFQURfRVJST1Jf RVhJVChmcC0+dW5jb21wcmVzc2VkZnApOwogCX0KIAotCXJldHVybiByZXQ7Ci19Ci0KLWNo YXIgKgotY2ZnZXRzKGNmcCAqZnAsIGNoYXIgKmJ1ZiwgaW50IGxlbikKLXsKLSNpZmRlZiBI QVZFX0xJQloKLQlpZiAoZnAtPmNvbXByZXNzZWRmcCkKLQkJcmV0dXJuIGd6Z2V0cyhmcC0+ Y29tcHJlc3NlZGZwLCBidWYsIGxlbik7Ci0JZWxzZQotI2VuZGlmCi0JCXJldHVybiBmZ2V0 cyhidWYsIGxlbiwgZnAtPnVuY29tcHJlc3NlZGZwKTsKLX0KLQotaW50Ci1jZmNsb3NlKGNm cCAqZnApCi17Ci0JaW50CQkJcmVzdWx0OwotCi0JaWYgKGZwID09IE5VTEwpCi0JewotCQll cnJubyA9IEVCQURGOwotCQlyZXR1cm4gRU9GOwotCX0KLSNpZmRlZiBIQVZFX0xJQloKLQlp ZiAoZnAtPmNvbXByZXNzZWRmcCkKKwlDRkggPSBJbml0Q29tcHJlc3NGaWxlSGFuZGxlKGNv bXByZXNzaW9uX3NwZWMpOworCWlmIChDRkgtPm9wZW5fZnVuYyhmbmFtZSwgLTEsIG1vZGUs IENGSCkpCiAJewotCQlyZXN1bHQgPSBnemNsb3NlKGZwLT5jb21wcmVzc2VkZnApOwotCQlm cC0+Y29tcHJlc3NlZGZwID0gTlVMTDsKKwkJZnJlZV9rZWVwX2Vycm5vKENGSCk7CisJCUNG SCA9IE5VTEw7CiAJfQotCWVsc2UKLSNlbmRpZgotCXsKLQkJcmVzdWx0ID0gZmNsb3NlKGZw LT51bmNvbXByZXNzZWRmcCk7Ci0JCWZwLT51bmNvbXByZXNzZWRmcCA9IE5VTEw7Ci0JfQot CWZyZWVfa2VlcF9lcnJubyhmcCk7CisJZnJlZV9rZWVwX2Vycm5vKGZuYW1lKTsKIAotCXJl dHVybiByZXN1bHQ7CisJcmV0dXJuIENGSDsKIH0KIAorLyoKKyAqIENsb3NlIGFuIG9wZW4g ZmlsZSBoYW5kbGUgYW5kIHJlbGVhc2UgaXRzIG1lbW9yeS4KKyAqCisgKiBPbiBmYWlsdXJl LCByZXR1cm5zIGFuIGVycm9yIHZhbHVlIGFuZCBzZXRzIGVycm5vIGFwcHJvcHJpYXRlbHku CisgKi8KIGludAotY2Zlb2YoY2ZwICpmcCkKK0VuZENvbXByZXNzRmlsZUhhbmRsZShDb21w cmVzc0ZpbGVIYW5kbGUgKkNGSCkKIHsKLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAtPmNv bXByZXNzZWRmcCkKLQkJcmV0dXJuIGd6ZW9mKGZwLT5jb21wcmVzc2VkZnApOwotCWVsc2UK LSNlbmRpZgotCQlyZXR1cm4gZmVvZihmcC0+dW5jb21wcmVzc2VkZnApOwotfQorCWludAkJ CXJldCA9IDA7CiAKLWNvbnN0IGNoYXIgKgotZ2V0X2NmcF9lcnJvcihjZnAgKmZwKQotewot I2lmZGVmIEhBVkVfTElCWgotCWlmIChmcC0+Y29tcHJlc3NlZGZwKQotCXsKLQkJaW50CQkJ ZXJybnVtOwotCQljb25zdCBjaGFyICplcnJtc2cgPSBnemVycm9yKGZwLT5jb21wcmVzc2Vk ZnAsICZlcnJudW0pOworCWlmIChDRkgtPnByaXZhdGVfZGF0YSkKKwkJcmV0ID0gQ0ZILT5j bG9zZV9mdW5jKENGSCk7CiAKLQkJaWYgKGVycm51bSAhPSBaX0VSUk5PKQotCQkJcmV0dXJu IGVycm1zZzsKLQl9Ci0jZW5kaWYKLQlyZXR1cm4gc3RyZXJyb3IoZXJybm8pOwotfQorCWZy ZWVfa2VlcF9lcnJubyhDRkgpOwogCi0jaWZkZWYgSEFWRV9MSUJaCi1zdGF0aWMgaW50Ci1o YXNTdWZmaXgoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKnN1ZmZpeCkKLXsK LQlpbnQJCQlmaWxlbmFtZWxlbiA9IHN0cmxlbihmaWxlbmFtZSk7Ci0JaW50CQkJc3VmZml4 bGVuID0gc3RybGVuKHN1ZmZpeCk7Ci0KLQlpZiAoZmlsZW5hbWVsZW4gPCBzdWZmaXhsZW4p Ci0JCXJldHVybiAwOwotCi0JcmV0dXJuIG1lbWNtcCgmZmlsZW5hbWVbZmlsZW5hbWVsZW4g LSBzdWZmaXhsZW5dLAotCQkJCSAgc3VmZml4LAotCQkJCSAgc3VmZml4bGVuKSA9PSAwOwor CXJldHVybiByZXQ7CiB9Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1w L2NvbXByZXNzX2lvLmggYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uaAppbmRleCA4 YmViMTA1OGVjMi4uZDQxYzQ5NTAyNTcgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9j b21wcmVzc19pby5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5oCkBAIC0y Myw1MCArMjMsMTYwIEBACiAKIGV4dGVybiBjaGFyICpzdXBwb3J0c19jb21wcmVzc2lvbihj b25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOwogCi0v KiBQcm90b3R5cGUgZm9yIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIFdyaXRlRGF0YVRvQXJjaGl2 ZSgpICovCisvKgorICogUHJvdG90eXBlIGZvciBjYWxsYmFjayBmdW5jdGlvbiB1c2VkIGlu IHdyaXRlRGF0YSgpCisgKi8KIHR5cGVkZWYgdm9pZCAoKldyaXRlRnVuYykgKEFyY2hpdmVI YW5kbGUgKkFILCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pOwogCiAvKgotICogUHJv dG90eXBlIGZvciBjYWxsYmFjayBmdW5jdGlvbiB0byBSZWFkRGF0YUZyb21BcmNoaXZlKCkK KyAqIFByb3RvdHlwZSBmb3IgY2FsbGJhY2sgZnVuY3Rpb24gdXNlZCBpbiByZWFkRGF0YSgp CiAgKgotICogUmVhZERhdGFGcm9tQXJjaGl2ZSB3aWxsIGNhbGwgdGhlIHJlYWQgZnVuY3Rp b24gcmVwZWF0ZWRseSwgdW50aWwgaXQKLSAqIHJldHVybnMgMCB0byBzaWduYWwgRU9GLiBS ZWFkRGF0YUZyb21BcmNoaXZlIHBhc3NlcyBhIGJ1ZmZlciB0byByZWFkIHRoZQotICogZGF0 YSBpbnRvIGluICpidWYsIG9mIGxlbmd0aCAqYnVmbGVuLiBJZiB0aGF0J3Mgbm90IGJpZyBl bm91Z2ggZm9yIHRoZQotICogY2FsbGJhY2sgZnVuY3Rpb24sIGl0IGNhbiBmcmVlKCkgaXQg YW5kIG1hbGxvYygpIGEgbmV3IG9uZSwgcmV0dXJuaW5nIHRoZQotICogbmV3IGJ1ZmZlciBh bmQgaXRzIHNpemUgaW4gKmJ1ZiBhbmQgKmJ1Zmxlbi4KKyAqIHJlYWREYXRhIHdpbGwgY2Fs bCB0aGUgcmVhZCBmdW5jdGlvbiByZXBlYXRlZGx5LCB1bnRpbCBpdCByZXR1cm5zIDAgdG8g c2lnbmFsCisgKiBFT0YuIHJlYWREYXRhIHBhc3NlcyBhIGJ1ZmZlciB0byByZWFkIHRoZSBk YXRhIGludG8gaW4gKmJ1Ziwgb2YgbGVuZ3RoCisgKiAqYnVmbGVuLiBJZiB0aGF0J3Mgbm90 IGJpZyBlbm91Z2ggZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiwgaXQgY2FuIGZyZWUoKSBp dAorICogYW5kIG1hbGxvYygpIGEgbmV3IG9uZSwgcmV0dXJuaW5nIHRoZSBuZXcgYnVmZmVy IGFuZCBpdHMgc2l6ZSBpbiAqYnVmIGFuZAorICogKmJ1Zmxlbi4KICAqCiAgKiBSZXR1cm5z IHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCBpbnRvICpidWYsIG9yIDAgb24gRU9GLgogICov CiB0eXBlZGVmIHNpemVfdCAoKlJlYWRGdW5jKSAoQXJjaGl2ZUhhbmRsZSAqQUgsIGNoYXIg KipidWYsIHNpemVfdCAqYnVmbGVuKTsKIAotLyogc3RydWN0IGRlZmluaXRpb24gYXBwZWFy cyBpbiBjb21wcmVzc19pby5jICovCiB0eXBlZGVmIHN0cnVjdCBDb21wcmVzc29yU3RhdGUg Q29tcHJlc3NvclN0YXRlOworc3RydWN0IENvbXByZXNzb3JTdGF0ZQoreworCS8qCisJICog UmVhZCBhbGwgY29tcHJlc3NlZCBkYXRhIGZyb20gdGhlIGlucHV0IHN0cmVhbSAodmlhIHJl YWRGKSBhbmQgcHJpbnQgaXQKKwkgKiBvdXQgd2l0aCBhaHdyaXRlKCkuCisJICovCisJdm9p ZAkJKCpyZWFkRGF0YSkgKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNz KTsKKworCS8qCisJICogQ29tcHJlc3MgYW5kIHdyaXRlIGRhdGEgdG8gdGhlIG91dHB1dCBz dHJlYW0gKHZpYSB3cml0ZUYpLgorCSAqLworCXZvaWQJCSgqd3JpdGVEYXRhKSAoQXJjaGl2 ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCisJCQkJCQkJICBjb25zdCB2b2lk ICpkYXRhLCBzaXplX3QgZExlbik7CisKKwkvKgorCSAqIEVuZCBjb21wcmVzc2lvbiBhbmQg Zmx1c2ggaW50ZXJuYWwgYnVmZmVycyBpZiBhbnkuCisJICovCisJdm9pZAkJKCplbmQpIChB cmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcyk7CisKKwkvKgorCSAqIENh bGxiYWNrIGZ1bmN0aW9uIHRvIHJlYWQgZnJvbSBhbiBhbHJlYWR5IHByb2Nlc3NlZCBpbnB1 dCBzdHJlYW0KKwkgKi8KKwlSZWFkRnVuYwlyZWFkRjsKKworCS8qCisJICogQ2FsbGJhY2sg ZnVuY3Rpb24gdG8gd3JpdGUgYW4gYWxyZWFkeSBwcm9jZXNzZWQgY2h1bmsgb2YgZGF0YS4K KwkgKi8KKwlXcml0ZUZ1bmMJd3JpdGVGOworCisJLyoKKwkgKiBDb21wcmVzc2lvbiBzcGVj aWZpY2F0aW9uIGZvciB0aGlzIHN0YXRlLgorCSAqLworCXBnX2NvbXByZXNzX3NwZWNpZmlj YXRpb24gY29tcHJlc3Npb25fc3BlYzsKKworCS8qCisJICogUHJpdmF0ZSBkYXRhIHRvIGJl IHVzZWQgYnkgdGhlIGNvbXByZXNzb3IuCisJICovCisJdm9pZAkgICAqcHJpdmF0ZV9kYXRh OworfTsKIAogZXh0ZXJuIENvbXByZXNzb3JTdGF0ZSAqQWxsb2NhdGVDb21wcmVzc29yKGNv bnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYywKKwkJCQkJ CQkJCQkgICBSZWFkRnVuYyByZWFkRiwKIAkJCQkJCQkJCQkgICBXcml0ZUZ1bmMgd3JpdGVG KTsKLWV4dGVybiB2b2lkIFJlYWREYXRhRnJvbUFyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgs Ci0JCQkJCQkJCWNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25f c3BlYywKLQkJCQkJCQkJUmVhZEZ1bmMgcmVhZEYpOwotZXh0ZXJuIHZvaWQgV3JpdGVEYXRh VG9BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAotCQkJ CQkJCSAgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVuKTsKIGV4dGVybiB2b2lkIEVu ZENvbXByZXNzb3IoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpOwog CisvKgorICogQ29tcHJlc3MgRmlsZSBIYW5kbGUKKyAqLwordHlwZWRlZiBzdHJ1Y3QgQ29t cHJlc3NGaWxlSGFuZGxlIENvbXByZXNzRmlsZUhhbmRsZTsKKworc3RydWN0IENvbXByZXNz RmlsZUhhbmRsZQoreworCS8qCisJICogT3BlbiBhIGZpbGUgaW4gbW9kZS4KKwkgKgorCSAq IFBhc3MgZWl0aGVyICdwYXRoJyBvciAnZmQnIGRlcGVuZGluZyBvbiB3aGV0aGVyIGEgZmls ZXBhdGggb3IgYSBmaWxlCisJICogZGVzY3JpcHRvciBpcyBhdmFpbGFibGUuICdtb2RlJyBj YW4gYmUgb25lIG9mICdyJywgJ3JiJywgJ3cnLCAnd2InLAorCSAqICdhJywgYW5kICdhYicu IFJlcXVyaXJlcyBhbiBhbHJlYWR5IGluaXRpYWxpemVkIENvbXByZXNzRmlsZUhhbmRsZS4K KwkgKi8KKwlpbnQJCQkoKm9wZW5fZnVuYykgKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmZCwg Y29uc3QgY2hhciAqbW9kZSwKKwkJCQkJCQkgIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsK KworCS8qCisJICogT3BlbiBhIGZpbGUgZm9yIHdyaXRpbmcuCisJICoKKwkgKiAnbW9kZScg Y2FuIGJlIG9uZSBvZiAndycsICd3YicsICdhJywgYW5kICdhYicuIFJlcXVyaXJlcyBhbiBh bHJlYWR5CisJICogaW5pdGlhbGl6ZWQgQ29tcHJlc3NGaWxlSGFuZGxlLgorCSAqLworCWlu dAkJCSgqb3Blbl93cml0ZV9mdW5jKSAoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAq bW9kZSwKKwkJCQkJCQkJCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKIAotdHlwZWRlZiBz dHJ1Y3QgY2ZwIGNmcDsKKwkvKgorCSAqIFJlYWQgJ3NpemUnIGJ5dGVzIG9mIGRhdGEgZnJv bSB0aGUgZmlsZSBhbmQgc3RvcmUgdGhlbSBpbnRvICdwdHInLgorCSAqLworCXNpemVfdAkJ KCpyZWFkX2Z1bmMpICh2b2lkICpwdHIsIHNpemVfdCBzaXplLCBDb21wcmVzc0ZpbGVIYW5k bGUgKkNGSCk7CiAKLWV4dGVybiBjZnAgKmNmb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25z dCBjaGFyICptb2RlLAotCQkJCSAgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24g Y29tcHJlc3Npb25fc3BlYyk7Ci1leHRlcm4gY2ZwICpjZmRvcGVuKGludCBmZCwgY29uc3Qg Y2hhciAqbW9kZSwKLQkJCQkJY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21w cmVzc2lvbl9zcGVjKTsKLWV4dGVybiBjZnAgKmNmb3Blbl9yZWFkKGNvbnN0IGNoYXIgKnBh dGgsIGNvbnN0IGNoYXIgKm1vZGUpOwotZXh0ZXJuIGNmcCAqY2ZvcGVuX3dyaXRlKGNvbnN0 IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCi0JCQkJCQkgY29uc3QgcGdfY29tcHJl c3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKLWV4dGVybiBpbnQJY2ZyZWFk KHZvaWQgKnB0ciwgaW50IHNpemUsIGNmcCAqZnApOwotZXh0ZXJuIGludAljZndyaXRlKGNv bnN0IHZvaWQgKnB0ciwgaW50IHNpemUsIGNmcCAqZnApOwotZXh0ZXJuIGludAljZmdldGMo Y2ZwICpmcCk7Ci1leHRlcm4gY2hhciAqY2ZnZXRzKGNmcCAqZnAsIGNoYXIgKmJ1ZiwgaW50 IGxlbik7Ci1leHRlcm4gaW50CWNmY2xvc2UoY2ZwICpmcCk7Ci1leHRlcm4gaW50CWNmZW9m KGNmcCAqZnApOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmdldF9jZnBfZXJyb3IoY2ZwICpmcCk7 CisJLyoKKwkgKiBXcml0ZSAnc2l6ZScgYnl0ZXMgb2YgZGF0YSBpbnRvIHRoZSBmaWxlIGZy b20gJ3B0cicuCisJICovCisJc2l6ZV90CQkoKndyaXRlX2Z1bmMpIChjb25zdCB2b2lkICpw dHIsIHNpemVfdCBzaXplLAorCQkJCQkJCSAgIHN0cnVjdCBDb21wcmVzc0ZpbGVIYW5kbGUg KkNGSCk7CiAKKwkvKgorCSAqIFJlYWQgYXQgbW9zdCBzaXplIC0gMSBjaGFyYWN0ZXJzIGZy b20gdGhlIGNvbXByZXNzIGZpbGUgaGFuZGxlIGludG8KKwkgKiAncycuCisJICoKKwkgKiBT dG9wIGlmIGFuIEVPRiBvciBhIG5ld2xpbmUgaXMgZm91bmQgZmlyc3QuICdzJyBpcyBhbHdh eXMgbnVsbAorCSAqIHRlcm1pbmF0ZWQgYW5kIGNvbnRhaW5zIHRoZSBuZXdsaW5lIGlmIGl0 IHdhcyBmb3VuZC4KKwkgKi8KKwljaGFyCSAgICooKmdldHNfZnVuYykgKGNoYXIgKnMsIGlu dCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCk7CisKKwkvKgorCSAqIFJlYWQgdGhl IG5leHQgY2hhcmFjdGVyIGZyb20gdGhlIGNvbXByZXNzIGZpbGUgaGFuZGxlIGFzICd1bnNp Z25lZAorCSAqIGNoYXInIGNhc3QgaW50byAnaW50Jy4KKwkgKi8KKwlpbnQJCQkoKmdldGNf ZnVuYykgKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKKworCS8qCisJICogVGVzdCBpZiBF T0YgaXMgcmVhY2hlZCBpbiB0aGUgY29tcHJlc3MgZmlsZSBoYW5kbGUuCisJICovCisJaW50 CQkJKCplb2ZfZnVuYykgKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKKworCS8qCisJICog Q2xvc2UgYW4gb3BlbiBmaWxlIGhhbmRsZS4KKwkgKi8KKwlpbnQJCQkoKmNsb3NlX2Z1bmMp IChDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCk7CisKKwkvKgorCSAqIEdldCBhIHBvaW50ZXIg dG8gYSBzdHJpbmcgdGhhdCBkZXNjcmliZXMgYW4gZXJyb3IgdGhhdCBvY2N1cmVkIGR1cmlu ZyBhCisJICogY29tcHJlc3MgZmlsZSBoYW5kbGUgb3BlcmF0aW9uLgorCSAqLworCWNvbnN0 IGNoYXIgKigqZ2V0X2Vycm9yX2Z1bmMpIChDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCk7CisK KwkvKgorCSAqIENvbXByZXNzaW9uIHNwZWNpZmljYXRpb24gZm9yIHRoaXMgZmlsZSBoYW5k bGUuCisJICovCisJcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVj OworCisJLyoKKwkgKiBQcml2YXRlIGRhdGEgdG8gYmUgdXNlZCBieSB0aGUgY29tcHJlc3Nv ci4KKwkgKi8KKwl2b2lkCSAgICpwcml2YXRlX2RhdGE7Cit9OworCisvKgorICogSW5pdGlh bGl6ZSBhIGNvbXByZXNzIGZpbGUgaGFuZGxlIHdpdGggdGhlIHJlcXVlc3RlZCBjb21wcmVz c2lvbi4KKyAqLworZXh0ZXJuIENvbXByZXNzRmlsZUhhbmRsZSAqSW5pdENvbXByZXNzRmls ZUhhbmRsZShjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3Nw ZWMpOworCisvKgorICogSW5pdGlhbGl6ZSBhIGNvbXByZXNzIGZpbGUgc3RyZWFtLiBEZWZm ZXIgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobQorICogZnJvbSAncGF0aCcsIGVpdGhlciBi eSBleGFtaW5pbmcgaXRzIHN1ZmZpeCBvciBieSBhcHBlbmRpbmcgdGhlIHN1cHBvcnRlZAor ICogc3VmZml4ZXMgaW4gJ3BhdGgnLgorICovCitleHRlcm4gQ29tcHJlc3NGaWxlSGFuZGxl ICpJbml0RGlzY292ZXJDb21wcmVzc0ZpbGVIYW5kbGUoY29uc3QgY2hhciAqcGF0aCwKKwkJ CQkJCQkJCQkJCQkJICBjb25zdCBjaGFyICptb2RlKTsKK2V4dGVybiBpbnQJRW5kQ29tcHJl c3NGaWxlSGFuZGxlKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKICNlbmRpZgpkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX25vbmUuYyBiL3NyYy9iaW4vcGdfZHVt cC9jb21wcmVzc19ub25lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLmVjYmNmNGIwNGE3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2Nv bXByZXNzX25vbmUuYwpAQCAtMCwwICsxLDIwNiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKgorICogY29tcHJlc3Nfbm9uZS5jCisgKgkgUm91dGluZXMgZm9yIGFyY2hpdmVycyB0 byByZWFkIG9yIHdyaXRlIGFuIHVuY29tcHJlc3NlZCBzdHJlYW0uCisgKgorICogUG9ydGlv bnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjMsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2Yg dGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9OCisg KgkgICBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nfbm9uZS5jCisgKgorICotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgorI2luY2x1ZGUgPHVu aXN0ZC5oPgorCisjaW5jbHVkZSAiY29tcHJlc3Nfbm9uZS5oIgorI2luY2x1ZGUgInBnX2Jh Y2t1cF91dGlscy5oIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENvbXByZXNz b3IgQVBJCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogUHJpdmF0 ZSByb3V0aW5lcworICovCisKK3N0YXRpYyB2b2lkCitSZWFkRGF0YUZyb21BcmNoaXZlTm9u ZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcykKK3sKKwlzaXplX3QJ CWNudDsKKwljaGFyCSAgICpidWY7CisJc2l6ZV90CQlidWZsZW47CisKKwlidWYgPSBwZ19t YWxsb2MoWkxJQl9PVVRfU0laRSk7CisJYnVmbGVuID0gWkxJQl9PVVRfU0laRTsKKworCXdo aWxlICgoY250ID0gY3MtPnJlYWRGKEFILCAmYnVmLCAmYnVmbGVuKSkpCisJeworCQlhaHdy aXRlKGJ1ZiwgMSwgY250LCBBSCk7CisJfQorCisJZnJlZShidWYpOworfQorCisKK3N0YXRp YyB2b2lkCitXcml0ZURhdGFUb0FyY2hpdmVOb25lKEFyY2hpdmVIYW5kbGUgKkFILCBDb21w cmVzc29yU3RhdGUgKmNzLAorCQkJCQkgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExl bikKK3sKKwljcy0+d3JpdGVGKEFILCBkYXRhLCBkTGVuKTsKK30KKworc3RhdGljIHZvaWQK K0VuZENvbXByZXNzb3JOb25lKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUg KmNzKQoreworCS8qIG5vIG9wICovCit9CisKKy8qCisgKiBQdWJsaWMgaW50ZXJmYWNlCisg Ki8KKwordm9pZAorSW5pdENvbXByZXNzb3JOb25lKENvbXByZXNzb3JTdGF0ZSAqY3MsCisJ CQkJICAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVj KQoreworCWNzLT5yZWFkRGF0YSA9IFJlYWREYXRhRnJvbUFyY2hpdmVOb25lOworCWNzLT53 cml0ZURhdGEgPSBXcml0ZURhdGFUb0FyY2hpdmVOb25lOworCWNzLT5lbmQgPSBFbmRDb21w cmVzc29yTm9uZTsKKworCWNzLT5jb21wcmVzc2lvbl9zcGVjID0gY29tcHJlc3Npb25fc3Bl YzsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENvbXByZXNzIEZpbGUg QVBJCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogUHJpdmF0ZSBy b3V0aW5lcworICovCisKK3N0YXRpYyBzaXplX3QKK3JlYWRfbm9uZSh2b2lkICpwdHIsIHNp emVfdCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlGSUxFCSAgICpmcCA9 IChGSUxFICopIENGSC0+cHJpdmF0ZV9kYXRhOworCXNpemVfdAkJcmV0OworCisJaWYgKHNp emUgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBmcmVhZChwdHIsIDEsIHNpemUsIGZw KTsKKwlpZiAocmV0ICE9IHNpemUgJiYgIWZlb2YoZnApKQorCQlwZ19mYXRhbCgiY291bGQg bm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsCisJCQkJIHN0cmVycm9yKGVycm5vKSk7 CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc2l6ZV90Cit3cml0ZV9ub25lKGNvbnN0 IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQorewor CXJldHVybiBmd3JpdGUocHRyLCAxLCBzaXplLCAoRklMRSAqKSBDRkgtPnByaXZhdGVfZGF0 YSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2dldF9lcnJvcl9ub25lKENvbXByZXNz RmlsZUhhbmRsZSAqQ0ZIKQoreworCXJldHVybiBzdHJlcnJvcihlcnJubyk7Cit9CisKK3N0 YXRpYyBjaGFyICoKK2dldHNfbm9uZShjaGFyICpwdHIsIGludCBzaXplLCBDb21wcmVzc0Zp bGVIYW5kbGUgKkNGSCkKK3sKKwlyZXR1cm4gZmdldHMocHRyLCBzaXplLCAoRklMRSAqKSBD RkgtPnByaXZhdGVfZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQKK2dldGNfbm9uZShDb21wcmVz c0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlGSUxFCSAgICpmcCA9IChGSUxFICopIENGSC0+cHJp dmF0ZV9kYXRhOworCWludAkJCXJldDsKKworCXJldCA9IGZnZXRjKGZwKTsKKwlpZiAocmV0 ID09IEVPRikKKwl7CisJCWlmICghZmVvZihmcCkpCisJCQlwZ19mYXRhbCgiY291bGQgbm90 IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCWVsc2UK KwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6IGVuZCBvZiBm aWxlIik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorY2xvc2Vfbm9u ZShDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlGSUxFCSAgICpmcCA9IChGSUxFICop IENGSC0+cHJpdmF0ZV9kYXRhOworCWludAkJCXJldCA9IDA7CisKKwlDRkgtPnByaXZhdGVf ZGF0YSA9IE5VTEw7CisKKwlpZiAoZnApCisJCXJldCA9IGZjbG9zZShmcCk7CisKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgaW50Citlb2Zfbm9uZShDb21wcmVzc0ZpbGVIYW5kbGUg KkNGSCkKK3sKKwlyZXR1cm4gZmVvZigoRklMRSAqKSBDRkgtPnByaXZhdGVfZGF0YSk7Cit9 CisKK3N0YXRpYyBpbnQKK29wZW5fbm9uZShjb25zdCBjaGFyICpwYXRoLCBpbnQgZmQsIGNv bnN0IGNoYXIgKm1vZGUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCUFzc2VydChD RkgtPnByaXZhdGVfZGF0YSA9PSBOVUxMKTsKKworCWlmIChmZCA+PSAwKQorCQlDRkgtPnBy aXZhdGVfZGF0YSA9IGZkb3BlbihkdXAoZmQpLCBtb2RlKTsKKwllbHNlCisJCUNGSC0+cHJp dmF0ZV9kYXRhID0gZm9wZW4ocGF0aCwgbW9kZSk7CisKKwlpZiAoQ0ZILT5wcml2YXRlX2Rh dGEgPT0gTlVMTCkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dAorb3Blbl93cml0ZV9ub25lKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUs IENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCUFzc2VydChDRkgtPnByaXZhdGVfZGF0 YSA9PSBOVUxMKTsKKworCUNGSC0+cHJpdmF0ZV9kYXRhID0gZm9wZW4ocGF0aCwgbW9kZSk7 CisJaWYgKENGSC0+cHJpdmF0ZV9kYXRhID09IE5VTEwpCisJCXJldHVybiAxOworCisJcmV0 dXJuIDA7Cit9CisKKy8qCisgKiBQdWJsaWMgaW50ZXJmYWNlCisgKi8KKwordm9pZAorSW5p dENvbXByZXNzRmlsZUhhbmRsZU5vbmUoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgsCisJCQkJ CQkgICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMp Cit7CisJQ0ZILT5vcGVuX2Z1bmMgPSBvcGVuX25vbmU7CisJQ0ZILT5vcGVuX3dyaXRlX2Z1 bmMgPSBvcGVuX3dyaXRlX25vbmU7CisJQ0ZILT5yZWFkX2Z1bmMgPSByZWFkX25vbmU7CisJ Q0ZILT53cml0ZV9mdW5jID0gd3JpdGVfbm9uZTsKKwlDRkgtPmdldHNfZnVuYyA9IGdldHNf bm9uZTsKKwlDRkgtPmdldGNfZnVuYyA9IGdldGNfbm9uZTsKKwlDRkgtPmNsb3NlX2Z1bmMg PSBjbG9zZV9ub25lOworCUNGSC0+ZW9mX2Z1bmMgPSBlb2Zfbm9uZTsKKwlDRkgtPmdldF9l cnJvcl9mdW5jID0gZ2V0X2Vycm9yX25vbmU7CisKKwlDRkgtPnByaXZhdGVfZGF0YSA9IE5V TEw7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nfbm9uZS5oIGIv c3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX25vbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uMTQzZTU5OTgxOWQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv YmluL3BnX2R1bXAvY29tcHJlc3Nfbm9uZS5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICoKKyAqIGNvbXByZXNzX25vbmUuaAorICoJIFVuY29tcHJlc3Nl ZCBpbnRlcmZhY2UgdG8gY29tcHJlc3NfaW8uYyByb3V0aW5lcworICoKKyAqIFBvcnRpb25z IENvcHlyaWdodCAoYykgMTk5Ni0yMDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRo ZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJ ICAgc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX25vbmUuaAorICoKKyAqLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICovCisjaWZuZGVmIF9DT01QUkVTU19OT05FX0hfCisjZGVmaW5lIF9DT01Q UkVTU19OT05FX0hfCisKKyNpbmNsdWRlICJjb21wcmVzc19pby5oIgorCitleHRlcm4gdm9p ZCBJbml0Q29tcHJlc3Nvck5vbmUoQ29tcHJlc3NvclN0YXRlICpjcywKKwkJCQkJCQkgICBj b25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOworZXh0 ZXJuIHZvaWQgSW5pdENvbXByZXNzRmlsZUhhbmRsZU5vbmUoQ29tcHJlc3NGaWxlSGFuZGxl ICpDRkgsCisJCQkJCQkJCQkgICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNv bXByZXNzaW9uX3NwZWMpOworCisjZW5kaWYJCQkJCQkJLyogX0NPTVBSRVNTX05PTkVfSF8g Ki8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCBiL3NyYy9iaW4v cGdfZHVtcC9tZXNvbi5idWlsZAppbmRleCBjYTYyZjlhMzc0MC4uODRlOWYwZGVmYTQgMTAw NjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZAorKysgYi9zcmMvYmluL3Bn X2R1bXAvbWVzb24uYnVpbGQKQEAgLTEsNyArMSw5IEBACiAjIENvcHlyaWdodCAoYykgMjAy Mi0yMDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAogCiBwZ19kdW1w X2NvbW1vbl9zb3VyY2VzID0gZmlsZXMoCisgICdjb21wcmVzc19nemlwLmMnLAogICAnY29t cHJlc3NfaW8uYycsCisgICdjb21wcmVzc19ub25lLmMnLAogICAnZHVtcHV0aWxzLmMnLAog ICAncGFyYWxsZWwuYycsCiAgICdwZ19iYWNrdXBfYXJjaGl2ZXIuYycsCmRpZmYgLS1naXQg YS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMgYi9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKaW5kZXggZTAyY2UyMmRiMmUuLjJiYzU2NDhlZDY0 IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKKysr IGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCkBAIC05NSw4ICs5NSw4 IEBAIHN0YXRpYyB2b2lkIGR1bXBfbG9fYnVmKEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0YXRp YyB2b2lkIGR1bXBUaW1lc3RhbXAoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKm1z ZywgdGltZV90IHRpbSk7CiBzdGF0aWMgdm9pZCBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAq QUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCQkJCQkgIGNvbnN0IHBnX2NvbXByZXNzX3Nw ZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7Ci1zdGF0aWMgY2ZwICpTYXZlT3V0cHV0 KEFyY2hpdmVIYW5kbGUgKkFIKTsKLXN0YXRpYyB2b2lkIFJlc3RvcmVPdXRwdXQoQXJjaGl2 ZUhhbmRsZSAqQUgsIGNmcCAqc2F2ZWRPdXRwdXQpOworc3RhdGljIENvbXByZXNzRmlsZUhh bmRsZSAqU2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCk7CitzdGF0aWMgdm9pZCBSZXN0 b3JlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc0ZpbGVIYW5kbGUgKnNhdmVk T3V0cHV0KTsKIAogc3RhdGljIGludAlyZXN0b3JlX3RvY19lbnRyeShBcmNoaXZlSGFuZGxl ICpBSCwgVG9jRW50cnkgKnRlLCBib29sIGlzX3BhcmFsbGVsKTsKIHN0YXRpYyB2b2lkIHJl c3RvcmVfdG9jX2VudHJpZXNfcHJlZm9yayhBcmNoaXZlSGFuZGxlICpBSCwKQEAgLTI3Miw3 ICsyNzIsNyBAQCBDbG9zZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQogCiAJLyogQ2xvc2UgdGhl IG91dHB1dCAqLwogCWVycm5vID0gMDsKLQlyZXMgPSBjZmNsb3NlKEFILT5PRik7CisJcmVz ID0gRW5kQ29tcHJlc3NGaWxlSGFuZGxlKEFILT5PRik7CiAKIAlpZiAocmVzICE9IDApCiAJ CXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2Ugb3V0cHV0IGZpbGU6ICVtIik7CkBAIC0zNTQs NyArMzU0LDcgQEAgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQogCVJlc3RvcmVPcHRp b25zICpyb3B0ID0gQUgtPnB1YmxpYy5yb3B0OwogCWJvb2wJCXBhcmFsbGVsX21vZGU7CiAJ VG9jRW50cnkgICAqdGU7Ci0JY2ZwCQkgICAqc2F2OworCUNvbXByZXNzRmlsZUhhbmRsZSAq c2F2OwogCiAJQUgtPnN0YWdlID0gU1RBR0VfSU5JVElBTElaSU5HOwogCkBAIC0xMTI4LDcg KzExMjgsNyBAQCBQcmludFRPQ1N1bW1hcnkoQXJjaGl2ZSAqQUhYKQogCVRvY0VudHJ5ICAg KnRlOwogCXBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gb3V0X2NvbXByZXNzaW9uX3NwZWMg PSB7MH07CiAJdGVTZWN0aW9uCWN1clNlY3Rpb247Ci0JY2ZwCQkgICAqc2F2OworCUNvbXBy ZXNzRmlsZUhhbmRsZSAqc2F2OwogCWNvbnN0IGNoYXIgKmZtdE5hbWU7CiAJY2hhcgkJc3Rh bXBfc3RyWzY0XTsKIApAQCAtMTE0NCw5ICsxMTQ0LDEwIEBAIFByaW50VE9DU3VtbWFyeShB cmNoaXZlICpBSFgpCiAJCXN0cmNweShzdGFtcF9zdHIsICJbdW5rbm93bl0iKTsKIAogCWFo cHJpbnRmKEFILCAiO1xuOyBBcmNoaXZlIGNyZWF0ZWQgYXQgJXNcbiIsIHN0YW1wX3N0cik7 Ci0JYWhwcmludGYoQUgsICI7ICAgICBkYm5hbWU6ICVzXG47ICAgICBUT0MgRW50cmllczog JWRcbjsgICAgIENvbXByZXNzaW9uOiAlZFxuIiwKKwlhaHByaW50ZihBSCwgIjsgICAgIGRi bmFtZTogJXNcbjsgICAgIFRPQyBFbnRyaWVzOiAlZFxuOyAgICAgQ29tcHJlc3Npb246ICVz XG4iLAogCQkJIHNhbml0aXplX2xpbmUoQUgtPmFyY2hkYm5hbWUsIGZhbHNlKSwKLQkJCSBB SC0+dG9jQ291bnQsIEFILT5jb21wcmVzc2lvbl9zcGVjLmxldmVsKTsKKwkJCSBBSC0+dG9j Q291bnQsCisJCQkgZ2V0X2NvbXByZXNzX2FsZ29yaXRobV9uYW1lKEFILT5jb21wcmVzc2lv bl9zcGVjLmFsZ29yaXRobSkpOwogCiAJc3dpdGNoIChBSC0+Zm9ybWF0KQogCXsKQEAgLTE1 MDMsNiArMTUwNCw3IEBAIHN0YXRpYyB2b2lkCiBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAq QUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNp ZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKIHsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNG SDsKIAljb25zdCBjaGFyICptb2RlOwogCWludAkJCWZuID0gLTE7CiAKQEAgLTE1MjUsMzMg KzE1MjcsMzIgQEAgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpm aWxlbmFtZSwKIAllbHNlCiAJCW1vZGUgPSBQR19CSU5BUllfVzsKIAotCWlmIChmbiA+PSAw KQotCQlBSC0+T0YgPSBjZmRvcGVuKGR1cChmbiksIG1vZGUsIGNvbXByZXNzaW9uX3NwZWMp OwotCWVsc2UKLQkJQUgtPk9GID0gY2ZvcGVuKGZpbGVuYW1lLCBtb2RlLCBjb21wcmVzc2lv bl9zcGVjKTsKKwlDRkggPSBJbml0Q29tcHJlc3NGaWxlSGFuZGxlKGNvbXByZXNzaW9uX3Nw ZWMpOwogCi0JaWYgKCFBSC0+T0YpCisJaWYgKENGSC0+b3Blbl9mdW5jKGZpbGVuYW1lLCBm biwgbW9kZSwgQ0ZIKSkKIAl7CiAJCWlmIChmaWxlbmFtZSkKIAkJCXBnX2ZhdGFsKCJjb3Vs ZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwgZmlsZW5hbWUpOwogCQllbHNl CiAJCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGU6ICVtIik7CiAJfQor CisJQUgtPk9GID0gQ0ZIOwogfQogCi1zdGF0aWMgY2ZwICoKK3N0YXRpYyBDb21wcmVzc0Zp bGVIYW5kbGUgKgogU2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCkKIHsKLQlyZXR1cm4g KGNmcCAqKSBBSC0+T0Y7CisJcmV0dXJuIChDb21wcmVzc0ZpbGVIYW5kbGUgKikgQUgtPk9G OwogfQogCiBzdGF0aWMgdm9pZAotUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwg Y2ZwICpzYXZlZE91dHB1dCkKK1Jlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIENv bXByZXNzRmlsZUhhbmRsZSAqc2F2ZWRPdXRwdXQpCiB7CiAJaW50CQkJcmVzOwogCiAJZXJy bm8gPSAwOwotCXJlcyA9IGNmY2xvc2UoQUgtPk9GKTsKKwlyZXMgPSBFbmRDb21wcmVzc0Zp bGVIYW5kbGUoQUgtPk9GKTsKIAogCWlmIChyZXMgIT0gMCkKIAkJcGdfZmF0YWwoImNvdWxk IG5vdCBjbG9zZSBvdXRwdXQgZmlsZTogJW0iKTsKQEAgLTE2OTAsNyArMTY5MSwxMSBAQCBh aHdyaXRlKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgQXJj aGl2ZUhhbmRsZSAqQUgpCiAJZWxzZSBpZiAoUmVzdG9yaW5nVG9EQihBSCkpCiAJCWJ5dGVz X3dyaXR0ZW4gPSBFeGVjdXRlU3FsQ29tbWFuZEJ1ZigmQUgtPnB1YmxpYywgKGNvbnN0IGNo YXIgKikgcHRyLCBzaXplICogbm1lbWIpOwogCWVsc2UKLQkJYnl0ZXNfd3JpdHRlbiA9IGNm d3JpdGUocHRyLCBzaXplICogbm1lbWIsIEFILT5PRik7CisJeworCQlDb21wcmVzc0ZpbGVI YW5kbGUgKkNGSCA9IChDb21wcmVzc0ZpbGVIYW5kbGUgKikgQUgtPk9GOworCisJCWJ5dGVz X3dyaXR0ZW4gPSBDRkgtPndyaXRlX2Z1bmMocHRyLCBzaXplICogbm1lbWIsIENGSCk7CisJ fQogCiAJaWYgKGJ5dGVzX3dyaXR0ZW4gIT0gc2l6ZSAqIG5tZW1iKQogCQlXUklURV9FUlJP Ul9FWElUOwpAQCAtMjAzMiw2ICsyMDM3LDE4IEBAIFJlYWRTdHIoQXJjaGl2ZUhhbmRsZSAq QUgpCiAJcmV0dXJuIGJ1ZjsKIH0KIAorc3RhdGljIGJvb2wKK19maWxlRXhpc3RzSW5EaXJl Y3RvcnkoY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlzdHJ1 Y3Qgc3RhdCBzdDsKKwljaGFyCQlidWZbTUFYUEdQQVRIXTsKKworCWlmIChzbnByaW50Zihi dWYsIE1BWFBHUEFUSCwgIiVzLyVzIiwgZGlyLCBmaWxlbmFtZSkgPj0gTUFYUEdQQVRIKQor CQlwZ19mYXRhbCgiZGlyZWN0b3J5IG5hbWUgdG9vIGxvbmc6IFwiJXNcIiIsIGRpcik7CisK KwlyZXR1cm4gKHN0YXQoYnVmLCAmc3QpID09IDAgJiYgU19JU1JFRyhzdC5zdF9tb2RlKSk7 Cit9CisKIHN0YXRpYyBpbnQKIF9kaXNjb3ZlckFyY2hpdmVGb3JtYXQoQXJjaGl2ZUhhbmRs ZSAqQUgpCiB7CkBAIC0yMDYyLDI2ICsyMDc5LDEyIEBAIF9kaXNjb3ZlckFyY2hpdmVGb3Jt YXQoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCSAqLwogCQlpZiAoc3RhdChBSC0+ZlNwZWMsICZz dCkgPT0gMCAmJiBTX0lTRElSKHN0LnN0X21vZGUpKQogCQl7Ci0JCQljaGFyCQlidWZbTUFY UEdQQVRIXTsKLQotCQkJaWYgKHNucHJpbnRmKGJ1ZiwgTUFYUEdQQVRILCAiJXMvdG9jLmRh dCIsIEFILT5mU3BlYykgPj0gTUFYUEdQQVRIKQotCQkJCXBnX2ZhdGFsKCJkaXJlY3Rvcnkg bmFtZSB0b28gbG9uZzogXCIlc1wiIiwKLQkJCQkJCSBBSC0+ZlNwZWMpOwotCQkJaWYgKHN0 YXQoYnVmLCAmc3QpID09IDAgJiYgU19JU1JFRyhzdC5zdF9tb2RlKSkKLQkJCXsKLQkJCQlB SC0+Zm9ybWF0ID0gYXJjaERpcmVjdG9yeTsKKwkJCUFILT5mb3JtYXQgPSBhcmNoRGlyZWN0 b3J5OworCQkJaWYgKF9maWxlRXhpc3RzSW5EaXJlY3RvcnkoQUgtPmZTcGVjLCAidG9jLmRh dCIpKQogCQkJCXJldHVybiBBSC0+Zm9ybWF0OwotCQkJfQotCiAjaWZkZWYgSEFWRV9MSUJa Ci0JCQlpZiAoc25wcmludGYoYnVmLCBNQVhQR1BBVEgsICIlcy90b2MuZGF0Lmd6IiwgQUgt PmZTcGVjKSA+PSBNQVhQR1BBVEgpCi0JCQkJcGdfZmF0YWwoImRpcmVjdG9yeSBuYW1lIHRv byBsb25nOiBcIiVzXCIiLAotCQkJCQkJIEFILT5mU3BlYyk7Ci0JCQlpZiAoc3RhdChidWYs ICZzdCkgPT0gMCAmJiBTX0lTUkVHKHN0LnN0X21vZGUpKQotCQkJewotCQkJCUFILT5mb3Jt YXQgPSBhcmNoRGlyZWN0b3J5OworCQkJaWYgKF9maWxlRXhpc3RzSW5EaXJlY3RvcnkoQUgt PmZTcGVjLCAidG9jLmRhdC5neiIpKQogCQkJCXJldHVybiBBSC0+Zm9ybWF0OwotCQkJfQog I2VuZGlmCiAJCQlwZ19mYXRhbCgiZGlyZWN0b3J5IFwiJXNcIiBkb2VzIG5vdCBhcHBlYXIg dG8gYmUgYSB2YWxpZCBhcmNoaXZlIChcInRvYy5kYXRcIiBkb2VzIG5vdCBleGlzdCkiLAog CQkJCQkgQUgtPmZTcGVjKTsKQEAgLTIxNzksNiArMjE4Miw3IEBAIF9hbGxvY0FIKGNvbnN0 IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZlRm9ybWF0IGZtdCwKIAkJIFNldHVwV29y a2VyUHRyVHlwZSBzZXR1cFdvcmtlclB0cikKIHsKIAlBcmNoaXZlSGFuZGxlICpBSDsKKwlD b21wcmVzc0ZpbGVIYW5kbGUgKkNGSDsKIAlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIG91 dF9jb21wcmVzc19zcGVjID0gezB9OwogCiAJcGdfbG9nX2RlYnVnKCJhbGxvY2F0aW5nIEFI IGZvciAlcywgZm9ybWF0ICVkIiwKQEAgLTIyMzQsNyArMjIzOCwxMCBAQCBfYWxsb2NBSChj b25zdCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQsCiAKIAkvKiBP cGVuIHN0ZG91dCB3aXRoIG5vIGNvbXByZXNzaW9uIGZvciBBSCBvdXRwdXQgaGFuZGxlICov CiAJb3V0X2NvbXByZXNzX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsK LQlBSC0+T0YgPSBjZmRvcGVuKGR1cChmaWxlbm8oc3Rkb3V0KSksIFBHX0JJTkFSWV9BLCBv dXRfY29tcHJlc3Nfc3BlYyk7CisJQ0ZIID0gSW5pdENvbXByZXNzRmlsZUhhbmRsZShvdXRf Y29tcHJlc3Nfc3BlYyk7CisJaWYgKENGSC0+b3Blbl9mdW5jKE5VTEwsIGZpbGVubyhzdGRv dXQpLCBQR19CSU5BUllfQSwgQ0ZIKSkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIHN0 ZG91dCBmb3IgYXBwZW5kaW5nOiAlbSIpOworCUFILT5PRiA9IENGSDsKIAogCS8qCiAJICog T24gV2luZG93cywgd2UgbmVlZCB0byB1c2UgYmluYXJ5IG1vZGUgdG8gcmVhZC93cml0ZSBu b24tdGV4dCBmaWxlcywKQEAgLTM2NDYsMTIgKzM2NTMsNyBAQCBXcml0ZUhlYWQoQXJjaGl2 ZUhhbmRsZSAqQUgpCiAJQUgtPldyaXRlQnl0ZVB0cihBSCwgQUgtPmludFNpemUpOwogCUFI LT5Xcml0ZUJ5dGVQdHIoQUgsIEFILT5vZmZTaXplKTsKIAlBSC0+V3JpdGVCeXRlUHRyKEFI LCBBSC0+Zm9ybWF0KTsKLQkvKgotCSAqIEZvciBub3cgdGhlIGNvbXByZXNzaW9uIHR5cGUg aXMgaW1wbGllZCBieSB0aGUgbGV2ZWwuICBUaGlzIHdpbGwgbmVlZAotCSAqIHRvIGNoYW5n ZSBvbmNlIHN1cHBvcnQgZm9yIG1vcmUgY29tcHJlc3Npb24gYWxnb3JpdGhtcyBpcyBhZGRl ZCwKLQkgKiByZXF1aXJpbmcgYSBmb3JtYXQgYnVtcC4KLQkgKi8KLQlXcml0ZUludChBSCwg QUgtPmNvbXByZXNzaW9uX3NwZWMubGV2ZWwpOworCUFILT5Xcml0ZUJ5dGVQdHIoQUgsIEFI LT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSk7CiAJY3J0bSA9ICpsb2NhbHRpbWUoJkFI LT5jcmVhdGVEYXRlKTsKIAlXcml0ZUludChBSCwgY3J0bS50bV9zZWMpOwogCVdyaXRlSW50 KEFILCBjcnRtLnRtX21pbik7CkBAIC0zNzIzLDEwICszNzI1LDExIEBAIFJlYWRIZWFkKEFy Y2hpdmVIYW5kbGUgKkFIKQogCQlwZ19mYXRhbCgiZXhwZWN0ZWQgZm9ybWF0ICglZCkgZGlm ZmVycyBmcm9tIGZvcm1hdCBmb3VuZCBpbiBmaWxlICglZCkiLAogCQkJCSBBSC0+Zm9ybWF0 LCBmbXQpOwogCi0JLyogR3Vlc3MgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCBiYXNlZCBvbiB0 aGUgbGV2ZWwgKi8KLQlBSC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPSBQR19DT01Q UkVTU0lPTl9OT05FOwotCWlmIChBSC0+dmVyc2lvbiA+PSBLX1ZFUlNfMV8yKQorCWlmIChB SC0+dmVyc2lvbiA+PSBLX1ZFUlNfMV8xNSkKKwkJQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxn b3JpdGhtID0gQUgtPlJlYWRCeXRlUHRyKEFIKTsKKwllbHNlIGlmIChBSC0+dmVyc2lvbiA+ PSBLX1ZFUlNfMV8yKQogCXsKKwkJLyogR3Vlc3MgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCBi YXNlZCBvbiB0aGUgbGV2ZWwgKi8KIAkJaWYgKEFILT52ZXJzaW9uIDwgS19WRVJTXzFfNCkK IAkJCUFILT5jb21wcmVzc2lvbl9zcGVjLmxldmVsID0gQUgtPlJlYWRCeXRlUHRyKEFIKTsK IAkJZWxzZQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZl ci5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCmluZGV4IDQ3MjVl NDk3NDdiLi4xOGIzOGMxN2FiYyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2Jh Y2t1cF9hcmNoaXZlci5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2 ZXIuaApAQCAtNjUsMTAgKzY1LDEzIEBACiAjZGVmaW5lIEtfVkVSU18xXzEzIE1BS0VfQVJD SElWRV9WRVJTSU9OKDEsIDEzLCAwKQkvKiBjaGFuZ2Ugc2VhcmNoX3BhdGgKIAkJCQkJCQkJ CQkJCQkgKiBiZWhhdmlvciAqLwogI2RlZmluZSBLX1ZFUlNfMV8xNCBNQUtFX0FSQ0hJVkVf VkVSU0lPTigxLCAxNCwgMCkJLyogYWRkIHRhYmxlYW0gKi8KKyNkZWZpbmUgS19WRVJTXzFf MTUgTUFLRV9BUkNISVZFX1ZFUlNJT04oMSwgMTUsIDApCS8qIGFkZAorCQkJCQkJCQkJCQkJ CSAqIGNvbXByZXNzaW9uX2FsZ29yaXRobQorCQkJCQkJCQkJCQkJCSAqIGluIGhlYWRlciAq LwogCiAvKiBDdXJyZW50IGFyY2hpdmUgdmVyc2lvbiBudW1iZXIgKHRoZSBmb3JtYXQgd2Ug Y2FuIG91dHB1dCkgKi8KICNkZWZpbmUgS19WRVJTX01BSk9SIDEKLSNkZWZpbmUgS19WRVJT X01JTk9SIDE0CisjZGVmaW5lIEtfVkVSU19NSU5PUiAxNQogI2RlZmluZSBLX1ZFUlNfUkVW IDAKICNkZWZpbmUgS19WRVJTX1NFTEYgTUFLRV9BUkNISVZFX1ZFUlNJT04oS19WRVJTX01B Sk9SLCBLX1ZFUlNfTUlOT1IsIEtfVkVSU19SRVYpCiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXBfY3VzdG9tLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3Vw X2N1c3RvbS5jCmluZGV4IDc1MjkzNjdhN2I5Li5iNTc2YjI5OTI0MCAxMDA2NDQKLS0tIGEv c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9jdXN0b20uYworKysgYi9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX2N1c3RvbS5jCkBAIC0yOTgsNyArMjk4LDkgQEAgX1N0YXJ0RGF0YShB cmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQogCV9Xcml0ZUJ5dGUoQUgsIEJMS19E QVRBKTsJLyogQmxvY2sgdHlwZSAqLwogCVdyaXRlSW50KEFILCB0ZS0+ZHVtcElkKTsJLyog Rm9yIHNhbml0eSBjaGVjayAqLwogCi0JY3R4LT5jcyA9IEFsbG9jYXRlQ29tcHJlc3NvcihB SC0+Y29tcHJlc3Npb25fc3BlYywgX0N1c3RvbVdyaXRlRnVuYyk7CisJY3R4LT5jcyA9IEFs bG9jYXRlQ29tcHJlc3NvcihBSC0+Y29tcHJlc3Npb25fc3BlYywKKwkJCQkJCQkJIE5VTEws CisJCQkJCQkJCSBfQ3VzdG9tV3JpdGVGdW5jKTsKIH0KIAogLyoKQEAgLTMxNywxNSArMzE5 LDE1IEBAIF9Xcml0ZURhdGEoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IHZvaWQgKmRhdGEs IHNpemVfdCBkTGVuKQogCUNvbXByZXNzb3JTdGF0ZSAqY3MgPSBjdHgtPmNzOwogCiAJaWYg KGRMZW4gPiAwKQotCQkvKiBXcml0ZURhdGFUb0FyY2hpdmUoKSBpbnRlcm5hbGx5IHRocm93 cyB3cml0ZSBlcnJvcnMgKi8KLQkJV3JpdGVEYXRhVG9BcmNoaXZlKEFILCBjcywgZGF0YSwg ZExlbik7CisJCS8qIHdyaXRlRGF0YSgpIGludGVybmFsbHkgdGhyb3dzIHdyaXRlIGVycm9y cyAqLworCQljcy0+d3JpdGVEYXRhKEFILCBjcywgZGF0YSwgZExlbik7CiB9CiAKIC8qCiAg KiBDYWxsZWQgYnkgdGhlIGFyY2hpdmVyIHdoZW4gYSBkdW1wZXIncyAnRGF0YUR1bXBlcicg cm91dGluZSBoYXMKICAqIGZpbmlzaGVkLgogICoKLSAqIE9wdGlvbmFsLgorICogTWFuZGF0 b3J5LgogICovCiBzdGF0aWMgdm9pZAogX0VuZERhdGEoQXJjaGl2ZUhhbmRsZSAqQUgsIFRv Y0VudHJ5ICp0ZSkKQEAgLTMzMyw2ICszMzUsOCBAQCBfRW5kRGF0YShBcmNoaXZlSGFuZGxl ICpBSCwgVG9jRW50cnkgKnRlKQogCWxjbENvbnRleHQgKmN0eCA9IChsY2xDb250ZXh0ICop IEFILT5mb3JtYXREYXRhOwogCiAJRW5kQ29tcHJlc3NvcihBSCwgY3R4LT5jcyk7CisJY3R4 LT5jcyA9IE5VTEw7CisKIAkvKiBTZW5kIHRoZSBlbmQgbWFya2VyICovCiAJV3JpdGVJbnQo QUgsIDApOwogfQpAQCAtMzc3LDcgKzM4MSw5IEBAIF9TdGFydExPKEFyY2hpdmVIYW5kbGUg KkFILCBUb2NFbnRyeSAqdGUsIE9pZCBvaWQpCiAKIAlXcml0ZUludChBSCwgb2lkKTsKIAot CWN0eC0+Y3MgPSBBbGxvY2F0ZUNvbXByZXNzb3IoQUgtPmNvbXByZXNzaW9uX3NwZWMsIF9D dXN0b21Xcml0ZUZ1bmMpOworCWN0eC0+Y3MgPSBBbGxvY2F0ZUNvbXByZXNzb3IoQUgtPmNv bXByZXNzaW9uX3NwZWMsCisJCQkJCQkJCSBOVUxMLAorCQkJCQkJCQkgX0N1c3RvbVdyaXRl RnVuYyk7CiB9CiAKIC8qCkBAIC01NjYsNyArNTcyLDEyIEBAIF9QcmludFRvY0RhdGEoQXJj aGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkKIHN0YXRpYyB2b2lkCiBfUHJpbnREYXRh KEFyY2hpdmVIYW5kbGUgKkFIKQogewotCVJlYWREYXRhRnJvbUFyY2hpdmUoQUgsIEFILT5j b21wcmVzc2lvbl9zcGVjLCBfQ3VzdG9tUmVhZEZ1bmMpOworCUNvbXByZXNzb3JTdGF0ZSAq Y3M7CisKKwljcyA9IEFsbG9jYXRlQ29tcHJlc3NvcihBSC0+Y29tcHJlc3Npb25fc3BlYywK KwkJCQkJCQlfQ3VzdG9tUmVhZEZ1bmMsIE5VTEwpOworCWNzLT5yZWFkRGF0YShBSCwgY3Mp OworCUVuZENvbXByZXNzb3IoQUgsIGNzKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTk3Nyw3 ICs5ODgsNyBAQCBfcmVhZEJsb2NrSGVhZGVyKEFyY2hpdmVIYW5kbGUgKkFILCBpbnQgKnR5 cGUsIGludCAqaWQpCiB9CiAKIC8qCi0gKiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgV3JpdGVE YXRhVG9BcmNoaXZlLiBXcml0ZXMgb25lIGJsb2NrIG9mIChjb21wcmVzc2VkKQorICogQ2Fs bGJhY2sgZnVuY3Rpb24gZm9yIHdyaXRlRGF0YS4gV3JpdGVzIG9uZSBibG9jayBvZiAoY29t cHJlc3NlZCkKICAqIGRhdGEgdG8gdGhlIGFyY2hpdmUuCiAgKi8KIHN0YXRpYyB2b2lkCkBA IC05OTIsNyArMTAwMyw3IEBAIF9DdXN0b21Xcml0ZUZ1bmMoQXJjaGl2ZUhhbmRsZSAqQUgs IGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIH0KIAogLyoKLSAqIENhbGxiYWNrIGZ1 bmN0aW9uIGZvciBSZWFkRGF0YUZyb21BcmNoaXZlLiBUbyBrZWVwIHRoaW5ncyBzaW1wbGUs IHdlCisgKiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgcmVhZERhdGEuIFRvIGtlZXAgdGhpbmdz IHNpbXBsZSwgd2UKICAqIGFsd2F5cyByZWFkIG9uZSBjb21wcmVzc2VkIGJsb2NrIGF0IGEg dGltZS4KICAqLwogc3RhdGljIHNpemVfdApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cF9kaXJlY3RvcnkuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfZGly ZWN0b3J5LmMKaW5kZXggNjgwMGMzY2NlZWYuLmEyZjg4OTk1YzAwIDEwMDY0NAotLS0gYS9z cmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2RpcmVjdG9yeS5jCisrKyBiL3NyYy9iaW4vcGdf ZHVtcC9wZ19iYWNrdXBfZGlyZWN0b3J5LmMKQEAgLTUwLDkgKzUwLDggQEAgdHlwZWRlZiBz dHJ1Y3QKIAkgKi8KIAljaGFyCSAgICpkaXJlY3Rvcnk7CiAKLQljZnAJCSAgICpkYXRhRkg7 CQkJLyogY3VycmVudGx5IG9wZW4gZGF0YSBmaWxlICovCi0KLQljZnAJCSAgICpMT3NUb2NG SDsJCS8qIGZpbGUgaGFuZGxlIGZvciBibG9icy50b2MgKi8KKwlDb21wcmVzc0ZpbGVIYW5k bGUgKmRhdGFGSDsgLyogY3VycmVudGx5IG9wZW4gZGF0YSBmaWxlICovCisJQ29tcHJlc3NG aWxlSGFuZGxlICpMT3NUb2NGSDsgLyogZmlsZSBoYW5kbGUgZm9yIGJsb2JzLnRvYyAqLwog CVBhcmFsbGVsU3RhdGUgKnBzdGF0ZTsJCS8qIGZvciBwYXJhbGxlbCBiYWNrdXAgLyByZXN0 b3JlICovCiB9IGxjbENvbnRleHQ7CiAKQEAgLTE5OCwxMSArMTk3LDExIEBAIEluaXRBcmNo aXZlRm10X0RpcmVjdG9yeShBcmNoaXZlSGFuZGxlICpBSCkKIAllbHNlCiAJewkJCQkJCQkv KiBSZWFkIE1vZGUgKi8KIAkJY2hhcgkJZm5hbWVbTUFYUEdQQVRIXTsKLQkJY2ZwCQkgICAq dG9jRkg7CisJCUNvbXByZXNzRmlsZUhhbmRsZSAqdG9jRkg7CiAKIAkJc2V0RmlsZVBhdGgo QUgsIGZuYW1lLCAidG9jLmRhdCIpOwogCi0JCXRvY0ZIID0gY2ZvcGVuX3JlYWQoZm5hbWUs IFBHX0JJTkFSWV9SKTsKKwkJdG9jRkggPSBJbml0RGlzY292ZXJDb21wcmVzc0ZpbGVIYW5k bGUoZm5hbWUsIFBHX0JJTkFSWV9SKTsKIAkJaWYgKHRvY0ZIID09IE5VTEwpCiAJCQlwZ19m YXRhbCgiY291bGQgbm90IG9wZW4gaW5wdXQgZmlsZSBcIiVzXCI6ICVtIiwgZm5hbWUpOwog CkBAIC0yMTgsNyArMjE3LDcgQEAgSW5pdEFyY2hpdmVGbXRfRGlyZWN0b3J5KEFyY2hpdmVI YW5kbGUgKkFIKQogCQlSZWFkVG9jKEFIKTsKIAogCQkvKiBOb3RoaW5nIGVsc2UgaW4gdGhl IGZpbGUsIHNvIGNsb3NlIGl0IGFnYWluLi4uICovCi0JCWlmIChjZmNsb3NlKHRvY0ZIKSAh PSAwKQorCQlpZiAoRW5kQ29tcHJlc3NGaWxlSGFuZGxlKHRvY0ZIKSAhPSAwKQogCQkJcGdf ZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBUT0MgZmlsZTogJW0iKTsKIAkJY3R4LT5kYXRhRkgg PSBOVUxMOwogCX0KQEAgLTMyNyw5ICszMjYsOSBAQCBfU3RhcnREYXRhKEFyY2hpdmVIYW5k bGUgKkFILCBUb2NFbnRyeSAqdGUpCiAKIAlzZXRGaWxlUGF0aChBSCwgZm5hbWUsIHRjdHgt PmZpbGVuYW1lKTsKIAotCWN0eC0+ZGF0YUZIID0gY2ZvcGVuX3dyaXRlKGZuYW1lLCBQR19C SU5BUllfVywKLQkJCQkJCQkgICBBSC0+Y29tcHJlc3Npb25fc3BlYyk7Ci0JaWYgKGN0eC0+ ZGF0YUZIID09IE5VTEwpCisJY3R4LT5kYXRhRkggPSBJbml0Q29tcHJlc3NGaWxlSGFuZGxl KEFILT5jb21wcmVzc2lvbl9zcGVjKTsKKworCWlmIChjdHgtPmRhdGFGSC0+b3Blbl93cml0 ZV9mdW5jKGZuYW1lLCBQR19CSU5BUllfVywgY3R4LT5kYXRhRkgpKQogCQlwZ19mYXRhbCgi Y291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsIGZuYW1lKTsKIH0KIApA QCAtMzQ2LDE1ICszNDUsMTYgQEAgc3RhdGljIHZvaWQKIF9Xcml0ZURhdGEoQXJjaGl2ZUhh bmRsZSAqQUgsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVuKQogewogCWxjbENvbnRl eHQgKmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOworCUNvbXByZXNzRmls ZUhhbmRsZSAqQ0ZIID0gY3R4LT5kYXRhRkg7CiAKIAllcnJubyA9IDA7Ci0JaWYgKGRMZW4g PiAwICYmIGNmd3JpdGUoZGF0YSwgZExlbiwgY3R4LT5kYXRhRkgpICE9IGRMZW4pCisJaWYg KGRMZW4gPiAwICYmIENGSC0+d3JpdGVfZnVuYyhkYXRhLCBkTGVuLCBDRkgpICE9IGRMZW4p CiAJewogCQkvKiBpZiB3cml0ZSBkaWRuJ3Qgc2V0IGVycm5vLCBhc3N1bWUgcHJvYmxlbSBp cyBubyBkaXNrIHNwYWNlICovCiAJCWlmIChlcnJubyA9PSAwKQogCQkJZXJybm8gPSBFTk9T UEM7CiAJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgd3JpdGUgdG8gb3V0cHV0IGZpbGU6ICVzIiwK LQkJCQkgZ2V0X2NmcF9lcnJvcihjdHgtPmRhdGFGSCkpOworCQkJCSBDRkgtPmdldF9lcnJv cl9mdW5jKENGSCkpOwogCX0KIH0KIApAQCAtMzcwLDcgKzM3MCw3IEBAIF9FbmREYXRhKEFy Y2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUpCiAJbGNsQ29udGV4dCAqY3R4ID0gKGxj bENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7CiAKIAkvKiBDbG9zZSB0aGUgZmlsZSAqLwot CWlmIChjZmNsb3NlKGN0eC0+ZGF0YUZIKSAhPSAwKQorCWlmIChFbmRDb21wcmVzc0ZpbGVI YW5kbGUoY3R4LT5kYXRhRkgpICE9IDApCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2Ug ZGF0YSBmaWxlOiAlbSIpOwogCiAJY3R4LT5kYXRhRkggPSBOVUxMOwpAQCAtMzg1LDI2ICsz ODUsMjUgQEAgX1ByaW50RmlsZURhdGEoQXJjaGl2ZUhhbmRsZSAqQUgsIGNoYXIgKmZpbGVu YW1lKQogCXNpemVfdAkJY250OwogCWNoYXIJICAgKmJ1ZjsKIAlzaXplX3QJCWJ1ZmxlbjsK LQljZnAJCSAgICpjZnA7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkg7CiAKIAlpZiAoIWZp bGVuYW1lKQogCQlyZXR1cm47CiAKLQljZnAgPSBjZm9wZW5fcmVhZChmaWxlbmFtZSwgUEdf QklOQVJZX1IpOwotCi0JaWYgKCFjZnApCisJQ0ZIID0gSW5pdERpc2NvdmVyQ29tcHJlc3NG aWxlSGFuZGxlKGZpbGVuYW1lLCBQR19CSU5BUllfUik7CisJaWYgKCFDRkgpCiAJCXBnX2Zh dGFsKCJjb3VsZCBub3Qgb3BlbiBpbnB1dCBmaWxlIFwiJXNcIjogJW0iLCBmaWxlbmFtZSk7 CiAKIAlidWYgPSBwZ19tYWxsb2MoWkxJQl9PVVRfU0laRSk7CiAJYnVmbGVuID0gWkxJQl9P VVRfU0laRTsKIAotCXdoaWxlICgoY250ID0gY2ZyZWFkKGJ1ZiwgYnVmbGVuLCBjZnApKSkK Kwl3aGlsZSAoKGNudCA9IENGSC0+cmVhZF9mdW5jKGJ1ZiwgYnVmbGVuLCBDRkgpKSkKIAl7 CiAJCWFod3JpdGUoYnVmLCAxLCBjbnQsIEFIKTsKIAl9CiAKIAlmcmVlKGJ1Zik7Ci0JaWYg KGNmY2xvc2UoY2ZwKSAhPSAwKQorCWlmIChFbmRDb21wcmVzc0ZpbGVIYW5kbGUoQ0ZIKSAh PSAwKQogCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIGRhdGEgZmlsZSBcIiVzXCI6ICVt IiwgZmlsZW5hbWUpOwogfQogCkBAIC00MzUsNiArNDM0LDcgQEAgX0xvYWRMT3MoQXJjaGl2 ZUhhbmRsZSAqQUgpCiB7CiAJT2lkCQkJb2lkOwogCWxjbENvbnRleHQgKmN0eCA9IChsY2xD b250ZXh0ICopIEFILT5mb3JtYXREYXRhOworCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIOwog CWNoYXIJCXRvY2ZuYW1lW01BWFBHUEFUSF07CiAJY2hhcgkJbGluZVtNQVhQR1BBVEhdOwog CkBAIC00NDIsMTQgKzQ0MiwxNCBAQCBfTG9hZExPcyhBcmNoaXZlSGFuZGxlICpBSCkKIAog CXNldEZpbGVQYXRoKEFILCB0b2NmbmFtZSwgImJsb2JzLnRvYyIpOwogCi0JY3R4LT5MT3NU b2NGSCA9IGNmb3Blbl9yZWFkKHRvY2ZuYW1lLCBQR19CSU5BUllfUik7CisJQ0ZIID0gY3R4 LT5MT3NUb2NGSCA9IEluaXREaXNjb3ZlckNvbXByZXNzRmlsZUhhbmRsZSh0b2NmbmFtZSwg UEdfQklOQVJZX1IpOwogCiAJaWYgKGN0eC0+TE9zVG9jRkggPT0gTlVMTCkKIAkJcGdfZmF0 YWwoImNvdWxkIG5vdCBvcGVuIGxhcmdlIG9iamVjdCBUT0MgZmlsZSBcIiVzXCIgZm9yIGlu cHV0OiAlbSIsCiAJCQkJIHRvY2ZuYW1lKTsKIAogCS8qIFJlYWQgdGhlIExPcyBUT0MgZmls ZSBsaW5lLWJ5LWxpbmUsIGFuZCBwcm9jZXNzIGVhY2ggTE8gKi8KLQl3aGlsZSAoKGNmZ2V0 cyhjdHgtPkxPc1RvY0ZILCBsaW5lLCBNQVhQR1BBVEgpKSAhPSBOVUxMKQorCXdoaWxlICgo Q0ZILT5nZXRzX2Z1bmMobGluZSwgTUFYUEdQQVRILCBDRkgpKSAhPSBOVUxMKQogCXsKIAkJ Y2hhcgkJbG9mbmFtZVtNQVhQR1BBVEggKyAxXTsKIAkJY2hhcgkJcGF0aFtNQVhQR1BBVEhd OwpAQCAtNDY0LDExICs0NjQsMTEgQEAgX0xvYWRMT3MoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJ CV9QcmludEZpbGVEYXRhKEFILCBwYXRoKTsKIAkJRW5kUmVzdG9yZUxPKEFILCBvaWQpOwog CX0KLQlpZiAoIWNmZW9mKGN0eC0+TE9zVG9jRkgpKQorCWlmICghQ0ZILT5lb2ZfZnVuYyhD RkgpKQogCQlwZ19mYXRhbCgiZXJyb3IgcmVhZGluZyBsYXJnZSBvYmplY3QgVE9DIGZpbGUg XCIlc1wiIiwKIAkJCQkgdG9jZm5hbWUpOwogCi0JaWYgKGNmY2xvc2UoY3R4LT5MT3NUb2NG SCkgIT0gMCkKKwlpZiAoRW5kQ29tcHJlc3NGaWxlSGFuZGxlKGN0eC0+TE9zVG9jRkgpICE9 IDApCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgbGFyZ2Ugb2JqZWN0IFRPQyBmaWxl IFwiJXNcIjogJW0iLAogCQkJCSB0b2NmbmFtZSk7CiAKQEAgLTQ4OCwxNSArNDg4LDE2IEBA IF9Xcml0ZUJ5dGUoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGludCBpKQogewogCXVuc2ln bmVkIGNoYXIgYyA9ICh1bnNpZ25lZCBjaGFyKSBpOwogCWxjbENvbnRleHQgKmN0eCA9IChs Y2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOworCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZI ID0gY3R4LT5kYXRhRkg7CiAKIAllcnJubyA9IDA7Ci0JaWYgKGNmd3JpdGUoJmMsIDEsIGN0 eC0+ZGF0YUZIKSAhPSAxKQorCWlmIChDRkgtPndyaXRlX2Z1bmMoJmMsIDEsIENGSCkgIT0g MSkKIAl7CiAJCS8qIGlmIHdyaXRlIGRpZG4ndCBzZXQgZXJybm8sIGFzc3VtZSBwcm9ibGVt IGlzIG5vIGRpc2sgc3BhY2UgKi8KIAkJaWYgKGVycm5vID09IDApCiAJCQllcnJubyA9IEVO T1NQQzsKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCB3cml0ZSB0byBvdXRwdXQgZmlsZTogJXMi LAotCQkJCSBnZXRfY2ZwX2Vycm9yKGN0eC0+ZGF0YUZIKSk7CisJCQkJIENGSC0+Z2V0X2Vy cm9yX2Z1bmMoQ0ZIKSk7CiAJfQogCiAJcmV0dXJuIDE7CkBAIC01MTIsOCArNTEzLDkgQEAg c3RhdGljIGludAogX1JlYWRCeXRlKEFyY2hpdmVIYW5kbGUgKkFIKQogewogCWxjbENvbnRl eHQgKmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOworCUNvbXByZXNzRmls ZUhhbmRsZSAqQ0ZIID0gY3R4LT5kYXRhRkg7CiAKLQlyZXR1cm4gY2ZnZXRjKGN0eC0+ZGF0 YUZIKTsKKwlyZXR1cm4gQ0ZILT5nZXRjX2Z1bmMoQ0ZIKTsKIH0KIAogLyoKQEAgLTUyNCwx NSArNTI2LDE2IEBAIHN0YXRpYyB2b2lkCiBfV3JpdGVCdWYoQXJjaGl2ZUhhbmRsZSAqQUgs IGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKIAlsY2xDb250ZXh0ICpjdHggPSAo bGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNG SCA9IGN0eC0+ZGF0YUZIOwogCiAJZXJybm8gPSAwOwotCWlmIChjZndyaXRlKGJ1ZiwgbGVu LCBjdHgtPmRhdGFGSCkgIT0gbGVuKQorCWlmIChDRkgtPndyaXRlX2Z1bmMoYnVmLCBsZW4s IENGSCkgIT0gbGVuKQogCXsKIAkJLyogaWYgd3JpdGUgZGlkbid0IHNldCBlcnJubywgYXNz dW1lIHByb2JsZW0gaXMgbm8gZGlzayBzcGFjZSAqLwogCQlpZiAoZXJybm8gPT0gMCkKIAkJ CWVycm5vID0gRU5PU1BDOwogCQlwZ19mYXRhbCgiY291bGQgbm90IHdyaXRlIHRvIG91dHB1 dCBmaWxlOiAlcyIsCi0JCQkJIGdldF9jZnBfZXJyb3IoY3R4LT5kYXRhRkgpKTsKKwkJCQkg Q0ZILT5nZXRfZXJyb3JfZnVuYyhDRkgpKTsKIAl9CiB9CiAKQEAgLTU0NSwxMiArNTQ4LDEz IEBAIHN0YXRpYyB2b2lkCiBfUmVhZEJ1ZihBcmNoaXZlSGFuZGxlICpBSCwgdm9pZCAqYnVm LCBzaXplX3QgbGVuKQogewogCWxjbENvbnRleHQgKmN0eCA9IChsY2xDb250ZXh0ICopIEFI LT5mb3JtYXREYXRhOworCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIID0gY3R4LT5kYXRhRkg7 CiAKIAkvKgotCSAqIElmIHRoZXJlIHdhcyBhbiBJL08gZXJyb3IsIHdlIGFscmVhZHkgZXhp dGVkIGluIGNmcmVhZCgpLCBzbyBoZXJlIHdlCisJICogSWYgdGhlcmUgd2FzIGFuIEkvTyBl cnJvciwgd2UgYWxyZWFkeSBleGl0ZWQgaW4gcmVhZEYoKSwgc28gaGVyZSB3ZQogCSAqIGV4 aXQgb24gc2hvcnQgcmVhZHMuCiAJICovCi0JaWYgKGNmcmVhZChidWYsIGxlbiwgY3R4LT5k YXRhRkgpICE9IGxlbikKKwlpZiAoQ0ZILT5yZWFkX2Z1bmMoYnVmLCBsZW4sIENGSCkgIT0g bGVuKQogCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiBlbmQg b2YgZmlsZSIpOwogfQogCkBAIC01NzMsNyArNTc3LDcgQEAgX0Nsb3NlQXJjaGl2ZShBcmNo aXZlSGFuZGxlICpBSCkKIAogCWlmIChBSC0+bW9kZSA9PSBhcmNoTW9kZVdyaXRlKQogCXsK LQkJY2ZwCQkgICAqdG9jRkg7CisJCUNvbXByZXNzRmlsZUhhbmRsZSAqdG9jRkg7CiAJCXBn X2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyA9IHswfTsKIAkJY2hh cgkJZm5hbWVbTUFYUEdQQVRIXTsKIApAQCAtNTg0LDggKzU4OCw4IEBAIF9DbG9zZUFyY2hp dmUoQXJjaGl2ZUhhbmRsZSAqQUgpCiAKIAkJLyogVGhlIFRPQyBpcyBhbHdheXMgY3JlYXRl ZCB1bmNvbXByZXNzZWQgKi8KIAkJY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPSBQR19D T01QUkVTU0lPTl9OT05FOwotCQl0b2NGSCA9IGNmb3Blbl93cml0ZShmbmFtZSwgUEdfQklO QVJZX1csIGNvbXByZXNzaW9uX3NwZWMpOwotCQlpZiAodG9jRkggPT0gTlVMTCkKKwkJdG9j RkggPSBJbml0Q29tcHJlc3NGaWxlSGFuZGxlKGNvbXByZXNzaW9uX3NwZWMpOworCQlpZiAo dG9jRkgtPm9wZW5fd3JpdGVfZnVuYyhmbmFtZSwgUEdfQklOQVJZX1csIHRvY0ZIKSkKIAkJ CXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwgZm5h bWUpOwogCQljdHgtPmRhdGFGSCA9IHRvY0ZIOwogCkBAIC01OTgsNyArNjAyLDcgQEAgX0Ns b3NlQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCkKIAkJV3JpdGVIZWFkKEFIKTsKIAkJQUgt PmZvcm1hdCA9IGFyY2hEaXJlY3Rvcnk7CiAJCVdyaXRlVG9jKEFIKTsKLQkJaWYgKGNmY2xv c2UodG9jRkgpICE9IDApCisJCWlmIChFbmRDb21wcmVzc0ZpbGVIYW5kbGUodG9jRkgpICE9 IDApCiAJCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIFRPQyBmaWxlOiAlbSIpOwogCQlX cml0ZURhdGFDaHVua3MoQUgsIGN0eC0+cHN0YXRlKTsKIApAQCAtNjQ5LDggKzY1Myw4IEBA IF9TdGFydExPcyhBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQogCiAJLyogVGhl IExPIFRPQyBmaWxlIGlzIG5ldmVyIGNvbXByZXNzZWQgKi8KIAljb21wcmVzc2lvbl9zcGVj LmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX05PTkU7Ci0JY3R4LT5MT3NUb2NGSCA9IGNm b3Blbl93cml0ZShmbmFtZSwgImFiIiwgY29tcHJlc3Npb25fc3BlYyk7Ci0JaWYgKGN0eC0+ TE9zVG9jRkggPT0gTlVMTCkKKwljdHgtPkxPc1RvY0ZIID0gSW5pdENvbXByZXNzRmlsZUhh bmRsZShjb21wcmVzc2lvbl9zcGVjKTsKKwlpZiAoY3R4LT5MT3NUb2NGSC0+b3Blbl93cml0 ZV9mdW5jKGZuYW1lLCAiYWIiLCBjdHgtPkxPc1RvY0ZIKSkKIAkJcGdfZmF0YWwoImNvdWxk IG5vdCBvcGVuIG91dHB1dCBmaWxlIFwiJXNcIjogJW0iLCBmbmFtZSk7CiB9CiAKQEAgLTY2 Nyw5ICs2NzEsOCBAQCBfU3RhcnRMTyhBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRl LCBPaWQgb2lkKQogCiAJc25wcmludGYoZm5hbWUsIE1BWFBHUEFUSCwgIiVzL2Jsb2JfJXUu ZGF0IiwgY3R4LT5kaXJlY3RvcnksIG9pZCk7CiAKLQljdHgtPmRhdGFGSCA9IGNmb3Blbl93 cml0ZShmbmFtZSwgUEdfQklOQVJZX1csIEFILT5jb21wcmVzc2lvbl9zcGVjKTsKLQotCWlm IChjdHgtPmRhdGFGSCA9PSBOVUxMKQorCWN0eC0+ZGF0YUZIID0gSW5pdENvbXByZXNzRmls ZUhhbmRsZShBSC0+Y29tcHJlc3Npb25fc3BlYyk7CisJaWYgKGN0eC0+ZGF0YUZILT5vcGVu X3dyaXRlX2Z1bmMoZm5hbWUsIFBHX0JJTkFSWV9XLCBjdHgtPmRhdGFGSCkpCiAJCXBnX2Zh dGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwgZm5hbWUpOwog fQogCkBAIC02ODIsMTggKzY4NSwxOSBAQCBzdGF0aWMgdm9pZAogX0VuZExPKEFyY2hpdmVI YW5kbGUgKkFILCBUb2NFbnRyeSAqdGUsIE9pZCBvaWQpCiB7CiAJbGNsQ29udGV4dCAqY3R4 ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7CisJQ29tcHJlc3NGaWxlSGFuZGxl ICpDRkggPSBjdHgtPkxPc1RvY0ZIOwogCWNoYXIJCWJ1Zls1MF07CiAJaW50CQkJbGVuOwog Ci0JLyogQ2xvc2UgdGhlIExPIGRhdGEgZmlsZSBpdHNlbGYgKi8KLQlpZiAoY2ZjbG9zZShj dHgtPmRhdGFGSCkgIT0gMCkKLQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBMTyBkYXRh IGZpbGU6ICVtIik7CisJLyogQ2xvc2UgdGhlIEJMT0IgZGF0YSBmaWxlIGl0c2VsZiAqLwor CWlmIChFbmRDb21wcmVzc0ZpbGVIYW5kbGUoY3R4LT5kYXRhRkgpICE9IDApCisJCXBnX2Zh dGFsKCJjb3VsZCBub3QgY2xvc2UgYmxvYiBkYXRhIGZpbGU6ICVtIik7CiAJY3R4LT5kYXRh RkggPSBOVUxMOwogCiAJLyogcmVnaXN0ZXIgdGhlIExPIGluIGJsb2JzLnRvYyAqLwogCWxl biA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIldSBibG9iXyV1LmRhdFxuIiwgb2lk LCBvaWQpOwotCWlmIChjZndyaXRlKGJ1ZiwgbGVuLCBjdHgtPkxPc1RvY0ZIKSAhPSBsZW4p Ci0JCXBnX2ZhdGFsKCJjb3VsZCBub3Qgd3JpdGUgdG8gTE9zIFRPQyBmaWxlIik7CisJaWYg KENGSC0+d3JpdGVfZnVuYyhidWYsIGxlbiwgQ0ZIKSAhPSBsZW4pCisJCXBnX2ZhdGFsKCJj b3VsZCBub3Qgd3JpdGUgdG8gYmxvYnMgVE9DIGZpbGUiKTsKIH0KIAogLyoKQEAgLTcwNiw4 ICs3MTAsOCBAQCBfRW5kTE9zKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUpCiB7 CiAJbGNsQ29udGV4dCAqY3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7CiAK LQlpZiAoY2ZjbG9zZShjdHgtPkxPc1RvY0ZIKSAhPSAwKQotCQlwZ19mYXRhbCgiY291bGQg bm90IGNsb3NlIExPcyBUT0MgZmlsZTogJW0iKTsKKwlpZiAoRW5kQ29tcHJlc3NGaWxlSGFu ZGxlKGN0eC0+TE9zVG9jRkgpICE9IDApCisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2Ug YmxvYnMgVE9DIGZpbGU6ICVtIik7CiAJY3R4LT5MT3NUb2NGSCA9IE5VTEw7CiB9CiAKZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsIGIvc3JjL2Jpbi9w Z19kdW1wL3QvMDAyX3BnX2R1bXAucGwKaW5kZXggZDkyMjQ3YzkxNWMuLjc4NDU0OTI4Y2Nh IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbAorKysgYi9z cmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbApAQCAtOTQsNyArOTQsNyBAQCBteSAl cGdkdW1wX3J1bnMgPSAoCiAJCQljb21tYW5kID0+IFsKIAkJCQkncGdfcmVzdG9yZScsICct bCcsICIkdGVtcGRpci9jb21wcmVzc2lvbl9nemlwX2N1c3RvbS5kdW1wIiwKIAkJCV0sCi0J CQlleHBlY3RlZCA9PiBxci9Db21wcmVzc2lvbjogMS8sCisJCQlleHBlY3RlZCA9PiBxci9D b21wcmVzc2lvbjogZ3ppcC8sCiAJCQluYW1lICAgICA9PiAnZGF0YSBjb250ZW50IGlzIGd6 aXAtY29tcHJlc3NlZCcKIAkJfSwKIAl9LApAQCAtMjM5LDggKzIzOSw4IEBAIG15ICVwZ2R1 bXBfcnVucyA9ICgKIAkJCWNvbW1hbmQgPT4KIAkJCSAgWyAncGdfcmVzdG9yZScsICctbCcs ICIkdGVtcGRpci9kZWZhdWx0c19jdXN0b21fZm9ybWF0LmR1bXAiLCBdLAogCQkJZXhwZWN0 ZWQgPT4gJHN1cHBvcnRzX2d6aXAgPwotCQkJcXIvQ29tcHJlc3Npb246IC0xLyA6Ci0JCQlx ci9Db21wcmVzc2lvbjogMC8sCisJCQlxci9Db21wcmVzc2lvbjogZ3ppcC8gOgorCQkJcXIv Q29tcHJlc3Npb246IG5vbmUvLAogCQkJbmFtZSA9PiAnZGF0YSBjb250ZW50IGlzIGd6aXAt Y29tcHJlc3NlZCBieSBkZWZhdWx0IGlmIGF2YWlsYWJsZScsCiAJCX0sCiAJfSwKQEAgLTI2 NCw4ICsyNjQsOCBAQCBteSAlcGdkdW1wX3J1bnMgPSAoCiAJCQljb21tYW5kID0+CiAJCQkg IFsgJ3BnX3Jlc3RvcmUnLCAnLWwnLCAiJHRlbXBkaXIvZGVmYXVsdHNfZGlyX2Zvcm1hdCIs IF0sCiAJCQlleHBlY3RlZCA9PiAkc3VwcG9ydHNfZ3ppcCA/Ci0JCQlxci9Db21wcmVzc2lv bjogLTEvIDoKLQkJCXFyL0NvbXByZXNzaW9uOiAwLywKKwkJCXFyL0NvbXByZXNzaW9uOiBn emlwLyA6CisJCQlxci9Db21wcmVzc2lvbjogbm9uZS8sCiAJCQluYW1lID0+ICdkYXRhIGNv bnRlbnQgaXMgZ3ppcC1jb21wcmVzc2VkIGJ5IGRlZmF1bHQnLAogCQl9LAogCQlnbG9iX3Bh dHRlcm5zID0+IFsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1vbi9jb21wcmVzc2lv bi5oIGIvc3JjL2luY2x1ZGUvY29tbW9uL2NvbXByZXNzaW9uLmgKaW5kZXggOWE0NzFlNDBh YWIuLmQ0NGViYjA2Y2MyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tb24vY29tcHJl c3Npb24uaAorKysgYi9zcmMvaW5jbHVkZS9jb21tb24vY29tcHJlc3Npb24uaApAQCAtMTQs NiArMTQsMTAgQEAKICNpZm5kZWYgUEdfQ09NUFJFU1NJT05fSAogI2RlZmluZSBQR19DT01Q UkVTU0lPTl9ICiAKKy8qCisgKiBUaGVzZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiBkaXNjLCBm b3IgZXhhbXBsZSBpbiBmaWxlcyBnZW5lcmF0ZWQgYnkgcGdfZHVtcC4KKyAqIENyZWF0ZSB0 aGUgbmVjZXNzYXJ5IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGxheWVycyBpZiB0aGVpciBv cmRlciBjaGFuZ2VzLgorICovCiB0eXBlZGVmIGVudW0gcGdfY29tcHJlc3NfYWxnb3JpdGht CiB7CiAJUEdfQ09NUFJFU1NJT05fTk9ORSwKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2lu Y2x1ZGUvY3BsdXNwbHVzY2hlY2sgYi9zcmMvdG9vbHMvcGdpbmNsdWRlL2NwbHVzcGx1c2No ZWNrCmluZGV4IGU1MmZlOWY1MDk5Li5kYjQyOTQ3NGEyNSAxMDA3NTUKLS0tIGEvc3JjL3Rv b2xzL3BnaW5jbHVkZS9jcGx1c3BsdXNjaGVjaworKysgYi9zcmMvdG9vbHMvcGdpbmNsdWRl L2NwbHVzcGx1c2NoZWNrCkBAIC0xNTAsNyArMTUwLDkgQEAgZG8KIAogCSMgcGdfZHVtcCBp cyBub3QgQysrLWNsZWFuIGJlY2F1c2UgaXQgdXNlcyAicHVibGljIiBhbmQgIm5hbWVzcGFj ZSIKIAkjIGFzIGZpZWxkIG5hbWVzLCB3aGljaCBpcyB1bmZvcnR1bmF0ZSBidXQgd2Ugd29u J3QgY2hhbmdlIGl0IG5vdy4KKwl0ZXN0ICIkZiIgPSBzcmMvYmluL3BnX2R1bXAvY29tcHJl c3NfZ3ppcC5oICYmIGNvbnRpbnVlCiAJdGVzdCAiJGYiID0gc3JjL2Jpbi9wZ19kdW1wL2Nv bXByZXNzX2lvLmggJiYgY29udGludWUKKwl0ZXN0ICIkZiIgPSBzcmMvYmluL3BnX2R1bXAv Y29tcHJlc3Nfbm9uZS5oICYmIGNvbnRpbnVlCiAJdGVzdCAiJGYiID0gc3JjL2Jpbi9wZ19k dW1wL3BhcmFsbGVsLmggJiYgY29udGludWUKIAl0ZXN0ICIkZiIgPSBzcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX2FyY2hpdmVyLmggJiYgY29udGludWUKIAl0ZXN0ICIkZiIgPSBzcmMv YmluL3BnX2R1bXAvcGdfZHVtcC5oICYmIGNvbnRpbnVlCmRpZmYgLS1naXQgYS9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0CmluZGV4IDIyZWE0MmMxNmI1Li5kNGJiNzQ0MmJlYyAxMDA2NDQKLS0tIGEvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QKQEAgLTQyOSw2ICs0MjksNyBAQCBDb21waWxlZEV4cHJTdGF0ZQog Q29tcG9zaXRlSU9EYXRhCiBDb21wb3NpdGVUeXBlU3RtdAogQ29tcG91bmRBZmZpeEZsYWcK K0NvbXByZXNzRmlsZUhhbmRsZQogQ29tcHJlc3Npb25Mb2NhdGlvbgogQ29tcHJlc3NvclN0 YXRlCiBDb21wdXRlWGlkSG9yaXpvbnNSZXN1bHQKQEAgLTEwMzUsNiArMTAzNiw3IEBAIEd1 Y1N0YWNrCiBHdWNTdGFja1N0YXRlCiBHdWNTdHJpbmdBc3NpZ25Ib29rCiBHdWNTdHJpbmdD aGVja0hvb2sKK0d6aXBDb21wcmVzc29yU3RhdGUKIEhBTkRMRQogSEFTSEFDVElPTgogSEFT SEJVQ0tFVAotLSAKMi4zOS4xCgo= --------------svO0l9foLms6unOl0KQH4LJu Content-Type: text/x-patch; charset=UTF-8; name="0003-Add-LZ4-compression-to-pg_dump-v29.patch" Content-Disposition: attachment; filename="0003-Add-LZ4-compression-to-pg_dump-v29.patch" Content-Transfer-Encoding: base64 RnJvbSAzYTY3MTMyZmEzOTRiNjU5YzcyOGYyNzQ4Y2QzYWFkMzNmZjVjZGQzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NA cG0ubWU+CkRhdGU6IFRodSwgMTYgRmViIDIwMjMgMTE6MDA6MzUgKzAwMDAKU3ViamVjdDog W1BBVENIIDMvM10gQWRkIExaNCBjb21wcmVzc2lvbiB0byBwZ19kdW1wCgpUaGlzIGlzIG1v c3RseSBkb25lIHdpdGhpbiBwZ19kdW1wJ3MgY29tcHJlc3Npb24gc3RyZWFtaW5nIGFuZCBm aWxlIEFQSXMuCkl0IGlzIGNvbmZpbmVkIHdpdGhpbiB0aGUgbmV3bHkgaW50cm9kdWNlZCBj b21wcmVzc19sejQue2MsaH0gZmlsZXMuCgpUaGUgZmlyc3Qgb25lLCBpcyBhaW1lZCBhdCBp bmxpbmVkIHVzZSBjYXNlcyBhbmQgdGh1cyBzaW1wbGUKbHo0LmggY2FsbHMgY2FuIGJlIHVz ZWQgZGlyZWN0bHkuIFRoZSBzZWNvbmQgb25lIGlzIGdlbmVyYXRpbmcgb3V0cHV0LCBvciBp cwpwYXJzaW5nIGlucHV0LCB3aGljaCBjYW4gYmUgcmVhZC9nZW5lcmF0ZWQgdmlhIHRoZSBs ejQgdXRpbGl0eS4KClhYWCBUaGUgZmlyc3Qgd2hhdD8gRmlsZSBvciBzdHJlYW1pbmcgQVBJ PwoKWFhYIEhvdyBpcyB0aGlzIHJlbGF0ZWQgdG8gbHo0IHV0aWxpdHk/CgpXaGVyZXZlciB0 aGUgTFo0RiBhcGkgZG9lcyBub3QgaW1wbGVtZW50IGFsbCB0aGUgZnVuY3Rpb25hbGl0eSBj b3JyZXNwb25kaW5nCnRvIGZyZWFkKCksIGZ3cml0ZSgpLCBmZ2V0cygpLCBmZ2V0YygpLCBm ZW9mKCksIGFuZCBmY2xvc2UoKS4gV2hlcmUgdGhlCmZ1bmN0aW9uYWxpdHkgd2FzIG1pc3Np bmcgZnJvbSB0aGUgb2ZmaWNpYWwgQVBJLCBpdCBoYXMgYmVlbiBpbXBsZW1lbnRlZApsb2Nh bHkuCgpYWFggV2hhdCB1cyBMWjRGPyBEb2VzIHRoaXMgcmVseSBvbiBhbm90aGVyIGxpYnJh cnksIG5vdCBvbiBwbGFpbiBsejQ/CgpNb3N0IG9mIHRoZSBjb2RlIHdhcyB3cml0dGVuIGJ5 IEdlb3JnaW9zIEtva29sYXRvcy4gUmFjaGVsIEhlYXRvbiBwcm92aWRlZAppbnZhbHVhYmxl IGhlbHAgb3V0IHdpdGggZXhwYW5kaW5nIHRoZSB0ZXN0aW5nIGNvdmVyYWdlLCB0ZXN0aW5n IG9uCmRpZmZlcmVudCBwbGF0Zm9ybXMgYW5kIHByb3ZpZGluZyBkZWJ1ZyBpbmZvcm1hdGlv biBvbiB0aG9zZSwgYXMgd2VsbCBhcwpuYXRpdmUgc3BlYWtlciB3b3JkaW5nLgoKQXV0aG9y OiBHZW9yZ2lvcyBLb2tvbGF0b3MsIFJhY2hlbCBIZWF0b24KUmV2aWV3ZWQtYnk6IE1pY2hh ZWwgUGFxdWllciwgSnVzdGluIFByeXpieSwgRGFuaWVsIEd1c3RhZnNzb24sIFRvbWFzClZv bmRyYQpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL2ZhVU5FT3B0czl2dW5FYUxu bXhtRy1EbGRMU2dfcWwxMzdPQzNKWURtZ3JPTUhtMVJ2dldZMklkQmt2X0NSeG01c3BDQ2Jf T21LTmsyVDAzVE1tMGZCRVd2ZUZGOXdBMVdpelB1QWdCN1NzJTNEJTQwcHJvdG9ubWFpbC5j b20KLS0tCiBkb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXAuc2dtbCAgICAgICAgIHwgIDEzICst CiBzcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUgICAgICAgICAgICAgIHwgICAyICsKIHNyYy9i aW4vcGdfZHVtcC9jb21wcmVzc19pby5jICAgICAgICAgfCAgMjQgKy0KIHNyYy9iaW4vcGdf ZHVtcC9jb21wcmVzc19sejQuYyAgICAgICAgfCA2MjYgKysrKysrKysrKysrKysrKysrKysr KysrKysKIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19sejQuaCAgICAgICAgfCAgMjQgKwog c3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkICAgICAgICAgICB8ICAgOCArLQogc3JjL2Jp bi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jICB8ICAgNiArLQogc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cF9kaXJlY3RvcnkuYyB8ICAgOSArLQogc3JjL2Jpbi9wZ19kdW1wL3Bn X2R1bXAuYyAgICAgICAgICAgICB8ICAgNSArLQogc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3Bn X2R1bXAucGwgICAgICB8ICA4MiArKystCiBzcmMvdG9vbHMvcGdpbmNsdWRlL2NwbHVzcGx1 c2NoZWNrICAgIHwgICAxICsKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAg ICAgfCAgIDEgKwogMTIgZmlsZXMgY2hhbmdlZCwgNzgwIGluc2VydGlvbnMoKyksIDIxIGRl bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVz c19sejQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19s ejQuaAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcC5zZ21sIGIvZG9j L3NyYy9zZ21sL3JlZi9wZ19kdW1wLnNnbWwKaW5kZXggMmM5MzhjZDdlMTQuLjQ5ZDIxODkw NWZiIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXAuc2dtbAorKysgYi9k b2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXAuc2dtbApAQCAtMzMwLDkgKzMzMCwxMCBAQCBQb3N0 Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgICAgICAgbWFjaGluZS1yZWFkYWJsZSBmb3Jt YXQgdGhhdCA8YXBwbGljYXRpb24+cGdfcmVzdG9yZTwvYXBwbGljYXRpb24+CiAgICAgICAg ICAgIGNhbiByZWFkLiBBIGRpcmVjdG9yeSBmb3JtYXQgYXJjaGl2ZSBjYW4gYmUgbWFuaXB1 bGF0ZWQgd2l0aAogICAgICAgICAgICBzdGFuZGFyZCBVbml4IHRvb2xzOyBmb3IgZXhhbXBs ZSwgZmlsZXMgaW4gYW4gdW5jb21wcmVzc2VkIGFyY2hpdmUKLSAgICAgICAgICAgY2FuIGJl IGNvbXByZXNzZWQgd2l0aCB0aGUgPGFwcGxpY2F0aW9uPmd6aXA8L2FwcGxpY2F0aW9uPiB0 b29sLgotICAgICAgICAgICBUaGlzIGZvcm1hdCBpcyBjb21wcmVzc2VkIGJ5IGRlZmF1bHQg YW5kIGFsc28gc3VwcG9ydHMgcGFyYWxsZWwKLSAgICAgICAgICAgZHVtcHMuCisgICAgICAg ICAgIGNhbiBiZSBjb21wcmVzc2VkIHdpdGggdGhlIDxhcHBsaWNhdGlvbj5nemlwPC9hcHBs aWNhdGlvbj4gb3IKKyAgICAgICAgICAgPGFwcGxpY2F0aW9uPmx6NDwvYXBwbGljYXRpb24+ dG9vbC4KKyAgICAgICAgICAgVGhpcyBmb3JtYXQgaXMgY29tcHJlc3NlZCBieSBkZWZhdWx0 IHVzaW5nIDxsaXRlcmFsPmd6aXA8L2xpdGVyYWw+CisgICAgICAgICAgIGFuZCBhbHNvIHN1 cHBvcnRzIHBhcmFsbGVsIGR1bXBzLgogICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwv bGlzdGl0ZW0+CiAgICAgICAgIDwvdmFybGlzdGVudHJ5PgpAQCAtNjU0LDcgKzY1NSw3IEBA IFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgIDxwYXJhPgogICAgICAgICBTcGVj aWZ5IHRoZSBjb21wcmVzc2lvbiBtZXRob2QgYW5kL29yIHRoZSBjb21wcmVzc2lvbiBsZXZl bCB0byB1c2UuCiAgICAgICAgIFRoZSBjb21wcmVzc2lvbiBtZXRob2QgY2FuIGJlIHNldCB0 byA8bGl0ZXJhbD5nemlwPC9saXRlcmFsPiBvcgotICAgICAgICA8bGl0ZXJhbD5ub25lPC9s aXRlcmFsPiBmb3Igbm8gY29tcHJlc3Npb24uCisgICAgICAgIDxsaXRlcmFsPmx6NDwvbGl0 ZXJhbD4gb3IgPGxpdGVyYWw+bm9uZTwvbGl0ZXJhbD4gZm9yIG5vIGNvbXByZXNzaW9uLgog ICAgICAgICBBIGNvbXByZXNzaW9uIGRldGFpbCBzdHJpbmcgY2FuIG9wdGlvbmFsbHkgYmUg c3BlY2lmaWVkLiAgSWYgdGhlCiAgICAgICAgIGRldGFpbCBzdHJpbmcgaXMgYW4gaW50ZWdl ciwgaXQgc3BlY2lmaWVzIHRoZSBjb21wcmVzc2lvbiBsZXZlbC4KICAgICAgICAgT3RoZXJ3 aXNlLCBpdCBzaG91bGQgYmUgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBpdGVtcywgZWFj aCBvZiB0aGUKQEAgLTY3NSw4ICs2NzYsOCBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24K ICAgICAgICAgaW5kaXZpZHVhbCB0YWJsZS1kYXRhIHNlZ21lbnRzLCBhbmQgdGhlIGRlZmF1 bHQgaXMgdG8gY29tcHJlc3MgdXNpbmcKICAgICAgICAgPGxpdGVyYWw+Z3ppcDwvbGl0ZXJh bD4gYXQgYSBtb2RlcmF0ZSBsZXZlbC4gRm9yIHBsYWluIHRleHQgb3V0cHV0LAogICAgICAg ICBzZXR0aW5nIGEgbm9uemVybyBjb21wcmVzc2lvbiBsZXZlbCBjYXVzZXMgdGhlIGVudGly ZSBvdXRwdXQgZmlsZSB0byBiZSBjb21wcmVzc2VkLAotICAgICAgICBhcyB0aG91Z2ggaXQg aGFkIGJlZW4gZmVkIHRocm91Z2ggPGFwcGxpY2F0aW9uPmd6aXA8L2FwcGxpY2F0aW9uPjsg YnV0IHRoZSBkZWZhdWx0Ci0gICAgICAgIGlzIG5vdCB0byBjb21wcmVzcy4KKyAgICAgICAg YXMgdGhvdWdoIGl0IGhhZCBiZWVuIGZlZCB0aHJvdWdoIDxhcHBsaWNhdGlvbj5nemlwPC9h cHBsaWNhdGlvbj4gb3IKKyAgICAgICAgPGFwcGxpY2F0aW9uPmx6NDwvYXBwbGljYXRpb24+ OyBidXQgdGhlIGRlZmF1bHQgaXMgbm90IHRvIGNvbXByZXNzLgogICAgICAgIDwvcGFyYT4K ICAgICAgICA8cGFyYT4KICAgICAgICAgVGhlIHRhciBhcmNoaXZlIGZvcm1hdCBjdXJyZW50 bHkgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiBhdCBhbGwuCmRpZmYgLS1naXQgYS9z cmMvYmluL3BnX2R1bXAvTWFrZWZpbGUgYi9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKaW5k ZXggMDAxM2JjMDgwY2YuLmViOGY1OTQ1OWExIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1 bXAvTWFrZWZpbGUKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlCkBAIC0xNyw2ICsx Nyw3IEBAIHRvcF9idWlsZGRpciA9IC4uLy4uLy4uCiBpbmNsdWRlICQodG9wX2J1aWxkZGly KS9zcmMvTWFrZWZpbGUuZ2xvYmFsCiAKIGV4cG9ydCBHWklQX1BST0dSQU09JChHWklQKQor ZXhwb3J0IExaNAogZXhwb3J0IHdpdGhfaWN1CiAKIG92ZXJyaWRlIENQUEZMQUdTIDo9IC1J JChsaWJwcV9zcmNkaXIpICQoQ1BQRkxBR1MpCkBAIC0yNiw2ICsyNyw3IEBAIE9CSlMgPSBc CiAJJChXSU4zMlJFUykgXAogCWNvbXByZXNzX2d6aXAubyBcCiAJY29tcHJlc3NfaW8ubyBc CisJY29tcHJlc3NfbHo0Lm8gXAogCWNvbXByZXNzX25vbmUubyBcCiAJZHVtcHV0aWxzLm8g XAogCXBhcmFsbGVsLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNz X2lvLmMgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYwppbmRleCBjNTA3ZWViN2Iz ZC4uOTI5YjM4OTAyYjIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19p by5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jCkBAIC01Niw3ICs1Niw3 IEBACiAgKglJbml0RGlzY292ZXJDb21wcmVzc0ZpbGVIYW5kbGUgdHJpZXMgdG8gZGVmZmVy IHRoZSBjb21wcmVzc2lvbiBieSB0aGUKICAqCWZpbGVuYW1lIHN1ZmZpeC4gSWYgdGhlIHN1 ZmZpeCBpcyBub3QgeWV0IGtub3duLCB0aGVuIGl0IHRyaWVzIHRvIHNpbXBseQogICoJb3Bl biB0aGUgZmlsZSwgYW5kIGlmIGl0IGZhaWxzLCBpdCB0cmllcyB0byBvcGVuIHRoZSBzYW1l IGZpbGUgd2l0aCB0aGUgLmd6Ci0gKglzdWZmaXguCisgKglzdWZmaXgsIGFuZCB0aGVuIGFn YWluIHdpdGggdGhlIC5sejQgc3VmZml4LgogICoKICAqIElERU5USUZJQ0FUSU9OCiAgKgkg ICBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYwpAQCAtNzAsNiArNzAsNyBAQAogCiAj aW5jbHVkZSAiY29tcHJlc3NfZ3ppcC5oIgogI2luY2x1ZGUgImNvbXByZXNzX2lvLmgiCisj aW5jbHVkZSAiY29tcHJlc3NfbHo0LmgiCiAjaW5jbHVkZSAiY29tcHJlc3Nfbm9uZS5oIgog I2luY2x1ZGUgInBnX2JhY2t1cF91dGlscy5oIgogCkBAIC05MCw2ICs5MSwxMCBAQCBzdXBw b3J0c19jb21wcmVzc2lvbihjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXBy ZXNzaW9uX3NwZWMpCiAJaWYgKGFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQog CQlzdXBwb3J0ZWQgPSB0cnVlOwogI2VuZGlmCisjaWZkZWYgVVNFX0xaNAorCWlmIChhbGdv cml0aG0gPT0gUEdfQ09NUFJFU1NJT05fTFo0KQorCQlzdXBwb3J0ZWQgPSB0cnVlOworI2Vu ZGlmCiAKIAlpZiAoIXN1cHBvcnRlZCkKIAkJcmV0dXJuIHBzcHJpbnRmKCJ0aGlzIGJ1aWxk IGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsCkBAIC0xMjEsNiArMTI2 LDggQEAgQWxsb2NhdGVDb21wcmVzc29yKGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRp b24gY29tcHJlc3Npb25fc3BlYywKIAkJSW5pdENvbXByZXNzb3JOb25lKGNzLCBjb21wcmVz c2lvbl9zcGVjKTsKIAllbHNlIGlmIChjb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQ R19DT01QUkVTU0lPTl9HWklQKQogCQlJbml0Q29tcHJlc3Nvckd6aXAoY3MsIGNvbXByZXNz aW9uX3NwZWMpOworCWVsc2UgaWYgKGNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBH X0NPTVBSRVNTSU9OX0xaNCkKKwkJSW5pdENvbXByZXNzb3JMWjQoY3MsIGNvbXByZXNzaW9u X3NwZWMpOwogCiAJcmV0dXJuIGNzOwogfQpAQCAtMTg1LDYgKzE5Miw4IEBAIEluaXRDb21w cmVzc0ZpbGVIYW5kbGUoY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVz c2lvbl9zcGVjKQogCQlJbml0Q29tcHJlc3NGaWxlSGFuZGxlTm9uZShDRkgsIGNvbXByZXNz aW9uX3NwZWMpOwogCWVsc2UgaWYgKGNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBH X0NPTVBSRVNTSU9OX0daSVApCiAJCUluaXRDb21wcmVzc0ZpbGVIYW5kbGVHemlwKENGSCwg Y29tcHJlc3Npb25fc3BlYyk7CisJZWxzZSBpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0 aG0gPT0gUEdfQ09NUFJFU1NJT05fTFo0KQorCQlJbml0Q29tcHJlc3NGaWxlSGFuZGxlTFo0 KENGSCwgY29tcHJlc3Npb25fc3BlYyk7CiAKIAlyZXR1cm4gQ0ZIOwogfQpAQCAtMTk4LDcg KzIwNyw3IEBAIEluaXRDb21wcmVzc0ZpbGVIYW5kbGUoY29uc3QgcGdfY29tcHJlc3Nfc3Bl Y2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQogICogdGhyb3VnaG91dC4gT3RoZXJ3aXNl IHRoZSBjb21wcmVzc2lvbiB3aWxsIGJlIGRlZmVycmVkIGJ5IGl0ZXJhdGl2ZWx5IHRyeWlu ZwogICogdG8gb3BlbiB0aGUgZmlsZSBhdCAncGF0aCcsIGZpcnN0IGFzIGlzLCB0aGVuIGJ5 IGFwcGVuZGluZyBrbm93biBjb21wcmVzc2lvbgogICogc3VmZml4ZXMuIFNvIGlmIHlvdSBw YXNzICJmb28iIGFzICdwYXRoJywgdGhpcyB3aWxsIG9wZW4gZWl0aGVyICJmb28iIG9yCi0g KiAiZm9vLmd6IiwgdHJ5aW5nIGluIHRoYXQgb3JkZXIuCisgKiAiZm9vLmd6IiBvciAiZm9v Lmx6NCIsIHRyeWluZyBpbiB0aGF0IG9yZGVyLgogICoKICAqIE9uIGZhaWx1cmUsIHJldHVy biBOVUxMIHdpdGggYW4gZXJyb3IgY29kZSBpbiBlcnJuby4KICAqLwpAQCAtMjM2LDYgKzI0 NSwxNyBAQCBJbml0RGlzY292ZXJDb21wcmVzc0ZpbGVIYW5kbGUoY29uc3QgY2hhciAqcGF0 aCwgY29uc3QgY2hhciAqbW9kZSkKIAkJCWlmIChleGlzdHMpCiAJCQkJY29tcHJlc3Npb25f c3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9HWklQOwogCQl9CisjZW5kaWYKKyNp ZmRlZiBVU0VfTFo0CisJCWlmICghZXhpc3RzKQorCQl7CisJCQlmcmVlX2tlZXBfZXJybm8o Zm5hbWUpOworCQkJZm5hbWUgPSBwc3ByaW50ZigiJXMubHo0IiwgcGF0aCk7CisJCQlleGlz dHMgPSAoc3RhdChmbmFtZSwgJnN0KSA9PSAwKTsKKworCQkJaWYgKGV4aXN0cykKKwkJCQlj b21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX0xaNDsKKwkJfQog I2VuZGlmCiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfbHo0 LmMgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfbHo0LmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLmVlNzRjYzhlMjhhCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5jCkBAIC0wLDAgKzEsNjI2IEBACisvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBjb21wcmVzc19sejQuYworICoJIFJvdXRpbmVz IGZvciBhcmNoaXZlcnMgdG8gd3JpdGUgYSBMWjQgY29tcHJlc3NlZCBkYXRhIHN0cmVhbS4K KyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMywgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5 NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogSURF TlRJRklDQVRJT04KKyAqCSAgIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19sejQuYworICoK KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIK KyNpbmNsdWRlICJwZ19iYWNrdXBfdXRpbHMuaCIKKworI2luY2x1ZGUgImNvbXByZXNzX2x6 NC5oIgorCisjaWZkZWYgVVNFX0xaNAorI2luY2x1ZGUgPGx6NC5oPgorI2luY2x1ZGUgPGx6 NGZyYW1lLmg+CisKKyNkZWZpbmUgTFo0X09VVF9TSVpFCSg0ICogMTAyNCkKKyNkZWZpbmUg TFo0X0lOX1NJWkUJCSgxNiAqIDEwMjQpCisKKy8qCisgKiBMWjRGX0hFQURFUl9TSVpFX01B WCBmaXJzdCBhcHBlYXJlZCBpbiB2MS43LjUgb2YgdGhlIGxpYnJhcnkuCisgKiBSZWRlZmlu ZSBpdCBmb3IgaW5zdGFsbGF0aW9ucyB3aXRoIGEgbGVzc2VyIHZlcnNpb24uCisgKi8KKyNp Zm5kZWYgTFo0Rl9IRUFERVJfU0laRV9NQVgKKyNkZWZpbmUgTFo0Rl9IRUFERVJfU0laRV9N QVgJMzIKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENvbXByZXNz b3IgQVBJCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCit0eXBlZGVmIHN0cnVj dCBMWjRDb21wcmVzc29yU3RhdGUKK3sKKwljaGFyCSAgICpvdXRidWY7CisJc2l6ZV90CQlv dXRzaXplOworfSBMWjRDb21wcmVzc29yU3RhdGU7CisKKy8qIFByaXZhdGUgcm91dGluZXMg dGhhdCBzdXBwb3J0IExaNCBjb21wcmVzc2VkIGRhdGEgSS9PICovCitzdGF0aWMgdm9pZCBS ZWFkRGF0YUZyb21BcmNoaXZlTFo0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3Rh dGUgKmNzKTsKK3N0YXRpYyB2b2lkIFdyaXRlRGF0YVRvQXJjaGl2ZUxaNChBcmNoaXZlSGFu ZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKKwkJCQkJCQkJICBjb25zdCB2b2lkICpk YXRhLCBzaXplX3QgZExlbik7CitzdGF0aWMgdm9pZCBFbmRDb21wcmVzc29yTFo0KEFyY2hp dmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKTsKKworc3RhdGljIHZvaWQKK1Jl YWREYXRhRnJvbUFyY2hpdmVMWjQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0 ZSAqY3MpCit7CisJTFo0X3N0cmVhbURlY29kZV90IGx6NFN0cmVhbURlY29kZTsKKwljaGFy CSAgICpidWY7CisJY2hhcgkgICAqZGVjYnVmOworCXNpemVfdAkJYnVmbGVuOworCXNpemVf dAkJY250OworCisJYnVmbGVuID0gTFo0X0lOX1NJWkU7CisJYnVmID0gcGdfbWFsbG9jKGJ1 Zmxlbik7CisJZGVjYnVmID0gcGdfbWFsbG9jKGJ1Zmxlbik7CisKKwlMWjRfc2V0U3RyZWFt RGVjb2RlKCZsejRTdHJlYW1EZWNvZGUsIE5VTEwsIDApOworCisJd2hpbGUgKChjbnQgPSBj cy0+cmVhZEYoQUgsICZidWYsICZidWZsZW4pKSkKKwl7CisJCWludAkJCWRlY0J5dGVzID0g TFo0X2RlY29tcHJlc3Nfc2FmZV9jb250aW51ZSgmbHo0U3RyZWFtRGVjb2RlLAorCQkJCQkJ CQkJCQkJCQkJYnVmLCBkZWNidWYsCisJCQkJCQkJCQkJCQkJCQljbnQsIGJ1Zmxlbik7CisK KwkJYWh3cml0ZShkZWNidWYsIDEsIGRlY0J5dGVzLCBBSCk7CisJfQorCisJcGdfZnJlZShi dWYpOworCXBnX2ZyZWUoZGVjYnVmKTsKK30KKworc3RhdGljIHZvaWQKK1dyaXRlRGF0YVRv QXJjaGl2ZUxaNChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKKwkJ CQkJICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExlbikKK3sKKwlMWjRDb21wcmVzc29y U3RhdGUgKkxaNGNzID0gKExaNENvbXByZXNzb3JTdGF0ZSAqKSBjcy0+cHJpdmF0ZV9kYXRh OworCXNpemVfdAkJY29tcHJlc3NlZDsKKwlzaXplX3QJCXJlcXVpcmVkc2l6ZSA9IExaNF9j b21wcmVzc0JvdW5kKGRMZW4pOworCisJaWYgKHJlcXVpcmVkc2l6ZSA+IExaNGNzLT5vdXRz aXplKQorCXsKKwkJTFo0Y3MtPm91dGJ1ZiA9IHBnX3JlYWxsb2MoTFo0Y3MtPm91dGJ1Ziwg cmVxdWlyZWRzaXplKTsKKwkJTFo0Y3MtPm91dHNpemUgPSByZXF1aXJlZHNpemU7CisJfQor CisJY29tcHJlc3NlZCA9IExaNF9jb21wcmVzc19kZWZhdWx0KGRhdGEsIExaNGNzLT5vdXRi dWYsCisJCQkJCQkJCQkgIGRMZW4sIExaNGNzLT5vdXRzaXplKTsKKworCWlmIChjb21wcmVz c2VkIDw9IDApCisJCXBnX2ZhdGFsKCJmYWlsZWQgdG8gTFo0IGNvbXByZXNzIGRhdGEiKTsK KworCWNzLT53cml0ZUYoQUgsIExaNGNzLT5vdXRidWYsIGNvbXByZXNzZWQpOworfQorCitz dGF0aWMgdm9pZAorRW5kQ29tcHJlc3NvckxaNChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJl c3NvclN0YXRlICpjcykKK3sKKwlMWjRDb21wcmVzc29yU3RhdGUgKkxaNGNzOworCisJTFo0 Y3MgPSAoTFo0Q29tcHJlc3NvclN0YXRlICopIGNzLT5wcml2YXRlX2RhdGE7CisJaWYgKExa NGNzKQorCXsKKwkJcGdfZnJlZShMWjRjcy0+b3V0YnVmKTsKKwkJcGdfZnJlZShMWjRjcyk7 CisJCWNzLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCX0KK30KKworCisvKgorICogUHVibGlj IHJvdXRpbmVzIHRoYXQgc3VwcG9ydCBMWjQgY29tcHJlc3NlZCBkYXRhIEkvTworICovCit2 b2lkCitJbml0Q29tcHJlc3NvckxaNChDb21wcmVzc29yU3RhdGUgKmNzLCBjb25zdCBwZ19j b21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7CisJY3MtPnJlYWRE YXRhID0gUmVhZERhdGFGcm9tQXJjaGl2ZUxaNDsKKwljcy0+d3JpdGVEYXRhID0gV3JpdGVE YXRhVG9BcmNoaXZlTFo0OworCWNzLT5lbmQgPSBFbmRDb21wcmVzc29yTFo0OworCisJY3Mt PmNvbXByZXNzaW9uX3NwZWMgPSBjb21wcmVzc2lvbl9zcGVjOworCisJLyogV2lsbCBiZSBs YXp5IGluaXQnZCAqLworCWNzLT5wcml2YXRlX2RhdGEgPSBwZ19tYWxsb2MwKHNpemVvZihM WjRDb21wcmVzc29yU3RhdGUpKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg KiBDb21wcmVzcyBGaWxlIEFQSQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKwor LyoKKyAqIFN0YXRlIG5lZWRlZCBmb3IgTFo0IChkZSljb21wcmVzc2lvbiB1c2luZyB0aGUg Q29tcHJlc3NGaWxlSGFuZGxlIEFQSS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgTFo0RmlsZQor eworCUZJTEUJICAgKmZwOworCisJTFo0Rl9wcmVmZXJlbmNlc190IHByZWZzOworCisJTFo0 Rl9jb21wcmVzc2lvbkNvbnRleHRfdCBjdHg7CisJTFo0Rl9kZWNvbXByZXNzaW9uQ29udGV4 dF90IGR0eDsKKworCWJvb2wJCWluaXRlZDsKKwlib29sCQljb21wcmVzc2luZzsKKworCXNp emVfdAkJYnVmbGVuOworCWNoYXIJICAgKmJ1ZmZlcjsKKworCXNpemVfdAkJb3ZlcmZsb3dh bGxvY2xlbjsKKwlzaXplX3QJCW92ZXJmbG93bGVuOworCWNoYXIJICAgKm92ZXJmbG93YnVm OworCisJc2l6ZV90CQllcnJjb2RlOworfQlMWjRGaWxlOworCisvKgorICogTFo0IGVxdWl2 YWxlbnQgdG8gZmVvZigpIG9yIGd6ZW9mKCkuIFRoZSBlbmQgb2YgZmlsZQorICogaXMgcmVh Y2hlZCBpZiB0aGVyZSBpcyBubyBkZWNvbXByZXNzZWQgb3V0cHV0IGluIHRoZQorICogb3Zl cmZsb3cgYnVmZmVyIGFuZCB0aGUgZW5kIG9mIHRoZSBmaWxlIGlzIHJlYWNoZWQuCisgKi8K K3N0YXRpYyBpbnQKK0xaNEZpbGVfZW9mKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQorewor CUxaNEZpbGUgICAgKmZzID0gKExaNEZpbGUgKikgQ0ZILT5wcml2YXRlX2RhdGE7CisKKwly ZXR1cm4gZnMtPm92ZXJmbG93bGVuID09IDAgJiYgZmVvZihmcy0+ZnApOworfQorCitzdGF0 aWMgY29uc3QgY2hhciAqCitMWjRGaWxlX2dldF9lcnJvcihDb21wcmVzc0ZpbGVIYW5kbGUg KkNGSCkKK3sKKwlMWjRGaWxlICAgICpmcyA9IChMWjRGaWxlICopIENGSC0+cHJpdmF0ZV9k YXRhOworCWNvbnN0IGNoYXIgKmVycm1zZzsKKworCWlmIChMWjRGX2lzRXJyb3IoZnMtPmVy cmNvZGUpKQorCQllcnJtc2cgPSBMWjRGX2dldEVycm9yTmFtZShmcy0+ZXJyY29kZSk7CisJ ZWxzZQorCQllcnJtc2cgPSBzdHJlcnJvcihlcnJubyk7CisKKwlyZXR1cm4gZXJybXNnOwor fQorCisvKgorICogUHJlcGFyZSBhbiBhbHJlYWR5IGFsbG9jJ2VkIExaNEZpbGUgc3RydWN0 IGZvciBzdWJzZXF1ZW50IGNhbGxzLgorICoKKyAqIEl0IGNyZWF0ZXMgdGhlIG5lY2Vzc2Fy eSBjb250ZXh0cyBmb3IgdGhlIG9wZXJhdGlvbnMuIFdoZW4gY29tcHJlc3NpbmcsCisgKiBp dCBhZGRpdGlvbmFsbHkgd3JpdGVzIHRoZSBMWjQgaGVhZGVyIGluIHRoZSBvdXRwdXQgc3Ry ZWFtLgorICovCitzdGF0aWMgaW50CitMWjRGaWxlX2luaXQoTFo0RmlsZSAqIGZzLCBpbnQg c2l6ZSwgYm9vbCBjb21wcmVzc2luZykKK3sKKwlzaXplX3QJCXN0YXR1czsKKworCWlmIChm cy0+aW5pdGVkKQorCQlyZXR1cm4gMDsKKworCWZzLT5jb21wcmVzc2luZyA9IGNvbXByZXNz aW5nOworCWZzLT5pbml0ZWQgPSB0cnVlOworCisJaWYgKGZzLT5jb21wcmVzc2luZykKKwl7 CisJCWZzLT5idWZsZW4gPSBMWjRGX2NvbXByZXNzQm91bmQoTFo0X0lOX1NJWkUsICZmcy0+ cHJlZnMpOworCQlpZiAoZnMtPmJ1ZmxlbiA8IExaNEZfSEVBREVSX1NJWkVfTUFYKQorCQkJ ZnMtPmJ1ZmxlbiA9IExaNEZfSEVBREVSX1NJWkVfTUFYOworCisJCXN0YXR1cyA9IExaNEZf Y3JlYXRlQ29tcHJlc3Npb25Db250ZXh0KCZmcy0+Y3R4LCBMWjRGX1ZFUlNJT04pOworCQlp ZiAoTFo0Rl9pc0Vycm9yKHN0YXR1cykpCisJCXsKKwkJCWZzLT5lcnJjb2RlID0gc3RhdHVz OworCQkJcmV0dXJuIDE7CisJCX0KKworCQlmcy0+YnVmZmVyID0gcGdfbWFsbG9jKGZzLT5i dWZsZW4pOworCQlzdGF0dXMgPSBMWjRGX2NvbXByZXNzQmVnaW4oZnMtPmN0eCwgZnMtPmJ1 ZmZlciwgZnMtPmJ1ZmxlbiwKKwkJCQkJCQkJCSZmcy0+cHJlZnMpOworCisJCWlmIChMWjRG X2lzRXJyb3Ioc3RhdHVzKSkKKwkJeworCQkJZnMtPmVycmNvZGUgPSBzdGF0dXM7CisJCQly ZXR1cm4gMTsKKwkJfQorCisJCWlmIChmd3JpdGUoZnMtPmJ1ZmZlciwgMSwgc3RhdHVzLCBm cy0+ZnApICE9IHN0YXR1cykKKwkJeworCQkJZXJybm8gPSAoZXJybm8pID8gZXJybm8gOiBF Tk9TUEM7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwllbHNlCisJeworCQlzdGF0dXMgPSBM WjRGX2NyZWF0ZURlY29tcHJlc3Npb25Db250ZXh0KCZmcy0+ZHR4LCBMWjRGX1ZFUlNJT04p OworCQlpZiAoTFo0Rl9pc0Vycm9yKHN0YXR1cykpCisJCXsKKwkJCWZzLT5lcnJjb2RlID0g c3RhdHVzOworCQkJcmV0dXJuIDE7CisJCX0KKworCQlmcy0+YnVmbGVuID0gc2l6ZSA+IExa NF9PVVRfU0laRSA/IHNpemUgOiBMWjRfT1VUX1NJWkU7CisJCWZzLT5idWZmZXIgPSBwZ19t YWxsb2MoZnMtPmJ1Zmxlbik7CisKKwkJZnMtPm92ZXJmbG93YWxsb2NsZW4gPSBmcy0+YnVm bGVuOworCQlmcy0+b3ZlcmZsb3didWYgPSBwZ19tYWxsb2MoZnMtPm92ZXJmbG93YWxsb2Ns ZW4pOworCQlmcy0+b3ZlcmZsb3dsZW4gPSAwOworCX0KKworCXJldHVybiAwOworfQorCisv KgorICogUmVhZCBhbHJlYWR5IGRlY29tcHJlc3NlZCBjb250ZW50IGZyb20gdGhlIG92ZXJm bG93IGJ1ZmZlciBpbnRvICdwdHInIHVwIHRvCisgKiAnc2l6ZScgYnl0ZXMsIGlmIGF2YWls YWJsZS4gSWYgdGhlIGVvbF9mbGFnIGlzIHNldCwgdGhlbiBzdG9wIGF0IHRoZSBmaXJzdAor ICogb2NjdXJyZW5jZSBvZiB0aGUgbmV3IGxpbmUgY2hhciBwcmlvciB0byAnc2l6ZScgYnl0 ZXMuCisgKgorICogQW55IHVucmVhZCBjb250ZW50IGluIHRoZSBvdmVyZmxvdyBidWZmZXIs IGlzIG1vdmVkIHRvIHRoZSBiZWdpbm5pbmcuCisgKi8KK3N0YXRpYyBpbnQKK0xaNEZpbGVf cmVhZF9vdmVyZmxvdyhMWjRGaWxlICogZnMsIHZvaWQgKnB0ciwgaW50IHNpemUsIGJvb2wg ZW9sX2ZsYWcpCit7CisJY2hhcgkgICAqcDsKKwlpbnQJCQlyZWFkbGVuID0gMDsKKworCWlm IChmcy0+b3ZlcmZsb3dsZW4gPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZnMtPm92ZXJm bG93bGVuID49IHNpemUpCisJCXJlYWRsZW4gPSBzaXplOworCWVsc2UKKwkJcmVhZGxlbiA9 IGZzLT5vdmVyZmxvd2xlbjsKKworCWlmIChlb2xfZmxhZyAmJiAocCA9IG1lbWNocihmcy0+ b3ZlcmZsb3didWYsICdcbicsIHJlYWRsZW4pKSkKKwkJLyogSW5jbHVkZSB0aGUgbGluZSB0 ZXJtaW5hdGluZyBjaGFyICovCisJCXJlYWRsZW4gPSBwIC0gZnMtPm92ZXJmbG93YnVmICsg MTsKKworCW1lbWNweShwdHIsIGZzLT5vdmVyZmxvd2J1ZiwgcmVhZGxlbik7CisJZnMtPm92 ZXJmbG93bGVuIC09IHJlYWRsZW47CisKKwlpZiAoZnMtPm92ZXJmbG93bGVuID4gMCkKKwkJ bWVtbW92ZShmcy0+b3ZlcmZsb3didWYsIGZzLT5vdmVyZmxvd2J1ZiArIHJlYWRsZW4sIGZz LT5vdmVyZmxvd2xlbik7CisKKwlyZXR1cm4gcmVhZGxlbjsKK30KKworLyoKKyAqIFRoZSB3 b3JraG9yc2UgZm9yIHJlYWRpbmcgZGVjb21wcmVzc2VkIGNvbnRlbnQgb3V0IG9mIGFuIExa NCBjb21wcmVzc2VkCisgKiBzdHJlYW0uCisgKgorICogSXQgd2lsbCByZWFkIHVwIHRvICdw dHJzaXplJyBkZWNvbXByZXNzZWQgY29udGVudCwgb3IgdXAgdG8gdGhlIG5ldyBsaW5lIGNo YXIKKyAqIGlmIGZvdW5kIGZpcnN0IHdoZW4gdGhlIGVvbF9mbGFnIGlzIHNldC4gSXQgaXMg cG9zc2libGUgdGhhdCB0aGUgZGVjb21wcmVzc2VkCisgKiBvdXRwdXQgZ2VuZXJhdGVkIGJ5 IHJlYWRpbmcgYW55IGNvbXByZXNzZWQgaW5wdXQgdmlhIHRoZSBMWjRGIEFQSSwgZXhjZWVk cworICogJ3B0cnNpemUnLiBBbnkgZXhjZWVkaW5nIGRlY29tcHJlc3NlZCBjb250ZW50IGlz IHN0b3JlZCBhdCBhbiBvdmVyZmxvdworICogYnVmZmVyIHdpdGhpbiBMWjRGaWxlLiBPZiBj b3Vyc2UsIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCwgaXQgd2lsbCBmaXJzdAorICog dHJ5IHRvIGNvbnN1bWUgYW55IGRlY29tcHJlc3NlZCBjb250ZW50IGFscmVhZHkgcHJlc2Vu dCBpbiB0aGUgb3ZlcmZsb3cKKyAqIGJ1ZmZlciwgYmVmb3JlIGRlY29tcHJlc3NpbmcgbmV3 IGNvbnRlbnQuCisgKi8KK3N0YXRpYyBpbnQKK0xaNEZpbGVfcmVhZF9pbnRlcm5hbChMWjRG aWxlICogZnMsIHZvaWQgKnB0ciwgaW50IHB0cnNpemUsIGJvb2wgZW9sX2ZsYWcpCit7CisJ c2l6ZV90CQlkc2l6ZSA9IDA7CisJc2l6ZV90CQlyc2l6ZTsKKwlzaXplX3QJCXNpemUgPSBw dHJzaXplOworCWJvb2wJCWVvbF9mb3VuZCA9IGZhbHNlOworCisJdm9pZAkgICAqcmVhZGJ1 ZjsKKworCS8qIExhenkgaW5pdCAqLworCWlmIChMWjRGaWxlX2luaXQoZnMsIHNpemUsIGZh bHNlIC8qIGRlY29tcHJlc3NpbmcgKi8gKSkKKwkJcmV0dXJuIC0xOworCisJLyogVmVyaWZ5 IHRoYXQgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGluIHRoZSBvdXRidWYgKi8KKwlpZiAoc2l6 ZSA+IGZzLT5idWZsZW4pCisJeworCQlmcy0+YnVmbGVuID0gc2l6ZTsKKwkJZnMtPmJ1ZmZl ciA9IHBnX3JlYWxsb2MoZnMtPmJ1ZmZlciwgc2l6ZSk7CisJfQorCisJLyogdXNlIGFscmVh ZHkgZGVjb21wcmVzc2VkIGNvbnRlbnQgaWYgYXZhaWxhYmxlICovCisJZHNpemUgPSBMWjRG aWxlX3JlYWRfb3ZlcmZsb3coZnMsIHB0ciwgc2l6ZSwgZW9sX2ZsYWcpOworCWlmIChkc2l6 ZSA9PSBzaXplIHx8IChlb2xfZmxhZyAmJiBtZW1jaHIocHRyLCAnXG4nLCBkc2l6ZSkpKQor CQlyZXR1cm4gZHNpemU7CisKKwlyZWFkYnVmID0gcGdfbWFsbG9jKHNpemUpOworCisJZG8K Kwl7CisJCWNoYXIJICAgKnJwOworCQljaGFyCSAgICpyZW5kOworCisJCXJzaXplID0gZnJl YWQocmVhZGJ1ZiwgMSwgc2l6ZSwgZnMtPmZwKTsKKwkJaWYgKHJzaXplIDwgc2l6ZSAmJiAh ZmVvZihmcy0+ZnApKQorCQkJcmV0dXJuIC0xOworCisJCXJwID0gKGNoYXIgKikgcmVhZGJ1 ZjsKKwkJcmVuZCA9IChjaGFyICopIHJlYWRidWYgKyByc2l6ZTsKKworCQl3aGlsZSAocnAg PCByZW5kKQorCQl7CisJCQlzaXplX3QJCXN0YXR1czsKKwkJCXNpemVfdAkJb3V0bGVuID0g ZnMtPmJ1ZmxlbjsKKwkJCXNpemVfdAkJcmVhZF9yZW1haW4gPSByZW5kIC0gcnA7CisKKwkJ CW1lbXNldChmcy0+YnVmZmVyLCAwLCBvdXRsZW4pOworCQkJc3RhdHVzID0gTFo0Rl9kZWNv bXByZXNzKGZzLT5kdHgsIGZzLT5idWZmZXIsICZvdXRsZW4sCisJCQkJCQkJCQkgcnAsICZy ZWFkX3JlbWFpbiwgTlVMTCk7CisJCQlpZiAoTFo0Rl9pc0Vycm9yKHN0YXR1cykpCisJCQl7 CisJCQkJZnMtPmVycmNvZGUgPSBzdGF0dXM7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCisJ CQlycCArPSByZWFkX3JlbWFpbjsKKworCQkJLyoKKwkJCSAqIGZpbGwgaW4gd2hhdCBzcGFj ZSBpcyBhdmFpbGFibGUgaW4gcHRyIGlmIHRoZSBlb2wgZmxhZyBpcyBzZXQsCisJCQkgKiBl aXRoZXIgc2tpcCBpZiBvbmUgYWxyZWFkeSBmb3VuZCBvciBmaWxsIHVwIHRvIEVPTCBpZiBw cmVzZW50CisJCQkgKiBpbiB0aGUgb3V0YnVmCisJCQkgKi8KKwkJCWlmIChvdXRsZW4gPiAw ICYmIGRzaXplIDwgc2l6ZSAmJiBlb2xfZm91bmQgPT0gZmFsc2UpCisJCQl7CisJCQkJY2hh cgkgICAqcDsKKwkJCQlzaXplX3QJCWxpYiA9ICghZW9sX2ZsYWcpID8gc2l6ZSAtIGRzaXpl IDogc2l6ZSAtIDEgLSBkc2l6ZTsKKwkJCQlzaXplX3QJCWxlbiA9IG91dGxlbiA8IGxpYiA/ IG91dGxlbiA6IGxpYjsKKworCQkJCWlmIChlb2xfZmxhZyAmJgorCQkJCQkocCA9IG1lbWNo cihmcy0+YnVmZmVyLCAnXG4nLCBvdXRsZW4pKSAmJgorCQkJCQkoc2l6ZV90KSAocCAtIGZz LT5idWZmZXIgKyAxKSA8PSBsZW4pCisJCQkJeworCQkJCQlsZW4gPSBwIC0gZnMtPmJ1ZmZl ciArIDE7CisJCQkJCWVvbF9mb3VuZCA9IHRydWU7CisJCQkJfQorCisJCQkJbWVtY3B5KChj aGFyICopIHB0ciArIGRzaXplLCBmcy0+YnVmZmVyLCBsZW4pOworCQkJCWRzaXplICs9IGxl bjsKKworCQkJCS8qIG1vdmUgd2hhdCBkaWQgbm90IGZpdCwgaWYgYW55LCBhdCB0aGUgYmVn aW5uaW5nIG9mIHRoZSBidWYgKi8KKwkJCQlpZiAobGVuIDwgb3V0bGVuKQorCQkJCQltZW1t b3ZlKGZzLT5idWZmZXIsIGZzLT5idWZmZXIgKyBsZW4sIG91dGxlbiAtIGxlbik7CisJCQkJ b3V0bGVuIC09IGxlbjsKKwkJCX0KKworCQkJLyogaWYgdGhlcmUgaXMgYXZhaWxhYmxlIG91 dHB1dCwgc2F2ZSBpdCAqLworCQkJaWYgKG91dGxlbiA+IDApCisJCQl7CisJCQkJd2hpbGUg KGZzLT5vdmVyZmxvd2xlbiArIG91dGxlbiA+IGZzLT5vdmVyZmxvd2FsbG9jbGVuKQorCQkJ CXsKKwkJCQkJZnMtPm92ZXJmbG93YWxsb2NsZW4gKj0gMjsKKwkJCQkJZnMtPm92ZXJmbG93 YnVmID0gcGdfcmVhbGxvYyhmcy0+b3ZlcmZsb3didWYsCisJCQkJCQkJCQkJCQkgZnMtPm92 ZXJmbG93YWxsb2NsZW4pOworCQkJCX0KKworCQkJCW1lbWNweShmcy0+b3ZlcmZsb3didWYg KyBmcy0+b3ZlcmZsb3dsZW4sIGZzLT5idWZmZXIsIG91dGxlbik7CisJCQkJZnMtPm92ZXJm bG93bGVuICs9IG91dGxlbjsKKwkJCX0KKwkJfQorCX0gd2hpbGUgKHJzaXplID09IHNpemUg JiYgZHNpemUgPCBzaXplICYmIGVvbF9mb3VuZCA9PSAwKTsKKworCXBnX2ZyZWUocmVhZGJ1 Zik7CisKKwlyZXR1cm4gKGludCkgZHNpemU7Cit9CisKKy8qCisgKiBDb21wcmVzcyBzaXpl IGJ5dGVzIGZyb20gcHRyIGFuZCB3cml0ZSB0aGVtIHRvIHRoZSBzdHJlYW0uCisgKi8KK3N0 YXRpYyBzaXplX3QKK0xaNEZpbGVfd3JpdGUoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6 ZSwgQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJTFo0RmlsZSAgICAqZnMgPSAoTFo0 RmlsZSAqKSBDRkgtPnByaXZhdGVfZGF0YTsKKwlzaXplX3QJCXN0YXR1czsKKwlpbnQJCQly ZW1haW5pbmcgPSBzaXplOworCisJLyogTGF6eSBpbml0ICovCisJaWYgKExaNEZpbGVfaW5p dChmcywgc2l6ZSwgdHJ1ZSkpCisJCXJldHVybiAtMTsKKworCXdoaWxlIChyZW1haW5pbmcg PiAwKQorCXsKKwkJaW50CQkJY2h1bmsgPSByZW1haW5pbmcgPCBMWjRfSU5fU0laRSA/IHJl bWFpbmluZyA6IExaNF9JTl9TSVpFOworCisJCXJlbWFpbmluZyAtPSBjaHVuazsKKworCQlz dGF0dXMgPSBMWjRGX2NvbXByZXNzVXBkYXRlKGZzLT5jdHgsIGZzLT5idWZmZXIsIGZzLT5i dWZsZW4sCisJCQkJCQkJCQkgcHRyLCBjaHVuaywgTlVMTCk7CisJCWlmIChMWjRGX2lzRXJy b3Ioc3RhdHVzKSkKKwkJeworCQkJZnMtPmVycmNvZGUgPSBzdGF0dXM7CisJCQlyZXR1cm4g LTE7CisJCX0KKworCQlpZiAoZndyaXRlKGZzLT5idWZmZXIsIDEsIHN0YXR1cywgZnMtPmZw KSAhPSBzdGF0dXMpCisJCXsKKwkJCWVycm5vID0gKGVycm5vKSA/IGVycm5vIDogRU5PU1BD OworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gc2l6ZTsKK30KKworLyoKKyAq IGZyZWFkKCkgZXF1aXZhbGVudCBpbXBsZW1lbnRhdGlvbiBmb3IgTFo0IGNvbXByZXNzZWQg ZmlsZXMuCisgKi8KK3N0YXRpYyBzaXplX3QKK0xaNEZpbGVfcmVhZCh2b2lkICpwdHIsIHNp emVfdCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlMWjRGaWxlICAgICpm cyA9IChMWjRGaWxlICopIENGSC0+cHJpdmF0ZV9kYXRhOworCWludAkJCXJldDsKKworCXJl dCA9IExaNEZpbGVfcmVhZF9pbnRlcm5hbChmcywgcHRyLCBzaXplLCBmYWxzZSk7CisJaWYg KHJldCAhPSBzaXplICYmICFMWjRGaWxlX2VvZihDRkgpKQorCQlwZ19mYXRhbCgiY291bGQg bm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsIExaNEZpbGVfZ2V0X2Vycm9yKENGSCkp OworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGZnZXRjKCkgZXF1aXZhbGVudCBpbXBs ZW1lbnRhdGlvbiBmb3IgTFo0IGNvbXByZXNzZWQgZmlsZXMuCisgKi8KK3N0YXRpYyBpbnQK K0xaNEZpbGVfZ2V0YyhDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlMWjRGaWxlICAg ICpmcyA9IChMWjRGaWxlICopIENGSC0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGNoYXIg YzsKKworCWlmIChMWjRGaWxlX3JlYWRfaW50ZXJuYWwoZnMsICZjLCAxLCBmYWxzZSkgIT0g MSkKKwl7CisJCWlmICghTFo0RmlsZV9lb2YoQ0ZIKSkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBu b3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6ICVzIiwgTFo0RmlsZV9nZXRfZXJyb3IoQ0ZIKSk7 CisJCWVsc2UKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6 IGVuZCBvZiBmaWxlIik7CisJfQorCisJcmV0dXJuIGM7Cit9CisKKy8qCisgKiBmZ2V0cygp IGVxdWl2YWxlbnQgaW1wbGVtZW50YXRpb24gZm9yIExaNCBjb21wcmVzc2VkIGZpbGVzLgor ICovCitzdGF0aWMgY2hhciAqCitMWjRGaWxlX2dldHMoY2hhciAqcHRyLCBpbnQgc2l6ZSwg Q29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJTFo0RmlsZSAgICAqZnMgPSAoTFo0Rmls ZSAqKSBDRkgtPnByaXZhdGVfZGF0YTsKKwlzaXplX3QJCWRzaXplOworCisJZHNpemUgPSBM WjRGaWxlX3JlYWRfaW50ZXJuYWwoZnMsIHB0ciwgc2l6ZSwgdHJ1ZSk7CisJaWYgKGRzaXpl IDwgMCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMi LCBMWjRGaWxlX2dldF9lcnJvcihDRkgpKTsKKworCS8qIERvbmUgcmVhZGluZyAqLworCWlm IChkc2l6ZSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBwdHI7Cit9CisKKy8q CisgKiBGaW5hbGl6ZSAoZGUpY29tcHJlc3Npb24gb2YgYSBzdHJlYW0uIFdoZW4gY29tcHJl c3NpbmcgaXQgd2lsbCB3cml0ZSBhbnkKKyAqIHJlbWFpbmluZyBjb250ZW50IGFuZC9vciBn ZW5lcmF0ZWQgZm9vdGVyIGZyb20gdGhlIExaNCBBUEkuCisgKi8KK3N0YXRpYyBpbnQKK0xa NEZpbGVfY2xvc2UoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJRklMRQkgICAqZnA7 CisJTFo0RmlsZSAgICAqZnMgPSAoTFo0RmlsZSAqKSBDRkgtPnByaXZhdGVfZGF0YTsKKwlz aXplX3QJCXN0YXR1czsKKwlpbnQJCQlyZXQ7CisKKwlmcCA9IGZzLT5mcDsKKwlpZiAoZnMt PmluaXRlZCkKKwl7CisJCWlmIChmcy0+Y29tcHJlc3NpbmcpCisJCXsKKwkJCXN0YXR1cyA9 IExaNEZfY29tcHJlc3NFbmQoZnMtPmN0eCwgZnMtPmJ1ZmZlciwgZnMtPmJ1ZmxlbiwgTlVM TCk7CisJCQlpZiAoTFo0Rl9pc0Vycm9yKHN0YXR1cykpCisJCQkJcGdfZmF0YWwoImZhaWxl ZCB0byBlbmQgY29tcHJlc3Npb246ICVzIiwKKwkJCQkJCSBMWjRGX2dldEVycm9yTmFtZShz dGF0dXMpKTsKKwkJCWVsc2UgaWYgKChyZXQgPSBmd3JpdGUoZnMtPmJ1ZmZlciwgMSwgc3Rh dHVzLCBmcy0+ZnApKSAhPSBzdGF0dXMpCisJCQl7CisJCQkJZXJybm8gPSAoZXJybm8pID8g ZXJybm8gOiBFTk9TUEM7CisJCQkJV1JJVEVfRVJST1JfRVhJVDsKKwkJCX0KKworCQkJc3Rh dHVzID0gTFo0Rl9mcmVlQ29tcHJlc3Npb25Db250ZXh0KGZzLT5jdHgpOworCQkJaWYgKExa NEZfaXNFcnJvcihzdGF0dXMpKQorCQkJCXBnX2ZhdGFsKCJmYWlsZWQgdG8gZW5kIGNvbXBy ZXNzaW9uOiAlcyIsCisJCQkJCQkgTFo0Rl9nZXRFcnJvck5hbWUoc3RhdHVzKSk7CisJCX0K KwkJZWxzZQorCQl7CisJCQlzdGF0dXMgPSBMWjRGX2ZyZWVEZWNvbXByZXNzaW9uQ29udGV4 dChmcy0+ZHR4KTsKKwkJCWlmIChMWjRGX2lzRXJyb3Ioc3RhdHVzKSkKKwkJCQlwZ19mYXRh bCgiZmFpbGVkIHRvIGVuZCBkZWNvbXByZXNzaW9uOiAlcyIsCisJCQkJCQkgTFo0Rl9nZXRF cnJvck5hbWUoc3RhdHVzKSk7CisJCQlwZ19mcmVlKGZzLT5vdmVyZmxvd2J1Zik7CisJCX0K KworCQlwZ19mcmVlKGZzLT5idWZmZXIpOworCX0KKworCXBnX2ZyZWUoZnMpOworCisJcmV0 dXJuIGZjbG9zZShmcCk7Cit9CisKK3N0YXRpYyBpbnQKK0xaNEZpbGVfb3Blbihjb25zdCBj aGFyICpwYXRoLCBpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUsCisJCQkgQ29tcHJlc3NGaWxl SGFuZGxlICpDRkgpCit7CisJRklMRQkgICAqZnA7CisJTFo0RmlsZSAgICAqbHo0ZnAgPSAo TFo0RmlsZSAqKSBDRkgtPnByaXZhdGVfZGF0YTsKKworCWlmIChmZCA+PSAwKQorCQlmcCA9 IGZkb3BlbihmZCwgbW9kZSk7CisJZWxzZQorCQlmcCA9IGZvcGVuKHBhdGgsIG1vZGUpOwor CWlmIChmcCA9PSBOVUxMKQorCXsKKwkJbHo0ZnAtPmVycmNvZGUgPSBlcnJubzsKKwkJcmV0 dXJuIDE7CisJfQorCisJbHo0ZnAtPmZwID0gZnA7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludAorTFo0RmlsZV9vcGVuX3dyaXRlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNo YXIgKm1vZGUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCWNoYXIJICAgKmZuYW1l OworCWludAkJCXJldDsKKworCWZuYW1lID0gcHNwcmludGYoIiVzLmx6NCIsIHBhdGgpOwor CXJldCA9IENGSC0+b3Blbl9mdW5jKGZuYW1lLCAtMSwgbW9kZSwgQ0ZIKTsKKwlwZ19mcmVl KGZuYW1lKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBQdWJsaWMgcm91dGluZXMK KyAqLwordm9pZAorSW5pdENvbXByZXNzRmlsZUhhbmRsZUxaNChDb21wcmVzc0ZpbGVIYW5k bGUgKkNGSCwKKwkJCQkJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21w cmVzc2lvbl9zcGVjKQoreworCUxaNEZpbGUgICAgKmx6NGZwOworCisJQ0ZILT5vcGVuX2Z1 bmMgPSBMWjRGaWxlX29wZW47CisJQ0ZILT5vcGVuX3dyaXRlX2Z1bmMgPSBMWjRGaWxlX29w ZW5fd3JpdGU7CisJQ0ZILT5yZWFkX2Z1bmMgPSBMWjRGaWxlX3JlYWQ7CisJQ0ZILT53cml0 ZV9mdW5jID0gTFo0RmlsZV93cml0ZTsKKwlDRkgtPmdldHNfZnVuYyA9IExaNEZpbGVfZ2V0 czsKKwlDRkgtPmdldGNfZnVuYyA9IExaNEZpbGVfZ2V0YzsKKwlDRkgtPmVvZl9mdW5jID0g TFo0RmlsZV9lb2Y7CisJQ0ZILT5jbG9zZV9mdW5jID0gTFo0RmlsZV9jbG9zZTsKKwlDRkgt PmdldF9lcnJvcl9mdW5jID0gTFo0RmlsZV9nZXRfZXJyb3I7CisKKwlDRkgtPmNvbXByZXNz aW9uX3NwZWMgPSBjb21wcmVzc2lvbl9zcGVjOworCWx6NGZwID0gcGdfbWFsbG9jMChzaXpl b2YoKmx6NGZwKSk7CisJaWYgKENGSC0+Y29tcHJlc3Npb25fc3BlYy5sZXZlbCA+PSAwKQor CQlsejRmcC0+cHJlZnMuY29tcHJlc3Npb25MZXZlbCA9IENGSC0+Y29tcHJlc3Npb25fc3Bl Yy5sZXZlbDsKKworCUNGSC0+cHJpdmF0ZV9kYXRhID0gbHo0ZnA7Cit9CisjZWxzZQkJCQkJ CQkvKiBVU0VfTFo0ICovCit2b2lkCitJbml0Q29tcHJlc3NvckxaNChDb21wcmVzc29yU3Rh dGUgKmNzLAorCQkJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVz c2lvbl9zcGVjKQoreworCXBnX2ZhdGFsKCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQg Y29tcHJlc3Npb24gd2l0aCAlcyIsICJMWjQiKTsKK30KKwordm9pZAorSW5pdENvbXByZXNz RmlsZUhhbmRsZUxaNChDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCwKKwkJCQkJCSAgY29uc3Qg cGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQoreworCXBnX2Zh dGFsKCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIs ICJMWjQiKTsKK30KKyNlbmRpZgkJCQkJCQkvKiBVU0VfTFo0ICovCmRpZmYgLS1naXQgYS9z cmMvYmluL3BnX2R1bXAvY29tcHJlc3NfbHo0LmggYi9zcmMvYmluL3BnX2R1bXAvY29tcHJl c3NfbHo0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQwZGJl MDBkNDYxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6 NC5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGNv bXByZXNzX2x6NC5oCisgKgkgTFo0IGludGVyZmFjZSB0byBjb21wcmVzc19pby5jIHJvdXRp bmVzCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjMsIFBvc3RncmVT UUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMp IDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAq IElERU5USUZJQ0FUSU9OCisgKgkgICBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfbHo0LmgK KyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBfQ09NUFJFU1NfTFo0 X0hfCisjZGVmaW5lIF9DT01QUkVTU19MWjRfSF8KKworI2luY2x1ZGUgImNvbXByZXNzX2lv LmgiCisKK2V4dGVybiB2b2lkIEluaXRDb21wcmVzc29yTFo0KENvbXByZXNzb3JTdGF0ZSAq Y3MsCisJCQkJCQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNz aW9uX3NwZWMpOworZXh0ZXJuIHZvaWQgSW5pdENvbXByZXNzRmlsZUhhbmRsZUxaNChDb21w cmVzc0ZpbGVIYW5kbGUgKkNGSCwKKwkJCQkJCQkJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3Bl Y2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKKworI2VuZGlmCQkJCQkJCS8qIF9DT01Q UkVTU19MWjRfSF8gKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWls ZCBiL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZAppbmRleCA4NGU5ZjBkZWZhNC4uMGRh NDc2YTRjMzQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZAorKysg Yi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKQEAgLTMsNiArMyw3IEBACiBwZ19kdW1w X2NvbW1vbl9zb3VyY2VzID0gZmlsZXMoCiAgICdjb21wcmVzc19nemlwLmMnLAogICAnY29t cHJlc3NfaW8uYycsCisgICdjb21wcmVzc19sejQuYycsCiAgICdjb21wcmVzc19ub25lLmMn LAogICAnZHVtcHV0aWxzLmMnLAogICAncGFyYWxsZWwuYycsCkBAIC0xOCw3ICsxOSw3IEBA IHBnX2R1bXBfY29tbW9uX3NvdXJjZXMgPSBmaWxlcygKIHBnX2R1bXBfY29tbW9uID0gc3Rh dGljX2xpYnJhcnkoJ2xpYnBnZHVtcF9jb21tb24nLAogICBwZ19kdW1wX2NvbW1vbl9zb3Vy Y2VzLAogICBjX3BjaDogcGNoX3Bvc3RncmVzX2ZlX2gsCi0gIGRlcGVuZGVuY2llczogW2Zy b250ZW5kX2NvZGUsIGxpYnBxLCB6bGliXSwKKyAgZGVwZW5kZW5jaWVzOiBbZnJvbnRlbmRf Y29kZSwgbGlicHEsIGx6NCwgemxpYl0sCiAgIGt3YXJnczogaW50ZXJuYWxfbGliX2FyZ3Ms CiApCiAKQEAgLTg2LDcgKzg3LDEwIEBAIHRlc3RzICs9IHsKICAgJ3NkJzogbWVzb24uY3Vy cmVudF9zb3VyY2VfZGlyKCksCiAgICdiZCc6IG1lc29uLmN1cnJlbnRfYnVpbGRfZGlyKCks CiAgICd0YXAnOiB7Ci0gICAgJ2Vudic6IHsnR1pJUF9QUk9HUkFNJzogZ3ppcC5wYXRoKCl9 LAorICAgICdlbnYnOiB7CisgICAgICAnR1pJUF9QUk9HUkFNJzogZ3ppcC5wYXRoKCksCisg ICAgICAnTFo0JzogcHJvZ3JhbV9sejQuZm91bmQoKSA/IHByb2dyYW1fbHo0LnBhdGgoKSA6 ICcnLAorICAgIH0sCiAgICAgJ3Rlc3RzJzogWwogICAgICAgJ3QvMDAxX2Jhc2ljLnBsJywK ICAgICAgICd0LzAwMl9wZ19kdW1wLnBsJywKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVt cC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJj aGl2ZXIuYwppbmRleCAyYmM1NjQ4ZWQ2NC4uMDI3ZGVkNGJhZWEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYworKysgYi9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKQEAgLTIwNzUsNyArMjA3NSw3IEBAIF9kaXNjb3Zl ckFyY2hpdmVGb3JtYXQoQXJjaGl2ZUhhbmRsZSAqQUgpCiAKIAkJLyoKIAkJICogQ2hlY2sg aWYgdGhlIHNwZWNpZmllZCBhcmNoaXZlIGlzIGEgZGlyZWN0b3J5LiBJZiBzbywgY2hlY2sg aWYKLQkJICogdGhlcmUncyBhICJ0b2MuZGF0IiAob3IgInRvYy5kYXQuZ3oiKSBmaWxlIGlu IGl0LgorCQkgKiB0aGVyZSdzIGEgInRvYy5kYXQiIChvciAidG9jLmRhdC57Z3osbHo0fSIp IGZpbGUgaW4gaXQuCiAJCSAqLwogCQlpZiAoc3RhdChBSC0+ZlNwZWMsICZzdCkgPT0gMCAm JiBTX0lTRElSKHN0LnN0X21vZGUpKQogCQl7CkBAIC0yMDg1LDYgKzIwODUsMTAgQEAgX2Rp c2NvdmVyQXJjaGl2ZUZvcm1hdChBcmNoaXZlSGFuZGxlICpBSCkKICNpZmRlZiBIQVZFX0xJ QloKIAkJCWlmIChfZmlsZUV4aXN0c0luRGlyZWN0b3J5KEFILT5mU3BlYywgInRvYy5kYXQu Z3oiKSkKIAkJCQlyZXR1cm4gQUgtPmZvcm1hdDsKKyNlbmRpZgorI2lmZGVmIFVTRV9MWjQK KwkJCWlmIChfZmlsZUV4aXN0c0luRGlyZWN0b3J5KEFILT5mU3BlYywgInRvYy5kYXQubHo0 IikpCisJCQkJcmV0dXJuIEFILT5mb3JtYXQ7CiAjZW5kaWYKIAkJCXBnX2ZhdGFsKCJkaXJl Y3RvcnkgXCIlc1wiIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkIGFyY2hpdmUgKFwi dG9jLmRhdFwiIGRvZXMgbm90IGV4aXN0KSIsCiAJCQkJCSBBSC0+ZlNwZWMpOwpkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kaXJlY3RvcnkuYyBiL3NyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXBfZGlyZWN0b3J5LmMKaW5kZXggYTJmODg5OTVjMDAuLmNlMmEw ODM4ZmE3IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2RpcmVjdG9y eS5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfZGlyZWN0b3J5LmMKQEAgLTc3 OSwxMCArNzc5LDEzIEBAIF9QcmVwUGFyYWxsZWxSZXN0b3JlKEFyY2hpdmVIYW5kbGUgKkFI KQogCiAJCWlmIChzdGF0KGZuYW1lLCAmc3QpID09IDApCiAJCQl0ZS0+ZGF0YUxlbmd0aCA9 IHN0LnN0X3NpemU7Ci0JCWVsc2UKKwkJZWxzZSBpZiAoQUgtPmNvbXByZXNzaW9uX3NwZWMu YWxnb3JpdGhtICE9IFBHX0NPTVBSRVNTSU9OX05PTkUpCiAJCXsKLQkJCS8qIEl0IG1pZ2h0 IGJlIGNvbXByZXNzZWQgKi8KLQkJCXN0cmxjYXQoZm5hbWUsICIuZ3oiLCBzaXplb2YoZm5h bWUpKTsKKwkJCWlmIChBSC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09N UFJFU1NJT05fR1pJUCkKKwkJCQlzdHJsY2F0KGZuYW1lLCAiLmd6Iiwgc2l6ZW9mKGZuYW1l KSk7CisJCQllbHNlIGlmIChBSC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdf Q09NUFJFU1NJT05fTFo0KQorCQkJCXN0cmxjYXQoZm5hbWUsICIubHo0Iiwgc2l6ZW9mKGZu YW1lKSk7CisKIAkJCWlmIChzdGF0KGZuYW1lLCAmc3QpID09IDApCiAJCQkJdGUtPmRhdGFM ZW5ndGggPSBzdC5zdF9zaXplOwogCQl9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAv cGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCA1MjdjNzY1MWFi Mi4uMDgxMDUzMzdiMTUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMK KysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwpAQCAtNzE1LDEzICs3MTUsMTIgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9O RToKIAkJCS8qIGZhbGx0aHJvdWdoICovCiAJCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoK KwkJCS8qIGZhbGx0aHJvdWdoICovCisJCWNhc2UgUEdfQ09NUFJFU1NJT05fTFo0OgogCQkJ YnJlYWs7CiAJCWNhc2UgUEdfQ09NUFJFU1NJT05fWlNURDoKIAkJCXBnX2ZhdGFsKCJjb21w cmVzc2lvbiB3aXRoICVzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIiwgIlpTVEQiKTsKIAkJCWJy ZWFrOwotCQljYXNlIFBHX0NPTVBSRVNTSU9OX0xaNDoKLQkJCXBnX2ZhdGFsKCJjb21wcmVz c2lvbiB3aXRoICVzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIiwgIkxaNCIpOwotCQkJYnJlYWs7 CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1w LnBsIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKaW5kZXggNzg0NTQ5Mjhj Y2EuLjcyYjE5ZWU2Y2RlIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdf ZHVtcC5wbAorKysgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbApAQCAtMTM5 LDYgKzEzOSw4MCBAQCBteSAlcGdkdW1wX3J1bnMgPSAoCiAJCQlhcmdzICAgID0+IFsgJy1k JywgIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2d6aXBfcGxhaW4uc3FsLmd6IiwgXSwKIAkJfSwK IAl9LAorCisJIyBEbyBub3QgdXNlIC0tbm8tc3luYyB0byBnaXZlIHRlc3QgY292ZXJhZ2Ug Zm9yIGRhdGEgc3luYy4KKwljb21wcmVzc2lvbl9sejRfY3VzdG9tID0+IHsKKwkJdGVzdF9r ZXkgICAgICAgPT4gJ2NvbXByZXNzaW9uJywKKwkJY29tcGlsZV9vcHRpb24gPT4gJ2x6NCcs CisJCWR1bXBfY21kICAgICAgID0+IFsKKwkJCSdwZ19kdW1wJywgICAgICAnLS1mb3JtYXQ9 Y3VzdG9tJywKKwkJCSctLWNvbXByZXNzPWx6NCcsICItLWZpbGU9JHRlbXBkaXIvY29tcHJl c3Npb25fbHo0X2N1c3RvbS5kdW1wIiwKKwkJCSdwb3N0Z3JlcycsCisJCV0sCisJCXJlc3Rv cmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3JlJywKKwkJCSItLWZpbGU9JHRlbXBkaXIvY29t cHJlc3Npb25fbHo0X2N1c3RvbS5zcWwiLAorCQkJIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6 NF9jdXN0b20uZHVtcCIsCisJCV0sCisJCWNvbW1hbmRfbGlrZSA9PiB7CisJCQljb21tYW5k ID0+IFsKKwkJCQkncGdfcmVzdG9yZScsCisJCQkJJy1sJywgIiR0ZW1wZGlyL2NvbXByZXNz aW9uX2x6NF9jdXN0b20uZHVtcCIsCisJCQldLAorCQkJZXhwZWN0ZWQgPT4gcXIvQ29tcHJl c3Npb246IGx6NC8sCisJCQluYW1lID0+ICdkYXRhIGNvbnRlbnQgaXMgbHo0IGNvbXByZXNz ZWQnCisJCX0sCisJfSwKKworCSMgRG8gbm90IHVzZSAtLW5vLXN5bmMgdG8gZ2l2ZSB0ZXN0 IGNvdmVyYWdlIGZvciBkYXRhIHN5bmMuCisJY29tcHJlc3Npb25fbHo0X2RpciA9PiB7CisJ CXRlc3Rfa2V5ICAgICAgID0+ICdjb21wcmVzc2lvbicsCisJCWNvbXBpbGVfb3B0aW9uID0+ ICdsejQnLAorCQlkdW1wX2NtZCAgICAgICA9PiBbCisJCQkncGdfZHVtcCcsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJy0tam9icz0yJywKKwkJCSctLWZvcm1hdD1kaXJlY3Rv cnknLCAgICAgICAgICAgICAgICAgICAnLS1jb21wcmVzcz1sejQ6MScsCisJCQkiLS1maWxl PSR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9kaXIiLCAncG9zdGdyZXMnLAorCQldLAorCQkj IEdpdmUgY292ZXJhZ2UgZm9yIG1hbnVhbGx5IGNvbXByZXNzZWQgYmxvYi50b2MgZmlsZXMg ZHVyaW5nCisJCSMgcmVzdG9yZS4KKwkJY29tcHJlc3NfY21kID0+IHsKKwkJCXByb2dyYW0g PT4gJEVOVnsnTFo0J30sCisJCQlhcmdzICAgID0+IFsKKwkJCQknLXonLCAnLWYnLCAnLS1y bScsCisJCQkJIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9kaXIvYmxvYnMudG9jIiwKKwkJ CQkiJHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X2Rpci9ibG9icy50b2MubHo0IiwKKwkJCV0s CisJCX0sCisJCSMgVmVyaWZ5IHRoYXQgZGF0YSBmaWxlcyB3ZXJlIGNvbXByZXNzZWQKKwkJ Z2xvYl9wYXR0ZXJucyA9PiBbCisJCQkiJHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X2Rpci90 b2MuZGF0IiwKKwkJICAgICIkdGVtcGRpci9jb21wcmVzc2lvbl9sejRfZGlyLyouZGF0Lmx6 NCIsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3JlJywgJy0tam9i cz0yJywKKwkJCSItLWZpbGU9JHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X2Rpci5zcWwiLAor CQkJIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9kaXIiLAorCQldLAorCX0sCisKKwljb21w cmVzc2lvbl9sejRfcGxhaW4gPT4geworCQl0ZXN0X2tleSAgICAgICA9PiAnY29tcHJlc3Np b24nLAorCQljb21waWxlX29wdGlvbiA9PiAnbHo0JywKKwkJZHVtcF9jbWQgICAgICAgPT4g WworCQkJJ3BnX2R1bXAnLCAnLS1mb3JtYXQ9cGxhaW4nLCAnLS1jb21wcmVzcz1sejQnLAor CQkJIi0tZmlsZT0kdGVtcGRpci9jb21wcmVzc2lvbl9sejRfcGxhaW4uc3FsLmx6NCIsICdw b3N0Z3JlcycsCisJCV0sCisJCSMgRGVjb21wcmVzcyB0aGUgZ2VuZXJhdGVkIGZpbGUgdG8g cnVuIHRocm91Z2ggdGhlIHRlc3RzLgorCQljb21wcmVzc19jbWQgPT4geworCQkJcHJvZ3Jh bSA9PiAkRU5WeydMWjQnfSwKKwkJCWFyZ3MgICAgPT4gWworCQkJCSctZCcsICctZicsCisJ CQkJIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9wbGFpbi5zcWwubHo0IiwKKwkJCQkiJHRl bXBkaXIvY29tcHJlc3Npb25fbHo0X3BsYWluLnNxbCIsCisJCQldLAorCQl9LAorCX0sCisK IAljbGVhbiA9PiB7CiAJCWR1bXBfY21kID0+IFsKIAkJCSdwZ19kdW1wJywKQEAgLTQxNzUs MTEgKzQyNDksMTEgQEAgZm9yZWFjaCBteSAkcnVuIChzb3J0IGtleXMgJXBnZHVtcF9ydW5z KQogCW15ICRydW5fZGIgICA9ICdwb3N0Z3Jlcyc7CiAKIAkjIFNraXAgY29tbWFuZC1sZXZl bCB0ZXN0cyBmb3IgZ3ppcCBpZiB0aGVyZSBpcyBubyBzdXBwb3J0IGZvciBpdC4KLQlpZiAo ICAgZGVmaW5lZCgkcGdkdW1wX3J1bnN7JHJ1bn0tPntjb21waWxlX29wdGlvbn0pCi0JCSYm ICRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXBpbGVfb3B0aW9ufSBlcSAnZ3ppcCcKLQkJJiYg ISRzdXBwb3J0c19nemlwKQorCWlmICgkcGdkdW1wX3J1bnN7JHJ1bn0tPntjb21waWxlX29w dGlvbn0gJiYKKwkJKCRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXBpbGVfb3B0aW9ufSBlcSAn Z3ppcCcgJiYgISRzdXBwb3J0c19nemlwKSB8fAorCQkoJHBnZHVtcF9ydW5zeyRydW59LT57 Y29tcGlsZV9vcHRpb259IGVxICdsejQnICYmICEkc3VwcG9ydHNfbHo0KSkKIAl7Ci0JCW5v dGUgIiRydW46IHNraXBwZWQgZHVlIHRvIG5vIGd6aXAgc3VwcG9ydCI7CisJCW5vdGUgIiRy dW46IHNraXBwZWQgZHVlIHRvIG5vICRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXBpbGVfb3B0 aW9ufSBzdXBwb3J0IjsKIAkJbmV4dDsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy90b29scy9w Z2luY2x1ZGUvY3BsdXNwbHVzY2hlY2sgYi9zcmMvdG9vbHMvcGdpbmNsdWRlL2NwbHVzcGx1 c2NoZWNrCmluZGV4IGRiNDI5NDc0YTI1Li4yYzUwNDJlYjQxNyAxMDA3NTUKLS0tIGEvc3Jj L3Rvb2xzL3BnaW5jbHVkZS9jcGx1c3BsdXNjaGVjaworKysgYi9zcmMvdG9vbHMvcGdpbmNs dWRlL2NwbHVzcGx1c2NoZWNrCkBAIC0xNTIsNiArMTUyLDcgQEAgZG8KIAkjIGFzIGZpZWxk IG5hbWVzLCB3aGljaCBpcyB1bmZvcnR1bmF0ZSBidXQgd2Ugd29uJ3QgY2hhbmdlIGl0IG5v dy4KIAl0ZXN0ICIkZiIgPSBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5oICYmIGNv bnRpbnVlCiAJdGVzdCAiJGYiID0gc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmggJiYg Y29udGludWUKKwl0ZXN0ICIkZiIgPSBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfbHo0Lmgg JiYgY29udGludWUKIAl0ZXN0ICIkZiIgPSBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nfbm9u ZS5oICYmIGNvbnRpbnVlCiAJdGVzdCAiJGYiID0gc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVs LmggJiYgY29udGludWUKIAl0ZXN0ICIkZiIgPSBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3Vw X2FyY2hpdmVyLmggJiYgY29udGludWUKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5k ZXggZDRiYjc0NDJiZWMuLmQ1M2NmZjk0ZmU3IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdApAQCAtMTM4Nyw2ICsxMzg3LDcgQEAgTFdMb2NrCiBMV0xvY2tIYW5kbGUKIExXTG9j a01vZGUKIExXTG9ja1BhZGRlZAorTFo0Q29tcHJlc3NvclN0YXRlCiBMWjRGX2NvbXByZXNz aW9uQ29udGV4dF90CiBMWjRGX2RlY29tcHJlc3NPcHRpb25zX3QKIExaNEZfZGVjb21wcmVz c2lvbkNvbnRleHRfdAotLSAKMi4zOS4xCgo= --------------svO0l9foLms6unOl0KQH4LJu--