[Fwd: GLPK CMake build configuration (Windows)]

Andrew Makhorin <[email protected]> Sat, 27 Jan 2024 15:56:43 +0300
Newsgroups gmane.comp.gnu.glpk
Message-ID <[email protected]>
--=-U8NgfZfZuB08f38kYF8x
Content-Type: multipart/alternative; boundary="=-38+XTDWDC0R3m4PhPIXG"


--=-38+XTDWDC0R3m4PhPIXG
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit

-------- Forwarded Message --------

Date: Sat, 27 Jan 2024 00:30:37 -0500
Subject: GLPK CMake build configuration (Windows)
To: [email protected]
From: Derek Huang <[email protected]>
> Hi,
> My name is Derek Huang; I am currently a quant [developer] at TD
> Securities. I needed to use GLPK at work on Windows but found the
> NMake Makefiles not sufficient for my purpose as I wanted the
> following:
> 
> 1. Ability to link against C runtime statically or dynamically
> 2. Build more of the example programs (except netgen, got error
> saying glp_netgen disabled for licensing reasons)
> 3. Provide installation rule for Windows distinguishing debug/release
> config + C runtime linking
> 4. Build PE32 (32-bit) or PE32+ (64-bit) on Windows from the same
> Developer Command Prompt
> 
> CMake makes this relatively straightforward to do so I spent some time
> at home today in the evening to write a CMakeLists.txt (attached). I
> am not sure what is the best way to make contributions upstream, hence
> why I have attached it to the email. It contains explanations on a few
> ways one can build, run tests, and install using CMake, and I have
> verified all example programs run properly for 32-bit and 64-bit Debug
> + Release static and dynamic builds. The CMake generator (underlying
> build tool) used is Visual Studio 2022. Unfortunately, however, I have
> not yet added any formal documentation outside of the CMakeLists.txt.
> 
> Please let me know if this could be accepted as part of the GLPK
> source base as an alternative method to build on Windows and if so, if
> there are any specific steps I should take to introduce it to the
> source tree. Thank you.
> 
> Best,
> Derek
> 
--=-38+XTDWDC0R3m4PhPIXG
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: quoted-printable

<html><head></head><body><div>-------- Forwarded Message --------</div><div=
><br></div><div><b>Date</b>: Sat, 27 Jan 2024 00:30:37 -0500</div><div><b>S=
ubject</b>: GLPK CMake build configuration (Windows)</div><div><b>To</b>: <=
a href=3D"mailto:[email protected]">[email protected]</a></div><div><b>From=
</b>: Derek Huang &lt;<a href=3D"mailto:Derek%20Huang%20%[email protected]=
.edu%3e">[email protected]</a>&gt;</div><blockquote type=3D"cite"><!-- t=
ext/html --><div dir=3D"ltr">Hi,<div><br></div><div>My name is Derek Huang;=
 I am currently a quant [developer] at TD Securities. I needed to use GLPK =
at work on Windows but found the NMake Makefiles not sufficient for my purp=
ose as I wanted the following:</div><div><br></div><div>1. Ability to link&=
nbsp;against C runtime statically or dynamically</div><div>2. Build more of=
 the example programs (except netgen, got error saying&nbsp;glp_netgen disa=
bled for licensing reasons)</div><div>3. Provide installation rule for Wind=
ows distinguishing debug/release config&nbsp;+ C runtime linking</div><div>=
4. Build PE32 (32-bit) or PE32+ (64-bit) on Windows from the same Developer=
 Command Prompt</div><div><br></div><div>CMake makes this relatively straig=
htforward to do so I spent some time at home today in the evening to write =
a CMakeLists.txt (attached). I am not sure what is the best way to make con=
tributions upstream, hence why I have attached it to the email. It contains=
 explanations on a few ways one can build, run tests, and install using CMa=
ke, and I have verified all example&nbsp;programs run properly for 32-bit a=
nd 64-bit Debug + Release static and dynamic builds. The CMake generator (u=
nderlying build tool) used is Visual Studio 2022. Unfortunately, however, I=
 have not yet added any formal documentation outside of the CMakeLists.txt.=
</div><div><br></div><div>Please let me know if this could be accepted as p=
art of the GLPK source base as an alternative method to build on Windows an=
d if so, if there are any specific steps I should take to introduce it to t=
he source tree. Thank you.</div><div><br></div><div>Best,</div><div>Derek</=
div></div>
</blockquote></body></html>
--=-38+XTDWDC0R3m4PhPIXG--

--=-U8NgfZfZuB08f38kYF8x
Content-Type: text/plain; charset="US-ASCII"; name="CMakeLists.txt"
Content-Disposition: attachment; filename="CMakeLists.txt"
Content-ID: <f_lrvmpix30>
X-Attachment-Id: f_lrvmpix30
Content-Transfer-Encoding: base64

