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 1vxQnW-00DhgX-1L for pgsql-bugs@arkaria.postgresql.org; Tue, 03 Mar 2026 14:32:30 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vxQnU-007JDM-23 for pgsql-bugs@arkaria.postgresql.org; Tue, 03 Mar 2026 14:32:29 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vxQnU-007JD5-0P for pgsql-bugs@lists.postgresql.org; Tue, 03 Mar 2026 14:32:28 +0000 Received: from mail-oa1-x2d.google.com ([2001:4860:4864:20::2d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vxQnS-00000000Bsp-2AO2 for pgsql-bugs@lists.postgresql.org; Tue, 03 Mar 2026 14:32:27 +0000 Received: by mail-oa1-x2d.google.com with SMTP id 586e51a60fabf-40f1a1f77a6so584233fac.2 for ; Tue, 03 Mar 2026 06:32:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1772548346; cv=none; d=google.com; s=arc-20240605; b=gBIMAZNvGHTgr63jTENVj5McKDgAln9y+lNQSJw4eN8kjCpLhW4o7Hh3B7V9aVnF4X DrS9dPu6a000Qs5HIOowplW4R0kun56lJxTwIf7GN+lzLX7QlASs8hbtQIJbVBwzX9d6 oTPeDkHiP+Pq4yYz0mfd+uZzX6iRj8SDb/dtp2IkMFJ4ORUVe2PxnYdcUFc1wNJ+42nc fkLAZdZHAKUs42INbY/5yzo2hwL0T/1t6h/LlkmfJNx1yMKuiVizkWKjMw695ursQmSc 8KNFy1DmU0IeLVeCVocHL5nydy8wnW72fxfp/S6+JFxd/lDT0L0CGhacPVkiHtfAQEf5 MC/w== 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=XyA6jMktWx4ACXKpVr5xHviSM80npj/63cU7MuPl0tU=; fh=kJpr5Tv+eKxnRm8275hNoJ69kAcofjzGz1rhWBVlfdw=; b=kq+LoZJu03vlZYmX63tMBUcUGxeuEYkhedjG/KZElq/g3d7LyElPQiDD6ZtWPEfvXj Du8nwmvnYjkPb2Ew7swabU9NAGc6Uo0TJ0a/Iw/1bdArbCa32+T0sOJ9i9h+J6YJDvW/ NAPYSSr065y9X5dDme1vwg91xIvNk3H17h0ArSCH0Pg9EZ01pRBxJnSVrT4QbVx4W8Ao WRPOFCCAvr9FWi6QPsJvfc88eMSZzoE8/ZuIH7pNcqjjeXjXMLOn7kKU18+1Aoudw3AQ Ja3chP/hdzQ2Mw0bK6CUA+TGguSMy14B/CTCkZpsNs3tFgN1cPH3Is8GyKOBtA8MDHIF gwZQ==; 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=20230601; t=1772548346; x=1773153146; 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=XyA6jMktWx4ACXKpVr5xHviSM80npj/63cU7MuPl0tU=; b=Ae/Cf8cUQv84dhIucN8BXQHoO+BZMg5jaue5OVcwC3IXSouxWhMRbQ4TZ9C64xiSQB Z96A9rxbo316uzNxyuppqEqGgaxG67pr9BB2/apIA8quGXZfmwNxDt2E5WZ2FF8UXzwO ahWLjN6pdeHgKvdAKn8ojaBq4JShXKGm/ta/x8Uzm1I/pHbcRtct3KWccgMsXzdwI8fx txjOFUXtdoIcYigZ++KQqJM1651tfqBDG6yGZ16TRdZ9XTNmEwaXrlK2y3BeyamG1suM i720/hgmEYMpVoWUUHFnswQ5YbF7HLAZ6q/EtNovcKa43HYYXxC37sbb6PAk83JDcmzw duMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772548346; x=1773153146; 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=XyA6jMktWx4ACXKpVr5xHviSM80npj/63cU7MuPl0tU=; b=aXPpy/D/oFC6CgLk6TL/9o1svMqHvFrnFreb/Ps9enbsM+NoYu0QHA3EAUgOqF/q1L L8efH77QDUzFgGcskLyBiL5Vmv1WOVkQa2MAVkOFn4abmdOjX6CX0ETsI/pCH37BwS0S qMoo5XzafYSm9JQFDCfz31keUCLVjLZm0so0gg57T8cB9EeZYif7d+djfw7pfFofTbQu yY3ftYwUWsaHA0PP1JLIisMvlk9IcNuWrK14gtvEhBv1y+YIqe8sPxDiiQ+1ZcQnhs49 6ZHsDQM/mYfCzLmFqBB4cR3m3BMnAQj/qODi7hyESiFdiU1+TPxCr0OtWtr36ORzkyam Ksig== X-Forwarded-Encrypted: i=1; AJvYcCXAAUfjwiWtHl54k+DUcdUEPMUTASbLAw3BR64X9eh4o9uvtQIn5LEnHwFnbIsD0WbEV/ZxZgDcQ3Ul@lists.postgresql.org X-Gm-Message-State: AOJu0YzRpGy0uvo18U2P+xo+pXsvusadsdexQimUWMl7z/Cv2DuW2YYQ qxepKgNkasiUPQ78ma9uj6zrjhLPd5GJpt8qV/CdtZlNMEL2fYPRn+gQqlaRJQgAwGVhPUJzcmm zgb+E8AlA2JNYglg2VUSL60WxGkP5JWo= X-Gm-Gg: ATEYQzy9WESXTwuC1KRB36oh4hmi+l/luZMlnFdLrTM38DkmuMN19cPoo/z/eAt8IL0 Zh/cHZJ4rgG8rYGQHKShbafFTNdtClDTgEChxiqn3cX459CHE2UfJRgr+ObNskkeuxXkdVGomTu DYpgLE66IQ3MaouUt+oTD+5Jqxep95vJEmsALnBaMNtGNQhZy5S2fCOXzjAmJcWzbHQhjRsffaR 91saUuWyivlP5sgv8wmTuej7wtIuy+uayJF/Wsjpdc0IJ6urf40xM4Z9j2gLclf7x8ZDvmBfocX JhYTFna0 X-Received: by 2002:a4a:df4f:0:b0:67a:381:d0b9 with SMTP id 006d021491bc7-67a0381d2camr5629076eaf.25.1772548345927; Tue, 03 Mar 2026 06:32:25 -0800 (PST) MIME-Version: 1.0 References: <19418-591ba1f29862ef5b@postgresql.org> <2abdb464-27f5-4759-bb0b-f09ab5b5ceab@postgresfriends.org> <501040.1772433449@sss.pgh.pa.us> In-Reply-To: From: Richard Guo Date: Tue, 3 Mar 2026 23:32:12 +0900 X-Gm-Features: AaiRm52vdAaUazgBEG_SJQ7uHjQl1FkCTQCHiOsjEcDtvRq7uriKYrSeyaJc10Q Message-ID: Subject: Re: BUG #19418: SQL/JSON JSON_VALUE() does not conform to ISO/IEC 9075-2:2023(E) 6.34 To: Tom Lane Cc: Vik Fearing , lukas.eder@gmail.com, pgsql-bugs@lists.postgresql.org, =?UTF-8?Q?=C3=81lvaro_Herrera?= Content-Type: multipart/mixed; boundary="00000000000081b647064c1f9206" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000081b647064c1f9206 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Mar 3, 2026 at 10:03=E2=80=AFAM Richard Guo wrote: > That is a good point I hadn't considered. So I think the ideal fix is > to have the parser preserve the user's original JSON_ARRAY(query) > syntax as much as possible, and then defer the JSON_ARRAYAGG rewrite > trick to the planner, perhaps during expression preprocessing. I tried hacking on this idea to see how it would look in practice, and here is what I got. - Richard --00000000000081b647064c1f9206 Content-Type: application/octet-stream; name="v2-0001-Fix-JSON_ARRAY-query-empty-set-handling-and-view-.patch" Content-Disposition: attachment; filename="v2-0001-Fix-JSON_ARRAY-query-empty-set-handling-and-view-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmapi92t0 RnJvbSA5OWZlMGY4MjcwMmU4OWY2OTIxMzM1NjFlNTljNjgyOWZmZDA1NThiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogTW9uLCAyIE1hciAyMDI2IDEyOjExOjAwICswOTAwClN1YmplY3Q6IFtQQVRDSCB2Ml0g Rml4IEpTT05fQVJSQVkocXVlcnkpIGVtcHR5IHNldCBoYW5kbGluZyBhbmQgdmlldwogZGVwYXJz aW5nCgpBY2NvcmRpbmcgdG8gdGhlIFNRTC9KU09OIHN0YW5kYXJkLCBKU09OX0FSUkFZKHF1ZXJ5 KSBtdXN0IHJldHVybiBhbgplbXB0eSBKU09OIGFycmF5ICgnW10nKSB3aGVuIHRoZSBzdWJxdWVy eSByZXR1cm5zIHplcm8gcm93cy4KClByZXZpb3VzbHksIHRoZSBwYXJzZXIgcmV3cm90ZSBKU09O X0FSUkFZKHF1ZXJ5KSBpbnRvIGEgSlNPTl9BUlJBWUFHRwphZ2dyZWdhdGUgZnVuY3Rpb24uICBC ZWNhdXNlIHRoaXMgYWdncmVnYXRlIGV2YWx1YXRlcyB0byBOVUxMIG92ZXIgYW4KZW1wdHkgc2V0 IHdpdGhvdXQgYSBHUk9VUCBCWSBjbGF1c2UsIHRoZSBjb25zdHJ1Y3RvciBlcnJvbmVvdXNseQpy ZXR1cm5lZCBOVUxMLiAgQWRkaXRpb25hbGx5LCB0aGlzIHByZW1hdHVyZSByZXdyaXRlIGJha2Vk IHBoeXNpY2FsCmltcGxlbWVudGF0aW9uIGRldGFpbHMgaW50byB0aGUgY2F0YWxvZywgcHJldmVu dGluZyBydWxldXRpbHMuYyBmcm9tCmRlcGFyc2luZyB0aGUgb3JpZ2luYWwgc3ludGF4IGZvciB2 aWV3cy4KClRoaXMgcGF0Y2ggcmVzb2x2ZXMgYm90aCBpc3N1ZXMgYnkgcHJlc2VydmluZyB0aGUg dXNlcidzIHNlbWFudGljCmludGVudCBpbiB0aGUgcGFyc2V0cmVlLiAgQSBuZXcgSlNDVE9SX0pT T05fQVJSQVlfUVVFUlkgbm9kZSB0eXBlIGlzCmludHJvZHVjZWQgdG8gaWRlbnRpZnkgcXVlcnkg Y29uc3RydWN0b3JzLiAgVGhlIHBhcnNlciBub3cgZW1pdHMgdGhpcwpub2RlIHdyYXBwaW5nIGEg c3RhbmRhcmQgRVhQUl9TVUJMSU5LLCBhbGxvd2luZyBydWxldXRpbHMuYyB0bwpyZWNvZ25pemUg YW5kIGRlcGFyc2UgdGhlIG9yaWdpbmFsIHN5bnRheC4KClRoZSBwaHlzaWNhbCB0cmFuc2Zvcm1h dGlvbiBpcyBub3cgZGVmZXJyZWQgdG8gdGhlIHBsYW5uZXIuICBEdXJpbmcKcGxhbm5pbmcsIHRo ZSB1c2VyJ3Mgc3VicXVlcnkgaXMgd3JhcHBlZCBpbiBhbiBvdXRlciBTRUxFQ1QgYmxvY2ssIHNv CnRoYXQgY2xhdXNlcyBsaWtlIE9SREVSIEJZIGFuZCBMSU1JVCBhcmUgZXZhbHVhdGVkIGJlZm9y ZSB0aGUKSlNPTl9BUlJBWUFHRyBhZ2dyZWdhdGUgaXMgYXBwbGllZC4gIEEgZnVsbHkgYW5hbHl6 ZWQgQWdncmVmIGlzIHRoZW4KYXR0YWNoZWQgdG8gdGhpcyB3cmFwcGVyLCBhbmQgdGhlIGVudGly ZSBjb25zdHJ1Y3QgaXMgZW5jYXBzdWxhdGVkIGluCmEgQ09BTEVTQ0UgZXhwcmVzc2lvbi4gIFRo aXMgZW5zdXJlcyB0aGF0IGEgTlVMTCByZXN1bHRpbmcgZnJvbSBhbgplbXB0eSBzZXQgaXMgY2F1 Z2h0IGFuZCByZXBsYWNlZCB3aXRoIGFuIGVtcHR5IEpTT04gYXJyYXkuCi0tLQogZG9jL3NyYy9z Z21sL2Z1bmMvZnVuYy1qc29uLnNnbWwgICAgICB8ICAgMyArLQogc3JjL2JhY2tlbmQvb3B0aW1p emVyL3V0aWwvY2xhdXNlcy5jICB8IDE3NiArKysrKysrKysrKysrKysrKysrKysrKysrLQogc3Jj L2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYyAgICAgICB8ICA3NiArKystLS0tLS0tLQogc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jICAgICB8ICAyMCArKysKIHNyYy9pbmNsdWRl L25vZGVzL3ByaW1ub2Rlcy5oICAgICAgICAgfCAgMTUgKystCiBzcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3NxbGpzb24ub3V0IHwgIDkyICsrKysrKysrKysrKystCiBzcmMvdGVzdC9yZWdyZXNz L3NxbC9zcWxqc29uLnNxbCAgICAgIHwgIDM4ICsrKysrKwogNyBmaWxlcyBjaGFuZ2VkLCAzNTEg aW5zZXJ0aW9ucygrKSwgNjkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L2Z1bmMvZnVuYy1qc29uLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWpzb24uc2dtbApp bmRleCAxZWM3M2NmZjQ2NC4uZDUxMGJhODM3NWIgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9m dW5jL2Z1bmMtanNvbi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtanNvbi5zZ21s CkBAIC02MjAsNyArNjIwLDggQEAKICAgICAgICAgIHdoaWNoIG11c3QgYmUgYSBTRUxFQ1QgcXVl cnkgcmV0dXJuaW5nIGEgc2luZ2xlIGNvbHVtbi4gSWYKICAgICAgICAgIDxsaXRlcmFsPkFCU0VO VCBPTiBOVUxMPC9saXRlcmFsPiBpcyBzcGVjaWZpZWQsIE5VTEwgdmFsdWVzIGFyZSBpZ25vcmVk LgogICAgICAgICAgVGhpcyBpcyBhbHdheXMgdGhlIGNhc2UgaWYgYQotICAgICAgICAgPHJlcGxh Y2VhYmxlPnF1ZXJ5X2V4cHJlc3Npb248L3JlcGxhY2VhYmxlPiBpcyB1c2VkLgorICAgICAgICAg PHJlcGxhY2VhYmxlPnF1ZXJ5X2V4cHJlc3Npb248L3JlcGxhY2VhYmxlPiBpcyB1c2VkLiBJZiB0 aGUgcXVlcnkgcmV0dXJucworICAgICAgICAgbm8gcm93cywgYW4gZW1wdHkgSlNPTiBhcnJheSBp cyByZXR1cm5lZC4KICAgICAgICAgPC9wYXJhPgogICAgICAgICA8cGFyYT4KICAgICAgICAgIDxs aXRlcmFsPmpzb25fYXJyYXkoMSx0cnVlLGpzb24gJ3siYSI6bnVsbH0nKTwvbGl0ZXJhbD4KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2NsYXVzZXMuYyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci91dGlsL2NsYXVzZXMuYwppbmRleCBhNDFkODE3MzRjZi4uNDM4MjdhZjJm ZTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2NsYXVzZXMuYworKysg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMKQEAgLTIwLDYgKzIwLDcgQEAK ICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5o IgorI2luY2x1ZGUgImNhdGFsb2cvcGdfYWdncmVnYXRlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9w Z19jbGFzcy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfbGFuZ3VhZ2UuaCIKICNpbmNsdWRlICJj YXRhbG9nL3BnX29wZXJhdG9yLmgiCkBAIC0xMzMsNiArMTM0LDcgQEAgc3RhdGljIEV4cHIgKnNp bXBsaWZ5X2Z1bmN0aW9uKE9pZCBmdW5jaWQsCiAJCQkJCQkJICAgZXZhbF9jb25zdF9leHByZXNz aW9uc19jb250ZXh0ICpjb250ZXh0KTsKIHN0YXRpYyBOb2RlICpzaW1wbGlmeV9hZ2dyZWYoQWdn cmVmICphZ2dyZWYsCiAJCQkJCQkJIGV2YWxfY29uc3RfZXhwcmVzc2lvbnNfY29udGV4dCAqY29u dGV4dCk7CitzdGF0aWMgTm9kZSAqcmV3cml0ZV9qc29uX2FycmF5X3N1YnF1ZXJ5KEpzb25Db25z dHJ1Y3RvckV4cHIgKmV4cHIpOwogc3RhdGljIExpc3QgKnJlb3JkZXJfZnVuY3Rpb25fYXJndW1l bnRzKExpc3QgKmFyZ3MsIGludCBwcm9uYXJncywKIAkJCQkJCQkJCQlIZWFwVHVwbGUgZnVuY190 dXBsZSk7CiBzdGF0aWMgTGlzdCAqYWRkX2Z1bmN0aW9uX2RlZmF1bHRzKExpc3QgKmFyZ3MsIGlu dCBwcm9uYXJncywKQEAgLTMwMTAsNyArMzAxMiw2IEBAIGV2YWxfY29uc3RfZXhwcmVzc2lvbnNf bXV0YXRvcihOb2RlICpub2RlLAogCQkJCX0KIAkJCQlicmVhazsKIAkJCX0KLQogCQljYXNlIFRf SnNvblZhbHVlRXhwcjoKIAkJCXsKIAkJCQlKc29uVmFsdWVFeHByICpqdmUgPSAoSnNvblZhbHVl RXhwciAqKSBub2RlOwpAQCAtMzAzNCw3ICszMDM1LDE4IEBAIGV2YWxfY29uc3RfZXhwcmVzc2lv bnNfbXV0YXRvcihOb2RlICpub2RlLAogCQkJCQkJCQkJCQkJICAoRXhwciAqKSBmb3JtYXR0ZWRf ZXhwciwKIAkJCQkJCQkJCQkJCSAgY29weU9iamVjdChqdmUtPmZvcm1hdCkpOwogCQkJfQorCQlj YXNlIFRfSnNvbkNvbnN0cnVjdG9yRXhwcjoKKwkJCXsKKwkJCQlKc29uQ29uc3RydWN0b3JFeHBy ICpqY2UgPSAoSnNvbkNvbnN0cnVjdG9yRXhwciAqKSBub2RlOwogCisJCQkJaWYgKGpjZS0+dHlw ZSA9PSBKU0NUT1JfSlNPTl9BUlJBWV9RVUVSWSkKKwkJCQl7CisJCQkJCU5vZGUJICAgKnJld3Jp dHRlbiA9IHJld3JpdGVfanNvbl9hcnJheV9zdWJxdWVyeShqY2UpOworCisJCQkJCXJldHVybiBl dmFsX2NvbnN0X2V4cHJlc3Npb25zX211dGF0b3IocmV3cml0dGVuLCBjb250ZXh0KTsKKwkJCQl9 CisJCQl9CisJCQlicmVhazsKIAkJY2FzZSBUX1N1YlBsYW46CiAJCWNhc2UgVF9BbHRlcm5hdGl2 ZVN1YlBsYW46CiAKQEAgLTQzNzgsNiArNDM5MCwxNjggQEAgc2ltcGxpZnlfYWdncmVmKEFnZ3Jl ZiAqYWdncmVmLCBldmFsX2NvbnN0X2V4cHJlc3Npb25zX2NvbnRleHQgKmNvbnRleHQpCiAJcmV0 dXJuIChOb2RlICopIGFnZ3JlZjsKIH0KIAorLyoKKyAqIFN1YnJvdXRpbmUgZm9yIGV2YWxfY29u c3RfZXhwcmVzc2lvbnM6IHRyYW5zZm9ybSBhIEpTQ1RPUl9KU09OX0FSUkFZX1FVRVJZCisgKiBl eHByZXNzaW9uIGludG8gaXRzIGV4ZWN1dGFibGUgZm9ybToKKyAqCisgKiAgICAgQ09BTEVTQ0Uo KFNFTEVDVCBKU09OX0FSUkFZQUdHKGNvbCkgRlJPTSAodXNlcl9xdWVyeSkpLCAnW10nKQorICoK KyAqIFRoaXMgaXMgZG9uZSBkdXJpbmcgcGxhbm5pbmcgcmF0aGVyIHRoYW4gcGFyc2UgYW5hbHlz aXMgc28gdGhhdCBydWxldXRpbHMuYworICogY2FuIGRlcGFyc2UgdGhlIG9yaWdpbmFsIHN5bnRh eCBmb3Igdmlld3MuCisgKgorICogVGhlIHVzZXIncyBxdWVyeSBpcyB3cmFwcGVkIGluIGFuIG91 dGVyIFNFTEVDVCBzbyB0aGF0IGNsYXVzZXMgbGlrZSBPUkRFUiBCWQorICogYW5kIExJTUlUIGFy ZSBldmFsdWF0ZWQgYmVmb3JlIGFnZ3JlZ2F0aW9uLiAgQ09BTEVTQ0UgZW5zdXJlcyB0aGF0IHdl IHJldHVybgorICogYW4gZW1wdHkgYXJyYXkgcmF0aGVyIHRoYW4gTlVMTCBvbiBhbiBlbXB0eSBy ZXN1bHQgc2V0LCBwZXIgdGhlIFNRTC9KU09OCisgKiBzdGFuZGFyZC4KKyAqLworc3RhdGljIE5v ZGUgKgorcmV3cml0ZV9qc29uX2FycmF5X3N1YnF1ZXJ5KEpzb25Db25zdHJ1Y3RvckV4cHIgKmV4 cHIpCit7CisJU3ViTGluayAgICAqc3VibGluayA9IGxpbml0aWFsX25vZGUoU3ViTGluaywgZXhw ci0+YXJncyk7CisJU3ViTGluayAgICAqbmV3c3VibGluazsKKwlRdWVyeQkgICAqc3VicXVlcnk7 CisJUXVlcnkJICAgKm5ld3F1ZXJ5OworCUxpc3QJICAgKmNvbG5hbWVzOworCVRhcmdldEVudHJ5 ICp0bGU7CisJUmFuZ2VUYmxFbnRyeSAqcnRlOworCVJhbmdlVGJsUmVmICpydHI7CisJVmFyCQkg ICAqbmV3dmFyOworCUpzb25Db25zdHJ1Y3RvckV4cHIgKm5ld2pzY3RvcjsKKwlBZ2dyZWYJICAg KmFnZ3JlZjsKKwlDb25zdAkgICAqZW1wdHlfanNvbl9jb25zdDsKKwlPaWQJCQlhZ2dmbm9pZDsK KwlPaWQJCQlhZ2d0eXBlOworCU9pZAkJCXR5cGlucHV0OworCU9pZAkJCXR5cGlvcGFyYW07CisJ Q29hbGVzY2VFeHByICpjb2FsZXNjZTsKKworCUFzc2VydChleHByLT50eXBlID09IEpTQ1RPUl9K U09OX0FSUkFZX1FVRVJZKTsKKwlBc3NlcnQoc3VibGluay0+c3ViTGlua1R5cGUgPT0gRVhQUl9T VUJMSU5LKTsKKworCW5ld3N1YmxpbmsgPSBjb3B5T2JqZWN0KHN1YmxpbmspOworCXN1YnF1ZXJ5 ID0gKFF1ZXJ5ICopIG5ld3N1YmxpbmstPnN1YnNlbGVjdDsKKworCS8qCisJICogU2luY2Ugd2Ug YXJlIHB1c2hpbmcgdGhlIHN1YnF1ZXJ5IGRvd24gb25lIGxldmVsLCB3ZSBtdXN0IGluY3JlbWVu dCB0aGUKKwkgKiBzdWJsZXZlbHMgb2YgYW55IG91dGVyIHJlZmVyZW5jZXMgaXQgY29udGFpbnMu CisJICovCisJSW5jcmVtZW50VmFyU3VibGV2ZWxzVXAoKE5vZGUgKikgc3VicXVlcnksIDEsIDEp OworCisJLyogTW9zdCBvZiB0aGUgdXBwZXIgUXVlcnkgc3RydWN0IGNhbiBiZSBsZWZ0IGFzIHpl cm9lcy9udWxscyAqLworCW5ld3F1ZXJ5ID0gbWFrZU5vZGUoUXVlcnkpOworCW5ld3F1ZXJ5LT5j b21tYW5kVHlwZSA9IENNRF9TRUxFQ1Q7CisJbmV3cXVlcnktPnF1ZXJ5U291cmNlID0gc3VicXVl cnktPnF1ZXJ5U291cmNlOworCW5ld3F1ZXJ5LT5jYW5TZXRUYWcgPSB0cnVlOworCisJdGxlID0g bGluaXRpYWxfbm9kZShUYXJnZXRFbnRyeSwgc3VicXVlcnktPnRhcmdldExpc3QpOworCWNvbG5h bWVzID0gbGlzdF9tYWtlMShtYWtlU3RyaW5nKHRsZS0+cmVzbmFtZSA/CisJCQkJCQkJCQkgcHN0 cmR1cCh0bGUtPnJlc25hbWUpIDoKKwkJCQkJCQkJCSBwc3RyZHVwKCJqc29uX2NvbCIpKSk7CisK KwkvKiBCdWlsZCBhIHN1aXRhYmxlIFJURSBmb3IgdGhlIHN1YnF1ZXJ5ICovCisJcnRlID0gbWFr ZU5vZGUoUmFuZ2VUYmxFbnRyeSk7CisJcnRlLT5ydGVraW5kID0gUlRFX1NVQlFVRVJZOworCXJ0 ZS0+c3VicXVlcnkgPSBzdWJxdWVyeTsKKwlydGUtPmVyZWYgPSBtYWtlQWxpYXMoImpzb25fYXJy YXlfc3VicXVlcnkiLCBjb2xuYW1lcyk7CisJcnRlLT5sYXRlcmFsID0gZmFsc2U7CisJcnRlLT5p bmggPSBmYWxzZTsKKwlydGUtPmluRnJvbUNsID0gdHJ1ZTsKKwluZXdxdWVyeS0+cnRhYmxlID0g bGlzdF9tYWtlMShydGUpOworCisJLyogQnVpbGQgYSBzdWl0YWJsZSBqb2ludHJlZSBmb3IgdGhl IHN1YnF1ZXJ5ICovCisJcnRyID0gbWFrZU5vZGUoUmFuZ2VUYmxSZWYpOworCXJ0ci0+cnRpbmRl eCA9IDE7CisJbmV3cXVlcnktPmpvaW50cmVlID0gbWFrZUZyb21FeHByKGxpc3RfbWFrZTEocnRy KSwgTlVMTCk7OworCisJLyogQ3JlYXRlIGEgVmFyIHJlZmVyZW5jaW5nIHRoZSBzdWJxdWVyeSdz IHNpbmdsZSBvdXRwdXQgY29sdW1uICovCisJbmV3dmFyID0gbWFrZVZhcigxLAorCQkJCQkgdGxl LT5yZXNubywKKwkJCQkJIGV4cHJUeXBlKChOb2RlICopIHRsZS0+ZXhwciksCisJCQkJCSBleHBy VHlwbW9kKChOb2RlICopIHRsZS0+ZXhwciksCisJCQkJCSBleHByQ29sbGF0aW9uKChOb2RlICop IHRsZS0+ZXhwciksCisJCQkJCSAwKTsKKworCS8qCisJICogQ29uc3RydWN0IHRoZSBKU09OX0FS UkFZQUdHIGFnZ3JlZ2F0ZSBub2RlLiAgV2UgbXVzdCBtYW51YWxseSByZXNvbHZlCisJICogdGhl IGZ1bmN0aW9uIE9JRCBhbmQgYnVpbGQgYSBmdWxseSBhbmFseXplZCBBZ2dyZWYgYmVjYXVzZSB3 ZSBhcmUKKwkgKiBieXBhc3NpbmcgcGFyc2UgYW5hbHlzaXMuCisJICovCisJaWYgKGV4cHItPnJl dHVybmluZyAmJgorCQlleHByLT5yZXR1cm5pbmctPmZvcm1hdC0+Zm9ybWF0X3R5cGUgPT0gSlNf Rk9STUFUX0pTT05CKQorCXsKKwkJYWdnZm5vaWQgPSBleHByLT5hYnNlbnRfb25fbnVsbCA/IEZf SlNPTkJfQUdHX1NUUklDVCA6IEZfSlNPTkJfQUdHOworCQlhZ2d0eXBlID0gSlNPTkJPSUQ7CisJ fQorCWVsc2UKKwl7CisJCWFnZ2Zub2lkID0gZXhwci0+YWJzZW50X29uX251bGwgPyBGX0pTT05f QUdHX1NUUklDVCA6IEZfSlNPTl9BR0c7CisJCWFnZ3R5cGUgPSBKU09OT0lEOworCX0KKworCWFn Z3JlZiA9IG1ha2VOb2RlKEFnZ3JlZik7CisJYWdncmVmLT5hZ2dmbm9pZCA9IGFnZ2Zub2lkOwor CWFnZ3JlZi0+YWdndHlwZSA9IGFnZ3R5cGU7CisJYWdncmVmLT5hZ2djb2xsaWQgPSBJbnZhbGlk T2lkOworCWFnZ3JlZi0+aW5wdXRjb2xsaWQgPSBleHByQ29sbGF0aW9uKChOb2RlICopIHRsZS0+ ZXhwcik7CisJYWdncmVmLT5hZ2d0cmFuc3R5cGUgPSBJbnZhbGlkT2lkOworCWFnZ3JlZi0+YWdn YXJndHlwZXMgPSBsaXN0X21ha2UxX29pZChleHByVHlwZSgoTm9kZSAqKSB0bGUtPmV4cHIpKTsK KwlhZ2dyZWYtPmFnZ2RpcmVjdGFyZ3MgPSBOSUw7CisJYWdncmVmLT5hcmdzID0gbGlzdF9tYWtl MShtYWtlVGFyZ2V0RW50cnkoKEV4cHIgKikgbmV3dmFyLCAxLCBOVUxMLCBmYWxzZSkpOworCWFn Z3JlZi0+YWdnb3JkZXIgPSBOSUw7CisJYWdncmVmLT5hZ2dkaXN0aW5jdCA9IE5JTDsKKwlhZ2dy ZWYtPmFnZ2ZpbHRlciA9IE5VTEw7CisJYWdncmVmLT5hZ2dzdGFyID0gZmFsc2U7CisJYWdncmVm LT5hZ2d2YXJpYWRpYyA9IGZhbHNlOworCWFnZ3JlZi0+YWdna2luZCA9IEFHR0tJTkRfTk9STUFM OworCWFnZ3JlZi0+YWdncHJlc29ydGVkID0gZmFsc2U7CisJYWdncmVmLT5hZ2dsZXZlbHN1cCA9 IDA7CisJYWdncmVmLT5hZ2dzcGxpdCA9IEFHR1NQTElUX1NJTVBMRTsKKwlhZ2dyZWYtPmFnZ25v ID0gLTE7CisJYWdncmVmLT5hZ2d0cmFuc25vID0gLTE7CisJYWdncmVmLT5sb2NhdGlvbiA9IGV4 cHItPmxvY2F0aW9uOworCisJLyoKKwkgKiBBdHRhY2ggdGhlIGFnZ3JlZ2F0ZSB0byB0aGUgb3V0 ZXIgcXVlcnkncyB0YXJnZXRsaXN0LiAgVGhlIGFnZ3JlZ2F0ZSBpcworCSAqIHdyYXBwZWQgaW4g YSBKU0NUT1JfSlNPTl9BUlJBWUFHRyBub2RlIHRvIGhvbGQgdGhlIFJFVFVSTklORyBhbmQgQUJT RU5UCisJICogT04gTlVMTCBmb3JtYXRzIGZyb20gdGhlIG9yaWdpbmFsIGV4cHJlc3Npb24uCisJ ICovCisJbmV3anNjdG9yID0gbWFrZU5vZGUoSnNvbkNvbnN0cnVjdG9yRXhwcik7CisJbmV3anNj dG9yLT50eXBlID0gSlNDVE9SX0pTT05fQVJSQVlBR0c7CisJbmV3anNjdG9yLT5hcmdzID0gTklM OworCW5ld2pzY3Rvci0+ZnVuYyA9IChFeHByICopIGFnZ3JlZjsKKwluZXdqc2N0b3ItPmNvZXJj aW9uID0gY29weU9iamVjdChleHByLT5jb2VyY2lvbik7CisJbmV3anNjdG9yLT5yZXR1cm5pbmcg PSBjb3B5T2JqZWN0KGV4cHItPnJldHVybmluZyk7CisJbmV3anNjdG9yLT5hYnNlbnRfb25fbnVs bCA9IGV4cHItPmFic2VudF9vbl9udWxsOworCW5ld2pzY3Rvci0+dW5pcXVlID0gZXhwci0+dW5p cXVlOworCW5ld2pzY3Rvci0+bG9jYXRpb24gPSBleHByLT5sb2NhdGlvbjsKKworCW5ld3F1ZXJ5 LT50YXJnZXRMaXN0ID0gbGlzdF9tYWtlMShtYWtlVGFyZ2V0RW50cnkoKEV4cHIgKikgbmV3anNj dG9yLAorCQkJCQkJCQkJCQkJCSAgMSwKKwkJCQkJCQkJCQkJCQkgIHBzdHJkdXAoImpzb25fYXJy YXlhZ2ciKSwKKwkJCQkJCQkJCQkJCQkgIGZhbHNlKSk7CisJbmV3cXVlcnktPmhhc0FnZ3MgPSB0 cnVlOworCisJbmV3c3VibGluay0+c3Vic2VsZWN0ID0gKE5vZGUgKikgbmV3cXVlcnk7CisKKwkv KgorCSAqIFdyYXAgdGhlIGVudGlyZSBjb25zdHJ1Y3QgaW4gYSBDT0FMRVNDRSBleHByZXNzaW9u LiAgSWYgdGhlIGlubmVyIHF1ZXJ5CisJICogcmV0dXJucyB6ZXJvIHJvd3MsIHRoZSBhZ2dyZWdh dGUgZXZhbHVhdGVzIHRvIE5VTEwuICBXZSB1c2UgQ09BTEVTQ0UgdG8KKwkgKiByZXR1cm4gYW4g ZW1wdHkgSlNPTiBhcnJheSBpbnN0ZWFkLgorCSAqLworCWdldFR5cGVJbnB1dEluZm8oYWdndHlw ZSwgJnR5cGlucHV0LCAmdHlwaW9wYXJhbSk7CisJZW1wdHlfanNvbl9jb25zdCA9IG1ha2VDb25z dChhZ2d0eXBlLCAtMSwgSW52YWxpZE9pZCwgLTEsCisJCQkJCQkJCSBPaWRJbnB1dEZ1bmN0aW9u Q2FsbCh0eXBpbnB1dCwgIltdIiwgdHlwaW9wYXJhbSwgLTEpLAorCQkJCQkJCQkgZmFsc2UsIGZh bHNlKTsKKworCWNvYWxlc2NlID0gbWFrZU5vZGUoQ29hbGVzY2VFeHByKTsKKwljb2FsZXNjZS0+ Y29hbGVzY2V0eXBlID0gYWdndHlwZTsKKwljb2FsZXNjZS0+Y29hbGVzY2Vjb2xsaWQgPSBJbnZh bGlkT2lkOworCWNvYWxlc2NlLT5hcmdzID0gbGlzdF9tYWtlMihuZXdzdWJsaW5rLCBlbXB0eV9q c29uX2NvbnN0KTsKKwljb2FsZXNjZS0+bG9jYXRpb24gPSBleHByLT5sb2NhdGlvbjsKKworCXJl dHVybiAoTm9kZSAqKSBjb2FsZXNjZTsKK30KKwogLyoKICAqIHZhcl9pc19ub25udWxsYWJsZTog Y2hlY2sgdG8gc2VlIGlmIHRoZSBWYXIgY2Fubm90IGJlIE5VTEwKICAqCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNl X2V4cHIuYwppbmRleCBkY2ZlMWFjYzRjMy4uMDZhMjhlYzVlMTUgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNl X2V4cHIuYwpAQCAtMzc2Nyw3NSArMzc2NywzOSBAQCB0cmFuc2Zvcm1Kc29uT2JqZWN0Q29uc3Ry dWN0b3IoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uT2JqZWN0Q29uc3RydWN0b3IgKmN0b3IpCiB9 CiAKIC8qCi0gKiBUcmFuc2Zvcm0gSlNPTl9BUlJBWShxdWVyeSBbRk9STUFUXSBbUkVUVVJOSU5H XSBbT04gTlVMTF0pIGludG8KLSAqICAoU0VMRUNUICBKU09OX0FSUkFZQUdHKGEgIFtGT1JNQVRd IFtSRVRVUk5JTkddIFtPTiBOVUxMXSkgRlJPTSAocXVlcnkpIHEoYSkpCisgKiBUcmFuc2Zvcm0g SlNPTl9BUlJBWShzdWJxdWVyeSkgY29uc3RydWN0b3IuCisgKgorICogSlNPTl9BUlJBWShzdWJx dWVyeSkgaXMgdHJhbnNmb3JtZWQgaW50byBhIEpzb25Db25zdHJ1Y3RvckV4cHIgbm9kZSBvZiB0 eXBlCisgKiBKU0NUT1JfSlNPTl9BUlJBWV9RVUVSWS4gIFRoZSByZXN1bHQgaXMgY29lcmNlZCB0 byB0aGUgdGFyZ2V0IHR5cGUgZ2l2ZW4gYnkKKyAqIGN0b3ItPm91dHB1dC4KICAqLwogc3RhdGlj IE5vZGUgKgogdHJhbnNmb3JtSnNvbkFycmF5UXVlcnlDb25zdHJ1Y3RvcihQYXJzZVN0YXRlICpw c3RhdGUsCiAJCQkJCQkJCSAgIEpzb25BcnJheVF1ZXJ5Q29uc3RydWN0b3IgKmN0b3IpCiB7Ci0J U3ViTGluayAgICAqc3VibGluayA9IG1ha2VOb2RlKFN1YkxpbmspOwotCVNlbGVjdFN0bXQgKnNl bGVjdCA9IG1ha2VOb2RlKFNlbGVjdFN0bXQpOwotCVJhbmdlU3Vic2VsZWN0ICpyYW5nZSA9IG1h a2VOb2RlKFJhbmdlU3Vic2VsZWN0KTsKLQlBbGlhcwkgICAqYWxpYXMgPSBtYWtlTm9kZShBbGlh cyk7Ci0JUmVzVGFyZ2V0ICAqdGFyZ2V0ID0gbWFrZU5vZGUoUmVzVGFyZ2V0KTsKLQlKc29uQXJy YXlBZ2cgKmFnZyA9IG1ha2VOb2RlKEpzb25BcnJheUFnZyk7Ci0JQ29sdW1uUmVmICAqY29scmVm ID0gbWFrZU5vZGUoQ29sdW1uUmVmKTsKKwlTdWJMaW5rICAgICpzdWJsaW5rOwogCVF1ZXJ5CSAg ICpxdWVyeTsKLQlQYXJzZVN0YXRlICpxcHN0YXRlOwotCi0JLyogVHJhbnNmb3JtIHF1ZXJ5IG9u bHkgZm9yIGNvdW50aW5nIHRhcmdldCBsaXN0IGVudHJpZXMuICovCi0JcXBzdGF0ZSA9IG1ha2Vf cGFyc2VzdGF0ZShwc3RhdGUpOwotCi0JcXVlcnkgPSB0cmFuc2Zvcm1TdG10KHFwc3RhdGUsIGNv cHlPYmplY3QoY3Rvci0+cXVlcnkpKTsKLQotCWlmIChjb3VudF9ub25qdW5rX3RsaXN0X2VudHJp ZXMocXVlcnktPnRhcmdldExpc3QpICE9IDEpCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJZXJyY29k ZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCi0JCQkJZXJybXNnKCJzdWJxdWVyeSBtdXN0IHJldHVy biBvbmx5IG9uZSBjb2x1bW4iKSwKLQkJCQlwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBjdG9y LT5sb2NhdGlvbikpOwotCi0JZnJlZV9wYXJzZXN0YXRlKHFwc3RhdGUpOwotCi0JY29scmVmLT5m aWVsZHMgPSBsaXN0X21ha2UyKG1ha2VTdHJpbmcocHN0cmR1cCgicSIpKSwKLQkJCQkJCQkJbWFr ZVN0cmluZyhwc3RyZHVwKCJhIikpKTsKLQljb2xyZWYtPmxvY2F0aW9uID0gY3Rvci0+bG9jYXRp b247Ci0KLQkvKgotCSAqIE5vIGZvcm1hdHRpbmcgbmVjZXNzYXJ5LCBzbyBzZXQgZm9ybWF0dGVk X2V4cHIgdG8gYmUgdGhlIHNhbWUgYXMKLQkgKiByYXdfZXhwci4KLQkgKi8KLQlhZ2ctPmFyZyA9 IG1ha2VKc29uVmFsdWVFeHByKChFeHByICopIGNvbHJlZiwgKEV4cHIgKikgY29scmVmLAotCQkJ CQkJCQkgY3Rvci0+Zm9ybWF0KTsKLQlhZ2ctPmFic2VudF9vbl9udWxsID0gY3Rvci0+YWJzZW50 X29uX251bGw7Ci0JYWdnLT5jb25zdHJ1Y3RvciA9IG1ha2VOb2RlKEpzb25BZ2dDb25zdHJ1Y3Rv cik7Ci0JYWdnLT5jb25zdHJ1Y3Rvci0+YWdnX29yZGVyID0gTklMOwotCWFnZy0+Y29uc3RydWN0 b3ItPm91dHB1dCA9IGN0b3ItPm91dHB1dDsKLQlhZ2ctPmNvbnN0cnVjdG9yLT5sb2NhdGlvbiA9 IGN0b3ItPmxvY2F0aW9uOwotCi0JdGFyZ2V0LT5uYW1lID0gTlVMTDsKLQl0YXJnZXQtPmluZGly ZWN0aW9uID0gTklMOwotCXRhcmdldC0+dmFsID0gKE5vZGUgKikgYWdnOwotCXRhcmdldC0+bG9j YXRpb24gPSBjdG9yLT5sb2NhdGlvbjsKLQotCWFsaWFzLT5hbGlhc25hbWUgPSBwc3RyZHVwKCJx Iik7Ci0JYWxpYXMtPmNvbG5hbWVzID0gbGlzdF9tYWtlMShtYWtlU3RyaW5nKHBzdHJkdXAoImEi KSkpOwotCi0JcmFuZ2UtPmxhdGVyYWwgPSBmYWxzZTsKLQlyYW5nZS0+c3VicXVlcnkgPSBjdG9y LT5xdWVyeTsKLQlyYW5nZS0+YWxpYXMgPSBhbGlhczsKLQotCXNlbGVjdC0+dGFyZ2V0TGlzdCA9 IGxpc3RfbWFrZTEodGFyZ2V0KTsKLQlzZWxlY3QtPmZyb21DbGF1c2UgPSBsaXN0X21ha2UxKHJh bmdlKTsKKwlKc29uUmV0dXJuaW5nICpyZXR1cm5pbmc7CisJTGlzdAkgICAqYXJnczsKIAorCXN1 YmxpbmsgPSBtYWtlTm9kZShTdWJMaW5rKTsKIAlzdWJsaW5rLT5zdWJMaW5rVHlwZSA9IEVYUFJf U1VCTElOSzsKIAlzdWJsaW5rLT5zdWJMaW5rSWQgPSAwOwogCXN1YmxpbmstPnRlc3RleHByID0g TlVMTDsKIAlzdWJsaW5rLT5vcGVyTmFtZSA9IE5JTDsKLQlzdWJsaW5rLT5zdWJzZWxlY3QgPSAo Tm9kZSAqKSBzZWxlY3Q7CisJc3VibGluay0+c3Vic2VsZWN0ID0gKE5vZGUgKikgY3Rvci0+cXVl cnk7CiAJc3VibGluay0+bG9jYXRpb24gPSBjdG9yLT5sb2NhdGlvbjsKIAotCXJldHVybiB0cmFu c2Zvcm1FeHByUmVjdXJzZShwc3RhdGUsIChOb2RlICopIHN1YmxpbmspOworCXN1YmxpbmsgPSAo U3ViTGluayAqKSB0cmFuc2Zvcm1FeHByUmVjdXJzZShwc3RhdGUsIChOb2RlICopIHN1Ymxpbmsp OworCisJcXVlcnkgPSAoUXVlcnkgKikgc3VibGluay0+c3Vic2VsZWN0OworCWFyZ3MgPSBsaXN0 X21ha2UxKGxpbml0aWFsX25vZGUoVGFyZ2V0RW50cnksIHF1ZXJ5LT50YXJnZXRMaXN0KS0+ZXhw cik7CisJcmV0dXJuaW5nID0gdHJhbnNmb3JtSnNvbkNvbnN0cnVjdG9yT3V0cHV0KHBzdGF0ZSwg Y3Rvci0+b3V0cHV0LCBhcmdzKTsKKworCXJldHVybiBtYWtlSnNvbkNvbnN0cnVjdG9yRXhwcihw c3RhdGUsIEpTQ1RPUl9KU09OX0FSUkFZX1FVRVJZLAorCQkJCQkJCQkgICBsaXN0X21ha2UxKHN1 YmxpbmspLCBOVUxMLCByZXR1cm5pbmcsCisJCQkJCQkJCSAgIGZhbHNlLCBjdG9yLT5hYnNlbnRf b25fbnVsbCwKKwkJCQkJCQkJICAgY3Rvci0+bG9jYXRpb24pOwogfQogCiAvKgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3J1bGV1dGlscy5jCmluZGV4IGYxNmYxNTM1Nzg1Li4yNzRkM2U2MGQxOCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9ydWxldXRpbHMuYwpAQCAtMTE3NDAsNiArMTE3NDAsMjYgQEAgZ2V0X2pzb25fY29u c3RydWN0b3IoSnNvbkNvbnN0cnVjdG9yRXhwciAqY3RvciwgZGVwYXJzZV9jb250ZXh0ICpjb250 ZXh0LAogCQlnZXRfanNvbl9hZ2dfY29uc3RydWN0b3IoY3RvciwgY29udGV4dCwgIkpTT05fQVJS QVlBR0ciLCBmYWxzZSk7CiAJCXJldHVybjsKIAl9CisJZWxzZSBpZiAoY3Rvci0+dHlwZSA9PSBK U0NUT1JfSlNPTl9BUlJBWV9RVUVSWSkKKwl7CisJCS8qCisJCSAqIEJ5cGFzcyBnZXRfc3VibGlu a19leHByIHRvIGF2b2lkIGl0cyBoYXJkY29kZWQgcGFyZW50aGVzZXMuICBXZQorCQkgKiB3YW50 IEpTT05fQVJSQVkoU0VMRUNUIC4uLiksIG5vdCBKU09OX0FSUkFZKChTRUxFQ1QgLi4uKSkuCisJ CSAqLworCisJCVN1YkxpbmsgICAgKnN1YmxpbmsgPSBsaW5pdGlhbF9ub2RlKFN1YkxpbmssIGN0 b3ItPmFyZ3MpOworCisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiSlNPTl9BUlJBWSgiKTsKKwor CQlnZXRfcXVlcnlfZGVmKChRdWVyeSAqKSBzdWJsaW5rLT5zdWJzZWxlY3QsIGJ1ZiwgY29udGV4 dC0+bmFtZXNwYWNlcywKKwkJCQkJICBOVUxMLCBmYWxzZSwgY29udGV4dC0+cHJldHR5RmxhZ3Ms IGNvbnRleHQtPndyYXBDb2x1bW4sCisJCQkJCSAgY29udGV4dC0+aW5kZW50TGV2ZWwpOworCisJ CWdldF9qc29uX2NvbnN0cnVjdG9yX29wdGlvbnMoY3RvciwgYnVmKTsKKwkJYXBwZW5kU3RyaW5n SW5mb0NoYXIoYnVmLCAnKScpOworCisJCXJldHVybjsKKwl9CiAKIAlzd2l0Y2ggKGN0b3ItPnR5 cGUpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmggYi9zcmMv aW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaAppbmRleCAzODRkZjUwYzgwYS4uODQzNWU3NjEwNWIg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oCisrKyBiL3NyYy9pbmNs dWRlL25vZGVzL3ByaW1ub2Rlcy5oCkBAIC0xNzEzLDEzICsxNzEzLDE0IEBAIHR5cGVkZWYgc3Ry dWN0IEpzb25WYWx1ZUV4cHIKIAogdHlwZWRlZiBlbnVtIEpzb25Db25zdHJ1Y3RvclR5cGUKIHsK LQlKU0NUT1JfSlNPTl9PQkpFQ1QgPSAxLAotCUpTQ1RPUl9KU09OX0FSUkFZID0gMiwKLQlKU0NU T1JfSlNPTl9PQkpFQ1RBR0cgPSAzLAotCUpTQ1RPUl9KU09OX0FSUkFZQUdHID0gNCwKLQlKU0NU T1JfSlNPTl9QQVJTRSA9IDUsCi0JSlNDVE9SX0pTT05fU0NBTEFSID0gNiwKLQlKU0NUT1JfSlNP Tl9TRVJJQUxJWkUgPSA3LAorCUpTQ1RPUl9KU09OX09CSkVDVCwKKwlKU0NUT1JfSlNPTl9BUlJB WSwKKwlKU0NUT1JfSlNPTl9BUlJBWV9RVUVSWSwKKwlKU0NUT1JfSlNPTl9PQkpFQ1RBR0csCisJ SlNDVE9SX0pTT05fQVJSQVlBR0csCisJSlNDVE9SX0pTT05fUEFSU0UsCisJSlNDVE9SX0pTT05f U0NBTEFSLAorCUpTQ1RPUl9KU09OX1NFUklBTElaRSwKIH0gSnNvbkNvbnN0cnVjdG9yVHlwZTsK IAogLyoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3FsanNvbi5vdXQg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NxbGpzb24ub3V0CmluZGV4IGM3YjllNTc1NDQ1 Li5jN2M2YzY0MTNlMyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zcWxq c29uLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NxbGpzb24ub3V0CkBAIC03 MjQsNiArNzI0LDcgQEAgU0VMRUNUIEpTT05fQVJSQVkoSlNPTl9BUlJBWSgneyAiYSIgOiAxMjMg fScgRk9STUFUIEpTT04gUkVUVVJOSU5HIHRleHQpIEZPUk1BVAogIFtbeyAiYSIgOiAxMjMgfV1d CiAoMSByb3cpCiAKKy0tIEpTT05fQVJSQVkoc3VicXVlcnkpCiBTRUxFQ1QgSlNPTl9BUlJBWShT RUxFQ1QgaSBGUk9NIChWQUxVRVMgKDEpLCAoMiksIChOVUxMKSwgKDQpKSBmb28oaSkpOwogIGpz b25fYXJyYXkgCiAtLS0tLS0tLS0tLS0KQEAgLTc1Nyw2ICs3NTgsMzEgQEAgU0VMRUNUIEpTT05f QVJSQVkoV0lUSCB4IEFTIChTRUxFQ1QgMSkgVkFMVUVTIChUUlVFKSk7CiAgW3RydWVdCiAoMSBy b3cpCiAKKy0tIEpTT05fQVJSQVkoc3VicXVlcnkpIHdpdGggZW1wdHkgcmVzdWx0IHNldAorU0VM RUNUIEpTT05fQVJSQVkoU0VMRUNUIDEgV0hFUkUgRkFMU0UpOworIGpzb25fYXJyYXkgCistLS0t LS0tLS0tLS0KKyBbXQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9BUlJBWShTRUxFQ1QgaSBGUk9N IChWQUxVRVMgKDEpLCAoMiksIChOVUxMKSwgKDQpKSBmb28oaSkgV0hFUkUgaSA+IDQpOworIGpz b25fYXJyYXkgCistLS0tLS0tLS0tLS0KKyBbXQorKDEgcm93KQorCistLSBKU09OX0FSUkFZKHN1 YnF1ZXJ5KSB3aXRoIGEgY29ycmVsYXRlZCBzdWJxdWVyeSBpbiB0aGUgV0hFUkUgY2xhdXNlCitT RUxFQ1QgKiBGUk9NIChWQUxVRVMgKDEpLCAoMiksIChOVUxMKSwgKDQpKSB0MShhKQorV0hFUkUg SlNPTl9BUlJBWSgKKyAgICBTRUxFQ1QgYiBGUk9NIChWQUxVRVMgKDEpLCAoMiksICgzKSkgdDIo YikgV0hFUkUgYiA9IHQxLmEKKyAgICBSRVRVUk5JTkcganNvbmIKKykgPSAnW10nOjpqc29uYjsK KyBhIAorLS0tCisgIAorIDQKKygyIHJvd3MpCisKIC0tIFNob3VsZCBmYWlsCiBTRUxFQ1QgSlNP Tl9BUlJBWShTRUxFQ1QgRlJPTSAoVkFMVUVTICgxKSkgZm9vKGkpKTsKIEVSUk9SOiAgc3VicXVl cnkgbXVzdCByZXR1cm4gb25seSBvbmUgY29sdW1uCkBAIC0xMDkzLDcgKzExMTksNyBAQCBTRUxF Q1QgSlNPTl9BUlJBWShTRUxFQ1QgaSBGUk9NIChWQUxVRVMgKDEpLCAoMiksIChOVUxMKSwgKDQp KSBmb28oaSkgUkVUVVJOSU5HCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIFJlc3VsdAot ICAgT3V0cHV0OiAoSW5pdFBsYW4gZXhwcl8xKS5jb2wxCisgICBPdXRwdXQ6IENPQUxFU0NFKChJ bml0UGxhbiBleHByXzEpLmNvbDEsICdbXSc6Ompzb25iKQogICAgSW5pdFBsYW4gZXhwcl8xCiAg ICAgIC0+ICBBZ2dyZWdhdGUKICAgICAgICAgICAgT3V0cHV0OiBKU09OX0FSUkFZQUdHKCIqVkFM VUVTKiIuY29sdW1uMSBSRVRVUk5JTkcganNvbmIpCkBAIC0xMTA1LDkgKzExMzEsNjcgQEAgQ1JF QVRFIFZJRVcganNvbl9hcnJheV9zdWJxdWVyeV92aWV3IEFTCiBTRUxFQ1QgSlNPTl9BUlJBWShT RUxFQ1QgaSBGUk9NIChWQUxVRVMgKDEpLCAoMiksIChOVUxMKSwgKDQpKSBmb28oaSkgUkVUVVJO SU5HIGpzb25iKTsKIFxzdiBqc29uX2FycmF5X3N1YnF1ZXJ5X3ZpZXcKIENSRUFURSBPUiBSRVBM QUNFIFZJRVcgcHVibGljLmpzb25fYXJyYXlfc3VicXVlcnlfdmlldyBBUwotIFNFTEVDVCAoIFNF TEVDVCBKU09OX0FSUkFZQUdHKHEuYSBSRVRVUk5JTkcganNvbmIpIEFTICJqc29uX2FycmF5YWdn IgotICAgICAgICAgICBGUk9NICggU0VMRUNUIGZvby5pCi0gICAgICAgICAgICAgICAgICAgRlJP TSAoIFZBTFVFUyAoMSksICgyKSwgKE5VTEw6OmludGVnZXIpLCAoNCkpIGZvbyhpKSkgcShhKSkg QVMgImpzb25fYXJyYXkiCisgU0VMRUNUIEpTT05fQVJSQVkoIFNFTEVDVCBmb28uaQorICAgICAg ICAgICBGUk9NICggVkFMVUVTICgxKSwgKDIpLCAoTlVMTDo6aW50ZWdlciksICg0KSkgZm9vKGkp IFJFVFVSTklORyBqc29uYikgQVMgImpzb25fYXJyYXkiCitFWFBMQUlOIChWRVJCT1NFLCBDT1NU UyBPRkYpCitTRUxFQ1QgSlNPTl9BUlJBWShTRUxFQ1QgaSBGUk9NIChWQUxVRVMgKDEpLCAoMiks IChOVUxMKSwgKDQpKSBmb28oaSkgT1JERVIgQlkgaSBMSU1JVCAzIFJFVFVSTklORyBqc29uYik7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFJlc3VsdAorICAgT3V0cHV0OiBDT0FMRVND RSgoSW5pdFBsYW4gZXhwcl8xKS5jb2wxLCAnW10nOjpqc29uYikKKyAgIEluaXRQbGFuIGV4cHJf MQorICAgICAtPiAgQWdncmVnYXRlCisgICAgICAgICAgIE91dHB1dDogSlNPTl9BUlJBWUFHRygi KlZBTFVFUyoiLmNvbHVtbjEgUkVUVVJOSU5HIGpzb25iKQorICAgICAgICAgICAtPiAgTGltaXQK KyAgICAgICAgICAgICAgICAgT3V0cHV0OiAiKlZBTFVFUyoiLmNvbHVtbjEKKyAgICAgICAgICAg ICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiAiKlZBTFVFUyoi LmNvbHVtbjEKKyAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6ICIqVkFMVUVTKiIuY29s dW1uMQorICAgICAgICAgICAgICAgICAgICAgICAtPiAgVmFsdWVzIFNjYW4gb24gIipWQUxVRVMq IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6ICIqVkFMVUVTKiIuY29sdW1u MQorKDEyIHJvd3MpCisKK0NSRUFURSBPUiBSRVBMQUNFIFZJRVcganNvbl9hcnJheV9zdWJxdWVy eV92aWV3IEFTCitTRUxFQ1QgSlNPTl9BUlJBWShTRUxFQ1QgaSBGUk9NIChWQUxVRVMgKDEpLCAo MiksIChOVUxMKSwgKDQpKSBmb28oaSkgT1JERVIgQlkgaSBMSU1JVCAzIFJFVFVSTklORyBqc29u Yik7Citcc3YganNvbl9hcnJheV9zdWJxdWVyeV92aWV3CitDUkVBVEUgT1IgUkVQTEFDRSBWSUVX IHB1YmxpYy5qc29uX2FycmF5X3N1YnF1ZXJ5X3ZpZXcgQVMKKyBTRUxFQ1QgSlNPTl9BUlJBWSgg U0VMRUNUIGZvby5pCisgICAgICAgICAgIEZST00gKCBWQUxVRVMgKDEpLCAoMiksIChOVUxMOjpp bnRlZ2VyKSwgKDQpKSBmb28oaSkKKyAgICAgICAgICBPUkRFUiBCWSBmb28uaQorICAgICAgICAg TElNSVQgMyBSRVRVUk5JTkcganNvbmIpIEFTICJqc29uX2FycmF5IgorRFJPUCBWSUVXIGpzb25f YXJyYXlfc3VicXVlcnlfdmlldzsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVD VCAqIEZST00gKFZBTFVFUyAoMSksICgyKSwgKE5VTEwpLCAoNCkpIHQxKGEpCitXSEVSRSBKU09O X0FSUkFZKAorICAgIFNFTEVDVCBiIEZST00gKFZBTFVFUyAoMSksICgyKSwgKDMpKSB0MihiKSBX SEVSRSBiID0gdDEuYQorICAgIFJFVFVSTklORyBqc29uYgorKSA9ICdbXSc6Ompzb25iOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVmFsdWVzIFNjYW4gb24gIipWQUxVRVMqIgor ICAgT3V0cHV0OiAiKlZBTFVFUyoiLmNvbHVtbjEKKyAgIEZpbHRlcjogKENPQUxFU0NFKChTdWJQ bGFuIGV4cHJfMSksICdbXSc6Ompzb25iKSA9ICdbXSc6Ompzb25iKQorICAgU3ViUGxhbiBleHBy XzEKKyAgICAgLT4gIEFnZ3JlZ2F0ZQorICAgICAgICAgICBPdXRwdXQ6IEpTT05fQVJSQVlBR0co IipWQUxVRVMqXzEiLmNvbHVtbjEgUkVUVVJOSU5HIGpzb25iKQorICAgICAgICAgICAtPiAgVmFs dWVzIFNjYW4gb24gIipWQUxVRVMqXzEiCisgICAgICAgICAgICAgICAgIE91dHB1dDogIipWQUxV RVMqXzEiLmNvbHVtbjEKKyAgICAgICAgICAgICAgICAgRmlsdGVyOiAoIipWQUxVRVMqXzEiLmNv bHVtbjEgPSAiKlZBTFVFUyoiLmNvbHVtbjEpCisoOSByb3dzKQorCitDUkVBVEUgVklFVyBqc29u X2FycmF5X3N1YnF1ZXJ5X3ZpZXcgQVMKK1NFTEVDVCAqIEZST00gKFZBTFVFUyAoMSksICgyKSwg KE5VTEwpLCAoNCkpIHQxKGEpCitXSEVSRSBKU09OX0FSUkFZKAorICAgIFNFTEVDVCBiIEZST00g KFZBTFVFUyAoMSksICgyKSwgKDMpKSB0MihiKSBXSEVSRSBiID0gdDEuYQorICAgIFJFVFVSTklO RyBqc29uYgorKSA9ICdbXSc6Ompzb25iOworXHN2IGpzb25fYXJyYXlfc3VicXVlcnlfdmlldwor Q1JFQVRFIE9SIFJFUExBQ0UgVklFVyBwdWJsaWMuanNvbl9hcnJheV9zdWJxdWVyeV92aWV3IEFT CisgU0VMRUNUIGEKKyAgIEZST00gKCBWQUxVRVMgKDEpLCAoMiksIChOVUxMOjppbnRlZ2VyKSwg KDQpKSB0MShhKQorICBXSEVSRSBKU09OX0FSUkFZKCBTRUxFQ1QgdDIuYgorICAgICAgICAgICBG Uk9NICggVkFMVUVTICgxKSwgKDIpLCAoMykpIHQyKGIpCisgICAgICAgICAgV0hFUkUgdDIuYiA9 IHQxLmEgUkVUVVJOSU5HIGpzb25iKSA9ICdbXSc6Ompzb25iCiBEUk9QIFZJRVcganNvbl9hcnJh eV9zdWJxdWVyeV92aWV3OwogLS0gSVMgSlNPTiBwcmVkaWNhdGUKIFNFTEVDVCBOVUxMIElTIEpT T047CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zcWxqc29uLnNxbCBiL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL3NxbGpzb24uc3FsCmluZGV4IDM0M2QzNDRkMjcwLi4xMDMzYmY0Mjg3 YSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3FsanNvbi5zcWwKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvc3FsanNvbi5zcWwKQEAgLTE5Myw2ICsxOTMsNyBAQCBTRUxFQ1Qg SlNPTl9BUlJBWShKU09OX0FSUkFZKCd7ICJhIiA6IDEyMyB9JyBSRVRVUk5JTkcgdGV4dCkpOwog U0VMRUNUIEpTT05fQVJSQVkoSlNPTl9BUlJBWSgneyAiYSIgOiAxMjMgfScgRk9STUFUIEpTT04g UkVUVVJOSU5HIHRleHQpKTsKIFNFTEVDVCBKU09OX0FSUkFZKEpTT05fQVJSQVkoJ3sgImEiIDog MTIzIH0nIEZPUk1BVCBKU09OIFJFVFVSTklORyB0ZXh0KSBGT1JNQVQgSlNPTik7CiAKKy0tIEpT T05fQVJSQVkoc3VicXVlcnkpCiBTRUxFQ1QgSlNPTl9BUlJBWShTRUxFQ1QgaSBGUk9NIChWQUxV RVMgKDEpLCAoMiksIChOVUxMKSwgKDQpKSBmb28oaSkpOwogU0VMRUNUIEpTT05fQVJSQVkoU0VM RUNUIGkgRlJPTSAoVkFMVUVTIChOVUxMOjppbnRbXSksICgnezEsMn0nKSwgKE5VTEwpLCAoTlVM TCksICgnezMsNH0nKSwgKE5VTEwpKSBmb28oaSkpOwogU0VMRUNUIEpTT05fQVJSQVkoU0VMRUNU IGkgRlJPTSAoVkFMVUVTIChOVUxMOjppbnRbXSksICgnezEsMn0nKSwgKE5VTEwpLCAoTlVMTCks ICgnezMsNH0nKSwgKE5VTEwpKSBmb28oaSkgUkVUVVJOSU5HIGpzb25iKTsKQEAgLTIwMSw2ICsy MDIsMTcgQEAgU0VMRUNUIEpTT05fQVJSQVkoU0VMRUNUIGkgRlJPTSAoVkFMVUVTIChOVUxMOjpp bnRbXSksICgnezEsMn0nKSwgKE5VTEwpLCAoTlVMTCkKIFNFTEVDVCBKU09OX0FSUkFZKFNFTEVD VCBpIEZST00gKFZBTFVFUyAoMyksICgxKSwgKE5VTEwpLCAoMikpIGZvbyhpKSBPUkRFUiBCWSBp KTsKIFNFTEVDVCBKU09OX0FSUkFZKFdJVEggeCBBUyAoU0VMRUNUIDEpIFZBTFVFUyAoVFJVRSkp OwogCistLSBKU09OX0FSUkFZKHN1YnF1ZXJ5KSB3aXRoIGVtcHR5IHJlc3VsdCBzZXQKK1NFTEVD VCBKU09OX0FSUkFZKFNFTEVDVCAxIFdIRVJFIEZBTFNFKTsKK1NFTEVDVCBKU09OX0FSUkFZKFNF TEVDVCBpIEZST00gKFZBTFVFUyAoMSksICgyKSwgKE5VTEwpLCAoNCkpIGZvbyhpKSBXSEVSRSBp ID4gNCk7CisKKy0tIEpTT05fQVJSQVkoc3VicXVlcnkpIHdpdGggYSBjb3JyZWxhdGVkIHN1YnF1 ZXJ5IGluIHRoZSBXSEVSRSBjbGF1c2UKK1NFTEVDVCAqIEZST00gKFZBTFVFUyAoMSksICgyKSwg KE5VTEwpLCAoNCkpIHQxKGEpCitXSEVSRSBKU09OX0FSUkFZKAorICAgIFNFTEVDVCBiIEZST00g KFZBTFVFUyAoMSksICgyKSwgKDMpKSB0MihiKSBXSEVSRSBiID0gdDEuYQorICAgIFJFVFVSTklO RyBqc29uYgorKSA9ICdbXSc6Ompzb25iOworCiAtLSBTaG91bGQgZmFpbAogU0VMRUNUIEpTT05f QVJSQVkoU0VMRUNUIEZST00gKFZBTFVFUyAoMSkpIGZvbyhpKSk7CiBTRUxFQ1QgSlNPTl9BUlJB WShTRUxFQ1QgaSwgaSBGUk9NIChWQUxVRVMgKDEpKSBmb28oaSkpOwpAQCAtMzg0LDYgKzM5Niwz MiBAQCBTRUxFQ1QgSlNPTl9BUlJBWShTRUxFQ1QgaSBGUk9NIChWQUxVRVMgKDEpLCAoMiksIChO VUxMKSwgKDQpKSBmb28oaSkgUkVUVVJOSU5HCiAKIFxzdiBqc29uX2FycmF5X3N1YnF1ZXJ5X3Zp ZXcKIAorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIEpTT05fQVJSQVkoU0VM RUNUIGkgRlJPTSAoVkFMVUVTICgxKSwgKDIpLCAoTlVMTCksICg0KSkgZm9vKGkpIE9SREVSIEJZ IGkgTElNSVQgMyBSRVRVUk5JTkcganNvbmIpOworCitDUkVBVEUgT1IgUkVQTEFDRSBWSUVXIGpz b25fYXJyYXlfc3VicXVlcnlfdmlldyBBUworU0VMRUNUIEpTT05fQVJSQVkoU0VMRUNUIGkgRlJP TSAoVkFMVUVTICgxKSwgKDIpLCAoTlVMTCksICg0KSkgZm9vKGkpIE9SREVSIEJZIGkgTElNSVQg MyBSRVRVUk5JTkcganNvbmIpOworCitcc3YganNvbl9hcnJheV9zdWJxdWVyeV92aWV3CisKK0RS T1AgVklFVyBqc29uX2FycmF5X3N1YnF1ZXJ5X3ZpZXc7CisKK0VYUExBSU4gKFZFUkJPU0UsIENP U1RTIE9GRikKK1NFTEVDVCAqIEZST00gKFZBTFVFUyAoMSksICgyKSwgKE5VTEwpLCAoNCkpIHQx KGEpCitXSEVSRSBKU09OX0FSUkFZKAorICAgIFNFTEVDVCBiIEZST00gKFZBTFVFUyAoMSksICgy KSwgKDMpKSB0MihiKSBXSEVSRSBiID0gdDEuYQorICAgIFJFVFVSTklORyBqc29uYgorKSA9ICdb XSc6Ompzb25iOworCitDUkVBVEUgVklFVyBqc29uX2FycmF5X3N1YnF1ZXJ5X3ZpZXcgQVMKK1NF TEVDVCAqIEZST00gKFZBTFVFUyAoMSksICgyKSwgKE5VTEwpLCAoNCkpIHQxKGEpCitXSEVSRSBK U09OX0FSUkFZKAorICAgIFNFTEVDVCBiIEZST00gKFZBTFVFUyAoMSksICgyKSwgKDMpKSB0Mihi KSBXSEVSRSBiID0gdDEuYQorICAgIFJFVFVSTklORyBqc29uYgorKSA9ICdbXSc6Ompzb25iOwor Citcc3YganNvbl9hcnJheV9zdWJxdWVyeV92aWV3CisKIERST1AgVklFVyBqc29uX2FycmF5X3N1 YnF1ZXJ5X3ZpZXc7CiAKIC0tIElTIEpTT04gcHJlZGljYXRlCi0tIAoyLjM5LjUgKEFwcGxlIEdp dC0xNTQpCgo= --00000000000081b647064c1f9206--