<?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>57891</bug_id>
          
          <creation_ts>2011-04-05 15:13:01 -0700</creation_ts>
          <short_desc>Rebaseline queue server</short_desc>
          <delta_ts>2011-04-13 15:54:35 -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>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Mihai Parparita">mihaip</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dpranke</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>379898</commentid>
    <comment_count>0</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-04-05 15:13:01 -0700</bug_when>
    <thetext>For the Chromium GPU bots we&apos;d like to have a friendly web UI for triggering rebaselines (the bots will have per-machine expectations, so updating them by hand would be too tedious). This generally seems like a useful concept for gardening (and for all bots).

Something like:
- http://rebaseline-queue.appspot.com/add gives a GUI that lists the bots and for a bot, the currently (unexpected) failing tests
- User checks the boxes for the tests they want rebaselined
- Form submission POSTs to http://rebaseline-queue.appspot.com/&lt;bot-name&gt;/queue/add, that adds them to the datastore
- http://rebaseline-queue.appspot.com/&lt;bot-name&gt;/queue dumps a JSON list of the tests that were selected for rebaseline
- http://rebaseline-queue.appspot.com/&lt;bot-name&gt;/queue/remove removes passed in tests from that bot&apos;s rebaseline list

The GPU bots would run a script that pulls from their queue, runs with --reset-results and then removes the rebaseline tests.

If we had something like Dimitri&apos;s LaTER, that could also use the queue to make a gardener&apos;s job easier.

 (this could also be done as part of the existing test results server, but I don&apos;t think it would share too much functionality with it)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379969</commentid>
    <comment_count>1</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-05 16:59:31 -0700</bug_when>
    <thetext>Yep.  We want something similar for the normal gardening bots.  It would be nice if there was an &quot;record as failure&quot; button too that updated test_expectations.txt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380028</commentid>
    <comment_count>2</comment_count>
      <attachid>88349</attachid>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-04-05 18:56:58 -0700</bug_when>
    <thetext>Created attachment 88349
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380033</commentid>
    <comment_count>3</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-04-05 19:00:09 -0700</bug_when>
    <thetext>Attached is the initial skeleton for this. It has a picker for letting you choose which builder group and builder to act on: http://rebaseline-queue.appspot.com/add

As well as a URL for listing the tests for a bot directly: http://rebaseline-queue.appspot.com/builder/GPU%20XP%20Tests%20-%20GPU/queue/add

You can see what&apos;s already been queued for a bot: http://rebaseline-queue.appspot.com/builder/GPU%20XP%20Tests%20-%20GPU/queue (also as JSON: http://rebaseline-queue.appspot.com/builder/GPU%20XP%20Tests%20-%20GPU/queue/json)

There&apos;s also the add/remove POST handlers too.