Y21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTUpCgojIwojIFVzYWdlCiMgPT09PT0K
IwojIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBzb21lIGJyaWVmIGluc3RydWN0aW9ucyBvbiBob3cg
dG8gY29tcGlsZSwgdGVzdCwgYW5kCiMgaW5zdGFsbCBHTFBLIHVzaW5nIENNYWtlLiBBbHRob3Vn
aCBjdXJyZW50bHkgY29uZmlndXJlZCBvbmx5IGZvciB1c2Ugb24KIyBXaW5kb3dzLCB0aGUgY29u
ZmlnIGNhbiBiZSBleHRlbmRlZCB0byBzdXBwb3J0ICpuaXggc3lzdGVtcyBhcyB3ZWxsLgojCiMg
Tm90ZToKIwojIFRoaXMgZmlsZSBjYW4gYmUgc3BsaXQgdXAgaW50byBzbWFsbGVyIC5jbWFrZSBm
aWxlcyBpZiBkZXNpcmVkLiBJdCBpcyBhIGZldwojIGh1bmRyZWQgbGluZXMgbG9uZyB1bmZvcnR1
bmF0ZWx5IGluIGxhcmdlIHBhcnQgc2luY2UgdGhlIHNvdXJjZXMgYXJlIGFsbAojIGxpc3RlZCBl
eHBsaWNpdGx5IGluc3RlYWQgb2YgdXNpbmcgZ2xvYnMgYW5kIGJlY2F1c2Ugb2YgdGhlIGluc3Rh
bGwgbG9naWMuCiMKIyBXaW5kb3dzCiMgLS0tLS0tLQojCiMgVGhlIGZvbGxvd2luZyBpdGVtcyBh
cmUgdmFsdWVzIHRvIGJlIGRldGVybWluZWQgYnkgdGhlIHVzZXIuIFRoZXkgYXJlIHVzZWQgaW4K
IyB0aGUgYnVpbGQgY29tbWFuZHMgZW5jbG9zZWQgaW4gYnJhY2tldHMgdG8gZGlzdGluZ3Vpc2gg
dGhlbS4KIwojIEFyY2g6IFdpbjMyLCB4NjQKIyBDb25maWc6IERlYnVnLCBSZWxlYXNlCiMgUHJl
Zml4OiAoZGVzaXJlZCBpbnN0YWxsIHJvb3QpCiMKIyBCdWlsZGluZwojIH5+fn5+fn5+CiMKIyBC
dWlsZCBzdGF0aWMgbGlua2luZyBhZ2FpbnN0IEMgcnVudGltZSBkeW5hbWljYWxseSArIGFsc28g
YnVpbGQgZXhhbXBsZXM6CiMKIyAgIGNtYWtlIC1TIC4gLUIgYnVpbGRfd2luZG93c19bQXJjaF0g
LUEgW0FyY2hdCiMgICBjbWFrZSAtLWJ1aWxkIGJ1aWxkX3dpbmRvd3NfW0FyY2hdIC0tY29uZmln
IFtDb25maWddIC1qCiMKIyBCdWlsZCBkeW5hbWljIGxpbmtpbmcgYWdhaW5zdCBDIHJ1bnRpbWUg
c3RhdGljYWxseSArIG5vIGV4YW1wbGVzOgojCiMgICBjbWFrZSAtUyAuIC1CIGJ1aWxkX3dpbmRv
d3NfW0FyY2hdIC1BIFtBcmNoXSAtREJVSUxEX1NIQVJFRF9MSUJTPU9OIF4KIyAgICAgICAtREdM
UEtfVVNFX1NUQVRJQ19DUlQ9T04gLURHTFBLX0JVSUxEX0VYQU1QTEVTPU9GRgojICAgY21ha2Ug
LS1idWlsZCBidWlsZF93aW5kb3dzX1tBcmNoXSAtLWNvbmZpZyBbQ29uZmlnXSAtagojCiMgQnVp
bGQgZHluYW1pYyBsaW5raW5nIGFnYWluc3QgQyBydW50aW1lIGR5bmFtaWNhbGx5ICsgYWxzbyBi
dWlsZCBleGFtcGxlcwojIHdoaWxlIGluc3RhbGxpbmcgd2l0aCBtdWx0aS1jb25maWd1cmF0aW9u
IGluc3RhbGwgdHJlZToKIwojICAgY21ha2UgLVMgLiAtQiBidWlsZF93aW5kb3dzX1tBcmNoXSAt
QSBbQXJjaF0gLURCVUlMRF9TSEFSRURfTElCUz1PTiBeCiMgICAgICAgLURHTFBLX0lOU1RBTExf
TVVMVElfQ09ORklHPU9OCiMgICBjbWFrZSAtLWJ1aWxkIGJ1aWxkX3dpbmRvd3NfW0FyY2hdIC0t
Y29uZmlnIFtDb25maWddIC1qCiMKIyBUZXN0aW5nCiMgfn5+fn5+fgojCiMgICBjdGVzdCAtLXRl
c3QtZGlyIGJ1aWxkX3dpbmRvd3NfW0FyY2hdIC1DIFtDb25maWddIC1qCiMKIyBJbnN0YWxsCiMg
fn5+fn5+fgojCiMgICBjbWFrZSAtLWluc3RhbGwgYnVpbGRfd2luZG93c19bQXJjaF0gLS1wcmVm
aXggW1ByZWZpeF0gLS1jb25maWcgW0NvbmZpZ10KIwojIElmIEdMUEtfSU5TVEFMTF9NVUxUSV9D
T05GSUcgaXMgc3BlY2lmaWVkLCBhbmQgYXNzdW1pbmcgdGhhdCB3ZSBhcmUgYnVpbGRpbmcKIyBz
aGFyZWQgbGlicmFyaWVzLCB0aGUgaW5zdGFsbCB0cmVlIGxvb2tzIGxpa2UgdGhpczoKIwojIGlu
c3RhbGxfcm9vdC8KIyAgIGJpbi8KIyAgICAgRGVidWcvCiMgICAgICAgZ2xway5kbGwKIyAgICAg
ICBnbHBzb2wuZXhlCiMgICAgIFJlbGVhc2UvCiMgICAgICAgZ2xway5kbGwKIyAgICAgICBnbHBz
b2wuZXhlCiMgICBpbmNsdWRlLwojICAgICBnbHBrLmgKIyAgIGxpYi8KIyAgICAgRGVidWcvCiMg
ICAgICAgZ2xway5saWIKIyAgICAgICBnbHBrLnBkYgojICAgICBSZWxlYXNlLwojICAgICAgIGds
cGsubGliCiMKIyBPdGhlcndpc2UsIHdlIGhhdmUgYSBmbGF0IGluc3RhbGwgd2l0aCAiZCIgc3Vm
ZmljZXMsIGUuZy4KIwojIGluc3RhbGxfcm9vdC8KIyAgIGJpbi8KIyAgICAgZ2xway5kbGwKIyAg
ICAgZ2xwa2QuZGxsCiMgICAgIGdscHNvbC5leGUKIyAgICAgZ2xwc29sZC5leGUKIyAgIGluY2x1
ZGUvCiMgICAgIGdscGsuaAojICAgbGliLwojICAgICBnbHBrLmxpYgojICAgICBnbHBrZC5saWIK
IyAgICAgZ2xwa2QucGRiCiMKCiMgR0xQSyB2ZXJzaW9uCnNldChHTFBLX1ZFUlNJT05fTUFKT1Ig
NSkKc2V0KEdMUEtfVkVSU0lPTl9NSU5PUiAwKQpzZXQoR0xQS19WRVJTSU9OICR7R0xQS19WRVJT
SU9OX01BSk9SfS4ke0dMUEtfVkVSU0lPTl9NSU5PUn0pCgpwcm9qZWN0KAogICAgZ2xwawogICAg
VkVSU0lPTiA1LjAKICAgIERFU0NSSVBUSU9OICJHTlUgTGluZWFyIFByb2dyYW1taW5nIEtpdCIK
ICAgIEhPTUVQQUdFX1VSTCAiaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nbHBrLyIKICAg
IExBTkdVQUdFUyBDCikKCiMgc2VsZWN0IHN0YXRpYy9zaGFyZWQgbGlicmFyeSBjb21waWxhdGlv
bgpvcHRpb24oQlVJTERfU0hBUkVEX0xJQlMgIkJ1aWxkIEdMUEsgbGlicmFyeSBhcyBzaGFyZWQi
IE9GRikKIyB1c2Ugc3RhdGljIEMgcnVudGltZSBsaWJyYXJ5LiBkZWZhdWx0ZWQgdG8gT0ZGIHRv
IG1hdGNoIHRoZSBDTWFrZSBkZWZhdWx0IG9mCiMgdXNpbmcgTXVsdGlUaHJlYWRlZCQ8JDxDT05G
SUc6RGVidWc+OkRlYnVnPkRMTCB0byBzZWxlY3QgZHluYW1pYyBDIHJ1bnRpbWUuCiMgc2VlIGh0
dHBzOi8vY21ha2Uub3JnL2NtYWtlL2hlbHAvbGF0ZXN0L3Byb3BfdGd0L01TVkNfUlVOVElNRV9M
SUJSQVJZLmh0bWwsCiMgaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2VuLXVzL2NwcC9jLXJ1
bnRpbWUtbGlicmFyeS9jcnQtbGlicmFyeS1mZWF0dXJlcwpvcHRpb24oR0xQS19VU0VfU1RBVElD
X0NSVCAiTGluayBhZ2FpbnN0IEMgcnVudGltZSBzdGF0aWNhbGx5IiBPRkYpCiMgdG8gc2VwYXJh
dGUgRGVidWcgYW5kIFJlbGVhc2UgbGlicmFyaWVzLCB3aGljaCBhbHNvIGxpbmsgYWdhaW5zdCBk
ZWJ1ZyBhbmQKIyByZWxlYXNlIEMgcnVudGltZXMgcmVzcGVjdGl2ZWx5IChzaG91bGQgbmV2ZXIg
YmUgbWl4ZWQpLCBhZGQgYW4gZXh0cmEgbGF5ZXIKIyBvZiBuYW1lc3BhY2luZyB0byBsaWIgYW5k
IGJpbiwgZS5nLiBsaWIvRGVidWcsIGJpbi9SZWxlYXNlLCBldGMuIGZvciBNU1ZDLCBpZgojIHRo
aXMgaXMgbm90IHNwZWNpZmllZCwgZGVidWcgbGlicmFyaWVzICsgUERCIGlzIHN1ZmZpeGVkIHdp
dGggImQiCm9wdGlvbihHTFBLX0lOU1RBTExfTVVMVElfQ09ORklHIE9GRikKIyBidWlsZCBleGFt
cGxlIHByb2dyYW1zCm9wdGlvbihHTFBLX0JVSUxEX0VYQU1QTEVTICJCdWlsZCB0aGUgR0xQSyBl
eGFtcGxlIHByb2dyYW1zIiBPTikKCiMgb25seSBhdmFpbGFibGUgZm9yIFdpbmRvd3MgY3VycmVu
dGx5CmlmKE5PVCBXSU4zMikKICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNNYWtlIGNvbmZpZyBp
cyBjdXJyZW50bHkgb25seSB1c2FibGUgZm9yIFdpbmRvd3MiKQplbmRpZigpCgojIGVuYWJsZSB0
ZXN0aW5nIHZpYSBjdGVzdAppbmNsdWRlKENUZXN0KQoKIyBjaGVjayBpZiBtdWx0aS1jb25maWcg
b3Igbm90CmdldF9wcm9wZXJ0eShHTFBLX0JVSUxEX01VTFRJX0NPTkZJRyBHTE9CQUwgUFJPUEVS
VFkgR0VORVJBVE9SX0lTX01VTFRJX0NPTkZJRykKaWYoR0xQS19CVUlMRF9NVUxUSV9DT05GSUcp
CiAgICBtZXNzYWdlKFNUQVRVUyAiQnVpbGQgZ2VuZXJhdG9yOiBNdWx0aS1jb25maWciKQplbHNl
KCkKICAgIG1lc3NhZ2UoU1RBVFVTICJCdWlsZCBnZW5lcmF0b3I6IFNpbmdsZS1jb25maWciKQpl
bmRpZigpCgojIHN0YXRpYy9zaGFyZWQgbGlicmFyeSBidWlsZAppZihCVUlMRF9TSEFSRURfTElC
UykKICAgIG1lc3NhZ2UoU1RBVFVTICJHTFBLIGJ1aWxkOiBTaGFyZWQiKQplbHNlKCkKICAgIG1l
c3NhZ2UoU1RBVFVTICJHTFBLIGJ1aWxkOiBTdGF0aWMiKQplbmRpZigpCiMgbGluayBzdGF0aWNh
bGx5IGFnYWluc3QgQyBydW50aW1lIGxpYnJhcnkgaWYgcmVxdWVzdGVkCmlmKFdJTjMyKQogICAg
aWYoR0xQS19VU0VfU1RBVElDX0NSVCkKICAgICAgICBzZXQoQ01BS0VfTVNWQ19SVU5USU1FX0xJ
QlJBUlkgIk11bHRpVGhyZWFkZWQkPCQ8Q09ORklHOkRlYnVnPjpEZWJ1Zz4iKQogICAgICAgIG1l
c3NhZ2UoU1RBVFVTICJVQ1JUIGxpbmthZ2U6IFN0YXRpYyIpCiAgICAjIGxpbmsgZHluYW1pY2Fs
bHkuIHRoaXMgaXMgdGhlIGRlZmF1bHQgYnV0IHdlIHNldCB0aGlzIGV4cGxpY2l0bHkKICAgIGVs
c2UoKQogICAgICAgIHNldChDTUFLRV9NU1ZDX1JVTlRJTUVfTElCUkFSWSAiTXVsdGlUaHJlYWRl
ZCQ8JDxDT05GSUc6RGVidWc+OkRlYnVnPkRMTCIpCiAgICAgICAgbWVzc2FnZShTVEFUVVMgIlVD
UlQgbGlua2FnZTogU2hhcmVkIikKICAgIGVuZGlmKCkKZW5kaWYoKQojIG11bHRpLWNvbmZpZyBp
bnN0YWxsYXRpb24gKG9ubHkgZm9yIE1TVkMpCmlmKE1TVkMgQU5EIEdMUEtfSU5TVEFMTF9NVUxU
SV9DT05GSUcpCiAgICBtZXNzYWdlKFNUQVRVUyAiSW5zdGFsbGF0aW9uOiBNdWx0aSIpCmVsc2Uo
KQogICAgbWVzc2FnZShTVEFUVVMgIkluc3RhbGxhdGlvbjogRmxhdCIpCmVuZGlmKCkKIyBleGFt
cGxlIHByb2dyYW1zCmlmKEdMUEtfQlVJTERfRVhBTVBMRVMpCiAgICBtZXNzYWdlKFNUQVRVUyAi
QnVpbGQgZXhhbXBsZXM6IE5vIikKZWxzZSgpCiAgICBtZXNzYWdlKFNUQVRVUyAiQnVpbGQgZXhh
bXBsZXM6IFllcyIpCmVuZGlmKCkKCiMgZXhhbXBsZXMgZGlyZWN0b3J5IGFic29sdXRlIHBhdGgK
c2V0KEdMUEtfRVhBTVBMRVNfRElSICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9leGFtcGxl
cykKCiMgY2hlY2sgaWYgZ2VuZXJhdGluZyAzMi0gb3IgNjQtYml0IGNvZGUKaWYoQ01BS0VfU0la
RU9GX1ZPSURfUCBFUVVBTCA4KQogICAgc2V0KEdMUEtfVEFSR0VUXzY0IE9OKQogICAgc2V0KEdM
UEtfVEFSR0VUXzMyIE9GRikKICAgIG1lc3NhZ2UoU1RBVFVTICJBcmNoaXRlY3R1cmU6IDY0LWJp
dCIpCmVsc2VpZihDTUFLRV9TSVpFT0ZfVk9JRF9QIEVRVUFMIDQpCiAgICBzZXQoR0xQS19UQVJH
RVRfNjQgT0ZGKQogICAgc2V0KEdMUEtfVEFSR0VUXzMyIE9OKQogICAgbWVzc2FnZShTVEFUVVMg
IkFyY2hpdGVjdHVyZTogMzItYml0IikKZWxzZSgpCiAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJJ
bmNvbXBhdGlibGUgcG9pbnRlciBzaXplLCBtdXN0IGJlIDggb3IgNCBieXRlcyIpCmVuZGlmKCkK
CiMgY29tcGlsZSBmbGFncwppZihNU1ZDKQogICAgIyBUT0RPOiBpbmNyZWFzZSB3YXJuaW5nIGxl
dmVsIGxhdGVyPyBlLmcuIC9XNCwgL1dhbGwKICAgIGFkZF9jb21waWxlX2RlZmluaXRpb25zKEhB
VkVfQ09ORklHX0ggX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MpCiAgICBhZGRfY29tcGlsZV9vcHRp
b25zKC9XMykKZWxzZSgpCiAgICAjIFRPRE86IGZpbGwgaW4gZm9yICpuaXgKZW5kaWYoKQoKIyBp
bmNsdWRlIGRpcmVjdG9yaWVzCmluY2x1ZGVfZGlyZWN0b3JpZXMoCiAgICBzcmMKICAgIHNyYy9h
bWQKICAgIHNyYy9hcGkKICAgIHNyYy9iZmxpYgogICAgc3JjL2NvbGFtZAogICAgc3JjL2RyYWZ0
CiAgICBzcmMvZW52CiAgICBzcmMvaW50b3B0CiAgICBzcmMvbWluaXNhdAogICAgc3JjL21pc2MK
ICAgIHNyYy9tcGwKICAgIHNyYy9ucHAKICAgIHNyYy9wcm94eQogICAgc3JjL3NpbXBsZXgKICAg
IHNyYy96bGliCikKIyBhZGQgdzMyIG9yIHc2NCBhcyBpbmNsdWRlIGZvciBjb25maWcuaCBhcHBy
b3ByaWF0ZWx5CmlmKEdMUEtfVEFSR0VUXzY0KQogICAgaW5jbHVkZV9kaXJlY3Rvcmllcyh3NjQp
CiAgICBzZXQoR0xQS19DT05GSUdfSF9ESVIgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3c2
NCkKICAgIG1lc3NhZ2UoU1RBVFVTICJjb25maWcuaCBmcm9tOiB3NjQiKQplbHNlKCkKICAgIGlu
Y2x1ZGVfZGlyZWN0b3JpZXModzMyKQogICAgc2V0KEdMUEtfQ09ORklHX0hfRElSICR7Q01BS0Vf
Q1VSUkVOVF9TT1VSQ0VfRElSfS93MzIpCiAgICBtZXNzYWdlKFNUQVRVUyAiY29uZmlnLmggZnJv
bTogdzMyIikKZW5kaWYoKQoKIyBidWlsZCBHTFBLIGxpYnJhcnkuIG1heWJlIHVzZSB3aWxkY2Fy
ZHM/CmFkZF9saWJyYXJ5KAogICAgZ2xwawogICAgc3JjL2FtZC9hbWRfMS5jCiAgICBzcmMvYW1k
L2FtZF8yLmMKICAgIHNyYy9hbWQvYW1kX2FhdC5jCiAgICBzcmMvYW1kL2FtZF9jb250cm9sLmMK
ICAgIHNyYy9hbWQvYW1kX2RlZmF1bHRzLmMKICAgIHNyYy9hbWQvYW1kX2R1bXAuYwogICAgc3Jj
L2FtZC9hbWRfaW5mby5jCiAgICBzcmMvYW1kL2FtZF9vcmRlci5jCiAgICBzcmMvYW1kL2FtZF9w
b3N0X3RyZWUuYwogICAgc3JjL2FtZC9hbWRfcG9zdG9yZGVyLmMKICAgIHNyYy9hbWQvYW1kX3By
ZXByb2Nlc3MuYwogICAgc3JjL2FtZC9hbWRfdmFsaWQuYwogICAgc3JjL2FwaS9hZHZiYXMuYwog
ICAgc3JjL2FwaS9hc25oYWxsLmMKICAgIHNyYy9hcGkvYXNubHAuYwogICAgc3JjL2FwaS9hc25v
a2FsZy5jCiAgICBzcmMvYXBpL2NrYXNuLmMKICAgIHNyYy9hcGkvY2tjbmYuYwogICAgc3JjL2Fw
aS9jcGxleC5jCiAgICBzcmMvYXBpL2NwcC5jCiAgICBzcmMvYXBpL2NweGJhcy5jCiAgICBzcmMv
YXBpL2dyYXBoLmMKICAgIHNyYy9hcGkvZ3JpZGdlbi5jCiAgICBzcmMvYXBpL2ludGZlYXMxLmMK
ICAgIHNyYy9hcGkvbWF4ZmZhbGcuYwogICAgc3JjL2FwaS9tYXhmbHAuYwogICAgc3JjL2FwaS9t
Y2ZscC5jCiAgICBzcmMvYXBpL21jZm9rYWxnLmMKICAgIHNyYy9hcGkvbWNmcmVsYXguYwogICAg
c3JjL2FwaS9taW5pc2F0MS5jCiAgICBzcmMvYXBpL21wbC5jCiAgICBzcmMvYXBpL21wcy5jCiAg
ICBzcmMvYXBpL25ldGdlbi5jCiAgICBzcmMvYXBpL25wcC5jCiAgICBzcmMvYXBpL3ByaXB0LmMK
ICAgIHNyYy9hcGkvcHJtaXAuYwogICAgc3JjL2FwaS9wcm9iMS5jCiAgICBzcmMvYXBpL3Byb2Iy
LmMKICAgIHNyYy9hcGkvcHJvYjMuYwogICAgc3JjL2FwaS9wcm9iNC5jCiAgICBzcmMvYXBpL3By
b2I1LmMKICAgIHNyYy9hcGkvcHJybmdzLmMKICAgIHNyYy9hcGkvcHJzb2wuYwogICAgc3JjL2Fw
aS9yZGFzbi5jCiAgICBzcmMvYXBpL3JkY2MuYwogICAgc3JjL2FwaS9yZGNuZi5jCiAgICBzcmMv
YXBpL3JkaXB0LmMKICAgIHNyYy9hcGkvcmRtYXhmLmMKICAgIHNyYy9hcGkvcmRtY2YuYwogICAg
c3JjL2FwaS9yZG1pcC5jCiAgICBzcmMvYXBpL3JkcHJvYi5jCiAgICBzcmMvYXBpL3Jkc29sLmMK
ICAgIHNyYy9hcGkvcm1mZ2VuLmMKICAgIHNyYy9hcGkvc3Ryb25nLmMKICAgIHNyYy9hcGkvdG9w
c29ydC5jCiAgICBzcmMvYXBpL3dlYWsuYwogICAgc3JjL2FwaS93Y2xpcWV4LmMKICAgIHNyYy9h
cGkvd3Jhc24uYwogICAgc3JjL2FwaS93cmNjLmMKICAgIHNyYy9hcGkvd3JjbmYuYwogICAgc3Jj
L2FwaS93cmlwdC5jCiAgICBzcmMvYXBpL3dybWF4Zi5jCiAgICBzcmMvYXBpL3dybWNmLmMKICAg
IHNyYy9hcGkvd3JtaXAuYwogICAgc3JjL2FwaS93cnByb2IuYwogICAgc3JjL2FwaS93cnNvbC5j
CiAgICBzcmMvYmZsaWIvYnRmLmMKICAgIHNyYy9iZmxpYi9idGZpbnQuYwogICAgc3JjL2JmbGli
L2Zodi5jCiAgICBzcmMvYmZsaWIvZmh2aW50LmMKICAgIHNyYy9iZmxpYi9pZnUuYwogICAgc3Jj
L2JmbGliL2x1Zi5jCiAgICBzcmMvYmZsaWIvbHVmaW50LmMKICAgIHNyYy9iZmxpYi9zY2YuYwog
ICAgc3JjL2JmbGliL3NjZmludC5jCiAgICBzcmMvYmZsaWIvc2dmLmMKICAgIHNyYy9iZmxpYi9z
dmEuYwogICAgc3JjL2NvbGFtZC9jb2xhbWQuYwogICAgc3JjL2RyYWZ0L2JmZC5jCiAgICBzcmMv
ZHJhZnQvYmZ4LmMKICAgIHNyYy9kcmFmdC9nbHBhcGkwNi5jCiAgICBzcmMvZHJhZnQvZ2xwYXBp
MDcuYwogICAgc3JjL2RyYWZ0L2dscGFwaTA4LmMKICAgIHNyYy9kcmFmdC9nbHBhcGkwOS5jCiAg
ICBzcmMvZHJhZnQvZ2xwYXBpMTAuYwogICAgc3JjL2RyYWZ0L2dscGFwaTEyLmMKICAgIHNyYy9k
cmFmdC9nbHBhcGkxMy5jCiAgICBzcmMvZHJhZnQvZ2xwaW9zMDEuYwogICAgc3JjL2RyYWZ0L2ds
cGlvczAyLmMKICAgIHNyYy9kcmFmdC9nbHBpb3MwMy5jCiAgICBzcmMvZHJhZnQvZ2xwaW9zMDcu
YwogICAgc3JjL2RyYWZ0L2dscGlvczA5LmMKICAgIHNyYy9kcmFmdC9nbHBpb3MxMS5jCiAgICBz
cmMvZHJhZnQvZ2xwaW9zMTIuYwogICAgc3JjL2RyYWZ0L2dscGlwbS5jCiAgICBzcmMvZHJhZnQv
Z2xwbWF0LmMKICAgIHNyYy9kcmFmdC9nbHBzY2wuYwogICAgc3JjL2RyYWZ0L2dscHNzeDAxLmMK
ICAgIHNyYy9kcmFmdC9nbHBzc3gwMi5jCiAgICBzcmMvZHJhZnQvbHV4LmMKICAgIHNyYy9lbnYv
YWxsb2MuYwogICAgc3JjL2Vudi9kbHN1cC5jCiAgICBzcmMvZW52L2Vudi5jCiAgICBzcmMvZW52
L2Vycm9yLmMKICAgIHNyYy9lbnYvc3RkYy5jCiAgICBzcmMvZW52L3N0ZG91dC5jCiAgICBzcmMv
ZW52L3N0cmVhbS5jCiAgICBzcmMvZW52L3RpbWUuYwogICAgc3JjL2Vudi90bHMuYwogICAgc3Jj
L2ludG9wdC9jZmcuYwogICAgc3JjL2ludG9wdC9jZmcxLmMKICAgIHNyYy9pbnRvcHQvY2ZnMi5j
CiAgICBzcmMvaW50b3B0L2NscWN1dC5jCiAgICBzcmMvaW50b3B0L2Nvdmdlbi5jCiAgICBzcmMv
aW50b3B0L2ZwdW1wLmMKICAgIHNyYy9pbnRvcHQvZ21pY3V0LmMKICAgIHNyYy9pbnRvcHQvZ21p
Z2VuLmMKICAgIHNyYy9pbnRvcHQvbWlyZ2VuLmMKICAgIHNyYy9pbnRvcHQvc3B2LmMKICAgIHNy
Yy9taW5pc2F0L21pbmlzYXQuYwogICAgc3JjL21pc2MvYXZsLmMKICAgIHNyYy9taXNjL2JpZ251
bS5jCiAgICBzcmMvbWlzYy9kaW1hY3MuYwogICAgc3JjL21pc2MvZG1wLmMKICAgIHNyYy9taXNj
L2ZmYWxnLmMKICAgIHNyYy9taXNjL2ZwMnJhdC5jCiAgICBzcmMvbWlzYy9mdnMuYwogICAgc3Jj
L21pc2MvZ2NkLmMKICAgIHNyYy9taXNjL2hibS5jCiAgICBzcmMvbWlzYy9qZC5jCiAgICBzcmMv
bWlzYy9rZWxsZXIuYwogICAgc3JjL21pc2Mva3MuYwogICAgc3JjL21pc2MvbWMxM2QuYwogICAg
c3JjL21pc2MvbWMyMWEuYwogICAgc3JjL21pc2MvbXQxLmMKICAgIHNyYy9taXNjL215Z21wLmMK
ICAgIHNyYy9taXNjL29rYWxnLmMKICAgIHNyYy9taXNjL3FtZC5jCiAgICBzcmMvbWlzYy9yZWxh
eDQuYwogICAgc3JjL21pc2MvcmdyLmMKICAgIHNyYy9taXNjL3JuZy5jCiAgICBzcmMvbWlzYy9y
bmcxLmMKICAgIHNyYy9taXNjL3JvdW5kMm4uYwogICAgc3JjL21pc2Mvc3BtLmMKICAgIHNyYy9t
aXNjL3N0cjJpbnQuYwogICAgc3JjL21pc2Mvc3RyMm51bS5jCiAgICBzcmMvbWlzYy9zdHJzcHgu
YwogICAgc3JjL21pc2Mvc3RydHJpbS5jCiAgICBzcmMvbWlzYy90cmlhbmcuYwogICAgc3JjL21p
c2Mvd2NsaXF1ZS5jCiAgICBzcmMvbWlzYy93Y2xpcXVlMS5jCiAgICBzcmMvbXBsL21wbDEuYwog
ICAgc3JjL21wbC9tcGwyLmMKICAgIHNyYy9tcGwvbXBsMy5jCiAgICBzcmMvbXBsL21wbDQuYwog
ICAgc3JjL21wbC9tcGw1LmMKICAgIHNyYy9tcGwvbXBsNi5jCiAgICBzcmMvbXBsL21wbHNxbC5j
CiAgICBzcmMvbnBwL25wcDEuYwogICAgc3JjL25wcC9ucHAyLmMKICAgIHNyYy9ucHAvbnBwMy5j
CiAgICBzcmMvbnBwL25wcDQuYwogICAgc3JjL25wcC9ucHA1LmMKICAgIHNyYy9ucHAvbnBwNi5j
CiAgICBzcmMvcHJveHkvcHJveHkuYwogICAgc3JjL3Byb3h5L3Byb3h5MS5jCiAgICBzcmMvc2lt
cGxleC9zcHhhdC5jCiAgICBzcmMvc2ltcGxleC9zcHhjaHV6Yy5jCiAgICBzcmMvc2ltcGxleC9z
cHhjaHV6ci5jCiAgICBzcmMvc2ltcGxleC9zcHhscC5jCiAgICBzcmMvc2ltcGxleC9zcHhudC5j
CiAgICBzcmMvc2ltcGxleC9zcHhwcmltLmMKICAgIHNyYy9zaW1wbGV4L3NweHByb2IuYwogICAg
c3JjL3NpbXBsZXgvc3B5Y2h1emMuYwogICAgc3JjL3NpbXBsZXgvc3B5Y2h1enIuYwogICAgc3Jj
L3NpbXBsZXgvc3B5ZHVhbC5jCiAgICBzcmMvemxpYi9hZGxlcjMyLmMKICAgIHNyYy96bGliL2Nv
bXByZXNzLmMKICAgIHNyYy96bGliL2NyYzMyLmMKICAgIHNyYy96bGliL2RlZmxhdGUuYwogICAg
c3JjL3psaWIvZ3pjbG9zZS5jCiAgICBzcmMvemxpYi9nemxpYi5jCiAgICBzcmMvemxpYi9nenJl
YWQuYwogICAgc3JjL3psaWIvZ3p3cml0ZS5jCiAgICBzcmMvemxpYi9pbmZmYXN0LmMKICAgIHNy
Yy96bGliL2luZmxhdGUuYwogICAgc3JjL3psaWIvaW5mdHJlZXMuYwogICAgc3JjL3psaWIvdHJl
ZXMuYwogICAgc3JjL3psaWIvdW5jb21wci5jCiAgICBzcmMvemxpYi96aW8uYwogICAgc3JjL3ps
aWIvenV0aWwuYwopCiMgY29uZmlnLmggY29weWluZyBmcm9tIGNvbmZpZ19WQy4gdzMyIGFuZCB3
NjQgYXJlIHNhbWUgYnV0IHdlIGNob29zZQphZGRfY3VzdG9tX2NvbW1hbmQoCiAgICBUQVJHRVQg
Z2xwayBQUkVfQlVJTEQKICAgIENPTU1BTkQKICAgICAgICAke0NNQUtFX0NPTU1BTkR9IC1FIGNv
cHlfaWZfZGlmZmVyZW50ICR7R0xQS19DT05GSUdfSF9ESVJ9L2NvbmZpZ19WQwogICAgICAgICAg
ICAke0dMUEtfQ09ORklHX0hfRElSfS9jb25maWcuaAogICAgQ09NTUVOVCAiQ29weWluZyBjb25m
aWdfVkMgdG8gY29uZmlnLmgiCiAgICBWRVJCQVRJTQopCiMgZ2xway5oIGlzIHRoZSBwdWJsaWMg
aGVhZGVyCnNldF90YXJnZXRfcHJvcGVydGllcyhnbHBrIFBST1BFUlRJRVMgUFVCTElDX0hFQURF
UiBzcmMvZ2xway5oKQojIGlmIG5vdCB1c2luZyBtdWx0aS1jb25maWcgaW5zdGFsbCwgc3VmZml4
ICJkIiB0byBnbHBrCmlmKE1TVkMgQU5EIE5PVCBHTFBLX0lOU1RBTExfTVVMVElfQ09ORklHKQog
ICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKGdscGsgUFJPUEVSVElFUyBPVVRQVVRfTkFNRSBnbHBr
JDwkPENPTkZJRzpEZWJ1Zz46ZD4pCmVuZGlmKCkKCiMgYnVpbGQgZ2xwc29sCmFkZF9leGVjdXRh
YmxlKGdscHNvbCBleGFtcGxlcy9nbHBzb2wuYykKdGFyZ2V0X2xpbmtfbGlicmFyaWVzKGdscHNv
bCBQUklWQVRFIGdscGspCiMgaWYgbm90IHVzaW5nIG11bHRpLWNvbmZpZyBpbnN0YWxsLCBzdWZm
aXggImQiIHRvIGdscHNvbAppZihNU1ZDIEFORCBOT1QgR0xQS19JTlNUQUxMX01VTFRJX0NPTkZJ
RykKICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhnbHBzb2wgUFJPUEVSVElFUyBPVVRQVVRfTkFN
RSBnbHBzb2wkPCQ8Q09ORklHOkRlYnVnPjpkPikKZW5kaWYoKQoKIyBidWlsZCBleGFtcGxlcwpp
ZihHTFBLX0JVSUxEX0VYQU1QTEVTKQogICAgYWRkX2V4ZWN1dGFibGUoaXB0c2FtcCBleGFtcGxl
cy9pcHRzYW1wLmMpCiAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoaXB0c2FtcCBQUklWQVRFIGds
cGspCiAgICBhZGRfZXhlY3V0YWJsZShtcGxzYW1wMSBleGFtcGxlcy9tcGxzYW1wMS5jKQogICAg
dGFyZ2V0X2xpbmtfbGlicmFyaWVzKG1wbHNhbXAxIFBSSVZBVEUgZ2xwaykKICAgIGFkZF9leGVj
dXRhYmxlKG1wbHNhbXAyIGV4YW1wbGVzL21wbHNhbXAyLmMpCiAgICB0YXJnZXRfbGlua19saWJy
YXJpZXMobXBsc2FtcDIgUFJJVkFURSBnbHBrKQogICAgIyBhYm9ydHMgc2luY2UgZ2xwX25ldGdl
biBkaXNhYmxlZCBkdWUgdG8gbGljZW5zaW5nIHByb2JsZW1zCiAgICAjIGFkZF9leGVjdXRhYmxl
KG5ldGdlbiBleGFtcGxlcy9uZXRnZW4uYykKICAgICMgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKG5l
dGdlbiBQUklWQVRFIGdscGspCiAgICBhZGRfZXhlY3V0YWJsZShucHBzYW1wIGV4YW1wbGVzL25w
cHNhbXAuYykKICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhucHBzYW1wIFBSSVZBVEUgZ2xwaykK
ICAgIGFkZF9leGVjdXRhYmxlKHNhbXBsZSBleGFtcGxlcy9zYW1wbGUuYykKICAgIHRhcmdldF9s
aW5rX2xpYnJhcmllcyhzYW1wbGUgUFJJVkFURSBnbHBrKQogICAgYWRkX2V4ZWN1dGFibGUoc3B4
c2FtcDEgZXhhbXBsZXMvc3B4c2FtcDEuYykKICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhzcHhz
YW1wMSBQUklWQVRFIGdscGspCiAgICBhZGRfZXhlY3V0YWJsZShzcHhzYW1wMiBleGFtcGxlcy9z
cHhzYW1wMi5jKQogICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHNweHNhbXAyIFBSSVZBVEUgZ2xw
aykKZW5kaWYoKQoKIyBhZGQgZ2xwc29sIGFzIGN0ZXN0IHRlc3QKYWRkX3Rlc3QoTkFNRSAiZ2xw
c29sX3ZlcnNpb24iIENPTU1BTkQgZ2xwc29sIC0tdmVyc2lvbikKYWRkX3Rlc3QoCiAgICBOQU1F
ICJnbHBzb2xfbXVydGFnaCIKICAgIENPTU1BTkQgZ2xwc29sIC0tbXBzICR7Q01BS0VfQ1VSUkVO
VF9TT1VSQ0VfRElSfS9leGFtcGxlcy9tdXJ0YWdoLm1wcyAtLW1heAopCiMgYWRkIGV4YW1wbGVz
IGFzIGFkZGl0aW9uYWwgdGVzdHMKaWYoR0xQS19CVUlMRF9FWEFNUExFUykKICAgIGFkZF90ZXN0
KE5BTUUgaXB0c2FtcCBDT01NQU5EIGlwdHNhbXAgV09SS0lOR19ESVJFQ1RPUlkgJHtHTFBLX0VY
QU1QTEVTX0RJUn0pCiAgICBhZGRfdGVzdChOQU1FIG1wbHNhbXAxIENPTU1BTkQgbXBsc2FtcDEg
V09SS0lOR19ESVJFQ1RPUlkgJHtHTFBLX0VYQU1QTEVTX0RJUn0pCiAgICBhZGRfdGVzdChOQU1F
IG1wbHNhbXAyIENPTU1BTkQgbXBsc2FtcDIgV09SS0lOR19ESVJFQ1RPUlkgJHtHTFBLX0VYQU1Q
TEVTX0RJUn0pCiAgICAjIGFkZF90ZXN0KE5BTUUgbmV0Z2VuIENPTU1BTkQgbmV0Z2VuIFdPUktJ
TkdfRElSRUNUT1JZICR7R0xQS19FWEFNUExFU19ESVJ9KQogICAgYWRkX3Rlc3QoTkFNRSBucHBz
YW1wIENPTU1BTkQgbnBwc2FtcCBXT1JLSU5HX0RJUkVDVE9SWSAke0dMUEtfRVhBTVBMRVNfRElS
fSkKICAgIGFkZF90ZXN0KE5BTUUgc2FtcGxlIENPTU1BTkQgc2FtcGxlIFdPUktJTkdfRElSRUNU
T1JZICR7R0xQS19FWEFNUExFU19ESVJ9KQogICAgYWRkX3Rlc3QoTkFNRSBzcHhzYW1wMSBDT01N
QU5EIHNweHNhbXAxIFdPUktJTkdfRElSRUNUT1JZICR7R0xQS19FWEFNUExFU19ESVJ9KQogICAg
YWRkX3Rlc3QoTkFNRSBzcHhzYW1wMiBDT01NQU5EIHNweHNhbXAyIFdPUktJTkdfRElSRUNUT1JZ
ICR7R0xQS19FWEFNUExFU19ESVJ9KQplbmRpZigpCgojIHRhcmdldHMgdG8gaW5zdGFsbC4gZ2xw
ayBpbmNsdWRlcyB0aGUgZ2xway5oIGhlYWRlcgpzZXQoR0xQS19JTlNUQUxMX1RBUkdFVFMgZ2xw
ayBnbHBzb2wpCiMgaW5zdGFsbCBsaWJyYXJ5IGFuZCBnbHBzb2wgd2hlbiBjbWFrZSAtLWluc3Rh
bGwgaXMgaW52b2tlZAppZihNU1ZDKQogICAgIyBEZWJ1ZyBjb25maWcgc2hvdWxkIGFsc28gaW5z
dGFsbCBQREIgZmlsZXMuIHRoZXkgZ28gdG8gbGliIGlmIGxpYnJhcmllcwogICAgIyBhcmUgc3Rh
dGljLCBiaW4gaWYgbGlicmFyaWVzIGFyZSBETEwgZm9yIGRlYnVnZ2luZyBjb252ZW5pZW5jZQog
ICAgaWYoQlVJTERfU0hBUkVEX0xJQlMpCiAgICAgICAgc2V0KEdMUEtfUERCX0lOU1RBTExfU1VC
RElSIGJpbikKICAgIGVsc2UoKQogICAgICAgIHNldChHTFBLX1BEQl9JTlNUQUxMX1NVQkRJUiBs
aWIpCiAgICBlbmRpZigpCiAgICAjIG11bHRpLWNvbmZpZyBpbnN0YWxsYXRpb24KICAgIGlmKEdM
UEtfSU5TVEFMTF9NVUxUSV9DT05GSUcpCiAgICAgICAgaW5zdGFsbCgKICAgICAgICAgICAgVEFS
R0VUUyAke0dMUEtfSU5TVEFMTF9UQVJHRVRTfQogICAgICAgICAgICBSVU5USU1FIERFU1RJTkFU
SU9OIGJpbi8kPENPTkZJRz4KICAgICAgICAgICAgTElCUkFSWSBERVNUSU5BVElPTiBsaWIvJDxD
T05GSUc+CiAgICAgICAgICAgIEFSQ0hJVkUgREVTVElOQVRJT04gbGliLyQ8Q09ORklHPgogICAg
ICAgICAgICBQVUJMSUNfSEVBREVSIERFU1RJTkFUSU9OIGluY2x1ZGUKICAgICAgICAgICAgQ09N
UE9ORU5UIGdscGsKICAgICAgICApCiAgICAgICAgIyBEZWJ1ZyBjb25maWcgc2hvdWxkIGFsc28g
aW5zdGFsbCBQREIgZmlsZXMuIHRoZXkgZ28gdG8gbGliIGlmCiAgICAgICAgIyBsaWJyYXJpZXMg
YXJlIHN0YXRpYywgYmluIGlmIGxpYnJhcmllcyBhcmUgRExMCiAgICAgICAgaWYoQlVJTERfU0hB
UkVEX0xJQlMpCiAgICAgICAgICAgIHNldChHTFBLX1BEQl9JTlNUQUxMX1NVQkRJUiBiaW4pCiAg
ICAgICAgZWxzZSgpCiAgICAgICAgICAgIHNldChHTFBLX1BEQl9JTlNUQUxMX1NVQkRJUiBsaWIp
CiAgICAgICAgZW5kaWYoKQogICAgICAgICMgaW5zdGFsbCBQREIgZmlsZSBmb3IgRGVidWcgY29u
ZmlnIG9ubHkKICAgICAgICBpbnN0YWxsKAogICAgICAgICAgICBGSUxFUyAke0NNQUtFX0NVUlJF
TlRfQklOQVJZX0RJUn0vRGVidWcvZ2xway5wZGIKICAgICAgICAgICAgQ09ORklHVVJBVElPTlMg
RGVidWcKICAgICAgICAgICAgREVTVElOQVRJT04gJHtHTFBLX1BEQl9JTlNUQUxMX1NVQkRJUn0v
RGVidWcKICAgICAgICAgICAgQ09NUE9ORU5UIGdscGsKICAgICAgICApCiAgICAjIGZsYXQgaW5z
dGFsbGF0aW9uIHdoZXJlIGFydGlmYWN0cyBhcmUgc3VmZml4ZWQgd2l0aCAiZCIKICAgIGVsc2Uo
KQogICAgICAgIGluc3RhbGwoCiAgICAgICAgICAgIFRBUkdFVFMgJHtHTFBLX0lOU1RBTExfVEFS
R0VUU30KICAgICAgICAgICAgUlVOVElNRSBERVNUSU5BVElPTiBiaW4KICAgICAgICAgICAgTElC
UkFSWSBERVNUSU5BVElPTiBsaWIKICAgICAgICAgICAgQVJDSElWRSBERVNUSU5BVElPTiBsaWIK
ICAgICAgICAgICAgUFVCTElDX0hFQURFUiBERVNUSU5BVElPTiBpbmNsdWRlCiAgICAgICAgICAg
IENPTVBPTkVOVCBnbHBrCiAgICAgICAgKQogICAgICAgIGluc3RhbGwoCiAgICAgICAgICAgIEZJ
TEVTICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9EZWJ1Zy9nbHBrZC5wZGIKICAgICAgICAg
ICAgQ09ORklHVVJBVElPTlMgRGVidWcKICAgICAgICAgICAgREVTVElOQVRJT04gJHtHTFBLX1BE
Ql9JTlNUQUxMX1NVQkRJUn0KICAgICAgICAgICAgQ09NUE9ORU5UIGdscGsKICAgICAgICApCiAg
ICBlbmRpZigpCiMgdHlwaWNhbCBmbGF0ICpuaXggaW5zdGFsbGF0aW9uCiMgVE9ETzogZm9yICpu
aXgsIG5lZWQgcGtnLWNvbmZpZyBzdHVmZiB0b28sIGV0Yy4KZWxzZSgpCiAgICBpbnN0YWxsKAog
ICAgICAgIFRBUkdFVFMgJHtHTFBLX0lOU1RBTExfVEFSR0VUU30KICAgICAgICBSVU5USU1FIERF
U1RJTkFUSU9OIGJpbgogICAgICAgIExJQlJBUlkgREVTVElOQVRJT04gbGliCiAgICAgICAgQVJD
SElWRSBERVNUSU5BVElPTiBsaWIKICAgICAgICBQVUJMSUNfSEVBREVSIERFU1RJTkFUSU9OIGlu
Y2x1ZGUKICAgICAgICBDT01QT05FTlQgZ2xwawogICAgKQplbmRpZigpCg==
--=-U8NgfZfZuB08f38kYF8x--