Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 22 Sep 2012 21:12:44 -0700
From:      Garrett Cooper <yanegomi@gmail.com>
To:        freebsd-toolchain@freebsd.org
Cc:        freebsd-hackers@freebsd.org, Bruce Evans <brde@optusnet.com.au>
Subject:   Re: [CFT/RFC]: refactor bsd.prog.mk to understand multiple programs instead of a singular program
Message-ID:  <CAGH67wSuX7zJrTb5GehQWHKqYKog-aTwkiNw5CSJLrzftzKTaA@mail.gmail.com>
In-Reply-To: <CAGH67wRkOmy7rWLkxXnT2155PuSQpwOMyu7dTAKeO1WW2dju7g@mail.gmail.com>
References:  <CAGH67wRkOmy7rWLkxXnT2155PuSQpwOMyu7dTAKeO1WW2dju7g@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
--e89a8fb206686603e204ca56aff2
Content-Type: text/plain; charset=ISO-8859-1

On Sun, Sep 2, 2012 at 11:01 PM, Garrett Cooper <yanegomi@gmail.com> wrote:
> Hello,
>     I've been a bit busy working on porting over ATF from NetBSD, and
> one of the pieces that's currently not available in FreeBSD that's
> available in NetBSD is the ability to understand and compile multiple
> programs. In order to do this I had to refactor bsd.prog.mk (a lot).
> The attached patch is the end result so far, and I was wondering if
> anyone could please review it and/or test it (outside of me doing so).
> I wrote over 40 tests, but it's not exercising everything, and I would
> like for someone to please review/test this out who has an interest in
> NLS support (ala bsd.nls.mk) in particular. AFAICT this is the only
> gap that I couldn't resolve right away (there isn't a ton of recent
> documentation on how to use bsd.nls.mk).
>     I'll run a micro benchmark and buildworld a few times (in
> progress) with and without the change to measure the performance
> effect.
>     Any assistance would be much appreciated.

    I've attached an updated version of the patch (run through
buildworld successfully multiple times; make universe successfully;
going to submit for an -exp run). I needed to modify bsd.crunchgen.mk
to grok OBJS.${PROG}, but apart from that backwards compatibility has
been maintained -- sans-INSTALLFLAGS_EDIT (does anyone still use that
undocumented functionality?).
    Performance wise, it's slightly slower on my W3520 with the
change, but not by much (~20 seconds).
    As always, questions and comments are welcome, and if someone has
a chance, please review the proposed patch.
Thanks!
-Garrett

Without the change:

$ python calc_runtime.py bw.*_without.log | ministat -w 72
x <stdin>
+------------------------------------------------------------------------+
|     x                                                                  |
|x    x  x          x                     x         xx      x           x|
|     |_________________________A_________M________________|             |
+------------------------------------------------------------------------+
    N           Min           Max        Median           Avg        Stddev
x  10           919          1010           972         958.9     33.994934

With the change:

$ python calc_runtime.py bw.*.log | ministat -w 72
x <stdin>
+------------------------------------------------------------------------+
|                                                       x                |
|xx       x            x      x                         x  x           xx|
|         |___________________________A_________________M_________|      |
+------------------------------------------------------------------------+
    N           Min           Max        Median           Avg        Stddev
x  10           940          1002           988         972.3     24.476973

make universe results:

# make universe MAKE_JUST_WORLDS=y
--------------------------------------------------------------
>>> make universe started on Tue Sep 18 09:30:04 PDT 2012
--------------------------------------------------------------
>> amd64 started on Tue Sep 18 09:30:04 PDT 2012
>> amd64.amd64 buildworld started on Tue Sep 18 09:30:04 PDT 2012
>> amd64.amd64 buildworld completed on Tue Sep 18 11:20:19 PDT 2012
>> amd64 completed on Tue Sep 18 11:20:19 PDT 2012
>> arm started on Tue Sep 18 11:20:19 PDT 2012
>> arm.arm buildworld started on Tue Sep 18 11:20:19 PDT 2012
>> arm.arm buildworld completed on Tue Sep 18 12:25:24 PDT 2012
>> arm.armeb buildworld started on Tue Sep 18 12:25:24 PDT 2012
>> arm.armeb buildworld completed on Tue Sep 18 13:30:25 PDT 2012
>> arm.armv6 buildworld started on Tue Sep 18 13:30:25 PDT 2012
>> arm.armv6 buildworld completed on Tue Sep 18 14:35:14 PDT 2012
>> arm.armv6eb buildworld started on Tue Sep 18 14:35:14 PDT 2012
>> arm.armv6eb buildworld completed on Tue Sep 18 15:40:05 PDT 2012
>> arm completed on Tue Sep 18 15:40:05 PDT 2012
>> i386 started on Tue Sep 18 15:40:05 PDT 2012
>> i386.i386 buildworld started on Tue Sep 18 15:40:05 PDT 2012
>> i386.i386 buildworld completed on Tue Sep 18 16:56:06 PDT 2012
>> i386 completed on Tue Sep 18 16:56:06 PDT 2012
>> ia64 started on Tue Sep 18 16:56:06 PDT 2012
>> ia64.ia64 buildworld started on Tue Sep 18 16:56:06 PDT 2012
>> ia64.ia64 buildworld completed on Tue Sep 18 18:27:49 PDT 2012
>> ia64 completed on Tue Sep 18 18:27:49 PDT 2012
>> mips started on Tue Sep 18 18:27:49 PDT 2012
>> mips.mipsel buildworld started on Tue Sep 18 18:27:49 PDT 2012
>> mips.mipsel buildworld completed on Tue Sep 18 19:34:50 PDT 2012
>> mips.mips buildworld started on Tue Sep 18 19:34:50 PDT 2012
>> mips.mips buildworld completed on Tue Sep 18 20:41:49 PDT 2012
>> mips.mips64el buildworld started on Tue Sep 18 20:41:49 PDT 2012
>> mips.mips64el buildworld completed on Tue Sep 18 21:49:21 PDT 2012
>> mips.mips64 buildworld started on Tue Sep 18 21:49:21 PDT 2012
>> mips.mips64 buildworld completed on Tue Sep 18 22:57:13 PDT 2012
>> mips.mipsn32 buildworld started on Tue Sep 18 22:57:13 PDT 2012
>> mips.mipsn32 buildworld completed on Wed Sep 19 00:04:43 PDT 2012
>> mips completed on Wed Sep 19 00:04:43 PDT 2012
>> pc98 started on Wed Sep 19 00:04:43 PDT 2012
>> pc98.i386 buildworld started on Wed Sep 19 00:04:43 PDT 2012
>> pc98.i386 buildworld completed on Wed Sep 19 01:20:42 PDT 2012
>> pc98 completed on Wed Sep 19 01:20:42 PDT 2012
>> powerpc started on Wed Sep 19 01:20:42 PDT 2012
>> powerpc.powerpc buildworld started on Wed Sep 19 01:20:42 PDT 2012
>> powerpc.powerpc buildworld completed on Wed Sep 19 02:37:34 PDT 2012
>> powerpc.powerpc64 buildworld started on Wed Sep 19 02:37:34 PDT 2012
>> powerpc.powerpc64 buildworld completed on Wed Sep 19 04:28:10 PDT 2012
>> powerpc completed on Wed Sep 19 04:28:10 PDT 2012
>> sparc64 started on Wed Sep 19 04:28:10 PDT 2012
>> sparc64.sparc64 buildworld started on Wed Sep 19 04:28:10 PDT 2012
>> sparc64.sparc64 buildworld completed on Wed Sep 19 05:42:30 PDT 2012
>> sparc64 completed on Wed Sep 19 05:42:30 PDT 2012
--------------------------------------------------------------
>>> make universe completed on Wed Sep 19 05:42:30 PDT 2012
                      (started Tue Sep 18 09:30:04 PDT 2012)
--------------------------------------------------------------

--e89a8fb206686603e204ca56aff2
Content-Type: application/octet-stream; 
	name="share-mk-bsd-prog-mk-CURRENT.patch"
Content-Disposition: attachment; filename="share-mk-bsd-prog-mk-CURRENT.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_h7fmqx4g0

