<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>133963</bug_id>
          
          <creation_ts>2014-06-16 19:09:43 -0700</creation_ts>
          <short_desc>Add knowledge of the iOS Simulator to webkitpy</short_desc>
          <delta_ts>2014-07-29 21:49:50 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>iPhone / iPad</rep_platform>
          <op_sys>iOS 7.0</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="David Farler">dfarler</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>dfarler</cc>
    
    <cc>glenn</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1016029</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-06-16 19:09:43 -0700</bug_when>
    <thetext>Add knowledge of the iOS Simulator to webkitpy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016030</commentid>
    <comment_count>1</comment_count>
      <attachid>233206</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-06-16 19:13:07 -0700</bug_when>
    <thetext>Created attachment 233206
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016031</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-16 19:13:57 -0700</bug_when>
    <thetext>Attachment 233206 did not pass style-queue:


ERROR: Tools/Scripts/webkitpy/port/ios-simulator.py:88:  no spaces around keyword / parameter equals  [pep8/E251] [5]
ERROR: Tools/Scripts/webkitpy/port/ios-simulator.py:122:  multiple statements on one line (semicolon)  [pep8/E702] [5]
Total errors found: 2 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1024019</commentid>
    <comment_count>3</comment_count>
      <attachid>233206</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-07-22 11:54:05 -0700</bug_when>
    <thetext>Comment on attachment 233206
Patch

I think this looks good, but perhaps Ryosuke should review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1024025</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-07-22 12:06:39 -0700</bug_when>
    <thetext>David Farler should also say whether this will be useful to him.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1024029</commentid>
    <comment_count>5</comment_count>
    <who name="David Farler">dfarler</who>
    <bug_when>2014-07-22 12:15:22 -0700</bug_when>
    <thetext>Here&apos;s some feedback based on the simulator relay app I&apos;m working on:

You can just use &quot;LayoutTestRelay&quot; as the driver for both DRT and WKTR.

--app
I&apos;ve been using --app /path/to/DRTorWKTR.app which I install with CoreSimulator.

--suffix
In order to support multiple copies of the dump tool running simultaneously, they need to have a unique bundle identifier. LayoutTestRelay can handle this but it needs to have a suffix passed to it so it knows how to unique the identifier (LayoutTestRelay and DRT/WKTR instances are 1:1). I&apos;ve been using --suffix {1..N} depending on how many instances are passed in as the option.

--product-dir
To set DYLD_LIBRARY_PATH and DYLD_FRAMEWORK_PATH when launching in the simulator. I can also just pick these up from the environment.

--A way to specify the device type.
CoreSimulator spawns devices as (SimDeviceType, SimRuntime) -&gt; SimDevice. For any device type, I&apos;ll have to do a check to see if the device and runtime are compatible, since you can have more than one simulator runtime in an Xcode.app bundle. They are identified by reverse-DNS style identifiers. It would be easiest to provide both --deviceType &lt;identifier&gt; --runtime &lt;identifier&gt; to the relay app, where I can do a quick check and bail if the combination is invalid.

Simulator device types roughly correspond to iOS hardware models, and simulator runtimes correspond roughly to simulator SDK versions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1024667</commentid>
    <comment_count>6</comment_count>
    <who name="David Farler">dfarler</who>
    <bug_when>2014-07-24 16:37:53 -0700</bug_when>
    <thetext>Yoink.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1024668</commentid>
    <comment_count>7</comment_count>
      <attachid>233206</attachid>
    <who name="David Farler">dfarler</who>
    <bug_when>2014-07-24 16:39:24 -0700</bug_when>
    <thetext>Comment on attachment 233206
Patch

Got a bunch more changes on top of this. Will upload another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1024707</commentid>
    <comment_count>8</comment_count>
      <attachid>235481</attachid>
    <who name="David Farler">dfarler</who>
    <bug_when>2014-07-24 17:34:59 -0700</bug_when>
    <thetext>Created attachment 235481
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1024708</commentid>
    <comment_count>9</comment_count>
      <attachid>235481</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-07-24 17:40:35 -0700</bug_when>
    <thetext>Comment on attachment 235481
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=235481&amp;action=review

&gt; Tools/ChangeLog:16
&gt; +        * Scripts/webkitpy/port/ios.py: Added.

can we call this iossimulator.py ?

&gt; Tools/Scripts/webkitpy/port/ios.py:50
&gt; +    ARCHITECTURES = [&apos;x86_64&apos;, &apos;x86&apos;]

We should probably support 32-bit too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1024730</commentid>
    <comment_count>10</comment_count>
    <who name="David Farler">dfarler</who>
    <bug_when>2014-07-24 18:36:46 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 235481 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=235481&amp;action=review
&gt; 
&gt; &gt; Tools/ChangeLog:16
&gt; &gt; +        * Scripts/webkitpy/port/ios.py: Added.
&gt; 
&gt; can we call this iossimulator.py ?

We can, but I was just going to put the simulator and device support (when that is ready) in the same module, since they will both run in more or less the same way. Eventually we will have an IOSDevicePort and it makes sense for them to be in the same Python module.

&gt; 
&gt; &gt; Tools/Scripts/webkitpy/port/ios.py:50
&gt; &gt; +    ARCHITECTURES = [&apos;x86_64&apos;, &apos;x86&apos;]
&gt; 
&gt; We should probably support 32-bit too.

Ah, I copied this from the Mac, I assumed that’s what ‘x86’ was. It looks like x86 is webkitpy-speak for i386:

mac.py:72:def _build_driver_flags(self):
return [&apos;ARCHS=i386&apos;] if self.architecture() == &apos;x86&apos; else []</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1025664</commentid>
    <comment_count>11</comment_count>
    <who name="David Farler">dfarler</who>
    <bug_when>2014-07-29 21:49:50 -0700</bug_when>
    <thetext>Committed r171789: &lt;http://trac.webkit.org/changeset/171789&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233206</attachid>
            <date>2014-06-16 19:13:07 -0700</date>
            <delta_ts>2014-07-24 16:39:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133963-20140616191247.patch</filename>
            <type>text/plain</type>
            <size>18068</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcwMDEzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYTBmZGQ1ZDgwNDc3MTE1OGJlZGU1YjRjYzMzMGU0NDQx
