Re: A question about Axiom capabilities, Fwd: [fricas-devel] Abstract Vector Algebra

Bill Page <[email protected]> Fri, 29 Mar 2013 20:31:44 -0400
Newsgroups gmane.comp.mathematics.axiom.user
Message-ID <CAC6x94SuShzM=Ko8gdUvbq_YuGdoZgPRbg+U383aVReL8-3y2g@mail.gmail.com>
--20cf307ca1e42d3e9c04d9198337
Content-Type: text/plain; charset=ISO-8859-1

See:

https://www.researchgate.net/publication/220915895_Rule-Based_Simplification_in_Vector-Product_Spaces

There has been some work done on this subject in one of the Axiom forks:

---------- Forwarded message ----------
From: someone <[email protected]>
Date: 27 October 2012 21:07
Subject: Re: [fricas-devel] Abstract Vector Algebra
To: [email protected]


> I started making a small package for component-free vector algebra. It
> is based on the work "Rule-Based Simplification in Vector-Product
> Spaces" written by Songxin Liang and David J. Jeffrey.

I made some real progress with the code. In the most up to date
version it can do many non-trivial problems. For example:

(122) -> simplify( (va-vd)^(vb-vc) + (vb-vd)^(vc-va) + (vc-vd)^(va-vb)
- 2*(va^vb + vb^vc + vc^va) )

   (122)  00
                                                 Type: VectorAlgebra(Integer)

I attached the code as well as the examples and some other tests.
You can find the most recent versions of all files in the github repo at:

https://github.com/raoulb/fricas_code/blob/vectoralg/vecalg/

--
You received this message because you are subscribed to the Google
Groups "FriCAS - computer algebra system" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/fricas-devel?hl=en.




---------- Forwarded message ----------
From: Raoul <[email protected]>
Date: 29 March 2013 19:42
Subject: Re: [Axiom-mail] A question about Axiom capabilities
To: u1204 <[email protected]>, [email protected]


Dear Tim,


> If you look at the matrixcookbook that Mike mentioned, the first 10
> equations are:
>
>    (A*B)^-1      = B^-1 * A^-1
>    (A*B*C...)^-1 = ...C^-1 * B^-1 * A^-1
>    (A^T)^-1      = (A^-1)^T
>    (A+B)^T       = A^T + B^T
>    (A*B)^T       = B^T * A^T
>    (A*B*C...)^T  = C^T * B^T *A^T
>    (A^H)^-1      = (A^-1)^H
>    (A+B)^H       = A^H + B^H
>    (A*B)^H       = B^H * A^H
>    (A*B*C...)^H  = ...C^H * B^H * A^H

Yes, I know this book very well. It would be indeed nice
if Axiom could do such things in an abstract fashion.


> It seems like we could create a SymbolicMatrix algebra that could
> perform these manipulations with uninterpreted matrix symbols
> A, B, C with a special recognized symbol 'T'.

I think it would be possible, however I expect representation of
abstract matrix algebra to be much more complicated than the
vector algebra stuff. There are transposes, conjugates, inverses,
traces, determinants and much more. One would need to have a way
to encode all these operation "unevaluated".


> These matrices could have actual values which, for certain operations
> are ignored, so that
>
>        (A*B)^-1      = B^-1 * A^-1
>
> but for other operations would be evaluated as in:
>
>        eval(B^-1 * A^-1)
>
> giving the actual matrix result shown element by element.

Yes, of course this should play together with usual
(dense or sparse) matrices nicely. Doesn't make the task
easier though.

And do we want define abstract matrices with or without shape information?


> An additional enhancement would be to make a SymbolicMatrixCategory
> so that there could be specific domains such as
>
>    GeneralSymbolicMatrix,
>    SymmetricSymbolicMatrix,
>    UpperTriangularSymbolicMatrix,
>    DiagonalSymbolicMatrix,
>
> etc which could exploit certain matrix-level properties at the
> symbolic level.

Maybe someone should indeed try. I don't think I find the
time to try this soon.


It occurred to me that component-free geometric algebra
might be easier to start with anyway.

There is a nice book on the topic:

  https://sites.google.com/site/grassmannalgebra/
  https://sites.google.com/site/grassmannalgebra/thegrassmannalgebrabook

which is accompanied by a Mathematica Package (that I never tried so far):

  https://sites.google.com/site/grassmannalgebra/thegrassmannalgebrapackage

The algebra in there is as far as I remember not done in an
abstract way, but with explicit bases.


-- Raoul

_______________________________________________
Axiom-mail mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/axiom-mail

--20cf307ca1e42d3e9c04d9198337
Content-Type: application/octet-stream; name="examples.input"
Content-Disposition: attachment; filename="examples.input"
Content-Transfer-Encoding: base64
X-Attachment-Id: bf1544c94f8dd048_0.1

LS0gVGhpcyBmaWxlIHNob3dzIHNvbWUgcmVhbGx5IG5vbnRyaXZpYWwgZXhhbXBsZXMKLS0KLS0g
U291cmNlOiAiQSBSdWxlLUJhc2VkIENvbXBvbmVudC1GcmVlIFZlY3RvciBBbGdlYnJhIFBhY2th
Z2UiIGJ5IFNvbmd4aW4gTGlhbmcKLS0KLS0gSW5kaXZpZHVhbCBleGFtcGxlczoKLS0gSi4gQ3Vu
bmluZ2hhbS4gIlZlY3RvcnMiLCBIZWluZW1hbm4gRWR1Y2F0aW9uYWwgQm9va3MgTHRkLCBMb25k
b24sIDE5NjkKLS0gRS4gTS4gUGF0dGVyc29uLCAiU29sdmluZyBQcm9ibGVtcyBpbiBWZWN0b3Ig
QWxnZWJyYSIsIE9saXZlciAmIEJveWQgTHRkLCBFZGluYnVyZ2gtTG9uZG9uLCAxOTY4Ci0tIEQu
IFIuIFN0b3V0ZW15ZXIsICJTeW1ib2xpYyBjb21wdXRlciB2ZWN0b3IgYW5hbHlzaXMiLCBDb21w
dXRlcnMgJiBNYXRoZW1hdGljcyB3aXRoIEFwcGxpY2F0aW9ucywgMTk3OQoKdmEgOj0gdmVjdG9y
KGEpJFZBKElOVCkKdmIgOj0gdmVjdG9yKGIpJFZBKElOVCkKdmMgOj0gdmVjdG9yKGMpJFZBKElO
VCkKdmQgOj0gdmVjdG9yKGQpJFZBKElOVCkKdmUgOj0gdmVjdG9yKGUpJFZBKElOVCkKdmYgOj0g
dmVjdG9yKGYpJFZBKElOVCkKCgotLSBTdG91dGVteWVyCnggOj0gKCh2YV52YileKHZiXnZjKSkq
KHZjXnZhKSAtICh2YSoodmJedmMpKSoodmEqKHZiXnZjKSkKemVybz8oeCkKeHMgOj0gc2ltcGxp
ZnkoeCkKemVybz8oeHMpCmlzU2NhbGFyPyh4KQppc1NjYWxhcj8oeHMpCgoKeCA6PSAodmEtdmQp
Xih2Yi12YykgKyAodmItdmQpXih2Yy12YSkgKyAodmMtdmQpXih2YS12YikgLSAyKih2YV52YiAr
IHZiXnZjICsgdmNedmEpCnplcm8/KHgpCnhzIDo9IHNpbXBsaWZ5KHgpCnplcm8/KHhzKQppc1Zl
Y3Rvcj8oeCkKaXNWZWN0b3I/KHhzKQoKCnggOj0gKHZiXnZjKV4odmFedmQpICsgKHZjXnZhKV4o
dmJedmQpICsgKHZhXnZiKV4odmNedmQpICsgMipzM3AodmEsdmIsdmMpKnZkCnplcm8/KHgpCnhz
IDo9IHNpbXBsaWZ5KHgpCnplcm8/KHhzKQotLSBzdGlsbCBub3QgemVyby4gQXQgdGhpcyBwb2lu
dCB3ZSBuZWVkIHRoZSBwb3dlciBvZiBydWxlcwotLSBPZiBjb3Vyc2UgdGhpcyBzaG91bGQgYmUg
aW5jbHVkZWQgaW50byBzaW1wbGlmeSBsYXRlci4KeHNzIDo9IGFwcGx5UnVsZSh4cywgInJ1bGUy
OCIpCnplcm8/KHhzcykKeHNzcyA6PSBzaW1wbGlmeSh4c3MpCnplcm8/KHhzc3MpCmlzVmVjdG9y
Pyh4KQppc1ZlY3Rvcj8oeHMpCmlzVmVjdG9yPyh4c3MpCmlzVmVjdG9yPyh4c3NzKQoKCi0tIEN1
bm5pbmdoYW0KeCA6PSB2YV4odmJedmMpICsgdmJeKHZjXnZhKSArIHZjXih2YV52YikKemVybz8o
eCkKeHMgOj0gc2ltcGxpZnkoeCkKemVybz8oeHMpCmlzVmVjdG9yPyh4KQppc1ZlY3Rvcj8oeHMp
CgoKLS0gVGhpcyBJUyBhbiBpZGVudGl0eQpsaHMgOj0gdmFeKHZiXih2Y152ZCkpICsgdmJeKHZj
Xih2ZF52YSkpICsgdmNeKHZkXih2YV52YikpICsgdmReKHZhXih2Yl52YykpCnJocyA6PSAodmFe
dmMpXih2Yl52ZCkKaWRlbnRpdHk/KGxocywgcmhzKQotLSBUcnkgdG8gc2ltcGxpZnkgZmlyc3QK
c2xocyA6PSBzaW1wbGlmeShsaHMpCnNyaHMgOj0gc2ltcGxpZnkocmhzKQppZGVudGl0eT8oc2xo
cywgc3JocykKLS0gT2ssIGVub3VnaCBmb3IgdGhlIG1vbWVudAotLSBXZSB3b3VsZCBuZWVkIGlu
dmVyc2Ugb2YgcnVsZTI4IHRvIGZpbmlzaAotLSBPZiBjb3Vyc2UgaWRlbnRpdHkgd2lsbCBlbXBs
b3kgZnVsbCBzaW1wbGlmaWNhdGlvbiBsYXRlci4KCgotLSAgUGF0dGVyc29uCnggOj0gKHZiXnZj
KSoodmFedmQpICsgKHZjXnZhKSoodmJedmQpICsgKHZhXnZiKSoodmNedmQpCnplcm8/KHgpCnhz
IDo9IHNpbXBsaWZ5KHgpCnplcm8/KHhzKQppc1NjYWxhcj8oeCkKaXNTY2FsYXI/KHhzKQoKCngg
Oj0gKCh2YV52YiledmMpXnZkICsgKCh2Yl52YSledmQpXnZjICsgKCh2Y152ZCledmEpXnZiICsg
KCh2ZF52YyledmIpXnZhCnplcm8/KHgpCnhzIDo9IHNpbXBsaWZ5KHgpCnplcm8/KHhzKQppc1Zl
Y3Rvcj8oeCkKaXNWZWN0b3I/KHhzKQo=
--20cf307ca1e42d3e9c04d9198337
Content-Type: application/octet-stream; name="tests.input"
Content-Disposition: attachment; filename="tests.input"
Content-Transfer-Encoding: base64
X-Attachment-Id: bf1544c94f8dd048_0.2

