From gerrit-no-reply@lists.osmocom.org Fri Aug 28 11:51:40 2026
From: jolly <gerrit-no-reply@lists.osmocom.org>
To: gerrit-log@lists.osmocom.org
Subject: [M] Change in osmo-ttcn3-hacks[master]: IPAd: Add test for function
 ES10b.GetConnectivityParameters
Date: Fri, 28 Aug 2026 11:51:36 +0000
Message-ID: <00dbd0681dd496ad4b76f2bd5a1c43031e1403bd-HTML@gerrit.osmocom.org>
In-Reply-To: =?utf-8?q?=3Cgerrit=2E1787047359000=2EI4010e324f61827dc5d230fc9?=
 =?utf-8?q?07ad6d49e3129736=40gerrit=2Eosmocom=2Eorg=3E?=
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="===============1683655690890642989=="

--===============1683655690890642989==
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable

jolly has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-ha=
cks/+/43273?usp=3Demail )

 (=20

6 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the submitted=
 one.
 )Change subject: IPAd: Add test for function ES10b.GetConnectivityParameters
......................................................................

IPAd: Add test for function ES10b.GetConnectivityParameters

Related: SYS#8101
Change-Id: I4010e324f61827dc5d230fc907ad6d49e3129736
---
M ipad/IPAd_Tests.ttcn
M library/euicc/SGP32Definitions_Templates.ttcn
M library/euicc/SGP32Definitions_Types.ttcn
3 files changed, 67 insertions(+), 0 deletions(-)

Approvals:
  dexter: Looks good to me, approved
  Jenkins Builder: Verified
  osmith: Looks good to me, but someone else must approve




diff --git a/ipad/IPAd_Tests.ttcn b/ipad/IPAd_Tests.ttcn
index 70be30d..c2c5385 100644
--- a/ipad/IPAd_Tests.ttcn
+++ b/ipad/IPAd_Tests.ttcn
@@ -480,6 +480,14 @@
         unmap(self:PIPE, system:PIPE);
 }
=20
+/* Grep through log file and expect given pattern.
+ * Note: PIPEasp does not allow quotes, so 'string' must be a string without=
 spaces. */
+private function f_expect_in_logfile(charstring string) runs on IPAd_ConnHdl=
r {
+	map(self:PIPE, system:PIPE);
+	f_PIPEasp_exec_sync(PIPE, "grep " & string & " /tmp/single_log", 0);
+        unmap(self:PIPE, system:PIPE);
+}
+
 /* ********************************************* */
 /* ********** BELOW ONLY TESTCASES! ************ */
 /* ********************************************* */
@@ -872,6 +880,34 @@
 	setverdict(pass);
 }
=20
+/* A testcase to tigger the 'get connectivity parameters' via ES10b interfac=
e */
+private function f_TC_func_get_conn_params(charstring id) runs on IPAd_ConnH=
dlr {
+	f_exec_ipad("get-connectivity-parameters");
+	f_es10x_init(eim_init :=3D false);
+
+	var octetstring asn :=3D f_vpcd_transceive(enc_GetConnectivityParametersRes=
ponse(valueof(ts_getConnectivityParametersResponse_httpParams('12345678'O))),=
 ''O);
+	var GetConnectivityParametersRequest req :=3D dec_GetConnectivityParameters=
Request(asn);
+	if (not match(req, tr_getConnectivityParametersRequest)) {
+		setverdict(fail, "Unexpected ES10b request: ", req);
+	}
+
+	f_es10x_close();
+	f_stop_ipad();
+
+	f_expect_in_logfile("HTTP.paramms:.12345678");
+
+	setverdict(pass);
+}
+testcase TC_func_get_conn_params() runs on MTC_CT {
+	var charstring id :=3D testcasename();
+	var IPAd_ConnHdlrPars pars :=3D f_init_pars();
+	var IPAd_ConnHdlr vc_conn;
+	f_init(id);
+	vc_conn :=3D f_start_handler(refers(f_TC_func_get_conn_params), pars);
+	vc_conn.done;
+	setverdict(pass);
+}
+
 control {
 	execute ( TC_proc_indirect_prfle_dwnld() );
 	execute ( TC_proc_euicc_pkg_dwnld_exec() );
@@ -882,6 +918,7 @@
 	execute ( TC_func_ret_from_fallback() );
 	execute ( TC_func_en_emerg_prfle() );
 	execute ( TC_func_dis_emerg_prfle() );
+	execute ( TC_func_get_conn_params() );
 }
=20
 }
diff --git a/library/euicc/SGP32Definitions_Templates.ttcn b/library/euicc/SG=
P32Definitions_Templates.ttcn
index 7c14667..92696f1 100644
--- a/library/euicc/SGP32Definitions_Templates.ttcn
+++ b/library/euicc/SGP32Definitions_Templates.ttcn
@@ -1703,6 +1703,26 @@
 	disableEmergencyProfileResult :=3D errorCode
 }