(In reply to comment #1)
&gt; It would be nice if there was an &quot;record as failure&quot; button too that updated test_expectations.txt.

Perhaps the best way to accomodate something like this is to add an &quot;action&quot; field to QueueEntry. For the GPU case, it would be &quot;rebaseline&quot;, for your case it would be &quot;recordfailure.&quot; Different bots can then pull different actions from a bot&apos;s queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380052</commentid>
    <comment_count>4</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-04-05 19:27:54 -0700</bug_when>
    <thetext>Now that I think about it, the generic add/remove/list queue functionality may already be covered by QueueStatusServer. I&apos;ll look into whether that can just be used tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385246</commentid>
    <comment_count>5</comment_count>
      <attachid>89462</attachid>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-04-13 14:33:35 -0700</bug_when>
    <thetext>Created attachment 89462
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385249</commentid>
    <comment_count>6</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-04-13 14:35:20 -0700</bug_when>
    <thetext>Still running at http://rebaseline-queue.appspot.com/ if you&apos;re like to play around with it.

Sorry if the patch is on the large side. If it&apos;s easier to review, I can break it up (though it&apos;s all pretty straightforward code, and a bunch of App Engine boilerplate).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385266</commentid>
    <comment_count>7</comment_count>
      <attachid>89462</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-13 14:50:46 -0700</bug_when>
    <thetext>Comment on attachment 89462
Patch

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

Seems reasonable from a high level.  I&apos;m hapy to rs=me, this.  If you were looking for a nitty-gritty review, I&apos;m not very useful as I dont&apos; understand the full architecture behind the rebaseline queue server (or what it&apos;s really for).

&gt; Tools/RebaselineQueueServer/app.yaml:4
&gt; +application: rebaseline-queue
&gt; +version: 1
&gt; +runtime: python
&gt; +api_version: 1

Do you want to request a newer version of django here?

&gt; Tools/RebaselineQueueServer/handlers/builderqueue.py:66
&gt; +        for test in tests:
&gt; +            if test not in current_tests:

Isn&apos;t this just a set intersection?

&gt; Tools/RebaselineQueueServer/handlers/builderqueue.py:69
&gt; +        self.redirect(&apos;/builder/%s/queue&apos; % builder_name)

You might want something to generate these URLs.

&gt; Tools/RebaselineQueueServer/handlers/pages.py:37
&gt; +        builder_names = QueueEntry.get_builder_names()

get_ isn&apos;t really webkit style.

&gt; Tools/RebaselineQueueServer/main.py:31
&gt; +use_library(&apos;django&apos;, &apos;1.2&apos;)

I thought it was possible to do this in app.yaml these days.  But I may be wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385321</commentid>
    <comment_count>8</comment_count>
      <attachid>89462</attachid>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-04-13 15:50:45 -0700</bug_when>
    <thetext>Comment on attachment 89462
Patch

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

&gt;&gt; Tools/RebaselineQueueServer/handlers/builderqueue.py:66
&gt;&gt; +            if test not in current_tests:
&gt; 
&gt; Isn&apos;t this just a set intersection?

Difference, but yes. Changed.

&gt;&gt; Tools/RebaselineQueueServer/handlers/builderqueue.py:69
&gt;&gt; +        self.redirect(&apos;/builder/%s/queue&apos; % builder_name)
&gt; 
&gt; You might want something to generate these URLs.

Added _queue_list_url to QueueHandler.

&gt;&gt; Tools/RebaselineQueueServer/handlers/pages.py:37
&gt;&gt; +        builder_names = QueueEntry.get_builder_names()
&gt; 
&gt; get_ isn&apos;t really webkit style.

Renamed to builder_names (and get_for_builder_name to entries_for_builder).

&gt;&gt; Tools/RebaselineQueueServer/main.py:31
&gt;&gt; +use_library(&apos;django&apos;, &apos;1.2&apos;)
&gt; 
&gt; I thought it was possible to do this in app.yaml these days.  But I may be wrong.

http://code.google.com/appengine/docs/python/tools/libraries.html#Django only mentions doing it from main.py.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385324</commentid>
    <comment_count>9</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-04-13 15:54:35 -0700</bug_when>
    <thetext>Committed r83781: &lt;http://trac.webkit.org/changeset/83781&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88349</attachid>
            <date>2011-04-05 18:56:58 -0700</date>
            <delta_ts>2011-04-13 14:33:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57891-20110405185657.patch</filename>
            <type>text/plain</type>
            <size>22781</size>
            <attacher name="Mihai Parparita">mihaip</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODI5OTgKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA0MGQyN2NhOWNmZDlmMzg1NTlmNDAyYmVmZTdmODdhMDhi
YTVlYzkzLi5kNjM0MDYxMmMzNjNmMzcxZjM0NzY0YTJmMzU4MTQxMDQ3N2NhMmZlIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMzIg
QEAKIDIwMTEtMDQtMDUgIE1paGFpIFBhcnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+CiAK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmViYXNlbGlu
ZSBxdWV1ZSBzZXJ2ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU3ODkxCisgICAgICAgIAorICAgICAgICBJbml0aWFsIHJlYmFzZWxpbmUgcXVldWUg
c2VydmVyLgorCisgICAgICAgICogUmViYXNlbGluZVF1ZXVlU2VydmVyL2FwcC55YW1sOiBBZGRl
ZC4KKyAgICAgICAgKiBSZWJhc2VsaW5lUXVldWVTZXJ2ZXIvaGFuZGxlcnMvX19pbml0X18ucHk6
IEFkZGVkLgorICAgICAgICAqIFJlYmFzZWxpbmVRdWV1ZVNlcnZlci9oYW5kbGVycy9hZGQucHk6
IEFkZGVkLgorICAgICAgICAqIFJlYmFzZWxpbmVRdWV1ZVNlcnZlci9oYW5kbGVycy9idWlsZGVy
LnB5OiBBZGRlZC4KKyAgICAgICAgKiBSZWJhc2VsaW5lUXVldWVTZXJ2ZXIvaW5kZXgueWFtbDog
QWRkZWQuCisgICAgICAgICogUmViYXNlbGluZVF1ZXVlU2VydmVyL21haW4ucHk6IEFkZGVkLgor
ICAgICAgICAqIFJlYmFzZWxpbmVRdWV1ZVNlcnZlci9tb2RlbC9fX2luaXRfXy5weTogQWRkZWQu
CisgICAgICAgICogUmViYXNlbGluZVF1ZXVlU2VydmVyL21vZGVsL3F1ZXVlZW50cnkucHk6IEFk
ZGVkLgorICAgICAgICAqIFJlYmFzZWxpbmVRdWV1ZVNlcnZlci9zdGF0aWMvc3R5bGVzLmNzczog
QWRkZWQuCisgICAgICAgIChib2R5KToKKyAgICAgICAgKCNzdGF0dXMpOgorICAgICAgICAoI2Zh
aWxpbmctdGVzdHMpOgorICAgICAgICAoI2ZhaWxpbmctdGVzdHMgY2FwdGlvbik6CisgICAgICAg
ICgjZmFpbGluZy10ZXN0cyB0aCk6CisgICAgICAgICgjZmFpbGluZy10ZXN0cyAjc3VibWl0LXJv
dyk6CisgICAgICAgICogUmViYXNlbGluZVF1ZXVlU2VydmVyL3RlbXBsYXRlcy9hZGQtZm9ybS5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBSZWJhc2VsaW5lUXVldWVTZXJ2ZXIvdGVtcGxhdGVzL2J1
aWxkZXItcXVldWUuaHRtbDogQWRkZWQuCisKKzIwMTEtMDQtMDUgIE1paGFpIFBhcnBhcml0YSAg
PG1paGFpcEBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgUmV2aWV3ZWQgYnkgT2phbiBWYWZhaS4K
IAogICAgICAgICBBZGQgYnVpbGRlcnMuanMgdG8gZGFzaGJvYXJkIGZpbGUgbGlzdApkaWZmIC0t
Z2l0IGEvVG9vbHMvUmViYXNlbGluZVF1ZXVlU2VydmVyL2FwcC55YW1sIGIvVG9vbHMvUmViYXNl
bGluZVF1ZXVlU2VydmVyL2FwcC55YW1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0MjVjZmQ1OTgxMGM1NzQ0YjBh
YTBlZWQ5YzU3MzYxZDRmYmQ4YzYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9SZWJhc2VsaW5l
UXVldWVTZXJ2ZXIvYXBwLnlhbWwKQEAgLTAsMCArMSwxMSBAQAorYXBwbGljYXRpb246IHJlYmFz
ZWxpbmUtcXVldWUKK3ZlcnNpb246IDEKK3J1bnRpbWU6IHB5dGhvbgorYXBpX3ZlcnNpb246IDEK
KworaGFuZGxlcnM6CistIHVybDogL3N0YXRpYworICBzdGF0aWNfZGlyOiBzdGF0aWMKKworLSB1
cmw6IC4qCisgIHNjcmlwdDogbWFpbi5weQpkaWZmIC0tZ2l0IGEvVG9vbHMvUmViYXNlbGluZVF1
ZXVlU2VydmVyL2hhbmRsZXJzL19faW5pdF9fLnB5IGIvVG9vbHMvUmViYXNlbGluZVF1ZXVlU2Vy
dmVyL2hhbmRsZXJzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVmNjViZWU1YmI3N2U5NmViYzdj
ZDljNDc2NDA2OTBmYmRhOGFjMTkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9SZWJhc2VsaW5l
UXVldWVTZXJ2ZXIvaGFuZGxlcnMvX19pbml0X18ucHkKQEAgLTAsMCArMSBAQAorIyBSZXF1aXJl
ZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9kdWxlIGZpbGVzCmRp
ZmYgLS1naXQgYS9Ub29scy9SZWJhc2VsaW5lUXVldWVTZXJ2ZXIvaGFuZGxlcnMvYWRkLnB5IGIv
VG9vbHMvUmViYXNlbGluZVF1ZXVlU2VydmVyL2hhbmRsZXJzL2FkZC5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45
OGI1ZjhjMTM1NGNkM2VhYjdkODVkODYwZGQwMGRiYjBmYzQwNzI4Ci0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvUmViYXNlbGluZVF1ZXVlU2VydmVyL2hhbmRsZXJzL2FkZC5weQpAQCAtMCwwICsx
LDM1IEBACisjIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJp
YnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dCBpbXBv
cnQgd2ViYXBwCitmcm9tIGdvb2dsZS5hcHBlbmdpbmUuZXh0LndlYmFwcCBpbXBvcnQgdGVtcGxh
dGUKKworY2xhc3MgQWRkRm9ybSh3ZWJhcHAuUmVxdWVzdEhhbmRsZXIpOgorICAgIGRlZiBnZXQo
c2VsZik6CisgICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKAorICAgICAgICAgICAgdGVt
cGxhdGUucmVuZGVyKCJ0ZW1wbGF0ZXMvYWRkLWZvcm0uaHRtbCIsIHt9KSkKZGlmZiAtLWdpdCBh
L1Rvb2xzL1JlYmFzZWxpbmVRdWV1ZVNlcnZlci9oYW5kbGVycy9idWlsZGVyLnB5IGIvVG9vbHMv
UmViYXNlbGluZVF1ZXVlU2VydmVyL2hhbmRsZXJzL2J1aWxkZXIucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODZh
YmFlNzQ5MzRiMjk1NDgzZDQ5OTYzZTM1OTU2ZjEwOTg5MTg1ZAotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL1JlYmFzZWxpbmVRdWV1ZVNlcnZlci9oYW5kbGVycy9idWlsZGVyLnB5CkBAIC0wLDAg
KzEsODAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0
cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmcm9tIHVybGxpYiBpbXBvcnQgdW5xdW90ZV9w
bHVzIGFzIHVucXVvdGUKKworZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dCBpbXBvcnQgd2ViYXBw
Citmcm9tIGdvb2dsZS5hcHBlbmdpbmUuZXh0LndlYmFwcCBpbXBvcnQgdGVtcGxhdGUKK2Zyb20g
ZGphbmdvLnV0aWxzIGltcG9ydCBzaW1wbGVqc29uCisKK2Zyb20gbW9kZWwucXVldWVlbnRyeSBp
bXBvcnQgUXVldWVFbnRyeQorCitjbGFzcyBRdWV1ZUFkZCh3ZWJhcHAuUmVxdWVzdEhhbmRsZXIp
OgorICAgIGRlZiBnZXQoc2VsZiwgYnVpbGRlcl9uYW1lKToKKyAgICAgICAgYnVpbGRlcl9uYW1l
ID0gdW5xdW90ZShidWlsZGVyX25hbWUpCisgICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRl
KAorICAgICAgICAgICAgdGVtcGxhdGUucmVuZGVyKCJ0ZW1wbGF0ZXMvYWRkLWZvcm0uaHRtbCIs
IHsKKyAgICAgICAgICAgICAgICAnYnVpbGRlcl9uYW1lJzogYnVpbGRlcl9uYW1lLAorICAgICAg
ICAgICAgfSkpCisgICAgCisgICAgZGVmIHBvc3Qoc2VsZiwgYnVpbGRlcl9uYW1lKToKKyAgICAg
ICAgYnVpbGRlcl9uYW1lID0gdW5xdW90ZShidWlsZGVyX25hbWUpCisgICAgICAgIHRlc3RzID0g
c2VsZi5yZXF1ZXN0LmdldF9hbGwoJ3Rlc3QnKQorICAgICAgICAKKyAgICAgICAgY3VycmVudF90
ZXN0cyA9IHNldChbZW50cnkudGVzdCBmb3IgZW50cnkgaW4gUXVldWVFbnRyeS5nZXRfZm9yX2J1
aWxkZXJfbmFtZShidWlsZGVyX25hbWUpXSkKKyAgICAgICAgCisgICAgICAgIGZvciB0ZXN0IGlu
IHRlc3RzOgorICAgICAgICAgICAgaWYgdGVzdCBub3QgaW4gY3VycmVudF90ZXN0czoKKyAgICAg
ICAgICAgICAgICBRdWV1ZUVudHJ5LmFkZChidWlsZGVyX25hbWUsIHRlc3QpCisKKyAgICAgICAg
c2VsZi5yZWRpcmVjdCgnL2J1aWxkZXIvJXMvcXVldWUnICUgYnVpbGRlcl9uYW1lKQorCitjbGFz
cyBRdWV1ZVJlbW92ZSh3ZWJhcHAuUmVxdWVzdEhhbmRsZXIpOgorICAgIGRlZiBwb3N0KHNlbGYs
IGJ1aWxkZXJfbmFtZSk6CisgICAgICAgIGJ1aWxkZXJfbmFtZSA9IHVucXVvdGUoYnVpbGRlcl9u
YW1lKQorICAgICAgICB0ZXN0cyA9IHNlbGYucmVxdWVzdC5nZXRfYWxsKCd0ZXN0JykKKyAgICAg
ICAgCisgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgorICAgICAgICAgICAgUXVldWVFbnRyeS5y
ZW1vdmUoYnVpbGRlcl9uYW1lLCB0ZXN0KQorICAgICAgICAKKyAgICAgICAgc2VsZi5yZWRpcmVj
dCgnL2J1aWxkZXIvJXMvcXVldWUnICUgYnVpbGRlcl9uYW1lKQorCitjbGFzcyBRdWV1ZSh3ZWJh
cHAuUmVxdWVzdEhhbmRsZXIpOgorICAgIGRlZiBnZXQoc2VsZiwgYnVpbGRlcl9uYW1lKToKKyAg
ICAgICAgYnVpbGRlcl9uYW1lID0gdW5xdW90ZShidWlsZGVyX25hbWUpCisgICAgICAgIHNlbGYu
cmVzcG9uc2Uub3V0LndyaXRlKAorICAgICAgICAgICAgdGVtcGxhdGUucmVuZGVyKCJ0ZW1wbGF0
ZXMvYnVpbGRlci1xdWV1ZS5odG1sIiwgeworICAgICAgICAgICAgICAgICAgICAnYnVpbGRlcl9u
YW1lJzogYnVpbGRlcl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAnZW50cmllcyc6IFF1ZXVl
RW50cnkuZ2V0X2Zvcl9idWlsZGVyX25hbWUoYnVpbGRlcl9uYW1lKQorICAgICAgICAgICAgICAg
IH0pKQorCitjbGFzcyBRdWV1ZUpzb24od2ViYXBwLlJlcXVlc3RIYW5kbGVyKToKKyAgICBkZWYg
Z2V0KHNlbGYsIGJ1aWxkZXJfbmFtZSk6CisgICAgICAgIGJ1aWxkZXJfbmFtZSA9IHVucXVvdGUo
YnVpbGRlcl9uYW1lKQorICAgICAgICB0ZXN0X25hbWVzID0gW2VudHJ5LnRlc3QgZm9yIGVudHJ5
IGluIFF1ZXVlRW50cnkuZ2V0X2Zvcl9idWlsZGVyX25hbWUoYnVpbGRlcl9uYW1lKV0KKyAgICAg
ICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUoc2ltcGxlanNvbi5kdW1wcyh7J3Rlc3RzJzogdGVz
dF9uYW1lc30pKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1JlYmFzZWxpbmVRdWV1ZVNlcnZlci9pbmRl
eC55YW1sIGIvVG9vbHMvUmViYXNlbGluZVF1ZXVlU2VydmVyL2luZGV4LnlhbWwKbmV3IGZpbGUg
bW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYTNiOWUwNWUzNTE3YWFlY2M2ZWFkMTgxNTgzMzNkMmQyYTIwOGM3NAotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL1JlYmFzZWxpbmVRdWV1ZVNlcnZlci9pbmRleC55YW1sCkBAIC0wLDAgKzEs
MTEgQEAKK2luZGV4ZXM6CisKKyMgQVVUT0dFTkVSQVRFRAorCisjIFRoaXMgaW5kZXgueWFtbCBp
cyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgd2hlbmV2ZXIgdGhlIGRldl9hcHBzZXJ2ZXIKKyMgZGV0
ZWN0cyB0aGF0IGEgbmV3IHR5cGUgb2YgcXVlcnkgaXMgcnVuLiAgSWYgeW91IHdhbnQgdG8gbWFu
YWdlIHRoZQorIyBpbmRleC55YW1sIGZpbGUgbWFudWFsbHksIHJlbW92ZSB0aGUgYWJvdmUgbWFy
a2VyIGxpbmUgKHRoZSBsaW5lCisjIHNheWluZyAiIyBBVVRPR0VORVJBVEVEIikuICBJZiB5b3Ug
d2FudCB0byBtYW5hZ2Ugc29tZSBpbmRleGVzCisjIG1hbnVhbGx5LCBtb3ZlIHRoZW0gYWJvdmUg
dGhlIG1hcmtlciBsaW5lLiAgVGhlIGluZGV4LnlhbWwgZmlsZSBpcworIyBhdXRvbWF0aWNhbGx5
IHVwbG9hZGVkIHRvIHRoZSBhZG1pbiBjb25zb2xlIHdoZW4geW91IG5leHQgZGVwbG95CisjIHlv
dXIgYXBwbGljYXRpb24gdXNpbmcgYXBwY2ZnLnB5LgpkaWZmIC0tZ2l0IGEvVG9vbHMvUmViYXNl
bGluZVF1ZXVlU2VydmVyL21haW4ucHkgYi9Ub29scy9SZWJhc2VsaW5lUXVldWVTZXJ2ZXIvbWFp
bi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4wZTU3NDcxYTc3NWQ2ZmI2OThjZGE4ZTU1NzE4ZTljNGE1YzIzNjEy
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvUmViYXNlbGluZVF1ZXVlU2VydmVyL21haW4ucHkK
QEAgLTAsMCArMSw1MiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0Ogor
IworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyMgUmVxdWVzdCBhIG1vZGVybiBE
amFuZ28KK2Zyb20gZ29vZ2xlLmFwcGVuZ2luZS5kaXN0IGltcG9ydCB1c2VfbGlicmFyeQordXNl
X2xpYnJhcnkoJ2RqYW5nbycsICcxLjInKQorCitmcm9tIGdvb2dsZS5hcHBlbmdpbmUuZXh0IGlt
cG9ydCB3ZWJhcHAKK2Zyb20gZ29vZ2xlLmFwcGVuZ2luZS5leHQud2ViYXBwIGltcG9ydCB1dGls
CisKK2Zyb20gaGFuZGxlcnMgaW1wb3J0IGFkZAorZnJvbSBoYW5kbGVycyBpbXBvcnQgYnVpbGRl
cgorCitkZWYgbWFpbigpOgorICAgIGFwcGxpY2F0aW9uID0gd2ViYXBwLldTR0lBcHBsaWNhdGlv
bihbCisgICAgICAgICAgKCcvJywgYWRkLkFkZEZvcm0pLAorICAgICAgICAgICgnL2FkZCcsIGFk
ZC5BZGRGb3JtKSwKKyAgICAgICAgICAoJy9idWlsZGVyLyguKykvcXVldWUvYWRkJywgYnVpbGRl
ci5RdWV1ZUFkZCksCisgICAgICAgICAgKCcvYnVpbGRlci8oLispL3F1ZXVlL3JlbW92ZScsIGJ1
aWxkZXIuUXVldWVSZW1vdmUpLAorICAgICAgICAgICgnL2J1aWxkZXIvKC4rKS9xdWV1ZScsIGJ1
aWxkZXIuUXVldWUpLAorICAgICAgICAgICgnL2J1aWxkZXIvKC4rKS9xdWV1ZS9qc29uJywgYnVp
bGRlci5RdWV1ZUpzb24pLAorICAgICAgICBdLAorICAgICAgICBkZWJ1Zz1UcnVlKQorICAgIHV0
aWwucnVuX3dzZ2lfYXBwKGFwcGxpY2F0aW9uKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18n
OgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvUmViYXNlbGluZVF1ZXVlU2VydmVyL21v
ZGVsL19faW5pdF9fLnB5IGIvVG9vbHMvUmViYXNlbGluZVF1ZXVlU2VydmVyL21vZGVsL19faW5p
dF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmVmNjViZWU1YmI3N2U5NmViYzdjZDljNDc2NDA2OTBmYmRhOGFj
MTkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9SZWJhc2VsaW5lUXVldWVTZXJ2ZXIvbW9kZWwv
X19pbml0X18ucHkKQEAgLTAsMCArMSBAQAorIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJj
aCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9kdWxlIGZpbGVzCmRpZmYgLS1naXQgYS9Ub29scy9SZWJh
c2VsaW5lUXVldWVTZXJ2ZXIvbW9kZWwvcXVldWVlbnRyeS5weSBiL1Rvb2xzL1JlYmFzZWxpbmVR
dWV1ZVNlcnZlci9tb2RlbC9xdWV1ZWVudHJ5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg3MDlhMzRlYTBjNDYz
Njc2NGYxZWI1MDcwMDY1Yzk0NWM1YmU0NjkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9SZWJh
c2VsaW5lUXVldWVTZXJ2ZXIvbW9kZWwvcXVldWVlbnRyeS5weQpAQCAtMCwwICsxLDU0IEBACisj
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgor
IyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dCBpbXBvcnQgZGIKKwor
Y2xhc3MgUXVldWVFbnRyeShkYi5Nb2RlbCk6CisgICAgdGVzdCA9IGRiLlN0cmluZ1Byb3BlcnR5
KCkKKyAgICBidWlsZGVyID0gZGIuU3RyaW5nUHJvcGVydHkoKQorCisgICAgQHN0YXRpY21ldGhv
ZAorICAgIGRlZiBhZGQoYnVpbGRlcl9uYW1lLCB0ZXN0KToKKyAgICAgICAgZW50cnkgPSBRdWV1
ZUVudHJ5KCkKKyAgICAgICAgZW50cnkuYnVpbGRlciA9IGJ1aWxkZXJfbmFtZQorICAgICAgICBl
bnRyeS50ZXN0ID0gdGVzdAorICAgICAgICBlbnRyeS5wdXQoKQorICAgICAgICByZXR1cm4gZW50
cnkKKyAgICAgICAgCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiByZW1vdmUoYnVpbGRlcl9u
YW1lLCB0ZXN0KToKKyAgICAgICAgcXVlcnkgPSBRdWV1ZUVudHJ5LmFsbCgpCisgICAgICAgIHF1
ZXJ5ID0gcXVlcnkuZmlsdGVyKCdidWlsZGVyID0nLCBidWlsZGVyX25hbWUpLmZpbHRlcigndGVz
dCA9JywgdGVzdCkKKyAgICAgICAgZm9yIGVudHJ5IGluIHF1ZXJ5OgorICAgICAgICAgICAgZW50
cnkuZGVsZXRlKCkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZ2V0X2Zvcl9idWlsZGVy
X25hbWUoYnVpbGRlcl9uYW1lKToKKyAgICAgICAgcXVlcnkgPSBRdWV1ZUVudHJ5LmFsbCgpCisg
ICAgICAgIHF1ZXJ5ID0gcXVlcnkuZmlsdGVyKCdidWlsZGVyID0nLCBidWlsZGVyX25hbWUpCisg
ICAgICAgIHJldHVybiBxdWVyeQpkaWZmIC0tZ2l0IGEvVG9vbHMvUmViYXNlbGluZVF1ZXVlU2Vy
dmVyL3N0YXRpYy9zdHlsZXMuY3NzIGIvVG9vbHMvUmViYXNlbGluZVF1ZXVlU2VydmVyL3N0YXRp
Yy9zdHlsZXMuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEwMWUzNzY0OGU2Y2FkODcxYTE0MWE0M2E5OGUzMDYy
ZmIwYzk3NTYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9SZWJhc2VsaW5lUXVldWVTZXJ2ZXIv
c3RhdGljL3N0eWxlcy5jc3MKQEAgLTAsMCArMSwzNCBAQAorYm9keSB7CisgIGZvbnQtZmFtaWx5
OiBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOworICBmb250LXNpemU6IDEycHg7Cit9CisK
KyNzdGF0dXMgeworICBmb250LXNpemU6IDE2cHg7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAg
cGFkZGluZzogMWVtOworfQorCisjZmFpbGluZy10ZXN0cyB7CisgIGJvcmRlci1jb2xsYXBzZTog
Y29sbGFwc2U7CisgIG1hcmdpbjogMWVtIDA7Cit9CisKKyNmYWlsaW5nLXRlc3RzIGNhcHRpb24g
eworICBmb250LXNpemU6IDE2cHg7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworICBiYWNrZ3JvdW5k
OiAjZWVlOworICBwYWRkaW5nOiAuNWVtOworfQorCisjZmFpbGluZy10ZXN0cyB0aCB7CisgIHRl
eHQtYWxpZ246IGxlZnQ7CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCAjY2NjOworICBiYWNr
Z3JvdW5kOiAjZWVlOworICBtaW4td2lkdGg6IDhlbTsKK30KKworI2ZhaWxpbmctdGVzdHMgI3N1
Ym1pdC1yb3cgeworICB0ZXh0LWFsaWduOiByaWdodDsKKyAgcGFkZGluZzogMWVtIDA7Cit9CmRp
ZmYgLS1naXQgYS9Ub29scy9SZWJhc2VsaW5lUXVldWVTZXJ2ZXIvdGVtcGxhdGVzL2FkZC1mb3Jt
Lmh0bWwgYi9Ub29scy9SZWJhc2VsaW5lUXVldWVTZXJ2ZXIvdGVtcGxhdGVzL2FkZC1mb3JtLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMzFkOGQyYjc4ZGU3NTYwMDlhN2QxNGZjYjM2MGJhZDIzZWFhYmI1NAot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1JlYmFzZWxpbmVRdWV1ZVNlcnZlci90ZW1wbGF0ZXMv
YWRkLWZvcm0uaHRtbApAQCAtMCwwICsxLDIwMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxoZWFkPgorCTx0aXRsZT5SZWJhc2VsaW5lIFF1ZXVlOiBBZGQ8L3RpdGxlPgorCTxzY3JpcHQg
c3JjPSJodHRwOi8vdGVzdC1yZXN1bHRzLmFwcHNwb3QuY29tL2Rhc2hib2FyZHMvYnVpbGRlcnMu
anMiPjwvc2NyaXB0PgorCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9zdHls
ZXMuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+CQorPC9oZWFkPgorPGJvZHk+CisKKzxmb3JtIG1ldGhv
ZD0iUE9TVCIgaWQ9ImFkZC1mb3JtIj4KKyAgeyUgaWYgbm90IGJ1aWxkZXJfbmFtZSAlfSAgCisg
ICAgPGxhYmVsIGZvcj0iYnVpbGRlci1ncm91cCI+R3JvdXA6PC9sYWJlbD4KKyAgICA8c2VsZWN0
IGlkPSJidWlsZGVyLWdyb3VwIj48L3NlbGVjdD4KKyAgICAKKyAgICA8bGFiZWwgZm9yPSJidWls
ZGVyIj5CdWlsZGVyOjwvbGFiZWw+CisgICAgPHNlbGVjdCBpZD0iYnVpbGRlciI+PC9zZWxlY3Q+
CisgIHslIGVuZGlmICV9CisgIAorICA8ZGl2IGlkPSJzdGF0dXMiPkxvYWRpbmcuLi48L2Rpdj4K
KyAgCisgIDx0YWJsZSBpZD0iZmFpbGluZy10ZXN0cyIgc3R5bGU9ImRpc3BsYXk6IG5vbmUiPgor
ICAgIDxjYXB0aW9uPkZhaWxpbmcgVGVzdHM8L2NhcHRpb24+CisgICAgPHRoZWFkPgorICAgICAg
PHRoPlRlc3Q8L3RoPgorICAgICAgPHRoPkV4cGVjdGVkPC90aD4KKyAgICAgIDx0aD5BY3R1YWw8
L3RoPgorICAgICAgPHRoPlJlc3VsdHM8L3RoPgorICAgIDwvdGhlYWQ+CisgICAgPHRib2R5Pjwv
dGJvZHk+CisgICAgPHRib2R5PgorICAgICAgPHRyPgorICAgICAgICA8dGQgY29sc3Bhbj0iNCIg
aWQ9InN1Ym1pdC1yb3ciPgorICAgICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJB
ZGQgdG8gcmViYXNlbGluZSBxdWV1ZSI+ICAgIAorICAgICAgICA8L3RkPgorICAgICAgPC90cj4K
KyAgICA8L3Rib2R5PgorICA8L3RhYmxlPgorICAKKzwvZm9ybT4KKworPHNjcmlwdD4KKy8vIFRo
ZSBzZXJ2ZXIgdGhhdCBob3N0cyB0aGUgYnVpbGRlciByZXN1bHRzIGpzb24gZmlsZXMuCit2YXIg
VEVTVF9SRVNVTFRTX1NFUlZFUiA9ICdodHRwOi8vdGVzdC1yZXN1bHRzLmFwcHNwb3QuY29tLyc7
Cit2YXIgQlVJTERFUl9UT19HUk9VUCA9IHt9OworZm9yICh2YXIgYnVpbGRlckdyb3VwTmFtZSBp
biBMQVlPVVRfVEVTVFNfQlVJTERFUl9HUk9VUFMpIHsKKyAgZm9yICh2YXIgYnVpbGRlck5hbWUg
aW4gTEFZT1VUX1RFU1RTX0JVSUxERVJfR1JPVVBTW2J1aWxkZXJHcm91cE5hbWVdKSB7CisgICAg
QlVJTERFUl9UT19HUk9VUFtidWlsZGVyTmFtZV0gPSBidWlsZGVyR3JvdXBOYW1lOworICB9Cit9
CisKK2Z1bmN0aW9uIGluaXQoKSB7CisgIHslIGlmIGJ1aWxkZXJfbmFtZSAlfQorICAgIGxvYWRC
dWlsZGVyUmVzdWx0cygne3sgYnVpbGRlcl9uYW1lfGVzY2FwZSB9fScpOworICB7JSBlbHNlICV9
CisgICAgdmFyIGJ1aWxkZXJHcm91cE1lbnUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnVp
bGRlci1ncm91cCcpOworICAgIGJ1aWxkZXJHcm91cE1lbnUuYWRkRXZlbnRMaXN0ZW5lcigKKyAg
ICAgICAgJ2NoYW5nZScsIGhhbmRsZUJ1aWxkZXJHcm91cFNlbGVjdGVkLCBmYWxzZSk7CisgIAor
ICAgIHZhciBidWlsZGVyTWVudSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidWlsZGVyJyk7
CisgICAgYnVpbGRlck1lbnUuYWRkRXZlbnRMaXN0ZW5lcigKKyAgICAgICAgJ2NoYW5nZScsIGhh
bmRsZUJ1aWxkZXJTZWxlY3RlZCwgZmFsc2UpOworICAgIAorICAgIGZvciAodmFyIGJ1aWxkZXJH
cm91cE5hbWUgaW4gTEFZT1VUX1RFU1RTX0JVSUxERVJfR1JPVVBTKSB7CisgICAgICB2YXIgYnVp
bGRlckdyb3VwT3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7CisgICAg
ICBidWlsZGVyR3JvdXBPcHRpb24udGV4dENvbnRlbnQgPSBidWlsZGVyR3JvdXBPcHRpb24udmFs
dWUgPQorICAgICAgICAgIGJ1aWxkZXJHcm91cE5hbWU7CisgICAgICBidWlsZGVyR3JvdXBNZW51
LmFwcGVuZENoaWxkKGJ1aWxkZXJHcm91cE9wdGlvbik7CisgICAgfQorICAgIAorICAgIGhhbmRs
ZUJ1aWxkZXJHcm91cFNlbGVjdGVkKCk7ICAKKyAgeyUgZW5kaWYgJX0KK30KKworZnVuY3Rpb24g
aGFuZGxlQnVpbGRlckdyb3VwU2VsZWN0ZWQoKSB7CisgIHZhciBidWlsZGVyR3JvdXBNZW51ID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J1aWxkZXItZ3JvdXAnKTsKKyAgdmFyIGJ1aWxkZXJH
cm91cE5hbWUgPQorICAgICAgYnVpbGRlckdyb3VwTWVudS5vcHRpb25zW2J1aWxkZXJHcm91cE1l
bnUuc2VsZWN0ZWRJbmRleF0udmFsdWU7CisgIHZhciBidWlsZGVyR3JvdXAgPSBMQVlPVVRfVEVT
VFNfQlVJTERFUl9HUk9VUFNbYnVpbGRlckdyb3VwTmFtZV07CisgIAorICB2YXIgYnVpbGRlck1l
bnUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnVpbGRlcicpOworICBidWlsZGVyTWVudS5p
bm5lckhUTUwgPSAnJzsKKyAgCisgIGZvciAodmFyIGJ1aWxkZXJOYW1lIGluIGJ1aWxkZXJHcm91
cC5idWlsZGVycykgeworICAgIHZhciBidWlsZGVyT3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnb3B0aW9uJyk7CisgICAgYnVpbGRlck9wdGlvbi50ZXh0Q29udGVudCA9IGJ1aWxkZXJP
cHRpb24udmFsdWUgPSBidWlsZGVyTmFtZTsKKyAgICBidWlsZGVyTWVudS5hcHBlbmRDaGlsZChi
dWlsZGVyT3B0aW9uKTsKKyAgfQorICAKKyAgaGFuZGxlQnVpbGRlclNlbGVjdGVkKCk7Cit9CisK
K2Z1bmN0aW9uIGhhbmRsZUJ1aWxkZXJTZWxlY3RlZCgpIHsKKyAgdmFyIHN0YXR1cyA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdzdGF0dXMnKTsKKyAgc3RhdHVzLnN0eWxlLmRpc3BsYXkgPSAn
JzsKKyAgc3RhdHVzLnRleHRDb250ZW50ID0gJ0xvYWRpbmcuLi4nOworICAKKyAgdmFyIHRlc3Rz
VGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmFpbGluZy10ZXN0cycpOworICB0ZXN0
c1RhYmxlLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgIAorICB2YXIgYnVpbGRlck1lbnUgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnVpbGRlcicpOworICB2YXIgYnVpbGRlck5hbWUgPSBi
dWlsZGVyTWVudS5vcHRpb25zW2J1aWxkZXJNZW51LnNlbGVjdGVkSW5kZXhdLnZhbHVlOworICBs
b2FkQnVpbGRlclJlc3VsdHMoYnVpbGRlck5hbWUpOworICAKKyAgdmFyIGFkZEZvcm0gPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnYWRkLWZvcm0nKTsKKyAgYWRkRm9ybS5hY3Rpb24gPSAnL2J1
aWxkZXIvJyArIGJ1aWxkZXJOYW1lICsgJy9xdWV1ZS9hZGQnOworfQorCitmdW5jdGlvbiBsb2Fk
QnVpbGRlclJlc3VsdHMoYnVpbGRlck5hbWUpIHsKKyAgdmFyIGJ1aWxkZXJNYXN0ZXIgPSBCVUlM
REVSX1RPX01BU1RFUltidWlsZGVyTmFtZV07CisgIHZhciByZXN1bHRzVXJsID0gVEVTVF9SRVNV
TFRTX1NFUlZFUiArICd0ZXN0ZmlsZT9idWlsZGVyPScgKyBidWlsZGVyTmFtZSArCisgICAgICAn
Jm1hc3Rlcj0nICsgYnVpbGRlck1hc3Rlci5uYW1lICsKKyAgICAgICcmdGVzdHR5cGU9bGF5b3V0
LXRlc3RzJm5hbWU9ZnVsbF9yZXN1bHRzLmpzb24nOworICAgICAgCisgIHZhciBzY3JpcHQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKKyAgc2NyaXB0LnNyYyA9IHJlc3VsdHNV
cmw7CisgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5kQ2hp
bGQoc2NyaXB0KTsgIAorfQorCitmdW5jdGlvbiBBRERfUkVTVUxUUyhyZXN1bHRzKSB7Cit7JSBp
ZiBidWlsZGVyX25hbWUgJX0KKyAgdmFyIGJ1aWxkZXJHcm91cE5hbWUgPSBCVUlMREVSX1RPX0dS
T1VQWyd7eyBidWlsZGVyX25hbWV8ZXNjYXBlIH19J107Cit7JSBlbHNlICV9CisgIHZhciBidWls
ZGVyR3JvdXBNZW51ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J1aWxkZXItZ3JvdXAnKTsK
KyAgdmFyIGJ1aWxkZXJHcm91cE5hbWUgPQorICAgICAgYnVpbGRlckdyb3VwTWVudS5vcHRpb25z
W2J1aWxkZXJHcm91cE1lbnUuc2VsZWN0ZWRJbmRleF0udmFsdWU7Cit7JSBlbmRpZiAlfQorCisg
IHZhciB0ZXN0cyA9IHJlc3VsdHMudGVzdHM7CisgIHZhciBmYWlsaW5nVGVzdHMgPSBbXTsKKyAg
Zm9yICh2YXIgdGVzdCBpbiB0ZXN0cykgeworICAgIHZhciB0ZXN0UmVzdWx0cyA9IHRlc3RzW3Rl
c3RdOworICAgIGlmICh0ZXN0UmVzdWx0cy5hY3R1YWwgPT0gdGVzdFJlc3VsdHMuZXhwZWN0ZWQg
fHwKKyAgICAgICAgdGVzdFJlc3VsdHMuZXhwZWN0ZWQuc3BsaXQoJyAnKS5pbmRleE9mKHRlc3RS
ZXN1bHRzLmFjdHVhbCkgIT0gLTEgfHwKKyAgICAgICAgdGVzdFJlc3VsdHMuYWN0dWFsID09ICdT
S0lQJyB8fAorICAgICAgICB0ZXN0UmVzdWx0cy5hY3R1YWwuaW5kZXhPZignUEFTUycpICE9IC0x
IHx8CisgICAgICAgICh0ZXN0UmVzdWx0cy5hY3R1YWwgIT0gJ1BBU1MnICYmIHRlc3RSZXN1bHRz
LmV4cGVjdGVkLmluZGV4T2YoJ0ZBSUwnKSAhPSAtMSkpIHsKKyAgICAgIGNvbnRpbnVlOworICAg
IH0KKyAgICAKKyAgICB0ZXN0UmVzdWx0cy5uYW1lID0gdGVzdDsKKyAgICBmYWlsaW5nVGVzdHMu
cHVzaCh0ZXN0UmVzdWx0cyk7CisgIH0KKyAgCisgIHZhciB0ZXN0c1RhYmxlID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2ZhaWxpbmctdGVzdHMnKTsKKyAgdGVzdHNUYWJsZS50Qm9kaWVzWzBd
LmlubmVySFRNTCA9ICcnOworICAKKyAgdmFyIHN0YXR1cyA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdzdGF0dXMnKTsKKyAgaWYgKGZhaWxpbmdUZXN0cy5sZW5ndGggPT0gMCkgeworICAgIHN0
YXR1cy50ZXh0Q29udGVudCA9ICdObyBmYWlsaW5nIHRlc3RzJzsKKyAgICByZXR1cm47CisgIH0K
KworICBzdGF0dXMuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgdGVzdHNUYWJsZS5zdHlsZS5k
aXNwbGF5ID0gJyc7CisgIAorICBmYWlsaW5nVGVzdHMuc29ydChmdW5jdGlvbihhLCBiKSB7Cisg
ICAgcmV0dXJuIGEubmFtZSA8IGIubmFtZSA/IC0xIDogKGEubmFtZSA+IGIubmFtZSA/IDEgOiAw
KTsKKyAgfSk7CisgIAorICBmYWlsaW5nVGVzdHMuZm9yRWFjaChmdW5jdGlvbih0ZXN0UmVzdWx0
cykgeyAgCisgICAgdmFyIHRlc3RSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwor
ICAgIAorICAgIHZhciB0ZXN0Q2VsbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7Cisg
ICAgdGVzdFJvdy5hcHBlbmRDaGlsZCh0ZXN0Q2VsbCk7CisgICAgdmFyIHRlc3RDaGVja2JveCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CisgICAgdGVzdENoZWNrYm94LnR5cGUg
PSAnY2hlY2tib3gnOworICAgIHRlc3RDaGVja2JveC5uYW1lID0gJ3Rlc3QnOworICAgIHRlc3RD
aGVja2JveC52YWx1ZSA9IHRlc3RSZXN1bHRzLm5hbWU7CisgICAgdGVzdENoZWNrYm94LmlkID0g
dGVzdFJlc3VsdHMubmFtZTsKKyAgICB0ZXN0Q2VsbC5hcHBlbmRDaGlsZCh0ZXN0Q2hlY2tib3gp
OworICAgIAorICAgIHZhciB0ZXN0TmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVs
Jyk7CisgICAgdGVzdE5hbWUudGV4dENvbnRlbnQgPSB0ZXN0UmVzdWx0cy5uYW1lOworICAgIHRl
c3ROYW1lLnNldEF0dHJpYnV0ZSgnZm9yJywgdGVzdFJlc3VsdHMubmFtZSk7CisgICAgdGVzdENl
bGwuYXBwZW5kQ2hpbGQodGVzdE5hbWUpOworCisgICAgdmFyIGV4cGVjdGVkQ2VsbCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CisgICAgdGVzdFJvdy5hcHBlbmRDaGlsZChleHBlY3Rl
ZENlbGwpOworICAgIGV4cGVjdGVkQ2VsbC50ZXh0Q29udGVudCA9IHRlc3RSZXN1bHRzLmV4cGVj
dGVkOworCisgICAgdmFyIGFjdHVhbENlbGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcp
OworICAgIHRlc3RSb3cuYXBwZW5kQ2hpbGQoYWN0dWFsQ2VsbCk7CisgICAgYWN0dWFsQ2VsbC50
ZXh0Q29udGVudCA9IHRlc3RSZXN1bHRzLmFjdHVhbDsKKyAgICAKKyAgICB2YXIgcmVzdWx0c0Nl
bGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOworICAgIHRlc3RSb3cuYXBwZW5kQ2hp
bGQocmVzdWx0c0NlbGwpOworICAgIHZhciByZXN1bHRzTGluayA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2EnKTsKKyAgICByZXN1bHRzTGluay50YXJnZXQgPSAnX2JsYW5rJzsKKyAgICByZXN1
bHRzTGluay5ocmVmID0gVEVTVF9SRVNVTFRTX1NFUlZFUiArCisgICAgICAgICdkYXNoYm9hcmRz
L2ZsYWtpbmVzc19kYXNoYm9hcmQuaHRtbCN0ZXN0cz0nICsgdGVzdFJlc3VsdHMubmFtZSArCisg
ICAgICAgICcmZ3JvdXA9JyArIGJ1aWxkZXJHcm91cE5hbWU7CisgICAgcmVzdWx0c0xpbmsudGV4
dENvbnRlbnQgPSAnRmxha2luZXNzIGRhc2hib2FyZCc7CisgICAgcmVzdWx0c0NlbGwuYXBwZW5k
Q2hpbGQocmVzdWx0c0xpbmspOworICAgIAorICAgIHRlc3RzVGFibGUudEJvZGllc1swXS5hcHBl
bmRDaGlsZCh0ZXN0Um93KTsKKyAgfSk7Cit9CisKK2luaXQoKTsKKzwvc2NyaXB0PgorCis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Ub29scy9SZWJhc2VsaW5lUXVldWVTZXJ2ZXIvdGVt
cGxhdGVzL2J1aWxkZXItcXVldWUuaHRtbCBiL1Rvb2xzL1JlYmFzZWxpbmVRdWV1ZVNlcnZlci90
ZW1wbGF0ZXMvYnVpbGRlci1xdWV1ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE0M2MwN2I2NzFjNjVkYzQx
Zjk0NTNhYTVkZGNiZGM3ZGJlM2RkNmQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9SZWJhc2Vs
aW5lUXVldWVTZXJ2ZXIvdGVtcGxhdGVzL2J1aWxkZXItcXVldWUuaHRtbApAQCAtMCwwICsxLDIy
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisJPHRpdGxlPnt7IGJ1aWxkZXJf
bmFtZXxlc2NhcGUgfX0gUXVldWU8L3RpdGxlPgorCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJl
Zj0iL3N0YXRpYy9zdHlsZXMuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+CQorPC9oZWFkPgorPGJvZHk+
CisKKzxoMT57eyBidWlsZGVyX25hbWV8ZXNjYXBlIH19IFF1ZXVlPC9oMT4KKworPG9sPgoreyUg
Zm9yIGVudHJ5IGluIGVudHJpZXMgJX0KKyAgPGxpPgorICAgIHt7IGVudHJ5LnRlc3R8ZXNjYXBl
IH19CisgIDwvbGk+Cit7JSBlbXB0eSAlfQorICBObyB0ZXN0cyBmb3VuZCBpbiBxdWV1ZS4KK3sl
IGVuZGZvciAlfQorPC9vbD4KKworPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89462</attachid>
            <date>2011-04-13 14:33:35 -0700</date>
            <delta_ts>2011-04-13 15:50:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57891-20110413143334.patch</filename>
            <type>text/plain</type>
            <size>28240</size>
            <attacher name="Mihai Parparita">mihaip</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODM2OTQKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhOGMyZWY1N2I2MmJjMWIyOWFhNDJmZmIzYWY4MDc0NGZm
OTBiZDg0Li4zZmI2OTU5ZmMzMWMzOWY1MDUwYmFkNzAwZWVkMjg2ZDBhNmViNTJiIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYg
QEAKKzIwMTEtMDQtMTMgIE1paGFpIFBhcnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmViYXNlbGlu
ZSBxdWV1ZSBzZXJ2ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU3ODkxCisKKyAgICAgICAgQWRkcyBhIHNpbXBsZSByZWJhc2VsaW5lIHF1ZXVlIHNl
cnZlciAobWVhbnQgdG8gcnVuIGF0CisgICAgICAgIGh0dHA6Ly9yZWJhc2VsaW5lLXF1ZXVlLmFw
cHNwb3QuY29tLykuIEl0IHByZXNlbnRzIGEgbGlzdCBvZiBhbGwgKE5SV1QpCisgICAgICAgIGJ1
aWxkZXJzIGFuZCB0aGVpciBmYWlsaW5nIHRlc3RzLCBhbmQgYWxsb3dzIHRob3NlIHRlc3RzIHRv
IGJlIGFkZGVkIHRvCisgICAgICAgIGEgcGVyLWJ1aWxlciByZWJhc2VsaW5lIHF1ZXVlLgorCisg
ICAgICAgIEEgc3Vic2VxdWVudCBjaGFuZ2Ugd2lsbCBhZGQgYSBtb2RlIHRvIE5SV1QgKGFuZC9v
ciBhIHdyYXBwZXIgc2NyaXB0KQorICAgICAgICBmb3IgcHVsbGluZyB0aGUgdGVzdHMgdG8gYmUg
cmViYXNlbGluZWQgZnJvbSB0aGUgc2VydmVyIGFuZCBydW5uaW5nIHRoZW0KKyAgICAgICAgd2l0
aCAtLXJlc2V0LXJlc3VsdHMgKHRoZSBpbml0aWFsIHVzZS1jYXNlIGlzIGZvciB0aGUgR1BVIGhh
cmR3YXJlIGJvdHMsCisgICAgICAgIHdoaWNoIGRvIG5vdCBoYXZlIGNoZWNrZWQtaW4gYmFzZWxp
bmVzLCB0aGVyZWZvcmUgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYQorICAgICAgICBjaGVjay1pbiBz
dGVwIHlldCkuCisKKyAgICAgICAgKiBSZWJhc2VsaW5lUXVldWVTZXJ2ZXIvYXBwLnlhbWw6IEFk
ZGVkLgorICAgICAgICAqIFJlYmFzZWxpbmVRdWV1ZVNlcnZlci9oYW5kbGVycy9fX2luaXRfXy5w
eTogQWRkZWQuCisgICAgICAgICogUmViYXNlbGluZVF1ZXVlU2VydmVyL2hhbmRsZXJzL2J1aWxk
ZXJxdWV1ZS5weTogQWRkZWQuCisgICAgICAgICogUmViYXNlbGluZVF1ZXVlU2VydmVyL2hhbmRs
ZXJzL3BhZ2VzLnB5OiBBZGRlZC4KKyAgICAgICAgKiBSZWJhc2VsaW5lUXVldWVTZXJ2ZXIvaW5k
ZXgueWFtbDogQWRkZWQuCisgICAgICAgICogUmViYXNlbGluZVF1ZXVlU2VydmVyL21haW4ucHk6
IEFkZGVkLgorICAgICAgICAqIFJlYmFzZWxpbmVRdWV1ZVNlcnZlci9tb2RlbC9fX2luaXRfXy5w
eTogQWRkZWQuCisgICAgICAgICogUmViYXNlbGluZVF1ZXVlU2VydmVyL21vZGVsL3F1ZXVlZW50
cnkucHk6IEFkZGVkLgorICAgICAgICAqIFJlYmFzZWxpbmVRdWV1ZVNlcnZlci9zdGF0aWMvYnVp
bGRlci1mcmFtZS1lbXB0eS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBSZWJhc2VsaW5lUXVldWVT
ZXJ2ZXIvc3RhdGljL3N0eWxlcy5jc3M6IEFkZGVkLgorICAgICAgICAqIFJlYmFzZWxpbmVRdWV1
ZVNlcnZlci90ZW1wbGF0ZXMvYnVpbGRlci1waWNrZXIuaHRtbDogQWRkZWQuCisgICAgICAgICog
UmViYXNlbGluZVF1ZXVlU2VydmVyL3RlbXBsYXRlcy9idWlsZGVyLXF1ZXVlLWVkaXQuaHRtbDog
QWRkZWQuCisgICAgICAgICogUmViYXNlbGluZVF1ZXVlU2VydmVyL3RlbXBsYXRlcy9idWlsZGVy
LXF1ZXVlLWxpc3QuaHRtbDogQWRkZWQuCisgICAgICAgICogUmViYXNlbGluZVF1ZXVlU2VydmVy
L3RlbXBsYXRlcy9ob21lLmh0bWw6IEFkZGVkLgorCiAyMDExLTA0LTEyICBKYW1lcyBLb3ppYW5z
a2kgIDxrb3pAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuCmRpZmYgLS1naXQg
YS9Ub29scy9SZWJhc2VsaW5lUXVldWVTZXJ2ZXIvYXBwLnlhbWwgYi9Ub29scy9SZWJhc2VsaW5l
UXVldWVTZXJ2ZXIvYXBwLnlhbWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzQyNWNmZDU5ODEwYzU3NDRiMGFhMGVl
ZDljNTczNjFkNGZiZDhjNgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1JlYmFzZWxpbmVRdWV1
ZVNlcnZlci9hcHAueWFtbApAQCAtMCwwICsxLDExIEBACithcHBsaWNhdGlvbjogcmViYXNlbGlu
ZS1xdWV1ZQordmVyc2lvbjogMQorcnVudGltZTogcHl0aG9uCithcGlfdmVyc2lvbjogMQorCito
YW5kbGVyczoKKy0gdXJsOiAvc3RhdGljCisgIHN0YXRpY19kaXI6IHN0YXRpYworCistIHVybDog
LioKKyAgc2NyaXB0OiBtYWluLnB5CmRpZmYgLS1naXQgYS9Ub29scy9SZWJhc2VsaW5lUXVldWVT
ZXJ2ZXIvaGFuZGxlcnMvX19pbml0X18ucHkgYi9Ub29scy9SZWJhc2VsaW5lUXVldWVTZXJ2ZXIv
aGFuZGxlcnMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWY2NWJlZTViYjc3ZTk2ZWJjN2NkOWM0
NzY0MDY5MGZiZGE4YWMxOQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1JlYmFzZWxpbmVRdWV1
ZVNlcnZlci9oYW5kbGVycy9fX2luaXRfXy5weQpAQCAtMCwwICsxIEBACisjIFJlcXVpcmVkIGZv
ciBQeXRob24gdG8gc2VhcmNoIHRoaXMgZGlyZWN0b3J5IGZvciBtb2R1bGUgZmlsZXMKZGlmZiAt
LWdpdCBhL1Rvb2xzL1JlYmFzZWxpbmVRdWV1ZVNlcnZlci9oYW5kbGVycy9idWlsZGVycXVldWUu
cHkgYi9Ub29scy9SZWJhc2VsaW5lUXVldWVTZXJ2ZXIvaGFuZGxlcnMvYnVpbGRlcnF1ZXVlLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmI1YTI0Mzc5ODYzZjk1NzBjZWJjMzE1MjBhNzdmNThmNzIyZjFjMTYKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9SZWJhc2VsaW5lUXVldWVTZXJ2ZXIvaGFuZGxlcnMvYnVp
bGRlcnF1ZXVlLnB5CkBAIC0wLDAgKzEsOTQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmcm9tIHVy
bGxpYiBpbXBvcnQgdW5xdW90ZV9wbHVzCisKK2Zyb20gZ29vZ2xlLmFwcGVuZ2luZS5leHQgaW1w
b3J0IHdlYmFwcAorZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dC53ZWJhcHAgaW1wb3J0IHRlbXBs
YXRlCitmcm9tIGRqYW5nby51dGlscyBpbXBvcnQgc2ltcGxlanNvbgorCitmcm9tIG1vZGVsLnF1
ZXVlZW50cnkgaW1wb3J0IFF1ZXVlRW50cnkKKworCitjbGFzcyBRdWV1ZUhhbmRsZXIod2ViYXBw
LlJlcXVlc3RIYW5kbGVyKToKKyAgICBkZWYgZ2V0KHNlbGYsIGJ1aWxkZXJfbmFtZSk6CisgICAg
ICAgIHNlbGYuX2dldCh1bnF1b3RlX3BsdXMoYnVpbGRlcl9uYW1lKSkKKworICAgIGRlZiBwb3N0
KHNlbGYsIGJ1aWxkZXJfbmFtZSk6CisgICAgICAgIHNlbGYuX3Bvc3QodW5xdW90ZV9wbHVzKGJ1
aWxkZXJfbmFtZSkpCisKKyAgICBkZWYgX3F1ZXVlZF90ZXN0X25hbWVzKHNlbGYsIGJ1aWxkZXJf
bmFtZSk6CisgICAgICAgIHJldHVybiBbZW50cnkudGVzdCBmb3IgZW50cnkgaW4gUXVldWVFbnRy
eS5nZXRfZm9yX2J1aWxkZXJfbmFtZShidWlsZGVyX25hbWUpXQorCisKK2NsYXNzIFF1ZXVlRWRp
dChRdWV1ZUhhbmRsZXIpOgorICAgIGRlZiBfZ2V0KHNlbGYsIGJ1aWxkZXJfbmFtZSk6CisgICAg
ICAgIHRlc3RfbmFtZXMgPSBzZWxmLl9xdWV1ZWRfdGVzdF9uYW1lcyhidWlsZGVyX25hbWUpCisg
ICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKAorICAgICAgICAgICAgdGVtcGxhdGUucmVu
ZGVyKCJ0ZW1wbGF0ZXMvYnVpbGRlci1xdWV1ZS1lZGl0Lmh0bWwiLCB7CisgICAgICAgICAgICAg
ICAgJ2J1aWxkZXJfbmFtZSc6IGJ1aWxkZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAncXVldWVk
X3Rlc3RfbmFtZXMnOiBzaW1wbGVqc29uLmR1bXBzKHRlc3RfbmFtZXMpLAorICAgICAgICAgICAg
fSkpCisKKworY2xhc3MgUXVldWVBZGQoUXVldWVIYW5kbGVyKToKKyAgICBkZWYgX3Bvc3Qoc2Vs
ZiwgYnVpbGRlcl9uYW1lKToKKyAgICAgICAgdGVzdHMgPSBzZWxmLnJlcXVlc3QuZ2V0X2FsbCgn
dGVzdCcpCisKKyAgICAgICAgY3VycmVudF90ZXN0cyA9IHNldChzZWxmLl9xdWV1ZWRfdGVzdF9u
YW1lcyhidWlsZGVyX25hbWUpKQorCisgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgorICAgICAg
ICAgICAgaWYgdGVzdCBub3QgaW4gY3VycmVudF90ZXN0czoKKyAgICAgICAgICAgICAgICBRdWV1
ZUVudHJ5LmFkZChidWlsZGVyX25hbWUsIHRlc3QpCisKKyAgICAgICAgc2VsZi5yZWRpcmVjdCgn
L2J1aWxkZXIvJXMvcXVldWUnICUgYnVpbGRlcl9uYW1lKQorCisKK2NsYXNzIFF1ZXVlUmVtb3Zl
KFF1ZXVlSGFuZGxlcik6CisgICAgZGVmIF9wb3N0KHNlbGYsIGJ1aWxkZXJfbmFtZSk6CisgICAg
ICAgIHRlc3RzID0gc2VsZi5yZXF1ZXN0LmdldF9hbGwoJ3Rlc3QnKQorCisgICAgICAgIGZvciB0
ZXN0IGluIHRlc3RzOgorICAgICAgICAgICAgUXVldWVFbnRyeS5yZW1vdmUoYnVpbGRlcl9uYW1l
LCB0ZXN0KQorCisgICAgICAgIHNlbGYucmVkaXJlY3QoJy9idWlsZGVyLyVzL3F1ZXVlJyAlIGJ1
aWxkZXJfbmFtZSkKKworCitjbGFzcyBRdWV1ZUh0bWwoUXVldWVIYW5kbGVyKToKKyAgICBkZWYg
X2dldChzZWxmLCBidWlsZGVyX25hbWUpOgorICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0
ZSgKKyAgICAgICAgICAgIHRlbXBsYXRlLnJlbmRlcigidGVtcGxhdGVzL2J1aWxkZXItcXVldWUt
bGlzdC5odG1sIiwgeworICAgICAgICAgICAgICAgICAgICAnYnVpbGRlcl9uYW1lJzogYnVpbGRl
cl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAnZW50cmllcyc6IFF1ZXVlRW50cnkuZ2V0X2Zv
cl9idWlsZGVyX25hbWUoYnVpbGRlcl9uYW1lKSwKKyAgICAgICAgICAgICAgICB9KSkKKworCitj
bGFzcyBRdWV1ZUpzb24oUXVldWVIYW5kbGVyKToKKyAgICBkZWYgX2dldChzZWxmLCBidWlsZGVy
X25hbWUpOgorICAgICAgICBxdWV1ZV9qc29uID0geyd0ZXN0cyc6IHNlbGYuX3F1ZXVlZF90ZXN0
X25hbWVzKGJ1aWxkZXJfbmFtZSl9CisgICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKHNp
bXBsZWpzb24uZHVtcHMocXVldWVfanNvbikpCmRpZmYgLS1naXQgYS9Ub29scy9SZWJhc2VsaW5l
UXVldWVTZXJ2ZXIvaGFuZGxlcnMvcGFnZXMucHkgYi9Ub29scy9SZWJhc2VsaW5lUXVldWVTZXJ2
ZXIvaGFuZGxlcnMvcGFnZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2U5MGUyYTI1MTFmYmE4NmE4ZDY5OWI5
MTY5NWMxN2MwMzRhZDg1OAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1JlYmFzZWxpbmVRdWV1
ZVNlcnZlci9oYW5kbGVycy9wYWdlcy5weQpAQCAtMCwwICsxLDQ3IEBACisjIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisj
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
IyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dCBpbXBvcnQgd2ViYXBwCitmcm9tIGdvb2ds
ZS5hcHBlbmdpbmUuZXh0LndlYmFwcCBpbXBvcnQgdGVtcGxhdGUKKworZnJvbSBtb2RlbC5xdWV1
ZWVudHJ5IGltcG9ydCBRdWV1ZUVudHJ5CisKKworY2xhc3MgSG9tZSh3ZWJhcHAuUmVxdWVzdEhh
bmRsZXIpOgorICAgIGRlZiBnZXQoc2VsZik6CisgICAgICAgIGJ1aWxkZXJfbmFtZXMgPSBRdWV1
ZUVudHJ5LmdldF9idWlsZGVyX25hbWVzKCkKKyAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQud3Jp
dGUoCisgICAgICAgICAgICB0ZW1wbGF0ZS5yZW5kZXIoInRlbXBsYXRlcy9ob21lLmh0bWwiLCB7
CisgICAgICAgICAgICAgICAgJ2J1aWxkZXJfbmFtZXMnOiBidWlsZGVyX25hbWVzLAorICAgICAg
ICAgICAgfSkpCisKKworY2xhc3MgQnVpbGRlclBpY2tlcih3ZWJhcHAuUmVxdWVzdEhhbmRsZXIp
OgorICAgIGRlZiBnZXQoc2VsZik6CisgICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKAor
ICAgICAgICAgICAgdGVtcGxhdGUucmVuZGVyKCJ0ZW1wbGF0ZXMvYnVpbGRlci1waWNrZXIuaHRt
bCIsIHt9KSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1JlYmFzZWxpbmVRdWV1ZVNlcnZlci9pbmRleC55
YW1sIGIvVG9vbHMvUmViYXNlbGluZVF1ZXVlU2VydmVyL2luZGV4LnlhbWwKbmV3IGZpbGUgbW9k
ZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YTNiOWUwNWUzNTE3YWFlY2M2ZWFkMTgxNTgzMzNkMmQyYTIwOGM3NAotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1JlYmFzZWxpbmVRdWV1ZVNlcnZlci9pbmRleC55YW1sCkBAIC0wLDAgKzEsMTEg
QEAKK2luZGV4ZXM6CisKKyMgQVVUT0dFTkVSQVRFRAorCisjIFRoaXMgaW5kZXgueWFtbCBpcyBh
dXRvbWF0aWNhbGx5IHVwZGF0ZWQgd2hlbmV2ZXIgdGhlIGRldl9hcHBzZXJ2ZXIKKyMgZGV0ZWN0
cyB0aGF0IGEgbmV3IHR5cGUgb2YgcXVlcnkgaXMgcnVuLiAgSWYgeW91IHdhbnQgdG8gbWFuYWdl
IHRoZQorIyBpbmRleC55YW1sIGZpbGUgbWFudWFsbHksIHJlbW92ZSB0aGUgYWJvdmUgbWFya2Vy
IGxpbmUgKHRoZSBsaW5lCisjIHNheWluZyAiIyBBVVRPR0VORVJBVEVEIikuICBJZiB5b3Ugd2Fu
dCB0byBtYW5hZ2Ugc29tZSBpbmRleGVzCisjIG1hbnVhbGx5LCBtb3ZlIHRoZW0gYWJvdmUgdGhl
IG1hcmtlciBsaW5lLiAgVGhlIGluZGV4LnlhbWwgZmlsZSBpcworIyBhdXRvbWF0aWNhbGx5IHVw
bG9hZGVkIHRvIHRoZSBhZG1pbiBjb25zb2xlIHdoZW4geW91IG5leHQgZGVwbG95CisjIHlvdXIg
YXBwbGljYXRpb24gdXNpbmcgYXBwY2ZnLnB5LgpkaWZmIC0tZ2l0IGEvVG9vbHMvUmViYXNlbGlu
ZVF1ZXVlU2VydmVyL21haW4ucHkgYi9Ub29scy9SZWJhc2VsaW5lUXVldWVTZXJ2ZXIvbWFpbi5w
eQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi40NDk3ZDYzMDYzNDhlMzFjZGJmMzE5YjBmYWI1OGVkZmNiNzE2MDA1Ci0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvUmViYXNlbGluZVF1ZXVlU2VydmVyL21haW4ucHkKQEAg
LTAsMCArMSw1NiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIwor
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisj
IGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisj
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyMgUmVxdWVzdCBhIG1vZGVybiBEamFu
Z28KK2Zyb20gZ29vZ2xlLmFwcGVuZ2luZS5kaXN0IGltcG9ydCB1c2VfbGlicmFyeQordXNlX2xp
YnJhcnkoJ2RqYW5nbycsICcxLjInKQorCitmcm9tIGdvb2dsZS5hcHBlbmdpbmUuZXh0IGltcG9y
dCB3ZWJhcHAKK2Zyb20gZ29vZ2xlLmFwcGVuZ2luZS5leHQud2ViYXBwIGltcG9ydCB1dGlsCisK
K2Zyb20gaGFuZGxlcnMgaW1wb3J0IHBhZ2VzCitmcm9tIGhhbmRsZXJzIGltcG9ydCBidWlsZGVy
cXVldWUKKworCitkZWYgbWFpbigpOgorICAgIGFwcGxpY2F0aW9uID0gd2ViYXBwLldTR0lBcHBs
aWNhdGlvbihbCisgICAgICAgICAgKCcvJywgcGFnZXMuSG9tZSksCisgICAgICAgICAgKCcvYnVp
bGRlci9waWNrZXInLCBwYWdlcy5CdWlsZGVyUGlja2VyKSwKKworICAgICAgICAgICMgUXVldWUg
Q1JVRCBvcGVyYXRpb25zCisgICAgICAgICAgKCcvYnVpbGRlci8oLispL3F1ZXVlL2VkaXQnLCBi
dWlsZGVycXVldWUuUXVldWVFZGl0KSwKKyAgICAgICAgICAoJy9idWlsZGVyLyguKykvcXVldWUv
YWRkJywgYnVpbGRlcnF1ZXVlLlF1ZXVlQWRkKSwKKyAgICAgICAgICAoJy9idWlsZGVyLyguKykv
cXVldWUvcmVtb3ZlJywgYnVpbGRlcnF1ZXVlLlF1ZXVlUmVtb3ZlKSwKKyAgICAgICAgICAoJy9i
dWlsZGVyLyguKykvcXVldWUnLCBidWlsZGVycXVldWUuUXVldWVIdG1sKSwKKyAgICAgICAgICAo
Jy9idWlsZGVyLyguKykvcXVldWUvanNvbicsIGJ1aWxkZXJxdWV1ZS5RdWV1ZUpzb24pLAorICAg
ICAgICBdLAorICAgICAgICBkZWJ1Zz1UcnVlKQorICAgIHV0aWwucnVuX3dzZ2lfYXBwKGFwcGxp
Y2F0aW9uKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIG1haW4oKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvUmViYXNlbGluZVF1ZXVlU2VydmVyL21vZGVsL19faW5pdF9fLnB5IGIvVG9v
bHMvUmViYXNlbGluZVF1ZXVlU2VydmVyL21vZGVsL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVm
NjViZWU1YmI3N2U5NmViYzdjZDljNDc2NDA2OTBmYmRhOGFjMTkKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9SZWJhc2VsaW5lUXVldWVTZXJ2ZXIvbW9kZWwvX19pbml0X18ucHkKQEAgLTAsMCAr
MSBAQAorIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBmb3Ig
bW9kdWxlIGZpbGVzCmRpZmYgLS1naXQgYS9Ub29scy9SZWJhc2VsaW5lUXVldWVTZXJ2ZXIvbW9k
ZWwvcXVldWVlbnRyeS5weSBiL1Rvb2xzL1JlYmFzZWxpbmVRdWV1ZVNlcnZlci9tb2RlbC9xdWV1
ZWVudHJ5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjZjUwZThkOWM3YjY4ZDQ4NzQxNGI4ZTQ5YjA3MzZjYjUw
ZjZjYWQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9SZWJhc2VsaW5lUXVldWVTZXJ2ZXIvbW9k
ZWwvcXVldWVlbnRyeS5weQpAQCAtMCwwICsxLDYzIEBACisjIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisj
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworZnJv
bSBnb29nbGUuYXBwZW5naW5lLmV4dCBpbXBvcnQgZGIKKworCitjbGFzcyBRdWV1ZUVudHJ5KGRi
Lk1vZGVsKToKKyAgICB0ZXN0ID0gZGIuU3RyaW5nUHJvcGVydHkoKQorICAgIGJ1aWxkZXIgPSBk
Yi5TdHJpbmdQcm9wZXJ0eSgpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGFkZChidWls
ZGVyX25hbWUsIHRlc3QpOgorICAgICAgICBlbnRyeSA9IFF1ZXVlRW50cnkoKQorICAgICAgICBl
bnRyeS5idWlsZGVyID0gYnVpbGRlcl9uYW1lCisgICAgICAgIGVudHJ5LnRlc3QgPSB0ZXN0Cisg
ICAgICAgIGVudHJ5LnB1dCgpCisgICAgICAgIHJldHVybiBlbnRyeQorCisgICAgQHN0YXRpY21l
dGhvZAorICAgIGRlZiByZW1vdmUoYnVpbGRlcl9uYW1lLCB0ZXN0KToKKyAgICAgICAgcXVlcnkg
PSBRdWV1ZUVudHJ5LmFsbCgpCisgICAgICAgIHF1ZXJ5ID0gcXVlcnkuZmlsdGVyKCdidWlsZGVy
ID0nLCBidWlsZGVyX25hbWUpLmZpbHRlcigndGVzdCA9JywgdGVzdCkKKyAgICAgICAgZm9yIGVu
dHJ5IGluIHF1ZXJ5OgorICAgICAgICAgICAgZW50cnkuZGVsZXRlKCkKKworICAgIEBzdGF0aWNt
ZXRob2QKKyAgICBkZWYgZ2V0X2Zvcl9idWlsZGVyX25hbWUoYnVpbGRlcl9uYW1lKToKKyAgICAg
ICAgcXVlcnkgPSBRdWV1ZUVudHJ5LmFsbCgpCisgICAgICAgIHF1ZXJ5ID0gcXVlcnkuZmlsdGVy
KCdidWlsZGVyID0nLCBidWlsZGVyX25hbWUpCisgICAgICAgIHJldHVybiBxdWVyeQorCisgICAg
QHN0YXRpY21ldGhvZAorICAgIGRlZiBnZXRfYnVpbGRlcl9uYW1lcygpOgorICAgICAgICBxdWVy
eSA9IFF1ZXVlRW50cnkuYWxsKCkKKyAgICAgICAgYnVpbGRlcl9uYW1lcyA9IHNldCgpCisgICAg
ICAgIGZvciBlbnRyeSBpbiBxdWVyeToKKyAgICAgICAgICAgIGJ1aWxkZXJfbmFtZXMuYWRkKGVu
dHJ5LmJ1aWxkZXIpCisgICAgICAgIHJldHVybiBidWlsZGVyX25hbWVzCmRpZmYgLS1naXQgYS9U
b29scy9SZWJhc2VsaW5lUXVldWVTZXJ2ZXIvc3RhdGljL2J1aWxkZXItZnJhbWUtZW1wdHkuaHRt
bCBiL1Rvb2xzL1JlYmFzZWxpbmVRdWV1ZVNlcnZlci9zdGF0aWMvYnVpbGRlci1mcmFtZS1lbXB0
eS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjMxYjkxYmI0ZjYzZTc1OGZiM2JhZDA2M2I4OWY4YjAwOWViZmEy
Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9SZWJhc2VsaW5lUXVldWVTZXJ2ZXIvc3RhdGlj
L2J1aWxkZXItZnJhbWUtZW1wdHkuaHRtbApAQCAtMCwwICsxLDEwIEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHRpdGxlPlJlYmFzZWxpbmUgUXVldWU8L3RpdGxlPgor
ICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9zdHlsZXMuY3NzIiB0eXBl
PSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keT4KK1NlbGVjdCBhIGdyb3VwIGFuZCB0aGVuIGEg
YnVpbGRlciB0byBzZWUgdGVzdHMgdGhhdCBhcmUgY3VycmVudGx5IGZhaWxpbmcgb24gaXQgKGlm
IGFueSkuCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Ub29scy9SZWJhc2VsaW5lUXVl
dWVTZXJ2ZXIvc3RhdGljL3N0eWxlcy5jc3MgYi9Ub29scy9SZWJhc2VsaW5lUXVldWVTZXJ2ZXIv
c3RhdGljL3N0eWxlcy5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTM2ZmYzNTMwNWIzMTVlOWM0MWU3NTlhYTE0
MWFlODQ2MzFjYTE2YgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1JlYmFzZWxpbmVRdWV1ZVNl
cnZlci9zdGF0aWMvc3R5bGVzLmNzcwpAQCAtMCwwICsxLDcxIEBACitib2R5IHsKKyAgZm9udC1m
YW1pbHk6IEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CisgIGZvbnQtc2l6ZTogMTJweDsK
K30KKworaDEgeworICBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggI2NjYzsKK30KKworI2J1aWxk
ZXItcGlja2VyIGJvZHksCisjYWRkLWZvcm0gYm9keSB7CisgIG1hcmdpbjogMDsKK30KKworI2J1
aWxkZXItcGlja2VyLCAKKyNidWlsZGVyLXBpY2tlciBib2R5IHsKKyAgaGVpZ2h0OiAxMDAlOwor
fQorCisjYnVpbGRlci1waWNrZXIgYm9keSB7CisgIGRpc3BsYXk6IC13ZWJraXQtYm94OworICAt
d2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsOworfQorCisjYnVpbGRlci1waWNrZXItY29udHJv
bHMgeworICBwYWRkaW5nOiAwLjVlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4IGJsYWNr
OworfQorCisjYnVpbGRlci1waWNrZXItY29udHJvbHMgc2VsZWN0IHsKKyAgbWluLXdpZHRoOiAx
MGVtOworfQorCisjYnVpbGRlci1mcmFtZSB7CisgIGJvcmRlcjogMDsKKyAgLXdlYmtpdC1ib3gt
ZmxleDogMTsKKyAgZGlzcGxheTogYmxvY2s7Cit9CisKKy5zdGF0dXMgeworICBmb250LXNpemU6
IDE2cHg7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgcGFkZGluZzogMWVtOworfQorCisudGVz
dC10YWJsZSB7CisgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Cit9CisKKy50ZXN0LXRhYmxl
IGNhcHRpb24geworICBmb250LXNpemU6IDE2cHg7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworICBi
YWNrZ3JvdW5kOiAjZWVlOworICBwYWRkaW5nOiAuNWVtOworfQorCisudGVzdC10YWJsZSB0aCB7
CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCAjY2NjOwor
ICBiYWNrZ3JvdW5kOiAjZWVlOworICBtaW4td2lkdGg6IDhlbTsKK30KKworLnRlc3QtdGFibGUg
dGJvZHkgdHI6aG92ZXIgeworICBiYWNrZ3JvdW5kOiAjZmZhOworfQorCisudGVzdC10YWJsZSAu
c3VibWl0LXJvdyB7CisgIHRleHQtYWxpZ246IHJpZ2h0OworICBwYWRkaW5nOiAxZW0gMDsKK30K
ZGlmZiAtLWdpdCBhL1Rvb2xzL1JlYmFzZWxpbmVRdWV1ZVNlcnZlci90ZW1wbGF0ZXMvYnVpbGRl
ci1waWNrZXIuaHRtbCBiL1Rvb2xzL1JlYmFzZWxpbmVRdWV1ZVNlcnZlci90ZW1wbGF0ZXMvYnVp
bGRlci1waWNrZXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMDY4YzA0MmEzNmU2N2JiODQ3MTAxMzMyMzBm
Y2VhODU0ODk1MjMyCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvUmViYXNlbGluZVF1ZXVlU2Vy
dmVyL3RlbXBsYXRlcy9idWlsZGVyLXBpY2tlci5odG1sCkBAIC0wLDAgKzEsNzQgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWwgaWQ9ImJ1aWxkZXItcGlja2VyIj4KKzxoZWFkPgorICAgIDx0aXRs
ZT5SZWJhc2VsaW5lIFF1ZXVlOiBCdWlsZGVyczwvdGl0bGU+CisgICAgPHNjcmlwdCBzcmM9Imh0
dHA6Ly90ZXN0LXJlc3VsdHMuYXBwc3BvdC5jb20vZGFzaGJvYXJkcy9idWlsZGVycy5qcyI+PC9z
Y3JpcHQ+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL3N0eWxlcy5j
c3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5PgorCis8ZGl2IGlkPSJidWlsZGVy
LXBpY2tlci1jb250cm9scyI+CisgICAgPGxhYmVsIGZvcj0iYnVpbGRlci1ncm91cCI+R3JvdXA6
PC9sYWJlbD4KKyAgICA8c2VsZWN0IGlkPSJidWlsZGVyLWdyb3VwIj4KKyAgICAgICAgPG9wdGlv
biBkaXNhYmxlZD48L29wdGlvbj4KKyAgICA8L3NlbGVjdD4KKworICAgIDxsYWJlbCBmb3I9ImJ1
aWxkZXIiPkJ1aWxkZXI6PC9sYWJlbD4KKyAgICA8c2VsZWN0IGlkPSJidWlsZGVyIj4KKyAgICAg
ICAgPG9wdGlvbiBkaXNhYmxlZD48L29wdGlvbj4KKyAgICA8L3NlbGVjdD4KKzwvZGl2PgorCis8
aWZyYW1lIHNyYz0iL3N0YXRpYy9idWlsZGVyLWZyYW1lLWVtcHR5Lmh0bWwiIGlkPSJidWlsZGVy
LWZyYW1lIj48L2lmcmFtZT4KKworPHNjcmlwdD4KK2Z1bmN0aW9uIGluaXQoKQoreworICAgIHZh
ciBidWlsZGVyR3JvdXBNZW51ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J1aWxkZXItZ3Jv
dXAnKTsKKyAgICBidWlsZGVyR3JvdXBNZW51LmFkZEV2ZW50TGlzdGVuZXIoCisgICAgICAgICdj
aGFuZ2UnLCBoYW5kbGVCdWlsZGVyR3JvdXBTZWxlY3RlZCwgZmFsc2UpOworCisgICAgdmFyIGJ1
aWxkZXJNZW51ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J1aWxkZXInKTsKKyAgICBidWls
ZGVyTWVudS5hZGRFdmVudExpc3RlbmVyKAorICAgICAgICAnY2hhbmdlJywgaGFuZGxlQnVpbGRl
clNlbGVjdGVkLCBmYWxzZSk7CisKKyAgICBmb3IgKHZhciBidWlsZGVyR3JvdXBOYW1lIGluIExB
WU9VVF9URVNUU19CVUlMREVSX0dST1VQUykgeworICAgICAgICB2YXIgYnVpbGRlckdyb3VwT3B0
aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7CisgICAgICAgIGJ1aWxkZXJH
cm91cE9wdGlvbi50ZXh0Q29udGVudCA9IGJ1aWxkZXJHcm91cE9wdGlvbi52YWx1ZSA9CisgICAg
ICAgICAgICBidWlsZGVyR3JvdXBOYW1lOworICAgICAgICBidWlsZGVyR3JvdXBNZW51LmFwcGVu
ZENoaWxkKGJ1aWxkZXJHcm91cE9wdGlvbik7CisgICAgfQorfQorCitmdW5jdGlvbiBoYW5kbGVC
dWlsZGVyR3JvdXBTZWxlY3RlZCgpCit7CisgICAgdmFyIGJ1aWxkZXJHcm91cE1lbnUgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnYnVpbGRlci1ncm91cCcpOworICAgIHZhciBidWlsZGVyR3Jv
dXBOYW1lID0KKyAgICAgICAgYnVpbGRlckdyb3VwTWVudS5vcHRpb25zW2J1aWxkZXJHcm91cE1l
bnUuc2VsZWN0ZWRJbmRleF0udmFsdWU7CisgICAgdmFyIGJ1aWxkZXJHcm91cCA9IExBWU9VVF9U
RVNUU19CVUlMREVSX0dST1VQU1tidWlsZGVyR3JvdXBOYW1lXTsKKworICAgIHZhciBidWlsZGVy
TWVudSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidWlsZGVyJyk7CisgICAgd2hpbGUgKGJ1
aWxkZXJNZW51Lm9wdGlvbnNbMV0pIHsKKyAgICAgICAgYnVpbGRlck1lbnUucmVtb3ZlQ2hpbGQo
YnVpbGRlck1lbnUub3B0aW9uc1sxXSk7CisgICAgfQorCisgICAgZm9yICh2YXIgYnVpbGRlck5h
bWUgaW4gYnVpbGRlckdyb3VwLmJ1aWxkZXJzKSB7CisgICAgICAgIHZhciBidWlsZGVyT3B0aW9u
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7CisgICAgICAgIGJ1aWxkZXJPcHRp
b24udGV4dENvbnRlbnQgPSBidWlsZGVyT3B0aW9uLnZhbHVlID0gYnVpbGRlck5hbWU7CisgICAg
ICAgIGJ1aWxkZXJNZW51LmFwcGVuZENoaWxkKGJ1aWxkZXJPcHRpb24pOworICAgIH0KK30KKwor
ZnVuY3Rpb24gaGFuZGxlQnVpbGRlclNlbGVjdGVkKCkKK3sKKyAgICB2YXIgYnVpbGRlck1lbnUg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnVpbGRlcicpOworICAgIHZhciBidWlsZGVyTmFt
ZSA9IGJ1aWxkZXJNZW51Lm9wdGlvbnNbYnVpbGRlck1lbnUuc2VsZWN0ZWRJbmRleF0udmFsdWU7
CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J1aWxkZXItZnJhbWUnKS5zcmMgPQorICAg
ICAgICAnL2J1aWxkZXIvJyArIGJ1aWxkZXJOYW1lICsgJy9xdWV1ZS9lZGl0JzsKK30KKworaW5p
dCgpOworPC9zY3JpcHQ+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Jl
YmFzZWxpbmVRdWV1ZVNlcnZlci90ZW1wbGF0ZXMvYnVpbGRlci1xdWV1ZS1lZGl0Lmh0bWwgYi9U
b29scy9SZWJhc2VsaW5lUXVldWVTZXJ2ZXIvdGVtcGxhdGVzL2J1aWxkZXItcXVldWUtZWRpdC5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjIxYTBmMDIwMDY5NmQ3M2ZlNzM2ZDlmMTkxNDcxMzljNDk3ZGZiZjcK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9SZWJhc2VsaW5lUXVldWVTZXJ2ZXIvdGVtcGxhdGVz
L2J1aWxkZXItcXVldWUtZWRpdC5odG1sCkBAIC0wLDAgKzEsMTc2IEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sIGlkPSJhZGQtZm9ybSI+Cis8aGVhZD4KKyAgICA8dGl0bGU+UmViYXNlbGluZSBR
dWV1ZTogRWRpdDwvdGl0bGU+CisgICAgPHNjcmlwdCBzcmM9Imh0dHA6Ly90ZXN0LXJlc3VsdHMu
YXBwc3BvdC5jb20vZGFzaGJvYXJkcy9idWlsZGVycy5qcyI+PC9zY3JpcHQ+CisgICAgPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL3N0eWxlcy5jc3MiIHR5cGU9InRleHQvY3Nz
Ij4KKzwvaGVhZD4KKzxib2R5Ij4KKworPGRpdiBpZD0ibG9hZGluZy1pbmRpY2F0b3IiIGNsYXNz
PSJzdGF0dXMiPkxvYWRpbmcuLi48L2Rpdj4KKworPGZvcm0gbWV0aG9kPSJQT1NUIiBpZD0iZm9y
bS10ZW1wbGF0ZSIgc3R5bGU9ImRpc3BsYXk6IG5vbmUiPgorICAgIDx0YWJsZSBjbGFzcz0idGVz
dC10YWJsZSI+CisgICAgICAgIDxjYXB0aW9uPjwvY2FwdGlvbj4KKyAgICAgICAgPHRoZWFkPgor
ICAgICAgICAgICAgPHRoPlRlc3Q8L3RoPgorICAgICAgICAgICAgPHRoPkV4cGVjdGVkPC90aD4K
KyAgICAgICAgICAgIDx0aD5BY3R1YWw8L3RoPgorICAgICAgICAgICAgPHRoPlJlc3VsdHM8L3Ro
PgorICAgICAgICA8L3RoZWFkPgorICAgICAgICA8dGJvZHk+PC90Ym9keT4KKyAgICAgICAgPHRi
b2R5PgorICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iNCIgY2xh
c3M9InN1Ym1pdC1yb3ciPgorICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZh
bHVlPSIiPgorICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPC90cj4KKyAgICAgICAg
PC90Ym9keT4KKyAgICA8L3RhYmxlPgorPC9mb3JtPgorCis8c2NyaXB0PgordmFyIFRFU1RfUkVT
VUxUU19TRVJWRVIgPSAnaHR0cDovL3Rlc3QtcmVzdWx0cy5hcHBzcG90LmNvbS8nOwordmFyIEJV
SUxERVJfVE9fR1JPVVAgPSB7fTsKK2ZvciAodmFyIGJ1aWxkZXJHcm91cE5hbWUgaW4gTEFZT1VU
X1RFU1RTX0JVSUxERVJfR1JPVVBTKSB7CisgICAgZm9yICh2YXIgYnVpbGRlck5hbWUgaW4gTEFZ
T1VUX1RFU1RTX0JVSUxERVJfR1JPVVBTW2J1aWxkZXJHcm91cE5hbWVdKSB7CisgICAgICAgIEJV
SUxERVJfVE9fR1JPVVBbYnVpbGRlck5hbWVdID0gYnVpbGRlckdyb3VwTmFtZTsKKyAgICB9Cit9
CisKKy8vIEV4dHJhY3QgdGVtcGxhdGUgcGFyYW1ldGVycwordmFyIGJ1aWxkZXJOYW1lID0gJ3t7
IGJ1aWxkZXJfbmFtZXxlc2NhcGVqcyB9fSc7Cit2YXIgcXVldWVkVGVzdE5hbWVzID0ge3sgcXVl
dWVkX3Rlc3RfbmFtZXN8c2FmZSB9fTsKKworZnVuY3Rpb24gaW5pdCgpCit7CisgIHZhciBidWls
ZGVyTWFzdGVyID0gQlVJTERFUl9UT19NQVNURVJbYnVpbGRlck5hbWVdOworICB2YXIgcmVzdWx0
c1VybCA9IFRFU1RfUkVTVUxUU19TRVJWRVIgKyAndGVzdGZpbGU/YnVpbGRlcj0nICsgYnVpbGRl
ck5hbWUgKworICAgICAgJyZtYXN0ZXI9JyArIGJ1aWxkZXJNYXN0ZXIubmFtZSArCisgICAgICAn
JnRlc3R0eXBlPWxheW91dC10ZXN0cyZuYW1lPWZ1bGxfcmVzdWx0cy5qc29uJzsKKworICB2YXIg
c2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CisgIHNjcmlwdC5zcmMg
PSByZXN1bHRzVXJsOworICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBd
LmFwcGVuZENoaWxkKHNjcmlwdCk7Cit9CisKK2Z1bmN0aW9uIEFERF9SRVNVTFRTKHJlc3VsdHMp
Cit7CisgICAgdmFyIGJ1aWxkZXJHcm91cE5hbWUgPSBCVUlMREVSX1RPX0dST1VQW2J1aWxkZXJO
YW1lXTsKKworICAgIHZhciB0ZXN0cyA9IHJlc3VsdHMudGVzdHM7CisgICAgdmFyIGZhaWxpbmdU
ZXN0cyA9IFtdOworICAgIHZhciBxdWV1ZWRUZXN0cyA9IFtdOworICAgIGZvciAodmFyIHRlc3Qg
aW4gdGVzdHMpIHsKKyAgICAgICAgdmFyIHRlc3RSZXN1bHRzID0gdGVzdHNbdGVzdF07CisgICAg
ICAgIGlmICh0ZXN0UmVzdWx0cy5hY3R1YWwgPT0gdGVzdFJlc3VsdHMuZXhwZWN0ZWQgfHwKKyAg
ICAgICAgICAgIHRlc3RSZXN1bHRzLmV4cGVjdGVkLnNwbGl0KCcgJykuaW5kZXhPZih0ZXN0UmVz
dWx0cy5hY3R1YWwpICE9IC0xIHx8CisgICAgICAgICAgICB0ZXN0UmVzdWx0cy5hY3R1YWwgPT0g
J1NLSVAnIHx8CisgICAgICAgICAgICB0ZXN0UmVzdWx0cy5hY3R1YWwuaW5kZXhPZignUEFTUycp
ICE9IC0xIHx8CisgICAgICAgICAgICAodGVzdFJlc3VsdHMuYWN0dWFsICE9ICdQQVNTJyAmJiB0
ZXN0UmVzdWx0cy5leHBlY3RlZC5pbmRleE9mKCdGQUlMJykgIT0gLTEpKSB7CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHRlc3RSZXN1bHRzLm5hbWUgPSB0ZXN0
OworCisgICAgICAgIGlmIChxdWV1ZWRUZXN0TmFtZXMuaW5kZXhPZih0ZXN0KSAhPSAtMSkgewor
ICAgICAgICAgICAgcXVldWVkVGVzdHMucHVzaCh0ZXN0UmVzdWx0cyk7CisgICAgICAgICAgICBx
dWV1ZWRUZXN0TmFtZXMuc3BsaWNlKHF1ZXVlZFRlc3ROYW1lcy5pbmRleE9mKHRlc3QpLCAxKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZhaWxpbmdUZXN0cy5wdXNoKHRlc3RSZXN1
bHRzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIElmIHdlIGhhdmUgcmVtYWluaW5nIHF1
ZXVlZCB0ZXN0cyB0aGF0IGFyZSBjdXJyZW50bHkgbm90IGZhaWxpbmcsCisgICAgLy8gc3ludGhl
c2l6ZSByZXN1bHRzIGZvciB0aGVtLgorICAgIHF1ZXVlZFRlc3ROYW1lcy5mb3JFYWNoKGZ1bmN0
aW9uKHF1ZXVlZFRlc3ROYW1lKSB7CisgICAgICAgIHF1ZXVlZFRlc3RzLnB1c2goeworICAgICAg
ICAgIG5hbWU6IHF1ZXVlZFRlc3ROYW1lLAorICAgICAgICAgIGFjdHVhbDogJ1VOS05PV04nLAor
ICAgICAgICAgIGV4cGVjdGVkOiAnVU5LTk9XTicKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9hZGluZy1pbmRpY2F0b3InKS5zdHlsZS5kaXNw
bGF5ID0gJ25vbmUnOworCisgICAgcmVuZGVyVGVzdFJlc3VsdHMoCisgICAgICAgIGZhaWxpbmdU
ZXN0cywKKyAgICAgICAgJ2FkZCcsCisgICAgICAgICdGYWlsaW5nIHRlc3RzJywKKyAgICAgICAg
J0FkZCB0byByZWJhc2VsaW5lIHF1ZXVlJywKKyAgICAgICAgJ05vIGZhaWxpbmcgdGVzdHMuJyk7
CisgICAgcmVuZGVyVGVzdFJlc3VsdHMoCisgICAgICAgIHF1ZXVlZFRlc3RzLAorICAgICAgICAn
cmVtb3ZlJywKKyAgICAgICAgJ1F1ZXVlZCB0ZXN0cycsCisgICAgICAgICdSZW1vdmUgZnJvbSBy
ZWJhc2VsaW5lIHF1ZXVlJywKKyAgICAgICAgJ05vIHF1ZXVlZCB0ZXN0cy4nKTsKK30KKworZnVu
Y3Rpb24gcmVuZGVyVGVzdFJlc3VsdHModGVzdFJlc3VsdHMsIGZvcm1BY3Rpb24sIHRpdGxlLCBz
dWJtaXRMYWJlbCwgZW1wdHlNZXNzYWdlKQoreworICAgIGlmICh0ZXN0UmVzdWx0cy5sZW5ndGgg
PT0gMCkgeworICAgICAgICB2YXIgZW1wdHlOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
ZGl2Jyk7CisgICAgICAgIGVtcHR5Tm9kZS5jbGFzc05hbWUgPSAnc3RhdHVzJzsKKyAgICAgICAg
ZW1wdHlOb2RlLnRleHRDb250ZW50ID0gZW1wdHlNZXNzYWdlOworICAgICAgICBkb2N1bWVudC5i
b2R5LmFwcGVuZENoaWxkKGVtcHR5Tm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICB2YXIgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmb3JtLXRlbXBsYXRlJykuY2xv
bmVOb2RlKHRydWUpOworICAgIGZvcm0uYWN0aW9uID0gJy9idWlsZGVyLycgKyBidWlsZGVyTmFt
ZSArICcvcXVldWUvJyArIGZvcm1BY3Rpb247CisgICAgZm9ybS5zdHlsZS5kaXNwbGF5ID0gJyc7
CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmb3JtKTsKKworICAgIHZhciB0ZXN0c1Rh
YmxlID0gZm9ybS5xdWVyeVNlbGVjdG9yKCcudGVzdC10YWJsZScpOworICAgIHRlc3RzVGFibGUu
cXVlcnlTZWxlY3RvcignY2FwdGlvbicpLnRleHRDb250ZW50ID0gdGl0bGU7CisgICAgdGVzdHNU
YWJsZS5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPXN1Ym1pdF0nKS52YWx1ZSA9IHN1Ym1pdExh
YmVsOworCisgICAgdGVzdFJlc3VsdHMuc29ydChmdW5jdGlvbihhLCBiKSB7CisgICAgICAgIHJl
dHVybiBhLm5hbWUgPCBiLm5hbWUgPyAtMSA6IChhLm5hbWUgPiBiLm5hbWUgPyAxIDogMCk7Cisg
ICAgfSk7CisKKyAgICB0ZXN0UmVzdWx0cy5mb3JFYWNoKGZ1bmN0aW9uKHJlc3VsdCkgeworICAg
ICAgICB2YXIgdGVzdFJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CisKKyAgICAg
ICAgdmFyIHRlc3RDZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKKyAgICAgICAg
dGVzdFJvdy5hcHBlbmRDaGlsZCh0ZXN0Q2VsbCk7CisgICAgICAgIHZhciB0ZXN0Q2hlY2tib3gg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOworICAgICAgICB0ZXN0Q2hlY2tib3gu
dHlwZSA9ICdjaGVja2JveCc7CisgICAgICAgIHRlc3RDaGVja2JveC5uYW1lID0gJ3Rlc3QnOwor
ICAgICAgICB0ZXN0Q2hlY2tib3gudmFsdWUgPSByZXN1bHQubmFtZTsKKyAgICAgICAgdGVzdENo
ZWNrYm94LmlkID0gcmVzdWx0Lm5hbWU7CisgICAgICAgIHRlc3RDZWxsLmFwcGVuZENoaWxkKHRl
c3RDaGVja2JveCk7CisKKyAgICAgICAgdmFyIHRlc3ROYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnbGFiZWwnKTsKKyAgICAgICAgdGVzdE5hbWUudGV4dENvbnRlbnQgPSByZXN1bHQubmFt
ZTsKKyAgICAgICAgdGVzdE5hbWUuc2V0QXR0cmlidXRlKCdmb3InLCByZXN1bHQubmFtZSk7Cisg
ICAgICAgIHRlc3RDZWxsLmFwcGVuZENoaWxkKHRlc3ROYW1lKTsKKworICAgICAgICB2YXIgZXhw
ZWN0ZWRDZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKKyAgICAgICAgdGVzdFJv
dy5hcHBlbmRDaGlsZChleHBlY3RlZENlbGwpOworICAgICAgICBleHBlY3RlZENlbGwudGV4dENv
bnRlbnQgPSByZXN1bHQuZXhwZWN0ZWQ7CisKKyAgICAgICAgdmFyIGFjdHVhbENlbGwgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOworICAgICAgICB0ZXN0Um93LmFwcGVuZENoaWxkKGFj
dHVhbENlbGwpOworICAgICAgICBhY3R1YWxDZWxsLnRleHRDb250ZW50ID0gcmVzdWx0LmFjdHVh
bDsKKworICAgICAgICB2YXIgcmVzdWx0c0NlbGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0
ZCcpOworICAgICAgICB0ZXN0Um93LmFwcGVuZENoaWxkKHJlc3VsdHNDZWxsKTsKKyAgICAgICAg
dmFyIHJlc3VsdHNMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOworICAgICAgICBy
ZXN1bHRzTGluay50YXJnZXQgPSAnX2JsYW5rJzsKKyAgICAgICAgcmVzdWx0c0xpbmsuaHJlZiA9
IFRFU1RfUkVTVUxUU19TRVJWRVIgKworICAgICAgICAgICAgJ2Rhc2hib2FyZHMvZmxha2luZXNz
X2Rhc2hib2FyZC5odG1sI3Rlc3RzPScgKyByZXN1bHQubmFtZSArCisgICAgICAgICAgICAnJmdy
b3VwPScgKyBidWlsZGVyR3JvdXBOYW1lOworICAgICAgICByZXN1bHRzTGluay50ZXh0Q29udGVu
dCA9ICdGbGFraW5lc3MgZGFzaGJvYXJkJzsKKyAgICAgICAgcmVzdWx0c0NlbGwuYXBwZW5kQ2hp
bGQocmVzdWx0c0xpbmspOworCisgICAgICAgIHRlc3RzVGFibGUudEJvZGllc1swXS5hcHBlbmRD
aGlsZCh0ZXN0Um93KTsKKyAgICB9KTsKK30KKworaW5pdCgpOworPC9zY3JpcHQ+CisKKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1JlYmFzZWxpbmVRdWV1ZVNlcnZlci90ZW1w
bGF0ZXMvYnVpbGRlci1xdWV1ZS1saXN0Lmh0bWwgYi9Ub29scy9SZWJhc2VsaW5lUXVldWVTZXJ2
ZXIvdGVtcGxhdGVzL2J1aWxkZXItcXVldWUtbGlzdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc5ZmEwMmE2
MzU1MTllZTg1MTZmY2Q2YWJjYmVkMTM4MWNkZTViZjIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9SZWJhc2VsaW5lUXVldWVTZXJ2ZXIvdGVtcGxhdGVzL2J1aWxkZXItcXVldWUtbGlzdC5odG1s
CkBAIC0wLDAgKzEsMjMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8
dGl0bGU+e3sgYnVpbGRlcl9uYW1lfGVzY2FwZSB9fSBRdWV1ZTwvdGl0bGU+CisgICAgPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL3N0eWxlcy5jc3MiIHR5cGU9InRleHQvY3Nz
Ij4KKzwvaGVhZD4KKzxib2R5PgorCis8aDE+UXVldWU6IHt7IGJ1aWxkZXJfbmFtZXxlc2NhcGUg
fX08L2gxPgorCis8b2w+Cit7JSBmb3IgZW50cnkgaW4gZW50cmllcyAlfQorICAgIDxsaT4KKyAg
ICAgICAge3sgZW50cnkudGVzdHxlc2NhcGUgfX0KKyAgICA8L2xpPgoreyUgZW1wdHkgJX0KKyAg
ICBObyB0ZXN0cyBmb3VuZCBpbiBxdWV1ZS4KK3slIGVuZGZvciAlfQorPC9vbD4KKworPGEgaHJl
Zj0iL2J1aWxkZXIve3sgYnVpbGRlcl9uYW1lfGVzY2FwZSB9fS9xdWV1ZS9lZGl0Ij5FZGl0IHF1
ZXVlPC9hPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvVG9vbHMvUmViYXNlbGluZVF1
ZXVlU2VydmVyL3RlbXBsYXRlcy9ob21lLmh0bWwgYi9Ub29scy9SZWJhc2VsaW5lUXVldWVTZXJ2
ZXIvdGVtcGxhdGVzL2hvbWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNmExNmZmZGNhMjk0NTY5OTQzZGY5
YjAwYTRmNDgxZTQ3ZThmMmI5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvUmViYXNlbGluZVF1
ZXVlU2VydmVyL3RlbXBsYXRlcy9ob21lLmh0bWwKQEAgLTAsMCArMSwyOCBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICA8dGl0bGU+UmViYXNlbGluZSBRdWV1ZTwvdGl0bGU+
CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9zdHlsZXMuY3NzIiB0eXBl
PSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keT4KKworPGgxPlJlYmFzZWxpbmUgUXVldWU8L2gx
PgorCis8dWw+CisgICAgPGxpPjxhIGhyZWY9Ii9idWlsZGVyL3BpY2tlciI+QnJvd3NlIGFuZCBl
bnF1ZXVlIGZhaWxpbmcgdGVzdHMgb24gYnVpbGRlcnM8L2E+PC9saT4KKyAgICA8bGk+CisgICAg
ICAgIEJ1aWxkZXJzIHdpdGggZW5xdWV1ZWQgdGVzdHM6CisgICAgICAgIDx1bD4KK3slIGZvciBi
dWlsZGVyX25hbWUgaW4gYnVpbGRlcl9uYW1lcyAlfQorICAgICAgICAgIDxsaT4KKyAgICAgICAg
ICAgIDxhIGhyZWY9Ii9idWlsZGVyL3t7IGJ1aWxkZXJfbmFtZXxlc2NhcGUgfX0vcXVldWUiPnt7
IGJ1aWxkZXJfbmFtZXxlc2NhcGUgfX08L2E+CisgICAgICAgICAgPC9saT4KK3slIGVtcHR5ICV9
CisgICAgICAgIE5vbmUKK3slIGVuZGZvciAlfQorICAgICAgICA8L3VsPgorICAgIDwvbGk+Cis8
L3VsPgorCis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="82137"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>