ZWUxY2FiZC4uZDhhYzcxNmQwOTE4ZmIwMGJmZDgzYjQyN2FlNTdjMTA1NTY3YTMwZSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYz
IEBACisyMDE0LTA2LTE2ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgor
CisgICAgICAgIEFkZCBrbm93bGVkZ2Ugb2YgdGhlIGlPUyBTaW11bGF0b3IgdG8gd2Via2l0cHkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzk2Mwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAg
RWFybHkgd29yayB0byBnZXQgcnVuLXdlYmtpdC10ZXN0cyB3b3JraW5nIGZvciB0aGUgaU9TIHNp
bXVsYXRvci4KKyAgICAgICAgCisgICAgICAgIE1ha2UgYW4gaW9zLXNpbXVsYXRvci5weSBwb3J0
IHN1YmNsYXNzLCBhbmQgZml4IGZhY3RvcnkucHkgdG8ga25vdworICAgICAgICBhYm91dCBpdC4g
Rml4IHdlYmtpdGRpcnMucG0gdG8gcmVjb2duaXplICItLWlvcy1zaW11bGF0b3IiIGFzIGFuIGFy
Z3VtZW50LCBzaW5jZQorICAgICAgICB0aGlzIGlzIHdoYXQgd2Via2l0cHkgdXNlcy4KKyAgICAg
ICAgCisgICAgICAgIEZvciBub3cgdGhlIGlvc19zaW11bGF0b3IgaW1wbGVtZW50YXRpb24gb2Yg
ZHJpdmVyX25hbWUoKSByZWZlcmVuZXMgYSBub24tZXhpc3RhbnQKKyAgICAgICAgdG9vbCB0aGF0
IHdyYXBzIERSVCBvciBXVFIsIHdoaWNoIHdpbGwgbmVlZCB0byBiZSBmaXhlZC4KKyAgICAgICAg
CisgICAgICAgIEV2ZW50dWFsbHkgd2Ugc2hvdWxkIHVzZSBwbGF0Zm9ybS9pb3Mtc2ltdWxhdG9y
IGFzIHRoZSB0ZXN0IGV4cGVjdGF0aW9ucyBkaXJlY3RvcnkuICAgICAgICAKKworICAgICAgICAq
IFNjcmlwdHMvd2Via2l0ZGlycy5wbToKKyAgICAgICAgKGFyZ3VtZW50c0ZvckNvbmZpZ3VyYXRp
b24pOgorICAgICAgICAoZGV0ZXJtaW5lWGNvZGVTREspOgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9mYWN0b3J5LnB5OgorICAgICAgICAocGxhdGZvcm1fb3B0aW9ucyk6CisgICAg
ICAgIChQb3J0RmFjdG9yeSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy1z
aW11bGF0b3IucHk6IEFkZGVkLgorICAgICAgICAoaU9TU2ltdWxhdG9yUG9ydCk6CisgICAgICAg
IChpT1NTaW11bGF0b3JQb3J0Ll9faW5pdF9fKToKKyAgICAgICAgKGlPU1NpbXVsYXRvclBvcnQu
ZHJpdmVyX25hbWUpOgorICAgICAgICAoaU9TU2ltdWxhdG9yUG9ydC5kZWZhdWx0X3RpbWVvdXRf
bXMpOgorICAgICAgICAoaU9TU2ltdWxhdG9yUG9ydC5zdXBwb3J0c19wZXJfdGVzdF90aW1lb3V0
KToKKyAgICAgICAgKGlPU1NpbXVsYXRvclBvcnQuX2J1aWxkX2RyaXZlcl9mbGFncyk6CisgICAg
ICAgIChpT1NTaW11bGF0b3JQb3J0LnNob3VsZF9yZXRyeV9jcmFzaGVzKToKKyAgICAgICAgKGlP
U1NpbXVsYXRvclBvcnQuX2dlbmVyYXRlX2FsbF90ZXN0X2NvbmZpZ3VyYXRpb25zKToKKyAgICAg
ICAgKGlPU1NpbXVsYXRvclBvcnQuZGVmYXVsdF9iYXNlbGluZV9zZWFyY2hfcGF0aCk6CisgICAg
ICAgIChpT1NTaW11bGF0b3JQb3J0Ll9wb3J0X3NwZWNpZmljX2V4cGVjdGF0aW9uc19maWxlcyk6
CisgICAgICAgIChpT1NTaW11bGF0b3JQb3J0LnNldHVwX2Vudmlyb25fZm9yX3NlcnZlcik6Cisg
ICAgICAgIChpT1NTaW11bGF0b3JQb3J0Lm9wZXJhdGluZ19zeXN0ZW0pOgorICAgICAgICAoaU9T
U2ltdWxhdG9yUG9ydC5kZWZhdWx0X2NoaWxkX3Byb2Nlc3Nlcyk6CisgICAgICAgIChpT1NTaW11
bGF0b3JQb3J0Ll9idWlsZF9qYXZhX3Rlc3Rfc3VwcG9ydCk6CisgICAgICAgIChpT1NTaW11bGF0
b3JQb3J0LmNoZWNrX2Zvcl9sZWFrcyk6CisgICAgICAgIChpT1NTaW11bGF0b3JQb3J0LnByaW50
X2xlYWtzX3N1bW1hcnkpOgorICAgICAgICAoaU9TU2ltdWxhdG9yUG9ydC5fY2hlY2tfcG9ydF9i
dWlsZCk6CisgICAgICAgIChpT1NTaW11bGF0b3JQb3J0Ll9wYXRoX3RvX3dlYmNvcmVfbGlicmFy
eSk6CisgICAgICAgIChpT1NTaW11bGF0b3JQb3J0LnNob3dfcmVzdWx0c19odG1sX2ZpbGUpOgor
ICAgICAgICAoaU9TU2ltdWxhdG9yUG9ydC5hY3F1aXJlX2h0dHBfbG9jayk6CisgICAgICAgIChp
T1NTaW11bGF0b3JQb3J0LnJlbGVhc2VfaHR0cF9sb2NrKToKKyAgICAgICAgKGlPU1NpbXVsYXRv
clBvcnQuc2FtcGxlX2ZpbGVfcGF0aCk6CisgICAgICAgIChpT1NTaW11bGF0b3JQb3J0Ll9nZXRf
Y3Jhc2hfbG9nKToKKyAgICAgICAgKGlPU1NpbXVsYXRvclBvcnQubG9va19mb3JfbmV3X2NyYXNo
X2xvZ3MpOgorICAgICAgICAoaU9TU2ltdWxhdG9yUG9ydC5sb29rX2Zvcl9uZXdfc2FtcGxlcyk6
CisgICAgICAgIChpT1NTaW11bGF0b3JQb3J0LnNhbXBsZV9wcm9jZXNzKToKKyAgICAgICAgKGlP
U1NpbXVsYXRvclBvcnQuX3BhdGhfdG9faGVscGVyKToKKyAgICAgICAgKGlPU1NpbXVsYXRvclBv
cnQuc3RhcnRfaGVscGVyKToKKyAgICAgICAgKGlPU1NpbXVsYXRvclBvcnQucmVzZXRfcHJlZmVy
ZW5jZXMpOgorICAgICAgICAoaU9TU2ltdWxhdG9yUG9ydC5zdG9wX2hlbHBlcik6CisgICAgICAg
IChpT1NTaW11bGF0b3JQb3J0Lm1ha2VfY29tbWFuZCk6CisgICAgICAgIChpT1NTaW11bGF0b3JQ
b3J0Lm5tX2NvbW1hbmQpOgorICAgICAgICAoaU9TU2ltdWxhdG9yUG9ydC54Y3J1bl9maW5kKToK
KyAgICAgICAgKGlPU1NpbXVsYXRvclBvcnQubG9nZ2luZ19wYXR0ZXJuc190b19zdHJpcCk6CisK
IDIwMTQtMDYtMTYgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtYXJpby5wcmFkYUBzYW1zdW5nLmNv
bT4KIAogICAgICAgICBbQVRLXSBNaXNzaW5nICdzZWxlY3Rpb24tY2hhbmdlZCcgc2lnbmFsIHdo
ZW4gbmF2aWdhdGluZyBhIGNvbWJvIGJveCB3aXRoIGtleWJvYXJkCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdGRpcnMucG0gYi9Ub29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0KaW5k
ZXggM2U1YmM2ZTA2OTI2OGFjMjc4MTZiYWQzMzJjYTVmZDk0ZDgxZTc2Yy4uNzIzZjNiNjBhMzQ0
NWVlMzJiYTYwNDkwZjljMmNhMGU4ZjUyZmE5ZSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRkaXJzLnBtCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQpAQCAtMzgyLDYg
KzM4Miw3IEBAIHN1YiBhcmd1bWVudHNGb3JDb25maWd1cmF0aW9uKCkKICAgICBwdXNoKEBhcmdz
LCAnLS1yZWxlYXNlJykgaWYgKCRjb25maWd1cmF0aW9uID1+ICJeUmVsZWFzZSIpOwogICAgIHB1
c2goQGFyZ3MsICctLWRldmljZScpIGlmIChkZWZpbmVkICR4Y29kZVNESyAmJiAkeGNvZGVTREsg
PX4gL15pcGhvbmVvcy8pOwogICAgIHB1c2goQGFyZ3MsICctLXNpbScpIGlmIChkZWZpbmVkICR4
Y29kZVNESyAmJiAkeGNvZGVTREsgPX4gL15pcGhvbmVzaW11bGF0b3IvKTsKKyAgICBwdXNoKEBh
cmdzLCAnLS1pb3Mtc2ltdWxhdG9yJykgaWYgKGRlZmluZWQgJHhjb2RlU0RLICYmICR4Y29kZVNE
SyA9fiAvXmlwaG9uZXNpbXVsYXRvci8pOwogICAgIHB1c2goQGFyZ3MsICctLTMyLWJpdCcpIGlm
ICgkYXJjaGl0ZWN0dXJlIG5lICJ4ODZfNjQiIGFuZCAhaXNXaW42NCgpKTsKICAgICBwdXNoKEBh
cmdzLCAnLS02NC1iaXQnKSBpZiAoaXNXaW42NCgpKTsKICAgICBwdXNoKEBhcmdzLCAnLS1ndGsn
KSBpZiBpc0d0aygpOwpAQCAtNDAzLDcgKzQwNCw4IEBAIHN1YiBkZXRlcm1pbmVYY29kZVNESwog
ICAgICAgICAkeGNvZGVTREsgfHw9ICdpcGhvbmVvcy5pbnRlcm5hbCc7CiAgICAgfQogICAgIGlm
IChjaGVja0ZvckFyZ3VtZW50QW5kUmVtb3ZlRnJvbUFSR1YoIi0tc2ltIikgfHwKLSAgICAgICAg
Y2hlY2tGb3JBcmd1bWVudEFuZFJlbW92ZUZyb21BUkdWKCItLXNpbXVsYXRvciIpKSB7CisgICAg
ICAgIGNoZWNrRm9yQXJndW1lbnRBbmRSZW1vdmVGcm9tQVJHVigiLS1zaW11bGF0b3IiKSB8fAor
ICAgICAgICBjaGVja0ZvckFyZ3VtZW50QW5kUmVtb3ZlRnJvbUFSR1YoIi0taW9zLXNpbXVsYXRv
ciIpKSB7CiAgICAgICAgICR4Y29kZVNESyB8fD0gJ2lwaG9uZXNpbXVsYXRvcic7CiAgICAgfQog
fQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2ZhY3RvcnkucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZmFjdG9yeS5weQppbmRleCBkN2E2ZWQ4NzRlMGYy
OTYwYmRjMTNlNjE1NmJiZTRkNjBjMDc5NmY0Li5mNmI4N2ZmOWQzMmU1NjA1ZTYxMWI1Yzc4OWUz
MzlmM2MxMzkxZjMxIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZmFj
dG9yeS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZmFjdG9yeS5weQpAQCAt
NDQsNiArNDQsOSBAQCBkZWYgcGxhdGZvcm1fb3B0aW9ucyh1c2VfZ2xvYnM9RmFsc2UpOgogICAg
IHJldHVybiBbCiAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLXBsYXRmb3JtJywgYWN0
aW9uPSdzdG9yZScsCiAgICAgICAgICAgICBoZWxwPSgnR2xvYi1zdHlsZSBsaXN0IG9mIHBsYXRm
b3JtL3BvcnRzIHRvIHVzZSAoZS5nLiwgIm1hYyoiKScgaWYgdXNlX2dsb2JzIGVsc2UgJ1BsYXRm
b3JtIHRvIHVzZSAoZS5nLiwgIm1hYy1saW9uIiknKSksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vf
b3B0aW9uKCctLWlvcy1zaW0nLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgZGVzdD0ncGxhdGZvcm0n
LAorICAgICAgICAgICAgY29uc3Q9KCdpb3Mtc2ltKicgaWYgdXNlX2dsb2JzIGVsc2UgJ2lvcy1z
aW0nKSwKKyAgICAgICAgICAgIGhlbHA9KCdBbGlhcyBmb3IgLS1wbGF0Zm9ybT1pb3Mtc2ltKicg
aWYgdXNlX2dsb2JzIGVsc2UgJ0FsaWFzIGZvciAtLXBsYXRmb3JtPWlvcy1zaW11bGF0b3InKSks
CiAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWVmbCcsIGFjdGlvbj0nc3RvcmVfY29u
c3QnLCBkZXN0PSdwbGF0Zm9ybScsCiAgICAgICAgICAgICBjb25zdD0oJ2VmbConIGlmIHVzZV9n
bG9icyBlbHNlICdlZmwnKSwKICAgICAgICAgICAgIGhlbHA9KCdBbGlhcyBmb3IgLS1wbGF0Zm9y
bT1lZmwqJyBpZiB1c2VfZ2xvYnMgZWxzZSAnQWxpYXMgZm9yIC0tcGxhdGZvcm09ZWZsJykpLApA
QCAtNzcsNiArODAsNyBAQCBjbGFzcyBQb3J0RmFjdG9yeShvYmplY3QpOgogICAgIFBPUlRfQ0xB
U1NFUyA9ICgKICAgICAgICAgJ2VmbC5FZmxQb3J0JywKICAgICAgICAgJ2d0ay5HdGtQb3J0JywK
KyAgICAgICAgJ2lvcy1zaW11bGF0b3IuaU9TU2ltdWxhdG9yUG9ydCcsCiAgICAgICAgICdtYWMu
TWFjUG9ydCcsCiAgICAgICAgICdtb2NrX2RydC5Nb2NrRFJUUG9ydCcsCiAgICAgICAgICd0ZXN0
LlRlc3RQb3J0JywKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Mt
c2ltdWxhdG9yLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy1zaW11bGF0b3Iu
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZTUyZmVlMGUxZGM2ZjdmZjgzZTYzYWY3NDM2YTI0YTQxNTc4NjJiYwot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Mtc2ltdWxh
dG9yLnB5CkBAIC0wLDAgKzEsMjc0IEBACisjIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJl
IG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgor
IyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
CisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCB0aW1lCitpbXBvcnQg
cmUKKworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzLnRlc3RfY29uZmlndXJhdGlv
biBpbXBvcnQgVGVzdENvbmZpZ3VyYXRpb24KK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5j
cmFzaGxvZ3MgaW1wb3J0IENyYXNoTG9ncworZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4
ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKK2Zyb20gd2Via2l0cHkucG9ydC5iYXNlIGltcG9y
dCBQb3J0Citmcm9tIHdlYmtpdHB5LnBvcnQubGVha2RldGVjdG9yIGltcG9ydCBMZWFrRGV0ZWN0
b3IKKworCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworY2xhc3MgaU9T
U2ltdWxhdG9yUG9ydChQb3J0KToKKyAgICBwb3J0X25hbWUgPSAiaW9zLXNpbXVsYXRvciIKKwor
ICAgIEZVVFVSRV9WRVJTSU9OID0gJ2Z1dHVyZScgICMgRklYTUU6IFRoaXMgd2hvbGUgJ2Z1dHVy
ZScgdGhpbmcgZmVlbHMgbGlrZSBhIGhhY2suCisKKyAgICBWRVJTSU9OX0ZBTExCQUNLX09SREVS
ID0gWydpb3Mtc2ltdWxhdG9yJywgJ21hYyddCisKKyAgICBBUkNISVRFQ1RVUkVTID0gWyd4ODZf
NjQnLCAneDg2J10KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgor
ICAgICAgICBzdXBlcihpT1NTaW11bGF0b3JQb3J0LCBzZWxmKS5fX2luaXRfXygqYXJncywgKipr
d2FyZ3MpCisKKyAgICAgICAgc2VsZi5fYXJjaGl0ZWN0dXJlID0gc2VsZi5nZXRfb3B0aW9uKCdh
cmNoaXRlY3R1cmUnKQorCisgICAgICAgIGlmIG5vdCBzZWxmLl9hcmNoaXRlY3R1cmU6CisgICAg
ICAgICAgICBzZWxmLl9hcmNoaXRlY3R1cmUgPSAneDg2XzY0JworCisgICAgICAgIHNlbGYuX2xl
YWtfZGV0ZWN0b3IgPSBMZWFrRGV0ZWN0b3Ioc2VsZikKKyAgICAgICAgaWYgc2VsZi5nZXRfb3B0
aW9uKCJsZWFrcyIpOgorICAgICAgICAgICAgIyBEdW1wUmVuZGVyVHJlZSBzbG93cyBkb3duIG5v
dGljYWJseSBpZiB3ZSBydW4gbW9yZSB0aGFuIGFib3V0IDEwMDAgdGVzdHMgaW4gYSBiYXRjaAor
ICAgICAgICAgICAgIyB3aXRoIE1hbGxvY1N0YWNrTG9nZ2luZyBlbmFibGVkLgorICAgICAgICAg
ICAgc2VsZi5zZXRfb3B0aW9uX2RlZmF1bHQoImJhdGNoX3NpemUiLCAxMDAwKQorCisgICAgZGVm
IGRyaXZlcl9uYW1lKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiB1c2UgQ29yZVNpbXVsYXRvciB3
cmFwcGVyIHNjcmlwdCBvciBiaW5hcnkgdGhhdCBsYXVuY2hlcyBXVFIvRFJULgorICAgICAgICAj
IFRoaXMgd3JhcHBlciBuZWVkcyB0byByZWRpcmVjdCBzdGRpbi9zdGRlcnIgZXRjLgorICAgICAg
ICBpZiBzZWxmLmdldF9vcHRpb24oJ2RyaXZlcl9uYW1lJyk6CisgICAgICAgICAgICByZXR1cm4g
c2VsZi5nZXRfb3B0aW9uKCdkcml2ZXJfbmFtZScpCisgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlv
bignd2Via2l0X3Rlc3RfcnVubmVyJyk6CisgICAgICAgICAgICByZXR1cm4gJ1dUUlNpbXVsYXRv
clJ1bm5lcicKKyAgICAgICAgcmV0dXJuICdEUlRTaW11bGF0b3JSdW5uZXInCisKKyAgICBkZWYg
ZGVmYXVsdF90aW1lb3V0X21zKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ2d1
YXJkX21hbGxvYycpOgorICAgICAgICAgICAgcmV0dXJuIDM1MCAqIDEwMDAKKyAgICAgICAgcmV0
dXJuIHN1cGVyKGlPU1NpbXVsYXRvclBvcnQsIHNlbGYpLmRlZmF1bHRfdGltZW91dF9tcygpCisK
KyAgICBkZWYgc3VwcG9ydHNfcGVyX3Rlc3RfdGltZW91dChzZWxmKToKKyAgICAgICAgcmV0dXJu
IFRydWUKKworICAgIGRlZiBfYnVpbGRfZHJpdmVyX2ZsYWdzKHNlbGYpOgorICAgICAgICByZXR1
cm4gWydBUkNIUz1pMzg2J10gaWYgc2VsZi5hcmNoaXRlY3R1cmUoKSA9PSAneDg2JyBlbHNlIFtd
CisKKyAgICBkZWYgc2hvdWxkX3JldHJ5X2NyYXNoZXMoc2VsZik6CisgICAgICAgICMgT24gQXBw
bGUgTWFjLCB3ZSByZXRyeSBjcmFzaGVzIGR1ZSB0byBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODIyMzMKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfZ2Vu
ZXJhdGVfYWxsX3Rlc3RfY29uZmlndXJhdGlvbnMoc2VsZik6CisgICAgICAgIGNvbmZpZ3VyYXRp
b25zID0gW10KKyAgICAgICAgZm9yIGJ1aWxkX3R5cGUgaW4gc2VsZi5BTExfQlVJTERfVFlQRVM6
CisgICAgICAgICAgICBjb25maWd1cmF0aW9ucy5hcHBlbmQoVGVzdENvbmZpZ3VyYXRpb24odmVy
c2lvbiA9IHNlbGYuX3ZlcnNpb24sIGFyY2hpdGVjdHVyZSA9ICd4ODYnLCBidWlsZF90eXBlID0g
YnVpbGRfdHlwZSkpCisgICAgICAgIHJldHVybiBjb25maWd1cmF0aW9ucworCisgICAgZGVmIGRl
ZmF1bHRfYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6CisgICAgICAgIG5hbWUgPSBzZWxmLl9u
YW1lLnJlcGxhY2UoJy13azInLCAnJykKKyAgICAgICAgd2tfdmVyc2lvbiA9IFtdIGlmIHNlbGYu
Z2V0X29wdGlvbignd2Via2l0X3Rlc3RfcnVubmVyJykgZWxzZSBbJ21hYy13azEnXQorICAgICAg
ICBpZiBuYW1lLmVuZHN3aXRoKHNlbGYuRlVUVVJFX1ZFUlNJT04pOgorICAgICAgICAgICAgZmFs
bGJhY2tfbmFtZXMgPSB3a192ZXJzaW9uICsgW3NlbGYucG9ydF9uYW1lXQorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgZmFsbGJhY2tfbmFtZXMgPSBzZWxmLlZFUlNJT05fRkFMTEJBQ0tfT1JE
RVJbc2VsZi5WRVJTSU9OX0ZBTExCQUNLX09SREVSLmluZGV4KG5hbWUpOi0xXSArIHdrX3ZlcnNp
b24gKyBbc2VsZi5wb3J0X25hbWVdCisgICAgICAgICMgRklYTUU6IG1hYy13azIgc2hvdWxkIGFw
cGVhciBhdCB0aGUgc2FtZSBwbGFjZSBhcyBtYWMtd2sxLgorICAgICAgICBpZiBzZWxmLmdldF9v
cHRpb24oJ3dlYmtpdF90ZXN0X3J1bm5lcicpOgorICAgICAgICAgICAgZmFsbGJhY2tfbmFtZXMg
PSBbc2VsZi5fd2syX3BvcnRfbmFtZSgpLCAnd2syJ10gKyBmYWxsYmFja19uYW1lcworICAgICAg
ICByZXR1cm4gbWFwKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoLCBmYWxsYmFja19uYW1lcykK
KworICAgIGRlZiBfcG9ydF9zcGVjaWZpY19leHBlY3RhdGlvbnNfZmlsZXMoc2VsZik6CisgICAg
ICAgIHJldHVybiBsaXN0KHJldmVyc2VkKFtzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fd2Vi
a2l0X2Jhc2VsaW5lX3BhdGgocCksICdUZXN0RXhwZWN0YXRpb25zJykgZm9yIHAgaW4gc2VsZi5i
YXNlbGluZV9zZWFyY2hfcGF0aCgpXSkpCisKKyAgICBkZWYgc2V0dXBfZW52aXJvbl9mb3Jfc2Vy
dmVyKHNlbGYsIHNlcnZlcl9uYW1lPU5vbmUpOgorICAgICAgICBlbnYgPSBzdXBlcihpT1NTaW11
bGF0b3JQb3J0LCBzZWxmKS5zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoc2VydmVyX25hbWUpCisg
ICAgICAgIGlmIHNlcnZlcl9uYW1lID09IHNlbGYuZHJpdmVyX25hbWUoKToKKyAgICAgICAgICAg
IGlmIHNlbGYuZ2V0X29wdGlvbignbGVha3MnKToKKyAgICAgICAgICAgICAgICBlbnZbJ01hbGxv
Y1N0YWNrTG9nZ2luZyddID0gJzEnCisgICAgICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ2d1
YXJkX21hbGxvYycpOgorICAgICAgICAgICAgICAgIGVudlsnRFlMRF9JTlNFUlRfTElCUkFSSUVT
J10gPSAnL3Vzci9saWIvbGliZ21hbGxvYy5keWxpYjonICsgc2VsZi5fYnVpbGRfcGF0aCgibGli
V2ViQ29yZVRlc3RTaGltLmR5bGliIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgZW52WydEWUxEX0lOU0VSVF9MSUJSQVJJRVMnXSA9IHNlbGYuX2J1aWxkX3BhdGgoImxpYldl
YkNvcmVUZXN0U2hpbS5keWxpYiIpCisgICAgICAgIGVudlsnWE1MX0NBVEFMT0dfRklMRVMnXSA9
ICcnICAjIHdvcmsgYXJvdW5kIG1pc3NpbmcgL2V0Yy9jYXRhbG9nIDxyZGFyOi8vcHJvYmxlbS80
MjkyOTk1PgorICAgICAgICByZXR1cm4gZW52CisKKyAgICBkZWYgb3BlcmF0aW5nX3N5c3RlbShz
ZWxmKToKKyAgICAgICAgcmV0dXJuICdpb3Mtc2ltdWxhdG9yJworCisgICAgZGVmIGRlZmF1bHRf
Y2hpbGRfcHJvY2Vzc2VzKHNlbGYpOgorICAgICAgICByZXR1cm4gMTsKKworICAgIGRlZiBfYnVp
bGRfamF2YV90ZXN0X3N1cHBvcnQoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBk
ZWYgY2hlY2tfZm9yX2xlYWtzKHNlbGYsIHByb2Nlc3NfbmFtZSwgcHJvY2Vzc19waWQpOgorICAg
ICAgICBpZiBub3Qgc2VsZi5nZXRfb3B0aW9uKCdsZWFrcycpOgorICAgICAgICAgICAgcmV0dXJu
CisgICAgICAgICMgV2UgY291bGQgdXNlIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9wc3V0aWwv
IHRvIGdldCB0aGUgcHJvY2Vzc19uYW1lIGZyb20gdGhlIHBpZC4KKyAgICAgICAgc2VsZi5fbGVh
a19kZXRlY3Rvci5jaGVja19mb3JfbGVha3MocHJvY2Vzc19uYW1lLCBwcm9jZXNzX3BpZCkKKwor
ICAgIGRlZiBwcmludF9sZWFrc19zdW1tYXJ5KHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5n
ZXRfb3B0aW9uKCdsZWFrcycpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICMgV2UncmUg
aW4gdGhlIG1hbmFnZXIgcHJvY2Vzcywgc28gdGhlIGxlYWsgZGV0ZWN0b3Igd2lsbCBub3QgaGF2
ZSBhIHZhbGlkIGxpc3Qgb2YgbGVhayBmaWxlcy4KKyAgICAgICAgIyBGSVhNRTogVGhpcyBpcyBh
IGhhY2ssIGJ1dCB3ZSBkb24ndCBoYXZlIGEgYmV0dGVyIHdheSB0byBnZXQgdGhpcyBpbmZvcm1h
dGlvbiBmcm9tIHRoZSB3b3JrZXJzIHlldC4KKyAgICAgICAgIyBGSVhNRTogVGhpcyB3aWxsIGlu
Y2x1ZGUgdG9vIG1hbnkgbGVha3MgaW4gc3Vic2VxdWVudCBydW5zIHVudGlsIHRoZSByZXN1bHRz
IGRpcmVjdG9yeSBpcyBjbGVhcmVkIQorICAgICAgICBsZWFrc19maWxlcyA9IHNlbGYuX2xlYWtf
ZGV0ZWN0b3IubGVha3NfZmlsZXNfaW5fZGlyZWN0b3J5KHNlbGYucmVzdWx0c19kaXJlY3Rvcnko
KSkKKyAgICAgICAgaWYgbm90IGxlYWtzX2ZpbGVzOgorICAgICAgICAgICAgcmV0dXJuCisgICAg
ICAgIHRvdGFsX2J5dGVzX3N0cmluZywgdW5pcXVlX2xlYWtzID0gc2VsZi5fbGVha19kZXRlY3Rv
ci5jb3VudF90b3RhbF9ieXRlc19hbmRfdW5pcXVlX2xlYWtzKGxlYWtzX2ZpbGVzKQorICAgICAg
ICB0b3RhbF9sZWFrcyA9IHNlbGYuX2xlYWtfZGV0ZWN0b3IuY291bnRfdG90YWxfbGVha3MobGVh
a3NfZmlsZXMpCisgICAgICAgIF9sb2cuaW5mbygiJXMgdG90YWwgbGVha3MgZm91bmQgZm9yIGEg
dG90YWwgb2YgJXMhIiAlICh0b3RhbF9sZWFrcywgdG90YWxfYnl0ZXNfc3RyaW5nKSkKKyAgICAg
ICAgX2xvZy5pbmZvKCIlcyB1bmlxdWUgbGVha3MgZm91bmQhIiAlIHVuaXF1ZV9sZWFrcykKKwor
ICAgIGRlZiBfY2hlY2tfcG9ydF9idWlsZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0
X29wdGlvbignbm9qYXZhJykgb3Igc2VsZi5fYnVpbGRfamF2YV90ZXN0X3N1cHBvcnQoKQorCisg
ICAgZGVmIF9wYXRoX3RvX3dlYmNvcmVfbGlicmFyeShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNl
bGYuX2J1aWxkX3BhdGgoJ1dlYkNvcmUuZnJhbWV3b3JrL1ZlcnNpb25zL0EvV2ViQ29yZScpCisK
KyAgICBkZWYgc2hvd19yZXN1bHRzX2h0bWxfZmlsZShzZWxmLCByZXN1bHRzX2ZpbGVuYW1lKToK
KyAgICAgICAgIyBXZSBkb24ndCB1c2Ugc2VsZi5fcnVuX3NjcmlwdCgpIGJlY2F1c2Ugd2UgZG9u
J3Qgd2FudCB0byB3YWl0IGZvciB0aGUgc2NyaXB0CisgICAgICAgICMgdG8gZXhpdCBhbmQgd2Ug
d2FudCB0aGUgb3V0cHV0IHRvIHNob3cgdXAgb24gc3Rkb3V0IGluIGNhc2UgdGhlcmUgYXJlIGVy
cm9ycworICAgICAgICAjIGxhdW5jaGluZyB0aGUgYnJvd3Nlci4KKyAgICAgICAgc2VsZi5fZXhl
Y3V0aXZlLnBvcGVuKFtzZWxmLnBhdGhfdG9fc2NyaXB0KCdydW4tc2FmYXJpJyldICsgc2VsZi5f
YXJndW1lbnRzX2Zvcl9jb25maWd1cmF0aW9uKCkgKyBbJy0tbm8tc2F2ZWQtc3RhdGUnLCAnLU5T
T3BlbicsIHJlc3VsdHNfZmlsZW5hbWVdLAorICAgICAgICAgICAgY3dkPXNlbGYud2Via2l0X2Jh
c2UoKSwgc3Rkb3V0PWZpbGUob3MuZGV2bnVsbCksIHN0ZGVycj1maWxlKG9zLmRldm51bGwpKQor
CisgICAgIyBGSVhNRTogVGhlIG5leHQgdHdvIHJvdXRpbmVzIHR1cm4gb2ZmIHRoZSBodHRwIGxv
Y2tpbmcgaW4gb3JkZXIKKyAgICAjIHRvIHdvcmsgYXJvdW5kIGZhaWx1cmVzIG9uIHRoZSBib3Rz
IGNhdXNlZCB3aGVuIHRoZSBzbGF2ZSByZXN0YXJ0cy4KKyAgICAjIFNlZSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ4ODYgZm9yIG1vcmUgaW5mby4KKyAgICAjIFRo
ZSBwcm9wZXIgZml4IGlzIHRvIG1ha2Ugc3VyZSB0aGUgc2xhdmUgaXMgYWN0dWFsbHkgc3RvcHBp
bmcgTlJXVAorICAgICMgcHJvcGVybHkgb24gcmVzdGFydC4gTm90ZSB0aGF0IGJ5IHJlbW92aW5n
IHRoZSBsb2NrIGZpbGUgYW5kIG5vdCB3YWl0aW5nLAorICAgICMgdGhlIHJlc3VsdCBzaG91bGQg
YmUgdGhhdCBpZiB0aGVyZSBpcyBhIHdlYiBzZXJ2ZXIgYWxyZWFkeSBydW5uaW5nLAorICAgICMg
aXQnbGwgYmUga2lsbGVkIGFuZCB0aGlzIG9uZSB3aWxsIGJlIHN0YXJ0ZWQgaW4gaXRzIHBsYWNl
OyB0aGlzCisgICAgIyBtYXkgbGVhZCB0byB3ZWlyZCB0aGluZ3MgaGFwcGVuaW5nIGluIHRoZSBv
dGhlciBydW4uIEhvd2V2ZXIsIEkgZG9uJ3QKKyAgICAjIHRoaW5rIHdlJ3JlIChpbnRlbnRpb25h
bGx5KSBhY3R1YWxseSBydW5uaW5nIG11bHRpcGxlIHJ1bnMgY29uY3VycmVudGx5CisgICAgIyBv
biBhbnkgTWFjIGJvdHMuCisKKyAgICBkZWYgYWNxdWlyZV9odHRwX2xvY2soc2VsZik6CisgICAg
ICAgIHBhc3MKKworICAgIGRlZiByZWxlYXNlX2h0dHBfbG9jayhzZWxmKToKKyAgICAgICAgcGFz
cworCisgICAgZGVmIHNhbXBsZV9maWxlX3BhdGgoc2VsZiwgbmFtZSwgcGlkKToKKyAgICAgICAg
cmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLnJlc3VsdHNfZGlyZWN0b3J5KCksICJ7
MH0tezF9LXNhbXBsZS50eHQiLmZvcm1hdChuYW1lLCBwaWQpKQorCisgICAgZGVmIF9nZXRfY3Jh
c2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVf
Zm49Tm9uZSwgc2xlZXBfZm49Tm9uZSwgd2FpdF9mb3JfbG9nPVRydWUpOgorICAgICAgICAjIE5v
dGUgdGhhdCB3ZSBkbyBzbG93LXNwaW4gaGVyZSBhbmQgd2FpdCwgc2luY2UgaXQgYXBwZWFycyB0
aGUgdGltZQorICAgICAgICAjIFJlcG9ydENyYXNoIHRha2VzIHRvIGFjdHVhbGx5IHdyaXRlIGFu
ZCBmbHVzaCB0aGUgZmlsZSB2YXJpZXMgd2hlbiB0aGVyZSBhcmUKKyAgICAgICAgIyBsb3RzIG9m
IHNpbXVsdGFuZW91cyBjcmFzaGVzIGdvaW5nIG9uLgorICAgICAgICAjIEZJWE1FOiBTaG91bGQg
bW9zdCBvZiB0aGlzIGJlIG1vdmVkIGludG8gQ3Jhc2hMb2dzKCk/CisgICAgICAgIHRpbWVfZm4g
PSB0aW1lX2ZuIG9yIHRpbWUudGltZQorICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9yIHRp
bWUuc2xlZXAKKyAgICAgICAgY3Jhc2hfbG9nID0gJycKKyAgICAgICAgY3Jhc2hfbG9ncyA9IENy
YXNoTG9ncyhzZWxmLmhvc3QpCisgICAgICAgIG5vdyA9IHRpbWVfZm4oKQorICAgICAgICAjIEZJ
WE1FOiBkZWxldGUgdGhpcyBhZnRlciB3ZSdyZSBzdXJlIHRoaXMgY29kZSBpcyB3b3JraW5nIC4u
LgorICAgICAgICBfbG9nLmRlYnVnKCdsb29raW5nIGZvciBjcmFzaCBsb2cgZm9yICVzOiVzJyAl
IChuYW1lLCBzdHIocGlkKSkpCisgICAgICAgIGRlYWRsaW5lID0gbm93ICsgNSAqIGludChzZWxm
LmdldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpKQorICAgICAgICB3aGlsZSBub3QgY3Jh
c2hfbG9nIGFuZCBub3cgPD0gZGVhZGxpbmU6CisgICAgICAgICAgICBjcmFzaF9sb2cgPSBjcmFz
aF9sb2dzLmZpbmRfbmV3ZXN0X2xvZyhuYW1lLCBwaWQsIGluY2x1ZGVfZXJyb3JzPVRydWUsIG5l
d2VyX3RoYW49bmV3ZXJfdGhhbikKKyAgICAgICAgICAgIGlmIG5vdCB3YWl0X2Zvcl9sb2c6Cisg
ICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIG5vdCBjcmFzaF9sb2cgb3Igbm90
IFtsaW5lIGZvciBsaW5lIGluIGNyYXNoX2xvZy5zcGxpdGxpbmVzKCkgaWYgbm90IGxpbmUuc3Rh
cnRzd2l0aCgnRVJST1InKV06CisgICAgICAgICAgICAgICAgc2xlZXBfZm4oMC4xKQorICAgICAg
ICAgICAgICAgIG5vdyA9IHRpbWVfZm4oKQorCisgICAgICAgIGlmIG5vdCBjcmFzaF9sb2c6Cisg
ICAgICAgICAgICByZXR1cm4gKHN0ZGVyciwgTm9uZSkKKyAgICAgICAgcmV0dXJuIChzdGRlcnIs
IGNyYXNoX2xvZykKKworICAgIGRlZiBsb29rX2Zvcl9uZXdfY3Jhc2hfbG9ncyhzZWxmLCBjcmFz
aGVkX3Byb2Nlc3Nlcywgc3RhcnRfdGltZSk6CisgICAgICAgICIiIlNpbmNlIGNyYXNoIGxvZ3Mg
Y2FuIHRha2UgYSBsb25nIHRpbWUgdG8gYmUgd3JpdHRlbiBvdXQgaWYgdGhlIHN5c3RlbSBpcwor
ICAgICAgICAgICB1bmRlciBzdHJlc3MgZG8gYSBzZWNvbmQgcGFzcyBhdCB0aGUgZW5kIG9mIHRo
ZSB0ZXN0IHJ1bi4KKworICAgICAgICAgICBjcmFzaGVzOiB0ZXN0X25hbWUgLT4gcGlkLCBwcm9j
ZXNzX25hbWUgdHVwbGUgb2YgY3Jhc2hlZCBwcm9jZXNzCisgICAgICAgICAgIHN0YXJ0X3RpbWU6
IHRpbWUgdGhlIHRlc3RzIHN0YXJ0ZWQgYXQuICBXZSdyZSBsb29raW5nIGZvciBjcmFzaAorICAg
ICAgICAgICAgICAgbG9ncyBhZnRlciB0aGF0IHRpbWUuCisgICAgICAgICIiIgorICAgICAgICBj
cmFzaF9sb2dzID0ge30KKyAgICAgICAgZm9yICh0ZXN0X25hbWUsIHByb2Nlc3NfbmFtZSwgcGlk
KSBpbiBjcmFzaGVkX3Byb2Nlc3NlczoKKyAgICAgICAgICAgICMgUGFzc2luZyBOb25lIGZvciBv
dXRwdXQuICBUaGlzIGlzIGEgc2Vjb25kIHBhc3MgYWZ0ZXIgdGhlIHRlc3QgZmluaXNoZWQgc28K
KyAgICAgICAgICAgICMgaWYgdGhlIG91dHB1dCBoYWQgYW55IGxvZ2dpbmcgd2Ugd291bGQgaGF2
ZSBhbHJlYWR5IGNvbGxlY3RlZCBpdC4KKyAgICAgICAgICAgIGNyYXNoX2xvZyA9IHNlbGYuX2dl
dF9jcmFzaF9sb2cocHJvY2Vzc19uYW1lLCBwaWQsIE5vbmUsIE5vbmUsIHN0YXJ0X3RpbWUsIHdh
aXRfZm9yX2xvZz1GYWxzZSlbMV0KKyAgICAgICAgICAgIGlmIG5vdCBjcmFzaF9sb2c6CisgICAg
ICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGNyYXNoX2xvZ3NbdGVzdF9uYW1lXSA9
IGNyYXNoX2xvZworICAgICAgICByZXR1cm4gY3Jhc2hfbG9ncworCisgICAgZGVmIGxvb2tfZm9y
X25ld19zYW1wbGVzKHNlbGYsIHVucmVzcG9uc2l2ZV9wcm9jZXNzZXMsIHN0YXJ0X3RpbWUpOgor
ICAgICAgICBzYW1wbGVfZmlsZXMgPSB7fQorICAgICAgICBmb3IgKHRlc3RfbmFtZSwgcHJvY2Vz
c19uYW1lLCBwaWQpIGluIHVucmVzcG9uc2l2ZV9wcm9jZXNzZXM6CisgICAgICAgICAgICBzYW1w
bGVfZmlsZSA9IHNlbGYuc2FtcGxlX2ZpbGVfcGF0aChwcm9jZXNzX25hbWUsIHBpZCkKKyAgICAg
ICAgICAgIGlmIG5vdCBzZWxmLl9maWxlc3lzdGVtLmlzZmlsZShzYW1wbGVfZmlsZSk6CisgICAg
ICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNhbXBsZV9maWxlc1t0ZXN0X25hbWVd
ID0gc2FtcGxlX2ZpbGUKKyAgICAgICAgcmV0dXJuIHNhbXBsZV9maWxlcworCisgICAgZGVmIHNh
bXBsZV9wcm9jZXNzKHNlbGYsIG5hbWUsIHBpZCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IGhhbmdfcmVwb3J0ID0gc2VsZi5zYW1wbGVfZmlsZV9wYXRoKG5hbWUsIHBpZCkKKyAgICAgICAg
ICAgIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbCisgICAgICAgICAgICAgICAgIi91c3Iv
YmluL3NhbXBsZSIsCisgICAgICAgICAgICAgICAgcGlkLAorICAgICAgICAgICAgICAgIDEwLAor
ICAgICAgICAgICAgICAgIDEwLAorICAgICAgICAgICAgICAgICItZmlsZSIsCisgICAgICAgICAg
ICAgICAgaGFuZ19yZXBvcnQsCisgICAgICAgICAgICBdKQorICAgICAgICBleGNlcHQgU2NyaXB0
RXJyb3IgYXMgZToKKyAgICAgICAgICAgIF9sb2cud2FybmluZygnVW5hYmxlIHRvIHNhbXBsZSBw
cm9jZXNzOicgKyBzdHIoZSkpCisKKyAgICBkZWYgX3BhdGhfdG9faGVscGVyKHNlbGYpOgorICAg
ICAgICBiaW5hcnlfbmFtZSA9ICdMYXlvdXRUZXN0SGVscGVyJworICAgICAgICByZXR1cm4gc2Vs
Zi5fYnVpbGRfcGF0aChiaW5hcnlfbmFtZSkKKworICAgIGRlZiBzdGFydF9oZWxwZXIoc2VsZiwg
cGl4ZWxfdGVzdHM9RmFsc2UpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcmVzZXRfcHJlZmVy
ZW5jZXMoc2VsZik6CisgICAgICAgICMgRklYTUU6IHJlc2V0IHByZWZzIGluIHRoZSBpT1Mgc2lt
dWxhdG9yLgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc3RvcF9oZWxwZXIoc2VsZik6CisgICAg
ICAgIHBhc3MKKworICAgIGRlZiBtYWtlX2NvbW1hbmQoc2VsZik6CisgICAgICAgIHJldHVybiBz
ZWxmLnhjcnVuX2ZpbmQoJ21ha2UnLCAnL3Vzci9iaW4vbWFrZScpCisKKyAgICBkZWYgbm1fY29t
bWFuZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYueGNydW5fZmluZCgnbm0nLCAnbm0nKQor
CisgICAgZGVmIHhjcnVuX2ZpbmQoc2VsZiwgY29tbWFuZCwgZmFsbGJhY2spOgorICAgICAgICB0
cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsneGNy
dW4nLCAnLWZpbmQnLCBjb21tYW5kXSkucnN0cmlwKCkKKyAgICAgICAgZXhjZXB0IFNjcmlwdEVy
cm9yOgorICAgICAgICAgICAgX2xvZy53YXJuKCJ4Y3J1biBmYWlsZWQ7IGZhbGxpbmcgYmFjayB0
byAnJXMnLiIgJSBmYWxsYmFjaykKKyAgICAgICAgICAgIHJldHVybiBmYWxsYmFjaworCisgICAg
ZGVmIGxvZ2dpbmdfcGF0dGVybnNfdG9fc3RyaXAoc2VsZik6CisgICAgICAgIHJldHVybiBbXQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>235481</attachid>
            <date>2014-07-24 17:34:59 -0700</date>
            <delta_ts>2014-07-24 17:40:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133963-20140724173445.patch</filename>
            <type>text/plain</type>
            <size>21421</size>
            <attacher name="David Farler">dfarler</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcxNTU4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYTcyNTA3YWViZmIyMjU2MGEyNDdiYWQ5OWI5OWQyNGM4
