Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w7exN-005ZLh-2j for pgsql-hackers@arkaria.postgresql.org; Tue, 31 Mar 2026 19:40:58 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w7exM-00CtpP-0H for pgsql-hackers@arkaria.postgresql.org; Tue, 31 Mar 2026 19:40:56 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w7exL-00CtpH-2D for pgsql-hackers@lists.postgresql.org; Tue, 31 Mar 2026 19:40:56 +0000 Received: from mail-lf1-x132.google.com ([2a00:1450:4864:20::132]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w7exJ-00000002E9W-0mCM for pgsql-hackers@lists.postgresql.org; Tue, 31 Mar 2026 19:40:55 +0000 Received: by mail-lf1-x132.google.com with SMTP id 2adb3069b0e04-5a2a58b0cbdso5321257e87.2 for ; Tue, 31 Mar 2026 12:40:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774986052; cv=none; d=google.com; s=arc-20240605; b=PCLF7KBU9+F/5FUqvCiW4Z75f8UoETJfDzPxEfODuzwGXsL7TEZ5wWhG75hd44VJkp wcZ4gPR2jjNNqYCHxagDfiPIIR1BDUSwbMrF1jHgcW9O25iEk42oQd9ta04nVCeD1mFJ IqOXYw02WuqpaATu9rq9BmDYoIn5urTFUQX7mr+7PL2BztdGeZfahCgqrYAvL3KUPPXm ONYDYEhc631Rjw3CVfGDpkc3Y4+038ahR5WPGqPkVHfWG7jI9pwRqvoywkCERnyzkH8B 1DGyL27ee+WpijxPkm090AnaUczYvOJvAwFk3+Lse2L+X0gfePmFna0K+yK+BvwBG2zX jXog== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=QDdnfmwgwD8CkJjvS7g7T3Z3W6H48fi1bje1TByQaTA=; fh=gtuLA/DeSdxSZPauxd7NOGmnFurJ6aInnMZ+DQEHFgY=; b=AHWhhslQHZ9z/rjg1wJycVmm4NsCSzD/5ejhFglrVmrEIIlToDdot+seUtrr3HDy46 vJaDXi0MCtDZ8qFBNYjH5ImoD2+RH3jdaTHkgt435+utyRdpJU8G42RFOMTwQuA1F/IJ WqQmq3RbsA4UpiwDBGmqkUi0MqQvbVnCR5BymoGGz/UJ9+2ursYYl3kUDesRcpN1iKhj YDWQMxmrPYGnEDBGBjHaCLN2f65PU0Zv9AKjH6m50ylrXZn/UPIIbUy19VPWHcORiC9o hBZIdqa770FMLDAK+9srddi3Rppl1dlBx9C7NJ6c4O6VBB25rMoZMtEP6+c/ogNsBa5n x0hA==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774986052; x=1775590852; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=QDdnfmwgwD8CkJjvS7g7T3Z3W6H48fi1bje1TByQaTA=; b=PTbZr6yfFFN6lC8HF+Byerq+eWTfuKL4NSJveK4e8pZA1uEyjArCCFQTKrs+31XxQL GfyryTKVOyc5HSfhErPIimVUVXj6EOdReMO6i49Z23MCzOs9psy62W9es4PD6fRz5A8h oqqliq51uLCTQWRMBU6mqll1E0jR2qK95UwDG4q11amyrAnDvLzRG1WymuShoKyBNTrU eZE1iNUCHzhQ4nZlw73J7/49j30rbn3493Ypo2cajxD5fYfbQ2PRBVrrYzo9SnHZGnLs ErQwbkcl6DeVKd85PudDXtfu9Xu0xQG6Saqr43Mut3B/EMTffqJXGiP2pmMIYPfKw7Hb mGOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774986052; x=1775590852; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=QDdnfmwgwD8CkJjvS7g7T3Z3W6H48fi1bje1TByQaTA=; b=IXfaltDCmAGfDnovXt5nmc0R7Xw8cR8VWTFkWV66/YEi7TObTbGD5IfaND4SaE29rO WemkaFvl9dWXwd/i/FJnWUy9OI72WUXqcgvfRFIvoydxJMtzBQgIeXy8+77Bfzs9OCcB 8OnzPBXItNaNH7xlrAbNqzfVoY31jBv520tf3lPPkh6BwE4nliVdq+81NkkUJnGpq1hQ iuv/TjYcY1Bp4BOuFRxMhszsngiFDPFQof1D8DelVo8l7cdhjquuCHDyC8eAZ9R/G6QO Uu6n0D3GgSMWKt7wBRQWrMZ+QCR3l/Zx1ZcCzjkg7zc0oBJUFsSY//TcAn6B9bZiAva2 Ur2w== X-Forwarded-Encrypted: i=1; AJvYcCXPV7sBTCclqLFJ2QTgawwik1nCo/hW1N0MZE1swvraxMWsl0Ae/fUjp0dGCCQtm96vDedqk3AH8VCWTfyc@lists.postgresql.org X-Gm-Message-State: AOJu0YyQrPKKg6FGHvdVpO3k0mV+QVwprraKprNoBeAe4lxP5btoMkeV s+1rRDA54k8oYEckkYc4pC1cIi/40F2KGORr9Ob/DW/C7ajPrfbQI3z7F2m8lFWOqDVtMWuQb/H GPjvYVmoFLMv1I6JYRlCDX96VJ4Ndj3I= X-Gm-Gg: ATEYQzx5V2oFJbbgudvQkV6MX8VpmaXLkwtV+XHZGGv4wPNyzUmMRseGnlmqyXeDZHR /LvXzbQfEiziJQfBibdtl/yU1tBvQo+dW3j2hU8l+JQLQMJmVcvrdeRql3cY3nlgj1o7fUbsHCK 3bf4q6IBUez+Mlh603lPSlFT3SXbyMZnYgeYhCoWKRCa55vomWVc7QbU9fL3doucq1r1c9BfXxT YbqgfF3z4u7Fe89QGh+DMMhK7xBvBrcvniVUtmzeg+41tX+0AZ/8o6DNE2CiZsTh8DzPwFQEw4W +IVVdV4TpkFo1PUeeUOvWdxozmUKlxyi5wcIM4A= X-Received: by 2002:a05:6512:3981:b0:5a1:33b6:2b6d with SMTP id 2adb3069b0e04-5a2c1f0d4d2mr201946e87.14.1774986051948; Tue, 31 Mar 2026 12:40:51 -0700 (PDT) MIME-Version: 1.0 References: <0c28fbd1-3320-4e9b-815c-6d62753aa063@wi3ck.info> In-Reply-To: From: Masahiko Sawada Date: Tue, 31 Mar 2026 12:40:14 -0700 X-Gm-Features: AQROBzBooCw6Pwo1nOgzb0Q1lFn3vh5hfCsUvzNZn-ufZ1a_9yvp_K6Zgtsglpo Message-ID: Subject: Re: Initial COPY of Logical Replication is too slow To: "Zhijie Hou (Fujitsu)" Cc: Amit Kapila , Peter Smith , Jan Wieck , "pgsql-hackers@lists.postgresql.org" Content-Type: multipart/mixed; boundary="0000000000001bb0a0064e572544" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000001bb0a0064e572544 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Mar 31, 2026 at 5:07=E2=80=AFAM Zhijie Hou (Fujitsu) wrote: > > On Tuesday, March 31, 2026 5:36 PM Amit Kapila = wrote: > > > > On Wed, Mar 25, 2026 at 2:19=E2=80=AFPM Peter Smith > > wrote: > > > > > > There are many return points, and most of those "if" blocks cannot > > > fall through (they return). > > > > > > I found it slightly difficult to read the code because I kept having > > > to think, "OK, if we reached here, it means pubviaroot must be false,= " > > > or "OK, if we reached this far, then puballtables must be false, and > > > pubviaroot must be false," etc. > > > > > > > I can't say exactly why, but I find it difficult to read this function.= So, I share > > your concerns about the code of this function. > > Because of its complexity it is difficult to ascertain that the functio= nality is > > correct or we missed something. Also, considering it is correct today, = in its > > current form, it may become difficult to enhance it in future. > > > > I attempted to refactor the code a bit based on my preferred style, as sh= own in > the attachment. While the number of return points couldn't be reduced, I = tried > to eliminate if-else branches where possible. Sharing this top-up patch a= s a > reference for an alternative style that reduces code size. > Thanks. It looks like a good refactoring! I'd prefer to free the ancestors list to avoid memory leak. I've attached the patch that incorporated all comments I got so far. Feedback is very welcome. Regards, --=20 Masahiko Sawada Amazon Web Services: https://aws.amazon.com --0000000000001bb0a0064e572544 Content-Type: application/octet-stream; name="v7-0001-Add-target_relid-parameter-to-pg_get_publication_.patch" Content-Disposition: attachment; filename="v7-0001-Add-target_relid-parameter-to-pg_get_publication_.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnf0s30p0 RnJvbSBmNjRiNmQ0NjExZmExNDY0MzM3MDlkMzBiOWM4Mjg4ZDE1ZDJlMjQwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXNhaGlrbyBTYXdhZGEgPHNhd2FkYS5tc2hrQGdtYWlsLmNv bT4KRGF0ZTogRnJpLCAyNyBGZWIgMjAyNiAxNTo0MjozOCAtMDgwMApTdWJqZWN0OiBbUEFUQ0gg djddIEFkZCB0YXJnZXRfcmVsaWQgcGFyYW1ldGVyIHRvIHBnX2dldF9wdWJsaWNhdGlvbl90YWJs ZXMoKS4KCldoZW4gYSB0YWJsZXN5bmMgd29ya2VyIGNoZWNrcyB3aGV0aGVyIGEgc3BlY2lmaWMg dGFibGUgaXMgcHVibGlzaGVkLAppdCBwcmV2aW91c2x5IGNhbGxlZCBwZ19nZXRfcHVibGljYXRp b25fdGFibGVzKCkgYW5kIGZpbHRlcmVkIHRoZQpyZXN1bHQgYnkgcmVsaWQgb24gdGhlIHN1YnNj cmliZXIgc2lkZS4gVGhpcyBmb3JjZWQgYSBmdWxsIGVudW1lcmF0aW9uCm9mIGFsbCB0YWJsZXMg aW4gdGhlIHB1YmxpY2F0aW9uIGJlZm9yZSBhbnkgZmlsdGVyaW5nIGNvdWxkIG9jY3VyLiBGb3IK cHVibGljYXRpb25zIGNvdmVyaW5nIGEgbGFyZ2UgbnVtYmVyIG9mIHRhYmxlcywgdGhpcyByZXN1 bHRlZCBpbgpleHBlbnNpdmUgc2NhbnMgb24gdGhlIHB1Ymxpc2hlciBhbmQgdW5uZWNlc3Nhcnkg b3ZlcmhlYWQuCgpUaGlzIGNvbW1pdCBhZGRzIGEgbmV3IG92ZXJsb2FkZWQgZm9ybSBvZiBwZ19n ZXRfcHVibGljYXRpb25fdGFibGVzKCkKdGhhdCBhY2NlcHRzIGFuIGFycmF5IG9mIHB1YmxpY2F0 aW9uIG5hbWVzIGFuZCBhIHRhcmdldCB0YWJsZQpPSUQuIEluc3RlYWQgb2YgZW51bWVyYXRpbmcg YWxsIHB1Ymxpc2hlZCB0YWJsZXMsIGl0IGV2YWx1YXRlcwptZW1iZXJzaGlwIGZvciB0aGUgc3Bl Y2lmaWVkIHJlbGF0aW9uIHZpYSBzeXNjYWNoZSBsb29rdXBzLCB1c2luZyB0aGUKbmV3IGlzX3Rh YmxlX3B1Ymxpc2hhYmxlX2luX3B1YmxpY2F0aW9uKCkgaGVscGVyLiBUaGlzIGhlbHBlcgpjb3Jy ZWN0bHkgYWNjb3VudHMgZm9yIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290LCBBTEwgVEFCTEVT IHdpdGgKRVhDRVBUIGNsYXVzZXMsIHNjaGVtYSBwdWJsaWNhdGlvbnMsIGFuZCBwYXJ0aXRpb24g aW5oZXJpdGFuY2UsIHdoaWxlCmF2b2lkaW5nIHRoZSBvdmVyaGVhZCBvZiBidWlsZGluZyB0aGUg Y29tcGxldGUgcHVibGlzaGVkIHRhYmxlIGxpc3QuCgpUaGUgZXhpc3RpbmcgYSBWQVJJQURJQyBh cnJheSBmb3JtIG9mIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMoKSBpcwpwcmVzZXJ2ZWQgZm9y IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFRhYmxlc3luYyB3b3JrZXJzIHVzZSB0aGUgbmV3CnR3 by1hcmd1bWVudCBmb3JtIHdoZW4gY29ubmVjdGVkIHRvIGEgcHVibGlzaGVyIHJ1bm5pbmcgUG9z dGdyZVNRTCAxOQpvciBsYXRlci4KCkJ1bXAgY2F0YWxvZyB2ZXJzaW9uLgoKUmVwb3J0ZWQtYnk6 IE1hcmNvcyBQZWdvcmFybyA8bWFyY29zQGYxMC5jb20uYnI+ClJldmlld2VkLWJ5OiBaaGlqaWUg SG91IDxob3V6ai5mbnN0QGZ1aml0c3UuY29tPgpSZXZpZXdlZC1ieTogTWF0aGV1cyBBbGNhbnRh cmEgPG1hdGhldXNzc2lsdjk3QGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEFtaXQgS2FwaWxhIDxh bWl0LmthcGlsYTE2QGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IFBldGVyIFNtaXRoIDxzbWl0aHBi MjI1MEBnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBIYXlhdG8gS3Vyb2RhIDxrdXJvZGEuaGF5YXRv QGZ1aml0c3UuY29tPgpSZXZpZXdlZC1ieTogQ2hhbyBMaSA8bGkuZXZhbi5jaGFvQGdtYWlsLmNv bT4KUmV2aWV3ZWQtYnk6IEhhb3lhbiBXYW5nIDx3YW5naGFveWFuMjBAMTYzLmNvbT4KRGlzY3Vz c2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUItSkx3YkJGTnVBU3lFblpXUDBUY2s5dU5rdGhC WnFpNldvWE5ldlVUNittVjhYbUFAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC9jYXRh bG9nL3BnX3B1YmxpY2F0aW9uLmMgICAgICAgIHwgMjU2ICsrKysrKysrKysrKysrKysrLS0tCiBz cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jIHwgIDcwICsrKystLQog c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYyB8ICAgNyArLQogc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAgICAgICAgICB8ICAxMSArLQogc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oICAgICAgICB8ICAgMiArCiBzcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dCAgIHwgMjI1ICsrKysrKysrKysrKysrKysr CiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwgICAgICAgIHwgMTA3ICsrKysr KysrCiA3IGZpbGVzIGNoYW5nZWQsIDYyNCBpbnNlcnRpb25zKCspLCA1NCBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgYi9zcmMv YmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKaW5kZXggYTMxOTJmMTlkMzUuLmI5MGU5 Nzk0ZTdkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMK KysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCkBAIC0xNjMsNiArMTYz LDM3IEBAIGlzX3B1Ymxpc2hhYmxlX3JlbGF0aW9uKFJlbGF0aW9uIHJlbCkKIAlyZXR1cm4gaXNf cHVibGlzaGFibGVfY2xhc3MoUmVsYXRpb25HZXRSZWxpZChyZWwpLCByZWwtPnJkX3JlbCk7CiB9 CiAKKy8qCisgKiBTaW1pbGFyIHRvIGlzX3B1Ymxpc2hhYmxlX2NsYXNzKCkgYnV0IGNoZWNrcyB3 aGV0aGVyIHRoZSBnaXZlbiBPSUQKKyAqIGlzIGEgcHVibGlzaGFibGUgInRhYmxlIiBvciBub3Qu CisgKi8KK3N0YXRpYyBib29sCitpc19wdWJsaXNoYWJsZV90YWJsZShPaWQgdGFibGVvaWQpCit7 CisJSGVhcFR1cGxlCXR1cGxlOworCUZvcm1fcGdfY2xhc3MgcmVsZm9ybTsKKworCXR1cGxlID0g U2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwgT2JqZWN0SWRHZXREYXR1bSh0YWJsZW9pZCkpOworCWlm ICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCisJCXJldHVybiBmYWxzZTsKKworCXJlbGZvcm0g PSAoRm9ybV9wZ19jbGFzcykgR0VUU1RSVUNUKHR1cGxlKTsKKworCS8qCisJICogU2VxdWVuY2Vz IGFyZSBwdWJsaXNoYWJsZSBhY2NvcmRpbmcgdG8gaXNfcHVibGlzaGFibGVfY2xhc3MoKSBzbwor CSAqIGV4cGxpY2l0bHkgZXhjbHVkZSBoZXJlLgorCSAqLworCWlmIChyZWxmb3JtLT5yZWxraW5k ICE9IFJFTEtJTkRfU0VRVUVOQ0UgJiYKKwkJaXNfcHVibGlzaGFibGVfY2xhc3ModGFibGVvaWQs IHJlbGZvcm0pKQorCXsKKwkJUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsKKwkJcmV0dXJuIHRydWU7 CisJfQorCisJUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKIC8q CiAgKiBTUUwtY2FsbGFibGUgdmFyaWFudCBvZiB0aGUgYWJvdmUKICAqCkBAIC00NTEsNiArNDgy LDI2IEBAIEdldFRvcE1vc3RBbmNlc3RvckluUHVibGljYXRpb24oT2lkIHB1Ym9pZCwgTGlzdCAq YW5jZXN0b3JzLCBpbnQgKmFuY2VzdG9yX2xldmVsCiAJcmV0dXJuIHRvcG1vc3RfcmVsaWQ7CiB9 CiAKKy8qCisgKiBBIHZhcmlhbnQgb2YgR2V0VG9wTW9zdEFuY2VzdG9ySW5QdWJsaWNhdGlvbigp IHJldHVybnMgdGhlIHRvcCBtb3N0CisgKiBwdWJsaXNoZWQgYW5jZXN0b3Igb2YgdGhlIGdpdmVu IHJlbGlkLgorICovCitPaWQKK0dldFRvcE1vc3RBbmNlc3RvckluUHVibGljYXRpb25SZWxpZChP aWQgcHViaWQsIE9pZCByZWxpZCwKKwkJCQkJCQkJCSBpbnQgKmFuY2VzdG9yX2xldmVsKQorewor CUxpc3QJICAgKmFuY2VzdG9ycyA9IGdldF9wYXJ0aXRpb25fYW5jZXN0b3JzKHJlbGlkKTsKKwlP aWQJCQlhbmNlc3RvcjsKKworCWFuY2VzdG9yID0gR2V0VG9wTW9zdEFuY2VzdG9ySW5QdWJsaWNh dGlvbihwdWJpZCwgYW5jZXN0b3JzLAorCQkJCQkJCQkJCQkgICBhbmNlc3Rvcl9sZXZlbCk7CisK KwlpZiAoYW5jZXN0b3JzKQorCQlsaXN0X2ZyZWUoYW5jZXN0b3JzKTsKKworCXJldHVybiBhbmNl c3RvcjsKK30KKwogLyoKICAqIGF0dG51bXN0b2ludDJ2ZWN0b3IKICAqCQlDb252ZXJ0IGEgQml0 bWFwc2V0IG9mIEF0dHJOdW1iZXJzIGludG8gYW4gaW50MnZlY3Rvci4KQEAgLTEyNjQsMTIgKzEz MTUsMTExIEBAIEdldFB1YmxpY2F0aW9uQnlOYW1lKGNvbnN0IGNoYXIgKnB1Ym5hbWUsIGJvb2wg bWlzc2luZ19vaykKIH0KIAogLyoKLSAqIEdldCBpbmZvcm1hdGlvbiBvZiB0aGUgdGFibGVzIGlu IHRoZSBnaXZlbiBwdWJsaWNhdGlvbiBhcnJheS4KKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdGFi bGUgb2YgdGhlIGdpdmVuIHJlbGlkIGlzIHB1Ymxpc2hlZCBmb3IgdGhlIHNwZWNpZmllZAorICog cHVibGljYXRpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBldmFsdWF0ZXMgdGhlIGVmZmVjdGl2 ZSBwdWJsaXNoZWQgT0lEIGJhc2VkIG9uIHRoZQorICogcHVibGlzaF92aWFfcGFydGl0aW9uX3Jv b3Qgc2V0dGluZywgcmF0aGVyIHRoYW4ganVzdCBjaGVja2luZyBjYXRhbG9nIGVudHJpZXMKKyAq IChlLmcuLCBwZ19wdWJsaWNhdGlvbl9yZWwpLiBGb3IgaW5zdGFuY2UsIHdoZW4gcHVibGlzaF92 aWFfcGFydGl0aW9uX3Jvb3QgaXMKKyAqIGZhbHNlLCBpdCByZXR1cm5zIGZhbHNlIGZvciBhIHBh cmVudCBwYXJ0aXRpb25lZCB0YWJsZSBhbmQgdHJ1ZSBmb3IgaXRzIGxlYWYKKyAqIHBhcnRpdGlv bnMsIGV2ZW4gaWYgdGhlIHBhcmVudCBpcyB0aGUgb25lIGV4cGxpY2l0bHkgYWRkZWQgdG8gdGhl IHB1YmxpY2F0aW9uLgogICoKLSAqIFJldHVybnMgcHViaWQsIHJlbGlkLCBjb2x1bW4gbGlzdCwg cm93IGZpbHRlciBmb3IgZWFjaCB0YWJsZS4KKyAqIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCB0 aGlzIGZ1bmN0aW9uIGF2b2lkcyB0aGUgb3ZlcmhlYWQgb2YgY29uc3RydWN0aW5nCisgKiB0aGUg Y29tcGxldGUgbGlzdCBvZiBwdWJsaXNoZWQgdGFibGVzIGR1cmluZyB0aGUgZXZhbHVhdGlvbi4g SXQgY2FuIGV4ZWN1dGUKKyAqIHF1aWNrbHkgZXZlbiB3aGVuIHRoZSBwdWJsaWNhdGlvbiBjb250 YWlucyBhIGxhcmdlIG51bWJlciBvZiByZWxhdGlvbnMuCiAgKi8KLURhdHVtCi1wZ19nZXRfcHVi bGljYXRpb25fdGFibGVzKFBHX0ZVTkNUSU9OX0FSR1MpCitzdGF0aWMgYm9vbAoraXNfdGFibGVf cHVibGlzaGFibGVfaW5fcHVibGljYXRpb24oT2lkIHJlbGlkLCBQdWJsaWNhdGlvbiAqcHViKQor eworCWJvb2wJCXJlbGlzcGFydGl0aW9uOworCisJLyoKKwkgKiBGb3Igbm9uLXB1YnZpYXJvb3Qg cHVibGljYXRpb25zLCBhIHBhcnRpdGlvbmVkIHRhYmxlIGlzIG5ldmVyIHRoZQorCSAqIGVmZmVj dGl2ZSBwdWJsaXNoZWQgT0lEOyBvbmx5IGl0cyBsZWFmIHBhcnRpdGlvbnMgY2FuIGJlLgorCSAq LworCWlmICghcHViLT5wdWJ2aWFyb290ICYmIGdldF9yZWxfcmVsa2luZChyZWxpZCkgPT0gUkVM S0lORF9QQVJUSVRJT05FRF9UQUJMRSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmVsaXNwYXJ0aXRp b24gPSBnZXRfcmVsX3JlbGlzcGFydGl0aW9uKHJlbGlkKTsKKworCWlmIChwdWItPmFsbHRhYmxl cykKKwl7CisJCU9pZAkJCXRhcmdldF9yZWxpZCA9IHJlbGlkOworCisJCS8qCisJCSAqIEFMTCBU QUJMRVMgd2l0aCBwdWJ2aWFyb290IGluY2x1ZGVzIG9ubHkgcmVndWxhciB0YWJsZXMgb3IgdG9w LW1vc3QKKwkJICogcGFydGl0aW9uZWQgdGFibGVzIC0tIG5ldmVyIGNoaWxkIHBhcnRpdGlvbnMu CisJCSAqLworCQlpZiAocHViLT5wdWJ2aWFyb290ICYmIHJlbGlzcGFydGl0aW9uKQorCQkJcmV0 dXJuIGZhbHNlOworCisJCWlmIChyZWxpc3BhcnRpdGlvbikKKwkJeworCQkJTGlzdAkgICAqYW5j ZXN0b3JzID0gZ2V0X3BhcnRpdGlvbl9hbmNlc3RvcnMocmVsaWQpOworCisJCQkvKgorCQkJICog T25seSB0aGUgdG9wLW1vc3QgYW5jZXN0b3IgY2FuIGFwcGVhciBpbiB0aGUgRVhDRVBUIGNsYXVz ZS4KKwkJCSAqIFRoZXJlZm9yZSwgZm9yIGEgcGFydGl0aW9uLCBleGNsdXNpb24gbXVzdCBiZSBl dmFsdWF0ZWQgYXQgdGhlCisJCQkgKiB0b3AtbW9zdCBhbmNlc3Rvci4KKwkJCSAqLworCQkJdGFy Z2V0X3JlbGlkID0gbGxhc3Rfb2lkKGFuY2VzdG9ycyk7CisJCQlsaXN0X2ZyZWUoYW5jZXN0b3Jz KTsKKwkJfQorCisJCS8qCisJCSAqIFRoZSB0YWJsZSBpcyBwdWJsaXNoZWQgdW5sZXNzIGl0IGFw cGVhcnMgaW4gdGhlIEVYQ0VQVCBjbGF1c2UuIEFMTAorCQkgKiBUQUJMRVMgcHVibGljYXRpb25z IHN0b3JlIG9ubHkgRVhDRVBUJ2VkIHRhYmxlcyBpbgorCQkgKiBwZ19wdWJsaWNhdGlvbl9yZWws IHNvIGNoZWNraW5nIGV4aXN0ZW5jZSBpcyBzdWZmaWNpZW50LgorCQkgKi8KKwkJcmV0dXJuICFT ZWFyY2hTeXNDYWNoZUV4aXN0czIoUFVCTElDQVRJT05SRUxNQVAsCisJCQkJCQkJCQkgIE9iamVj dElkR2V0RGF0dW0odGFyZ2V0X3JlbGlkKSwKKwkJCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShw dWItPm9pZCkpOworCX0KKworCS8qCisJICogTm9uLWFsbHRhYmxlcyBwdWJsaWNhdGlvbi4KKwkg Ki8KKworCWlmIChyZWxpc3BhcnRpdGlvbiAmJgorCQlPaWRJc1ZhbGlkKEdldFRvcE1vc3RBbmNl c3RvckluUHVibGljYXRpb25SZWxpZChwdWItPm9pZCwKKwkJCQkJCQkJCQkJCQkJcmVsaWQsIE5V TEwpKSkKKwl7CisJCS8qCisJCSAqIElmIHB1YnZpYXJvb3QgaXMgdHJ1ZSwgdGhlIGFuY2VzdG9y IGlzIHB1Ymxpc2hlZCBpbnN0ZWFkIG9mIHRoZQorCQkgKiBwYXJ0aXRpb24sIHNvIGV4Y2x1ZGUg aXQuIE90aGVyd2lzZSwgdGhlIGFuY2VzdG9yIGNvdmVycyB0aGUKKwkJICogcGFydGl0aW9uLCBz byBpbmNsdWRlIGl0LgorCQkgKi8KKwkJcmV0dXJuICFwdWItPnB1YnZpYXJvb3Q7CisJfQorCisJ LyoKKwkgKiBDaGVjayB3aGV0aGVyIHRoZSB0YWJsZSBpcyBleHBsaWNpdGx5IHB1Ymxpc2hlZCB2 aWEgcGdfcHVibGljYXRpb25fcmVsCisJICogb3IgcGdfcHVibGljYXRpb25fbmFtZXNwYWNlLgor CSAqLworCXJldHVybiAoU2VhcmNoU3lzQ2FjaGVFeGlzdHMyKFBVQkxJQ0FUSU9OUkVMTUFQLAor CQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0ocmVsaWQpLAorCQkJCQkJCQkgIE9iamVjdElkR2V0 RGF0dW0ocHViLT5vaWQpKSB8fAorCQkJU2VhcmNoU3lzQ2FjaGVFeGlzdHMyKFBVQkxJQ0FUSU9O TkFNRVNQQUNFTUFQLAorCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0oZ2V0X3JlbF9uYW1lc3Bh Y2UocmVsaWQpKSwKKwkJCQkJCQkJICBPYmplY3RJZEdldERhdHVtKHB1Yi0+b2lkKSkpOworfQor CisvKgorICogSGVscGVyIGZ1bmN0aW9uIHRvIGdldCBpbmZvcm1hdGlvbiBvZiB0aGUgdGFibGVz IGluIHRoZSBnaXZlbgorICogcHVibGljYXRpb24ocykuCisgKgorICogSWYgZmlsdGVyX2J5X3Jl bGlkIGlzIHRydWUsIG9ubHkgdGhlIHJvdyBmb3IgdGFyZ2V0X3JlbGlkIGlzIHJldHVybmVkOwor ICogaWYgdGFyZ2V0X3JlbGlkIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBwYXJ0IG9mIHRoZSBw dWJsaWNhdGlvbnMsIHplcm8KKyAqIHJvd3MgYXJlIHJldHVybmVkLiAgSWYgZmlsdGVyX2J5X3Jl bGlkIGlzIGZhbHNlLCByb3dzIGZvciBhbGwgdGFibGVzCisgKiB3aXRoaW4gdGhlIHNwZWNpZmll ZCBwdWJsaWNhdGlvbnMgYXJlIHJldHVybmVkIGFuZCB0YXJnZXRfcmVsaWQgaXMKKyAqIGlnbm9y ZWQuCisgKgorICogUmV0dXJucyBwdWJpZCwgcmVsaWQsIGNvbHVtbiBsaXN0LCBhbmQgcm93IGZp bHRlciBmb3IgZWFjaCB0YWJsZS4KKyAqLworc3RhdGljIERhdHVtCitwZ19nZXRfcHVibGljYXRp b25fdGFibGVzKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBBcnJheVR5cGUgKnB1Ym5hbWVzLAor CQkJCQkJICBPaWQgdGFyZ2V0X3JlbGlkLCBib29sIGZpbHRlcl9ieV9yZWxpZCwKKwkJCQkJCSAg Ym9vbCBwdWJfbWlzc2luZ19vaykKIHsKICNkZWZpbmUgTlVNX1BVQkxJQ0FUSU9OX1RBQkxFU19F TEVNCTQKIAlGdW5jQ2FsbENvbnRleHQgKmZ1bmNjdHg7CkBAIC0xMjgwLDcgKzE0MzAsNiBAQCBw Z19nZXRfcHVibGljYXRpb25fdGFibGVzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJewogCQlUdXBsZURl c2MJdHVwZGVzYzsKIAkJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OwotCQlBcnJheVR5cGUgICph cnI7CiAJCURhdHVtCSAgICplbGVtczsKIAkJaW50CQkJbmVsZW1zLAogCQkJCQlpOwpAQCAtMTI4 OSw2ICsxNDM4LDE0IEBAIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMoUEdfRlVOQ1RJT05fQVJH UykKIAkJLyogY3JlYXRlIGEgZnVuY3Rpb24gY29udGV4dCBmb3IgY3Jvc3MtY2FsbCBwZXJzaXN0 ZW5jZSAqLwogCQlmdW5jY3R4ID0gU1JGX0ZJUlNUQ0FMTF9JTklUKCk7CiAKKwkJLyoKKwkJICog UHJlbGltaW5hcnkgY2hlY2sgaWYgdGhlIHNwZWNpZmllZCB0YWJsZSBjYW4gYmUgcHVibGlzaGVk IGluIHRoZQorCQkgKiBmaXJzdCBwbGFjZS4gSWYgbm90LCB3ZSBjYW4gcmV0dXJuIGVhcmx5IHdp dGhvdXQgY2hlY2tpbmcgdGhlIGdpdmVuCisJCSAqIHB1YmxpY2F0aW9ucyBhbmQgdGhlIHRhYmxl LgorCQkgKi8KKwkJaWYgKGZpbHRlcl9ieV9yZWxpZCAmJiAhaXNfcHVibGlzaGFibGVfdGFibGUo dGFyZ2V0X3JlbGlkKSkKKwkJCVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4KTsKKwogCQkvKiBzd2l0 Y2ggdG8gbWVtb3J5IGNvbnRleHQgYXBwcm9wcmlhdGUgZm9yIG11bHRpcGxlIGZ1bmN0aW9uIGNh bGxzICovCiAJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZnVuY2N0eC0+bXVs dGlfY2FsbF9tZW1vcnlfY3R4KTsKIApAQCAtMTI5Niw4ICsxNDUzLDcgQEAgcGdfZ2V0X3B1Ymxp Y2F0aW9uX3RhYmxlcyhQR19GVU5DVElPTl9BUkdTKQogCQkgKiBEZWNvbnN0cnVjdCB0aGUgcGFy YW1ldGVyIGludG8gZWxlbWVudHMgd2hlcmUgZWFjaCBlbGVtZW50IGlzIGEKIAkJICogcHVibGlj YXRpb24gbmFtZS4KIAkJICovCi0JCWFyciA9IFBHX0dFVEFSR19BUlJBWVRZUEVfUCgwKTsKLQkJ ZGVjb25zdHJ1Y3RfYXJyYXlfYnVpbHRpbihhcnIsIFRFWFRPSUQsICZlbGVtcywgTlVMTCwgJm5l bGVtcyk7CisJCWRlY29uc3RydWN0X2FycmF5X2J1aWx0aW4ocHVibmFtZXMsIFRFWFRPSUQsICZl bGVtcywgTlVMTCwgJm5lbGVtcyk7CiAKIAkJLyogR2V0IE9pZHMgb2YgdGFibGVzIGZyb20gZWFj aCBwdWJsaWNhdGlvbi4gKi8KIAkJZm9yIChpID0gMDsgaSA8IG5lbGVtczsgaSsrKQpAQCAtMTMw NiwzMiArMTQ2Miw0OCBAQCBwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKFBHX0ZVTkNUSU9OX0FS R1MpCiAJCQlMaXN0CSAgICpwdWJfZWxlbV90YWJsZXMgPSBOSUw7CiAJCQlMaXN0Q2VsbCAgICps YzsKIAotCQkJcHViX2VsZW0gPSBHZXRQdWJsaWNhdGlvbkJ5TmFtZShUZXh0RGF0dW1HZXRDU3Ry aW5nKGVsZW1zW2ldKSwgZmFsc2UpOworCQkJcHViX2VsZW0gPSBHZXRQdWJsaWNhdGlvbkJ5TmFt ZShUZXh0RGF0dW1HZXRDU3RyaW5nKGVsZW1zW2ldKSwKKwkJCQkJCQkJCQkJcHViX21pc3Npbmdf b2spOwogCi0JCQkvKgotCQkJICogUHVibGljYXRpb25zIHN1cHBvcnQgcGFydGl0aW9uZWQgdGFi bGVzLiBJZgotCQkJICogcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgaXMgZmFsc2UsIGFsbCBj aGFuZ2VzIGFyZSByZXBsaWNhdGVkCi0JCQkgKiB1c2luZyBsZWFmIHBhcnRpdGlvbiBpZGVudGl0 eSBhbmQgc2NoZW1hLCBzbyB3ZSBvbmx5IG5lZWQKLQkJCSAqIHRob3NlLiBPdGhlcndpc2UsIGdl dCB0aGUgcGFydGl0aW9uZWQgdGFibGUgaXRzZWxmLgotCQkJICovCi0JCQlpZiAocHViX2VsZW0t PmFsbHRhYmxlcykKLQkJCQlwdWJfZWxlbV90YWJsZXMgPSBHZXRBbGxQdWJsaWNhdGlvblJlbGF0 aW9ucyhwdWJfZWxlbS0+b2lkLAotCQkJCQkJCQkJCQkJCQkJIFJFTEtJTkRfUkVMQVRJT04sCi0J CQkJCQkJCQkJCQkJCQkgcHViX2VsZW0tPnB1YnZpYXJvb3QpOworCQkJaWYgKHB1Yl9lbGVtID09 IE5VTEwpCisJCQkJY29udGludWU7CisKKwkJCWlmIChmaWx0ZXJfYnlfcmVsaWQpCisJCQl7CisJ CQkJLyogQ2hlY2sgaWYgdGhlIGdpdmVuIHRhYmxlIGlzIHB1Ymxpc2hlZCBmb3IgdGhlIHB1Ymxp Y2F0aW9uICovCisJCQkJaWYgKGlzX3RhYmxlX3B1Ymxpc2hhYmxlX2luX3B1YmxpY2F0aW9uKHRh cmdldF9yZWxpZCwgcHViX2VsZW0pKQorCQkJCXsKKwkJCQkJcHViX2VsZW1fdGFibGVzID0gbGlz dF9tYWtlMV9vaWQodGFyZ2V0X3JlbGlkKTsKKwkJCQl9CisJCQl9CiAJCQllbHNlCiAJCQl7Ci0J CQkJTGlzdAkgICAqcmVsaWRzLAotCQkJCQkJICAgKnNjaGVtYXJlbGlkczsKLQotCQkJCXJlbGlk cyA9IEdldEluY2x1ZGVkUHVibGljYXRpb25SZWxhdGlvbnMocHViX2VsZW0tPm9pZCwKLQkJCQkJ CQkJCQkJCQkJIHB1Yl9lbGVtLT5wdWJ2aWFyb290ID8KLQkJCQkJCQkJCQkJCQkJIFBVQkxJQ0FU SU9OX1BBUlRfUk9PVCA6Ci0JCQkJCQkJCQkJCQkJCSBQVUJMSUNBVElPTl9QQVJUX0xFQUYpOwot CQkJCXNjaGVtYXJlbGlkcyA9IEdldEFsbFNjaGVtYVB1YmxpY2F0aW9uUmVsYXRpb25zKHB1Yl9l bGVtLT5vaWQsCi0JCQkJCQkJCQkJCQkJCQkJcHViX2VsZW0tPnB1YnZpYXJvb3QgPwotCQkJCQkJ CQkJCQkJCQkJCVBVQkxJQ0FUSU9OX1BBUlRfUk9PVCA6Ci0JCQkJCQkJCQkJCQkJCQkJUFVCTElD QVRJT05fUEFSVF9MRUFGKTsKLQkJCQlwdWJfZWxlbV90YWJsZXMgPSBsaXN0X2NvbmNhdF91bmlx dWVfb2lkKHJlbGlkcywgc2NoZW1hcmVsaWRzKTsKKwkJCQkvKgorCQkJCSAqIFB1YmxpY2F0aW9u cyBzdXBwb3J0IHBhcnRpdGlvbmVkIHRhYmxlcy4gSWYKKwkJCQkgKiBwdWJsaXNoX3ZpYV9wYXJ0 aXRpb25fcm9vdCBpcyBmYWxzZSwgYWxsIGNoYW5nZXMgYXJlCisJCQkJICogcmVwbGljYXRlZCB1 c2luZyBsZWFmIHBhcnRpdGlvbiBpZGVudGl0eSBhbmQgc2NoZW1hLCBzbyB3ZQorCQkJCSAqIG9u bHkgbmVlZCB0aG9zZS4gT3RoZXJ3aXNlLCBnZXQgdGhlIHBhcnRpdGlvbmVkIHRhYmxlCisJCQkJ ICogaXRzZWxmLgorCQkJCSAqLworCQkJCWlmIChwdWJfZWxlbS0+YWxsdGFibGVzKQorCQkJCQlw dWJfZWxlbV90YWJsZXMgPSBHZXRBbGxQdWJsaWNhdGlvblJlbGF0aW9ucyhwdWJfZWxlbS0+b2lk LAorCQkJCQkJCQkJCQkJCQkJCSBSRUxLSU5EX1JFTEFUSU9OLAorCQkJCQkJCQkJCQkJCQkJCSBw dWJfZWxlbS0+cHVidmlhcm9vdCk7CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJTGlzdAkgICAqcmVs aWRzLAorCQkJCQkJCSAgICpzY2hlbWFyZWxpZHM7CisKKwkJCQkJcmVsaWRzID0gR2V0SW5jbHVk ZWRQdWJsaWNhdGlvblJlbGF0aW9ucyhwdWJfZWxlbS0+b2lkLAorCQkJCQkJCQkJCQkJCQkJIHB1 Yl9lbGVtLT5wdWJ2aWFyb290ID8KKwkJCQkJCQkJCQkJCQkJCSBQVUJMSUNBVElPTl9QQVJUX1JP T1QgOgorCQkJCQkJCQkJCQkJCQkJIFBVQkxJQ0FUSU9OX1BBUlRfTEVBRik7CisJCQkJCXNjaGVt YXJlbGlkcyA9IEdldEFsbFNjaGVtYVB1YmxpY2F0aW9uUmVsYXRpb25zKHB1Yl9lbGVtLT5vaWQs CisJCQkJCQkJCQkJCQkJCQkJCXB1Yl9lbGVtLT5wdWJ2aWFyb290ID8KKwkJCQkJCQkJCQkJCQkJ CQkJUFVCTElDQVRJT05fUEFSVF9ST09UIDoKKwkJCQkJCQkJCQkJCQkJCQkJUFVCTElDQVRJT05f UEFSVF9MRUFGKTsKKwkJCQkJcHViX2VsZW1fdGFibGVzID0gbGlzdF9jb25jYXRfdW5pcXVlX29p ZChyZWxpZHMsIHNjaGVtYXJlbGlkcyk7CisJCQkJfQogCQkJfQogCiAJCQkvKgpAQCAtMTQ5MSw2 ICsxNjYzLDMwIEBAIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMoUEdfRlVOQ1RJT05fQVJHUykK IAlTUkZfUkVUVVJOX0RPTkUoZnVuY2N0eCk7CiB9CiAKK0RhdHVtCitwZ19nZXRfcHVibGljYXRp b25fdGFibGVzX2EoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwkvKgorCSAqIEdldCBpbmZvcm1hdGlv biBmb3IgYWxsIHRhYmxlcyBpbiB0aGUgZ2l2ZW4gcHVibGljYXRpb25zLgorCSAqIGZpbHRlcl9i eV9yZWxpZCBpcyBmYWxzZSBzbyBhbGwgdGFibGVzIGFyZSByZXR1cm5lZDsgcHViX21pc3Npbmdf b2sgaXMKKwkgKiBmYWxzZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKwkgKi8KKwlyZXR1 cm4gcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhmY2luZm8sIFBHX0dFVEFSR19BUlJBWVRZUEVf UCgwKSwKKwkJCQkJCQkJCSBJbnZhbGlkT2lkLCBmYWxzZSwgZmFsc2UpOworfQorCitEYXR1bQor cGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlc19iKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJLyoKKwkg KiBHZXQgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgdGFibGUgaW4gdGhlIGdpdmVuIHB1 YmxpY2F0aW9ucy4gVGhlCisJICogU1FMLWxldmVsIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIFNUUklD VCwgc28gdGFyZ2V0X3JlbGlkIGlzIGd1YXJhbnRlZWQgdG8KKwkgKiBiZSBub24tTlVMTCBoZXJl LgorCSAqLworCXJldHVybiBwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKGZjaW5mbywgUEdfR0VU QVJHX0FSUkFZVFlQRV9QKDApLAorCQkJCQkJCQkJIFBHX0dFVEFSR19PSUQoMSksIHRydWUsIHRy dWUpOworfQorCiAvKgogICogUmV0dXJucyBPaWRzIG9mIHNlcXVlbmNlcyBpbiBhIHB1YmxpY2F0 aW9uLgogICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Rh Ymxlc3luYy5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYwpp bmRleCBmNDlhNDg1MmVjYi4uZWI3MTgxMTQyOTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC90YWJsZXN5bmMuYwpAQCAtNzk4LDE3ICs3OTgsMzUgQEAgZmV0Y2hfcmVtb3Rl X3RhYmxlX2luZm8oY2hhciAqbnNwbmFtZSwgY2hhciAqcmVsbmFtZSwgTG9naWNhbFJlcFJlbGF0 aW9uICpscmVsLAogCQkgKiBwdWJsaWNhdGlvbnMpLgogCQkgKi8KIAkJcmVzZXRTdHJpbmdJbmZv KCZjbWQpOwotCQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsCi0JCQkJCQkgIlNFTEVDVCBESVNUSU5D VCIKLQkJCQkJCSAiICAoQ0FTRSBXSEVOIChhcnJheV9sZW5ndGgoZ3B0LmF0dHJzLCAxKSA9IGMu cmVsbmF0dHMpIgotCQkJCQkJICIgICBUSEVOIE5VTEwgRUxTRSBncHQuYXR0cnMgRU5EKSIKLQkJ CQkJCSAiICBGUk9NIHBnX3B1YmxpY2F0aW9uIHAsIgotCQkJCQkJICIgIExBVEVSQUwgcGdfZ2V0 X3B1YmxpY2F0aW9uX3RhYmxlcyhwLnB1Ym5hbWUpIGdwdCwiCi0JCQkJCQkgIiAgcGdfY2xhc3Mg YyIKLQkJCQkJCSAiIFdIRVJFIGdwdC5yZWxpZCA9ICV1IEFORCBjLm9pZCA9IGdwdC5yZWxpZCIK LQkJCQkJCSAiICAgQU5EIHAucHVibmFtZSBJTiAoICVzICkiLAotCQkJCQkJIGxyZWwtPnJlbW90 ZWlkLAotCQkJCQkJIHB1Yl9uYW1lcy0+ZGF0YSk7CisKKwkJaWYgKHNlcnZlcl92ZXJzaW9uID49 IDE5MDAwMCkKKwkJeworCQkJLyoKKwkJCSAqIFdlIGNhbiBwYXNzIGJvdGggcHVibGljYXRpb24g bmFtZXMgYW5kIHJlbGlkIHRvCisJCQkgKiBwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKCkgc2lu Y2UgdmVyc2lvbiAxOS4KKwkJCSAqLworCQkJYXBwZW5kU3RyaW5nSW5mbygmY21kLAorCQkJCQkJ CSAiU0VMRUNUIERJU1RJTkNUIgorCQkJCQkJCSAiICAoQ0FTRSBXSEVOIChhcnJheV9sZW5ndGgo Z3B0LmF0dHJzLCAxKSA9IGMucmVsbmF0dHMpIgorCQkJCQkJCSAiICAgVEhFTiBOVUxMIEVMU0Ug Z3B0LmF0dHJzIEVORCkiCisJCQkJCQkJICIgIEZST00gcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxl cyhBUlJBWVslc10sICV1KSBncHQsIgorCQkJCQkJCSAiICBwZ19jbGFzcyBjIgorCQkJCQkJCSAi IFdIRVJFIGMub2lkID0gZ3B0LnJlbGlkIiwKKwkJCQkJCQkgcHViX25hbWVzLT5kYXRhLAorCQkJ CQkJCSBscmVsLT5yZW1vdGVpZCk7CisJCX0KKwkJZWxzZQorCQkJYXBwZW5kU3RyaW5nSW5mbygm Y21kLAorCQkJCQkJCSAiU0VMRUNUIERJU1RJTkNUIgorCQkJCQkJCSAiICAoQ0FTRSBXSEVOIChh cnJheV9sZW5ndGgoZ3B0LmF0dHJzLCAxKSA9IGMucmVsbmF0dHMpIgorCQkJCQkJCSAiICAgVEhF TiBOVUxMIEVMU0UgZ3B0LmF0dHJzIEVORCkiCisJCQkJCQkJICIgIEZST00gcGdfcHVibGljYXRp b24gcCwiCisJCQkJCQkJICIgIExBVEVSQUwgcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhwLnB1 Ym5hbWUpIGdwdCwiCisJCQkJCQkJICIgIHBnX2NsYXNzIGMiCisJCQkJCQkJICIgV0hFUkUgZ3B0 LnJlbGlkID0gJXUgQU5EIGMub2lkID0gZ3B0LnJlbGlkIgorCQkJCQkJCSAiICAgQU5EIHAucHVi bmFtZSBJTiAoICVzICkiLAorCQkJCQkJCSBscmVsLT5yZW1vdGVpZCwKKwkJCQkJCQkgcHViX25h bWVzLT5kYXRhKTsKIAogCQlwdWJyZXMgPSB3YWxyY3ZfZXhlYyhMb2dSZXBXb3JrZXJXYWxSY3ZD b25uLCBjbWQuZGF0YSwKIAkJCQkJCQkgbGVuZ3Rob2YoYXR0cnNSb3cpLCBhdHRyc1Jvdyk7CkBA IC05ODIsMTQgKzEwMDAsMjggQEAgZmV0Y2hfcmVtb3RlX3RhYmxlX2luZm8oY2hhciAqbnNwbmFt ZSwgY2hhciAqcmVsbmFtZSwgTG9naWNhbFJlcFJlbGF0aW9uICpscmVsLAogCiAJCS8qIENoZWNr IGZvciByb3cgZmlsdGVycy4gKi8KIAkJcmVzZXRTdHJpbmdJbmZvKCZjbWQpOwotCQlhcHBlbmRT dHJpbmdJbmZvKCZjbWQsCi0JCQkJCQkgIlNFTEVDVCBESVNUSU5DVCBwZ19nZXRfZXhwcihncHQu cXVhbCwgZ3B0LnJlbGlkKSIKLQkJCQkJCSAiICBGUk9NIHBnX3B1YmxpY2F0aW9uIHAsIgotCQkJ CQkJICIgIExBVEVSQUwgcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhwLnB1Ym5hbWUpIGdwdCIK LQkJCQkJCSAiIFdIRVJFIGdwdC5yZWxpZCA9ICV1IgotCQkJCQkJICIgICBBTkQgcC5wdWJuYW1l IElOICggJXMgKSIsCi0JCQkJCQkgbHJlbC0+cmVtb3RlaWQsCi0JCQkJCQkgcHViX25hbWVzLT5k YXRhKTsKKworCQlpZiAoc2VydmVyX3ZlcnNpb24gPj0gMTkwMDAwKQorCQl7CisJCQkvKgorCQkJ ICogV2UgY2FuIHBhc3MgYm90aCBwdWJsaWNhdGlvbiBuYW1lcyBhbmQgcmVsaWQgdG8KKwkJCSAq IHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMoKSBzaW5jZSB2ZXJzaW9uIDE5LgorCQkJICovCisJ CQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsCisJCQkJCQkJICJTRUxFQ1QgRElTVElOQ1QgcGdfZ2V0 X2V4cHIoZ3B0LnF1YWwsIGdwdC5yZWxpZCkiCisJCQkJCQkJICIgIEZST00gcGdfZ2V0X3B1Ymxp Y2F0aW9uX3RhYmxlcyhBUlJBWVslc10sICV1KSBncHQiLAorCQkJCQkJCSBwdWJfbmFtZXMtPmRh dGEsCisJCQkJCQkJIGxyZWwtPnJlbW90ZWlkKTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRTdHJp bmdJbmZvKCZjbWQsCisJCQkJCQkJICJTRUxFQ1QgRElTVElOQ1QgcGdfZ2V0X2V4cHIoZ3B0LnF1 YWwsIGdwdC5yZWxpZCkiCisJCQkJCQkJICIgIEZST00gcGdfcHVibGljYXRpb24gcCwiCisJCQkJ CQkJICIgIExBVEVSQUwgcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhwLnB1Ym5hbWUpIGdwdCIK KwkJCQkJCQkgIiBXSEVSRSBncHQucmVsaWQgPSAldSIKKwkJCQkJCQkgIiAgIEFORCBwLnB1Ym5h bWUgSU4gKCAlcyApIiwKKwkJCQkJCQkgbHJlbC0+cmVtb3RlaWQsCisJCQkJCQkJIHB1Yl9uYW1l cy0+ZGF0YSk7CiAKIAkJcmVzID0gd2FscmN2X2V4ZWMoTG9nUmVwV29ya2VyV2FsUmN2Q29ubiwg Y21kLmRhdGEsIDEsIHF1YWxSb3cpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9wZ291dHB1dC9wZ291dHB1dC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRw dXQvcGdvdXRwdXQuYwppbmRleCA0ZWNmY2JmZjdhYi4uZjQ1MzFlZmU3ZWMgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKKysrIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYwpAQCAtMjI2MywxMSArMjI2Mywx MCBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXREYXRhICpkYXRhLCBSZWxhdGlvbiByZWxh dGlvbikKIAkJCQl7CiAJCQkJCU9pZAkJCWFuY2VzdG9yOwogCQkJCQlpbnQJCQlsZXZlbDsKLQkJ CQkJTGlzdAkgICAqYW5jZXN0b3JzID0gZ2V0X3BhcnRpdGlvbl9hbmNlc3RvcnMocmVsaWQpOwog Ci0JCQkJCWFuY2VzdG9yID0gR2V0VG9wTW9zdEFuY2VzdG9ySW5QdWJsaWNhdGlvbihwdWItPm9p ZCwKLQkJCQkJCQkJCQkJCQkJCSAgIGFuY2VzdG9ycywKLQkJCQkJCQkJCQkJCQkJCSAgICZsZXZl bCk7CisJCQkJCWFuY2VzdG9yID0gR2V0VG9wTW9zdEFuY2VzdG9ySW5QdWJsaWNhdGlvblJlbGlk KHB1Yi0+b2lkLAorCQkJCQkJCQkJCQkJCQkJCQlyZWxpZCwKKwkJCQkJCQkJCQkJCQkJCQkJJmxl dmVsKTsKIAogCQkJCQlpZiAoYW5jZXN0b3IgIT0gSW52YWxpZE9pZCkKIAkJCQkJewpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQKaW5kZXggMzU3OWNlYzU3NDQuLmFmZGNjOTE1ZjA4IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQKQEAgLTEyNDY4LDcgKzEyNDY4LDE2IEBACiAgIHByb2FsbGFyZ3R5cGVz ID0+ICd7X3RleHQsb2lkLG9pZCxpbnQydmVjdG9yLHBnX25vZGVfdHJlZX0nLAogICBwcm9hcmdt b2RlcyA9PiAne3YsbyxvLG8sb30nLAogICBwcm9hcmduYW1lcyA9PiAne3B1Ym5hbWUscHViaWQs cmVsaWQsYXR0cnMscXVhbH0nLAotICBwcm9zcmMgPT4gJ3BnX2dldF9wdWJsaWNhdGlvbl90YWJs ZXMnIH0sCisgIHByb3NyYyA9PiAncGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlc19hJyB9LAoreyBv aWQgPT4gJzgwNjAnLAorICBkZXNjciA9PiAnZ2V0IGluZm9ybWF0aW9uIG9mIHRoZSBzcGVjaWZp ZWQgdGFibGUgdGhhdCBpcyBwYXJ0IG9mIHRoZSBzcGVjaWZpZWQgcHVibGljYXRpb25zJywKKyAg cHJvbmFtZSA9PiAncGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcycsIHByb3Jvd3MgPT4gJzEwJywK KyAgcHJvcmV0c2V0ID0+ICd0JywgcHJvdm9sYXRpbGUgPT4gJ3MnLAorICBwcm9yZXR0eXBlID0+ ICdyZWNvcmQnLCBwcm9hcmd0eXBlcyA9PiAnX3RleHQgb2lkJywKKyAgcHJvYWxsYXJndHlwZXMg PT4gJ3tfdGV4dCxvaWQsb2lkLG9pZCxpbnQydmVjdG9yLHBnX25vZGVfdHJlZX0nLAorICBwcm9h cmdtb2RlcyA9PiAne2ksaSxvLG8sbyxvfScsCisgIHByb2FyZ25hbWVzID0+ICd7cHVibmFtZXMs dGFyZ2V0X3JlbGlkLHB1YmlkLHJlbGlkLGF0dHJzLHF1YWx9JywKKyAgcHJvc3JjID0+ICdwZ19n ZXRfcHVibGljYXRpb25fdGFibGVzX2InIH0sCiB7IG9pZCA9PiAnODA1MicsIGRlc2NyID0+ICdn ZXQgT0lEcyBvZiBzZXF1ZW5jZXMgaW4gYSBwdWJsaWNhdGlvbicsCiAgIHByb25hbWUgPT4gJ3Bn X2dldF9wdWJsaWNhdGlvbl9zZXF1ZW5jZXMnLCBwcm9yb3dzID0+ICcxMDAwJywgcHJvcmV0c2V0 ID0+ICd0JywKICAgcHJvdm9sYXRpbGUgPT4gJ3MnLCBwcm9yZXR0eXBlID0+ICdvaWQnLCBwcm9h cmd0eXBlcyA9PiAndGV4dCcsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1 YmxpY2F0aW9uLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKaW5kZXgg ODliNGJiMTRmNjIuLmFkMzA5ZTI2ZTAyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3B1YmxpY2F0aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlv bi5oCkBAIC0xOTIsNiArMTkyLDggQEAgZXh0ZXJuIExpc3QgKkdldFB1YlBhcnRpdGlvbk9wdGlv blJlbGF0aW9ucyhMaXN0ICpyZXN1bHQsCiAJCQkJCQkJCQkJCU9pZCByZWxpZCk7CiBleHRlcm4g T2lkCUdldFRvcE1vc3RBbmNlc3RvckluUHVibGljYXRpb24oT2lkIHB1Ym9pZCwgTGlzdCAqYW5j ZXN0b3JzLAogCQkJCQkJCQkJCQlpbnQgKmFuY2VzdG9yX2xldmVsKTsKK2V4dGVybiBPaWQJR2V0 VG9wTW9zdEFuY2VzdG9ySW5QdWJsaWNhdGlvblJlbGlkKE9pZCBwdWJvaWQsIE9pZCByZWxpZCwK KwkJCQkJCQkJCQkJCSBpbnQgKmFuY2VzdG9yX2xldmVsKTsKIAogZXh0ZXJuIGJvb2wgaXNfcHVi bGlzaGFibGVfcmVsYXRpb24oUmVsYXRpb24gcmVsKTsKIGV4dGVybiBib29sIGlzX3NjaGVtYV9w dWJsaWNhdGlvbihPaWQgcHViaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9wdWJsaWNhdGlvbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0 aW9uLm91dAppbmRleCA5MTMzMmU3NWVlYi4uM2IwZWFlYzRmMjEgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CkBAIC0yMjkyLDYgKzIyOTIsMjMxIEBAIERST1Ag VEFCTEUgdGVzdHB1Yl9tZXJnZV9wazsKIFJFU0VUIFNFU1NJT04gQVVUSE9SSVpBVElPTjsKIERS T1AgUk9MRSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIsIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl cjI7CiBEUk9QIFJPTEUgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyX2R1bW15OworLS0gVGVzdCBw Z19nZXRfcHVibGljYXRpb25fdGFibGVzKHRleHRbXSwgb2lkKSBmdW5jdGlvbgorQ1JFQVRFIFND SEVNQSBncHRfdGVzdF9zY2g7CitDUkVBVEUgVEFCTEUgZ3B0X3Rlc3Rfc2NoLnRibF9zY2ggKGlk IGludCk7CitDUkVBVEUgVEFCTEUgdGJsX25vcm1hbCAoaWQgaW50KTsKK0NSRUFURSBUQUJMRSB0 YmxfcGFyZW50IChpZDEgaW50LCBpZDIgaW50LCBpZDMgaW50KSBQQVJUSVRJT04gQlkgUkFOR0Ug KGlkMSk7CitDUkVBVEUgVEFCTEUgdGJsX3BhcnQxIFBBUlRJVElPTiBPRiB0YmxfcGFyZW50IEZP UiBWQUxVRVMgRlJPTSAoMSkgVE8gKDEwKTsKK0NSRUFURSBWSUVXIGdwdF90ZXN0X3ZpZXcgQVMg U0VMRUNUICogRlJPTSB0Ymxfbm9ybWFsOworU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJS T1InOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1Yl9hbGwgRk9SIEFMTCBUQUJMRVMgV0lUSCAocHVi bGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlKTsKK0NSRUFURSBQVUJMSUNBVElPTiBwdWJf YWxsX25vX3ZpYXJvb3QgRk9SIEFMTCBUQUJMRVMgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9u X3Jvb3QgPSBmYWxzZSk7CitDUkVBVEUgUFVCTElDQVRJT04gcHViX2FsbF9leGNlcHQgRk9SIEFM TCBUQUJMRVMgRVhDRVBUIChUQUJMRSB0YmxfcGFyZW50LCBncHRfdGVzdF9zY2gudGJsX3NjaCkg V0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZSk7CitDUkVBVEUgUFVCTElD QVRJT04gcHViX2FsbF9leGNlcHRfbm9fdmlhcm9vdCBGT1IgQUxMIFRBQkxFUyBFWENFUFQgKFRB QkxFIHRibF9wYXJlbnQsIGdwdF90ZXN0X3NjaC50Ymxfc2NoKSBXSVRIIChwdWJsaXNoX3ZpYV9w YXJ0aXRpb25fcm9vdCA9IHRydWUpOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1Yl9zY2hlbWEgRk9S IFRBQkxFUyBJTiBTQ0hFTUEgZ3B0X3Rlc3Rfc2NoOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1Yl9u b3JtYWwgRk9SIFRBQkxFIHRibF9ub3JtYWwgV0hFUkUgKGlkIDwgMTApOworQ1JFQVRFIFBVQkxJ Q0FUSU9OIHB1Yl9wYXJ0X2xlYWYgRk9SIFRBQkxFIHRibF9wYXJ0MSBXSVRIIChwdWJsaXNoX3Zp YV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlKTsKK0NSRUFURSBQVUJMSUNBVElPTiBwdWJfcGFydF9w YXJlbnQgRk9SIFRBQkxFIHRibF9wYXJlbnQgKGlkMSwgaWQyKSBXSEVSRSAoaWQxID0gMTApIFdJ VEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSk7CitDUkVBVEUgUFVCTElDQVRJ T04gcHViX3BhcnRfcGFyZW50X25vX3ZpYXJvb3QgRk9SIFRBQkxFIHRibF9wYXJlbnQgV0lUSCAo cHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZSk7CitDUkVBVEUgUFVCTElDQVRJT04g cHViX3BhcnRfcGFyZW50X2NoaWxkIEZPUiBUQUJMRSB0YmxfcGFyZW50LCB0YmxfcGFydDEgV0lU SCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlKTsKK1JFU0VUIGNsaWVudF9taW5f bWVzc2FnZXM7CitDUkVBVEUgRlVOQ1RJT04gdGVzdF9ncHQocHVibmFtZXMgdGV4dFtdLCByZWxu YW1lIHRleHQpCitSRVRVUk5TIFRBQkxFICgKKyAgcHVibmFtZSB0ZXh0LAorICByZWxuYW1lIG5h bWUsCisgIGF0dHJzIHRleHQsCisgIHF1YWwgdGV4dAorKQorQkVHSU4gQVRPTUlDCisgIFNFTEVD VCBwLnB1Ym5hbWUsIGMucmVsbmFtZSwgZ3B0LmF0dHJzOjp0ZXh0LCBwZ19nZXRfZXhwcihncHQu cXVhbCwgZ3B0LnJlbGlkKQorICAgIEZST00gcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhwdWJu YW1lcywgcmVsbmFtZTo6cmVnY2xhc3M6Om9pZCkgZ3B0CisgICAgSk9JTiBwZ19wdWJsaWNhdGlv biBwIE9OIHAub2lkID0gZ3B0LnB1YmlkCisgICAgSk9JTiBwZ19jbGFzcyBjIE9OIGMub2lkID0g Z3B0LnJlbGlkCisgIE9SREVSIEJZIHAucHVibmFtZSwgYy5yZWxuYW1lOworRU5EOworU0VMRUNU ICogRlJPTSB0ZXN0X2dwdChBUlJBWVsncHViX25vcm1hbCddLCAndGJsX25vcm1hbCcpOworICBw dWJuYW1lICAgfCAgcmVsbmFtZSAgIHwgYXR0cnMgfCAgIHF1YWwgICAgCistLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0KKyBwdWJfbm9ybWFsIHwgdGJsX25vcm1h bCB8IDEgICAgIHwgKGlkIDwgMTApCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQo QVJSQVlbJ3B1Yl9ub3JtYWwnXSwgJ2dwdF90ZXN0X3NjaC50Ymxfc2NoJyk7IC0tIG5vIHJlc3Vs dAorIHB1Ym5hbWUgfCByZWxuYW1lIHwgYXR0cnMgfCBxdWFsIAorLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tKy0tLS0tLQorKDAgcm93cykKKworU0VMRUNUICogRlJPTSB0ZXN0X2dwdChBUlJB WVsncHViX3NjaGVtYSddLCAnZ3B0X3Rlc3Rfc2NoLnRibF9zY2gnKTsKKyAgcHVibmFtZSAgIHwg cmVsbmFtZSB8IGF0dHJzIHwgcXVhbCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSst LS0tLS0KKyBwdWJfc2NoZW1hIHwgdGJsX3NjaCB8IDEgICAgIHwgCisoMSByb3cpCisKK1NFTEVD VCAqIEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9zY2hlbWEnXSwgJ3RibF9ub3JtYWwnKTsgLS0g bm8gcmVzdWx0CisgcHVibmFtZSB8IHJlbG5hbWUgfCBhdHRycyB8IHF1YWwgCistLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tCisoMCByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHRlc3Rf Z3B0KEFSUkFZWydwdWJfcGFydF9wYXJlbnQnXSwgJ3RibF9wYXJlbnQnKTsKKyAgICAgcHVibmFt ZSAgICAgfCAgcmVsbmFtZSAgIHwgYXR0cnMgfCAgICBxdWFsICAgIAorLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tCisgcHViX3BhcnRfcGFyZW50IHwg dGJsX3BhcmVudCB8IDEgMiAgIHwgKGlkMSA9IDEwKQorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9N IHRlc3RfZ3B0KEFSUkFZWydwdWJfcGFydF9wYXJlbnQnXSwgJ3RibF9wYXJ0MScpOyAtLSBubyBy ZXN1bHQKKyBwdWJuYW1lIHwgcmVsbmFtZSB8IGF0dHJzIHwgcXVhbCAKKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLSstLS0tLS0KKygwIHJvd3MpCisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQo QVJSQVlbJ3B1Yl9wYXJ0X3BhcmVudF9ub192aWFyb290J10sICd0YmxfcGFydDEnKTsKKyAgICAg ICAgICBwdWJuYW1lICAgICAgICAgICB8ICByZWxuYW1lICB8IGF0dHJzIHwgcXVhbCAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0KKyBwdWJf cGFydF9wYXJlbnRfbm9fdmlhcm9vdCB8IHRibF9wYXJ0MSB8IDEgMiAzIHwgCisoMSByb3cpCisK K1NFTEVDVCAqIEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9wYXJ0X3BhcmVudF9ub192aWFyb290 J10sICd0YmxfcGFyZW50Jyk7IC0tIG5vIHJlc3VsdAorIHB1Ym5hbWUgfCByZWxuYW1lIHwgYXR0 cnMgfCBxdWFsIAorLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLQorKDAgcm93cykK KworU0VMRUNUICogRlJPTSB0ZXN0X2dwdChBUlJBWVsncHViX3BhcnRfbGVhZiddLCAndGJsX3Bh cnQxJyk7CisgICAgcHVibmFtZSAgICB8ICByZWxuYW1lICB8IGF0dHJzIHwgcXVhbCAKKy0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLQorIHB1Yl9wYXJ0X2xlYWYgfCB0 YmxfcGFydDEgfCAxIDIgMyB8IAorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFS UkFZWydwdWJfcGFydF9sZWFmJ10sICd0YmxfcGFyZW50Jyk7IC0tIG5vIHJlc3VsdAorIHB1Ym5h bWUgfCByZWxuYW1lIHwgYXR0cnMgfCBxdWFsIAorLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t Ky0tLS0tLQorKDAgcm93cykKKworU0VMRUNUICogRlJPTSB0ZXN0X2dwdChBUlJBWVsncHViX2Fs bCddLCAndGJsX3BhcmVudCcpOworIHB1Ym5hbWUgfCAgcmVsbmFtZSAgIHwgYXR0cnMgfCBxdWFs IAorLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLQorIHB1Yl9hbGwgfCB0Ymxf cGFyZW50IHwgMSAyIDMgfCAKKygxIHJvdykKKworU0VMRUNUICogRlJPTSB0ZXN0X2dwdChBUlJB WVsncHViX2FsbCddLCAndGJsX3BhcnQxJyk7IC0tIG5vIHJlc3VsdAorIHB1Ym5hbWUgfCByZWxu YW1lIHwgYXR0cnMgfCBxdWFsIAorLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLQor KDAgcm93cykKKworU0VMRUNUICogRlJPTSB0ZXN0X2dwdChBUlJBWVsncHViX2FsbF9ub192aWFy b290J10sICd0YmxfcGFydDEnKTsKKyAgICAgIHB1Ym5hbWUgICAgICAgfCAgcmVsbmFtZSAgfCBh dHRycyB8IHF1YWwgCistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tKy0t LS0tLQorIHB1Yl9hbGxfbm9fdmlhcm9vdCB8IHRibF9wYXJ0MSB8IDEgMiAzIHwgCisoMSByb3cp CisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9hbGxfbm9fdmlhcm9vdCddLCAn dGJsX3BhcmVudCcpOyAtLSBubyByZXN1bHQKKyBwdWJuYW1lIHwgcmVsbmFtZSB8IGF0dHJzIHwg cXVhbCAKKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0KKygwIHJvd3MpCisKK1NF TEVDVCAqIEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9wYXJ0X3BhcmVudF9jaGlsZCddLCAndGJs X3BhcmVudCcpOworICAgICAgICBwdWJuYW1lICAgICAgICB8ICByZWxuYW1lICAgfCBhdHRycyB8 IHF1YWwgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0t LS0KKyBwdWJfcGFydF9wYXJlbnRfY2hpbGQgfCB0YmxfcGFyZW50IHwgMSAyIDMgfCAKKygxIHJv dykKKworU0VMRUNUICogRlJPTSB0ZXN0X2dwdChBUlJBWVsncHViX3BhcnRfcGFyZW50X2NoaWxk J10sICd0YmxfcGFydDEnKTsgLS0gbm8gcmVzdWx0CisgcHVibmFtZSB8IHJlbG5hbWUgfCBhdHRy cyB8IHF1YWwgCistLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tCisoMCByb3dzKQor CistLSB0ZXN0IGZvciB0aGUgRVhDTFVERSBjbGF1c2UKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQo QVJSQVlbJ3B1Yl9hbGxfZXhjZXB0J10sICd0Ymxfbm9ybWFsJyk7CisgICAgcHVibmFtZSAgICAg fCAgcmVsbmFtZSAgIHwgYXR0cnMgfCBxdWFsIAorLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLSstLS0tLS0KKyBwdWJfYWxsX2V4Y2VwdCB8IHRibF9ub3JtYWwgfCAxICAgICB8 IAorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfYWxsX2V4Y2Vw dCddLCAnZ3B0X3Rlc3Rfc2NoLnRibF9zY2gnKTsgLS0gbm8gcmVzdWx0IChleGNsdWRlZCkKKyBw dWJuYW1lIHwgcmVsbmFtZSB8IGF0dHJzIHwgcXVhbCAKKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLSstLS0tLS0KKygwIHJvd3MpCisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1 Yl9hbGxfZXhjZXB0J10sICd0YmxfcGFyZW50Jyk7IC0tIG5vIHJlc3VsdCAoZXhjbHVkZWQpCisg cHVibmFtZSB8IHJlbG5hbWUgfCBhdHRycyB8IHF1YWwgCistLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0rLS0tLS0tCisoMCByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydw dWJfYWxsX2V4Y2VwdCddLCAndGJsX3BhcnQxJyk7IC0tIG5vIHJlc3VsdAorIHB1Ym5hbWUgfCBy ZWxuYW1lIHwgYXR0cnMgfCBxdWFsIAorLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKy0tLS0t LQorKDAgcm93cykKKworU0VMRUNUICogRlJPTSB0ZXN0X2dwdChBUlJBWVsncHViX2FsbF9leGNl cHRfbm9fdmlhcm9vdCddLCAndGJsX25vcm1hbCcpOworICAgICAgICAgIHB1Ym5hbWUgICAgICAg ICAgfCAgcmVsbmFtZSAgIHwgYXR0cnMgfCBxdWFsIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLQorIHB1Yl9hbGxfZXhjZXB0X25vX3ZpYXJv b3QgfCB0Ymxfbm9ybWFsIHwgMSAgICAgfCAKKygxIHJvdykKKworU0VMRUNUICogRlJPTSB0ZXN0 X2dwdChBUlJBWVsncHViX2FsbF9leGNlcHRfbm9fdmlhcm9vdCddLCAnZ3B0X3Rlc3Rfc2NoLnRi bF9zY2gnKTsgLS0gbm8gcmVzdWx0IChleGNsdWRlZCkKKyBwdWJuYW1lIHwgcmVsbmFtZSB8IGF0 dHJzIHwgcXVhbCAKKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0KKygwIHJvd3Mp CisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9hbGxfZXhjZXB0X25vX3ZpYXJv b3QnXSwgJ3RibF9wYXJlbnQnKTsgLS0gbm8gcmVzdWx0IChleGNsdWRlZCkKKyBwdWJuYW1lIHwg cmVsbmFtZSB8IGF0dHJzIHwgcXVhbCAKKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSstLS0t LS0KKygwIHJvd3MpCisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9hbGxfZXhj ZXB0X25vX3ZpYXJvb3QnXSwgJ3RibF9wYXJ0MScpOyAtLSBubyByZXN1bHQKKyBwdWJuYW1lIHwg cmVsbmFtZSB8IGF0dHJzIHwgcXVhbCAKKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSstLS0t LS0KKygwIHJvd3MpCisKKy0tIHR3byByb3dzIHdpdGggZGlmZmVyZW50IHJvdyBmaWx0ZXIKK1NF TEVDVCAqIEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9hbGwnLCAncHViX25vcm1hbCddLCAndGJs X25vcm1hbCcpOworICBwdWJuYW1lICAgfCAgcmVsbmFtZSAgIHwgYXR0cnMgfCAgIHF1YWwgICAg CistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0KKyBwdWJfYWxs ICAgIHwgdGJsX25vcm1hbCB8IDEgICAgIHwgCisgcHViX25vcm1hbCB8IHRibF9ub3JtYWwgfCAx ICAgICB8IChpZCA8IDEwKQorKDIgcm93cykKKworLS0gb25lIHJvdyB3aXRoICdwdWJfcGFydF9w YXJlbnQnCitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfcGFydF9wYXJlbnQnLCAn cHViX3BhcnRfcGFyZW50X25vX3ZpYXJvb3QnXSwgJ3RibF9wYXJlbnQnKTsKKyAgICAgcHVibmFt ZSAgICAgfCAgcmVsbmFtZSAgIHwgYXR0cnMgfCAgICBxdWFsICAgIAorLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tCisgcHViX3BhcnRfcGFyZW50IHwg dGJsX3BhcmVudCB8IDEgMiAgIHwgKGlkMSA9IDEwKQorKDEgcm93KQorCistLSBubyByZXN1bHQs IHRibF9wYXJlbnQgaXMgdGhlIGVmZmVjdGl2ZSBwdWJsaXNoZWQgT0lEIGR1ZSB0byBwdWJ2aWFy b290CitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfcGFydF9wYXJlbnQnLCAncHVi X2FsbCddLCAndGJsX3BhcnQxJyk7CisgcHVibmFtZSB8IHJlbG5hbWUgfCBhdHRycyB8IHF1YWwg CistLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tCisoMCByb3dzKQorCistLSBubyBy ZXN1bHQsIG5vbi1leGlzdGVudCBwdWJsaWNhdGlvbgorU0VMRUNUICogRlJPTSB0ZXN0X2dwdChB UlJBWVsnbm9fc3VjaF9wdWInXSwgJ3RibF9ub3JtYWwnKTsKKyBwdWJuYW1lIHwgcmVsbmFtZSB8 IGF0dHJzIHwgcXVhbCAKKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0KKygwIHJv d3MpCisKKy0tIG5vIHJlc3VsdCwgbm9uLXRhYmxlIG9iamVjdAorU0VMRUNUICogRlJPTSB0ZXN0 X2dwdChBUlJBWVsncHViX2FsbCddLCAnZ3B0X3Rlc3RfdmlldycpOworIHB1Ym5hbWUgfCByZWxu YW1lIHwgYXR0cnMgfCBxdWFsIAorLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLQor KDAgcm93cykKKworLS0gbm8gcmVzdWx0LCBlbXB0eSBwdWJsaWNhdGlvbiBhcnJheQorU0VMRUNU ICogRlJPTSB0ZXN0X2dwdChBUlJBWVtdOjp0ZXh0W10sICd0Ymxfbm9ybWFsJyk7CisgcHVibmFt ZSB8IHJlbG5hbWUgfCBhdHRycyB8IHF1YWwgCistLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0r LS0tLS0tCisoMCByb3dzKQorCistLSBubyByZXN1bHQsIE9JRCAwIGFzIHRhcmdldF9yZWxpZAor U0VMRUNUICogRlJPTSBwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKEFSUkFZWydwdWJfbm9ybWFs J10sIDA6Om9pZCk7CisgcHViaWQgfCByZWxpZCB8IGF0dHJzIHwgcXVhbCAKKy0tLS0tLS0rLS0t LS0tLSstLS0tLS0tKy0tLS0tLQorKDAgcm93cykKKworLS0gQ2xlYW4gdXAKK0RST1AgRlVOQ1RJ T04gdGVzdF9ncHQodGV4dFtdLCB0ZXh0KTsKK0RST1AgUFVCTElDQVRJT04gcHViX2FsbDsKK0RS T1AgUFVCTElDQVRJT04gcHViX2FsbF9ub192aWFyb290OworRFJPUCBQVUJMSUNBVElPTiBwdWJf YWxsX2V4Y2VwdDsKK0RST1AgUFVCTElDQVRJT04gcHViX2FsbF9leGNlcHRfbm9fdmlhcm9vdDsK K0RST1AgUFVCTElDQVRJT04gcHViX3NjaGVtYTsKK0RST1AgUFVCTElDQVRJT04gcHViX25vcm1h bDsKK0RST1AgUFVCTElDQVRJT04gcHViX3BhcnRfbGVhZjsKK0RST1AgUFVCTElDQVRJT04gcHVi X3BhcnRfcGFyZW50OworRFJPUCBQVUJMSUNBVElPTiBwdWJfcGFydF9wYXJlbnRfbm9fdmlhcm9v dDsKK0RST1AgUFVCTElDQVRJT04gcHViX3BhcnRfcGFyZW50X2NoaWxkOworRFJPUCBWSUVXIGdw dF90ZXN0X3ZpZXc7CitEUk9QIFRBQkxFIHRibF9ub3JtYWwsIHRibF9wYXJlbnQsIHRibF9wYXJ0 MTsKK0RST1AgU0NIRU1BIGdwdF90ZXN0X3NjaCBDQVNDQURFOworTk9USUNFOiAgZHJvcCBjYXNj YWRlcyB0byB0YWJsZSBncHRfdGVzdF9zY2gudGJsX3NjaAogLS0gc3RhZ2Ugb2JqZWN0cyBmb3Ig cGdfZHVtcCB0ZXN0cwogQ1JFQVRFIFNDSEVNQSBwdWJtZSBDUkVBVEUgVEFCTEUgdDAgKGMgaW50 LCBkIGludCkgQ1JFQVRFIFRBQkxFIHQxIChjIGludCk7CiBDUkVBVEUgU0NIRU1BIHB1Ym1lMiBD UkVBVEUgVEFCTEUgdDAgKGMgaW50LCBkIGludCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlv bi5zcWwKaW5kZXggNmJhZmFkMjc1NzEuLjk0OTA4ZTRmOTY1IDEwMDY0NAotLS0gYS9zcmMvdGVz dC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwv cHVibGljYXRpb24uc3FsCkBAIC0xNDM4LDYgKzE0MzgsMTEzIEBAIFJFU0VUIFNFU1NJT04gQVVU SE9SSVpBVElPTjsKIERST1AgUk9MRSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIsIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlcjI7CiBEUk9QIFJPTEUgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyX2R1 bW15OwogCistLSBUZXN0IHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXModGV4dFtdLCBvaWQpIGZ1 bmN0aW9uCitDUkVBVEUgU0NIRU1BIGdwdF90ZXN0X3NjaDsKK0NSRUFURSBUQUJMRSBncHRfdGVz dF9zY2gudGJsX3NjaCAoaWQgaW50KTsKK0NSRUFURSBUQUJMRSB0Ymxfbm9ybWFsIChpZCBpbnQp OworQ1JFQVRFIFRBQkxFIHRibF9wYXJlbnQgKGlkMSBpbnQsIGlkMiBpbnQsIGlkMyBpbnQpIFBB UlRJVElPTiBCWSBSQU5HRSAoaWQxKTsKK0NSRUFURSBUQUJMRSB0YmxfcGFydDEgUEFSVElUSU9O IE9GIHRibF9wYXJlbnQgRk9SIFZBTFVFUyBGUk9NICgxKSBUTyAoMTApOworQ1JFQVRFIFZJRVcg Z3B0X3Rlc3RfdmlldyBBUyBTRUxFQ1QgKiBGUk9NIHRibF9ub3JtYWw7CisKK1NFVCBjbGllbnRf bWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKK0NSRUFURSBQVUJMSUNBVElPTiBwdWJfYWxsIEZPUiBB TEwgVEFCTEVTIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSk7CitDUkVB VEUgUFVCTElDQVRJT04gcHViX2FsbF9ub192aWFyb290IEZPUiBBTEwgVEFCTEVTIFdJVEggKHB1 Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2UpOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1 Yl9hbGxfZXhjZXB0IEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCAoVEFCTEUgdGJsX3BhcmVudCwgZ3B0 X3Rlc3Rfc2NoLnRibF9zY2gpIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFs c2UpOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1Yl9hbGxfZXhjZXB0X25vX3ZpYXJvb3QgRk9SIEFM TCBUQUJMRVMgRVhDRVBUIChUQUJMRSB0YmxfcGFyZW50LCBncHRfdGVzdF9zY2gudGJsX3NjaCkg V0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlKTsKK0NSRUFURSBQVUJMSUNB VElPTiBwdWJfc2NoZW1hIEZPUiBUQUJMRVMgSU4gU0NIRU1BIGdwdF90ZXN0X3NjaDsKK0NSRUFU RSBQVUJMSUNBVElPTiBwdWJfbm9ybWFsIEZPUiBUQUJMRSB0Ymxfbm9ybWFsIFdIRVJFIChpZCA8 IDEwKTsKK0NSRUFURSBQVUJMSUNBVElPTiBwdWJfcGFydF9sZWFmIEZPUiBUQUJMRSB0YmxfcGFy dDEgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZSk7CitDUkVBVEUgUFVC TElDQVRJT04gcHViX3BhcnRfcGFyZW50IEZPUiBUQUJMRSB0YmxfcGFyZW50IChpZDEsIGlkMikg V0hFUkUgKGlkMSA9IDEwKSBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUp OworQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1Yl9wYXJ0X3BhcmVudF9ub192aWFyb290IEZPUiBUQUJM RSB0YmxfcGFyZW50IFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2UpOwor Q1JFQVRFIFBVQkxJQ0FUSU9OIHB1Yl9wYXJ0X3BhcmVudF9jaGlsZCBGT1IgVEFCTEUgdGJsX3Bh cmVudCwgdGJsX3BhcnQxIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSk7 CitSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOworCitDUkVBVEUgRlVOQ1RJT04gdGVzdF9ncHQo cHVibmFtZXMgdGV4dFtdLCByZWxuYW1lIHRleHQpCitSRVRVUk5TIFRBQkxFICgKKyAgcHVibmFt ZSB0ZXh0LAorICByZWxuYW1lIG5hbWUsCisgIGF0dHJzIHRleHQsCisgIHF1YWwgdGV4dAorKQor QkVHSU4gQVRPTUlDCisgIFNFTEVDVCBwLnB1Ym5hbWUsIGMucmVsbmFtZSwgZ3B0LmF0dHJzOjp0 ZXh0LCBwZ19nZXRfZXhwcihncHQucXVhbCwgZ3B0LnJlbGlkKQorICAgIEZST00gcGdfZ2V0X3B1 YmxpY2F0aW9uX3RhYmxlcyhwdWJuYW1lcywgcmVsbmFtZTo6cmVnY2xhc3M6Om9pZCkgZ3B0Cisg ICAgSk9JTiBwZ19wdWJsaWNhdGlvbiBwIE9OIHAub2lkID0gZ3B0LnB1YmlkCisgICAgSk9JTiBw Z19jbGFzcyBjIE9OIGMub2lkID0gZ3B0LnJlbGlkCisgIE9SREVSIEJZIHAucHVibmFtZSwgYy5y ZWxuYW1lOworRU5EOworCitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfbm9ybWFs J10sICd0Ymxfbm9ybWFsJyk7CitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfbm9y bWFsJ10sICdncHRfdGVzdF9zY2gudGJsX3NjaCcpOyAtLSBubyByZXN1bHQKKworU0VMRUNUICog RlJPTSB0ZXN0X2dwdChBUlJBWVsncHViX3NjaGVtYSddLCAnZ3B0X3Rlc3Rfc2NoLnRibF9zY2gn KTsKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9zY2hlbWEnXSwgJ3RibF9ub3Jt YWwnKTsgLS0gbm8gcmVzdWx0CisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9w YXJ0X3BhcmVudCddLCAndGJsX3BhcmVudCcpOworU0VMRUNUICogRlJPTSB0ZXN0X2dwdChBUlJB WVsncHViX3BhcnRfcGFyZW50J10sICd0YmxfcGFydDEnKTsgLS0gbm8gcmVzdWx0CisKK1NFTEVD VCAqIEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9wYXJ0X3BhcmVudF9ub192aWFyb290J10sICd0 YmxfcGFydDEnKTsKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9wYXJ0X3BhcmVu dF9ub192aWFyb290J10sICd0YmxfcGFyZW50Jyk7IC0tIG5vIHJlc3VsdAorCitTRUxFQ1QgKiBG Uk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfcGFydF9sZWFmJ10sICd0YmxfcGFydDEnKTsKK1NFTEVD VCAqIEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9wYXJ0X2xlYWYnXSwgJ3RibF9wYXJlbnQnKTsg LS0gbm8gcmVzdWx0CisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9hbGwnXSwg J3RibF9wYXJlbnQnKTsKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9hbGwnXSwg J3RibF9wYXJ0MScpOyAtLSBubyByZXN1bHQKKworU0VMRUNUICogRlJPTSB0ZXN0X2dwdChBUlJB WVsncHViX2FsbF9ub192aWFyb290J10sICd0YmxfcGFydDEnKTsKK1NFTEVDVCAqIEZST00gdGVz dF9ncHQoQVJSQVlbJ3B1Yl9hbGxfbm9fdmlhcm9vdCddLCAndGJsX3BhcmVudCcpOyAtLSBubyBy ZXN1bHQKKworU0VMRUNUICogRlJPTSB0ZXN0X2dwdChBUlJBWVsncHViX3BhcnRfcGFyZW50X2No aWxkJ10sICd0YmxfcGFyZW50Jyk7CitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJf cGFydF9wYXJlbnRfY2hpbGQnXSwgJ3RibF9wYXJ0MScpOyAtLSBubyByZXN1bHQKKworLS0gdGVz dCBmb3IgdGhlIEVYQ0xVREUgY2xhdXNlCitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydw dWJfYWxsX2V4Y2VwdCddLCAndGJsX25vcm1hbCcpOworU0VMRUNUICogRlJPTSB0ZXN0X2dwdChB UlJBWVsncHViX2FsbF9leGNlcHQnXSwgJ2dwdF90ZXN0X3NjaC50Ymxfc2NoJyk7IC0tIG5vIHJl c3VsdCAoZXhjbHVkZWQpCitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfYWxsX2V4 Y2VwdCddLCAndGJsX3BhcmVudCcpOyAtLSBubyByZXN1bHQgKGV4Y2x1ZGVkKQorU0VMRUNUICog RlJPTSB0ZXN0X2dwdChBUlJBWVsncHViX2FsbF9leGNlcHQnXSwgJ3RibF9wYXJ0MScpOyAtLSBu byByZXN1bHQKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9hbGxfZXhjZXB0X25v X3ZpYXJvb3QnXSwgJ3RibF9ub3JtYWwnKTsKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoQVJSQVlb J3B1Yl9hbGxfZXhjZXB0X25vX3ZpYXJvb3QnXSwgJ2dwdF90ZXN0X3NjaC50Ymxfc2NoJyk7IC0t IG5vIHJlc3VsdCAoZXhjbHVkZWQpCitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJf YWxsX2V4Y2VwdF9ub192aWFyb290J10sICd0YmxfcGFyZW50Jyk7IC0tIG5vIHJlc3VsdCAoZXhj bHVkZWQpCitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfYWxsX2V4Y2VwdF9ub192 aWFyb290J10sICd0YmxfcGFydDEnKTsgLS0gbm8gcmVzdWx0CisKKy0tIHR3byByb3dzIHdpdGgg ZGlmZmVyZW50IHJvdyBmaWx0ZXIKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9h bGwnLCAncHViX25vcm1hbCddLCAndGJsX25vcm1hbCcpOworCistLSBvbmUgcm93IHdpdGggJ3B1 Yl9wYXJ0X3BhcmVudCcKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9wYXJ0X3Bh cmVudCcsICdwdWJfcGFydF9wYXJlbnRfbm9fdmlhcm9vdCddLCAndGJsX3BhcmVudCcpOworCist LSBubyByZXN1bHQsIHRibF9wYXJlbnQgaXMgdGhlIGVmZmVjdGl2ZSBwdWJsaXNoZWQgT0lEIGR1 ZSB0byBwdWJ2aWFyb290CitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfcGFydF9w YXJlbnQnLCAncHViX2FsbCddLCAndGJsX3BhcnQxJyk7CisKKy0tIG5vIHJlc3VsdCwgbm9uLWV4 aXN0ZW50IHB1YmxpY2F0aW9uCitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydub19zdWNo X3B1YiddLCAndGJsX25vcm1hbCcpOworCistLSBubyByZXN1bHQsIG5vbi10YWJsZSBvYmplY3QK K1NFTEVDVCAqIEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9hbGwnXSwgJ2dwdF90ZXN0X3ZpZXcn KTsKKworLS0gbm8gcmVzdWx0LCBlbXB0eSBwdWJsaWNhdGlvbiBhcnJheQorU0VMRUNUICogRlJP TSB0ZXN0X2dwdChBUlJBWVtdOjp0ZXh0W10sICd0Ymxfbm9ybWFsJyk7CisKKy0tIG5vIHJlc3Vs dCwgT0lEIDAgYXMgdGFyZ2V0X3JlbGlkCitTRUxFQ1QgKiBGUk9NIHBnX2dldF9wdWJsaWNhdGlv bl90YWJsZXMoQVJSQVlbJ3B1Yl9ub3JtYWwnXSwgMDo6b2lkKTsKKworLS0gQ2xlYW4gdXAKK0RS T1AgRlVOQ1RJT04gdGVzdF9ncHQodGV4dFtdLCB0ZXh0KTsKK0RST1AgUFVCTElDQVRJT04gcHVi X2FsbDsKK0RST1AgUFVCTElDQVRJT04gcHViX2FsbF9ub192aWFyb290OworRFJPUCBQVUJMSUNB VElPTiBwdWJfYWxsX2V4Y2VwdDsKK0RST1AgUFVCTElDQVRJT04gcHViX2FsbF9leGNlcHRfbm9f dmlhcm9vdDsKK0RST1AgUFVCTElDQVRJT04gcHViX3NjaGVtYTsKK0RST1AgUFVCTElDQVRJT04g cHViX25vcm1hbDsKK0RST1AgUFVCTElDQVRJT04gcHViX3BhcnRfbGVhZjsKK0RST1AgUFVCTElD QVRJT04gcHViX3BhcnRfcGFyZW50OworRFJPUCBQVUJMSUNBVElPTiBwdWJfcGFydF9wYXJlbnRf bm9fdmlhcm9vdDsKK0RST1AgUFVCTElDQVRJT04gcHViX3BhcnRfcGFyZW50X2NoaWxkOworRFJP UCBWSUVXIGdwdF90ZXN0X3ZpZXc7CitEUk9QIFRBQkxFIHRibF9ub3JtYWwsIHRibF9wYXJlbnQs IHRibF9wYXJ0MTsKK0RST1AgU0NIRU1BIGdwdF90ZXN0X3NjaCBDQVNDQURFOworCiAtLSBzdGFn ZSBvYmplY3RzIGZvciBwZ19kdW1wIHRlc3RzCiBDUkVBVEUgU0NIRU1BIHB1Ym1lIENSRUFURSBU QUJMRSB0MCAoYyBpbnQsIGQgaW50KSBDUkVBVEUgVEFCTEUgdDEgKGMgaW50KTsKIENSRUFURSBT Q0hFTUEgcHVibWUyIENSRUFURSBUQUJMRSB0MCAoYyBpbnQsIGQgaW50KTsKLS0gCjIuNDcuMwoK --0000000000001bb0a0064e572544--