Re: [spe-users] An error on FC6 with wxPy2.7

"SPE Stani's Python Editor" <[email protected]> Thu, 23 Nov 2006 01:23:21 +0100
Newsgroups gmane.comp.python.spe.user,gmane.spam.detected
Message-ID <[email protected]>
------=_Part_41369_18639215.1164241401845
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

http://pythonide.stani.be
http://pythonide.stani.be/manual/html/manual.html
http://pythonide.stani.be/blog/sm_donate
--



------=_Part_41369_18639215.1164241401845
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

You'll need to replace _spe/sm/wxp/smdi.py with the attached file. I
am working on a new version.

Stani

On 11/22/06, Jia Lu <[email protected]> wrote:
> http://pythonide.stani.be
> http://pythonide.stani.be/manual/html/manual.html
> http://pythonide.stani.be/blog/sm_donate
> --
>
>
>
>
> Hi Stani
>  Thanks for your anwser.
>
>  I found filenew.png and other png files in
> /usr/lib/python2.4/site-packages/_spe/skin/default/.
>
>  Then I did python SPE.py --debug > debug.txt 2>&1
> in /usr/lib/python2.4/site-packages/_spe/ and got the
> result below:
> (It seems another error ?)
> -----------------------------
> Spe Warning: Spe was developped on wxPython v2.6.1.0., but v2.7.1.3. was
> found.
> If you experience any problems please install wxPython v2.6.1.0.
>
>
> SPE v0.8.3.c (c)2003-2005 www.stani.be
>
> If spe fails to start:
>  - type "python SPE.py --debug > debug.txt 2>&1" at the command prompt
>    (or if you use tcsh: "python SPE.py --debug >& debug.txt")
>  - send debug.txt with some info to spe.stani.be[at]gmail.com
>
>
> Spe Warning: Spe was developped on wxPython v2.6.1.0., but v2.7.1.3. was
> found.
> If you experience any problems please install wxPython v2.6.1.0.
>
> Blender support disabled (run SPE inside Blender to enable).
> Encrypted debugging enabled.
>
> Spe is running in debugging mode with this configuration:
> - platform  : linux2
> - python    : 2.4.4
> - wxPython  : 2.7.1.3.
> - interface : <default>
> - encoding  : utf
>
> Launching application...
> Create: Framework: menu.
> Create: Framework: toolbar.
> Create: Framework: statusbar.
> Creating tabs...
>     Shell
>     Locals
>     Session
>     Output
>     Find
>     Browser
>     Recent
>     Todo
>     Index
>     Notes
>     Donate
> Create: MdiSplit: <class 'sm.wxp.smdi.MdiSplitChildFrame '> unnamed unnamed
> Create: Sdi:   <class 'sm.wxp.smdi.MdiSplitChildFrame'>.tabs
> Traceback (most recent call last):
>   File "SPE.py", line 209, in ?
>     style           = style)
>   File
> "/usr/lib/python2.4/site-packages/_spe/sm/wxp/smdi.py",
> line 1278, in __init__
>     wx.App.__init__(self,redirect=not debug)
>   File
> "/usr/lib/python2.4/site-packages/wx-2.7.1-gtk2-unicode/wx/_core.py",
> line 7480, in __init__
>     self._BootstrapApp()
>   File "/usr/lib/python2.4/site-packages/wx-
> 2.7.1-gtk2-unicode/wx/_core.py", line 7080, in _BootstrapApp
>     return _core_.PyApp__BootstrapApp(*args, **kwargs)
>   File
> "/usr/lib/python2.4/site-packages/_spe/sm/wxp/smdi.py",
> line 1297, in OnInit
>      style   = self.style,
>   File
> "/usr/lib/python2.4/site-packages/_spe/sm/wxp/smdi.py",
> line 801, in __init__
>     Parent.__init__(self,app=app,page=page,**options)
>   File
> "/usr/lib/python2.4/site-packages/_spe/sm/wxp/smdi.py",
> line 595, in __init__
>     parentFrame     = self,
>   File
> "/usr/lib/python2.4/site-packages/_spe/sm/wxp/smdi.py",
> line 326, in __init__
>     self.__finish__()
>   File
> "/usr/lib/python2.4/site-packages/_spe/sm/wxp/smdi.py",
> line 599, in __finish__
>     Framework.__finish__(self)
>   File
> "/usr/lib/python2.4/site-packages/_spe/sm/wxp/smdi.py",
> line 424, in __finish__
>     self.panel.__finish__()
>   File "/usr/lib/python2.4/site-packages/_spe/Parent.py",
> line 121, in __finish__
>     self.__frame__()
>   File "/usr/lib/python2.4/site-packages/_spe/Parent.py",
> line 169, in __frame__
>     self.__remember__(openFiles=self._openFiles)
>   File "/usr/lib/python2.4/site-packages/_spe/Parent.py",
> line 194, in __remember__
>     self.new(maximize = self.getValue("MaxChildren"))
>   File "/usr/lib/python2.4/site-packages/_spe/Parent.py",
> line 379, in new
>     maximize    = maximize)
>   File
> "/usr/lib/python2.4/site-packages/_spe/sm/wxp/smdi.py",
> line 1125, in __init__
>     extra       = extra,
>   File
> "/usr/lib/python2.4/site-packages/_spe/sm/wxp/smdi.py",
> line 889, in __init__
>     extra           = extra,
>   File
> "/usr/lib/python2.4/site-packages/_spe/sm/wxp/smdi.py",
> line 326, in __init__
>     self.__finish__()
>   File
> "/usr/lib/python2.4/site-packages/_spe/sm/wxp/smdi.py",
> line 899, in __finish__
>     Framework.__finish__(self)
>   File
> "/usr/lib/python2.4/site-packages/_spe/sm/wxp/smdi.py",
> line 422, in __finish__
>     self.setTitle(self.page,self.extra)
>   File
> "/usr/lib/python2.4/site-packages/_spe/sm/wxp/smdi.py",
> line 1150, in setTitle
>     Child.setTitle(self,page,extra,new)
>   File
> "/usr/lib/python2.4/site-packages/_spe/sm/wxp/smdi.py",
> line 991, in setTitle
>     self.SetTitle(self.pageTitle)
> AttributeError: 'MdiSplitChildFrame' object has no attribute 'SetTitle'
> ----------------------
> But I can run all the demos of wxPy normally.
> What is wrong can you think of?
> Thanks.
>
>
> 2006/11/22, SPE Stani's Python Editor <[email protected]>:
> > http://pythonide.stani.be
> > http://pythonide.stani.be/manual/html/manual.html
> > http://pythonide.stani.be/blog/sm_donate
> > --
> >
> >
> > I could quickly think of the following possibilities causing the error:
> > - The tool bitmap doesn't exist, so does the following file exist on
> > your hard disk: skins/default/filenew.png?
> > - There is a problem to locate the tool bitmap. So please cd to the
> > "_spe" directory and start "python SPE.py --debug"
> > - Something went wrong with the png handling in your wxPython
> > installation. Please check if you can display png images in the
> > wxPython demo and check if the toolbar demo works for you.
> >
> > Stani
> >
> > On 11/21/06, Jia Lu <[email protected]> wrote:
> > > http://pythonide.stani.be
> > > http://pythonide.stani.be/manual/html/manual.html
> > > http://pythonide.stani.be/blog/sm_donate
> > > --
> > >
> > >
> > >
> > >
> > > Hi Stani
> > >  Thanks for your answer.
> > >  I ran with debug mode and I got the error in debug.txt
> > >
> > > -----------------------
> > > Spe Warning: Spe was developped on wxPython v2.6.1.0., but v2.7.1.3. was
> > > found.
> > > If you experience any problems please install wxPython v2.6.1.0.
> > >
> > >
> > > SPE v0.8.3.c (c)2003-2005 www.stani.be
> > >
> > > If spe fails to start:
> > >  - type "python SPE.py --debug > debug.txt 2>&1" at the command prompt
> > >     (or if you use tcsh: "python SPE.py --debug >& debug.txt")
> > >  - send debug.txt with some info to spe.stani.be[at]gmail.com
> > >
> > >
> > > Spe Warning: Spe was developped on wxPython v2.6.1.0., but v2.7.1.3 .
> was
> > > found.
> > > If you experience any problems please install wxPython v2.6.1.0.
> > >
> > > Blender support disabled (run SPE inside Blender to enable).
> > > Encrypted debugging enabled.
> > >
> > > Spe is running in debugging mode with this configuration:
> > > - platform  : linux2
> > > - python    : 2.4.4
> > > - wxPython  : 2.7.1.3.
> > > - interface : <default>
> > > - encoding  : utf
> > >
> > > Launching application...
> > > Create: Framework: menu.
> > > Create: Framework: toolbar.
> > > Traceback (most recent call last):
> > >   File "SPE.py", line 209, in ?
> > >     style           = style)
> > >   File "/home/Tools/SPE-0.8.3.c-wx2.6.1.0 /_spe/sm/wxp/smdi.py", line
> 1278,
> > > in __init__
> > >     wx.App.__init__(self,redirect=not debug)
> > >   File
> > >
> "/usr/lib/python2.4/site-packages/wx-2.7.1-gtk2-unicode/wx/_core.py",
> > > line 7480, in __init__
> > >     self._BootstrapApp()
> > >   File "/usr/lib/python2.4/site-packages/wx-
> > > 2.7.1-gtk2-unicode/wx/_core.py", line 7080, in _BootstrapApp
> > >     return _core_.PyApp__BootstrapApp(*args, **kwargs)
> > >   File "/home/Tools/SPE-0.8.3.c-wx2.6.1.0/_spe/sm/wxp/smdi.py", line
> 1297,
> > > in OnInit
> > >     style   = self.style,
> > >   File "/home/Tools/SPE-0.8.3.c-wx2.6.1.0/_spe/sm/wxp/smdi.py", line
> 801, in
> > > __init__
> > >     Parent.__init__(self,app=app,page=page,**options)
> > >   File "/home/Tools/SPE-0.8.3.c-wx2.6.1.0 /_spe/sm/wxp/smdi.py", line
> 595,
> > > in __init__
> > >     parentFrame     = self,
> > >   File "/home/Tools/SPE-0.8.3.c-wx2.6.1.0/_spe/sm/wxp/smdi.py", line
> 324, in
> > > __init__
> > >     self.__tool__(app)
> > >   File "/home/Tools/SPE- 0.8.3.c-wx2.6.1.0/_spe/sm/wxp/smdi.py", line
> 394,
> > > in __tool__
> > >     id=wx.ID_ANY, style=STYLE_TOOLBAR)
> > >   File "/home/Tools/SPE-0.8.3.c-wx2.6.1.0/_spe/Menu.py", line 71, in
> > > __init__
> > >     self.AddLabelTool (TOOL_NEW, "",
> wx.Bitmap("skins/default/filenew.png",
> > > wx.BITMAP_TYPE_ANY), wx.NullBitmap, wx.ITEM_NORMAL, _("New | Ctrl+N"),
> "")
> > >   File "/usr/lib/python2.4/site-packages/wx-
> > > 2.7.1-gtk2-unicode /wx/_controls.py", line 3715, in AddLabelTool
> > >     shortHelp, longHelp, clientData)
> > >   File
> > >
> "/usr/lib/python2.4/site-packages/wx-2.7.1-gtk2-unicode/wx/_controls.py",
> > > line 3637, in DoAddTool
> > >     return _controls_.ToolBarBase_DoAddTool(*args,
> > > **kwargs)
> > > wx._core.PyAssertionError: C++ assertion "bitmap.Ok()" failed at
> > > ../src/gtk/tbargtk.cpp(365) in DoInsertTool(): invalid bitmap for
> wxToolBar
> > > icon
> > > -----------------------
> > >
> > > I searched on internet about the bitmap error, but I have no idea about
> it.
> > > I really want to use SPE.....:(
> > >
> > > Thanks..
> > >
> > > _______________________________________________
> > > Python-spe-users mailing list
> > > [email protected]
> > >
> https://lists.berlios.de/mailman/listinfo/python-spe-users
> > >
> > >
> > >
> >
> >
> > --
> > http://pythonide.stani.be
> > http://pythonide.stani.be/screenshots
> > http://pythonide.stani.be/manual/html/manual.html
> > _______________________________________________
> > Python-spe-users mailing list
> > [email protected]
> >
> https://lists.berlios.de/mailman/listinfo/python-spe-users
> >
>
>
>
> --
> -- Jia LU
> < http://www.lujia.us>
> Registered Linux user #434792
> python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for p
> in '[email protected]'.split('@')])"
> --
>  \     "Unix is an operating system, OS/2 is half an operating system, |
>   `\       Windows is a shell, and DOS is a boot partition virus."  -- |
> _o__)
> Peter H. Coffin |
> _______________________________________________
> Python-spe-users mailing list
> [email protected]
> https://lists.berlios.de/mailman/listinfo/python-spe-users
>
>
>


-- 
http://pythonide.stani.be
http://pythonide.stani.be/screenshots
http://pythonide.stani.be/manual/html/manual.html

------=_Part_41369_18639215.1164241401845
Content-Type: text/x-python; name=smdi.py; charset=ANSI_X3.4-1968
Content-Transfer-Encoding: base64
X-Attachment-Id: f_euuf8hxs
Content-Disposition: attachment; filename="smdi.py"

IyMjIyhjKXd3dy5zdGFuaS5iZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCnRyeToKICAgIGltcG9ydCBzbSwgc20ub3N4CiAgICBJ
TkZPPXNtLklORk8uY29weSgpCiAgICAKICAgIElORk9bJ3RpdGxlJ10gICAgID0gSU5GT1sndGl0
bGVGdWxsJ10gPSAnU2RpL01kaSBGcmFtZXdvcmsnCiAgICAKICAgIElORk9bJ2Rlc2NyaXB0aW9u
J109XAogICAgIiIiRnJhbWV3b3JrIHdoaWNoIG1ha2VzIGl0IGVhc3kgdG8gc3dpdGNoIGJldHdl
ZW4gU2RpIChMaW51eC9NYWMpIAogICAgYW5kIE1kaSAoV2luZG93cykuCiAgICAiIiIKCiAgICBf
X2RvY19fPUlORk9bJ2RvYyddJUlORk8KZXhjZXB0OgogICAgX19kb2NfXz0iU3RhbmkncyBNdWx0
aXBsZSBEb2N1bWVudCBJbnRlcmZhY2UgKGMpd3d3LnN0YW5pLmJlIgoKIiIiCkF0dHJpYnV0ZXMg
b2YgQXBwbGljYXRpb246CiAgICAtIHByb3BlcnRpZXM6CiAgICAgICAgLSBjaGlsZHJlbgogICAg
ICAgIC0gY29uZmlnCiAgICAgICAgLSBERUJVRwogICAgICAgIC0gaW1hZ2VQYXRoCiAgICAgICAg
LSBtZGkKICAgICAgICAtIHRpdGxlCiAgICAgICAgLSBwYXJlbnRGcmFtZQogICAgICAgIC0gcGFy
ZW50UGFuZWwKICAgICAgICAtIHBvcwogICAgICAgIC0gc2l6ZQogICAgICAgIC0gc3R5bGUKICAg
IC0gbWV0aG9kczoKICAgICAgICAtIFNldE1kaQogICAgLSBjbGFzc2VzOgogICAgICAgIC0gQ2hp
bGRGcmFtZQogICAgICAgIC0gQ2hpbGRQYW5lbAogICAgICAgIC0gTWVudUJhcgogICAgICAgIC0g
UGFyZW50RnJhbWUKICAgICAgICAtIFBhcmVudFBhbmVsCiAgICAgICAgLSBTdGF0dXNCYXIKICAg
ICAgICAtIFRvb2xCYXIKICAgICAgICAKQXR0cmlidXRlcyBvZiBGcmFtZToKICAgIC0gcHJvcGVy
dGllczoKICAgICAgICAtIGFwcAogICAgICAgIC0gZGVhZAogICAgICAgIC0gbWVudUJhcgogICAg
ICAgIC0gcGFyZW50RnJhbWUKICAgICAgICAtIHRvb2xCYXIKICAgIC0gbWV0aG9kczoKICAgICAg
ICAtIGdldEluZGV4CiAgICAgICAgLSAobWF4aW1pemUpCiAgICAgICAgLSBzZXRUaXRsZQogICAg
ICAgIC0gU2V0U3RhdHVzVGV4dAogICAgLSBldmVudHM6CiAgICAgICAgLSBiaW5kVGFicwogICAg
ICAgIC0gdW5iaW5kVGFicwogICAgICAgIC0gb25GcmFtZUFjdGl2YXRlCiAgICAgICAgLSBvbkZy
YW1lQ2xvc2UKICAgICAgICAtIG9uRnJhbWVNb3ZlCiAgICAgICAgLSBvbkZyYW1lU2l6ZQogICAg
ICAgIC0gKG9uRnJhbWVUYWIpCiAgICAtIGNsYXNzZXM6CiAgICAgICAgLSBQYW5lbAogICAgICAg
IApBdHRyaWJ1dGVzIG9mIFBhbmVsOgogICAgLSBwcm9wZXJ0aWVzOgogICAgICAgIC0gY2hhbmdl
ZAogICAgICAgIC0gZnJhbWUKICAgICAgICAtIHRpdGxlCiAgICAgICAgLSBwYXJlbnRGcmFtZQog
ICAgICAgIC0gcGFyZW50UGFuZWwKICAgIC0gbWV0aG9kczoKICAgIApBdHRyaWJ1dGVzIG9mIE1l
bnVCYXI6CiAgICAtIHByb3BlcnRpZXM6CiAgICAgICAgLSBhcHAKICAgICAgICAtIGZyYW1lCiAg
ICAgICAgLSBwYXJlbnRGcmFtZQogICAgICAgIC0gcGFyZW50UGFuZWwKICAgICAgICAtIHRvb2xC
YXIKCkF0dHJpYnV0ZXMgb2YgVG9vbEJhcjoKICAgIC0gcHJvcGVydGllczoKICAgICAgICAtIGFw
cAogICAgICAgIC0gZnJhbWUKICAgICAgICAtIG1lbnVCYXIKICAgIApUb2RvOgotIE1ESV9UQUJT
IElTIE5PVCBXT1JLSU5HISEgVEhJUyBTSE9VTEQgQkUgRklYRUQKLSBpY29uIHN1cHBvcnQKIiIi
CgojIyMjTW9kdWxlcwppbXBvcnQgIG9zLCBzeXMsIHBwcmludAppbXBvcnQgIHd4CmZyb20gICAg
d3gubGliLmV2dG1nciBpbXBvcnQgZXZlbnRNYW5hZ2VyCmltcG9ydCBzaW5nbGVBcHAKaW1wb3J0
IE5vdGVib29rQ3RybAp3eF9Ob3RlYm9vayA9IE5vdGVib29rQ3RybC5Ob3RlYm9va0N0cmwKI2lt
cG9ydCBzbS5zcHkKCiMjIyNDb25zdGFudHMKI3ZhbHVlcwpTREkgICAgICAgICAgICAgICAgID0g
MApNRElfU0FTSCAgICAgICAgICAgID0gMQpNRElfU0FTSF9UQUJTICAgICAgID0gMgpNREkgICAg
ICAgICAgICAgICAgID0gMwpNRElfVEFCUyAgICAgICAgICAgID0gNApNRElfU1BMSVQgICAgICAg
ICAgID0gNQojZGVzY3JpcHRpb25zClNESV9NQUMgICAgICAgICAgICAgPSAic2luZ2xlIHdpdGgg
dGFicyAobWFjLCBsaW51eCwgd2luZG93cykiCk1ESV9TQVNIX1dJTiAgICAgICAgPSAibXVsdGlw
bGUgd2l0aCBzYXNoICh3aW5kb3dzKSIKTURJX1NBU0hfVEFCU19MSU5VWCA9ICJtdWx0aXBsZSB3
aXRoIHNhc2ggJiB0YWJzIChsaW51eCkiCk1ESV9TQVNIX1RBQlNfV0lOICAgPSAibXVsdGlwbGUg
d2l0aCBzYXNoICYgdGFicyAod2luZG93cyBkZWZhdWx0KSIKTURJX1dJTiAgICAgICAgICAgICA9
ICJtdWx0aXBsZSB3aXRoIHBhbGV0dGUgKHdpbmRvd3MpIgpNRElfTUFDICAgICAgICAgICAgID0g
InNpbmdsZSB3aXRoIHBhbGV0dGUgKG1hYykiCk1ESV9UQUJTX0xJTlVYICAgICAgPSAibXVsdGlw
bGUgd2l0aCB0YWJzIChsaW51eCkiCk1ESV9UQUJTX1dJTiAgICAgICAgPSAibXVsdGlwbGUgd2l0
aCB0YWJzICh3aW5kb3dzKSIKTURJX1RBQlNfTUFDICAgICAgICA9ICJzaW5nbGUgd2l0aCB0YWJz
IChtYWMpIgpNRElfU1BMSVRfQUxMICAgICAgID0gIm11bHRpcGxlIHdpdGggc2FzaCAmIHRhYnMg
KG1hYyBkZWZhdWx0LGxpbnV4IGRlZmF1bHQsd2luZG93cykiCgpERUZBVUxUICAgICAgICAgICAg
ID0gIjxkZWZhdWx0PiIKREkgICAgICAgICAgICAgICAgICA9IHtTRElfTUFDICAgICAgICAgICAg
ICAgICAgOiBTREksCiAgICAgICAgICAgICAgICAgICAgICAgTURJX1NBU0hfV0lOICAgICAgICAg
ICAgIDogTURJX1NBU0gsCiAgICAgICAgICAgICAgICAgICAgICAgTURJX1NBU0hfVEFCU19MSU5V
WCAgICAgIDogTURJX1NBU0gsCiAgICAgICAgICAgICAgICAgICAgICAgTURJX1NBU0hfVEFCU19X
SU4gICAgICAgIDogTURJX1NBU0hfVEFCUywKICAgICAgICAgICAgICAgICAgICAgICBNRElfV0lO
ICAgICAgICAgICAgICAgICAgOiBNREksCiAgICAgICAgICAgICAgICAgICAgICAgTURJX01BQyAg
ICAgICAgICAgICAgICAgIDogTURJLAogICAgICAgICAgICAgICAgICAgICAgIE1ESV9UQUJTX0xJ
TlVYICAgICAgICAgICA6IE1ESSwKICAgICAgICAgICAgICAgICAgICAgICAjTURJX1RBQlNfV0lO
ICAgICAgICAgICAgIDogTURJX1RBQlMsCiAgICAgICAgICAgICAgICAgICAgICAgTURJX1RBQlNf
TUFDICAgICAgICAgICAgIDogTURJX1RBQlMsCiAgICAgICAgICAgICAgICAgICAgICAgTURJX1NQ
TElUX0FMTCAgICAgICAgICAgIDogTURJX1NQTElULAogICAgICAgICAgICAgICAgICAgICAgIERF
RkFVTFQgIDogLTF9CgpQTEFURk9STSAgICAgICAgICAgICAgICAgICAgPSBzeXMucGxhdGZvcm0K
V0lOICAgICAgICAgICAgICAgICAgICAgICAgID0gUExBVEZPUk0uc3RhcnRzd2l0aCgnd2luJykK
REFSV0lOICAgICAgICAgICAgICAgICAgICAgID0gUExBVEZPUk0uc3RhcnRzd2l0aCgnZGFyd2lu
JykKR1RLICAgICAgICAgICAgICAgICAgICAgICAgID0gbm90IChXSU4gb3IgREFSV0lOKQoKaWYg
REFSV0lOOgogICAgcHJpbnQgJ0lmIHNwZSBpcyB1bnN0YWJsZSwgdHJ5IHRoaXMgaW50ZXJmYWNl
IGZyb20gdGhlIHByZWZlcmVuY2VzOlxuICAiJXMiXG4nJU1ESV9TUExJVF9BTEwKCiN3eCByZWxh
dGVkCkZVTExfUkVQQUlOVF9PTl9SRVNJWkUgICAgICA9IHd4LkZVTExfUkVQQUlOVF9PTl9SRVNJ
WkUKUE9TICAgICAgICAgICAgICAgICAgICAgICAgID0gKDEwLDEwKQpTSVpFICAgICAgICAgICAg
ICAgICAgICAgICAgPSAoNjAwLDQwMCkKU0lOR0xFX0lOU1RBTkNFX0FQUCAgICAgICAgID0gRmFs
c2UKU1RZTEVfQ0hJTERGUkFNRSAgICAgICAgICAgID0gd3guREVGQVVMVF9GUkFNRV9TVFlMRQpT
VFlMRV9OT1RFQk9PSyAgICAgICAgICAgICAgPSBGVUxMX1JFUEFJTlRfT05fUkVTSVpFfHd4LkNM
SVBfQ0hJTERSRU58d3guTk9fQk9SREVSClNUWUxFX1BBUkVOVEZSQU1FICAgICAgICAgICA9IHd4
LkRFRkFVTFRfRlJBTUVfU1RZTEUgI3wgd3guTUFYSU1JWkUKU1RZTEVfU1BMSVQgICAgICAgICAg
ICAgICAgID0gd3guU1BfTk9CT1JERVIKU1RZTEVfVE9PTEJBUiAgICAgICAgICAgICAgID0gd3gu
VEJfSE9SSVpPTlRBTCB8IHd4Lk5PX0JPUkRFUiB8IHd4LlRCX0ZMQVQgfCB3eC5UQl9URVhUClRB
QlNBU0hfSEVJR0hUICAgICAgICAgICAgICA9IDMwClRJVExFICAgICAgICAgICAgICAgICAgICAg
ICA9ICd3d3cuc3RhbmkuYmUnClVOTkFNRUQgICAgICAgICAgICAgICAgICAgICA9ICd1bm5hbWVk
JwoKIyMjI01lbnUgaGVscGVyIGZ1bmN0aW9uCmRlZiBfKHgpOgogICAgaWYgREFSV0lOOgogICAg
ICAgIHJldHVybiB4Iy5yZXBsYWNlKCdDdHJsJywnQ21kJykKICAgIGVsc2U6CiAgICAgICAgcmV0
dXJuIHgKCmRlZiBfc3RyaXAoeCk6CiAgICByZXR1cm4geC5yZXBsYWNlKCcgJywnXycpLnJlcGxh
Y2UoJy0nLCdfJykucmVwbGFjZSgnJiYgJywnJykucmVwbGFjZSgnJicsJycpLnJlcGxhY2UoJy4n
LCcnKS5yZXBsYWNlKCcoJywnJykucmVwbGFjZSgnKScsJycpCiAgICAKZGVmIG1lbnVXcml0ZSht
ZW51QmFyLGY9J21lbnUudHh0Jyk6CiAgICBsYWJlbHMgPSBbXQogICAgZm9yIG0gaW4gcmFuZ2Uo
bWVudUJhci5HZXRNZW51Q291bnQoKSk6CiAgICAgICAgbWVudSAgICAgICAgPSBtZW51QmFyLkdl
dE1lbnUobSkKICAgICAgICBtZW51TGFiZWwgICA9IG1lbnVCYXIuR2V0TGFiZWxUb3AobSkKICAg
ICAgICBmb3IgaXRlbSBpbiBtZW51LkdldE1lbnVJdGVtcygpOgogICAgICAgICAgICBsYWJlbCAg
ID0gX3N0cmlwKGl0ZW0uR2V0TGFiZWwoKSkKICAgICAgICAgICAgaWYgbGFiZWw6CiAgICAgICAg
ICAgICAgICBsYWJlbHMuYXBwZW5kKChtZW51TGFiZWwsaXRlbS5HZXRMYWJlbCgpKSkKICAgICNl
dmVudHMKICAgIHJlc3VsdCA9ICdcdGRlZiBfX3NtZGlfXyhzZWxmKTpcbicKICAgIGZvciBsYWJl
bCBpbiBsYWJlbHM6CiAgICAgICAgbGFiZWwgPSBfc3RyaXAobGFiZWxbMV0pCiAgICAgICAgcmVz
dWx0Kz0gJ1x0XHR3eC5FVlRfTUVOVShzZWxmLCVzLHNlbGYubWVudV8lcylcbiclKGxhYmVsLnVw
cGVyKCksbGFiZWwubG93ZXIoKSkKICAgIHJlc3VsdCs9ICdcbicKICAgIGZvciBsYWJlbCBpbiBs
YWJlbHM6CiAgICAgICAgcmVzdWx0Kz0nXHRkZWYgbWVudV8lcyhzZWxmKTpcblx0XHQiIiIlcyIi
IlxuXHRcdHBhc3NcblxuJyUoX3N0cmlwKGxhYmVsWzFdLmxvd2VyKCkpLCclcyA+ICVzJyVsYWJl
bCkKICAgIHByaW50IHJlc3VsdAogICAgcHJpbnQgb3MuZ2V0Y3dkKCkKICAgIHByaW50IGYKICAg
IGYgICA9IG9wZW4oZiwndycpCiAgICBmLndyaXRlKHJlc3VsdCkKICAgIGYuY2xvc2UoKQogICAg
ICAgICAgICAKZGVmIHRlc3RfbWVudVdyaXRlKCk6CiAgICBpbXBvcnQgbWVudQogICAgbWVudVdy
aXRlKHd4Z01lbnUuQmFyKCkpCiAgICAKIyMjI0Jhc2UKV1hfQklUTUFQICAgICAgID0gd3guQml0
bWFwCgpjbGFzcyBCaXRtYXA6CiAgICBkZWYgX19pbml0X18oc2VsZixwYXRoLGFwcCk6CiAgICAg
ICAgc2VsZi5wYXRoID0gcGF0aAogICAgICAgIHNlbGYuYXBwID0gYXBwCiAgICBkZWYgX19jYWxs
X18oc2VsZix4LHQ9d3guQklUTUFQX1RZUEVfQU5ZKToKICAgICAgICBwYXRoID0gb3MucGF0aC5q
b2luKHNlbGYucGF0aCxvcy5wYXRoLmJhc2VuYW1lKHgpKQogICAgICAgICNpZiBzZWxmLmFwcC5E
RUJVRzoKICAgICAgICAjICAgIHByaW50ICdCaXRtYXA6ICVzPCVzJyUoeCxwYXRoKQogICAgICAg
IHJldHVybiBXWF9CSVRNQVAocGF0aCx0KQogICAgICAgIApjbGFzcyBEdW1teVBhZ2Uod3guU3Rh
dGljVGV4dCk6CiAgICAiIiJQYWdlIHRvIGZpbGwgdGhlIHRhYnMgKG5vdCBtZWFudCB0byBiZSB2
aXNpYmxlKS4iIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLHRhYnMpOgogICAgICAgIHd4LlN0YXRp
Y1RleHQuX19pbml0X18oc2VsZiwgdGFicywgd3guSURfQU5ZLCAiU1BFIGJ1ZzogVGhpcyBzaG91
bGRuJ3QgYmUgdmlzaWJsZSIpCiAgICAgICAgCiMjY2xhc3MgTm90ZWJvb2tQbHVzKHd4Lk5vdGVi
b29rKToKIyMgICAgZGVmIF9faW5pdF9fKHNlbGYsYXBwLCphcmdzLCoqa2V5dyk6CiMjICAgICAg
ICB3eC5Ob3RlYm9vay5fX2luaXRfXyhzZWxmLCphcmdzLCoqa2V5dykKIyMgICAgICAgIHNlbGYu
YXBwID0gYXBwCiMjICAgICAgICBzZWxmLkJpbmQod3guRVZUX01JRERMRV9VUCxzZWxmLm9uRnJh
bWVNaWRkbGVDbGljaykKIyMgICAgICAgIHNlbGYuQmluZCh3eC5FVlRfTEVGVF9EQ0xJQ0ssc2Vs
Zi5vbkZyYW1lTWlkZGxlQ2xpY2spCiMjICAgICAgICAKIyMgICAgZGVmIG9uRnJhbWVNaWRkbGVD
bGljayhzZWxmLGV2ZW50KToKIyMgICAgICAgICIiIldoZW4gYSB0YWIgaXMgbWlkZGxlIGNsaWNr
ZWQgKEVWVF9NT1VTRV9MRUZUJkhpdFRlc3QpLiIiIgojIyAgICAgICAgbW91c2VQb3MgICAgPSBl
dmVudC5HZXRQb3NpdGlvbigpCiMjICAgICAgICBpbmRleCwgb3RoZXIgPSBzZWxmLkhpdFRlc3Qo
bW91c2VQb3MpCiMjICAgICAgICBpZiBzZWxmLmFwcC5tZGkgaW4gW1NESSxNRElfVEFCU106ICNu
byBwYXJlbnQgdGFiCiMjICAgICAgICAgICAgemVybyA9IDAKIyMgICAgICAgIGVsc2U6CiMjICAg
ICAgICAgICAgemVybyA9IC0xCiMjICAgICAgICBpZiBpbmRleD56ZXJvOgojIyAgICAgICAgICAg
IHNlbGYuYXBwLmNoaWxkcmVuW2luZGV4LXplcm8tMV0uZnJhbWUub25GcmFtZUNsb3NlKCkKCmNs
YXNzIE5vdGVib29rUGx1cyhOb3RlYm9va0N0cmwuTm90ZWJvb2tDdHJsKToKICAgIGRlZiBfX2lu
aXRfXyhzZWxmLGFwcCwqYXJncywqKmtleXcpOgogICAgICAgIHNlbGYuYXBwID0gYXBwCiAgICAg
ICAga2V5d1snc2l6ZSddID0gd3guU2l6ZSgyNSwyNSkKICAgICAgICBrZXl3WydtYXJnaW4nXSA9
IDAKICAgICAgICBpZiBrZXl3Lmhhc19rZXkoJ3N0eWxlJyk6CiAgICAgICAgICAgIGRlbCBrZXl3
WydzdHlsZSddCiAgICAgICAgTm90ZWJvb2tDdHJsLk5vdGVib29rQ3RybC5fX2luaXRfXyhzZWxm
LCphcmdzLCoqa2V5dykKICAgICAgICAjdGhlbWUKICAgICAgICBzZWxmLnRhYnN0eWxlICAgPSBO
b3RlYm9va0N0cmwuVGhlbWVTdHlsZSgpCiAgICAgICAgaWYgREFSV0lOOgogICAgICAgICAgICBz
ZWxmLlNldENvbnRyb2xCYWNrZ3JvdW5kQ29sb3VyKHd4Lk51bGxDb2xvdXIpI3d4LkNvbG91cigy
MzYsMjM2LDIzNikpCiAgICAgICAgICAgIHNlbGYudGFic3R5bGUuRW5hYmxlQXF1YVRoZW1lKFRy
dWUsMikKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLlNldEhpZ2hsaWdodFNlbGVjdGlv
bihUcnVlKQogICAgICAgICAgICBzZWxmLnRhYnN0eWxlLkVuYWJsZVNpbHZlclRoZW1lKFRydWUp
CiAgICAgICAgc2VsZi5BcHBseVRhYlRoZW1lKHNlbGYudGFic3R5bGUpCiAgICAgICAgI2dlbmVy
YWwgc2V0dGluZ3MKICAgICAgICBpZiBHVEs6CiAgICAgICAgICAgIHNlbGYuU2V0VGFiSGVpZ2h0
KDMwKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYuU2V0VGFiSGVpZ2h0KDI1KSAgICAg
ICAgICAgIAogICAgICAgIHNlbGYuU2V0RHJhd1goVHJ1ZSwgMikKICAgICAgICBzZWxmLlNldFBh
ZGRpbmcod3guUG9pbnQoNCw0KSkKICAgICAgICBzZWxmLlNldFVzZUZvY3VzSW5kaWNhdG9yKEZh
bHNlKQogICAgICAgIHNlbGYuRW5hYmxlQ2hpbGRGb2N1cyhUcnVlKQogICAgICAgIHNlbGYuRW5h
YmxlRHJhZ0FuZERyb3AoVHJ1ZSkKICAgICAgICAjc2VsZi5FbmFibGVIaWRpbmcoVHJ1ZSkKICAg
ICAgICBzZWxmLlNldFRvb2xUaXBCYWNrZ3JvdW5kQ29sb3VyKHd4LkNvbG91cigyNDAsMjU1LDI0
MCkpCiAgICAgICAgI2V2ZW50cwogICAgICAgIHNlbGYuQmluZChOb3RlYm9va0N0cmwuRVZUX05P
VEVCT09LQ1RSTF9QQUdFX0NMT1NJTkcsc2VsZi5vbkNsb3NpbmcpCiAgICAgICAgc2VsZi5CaW5k
KE5vdGVib29rQ3RybC5FVlRfTk9URUJPT0tDVFJMX1BBR0VfRE5ELCBzZWxmLm9uRHJhZ0FuZERy
b3ApCiAgICAgICAgI3NlbGYuQmluZChOb3RlYm9va0N0cmwuRVZUX05PVEVCT09LQ1RSTF9QQUdF
X0RDTElDSywgc2VsZi5PbkxlZnREQ2xpY2spCiAgICAgICAgCiAgICBkZWYgb25DbG9zaW5nKHNl
bGYsZXZlbnQpOgogICAgICAgICIiIldoZW4gYSB0YWIgaXMgbWlkZGxlIGNsaWNrZWQgKEVWVF9N
T1VTRV9MRUZUJkhpdFRlc3QpLiIiIgogICAgICAgIGluZGV4ICAgPSBldmVudC5HZXRTZWxlY3Rp
b24oKQogICAgICAgIHplcm8gICAgPSBzZWxmLmdldFplcm8oKQogICAgICAgIGlmIGluZGV4Pnpl
cm86CiAgICAgICAgICAgIHNlbGYuYXBwLmNoaWxkcmVuW2luZGV4LXplcm8tMV0uZnJhbWUub25G
cmFtZUNsb3NlKCkKICAgICAgICAgICAgCiAgICBkZWYgb25EcmFnQW5kRHJvcChzZWxmLCBldmVu
dCk6CiAgICAgICAgb2xkICAgICA9IGV2ZW50LkdldE9sZFBvc2l0aW9uKCkKICAgICAgICBuZXcg
ICAgID0gZXZlbnQuR2V0TmV3UG9zaXRpb24oKQogICAgICAgIHplcm8gICAgPSBzZWxmLmdldFpl
cm8oKQogICAgICAgIGlmIG5ldyAhPSB6ZXJvOiAjY2hpbGQgY2FuIG5vdCBiZSBiZWZvcmUgcGFy
ZW50IGlmIHRoaXMgaXMgYSB0YWIKICAgICAgICAgICAgY2hpbGRyZW4gICAgICAgICAgICAgICAg
PSBzZWxmLmFwcC5jaGlsZHJlbgogICAgICAgICAgICBjaGlsZCAgICAgICAgICAgICAgICAgICA9
IGNoaWxkcmVuW29sZC16ZXJvLTFdCiAgICAgICAgICAgIGNoaWxkcmVuLnJlbW92ZShjaGlsZCkK
ICAgICAgICAgICAgY2hpbGRyZW4uaW5zZXJ0KG5ldy16ZXJvLTEsY2hpbGQpCiAgICAgICAgICAg
IGV2ZW50LlNraXAoKQogICAgICAgIAogICAgZGVmIGdldFplcm8oc2VsZik6CiAgICAgICAgaWYg
c2VsZi5hcHAubWRpIGluIFtTREksTURJX1RBQlNdOiAjbm8gcGFyZW50IHRhYgogICAgICAgICAg
ICByZXR1cm4gMAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiAtMQogICAgICAgIAog
ICAgZGVmIHNldEljb25zKHNlbGYsYml0bWFwcyk6CiAgICAgICAgI3RvZG86IGhlcmUgdGhpcyBz
aG91bGQgZ28gc29tZXdoZXJlIGVsc2UhIQogICAgICAgIHBhZ2VJY29ucyAgICAgID0gW10gIAog
ICAgICAgIGZvciBiaXRtYXAgaW4gYml0bWFwczoKICAgICAgICAgICAgc2VsZi5wYWdlSWNvbnMu
YXBwZW5kKHNlbGYubm90ZWJvb2tJY29ucy5BZGQoYml0bWFwKSkKICAgICAgICAgICAgCiAgICAg
ICAgc2VsZi5ub3RlYm9va0ljb25zICA9IHd4LkltYWdlTGlzdCgxNiwxNikKICAgICAgICBzZWxm
LkFzc2lnbkltYWdlTGlzdChzZWxmLm5vdGVib29rSWNvbnMpCiAgICAgICAgCiAgICBkZWYgT25M
ZWZ0RENsaWNrKHNlbGYsIGV2ZW50KToKCiAgICAgICAgblBhZ2UgPSBldmVudC5HZXRTZWxlY3Rp
b24oKQogICAgICAgIHNlbGYuUmVwYXJlbnRUb0ZyYW1lKG5QYWdlLCBGYWxzZSkKICAgICAgICAK
ICAgICAgICBldmVudC5Ta2lwKCkKCgogICAgICAgICAgICAKIyMjI0ZvdW5kYXRpb24gQ2xhc3Nl
cwpjbGFzcyBGcmFtZXdvcms6CiAgICAiIiJGb3VuZGF0aW9uIGNsYXNzIGZvciBldmVyeSBmcmFt
ZS4iIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLGFwcCxQYW5lbCxwYXJlbnRGcmFtZSxwYWdlPScn
LGV4dHJhPScnLCoqb3B0aW9ucyk6CiAgICAgICAgc2VsZi5GcmVlemUoKQogICAgICAgICNzdGFn
ZQogICAgICAgIHNlbGYuX19iZWZvcmVfXyhhcHAgICAgICAgICA9IGFwcCwKICAgICAgICAgICAg
ICAgICAgICAgICAgUGFuZWwgICAgICAgPSBQYW5lbCwKICAgICAgICAgICAgICAgICAgICAgICAg
cGFyZW50RnJhbWUgPSBwYXJlbnRGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSAg
ICAgICAgPSBwYWdlLAogICAgICAgICAgICAgICAgICAgICAgICBleHRyYSAgICAgICA9IGV4dHJh
KQogICAgICAgIHNlbGYuX19zdGFnZV9fKHBhZ2UgICAgICAgICA9IHBhZ2UsCiAgICAgICAgICAg
ICAgICAgICAgICAgZXh0cmEgICAgICAgID0gZXh0cmEsCiAgICAgICAgICAgICAgICAgICAgICAg
KipvcHRpb25zKQogICAgICAgIHNlbGYuX19hZnRlcl9fKCkKICAgICAgICAjI3Jlc3QKICAgICAg
ICBzZWxmLl9fbWVudV9fKCkKICAgICAgICBzZWxmLl9fdG9vbF9fKGFwcCkKICAgICAgICBzZWxm
Ll9fc3RhdHVzQmFyX18oKQogICAgICAgIHNlbGYuX19maW5pc2hfXygpCiAgICAgICAgc2VsZi5f
X2V2ZW50c19fKCkKICAgICAgICAjc2hvdwogICAgICAgIHNlbGYuVGhhdygpCiAgICAgICAgc2Vs
Zi5TaG93KFRydWUpCiAgICAgICAgCiAgICAjLS0tY29tcG9uZW50cwogICAgZGVmIF9fYmVmb3Jl
X18oc2VsZixhcHAsUGFuZWwscGFyZW50RnJhbWUscGFnZSxleHRyYSk6CiAgICAgICAgIiIiUmVm
ZXJlbmNlIGZyYW1lIGF0dHJpYnV0ZXMgKG5vdCBvdmVyd3JpdHRlbikuIiIiCiAgICAgICAgc2Vs
Zi5hcHAgICAgICAgICAgICA9IGFwcAogICAgICAgIHNlbGYuUGFuZWwgICAgICAgICAgPSBQYW5l
bAogICAgICAgIHNlbGYucGFyZW50RnJhbWUgICAgPSBwYXJlbnRGcmFtZQogICAgICAgIHNlbGYu
ZGVhZCAgICAgICAgICAgPSBGYWxzZSAjIHRvZG86IGlzIHRoaXMgc3RpbGwgbmVjZXNzYXJ5CiAg
ICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwnaXNTZGlQYXJlbnQnKToKICAgICAgICAgICAgc2Vs
Zi5pc1NkaVBhcmVudCAgICA9IEZhbHNlCiAgICAgICAgc2VsZi5wYWdlICAgICAgICAgICA9IHBh
Z2UKICAgICAgICBzZWxmLmV4dHJhICAgICAgICAgID0gZXh0cmEKCiAgICAgICAgCiAgICBkZWYg
X19zdGFnZV9fKHNlbGYscGFnZSxleHRyYSwqKm9wdGlvbnMpOgogICAgICAgICIiIkNyZWF0ZSBu
b3RlYm9vayAodG8gc3dpdGNoIGJldHdlZW4gZG9jdW1lbnRzKSAmIHBhbmVsCiAgICAgICAgVGhp
cyBpcyBtb3N0bHkgb3ZlcndyaXR0ZW4uIiIiCiAgICAgICAgc2VsZi5wYW5lbCAgPSBzZWxmLlBh
bmVsKHBhcmVudD1zZWxmLCoqb3B0aW9ucykKCiAgICBkZWYgX19hZnRlcl9fKHNlbGYpOgogICAg
ICAgICIiIlJlZmVyZW5jZSBwYW5lbCBhdHRyaWJ1dGVzICAobm90IG92ZXJ3cml0dGVuKS4iIiIK
ICAgICAgICBwYW5lbCAgICAgICAgICAgICAgID0gc2VsZi5wYW5lbAogICAgICAgIHBhbmVsLmFw
cCAgICAgICAgICAgPSBzZWxmLmFwcAogICAgICAgIHBhbmVsLmZyYW1lICAgICAgICAgPSBzZWxm
CiAgICAgICAgcGFuZWwucGFyZW50RnJhbWUgICA9IHNlbGYucGFyZW50RnJhbWUKICAgICAgICBw
YW5lbC5wYXJlbnRQYW5lbCAgID0gc2VsZi5wYXJlbnRGcmFtZS5wYW5lbAogICAgICAgIHBhbmVs
LmNoYW5nZWQgICAgICAgPSBGYWxzZQoKICAgIGRlZiBfX21lbnVfXyhzZWxmKToKICAgICAgICAi
IiJDcmVhdGU6IEZyYW1ld29yazogbWVudS4iIiIKICAgICAgICBhcHAgICAgICAgICAgICAgICAg
ICAgICA9IHNlbGYuYXBwCiAgICAgICAgaWYgYXBwLk1lbnVCYXIgYW5kIG5vdCBzZWxmLm5vTWVu
dToKICAgICAgICAgICAgaWYgYXBwLkRFQlVHOgogICAgICAgICAgICAgICAgcHJpbnQgIiIiQ3Jl
YXRlOiBGcmFtZXdvcms6IG1lbnUuIiIiCiAgICAgICAgICAgIGlmIGFwcC5tZGk6CiAgICAgICAg
ICAgICAgICBmcmFtZSAgICAgICAgICAgPSBzZWxmLmFwcAogICAgICAgICAgICBlbHNlOgogICAg
ICAgICAgICAgICAgZnJhbWUgICAgICAgICAgID0gc2VsZgogICAgICAgICAgICBzZWxmLm1lbnVC
YXIgICAgICAgID0gbWVudUJhciA9IGFwcC5NZW51QmFyKGFwcD1zZWxmLmFwcCxmcmFtZT1mcmFt
ZSkKICAgICAgICAgICAgc2VsZi5TZXRNZW51QmFyKG1lbnVCYXIpCiAgICAgICAgICAgICNyZWZl
cmVuY2UKICAgICAgICAgICAgbWVudUJhci5hcHAgICAgICAgICA9IGFwcAogICAgICAgICAgICAj
Y3JlYXRlCiAgICAgICAgICAgIG1lbnVCYXIuZnJhbWUgICAgICAgPSBzZWxmCiAgICAgICAgICAg
IG1lbnVCYXIucGFyZW50RnJhbWUgPSBzZWxmLnBhcmVudEZyYW1lCiAgICAgICAgICAgIG1lbnVC
YXIucGFyZW50UGFuZWwgPSBzZWxmLnBhcmVudEZyYW1lLnBhbmVsCiAgICAgICAgICAgIGlmIGhh
c2F0dHIoc2VsZiwncGFsZXR0ZScpOgogICAgICAgICAgICAgICAgc2VsZi5wYWxldHRlLnBhbmVs
LmFwcCAgICAgID0gYXBwCiAgICAgICAgICAgICAgICBzZWxmLnBhbGV0dGUucGFuZWwubWVudUJh
ciAgPSBtZW51QmFyCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5tZW51QmFyICAgICAg
ICA9IE5vbmUKCiAgICBkZWYgX190b29sX18oc2VsZixhcHApOgogICAgICAgICIiIkNyZWF0ZSB0
b29sYmFyCiAgICAgICAgCiAgICAgICAgVmVyeSBpbXBvcnRhbnQ6IGluIHRoZSBjdXN0b20gd3gu
VG9vbEJhciBjbGFzcyBhZnRlciB0aGUgCiAgICAgICAgd3guVG9vbEJhci5fX2luaXRfXyB0aGUg
Zm9sbG93aW5nIGNvZGUgbXVzdCBiZSB3cml0dGVuOgogICAgICAgICAgICBwYXJlbnQuU2V0VG9v
bEJhcihzZWxmKSIiIgogICAgICAgIGlmIHNlbGYuYXBwLlRvb2xCYXIgYW5kIG5vdCAoc2VsZi5u
b01lbnUgb3Igc2VsZi5pc1NkaVBhcmVudCk6CiAgICAgICAgICAgIGlmIHNlbGYuYXBwLkRFQlVH
OgogICAgICAgICAgICAgICAgcHJpbnQgIiIiQ3JlYXRlOiBGcmFtZXdvcms6IHRvb2xiYXIuIiIi
CiAgICAgICAgICAgICNjcmVhdGUKICAgICAgICAgICAgc2VsZi50b29sQmFyICAgICAgICAgICAg
ICAgID0gc2VsZi5hcHAuVG9vbEJhcihwYXJlbnQ9c2VsZiwgYXBwPWFwcCwKICAgICAgICAgICAg
ICAgIGlkPXd4LklEX0FOWSwgc3R5bGU9U1RZTEVfVE9PTEJBUikKICAgICAgICAgICAgI3NlbGYu
U2V0VG9vbEJhcihzZWxmLnRvb2xCYXIpLT4gZG8gdGhpcyBpbiB0b29sYmFyIGNsYXNzCiAgICAg
ICAgICAgICNyZWZlcmVuY2UKICAgICAgICAgICAgc2VsZi50b29sQmFyLmFwcCAgICAgICAgICAg
ID0gc2VsZi5hcHAKICAgICAgICAgICAgc2VsZi50b29sQmFyLmZyYW1lICAgICAgICAgID0gc2Vs
ZgogICAgICAgICAgICBpZiBzZWxmLm1lbnVCYXI6CiAgICAgICAgICAgICAgICBzZWxmLnRvb2xC
YXIubWVudUJhciAgICAgICAgPSBzZWxmLm1lbnVCYXIKICAgICAgICAgICAgICAgIHNlbGYubWVu
dUJhci50b29sQmFyICAgICAgICA9IHNlbGYudG9vbEJhcgogICAgICAgIGVsc2U6CiAgICAgICAg
ICAgIHNlbGYudG9vbEJhciA9IE5vbmUKICAgICAgICAgICAgaWYgc2VsZi5tZW51QmFyOgogICAg
ICAgICAgICAgICAgc2VsZi5tZW51QmFyLnRvb2xCYXIgICAgICAgID0gTm9uZQogICAgICAgICAg
ICAKICAgIGRlZiBfX3N0YXR1c0Jhcl9fKHNlbGYpOgogICAgICAgICIiIkNyZWF0ZSBzdGF0dXNi
YXIgKHRvIGJlIG92ZXJ3cml0dGVuKS4iIiIKICAgICAgICBpZiBzZWxmLm5vTWVudToKICAgICAg
ICAgICAgc2VsZi5wYW5lbC5TZXRTdGF0dXNUZXh0ICAgID0gc2VsZi5wYXJlbnRGcmFtZS5TZXRT
dGF0dXNUZXh0CiAgICAgICAgICAgIHNlbGYucGFuZWwuc3RhdHVzQmFyICAgICAgICA9IHNlbGYu
cGFyZW50RnJhbWUuc3RhdHVzQmFyCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5wYW5l
bC5TZXRTdGF0dXNUZXh0ICAgID0gc2VsZi5TZXRTdGF0dXNUZXh0CiAgICAgICAgICAgIGlmIHNl
bGYuYXBwLlN0YXR1c0JhcjoKICAgICAgICAgICAgICAgIGlmIHNlbGYuYXBwLkRFQlVHOgogICAg
ICAgICAgICAgICAgICAgIHByaW50ICIiIkNyZWF0ZTogRnJhbWV3b3JrOiBzdGF0dXNiYXIuIiIi
CiAgICAgICAgICAgICAgICBzZWxmLnN0YXR1c0JhciA9IHNlbGYuYXBwLlN0YXR1c0JhcihwYXJl
bnQ9c2VsZixpZD13eC5JRF9BTlkpCiAgICAgICAgICAgICAgICBzZWxmLlNldFN0YXR1c0Jhcihz
ZWxmLnN0YXR1c0JhcikKICAgICAgICAgICAgCiAgICAjLS0tb3RoZXIKICAgIGRlZiBfX2Zpbmlz
aF9fKHNlbGYpOgogICAgICAgIHNlbGYuc2V0VGl0bGUoc2VsZi5wYWdlLHNlbGYuZXh0cmEpCiAg
ICAgICAgaWYgaGFzYXR0cihzZWxmLnBhbmVsLCdfX2ZpbmlzaF9fJyk6CiAgICAgICAgICAgIHNl
bGYucGFuZWwuX19maW5pc2hfXygpCiAgICAgICAgICAgIAogICAgZGVmIF9fbGF5b3V0VGFic19f
KHNlbGYscGFyZW50PU5vbmUpOgogICAgICAgICIiIk5vdCBmb3IgbWRpIGNoaWxkcmVuIiIiCiAg
ICAgICAgaWYgbm90IHBhcmVudDogcGFyZW50ID0gc2VsZgogICAgICAgICNzaXplciBsYXlvdXQK
ICAgICAgICBzaXplciA9IHd4LkJveFNpemVyKHd4LlZFUlRJQ0FMKQogICAgICAgIHNpemVyLkFk
ZChzZWxmLnRhYnMsIDEsIHd4LkVYUEFORCwgMCkKICAgICAgICBwYXJlbnQuU2V0QXV0b0xheW91
dChUcnVlKQogICAgICAgIHBhcmVudC5TZXRTaXplcihzaXplcikKICAgICAgICBwYXJlbnQuTGF5
b3V0KCkKICAgICAgICAjZXZlbnRzCiAgICAgICAgc2VsZi5iaW5kVGFicygpCiAgICAgICAgCiAg
ICAjLS0tZXZlbnRzCiAgICBkZWYgX19ldmVudHNfXyhzZWxmKToKICAgICAgICAiIiJJbml0aWFs
aXplIGV2ZW50cy4iIiIKICAgICAgICBldmVudE1hbmFnZXIuUmVnaXN0ZXIoc2VsZi5vbkZyYW1l
QWN0aXZhdGUsIHd4LkVWVF9BQ1RJVkFURSwgICAgc2VsZikKICAgICAgICBldmVudE1hbmFnZXIu
UmVnaXN0ZXIoc2VsZi5vbkZyYW1lQ2xvc2UsICAgIHd4LkVWVF9DTE9TRSwgICAgICAgc2VsZikK
ICAgICAgICBldmVudE1hbmFnZXIuUmVnaXN0ZXIoc2VsZi5vbkZyYW1lTW92ZSwgICAgIHd4LkVW
VF9NT1ZFLCAgICAgICAgc2VsZikKICAgICAgICBldmVudE1hbmFnZXIuUmVnaXN0ZXIoc2VsZi5v
bkZyYW1lU2l6ZSwgICAgIHd4LkVWVF9TSVpFLCAgICAgICAgc2VsZikKICAgICAgICBpZiBzZWxm
Lm1lbnVCYXI6ICAgIHNlbGYubWVudUJhci5fX2V2ZW50c19fKCkKICAgICAgICBpZiBzZWxmLnRv
b2xCYXI6ICAgIHNlbGYudG9vbEJhci5fX2V2ZW50c19fKCkKICAgICAgICBpZiBoYXNhdHRyKHNl
bGYucGFuZWwsJ29uSWRsZScpOgogICAgICAgICAgICBldmVudE1hbmFnZXIuUmVnaXN0ZXIoc2Vs
Zi5vbkZyYW1lSWRsZSwgd3guRVZUX0lETEUsIHNlbGYpCiAgICAgICAgCiAgICBkZWYgb25GcmFt
ZUFjdGl2YXRlKHNlbGYsIGV2ZW50KToKICAgICAgICAiIiJBY3RpdmF0ZSBldmVudCAodG8gYmUg
b3ZlcndyaXR0ZW4pLiIiIgogICAgICAgIGdldEFjdGl2ZSAgID0gKGV2ZW50IGlzIE5vbmUpIG9y
IGV2ZW50LkdldEFjdGl2ZSgpCiAgICAgICAgaWYgZ2V0QWN0aXZlOgogICAgICAgICAgICBpZiBz
ZWxmLmFwcC5ERUJVRzogCiAgICAgICAgICAgICAgICBwcmludCAnRXZlbnQ8OiBGcmFtZXdvcms6
ICVzLkFjdGl2YXRlKCVzKSclKHNlbGYuX19jbGFzc19fLGdldEFjdGl2ZSkKICAgICAgICAgICAg
aWYgaGFzYXR0cihzZWxmLnBhbmVsLCdvbkFjdGl2YXRlJyk6CiAgICAgICAgICAgICAgICBzZWxm
LnBhbmVsLm9uQWN0aXZhdGUoZXZlbnQpCiAgICAgICAgZWxpZiBoYXNhdHRyKHNlbGYucGFuZWws
J29uRGVhY3RpdmF0ZScpOgogICAgICAgICAgICBzZWxmLnBhbmVsLm9uRGVhY3RpdmF0ZShldmVu
dCkKICAgICAgICBpZiBzZWxmLmFwcC5ERUJVRzogCiAgICAgICAgICAgIHByaW50ICdFdmVudD46
IEZyYW1ld29yazogJXMuQWN0aXZhdGUoJXMpJyUoc2VsZi5fX2NsYXNzX18sZ2V0QWN0aXZlKQog
ICAgICAgIGlmIGV2ZW50OiBldmVudC5Ta2lwKCkKICAgICAgICAKICAgIGRlZiBvbkZyYW1lQ2xv
c2Uoc2VsZiwgZXZlbnQ9Tm9uZSwgZGVzdHJveSA9IDEpOgogICAgICAgICIiIkNsb3NlIGV2ZW50
ICh0byBiZSBvdmVyd3JpdHRlbi9leHRlbmRlZCkuIiIiCiAgICAgICAgZGVidWcgPSBzZWxmLmFw
cC5ERUJVRwogICAgICAgIGlmIGRlYnVnOgogICAgICAgICAgICBwcmludCAnRXZlbnQ8OiBGcmFt
ZXdvcms6ICVzLkNsb3NlJyVzZWxmLl9fY2xhc3NfXwogICAgICAgIGlmIGhhc2F0dHIoc2VsZi5w
YW5lbCwnb25DbG9zZScpOgogICAgICAgICAgICBzZWxmLmRlYWQgPSBzZWxmLnBhbmVsLm9uQ2xv
c2UoKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYuZGVhZCA9IFRydWUKICAgICAgICBp
ZiBzZWxmLmRlYWQ6CiAgICAgICAgICAgIGlmIGRlc3Ryb3k6CiAgICAgICAgICAgICAgICBldmVu
dE1hbmFnZXIuRGVyZWdpc3RlcldpbmRvdyhzZWxmKQogICAgICAgICAgICAgICAgc2VsZi5EZXN0
cm95KCkKICAgICAgICAgICAgICAgIGlmIGV2ZW50OiBldmVudC5Ta2lwKCkKICAgICAgICAgICAg
aWYgZGVidWc6IAogICAgICAgICAgICAgICAgcHJpbnQgJ0V2ZW50PjogRnJhbWV3b3JrOiAlcy5D
bG9zZSByZXR1cm5zIFRydWUnJXNlbGYuX19jbGFzc19fCiAgICAgICAgICAgIHJldHVybiBUcnVl
CiAgICAgICAgZWxzZToKICAgICAgICAgICAgaWYgZGVidWc6IAogICAgICAgICAgICAgICAgcHJp
bnQgJ0V2ZW50PjogRnJhbWV3b3JrOiAlcy5DbG9zZSByZXR1cm5zIEZhbHNlJyVzZWxmLl9fY2xh
c3NfXwogICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAKICAgIGRlZiBvbkZyYW1lTW92
ZShzZWxmLCBldmVudD1Ob25lKToKICAgICAgICAiIiJNb3ZlIGV2ZW50ICh0byBiZSBvdmVyd3Jp
dHRlbikuIiIiCiAgICAgICAgaWYgc2VsZi5hcHAuREVCVUc6IAogICAgICAgICAgICBwcmludCAn
RXZlbnQ8OiBGcmFtZXdvcms6ICVzLk1vdmUnJXNlbGYuX19jbGFzc19fCiAgICAgICAgaWYgZXZl
bnQ6IGV2ZW50LlNraXAoKQogICAgICAgICNzbS5zcHkuZnJhbWUoMSkKICAgICAgICBpZiBoYXNh
dHRyKHNlbGYucGFuZWwsJ29uTW92ZScpOgogICAgICAgICAgICBzZWxmLnBhbmVsLm9uTW92ZShl
dmVudCkKICAgICAgICBpZiBzZWxmLmFwcC5ERUJVRzogCiAgICAgICAgICAgIHByaW50ICdFdmVu
dD46IEZyYW1ld29yazogJXMuTW92ZSclc2VsZi5fX2NsYXNzX18KICAgICAgICAKICAgIGRlZiBv
bkZyYW1lU2l6ZShzZWxmLCBldmVudD1Ob25lKToKICAgICAgICAiIiJTaXplIGV2ZW50ICh0byBi
ZSBvdmVyd3JpdHRlbikuIiIiCiAgICAgICAgI3NtLnNweS5mcmFtZSgxKQogICAgICAgIGlmIHNl
bGYuYXBwLkRFQlVHOiAKICAgICAgICAgICAgcHJpbnQgJ0V2ZW50PDogRnJhbWV3b3JrOiAlcy5T
aXplJyVzZWxmLl9fY2xhc3NfXwogICAgICAgIGlmIGhhc2F0dHIoc2VsZi5wYW5lbCwnb25TaXpl
Jyk6CiAgICAgICAgICAgIHNlbGYucGFuZWwub25TaXplKGV2ZW50KQogICAgICAgIGlmIHNlbGYu
YXBwLkRFQlVHOiAKICAgICAgICAgICAgcHJpbnQgJ0V2ZW50PjogRnJhbWV3b3JrOiAlcy5TaXpl
JyVzZWxmLl9fY2xhc3NfXwogICAgICAgIGlmIGV2ZW50OiBldmVudC5Ta2lwKCkKICAgICAgICAK
ICAgIGRlZiBvbkZyYW1lSWRsZShzZWxmLCBldmVudCk6CiAgICAgICAgIiIiVG8gYmUgb3Zlcndy
aXR0ZW4uIiIiCiAgICAgICAgaWYgbm90IHNlbGYuZGVhZDoKICAgICAgICAgICAgaWYgaGFzYXR0
cihzZWxmLnBhbmVsLCdvbklkbGUnKToKICAgICAgICAgICAgICAgIHNlbGYucGFuZWwub25JZGxl
KCkKICAgICAgICAgICAgICAgIAogICAgZGVmIGJpbmRUYWJzKHNlbGYpOgogICAgICAgICIiIkJp
bmQgZXZlbnRzIHRvIG5vdGVib29rIHRhYnMgKHRvIGJlIG92ZXJ3cml0ZW4pLiIiIgogICAgICAg
IHBhc3MKICAgICAgICAKICAgIGRlZiB1bmJpbmRUYWJzKHNlbGYpOgogICAgICAgICIiIlVuYmlu
ZCBldmVudHMgdG8gbm90ZWJvb2sgdGFicyAodG8gYmUgb3ZlcndyaXRlbikuIiIiCiAgICAgICAg
cGFzcwogICAgICAgIAogICAgZGVmIGdldEluZGV4KHNlbGYpOgogICAgICAgICIiIkdldCBpbmRl
eCBvZiBjdXJyZW50IGNoaWxkLiIiIgogICAgICAgIHRyeToKICAgICAgICAgICAgcmV0dXJuIHNl
bGYuYXBwLmNoaWxkcmVuLmluZGV4KHNlbGYucGFuZWwpCiAgICAgICAgZXhjZXB0IFZhbHVlRXJy
b3I6CiAgICAgICAgICAgIHJldHVybiAtMQogICAgICAgICAgICAKCmNsYXNzIFRhYnMoRnJhbWV3
b3JrKToKICAgICMtLS1ldmVudHMgICAgICAgICAgICAKICAgIGRlZiBiaW5kVGFicyhzZWxmKToK
ICAgICAgICBzZWxmLnRhYnMuQmluZChzZWxmLmFwcC5FVkVOVF9OT1RFQk9PSywgc2VsZi5vbkZy
YW1lVGFiKQogICAgICAgICNldmVudE1hbmFnZXIuUmVnaXN0ZXIoc2VsZi5vbkZyYW1lVGFiLCBz
ZWxmLmFwcC5FVkVOVF9OT1RFQk9PSywgc2VsZi50YWJzKQogICAgICAgIAogICAgZGVmIHVuYmlu
ZFRhYnMoc2VsZik6CiAgICAgICAgc2VsZi50YWJzLlVuYmluZChzZWxmLmFwcC5FVkVOVF9OT1RF
Qk9PSykKICAgICAgICAjZXZlbnRNYW5hZ2VyLkRlcmVnaXN0ZXJXaW5kb3coc2VsZi50YWJzKQog
ICAgICAgIAogICAgZGVmIHJhaXNlVGFiKHNlbGYsaW5kZXgpOgogICAgICAgIGlmIGluZGV4ID4g
LTE6CiAgICAgICAgICAgIGFwcCA9IHNlbGYuYXBwCiAgICAgICAgICAgIGlmIGFwcC5ERUJVRzoK
ICAgICAgICAgICAgICAgIHByaW50ICdFdmVudDw6IFRhYjogICAlcy5vbkZyYW1lVGFiKCVzKScl
KHNlbGYuX19jbGFzc19fLGluZGV4KQogICAgICAgICAgICBwYXJlbnQgICAgICA9IGFwcC5tZGkg
aW4gW1NESSxNRElfVEFCU10KICAgICAgICAgICAgaWYgaW5kZXggPT0gMCBhbmQgcGFyZW50Ogog
ICAgICAgICAgICAgICAgd2luZG93ICA9IHNlbGYucGFyZW50RnJhbWUKICAgICAgICAgICAgICAg
IGlmIGhhc2F0dHIod2luZG93LCdwYW5lbEZyYW1lJyk6CiAgICAgICAgICAgICAgICAgICAgd2lu
ZG93ID0gd2luZG93LnBhbmVsRnJhbWUKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAg
IHdpbmRvdyA9IHNlbGYuYXBwLmNoaWxkcmVuW2luZGV4LVswLDFdW3BhcmVudF1dLmZyYW1lCiAg
ICAgICAgICAgIGlmIGFwcC5ERUJVRzoKICAgICAgICAgICAgICAgIHByaW50ICclcy5SYWlzZSgp
JyV3aW5kb3cKICAgICAgICAgICAgICAgIHByaW50IHdpbmRvdy5SYWlzZQogICAgICAgICAgICB3
aW5kb3cuUmFpc2UoKQogICAgICAgICAgICBpZiBhcHAuREVCVUc6CiAgICAgICAgICAgICAgICBw
cmludCAnRXZlbnQ+OiBUYWI6ICAgJXMub25GcmFtZVRhYiglcyknJShzZWxmLl9fY2xhc3NfXyxp
bmRleCkKCiMtLS1TREkgUGxhdGZvcm0gZGVwZW5kZW50CmNsYXNzIFRhYldpbjMyKFRhYnMpOgog
ICAgIiIiU0RJIEltcGxlbWVudGF0aW9uIGZvciB3aW5kb3dzIChzZWUgYWxzbyBBcHAuU2V0TWRp
KSIiIgojIyAgICBkZWYgb25GcmFtZVRhYihzZWxmLGV2ZW50KToKIyMgICAgICAgICIiIldoZW4g
YSB0YWIgaXMgY2hhbmdlZCAoRVZUX01PVVNFX0xFRlQmSGl0VGVzdCkuIiIiCiMjICAgICAgICBt
b3VzZVBvcyAgICA9IGV2ZW50LkdldFBvc2l0aW9uKCkKIyMgICAgICAgIGluZGV4LCBvdGhlciA9
IHNlbGYudGFicy5IaXRUZXN0KG1vdXNlUG9zKQojIyAgICAgICAgc2VsZi5yYWlzZVRhYihpbmRl
eCkKICAgICAgICAKICAgIGRlZiBvbkZyYW1lVGFiKHNlbGYsZXZlbnQpOgogICAgICAgIHNlbGYu
cmFpc2VUYWIoZXZlbnQuR2V0U2VsZWN0aW9uKCkpCiAgICAgICAgZXZlbnQuU2tpcCgpCiAgICAg
ICAgICAgICAgICAKY2xhc3MgVGFiVW5peChUYWJzKToKICAgICIiIlNESSBJbXBsZW1lbnRhdGlv
biBmb3Igd2luZG93cyAoc2VlIGFsc28gQXBwLlNldE1kaSkiIiIKICAgIGRlZiBvbkZyYW1lVGFi
KHNlbGYsZXZlbnQpOgogICAgICAgICIiIldoZW4gYSB0YWIgaXMgY2hhbmdlZCAoRVZUX05PVEVC
T09LX0NIQU5HSU5HKS4iIiIKICAgICAgICBpbmRleCAgICAgICA9IGV2ZW50LkdldFNlbGVjdGlv
bigpCiAgICAgICAgZXZlbnQuVmV0bygpI2luc3RlYWQgb2YgZXZlbnQuU2tpcCgpIChkb24ndCBk
byB0aGlzIGhlcmUgYW55d2F5KQogICAgICAgIHNlbGYucmFpc2VUYWIoaW5kZXgpCgppZiBQTEFU
Rk9STSA9PSAnd2luMzInOgogICAgVGFiUGxhdGZvcm0gICAgID0gVGFiV2luMzIKZWxzZToKICAg
IFRhYlBsYXRmb3JtICAgICA9IFRhYlVuaXgKICAgICAgICAKIyMjI1BhcmVudCBjbGFzc2VzCmNs
YXNzIFBhcmVudChGcmFtZXdvcmspOgogICAgIy0tLWluaXRpYWxpemUKICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBhcHAsIHBhZ2UgPSAnJywgKipvcHRpb25zKToKICAgICAgICBzZWxmLm9wdGlvbnMg
ICAgICAgICAgICA9IG9wdGlvbnMKICAgICAgICBzZWxmLm5vTWVudSAgICAgICAgID0gRmFsc2UK
ICAgICAgICBGcmFtZXdvcmsuX19pbml0X18oc2VsZiwKICAgICAgICAgICAgYXBwICAgICAgICAg
ICAgID0gYXBwLAogICAgICAgICAgICBQYW5lbCAgICAgICAgICAgPSBhcHAuUGFyZW50UGFuZWws
CiAgICAgICAgICAgIHBhZ2UgICAgICAgICAgICA9IHBhZ2UsCiAgICAgICAgICAgIHBhcmVudEZy
YW1lICAgICA9IHNlbGYsCiAgICAgICAgICAgICoqb3B0aW9ucykKICAgICAgICAKICAgIGRlZiBf
X2ZpbmlzaF9fKHNlbGYpOgogICAgICAgIEZyYW1ld29yay5fX2ZpbmlzaF9fKHNlbGYpCiAgICAg
ICAgCiAgICAjLS0tZXZlbnRzCiAgICBkZWYgb25GcmFtZUNsb3NlKHNlbGYsZXZlbnQ9Tm9uZSk6
CiAgICAgICAgc2VsZi5kZWFkID0gRnJhbWV3b3JrLm9uRnJhbWVDbG9zZShzZWxmLGV2ZW50LGRl
c3Ryb3k9MCkKICAgICAgICBpZiBub3Qgc2VsZi5kZWFkOiByZXR1cm4KICAgICAgICAjQXZvaWQg
ZXZlbnQgZXhjZXB0aW9ucyBvZiBjaGlsZCBmcmFtZXMKICAgICAgICBmb3IgY2hpbGQgaW4gc2Vs
Zi5hcHAuY2hpbGRyZW46CiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5EZXJlZ2lzdGVyV2luZG93
KGNoaWxkLmZyYW1lKQogICAgICAgICAgICBjaGlsZC5kZWFkID0gMQogICAgICAgICNEZXN0cm95
IGl0c2VsZgogICAgICAgIHNlbGYuRGVzdHJveSgpCiAgICAgICAgaWYgZXZlbnQ6IGV2ZW50LlNr
aXAoKQoKICAgICMtLS1tZW51CiAgICBkZWYgbWVudV9uZXcoc2VsZiwgZXZlbnQ9Tm9uZSk6CiAg
ICAgICAgc2VsZi5jaGlsZCgpCiAgICAgICAgCiAgICBkZWYgbWVudV9jbG9zZShzZWxmLGV2ZW50
PU5vbmUpOgogICAgICAgIGNoaWxkQWN0aXZlID0gc2VsZi5hcHAuY2hpbGRBY3RpdmUKICAgICAg
ICBpZiBjaGlsZEFjdGl2ZToKICAgICAgICAgICAgY2hpbGRBY3RpdmUub25GcmFtZUNsb3NlKCkK
ICAgICAgICAKICAgICMtLS1wYXJlbnRQYW5lbAogICAgZGVmIGNoaWxkKHNlbGYsKmFyZ3MsKipr
ZXl3KToKICAgICAgICBzZWxmLkNoaWxkRnJhbWUoc2VsZiwqYXJncywqKmtleXcpCiAgICAgICAg
CiAgICBkZWYgbWF4aW1pemUoc2VsZik6CiAgICAgICAgaWYgc2VsZi5hcHAubWRpID09IE1ESV9T
UExJVDoKICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICBpID0gMAogICAgICAgIG0gPSAw
CiAgICAgICAgZm9yIGNoaWxkIGluIHNlbGYuYXBwLmNoaWxkcmVuOgogICAgICAgICAgICBpZiBj
aGlsZC5mcmFtZS5Jc01heGltaXplZCgpOgogICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKICAg
ICAgICByZXR1cm4gRmFsc2UKICAgIAogICAgIy0tLW90aGVyCiAgICBkZWYgc2V0VGl0bGUoc2Vs
ZixwYWdlPScnLGV4dHJhPScnLGRyYXc9VHJ1ZSxjb2xvdXI9Tm9uZSk6CiAgICAgICAgaWYgZHJh
dzoKICAgICAgICAgICAgdCAgICAgICAgICAgPSBzZWxmLmFwcC50aXRsZQogICAgICAgICAgICBp
ZiBwYWdlOgogICAgICAgICAgICAgICAgdCAgICAgICA9ICclcyAtICVzJyUocGFnZSx0KQogICAg
ICAgICAgICBzZWxmLlNldFRpdGxlKHQpCiAgICAgICAgCgpjbGFzcyBNZGlQYXJlbnRGcmFtZShQ
YXJlbnQsd3guTURJUGFyZW50RnJhbWUpOgogICAgIiIiVW5pZm9ybWVkIHBhcmVudCBNZGkvU2Rp
IGNsYXNzIGJhc2VkIG9uIE1kaS4KICAgIAogICAgc2VsZi5QYW5lbCBpcyBkZWZpbmVkIGJ5IGpv
aW5lZCBjbGFzcyIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsYXBwLAogICAgICAgICAgICBpZCAg
ICAgID0gd3guSURfQU5ZLCAKICAgICAgICAgICAgcGFnZSAgID0gJ3BhcmVudEZyYW1lJywKICAg
ICAgICAgICAgcGFyZW50ICA9IE5vbmUsCiAgICAgICAgICAgIHNpemUgICAgPSBTSVpFLAogICAg
ICAgICAgICBzdHlsZSAgID0gU1RZTEVfUEFSRU5URlJBTUUsCiAgICAgICAgICAgIHBvcyAgICAg
PSBQT1MsCiAgICAgICAgICAgICoqb3B0aW9ucyk6CiAgICAgICAgd3guTURJUGFyZW50RnJhbWUu
X19pbml0X18oc2VsZiwgCiAgICAgICAgICAgIGlkICAgICAgPSBpZCwgCiAgICAgICAgICAgIG5h
bWUgICAgPSBwYWdlLAogICAgICAgICAgICBwYXJlbnQgID0gcGFyZW50LAogICAgICAgICAgICBz
aXplICAgID0gc2l6ZSwKICAgICAgICAgICAgc3R5bGUgICA9IHN0eWxlIHwgRlVMTF9SRVBBSU5U
X09OX1JFU0laRSwKICAgICAgICAgICAgdGl0bGUgICA9IHBhZ2UsCiAgICAgICAgICAgIHBvcyAg
ICAgPSBwb3MpCiAgICAgICAgaWYgc3R5bGUgJiB3eC5NQVhJTUlaRToKICAgICAgICAgICAgdHJ5
OiAjbm90IHdvcmtpbmcgb24gbWFuZHJha2U5CiAgICAgICAgICAgICAgICBzZWxmLk1heGltaXpl
KDEpCiAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAjVGhp
cyBhbHdheXMgaGFzIHRvIGJlIGxhc3QhCiAgICAgICAgUGFyZW50Ll9faW5pdF9fKHNlbGYsYXBw
PWFwcCxwYWdlPXBhZ2UsKipvcHRpb25zKQogICAgICAgIAogICAgZGVmIF9fc3RhZ2VfXyhzZWxm
LHBhZ2UsZXh0cmEsKipvcHRpb25zKToKICAgICAgICBzZWxmLnBhbmVsRnJhbWUgICAgID0gd3gu
TURJQ2hpbGRGcmFtZShwYXJlbnQ9c2VsZixpZD13eC5JRF9BTlkpCiAgICAgICAgc2VsZi5wYW5l
bEZyYW1lLlNldFRpdGxlKHNlbGYuYXBwLnBhbmVsRnJhbWVUaXRsZSkKICAgICAgICAjcGFyZW50
UGFuZWwKICAgICAgICBzZWxmLnBhbmVsICAgICAgICAgID0gc2VsZi5QYW5lbChwYXJlbnQ9c2Vs
Zi5wYW5lbEZyYW1lLCoqb3B0aW9ucykKICAgICAgICBldmVudE1hbmFnZXIuUmVnaXN0ZXIoc2Vs
Zi5vblNhc2hDbG9zZSwgd3guRVZUX0NMT1NFLCBzZWxmLnBhbmVsRnJhbWUpCiAgICAgICAgI3Bh
bGV0dGUKICAgICAgICBpZiBzZWxmLmFwcC5QYWxldHRlOgogICAgICAgICAgICBzZWxmLnBhbGV0
dGUgICAgPSBzZWxmLmFwcC5QYWxldHRlKHBhcmVudD1zZWxmLGlkPXd4LklEX0FOWSkKICAgICAg
ICAgICAgc2VsZi5wYWxldHRlLlNob3coKQogICAgICAgIAogICAgZGVmIG9uU2FzaENsb3NlKHNl
bGYsZXZlbnQpOgogICAgICAgIGlmIGhhc2F0dHIoc2VsZi5wYW5lbCwnb25DbG9zZVBhbmVsRnJh
bWUnKToKICAgICAgICAgICAgc2VsZi5wYW5lbC5vbkNsb3NlUGFuZWxGcmFtZShldmVudCkKICAg
ICAgICAgICAgCiAgICBkZWYgc2V0VGl0bGUoc2VsZixwYWdlPScnLGV4dHJhPScnLGRyYXc9VHJ1
ZSxjb2xvdXI9Tm9uZSk6CiAgICAgICAgaWYgZHJhdzoKICAgICAgICAgICAgc2VsZi5TZXRUaXRs
ZShzZWxmLmFwcC50aXRsZSkKICAgICAgICAgICAgCmNsYXNzIE1kaVRhYnNQYXJlbnRGcmFtZShU
YWJQbGF0Zm9ybSxNZGlQYXJlbnRGcmFtZSk6CiAgICBkZWYgX19zdGFnZV9fKHNlbGYscGFnZSxl
eHRyYSwqKm9wdGlvbnMpOgogICAgICAgIGFwcCAgICAgICAgICAgICAgICAgPSBzZWxmLmFwcAog
ICAgICAgIHNlbGYucGFuZWxGcmFtZSAgICAgPSB3eC5NRElDaGlsZEZyYW1lKHBhcmVudD1zZWxm
LGlkPXd4LklEX0FOWSkKICAgICAgICBzZWxmLnBhbmVsRnJhbWUuU2V0VGl0bGUoYXBwLnBhbmVs
RnJhbWVUaXRsZSkKICAgICAgICBzZWxmLnBhbmVsRnJhbWUuUmFpc2U9IHNlbGYucGFuZWxGcmFt
ZS5BY3RpdmF0ZQogICAgICAgICNwYXJlbnRQYW5lbAogICAgICAgIHNlbGYudGFicyAgID0gTm90
ZWJvb2tQbHVzKGFwcD1hcHAscGFyZW50PXNlbGYucGFyZW50RnJhbWUsIGlkPXd4LklEX0FOWSwK
ICAgICAgICAgICAgc3R5bGUgPSBTVFlMRV9OT1RFQk9PSyApCiAgICAgICAgc2VsZi5wYW5lbCAg
PSBzZWxmLlBhbmVsKHBhcmVudD1zZWxmLnRhYnMsKipvcHRpb25zKQogICAgICAgIHNlbGYudGFi
cy5BZGRQYWdlKHNlbGYucGFuZWwsIHBhZ2UpCiAgICAgICAgc2VsZi5fX2xheW91dFRhYnNfXygp
CiAgICAgICAgI2V2ZW50cwogICAgICAgIGV2ZW50TWFuYWdlci5SZWdpc3RlcihzZWxmLm9uU2Fz
aENsb3NlLCB3eC5FVlRfQ0xPU0UsIHNlbGYucGFuZWxGcmFtZSkKICAgICAgICAjcGFsZXR0ZQog
ICAgICAgIGlmIGFwcC5QYWxldHRlOgogICAgICAgICAgICBzZWxmLnBhbGV0dGUgICAgPSBzZWxm
LmFwcC5QYWxldHRlKHBhcmVudD1zZWxmLGlkPXd4LklEX0FOWSkKICAgICAgICAgICAgc2VsZi5w
YWxldHRlLlNob3coKQogICAgICAgICAgICAgICAgCiAgICAgICAgCmNsYXNzIE1kaVNhc2hQYXJl
bnRGcmFtZShNZGlQYXJlbnRGcmFtZSk6CiAgICAiIiJVbmlmb3JtZWQgcGFyZW50IE1kaS9TZGkg
Y2xhc3MgYmFzZWQgb24gTWRpLgogICAgCiAgICBzZWxmLlBhbmVsIGlzIGRlZmluZWQgYnkgam9p
bmVkIGNsYXNzIiIiICAgICAgICAKICAgIGRlZiBfX3N0YWdlX18oc2VsZixwYWdlLGV4dHJhLCoq
b3B0aW9ucyk6CiAgICAgICAgIiIiQ3JlYXRlIHRhYnMgdG8gc3dpdGNoIGJldHdlZW4gZG9jdW1l
bnRzIGFzIGFuIHd4LlNhc2hMYXlvdXRXaW5kb3ciIiIKICAgICAgICBpZiBzZWxmLmFwcC5ERUJV
RzoKICAgICAgICAgICAgcHJpbnQgJ0NyZWF0ZTogTWRpOiAgICVzLnRhYnMnJShzZWxmLl9fY2xh
c3NfXywpCiAgICAgICAgI3Nhc2ggZm9yIHBhcmVudFBhbmVsCiAgICAgICAgc2VsZi5zYXNoSWQg
PSB3eC5OZXdJZCgpCiAgICAgICAgc2VsZi5zYXNoID0gd3guU2FzaExheW91dFdpbmRvdyhpZD1z
ZWxmLnNhc2hJZCwKICAgICAgICAgICAgICBuYW1lPSdzYXNoJywgcGFyZW50PXNlbGYsIHN0eWxl
PXd4Lk5PX0JPUkRFUikKICAgICAgICBzZWxmLnNhc2guU2V0RGVmYXVsdFNpemUod3guU2l6ZSg3
OTIsIDIwMCkpCiAgICAgICAgc2VsZi5zYXNoLlNldE9yaWVudGF0aW9uKHd4LkxBWU9VVF9IT1JJ
Wk9OVEFMKQogICAgICAgIHNlbGYuc2FzaC5TZXRBbGlnbm1lbnQod3guTEFZT1VUX0JPVFRPTSkK
ICAgICAgICBzZWxmLnNhc2guU2V0U2FzaFZpc2libGUod3guU0FTSF9UT1AsIDEpCiAgICAgICAg
c2VsZi5zYXNoLlNldE1pbmltdW1TaXplWSgxKQogICAgICAgICNzZWxmLnNhc2guU2hvdyhUcnVl
KQogICAgICAgIGV2ZW50TWFuYWdlci5SZWdpc3RlcihzZWxmLm9uRnJhbWVTYXNoRHJhZ2dlZCwg
d3guRVZUX1NBU0hfRFJBR0dFRCwgc2VsZi5zYXNoKQogICAgICAgICNwYXJlbnRQYW5lbAogICAg
ICAgIHNlbGYucGFuZWwgICAgICAgICAgPSBzZWxmLlBhbmVsKHBhcmVudD1zZWxmLnNhc2gsKipv
cHRpb25zKQogICAgICAgICNsYXlvdXQKICAgICAgICBzZWxmLnBhbmVsU2l6ZXIgICAgID0gd3gu
Qm94U2l6ZXIod3guVkVSVElDQUwpCiAgICAgICAgc2VsZi5wYW5lbFNpemVyLkFkZChzZWxmLnBh
bmVsLCAxLCB3eC5BTEwgfCB3eC5FWFBBTkQsIDApCiAgICAgICAgc2VsZi5zYXNoLlNldEF1dG9M
YXlvdXQoMSkKICAgICAgICBzZWxmLnNhc2guU2V0U2l6ZXIoc2VsZi5wYW5lbFNpemVyKQogICAg
CiAgICBkZWYgX19maW5pc2hfXyhzZWxmKToKICAgICAgICBQYXJlbnQuX19maW5pc2hfXyhzZWxm
KQogICAgICAgIHd4LkxheW91dEFsZ29yaXRobSgpLkxheW91dE1ESUZyYW1lKHNlbGYpCgogICAg
Iy0tLWV2ZW50cwogICAgZGVmIG9uRnJhbWVTYXNoRHJhZ2dlZChzZWxmLGV2ZW50KToKICAgICAg
ICAiIiJDYWxsZWQgd2hlbiB0aGUgc2hhc2h3aW5kb3cgaXMgZHJhZ2dlZC4iIiIKICAgICAgICBp
ZiBldmVudC5HZXREcmFnU3RhdHVzKCkgPT0gd3guU0FTSF9TVEFUVVNfT1VUX09GX1JBTkdFOgog
ICAgICAgICAgICByZXR1cm4KICAgICAgICBlSUQgPSBldmVudC5HZXRJZCgpCiAgICAgICAgaWYg
ZUlEID09IHNlbGYuc2FzaElkOgogICAgICAgICAgICBzZWxmLnNhc2guU2V0RGVmYXVsdFNpemUo
d3guU2l6ZSgxMDAwLGV2ZW50LkdldERyYWdSZWN0KCkuaGVpZ2h0KSkKICAgICAgICB3eC5MYXlv
dXRBbGdvcml0aG0oKS5MYXlvdXRNRElGcmFtZShzZWxmKQoKICAgIGRlZiBvbkZyYW1lU2l6ZShz
ZWxmLCBldmVudCk6CiAgICAgICAgIiIiT3ZlcndyaXR0ZW4gZm9yIHNhc2ggZHJhZ2dpbmcuIiIi
CiAgICAgICAgRnJhbWV3b3JrLm9uRnJhbWVTaXplKHNlbGYpCiAgICAgICAgd3guTGF5b3V0QWxn
b3JpdGhtKCkuTGF5b3V0TURJRnJhbWUoc2VsZikKCmNsYXNzIE1kaVNhc2hUYWJzUGFyZW50RnJh
bWUoVGFiUGxhdGZvcm0sTWRpU2FzaFBhcmVudEZyYW1lKToKICAgIGRlZiBfX3N0YWdlX18oc2Vs
ZixwYWdlLCoqb3B0aW9ucyk6CiAgICAgICAgIiIiQ3JlYXRlIHRhYnMgdG8gc3dpdGNoIGJldHdl
ZW4gZG9jdW1lbnRzIGFzIGFuIHd4LlNhc2hMYXlvdXRXaW5kb3ciIiIKICAgICAgICBpZiBzZWxm
LmFwcC5ERUJVRzoKICAgICAgICAgICAgcHJpbnQgJ0NyZWF0ZTogTWRpOiAlcy50YWJzJyUoc2Vs
Zi5fX2NsYXNzX18sKQogICAgICAgIHNlbGYudGFic1Nhc2ggPSB3eC5TYXNoTGF5b3V0V2luZG93
KGlkPXd4LklEX0FOWSwKICAgICAgICAgICAgICBuYW1lPSd0YWJzJywgcGFyZW50PXNlbGYsIHN0
eWxlPXd4LkNMSVBfQ0hJTERSRU4pCiAgICAgICAgc2VsZi50YWJzU2FzaC5TZXRPcmllbnRhdGlv
bih3eC5MQVlPVVRfSE9SSVpPTlRBTCkKICAgICAgICBzZWxmLnRhYnNTYXNoLlNldEFsaWdubWVu
dCh3eC5MQVlPVVRfVE9QKQogICAgICAgIHNlbGYudGFic1Nhc2guU2V0RGVmYXVsdFNpemUod3gu
U2l6ZSg3OTIsIFRBQlNBU0hfSEVJR0hUKSkKICAgICAgICBzZWxmLnRhYnMgPSBOb3RlYm9va1Bs
dXMoYXBwPXNlbGYuYXBwLGlkPXd4LklEX0FOWSwgcGFyZW50PXNlbGYudGFic1Nhc2gsIHN0eWxl
PVNUWUxFX05PVEVCT09LKQogICAgICAgIHNlbGYuX19sYXlvdXRUYWJzX18oc2VsZi50YWJzU2Fz
aCkKICAgICAgICBNZGlTYXNoUGFyZW50RnJhbWUuX19zdGFnZV9fKHNlbGYscGFnZSwqKm9wdGlv
bnMpCgogICAgZGVmIG9uRnJhbWVUYWIoc2VsZixldmVudCk6CiAgICAgICAgIiIiV2hlbiBhIHRh
YiBpcyBjaGFuZ2VkIChFVlRfTU9VU0VfTEVGVCZIaXRUZXN0KS4iIiIKICAgICAgICBUYWJQbGF0
Zm9ybS5vbkZyYW1lVGFiKHNlbGYsZXZlbnQpCiAgICAgICAgZXZlbnQuU2tpcCgpCiAgICAgICAg
ICAgIApjbGFzcyBNZGlTcGxpdFBhcmVudEZyYW1lKFBhcmVudCx3eC5GcmFtZSk6CiAgICBkZWYg
X19pbml0X18oc2VsZixhcHAsCiAgICAgICAgICAgIGlkICAgICAgPSB3eC5JRF9BTlksIAogICAg
ICAgICAgICBwYWdlICAgID0gJ3BhcmVudEZyYW1lJywKICAgICAgICAgICAgcGFyZW50ICA9IE5v
bmUsCiAgICAgICAgICAgIHNpemUgICAgPSBTSVpFLAogICAgICAgICAgICBzdHlsZSAgID0gU1RZ
TEVfUEFSRU5URlJBTUUsCiAgICAgICAgICAgIHBvcyAgICAgPSBQT1MsCiAgICAgICAgICAgICoq
b3B0aW9ucyk6CiAgICAgICAgd3guRnJhbWUuX19pbml0X18oc2VsZiwgCiAgICAgICAgICAgIGlk
ICAgICAgPSBpZCwgCiAgICAgICAgICAgIG5hbWUgICAgPSBwYWdlLAogICAgICAgICAgICBwYXJl
bnQgID0gcGFyZW50LCAKICAgICAgICAgICAgc2l6ZSAgICA9IHNpemUsCiAgICAgICAgICAgIHN0
eWxlICAgPSBzdHlsZSB8IEZVTExfUkVQQUlOVF9PTl9SRVNJWkUsCiAgICAgICAgICAgIHRpdGxl
ICAgPSBwYWdlLAogICAgICAgICAgICBwb3MgICAgID0gcG9zKQogICAgICAgIGlmIHN0eWxlICYg
d3guTUFYSU1JWkU6CiAgICAgICAgICAgIHRyeTogI25vdCB3b3JraW5nIG9uIG1hbmRyYWtlOQog
ICAgICAgICAgICAgICAgc2VsZi5NYXhpbWl6ZSgxKQogICAgICAgICAgICBleGNlcHQ6CiAgICAg
ICAgICAgICAgICBwYXNzCiAgICAgICAgI3NlbGYuaXNTZGlQYXJlbnQgICAgPSBUcnVlCiAgICAg
ICAgI1RoaXMgYWx3YXlzIGhhcyB0byBiZSBsYXN0IQogICAgICAgIFBhcmVudC5fX2luaXRfXyhz
ZWxmLGFwcD1hcHAscGFnZT1wYWdlLCoqb3B0aW9ucykKICAgICAgICAKICAgIGRlZiBfX3N0YWdl
X18oc2VsZixwYWdlLGV4dHJhLCoqb3B0aW9ucyk6CiAgICAgICAgc2VsZi5zcGxpdCAgPSBzcGxp
dCA9IHd4LlNwbGl0dGVyV2luZG93KHNlbGYsd3guSURfQU5ZLHN0eWxlPVNUWUxFX1NQTElUKQog
ICAgICAgIHNlbGYudGFicyAgID0gTm90ZWJvb2tQbHVzKGFwcD1zZWxmLmFwcCxwYXJlbnQ9c3Bs
aXQsIGlkPXd4LklEX0FOWSwKICAgICAgICAgICAgc3R5bGUgPSBTVFlMRV9OT1RFQk9PSyApCiAg
ICAgICAgI3NlbGYudGFicyAgID0gd3guTm90ZWJvb2socGFyZW50PXNwbGl0LCBpZD13eC5JRF9B
TlksCiAgICAgICAgIyAgICBzdHlsZSA9IFNUWUxFX05PVEVCT09LICkKICAgICAgICBzZWxmLnBh
bmVsICA9IHNlbGYuUGFuZWwocGFyZW50PXNwbGl0LCoqb3B0aW9ucykKICAgICAgICBzcGxpdC5T
ZXRNaW5pbXVtUGFuZVNpemUoMjApCiAgICAgICAgc3BsaXQuU3BsaXRIb3Jpem9udGFsbHkoc2Vs
Zi50YWJzLCBzZWxmLnBhbmVsLCAtMjAwKQogICAgICAgIHNpemUgPSBzZWxmLkdldFNpemUoKQog
ICAgICAgIHNlbGYuU2V0U2l6ZSgoc2l6ZVswXSxzaXplWzFdLTEpKQogICAgICAgIHNlbGYuU2V0
U2l6ZSgoc2l6ZVswXSxzaXplWzFdKSkKICAgICAgICBzcGxpdC5VcGRhdGVTaXplKCkKICAgICAg
ICBzZWxmLmJpbmRUYWJzKCkKICAgICAgICAKICAgIGRlZiBiaW5kVGFicyhzZWxmLGV2ZW50PU5v
bmUpOgogICAgICAgIHNlbGYudGFicy5CaW5kKE5vdGVib29rQ3RybC5FVlRfTk9URUJPT0tDVFJM
X1BBR0VfQ0hBTkdFRCwgc2VsZi5vbkZyYW1lVGFiKQogICAgICAgICNldmVudE1hbmFnZXIuUmVn
aXN0ZXIoc2VsZi5vbkZyYW1lVGFiLCB3eC5FVlRfTk9URUJPT0tfUEFHRV9DSEFOR0VELCBzZWxm
LnRhYnMpCiAgICAKICAgIGRlZiB1bmJpbmRUYWJzKHNlbGYpOgogICAgICAgIHNlbGYudGFicy5V
bmJpbmQoTm90ZWJvb2tDdHJsLkVWVF9OT1RFQk9PS0NUUkxfUEFHRV9DSEFOR0VEKQogICAgICAg
ICNldmVudE1hbmFnZXIuRGVyZWdpc3RlcldpbmRvdyhzZWxmLnRhYnMpCiAgICAgICAgCiAgICBk
ZWYgb25GcmFtZVRhYihzZWxmLGV2ZW50KToKICAgICAgICBpbmRleCA9IGV2ZW50LkdldFNlbGVj
dGlvbigpCiAgICAgICAgI3ByaW50IGluZGV4CiAgICAgICAgaWYgaW5kZXg+LTE6CiAgICAgICAg
ICAgIHNlbGYuYXBwLmNoaWxkcmVuW2luZGV4XS5mcmFtZS5vbkZyYW1lQWN0aXZhdGUoKQogICAg
ICAgIGV2ZW50LlNraXAoKQogICAgICAgIApjbGFzcyBTZGlQYXJlbnRGcmFtZShUYWJQbGF0Zm9y
bSxQYXJlbnQsd3guRnJhbWUpOgogICAgIiIiVW5pZm9ybWVkIHBhcmVudCBNZGkvU2RpIGNsYXNz
IGJhc2VkIG9uIFNkaS4iIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLGFwcCwKICAgICAgICAgICAg
aWQgICAgICA9IHd4LklEX0FOWSwgCiAgICAgICAgICAgIHBhZ2UgICAgPSAncGFyZW50RnJhbWUn
LAogICAgICAgICAgICBwYXJlbnQgID0gTm9uZSwKICAgICAgICAgICAgc2l6ZSAgICA9IFNJWkUs
CiAgICAgICAgICAgIHN0eWxlICAgPSBTVFlMRV9QQVJFTlRGUkFNRSwKICAgICAgICAgICAgcG9z
ICAgICA9IFBPUywKICAgICAgICAgICAgKipvcHRpb25zKToKICAgICAgICB3eC5GcmFtZS5fX2lu
aXRfXyhzZWxmLCAKICAgICAgICAgICAgaWQgICAgICA9IGlkLCAKICAgICAgICAgICAgbmFtZSAg
ICA9IHBhZ2UsCiAgICAgICAgICAgIHBhcmVudCAgPSBwYXJlbnQsIAogICAgICAgICAgICBzaXpl
ICAgID0gc2l6ZSwKICAgICAgICAgICAgc3R5bGUgICA9IHN0eWxlIHwgRlVMTF9SRVBBSU5UX09O
X1JFU0laRSwKICAgICAgICAgICAgdGl0bGUgICA9IHBhZ2UsCiAgICAgICAgICAgIHBvcyAgICAg
PSBwb3MpCiAgICAgICAgaWYgc3R5bGUgJiB3eC5NQVhJTUlaRToKICAgICAgICAgICAgdHJ5OiAj
bm90IHdvcmtpbmcgb24gbWFuZHJha2U5CiAgICAgICAgICAgICAgICBzZWxmLk1heGltaXplKDEp
CiAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICBzZWxmLmlz
U2RpUGFyZW50ICAgID0gVHJ1ZQogICAgICAgICNUaGlzIGFsd2F5cyBoYXMgdG8gYmUgbGFzdCEK
ICAgICAgICBQYXJlbnQuX19pbml0X18oc2VsZixhcHA9YXBwLHBhZ2U9cGFnZSwqKm9wdGlvbnMp
CgogICAgZGVmIF9fc3RhZ2VfXyhzZWxmLHBhZ2UsZXh0cmEsKipvcHRpb25zKToKICAgICAgICAi
IiJDcmVhdGUgdGFicyB0byBzd2l0Y2ggYmV0d2VlbiBkb2N1bWVudHMgYXMgYW4gd3guTm90ZWJv
b2siIiIKICAgICAgICBpZiBzZWxmLmFwcC5ERUJVRzoKICAgICAgICAgICAgcHJpbnQgJ0NyZWF0
ZTogU2RpOiAgICVzLnRhYnMnJShzZWxmLl9fY2xhc3NfXywpCiAgICAgICAgc2VsZi50YWJzICAg
PSBOb3RlYm9va1BsdXMoYXBwPXNlbGYuYXBwLHBhcmVudD1zZWxmLCBpZD13eC5JRF9BTlksCiAg
ICAgICAgICAgIHN0eWxlID0gU1RZTEVfTk9URUJPT0sgKQogICAgICAgIHNlbGYucGFuZWwgID0g
c2VsZi5QYW5lbChwYXJlbnQ9c2VsZi50YWJzLCoqb3B0aW9ucykKICAgICAgICBzZWxmLnRhYnMu
QWRkUGFnZShzZWxmLnBhbmVsLCBwYWdlKQogICAgICAgIHNlbGYuX19sYXlvdXRUYWJzX18oKQog
ICAgICAgIAogICAgZGVmIHNldFRpdGxlKHNlbGYscGFnZT0nJyxleHRyYT0nJyxkcmF3PVRydWUs
Y29sb3VyPU5vbmUpOgogICAgICAgIGlmIGRyYXc6CiAgICAgICAgICAgIHNlbGYuU2V0VGl0bGUo
c2VsZi5hcHAudGl0bGUpCiAgICAgICAgCiMjIyNDaGlsZCBjbGFzc2VzCmNsYXNzIENoaWxkKEZy
YW1ld29yayk6CiAgICAjLS0taW5pdGlhbGl6ZQogICAgZGVmIF9faW5pdF9fKHNlbGYscGFyZW50
RnJhbWUscGFnZT0nJyxleHRyYT0nJyxwYXJlbnQ9Tm9uZSwqKm9wdGlvbnMpOgogICAgICAgIGFw
cCAgICAgICAgICAgICAgICAgPSBwYXJlbnRGcmFtZS5hcHAKICAgICAgICBzZWxmLnBhZ2VUaXRs
ZSAgICAgID0gJycKICAgICAgICBzZWxmLl9wYWdlVGl0bGUgICAgID0gJz8nCiAgICAgICAgc2Vs
Zi5wYWdlSWNvbnMgICAgICA9IFtdCiAgICAgICAgc2VsZi5leHRyYVRpdGxlICAgICA9ICcnCiAg
ICAgICAgc2VsZi5fZXh0cmFUaXRsZSAgICA9ICcnCiAgICAgICAgRnJhbWV3b3JrLl9faW5pdF9f
KHNlbGYsCiAgICAgICAgICAgIGFwcCAgICAgICAgICAgICA9IGFwcCwKICAgICAgICAgICAgUGFu
ZWwgICAgICAgICAgID0gYXBwLkNoaWxkUGFuZWwsCiAgICAgICAgICAgIHBhcmVudEZyYW1lICAg
ICA9IHBhcmVudEZyYW1lLAogICAgICAgICAgICBwYWdlICAgICAgICAgICAgPSBwYWdlLAogICAg
ICAgICAgICBleHRyYSAgICAgICAgICAgPSBleHRyYSwKICAgICAgICAgICAgKipvcHRpb25zKQog
ICAgCiAgICBkZWYgX19maW5pc2hfXyhzZWxmKToKICAgICAgICBhcHAgICAgICAgICAgICAgPSBz
ZWxmLmFwcAogICAgICAgIHBhbmVsICAgICAgICAgICA9IHNlbGYucGFuZWwKICAgICAgICBhcHAu
Y2hpbGRBY3RpdmUgPSBwYW5lbAogICAgICAgIGFwcC5jaGlsZHJlbi5hcHBlbmQocGFuZWwpCiAg
ICAgICAgc2VsZi5hZGRQYWdlVG9QYXJlbnQocGFuZWwsYXBwLm1kaSkKICAgICAgICAjZmluaXNo
CiAgICAgICAgRnJhbWV3b3JrLl9fZmluaXNoX18oc2VsZikKICAgICAgICAKICAgIGRlZiBhZGRQ
YWdlVG9QYXJlbnQoc2VsZixwYW5lbCxtZGkpOgogICAgICAgICIiIiJBZGQgcGFnZSB3aXRoIGNo
aWxkcyB0aXRsZSB0byBwYXJlbnQKICAgICAgICBDYW4gYmUgb3ZlcndyaXR0ZW4uIiIiCiAgICAg
ICAgcGFyZW50RnJhbWUgICAgID0gc2VsZi5wYXJlbnRGcmFtZQogICAgICAgIHRhYnMgICAgICAg
ICAgICA9IHBhcmVudEZyYW1lLnRhYnMKICAgICAgICB0YWJzLkFkZFBhZ2UocGFnZT1EdW1teVBh
Z2UodGFicyksIHRleHQ9c2VsZi5wYWdlLHNlbGVjdD0obWRpIG5vdCBpbiBbU0RJLE1ESV9UQUJT
XSkpCgogICAgIy0tLWV2ZW50cwogICAgZGVmIG9uRnJhbWVBY3RpdmF0ZShzZWxmLCBldmVudD1O
b25lKToKICAgICAgICAiIiJBY3RpdmF0ZSBldmVudC4iIiIjdG9kbzogdXBkYXRlIHRhYnMgYWJv
dmUgaWYgbm90IHJpZ2h0CiAgICAgICAgaWYgKG5vdCBldmVudCkgb3IgZXZlbnQuR2V0QWN0aXZl
KCk6CiAgICAgICAgICAgIGlmIHNlbGYuYXBwLkRFQlVHOiAKICAgICAgICAgICAgICAgICdFdmVu
dDogIENoaWxkOiAlcy5BY3RpdmF0ZSclc2VsZi5fX2NsYXNzX18KICAgICAgICAgICAgc2VsZi5h
cHAuY2hpbGRBY3RpdmUgICAgPSBzZWxmLnBhbmVsCiAgICAgICAgRnJhbWV3b3JrLm9uRnJhbWVB
Y3RpdmF0ZShzZWxmLGV2ZW50KQogICAgICAgIAogICAgZGVmIG9uRnJhbWVDbG9zZShzZWxmLCBl
dmVudCA9IE5vbmUpOgogICAgICAgICIiIkNsb3NlIGV2ZW50LiIiIgogICAgICAgIGRlYnVnID0g
c2VsZi5hcHAuREVCVUcKICAgICAgICBpZiBkZWJ1ZzogCiAgICAgICAgICAgIHByaW50ICdFdmVu
dDw6IENoaWxkOiAlcy5DbG9zZSclc2VsZi5fX2NsYXNzX18KICAgICAgICBzZWxmLmRlYWQgPSBG
cmFtZXdvcmsub25GcmFtZUNsb3NlKHNlbGYsZGVzdHJveT0wKQogICAgICAgIGlmIG5vdCBzZWxm
LmRlYWQ6CiAgICAgICAgICAgIGlmIHNlbGYuYXBwLkRFQlVHOiAKICAgICAgICAgICAgICAgIHBy
aW50ICdFdmVudD46IENoaWxkOiAlcy5DbG9zZSByZXR1cm5zIEZhbHNlJyVzZWxmLl9fY2xhc3Nf
XwogICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAjZGVyZWdpc3RlciBldmVudHMKICAg
ICAgICBldmVudE1hbmFnZXIuRGVyZWdpc3RlcldpbmRvdyhzZWxmKQogICAgICAgIGlmIGV2ZW50
OiBldmVudC5Ta2lwKCkKICAgICAgICAjaW5kZXgKICAgICAgICBtZGkgICAgID0gc2VsZi5hcHAu
bWRpCiAgICAgICAgaW5kZXggICA9IHNlbGYuZ2V0SW5kZXgoKQogICAgICAgIGlmIG1kaSBpbiBb
U0RJLE1ESV9UQUJTXTogIGRlbHRhID0gMQogICAgICAgIGVsc2U6ICAgICAgICAgICAgICAgICAg
ICAgIGRlbHRhID0gMAogICAgICAgICNVcGRhdGUgY2hpbGRyZW4KICAgICAgICBjaGlsZHJlbiAg
ICA9IHNlbGYuYXBwLmNoaWxkcmVuCiAgICAgICAgY2hpbGRyZW4ucmVtb3ZlKHNlbGYucGFuZWwp
CiAgICAgICAgaWYgY2hpbGRyZW46CiAgICAgICAgICAgIGNoaWxkQWN0aXZlID0gc2VsZi5hcHAu
Y2hpbGRBY3RpdmUgPSBjaGlsZHJlblswXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGNoaWxk
QWN0aXZlID0gc2VsZi5hcHAuY2hpbGRBY3RpdmUgPSBOb25lCiAgICAgICAgI3VwZGF0ZSByZXN0
CiAgICAgICAgcGFyZW50RnJhbWUgPSBzZWxmLnBhcmVudEZyYW1lCiAgICAgICAgaWYgaGFzYXR0
cihwYXJlbnRGcmFtZSwndGFicycpOgogICAgICAgICAgICAjVXBkYXRlIGNoaWxkQm9vayB0YWJz
IAogICAgICAgICAgICBjdXJyZW50ID0gaW5kZXgrZGVsdGEKICAgICAgICAgICAgIyAqIHBhcmVu
dCBmcmFtZSAobWRpICYgc2RpKQogICAgICAgICAgICBwYXJlbnRGcmFtZS51bmJpbmRUYWJzKCkK
ICAgICAgICAgICAgcGFyZW50RnJhbWUudGFicy5EZWxldGVQYWdlKGN1cnJlbnQpCiAgICAgICAg
ICAgIGlmIChtZGkgaW4gW1NESSxNRElfU0FTSF9UQUJTLE1ESV9UQUJTXSBvciAobWRpPT1NRElf
U1BMSVQgYW5kIGNoaWxkcmVuKSkgYW5kIGNoaWxkQWN0aXZlOgogICAgICAgICAgICAgICAgdHJ5
OgogICAgICAgICAgICAgICAgICAgIHBhcmVudEZyYW1lLnRhYnMuU2V0U2VsZWN0aW9uKDApCiAg
ICAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAg
ICBwYXJlbnRGcmFtZS5iaW5kVGFicygpCiAgICAgICAgICAgICMgKiBjaGlsZHJlbiBmcmFtZXMg
KHNkaSkKICAgICAgICAgICAgaWYgbWRpIGluIFtTREksTURJX1RBQlNdIGFuZCBjaGlsZEFjdGl2
ZTogI25vdCBmb3IgbWRpY2hpbGQKICAgICAgICAgICAgICAgIGV2ZW50TWFuYWdlci5EZXJlZ2lz
dGVyV2luZG93KHNlbGYudGFicykKICAgICAgICAgICAgICAgIGMgICAgICAgPSAxCiAgICAgICAg
ICAgICAgICBmb3IgY2hpbGQgaW4gY2hpbGRyZW46CiAgICAgICAgICAgICAgICAgICAgY2hpbGQu
ZnJhbWUudW5iaW5kVGFicygpCiAgICAgICAgICAgICAgICAgICAgdGFicyAgID0gY2hpbGQuZnJh
bWUudGFicwogICAgICAgICAgICAgICAgICAgIHRhYnMuRGVsZXRlUGFnZShjdXJyZW50KSNyZW1v
dmUgY2xvc2VkIGl0ZW0gZnJvbSBvdGhlciBjaGlsZHJlbgogICAgICAgICAgICAgICAgICAgIGlm
IGM+PWN1cnJlbnQ6CiAgICAgICAgICAgICAgICAgICAgICAgIHRhYnMuU2V0U2VsZWN0aW9uKGMp
I2FkYXB0IHNlbGVjdGlvbgogICAgICAgICAgICAgICAgICAgIGNoaWxkLmZyYW1lLmJpbmRUYWJz
KCkKICAgICAgICAgICAgICAgICAgICBjICs9IDEKICAgICAgICBpZiBjaGlsZEFjdGl2ZToKICAg
ICAgICAgICAgY2hpbGRBY3RpdmUuZnJhbWUuQWN0aXZhdGUoKQogICAgICAgIGlmIG1kaSE9TURJ
X1NQTElUOgogICAgICAgICAgICBzZWxmLkRlc3Ryb3koKQogICAgICAgIGlmIGRlYnVnOiAKICAg
ICAgICAgICAgcHJpbnQgJ0V2ZW50PjogQ2hpbGQ6ICVzLkNsb3NlIHJldHVybnMgVHJ1ZSclc2Vs
Zi5fX2NsYXNzX18KICAgICAgICByZXR1cm4gVHJ1ZSAgICAKICAgICAgICAgICAgCiAgICBkZWYg
c2V0VGl0bGUoc2VsZixwYWdlPScnLGV4dHJhPScnLG5ldz1UcnVlLGRyYXc9VHJ1ZSxjb2xvdXI9
Tm9uZSk6CiAgICAgICAgaWYgbmV3OgogICAgICAgICAgICAjcGFyYW1ldGVycwogICAgICAgICAg
ICBpZiBwYWdlOiAgICBzZWxmLnBhZ2VUaXRsZSAgPSBwYWdlCiAgICAgICAgICAgIGlmIGV4dHJh
OiAgIHNlbGYuZXh0cmFUaXRsZSA9IGV4dHJhCiAgICAgICAgICAgICNnbwogICAgICAgICAgICBp
ZiBzZWxmLnBhZ2VUaXRsZToKICAgICAgICAgICAgICAgIG0gICAgICAgICAgICAgICA9IFsnJywn
IConXVtzZWxmLnBhbmVsLmNoYW5nZWQgYW5kIG5vdCBzZWxmLnBhZ2VJY29uc10KICAgICAgICAg
ICAgICAgIHNlbGYuX3BhZ2VUaXRsZSA9ICAnJXMlcyclKHNlbGYucGFnZVRpdGxlLG0pCiAgICAg
ICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBzZWxmLl9wYWdlVGl0bGUgPSAgJycKICAgICAg
ICBpZiBkcmF3OgogICAgICAgICAgICBpZiBzZWxmLmFwcC5tZGlOYW1lID09IFNESSBvciBXSU46
CiAgICAgICAgICAgICAgICBzZWxmLlNldFRpdGxlKHNlbGYuZXh0cmFUaXRsZSkKICAgICAgICAg
ICAgZWxpZiBoYXNhdHRyKHNlbGYsJ1NldFRpdGxlJyk6CiAgICAgICAgICAgICAgICBzZWxmLlNl
dFRpdGxlKHNlbGYucGFnZVRpdGxlKQogICAgICAgICAgICBzZWxmLnNldEljb24oKQogICAgICAg
ICAgICAKICAgIGRlZiBzZXRJY29uKHNlbGYpOgogICAgICAgIHBhc3MKICAgICAgICAKY2xhc3Mg
TWRpU2FzaFRhYnNDaGlsZEZyYW1lKENoaWxkLHd4Lk1ESUNoaWxkRnJhbWUpOgogICAgZGVmIF9f
aW5pdF9fKHNlbGYscGFyZW50RnJhbWUsCiAgICAgICAgaWQgICAgICAgICAgPSB3eC5JRF9BTlks
CiAgICAgICAgcGFnZSAgICAgICAgPSBVTk5BTUVELAogICAgICAgIGV4dHJhICAgICAgID0gJycs
CiAgICAgICAgc3R5bGUgICAgICAgPSBTVFlMRV9DSElMREZSQU1FLAogICAgICAgIG1heGltaXpl
ICAgID0gTm9uZSwKICAgICAgICAqKm9wdGlvbnMpOgogICAgICAgIHNlbGYubm9NZW51ID0gVHJ1
ZQogICAgICAgIGFwcCAgICAgICAgICAgICA9IHBhcmVudEZyYW1lLmFwcAogICAgICAgICNkZWJ1
ZyBtZXNzYWdlCiAgICAgICAgaWYgYXBwLkRFQlVHOgogICAgICAgICAgICBwcmludCAnQ3JlYXRl
OiBNZGk6ICVzJyVzZWxmLl9fY2xhc3NfXwogICAgICAgIGlmIG1heGltaXplID09IE5vbmU6CiAg
ICAgICAgICAgIG1heGltaXplID0gcGFyZW50RnJhbWUubWF4aW1pemUoKQogICAgICAgIGlmIG1h
eGltaXplOgogICAgICAgICAgICBzdHlsZSAgIHw9IHd4Lk1BWElNSVpFCiAgICAgICAgd3guTURJ
Q2hpbGRGcmFtZS5fX2luaXRfXyhzZWxmLAogICAgICAgICAgICBpZCAgICAgID0gaWQsIAogICAg
ICAgICAgICBuYW1lICAgID0gcGFnZSwKICAgICAgICAgICAgcGFyZW50ICA9IHBhcmVudEZyYW1l
LAogICAgICAgICAgICBzdHlsZSAgID0gc3R5bGUgfCBGVUxMX1JFUEFJTlRfT05fUkVTSVpFLCAK
ICAgICAgICAgICAgdGl0bGUgICA9IHBhZ2UpCiAgICAgICAgc2VsZi5NYXhpbWl6ZSgpI2lmIG1h
eGltaXplIGFuZCBQTEFURk9STSAhPSAnd2luMzInOiNzbTpzZWVtcyBiZXR0ZXIgdG8gbGVhdmUg
dGhpcyBhd2F5LgogICAgICAgIHNlbGYuUmFpc2UgID0gc2VsZi5BY3RpdmF0ZSAjcmFpc2UgZG9l
c24ndCB3b3JrIGhlcmUKICAgICAgICAjVGhpcyBhbHdheXMgaGFzIHRvIGJlIGxhc3QhCiAgICAg
ICAgQ2hpbGQuX19pbml0X18oc2VsZiwKICAgICAgICAgICAgcGFyZW50RnJhbWUgPSBwYXJlbnRG
cmFtZSwKICAgICAgICAgICAgcGFnZSAgICAgICAgPSBwYWdlLAogICAgICAgICAgICBleHRyYSAg
ICAgICA9IGV4dHJhLAogICAgICAgICAgICAqKm9wdGlvbnMpCiAgICAgICAgCiAgICBkZWYgX19m
aW5pc2hfXyhzZWxmKToKICAgICAgICBzZWxmLnRhYnMgICAgICAgPSBzZWxmLnBhcmVudEZyYW1l
LnRhYnMKICAgICAgICBDaGlsZC5fX2ZpbmlzaF9fKHNlbGYpCiAgICAgICAgICAgICAgICAKICAg
IGRlZiBzZXRUaXRsZShzZWxmLHBhZ2U9JycsZXh0cmE9JycsbmV3PVRydWUsZHJhdz1UcnVlLGNv
bG91cj1Ob25lKToKICAgICAgICBDaGlsZC5zZXRUaXRsZShzZWxmLHBhZ2UsZXh0cmEsbmV3LGRy
YXcpCiAgICAgICAgc2VsZi5wYXJlbnRGcmFtZS5zZXRUaXRsZShzZWxmLl9wYWdlVGl0bGUsZHJh
dz1kcmF3KQogICAgICAgIGlmIG5ldyBhbmQgZHJhdzoKICAgICAgICAgICAgaW5kZXggPSBzZWxm
LmdldEluZGV4KCkKICAgICAgICAgICAgc2VsZi50YWJzLlNldFBhZ2VUZXh0KGluZGV4LHNlbGYu
X3BhZ2VUaXRsZSkKICAgICAgICAgICAgaWYgbm90KGNvbG91ciBpcyBOb25lKSBhbmQgaGFzYXR0
cihzZWxmLnRhYnMsJ1NldFBhZ2VDb2xvdXInKToKICAgICAgICAgICAgICAgIHNlbGYudGFicy5T
ZXRQYWdlQ29sb3VyKGluZGV4LGNvbG91cikKICAgICAgICAKICAgIGRlZiBvbkZyYW1lQWN0aXZh
dGUoc2VsZiwgZXZlbnQpOgogICAgICAgIGlmIGV2ZW50LkdldEFjdGl2ZSgpOgogICAgICAgICAg
ICBzZWxmLnNldFRpdGxlKG5ldz1GYWxzZSkKICAgICAgICAgICAgc2VsZi5wYXJlbnRGcmFtZS50
YWJzLlNldFNlbGVjdGlvbihzZWxmLmdldEluZGV4KCkpCiAgICAgICAgQ2hpbGQub25GcmFtZUFj
dGl2YXRlKHNlbGYsZXZlbnQpCiAgICAgICAgCmNsYXNzIE1kaUNoaWxkRnJhbWUoTWRpU2FzaFRh
YnNDaGlsZEZyYW1lLCBDaGlsZCk6CiAgICAiIiJNZGkgQ2hpbGQgZnJhbWUgd2l0aG91dCB0YWJz
LiIiIgogICAgZGVmIGFkZFBhZ2VUb1BhcmVudChzZWxmLHBhbmVsLG1kaSk6CiAgICAgICAgcGFz
cwoKICAgIGRlZiBzZXRUaXRsZShzZWxmLHBhZ2U9JycsZXh0cmE9JycsbmV3PVRydWUsZHJhdz1U
cnVlLGNvbG91cj1Ob25lKToKICAgICAgICBDaGlsZC5zZXRUaXRsZShzZWxmLHBhZ2UsZXh0cmEs
bmV3LGRyYXcpCiAgICAgICAgc2VsZi5wYXJlbnRGcmFtZS5zZXRUaXRsZShzZWxmLl9wYWdlVGl0
bGUsZHJhdz1kcmF3KQogICAgICAgIAogICAgZGVmIF9fZmluaXNoX18oc2VsZik6CiAgICAgICAg
Q2hpbGQuX19maW5pc2hfXyhzZWxmKQogICAgICAgIAogICAgZGVmIG9uRnJhbWVBY3RpdmF0ZShz
ZWxmLCBldmVudCk6CiAgICAgICAgaWYgZXZlbnQuR2V0QWN0aXZlKCk6CiAgICAgICAgICAgIHNl
bGYuc2V0VGl0bGUobmV3PUZhbHNlKQogICAgICAgIENoaWxkLm9uRnJhbWVBY3RpdmF0ZShzZWxm
LGV2ZW50KQogICAgICAgIApjbGFzcyBNZGlUYWJzQ2hpbGRGcmFtZShUYWJQbGF0Zm9ybSxNZGlT
YXNoVGFic0NoaWxkRnJhbWUsIENoaWxkKToKICAgIGRlZiBfX3N0YWdlX18oc2VsZixwYWdlLGV4
dHJhLCoqb3B0aW9ucyk6CiAgICAgICAgIiIiQ3JlYXRlIHRhYnMgdG8gc3dpdGNoIGJldHdlZW4g
ZG9jdW1lbnRzIGFzIGFuIHd4LlNhc2hMYXlvdXRXaW5kb3ciIiIKICAgICAgICBpZiBzZWxmLmFw
cC5ERUJVRzoKICAgICAgICAgICAgcHJpbnQgJ0NyZWF0ZTogU2RpOiAgICVzLnRhYnMnJShzZWxm
Ll9fY2xhc3NfXywpCiAgICAgICAgdGFicyA9IHNlbGYudGFicyAgID0gTm90ZWJvb2tQbHVzKGFw
cD1zZWxmLmFwcCxwYXJlbnQ9c2VsZiwgaWQ9d3guSURfQU5ZLAogICAgICAgICAgICBzdHlsZSA9
IFNUWUxFX05PVEVCT09LICkKICAgICAgICBwYW5lbCA9IHNlbGYucGFuZWwgPSBzZWxmLlBhbmVs
KHBhcmVudD10YWJzLCoqb3B0aW9ucykKICAgICAgICAjQWRkIHBhcmVudCB0YWIgdG8gaXRzZWxm
CiAgICAgICAgdGFicy5BZGRQYWdlKHBhZ2U9RHVtbXlQYWdlKHRhYnMpLHRleHQ9c2VsZi5hcHAu
dGl0bGUpCiAgICAgICAgI0FkZCBjaGlsZCB0YWJzIHRvIGl0c2VsZiBhbmQgdmljZSB2ZXJzYQog
ICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLmFwcC5jaGlsZHJlbjoKICAgICAgICAgICAgY2hpbGRU
YWJzICAgPSBjaGlsZC5mcmFtZS50YWJzCiAgICAgICAgICAgIHRhYnMuQWRkUGFnZShwYWdlPUR1
bW15UGFnZSh0YWJzKSx0ZXh0PWNoaWxkLmZyYW1lLl9wYWdlVGl0bGUpCiAgICAgICAgICAgIGNo
aWxkVGFicy5BZGRQYWdlKHBhZ2U9RHVtbXlQYWdlKGNoaWxkVGFicyksdGV4dD1wYWdlKQogICAg
ICAgICNBZGQgaXRzZWxmIHRvIGl0c2VsZgogICAgICAgIHRhYnMuQWRkUGFnZShwYWdlPXBhbmVs
LHRleHQ9cGFnZSxzZWxlY3Q9VHJ1ZSkKICAgICAgICBzZWxmLl9fbGF5b3V0VGFic19fKCkgICAg
ICAgIAogICAgICAgIAogICAgZGVmIF9fZmluaXNoX18oc2VsZik6CiAgICAgICAgQ2hpbGQuX19m
aW5pc2hfXyhzZWxmKQogICAgICAgIAogICAgZGVmIHNldFRpdGxlKHNlbGYscGFnZT0nJyxleHRy
YT0nJyxuZXc9VHJ1ZSxkcmF3PVRydWUsY29sb3VyPU5vbmUpOgogICAgICAgIENoaWxkLnNldFRp
dGxlKHNlbGYscGFnZSxleHRyYSxuZXcpCiAgICAgICAgaWYgbmV3IGFuZCBkcmF3OgogICAgICAg
ICAgICBpbmRleCAgID0gc2VsZi5nZXRJbmRleCgpKzEKICAgICAgICAgICAgc2VsZi50YWJzLlNl
dFBhZ2VUZXh0KGluZGV4LHNlbGYuX3BhZ2VUaXRsZSkKICAgICAgICAgICAgaWYgbm90KGNvbG91
ciBpcyBOb25lKSBhbmQgaGFzYXR0cihzZWxmLnRhYnMsJ1NldFBhZ2VDb2xvdXInKToKICAgICAg
ICAgICAgICAgIHNlbGYudGFicy5TZXRQYWdlQ29sb3VyKGluZGV4LGNvbG91cikKICAgICAgICAK
ICAgIGRlZiBvbkZyYW1lQWN0aXZhdGUoc2VsZiwgZXZlbnQpOgogICAgICAgIGlmIGV2ZW50Lkdl
dEFjdGl2ZSgpOgogICAgICAgICAgICBzZWxmLnNldFRpdGxlKG5ldz1GYWxzZSkKICAgICAgICAg
ICAgc2VsZi5wYXJlbnRGcmFtZS50YWJzLlNldFNlbGVjdGlvbihzZWxmLmdldEluZGV4KCkrMSkK
ICAgICAgICBDaGlsZC5vbkZyYW1lQWN0aXZhdGUoc2VsZixldmVudCkKICAgICAgICAKY2xhc3Mg
TWRpU3BsaXRDaGlsZEZyYW1lKENoaWxkLHd4LlBhbmVsKToKICAgIGRlZiBfX2luaXRfXyhzZWxm
LHBhcmVudEZyYW1lLAogICAgICAgIGlkICAgICAgICAgID0gd3guSURfQU5ZLAogICAgICAgIHN0
eWxlICAgICAgID0gU1RZTEVfQ0hJTERGUkFNRSwKICAgICAgICBwYWdlICAgICAgICA9ICcnLAog
ICAgICAgIGV4dHJhICAgICAgID0gJycsCiAgICAgICAgbWF4aW1pemUgICAgPSBOb25lLAogICAg
ICAgICoqb3B0aW9ucyk6CiAgICAgICAgc2VsZi5ub01lbnUgPSBUcnVlCiAgICAgICAgYXBwICAg
ICAgICAgPSBwYXJlbnRGcmFtZS5hcHAKICAgICAgICAjZGVidWcgbWVzc2FnZQogICAgICAgIGlm
IGFwcC5ERUJVRzoKICAgICAgICAgICAgcHJpbnQgJ0NyZWF0ZTogTWRpU3BsaXQ6ICVzJyVzZWxm
Ll9fY2xhc3NfXyxwYWdlLGV4dHJhCiAgICAgICAgd3guUGFuZWwuX19pbml0X18oc2VsZiwKICAg
ICAgICAgICAgaWQgICAgICA9IGlkLCAKICAgICAgICAgICAgbmFtZSAgICA9IHBhZ2UsCiAgICAg
ICAgICAgIHBhcmVudCAgPSBwYXJlbnRGcmFtZS50YWJzLCAKICAgICAgICAgICAgc2l6ZSAgICA9
IHd4LlNpemUoNjAwLDQwMCksCiAgICAgICAgICAgIHN0eWxlICAgPSBzdHlsZSB8IEZVTExfUkVQ
QUlOVF9PTl9SRVNJWkUsKSAKICAgICAgICAgICAgI3RpdGxlICAgPSBwYWdlKQogICAgICAgICNU
aGlzIGFsd2F5cyBoYXMgdG8gYmUgbGFzdCEKICAgICAgICBDaGlsZC5fX2luaXRfXyhzZWxmLAog
ICAgICAgICAgICBwYXJlbnRGcmFtZSA9IHBhcmVudEZyYW1lLAogICAgICAgICAgICBwYWdlICAg
ICAgICA9IHBhZ2UsCiAgICAgICAgICAgIGV4dHJhICAgICAgID0gZXh0cmEsCiAgICAgICAgICAg
ICoqb3B0aW9ucykKICAgICAgICBldmVudE1hbmFnZXIuUmVnaXN0ZXIoc2VsZi5vbkZyYW1lQWN0
aXZhdGUsIHd4LkVWVF9TRVRfRk9DVVMsICAgIHNlbGYpCiAgICAgICAgCiAgICBkZWYgX19zdGFn
ZV9fKHNlbGYscGFnZSxleHRyYSwqKm9wdGlvbnMpOgogICAgICAgICIiIkNyZWF0ZSB0YWJzIHRv
IHN3aXRjaCBiZXR3ZWVuIGRvY3VtZW50cyBhcyBhbiB3eC5TYXNoTGF5b3V0V2luZG93IiIiCiAg
ICAgICAgaWYgc2VsZi5hcHAuREVCVUc6CiAgICAgICAgICAgIHByaW50ICdDcmVhdGU6IFNkaTog
ICAlcy50YWJzJyUoc2VsZi5fX2NsYXNzX18sKQogICAgICAgIHNlbGYucGFuZWwgPSBzZWxmLlBh
bmVsKHBhcmVudD1zZWxmLG5hbWU9cGFnZSwqKm9wdGlvbnMpCiAgICAgICAgc2l6ZXIgPSB3eC5C
b3hTaXplcih3eC5WRVJUSUNBTCkKICAgICAgICBzaXplci5BZGQoc2VsZi5wYW5lbCwgMSwgd3gu
RVhQQU5ELCAwKQogICAgICAgIHNlbGYuU2V0QXV0b0xheW91dChUcnVlKQogICAgICAgIHNlbGYu
U2V0U2l6ZXIoc2l6ZXIpCiAgICAgICAgc2VsZi5MYXlvdXQoKQogICAgICAgIAogICAgZGVmIGFk
ZFBhZ2VUb1BhcmVudChzZWxmLHBhbmVsLG1kaSk6CiAgICAgICAgIiIiIkFkZCBwYWdlIHdpdGgg
Y2hpbGRzIHRpdGxlIHRvIHBhcmVudAogICAgICAgIENhbiBiZSBvdmVyd3JpdHRlbi4iIiIKICAg
ICAgICBwYXJlbnRGcmFtZSAgICAgPSBzZWxmLnBhcmVudEZyYW1lCiAgICAgICAgdGFicyAgICAg
ICAgICAgID0gc2VsZi50YWJzID0gcGFyZW50RnJhbWUudGFicwogICAgICAgIHBhcmVudEZyYW1l
LnVuYmluZFRhYnMoKQogICAgICAgIHRhYnMuQWRkUGFnZShwYWdlPXNlbGYsIHRleHQ9c2VsZi5w
YWdlLHNlbGVjdD0obWRpIG5vdCBpbiBbU0RJLE1ESV9UQUJTXSkpCiAgICAgICAgcGFyZW50RnJh
bWUuYmluZFRhYnMoKSAgICAgICAKCiAgICBkZWYgc2V0VGl0bGUoc2VsZixwYWdlPScnLGV4dHJh
PScnLG5ldz1UcnVlLGRyYXc9VHJ1ZSxjb2xvdXI9Tm9uZSk6CiAgICAgICAgQ2hpbGQuc2V0VGl0
bGUoc2VsZixwYWdlLGV4dHJhLG5ldykKICAgICAgICBpZiBuZXcgYW5kIGRyYXc6CiAgICAgICAg
ICAgIGluZGV4ICAgPSBzZWxmLmdldEluZGV4KCkKICAgICAgICAgICAgc2VsZi50YWJzLlNldFBh
Z2VUZXh0KGluZGV4LHNlbGYuX3BhZ2VUaXRsZSkKICAgICAgICAgICAgaWYgbm90KGNvbG91ciBp
cyBOb25lKSBhbmQgaGFzYXR0cihzZWxmLnRhYnMsJ1NldFBhZ2VDb2xvdXInKToKICAgICAgICAg
ICAgICAgIHNlbGYudGFicy5TZXRQYWdlQ29sb3VyKGluZGV4LGNvbG91cikKICAgICAgICAgICAg
CiAgICBkZWYgU2V0SWNvbihzZWxmLCphcmdzLCoqa2V5dyk6CiAgICAgICAgcGFzcwogICAgCiAg
ICBkZWYgSXNNYXhpbWl6ZWQoc2VsZik6CiAgICAgICAgcmV0dXJuIFRydWUKCiAgICBkZWYgQWN0
aXZhdGUoc2VsZik6CiAgICAgICAgc2VsZi5wYXJlbnRGcmFtZS50YWJzLlNldFNlbGVjdGlvbihz
ZWxmLmdldEluZGV4KCkpCgojIyAgICBkZWYgb25GcmFtZUFjdGl2YXRlKHNlbGYsIGV2ZW50PU5v
bmUpOgojIyAgICAgICAgaWYgKG5vdCBldmVudCkgb3IgZXZlbnQuR2V0QWN0aXZlKCk6CiMjICAg
ICAgICAgICAgc2VsZi5zZXRUaXRsZShuZXc9RmFsc2UpCiMjICAgICAgICBDaGlsZC5vbkZyYW1l
QWN0aXZhdGUoc2VsZixldmVudCkKICAgICAgICAKY2xhc3MgU2RpQ2hpbGRGcmFtZShUYWJQbGF0
Zm9ybSxDaGlsZCx3eC5GcmFtZSk6CiAgICBkZWYgX19pbml0X18oc2VsZixwYXJlbnRGcmFtZSwK
ICAgICAgICBpZCAgICAgICAgICA9IHd4LklEX0FOWSwKICAgICAgICBzdHlsZSAgICAgICA9IFNU
WUxFX0NISUxERlJBTUUsCiAgICAgICAgcGFnZSAgICAgICAgPSAnJywKICAgICAgICBleHRyYSAg
ICAgICA9ICcnLAogICAgICAgIG1heGltaXplICAgID0gTm9uZSwKICAgICAgICAqKm9wdGlvbnMp
OgogICAgICAgIHNlbGYubm9NZW51ID0gRmFsc2UKICAgICAgICBhcHAgICAgICAgICAgICAgPSBw
YXJlbnRGcmFtZS5hcHAKICAgICAgICAjZGVidWcgbWVzc2FnZQogICAgICAgIGlmIGFwcC5ERUJV
RzoKICAgICAgICAgICAgcHJpbnQgJ0NyZWF0ZTogU2RpOiAlcyclc2VsZi5fX2NsYXNzX18scGFn
ZSxleHRyYQogICAgICAgICNtYXhpbWl6ZSZpbml0CiAgICAgICAgaWYgbWF4aW1pemUgPT0gTm9u
ZToKICAgICAgICAgICAgbWF4aW1pemUgPSBwYXJlbnRGcmFtZS5tYXhpbWl6ZSgpCiAgICAgICAg
aWYgbWF4aW1pemU6CiAgICAgICAgICAgIHN0eWxlICAgfD0gd3guTUFYSU1JWkUKICAgICAgICB3
eC5GcmFtZS5fX2luaXRfXyhzZWxmLAogICAgICAgICAgICBpZCAgICAgID0gaWQsIAogICAgICAg
ICAgICBuYW1lICAgID0gcGFnZSwKICAgICAgICAgICAgcGFyZW50ICA9IHBhcmVudEZyYW1lLCAK
ICAgICAgICAgICAgc2l6ZSAgICA9IHd4LlNpemUoNjAwLDQwMCksCiAgICAgICAgICAgIHN0eWxl
ICAgPSBzdHlsZSB8IEZVTExfUkVQQUlOVF9PTl9SRVNJWkUsIAogICAgICAgICAgICB0aXRsZSAg
ID0gcGFnZSkKICAgICAgICBpZiBtYXhpbWl6ZToKICAgICAgICAgICAgaWYgUExBVEZPUk0gIT0g
J3dpbjMyJzoKICAgICAgICAgICAgICAgIHNlbGYuTWF4aW1pemUoKQogICAgICAgICAgICBlbHNl
OgogICAgICAgICAgICAgICAgc2VsZi5TZXRTaXplKGFwcC5zaXplKQogICAgICAgICNUaGlzIGFs
d2F5cyBoYXMgdG8gYmUgbGFzdCEKICAgICAgICBDaGlsZC5fX2luaXRfXyhzZWxmLAogICAgICAg
ICAgICBwYXJlbnRGcmFtZSA9IHBhcmVudEZyYW1lLAogICAgICAgICAgICBwYWdlICAgICAgICA9
IHBhZ2UsCiAgICAgICAgICAgIGV4dHJhICAgICAgID0gZXh0cmEsCiAgICAgICAgICAgICoqb3B0
aW9ucykKICAgICAgICAKICAgIGRlZiBfX3N0YWdlX18oc2VsZixwYWdlLGV4dHJhLCoqb3B0aW9u
cyk6CiAgICAgICAgIiIiQ3JlYXRlIHRhYnMgdG8gc3dpdGNoIGJldHdlZW4gZG9jdW1lbnRzIGFz
IGFuIHd4LlNhc2hMYXlvdXRXaW5kb3ciIiIKICAgICAgICBpZiBzZWxmLmFwcC5ERUJVRzoKICAg
ICAgICAgICAgcHJpbnQgJ0NyZWF0ZTogU2RpOiAgICVzLnRhYnMnJShzZWxmLl9fY2xhc3NfXywp
CiAgICAgICAgdGFicyA9IHNlbGYudGFicyAgID0gTm90ZWJvb2tQbHVzKGFwcD1zZWxmLmFwcCxw
YXJlbnQ9c2VsZiwgaWQ9d3guSURfQU5ZLAogICAgICAgICAgICBzdHlsZSA9IFNUWUxFX05PVEVC
T09LICkKICAgICAgICBwYW5lbCA9IHNlbGYucGFuZWwgPSBzZWxmLlBhbmVsKHBhcmVudD10YWJz
LCoqb3B0aW9ucykKICAgICAgICAjQWRkIHBhcmVudCB0YWIgdG8gaXRzZWxmCiAgICAgICAgdGFi
cy5BZGRQYWdlKHBhZ2U9RHVtbXlQYWdlKHRhYnMpLHRleHQ9c2VsZi5hcHAudGl0bGUpCiAgICAg
ICAgI0FkZCBjaGlsZCB0YWJzIHRvIGl0c2VsZiBhbmQgdmljZSB2ZXJzYQogICAgICAgIGZvciBj
aGlsZCBpbiBzZWxmLmFwcC5jaGlsZHJlbjoKICAgICAgICAgICAgY2hpbGRUYWJzICAgPSBjaGls
ZC5mcmFtZS50YWJzCiAgICAgICAgICAgIHRhYnMuQWRkUGFnZShwYWdlPUR1bW15UGFnZSh0YWJz
KSx0ZXh0PWNoaWxkLmZyYW1lLl9wYWdlVGl0bGUpCiAgICAgICAgICAgIGNoaWxkVGFicy5BZGRQ
YWdlKHBhZ2U9RHVtbXlQYWdlKGNoaWxkVGFicyksdGV4dD1wYWdlKQogICAgICAgICNBZGQgaXRz
ZWxmIHRvIGl0c2VsZgogICAgICAgIHRhYnMuQWRkUGFnZShwYWdlPXBhbmVsLHRleHQ9cGFnZSxz
ZWxlY3Q9VHJ1ZSkKICAgICAgICBzZWxmLl9fbGF5b3V0VGFic19fKCkgICAgICAgIAogICAgICAg
IAogICAgZGVmIHNldFRpdGxlKHNlbGYscGFnZT0nJyxleHRyYT0nJyxuZXc9VHJ1ZSxkcmF3PVRy
dWUsY29sb3VyPU5vbmUpOgogICAgICAgIENoaWxkLnNldFRpdGxlKHNlbGYscGFnZSxleHRyYSxu
ZXcpCiAgICAgICAgaWYgbmV3IGFuZCBkcmF3OgogICAgICAgICAgICBzZWxmLnRhYnMuU2V0UGFn
ZVRleHQoc2VsZi5nZXRJbmRleCgpKzEsc2VsZi5fcGFnZVRpdGxlKQogICAgICAgIAojIyMjQXBw
bGljYXRpb24KCmNsYXNzIEFwcChzaW5nbGVBcHAuU2luZ2xlSW5zdGFuY2VBcHApOgogICAgZGVm
IF9faW5pdF9fKHNlbGYsIFBhcmVudFBhbmVsLCBDaGlsZFBhbmVsLCBNZW51QmFyLCBUb29sQmFy
LCBTdGF0dXNCYXIsCiAgICAgICAgICAgIFBhbGV0dGU9Tm9uZSwgbWRpPURFRkFVTFQsIGRlYnVn
PTAsIHRpdGxlPSduYW1lJywKICAgICAgICAgICAgcGFuZWxGcmFtZVRpdGxlPSdwYW5lbCcsc2l6
ZT13eC5TaXplKDgwMCw0MDApLAogICAgICAgICAgICBpbWFnZVBhdGggPSBOb25lLCBwb3M9d3gu
UG9pbnQod3guSURfQU5ZLHd4LklEX0FOWSksCiAgICAgICAgICAgIHNpbmdsZUluc3RhbmNlID0g
RmFsc2UsCiAgICAgICAgICAgIHN0eWxlPVNUWUxFX1BBUkVOVEZSQU1FLCoqYXR0cmlidXRlcyk6
CiAgICAgICAgI3Bhc3NpbmcgYXJndW1lbnRzCiAgICAgICAgZ2xvYmFsIENISUxEUEFORUwKICAg
ICAgICBzZWxmLlBhcmVudFBhbmVsICAgID0gUGFyZW50UGFuZWwKICAgICAgICBzZWxmLkNoaWxk
UGFuZWwgICAgID0gQ0hJTERQQU5FTCA9IENoaWxkUGFuZWwKICAgICAgICBzZWxmLk1lbnVCYXIg
ICAgICAgID0gTWVudUJhcgogICAgICAgIHNlbGYuVG9vbEJhciAgICAgICAgPSBUb29sQmFyCiAg
ICAgICAgc2VsZi5TdGF0dXNCYXIgICAgICA9IFN0YXR1c0JhcgogICAgICAgIHNlbGYuUGFsZXR0
ZSAgICAgICAgPSBQYWxldHRlCiAgICAgICAgc2VsZi5TZXRNZGkobWRpKQogICAgICAgIHNlbGYu
REVCVUcgICAgICAgICAgPSBkZWJ1ZwogICAgICAgIHNlbGYudGl0bGUgICAgICAgICAgPSB0aXRs
ZQogICAgICAgIHNlbGYucGFuZWxGcmFtZVRpdGxlPSBwYW5lbEZyYW1lVGl0bGUKICAgICAgICBz
ZWxmLnNpemUgICAgICAgICAgID0gc2l6ZQogICAgICAgIHNlbGYuaW1hZ2VQYXRoICAgICAgPSBp
bWFnZVBhdGgKICAgICAgICBzZWxmLnBvcyAgICAgICAgICAgID0gcG9zCiAgICAgICAgc2VsZi5z
aW5nbGVJbnN0YW5jZSA9IHNpbmdsZUluc3RhbmNlCiAgICAgICAgc2VsZi5hY3RpdmUgICAgICAg
ICA9IFRydWUKICAgICAgICBzZWxmLnN0eWxlICAgICAgICAgID0gc3R5bGUKICAgICAgICAjaW5p
dGlhbGl6YXRpb24KICAgICAgICBzZWxmLmNoaWxkcmVuICAgICAgID0gW10KICAgICAgICBzZWxm
LmNoaWxkQWN0aXZlICAgID0gTm9uZQogICAgICAgIGlmIHNlbGYuaW1hZ2VQYXRoOgogICAgICAg
ICAgICBzZWxmLmJpdG1hcCAgICAgPSB3eC5CaXRtYXAgPSBCaXRtYXAoaW1hZ2VQYXRoLHNlbGYp
CiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5iaXRtYXAgICAgID0gd3guQml0bWFwCiAg
ICAgICAgI29wdGlvbnMKICAgICAgICBzZWxmLmF0dHJpYnV0ZXMgICAgID0gYXR0cmlidXRlcwog
ICAgICAgIGZvciBrZXkgaW4gYXR0cmlidXRlczoKICAgICAgICAgICAgaWYgaGFzYXR0cihzZWxm
LGtleSk6CiAgICAgICAgICAgICAgICBwcmludCAiV2FybmluZzogQXBwbGljYXRpb24gY2FuJ3Qg
YWNjZXB0IGF0dHJpYnV0ZSAnJXMnLiIla2V5CiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAg
ICAgICBzZXRhdHRyKHNlbGYsa2V5LGF0dHJpYnV0ZXNba2V5XSkKICAgICAgICAjc3RhcnQKICAg
ICAgICBpZiBzaW5nbGVJbnN0YW5jZToKICAgICAgICAgICAgcHJpbnQgIkxhdW5jaGluZyBzaW5n
bGUgaW5zdGFuY2UgYXBwbGljYXRpb24gKHdpdGggeG1sLXJwYyBzZXJ2ZXIpIC4uLiIKICAgICAg
ICAgICAgc2luZ2xlQXBwLlNpbmdsZUluc3RhbmNlQXBwLl9faW5pdF9fKHNlbGYscmVkaXJlY3Q9
bm90IGRlYnVnLG5hbWU9dGl0bGUpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcHJpbnQgIkxh
dW5jaGluZyBhcHBsaWNhdGlvbi4uLiIKICAgICAgICAgICAgd3guQXBwLl9faW5pdF9fKHNlbGYs
cmVkaXJlY3Q9bm90IGRlYnVnKQoKICAgICAgICAKICAgIGRlZiBPbkFyZ3Moc2VsZiwgZXZ0KToK
ICAgICAgICBpZiBoYXNhdHRyKHNlbGYucGFyZW50UGFuZWwsJ29uQXJncycpOgogICAgICAgICAg
ICBzZWxmLnBhcmVudFBhbmVsLm9uQXJncyhldnQuZGF0YSkKICAgICAgICBzZWxmLkdldFRvcFdp
bmRvdygpLlJhaXNlKCkKICAgICAgICBzZWxmLkdldFRvcFdpbmRvdygpLkljb25pemUoRmFsc2Up
CgogICAgZGVmIE9uSW5pdChzZWxmKToKICAgICAgICBpZiBzZWxmLnNpbmdsZUluc3RhbmNlOgog
ICAgICAgICAgICBpZiBzZWxmLmFjdGl2ZToKICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQog
ICAgICAgICAgICBzZWxmLkJpbmQoc2luZ2xlQXBwLkVWVF9QT1NUX0FSR1MsIHNlbGYuT25Bcmdz
KQogICAgICAgIHd4LkluaXRBbGxJbWFnZUhhbmRsZXJzKCkKICAgICAgICBzZWxmLnBhcmVudEZy
YW1lID0gc2VsZi5QYXJlbnRGcmFtZShzZWxmLAogICAgICAgICAgICBzaXplICAgID0gc2VsZi5z
aXplLAogICAgICAgICAgICBwYWdlICAgID0gc2VsZi50aXRsZSwKICAgICAgICAgICAgcG9zICAg
ICA9IHNlbGYucG9zLAogICAgICAgICAgICBzdHlsZSAgID0gc2VsZi5zdHlsZSwKICAgICAgICAg
ICAgKipzZWxmLmF0dHJpYnV0ZXMpCiAgICAgICAgc2VsZi5wYXJlbnRQYW5lbCA9IHNlbGYucGFy
ZW50RnJhbWUucGFuZWwKICAgICAgICBzZWxmLnBhcmVudEZyYW1lLlNob3coVHJ1ZSkKICAgICAg
ICBzZWxmLlNldFRvcFdpbmRvdyhzZWxmLnBhcmVudEZyYW1lKQogICAgICAgIHJldHVybiBUcnVl
CiAgICAgICAgCiAgICBkZWYgU2V0TWRpKHNlbGYsbWRpTmFtZT1ERUZBVUxUKToKICAgICAgICAi
IiJEZWZpbmVzIHBhcmVudCBhbmQgY2hpbGRyZW4gZnJhbWUgY2xhc3Nlcy4iIiIKICAgICAgICBz
ZWxmLm1kaU5hbWUgICAgPSBtZGlOYW1lCiAgICAgICAgaWYgbm90IERJLmhhc19rZXkobWRpTmFt
ZSk6CiAgICAgICAgICAgIG1kaU5hbWUgICAgID0gREVGQVVMVAogICAgICAgIGlmIG1kaU5hbWUg
PT0gREVGQVVMVDoKICAgICAgICAgICAgaWYgICBXSU46CiAgICAgICAgICAgICAgICBtZGlOYW1l
ID0gTURJX1NBU0hfVEFCU19XSU4KICAgICAgICAgICAgZWxpZiBEQVJXSU46I21hYyBvc3gKICAg
ICAgICAgICAgICAgIG1kaU5hbWUgPSBNRElfU1BMSVRfQUxMIAogICAgICAgICAgICBlbHNlOgog
ICAgICAgICAgICAgICAgbWRpTmFtZSA9IE1ESV9TUExJVF9BTEwjTURJX1NBU0hfVEFCU19MSU5V
WAoKICAgICAgICBzZWxmLm1kaSAgICA9IERJW21kaU5hbWVdCiAgICAgICAgaWYgICAgICBzZWxm
Lm1kaSA9PSBTREk6CiAgICAgICAgICAgIHNlbGYuUGFyZW50RnJhbWUgICAgICAgID0gU2RpUGFy
ZW50RnJhbWUKICAgICAgICAgICAgc2VsZi5DaGlsZEZyYW1lICAgICAgICAgPSBTZGlDaGlsZEZy
YW1lCiAgICAgICAgZWxpZiAgICBzZWxmLm1kaSA9PSBNRElfU0FTSDoKICAgICAgICAgICAgc2Vs
Zi5QYXJlbnRGcmFtZSAgICAgICAgPSBNZGlTYXNoUGFyZW50RnJhbWUKICAgICAgICAgICAgc2Vs
Zi5DaGlsZEZyYW1lICAgICAgICAgPSBNZGlDaGlsZEZyYW1lCiAgICAgICAgZWxpZiAgICBzZWxm
Lm1kaSA9PSBNRElfU0FTSF9UQUJTOgogICAgICAgICAgICBzZWxmLlBhcmVudEZyYW1lICAgICAg
ICA9IE1kaVNhc2hUYWJzUGFyZW50RnJhbWUKICAgICAgICAgICAgc2VsZi5DaGlsZEZyYW1lICAg
ICAgICAgPSBNZGlTYXNoVGFic0NoaWxkRnJhbWUKICAgICAgICAgICAgI3NlbGYuRVZFTlRfTk9U
RUJPT0sgICAgID0gd3guRVZUX05PVEVCT09LX1BBR0VfQ0hBTkdFRAogICAgICAgIGVsaWYgICAg
c2VsZi5tZGkgPT0gTURJOgogICAgICAgICAgICBzZWxmLlBhcmVudEZyYW1lICAgICAgICA9IE1k
aVBhcmVudEZyYW1lCiAgICAgICAgICAgIHNlbGYuQ2hpbGRGcmFtZSAgICAgICAgID0gTWRpQ2hp
bGRGcmFtZQogICAgICAgIGVsaWYgICAgc2VsZi5tZGkgPT0gTURJX1RBQlM6CiAgICAgICAgICAg
IHNlbGYuUGFyZW50RnJhbWUgICAgICAgID0gTWRpVGFic1BhcmVudEZyYW1lCiAgICAgICAgICAg
IHNlbGYuQ2hpbGRGcmFtZSAgICAgICAgID0gTWRpVGFic0NoaWxkRnJhbWUKICAgICAgICBlbGlm
ICAgIHNlbGYubWRpID09IE1ESV9TUExJVDoKICAgICAgICAgICAgc2VsZi5QYXJlbnRGcmFtZSAg
ICAgICAgPSBNZGlTcGxpdFBhcmVudEZyYW1lCiAgICAgICAgICAgIHNlbGYuQ2hpbGRGcmFtZSAg
ICAgICAgID0gTWRpU3BsaXRDaGlsZEZyYW1lCiAgICAgICAgCiAgICAgICAgc2VsZi5FVkVOVF9O
T1RFQk9PSyA9IE5vdGVib29rQ3RybC5FVlRfTk9URUJPT0tDVFJMX1BBR0VfQ0hBTkdFRAojIyAg
ICAgICAgI1RhYnM6IG5vdGVib29rIGV2ZW50IGlzIHBsYXRmb3JtZGVwZW5kZW50CiMjICAgICAg
ICBpZiBXSU46CiMjICAgICAgICAgICAgI1VuZGVyIFdpbmRvd3MsIEdldFNlbGVjdGlvbigpIHdp
bGwgcmV0dXJuIHRoZSBzYW1lIHZhbHVlIGFzCiMjICAgICAgICAgICAgI0dldE9sZFNlbGVjdGlv
bigpIHdoZW4gY2FsbGVkIGZyb20gRVZUX05PVEVCT09LX1BBR0VfQ0hBTkdJTkcgaGFuZGxlciBh
bmQKIyMgICAgICAgICAgICAjbm90IHRoZSBwYWdlIHdoaWNoIGlzIGdvaW5nIHRvIGJlIHNlbGVj
dGVkCiMjICAgICAgICAgICAgI1RoZXJlZm9yZSBvbiBXaW5kb3dzIGEgY29tYmluYXRpb24gb2Yg
bW91c2UgY2xpY2sgYW5kIGhpdHRlc3QgbXVzdCBiZSB1c2VkLgojIyAgICAgICAgICAgIHNlbGYu
RVZFTlRfTk9URUJPT0sgPSB3eC5FVlRfTEVGVF9ET1dOCiMjICAgICAgICBlbHNlOgojIyAgICAg
ICAgICAgIHNlbGYuRVZFTlRfTk9URUJPT0sgPSB3eC5FVlRfTk9URUJPT0tfUEFHRV9DSEFOR0lO
RwoKCiMjIyNUZXN0IGFwcApjbGFzcyBUZXN0TWVudUJhcih3eC5NZW51QmFyKToKICAgIGRlZiBf
X2luaXRfXyhzZWxmLGFwcCxmcmFtZSwqYXJncywqKmt3ZHMpOgogICAgICAgIHd4Lk1lbnVCYXIu
X19pbml0X18oc2VsZiwqYXJncywqKmt3ZHMpCiAgICAgICAgc2VsZi5maWxlICAgPSB3eC5NZW51
KCkKICAgICAgICBzZWxmLmZpbGUuQXBwZW5kKHd4LklEX05FVywgXygiJk5ld1x0Q3RybCtOIiks
ICIiLCB3eC5JVEVNX05PUk1BTCkKICAgICAgICBzZWxmLmZpbGUuQXBwZW5kKHd4LklEX0NMT1NF
LCBfKCImQ2xvc2VcdEN0cmwrVyIpLCAiIiwgd3guSVRFTV9OT1JNQUwpCiAgICAgICAgc2VsZi5m
aWxlLkFwcGVuZCh3eC5JRF9FWElULCBfKCImRXhpdFx0QWx0K0Y0IiksICIiLCB3eC5JVEVNX05P
Uk1BTCkKICAgICAgICBzZWxmLkFwcGVuZChzZWxmLmZpbGUsICImRmlsZSIpCiAgICBkZWYgX19l
dmVudHNfXyhzZWxmKToKICAgICAgICB3eC5FVlRfTUVOVShzZWxmLmZyYW1lLHd4LklEX05FVyxz
ZWxmLm1lbnVfbmV3KQogICAgICAgIHd4LkVWVF9NRU5VKHNlbGYuZnJhbWUsd3guSURfQ0xPU0Us
c2VsZi5tZW51X2Nsb3NlKQogICAgICAgIHd4LkVWVF9NRU5VKHNlbGYuZnJhbWUsd3guSURfRVhJ
VCxzZWxmLm1lbnVfZXhpdCkKICAgIGRlZiBtZW51X25ldyhzZWxmLGV2ZW50PU5vbmUpOgogICAg
ICAgIHNlbGYucGFyZW50UGFuZWwubmV3KCkKICAgIGRlZiBtZW51X2Nsb3NlKHNlbGYsZXZlbnQ9
Tm9uZSk6CiAgICAgICAgc2VsZi5wYXJlbnRQYW5lbC5jbG9zZSgpCiAgICBkZWYgbWVudV9leGl0
KHNlbGYsZXZlbnQ9Tm9uZSk6CiAgICAgICAgc2VsZi5wYXJlbnRGcmFtZS5vbkZyYW1lQ2xvc2Uo
KQogICAgICAgIApBcnRJRHMgPSBbIHd4LkFSVF9GSUxFX09QRU4sCiAgICAgICAgICAgd3guQVJU
X1BSSU5ULAogICAgICAgICAgIHd4LkFSVF9BRERfQk9PS01BUkssCiAgICAgICAgICAgd3guQVJU
X1JFUE9SVF9WSUVXLAogICAgICAgICAgIHd4LkFSVF9MSVNUX1ZJRVcsCiAgICAgICAgICAgd3gu
QVJUX0hFTFAsCiAgICAgICAgICAgXQoKY2xhc3MgVGVzdFRvb2xCYXIod3guVG9vbEJhcik6CiAg
ICBkZWYgX19pbml0X18oc2VsZixwYXJlbnQ9Tm9uZSxpZD13eC5JRF9BTlksbWVudT1Ob25lLGFw
cD1Ob25lLCoqa3dkcyk6CiAgICAgICAgc2VsZi5hcHAgPSBhcHAKICAgICAgICB3eC5Ub29sQmFy
Ll9faW5pdF9fKHNlbGYscGFyZW50PXBhcmVudCxpZD1pZCwqKmt3ZHMpCiAgICAgICAgcGFyZW50
LlNldFRvb2xCYXIoc2VsZikKICAgICAgICBzZWxmLnRvb2xzID0gW10KICAgICAgICBmb3IgaWQg
aW4gQXJ0SURzOgogICAgICAgICAgICB0b29sSWQgPSB3eC5OZXdJZCgpCiAgICAgICAgICAgIGJt
cCA9IHd4LkFydFByb3ZpZGVyX0dldEJpdG1hcChpZCwgd3guQVJUX1RPT0xCQVIsICgxNiwxNikp
CiAgICAgICAgICAgIHNlbGYuQWRkTGFiZWxUb29sKHRvb2xJZCwgIiIsIGJtcCwgd3guTnVsbEJp
dG1hcCwgd3guSVRFTV9OT1JNQUwsICJpbmZvIiwgIiIpCiAgICAgICAgICAgIHNlbGYudG9vbHMu
YXBwZW5kKHRvb2xJZCkKICAgICAgICBzZWxmLlJlYWxpemUoKQogICAgICAgIAogICAgZGVmIF9f
ZXZlbnRzX18oc2VsZik6CiAgICAgICAgZm9yIGlkIGluIHNlbGYudG9vbHM6CiAgICAgICAgICAg
IHd4LkVWVF9UT09MKHNlbGYsaWQsIHNlbGYudGVzdCkKICAgIGRlZiB0ZXN0KHNlbGYsZXZlbnQp
OgogICAgICAgIHByaW50ICd0ZXN0IHNlZW1zIG9rJwogICAgICAgIApjbGFzcyBUZXN0UGFyZW50
UGFuZWwod3guVGV4dEN0cmwpOgogICAgZGVmIF9faW5pdF9fKHNlbGYscGFyZW50LCoqa3dkcyk6
CiAgICAgICAgd3guVGV4dEN0cmwuX19pbml0X18oc2VsZixwYXJlbnQ9cGFyZW50LGlkPXd4LklE
X0FOWSx2YWx1ZT0ncGFyZW50JywqKmt3ZHMpCiAgICAgICAgc2VsZi50ZXN0X2NoaWxkID0gMAog
ICAgZGVmIG5ldyhzZWxmKToKICAgICAgICB2YWx1ZSAgICAgICAgICAgPSAnY2hpbGQlMDJkJyVz
ZWxmLnRlc3RfY2hpbGQKICAgICAgICBzZWxmLmFwcC5DaGlsZEZyYW1lKHNlbGYuZnJhbWUscGFn
ZT12YWx1ZSx2YWx1ZT12YWx1ZSkKICAgICAgICBzZWxmLnRlc3RfY2hpbGQgKz0gMQogICAgZGVm
IGNsb3NlKHNlbGYpOgogICAgICAgIGFjdGl2ZSA9IHNlbGYuYXBwLmNoaWxkQWN0aXZlCiAgICAg
ICAgaWYgYWN0aXZlOiBhY3RpdmUuZnJhbWUub25GcmFtZUNsb3NlKCkKICAgICAgICAKY2xhc3Mg
VGVzdENoaWxkUGFuZWwod3guVGV4dEN0cmwpOgogICAgZGVmIF9faW5pdF9fKHNlbGYscGFyZW50
LCoqa3dkcyk6CiAgICAgICAgd3guVGV4dEN0cmwuX19pbml0X18oc2VsZixwYXJlbnQ9cGFyZW50
LGlkPXd4LklEX0FOWSwqKmt3ZHMpCiAgICAgICAgICAgICAgICAKZGVmIF9fdGVzdF9fKGRlYnVn
LG1kaT1NREkpOgogICAgYXBwID0gQXBwKFRlc3RQYXJlbnRQYW5lbCwKICAgICAgICAgICAgICBU
ZXN0Q2hpbGRQYW5lbCwKICAgICAgICAgICAgICBUZXN0TWVudUJhciwKICAgICAgICAgICAgICBU
ZXN0VG9vbEJhciwKICAgICAgICAgICAgICB3eC5TdGF0dXNCYXIsCiAgICAgICAgICAgICAgbWRp
PW1kaSwKICAgICAgICAgICAgICB0aXRsZT0nUGFyZW50JywKICAgICAgICAgICAgICBkZWJ1Zz1k
ZWJ1ZykKICAgIGFwcC5NYWluTG9vcCgpCiAgICAKaWYgX19uYW1lX189PSdfX21haW5fXyc6CiAg
ICBfX3Rlc3RfXyhkZWJ1Zz0xLG1kaT1NRElfVEFCU19XSU4pI211bHRpcGxlIGRvY3VtZW50IGlu
dGVyZmFjZSBmb3Igd2luZG93cwogICAgI19fdGVzdF9fKGRlYnVnPTEsbWRpPU1ESV9UQUJTX01B
Qykjc2luZ2xlIGRvY3VtZW50IGludGVyZmFjZSBmb3IgbWFjCiAgICAjX190ZXN0X18oZGVidWc9
MSxtZGk9TURJX1NQTElUX0FMTCkjbXVsdGlwbGUgZG9jdW1lbnQgaW50ZXJmYWNlIGZvciBtYWM=

------=_Part_41369_18639215.1164241401845
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Python-spe-users mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/python-spe-users

------=_Part_41369_18639215.1164241401845--