Zjk4NTA3NS4uYTg2YjEzYzJlNGY3YzBhNjE1NWYzZTRiYTZjN2E2ZWI3MGVmYTcyOSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIw
IEBACisyMDE0LTA3LTI0ICBEYXZpZCBGYXJsZXIgIDxkZmFybGVyQGFwcGxlLmNvbT4KKworICAg
ICAgICBBZGQga25vd2xlZGdlIG9mIHRoZSBpT1MgU2ltdWxhdG9yIHRvIHdlYmtpdHB5CisgICAg
ICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzk2MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRkaXJzLnBtOgorICAgICAgICAoYXJndW1lbnRzRm9yQ29uZmlndXJhdGlvbik6IEFkZCAtLWlv
cy1zaW0qCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtp
dF90ZXN0cy5weToKKyAgICAgICAgLS1ydW50aW1lIGFuZCAtLWRldmljZS10eXBlIGFyZ3MgYWRk
ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHk6CisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weTogQWRkIHNpbXVsYXRvciBkcml2ZXIuCisg
ICAgICAgIChJT1NTaW11bGF0b3JEcml2ZXIpOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3BvcnQvZmFjdG9yeS5weTogQWRkIHNpbXVsYXRvciBwbGF0Zm9ybS4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5OiBBZGRlZC4KKwogMjAxNC0wNy0yNCAgTWlj
aGFlbCBDYXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CiAKICAgICAgICAgR1RLIGpo
YnVpbGQgbW9kdWxlcyBuZWVkcyB0byBidWlsZCB4c2VydmVyIHdpdGggLS1kaXNhYmxlLWxvY2Fs
LXRyYW5zcG9ydApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCmluZGV4IGY5ZGFjMTMwNjdhZjM0ZDBhYTQzOTkzYzQ5
OTkwNWI0OTY3MTNhZGYuLjg1NTQ5NjFkYzFmMmY0YzUwZTA5OTM5MjcyODgyMjY4MDA0YjdkOWIg
MTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdGRpcnMucG0KQEAgLTM5MCw2ICszOTAsNyBAQCBzdWIgYXJndW1lbnRzRm9yQ29u
ZmlndXJhdGlvbigpCiAgICAgcHVzaChAYXJncywgJy0tcmVsZWFzZScpIGlmICgkY29uZmlndXJh
dGlvbiA9fiAiXlJlbGVhc2UiKTsKICAgICBwdXNoKEBhcmdzLCAnLS1kZXZpY2UnKSBpZiAoZGVm
aW5lZCAkeGNvZGVTREsgJiYgJHhjb2RlU0RLID1+IC9eaXBob25lb3MvKTsKICAgICBwdXNoKEBh
cmdzLCAnLS1zaW0nKSBpZiAoZGVmaW5lZCAkeGNvZGVTREsgJiYgJHhjb2RlU0RLID1+IC9eaXBo
b25lc2ltdWxhdG9yLyk7CisgICAgcHVzaChAYXJncywgJy0taW9zLXNpbXVsYXRvcicpIGlmIChk
ZWZpbmVkICR4Y29kZVNESyAmJiAkeGNvZGVTREsgPX4gL15pcGhvbmVzaW11bGF0b3IvKTsKICAg
ICBwdXNoKEBhcmdzLCAnLS0zMi1iaXQnKSBpZiAoJGFyY2hpdGVjdHVyZSBuZSAieDg2XzY0IiBh
bmQgIWlzV2luNjQoKSk7CiAgICAgcHVzaChAYXJncywgJy0tNjQtYml0JykgaWYgKGlzV2luNjQo
KSk7CiAgICAgcHVzaChAYXJncywgJy0tZ3RrJykgaWYgaXNHdGsoKTsKQEAgLTQxMSw3ICs0MTIs
OCBAQCBzdWIgZGV0ZXJtaW5lWGNvZGVTREsKICAgICAgICAgJHhjb2RlU0RLIHx8PSAnaXBob25l
b3MuaW50ZXJuYWwnOwogICAgIH0KICAgICBpZiAoY2hlY2tGb3JBcmd1bWVudEFuZFJlbW92ZUZy
b21BUkdWKCItLXNpbSIpIHx8Ci0gICAgICAgIGNoZWNrRm9yQXJndW1lbnRBbmRSZW1vdmVGcm9t
QVJHVigiLS1zaW11bGF0b3IiKSkgeworICAgICAgICBjaGVja0ZvckFyZ3VtZW50QW5kUmVtb3Zl
RnJvbUFSR1YoIi0tc2ltdWxhdG9yIikgfHwKKyAgICAgICAgY2hlY2tGb3JBcmd1bWVudEFuZFJl
bW92ZUZyb21BUkdWKCItLWlvcy1zaW11bGF0b3IiKSkgewogICAgICAgICAkeGNvZGVTREsgfHw9
ICdpcGhvbmVzaW11bGF0b3InOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CmluZGV4IDg4NzFkMzI3
NmZiYzdjMDBlNGVmMmRlZjQwYTIxMjExMTQzMjc0NmIuLjJhMzQ5YWI1YzIyOGM4ZmJhMzUwZWE3
MjlkNjU3MjNkNzdlMTk5ZDIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQpAQCAtMjg0LDYgKzI4NCwxMSBAQCBk
ZWYgcGFyc2VfYXJncyhhcmdzKToKICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tbm8t
dGltZW91dCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsIGhlbHA9IkRpc2Fi
bGUgdGVzdCB0aW1lb3V0cyIpLAogICAgIF0pKQogCisgICAgb3B0aW9uX2dyb3VwX2RlZmluaXRp
b25zLmFwcGVuZCgoImlPUyBTaW11bGF0b3IgT3B0aW9ucyIsIFsKKyAgICAgICAgb3B0cGFyc2Uu
bWFrZV9vcHRpb24oJy0tcnVudGltZScsIGhlbHA9J2lPUyBTaW11bGF0b3IgcnVudGltZSBpZGVu
dGlmaWVyJyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWRldmljZS10eXBlJywg
aGVscD0naU9TIFNpbXVsYXRvciBkZXZpY2UgdHlwZSBpZGVudGlmaWVyJyksCisgICAgXSkpCisK
ICAgICBvcHRpb25fZ3JvdXBfZGVmaW5pdGlvbnMuYXBwZW5kKCgiTWlzY2VsbGFuZW91cyBPcHRp
b25zIiwgWwogICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1saW50LXRlc3QtZmlsZXMi
LCBhY3Rpb249InN0b3JlX3RydWUiLAogICAgICAgICBkZWZhdWx0PUZhbHNlLCBoZWxwPSgiTWFr
ZXMgc3VyZSB0aGUgdGVzdCBmaWxlcyBwYXJzZSBmb3IgYWxsICIKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvZHJpdmVyLnB5CmluZGV4IGNmZGNlMzYwNTk3ZjMyMTM3NDBlOTY5OGEyZjdlMzgxM2Fl
ZWVkZjguLmU4OTkzYzMzNDViYjUwZDgxZmJmOTUyMzk0YWVmMzhhMWQ2MmRjODMgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQpAQCAtMTkzLDcgKzE5Myw2IEBAIGNsYXNzIERy
aXZlcihvYmplY3QpOgogICAgICAgICBjcmFzaF9sb2cgPSBOb25lCiAgICAgICAgIGlmIGNyYXNo
ZWQ6CiAgICAgICAgICAgICBzZWxmLmVycm9yX2Zyb21fdGVzdCwgY3Jhc2hfbG9nID0gc2VsZi5f
Z2V0X2NyYXNoX2xvZyh0ZXh0LCBzZWxmLmVycm9yX2Zyb21fdGVzdCwgbmV3ZXJfdGhhbj1zdGFy
dF90aW1lKQotCiAgICAgICAgICAgICAjIElmIHdlIGRvbid0IGZpbmQgYSBjcmFzaCBsb2cgdXNl
IGEgcGxhY2Vob2xkZXIgZXJyb3IgbWVzc2FnZSBpbnN0ZWFkLgogICAgICAgICAgICAgaWYgbm90
IGNyYXNoX2xvZzoKICAgICAgICAgICAgICAgICBwaWRfc3RyID0gc3RyKHNlbGYuX2NyYXNoZWRf
cGlkKSBpZiBzZWxmLl9jcmFzaGVkX3BpZCBlbHNlICJ1bmtub3duIHBpZCIKQEAgLTQ5Niw2ICs0
OTUsMjUgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgIHJldHVybiBUcnVlCiAKIAor
Y2xhc3MgSU9TU2ltdWxhdG9yRHJpdmVyKERyaXZlcik6CisgICAgZGVmIGNtZF9saW5lKHNlbGYs
IHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKToKKyAgICAgICAgY21kID0gc3VwZXIoSU9TU2lt
dWxhdG9yRHJpdmVyLCBzZWxmKS5jbWRfbGluZShwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncykK
KyAgICAgICAgcmVsYXlfdG9vbCA9IHNlbGYuX3BvcnQucmVsYXlfcGF0aAorICAgICAgICBkdW1w
X3Rvb2wgPSBjbWRbMF0KKyAgICAgICAgZHVtcF90b29sX2FyZ3MgPSBjbWRbMTpdCisgICAgICAg
IHByb2R1Y3RfZGlyID0gc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgpCisgICAgICAgIHJ1bnRpbWUg
PSBzZWxmLl9wb3J0LmdldF9vcHRpb24oJ3J1bnRpbWUnKQorICAgICAgICBkZXZpY2VfdHlwZSA9
IHNlbGYuX3BvcnQuZ2V0X29wdGlvbignZGV2aWNlX3R5cGUnKQorICAgICAgICByZWxheV9hcmdz
ID0gWworICAgICAgICAgICAgJy0tcnVudGltZScsIHJ1bnRpbWUsCisgICAgICAgICAgICAnLS1k
ZXZpY2UtdHlwZScsIGRldmljZV90eXBlLAorICAgICAgICAgICAgJy0tc3VmZml4Jywgc3RyKHNl
bGYuX3dvcmtlcl9udW1iZXIpLAorICAgICAgICAgICAgJy0tcHJvZHVjdC1kaXInLCBwcm9kdWN0
X2RpciwKKyAgICAgICAgICAgICctLWFwcCcsIGR1bXBfdG9vbCwKKyAgICAgICAgXQorICAgICAg
ICByZXR1cm4gW3JlbGF5X3Rvb2xdICsgcmVsYXlfYXJncyArIFsnLS0nXSArIGR1bXBfdG9vbF9h
cmdzCisKKwogY2xhc3MgQ29udGVudEJsb2NrKG9iamVjdCk6CiAgICAgZGVmIF9faW5pdF9fKHNl
bGYpOgogICAgICAgICBzZWxmLmNvbnRlbnRfdHlwZSA9IE5vbmUKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9mYWN0b3J5LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L2ZhY3RvcnkucHkKaW5kZXggZDdhNmVkODc0ZTBmMjk2MGJkYzEzZTYxNTZiYmU0ZDYw
YzA3OTZmNC4uNDc0NDA3ZjQ3ZTgyMzczYjM0YjA5MjExYzllM2UwNzZjYTBhMTI1YSAxMDA2NDQK
LS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2ZhY3RvcnkucHkKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L2ZhY3RvcnkucHkKQEAgLTQ0LDYgKzQ0LDkgQEAgZGVmIHBs
YXRmb3JtX29wdGlvbnModXNlX2dsb2JzPUZhbHNlKToKICAgICByZXR1cm4gWwogICAgICAgICBv
cHRwYXJzZS5tYWtlX29wdGlvbignLS1wbGF0Zm9ybScsIGFjdGlvbj0nc3RvcmUnLAogICAgICAg
ICAgICAgaGVscD0oJ0dsb2Itc3R5bGUgbGlzdCBvZiBwbGF0Zm9ybS9wb3J0cyB0byB1c2UgKGUu
Zy4sICJtYWMqIiknIGlmIHVzZV9nbG9icyBlbHNlICdQbGF0Zm9ybSB0byB1c2UgKGUuZy4sICJt
YWMtbGlvbiIpJykpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1pb3Mtc2ltJywg
YWN0aW9uPSdzdG9yZV9jb25zdCcsIGRlc3Q9J3BsYXRmb3JtJywKKyAgICAgICAgICAgIGNvbnN0
PSgnaW9zLXNpbXVsYXRvcicpLAorICAgICAgICAgICAgaGVscD0oJ0FsaWFzIGZvciAtLXBsYXRm
b3JtPWlvcy1zaW0qJyBpZiB1c2VfZ2xvYnMgZWxzZSAnQWxpYXMgZm9yIC0tcGxhdGZvcm09aW9z
LXNpbXVsYXRvcicpKSwKICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tZWZsJywgYWN0
aW9uPSdzdG9yZV9jb25zdCcsIGRlc3Q9J3BsYXRmb3JtJywKICAgICAgICAgICAgIGNvbnN0PSgn
ZWZsKicgaWYgdXNlX2dsb2JzIGVsc2UgJ2VmbCcpLAogICAgICAgICAgICAgaGVscD0oJ0FsaWFz
IGZvciAtLXBsYXRmb3JtPWVmbConIGlmIHVzZV9nbG9icyBlbHNlICdBbGlhcyBmb3IgLS1wbGF0
Zm9ybT1lZmwnKSksCkBAIC03Nyw2ICs4MCw3IEBAIGNsYXNzIFBvcnRGYWN0b3J5KG9iamVjdCk6
CiAgICAgUE9SVF9DTEFTU0VTID0gKAogICAgICAgICAnZWZsLkVmbFBvcnQnLAogICAgICAgICAn
Z3RrLkd0a1BvcnQnLAorICAgICAgICAnaW9zLklPU1NpbXVsYXRvclBvcnQnLAogICAgICAgICAn
bWFjLk1hY1BvcnQnLAogICAgICAgICAnbW9ja19kcnQuTW9ja0RSVFBvcnQnLAogICAgICAgICAn
dGVzdC5UZXN0UG9ydCcsCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
aW9zLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
YTVkMWFjZDYwZjczYTg0NmY5MzA0MTMwNDQwYmM0MWZiZmM4OGIxCi0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQpAQCAtMCwwICsxLDM1NCBAQAor
IyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAor
IyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgbG9nZ2luZwor
aW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdGltZQoraW1wb3J0IHJlCitpbXBvcnQg
aXRlcnRvb2xzCitpbXBvcnQgc3VicHJvY2VzcworCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0
cy5tb2RlbHMudGVzdF9jb25maWd1cmF0aW9uIGltcG9ydCBUZXN0Q29uZmlndXJhdGlvbgorZnJv
bSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmNyYXNobG9ncyBpbXBvcnQgQ3Jhc2hMb2dzCitmcm9t
IHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgorZnJv
bSB3ZWJraXRweS5wb3J0IGltcG9ydCBkcml2ZXIKK2Zyb20gd2Via2l0cHkucG9ydC5iYXNlIGlt
cG9ydCBQb3J0Citmcm9tIHdlYmtpdHB5LnBvcnQubGVha2RldGVjdG9yIGltcG9ydCBMZWFrRGV0
ZWN0b3IKK2Zyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgY29uZmlnIGFzIHBvcnRfY29uZmlnCisK
KworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2NsYXNzIElPU1NpbXVs
YXRvclBvcnQoUG9ydCk6CisgICAgcG9ydF9uYW1lID0gImlvcy1zaW11bGF0b3IiCisKKyAgICBG
VVRVUkVfVkVSU0lPTiA9ICdmdXR1cmUnCisKKyAgICBWRVJTSU9OX0ZBTExCQUNLX09SREVSID0g
Wydpb3Mtc2ltdWxhdG9yJywgJ21hYyddCisKKyAgICBBUkNISVRFQ1RVUkVTID0gWyd4ODZfNjQn
LCAneDg2J10KKworICAgIHJlbGF5X25hbWUgPSAnTGF5b3V0VGVzdFJlbGF5JworCisgICAgZGVm
IF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKElPU1NpbXVs
YXRvclBvcnQsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKKworICAgICAgICBzZWxm
Ll9hcmNoaXRlY3R1cmUgPSBzZWxmLmdldF9vcHRpb24oJ2FyY2hpdGVjdHVyZScpCisKKyAgICAg
ICAgaWYgbm90IHNlbGYuX2FyY2hpdGVjdHVyZToKKyAgICAgICAgICAgIHNlbGYuX2FyY2hpdGVj
dHVyZSA9ICd4ODZfNjQnCisKKyAgICAgICAgc2VsZi5fbGVha19kZXRlY3RvciA9IExlYWtEZXRl
Y3RvcihzZWxmKQorICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oImxlYWtzIik6CisgICAgICAg
ICAgICAjIER1bXBSZW5kZXJUcmVlIHNsb3dzIGRvd24gbm90aWNhYmx5IGlmIHdlIHJ1biBtb3Jl
IHRoYW4gYWJvdXQgMTAwMCB0ZXN0cyBpbiBhIGJhdGNoCisgICAgICAgICAgICAjIHdpdGggTWFs
bG9jU3RhY2tMb2dnaW5nIGVuYWJsZWQuCisgICAgICAgICAgICBzZWxmLnNldF9vcHRpb25fZGVm
YXVsdCgiYmF0Y2hfc2l6ZSIsIDEwMDApCisKKyAgICBkZWYgZHJpdmVyX25hbWUoc2VsZik6Cisg
ICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignZHJpdmVyX25hbWUnKToKKyAgICAgICAgICAgIHJl
dHVybiBzZWxmLmdldF9vcHRpb24oJ2RyaXZlcl9uYW1lJykKKyAgICAgICAgaWYgc2VsZi5nZXRf
b3B0aW9uKCd3ZWJraXRfdGVzdF9ydW5uZXInKToKKyAgICAgICAgICAgIHJldHVybiAnV2ViS2l0
VGVzdFJ1bm5lckFwcC5hcHAnCisgICAgICAgIHJldHVybiAnRHVtcFJlbmRlclRyZWUuYXBwJwor
CisgICAgQHByb3BlcnR5CisgICAgZGVmIHJlbGF5X3BhdGgoc2VsZik6CisgICAgICAgIG1hY19j
b25maWcgPSBwb3J0X2NvbmZpZy5Db25maWcoc2VsZi5fZXhlY3V0aXZlLCBzZWxmLl9maWxlc3lz
dGVtLCAnbWFjJykKKyAgICAgICAgbWFjX2J1aWxkX2RpcmVjdG9yeSA9IG1hY19jb25maWcuYnVp
bGRfZGlyZWN0b3J5KHNlbGYuZ2V0X29wdGlvbignY29uZmlndXJhdGlvbicpKQorICAgICAgICBy
ZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2luKG1hY19idWlsZF9kaXJlY3RvcnksIHNlbGYucmVs
YXlfbmFtZSkKKworICAgIGRlZiBkZWZhdWx0X3RpbWVvdXRfbXMoc2VsZik6CisgICAgICAgIGlm
IHNlbGYuZ2V0X29wdGlvbignZ3VhcmRfbWFsbG9jJyk6CisgICAgICAgICAgICByZXR1cm4gMzUw
ICogMTAwMAorICAgICAgICByZXR1cm4gc3VwZXIoSU9TU2ltdWxhdG9yUG9ydCwgc2VsZikuZGVm
YXVsdF90aW1lb3V0X21zKCkKKworICAgIGRlZiBzdXBwb3J0c19wZXJfdGVzdF90aW1lb3V0KHNl
bGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9jaGVja19yZWxheShzZWxmKToK
KyAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHNlbGYucmVsYXlfcGF0aCk6
CisgICAgICAgICAgICBfbG9nLmVycm9yKCIlcyB3YXMgbm90IGZvdW5kIGF0ICVzIiAlIChzZWxm
LnJlbGF5X25hbWUsIHNlbGYucmVsYXlfcGF0aCkpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UK
KyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfY2hlY2tfYnVpbGRfcmVsYXkoc2VsZik6
CisgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignYnVpbGQnKSBhbmQgbm90IHNlbGYuX2J1aWxk
X3JlbGF5KCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgbm90IHNlbGYu
X2NoZWNrX3JlbGF5KCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJu
IFRydWUKKworICAgIGRlZiBjaGVja19idWlsZChzZWxmLCBuZWVkc19odHRwKToKKyAgICAgICAg
bmVlZHNfZHJpdmVyID0gc3VwZXIoSU9TU2ltdWxhdG9yUG9ydCwgc2VsZikuY2hlY2tfYnVpbGQo
bmVlZHNfaHR0cCkKKyAgICAgICAgcmV0dXJuIG5lZWRzX2RyaXZlciBhbmQgc2VsZi5fY2hlY2tf
YnVpbGRfcmVsYXkoKSBhbmQgc2VsZi5fY2hlY2tfYnVpbGRfaW1hZ2VfZGlmZigpCisKKyAgICBk
ZWYgX3BhdGhfdG9faW1hZ2VfZGlmZihzZWxmKToKKyAgICAgICAgbWFjX2NvbmZpZyA9IHBvcnRf
Y29uZmlnLkNvbmZpZyhzZWxmLl9leGVjdXRpdmUsIHNlbGYuX2ZpbGVzeXN0ZW0sICdtYWMnKQor
ICAgICAgICBtYWNfYnVpbGRfZGlyZWN0b3J5ID0gbWFjX2NvbmZpZy5idWlsZF9kaXJlY3Rvcnko
c2VsZi5nZXRfb3B0aW9uKCdjb25maWd1cmF0aW9uJykpCisgICAgICAgIHJldHVybiBzZWxmLl9m
aWxlc3lzdGVtLmpvaW4obWFjX2J1aWxkX2RpcmVjdG9yeSwgJ0ltYWdlRGlmZicpCisKKyAgICBk
ZWYgX2J1aWxkX3JlbGF5KHNlbGYpOgorICAgICAgICBlbnZpcm9ubWVudCA9IHNlbGYuaG9zdC5j
b3B5X2N1cnJlbnRfZW52aXJvbm1lbnQoKQorICAgICAgICBlbnZpcm9ubWVudC5kaXNhYmxlX2dj
Y19zbWFydHF1b3RlcygpCisgICAgICAgIGVudiA9IGVudmlyb25tZW50LnRvX2RpY3Rpb25hcnko
KQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3J1bl9zY3JpcHQoImJ1aWxkLWxh
eW91dHRlc3RyZWxheSIsIGVudj1lbnYpCisgICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvciwgZToK
KyAgICAgICAgICAgIF9sb2cuZXJyb3IoZS5tZXNzYWdlX3dpdGhfb3V0cHV0KG91dHB1dF9saW1p
dD1Ob25lKSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQor
CisgICAgZGVmIF9jaGVja19pbWFnZV9kaWZmKHNlbGYpOgorICAgICAgICBpbWFnZV9kaWZmX3Bh
dGggPSBzZWxmLl9wYXRoX3RvX2ltYWdlX2RpZmYoKQorICAgICAgICBpZiBub3Qgc2VsZi5fZmls
ZXN5c3RlbS5leGlzdHMoaW1hZ2VfZGlmZl9wYXRoKToKKyAgICAgICAgICAgIF9sb2cuZXJyb3Io
IiVzIHdhcyBub3QgZm91bmQgYXQgJXMiICUgKCdJbWFnZURpZmYnLCBpbWFnZV9kaWZmX3BhdGgp
KQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBk
ZWYgX2NoZWNrX2J1aWxkX2ltYWdlX2RpZmYoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9y
b290X3dhc19zZXQgYW5kIHNlbGYuZ2V0X29wdGlvbignYnVpbGQnKSBhbmQgbm90IHNlbGYuX2J1
aWxkX2RyaXZlcigpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIG5vdCBz
ZWxmLl9jaGVja19pbWFnZV9kaWZmKCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAg
ICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfYnVpbGRfaW1hZ2VfZGlmZihzZWxmKToKKyAgICAg
ICAgZW52aXJvbm1lbnQgPSBzZWxmLmhvc3QuY29weV9jdXJyZW50X2Vudmlyb25tZW50KCkKKyAg
ICAgICAgZW52aXJvbm1lbnQuZGlzYWJsZV9nY2Nfc21hcnRxdW90ZXMoKQorICAgICAgICBlbnYg
PSBlbnZpcm9ubWVudC50b19kaWN0aW9uYXJ5KCkKKworICAgICAgICB0cnk6CisgICAgICAgICAg
ICBzZWxmLl9ydW5fc2NyaXB0KCJidWlsZC1pbWFnZWRpZmYiLCBlbnY9ZW52KQorICAgICAgICBl
eGNlcHQgU2NyaXB0RXJyb3IsIGU6CisgICAgICAgICAgICBfbG9nLmVycm9yKGUubWVzc2FnZV93
aXRoX291dHB1dChvdXRwdXRfbGltaXQ9Tm9uZSkpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UK
KyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfYnVpbGRfZHJpdmVyKHNlbGYpOgorICAg
ICAgICBidWlsdF90b29sID0gc3VwZXIoSU9TU2ltdWxhdG9yUG9ydCwgc2VsZikuX2J1aWxkX2Ry
aXZlcigpCisgICAgICAgIGJ1aWx0X3JlbGF5ID0gc2VsZi5fYnVpbGRfcmVsYXkoKQorICAgICAg
ICByZXR1cm4gYnVpbHRfdG9vbCBhbmQgYnVpbHRfcmVsYXkKKworICAgIGRlZiBfYnVpbGRfZHJp
dmVyX2ZsYWdzKHNlbGYpOgorICAgICAgICBhcmNocyA9IFsnQVJDSFM9aTM4NiddIGlmIHNlbGYu
YXJjaGl0ZWN0dXJlKCkgPT0gJ3g4NicgZWxzZSBbXQorICAgICAgICBzZGsgPSBbJ1NES1JPT1Q9
aXBob25lc2ltdWxhdG9yJ10KKyAgICAgICAgcmV0dXJuIGFyY2hzICsgc2RrCisKKyAgICBkZWYg
c2hvdWxkX3JldHJ5X2NyYXNoZXMoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBk
ZWYgX2dlbmVyYXRlX2FsbF90ZXN0X2NvbmZpZ3VyYXRpb25zKHNlbGYpOgorICAgICAgICBjb25m
aWd1cmF0aW9ucyA9IFtdCisgICAgICAgIGZvciBidWlsZF90eXBlIGluIHNlbGYuQUxMX0JVSUxE
X1RZUEVTOgorICAgICAgICAgICAgY29uZmlndXJhdGlvbnMuYXBwZW5kKFRlc3RDb25maWd1cmF0
aW9uKHZlcnNpb249c2VsZi5fdmVyc2lvbiwgYXJjaGl0ZWN0dXJlPSd4ODYnLCBidWlsZF90eXBl
PWJ1aWxkX3R5cGUpKQorICAgICAgICByZXR1cm4gY29uZmlndXJhdGlvbnMKKworICAgIGRlZiBf
ZHJpdmVyX2NsYXNzKHNlbGYpOgorICAgICAgICByZXR1cm4gZHJpdmVyLklPU1NpbXVsYXRvckRy
aXZlcgorCisgICAgZGVmIGRlZmF1bHRfYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6CisgICAg
ICAgIG5hbWUgPSBzZWxmLl9uYW1lLnJlcGxhY2UoJy13azInLCAnJykKKyAgICAgICAgd2tfdmVy
c2lvbiA9IFtdIGlmIHNlbGYuZ2V0X29wdGlvbignd2Via2l0X3Rlc3RfcnVubmVyJykgZWxzZSBb
J21hYy13azEnXQorICAgICAgICBpZiBuYW1lLmVuZHN3aXRoKHNlbGYuRlVUVVJFX1ZFUlNJT04p
OgorICAgICAgICAgICAgZmFsbGJhY2tfbmFtZXMgPSB3a192ZXJzaW9uICsgW3NlbGYucG9ydF9u
YW1lXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmFsbGJhY2tfbmFtZXMgPSBzZWxmLlZF
UlNJT05fRkFMTEJBQ0tfT1JERVJbc2VsZi5WRVJTSU9OX0ZBTExCQUNLX09SREVSLmluZGV4KG5h
bWUpOi0xXSArIHdrX3ZlcnNpb24gKyBbc2VsZi5wb3J0X25hbWVdCisgICAgICAgICMgRklYTUU6
IG1hYy13azIgc2hvdWxkIGFwcGVhciBhdCB0aGUgc2FtZSBwbGFjZSBhcyBtYWMtd2sxLgorICAg
ICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ3dlYmtpdF90ZXN0X3J1bm5lcicpOgorICAgICAgICAg
ICAgZmFsbGJhY2tfbmFtZXMgPSBbc2VsZi5fd2syX3BvcnRfbmFtZSgpLCAnd2syJ10gKyBmYWxs
YmFja19uYW1lcworICAgICAgICByZXR1cm4gbWFwKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRo
LCBmYWxsYmFja19uYW1lcykKKworICAgIGRlZiBfcG9ydF9zcGVjaWZpY19leHBlY3RhdGlvbnNf
ZmlsZXMoc2VsZik6CisgICAgICAgIHJldHVybiBsaXN0KHJldmVyc2VkKFtzZWxmLl9maWxlc3lz
dGVtLmpvaW4oc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgocCksICdUZXN0RXhwZWN0YXRpb25z
JykgZm9yIHAgaW4gc2VsZi5iYXNlbGluZV9zZWFyY2hfcGF0aCgpXSkpCisKKyAgICBkZWYgc2V0
dXBfdGVzdF9ydW4oc2VsZik6CisgICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChb
J29zYXNjcmlwdCcsICctZScsICd0ZWxsIGFwcGxpY2F0aW9uICJpT1MgU2ltdWxhdG9yIiB0byBx
dWl0J10pCisgICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbc2VsZi54Y3J1bl9m
aW5kKCdzaW1jdGwnKSwgJ3NodXRkb3duJywgc2VsZi5zaW11bGF0b3JfdWRpZCgpXSwgZXJyb3Jf
aGFuZGxlcj1sYW1iZGEgZTogTm9uZSkKKworICAgIGRlZiBzZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2
ZXIoc2VsZiwgc2VydmVyX25hbWU9Tm9uZSk6CisgICAgICAgIGVudiA9IHN1cGVyKElPU1NpbXVs
YXRvclBvcnQsIHNlbGYpLnNldHVwX2Vudmlyb25fZm9yX3NlcnZlcihzZXJ2ZXJfbmFtZSkKKyAg
ICAgICAgaWYgc2VydmVyX25hbWUgPT0gc2VsZi5kcml2ZXJfbmFtZSgpOgorICAgICAgICAgICAg
aWYgc2VsZi5nZXRfb3B0aW9uKCdsZWFrcycpOgorICAgICAgICAgICAgICAgIGVudlsnTWFsbG9j
U3RhY2tMb2dnaW5nJ10gPSAnMScKKyAgICAgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignZ3Vh
cmRfbWFsbG9jJyk6CisgICAgICAgICAgICAgICAgZW52WydEWUxEX0lOU0VSVF9MSUJSQVJJRVMn
XSA9ICcvdXNyL2xpYi9saWJnbWFsbG9jLmR5bGliOicgKyBzZWxmLl9idWlsZF9wYXRoKCJsaWJX
ZWJDb3JlVGVzdFNoaW0uZHlsaWIiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg
ICBlbnZbJ0RZTERfSU5TRVJUX0xJQlJBUklFUyddID0gc2VsZi5fYnVpbGRfcGF0aCgibGliV2Vi
Q29yZVRlc3RTaGltLmR5bGliIikKKyAgICAgICAgZW52WydYTUxfQ0FUQUxPR19GSUxFUyddID0g
JycgICMgd29yayBhcm91bmQgbWlzc2luZyAvZXRjL2NhdGFsb2cgPHJkYXI6Ly9wcm9ibGVtLzQy
OTI5OTU+CisgICAgICAgIHJldHVybiBlbnYKKworICAgIGRlZiBvcGVyYXRpbmdfc3lzdGVtKHNl
bGYpOgorICAgICAgICByZXR1cm4gJ2lvcy1zaW11bGF0b3InCisKKyAgICBkZWYgY2hlY2tfZm9y
X2xlYWtzKHNlbGYsIHByb2Nlc3NfbmFtZSwgcHJvY2Vzc19waWQpOgorICAgICAgICBpZiBub3Qg
c2VsZi5nZXRfb3B0aW9uKCdsZWFrcycpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICMg
V2UgY291bGQgdXNlIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9wc3V0aWwvIHRvIGdldCB0aGUg
cHJvY2Vzc19uYW1lIGZyb20gdGhlIHBpZC4KKyAgICAgICAgc2VsZi5fbGVha19kZXRlY3Rvci5j
aGVja19mb3JfbGVha3MocHJvY2Vzc19uYW1lLCBwcm9jZXNzX3BpZCkKKworICAgIGRlZiBwcmlu
dF9sZWFrc19zdW1tYXJ5KHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5nZXRfb3B0aW9uKCds
ZWFrcycpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICMgV2UncmUgaW4gdGhlIG1hbmFn
ZXIgcHJvY2Vzcywgc28gdGhlIGxlYWsgZGV0ZWN0b3Igd2lsbCBub3QgaGF2ZSBhIHZhbGlkIGxp
c3Qgb2YgbGVhayBmaWxlcy4KKyAgICAgICAgbGVha3NfZmlsZXMgPSBzZWxmLl9sZWFrX2RldGVj
dG9yLmxlYWtzX2ZpbGVzX2luX2RpcmVjdG9yeShzZWxmLnJlc3VsdHNfZGlyZWN0b3J5KCkpCisg
ICAgICAgIGlmIG5vdCBsZWFrc19maWxlczoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB0
b3RhbF9ieXRlc19zdHJpbmcsIHVuaXF1ZV9sZWFrcyA9IHNlbGYuX2xlYWtfZGV0ZWN0b3IuY291
bnRfdG90YWxfYnl0ZXNfYW5kX3VuaXF1ZV9sZWFrcyhsZWFrc19maWxlcykKKyAgICAgICAgdG90
YWxfbGVha3MgPSBzZWxmLl9sZWFrX2RldGVjdG9yLmNvdW50X3RvdGFsX2xlYWtzKGxlYWtzX2Zp
bGVzKQorICAgICAgICBfbG9nLmluZm8oIiVzIHRvdGFsIGxlYWtzIGZvdW5kIGZvciBhIHRvdGFs
IG9mICVzISIgJSAodG90YWxfbGVha3MsIHRvdGFsX2J5dGVzX3N0cmluZykpCisgICAgICAgIF9s
b2cuaW5mbygiJXMgdW5pcXVlIGxlYWtzIGZvdW5kISIgJSB1bmlxdWVfbGVha3MpCisKKyAgICBk
ZWYgX3BhdGhfdG9fd2ViY29yZV9saWJyYXJ5KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5f
YnVpbGRfcGF0aCgnV2ViQ29yZS5mcmFtZXdvcmsvVmVyc2lvbnMvQS9XZWJDb3JlJykKKworICAg
IGRlZiBzaG93X3Jlc3VsdHNfaHRtbF9maWxlKHNlbGYsIHJlc3VsdHNfZmlsZW5hbWUpOgorICAg
ICAgICAjIFdlIGRvbid0IHVzZSBzZWxmLl9ydW5fc2NyaXB0KCkgYmVjYXVzZSB3ZSBkb24ndCB3
YW50IHRvIHdhaXQgZm9yIHRoZSBzY3JpcHQKKyAgICAgICAgIyB0byBleGl0IGFuZCB3ZSB3YW50
IHRoZSBvdXRwdXQgdG8gc2hvdyB1cCBvbiBzdGRvdXQgaW4gY2FzZSB0aGVyZSBhcmUgZXJyb3Jz
CisgICAgICAgICMgbGF1bmNoaW5nIHRoZSBicm93c2VyLgorICAgICAgICBzZWxmLl9leGVjdXRp
dmUucG9wZW4oW3NlbGYucGF0aF90b19zY3JpcHQoJ3J1bi1zYWZhcmknKV0gKyBzZWxmLl9hcmd1
bWVudHNfZm9yX2NvbmZpZ3VyYXRpb24oKSArIFsnLS1uby1zYXZlZC1zdGF0ZScsICctTlNPcGVu
JywgcmVzdWx0c19maWxlbmFtZV0sCisgICAgICAgICAgICBjd2Q9c2VsZi53ZWJraXRfYmFzZSgp
LCBzdGRvdXQ9ZmlsZShvcy5kZXZudWxsKSwgc3RkZXJyPWZpbGUob3MuZGV2bnVsbCkpCisKKyAg
ICBkZWYgYWNxdWlyZV9odHRwX2xvY2soc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBy
ZWxlYXNlX2h0dHBfbG9jayhzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHNhbXBsZV9m
aWxlX3BhdGgoc2VsZiwgbmFtZSwgcGlkKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0
ZW0uam9pbihzZWxmLnJlc3VsdHNfZGlyZWN0b3J5KCksICJ7MH0tezF9LXNhbXBsZS50eHQiLmZv
cm1hdChuYW1lLCBwaWQpKQorCisgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBp
ZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49dGltZS50aW1lLCBzbGVlcF9m
bj10aW1lLnNsZWVwLCB3YWl0X2Zvcl9sb2c9VHJ1ZSk6CisgICAgICAgIHRpbWVfZm4gPSB0aW1l
X2ZuIG9yIHRpbWUudGltZQorICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9yIHRpbWUuc2xl
ZXAKKyAgICAgICAgY3Jhc2hfbG9nID0gJycKKyAgICAgICAgY3Jhc2hfbG9ncyA9IENyYXNoTG9n
cyhzZWxmLmhvc3QpCisgICAgICAgIG5vdyA9IHRpbWVfZm4oKQorCisgICAgICAgIGNyYXNoX3By
ZWZpeCA9ICdDUkFTSDogJworICAgICAgICBzdGRlcnJfbGluZXMgPSBbXQorICAgICAgICBjcmFz
aF9saW5lcyA9IFtdCisgICAgICAgIGZvciBsaW5lIGluIHN0ZGVyci5zcGxpdGxpbmVzKCk6Cisg
ICAgICAgICAgICBjcmFzaF9saW5lcy5hcHBlbmQobGluZSkgaWYgbGluZS5zdGFydHN3aXRoKGNy
YXNoX3ByZWZpeCkgZWxzZSBzdGRlcnJfbGluZXMuYXBwZW5kKGxpbmUpCisKKyAgICAgICAgZm9y
IGNyYXNoX2xpbmUgaW4gY3Jhc2hfbGluZXM6CisgICAgICAgICAgICBpZGVudGlmaWVyLCBwaWQg
PSBjcmFzaF9saW5lW2xlbihjcmFzaF9wcmVmaXgpOl0uc3BsaXQoJyAnKQorICAgICAgICAgICAg
cmV0dXJuIHNlbGYuX2dldF9jcmFzaF9sb2coaWRlbnRpZmllciwgaW50KHBpZCksIHN0ZG91dCwg
J1xuJy5qb2luKHN0ZGVycl9saW5lcyksIG5ld2VyX3RoYW4sIHRpbWVfZm4sIHNsZWVwX2ZuLCB3
YWl0X2Zvcl9sb2cpCisKKyAgICAgICAgX2xvZy5kZWJ1ZygnbG9va2luZyBmb3IgY3Jhc2ggbG9n
IGZvciAlczolcycgJSAobmFtZSwgc3RyKHBpZCkpKQorICAgICAgICBkZWFkbGluZSA9IG5vdyAr
IDUgKiBpbnQoc2VsZi5nZXRfb3B0aW9uKCdjaGlsZF9wcm9jZXNzZXMnLCAxKSkKKyAgICAgICAg
d2hpbGUgbm90IGNyYXNoX2xvZyBhbmQgbm93IDw9IGRlYWRsaW5lOgorICAgICAgICAgICAgY3Jh
c2hfbG9nID0gY3Jhc2hfbG9ncy5maW5kX25ld2VzdF9sb2cobmFtZSwgcGlkLCBpbmNsdWRlX2Vy
cm9ycz1UcnVlLCBuZXdlcl90aGFuPW5ld2VyX3RoYW4pCisgICAgICAgICAgICBpZiBub3Qgd2Fp
dF9mb3JfbG9nOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBub3QgY3Jh
c2hfbG9nIG9yIG5vdCBbbGluZSBmb3IgbGluZSBpbiBjcmFzaF9sb2cuc3BsaXRsaW5lcygpIGlm
IG5vdCBsaW5lLnN0YXJ0c3dpdGgoJ0VSUk9SJyldOgorICAgICAgICAgICAgICAgIHNsZWVwX2Zu
KDAuMSkKKyAgICAgICAgICAgICAgICBub3cgPSB0aW1lX2ZuKCkKKworICAgICAgICBpZiBub3Qg
Y3Jhc2hfbG9nOgorICAgICAgICAgICAgcmV0dXJuIHN0ZGVyciwgTm9uZQorICAgICAgICByZXR1
cm4gc3RkZXJyLCBjcmFzaF9sb2cKKworICAgIGRlZiBzaW11bGF0b3JfdWRpZChzZWxmKToKKyAg
ICAgICAgZGV2aWNlX25hbWUgPSBzZWxmLmdldF9vcHRpb24oJ2RldmljZV90eXBlJykuc3BsaXQo
Jy4nKVstMV0ucmVwbGFjZSgnLScsICcgJykgKyAnIFdlYktpdCBUZXN0ZXInCisgICAgICAgIHN0
ZG91dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsneGNydW4nLCAnLS1zZGsnLCAnaXBob25l
c2ltdWxhdG9yJywgJ3NpbWN0bCcsICdsaXN0J10pCisgICAgICAgIGxpbmVzID0gc3Rkb3V0LnNw
bGl0bGluZXMoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZXZpY2VzX2luZGV4ID0gbGlu
ZXMuaW5kZXgoJz09IERldmljZXMgPT0nKQorICAgICAgICAgICAgZGV2aWNlX3JlZ2V4ID0gcmUu
Y29tcGlsZSgnKD9QPGRldmljZV9uYW1lPlteKF0rKSBcKCg/UDx1ZGlkPlteKV0rKVwpIFwoKD9Q
PHN0YXRlPlteKV0rKVwpJykKKyAgICAgICAgICAgIGZvciBkZXZpY2VfbGluZSBpbiBpdGVydG9v
bHMudGFrZXdoaWxlKGxhbWJkYSBsaW5lOiBub3QgbGluZS5zdGFydHN3aXRoKCc9PScpLCBsaW5l
c1tkZXZpY2VzX2luZGV4ICsgMTpdKToKKyAgICAgICAgICAgICAgICBkZXZpY2UgPSBkZXZpY2Vf
cmVnZXgubWF0Y2goZGV2aWNlX2xpbmUubHN0cmlwKCkucnN0cmlwKCkpCisgICAgICAgICAgICAg
ICAgaWYgbm90IGRldmljZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAg
ICAgICAgICBpZiBkZXZpY2UuZ3JvdXAoJ2RldmljZV9uYW1lJykgPT0gZGV2aWNlX25hbWU6Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBkZXZpY2UuZ3JvdXAoJ3VkaWQnKQorICAgICAgICBl
eGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBzaW11bGF0b3Jf
cGF0aChzZWxmLCB1ZGlkKToKKyAgICAgICAgaWYgdWRpZDoKKyAgICAgICAgICAgIHJldHVybiBv
cy5wYXRoLnJlYWxwYXRoKG9zLnBhdGguZXhwYW5kdXNlcihvcy5wYXRoLmpvaW4oJ34vTGlicmFy
eS9EZXZlbG9wZXIvQ29yZVNpbXVsYXRvci9EZXZpY2VzJywgdWRpZCkpKQorCisgICAgZGVmIGxv
b2tfZm9yX25ld19jcmFzaF9sb2dzKHNlbGYsIGNyYXNoZWRfcHJvY2Vzc2VzLCBzdGFydF90aW1l
KToKKyAgICAgICAgY3Jhc2hfbG9ncyA9IHt9CisgICAgICAgIGZvciAodGVzdF9uYW1lLCBwcm9j
ZXNzX25hbWUsIHBpZCkgaW4gY3Jhc2hlZF9wcm9jZXNzZXM6CisgICAgICAgICAgICAjIFBhc3Np
bmcgTm9uZSBmb3Igb3V0cHV0LiAgVGhpcyBpcyBhIHNlY29uZCBwYXNzIGFmdGVyIHRoZSB0ZXN0
IGZpbmlzaGVkIHNvCisgICAgICAgICAgICAjIGlmIHRoZSBvdXRwdXQgaGFkIGFueSBsb2dnaW5n
IHdlIHdvdWxkIGhhdmUgYWxyZWFkeSBjb2xsZWN0ZWQgaXQuCisgICAgICAgICAgICBjcmFzaF9s
b2cgPSBzZWxmLl9nZXRfY3Jhc2hfbG9nKHByb2Nlc3NfbmFtZSwgcGlkLCBOb25lLCBOb25lLCBz
dGFydF90aW1lLCB3YWl0X2Zvcl9sb2c9RmFsc2UpWzFdCisgICAgICAgICAgICBpZiBub3QgY3Jh
c2hfbG9nOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBjcmFzaF9sb2dz
W3Rlc3RfbmFtZV0gPSBjcmFzaF9sb2cKKyAgICAgICAgcmV0dXJuIGNyYXNoX2xvZ3MKKworICAg
IGRlZiBsb29rX2Zvcl9uZXdfc2FtcGxlcyhzZWxmLCB1bnJlc3BvbnNpdmVfcHJvY2Vzc2VzLCBz
dGFydF90aW1lKToKKyAgICAgICAgc2FtcGxlX2ZpbGVzID0ge30KKyAgICAgICAgZm9yICh0ZXN0
X25hbWUsIHByb2Nlc3NfbmFtZSwgcGlkKSBpbiB1bnJlc3BvbnNpdmVfcHJvY2Vzc2VzOgorICAg
ICAgICAgICAgc2FtcGxlX2ZpbGUgPSBzZWxmLnNhbXBsZV9maWxlX3BhdGgocHJvY2Vzc19uYW1l
LCBwaWQpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZXN5c3RlbS5pc2ZpbGUoc2FtcGxl
X2ZpbGUpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzYW1wbGVfZmls
ZXNbdGVzdF9uYW1lXSA9IHNhbXBsZV9maWxlCisgICAgICAgIHJldHVybiBzYW1wbGVfZmlsZXMK
KworICAgIGRlZiBzYW1wbGVfcHJvY2VzcyhzZWxmLCBuYW1lLCBwaWQpOgorICAgICAgICB0cnk6
CisgICAgICAgICAgICBoYW5nX3JlcG9ydCA9IHNlbGYuc2FtcGxlX2ZpbGVfcGF0aChuYW1lLCBw
aWQpCisgICAgICAgICAgICBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoWworICAgICAgICAg
ICAgICAgICIvdXNyL2Jpbi9zYW1wbGUiLAorICAgICAgICAgICAgICAgIHBpZCwKKyAgICAgICAg
ICAgICAgICAxMCwKKyAgICAgICAgICAgICAgICAxMCwKKyAgICAgICAgICAgICAgICAiLWZpbGUi
LAorICAgICAgICAgICAgICAgIGhhbmdfcmVwb3J0LAorICAgICAgICAgICAgXSkKKyAgICAgICAg
ZXhjZXB0IFNjcmlwdEVycm9yIGFzIGU6CisgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ1VuYWJs
ZSB0byBzYW1wbGUgcHJvY2VzczonICsgc3RyKGUpKQorCisgICAgZGVmIF9wYXRoX3RvX2hlbHBl
cihzZWxmKToKKyAgICAgICAgYmluYXJ5X25hbWUgPSAnTGF5b3V0VGVzdEhlbHBlcicKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoYmluYXJ5X25hbWUpCisKKyAgICBkZWYgcmVzZXRf
cHJlZmVyZW5jZXMoc2VsZik6CisgICAgICAgIHNpbXVsYXRvcl9wYXRoID0gc2VsZi5zaW11bGF0
b3JfcGF0aChzZWxmLnNpbXVsYXRvcl91ZGlkKCkpCisgICAgICAgIGlmIG5vdCBzaW11bGF0b3Jf
cGF0aDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBkYXRhX3BhdGggPSBvcy5wYXRoLmpv
aW4oc2ltdWxhdG9yX3BhdGgsICdkYXRhJykKKyAgICAgICAgaWYgb3MucGF0aC5pc2RpcihkYXRh
X3BhdGgpOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShkYXRhX3BhdGgpCisKKyAgICBkZWYg
bWFrZV9jb21tYW5kKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi54Y3J1bl9maW5kKCdtYWtl
JywgJy91c3IvYmluL21ha2UnKQorCisgICAgZGVmIG5tX2NvbW1hbmQoc2VsZik6CisgICAgICAg
IHJldHVybiBzZWxmLnhjcnVuX2ZpbmQoJ25tJykKKworICAgIGRlZiB4Y3J1bl9maW5kKHNlbGYs
IGNvbW1hbmQsIGZhbGxiYWNrPU5vbmUpOgorICAgICAgICBmYWxsYmFjayA9IGZhbGxiYWNrIG9y
IGNvbW1hbmQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1dGl2
ZS5ydW5fY29tbWFuZChbJ3hjcnVuJywgJy0tc2RrJywgJ2lwaG9uZXNpbXVsYXRvcicsICctZmlu
ZCcsIGNvbW1hbmRdKS5yc3RyaXAoKQorICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3I6CisgICAg
ICAgICAgICBfbG9nLndhcm4oInhjcnVuIGZhaWxlZDsgZmFsbGluZyBiYWNrIHRvICclcycuIiAl
IGZhbGxiYWNrKQorICAgICAgICAgICAgcmV0dXJuIGZhbGxiYWNrCisKKyAgICBkZWYgbG9nZ2lu
Z19wYXR0ZXJuc190b19zdHJpcChzZWxmKToKKyAgICAgICAgcmV0dXJuIFtdCg==
</data>
<flag name="review"
          id="260054"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>