=20
+/* GSMA SGP.32, section 5.9.24 */
+template (present) GetConnectivityParametersRequest
+tr_getConnectivityParametersRequest :=3D {
+}
+template (value) GetConnectivityParametersRequest
+ts_getConnectivityParametersRequest :=3D {
+}
+template (present) GetConnectivityParametersResponse
+tr_getConnectivityParametersResponse_httpParams(template octetstring httpPar=
ams :=3D *) :=3D {
+	connectivityParameters :=3D {
+		httpParams :=3D httpParams
+	}
+}
+template (value) GetConnectivityParametersResponse
+ts_getConnectivityParametersResponse_httpParams(template (omit) octetstring =
httpParams :=3D omit) :=3D {
+	connectivityParameters :=3D {
+		httpParams :=3D httpParams
+	}
+}
+
 /* GSMA SGP.32, section 5.9.4 */
 template (present) AddInitialEimResponse
 tr_addInitialEimResponse :=3D {
diff --git a/library/euicc/SGP32Definitions_Types.ttcn b/library/euicc/SGP32D=
efinitions_Types.ttcn
index 2f9de2a..82f908f 100644
--- a/library/euicc/SGP32Definitions_Types.ttcn
+++ b/library/euicc/SGP32Definitions_Types.ttcn
@@ -88,4 +88,14 @@
 external function enc_DisableEmergencyProfileResponse(in DisableEmergencyPro=
fileResponse msg) return octetstring
 with { extension "prototype(convert) encode(BER:BER_ENCODE_DER)" };
=20
+external function dec_GetConnectivityParametersRequest(in octetstring stream=
) return GetConnectivityParametersRequest
+with { extension "prototype(convert) decode(BER:BER_ACCEPT_ALL)" };
+external function enc_GetConnectivityParametersRequest(in GetConnectivityPar=
ametersRequest msg) return octetstring
+with { extension "prototype(convert) encode(BER:BER_ENCODE_DER)" };
+
+external function dec_GetConnectivityParametersResponse(in octetstring strea=
m) return GetConnectivityParametersResponse
+with { extension "prototype(convert) decode(BER:BER_ACCEPT_ALL)" };
+external function enc_GetConnectivityParametersResponse(in GetConnectivityPa=
rametersResponse msg) return octetstring
+with { extension "prototype(convert) encode(BER:BER_ENCODE_DER)" };
+
 }

--=20
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/43273?usp=3Dem=
ail
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmoco=
m.org/settings?usp=3Demail

Gerrit-MessageType: merged
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: I4010e324f61827dc5d230fc907ad6d49e3129736
Gerrit-Change-Number: 43273
Gerrit-PatchSet: 7
Gerrit-Owner: jolly <andreas(a)eversberg.eu>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: dexter <pmaier(a)sysmocom.de>
Gerrit-Reviewer: jolly <andreas(a)eversberg.eu>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: osmith <osmith(a)sysmocom.de>



--===============1683655690890642989==
Content-Type: text/html
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="attachment.html"
MIME-Version: 1.0