dmEgOj0gdmVjdG9yKGEpJFZBKElOVCkKdmIgOj0gdmVjdG9yKGIpJFZBKElOVCkKdmMgOj0gdmVj
dG9yKGMpJFZBKElOVCkKdmQgOj0gdmVjdG9yKGQpJFZBKElOVCkKdmUgOj0gdmVjdG9yKGUpJFZB
KElOVCkKdmYgOj0gdmVjdG9yKGYpJFZBKElOVCkKdmcgOj0gdmVjdG9yKGcpJFZBKElOVCkKdmgg
Oj0gdmVjdG9yKGgpJFZBKElOVCkKdmkgOj0gdmVjdG9yKGkpJFZBKElOVCkKdjAgOj0gdmVjdG9y
WmVybygpJFZBKElOVCkKczAgOj0gc2NhbGFyWmVybygpJFZBKElOVCkKCi0tIFRlc3Qgc29tZSBz
aW1wbGUgYXJpdGhtZXRpYwotdmEKCi12YSArIHZhCgp2YSArIHZiCgp2YSArIHZiICsgdmMKCgp2
YSAqIHZhCgp2YSAqIHZiCgoKdmEgKiB2YiAqIHZjCgp2YSAqICh2YiAqIHZjKQoKKHZhICogdmIp
ICogdmMKCi0tIFByb3BlcnRpZXMKaXNTY2FsYXI/IHMwCmlzVmVjdG9yPyBzMAoKaXNTY2FsYXI/
IHYwCmlzVmVjdG9yPyB2MAoKaXNTY2FsYXI/IHZhCmlzVmVjdG9yPyB2YQoKaXNTY2FsYXI/KHZh
KnZiKQppc1ZlY3Rvcj8odmEqdmIpCgppc1NjYWxhcj8odmFedmIpCmlzVmVjdG9yPyh2YV52YikK
CmlzU2NhbGFyPyBzM3AodmEsIHZiLCB2YykKaXNWZWN0b3I/IHMzcCh2YSwgdmIsIHZjKQoKLS0g
QmFzaWMgc2ltcGxpZmljYXRpb24Kc2ltcGxpZnkgczAKc2ltcGxpZnkgdjAKCnNpbXBsaWZ5KHZh
ICsgdmEpCnNpbXBsaWZ5KHZhICsgdmIpCnNpbXBsaWZ5KHZhICsgdmIgKyB2YykKc2ltcGxpZnko
dmEgKyB2YiArdmEgKyB2YiArIHZhKQpzaW1wbGlmeSh2YSAtIHZhKQpzaW1wbGlmeSh2YSAtIHZi
KQpzaW1wbGlmeSh2YiAtIHZhKQoKc2ltcGxpZnkodjAqdjApCnNpbXBsaWZ5KHYwXnYwKQoKc2lt
cGxpZnkodjAqdmEpCnNpbXBsaWZ5KHYwXnZhKQpzaW1wbGlmeSh2YV52MCkKCnNpbXBsaWZ5KHZh
KnZhKQpzaW1wbGlmeSh2YSp2YikKCnNpbXBsaWZ5KHZhXnZhKQpzaW1wbGlmeSh2YV52YikKc2lt
cGxpZnkodmJedmEpCgpzaW1wbGlmeSh2YV52YiArIHZiXnZhKQpzaW1wbGlmeSh2YV52YiAtIHZi
XnZhKQoKLS0gQXhpb21zCnNpbXBsaWZ5KHZhXnZhKQoKc2ltcGxpZnkodmEqdmIpCnNpbXBsaWZ5
KHZiKnZhKQoKc2ltcGxpZnkodmFedmIpCnNpbXBsaWZ5KC12Yl52YSkKCnNpbXBsaWZ5KHMzcCh2
YSx2Yix2YykpCnNpbXBsaWZ5KHMzcCh2Yix2Yyx2YSkpCnNpbXBsaWZ5KHMzcCh2Yyx2YSx2Yikp
CnNpbXBsaWZ5KC1zM3AodmEsdmMsdmIpKQpzaW1wbGlmeSgtczNwKHZiLHZhLHZjKSkKc2ltcGxp
ZnkoLXMzcCh2Yyx2Yix2YSkpCgpzaW1wbGlmeShzM3AodmEsdmEsdmIpKQpzaW1wbGlmeShzM3Ao
dmEsdmIsdmIpKQpzaW1wbGlmeShzM3AodmEsdmIsdmEpKQoKeCA6PSBzaW1wbGlmeSh2YV4odmJe
dmMpKQp5IDo9IHNpbXBsaWZ5KCh2YSp2YykqdmIgLSAodmEqdmIpKnZjKQpzaW1wbGlmeSh4LXkp
Cgp4IDo9IHNpbXBsaWZ5KCh2YV52YikqKHZjXnZkKSkKeSA6PSBzaW1wbGlmeSgodmEqdmMpKih2
Yip2ZCkgLSAodmEqdmQpKih2Yip2YykpCnNpbXBsaWZ5KHgteSkKCnggOj0gc2ltcGxpZnkoKHZh
XnZiKV4odmNedmQpKQp5IDo9IHNpbXBsaWZ5KHMzcCh2YSx2Yix2ZCkqdmMgLXMzcCh2YSx2Yix2
YykqdmQpCnNpbXBsaWZ5KHgteSkKCi0tIENoZWNrIGV4cGFuc2lvbiBydWxlIGFwcGxpY2F0aW9u
cwoKLS0gMi44CngxIDo9IHMzcCh2YSx2Yix2YykqdmQKc2ltcGxpZnkoeDEpCmFwcGx5UnVsZSh4
MSwgInJ1bGUyOCIpCgp4MiA6PSB2ZCpzM3AodmEsdmIsdmMpCnNpbXBsaWZ5KHgyKQphcHBseVJ1
bGUoeDIsICJydWxlMjgiKQoKc2ltcGxpZnkoeDEteDIpCgotLSAyLjkKeDEgOj0gczNwKHZhLHZi
LHZjKSoodmRedmUpCnNpbXBsaWZ5KHgxKQphcHBseVJ1bGUoeDEsICJydWxlMjkiKQoKeDIgOj0g
KHZkXnZlKSpzM3AodmEsdmIsdmMpCnNpbXBsaWZ5KHgyKQphcHBseVJ1bGUoeDIsICJydWxlMjki
KQoKc2ltcGxpZnkoeDEteDIpCgotLSAyLjEwCngxIDo9ICh2ZCp2ZSkqczNwKHZhLHZiLHZjKQpz
aW1wbGlmeSh4MSkKYXBwbHlSdWxlKHgxLCAicnVsZTIxMCIpCgp4MiA6PSBzM3AodmEsdmIsdmMp
Kih2ZCp2ZSkKc2ltcGxpZnkoeDIpCmFwcGx5UnVsZSh4MiwgInJ1bGUyMTAiKQoKc2ltcGxpZnko
eDEteDIpCgotLSAyLjExCngxIDo9IHMzcCh2YSx2Yix2YykqczNwKHZkLHZlLHZmKQpzaW1wbGlm
eSh4MSkKYXBwbHlSdWxlKHgxLCAicnVsZTIxMSIpCgp4MiA6PSBzM3AodmQsdmUsdmYpKnMzcCh2
YSx2Yix2YykKc2ltcGxpZnkoeDIpCmFwcGx5UnVsZSh4MiwgInJ1bGUyMTEiKQoKc2ltcGxpZnko
eDEteDIpCgoKLS0gQSBsb25nZXIgZXhhbXBsZQp4IDo9IHMzcCh2YSx2Yix2YykqczNwKHZkLHZl
LHZmKSpzM3AodmcsdmgsdmkpCnhyIDo9IGFwcGx5UnVsZSh4LCAicnVsZTIxMSIpCnhyciA6PSBh
cHBseVJ1bGUoeHIsICJydWxlMjEwIikKeHJyciA6PSBhcHBseVJ1bGUoeHJyLCAicnVsZTIxMCIp
CnhycnJyIDo9IGFwcGx5UnVsZSh4cnJyLCAicnVsZTIxMCIpCnhycnJyciA6PSBhcHBseVJ1bGUo
eHJycnIsICJydWxlMjEwIikKLS0gQnkgZWFjaCBhcHBsaWNhdGlvbiB3ZSBjYW4gZG91YmxlIHRo
ZSBleHByZXNzaW9uIHNpemUhCg==
--20cf307ca1e42d3e9c04d9198337
Content-Type: application/octet-stream; name="VA.spad"
Content-Disposition: attachment; filename="VA.spad"
Content-Transfer-Encoding: base64
X-Attachment-Id: bf1544c94f8dd048_0.3

