<?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>63398</bug_id>
          
          <creation_ts>2011-06-26 06:17:39 -0700</creation_ts>
          <short_desc>Poisoning of strict caller,arguments inappropriately poisoning &quot;in&quot;</short_desc>
          <delta_ts>2012-03-26 13:20:06 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>65579</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Mark S. Miller">erights</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>erights</cc>
    
    <cc>jwalden+bwo</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>427508</commentid>
    <comment_count>0</comment_count>
    <who name="Mark S. Miller">erights</who>
    <bug_when>2011-06-26 06:17:39 -0700</bug_when>
    <thetext>&apos;caller&apos; in function(){&quot;use strict&quot;}
TypeError: Cannot access caller property of a strict mode function
&apos;arguments&apos; in function(){&quot;use strict&quot;}
TypeError: Can&apos;t access arguments object of a strict mode function

The poisoning should be equivalent to making &apos;caller&apos; and &apos;arguments&apos; into accessor properties whose getter &amp; setter throw. However, getters and setters should not be activated by &quot;in&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427509</commentid>
    <comment_count>1</comment_count>
    <who name="Mark S. Miller">erights</who>
    <bug_when>2011-06-26 06:42:48 -0700</bug_when>
    <thetext>I&apos;m using WebKit Nightly Version 5.0.5 (5533.21.1, r89741).


A further weirdness is that the TypeError that&apos;s thrown isn&apos;t caught by a one level try/catch.

try { &apos;caller&apos; in function(){&quot;use strict&quot;} } catch (e) {}
TypeError: Cannot access caller property of a strict mode function


