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 1mkcZd-0006oT-QM for pgsql-hackers@arkaria.postgresql.org; Wed, 10 Nov 2021 01:38:50 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1mkcZc-0002iG-7A for pgsql-hackers@arkaria.postgresql.org; Wed, 10 Nov 2021 01:38:48 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mkcZb-0002i7-Lz for pgsql-hackers@lists.postgresql.org; Wed, 10 Nov 2021 01:38:47 +0000 Received: from mail-pg1-x52e.google.com ([2607:f8b0:4864:20::52e]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1mkcZX-0006ls-W3 for pgsql-hackers@postgresql.org; Wed, 10 Nov 2021 01:38:47 +0000 Received: by mail-pg1-x52e.google.com with SMTP id r80so716459pgr.9 for ; Tue, 09 Nov 2021 17:38:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20210112.gappssmtp.com; s=20210112; h=message-id:subject:from:to:cc:date:in-reply-to:references :mime-version; bh=xx67jffYwjPlCyv8Qzg2932ZjffG1aJQoobA9K47TdI=; b=kkZfN6Zy7tpRlbpHCBE7q0OznthPnBiL42b/rCywMWzlfTy/AseAdhMvtP7BoSgrQh fp1DOEboVNhIb2EigOA/3RLmfPZS5tBSvSfDoZ7SqSr5bgbjUW9jxT1BdC/l7BohGcGG rry2mIwT3Qam/yN+2KaWdiW4rR2XvV9RnhwPZT/yqtzcRnnyWtqnW3I1yaORTLMj5P23 i95lsbVywpyIfF644axpxlQ/on4CzFfYrKRhjf12/pVKztJI7pWmmBFTeE0ns5NOLQT3 N1bWYAYiXk+zUkkercGUcYqdlUpGki8CnTqyh3NEJo7U3fDr29sqNy8T7X3BbZ45MGms QPdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:subject:from:to:cc:date:in-reply-to :references:mime-version; bh=xx67jffYwjPlCyv8Qzg2932ZjffG1aJQoobA9K47TdI=; b=S12avrk1yj1X4uzZfhMRPG+SGiPA+Wej2DXK2gZ3R5iDTsZ1Yf7RoJq4t43i1Q9T5U 8eh6mAIHnaWAQRi0IrMuxNQXxsXDbJEpSOKjDbJqpbPBQmejVcJh2krTJqFl1EtsF0nX BLXzwogd11+pJq0z8oZ9CViutN6MtrEJ73HNy9R4BF/Gei7GCgHbBlSOetML2GzY2brC lPmGN1oJZ9qvBfUHNwTwljGDgqV4wes5jUeGlG55Uktt+kfar9fs1P/vXoxzpNf2hpFX Ct7PD/o93hcffuNr74W0nGOGuI1Bd0YybL5EDKs3x7ouyJZnvE5/rTrbwiwYZPwMypcF jhUg== X-Gm-Message-State: AOAM533g3lk45bOHZP/8Q8KrK1D80Bbd5iUGkd4+SO4Dd/3nDLLhS/M8 qd1++yhzLeDlNKPS4I/W1AW0tTDUzIvr9A== X-Google-Smtp-Source: ABdhPJx1Z8KTOuhlnRHHFsmJOQTCV0b8i0QO0s963pVylgmGOamSLyzu0EvQLwq1gnLmIEQFUKrbRg== X-Received: by 2002:a05:6a00:1a04:b0:4a0:6e3:27b3 with SMTP id g4-20020a056a001a0400b004a006e327b3mr6786581pfv.24.1636508321218; Tue, 09 Nov 2021 17:38:41 -0800 (PST) Received: from jdavis ([172.58.46.151]) by smtp.gmail.com with ESMTPSA id e7sm16149082pgk.90.2021.11.09.17.38.33 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 09 Nov 2021 17:38:40 -0800 (PST) Message-ID: <3acaefb5668fbc1298fb67c6b24a5ffec2f3ac72.camel@j-davis.com> Subject: Re: Extensible Rmgr for Table AMs From: Jeff Davis To: pgsql-hackers@postgresql.org Cc: Andres Freund , Amit Kapila , Tom Lane , Simon Riggs Date: Tue, 09 Nov 2021 17:38:29 -0800 In-Reply-To: References: Content-Type: multipart/mixed; boundary="=-zzRkBhglQ8JiZY71GnR3" X-Mailer: Evolution 3.28.5-0ubuntu0.18.04.2 Mime-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-zzRkBhglQ8JiZY71GnR3 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit On Mon, 2021-11-08 at 15:36 -0800, Jeff Davis wrote: > The attached patch (against v14, so it's easier to test columnar) is > somewhat like a simplified version of [3] combined with refactoring > to > make decoding a part of the rmgr. I created a wiki page here: https://wiki.postgresql.org/wiki/ExtensibleRmgr To coordinate reservation of RmgrIds, to avoid conflicts. I don't expect it to be a practical problem given how much work it takes to create a new table AM that needs full WAL support, but might as well have some transparency on how to choose a new RmgrId. I also updated the patch to point to the wiki page in the comments, and added in a new RM_EXPERIMENTAL_ID that can be used while an extension is still in development. Hopefully this will prevent people reserving lots of RmgrIds for extensions that never get released. Regards, Jeff Davis --=-zzRkBhglQ8JiZY71GnR3 Content-Disposition: attachment; filename="extensible-rmgr-pg14-v2.diff" Content-Type: text/x-patch; name="extensible-rmgr-pg14-v2.diff"; charset="UTF-8" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3JtZ3IuYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3JtZ3IuYwppbmRleCA1ODA5MWY2YjUyMC4uMzU0ZjEwMzNiZjcg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3JtZ3IuYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9ybWdyLmMKQEAgLTI0LDE1ICsyNCwxMDIgQEAKICNpbmNs dWRlICJjb21tYW5kcy9kYmNvbW1hbmRzX3hsb2cuaCIKICNpbmNsdWRlICJjb21tYW5kcy9zZXF1 ZW5jZS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlc3BhY2UuaCIKKyNpbmNsdWRlICJtaXNj YWRtaW4uaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZWNvZGUuaCIKICNpbmNsdWRlICJyZXBs aWNhdGlvbi9tZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vb3JpZ2luLmgiCiAjaW5j bHVkZSAic3RvcmFnZS9zdGFuZGJ5LmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNp bmNsdWRlICJ1dGlscy9yZWxtYXBwZXIuaCIKIAordHlwZWRlZiBzdHJ1Y3QgQ3VzdG9tUm1nckVu dHJ5IHsKKwlSbWdySWQgcm1pZDsKKwlSbWdyRGF0YSAqcm1ncjsKK30gQ3VzdG9tUm1nckVudHJ5 OworCiAvKiBtdXN0IGJlIGtlcHQgaW4gc3luYyB3aXRoIFJtZ3JEYXRhIGRlZmluaXRpb24gaW4g eGxvZ19pbnRlcm5hbC5oICovCi0jZGVmaW5lIFBHX1JNR1Ioc3ltbmFtZSxuYW1lLHJlZG8sZGVz YyxpZGVudGlmeSxzdGFydHVwLGNsZWFudXAsbWFzaykgXAotCXsgbmFtZSwgcmVkbywgZGVzYywg aWRlbnRpZnksIHN0YXJ0dXAsIGNsZWFudXAsIG1hc2sgfSwKKyNkZWZpbmUgUEdfUk1HUihzeW1u YW1lLG5hbWUscmVkbyxkZXNjLGlkZW50aWZ5LHN0YXJ0dXAsY2xlYW51cCxtYXNrLGRlY29kZSkg XAorCXsgbmFtZSwgcmVkbywgZGVzYywgaWRlbnRpZnksIHN0YXJ0dXAsIGNsZWFudXAsIG1hc2ss IGRlY29kZSB9LAogCiBjb25zdCBSbWdyRGF0YSBSbWdyVGFibGVbUk1fTUFYX0lEICsgMV0gPSB7 CiAjaW5jbHVkZSAiYWNjZXNzL3JtZ3JsaXN0LmgiCiB9OworCitzdGF0aWMgQ3VzdG9tUm1nckVu dHJ5ICpDdXN0b21SbWdyVGFibGUgPSBOVUxMOworc3RhdGljIGludCBOdW1DdXN0b21SbWdycyA9 IDA7CisKKy8qCisgKiBSZWdpc3RlciBhIG5ldyBjdXN0b20gcm1nci4KKyAqCisgKiBSZWZlciB0 byBodHRwczovL3dpa2kucG9zdGdyZXNxbC5vcmcvd2lraS9FeHRlbnNpYmxlUm1nciB0byByZXNl cnZlIGEKKyAqIHVuaXF1ZSBSbWdySWQgZm9yIHlvdXIgZXh0ZW5zaW9uLCB0byBhdm9pZCBjb25m bGljdHMuIER1cmluZyBkZXZlbG9wbWVudCwKKyAqIHVzZSBSTV9FWFBFUklNRU5UQUxfSUQuCisg Ki8KK3ZvaWQKK1JlZ2lzdGVyQ3VzdG9tUm1ncihSbWdySWQgcm1pZCwgUm1nckRhdGEgKnJtZ3Ip Cit7CisJaWYgKCFwcm9jZXNzX3NoYXJlZF9wcmVsb2FkX2xpYnJhcmllc19pbl9wcm9ncmVzcykK KwkJZWxvZyhFUlJPUiwgImN1c3RvbSBybWdyIG11c3QgYmUgcmVnaXN0ZXJlZCB3aGlsZSBpbml0 aWFsaXppbmcgZXh0ZW5zaW9ucyBpbiBzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMiKTsKKworCWVs b2coTE9HLCAicmVnaXN0ZXJpbmcgY3VzdG9tZXIgcm1nciBcIiVzXCIgd2l0aCBJRCAlZCIsCisJ CSBybWdyLT5ybV9uYW1lLCBybWlkKTsKKworCWlmIChybWlkIDwgUk1fQ1VTVE9NX01JTl9JRCB8 fCBybWlkID4gUk1fQ1VTVE9NX01BWF9JRCkKKwkJZWxvZyhQQU5JQywgImN1c3RvbSBybWdyIGlk ICVkIG91dCBvZiByYW5nZSIsIHJtaWQpOworCisJaWYgKEN1c3RvbVJtZ3JUYWJsZSA9PSBOVUxM KQorCQlDdXN0b21SbWdyVGFibGUgPSBNZW1vcnlDb250ZXh0QWxsb2NaZXJvKAorCQkJVG9wTWVt b3J5Q29udGV4dCwgc2l6ZW9mKEN1c3RvbVJtZ3JFbnRyeSkpOworCisJLyogY2hlY2sgZm9yIGV4 aXN0aW5nIGJ1aWx0aW4gcm1nciB3aXRoIHRoZSBzYW1lIG5hbWUgKi8KKwlmb3IgKGludCBpID0g MDsgaSA8PSBSTV9NQVhfSUQ7IGkrKykKKwl7CisJCWNvbnN0IFJtZ3JEYXRhICpleGlzdGluZ19y bWdyID0gJlJtZ3JUYWJsZVtpXTsKKworCQlpZiAoIXN0cmNtcChleGlzdGluZ19ybWdyLT5ybV9u YW1lLCBybWdyLT5ybV9uYW1lKSkKKwkJCWVsb2coUEFOSUMsICJjdXN0b20gcm1nciBcIiVzXCIg aGFzIHRoZSBzYW1lIG5hbWUgYXMgYnVpbHRpbiBybWdyIiwKKwkJCQkgZXhpc3Rpbmdfcm1nci0+ cm1fbmFtZSk7CisJfQorCisJLyogY2hlY2sgZm9yIGNvbmZsaWN0aW5nIGN1c3RvbSBybWdycyBh bHJlYWR5IHJlZ2lzdGVyZWQgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IE51bUN1c3RvbVJtZ3Jz OyBpKyspCisJeworCQlDdXN0b21SbWdyRW50cnkgZW50cnkgPSBDdXN0b21SbWdyVGFibGVbaV07 CisKKwkJaWYgKGVudHJ5LnJtaWQgPT0gcm1pZCkKKwkJCWVsb2coUEFOSUMsICJjdXN0b20gcm1n ciBJRCAlZCBhbHJlYWR5IHJlZ2lzdGVyZWQgd2l0aCBuYW1lIFwiJXNcIiIsCisJCQkJIHJtaWQs IGVudHJ5LnJtZ3ItPnJtX25hbWUpOworCisJCWlmICghc3RyY21wKGVudHJ5LnJtZ3ItPnJtX25h bWUsIHJtZ3ItPnJtX25hbWUpKQorCQkJZWxvZyhQQU5JQywgImN1c3RvbSBybWdyIFwiJXNcIiBh bHJlYWR5IHJlZ2lzdGVyZWQgd2l0aCBJRCAlZCIsCisJCQkJIHJtZ3ItPnJtX25hbWUsIGVudHJ5 LnJtaWQpOworCX0KKworCUN1c3RvbVJtZ3JUYWJsZSA9IChDdXN0b21SbWdyRW50cnkgKikgcmVw YWxsb2MoCisJCUN1c3RvbVJtZ3JUYWJsZSwgc2l6ZW9mKEN1c3RvbVJtZ3JFbnRyeSkgKiBOdW1D dXN0b21SbWdycyArIDEpOworCisJQ3VzdG9tUm1nclRhYmxlW051bUN1c3RvbVJtZ3JzXS5ybWlk ID0gcm1pZDsKKwlDdXN0b21SbWdyVGFibGVbTnVtQ3VzdG9tUm1ncnNdLnJtZ3IgPSBybWdyOwor CU51bUN1c3RvbVJtZ3JzKys7Cit9CisKKy8qCisgKiBHZXRDdXN0b21SbWdyCisgKgorICogVGhp cyBpcyBhbiBPKE4pIGxpc3QgdHJhdmVyc2FsIGJlY2F1c2UgdGhlIGV4cGVjdGVkIHNpemUgaXMg dmVyeSBzbWFsbC4KKyAqLworUm1nckRhdGEKK0dldEN1c3RvbVJtZ3IoUm1ncklkIHJtaWQpCit7 CisJaWYgKHJtaWQgPCBSTV9DVVNUT01fTUlOX0lEIHx8IHJtaWQgPiBSTV9DVVNUT01fTUFYX0lE KQorCQllbG9nKFBBTklDLCAiY3VzdG9tIHJtZ3IgaWQgJWQgb3V0IG9mIHJhbmdlIiwgcm1pZCk7 CisKKwlmb3IgKGludCBpID0gMDsgaSA8IE51bUN1c3RvbVJtZ3JzOyBpKyspCisJeworCQlDdXN0 b21SbWdyRW50cnkgZW50cnkgPSBDdXN0b21SbWdyVGFibGVbaV07CisJCWlmIChlbnRyeS5ybWlk ID09IHJtaWQpCisJCQlyZXR1cm4gKmVudHJ5LnJtZ3I7CisJfQorCisJZWxvZyhQQU5JQywgImN1 c3RvbSBybWdyIHdpdGggSUQgJWQgbm90IGZvdW5kISIsIHJtaWQpOworfQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0veGxvZy5jCmluZGV4IDYyMDhlMTIzZTVkLi4wN2Y3MTVmMGQ5ZiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL3hsb2cuYwpAQCAtMTUwNSwxMCArMTUwNSwxMCBAQCBjaGVja1hMb2dDb25zaXN0 ZW5jeShYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAkJICogSWYgbWFza2luZyBmdW5jdGlvbiBp cyBkZWZpbmVkLCBtYXNrIGJvdGggdGhlIHByaW1hcnkgYW5kIHJlcGxheQogCQkgKiBpbWFnZXMK IAkJICovCi0JCWlmIChSbWdyVGFibGVbcm1pZF0ucm1fbWFzayAhPSBOVUxMKQorCQlpZiAoR2V0 Um1ncihybWlkKS5ybV9tYXNrICE9IE5VTEwpCiAJCXsKLQkJCVJtZ3JUYWJsZVtybWlkXS5ybV9t YXNrKHJlcGxheV9pbWFnZV9tYXNrZWQsIGJsa25vKTsKLQkJCVJtZ3JUYWJsZVtybWlkXS5ybV9t YXNrKHByaW1hcnlfaW1hZ2VfbWFza2VkLCBibGtubyk7CisJCQlHZXRSbWdyKHJtaWQpLnJtX21h c2socmVwbGF5X2ltYWdlX21hc2tlZCwgYmxrbm8pOworCQkJR2V0Um1ncihybWlkKS5ybV9tYXNr KHByaW1hcnlfaW1hZ2VfbWFza2VkLCBibGtubyk7CiAJCX0KIAogCQkvKiBUaW1lIHRvIGNvbXBh cmUgdGhlIHByaW1hcnkgYW5kIHJlcGxheSBpbWFnZXMuICovCkBAIC03MjkyLDggKzcyOTIsOCBA QCBTdGFydHVwWExPRyh2b2lkKQogCQkvKiBJbml0aWFsaXplIHJlc291cmNlIG1hbmFnZXJzICov CiAJCWZvciAocm1pZCA9IDA7IHJtaWQgPD0gUk1fTUFYX0lEOyBybWlkKyspCiAJCXsKLQkJCWlm IChSbWdyVGFibGVbcm1pZF0ucm1fc3RhcnR1cCAhPSBOVUxMKQotCQkJCVJtZ3JUYWJsZVtybWlk XS5ybV9zdGFydHVwKCk7CisJCQlpZiAoR2V0Um1ncihybWlkKS5ybV9zdGFydHVwICE9IE5VTEwp CisJCQkJR2V0Um1ncihybWlkKS5ybV9zdGFydHVwKCk7CiAJCX0KIAogCQkvKgpAQCAtNzUxOCw3 ICs3NTE4LDcgQEAgU3RhcnR1cFhMT0codm9pZCkKIAkJCQkJUmVjb3JkS25vd25Bc3NpZ25lZFRy YW5zYWN0aW9uSWRzKHJlY29yZC0+eGxfeGlkKTsKIAogCQkJCS8qIE5vdyBhcHBseSB0aGUgV0FM IHJlY29yZCBpdHNlbGYgKi8KLQkJCQlSbWdyVGFibGVbcmVjb3JkLT54bF9ybWlkXS5ybV9yZWRv KHhsb2dyZWFkZXIpOworCQkJCUdldFJtZ3IocmVjb3JkLT54bF9ybWlkKS5ybV9yZWRvKHhsb2dy ZWFkZXIpOwogCiAJCQkJLyoKIAkJCQkgKiBBZnRlciByZWRvLCBjaGVjayB3aGV0aGVyIHRoZSBi YWNrdXAgcGFnZXMgYXNzb2NpYXRlZCB3aXRoCkBAIC03NjI4LDggKzc2MjgsOCBAQCBTdGFydHVw WExPRyh2b2lkKQogCQkJLyogQWxsb3cgcmVzb3VyY2UgbWFuYWdlcnMgdG8gZG8gYW55IHJlcXVp cmVkIGNsZWFudXAuICovCiAJCQlmb3IgKHJtaWQgPSAwOyBybWlkIDw9IFJNX01BWF9JRDsgcm1p ZCsrKQogCQkJewotCQkJCWlmIChSbWdyVGFibGVbcm1pZF0ucm1fY2xlYW51cCAhPSBOVUxMKQot CQkJCQlSbWdyVGFibGVbcm1pZF0ucm1fY2xlYW51cCgpOworCQkJCWlmIChHZXRSbWdyKHJtaWQp LnJtX2NsZWFudXAgIT0gTlVMTCkKKwkJCQkJR2V0Um1ncihybWlkKS5ybV9jbGVhbnVwKCk7CiAJ CQl9CiAKIAkJCWVyZXBvcnQoTE9HLApAQCAtMTA2NjMsMTYgKzEwNjYzLDE2IEBAIHhsb2dfb3V0 ZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJdWludDgJCWlu Zm8gPSBYTG9nUmVjR2V0SW5mbyhyZWNvcmQpOwogCWNvbnN0IGNoYXIgKmlkOwogCi0JYXBwZW5k U3RyaW5nSW5mb1N0cmluZyhidWYsIFJtZ3JUYWJsZVtybWlkXS5ybV9uYW1lKTsKKwlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKGJ1ZiwgR2V0Um1ncihybWlkKS5ybV9uYW1lKTsKIAlhcHBlbmRTdHJp bmdJbmZvQ2hhcihidWYsICcvJyk7CiAKLQlpZCA9IFJtZ3JUYWJsZVtybWlkXS5ybV9pZGVudGlm eShpbmZvKTsKKwlpZCA9IEdldFJtZ3Iocm1pZCkucm1faWRlbnRpZnkoaW5mbyk7CiAJaWYgKGlk ID09IE5VTEwpCiAJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiVU5LTk9XTiAoJVgpOiAiLCBpbmZv ICYgflhMUl9JTkZPX01BU0spOwogCWVsc2UKIAkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlczog IiwgaWQpOwogCi0JUm1nclRhYmxlW3JtaWRdLnJtX2Rlc2MoYnVmLCByZWNvcmQpOworCUdldFJt Z3Iocm1pZCkucm1fZGVzYyhidWYsIHJlY29yZCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlYWRlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0veGxvZ3JlYWRlci5jCmluZGV4IGYwMWFlYTZkZGFkLi42ZTJkNDA2OTVhYyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlYWRlci5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWFkZXIuYwpAQCAtNzM1LDcgKzczNSw3IEBAIFZh bGlkWExvZ1JlY29yZEhlYWRlcihYTG9nUmVhZGVyU3RhdGUgKnN0YXRlLCBYTG9nUmVjUHRyIFJl Y1B0ciwKIAkJCQkJCQkgICh1aW50MzIpIFNpemVPZlhMb2dSZWNvcmQsIHJlY29yZC0+eGxfdG90 X2xlbik7CiAJCXJldHVybiBmYWxzZTsKIAl9Ci0JaWYgKHJlY29yZC0+eGxfcm1pZCA+IFJNX01B WF9JRCkKKwlpZiAocmVjb3JkLT54bF9ybWlkID4gUk1fTUFYX0lEICYmIHJlY29yZC0+eGxfcm1p ZCA8IFJNX0NVU1RPTV9NSU5fSUQpCiAJewogCQlyZXBvcnRfaW52YWxpZF9yZWNvcmQoc3RhdGUs CiAJCQkJCQkJICAiaW52YWxpZCByZXNvdXJjZSBtYW5hZ2VyIElEICV1IGF0ICVYLyVYIiwKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCmluZGV4IGRhZjJlZmIwZDgzLi42 N2UwMTA3YjE5MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9k ZWNvZGUuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCkBA IC00MywyMSArNDMsNiBAQAogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3NuYXBidWlsZC5oIgogI2lu Y2x1ZGUgInN0b3JhZ2Uvc3RhbmRieS5oIgogCi10eXBlZGVmIHN0cnVjdCBYTG9nUmVjb3JkQnVm ZmVyCi17Ci0JWExvZ1JlY1B0cglvcmlncHRyOwotCVhMb2dSZWNQdHIJZW5kcHRyOwotCVhMb2dS ZWFkZXJTdGF0ZSAqcmVjb3JkOwotfSBYTG9nUmVjb3JkQnVmZmVyOwotCi0vKiBSTUdSIEhhbmRs ZXJzICovCi1zdGF0aWMgdm9pZCBEZWNvZGVYTG9nT3AoTG9naWNhbERlY29kaW5nQ29udGV4dCAq Y3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOwotc3RhdGljIHZvaWQgRGVjb2RlSGVhcE9wKExv Z2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKLXN0YXRp YyB2b2lkIERlY29kZUhlYXAyT3AoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVj b3JkQnVmZmVyICpidWYpOwotc3RhdGljIHZvaWQgRGVjb2RlWGFjdE9wKExvZ2ljYWxEZWNvZGlu Z0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKLXN0YXRpYyB2b2lkIERlY29k ZVN0YW5kYnlPcChMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIg KmJ1Zik7Ci1zdGF0aWMgdm9pZCBEZWNvZGVMb2dpY2FsTXNnT3AoTG9naWNhbERlY29kaW5nQ29u dGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOwotCiAvKiBpbmRpdmlkdWFsIHJlY29y ZChncm91cCkncyBoYW5kbGVycyAqLwogc3RhdGljIHZvaWQgRGVjb2RlSW5zZXJ0KExvZ2ljYWxE ZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKIHN0YXRpYyB2b2lk IERlY29kZVVwZGF0ZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZm ZXIgKmJ1Zik7CkBAIC0xMDcsNiArOTIsNyBAQCBMb2dpY2FsRGVjb2RpbmdQcm9jZXNzUmVjb3Jk KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlYWRlclN0YXRlICpyZWNvcgogewog CVhMb2dSZWNvcmRCdWZmZXIgYnVmOwogCVRyYW5zYWN0aW9uSWQgdHhpZDsKKwlSbWdySWQgcm1p ZDsKIAogCWJ1Zi5vcmlncHRyID0gY3R4LT5yZWFkZXItPlJlYWRSZWNQdHI7CiAJYnVmLmVuZHB0 ciA9IGN0eC0+cmVhZGVyLT5FbmRSZWNQdHI7CkBAIC0xMjcsNzIgKzExMywyMyBAQCBMb2dpY2Fs RGVjb2RpbmdQcm9jZXNzUmVjb3JkKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1Jl YWRlclN0YXRlICpyZWNvcgogCQkJCQkJCQkgYnVmLm9yaWdwdHIpOwogCX0KIAotCS8qIGNhc3Qg c28gd2UgZ2V0IGEgd2FybmluZyB3aGVuIG5ldyBybWdycyBhcmUgYWRkZWQgKi8KLQlzd2l0Y2gg KChSbWdySWQpIFhMb2dSZWNHZXRSbWlkKHJlY29yZCkpCi0JewotCQkJLyoKLQkJCSAqIFJtZ3Jz IHdlIGNhcmUgYWJvdXQgZm9yIGxvZ2ljYWwgZGVjb2RpbmcuIEFkZCBuZXcgcm1ncnMgaW4KLQkJ CSAqIHJtZ3JsaXN0LmgncyBvcmRlci4KLQkJCSAqLwotCQljYXNlIFJNX1hMT0dfSUQ6Ci0JCQlE ZWNvZGVYTG9nT3AoY3R4LCAmYnVmKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUk1fWEFDVF9JRDoK LQkJCURlY29kZVhhY3RPcChjdHgsICZidWYpOwotCQkJYnJlYWs7CisJcm1pZCA9IFhMb2dSZWNH ZXRSbWlkKHJlY29yZCk7CiAKLQkJY2FzZSBSTV9TVEFOREJZX0lEOgotCQkJRGVjb2RlU3RhbmRi eU9wKGN0eCwgJmJ1Zik7Ci0JCQlicmVhazsKLQotCQljYXNlIFJNX0hFQVAyX0lEOgotCQkJRGVj b2RlSGVhcDJPcChjdHgsICZidWYpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBSTV9IRUFQX0lEOgot CQkJRGVjb2RlSGVhcE9wKGN0eCwgJmJ1Zik7Ci0JCQlicmVhazsKLQotCQljYXNlIFJNX0xPR0lD QUxNU0dfSUQ6Ci0JCQlEZWNvZGVMb2dpY2FsTXNnT3AoY3R4LCAmYnVmKTsKLQkJCWJyZWFrOwot Ci0JCQkvKgotCQkJICogUm1ncnMgaXJyZWxldmFudCBmb3IgbG9naWNhbCBkZWNvZGluZzsgdGhl eSBkZXNjcmliZSBzdHVmZiBub3QKLQkJCSAqIHJlcHJlc2VudGVkIGluIGxvZ2ljYWwgZGVjb2Rp bmcuIEFkZCBuZXcgcm1ncnMgaW4gcm1ncmxpc3QuaCdzCi0JCQkgKiBvcmRlci4KLQkJCSAqLwot CQljYXNlIFJNX1NNR1JfSUQ6Ci0JCWNhc2UgUk1fQ0xPR19JRDoKLQkJY2FzZSBSTV9EQkFTRV9J RDoKLQkJY2FzZSBSTV9UQkxTUENfSUQ6Ci0JCWNhc2UgUk1fTVVMVElYQUNUX0lEOgotCQljYXNl IFJNX1JFTE1BUF9JRDoKLQkJY2FzZSBSTV9CVFJFRV9JRDoKLQkJY2FzZSBSTV9IQVNIX0lEOgot CQljYXNlIFJNX0dJTl9JRDoKLQkJY2FzZSBSTV9HSVNUX0lEOgotCQljYXNlIFJNX1NFUV9JRDoK LQkJY2FzZSBSTV9TUEdJU1RfSUQ6Ci0JCWNhc2UgUk1fQlJJTl9JRDoKLQkJY2FzZSBSTV9DT01N SVRfVFNfSUQ6Ci0JCWNhc2UgUk1fUkVQTE9SSUdJTl9JRDoKLQkJY2FzZSBSTV9HRU5FUklDX0lE OgotCQkJLyoganVzdCBkZWFsIHdpdGggeGlkLCBhbmQgZG9uZSAqLwotCQkJUmVvcmRlckJ1ZmZl clByb2Nlc3NYaWQoY3R4LT5yZW9yZGVyLCBYTG9nUmVjR2V0WGlkKHJlY29yZCksCi0JCQkJCQkJ CQlidWYub3JpZ3B0cik7Ci0JCQlicmVhazsKLQkJY2FzZSBSTV9ORVhUX0lEOgotCQkJZWxvZyhF UlJPUiwgInVuZXhwZWN0ZWQgUk1fTkVYVF9JRCBybWdyX2lkOiAldSIsIChSbWdySWRzKSBYTG9n UmVjR2V0Um1pZChidWYucmVjb3JkKSk7CisJaWYgKEdldFJtZ3Iocm1pZCkucm1fZGVjb2RlICE9 IE5VTEwpCisJCUdldFJtZ3Iocm1pZCkucm1fZGVjb2RlKGN0eCwgJmJ1Zik7CisJZWxzZQorCXsK KwkJLyoganVzdCBkZWFsIHdpdGggeGlkLCBhbmQgZG9uZSAqLworCQlSZW9yZGVyQnVmZmVyUHJv Y2Vzc1hpZChjdHgtPnJlb3JkZXIsIFhMb2dSZWNHZXRYaWQocmVjb3JkKSwKKwkJCQkJCQkJYnVm Lm9yaWdwdHIpOwogCX0KIH0KIAogLyoKICAqIEhhbmRsZSBybWdyIFhMT0dfSUQgcmVjb3JkcyBm b3IgRGVjb2RlUmVjb3JkSW50b1Jlb3JkZXJCdWZmZXIoKS4KICAqLwotc3RhdGljIHZvaWQKLURl Y29kZVhMb2dPcChMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIg KmJ1ZikKK3ZvaWQKK3hsb2dfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExv Z1JlY29yZEJ1ZmZlciAqYnVmKQogewogCVNuYXBCdWlsZCAgKmJ1aWxkZXIgPSBjdHgtPnNuYXBz aG90X2J1aWxkZXI7CiAJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0SW5mbyhidWYtPnJlY29yZCkg JiB+WExSX0lORk9fTUFTSzsKQEAgLTIzNCw4ICsxNzEsOCBAQCBEZWNvZGVYTG9nT3AoTG9naWNh bERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpCiAvKgogICogSGFu ZGxlIHJtZ3IgWEFDVF9JRCByZWNvcmRzIGZvciBEZWNvZGVSZWNvcmRJbnRvUmVvcmRlckJ1ZmZl cigpLgogICovCi1zdGF0aWMgdm9pZAotRGVjb2RlWGFjdE9wKExvZ2ljYWxEZWNvZGluZ0NvbnRl eHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKQordm9pZAoreGFjdF9kZWNvZGUoTG9naWNh bERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpCiB7CiAJU25hcEJ1 aWxkICAqYnVpbGRlciA9IGN0eC0+c25hcHNob3RfYnVpbGRlcjsKIAlSZW9yZGVyQnVmZmVyICpy ZW9yZGVyID0gY3R4LT5yZW9yZGVyOwpAQCAtMzkyLDggKzMyOSw4IEBAIERlY29kZVhhY3RPcChM b2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1ZikKIC8qCiAg KiBIYW5kbGUgcm1nciBTVEFOREJZX0lEIHJlY29yZHMgZm9yIERlY29kZVJlY29yZEludG9SZW9y ZGVyQnVmZmVyKCkuCiAgKi8KLXN0YXRpYyB2b2lkCi1EZWNvZGVTdGFuZGJ5T3AoTG9naWNhbERl Y29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpCit2b2lkCitzdGFuZGJ5 X2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1 ZikKIHsKIAlTbmFwQnVpbGQgICpidWlsZGVyID0gY3R4LT5zbmFwc2hvdF9idWlsZGVyOwogCVhM b2dSZWFkZXJTdGF0ZSAqciA9IGJ1Zi0+cmVjb3JkOwpAQCAtNDM4LDggKzM3NSw4IEBAIERlY29k ZVN0YW5kYnlPcChMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIg KmJ1ZikKIC8qCiAgKiBIYW5kbGUgcm1nciBIRUFQMl9JRCByZWNvcmRzIGZvciBEZWNvZGVSZWNv cmRJbnRvUmVvcmRlckJ1ZmZlcigpLgogICovCi1zdGF0aWMgdm9pZAotRGVjb2RlSGVhcDJPcChM b2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1ZikKK3ZvaWQK K2hlYXAyX2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZm ZXIgKmJ1ZikKIHsKIAl1aW50OAkJaW5mbyA9IFhMb2dSZWNHZXRJbmZvKGJ1Zi0+cmVjb3JkKSAm IFhMT0dfSEVBUF9PUE1BU0s7CiAJVHJhbnNhY3Rpb25JZCB4aWQgPSBYTG9nUmVjR2V0WGlkKGJ1 Zi0+cmVjb3JkKTsKQEAgLTQ5OCw4ICs0MzUsOCBAQCBEZWNvZGVIZWFwMk9wKExvZ2ljYWxEZWNv ZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKQogLyoKICAqIEhhbmRsZSBy bWdyIEhFQVBfSUQgcmVjb3JkcyBmb3IgRGVjb2RlUmVjb3JkSW50b1Jlb3JkZXJCdWZmZXIoKS4K ICAqLwotc3RhdGljIHZvaWQKLURlY29kZUhlYXBPcChMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpj dHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1ZikKK3ZvaWQKK2hlYXBfZGVjb2RlKExvZ2ljYWxEZWNv ZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKQogewogCXVpbnQ4CQlpbmZv ID0gWExvZ1JlY0dldEluZm8oYnVmLT5yZWNvcmQpICYgWExPR19IRUFQX09QTUFTSzsKIAlUcmFu c2FjdGlvbklkIHhpZCA9IFhMb2dSZWNHZXRYaWQoYnVmLT5yZWNvcmQpOwpAQCAtNjIwLDggKzU1 Nyw4IEBAIEZpbHRlckJ5T3JpZ2luKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVwT3Jp Z2luSWQgb3JpZ2luX2lkKQogLyoKICAqIEhhbmRsZSBybWdyIExPR0lDQUxNU0dfSUQgcmVjb3Jk cyBmb3IgRGVjb2RlUmVjb3JkSW50b1Jlb3JkZXJCdWZmZXIoKS4KICAqLwotc3RhdGljIHZvaWQK LURlY29kZUxvZ2ljYWxNc2dPcChMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNv cmRCdWZmZXIgKmJ1ZikKK3ZvaWQKK2xvZ2ljYWxtc2dfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0Nv bnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKQogewogCVNuYXBCdWlsZCAgKmJ1aWxk ZXIgPSBjdHgtPnNuYXBzaG90X2J1aWxkZXI7CiAJWExvZ1JlYWRlclN0YXRlICpyID0gYnVmLT5y ZWNvcmQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5jIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9ndWMuYwppbmRleCA2NjUyYTYwZWMzMS4uYzdiNjQwYmVmYjggMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvbWlzYy9ndWMuYwpAQCAtMTE1OTksNyArMTE1OTksNyBAQCBjaGVja193YWxfY29uc2lz dGVuY3lfY2hlY2tpbmcoY2hhciAqKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLCBHdWNTb3VyY2Ugc291 cmNlKQogCQlpZiAocGdfc3RyY2FzZWNtcCh0b2ssICJhbGwiKSA9PSAwKQogCQl7CiAJCQlmb3Ig KHJtaWQgPSAwOyBybWlkIDw9IFJNX01BWF9JRDsgcm1pZCsrKQotCQkJCWlmIChSbWdyVGFibGVb cm1pZF0ucm1fbWFzayAhPSBOVUxMKQorCQkJCWlmIChHZXRSbWdyKHJtaWQpLnJtX21hc2sgIT0g TlVMTCkKIAkJCQkJbmV3d2FsY29uc2lzdGVuY3lbcm1pZF0gPSB0cnVlOwogCQkJZm91bmQgPSB0 cnVlOwogCQl9CkBAIC0xMTYxMSw4ICsxMTYxMSw4IEBAIGNoZWNrX3dhbF9jb25zaXN0ZW5jeV9j aGVja2luZyhjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0cmEsIEd1Y1NvdXJjZSBzb3VyY2UpCiAJ CQkgKi8KIAkJCWZvciAocm1pZCA9IDA7IHJtaWQgPD0gUk1fTUFYX0lEOyBybWlkKyspCiAJCQl7 Ci0JCQkJaWYgKHBnX3N0cmNhc2VjbXAodG9rLCBSbWdyVGFibGVbcm1pZF0ucm1fbmFtZSkgPT0g MCAmJgotCQkJCQlSbWdyVGFibGVbcm1pZF0ucm1fbWFzayAhPSBOVUxMKQorCQkJCWlmIChwZ19z dHJjYXNlY21wKHRvaywgR2V0Um1ncihybWlkKS5ybV9uYW1lKSA9PSAwICYmCisJCQkJCUdldFJt Z3Iocm1pZCkucm1fbWFzayAhPSBOVUxMKQogCQkJCXsKIAkJCQkJbmV3d2FsY29uc2lzdGVuY3lb cm1pZF0gPSB0cnVlOwogCQkJCQlmb3VuZCA9IHRydWU7CmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X3Jld2luZC9wYXJzZXhsb2cuYyBiL3NyYy9iaW4vcGdfcmV3aW5kL3BhcnNleGxvZy5jCmluZGV4 IDU5ZWJhYzdkNmFhLi45ZmMxNzI5ZDg0YyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19yZXdpbmQv cGFyc2V4bG9nLmMKKysrIGIvc3JjL2Jpbi9wZ19yZXdpbmQvcGFyc2V4bG9nLmMKQEAgLTI4LDcg KzI4LDcgQEAKICAqIFJtZ3JOYW1lcyBpcyBhbiBhcnJheSBvZiByZXNvdXJjZSBtYW5hZ2VyIG5h bWVzLCB0byBtYWtlIGVycm9yIG1lc3NhZ2VzCiAgKiBhIGJpdCBuaWNlci4KICAqLwotI2RlZmlu ZSBQR19STUdSKHN5bW5hbWUsbmFtZSxyZWRvLGRlc2MsaWRlbnRpZnksc3RhcnR1cCxjbGVhbnVw LG1hc2spIFwKKyNkZWZpbmUgUEdfUk1HUihzeW1uYW1lLG5hbWUscmVkbyxkZXNjLGlkZW50aWZ5 LHN0YXJ0dXAsY2xlYW51cCxtYXNrLGRlY29kZSkgXAogICBuYW1lLAogCiBzdGF0aWMgY29uc3Qg Y2hhciAqUm1nck5hbWVzW1JNX01BWF9JRCArIDFdID0gewpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z193YWxkdW1wL3JtZ3JkZXNjLmMgYi9zcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYwppbmRl eCA4NTJkOGNhNGIxYy4uNmE0ZWJkMTMxMGIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfd2FsZHVt cC9ybWdyZGVzYy5jCisrKyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jCkBAIC0zMiw3 ICszMiw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9zdGFuZGJ5ZGVmcy5oIgogI2luY2x1ZGUgInV0 aWxzL3JlbG1hcHBlci5oIgogCi0jZGVmaW5lIFBHX1JNR1Ioc3ltbmFtZSxuYW1lLHJlZG8sZGVz YyxpZGVudGlmeSxzdGFydHVwLGNsZWFudXAsbWFzaykgXAorI2RlZmluZSBQR19STUdSKHN5bW5h bWUsbmFtZSxyZWRvLGRlc2MsaWRlbnRpZnksc3RhcnR1cCxjbGVhbnVwLG1hc2ssZGVjb2RlKSBc CiAJeyBuYW1lLCBkZXNjLCBpZGVudGlmeX0sCiAKIGNvbnN0IFJtZ3JEZXNjRGF0YSBSbWdyRGVz Y1RhYmxlW1JNX01BWF9JRCArIDFdID0gewpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNz L3JtZ3IuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdyLmgKaW5kZXggYzliNWM1NmE0YzYuLjlh ZDc5MGE1Y2QwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvcm1nci5oCisrKyBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9ybWdyLmgKQEAgLTE5LDcgKzE5LDcgQEAgdHlwZWRlZiB1aW50OCBS bWdySWQ7CiAgKiBOb3RlOiBSTV9NQVhfSUQgbXVzdCBmaXQgaW4gUm1ncklkOyB3aWRlbmluZyB0 aGF0IHR5cGUgd2lsbCBhZmZlY3QgdGhlIFhMT0cKICAqIGZpbGUgZm9ybWF0LgogICovCi0jZGVm aW5lIFBHX1JNR1Ioc3ltbmFtZSxuYW1lLHJlZG8sZGVzYyxpZGVudGlmeSxzdGFydHVwLGNsZWFu dXAsbWFzaykgXAorI2RlZmluZSBQR19STUdSKHN5bW5hbWUsbmFtZSxyZWRvLGRlc2MsaWRlbnRp Znksc3RhcnR1cCxjbGVhbnVwLG1hc2ssZGVjb2RlKSBcCiAJc3ltbmFtZSwKIAogdHlwZWRlZiBl bnVtIFJtZ3JJZHMKQEAgLTMxLDUgKzMxLDE0IEBAIHR5cGVkZWYgZW51bSBSbWdySWRzCiAjdW5k ZWYgUEdfUk1HUgogCiAjZGVmaW5lIFJNX01BWF9JRAkJCQkoUk1fTkVYVF9JRCAtIDEpCisjZGVm aW5lIFJNX0NVU1RPTV9NSU5fSUQJCTEyOAorI2RlZmluZSBSTV9DVVNUT01fTUFYX0lECQlVSU5U OF9NQVgKKworLyoKKyAqIFJtZ3JJZCB0byB1c2UgZm9yIGV4dGVuc2lvbnMgdGhhdCByZXF1aXJl IGFuIFJtZ3JJZCwgYnV0IGFyZSBzdGlsbCBpbgorICogZGV2ZWxvcG1lbnQgYW5kIGhhdmUgbm90 IHJlc2VydmVkIHRoZWlyIG93biB1bmlxdWUgUm1ncklkIHlldC4gU2VlOgorICogaHR0cHM6Ly93 aWtpLnBvc3RncmVzcWwub3JnL3dpa2kvRXh0ZW5zaWJsZVJtZ3IKKyAqLworI2RlZmluZSBSTV9F WFBFUklNRU5UQUxfSUQJCTEyOAogCiAjZW5kaWYJCQkJCQkJLyogUk1HUl9IICovCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9y bWdybGlzdC5oCmluZGV4IGY1ODJjZjUzNWY2Li5iMWZmYTI3MjhiNSAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3Js aXN0LmgKQEAgLTI1LDI1ICsyNSwyNSBAQAogICovCiAKIC8qIHN5bWJvbCBuYW1lLCB0ZXh0dWFs IG5hbWUsIHJlZG8sIGRlc2MsIGlkZW50aWZ5LCBzdGFydHVwLCBjbGVhbnVwICovCi1QR19STUdS KFJNX1hMT0dfSUQsICJYTE9HIiwgeGxvZ19yZWRvLCB4bG9nX2Rlc2MsIHhsb2dfaWRlbnRpZnks IE5VTEwsIE5VTEwsIE5VTEwpCi1QR19STUdSKFJNX1hBQ1RfSUQsICJUcmFuc2FjdGlvbiIsIHhh Y3RfcmVkbywgeGFjdF9kZXNjLCB4YWN0X2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMKQotUEdf Uk1HUihSTV9TTUdSX0lELCAiU3RvcmFnZSIsIHNtZ3JfcmVkbywgc21ncl9kZXNjLCBzbWdyX2lk ZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMKQotUEdfUk1HUihSTV9DTE9HX0lELCAiQ0xPRyIsIGNs b2dfcmVkbywgY2xvZ19kZXNjLCBjbG9nX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMKQotUEdf Uk1HUihSTV9EQkFTRV9JRCwgIkRhdGFiYXNlIiwgZGJhc2VfcmVkbywgZGJhc2VfZGVzYywgZGJh c2VfaWRlbnRpZnksIE5VTEwsIE5VTEwsIE5VTEwpCi1QR19STUdSKFJNX1RCTFNQQ19JRCwgIlRh Ymxlc3BhY2UiLCB0YmxzcGNfcmVkbywgdGJsc3BjX2Rlc2MsIHRibHNwY19pZGVudGlmeSwgTlVM TCwgTlVMTCwgTlVMTCkKLVBHX1JNR1IoUk1fTVVMVElYQUNUX0lELCAiTXVsdGlYYWN0IiwgbXVs dGl4YWN0X3JlZG8sIG11bHRpeGFjdF9kZXNjLCBtdWx0aXhhY3RfaWRlbnRpZnksIE5VTEwsIE5V TEwsIE5VTEwpCi1QR19STUdSKFJNX1JFTE1BUF9JRCwgIlJlbE1hcCIsIHJlbG1hcF9yZWRvLCBy ZWxtYXBfZGVzYywgcmVsbWFwX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMKQotUEdfUk1HUihS TV9TVEFOREJZX0lELCAiU3RhbmRieSIsIHN0YW5kYnlfcmVkbywgc3RhbmRieV9kZXNjLCBzdGFu ZGJ5X2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMKQotUEdfUk1HUihSTV9IRUFQMl9JRCwgIkhl YXAyIiwgaGVhcDJfcmVkbywgaGVhcDJfZGVzYywgaGVhcDJfaWRlbnRpZnksIE5VTEwsIE5VTEws IGhlYXBfbWFzaykKLVBHX1JNR1IoUk1fSEVBUF9JRCwgIkhlYXAiLCBoZWFwX3JlZG8sIGhlYXBf ZGVzYywgaGVhcF9pZGVudGlmeSwgTlVMTCwgTlVMTCwgaGVhcF9tYXNrKQotUEdfUk1HUihSTV9C VFJFRV9JRCwgIkJ0cmVlIiwgYnRyZWVfcmVkbywgYnRyZWVfZGVzYywgYnRyZWVfaWRlbnRpZnks IGJ0cmVlX3hsb2dfc3RhcnR1cCwgYnRyZWVfeGxvZ19jbGVhbnVwLCBidHJlZV9tYXNrKQotUEdf Uk1HUihSTV9IQVNIX0lELCAiSGFzaCIsIGhhc2hfcmVkbywgaGFzaF9kZXNjLCBoYXNoX2lkZW50 aWZ5LCBOVUxMLCBOVUxMLCBoYXNoX21hc2spCi1QR19STUdSKFJNX0dJTl9JRCwgIkdpbiIsIGdp bl9yZWRvLCBnaW5fZGVzYywgZ2luX2lkZW50aWZ5LCBnaW5feGxvZ19zdGFydHVwLCBnaW5feGxv Z19jbGVhbnVwLCBnaW5fbWFzaykKLVBHX1JNR1IoUk1fR0lTVF9JRCwgIkdpc3QiLCBnaXN0X3Jl ZG8sIGdpc3RfZGVzYywgZ2lzdF9pZGVudGlmeSwgZ2lzdF94bG9nX3N0YXJ0dXAsIGdpc3RfeGxv Z19jbGVhbnVwLCBnaXN0X21hc2spCi1QR19STUdSKFJNX1NFUV9JRCwgIlNlcXVlbmNlIiwgc2Vx X3JlZG8sIHNlcV9kZXNjLCBzZXFfaWRlbnRpZnksIE5VTEwsIE5VTEwsIHNlcV9tYXNrKQotUEdf Uk1HUihSTV9TUEdJU1RfSUQsICJTUEdpc3QiLCBzcGdfcmVkbywgc3BnX2Rlc2MsIHNwZ19pZGVu dGlmeSwgc3BnX3hsb2dfc3RhcnR1cCwgc3BnX3hsb2dfY2xlYW51cCwgc3BnX21hc2spCi1QR19S TUdSKFJNX0JSSU5fSUQsICJCUklOIiwgYnJpbl9yZWRvLCBicmluX2Rlc2MsIGJyaW5faWRlbnRp ZnksIE5VTEwsIE5VTEwsIGJyaW5fbWFzaykKLVBHX1JNR1IoUk1fQ09NTUlUX1RTX0lELCAiQ29t bWl0VHMiLCBjb21taXRfdHNfcmVkbywgY29tbWl0X3RzX2Rlc2MsIGNvbW1pdF90c19pZGVudGlm eSwgTlVMTCwgTlVMTCwgTlVMTCkKLVBHX1JNR1IoUk1fUkVQTE9SSUdJTl9JRCwgIlJlcGxpY2F0 aW9uT3JpZ2luIiwgcmVwbG9yaWdpbl9yZWRvLCByZXBsb3JpZ2luX2Rlc2MsIHJlcGxvcmlnaW5f aWRlbnRpZnksIE5VTEwsIE5VTEwsIE5VTEwpCi1QR19STUdSKFJNX0dFTkVSSUNfSUQsICJHZW5l cmljIiwgZ2VuZXJpY19yZWRvLCBnZW5lcmljX2Rlc2MsIGdlbmVyaWNfaWRlbnRpZnksIE5VTEws IE5VTEwsIGdlbmVyaWNfbWFzaykKLVBHX1JNR1IoUk1fTE9HSUNBTE1TR19JRCwgIkxvZ2ljYWxN ZXNzYWdlIiwgbG9naWNhbG1zZ19yZWRvLCBsb2dpY2FsbXNnX2Rlc2MsIGxvZ2ljYWxtc2dfaWRl bnRpZnksIE5VTEwsIE5VTEwsIE5VTEwpCitQR19STUdSKFJNX1hMT0dfSUQsICJYTE9HIiwgeGxv Z19yZWRvLCB4bG9nX2Rlc2MsIHhsb2dfaWRlbnRpZnksIE5VTEwsIE5VTEwsIE5VTEwsIHhsb2df ZGVjb2RlKQorUEdfUk1HUihSTV9YQUNUX0lELCAiVHJhbnNhY3Rpb24iLCB4YWN0X3JlZG8sIHhh Y3RfZGVzYywgeGFjdF9pZGVudGlmeSwgTlVMTCwgTlVMTCwgTlVMTCwgeGFjdF9kZWNvZGUpCitQ R19STUdSKFJNX1NNR1JfSUQsICJTdG9yYWdlIiwgc21ncl9yZWRvLCBzbWdyX2Rlc2MsIHNtZ3Jf aWRlbnRpZnksIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCitQR19STUdSKFJNX0NMT0dfSUQsICJD TE9HIiwgY2xvZ19yZWRvLCBjbG9nX2Rlc2MsIGNsb2dfaWRlbnRpZnksIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwpCitQR19STUdSKFJNX0RCQVNFX0lELCAiRGF0YWJhc2UiLCBkYmFzZV9yZWRvLCBk YmFzZV9kZXNjLCBkYmFzZV9pZGVudGlmeSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKK1BHX1JN R1IoUk1fVEJMU1BDX0lELCAiVGFibGVzcGFjZSIsIHRibHNwY19yZWRvLCB0YmxzcGNfZGVzYywg dGJsc3BjX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQorUEdfUk1HUihSTV9NVUxU SVhBQ1RfSUQsICJNdWx0aVhhY3QiLCBtdWx0aXhhY3RfcmVkbywgbXVsdGl4YWN0X2Rlc2MsIG11 bHRpeGFjdF9pZGVudGlmeSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKK1BHX1JNR1IoUk1fUkVM TUFQX0lELCAiUmVsTWFwIiwgcmVsbWFwX3JlZG8sIHJlbG1hcF9kZXNjLCByZWxtYXBfaWRlbnRp ZnksIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCitQR19STUdSKFJNX1NUQU5EQllfSUQsICJTdGFu ZGJ5Iiwgc3RhbmRieV9yZWRvLCBzdGFuZGJ5X2Rlc2MsIHN0YW5kYnlfaWRlbnRpZnksIE5VTEws IE5VTEwsIE5VTEwsIHN0YW5kYnlfZGVjb2RlKQorUEdfUk1HUihSTV9IRUFQMl9JRCwgIkhlYXAy IiwgaGVhcDJfcmVkbywgaGVhcDJfZGVzYywgaGVhcDJfaWRlbnRpZnksIE5VTEwsIE5VTEwsIGhl YXBfbWFzaywgaGVhcDJfZGVjb2RlKQorUEdfUk1HUihSTV9IRUFQX0lELCAiSGVhcCIsIGhlYXBf cmVkbywgaGVhcF9kZXNjLCBoZWFwX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBoZWFwX21hc2ssIGhl YXBfZGVjb2RlKQorUEdfUk1HUihSTV9CVFJFRV9JRCwgIkJ0cmVlIiwgYnRyZWVfcmVkbywgYnRy ZWVfZGVzYywgYnRyZWVfaWRlbnRpZnksIGJ0cmVlX3hsb2dfc3RhcnR1cCwgYnRyZWVfeGxvZ19j bGVhbnVwLCBidHJlZV9tYXNrLCBOVUxMKQorUEdfUk1HUihSTV9IQVNIX0lELCAiSGFzaCIsIGhh c2hfcmVkbywgaGFzaF9kZXNjLCBoYXNoX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBoYXNoX21hc2ss IE5VTEwpCitQR19STUdSKFJNX0dJTl9JRCwgIkdpbiIsIGdpbl9yZWRvLCBnaW5fZGVzYywgZ2lu X2lkZW50aWZ5LCBnaW5feGxvZ19zdGFydHVwLCBnaW5feGxvZ19jbGVhbnVwLCBnaW5fbWFzaywg TlVMTCkKK1BHX1JNR1IoUk1fR0lTVF9JRCwgIkdpc3QiLCBnaXN0X3JlZG8sIGdpc3RfZGVzYywg Z2lzdF9pZGVudGlmeSwgZ2lzdF94bG9nX3N0YXJ0dXAsIGdpc3RfeGxvZ19jbGVhbnVwLCBnaXN0 X21hc2ssIE5VTEwpCitQR19STUdSKFJNX1NFUV9JRCwgIlNlcXVlbmNlIiwgc2VxX3JlZG8sIHNl cV9kZXNjLCBzZXFfaWRlbnRpZnksIE5VTEwsIE5VTEwsIHNlcV9tYXNrLCBOVUxMKQorUEdfUk1H UihSTV9TUEdJU1RfSUQsICJTUEdpc3QiLCBzcGdfcmVkbywgc3BnX2Rlc2MsIHNwZ19pZGVudGlm eSwgc3BnX3hsb2dfc3RhcnR1cCwgc3BnX3hsb2dfY2xlYW51cCwgc3BnX21hc2ssIE5VTEwpCitQ R19STUdSKFJNX0JSSU5fSUQsICJCUklOIiwgYnJpbl9yZWRvLCBicmluX2Rlc2MsIGJyaW5faWRl bnRpZnksIE5VTEwsIE5VTEwsIGJyaW5fbWFzaywgTlVMTCkKK1BHX1JNR1IoUk1fQ09NTUlUX1RT X0lELCAiQ29tbWl0VHMiLCBjb21taXRfdHNfcmVkbywgY29tbWl0X3RzX2Rlc2MsIGNvbW1pdF90 c19pZGVudGlmeSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKK1BHX1JNR1IoUk1fUkVQTE9SSUdJ Tl9JRCwgIlJlcGxpY2F0aW9uT3JpZ2luIiwgcmVwbG9yaWdpbl9yZWRvLCByZXBsb3JpZ2luX2Rl c2MsIHJlcGxvcmlnaW5faWRlbnRpZnksIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCitQR19STUdS KFJNX0dFTkVSSUNfSUQsICJHZW5lcmljIiwgZ2VuZXJpY19yZWRvLCBnZW5lcmljX2Rlc2MsIGdl bmVyaWNfaWRlbnRpZnksIE5VTEwsIE5VTEwsIGdlbmVyaWNfbWFzaywgTlVMTCkKK1BHX1JNR1Io Uk1fTE9HSUNBTE1TR19JRCwgIkxvZ2ljYWxNZXNzYWdlIiwgbG9naWNhbG1zZ19yZWRvLCBsb2dp Y2FsbXNnX2Rlc2MsIGxvZ2ljYWxtc2dfaWRlbnRpZnksIE5VTEwsIE5VTEwsIE5VTEwsIGxvZ2lj YWxtc2dfZGVjb2RlKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dfaW50ZXJu YWwuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nX2ludGVybmFsLmgKaW5kZXggZGNmNDFlOTI1 N2MuLmVlNzQyMjA5N2M2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ19pbnRl cm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nX2ludGVybmFsLmgKQEAgLTI4Nyw2 ICsyODcsOSBAQCB0eXBlZGVmIGVudW0KIAlSRUNPVkVSWV9UQVJHRVRfQUNUSU9OX1NIVVRET1dO CiB9CQkJUmVjb3ZlcnlUYXJnZXRBY3Rpb247CiAKK3N0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250 ZXh0Oworc3RydWN0IFhMb2dSZWNvcmRCdWZmZXI7CisKIC8qCiAgKiBNZXRob2QgdGFibGUgZm9y IHJlc291cmNlIG1hbmFnZXJzLgogICoKQEAgLTMxMiwxMCArMzE1LDE1IEBAIHR5cGVkZWYgc3Ry dWN0IFJtZ3JEYXRhCiAJdm9pZAkJKCpybV9zdGFydHVwKSAodm9pZCk7CiAJdm9pZAkJKCpybV9j bGVhbnVwKSAodm9pZCk7CiAJdm9pZAkJKCpybV9tYXNrKSAoY2hhciAqcGFnZWRhdGEsIEJsb2Nr TnVtYmVyIGJsa25vKTsKKwl2b2lkCQkoKnJtX2RlY29kZSkgKHN0cnVjdCBMb2dpY2FsRGVjb2Rp bmdDb250ZXh0ICpjdHgsCisJCQkJCQkJICBzdHJ1Y3QgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsK IH0gUm1nckRhdGE7CiAKIGV4dGVybiBjb25zdCBSbWdyRGF0YSBSbWdyVGFibGVbXTsKIAorZXh0 ZXJuIFJtZ3JEYXRhIEdldEN1c3RvbVJtZ3IoUm1ncklkIHJtaWQpOworZXh0ZXJuIHZvaWQgUmVn aXN0ZXJDdXN0b21SbWdyKFJtZ3JJZCBybWlkLCBSbWdyRGF0YSAqcm1ncik7CisKIC8qCiAgKiBF eHBvcnRlZCB0byBzdXBwb3J0IHhsb2cgc3dpdGNoaW5nIGZyb20gY2hlY2twb2ludGVyCiAgKi8K QEAgLTMzMyw0ICszNDEsOCBAQCBleHRlcm4gYm9vbCBJbkFyY2hpdmVSZWNvdmVyeTsKIGV4dGVy biBib29sIFN0YW5kYnlNb2RlOwogZXh0ZXJuIGNoYXIgKnJlY292ZXJ5UmVzdG9yZUNvbW1hbmQ7 CiAKKyNkZWZpbmUgR2V0QnVpbHRpblJtZ3Iocm1pZCkgUm1nclRhYmxlWyhybWlkKV0KKyNkZWZp bmUgR2V0Um1ncihybWlkKSAoKHJtaWQgPCBSTV9DVVNUT01fTUlOX0lEKSA/IFwKKwkJCQkJICAg R2V0QnVpbHRpblJtZ3Iocm1pZCkgOiBHZXRDdXN0b21SbWdyKHJtaWQpKQorCiAjZW5kaWYJCQkJ CQkJLyogWExPR19JTlRFUk5BTF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9kZWNvZGUuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5oCmluZGV4IDY5 OTE4MDgwYmI1Li45Y2M0NzgzYzNiYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vZGVjb2RlLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmgKQEAgLTE0 LDcgKzE0LDIxIEBACiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgogI2luY2x1ZGUg InJlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCIKIAotdm9pZAkJTG9naWNhbERlY29kaW5nUHJv Y2Vzc1JlY29yZChMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCit0eXBlZGVmIHN0cnVjdCBY TG9nUmVjb3JkQnVmZmVyCit7CisJWExvZ1JlY1B0cglvcmlncHRyOworCVhMb2dSZWNQdHIJZW5k cHRyOworCVhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkOworfSBYTG9nUmVjb3JkQnVmZmVyOworCitl eHRlcm4gdm9pZCB4bG9nX2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dS ZWNvcmRCdWZmZXIgKmJ1Zik7CitleHRlcm4gdm9pZCBoZWFwX2RlY29kZShMb2dpY2FsRGVjb2Rp bmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7CitleHRlcm4gdm9pZCBoZWFw Ml9kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpi dWYpOworZXh0ZXJuIHZvaWQgeGFjdF9kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4 LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOworZXh0ZXJuIHZvaWQgc3RhbmRieV9kZWNvZGUoTG9n aWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOworZXh0ZXJu IHZvaWQgbG9naWNhbG1zZ19kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9n UmVjb3JkQnVmZmVyICpidWYpOworCitleHRlcm4gdm9pZAlMb2dpY2FsRGVjb2RpbmdQcm9jZXNz UmVjb3JkKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkJCQkgWExvZ1JlYWRl clN0YXRlICpyZWNvcmQpOwogCiAjZW5kaWYK --=-zzRkBhglQ8JiZY71GnR3--