From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 01A5821A0483A for ; Thu, 6 Apr 2017 15:46:20 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 67E6D61B8D; Thu, 6 Apr 2017 22:46:20 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 67E6D61B8D Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=lersek@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 67E6D61B8D Received: from lacos-laptop-7.usersys.redhat.com (ovpn-116-84.phx2.redhat.com [10.3.116.84]) by smtp.corp.redhat.com (Postfix) with ESMTP id 534F317D67; Thu, 6 Apr 2017 22:46:19 +0000 (UTC) From: Laszlo Ersek To: Peter Hornyack References: Cc: edk2-devel@lists.01.org Message-ID: <98692150-a0be-5735-8452-3f316008f8c7@redhat.com> Date: Fri, 7 Apr 2017 00:46:18 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Thu, 06 Apr 2017 22:46:20 +0000 (UTC) Subject: Re: Pull in pre-built library during edk2 build? X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 06 Apr 2017 22:46:21 -0000 X-Groupsio-MsgNum: 9732 Content-Type: multipart/mixed; boundary="------------A2059EAB03CADEDC6631850F" --------------A2059EAB03CADEDC6631850F Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit On 04/06/17 20:07, Peter Hornyack wrote: > I'd like to make an adjustment to the edk2 build (locally, not for > upstream) and I'm hoping someone can offer some guidance. > > My goal is to pre-build an edk2 library in a separate build process, > then pull that library into the full build later on. Specifically I'm > building my firmware image using OvmfPkgX64.dsc, but I want to build > OpensslLib (CryptoPkg/Library/OpensslLib/OpensslLib.inf) in advance, > then pull the resulting lib into the full build later. How can I > achieve this? > > In my build output I can see that when OpensslLib.inf is built, all of > the openssl .c files are compiled into .obj files, then an ar command > wraps those up into OpensslLib.lib. I want to pull those steps out and > pre-build OpensslLib.lib, but I've been unable to find where/how the > edk2 build grabs that .lib file and turns it into the final firmware > image. I've reviewed the edk2 build documentation but still can't > figure this out. Can anyone point me to the right place in the edk2 > build files where I can make this happen? Or perhaps is there an > example of this already in the edk2 build that I can imitate? (1) Apply the attached patch OvmfPkg: add USE_EXTERNAL_OPENSSL for external, binary OpenSSL in your edk2 clone. (Don't forget to pass --keep-cr to git-am.) (2) Create a new directory somewhere, initialize it as a git repository, and apply the attached patch ExternalSslPkg: create INF files for OpensslLib binaries in it: export EXTERNAL_OPENSSL_DIR=... mkdir -pv -- "$EXTERNAL_OPENSSL_DIR" cd "$EXTERNAL_OPENSSL_DIR" git init git am --keep-cr ... (3) Set another variable (customize as necessary): export TOOLCHAIN=GCC48 (4) Go to your normal edk2 clone, and run the following commands, for initially building the OpenSSL binaries only, and installing them. This assumes that OpenSSL has been embedded in the edk2 tree, as directed by CryptoPkg/Library/OpensslLib/OpenSSL-HOWTO.txt This step has to be done only once. ( ARCH_ID=(IA32 X64) ARCH_NAME=(Ia32 X64) SSL_FLAVOR=("" Crypto) SSL_TLS=(TRUE FALSE) SSLD=CryptoPkg/Library/OpensslLib source edksetup.sh set -e -u -C -x make -C "$EDK_TOOLS_PATH" for TARGET in DEBUG NOOPT RELEASE; do for ((ARCH_IDX=0; ARCH_IDX < ${#ARCH_ID[@]}; ARCH_IDX++)); do for ((SSL_IDX=0; SSL_IDX < ${#SSL_FLAVOR[@]}; SSL_IDX++)); do build \ --arch="${ARCH_ID[ARCH_IDX]}" \ --platform="OvmfPkg/OvmfPkg${ARCH_NAME[ARCH_IDX]}.dsc" \ --module="$SSLD/OpensslLib${SSL_FLAVOR[SSL_IDX]}.inf" \ --buildtarget="$TARGET" \ --tagname="$TOOLCHAIN" \ --define=TLS_ENABLE="${SSL_TLS[SSL_IDX]}" LIBF="Build/Ovmf${ARCH_NAME[ARCH_IDX]}/${TARGET}_${TOOLCHAIN}" LIBF="$LIBF/${ARCH_ID[ARCH_IDX]}" LIBF="$LIBF/$SSLD/OpensslLib${SSL_FLAVOR[SSL_IDX]}" LIBF="$LIBF/OUTPUT/OpensslLib${SSL_FLAVOR[SSL_IDX]}.lib" DSTF="$EXTERNAL_OPENSSL_DIR/ExternalSslPkg/Library/OpensslLib" DSTF="$DSTF/$TARGET/${ARCH_ID[ARCH_IDX]}" DSTF="$DSTF/OpensslLib${SSL_FLAVOR[SSL_IDX]}.lib" install -m 0644 -D -- "$LIBF" "$DSTF" done done done rm -r Build ) At the end of this step, the binaries will be available under $EXTERNAL_OPENSSL_DIR, in addition to the INF files from step (2): ExternalSslPkg/Library/OpensslLib/DEBUG/IA32/OpensslLib.lib ExternalSslPkg/Library/OpensslLib/DEBUG/IA32/OpensslLibCrypto.lib ExternalSslPkg/Library/OpensslLib/DEBUG/X64/OpensslLib.lib ExternalSslPkg/Library/OpensslLib/DEBUG/X64/OpensslLibCrypto.lib ExternalSslPkg/Library/OpensslLib/NOOPT/IA32/OpensslLib.lib ExternalSslPkg/Library/OpensslLib/NOOPT/IA32/OpensslLibCrypto.lib ExternalSslPkg/Library/OpensslLib/NOOPT/X64/OpensslLib.lib ExternalSslPkg/Library/OpensslLib/NOOPT/X64/OpensslLibCrypto.lib ExternalSslPkg/Library/OpensslLib/OpensslLibBin.inf ExternalSslPkg/Library/OpensslLib/OpensslLibBinCrypto.inf ExternalSslPkg/Library/OpensslLib/RELEASE/IA32/OpensslLib.lib ExternalSslPkg/Library/OpensslLib/RELEASE/IA32/OpensslLibCrypto.lib ExternalSslPkg/Library/OpensslLib/RELEASE/X64/OpensslLib.lib ExternalSslPkg/Library/OpensslLib/RELEASE/X64/OpensslLibCrypto.lib If you wish, you can add and commit the lib files to the repository, or save them for later by other means. Either case they have to stick together with the INF files. (5) Now build OVMF against the external libraries. For this, we use PACKAGES_PATH (see ). Also note -D USE_EXTERNAL_OPENSSL in COMMON_OPTS, which utilizes the patch from step (1). This step can be repeated as many times as necessary. Two builds are included below as examples. ( export PACKAGES_PATH="$EXTERNAL_OPENSSL_DIR" source edksetup.sh COMMON_OPTS="-t GCC48 -n 12 -D USE_EXTERNAL_OPENSSL -D SMM_REQUIRE" COMMON_OPTS="$COMMON_OPTS -D SECURE_BOOT_ENABLE -D HTTP_BOOT_ENABLE" build $COMMON_OPTS \ -a IA32 -p OvmfPkg/OvmfPkgIa32.dsc \ -b NOOPT build $COMMON_OPTS \ -a IA32 -a X64 -p OvmfPkg/OvmfPkgIa32X64.dsc \ -D TLS_ENABLE \ -b DEBUG ) Thanks Laszlo --------------A2059EAB03CADEDC6631850F Content-Type: text/x-patch; name="0001-OvmfPkg-add-USE_EXTERNAL_OPENSSL-for-external-binary.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="0001-OvmfPkg-add-USE_EXTERNAL_OPENSSL-for-external-binary.pa"; filename*1="tch" RnJvbSBiZDdmZWNiNTI2ZmJhODQ5Y2QwZmIwNzAyZjI2MTRmZTYwNjQ5ODM2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRoYXQuY29tPgpEYXRl OiBUaHUsIDYgQXByIDIwMTcgMjI6MjM6MzUgKzAyMDAKU3ViamVjdDogW1BBVENIXSBPdm1mUGtn OiBhZGQgVVNFX0VYVEVSTkFMX09QRU5TU0wgZm9yIGV4dGVybmFsLCBiaW5hcnkKIE9wZW5TU0wK CkNvbnRyaWJ1dGVkLXVuZGVyOiBUaWFub0NvcmUgQ29udHJpYnV0aW9uIEFncmVlbWVudCAxLjAK U2lnbmVkLW9mZi1ieTogTGFzemxvIEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNvbT4KLS0tCiBPdm1m UGtnL092bWZQa2dJYTMyLmRzYyAgICB8IDggKysrKysrKysKIE92bWZQa2cvT3ZtZlBrZ0lhMzJY NjQuZHNjIHwgOCArKysrKysrKwogT3ZtZlBrZy9Pdm1mUGtnWDY0LmRzYyAgICAgfCA4ICsrKysr KysrCiAzIGZpbGVzIGNoYW5nZWQsIDI0IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9Pdm1m UGtnL092bWZQa2dJYTMyLmRzYyBiL092bWZQa2cvT3ZtZlBrZ0lhMzIuZHNjCmluZGV4IDZmNTE1 YzlhYTFhYS4uMWViNjM1YTY4MjUwIDEwMDY0NAotLS0gYS9Pdm1mUGtnL092bWZQa2dJYTMyLmRz YworKysgYi9Pdm1mUGtnL092bWZQa2dJYTMyLmRzYwpAQCAtMTQ1LDExICsxNDUsMTkgQEAgW0xp YnJhcnlDbGFzc2VzXQogICBEZWJ1Z1ByaW50RXJyb3JMZXZlbExpYnxNZGVQa2cvTGlicmFyeS9C YXNlRGVidWdQcmludEVycm9yTGV2ZWxMaWIvQmFzZURlYnVnUHJpbnRFcnJvckxldmVsTGliLmlu Zg0KIA0KICAgSW50cmluc2ljTGlifENyeXB0b1BrZy9MaWJyYXJ5L0ludHJpbnNpY0xpYi9JbnRy aW5zaWNMaWIuaW5mDQorIWlmZGVmICQoVVNFX0VYVEVSTkFMX09QRU5TU0wpDQorIWlmICQoVExT X0VOQUJMRSkgPT0gVFJVRQ0KKyAgT3BlbnNzbExpYnxFeHRlcm5hbFNzbFBrZy9MaWJyYXJ5L09w ZW5zc2xMaWIvT3BlbnNzbExpYkJpbi5pbmYNCishZWxzZQ0KKyAgT3BlbnNzbExpYnxFeHRlcm5h bFNzbFBrZy9MaWJyYXJ5L09wZW5zc2xMaWIvT3BlbnNzbExpYkJpbkNyeXB0by5pbmYNCishZW5k aWYNCishZWxzZQ0KICFpZiAkKFRMU19FTkFCTEUpID09IFRSVUUNCiAgIE9wZW5zc2xMaWJ8Q3J5 cHRvUGtnL0xpYnJhcnkvT3BlbnNzbExpYi9PcGVuc3NsTGliLmluZg0KICFlbHNlDQogICBPcGVu c3NsTGlifENyeXB0b1BrZy9MaWJyYXJ5L09wZW5zc2xMaWIvT3BlbnNzbExpYkNyeXB0by5pbmYN CiAhZW5kaWYNCishZW5kaWYNCiANCiAhaWYgJChTRUNVUkVfQk9PVF9FTkFCTEUpID09IFRSVUUN CiAgIFBsYXRmb3JtU2VjdXJlTGlifE92bWZQa2cvTGlicmFyeS9QbGF0Zm9ybVNlY3VyZUxpYi9Q bGF0Zm9ybVNlY3VyZUxpYi5pbmYNCmRpZmYgLS1naXQgYS9Pdm1mUGtnL092bWZQa2dJYTMyWDY0 LmRzYyBiL092bWZQa2cvT3ZtZlBrZ0lhMzJYNjQuZHNjCmluZGV4IDdkMTY3NmQxMjJiNy4uMDZk MjlhNzMzMTNmIDEwMDY0NAotLS0gYS9Pdm1mUGtnL092bWZQa2dJYTMyWDY0LmRzYworKysgYi9P dm1mUGtnL092bWZQa2dJYTMyWDY0LmRzYwpAQCAtMTUwLDExICsxNTAsMTkgQEAgW0xpYnJhcnlD bGFzc2VzXQogICBEZWJ1Z1ByaW50RXJyb3JMZXZlbExpYnxNZGVQa2cvTGlicmFyeS9CYXNlRGVi dWdQcmludEVycm9yTGV2ZWxMaWIvQmFzZURlYnVnUHJpbnRFcnJvckxldmVsTGliLmluZg0KIA0K ICAgSW50cmluc2ljTGlifENyeXB0b1BrZy9MaWJyYXJ5L0ludHJpbnNpY0xpYi9JbnRyaW5zaWNM aWIuaW5mDQorIWlmZGVmICQoVVNFX0VYVEVSTkFMX09QRU5TU0wpDQorIWlmICQoVExTX0VOQUJM RSkgPT0gVFJVRQ0KKyAgT3BlbnNzbExpYnxFeHRlcm5hbFNzbFBrZy9MaWJyYXJ5L09wZW5zc2xM aWIvT3BlbnNzbExpYkJpbi5pbmYNCishZWxzZQ0KKyAgT3BlbnNzbExpYnxFeHRlcm5hbFNzbFBr Zy9MaWJyYXJ5L09wZW5zc2xMaWIvT3BlbnNzbExpYkJpbkNyeXB0by5pbmYNCishZW5kaWYNCish ZWxzZQ0KICFpZiAkKFRMU19FTkFCTEUpID09IFRSVUUNCiAgIE9wZW5zc2xMaWJ8Q3J5cHRvUGtn L0xpYnJhcnkvT3BlbnNzbExpYi9PcGVuc3NsTGliLmluZg0KICFlbHNlDQogICBPcGVuc3NsTGli fENyeXB0b1BrZy9MaWJyYXJ5L09wZW5zc2xMaWIvT3BlbnNzbExpYkNyeXB0by5pbmYNCiAhZW5k aWYNCishZW5kaWYNCiANCiAhaWYgJChTRUNVUkVfQk9PVF9FTkFCTEUpID09IFRSVUUNCiAgIFBs YXRmb3JtU2VjdXJlTGlifE92bWZQa2cvTGlicmFyeS9QbGF0Zm9ybVNlY3VyZUxpYi9QbGF0Zm9y bVNlY3VyZUxpYi5pbmYNCmRpZmYgLS1naXQgYS9Pdm1mUGtnL092bWZQa2dYNjQuZHNjIGIvT3Zt ZlBrZy9Pdm1mUGtnWDY0LmRzYwppbmRleCBmMjg4YzhjOTg1MzYuLjk0YjcwMjkwZmNmNyAxMDA2 NDQKLS0tIGEvT3ZtZlBrZy9Pdm1mUGtnWDY0LmRzYworKysgYi9Pdm1mUGtnL092bWZQa2dYNjQu ZHNjCkBAIC0xNTAsMTEgKzE1MCwxOSBAQCBbTGlicmFyeUNsYXNzZXNdCiAgIERlYnVnUHJpbnRF cnJvckxldmVsTGlifE1kZVBrZy9MaWJyYXJ5L0Jhc2VEZWJ1Z1ByaW50RXJyb3JMZXZlbExpYi9C YXNlRGVidWdQcmludEVycm9yTGV2ZWxMaWIuaW5mDQogDQogICBJbnRyaW5zaWNMaWJ8Q3J5cHRv UGtnL0xpYnJhcnkvSW50cmluc2ljTGliL0ludHJpbnNpY0xpYi5pbmYNCishaWZkZWYgJChVU0Vf RVhURVJOQUxfT1BFTlNTTCkNCishaWYgJChUTFNfRU5BQkxFKSA9PSBUUlVFDQorICBPcGVuc3Ns TGlifEV4dGVybmFsU3NsUGtnL0xpYnJhcnkvT3BlbnNzbExpYi9PcGVuc3NsTGliQmluLmluZg0K KyFlbHNlDQorICBPcGVuc3NsTGlifEV4dGVybmFsU3NsUGtnL0xpYnJhcnkvT3BlbnNzbExpYi9P cGVuc3NsTGliQmluQ3J5cHRvLmluZg0KKyFlbmRpZg0KKyFlbHNlDQogIWlmICQoVExTX0VOQUJM RSkgPT0gVFJVRQ0KICAgT3BlbnNzbExpYnxDcnlwdG9Qa2cvTGlicmFyeS9PcGVuc3NsTGliL09w ZW5zc2xMaWIuaW5mDQogIWVsc2UNCiAgIE9wZW5zc2xMaWJ8Q3J5cHRvUGtnL0xpYnJhcnkvT3Bl bnNzbExpYi9PcGVuc3NsTGliQ3J5cHRvLmluZg0KICFlbmRpZg0KKyFlbmRpZg0KIA0KICFpZiAk KFNFQ1VSRV9CT09UX0VOQUJMRSkgPT0gVFJVRQ0KICAgUGxhdGZvcm1TZWN1cmVMaWJ8T3ZtZlBr Zy9MaWJyYXJ5L1BsYXRmb3JtU2VjdXJlTGliL1BsYXRmb3JtU2VjdXJlTGliLmluZg0KLS0gCjIu OS4zCgo= --------------A2059EAB03CADEDC6631850F Content-Type: text/x-patch; name="0001-ExternalSslPkg-create-INF-files-for-OpensslLib-binar.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="0001-ExternalSslPkg-create-INF-files-for-OpensslLib-binar.pa"; filename*1="tch" RnJvbSA0NjcyYTAyN2Y1NGM1NDU3NDEyOWY5YzljYzk0N2M4MGY3YmM0ZDlmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRoYXQuY29tPgpEYXRl OiBUaHUsIDYgQXByIDIwMTcgMjI6NTY6MDQgKzAyMDAKU3ViamVjdDogW1BBVENIXSBFeHRlcm5h bFNzbFBrZzogY3JlYXRlIElORiBmaWxlcyBmb3IgT3BlbnNzbExpYiBiaW5hcmllcwoKU2lnbmVk LW9mZi1ieTogTGFzemxvIEVyc2VrCi0tLQogLi4uL0xpYnJhcnkvT3BlbnNzbExpYi9PcGVuc3Ns TGliQmluLmluZiAgICAgICAgICAgfCAzMyArKysrKysrKysrKysrKysrKysrKysrCiAuLi4vTGli cmFyeS9PcGVuc3NsTGliL09wZW5zc2xMaWJCaW5DcnlwdG8uaW5mICAgICB8IDMzICsrKysrKysr KysrKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgNjYgaW5zZXJ0aW9ucygrKQogY3JlYXRl IG1vZGUgMTAwNjQ0IEV4dGVybmFsU3NsUGtnL0xpYnJhcnkvT3BlbnNzbExpYi9PcGVuc3NsTGli QmluLmluZgogY3JlYXRlIG1vZGUgMTAwNjQ0IEV4dGVybmFsU3NsUGtnL0xpYnJhcnkvT3BlbnNz bExpYi9PcGVuc3NsTGliQmluQ3J5cHRvLmluZgoKZGlmZiAtLWdpdCBhL0V4dGVybmFsU3NsUGtn L0xpYnJhcnkvT3BlbnNzbExpYi9PcGVuc3NsTGliQmluLmluZiBiL0V4dGVybmFsU3NsUGtnL0xp YnJhcnkvT3BlbnNzbExpYi9PcGVuc3NsTGliQmluLmluZgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAuLjcwM2ZkZGI0NzYwNgotLS0gL2Rldi9udWxsCisrKyBiL0V4dGVy bmFsU3NsUGtnL0xpYnJhcnkvT3BlbnNzbExpYi9PcGVuc3NsTGliQmluLmluZgpAQCAtMCwwICsx LDMzIEBACisjIyBAZmlsZQ0KKyMgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGJpbmFyeSBPcGVuU1NM IExpYnJhcnkgaW1wbGVtZW50YXRpb24uDQorIw0KKyMgIENvcHlyaWdodCAoQykgMjAxNywgUmVk IEhhdCwgSW5jLg0KKyMgIENvcHlyaWdodCAoYykgMjAxMCAtIDIwMTcsIEludGVsIENvcnBvcmF0 aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCisjICBUaGlzIHByb2dyYW0gYW5kIHRoZSBh Y2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUNCisj ICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlIHdoaWNo IGFjY29tcGFuaWVzIHRoaXMNCisjICBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRo ZSBsaWNlbnNlIG1heSBiZSBmb3VuZCBhdA0KKyMgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNl bnNlcy9ic2QtbGljZW5zZS5waHANCisjDQorIyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQg VU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsDQorIyAgV0lUSE9VVCBX QVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1Mg T1INCisjICBJTVBMSUVELg0KKyMNCisjIw0KKw0KK1tEZWZpbmVzXQ0KKyAgSU5GX1ZFUlNJT04g ICAgICAgICAgICAgICAgICAgID0gMS4yNQ0KKyAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAg ICAgID0gT3BlbnNzbExpYkJpbg0KKyAgRklMRV9HVUlEICAgICAgICAgICAgICAgICAgICAgID0g ZDBkNGQ0Y2YtNDYwYy00NzUyLTljOWItNmQ4MjFiMmZmZTQ5DQorICBNT0RVTEVfVFlQRSAgICAg ICAgICAgICAgICAgICAgPSBCQVNFDQorICBWRVJTSU9OX1NUUklORyAgICAgICAgICAgICAgICAg PSAxLjANCisgIExJQlJBUllfQ0xBU1MgICAgICAgICAgICAgICAgICA9IE9wZW5zc2xMaWINCisN CitbQmluYXJpZXMuSUEzMl0NCisgIExJQnxERUJVRy9JQTMyL09wZW5zc2xMaWIubGlifERFQlVH DQorICBMSUJ8Tk9PUFQvSUEzMi9PcGVuc3NsTGliLmxpYnxOT09QVA0KKyAgTElCfFJFTEVBU0Uv SUEzMi9PcGVuc3NsTGliLmxpYnxSRUxFQVNFDQorDQorW0JpbmFyaWVzLlg2NF0NCisgIExJQnxE RUJVRy9YNjQvT3BlbnNzbExpYi5saWJ8REVCVUcNCisgIExJQnxOT09QVC9YNjQvT3BlbnNzbExp Yi5saWJ8Tk9PUFQNCisgIExJQnxSRUxFQVNFL1g2NC9PcGVuc3NsTGliLmxpYnxSRUxFQVNFDQpk aWZmIC0tZ2l0IGEvRXh0ZXJuYWxTc2xQa2cvTGlicmFyeS9PcGVuc3NsTGliL09wZW5zc2xMaWJC aW5DcnlwdG8uaW5mIGIvRXh0ZXJuYWxTc2xQa2cvTGlicmFyeS9PcGVuc3NsTGliL09wZW5zc2xM aWJCaW5DcnlwdG8uaW5mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u Njg0OGVhNmY1MDM3Ci0tLSAvZGV2L251bGwKKysrIGIvRXh0ZXJuYWxTc2xQa2cvTGlicmFyeS9P cGVuc3NsTGliL09wZW5zc2xMaWJCaW5DcnlwdG8uaW5mCkBAIC0wLDAgKzEsMzMgQEAKKyMjIEBm aWxlDQorIyAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYmluYXJ5IE9wZW5TU0wgTGlicmFyeSBpbXBs ZW1lbnRhdGlvbi4NCisjDQorIyAgQ29weXJpZ2h0IChDKSAyMDE3LCBSZWQgSGF0LCBJbmMuDQor IyAgQ29weXJpZ2h0IChjKSAyMDEwIC0gMjAxNywgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuPEJSPg0KKyMgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBt YXRlcmlhbHMgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZQ0KKyMgIHVuZGVyIHRoZSB0 ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEIExpY2Vuc2Ugd2hpY2ggYWNjb21wYW5pZXMg dGhpcw0KKyMgIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5 IGJlIGZvdW5kIGF0DQorIyAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNl bnNlLnBocA0KKyMNCisjICBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNE IExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywNCisjICBXSVRIT1VUIFdBUlJBTlRJRVMgT1Ig UkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUg0KKyMgIElNUExJ RUQuDQorIw0KKyMjDQorDQorW0RlZmluZXNdDQorICBJTkZfVkVSU0lPTiAgICAgICAgICAgICAg ICAgICAgPSAxLjI1DQorICBCQVNFX05BTUUgICAgICAgICAgICAgICAgICAgICAgPSBPcGVuc3Ns TGliQmluQ3J5cHRvDQorICBGSUxFX0dVSUQgICAgICAgICAgICAgICAgICAgICAgPSAyNjc4ODk4 MC03OWI1LTRlMmYtODE2NC1iNDA4NGY2NzdjNDgNCisgIE1PRFVMRV9UWVBFICAgICAgICAgICAg ICAgICAgICA9IEJBU0UNCisgIFZFUlNJT05fU1RSSU5HICAgICAgICAgICAgICAgICA9IDEuMA0K KyAgTElCUkFSWV9DTEFTUyAgICAgICAgICAgICAgICAgID0gT3BlbnNzbExpYg0KKw0KK1tCaW5h cmllcy5JQTMyXQ0KKyAgTElCfERFQlVHL0lBMzIvT3BlbnNzbExpYkNyeXB0by5saWJ8REVCVUcN CisgIExJQnxOT09QVC9JQTMyL09wZW5zc2xMaWJDcnlwdG8ubGlifE5PT1BUDQorICBMSUJ8UkVM RUFTRS9JQTMyL09wZW5zc2xMaWJDcnlwdG8ubGlifFJFTEVBU0UNCisNCitbQmluYXJpZXMuWDY0 XQ0KKyAgTElCfERFQlVHL1g2NC9PcGVuc3NsTGliQ3J5cHRvLmxpYnxERUJVRw0KKyAgTElCfE5P T1BUL1g2NC9PcGVuc3NsTGliQ3J5cHRvLmxpYnxOT09QVA0KKyAgTElCfFJFTEVBU0UvWDY0L09w ZW5zc2xMaWJDcnlwdG8ubGlifFJFTEVBU0UNCi0tIAoyLjkuMwoK --------------A2059EAB03CADEDC6631850F--