PDxjYXRlZ29yeSBWU0MgVmVjdG9yU3BhY2VDYXRlZ29yeT4+PQopYWJicmV2IGNhdGVnb3J5IFZT
QyBWZWN0b3JTcGFjZUNhdGVnb3J5CisrIEF1dGhvcjogUmFvdWwgQm91cnF1aW4KKysgRGF0ZSBD
cmVhdGVkOiA3IE9jdG9iZXIgMjAxMgorKyBEYXRlIExhc3QgVXBkYXRlZDogMTIgT2N0b2JlciAy
MDEyCisrIERlc2NyaXB0aW9uOgorKyBJbXBsZW1lbnRhdGlvbiBvZiBjb21wb25lbnQtZnJlZSB2
ZWN0b3IgYWxnZWJyYQorKyBiYXNlZCBvbiB0aGUgdGVjaG5pcXVlcyBkZXNjcmliZWQgaW4gdGhl
IHBhcGVyCisrICJSdWxlLUJhc2VkIFNpbXBsaWZpY2F0aW9uIGluIFZlY3Rvci1Qcm9kdWN0IFNw
YWNlcyIKKysgYnkgU29uZ3hpbiBMaWFuZyBhbmQgRGF2aWQgSi4gSmVmZnJleQpWZWN0b3JTcGFj
ZUNhdGVnb3J5KFIgOiBSaW5nKSA6IENhdGVnb3J5ID09IENvZXJjaWJsZVRvKE91dHB1dEZvcm0p
IHdpdGgKCiAgICAtLSBBZGRpdGlvbiBvZiB2ZWN0b3JzCiAgICAiKyI6ICglLCAlKSAtPiAlCgog
ICAgLS0gU3VidHJhY3Rpb24gYW5kIHVuYXJ5IG1pbnVzIG9mIHZlY3RvcnMKICAgICItIjogKCUs
ICUpIC0+ICUKICAgICItIjogJSAtPiAlCgogICAgLS0gTXVsdGlwbGljYXRpb24gYnkgc2NhbGFy
cyBmcm9tIGJhc2UgZmllbGQgLyByaW5nCiAgICAiKiI6IChSLCAlKSAtPiAlCiAgICAiKiI6ICgl
LCBSKSAtPiAlCgogICAgLS0gRXF1YWxpdHkgb2YgdmVjdG9ycwogICAgIj0iOiAoJSwgJSkgLT4g
Qm9vbGVhbgoKICBhZGQKICAgICh4OiUgLSB5OiUpIDolID09IHggKyAoLTEpOjpSICogeQogICAg
KC14OiUpIDolID09ICgtMSk6OlIgKiB4CiAgICAoeDolICogcjpSKSA6JSA9PSByICogeAoKICAg
IC0tIHdoYXQgYWJvdXQgb3RoZXJzPwogICAgLS0geCA9IHkgPT0KCgo8PGNhdGVnb3J5IFZBQyBW
ZWN0b3JBbGdlYnJhQ2F0ZWdvcnk+Pj0KKWFiYnJldiBjYXRlZ29yeSBWQUMgVmVjdG9yQWxnZWJy
YUNhdGVnb3J5CisrIEF1dGhvcjogUmFvdWwgQm91cnF1aW4KKysgRGF0ZSBDcmVhdGVkOiA3IE9j
dG9iZXIgMjAxMgorKyBEYXRlIExhc3QgVXBkYXRlZDogMTIgT2N0b2JlciAyMDEyCisrIERlc2Ny
aXB0aW9uOgorKyBJbXBsZW1lbnRhdGlvbiBvZiBjb21wb25lbnQtZnJlZSB2ZWN0b3IgYWxnZWJy
YQorKyBiYXNlZCBvbiB0aGUgdGVjaG5pcXVlcyBkZXNjcmliZWQgaW4gdGhlIHBhcGVyCisrICJS
dWxlLUJhc2VkIFNpbXBsaWZpY2F0aW9uIGluIFZlY3Rvci1Qcm9kdWN0IFNwYWNlcyIKKysgYnkg
U29uZ3hpbiBMaWFuZyBhbmQgRGF2aWQgSi4gSmVmZnJleQorKworKyBBeGlvbXM6CisrICAgXHNw
YWR7IChhK2IpXmMgPSBhXmMgKyBiXmMgfQorKyAgIFxzcGFkeyBhXmIgPSAtYl5hIH0KKysgICBc
c3BhZHsgYV4oYl5jKSA9IChhLmMpKmIgLSAoYS5iKSpjIH0KKysgICBcc3BhZHsgKGFiYykgPSAo
YmNhKSB9IHdoZXJlIFxzcGFkeyhhYmMpfSBkZW5vdGVzIFxzcGFkeyhhXmIpLmN9CisrICAgXHNw
YWR7IChhYmMpID0gMCB9IGltcGxpZXMgdGhhdCBcc3BhZHthLCBiLCBjfSBhcmUgbGluZWFybHkg
ZGVwZW5kZW50ClZlY3RvckFsZ2VicmFDYXRlZ29yeShSIDogUmluZykgOiBDYXRlZ29yeSA9PSBW
ZWN0b3JTcGFjZUNhdGVnb3J5KFIpIHdpdGgKICAgIC0tIG9yIEFsZ2VicmEoUikgPwoKICAgIHZl
Y3RvcjogU3ltYm9sIC0+ICUKICAgICAgKysgQ3JlYXRlIGEgc3ltYm9saWMgY29tcG9uZW50LWZy
ZWUgdmVjdG9yIG9iamVjdAoKICAgIHNjYWxhclplcm86ICgpIC0+ICUKICAgICAgKysgQ3JlYXRl
IGEgc2NhbGFyIHplcm8gb2JqZWN0CgogICAgdmVjdG9yWmVybzogKCkgLT4gJQogICAgICArKyBD
cmVhdGUgYSB2ZWN0b3IgemVybyBvYmplY3QKCiAgICBpc1NjYWxhcj86ICUgLT4gQm9vbGVhbgog
ICAgICArKyBDaGVjayBpZiBhIGdpdmVuIGV4cHJlc3Npb24gaXMgc2NhbGFyIHZhbHVlZAoKICAg
IGlzVmVjdG9yPzogJSAtPiBCb29sZWFuCiAgICAgICsrIENoZWNrIGlmIGEgZ2l2ZW4gZXhwcmVz
c2lvbiBpcyB2ZWN0b3IgdmFsdWVkCgogICAgemVybz86ICUgLT4gQm9vbGVhbgoKICAgICIqIjog
KCUsICUpIC0+ICUKICAgICAgKysgRG90L3NjYWxhciBwcm9kdWN0CiAgICAgIC0tIFBvc3NpYmxl
IGNvbmZ1c2lvbiB3aXRoIGluaGVyaXRlZCByOlIqdjolIGZyb20gVlNDPwoKICAgICJeIjogKCUs
ICUpIC0+ICUKICAgICAgKysgVmVjdG9yIGNyb3NzL3dlZGdlIHByb2R1Y3QKICAgICAgLS0gcmF0
aGVyIHVzZSAiL1wiPwoKICAgIHMzcDogKCUsICUsICUpIC0+ICUKICAgICAgKysgVHJpcGxlIHZl
Y3RvciBwcm9kdWN0CgogICAgc2ltcGxpZnk6ICUgLT4gJQogICAgICArKyBTaW1wbGlmeSBhIGdp
dmVuIHZlY3RvciBleHByZXNzaW9uIGJ5IGZpcnN0CiAgICAgICsrIGJyaW5nIGl0IHRvIHRoZSBu
b3JtYWwgZm9ybSwgdGhlbiBhcHBseQogICAgICArKyB0cmFuc2Zvcm1hdGlvbiBydWxlcwoKICAg
IGlkZW50aXR5PzogKCUsICUpIC0+IEJvb2xlYW4KICAgICAgKysgQ2hlY2sgaWYgdHdvIGV4cHJl
c3Npb25zIGFyZSBlcXVhbCBpbiB2YWx1ZQoKICAgIGNvZXJjZTogJSAtPiBPdXRwdXRGb3JtCiAg
ICAgICsrCgogICAgYXBwbHlSdWxlOiAoJSwgU3RyaW5nKSAtPiAlCgogICAgbGF0ZXg6ICUgLT4g
U3RyaW5nCgogIGFkZAoKICAgIHMzcCh4OiUsIHk6JSwgejolKSA6JSA9PSAoeF55KSAqIHoKCgo8
PGRvbWFpbiBWQSBWZWN0b3JBbGdlYnJhPj49CilhYmJyZXYgZG9tYWluIFZBIFZlY3RvckFsZ2Vi
cmEKKysgQXV0aG9yOiBSYW91bCBCb3VycXVpbgorKyBEYXRlIENyZWF0ZWQ6IDcgT2N0b2JlciAy
MDEyCisrIERhdGUgTGFzdCBVcGRhdGVkOiAxMiBPY3RvYmVyIDIwMTIKKysgRGVzY3JpcHRpb246
CisrIEltcGxlbWVudGF0aW9uIG9mIGNvbXBvbmVudC1mcmVlIHZlY3RvciBhbGdlYnJhCisrIGJh
c2VkIG9uIHRoZSB0ZWNobmlxdWVzIGRlc2NyaWJlZCBpbiB0aGUgcGFwZXIKKysgIlJ1bGUtQmFz
ZWQgU2ltcGxpZmljYXRpb24gaW4gVmVjdG9yLVByb2R1Y3QgU3BhY2VzIgorKyBieSBTb25neGlu
IExpYW5nIGFuZCBEYXZpZCBKLiBKZWZmcmV5ClZlY3RvckFsZ2VicmEoUiA6IFJpbmcpIDogVmVj
dG9yQWxnZWJyYUNhdGVnb3J5KFIpID09IEltcGxlbWVudGF0aW9uIHdoZXJlCgogIEV4cG9ydHMg
PT0gd2l0aAoKICAgIG5vcm1hbGl6ZTogJSAtPiAlCiAgICAgICsrIEJyaW5nIHRoZSB2ZWN0b3Ig
ZXhwcmVzc2lvbiBpbnRvIGEgbm9ybWFsIGZvcm0KICAgICAgKysgb2YgdHlwZSBbY29lZiwgc2Nh
LCB2ZWNdCiAgICAgICsrIEV4YW1wbGUgb2YgYSBub3JtYWwgZm9ybToKICAgICAgKysgLTIgKiAo
YS5iKSooYWJjKSAqIChjXmQpCiAgICAgICsrIFstMiwgW1thLCBiXSxbYSwgYiwgY11dLCBbYywg
ZF1dCgogICAgLS10ZXJtT3JkZXI6CiAgICAtLSBXaGF0IGNhbiB3ZSBnYWluIGJ5IGV4cG9ydGlu
ZyB0aGlzPwogICAgICArKyBSZW9yZGVyIHRoZSB0ZXJtcyBieSB0aGUgdGVybSBvcmRlciBjb25z
dHJ1Y3RlZAoKICAgIC0tYXBwbHlSdWxlOiAoJSwgU3RyaW5nKSAtPiAlCgoKICBJbXBsZW1lbnRh
dGlvbiA9PSBhZGQKCiAgICBJTlQgPT0+IEludGVnZXIKICAgIE5OSSA9PT4gTm9uTmVnYXRpdmVJ
bnRlZ2VyCgogICAgcmVwIHggPT0+ICh4QCUpIHByZXRlbmQgUmVwCiAgICBwZXIgeCA9PT4gKHhA
UmVwKSBwcmV0ZW5kICUKCiAgICAtLSBCYXNpYyBkYXRhIHR5cGVzIHVzZWQKICAgIGNvZVBhcnQg
PT0gUgogICAgc2NhUGFydCA9PSBMaXN0IExpc3QgU3RyaW5nCiAgICB2ZWNQYXJ0ID09IExpc3Qg
U3RyaW5nCiAgICAtLSB3ZSBkb250IHdhbnQgdG8gdXNlIFN0cmluZ3MsIHJhdGhlciBFeHBycz8g
U3ltYm9scz8gVmFyaWFibGVzPwoKICAgIC0tIEEgc2luZ2xlIHRlcm0gaXMgb2YgdGhlIGZvcm0g
YWxwaGEgKiBhICogdgogICAgVGVybSA9PSBSZWNvcmQoY29lOlIsIHNjYTpzY2FQYXJ0LCB2ZWM6
dmVjUGFydCkKCiAgICAtLSBBIG5vcm1hbCBmb3JtIGlzIGEgc3VtIG9mIHRlcm1zCiAgICBSZXAg
PT0gTGlzdCBUZXJtCgogICAgLS0gRnVydGhlciBzdHJ1Y3R1cmVzIHVzZWQgZm9yIGNvbnRyYWN0
aW9uIHJ1bGVzCiAgICBzY2FUZXJtID09IFJlY29yZChjb2UyOlIsIHNjYTI6c2NhUGFydCkKICAg
IHNjYUxpc3QgPT0gTGlzdChzY2FUZXJtKQogICAgbWl4VGVybSA9PSBSZWNvcmQoc2NhbDogc2Nh
TGlzdCwgdmVjMjogdmVjUGFydCkKCiAgICAtLSBFeHRyYWN0IHNpbmdsZSBwYXJ0cyBvdXQgb2Yg
dGVybXMKICAgIC0tIERvIHdlIHJlYWxseSBuZWVkIHRoaXM/CiAgICBjb2VmUGFydCh4OlRlcm0p
IDogUiA9PSB4LmNvZQogICAgc2NhbGFyUGFydCh4OlRlcm0pIDogc2NhUGFydCA9PSB4LnNjYQog
ICAgdmVjdG9yUGFydCh4OlRlcm0pIDogdmVjUGFydCA9PSB4LnZlYwoKCiAgICAtLSBDb25zdHJ1
Y3QgbmV3IGRvbWFpbiBlbGVtZW50cwoKICAgIHNjYWxhclplcm8oKSA6ICUgPT0gcGVyIFsgWzAs
IFtdLCBbXV0gXQoKICAgIHZlY3Rvclplcm8oKSA6ICUgPT0gcGVyIFsgWzAsIFtdLCBbIjAiXV0g
XQogICAgICAtLSBUT0RPOiBGaXggIjAiIHN0cmluZyBoZXJlCgogICAgdmVjdG9yKHg6U3ltYm9s
KSA6ICUgPT0gcGVyIFsgWzE6OlIsIFtdLCBbc3RyaW5nIHhdXSBdCgoKICAgIC0tIENoZWNrIGEg
dGVybSBmb3IgYmVpbmcgemVybwoKICAgIHN6ZXJvPyh4OlRlcm0pIDogQm9vbGVhbiA9PQogICAg
ICAtLSBDb2VmZmljaWVudCBpcyB6ZXJvIGFuZCB0aGVyZSBpcyBubyB2ZWN0b3IgcGFydAogICAg
ICAtLSBCdXQgd2hhdCBhYm91dCBzY2FsYXIgcGFydDogc2NhbGFyIHBhcnQgY291bGQgYmUgemVy
bwogICAgICAtLSBpZiBpdCBjb250YWlucyBhIHNjYWxhciBwcm9kdWN0IG9mIG9ydGhvZ29uYWwg
dmVjdG9ycy4KICAgICAgLS0gQnV0OiB3ZSBjYW4gbm90IG1ha2UgYW55IGFzc3VtcHRpb25zIG9u
IGFic3RyYWN0IHZlY3RvcnMgeWV0IQogICAgICB4LmNvZSA9IDAgYW5kIGVtcHR5PyB4LnZlYwoK
ICAgIHZ6ZXJvPyh4OlRlcm0pIDogQm9vbGVhbiA9PQogICAgICAtLSBWZWN0b3IgaXMgemVybyBv
ciBtdWx0aXBsaWVkIGJ5IHplcm8gY29lZmZpY2llbnQKICAgICAgLS0gQnV0IHdoYXQgYWJvdXQg
c2NhbGFyIHBhcnQ6IHNjYWxhciBwYXJ0IGNvdWxkIGJlIHplcm8KICAgICAgLS0gaWYgaXQgY29u
dGFpbnMgYSBzY2FsYXIgcHJvZHVjdCBvZiBvcnRob2dvbmFsIHZlY3RvcnMuCiAgICAgIC0tIEJ1
dDogd2UgY2FuIG5vdCBtYWtlIGFueSBhc3N1bXB0aW9ucyBvbiBhYnN0cmFjdCB2ZWN0b3JzIHll
dCEKICAgICAgfmVtcHR5PyB4LnZlYyBhbmQgKHguY29lID0gMCBvciAoeC52ZWMpKDEpID0gIjAi
KQogICAgICAtLSBXaGF0IGFib3V0IHgudmVjIGJlZWluZyBhIHplcm8/CiAgICAgIC0tIE9yIGEg
dmVjdG9yIHByb2R1Y3Qgd2l0aCBvbmUgZmFjdG9yIGEgemVybz8KCiAgICB6ZXJvPyh4OiUpIDog
Qm9vbGVhbiA9PQogICAgICB4eCA6PSByZXAgeAogICAgICByZXN1bHQgOj0gdHJ1ZQogICAgICBm
b3IgdHggaW4geHggcmVwZWF0CiAgICAgICAgbm90IHN6ZXJvPyB0eCBhbmQgbm90IHZ6ZXJvPyB0
eCA9PiByZXN1bHQgOj0gZmFsc2UKICAgICAgcmVzdWx0CgoKICAgIC0tIENoZWNrIHNoYXBlcwoK
ICAgIC0tIENoZWNrIGlmIGFuIGV4cHJlc3Npb24gaXMgYSB0cnVlIHZlY3RvciAocG9zc2libHkg
emVybykKICAgIC0tIG9yIGp1c3QgYSBzY2FsYXIgZXhwcmVzc2lvbi4gRXhhbXBsZXMgZm9yIHNp
bmdsZSB0ZXJtczoKICAgIC0tIFthLCBbXSwgW11dICBzY2FsYXIKICAgIC0tIFthLCBbLi4uXSwg
W11dICBzY2FsYXIKICAgIC0tIFswLCBbLi4uXSwgW11dICBzY2FsYXIKICAgIC0tIFswLCBbXSwg
W11dICBzY2FsYXIKICAgIC0tIFswLCBbLi4uXSwgWzBdXSAgemVyby12ZWN0b3IKICAgIC0tIFth
LCBbLi4uXSwgWzBdXSAgemVyby12ZWN0b3IKICAgIC0tIFthLCBbMCwwXSwgWzBdXSAgemVyby12
ZWN0b3IKICAgIC0tIFthLCBbLi4uXSwgW3ZdXSAgdmVjdG9yCiAgICAtLSBbYSwgWy4uLl0sIFt2
LCB3XV0gIHZlY3RvcgogICAgLS0gWzAsIFsuLi5dLCBbdSwgdiwgd11dICB2ZWN0b3I/ICh0cmlw
bGUgcHJvZHVjdCBldmFsdWF0ZWQgcmVzdWx0IGluIHNjYWxhciEpCgogICAgaXNTY2FsYXI/KHg6
JSkgOiBCb29sZWFuID09CiAgICAgIHh4IDo9IHJlcCB4CiAgICAgIGVtcHR5PyB4eCA9PiBmYWxz
ZQogICAgICByZXN1bHQgOj0gdHJ1ZQogICAgICAtLSBTZWFyY2ggaWYgdGhlcmUgaXMgYSB0ZXJt
IHdoaWNoIGlzIG5vdCBhIHNjYWxhcgogICAgICBmb3IgdHggaW4geHggcmVwZWF0CiAgICAgICAg
bm90IGVtcHR5PyB0eC52ZWMgPT4gKHJlc3VsdCA6PSBmYWxzZSkKICAgICAgcmVzdWx0CgogICAg
aXNWZWN0b3I/KHg6JSkgOiBCb29sZWFuID09CiAgICAgIHh4IDo9IHJlcCB4CiAgICAgIGVtcHR5
PyB4eCA9PiBmYWxzZQogICAgICAtLSBTZWFyY2ggaWYgdGhlcmUgaXMgYSB0ZXJtIHdoaWNoIGlz
IG5vdCBhIHZlY3RvcgogICAgICByZXN1bHQgOj0gdHJ1ZQogICAgICBmb3IgdHggaW4geHggcmVw
ZWF0CiAgICAgICAgZW1wdHk/IHR4LnZlYyA9PiAocmVzdWx0IDo9IGZhbHNlKQogICAgICByZXN1
bHQKCgogICAgLS0gVGVybSBvcmRlciBmdW5jdGlvbnMKCiAgICBsaXN0T3JkZXI/KHYxOnZlY1Bh
cnQsIHYyOnZlY1BhcnQpIDogQm9vbGVhbiA9PQogICAgICBlbXB0eT8gdjEgPT4gdHJ1ZQogICAg
ICBlbXB0eT8gdjIgPT4gZmFsc2UKICAgICAgbjEgOj0gI3YxCiAgICAgIG4yIDo9ICN2MgogICAg
ICBuMSA8IG4yID0+IHRydWUKICAgICAgbjEgPiBuMiA9PiBmYWxzZQoKICAgICAgLS0gQ2FzZSBu
MSA9IG4yCiAgICAgIHJlc3VsdCA6PSB0cnVlCiAgICAgIGZvciBpIGluIDEuLm4xIHJlcGVhdAog
ICAgICAgIGlmIHYxKGkpIDwgdjIoaSkgdGhlbgogICAgICAgICAgcmVzdWx0IDo9IHRydWUKICAg
ICAgICAgIGJyZWFrCgogICAgICAgIGlmIHYxKGkpID4gdjIoaSkgdGhlbgogICAgICAgICAgcmVz
dWx0IDo9IGZhbHNlCiAgICAgICAgICBicmVhawoKICAgICAgcmVzdWx0CgogICAgbGlzdEVxPyh2
MTp2ZWNQYXJ0LCB2Mjp2ZWNQYXJ0KSA6IEJvb2xlYW4gPT0KICAgICAgZW1wdHk/IHYxIGFuZCBl
bXB0eT8gdjIgPT4gdHJ1ZQogICAgICBlbXB0eT8gdjEgYW5kIG5vdCBlbXB0eT8gdjIgPT4gZmFs
c2UKICAgICAgbjEgOj0gI3YxCiAgICAgIG4yIDo9ICN2MgogICAgICBuMSB+PSBuMiA9PiBmYWxz
ZQoKICAgICAgLS0gQ2FzZSBuMSA9IG4yCiAgICAgIHJlc3VsdCA6PSB0cnVlCiAgICAgIGZvciBp
IGluIDEuLm4xIHJlcGVhdAogICAgICAgIGlmIHYxKGkpIH49IHYyKGkpIHRoZW4KICAgICAgICAg
IHJlc3VsdCA6PSBmYWxzZQogICAgICAgICAgYnJlYWsKCiAgICAgIHJlc3VsdAoKICAgIGxpc3RM
aXN0T3JkZXI/KHMxOnNjYVBhcnQsIHMyOnNjYVBhcnQpIDogQm9vbGVhbiA9PQogICAgICBlbXB0
eT8gczEgPT4gdHJ1ZQogICAgICBlbXB0eT8gczIgPT4gZmFsc2UKICAgICAgbjEgOj0gI3MxCiAg
ICAgIG4yIDo9ICNzMgogICAgICBuMSA8IG4yID0+IHRydWUKICAgICAgbjEgPiBuMiA9PiBmYWxz
ZQogICAgICByZXN1bHQgOj0gdHJ1ZQoKICAgICAgLS0gQ2FzZSBuMSA9IG4yCiAgICAgIGZvciBp
IGluIDEuLm4xIHJlcGVhdAogICAgICAgIGlmIGxpc3RPcmRlcj8oczEoaSksIHMyKGkpKSBhbmQg
bm90IGxpc3RFcT8oczEoaSksIHMyKGkpKSB0aGVuCiAgICAgICAgICByZXN1bHQgOj0gdHJ1ZQog
ICAgICAgICAgYnJlYWsKCiAgICAgICAgaWYgbm90IGxpc3RPcmRlcj8oczEoaSksIHMyKGkpKSB0
aGVuCiAgICAgICAgICByZXN1bHQgOj0gZmFsc2UKICAgICAgICAgIGJyZWFrCgogICAgICByZXN1
bHQKCiAgICBsaXN0TGlzdEVxPyhzMTpzY2FQYXJ0LCBzMjpzY2FQYXJ0KSA6IEJvb2xlYW4gPT0K
ICAgICAgZW1wdHk/IHMxIGFuZCBlbXB0eT8gczIgPT4gdHJ1ZQogICAgICBlbXB0eT8gczEgYW5k
IG5vdCBlbXB0eT8gczIgPT4gZmFsc2UKICAgICAgbjEgOj0gI3MxCiAgICAgIG4yIDo9ICNzMgog
ICAgICBuMSB+PSBuMiA9PiBmYWxzZQogICAgICByZXN1bHQgOj0gdHJ1ZQoKICAgICAgLS0gQ2Fz
ZSBuMSA9IG4yCiAgICAgIGZvciBpIGluIDEuLm4xIHJlcGVhdAogICAgICAgIGlmIG5vdCBsaXN0
RXE/KHMxKGkpLCBzMihpKSkgdGhlbgogICAgICAgICAgcmVzdWx0IDo9IGZhbHNlCiAgICAgICAg
ICBicmVhawoKICAgICAgcmVzdWx0CgogICAgdGVybU9yZGVyPyh0MTpUZXJtLCB0MjpUZXJtKSA6
IEJvb2xlYW4gPT0KICAgICAgc3plcm8/IHQxIG9yIHZ6ZXJvPyB0MSA9PiB0cnVlCiAgICAgIHN6
ZXJvPyB0MiBvciB2emVybz8gdDIgPT4gZmFsc2UKCiAgICAgIGxpc3RPcmRlcj8odDEudmVjLCB0
Mi52ZWMpIGFuZCBub3QgbGlzdEVxPyh0MS52ZWMsIHQyLnZlYykgPT4gdHJ1ZQogICAgICBub3Qg
bGlzdEVxPyh0MS52ZWMsIHQyLnZlYykgPT4gZmFsc2UKCiAgICAgIGxpc3RMaXN0T3JkZXI/KHQx
LnNjYSwgdDIuc2NhKSBhbmQgbm90IGxpc3RMaXN0RXE/KHQxLnNjYSwgdDIuc2NhKSA9PiB0cnVl
CiAgICAgIG5vdCBsaXN0TGlzdEVxPyh0MS5zY2EsIHQyLnNjYSkgPT4gZmFsc2UKCiAgICAgIHRy
dWUKCiAgICB0ZXJtRXE/KHQxOlRlcm0sIHQyOlRlcm0pIDogQm9vbGVhbiA9PQogICAgICB0MS5j
b2UgPSB0Mi5jb2UgYW5kIGxpc3RMaXN0RXE/KHQxLnNjYSwgdDIuc2NhKSBhbmQgbGlzdEVxPyh0
MS52ZWMsIHQyLnZlYykgPT4gdHJ1ZQoKICAgIHNjYWxhclBhcnRFcT8odDE6VGVybSwgdDI6VGVy
bSkgOiBCb29sZWFuID09CiAgICAgIGxpc3RMaXN0RXE/KHQxLnNjYSwgdDIuc2NhKQoKICAgIHZl
Y3RvclBhcnRFcT8odDE6VGVybSwgdDI6VGVybSkgOiBCb29sZWFuID09CiAgICAgIGxpc3RFcT8o
dDEudmVjLCB0Mi52ZWMpCgoKICAgIC0tIEJyaW5nIHRoZSB2ZWN0b3IgZXhwcmVzc2lvbiBpbnRv
IGEgbm9ybWFsIGZvcm0KICAgIC0tIG9mIHR5cGUgW2NvZWYsIHNjYSwgdmVjXQogICAgLS0gRXhh
bXBsZSBvZiBhIG5vcm1hbCBmb3JtOgogICAgLS0gLTIgKiAoYS5iKSooYWJjKSAqIChjXmQpCiAg
ICAtLSBbLTIsIFtbYSwgYl0sW2EsIGIsIGNdXSwgW2MsIGRdXQogICAgbm9ybWFsRm9ybSh4eDpS
ZXApIDogUmVwID09CiAgICAgIC0tIGZvciBhbGwgdHggaW4geHgKICAgICAgLS0gICBtYWtlIHNj
YWxhciBwYXJ0IGFuZCB2ZWN0b3IgcGFydCBpbiBhc2NlbmRpbmcgb3JkZXIKICAgICAgLS0gICB1
c2UgdHJhbnNmb3JtYXRpb24gcnVsZXMgdG8gY2hlY2sgZm9yIHplcm8gKG5vdCBoZXJlKQogICAg
ICAtLSAgIGNvbGxlY3Qgbm9uLXplcm8gdGVybXMgaW4geXkKICAgICAgLS0gICBtYWtlIHl5IGlu
IGFzY2VuZGluZyBvcmRlcgogICAgICAtLSAgIGNvbWJpbmUgc2FtZSB0ZXJtcyAobm90IGhlcmUp
CiAgICAgIC0tIHJldHVybiB5CgogICAgICByZXN1bHQgOiBSZXAgOj0gZW1wdHkoKQoKICAgICAg
Zm9yIHR4IGluIHh4IHJlcGVhdAogICAgICAgIC0tIFJlc3VsdCB0ZXJtCiAgICAgICAgbnQgOiBU
ZXJtIDo9IFt0eC5jb2UsIFtdLCBbXV0KCiAgICAgICAgLS0gT3JkZXIgc2NhbGFyIHBhcnRzCiAg
ICAgICAgc2NhUGFydHMgOj0gdHguc2NhCiAgICAgICAgbnNwIDogc2NhUGFydCA6PSBlbXB0eSgp
CgogICAgICAgIGZvciBzcCBpbiBzY2FQYXJ0cyByZXBlYXQKICAgICAgICAgIGlmICNzcCA9IDEg
dGhlbgogICAgICAgICAgICAtLSBBIHNpbmdsZSBzY2FsYXIgcGFydAogICAgICAgICAgICBuc3Ag
Oj0gY29ucyhzcCwgbnNwKQoKICAgICAgICAgIGVsc2UgaWYgI3NwID0gMiB0aGVuCiAgICAgICAg
ICAgIC0tIEEgc2NhbGFyIHByb2R1Y3QKICAgICAgICAgICAgLS0gQXhpb20gMi4yIGFwcGxpZXM6
IGEqYiA9IGIqYQogICAgICAgICAgICBuc3AgOj0gY29ucyhzb3J0KHNwKSwgbnNwKQoKICAgICAg
ICAgIGVsc2UgaWYgI3NwID0gMyB0aGVuCiAgICAgICAgICAgIC0tIEEgc2NhbGFyIHRyaXBsZSBw
cm9kdWN0CiAgICAgICAgICAgIC0tIEF4aW9tIDIuMyBhcHBsaWVzOiBbYWJjXSA9IFtiY2FdID0g
W2NhYl0gPSAtW2FjYl0gPSAtW2NiYV0gPSAtW2JhY10KICAgICAgICAgICAgciA6PSBjb3VudGlu
Z0J1YmJsZVNvcnQoc3ApJFNvcnRQYWNrYWdlKFN0cmluZywgTGlzdChTdHJpbmcpKQogICAgICAg
ICAgICBuc3AgOj0gY29ucyhyLnNvcnRlZCwgbnNwKQogICAgICAgICAgICBpZiBvZGQ/IHIuZXhj
aGFuZ2VzIHRoZW4gbnQuY29lIDo9IC1udC5jb2UKCiAgICAgICAgLS0gU29ydCB0aGUgc2NhbGFy
IHBhcnRzCiAgICAgICAgbnQuc2NhIDo9IHNvcnQobGlzdE9yZGVyPywgbnNwKQoKICAgICAgICAt
LSBPcmRlciB2ZWN0b3IgcGFydHMKICAgICAgICB2cCA6PSB0eC52ZWMKICAgICAgICBudnAgOiB2
ZWNQYXJ0IDo9IGVtcHR5KCkKCiAgICAgICAgaWYgI3ZwID0gMSB0aGVuCiAgICAgICAgICAtLSBB
IHNpbmdsZSB2ZWN0b3IgcGFydAogICAgICAgICAgbnZwIDo9IHZwCgogICAgICAgIGVsc2UgaWYg
I3ZwID0gMiB0aGVuCiAgICAgICAgICAtLSBBIHZlY3RvciBwcm9kdWN0CiAgICAgICAgICAtLSBB
eGlvbSAyLjIgYXBwbGllczogYV5iID0gLWJeYQogICAgICAgICAgciA6PSBjb3VudGluZ0J1YmJs
ZVNvcnQodnApJFNvcnRQYWNrYWdlKFN0cmluZywgTGlzdChTdHJpbmcpKQogICAgICAgICAgbnZw
IDo9IHIuc29ydGVkCiAgICAgICAgICBpZiBvZGQ/IHIuZXhjaGFuZ2VzIHRoZW4gbnQuY29lIDo9
IC1udC5jb2UKCiAgICAgICAgbnQudmVjIDo9IG52cAoKICAgICAgICAtLSBBZGQgbmV3IHRlcm0g
dG8gdGhlIHJlc3VsdAogICAgICAgIHJlc3VsdCA6PSBjb25zKG50LCByZXN1bHQpCgogICAgICAt
LSBTb3J0IHRoZSB0ZXJtcyBpbiB0aGUgcmVzdWx0CiAgICAgIHJlc3VsdCA6PSBzb3J0ISh0ZXJt
T3JkZXI/LCByZXN1bHQpCgoKICAgIG5vcm1hbGl6ZSh4OiUpIDogJSA9PQogICAgICBwZXIgbm9y
bWFsRm9ybShyZXAgeCkKCgogICAgLS0gSW1wbGVtZW50YXRpb24gb2YgYWxnZWJyYWljIG9wZXJh
dGlvbnMKCiAgICAtLSBBZGRpdGlvbgogICAgKHg6JSArIHk6JSkgOiAlID09CiAgICAgIGlzVmVj
dG9yPyh4KSB+PSBpc1ZlY3Rvcj8oeSkgPT4gZXJyb3IgIkFkZGl0aW9uIG9mIG5vbi1jb21wYXRp
YmxlIGVsZW1lbnQgc2hhcGVzIgogICAgICBwZXIgbm9ybWFsRm9ybSBhcHBlbmQocmVwIHgsIHJl
cCB5KQoKICAgIC0tIFNjYWxhciB0aW1lcyB2ZWN0b3IKICAgIChyOlIgKiB4OiUpIDogJSA9PQog
ICAgICB4eCA6PSByZXAgeAogICAgICB6eiA6PSBbIFtyKnR4LmNvZSwgdHguc2NhLCB0eC52ZWNd
IGZvciB0eCBpbiB4eCBdCiAgICAgIHBlciBub3JtYWxGb3JtIHp6CgogICAgLS0gTXVsdGlwbHkg
dHdvIGRvbWFpbiBlbGVtZW50cwogICAgc2NhbGFyVGltZXNTY2FsYXIocnI6UmVwLCBzczpSZXAp
IDogUmVwID09CiAgICAgIHp6IDogUmVwIDo9IGVtcHR5KCkKCiAgICAgIGZvciB0ciBpbiByciBy
ZXBlYXQKICAgICAgICBmb3IgdHMgaW4gc3MgcmVwZWF0CiAgICAgICAgICB0IDo9IFt0ci5jb2Uq
dHMuY29lLCBhcHBlbmQodHIuc2NhLHRzLnNjYSksIFtdXUBUZXJtCiAgICAgICAgICB6eiA6PSBj
b25zKHQsIHp6KQoKICAgICAgbm9ybWFsRm9ybSB6egoKICAgIHNjYWxhclRpbWVzVmVjdG9yKHNz
OlJlcCwgdnY6UmVwKSA6IFJlcCA9PQogICAgICB6eiA6IFJlcCA6PSBlbXB0eSgpCgogICAgICBm
b3IgdHMgaW4gc3MgcmVwZWF0CiAgICAgICAgZm9yIHR2IGluIHZ2IHJlcGVhdAogICAgICAgICAg
dCA6PSBbdHMuY29lKnR2LmNvZSwgYXBwZW5kKHRzLnNjYSx0di5zY2EpLCB0di52ZWNdQFRlcm0K
ICAgICAgICAgIHp6IDo9IGNvbnModCwgenopCgogICAgICBub3JtYWxGb3JtIHp6CgogICAgLS0g
U2NhbGFyIG9yIGRvdC1wcm9kdWN0IG9mIHR3byB2ZWN0b3JzCiAgICB2ZWN0b3JUaW1lc1ZlY3Rv
cih4eDpSZXAsIHl5OlJlcCkgOiBSZXAgPT0KICAgICAgenogOiBSZXAgOj0gZW1wdHkoKQoKICAg
ICAgZm9yIHR4IGluIHh4IHJlcGVhdAogICAgICAgIG54OklOVCA6PSAjIHR4LnZlYwoKICAgICAg
ICBmb3IgdHkgaW4geXkgcmVwZWF0CiAgICAgICAgICBueTpJTlQgOj0gIyB0eS52ZWMKCiAgICAg
ICAgICB2eCA6PSB0eC52ZWMKICAgICAgICAgIHZ5IDo9IHR5LnZlYwoKICAgICAgICAgIGlmIG54
ID0gMSBhbmQgbnkgPSAxIHRoZW4KICAgICAgICAgICAgc2NhcCA6PSBjb25zKFt2eCgxKSx2eSgx
KV0sIGFwcGVuZCh0eC5zY2EsdHkuc2NhKSkKICAgICAgICAgICAgbSA6PSBbdHguY29lICogdHku
Y29lLCBzY2FwLCBbXV1AVGVybQogICAgICAgICAgICB6eiA6PSBjb25zKG0sIHp6KQoKICAgICAg
ICAgIGVsc2UgaWYgbnggPSAxIGFuZCBueSA9IDIgdGhlbgogICAgICAgICAgICBzY2FwIDo9IGNv
bnMoW3Z4KDEpLHZ5KDEpLHZ5KDIpXSwgYXBwZW5kKHR4LnNjYSx0eS5zY2EpKQogICAgICAgICAg
ICBtIDo9IFt0eC5jb2UqdHkuY29lLCBzY2FwLCBbXV1AVGVybQogICAgICAgICAgICB6eiA6PSBj
b25zKG0sIHp6KQoKICAgICAgICAgIGVsc2UgaWYgbnggPSAyIGFuZCBueSA9IDEgdGhlbgogICAg
ICAgICAgICBzY2FwIDo9IGNvbnMoW3Z4KDEpLHZ4KDIpLHZ5KDEpXSwgYXBwZW5kKHR4LnNjYSx0
eS5zY2EpKQogICAgICAgICAgICBtIDo9IFt0eC5jb2UqdHkuY29lLCBzY2FwLCBbXV1AVGVybQog
ICAgICAgICAgICB6eiA6PSBjb25zKG0sIHp6KQoKICAgICAgICAgIGVsc2UgaWYgbnggPSAyIGFu
ZCBueSA9IDIgdGhlbgogICAgICAgICAgICBjb2VwIDo9IHR4LmNvZSAqIHR5LmNvZQogICAgICAg
ICAgICBzY2FwMSA6PSBbW3Z4KDEpLHZ5KDEpXSwgW3Z4KDIpLHZ5KDIpXV0KICAgICAgICAgICAg
c2NhcDIgOj0gW1t2eCgxKSx2eSgyKV0sIFt2eCgyKSx2eSgxKV1dCiAgICAgICAgICAgIG0xIDo9
IFtjb2VwLCBhcHBlbmQoc2NhcDEsYXBwZW5kKHR4LnNjYSx0eS5zY2EpKSwgW11dQFRlcm0KICAg
ICAgICAgICAgbTIgOj0gWygtMSkqY29lcCwgYXBwZW5kKHNjYXAyLGFwcGVuZCh0eC5zY2EsdHku
c2NhKSksIFtdXUBUZXJtCiAgICAgICAgICAgIHp6IDo9IGFwcGVuZCh6eiwgW20xLCBtMl0pCgog
ICAgICBub3JtYWxGb3JtIHp6CgogICAgLS0gRGlzcGF0Y2ggKiBvcGVyYXRvciBvZiB0d28gZG9t
YWluIGVsZW1lbnRzIGRlcGVuZGluZyBvbiBlbGVtZW50IHNoYXBlCiAgICAoeDolICogeTolKSA6
ICUgPT0KICAgICAgeHggOj0gcmVwIHgKICAgICAgeXkgOj0gcmVwIHkKICAgICAgdGV4IDo9IGlz
VmVjdG9yPyh4KQogICAgICB0ZXkgOj0gaXNWZWN0b3I/KHkpCgogICAgICBub3QgdGV4IGFuZCBu
b3QgdGV5ID0+CiAgICAgICAgcGVyIHNjYWxhclRpbWVzU2NhbGFyKHh4LCB5eSkKCiAgICAgIHRl
eCBhbmQgbm90IHRleSA9PgogICAgICAgIHBlciBzY2FsYXJUaW1lc1ZlY3Rvcih5eSwgeHgpCgog
ICAgICBub3QgdGV4IGFuZCB0ZXkgPT4KICAgICAgICBwZXIgc2NhbGFyVGltZXNWZWN0b3IoeHgs
IHl5KQoKICAgICAgdGV4IGFuZCB0ZXkgPT4KICAgICAgICBwZXIgdmVjdG9yVGltZXNWZWN0b3Io
eXksIHh4KQoKCiAgICAtLSBXZWRnZSBvciBjcm9zcy1wcm9kdWN0IG9mIHR3byB2ZWN0b3JzCiAg
ICAoeDolIF4geTolKSA6JSA9PQogICAgICBub3QgaXNWZWN0b3I/KHgpIG9yIG5vdCBpc1ZlY3Rv
cj8oeSkgPT4gZXJyb3IgIldlZGdlIHByb2R1Y3QgY2FuIG5vdCBjb250YWluIHNjYWxhciBlbGVt
ZW50cyIKCiAgICAgIHh4IDo9IHJlcCB4CiAgICAgIHl5IDo9IHJlcCB5CgogICAgICB6eiA6IFJl
cCA6PSBlbXB0eSgpCgogICAgICBmb3IgdHggaW4geHggcmVwZWF0CiAgICAgICAgbng6SU5UIDo9
ICMgdHgudmVjCgogICAgICAgIGZvciB0eSBpbiB5eSByZXBlYXQKICAgICAgICAgIG55OklOVCA6
PSAjIHR5LnZlYwoKICAgICAgICAgIHZ4IDo9IHR4LnZlYwogICAgICAgICAgdnkgOj0gdHkudmVj
CgogICAgICAgICAgaWYgbnggPSAxIGFuZCBueSA9IDEgdGhlbgogICAgICAgICAgICBtIDo9IFt0
eC5jb2UqdHkuY29lLCBhcHBlbmQodHguc2NhLHR5LnNjYSksIGFwcGVuZCh0eC52ZWMsdHkudmVj
KV1AVGVybQogICAgICAgICAgICB6eiA6PSBjb25zKG0sIHp6KQoKICAgICAgICAgIGVsc2UgaWYg
bnggPSAxIGFuZCBueSA9IDIgdGhlbgogICAgICAgICAgICBjb2VwIDo9IHR4LmNvZSAqIHR5LmNv
ZQogICAgICAgICAgICBzY2FwMSA6PSBjb25zKFt2eCgxKSx2eSgyKV0sIGFwcGVuZCh0eC5zY2Es
dHkuc2NhKSkKICAgICAgICAgICAgc2NhcDIgOj0gY29ucyhbdngoMSksdnkoMSldLCBhcHBlbmQo
dHguc2NhLHR5LnNjYSkpCiAgICAgICAgICAgIG0xIDo9IFtjb2VwLCBzY2FwMSwgW3Z5KDEpXV1A
VGVybQogICAgICAgICAgICBtMiA6PSBbKC0xKSpjb2VwLCBzY2FwMiwgW3Z5KDIpXV1AVGVybQog
ICAgICAgICAgICB6eiA6PSBhcHBlbmQoenosIFttMSwgbTJdKQoKICAgICAgICAgIGVsc2UgaWYg
bnggPSAyIGFuZCBueSA9IDEgdGhlbgogICAgICAgICAgICBjb2VwIDo9IHR4LmNvZSAqIHR5LmNv
ZQogICAgICAgICAgICBzY2FwMSA6PSBjb25zKFt2eCgxKSx2eSgxKV0sIGFwcGVuZCh0eC5zY2Es
dHkuc2NhKSkKICAgICAgICAgICAgc2NhcDIgOj0gY29ucyhbdngoMiksdnkoMSldLCBhcHBlbmQo
dHguc2NhLHR5LnNjYSkpCiAgICAgICAgICAgIG0xIDo9IFtjb2VwLCBzY2FwMSwgW3Z4KDIpXV1A
VGVybQogICAgICAgICAgICBtMiA6PSBbKC0xKSpjb2VwLCBzY2FwMiwgW3Z4KDEpXV1AVGVybQog
ICAgICAgICAgICB6eiA6PSBhcHBlbmQoenosIFttMSwgbTJdKQoKICAgICAgICAgIGVsc2UgaWYg
bnggPSAyIGFuZCBueSA9IDIgdGhlbgogICAgICAgICAgICBjb2VwIDo9IHR4LmNvZSAqIHR5LmNv
ZQogICAgICAgICAgICBzY2FwMSA6PSBjb25zKFt2eCgxKSx2eCgyKSx2eSgyKV0sIGFwcGVuZCh0
eC5zY2EsdHkuc2NhKSkKICAgICAgICAgICAgc2NhcDIgOj0gY29ucyhbdngoMSksdngoMiksdnko
MSldLCBhcHBlbmQodHguc2NhLHR5LnNjYSkpCiAgICAgICAgICAgIG0xIDo9IFtjb2VwLCBzY2Fw
MSwgW3Z5KDEpXV1AVGVybQogICAgICAgICAgICBtMiA6PSBbKC0xKSpjb2VwLCBzY2FwMiwgW3Z5
KDIpXV1AVGVybQogICAgICAgICAgICB6eiA6PSBhcHBlbmQoenosIFttMSwgbTJdKQoKICAgICAg
cGVyIG5vcm1hbEZvcm0genoKCgogICAgLS0gRXF1aXZhbGVuY2Ugb2YgdmVjdG9yIGV4cHJlc3Np
b25zCiAgICAoeDolID0geTolKSA6IEJvb2xlYW4gPT0KICAgICAgaWRlbnRpdHk/KHgsIHkpCgoK
ICAgIC0tIFNpbXBsZSB0cmFuc2Zvcm1hdGlvbnMKCiAgICBjb21iaW5lVGVybXMoeHg6UmVwKSA6
IFJlcCA9PQogICAgICByZXN1bHQ6UmVwIDo9IGVtcHR5KCkKICAgICAgbiA6IE5OSSA6PSAjeHgK
ICAgICAgaSA6IE5OSSA6PSAxCgogICAgICB3aGlsZSBpIDw9IG4gcmVwZWF0CiAgICAgICAgLS0g
Q3VycmVudCB0ZXJtCiAgICAgICAgdGEgOj0geHgoaSkKICAgICAgICBjbmV3IDo9IHRhLmNvZQoK
ICAgICAgICAtLSBDb2xsZWN0IGFsbCBmb2xsb3dpbmcgdGVybXMgdGhhdCBhcmUgZXF1YWwgdG8g
Y3VycmVudAogICAgICAgIGogOiBOTkkgOj0gaSArIDEKICAgICAgICB3aGlsZSBqIDw9IG4gYW5k
IHNjYWxhclBhcnRFcT8odGEsIHh4KGopKSBhbmQgdmVjdG9yUGFydEVxPyh0YSwgeHgoaikpIHJl
cGVhdAogICAgICAgICAgY25ldyA6PSBjbmV3ICsgeHgoaikuY29lCiAgICAgICAgICBqIDo9IGog
KyAxCgogICAgICAgIC0tIENvbWJpbmUgYW5kIGFwcGVuZAogICAgICAgIHRuZXc6VGVybSA6PSBb
Y25ldywgdGEuc2NhLCB0YS52ZWNdQFRlcm0KICAgICAgICByZXN1bHQgOj0gY29ucyh0bmV3LCBy
ZXN1bHQpCgogICAgICAgIC0tIENvbnRpbnVlIHdpdGggdGhlIGZpcnN0IG5vbi1lcXVhbCB0ZXJt
CiAgICAgICAgaSA6PSBqCgogICAgICByZXZlcnNlISByZXN1bHQKCgogICAgcmVtb3ZlWmVyb2Vz
KHh4OlJlcCkgOiBSZXAgPT0KICAgICAgLS0gQ2hlY2sgZm9yIGFuZCByZW1vdmUgemVyb2VzOgog
ICAgICAtLSAgIGNvZSA9IDAKICAgICAgLS0gICBzY2EgaXMgemVybwogICAgICAtLSAgIHZlYyBp
cyB6ZXJvCiAgICAgIC0tIFdlIGhhdmUKICAgICAgLS0gICBhXmEgLT4gMCBhbmQgMF5hIC0+IDAg
YW5kIGFeMCAtPiAwCiAgICAgIC0tICAgKGFhYikgLT4gMCBhbmQgKGFiYikgLT4gMCBhbmQgKGFi
YSkgLT4gMAogICAgICAtLSBXaXRoIGFzc3VtcHRpb25zIHdlIGNvdWxkIGFsc28gZG8KICAgICAg
LS0gICBhKmIgLT4gMCBmb3IgYSBffF8gYgogICAgICByZXN1bHQgOiBSZXAgOj0gZW1wdHkoKQoK
ICAgICAgZm9yIHR4IGluIHh4IHJlcGVhdAogICAgICAgIHN6ZXJvPyB0eCA9PiAiaXRlcmF0ZSIK
ICAgICAgICB2emVybz8gdHggPT4gIml0ZXJhdGUiCgogICAgICAgIC0tIEF4aW9tOiBhXmEgPSAw
CiAgICAgICAgdnAgOj0gdHgudmVjCiAgICAgICAgI3ZwID0gMiBhbmQgdnAoMSkgPSB2cCgyKSA9
PiAiaXRlcmF0ZSIKCiAgICAgICAgLS0gQXhpb206IChhLGEsYikgPSAoYSxiLGEpID0gKGIsYSxh
KSA9IDAKICAgICAgICAtLXNwIDo9IHR4LnNjYQogICAgICAgIHRwemVybyA6IEJvb2xlYW4gOj0g
ZmFsc2UKICAgICAgICBmb3IgcyBpbiB0eC5zY2EgcmVwZWF0CiAgICAgICAgICBpZiAjcyA9IDMg
dGhlbgogICAgICAgICAgICBzKDEpID0gcygyKSBvciBzKDEpID0gcygzKSBvciBzKDIpID0gcygz
KSA9PiB0cHplcm8gOj0gdHJ1ZQoKICAgICAgICB0cHplcm8gPT4gIml0ZXJhdGUiCgogICAgICAg
IC0tIFRlcm0gY29udGFpbnMgbm8ga25vd24gemVyb3MKICAgICAgICByZXN1bHQgOj0gY29ucyh0
eCwgcmVzdWx0KQoKICAgICAgLS0gTm8gdGVybXMgbGVmdD8gQ29uc3RydWN0IGEgc2luZ2xlIHpl
cm8KICAgICAgaWYgZW1wdHk/IHJlc3VsdCB0aGVuCiAgICAgICAgaXNTY2FsYXI/KHBlciB4eCkg
PT4gcmVzdWx0IDo9IHJlcCBzY2FsYXJaZXJvKCkKICAgICAgICBpc1ZlY3Rvcj8ocGVyIHh4KSA9
PiByZXN1bHQgOj0gcmVwIHZlY3Rvclplcm8oKQoKICAgICAgcmV2ZXJzZSEgcmVzdWx0CgoKICAg
IC0tIFRyYW5zZm9ybWF0aW9uIHJ1bGVzIGJhc2VkIG9uIHRoZSBheGlvbXMKICAgIC0tIEZpcnN0
IHBhcnQgYXJlIGV4cGFuc2lvbiBydWxlcwoKICAgIHJ1bGUyOCh4OlJlcCkgOiBSZXAgPT0KICAg
ICAgKysgVGhpcyBydWxlIGltcGxlbWVudHMgdGhlIGV4cGFuc2lvbiBhY2NvcmRpbmcgdG8gdGhl
IGF4aW9tCiAgICAgICsrIGQqKGFiYykgPSAoZCphKSooYl5jKSArIChkKmIpKihjXmEpICsgKGQq
YykqKGFeYikKICAgICAgLS0gTm90IGEgcmVhbCB2ZWN0b3I/IEluIHRoYXQgY2FzZSB0aGUgc2hh
cGVzIHdpbGwgbm90IG1hdGNoIGFueXdheQogICAgICBub3QgaXNWZWN0b3I/KHBlciB4KSA9PiB4
CgogICAgICB5eSA6PSBub3JtYWxGb3JtKHgpCiAgICAgIHJlc3VsdCA6IFJlcCA6PSBlbXB0eSgp
CgogICAgICBmb3IgdHggaW4geXkgcmVwZWF0CiAgICAgICAgLS0gQ29weSB0ZXJtcyBub3Qgc3Vp
dGFibGUgZm9yIHRoaXMgcnVsZSBvdmVyIHRvIHRoZSByZXN1bHQKICAgICAgICBpZiAjdHgudmVj
IH49IDEgb3IgZW1wdHk/IHR4LnNjYSB0aGVuCiAgICAgICAgICByZXN1bHQgOj0gY29ucyh0eCwg
cmVzdWx0KQoKICAgICAgICAtLSBIYW5kbGUgdGVybXMgZm9yIHdoaWNoIHRoZSBydWxlIGFwcGxp
ZXMKICAgICAgICBlbHNlCiAgICAgICAgICBmb3VuZCA6PSBmYWxzZQogICAgICAgICAgc2NhVGVy
bXMgOj0gdHguc2NhCiAgICAgICAgICBuIDo9ICNzY2FUZXJtcwogICAgICAgICAgYXRwIDogTGlz
dCBTdHJpbmcgOj0gZW1wdHkoKQogICAgICAgICAgb3RoZXJzIDogTGlzdCBMaXN0IFN0cmluZyA6
PSBlbXB0eSgpCgogICAgICAgICAgLS0gVGFrZSBvdXQgdGhlIGZpcnN0IHNpbmdsZSB0cmlwbGUg
cHJvZHVjdAogICAgICAgICAgZm9yIGkgaW4gMS4ubiByZXBlYXQKICAgICAgICAgICAgaWYgI3Nj
YVRlcm1zKGkpID0gMyB0aGVuCiAgICAgICAgICAgICAgYXRwIDo9IHNjYVRlcm1zKGkpCiAgICAg
ICAgICAgICAgb3RoZXJzIDo9IFtzY2FUZXJtcyhqKSBmb3IgaiBpbiAxLi5uIHwgaiB+PSBpXQog
ICAgICAgICAgICAgIGZvdW5kIDo9IHRydWUKICAgICAgICAgICAgICBicmVhawoKICAgICAgICAg
IC0tIFRha2Ugb3V0IHRoZSBmaXJzdCBzaW5nbGUgdmVjdG9yCiAgICAgICAgICBkIDo9IGZpcnN0
IHR4LnZlYwoKICAgICAgICAgIGlmIG5vdCBmb3VuZCB0aGVuCiAgICAgICAgICAgIC0tIE5vIHRy
aXBsZSBwcm9kdWN0IGZvdW5kLCBhZGQgdHggdG8gdGhlIHJlc3VsdCBhbmQgdGVybWluYXRlCiAg
ICAgICAgICAgIHJlc3VsdCA6PSBjb25zKHR4LCByZXN1bHQpCiAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgIC0tIFRoZXJlIHdhcyBhIHRyaXBsZSBwcm9kdWN0LCBhZGQgdGhlIDMgdGVybXMgb2Yg
dGhlIGF4aW9tcyBSSFMgdG8gdGhlIHJlc3VsdAogICAgICAgICAgICB0MTpUZXJtIDo9IFt0eC5j
b2UsIGNvbnMoW2QsYXRwKDEpXSwgb3RoZXJzKSwgW2F0cCgyKSxhdHAoMyldXQogICAgICAgICAg
ICB0MjpUZXJtIDo9IFt0eC5jb2UsIGNvbnMoW2QsYXRwKDIpXSwgb3RoZXJzKSwgW2F0cCgzKSxh
dHAoMSldXQogICAgICAgICAgICB0MzpUZXJtIDo9IFt0eC5jb2UsIGNvbnMoW2QsYXRwKDMpXSwg
b3RoZXJzKSwgW2F0cCgxKSxhdHAoMildXQogICAgICAgICAgICByZXN1bHQgOj0gYXBwZW5kKHJl
c3VsdCwgW3QxLHQyLHQzXSkKCiAgICAgIG5vcm1hbEZvcm0gcmVzdWx0CgoKICAgIHJ1bGUyOSh4
OlJlcCkgOiBSZXAgPT0KICAgICAgKysgVGhpcyBydWxlIGltcGxlbWVudHMgdGhlIGV4cGFuc2lv
biBhY2NvcmRpbmcgdG8gdGhlIGF4aW9tCiAgICAgICsrIChkXmgpKihhYmMpID0gKChiXmMpKihk
XmgpKSphICsgKChjXmEpKihkXmgpKSpiICsgKChhXmIpKihkXmgpKSpjCiAgICAgICsrICAgICAg
ICAgICAgID0gICAoIChiKmQpKihjKmgpIC0gKGIqaCkqKGMqZCkgKSAqIGEKICAgICAgKysgICAg
ICAgICAgICAgICArICggKGMqZCkqKGEqaCkgLSAoYypoKSooYSpkKSApICogYgogICAgICArKyAg
ICAgICAgICAgICAgICsgKCAoYSpkKSooYipoKSAtIChhKmgpKihiKmQpICkgKiBjCiAgICAgICsr
ICAgICAgICAgICAgID0gICAoYipkKSooYypoKSphIC0gKGIqaCkqKGMqZCkqYQogICAgICArKyAg
ICAgICAgICAgICAgICsgKGMqZCkqKGEqaCkqYiAtIChjKmgpKihhKmQpKmIKICAgICAgKysgICAg
ICAgICAgICAgICArIChhKmQpKihiKmgpKmMgLSAoYSpoKSooYipkKSpjCiAgICAgIC0tIE5vdCBh
IHJlYWwgdmVjdG9yPyBJbiB0aGF0IGNhc2UgdGhlIHNoYXBlcyB3aWxsIG5vdCBtYXRjaCBhbnl3
YXkKICAgICAgbm90IGlzVmVjdG9yPyhwZXIgeCkgPT4geAoKICAgICAgeXkgOj0gbm9ybWFsRm9y
bSh4KQogICAgICByZXN1bHQgOiBSZXAgOj0gZW1wdHkoKQoKICAgICAgZm9yIHR4IGluIHl5IHJl
cGVhdAogICAgICAgIC0tIENvcHkgdGVybXMgbm90IHN1aXRhYmxlIGZvciB0aGlzIHJ1bGUgb3Zl
ciB0byB0aGUgcmVzdWx0CiAgICAgICAgaWYgI3R4LnZlYyB+PSAyIG9yIGVtcHR5PyB0eC5zY2Eg
dGhlbgogICAgICAgICAgcmVzdWx0IDo9IGNvbnModHgsIHJlc3VsdCkKCiAgICAgICAgLS0gSGFu
ZGxlIHRlcm1zIGZvciB3aGljaCB0aGUgcnVsZSBhcHBsaWVzCiAgICAgICAgZWxzZQogICAgICAg
ICAgZm91bmQgOj0gZmFsc2UKICAgICAgICAgIHNjYVRlcm1zIDo9IHR4LnNjYQogICAgICAgICAg
biA6PSAjc2NhVGVybXMKICAgICAgICAgIGF0cDpMaXN0IFN0cmluZyA6PSBlbXB0eSgpCiAgICAg
ICAgICBvdGhlcnM6TGlzdCBMaXN0IFN0cmluZyA6PSBlbXB0eSgpCgogICAgICAgICAgLS0gVGFr
ZSBvdXQgdGhlIGZpcnN0IHRyaXBsZSBwcm9kdWN0CiAgICAgICAgICBmb3IgaSBpbiAxLi5uIHJl
cGVhdAogICAgICAgICAgICBpZiAjc2NhVGVybXMoaSkgPSAzIHRoZW4KICAgICAgICAgICAgICBh
dHAgOj0gc2NhVGVybXMoaSkKICAgICAgICAgICAgICBvdGhlcnMgOj0gW3NjYVRlcm1zKGopIGZv
ciBqIGluIDEuLm4gfCBqIH49IGldCiAgICAgICAgICAgICAgZm91bmQgOj0gdHJ1ZQogICAgICAg
ICAgICAgIGJyZWFrCgogICAgICAgICAgLS0gVGFrZSBvdXQgdGhlIGNyb3NzIHZlY3RvcnMKICAg
ICAgICAgIGQgOj0gZmlyc3QgdHgudmVjCiAgICAgICAgICBoIDo9IHNlY29uZCB0eC52ZWMKCiAg
ICAgICAgICBpZiBub3QgZm91bmQgdGhlbgogICAgICAgICAgICAtLSBObyB0cmlwbGUgcHJvZHVj
dCBmb3VuZCwgYWRkIHR4IHRvIHRoZSByZXN1bHQgYW5kIHRlcm1pbmF0ZQogICAgICAgICAgICBy
ZXN1bHQgOj0gY29ucyh0eCwgcmVzdWx0KQogICAgICAgICAgZWxzZQogICAgICAgICAgICAtLSBU
aGVyZSB3YXMgYSB0cmlwbGUgcHJvZHVjdCwgYWRkIHRoZSA2IHRlcm1zIG9mIHRoZSBheGlvbXMg
UkhTIHRvIHRoZSByZXN1bHQKICAgICAgICAgICAgYSA6PSBhdHAoMSkKICAgICAgICAgICAgYiA6
PSBhdHAoMikKICAgICAgICAgICAgYyA6PSBhdHAoMykKICAgICAgICAgICAgdDE6VGVybSA6PSBb
IHR4LmNvZSwgYXBwZW5kKG90aGVycywgW1tiLGRdLCBbYyxoXV0pLCBbYV1dCiAgICAgICAgICAg
IHQyOlRlcm0gOj0gWy10eC5jb2UsIGFwcGVuZChvdGhlcnMsIFtbYixoXSwgW2MsZF1dKSwgW2Fd
XQogICAgICAgICAgICB0MzpUZXJtIDo9IFsgdHguY29lLCBhcHBlbmQob3RoZXJzLCBbW2MsZF0s
IFthLGhdXSksIFtiXV0KICAgICAgICAgICAgdDQ6VGVybSA6PSBbLXR4LmNvZSwgYXBwZW5kKG90
aGVycywgW1tjLGhdLCBbYSxkXV0pLCBbYl1dCiAgICAgICAgICAgIHQ1OlRlcm0gOj0gWyB0eC5j
b2UsIGFwcGVuZChvdGhlcnMsIFtbYSxkXSwgW2IsaF1dKSwgW2NdXQogICAgICAgICAgICB0NjpU
ZXJtIDo9IFstdHguY29lLCBhcHBlbmQob3RoZXJzLCBbW2EsaF0sIFtiLGRdXSksIFtjXV0KICAg
ICAgICAgICAgcmVzdWx0IDo9IGFwcGVuZChyZXN1bHQsIFt0MSx0Mix0Myx0NCx0NSx0Nl0pCgog
ICAgICBub3JtYWxGb3JtIHJlc3VsdAoKCiAgICBydWxlMjEwKHg6UmVwKSA6IFJlcCA9PQogICAg
ICArKyBUaGlzIHJ1bGUgaW1wbGVtZW50cyB0aGUgZXhwYW5zaW9uIGFjY29yZGluZyB0byB0aGUg
YXhpb20KICAgICAgKysgKGQqaCkoYWJjKSA9IChkKmEpKGhiYykgKyAoZCpiKShhaGMpICsgKGQq
YykoYWJoKQogICAgICAtLSBOb3QgYSBzY2FsYXI/IEluIHRoYXQgY2FzZSB0aGUgc2hhcGVzIHdp
bGwgbm90IG1hdGNoIGFueXdheQogICAgICBub3QgaXNTY2FsYXI/KHBlciB4KSA9PiB4CgogICAg
ICB5eSA6PSBub3JtYWxGb3JtKHgpCiAgICAgIHJlc3VsdCA6IFJlcCA6PSBlbXB0eSgpCgogICAg
ICBmb3IgdHggaW4geXkgcmVwZWF0CiAgICAgICAgLS0gQ29weSB0ZXJtcyBub3Qgc3VpdGFibGUg
Zm9yIHRoaXMgcnVsZSBvdmVyIHRvIHRoZSByZXN1bHQKICAgICAgICBpZiBub3QgZW1wdHk/IHR4
LnZlYyBvciBlbXB0eT8gdHguc2NhIHRoZW4KICAgICAgICAgIHJlc3VsdCA6PSBjb25zKHR4LCBy
ZXN1bHQpCgogICAgICAgIC0tIEhhbmRsZSB0ZXJtcyBmb3Igd2hpY2ggdGhlIHJ1bGUgYXBwbGll
cwogICAgICAgIGVsc2UKICAgICAgICAgIGZvdW5kZHAgOj0gZmFsc2UKICAgICAgICAgIGZvdW5k
dHAgOj0gZmFsc2UKICAgICAgICAgIHNjYVRlcm1zIDo9IHR4LnNjYQogICAgICAgICAgbiA6PSAj
c2NhVGVybXMKICAgICAgICAgIGFkcCA6IExpc3QgU3RyaW5nIDo9IGVtcHR5KCkKICAgICAgICAg
IGF0cCA6IExpc3QgU3RyaW5nIDo9IGVtcHR5KCkKICAgICAgICAgIG90aGVycyA6IExpc3QgTGlz
dCBTdHJpbmcgOj0gZW1wdHkoKQoKICAgICAgICAgIC0tIFRha2Ugb3V0IHRoZSBmaXJzdCBkb3Qg
YW5kIHRyaXBsZSBwcm9kdWN0CiAgICAgICAgICBmb3IgaSBpbiAxLi5uIHJlcGVhdAogICAgICAg
ICAgICBpZiBub3QgZm91bmRkcCBhbmQgI3NjYVRlcm1zKGkpID0gMiB0aGVuCiAgICAgICAgICAg
ICAgYWRwIDo9IHNjYVRlcm1zKGkpCiAgICAgICAgICAgICAgZm91bmRkcCA6PSB0cnVlCiAgICAg
ICAgICAgIGVsc2UgaWYgbm90IGZvdW5kdHAgYW5kICNzY2FUZXJtcyhpKSA9IDMgdGhlbgogICAg
ICAgICAgICAgIGF0cCA6PSBzY2FUZXJtcyhpKQogICAgICAgICAgICAgIGZvdW5kdHAgOj0gdHJ1
ZQogICAgICAgICAgICBlbHNlCgkgICAgICBvdGhlcnMgOj0gY29ucyhzY2FUZXJtcyhpKSwgb3Ro
ZXJzKQoKICAgICAgICAgIGlmIG5vdCBmb3VuZGRwIG9yIG5vdCBmb3VuZHRwICB0aGVuCiAgICAg
ICAgICAgIC0tIE5vIGRvdCBvciB0cmlwbGUgcHJvZHVjdCBmb3VuZCwgYWRkIHR4IHRvIHRoZSBy
ZXN1bHQgYW5kIHRlcm1pbmF0ZQogICAgICAgICAgICByZXN1bHQgOj0gY29ucyh0eCwgcmVzdWx0
KQogICAgICAgICAgZWxzZQogICAgICAgICAgICAtLSBUaGVyZSB3ZXJlIGRvdCBhbmQgdHJpcGxl
IHByb2R1Y3RzLCBhZGQgdGhlIDMgdGVybXMgb2YgdGhlIGF4aW9tcyBSSFMgdG8gdGhlIHJlc3Vs
dAogICAgICAgICAgICBhIDo9IGF0cCgxKQogICAgICAgICAgICBiIDo9IGF0cCgyKQogICAgICAg
ICAgICBjIDo9IGF0cCgzKQogICAgICAgICAgICBkIDo9IGFkcCgxKQogICAgICAgICAgICBoIDo9
IGFkcCgyKQogICAgICAgICAgICB0MTpUZXJtIDo9IFt0eC5jb2UsIGFwcGVuZChvdGhlcnMsIFtb
ZCxhXSxbaCxiLGNdXSksIFtdXQogICAgICAgICAgICB0MjpUZXJtIDo9IFt0eC5jb2UsIGFwcGVu
ZChvdGhlcnMsIFtbZCxiXSxbYSxoLGNdXSksIFtdXQogICAgICAgICAgICB0MzpUZXJtIDo9IFt0
eC5jb2UsIGFwcGVuZChvdGhlcnMsIFtbZCxjXSxbYSxiLGhdXSksIFtdXQogICAgICAgICAgICBy
ZXN1bHQgOj0gYXBwZW5kKHJlc3VsdCwgW3QxLHQyLHQzXSkKCiAgICAgIG5vcm1hbEZvcm0gcmVz
dWx0CgoKICAgIHJ1bGUyMTEoeDpSZXApIDogUmVwID09CiAgICAgICsrIFRoaXMgcnVsZSBpbXBs
ZW1lbnRzIHRoZSBleHBhbnNpb24gYWNjb3JkaW5nIHRvIHRoZSBheGlvbQogICAgICArKyAoYWJj
KShkZ2gpID0gKChiXmMpKihkXmcpKShhKmgpICsgKChjXmEpKihkXmcpKShiKmgpICsgKChhXmIp
KihkXmcpKShjKmgpCiAgICAgICsrICAgICAgICAgICAgPSAgICgoYipkKShjKmcpIC0gKGIqZyko
YypkKSkgKGEqaCkKICAgICAgKysgICAgICAgICAgICAgICsgKChjKmQpKGEqZykgLSAoYypnKShh
KmQpKSAoYipoKQogICAgICArKyAgICAgICAgICAgICAgKyAoKGEqZCkoYipnKSAtIChhKmcpKGIq
ZCkpIChjKmgpCiAgICAgICsrICAgICAgICAgICAgPSAgIChiKmQpKGMqZykoYSpoKSAtIChiKmcp
KGMqZCkoYSpoKQogICAgICArKyAgICAgICAgICAgICAgKyAoYypkKShhKmcpKGIqaCkgLSAoYypn
KShhKmQpKGIqaCkKICAgICAgKysgICAgICAgICAgICAgICsgKGEqZCkoYipnKShjKmgpIC0gKGEq
ZykoYipkKShjKmgpCiAgICAgIC0tIE5vdCBhIHNjYWxhcj8gSW4gdGhhdCBjYXNlIHRoZSBzaGFw
ZXMgd2lsbCBub3QgbWF0Y2ggYW55d2F5CiAgICAgIG5vdCBpc1NjYWxhcj8ocGVyIHgpID0+IHgK
CiAgICAgIHl5IDo9IG5vcm1hbEZvcm0oeCkKICAgICAgcmVzdWx0IDogUmVwIDo9IGVtcHR5KCkK
CiAgICAgIGZvciB0eCBpbiB5eSByZXBlYXQKICAgICAgICAtLSBDb3B5IHRlcm1zIG5vdCBzdWl0
YWJsZSBmb3IgdGhpcyBydWxlIG92ZXIgdG8gdGhlIHJlc3VsdAogICAgICAgIGlmIG5vdCBlbXB0
eT8gdHgudmVjIG9yIGVtcHR5PyB0eC5zY2EgdGhlbgogICAgICAgICAgcmVzdWx0IDo9IGNvbnMo
dHgsIHJlc3VsdCkKCiAgICAgICAgLS0gSGFuZGxlIHRlcm1zIGZvciB3aGljaCB0aGUgcnVsZSBh
cHBsaWVzCiAgICAgICAgZWxzZQogICAgICAgICAgc2NhVGVybXMgOj0gdHguc2NhCiAgICAgICAg
ICBuIDo9ICNzY2FUZXJtcwogICAgICAgICAgdHBzIDogTGlzdCBMaXN0IFN0cmluZyA6PSBlbXB0
eSgpCiAgICAgICAgICBvdGhlcnMgOiBMaXN0IExpc3QgU3RyaW5nIDo9IGVtcHR5KCkKCiAgICAg
ICAgICAtLSBUYWtlIG91dCB0aGUgZmlyc3QgdHdvIHRyaXBsZSBwcm9kdWN0cwogICAgICAgICAg
Zm9yIGkgaW4gMS4ubiByZXBlYXQKICAgICAgICAgICAgaWYgI3NjYVRlcm1zKGkpID0gMyBhbmQg
I3RwcyA8IDIgdGhlbgogICAgICAgICAgICAgIHRwcyA6PSBjb25zKHNjYVRlcm1zKGkpLCB0cHMp
CiAgICAgICAgICAgIGVsc2UKCSAgICAgIG90aGVycyA6PSBjb25zKHNjYVRlcm1zKGkpLCBvdGhl
cnMpCgogICAgICAgICAgaWYgI3RwcyA8IDIgIHRoZW4KICAgICAgICAgICAgLS0gTm8gdHJpcGxl
IHByb2R1Y3QocykgZm91bmQsIGFkZCB0eCB0byB0aGUgcmVzdWx0IGFuZCB0ZXJtaW5hdGUKICAg
ICAgICAgICAgcmVzdWx0IDo9IGNvbnModHgsIHJlc3VsdCkKICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgLS0gVGhlcmUgd2VyZSB0d28gdHJpcGxlIHByb2R1Y3RzLCBhZGQgdGhlIDYgdGVybXMg
b2YgdGhlIGF4aW9tcyBSSFMgdG8gdGhlIHJlc3VsdAogICAgICAgICAgICB0cDEgOj0gdHBzKDEp
CiAgICAgICAgICAgIHRwMiA6PSB0cHMoMikKICAgICAgICAgICAgYSA6PSB0cDEoMSkKICAgICAg
ICAgICAgYiA6PSB0cDEoMikKICAgICAgICAgICAgYyA6PSB0cDEoMykKICAgICAgICAgICAgZCA6
PSB0cDIoMSkKICAgICAgICAgICAgZyA6PSB0cDIoMikKICAgICAgICAgICAgaCA6PSB0cDIoMykK
ICAgICAgICAgICAgdDE6VGVybSA6PSBbIHR4LmNvZSwgYXBwZW5kKG90aGVycywgW1tiLGRdLFtj
LGddLFthLGhdXSksIFtdXQogICAgICAgICAgICB0MjpUZXJtIDo9IFstdHguY29lLCBhcHBlbmQo
b3RoZXJzLCBbW2IsZ10sW2MsZF0sW2EsaF1dKSwgW11dCiAgICAgICAgICAgIHQzOlRlcm0gOj0g
WyB0eC5jb2UsIGFwcGVuZChvdGhlcnMsIFtbYyxkXSxbYSxnXSxbYixoXV0pLCBbXV0KICAgICAg
ICAgICAgdDQ6VGVybSA6PSBbLXR4LmNvZSwgYXBwZW5kKG90aGVycywgW1tjLGddLFthLGRdLFti
LGhdXSksIFtdXQogICAgICAgICAgICB0NTpUZXJtIDo9IFsgdHguY29lLCBhcHBlbmQob3RoZXJz
LCBbW2EsZF0sW2IsZ10sW2MsaF1dKSwgW11dCiAgICAgICAgICAgIHQ2OlRlcm0gOj0gWy10eC5j
b2UsIGFwcGVuZChvdGhlcnMsIFtbYSxnXSxbYixkXSxbYyxoXV0pLCBbXV0KICAgICAgICAgICAg
cmVzdWx0IDo9IGFwcGVuZChyZXN1bHQsIFt0MSx0Mix0Myx0NCx0NSx0Nl0pCgogICAgICBub3Jt
YWxGb3JtIHJlc3VsdAoKCiAgICAtLSBTaW1wbGlmaWNhdGlvbiByb3V0aW5lcwoKICAgIHNpbXBs
aWZ5KHg6JSkgOiAlID09CiAgICAgIHh4IDo9IG5vcm1hbEZvcm0ocmVwIHgpCiAgICAgIHh4IDo9
IGNvbWJpbmVUZXJtcyh4eCkKICAgICAgeHggOj0gcmVtb3ZlWmVyb2VzKHh4KQogICAgICBwZXIg
eHgKCgogICAgaWRlbnRpdHk/KHg6JSwgeTolKSA6IEJvb2xlYW4gPT0KICAgICAgemVybz8gc2lt
cGxpZnkoeC15KQoKCiAgICAtLSBBcHBseSBzcGVjaWZpYyBydWxlcyB0byB0aGUgZ2l2ZW4gZXhw
cmVzc2lvbgoKICAgIGFwcGx5UnVsZSh4OiUsIHJ1bGU6U3RyaW5nKSA6ICUgPT0KICAgICAgKysg
Q2VudHJhbCBydWxlIGRpc3BhdGNoZXIKICAgICAgLS0ocnVsZT0icnVsZTAxIilAQm9vbGVhbiA9
PiBwZXIgcnVsZTAxKHJlcCB4KQogICAgICAtLShydWxlPSJydWxlMDIiKUBCb29sZWFuID0+IHBl
ciBydWxlMDIocmVwIHgpCiAgICAgIChydWxlPSJydWxlMjgiKUBCb29sZWFuID0+IHBlciBydWxl
MjgocmVwIHgpCiAgICAgIChydWxlPSJydWxlMjkiKUBCb29sZWFuID0+IHBlciBydWxlMjkocmVw
IHgpCiAgICAgIChydWxlPSJydWxlMjEwIilAQm9vbGVhbiA9PiBwZXIgcnVsZTIxMChyZXAgeCkK
ICAgICAgKHJ1bGU9InJ1bGUyMTEiKUBCb29sZWFuID0+IHBlciBydWxlMjExKHJlcCB4KQogICAg
ICAtLSBTcGVjaWZpZWQgcnVsZSBub3QgdmFsaWQKICAgICAgeAoKCiAgICAtLSBPdXRwdXQgb2Yg
ZG9tYWluIGVsZW1lbnRzCgogICAgY29lcmNlKHg6JSkgOiBPdXRwdXRGb3JtID09CiAgICAgIHh4
IDo9IG5vcm1hbEZvcm0ocmVwIHgpCiAgICAgIG8gOiBMaXN0IE91dHB1dEZvcm0gOj0gZW1wdHko
KQoKICAgICAgLS0gTG9vcCBvdmVyIGFsbCB0ZXJtcwogICAgICBmb3IgdHggaW4geHggcmVwZWF0
CiAgICAgICAgLS0gQ29lZmZpY2llbnQgcGFydAogICAgICAgIGlmIHR4LmNvZSA9IDEgdGhlbgog
ICAgICAgICAgb2NvZTpPdXRwdXRGb3JtIDo9IGVtcHR5KCkKICAgICAgICBlbHNlCiAgICAgICAg
ICBvY29lOk91dHB1dEZvcm0gOj0gdHguY29lOjpPdXRwdXRGb3JtCgogICAgICAgIC0tIFNjYWxh
ciBwYXJ0CiAgICAgICAgaWYgbm90IGVtcHR5PyB0eC5zY2EgdGhlbgogICAgICAgICAgb3NjYWw6
TGlzdCBPdXRwdXRGb3JtIDo9IGVtcHR5KCkKICAgICAgICAgIGZvciBhc2NhIGluIHR4LnNjYSBy
ZXBlYXQKICAgICAgICAgICAgaWYgI2FzY2EgPSAxIHRoZW4KICAgICAgICAgICAgICBzMSA6PSBh
c2NhKDEpOjpTeW1ib2w6Ok91dHB1dEZvcm0KICAgICAgICAgICAgICBvc2NhbCA6PSBjb25zKHMx
LCBvc2NhbCkKICAgICAgICAgICAgaWYgI2FzY2EgPSAyIHRoZW4KICAgICAgICAgICAgICBzMSA6
PSBhc2NhKDEpOjpTeW1ib2w6Ok91dHB1dEZvcm0KICAgICAgICAgICAgICBzMiA6PSBhc2NhKDIp
OjpTeW1ib2w6Ok91dHB1dEZvcm0KICAgICAgICAgICAgICBvc2NhbCA6PSBjb25zKHMxKnMyLCBv
c2NhbCkKICAgICAgICAgICAgaWYgI2FzY2EgPSAzIHRoZW4KICAgICAgICAgICAgICBzMSA6PSBh
c2NhKDEpOjpTeW1ib2w6Ok91dHB1dEZvcm0KICAgICAgICAgICAgICBzMiA6PSBhc2NhKDIpOjpT
eW1ib2w6Ok91dHB1dEZvcm0KICAgICAgICAgICAgICBzMyA6PSBhc2NhKDMpOjpTeW1ib2w6Ok91
dHB1dEZvcm0KICAgICAgICAgICAgICBvc2NhbCA6PSBjb25zKHMxKnMyKnMzLCBvc2NhbCkKCiAg
ICAgICAgICBvc2NhOk91dHB1dEZvcm0gOj0gcmVkdWNlKCIqIiwgcmV2ZXJzZSEgb3NjYWwpCiAg
ICAgICAgZWxzZQogICAgICAgICAgb3NjYTpPdXRwdXRGb3JtIDo9IGVtcHR5KCkKCiAgICAgICAg
LS0gVmVjdG9yIHBhcnQKICAgICAgICBpZiBub3QgZW1wdHk/IHR4LnZlYyB0aGVuCiAgICAgICAg
ICAgdmVjcyA6PSB0eC52ZWMKICAgICAgICAgICBpZiAjdmVjcyA9IDEgdGhlbgogICAgICAgICAg
ICAgb3ZlYzpPdXRwdXRGb3JtIDo9IHZlY3MoMSk6OlN5bWJvbDo6T3V0cHV0Rm9ybQogICAgICAg
ICAgIGlmICN2ZWNzID0gMiB0aGVuCiAgICAgICAgICAgICB2MSA6PSB2ZWNzKDEpOjpTeW1ib2w6
Ok91dHB1dEZvcm0KICAgICAgICAgICAgIHYyIDo9IHZlY3MoMik6OlN5bWJvbDo6T3V0cHV0Rm9y
bQogICAgICAgICAgICAgb3ZlYzpPdXRwdXRGb3JtIDo9IHYxXnYyCiAgICAgICAgZWxzZQogICAg
ICAgICAgb3ZlYzpPdXRwdXRGb3JtIDo9IGVtcHR5KCkKCiAgICAgICAgbyA6PSBjb25zKG9jb2Ug
KiBvc2NhICogb3ZlYywgbykKICAgICAgaWYgfmVtcHR5PyBvIHRoZW4KICAgICAgICBvbyA6PSBy
ZWR1Y2UoIisiLCBvKQogICAgICBlbHNlCiAgICAgICAgb28gOj0gIj8iOjpPdXRwdXRGb3JtCiAg
ICAgIG9vCgoKICAgIGxhdGV4KHg6JSkgOiBTdHJpbmcgPT0KICAgICAgKysgQ3VzdG9tIGxhdGV4
IHByaW50aW5nIG91dHB1dCByb3V0aW5lLgogICAgICArKyBBIGRlc3BlcmF0ZSB0cnkgdG8gImZp
eCIgdGhlIGJyb2tlbiBvdXRwdXQuCiAgICAgIHh4IDo9IG5vcm1hbEZvcm0ocmVwIHgpCiAgICAg
IG8gOiBMaXN0IFN0cmluZyA6PSBlbXB0eSgpCgogICAgICAtLSBMb29wIG92ZXIgYWxsIHRlcm1z
CiAgICAgIGZvciB0eCBpbiB4eCByZXBlYXQKICAgICAgICAtLSBDb2VmZmljaWVudCBwYXJ0CiAg
ICAgICAgaWYgdHguY29lID0gMSB0aGVuCiAgICAgICAgICBvY29lIDogU3RyaW5nIDo9ICIiCiAg
ICAgICAgZWxzZQoJICBvY29lIDogU3RyaW5nIDo9ICI/IgogICAgICAgICAgLS1vY29lIDogU3Ry
aW5nIDo9IHN0cmluZyh0eC5jb2UpCgogICAgICAgIC0taWYgdHguY29lID49IDAgdGhlbgogICAg
ICAgIG9vcCA6IFN0cmluZyA6PSAiICsgIgogICAgICAgIC0tZWxzZQogICAgICAgIC0tb29wIDog
U3RyaW5nIDo9ICIgLSAiCgogICAgICAgIC0tIFNjYWxhciBwYXJ0CiAgICAgICAgaWYgbm90IGVt
cHR5PyB0eC5zY2EgdGhlbgogICAgICAgICAgb3NjYWw6TGlzdCBTdHJpbmcgOj0gZW1wdHkoKQog
ICAgICAgICAgZm9yIGFzY2EgaW4gdHguc2NhIHJlcGVhdAogICAgICAgICAgICBpZiAjYXNjYSA9
IDEgdGhlbgogICAgICAgICAgICAgIHMxIDo9IHN0cmluZyhhc2NhKDEpOjpTeW1ib2wpCgkgICAg
ICBvc2NhbCA6PSBjb25zKHMxLCBvc2NhbCkKCSAgICBpZiAjYXNjYSA9IDIgdGhlbgoJICAgICAg
czEgOj0gc3RyaW5nKGFzY2EoMSk6OlN5bWJvbCkKCSAgICAgIHMyIDo9IHN0cmluZyhhc2NhKDIp
OjpTeW1ib2wpCgkgICAgICBzdHIgOj0gY29uY2F0KFsiKCIsczEsIiBcY2RvdCAiLHMyLCIpIl0p
CgkgICAgICBvc2NhbCA6PSBjb25zKHN0ciwgb3NjYWwpCgkgICAgaWYgI2FzY2EgPSAzIHRoZW4K
CSAgICAgIHMxIDo9IHN0cmluZyhhc2NhKDEpOjpTeW1ib2wpCgkgICAgICBzMiA6PSBzdHJpbmco
YXNjYSgyKTo6U3ltYm9sKQoJICAgICAgczMgOj0gc3RyaW5nKGFzY2EoMyk6OlN5bWJvbCkKCSAg
ICAgIHN0ciA6PSBjb25jYXQoWyJcbGVmdFsiLHMxLCIsIixzMiwiLCIsczMgIlxyaWdodF0iXSkK
CSAgICAgIG9zY2FsIDo9IGNvbnMoc3RyLCBvc2NhbCkKICAgICAgICAgICAgb3NjYWwgOj0gY29u
cygiICIsIG9zY2FsKQoKCSAgb3NjYSA6PSByZWR1Y2UoY29uY2F0LCByZXN0IG9zY2FsKQoJZWxz
ZQogICAgICAgICAgb3NjYTpTdHJpbmcgOj0gZW1wdHkoKQoKCS0tIFZlY3RvciBwYXJ0CglpZiBu
b3QgZW1wdHk/IHR4LnZlYyB0aGVuCgkgIHZlY3MgOj0gdHgudmVjCgkgIGlmICN2ZWNzID0gMSB0
aGVuCgkgICAgb3ZlYzpTdHJpbmcgOj0gc3RyaW5nKHZlY3MoMSk6OlN5bWJvbCkKCSAgaWYgI3Zl
Y3MgPSAyIHRoZW4KCSAgICB2MSA6PSBzdHJpbmcodmVjcygxKTo6U3ltYm9sKQoJICAgIHYyIDo9
IHN0cmluZyh2ZWNzKDIpOjpTeW1ib2wpCgkgICAgb3ZlYzpTdHJpbmcgOj0gY29uY2F0KFsiXGxl
ZnQoIix2MSwgIiBcd2VkZ2UgIiwgdjIsIlxyaWdodCkiXSkKCWVsc2UKCSAgb3ZlYzpTdHJpbmcg
Oj0gZW1wdHkoKQoKCW8gOj0gY29ucyhjb25jYXQoW29jb2UsIG9zY2EsIG92ZWNdKSwgbykKICAg
ICAgICBvIDo9IGNvbnMob29wLCBvKQoKICAgICAgY29uY2F0KHJldmVyc2UocmVzdCBvKSkK
--20cf307ca1e42d3e9c04d9198337
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Axiom-mail mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/axiom-mail

--20cf307ca1e42d3e9c04d9198337--