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 1vxfq9-00H1lR-1T for pgsql-bugs@arkaria.postgresql.org; Wed, 04 Mar 2026 06:36:13 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vxfq7-00AlMy-2a for pgsql-bugs@arkaria.postgresql.org; Wed, 04 Mar 2026 06:36:12 +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 1vxfq7-00AlMp-1V for pgsql-bugs@lists.postgresql.org; Wed, 04 Mar 2026 06:36:12 +0000 Received: from mail-oa1-x2d.google.com ([2001:4860:4864:20::2d]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vxfq5-00000000Tx3-2qHC for pgsql-bugs@lists.postgresql.org; Wed, 04 Mar 2026 06:36:11 +0000 Received: by mail-oa1-x2d.google.com with SMTP id 586e51a60fabf-40f387a688dso1284847fac.0 for ; Tue, 03 Mar 2026 22:36:09 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1772606167; cv=none; d=google.com; s=arc-20240605; b=SuuSyrMFVyfhV6TMZKV0Ag6rDrO26JGWKaTlTYGFB+zwExNfUgMe8dKJOt+aHmIByL CIWb7CH5kq+uQxqDS5h9Pl9TgrspS7nuXa+MZO2bUbOk+ArQLGKVF3EU+QeRuFkXeuOm KOiNRjOGHg8T9yBidzOMSQxbooZIX7yt6ndIRy+8rASDGNk4f6YDi8VJfeCQ0ZPJLTxA ClB712XRZwGZxyjEy1Pe+QbjLjQiSXafmivZF+X4PH6D9eKobCqOahHOQlzf9WPCPeSa WdPuczU3Sv3xG2FSyMaY/wRLsfIrRKarzVdo7YeRuTdq70+voRsSFrmM0gqqYx6toF8H Neug== 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=pk/Tl+A+SQFlSOi2oxXyhtssXCNpEuuj6nOKQALHZis=; fh=Sb3q162qVaZdS8xyFBUxGEkqbU9bRd78qfpvqSBd9PQ=; b=YKoYYoTNlrICIKTCW2t2QoYUk2GOcNQWAnc6RYh1LCT+9QH6mN42jL/e/kYvAQQ6fI uQrvSKPaqlwFzHTY/BTqurGWtTuSi4sDwGfbsH7o6TPLC+fWDQpCm/hdphcQGCSRaYav 00FxEfQuDAyhQVgSLj8QpCOaQGiCAm/UVoP5CxkTNvzK90CGW1nOHUKS+JobjsNeYCsW EMy6e5xgG1861rbdhkpTDE+kIWX9Tu9XHTvaWAZ4jPyPBe+uz9kCo5vB56QlMjWaXgqQ 6Uqs5Ju6QUCTTlAi6VdqPfnyeahaNeSz16q6igOAF7Mmr5aDZjXC6xW1z77+gp7Klt8h pSng==; 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=1772606167; x=1773210967; 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=pk/Tl+A+SQFlSOi2oxXyhtssXCNpEuuj6nOKQALHZis=; b=QbdbzWhc4JzXiyAKS8Rz7meK8P+TEvKZnPXk8ZFaoCFL0CodGIhiOXv4rLmTYU7N7E noOFHr7TSh6J3FX/tOx6Q/vpTce8aUqvxObtjSJCGXuiaKeIO37vuJGW1kpVqz4MXwMg ZfrGOn6QFLFOR4nnoTP4AbZfLTQ/8arUYMlx/QjbRp7RKKC99ghjsqxdcCPHq+K5zz3V fPTi50tk8sinXAQ15dPrvny/XE5yjVo+ycyTzSiwEJlfgsqZijXE7LpXZQBmxN7jSLuA bIMrUcexaQ0i5c4Dr7lEtMvl+mMjyQZtKldjWnY3NAVxlupRUCZzCWLAlcJ7O/ioteJx St/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772606167; x=1773210967; 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=pk/Tl+A+SQFlSOi2oxXyhtssXCNpEuuj6nOKQALHZis=; b=lrvaRb76pg9iDaQlQS9JXtCb+bkFC0mqWLYHuwwPuVijIsTqKnU1EParbfbQPpil73 K4om7o0Aal9fGxCjb5Gv6XdS1gJAqOyjQBqZojA/hlh6Cx+CZiXk5EncmKMCqHtbLQyT cirLwjXunNcRHgOP2DqSQJqmi3kK0lOksv9K6LJeaSfSf3lWuixoASMd13J/yMc7MIa/ QS71IfwlHLVGQy8e3q/T3kFSbaJhRPaH3HA9hHH9lCWy+pPYLHffrxjALLWieLlWcUUU LnzFnB0VHiOxMLQjVx3JU7sZqOVQjIRWGYYuZVqxlZtT9Uzn4jdjKs+SsHyDeJENfa2z UwpA== X-Forwarded-Encrypted: i=1; AJvYcCW2vzNo8XbCjlR20yofD8+gqLCU2yIqIs1w2jFspe+tVTTm+Kq1tR9dAjh+SpBAviDfwJJuHW998t3q@lists.postgresql.org X-Gm-Message-State: AOJu0YzEs7ls70dg6lTu0FTdlrtJCoNDBru0CsGY0RNoFeV6ycVKz3MO dheCBjqmOYyPyqox/x9eQ667W4AbUi7mYGGDl+r4RfE3YMRKlAs0lYAuKI0PFhtcVgr6WclMrRn npkGpeN6fTXDx1hkL6yiCld8HUc9U+iw= X-Gm-Gg: ATEYQzz0X3nC4gFzyYVVNrj7b1fX2Twg8wlhDUffniM0m5piBbXlJYzTbNnuGmazM5s 7cehejkjjmVS7w5r9OOyDhzPj3vyQ3Fcj8HVonFyKqogXNR857QKM9wYA1iVvGxkOtsGHI4Dn66 mv7r/h6gkZ/0rTTov6VbxqGg2l8HhlvUIOyTvSQFPeayXgC77NUsr3EV70+Oymug+RV2nM729nH LYbXVwuAmlH4RJ4W2LZyORzYLSvEPBDwq+T8nOM4b+3CnlvFyWal1UgLUURbOra/IlPdaX5bFJc +5zSx+zguA== X-Received: by 2002:a05:6870:8a27:b0:3e8:8e56:674b with SMTP id 586e51a60fabf-416abba45aemr616086fac.53.1772606167444; Tue, 03 Mar 2026 22:36:07 -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: Wed, 4 Mar 2026 15:35:56 +0900 X-Gm-Features: AaiRm510t6r-Z_MjMn-FW-V-M-8vDmtl5DFiEebMF7oThYi_cWXIZ_AVP-R3QSU 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="000000000000f0113b064c2d0840" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000f0113b064c2d0840 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Mar 3, 2026 at 11:32=E2=80=AFPM Richard Guo wrote: > 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. Here is an updated version of the patch. The main change is that it now uses DirectFunctionCall1 to build the empty JSON array constant, which is more efficient and consistent with other call sites. - Richard --000000000000f0113b064c2d0840 Content-Type: application/octet-stream; name="v3-0001-Fix-JSON_ARRAY-query-empty-set-handling-and-view-.patch" Content-Disposition: attachment; filename="v3-0001-Fix-JSON_ARRAY-query-empty-set-handling-and-view-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmbnxmcz0 RnJvbSAyMjI3NDBkNjc5OGYwOGU4NGI1ZjU0YzEyMDkzZDBlOWNiMDg5NDUzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogTW9uLCAyIE1hciAyMDI2IDEyOjExOjAwICswOTAwClN1YmplY3Q6IFtQQVRDSCB2M10g 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 emVyL3V0aWwvY2xhdXNlcy5jICB8IDE4MCArKysrKysrKysrKysrKysrKysrKysrKysrLQogc3Jj L2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYyAgICAgICB8ICA3NiArKystLS0tLS0tLQogc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jICAgICB8ICAyMCArKysKIHNyYy9pbmNsdWRl L25vZGVzL3ByaW1ub2Rlcy5oICAgICAgICAgfCAgMTUgKystCiBzcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3NxbGpzb24ub3V0IHwgIDkyICsrKysrKysrKysrKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3NxbGpzb24uc3FsICAgICAgfCAgMzggKysrKysrCiA3IGZpbGVzIGNoYW5nZWQsIDM1NSBp bnNlcnRpb25zKCspLCA2OSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwv ZnVuYy9mdW5jLWpzb24uc2dtbCBiL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtanNvbi5zZ21sCmlu ZGV4IDFlYzczY2ZmNDY0Li5kNTEwYmE4Mzc1YiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Z1 bmMvZnVuYy1qc29uLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1qc29uLnNnbWwK QEAgLTYyMCw3ICs2MjAsOCBAQAogICAgICAgICAgd2hpY2ggbXVzdCBiZSBhIFNFTEVDVCBxdWVy eSByZXR1cm5pbmcgYSBzaW5nbGUgY29sdW1uLiBJZgogICAgICAgICAgPGxpdGVyYWw+QUJTRU5U IE9OIE5VTEw8L2xpdGVyYWw+IGlzIHNwZWNpZmllZCwgTlVMTCB2YWx1ZXMgYXJlIGlnbm9yZWQu CiAgICAgICAgICBUaGlzIGlzIGFsd2F5cyB0aGUgY2FzZSBpZiBhCi0gICAgICAgICA8cmVwbGFj ZWFibGU+cXVlcnlfZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IGlzIHVzZWQuCisgICAgICAgICA8 cmVwbGFjZWFibGU+cXVlcnlfZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IGlzIHVzZWQuIElmIHRo ZSBxdWVyeSByZXR1cm5zCisgICAgICAgICBubyByb3dzLCBhbiBlbXB0eSBKU09OIGFycmF5IGlz IHJldHVybmVkLgogICAgICAgICA8L3BhcmE+CiAgICAgICAgIDxwYXJhPgogICAgICAgICAgPGxp dGVyYWw+anNvbl9hcnJheSgxLHRydWUsanNvbiAneyJhIjpudWxsfScpPC9saXRlcmFsPgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jCmluZGV4IGE0MWQ4MTczNGNmLi45N2QwZjAyZWIx YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jCisrKyBi L3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2NsYXVzZXMuYwpAQCAtMjAsNiArMjAsNyBAQAog I2luY2x1ZGUgInBvc3RncmVzLmgiCiAKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hZ2dyZWdhdGUuaCIKICNpbmNsdWRlICJjYXRhbG9nL3Bn X2NsYXNzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19sYW5ndWFnZS5oIgogI2luY2x1ZGUgImNh dGFsb2cvcGdfb3BlcmF0b3IuaCIKQEAgLTEzMyw2ICsxMzQsNyBAQCBzdGF0aWMgRXhwciAqc2lt cGxpZnlfZnVuY3Rpb24oT2lkIGZ1bmNpZCwKIAkJCQkJCQkgICBldmFsX2NvbnN0X2V4cHJlc3Np b25zX2NvbnRleHQgKmNvbnRleHQpOwogc3RhdGljIE5vZGUgKnNpbXBsaWZ5X2FnZ3JlZihBZ2dy ZWYgKmFnZ3JlZiwKIAkJCQkJCQkgZXZhbF9jb25zdF9leHByZXNzaW9uc19jb250ZXh0ICpjb250 ZXh0KTsKK3N0YXRpYyBOb2RlICpyZXdyaXRlX2pzb25fYXJyYXlfc3VicXVlcnkoSnNvbkNvbnN0 cnVjdG9yRXhwciAqZXhwcik7CiBzdGF0aWMgTGlzdCAqcmVvcmRlcl9mdW5jdGlvbl9hcmd1bWVu dHMoTGlzdCAqYXJncywgaW50IHByb25hcmdzLAogCQkJCQkJCQkJCUhlYXBUdXBsZSBmdW5jX3R1 cGxlKTsKIHN0YXRpYyBMaXN0ICphZGRfZnVuY3Rpb25fZGVmYXVsdHMoTGlzdCAqYXJncywgaW50 IHByb25hcmdzLApAQCAtMzAxMCw3ICszMDEyLDYgQEAgZXZhbF9jb25zdF9leHByZXNzaW9uc19t dXRhdG9yKE5vZGUgKm5vZGUsCiAJCQkJfQogCQkJCWJyZWFrOwogCQkJfQotCiAJCWNhc2UgVF9K c29uVmFsdWVFeHByOgogCQkJewogCQkJCUpzb25WYWx1ZUV4cHIgKmp2ZSA9IChKc29uVmFsdWVF eHByICopIG5vZGU7CkBAIC0zMDM0LDcgKzMwMzUsMTggQEAgZXZhbF9jb25zdF9leHByZXNzaW9u c19tdXRhdG9yKE5vZGUgKm5vZGUsCiAJCQkJCQkJCQkJCQkgIChFeHByICopIGZvcm1hdHRlZF9l eHByLAogCQkJCQkJCQkJCQkJICBjb3B5T2JqZWN0KGp2ZS0+Zm9ybWF0KSk7CiAJCQl9CisJCWNh c2UgVF9Kc29uQ29uc3RydWN0b3JFeHByOgorCQkJeworCQkJCUpzb25Db25zdHJ1Y3RvckV4cHIg KmpjZSA9IChKc29uQ29uc3RydWN0b3JFeHByICopIG5vZGU7CiAKKwkJCQlpZiAoamNlLT50eXBl ID09IEpTQ1RPUl9KU09OX0FSUkFZX1FVRVJZKQorCQkJCXsKKwkJCQkJTm9kZQkgICAqcmV3cml0 dGVuID0gcmV3cml0ZV9qc29uX2FycmF5X3N1YnF1ZXJ5KGpjZSk7CisKKwkJCQkJcmV0dXJuIGV2 YWxfY29uc3RfZXhwcmVzc2lvbnNfbXV0YXRvcihyZXdyaXR0ZW4sIGNvbnRleHQpOworCQkJCX0K KwkJCX0KKwkJCWJyZWFrOwogCQljYXNlIFRfU3ViUGxhbjoKIAkJY2FzZSBUX0FsdGVybmF0aXZl U3ViUGxhbjoKIApAQCAtNDM3OCw2ICs0MzkwLDE3MiBAQCBzaW1wbGlmeV9hZ2dyZWYoQWdncmVm ICphZ2dyZWYsIGV2YWxfY29uc3RfZXhwcmVzc2lvbnNfY29udGV4dCAqY29udGV4dCkKIAlyZXR1 cm4gKE5vZGUgKikgYWdncmVmOwogfQogCisvKgorICogU3Vicm91dGluZSBmb3IgZXZhbF9jb25z dF9leHByZXNzaW9uczogdHJhbnNmb3JtIGEgSlNDVE9SX0pTT05fQVJSQVlfUVVFUlkKKyAqIGV4 cHJlc3Npb24gaW50byBpdHMgZXhlY3V0YWJsZSBmb3JtOgorICoKKyAqICAgICBDT0FMRVNDRSgo U0VMRUNUIEpTT05fQVJSQVlBR0coY29sKSBGUk9NICh1c2VyX3F1ZXJ5KSksICdbXScpCisgKgor ICogVGhpcyBpcyBkb25lIGR1cmluZyBwbGFubmluZyByYXRoZXIgdGhhbiBwYXJzZSBhbmFseXNp cyBzbyB0aGF0IHJ1bGV1dGlscy5jCisgKiBjYW4gZGVwYXJzZSB0aGUgb3JpZ2luYWwgc3ludGF4 IGZvciB2aWV3cy4KKyAqCisgKiBUaGUgdXNlcidzIHF1ZXJ5IGlzIHdyYXBwZWQgaW4gYW4gb3V0 ZXIgU0VMRUNUIHNvIHRoYXQgY2xhdXNlcyBsaWtlIE9SREVSIEJZCisgKiBhbmQgTElNSVQgYXJl IGV2YWx1YXRlZCBiZWZvcmUgdGhlIEpTT05fQVJSQVlBR0cgYWdncmVnYXRlIGlzIGFwcGxpZWQu CisgKiBDT0FMRVNDRSBlbnN1cmVzIHRoYXQgd2UgcmV0dXJuIGFuIGVtcHR5IGFycmF5IHJhdGhl ciB0aGFuIE5VTEwgb24gYW4gZW1wdHkKKyAqIHJlc3VsdCBzZXQsIHBlciB0aGUgU1FML0pTT04g c3RhbmRhcmQuCisgKi8KK3N0YXRpYyBOb2RlICoKK3Jld3JpdGVfanNvbl9hcnJheV9zdWJxdWVy eShKc29uQ29uc3RydWN0b3JFeHByICpleHByKQoreworCVN1YkxpbmsgICAgKnN1YmxpbmsgPSBs aW5pdGlhbF9ub2RlKFN1YkxpbmssIGV4cHItPmFyZ3MpOworCVN1YkxpbmsgICAgKm5ld3N1Ymxp bms7CisJUXVlcnkJICAgKnN1YnF1ZXJ5OworCVF1ZXJ5CSAgICpuZXdxdWVyeTsKKwlMaXN0CSAg ICpjb2xuYW1lczsKKwlUYXJnZXRFbnRyeSAqdGxlOworCVJhbmdlVGJsRW50cnkgKnJ0ZTsKKwlS YW5nZVRibFJlZiAqcnRyOworCVZhcgkJICAgKm5ld3ZhcjsKKwlKc29uQ29uc3RydWN0b3JFeHBy ICpuZXdqc2N0b3I7CisJQWdncmVmCSAgICphZ2dyZWY7CisJQ29uc3QJICAgKmVtcHR5X2pzb25f Y29uc3Q7CisJT2lkCQkJYWdnZm5vaWQ7CisJT2lkCQkJYWdndHlwZTsKKwlQR0Z1bmN0aW9uCWlu X2Z1bmM7CisJQ29hbGVzY2VFeHByICpjb2FsZXNjZTsKKworCUFzc2VydChleHByLT50eXBlID09 IEpTQ1RPUl9KU09OX0FSUkFZX1FVRVJZKTsKKwlBc3NlcnQoc3VibGluay0+c3ViTGlua1R5cGUg PT0gRVhQUl9TVUJMSU5LKTsKKworCW5ld3N1YmxpbmsgPSBjb3B5T2JqZWN0KHN1YmxpbmspOwor CXN1YnF1ZXJ5ID0gKFF1ZXJ5ICopIG5ld3N1YmxpbmstPnN1YnNlbGVjdDsKKworCS8qCisJICog U2luY2Ugd2UgYXJlIHB1c2hpbmcgdGhlIHN1YnF1ZXJ5IGRvd24gb25lIGxldmVsLCB3ZSBtdXN0 IGluY3JlbWVudCB0aGUKKwkgKiBzdWJsZXZlbHMgb2YgYW55IG91dGVyIHJlZmVyZW5jZXMgaXQg Y29udGFpbnMuCisJICovCisJSW5jcmVtZW50VmFyU3VibGV2ZWxzVXAoKE5vZGUgKikgc3VicXVl cnksIDEsIDEpOworCisJLyogTW9zdCBvZiB0aGUgdXBwZXIgUXVlcnkgc3RydWN0IGNhbiBiZSBs ZWZ0IGFzIHplcm9lcy9udWxscyAqLworCW5ld3F1ZXJ5ID0gbWFrZU5vZGUoUXVlcnkpOworCW5l d3F1ZXJ5LT5jb21tYW5kVHlwZSA9IENNRF9TRUxFQ1Q7CisJbmV3cXVlcnktPnF1ZXJ5U291cmNl ID0gc3VicXVlcnktPnF1ZXJ5U291cmNlOworCW5ld3F1ZXJ5LT5jYW5TZXRUYWcgPSB0cnVlOwor CisJdGxlID0gbGluaXRpYWxfbm9kZShUYXJnZXRFbnRyeSwgc3VicXVlcnktPnRhcmdldExpc3Qp OworCWNvbG5hbWVzID0gbGlzdF9tYWtlMShtYWtlU3RyaW5nKHRsZS0+cmVzbmFtZSA/CisJCQkJ CQkJCQkgcHN0cmR1cCh0bGUtPnJlc25hbWUpIDoKKwkJCQkJCQkJCSBwc3RyZHVwKCJqc29uX2Nv bCIpKSk7CisKKwkvKiBCdWlsZCBhIHN1aXRhYmxlIFJURSBmb3IgdGhlIHN1YnF1ZXJ5ICovCisJ cnRlID0gbWFrZU5vZGUoUmFuZ2VUYmxFbnRyeSk7CisJcnRlLT5ydGVraW5kID0gUlRFX1NVQlFV RVJZOworCXJ0ZS0+c3VicXVlcnkgPSBzdWJxdWVyeTsKKwlydGUtPmVyZWYgPSBtYWtlQWxpYXMo Impzb25fYXJyYXlfc3VicXVlcnkiLCBjb2xuYW1lcyk7CisJcnRlLT5sYXRlcmFsID0gZmFsc2U7 CisJcnRlLT5pbmggPSBmYWxzZTsKKwlydGUtPmluRnJvbUNsID0gdHJ1ZTsKKwluZXdxdWVyeS0+ cnRhYmxlID0gbGlzdF9tYWtlMShydGUpOworCisJLyogQnVpbGQgYSBzdWl0YWJsZSBqb2ludHJl ZSBmb3IgdGhlIHN1YnF1ZXJ5ICovCisJcnRyID0gbWFrZU5vZGUoUmFuZ2VUYmxSZWYpOworCXJ0 ci0+cnRpbmRleCA9IDE7CisJbmV3cXVlcnktPmpvaW50cmVlID0gbWFrZUZyb21FeHByKGxpc3Rf bWFrZTEocnRyKSwgTlVMTCk7OworCisJLyogQ3JlYXRlIGEgVmFyIHJlZmVyZW5jaW5nIHRoZSBz dWJxdWVyeSdzIHNpbmdsZSBvdXRwdXQgY29sdW1uICovCisJbmV3dmFyID0gbWFrZVZhcigxLAor CQkJCQkgdGxlLT5yZXNubywKKwkJCQkJIGV4cHJUeXBlKChOb2RlICopIHRsZS0+ZXhwciksCisJ CQkJCSBleHByVHlwbW9kKChOb2RlICopIHRsZS0+ZXhwciksCisJCQkJCSBleHByQ29sbGF0aW9u KChOb2RlICopIHRsZS0+ZXhwciksCisJCQkJCSAwKTsKKworCS8qCisJICogQ29uc3RydWN0IHRo ZSBKU09OX0FSUkFZQUdHIGFnZ3JlZ2F0ZSBub2RlLiAgV2UgbXVzdCBtYW51YWxseSByZXNvbHZl CisJICogdGhlIGZ1bmN0aW9uIE9JRCBhbmQgYnVpbGQgYSBmdWxseSBhbmFseXplZCBBZ2dyZWYg YmVjYXVzZSB3ZSBhcmUKKwkgKiBieXBhc3NpbmcgcGFyc2UgYW5hbHlzaXMuCisJICovCisJaWYg KGV4cHItPnJldHVybmluZyAmJgorCQlleHByLT5yZXR1cm5pbmctPmZvcm1hdC0+Zm9ybWF0X3R5 cGUgPT0gSlNfRk9STUFUX0pTT05CKQorCXsKKwkJYWdnZm5vaWQgPSBleHByLT5hYnNlbnRfb25f bnVsbCA/IEZfSlNPTkJfQUdHX1NUUklDVCA6IEZfSlNPTkJfQUdHOworCQlhZ2d0eXBlID0gSlNP TkJPSUQ7CisJCWluX2Z1bmMgPSBqc29uYl9pbjsKKwl9CisJZWxzZQorCXsKKwkJYWdnZm5vaWQg PSBleHByLT5hYnNlbnRfb25fbnVsbCA/IEZfSlNPTl9BR0dfU1RSSUNUIDogRl9KU09OX0FHRzsK KwkJYWdndHlwZSA9IEpTT05PSUQ7CisJCWluX2Z1bmMgPSBqc29uX2luOworCX0KKworCWFnZ3Jl ZiA9IG1ha2VOb2RlKEFnZ3JlZik7CisJYWdncmVmLT5hZ2dmbm9pZCA9IGFnZ2Zub2lkOworCWFn Z3JlZi0+YWdndHlwZSA9IGFnZ3R5cGU7CisJYWdncmVmLT5hZ2djb2xsaWQgPSBJbnZhbGlkT2lk OworCWFnZ3JlZi0+aW5wdXRjb2xsaWQgPSBleHByQ29sbGF0aW9uKChOb2RlICopIG5ld3Zhcik7 CisJYWdncmVmLT5hZ2d0cmFuc3R5cGUgPSBJbnZhbGlkT2lkOworCWFnZ3JlZi0+YWdnYXJndHlw ZXMgPSBsaXN0X21ha2UxX29pZChleHByVHlwZSgoTm9kZSAqKSBuZXd2YXIpKTsKKwlhZ2dyZWYt PmFnZ2RpcmVjdGFyZ3MgPSBOSUw7CisJYWdncmVmLT5hcmdzID0gbGlzdF9tYWtlMShtYWtlVGFy Z2V0RW50cnkoKEV4cHIgKikgbmV3dmFyLCAxLCBOVUxMLCBmYWxzZSkpOworCWFnZ3JlZi0+YWdn b3JkZXIgPSBOSUw7CisJYWdncmVmLT5hZ2dkaXN0aW5jdCA9IE5JTDsKKwlhZ2dyZWYtPmFnZ2Zp bHRlciA9IE5VTEw7CisJYWdncmVmLT5hZ2dzdGFyID0gZmFsc2U7CisJYWdncmVmLT5hZ2d2YXJp YWRpYyA9IGZhbHNlOworCWFnZ3JlZi0+YWdna2luZCA9IEFHR0tJTkRfTk9STUFMOworCWFnZ3Jl Zi0+YWdncHJlc29ydGVkID0gZmFsc2U7CisJYWdncmVmLT5hZ2dsZXZlbHN1cCA9IDA7CisJYWdn cmVmLT5hZ2dzcGxpdCA9IEFHR1NQTElUX1NJTVBMRTsKKwlhZ2dyZWYtPmFnZ25vID0gLTE7CisJ YWdncmVmLT5hZ2d0cmFuc25vID0gLTE7CisJYWdncmVmLT5sb2NhdGlvbiA9IGV4cHItPmxvY2F0 aW9uOworCisJLyoKKwkgKiBBdHRhY2ggdGhlIGFnZ3JlZ2F0ZSB0byB0aGUgb3V0ZXIgcXVlcnkn cyB0YXJnZXRsaXN0LiAgVGhlIGFnZ3JlZ2F0ZSBpcworCSAqIHdyYXBwZWQgaW4gYSBKU0NUT1Jf SlNPTl9BUlJBWUFHRyBub2RlIHRvIGhvbGQgdGhlIFJFVFVSTklORyBhbmQgQUJTRU5UCisJICog T04gTlVMTCBmb3JtYXRzIGZyb20gdGhlIG9yaWdpbmFsIGV4cHJlc3Npb24uCisJICovCisJbmV3 anNjdG9yID0gbWFrZU5vZGUoSnNvbkNvbnN0cnVjdG9yRXhwcik7CisJbmV3anNjdG9yLT50eXBl ID0gSlNDVE9SX0pTT05fQVJSQVlBR0c7CisJbmV3anNjdG9yLT5hcmdzID0gTklMOworCW5ld2pz Y3Rvci0+ZnVuYyA9IChFeHByICopIGFnZ3JlZjsKKwluZXdqc2N0b3ItPmNvZXJjaW9uID0gY29w eU9iamVjdChleHByLT5jb2VyY2lvbik7CisJbmV3anNjdG9yLT5yZXR1cm5pbmcgPSBjb3B5T2Jq ZWN0KGV4cHItPnJldHVybmluZyk7CisJbmV3anNjdG9yLT5hYnNlbnRfb25fbnVsbCA9IGV4cHIt PmFic2VudF9vbl9udWxsOworCW5ld2pzY3Rvci0+dW5pcXVlID0gZXhwci0+dW5pcXVlOworCW5l d2pzY3Rvci0+bG9jYXRpb24gPSBleHByLT5sb2NhdGlvbjsKKworCW5ld3F1ZXJ5LT50YXJnZXRM aXN0ID0gbGlzdF9tYWtlMShtYWtlVGFyZ2V0RW50cnkoKEV4cHIgKikgbmV3anNjdG9yLAorCQkJ CQkJCQkJCQkJCSAgMSwKKwkJCQkJCQkJCQkJCQkgIHBzdHJkdXAoImpzb25fYXJyYXlhZ2ciKSwK KwkJCQkJCQkJCQkJCQkgIGZhbHNlKSk7CisJbmV3cXVlcnktPmhhc0FnZ3MgPSB0cnVlOworCisJ bmV3c3VibGluay0+c3Vic2VsZWN0ID0gKE5vZGUgKikgbmV3cXVlcnk7CisKKwkvKgorCSAqIFdy YXAgdGhlIGVudGlyZSBjb25zdHJ1Y3QgaW4gYSBDT0FMRVNDRSBleHByZXNzaW9uLiAgSWYgdGhl IGlubmVyIHF1ZXJ5CisJICogcmV0dXJucyB6ZXJvIHJvd3MsIHRoZSBhZ2dyZWdhdGUgZXZhbHVh dGVzIHRvIE5VTEwuICBXZSB1c2UgQ09BTEVTQ0UgdG8KKwkgKiByZXR1cm4gYW4gZW1wdHkgSlNP TiBhcnJheSBpbnN0ZWFkLgorCSAqLworCWVtcHR5X2pzb25fY29uc3QgPSBtYWtlQ29uc3QoYWdn dHlwZSwKKwkJCQkJCQkJIC0xLAorCQkJCQkJCQkgSW52YWxpZE9pZCwKKwkJCQkJCQkJIC0xLAor CQkJCQkJCQkgRGlyZWN0RnVuY3Rpb25DYWxsMShpbl9mdW5jLCBDU3RyaW5nR2V0RGF0dW0oIltd IikpLAorCQkJCQkJCQkgZmFsc2UsCisJCQkJCQkJCSBmYWxzZSk7CisKKwljb2FsZXNjZSA9IG1h a2VOb2RlKENvYWxlc2NlRXhwcik7CisJY29hbGVzY2UtPmNvYWxlc2NldHlwZSA9IGFnZ3R5cGU7 CisJY29hbGVzY2UtPmNvYWxlc2NlY29sbGlkID0gSW52YWxpZE9pZDsKKwljb2FsZXNjZS0+YXJn cyA9IGxpc3RfbWFrZTIobmV3c3VibGluaywgZW1wdHlfanNvbl9jb25zdCk7CisJY29hbGVzY2Ut PmxvY2F0aW9uID0gZXhwci0+bG9jYXRpb247CisKKwlyZXR1cm4gKE5vZGUgKikgY29hbGVzY2U7 Cit9CisKIC8qCiAgKiB2YXJfaXNfbm9ubnVsbGFibGU6IGNoZWNrIHRvIHNlZSBpZiB0aGUgVmFy IGNhbm5vdCBiZSBOVUxMCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNl X2V4cHIuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMKaW5kZXggZGNmZTFhY2M0 YzMuLjA2YTI4ZWM1ZTE1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhw ci5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMKQEAgLTM3NjcsNzUgKzM3 NjcsMzkgQEAgdHJhbnNmb3JtSnNvbk9iamVjdENvbnN0cnVjdG9yKFBhcnNlU3RhdGUgKnBzdGF0 ZSwgSnNvbk9iamVjdENvbnN0cnVjdG9yICpjdG9yKQogfQogCiAvKgotICogVHJhbnNmb3JtIEpT T05fQVJSQVkocXVlcnkgW0ZPUk1BVF0gW1JFVFVSTklOR10gW09OIE5VTExdKSBpbnRvCi0gKiAg KFNFTEVDVCAgSlNPTl9BUlJBWUFHRyhhICBbRk9STUFUXSBbUkVUVVJOSU5HXSBbT04gTlVMTF0p IEZST00gKHF1ZXJ5KSBxKGEpKQorICogVHJhbnNmb3JtIEpTT05fQVJSQVkoc3VicXVlcnkpIGNv bnN0cnVjdG9yLgorICoKKyAqIEpTT05fQVJSQVkoc3VicXVlcnkpIGlzIHRyYW5zZm9ybWVkIGlu dG8gYSBKc29uQ29uc3RydWN0b3JFeHByIG5vZGUgb2YgdHlwZQorICogSlNDVE9SX0pTT05fQVJS QVlfUVVFUlkuICBUaGUgcmVzdWx0IGlzIGNvZXJjZWQgdG8gdGhlIHRhcmdldCB0eXBlIGdpdmVu IGJ5CisgKiBjdG9yLT5vdXRwdXQuCiAgKi8KIHN0YXRpYyBOb2RlICoKIHRyYW5zZm9ybUpzb25B cnJheVF1ZXJ5Q29uc3RydWN0b3IoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJCQkgICBKc29u QXJyYXlRdWVyeUNvbnN0cnVjdG9yICpjdG9yKQogewotCVN1YkxpbmsgICAgKnN1YmxpbmsgPSBt YWtlTm9kZShTdWJMaW5rKTsKLQlTZWxlY3RTdG10ICpzZWxlY3QgPSBtYWtlTm9kZShTZWxlY3RT dG10KTsKLQlSYW5nZVN1YnNlbGVjdCAqcmFuZ2UgPSBtYWtlTm9kZShSYW5nZVN1YnNlbGVjdCk7 Ci0JQWxpYXMJICAgKmFsaWFzID0gbWFrZU5vZGUoQWxpYXMpOwotCVJlc1RhcmdldCAgKnRhcmdl dCA9IG1ha2VOb2RlKFJlc1RhcmdldCk7Ci0JSnNvbkFycmF5QWdnICphZ2cgPSBtYWtlTm9kZShK c29uQXJyYXlBZ2cpOwotCUNvbHVtblJlZiAgKmNvbHJlZiA9IG1ha2VOb2RlKENvbHVtblJlZik7 CisJU3ViTGluayAgICAqc3VibGluazsKIAlRdWVyeQkgICAqcXVlcnk7Ci0JUGFyc2VTdGF0ZSAq cXBzdGF0ZTsKLQotCS8qIFRyYW5zZm9ybSBxdWVyeSBvbmx5IGZvciBjb3VudGluZyB0YXJnZXQg bGlzdCBlbnRyaWVzLiAqLwotCXFwc3RhdGUgPSBtYWtlX3BhcnNlc3RhdGUocHN0YXRlKTsKLQot CXF1ZXJ5ID0gdHJhbnNmb3JtU3RtdChxcHN0YXRlLCBjb3B5T2JqZWN0KGN0b3ItPnF1ZXJ5KSk7 Ci0KLQlpZiAoY291bnRfbm9uanVua190bGlzdF9lbnRyaWVzKHF1ZXJ5LT50YXJnZXRMaXN0KSAh PSAxKQotCQllcmVwb3J0KEVSUk9SLAotCQkJCWVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1Ip LAotCQkJCWVycm1zZygic3VicXVlcnkgbXVzdCByZXR1cm4gb25seSBvbmUgY29sdW1uIiksCi0J CQkJcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgY3Rvci0+bG9jYXRpb24pKTsKLQotCWZyZWVf cGFyc2VzdGF0ZShxcHN0YXRlKTsKLQotCWNvbHJlZi0+ZmllbGRzID0gbGlzdF9tYWtlMihtYWtl U3RyaW5nKHBzdHJkdXAoInEiKSksCi0JCQkJCQkJCW1ha2VTdHJpbmcocHN0cmR1cCgiYSIpKSk7 Ci0JY29scmVmLT5sb2NhdGlvbiA9IGN0b3ItPmxvY2F0aW9uOwotCi0JLyoKLQkgKiBObyBmb3Jt YXR0aW5nIG5lY2Vzc2FyeSwgc28gc2V0IGZvcm1hdHRlZF9leHByIHRvIGJlIHRoZSBzYW1lIGFz Ci0JICogcmF3X2V4cHIuCi0JICovCi0JYWdnLT5hcmcgPSBtYWtlSnNvblZhbHVlRXhwcigoRXhw ciAqKSBjb2xyZWYsIChFeHByICopIGNvbHJlZiwKLQkJCQkJCQkJIGN0b3ItPmZvcm1hdCk7Ci0J YWdnLT5hYnNlbnRfb25fbnVsbCA9IGN0b3ItPmFic2VudF9vbl9udWxsOwotCWFnZy0+Y29uc3Ry dWN0b3IgPSBtYWtlTm9kZShKc29uQWdnQ29uc3RydWN0b3IpOwotCWFnZy0+Y29uc3RydWN0b3It PmFnZ19vcmRlciA9IE5JTDsKLQlhZ2ctPmNvbnN0cnVjdG9yLT5vdXRwdXQgPSBjdG9yLT5vdXRw dXQ7Ci0JYWdnLT5jb25zdHJ1Y3Rvci0+bG9jYXRpb24gPSBjdG9yLT5sb2NhdGlvbjsKLQotCXRh cmdldC0+bmFtZSA9IE5VTEw7Ci0JdGFyZ2V0LT5pbmRpcmVjdGlvbiA9IE5JTDsKLQl0YXJnZXQt PnZhbCA9IChOb2RlICopIGFnZzsKLQl0YXJnZXQtPmxvY2F0aW9uID0gY3Rvci0+bG9jYXRpb247 Ci0KLQlhbGlhcy0+YWxpYXNuYW1lID0gcHN0cmR1cCgicSIpOwotCWFsaWFzLT5jb2xuYW1lcyA9 IGxpc3RfbWFrZTEobWFrZVN0cmluZyhwc3RyZHVwKCJhIikpKTsKLQotCXJhbmdlLT5sYXRlcmFs ID0gZmFsc2U7Ci0JcmFuZ2UtPnN1YnF1ZXJ5ID0gY3Rvci0+cXVlcnk7Ci0JcmFuZ2UtPmFsaWFz ID0gYWxpYXM7Ci0KLQlzZWxlY3QtPnRhcmdldExpc3QgPSBsaXN0X21ha2UxKHRhcmdldCk7Ci0J c2VsZWN0LT5mcm9tQ2xhdXNlID0gbGlzdF9tYWtlMShyYW5nZSk7CisJSnNvblJldHVybmluZyAq cmV0dXJuaW5nOworCUxpc3QJICAgKmFyZ3M7CiAKKwlzdWJsaW5rID0gbWFrZU5vZGUoU3ViTGlu ayk7CiAJc3VibGluay0+c3ViTGlua1R5cGUgPSBFWFBSX1NVQkxJTks7CiAJc3VibGluay0+c3Vi TGlua0lkID0gMDsKIAlzdWJsaW5rLT50ZXN0ZXhwciA9IE5VTEw7CiAJc3VibGluay0+b3Blck5h bWUgPSBOSUw7Ci0Jc3VibGluay0+c3Vic2VsZWN0ID0gKE5vZGUgKikgc2VsZWN0OworCXN1Ymxp bmstPnN1YnNlbGVjdCA9IChOb2RlICopIGN0b3ItPnF1ZXJ5OwogCXN1YmxpbmstPmxvY2F0aW9u ID0gY3Rvci0+bG9jYXRpb247CiAKLQlyZXR1cm4gdHJhbnNmb3JtRXhwclJlY3Vyc2UocHN0YXRl LCAoTm9kZSAqKSBzdWJsaW5rKTsKKwlzdWJsaW5rID0gKFN1YkxpbmsgKikgdHJhbnNmb3JtRXhw clJlY3Vyc2UocHN0YXRlLCAoTm9kZSAqKSBzdWJsaW5rKTsKKworCXF1ZXJ5ID0gKFF1ZXJ5ICop IHN1YmxpbmstPnN1YnNlbGVjdDsKKwlhcmdzID0gbGlzdF9tYWtlMShsaW5pdGlhbF9ub2RlKFRh cmdldEVudHJ5LCBxdWVyeS0+dGFyZ2V0TGlzdCktPmV4cHIpOworCXJldHVybmluZyA9IHRyYW5z Zm9ybUpzb25Db25zdHJ1Y3Rvck91dHB1dChwc3RhdGUsIGN0b3ItPm91dHB1dCwgYXJncyk7CisK KwlyZXR1cm4gbWFrZUpzb25Db25zdHJ1Y3RvckV4cHIocHN0YXRlLCBKU0NUT1JfSlNPTl9BUlJB WV9RVUVSWSwKKwkJCQkJCQkJICAgbGlzdF9tYWtlMShzdWJsaW5rKSwgTlVMTCwgcmV0dXJuaW5n LAorCQkJCQkJCQkgICBmYWxzZSwgY3Rvci0+YWJzZW50X29uX251bGwsCisJCQkJCQkJCSAgIGN0 b3ItPmxvY2F0aW9uKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9ydWxldXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwppbmRleCBm MTZmMTUzNTc4NS4uMjc0ZDNlNjBkMTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9ydWxldXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKQEAg LTExNzQwLDYgKzExNzQwLDI2IEBAIGdldF9qc29uX2NvbnN0cnVjdG9yKEpzb25Db25zdHJ1Y3Rv ckV4cHIgKmN0b3IsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKIAkJZ2V0X2pzb25fYWdnX2Nv bnN0cnVjdG9yKGN0b3IsIGNvbnRleHQsICJKU09OX0FSUkFZQUdHIiwgZmFsc2UpOwogCQlyZXR1 cm47CiAJfQorCWVsc2UgaWYgKGN0b3ItPnR5cGUgPT0gSlNDVE9SX0pTT05fQVJSQVlfUVVFUlkp CisJeworCQkvKgorCQkgKiBCeXBhc3MgZ2V0X3N1YmxpbmtfZXhwciB0byBhdm9pZCBpdHMgaGFy ZGNvZGVkIHBhcmVudGhlc2VzLiAgV2UKKwkJICogd2FudCBKU09OX0FSUkFZKFNFTEVDVCAuLi4p LCBub3QgSlNPTl9BUlJBWSgoU0VMRUNUIC4uLikpLgorCQkgKi8KKworCQlTdWJMaW5rICAgICpz dWJsaW5rID0gbGluaXRpYWxfbm9kZShTdWJMaW5rLCBjdG9yLT5hcmdzKTsKKworCQlhcHBlbmRT dHJpbmdJbmZvKGJ1ZiwgIkpTT05fQVJSQVkoIik7CisKKwkJZ2V0X3F1ZXJ5X2RlZigoUXVlcnkg Kikgc3VibGluay0+c3Vic2VsZWN0LCBidWYsIGNvbnRleHQtPm5hbWVzcGFjZXMsCisJCQkJCSAg TlVMTCwgZmFsc2UsIGNvbnRleHQtPnByZXR0eUZsYWdzLCBjb250ZXh0LT53cmFwQ29sdW1uLAor CQkJCQkgIGNvbnRleHQtPmluZGVudExldmVsKTsKKworCQlnZXRfanNvbl9jb25zdHJ1Y3Rvcl9v cHRpb25zKGN0b3IsIGJ1Zik7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJyknKTsKKwor CQlyZXR1cm47CisJfQogCiAJc3dpdGNoIChjdG9yLT50eXBlKQogCXsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVz LmgKaW5kZXggMzg0ZGY1MGM4MGEuLjg0MzVlNzYxMDViIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9ub2Rlcy9wcmltbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaApA QCAtMTcxMywxMyArMTcxMywxNCBAQCB0eXBlZGVmIHN0cnVjdCBKc29uVmFsdWVFeHByCiAKIHR5 cGVkZWYgZW51bSBKc29uQ29uc3RydWN0b3JUeXBlCiB7Ci0JSlNDVE9SX0pTT05fT0JKRUNUID0g MSwKLQlKU0NUT1JfSlNPTl9BUlJBWSA9IDIsCi0JSlNDVE9SX0pTT05fT0JKRUNUQUdHID0gMywK LQlKU0NUT1JfSlNPTl9BUlJBWUFHRyA9IDQsCi0JSlNDVE9SX0pTT05fUEFSU0UgPSA1LAotCUpT Q1RPUl9KU09OX1NDQUxBUiA9IDYsCi0JSlNDVE9SX0pTT05fU0VSSUFMSVpFID0gNywKKwlKU0NU T1JfSlNPTl9PQkpFQ1QsCisJSlNDVE9SX0pTT05fQVJSQVksCisJSlNDVE9SX0pTT05fQVJSQVlf UVVFUlksCisJSlNDVE9SX0pTT05fT0JKRUNUQUdHLAorCUpTQ1RPUl9KU09OX0FSUkFZQUdHLAor CUpTQ1RPUl9KU09OX1BBUlNFLAorCUpTQ1RPUl9KU09OX1NDQUxBUiwKKwlKU0NUT1JfSlNPTl9T RVJJQUxJWkUsCiB9IEpzb25Db25zdHJ1Y3RvclR5cGU7CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NxbGpzb24ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9zcWxqc29uLm91dAppbmRleCBjN2I5ZTU3NTQ0NS4uYzdjNmM2NDEzZTMgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3FsanNvbi5vdXQKKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9zcWxqc29uLm91dApAQCAtNzI0LDYgKzcyNCw3IEBAIFNFTEVDVCBK U09OX0FSUkFZKEpTT05fQVJSQVkoJ3sgImEiIDogMTIzIH0nIEZPUk1BVCBKU09OIFJFVFVSTklO RyB0ZXh0KSBGT1JNQVQKICBbW3sgImEiIDogMTIzIH1dXQogKDEgcm93KQogCistLSBKU09OX0FS UkFZKHN1YnF1ZXJ5KQogU0VMRUNUIEpTT05fQVJSQVkoU0VMRUNUIGkgRlJPTSAoVkFMVUVTICgx KSwgKDIpLCAoTlVMTCksICg0KSkgZm9vKGkpKTsKICBqc29uX2FycmF5IAogLS0tLS0tLS0tLS0t CkBAIC03NTcsNiArNzU4LDMxIEBAIFNFTEVDVCBKU09OX0FSUkFZKFdJVEggeCBBUyAoU0VMRUNU IDEpIFZBTFVFUyAoVFJVRSkpOwogIFt0cnVlXQogKDEgcm93KQogCistLSBKU09OX0FSUkFZKHN1 YnF1ZXJ5KSB3aXRoIGVtcHR5IHJlc3VsdCBzZXQKK1NFTEVDVCBKU09OX0FSUkFZKFNFTEVDVCAx IFdIRVJFIEZBTFNFKTsKKyBqc29uX2FycmF5IAorLS0tLS0tLS0tLS0tCisgW10KKygxIHJvdykK KworU0VMRUNUIEpTT05fQVJSQVkoU0VMRUNUIGkgRlJPTSAoVkFMVUVTICgxKSwgKDIpLCAoTlVM TCksICg0KSkgZm9vKGkpIFdIRVJFIGkgPiA0KTsKKyBqc29uX2FycmF5IAorLS0tLS0tLS0tLS0t CisgW10KKygxIHJvdykKKworLS0gSlNPTl9BUlJBWShzdWJxdWVyeSkgd2l0aCBhIGNvcnJlbGF0 ZWQgc3VicXVlcnkgaW4gdGhlIFdIRVJFIGNsYXVzZQorU0VMRUNUICogRlJPTSAoVkFMVUVTICgx KSwgKDIpLCAoTlVMTCksICg0KSkgdDEoYSkKK1dIRVJFIEpTT05fQVJSQVkoCisgICAgU0VMRUNU IGIgRlJPTSAoVkFMVUVTICgxKSwgKDIpLCAoMykpIHQyKGIpIFdIRVJFIGIgPSB0MS5hCisgICAg UkVUVVJOSU5HIGpzb25iCispID0gJ1tdJzo6anNvbmI7CisgYSAKKy0tLQorICAKKyA0CisoMiBy b3dzKQorCiAtLSBTaG91bGQgZmFpbAogU0VMRUNUIEpTT05fQVJSQVkoU0VMRUNUIEZST00gKFZB TFVFUyAoMSkpIGZvbyhpKSk7CiBFUlJPUjogIHN1YnF1ZXJ5IG11c3QgcmV0dXJuIG9ubHkgb25l IGNvbHVtbgpAQCAtMTA5Myw3ICsxMTE5LDcgQEAgU0VMRUNUIEpTT05fQVJSQVkoU0VMRUNUIGkg RlJPTSAoVkFMVUVTICgxKSwgKDIpLCAoTlVMTCksICg0KSkgZm9vKGkpIFJFVFVSTklORwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBSZXN1bHQKLSAgIE91dHB1dDogKEluaXRQbGFuIGV4 cHJfMSkuY29sMQorICAgT3V0cHV0OiBDT0FMRVNDRSgoSW5pdFBsYW4gZXhwcl8xKS5jb2wxLCAn W10nOjpqc29uYikKICAgIEluaXRQbGFuIGV4cHJfMQogICAgICAtPiAgQWdncmVnYXRlCiAgICAg ICAgICAgIE91dHB1dDogSlNPTl9BUlJBWUFHRygiKlZBTFVFUyoiLmNvbHVtbjEgUkVUVVJOSU5H IGpzb25iKQpAQCAtMTEwNSw5ICsxMTMxLDY3IEBAIENSRUFURSBWSUVXIGpzb25fYXJyYXlfc3Vi cXVlcnlfdmlldyBBUwogU0VMRUNUIEpTT05fQVJSQVkoU0VMRUNUIGkgRlJPTSAoVkFMVUVTICgx KSwgKDIpLCAoTlVMTCksICg0KSkgZm9vKGkpIFJFVFVSTklORyBqc29uYik7CiBcc3YganNvbl9h cnJheV9zdWJxdWVyeV92aWV3CiBDUkVBVEUgT1IgUkVQTEFDRSBWSUVXIHB1YmxpYy5qc29uX2Fy cmF5X3N1YnF1ZXJ5X3ZpZXcgQVMKLSBTRUxFQ1QgKCBTRUxFQ1QgSlNPTl9BUlJBWUFHRyhxLmEg UkVUVVJOSU5HIGpzb25iKSBBUyAianNvbl9hcnJheWFnZyIKLSAgICAgICAgICAgRlJPTSAoIFNF TEVDVCBmb28uaQotICAgICAgICAgICAgICAgICAgIEZST00gKCBWQUxVRVMgKDEpLCAoMiksIChO VUxMOjppbnRlZ2VyKSwgKDQpKSBmb28oaSkpIHEoYSkpIEFTICJqc29uX2FycmF5IgorIFNFTEVD VCBKU09OX0FSUkFZKCBTRUxFQ1QgZm9vLmkKKyAgICAgICAgICAgRlJPTSAoIFZBTFVFUyAoMSks ICgyKSwgKE5VTEw6OmludGVnZXIpLCAoNCkpIGZvbyhpKSBSRVRVUk5JTkcganNvbmIpIEFTICJq c29uX2FycmF5IgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIEpTT05fQVJS QVkoU0VMRUNUIGkgRlJPTSAoVkFMVUVTICgxKSwgKDIpLCAoTlVMTCksICg0KSkgZm9vKGkpIE9S REVSIEJZIGkgTElNSVQgMyBSRVRVUk5JTkcganNvbmIpOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBSZXN1bHQKKyAgIE91dHB1dDogQ09BTEVTQ0UoKEluaXRQbGFuIGV4cHJfMSkuY29s MSwgJ1tdJzo6anNvbmIpCisgICBJbml0UGxhbiBleHByXzEKKyAgICAgLT4gIEFnZ3JlZ2F0ZQor ICAgICAgICAgICBPdXRwdXQ6IEpTT05fQVJSQVlBR0coIipWQUxVRVMqIi5jb2x1bW4xIFJFVFVS TklORyBqc29uYikKKyAgICAgICAgICAgLT4gIExpbWl0CisgICAgICAgICAgICAgICAgIE91dHB1 dDogIipWQUxVRVMqIi5jb2x1bW4xCisgICAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogIipWQUxVRVMqIi5jb2x1bW4xCisgICAgICAgICAgICAg ICAgICAgICAgIFNvcnQgS2V5OiAiKlZBTFVFUyoiLmNvbHVtbjEKKyAgICAgICAgICAgICAgICAg ICAgICAgLT4gIFZhbHVlcyBTY2FuIG9uICIqVkFMVUVTKiIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiAiKlZBTFVFUyoiLmNvbHVtbjEKKygxMiByb3dzKQorCitDUkVBVEUg T1IgUkVQTEFDRSBWSUVXIGpzb25fYXJyYXlfc3VicXVlcnlfdmlldyBBUworU0VMRUNUIEpTT05f QVJSQVkoU0VMRUNUIGkgRlJPTSAoVkFMVUVTICgxKSwgKDIpLCAoTlVMTCksICg0KSkgZm9vKGkp IE9SREVSIEJZIGkgTElNSVQgMyBSRVRVUk5JTkcganNvbmIpOworXHN2IGpzb25fYXJyYXlfc3Vi cXVlcnlfdmlldworQ1JFQVRFIE9SIFJFUExBQ0UgVklFVyBwdWJsaWMuanNvbl9hcnJheV9zdWJx dWVyeV92aWV3IEFTCisgU0VMRUNUIEpTT05fQVJSQVkoIFNFTEVDVCBmb28uaQorICAgICAgICAg ICBGUk9NICggVkFMVUVTICgxKSwgKDIpLCAoTlVMTDo6aW50ZWdlciksICg0KSkgZm9vKGkpCisg ICAgICAgICAgT1JERVIgQlkgZm9vLmkKKyAgICAgICAgIExJTUlUIDMgUkVUVVJOSU5HIGpzb25i KSBBUyAianNvbl9hcnJheSIKK0RST1AgVklFVyBqc29uX2FycmF5X3N1YnF1ZXJ5X3ZpZXc7CitF WFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIChWQUxVRVMgKDEpLCAo MiksIChOVUxMKSwgKDQpKSB0MShhKQorV0hFUkUgSlNPTl9BUlJBWSgKKyAgICBTRUxFQ1QgYiBG Uk9NIChWQUxVRVMgKDEpLCAoMiksICgzKSkgdDIoYikgV0hFUkUgYiA9IHQxLmEKKyAgICBSRVRV Uk5JTkcganNvbmIKKykgPSAnW10nOjpqc29uYjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIFZhbHVlcyBTY2FuIG9uICIqVkFMVUVTKiIKKyAgIE91dHB1dDogIipWQUxVRVMqIi5j b2x1bW4xCisgICBGaWx0ZXI6IChDT0FMRVNDRSgoU3ViUGxhbiBleHByXzEpLCAnW10nOjpqc29u YikgPSAnW10nOjpqc29uYikKKyAgIFN1YlBsYW4gZXhwcl8xCisgICAgIC0+ICBBZ2dyZWdhdGUK KyAgICAgICAgICAgT3V0cHV0OiBKU09OX0FSUkFZQUdHKCIqVkFMVUVTKl8xIi5jb2x1bW4xIFJF VFVSTklORyBqc29uYikKKyAgICAgICAgICAgLT4gIFZhbHVlcyBTY2FuIG9uICIqVkFMVUVTKl8x IgorICAgICAgICAgICAgICAgICBPdXRwdXQ6ICIqVkFMVUVTKl8xIi5jb2x1bW4xCisgICAgICAg ICAgICAgICAgIEZpbHRlcjogKCIqVkFMVUVTKl8xIi5jb2x1bW4xID0gIipWQUxVRVMqIi5jb2x1 bW4xKQorKDkgcm93cykKKworQ1JFQVRFIFZJRVcganNvbl9hcnJheV9zdWJxdWVyeV92aWV3IEFT CitTRUxFQ1QgKiBGUk9NIChWQUxVRVMgKDEpLCAoMiksIChOVUxMKSwgKDQpKSB0MShhKQorV0hF UkUgSlNPTl9BUlJBWSgKKyAgICBTRUxFQ1QgYiBGUk9NIChWQUxVRVMgKDEpLCAoMiksICgzKSkg dDIoYikgV0hFUkUgYiA9IHQxLmEKKyAgICBSRVRVUk5JTkcganNvbmIKKykgPSAnW10nOjpqc29u YjsKK1xzdiBqc29uX2FycmF5X3N1YnF1ZXJ5X3ZpZXcKK0NSRUFURSBPUiBSRVBMQUNFIFZJRVcg cHVibGljLmpzb25fYXJyYXlfc3VicXVlcnlfdmlldyBBUworIFNFTEVDVCBhCisgICBGUk9NICgg VkFMVUVTICgxKSwgKDIpLCAoTlVMTDo6aW50ZWdlciksICg0KSkgdDEoYSkKKyAgV0hFUkUgSlNP Tl9BUlJBWSggU0VMRUNUIHQyLmIKKyAgICAgICAgICAgRlJPTSAoIFZBTFVFUyAoMSksICgyKSwg KDMpKSB0MihiKQorICAgICAgICAgIFdIRVJFIHQyLmIgPSB0MS5hIFJFVFVSTklORyBqc29uYikg PSAnW10nOjpqc29uYgogRFJPUCBWSUVXIGpzb25fYXJyYXlfc3VicXVlcnlfdmlldzsKIC0tIElT IEpTT04gcHJlZGljYXRlCiBTRUxFQ1QgTlVMTCBJUyBKU09OOwpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9zcWwvc3FsanNvbi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zcWxqc29u LnNxbAppbmRleCAzNDNkMzQ0ZDI3MC4uMTAzM2JmNDI4N2EgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL3NxbGpzb24uc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NxbGpz b24uc3FsCkBAIC0xOTMsNiArMTkzLDcgQEAgU0VMRUNUIEpTT05fQVJSQVkoSlNPTl9BUlJBWSgn eyAiYSIgOiAxMjMgfScgUkVUVVJOSU5HIHRleHQpKTsKIFNFTEVDVCBKU09OX0FSUkFZKEpTT05f QVJSQVkoJ3sgImEiIDogMTIzIH0nIEZPUk1BVCBKU09OIFJFVFVSTklORyB0ZXh0KSk7CiBTRUxF Q1QgSlNPTl9BUlJBWShKU09OX0FSUkFZKCd7ICJhIiA6IDEyMyB9JyBGT1JNQVQgSlNPTiBSRVRV Uk5JTkcgdGV4dCkgRk9STUFUIEpTT04pOwogCistLSBKU09OX0FSUkFZKHN1YnF1ZXJ5KQogU0VM RUNUIEpTT05fQVJSQVkoU0VMRUNUIGkgRlJPTSAoVkFMVUVTICgxKSwgKDIpLCAoTlVMTCksICg0 KSkgZm9vKGkpKTsKIFNFTEVDVCBKU09OX0FSUkFZKFNFTEVDVCBpIEZST00gKFZBTFVFUyAoTlVM TDo6aW50W10pLCAoJ3sxLDJ9JyksIChOVUxMKSwgKE5VTEwpLCAoJ3szLDR9JyksIChOVUxMKSkg Zm9vKGkpKTsKIFNFTEVDVCBKU09OX0FSUkFZKFNFTEVDVCBpIEZST00gKFZBTFVFUyAoTlVMTDo6 aW50W10pLCAoJ3sxLDJ9JyksIChOVUxMKSwgKE5VTEwpLCAoJ3szLDR9JyksIChOVUxMKSkgZm9v KGkpIFJFVFVSTklORyBqc29uYik7CkBAIC0yMDEsNiArMjAyLDE3IEBAIFNFTEVDVCBKU09OX0FS UkFZKFNFTEVDVCBpIEZST00gKFZBTFVFUyAoTlVMTDo6aW50W10pLCAoJ3sxLDJ9JyksIChOVUxM KSwgKE5VTEwpCiBTRUxFQ1QgSlNPTl9BUlJBWShTRUxFQ1QgaSBGUk9NIChWQUxVRVMgKDMpLCAo MSksIChOVUxMKSwgKDIpKSBmb28oaSkgT1JERVIgQlkgaSk7CiBTRUxFQ1QgSlNPTl9BUlJBWShX SVRIIHggQVMgKFNFTEVDVCAxKSBWQUxVRVMgKFRSVUUpKTsKIAorLS0gSlNPTl9BUlJBWShzdWJx dWVyeSkgd2l0aCBlbXB0eSByZXN1bHQgc2V0CitTRUxFQ1QgSlNPTl9BUlJBWShTRUxFQ1QgMSBX SEVSRSBGQUxTRSk7CitTRUxFQ1QgSlNPTl9BUlJBWShTRUxFQ1QgaSBGUk9NIChWQUxVRVMgKDEp LCAoMiksIChOVUxMKSwgKDQpKSBmb28oaSkgV0hFUkUgaSA+IDQpOworCistLSBKU09OX0FSUkFZ KHN1YnF1ZXJ5KSB3aXRoIGEgY29ycmVsYXRlZCBzdWJxdWVyeSBpbiB0aGUgV0hFUkUgY2xhdXNl CitTRUxFQ1QgKiBGUk9NIChWQUxVRVMgKDEpLCAoMiksIChOVUxMKSwgKDQpKSB0MShhKQorV0hF UkUgSlNPTl9BUlJBWSgKKyAgICBTRUxFQ1QgYiBGUk9NIChWQUxVRVMgKDEpLCAoMiksICgzKSkg dDIoYikgV0hFUkUgYiA9IHQxLmEKKyAgICBSRVRVUk5JTkcganNvbmIKKykgPSAnW10nOjpqc29u YjsKKwogLS0gU2hvdWxkIGZhaWwKIFNFTEVDVCBKU09OX0FSUkFZKFNFTEVDVCBGUk9NIChWQUxV RVMgKDEpKSBmb28oaSkpOwogU0VMRUNUIEpTT05fQVJSQVkoU0VMRUNUIGksIGkgRlJPTSAoVkFM VUVTICgxKSkgZm9vKGkpKTsKQEAgLTM4NCw2ICszOTYsMzIgQEAgU0VMRUNUIEpTT05fQVJSQVko U0VMRUNUIGkgRlJPTSAoVkFMVUVTICgxKSwgKDIpLCAoTlVMTCksICg0KSkgZm9vKGkpIFJFVFVS TklORwogCiBcc3YganNvbl9hcnJheV9zdWJxdWVyeV92aWV3CiAKK0VYUExBSU4gKFZFUkJPU0Us IENPU1RTIE9GRikKK1NFTEVDVCBKU09OX0FSUkFZKFNFTEVDVCBpIEZST00gKFZBTFVFUyAoMSks ICgyKSwgKE5VTEwpLCAoNCkpIGZvbyhpKSBPUkRFUiBCWSBpIExJTUlUIDMgUkVUVVJOSU5HIGpz b25iKTsKKworQ1JFQVRFIE9SIFJFUExBQ0UgVklFVyBqc29uX2FycmF5X3N1YnF1ZXJ5X3ZpZXcg QVMKK1NFTEVDVCBKU09OX0FSUkFZKFNFTEVDVCBpIEZST00gKFZBTFVFUyAoMSksICgyKSwgKE5V TEwpLCAoNCkpIGZvbyhpKSBPUkRFUiBCWSBpIExJTUlUIDMgUkVUVVJOSU5HIGpzb25iKTsKKwor XHN2IGpzb25fYXJyYXlfc3VicXVlcnlfdmlldworCitEUk9QIFZJRVcganNvbl9hcnJheV9zdWJx dWVyeV92aWV3OworCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9N IChWQUxVRVMgKDEpLCAoMiksIChOVUxMKSwgKDQpKSB0MShhKQorV0hFUkUgSlNPTl9BUlJBWSgK KyAgICBTRUxFQ1QgYiBGUk9NIChWQUxVRVMgKDEpLCAoMiksICgzKSkgdDIoYikgV0hFUkUgYiA9 IHQxLmEKKyAgICBSRVRVUk5JTkcganNvbmIKKykgPSAnW10nOjpqc29uYjsKKworQ1JFQVRFIFZJ RVcganNvbl9hcnJheV9zdWJxdWVyeV92aWV3IEFTCitTRUxFQ1QgKiBGUk9NIChWQUxVRVMgKDEp LCAoMiksIChOVUxMKSwgKDQpKSB0MShhKQorV0hFUkUgSlNPTl9BUlJBWSgKKyAgICBTRUxFQ1Qg YiBGUk9NIChWQUxVRVMgKDEpLCAoMiksICgzKSkgdDIoYikgV0hFUkUgYiA9IHQxLmEKKyAgICBS RVRVUk5JTkcganNvbmIKKykgPSAnW10nOjpqc29uYjsKKworXHN2IGpzb25fYXJyYXlfc3VicXVl cnlfdmlldworCiBEUk9QIFZJRVcganNvbl9hcnJheV9zdWJxdWVyeV92aWV3OwogCiAtLSBJUyBK U09OIHByZWRpY2F0ZQotLSAKMi4zOS41IChBcHBsZSBHaXQtMTU0KQoK --000000000000f0113b064c2d0840--