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 1pU5vL-0003Oj-28 for pgsql-hackers@arkaria.postgresql.org; Mon, 20 Feb 2023 13:09:44 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pU5vJ-0008QD-KH for pgsql-hackers@arkaria.postgresql.org; Mon, 20 Feb 2023 13:09:41 +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 1pU5vI-0008Pw-NO for pgsql-hackers@lists.postgresql.org; Mon, 20 Feb 2023 13:09:41 +0000 Received: from mail-40134.protonmail.ch ([185.70.40.134]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pU5vB-0005mq-4E for pgsql-hackers@lists.postgresql.org; Mon, 20 Feb 2023 13:09:39 +0000 Date: Mon, 20 Feb 2023 13:09:22 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pm.me; s=protonmail3; t=1676898567; x=1677157767; bh=7WYZ6gSBLZKrl9cmevtz2r1SDw/lP1DJH3P01cUTIII=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector; b=cwk3SDkxoNo6i6B2kJC8HC6qnY0MtXGIA1VSVy/qNWwC8ypBtMBEmCHOYKB5k0zLk 3ukFxjDTNZmNrQxY+6CdLHbkVgb6I9USF4fifLP981Fnl6vBuyVG9d3Xy9Hbawl5GQ QKlzxbg+VK/nTqwXeGs11PKfYv2gxqGA0P44ykFp7ClaNxDeo6RqMYMDNwR8qGfGmJ /dsnJVg4+KthD6F0YkVva/BKoWjYgyBL5rkp6dFWuAiq/akQwXOnxS5TO1i+a5Dwla 8gqtMnwTvbocUtqqgwv4mhxNXch75gKe4CQ2jntQamDkxuxq7zBFqbACy/pkHXE/rs zL9phVS1sWICA== To: Tomas Vondra From: gkokolatos@pm.me Cc: "shiy.fnst@fujitsu.com" , Michael Paquier , Justin Pryzby , "pgsql-hackers@lists.postgresql.org" , Rachel Heaton Subject: Re: Add LZ4 compression in pg_dump Message-ID: In-Reply-To: <535565cd-b69f-c064-a845-15c0fc44db4a@enterprisedb.com> References: <7zu6GYFi72jByVk2SEe_nd8r1DHhwA35vSntAE9sAfiMX9Lfk6bwimkwmu7GDgYaEvL27SE4qF1uK4_LHWQM4H-SXOwkMAI-GV8PKGmED_E=@pm.me> <20230126062846.GO22427@telsasoft.com> <6YZqN2HEE4yJxxxXWiMl4QWwKzLon0SdKETTGVkT9zjWnXMftGZjLKHHjGFuwC_5I6xL2s8nMXdLQGA4vEFveYXSHbfD9K9pDQvEJF2y99o=@pm.me> <535565cd-b69f-c064-a845-15c0fc44db4a@enterprisedb.com> Feedback-ID: 6383013:user:proton MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_JUIMqrFBYvKDK5ZkGIoStK58M05RwtoKMsKHzaS9SM" 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. --b1_JUIMqrFBYvKDK5ZkGIoStK58M05RwtoKMsKHzaS9SM Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable ------- Original Message ------- On Sunday, February 19th, 2023 at 6:10 PM, Tomas Vondra wrote: > > > 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. Thank you very much Tomas! Indeed I have not being paying any attention at the commit messages. > 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). Done. Rachel has been correctly identified as author in the relevant parts up to commit 98fe74218d. After that, she had offered review comments and I have taken the liberty to add her as a reviewer through out. Also I think that Shi Yu should be credited as a reviewer of 0003. > > The 0003 commit message seems somewhat confusing - I added some XXX > lines asking about unclear stuff. Please find in the attached v30 an updated message, as well as an amended reviewer list. Also v30 addresses the final comments raised by Justin. Cheers, //Georgios > regards > > -- > Tomas Vondra > EnterpriseDB: http://www.enterprisedb.com > The Enterprise PostgreSQL Company --b1_JUIMqrFBYvKDK5ZkGIoStK58M05RwtoKMsKHzaS9SM Content-Type: text/x-patch; name=v30-0001-Prepare-pg_dump-internals-for-additional-compres.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v30-0001-Prepare-pg_dump-internals-for-additional-compres.patch RnJvbSBkMzRmYjE4NTYzODdjNjQ1ZGQwZjE3MmQ2MzZmZDczYWI4ODM3Y2U0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IE1vbiwgMjAgRmViIDIwMjMgMTI6MTM6MDQgKzAwMDAKU3ViamVjdDogW1BBVENIIHYz MCAxLzNdIFByZXBhcmUgcGdfZHVtcCBpbnRlcm5hbHMgZm9yIGFkZGl0aW9uYWwgY29tcHJlc3Np b24KIG1ldGhvZHMKCkNvbW1pdCBiZjlhYTQ5MGRiIGludHJvZHVjZWQgYSBnZW5lcmljIGNvbXBy ZXNzaW9uIEFQSSBpbiBjb21wcmVzc19pby57YyxofSB0bwptYWtlIHJldXNlIGVhc2llciwgYW5k IGFsbG93IGFkZGluZyBtb3JlIGNvbXByZXNzaW9uIGFsZ29yaXRobXMuIEhvd2V2ZXIsCnBnX2Jh Y2t1cF9hcmNoaXZlci5jIHdhcyBub3Qgc3dpdGNoZWQgdG8gdGhpcyBBUEkgYW5kIGNvbnRpbnVl ZCB0byBjYWxsCnRoZSBjb21wcmVzc2lvbiBkaXJlY3RseS4KClRoaXMgY29tbWl0IHRlYWNoZXMg cGdfYmFja3VwX2FyY2hpdmVyLmMgYWJvdXQgdGhlIGNvbXByZXNzaW9uIEFQSSwgc28KdGhhdCBp dCBjYW4gYmVuZWZpdCBmcm9tIGJmOWFhNDkwZGIgKHNpbXBsZXIgY29kZSwgZWFzaWVyIGFkZGl0 aW9uIG9mCm5ldyBjb21wcmVzc2lvbiBtZXRob2RzKS4KCkF1dGhvcjogR2Vvcmdpb3MgS29rb2xh dG9zClJldmlld2VkLWJ5OiBNaWNoYWVsIFBhcXVpZXIsIFJhY2hlbCBIZWF0b24sIEp1c3RpbiBQ cnl6YnksIFRvbWFzIFZvbmRyYQpEaXNjdXNzaW9uOgpodHRwczovL3Bvc3Rnci5lcy9tL2ZhVU5F T3B0czl2dW5FYUxubXhtRy1EbGRMU2dfcWwxMzdPQzNKWURtZ3JPTUhtMVJ2dldZMklkQmt2X0NS eG01c3BDQ2JfT21LTmsyVDAzVE1tMGZCRVd2ZUZGOXdBMVdpelB1QWdCN1NzJTNEJTQwcHJvdG9u bWFpbC5jb20KLS0tCiBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYyAgICAgICAgfCAgOTgg KysrKysrKysrKysrKysrKy0tLQogc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmggICAgICAg IHwgICA0ICsKIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyB8IDEzOCArKysr KysrKysrLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2 ZXIuaCB8ICAyNyArLS0tLS0KIDQgZmlsZXMgY2hhbmdlZCwgMTM5IGluc2VydGlvbnMoKyksIDEy OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8u YyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jCmluZGV4IDdhMmM4MGJiYzQuLjQwNzRj YzAzMWMgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jCisrKyBiL3Ny Yy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jCkBAIC01Niw2ICs1Niw0MiBAQAogI2luY2x1ZGUg ImNvbXByZXNzX2lvLmgiCiAjaW5jbHVkZSAicGdfYmFja3VwX3V0aWxzLmgiCiAKKyNpZmRlZiBI QVZFX0xJQloKKyNpbmNsdWRlIDx6bGliLmg+CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKiBHZW5lcmljIGZ1bmN0aW9ucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Ki8KKworLyoKKyAqIENoZWNrcyB3ZXRoZXIgYSBjb21wcmVzc2lvbiBhbGdvcml0aG0gaXMgc3Vw cG9ydGVkLgorICoKKyAqIE9uIHN1Y2Nlc3MgcmV0dXJucyBOVUxMLCBvdGhlcndpc2UgcmV0dXJu cyBhIG1hbGxvYydlZCBzdHJpbmcgd2hpY2ggY2FuIGJlCisgKiB1c2VkIGJ5IHRoZSBjYWxsZXIg aW4gYW4gZXJyb3IgbWVzc2FnZS4KKyAqLworY2hhciAqCitzdXBwb3J0c19jb21wcmVzc2lvbihj b25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7CisJY29u c3QgcGdfY29tcHJlc3NfYWxnb3JpdGhtCWFsZ29yaXRobSA9IGNvbXByZXNzaW9uX3NwZWMuYWxn b3JpdGhtOworCWJvb2wJCQkJCQlzdXBwb3J0ZWQgPSBmYWxzZTsKKworCWlmIChhbGdvcml0aG0g PT0gUEdfQ09NUFJFU1NJT05fTk9ORSkKKwkJc3VwcG9ydGVkID0gdHJ1ZTsKKyNpZmRlZiBIQVZF X0xJQloKKwlpZiAoYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCisJCXN1cHBvcnRl ZCA9IHRydWU7CisjZW5kaWYKKworCWlmICghc3VwcG9ydGVkKQorCQlyZXR1cm4gcHNwcmludGYo InRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwKKwkJCQkJ CWdldF9jb21wcmVzc19hbGdvcml0aG1fbmFtZShhbGdvcml0aG0pKTsKKworCXJldHVybiBOVUxM OworfQorCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogQ29tcHJlc3NvciBBUEkKICAq LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDkwLDE2ICs1MjYsMTkgQEAgY2ZvcGVuX3dyaXRl KGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCiB9CiAKIC8qCi0gKiBPcGVucyBm aWxlICdwYXRoJyBpbiAnbW9kZScuIElmIGNvbXByZXNzaW9uIGlzIEdaSVAsIHRoZSBmaWxlCi0g KiBpcyBvcGVuZWQgd2l0aCBsaWJ6IGd6b3BlbigpLCBvdGhlcndpc2Ugd2l0aCBwbGFpbiBmb3Bl bigpLgorICogVGhpcyBpcyB0aGUgd29ya2hvcnNlIGZvciBjZm9wZW4oKSBvciBjZmRvcGVuKCku IEl0IG9wZW5zIGZpbGUgJ3BhdGgnIG9yCisgKiBhc3NvY2lhdGVzIGEgc3RyZWFtICdmZCcsIGlm ICdmZCcgaXMgYSB2YWxpZCBkZXNjcmlwdG9yLCBpbiAnbW9kZScuIFRoZQorICogZGVzY3JpcHRv ciBpcyBub3QgZHVwJ2VkIGFuZCBpdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8g ZG8gc28uCisgKiBUaGUgY2FsbGVyIG11c3QgdmVyaWZ5IHRoYXQgdGhlICdjb21wcmVzc19hbGdv cml0aG0nIGlzIHN1cHBvcnRlZCBieSB0aGUKKyAqIGN1cnJlbnQgYnVpbGQuCiAgKgogICogT24g ZmFpbHVyZSwgcmV0dXJuIE5VTEwgd2l0aCBhbiBlcnJvciBjb2RlIGluIGVycm5vLgogICovCi1j ZnAgKgotY2ZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCi0JICAgY29u c3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQorc3RhdGljIGNm cCAqCitjZm9wZW5faW50ZXJuYWwoY29uc3QgY2hhciAqcGF0aCwgaW50IGZkLCBjb25zdCBjaGFy ICptb2RlLAorCQkJCXBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykK IHsKLQljZnAJCSAgICpmcCA9IHBnX21hbGxvYyhzaXplb2YoY2ZwKSk7CisJY2ZwCQkgICAqZnAg PSBwZ19tYWxsb2MwKHNpemVvZihjZnApKTsKIAogCWlmIChjb21wcmVzc2lvbl9zcGVjLmFsZ29y aXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQogCXsKQEAgLTUxMSwxNSArNTUwLDIwIEBAIGNm b3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLAogCiAJCQlzbnByaW50Ziht b2RlX2NvbXByZXNzaW9uLCBzaXplb2YobW9kZV9jb21wcmVzc2lvbiksICIlcyVkIiwKIAkJCQkJ IG1vZGUsIGNvbXByZXNzaW9uX3NwZWMubGV2ZWwpOwotCQkJZnAtPmNvbXByZXNzZWRmcCA9IGd6 b3BlbihwYXRoLCBtb2RlX2NvbXByZXNzaW9uKTsKKwkJCWlmIChmZCA+PSAwKQorCQkJCWZwLT5j b21wcmVzc2VkZnAgPSBnemRvcGVuKGZkLCBtb2RlX2NvbXByZXNzaW9uKTsKKwkJCWVsc2UKKwkJ CQlmcC0+Y29tcHJlc3NlZGZwID0gZ3pvcGVuKHBhdGgsIG1vZGVfY29tcHJlc3Npb24pOwogCQl9 CiAJCWVsc2UKIAkJewogCQkJLyogZG9uJ3Qgc3BlY2lmeSBhIGxldmVsLCBqdXN0IHVzZSB0aGUg emxpYiBkZWZhdWx0ICovCi0JCQlmcC0+Y29tcHJlc3NlZGZwID0gZ3pvcGVuKHBhdGgsIG1vZGUp OworCQkJaWYgKGZkID49IDApCisJCQkJZnAtPmNvbXByZXNzZWRmcCA9IGd6ZG9wZW4oZmQsIG1v ZGUpOworCQkJZWxzZQorCQkJCWZwLT5jb21wcmVzc2VkZnAgPSBnem9wZW4ocGF0aCwgbW9kZSk7 CiAJCX0KIAotCQlmcC0+dW5jb21wcmVzc2VkZnAgPSBOVUxMOwogCQlpZiAoZnAtPmNvbXByZXNz ZWRmcCA9PSBOVUxMKQogCQl7CiAJCQlmcmVlX2tlZXBfZXJybm8oZnApOwpAQCAtNTMxLDEwICs1 NzUsMTEgQEAgY2ZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCiAJfQog CWVsc2UKIAl7Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCWZwLT5jb21wcmVzc2VkZnAgPSBOVUxMOwot I2VuZGlmCi0JCWZwLT51bmNvbXByZXNzZWRmcCA9IGZvcGVuKHBhdGgsIG1vZGUpOworCQlpZiAo ZmQgPj0gMCkKKwkJCWZwLT51bmNvbXByZXNzZWRmcCA9IGZkb3BlbihmZCwgbW9kZSk7CisJCWVs c2UKKwkJCWZwLT51bmNvbXByZXNzZWRmcCA9IGZvcGVuKHBhdGgsIG1vZGUpOworCiAJCWlmIChm cC0+dW5jb21wcmVzc2VkZnAgPT0gTlVMTCkKIAkJewogCQkJZnJlZV9rZWVwX2Vycm5vKGZwKTsK QEAgLTU0NSw2ICs1OTAsMzMgQEAgY2ZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIg Km1vZGUsCiAJcmV0dXJuIGZwOwogfQogCisvKgorICogT3BlbnMgZmlsZSAncGF0aCcgaW4gJ21v ZGUnIGFuZCBjb21wcmVzc2lvbiBhcyBkZWZpbmVkIGluCisgKiBjb21wcmVzc2lvbl9zcGVjLiBU aGUgY2FsbGVyIG11c3QgdmVyaWZ5IHRoYXQgdGhlIGNvbXByZXNzaW9uCisgKiBpcyBzdXBwb3J0 ZWQgYnkgdGhlIGN1cnJlbnQgYnVpbGQuCisgKgorICogT24gZmFpbHVyZSwgcmV0dXJuIE5VTEwg d2l0aCBhbiBlcnJvciBjb2RlIGluIGVycm5vLgorICovCitjZnAgKgorY2ZvcGVuKGNvbnN0IGNo YXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCisJICAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lm aWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQoreworCXJldHVybiBjZm9wZW5faW50ZXJuYWwocGF0 aCwgLTEsIG1vZGUsIGNvbXByZXNzaW9uX3NwZWMpOworfQorCisvKgorICogQXNzb2NpYXRlcyBh IHN0cmVhbSAnZmQnLCBpZiAnZmQnIGlzIGEgdmFsaWQgZGVzY3JpcHRvciwgaW4gJ21vZGUnCisg KiBhbmQgY29tcHJlc3Npb24gYXMgZGVmaW5lZCBpbiBjb21wcmVzc2lvbl9zcGVjLiBUaGUgY2Fs bGVyIG11c3QKKyAqIHZlcmlmeSB0aGF0IHRoZSBjb21wcmVzc2lvbiBpcyBzdXBwb3J0ZWQgYnkg dGhlIGN1cnJlbnQgYnVpbGQuCisgKgorICogT24gZmFpbHVyZSwgcmV0dXJuIE5VTEwgd2l0aCBh biBlcnJvciBjb2RlIGluIGVycm5vLgorICovCitjZnAgKgorY2Zkb3BlbihpbnQgZmQsIGNvbnN0 IGNoYXIgKm1vZGUsCisJCWNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Np b25fc3BlYykKK3sKKwlyZXR1cm4gY2ZvcGVuX2ludGVybmFsKE5VTEwsIGZkLCBtb2RlLCBjb21w cmVzc2lvbl9zcGVjKTsKK30KIAogaW50CiBjZnJlYWQodm9pZCAqcHRyLCBpbnQgc2l6ZSwgY2Zw ICpmcCkKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5oIGIvc3JjL2Jp bi9wZ19kdW1wL2NvbXByZXNzX2lvLmgKaW5kZXggYTQyOWRjNDc4OS4uOGJlYjEwNThlYyAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmgKKysrIGIvc3JjL2Jpbi9wZ19k dW1wL2NvbXByZXNzX2lvLmgKQEAgLTIxLDYgKzIxLDggQEAKICNkZWZpbmUgWkxJQl9PVVRfU0la RQk0MDk2CiAjZGVmaW5lIFpMSUJfSU5fU0laRQk0MDk2CiAKK2V4dGVybiBjaGFyICpzdXBwb3J0 c19jb21wcmVzc2lvbihjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9u X3NwZWMpOworCiAvKiBQcm90b3R5cGUgZm9yIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIFdyaXRlRGF0 YVRvQXJjaGl2ZSgpICovCiB0eXBlZGVmIHZvaWQgKCpXcml0ZUZ1bmMpIChBcmNoaXZlSGFuZGxl ICpBSCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKIApAQCAtNTQsNiArNTYsOCBAQCB0 eXBlZGVmIHN0cnVjdCBjZnAgY2ZwOwogCiBleHRlcm4gY2ZwICpjZm9wZW4oY29uc3QgY2hhciAq cGF0aCwgY29uc3QgY2hhciAqbW9kZSwKIAkJCQkgICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZp Y2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOworZXh0ZXJuIGNmcCAqY2Zkb3BlbihpbnQgZmQsIGNv bnN0IGNoYXIgKm1vZGUsCisJCQkJCWNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29t cHJlc3Npb25fc3BlYyk7CiBleHRlcm4gY2ZwICpjZm9wZW5fcmVhZChjb25zdCBjaGFyICpwYXRo LCBjb25zdCBjaGFyICptb2RlKTsKIGV4dGVybiBjZnAgKmNmb3Blbl93cml0ZShjb25zdCBjaGFy ICpwYXRoLCBjb25zdCBjaGFyICptb2RlLAogCQkJCQkJIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNp ZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAv cGdfYmFja3VwX2FyY2hpdmVyLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVy LmMKaW5kZXggMjY5YmZjZTAxOS4uZTAyY2UyMmRiMiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBf YXJjaGl2ZXIuYwpAQCAtMzEsNiArMzEsNyBAQAogI2VuZGlmCiAKICNpbmNsdWRlICJjb21tb24v c3RyaW5nLmgiCisjaW5jbHVkZSAiY29tcHJlc3NfaW8uaCIKICNpbmNsdWRlICJkdW1wdXRpbHMu aCIKICNpbmNsdWRlICJmZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKICNpbmNsdWRlICJsaWIvc3Ry aW5naW5mby5oIgpAQCAtNDMsMTMgKzQ0LDYgQEAKICNkZWZpbmUgVEVYVF9EVU1QX0hFQURFUiAi LS1cbi0tIFBvc3RncmVTUUwgZGF0YWJhc2UgZHVtcFxuLS1cblxuIgogI2RlZmluZSBURVhUX0RV TVBBTExfSEVBREVSICItLVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGR1bXBcbi0t XG5cbiIKIAotLyogc3RhdGUgbmVlZGVkIHRvIHNhdmUvcmVzdG9yZSBhbiBhcmNoaXZlJ3Mgb3V0 cHV0IHRhcmdldCAqLwotdHlwZWRlZiBzdHJ1Y3QgX291dHB1dENvbnRleHQKLXsKLQl2b2lkCSAg ICpPRjsKLQlpbnQJCQlnek91dDsKLX0gT3V0cHV0Q29udGV4dDsKLQogLyoKICAqIFN0YXRlIGZv ciB0cmFja2luZyBUb2NFbnRyeXMgdGhhdCBhcmUgcmVhZHkgdG8gcHJvY2VzcyBkdXJpbmcgYSBw YXJhbGxlbAogICogcmVzdG9yZS4gIChUaGlzIHVzZWQgdG8gYmUgYSBsaXN0LCBhbmQgd2Ugc3Rp bGwgY2FsbCBpdCB0aGF0LCB0aG91Z2ggbm93CkBAIC0xMDEsOCArOTUsOCBAQCBzdGF0aWMgdm9p ZCBkdW1wX2xvX2J1ZihBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMgdm9pZCBkdW1wVGltZXN0 YW1wKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICptc2csIHRpbWVfdCB0aW0pOwogc3Rh dGljIHZvaWQgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFt ZSwKIAkJCQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3Nw ZWMpOwotc3RhdGljIE91dHB1dENvbnRleHQgU2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCk7 Ci1zdGF0aWMgdm9pZCBSZXN0b3JlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBPdXRwdXRDb250 ZXh0IHNhdmVkQ29udGV4dCk7CitzdGF0aWMgY2ZwICpTYXZlT3V0cHV0KEFyY2hpdmVIYW5kbGUg KkFIKTsKK3N0YXRpYyB2b2lkIFJlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNmcCAq c2F2ZWRPdXRwdXQpOwogCiBzdGF0aWMgaW50CXJlc3RvcmVfdG9jX2VudHJ5KEFyY2hpdmVIYW5k bGUgKkFILCBUb2NFbnRyeSAqdGUsIGJvb2wgaXNfcGFyYWxsZWwpOwogc3RhdGljIHZvaWQgcmVz dG9yZV90b2NfZW50cmllc19wcmVmb3JrKEFyY2hpdmVIYW5kbGUgKkFILApAQCAtMjc3LDExICsy NzEsOCBAQCBDbG9zZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQogCUFILT5DbG9zZVB0cihBSCk7CiAK IAkvKiBDbG9zZSB0aGUgb3V0cHV0ICovCi0JZXJybm8gPSAwOwkJCQkJLyogaW4gY2FzZSBnemNs b3NlKCkgZG9lc24ndCBzZXQgaXQgKi8KLQlpZiAoQUgtPmd6T3V0KQotCQlyZXMgPSBHWkNMT1NF KEFILT5PRik7Ci0JZWxzZSBpZiAoQUgtPk9GICE9IHN0ZG91dCkKLQkJcmVzID0gZmNsb3NlKEFI LT5PRik7CisJZXJybm8gPSAwOworCXJlcyA9IGNmY2xvc2UoQUgtPk9GKTsKIAogCWlmIChyZXMg IT0gMCkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBvdXRwdXQgZmlsZTogJW0iKTsKQEAg LTM2Myw3ICszNTQsNyBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJUmVzdG9yZU9w dGlvbnMgKnJvcHQgPSBBSC0+cHVibGljLnJvcHQ7CiAJYm9vbAkJcGFyYWxsZWxfbW9kZTsKIAlU b2NFbnRyeSAgICp0ZTsKLQlPdXRwdXRDb250ZXh0IHNhdjsKKwljZnAJCSAgICpzYXY7CiAKIAlB SC0+c3RhZ2UgPSBTVEFHRV9JTklUSUFMSVpJTkc7CiAKQEAgLTM5MSwxNyArMzgyLDIxIEBAIFJl c3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCkKIAkvKgogCSAqIE1ha2Ugc3VyZSB3ZSB3b24ndCBu ZWVkIChkZSljb21wcmVzc2lvbiB3ZSBoYXZlbid0IGdvdAogCSAqLwotI2lmbmRlZiBIQVZFX0xJ QloKLQlpZiAoQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9O X0daSVAgJiYKLQkJQUgtPlByaW50VG9jRGF0YVB0ciAhPSBOVUxMKQorCWlmIChBSC0+UHJpbnRU b2NEYXRhUHRyICE9IE5VTEwpCiAJewogCQlmb3IgKHRlID0gQUgtPnRvYy0+bmV4dDsgdGUgIT0g QUgtPnRvYzsgdGUgPSB0ZS0+bmV4dCkKIAkJewogCQkJaWYgKHRlLT5oYWREdW1wZXIgJiYgKHRl LT5yZXFzICYgUkVRX0RBVEEpICE9IDApCi0JCQkJcGdfZmF0YWwoImNhbm5vdCByZXN0b3JlIGZy b20gY29tcHJlc3NlZCBhcmNoaXZlIChjb21wcmVzc2lvbiBub3Qgc3VwcG9ydGVkIGluIHRoaXMg aW5zdGFsbGF0aW9uKSIpOworCQkJeworCQkJCWNoYXIgKmVycm1zZyA9IHN1cHBvcnRzX2NvbXBy ZXNzaW9uKEFILT5jb21wcmVzc2lvbl9zcGVjKTsKKwkJCQlpZiAoZXJybXNnKQorCQkJCQlwZ19m YXRhbCgiY2Fubm90IHJlc3RvcmUgZGF0YSBmcm9tIGNvbXByZXNzZWQgYXJjaGl2ZSAoJXMpIiwK KwkJCQkJCQkgIGVycm1zZyk7CisJCQkJZWxzZQorCQkJCQlicmVhazsKKwkJCX0KIAkJfQogCX0K LSNlbmRpZgogCiAJLyoKIAkgKiBQcmVwYXJlIGluZGV4IGFycmF5cywgc28gd2UgY2FuIGFzc3Vt ZSB3ZSBoYXZlIHRoZW0gdGhyb3VnaG91dCByZXN0b3JlLgpAQCAtMTEzMyw3ICsxMTI4LDcgQEAg UHJpbnRUT0NTdW1tYXJ5KEFyY2hpdmUgKkFIWCkKIAlUb2NFbnRyeSAgICp0ZTsKIAlwZ19jb21w cmVzc19zcGVjaWZpY2F0aW9uIG91dF9jb21wcmVzc2lvbl9zcGVjID0gezB9OwogCXRlU2VjdGlv bgljdXJTZWN0aW9uOwotCU91dHB1dENvbnRleHQgc2F2OworCWNmcAkJICAgKnNhdjsKIAljb25z dCBjaGFyICpmbXROYW1lOwogCWNoYXIJCXN0YW1wX3N0cls2NF07CiAKQEAgLTE1MDgsNTggKzE1 MDMsMzIgQEAgc3RhdGljIHZvaWQKIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3Qg Y2hhciAqZmlsZW5hbWUsCiAJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21w cmVzc2lvbl9zcGVjKQogewotCWludAkJCWZuOworCWNvbnN0IGNoYXIgKm1vZGU7CisJaW50CQkJ Zm4gPSAtMTsKIAogCWlmIChmaWxlbmFtZSkKIAl7CiAJCWlmIChzdHJjbXAoZmlsZW5hbWUsICIt IikgPT0gMCkKIAkJCWZuID0gZmlsZW5vKHN0ZG91dCk7Ci0JCWVsc2UKLQkJCWZuID0gLTE7CiAJ fQogCWVsc2UgaWYgKEFILT5GSCkKIAkJZm4gPSBmaWxlbm8oQUgtPkZIKTsKIAllbHNlIGlmIChB SC0+ZlNwZWMpCiAJewotCQlmbiA9IC0xOwogCQlmaWxlbmFtZSA9IEFILT5mU3BlYzsKIAl9CiAJ ZWxzZQogCQlmbiA9IGZpbGVubyhzdGRvdXQpOwogCi0JLyogSWYgY29tcHJlc3Npb24gZXhwbGlj aXRseSByZXF1ZXN0ZWQsIHVzZSBnem9wZW4gKi8KLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoY29t cHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKLQl7Ci0JCWNo YXIJCWZtb2RlWzE0XTsKKwlpZiAoQUgtPm1vZGUgPT0gYXJjaE1vZGVBcHBlbmQpCisJCW1vZGUg PSBQR19CSU5BUllfQTsKKwllbHNlCisJCW1vZGUgPSBQR19CSU5BUllfVzsKIAotCQkvKiBEb24n dCB1c2UgUEdfQklOQVJZX3ggc2luY2UgdGhpcyBpcyB6bGliICovCi0JCXNwcmludGYoZm1vZGUs ICJ3YiVkIiwgY29tcHJlc3Npb25fc3BlYy5sZXZlbCk7Ci0JCWlmIChmbiA+PSAwKQotCQkJQUgt Pk9GID0gZ3pkb3BlbihkdXAoZm4pLCBmbW9kZSk7Ci0JCWVsc2UKLQkJCUFILT5PRiA9IGd6b3Bl bihmaWxlbmFtZSwgZm1vZGUpOwotCQlBSC0+Z3pPdXQgPSAxOwotCX0KKwlpZiAoZm4gPj0gMCkK KwkJQUgtPk9GID0gY2Zkb3BlbihkdXAoZm4pLCBtb2RlLCBjb21wcmVzc2lvbl9zcGVjKTsKIAll bHNlCi0jZW5kaWYKLQl7CQkJCQkJCS8qIFVzZSBmb3BlbiAqLwotCQlpZiAoQUgtPm1vZGUgPT0g YXJjaE1vZGVBcHBlbmQpCi0JCXsKLQkJCWlmIChmbiA+PSAwKQotCQkJCUFILT5PRiA9IGZkb3Bl bihkdXAoZm4pLCBQR19CSU5BUllfQSk7Ci0JCQllbHNlCi0JCQkJQUgtPk9GID0gZm9wZW4oZmls ZW5hbWUsIFBHX0JJTkFSWV9BKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCWlmIChmbiA+PSAwKQot CQkJCUFILT5PRiA9IGZkb3BlbihkdXAoZm4pLCBQR19CSU5BUllfVyk7Ci0JCQllbHNlCi0JCQkJ QUgtPk9GID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9XKTsKLQkJfQotCQlBSC0+Z3pPdXQg PSAwOwotCX0KKwkJQUgtPk9GID0gY2ZvcGVuKGZpbGVuYW1lLCBtb2RlLCBjb21wcmVzc2lvbl9z cGVjKTsKIAogCWlmICghQUgtPk9GKQogCXsKQEAgLTE1NzAsMzMgKzE1MzksMjQgQEAgU2V0T3V0 cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwKIAl9CiB9CiAKLXN0 YXRpYyBPdXRwdXRDb250ZXh0CitzdGF0aWMgY2ZwICoKIFNhdmVPdXRwdXQoQXJjaGl2ZUhhbmRs ZSAqQUgpCiB7Ci0JT3V0cHV0Q29udGV4dCBzYXY7Ci0KLQlzYXYuT0YgPSBBSC0+T0Y7Ci0Jc2F2 Lmd6T3V0ID0gQUgtPmd6T3V0OwotCi0JcmV0dXJuIHNhdjsKKwlyZXR1cm4gKGNmcCAqKSBBSC0+ T0Y7CiB9CiAKIHN0YXRpYyB2b2lkCi1SZXN0b3JlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBP dXRwdXRDb250ZXh0IHNhdmVkQ29udGV4dCkKK1Jlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAq QUgsIGNmcCAqc2F2ZWRPdXRwdXQpCiB7CiAJaW50CQkJcmVzOwogCi0JZXJybm8gPSAwOwkJCQkJ LyogaW4gY2FzZSBnemNsb3NlKCkgZG9lc24ndCBzZXQgaXQgKi8KLQlpZiAoQUgtPmd6T3V0KQot CQlyZXMgPSBHWkNMT1NFKEFILT5PRik7Ci0JZWxzZQotCQlyZXMgPSBmY2xvc2UoQUgtPk9GKTsK KwllcnJubyA9IDA7CisJcmVzID0gY2ZjbG9zZShBSC0+T0YpOwogCiAJaWYgKHJlcyAhPSAwKQog CQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIG91dHB1dCBmaWxlOiAlbSIpOwogCi0JQUgtPmd6 T3V0ID0gc2F2ZWRDb250ZXh0Lmd6T3V0OwotCUFILT5PRiA9IHNhdmVkQ29udGV4dC5PRjsKKwlB SC0+T0YgPSBzYXZlZE91dHB1dDsKIH0KIAogCkBAIC0xNzIwLDIyICsxNjgwLDE3IEBAIGFod3Jp dGUoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCBBcmNoaXZlSGFu ZGxlICpBSCkKIAogCQlieXRlc193cml0dGVuID0gc2l6ZSAqIG5tZW1iOwogCX0KLQllbHNlIGlm IChBSC0+Z3pPdXQpCi0JCWJ5dGVzX3dyaXR0ZW4gPSBHWldSSVRFKHB0ciwgc2l6ZSwgbm1lbWIs IEFILT5PRik7CiAJZWxzZSBpZiAoQUgtPkN1c3RvbU91dFB0cikKIAkJYnl0ZXNfd3JpdHRlbiA9 IEFILT5DdXN0b21PdXRQdHIoQUgsIHB0ciwgc2l6ZSAqIG5tZW1iKTsKIAorCS8qCisJICogSWYg d2UncmUgZG9pbmcgYSByZXN0b3JlLCBhbmQgaXQncyBkaXJlY3QgdG8gREIsIGFuZCB3ZSdyZSBj b25uZWN0ZWQKKwkgKiB0aGVuIHNlbmQgaXQgdG8gdGhlIERCLgorCSAqLworCWVsc2UgaWYgKFJl c3RvcmluZ1RvREIoQUgpKQorCQlieXRlc193cml0dGVuID0gRXhlY3V0ZVNxbENvbW1hbmRCdWYo JkFILT5wdWJsaWMsIChjb25zdCBjaGFyICopIHB0ciwgc2l6ZSAqIG5tZW1iKTsKIAllbHNlCi0J ewotCQkvKgotCQkgKiBJZiB3ZSdyZSBkb2luZyBhIHJlc3RvcmUsIGFuZCBpdCdzIGRpcmVjdCB0 byBEQiwgYW5kIHdlJ3JlCi0JCSAqIGNvbm5lY3RlZCB0aGVuIHNlbmQgaXQgdG8gdGhlIERCLgot CQkgKi8KLQkJaWYgKFJlc3RvcmluZ1RvREIoQUgpKQotCQkJYnl0ZXNfd3JpdHRlbiA9IEV4ZWN1 dGVTcWxDb21tYW5kQnVmKCZBSC0+cHVibGljLCAoY29uc3QgY2hhciAqKSBwdHIsIHNpemUgKiBu bWVtYik7Ci0JCWVsc2UKLQkJCWJ5dGVzX3dyaXR0ZW4gPSBmd3JpdGUocHRyLCBzaXplLCBubWVt YiwgQUgtPk9GKSAqIHNpemU7Ci0JfQorCQlieXRlc193cml0dGVuID0gY2Z3cml0ZShwdHIsIHNp emUgKiBubWVtYiwgQUgtPk9GKTsKIAogCWlmIChieXRlc193cml0dGVuICE9IHNpemUgKiBubWVt YikKIAkJV1JJVEVfRVJST1JfRVhJVDsKQEAgLTIyMjQsNiArMjE3OSw3IEBAIF9hbGxvY0FIKGNv bnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZlRm9ybWF0IGZtdCwKIAkJIFNldHVwV29y a2VyUHRyVHlwZSBzZXR1cFdvcmtlclB0cikKIHsKIAlBcmNoaXZlSGFuZGxlICpBSDsKKwlwZ19j b21wcmVzc19zcGVjaWZpY2F0aW9uIG91dF9jb21wcmVzc19zcGVjID0gezB9OwogCiAJcGdfbG9n X2RlYnVnKCJhbGxvY2F0aW5nIEFIIGZvciAlcywgZm9ybWF0ICVkIiwKIAkJCQkgRmlsZVNwZWMg PyBGaWxlU3BlYyA6ICIoc3RkaW8pIiwgZm10KTsKQEAgLTIyNzcsOCArMjIzMyw4IEBAIF9hbGxv Y0FIKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZlRm9ybWF0IGZtdCwKIAltZW1z ZXQoJihBSC0+c3FscGFyc2UpLCAwLCBzaXplb2YoQUgtPnNxbHBhcnNlKSk7CiAKIAkvKiBPcGVu IHN0ZG91dCB3aXRoIG5vIGNvbXByZXNzaW9uIGZvciBBSCBvdXRwdXQgaGFuZGxlICovCi0JQUgt Pmd6T3V0ID0gMDsKLQlBSC0+T0YgPSBzdGRvdXQ7CisJb3V0X2NvbXByZXNzX3NwZWMuYWxnb3Jp dGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKKwlBSC0+T0YgPSBjZmRvcGVuKGR1cChmaWxlbm8o c3Rkb3V0KSksIFBHX0JJTkFSWV9BLCBvdXRfY29tcHJlc3Nfc3BlYyk7CiAKIAkvKgogCSAqIE9u IFdpbmRvd3MsIHdlIG5lZWQgdG8gdXNlIGJpbmFyeSBtb2RlIHRvIHJlYWQvd3JpdGUgbm9uLXRl eHQgZmlsZXMsCkBAIC0zNzEyLDYgKzM2NjgsNyBAQCBXcml0ZUhlYWQoQXJjaGl2ZUhhbmRsZSAq QUgpCiB2b2lkCiBSZWFkSGVhZChBcmNoaXZlSGFuZGxlICpBSCkKIHsKKwljaGFyCSAgICplcnJt c2c7CiAJY2hhcgkJdm1haiwKIAkJCQl2bWluLAogCQkJCXZyZXY7CkBAIC0zNzgxLDEwICszNzM4 LDEzIEBAIFJlYWRIZWFkKEFyY2hpdmVIYW5kbGUgKkFIKQogCWVsc2UKIAkJQUgtPmNvbXByZXNz aW9uX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fR1pJUDsKIAotI2lmbmRlZiBIQVZF X0xJQloKLQlpZiAoQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNT SU9OX0daSVApCi0JCXBnX2xvZ193YXJuaW5nKCJhcmNoaXZlIGlzIGNvbXByZXNzZWQsIGJ1dCB0 aGlzIGluc3RhbGxhdGlvbiBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIC0tIG5vIGRhdGEg d2lsbCBiZSBhdmFpbGFibGUiKTsKLSNlbmRpZgorCWVycm1zZyA9IHN1cHBvcnRzX2NvbXByZXNz aW9uKEFILT5jb21wcmVzc2lvbl9zcGVjKTsKKwlpZiAoZXJybXNnKQorCXsKKwkJcGdfbG9nX3dh cm5pbmcoImFyY2hpdmUgaXMgY29tcHJlc3NlZCwgYnV0IHRoaXMgaW5zdGFsbGF0aW9uIGRvZXMg bm90IHN1cHBvcnQgY29tcHJlc3Npb24gKCVzKSAtLSBubyBkYXRhIHdpbGwgYmUgYXZhaWxhYmxl IiwKKwkJCQkJCWVycm1zZyk7CisJCXBnX2ZyZWUoZXJybXNnKTsKKwl9CiAKIAlpZiAoQUgtPnZl cnNpb24gPj0gS19WRVJTXzFfNCkKIAl7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwX2FyY2hpdmVyLmggYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgK aW5kZXggZjcyNDQ2ZWQ1Yi4uNDcyNWU0OTc0NyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cF9hcmNoaXZlci5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJj aGl2ZXIuaApAQCAtMzIsMzAgKzMyLDYgQEAKIAogI2RlZmluZSBMT0JCVUZTSVpFIDE2Mzg0CiAK LSNpZmRlZiBIQVZFX0xJQloKLSNpbmNsdWRlIDx6bGliLmg+Ci0jZGVmaW5lIEdaQ0xPU0UoZmgp IGd6Y2xvc2UoZmgpCi0jZGVmaW5lIEdaV1JJVEUocCwgcywgbiwgZmgpIGd6d3JpdGUoZmgsIHAs IChuKSAqIChzKSkKLSNkZWZpbmUgR1pSRUFEKHAsIHMsIG4sIGZoKSBnenJlYWQoZmgsIHAsIChu KSAqIChzKSkKLSNkZWZpbmUgR1pFT0YoZmgpCWd6ZW9mKGZoKQotI2Vsc2UKLSNkZWZpbmUgR1pD TE9TRShmaCkgZmNsb3NlKGZoKQotI2RlZmluZSBHWldSSVRFKHAsIHMsIG4sIGZoKSAoZndyaXRl KHAsIHMsIG4sIGZoKSAqIChzKSkKLSNkZWZpbmUgR1pSRUFEKHAsIHMsIG4sIGZoKSBmcmVhZChw LCBzLCBuLCBmaCkKLSNkZWZpbmUgR1pFT0YoZmgpCWZlb2YoZmgpCi0vKiB0aGlzIGlzIGp1c3Qg dGhlIHJlZGVmaW5pdGlvbiBvZiBhIGxpYnogY29uc3RhbnQgKi8KLSNkZWZpbmUgWl9ERUZBVUxU X0NPTVBSRVNTSU9OICgtMSkKLQotdHlwZWRlZiBzdHJ1Y3QgX3pfc3RyZWFtCi17Ci0Jdm9pZAkg ICAqbmV4dF9pbjsKLQl2b2lkCSAgICpuZXh0X291dDsKLQlzaXplX3QJCWF2YWlsX2luOwotCXNp emVfdAkJYXZhaWxfb3V0OwotfSB6X3N0cmVhbTsKLXR5cGVkZWYgel9zdHJlYW0gKnpfc3RyZWFt cDsKLSNlbmRpZgotCiAvKiBEYXRhIGJsb2NrIHR5cGVzICovCiAjZGVmaW5lIEJMS19EQVRBIDEK ICNkZWZpbmUgQkxLX0JMT0JTIDMKQEAgLTMxOSw4ICsyOTUsNyBAQCBzdHJ1Y3QgX2FyY2hpdmVI YW5kbGUKIAogCWNoYXIJICAgKmZTcGVjOwkJCS8qIEFyY2hpdmUgRmlsZSBTcGVjICovCiAJRklM RQkgICAqRkg7CQkJCS8qIEdlbmVyYWwgcHVycG9zZSBmaWxlIGhhbmRsZSAqLwotCXZvaWQJICAg Kk9GOwotCWludAkJCWd6T3V0OwkJCS8qIE91dHB1dCBmaWxlICovCisJdm9pZAkgICAqT0Y7CQkJ CS8qIE91dHB1dCBmaWxlICovCiAKIAlzdHJ1Y3QgX3RvY0VudHJ5ICp0b2M7CQkvKiBIZWFkZXIg b2YgY2lyY3VsYXIgbGlzdCBvZiBUT0MgZW50cmllcyAqLwogCWludAkJCXRvY0NvdW50OwkJLyog TnVtYmVyIG9mIFRPQyBlbnRyaWVzICovCi0tIAoyLjM0LjEKCg== --b1_JUIMqrFBYvKDK5ZkGIoStK58M05RwtoKMsKHzaS9SM Content-Type: text/x-patch; name=v30-0003-Add-LZ4-compression-to-pg_dump.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v30-0003-Add-LZ4-compression-to-pg_dump.patch RnJvbSBhZDY3NDNkNzVjM2M0NjdmOTgxYTY4MDBlNzE1MmNmMTQ5ODJlMGY0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IE1vbiwgMjAgRmViIDIwMjMgMTI6MTk6MTUgKzAwMDAKU3ViamVjdDogW1BBVENIIHYz MCAzLzNdIEFkZCBMWjQgY29tcHJlc3Npb24gdG8gcGdfZHVtcAoKVGhpcyBjb21taXQgZXhwYW5k cyBwZ19kdW1wJ3MgY29tcHJlc3Npb24gc3RyZWFtaW5nIGFuZCBmaWxlIEFQSXMgdG8gc3VwcG9y dApQR19DT01QUkVTU0lPTl9MWjQuIEl0IGlzIGltcGxlbWVudGVkIGluIHRoZSBuZXdseSBhZGRl ZCBjb21wcmVzc19sejQue2MsaH0KZmlsZXMgd2hpY2ggY292ZXIgYWxsIHRoZSBmdW5jdGlvbmFs aXR5IG9mIHRoZSBhZm9yZW1lbnRpb25lZCBBUElzLiBNaW5vcgpjaGFuZ2VzIHdlcmUgYWxzbyBu ZWNlc3NhcnkgaW4gaW5kaXZpZHVhbCBwZ19iYWNrdXBfKiBmaWxlcywgd2hlcmUgY29kZSBmb3Ig dGhlCidsejQnIGZpbGUgc3VmZml4IGhhcyBiZWVuIGFkZGVkLCBhcyB3ZWxsIGFzIHBnX2R1bXAn cyBjb21wcmVzc2lvbiBvcHRpb24KcGFyc2luZy4KCkF1dGhvcjogR2Vvcmdpb3MgS29rb2xhdG9z ClJldmlld2VkLWJ5OiBNaWNoYWVsIFBhcXVpZXIsIFJhY2hlbCBIZWF0b24sIEp1c3RpbiBQcnl6 YnksIFNoaSBZdSwgVG9tYXMgVm9uZHJhCkRpc2N1c3Npb246Cmh0dHBzOi8vcG9zdGdyLmVzL20v ZmFVTkVPcHRzOXZ1bkVhTG5teG1HLURsZExTZ19xbDEzN09DM0pZRG1nck9NSG0xUnZ2V1kySWRC a3ZfQ1J4bTVzcENDYl9PbUtOazJUMDNUTW0wZkJFV3ZlRkY5d0ExV2l6UHVBZ0I3U3MlM0QlNDBw cm90b25tYWlsLmNvbQotLS0KIGRvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcC5zZ21sICAgICAgICAg fCAgMTMgKy0KIHNyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZSAgICAgICAgICAgICAgfCAgIDIgKwog c3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMgICAgICAgICB8ICAyNiArLQogc3JjL2Jpbi9w Z19kdW1wL2NvbXByZXNzX2x6NC5jICAgICAgICB8IDYyNiArKysrKysrKysrKysrKysrKysrKysr KysrKwogc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5oICAgICAgICB8ICAyNCArCiBzcmMv YmluL3BnX2R1bXAvbWVzb24uYnVpbGQgICAgICAgICAgIHwgICA4ICstCiBzcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMgIHwgICA2ICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFj a3VwX2RpcmVjdG9yeS5jIHwgICA5ICstCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jICAgICAg ICAgICAgIHwgICA1ICstCiBzcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbCAgICAgIHwg IDgyICsrKy0KIHNyYy90b29scy9wZ2luY2x1ZGUvY3BsdXNwbHVzY2hlY2sgICAgfCAgIDEgKwog c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICB8ICAgMSArCiAxMiBmaWxlcyBj aGFuZ2VkLCA3ODEgaW5zZXJ0aW9ucygrKSwgMjIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5oCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L3JlZi9wZ19kdW1wLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXAuc2dtbAppbmRleCAy YzkzOGNkN2UxLi40OWQyMTg5MDVmIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1 bXAuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXAuc2dtbApAQCAtMzMwLDkgKzMz MCwxMCBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgICAgICAgbWFjaGluZS1yZWFk YWJsZSBmb3JtYXQgdGhhdCA8YXBwbGljYXRpb24+cGdfcmVzdG9yZTwvYXBwbGljYXRpb24+CiAg ICAgICAgICAgIGNhbiByZWFkLiBBIGRpcmVjdG9yeSBmb3JtYXQgYXJjaGl2ZSBjYW4gYmUgbWFu aXB1bGF0ZWQgd2l0aAogICAgICAgICAgICBzdGFuZGFyZCBVbml4IHRvb2xzOyBmb3IgZXhhbXBs ZSwgZmlsZXMgaW4gYW4gdW5jb21wcmVzc2VkIGFyY2hpdmUKLSAgICAgICAgICAgY2FuIGJlIGNv bXByZXNzZWQgd2l0aCB0aGUgPGFwcGxpY2F0aW9uPmd6aXA8L2FwcGxpY2F0aW9uPiB0b29sLgot ICAgICAgICAgICBUaGlzIGZvcm1hdCBpcyBjb21wcmVzc2VkIGJ5IGRlZmF1bHQgYW5kIGFsc28g c3VwcG9ydHMgcGFyYWxsZWwKLSAgICAgICAgICAgZHVtcHMuCisgICAgICAgICAgIGNhbiBiZSBj b21wcmVzc2VkIHdpdGggdGhlIDxhcHBsaWNhdGlvbj5nemlwPC9hcHBsaWNhdGlvbj4gb3IKKyAg ICAgICAgICAgPGFwcGxpY2F0aW9uPmx6NDwvYXBwbGljYXRpb24+dG9vbC4KKyAgICAgICAgICAg VGhpcyBmb3JtYXQgaXMgY29tcHJlc3NlZCBieSBkZWZhdWx0IHVzaW5nIDxsaXRlcmFsPmd6aXA8 L2xpdGVyYWw+CisgICAgICAgICAgIGFuZCBhbHNvIHN1cHBvcnRzIHBhcmFsbGVsIGR1bXBzLgog ICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgIDwvdmFybGlz dGVudHJ5PgpAQCAtNjU0LDcgKzY1NSw3IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAg ICAgIDxwYXJhPgogICAgICAgICBTcGVjaWZ5IHRoZSBjb21wcmVzc2lvbiBtZXRob2QgYW5kL29y IHRoZSBjb21wcmVzc2lvbiBsZXZlbCB0byB1c2UuCiAgICAgICAgIFRoZSBjb21wcmVzc2lvbiBt ZXRob2QgY2FuIGJlIHNldCB0byA8bGl0ZXJhbD5nemlwPC9saXRlcmFsPiBvcgotICAgICAgICA8 bGl0ZXJhbD5ub25lPC9saXRlcmFsPiBmb3Igbm8gY29tcHJlc3Npb24uCisgICAgICAgIDxsaXRl cmFsPmx6NDwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+bm9uZTwvbGl0ZXJhbD4gZm9yIG5vIGNvbXBy ZXNzaW9uLgogICAgICAgICBBIGNvbXByZXNzaW9uIGRldGFpbCBzdHJpbmcgY2FuIG9wdGlvbmFs bHkgYmUgc3BlY2lmaWVkLiAgSWYgdGhlCiAgICAgICAgIGRldGFpbCBzdHJpbmcgaXMgYW4gaW50 ZWdlciwgaXQgc3BlY2lmaWVzIHRoZSBjb21wcmVzc2lvbiBsZXZlbC4KICAgICAgICAgT3RoZXJ3 aXNlLCBpdCBzaG91bGQgYmUgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBpdGVtcywgZWFjaCBv ZiB0aGUKQEAgLTY3NSw4ICs2NzYsOCBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAg ICAgaW5kaXZpZHVhbCB0YWJsZS1kYXRhIHNlZ21lbnRzLCBhbmQgdGhlIGRlZmF1bHQgaXMgdG8g Y29tcHJlc3MgdXNpbmcKICAgICAgICAgPGxpdGVyYWw+Z3ppcDwvbGl0ZXJhbD4gYXQgYSBtb2Rl cmF0ZSBsZXZlbC4gRm9yIHBsYWluIHRleHQgb3V0cHV0LAogICAgICAgICBzZXR0aW5nIGEgbm9u emVybyBjb21wcmVzc2lvbiBsZXZlbCBjYXVzZXMgdGhlIGVudGlyZSBvdXRwdXQgZmlsZSB0byBi ZSBjb21wcmVzc2VkLAotICAgICAgICBhcyB0aG91Z2ggaXQgaGFkIGJlZW4gZmVkIHRocm91Z2gg PGFwcGxpY2F0aW9uPmd6aXA8L2FwcGxpY2F0aW9uPjsgYnV0IHRoZSBkZWZhdWx0Ci0gICAgICAg IGlzIG5vdCB0byBjb21wcmVzcy4KKyAgICAgICAgYXMgdGhvdWdoIGl0IGhhZCBiZWVuIGZlZCB0 aHJvdWdoIDxhcHBsaWNhdGlvbj5nemlwPC9hcHBsaWNhdGlvbj4gb3IKKyAgICAgICAgPGFwcGxp Y2F0aW9uPmx6NDwvYXBwbGljYXRpb24+OyBidXQgdGhlIGRlZmF1bHQgaXMgbm90IHRvIGNvbXBy ZXNzLgogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFyYT4KICAgICAgICAgVGhlIHRhciBhcmNo aXZlIGZvcm1hdCBjdXJyZW50bHkgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiBhdCBhbGwu CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUgYi9zcmMvYmluL3BnX2R1bXAv TWFrZWZpbGUKaW5kZXggMDAxM2JjMDgwYy4uZWI4ZjU5NDU5YSAxMDA2NDQKLS0tIGEvc3JjL2Jp bi9wZ19kdW1wL01ha2VmaWxlCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZQpAQCAtMTcs NiArMTcsNyBAQCB0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLgogaW5jbHVkZSAkKHRvcF9idWlsZGRp cikvc3JjL01ha2VmaWxlLmdsb2JhbAogCiBleHBvcnQgR1pJUF9QUk9HUkFNPSQoR1pJUCkKK2V4 cG9ydCBMWjQKIGV4cG9ydCB3aXRoX2ljdQogCiBvdmVycmlkZSBDUFBGTEFHUyA6PSAtSSQobGli cHFfc3JjZGlyKSAkKENQUEZMQUdTKQpAQCAtMjYsNiArMjcsNyBAQCBPQkpTID0gXAogCSQoV0lO MzJSRVMpIFwKIAljb21wcmVzc19nemlwLm8gXAogCWNvbXByZXNzX2lvLm8gXAorCWNvbXByZXNz X2x6NC5vIFwKIAljb21wcmVzc19ub25lLm8gXAogCWR1bXB1dGlscy5vIFwKIAlwYXJhbGxlbC5v IFwKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jIGIvc3JjL2Jpbi9w Z19kdW1wL2NvbXByZXNzX2lvLmMKaW5kZXggZGFlNGRjMDFkNS4uMWZmNGFjYTY1MCAxMDA2NDQK LS0tIGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1w L2NvbXByZXNzX2lvLmMKQEAgLTUzLDcgKzUzLDcgQEAKICAqCUluaXREaXNjb3ZlckNvbXByZXNz RmlsZUhhbmRsZSB0cmllcyB0byBpbmZlciB0aGUgY29tcHJlc3Npb24gYnkgdGhlCiAgKglmaWxl bmFtZSBzdWZmaXguIElmIHRoZSBzdWZmaXggaXMgbm90IHlldCBrbm93biB0aGVuIGl0IHRyaWVz IHRvIHNpbXBseQogICoJb3BlbiB0aGUgZmlsZSBhbmQgaWYgaXQgZmFpbHMsIGl0IHRyaWVzIHRv IG9wZW4gdGhlIHNhbWUgZmlsZSB3aXRoIHRoZSAuZ3oKLSAqCXN1ZmZpeC4KKyAqCXN1ZmZpeCwg YW5kIHRoZW4gYWdhaW4gd2l0aCB0aGUgLmx6NCBzdWZmaXguCiAgKgogICogSURFTlRJRklDQVRJ T04KICAqCSAgIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jCkBAIC02Nyw2ICs2Nyw3IEBA CiAKICNpbmNsdWRlICJjb21wcmVzc19nemlwLmgiCiAjaW5jbHVkZSAiY29tcHJlc3NfaW8uaCIK KyNpbmNsdWRlICJjb21wcmVzc19sejQuaCIKICNpbmNsdWRlICJjb21wcmVzc19ub25lLmgiCiAj aW5jbHVkZSAicGdfYmFja3VwX3V0aWxzLmgiCiAKQEAgLTkzLDYgKzk0LDEwIEBAIHN1cHBvcnRz X2NvbXByZXNzaW9uKGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25f c3BlYykKIAlpZiAoYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCiAJCXN1cHBvcnRl ZCA9IHRydWU7CiAjZW5kaWYKKyNpZmRlZiBVU0VfTFo0CisJaWYgKGFsZ29yaXRobSA9PSBQR19D T01QUkVTU0lPTl9MWjQpCisJCXN1cHBvcnRlZCA9IHRydWU7CisjZW5kaWYKIAogCWlmICghc3Vw cG9ydGVkKQogCQlyZXR1cm4gcHNwcmludGYoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBj b21wcmVzc2lvbiB3aXRoICVzIiwKQEAgLTEyNCw2ICsxMjksOCBAQCBBbGxvY2F0ZUNvbXByZXNz b3IoY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjLAogCQlJ bml0Q29tcHJlc3Nvck5vbmUoY3MsIGNvbXByZXNzaW9uX3NwZWMpOwogCWVsc2UgaWYgKGNvbXBy ZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCiAJCUluaXRDb21w cmVzc29yR3ppcChjcywgY29tcHJlc3Npb25fc3BlYyk7CisJZWxzZSBpZiAoY29tcHJlc3Npb25f c3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fTFo0KQorCQlJbml0Q29tcHJlc3Nvckxa NChjcywgY29tcHJlc3Npb25fc3BlYyk7CiAKIAlyZXR1cm4gY3M7CiB9CkBAIC0xODgsNiArMTk1 LDggQEAgSW5pdENvbXByZXNzRmlsZUhhbmRsZShjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0 aW9uIGNvbXByZXNzaW9uX3NwZWMpCiAJCUluaXRDb21wcmVzc0ZpbGVIYW5kbGVOb25lKENGSCwg Y29tcHJlc3Npb25fc3BlYyk7CiAJZWxzZSBpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0g PT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKIAkJSW5pdENvbXByZXNzRmlsZUhhbmRsZUd6aXAoQ0ZI LCBjb21wcmVzc2lvbl9zcGVjKTsKKwllbHNlIGlmIChjb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRo bSA9PSBQR19DT01QUkVTU0lPTl9MWjQpCisJCUluaXRDb21wcmVzc0ZpbGVIYW5kbGVMWjQoQ0ZI LCBjb21wcmVzc2lvbl9zcGVjKTsKIAogCXJldHVybiBDRkg7CiB9CkBAIC0xOTcsMTEgKzIwNiwx MSBAQCBJbml0Q29tcHJlc3NGaWxlSGFuZGxlKGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRp b24gY29tcHJlc3Npb25fc3BlYykKICAqIGJlIGVpdGhlciAiciIgb3IgInJiIi4KICAqCiAgKiBJ ZiB0aGUgZmlsZSBhdCAncGF0aCcgY29udGFpbnMgdGhlIHN1ZmZpeCBvZiBhIHN1cHBvcnRlZCBj b21wcmVzc2lvbiBtZXRob2QsCi0gKiBjdXJyZW50bHkgdGhpcyBpbmNsdWRlcyBvbmx5ICIuZ3oi LCB0aGVuIHRoaXMgY29tcHJlc3Npb24gd2lsbCBiZSB1c2VkCisgKiBjdXJyZW50bHkgdGhpcyBp bmNsdWRlcyAiLmd6IiBhbmQgIi5sejQiLCB0aGVuIHRoaXMgY29tcHJlc3Npb24gd2lsbCBiZSB1 c2VkCiAgKiB0aHJvdWdob3V0LiBPdGhlcndpc2UgdGhlIGNvbXByZXNzaW9uIHdpbGwgYmUgaW5m ZXJyZWQgYnkgaXRlcmF0aXZlbHkgdHJ5aW5nCiAgKiB0byBvcGVuIHRoZSBmaWxlIGF0ICdwYXRo JywgZmlyc3QgYXMgaXMsIHRoZW4gYnkgYXBwZW5kaW5nIGtub3duIGNvbXByZXNzaW9uCiAgKiBz dWZmaXhlcy4gU28gaWYgeW91IHBhc3MgImZvbyIgYXMgJ3BhdGgnLCB0aGlzIHdpbGwgb3BlbiBl aXRoZXIgImZvbyIgb3IKLSAqICJmb28uZ3oiLCB0cnlpbmcgaW4gdGhhdCBvcmRlci4KKyAqICJm b28uZ3oiIG9yICJmb28ubHo0IiwgdHJ5aW5nIGluIHRoYXQgb3JkZXIuCiAgKgogICogT24gZmFp bHVyZSwgcmV0dXJuIE5VTEwgd2l0aCBhbiBlcnJvciBjb2RlIGluIGVycm5vLgogICovCkBAIC0y MzksNiArMjQ4LDE3IEBAIEluaXREaXNjb3ZlckNvbXByZXNzRmlsZUhhbmRsZShjb25zdCBjaGFy ICpwYXRoLCBjb25zdCBjaGFyICptb2RlKQogCQkJaWYgKGV4aXN0cykKIAkJCQljb21wcmVzc2lv bl9zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX0daSVA7CiAJCX0KKyNlbmRpZgorI2lm ZGVmIFVTRV9MWjQKKwkJaWYgKCFleGlzdHMpCisJCXsKKwkJCWZyZWVfa2VlcF9lcnJubyhmbmFt ZSk7CisJCQlmbmFtZSA9IHBzcHJpbnRmKCIlcy5sejQiLCBwYXRoKTsKKwkJCWV4aXN0cyA9IChz dGF0KGZuYW1lLCAmc3QpID09IDApOworCisJCQlpZiAoZXhpc3RzKQorCQkJCWNvbXByZXNzaW9u X3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTFo0OworCQl9CiAjZW5kaWYKIAl9CiAK ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19sejQuYyBiL3NyYy9iaW4vcGdf ZHVtcC9jb21wcmVzc19sejQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li5lZTc0Y2M4ZTI4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNz X2x6NC5jCkBAIC0wLDAgKzEsNjI2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBjb21w cmVzc19sejQuYworICoJIFJvdXRpbmVzIGZvciBhcmNoaXZlcnMgdG8gd3JpdGUgYSBMWjQgY29t cHJlc3NlZCBkYXRhIHN0cmVhbS4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYt MjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENv cHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlh CisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19s ejQuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXNfZmUu aCIKKyNpbmNsdWRlICJwZ19iYWNrdXBfdXRpbHMuaCIKKworI2luY2x1ZGUgImNvbXByZXNzX2x6 NC5oIgorCisjaWZkZWYgVVNFX0xaNAorI2luY2x1ZGUgPGx6NC5oPgorI2luY2x1ZGUgPGx6NGZy YW1lLmg+CisKKyNkZWZpbmUgTFo0X09VVF9TSVpFCSg0ICogMTAyNCkKKyNkZWZpbmUgTFo0X0lO X1NJWkUJCSgxNiAqIDEwMjQpCisKKy8qCisgKiBMWjRGX0hFQURFUl9TSVpFX01BWCBmaXJzdCBh cHBlYXJlZCBpbiB2MS43LjUgb2YgdGhlIGxpYnJhcnkuCisgKiBSZWRlZmluZSBpdCBmb3IgaW5z dGFsbGF0aW9ucyB3aXRoIGEgbGVzc2VyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgTFo0Rl9IRUFE RVJfU0laRV9NQVgKKyNkZWZpbmUgTFo0Rl9IRUFERVJfU0laRV9NQVgJMzIKKyNlbmRpZgorCisv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENvbXByZXNzb3IgQVBJCisgKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqLworCit0eXBlZGVmIHN0cnVjdCBMWjRDb21wcmVzc29yU3RhdGUKK3sK KwljaGFyCSAgICpvdXRidWY7CisJc2l6ZV90CQlvdXRzaXplOworfSBMWjRDb21wcmVzc29yU3Rh dGU7CisKKy8qIFByaXZhdGUgcm91dGluZXMgdGhhdCBzdXBwb3J0IExaNCBjb21wcmVzc2VkIGRh dGEgSS9PICovCitzdGF0aWMgdm9pZCBSZWFkRGF0YUZyb21BcmNoaXZlTFo0KEFyY2hpdmVIYW5k bGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKTsKK3N0YXRpYyB2b2lkIFdyaXRlRGF0YVRvQXJj aGl2ZUxaNChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKKwkJCQkJCQkJ ICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExlbik7CitzdGF0aWMgdm9pZCBFbmRDb21wcmVz c29yTFo0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKTsKKworc3RhdGlj IHZvaWQKK1JlYWREYXRhRnJvbUFyY2hpdmVMWjQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNz b3JTdGF0ZSAqY3MpCit7CisJTFo0X3N0cmVhbURlY29kZV90IGx6NFN0cmVhbURlY29kZTsKKwlj aGFyCSAgICpidWY7CisJY2hhcgkgICAqZGVjYnVmOworCXNpemVfdAkJYnVmbGVuOworCXNpemVf dAkJY250OworCisJYnVmbGVuID0gTFo0X0lOX1NJWkU7CisJYnVmID0gcGdfbWFsbG9jKGJ1Zmxl bik7CisJZGVjYnVmID0gcGdfbWFsbG9jKGJ1Zmxlbik7CisKKwlMWjRfc2V0U3RyZWFtRGVjb2Rl KCZsejRTdHJlYW1EZWNvZGUsIE5VTEwsIDApOworCisJd2hpbGUgKChjbnQgPSBjcy0+cmVhZEYo QUgsICZidWYsICZidWZsZW4pKSkKKwl7CisJCWludAkJCWRlY0J5dGVzID0gTFo0X2RlY29tcHJl c3Nfc2FmZV9jb250aW51ZSgmbHo0U3RyZWFtRGVjb2RlLAorCQkJCQkJCQkJCQkJCQkJYnVmLCBk ZWNidWYsCisJCQkJCQkJCQkJCQkJCQljbnQsIGJ1Zmxlbik7CisKKwkJYWh3cml0ZShkZWNidWYs IDEsIGRlY0J5dGVzLCBBSCk7CisJfQorCisJcGdfZnJlZShidWYpOworCXBnX2ZyZWUoZGVjYnVm KTsKK30KKworc3RhdGljIHZvaWQKK1dyaXRlRGF0YVRvQXJjaGl2ZUxaNChBcmNoaXZlSGFuZGxl ICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKKwkJCQkJICBjb25zdCB2b2lkICpkYXRhLCBzaXpl X3QgZExlbikKK3sKKwlMWjRDb21wcmVzc29yU3RhdGUgKkxaNGNzID0gKExaNENvbXByZXNzb3JT dGF0ZSAqKSBjcy0+cHJpdmF0ZV9kYXRhOworCXNpemVfdAkJY29tcHJlc3NlZDsKKwlzaXplX3QJ CXJlcXVpcmVkc2l6ZSA9IExaNF9jb21wcmVzc0JvdW5kKGRMZW4pOworCisJaWYgKHJlcXVpcmVk c2l6ZSA+IExaNGNzLT5vdXRzaXplKQorCXsKKwkJTFo0Y3MtPm91dGJ1ZiA9IHBnX3JlYWxsb2Mo TFo0Y3MtPm91dGJ1ZiwgcmVxdWlyZWRzaXplKTsKKwkJTFo0Y3MtPm91dHNpemUgPSByZXF1aXJl ZHNpemU7CisJfQorCisJY29tcHJlc3NlZCA9IExaNF9jb21wcmVzc19kZWZhdWx0KGRhdGEsIExa NGNzLT5vdXRidWYsCisJCQkJCQkJCQkgIGRMZW4sIExaNGNzLT5vdXRzaXplKTsKKworCWlmIChj b21wcmVzc2VkIDw9IDApCisJCXBnX2ZhdGFsKCJmYWlsZWQgdG8gTFo0IGNvbXByZXNzIGRhdGEi KTsKKworCWNzLT53cml0ZUYoQUgsIExaNGNzLT5vdXRidWYsIGNvbXByZXNzZWQpOworfQorCitz dGF0aWMgdm9pZAorRW5kQ29tcHJlc3NvckxaNChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3Nv clN0YXRlICpjcykKK3sKKwlMWjRDb21wcmVzc29yU3RhdGUgKkxaNGNzOworCisJTFo0Y3MgPSAo TFo0Q29tcHJlc3NvclN0YXRlICopIGNzLT5wcml2YXRlX2RhdGE7CisJaWYgKExaNGNzKQorCXsK KwkJcGdfZnJlZShMWjRjcy0+b3V0YnVmKTsKKwkJcGdfZnJlZShMWjRjcyk7CisJCWNzLT5wcml2 YXRlX2RhdGEgPSBOVUxMOworCX0KK30KKworCisvKgorICogUHVibGljIHJvdXRpbmVzIHRoYXQg c3VwcG9ydCBMWjQgY29tcHJlc3NlZCBkYXRhIEkvTworICovCit2b2lkCitJbml0Q29tcHJlc3Nv ckxaNChDb21wcmVzc29yU3RhdGUgKmNzLCBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9u IGNvbXByZXNzaW9uX3NwZWMpCit7CisJY3MtPnJlYWREYXRhID0gUmVhZERhdGFGcm9tQXJjaGl2 ZUxaNDsKKwljcy0+d3JpdGVEYXRhID0gV3JpdGVEYXRhVG9BcmNoaXZlTFo0OworCWNzLT5lbmQg PSBFbmRDb21wcmVzc29yTFo0OworCisJY3MtPmNvbXByZXNzaW9uX3NwZWMgPSBjb21wcmVzc2lv bl9zcGVjOworCisJLyogV2lsbCBiZSBsYXp5IGluaXQnZCAqLworCWNzLT5wcml2YXRlX2RhdGEg PSBwZ19tYWxsb2MwKHNpemVvZihMWjRDb21wcmVzc29yU3RhdGUpKTsKK30KKworLyotLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKiBDb21wcmVzcyBGaWxlIEFQSQorICotLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKi8KKworLyoKKyAqIFN0YXRlIG5lZWRlZCBmb3IgTFo0IChkZSljb21wcmVzc2lv biB1c2luZyB0aGUgQ29tcHJlc3NGaWxlSGFuZGxlIEFQSS4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qg TFo0RmlsZQoreworCUZJTEUJICAgKmZwOworCisJTFo0Rl9wcmVmZXJlbmNlc190IHByZWZzOwor CisJTFo0Rl9jb21wcmVzc2lvbkNvbnRleHRfdCBjdHg7CisJTFo0Rl9kZWNvbXByZXNzaW9uQ29u dGV4dF90IGR0eDsKKworCWJvb2wJCWluaXRlZDsKKwlib29sCQljb21wcmVzc2luZzsKKworCXNp emVfdAkJYnVmbGVuOworCWNoYXIJICAgKmJ1ZmZlcjsKKworCXNpemVfdAkJb3ZlcmZsb3dhbGxv Y2xlbjsKKwlzaXplX3QJCW92ZXJmbG93bGVuOworCWNoYXIJICAgKm92ZXJmbG93YnVmOworCisJ c2l6ZV90CQllcnJjb2RlOworfQlMWjRGaWxlOworCisvKgorICogTFo0IGVxdWl2YWxlbnQgdG8g ZmVvZigpIG9yIGd6ZW9mKCkuIFRoZSBlbmQgb2YgZmlsZQorICogaXMgcmVhY2hlZCBpZiB0aGVy ZSBpcyBubyBkZWNvbXByZXNzZWQgb3V0cHV0IGluIHRoZQorICogb3ZlcmZsb3cgYnVmZmVyIGFu ZCB0aGUgZW5kIG9mIHRoZSBmaWxlIGlzIHJlYWNoZWQuCisgKi8KK3N0YXRpYyBpbnQKK0xaNEZp bGVfZW9mKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCUxaNEZpbGUgICAgKmZzID0gKExa NEZpbGUgKikgQ0ZILT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gZnMtPm92ZXJmbG93bGVuID09 IDAgJiYgZmVvZihmcy0+ZnApOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitMWjRGaWxlX2dl dF9lcnJvcihDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlMWjRGaWxlICAgICpmcyA9IChM WjRGaWxlICopIENGSC0+cHJpdmF0ZV9kYXRhOworCWNvbnN0IGNoYXIgKmVycm1zZzsKKworCWlm IChMWjRGX2lzRXJyb3IoZnMtPmVycmNvZGUpKQorCQllcnJtc2cgPSBMWjRGX2dldEVycm9yTmFt ZShmcy0+ZXJyY29kZSk7CisJZWxzZQorCQllcnJtc2cgPSBzdHJlcnJvcihlcnJubyk7CisKKwly ZXR1cm4gZXJybXNnOworfQorCisvKgorICogUHJlcGFyZSBhbiBhbHJlYWR5IGFsbG9jJ2VkIExa NEZpbGUgc3RydWN0IGZvciBzdWJzZXF1ZW50IGNhbGxzLgorICoKKyAqIEl0IGNyZWF0ZXMgdGhl IG5lY2Vzc2FyeSBjb250ZXh0cyBmb3IgdGhlIG9wZXJhdGlvbnMuIFdoZW4gY29tcHJlc3Npbmcs CisgKiBpdCBhZGRpdGlvbmFsbHkgd3JpdGVzIHRoZSBMWjQgaGVhZGVyIGluIHRoZSBvdXRwdXQg c3RyZWFtLgorICovCitzdGF0aWMgaW50CitMWjRGaWxlX2luaXQoTFo0RmlsZSAqIGZzLCBpbnQg c2l6ZSwgYm9vbCBjb21wcmVzc2luZykKK3sKKwlzaXplX3QJCXN0YXR1czsKKworCWlmIChmcy0+ aW5pdGVkKQorCQlyZXR1cm4gMDsKKworCWZzLT5jb21wcmVzc2luZyA9IGNvbXByZXNzaW5nOwor CWZzLT5pbml0ZWQgPSB0cnVlOworCisJaWYgKGZzLT5jb21wcmVzc2luZykKKwl7CisJCWZzLT5i dWZsZW4gPSBMWjRGX2NvbXByZXNzQm91bmQoTFo0X0lOX1NJWkUsICZmcy0+cHJlZnMpOworCQlp ZiAoZnMtPmJ1ZmxlbiA8IExaNEZfSEVBREVSX1NJWkVfTUFYKQorCQkJZnMtPmJ1ZmxlbiA9IExa NEZfSEVBREVSX1NJWkVfTUFYOworCisJCXN0YXR1cyA9IExaNEZfY3JlYXRlQ29tcHJlc3Npb25D b250ZXh0KCZmcy0+Y3R4LCBMWjRGX1ZFUlNJT04pOworCQlpZiAoTFo0Rl9pc0Vycm9yKHN0YXR1 cykpCisJCXsKKwkJCWZzLT5lcnJjb2RlID0gc3RhdHVzOworCQkJcmV0dXJuIDE7CisJCX0KKwor CQlmcy0+YnVmZmVyID0gcGdfbWFsbG9jKGZzLT5idWZsZW4pOworCQlzdGF0dXMgPSBMWjRGX2Nv bXByZXNzQmVnaW4oZnMtPmN0eCwgZnMtPmJ1ZmZlciwgZnMtPmJ1ZmxlbiwKKwkJCQkJCQkJCSZm cy0+cHJlZnMpOworCisJCWlmIChMWjRGX2lzRXJyb3Ioc3RhdHVzKSkKKwkJeworCQkJZnMtPmVy cmNvZGUgPSBzdGF0dXM7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCWlmIChmd3JpdGUoZnMtPmJ1 ZmZlciwgMSwgc3RhdHVzLCBmcy0+ZnApICE9IHN0YXR1cykKKwkJeworCQkJZXJybm8gPSAoZXJy bm8pID8gZXJybm8gOiBFTk9TUEM7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwllbHNlCisJewor CQlzdGF0dXMgPSBMWjRGX2NyZWF0ZURlY29tcHJlc3Npb25Db250ZXh0KCZmcy0+ZHR4LCBMWjRG X1ZFUlNJT04pOworCQlpZiAoTFo0Rl9pc0Vycm9yKHN0YXR1cykpCisJCXsKKwkJCWZzLT5lcnJj b2RlID0gc3RhdHVzOworCQkJcmV0dXJuIDE7CisJCX0KKworCQlmcy0+YnVmbGVuID0gc2l6ZSA+ IExaNF9PVVRfU0laRSA/IHNpemUgOiBMWjRfT1VUX1NJWkU7CisJCWZzLT5idWZmZXIgPSBwZ19t YWxsb2MoZnMtPmJ1Zmxlbik7CisKKwkJZnMtPm92ZXJmbG93YWxsb2NsZW4gPSBmcy0+YnVmbGVu OworCQlmcy0+b3ZlcmZsb3didWYgPSBwZ19tYWxsb2MoZnMtPm92ZXJmbG93YWxsb2NsZW4pOwor CQlmcy0+b3ZlcmZsb3dsZW4gPSAwOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogUmVh ZCBhbHJlYWR5IGRlY29tcHJlc3NlZCBjb250ZW50IGZyb20gdGhlIG92ZXJmbG93IGJ1ZmZlciBp bnRvICdwdHInIHVwIHRvCisgKiAnc2l6ZScgYnl0ZXMsIGlmIGF2YWlsYWJsZS4gSWYgdGhlIGVv bF9mbGFnIGlzIHNldCwgdGhlbiBzdG9wIGF0IHRoZSBmaXJzdAorICogb2NjdXJyZW5jZSBvZiB0 aGUgbmV3IGxpbmUgY2hhciBwcmlvciB0byAnc2l6ZScgYnl0ZXMuCisgKgorICogQW55IHVucmVh ZCBjb250ZW50IGluIHRoZSBvdmVyZmxvdyBidWZmZXIsIGlzIG1vdmVkIHRvIHRoZSBiZWdpbm5p bmcuCisgKi8KK3N0YXRpYyBpbnQKK0xaNEZpbGVfcmVhZF9vdmVyZmxvdyhMWjRGaWxlICogZnMs IHZvaWQgKnB0ciwgaW50IHNpemUsIGJvb2wgZW9sX2ZsYWcpCit7CisJY2hhcgkgICAqcDsKKwlp bnQJCQlyZWFkbGVuID0gMDsKKworCWlmIChmcy0+b3ZlcmZsb3dsZW4gPT0gMCkKKwkJcmV0dXJu IDA7CisKKwlpZiAoZnMtPm92ZXJmbG93bGVuID49IHNpemUpCisJCXJlYWRsZW4gPSBzaXplOwor CWVsc2UKKwkJcmVhZGxlbiA9IGZzLT5vdmVyZmxvd2xlbjsKKworCWlmIChlb2xfZmxhZyAmJiAo cCA9IG1lbWNocihmcy0+b3ZlcmZsb3didWYsICdcbicsIHJlYWRsZW4pKSkKKwkJLyogSW5jbHVk ZSB0aGUgbGluZSB0ZXJtaW5hdGluZyBjaGFyICovCisJCXJlYWRsZW4gPSBwIC0gZnMtPm92ZXJm bG93YnVmICsgMTsKKworCW1lbWNweShwdHIsIGZzLT5vdmVyZmxvd2J1ZiwgcmVhZGxlbik7CisJ ZnMtPm92ZXJmbG93bGVuIC09IHJlYWRsZW47CisKKwlpZiAoZnMtPm92ZXJmbG93bGVuID4gMCkK KwkJbWVtbW92ZShmcy0+b3ZlcmZsb3didWYsIGZzLT5vdmVyZmxvd2J1ZiArIHJlYWRsZW4sIGZz LT5vdmVyZmxvd2xlbik7CisKKwlyZXR1cm4gcmVhZGxlbjsKK30KKworLyoKKyAqIFRoZSB3b3Jr aG9yc2UgZm9yIHJlYWRpbmcgZGVjb21wcmVzc2VkIGNvbnRlbnQgb3V0IG9mIGFuIExaNCBjb21w cmVzc2VkCisgKiBzdHJlYW0uCisgKgorICogSXQgd2lsbCByZWFkIHVwIHRvICdwdHJzaXplJyBk ZWNvbXByZXNzZWQgY29udGVudCwgb3IgdXAgdG8gdGhlIG5ldyBsaW5lIGNoYXIKKyAqIGlmIGZv dW5kIGZpcnN0IHdoZW4gdGhlIGVvbF9mbGFnIGlzIHNldC4gSXQgaXMgcG9zc2libGUgdGhhdCB0 aGUgZGVjb21wcmVzc2VkCisgKiBvdXRwdXQgZ2VuZXJhdGVkIGJ5IHJlYWRpbmcgYW55IGNvbXBy ZXNzZWQgaW5wdXQgdmlhIHRoZSBMWjRGIEFQSSwgZXhjZWVkcworICogJ3B0cnNpemUnLiBBbnkg ZXhjZWVkaW5nIGRlY29tcHJlc3NlZCBjb250ZW50IGlzIHN0b3JlZCBhdCBhbiBvdmVyZmxvdwor ICogYnVmZmVyIHdpdGhpbiBMWjRGaWxlLiBPZiBjb3Vyc2UsIHdoZW4gdGhlIGZ1bmN0aW9uIGlz IGNhbGxlZCwgaXQgd2lsbCBmaXJzdAorICogdHJ5IHRvIGNvbnN1bWUgYW55IGRlY29tcHJlc3Nl ZCBjb250ZW50IGFscmVhZHkgcHJlc2VudCBpbiB0aGUgb3ZlcmZsb3cKKyAqIGJ1ZmZlciwgYmVm b3JlIGRlY29tcHJlc3NpbmcgbmV3IGNvbnRlbnQuCisgKi8KK3N0YXRpYyBpbnQKK0xaNEZpbGVf cmVhZF9pbnRlcm5hbChMWjRGaWxlICogZnMsIHZvaWQgKnB0ciwgaW50IHB0cnNpemUsIGJvb2wg ZW9sX2ZsYWcpCit7CisJc2l6ZV90CQlkc2l6ZSA9IDA7CisJc2l6ZV90CQlyc2l6ZTsKKwlzaXpl X3QJCXNpemUgPSBwdHJzaXplOworCWJvb2wJCWVvbF9mb3VuZCA9IGZhbHNlOworCisJdm9pZAkg ICAqcmVhZGJ1ZjsKKworCS8qIExhenkgaW5pdCAqLworCWlmIChMWjRGaWxlX2luaXQoZnMsIHNp emUsIGZhbHNlIC8qIGRlY29tcHJlc3NpbmcgKi8gKSkKKwkJcmV0dXJuIC0xOworCisJLyogVmVy aWZ5IHRoYXQgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGluIHRoZSBvdXRidWYgKi8KKwlpZiAoc2l6 ZSA+IGZzLT5idWZsZW4pCisJeworCQlmcy0+YnVmbGVuID0gc2l6ZTsKKwkJZnMtPmJ1ZmZlciA9 IHBnX3JlYWxsb2MoZnMtPmJ1ZmZlciwgc2l6ZSk7CisJfQorCisJLyogdXNlIGFscmVhZHkgZGVj b21wcmVzc2VkIGNvbnRlbnQgaWYgYXZhaWxhYmxlICovCisJZHNpemUgPSBMWjRGaWxlX3JlYWRf b3ZlcmZsb3coZnMsIHB0ciwgc2l6ZSwgZW9sX2ZsYWcpOworCWlmIChkc2l6ZSA9PSBzaXplIHx8 IChlb2xfZmxhZyAmJiBtZW1jaHIocHRyLCAnXG4nLCBkc2l6ZSkpKQorCQlyZXR1cm4gZHNpemU7 CisKKwlyZWFkYnVmID0gcGdfbWFsbG9jKHNpemUpOworCisJZG8KKwl7CisJCWNoYXIJICAgKnJw OworCQljaGFyCSAgICpyZW5kOworCisJCXJzaXplID0gZnJlYWQocmVhZGJ1ZiwgMSwgc2l6ZSwg ZnMtPmZwKTsKKwkJaWYgKHJzaXplIDwgc2l6ZSAmJiAhZmVvZihmcy0+ZnApKQorCQkJcmV0dXJu IC0xOworCisJCXJwID0gKGNoYXIgKikgcmVhZGJ1ZjsKKwkJcmVuZCA9IChjaGFyICopIHJlYWRi dWYgKyByc2l6ZTsKKworCQl3aGlsZSAocnAgPCByZW5kKQorCQl7CisJCQlzaXplX3QJCXN0YXR1 czsKKwkJCXNpemVfdAkJb3V0bGVuID0gZnMtPmJ1ZmxlbjsKKwkJCXNpemVfdAkJcmVhZF9yZW1h aW4gPSByZW5kIC0gcnA7CisKKwkJCW1lbXNldChmcy0+YnVmZmVyLCAwLCBvdXRsZW4pOworCQkJ c3RhdHVzID0gTFo0Rl9kZWNvbXByZXNzKGZzLT5kdHgsIGZzLT5idWZmZXIsICZvdXRsZW4sCisJ CQkJCQkJCQkgcnAsICZyZWFkX3JlbWFpbiwgTlVMTCk7CisJCQlpZiAoTFo0Rl9pc0Vycm9yKHN0 YXR1cykpCisJCQl7CisJCQkJZnMtPmVycmNvZGUgPSBzdGF0dXM7CisJCQkJcmV0dXJuIC0xOwor CQkJfQorCisJCQlycCArPSByZWFkX3JlbWFpbjsKKworCQkJLyoKKwkJCSAqIGZpbGwgaW4gd2hh dCBzcGFjZSBpcyBhdmFpbGFibGUgaW4gcHRyIGlmIHRoZSBlb2wgZmxhZyBpcyBzZXQsCisJCQkg KiBlaXRoZXIgc2tpcCBpZiBvbmUgYWxyZWFkeSBmb3VuZCBvciBmaWxsIHVwIHRvIEVPTCBpZiBw cmVzZW50CisJCQkgKiBpbiB0aGUgb3V0YnVmCisJCQkgKi8KKwkJCWlmIChvdXRsZW4gPiAwICYm IGRzaXplIDwgc2l6ZSAmJiBlb2xfZm91bmQgPT0gZmFsc2UpCisJCQl7CisJCQkJY2hhcgkgICAq cDsKKwkJCQlzaXplX3QJCWxpYiA9ICghZW9sX2ZsYWcpID8gc2l6ZSAtIGRzaXplIDogc2l6ZSAt IDEgLSBkc2l6ZTsKKwkJCQlzaXplX3QJCWxlbiA9IG91dGxlbiA8IGxpYiA/IG91dGxlbiA6IGxp YjsKKworCQkJCWlmIChlb2xfZmxhZyAmJgorCQkJCQkocCA9IG1lbWNocihmcy0+YnVmZmVyLCAn XG4nLCBvdXRsZW4pKSAmJgorCQkJCQkoc2l6ZV90KSAocCAtIGZzLT5idWZmZXIgKyAxKSA8PSBs ZW4pCisJCQkJeworCQkJCQlsZW4gPSBwIC0gZnMtPmJ1ZmZlciArIDE7CisJCQkJCWVvbF9mb3Vu ZCA9IHRydWU7CisJCQkJfQorCisJCQkJbWVtY3B5KChjaGFyICopIHB0ciArIGRzaXplLCBmcy0+ YnVmZmVyLCBsZW4pOworCQkJCWRzaXplICs9IGxlbjsKKworCQkJCS8qIG1vdmUgd2hhdCBkaWQg bm90IGZpdCwgaWYgYW55LCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWYgKi8KKwkJCQlpZiAo bGVuIDwgb3V0bGVuKQorCQkJCQltZW1tb3ZlKGZzLT5idWZmZXIsIGZzLT5idWZmZXIgKyBsZW4s IG91dGxlbiAtIGxlbik7CisJCQkJb3V0bGVuIC09IGxlbjsKKwkJCX0KKworCQkJLyogaWYgdGhl cmUgaXMgYXZhaWxhYmxlIG91dHB1dCwgc2F2ZSBpdCAqLworCQkJaWYgKG91dGxlbiA+IDApCisJ CQl7CisJCQkJd2hpbGUgKGZzLT5vdmVyZmxvd2xlbiArIG91dGxlbiA+IGZzLT5vdmVyZmxvd2Fs bG9jbGVuKQorCQkJCXsKKwkJCQkJZnMtPm92ZXJmbG93YWxsb2NsZW4gKj0gMjsKKwkJCQkJZnMt Pm92ZXJmbG93YnVmID0gcGdfcmVhbGxvYyhmcy0+b3ZlcmZsb3didWYsCisJCQkJCQkJCQkJCQkg ZnMtPm92ZXJmbG93YWxsb2NsZW4pOworCQkJCX0KKworCQkJCW1lbWNweShmcy0+b3ZlcmZsb3di dWYgKyBmcy0+b3ZlcmZsb3dsZW4sIGZzLT5idWZmZXIsIG91dGxlbik7CisJCQkJZnMtPm92ZXJm bG93bGVuICs9IG91dGxlbjsKKwkJCX0KKwkJfQorCX0gd2hpbGUgKHJzaXplID09IHNpemUgJiYg ZHNpemUgPCBzaXplICYmIGVvbF9mb3VuZCA9PSAwKTsKKworCXBnX2ZyZWUocmVhZGJ1Zik7CisK KwlyZXR1cm4gKGludCkgZHNpemU7Cit9CisKKy8qCisgKiBDb21wcmVzcyBzaXplIGJ5dGVzIGZy b20gcHRyIGFuZCB3cml0ZSB0aGVtIHRvIHRoZSBzdHJlYW0uCisgKi8KK3N0YXRpYyBzaXplX3QK K0xaNEZpbGVfd3JpdGUoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgQ29tcHJlc3NGaWxl SGFuZGxlICpDRkgpCit7CisJTFo0RmlsZSAgICAqZnMgPSAoTFo0RmlsZSAqKSBDRkgtPnByaXZh dGVfZGF0YTsKKwlzaXplX3QJCXN0YXR1czsKKwlpbnQJCQlyZW1haW5pbmcgPSBzaXplOworCisJ LyogTGF6eSBpbml0ICovCisJaWYgKExaNEZpbGVfaW5pdChmcywgc2l6ZSwgdHJ1ZSkpCisJCXJl dHVybiAtMTsKKworCXdoaWxlIChyZW1haW5pbmcgPiAwKQorCXsKKwkJaW50CQkJY2h1bmsgPSBy ZW1haW5pbmcgPCBMWjRfSU5fU0laRSA/IHJlbWFpbmluZyA6IExaNF9JTl9TSVpFOworCisJCXJl bWFpbmluZyAtPSBjaHVuazsKKworCQlzdGF0dXMgPSBMWjRGX2NvbXByZXNzVXBkYXRlKGZzLT5j dHgsIGZzLT5idWZmZXIsIGZzLT5idWZsZW4sCisJCQkJCQkJCQkgcHRyLCBjaHVuaywgTlVMTCk7 CisJCWlmIChMWjRGX2lzRXJyb3Ioc3RhdHVzKSkKKwkJeworCQkJZnMtPmVycmNvZGUgPSBzdGF0 dXM7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAoZndyaXRlKGZzLT5idWZmZXIsIDEsIHN0 YXR1cywgZnMtPmZwKSAhPSBzdGF0dXMpCisJCXsKKwkJCWVycm5vID0gKGVycm5vKSA/IGVycm5v IDogRU5PU1BDOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gc2l6ZTsKK30KKwor LyoKKyAqIGZyZWFkKCkgZXF1aXZhbGVudCBpbXBsZW1lbnRhdGlvbiBmb3IgTFo0IGNvbXByZXNz ZWQgZmlsZXMuCisgKi8KK3N0YXRpYyBzaXplX3QKK0xaNEZpbGVfcmVhZCh2b2lkICpwdHIsIHNp emVfdCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlMWjRGaWxlICAgICpmcyA9 IChMWjRGaWxlICopIENGSC0+cHJpdmF0ZV9kYXRhOworCWludAkJCXJldDsKKworCXJldCA9IExa NEZpbGVfcmVhZF9pbnRlcm5hbChmcywgcHRyLCBzaXplLCBmYWxzZSk7CisJaWYgKHJldCAhPSBz aXplICYmICFMWjRGaWxlX2VvZihDRkgpKQorCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJv bSBpbnB1dCBmaWxlOiAlcyIsIExaNEZpbGVfZ2V0X2Vycm9yKENGSCkpOworCisJcmV0dXJuIHJl dDsKK30KKworLyoKKyAqIGZnZXRjKCkgZXF1aXZhbGVudCBpbXBsZW1lbnRhdGlvbiBmb3IgTFo0 IGNvbXByZXNzZWQgZmlsZXMuCisgKi8KK3N0YXRpYyBpbnQKK0xaNEZpbGVfZ2V0YyhDb21wcmVz c0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlMWjRGaWxlICAgICpmcyA9IChMWjRGaWxlICopIENGSC0+ cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGNoYXIgYzsKKworCWlmIChMWjRGaWxlX3JlYWRfaW50 ZXJuYWwoZnMsICZjLCAxLCBmYWxzZSkgIT0gMSkKKwl7CisJCWlmICghTFo0RmlsZV9lb2YoQ0ZI KSkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6ICVzIiwgTFo0 RmlsZV9nZXRfZXJyb3IoQ0ZIKSk7CisJCWVsc2UKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVh ZCBmcm9tIGlucHV0IGZpbGU6IGVuZCBvZiBmaWxlIik7CisJfQorCisJcmV0dXJuIGM7Cit9CisK Ky8qCisgKiBmZ2V0cygpIGVxdWl2YWxlbnQgaW1wbGVtZW50YXRpb24gZm9yIExaNCBjb21wcmVz c2VkIGZpbGVzLgorICovCitzdGF0aWMgY2hhciAqCitMWjRGaWxlX2dldHMoY2hhciAqcHRyLCBp bnQgc2l6ZSwgQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJTFo0RmlsZSAgICAqZnMgPSAo TFo0RmlsZSAqKSBDRkgtPnByaXZhdGVfZGF0YTsKKwlzaXplX3QJCWRzaXplOworCisJZHNpemUg PSBMWjRGaWxlX3JlYWRfaW50ZXJuYWwoZnMsIHB0ciwgc2l6ZSwgdHJ1ZSk7CisJaWYgKGRzaXpl IDwgMCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLCBM WjRGaWxlX2dldF9lcnJvcihDRkgpKTsKKworCS8qIERvbmUgcmVhZGluZyAqLworCWlmIChkc2l6 ZSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBwdHI7Cit9CisKKy8qCisgKiBGaW5h bGl6ZSAoZGUpY29tcHJlc3Npb24gb2YgYSBzdHJlYW0uIFdoZW4gY29tcHJlc3NpbmcgaXQgd2ls bCB3cml0ZSBhbnkKKyAqIHJlbWFpbmluZyBjb250ZW50IGFuZC9vciBnZW5lcmF0ZWQgZm9vdGVy IGZyb20gdGhlIExaNCBBUEkuCisgKi8KK3N0YXRpYyBpbnQKK0xaNEZpbGVfY2xvc2UoQ29tcHJl c3NGaWxlSGFuZGxlICpDRkgpCit7CisJRklMRQkgICAqZnA7CisJTFo0RmlsZSAgICAqZnMgPSAo TFo0RmlsZSAqKSBDRkgtPnByaXZhdGVfZGF0YTsKKwlzaXplX3QJCXN0YXR1czsKKwlpbnQJCQly ZXQ7CisKKwlmcCA9IGZzLT5mcDsKKwlpZiAoZnMtPmluaXRlZCkKKwl7CisJCWlmIChmcy0+Y29t cHJlc3NpbmcpCisJCXsKKwkJCXN0YXR1cyA9IExaNEZfY29tcHJlc3NFbmQoZnMtPmN0eCwgZnMt PmJ1ZmZlciwgZnMtPmJ1ZmxlbiwgTlVMTCk7CisJCQlpZiAoTFo0Rl9pc0Vycm9yKHN0YXR1cykp CisJCQkJcGdfZmF0YWwoImZhaWxlZCB0byBlbmQgY29tcHJlc3Npb246ICVzIiwKKwkJCQkJCSBM WjRGX2dldEVycm9yTmFtZShzdGF0dXMpKTsKKwkJCWVsc2UgaWYgKChyZXQgPSBmd3JpdGUoZnMt PmJ1ZmZlciwgMSwgc3RhdHVzLCBmcy0+ZnApKSAhPSBzdGF0dXMpCisJCQl7CisJCQkJZXJybm8g PSAoZXJybm8pID8gZXJybm8gOiBFTk9TUEM7CisJCQkJV1JJVEVfRVJST1JfRVhJVDsKKwkJCX0K KworCQkJc3RhdHVzID0gTFo0Rl9mcmVlQ29tcHJlc3Npb25Db250ZXh0KGZzLT5jdHgpOworCQkJ aWYgKExaNEZfaXNFcnJvcihzdGF0dXMpKQorCQkJCXBnX2ZhdGFsKCJmYWlsZWQgdG8gZW5kIGNv bXByZXNzaW9uOiAlcyIsCisJCQkJCQkgTFo0Rl9nZXRFcnJvck5hbWUoc3RhdHVzKSk7CisJCX0K KwkJZWxzZQorCQl7CisJCQlzdGF0dXMgPSBMWjRGX2ZyZWVEZWNvbXByZXNzaW9uQ29udGV4dChm cy0+ZHR4KTsKKwkJCWlmIChMWjRGX2lzRXJyb3Ioc3RhdHVzKSkKKwkJCQlwZ19mYXRhbCgiZmFp bGVkIHRvIGVuZCBkZWNvbXByZXNzaW9uOiAlcyIsCisJCQkJCQkgTFo0Rl9nZXRFcnJvck5hbWUo c3RhdHVzKSk7CisJCQlwZ19mcmVlKGZzLT5vdmVyZmxvd2J1Zik7CisJCX0KKworCQlwZ19mcmVl KGZzLT5idWZmZXIpOworCX0KKworCXBnX2ZyZWUoZnMpOworCisJcmV0dXJuIGZjbG9zZShmcCk7 Cit9CisKK3N0YXRpYyBpbnQKK0xaNEZpbGVfb3Blbihjb25zdCBjaGFyICpwYXRoLCBpbnQgZmQs IGNvbnN0IGNoYXIgKm1vZGUsCisJCQkgQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJRklM RQkgICAqZnA7CisJTFo0RmlsZSAgICAqbHo0ZnAgPSAoTFo0RmlsZSAqKSBDRkgtPnByaXZhdGVf ZGF0YTsKKworCWlmIChmZCA+PSAwKQorCQlmcCA9IGZkb3BlbihmZCwgbW9kZSk7CisJZWxzZQor CQlmcCA9IGZvcGVuKHBhdGgsIG1vZGUpOworCWlmIChmcCA9PSBOVUxMKQorCXsKKwkJbHo0ZnAt PmVycmNvZGUgPSBlcnJubzsKKwkJcmV0dXJuIDE7CisJfQorCisJbHo0ZnAtPmZwID0gZnA7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorTFo0RmlsZV9vcGVuX3dyaXRlKGNvbnN0IGNo YXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQorewor CWNoYXIJICAgKmZuYW1lOworCWludAkJCXJldDsKKworCWZuYW1lID0gcHNwcmludGYoIiVzLmx6 NCIsIHBhdGgpOworCXJldCA9IENGSC0+b3Blbl9mdW5jKGZuYW1lLCAtMSwgbW9kZSwgQ0ZIKTsK KwlwZ19mcmVlKGZuYW1lKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBQdWJsaWMgcm91 dGluZXMKKyAqLwordm9pZAorSW5pdENvbXByZXNzRmlsZUhhbmRsZUxaNChDb21wcmVzc0ZpbGVI YW5kbGUgKkNGSCwKKwkJCQkJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21w cmVzc2lvbl9zcGVjKQoreworCUxaNEZpbGUgICAgKmx6NGZwOworCisJQ0ZILT5vcGVuX2Z1bmMg PSBMWjRGaWxlX29wZW47CisJQ0ZILT5vcGVuX3dyaXRlX2Z1bmMgPSBMWjRGaWxlX29wZW5fd3Jp dGU7CisJQ0ZILT5yZWFkX2Z1bmMgPSBMWjRGaWxlX3JlYWQ7CisJQ0ZILT53cml0ZV9mdW5jID0g TFo0RmlsZV93cml0ZTsKKwlDRkgtPmdldHNfZnVuYyA9IExaNEZpbGVfZ2V0czsKKwlDRkgtPmdl dGNfZnVuYyA9IExaNEZpbGVfZ2V0YzsKKwlDRkgtPmVvZl9mdW5jID0gTFo0RmlsZV9lb2Y7CisJ Q0ZILT5jbG9zZV9mdW5jID0gTFo0RmlsZV9jbG9zZTsKKwlDRkgtPmdldF9lcnJvcl9mdW5jID0g TFo0RmlsZV9nZXRfZXJyb3I7CisKKwlDRkgtPmNvbXByZXNzaW9uX3NwZWMgPSBjb21wcmVzc2lv bl9zcGVjOworCWx6NGZwID0gcGdfbWFsbG9jMChzaXplb2YoKmx6NGZwKSk7CisJaWYgKENGSC0+ Y29tcHJlc3Npb25fc3BlYy5sZXZlbCA+PSAwKQorCQlsejRmcC0+cHJlZnMuY29tcHJlc3Npb25M ZXZlbCA9IENGSC0+Y29tcHJlc3Npb25fc3BlYy5sZXZlbDsKKworCUNGSC0+cHJpdmF0ZV9kYXRh ID0gbHo0ZnA7Cit9CisjZWxzZQkJCQkJCQkvKiBVU0VfTFo0ICovCit2b2lkCitJbml0Q29tcHJl c3NvckxaNChDb21wcmVzc29yU3RhdGUgKmNzLAorCQkJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3Bl Y2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQoreworCXBnX2ZhdGFsKCJ0aGlzIGJ1aWxkIGRv ZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsICJMWjQiKTsKK30KKwordm9pZAor SW5pdENvbXByZXNzRmlsZUhhbmRsZUxaNChDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCwKKwkJCQkJ CSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQorewor CXBnX2ZhdGFsKCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAl cyIsICJMWjQiKTsKK30KKyNlbmRpZgkJCQkJCQkvKiBVU0VfTFo0ICovCmRpZmYgLS1naXQgYS9z cmMvYmluL3BnX2R1bXAvY29tcHJlc3NfbHo0LmggYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nf bHo0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNDBkYmUwMGQ0Ngot LS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19sejQuaApAQCAtMCww ICsxLDI0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBjb21wcmVzc19sejQuaAorICoJ IExaNCBpbnRlcmZhY2UgdG8gY29tcHJlc3NfaW8uYyByb3V0aW5lcworICoKKyAqIFBvcnRpb25z IENvcHlyaWdodCAoYykgMTk5Ni0yMDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2 ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICAgc3JjL2Jp bi9wZ19kdW1wL2NvbXByZXNzX2x6NC5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNp Zm5kZWYgX0NPTVBSRVNTX0xaNF9IXworI2RlZmluZSBfQ09NUFJFU1NfTFo0X0hfCisKKyNpbmNs dWRlICJjb21wcmVzc19pby5oIgorCitleHRlcm4gdm9pZCBJbml0Q29tcHJlc3NvckxaNChDb21w cmVzc29yU3RhdGUgKmNzLAorCQkJCQkJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlv biBjb21wcmVzc2lvbl9zcGVjKTsKK2V4dGVybiB2b2lkIEluaXRDb21wcmVzc0ZpbGVIYW5kbGVM WjQoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgsCisJCQkJCQkJCQkgIGNvbnN0IHBnX2NvbXByZXNz X3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7CisKKyNlbmRpZgkJCQkJCQkvKiBfQ09N UFJFU1NfTFo0X0hfICovCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQg Yi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKaW5kZXggODRlOWYwZGVmYS4uMGRhNDc2YTRj MyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iaW4v cGdfZHVtcC9tZXNvbi5idWlsZApAQCAtMyw2ICszLDcgQEAKIHBnX2R1bXBfY29tbW9uX3NvdXJj ZXMgPSBmaWxlcygKICAgJ2NvbXByZXNzX2d6aXAuYycsCiAgICdjb21wcmVzc19pby5jJywKKyAg J2NvbXByZXNzX2x6NC5jJywKICAgJ2NvbXByZXNzX25vbmUuYycsCiAgICdkdW1wdXRpbHMuYycs CiAgICdwYXJhbGxlbC5jJywKQEAgLTE4LDcgKzE5LDcgQEAgcGdfZHVtcF9jb21tb25fc291cmNl cyA9IGZpbGVzKAogcGdfZHVtcF9jb21tb24gPSBzdGF0aWNfbGlicmFyeSgnbGlicGdkdW1wX2Nv bW1vbicsCiAgIHBnX2R1bXBfY29tbW9uX3NvdXJjZXMsCiAgIGNfcGNoOiBwY2hfcG9zdGdyZXNf ZmVfaCwKLSAgZGVwZW5kZW5jaWVzOiBbZnJvbnRlbmRfY29kZSwgbGlicHEsIHpsaWJdLAorICBk ZXBlbmRlbmNpZXM6IFtmcm9udGVuZF9jb2RlLCBsaWJwcSwgbHo0LCB6bGliXSwKICAga3dhcmdz OiBpbnRlcm5hbF9saWJfYXJncywKICkKIApAQCAtODYsNyArODcsMTAgQEAgdGVzdHMgKz0gewog ICAnc2QnOiBtZXNvbi5jdXJyZW50X3NvdXJjZV9kaXIoKSwKICAgJ2JkJzogbWVzb24uY3VycmVu dF9idWlsZF9kaXIoKSwKICAgJ3RhcCc6IHsKLSAgICAnZW52JzogeydHWklQX1BST0dSQU0nOiBn emlwLnBhdGgoKX0sCisgICAgJ2Vudic6IHsKKyAgICAgICdHWklQX1BST0dSQU0nOiBnemlwLnBh dGgoKSwKKyAgICAgICdMWjQnOiBwcm9ncmFtX2x6NC5mb3VuZCgpID8gcHJvZ3JhbV9sejQucGF0 aCgpIDogJycsCisgICAgfSwKICAgICAndGVzdHMnOiBbCiAgICAgICAndC8wMDFfYmFzaWMucGwn LAogICAgICAgJ3QvMDAyX3BnX2R1bXAucGwnLApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cF9hcmNoaXZlci5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZl ci5jCmluZGV4IDJiYzU2NDhlZDYuLjAyN2RlZDRiYWUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdf ZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3Vw X2FyY2hpdmVyLmMKQEAgLTIwNzUsNyArMjA3NSw3IEBAIF9kaXNjb3ZlckFyY2hpdmVGb3JtYXQo QXJjaGl2ZUhhbmRsZSAqQUgpCiAKIAkJLyoKIAkJICogQ2hlY2sgaWYgdGhlIHNwZWNpZmllZCBh cmNoaXZlIGlzIGEgZGlyZWN0b3J5LiBJZiBzbywgY2hlY2sgaWYKLQkJICogdGhlcmUncyBhICJ0 b2MuZGF0IiAob3IgInRvYy5kYXQuZ3oiKSBmaWxlIGluIGl0LgorCQkgKiB0aGVyZSdzIGEgInRv Yy5kYXQiIChvciAidG9jLmRhdC57Z3osbHo0fSIpIGZpbGUgaW4gaXQuCiAJCSAqLwogCQlpZiAo c3RhdChBSC0+ZlNwZWMsICZzdCkgPT0gMCAmJiBTX0lTRElSKHN0LnN0X21vZGUpKQogCQl7CkBA IC0yMDg1LDYgKzIwODUsMTAgQEAgX2Rpc2NvdmVyQXJjaGl2ZUZvcm1hdChBcmNoaXZlSGFuZGxl ICpBSCkKICNpZmRlZiBIQVZFX0xJQloKIAkJCWlmIChfZmlsZUV4aXN0c0luRGlyZWN0b3J5KEFI LT5mU3BlYywgInRvYy5kYXQuZ3oiKSkKIAkJCQlyZXR1cm4gQUgtPmZvcm1hdDsKKyNlbmRpZgor I2lmZGVmIFVTRV9MWjQKKwkJCWlmIChfZmlsZUV4aXN0c0luRGlyZWN0b3J5KEFILT5mU3BlYywg InRvYy5kYXQubHo0IikpCisJCQkJcmV0dXJuIEFILT5mb3JtYXQ7CiAjZW5kaWYKIAkJCXBnX2Zh dGFsKCJkaXJlY3RvcnkgXCIlc1wiIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkIGFyY2hp dmUgKFwidG9jLmRhdFwiIGRvZXMgbm90IGV4aXN0KSIsCiAJCQkJCSBBSC0+ZlNwZWMpOwpkaWZm IC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kaXJlY3RvcnkuYyBiL3NyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXBfZGlyZWN0b3J5LmMKaW5kZXggYTJmODg5OTVjMC4uY2UyYTA4Mzhm YSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kaXJlY3RvcnkuYworKysg Yi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2RpcmVjdG9yeS5jCkBAIC03NzksMTAgKzc3OSwx MyBAQCBfUHJlcFBhcmFsbGVsUmVzdG9yZShBcmNoaXZlSGFuZGxlICpBSCkKIAogCQlpZiAoc3Rh dChmbmFtZSwgJnN0KSA9PSAwKQogCQkJdGUtPmRhdGFMZW5ndGggPSBzdC5zdF9zaXplOwotCQll bHNlCisJCWVsc2UgaWYgKEFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSAhPSBQR19DT01Q UkVTU0lPTl9OT05FKQogCQl7Ci0JCQkvKiBJdCBtaWdodCBiZSBjb21wcmVzc2VkICovCi0JCQlz dHJsY2F0KGZuYW1lLCAiLmd6Iiwgc2l6ZW9mKGZuYW1lKSk7CisJCQlpZiAoQUgtPmNvbXByZXNz aW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCisJCQkJc3RybGNhdChm bmFtZSwgIi5neiIsIHNpemVvZihmbmFtZSkpOworCQkJZWxzZSBpZiAoQUgtPmNvbXByZXNzaW9u X3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0xaNCkKKwkJCQlzdHJsY2F0KGZuYW1l LCAiLmx6NCIsIHNpemVvZihmbmFtZSkpOworCiAJCQlpZiAoc3RhdChmbmFtZSwgJnN0KSA9PSAw KQogCQkJCXRlLT5kYXRhTGVuZ3RoID0gc3Quc3Rfc2l6ZTsKIAkJfQpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKaW5kZXgg NTI3Yzc2NTFhYi4uMDgxMDUzMzdiMSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1 bXAuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCkBAIC03MTUsMTMgKzcxNSwxMiBA QCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05F OgogCQkJLyogZmFsbHRocm91Z2ggKi8KIAkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgorCQkJ LyogZmFsbHRocm91Z2ggKi8KKwkJY2FzZSBQR19DT01QUkVTU0lPTl9MWjQ6CiAJCQlicmVhazsK IAkJY2FzZSBQR19DT01QUkVTU0lPTl9aU1REOgogCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdp dGggJXMgaXMgbm90IHlldCBzdXBwb3J0ZWQiLCAiWlNURCIpOwogCQkJYnJlYWs7Ci0JCWNhc2Ug UEdfQ09NUFJFU1NJT05fTFo0OgotCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMgaXMg bm90IHlldCBzdXBwb3J0ZWQiLCAiTFo0Iik7Ci0JCQlicmVhazsKIAl9CiAKIAkvKgpkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwgYi9zcmMvYmluL3BnX2R1bXAv dC8wMDJfcGdfZHVtcC5wbAppbmRleCA3ODQ1NDkyOGNjLi43MmIxOWVlNmNkIDEwMDY0NAotLS0g YS9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbAorKysgYi9zcmMvYmluL3BnX2R1bXAv dC8wMDJfcGdfZHVtcC5wbApAQCAtMTM5LDYgKzEzOSw4MCBAQCBteSAlcGdkdW1wX3J1bnMgPSAo CiAJCQlhcmdzICAgID0+IFsgJy1kJywgIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2d6aXBfcGxhaW4u c3FsLmd6IiwgXSwKIAkJfSwKIAl9LAorCisJIyBEbyBub3QgdXNlIC0tbm8tc3luYyB0byBnaXZl IHRlc3QgY292ZXJhZ2UgZm9yIGRhdGEgc3luYy4KKwljb21wcmVzc2lvbl9sejRfY3VzdG9tID0+ IHsKKwkJdGVzdF9rZXkgICAgICAgPT4gJ2NvbXByZXNzaW9uJywKKwkJY29tcGlsZV9vcHRpb24g PT4gJ2x6NCcsCisJCWR1bXBfY21kICAgICAgID0+IFsKKwkJCSdwZ19kdW1wJywgICAgICAnLS1m b3JtYXQ9Y3VzdG9tJywKKwkJCSctLWNvbXByZXNzPWx6NCcsICItLWZpbGU9JHRlbXBkaXIvY29t cHJlc3Npb25fbHo0X2N1c3RvbS5kdW1wIiwKKwkJCSdwb3N0Z3JlcycsCisJCV0sCisJCXJlc3Rv cmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3JlJywKKwkJCSItLWZpbGU9JHRlbXBkaXIvY29tcHJl c3Npb25fbHo0X2N1c3RvbS5zcWwiLAorCQkJIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9jdXN0 b20uZHVtcCIsCisJCV0sCisJCWNvbW1hbmRfbGlrZSA9PiB7CisJCQljb21tYW5kID0+IFsKKwkJ CQkncGdfcmVzdG9yZScsCisJCQkJJy1sJywgIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9jdXN0 b20uZHVtcCIsCisJCQldLAorCQkJZXhwZWN0ZWQgPT4gcXIvQ29tcHJlc3Npb246IGx6NC8sCisJ CQluYW1lID0+ICdkYXRhIGNvbnRlbnQgaXMgbHo0IGNvbXByZXNzZWQnCisJCX0sCisJfSwKKwor CSMgRG8gbm90IHVzZSAtLW5vLXN5bmMgdG8gZ2l2ZSB0ZXN0IGNvdmVyYWdlIGZvciBkYXRhIHN5 bmMuCisJY29tcHJlc3Npb25fbHo0X2RpciA9PiB7CisJCXRlc3Rfa2V5ICAgICAgID0+ICdjb21w cmVzc2lvbicsCisJCWNvbXBpbGVfb3B0aW9uID0+ICdsejQnLAorCQlkdW1wX2NtZCAgICAgICA9 PiBbCisJCQkncGdfZHVtcCcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tam9icz0y JywKKwkJCSctLWZvcm1hdD1kaXJlY3RvcnknLCAgICAgICAgICAgICAgICAgICAnLS1jb21wcmVz cz1sejQ6MScsCisJCQkiLS1maWxlPSR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9kaXIiLCAncG9z dGdyZXMnLAorCQldLAorCQkjIEdpdmUgY292ZXJhZ2UgZm9yIG1hbnVhbGx5IGNvbXByZXNzZWQg YmxvYi50b2MgZmlsZXMgZHVyaW5nCisJCSMgcmVzdG9yZS4KKwkJY29tcHJlc3NfY21kID0+IHsK KwkJCXByb2dyYW0gPT4gJEVOVnsnTFo0J30sCisJCQlhcmdzICAgID0+IFsKKwkJCQknLXonLCAn LWYnLCAnLS1ybScsCisJCQkJIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9kaXIvYmxvYnMudG9j IiwKKwkJCQkiJHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X2Rpci9ibG9icy50b2MubHo0IiwKKwkJ CV0sCisJCX0sCisJCSMgVmVyaWZ5IHRoYXQgZGF0YSBmaWxlcyB3ZXJlIGNvbXByZXNzZWQKKwkJ Z2xvYl9wYXR0ZXJucyA9PiBbCisJCQkiJHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X2Rpci90b2Mu ZGF0IiwKKwkJICAgICIkdGVtcGRpci9jb21wcmVzc2lvbl9sejRfZGlyLyouZGF0Lmx6NCIsCisJ CV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3JlJywgJy0tam9icz0yJywKKwkJ CSItLWZpbGU9JHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X2Rpci5zcWwiLAorCQkJIiR0ZW1wZGly L2NvbXByZXNzaW9uX2x6NF9kaXIiLAorCQldLAorCX0sCisKKwljb21wcmVzc2lvbl9sejRfcGxh aW4gPT4geworCQl0ZXN0X2tleSAgICAgICA9PiAnY29tcHJlc3Npb24nLAorCQljb21waWxlX29w dGlvbiA9PiAnbHo0JywKKwkJZHVtcF9jbWQgICAgICAgPT4gWworCQkJJ3BnX2R1bXAnLCAnLS1m b3JtYXQ9cGxhaW4nLCAnLS1jb21wcmVzcz1sejQnLAorCQkJIi0tZmlsZT0kdGVtcGRpci9jb21w cmVzc2lvbl9sejRfcGxhaW4uc3FsLmx6NCIsICdwb3N0Z3JlcycsCisJCV0sCisJCSMgRGVjb21w cmVzcyB0aGUgZ2VuZXJhdGVkIGZpbGUgdG8gcnVuIHRocm91Z2ggdGhlIHRlc3RzLgorCQljb21w cmVzc19jbWQgPT4geworCQkJcHJvZ3JhbSA9PiAkRU5WeydMWjQnfSwKKwkJCWFyZ3MgICAgPT4g WworCQkJCSctZCcsICctZicsCisJCQkJIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9wbGFpbi5z cWwubHo0IiwKKwkJCQkiJHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X3BsYWluLnNxbCIsCisJCQld LAorCQl9LAorCX0sCisKIAljbGVhbiA9PiB7CiAJCWR1bXBfY21kID0+IFsKIAkJCSdwZ19kdW1w JywKQEAgLTQxNzUsMTEgKzQyNDksMTEgQEAgZm9yZWFjaCBteSAkcnVuIChzb3J0IGtleXMgJXBn ZHVtcF9ydW5zKQogCW15ICRydW5fZGIgICA9ICdwb3N0Z3Jlcyc7CiAKIAkjIFNraXAgY29tbWFu ZC1sZXZlbCB0ZXN0cyBmb3IgZ3ppcCBpZiB0aGVyZSBpcyBubyBzdXBwb3J0IGZvciBpdC4KLQlp ZiAoICAgZGVmaW5lZCgkcGdkdW1wX3J1bnN7JHJ1bn0tPntjb21waWxlX29wdGlvbn0pCi0JCSYm ICRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXBpbGVfb3B0aW9ufSBlcSAnZ3ppcCcKLQkJJiYgISRz dXBwb3J0c19nemlwKQorCWlmICgkcGdkdW1wX3J1bnN7JHJ1bn0tPntjb21waWxlX29wdGlvbn0g JiYKKwkJKCRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXBpbGVfb3B0aW9ufSBlcSAnZ3ppcCcgJiYg ISRzdXBwb3J0c19nemlwKSB8fAorCQkoJHBnZHVtcF9ydW5zeyRydW59LT57Y29tcGlsZV9vcHRp b259IGVxICdsejQnICYmICEkc3VwcG9ydHNfbHo0KSkKIAl7Ci0JCW5vdGUgIiRydW46IHNraXBw ZWQgZHVlIHRvIG5vIGd6aXAgc3VwcG9ydCI7CisJCW5vdGUgIiRydW46IHNraXBwZWQgZHVlIHRv IG5vICRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXBpbGVfb3B0aW9ufSBzdXBwb3J0IjsKIAkJbmV4 dDsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luY2x1ZGUvY3BsdXNwbHVzY2hlY2sg Yi9zcmMvdG9vbHMvcGdpbmNsdWRlL2NwbHVzcGx1c2NoZWNrCmluZGV4IGRiNDI5NDc0YTIuLjJj NTA0MmViNDEgMTAwNzU1Ci0tLSBhL3NyYy90b29scy9wZ2luY2x1ZGUvY3BsdXNwbHVzY2hlY2sK KysrIGIvc3JjL3Rvb2xzL3BnaW5jbHVkZS9jcGx1c3BsdXNjaGVjawpAQCAtMTUyLDYgKzE1Miw3 IEBAIGRvCiAJIyBhcyBmaWVsZCBuYW1lcywgd2hpY2ggaXMgdW5mb3J0dW5hdGUgYnV0IHdlIHdv bid0IGNoYW5nZSBpdCBub3cuCiAJdGVzdCAiJGYiID0gc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNz X2d6aXAuaCAmJiBjb250aW51ZQogCXRlc3QgIiRmIiA9IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVz c19pby5oICYmIGNvbnRpbnVlCisJdGVzdCAiJGYiID0gc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNz X2x6NC5oICYmIGNvbnRpbnVlCiAJdGVzdCAiJGYiID0gc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNz X25vbmUuaCAmJiBjb250aW51ZQogCXRlc3QgIiRmIiA9IHNyYy9iaW4vcGdfZHVtcC9wYXJhbGxl bC5oICYmIGNvbnRpbnVlCiAJdGVzdCAiJGYiID0gc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9h cmNoaXZlci5oICYmIGNvbnRpbnVlCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IGQ0YmI3 NDQyYmUuLmQ1M2NmZjk0ZmUgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xMzg3LDYg KzEzODcsNyBAQCBMV0xvY2sKIExXTG9ja0hhbmRsZQogTFdMb2NrTW9kZQogTFdMb2NrUGFkZGVk CitMWjRDb21wcmVzc29yU3RhdGUKIExaNEZfY29tcHJlc3Npb25Db250ZXh0X3QKIExaNEZfZGVj b21wcmVzc09wdGlvbnNfdAogTFo0Rl9kZWNvbXByZXNzaW9uQ29udGV4dF90Ci0tIAoyLjM0LjEK Cg== --b1_JUIMqrFBYvKDK5ZkGIoStK58M05RwtoKMsKHzaS9SM Content-Type: text/x-patch; name=v30-0002-Introduce-a-generic-pg_dump-compression-API.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v30-0002-Introduce-a-generic-pg_dump-compression-API.patch RnJvbSAzMGNkMmQ1ZjZmNjcyMjUyMjE1YjFlOTNjNjg1ODA4MTVjYmM4YjRjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IE1vbiwgMjAgRmViIDIwMjMgMTI6MTQ6NTYgKzAwMDAKU3ViamVjdDogW1BBVENIIHYz MCAyLzNdIEludHJvZHVjZSBhIGdlbmVyaWMgcGdfZHVtcCBjb21wcmVzc2lvbiBBUEkKClN3aXRj aCBwZ19kdW1wIHRvIHVzZSB0aGUgQ29tcHJlc3Npb24gQVBJLCBpbXBsZW1lbnRlZCBieSBiZjlh YTQ5MGRiLgoKVGhlIENvbXByZXNzRmlsZUhhbmRsZSByZXBsYWNlcyB0aGUgY2ZwKiBmYW1pbHkg b2YgZnVuY3Rpb25zIHdpdGggYQpzdHJ1Y3Qgb2YgY2FsbGJhY2tzIGZvciBhY2Nlc3NpbmcgKGNv bXByZXNzZWQpIGZpbGVzLiBUaGlzIGFsbG93cyBhZGRpbmcKbmV3IGNvbXByZXNzaW9uIG1ldGhv ZHMgc2ltcGx5IGJ5IGludHJvZHVjaW5nIGEgbmV3IHN0cnVjdCBpbnN0YW5jZSB3aXRoCmFwcHJv cHJpYXRlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBjYWxsYmFja3MuCgpBcmNoaXZlcyBjb21wcmVz c2VkIHVzaW5nIGN1c3RvbSBjb21wcmVzc2lvbiBtZXRob2RzIHN0b3JlIGFuIGlkZW50aWZpZXIK b2YgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobSBpbiB0aGVpciBoZWFkZXIgaW5zdGVhZCBvZiB0 aGUgY29tcHJlc3Npb24KbGV2ZWwuIFRoZSBoZWFkZXIgdmVyc2lvbiBpcyBidW1wZWQuCgpBdXRo b3I6IEdlb3JnaW9zIEtva29sYXRvcwpSZXZpZXdlZC1ieTogTWljaGFlbCBQYXF1aWVyLCBSYWNo ZWwgSGVhdG9uLCBKdXN0aW4gUHJ5emJ5LCBUb21hcyBWb25kcmEKRGlzY3Vzc2lvbjoKaHR0cHM6 Ly9wb3N0Z3IuZXMvbS9mYVVORU9wdHM5dnVuRWFMbm14bUctRGxkTFNnX3FsMTM3T0MzSllEbWdy T01IbTFSdnZXWTJJZEJrdl9DUnhtNXNwQ0NiX09tS05rMlQwM1RNbTBmQkVXdmVGRjl3QTFXaXpQ dUFnQjdTcyUzRCU0MHByb3Rvbm1haWwuY29tCi0tLQogc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxl ICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5jICAg ICAgIHwgNDAxICsrKysrKysrKysrKysrCiBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5o ICAgICAgIHwgIDI0ICsKIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jICAgICAgICAgfCA3 NDEgKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19p by5oICAgICAgICAgfCAxNjYgKysrKystCiBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nfbm9uZS5j ICAgICAgIHwgMjA2ICsrKysrKysKIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19ub25lLmggICAg ICAgfCAgMjQgKwogc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkICAgICAgICAgICB8ICAgMiAr CiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMgIHwgIDkxICsrLS0KIHNyYy9i aW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaCAgfCAgIDUgKy0KIHNyYy9iaW4vcGdfZHVt cC9wZ19iYWNrdXBfY3VzdG9tLmMgICAgfCAgMjcgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNr dXBfZGlyZWN0b3J5LmMgfCAgOTQgKystLQogc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAu cGwgICAgICB8ICAxMCArLQogc3JjL2luY2x1ZGUvY29tbW9uL2NvbXByZXNzaW9uLmggICAgICB8 ICAgNCArCiBzcmMvdG9vbHMvcGdpbmNsdWRlL2NwbHVzcGx1c2NoZWNrICAgIHwgICAyICsKIHNy Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgfCAgIDIgKwogMTYgZmlsZXMgY2hh bmdlZCwgMTA1MCBpbnNlcnRpb25zKCspLCA3NTEgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv YmluL3BnX2R1bXAvY29tcHJlc3Nfbm9uZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9w Z19kdW1wL2NvbXByZXNzX25vbmUuaAoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9NYWtl ZmlsZSBiL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZQppbmRleCBlZjFlZDBmM2U1Li4wMDEzYmMw ODBjIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKKysrIGIvc3JjL2Jpbi9w Z19kdW1wL01ha2VmaWxlCkBAIC0yNCw3ICsyNCw5IEBAIExERkxBR1NfSU5URVJOQUwgKz0gLUwk KHRvcF9idWlsZGRpcikvc3JjL2ZlX3V0aWxzIC1scGdmZXV0aWxzICQobGlicHFfcGdwb3J0KQog CiBPQkpTID0gXAogCSQoV0lOMzJSRVMpIFwKKwljb21wcmVzc19nemlwLm8gXAogCWNvbXByZXNz X2lvLm8gXAorCWNvbXByZXNzX25vbmUubyBcCiAJZHVtcHV0aWxzLm8gXAogCXBhcmFsbGVsLm8g XAogCXBnX2JhY2t1cF9hcmNoaXZlci5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9j b21wcmVzc19nemlwLmMgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjI0ZTY4ZmQwMjIKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5jCkBAIC0wLDAgKzEsNDAxIEBACisv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBjb21wcmVzc19nemlwLmMKKyAqCSBSb3V0aW5lcyBm b3IgYXJjaGl2ZXJzIHRvIHJlYWQgb3Igd3JpdGUgYSBnemlwIGNvbXByZXNzZWQgZGF0YSBzdHJl YW0uCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjMsIFBvc3RncmVTUUwg R2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQs IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJ Q0FUSU9OCisgKgkgICBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5jCisgKgorICotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgorI2luY2x1ZGUgPHVu aXN0ZC5oPgorCisjaW5jbHVkZSAiY29tcHJlc3NfZ3ppcC5oIgorI2luY2x1ZGUgInBnX2JhY2t1 cF91dGlscy5oIgorCisjaWZkZWYgSEFWRV9MSUJaCisjaW5jbHVkZSAiemxpYi5oIgorCisvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENvbXByZXNzb3IgQVBJCisgKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqLwordHlwZWRlZiBzdHJ1Y3QgR3ppcENvbXByZXNzb3JTdGF0ZQoreworCXpf c3RyZWFtcAl6cDsKKworCXZvaWQJICAgKm91dGJ1ZjsKKwlzaXplX3QJCW91dHNpemU7Cit9IEd6 aXBDb21wcmVzc29yU3RhdGU7CisKKy8qIFByaXZhdGUgcm91dGluZXMgdGhhdCBzdXBwb3J0IGd6 aXAgY29tcHJlc3NlZCBkYXRhIEkvTyAqLworc3RhdGljIHZvaWQKK0RlZmxhdGVDb21wcmVzc29y R3ppcChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywgYm9vbCBmbHVzaCkK K3sKKwlHemlwQ29tcHJlc3NvclN0YXRlICpnemlwY3MgPSAoR3ppcENvbXByZXNzb3JTdGF0ZSAq KSBjcy0+cHJpdmF0ZV9kYXRhOworCXpfc3RyZWFtcAl6cCA9IGd6aXBjcy0+enA7CisJdm9pZAkg ICAqb3V0ID0gZ3ppcGNzLT5vdXRidWY7CisJaW50CQkJcmVzID0gWl9PSzsKKworCXdoaWxlIChn emlwY3MtPnpwLT5hdmFpbF9pbiAhPSAwIHx8IGZsdXNoKQorCXsKKwkJcmVzID0gZGVmbGF0ZSh6 cCwgZmx1c2ggPyBaX0ZJTklTSCA6IFpfTk9fRkxVU0gpOworCQlpZiAocmVzID09IFpfU1RSRUFN X0VSUk9SKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb21wcmVzcyBkYXRhOiAlcyIsIHpwLT5t c2cpOworCQlpZiAoKGZsdXNoICYmICh6cC0+YXZhaWxfb3V0IDwgZ3ppcGNzLT5vdXRzaXplKSkK KwkJCXx8ICh6cC0+YXZhaWxfb3V0ID09IDApCisJCQl8fCAoenAtPmF2YWlsX2luICE9IDApCisJ CQkpCisJCXsKKwkJCS8qCisJCQkgKiBFeHRyYSBwYXJhbm9pYTogYXZvaWQgemVyby1sZW5ndGgg Y2h1bmtzLCBzaW5jZSBhIHplcm8gbGVuZ3RoCisJCQkgKiBjaHVuayBpcyB0aGUgRU9GIG1hcmtl ciBpbiB0aGUgY3VzdG9tIGZvcm1hdC4gVGhpcyBzaG91bGQgbmV2ZXIKKwkJCSAqIGhhcHBlbiBi dXQuLi4KKwkJCSAqLworCQkJaWYgKHpwLT5hdmFpbF9vdXQgPCBnemlwY3MtPm91dHNpemUpCisJ CQl7CisJCQkJLyoKKwkJCQkgKiBBbnkgd3JpdGUgZnVuY3Rpb24gc2hvdWxkIGRvIGl0cyBvd24g ZXJyb3IgY2hlY2tpbmcgYnV0IHRvCisJCQkJICogbWFrZSBzdXJlIHdlIGRvIGEgY2hlY2sgaGVy ZSBhcyB3ZWxsLi4uCisJCQkJICovCisJCQkJc2l6ZV90CQlsZW4gPSBnemlwY3MtPm91dHNpemUg LSB6cC0+YXZhaWxfb3V0OworCisJCQkJY3MtPndyaXRlRihBSCwgKGNoYXIgKikgb3V0LCBsZW4p OworCQkJfQorCQkJenAtPm5leHRfb3V0ID0gb3V0OworCQkJenAtPmF2YWlsX291dCA9IGd6aXBj cy0+b3V0c2l6ZTsKKwkJfQorCisJCWlmIChyZXMgPT0gWl9TVFJFQU1fRU5EKQorCQkJYnJlYWs7 CisJfQorfQorCitzdGF0aWMgdm9pZAorRW5kQ29tcHJlc3Nvckd6aXAoQXJjaGl2ZUhhbmRsZSAq QUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpCit7CisJR3ppcENvbXByZXNzb3JTdGF0ZSAqZ3ppcGNz ID0gKEd6aXBDb21wcmVzc29yU3RhdGUgKikgY3MtPnByaXZhdGVfZGF0YTsKKwl6X3N0cmVhbXAJ enA7CisKKwlpZiAoZ3ppcGNzLT56cCkKKwl7CisJCXpwID0gZ3ppcGNzLT56cDsKKwkJenAtPm5l eHRfaW4gPSBOVUxMOworCQl6cC0+YXZhaWxfaW4gPSAwOworCisJCS8qIEZsdXNoIGFueSByZW1h aW5pbmcgZGF0YSBmcm9tIHpsaWIgYnVmZmVyICovCisJCURlZmxhdGVDb21wcmVzc29yR3ppcChB SCwgY3MsIHRydWUpOworCisJCWlmIChkZWZsYXRlRW5kKHpwKSAhPSBaX09LKQorCQkJcGdfZmF0 YWwoImNvdWxkIG5vdCBjbG9zZSBjb21wcmVzc2lvbiBzdHJlYW06ICVzIiwgenAtPm1zZyk7CisK KwkJcGdfZnJlZShnemlwY3MtPm91dGJ1Zik7CisJCXBnX2ZyZWUoZ3ppcGNzLT56cCk7CisJfQor CisJcGdfZnJlZShnemlwY3MpOworCWNzLT5wcml2YXRlX2RhdGEgPSBOVUxMOworfQorCitzdGF0 aWMgdm9pZAorV3JpdGVEYXRhVG9BcmNoaXZlR3ppcChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJl c3NvclN0YXRlICpjcywKKwkJCQkJICAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRMZW4pCit7 CisJR3ppcENvbXByZXNzb3JTdGF0ZSAqZ3ppcGNzID0gKEd6aXBDb21wcmVzc29yU3RhdGUgKikg Y3MtPnByaXZhdGVfZGF0YTsKKwl6X3N0cmVhbXAJenA7CisKKwlpZiAoIWd6aXBjcy0+enApCisJ eworCQl6cCA9IGd6aXBjcy0+enAgPSAoel9zdHJlYW1wKSBwZ19tYWxsb2Moc2l6ZW9mKHpfc3Ry ZWFtKSk7CisJCXpwLT56YWxsb2MgPSBaX05VTEw7CisJCXpwLT56ZnJlZSA9IFpfTlVMTDsKKwkJ enAtPm9wYXF1ZSA9IFpfTlVMTDsKKworCQkvKgorCQkgKiBvdXRzaXplIGlzIHRoZSBidWZmZXIg c2l6ZSB3ZSB0ZWxsIHpsaWIgaXQgY2FuIG91dHB1dCB0by4gIFdlCisJCSAqIGFjdHVhbGx5IGFs bG9jYXRlIG9uZSBleHRyYSBieXRlIGJlY2F1c2Ugc29tZSByb3V0aW5lcyB3YW50IHRvCisJCSAq IGFwcGVuZCBhIHRyYWlsaW5nIHplcm8gYnl0ZSB0byB0aGUgemxpYiBvdXRwdXQuCisJCSAqLwor CQlnemlwY3MtPm91dGJ1ZiA9IHBnX21hbGxvYyhaTElCX09VVF9TSVpFICsgMSk7CisJCWd6aXBj cy0+b3V0c2l6ZSA9IFpMSUJfT1VUX1NJWkU7CisKKwkJLyoKKwkJICogQSBsZXZlbCBvZiB6ZXJv IHNpbXBseSBjb3BpZXMgdGhlIGlucHV0IG9uZSBibG9jayBhdCB0aGUgdGltZS4gVGhpcworCQkg KiBpcyBwcm9iYWJseSBub3Qgd2hhdCB0aGUgdXNlciB3YW50ZWQgd2hlbiBjYWxsaW5nIHRoaXMg aW50ZXJmYWNlLgorCQkgKi8KKwkJaWYgKGNzLT5jb21wcmVzc2lvbl9zcGVjLmxldmVsID09IDAp CisJCQlwZ19mYXRhbCgicmVxdWVzdGVkIHRvIGNvbXByZXNzIHRoZSBhcmNoaXZlIHlldCBubyBs ZXZlbCB3YXMgc3BlY2lmaWVkIik7CisKKwkJaWYgKGRlZmxhdGVJbml0KHpwLCBjcy0+Y29tcHJl c3Npb25fc3BlYy5sZXZlbCkgIT0gWl9PSykKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgaW5pdGlh bGl6ZSBjb21wcmVzc2lvbiBsaWJyYXJ5OiAlcyIsIHpwLT5tc2cpOworCisJCS8qIEp1c3QgYmUg cGFyYW5vaWQgLSBtYXliZSBFbmQgaXMgY2FsbGVkIGFmdGVyIFN0YXJ0LCB3aXRoIG5vIFdyaXRl ICovCisJCXpwLT5uZXh0X291dCA9IGd6aXBjcy0+b3V0YnVmOworCQl6cC0+YXZhaWxfb3V0ID0g Z3ppcGNzLT5vdXRzaXplOworCX0KKworCWd6aXBjcy0+enAtPm5leHRfaW4gPSAodm9pZCAqKSB1 bmNvbnN0aWZ5KHZvaWQgKiwgZGF0YSk7CisJZ3ppcGNzLT56cC0+YXZhaWxfaW4gPSBkTGVuOwor CURlZmxhdGVDb21wcmVzc29yR3ppcChBSCwgY3MsIGZhbHNlKTsKK30KKworc3RhdGljIHZvaWQK K1JlYWREYXRhRnJvbUFyY2hpdmVHemlwKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3Rh dGUgKmNzKQoreworCXpfc3RyZWFtcAl6cDsKKwljaGFyCSAgICpvdXQ7CisJaW50CQkJcmVzID0g Wl9PSzsKKwlzaXplX3QJCWNudDsKKwljaGFyCSAgICpidWY7CisJc2l6ZV90CQlidWZsZW47CisK Kwl6cCA9ICh6X3N0cmVhbXApIHBnX21hbGxvYyhzaXplb2Yoel9zdHJlYW0pKTsKKwl6cC0+emFs bG9jID0gWl9OVUxMOworCXpwLT56ZnJlZSA9IFpfTlVMTDsKKwl6cC0+b3BhcXVlID0gWl9OVUxM OworCisJYnVmID0gcGdfbWFsbG9jKFpMSUJfSU5fU0laRSk7CisJYnVmbGVuID0gWkxJQl9JTl9T SVpFOworCisJb3V0ID0gcGdfbWFsbG9jKFpMSUJfT1VUX1NJWkUgKyAxKTsKKworCWlmIChpbmZs YXRlSW5pdCh6cCkgIT0gWl9PSykKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBpbml0aWFsaXplIGNv bXByZXNzaW9uIGxpYnJhcnk6ICVzIiwKKwkJCQkgenAtPm1zZyk7CisKKwkvKiBubyBtaW5pbWFs IGNodW5rIHNpemUgZm9yIHpsaWIgKi8KKwl3aGlsZSAoKGNudCA9IGNzLT5yZWFkRihBSCwgJmJ1 ZiwgJmJ1ZmxlbikpKQorCXsKKwkJenAtPm5leHRfaW4gPSAodm9pZCAqKSBidWY7CisJCXpwLT5h dmFpbF9pbiA9IGNudDsKKworCQl3aGlsZSAoenAtPmF2YWlsX2luID4gMCkKKwkJeworCQkJenAt Pm5leHRfb3V0ID0gKHZvaWQgKikgb3V0OworCQkJenAtPmF2YWlsX291dCA9IFpMSUJfT1VUX1NJ WkU7CisKKwkJCXJlcyA9IGluZmxhdGUoenAsIDApOworCQkJaWYgKHJlcyAhPSBaX09LICYmIHJl cyAhPSBaX1NUUkVBTV9FTkQpCisJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCB1bmNvbXByZXNzIGRh dGE6ICVzIiwgenAtPm1zZyk7CisKKwkJCW91dFtaTElCX09VVF9TSVpFIC0genAtPmF2YWlsX291 dF0gPSAnXDAnOworCQkJYWh3cml0ZShvdXQsIDEsIFpMSUJfT1VUX1NJWkUgLSB6cC0+YXZhaWxf b3V0LCBBSCk7CisJCX0KKwl9CisKKwl6cC0+bmV4dF9pbiA9IE5VTEw7CisJenAtPmF2YWlsX2lu ID0gMDsKKwl3aGlsZSAocmVzICE9IFpfU1RSRUFNX0VORCkKKwl7CisJCXpwLT5uZXh0X291dCA9 ICh2b2lkICopIG91dDsKKwkJenAtPmF2YWlsX291dCA9IFpMSUJfT1VUX1NJWkU7CisJCXJlcyA9 IGluZmxhdGUoenAsIDApOworCQlpZiAocmVzICE9IFpfT0sgJiYgcmVzICE9IFpfU1RSRUFNX0VO RCkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgdW5jb21wcmVzcyBkYXRhOiAlcyIsIHpwLT5tc2cp OworCisJCW91dFtaTElCX09VVF9TSVpFIC0genAtPmF2YWlsX291dF0gPSAnXDAnOworCQlhaHdy aXRlKG91dCwgMSwgWkxJQl9PVVRfU0laRSAtIHpwLT5hdmFpbF9vdXQsIEFIKTsKKwl9CisKKwlp ZiAoaW5mbGF0ZUVuZCh6cCkgIT0gWl9PSykKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBj b21wcmVzc2lvbiBsaWJyYXJ5OiAlcyIsIHpwLT5tc2cpOworCisJZnJlZShidWYpOworCWZyZWUo b3V0KTsKKwlmcmVlKHpwKTsKK30KKworLyogUHVibGljIHJvdXRpbmVzIHRoYXQgc3VwcG9ydCBn emlwIGNvbXByZXNzZWQgZGF0YSBJL08gKi8KK3ZvaWQKK0luaXRDb21wcmVzc29yR3ppcChDb21w cmVzc29yU3RhdGUgKmNzLAorCQkJCSAgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24g Y29tcHJlc3Npb25fc3BlYykKK3sKKwlHemlwQ29tcHJlc3NvclN0YXRlICpnemlwY3M7CisKKwlj cy0+cmVhZERhdGEgPSBSZWFkRGF0YUZyb21BcmNoaXZlR3ppcDsKKwljcy0+d3JpdGVEYXRhID0g V3JpdGVEYXRhVG9BcmNoaXZlR3ppcDsKKwljcy0+ZW5kID0gRW5kQ29tcHJlc3Nvckd6aXA7CisK Kwljcy0+Y29tcHJlc3Npb25fc3BlYyA9IGNvbXByZXNzaW9uX3NwZWM7CisKKwlnemlwY3MgPSAo R3ppcENvbXByZXNzb3JTdGF0ZSAqKSBwZ19tYWxsb2MwKHNpemVvZihHemlwQ29tcHJlc3NvclN0 YXRlKSk7CisKKwljcy0+cHJpdmF0ZV9kYXRhID0gZ3ppcGNzOworfQorCisKKy8qLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICogQ29tcHJlc3MgRmlsZSBBUEkKKyAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICovCisKK3N0YXRpYyBzaXplX3QKK0d6aXBfcmVhZCh2b2lkICpwdHIsIHNpemVfdCBz aXplLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlnekZpbGUJCWd6ZnAgPSAoZ3pGaWxl KSBDRkgtPnByaXZhdGVfZGF0YTsKKwlzaXplX3QJCXJldDsKKworCXJldCA9IGd6cmVhZChnemZw LCBwdHIsIHNpemUpOworCWlmIChyZXQgIT0gc2l6ZSAmJiAhZ3plb2YoZ3pmcCkpCisJeworCQlp bnQJCQllcnJudW07CisJCWNvbnN0IGNoYXIgKmVycm1zZyA9IGd6ZXJyb3IoZ3pmcCwgJmVycm51 bSk7CisKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLAor CQkJCSBlcnJudW0gPT0gWl9FUlJOTyA/IHN0cmVycm9yKGVycm5vKSA6IGVycm1zZyk7CisJfQor CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNpemVfdAorR3ppcF93cml0ZShjb25zdCB2b2lk ICpwdHIsIHNpemVfdCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlnekZpbGUJ CWd6ZnAgPSAoZ3pGaWxlKSBDRkgtPnByaXZhdGVfZGF0YTsKKworCXJldHVybiBnendyaXRlKGd6 ZnAsIHB0ciwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQKK0d6aXBfZ2V0YyhDb21wcmVzc0ZpbGVI YW5kbGUgKkNGSCkKK3sKKwlnekZpbGUJCWd6ZnAgPSAoZ3pGaWxlKSBDRkgtPnByaXZhdGVfZGF0 YTsKKwlpbnQJCQlyZXQ7CisKKwllcnJubyA9IDA7CisJcmV0ID0gZ3pnZXRjKGd6ZnApOworCWlm IChyZXQgPT0gRU9GKQorCXsKKwkJaWYgKCFnemVvZihnemZwKSkKKwkJCXBnX2ZhdGFsKCJjb3Vs ZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZWxz ZQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogZW5kIG9mIGZp bGUiKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY2hhciAqCitHemlwX2dldHMo Y2hhciAqcHRyLCBpbnQgc2l6ZSwgQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJZ3pGaWxl CQlnemZwID0gKGd6RmlsZSkgQ0ZILT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gZ3pnZXRzKGd6 ZnAsIHB0ciwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQKK0d6aXBfY2xvc2UoQ29tcHJlc3NGaWxl SGFuZGxlICpDRkgpCit7CisJZ3pGaWxlCQlnemZwID0gKGd6RmlsZSkgQ0ZILT5wcml2YXRlX2Rh dGE7CisKKwlDRkgtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisKKwlyZXR1cm4gZ3pjbG9zZShnemZw KTsKK30KKworc3RhdGljIGludAorR3ppcF9lb2YoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7 CisJZ3pGaWxlCQlnemZwID0gKGd6RmlsZSkgQ0ZILT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4g Z3plb2YoZ3pmcCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK0d6aXBfZ2V0X2Vycm9yKENv bXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCWd6RmlsZQkJZ3pmcCA9IChnekZpbGUpIENGSC0+ cHJpdmF0ZV9kYXRhOworCWNvbnN0IGNoYXIgKmVycm1zZzsKKwlpbnQJCQllcnJudW07CisKKwll cnJtc2cgPSBnemVycm9yKGd6ZnAsICZlcnJudW0pOworCWlmIChlcnJudW0gPT0gWl9FUlJOTykK KwkJZXJybXNnID0gc3RyZXJyb3IoZXJybm8pOworCisJcmV0dXJuIGVycm1zZzsKK30KKworc3Rh dGljIGludAorR3ppcF9vcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmZCwgY29uc3QgY2hhciAq bW9kZSwgQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJZ3pGaWxlCQlnemZwOworCWNoYXIJ CW1vZGVfY29tcHJlc3Npb25bMzJdOworCisJaWYgKENGSC0+Y29tcHJlc3Npb25fc3BlYy5sZXZl bCAhPSBaX0RFRkFVTFRfQ09NUFJFU1NJT04pCisJeworCQkvKgorCQkgKiB1c2VyIGhhcyBzcGVj aWZpZWQgYSBjb21wcmVzc2lvbiBsZXZlbCwgc28gdGVsbCB6bGliIHRvIHVzZSBpdAorCQkgKi8K KwkJc25wcmludGYobW9kZV9jb21wcmVzc2lvbiwgc2l6ZW9mKG1vZGVfY29tcHJlc3Npb24pLCAi JXMlZCIsCisJCQkJIG1vZGUsIENGSC0+Y29tcHJlc3Npb25fc3BlYy5sZXZlbCk7CisJfQorCWVs c2UKKwkJc3RyY3B5KG1vZGVfY29tcHJlc3Npb24sIG1vZGUpOworCisJaWYgKGZkID49IDApCisJ CWd6ZnAgPSBnemRvcGVuKGR1cChmZCksIG1vZGVfY29tcHJlc3Npb24pOworCWVsc2UKKwkJZ3pm cCA9IGd6b3BlbihwYXRoLCBtb2RlX2NvbXByZXNzaW9uKTsKKworCWlmIChnemZwID09IE5VTEwp CisJCXJldHVybiAxOworCisJQ0ZILT5wcml2YXRlX2RhdGEgPSBnemZwOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQKK0d6aXBfb3Blbl93cml0ZShjb25zdCBjaGFyICpwYXRoLCBjb25z dCBjaGFyICptb2RlLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwljaGFyCSAgICpmbmFt ZTsKKwlpbnQJCQlyZXQ7CisJaW50CQkJc2F2ZV9lcnJubzsKKworCWZuYW1lID0gcHNwcmludGYo IiVzLmd6IiwgcGF0aCk7CisJcmV0ID0gQ0ZILT5vcGVuX2Z1bmMoZm5hbWUsIC0xLCBtb2RlLCBD RkgpOworCisJc2F2ZV9lcnJubyA9IGVycm5vOworCXBnX2ZyZWUoZm5hbWUpOworCWVycm5vID0g c2F2ZV9lcnJubzsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQKK0luaXRDb21wcmVzc0ZpbGVI YW5kbGVHemlwKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZILAorCQkJCQkJICAgY29uc3QgcGdfY29t cHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQoreworCUNGSC0+b3Blbl9mdW5j ID0gR3ppcF9vcGVuOworCUNGSC0+b3Blbl93cml0ZV9mdW5jID0gR3ppcF9vcGVuX3dyaXRlOwor CUNGSC0+cmVhZF9mdW5jID0gR3ppcF9yZWFkOworCUNGSC0+d3JpdGVfZnVuYyA9IEd6aXBfd3Jp dGU7CisJQ0ZILT5nZXRzX2Z1bmMgPSBHemlwX2dldHM7CisJQ0ZILT5nZXRjX2Z1bmMgPSBHemlw X2dldGM7CisJQ0ZILT5jbG9zZV9mdW5jID0gR3ppcF9jbG9zZTsKKwlDRkgtPmVvZl9mdW5jID0g R3ppcF9lb2Y7CisJQ0ZILT5nZXRfZXJyb3JfZnVuYyA9IEd6aXBfZ2V0X2Vycm9yOworCisJQ0ZI LT5jb21wcmVzc2lvbl9zcGVjID0gY29tcHJlc3Npb25fc3BlYzsKKworCUNGSC0+cHJpdmF0ZV9k YXRhID0gTlVMTDsKK30KKyNlbHNlCQkJCQkJCS8qIEhBVkVfTElCWiAqLwordm9pZAorSW5pdENv bXByZXNzb3JHemlwKENvbXByZXNzb3JTdGF0ZSAqY3MsCisJCQkJICAgY29uc3QgcGdfY29tcHJl c3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQoreworCXBnX2ZhdGFsKCJ0aGlzIGJ1 aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsICJnemlwIik7Cit9CisK K3ZvaWQKK0luaXRDb21wcmVzc0ZpbGVIYW5kbGVHemlwKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZI LAorCQkJCQkJICAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9z cGVjKQoreworCXBnX2ZhdGFsKCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Np b24gd2l0aCAlcyIsICJnemlwIik7Cit9CisjZW5kaWYJCQkJCQkJLyogSEFWRV9MSUJaICovCmRp ZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5oIGIvc3JjL2Jpbi9wZ19k dW1wL2NvbXByZXNzX2d6aXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li4yMzkyYzY5N2I0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNz X2d6aXAuaApAQCAtMCwwICsxLDI0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBjb21w cmVzc19nemlwLmgKKyAqCSBHWklQIGludGVyZmFjZSB0byBjb21wcmVzc19pby5jIHJvdXRpbmVz CisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjMsIFBvc3RncmVTUUwgR2xv YmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJl Z2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJQ0FU SU9OCisgKgkgICBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5oCisgKgorICotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgX0NPTVBSRVNTX0daSVBfSF8KKyNkZWZpbmUgX0NPTVBS RVNTX0daSVBfSF8KKworI2luY2x1ZGUgImNvbXByZXNzX2lvLmgiCisKK2V4dGVybiB2b2lkIElu aXRDb21wcmVzc29yR3ppcChDb21wcmVzc29yU3RhdGUgKmNzLAorCQkJCQkJCSAgIGNvbnN0IHBn X2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7CitleHRlcm4gdm9pZCBJ bml0Q29tcHJlc3NGaWxlSGFuZGxlR3ppcChDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCwKKwkJCQkJ CQkJCSAgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7 CisKKyNlbmRpZgkJCQkJCQkvKiBfQ09NUFJFU1NfR1pJUF9IXyAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8u YwppbmRleCA0MDc0Y2MwMzFjLi5kYWU0ZGMwMWQ1IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1 bXAvY29tcHJlc3NfaW8uYworKysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYwpAQCAt OSw0MiArOSw1MSBAQAogICoKICAqIFRoaXMgZmlsZSBpbmNsdWRlcyB0d28gQVBJcyBmb3IgZGVh bGluZyB3aXRoIGNvbXByZXNzZWQgZGF0YS4gVGhlIGZpcnN0CiAgKiBwcm92aWRlcyBtb3JlIGZs ZXhpYmlsaXR5LCB1c2luZyBjYWxsYmFja3MgdG8gcmVhZC93cml0ZSBkYXRhIGZyb20gdGhlCi0g KiB1bmRlcmx5aW5nIHN0cmVhbS4gVGhlIHNlY29uZCBBUEkgaXMgYSB3cmFwcGVyIGFyb3VuZCBm b3Blbi9nem9wZW4gYW5kCisgKiB1bmRlcmx5aW5nIHN0cmVhbS4gVGhlIHNlY29uZCBBUEkgaXMg YSB3cmFwcGVyIGFyb3VuZCBmb3BlbiBhbmQKICAqIGZyaWVuZHMsIHByb3ZpZGluZyBhbiBpbnRl cmZhY2Ugc2ltaWxhciB0byB0aG9zZSwgYnV0IGFic3RyYWN0cyBhd2F5Ci0gKiB0aGUgcG9zc2li bGUgY29tcHJlc3Npb24uIEJvdGggQVBJcyB1c2UgbGlieiBmb3IgdGhlIGNvbXByZXNzaW9uLCBi dXQKLSAqIHRoZSBzZWNvbmQgQVBJIHVzZXMgZ3ppcCBoZWFkZXJzLCBzbyB0aGUgcmVzdWx0aW5n IGZpbGVzIGNhbiBiZSBlYXNpbHkKLSAqIG1hbmlwdWxhdGVkIHdpdGggdGhlIGd6aXAgdXRpbGl0 eS4KKyAqIHRoZSBwb3NzaWJsZSBjb21wcmVzc2lvbi4gVGhlIHNlY29uZCBBUEkgaXMgYWltZWQg Zm9yIHRoZSByZXN1bHRpbmcKKyAqIGZpbGVzIHRvIGJlIGVhc2lseSBtYW5pcHVsYXRlZCB3aXRo IGFuIGV4dGVybmFsIGNvbXByZXNzaW9uIHV0aWxpdHkKKyAqIHByb2dyYW0uCiAgKgogICogQ29t cHJlc3NvciBBUEkKICAqIC0tLS0tLS0tLS0tLS0tCiAgKgogICoJVGhlIGludGVyZmFjZSBmb3Ig d3JpdGluZyB0byBhbiBhcmNoaXZlIGNvbnNpc3RzIG9mIHRocmVlIGZ1bmN0aW9uczoKLSAqCUFs bG9jYXRlQ29tcHJlc3NvciwgV3JpdGVEYXRhVG9BcmNoaXZlIGFuZCBFbmRDb21wcmVzc29yLiBG aXJzdCB5b3UgY2FsbAotICoJQWxsb2NhdGVDb21wcmVzc29yLCB0aGVuIHdyaXRlIGFsbCB0aGUg ZGF0YSBieSBjYWxsaW5nIFdyaXRlRGF0YVRvQXJjaGl2ZQotICoJYXMgbWFueSB0aW1lcyBhcyBu ZWVkZWQsIGFuZCBmaW5hbGx5IEVuZENvbXByZXNzb3IuIFdyaXRlRGF0YVRvQXJjaGl2ZQotICoJ YW5kIEVuZENvbXByZXNzb3Igd2lsbCBjYWxsIHRoZSBXcml0ZUZ1bmMgdGhhdCB3YXMgcHJvdmlk ZWQgdG8KLSAqCUFsbG9jYXRlQ29tcHJlc3NvciBmb3IgZWFjaCBjaHVuayBvZiBjb21wcmVzc2Vk IGRhdGEuCisgKglBbGxvY2F0ZUNvbXByZXNzb3IsIHdyaXRlRGF0YSwgYW5kIEVuZENvbXByZXNz b3IuIEZpcnN0IHlvdSBjYWxsCisgKglBbGxvY2F0ZUNvbXByZXNzb3IsIHRoZW4gd3JpdGUgYWxs IHRoZSBkYXRhIGJ5IGNhbGxpbmcgd3JpdGVEYXRhIGFzIG1hbnkKKyAqCXRpbWVzIGFzIG5lZWRl ZCwgYW5kIGZpbmFsbHkgRW5kQ29tcHJlc3Nvci4gd3JpdGVEYXRhIHdpbGwgY2FsbCB0aGUKKyAq CVdyaXRlRnVuYyB0aGF0IHdhcyBwcm92aWRlZCB0byBBbGxvY2F0ZUNvbXByZXNzb3IgZm9yIGVh Y2ggY2h1bmsgb2YKKyAqCWNvbXByZXNzZWQgZGF0YS4KICAqCi0gKglUaGUgaW50ZXJmYWNlIGZv ciByZWFkaW5nIGFuIGFyY2hpdmUgY29uc2lzdHMgb2YganVzdCBvbmUgZnVuY3Rpb246Ci0gKglS ZWFkRGF0YUZyb21BcmNoaXZlLiBSZWFkRGF0YUZyb21BcmNoaXZlIHJlYWRzIHRoZSB3aG9sZSBj b21wcmVzc2VkIGlucHV0Ci0gKglzdHJlYW0sIGJ5IHJlcGVhdGVkbHkgY2FsbGluZyB0aGUgZ2l2 ZW4gUmVhZEZ1bmMuIFJlYWRGdW5jIHJldHVybnMgdGhlCi0gKgljb21wcmVzc2VkIGRhdGEgY2h1 bmsgYXQgYSB0aW1lLCBhbmQgUmVhZERhdGFGcm9tQXJjaGl2ZSBkZWNvbXByZXNzZXMgaXQKLSAq CWFuZCBwYXNzZXMgdGhlIGRlY29tcHJlc3NlZCBkYXRhIHRvIGFod3JpdGUoKSwgdW50aWwgUmVh ZEZ1bmMgcmV0dXJucyAwCi0gKgl0byBzaWduYWwgRU9GLgotICoKLSAqCVRoZSBpbnRlcmZhY2Ug aXMgdGhlIHNhbWUgZm9yIGNvbXByZXNzZWQgYW5kIHVuY29tcHJlc3NlZCBzdHJlYW1zLgorICoJ VGhlIGludGVyZmFjZSBmb3IgcmVhZGluZyBhbiBhcmNoaXZlIGNvbnNpc3RzIG9mIHRoZSBzYW1l IHRocmVlIGZ1bmN0aW9uczoKKyAqCUFsbG9jYXRlQ29tcHJlc3NvciwgcmVhZERhdGEsIGFuZCBF bmRDb21wcmVzc29yLiBGaXJzdCB5b3UgY2FsbAorICoJQWxsb2NhdGVDb21wcmVzc29yLCB0aGVu IHJlYWQgYWxsIHRoZSBkYXRhIGJ5IGNhbGxpbmcgcmVhZERhdGEgdG8gcmVhZCB0aGUKKyAqCXdo b2xlIGNvbXByZXNzZWQgc3RyZWFtIHdoaWNoIHJlcGVhdGVkbHkgY2FsbHMgdGhlIGdpdmVuIFJl YWRGdW5jLiBSZWFkRnVuYworICoJcmV0dXJucyB0aGUgY29tcHJlc3NlZCBkYXRhIG9uZSBjaHVu ayBhdCBhIHRpbWUuIFRoZW4gcmVhZERhdGEgZGVjb21wcmVzc2VzCisgKglpdCBhbmQgcGFzc2Vz IHRoZSBkZWNvbXByZXNzZWQgZGF0YSB0byBhaHdyaXRlKCksIHVudGlsIFJlYWRGdW5jIHJldHVy bnMgMAorICoJdG8gc2lnbmFsIEVPRi4gVGhlIGludGVyZmFjZSBpcyB0aGUgc2FtZSBmb3IgY29t cHJlc3NlZCBhbmQgdW5jb21wcmVzc2VkCisgKglzdHJlYW1zLgogICoKICAqIENvbXByZXNzZWQg c3RyZWFtIEFQSQogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKLSAqCVRoZSBjb21wcmVz c2VkIHN0cmVhbSBBUEkgaXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgQyBzdGFuZGFyZCBmb3Blbigp IGFuZAotICoJbGlieidzIGd6b3BlbigpIEFQSXMuIEl0IGFsbG93cyB5b3UgdG8gdXNlIHRoZSBz YW1lIGZ1bmN0aW9ucyBmb3IKLSAqCWNvbXByZXNzZWQgYW5kIHVuY29tcHJlc3NlZCBzdHJlYW1z LiBjZm9wZW5fcmVhZCgpIGZpcnN0IHRyaWVzIHRvIG9wZW4KLSAqCXRoZSBmaWxlIHdpdGggZ2l2 ZW4gbmFtZSwgYW5kIGlmIGl0IGZhaWxzLCBpdCB0cmllcyB0byBvcGVuIHRoZSBzYW1lCi0gKglm aWxlIHdpdGggdGhlIC5neiBzdWZmaXguIGNmb3Blbl93cml0ZSgpIG9wZW5zIGEgZmlsZSBmb3Ig d3JpdGluZywgYW4KLSAqCWV4dHJhIGFyZ3VtZW50IHNwZWNpZmllcyBpZiB0aGUgZmlsZSBzaG91 bGQgYmUgY29tcHJlc3NlZCwgYW5kIGFkZHMgdGhlCi0gKgkuZ3ogc3VmZml4IHRvIHRoZSBmaWxl bmFtZSBpZiBzby4gVGhpcyBhbGxvd3MgeW91IHRvIGVhc2lseSBoYW5kbGUgYm90aAotICoJY29t cHJlc3NlZCBhbmQgdW5jb21wcmVzc2VkIGZpbGVzLgorICoJVGhlIGNvbXByZXNzZWQgc3RyZWFt IEFQSSBpcyBwcm92aWRpbmcgYSBzZXQgb2YgZnVuY3Rpb24gcG9pbnRlcnMgZm9yCisgKglvcGVu aW5nLCByZWFkaW5nLCB3cml0aW5nLCBhbmQgZmluYWxseSBjbG9zaW5nIGZpbGVzLiBUaGUgaW1w bGVtZW50ZWQKKyAqCWZ1bmN0aW9uIHBvaW50ZXJzIGFyZSBkb2N1bWVudGVkIGluIHRoZSBjb3Jy ZXNwb25kaW5nIGhlYWRlciBmaWxlIGFuZCBhcmUKKyAqCWNvbW1vbiBmb3IgYWxsIHN0cmVhbXMu IEl0IGFsbG93cyB0aGUgY2FsbGVyIHRvIHVzZSB0aGUgc2FtZSBmdW5jdGlvbnMgZm9yCisgKgli b3RoIGNvbXByZXNzZWQgYW5kIHVuY29tcHJlc3NlZCBzdHJlYW1zLgorICoKKyAqCVRoZSBpbnRl cmZhY2UgY29uc2lzdHMgb2YgdGhyZWUgZnVuY3Rpb25zLCBJbml0Q29tcHJlc3NGaWxlSGFuZGxl LAorICoJSW5pdERpc2NvdmVyQ29tcHJlc3NGaWxlSGFuZGxlLCBhbmQgRW5kQ29tcHJlc3NGaWxl SGFuZGxlLiBJZiB0aGUKKyAqCWNvbXByZXNzaW9uIGlzIGtub3duLCB0aGVuIHN0YXJ0IGJ5IGNh bGxpbmcgSW5pdENvbXByZXNzRmlsZUhhbmRsZSwKKyAqCW90aGVyd2lzZSBkaXNjb3ZlciBpdCBi eSB1c2luZyBJbml0RGlzY292ZXJDb21wcmVzc0ZpbGVIYW5kbGUuIFRoZW4gY2FsbAorICoJdGhl IGZ1bmN0aW9uIHBvaW50ZXJzIGFzIHJlcXVpcmVkIGZvciB0aGUgcmVhZC93cml0ZSBvcGVyYXRp b25zLiBGaW5hbGx5CisgKgljYWxsIEVuZENvbXByZXNzRmlsZUhhbmRsZSB0byBlbmQgdGhlIHN0 cmVhbS4KKyAqCisgKglJbml0RGlzY292ZXJDb21wcmVzc0ZpbGVIYW5kbGUgdHJpZXMgdG8gaW5m ZXIgdGhlIGNvbXByZXNzaW9uIGJ5IHRoZQorICoJZmlsZW5hbWUgc3VmZml4LiBJZiB0aGUgc3Vm Zml4IGlzIG5vdCB5ZXQga25vd24gdGhlbiBpdCB0cmllcyB0byBzaW1wbHkKKyAqCW9wZW4gdGhl IGZpbGUgYW5kIGlmIGl0IGZhaWxzLCBpdCB0cmllcyB0byBvcGVuIHRoZSBzYW1lIGZpbGUgd2l0 aCB0aGUgLmd6CisgKglzdWZmaXguCiAgKgogICogSURFTlRJRklDQVRJT04KICAqCSAgIHNyYy9i aW4vcGdfZHVtcC9jb21wcmVzc19pby5jCkBAIC01MywxMyArNjIsMTQgQEAKICAqLwogI2luY2x1 ZGUgInBvc3RncmVzX2ZlLmgiCiAKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHVu aXN0ZC5oPgorCisjaW5jbHVkZSAiY29tcHJlc3NfZ3ppcC5oIgogI2luY2x1ZGUgImNvbXByZXNz X2lvLmgiCisjaW5jbHVkZSAiY29tcHJlc3Nfbm9uZS5oIgogI2luY2x1ZGUgInBnX2JhY2t1cF91 dGlscy5oIgogCi0jaWZkZWYgSEFWRV9MSUJaCi0jaW5jbHVkZSA8emxpYi5oPgotI2VuZGlmCi0K IC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogR2VuZXJpYyBmdW5jdGlvbnMKICAqLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQpAQCAtOTcsMTEwICsxMDcsMjUgQEAgc3VwcG9ydHNfY29tcHJlc3Np b24oY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQogICot LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIAotLyogdHlwZWRlZiBhcHBlYXJzIGluIGNvbXBy ZXNzX2lvLmggKi8KLXN0cnVjdCBDb21wcmVzc29yU3RhdGUKLXsKLQlwZ19jb21wcmVzc19zcGVj aWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWM7Ci0JV3JpdGVGdW5jCXdyaXRlRjsKLQotI2lmZGVm IEhBVkVfTElCWgotCXpfc3RyZWFtcAl6cDsKLQljaGFyCSAgICp6bGliT3V0OwotCXNpemVfdAkJ emxpYk91dFNpemU7Ci0jZW5kaWYKLX07Ci0KLS8qIFJvdXRpbmVzIHRoYXQgc3VwcG9ydCB6bGli IGNvbXByZXNzZWQgZGF0YSBJL08gKi8KLSNpZmRlZiBIQVZFX0xJQloKLXN0YXRpYyB2b2lkIElu aXRDb21wcmVzc29yWmxpYihDb21wcmVzc29yU3RhdGUgKmNzLCBpbnQgbGV2ZWwpOwotc3RhdGlj IHZvaWQgRGVmbGF0ZUNvbXByZXNzb3JabGliKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29y U3RhdGUgKmNzLAotCQkJCQkJCQkgIGJvb2wgZmx1c2gpOwotc3RhdGljIHZvaWQgUmVhZERhdGFG cm9tQXJjaGl2ZVpsaWIoQXJjaGl2ZUhhbmRsZSAqQUgsIFJlYWRGdW5jIHJlYWRGKTsKLXN0YXRp YyB2b2lkIFdyaXRlRGF0YVRvQXJjaGl2ZVpsaWIoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNz b3JTdGF0ZSAqY3MsCi0JCQkJCQkJCSAgIGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBkTGVuKTsK LXN0YXRpYyB2b2lkIEVuZENvbXByZXNzb3JabGliKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVz c29yU3RhdGUgKmNzKTsKLSNlbmRpZgotCi0vKiBSb3V0aW5lcyB0aGF0IHN1cHBvcnQgdW5jb21w cmVzc2VkIGRhdGEgSS9PICovCi1zdGF0aWMgdm9pZCBSZWFkRGF0YUZyb21BcmNoaXZlTm9uZShB cmNoaXZlSGFuZGxlICpBSCwgUmVhZEZ1bmMgcmVhZEYpOwotc3RhdGljIHZvaWQgV3JpdGVEYXRh VG9BcmNoaXZlTm9uZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKLQkJ CQkJCQkJICAgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGRMZW4pOwotCi0vKiBQdWJsaWMgaW50 ZXJmYWNlIHJvdXRpbmVzICovCi0KLS8qIEFsbG9jYXRlIGEgbmV3IGNvbXByZXNzb3IgKi8KKy8q CisgKiBBbGxvY2F0ZSBhIG5ldyBjb21wcmVzc29yLgorICovCiBDb21wcmVzc29yU3RhdGUgKgog QWxsb2NhdGVDb21wcmVzc29yKGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJl c3Npb25fc3BlYywKLQkJCQkgICBXcml0ZUZ1bmMgd3JpdGVGKQorCQkJCSAgIFJlYWRGdW5jIHJl YWRGLCBXcml0ZUZ1bmMgd3JpdGVGKQogewogCUNvbXByZXNzb3JTdGF0ZSAqY3M7CiAKLSNpZm5k ZWYgSEFWRV9MSUJaCi0JaWYgKGNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBS RVNTSU9OX0daSVApCi0JCXBnX2ZhdGFsKCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29t cHJlc3Npb24gd2l0aCAlcyIsICJnemlwIik7Ci0jZW5kaWYKLQogCWNzID0gKENvbXByZXNzb3JT dGF0ZSAqKSBwZ19tYWxsb2MwKHNpemVvZihDb21wcmVzc29yU3RhdGUpKTsKKwljcy0+cmVhZEYg PSByZWFkRjsKIAljcy0+d3JpdGVGID0gd3JpdGVGOwotCWNzLT5jb21wcmVzc2lvbl9zcGVjID0g Y29tcHJlc3Npb25fc3BlYzsKLQotCS8qCi0JICogUGVyZm9ybSBjb21wcmVzc2lvbiBhbGdvcml0 aG0gc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uCi0JICovCi0jaWZkZWYgSEFWRV9MSUJaCi0JaWYg KGNzLT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQot CQlJbml0Q29tcHJlc3NvclpsaWIoY3MsIGNzLT5jb21wcmVzc2lvbl9zcGVjLmxldmVsKTsKLSNl bmRpZgotCi0JcmV0dXJuIGNzOwotfQogCi0vKgotICogUmVhZCBhbGwgY29tcHJlc3NlZCBkYXRh IGZyb20gdGhlIGlucHV0IHN0cmVhbSAodmlhIHJlYWRGKSBhbmQgcHJpbnQgaXQKLSAqIG91dCB3 aXRoIGFod3JpdGUoKS4KLSAqLwotdm9pZAotUmVhZERhdGFGcm9tQXJjaGl2ZShBcmNoaXZlSGFu ZGxlICpBSCwKLQkJCQkJY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lv bl9zcGVjLAotCQkJCQlSZWFkRnVuYyByZWFkRikKLXsKIAlpZiAoY29tcHJlc3Npb25fc3BlYy5h bGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fTk9ORSkKLQkJUmVhZERhdGFGcm9tQXJjaGl2ZU5v bmUoQUgsIHJlYWRGKTsKLQlpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09N UFJFU1NJT05fR1pJUCkKLQl7Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCVJlYWREYXRhRnJvbUFyY2hp dmVabGliKEFILCByZWFkRik7Ci0jZWxzZQotCQlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5v dCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLCAiZ3ppcCIpOwotI2VuZGlmCi0JfQotfQor CQlJbml0Q29tcHJlc3Nvck5vbmUoY3MsIGNvbXByZXNzaW9uX3NwZWMpOworCWVsc2UgaWYgKGNv bXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCisJCUluaXRD b21wcmVzc29yR3ppcChjcywgY29tcHJlc3Npb25fc3BlYyk7CiAKLS8qCi0gKiBDb21wcmVzcyBh bmQgd3JpdGUgZGF0YSB0byB0aGUgb3V0cHV0IHN0cmVhbSAodmlhIHdyaXRlRikuCi0gKi8KLXZv aWQKLVdyaXRlRGF0YVRvQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRl ICpjcywKLQkJCQkgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExlbikKLXsKLQlzd2l0Y2gg KGNzLT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSkKLQl7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJ T05fR1pJUDoKLSNpZmRlZiBIQVZFX0xJQloKLQkJCVdyaXRlRGF0YVRvQXJjaGl2ZVpsaWIoQUgs IGNzLCBkYXRhLCBkTGVuKTsKLSNlbHNlCi0JCQlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5v dCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLCAiZ3ppcCIpOwotI2VuZGlmCi0JCQlicmVh azsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgotCQkJV3JpdGVEYXRhVG9BcmNoaXZlTm9u ZShBSCwgY3MsIGRhdGEsIGRMZW4pOwotCQkJYnJlYWs7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05f TFo0OgotCQkJLyogZmFsbHRocm91Z2ggKi8KLQkJY2FzZSBQR19DT01QUkVTU0lPTl9aU1REOgot CQkJcGdfZmF0YWwoImludmFsaWQgY29tcHJlc3Npb24gbWV0aG9kIik7Ci0JCQlicmVhazsKLQl9 CisJcmV0dXJuIGNzOwogfQogCiAvKgpAQCAtMjA5LDIzMyArMTM0LDMxIEBAIFdyaXRlRGF0YVRv QXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKIHZvaWQKIEVu ZENvbXByZXNzb3IoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpCiB7Ci0j aWZkZWYgSEFWRV9MSUJaCi0JaWYgKGNzLT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQ R19DT01QUkVTU0lPTl9HWklQKQotCQlFbmRDb21wcmVzc29yWmxpYihBSCwgY3MpOwotI2VuZGlm Ci0JZnJlZShjcyk7Ci19Ci0KLS8qIFByaXZhdGUgcm91dGluZXMsIHNwZWNpZmljIHRvIGVhY2gg Y29tcHJlc3Npb24gbWV0aG9kLiAqLwotCi0jaWZkZWYgSEFWRV9MSUJaCi0vKgotICogRnVuY3Rp b25zIGZvciB6bGliIGNvbXByZXNzZWQgb3V0cHV0LgotICovCi0KLXN0YXRpYyB2b2lkCi1Jbml0 Q29tcHJlc3NvclpsaWIoQ29tcHJlc3NvclN0YXRlICpjcywgaW50IGxldmVsKQotewotCXpfc3Ry ZWFtcAl6cDsKLQotCXpwID0gY3MtPnpwID0gKHpfc3RyZWFtcCkgcGdfbWFsbG9jKHNpemVvZih6 X3N0cmVhbSkpOwotCXpwLT56YWxsb2MgPSBaX05VTEw7Ci0JenAtPnpmcmVlID0gWl9OVUxMOwot CXpwLT5vcGFxdWUgPSBaX05VTEw7Ci0KLQkvKgotCSAqIHpsaWJPdXRTaXplIGlzIHRoZSBidWZm ZXIgc2l6ZSB3ZSB0ZWxsIHpsaWIgaXQgY2FuIG91dHB1dCB0by4gIFdlCi0JICogYWN0dWFsbHkg YWxsb2NhdGUgb25lIGV4dHJhIGJ5dGUgYmVjYXVzZSBzb21lIHJvdXRpbmVzIHdhbnQgdG8gYXBw ZW5kIGEKLQkgKiB0cmFpbGluZyB6ZXJvIGJ5dGUgdG8gdGhlIHpsaWIgb3V0cHV0LgotCSAqLwot CWNzLT56bGliT3V0ID0gKGNoYXIgKikgcGdfbWFsbG9jKFpMSUJfT1VUX1NJWkUgKyAxKTsKLQlj cy0+emxpYk91dFNpemUgPSBaTElCX09VVF9TSVpFOwotCi0JaWYgKGRlZmxhdGVJbml0KHpwLCBs ZXZlbCkgIT0gWl9PSykKLQkJcGdfZmF0YWwoImNvdWxkIG5vdCBpbml0aWFsaXplIGNvbXByZXNz aW9uIGxpYnJhcnk6ICVzIiwKLQkJCQkgenAtPm1zZyk7Ci0KLQkvKiBKdXN0IGJlIHBhcmFub2lk IC0gbWF5YmUgRW5kIGlzIGNhbGxlZCBhZnRlciBTdGFydCwgd2l0aCBubyBXcml0ZSAqLwotCXpw LT5uZXh0X291dCA9ICh2b2lkICopIGNzLT56bGliT3V0OwotCXpwLT5hdmFpbF9vdXQgPSBjcy0+ emxpYk91dFNpemU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1FbmRDb21wcmVzc29yWmxpYihBcmNoaXZl SGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcykKLXsKLQl6X3N0cmVhbXAJenAgPSBjcy0+ enA7Ci0KLQl6cC0+bmV4dF9pbiA9IE5VTEw7Ci0JenAtPmF2YWlsX2luID0gMDsKLQotCS8qIEZs dXNoIGFueSByZW1haW5pbmcgZGF0YSBmcm9tIHpsaWIgYnVmZmVyICovCi0JRGVmbGF0ZUNvbXBy ZXNzb3JabGliKEFILCBjcywgdHJ1ZSk7Ci0KLQlpZiAoZGVmbGF0ZUVuZCh6cCkgIT0gWl9PSykK LQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBjb21wcmVzc2lvbiBzdHJlYW06ICVzIiwgenAt Pm1zZyk7Ci0KLQlmcmVlKGNzLT56bGliT3V0KTsKLQlmcmVlKGNzLT56cCk7Ci19Ci0KLXN0YXRp YyB2b2lkCi1EZWZsYXRlQ29tcHJlc3NvclpsaWIoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNz b3JTdGF0ZSAqY3MsIGJvb2wgZmx1c2gpCi17Ci0Jel9zdHJlYW1wCXpwID0gY3MtPnpwOwotCWNo YXIJICAgKm91dCA9IGNzLT56bGliT3V0OwotCWludAkJCXJlcyA9IFpfT0s7Ci0KLQl3aGlsZSAo Y3MtPnpwLT5hdmFpbF9pbiAhPSAwIHx8IGZsdXNoKQotCXsKLQkJcmVzID0gZGVmbGF0ZSh6cCwg Zmx1c2ggPyBaX0ZJTklTSCA6IFpfTk9fRkxVU0gpOwotCQlpZiAocmVzID09IFpfU1RSRUFNX0VS Uk9SKQotCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb21wcmVzcyBkYXRhOiAlcyIsIHpwLT5tc2cp OwotCQlpZiAoKGZsdXNoICYmICh6cC0+YXZhaWxfb3V0IDwgY3MtPnpsaWJPdXRTaXplKSkKLQkJ CXx8ICh6cC0+YXZhaWxfb3V0ID09IDApCi0JCQl8fCAoenAtPmF2YWlsX2luICE9IDApCi0JCQkp Ci0JCXsKLQkJCS8qCi0JCQkgKiBFeHRyYSBwYXJhbm9pYTogYXZvaWQgemVyby1sZW5ndGggY2h1 bmtzLCBzaW5jZSBhIHplcm8gbGVuZ3RoCi0JCQkgKiBjaHVuayBpcyB0aGUgRU9GIG1hcmtlciBp biB0aGUgY3VzdG9tIGZvcm1hdC4gVGhpcyBzaG91bGQgbmV2ZXIKLQkJCSAqIGhhcHBlbiBidXQu Li4KLQkJCSAqLwotCQkJaWYgKHpwLT5hdmFpbF9vdXQgPCBjcy0+emxpYk91dFNpemUpCi0JCQl7 Ci0JCQkJLyoKLQkJCQkgKiBBbnkgd3JpdGUgZnVuY3Rpb24gc2hvdWxkIGRvIGl0cyBvd24gZXJy b3IgY2hlY2tpbmcgYnV0IHRvCi0JCQkJICogbWFrZSBzdXJlIHdlIGRvIGEgY2hlY2sgaGVyZSBh cyB3ZWxsLi4uCi0JCQkJICovCi0JCQkJc2l6ZV90CQlsZW4gPSBjcy0+emxpYk91dFNpemUgLSB6 cC0+YXZhaWxfb3V0OwotCi0JCQkJY3MtPndyaXRlRihBSCwgb3V0LCBsZW4pOwotCQkJfQotCQkJ enAtPm5leHRfb3V0ID0gKHZvaWQgKikgb3V0OwotCQkJenAtPmF2YWlsX291dCA9IGNzLT56bGli T3V0U2l6ZTsKLQkJfQotCi0JCWlmIChyZXMgPT0gWl9TVFJFQU1fRU5EKQotCQkJYnJlYWs7Ci0J fQotfQotCi1zdGF0aWMgdm9pZAotV3JpdGVEYXRhVG9BcmNoaXZlWmxpYihBcmNoaXZlSGFuZGxl ICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKLQkJCQkJICAgY29uc3QgY2hhciAqZGF0YSwgc2l6 ZV90IGRMZW4pCi17Ci0JY3MtPnpwLT5uZXh0X2luID0gKHZvaWQgKikgdW5jb25zdGlmeShjaGFy ICosIGRhdGEpOwotCWNzLT56cC0+YXZhaWxfaW4gPSBkTGVuOwotCURlZmxhdGVDb21wcmVzc29y WmxpYihBSCwgY3MsIGZhbHNlKTsKLX0KLQotc3RhdGljIHZvaWQKLVJlYWREYXRhRnJvbUFyY2hp dmVabGliKEFyY2hpdmVIYW5kbGUgKkFILCBSZWFkRnVuYyByZWFkRikKLXsKLQl6X3N0cmVhbXAJ enA7Ci0JY2hhcgkgICAqb3V0OwotCWludAkJCXJlcyA9IFpfT0s7Ci0Jc2l6ZV90CQljbnQ7Ci0J Y2hhcgkgICAqYnVmOwotCXNpemVfdAkJYnVmbGVuOwotCi0JenAgPSAoel9zdHJlYW1wKSBwZ19t YWxsb2Moc2l6ZW9mKHpfc3RyZWFtKSk7Ci0JenAtPnphbGxvYyA9IFpfTlVMTDsKLQl6cC0+emZy ZWUgPSBaX05VTEw7Ci0JenAtPm9wYXF1ZSA9IFpfTlVMTDsKLQotCWJ1ZiA9IHBnX21hbGxvYyha TElCX0lOX1NJWkUpOwotCWJ1ZmxlbiA9IFpMSUJfSU5fU0laRTsKLQotCW91dCA9IHBnX21hbGxv YyhaTElCX09VVF9TSVpFICsgMSk7Ci0KLQlpZiAoaW5mbGF0ZUluaXQoenApICE9IFpfT0spCi0J CXBnX2ZhdGFsKCJjb3VsZCBub3QgaW5pdGlhbGl6ZSBjb21wcmVzc2lvbiBsaWJyYXJ5OiAlcyIs Ci0JCQkJIHpwLT5tc2cpOwotCi0JLyogbm8gbWluaW1hbCBjaHVuayBzaXplIGZvciB6bGliICov Ci0Jd2hpbGUgKChjbnQgPSByZWFkRihBSCwgJmJ1ZiwgJmJ1ZmxlbikpKQotCXsKLQkJenAtPm5l eHRfaW4gPSAodm9pZCAqKSBidWY7Ci0JCXpwLT5hdmFpbF9pbiA9IGNudDsKLQotCQl3aGlsZSAo enAtPmF2YWlsX2luID4gMCkKLQkJewotCQkJenAtPm5leHRfb3V0ID0gKHZvaWQgKikgb3V0Owot CQkJenAtPmF2YWlsX291dCA9IFpMSUJfT1VUX1NJWkU7Ci0KLQkJCXJlcyA9IGluZmxhdGUoenAs IDApOwotCQkJaWYgKHJlcyAhPSBaX09LICYmIHJlcyAhPSBaX1NUUkVBTV9FTkQpCi0JCQkJcGdf ZmF0YWwoImNvdWxkIG5vdCB1bmNvbXByZXNzIGRhdGE6ICVzIiwgenAtPm1zZyk7Ci0KLQkJCW91 dFtaTElCX09VVF9TSVpFIC0genAtPmF2YWlsX291dF0gPSAnXDAnOwotCQkJYWh3cml0ZShvdXQs IDEsIFpMSUJfT1VUX1NJWkUgLSB6cC0+YXZhaWxfb3V0LCBBSCk7Ci0JCX0KLQl9Ci0KLQl6cC0+ bmV4dF9pbiA9IE5VTEw7Ci0JenAtPmF2YWlsX2luID0gMDsKLQl3aGlsZSAocmVzICE9IFpfU1RS RUFNX0VORCkKLQl7Ci0JCXpwLT5uZXh0X291dCA9ICh2b2lkICopIG91dDsKLQkJenAtPmF2YWls X291dCA9IFpMSUJfT1VUX1NJWkU7Ci0JCXJlcyA9IGluZmxhdGUoenAsIDApOwotCQlpZiAocmVz ICE9IFpfT0sgJiYgcmVzICE9IFpfU1RSRUFNX0VORCkKLQkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qg dW5jb21wcmVzcyBkYXRhOiAlcyIsIHpwLT5tc2cpOwotCi0JCW91dFtaTElCX09VVF9TSVpFIC0g enAtPmF2YWlsX291dF0gPSAnXDAnOwotCQlhaHdyaXRlKG91dCwgMSwgWkxJQl9PVVRfU0laRSAt IHpwLT5hdmFpbF9vdXQsIEFIKTsKLQl9Ci0KLQlpZiAoaW5mbGF0ZUVuZCh6cCkgIT0gWl9PSykK LQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBjb21wcmVzc2lvbiBsaWJyYXJ5OiAlcyIsIHpw LT5tc2cpOwotCi0JZnJlZShidWYpOwotCWZyZWUob3V0KTsKLQlmcmVlKHpwKTsKLX0KLSNlbmRp ZgkJCQkJCQkvKiBIQVZFX0xJQlogKi8KLQotCi0vKgotICogRnVuY3Rpb25zIGZvciB1bmNvbXBy ZXNzZWQgb3V0cHV0LgotICovCi0KLXN0YXRpYyB2b2lkCi1SZWFkRGF0YUZyb21BcmNoaXZlTm9u ZShBcmNoaXZlSGFuZGxlICpBSCwgUmVhZEZ1bmMgcmVhZEYpCi17Ci0Jc2l6ZV90CQljbnQ7Ci0J Y2hhcgkgICAqYnVmOwotCXNpemVfdAkJYnVmbGVuOwotCi0JYnVmID0gcGdfbWFsbG9jKFpMSUJf T1VUX1NJWkUpOwotCWJ1ZmxlbiA9IFpMSUJfT1VUX1NJWkU7Ci0KLQl3aGlsZSAoKGNudCA9IHJl YWRGKEFILCAmYnVmLCAmYnVmbGVuKSkpCi0JewotCQlhaHdyaXRlKGJ1ZiwgMSwgY250LCBBSCk7 Ci0JfQotCi0JZnJlZShidWYpOwotfQotCi1zdGF0aWMgdm9pZAotV3JpdGVEYXRhVG9BcmNoaXZl Tm9uZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKLQkJCQkJICAgY29u c3QgY2hhciAqZGF0YSwgc2l6ZV90IGRMZW4pCi17Ci0JY3MtPndyaXRlRihBSCwgZGF0YSwgZExl bik7CisJY3MtPmVuZChBSCwgY3MpOworCXBnX2ZyZWUoY3MpOwogfQogCi0KIC8qLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQogICogQ29tcHJlc3NlZCBzdHJlYW0gQVBJCiAgKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KICAqLwogCiAvKgotICogY2ZwIHJlcHJlc2VudHMgYW4gb3BlbiBzdHJlYW0sIHdy YXBwaW5nIHRoZSB1bmRlcmx5aW5nIEZJTEUgb3IgZ3pGaWxlCi0gKiBwb2ludGVyLiBUaGlzIGlz IG9wYXF1ZSB0byB0aGUgY2FsbGVycy4KKyAqIFByaXZhdGUgcm91dGluZXMKICAqLwotc3RydWN0 IGNmcAorc3RhdGljIGludAoraGFzU3VmZml4KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBj aGFyICpzdWZmaXgpCiB7Ci0JRklMRQkgICAqdW5jb21wcmVzc2VkZnA7Ci0jaWZkZWYgSEFWRV9M SUJaCi0JZ3pGaWxlCQljb21wcmVzc2VkZnA7Ci0jZW5kaWYKLX07CisJaW50CQkJZmlsZW5hbWVs ZW4gPSBzdHJsZW4oZmlsZW5hbWUpOworCWludAkJCXN1ZmZpeGxlbiA9IHN0cmxlbihzdWZmaXgp OwogCi0jaWZkZWYgSEFWRV9MSUJaCi1zdGF0aWMgaW50CWhhc1N1ZmZpeChjb25zdCBjaGFyICpm aWxlbmFtZSwgY29uc3QgY2hhciAqc3VmZml4KTsKLSNlbmRpZgorCWlmIChmaWxlbmFtZWxlbiA8 IHN1ZmZpeGxlbikKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gbWVtY21wKCZmaWxlbmFtZVtmaWxl bmFtZWxlbiAtIHN1ZmZpeGxlbl0sCisJCQkJICBzdWZmaXgsCisJCQkJICBzdWZmaXhsZW4pID09 IDA7Cit9CiAKIC8qIGZyZWUoKSB3aXRob3V0IGNoYW5naW5nIGVycm5vOyB1c2VmdWwgaW4gc2V2 ZXJhbCBwbGFjZXMgYmVsb3cgKi8KIHN0YXRpYyB2b2lkCkBAIC00NDgsMzI0ICsxNzEsMTAyIEBA IGZyZWVfa2VlcF9lcnJubyh2b2lkICpwKQogfQogCiAvKgotICogT3BlbiBhIGZpbGUgZm9yIHJl YWRpbmcuICdwYXRoJyBpcyB0aGUgZmlsZSB0byBvcGVuLCBhbmQgJ21vZGUnIHNob3VsZAotICog YmUgZWl0aGVyICJyIiBvciAicmIiLgotICoKLSAqIElmIHRoZSBmaWxlIGF0ICdwYXRoJyBkb2Vz IG5vdCBleGlzdCwgd2UgYXBwZW5kIHRoZSAiLmd6IiBzdWZmaXggKGlmICdwYXRoJwotICogZG9l c24ndCBhbHJlYWR5IGhhdmUgaXQpIGFuZCB0cnkgYWdhaW4uIFNvIGlmIHlvdSBwYXNzICJmb28i IGFzICdwYXRoJywKLSAqIHRoaXMgd2lsbCBvcGVuIGVpdGhlciAiZm9vIiBvciAiZm9vLmd6Ii4K LSAqCi0gKiBPbiBmYWlsdXJlLCByZXR1cm4gTlVMTCB3aXRoIGFuIGVycm9yIGNvZGUgaW4gZXJy bm8uCi0gKi8KLWNmcCAqCi1jZm9wZW5fcmVhZChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFy ICptb2RlKQotewotCWNmcAkJICAgKmZwOwotCi0JcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBj b21wcmVzc2lvbl9zcGVjID0gezB9OwotCi0jaWZkZWYgSEFWRV9MSUJaCi0JaWYgKGhhc1N1ZmZp eChwYXRoLCAiLmd6IikpCi0JewotCQljb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9IFBHX0NP TVBSRVNTSU9OX0daSVA7Ci0JCWZwID0gY2ZvcGVuKHBhdGgsIG1vZGUsIGNvbXByZXNzaW9uX3Nw ZWMpOwotCX0KLQllbHNlCi0jZW5kaWYKLQl7Ci0JCWNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGht ID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKLQkJZnAgPSBjZm9wZW4ocGF0aCwgbW9kZSwgY29tcHJl c3Npb25fc3BlYyk7Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCWlmIChmcCA9PSBOVUxMKQotCQl7Ci0J CQljaGFyCSAgICpmbmFtZTsKLQotCQkJZm5hbWUgPSBwc3ByaW50ZigiJXMuZ3oiLCBwYXRoKTsK LQkJCWNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fR1pJUDsKLQkJ CWZwID0gY2ZvcGVuKGZuYW1lLCBtb2RlLCBjb21wcmVzc2lvbl9zcGVjKTsKLQkJCWZyZWVfa2Vl cF9lcnJubyhmbmFtZSk7Ci0JCX0KLSNlbmRpZgotCX0KLQlyZXR1cm4gZnA7Ci19Ci0KLS8qCi0g KiBPcGVuIGEgZmlsZSBmb3Igd3JpdGluZy4gJ3BhdGgnIGluZGljYXRlcyB0aGUgcGF0aCBuYW1l LCBhbmQgJ21vZGUnIG11c3QKLSAqIGJlIGEgZmlsZW1vZGUgYXMgYWNjZXB0ZWQgYnkgZm9wZW4o KSBhbmQgZ3pvcGVuKCkgdGhhdCBpbmRpY2F0ZXMgd3JpdGluZwotICogKCJ3IiwgIndiIiwgImEi LCBvciAiYWIiKS4KLSAqCi0gKiBJZiAnY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0nIGlzIEda SVAsIGEgZ3ppcCBjb21wcmVzc2VkIHN0cmVhbSBpcyBvcGVuZWQsCi0gKiBhbmQgJ2NvbXByZXNz aW9uX3NwZWMubGV2ZWwnIHVzZWQuIFRoZSAiLmd6IiBzdWZmaXggaXMgYXV0b21hdGljYWxseSBh ZGRlZCB0bwotICogJ3BhdGgnIGluIHRoYXQgY2FzZS4KLSAqCi0gKiBPbiBmYWlsdXJlLCByZXR1 cm4gTlVMTCB3aXRoIGFuIGVycm9yIGNvZGUgaW4gZXJybm8uCisgKiBQdWJsaWMgaW50ZXJmYWNl CiAgKi8KLWNmcCAqCi1jZm9wZW5fd3JpdGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAq bW9kZSwKLQkJCSBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3Nw ZWMpCi17Ci0JY2ZwCQkgICAqZnA7Ci0KLQlpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0g PT0gUEdfQ09NUFJFU1NJT05fTk9ORSkKLQkJZnAgPSBjZm9wZW4ocGF0aCwgbW9kZSwgY29tcHJl c3Npb25fc3BlYyk7Ci0JZWxzZQotCXsKLSNpZmRlZiBIQVZFX0xJQloKLQkJY2hhcgkgICAqZm5h bWU7Ci0KLQkJZm5hbWUgPSBwc3ByaW50ZigiJXMuZ3oiLCBwYXRoKTsKLQkJZnAgPSBjZm9wZW4o Zm5hbWUsIG1vZGUsIGNvbXByZXNzaW9uX3NwZWMpOwotCQlmcmVlX2tlZXBfZXJybm8oZm5hbWUp OwotI2Vsc2UKLQkJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVz c2lvbiB3aXRoICVzIiwgImd6aXAiKTsKLQkJZnAgPSBOVUxMOwkJCQkvKiBrZWVwIGNvbXBpbGVy IHF1aWV0ICovCi0jZW5kaWYKLQl9Ci0JcmV0dXJuIGZwOwotfQogCiAvKgotICogVGhpcyBpcyB0 aGUgd29ya2hvcnNlIGZvciBjZm9wZW4oKSBvciBjZmRvcGVuKCkuIEl0IG9wZW5zIGZpbGUgJ3Bh dGgnIG9yCi0gKiBhc3NvY2lhdGVzIGEgc3RyZWFtICdmZCcsIGlmICdmZCcgaXMgYSB2YWxpZCBk ZXNjcmlwdG9yLCBpbiAnbW9kZScuIFRoZQotICogZGVzY3JpcHRvciBpcyBub3QgZHVwJ2VkIGFu ZCBpdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZG8gc28uCi0gKiBUaGUgY2Fs bGVyIG11c3QgdmVyaWZ5IHRoYXQgdGhlICdjb21wcmVzc19hbGdvcml0aG0nIGlzIHN1cHBvcnRl ZCBieSB0aGUKLSAqIGN1cnJlbnQgYnVpbGQuCi0gKgotICogT24gZmFpbHVyZSwgcmV0dXJuIE5V TEwgd2l0aCBhbiBlcnJvciBjb2RlIGluIGVycm5vLgorICogSW5pdGlhbGl6ZSBhIGNvbXByZXNz IGZpbGUgaGFuZGxlIGZvciB0aGUgc3BlY2lmaWVkIGNvbXByZXNzaW9uIGFsZ29yaXRobS4KICAq Lwotc3RhdGljIGNmcCAqCi1jZm9wZW5faW50ZXJuYWwoY29uc3QgY2hhciAqcGF0aCwgaW50IGZk LCBjb25zdCBjaGFyICptb2RlLAotCQkJCXBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJl c3Npb25fc3BlYykKK0NvbXByZXNzRmlsZUhhbmRsZSAqCitJbml0Q29tcHJlc3NGaWxlSGFuZGxl KGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKIHsKLQlj ZnAJCSAgICpmcCA9IHBnX21hbGxvYzAoc2l6ZW9mKGNmcCkpOwotCi0JaWYgKGNvbXByZXNzaW9u X3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCi0JewotI2lmZGVmIEhBVkVf TElCWgotCQlpZiAoY29tcHJlc3Npb25fc3BlYy5sZXZlbCAhPSBaX0RFRkFVTFRfQ09NUFJFU1NJ T04pCi0JCXsKLQkJCS8qIHVzZXIgaGFzIHNwZWNpZmllZCBhIGNvbXByZXNzaW9uIGxldmVsLCBz byB0ZWxsIHpsaWIgdG8gdXNlIGl0ICovCi0JCQljaGFyCQltb2RlX2NvbXByZXNzaW9uWzMyXTsK LQotCQkJc25wcmludGYobW9kZV9jb21wcmVzc2lvbiwgc2l6ZW9mKG1vZGVfY29tcHJlc3Npb24p LCAiJXMlZCIsCi0JCQkJCSBtb2RlLCBjb21wcmVzc2lvbl9zcGVjLmxldmVsKTsKLQkJCWlmIChm ZCA+PSAwKQotCQkJCWZwLT5jb21wcmVzc2VkZnAgPSBnemRvcGVuKGZkLCBtb2RlX2NvbXByZXNz aW9uKTsKLQkJCWVsc2UKLQkJCQlmcC0+Y29tcHJlc3NlZGZwID0gZ3pvcGVuKHBhdGgsIG1vZGVf Y29tcHJlc3Npb24pOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJLyogZG9uJ3Qgc3BlY2lmeSBhIGxl dmVsLCBqdXN0IHVzZSB0aGUgemxpYiBkZWZhdWx0ICovCi0JCQlpZiAoZmQgPj0gMCkKLQkJCQlm cC0+Y29tcHJlc3NlZGZwID0gZ3pkb3BlbihmZCwgbW9kZSk7Ci0JCQllbHNlCi0JCQkJZnAtPmNv bXByZXNzZWRmcCA9IGd6b3BlbihwYXRoLCBtb2RlKTsKLQkJfQorCUNvbXByZXNzRmlsZUhhbmRs ZSAqQ0ZIOwogCi0JCWlmIChmcC0+Y29tcHJlc3NlZGZwID09IE5VTEwpCi0JCXsKLQkJCWZyZWVf a2VlcF9lcnJubyhmcCk7Ci0JCQlmcCA9IE5VTEw7Ci0JCX0KLSNlbHNlCi0JCXBnX2ZhdGFsKCJ0 aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsICJnemlwIik7 Ci0jZW5kaWYKLQl9Ci0JZWxzZQotCXsKLQkJaWYgKGZkID49IDApCi0JCQlmcC0+dW5jb21wcmVz c2VkZnAgPSBmZG9wZW4oZmQsIG1vZGUpOwotCQllbHNlCi0JCQlmcC0+dW5jb21wcmVzc2VkZnAg PSBmb3BlbihwYXRoLCBtb2RlKTsKKwlDRkggPSBwZ19tYWxsb2MwKHNpemVvZihDb21wcmVzc0Zp bGVIYW5kbGUpKTsKIAotCQlpZiAoZnAtPnVuY29tcHJlc3NlZGZwID09IE5VTEwpCi0JCXsKLQkJ CWZyZWVfa2VlcF9lcnJubyhmcCk7Ci0JCQlmcCA9IE5VTEw7Ci0JCX0KLQl9CisJaWYgKGNvbXBy ZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX05PTkUpCisJCUluaXRDb21w cmVzc0ZpbGVIYW5kbGVOb25lKENGSCwgY29tcHJlc3Npb25fc3BlYyk7CisJZWxzZSBpZiAoY29t cHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKKwkJSW5pdENv bXByZXNzRmlsZUhhbmRsZUd6aXAoQ0ZILCBjb21wcmVzc2lvbl9zcGVjKTsKIAotCXJldHVybiBm cDsKKwlyZXR1cm4gQ0ZIOwogfQogCiAvKgotICogT3BlbnMgZmlsZSAncGF0aCcgaW4gJ21vZGUn IGFuZCBjb21wcmVzc2lvbiBhcyBkZWZpbmVkIGluCi0gKiBjb21wcmVzc2lvbl9zcGVjLiBUaGUg Y2FsbGVyIG11c3QgdmVyaWZ5IHRoYXQgdGhlIGNvbXByZXNzaW9uCi0gKiBpcyBzdXBwb3J0ZWQg YnkgdGhlIGN1cnJlbnQgYnVpbGQuCisgKiBPcGVuIGEgZmlsZSBmb3IgcmVhZGluZy4gJ3BhdGgn IGlzIHRoZSBmaWxlIHRvIG9wZW4sIGFuZCAnbW9kZScgc2hvdWxkCisgKiBiZSBlaXRoZXIgInIi IG9yICJyYiIuCiAgKgotICogT24gZmFpbHVyZSwgcmV0dXJuIE5VTEwgd2l0aCBhbiBlcnJvciBj b2RlIGluIGVycm5vLgotICovCi1jZnAgKgotY2ZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0 IGNoYXIgKm1vZGUsCi0JICAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVz c2lvbl9zcGVjKQotewotCXJldHVybiBjZm9wZW5faW50ZXJuYWwocGF0aCwgLTEsIG1vZGUsIGNv bXByZXNzaW9uX3NwZWMpOwotfQotCi0vKgotICogQXNzb2NpYXRlcyBhIHN0cmVhbSAnZmQnLCBp ZiAnZmQnIGlzIGEgdmFsaWQgZGVzY3JpcHRvciwgaW4gJ21vZGUnCi0gKiBhbmQgY29tcHJlc3Np b24gYXMgZGVmaW5lZCBpbiBjb21wcmVzc2lvbl9zcGVjLiBUaGUgY2FsbGVyIG11c3QKLSAqIHZl cmlmeSB0aGF0IHRoZSBjb21wcmVzc2lvbiBpcyBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgYnVp bGQuCisgKiBJZiB0aGUgZmlsZSBhdCAncGF0aCcgY29udGFpbnMgdGhlIHN1ZmZpeCBvZiBhIHN1 cHBvcnRlZCBjb21wcmVzc2lvbiBtZXRob2QsCisgKiBjdXJyZW50bHkgdGhpcyBpbmNsdWRlcyBv bmx5ICIuZ3oiLCB0aGVuIHRoaXMgY29tcHJlc3Npb24gd2lsbCBiZSB1c2VkCisgKiB0aHJvdWdo b3V0LiBPdGhlcndpc2UgdGhlIGNvbXByZXNzaW9uIHdpbGwgYmUgaW5mZXJyZWQgYnkgaXRlcmF0 aXZlbHkgdHJ5aW5nCisgKiB0byBvcGVuIHRoZSBmaWxlIGF0ICdwYXRoJywgZmlyc3QgYXMgaXMs IHRoZW4gYnkgYXBwZW5kaW5nIGtub3duIGNvbXByZXNzaW9uCisgKiBzdWZmaXhlcy4gU28gaWYg eW91IHBhc3MgImZvbyIgYXMgJ3BhdGgnLCB0aGlzIHdpbGwgb3BlbiBlaXRoZXIgImZvbyIgb3IK KyAqICJmb28uZ3oiLCB0cnlpbmcgaW4gdGhhdCBvcmRlci4KICAqCiAgKiBPbiBmYWlsdXJlLCBy ZXR1cm4gTlVMTCB3aXRoIGFuIGVycm9yIGNvZGUgaW4gZXJybm8uCiAgKi8KLWNmcCAqCi1jZmRv cGVuKGludCBmZCwgY29uc3QgY2hhciAqbW9kZSwKLQkJY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lm aWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQorQ29tcHJlc3NGaWxlSGFuZGxlICoKK0luaXREaXNj b3ZlckNvbXByZXNzRmlsZUhhbmRsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2Rl KQogewotCXJldHVybiBjZm9wZW5faW50ZXJuYWwoTlVMTCwgZmQsIG1vZGUsIGNvbXByZXNzaW9u X3NwZWMpOwotfQorCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIID0gTlVMTDsKKwlzdHJ1Y3Qgc3Rh dCBzdDsKKwljaGFyCSAgICpmbmFtZTsKKwlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXBy ZXNzaW9uX3NwZWMgPSB7MH07CiAKLWludAotY2ZyZWFkKHZvaWQgKnB0ciwgaW50IHNpemUsIGNm cCAqZnApCi17Ci0JaW50CQkJcmV0OworCWNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0gUEdf Q09NUFJFU1NJT05fTk9ORTsKIAotCWlmIChzaXplID09IDApCi0JCXJldHVybiAwOworCUFzc2Vy dChzdHJjbXAobW9kZSwgUEdfQklOQVJZX1IpID09IDApOwogCi0jaWZkZWYgSEFWRV9MSUJaCi0J aWYgKGZwLT5jb21wcmVzc2VkZnApCi0JewotCQlyZXQgPSBnenJlYWQoZnAtPmNvbXByZXNzZWRm cCwgcHRyLCBzaXplKTsKLQkJaWYgKHJldCAhPSBzaXplICYmICFnemVvZihmcC0+Y29tcHJlc3Nl ZGZwKSkKLQkJewotCQkJaW50CQkJZXJybnVtOwotCQkJY29uc3QgY2hhciAqZXJybXNnID0gZ3pl cnJvcihmcC0+Y29tcHJlc3NlZGZwLCAmZXJybnVtKTsKKwlmbmFtZSA9IHN0cmR1cChwYXRoKTsK IAotCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLAotCQkJ CQkgZXJybnVtID09IFpfRVJSTk8gPyBzdHJlcnJvcihlcnJubykgOiBlcnJtc2cpOwotCQl9Ci0J fQorCWlmIChoYXNTdWZmaXgoZm5hbWUsICIuZ3oiKSkKKwkJY29tcHJlc3Npb25fc3BlYy5hbGdv cml0aG0gPSBQR19DT01QUkVTU0lPTl9HWklQOwogCWVsc2UKLSNlbmRpZgogCXsKLQkJcmV0ID0g ZnJlYWQocHRyLCAxLCBzaXplLCBmcC0+dW5jb21wcmVzc2VkZnApOwotCQlpZiAocmV0ICE9IHNp emUgJiYgIWZlb2YoZnAtPnVuY29tcHJlc3NlZGZwKSkKLQkJCVJFQURfRVJST1JfRVhJVChmcC0+ dW5jb21wcmVzc2VkZnApOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQKLWNmd3JpdGUoY29u c3Qgdm9pZCAqcHRyLCBpbnQgc2l6ZSwgY2ZwICpmcCkKLXsKLSNpZmRlZiBIQVZFX0xJQloKLQlp ZiAoZnAtPmNvbXByZXNzZWRmcCkKLQkJcmV0dXJuIGd6d3JpdGUoZnAtPmNvbXByZXNzZWRmcCwg cHRyLCBzaXplKTsKLQllbHNlCi0jZW5kaWYKLQkJcmV0dXJuIGZ3cml0ZShwdHIsIDEsIHNpemUs IGZwLT51bmNvbXByZXNzZWRmcCk7Ci19Ci0KLWludAotY2ZnZXRjKGNmcCAqZnApCi17Ci0JaW50 CQkJcmV0OworCQlib29sCQlleGlzdHM7CiAKKwkJZXhpc3RzID0gKHN0YXQocGF0aCwgJnN0KSA9 PSAwKTsKKwkJLyogYXZvaWQgdW51c2VkIHdhcm5pbmcgaWYgaXQgaXMgbm90IGJ1aWx0IHdpdGgg Y29tcHJlc3Npb24gKi8KKwkJaWYgKGV4aXN0cykKKwkJCWNvbXByZXNzaW9uX3NwZWMuYWxnb3Jp dGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKICNpZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAtPmNv bXByZXNzZWRmcCkKLQl7Ci0JCXJldCA9IGd6Z2V0YyhmcC0+Y29tcHJlc3NlZGZwKTsKLQkJaWYg KHJldCA9PSBFT0YpCisJCWlmICghZXhpc3RzKQogCQl7Ci0JCQlpZiAoIWd6ZW9mKGZwLT5jb21w cmVzc2VkZnApKQotCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6 ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKLQkJCWVsc2UKLQkJCQlwZ19mYXRhbCgiY291bGQgbm90 IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiBlbmQgb2YgZmlsZSIpOworCQkJZnJlZV9rZWVwX2Vycm5v KGZuYW1lKTsKKwkJCWZuYW1lID0gcHNwcmludGYoIiVzLmd6IiwgcGF0aCk7CisJCQlleGlzdHMg PSAoc3RhdChmbmFtZSwgJnN0KSA9PSAwKTsKKworCQkJaWYgKGV4aXN0cykKKwkJCQljb21wcmVz c2lvbl9zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX0daSVA7CiAJCX0KLQl9Ci0JZWxz ZQogI2VuZGlmCi0JewotCQlyZXQgPSBmZ2V0YyhmcC0+dW5jb21wcmVzc2VkZnApOwotCQlpZiAo cmV0ID09IEVPRikKLQkJCVJFQURfRVJST1JfRVhJVChmcC0+dW5jb21wcmVzc2VkZnApOwogCX0K IAotCXJldHVybiByZXQ7Ci19Ci0KLWNoYXIgKgotY2ZnZXRzKGNmcCAqZnAsIGNoYXIgKmJ1Ziwg aW50IGxlbikKLXsKLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAtPmNvbXByZXNzZWRmcCkKLQkJ cmV0dXJuIGd6Z2V0cyhmcC0+Y29tcHJlc3NlZGZwLCBidWYsIGxlbik7Ci0JZWxzZQotI2VuZGlm Ci0JCXJldHVybiBmZ2V0cyhidWYsIGxlbiwgZnAtPnVuY29tcHJlc3NlZGZwKTsKLX0KLQotaW50 Ci1jZmNsb3NlKGNmcCAqZnApCi17Ci0JaW50CQkJcmVzdWx0OwotCi0JaWYgKGZwID09IE5VTEwp Ci0JewotCQllcnJubyA9IEVCQURGOwotCQlyZXR1cm4gRU9GOwotCX0KLSNpZmRlZiBIQVZFX0xJ QloKLQlpZiAoZnAtPmNvbXByZXNzZWRmcCkKKwlDRkggPSBJbml0Q29tcHJlc3NGaWxlSGFuZGxl KGNvbXByZXNzaW9uX3NwZWMpOworCWlmIChDRkgtPm9wZW5fZnVuYyhmbmFtZSwgLTEsIG1vZGUs IENGSCkpCiAJewotCQlyZXN1bHQgPSBnemNsb3NlKGZwLT5jb21wcmVzc2VkZnApOwotCQlmcC0+ Y29tcHJlc3NlZGZwID0gTlVMTDsKKwkJZnJlZV9rZWVwX2Vycm5vKENGSCk7CisJCUNGSCA9IE5V TEw7CiAJfQotCWVsc2UKLSNlbmRpZgotCXsKLQkJcmVzdWx0ID0gZmNsb3NlKGZwLT51bmNvbXBy ZXNzZWRmcCk7Ci0JCWZwLT51bmNvbXByZXNzZWRmcCA9IE5VTEw7Ci0JfQotCWZyZWVfa2VlcF9l cnJubyhmcCk7CisJZnJlZV9rZWVwX2Vycm5vKGZuYW1lKTsKIAotCXJldHVybiByZXN1bHQ7CisJ cmV0dXJuIENGSDsKIH0KIAorLyoKKyAqIENsb3NlIGFuIG9wZW4gZmlsZSBoYW5kbGUgYW5kIHJl bGVhc2UgaXRzIG1lbW9yeS4KKyAqCisgKiBPbiBmYWlsdXJlLCByZXR1cm5zIGFuIGVycm9yIHZh bHVlIGFuZCBzZXRzIGVycm5vIGFwcHJvcHJpYXRlbHkuCisgKi8KIGludAotY2Zlb2YoY2ZwICpm cCkKK0VuZENvbXByZXNzRmlsZUhhbmRsZShDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKIHsKLSNp ZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAtPmNvbXByZXNzZWRmcCkKLQkJcmV0dXJuIGd6ZW9mKGZw LT5jb21wcmVzc2VkZnApOwotCWVsc2UKLSNlbmRpZgotCQlyZXR1cm4gZmVvZihmcC0+dW5jb21w cmVzc2VkZnApOwotfQorCWludAkJCXJldCA9IDA7CiAKLWNvbnN0IGNoYXIgKgotZ2V0X2NmcF9l cnJvcihjZnAgKmZwKQotewotI2lmZGVmIEhBVkVfTElCWgotCWlmIChmcC0+Y29tcHJlc3NlZGZw KQotCXsKLQkJaW50CQkJZXJybnVtOwotCQljb25zdCBjaGFyICplcnJtc2cgPSBnemVycm9yKGZw LT5jb21wcmVzc2VkZnAsICZlcnJudW0pOworCWlmIChDRkgtPnByaXZhdGVfZGF0YSkKKwkJcmV0 ID0gQ0ZILT5jbG9zZV9mdW5jKENGSCk7CiAKLQkJaWYgKGVycm51bSAhPSBaX0VSUk5PKQotCQkJ cmV0dXJuIGVycm1zZzsKLQl9Ci0jZW5kaWYKLQlyZXR1cm4gc3RyZXJyb3IoZXJybm8pOwotfQor CWZyZWVfa2VlcF9lcnJubyhDRkgpOwogCi0jaWZkZWYgSEFWRV9MSUJaCi1zdGF0aWMgaW50Ci1o YXNTdWZmaXgoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKnN1ZmZpeCkKLXsKLQlp bnQJCQlmaWxlbmFtZWxlbiA9IHN0cmxlbihmaWxlbmFtZSk7Ci0JaW50CQkJc3VmZml4bGVuID0g c3RybGVuKHN1ZmZpeCk7Ci0KLQlpZiAoZmlsZW5hbWVsZW4gPCBzdWZmaXhsZW4pCi0JCXJldHVy biAwOwotCi0JcmV0dXJuIG1lbWNtcCgmZmlsZW5hbWVbZmlsZW5hbWVsZW4gLSBzdWZmaXhsZW5d LAotCQkJCSAgc3VmZml4LAotCQkJCSAgc3VmZml4bGVuKSA9PSAwOworCXJldHVybiByZXQ7CiB9 Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmggYi9z cmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uaAppbmRleCA4YmViMTA1OGVjLi43NGJhNWRkYTY0 IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uaAorKysgYi9zcmMvYmlu L3BnX2R1bXAvY29tcHJlc3NfaW8uaApAQCAtMjMsNTAgKzIzLDE2MCBAQAogCiBleHRlcm4gY2hh ciAqc3VwcG9ydHNfY29tcHJlc3Npb24oY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBj b21wcmVzc2lvbl9zcGVjKTsKIAotLyogUHJvdG90eXBlIGZvciBjYWxsYmFjayBmdW5jdGlvbiB0 byBXcml0ZURhdGFUb0FyY2hpdmUoKSAqLworLyoKKyAqIFByb3RvdHlwZSBmb3IgY2FsbGJhY2sg ZnVuY3Rpb24gdXNlZCBpbiB3cml0ZURhdGEoKQorICovCiB0eXBlZGVmIHZvaWQgKCpXcml0ZUZ1 bmMpIChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKIAog LyoKLSAqIFByb3RvdHlwZSBmb3IgY2FsbGJhY2sgZnVuY3Rpb24gdG8gUmVhZERhdGFGcm9tQXJj aGl2ZSgpCisgKiBQcm90b3R5cGUgZm9yIGNhbGxiYWNrIGZ1bmN0aW9uIHVzZWQgaW4gcmVhZERh dGEoKQogICoKLSAqIFJlYWREYXRhRnJvbUFyY2hpdmUgd2lsbCBjYWxsIHRoZSByZWFkIGZ1bmN0 aW9uIHJlcGVhdGVkbHksIHVudGlsIGl0Ci0gKiByZXR1cm5zIDAgdG8gc2lnbmFsIEVPRi4gUmVh ZERhdGFGcm9tQXJjaGl2ZSBwYXNzZXMgYSBidWZmZXIgdG8gcmVhZCB0aGUKLSAqIGRhdGEgaW50 byBpbiAqYnVmLCBvZiBsZW5ndGggKmJ1Zmxlbi4gSWYgdGhhdCdzIG5vdCBiaWcgZW5vdWdoIGZv ciB0aGUKLSAqIGNhbGxiYWNrIGZ1bmN0aW9uLCBpdCBjYW4gZnJlZSgpIGl0IGFuZCBtYWxsb2Mo KSBhIG5ldyBvbmUsIHJldHVybmluZyB0aGUKLSAqIG5ldyBidWZmZXIgYW5kIGl0cyBzaXplIGlu ICpidWYgYW5kICpidWZsZW4uCisgKiByZWFkRGF0YSB3aWxsIGNhbGwgdGhlIHJlYWQgZnVuY3Rp b24gcmVwZWF0ZWRseSwgdW50aWwgaXQgcmV0dXJucyAwIHRvIHNpZ25hbAorICogRU9GLiByZWFk RGF0YSBwYXNzZXMgYSBidWZmZXIgdG8gcmVhZCB0aGUgZGF0YSBpbnRvIGluICpidWYsIG9mIGxl bmd0aAorICogKmJ1Zmxlbi4gSWYgdGhhdCdzIG5vdCBiaWcgZW5vdWdoIGZvciB0aGUgY2FsbGJh Y2sgZnVuY3Rpb24sIGl0IGNhbiBmcmVlKCkgaXQKKyAqIGFuZCBtYWxsb2MoKSBhIG5ldyBvbmUs IHJldHVybmluZyB0aGUgbmV3IGJ1ZmZlciBhbmQgaXRzIHNpemUgaW4gKmJ1ZiBhbmQKKyAqICpi dWZsZW4uCiAgKgogICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgaW50byAqYnVm LCBvciAwIG9uIEVPRi4KICAqLwogdHlwZWRlZiBzaXplX3QgKCpSZWFkRnVuYykgKEFyY2hpdmVI YW5kbGUgKkFILCBjaGFyICoqYnVmLCBzaXplX3QgKmJ1Zmxlbik7CiAKLS8qIHN0cnVjdCBkZWZp bml0aW9uIGFwcGVhcnMgaW4gY29tcHJlc3NfaW8uYyAqLwogdHlwZWRlZiBzdHJ1Y3QgQ29tcHJl c3NvclN0YXRlIENvbXByZXNzb3JTdGF0ZTsKK3N0cnVjdCBDb21wcmVzc29yU3RhdGUKK3sKKwkv KgorCSAqIFJlYWQgYWxsIGNvbXByZXNzZWQgZGF0YSBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gKHZp YSByZWFkRikgYW5kIHByaW50IGl0CisJICogb3V0IHdpdGggYWh3cml0ZSgpLgorCSAqLworCXZv aWQJCSgqcmVhZERhdGEpIChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcyk7 CisKKwkvKgorCSAqIENvbXByZXNzIGFuZCB3cml0ZSBkYXRhIHRvIHRoZSBvdXRwdXQgc3RyZWFt ICh2aWEgd3JpdGVGKS4KKwkgKi8KKwl2b2lkCQkoKndyaXRlRGF0YSkgKEFyY2hpdmVIYW5kbGUg KkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAorCQkJCQkJCSAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6 ZV90IGRMZW4pOworCisJLyoKKwkgKiBFbmQgY29tcHJlc3Npb24gYW5kIGZsdXNoIGludGVybmFs IGJ1ZmZlcnMgaWYgYW55LgorCSAqLworCXZvaWQJCSgqZW5kKSAoQXJjaGl2ZUhhbmRsZSAqQUgs IENvbXByZXNzb3JTdGF0ZSAqY3MpOworCisJLyoKKwkgKiBDYWxsYmFjayBmdW5jdGlvbiB0byBy ZWFkIGZyb20gYW4gYWxyZWFkeSBwcm9jZXNzZWQgaW5wdXQgc3RyZWFtCisJICovCisJUmVhZEZ1 bmMJcmVhZEY7CisKKwkvKgorCSAqIENhbGxiYWNrIGZ1bmN0aW9uIHRvIHdyaXRlIGFuIGFscmVh ZHkgcHJvY2Vzc2VkIGNodW5rIG9mIGRhdGEuCisJICovCisJV3JpdGVGdW5jCXdyaXRlRjsKKwor CS8qCisJICogQ29tcHJlc3Npb24gc3BlY2lmaWNhdGlvbiBmb3IgdGhpcyBzdGF0ZS4KKwkgKi8K KwlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWM7CisKKwkvKgorCSAq IFByaXZhdGUgZGF0YSB0byBiZSB1c2VkIGJ5IHRoZSBjb21wcmVzc29yLgorCSAqLworCXZvaWQJ ICAgKnByaXZhdGVfZGF0YTsKK307CiAKIGV4dGVybiBDb21wcmVzc29yU3RhdGUgKkFsbG9jYXRl Q29tcHJlc3Nvcihjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3Nw ZWMsCisJCQkJCQkJCQkJICAgUmVhZEZ1bmMgcmVhZEYsCiAJCQkJCQkJCQkJICAgV3JpdGVGdW5j IHdyaXRlRik7Ci1leHRlcm4gdm9pZCBSZWFkRGF0YUZyb21BcmNoaXZlKEFyY2hpdmVIYW5kbGUg KkFILAotCQkJCQkJCQljb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9u X3NwZWMsCi0JCQkJCQkJCVJlYWRGdW5jIHJlYWRGKTsKLWV4dGVybiB2b2lkIFdyaXRlRGF0YVRv QXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKLQkJCQkJCQkg ICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExlbik7CiBleHRlcm4gdm9pZCBFbmRDb21wcmVz c29yKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKTsKIAorLyoKKyAqIENv bXByZXNzIEZpbGUgSGFuZGxlCisgKi8KK3R5cGVkZWYgc3RydWN0IENvbXByZXNzRmlsZUhhbmRs ZSBDb21wcmVzc0ZpbGVIYW5kbGU7CisKK3N0cnVjdCBDb21wcmVzc0ZpbGVIYW5kbGUKK3sKKwkv KgorCSAqIE9wZW4gYSBmaWxlIGluIG1vZGUuCisJICoKKwkgKiBQYXNzIGVpdGhlciAncGF0aCcg b3IgJ2ZkJyBkZXBlbmRpbmcgb24gd2hldGhlciBhIGZpbGVwYXRoIG9yIGEgZmlsZQorCSAqIGRl c2NyaXB0b3IgaXMgYXZhaWxhYmxlLiAnbW9kZScgY2FuIGJlIG9uZSBvZiAncicsICdyYicsICd3 JywgJ3diJywKKwkgKiAnYScsIGFuZCAnYWInLiBSZXF1aXJlcyBhbiBhbHJlYWR5IGluaXRpYWxp emVkIENvbXByZXNzRmlsZUhhbmRsZS4KKwkgKi8KKwlpbnQJCQkoKm9wZW5fZnVuYykgKGNvbnN0 IGNoYXIgKnBhdGgsIGludCBmZCwgY29uc3QgY2hhciAqbW9kZSwKKwkJCQkJCQkgIENvbXByZXNz RmlsZUhhbmRsZSAqQ0ZIKTsKKworCS8qCisJICogT3BlbiBhIGZpbGUgZm9yIHdyaXRpbmcuCisJ ICoKKwkgKiAnbW9kZScgY2FuIGJlIG9uZSBvZiAndycsICd3YicsICdhJywgYW5kICdhYicuIFJl cXVpcmVzIGFuIGFscmVhZHkKKwkgKiBpbml0aWFsaXplZCBDb21wcmVzc0ZpbGVIYW5kbGUuCisJ ICovCisJaW50CQkJKCpvcGVuX3dyaXRlX2Z1bmMpIChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBj aGFyICptb2RlLAorCQkJCQkJCQkJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpOwogCi10eXBlZGVm IHN0cnVjdCBjZnAgY2ZwOworCS8qCisJICogUmVhZCAnc2l6ZScgYnl0ZXMgb2YgZGF0YSBmcm9t IHRoZSBmaWxlIGFuZCBzdG9yZSB0aGVtIGludG8gJ3B0cicuCisJICovCisJc2l6ZV90CQkoKnJl YWRfZnVuYykgKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZI KTsKIAotZXh0ZXJuIGNmcCAqY2ZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1v ZGUsCi0JCQkJICAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9z cGVjKTsKLWV4dGVybiBjZnAgKmNmZG9wZW4oaW50IGZkLCBjb25zdCBjaGFyICptb2RlLAotCQkJ CQljb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOwotZXh0 ZXJuIGNmcCAqY2ZvcGVuX3JlYWQoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSk7 Ci1leHRlcm4gY2ZwICpjZm9wZW5fd3JpdGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAq bW9kZSwKLQkJCQkJCSBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9u X3NwZWMpOwotZXh0ZXJuIGludAljZnJlYWQodm9pZCAqcHRyLCBpbnQgc2l6ZSwgY2ZwICpmcCk7 Ci1leHRlcm4gaW50CWNmd3JpdGUoY29uc3Qgdm9pZCAqcHRyLCBpbnQgc2l6ZSwgY2ZwICpmcCk7 Ci1leHRlcm4gaW50CWNmZ2V0YyhjZnAgKmZwKTsKLWV4dGVybiBjaGFyICpjZmdldHMoY2ZwICpm cCwgY2hhciAqYnVmLCBpbnQgbGVuKTsKLWV4dGVybiBpbnQJY2ZjbG9zZShjZnAgKmZwKTsKLWV4 dGVybiBpbnQJY2Zlb2YoY2ZwICpmcCk7Ci1leHRlcm4gY29uc3QgY2hhciAqZ2V0X2NmcF9lcnJv cihjZnAgKmZwKTsKKwkvKgorCSAqIFdyaXRlICdzaXplJyBieXRlcyBvZiBkYXRhIGludG8gdGhl IGZpbGUgZnJvbSAncHRyJy4KKwkgKi8KKwlzaXplX3QJCSgqd3JpdGVfZnVuYykgKGNvbnN0IHZv aWQgKnB0ciwgc2l6ZV90IHNpemUsCisJCQkJCQkJICAgc3RydWN0IENvbXByZXNzRmlsZUhhbmRs ZSAqQ0ZIKTsKIAorCS8qCisJICogUmVhZCBhdCBtb3N0IHNpemUgLSAxIGNoYXJhY3RlcnMgZnJv bSB0aGUgY29tcHJlc3MgZmlsZSBoYW5kbGUgaW50bworCSAqICdzJy4KKwkgKgorCSAqIFN0b3Ag aWYgYW4gRU9GIG9yIGEgbmV3bGluZSBpcyBmb3VuZCBmaXJzdC4gJ3MnIGlzIGFsd2F5cyBudWxs CisJICogdGVybWluYXRlZCBhbmQgY29udGFpbnMgdGhlIG5ld2xpbmUgaWYgaXQgd2FzIGZvdW5k LgorCSAqLworCWNoYXIJICAgKigqZ2V0c19mdW5jKSAoY2hhciAqcywgaW50IHNpemUsIENvbXBy ZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKKworCS8qCisJICogUmVhZCB0aGUgbmV4dCBjaGFyYWN0ZXIg ZnJvbSB0aGUgY29tcHJlc3MgZmlsZSBoYW5kbGUgYXMgJ3Vuc2lnbmVkCisJICogY2hhcicgY2Fz dCBpbnRvICdpbnQnLgorCSAqLworCWludAkJCSgqZ2V0Y19mdW5jKSAoQ29tcHJlc3NGaWxlSGFu ZGxlICpDRkgpOworCisJLyoKKwkgKiBUZXN0IGlmIEVPRiBpcyByZWFjaGVkIGluIHRoZSBjb21w cmVzcyBmaWxlIGhhbmRsZS4KKwkgKi8KKwlpbnQJCQkoKmVvZl9mdW5jKSAoQ29tcHJlc3NGaWxl SGFuZGxlICpDRkgpOworCisJLyoKKwkgKiBDbG9zZSBhbiBvcGVuIGZpbGUgaGFuZGxlLgorCSAq LworCWludAkJCSgqY2xvc2VfZnVuYykgKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKKworCS8q CisJICogR2V0IGEgcG9pbnRlciB0byBhIHN0cmluZyB0aGF0IGRlc2NyaWJlcyBhbiBlcnJvciB0 aGF0IG9jY3VycmVkIGR1cmluZyBhCisJICogY29tcHJlc3MgZmlsZSBoYW5kbGUgb3BlcmF0aW9u LgorCSAqLworCWNvbnN0IGNoYXIgKigqZ2V0X2Vycm9yX2Z1bmMpIChDb21wcmVzc0ZpbGVIYW5k bGUgKkNGSCk7CisKKwkvKgorCSAqIENvbXByZXNzaW9uIHNwZWNpZmljYXRpb24gZm9yIHRoaXMg ZmlsZSBoYW5kbGUuCisJICovCisJcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lv bl9zcGVjOworCisJLyoKKwkgKiBQcml2YXRlIGRhdGEgdG8gYmUgdXNlZCBieSB0aGUgY29tcHJl c3Nvci4KKwkgKi8KKwl2b2lkCSAgICpwcml2YXRlX2RhdGE7Cit9OworCisvKgorICogSW5pdGlh bGl6ZSBhIGNvbXByZXNzIGZpbGUgaGFuZGxlIHdpdGggdGhlIHJlcXVlc3RlZCBjb21wcmVzc2lv bi4KKyAqLworZXh0ZXJuIENvbXByZXNzRmlsZUhhbmRsZSAqSW5pdENvbXByZXNzRmlsZUhhbmRs ZShjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOworCisv KgorICogSW5pdGlhbGl6ZSBhIGNvbXByZXNzIGZpbGUgc3RyZWFtLiBEZWZmZXIgdGhlIGNvbXBy ZXNzaW9uIGFsZ29yaXRobQorICogZnJvbSAncGF0aCcsIGVpdGhlciBieSBleGFtaW5pbmcgaXRz IHN1ZmZpeCBvciBieSBhcHBlbmRpbmcgdGhlIHN1cHBvcnRlZAorICogc3VmZml4ZXMgaW4gJ3Bh dGgnLgorICovCitleHRlcm4gQ29tcHJlc3NGaWxlSGFuZGxlICpJbml0RGlzY292ZXJDb21wcmVz c0ZpbGVIYW5kbGUoY29uc3QgY2hhciAqcGF0aCwKKwkJCQkJCQkJCQkJCQkJICBjb25zdCBjaGFy ICptb2RlKTsKK2V4dGVybiBpbnQJRW5kQ29tcHJlc3NGaWxlSGFuZGxlKENvbXByZXNzRmlsZUhh bmRsZSAqQ0ZIKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNz X25vbmUuYyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19ub25lLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZWNiY2Y0YjA0YQotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy9iaW4vcGdfZHVtcC9jb21wcmVzc19ub25lLmMKQEAgLTAsMCArMSwyMDYgQEAKKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICoKKyAqIGNvbXByZXNzX25vbmUuYworICoJIFJvdXRpbmVzIGZvciBhcmNo aXZlcnMgdG8gcmVhZCBvciB3cml0ZSBhbiB1bmNvbXByZXNzZWQgc3RyZWFtLgorICoKKyAqIFBv cnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9w bWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRo ZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICAg c3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX25vbmUuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2lu Y2x1ZGUgImNvbXByZXNzX25vbmUuaCIKKyNpbmNsdWRlICJwZ19iYWNrdXBfdXRpbHMuaCIKKwor LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDb21wcmVzc29yIEFQSQorICotLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIFByaXZhdGUgcm91dGluZXMKKyAqLworCitzdGF0 aWMgdm9pZAorUmVhZERhdGFGcm9tQXJjaGl2ZU5vbmUoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXBy ZXNzb3JTdGF0ZSAqY3MpCit7CisJc2l6ZV90CQljbnQ7CisJY2hhcgkgICAqYnVmOworCXNpemVf dAkJYnVmbGVuOworCisJYnVmID0gcGdfbWFsbG9jKFpMSUJfT1VUX1NJWkUpOworCWJ1ZmxlbiA9 IFpMSUJfT1VUX1NJWkU7CisKKwl3aGlsZSAoKGNudCA9IGNzLT5yZWFkRihBSCwgJmJ1ZiwgJmJ1 ZmxlbikpKQorCXsKKwkJYWh3cml0ZShidWYsIDEsIGNudCwgQUgpOworCX0KKworCWZyZWUoYnVm KTsKK30KKworCitzdGF0aWMgdm9pZAorV3JpdGVEYXRhVG9BcmNoaXZlTm9uZShBcmNoaXZlSGFu ZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKKwkJCQkJICAgY29uc3Qgdm9pZCAqZGF0YSwg c2l6ZV90IGRMZW4pCit7CisJY3MtPndyaXRlRihBSCwgZGF0YSwgZExlbik7Cit9CisKK3N0YXRp YyB2b2lkCitFbmRDb21wcmVzc29yTm9uZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0 YXRlICpjcykKK3sKKwkvKiBubyBvcCAqLworfQorCisvKgorICogUHVibGljIGludGVyZmFjZQor ICovCisKK3ZvaWQKK0luaXRDb21wcmVzc29yTm9uZShDb21wcmVzc29yU3RhdGUgKmNzLAorCQkJ CSAgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKK3sK Kwljcy0+cmVhZERhdGEgPSBSZWFkRGF0YUZyb21BcmNoaXZlTm9uZTsKKwljcy0+d3JpdGVEYXRh ID0gV3JpdGVEYXRhVG9BcmNoaXZlTm9uZTsKKwljcy0+ZW5kID0gRW5kQ29tcHJlc3Nvck5vbmU7 CisKKwljcy0+Y29tcHJlc3Npb25fc3BlYyA9IGNvbXByZXNzaW9uX3NwZWM7Cit9CisKKworLyot LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDb21wcmVzcyBGaWxlIEFQSQorICotLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIFByaXZhdGUgcm91dGluZXMKKyAqLworCitzdGF0 aWMgc2l6ZV90CityZWFkX25vbmUodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgQ29tcHJlc3NGaWxl SGFuZGxlICpDRkgpCit7CisJRklMRQkgICAqZnAgPSAoRklMRSAqKSBDRkgtPnByaXZhdGVfZGF0 YTsKKwlzaXplX3QJCXJldDsKKworCWlmIChzaXplID09IDApCisJCXJldHVybiAwOworCisJcmV0 ID0gZnJlYWQocHRyLCAxLCBzaXplLCBmcCk7CisJaWYgKHJldCAhPSBzaXplICYmICFmZW9mKGZw KSkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLAorCQkJ CSBzdHJlcnJvcihlcnJubykpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNpemVfdAor d3JpdGVfbm9uZShjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplLCBDb21wcmVzc0ZpbGVIYW5k bGUgKkNGSCkKK3sKKwlyZXR1cm4gZndyaXRlKHB0ciwgMSwgc2l6ZSwgKEZJTEUgKikgQ0ZILT5w cml2YXRlX2RhdGEpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitnZXRfZXJyb3Jfbm9uZShD b21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlyZXR1cm4gc3RyZXJyb3IoZXJybm8pOworfQor CitzdGF0aWMgY2hhciAqCitnZXRzX25vbmUoY2hhciAqcHRyLCBpbnQgc2l6ZSwgQ29tcHJlc3NG aWxlSGFuZGxlICpDRkgpCit7CisJcmV0dXJuIGZnZXRzKHB0ciwgc2l6ZSwgKEZJTEUgKikgQ0ZI LT5wcml2YXRlX2RhdGEpOworfQorCitzdGF0aWMgaW50CitnZXRjX25vbmUoQ29tcHJlc3NGaWxl SGFuZGxlICpDRkgpCit7CisJRklMRQkgICAqZnAgPSAoRklMRSAqKSBDRkgtPnByaXZhdGVfZGF0 YTsKKwlpbnQJCQlyZXQ7CisKKwlyZXQgPSBmZ2V0YyhmcCk7CisJaWYgKHJldCA9PSBFT0YpCisJ eworCQlpZiAoIWZlb2YoZnApKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5w dXQgZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQllbHNlCisJCQlwZ19mYXRhbCgiY291 bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiBlbmQgb2YgZmlsZSIpOworCX0KKworCXJldHVy biByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2Nsb3NlX25vbmUoQ29tcHJlc3NGaWxlSGFuZGxlICpD RkgpCit7CisJRklMRQkgICAqZnAgPSAoRklMRSAqKSBDRkgtPnByaXZhdGVfZGF0YTsKKwlpbnQJ CQlyZXQgPSAwOworCisJQ0ZILT5wcml2YXRlX2RhdGEgPSBOVUxMOworCisJaWYgKGZwKQorCQly ZXQgPSBmY2xvc2UoZnApOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorZW9mX25v bmUoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJcmV0dXJuIGZlb2YoKEZJTEUgKikgQ0ZI LT5wcml2YXRlX2RhdGEpOworfQorCitzdGF0aWMgaW50CitvcGVuX25vbmUoY29uc3QgY2hhciAq cGF0aCwgaW50IGZkLCBjb25zdCBjaGFyICptb2RlLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkK K3sKKwlBc3NlcnQoQ0ZILT5wcml2YXRlX2RhdGEgPT0gTlVMTCk7CisKKwlpZiAoZmQgPj0gMCkK KwkJQ0ZILT5wcml2YXRlX2RhdGEgPSBmZG9wZW4oZHVwKGZkKSwgbW9kZSk7CisJZWxzZQorCQlD RkgtPnByaXZhdGVfZGF0YSA9IGZvcGVuKHBhdGgsIG1vZGUpOworCisJaWYgKENGSC0+cHJpdmF0 ZV9kYXRhID09IE5VTEwpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQKK29wZW5fd3JpdGVfbm9uZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLCBD b21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlBc3NlcnQoQ0ZILT5wcml2YXRlX2RhdGEgPT0g TlVMTCk7CisKKwlDRkgtPnByaXZhdGVfZGF0YSA9IGZvcGVuKHBhdGgsIG1vZGUpOworCWlmIChD RkgtPnByaXZhdGVfZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQor CisvKgorICogUHVibGljIGludGVyZmFjZQorICovCisKK3ZvaWQKK0luaXRDb21wcmVzc0ZpbGVI YW5kbGVOb25lKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZILAorCQkJCQkJICAgY29uc3QgcGdfY29t cHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQoreworCUNGSC0+b3Blbl9mdW5j ID0gb3Blbl9ub25lOworCUNGSC0+b3Blbl93cml0ZV9mdW5jID0gb3Blbl93cml0ZV9ub25lOwor CUNGSC0+cmVhZF9mdW5jID0gcmVhZF9ub25lOworCUNGSC0+d3JpdGVfZnVuYyA9IHdyaXRlX25v bmU7CisJQ0ZILT5nZXRzX2Z1bmMgPSBnZXRzX25vbmU7CisJQ0ZILT5nZXRjX2Z1bmMgPSBnZXRj X25vbmU7CisJQ0ZILT5jbG9zZV9mdW5jID0gY2xvc2Vfbm9uZTsKKwlDRkgtPmVvZl9mdW5jID0g ZW9mX25vbmU7CisJQ0ZILT5nZXRfZXJyb3JfZnVuYyA9IGdldF9lcnJvcl9ub25lOworCisJQ0ZI LT5wcml2YXRlX2RhdGEgPSBOVUxMOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2Nv bXByZXNzX25vbmUuaCBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19ub25lLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMTQzZTU5OTgxOQotLS0gL2Rldi9udWxsCisr KyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19ub25lLmgKQEAgLTAsMCArMSwyNCBAQAorLyot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKgorICogY29tcHJlc3Nfbm9uZS5oCisgKgkgVW5jb21wcmVzc2Vk IGludGVyZmFjZSB0byBjb21wcmVzc19pby5jIHJvdXRpbmVzCisgKgorICogUG9ydGlvbnMgQ29w eXJpZ2h0IChjKSAxOTk2LTIwMjMsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNp dHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgICBzcmMvYmluL3Bn X2R1bXAvY29tcHJlc3Nfbm9uZS5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5k ZWYgX0NPTVBSRVNTX05PTkVfSF8KKyNkZWZpbmUgX0NPTVBSRVNTX05PTkVfSF8KKworI2luY2x1 ZGUgImNvbXByZXNzX2lvLmgiCisKK2V4dGVybiB2b2lkIEluaXRDb21wcmVzc29yTm9uZShDb21w cmVzc29yU3RhdGUgKmNzLAorCQkJCQkJCSAgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRp b24gY29tcHJlc3Npb25fc3BlYyk7CitleHRlcm4gdm9pZCBJbml0Q29tcHJlc3NGaWxlSGFuZGxl Tm9uZShDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCwKKwkJCQkJCQkJCSAgIGNvbnN0IHBnX2NvbXBy ZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7CisKKyNlbmRpZgkJCQkJCQkvKiBf Q09NUFJFU1NfTk9ORV9IXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1 aWxkIGIvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCmluZGV4IGNhNjJmOWEzNzQuLjg0ZTlm MGRlZmEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZAorKysgYi9zcmMv YmluL3BnX2R1bXAvbWVzb24uYnVpbGQKQEAgLTEsNyArMSw5IEBACiAjIENvcHlyaWdodCAoYykg MjAyMi0yMDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAogCiBwZ19kdW1w X2NvbW1vbl9zb3VyY2VzID0gZmlsZXMoCisgICdjb21wcmVzc19nemlwLmMnLAogICAnY29tcHJl c3NfaW8uYycsCisgICdjb21wcmVzc19ub25lLmMnLAogICAnZHVtcHV0aWxzLmMnLAogICAncGFy YWxsZWwuYycsCiAgICdwZ19iYWNrdXBfYXJjaGl2ZXIuYycsCmRpZmYgLS1naXQgYS9zcmMvYmlu L3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3Vw X2FyY2hpdmVyLmMKaW5kZXggZTAyY2UyMmRiMi4uMmJjNTY0OGVkNiAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXBfYXJjaGl2ZXIuYwpAQCAtOTUsOCArOTUsOCBAQCBzdGF0aWMgdm9pZCBkdW1wX2xv X2J1ZihBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMgdm9pZCBkdW1wVGltZXN0YW1wKEFyY2hp dmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICptc2csIHRpbWVfdCB0aW0pOwogc3RhdGljIHZvaWQg U2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwKIAkJCQkJ ICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOwotc3Rh dGljIGNmcCAqU2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCk7Ci1zdGF0aWMgdm9pZCBSZXN0 b3JlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjZnAgKnNhdmVkT3V0cHV0KTsKK3N0YXRpYyBD b21wcmVzc0ZpbGVIYW5kbGUgKlNhdmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgpOworc3RhdGlj IHZvaWQgUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NGaWxlSGFuZGxl ICpzYXZlZE91dHB1dCk7CiAKIHN0YXRpYyBpbnQJcmVzdG9yZV90b2NfZW50cnkoQXJjaGl2ZUhh bmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSwgYm9vbCBpc19wYXJhbGxlbCk7CiBzdGF0aWMgdm9pZCBy ZXN0b3JlX3RvY19lbnRyaWVzX3ByZWZvcmsoQXJjaGl2ZUhhbmRsZSAqQUgsCkBAIC0yNzIsNyAr MjcyLDcgQEAgQ2xvc2VBcmNoaXZlKEFyY2hpdmUgKkFIWCkKIAogCS8qIENsb3NlIHRoZSBvdXRw dXQgKi8KIAllcnJubyA9IDA7Ci0JcmVzID0gY2ZjbG9zZShBSC0+T0YpOworCXJlcyA9IEVuZENv bXByZXNzRmlsZUhhbmRsZShBSC0+T0YpOwogCiAJaWYgKHJlcyAhPSAwKQogCQlwZ19mYXRhbCgi Y291bGQgbm90IGNsb3NlIG91dHB1dCBmaWxlOiAlbSIpOwpAQCAtMzU0LDcgKzM1NCw3IEBAIFJl c3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCkKIAlSZXN0b3JlT3B0aW9ucyAqcm9wdCA9IEFILT5w dWJsaWMucm9wdDsKIAlib29sCQlwYXJhbGxlbF9tb2RlOwogCVRvY0VudHJ5ICAgKnRlOwotCWNm cAkJICAgKnNhdjsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKnNhdjsKIAogCUFILT5zdGFnZSA9IFNU QUdFX0lOSVRJQUxJWklORzsKIApAQCAtMTEyOCw3ICsxMTI4LDcgQEAgUHJpbnRUT0NTdW1tYXJ5 KEFyY2hpdmUgKkFIWCkKIAlUb2NFbnRyeSAgICp0ZTsKIAlwZ19jb21wcmVzc19zcGVjaWZpY2F0 aW9uIG91dF9jb21wcmVzc2lvbl9zcGVjID0gezB9OwogCXRlU2VjdGlvbgljdXJTZWN0aW9uOwot CWNmcAkJICAgKnNhdjsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKnNhdjsKIAljb25zdCBjaGFyICpm bXROYW1lOwogCWNoYXIJCXN0YW1wX3N0cls2NF07CiAKQEAgLTExNDQsOSArMTE0NCwxMCBAQCBQ cmludFRPQ1N1bW1hcnkoQXJjaGl2ZSAqQUhYKQogCQlzdHJjcHkoc3RhbXBfc3RyLCAiW3Vua25v d25dIik7CiAKIAlhaHByaW50ZihBSCwgIjtcbjsgQXJjaGl2ZSBjcmVhdGVkIGF0ICVzXG4iLCBz dGFtcF9zdHIpOwotCWFocHJpbnRmKEFILCAiOyAgICAgZGJuYW1lOiAlc1xuOyAgICAgVE9DIEVu dHJpZXM6ICVkXG47ICAgICBDb21wcmVzc2lvbjogJWRcbiIsCisJYWhwcmludGYoQUgsICI7ICAg ICBkYm5hbWU6ICVzXG47ICAgICBUT0MgRW50cmllczogJWRcbjsgICAgIENvbXByZXNzaW9uOiAl c1xuIiwKIAkJCSBzYW5pdGl6ZV9saW5lKEFILT5hcmNoZGJuYW1lLCBmYWxzZSksCi0JCQkgQUgt PnRvY0NvdW50LCBBSC0+Y29tcHJlc3Npb25fc3BlYy5sZXZlbCk7CisJCQkgQUgtPnRvY0NvdW50 LAorCQkJIGdldF9jb21wcmVzc19hbGdvcml0aG1fbmFtZShBSC0+Y29tcHJlc3Npb25fc3BlYy5h bGdvcml0aG0pKTsKIAogCXN3aXRjaCAoQUgtPmZvcm1hdCkKIAl7CkBAIC0xNTAzLDYgKzE1MDQs NyBAQCBzdGF0aWMgdm9pZAogU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFy ICpmaWxlbmFtZSwKIAkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNz aW9uX3NwZWMpCiB7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkg7CiAJY29uc3QgY2hhciAqbW9k ZTsKIAlpbnQJCQlmbiA9IC0xOwogCkBAIC0xNTI1LDMzICsxNTI3LDMyIEBAIFNldE91dHB1dChB cmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJZWxzZQogCQltb2RlID0g UEdfQklOQVJZX1c7CiAKLQlpZiAoZm4gPj0gMCkKLQkJQUgtPk9GID0gY2Zkb3BlbihkdXAoZm4p LCBtb2RlLCBjb21wcmVzc2lvbl9zcGVjKTsKLQllbHNlCi0JCUFILT5PRiA9IGNmb3BlbihmaWxl bmFtZSwgbW9kZSwgY29tcHJlc3Npb25fc3BlYyk7CisJQ0ZIID0gSW5pdENvbXByZXNzRmlsZUhh bmRsZShjb21wcmVzc2lvbl9zcGVjKTsKIAotCWlmICghQUgtPk9GKQorCWlmIChDRkgtPm9wZW5f ZnVuYyhmaWxlbmFtZSwgZm4sIG1vZGUsIENGSCkpCiAJewogCQlpZiAoZmlsZW5hbWUpCiAJCQlw Z19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsIGZpbGVuYW1l KTsKIAkJZWxzZQogCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1dCBmaWxlOiAlbSIp OwogCX0KKworCUFILT5PRiA9IENGSDsKIH0KIAotc3RhdGljIGNmcCAqCitzdGF0aWMgQ29tcHJl c3NGaWxlSGFuZGxlICoKIFNhdmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgpCiB7Ci0JcmV0dXJu IChjZnAgKikgQUgtPk9GOworCXJldHVybiAoQ29tcHJlc3NGaWxlSGFuZGxlICopIEFILT5PRjsK IH0KIAogc3RhdGljIHZvaWQKLVJlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNmcCAq c2F2ZWRPdXRwdXQpCitSZXN0b3JlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc0Zp bGVIYW5kbGUgKnNhdmVkT3V0cHV0KQogewogCWludAkJCXJlczsKIAogCWVycm5vID0gMDsKLQly ZXMgPSBjZmNsb3NlKEFILT5PRik7CisJcmVzID0gRW5kQ29tcHJlc3NGaWxlSGFuZGxlKEFILT5P Rik7CiAKIAlpZiAocmVzICE9IDApCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2Ugb3V0cHV0 IGZpbGU6ICVtIik7CkBAIC0xNjkwLDcgKzE2OTEsMTEgQEAgYWh3cml0ZShjb25zdCB2b2lkICpw dHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIEFyY2hpdmVIYW5kbGUgKkFIKQogCWVsc2Ug aWYgKFJlc3RvcmluZ1RvREIoQUgpKQogCQlieXRlc193cml0dGVuID0gRXhlY3V0ZVNxbENvbW1h bmRCdWYoJkFILT5wdWJsaWMsIChjb25zdCBjaGFyICopIHB0ciwgc2l6ZSAqIG5tZW1iKTsKIAll bHNlCi0JCWJ5dGVzX3dyaXR0ZW4gPSBjZndyaXRlKHB0ciwgc2l6ZSAqIG5tZW1iLCBBSC0+T0Yp OworCXsKKwkJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkggPSAoQ29tcHJlc3NGaWxlSGFuZGxlICop IEFILT5PRjsKKworCQlieXRlc193cml0dGVuID0gQ0ZILT53cml0ZV9mdW5jKHB0ciwgc2l6ZSAq IG5tZW1iLCBDRkgpOworCX0KIAogCWlmIChieXRlc193cml0dGVuICE9IHNpemUgKiBubWVtYikK IAkJV1JJVEVfRVJST1JfRVhJVDsKQEAgLTIwMzIsNiArMjAzNywxOCBAQCBSZWFkU3RyKEFyY2hp dmVIYW5kbGUgKkFIKQogCXJldHVybiBidWY7CiB9CiAKK3N0YXRpYyBib29sCitfZmlsZUV4aXN0 c0luRGlyZWN0b3J5KGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJ c3RydWN0IHN0YXQgc3Q7CisJY2hhcgkJYnVmW01BWFBHUEFUSF07CisKKwlpZiAoc25wcmludGYo YnVmLCBNQVhQR1BBVEgsICIlcy8lcyIsIGRpciwgZmlsZW5hbWUpID49IE1BWFBHUEFUSCkKKwkJ cGdfZmF0YWwoImRpcmVjdG9yeSBuYW1lIHRvbyBsb25nOiBcIiVzXCIiLCBkaXIpOworCisJcmV0 dXJuIChzdGF0KGJ1ZiwgJnN0KSA9PSAwICYmIFNfSVNSRUcoc3Quc3RfbW9kZSkpOworfQorCiBz dGF0aWMgaW50CiBfZGlzY292ZXJBcmNoaXZlRm9ybWF0KEFyY2hpdmVIYW5kbGUgKkFIKQogewpA QCAtMjA2MiwyNiArMjA3OSwxMiBAQCBfZGlzY292ZXJBcmNoaXZlRm9ybWF0KEFyY2hpdmVIYW5k bGUgKkFIKQogCQkgKi8KIAkJaWYgKHN0YXQoQUgtPmZTcGVjLCAmc3QpID09IDAgJiYgU19JU0RJ UihzdC5zdF9tb2RlKSkKIAkJewotCQkJY2hhcgkJYnVmW01BWFBHUEFUSF07Ci0KLQkJCWlmIChz bnByaW50ZihidWYsIE1BWFBHUEFUSCwgIiVzL3RvYy5kYXQiLCBBSC0+ZlNwZWMpID49IE1BWFBH UEFUSCkKLQkJCQlwZ19mYXRhbCgiZGlyZWN0b3J5IG5hbWUgdG9vIGxvbmc6IFwiJXNcIiIsCi0J CQkJCQkgQUgtPmZTcGVjKTsKLQkJCWlmIChzdGF0KGJ1ZiwgJnN0KSA9PSAwICYmIFNfSVNSRUco c3Quc3RfbW9kZSkpCi0JCQl7Ci0JCQkJQUgtPmZvcm1hdCA9IGFyY2hEaXJlY3Rvcnk7CisJCQlB SC0+Zm9ybWF0ID0gYXJjaERpcmVjdG9yeTsKKwkJCWlmIChfZmlsZUV4aXN0c0luRGlyZWN0b3J5 KEFILT5mU3BlYywgInRvYy5kYXQiKSkKIAkJCQlyZXR1cm4gQUgtPmZvcm1hdDsKLQkJCX0KLQog I2lmZGVmIEhBVkVfTElCWgotCQkJaWYgKHNucHJpbnRmKGJ1ZiwgTUFYUEdQQVRILCAiJXMvdG9j LmRhdC5neiIsIEFILT5mU3BlYykgPj0gTUFYUEdQQVRIKQotCQkJCXBnX2ZhdGFsKCJkaXJlY3Rv cnkgbmFtZSB0b28gbG9uZzogXCIlc1wiIiwKLQkJCQkJCSBBSC0+ZlNwZWMpOwotCQkJaWYgKHN0 YXQoYnVmLCAmc3QpID09IDAgJiYgU19JU1JFRyhzdC5zdF9tb2RlKSkKLQkJCXsKLQkJCQlBSC0+ Zm9ybWF0ID0gYXJjaERpcmVjdG9yeTsKKwkJCWlmIChfZmlsZUV4aXN0c0luRGlyZWN0b3J5KEFI LT5mU3BlYywgInRvYy5kYXQuZ3oiKSkKIAkJCQlyZXR1cm4gQUgtPmZvcm1hdDsKLQkJCX0KICNl bmRpZgogCQkJcGdfZmF0YWwoImRpcmVjdG9yeSBcIiVzXCIgZG9lcyBub3QgYXBwZWFyIHRvIGJl IGEgdmFsaWQgYXJjaGl2ZSAoXCJ0b2MuZGF0XCIgZG9lcyBub3QgZXhpc3QpIiwKIAkJCQkJIEFI LT5mU3BlYyk7CkBAIC0yMTc5LDYgKzIxODIsNyBAQCBfYWxsb2NBSChjb25zdCBjaGFyICpGaWxl U3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQsCiAJCSBTZXR1cFdvcmtlclB0clR5cGUgc2V0 dXBXb3JrZXJQdHIpCiB7CiAJQXJjaGl2ZUhhbmRsZSAqQUg7CisJQ29tcHJlc3NGaWxlSGFuZGxl ICpDRkg7CiAJcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBvdXRfY29tcHJlc3Nfc3BlYyA9IHsw fTsKIAogCXBnX2xvZ19kZWJ1ZygiYWxsb2NhdGluZyBBSCBmb3IgJXMsIGZvcm1hdCAlZCIsCkBA IC0yMjM0LDcgKzIyMzgsMTAgQEAgX2FsbG9jQUgoY29uc3QgY2hhciAqRmlsZVNwZWMsIGNvbnN0 IEFyY2hpdmVGb3JtYXQgZm10LAogCiAJLyogT3BlbiBzdGRvdXQgd2l0aCBubyBjb21wcmVzc2lv biBmb3IgQUggb3V0cHV0IGhhbmRsZSAqLwogCW91dF9jb21wcmVzc19zcGVjLmFsZ29yaXRobSA9 IFBHX0NPTVBSRVNTSU9OX05PTkU7Ci0JQUgtPk9GID0gY2Zkb3BlbihkdXAoZmlsZW5vKHN0ZG91 dCkpLCBQR19CSU5BUllfQSwgb3V0X2NvbXByZXNzX3NwZWMpOworCUNGSCA9IEluaXRDb21wcmVz c0ZpbGVIYW5kbGUob3V0X2NvbXByZXNzX3NwZWMpOworCWlmIChDRkgtPm9wZW5fZnVuYyhOVUxM LCBmaWxlbm8oc3Rkb3V0KSwgUEdfQklOQVJZX0EsIENGSCkpCisJCXBnX2ZhdGFsKCJjb3VsZCBu b3Qgb3BlbiBzdGRvdXQgZm9yIGFwcGVuZGluZzogJW0iKTsKKwlBSC0+T0YgPSBDRkg7CiAKIAkv KgogCSAqIE9uIFdpbmRvd3MsIHdlIG5lZWQgdG8gdXNlIGJpbmFyeSBtb2RlIHRvIHJlYWQvd3Jp dGUgbm9uLXRleHQgZmlsZXMsCkBAIC0zNjQ2LDEyICszNjUzLDcgQEAgV3JpdGVIZWFkKEFyY2hp dmVIYW5kbGUgKkFIKQogCUFILT5Xcml0ZUJ5dGVQdHIoQUgsIEFILT5pbnRTaXplKTsKIAlBSC0+ V3JpdGVCeXRlUHRyKEFILCBBSC0+b2ZmU2l6ZSk7CiAJQUgtPldyaXRlQnl0ZVB0cihBSCwgQUgt PmZvcm1hdCk7Ci0JLyoKLQkgKiBGb3Igbm93IHRoZSBjb21wcmVzc2lvbiB0eXBlIGlzIGltcGxp ZWQgYnkgdGhlIGxldmVsLiAgVGhpcyB3aWxsIG5lZWQKLQkgKiB0byBjaGFuZ2Ugb25jZSBzdXBw b3J0IGZvciBtb3JlIGNvbXByZXNzaW9uIGFsZ29yaXRobXMgaXMgYWRkZWQsCi0JICogcmVxdWly aW5nIGEgZm9ybWF0IGJ1bXAuCi0JICovCi0JV3JpdGVJbnQoQUgsIEFILT5jb21wcmVzc2lvbl9z cGVjLmxldmVsKTsKKwlBSC0+V3JpdGVCeXRlUHRyKEFILCBBSC0+Y29tcHJlc3Npb25fc3BlYy5h bGdvcml0aG0pOwogCWNydG0gPSAqbG9jYWx0aW1lKCZBSC0+Y3JlYXRlRGF0ZSk7CiAJV3JpdGVJ bnQoQUgsIGNydG0udG1fc2VjKTsKIAlXcml0ZUludChBSCwgY3J0bS50bV9taW4pOwpAQCAtMzcy MywxMCArMzcyNSwxMSBAQCBSZWFkSGVhZChBcmNoaXZlSGFuZGxlICpBSCkKIAkJcGdfZmF0YWwo ImV4cGVjdGVkIGZvcm1hdCAoJWQpIGRpZmZlcnMgZnJvbSBmb3JtYXQgZm91bmQgaW4gZmlsZSAo JWQpIiwKIAkJCQkgQUgtPmZvcm1hdCwgZm10KTsKIAotCS8qIEd1ZXNzIHRoZSBjb21wcmVzc2lv biBtZXRob2QgYmFzZWQgb24gdGhlIGxldmVsICovCi0JQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxn b3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKLQlpZiAoQUgtPnZlcnNpb24gPj0gS19WRVJT XzFfMikKKwlpZiAoQUgtPnZlcnNpb24gPj0gS19WRVJTXzFfMTUpCisJCUFILT5jb21wcmVzc2lv bl9zcGVjLmFsZ29yaXRobSA9IEFILT5SZWFkQnl0ZVB0cihBSCk7CisJZWxzZSBpZiAoQUgtPnZl cnNpb24gPj0gS19WRVJTXzFfMikKIAl7CisJCS8qIEd1ZXNzIHRoZSBjb21wcmVzc2lvbiBtZXRo b2QgYmFzZWQgb24gdGhlIGxldmVsICovCiAJCWlmIChBSC0+dmVyc2lvbiA8IEtfVkVSU18xXzQp CiAJCQlBSC0+Y29tcHJlc3Npb25fc3BlYy5sZXZlbCA9IEFILT5SZWFkQnl0ZVB0cihBSCk7CiAJ CWVsc2UKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaCBi L3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaAppbmRleCA0NzI1ZTQ5NzQ3Li4x OGIzOGMxN2FiIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVy LmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCkBAIC02NSwxMCAr NjUsMTMgQEAKICNkZWZpbmUgS19WRVJTXzFfMTMgTUFLRV9BUkNISVZFX1ZFUlNJT04oMSwgMTMs IDApCS8qIGNoYW5nZSBzZWFyY2hfcGF0aAogCQkJCQkJCQkJCQkJCSAqIGJlaGF2aW9yICovCiAj ZGVmaW5lIEtfVkVSU18xXzE0IE1BS0VfQVJDSElWRV9WRVJTSU9OKDEsIDE0LCAwKQkvKiBhZGQg dGFibGVhbSAqLworI2RlZmluZSBLX1ZFUlNfMV8xNSBNQUtFX0FSQ0hJVkVfVkVSU0lPTigxLCAx NSwgMCkJLyogYWRkCisJCQkJCQkJCQkJCQkJICogY29tcHJlc3Npb25fYWxnb3JpdGhtCisJCQkJ CQkJCQkJCQkJICogaW4gaGVhZGVyICovCiAKIC8qIEN1cnJlbnQgYXJjaGl2ZSB2ZXJzaW9uIG51 bWJlciAodGhlIGZvcm1hdCB3ZSBjYW4gb3V0cHV0KSAqLwogI2RlZmluZSBLX1ZFUlNfTUFKT1Ig MQotI2RlZmluZSBLX1ZFUlNfTUlOT1IgMTQKKyNkZWZpbmUgS19WRVJTX01JTk9SIDE1CiAjZGVm aW5lIEtfVkVSU19SRVYgMAogI2RlZmluZSBLX1ZFUlNfU0VMRiBNQUtFX0FSQ0hJVkVfVkVSU0lP TihLX1ZFUlNfTUFKT1IsIEtfVkVSU19NSU5PUiwgS19WRVJTX1JFVikKIApkaWZmIC0tZ2l0IGEv c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9jdXN0b20uYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXBfY3VzdG9tLmMKaW5kZXggNzUyOTM2N2E3Yi4uYjU3NmIyOTkyNCAxMDA2NDQKLS0tIGEv c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9jdXN0b20uYworKysgYi9zcmMvYmluL3BnX2R1bXAv cGdfYmFja3VwX2N1c3RvbS5jCkBAIC0yOTgsNyArMjk4LDkgQEAgX1N0YXJ0RGF0YShBcmNoaXZl SGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQogCV9Xcml0ZUJ5dGUoQUgsIEJMS19EQVRBKTsJLyog QmxvY2sgdHlwZSAqLwogCVdyaXRlSW50KEFILCB0ZS0+ZHVtcElkKTsJLyogRm9yIHNhbml0eSBj aGVjayAqLwogCi0JY3R4LT5jcyA9IEFsbG9jYXRlQ29tcHJlc3NvcihBSC0+Y29tcHJlc3Npb25f c3BlYywgX0N1c3RvbVdyaXRlRnVuYyk7CisJY3R4LT5jcyA9IEFsbG9jYXRlQ29tcHJlc3NvcihB SC0+Y29tcHJlc3Npb25fc3BlYywKKwkJCQkJCQkJIE5VTEwsCisJCQkJCQkJCSBfQ3VzdG9tV3Jp dGVGdW5jKTsKIH0KIAogLyoKQEAgLTMxNywxNSArMzE5LDE1IEBAIF9Xcml0ZURhdGEoQXJjaGl2 ZUhhbmRsZSAqQUgsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVuKQogCUNvbXByZXNzb3JT dGF0ZSAqY3MgPSBjdHgtPmNzOwogCiAJaWYgKGRMZW4gPiAwKQotCQkvKiBXcml0ZURhdGFUb0Fy Y2hpdmUoKSBpbnRlcm5hbGx5IHRocm93cyB3cml0ZSBlcnJvcnMgKi8KLQkJV3JpdGVEYXRhVG9B cmNoaXZlKEFILCBjcywgZGF0YSwgZExlbik7CisJCS8qIHdyaXRlRGF0YSgpIGludGVybmFsbHkg dGhyb3dzIHdyaXRlIGVycm9ycyAqLworCQljcy0+d3JpdGVEYXRhKEFILCBjcywgZGF0YSwgZExl bik7CiB9CiAKIC8qCiAgKiBDYWxsZWQgYnkgdGhlIGFyY2hpdmVyIHdoZW4gYSBkdW1wZXIncyAn RGF0YUR1bXBlcicgcm91dGluZSBoYXMKICAqIGZpbmlzaGVkLgogICoKLSAqIE9wdGlvbmFsLgor ICogTWFuZGF0b3J5LgogICovCiBzdGF0aWMgdm9pZAogX0VuZERhdGEoQXJjaGl2ZUhhbmRsZSAq QUgsIFRvY0VudHJ5ICp0ZSkKQEAgLTMzMyw2ICszMzUsOCBAQCBfRW5kRGF0YShBcmNoaXZlSGFu ZGxlICpBSCwgVG9jRW50cnkgKnRlKQogCWxjbENvbnRleHQgKmN0eCA9IChsY2xDb250ZXh0ICop IEFILT5mb3JtYXREYXRhOwogCiAJRW5kQ29tcHJlc3NvcihBSCwgY3R4LT5jcyk7CisJY3R4LT5j cyA9IE5VTEw7CisKIAkvKiBTZW5kIHRoZSBlbmQgbWFya2VyICovCiAJV3JpdGVJbnQoQUgsIDAp OwogfQpAQCAtMzc3LDcgKzM4MSw5IEBAIF9TdGFydExPKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NF bnRyeSAqdGUsIE9pZCBvaWQpCiAKIAlXcml0ZUludChBSCwgb2lkKTsKIAotCWN0eC0+Y3MgPSBB bGxvY2F0ZUNvbXByZXNzb3IoQUgtPmNvbXByZXNzaW9uX3NwZWMsIF9DdXN0b21Xcml0ZUZ1bmMp OworCWN0eC0+Y3MgPSBBbGxvY2F0ZUNvbXByZXNzb3IoQUgtPmNvbXByZXNzaW9uX3NwZWMsCisJ CQkJCQkJCSBOVUxMLAorCQkJCQkJCQkgX0N1c3RvbVdyaXRlRnVuYyk7CiB9CiAKIC8qCkBAIC01 NjYsNyArNTcyLDEyIEBAIF9QcmludFRvY0RhdGEoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5 ICp0ZSkKIHN0YXRpYyB2b2lkCiBfUHJpbnREYXRhKEFyY2hpdmVIYW5kbGUgKkFIKQogewotCVJl YWREYXRhRnJvbUFyY2hpdmUoQUgsIEFILT5jb21wcmVzc2lvbl9zcGVjLCBfQ3VzdG9tUmVhZEZ1 bmMpOworCUNvbXByZXNzb3JTdGF0ZSAqY3M7CisKKwljcyA9IEFsbG9jYXRlQ29tcHJlc3NvcihB SC0+Y29tcHJlc3Npb25fc3BlYywKKwkJCQkJCQlfQ3VzdG9tUmVhZEZ1bmMsIE5VTEwpOworCWNz LT5yZWFkRGF0YShBSCwgY3MpOworCUVuZENvbXByZXNzb3IoQUgsIGNzKTsKIH0KIAogc3RhdGlj IHZvaWQKQEAgLTk3Nyw3ICs5ODgsNyBAQCBfcmVhZEJsb2NrSGVhZGVyKEFyY2hpdmVIYW5kbGUg KkFILCBpbnQgKnR5cGUsIGludCAqaWQpCiB9CiAKIC8qCi0gKiBDYWxsYmFjayBmdW5jdGlvbiBm b3IgV3JpdGVEYXRhVG9BcmNoaXZlLiBXcml0ZXMgb25lIGJsb2NrIG9mIChjb21wcmVzc2VkKQor ICogQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIHdyaXRlRGF0YS4gV3JpdGVzIG9uZSBibG9jayBvZiAo Y29tcHJlc3NlZCkKICAqIGRhdGEgdG8gdGhlIGFyY2hpdmUuCiAgKi8KIHN0YXRpYyB2b2lkCkBA IC05OTIsNyArMTAwMyw3IEBAIF9DdXN0b21Xcml0ZUZ1bmMoQXJjaGl2ZUhhbmRsZSAqQUgsIGNv bnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIH0KIAogLyoKLSAqIENhbGxiYWNrIGZ1bmN0aW9u IGZvciBSZWFkRGF0YUZyb21BcmNoaXZlLiBUbyBrZWVwIHRoaW5ncyBzaW1wbGUsIHdlCisgKiBD YWxsYmFjayBmdW5jdGlvbiBmb3IgcmVhZERhdGEuIFRvIGtlZXAgdGhpbmdzIHNpbXBsZSwgd2UK ICAqIGFsd2F5cyByZWFkIG9uZSBjb21wcmVzc2VkIGJsb2NrIGF0IGEgdGltZS4KICAqLwogc3Rh dGljIHNpemVfdApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kaXJlY3Rv cnkuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfZGlyZWN0b3J5LmMKaW5kZXggNjgwMGMz Y2NlZS4uYTJmODg5OTVjMCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9k aXJlY3RvcnkuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2RpcmVjdG9yeS5jCkBA IC01MCw5ICs1MCw4IEBAIHR5cGVkZWYgc3RydWN0CiAJICovCiAJY2hhcgkgICAqZGlyZWN0b3J5 OwogCi0JY2ZwCQkgICAqZGF0YUZIOwkJCS8qIGN1cnJlbnRseSBvcGVuIGRhdGEgZmlsZSAqLwot Ci0JY2ZwCQkgICAqTE9zVG9jRkg7CQkvKiBmaWxlIGhhbmRsZSBmb3IgYmxvYnMudG9jICovCisJ Q29tcHJlc3NGaWxlSGFuZGxlICpkYXRhRkg7IC8qIGN1cnJlbnRseSBvcGVuIGRhdGEgZmlsZSAq LworCUNvbXByZXNzRmlsZUhhbmRsZSAqTE9zVG9jRkg7IC8qIGZpbGUgaGFuZGxlIGZvciBibG9i cy50b2MgKi8KIAlQYXJhbGxlbFN0YXRlICpwc3RhdGU7CQkvKiBmb3IgcGFyYWxsZWwgYmFja3Vw IC8gcmVzdG9yZSAqLwogfSBsY2xDb250ZXh0OwogCkBAIC0xOTgsMTEgKzE5NywxMSBAQCBJbml0 QXJjaGl2ZUZtdF9EaXJlY3RvcnkoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJZWxzZQogCXsJCQkJCQkJ LyogUmVhZCBNb2RlICovCiAJCWNoYXIJCWZuYW1lW01BWFBHUEFUSF07Ci0JCWNmcAkJICAgKnRv Y0ZIOworCQlDb21wcmVzc0ZpbGVIYW5kbGUgKnRvY0ZIOwogCiAJCXNldEZpbGVQYXRoKEFILCBm bmFtZSwgInRvYy5kYXQiKTsKIAotCQl0b2NGSCA9IGNmb3Blbl9yZWFkKGZuYW1lLCBQR19CSU5B UllfUik7CisJCXRvY0ZIID0gSW5pdERpc2NvdmVyQ29tcHJlc3NGaWxlSGFuZGxlKGZuYW1lLCBQ R19CSU5BUllfUik7CiAJCWlmICh0b2NGSCA9PSBOVUxMKQogCQkJcGdfZmF0YWwoImNvdWxkIG5v dCBvcGVuIGlucHV0IGZpbGUgXCIlc1wiOiAlbSIsIGZuYW1lKTsKIApAQCAtMjE4LDcgKzIxNyw3 IEBAIEluaXRBcmNoaXZlRm10X0RpcmVjdG9yeShBcmNoaXZlSGFuZGxlICpBSCkKIAkJUmVhZFRv YyhBSCk7CiAKIAkJLyogTm90aGluZyBlbHNlIGluIHRoZSBmaWxlLCBzbyBjbG9zZSBpdCBhZ2Fp bi4uLiAqLwotCQlpZiAoY2ZjbG9zZSh0b2NGSCkgIT0gMCkKKwkJaWYgKEVuZENvbXByZXNzRmls ZUhhbmRsZSh0b2NGSCkgIT0gMCkKIAkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgVE9DIGZp bGU6ICVtIik7CiAJCWN0eC0+ZGF0YUZIID0gTlVMTDsKIAl9CkBAIC0zMjcsOSArMzI2LDkgQEAg X1N0YXJ0RGF0YShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQogCiAJc2V0RmlsZVBh dGgoQUgsIGZuYW1lLCB0Y3R4LT5maWxlbmFtZSk7CiAKLQljdHgtPmRhdGFGSCA9IGNmb3Blbl93 cml0ZShmbmFtZSwgUEdfQklOQVJZX1csCi0JCQkJCQkJICAgQUgtPmNvbXByZXNzaW9uX3NwZWMp OwotCWlmIChjdHgtPmRhdGFGSCA9PSBOVUxMKQorCWN0eC0+ZGF0YUZIID0gSW5pdENvbXByZXNz RmlsZUhhbmRsZShBSC0+Y29tcHJlc3Npb25fc3BlYyk7CisKKwlpZiAoY3R4LT5kYXRhRkgtPm9w ZW5fd3JpdGVfZnVuYyhmbmFtZSwgUEdfQklOQVJZX1csIGN0eC0+ZGF0YUZIKSkKIAkJcGdfZmF0 YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1dCBmaWxlIFwiJXNcIjogJW0iLCBmbmFtZSk7CiB9CiAK QEAgLTM0NiwxNSArMzQ1LDE2IEBAIHN0YXRpYyB2b2lkCiBfV3JpdGVEYXRhKEFyY2hpdmVIYW5k bGUgKkFILCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExlbikKIHsKIAlsY2xDb250ZXh0ICpj dHggPSAobGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKKwlDb21wcmVzc0ZpbGVIYW5kbGUg KkNGSCA9IGN0eC0+ZGF0YUZIOwogCiAJZXJybm8gPSAwOwotCWlmIChkTGVuID4gMCAmJiBjZndy aXRlKGRhdGEsIGRMZW4sIGN0eC0+ZGF0YUZIKSAhPSBkTGVuKQorCWlmIChkTGVuID4gMCAmJiBD RkgtPndyaXRlX2Z1bmMoZGF0YSwgZExlbiwgQ0ZIKSAhPSBkTGVuKQogCXsKIAkJLyogaWYgd3Jp dGUgZGlkbid0IHNldCBlcnJubywgYXNzdW1lIHByb2JsZW0gaXMgbm8gZGlzayBzcGFjZSAqLwog CQlpZiAoZXJybm8gPT0gMCkKIAkJCWVycm5vID0gRU5PU1BDOwogCQlwZ19mYXRhbCgiY291bGQg bm90IHdyaXRlIHRvIG91dHB1dCBmaWxlOiAlcyIsCi0JCQkJIGdldF9jZnBfZXJyb3IoY3R4LT5k YXRhRkgpKTsKKwkJCQkgQ0ZILT5nZXRfZXJyb3JfZnVuYyhDRkgpKTsKIAl9CiB9CiAKQEAgLTM3 MCw3ICszNzAsNyBAQCBfRW5kRGF0YShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQog CWxjbENvbnRleHQgKmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOwogCiAJLyog Q2xvc2UgdGhlIGZpbGUgKi8KLQlpZiAoY2ZjbG9zZShjdHgtPmRhdGFGSCkgIT0gMCkKKwlpZiAo RW5kQ29tcHJlc3NGaWxlSGFuZGxlKGN0eC0+ZGF0YUZIKSAhPSAwKQogCQlwZ19mYXRhbCgiY291 bGQgbm90IGNsb3NlIGRhdGEgZmlsZTogJW0iKTsKIAogCWN0eC0+ZGF0YUZIID0gTlVMTDsKQEAg LTM4NSwyNiArMzg1LDI1IEBAIF9QcmludEZpbGVEYXRhKEFyY2hpdmVIYW5kbGUgKkFILCBjaGFy ICpmaWxlbmFtZSkKIAlzaXplX3QJCWNudDsKIAljaGFyCSAgICpidWY7CiAJc2l6ZV90CQlidWZs ZW47Ci0JY2ZwCQkgICAqY2ZwOworCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIOwogCiAJaWYgKCFm aWxlbmFtZSkKIAkJcmV0dXJuOwogCi0JY2ZwID0gY2ZvcGVuX3JlYWQoZmlsZW5hbWUsIFBHX0JJ TkFSWV9SKTsKLQotCWlmICghY2ZwKQorCUNGSCA9IEluaXREaXNjb3ZlckNvbXByZXNzRmlsZUhh bmRsZShmaWxlbmFtZSwgUEdfQklOQVJZX1IpOworCWlmICghQ0ZIKQogCQlwZ19mYXRhbCgiY291 bGQgbm90IG9wZW4gaW5wdXQgZmlsZSBcIiVzXCI6ICVtIiwgZmlsZW5hbWUpOwogCiAJYnVmID0g cGdfbWFsbG9jKFpMSUJfT1VUX1NJWkUpOwogCWJ1ZmxlbiA9IFpMSUJfT1VUX1NJWkU7CiAKLQl3 aGlsZSAoKGNudCA9IGNmcmVhZChidWYsIGJ1ZmxlbiwgY2ZwKSkpCisJd2hpbGUgKChjbnQgPSBD RkgtPnJlYWRfZnVuYyhidWYsIGJ1ZmxlbiwgQ0ZIKSkpCiAJewogCQlhaHdyaXRlKGJ1ZiwgMSwg Y250LCBBSCk7CiAJfQogCiAJZnJlZShidWYpOwotCWlmIChjZmNsb3NlKGNmcCkgIT0gMCkKKwlp ZiAoRW5kQ29tcHJlc3NGaWxlSGFuZGxlKENGSCkgIT0gMCkKIAkJcGdfZmF0YWwoImNvdWxkIG5v dCBjbG9zZSBkYXRhIGZpbGUgXCIlc1wiOiAlbSIsIGZpbGVuYW1lKTsKIH0KIApAQCAtNDM1LDYg KzQzNCw3IEBAIF9Mb2FkTE9zKEFyY2hpdmVIYW5kbGUgKkFIKQogewogCU9pZAkJCW9pZDsKIAls Y2xDb250ZXh0ICpjdHggPSAobGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKKwlDb21wcmVz c0ZpbGVIYW5kbGUgKkNGSDsKIAljaGFyCQl0b2NmbmFtZVtNQVhQR1BBVEhdOwogCWNoYXIJCWxp bmVbTUFYUEdQQVRIXTsKIApAQCAtNDQyLDE0ICs0NDIsMTQgQEAgX0xvYWRMT3MoQXJjaGl2ZUhh bmRsZSAqQUgpCiAKIAlzZXRGaWxlUGF0aChBSCwgdG9jZm5hbWUsICJibG9icy50b2MiKTsKIAot CWN0eC0+TE9zVG9jRkggPSBjZm9wZW5fcmVhZCh0b2NmbmFtZSwgUEdfQklOQVJZX1IpOworCUNG SCA9IGN0eC0+TE9zVG9jRkggPSBJbml0RGlzY292ZXJDb21wcmVzc0ZpbGVIYW5kbGUodG9jZm5h bWUsIFBHX0JJTkFSWV9SKTsKIAogCWlmIChjdHgtPkxPc1RvY0ZIID09IE5VTEwpCiAJCXBnX2Zh dGFsKCJjb3VsZCBub3Qgb3BlbiBsYXJnZSBvYmplY3QgVE9DIGZpbGUgXCIlc1wiIGZvciBpbnB1 dDogJW0iLAogCQkJCSB0b2NmbmFtZSk7CiAKIAkvKiBSZWFkIHRoZSBMT3MgVE9DIGZpbGUgbGlu ZS1ieS1saW5lLCBhbmQgcHJvY2VzcyBlYWNoIExPICovCi0Jd2hpbGUgKChjZmdldHMoY3R4LT5M T3NUb2NGSCwgbGluZSwgTUFYUEdQQVRIKSkgIT0gTlVMTCkKKwl3aGlsZSAoKENGSC0+Z2V0c19m dW5jKGxpbmUsIE1BWFBHUEFUSCwgQ0ZIKSkgIT0gTlVMTCkKIAl7CiAJCWNoYXIJCWxvZm5hbWVb TUFYUEdQQVRIICsgMV07CiAJCWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKQEAgLTQ2NCwxMSArNDY0 LDExIEBAIF9Mb2FkTE9zKEFyY2hpdmVIYW5kbGUgKkFIKQogCQlfUHJpbnRGaWxlRGF0YShBSCwg cGF0aCk7CiAJCUVuZFJlc3RvcmVMTyhBSCwgb2lkKTsKIAl9Ci0JaWYgKCFjZmVvZihjdHgtPkxP c1RvY0ZIKSkKKwlpZiAoIUNGSC0+ZW9mX2Z1bmMoQ0ZIKSkKIAkJcGdfZmF0YWwoImVycm9yIHJl YWRpbmcgbGFyZ2Ugb2JqZWN0IFRPQyBmaWxlIFwiJXNcIiIsCiAJCQkJIHRvY2ZuYW1lKTsKIAot CWlmIChjZmNsb3NlKGN0eC0+TE9zVG9jRkgpICE9IDApCisJaWYgKEVuZENvbXByZXNzRmlsZUhh bmRsZShjdHgtPkxPc1RvY0ZIKSAhPSAwKQogCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIGxh cmdlIG9iamVjdCBUT0MgZmlsZSBcIiVzXCI6ICVtIiwKIAkJCQkgdG9jZm5hbWUpOwogCkBAIC00 ODgsMTUgKzQ4OCwxNiBAQCBfV3JpdGVCeXRlKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBpbnQg aSkKIHsKIAl1bnNpZ25lZCBjaGFyIGMgPSAodW5zaWduZWQgY2hhcikgaTsKIAlsY2xDb250ZXh0 ICpjdHggPSAobGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKKwlDb21wcmVzc0ZpbGVIYW5k bGUgKkNGSCA9IGN0eC0+ZGF0YUZIOwogCiAJZXJybm8gPSAwOwotCWlmIChjZndyaXRlKCZjLCAx LCBjdHgtPmRhdGFGSCkgIT0gMSkKKwlpZiAoQ0ZILT53cml0ZV9mdW5jKCZjLCAxLCBDRkgpICE9 IDEpCiAJewogCQkvKiBpZiB3cml0ZSBkaWRuJ3Qgc2V0IGVycm5vLCBhc3N1bWUgcHJvYmxlbSBp cyBubyBkaXNrIHNwYWNlICovCiAJCWlmIChlcnJubyA9PSAwKQogCQkJZXJybm8gPSBFTk9TUEM7 CiAJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgd3JpdGUgdG8gb3V0cHV0IGZpbGU6ICVzIiwKLQkJCQkg Z2V0X2NmcF9lcnJvcihjdHgtPmRhdGFGSCkpOworCQkJCSBDRkgtPmdldF9lcnJvcl9mdW5jKENG SCkpOwogCX0KIAogCXJldHVybiAxOwpAQCAtNTEyLDggKzUxMyw5IEBAIHN0YXRpYyBpbnQKIF9S ZWFkQnl0ZShBcmNoaXZlSGFuZGxlICpBSCkKIHsKIAlsY2xDb250ZXh0ICpjdHggPSAobGNsQ29u dGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCA9IGN0eC0+ ZGF0YUZIOwogCi0JcmV0dXJuIGNmZ2V0YyhjdHgtPmRhdGFGSCk7CisJcmV0dXJuIENGSC0+Z2V0 Y19mdW5jKENGSCk7CiB9CiAKIC8qCkBAIC01MjQsMTUgKzUyNiwxNiBAQCBzdGF0aWMgdm9pZAog X1dyaXRlQnVmKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4p CiB7CiAJbGNsQ29udGV4dCAqY3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7CisJ Q29tcHJlc3NGaWxlSGFuZGxlICpDRkggPSBjdHgtPmRhdGFGSDsKIAogCWVycm5vID0gMDsKLQlp ZiAoY2Z3cml0ZShidWYsIGxlbiwgY3R4LT5kYXRhRkgpICE9IGxlbikKKwlpZiAoQ0ZILT53cml0 ZV9mdW5jKGJ1ZiwgbGVuLCBDRkgpICE9IGxlbikKIAl7CiAJCS8qIGlmIHdyaXRlIGRpZG4ndCBz ZXQgZXJybm8sIGFzc3VtZSBwcm9ibGVtIGlzIG5vIGRpc2sgc3BhY2UgKi8KIAkJaWYgKGVycm5v ID09IDApCiAJCQllcnJubyA9IEVOT1NQQzsKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCB3cml0ZSB0 byBvdXRwdXQgZmlsZTogJXMiLAotCQkJCSBnZXRfY2ZwX2Vycm9yKGN0eC0+ZGF0YUZIKSk7CisJ CQkJIENGSC0+Z2V0X2Vycm9yX2Z1bmMoQ0ZIKSk7CiAJfQogfQogCkBAIC01NDUsMTIgKzU0OCwx MyBAQCBzdGF0aWMgdm9pZAogX1JlYWRCdWYoQXJjaGl2ZUhhbmRsZSAqQUgsIHZvaWQgKmJ1Ziwg c2l6ZV90IGxlbikKIHsKIAlsY2xDb250ZXh0ICpjdHggPSAobGNsQ29udGV4dCAqKSBBSC0+Zm9y bWF0RGF0YTsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCA9IGN0eC0+ZGF0YUZIOwogCiAJLyoK LQkgKiBJZiB0aGVyZSB3YXMgYW4gSS9PIGVycm9yLCB3ZSBhbHJlYWR5IGV4aXRlZCBpbiBjZnJl YWQoKSwgc28gaGVyZSB3ZQorCSAqIElmIHRoZXJlIHdhcyBhbiBJL08gZXJyb3IsIHdlIGFscmVh ZHkgZXhpdGVkIGluIHJlYWRGKCksIHNvIGhlcmUgd2UKIAkgKiBleGl0IG9uIHNob3J0IHJlYWRz LgogCSAqLwotCWlmIChjZnJlYWQoYnVmLCBsZW4sIGN0eC0+ZGF0YUZIKSAhPSBsZW4pCisJaWYg KENGSC0+cmVhZF9mdW5jKGJ1ZiwgbGVuLCBDRkgpICE9IGxlbikKIAkJcGdfZmF0YWwoImNvdWxk IG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogZW5kIG9mIGZpbGUiKTsKIH0KIApAQCAtNTczLDcg KzU3Nyw3IEBAIF9DbG9zZUFyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgpCiAKIAlpZiAoQUgtPm1v ZGUgPT0gYXJjaE1vZGVXcml0ZSkKIAl7Ci0JCWNmcAkJICAgKnRvY0ZIOworCQlDb21wcmVzc0Zp bGVIYW5kbGUgKnRvY0ZIOwogCQlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9u X3NwZWMgPSB7MH07CiAJCWNoYXIJCWZuYW1lW01BWFBHUEFUSF07CiAKQEAgLTU4NCw4ICs1ODgs OCBAQCBfQ2xvc2VBcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFIKQogCiAJCS8qIFRoZSBUT0MgaXMg YWx3YXlzIGNyZWF0ZWQgdW5jb21wcmVzc2VkICovCiAJCWNvbXByZXNzaW9uX3NwZWMuYWxnb3Jp dGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKLQkJdG9jRkggPSBjZm9wZW5fd3JpdGUoZm5hbWUs IFBHX0JJTkFSWV9XLCBjb21wcmVzc2lvbl9zcGVjKTsKLQkJaWYgKHRvY0ZIID09IE5VTEwpCisJ CXRvY0ZIID0gSW5pdENvbXByZXNzRmlsZUhhbmRsZShjb21wcmVzc2lvbl9zcGVjKTsKKwkJaWYg KHRvY0ZILT5vcGVuX3dyaXRlX2Z1bmMoZm5hbWUsIFBHX0JJTkFSWV9XLCB0b2NGSCkpCiAJCQlw Z19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsIGZuYW1lKTsK IAkJY3R4LT5kYXRhRkggPSB0b2NGSDsKIApAQCAtNTk4LDcgKzYwMiw3IEBAIF9DbG9zZUFyY2hp dmUoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCVdyaXRlSGVhZChBSCk7CiAJCUFILT5mb3JtYXQgPSBh cmNoRGlyZWN0b3J5OwogCQlXcml0ZVRvYyhBSCk7Ci0JCWlmIChjZmNsb3NlKHRvY0ZIKSAhPSAw KQorCQlpZiAoRW5kQ29tcHJlc3NGaWxlSGFuZGxlKHRvY0ZIKSAhPSAwKQogCQkJcGdfZmF0YWwo ImNvdWxkIG5vdCBjbG9zZSBUT0MgZmlsZTogJW0iKTsKIAkJV3JpdGVEYXRhQ2h1bmtzKEFILCBj dHgtPnBzdGF0ZSk7CiAKQEAgLTY0OSw4ICs2NTMsOCBAQCBfU3RhcnRMT3MoQXJjaGl2ZUhhbmRs ZSAqQUgsIFRvY0VudHJ5ICp0ZSkKIAogCS8qIFRoZSBMTyBUT0MgZmlsZSBpcyBuZXZlciBjb21w cmVzc2VkICovCiAJY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9O T05FOwotCWN0eC0+TE9zVG9jRkggPSBjZm9wZW5fd3JpdGUoZm5hbWUsICJhYiIsIGNvbXByZXNz aW9uX3NwZWMpOwotCWlmIChjdHgtPkxPc1RvY0ZIID09IE5VTEwpCisJY3R4LT5MT3NUb2NGSCA9 IEluaXRDb21wcmVzc0ZpbGVIYW5kbGUoY29tcHJlc3Npb25fc3BlYyk7CisJaWYgKGN0eC0+TE9z VG9jRkgtPm9wZW5fd3JpdGVfZnVuYyhmbmFtZSwgImFiIiwgY3R4LT5MT3NUb2NGSCkpCiAJCXBn X2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwgZm5hbWUpOwog fQogCkBAIC02NjcsOSArNjcxLDggQEAgX1N0YXJ0TE8oQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0Vu dHJ5ICp0ZSwgT2lkIG9pZCkKIAogCXNucHJpbnRmKGZuYW1lLCBNQVhQR1BBVEgsICIlcy9ibG9i XyV1LmRhdCIsIGN0eC0+ZGlyZWN0b3J5LCBvaWQpOwogCi0JY3R4LT5kYXRhRkggPSBjZm9wZW5f d3JpdGUoZm5hbWUsIFBHX0JJTkFSWV9XLCBBSC0+Y29tcHJlc3Npb25fc3BlYyk7Ci0KLQlpZiAo Y3R4LT5kYXRhRkggPT0gTlVMTCkKKwljdHgtPmRhdGFGSCA9IEluaXRDb21wcmVzc0ZpbGVIYW5k bGUoQUgtPmNvbXByZXNzaW9uX3NwZWMpOworCWlmIChjdHgtPmRhdGFGSC0+b3Blbl93cml0ZV9m dW5jKGZuYW1lLCBQR19CSU5BUllfVywgY3R4LT5kYXRhRkgpKQogCQlwZ19mYXRhbCgiY291bGQg bm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsIGZuYW1lKTsKIH0KIApAQCAtNjgyLDE4 ICs2ODUsMTkgQEAgc3RhdGljIHZvaWQKIF9FbmRMTyhBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50 cnkgKnRlLCBPaWQgb2lkKQogewogCWxjbENvbnRleHQgKmN0eCA9IChsY2xDb250ZXh0ICopIEFI LT5mb3JtYXREYXRhOworCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIID0gY3R4LT5MT3NUb2NGSDsK IAljaGFyCQlidWZbNTBdOwogCWludAkJCWxlbjsKIAotCS8qIENsb3NlIHRoZSBMTyBkYXRhIGZp bGUgaXRzZWxmICovCi0JaWYgKGNmY2xvc2UoY3R4LT5kYXRhRkgpICE9IDApCi0JCXBnX2ZhdGFs KCJjb3VsZCBub3QgY2xvc2UgTE8gZGF0YSBmaWxlOiAlbSIpOworCS8qIENsb3NlIHRoZSBCTE9C IGRhdGEgZmlsZSBpdHNlbGYgKi8KKwlpZiAoRW5kQ29tcHJlc3NGaWxlSGFuZGxlKGN0eC0+ZGF0 YUZIKSAhPSAwKQorCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIGJsb2IgZGF0YSBmaWxlOiAl bSIpOwogCWN0eC0+ZGF0YUZIID0gTlVMTDsKIAogCS8qIHJlZ2lzdGVyIHRoZSBMTyBpbiBibG9i cy50b2MgKi8KIAlsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXUgYmxvYl8ldS5k YXRcbiIsIG9pZCwgb2lkKTsKLQlpZiAoY2Z3cml0ZShidWYsIGxlbiwgY3R4LT5MT3NUb2NGSCkg IT0gbGVuKQotCQlwZ19mYXRhbCgiY291bGQgbm90IHdyaXRlIHRvIExPcyBUT0MgZmlsZSIpOwor CWlmIChDRkgtPndyaXRlX2Z1bmMoYnVmLCBsZW4sIENGSCkgIT0gbGVuKQorCQlwZ19mYXRhbCgi Y291bGQgbm90IHdyaXRlIHRvIGJsb2JzIFRPQyBmaWxlIik7CiB9CiAKIC8qCkBAIC03MDYsOCAr NzEwLDggQEAgX0VuZExPcyhBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQogewogCWxj bENvbnRleHQgKmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOwogCi0JaWYgKGNm Y2xvc2UoY3R4LT5MT3NUb2NGSCkgIT0gMCkKLQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBM T3MgVE9DIGZpbGU6ICVtIik7CisJaWYgKEVuZENvbXByZXNzRmlsZUhhbmRsZShjdHgtPkxPc1Rv Y0ZIKSAhPSAwKQorCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIGJsb2JzIFRPQyBmaWxlOiAl bSIpOwogCWN0eC0+TE9zVG9jRkggPSBOVUxMOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2R1bXAvdC8wMDJfcGdfZHVtcC5wbCBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBs CmluZGV4IGQ5MjI0N2M5MTUuLjc4NDU0OTI4Y2MgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVt cC90LzAwMl9wZ19kdW1wLnBsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBs CkBAIC05NCw3ICs5NCw3IEBAIG15ICVwZ2R1bXBfcnVucyA9ICgKIAkJCWNvbW1hbmQgPT4gWwog CQkJCSdwZ19yZXN0b3JlJywgJy1sJywgIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2d6aXBfY3VzdG9t LmR1bXAiLAogCQkJXSwKLQkJCWV4cGVjdGVkID0+IHFyL0NvbXByZXNzaW9uOiAxLywKKwkJCWV4 cGVjdGVkID0+IHFyL0NvbXByZXNzaW9uOiBnemlwLywKIAkJCW5hbWUgICAgID0+ICdkYXRhIGNv bnRlbnQgaXMgZ3ppcC1jb21wcmVzc2VkJwogCQl9LAogCX0sCkBAIC0yMzksOCArMjM5LDggQEAg bXkgJXBnZHVtcF9ydW5zID0gKAogCQkJY29tbWFuZCA9PgogCQkJICBbICdwZ19yZXN0b3JlJywg Jy1sJywgIiR0ZW1wZGlyL2RlZmF1bHRzX2N1c3RvbV9mb3JtYXQuZHVtcCIsIF0sCiAJCQlleHBl Y3RlZCA9PiAkc3VwcG9ydHNfZ3ppcCA/Ci0JCQlxci9Db21wcmVzc2lvbjogLTEvIDoKLQkJCXFy L0NvbXByZXNzaW9uOiAwLywKKwkJCXFyL0NvbXByZXNzaW9uOiBnemlwLyA6CisJCQlxci9Db21w cmVzc2lvbjogbm9uZS8sCiAJCQluYW1lID0+ICdkYXRhIGNvbnRlbnQgaXMgZ3ppcC1jb21wcmVz c2VkIGJ5IGRlZmF1bHQgaWYgYXZhaWxhYmxlJywKIAkJfSwKIAl9LApAQCAtMjY0LDggKzI2NCw4 IEBAIG15ICVwZ2R1bXBfcnVucyA9ICgKIAkJCWNvbW1hbmQgPT4KIAkJCSAgWyAncGdfcmVzdG9y ZScsICctbCcsICIkdGVtcGRpci9kZWZhdWx0c19kaXJfZm9ybWF0IiwgXSwKIAkJCWV4cGVjdGVk ID0+ICRzdXBwb3J0c19nemlwID8KLQkJCXFyL0NvbXByZXNzaW9uOiAtMS8gOgotCQkJcXIvQ29t cHJlc3Npb246IDAvLAorCQkJcXIvQ29tcHJlc3Npb246IGd6aXAvIDoKKwkJCXFyL0NvbXByZXNz aW9uOiBub25lLywKIAkJCW5hbWUgPT4gJ2RhdGEgY29udGVudCBpcyBnemlwLWNvbXByZXNzZWQg YnkgZGVmYXVsdCcsCiAJCX0sCiAJCWdsb2JfcGF0dGVybnMgPT4gWwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvY29tbW9uL2NvbXByZXNzaW9uLmggYi9zcmMvaW5jbHVkZS9jb21tb24vY29tcHJl c3Npb24uaAppbmRleCA5YTQ3MWU0MGFhLi5iNDhjMTczMDIyIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9jb21tb24vY29tcHJlc3Npb24uaAorKysgYi9zcmMvaW5jbHVkZS9jb21tb24vY29tcHJl c3Npb24uaApAQCAtMTQsNiArMTQsMTAgQEAKICNpZm5kZWYgUEdfQ09NUFJFU1NJT05fSAogI2Rl ZmluZSBQR19DT01QUkVTU0lPTl9ICiAKKy8qCisgKiBUaGVzZSB2YWx1ZXMgYXJlIHN0b3JlZCBp biBkaXNrLCBmb3IgZXhhbXBsZSBpbiBmaWxlcyBnZW5lcmF0ZWQgYnkgcGdfZHVtcC4KKyAqIENy ZWF0ZSB0aGUgbmVjZXNzYXJ5IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGxheWVycyBpZiB0aGVp ciBvcmRlciBjaGFuZ2VzLgorICovCiB0eXBlZGVmIGVudW0gcGdfY29tcHJlc3NfYWxnb3JpdGht CiB7CiAJUEdfQ09NUFJFU1NJT05fTk9ORSwKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luY2x1 ZGUvY3BsdXNwbHVzY2hlY2sgYi9zcmMvdG9vbHMvcGdpbmNsdWRlL2NwbHVzcGx1c2NoZWNrCmlu ZGV4IGU1MmZlOWY1MDkuLmRiNDI5NDc0YTIgMTAwNzU1Ci0tLSBhL3NyYy90b29scy9wZ2luY2x1 ZGUvY3BsdXNwbHVzY2hlY2sKKysrIGIvc3JjL3Rvb2xzL3BnaW5jbHVkZS9jcGx1c3BsdXNjaGVj awpAQCAtMTUwLDcgKzE1MCw5IEBAIGRvCiAKIAkjIHBnX2R1bXAgaXMgbm90IEMrKy1jbGVhbiBi ZWNhdXNlIGl0IHVzZXMgInB1YmxpYyIgYW5kICJuYW1lc3BhY2UiCiAJIyBhcyBmaWVsZCBuYW1l cywgd2hpY2ggaXMgdW5mb3J0dW5hdGUgYnV0IHdlIHdvbid0IGNoYW5nZSBpdCBub3cuCisJdGVz dCAiJGYiID0gc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAuaCAmJiBjb250aW51ZQogCXRl c3QgIiRmIiA9IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5oICYmIGNvbnRpbnVlCisJdGVz dCAiJGYiID0gc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX25vbmUuaCAmJiBjb250aW51ZQogCXRl c3QgIiRmIiA9IHNyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5oICYmIGNvbnRpbnVlCiAJdGVzdCAi JGYiID0gc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oICYmIGNvbnRpbnVlCiAJ dGVzdCAiJGYiID0gc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaCAmJiBjb250aW51ZQpkaWZmIC0t Z2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdAppbmRleCAyMmVhNDJjMTZiLi5kNGJiNzQ0MmJlIDEwMDY0NAotLS0g YS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdApAQCAtNDI5LDYgKzQyOSw3IEBAIENvbXBpbGVkRXhwclN0YXRlCiBD b21wb3NpdGVJT0RhdGEKIENvbXBvc2l0ZVR5cGVTdG10CiBDb21wb3VuZEFmZml4RmxhZworQ29t cHJlc3NGaWxlSGFuZGxlCiBDb21wcmVzc2lvbkxvY2F0aW9uCiBDb21wcmVzc29yU3RhdGUKIENv bXB1dGVYaWRIb3Jpem9uc1Jlc3VsdApAQCAtMTAzNSw2ICsxMDM2LDcgQEAgR3VjU3RhY2sKIEd1 Y1N0YWNrU3RhdGUKIEd1Y1N0cmluZ0Fzc2lnbkhvb2sKIEd1Y1N0cmluZ0NoZWNrSG9vaworR3pp cENvbXByZXNzb3JTdGF0ZQogSEFORExFCiBIQVNIQUNUSU9OCiBIQVNIQlVDS0VUCi0tIAoyLjM0 LjEKCg== --b1_JUIMqrFBYvKDK5ZkGIoStK58M05RwtoKMsKHzaS9SM--