PCFET0NUWVBFIGh0bWw+PGh0bWw+PGhlYWQ+PHN0eWxlPjwvc3R5bGU+PC9oZWFkPjxib2R5Pjxw
PmpvbGx5IDxzdHJvbmc+c3VibWl0dGVkPC9zdHJvbmc+IHRoaXMgY2hhbmdlLjwvcD48cD48YSBo
cmVmPSJodHRwczovL2dlcnJpdC5vc21vY29tLm9yZy9jL29zbW8tdHRjbjMtaGFja3MvKy80MzI3
Mz91c3A9ZW1haWwiPlZpZXcgQ2hhbmdlPC9hPjwvcD48cHJlIHN0eWxlPSJmb250LWZhbWlseTog
bW9ub3NwYWNlLG1vbm9zcGFjZTsgd2hpdGUtc3BhY2U6IHByZS13cmFwOyI+PHNwYW4+PC9zcGFu
Pjxicj48c3Bhbj48L3NwYW4+PGJyPjxzcGFuPjYgaXMgdGhlIGxhdGVzdCBhcHByb3ZlZCBwYXRj
aC1zZXQuPC9zcGFuPjxicj48c3Bhbj5ObyBmaWxlcyB3ZXJlIGNoYW5nZWQgYmV0d2VlbiB0aGUg
bGF0ZXN0IGFwcHJvdmVkIHBhdGNoLXNldCBhbmQgdGhlIHN1Ym1pdHRlZCBvbmUuPC9zcGFuPjxi
cj48c3Bhbj48L3NwYW4+PGJyPjwvcHJlPjxkaXYgc3R5bGU9IndoaXRlLXNwYWNlOnByZS13cmFw
Ij5BcHByb3ZhbHM6CiAgZGV4dGVyOiBMb29rcyBnb29kIHRvIG1lLCBhcHByb3ZlZAogIEplbmtp
bnMgQnVpbGRlcjogVmVyaWZpZWQKICBvc21pdGg6IExvb2tzIGdvb2QgdG8gbWUsIGJ1dCBzb21l
b25lIGVsc2UgbXVzdCBhcHByb3ZlCgo8L2Rpdj48cHJlIGNsYXNzPSJibG9ja3MiIHN0eWxlPSJm
b250LWZhbWlseTogbW9ub3NwYWNlLG1vbm9zcGFjZTsgd2hpdGUtc3BhY2U6IHByZS13cmFwOyI+
SVBBZDogQWRkIHRlc3QgZm9yIGZ1bmN0aW9uIEVTMTBiLkdldENvbm5lY3Rpdml0eVBhcmFtZXRl
cnM8YnI+PGJyPlJlbGF0ZWQ6IFNZUyM4MTAxPGJyPkNoYW5nZS1JZDogSTQwMTBlMzI0ZjYxODI3
ZGM1ZDIzMGZjOTA3YWQ2ZDQ5ZTMxMjk3MzY8YnI+LS0tPGJyPk0gaXBhZC9JUEFkX1Rlc3RzLnR0
Y248YnI+TSBsaWJyYXJ5L2V1aWNjL1NHUDMyRGVmaW5pdGlvbnNfVGVtcGxhdGVzLnR0Y248YnI+
TSBsaWJyYXJ5L2V1aWNjL1NHUDMyRGVmaW5pdGlvbnNfVHlwZXMudHRjbjxicj4zIGZpbGVzIGNo
YW5nZWQsIDY3IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pPGJyPjxicj48L3ByZT4KPHBy
ZSBzdHlsZT0iZm9udC1mYW1pbHk6IG1vbm9zcGFjZSxtb25vc3BhY2U7IHdoaXRlLXNwYWNlOiBw
cmUtd3JhcDsiPjxzcGFuPmRpZmYgLS1naXQgYS9pcGFkL0lQQWRfVGVzdHMudHRjbiBiL2lwYWQv
SVBBZF9UZXN0cy50dGNuPC9zcGFuPjxicj48c3Bhbj5pbmRleCA3MGJlMzBkLi5jMmM1Mzg1IDEw
MDY0NDwvc3Bhbj48YnI+PHNwYW4+LS0tIGEvaXBhZC9JUEFkX1Rlc3RzLnR0Y248L3NwYW4+PGJy
PjxzcGFuPisrKyBiL2lwYWQvSVBBZF9UZXN0cy50dGNuPC9zcGFuPjxicj48c3Bhbj5AQCAtNDgw
LDYgKzQ4MCwxNCBAQDwvc3Bhbj48YnI+PHNwYW4+ICAgICAgICAgdW5tYXAoc2VsZjpQSVBFLCBz
eXN0ZW06UElQRSk7PC9zcGFuPjxicj48c3Bhbj4gfTwvc3Bhbj48YnI+PHNwYW4+IDwvc3Bhbj48
YnI+PHNwYW4gc3R5bGU9ImNvbG9yOiBoc2woMTIwLCAxMDAlLCA0MCUpOyI+Ky8qIEdyZXAgdGhy
b3VnaCBsb2cgZmlsZSBhbmQgZXhwZWN0IGdpdmVuIHBhdHRlcm4uPC9zcGFuPjxicj48c3BhbiBz
dHlsZT0iY29sb3I6IGhzbCgxMjAsIDEwMCUsIDQwJSk7Ij4rICogTm90ZTogUElQRWFzcCBkb2Vz
IG5vdCBhbGxvdyBxdW90ZXMsIHNvICYjMzk7c3RyaW5nJiMzOTsgbXVzdCBiZSBhIHN0cmluZyB3
aXRob3V0IHNwYWNlcy4gKi88L3NwYW4+PGJyPjxzcGFuIHN0eWxlPSJjb2xvcjogaHNsKDEyMCwg
MTAwJSwgNDAlKTsiPitwcml2YXRlIGZ1bmN0aW9uIGZfZXhwZWN0X2luX2xvZ2ZpbGUoY2hhcnN0
cmluZyBzdHJpbmcpIHJ1bnMgb24gSVBBZF9Db25uSGRsciB7PC9zcGFuPjxicj48c3BhbiBzdHls
ZT0iY29sb3I6IGhzbCgxMjAsIDEwMCUsIDQwJSk7Ij4rCW1hcChzZWxmOlBJUEUsIHN5c3RlbTpQ
SVBFKTs8L3NwYW4+PGJyPjxzcGFuIHN0eWxlPSJjb2xvcjogaHNsKDEyMCwgMTAwJSwgNDAlKTsi
PisJZl9QSVBFYXNwX2V4ZWNfc3luYyhQSVBFLCAmcXVvdDtncmVwICZxdW90OyAmYW1wOyBzdHJp
bmcgJmFtcDsgJnF1b3Q7IC90bXAvc2luZ2xlX2xvZyZxdW90OywgMCk7PC9zcGFuPjxicj48c3Bh
biBzdHlsZT0iY29sb3I6IGhzbCgxMjAsIDEwMCUsIDQwJSk7Ij4rICAgICAgICB1bm1hcChzZWxm
OlBJUEUsIHN5c3RlbTpQSVBFKTs8L3NwYW4+PGJyPjxzcGFuIHN0eWxlPSJjb2xvcjogaHNsKDEy
MCwgMTAwJSwgNDAlKTsiPit9PC9zcGFuPjxicj48c3BhbiBzdHlsZT0iY29sb3I6IGhzbCgxMjAs
IDEwMCUsIDQwJSk7Ij4rPC9zcGFuPjxicj48c3Bhbj4gLyogKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqICovPC9zcGFuPjxicj48c3Bhbj4gLyogKioqKioqKioq
KiBCRUxPVyBPTkxZIFRFU1RDQVNFUyEgKioqKioqKioqKioqICovPC9zcGFuPjxicj48c3Bhbj4g
LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovPC9zcGFu
Pjxicj48c3Bhbj5AQCAtODcyLDYgKzg4MCwzNCBAQDwvc3Bhbj48YnI+PHNwYW4+IAlzZXR2ZXJk
aWN0KHBhc3MpOzwvc3Bhbj48YnI+PHNwYW4+IH08L3NwYW4+PGJyPjxzcGFuPiA8L3NwYW4+PGJy
PjxzcGFuIHN0eWxlPSJjb2xvcjogaHNsKDEyMCwgMTAwJSwgNDAlKTsiPisvKiBBIHRlc3RjYXNl
IHRvIHRpZ2dlciB0aGUgJiMzOTtnZXQgY29ubmVjdGl2aXR5IHBhcmFtZXRlcnMmIzM5OyB2aWEg
RVMxMGIgaW50ZXJmYWNlICovPC9zcGFuPjxicj48c3BhbiBzdHlsZT0iY29sb3I6IGhzbCgxMjAs
IDEwMCUsIDQwJSk7Ij4rcHJpdmF0ZSBmdW5jdGlvbiBmX1RDX2Z1bmNfZ2V0X2Nvbm5fcGFyYW1z
KGNoYXJzdHJpbmcgaWQpIHJ1bnMgb24gSVBBZF9Db25uSGRsciB7PC9zcGFuPjxicj48c3BhbiBz
dHlsZT0iY29sb3I6IGhzbCgxMjAsIDEwMCUsIDQwJSk7Ij4rCWZfZXhlY19pcGFkKCZxdW90O2dl
dC1jb25uZWN0aXZpdHktcGFyYW1ldGVycyZxdW90Oyk7PC9zcGFuPjxicj48c3BhbiBzdHlsZT0i
Y29sb3I6IGhzbCgxMjAsIDEwMCUsIDQwJSk7Ij4rCWZfZXMxMHhfaW5pdChlaW1faW5pdCA6PSBm
YWxzZSk7PC9zcGFuPjxicj48c3BhbiBzdHlsZT0iY29sb3I6IGhzbCgxMjAsIDEwMCUsIDQwJSk7
Ij4rPC9zcGFuPjxicj48c3BhbiBzdHlsZT0iY29sb3I6IGhzbCgxMjAsIDEwMCUsIDQwJSk7Ij4r
CXZhciBvY3RldHN0cmluZyBhc24gOj0gZl92cGNkX3RyYW5zY2VpdmUoZW5jX0dldENvbm5lY3Rp
dml0eVBhcmFtZXRlcnNSZXNwb25zZSh2YWx1ZW9mKHRzX2dldENvbm5lY3Rpdml0eVBhcmFtZXRl
cnNSZXNwb25zZV9odHRwUGFyYW1zKCYjMzk7MTIzNDU2NzgmIzM5O08pKSksICYjMzk7JiMzOTtP
KTs8L3NwYW4+PGJyPjxzcGFuIHN0eWxlPSJjb2xvcjogaHNsKDEyMCwgMTAwJSwgNDAlKTsiPisJ
dmFyIEdldENvbm5lY3Rpdml0eVBhcmFtZXRlcnNSZXF1ZXN0IHJlcSA6PSBkZWNfR2V0Q29ubmVj
dGl2aXR5UGFyYW1ldGVyc1JlcXVlc3QoYXNuKTs8L3NwYW4+PGJyPjxzcGFuIHN0eWxlPSJjb2xv
cjogaHNsKDEyMCwgMTAwJSwgNDAlKTsiPisJaWYgKG5vdCBtYXRjaChyZXEsIHRyX2dldENvbm5l
Y3Rpdml0eVBhcmFtZXRlcnNSZXF1ZXN0KSkgezwvc3Bhbj48YnI+PHNwYW4gc3R5bGU9ImNvbG9y
OiBoc2woMTIwLCAxMDAlLCA0MCUpOyI+KwkJc2V0dmVyZGljdChmYWlsLCAmcXVvdDtVbmV4cGVj
dGVkIEVTMTBiIHJlcXVlc3Q6ICZxdW90OywgcmVxKTs8L3NwYW4+PGJyPjxzcGFuIHN0eWxlPSJj
b2xvcjogaHNsKDEyMCwgMTAwJSwgNDAlKTsiPisJfTwvc3Bhbj48YnI+PHNwYW4gc3R5bGU9ImNv
bG9yOiBoc2woMTIwLCAxMDAlLCA0MCUpOyI+Kzwvc3Bhbj48YnI+PHNwYW4gc3R5bGU9ImNvbG9y
OiBoc2woMTIwLCAxMDAlLCA0MCUpOyI+KwlmX2VzMTB4X2Nsb3NlKCk7PC9zcGFuPjxicj48c3Bh
biBzdHlsZT0iY29sb3I6IGhzbCgxMjAsIDEwMCUsIDQwJSk7Ij4rCWZfc3RvcF9pcGFkKCk7PC9z
cGFuPjxicj48c3BhbiBzdHlsZT0iY29sb3I6IGhzbCgxMjAsIDEwMCUsIDQwJSk7Ij4rPC9zcGFu
Pjxicj48c3BhbiBzdHlsZT0iY29sb3I6IGhzbCgxMjAsIDEwMCUsIDQwJSk7Ij4rCWZfZXhwZWN0
X2luX2xvZ2ZpbGUoJnF1b3Q7SFRUUC5wYXJhbW1zOi4xMjM0NTY3OCZxdW90Oyk7PC9zcGFuPjxi
cj48c3BhbiBzdHlsZT0iY29sb3I6IGhzbCgxMjAsIDEwMCUsIDQwJSk7Ij4rPC9zcGFuPjxicj48
c3BhbiBzdHlsZT0iY29sb3I6IGhzbCgxMjAsIDEwMCUsIDQwJSk7Ij4rCXNldHZlcmRpY3QocGFz
cyk7PC9zcGFuPjxicj48c3BhbiBzdHlsZT0iY29sb3I6IGhzbCgxMjAsIDEwMCUsIDQwJSk7Ij4r
fTwvc3Bhbj48YnI+PHNwYW4gc3R5bGU9ImNvbG9yOiBoc2woMTIwLCAxMDAlLCA0MCUpOyI+K3Rl
c3RjYXNlIFRDX2Z1bmNfZ2V0X2Nvbm5fcGFyYW1zKCkgcnVucyBvbiBNVENfQ1Qgezwvc3Bhbj48
YnI+PHNwYW4gc3R5bGU9ImNvbG9yOiBoc2woMTIwLCAxMDAlLCA0MCUpOyI+Kwl2YXIgY2hhcnN0
cmluZyBpZCA6PSB0ZXN0Y2FzZW5hbWUoKTs8L3NwYW4+PGJyPjxzcGFuIHN0eWxlPSJjb2xvcjog
aHNsKDEyMCwgMTAwJSwgNDAlKTsiPisJdmFyIElQQWRfQ29ubkhkbHJQYXJzIHBhcnMgOj0gZl9p
bml0X3BhcnMoKTs8L3NwYW4+PGJyPjxzcGFuIHN0eWxlPSJjb2xvcjogaHNsKDEyMCwgMTAwJSwg
NDAlKTsiPisJdmFyIElQQWRfQ29ubkhkbHIgdmNfY29ubjs8L3NwYW4+PGJyPjxzcGFuIHN0eWxl
PSJjb2xvcjogaHNsKDEyMCwgMTAwJSwgNDAlKTsiPisJZl9pbml0KGlkKTs8L3NwYW4+PGJyPjxz
cGFuIHN0eWxlPSJjb2xvcjogaHNsKDEyMCwgMTAwJSwgNDAlKTsiPisJdmNfY29ubiA6PSBmX3N0
YXJ0X2hhbmRsZXIocmVmZXJzKGZfVENfZnVuY19nZXRfY29ubl9wYXJhbXMpLCBwYXJzKTs8L3Nw
YW4+PGJyPjxzcGFuIHN0eWxlPSJjb2xvcjogaHNsKDEyMCwgMTAwJSwgNDAlKTsiPisJdmNfY29u
bi5kb25lOzwvc3Bhbj48YnI+PHNwYW4gc3R5bGU9ImNvbG9yOiBoc2woMTIwLCAxMDAlLCA0MCUp
OyI+KwlzZXR2ZXJkaWN0KHBhc3MpOzwvc3Bhbj48YnI+PHNwYW4gc3R5bGU9ImNvbG9yOiBoc2wo
MTIwLCAxMDAlLCA0MCUpOyI+K308L3NwYW4+PGJyPjxzcGFuIHN0eWxlPSJjb2xvcjogaHNsKDEy
MCwgMTAwJSwgNDAlKTsiPis8L3NwYW4+PGJyPjxzcGFuPiBjb250cm9sIHs8L3NwYW4+PGJyPjxz
cGFuPiAJZXhlY3V0ZSAoIFRDX3Byb2NfaW5kaXJlY3RfcHJmbGVfZHdubGQoKSApOzwvc3Bhbj48
YnI+PHNwYW4+IAlleGVjdXRlICggVENfcHJvY19ldWljY19wa2dfZHdubGRfZXhlYygpICk7PC9z
cGFuPjxicj48c3Bhbj5AQCAtODgyLDYgKzkxOCw3IEBAPC9zcGFuPjxicj48c3Bhbj4gCWV4ZWN1
dGUgKCBUQ19mdW5jX3JldF9mcm9tX2ZhbGxiYWNrKCkgKTs8L3NwYW4+PGJyPjxzcGFuPiAJZXhl
Y3V0ZSAoIFRDX2Z1bmNfZW5fZW1lcmdfcHJmbGUoKSApOzwvc3Bhbj48YnI+PHNwYW4+IAlleGVj
dXRlICggVENfZnVuY19kaXNfZW1lcmdfcHJmbGUoKSApOzwvc3Bhbj48YnI+PHNwYW4gc3R5bGU9
ImNvbG9yOiBoc2woMTIwLCAxMDAlLCA0MCUpOyI+KwlleGVjdXRlICggVENfZnVuY19nZXRfY29u
bl9wYXJhbXMoKSApOzwvc3Bhbj48YnI+PHNwYW4+IH08L3NwYW4+PGJyPjxzcGFuPiA8L3NwYW4+
PGJyPjxzcGFuPiB9PC9zcGFuPjxicj48c3Bhbj5kaWZmIC0tZ2l0IGEvbGlicmFyeS9ldWljYy9T
R1AzMkRlZmluaXRpb25zX1RlbXBsYXRlcy50dGNuIGIvbGlicmFyeS9ldWljYy9TR1AzMkRlZmlu
aXRpb25zX1RlbXBsYXRlcy50dGNuPC9zcGFuPjxicj48c3Bhbj5pbmRleCA3YzE0NjY3Li45MjY5
NmYxIDEwMDY0NDwvc3Bhbj48YnI+PHNwYW4+LS0tIGEvbGlicmFyeS9ldWljYy9TR1AzMkRlZmlu
aXRpb25zX1RlbXBsYXRlcy50dGNuPC9zcGFuPjxicj48c3Bhbj4rKysgYi9saWJyYXJ5L2V1aWNj
L1NHUDMyRGVmaW5pdGlvbnNfVGVtcGxhdGVzLnR0Y248L3NwYW4+PGJyPjxzcGFuPkBAIC0xNzAz
LDYgKzE3MDMsMjYgQEA8L3NwYW4+PGJyPjxzcGFuPiAJZGlzYWJsZUVtZXJnZW5jeVByb2ZpbGVS
ZXN1bHQgOj0gZXJyb3JDb2RlPC9zcGFuPjxicj48c3Bhbj4gfTwvc3Bhbj48YnI+PHNwYW4+IDwv
c3Bhbj48YnI+PHNwYW4gc3R5bGU9ImNvbG9yOiBoc2woMTIwLCAxMDAlLCA0MCUpOyI+Ky8qIEdT
TUEgU0dQLjMyLCBzZWN0aW9uIDUuOS4yNCAqLzwvc3Bhbj48YnI+PHNwYW4gc3R5bGU9ImNvbG9y
OiBoc2woMTIwLCAxMDAlLCA0MCUpOyI+K3RlbXBsYXRlIChwcmVzZW50KSBHZXRDb25uZWN0aXZp
dHlQYXJhbWV0ZXJzUmVxdWVzdDwvc3Bhbj48YnI+PHNwYW4gc3R5bGU9ImNvbG9yOiBoc2woMTIw
LCAxMDAlLCA0MCUpOyI+K3RyX2dldENvbm5lY3Rpdml0eVBhcmFtZXRlcnNSZXF1ZXN0IDo9IHs8
L3NwYW4+PGJyPjxzcGFuIHN0eWxlPSJjb2xvcjogaHNsKDEyMCwgMTAwJSwgNDAlKTsiPit9PC9z
cGFuPjxicj48c3BhbiBzdHlsZT0iY29sb3I6IGhzbCgxMjAsIDEwMCUsIDQwJSk7Ij4rdGVtcGxh
dGUgKHZhbHVlKSBHZXRDb25uZWN0aXZpdHlQYXJhbWV0ZXJzUmVxdWVzdDwvc3Bhbj48YnI+PHNw
YW4gc3R5bGU9ImNvbG9yOiBoc2woMTIwLCAxMDAlLCA0MCUpOyI+K3RzX2dldENvbm5lY3Rpdml0
eVBhcmFtZXRlcnNSZXF1ZXN0IDo9IHs8L3NwYW4+PGJyPjxzcGFuIHN0eWxlPSJjb2xvcjogaHNs
KDEyMCwgMTAwJSwgNDAlKTsiPit9PC9zcGFuPjxicj48c3BhbiBzdHlsZT0iY29sb3I6IGhzbCgx
MjAsIDEwMCUsIDQwJSk7Ij4rdGVtcGxhdGUgKHByZXNlbnQpIEdldENvbm5lY3Rpdml0eVBhcmFt
ZXRlcnNSZXNwb25zZTwvc3Bhbj48YnI+PHNwYW4gc3R5bGU9ImNvbG9yOiBoc2woMTIwLCAxMDAl
LCA0MCUpOyI+K3RyX2dldENvbm5lY3Rpdml0eVBhcmFtZXRlcnNSZXNwb25zZV9odHRwUGFyYW1z
KHRlbXBsYXRlIG9jdGV0c3RyaW5nIGh0dHBQYXJhbXMgOj0gKikgOj0gezwvc3Bhbj48YnI+PHNw
YW4gc3R5bGU9ImNvbG9yOiBoc2woMTIwLCAxMDAlLCA0MCUpOyI+Kwljb25uZWN0aXZpdHlQYXJh
bWV0ZXJzIDo9IHs8L3NwYW4+PGJyPjxzcGFuIHN0eWxlPSJjb2xvcjogaHNsKDEyMCwgMTAwJSwg
NDAlKTsiPisJCWh0dHBQYXJhbXMgOj0gaHR0cFBhcmFtczwvc3Bhbj48YnI+PHNwYW4gc3R5bGU9
ImNvbG9yOiBoc2woMTIwLCAxMDAlLCA0MCUpOyI+Kwl9PC9zcGFuPjxicj48c3BhbiBzdHlsZT0i
Y29sb3I6IGhzbCgxMjAsIDEwMCUsIDQwJSk7Ij4rfTwvc3Bhbj48YnI+PHNwYW4gc3R5bGU9ImNv
bG9yOiBoc2woMTIwLCAxMDAlLCA0MCUpOyI+K3RlbXBsYXRlICh2YWx1ZSkgR2V0Q29ubmVjdGl2
aXR5UGFyYW1ldGVyc1Jlc3BvbnNlPC9zcGFuPjxicj48c3BhbiBzdHlsZT0iY29sb3I6IGhzbCgx
MjAsIDEwMCUsIDQwJSk7Ij4rdHNfZ2V0Q29ubmVjdGl2aXR5UGFyYW1ldGVyc1Jlc3BvbnNlX2h0
dHBQYXJhbXModGVtcGxhdGUgKG9taXQpIG9jdGV0c3RyaW5nIGh0dHBQYXJhbXMgOj0gb21pdCkg
Oj0gezwvc3Bhbj48YnI+PHNwYW4gc3R5bGU9ImNvbG9yOiBoc2woMTIwLCAxMDAlLCA0MCUpOyI+
Kwljb25uZWN0aXZpdHlQYXJhbWV0ZXJzIDo9IHs8L3NwYW4+PGJyPjxzcGFuIHN0eWxlPSJjb2xv
cjogaHNsKDEyMCwgMTAwJSwgNDAlKTsiPisJCWh0dHBQYXJhbXMgOj0gaHR0cFBhcmFtczwvc3Bh
bj48YnI+PHNwYW4gc3R5bGU9ImNvbG9yOiBoc2woMTIwLCAxMDAlLCA0MCUpOyI+Kwl9PC9zcGFu
Pjxicj48c3BhbiBzdHlsZT0iY29sb3I6IGhzbCgxMjAsIDEwMCUsIDQwJSk7Ij4rfTwvc3Bhbj48
YnI+PHNwYW4gc3R5bGU9ImNvbG9yOiBoc2woMTIwLCAxMDAlLCA0MCUpOyI+Kzwvc3Bhbj48YnI+
PHNwYW4+IC8qIEdTTUEgU0dQLjMyLCBzZWN0aW9uIDUuOS40ICovPC9zcGFuPjxicj48c3Bhbj4g
dGVtcGxhdGUgKHByZXNlbnQpIEFkZEluaXRpYWxFaW1SZXNwb25zZTwvc3Bhbj48YnI+PHNwYW4+
IHRyX2FkZEluaXRpYWxFaW1SZXNwb25zZSA6PSB7PC9zcGFuPjxicj48c3Bhbj5kaWZmIC0tZ2l0
IGEvbGlicmFyeS9ldWljYy9TR1AzMkRlZmluaXRpb25zX1R5cGVzLnR0Y24gYi9saWJyYXJ5L2V1
aWNjL1NHUDMyRGVmaW5pdGlvbnNfVHlwZXMudHRjbjwvc3Bhbj48YnI+PHNwYW4+aW5kZXggMmY5
ZGUyYS4uODJmOTA4ZiAxMDA2NDQ8L3NwYW4+PGJyPjxzcGFuPi0tLSBhL2xpYnJhcnkvZXVpY2Mv
U0dQMzJEZWZpbml0aW9uc19UeXBlcy50dGNuPC9zcGFuPjxicj48c3Bhbj4rKysgYi9saWJyYXJ5
L2V1aWNjL1NHUDMyRGVmaW5pdGlvbnNfVHlwZXMudHRjbjwvc3Bhbj48YnI+PHNwYW4+QEAgLTg4
LDQgKzg4LDE0IEBAPC9zcGFuPjxicj48c3Bhbj4gZXh0ZXJuYWwgZnVuY3Rpb24gZW5jX0Rpc2Fi
bGVFbWVyZ2VuY3lQcm9maWxlUmVzcG9uc2UoaW4gRGlzYWJsZUVtZXJnZW5jeVByb2ZpbGVSZXNw
b25zZSBtc2cpIHJldHVybiBvY3RldHN0cmluZzwvc3Bhbj48YnI+PHNwYW4+IHdpdGggeyBleHRl
bnNpb24gJnF1b3Q7cHJvdG90eXBlKGNvbnZlcnQpIGVuY29kZShCRVI6QkVSX0VOQ09ERV9ERVIp
JnF1b3Q7IH07PC9zcGFuPjxicj48c3Bhbj4gPC9zcGFuPjxicj48c3BhbiBzdHlsZT0iY29sb3I6
IGhzbCgxMjAsIDEwMCUsIDQwJSk7Ij4rZXh0ZXJuYWwgZnVuY3Rpb24gZGVjX0dldENvbm5lY3Rp
dml0eVBhcmFtZXRlcnNSZXF1ZXN0KGluIG9jdGV0c3RyaW5nIHN0cmVhbSkgcmV0dXJuIEdldENv
bm5lY3Rpdml0eVBhcmFtZXRlcnNSZXF1ZXN0PC9zcGFuPjxicj48c3BhbiBzdHlsZT0iY29sb3I6
IGhzbCgxMjAsIDEwMCUsIDQwJSk7Ij4rd2l0aCB7IGV4dGVuc2lvbiAmcXVvdDtwcm90b3R5cGUo
Y29udmVydCkgZGVjb2RlKEJFUjpCRVJfQUNDRVBUX0FMTCkmcXVvdDsgfTs8L3NwYW4+PGJyPjxz
cGFuIHN0eWxlPSJjb2xvcjogaHNsKDEyMCwgMTAwJSwgNDAlKTsiPitleHRlcm5hbCBmdW5jdGlv
biBlbmNfR2V0Q29ubmVjdGl2aXR5UGFyYW1ldGVyc1JlcXVlc3QoaW4gR2V0Q29ubmVjdGl2aXR5
UGFyYW1ldGVyc1JlcXVlc3QgbXNnKSByZXR1cm4gb2N0ZXRzdHJpbmc8L3NwYW4+PGJyPjxzcGFu
IHN0eWxlPSJjb2xvcjogaHNsKDEyMCwgMTAwJSwgNDAlKTsiPit3aXRoIHsgZXh0ZW5zaW9uICZx
dW90O3Byb3RvdHlwZShjb252ZXJ0KSBlbmNvZGUoQkVSOkJFUl9FTkNPREVfREVSKSZxdW90OyB9
Ozwvc3Bhbj48YnI+PHNwYW4gc3R5bGU9ImNvbG9yOiBoc2woMTIwLCAxMDAlLCA0MCUpOyI+Kzwv
c3Bhbj48YnI+PHNwYW4gc3R5bGU9ImNvbG9yOiBoc2woMTIwLCAxMDAlLCA0MCUpOyI+K2V4dGVy
bmFsIGZ1bmN0aW9uIGRlY19HZXRDb25uZWN0aXZpdHlQYXJhbWV0ZXJzUmVzcG9uc2UoaW4gb2N0
ZXRzdHJpbmcgc3RyZWFtKSByZXR1cm4gR2V0Q29ubmVjdGl2aXR5UGFyYW1ldGVyc1Jlc3BvbnNl
PC9zcGFuPjxicj48c3BhbiBzdHlsZT0iY29sb3I6IGhzbCgxMjAsIDEwMCUsIDQwJSk7Ij4rd2l0
aCB7IGV4dGVuc2lvbiAmcXVvdDtwcm90b3R5cGUoY29udmVydCkgZGVjb2RlKEJFUjpCRVJfQUND
RVBUX0FMTCkmcXVvdDsgfTs8L3NwYW4+PGJyPjxzcGFuIHN0eWxlPSJjb2xvcjogaHNsKDEyMCwg
MTAwJSwgNDAlKTsiPitleHRlcm5hbCBmdW5jdGlvbiBlbmNfR2V0Q29ubmVjdGl2aXR5UGFyYW1l
dGVyc1Jlc3BvbnNlKGluIEdldENvbm5lY3Rpdml0eVBhcmFtZXRlcnNSZXNwb25zZSBtc2cpIHJl
dHVybiBvY3RldHN0cmluZzwvc3Bhbj48YnI+PHNwYW4gc3R5bGU9ImNvbG9yOiBoc2woMTIwLCAx
MDAlLCA0MCUpOyI+K3dpdGggeyBleHRlbnNpb24gJnF1b3Q7cHJvdG90eXBlKGNvbnZlcnQpIGVu
Y29kZShCRVI6QkVSX0VOQ09ERV9ERVIpJnF1b3Q7IH07PC9zcGFuPjxicj48c3BhbiBzdHlsZT0i
Y29sb3I6IGhzbCgxMjAsIDEwMCUsIDQwJSk7Ij4rPC9zcGFuPjxicj48c3Bhbj4gfTwvc3Bhbj48
YnI+PHNwYW4+PC9zcGFuPjxicj48L3ByZT48cD5UbyB2aWV3LCB2aXNpdCA8YSBocmVmPSJodHRw
czovL2dlcnJpdC5vc21vY29tLm9yZy9jL29zbW8tdHRjbjMtaGFja3MvKy80MzI3Mz91c3A9ZW1h
aWwiPmNoYW5nZSA0MzI3MzwvYT4uIFRvIHVuc3Vic2NyaWJlLCBvciBmb3IgaGVscCB3cml0aW5n
IG1haWwgZmlsdGVycywgdmlzaXQgPGEgaHJlZj0iaHR0cHM6Ly9nZXJyaXQub3Ntb2NvbS5vcmcv
c2V0dGluZ3M/dXNwPWVtYWlsIj5zZXR0aW5nczwvYT4uPC9wPjxkaXYgaXRlbXNjb3BlIGl0ZW10
eXBlPSJodHRwOi8vc2NoZW1hLm9yZy9FbWFpbE1lc3NhZ2UiPjxkaXYgaXRlbXNjb3BlIGl0ZW1w
cm9wPSJhY3Rpb24iIGl0ZW10eXBlPSJodHRwOi8vc2NoZW1hLm9yZy9WaWV3QWN0aW9uIj48bGlu
ayBpdGVtcHJvcD0idXJsIiBocmVmPSJodHRwczovL2dlcnJpdC5vc21vY29tLm9yZy9jL29zbW8t
dHRjbjMtaGFja3MvKy80MzI3Mz91c3A9ZW1haWwiLz48bWV0YSBpdGVtcHJvcD0ibmFtZSIgY29u
dGVudD0iVmlldyBDaGFuZ2UiLz48L2Rpdj48L2Rpdj4KCjxkaXYgc3R5bGU9ImRpc3BsYXk6bm9u
ZSI+IEdlcnJpdC1NZXNzYWdlVHlwZTogbWVyZ2VkIDwvZGl2Pgo8ZGl2IHN0eWxlPSJkaXNwbGF5
Om5vbmUiPiBHZXJyaXQtUHJvamVjdDogb3Ntby10dGNuMy1oYWNrcyA8L2Rpdj4KPGRpdiBzdHls
ZT0iZGlzcGxheTpub25lIj4gR2Vycml0LUJyYW5jaDogbWFzdGVyIDwvZGl2Pgo8ZGl2IHN0eWxl
PSJkaXNwbGF5Om5vbmUiPiBHZXJyaXQtQ2hhbmdlLUlkOiBJNDAxMGUzMjRmNjE4MjdkYzVkMjMw
ZmM5MDdhZDZkNDllMzEyOTczNiA8L2Rpdj4KPGRpdiBzdHlsZT0iZGlzcGxheTpub25lIj4gR2Vy
cml0LUNoYW5nZS1OdW1iZXI6IDQzMjczIDwvZGl2Pgo8ZGl2IHN0eWxlPSJkaXNwbGF5Om5vbmUi
PiBHZXJyaXQtUGF0Y2hTZXQ6IDcgPC9kaXY+CjxkaXYgc3R5bGU9ImRpc3BsYXk6bm9uZSI+IEdl
cnJpdC1Pd25lcjogam9sbHkgJmx0O2FuZHJlYXNAZXZlcnNiZXJnLmV1Jmd0OyA8L2Rpdj4KPGRp
diBzdHlsZT0iZGlzcGxheTpub25lIj4gR2Vycml0LVJldmlld2VyOiBKZW5raW5zIEJ1aWxkZXIg
PC9kaXY+CjxkaXYgc3R5bGU9ImRpc3BsYXk6bm9uZSI+IEdlcnJpdC1SZXZpZXdlcjogZGV4dGVy
ICZsdDtwbWFpZXJAc3lzbW9jb20uZGUmZ3Q7IDwvZGl2Pgo8ZGl2IHN0eWxlPSJkaXNwbGF5Om5v
bmUiPiBHZXJyaXQtUmV2aWV3ZXI6IGpvbGx5ICZsdDthbmRyZWFzQGV2ZXJzYmVyZy5ldSZndDsg
PC9kaXY+CjxkaXYgc3R5bGU9ImRpc3BsYXk6bm9uZSI+IEdlcnJpdC1SZXZpZXdlcjogbGFmb3Jn
ZSAmbHQ7bGFmb3JnZUBvc21vY29tLm9yZyZndDsgPC9kaXY+CjxkaXYgc3R5bGU9ImRpc3BsYXk6
bm9uZSI+IEdlcnJpdC1SZXZpZXdlcjogb3NtaXRoICZsdDtvc21pdGhAc3lzbW9jb20uZGUmZ3Q7
IDwvZGl2PgoKPC9ib2R5PjwvaHRtbD4=

--===============1683655690890642989==--