Further testing in the context of a larger system (look for &quot;has(&quot; in http://codereview.appspot.com/4603044/patch/8002/18002?column_width=100 ) indicates that there is some two level combination of try/catch/finally which can catch the TypeError in the out catch, even though it had skipped past both the inner catch and finally. However, I haven&apos;t isolated this yet into a standalone test case. This may be symptom of a distinct bug.

Without one of the finallys there, I also found that testing under the WebKit debigger caused WebKit as a whole to crash. I haven&apos;t yet isolated that either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427512</commentid>
    <comment_count>2</comment_count>
      <attachid>98621</attachid>
    <who name="Mark S. Miller">erights</who>
    <bug_when>2011-06-26 06:55:33 -0700</bug_when>
    <thetext>Created attachment 98621
Demonstrates the ability to catch the TypeError in an outer catch

The attached file demonstrates the ability to catch the TypeError in an outer catch. Look for &quot;has(&quot;. This file also contains other diagnostics you may find useful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453605</commentid>
    <comment_count>3</comment_count>
    <who name="Mark S. Miller">erights</who>
    <bug_when>2011-08-18 21:08:29 -0700</bug_when>
    <thetext>(function(){&quot;use strict&quot;;}).hasOwnProperty(&apos;caller&apos;)
TypeError: Cannot access caller property of a strict mode function

The problem also occurs for other operations besides &apos;in&apos;. Again, as with &apos;in&apos;, the poisoning of &apos;caller&apos; should not prevent hasOwnProperty from working as specified. hasOwnProperty must not attempt to access the property&apos;s value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485718</commentid>
    <comment_count>4</comment_count>
      <attachid>111364</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-10-17 18:36:12 -0700</bug_when>
    <thetext>Created attachment 111364
The patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485722</commentid>
    <comment_count>5</comment_count>
      <attachid>111364</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-10-17 18:39:57 -0700</bug_when>
    <thetext>Comment on attachment 111364
The patch

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

&gt; Source/JavaScriptCore/ChangeLog:3
&gt; +        Poisoning of strict caller,arguments inappropriately poisoning &quot;in&quot;

The comma here is off.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485769</commentid>
    <comment_count>6</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-10-17 20:43:51 -0700</bug_when>
    <thetext>Fixed in r97709.

The problem with the exception not being caught was specific to this case of an exception being thrown (we weren&apos;t checking for an exception in a case where one never should be thrown), so with the bug fixed there should be no related problem left, but I&apos;ve added an ASSERT to JIT Stubs that guards against this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485805</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-17 22:12:18 -0700</bug_when>
    <thetext>It appears that a bunch of tests started failing after this patch:
http://build.webkit.org/results/SnowLeopard%20Intel%20Release%20(Tests)/r97710%20(33977)/results.html

Also, the change long entry was inserted at wrong place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485889</commentid>
    <comment_count>8</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-10-18 00:52:56 -0700</bug_when>
    <thetext>&gt; Also, the change long entry was inserted at wrong place.
Sorry, svn up keeps doing this to me, I don&apos;t always catch it. :-(

Rolled out in r97719, reopened.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485897</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-18 01:06:54 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; Also, the change long entry was inserted at wrong place.
&gt; Sorry, svn up keeps doing this to me, I don&apos;t always catch it. :-(

FYI, webkit-patch land should warn you about this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487018</commentid>
    <comment_count>10</comment_count>
      <attachid>111677</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-10-19 14:39:06 -0700</bug_when>
    <thetext>Created attachment 111677
experimenting with an alternative way to fix the problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487153</commentid>
    <comment_count>11</comment_count>
      <attachid>111698</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-10-19 17:04:32 -0700</bug_when>
    <thetext>Created attachment 111698
Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487192</commentid>
    <comment_count>12</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-10-19 18:18:27 -0700</bug_when>
    <thetext>Resolved in r97905.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588056</commentid>
    <comment_count>13</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-03-26 13:20:06 -0700</bug_when>
    <thetext>*** Bug 56492 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>98621</attachid>
            <date>2011-06-26 06:55:33 -0700</date>
            <delta_ts>2011-06-26 06:55:33 -0700</delta_ts>
            <desc>Demonstrates the ability to catch the TypeError in an outer catch</desc>
            <filename>repairES5.js</filename>
            <type>text/plain</type>
            <size>40886</size>
            <attacher name="Mark S. Miller">erights</attacher>
            
              <data encoding="base64">Ly8gQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuCi8vCi8vIExpY2Vuc2VkIHVuZGVyIHRo
ZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwovLyB5b3UgbWF5
IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2Uu
Ci8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAovLwovLyBodHRwOi8v
d3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVk
IGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBk
aXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMi
IEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwg
ZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3Bl
Y2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAovLyBsaW1pdGF0aW9ucyB1
bmRlciB0aGUgTGljZW5zZS4KCnZhciBSZWdFeHA7CgovKioKICogQGZpbGVvdmVydmlldyBNb25r
ZXkgcGF0Y2ggYWxtb3N0IEVTNSBwbGF0Zm9ybXMgaW50byBhIGNsb3NlcgogKiBlbXVsYXRpb24g
b2YgZnVsbCA8YSBocmVmPQogKiAiaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2VzLWxhYi93aWtp
L1NlY3VyZWFibGVFUzUiID5zZWN1cmVhYmxlCiAqIEVTNTwvYT4uCiAqCiAqIDxwPlF1YWxpZnlp
bmcgcGxhdGZvcm1zIGdlbmVyYWxseSBpbmNsdWRlIGFsbCBKYXZhU2NyaXB0IHBsYXRmb3Jtcwog
KiBzaG93biBvbiA8YSBocmVmPSJodHRwOi8va2FuZ2F4LmdpdGh1Yi5jb20vZXM1LWNvbXBhdC10
YWJsZS8iCiAqID5FQ01BU2NyaXB0IDUgY29tcGF0aWJpbGl0eSB0YWJsZTwvYT4gdGhhdCBpbXBs
ZW1lbnQge0Bjb2RlCiAqIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfS4gQXQgdGhlIHRpbWUg
b2YgdGhpcyB3cml0aW5nLAogKiBxdWFsaWZ5aW5nIGJyb3dzZXJzIGFscmVhZHkgaW5jbHVkZSB0
aGUgbGF0ZXN0IHJlbGVhc2VkIHZlcnNpb25zIG9mCiAqIEludGVybmV0IEV4cGxvcmVyICg5KSwg
RmlyZWZveCAoNCksIENocm9tZSAoMTEpLCBhbmQgU2FmYXJpCiAqICg1LjAuNSksIHRoZWlyIGNv
cnJlc3BvbmRpbmcgc3RhbmRhbG9uZSAoZS5nLiwgc2VydmVyLXNpZGUpIEphdmFTY3JpcHQKICog
ZW5naW5lcywgYW5kIFJoaW5vIDEuNzMgYW5kIEJFU0VOLgogKgogKiA8cD5PbiBzdWNoIG5vdC1x
dWl0ZS1FUzUgcGxhdGZvcm1zLCBzb21lIGVsZW1lbnRzIG9mIHRoZXNlCiAqIGVtdWxhdGlvbnMg
bWF5IGxvc2UgU0VTIHNhZmV0eSwgYXMgZW51bWVyYXRlZCBpbiB0aGUgY29tbWVudCBvbgogKiBl
YWNoIGtsdWRnZS1zd2l0Y2ggdmFyaWFibGUgYmVsb3cuIFRoZSBwbGF0Zm9ybSBtdXN0IGF0IGxl
YXN0CiAqIHByb3ZpZGUgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsIGJlY2F1c2UgaXQgY2Fu
bm90IHJlYXNvbmFibHkgYmUKICogZW11bGF0ZWQuCiAqCiAqIDxwPlRoaXMgZmlsZSBpcyB1c2Vm
dWwgYnkgaXRzZWxmLCBhcyBpdCBoYXMgbm8gZGVwZW5kZW5jaWVzIG9uIHRoZQogKiByZXN0IG9m
IFNFUy4gSXQgY3JlYXRlcyBubyBuZXcgZ2xvYmFsIGJpbmRpbmdzLCBidXQgbWVyZWx5IHJlcGFp
cnMKICogc3RhbmRhcmQgZ2xvYmFscyBvciBzdGFuZGFyZCBlbGVtZW50cyByZWFjaGFibGUgZnJv
bSBzdGFuZGFyZAogKiBnbG9iYWxzLiBJZiB0aGUgZnV0dXJlLXN0YW5kYXJkIHtAY29kZSBXZWFr
TWFwfSBnbG9iYWwgaXMgcHJlc2VudCwKICogYXMgaXQgaXMgY3VycmVudGx5IG9uIEZGNy4wYTEs
IHRoZW4gaXQgd2lsbCByZXBhaXIgaXQgaW4gcGxhY2UuIFRoZQogKiBvbmUgbm9uLXN0YW5kYXJk
IGVsZW1lbnQgdGhhdCB0aGlzIGZpbGUgdXNlcyBpcyB7QGNvZGUgY29uc29sZS5sb2d9CiAqIGlm
IHByZXNlbnQsIGluIG9yZGVyIHRvIHJlcG9ydCB0aGUgcmVwYWlycyBpdCBmb3VuZCBuZWNlc3Nh
cnkuIElmCiAqIHtAY29kZSBjb25zb2xlLmxvZ30gaXMgYWJzZW50LCB0aGVuIHRoaXMgZmlsZSBw
ZXJmb3JtcyBpdHMgcmVwYWlycwogKiBzaWxlbnRseS4KICoKICogPHA+R2VuZXJhbGx5LCB0aGlz
IGZpbGUgc2hvdWxkIGJlIHJ1biBhcyB0aGUgZmlyc3Qgc2NyaXB0IGluIGEKICogSmF2YVNjcmlw
dCBjb250ZXh0IChpLmUuIGEgYnJvd3NlciBmcmFtZSksIGFzIGl0IHJlcGxpZXMgb24gb3RoZXIK
ICogcHJpbW9yZGlhbCBvYmplY3RzIGFuZCBtZXRob2RzIG5vdCB5ZXQgYmVpbmcgcGVydHVyYmVk
LgogKgogKiBUT0RPKGVyaWdodHMpOiBUaGlzIGZpbGUgdHJpZXMgdG8gcHJvdGVjdHMgaXRzZWxm
IGZyb20gbW9zdAogKiBwb3N0LWluaXRpYWxpemF0aW9uIHBlcnR1cmJhdGlvbiwgYnkgc3Rhc2hp
bmcgdGhlIHByaW1vcmRpYWxzIGl0CiAqIG5lZWRzIGZvciBsYXRlciB1c2UsIGJ1dCB0aGlzIGF0
dGVtcHQgaXMgY3VycmVudGx5IGluY29tcGxldGUuIFdlCiAqIG5lZWQgdG8gcmV2aXNpdCB0aGlz
IHdoZW4gd2Ugc3VwcG9ydCBDb25maW5lZC1FUzUsIGFzIGEgdmFyaWFudCBvZgogKiBTRVMgaW4g
d2hpY2ggdGhlIHByaW1vcmRpYWxzIGFyZSBub3QgZnJvemVuLgogKi8KKGZ1bmN0aW9uKGdsb2Jh
bCkgewogICJ1c2Ugc3RyaWN0IjsKCiAgZnVuY3Rpb24gbG9nKHN0cikgewogICAgaWYgKHR5cGVv
ZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiAnbG9nJyBpbiBjb25zb2xlKSB7CiAgICAgIC8v
IFdlIG5vIGxvbmdlciB0ZXN0ICh0eXBlb2YgY29uc29sZS5sb2cgPT09ICdmdW5jdGlvbicpIHNp
bmNlLAogICAgICAvLyBvbiBJRTkgYW5kIElFMTBwcmV2aWV3LCBpbiB2aW9sYXRpb24gb2YgdGhl
IEVTNSBzcGVjLCBpdAogICAgICAvLyBpcyBjYWxsYWJsZSBidXQgaGFzIHR5cGVvZiAib2JqZWN0
Ii4KICAgICAgLy8gVE9ETyhlcmlnaHRzKTogcmVwb3J0IHRvIE1TLgogICAgICBjb25zb2xlLmxv
ZyhzdHIpOwogICAgfQogIH0KCiAgaWYgKCFPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcykgewog
ICAgdmFyIGNvbXBsYWludCA9ICdQbGVhc2UgdXBncmFkZSB0byBhIEphdmFTY3JpcHQgcGxhdGZv
cm0gJyArCiAgICAgICd3aGljaCBpbXBsZW1lbnRzIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVz
JzsKICAgIGxvZyhjb21wbGFpbnQpOwogICAgdGhyb3cgbmV3IEV2YWxFcnJvcihjb21wbGFpbnQp
OwogIH0KCiAgLy8vLy8vLy8vLy8vLy8vIEtMVURHRSBTV0lUQ0hFUyAvLy8vLy8vLy8vLy8vLy8K
CiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgLy8gVGhlIGZvbGxvd2luZyBh
cmUgb25seSB0aGUgbWluaW1hbCBrbHVkZ2VzIG5lZWRlZCBmb3IgdGhlIGN1cnJlbnQKICAvLyBG
aXJlZm94LCBTYWZhcmksIG9yIHRoZSBjdXJyZW50IENocm9tZSBCZXRhLiBBdCB0aGUgdGltZSBv
ZgogIC8vIHRoaXMgd3JpdGluZywgdGhlc2UgYXJlIEZpcmVmb3ggNC4wLCBTYWZhcmkgNS4wLjQg
KDU1MzMuMjAuMjcpCiAgLy8gYW5kIENocm9tZSAxMi4wLjc0Mi4xMiBkZXYKICAvLyBBcyB0aGVz
ZSBtb3ZlIGZvcndhcmQsIGtsdWRnZXMgY2FuIGJlIHJlbW92ZWQgdW50aWwgd2Ugc2ltcGx5CiAg
Ly8gcmVseSBvbiBFUzUuCgoKICAvKioKICAgKiBUZXN0cyBmb3IKICAgKiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTEwOTcKICAgKiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTgzMzgKICAgKiBodHRwOi8vY29kZS5nb29nbGUuY29tL3Av
djgvaXNzdWVzL2RldGFpbD9pZD0xNDM3CiAgICoKICAgKiA8cD5ObyB3b3JrYXJvdW5kIGF0dGVt
cHRlZC4gSnVzdCByZXBvcnRpbmcgdGhhdCB0aGlzIHBsYXRmb3JtIGlzCiAgICogbm90IFNFUy1z
YWZlLgogICAqLwogIGZ1bmN0aW9uIHRlc3RfR0xPQkFMX0xFQUtTKCkgewogICAgdmFyIHYgPSB7
fS52YWx1ZU9mOwogICAgdmFyIHRoYXQgPSAnZHVtbXknOwogICAgdHJ5IHsKICAgICAgdGhhdCA9
IHYoKTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBpZiAoZXJyIGluc3RhbmNlb2YgVHlwZUVy
cm9yKSB7IHJldHVybiBmYWxzZTsgfQogICAgICBsb2coJ05ldyBzeW1wdG9tOiAnICsKICAgICAg
ICAgICd2YWx1ZU9mKCkgdGhyZXcgJyArIGVycik7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQog
ICAgcmV0dXJuIHRydWU7CiAgfQoKCiAgLyoqCiAgICogV29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1NzM2CiAgICoKICAgKiA8cD5BcyBvZiB0
aGlzIHdyaXRpbmcsIHRoZSBvbmx5IG1ham9yIGJyb3dzZXIgdGhhdCBkb2VzIGltcGxlbWVudAog
ICAqIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIGJ1dCBub3QgT2JqZWN0LmZyZWV6ZSBldGMg
aXMgdGhlCiAgICogcmVsZWFzZWQgU2FmYXJpIDUgKEphdmFTY3JpcHRDb3JlKS4gVGhlIFNhZmFy
aSBiZXRhIDUuMC40CiAgICogKDU1MzMuMjAuMjcsIHI4NDYyMikgYWxyZWFkeSBkb2VzIGltcGxl
bWVudCBmcmVlemUsIHdoaWNoIGlzIHdoeQogICAqIHRoaXMgV2ViS2l0IGJ1ZyBpcyBsaXN0ZWQg
YXMgY2xvc2VkLiBXaGVuIHRoZSByZWxlYXNlZCBTYWZhcmkgaGFzCiAgICogdGhpcyBmaXgsIHdl
IGNhbiByZXRpcmUgdGhpcyBrbHVkZ2UuCiAgICoKICAgKiA8cD5UaGlzIGtsdWRnZSBpcyA8Yj5u
b3Q8L2I+IHNhZmV0eSBwcmVzZXJ2aW5nLiBUaGUgZW11bGF0aW9ucyBpdAogICAqIGluc3RhbGxz
IGlmIG5lZWRlZCBkbyBub3QgYWN0dWFsbHkgcHJvdmlkZSB0aGUgc2FmZXR5IHRoYXQgdGhlCiAg
ICogcmVzdCBvZiBTRVMgcmVsaWVzIG9uLgogICAqLwogIGZ1bmN0aW9uIHRlc3RfTUlTU0lOR19G
UkVFWkVfRVRDKCkgewogICAgcmV0dXJuICEoJ2ZyZWV6ZScgaW4gT2JqZWN0KTsKICB9CgoKICAv
KioKICAgKiBXb3JrYXJvdW5kIGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTU1MzcKICAgKgogICAqIFRoaXMgYnVnIGlzIGZpeGVkIG9uIHRoZSBsYXRlc3QgU2Fm
YXJpIGJldGEgNS4wLjUgKDU1MzMuMjEuMSwKICAgKiByODg2MDMpLiBXaGVuIHRoZSByZWxlYXNl
ZCBTYWZhcmkgaGFzIHRoaXMgZml4LCB3ZSBjYW4gcmV0aXJlCiAgICogdGhpcyBrbHVkZ2UuCiAg
ICoKICAgKiA8cD5UaGlzIGtsdWRnZSBpcyBzYWZldHkgcHJlc2VydmluZy4KICAgKi8KICBmdW5j
dGlvbiB0ZXN0X01JU1NJTkdfQ0FMTEVFX0RFU0NSSVBUT1IoKSB7CiAgICBmdW5jdGlvbiBmb28o
KXt9CiAgICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZm9vKS5pbmRleE9mKCdjYWxs
ZWUnKSA8IDApIHsgcmV0dXJuIGZhbHNlOyB9CiAgICBpZiAoZm9vLmhhc093blByb3BlcnR5KCdj
YWxsZWUnKSkgewogICAgICBsb2coJ05ldyBzeW1wdG9tOiBlbXB0eSBzdHJpY3QgZnVuY3Rpb24g
aGFzIG93biBjYWxsZWUnKTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCgogIC8qKgogICAq
IFdvcmsgYXJvdW5kIGZvciBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNn
aT9pZD01OTE4NDYKICAgKiBhcyBhcHBsaWVkIHRvIHRoZSBSZWdFeHAgY29uc3RydWN0b3IuCiAg
ICoKICAgKiA8cD5Ob3RlIHRoYXQgTW96aWxsYSBsaXN0cyB0aGlzIGJ1ZyBhcyBjbG9zZWQuIEJ1
dCByZWFkaW5nIHRoYXQKICAgKiBidWcgdGhyZWFkIGNsYXJpZmllcyB0aGF0IGlzIHBhcnRpYWxs
eSBiZWNhdXNlIHRoZSBmb2xsb3dpbmcgY29kZQogICAqIGFsbG93cyB1cyB0byB3b3JrIGFyb3Vu
ZCB0aGUgbm9uLWNvbmZpZ3VyYWJpbGl0eSBvZiB0aGUgUmVnRXhwCiAgICogc3RhdGljcy4KICAg
KgogICAqIDxwPlRoaXMga2x1ZGdlIGlzIHNhZmV0eSBwcmVzZXJ2aW5nLgogICAqLwogIGZ1bmN0
aW9uIHRlc3RfUkVHRVhQX0NBTlRfQkVfTkVVVEVSRUQoKSB7CiAgICBpZiAoIVJlZ0V4cC5oYXNP
d25Qcm9wZXJ0eSgnbGVmdENvbnRleHQnKSkgeyByZXR1cm4gZmFsc2U7IH0KICAgIHZhciBkZWxl
dGlvbjsKICAgIHRyeSB7CiAgICAgIGRlbGV0aW9uID0gZGVsZXRlIFJlZ0V4cC5sZWZ0Q29udGV4
dDsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBpZiAoIShlcnIgaW5zdGFuY2VvZiBUeXBlRXJy
b3IpKSB7CiAgICAgICAgbG9nKCdOZXcgc3ltcHRvbTogZGVsZXRpb24gZmFpbGVkIHdpdGggJyAr
IGVycik7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAoIVJlZ0V4cC5o
YXNPd25Qcm9wZXJ0eSgnbGVmdENvbnRleHQnKSkgeyByZXR1cm4gZmFsc2U7IH0KICAgIGlmIChk
ZWxldGlvbikgewogICAgICBsb2coJ05ldyBzeW1wdG9tOiBEZWxldGlvbiBvZiBSZWdFeHAubGVm
dENvbnRleHQgZmFpbGVkLicpOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKCiAgLyoqCiAg
ICogV29yayBhcm91bmQgZm9yIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0
YWlsP2lkPTEzOTMKICAgKgogICAqIDxwPlRoaXMga2x1ZGdlIGlzIHNhZmV0eSBwcmVzZXJ2aW5n
LgogICAqLwogIGZ1bmN0aW9uIHRlc3RfUkVHRVhQX1RFU1RfRVhFQ19VTlNBRkUoKSB7CiAgICAo
L2Zvby8pLnRlc3QoJ3hmb294Jyk7CiAgICB2YXIgbWF0Y2ggPSBuZXcgUmVnRXhwKCcoLnxccnxc
bikqJywnJykuZXhlYygpWzBdOwogICAgaWYgKG1hdGNoID09PSAndW5kZWZpbmVkJykgeyByZXR1
cm4gZmFsc2U7IH0KICAgIGlmIChtYXRjaCAhPT0gJ3hmb294JykgewogICAgICBsb2coJ05ldyBz
eW1wdG9tOiByZWdFeHAuZXhlYygpIGRvZXMgbm90IG1hdGNoIGFnYWluc3QgInVuZGVmaW5lZCIu
Jyk7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgoKICAvKioKICAgKiBXb3JrYXJvdW5kIGZv
ciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjYzODIKICAgKgogICAq
IDxwPkFzIG9mIHRoaXMgd3JpdGluZywgdGhlIG9ubHkgbWFqb3IgYnJvd3NlciB0aGF0IGRvZXMg
aW1wbGVtZW50CiAgICogT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgYnV0IG5vdCBGdW5jdGlv
bi5wcm90b3R5cGUuYmluZCBpcwogICAqIFNhZmFyaSA1IChKYXZhU2NyaXB0Q29yZSksIGluY2x1
ZGluZyB0aGUgY3VycmVudCBTYWZhcmkgYmV0YQogICAqIDUuMC40ICg1NTMzLjIwLjI3LCByODQ2
MjIpLgogICAqCiAgICogPHA+VGhpcyBrbHVkZ2UgaXMgc2FmZXR5IHByZXNlcnZpbmcuIEJ1dCBz
ZWUKICAgKiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjYzODIjYzI1
IGZvciB3aHkgdGhpcwogICAqIGtsdWRnZSBjYW5ub3QgZmFpdGhmdWxseSBpbXBsZW1lbnQgdGhl
IHNwZWNpZmllZCBzZW1hbnRpY3MuCiAgICoKICAgKiA8cD5TZWUgYWxzbyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDIzNzEKICAgKi8KICBmdW5jdGlvbiB0ZXN0X01J
U1NJTkdfQklORCgpIHsKICAgIHJldHVybiAhKCdiaW5kJyBpbiBGdW5jdGlvbi5wcm90b3R5cGUp
OwogIH0KCgogIC8qKgogICAqIFdvcmthcm91bmQgZm9yIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20v
cC9nb29nbGUtY2FqYS9pc3N1ZXMvZGV0YWlsP2lkPTEzNjIKICAgKgogICAqIDxwPlRoaXMgaXMg
YW4gdW5mb3J0dW5hdGUgb3ZlcnNpZ2h0IGluIHRoZSBFUzUgc3BlYzogRXZlbiBpZgogICAqIERh
dGUucHJvdG90eXBlIGlzIGZyb3plbiwgaXQgaXMgc3RpbGwgZGVmaW5lZCB0byBiZSBhIERhdGUs
IGFuZAogICAqIHNvIGhhcyBtdXRhYmxlIHN0YXRlIGluIGludGVybmFsIHByb3BlcnRpZXMgdGhh
dCBjYW4gYmUgbXV0YXRlZAogICAqIGJ5IHRoZSBwcmltb3JkaWFsIG11dGF0aW9uIG1ldGhvZHMg
b24gRGF0ZS5wcm90b3R5cGUsIHN1Y2ggYXMKICAgKiB7QGNvZGUgRGF0ZS5wcm90b3R5cGUuc2V0
RnVsbFllYXJ9LgogICAqCiAgICogPHA+VGhpcyBrbHVkZ2UgaXMgc2FmZXR5IHByZXNlcnZpbmcu
CiAgICovCiAgZnVuY3Rpb24gdGVzdF9NVVRBQkxFX0RBVEVfUFJPVE8oKSB7CiAgICB0cnkgewog
ICAgICBEYXRlLnByb3RvdHlwZS5zZXRGdWxsWWVhcigxOTU3KTsKICAgIH0gY2F0Y2ggKGVycikg
ewogICAgICBpZiAoZXJyIGluc3RhbmNlb2YgVHlwZUVycm9yKSB7IHJldHVybiBmYWxzZTsgfQog
ICAgICBsb2coJ05ldyBzeW1wdG9tOiBNdXRhdGluZyBEYXRlLnByb3RvdHlwZSBmYWlsZWQgd2l0
aCAnICsgZXJyKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICB2YXIgdiA9IERhdGUucHJv
dG90eXBlLmdldEZ1bGxZZWFyKCk7CiAgICBpZiAodiAhPT0gdiAmJiB0eXBlb2YgdiA9PT0gJ251
bWJlcicpIHsKICAgICAgLy8gTmFOIGluZGljYXRlcyB3ZSdyZSBwcm9iYWJseSBvay4KICAgICAg
cmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKHYgIT09IDE5NTcpIHsKICAgICAgbG9nKCdOZXcg
c3ltcHRvbTogTXV0YXRpbmcgRGF0ZS5wcm90b3R5cGUgZGlkIG5vdCB0aHJvdycpOwogICAgfQog
ICAgcmV0dXJuIHRydWU7CiAgfQoKCiAgLyoqCiAgICogV29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9i
dWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU2ODI4CiAgICoKICAgKiA8cD5B
IGJ1ZyBpbiB0aGUgY3VycmVudCBGRjYuMGExIGltcGxlbWVudGF0aW9uOiBFdmVuIGlmCiAgICog
V2Vha01hcC5wcm90b3R5cGUgaXMgZnJvemVuLCBpdCBpcyBzdGlsbCBkZWZpbmVkIHRvIGJlIGEg
V2Vha01hcCwKICAgKiBhbmQgc28gaGFzIG11dGFibGUgc3RhdGUgaW4gaW50ZXJuYWwgcHJvcGVy
dGllcyB0aGF0IGNhbiBiZQogICAqIG11dGF0ZWQgYnkgdGhlIHByaW1vcmRpYWwgbXV0YXRpb24g
bWV0aG9kcyBvbiBXZWFrTWFwLnByb3RvdHlwZSwKICAgKiBzdWNoIGFzIHtAY29kZSBXZWFrTWFw
LnByb3RvdHlwZS5zZXR9LgogICAqCiAgICogPHA+VGhpcyBrbHVkZ2UgaXMgc2FmZXR5IHByZXNl
cnZpbmcuCiAgICoKICAgKiA8cD5UT0RPKGVyaWdodHMpOiBVcGRhdGUgdGhlIEVTIHNwZWMgcGFn
ZSB0byByZWZsZWN0IHRoZSBjdXJyZW50CiAgICogYWdyZWVtZW50IHdpdGggTW96aWxsYS4KICAg
Ki8KICBmdW5jdGlvbiB0ZXN0X01VVEFCTEVfV0VBS01BUF9QUk9UTygpIHsKICAgIGlmICh0eXBl
b2YgV2Vha01hcCAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH0KICAgIHZhciB4ID0g
e307CiAgICB0cnkgewogICAgICBXZWFrTWFwLnByb3RvdHlwZS5zZXQoeCwgODYpOwogICAgfSBj
YXRjaCAoZXJyKSB7CiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBUeXBlRXJyb3IpIHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgIGxvZygnTmV3IHN5bXB0b206IE11dGF0aW5nIFdlYWtNYXAucHJvdG90
eXBlIGZhaWxlZCB3aXRoICcgKyBlcnIpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHZh
ciB2ID0gV2Vha01hcC5wcm90b3R5cGUuZ2V0KHgpOwogICAgaWYgKHYgIT09IDg2KSB7CiAgICAg
IGxvZygnTmV3IHN5bXB0b206IE11dGF0aW5nIFdlYWtNYXAucHJvdG90eXBlIGRpZCBub3QgdGhy
b3cnKTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCgogIC8qKgogICAqIFdvcmthcm91bmQg
Zm9yIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTE0NDcKICAg
KgogICAqIDxwPlRoaXMgYnVnIGlzIGZpeGVkIGFzIG9mIFY4IHI4MjU4IGJsZWVkaW5nLWVkZ2Us
IGJ1dCBpcyBub3QgeWV0CiAgICogYXZhaWxhYmxlIGluIHRoZSBsYXRlc3QgZGV2LWNoYW5uZWwg
Q2hyb21lICgxMy4wLjc4Mi4xNSBkZXYpLgogICAqCiAgICogPHA+VW5mb3J0dW5hdGVseSwgYW4g
RVM1IHN0cmljdCBtZXRob2Qgd3JhcHBlciBjYW5ub3QgZW11bGF0ZQogICAqIGFic2VuY2Ugb2Yg
YSBbW0NvbnN0cnVjdF1dIGJlaGF2aW9yLCBhcyBzcGVjaWZpZWQgZm9yIHRoZSBDaGFwdGVyCiAg
ICogMTUgYnVpbHQtaW4gbWV0aG9kcy4gVGhlIGluc3RhbGxlZCB3cmFwcGVyIHJlbGllcyBvbiB7
QGNvZGUKICAgKiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHl9LCBhcyBpbmhlcml0ZWQgYnkgb3Jp
Z2luYWwsIG9iZXlpbmcgaXRzCiAgICogY29udHJhY3QuCiAgICoKICAgKiA8cD5UaGlzIGtsdWRn
ZSBpcyBzYWZldHkgcHJlc2VydmluZy4KICAgKi8KICBmdW5jdGlvbiB0ZXN0X05FRURfVE9fV1JB
UF9GT1JFQUNIKCkgewogICAgaWYgKCEoJ2ZyZWV6ZScgaW4gT2JqZWN0KSkgewogICAgICAvLyBP
YmplY3QuZnJlZXplIGlzIHN0aWxsIGFic2VudCBvbiByZWxlYXNlZCBTYWZhcmkgYW5kIHdvdWxk
CiAgICAgIC8vIGNhdXNlIGEgYm9ndXMgYnVnIGRldGVjdGlvbiBpbiB0aGUgZm9sbG93aW5nIHRy
eS9jYXRjaCBjb2RlLgogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICB0cnkgewogICAgICBb
J3onXS5mb3JFYWNoKGZ1bmN0aW9uKCl7IE9iamVjdC5mcmVlemUoQXJyYXkucHJvdG90eXBlLmZv
ckVhY2gpOyB9KTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAg
IGlmICghKGVyciBpbnN0YW5jZW9mIFR5cGVFcnJvcikpIHsKICAgICAgICBsb2coJ05ldyBTeW1w
dG9tOiBmcmVlemluZyBmb3JFYWNoIGZhaWxlZCB3aXRoICcgKyBlcnIpOwogICAgICB9CiAgICAg
IHJldHVybiB0cnVlOwogICAgfQogIH0KCgogIC8qKgogICAqIFRPRE8oZXJpZ2h0cyk6IGlzb2xh
dGUgYW5kIHJlcG9ydCB0aGUgVjggYnVnIG1lbnRpb25lZCBiZWxvdy4KICAgKgogICAqIDxwPlNv
bWV0aW1lcywgd2hlbiB0cnlpbmcgdG8gZnJlZXplIGFuIG9iamVjdCBjb250YWluaW5nIGFuCiAg
ICogYWNjZXNzb3IgcHJvcGVydHkgd2l0aCBhIGdldHRlciBidXQgbm8gc2V0dGVyLCBDaHJvbWUg
ZmFpbHMgd2l0aAogICAqIDxibG9ja3F1b3RlPlVuY2F1Z2h0IFR5cGVFcnJvcjogQ2Fubm90IHNl
dCBwcm9wZXJ0eSBpZGVudF9fXyBvZgogICAqICM8T2JqZWN0PiB3aGljaCBoYXMgb25seSBhIGdl
dHRlcjwvYmxvY2txdW90ZT4uIFNvIGlmIG5lY2Vzc2FyeSwKICAgKiB0aGlzIGtsdWRnZSBvdmVy
cmlkZXMge0Bjb2RlIE9iamVjdC5kZWZpbmVQcm9wZXJ0eX0gdG8gYWx3YXlzCiAgICogaW5zdGFs
bCBhIGR1bW15IHNldHRlciBpbiBsaWV1IG9mIHRoZSBhYnNlbnQgb25lLgogICAqCiAgICogPHA+
VE9ETyhlcmlnaHRzKTogV2Ugc2hvdWxkIGFsc28gb3ZlcnJpZGUge0Bjb2RlCiAgICogT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcn0gdG8gaGlkZSB0aGUgcHJlc2VuY2Ugb2YgdGhlCiAg
ICogZHVtbXkgc2V0dGVyLCBhbmQgaW5zdGVhZCByZXBvcnQgYW4gYWJzZW50IHNldHRlci4KICAg
Ki8KICBmdW5jdGlvbiB0ZXN0X05FRURTX0RVTU1ZX1NFVFRFUigpIHsKICAgIHJldHVybiAodHlw
ZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYKICAgICAgICAgICAgKC9DaHJvbWUvKS50
ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKTsKICB9CgoKICAvKioKICAgKiBXb3JrIGFyb3VuZCBm
b3IgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM3OTk0CiAg
ICoKICAgKiA8cD5PbiBGaXJlZm94IDQgYW4gaW5oZXJpdGVkIG5vbi1jb25maWd1cmFibGUgYWNj
ZXNzb3IgcHJvcGVydHkKICAgKiBhcHBlYXJzIHRvIGJlIGFuIG93biBwcm9wZXJ0eSBvZiBhbGwg
b2JqZWN0cyB3aGljaCBpbmhlcml0IHRoaXMKICAgKiBhY2Nlc3NvciBwcm9wZXJ0eS4gVGhpcyBp
cyBmaXhlZCBhcyBvZiBGb3JlZm94IE5pZ2h0bHkgNy4wYTEKICAgKiAoMjAxMS0wNi0yMSkuCiAg
ICoKICAgKiA8cD5PdXIgd29ya2Fyb3VuZCB3cmFwcyBoYXNPd25Qcm9wZXJ0eSwgZ2V0T3duUHJv
cGVydHlOYW1lcywgYW5kCiAgICogZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIHRvIGhldXJpc3Rp
Y2FsbHkgZGVjaWRlIHdoZW4gYW4gYWNjZXNzb3IKICAgKiBwcm9wZXJ0eSBsb29rcyBsaWtlIGl0
IGlzIGFwcGFyZW50bHkgb3duIGJlY2F1c2Ugb2YgdGhpcyBidWcsIGFuZAogICAqIHN1cHByZXNz
IHJlcG9ydGluZyBpdHMgZXhpc3RlbmNlLgogICAqCiAgICogPHA+SG93ZXZlciwgaXQgaXMgbm90
IGZlYXNpYmxlIHRvIGxpa2V3aXNlIHdyYXAgSlNPTi5zdHJpbmdpZnksCiAgICogYW5kIHRoaXMg
YnVnIHdpbGwgY2F1c2UgSlNPTi5zdHJpbmdpZnkgdG8gYmUgbWlzbGVkIGJ5IGluaGVyaXRlZAog
ICAqIGVudW1lcmFibGUgbm9uLWNvbmZpZ3VyYWJsZSBhY2Nlc3NvciBwcm9wZXJ0aWVzLiBUbyBw
cmV2ZW50IHRoaXMsCiAgICogd2Ugd3JhcCBkZWZpbmVQcm9wZXJ0eSwgZnJlZXplLCBhbmQgc2Vh
bCB0byBwcmV2ZW50IHRoZSBjcmVhdGlvbgogICAqIG9mIDxpPmVudW1lcmFibGU8L2k+IG5vbi1j
b25maWd1cmFibGUgYWNjZXNzb3IgcHJvcGVydGllcyBvbgogICAqIHRob3NlIHBsYXRmb3JtcyB3
aXRoIHRoaXMgYnVnLgogICAqCiAgICogPHA+QSBsaXR0bGUga25vd24gZmFjdCBhYm91dCBKYXZh
U2NyaXB0IGlzIHRoYXQge0Bjb2RlCiAgICogT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51
bWVyYWJsZX0gYWN0dWFsbHkgdGVzdHMgd2hldGhlciBhCiAgICogcHJvcGVydHkgaXMgYm90aCBv
d24gYW5kIGVudW1lcmFibGUuIEFzc3VtaW5nIHRoYXQgb3VyIHdyYXBwaW5nCiAgICogb2YgZGVm
aW5lUHJvcGVydHksIGZyZWV6ZSwgYW5kIHNlYWwgcHJldmVudHMgdGhlIG9jY3VycmVuY2Ugb2Yg
YW4KICAgKiBlbnVtZXJhYmxlIG5vbi1jb25maWd1cmFibGUgYWNjZXNzb3IgcHJvcGVydHksIGl0
IHNob3VsZCBhbHNvCiAgICogcHJldmVudCB0aGUgb2NjdXJyZW5jZSBvZiB0aGlzIGJ1ZyBmb3Ig
YW55IGVudW1lcmFibGUgcHJvcGVydHksCiAgICogYW5kIHNvIHdlIGRvIG5vdCBuZWVkIHRvIHdy
YXAgcHJvcGVydHlJc0VudW1lcmFibGUuCiAgICoKICAgKiA8cD5UaGlzIGtsdWRnZSBzZWVtcyB0
byBiZSBzYWZldHkgcHJlc2VydmluZywgYnV0IHRoZSBpc3N1ZXMgYXJlCiAgICogZGVsaWNhdGUg
YW5kIG5vdCB3ZWxsIHVuZGVyc3Rvb2QuCiAgICovCiAgZnVuY3Rpb24gdGVzdF9BQ0NFU1NPUlNf
SU5IRVJJVF9BU19PV04oKSB7CiAgICB2YXIgYmFzZSA9IHt9OwogICAgdmFyIGRlcml2ZWQgPSBP
YmplY3QuY3JlYXRlKGJhc2UpOwogICAgZnVuY3Rpb24gZ2V0dGVyKCkgeyByZXR1cm4gJ2dvdHRl
bic7IH0KICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiYXNlLCAnZm9vJywge2dldDogZ2V0dGVy
fSk7CiAgICBpZiAoIWRlcml2ZWQuaGFzT3duUHJvcGVydHkoJ2ZvbycpICYmCiAgICAgICAgT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkZXJpdmVkLCAnZm9vJykgPT09IHZvaWQgMCAm
JgogICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGRlcml2ZWQpLmluZGV4T2YoJ2Zv
bycpIDwgMCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAoIWRlcml2ZWQuaGFz
T3duUHJvcGVydHkoJ2ZvbycpIHx8CiAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihkZXJpdmVkLCAnZm9vJykuZ2V0ICE9PSBnZXR0ZXIgfHwKICAgICAgICBPYmplY3QuZ2V0
T3duUHJvcGVydHlOYW1lcyhkZXJpdmVkKS5pbmRleE9mKCdmb28nKSA8IDApIHsKICAgICAgbG9n
KCdOZXcgc3ltcHRvbTogJyArCiAgICAgICAgICAnQWNjZXNzb3IgcHJvcGVydGllcyBwYXJ0aWFs
bHkgaW5oZXJpdCBhcyBvd24gcHJvcGVydGllcy4nKTsKICAgIH0KICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShiYXNlLCAnYmFyJywge2dldDogZ2V0dGVyLCBjb25maWd1cmFibGU6IHRydWV9KTsK
ICAgIGlmICghZGVyaXZlZC5oYXNPd25Qcm9wZXJ0eSgnYmFyJykgJiYKICAgICAgICBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGRlcml2ZWQsICdiYXInKSA9PT0gdm9pZCAwICYmCiAg
ICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZGVyaXZlZCkuaW5kZXhPZignYmFyJykg
PCAwKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgbG9nKCdOZXcgc3ltcHRvbTogJyAr
CiAgICAgICAgJ0FjY2Vzc29yIHByb3BlcnRpZXMgaW5oZXJpdCBhcyBvd24gZXZlbiBpZiBjb25m
aWd1cmFibGUuJyk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgoKICAvKioKICAgKiBXb3JrYXJvdW5k
IGZvciBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0xMzYwCiAg
ICoKICAgKiBPdXIgd29ya2Fyb3VuZCB3cmFwcyB7QGNvZGUgc29ydH0gdG8gd3JhcCB0aGUgY29t
cGFyZWZuLgogICAqLwogIGZ1bmN0aW9uIHRlc3RfU09SVF9MRUFLU19HTE9CQUwoKSB7CiAgICB2
YXIgdGhhdCA9ICdkdW1teSc7CiAgICBbMiwzXS5zb3J0KGZ1bmN0aW9uKHgseSkgeyB0aGF0ID0g
dGhpczsgcmV0dXJuIHggLSB5OyB9KTsKICAgIGlmICh0aGF0ID09PSB2b2lkIDApIHsgcmV0dXJu
IGZhbHNlOyB9CiAgICBpZiAodGhhdCAhPT0gZ2xvYmFsKSB7CiAgICAgIGxvZygnTmV3IHN5bXB0
b206ICcgKwogICAgICAgICAgJ3NvcnQgY2FsbGVkIGNvbXBhcmVmbiB3aXRoICJ0aGlzIiA9PT0g
JyArIHRoYXQpOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKCiAgLyoqCiAgICogV29ya2Fy
b3VuZCBmb3IgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MTM2
MAogICAqCiAgICogPHA+T3VyIHdvcmthcm91bmQgd3JhcHMge0Bjb2RlIHJlcGxhY2V9IHRvIHdy
YXAgdGhlIHJlcGxhY2VWYWx1ZQogICAqIGlmIGl0J3MgYSBmdW5jdGlvbi4KICAgKi8KICBmdW5j
dGlvbiB0ZXN0X1JFUExBQ0VfTEVBS1NfR0xPQkFMKCkgewogICAgdmFyIHRoYXQgPSAnZHVtbXkn
OwogICAgJ3gnLnJlcGxhY2UoL3gvLCBmdW5jdGlvbigpIHsgdGhhdCA9IHRoaXM7IHJldHVybiAn
eSc7fSk7CiAgICBpZiAodGhhdCA9PT0gdm9pZCAwKSB7IHJldHVybiBmYWxzZTsgfQogICAgaWYg
KHRoYXQgIT09IGdsb2JhbCkgewogICAgICBsb2coJ05ldyBzeW1wdG9tOiAnICsKICAgICAgICAg
ICdyZXBsYWNlIGNhbGxlZCByZXBsYWNlVmFsdWUgZnVuY3Rpb24gd2l0aCAidGhpcyIgPT09ICcg
KyB0aGF0KTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCgogIC8qKgogICAqIFByb3RlY3Qg
YW4gJ2luJyB3aXRoIGEgdHJ5L2NhdGNoIHRvIHdvcmthcm91bmQgYSBidWcgaW4gU2FmYXJpCiAg
ICogV2ViS2l0IE5pZ2h0bHkgVmVyc2lvbiA1LjAuNSAoNTUzMy4yMS4xLCByODk3NDEpLgogICAq
CiAgICogPHA+U2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MzM5
OAogICAqCiAgICogPHA+Tm90ZXM6IFdlJ3JlIHNlZWluZyBleGFjdGx5CiAgICogPGJsb2NrcXVv
dGU+CiAgICogICBOZXcgc3ltcHRvbSAoYyk6ICgnY2FsbGVyJyBpbiAmbHQ7YSBib3VuZCBmdW5j
dGlvbiZndDspIHRocmV3OgogICAqICAgVHlwZUVycm9yOiBDYW5ub3QgYWNjZXNzIGNhbGxlciBw
cm9wZXJ0eSBvZiBhIHN0cmljdCBtb2RlCiAgICogICBmdW5jdGlvbjxicj4KICAgKiAgIE5ldyBz
eW1wdG9tIChjKTogKCdhcmd1bWVudHMnIGluICZsdDthIGJvdW5kIGZ1bmN0aW9uJmd0OykKICAg
KiAgIHRocmV3OiBUeXBlRXJyb3I6IENhbid0IGFjY2VzcyBhcmd1bWVudHMgb2JqZWN0IG9mIGEg
c3RyaWN0CiAgICogICBtb2RlIGZ1bmN0aW9uCiAgICogPC9ibG9ja3F1b3RlPgogICAqIHdoaWNo
IG1lYW5zIHdlJ3JlIHNraXBwaW5nIGJvdGggdGhlIGNhdGNoIGFuZCB0aGUgZmluYWxseSBpbgog
ICAqIHtAY29kZSBoYXN9IHdoaWxlIGhpdHRpbmcgdGhlIGNhdGNoIGluIHtAY29kZSBoYXMyfS4g
RnVydGhlciwgaWYKICAgKiB3ZSByZW1vdmUgb25lIG9mIHRoZXNlIGZpbmFsbHkgY2xhdXNlcyAo
Zm9yZ2V0IHdoaWNoKSBhbmQgcmVydW4KICAgKiB0aGUgZXhhbXBsZSwgaWYgd2UncmUgdW5kZXIg
dGhlIGRlYnVnZ2VyIHRoZSBicm93c2VyIGNyYXNoZXMuIElmCiAgICogd2UncmUgbm90LCB0aGVu
IHRoZSBUeXBlRXJyb3IgZXNjYXBlcyBib3RoIGNhdGNoZXMuCiAgICovCiAgZnVuY3Rpb24gaGFz
KGJhc2UsIG5hbWUsIGJhc2VEZXNjKSB7CiAgICB2YXIgcmVzdWx0ID0gdm9pZCAwOwogICAgdHJ5
IHsKICAgICAgcmVzdWx0ID0gbmFtZSBpbiBiYXNlOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAg
IGxvZygnTmV3IHN5bXB0b20gKGEpOiAoXCcnICsKICAgICAgICAgIG5hbWUgKyAnXCcgaW4gPCcg
KyBiYXNlRGVzYyArICc+KSB0aHJldzogJyArIGVycik7CiAgICAgIC8vIHRyZWF0IHRoaXMgYXMg
YSBzYWZlIGFic2VuY2UKICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgIHJldHVybiBmYWxzZTsK
ICAgIH0gZmluYWxseSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgewogICAgICAgIGxv
ZygnTmV3IHN5bXB0b20gKGIpOiAoXCcnICsKICAgICAgICAgICAgbmFtZSArICdcJyBpbiA8JyAr
IGJhc2VEZXNjICsgJz4pIGZhaWxlZCcpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gISFyZXN1
bHQ7CiAgfQoKICBmdW5jdGlvbiBoYXMyKGJhc2UsIG5hbWUsIGJhc2VEZXNjKSB7CiAgICB2YXIg
cmVzdWx0OwogICAgdHJ5IHsKICAgICAgcmVzdWx0ID0gaGFzKGJhc2UsIG5hbWUsIGJhc2VEZXNj
KTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBsb2coJ05ldyBzeW1wdG9tIChjKTogKFwnJyAr
CiAgICAgICAgICBuYW1lICsgJ1wnIGluIDwnICsgYmFzZURlc2MgKyAnPikgdGhyZXc6ICcgKyBl
cnIpOwogICAgICAvLyB0cmVhdCB0aGlzIGFzIGEgc2FmZSBhYnNlbmNlCiAgICAgIHJlc3VsdCA9
IGZhbHNlOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9IGZpbmFsbHkgewogICAgICBpZiAocmVz
dWx0ID09PSB2b2lkIDApIHsKICAgICAgICBsb2coJ05ldyBzeW1wdG9tIChkKTogKFwnJyArCiAg
ICAgICAgICAgIG5hbWUgKyAnXCcgaW4gPCcgKyBiYXNlRGVzYyArICc+KSBmYWlsZWQnKTsKICAg
ICAgfQogICAgfQogICAgcmV0dXJuICEhcmVzdWx0OwogIH0KCiAgLyoqCiAgICogTm8gd29ya2Fy
b3VuZCAoeWV0PykgZm9yCiAgICogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTkxODQ2IGFzIGFwcGxpZWQgdG8KICAgKiAiY2FsbGVyIgogICAqLwogIGZ1bmN0
aW9uIHRlc3RfQlVJTFRJTl9MRUFLU19DQUxMRVIoKSB7CiAgICB2YXIgbWFwID0gQXJyYXkucHJv
dG90eXBlLm1hcDsKICAgIGlmICghaGFzKG1hcCwgJ2NhbGxlcicsICdhIGJ1aWx0aW4nKSkgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgIHRyeSB7CiAgICAgIGRlbGV0ZSBtYXAuY2FsbGVyOwogICAgfSBj
YXRjaCAoZXJyKSB7IH0KICAgIGlmICghaGFzKG1hcCwgJ2NhbGxlcicsICdhIGJ1aWx0aW4nKSkg
eyByZXR1cm4gZmFsc2U7IH0KICAgIGZ1bmN0aW9uIGZvbygpIHsgcmV0dXJuIG1hcC5jYWxsZXI7
IH0KICAgIC8vIHVzaW5nIEZ1bmN0aW9uIHNvIGl0J2xsIGJlIG5vbi1zdHJpY3QKICAgIHZhciB0
ZXN0Zm4gPSBGdW5jdGlvbignZicsICdyZXR1cm4gWzFdLm1hcChmKVswXTsnKTsKICAgIHZhciBj
YWxsZXI7CiAgICB0cnkgewogICAgICBjYWxsZXIgPSB0ZXN0Zm4oZm9vKTsKICAgIH0gY2F0Y2gg
KGVycikgewogICAgICBpZiAoZXJyIGluc3RhbmNlb2YgVHlwZUVycm9yKSB7IHJldHVybiBmYWxz
ZTsgfQogICAgICBsb2coJ05ldyBzeW1wdG9tOiBidWlsdGluICJjYWxsZXIiIGZhaWxlZCB3aXRo
OiAnICsgZXJyKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAoW3Rlc3Rmbiwgdm9p
ZCAwLCBudWxsXS5pbmRleE9mKGNhbGxlcikgPj0gMCkgeyByZXR1cm4gZmFsc2U7IH0KICAgIGxv
ZygnTmV3IHN5bXB0b206IFVuZXhwZWN0ZWQgImNhbGxlciI6ICcgKyBjYWxsZXIpOwogICAgcmV0
dXJuIHRydWU7CiAgfQoKICAvKioKICAgKiBObyB3b3JrYXJvdW5kICh5ZXQ/KSBmb3IKICAgKiBo
dHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD01OTE4NDYgYXMgYXBw
bGllZCB0bwogICAqICJhcmd1bWVudHMiCiAgICovCiAgZnVuY3Rpb24gdGVzdF9CVUlMVElOX0xF
QUtTX0FSR1VNRU5UUygpIHsKICAgIHZhciBtYXAgPSBBcnJheS5wcm90b3R5cGUubWFwOwogICAg
aWYgKCFoYXMobWFwLCAnYXJndW1lbnRzJywgJ2EgYnVpbHRpbicpKSB7IHJldHVybiBmYWxzZTsg
fQogICAgdHJ5IHsKICAgICAgZGVsZXRlIG1hcC5hcmd1bWVudHM7CiAgICB9IGNhdGNoIChlcnIp
IHsgfQogICAgaWYgKCFoYXMobWFwLCAnYXJndW1lbnRzJywgJ2EgYnVpbHRpbicpKSB7IHJldHVy
biBmYWxzZTsgfQogICAgZnVuY3Rpb24gZm9vKCkgeyByZXR1cm4gbWFwLmFyZ3VtZW50czsgfQog
ICAgLy8gdXNpbmcgRnVuY3Rpb24gc28gaXQnbGwgYmUgbm9uLXN0cmljdAogICAgdmFyIHRlc3Rm
biA9IEZ1bmN0aW9uKCdmJywgJ3JldHVybiBbMV0ubWFwKGYpWzBdOycpOwogICAgdmFyIGFyZ3M7
CiAgICB0cnkgewogICAgICBhcmdzID0gdGVzdGZuKGZvbyk7CiAgICB9IGNhdGNoIChlcnIpIHsK
ICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFR5cGVFcnJvcikgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICAgbG9nKCdOZXcgc3ltcHRvbTogYnVpbHRpbiAiYXJndW1lbnRzIiBmYWlsZWQgd2l0aDogJyAr
IGVycik7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKGFyZ3MgPT09IHZvaWQgMCB8
fCBhcmdzID09PSBudWxsKSB7IHJldHVybiBmYWxzZTsgfQogICAgcmV0dXJuIHRydWU7CiAgfQoK
ICAvKioKICAgKiBXb3JrYXJvdW5kIGZvciBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNz
dWVzL2RldGFpbD9pZD04OTMKICAgKi8KICBmdW5jdGlvbiB0ZXN0X0JPVU5EX0ZVTkNUSU9OX0xF
QUtTX0NBTExFUigpIHsKICAgIGlmICghKCdiaW5kJyBpbiBGdW5jdGlvbi5wcm90b3R5cGUpKSB7
IHJldHVybiBmYWxzZTsgfQogICAgZnVuY3Rpb24gZm9vKCkgeyByZXR1cm4gYmFyLmNhbGxlcjsg
fQogICAgdmFyIGJhciA9IGZvby5iaW5kKHt9KTsKICAgIGlmICghaGFzMihiYXIsICdjYWxsZXIn
LCAnYSBib3VuZCBmdW5jdGlvbicpKSB7IHJldHVybiBmYWxzZTsgfQogICAgdHJ5IHsKICAgICAg
ZGVsZXRlIGJhci5jYWxsZXI7CiAgICB9IGNhdGNoIChlcnIpIHsgfQogICAgaWYgKCFoYXMyKGJh
ciwgJ2NhbGxlcicsICdhIGJvdW5kIGZ1bmN0aW9uJykpIHsKICAgICAgbG9nKCdOZXcgc3ltcHRv
bTogImNhbGxlciIgb24gYm91bmQgZnVuY3Rpb25zIGNhbiBiZSBkZWxldGVkLicpOwogICAgICBy
ZXR1cm4gdHJ1ZTsKICAgIH0KICAgIC8vIHVzaW5nIEZ1bmN0aW9uIHNvIGl0J2xsIGJlIG5vbi1z
dHJpY3QKICAgIHZhciB0ZXN0Zm4gPSBGdW5jdGlvbignZicsICdyZXR1cm4gZigpOycpOwogICAg
dmFyIGNhbGxlcjsKICAgIHRyeSB7CiAgICAgIGNhbGxlciA9IHRlc3RmbihiYXIpOwogICAgfSBj
YXRjaCAoZXJyKSB7CiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBUeXBlRXJyb3IpIHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgIGxvZygnTmV3IHN5bXB0b206IGJvdW5kIGZ1bmN0aW9uICJjYWxsZXIi
IGZhaWxlZCB3aXRoOiAnICsgZXJyKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAo
W3Rlc3Rmbiwgdm9pZCAwLCBudWxsXS5pbmRleE9mKGNhbGxlcikgPj0gMCkgeyByZXR1cm4gZmFs
c2U7IH0KICAgIGxvZygnTmV3IHN5bXB0b206IFVuZXhwZWN0ZWQgImNhbGxlciI6ICcgKyBjYWxs
ZXIpOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvKioKICAgKiBXb3JrYXJvdW5kIGZvciBodHRw
Oi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD04OTMKICAgKi8KICBmdW5j
dGlvbiB0ZXN0X0JPVU5EX0ZVTkNUSU9OX0xFQUtTX0FSR1VNRU5UUygpIHsKICAgIGlmICghKCdi
aW5kJyBpbiBGdW5jdGlvbi5wcm90b3R5cGUpKSB7IHJldHVybiBmYWxzZTsgfQogICAgZnVuY3Rp
b24gZm9vKCkgeyByZXR1cm4gYmFyLmFyZ3VtZW50czsgfQogICAgdmFyIGJhciA9IGZvby5iaW5k
KHt9KTsKICAgIGlmICghaGFzMihiYXIsICdhcmd1bWVudHMnLCAnYSBib3VuZCBmdW5jdGlvbicp
KSB7IHJldHVybiBmYWxzZTsgfQogICAgdHJ5IHsKICAgICAgZGVsZXRlIGJhci5hcmd1bWVudHM7
CiAgICB9IGNhdGNoIChlcnIpIHsgfQogICAgaWYgKCFoYXMyKGJhciwgJ2FyZ3VtZW50cycsICdh
IGJvdW5kIGZ1bmN0aW9uJykpIHsKICAgICAgbG9nKCdOZXcgc3ltcHRvbTogImFyZ3VtZW50cyIg
b24gYm91bmQgZnVuY3Rpb25zIGNhbiBiZSBkZWxldGVkLicpOwogICAgICByZXR1cm4gdHJ1ZTsK
ICAgIH0KICAgIC8vIHVzaW5nIEZ1bmN0aW9uIHNvIGl0J2xsIGJlIG5vbi1zdHJpY3QKICAgIHZh
ciB0ZXN0Zm4gPSBGdW5jdGlvbignZicsICdyZXR1cm4gZigpOycpOwogICAgdmFyIGFyZ3M7CiAg
ICB0cnkgewogICAgICBhcmdzID0gdGVzdGZuKGJhcik7CiAgICB9IGNhdGNoIChlcnIpIHsKICAg
ICAgaWYgKGVyciBpbnN0YW5jZW9mIFR5cGVFcnJvcikgeyByZXR1cm4gZmFsc2U7IH0KICAgICAg
bG9nKCdOZXcgc3ltcHRvbTogYm91bmQgZnVuY3Rpb24gImFyZ3VtZW50cyIgZmFpbGVkIHdpdGg6
ICcgKyBlcnIpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChhcmdzID09PSB2b2lk
IDAgfHwgYXJncyA9PT0gbnVsbCkgeyByZXR1cm4gZmFsc2U7IH0KICAgIHJldHVybiB0cnVlOwog
IH0KCiAgLyoqCiAgICogV29ya2Fyb3VuZCBmb3IgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4
L2lzc3Vlcy9kZXRhaWw/aWQ9NjIxCiAgICoKICAgKi8KICBmdW5jdGlvbiB0ZXN0X0pTT05fUEFS
U0VfUFJPVE9fQ09ORlVTSU9OKCkgewogICAgdmFyIHggPSBKU09OLnBhcnNlKCd7Il9fcHJvdG9f
XyI6W119Jyk7CiAgICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHgpICE9PSBPYmplY3QucHJv
dG90eXBlKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKCFBcnJheS5pc0FycmF5
KHguX19wcm90b19fKSkgewogICAgICBsb2coJ05ldyBzeW1wdG9tOiBKU09OLnBhcnNlIGRpZCBu
b3Qgc2V0ICJfX3Byb3RvX18iIGFzICcgKwogICAgICAgICAgJ2EgcmVndWxhciBwcm9wZXJ0eScp
OwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgoKICAvLy8v
Ly8vLy8vLy8vLy8vIEVORCBLTFVER0UgU1dJVENIRVMgLy8vLy8vLy8vLy8KCiAgdmFyIGNhbGwg
PSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDsKICB2YXIgYXBwbHkgPSBGdW5jdGlvbi5wcm90b3R5
cGUuYXBwbHk7CgogIHZhciBob3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5Owog
IHZhciBvYmpUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7CiAgdmFyIHNsaWNl
ID0gQXJyYXkucHJvdG90eXBlLnNsaWNlOwogIHZhciBjb25jYXQgPSBBcnJheS5wcm90b3R5cGUu
Y29uY2F0OwogIHZhciBkZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5OwogIHZhciBnZXRQ
cm90b3R5cGVPZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjsKCiAgZnVuY3Rpb24gcmVwYWlyX01J
U1NJTkdfQ0FMTEVFX0RFU0NSSVBUT1IoKSB7CiAgICB2YXIgcmVhbEdPUE4gPSBPYmplY3QuZ2V0
T3duUHJvcGVydHlOYW1lczsKICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rp
b24gY2FsbGVlRml4KGJhc2UpIHsKICAgICAgdmFyIHJlc3VsdCA9IHJlYWxHT1BOKGJhc2UpOwog
ICAgICBpZiAodHlwZW9mIGJhc2UgPT09ICdmdW5jdGlvbicpIHsKICAgICAgICB2YXIgaSA9IHJl
c3VsdC5pbmRleE9mKCdjYWxsZWUnKTsKICAgICAgICBpZiAoaSA+PSAwICYmICFob3AuY2FsbChi
YXNlLCAnY2FsbGVlJykpIHsKICAgICAgICAgIHJlc3VsdC5zcGxpY2UoaSwgMSk7CiAgICAgICAg
fQogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gcmVw
YWlyX1JFR0VYUF9DQU5UX0JFX05FVVRFUkVEKCkgewogICAgdmFyIFVuc2FmZVJlZ0V4cCA9IFJl
Z0V4cDsKICAgIHZhciBGYWtlUmVnRXhwID0gZnVuY3Rpb24gRmFrZVJlZ0V4cChwYXR0ZXJuLCBm
bGFncykgewogICAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHsKICAgICAgICBjYXNlIDA6
IHsKICAgICAgICAgIHJldHVybiBVbnNhZmVSZWdFeHAoKTsKICAgICAgICB9CiAgICAgICAgY2Fz
ZSAxOiB7CiAgICAgICAgICByZXR1cm4gVW5zYWZlUmVnRXhwKHBhdHRlcm4pOwogICAgICAgIH0K
ICAgICAgICBkZWZhdWx0OiB7CiAgICAgICAgICByZXR1cm4gVW5zYWZlUmVnRXhwKHBhdHRlcm4s
IGZsYWdzKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICBGYWtlUmVnRXhwLnByb3RvdHlw
ZSA9IFVuc2FmZVJlZ0V4cC5wcm90b3R5cGU7CiAgICBGYWtlUmVnRXhwLnByb3RvdHlwZS5jb25z
dHJ1Y3RvciA9IEZha2VSZWdFeHA7CiAgICBSZWdFeHAgPSBGYWtlUmVnRXhwOwogIH0KCiAgZnVu
Y3Rpb24gcmVwYWlyX1JFR0VYUF9URVNUX0VYRUNfVU5TQUZFKCkgewogICAgdmFyIHVuc2FmZVJl
Z0V4cEV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7CiAgICB1bnNhZmVSZWdFeHBFeGVjLmNh
bGwgPSBjYWxsOwogICAgdmFyIHVuc2FmZVJlZ0V4cFRlc3QgPSBSZWdFeHAucHJvdG90eXBlLnRl
c3Q7CiAgICB1bnNhZmVSZWdFeHBUZXN0LmNhbGwgPSBjYWxsOwoKICAgIFJlZ0V4cC5wcm90b3R5
cGUuZXhlYyA9IGZ1bmN0aW9uIGZha2VFeGVjKHNwZWNpbWVuKSB7CiAgICAgIHJldHVybiB1bnNh
ZmVSZWdFeHBFeGVjLmNhbGwodGhpcywgU3RyaW5nKHNwZWNpbWVuKSk7CiAgICB9OwogICAgUmVn
RXhwLnByb3RvdHlwZS50ZXN0ID0gZnVuY3Rpb24gZmFrZVRlc3Qoc3BlY2ltZW4pIHsKICAgICAg
cmV0dXJuIHVuc2FmZVJlZ0V4cFRlc3QuY2FsbCh0aGlzLCBTdHJpbmcoc3BlY2ltZW4pKTsKICAg
IH07CiAgfQoKCiAgZnVuY3Rpb24gcGF0Y2hNaXNzaW5nUHJvcChiYXNlLCBuYW1lLCBtaXNzaW5n
RnVuYykgewogICAgaWYgKCEobmFtZSBpbiBiYXNlKSkgewogICAgICBkZWZQcm9wKGJhc2UsIG5h
bWUsIHsKICAgICAgICB2YWx1ZTogbWlzc2luZ0Z1bmMsCiAgICAgICAgd3JpdGFibGU6IHRydWUs
CiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAg
ICAgIH0pOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcmVwYWlyX01JU1NJTkdfRlJFRVpFX0VUQygp
IHsKICAgIHBhdGNoTWlzc2luZ1Byb3AoT2JqZWN0LCAnZnJlZXplJywKICAgICAgICAgICAgICAg
ICAgICAgZnVuY3Rpb24gZmFrZUZyZWV6ZShvYmopIHsgcmV0dXJuIG9iajsgfSk7CiAgICBwYXRj
aE1pc3NpbmdQcm9wKE9iamVjdCwgJ3NlYWwnLAogICAgICAgICAgICAgICAgICAgICBmdW5jdGlv
biBmYWtlU2VhbChvYmopIHsgcmV0dXJuIG9iajsgfSk7CiAgICBwYXRjaE1pc3NpbmdQcm9wKE9i
amVjdCwgJ3ByZXZlbnRFeHRlbnNpb25zJywKICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24g
ZmFrZVByZXZlbnRFeHRlbnNpb25zKG9iaikgeyByZXR1cm4gb2JqOyB9KTsKICAgIHBhdGNoTWlz
c2luZ1Byb3AoT2JqZWN0LCAnaXNGcm96ZW4nLAogICAgICAgICAgICAgICAgICAgICBmdW5jdGlv
biBmYWtlSXNGcm96ZW4ob2JqKSB7IHJldHVybiBmYWxzZTsgfSk7CiAgICBwYXRjaE1pc3NpbmdQ
cm9wKE9iamVjdCwgJ2lzU2VhbGVkJywKICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZmFr
ZUlzU2VhbGVkKG9iaikgeyByZXR1cm4gZmFsc2U7IH0pOwogICAgcGF0Y2hNaXNzaW5nUHJvcChP
YmplY3QsICdpc0V4dGVuc2libGUnLAogICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBmYWtl
SXNFeHRlbnNpYmxlKG9iaikgeyByZXR1cm4gdHJ1ZTsgfSk7CiAgfQoKICBmdW5jdGlvbiByZXBh
aXJfTUlTU0lOR19CSU5EKCkgewogICAgcGF0Y2hNaXNzaW5nUHJvcChGdW5jdGlvbi5wcm90b3R5
cGUsICdiaW5kJywKICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZmFrZUJpbmQoc2VsZiwg
dmFyX2FyZ3MpIHsKICAgICAgdmFyIHRoaXNGdW5jID0gdGhpczsKICAgICAgdmFyIGxlZnRBcmdz
ID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOwogICAgICBmdW5jdGlvbiBmdW5jQm91bmQodmFy
X2FyZ3MpIHsKICAgICAgICB2YXIgYXJncyA9IGNvbmNhdC5jYWxsKGxlZnRBcmdzLCBzbGljZS5j
YWxsKGFyZ3VtZW50cywgMCkpOwogICAgICAgIHJldHVybiBhcHBseS5jYWxsKHRoaXNGdW5jLCBz
ZWxmLCBhcmdzKTsKICAgICAgfQogICAgICBkZWxldGUgZnVuY0JvdW5kLnByb3RvdHlwZTsKICAg
ICAgcmV0dXJuIGZ1bmNCb3VuZDsKICAgIH0pOwogIH0KCiAgLyoqCiAgICogUmV0dXJuIGEgZnVu
Y3Rpb24gc3VpdGFibGUgZm9yIHVzaW5nIGFzIGEgZm9yRWFjaCBhcmd1bWVudCBvbiBhCiAgICog
bGlzdCBvZiBtZXRob2QgbmFtZXMsIHdoZXJlIHRoYXQgZnVuY3Rpb24gd2lsbCBtb25rZXkgcGF0
Y2ggZWFjaAogICAqIG9mIHRoZXNlIG5hbWVzIG1ldGhvZHMgb24ge0Bjb2RlIGNvbnN0ci5wcm90
b3R5cGV9IHNvIHRoYXQgdGhleQogICAqIGNhbid0IGJlIGNhbGxlZCBvbiB7QGNvZGUgY29uc3Ry
LnByb3RvdHlwZX0gaXRzZWxmIGV2ZW4gYWNyb3NzCiAgICogZnJhbWVzLgogICAqCiAgICogPHA+
VGhpcyBvbmx5IHdvcmtzIHdoZW4ge0Bjb2RlIGNvbnN0cn0gY29ycmVzcG9uZHMgdG8gYW4gaW50
ZXJuYWwKICAgKiBbW0NsYXNzXV0gcHJvcGVydHkgd2hvc2UgdmFsdWUgaXMge0Bjb2RlIGNsYXNz
U3RyaW5nfS4gVG8gdGVzdAogICAqIGZvciB7QGNvZGUgY29uc3RyLnByb3RvdHlwZX0gY3Jvc3Mt
ZnJhbWUsIHdlIG9ic2VydmUgdGhhdCBmb3IgYWxsCiAgICogb2JqZWN0cyBvZiB0aGlzIFtbQ2xh
c3NdXSwgb25seSB0aGUgcHJvdG90eXBlcyBkaXJlY3RseSBpbmhlcml0CiAgICogZnJvbSBhbiBv
YmplY3QgdGhhdCBkb2VzIG5vdCBoYXZlIHRoaXMgW1tDbGFzc11dLgogICAqLwogIGZ1bmN0aW9u
IG1ha2VNdXRhYmxlUHJvdG9QYXRjaGVyKGNvbnN0ciwgY2xhc3NTdHJpbmcpIHsKICAgIHZhciBw
cm90byA9IGNvbnN0ci5wcm90b3R5cGU7CiAgICB2YXIgYmFzZVRvU3RyaW5nID0gb2JqVG9TdHJp
bmcuY2FsbChwcm90byk7CiAgICBpZiAoYmFzZVRvU3RyaW5nICE9PSAnW29iamVjdCAnICsgY2xh
c3NTdHJpbmcgKyAnXScpIHsKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndW5leHBlY3RlZDog
JyArIGJhc2VUb1N0cmluZyk7CiAgICB9CiAgICBpZiAoZ2V0UHJvdG90eXBlT2YocHJvdG8pICE9
PSBPYmplY3QucHJvdG90eXBlKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuZXhwZWN0
ZWQgaW5oZXJpdGFuY2U6ICcgKyBjbGFzc1N0cmluZyk7CiAgICB9CiAgICBmdW5jdGlvbiBtdXRh
YmxlUHJvdG9QYXRjaGVyKG5hbWUpIHsKICAgICAgaWYgKCFob3AuY2FsbChwcm90bywgbmFtZSkp
IHsgcmV0dXJuOyB9CiAgICAgIHZhciBvcmlnaW5hbE1ldGhvZCA9IHByb3RvW25hbWVdOwogICAg
ICBvcmlnaW5hbE1ldGhvZC5hcHBseSA9IGFwcGx5OwogICAgICBmdW5jdGlvbiByZXBsYWNlbWVu
dCh2YXJfYXJncykgewogICAgICAgIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZih0aGlzKTsK
ICAgICAgICBpZiAob2JqVG9TdHJpbmcuY2FsbChwYXJlbnQpICE9PSBiYXNlVG9TdHJpbmcpIHsK
ICAgICAgICAgIHZhciB0aGlzVG9TdHJpbmcgPSBvYmpUb1N0cmluZy5jYWxsKHRoaXMpOwogICAg
ICAgICAgaWYgKHRoaXNUb1N0cmluZyA9PT0gYmFzZVRvU3RyaW5nKSB7CiAgICAgICAgICAgIHRo
cm93IG5ldyBUeXBlRXJyb3IoJ01heSBub3QgbXV0YXRlIGludGVybmFsIHN0YXRlIG9mIGEgJyAr
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NTdHJpbmcgKyAnLnByb3RvdHlw
ZScpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcign
VW5leHBlY3RlZDogJyArIHRoaXNUb1N0cmluZyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICAgIHJldHVybiBvcmlnaW5hbE1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICB9
CiAgICAgIGRlZlByb3AocHJvdG8sIG5hbWUsIHt2YWx1ZTogcmVwbGFjZW1lbnR9KTsKICAgIH0K
ICAgIHJldHVybiBtdXRhYmxlUHJvdG9QYXRjaGVyOwogIH0KCgogIGZ1bmN0aW9uIHJlcGFpcl9N
VVRBQkxFX0RBVEVfUFJPVE8oKSB7CiAgICAvLyBOb3RlOiBjb29yZGluYXRlIHRoaXMgbGlzdCB3
aXRoIG1haW50ZW5hbmNlIG9mIHdoaXRlbGlzdC5qcwogICAgWydzZXRZZWFyJywKICAgICAnc2V0
VGltZScsCiAgICAgJ3NldEZ1bGxZZWFyJywKICAgICAnc2V0VVRDRnVsbFllYXInLAogICAgICdz
ZXRNb250aCcsCiAgICAgJ3NldFVUQ01vbnRoJywKICAgICAnc2V0RGF0ZScsCiAgICAgJ3NldFVU
Q0RhdGUnLAogICAgICdzZXRIb3VycycsCiAgICAgJ3NldFVUQ0hvdXJzJywKICAgICAnc2V0TWlu
dXRlcycsCiAgICAgJ3NldFVUQ01pbnV0ZXMnLAogICAgICdzZXRTZWNvbmRzJywKICAgICAnc2V0
VVRDU2Vjb25kcycsCiAgICAgJ3NldE1pbGxpc2Vjb25kcycsCiAgICAgJ3NldFVUQ01pbGxpc2Vj
b25kcyddLmZvckVhY2gobWFrZU11dGFibGVQcm90b1BhdGNoZXIoRGF0ZSwgJ0RhdGUnKSk7CiAg
fQoKICBmdW5jdGlvbiByZXBhaXJfTVVUQUJMRV9XRUFLTUFQX1BST1RPKCkgewogICAgLy8gTm90
ZTogY29vcmRpbmF0ZSB0aGlzIGxpc3Qgd2l0aCBtYWludGFuZW5jZSBvZiB3aGl0ZWxpc3QuanMK
ICAgIFsnc2V0JywKICAgICAnZGVsZXRlJ10uZm9yRWFjaChtYWtlTXV0YWJsZVByb3RvUGF0Y2hl
cihXZWFrTWFwLCAnV2Vha01hcCcpKTsKICB9CgoKICBmdW5jdGlvbiByZXBhaXJfTkVFRF9UT19X
UkFQX0ZPUkVBQ0goKSB7CiAgICAoZnVuY3Rpb24oKSB7CiAgICAgIHZhciBmb3JFYWNoID0gQXJy
YXkucHJvdG90eXBlLmZvckVhY2g7CiAgICAgIGRlZlByb3AoQXJyYXkucHJvdG90eXBlLCAnZm9y
RWFjaCcsIHsKICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZm9yRWFjaFdyYXBwZXIoY2FsbGJhY2tm
biwgb3B0X3RoaXNBcmcpIHsKICAgICAgICAgIHJldHVybiBhcHBseS5jYWxsKGZvckVhY2gsIHRo
aXMsIGFyZ3VtZW50cyk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pKCk7CiAgfQoKCiAgZnVu
Y3Rpb24gcmVwYWlyX05FRURTX0RVTU1ZX1NFVFRFUigpIHsKICAgIChmdW5jdGlvbigpIHsKICAg
ICAgdmFyIGRlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7CiAgICAgIHZhciBnb3BkID0g
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsKICAgICAgdmFyIGZyZWV6ZSA9IE9iamVj
dC5mcmVlemU7CiAgICAgIHZhciBjb21wbGFpbmVkID0gZmFsc2U7CgogICAgICBkZWZQcm9wKE9i
amVjdCwgJ2RlZmluZVByb3BlcnR5JywgewogICAgICAgIHZhbHVlOiBmdW5jdGlvbihiYXNlLCBu
YW1lLCBkZXNjKSB7CiAgICAgICAgICBmdW5jdGlvbiBkdW1teVNldHRlcihuZXdWYWx1ZSkgewog
ICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2lkZW50X19fJykgewogICAgICAgICAgICAgIC8vIFRo
ZSBzZXR0ZXIgZm9yIGlkZW50X19fIHNlZW1zIHRvIGJlIGNhbGxlZCBkdXJpbmcKICAgICAgICAg
ICAgICAvLyB0aGUgYnVpbHQtaW4gZnJlZXplLCB3aGljaCBpbmRpY2F0ZXMgYW4KICAgICAgICAg
ICAgICAvLyB1bmRpYWdub3NlZCBidWcuIEJ5IHRoZSBsb2dpYyBvZiBpbml0U0VTLCBpdCBzaG91
bGQKICAgICAgICAgICAgICAvLyBiZSBpbXBvc3NpYmxlIHRvIGNhbGwgdGhlIGlkZW50X19fIHNl
dHRlci4KICAgICAgICAgICAgICAvLyBUT0RPKGVyaWdodHMpOiBpc29sYXRlIGFuZCByZXBvcnQg
dGhpcy4KICAgICAgICAgICAgICBpZiAoIWNvbXBsYWluZWQpIHsKICAgICAgICAgICAgICAgIGxv
ZygnVW5kaWFnbm9zZWQgY2FsbCB0byBzZXR0ZXIgZm9yIGlkZW50X19fJyk7CiAgICAgICAgICAg
ICAgICBjb21wbGFpbmVkID0gdHJ1ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgLy8K
ICAgICAgICAgICAgICAvLyBJZiB0aGUgZm9sbG93aW5nIGRlYnVnZ2VyIGxpbmUgaXMgdW5jb21t
ZW50ZWQsIHRoZW4KICAgICAgICAgICAgICAvLyB1bmRlciB0aGUgQ2hyb21lIGRlYnVnZ2VyLCB0
aGlzIGNyYXNoZXMgdGhlIHBhZ2UuCiAgICAgICAgICAgICAgLy8gVE9ETyhlcmlnaHRzKTogaXNv
bGF0ZSBhbmQgcmVwb3J0IHRoaXMuCiAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAvL2Rl
YnVnZ2VyOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRocm93IG5ldyBUeXBl
RXJyb3IoJ0Nhbm5vdCBzZXQgIi4nICsgbmFtZSArICciJyk7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIH0KICAgICAgICAgIGZyZWV6ZShkdW1teVNldHRlci5wcm90b3R5cGUpOwogICAgICAgICAg
ZnJlZXplKGR1bW15U2V0dGVyKTsKCiAgICAgICAgICB2YXIgb2xkRGVzYyA9IGdvcGQoYmFzZSwg
bmFtZSk7CiAgICAgICAgICB2YXIgdGVzdEJhc2UgPSB7fTsKICAgICAgICAgIGlmIChvbGREZXNj
KSB7CiAgICAgICAgICAgIGRlZlByb3AodGVzdEJhc2UsIG5hbWUsIG9sZERlc2MpOwogICAgICAg
ICAgfQogICAgICAgICAgZGVmUHJvcCh0ZXN0QmFzZSwgbmFtZSwgZGVzYyk7CiAgICAgICAgICB2
YXIgZnVsbERlc2MgPSBnb3BkKHRlc3RCYXNlLCBuYW1lKTsKCiAgICAgICAgICBpZiAoJ2dldCcg
aW4gZnVsbERlc2MgJiYgZnVsbERlc2Muc2V0ID09PSB2b2lkIDApIHsKICAgICAgICAgICAgZnVs
bERlc2Muc2V0ID0gZHVtbXlTZXR0ZXI7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gZGVm
UHJvcChiYXNlLCBuYW1lLCBmdWxsRGVzYyk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pKCk7
CiAgfQoKCiAgZnVuY3Rpb24gcmVwYWlyX0FDQ0VTU09SU19JTkhFUklUX0FTX09XTigpIHsKICAg
IChmdW5jdGlvbigpewogICAgICAvLyByZXN0cmljdCB0aGVzZQogICAgICB2YXIgZGVmUHJvcCA9
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTsKICAgICAgdmFyIGZyZWV6ZSA9IE9iamVjdC5mcmVlemU7
CiAgICAgIHZhciBzZWFsID0gT2JqZWN0LnNlYWw7CgogICAgICAvLyBwcmVzZXJ2ZSBpbGx1c2lv
bgogICAgICB2YXIgZ29wbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzOwogICAgICB2YXIg
Z29wZCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7CgogICAgICB2YXIgY29tcGxh
aW50ID0gJ1dvcmthcm91bmQgZm9yICcgKwogICAgICAgICdodHRwczovL2J1Z3ppbGxhLm1vemls
bGEub3JnL3Nob3dfYnVnLmNnaT9pZD02Mzc5OTQgJyArCiAgICAgICAgJyBwcm9oaWJpdHMgZW51
bWVyYWJsZSBub24tY29uZmlndXJhYmxlIGFjY2Vzc29yIHByb3BlcnRpZXMuJzsKCiAgICAgIGZ1
bmN0aW9uIGlzQmFkQWNjZXNzb3IoZGVyaXZlZCwgbmFtZSkgewogICAgICAgIHZhciBkZXNjID0g
Z29wZChkZXJpdmVkLCBuYW1lKTsKICAgICAgICBpZiAoIWRlc2MgfHwgISgnZ2V0JyBpbiBkZXNj
KSkgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICB2YXIgYmFzZSA9IGdldFByb3RvdHlwZU9mKGRl
cml2ZWQpOwogICAgICAgIGlmICghYmFzZSkgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICB2YXIg
c3VwZXJEZXNjID0gZ29wZChiYXNlLCBuYW1lKTsKICAgICAgICBpZiAoIXN1cGVyRGVzYyB8fCAh
KCdnZXQnIGluIHN1cGVyRGVzYykpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgcmV0dXJuIChk
ZXNjLmdldCAmJgogICAgICAgICAgICAgICAgIWRlc2MuY29uZmlndXJhYmxlICYmICFzdXBlckRl
c2MuY29uZmlndXJhYmxlICYmCiAgICAgICAgICAgICAgICBkZXNjLmdldCA9PT0gc3VwZXJEZXNj
LmdldCAmJgogICAgICAgICAgICAgICAgZGVzYy5zZXQgPT09IHN1cGVyRGVzYy5zZXQgJiYKICAg
ICAgICAgICAgICAgIGRlc2MuZW51bWVyYWJsZSA9PT0gc3VwZXJEZXNjLmVudW1lcmFibGUpOwog
ICAgICB9CgogICAgICBkZWZQcm9wKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5JywgewogICAgICAg
IHZhbHVlOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eVdyYXBwZXIoYmFzZSwgbmFtZSwgZGVzYykg
ewogICAgICAgICAgdmFyIG9sZERlc2MgPSBnb3BkKGJhc2UsIG5hbWUpOwogICAgICAgICAgdmFy
IHRlc3RCYXNlID0ge307CiAgICAgICAgICBpZiAob2xkRGVzYyAmJiAhaXNCYWRBY2Nlc3Nvcihi
YXNlLCBuYW1lKSkgewogICAgICAgICAgICBkZWZQcm9wKHRlc3RCYXNlLCBuYW1lLCBvbGREZXNj
KTsKICAgICAgICAgIH0KICAgICAgICAgIGRlZlByb3AodGVzdEJhc2UsIG5hbWUsIGRlc2MpOwog
ICAgICAgICAgdmFyIGZ1bGxEZXNjID0gZ29wZCh0ZXN0QmFzZSwgbmFtZSk7CgogICAgICAgICAg
aWYgKCdnZXQnIGluIGZ1bGxEZXNjICYmCiAgICAgICAgICAgICAgZnVsbERlc2MuZW51bWVyYWJs
ZSAmJgogICAgICAgICAgICAgICFmdWxsRGVzYy5jb25maWd1cmFibGUpIHsKICAgICAgICAgICAg
bG9nKGNvbXBsYWludCk7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY29tcGxhaW50
KTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBkZWZQcm9wKGJhc2UsIG5hbWUsIGZ1bGxE
ZXNjKTsKICAgICAgICB9CiAgICAgIH0pOwoKICAgICAgZnVuY3Rpb24gZW5zdXJlU2VhbGFibGUo
YmFzZSkgewogICAgICAgIGdvcG4oYmFzZSkuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7CiAgICAg
ICAgICB2YXIgZGVzYyA9IGdvcGQoYmFzZSwgbmFtZSk7CiAgICAgICAgICBpZiAoJ2dldCcgaW4g
ZGVzYyAmJiBkZXNjLmVudW1lcmFibGUpIHsKICAgICAgICAgICAgaWYgKCFkZXNjLmNvbmZpZ3Vy
YWJsZSkgewogICAgICAgICAgICAgIGxvZygnTmV3IHN5bXB0b206ICInICsgbmFtZSArICciIGFs
cmVhZHkgbm9uLWNvbmZpZ3VyYWJsZScpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxvZyhj
b21wbGFpbnQpOwogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGNvbXBsYWludCk7CiAg
ICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIGRlZlByb3AoT2JqZWN0LCAnZnJl
ZXplJywgewogICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmcmVlemVXcmFwcGVyKGJhc2UpIHsKICAg
ICAgICAgIGVuc3VyZVNlYWxhYmxlKGJhc2UpOwogICAgICAgICAgcmV0dXJuIGZyZWV6ZShiYXNl
KTsKICAgICAgICB9CiAgICAgIH0pOwoKICAgICAgZGVmUHJvcChPYmplY3QsICdzZWFsJywgewog
ICAgICAgIHZhbHVlOiBmdW5jdGlvbiBzZWFsV3JhcHBlcihiYXNlKSB7CiAgICAgICAgICBlbnN1
cmVTZWFsYWJsZShiYXNlKTsKICAgICAgICAgIHJldHVybiBzZWFsKGJhc2UpOwogICAgICAgIH0K
ICAgICAgfSk7CgogICAgICBkZWZQcm9wKE9iamVjdC5wcm90b3R5cGUsICdoYXNPd25Qcm9wZXJ0
eScsIHsKICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaGFzT3duUHJvcGVydHlXcmFwcGVyKG5hbWUp
IHsKICAgICAgICAgIHJldHVybiBob3AuY2FsbCh0aGlzLCBuYW1lKSAmJiAhaXNCYWRBY2Nlc3Nv
cih0aGlzLCBuYW1lKTsKICAgICAgICB9CiAgICAgIH0pOwoKICAgICAgZGVmUHJvcChPYmplY3Qs
ICdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3InLCB7CiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvcldyYXBwZXIoYmFzZSwgbmFtZSkgewogICAgICAgICAgaWYg
KGlzQmFkQWNjZXNzb3IoYmFzZSwgbmFtZSkpIHsgcmV0dXJuIHZvaWQgMDsgfQogICAgICAgICAg
cmV0dXJuIGdvcGQoYmFzZSwgbmFtZSk7CiAgICAgICAgfQogICAgICB9KTsKCiAgICAgIGRlZlBy
b3AoT2JqZWN0LCAnZ2V0T3duUHJvcGVydHlOYW1lcycsIHsKICAgICAgICB2YWx1ZTogZnVuY3Rp
b24gZ2V0T3duUHJvcGVydHlOYW1lc1dyYXBwZXIoYmFzZSkgewogICAgICAgICAgcmV0dXJuIGdv
cG4oYmFzZSkuZmlsdGVyKGZ1bmN0aW9uKG5hbWUpIHsKICAgICAgICAgICAgcmV0dXJuICFpc0Jh
ZEFjY2Vzc29yKGJhc2UsIG5hbWUpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsK
CiAgICB9KSgpOwogIH0KCiAgZnVuY3Rpb24gcmVwYWlyX1NPUlRfTEVBS1NfR0xPQkFMKCkgewog
ICAoZnVuY3Rpb24oKXsKICAgICAgdmFyIHVuc2FmZVNvcnQgPSBBcnJheS5wcm90b3R5cGUuc29y
dDsKICAgICAgdW5zYWZlU29ydC5jYWxsID0gY2FsbDsKICAgICAgZnVuY3Rpb24gc29ydFdyYXBw
ZXIob3B0X2NvbXBhcmVmbikgewogICAgICAgIGZ1bmN0aW9uIGNvbXBhcmVmbldyYXBwZXIoeCwg
eSkgewogICAgICAgICAgcmV0dXJuIG9wdF9jb21wYXJlZm4oeCwgeSk7CiAgICAgICAgfQogICAg
ICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICByZXR1cm4gdW5zYWZl
U29ydC5jYWxsKHRoaXMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gdW5zYWZl
U29ydC5jYWxsKHRoaXMsIGNvbXBhcmVmbldyYXBwZXIpOwogICAgICAgIH0KICAgICAgfQogICAg
ICBkZWZQcm9wKEFycmF5LnByb3RvdHlwZSwgJ3NvcnQnLCB7IHZhbHVlOiBzb3J0V3JhcHBlciB9
KTsKICAgIH0pKCk7CiAgfQoKICBmdW5jdGlvbiByZXBhaXJfUkVQTEFDRV9MRUFLU19HTE9CQUwo
KSB7CiAgICAoZnVuY3Rpb24oKXsKICAgICAgdmFyIHVuc2FmZVJlcGxhY2UgPSBTdHJpbmcucHJv
dG90eXBlLnJlcGxhY2U7CiAgICAgIHVuc2FmZVJlcGxhY2UuY2FsbCA9IGNhbGw7CiAgICAgIGZ1
bmN0aW9uIHJlcGxhY2VXcmFwcGVyKHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpIHsKICAgICAg
ICB2YXIgc2FmZVJlcGxhY2VWYWx1ZSA9IHJlcGxhY2VWYWx1ZTsKICAgICAgICBmdW5jdGlvbiBy
ZXBsYWNlVmFsdWVXcmFwcGVyKG0xLCBtMiwgbTMpIHsKICAgICAgICAgIHJldHVybiByZXBsYWNl
VmFsdWUobTEsIG0yLCBtMyk7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgcmVwbGFjZVZh
bHVlID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICBzYWZlUmVwbGFjZVZhbHVlID0gcmVwbGFj
ZVZhbHVlV3JhcHBlcjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHVuc2FmZVJlcGxhY2UuY2Fs
bCh0aGlzLCBzZWFyY2hWYWx1ZSwgc2FmZVJlcGxhY2VWYWx1ZSk7CiAgICAgIH0KICAgICAgZGVm
UHJvcChTdHJpbmcucHJvdG90eXBlLCAncmVwbGFjZScsIHsgdmFsdWU6IHJlcGxhY2VXcmFwcGVy
IH0pOwogICAgfSkoKTsKICB9CgoKICB2YXIga2x1ZGdlcyA9IFsKICAgIHsKICAgICAgZGVzY3Jp
cHRpb246ICdHbG9iYWwgb2JqZWN0IGxlYWtzIHRocm91Z2ggYnVpbHQtaW4gbWV0aG9kcycsCiAg
ICAgIHRlc3Q6IHRlc3RfR0xPQkFMX0xFQUtTLAogICAgICByZXBhaXI6IHZvaWQgMCwKICAgICAg
Y2FuUmVwYWlyU2FmZWx5OiBmYWxzZSwKICAgICAgdXJsczogWydodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTEwOTcnLAogICAgICAgICAgICAgJ2h0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODMzOCcsCiAgICAgICAgICAgICAnaHR0cDovL2Nv
ZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MTQzNyddLAogICAgICBzZWN0aW9u
czogWycxNS4yLjQuNCddLAogICAgICB0ZXN0czogWydTMTUuMi40LjRfQTE0J10KICAgIH0sCiAg
ICB7CiAgICAgIGRlc2NyaXB0aW9uOiAnT2JqZWN0LmZyZWV6ZSBpcyBtaXNzaW5nJywKICAgICAg
dGVzdDogdGVzdF9NSVNTSU5HX0ZSRUVaRV9FVEMsCiAgICAgIHJlcGFpcjogcmVwYWlyX01JU1NJ
TkdfRlJFRVpFX0VUQywKICAgICAgY2FuUmVwYWlyU2FmZWx5OiBmYWxzZSwKICAgICAgdXJsczog
WydodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU3MzYnXSwKICAgICAg
c2VjdGlvbnM6IFsnMTUuMi4zLjknXSwKICAgICAgdGVzdHM6IFtdCiAgICB9LAogICAgewogICAg
ICBkZXNjcmlwdGlvbjogJ1BoYW50b20gY2FsbGVlIG9uIHN0cmljdCBmdW5jdGlvbnMnLAogICAg
ICB0ZXN0OiB0ZXN0X01JU1NJTkdfQ0FMTEVFX0RFU0NSSVBUT1IsCiAgICAgIHJlcGFpcjogcmVw
YWlyX01JU1NJTkdfQ0FMTEVFX0RFU0NSSVBUT1IsCiAgICAgIGNhblJlcGFpclNhZmVseTogdHJ1
ZSwKICAgICAgdXJsczogWydodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTU1MzcnXSwKICAgICAgc2VjdGlvbnM6IFsnMTUuMi4zLjQnXSwKICAgICAgdGVzdHM6IFtdCiAg
ICB9LAogICAgewogICAgICBkZXNjcmlwdGlvbjogJ0Nhbm5vdCBkZWxldGUgYW1iaWVudCBtdXRh
YmxlIFJlZ0V4cC5sZWZ0Q29udGV4dCcsCiAgICAgIHRlc3Q6IHRlc3RfUkVHRVhQX0NBTlRfQkVf
TkVVVEVSRUQsCiAgICAgIHJlcGFpcjogcmVwYWlyX1JFR0VYUF9DQU5UX0JFX05FVVRFUkVELAog
ICAgICBjYW5SZXBhaXJTYWZlbHk6IHRydWUsCiAgICAgIHVybHM6IFsnaHR0cHM6Ly9idWd6aWxs
YS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTkxODQ2JywKICAgICAgICAgICAgICdodHRw
Oi8vd2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1LnBocD9pZD0nICsKICAgICAgICAgICAgICdjb252
ZW50aW9uczptYWtlX25vbi1zdGFuZGFyZF9wcm9wZXJ0aWVzX2NvbmZpZ3VyYWJsZSddLAogICAg
ICBzZWN0aW9uczogW10sCiAgICAgIHRlc3RzOiBbXQogICAgfSwKICAgIHsKICAgICAgZGVzY3Jp
cHRpb246ICdSZWdFeHAuZXhlYyBsZWFrcyBtYXRjaCBnbG9iYWxseScsCiAgICAgIHRlc3Q6IHRl
c3RfUkVHRVhQX1RFU1RfRVhFQ19VTlNBRkUsCiAgICAgIHJlcGFpcjogcmVwYWlyX1JFR0VYUF9U
RVNUX0VYRUNfVU5TQUZFLAogICAgICBjYW5SZXBhaXJTYWZlbHk6IHRydWUsCiAgICAgIHVybHM6
IFsnaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MTM5MycsCiAg
ICAgICAgICAgICAnaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRh
aWw/aWQ9NzU3NDAnLAogICAgICAgICAgICAgJ2h0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcv
c2hvd19idWcuY2dpP2lkPTYzNTAxNycsCiAgICAgICAgICAgICAnaHR0cDovL2NvZGUuZ29vZ2xl
LmNvbS9wL2dvb2dsZS1jYWphL2lzc3Vlcy9kZXRhaWw/aWQ9NTI4J10sCiAgICAgIHNlY3Rpb25z
OiBbJzE1LjEwLjYuMiddLAogICAgICB0ZXN0czogWydTMTUuMTAuNi4yX0ExMiddCiAgICB9LAog
ICAgewogICAgICBkZXNjcmlwdGlvbjogJ0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGlzIG1pc3Np
bmcnLAogICAgICB0ZXN0OiB0ZXN0X01JU1NJTkdfQklORCwKICAgICAgcmVwYWlyOiByZXBhaXJf
TUlTU0lOR19CSU5ELAogICAgICBjYW5SZXBhaXJTYWZlbHk6IHRydWUsCiAgICAgIHVybHM6IFsn
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2MzgyJ10sCiAgICAgIHNl
Y3Rpb25zOiBbJzE1LjMuNC41J10sCiAgICAgIHRlc3RzOiBbXQogICAgfSwKICAgIHsKICAgICAg
ZGVzY3JpcHRpb246ICdEYXRlLnByb3RvdHlwZSBpcyBhIGdsb2JhbCBjb21tdW5pY2F0aW9uIGNo
YW5uZWwnLAogICAgICB0ZXN0OiB0ZXN0X01VVEFCTEVfREFURV9QUk9UTywKICAgICAgcmVwYWly
OiByZXBhaXJfTVVUQUJMRV9EQVRFX1BST1RPLAogICAgICBjYW5SZXBhaXJTYWZlbHk6IHRydWUs
CiAgICAgIHVybHM6IFsnaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2dvb2dsZS1jYWphL2lzc3Vl
cy9kZXRhaWw/aWQ9MTM2MiddLAogICAgICBzZWN0aW9uczogWycxNS45LjUnXSwKICAgICAgdGVz
dHM6IFtdCiAgICB9LAogICAgewogICAgICBkZXNjcmlwdGlvbjogJ1dlYWtNYXAucHJvdG90eXBl
IGlzIGEgZ2xvYmFsIGNvbW11bmljYXRpb24gY2hhbm5lbCcsCiAgICAgIHRlc3Q6IHRlc3RfTVVU
QUJMRV9XRUFLTUFQX1BST1RPLAogICAgICByZXBhaXI6IHJlcGFpcl9NVVRBQkxFX1dFQUtNQVBf
UFJPVE8sCiAgICAgIGNhblJlcGFpclNhZmVseTogdHJ1ZSwKICAgICAgdXJsczogWydodHRwczov
L2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02NTY4MjgnXSwKICAgICAgc2Vj
dGlvbnM6IFtdLAogICAgICB0ZXN0czogW10KICAgIH0sCiAgICB7CiAgICAgIGRlc2NyaXB0aW9u
OiAnQXJyYXkgZm9yRWFjaCBjYW5ub3QgYmUgZnJvemVuIHdoaWxlIGluIHByb2dyZXNzJywKICAg
ICAgdGVzdDogdGVzdF9ORUVEX1RPX1dSQVBfRk9SRUFDSCwKICAgICAgcmVwYWlyOiByZXBhaXJf
TkVFRF9UT19XUkFQX0ZPUkVBQ0gsCiAgICAgIGNhblJlcGFpclNhZmVseTogdHJ1ZSwKICAgICAg
dXJsczogWydodHRwOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0xNDQ3
J10sCiAgICAgIHNlY3Rpb25zOiBbJzE1LjQuNC4xOCddLAogICAgICB0ZXN0czogWydTMTUuNC40
LjE4X0ExJywgJ1MxNS40LjQuMThfQTInXQogICAgfSwKICAgIHsKICAgICAgZGVzY3JpcHRpb246
ICdXb3JrYXJvdW5kIHVuZGlhZ25vc2VkIG5lZWQgZm9yIGR1bW15IHNldHRlcicsCiAgICAgIHRl
c3Q6IHRlc3RfTkVFRFNfRFVNTVlfU0VUVEVSLAogICAgICByZXBhaXI6IHJlcGFpcl9ORUVEU19E
VU1NWV9TRVRURVIsCiAgICAgIGNhblJlcGFpclNhZmVseTogdHJ1ZSwKICAgICAgdXJsczogW10s
CiAgICAgIHNlY3Rpb25zOiBbXSwKICAgICAgdGVzdHM6IFtdCiAgICB9LAogICAgewogICAgICBk
ZXNjcmlwdGlvbjogJ0FjY2Vzc29yIHByb3BlcnRpZXMgaW5oZXJpdCBhcyBvd24gcHJvcGVydGll
cycsCiAgICAgIHRlc3Q6IHRlc3RfQUNDRVNTT1JTX0lOSEVSSVRfQVNfT1dOLAogICAgICByZXBh
aXI6IHJlcGFpcl9BQ0NFU1NPUlNfSU5IRVJJVF9BU19PV04sCiAgICAgIGNhblJlcGFpclNhZmVs
eTogdHJ1ZSwKICAgICAgdXJsczogWydodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3df
YnVnLmNnaT9pZD02Mzc5OTQnXSwKICAgICAgc2VjdGlvbnM6IFtdLAogICAgICB0ZXN0czogW10K
ICAgIH0sCiAgICB7CiAgICAgIGRlc2NyaXB0aW9uOiAnQXJyYXkgc29ydCBsZWFrcyBnbG9iYWwn
LAogICAgICB0ZXN0OiB0ZXN0X1NPUlRfTEVBS1NfR0xPQkFMLAogICAgICByZXBhaXI6IHJlcGFp
cl9TT1JUX0xFQUtTX0dMT0JBTCwKICAgICAgY2FuUmVwYWlyU2FmZWx5OiB0cnVlLAogICAgICB1
cmxzOiBbJ2h0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTEzNjAn
XSwKICAgICAgc2VjdGlvbnM6IFsnMTUuNC40LjExJ10sCiAgICAgIHRlc3RzOiBbJ1MxNS40LjQu
MTFfQTgnXQogICAgfSwKICAgIHsKICAgICAgZGVzY3JpcHRpb246ICdTdHJpbmcgcmVwbGFjZSBs
ZWFrcyBnbG9iYWwnLAogICAgICB0ZXN0OiB0ZXN0X1JFUExBQ0VfTEVBS1NfR0xPQkFMLAogICAg
ICByZXBhaXI6IHJlcGFpcl9SRVBMQUNFX0xFQUtTX0dMT0JBTCwKICAgICAgY2FuUmVwYWlyU2Fm
ZWx5OiB0cnVlLAogICAgICB1cmxzOiBbJ2h0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1
ZXMvZGV0YWlsP2lkPTEzNjAnXSwKICAgICAgc2VjdGlvbnM6IFsnMTUuNS40LjExJ10sCiAgICAg
IHRlc3RzOiBbJ1MxNS41LjQuMTFfQTEyJ10KICAgIH0sCiAgICB7CiAgICAgIGRlc2NyaXB0aW9u
OiAnQnVpbHQgaW4gZnVuY3Rpb25zIGxlYWsgImNhbGxlciInLAogICAgICB0ZXN0OiB0ZXN0X0JV
SUxUSU5fTEVBS1NfQ0FMTEVSLAogICAgICByZXBhaXI6IHZvaWQgMCwKICAgICAgY2FuUmVwYWly
U2FmZWx5OiBmYWxzZSwKICAgICAgdXJsczogWydodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3Jn
L3Nob3dfYnVnLmNnaT9pZD01OTE4NDYnLAogICAgICAgICAgICAgJ2h0dHA6Ly93aWtpLmVjbWFz
Y3JpcHQub3JnL2Rva3UucGhwP2lkPScgKwogICAgICAgICAgICAgJ2NvbnZlbnRpb25zOm1ha2Vf
bm9uLXN0YW5kYXJkX3Byb3BlcnRpZXNfY29uZmlndXJhYmxlJ10sCiAgICAgIHNlY3Rpb25zOiBb
XSwKICAgICAgdGVzdHM6IFtdCiAgICB9LAogICAgewogICAgICBkZXNjcmlwdGlvbjogJ0J1aWx0
IGluIGZ1bmN0aW9ucyBsZWFrICJhcmd1bWVudHMiJywKICAgICAgdGVzdDogdGVzdF9CVUlMVElO
X0xFQUtTX0FSR1VNRU5UUywKICAgICAgcmVwYWlyOiB2b2lkIDAsCiAgICAgIGNhblJlcGFpclNh
ZmVseTogZmFsc2UsCiAgICAgIHVybHM6IFsnaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTkxODQ2JywKICAgICAgICAgICAgICdodHRwOi8vd2lraS5lY21hc2Ny
aXB0Lm9yZy9kb2t1LnBocD9pZD0nICsKICAgICAgICAgICAgICdjb252ZW50aW9uczptYWtlX25v
bi1zdGFuZGFyZF9wcm9wZXJ0aWVzX2NvbmZpZ3VyYWJsZSddLAogICAgICBzZWN0aW9uczogW10s
CiAgICAgIHRlc3RzOiBbXQogICAgfSwKICAgIHsKICAgICAgZGVzY3JpcHRpb246ICdCb3VuZCBm
dW5jdGlvbnMgbGVhayAiY2FsbGVyIicsCiAgICAgIHRlc3Q6IHRlc3RfQk9VTkRfRlVOQ1RJT05f
TEVBS1NfQ0FMTEVSLAogICAgICByZXBhaXI6IHJlcGFpcl9NSVNTSU5HX0JJTkQsCiAgICAgIGNh
blJlcGFpclNhZmVseTogdHJ1ZSwKICAgICAgdXJsczogWydodHRwOi8vY29kZS5nb29nbGUuY29t
L3AvdjgvaXNzdWVzL2RldGFpbD9pZD04OTMnLAogICAgICAgICAgICAgJ2h0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MzM5OCddLAogICAgICBzZWN0aW9uczogWycxNS4z
LjQuNSddLAogICAgICB0ZXN0czogWydTMTUuMy40LjVfQTEnXQogICAgfSwKICAgIHsKICAgICAg
ZGVzY3JpcHRpb246ICdCb3VuZCBmdW5jdGlvbnMgbGVhayAiYXJndW1lbnRzIicsCiAgICAgIHRl
c3Q6IHRlc3RfQk9VTkRfRlVOQ1RJT05fTEVBS1NfQVJHVU1FTlRTLAogICAgICByZXBhaXI6IHJl
cGFpcl9NSVNTSU5HX0JJTkQsCiAgICAgIGNhblJlcGFpclNhZmVseTogdHJ1ZSwKICAgICAgdXJs
czogWydodHRwOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD04OTMnLAog
ICAgICAgICAgICAgJ2h0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MzM5
OCddLAogICAgICBzZWN0aW9uczogWycxNS4zLjQuNSddLAogICAgICB0ZXN0czogWydTMTUuMy40
LjVfQTInXQogICAgfSwKICAgIHsKICAgICAgZGVzY3JpcHRpb246ICdKU09OLnBhcnNlIGNvbmZ1
c2VkIGJ5ICJfX3Byb3RvX18iJywKICAgICAgdGVzdDogdGVzdF9KU09OX1BBUlNFX1BST1RPX0NP
TkZVU0lPTiwKICAgICAgcmVwYWlyOiB2b2lkIDAsCiAgICAgIGNhblJlcGFpclNhZmVseTogdHJ1
ZSwKICAgICAgdXJsczogWydodHRwOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFp
bD9pZD02MjEnLAogICAgICAgICAgICAgJ2h0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1
ZXMvZGV0YWlsP2lkPTEzMTAnXSwKICAgICAgc2VjdGlvbnM6IFsnMTUuMTIuMiddLAogICAgICB0
ZXN0czogWydTMTUuMTIuMl9BMSddCiAgICB9CiAgXTsKCgogIC8vIGZpcnN0IHJ1biBhbGwgdGhl
IHRlc3RzIGJlZm9yZSByZXBhaXJpbmcgYW55dGhpbmcKICAvLyB0aGVuIHJlcGFpciBhbGwgcmVw
YWlyYWJsZSBmYWlsZWQgdGVzdHMKICAvLyB0aGVuIHJ1biBhbGwgdGhlIHRlc3RzIGFnYWluLCBp
biBjYXNlIHNvbWUgcmVwYWlycyBicmVhayBvdGhlciB0ZXN0cwoKICB2YXIgYmVmb3JlRmFpbHVy
ZXMgPSBrbHVkZ2VzLm1hcChmdW5jdGlvbihrbHVkZ2UpIHsKICAgIHJldHVybiBrbHVkZ2UudGVz
dCgpOwogIH0pOwogIHZhciByZXBhaXJzID0gW107CiAga2x1ZGdlcy5mb3JFYWNoKGZ1bmN0aW9u
KGtsdWRnZSwgaSkgewogICAgaWYgKGJlZm9yZUZhaWx1cmVzW2ldKSB7CiAgICAgIHZhciByZXBh
aXIgPSBrbHVkZ2UucmVwYWlyOwogICAgICBpZiAocmVwYWlyICYmIHJlcGFpcnMubGFzdEluZGV4
T2YocmVwYWlyKSA9PT0gLTEpIHsKICAgICAgICByZXBhaXIoKTsKICAgICAgICAvLyBTYW1lIHJl
cGFpciBtaWdodCBmaXggbXVsdGlwbGUgcHJvYmxlbXMsIGJ1dCBydW4gYXQgbW9zdCBvbmNlLgog
ICAgICAgIHJlcGFpcnMucHVzaChyZXBhaXIpOwogICAgICB9CiAgICB9CiAgfSk7CiAgdmFyIGFm
dGVyRmFpbHVyZXMgPSBrbHVkZ2VzLm1hcChmdW5jdGlvbihrbHVkZ2UpIHsKICAgIHJldHVybiBr
bHVkZ2UudGVzdCgpOwogIH0pOwoKICBrbHVkZ2VzLmZvckVhY2goZnVuY3Rpb24oa2x1ZGdlLCBp
KSB7CiAgICB2YXIgc3RhdHVzID0gJyc7CiAgICBpZiAoYmVmb3JlRmFpbHVyZXNbaV0pIHsgLy8g
ZmFpbGVkIGJlZm9yZQogICAgICBpZiAoYWZ0ZXJGYWlsdXJlc1tpXSkgeyAvLyBmYWlsZWQgYWZ0
ZXIKICAgICAgICBpZiAoa2x1ZGdlLnJlcGFpcikgewogICAgICAgICAgc3RhdHVzID0gJ1JlcGFp
ciBmYWlsZWQnOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzdGF0dXMgPSAnTm90IHJlcGFp
cmVkJzsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGtsdWRnZS5yZXBhaXIp
IHsKICAgICAgICAgIHN0YXR1cyA9ICdSZXBhaXJlZCc7CiAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgIHN0YXR1cyA9ICdBY2NpZGVudGFsbHkgcmVwYWlyZWQnOwogICAgICAgIH0KICAgICAgfQog
ICAgfSBlbHNlIHsgLy8gc3VjY2VlZGVkIGJlZm9yZQogICAgICBpZiAoYWZ0ZXJGYWlsdXJlc1tp
XSkgeyAvLyBmYWlsZWQgYWZ0ZXIKICAgICAgICBzdGF0dXMgPSAnQnJva2VuIGJ5IG90aGVyIGF0
dGVtcHRlZCByZXBhaXJzJzsKICAgICAgfSBlbHNlIHsgLy8gc3VjY2VlZGVkIGFmdGVyCiAgICAg
ICAgLy8gbm90aGluZyB0byBzZWUgaGVyZSwgbW92ZSBhbG9uZwogICAgICAgIHJldHVybjsKICAg
ICAgfQogICAgfQogICAgbG9nKGkgKyAnOiAnICsga2x1ZGdlLmRlc2NyaXB0aW9uICsgJy4gJyAr
CiAgICAgICAgc3RhdHVzICsgJy4gJyArCiAgICAgICAgKGtsdWRnZS5jYW5SZXBhaXJTYWZlbHkg
PyAnJyA6ICdUaGlzIHBsYXRmb3JtIGlzIG5vdCBTRVMtc2FmZS4gJykgKwogICAgICAgIC8vIFRP
RE8oZXJpZ2h0cyk6IHNlbGVjdCBtb3N0IHJlbGV2YW50IFVSTCBiYXNlZCBvbiBwbGF0Zm9ybQog
ICAgICAgIChrbHVkZ2UudXJsc1swXSA/ICdTZWUgJyArIGtsdWRnZS51cmxzWzBdIDogJycpKTsK
ICB9KTsKCn0pKHRoaXMpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111364</attachid>
            <date>2011-10-17 18:36:12 -0700</date>
            <delta_ts>2011-10-19 17:04:32 -0700</delta_ts>
            <desc>The patch</desc>
            <filename>63398.patch</filename>
            <type>text/plain</type>
            <size>6637</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTc2OTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAK
KzIwMTEtMTAtMTcgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgor
CisgICAgICAgIFBvaXNvbmluZyBvZiBzdHJpY3QgY2FsbGVyLGFyZ3VtZW50cyBpbmFwcHJvcHJp
YXRlbHkgcG9pc29uaW5nICJpbiIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTYzMzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhlIHByb2JsZW0gaGVyZSBpcyB0aGF0IHRoZSBoYXNbT3duXVByb3BlcnR5
IG1ldGhvZHMgZ2V0IHRoZSBzbG90IHJhdGhlciB0aGFuCisgICAgICAgIHRoZSBkZXNjcmlwdG9y
LCBhbmQgZ2V0dGluZyB0aGUgc2xvdCBtYXkgY2F1c2UgdGhlIHByb3BlcnR5IHRvIGJlIGVhZ2Vy
bHkgYWNjZXNzZWQuCisKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlND
OjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgICAgICAtIFdlIGRvbid0IGV4cGVjdCBo
YXNQcm9wZXJ0eSB0byBldmVyIHRocm93LiBJZiBpdCBkb2VzLCBpdCB3b24ndCBnZXQgY2F1Z2h0
CisgICAgICAgICAgICAgIChzaW5jZSBpdCBpcyBhZnRlciB0aGUgZXhjZXB0aW9uIGNoZWNrKSwg
c28gQVNTRVJUIHRvIGd1YXJkIGFnYWluc3QgdGhpcy4KKyAgICAgICAgKiBydW50aW1lL0pTT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omhhc1Byb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6Omhhc093blByb3BlcnR5KToKKyAgICAgICAgICAgIC0gVGhlc2UgbWV0
aG9kcyBzaG91bGQgbm90IGNoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIGRlc2NyaXB0b3I7
IG5ldmVyIGdldCB0aGUgdmFsdWUuCisKIDIwMTEtMTAtMTcgIEdhdmluIEJhcnJhY2xvdWdoICA8
YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIEV4Y2VwdGlvbiBvcmRlcmluZyBpbiBT
dHJpbmcucHJvdG90eXBlLnJlcGxhY2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U3R1YnMuY3BwCShyZXZpc2lvbiA5NzY1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjA3LDcgKzM2MDcsOSBAQCBERUZJTkVf
U1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAKICAgICBJZGVudGlmaWVyIHByb3Bl
cnR5KGNhbGxGcmFtZSwgcHJvcE5hbWUudG9TdHJpbmcoY2FsbEZyYW1lKSk7CiAgICAgQ0hFQ0tf
Rk9SX0VYQ0VQVElPTigpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGJh
c2VPYmotPmhhc1Byb3BlcnR5KGNhbGxGcmFtZSwgcHJvcGVydHkpKSk7CisgICAgYm9vbCByZXN1
bHQgPSBiYXNlT2JqLT5oYXNQcm9wZXJ0eShjYWxsRnJhbWUsIHByb3BlcnR5KTsKKyAgICBBU1NF
UlQoIWNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKHJlc3VsdCkpOwogfQogCiBERUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVj
dCosIG9wX3B1c2hfbmV3X3Njb3BlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gOTc2NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MywxNCArMjQzLDE0
IEBAIHZvaWQgSlNPYmplY3Q6OnB1dFdpdGhBdHRyaWJ1dGVzKEV4ZWNTdGEKIAogYm9vbCBKU09i
amVjdDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUpIGNvbnN0CiB7Ci0gICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgcmV0dXJuIGNv
bnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5
TmFtZSwgc2xvdCk7CisgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CisgICAgcmV0
dXJuIGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKS0+Z2V0UHJvcGVydHlEZXNjcmlwdG9yKGV4
ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7CiB9CiAKIGJvb2wgSlNPYmplY3Q6Omhhc1By
b3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdAogewot
ICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgIHJldHVybiBjb25zdF9jYXN0PEpTT2JqZWN0Kj4o
dGhpcyktPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIFBy
b3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOworICAgIHJldHVybiBjb25zdF9jYXN0PEpTT2Jq
ZWN0Kj4odGhpcyktPmdldFByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBJZGVudGlmaWVyOjpmcm9t
KGV4ZWMsIHByb3BlcnR5TmFtZSksIGRlc2NyaXB0b3IpOwogfQogCiBib29sIEpTT2JqZWN0Ojpk
ZWxldGVQcm9wZXJ0eVZpcnR1YWwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUpCkBAIC0yODYsOCArMjg2LDggQEAgYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJv
cGVydHkoSlNDZWxsKiBjZQogCiBib29sIEpTT2JqZWN0OjpoYXNPd25Qcm9wZXJ0eShFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkgY29uc3QKIHsKLSAgICBQ
cm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICByZXR1cm4gY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMp
LT5nZXRPd25Qcm9wZXJ0eVNsb3RWaXJ0dWFsKGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cisg
ICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8
SlNPYmplY3QqPih0aGlzKS0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHByb3BlcnR5
TmFtZSwgZGVzY3JpcHRvcik7CiB9CiAKIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5Vmly
dHVhbChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkKSW5kZXg6IExheW91
dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDk3NjkyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMTEtMTAtMTcgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91
Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFBvaXNvbmluZyBvZiBzdHJpY3QgY2FsbGVyLGFyZ3Vt
ZW50cyBpbmFwcHJvcHJpYXRlbHkgcG9pc29uaW5nICJpbiIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzMzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2pzL2Jhc2ljLXN0cmljdC1tb2RlLWV4
cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2pzL3NjcmlwdC10ZXN0cy9iYXNpYy1zdHJpY3Qt
bW9kZS5qczoKKyAgICAgICAgICAgIC0gYWRkZWQgdGVzdHMuCisKIDIwMTEtMTAtMTcgIEtlbmpp
IEltYXNha2kgIDxpbWFzYWtpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIHJl
YmFzZWxpbmUgZnVsbHNjcmVlbiBsYXlvdXQgdGVzdHMgdXNpbmcgcmViYXNlbGluZSB0b29scy4K
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvYmFzaWMtc3RyaWN0LW1vZGUtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvYmFzaWMtc3RyaWN0LW1vZGUtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiA5NzY1NSkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvYmFzaWMt
c3RyaWN0LW1vZGUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2NiwxMCBA
QCBQQVNTIChmdW5jdGlvbiBmKGFyZyl7J3VzZSBzdHJpY3QnOyBmLmFyCiBQQVNTIChmdW5jdGlv
biBmKGFyZyl7J3VzZSBzdHJpY3QnOyBmLmNhbGxlcjsgfSkoKSB0aHJldyBleGNlcHRpb24gVHlw
ZUVycm9yOiBDYW5ub3QgYWNjZXNzIGNhbGxlciBwcm9wZXJ0eSBvZiBhIHN0cmljdCBtb2RlIGZ1
bmN0aW9uLgogUEFTUyAoZnVuY3Rpb24gZihhcmcpeyd1c2Ugc3RyaWN0JzsgZi5hcmd1bWVudHM9
NTsgfSkoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBDYW5ub3QgYWNjZXNzIGFyZ3VtZW50
cyBwcm9wZXJ0eSBvZiBhIHN0cmljdCBtb2RlIGZ1bmN0aW9uLgogUEFTUyAoZnVuY3Rpb24gZihh
cmcpeyd1c2Ugc3RyaWN0JzsgZi5jYWxsZXI9NTsgfSkoKSB0aHJldyBleGNlcHRpb24gVHlwZUVy
cm9yOiBDYW5ub3QgYWNjZXNzIGNhbGxlciBwcm9wZXJ0eSBvZiBhIHN0cmljdCBtb2RlIGZ1bmN0
aW9uLgorUEFTUyAiY2FsbGVyIiBpbiBmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0In0gaXMgdHJ1ZQor
UEFTUyAoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7fSkuaGFzT3duUHJvcGVydHkoImNhbGxlciIp
IGlzIHRydWUKK1BBU1MgImFyZ3VtZW50cyIgaW4gZnVuY3Rpb24oKXsidXNlIHN0cmljdCJ9IGlz
IHRydWUKK1BBU1MgKGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO30pLmhhc093blByb3BlcnR5KCJh
cmd1bWVudHMiKSBpcyB0cnVlCiBQQVNTICd1c2Ugc3RyaWN0JzsgKGZ1bmN0aW9uICgpe3dpdGgo
MSl7fTt9KSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6ICd3aXRoJyBzdGF0ZW1lbnRzIGFy
ZSBub3QgdmFsaWQgaW4gc3RyaWN0IG1vZGUuCiBQQVNTIChmdW5jdGlvbigpeyd1c2Ugc3RyaWN0
JzsgKGZ1bmN0aW9uICgpe3dpdGgoMSl7fTt9KX0pIHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJv
cjogJ3dpdGgnIHN0YXRlbWVudHMgYXJlIG5vdCB2YWxpZCBpbiBzdHJpY3QgbW9kZS4KIFBBU1Mg
J3VzZSBzdHJpY3QnOyAoZnVuY3Rpb24gKCl7dmFyIGE7IGRlbGV0ZSBhO30pIHRocmV3IGV4Y2Vw
dGlvbiBTeW50YXhFcnJvcjogQ2Fubm90IGRlbGV0ZSB1bnF1YWxpZmllZCBwcm9wZXJ0eSAnYScg
aW4gc3RyaWN0IG1vZGUuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9i
YXNpYy1zdHJpY3QtbW9kZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3Nj
cmlwdC10ZXN0cy9iYXNpYy1zdHJpY3QtbW9kZS5qcwkocmV2aXNpb24gOTc2NTUpCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9iYXNpYy1zdHJpY3QtbW9kZS5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtNzQsNiArNzQsMTEgQEAgc2hvdWxkVGhyb3coIihmdW5jdGlvbiBmKGFyZyl7
J3VzZSBzdHJpYwogc2hvdWxkVGhyb3coIihmdW5jdGlvbiBmKGFyZyl7J3VzZSBzdHJpY3QnOyBm
LmNhbGxlcjsgfSkoKSIpOwogc2hvdWxkVGhyb3coIihmdW5jdGlvbiBmKGFyZyl7J3VzZSBzdHJp
Y3QnOyBmLmFyZ3VtZW50cz01OyB9KSgpIik7CiBzaG91bGRUaHJvdygiKGZ1bmN0aW9uIGYoYXJn
KXsndXNlIHN0cmljdCc7IGYuY2FsbGVyPTU7IH0pKCkiKTsKKy8vIGFyZ3VtZW50cy9jYWxsZXIg
cG9pc29uaW5nIHNob3VsZCBiZSB2aXNpYmxlIGJ1dCBub3QgdGhyb3cgd2l0aCAnaW4nICYgJ2hh
c093blByb3BlcnR5Jy4KK3Nob3VsZEJlVHJ1ZSgnImNhbGxlciIgaW4gZnVuY3Rpb24oKXsidXNl
IHN0cmljdCJ9Jyk7CitzaG91bGRCZVRydWUoJyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt9KS5o
YXNPd25Qcm9wZXJ0eSgiY2FsbGVyIiknKTsKK3Nob3VsZEJlVHJ1ZSgnImFyZ3VtZW50cyIgaW4g
ZnVuY3Rpb24oKXsidXNlIHN0cmljdCJ9Jyk7CitzaG91bGRCZVRydWUoJyhmdW5jdGlvbigpeyJ1
c2Ugc3RyaWN0Ijt9KS5oYXNPd25Qcm9wZXJ0eSgiYXJndW1lbnRzIiknKTsKIHNob3VsZEJlU3lu
dGF4RXJyb3IoIid1c2Ugc3RyaWN0JzsgKGZ1bmN0aW9uICgpe3dpdGgoMSl7fTt9KSIpOwogc2hv
dWxkQmVTeW50YXhFcnJvcigiJ3VzZSBzdHJpY3QnOyAoZnVuY3Rpb24gKCl7dmFyIGE7IGRlbGV0
ZSBhO30pIik7CiBzaG91bGRCZVN5bnRheEVycm9yKCIndXNlIHN0cmljdCc7IHZhciBhOyAoZnVu
Y3Rpb24gKCl7IGRlbGV0ZSBhO30pIik7Cg==
</data>
<flag name="review"
          id="109181"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>111677</attachid>
            <date>2011-10-19 14:39:06 -0700</date>
            <delta_ts>2011-10-19 17:04:32 -0700</delta_ts>
            <desc>experimenting with an alternative way to fix the problem.</desc>
            <filename>63398.alt.patch</filename>
            <type>application/octet-stream</type>
            <size>17095</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmln
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9ucy9CYXNl
LnhjY29uZmlnCShyZXZpc2lvbiA5Nzg2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25m
aWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBA
CiAjaW5jbHVkZSAiQ29tcGlsZXJWZXJzaW9uLnhjY29uZmlnIgogCiBDT01QSUxFUl9TUEVDSUZJ
Q19XQVJOSU5HX0NGTEFHUyA9ICQoQ09NUElMRVJfU1BFQ0lGSUNfV0FSTklOR19DRkxBR1NfJChU
QVJHRVRfR0NDX1ZFUlNJT04pKTsKLUNPTVBJTEVSX1NQRUNJRklDX1dBUk5JTkdfQ0ZMQUdTX0xM
Vk1fQ09NUElMRVIgPSAtV2dsb2JhbC1jb25zdHJ1Y3RvcnMgLVdleGl0LXRpbWUtZGVzdHJ1Y3Rv
cnM7CitDT01QSUxFUl9TUEVDSUZJQ19XQVJOSU5HX0NGTEFHU19MTFZNX0NPTVBJTEVSID0gLVdn
bG9iYWwtY29uc3RydWN0b3JzOwogCiBERUJVR19JTkZPUk1BVElPTl9GT1JNQVQgPSBkd2FyZjsK
IEdDQ19DX0xBTkdVQUdFX1NUQU5EQVJEID0gZ251OTk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDk3ODY2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTAzLDMzICsxMDMsMTEgQEAgYm9vbCBKU0JvdW5kRnVuY3Rpb246
OmdldE93blByb3BlcnR5U2xvdAogCiBib29sIEpTQm91bmRGdW5jdGlvbjo6Z2V0T3duUHJvcGVy
dHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBpZiAocHJvcGVydHlOYW1l
ID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpIHsKLSAgICAgICAgdGhyb3dUeXBl
RXJyb3IoZXhlYywgU3RyaWN0TW9kZUFyZ3VtZW50c0FjY2Vzc0Vycm9yKTsKLSAgICAgICAgc2xv
dC5zZXRWYWx1ZShqc051bGwoKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGxlcikgewotICAg
ICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlQ2FsbGVyQWNjZXNzRXJyb3IpOwot
ICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVsbCgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCiAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdChjZWxsLCBleGVjLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCiBib29sIEpTQm91bmRGdW5jdGlvbjo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCiB7Ci0gICAgaWYgKHByb3Bl
cnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzKSB7Ci0gICAgICAgIGNy
ZWF0ZURlc2NyaXB0b3JGb3JUaHJvd2luZ1Byb3BlcnR5KGV4ZWMsIGRlc2NyaXB0b3IsIFN0cmlj
dE1vZGVBcmd1bWVudHNBY2Nlc3NFcnJvcik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICAKLSAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxs
ZXIpIHsKLSAgICAgICAgY3JlYXRlRGVzY3JpcHRvckZvclRocm93aW5nUHJvcGVydHkoZXhlYywg
ZGVzY3JpcHRvciwgU3RyaWN0TW9kZUNhbGxlckFjY2Vzc0Vycm9yKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIAogICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKIH0KIApAQCAtMTQ1LDYgKzEy
Myw5IEBAIHZvaWQgSlNCb3VuZEZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihFeGUKIHsKICAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLCBleGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUpOwogICAg
IEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CisKKyAgICBpbml0aWFsaXplR2V0dGVyU2V0dGVy
UHJvcGVydHkoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cywgZ2xvYmFsT2Jq
ZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9u
dEVudW0gfCBHZXR0ZXIgfCBTZXR0ZXIpOworICAgIGluaXRpYWxpemVHZXR0ZXJTZXR0ZXJQcm9w
ZXJ0eShleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVyLCBnbG9iYWxPYmplY3QoKS0+
dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUgfCBEb250RW51bSB8
IEdldHRlciB8IFNldHRlcik7CiB9CiAKIHZvaWQgSlNCb3VuZEZ1bmN0aW9uOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gOTc4NjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTcsNyArOTcsOCBAQCB2b2lkIEpTRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKEV4
ZWNTdGF0CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKICAg
ICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogICAgIG1fZXhlY3V0YWJsZS5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBleGVjdXRhYmxlKTsKLSAgICBwdXREaXJlY3QoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBleGVjLT5nbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+bmFtZSwganNTdHJp
bmcoZXhlYywgbmFtZS5pc051bGwoKSA/ICIiIDogbmFtZS51c3RyaW5nKCkpLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkgfCBEb250RW51bSk7CisgICAgaWYgKCFuYW1lLmlzTnVsbCgpKQorICAgICAg
ICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5nbG9iYWxEYXRhKCkucHJvcGVy
dHlOYW1lcy0+bmFtZSwganNTdHJpbmcoZXhlYywgbmFtZS51c3RyaW5nKCkpLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkgfCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIobGVuZ3RoKSwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwogfQogCkBAIC0xMTcsOSArMTE4LDYgQEAgSlNG
dW5jdGlvbjo6fkpTRnVuY3Rpb24oKQogICAgIEFTU0VSVCh2cHRyKCkgPT0gSlNHbG9iYWxEYXRh
Ojpqc0Z1bmN0aW9uVlB0cik7CiB9CiAKLWNvbnN0IGNoYXIqIFN0cmljdE1vZGVDYWxsZXJBY2Nl
c3NFcnJvciA9ICJDYW5ub3QgYWNjZXNzIGNhbGxlciBwcm9wZXJ0eSBvZiBhIHN0cmljdCBtb2Rl
IGZ1bmN0aW9uIjsKLWNvbnN0IGNoYXIqIFN0cmljdE1vZGVBcmd1bWVudHNBY2Nlc3NFcnJvciA9
ICJDYW5ub3QgYWNjZXNzIGFyZ3VtZW50cyBwcm9wZXJ0eSBvZiBhIHN0cmljdCBtb2RlIGZ1bmN0
aW9uIjsKLQogdm9pZCBjcmVhdGVEZXNjcmlwdG9yRm9yVGhyb3dpbmdQcm9wZXJ0eShFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgY29uc3QgY2hhciogbWVz
c2FnZSkKIHsKICAgICBKU1ZhbHVlIHRocm93ZXIgPSBjcmVhdGVUeXBlRXJyb3JGdW5jdGlvbihl
eGVjLCBtZXNzYWdlKTsKQEAgLTIyNCwxMSArMjIyLDE0IEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0
T3duUHJvcGVydHlTbG90KEpTQ2UKIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJv
cGVydHlOYW1lcygpLmFyZ3VtZW50cykgewogICAgICAgICBpZiAodGhpc09iamVjdC0+anNFeGVj
dXRhYmxlKCktPmlzU3RyaWN0TW9kZSgpKSB7Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihl
eGVjLCBTdHJpY3RNb2RlQXJndW1lbnRzQWNjZXNzRXJyb3IpOwotICAgICAgICAgICAgc2xvdC5z
ZXRWYWx1ZShqc051bGwoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IGJvb2wgcmVzdWx0ID0gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAg
ICAgICAgICAgIHRoaXNPYmplY3QtPmluaXRpYWxpemVHZXR0ZXJTZXR0ZXJQcm9wZXJ0eShleGVj
LCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJv
ckdldHRlclNldHRlcihleGVjKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgR2V0dGVyIHwgU2V0
dGVyKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICAgICAgICAgICAgICBB
U1NFUlQocmVzdWx0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgICAgIH0KLSAgIAogICAgICAgICBzbG90LnNldENhY2hlYWJsZUN1c3RvbSh0aGlzT2Jq
ZWN0LCBhcmd1bWVudHNHZXR0ZXIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0y
NDAsOSArMjQxLDEzIEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2UK
IAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGxlcikg
ewogICAgICAgICBpZiAodGhpc09iamVjdC0+anNFeGVjdXRhYmxlKCktPmlzU3RyaWN0TW9kZSgp
KSB7Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlQ2FsbGVyQWNj
ZXNzRXJyb3IpOwotICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bGwoKSk7Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gQmFzZTo6Z2V0T3du
UHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAg
ICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPmluaXRp
YWxpemVHZXR0ZXJTZXR0ZXJQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3Qt
Pmdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVjKSwgRG9udERl
bGV0ZSB8IERvbnRFbnVtIHwgR2V0dGVyIHwgU2V0dGVyKTsKKyAgICAgICAgICAgICAgICByZXN1
bHQgPSBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lLCBzbG90KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAgc2xvdC5z
ZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgY2FsbGVyR2V0dGVyKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC0yNjMsMTAgKzI2OCwxNiBAQCBib29sIEpTRnVuY3Rpb246OmdldE93blBy
b3BlcnR5RGVzY3JpcHRvCiAgICAgfQogICAgIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykgewotICAgICAgICBpZiAoanNFeGVjdXRhYmxl
KCktPmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAgY3JlYXRlRGVzY3JpcHRvckZvclRocm93
aW5nUHJvcGVydHkoZXhlYywgZGVzY3JpcHRvciwgU3RyaWN0TW9kZUFyZ3VtZW50c0FjY2Vzc0Vy
cm9yKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9y
KGV4ZWMtPmludGVycHJldGVyKCktPnJldHJpZXZlQXJndW1lbnRzKGV4ZWMsIHRoaXMpLCBSZWFk
T25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CisgICAgICAgIGlmIChqc0V4ZWN1dGFibGUo
KS0+aXNTdHJpY3RNb2RlKCkpIHsKKyAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gQmFzZTo6Z2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cisg
ICAgICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAgICAgICAgIGluaXRpYWxpemVHZXR0
ZXJTZXR0ZXJQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUsIGdsb2JhbE9iamVjdCgpLT50aHJv
d1R5cGVFcnJvckdldHRlclNldHRlcihleGVjKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgR2V0
dGVyIHwgU2V0dGVyKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBCYXNlOjpnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQocmVzdWx0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGV4
ZWMtPmludGVycHJldGVyKCktPnJldHJpZXZlQXJndW1lbnRzKGV4ZWMsIHRoaXMpLCBSZWFkT25s
eSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICAKQEAgLTI3NiwxMCArMjg3LDE2IEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVy
dHlEZXNjcmlwdG8KICAgICB9CiAgICAgCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuY2FsbGVyKSB7Ci0gICAgICAgIGlmIChqc0V4ZWN1dGFibGUoKS0+aXNT
dHJpY3RNb2RlKCkpCi0gICAgICAgICAgICBjcmVhdGVEZXNjcmlwdG9yRm9yVGhyb3dpbmdQcm9w
ZXJ0eShleGVjLCBkZXNjcmlwdG9yLCBTdHJpY3RNb2RlQ2FsbGVyQWNjZXNzRXJyb3IpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoZXhlYy0+aW50
ZXJwcmV0ZXIoKS0+cmV0cmlldmVDYWxsZXIoZXhlYywgdGhpcyksIFJlYWRPbmx5IHwgRG9udEVu
dW0gfCBEb250RGVsZXRlKTsKKyAgICAgICAgaWYgKGpzRXhlY3V0YWJsZSgpLT5pc1N0cmljdE1v
ZGUoKSkgeworICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBCYXNlOjpnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIGlm
ICghcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZUdldHRlclNldHRlclByb3Bl
cnR5KGV4ZWMsIHByb3BlcnR5TmFtZSwgZ2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0
dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBHZXR0ZXIgfCBTZXR0ZXIp
OworICAgICAgICAgICAgICAgIHJlc3VsdCA9IEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworICAgICAgICAgICAgICAgIEFTU0VS
VChyZXN1bHQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgfQorICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoZXhlYy0+aW50ZXJwcmV0
ZXIoKS0+cmV0cmlldmVDYWxsZXIoZXhlYywgdGhpcyksIFJlYWRPbmx5IHwgRG9udEVudW0gfCBE
b250RGVsZXRlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIApAQCAtMzE4LDE1
ICszMzUsMTIgQEAgdm9pZCBKU0Z1bmN0aW9uOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjUwogICAg
ICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICAgICAgdGhpc09iamVjdC0+Z2V0T3duUHJvcGVy
dHlTbG90VmlydHVhbChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgIH0KLSAgICBpZiAo
dGhpc09iamVjdC0+anNFeGVjdXRhYmxlKCktPmlzU3RyaWN0TW9kZSgpKSB7Ci0gICAgICAgIGlm
IChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykgewotICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZUFyZ3VtZW50c0FjY2Vzc0Vy
cm9yKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAocHJvcGVy
dHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZXIpIHsKLSAgICAgICAgICAgIHRo
cm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVDYWxsZXJBY2Nlc3NFcnJvcik7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBpZiAodGhpc09iamVjdC0+anNFeGVjdXRhYmxl
KCktPmlzU3RyaWN0TW9kZSgpICYmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1l
cygpLmFyZ3VtZW50cyB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmNh
bGxlcikpIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIHRyaWdnZXIgdGhlIHByb3BlcnR5IHRvIGJl
IHJlaWZpZWQsIGlmIHRoaXMgaXMgbm90IGFscmVhZHkgdGhlIGNhc2UhCisgICAgICAgIGJvb2wg
b2theSA9IHRoaXNPYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAg
ICAgIEFTU0VSVF9VTlVTRUQob2theSwgb2theSk7CisgICAgICAgIEJhc2U6OnB1dCh0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcmd1
bWVudHMgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpCiAg
ICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVu
Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1
bmN0aW9uLmgJKHJldmlzaW9uIDk3ODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw5ICs0MSw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSG9zdEZ1bmN0
aW9uQXNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqKTsKIAotICAgIGV4dGVybiBjb25zdCBjaGFyKiBT
dHJpY3RNb2RlQ2FsbGVyQWNjZXNzRXJyb3I7Ci0gICAgZXh0ZXJuIGNvbnN0IGNoYXIqIFN0cmlj
dE1vZGVBcmd1bWVudHNBY2Nlc3NFcnJvcjsKLQogICAgIHZvaWQgY3JlYXRlRGVzY3JpcHRvckZv
clRocm93aW5nUHJvcGVydHkoRXhlY1N0YXRlKiwgUHJvcGVydHlEZXNjcmlwdG9yJiwgY29uc3Qg
Y2hhciogbWVzc2FnZSk7CiAKICAgICBjbGFzcyBKU0Z1bmN0aW9uIDogcHVibGljIEpTTm9uRmlu
YWxPYmplY3QgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gOTc4NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNSw2ICsz
MDUsMTUgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogICAgIHJl
c2V0UHJvdG90eXBlKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvdG90eXBlKTsKIH0KIAordm9pZCBK
U0dsb2JhbE9iamVjdDo6Y3JlYXRlVGhyb3dUeXBlRXJyb3IoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIEpTRnVuY3Rpb24qIHRocm93ZXIgPSBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgdGhpcywg
MCwgSWRlbnRpZmllcigpLCBnbG9iYWxGdW5jVGhyb3dUeXBlRXJyb3IpOworICAgIEdldHRlclNl
dHRlciogZ2V0dGVyU2V0dGVyID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhlYyk7CisgICAgZ2V0
dGVyU2V0dGVyLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aHJvd2VyKTsKKyAgICBn
ZXR0ZXJTZXR0ZXItPnNldFNldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIHRocm93ZXIpOworICAg
IG1fdGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgZ2V0dGVyU2V0dGVyKTsKK30KKwogLy8gU2V0IHByb3RvdHlwZSwgYW5kIGFsc28gaW5zZXJ0
IHRoZSBvYmplY3QgcHJvdG90eXBlIGF0IHRoZSBlbmQgb2YgdGhlIGNoYWluLgogdm9pZCBKU0ds
b2JhbE9iamVjdDo6cmVzZXRQcm90b3R5cGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1Zh
bHVlIHByb3RvdHlwZSkKIHsKQEAgLTMzOSw2ICszNDgsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAgdmlzaXRJZk5lZWRlZCh2aXNpdG9yLCAmdGhpc09i
amVjdC0+bV9ldmFsRnVuY3Rpb24pOwogICAgIHZpc2l0SWZOZWVkZWQodmlzaXRvciwgJnRoaXNP
YmplY3QtPm1fY2FsbEZ1bmN0aW9uKTsKICAgICB2aXNpdElmTmVlZGVkKHZpc2l0b3IsICZ0aGlz
T2JqZWN0LT5tX2FwcGx5RnVuY3Rpb24pOworICAgIHZpc2l0SWZOZWVkZWQodmlzaXRvciwgJnRo
aXNPYmplY3QtPm1fdGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIpOwogCiAgICAgdmlzaXRJZk5l
ZWRlZCh2aXNpdG9yLCAmdGhpc09iamVjdC0+bV9vYmplY3RQcm90b3R5cGUpOwogICAgIHZpc2l0
SWZOZWVkZWQodmlzaXRvciwgJnRoaXNPYmplY3QtPm1fZnVuY3Rpb25Qcm90b3R5cGUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShy
ZXZpc2lvbiA5Nzg2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpZm5kZWYgSlNHbG9i
YWxPYmplY3RfaAogI2RlZmluZSBKU0dsb2JhbE9iamVjdF9oCiAKKyNpbmNsdWRlICJHZXR0ZXJT
ZXR0ZXIuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgi
CiAjaW5jbHVkZSAiSlNHbG9iYWxUaGlzLmgiCkBAIC05MCw2ICs5MSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4gbV9ldmFsRnVuY3Rpb247CiAg
ICAgICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiBtX2NhbGxGdW5jdGlvbjsKICAgICAgICAg
V3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IG1fYXBwbHlGdW5jdGlvbjsKKyAgICAgICAgV3JpdGVC
YXJyaWVyPEdldHRlclNldHRlcj4gbV90aHJvd1R5cGVFcnJvckdldHRlclNldHRlcjsKIAogICAg
ICAgICBXcml0ZUJhcnJpZXI8T2JqZWN0UHJvdG90eXBlPiBtX29iamVjdFByb3RvdHlwZTsKICAg
ICAgICAgV3JpdGVCYXJyaWVyPEZ1bmN0aW9uUHJvdG90eXBlPiBtX2Z1bmN0aW9uUHJvdG90eXBl
OwpAQCAtMjEyLDYgKzIxNCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNGdW5jdGlv
biogZXZhbEZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9ldmFsRnVuY3Rpb24uZ2V0KCk7IH0K
ICAgICAgICAgSlNGdW5jdGlvbiogY2FsbEZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jYWxs
RnVuY3Rpb24uZ2V0KCk7IH0KICAgICAgICAgSlNGdW5jdGlvbiogYXBwbHlGdW5jdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fYXBwbHlGdW5jdGlvbi5nZXQoKTsgfQorICAgICAgICBHZXR0ZXJTZXR0
ZXIqIHRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKCFtX3Rocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKQorICAgICAg
ICAgICAgICAgIGNyZWF0ZVRocm93VHlwZUVycm9yKGV4ZWMpOworICAgICAgICAgICAgcmV0dXJu
IG1fdGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIuZ2V0KCk7CisgICAgICAgIH0KIAogICAgICAg
ICBPYmplY3RQcm90b3R5cGUqIG9iamVjdFByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2Jq
ZWN0UHJvdG90eXBlLmdldCgpOyB9CiAgICAgICAgIEZ1bmN0aW9uUHJvdG90eXBlKiBmdW5jdGlv
blByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCk7IH0K
QEAgLTMyMSw2ICszMjksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBpbml0KEpT
T2JqZWN0KiB0aGlzVmFsdWUpOwogICAgICAgICB2b2lkIHJlc2V0KEpTVmFsdWUgcHJvdG90eXBl
KTsKIAorICAgICAgICB2b2lkIGNyZWF0ZVRocm93VHlwZUVycm9yKEV4ZWNTdGF0ZSopOworCiAg
ICAgICAgIHZvaWQgc2V0UmVnaXN0ZXJzKFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJz
LCBQYXNzT3duQXJyYXlQdHI8V3JpdGVCYXJyaWVyPFVua25vd24+ID4gcmVnaXN0ZXJBcnJheSwg
c2l6ZV90IGNvdW50KTsKICAgICAgICAgc3RhdGljIHZvaWQgY2xlYXJSYXJlRGF0YShKU0NlbGwq
KTsKICAgICB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3RGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gOTc4NjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU5NCw0ICs1OTQsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGdsb2JhbEZ1bmNVCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhl
eGVjLCBidWlsZGVyLnRvVVN0cmluZygpKSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZ2xvYmFsRnVuY1Rocm93VHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0RnVuY3Rpb25zLmgJKHJldmlzaW9uIDk3ODY2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAt
NDcsNiArNDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGdsb2JhbEZ1bmNFbmNvZGVVUklDb21wb25lbnQoRXhlY1N0YXRlKik7CiAgICAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRXNjYXBlKEV4ZWNTdGF0ZSopOwog
ICAgIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1VuZXNjYXBlKEV4ZWNT
dGF0ZSopOworICAgIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1Rocm93
VHlwZUVycm9yKEV4ZWNTdGF0ZSopOwogCiAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBtYW50aXNz
YU92ZXJmbG93TG93ZXJCb3VuZCA9IDkwMDcxOTkyNTQ3NDA5OTIuMDsKICAgICBkb3VibGUgcGFy
c2VJbnRPdmVyZmxvdyhjb25zdCBjaGFyKiwgaW50IGxlbmd0aCwgaW50IHJhZGl4KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDk3
ODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOTYsNiArMzk2LDI4IEBAIHZvaWQgSlNPYmplY3Q6OmRlZmluZUdldHRl
cihFeGVjU3RhdGUqIGUKICAgICBnZXR0ZXJTZXR0ZXItPnNldEdldHRlcihnbG9iYWxEYXRhLCBn
ZXR0ZXJGdW5jdGlvbik7CiB9CiAKK3ZvaWQgSlNPYmplY3Q6OmluaXRpYWxpemVHZXR0ZXJTZXR0
ZXJQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCit7Cisg
ICAgLy8gU2V0IGFuIGluaXRhbCBwcm9wZXJ0eSBvbiBhbiBvYmplY3Q7IHRoZSBwcm9wZXJ0eSBt
dXN0IG5vdCBhbHJlYWR5IGV4aXN0ICYgdGhlIGF0dHJpYnV0ZSBmbGFncyBtdXN0IGJlIHNldCBj
b3JyZWN0bHkuCisgICAgQVNTRVJUKGhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpOwor
ICAgIEFTU0VSVChzdGF0aWNfY2FzdDxib29sPihnZXR0ZXJTZXR0ZXItPmdldHRlcigpKSA9PSBz
dGF0aWNfY2FzdDxib29sPihhdHRyaWJ1dGVzICYgR2V0dGVyKSk7CisgICAgQVNTRVJUKHN0YXRp
Y19jYXN0PGJvb2w+KGdldHRlclNldHRlci0+c2V0dGVyKCkpID09IHN0YXRpY19jYXN0PGJvb2w+
KGF0dHJpYnV0ZXMgJiBTZXR0ZXIpKTsKKworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9
IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKKyAgICBwdXRE
aXJlY3RJbnRlcm5hbChnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUsIGdldHRlclNldHRlciwgYXR0
cmlidXRlcyB8IEdldHRlciwgdHJ1ZSwgc2xvdCwgMCk7CisKKyAgICAvLyBwdXREaXJlY3Qgd2ls
bCBjaGFuZ2Ugb3VyIFN0cnVjdHVyZSBpZiB3ZSBhZGQgYSBuZXcgcHJvcGVydHkuIEZvcgorICAg
IC8vIGdldHRlcnMgYW5kIHNldHRlcnMsIHRob3VnaCwgd2UgYWxzbyBuZWVkIHRvIGNoYW5nZSBv
dXIgU3RydWN0dXJlCisgICAgLy8gaWYgd2Ugb3ZlcnJpZGUgYW4gZXhpc3Rpbmcgbm9uLWdldHRl
ciBvciBub24tc2V0dGVyLgorICAgIGlmIChzbG90LnR5cGUoKSAhPSBQdXRQcm9wZXJ0eVNsb3Q6
Ok5ld1Byb3BlcnR5KSB7CisgICAgICAgIGlmICghc3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgp
KQorICAgICAgICAgICAgc2V0U3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgU3RydWN0dXJl
OjpnZXR0ZXJTZXR0ZXJUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpKSk7CisgICAg
fQorCisgICAgc3RydWN0dXJlKCktPnNldEhhc0dldHRlclNldHRlclByb3BlcnRpZXModHJ1ZSk7
Cit9CisKIHZvaWQgSlNPYmplY3Q6OmRlZmluZVNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNldHRlckZ1bmN0aW9uLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzKQogewogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVy
dHlOYW1lcygpLnVuZGVyc2NvcmVQcm90bykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiA5Nzg2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNDZWxsKCk7CiAgICAg
ICAgIHJldHVybiAwOwogICAgIH0KLSAgICAKKworICAgIGNsYXNzIEdldHRlclNldHRlcjsKICAg
ICBjbGFzcyBIYXNoRW50cnk7CiAgICAgY2xhc3MgSW50ZXJuYWxGdW5jdGlvbjsKICAgICBjbGFz
cyBNYXJrZWRCbG9jazsKQEAgLTE5MCw2ICsxOTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBwdXRVbmRlZmluZWRBdERpcmVjdE9mZnNldChzaXplX3Qgb2Zmc2V0KSB7IHByb3Bl
cnR5U3RvcmFnZSgpW29mZnNldF0uc2V0VW5kZWZpbmVkKCk7IH0KIAogICAgICAgICB2b2lkIGZp
bGxHZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiwgV3JpdGVCYXJyaWVyQmFzZTxVbmtu
b3duPiogbG9jYXRpb24pOworICAgICAgICB2b2lkIGluaXRpYWxpemVHZXR0ZXJTZXR0ZXJQcm9w
ZXJ0eShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgR2V0dGVyU2V0dGVyKiwgdW5zaWdu
ZWQgYXR0cmlidXRlcyk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGRlZmluZUdldHRlcihFeGVj
U3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBnZXR0ZXJG
dW5jdGlvbiwgdW5zaWduZWQgYXR0cmlidXRlcyA9IDApOwogICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGVmaW5lU2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
SlNPYmplY3QqIHNldHRlckZ1bmN0aW9uLCB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gMCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111698</attachid>
            <date>2011-10-19 17:04:32 -0700</date>
            <delta_ts>2011-10-19 17:07:19 -0700</delta_ts>
            <desc>Fix</desc>
            <filename>63398.es5.patch</filename>
            <type>text/plain</type>
            <size>25547</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTc4OTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAK
KzIwMTEtMTAtMTkgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgor
CisgICAgICAgIFBvaXNvbmluZyBvZiBzdHJpY3QgY2FsbGVyLGFyZ3VtZW50cyBpbmFwcHJvcHJp
YXRlbHkgcG9pc29uaW5nICJpbiIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTYzMzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBmaXhlcyB0aGUgcHJvYmxlbSBieSBjb3JyZWN0bHkgaW1wbGVtZW50
aW5nIHRoZSBzcGVjIC0KKyAgICAgICAgdGhlIGVycm9yIHNob3VsZCBhY3R1YWxseSBiZSBiZWlu
ZyB0aHJvd24gZnJvbSBhIHN0YW5kYXJkIEpTIGdldHRlci9zZXR0ZXIuCisgICAgICAgIFRoaXMg
aW1wbGVtZW50cyBzcGVjIGNvcnJlY3QgYmVoYXZpb3VyIGZvciBzdHJpY3QgbW9kZSBKUyBmdW5j
dGlvbnMgJiBib3VuZAorICAgICAgICBmdW5jdGlvbnMsIEknbGwgZm9sbG93IHVwIHdpdGggYSBw
YXRjaCB0byBkbyB0aGUgc2FtZSBmb3IgYXJndW1lbnRzLgorCisgICAgICAgICogcnVudGltZS9K
U0JvdW5kRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0JvdW5kRnVuY3Rpb246OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgICAgIC0gQWRkIHRoZSBwb2lzb25lZCBjYWxsZXIvYXJndW1l
bnRzIHByb3BlcnRpZXMuCisgICAgICAgICogcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9u
OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmdldE93blByb3Bl
cnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcik6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OnB1dCk6CisgICAgICAgICAgICAtIElm
IHRoZSBjYWxsZXIvYXJndW1lbnRzIGFyZSBhY2Nlc3NlZCBvbiBhIHN0cmljdCBtb2RlIGZ1bmN0
aW9uLCBsYXppbHkgYWRkIHRoZSBUaHJvd1R5cGVFcnJvciBnZXR0ZXIuCisgICAgICAgICogcnVu
dGltZS9KU0Z1bmN0aW9uLmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6
CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpjcmVhdGVUaHJvd1R5cGVFcnJvcik6Cisg
ICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBy
dW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojp0
aHJvd1R5cGVFcnJvckdldHRlclNldHRlcik6CisgICAgICAgICAgICAtIEFkZCBhIFRocm93VHlw
ZUVycm9yIHR5cGUsIHBlciBFUzUgMTMuMi4zLgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxP
YmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jVGhyb3dUeXBlRXJy
b3IpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaDoKKyAgICAg
ICAgICAgIC0gSW1wbGVtZW50YXRpb24gb2YgVGhyb3dUeXBlRXJyb3IuCisgICAgICAgICogcnVu
dGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojppbml0aWFsaXplR2V0
dGVyU2V0dGVyUHJvcGVydHkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAg
ICAgICAgIC0gVGhpcyBmdW5jdGlvbiBhZGRzIGEgbmV3IHByb3BlcnR5IChtdXN0IG5vdCBleGlz
dCBhbHJlYWR5KSB0aGF0IGlzIGFuIGluaXRpYWxpemVkIGdldHRlci9zZXR0ZXIuCisKIDIwMTEt
MTAtMTkgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAgICAg
ICBBZGQgZ2V0Q29uc3RydWN0RGF0YSB0byB0aGUgTWV0aG9kVGFibGUKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAkocmV2aXNp
b24gOTc3OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Niw0MyArOTYsNiBAQCBib29sIEpTQm91bmRGdW5j
dGlvbjo6aGFzSW5zdGFuY2UoRXhlY1N0CiAgICAgcmV0dXJuIG1fdGFyZ2V0RnVuY3Rpb24tPmhh
c0luc3RhbmNlKGV4ZWMsIHZhbHVlLCBwcm90byk7CiB9CiAKLWJvb2wgSlNCb3VuZEZ1bmN0aW9u
OjpnZXRPd25Qcm9wZXJ0eVNsb3RWaXJ0dWFsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgcmV0dXJuIGdl
dE93blByb3BlcnR5U2xvdCh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotfQotCi1i
b29sIEpTQm91bmRGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYgc2xvdCkKLXsKLSAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5hcmd1bWVudHMpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZUFy
Z3VtZW50c0FjY2Vzc0Vycm9yKTsKLSAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bGwoKSk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmNhbGxlcikgewotICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVj
LCBTdHJpY3RNb2RlQ2FsbGVyQWNjZXNzRXJyb3IpOwotICAgICAgICBzbG90LnNldFZhbHVlKGpz
TnVsbCgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIEJhc2U6
OmdldE93blByb3BlcnR5U2xvdChjZWxsLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotfQot
Ci1ib29sIEpTQm91bmRGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuYXJndW1lbnRzKSB7Ci0gICAgICAgIGNyZWF0ZURlc2NyaXB0b3JGb3JUaHJvd2lu
Z1Byb3BlcnR5KGV4ZWMsIGRlc2NyaXB0b3IsIFN0cmljdE1vZGVBcmd1bWVudHNBY2Nlc3NFcnJv
cik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAocHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZXIpIHsKLSAgICAgICAgY3JlYXRlRGVz
Y3JpcHRvckZvclRocm93aW5nUHJvcGVydHkoZXhlYywgZGVzY3JpcHRvciwgU3RyaWN0TW9kZUNh
bGxlckFjY2Vzc0Vycm9yKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAg
IHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1l
LCBkZXNjcmlwdG9yKTsKLX0KLQogSlNCb3VuZEZ1bmN0aW9uOjpKU0JvdW5kRnVuY3Rpb24oRXhl
Y1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNPYmplY3QqIHRhcmdldEZ1bmN0aW9uLCBKU1ZhbHVlIGJvdW5kVGhpcywgSlNW
YWx1ZSBib3VuZEFyZ3MpCiAgICAgOiBCYXNlKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
KQogICAgICwgbV90YXJnZXRGdW5jdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHRhcmdl
dEZ1bmN0aW9uKQpAQCAtMTQ1LDYgKzEwOCw5IEBAIHZvaWQgSlNCb3VuZEZ1bmN0aW9uOjpmaW5p
c2hDcmVhdGlvbihFeGUKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLCBleGVjdXRh
YmxlLCBsZW5ndGgsIG5hbWUpOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CisKKyAg
ICBpbml0aWFsaXplR2V0dGVyU2V0dGVyUHJvcGVydHkoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1l
cygpLmFyZ3VtZW50cywgZ2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVy
KGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBHZXR0ZXIgfCBTZXR0ZXIpOworICAgIGlu
aXRpYWxpemVHZXR0ZXJTZXR0ZXJQcm9wZXJ0eShleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
Y2FsbGVyLCBnbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyks
IERvbnREZWxldGUgfCBEb250RW51bSB8IEdldHRlciB8IFNldHRlcik7CiB9CiAKIHZvaWQgSlNC
b3VuZEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5k
RnVuY3Rpb24uaAkocmV2aXNpb24gOTc3OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0JvdW5kRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTAgKzM5LDYgQEAg
cHVibGljOgogCiAgICAgc3RhdGljIEpTQm91bmRGdW5jdGlvbiogY3JlYXRlKEV4ZWNTdGF0ZSos
IEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIHRhcmdldEZ1bmN0aW9uLCBKU1ZhbHVlIGJvdW5k
VGhpcywgSlNWYWx1ZSBib3VuZEFyZ3MsIGludCwgY29uc3QgSWRlbnRpZmllciYpOwogCi0gICAg
dmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdFZpcnR1YWwoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlT
bG90Jik7Ci0gICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlEZXNjcmlwdG9yJik7Ci0KICAgICB2aXJ0
dWFsIGJvb2wgaGFzSW5zdGFuY2UoRXhlY1N0YXRlKiwgSlNWYWx1ZSB2YWx1ZSwgSlNWYWx1ZSBw
cm90byk7CiAKICAgICBKU09iamVjdCogdGFyZ2V0RnVuY3Rpb24oKSB7IHJldHVybiBtX3Rhcmdl
dEZ1bmN0aW9uLmdldCgpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gOTc3OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsOCBA
QCB2b2lkIEpTRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0CiAgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNf
aW5mbykpOwogICAgIG1fZXhlY3V0YWJsZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBl
eGVjdXRhYmxlKTsKLSAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5nbG9i
YWxEYXRhKCkucHJvcGVydHlOYW1lcy0+bmFtZSwganNTdHJpbmcoZXhlYywgbmFtZS5pc051bGwo
KSA/ICIiIDogbmFtZS51c3RyaW5nKCkpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51
bSk7CisgICAgaWYgKCFuYW1lLmlzTnVsbCgpKQorICAgICAgICBwdXREaXJlY3QoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBleGVjLT5nbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+bmFtZSwganNTdHJp
bmcoZXhlYywgbmFtZS51c3RyaW5nKCkpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51
bSk7CiAgICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLmxlbmd0aCwganNOdW1iZXIobGVuZ3RoKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9u
dEVudW0pOwogfQogCkBAIC0xMTcsOSArMTE4LDYgQEAgSlNGdW5jdGlvbjo6fkpTRnVuY3Rpb24o
KQogICAgIEFTU0VSVCh2cHRyKCkgPT0gSlNHbG9iYWxEYXRhOjpqc0Z1bmN0aW9uVlB0cik7CiB9
CiAKLWNvbnN0IGNoYXIqIFN0cmljdE1vZGVDYWxsZXJBY2Nlc3NFcnJvciA9ICJDYW5ub3QgYWNj
ZXNzIGNhbGxlciBwcm9wZXJ0eSBvZiBhIHN0cmljdCBtb2RlIGZ1bmN0aW9uIjsKLWNvbnN0IGNo
YXIqIFN0cmljdE1vZGVBcmd1bWVudHNBY2Nlc3NFcnJvciA9ICJDYW5ub3QgYWNjZXNzIGFyZ3Vt
ZW50cyBwcm9wZXJ0eSBvZiBhIHN0cmljdCBtb2RlIGZ1bmN0aW9uIjsKLQogdm9pZCBjcmVhdGVE
ZXNjcmlwdG9yRm9yVGhyb3dpbmdQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5RGVz
Y3JpcHRvciYgZGVzY3JpcHRvciwgY29uc3QgY2hhciogbWVzc2FnZSkKIHsKICAgICBKU1ZhbHVl
IHRocm93ZXIgPSBjcmVhdGVUeXBlRXJyb3JGdW5jdGlvbihleGVjLCBtZXNzYWdlKTsKQEAgLTIy
NCwxMSArMjIyLDE0IEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2UK
IAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50
cykgewogICAgICAgICBpZiAodGhpc09iamVjdC0+anNFeGVjdXRhYmxlKCktPmlzU3RyaWN0TW9k
ZSgpKSB7Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlQXJndW1l
bnRzQWNjZXNzRXJyb3IpOwotICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bGwoKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gQmFzZTo6
Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7
CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAgICAgICAgIHRoaXNPYmplY3Qt
PmluaXRpYWxpemVHZXR0ZXJTZXR0ZXJQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUsIHRoaXNP
YmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVjKSwg
RG9udERlbGV0ZSB8IERvbnRFbnVtIHwgR2V0dGVyIHwgU2V0dGVyKTsKKyAgICAgICAgICAgICAg
ICByZXN1bHQgPSBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lLCBzbG90KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KLSAgIAogICAg
ICAgICBzbG90LnNldENhY2hlYWJsZUN1c3RvbSh0aGlzT2JqZWN0LCBhcmd1bWVudHNHZXR0ZXIp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0yNDAsOSArMjQxLDEzIEBAIGJvb2wg
SlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2UKIAogICAgIGlmIChwcm9wZXJ0eU5h
bWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGxlcikgewogICAgICAgICBpZiAodGhpc09i
amVjdC0+anNFeGVjdXRhYmxlKCktPmlzU3RyaWN0TW9kZSgpKSB7Ci0gICAgICAgICAgICB0aHJv
d1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlQ2FsbGVyQWNjZXNzRXJyb3IpOwotICAgICAgICAg
ICAgc2xvdC5zZXRWYWx1ZShqc051bGwoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIGJvb2wgcmVzdWx0ID0gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkg
eworICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPmluaXRpYWxpemVHZXR0ZXJTZXR0ZXJQcm9w
ZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJv
d1R5cGVFcnJvckdldHRlclNldHRlcihleGVjKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgR2V0
dGVyIHwgU2V0dGVyKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBCYXNlOjpnZXRPd25Qcm9w
ZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQocmVzdWx0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhp
c09iamVjdCwgY2FsbGVyR2V0dGVyKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNjMsMTAg
KzI2OCwxNiBAQCBib29sIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5RGVzY3JpcHRvCiAgICAg
fQogICAgIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmFy
Z3VtZW50cykgewotICAgICAgICBpZiAoanNFeGVjdXRhYmxlKCktPmlzU3RyaWN0TW9kZSgpKQot
ICAgICAgICAgICAgY3JlYXRlRGVzY3JpcHRvckZvclRocm93aW5nUHJvcGVydHkoZXhlYywgZGVz
Y3JpcHRvciwgU3RyaWN0TW9kZUFyZ3VtZW50c0FjY2Vzc0Vycm9yKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGV4ZWMtPmludGVycHJldGVyKCkt
PnJldHJpZXZlQXJndW1lbnRzKGV4ZWMsIHRoaXMpLCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9u
dERlbGV0ZSk7CisgICAgICAgIGlmIChqc0V4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpIHsK
KyAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7CisgICAgICAgICAgICBpZiAoIXJlc3Vs
dCkgeworICAgICAgICAgICAgICAgIGluaXRpYWxpemVHZXR0ZXJTZXR0ZXJQcm9wZXJ0eShleGVj
LCBwcm9wZXJ0eU5hbWUsIGdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRl
cihleGVjKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgR2V0dGVyIHwgU2V0dGVyKTsKKyAgICAg
ICAgICAgICAgICByZXN1bHQgPSBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywg
cHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0K
KyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGV4ZWMtPmludGVycHJldGVyKCktPnJl
dHJpZXZlQXJndW1lbnRzKGV4ZWMsIHRoaXMpLCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERl
bGV0ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKQEAgLTI3NiwxMCArMjg3
LDE2IEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG8KICAgICB9CiAg
ICAgCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVy
KSB7Ci0gICAgICAgIGlmIChqc0V4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpCi0gICAgICAg
ICAgICBjcmVhdGVEZXNjcmlwdG9yRm9yVGhyb3dpbmdQcm9wZXJ0eShleGVjLCBkZXNjcmlwdG9y
LCBTdHJpY3RNb2RlQ2FsbGVyQWNjZXNzRXJyb3IpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoZXhlYy0+aW50ZXJwcmV0ZXIoKS0+cmV0cmlldmVD
YWxsZXIoZXhlYywgdGhpcyksIFJlYWRPbmx5IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKKyAg
ICAgICAgaWYgKGpzRXhlY3V0YWJsZSgpLT5pc1N0cmljdE1vZGUoKSkgeworICAgICAgICAgICAg
Ym9vbCByZXN1bHQgPSBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVy
dHlOYW1lLCBkZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KSB7CisgICAgICAg
ICAgICAgICAgaW5pdGlhbGl6ZUdldHRlclNldHRlclByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFt
ZSwgZ2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250
RGVsZXRlIHwgRG9udEVudW0gfCBHZXR0ZXIgfCBTZXR0ZXIpOworICAgICAgICAgICAgICAgIHJl
c3VsdCA9IEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUs
IGRlc2NyaXB0b3IpOworICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICBkZXNj
cmlwdG9yLnNldERlc2NyaXB0b3IoZXhlYy0+aW50ZXJwcmV0ZXIoKS0+cmV0cmlldmVDYWxsZXIo
ZXhlYywgdGhpcyksIFJlYWRPbmx5IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogICAgIApAQCAtMzE4LDE1ICszMzUsMTIgQEAgdm9pZCBKU0Z1
bmN0aW9uOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjUwogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xv
dDsKICAgICAgICAgdGhpc09iamVjdC0+Z2V0T3duUHJvcGVydHlTbG90VmlydHVhbChleGVjLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgIH0KLSAgICBpZiAodGhpc09iamVjdC0+anNFeGVjdXRh
YmxlKCktPmlzU3RyaWN0TW9kZSgpKSB7Ci0gICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykgewotICAgICAgICAgICAgdGhyb3dUeXBlRXJy
b3IoZXhlYywgU3RyaWN0TW9kZUFyZ3VtZW50c0FjY2Vzc0Vycm9yKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5jYWxsZXIpIHsKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0
cmljdE1vZGVDYWxsZXJBY2Nlc3NFcnJvcik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KKyAgICBpZiAodGhpc09iamVjdC0+anNFeGVjdXRhYmxlKCktPmlzU3RyaWN0TW9kZSgpICYm
IChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cyB8fCBwcm9w
ZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGxlcikpIHsKKyAgICAgICAgLy8g
VGhpcyB3aWxsIHRyaWdnZXIgdGhlIHByb3BlcnR5IHRvIGJlIHJlaWZpZWQsIGlmIHRoaXMgaXMg
bm90IGFscmVhZHkgdGhlIGNhc2UhCisgICAgICAgIGJvb2wgb2theSA9IHRoaXNPYmplY3QtPmhh
c1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQob2th
eSwgb2theSk7CisgICAgICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBzbG90KTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAocHJvcGVy
dHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMgfHwgcHJvcGVydHlOYW1l
ID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpCiAgICAgICAgIHJldHVybjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDk3
NzkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw5ICs0MSw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqKTsKIAotICAgIGV4dGVybiBjb25zdCBjaGFyKiBTdHJpY3RNb2RlQ2FsbGVyQWNjZXNz
RXJyb3I7Ci0gICAgZXh0ZXJuIGNvbnN0IGNoYXIqIFN0cmljdE1vZGVBcmd1bWVudHNBY2Nlc3NF
cnJvcjsKLQogICAgIHZvaWQgY3JlYXRlRGVzY3JpcHRvckZvclRocm93aW5nUHJvcGVydHkoRXhl
Y1N0YXRlKiwgUHJvcGVydHlEZXNjcmlwdG9yJiwgY29uc3QgY2hhciogbWVzc2FnZSk7CiAKICAg
ICBjbGFzcyBKU0Z1bmN0aW9uIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2
aXNpb24gOTc3OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJFcnJv
clByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uQ29uc3RydWN0b3IuaCIKICNpbmNsdWRl
ICJGdW5jdGlvblByb3RvdHlwZS5oIgorI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1
ZGUgIkpTQm91bmRGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRl
ICJKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oIgpAQCAtMzA1LDYgKzMwNiwxNSBAQCB2b2lkIEpT
R2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHByb3RvCiAgICAgcmVzZXRQcm90b3R5cGUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBwcm90b3R5cGUpOwogfQogCit2b2lkIEpTR2xvYmFsT2JqZWN0Ojpj
cmVhdGVUaHJvd1R5cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNGdW5jdGlvbiog
dGhyb3dlciA9IEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCB0aGlzLCAwLCBJZGVudGlmaWVyKCks
IGdsb2JhbEZ1bmNUaHJvd1R5cGVFcnJvcik7CisgICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0
ZXIgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsKKyAgICBnZXR0ZXJTZXR0ZXItPnNldEdl
dHRlcihleGVjLT5nbG9iYWxEYXRhKCksIHRocm93ZXIpOworICAgIGdldHRlclNldHRlci0+c2V0
U2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhyb3dlcik7CisgICAgbV90aHJvd1R5cGVFcnJv
ckdldHRlclNldHRlci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBnZXR0ZXJTZXR0ZXIp
OworfQorCiAvLyBTZXQgcHJvdG90eXBlLCBhbmQgYWxzbyBpbnNlcnQgdGhlIG9iamVjdCBwcm90
b3R5cGUgYXQgdGhlIGVuZCBvZiB0aGUgY2hhaW4uCiB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNl
dFByb3RvdHlwZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQog
ewpAQCAtMzM5LDYgKzM0OSw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4o
SlNDZWwKICAgICB2aXNpdElmTmVlZGVkKHZpc2l0b3IsICZ0aGlzT2JqZWN0LT5tX2V2YWxGdW5j
dGlvbik7CiAgICAgdmlzaXRJZk5lZWRlZCh2aXNpdG9yLCAmdGhpc09iamVjdC0+bV9jYWxsRnVu
Y3Rpb24pOwogICAgIHZpc2l0SWZOZWVkZWQodmlzaXRvciwgJnRoaXNPYmplY3QtPm1fYXBwbHlG
dW5jdGlvbik7CisgICAgdmlzaXRJZk5lZWRlZCh2aXNpdG9yLCAmdGhpc09iamVjdC0+bV90aHJv
d1R5cGVFcnJvckdldHRlclNldHRlcik7CiAKICAgICB2aXNpdElmTmVlZGVkKHZpc2l0b3IsICZ0
aGlzT2JqZWN0LT5tX29iamVjdFByb3RvdHlwZSk7CiAgICAgdmlzaXRJZk5lZWRlZCh2aXNpdG9y
LCAmdGhpc09iamVjdC0+bV9mdW5jdGlvblByb3RvdHlwZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDk3NzkxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBEZWJ1
Z2dlcjsKICAgICBjbGFzcyBFcnJvckNvbnN0cnVjdG9yOwogICAgIGNsYXNzIEZ1bmN0aW9uUHJv
dG90eXBlOworICAgIGNsYXNzIEdldHRlclNldHRlcjsKICAgICBjbGFzcyBHbG9iYWxDb2RlQmxv
Y2s7CiAgICAgY2xhc3MgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcjsKICAgICBjbGFzcyBQcm9ncmFt
Q29kZUJsb2NrOwpAQCAtOTAsNiArOTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgV3Jp
dGVCYXJyaWVyPEpTRnVuY3Rpb24+IG1fZXZhbEZ1bmN0aW9uOwogICAgICAgICBXcml0ZUJhcnJp
ZXI8SlNGdW5jdGlvbj4gbV9jYWxsRnVuY3Rpb247CiAgICAgICAgIFdyaXRlQmFycmllcjxKU0Z1
bmN0aW9uPiBtX2FwcGx5RnVuY3Rpb247CisgICAgICAgIFdyaXRlQmFycmllcjxHZXR0ZXJTZXR0
ZXI+IG1fdGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXI7CiAKICAgICAgICAgV3JpdGVCYXJyaWVy
PE9iamVjdFByb3RvdHlwZT4gbV9vYmplY3RQcm90b3R5cGU7CiAgICAgICAgIFdyaXRlQmFycmll
cjxGdW5jdGlvblByb3RvdHlwZT4gbV9mdW5jdGlvblByb3RvdHlwZTsKQEAgLTIxMiw2ICsyMTQs
MTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTRnVuY3Rpb24qIGV2YWxGdW5jdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fZXZhbEZ1bmN0aW9uLmdldCgpOyB9CiAgICAgICAgIEpTRnVuY3Rp
b24qIGNhbGxGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbEZ1bmN0aW9uLmdldCgpOyB9
CiAgICAgICAgIEpTRnVuY3Rpb24qIGFwcGx5RnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2Fw
cGx5RnVuY3Rpb24uZ2V0KCk7IH0KKyAgICAgICAgR2V0dGVyU2V0dGVyKiB0aHJvd1R5cGVFcnJv
ckdldHRlclNldHRlcihFeGVjU3RhdGUqIGV4ZWMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
ICghbV90aHJvd1R5cGVFcnJvckdldHRlclNldHRlcikKKyAgICAgICAgICAgICAgICBjcmVhdGVU
aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAgICAgICAgIHJldHVybiBtX3Rocm93VHlwZUVycm9y
R2V0dGVyU2V0dGVyLmdldCgpOworICAgICAgICB9CiAKICAgICAgICAgT2JqZWN0UHJvdG90eXBl
KiBvYmplY3RQcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBtX29iamVjdFByb3RvdHlwZS5nZXQo
KTsgfQogICAgICAgICBGdW5jdGlvblByb3RvdHlwZSogZnVuY3Rpb25Qcm90b3R5cGUoKSBjb25z
dCB7IHJldHVybiBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpOyB9CkBAIC0zMjEsNiArMzI5LDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgaW5pdChKU09iamVjdCogdGhpc1ZhbHVl
KTsKICAgICAgICAgdm9pZCByZXNldChKU1ZhbHVlIHByb3RvdHlwZSk7CiAKKyAgICAgICAgdm9p
ZCBjcmVhdGVUaHJvd1R5cGVFcnJvcihFeGVjU3RhdGUqKTsKKwogICAgICAgICB2b2lkIHNldFJl
Z2lzdGVycyhXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVycywgUGFzc093bkFycmF5UHRy
PFdyaXRlQmFycmllcjxVbmtub3duPiA+IHJlZ2lzdGVyQXJyYXksIHNpemVfdCBjb3VudCk7CiAg
ICAgICAgIHN0YXRpYyB2b2lkIGNsZWFyUmFyZURhdGEoSlNDZWxsKik7CiAgICAgfTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDk3NzkxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01OTQsNCArNTk0LDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5j
VQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgYnVpbGRlci50b1VT
dHJpbmcoKSkpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNU
aHJvd1R5cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZXhlYyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5o
CShyZXZpc2lvbiA5Nzc5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5j
RW5jb2RlVVJJQ29tcG9uZW50KEV4ZWNTdGF0ZSopOwogICAgIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZ2xvYmFsRnVuY0VzY2FwZShFeGVjU3RhdGUqKTsKICAgICBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNVbmVzY2FwZShFeGVjU3RhdGUqKTsKKyAgICBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNUaHJvd1R5cGVFcnJvcihFeGVjU3Rh
dGUqKTsKIAogICAgIHN0YXRpYyBjb25zdCBkb3VibGUgbWFudGlzc2FPdmVyZmxvd0xvd2VyQm91
bmQgPSA5MDA3MTk5MjU0NzQwOTkyLjA7CiAgICAgZG91YmxlIHBhcnNlSW50T3ZlcmZsb3coY29u
c3QgY2hhciosIGludCBsZW5ndGgsIGludCByYWRpeCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiA5Nzc5MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk2
LDYgKzM5NiwyOCBAQCB2b2lkIEpTT2JqZWN0OjpkZWZpbmVHZXR0ZXIoRXhlY1N0YXRlKiBlCiAg
ICAgZ2V0dGVyU2V0dGVyLT5zZXRHZXR0ZXIoZ2xvYmFsRGF0YSwgZ2V0dGVyRnVuY3Rpb24pOwog
fQogCit2b2lkIEpTT2JqZWN0Ojppbml0aWFsaXplR2V0dGVyU2V0dGVyUHJvcGVydHkoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEdldHRlclNldHRlciog
Z2V0dGVyU2V0dGVyLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQoreworICAgIC8vIFNldCBhbiBpbml0
YWwgcHJvcGVydHkgb24gYW4gb2JqZWN0OyB0aGUgcHJvcGVydHkgbXVzdCBub3QgYWxyZWFkeSBl
eGlzdCAmIHRoZSBhdHRyaWJ1dGUgZmxhZ3MgbXVzdCBiZSBzZXQgY29ycmVjdGx5LgorICAgIEFT
U0VSVChzdHJ1Y3R1cmUoKS0+Z2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKSA9
PSBXVEY6Om5vdEZvdW5kKTsKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8Ym9vbD4oZ2V0dGVyU2V0
dGVyLT5nZXR0ZXIoKSkgPT0gc3RhdGljX2Nhc3Q8Ym9vbD4oYXR0cmlidXRlcyAmIEdldHRlcikp
OworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxib29sPihnZXR0ZXJTZXR0ZXItPnNldHRlcigpKSA9
PSBzdGF0aWNfY2FzdDxib29sPihhdHRyaWJ1dGVzICYgU2V0dGVyKSk7CisKKyAgICBKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgUHV0UHJvcGVydHlT
bG90IHNsb3Q7CisgICAgcHV0RGlyZWN0SW50ZXJuYWwoZ2xvYmFsRGF0YSwgcHJvcGVydHlOYW1l
LCBnZXR0ZXJTZXR0ZXIsIGF0dHJpYnV0ZXMgfCBHZXR0ZXIsIHRydWUsIHNsb3QsIDApOworCisg
ICAgLy8gcHV0RGlyZWN0IHdpbGwgY2hhbmdlIG91ciBTdHJ1Y3R1cmUgaWYgd2UgYWRkIGEgbmV3
IHByb3BlcnR5LiBGb3IKKyAgICAvLyBnZXR0ZXJzIGFuZCBzZXR0ZXJzLCB0aG91Z2gsIHdlIGFs
c28gbmVlZCB0byBjaGFuZ2Ugb3VyIFN0cnVjdHVyZQorICAgIC8vIGlmIHdlIG92ZXJyaWRlIGFu
IGV4aXN0aW5nIG5vbi1nZXR0ZXIgb3Igbm9uLXNldHRlci4KKyAgICBpZiAoc2xvdC50eXBlKCkg
IT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSkgeworICAgICAgICBpZiAoIXN0cnVjdHVy
ZSgpLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgICAgIHNldFN0cnVjdHVyZShleGVjLT5nbG9i
YWxEYXRhKCksIFN0cnVjdHVyZTo6Z2V0dGVyU2V0dGVyVHJhbnNpdGlvbihnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUoKSkpOworICAgIH0KKworICAgIHN0cnVjdHVyZSgpLT5zZXRIYXNHZXR0ZXJTZXR0
ZXJQcm9wZXJ0aWVzKHRydWUpOworfQorCiB2b2lkIEpTT2JqZWN0OjpkZWZpbmVTZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBz
ZXR0ZXJGdW5jdGlvbiwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBpZiAocHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS51bmRlcnNjb3JlUHJvdG8pIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gOTc3OTEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NSw3ICs0NSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIHZh
bHVlLmFzQ2VsbCgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgCisKKyAgICBjbGFz
cyBHZXR0ZXJTZXR0ZXI7CiAgICAgY2xhc3MgSGFzaEVudHJ5OwogICAgIGNsYXNzIEludGVybmFs
RnVuY3Rpb247CiAgICAgY2xhc3MgTWFya2VkQmxvY2s7CkBAIC0xOTAsNiArMTkxLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcHV0VW5kZWZpbmVkQXREaXJlY3RPZmZzZXQoc2l6
ZV90IG9mZnNldCkgeyBwcm9wZXJ0eVN0b3JhZ2UoKVtvZmZzZXRdLnNldFVuZGVmaW5lZCgpOyB9
CiAKICAgICAgICAgdm9pZCBmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYsIFdy
aXRlQmFycmllckJhc2U8VW5rbm93bj4qIGxvY2F0aW9uKTsKKyAgICAgICAgdm9pZCBpbml0aWFs
aXplR2V0dGVyU2V0dGVyUHJvcGVydHkoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIEdl
dHRlclNldHRlciosIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogCiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBkZWZpbmVHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBKU09iamVjdCogZ2V0dGVyRnVuY3Rpb24sIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSAwKTsKICAg
ICAgICAgdmlydHVhbCB2b2lkIGRlZmluZVNldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzZXR0ZXJGdW5jdGlvbiwgdW5zaWduZWQgYXR0
cmlidXRlcyA9IDApOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gOTc4OTMpCisrKyBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxMS0xMC0xOSAgR2F2
aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CisKKyAgICAgICAgUG9pc29u
aW5nIG9mIHN0cmljdCBjYWxsZXIsYXJndW1lbnRzIGluYXBwcm9wcmlhdGVseSBwb2lzb25pbmcg
ImluIgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjMz
OTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZh
c3QvanMvYmFzaWMtc3RyaWN0LW1vZGUtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvanMv
c2NyaXB0LXRlc3RzL2Jhc2ljLXN0cmljdC1tb2RlLmpzOgorICAgICAgICAgICAgLSBBZGQgdGVz
dHMuCisKIDIwMTEtMTAtMTkgIFNoaW55YSBLYXdhbmFrYSAgPHNoaW55YWtAZ29vZ2xlLmNvbT4K
IAogICAgICAgICBBcnJheUJ1ZmZlciBzaG91bGQgaGF2ZSBzbGljZSBtZXRob2QuCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2pzL2Jhc2ljLXN0cmljdC1tb2RlLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL2Jhc2ljLXN0cmljdC1tb2RlLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gOTc3OTEpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL2Jhc2ljLXN0cmljdC1t
b2RlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTYgKzU2LDIwIEBAIFBBU1Mg
KGZ1bmN0aW9uICgpeyd1c2Ugc3RyaWN0Jzsgd2l0aCgxKXsKIFBBU1MgKGZ1bmN0aW9uKCl7KGZ1
bmN0aW9uICgpeyd1c2Ugc3RyaWN0Jzsgd2l0aCgxKXt9O30pfSkgdGhyZXcgZXhjZXB0aW9uIFN5
bnRheEVycm9yOiAnd2l0aCcgc3RhdGVtZW50cyBhcmUgbm90IHZhbGlkIGluIHN0cmljdCBtb2Rl
LgogUEFTUyAoZnVuY3Rpb24gKCl7J3VzZSBzdHJpY3QnOyBhcmd1bWVudHMuY2FsbGVlOyB9KSgp
IHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFVuYWJsZSB0byBhY2Nlc3MgY2FsbGVlIG9mIHN0
cmljdCBtb2RlIGZ1bmN0aW9uLgogUEFTUyAoZnVuY3Rpb24gKCl7J3VzZSBzdHJpY3QnOyBhcmd1
bWVudHMuY2FsbGVyOyB9KSgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFVuYWJsZSB0byBh
Y2Nlc3MgY2FsbGVyIG9mIHN0cmljdCBtb2RlIGZ1bmN0aW9uLgotUEFTUyAoZnVuY3Rpb24gZigp
eyd1c2Ugc3RyaWN0JzsgZi5hcmd1bWVudHM7IH0pKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJv
cjogQ2Fubm90IGFjY2VzcyBhcmd1bWVudHMgcHJvcGVydHkgb2YgYSBzdHJpY3QgbW9kZSBmdW5j
dGlvbi4KLVBBU1MgKGZ1bmN0aW9uIGYoKXsndXNlIHN0cmljdCc7IGYuY2FsbGVyOyB9KSgpIHRo
cmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IENhbm5vdCBhY2Nlc3MgY2FsbGVyIHByb3BlcnR5IG9m
IGEgc3RyaWN0IG1vZGUgZnVuY3Rpb24uCi1QQVNTIChmdW5jdGlvbiBmKCl7J3VzZSBzdHJpY3Qn
OyBmLmFyZ3VtZW50cz01OyB9KSgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IENhbm5vdCBh
Y2Nlc3MgYXJndW1lbnRzIHByb3BlcnR5IG9mIGEgc3RyaWN0IG1vZGUgZnVuY3Rpb24uCi1QQVNT
IChmdW5jdGlvbiBmKCl7J3VzZSBzdHJpY3QnOyBmLmNhbGxlcj01OyB9KSgpIHRocmV3IGV4Y2Vw
dGlvbiBUeXBlRXJyb3I6IENhbm5vdCBhY2Nlc3MgY2FsbGVyIHByb3BlcnR5IG9mIGEgc3RyaWN0
IG1vZGUgZnVuY3Rpb24uCitQQVNTIChmdW5jdGlvbiBmKCl7J3VzZSBzdHJpY3QnOyBmLmFyZ3Vt
ZW50czsgfSkoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUeXBlIGVycm9yLgorUEFTUyAo
ZnVuY3Rpb24gZigpeyd1c2Ugc3RyaWN0JzsgZi5jYWxsZXI7IH0pKCkgdGhyZXcgZXhjZXB0aW9u
IFR5cGVFcnJvcjogVHlwZSBlcnJvci4KK1BBU1MgKGZ1bmN0aW9uIGYoKXsndXNlIHN0cmljdCc7
IGYuYXJndW1lbnRzPTU7IH0pKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVHlwZSBlcnJv
ci4KK1BBU1MgKGZ1bmN0aW9uIGYoKXsndXNlIHN0cmljdCc7IGYuY2FsbGVyPTU7IH0pKCkgdGhy
ZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVHlwZSBlcnJvci4KIFBBU1MgKGZ1bmN0aW9uIChhcmcp
eyd1c2Ugc3RyaWN0JzsgYXJndW1lbnRzLmNhbGxlZTsgfSkoKSB0aHJldyBleGNlcHRpb24gVHlw
ZUVycm9yOiBVbmFibGUgdG8gYWNjZXNzIGNhbGxlZSBvZiBzdHJpY3QgbW9kZSBmdW5jdGlvbi4K
IFBBU1MgKGZ1bmN0aW9uIChhcmcpeyd1c2Ugc3RyaWN0JzsgYXJndW1lbnRzLmNhbGxlcjsgfSko
KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBVbmFibGUgdG8gYWNjZXNzIGNhbGxlciBvZiBz
dHJpY3QgbW9kZSBmdW5jdGlvbi4KLVBBU1MgKGZ1bmN0aW9uIGYoYXJnKXsndXNlIHN0cmljdCc7
IGYuYXJndW1lbnRzOyB9KSgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IENhbm5vdCBhY2Nl
c3MgYXJndW1lbnRzIHByb3BlcnR5IG9mIGEgc3RyaWN0IG1vZGUgZnVuY3Rpb24uCi1QQVNTIChm
dW5jdGlvbiBmKGFyZyl7J3VzZSBzdHJpY3QnOyBmLmNhbGxlcjsgfSkoKSB0aHJldyBleGNlcHRp
b24gVHlwZUVycm9yOiBDYW5ub3QgYWNjZXNzIGNhbGxlciBwcm9wZXJ0eSBvZiBhIHN0cmljdCBt
b2RlIGZ1bmN0aW9uLgotUEFTUyAoZnVuY3Rpb24gZihhcmcpeyd1c2Ugc3RyaWN0JzsgZi5hcmd1
bWVudHM9NTsgfSkoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBDYW5ub3QgYWNjZXNzIGFy
Z3VtZW50cyBwcm9wZXJ0eSBvZiBhIHN0cmljdCBtb2RlIGZ1bmN0aW9uLgotUEFTUyAoZnVuY3Rp
b24gZihhcmcpeyd1c2Ugc3RyaWN0JzsgZi5jYWxsZXI9NTsgfSkoKSB0aHJldyBleGNlcHRpb24g
VHlwZUVycm9yOiBDYW5ub3QgYWNjZXNzIGNhbGxlciBwcm9wZXJ0eSBvZiBhIHN0cmljdCBtb2Rl
IGZ1bmN0aW9uLgorUEFTUyAoZnVuY3Rpb24gZihhcmcpeyd1c2Ugc3RyaWN0JzsgZi5hcmd1bWVu
dHM7IH0pKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVHlwZSBlcnJvci4KK1BBU1MgKGZ1
bmN0aW9uIGYoYXJnKXsndXNlIHN0cmljdCc7IGYuY2FsbGVyOyB9KSgpIHRocmV3IGV4Y2VwdGlv
biBUeXBlRXJyb3I6IFR5cGUgZXJyb3IuCitQQVNTIChmdW5jdGlvbiBmKGFyZyl7J3VzZSBzdHJp
Y3QnOyBmLmFyZ3VtZW50cz01OyB9KSgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUg
ZXJyb3IuCitQQVNTIChmdW5jdGlvbiBmKGFyZyl7J3VzZSBzdHJpY3QnOyBmLmNhbGxlcj01OyB9
KSgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUgZXJyb3IuCitQQVNTICJjYWxsZXIi
IGluIGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QifSBpcyB0cnVlCitQQVNTIChmdW5jdGlvbigpeyJ1
c2Ugc3RyaWN0Ijt9KS5oYXNPd25Qcm9wZXJ0eSgiY2FsbGVyIikgaXMgdHJ1ZQorUEFTUyAiYXJn
dW1lbnRzIiBpbiBmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0In0gaXMgdHJ1ZQorUEFTUyAoZnVuY3Rp
b24oKXsidXNlIHN0cmljdCI7fSkuaGFzT3duUHJvcGVydHkoImFyZ3VtZW50cyIpIGlzIHRydWUK
IFBBU1MgJ3VzZSBzdHJpY3QnOyAoZnVuY3Rpb24gKCl7d2l0aCgxKXt9O30pIHRocmV3IGV4Y2Vw
dGlvbiBTeW50YXhFcnJvcjogJ3dpdGgnIHN0YXRlbWVudHMgYXJlIG5vdCB2YWxpZCBpbiBzdHJp
Y3QgbW9kZS4KIFBBU1MgKGZ1bmN0aW9uKCl7J3VzZSBzdHJpY3QnOyAoZnVuY3Rpb24gKCl7d2l0
aCgxKXt9O30pfSkgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiAnd2l0aCcgc3RhdGVtZW50
cyBhcmUgbm90IHZhbGlkIGluIHN0cmljdCBtb2RlLgogUEFTUyAndXNlIHN0cmljdCc7IChmdW5j
dGlvbiAoKXt2YXIgYTsgZGVsZXRlIGE7fSkgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBD
YW5ub3QgZGVsZXRlIHVucXVhbGlmaWVkIHByb3BlcnR5ICdhJyBpbiBzdHJpY3QgbW9kZS4KSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL2Jhc2ljLXN0cmljdC1tb2RlLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL2Jhc2ljLXN0
cmljdC1tb2RlLmpzCShyZXZpc2lvbiA5Nzc5MSkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvc2Ny
aXB0LXRlc3RzL2Jhc2ljLXN0cmljdC1tb2RlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3
NCwxMyBAQCBzaG91bGRUaHJvdygiKGZ1bmN0aW9uIGYoYXJnKXsndXNlIHN0cmljCiBzaG91bGRU
aHJvdygiKGZ1bmN0aW9uIGYoYXJnKXsndXNlIHN0cmljdCc7IGYuY2FsbGVyOyB9KSgpIik7CiBz
aG91bGRUaHJvdygiKGZ1bmN0aW9uIGYoYXJnKXsndXNlIHN0cmljdCc7IGYuYXJndW1lbnRzPTU7
IH0pKCkiKTsKIHNob3VsZFRocm93KCIoZnVuY3Rpb24gZihhcmcpeyd1c2Ugc3RyaWN0JzsgZi5j
YWxsZXI9NTsgfSkoKSIpOworCisvLyBhcmd1bWVudHMvY2FsbGVyIHBvaXNvbmluZyBzaG91bGQg
YmUgdmlzaWJsZSBidXQgbm90IHRocm93IHdpdGggJ2luJyAmICdoYXNPd25Qcm9wZXJ0eScuCitz
aG91bGRCZVRydWUoJyJjYWxsZXIiIGluIGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QifScpOworc2hv
dWxkQmVUcnVlKCcoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7fSkuaGFzT3duUHJvcGVydHkoImNh
bGxlciIpJyk7CitzaG91bGRCZVRydWUoJyJhcmd1bWVudHMiIGluIGZ1bmN0aW9uKCl7InVzZSBz
dHJpY3QifScpOworc2hvdWxkQmVUcnVlKCcoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7fSkuaGFz
T3duUHJvcGVydHkoImFyZ3VtZW50cyIpJyk7CisgCiBzaG91bGRCZVN5bnRheEVycm9yKCIndXNl
IHN0cmljdCc7IChmdW5jdGlvbiAoKXt3aXRoKDEpe307fSkiKTsKIHNob3VsZEJlU3ludGF4RXJy
b3IoIid1c2Ugc3RyaWN0JzsgKGZ1bmN0aW9uICgpe3ZhciBhOyBkZWxldGUgYTt9KSIpOwogc2hv
dWxkQmVTeW50YXhFcnJvcigiJ3VzZSBzdHJpY3QnOyB2YXIgYTsgKGZ1bmN0aW9uICgpeyBkZWxl
dGUgYTt9KSIpOwo=
</data>
<flag name="review"
          id="109589"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>