SW5kZXg6IHNoYXJlL21rL2JzZC5jcnVuY2hnZW4ubWsKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2hhcmUvbWsv
YnNkLmNydW5jaGdlbi5tawkocmV2aXNpb24gMjQwNjg5KQorKysgc2hhcmUvbWsvYnNkLmNydW5j
aGdlbi5tawkod29ya2luZyBjb3B5KQpAQCAtMTMsNiArMTMsNyBAQAogIyAgICAgICBsb2NhbCBh
cmNoaXRlY3R1cmUuCiAjCiAjIFNwZWNpYWwgb3B0aW9ucyBjYW4gYmUgc3BlY2lmaWVkIGZvciBp
bmRpdmlkdWFsIHByb2dyYW1zCisjICBDUlVOQ0hfT0JKVkFSXyQoUCk6IE9CSlMgdmFyaWFibGUg
Zm9yIHByb2dyYW0gJChQKTsgZGVmYXVsdHMgdG8gT0JKUy4ke1BST0d9LgogIyAgQ1JVTkNIX1NS
Q0RJUl8kKFApOiBiYXNlIHNvdXJjZSBkaXJlY3RvcnkgZm9yIHByb2dyYW0gJChQKQogIyAgQ1JV
TkNIX0JVSUxET1BUU18kKFApOiBhZGRpdGlvbmFsIGJ1aWxkIG9wdGlvbnMgZm9yICQoUCkKICMg
IENSVU5DSF9BTElBU18kKFApOiBhZGRpdGlvbmFsIG5hbWVzIHRvIGJlIHVzZWQgZm9yICQoUCkK
QEAgLTQ5LDYgKzUwLDcgQEAKICMgZXhjZXB0IGZvciB0aG9zZSB0aGF0IGdldCBzdXBwcmVzc2Vk
LgogLmZvciBEIGluICQoQ1JVTkNIX1NSQ0RJUlMpCiAuZm9yIFAgaW4gJChDUlVOQ0hfUFJPR1Nf
JChEKSkKK0NSVU5DSF9PQkpWQVJfJHtQfT89CSdPQkpTLiQke1BST0d9JwogLmlmZGVmIENSVU5D
SF9TUkNESVJfJHtQfQogJChPVVRQVVRTKTogJChDUlVOQ0hfU1JDRElSXyR7UH0pL01ha2VmaWxl
CiAuZWxzZQpAQCAtOTUsNiArOTcsNyBAQAogLmVsc2UKIAllY2hvIHNwZWNpYWwgJChQKSBidWls
ZG9wdHMgRElSUFJGWD0ke0RJUlBSRlh9JHtQfS8gPj4kKC5UQVJHRVQpCiAuZW5kaWYKKwllY2hv
IHNwZWNpYWwgJChQKSBvYmp2YXIgJChDUlVOQ0hfT0JKVkFSXyR7UH0pID4+ICQoLlRBUkdFVCkK
IC5mb3IgQSBpbiAkKENSVU5DSF9BTElBU18kKFApKQogCWVjaG8gbG4gJChQKSAkKEEpID4+JCgu
VEFSR0VUKQogLmVuZGZvcgpJbmRleDogc2hhcmUvbWsvYnNkLmR0cmFjZS5tawo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBzaGFyZS9tay9ic2QuZHRyYWNlLm1rCShyZXZpc2lvbiAyNDA2ODkpCisrKyBzaGFyZS9t
ay9ic2QuZHRyYWNlLm1rCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBACiBEUEFERCs9
JHtMSUJFTEZ9CiBMREFERCs9LWxlbGYKIAotLmlmIGRlZmluZWQoUFJPRykKKy5pZiBkZWZpbmVk
KFBST0cpIHx8IGRlZmluZWQoUFJPR1MpCiBfRFRSQUNFTElOS0lORz0ke09CSlN9CiBPQkpTKz0k
e0RUUkFDRU9CSlN9CiAuZWxzZQpJbmRleDogc2hhcmUvbWsvYnNkLnByb2cubWsKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gc2hhcmUvbWsvYnNkLnByb2cubWsJKHJldmlzaW9uIDI0MDY4OSkKKysrIHNoYXJlL21r
L2JzZC5wcm9nLm1rCSh3b3JraW5nIGNvcHkpCkBAIC01LDIyMiArNSwzMzYgQEAKIAogLlNVRkZJ
WEVTOiAub3V0IC5vIC5jIC5jYyAuY3BwIC5jeHggLkMgLm0gLnkgLmwgLmxuIC5zIC5TIC5hc20K
IAotIyBYWFggVGhlIHVzZSBvZiBDT1BUUyBpbiBtb2Rlcm4gbWFrZWZpbGVzIGlzIGRpc2NvdXJh
Z2VkLgorLmlmICR7TUtfTUFOfSA9PSAibm8iCitOT19NQU49CisuZW5kaWYKKworIyBMZWdhY3kg
a25vYnMKKy5pZiBkZWZpbmVkKFBST0cpIHx8IGRlZmluZWQoUFJPR19DWFgpCisuIGlmIGRlZmlu
ZWQoUFJPRykKK1BST0dTPQkJJHtQUk9HfQorLiBlbmRpZgorLiBpZiBkZWZpbmVkKFBST0dfQ1hY
KQorUFJPR1M9CQkke1BST0dfQ1hYfQorUFJPR1NfQ1hYPQkke1BST0dfQ1hYfQorLiBlbmRpZgor
IyBMb29wIG9uY2UgdG8ga2VlcCBwYXR0ZXJuIGFuZCBhdm9pZCBuYW1lc3BhY2UgcG9sbHV0aW9u
CisuIGZvciBfUCBpbiAke1BST0dTfQorLiAgaWYgZGVmaW5lZChJTlRFUk5BTFBST0cpCitJTlRF
Uk5BTFBST0cuJHtfUH09CisuICBlbmRpZgorLiAgaWYgIWRlZmluZWQoTk9fTUFOKQorLiAgIGlm
IGRlZmluZWQoTUFOKQorTUFOLiR7X1B9PQkke01BTn0KKy4gICBlbHNlCisuICAgIGZvciBzZWN0
IGluIDEgMWFvdXQgMiAzIDQgNSA2IDcgOCA5CisuICAgICBpZiBkZWZpbmVkKE1BTiR7c2VjdH0p
CitNQU4uJHtfUH09CSR7TUFOJHtzZWN0fX0KKy4gICAgIGVuZGlmCisuICAgIGVuZGZvcgorLiAg
IGVuZGlmCisuICBlbmRpZiAjIGRlZmluZWQoTk9fTUFOKQorLiAgaWYgZGVmaW5lZChOTFNOQU1F
KSAmJiAhZW1wdHkoTkxTTkFNRSkKK05MU05BTUUuJHtQfTo9CSR7TkxTTkFNRX0KKy4gIGVuZGlm
CisuICBpZiBkZWZpbmVkKE9CSlMpCitPQkpTLiR7X1B9Oj0JJHtPQkpTfQorLiAgZW5kaWYKKy4g
IGlmIGRlZmluZWQoUFJFQ0lPVVNQUk9HKQorUFJFQ0lPVVNQUk9HLiR7X1B9PQorLiAgZW5kaWYK
Ky4gIGlmIGRlZmluZWQoUFJPR05BTUUpCitQUk9HTkFNRS4ke19QfT0JJHtQUk9HTkFNRX0KKy4g
IGVuZGlmCisuICBpZiBkZWZpbmVkKFNSQ1MpCitTUkNTLiR7X1B9Oj0JJHtTUkNTfQorLiAgZW5k
aWYKKy4gZW5kZm9yCisuZWxzZSAjICFkZWZpbmVkKFBST0cpICYmICFkZWZpbmVkKFBST0dfQ1hY
KQorLiBpZiBkZWZpbmVkKFBST0dTX0NYWCkgJiYgIWVtcHR5KFBST0dTX0NYWCkKK1BST0dTKz0J
CSR7UFJPR1NfQ1hYfQorLiBlbmRpZgorLmVuZGlmICMgZGVmaW5lZChQUk9HKSB8fCBkZWZpbmVk
KFBST0dfQ1hYKQorCisuaWYgZGVmaW5lZChQUk9HU19DWFgpICYmICFlbXB0eShQUk9HU19DWFgp
CisuIGZvciBfUCBpbiAke1BST0dTX0NYWH0KK1BST0dfQ1hYLiR7X1B9PQorLiBlbmRmb3IKKy5l
bmRpZgorCisjIEF2b2lkIHJlY3Vyc2l2ZSB2YXJpYWJsZXMKKy51bmRlZiBOTFNOQU1FCisKIC5p
ZiBkZWZpbmVkKENPUFRTKQogQ0ZMQUdTKz0ke0NPUFRTfQogLmVuZGlmCiAKKy5pZiBkZWZpbmVk
KERFQlVHX0ZMQUdTKQorLiBpZiAke01LX0NURn0gIT0gIm5vIiAmJiAke0RFQlVHX0ZMQUdTOk0t
Z30gIT0gIiIKK0NURkZMQUdTKz0gLWcKKy4gZW5kaWYKK0NGTEFHUys9JHtERUJVR19GTEFHU30K
K0NYWEZMQUdTKz0ke0RFQlVHX0ZMQUdTfQorLmVuZGlmCisKK1NUUklQPz0JCS1zCisKIC5pZiAk
e01LX0FTU0VSVF9ERUJVR30gPT0gIm5vIgogQ0ZMQUdTKz0gLUROREVCVUcKIE5PX1dFUlJPUj0K
IC5lbmRpZgogCi0uaWYgZGVmaW5lZChERUJVR19GTEFHUykKLUNGTEFHUys9JHtERUJVR19GTEFH
U30KLUNYWEZMQUdTKz0ke0RFQlVHX0ZMQUdTfQorLmZvciBfUCBpbiAke1BST0dTfQogCi0uaWYg
JHtNS19DVEZ9ICE9ICJubyIgJiYgJHtERUJVR19GTEFHUzpNLWd9ICE9ICIiCi1DVEZGTEFHUys9
IC1nCi0uZW5kaWYKLS5lbmRpZgorQklORElSLiR7X1B9Pz0JJHtCSU5ESVJ9CitCSU5HUlAuJHtf
UH0/PQkke0JJTkdSUH0KK0JJTk1PREUuJHtfUH0/PQkke0JJTk1PREV9CitCSU5PV04uJHtfUH0/
PQkke0JJTk9XTn0KIAotLmlmIGRlZmluZWQoQ1JVTkNIX0NGTEFHUykKLUNGTEFHUys9JHtDUlVO
Q0hfQ0ZMQUdTfQotLmVuZGlmCitDRkxBR1MuJHtfUH0rPQkke0NGTEFHU30KK0NYWEZMQUdTLiR7
X1B9Kz0gJHtDWFhGTEFHU30KK0RQQURELiR7X1B9Kz0JJHtEUEFERH0KK0xEQURELiR7X1B9Kz0J
JHtMREFERH0KK0xERkxBR1MuJHtfUH0rPQkke0xERkxBR1N9CiAKLS5pZiAhZGVmaW5lZChERUJV
R19GTEFHUykKLVNUUklQPz0JLXMKLS5lbmRpZgorSU5TVEFMTEZMQUdTLiR7X1B9Pz0gJHtJTlNU
QUxMRkxBR1N9CiAKLS5pZiBkZWZpbmVkKE5PX1NIQVJFRCkgJiYgKCR7Tk9fU0hBUkVEfSAhPSAi
bm8iICYmICR7Tk9fU0hBUkVEfSAhPSAiTk8iKQotTERGTEFHUys9IC1zdGF0aWMKLS5lbmRpZgor
LiBpZiBkZWZpbmVkKFBSRUNJT1VTUFJPRy4ke19QfSkKKy4gIGlmICFkZWZpbmVkKE5PX0ZTQ0hH
KSAmJiAhZGVmaW5lZChOT19GU0NIRy4ke19QfSkKK0lOU1RBTExGTEFHUy4ke19QfSs9IC1mc2No
ZworLiAgZW5kaWYKK0lOU1RBTExGTEFHUy4ke19QfSs9IC1TCisuIGVuZGlmCiAKLS5pZiBkZWZp
bmVkKFBST0dfQ1hYKQotUFJPRz0JJHtQUk9HX0NYWH0KLS5lbmRpZgorTk9fU0hBUkVELiR7X1B9
Pz0JJHtOT19TSEFSRUR9CiAKLS5pZiBkZWZpbmVkKFBST0cpCi0uaWYgZGVmaW5lZChTUkNTKQor
LiBpZiAhZGVmaW5lZChOTFNESVIuJHtfUH0pCitOTFNESVIuJHtfUH06PQkke05MU0RJUn0KKy4g
ZW5kaWYKKy4gdW5kZWYgTkxTRElSCiAKLU9CSlMrPSAgJHtTUkNTOk4qLmg6UjpTLyQvLm8vZ30K
Ky4gaWYgIWVtcHR5KE5PX1NIQVJFRC4ke19QfSkgJiYgJHtOT19TSEFSRUQuJHtfUH06dGx9ICE9
ICJubyIKK0xERkxBR1MuJHtfUH0rPSAtc3RhdGljCisuIGVuZGlmCiAKLS5pZiB0YXJnZXQoYmVm
b3JlbGlua2luZykKLSR7UFJPR306ICR7T0JKU30gYmVmb3JlbGlua2luZwotLmVsc2UKLSR7UFJP
R306ICR7T0JKU30KLS5lbmRpZgotLmlmIGRlZmluZWQoUFJPR19DWFgpCi0JJHtDWFh9ICR7Q1hY
RkxBR1N9ICR7TERGTEFHU30gLW8gJHsuVEFSR0VUfSAke09CSlN9ICR7TERBRER9Ci0uZWxzZQot
CSR7Q0N9ICR7Q0ZMQUdTfSAke0xERkxBR1N9IC1vICR7LlRBUkdFVH0gJHtPQkpTfSAke0xEQURE
fQotLmVuZGlmCi0uaWYgJHtNS19DVEZ9ICE9ICJubyIKLQkke0NURk1FUkdFfSAke0NURkZMQUdT
fSAtbyAkey5UQVJHRVR9ICR7T0JKU30KLS5lbmRpZgorLiBpZiBkZWZpbmVkKFNSQ1MuJHtfUH0p
CiAKLS5lbHNlCSMgIWRlZmluZWQoU1JDUykKK19TUkNTOj0JCSR7U1JDUy4ke19QfX0KK09CSlMu
JHtfUH0rPQkke19TUkNTOk4qLmg6UjpTLyQvLm8vZ30KIAotLmlmICF0YXJnZXQoJHtQUk9HfSkK
LS5pZiBkZWZpbmVkKFBST0dfQ1hYKQotU1JDUz0JJHtQUk9HfS5jYwotLmVsc2UKLVNSQ1M9CSR7
UFJPR30uYwotLmVuZGlmCisuICBpZiB0YXJnZXQoYmVmb3JlbGlua2luZykKKyR7X1B9OiAke09C
SlMuJHtfUH19IGJlZm9yZWxpbmtpbmcKKy4gIGVsc2UKKyR7X1B9OiAke09CSlMuJHtfUH19Cisu
ICBlbmRpZgorLiAgaWYgZGVmaW5lZChQUk9HX0NYWC4ke19QfSkKKwkke0NYWH0gJHtDWFhGTEFH
Uy4ke19QfX0gJHtMREZMQUdTLiR7X1B9fSAtbyAkey5UQVJHRVR9ICR7T0JKUy4ke19QfX0gXAor
CSAgICAke0xEQURELiR7X1B9fQorLiAgZWxzZQorCSR7Q0N9ICR7Q0ZMQUdTLiR7X1B9fSAke0xE
RkxBR1MuJHtfUH19IC1vICR7LlRBUkdFVH0gJHtPQkpTLiR7X1B9fSBcCisJICAgICR7TERBREQu
JHtfUH19CisuICBlbmRpZgorLiAgaWYgJHtNS19DVEZ9ICE9ICJubyIKKwkke0NURk1FUkdFfSAk
e0NURkZMQUdTfSAtbyAkey5UQVJHRVR9ICR7T0JKUy4ke19QfX0KKy4gIGVuZGlmCiAKKy4gZWxz
ZSAjICFkZWZpbmVkKFNSQ1MuJHtfUH0pCisKKy4gIGlmICF0YXJnZXQoJHtfUH0pCisuICAgaWYg
ZGVmaW5lZChQUk9HX0NYWC4ke19QfSkKK1NSQ1MuJHtfUH0/PQkke19QfS5jYworLiAgIGVsc2UK
K1NSQ1MuJHtfUH0/PQkke19QfS5jCisuICAgZW5kaWYKKwogIyBBbHdheXMgbWFrZSBhbiBpbnRl
cm1lZGlhdGUgb2JqZWN0IGZpbGUgYmVjYXVzZToKICMgLSBpdCBzYXZlcyB0aW1lIHJlYnVpbGRp
bmcgd2hlbiBvbmx5IHRoZSBsaWJyYXJ5IGhhcyBjaGFuZ2VkCiAjIC0gdGhlIG5hbWUgb2YgdGhl
IG9iamVjdCBnZXRzIHB1dCBpbnRvIHRoZSBleGVjdXRhYmxlIHN5bWJvbCB0YWJsZSBpbnN0ZWFk
IG9mCiAjICAgdGhlIG5hbWUgb2YgYSB2YXJpYWJsZSB0ZW1wb3Jhcnkgb2JqZWN0LgogIyAtIGl0
J3MgdXNlZnVsIHRvIGtlZXAgb2JqZWN0cyBhcm91bmQgZm9yIGNydW5jaGluZy4KLU9CSlM9CSR7
UFJPR30ubworT0JKUy4ke19QfTo9CSR7X1B9Lm8KIAotLmlmIHRhcmdldChiZWZvcmVsaW5raW5n
KQotJHtQUk9HfTogJHtPQkpTfSBiZWZvcmVsaW5raW5nCi0uZWxzZQotJHtQUk9HfTogJHtPQkpT
fQotLmVuZGlmCi0uaWYgZGVmaW5lZChQUk9HX0NYWCkKLQkke0NYWH0gJHtDWFhGTEFHU30gJHtM
REZMQUdTfSAtbyAkey5UQVJHRVR9ICR7T0JKU30gJHtMREFERH0KLS5lbHNlCi0JJHtDQ30gJHtD
RkxBR1N9ICR7TERGTEFHU30gLW8gJHsuVEFSR0VUfSAke09CSlN9ICR7TERBRER9Ci0uZW5kaWYK
LS5pZiAke01LX0NURn0gIT0gIm5vIgotCSR7Q1RGTUVSR0V9ICR7Q1RGRkxBR1N9IC1vICR7LlRB
UkdFVH0gJHtPQkpTfQotLmVuZGlmCi0uZW5kaWYKKy4gICBpZiB0YXJnZXQoYmVmb3JlbGlua2lu
ZykKKyR7X1B9OiAke09CSlMuJHtfUH19IGJlZm9yZWxpbmtpbmcKKy4gICBlbHNlCiske19QfTog
JHtPQkpTLiR7X1B9fQorLiAgIGVuZGlmICMgdGFyZ2V0KGJlZm9yZWxpbmtpbmcpCisuICAgaWYg
ZGVmaW5lZChQUk9HX0NYWC4ke19QfSkKKwkke0NYWH0gJHtDWFhGTEFHUy4ke19QfX0gJHtMREZM
QUdTLiR7X1B9fSAtbyAkey5UQVJHRVR9ICR7T0JKUy4ke19QfX0gXAorCSAgICAke0xEQURELiR7
X1B9fQorLiAgIGVsc2UKKwkke0NDfSAke0NGTEFHUy4ke19QfX0gJHtMREZMQUdTLiR7X1B9fSAt
byAkey5UQVJHRVR9ICR7T0JKUy4ke19QfX0gXAorCSAgICAke0xEQURELiR7X1B9fQorLiAgIGVu
ZGlmCisuICAgaWYgJHtNS19DVEZ9ICE9ICJubyIKKwkke0NURk1FUkdFfSAke0NURkZMQUdTfSAt
byAkey5UQVJHRVR9ICR7T0JKUy4ke19QfX0KKy4gICBlbmRpZgogCi0uZW5kaWYKKy4gIGVuZGlm
ICMgIXRhcmdldCgke19QfSkKIAotLmlmCSR7TUtfTUFOfSAhPSAibm8iICYmICFkZWZpbmVkKE1B
TikgJiYgXAotCSFkZWZpbmVkKE1BTjEpICYmICFkZWZpbmVkKE1BTjIpICYmICFkZWZpbmVkKE1B
TjMpICYmIFwKLQkhZGVmaW5lZChNQU40KSAmJiAhZGVmaW5lZChNQU41KSAmJiAhZGVmaW5lZChN
QU42KSAmJiBcCi0JIWRlZmluZWQoTUFONykgJiYgIWRlZmluZWQoTUFOOCkgJiYgIWRlZmluZWQo
TUFOOSkgJiYgXAotCSFkZWZpbmVkKE1BTjFhb3V0KQotTUFOPQkke1BST0d9LjEKLU1BTjE9CSR7
TUFOfQotLmVuZGlmCi0uZW5kaWYKKy4gZW5kaWYgIyBkZWZpbmVkKFNSQ1MuJHtfUH0pCiAKLWFs
bDogb2Jqd2FybiAke1BST0d9ICR7U0NSSVBUU30KLS5pZiAke01LX01BTn0gIT0gIm5vIgorQ0xF
QU5GSUxFUys9IAkke09CSlMuJHtfUH19CisKKy5lbmRmb3IgIyBmb3IgX1AgaW4gJHtQUk9HU30K
KworYWxsOiBvYmp3YXJuICR7UFJPR1N9ICR7U0NSSVBUU30KKworLmlmICFkZWZpbmVkKE5PX01B
TikKKy4gZm9yIF9QIGluICR7UFJPR1N9CitNQU4uJHtfUH0/PQkke19QfS4xCitNQU46PQkJJHtN
QU4uJHtfUH19CisuICBpbmNsdWRlIDxic2QubWFuLm1rPgorLiBlbmRmb3IKKy4gaWYgdGFyZ2V0
KF9tYW5wYWdlcykgIyBic2QubWFuLm1rIHdhcyBpbmNsdWRlZAogYWxsOiBfbWFucGFnZXMKKy4g
ZW5kaWYKIC5lbmRpZgogCi0uaWYgZGVmaW5lZChQUk9HKQotQ0xFQU5GSUxFUys9ICR7UFJPR30K
LS5lbmRpZgorQ0xFQU5GSUxFUys9CSR7UFJPR1N9CiAKLS5pZiBkZWZpbmVkKE9CSlMpCi1DTEVB
TkZJTEVTKz0gJHtPQkpTfQotLmVuZGlmCi0KIC5pbmNsdWRlIDxic2QubGlibmFtZXMubWs+CiAK
LS5pZiBkZWZpbmVkKFBST0cpCiBfRVhUUkFERVBFTkQ6Ci0uaWYgZGVmaW5lZChMREZMQUdTKSAm
JiAhZW1wdHkoTERGTEFHUzpNLW5vc3RkbGliKQotLmlmIGRlZmluZWQoRFBBREQpICYmICFlbXB0
eShEUEFERCkKLQllY2hvICR7UFJPR306ICR7RFBBRER9ID4+ICR7REVQRU5ERklMRX0KLS5lbmRp
ZgotLmVsc2UKLQllY2hvICR7UFJPR306ICR7TElCQ30gJHtEUEFERH0gPj4gJHtERVBFTkRGSUxF
fQotLmlmIGRlZmluZWQoUFJPR19DWFgpCi0uaWYgIWVtcHR5KENYWEZMQUdTOk0tc3RkbGliPWxp
YmMrKykKLQllY2hvICR7UFJPR306ICR7TElCQ1BMVVNQTFVTfSA+PiAke0RFUEVOREZJTEV9Ci0u
ZWxzZQotCWVjaG8gJHtQUk9HfTogJHtMSUJTVERDUExVU1BMVVN9ID4+ICR7REVQRU5ERklMRX0K
LS5lbmRpZgotLmVuZGlmCi0uZW5kaWYKLS5lbmRpZgorLmZvciBfUCBpbiAke1BST0dTfQorLiBp
ZiAhZW1wdHkoTERGTEFHUy4ke1B9Ok0tbm9zdGRsaWIpCisuICBpZiAhZW1wdHkoRFBBREQuJHtf
UH0pCisJZWNobyAke19QfTogJHtEUEFERC4ke19QfX0gPj4gJHtERVBFTkRGSUxFfQorLiAgZW5k
aWYKKy4gZWxzZQorCWVjaG8gJHtfUH06ICR7TElCQ30gJHtEUEFERC4ke19QfX0gPj4gJHtERVBF
TkRGSUxFfQorLiAgaWYgZGVmaW5lZChQUk9HX0NYWC4ke19QfSkKKy4gICBpZiAhZW1wdHkoQ1hY
RkxBR1MuJHtQfTpNLXN0ZGxpYj1saWJjKyspCisJZWNobyAke19QfTogJHtMSUJDUExVU1BMVVN9
ID4+ICR7REVQRU5ERklMRX0KKy4gICBlbHNlCisJZWNobyAke19QfTogJHtMSUJTVERDUExVU1BM
VVN9ID4+ICR7REVQRU5ERklMRX0KKy4gICBlbmRpZgorLiAgZW5kaWYKKy4gZW5kaWYKKy5lbmRm
b3IKIAogLmlmICF0YXJnZXQoaW5zdGFsbCkKIAotLmlmIGRlZmluZWQoUFJFQ0lPVVNQUk9HKQot
LmlmICFkZWZpbmVkKE5PX0ZTQ0hHKQotSU5TVEFMTEZMQUdTKz0gLWZzY2hnCi0uZW5kaWYKLUlO
U1RBTExGTEFHUys9IC1TCi0uZW5kaWYKKy4gaWYgIXRhcmdldChyZWFsaW5zdGFsbCkKIAotX0lO
U1RBTExGTEFHUzo9CSR7SU5TVEFMTEZMQUdTfQotLmZvciBpZSBpbiAke0lOU1RBTExGTEFHU19F
RElUfQotX0lOU1RBTExGTEFHUzo9CSR7X0lOU1RBTExGTEFHUyR7aWV9fQotLmVuZGZvcgorLiAg
Zm9yIF9QIGluICR7UFJPR1N9CiAKLS5pZiAhdGFyZ2V0KHJlYWxpbnN0YWxsKSAmJiAhZGVmaW5l
ZChJTlRFUk5BTFBST0cpCi1yZWFsaW5zdGFsbDogX3Byb2dpbnN0YWxsCi0uT1JERVI6IGJlZm9y
ZWluc3RhbGwgX3Byb2dpbnN0YWxsCi1fcHJvZ2luc3RhbGw6Ci0uaWYgZGVmaW5lZChQUk9HKQot
LmlmIGRlZmluZWQoUFJPR05BTUUpCi0JJHtJTlNUQUxMfSAke1NUUklQfSAtbyAke0JJTk9XTn0g
LWcgJHtCSU5HUlB9IC1tICR7QklOTU9ERX0gXAotCSAgICAke19JTlNUQUxMRkxBR1N9ICR7UFJP
R30gJHtERVNURElSfSR7QklORElSfS8ke1BST0dOQU1FfQotLmVsc2UKLQkke0lOU1RBTEx9ICR7
U1RSSVB9IC1vICR7QklOT1dOfSAtZyAke0JJTkdSUH0gLW0gJHtCSU5NT0RFfSBcCi0JICAgICR7
X0lOU1RBTExGTEFHU30gJHtQUk9HfSAke0RFU1RESVJ9JHtCSU5ESVJ9Ci0uZW5kaWYKLS5lbmRp
ZgotLmVuZGlmCSMgIXRhcmdldChyZWFsaW5zdGFsbCkKKy4gICBpZiAhZGVmaW5lZChJTlRFUk5B
TFBST0cuJHtfUH0pCiAKLS5pZiBkZWZpbmVkKFNDUklQVFMpICYmICFlbXB0eShTQ1JJUFRTKQot
cmVhbGluc3RhbGw6IF9zY3JpcHRzaW5zdGFsbAotLk9SREVSOiBiZWZvcmVpbnN0YWxsIF9zY3Jp
cHRzaW5zdGFsbAorLk9SREVSOiBiZWZvcmVpbnN0YWxsIF9wcm9naW5zdGFsbC4ke19QfQorX3By
b2dpbnN0YWxsLiR7X1B9OgorLiAgICBpZiBkZWZpbmVkKFBST0dOQU1FLiR7X1B9KQorCSR7SU5T
VEFMTH0gJHtTVFJJUH0gLW8gJHtCSU5PV04uJHtfUH19IC1nICR7QklOR1JQLiR7X1B9fSBcCisJ
ICAgIC1tICR7QklOTU9ERS4ke19QfX0gJHtJTlNUQUxMRkxBR1MuJHtfUH19ICR7X1B9IFwKKwkg
ICAgJHtERVNURElSfSR7QklORElSLiR7X1B9fS8ke1BST0dOQU1FLiR7X1B9fQorLiAgICBlbHNl
CisJJHtJTlNUQUxMfSAke1NUUklQfSAtbyAke0JJTk9XTi4ke19QfX0gLWcgJHtCSU5HUlAuJHtf
UH19IFwKKwkgICAgLW0gJHtCSU5NT0RFLiR7X1B9fSAke0lOU1RBTExGTEFHUy4ke19QfX0gJHtf
UH0gXAorCSAgICAke0RFU1RESVJ9JHtCSU5ESVIuJHtfUH19CisuICAgIGVuZGlmIAogCityZWFs
aW5zdGFsbDogX3Byb2dpbnN0YWxsLiR7X1B9CisKKy4gICBlbmRpZiAjICFkZWZpbmVkKElOVEVS
TkFMUFJPRy4ke19QfSkKKworLiAgZW5kZm9yICMgZm9yIF9QIGluICR7UFJPR1N9CisKKy4gZW5k
aWYgIyAhdGFyZ2V0KHJlYWxpbnN0YWxsKQorCisuIGlmIGRlZmluZWQoU0NSSVBUUykgJiYgIWVt
cHR5KFNDUklQVFMpCiBTQ1JJUFRTRElSPz0JJHtCSU5ESVJ9CiBTQ1JJUFRTT1dOPz0JJHtCSU5P
V059CiBTQ1JJUFRTR1JQPz0JJHtCSU5HUlB9CiBTQ1JJUFRTTU9ERT89CSR7QklOTU9ERX0KIAot
LmZvciBzY3JpcHQgaW4gJHtTQ1JJUFRTfQotLmlmIGRlZmluZWQoU0NSSVBUU05BTUUpCi1TQ1JJ
UFRTTkFNRV8ke3NjcmlwdDpUfT89CSR7U0NSSVBUU05BTUV9Ci0uZWxzZQotU0NSSVBUU05BTUVf
JHtzY3JpcHQ6VH0/PQkke3NjcmlwdDpUOlJ9Ci0uZW5kaWYKLVNDUklQVFNESVJfJHtzY3JpcHQ6
VH0/PQkke1NDUklQVFNESVJ9Ci1TQ1JJUFRTT1dOXyR7c2NyaXB0OlR9Pz0JJHtTQ1JJUFRTT1dO
fQotU0NSSVBUU0dSUF8ke3NjcmlwdDpUfT89CSR7U0NSSVBUU0dSUH0KLVNDUklQVFNNT0RFXyR7
c2NyaXB0OlR9Pz0JJHtTQ1JJUFRTTU9ERX0KLV9zY3JpcHRzaW5zdGFsbDogX1NDUklQVFNJTlNf
JHtzY3JpcHQ6VH0KLV9TQ1JJUFRTSU5TXyR7c2NyaXB0OlR9OiAke3NjcmlwdH0KLQkke0lOU1RB
TEx9IC1vICR7U0NSSVBUU09XTl8key5BTExTUkM6VH19IFwKLQkgICAgLWcgJHtTQ1JJUFRTR1JQ
XyR7LkFMTFNSQzpUfX0gLW0gJHtTQ1JJUFRTTU9ERV8key5BTExTUkM6VH19IFwKKy4gIGZvciBT
IGluICR7U0NSSVBUU30KKworcmVhbGluc3RhbGw6IHNjcmlwdHNpbnN0YWxsCisuT1JERVI6IGJl
Zm9yZWluc3RhbGwgc2NyaXB0c2luc3RhbGwKKworLiAgIGlmIGRlZmluZWQoU0NSSVBUU05BTUUp
CitTQ1JJUFRTTkFNRV8ke1N9Pz0gJHtTQ1JJUFRTTkFNRX0KKy4gICBlbHNlCitTQ1JJUFRTTkFN
RV8ke1N9Pz0gJHtTOlQ6Un0KKy4gICBlbmRpZgorCitTQ1JJUFRTRElSXyR7U30/PSAke1NDUklQ
VFNESVJ9CitTQ1JJUFRTT1dOXyR7U30/PSAke1NDUklQVFNPV059CitTQ1JJUFRTR1JQXyR7U30/
PSAke1NDUklQVFNHUlB9CitTQ1JJUFRTTU9ERV8ke1N9Pz0gJHtTQ1JJUFRTTU9ERX0KKworc2Ny
aXB0c2luc3RhbGw6ICR7REVTVERJUn0ke1NDUklQVFNESVJfJHtTfX0vJHtTQ1JJUFRTTkFNRV8k
e1N9fQorCiske0RFU1RESVJ9JHtTQ1JJUFRTRElSXyR7U319LyR7U0NSSVBUU05BTUVfJHtTfX06
ICR7U30KKwkke0lOU1RBTEx9IC1vICR7U0NSSVBUU09XTl8ke1N9fSBcCisJICAgIC1nICR7U0NS
SVBUU0dSUF8ke1N9fSBcCisJICAgIC1tICR7U0NSSVBUU01PREVfJHtTfX0gXAogCSAgICAkey5B
TExTUkN9IFwKLQkgICAgJHtERVNURElSfSR7U0NSSVBUU0RJUl8key5BTExTUkM6VH19LyR7U0NS
SVBUU05BTUVfJHsuQUxMU1JDOlR9fQotLmVuZGZvcgorCSAgICAkey5UQVJHRVR9CisKKy4gIGVu
ZGZvciAjIGZvciBTIGluICR7U0NSSVBUU30KKworLiBlbmRpZiAjIGRlZmluZWQoU0NSSVBUUykg
JiYgIWVtcHR5KFNDUklQVFMpCisKKy5lbmRpZiAjICF0YXJnZXQoaW5zdGFsbCkKKworLmlmICFk
ZWZpbmVkKE5PX01BTikKKy4gaWYgdGFyZ2V0KF9tYW5wYWdlcykgIyBic2QubWFuLm1rIHdhcyBp
bmNsdWRlZAorcmVhbGluc3RhbGw6IF9tYW5pbnN0YWxsCisuIGVuZGlmCiAuZW5kaWYKIAotTkxT
TkFNRT89CSR7UFJPR30KKyMgV3JhcCBic2QubmxzLm1rIGJlY2F1c2UgSSBjYW4ndCBmb3JjZSB0
aGF0IE1ha2VmaWxlIHNuaXBwZXQgdG8gd29yayBvbmx5IHdpdGgKKyMgJHtQUk9HU30uCisuZm9y
IF9QIGluICR7UFJPR1N9CitOTFNOQU1FLiR7X1B9Pz0JJHtfUH0KK05MUzo9CQkke05MUy4ke19Q
fX0KK05MU0RJUjo9CSR7TkxTRElSLiR7X1B9fQorTkxTTkFNRTo9CSR7TkxTTkFNRS4ke19QfX0K
IC5pbmNsdWRlIDxic2QubmxzLm1rPgorLmVuZGZvcgogCiAuaW5jbHVkZSA8YnNkLmZpbGVzLm1r
PgogLmluY2x1ZGUgPGJzZC5pbmNzLm1rPgogLmluY2x1ZGUgPGJzZC5saW5rcy5taz4KIAotLmlm
ICR7TUtfTUFOfSAhPSAibm8iCi1yZWFsaW5zdGFsbDogX21hbmluc3RhbGwKLS5PUkRFUjogYmVm
b3JlaW5zdGFsbCBfbWFuaW5zdGFsbAotLmVuZGlmCisuaWYgIXRhcmdldChsaW50KQorLiBmb3Ig
X1AgaW4gJHtQUk9HU30KKy4gIGlmICF0YXJnZXQobGludC4ke19QfSkKKy4gICBpZiBkZWZpbmVk
KFBST0dfQ1hYLiR7X1B9KQorbGludC4ke19QfToKKy4gICBlbHNlCitfQ0ZMQUdTOj0JJHtDRkxB
R1MuJHtfUH19CitfU1JDUzo9CQkke1NSQ1MuJHtfUH19CitsaW50LiR7X1B9OiAke19TUkNTOk0q
LmN9CisJJHtMSU5UfSAke0xJTlRGTEFHU30gJHtfQ0ZMQUdTOk0tW0RJVV0qfSAkey5BTExTUkN9
CisuICAgZW5kaWYKKy4gIGVuZGlmCitsaW50OiBsaW50LiR7X1B9CiAKLS5lbmRpZgorLiBlbmRm
b3IKKy5lbmRpZiAjICF0YXJnZXQobGludCkKIAotLmlmICF0YXJnZXQobGludCkKLWxpbnQ6ICR7
U1JDUzpNKi5jfQotLmlmIGRlZmluZWQoUFJPRykKLQkke0xJTlR9ICR7TElOVEZMQUdTfSAke0NG
TEFHUzpNLVtESVVdKn0gJHsuQUxMU1JDfQotLmVuZGlmCi0uZW5kaWYKKy5mb3IgX1AgaW4gJHtQ
Uk9HU30KK0NGTEFHUzo9CSR7Q0ZMQUdTLiR7X1B9fQorQ1hYRkxBR1M6PQkke0NYWEZMQUdTLiR7
X1B9fQorU1JDUzo9CQkke1NSQ1MuJHtfUH19CisuIGluY2x1ZGUgPGJzZC5kZXAubWs+CisjIGJz
ZC5kZXAubWsgbWFuZ2xlcyBTUkNTCitTUkNTLiR7X1B9Oj0JJHtTUkNTfQorLmVuZGZvcgogCi0u
aWYgJHtNS19NQU59ICE9ICJubyIKLS5pbmNsdWRlIDxic2QubWFuLm1rPgorIyBYWFg6IGVtdWxh
dGUgdGhlIG9sZCBic2QucHJvZy5tayBieSBhbGxvd2luZyBNYWtlZmlsZXMgdGhhdCBkaWRuJ3Qg
c2V0CisjICR7UFJPRyp9IHRvIGZ1bmN0aW9uIHdpdGggdGhpcyBNYWtlZmlsZSBzbmlwcGV0Lgor
LmlmIGVtcHR5KFBST0dTKQorLiBpbmNsdWRlIDxic2QuZGVwLm1rPgogLmVuZGlmCiAKLS5pbmNs
dWRlIDxic2QuZGVwLm1rPgotCi0uaWYgZGVmaW5lZChQUk9HKSAmJiAhZXhpc3RzKCR7Lk9CSkRJ
Un0vJHtERVBFTkRGSUxFfSkKLSR7T0JKU306ICR7U1JDUzpNKi5ofQorLmlmICFleGlzdHMoJHsu
T0JKRElSfS8ke0RFUEVOREZJTEV9KQorLiBmb3IgX1AgaW4gJHtQUk9HU30KK19TUkNTOj0JCSR7
U1JDUy4ke19QfX0KKyR7T0JKUy4ke19QfX06ICR7X1NSQ1M6TSouaH0KKy4gZW5kZm9yCiAuZW5k
aWYKIAogLmluY2x1ZGUgPGJzZC5vYmoubWs+CkluZGV4OiBzaGFyZS9tay9ic2QuUkVBRE1FCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHNoYXJlL21rL2JzZC5SRUFETUUJKHJldmlzaW9uIDI0MDY4OSkKKysrIHNo
YXJlL21rL2JzZC5SRUFETUUJKHdvcmtpbmcgY29weSkKQEAgLTIwNyw5OCArMjA3LDE1NyBAQAog
CiBJdCBzZXRzL3VzZXMgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6CiAKLUJJTkdSUAkJQmluYXJ5
IGdyb3VwLgorVmFyaWFibGVzIGdsb2JhbCB0byBhbGwgcHJvZ3JhbXM6CiAKLUJJTk9XTgkJQmlu
YXJ5IG93bmVyLgorQ0xFQU5GSUxFUwkJQWRkaXRpb25hbCBmaWxlcyB0byByZW1vdmUgYW5kCitD
TEVBTkRJUlMJCWFkZGl0aW9uYWwgZGlyZWN0b3JpZXMgdG8gcmVtb3ZlIGR1cmluZyBjbGVhbiBh
bmQgY2xlYW5kaXIKKwkJCXRhcmdldHMuICAicm0gLWYiIGFuZCAicm0gLXJmIiB1c2VkIHJlc3Bl
Y3RpdmVseS4KIAotQklOTU9ERQkJQmluYXJ5IG1vZGUuCitERUJVR19GTEFHUwkJZGVidWdnaW5n
IHNwZWNpZmljIENGTEFHUy9MREZMQUdTOyBpZiBzZXQgYW55IGJpbmFyaWVzCisgCQkJcHJvZHVj
ZWQgd2lsbCBub3QgYmUgc3RyaXBwZWQuICBTZWUgYWxzbzogV0lUSF9DVEYKIAotQ0xFQU5GSUxF
UwlBZGRpdGlvbmFsIGZpbGVzIHRvIHJlbW92ZSBhbmQKLUNMRUFORElSUwlhZGRpdGlvbmFsIGRp
cmVjdG9yaWVzIHRvIHJlbW92ZSBkdXJpbmcgY2xlYW4gYW5kIGNsZWFuZGlyCi0JCXRhcmdldHMu
ICAicm0gLWYiIGFuZCAicm0gLXJmIiB1c2VkIHJlc3BlY3RpdmVseS4KK0ZJTEVTCQkJQSBsaXN0
IG9mIG5vbi1leGVjdXRhYmxlIGZpbGVzLgorCQkJVGhlIGluc3RhbGxhdGlvbiBpcyBjb250cm9s
bGVkIGJ5IHRoZSBGSUxFU05BTUUsIEZJTEVTT1dOLAorCQkJRklMRVNHUlAsIEZJTEVTTU9ERSwg
RklMRVNESVIgdmFyaWFibGVzIHRoYXQgY2FuIGJlCisJCQlmdXJ0aGVyIHNwZWNpYWxpemVkIGJ5
IEZJTEVTPFZBUj5fPGZpbGU+LgogCi1DRkxBR1MJCUZsYWdzIHRvIHRoZSBjb21waWxlciB3aGVu
IGNyZWF0aW5nIEMgb2JqZWN0cy4KK0xJTktTCQkJVGhlIGxpc3Qgb2YgYmluYXJ5IGxpbmtzOyBz
aG91bGQgYmUgZnVsbCBwYXRobmFtZXMsIHRoZQorCQkJbGlua2VkLXRvIGZpbGUgY29taW5nIGZp
cnN0LCBmb2xsb3dlZCBieSB0aGUgbGlua2VkCisJCQlmaWxlLiAgVGhlIGZpbGVzIGFyZSBoYXJk
LWxpbmtlZC4gIEZvciBleGFtcGxlLCB0byBsaW5rCisJCQkvYmluL3Rlc3QgYW5kIC9iaW4vWywg
dXNlOgogCi1GSUxFUwkJQSBsaXN0IG9mIG5vbi1leGVjdXRhYmxlIGZpbGVzLgotCQlUaGUgaW5z
dGFsbGF0aW9uIGlzIGNvbnRyb2xsZWQgYnkgdGhlIEZJTEVTTkFNRSwgRklMRVNPV04sCi0JCUZJ
TEVTR1JQLCBGSUxFU01PREUsIEZJTEVTRElSIHZhcmlhYmxlcyB0aGF0IGNhbiBiZQotCQlmdXJ0
aGVyIHNwZWNpYWxpemVkIGJ5IEZJTEVTPFZBUj5fPGZpbGU+LgorCQkJTElOS1M9CSR7REVTVERJ
Un0vYmluL3Rlc3QgJHtERVNURElSfS9iaW4vWwogCi1MREFERAkJQWRkaXRpb25hbCBsb2FkZXIg
b2JqZWN0cy4gIFVzdWFsbHkgdXNlZCBmb3IgbGlicmFyaWVzLgotCQlGb3IgZXhhbXBsZSwgdG8g
bG9hZCB3aXRoIHRoZSBjb21wYXRpYmlsaXR5IGFuZCB1dGlsaXR5Ci0JCWxpYnJhcmllcywgdXNl
OgorUFJPRwkJCVRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIGJ1aWxkLiAgSWYgbm90IHN1cHBs
aWVkLAorCQkJbm90aGluZyBpcyBidWlsdC4KIAorUFJPR19DWFgJCUlmIGRlZmluZWQsIHRoZSBu
YW1lIG9mIHRoZSBDKysgcHJvZ3JhbSB0byBidWlsZC4gIEFsc28KKwkJCWNhdXNlcyA8YnNkLnBy
b2cubWs+IHRvIGxpbmsgdGhlIHByb2dyYW0gd2l0aCB0aGUKKwkJCXN0YW5kYXJkIEMrKyBsaWJy
YXJ5LiAgUFJPR19DWFggb3ZlcnJpZGVzIHRoZSB2YWx1ZQorCQkJb2YgUFJPRyBpZiBQUk9HIGlz
IGFsc28gc2V0LgorCitTVFJJUAkJCVRoZSBmbGFnIHBhc3NlZCB0byB0aGUgaW5zdGFsbCBwcm9n
cmFtIHRvIGNhdXNlIHRoZQorCQkJYmluYXJ5IHRvIGJlIHN0cmlwcGVkLiAgVGhpcyBpcyB0byBi
ZSB1c2VkIHdoZW4KKwkJCWJ1aWxkaW5nIHlvdXIgb3duIGluc3RhbGwgc2NyaXB0IHNvIHRoYXQg
dGhlIGVudGlyZQorCQkJc3lzdGVtIGNhbiBiZSBtYWRlIHN0cmlwcGVkL25vdC1zdHJpcHBlZCB1
c2luZyBhCisJCQlzaW5nbGUga25vYi4KKworU1VCRElSCQkJQSBsaXN0IG9mIHN1YmRpcmVjdG9y
aWVzIHRoYXQgc2hvdWxkIGJlIGJ1aWx0IGFzIHdlbGwuCisJCQlFYWNoIG9mIHRoZSB0YXJnZXRz
IHdpbGwgZXhlY3V0ZSB0aGUgc2FtZSB0YXJnZXQgaW4gdGhlCisJCQlzdWJkaXJlY3Rvcmllcy4K
KworVGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgY2FuIGJlIHR1bmVkIGZvciBzcGVjaWZpYyBwcm9n
cmFtIHVzZSAoeW91IHdpbGwgbmVlZAordG8gc3VmZml4IHZhcmlhYmxlIGRlY2xhcmF0aW9ucyB3
aXRoIC4ke1BST0d9LCBlLmcuIFBST0c9IGZvbyAtPiBTUkNTLmZvbyk6CisKK0JJTkRJUgkJCUJp
bmFyeSBkaXJlY3RvcnkuCisKK0JJTkdSUAkJCUJpbmFyeSBncm91cC4KKworQklOT1dOCQkJQmlu
YXJ5IG93bmVyLgorCitCSU5NT0RFCQkJQmluYXJ5IG1vZGUuCisKK0NGTEFHUwkJCUZsYWdzIHRv
IHRoZSBjb21waWxlciB3aGVuIGNyZWF0aW5nIEMgb2JqZWN0cy4KKworRFBBREQJCQlBZGRpdGlv
bmFsIGRlcGVuZGVuY2llcyBmb3IgdGhlIHByb2dyYW0uICBVc3VhbGx5IHVzZWQKKwkJCWZvciBs
aWJyYXJpZXMuICBGb3IgZXhhbXBsZSwgdG8gZGVwZW5kIG9uIHRoZQorCQkJY29tcGF0aWJpbGl0
eSBhbmQgdXRpbGl0eSBsaWJyYXJpZXMgdXNlOgorCisJCQkJRFBBREQ9JHtMSUJDT01QQVR9ICR7
TElCVVRJTH0KKworCQkJVGhlcmUgaXMgYSBwcmVkZWZpbmVkIGlkZW50aWZpZXIgZm9yIGVhY2gK
KwkJCShub24tcHJvZmlsZWQsIG5vbi1zaGFyZWQpIGxpYnJhcnkgYW5kIG9iamVjdC4gIExpYnJh
cnkKKwkJCWZpbGUgbmFtZXMgYXJlIHRyYW5zZm9ybWVkIHRvIGlkZW50aWZpZXJzIGJ5IHJlbW92
aW5nCisJCQl0aGUgZXh0ZW5zaW9uIGFuZCBjb252ZXJ0aW5nIHRvIHVwcGVyIGNhc2UuCisKKwkJ
CVRoZXJlIGFyZSBubyBzcGVjaWFsIGlkZW50aWZpZXJzIGZvciBwcm9maWxlZCBvciBzaGFyZWQK
KwkJCWxpYnJhcmllcyBvciBvYmplY3RzLiAgVGhlIGlkZW50aWZpZXJzIGZvciB0aGUgc3RhbmRh
cmQKKwkJCWxpYnJhcmllcyBhcmUgdXNlZCBpbiBEUEFERC4gIFRoaXMgd29ya3MgY29ycmVjdGx5
IGlmZgorCQkJYWxsIHRoZSBsaWJyYXJpZXMgYXJlIGJ1aWx0IGF0IHRoZSBzYW1lIHRpbWUuCisJ
CQlVbmZvcnR1bmF0ZWx5LCBpdCBjYXVzZXMgdW5uZWNlc3NhcnkgcmVsaW5rcyB0byBzaGFyZWQK
KwkJCWxpYnJhcmllcyB3aGVuIG9ubHkgdGhlIHN0YXRpYyBsaWJyYXJpZXMgaGF2ZSBjaGFuZ2Vk
LgorCQkJRGVwZW5kZW5jaWVzIG9uIHNoYXJlZCBsaWJyYXJpZXMgc2hvdWxkIGJlIG9ubHkgb24g
dGhlCisJCQlsaWJyYXJ5IHZlcnNpb24gbnVtYmVycy4KKworSU5TVEFMTEZMQUdTCQlpbnN0YWxs
KDEpIGZsYWdzLgorCitMREFERAkJCUFkZGl0aW9uYWwgbG9hZGVyIG9iamVjdHMuICBVc3VhbGx5
IHVzZWQgZm9yIGxpYnJhcmllcy4KKwkJCUZvciBleGFtcGxlLCB0byBsb2FkIHdpdGggdGhlIGNv
bXBhdGliaWxpdHkgYW5kIHV0aWxpdHkKKwkJCWxpYnJhcmllcywgdXNlOgorCiAJCQlMREFERD0t
bHV0aWwgLWxjb21wYXQKIAotTERGTEFHUwkJQWRkaXRpb25hbCBsb2FkZXIgZmxhZ3MuCitMREZM
QUdTCQkJQWRkaXRpb25hbCBsb2FkZXIgZmxhZ3MuCiAKLUxJTktTCQlUaGUgbGlzdCBvZiBiaW5h
cnkgbGlua3M7IHNob3VsZCBiZSBmdWxsIHBhdGhuYW1lcywgdGhlCi0JCWxpbmtlZC10byBmaWxl
IGNvbWluZyBmaXJzdCwgZm9sbG93ZWQgYnkgdGhlIGxpbmtlZAotCQlmaWxlLiAgVGhlIGZpbGVz
IGFyZSBoYXJkLWxpbmtlZC4gIEZvciBleGFtcGxlLCB0byBsaW5rCi0JCS9iaW4vdGVzdCBhbmQg
L2Jpbi9bLCB1c2U6CitNQU4JCQlNYW51YWwgcGFnZXMgKHNob3VsZCBlbmQgaW4gLjEgLSAuOSku
ICBJZiBubyBNQU4KKwkJCXZhcmlhYmxlIGlzIGRlZmluZWQsICJNQU49PFBST0c+LjEiIGlzIGFz
c3VtZWQuCiAKLQkJCUxJTktTPQkke0RFU1RESVJ9L2Jpbi90ZXN0ICR7REVTVERJUn0vYmluL1sK
K05PX0ZTQ0hHCQlEbyBub3QgY2FsbCBpbnN0YWxsKDEpIHdpdGggLWYgc2NoZy4KIAotTUFOCQlN
YW51YWwgcGFnZXMgKHNob3VsZCBlbmQgaW4gLjEgLSAuOSkuICBJZiBubyBNQU4gdmFyaWFibGUK
LQkJaXMgZGVmaW5lZCwgIk1BTj0ke1BST0d9LjEiIGlzIGFzc3VtZWQuCitQUkVDSU9VU1BST0cJ
CUluc3RhbGwgd2l0aCAtUyAoc2FmZSBjb3B5KSBhbmQgaGFuZGxlIE5PX0ZTQ0hHCisJCQl2YXJp
YWJsZSBjYXNlIGFzIHdlbGwuCiAKLVBST0cJCVRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIGJ1
aWxkLiAgSWYgbm90IHN1cHBsaWVkLCBub3RoaW5nCi0JCWlzIGJ1aWx0LgorUFJPR19DWFgJCUMr
KyBhcHBsaWNhdGlvbiBuYW1lKHMpOyB0aGUgc291cmNlcyBmb3IgdGhlCisJCQlhcHBsaWNhdGlv
bihzKSBhcmUgY29tcGlsZWQgdmlhICR7Q1hYfQogCi1QUk9HX0NYWAlJZiBkZWZpbmVkLCB0aGUg
bmFtZSBvZiB0aGUgcHJvZ3JhbSB0byBidWlsZC4gIEFsc28KLQkJY2F1c2VzIDxic2QucHJvZy5t
az4gdG8gbGluayB0aGUgcHJvZ3JhbSB3aXRoIHRoZQotCQlzdGFuZGFyZCBDKysgbGlicmFyeS4g
IFBST0dfQ1hYIG92ZXJyaWRlcyB0aGUgdmFsdWUKLQkJb2YgUFJPRyBpZiBQUk9HIGlzIGFsc28g
c2V0LgorUFJPR05BTUUJCVRoZSBuYW1lIHRoYXQgdGhlIGFib3ZlIHByb2dyYW0gd2lsbCBiZSBp
bnN0YWxsZWQsIGlmCisJCQlkaWZmZXJlbnQgZnJvbSA8UFJPRz4uCiAKLVBST0dOQU1FCVRoZSBu
YW1lIHRoYXQgdGhlIGFib3ZlIHByb2dyYW0gd2lsbCBiZSBpbnN0YWxsZWQgYXMsIGlmCi0JCWRp
ZmZlcmVudCBmcm9tICR7UFJPR30uCitTUkNTCQkJTGlzdCBvZiBzb3VyY2UgZmlsZXMgdG8gYnVp
bGQgdGhlIHByb2dyYW0uICBJZiBTUkNTIGlzCisJCQlub3QgZGVmaW5lZCwgaXQncyBhc3N1bWVk
IHRvIGJlICR7UFJPR30uYyBvciwgaWYKKwkJCVBST0dfQ1hYIGlzIGRlZmluZWQsICR7UFJPR19D
WFh9LmNjLgogCi1TUkNTCQlMaXN0IG9mIHNvdXJjZSBmaWxlcyB0byBidWlsZCB0aGUgcHJvZ3Jh
bS4gIElmIFNSQ1MgaXMgbm90Ci0JCWRlZmluZWQsIGl0J3MgYXNzdW1lZCB0byBiZSAke1BST0d9
LmMgb3IsIGlmIFBST0dfQ1hYIGlzCi0JCWRlZmluZWQsICR7UFJPR19DWFh9LmNjLgorU0NSSVBU
UwkJCUEgbGlzdCBvZiBpbnRlcnByZXRlciBzY3JpcHRzIFtmaWxlLntzaCxjc2gscGwsYXdrLC4u
Ln1dLgorCQkJVGhlIGluc3RhbGxhdGlvbiBpcyBjb250cm9sbGVkIGJ5IHRoZSBTQ1JJUFRTTkFN
RSwgU0NSSVBUU09XTiwKKwkJCVNDUklQVFNHUlAsIFNDUklQVFNNT0RFLCBTQ1JJUFRTRElSIHZh
cmlhYmxlcyB0aGF0IGNhbiBiZQorCQkJZnVydGhlciBzcGVjaWFsaXplZCBieSBTQ1JJUFRTPFZB
Uj5fPHNjcmlwdD4uCiAKLURQQURECQlBZGRpdGlvbmFsIGRlcGVuZGVuY2llcyBmb3IgdGhlIHBy
b2dyYW0uICBVc3VhbGx5IHVzZWQgZm9yCi0JCWxpYnJhcmllcy4gIEZvciBleGFtcGxlLCB0byBk
ZXBlbmQgb24gdGhlIGNvbXBhdGliaWxpdHkgYW5kCi0JCXV0aWxpdHkgbGlicmFyaWVzIHVzZToK
K1RoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGNhbiBiZSB0dW5lZCBmb3Igc3BlY2lmaWMgc2NyaXB0
czsgeW91IHdpbGwgbmVlZAordG8gc3VmZml4IHZhcmlhYmxlIGRlY2xhcmF0aW9ucyB3aXRoIF88
U0NSSVBUPiwgZS5nLgorU0NSSVBUIC0+IGZvbywgLT4gU0NSSVBURElSX2Zvby4gIEluIGFsbCBj
YXNlcywgdGhlIHBlci1zY3JpcHQgdmFyaWFibGVzCitkZWZhdWx0IHRvIHRoZSBlcXVpdmFsZW50
IGdsb2JhbCBTQ1JJUFQqIHZhcmlhYmxlIGFuZCBmYWxsYmFjayB0byB0aGUKK0JJTiogZXF1aXZh
bGVudHMsIGUuZy4gU0NSSVBURElSX2ZvbyBmYWxscyBiYWNrIHRvIFNDUklQVERJUiBpZiBTQ1JJ
UFRESVJfZm9vCitpcyBub3QgZGVmaW5lZCwgdGhlbiBCSU5ESVIgaWYgU0NSSVBURElSIGlzIG5v
dCBkZWZpbmVkOgogCi0JCQlEUEFERD0ke0xJQkNPTVBBVH0gJHtMSUJVVElMfQorU0NSSVBUU0RJ
UgkJRGlyZWN0b3J5IHRvIGluc3RhbGwgYSBzY3JpcHQgdG8uCiAKLQkJVGhlcmUgaXMgYSBwcmVk
ZWZpbmVkIGlkZW50aWZpZXIgZm9yIGVhY2ggKG5vbi1wcm9maWxlZCwKLQkJbm9uLXNoYXJlZCkg
bGlicmFyeSBhbmQgb2JqZWN0LiAgTGlicmFyeSBmaWxlIG5hbWVzIGFyZQotCQl0cmFuc2Zvcm1l
ZCB0byBpZGVudGlmaWVycyBieSByZW1vdmluZyB0aGUgZXh0ZW5zaW9uIGFuZAotCQljb252ZXJ0
aW5nIHRvIHVwcGVyIGNhc2UuCitTQ1JJUFRHUlAJCUdyb3VwIHRvIHNldCBmb3IgYSBzY3JpcHQu
CiAKLQkJVGhlcmUgYXJlIG5vIHNwZWNpYWwgaWRlbnRpZmllcnMgZm9yIHByb2ZpbGVkIG9yIHNo
YXJlZAotCQlsaWJyYXJpZXMgb3Igb2JqZWN0cy4gIFRoZSBpZGVudGlmaWVycyBmb3IgdGhlIHN0
YW5kYXJkCi0JCWxpYnJhcmllcyBhcmUgdXNlZCBpbiBEUEFERC4gIFRoaXMgd29ya3MgY29ycmVj
dGx5IGlmZiBhbGwKLQkJdGhlIGxpYnJhcmllcyBhcmUgYnVpbHQgYXQgdGhlIHNhbWUgdGltZS4g
IFVuZm9ydHVuYXRlbHksCi0JCWl0IGNhdXNlcyB1bm5lY2Vzc2FyeSByZWxpbmtzIHRvIHNoYXJl
ZCBsaWJyYXJpZXMgd2hlbgotCQlvbmx5IHRoZSBzdGF0aWMgbGlicmFyaWVzIGhhdmUgY2hhbmdl
ZC4gIERlcGVuZGVuY2llcyBvbgotCQlzaGFyZWQgbGlicmFyaWVzIHNob3VsZCBiZSBvbmx5IG9u
IHRoZSBsaWJyYXJ5IHZlcnNpb24KLQkJbnVtYmVycy4KK1NDUklQVE1PREUJCU1vZGUgdG8gYXBw
bHkgdG8gYSBzY3JpcHQuCiAKLVNUUklQCQlUaGUgZmxhZyBwYXNzZWQgdG8gdGhlIGluc3RhbGwg
cHJvZ3JhbSB0byBjYXVzZSB0aGUgYmluYXJ5Ci0JCXRvIGJlIHN0cmlwcGVkLiAgVGhpcyBpcyB0
byBiZSB1c2VkIHdoZW4gYnVpbGRpbmcgeW91cgotCQlvd24gaW5zdGFsbCBzY3JpcHQgc28gdGhh
dCB0aGUgZW50aXJlIHN5c3RlbSBjYW4gYmUgbWFkZQotCQlzdHJpcHBlZC9ub3Qtc3RyaXBwZWQg
dXNpbmcgYSBzaW5nbGUgbm9iLgorU0NSSVBUT1dOCQlPd25lciB0byBzZXQgZm9yIGEgc2NyaXB0
LgogCi1TVUJESVIJCUEgbGlzdCBvZiBzdWJkaXJlY3RvcmllcyB0aGF0IHNob3VsZCBiZSBidWls
dCBhcyB3ZWxsLgotCQlFYWNoIG9mIHRoZSB0YXJnZXRzIHdpbGwgZXhlY3V0ZSB0aGUgc2FtZSB0
YXJnZXQgaW4gdGhlCi0JCXN1YmRpcmVjdG9yaWVzLgorTGVnYWN5IHZhcmlhYmxlcyBhcmUgYXMg
Zm9sbG93czoKIAotU0NSSVBUUwkJQSBsaXN0IG9mIGludGVycHJldGVyIHNjcmlwdHMgW2ZpbGUu
e3NoLGNzaCxwbCxhd2ssLi4ufV0uCi0JCVRoZSBpbnN0YWxsYXRpb24gaXMgY29udHJvbGxlZCBi
eSB0aGUgU0NSSVBUU05BTUUsIFNDUklQVFNPV04sCi0JCVNDUklQVFNHUlAsIFNDUklQVFNNT0RF
LCBTQ1JJUFRTRElSIHZhcmlhYmxlcyB0aGF0IGNhbiBiZQotCQlmdXJ0aGVyIHNwZWNpYWxpemVk
IGJ5IFNDUklQVFM8VkFSPl88c2NyaXB0Pi4KK0NPUFRTCQkJT3B0aW1pemF0aW9uIGZsYWdzIGFw
cGVuZGVkIHRvIENGTEFHUzsgaGlnaGx5CisgCQkJZGlzY291cmFnZWQgaW4gbW9kZXJuIE1ha2Vm
aWxlcy4KIAorUFJPRwkJCUxlZ2FjeSBmb3JtIG9mIGBQUk9HU2AKKworUFJPR19DWFgJCUxlZ2Fj
eSBmb3JtIG9mIGBQUk9HU19DWFhgCisKK1RoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFyZSB3cmFw
cGVkIHRvIGJlIG1hZGUgYFBST0dTIGF3YXJlYDoKKworTkxTCQkJU2VlIGJzZC5ubHMubWsgZGVz
Y3JpcHRpb24gZm9yIG1vcmUgZGV0YWlscy4KK05MU0RJUgorTkxTTkFNRQorCitEZXZlbG9wZXIg
Y29udmVuaWVuY2UgdmFyaWFibGVzOgorCitXSVRIX0FTU0VSVF9ERUJVRwlDb21waWxlIHdpdGgg
Q0ZMQUdTKz0tRE5ERUJVRworCiBUaGUgaW5jbHVkZSBmaWxlIDxic2QucHJvZy5taz4gaW5jbHVk
ZXMgdGhlIGZpbGUgbmFtZWQgIi4uL01ha2VmaWxlLmluYyIKLWlmIGl0IGV4aXN0cywgYXMgd2Vs
bCBhcyB0aGUgaW5jbHVkZSBmaWxlIDxic2QubWFuLm1rPi4KK2lmIGl0IGV4aXN0cywgYXMgd2Vs
bCBhcyB0aGUgaW5jbHVkZSBmaWxlIDxic2QubWFuLm1rPi4gIEZ1cnRoZXJtb3JlLCBpZgorV0lU
SF9OTFMgaXMgZGVmaW5lZCBhbmQgTkxTLjxQUk9HPiBpcyBhbHNvIGRlZmluZWQsIHRoZW4gYnNk
Lm5scy5tayBpcworaW5jbHVkZWQgYXMgd2VsbC4KIAogU29tZSBzaW1wbGUgZXhhbXBsZXM6CiAK
KzEuIFNpbmdsZSBDIFByb2dyYW06CisKIFRvIGJ1aWxkIGZvbyBmcm9tIGZvby5jIHdpdGggYSBt
YW51YWwgcGFnZSBmb28uMSwgdXNlOgogCi0JUFJPRz0JZm9vCisJUFJPR1M9CWZvbwogCiAJLmlu
Y2x1ZGUgPGJzZC5wcm9nLm1rPgogCkBAIC0zMTQsNiArMzczLDM0IEBACiAKIAlTUkNTPQlhLmMg
Yi5jIGMuYyBkLmMKIAorMi4gU2luZ2xlIEMrKyBQcm9ncmFtOgorCitUbyBidWlsZCBiYXIgd2l0
aCBiYXIuY2Mgd2l0aCBhIG1hbnVhbCBwYWdlIGJhci4xLCB1c2U6CisKKwlQUk9HU19DWFg9CWJh
cgorCisJLmluY2x1ZGUgPGJzZC5wcm9nLm1rPgorCitBbGwgb3RoZXIgY29uc3RydWN0cyBhcmUg
dGhlIHNhbWUgYXMgaW4gdGhlIFNpbmdsZSBDIFByb2dyYW0gY2FzZS4KKworMy4gTXVsdGlwbGUg
QyBwcm9ncmFtczoKKworVG8gYnVpbGQgZm9vIGZyb20gZm9vLmMgYW5kIGJhciB3aXRoIGJhci5j
LCB1c2U6CisKKwlQUk9HUz0JZm9vIGJhcgorCisJLmluY2x1ZGUgPGJzZC5wcm9nLm1rPgorCitU
byBidWlsZCBmb28gZnJvbSBiYXIuYyBhbmQgYmFyIHdpdGggZm9vLmMsIHVzZToKKworCVBST0dT
PQlmb28gYmFyCisKKwlTUkNTLmZvbz0gYmFyLmMKKworCVNSQ1MuYmFyPSBmb28uYworCisJLmlu
Y2x1ZGUgPGJzZC5wcm9nLm1rPgorCiA9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0t
PS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09CiAKIFRoZSBpbmNsdWRlIGZp
bGUgPGJzZC5zdWJkaXIubWs+IGNvbnRhaW5zIHRoZSBkZWZhdWx0IHRhcmdldHMgZm9yIGJ1aWxk
aW5nCg==
--e89a8fb206686603e204ca56aff2--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAGH67wSuX7zJrTb5GehQWHKqYKog-aTwkiNw5CSJLrzftzKTaA>