<?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>28986</bug_id>
          
          <creation_ts>2009-09-04 15:17:29 -0700</creation_ts>
          <short_desc>Add support for noreferrer link relation</short_desc>
          <delta_ts>2015-02-13 17:04:54 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=141579</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nate Chapin">japhet</reporter>
          <assigned_to name="Nate Chapin">japhet</assigned_to>
          <cc>ap</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>144930</commentid>
    <comment_count>0</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-09-04 15:17:29 -0700</bug_when>
    <thetext>Implement &lt;a rel=&quot;noreferrer&quot;&gt; as currently specified: http://www.whatwg.org/specs/web-apps/current-work/#link-type-noreferrer

Currently, HTMLAnchorElement ignores the rel attribute, so that will need to be added as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144936</commentid>
    <comment_count>1</comment_count>
      <attachid>39091</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-09-04 15:29:36 -0700</bug_when>
    <thetext>Created attachment 39091
First pass</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145520</commentid>
    <comment_count>2</comment_count>
      <attachid>39091</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-09-08 13:45:45 -0700</bug_when>
    <thetext>Comment on attachment 39091
First pass

+        * loader/FrameLoaderTypes.h: Add enum for referrer policy
+        (WebCore::):

It&apos;s best to edit or just remove the second line - prepare-Changelog is not perfect, so its output is just a starting point or a human, and this is just garbage.

+    , m_linkRelations()

A default constructor will be called anyway, there is no need to invoke it explicitly.

+    ClassNames m_linkRelations;

This data is already stored in attribute map, I don&apos;t think you need any data members added to HTMLAnchorElement class.

Instead, it should expose a shouldSendReferrer() method that will in turn call getAttribute().

+    if (referrerPolicy == NoReferrer || !argsReferrer.isEmpty())
         referrer = argsReferrer;

If I&apos;m reading it correctly, this code depends on argsReferrer being empty if referrerPolicy is NoReferrer. Please add an assertion to this effect.

Also, can this result in an empty Referer header being sent with some or all network back-ends? Do we want this, or do we want to omit it completely? Formally, servers should not make any distinction between those, so we probably want to save a few bytes sent over the wire.

+    , m_suppressOpenerInNewFrame(false)

The ChangeLog should promptly mention this (probably before per-function logs), because this is not entirely expected.

Could you add a test case for normal navigation that just replaces top frame content, and another for navigation in a subframe? Also, what about navigating an existing subframe? The spec seems to be silent about this, which is strange:

&lt;iframe name=&quot;a&quot; src=&quot;a.html&quot;&gt;&lt;/iframe&gt;
&lt;a href=&quot;b.html&quot; target=&quot;a&quot; rel=&quot;noreferrer&quot;&gt;link&lt;/a&gt;

+    if (referrerPolicy == NoReferrer) {
+        m_suppressOpenerInNewFrame = true;

Does it need to be reset to false otherwise? I&apos;m not 100% sure about the role of FrameLoader, but I think it is re-used for future navigations.

I think that this (two consecutive navigations with different noreferrer values) should be tested, too.

HTML5 says that AREA elements also support noreferrer. Will this be added in a followup patch?

+    newEvent.initMouseEvent(&quot;click&quot;, false, false, window, 0, 10, 10, 10, 10, false, false, false, false, 0, target);

Will a simple click() work? I have some doubts whether a synthetic mouse event should be able to do this - we already block synthetic keyboard events in default handlers.

+    // Prevent from being cached.
+    header(&quot;Cache-Control: no-cache, private, max-age=0&quot;);

Counter-intuitively, the directive to prevent caching is &quot;no-store&quot;, not &quot;no-cache&quot;. The latter only affects intermediate caches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146289</commentid>
    <comment_count>3</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-09-10 12:20:35 -0700</bug_when>
    <thetext>Clarifications and a couple questions inline...

(In reply to comment #2)
&gt; (From update of attachment 39091 [details])
&gt; +        * loader/FrameLoaderTypes.h: Add enum for referrer policy
&gt; +        (WebCore::):
&gt; 
&gt; It&apos;s best to edit or just remove the second line - prepare-Changelog is not
&gt; perfect, so its output is just a starting point or a human, and this is just
&gt; garbage.
&gt; 
&gt; +    , m_linkRelations()
&gt; 
&gt; A default constructor will be called anyway, there is no need to invoke it
&gt; explicitly.
&gt; 
&gt; +    ClassNames m_linkRelations;
&gt; 
&gt; This data is already stored in attribute map, I don&apos;t think you need any data
&gt; members added to HTMLAnchorElement class.
&gt; 
&gt; Instead, it should expose a shouldSendReferrer() method that will in turn call
&gt; getAttribute().
&gt; 
&gt; +    if (referrerPolicy == NoReferrer || !argsReferrer.isEmpty())
&gt;          referrer = argsReferrer;
&gt; 
&gt; If I&apos;m reading it correctly, this code depends on argsReferrer being empty if
&gt; referrerPolicy is NoReferrer. Please add an assertion to this effect.

I think that&apos;s a safe assumption, but I&apos;m not absolutely certain.  Regardless, I&apos;ll move the NoReferrer check down next to the FrameLoader::shouldSendReferrer() check later in the function, which is probably where it belongs anyway.

&gt; 
&gt; Also, can this result in an empty Referer header being sent with some or all
&gt; network back-ends? Do we want this, or do we want to omit it completely?
&gt; Formally, servers should not make any distinction between those, so we probably
&gt; want to save a few bytes sent over the wire.
I was assuming that identical behavior to the FrameLoader::shouldSendReferrer() usages was fine, but I don&apos;t know enough about the varioius network backends to say for certain.

&gt; 
&gt; +    , m_suppressOpenerInNewFrame(false)
&gt; 
&gt; The ChangeLog should promptly mention this (probably before per-function logs),
&gt; because this is not entirely expected.
&gt; 
&gt; Could you add a test case for normal navigation that just replaces top frame
&gt; content, and another for navigation in a subframe? Also, what about navigating
&gt; an existing subframe? The spec seems to be silent about this, which is strange:

Will do.  I think I&apos;ll end up with the following cases:
* Simple noreferrer  navigation
* Subframe noreferrer navigation
* noreferrer navigation follow by referrer navigation
* noreferrer in new window (also verifying window.opener is empty)

Is that sufficient?  Do I need to check window.opener in all those cases, or is it sufficient to just demonstrate it&apos;s proper behavior in the new window case?

&gt; 
&gt; &lt;iframe name=&quot;a&quot; src=&quot;a.html&quot;&gt;&lt;/iframe&gt;
&gt; &lt;a href=&quot;b.html&quot; target=&quot;a&quot; rel=&quot;noreferrer&quot;&gt;link&lt;/a&gt;
&gt; 
&gt; +    if (referrerPolicy == NoReferrer) {
&gt; +        m_suppressOpenerInNewFrame = true;
&gt; 
&gt; Does it need to be reset to false otherwise? I&apos;m not 100% sure about the role
&gt; of FrameLoader, but I think it is re-used for future navigations.
&gt; 
&gt; I think that this (two consecutive navigations with different noreferrer
&gt; values) should be tested, too.

My thought was that urlSelected would be the only place this gets set to true (since that&apos;s the place HTMLAnchorElement::defaultEventHandler() calls into FrameLoader), and that it would then set it to false when completed. I don&apos;t know if that&apos;s the right answer, but it seemed to handle the future navigation case.  

&gt; 
&gt; HTML5 says that AREA elements also support noreferrer. Will this be added in a
&gt; followup patch?

HTMLAreaElement inherits from HTMLAnchorElement and uses its defaultEventHandler, so this should Just Work.  I&apos;ve manually verified that an &lt;area&gt; with rel=&quot;noreferrer&quot; doesn&apos;t send a referrer and follows the same code paths as an &lt;a&gt;.  Do you want a layout test for this as well?

&gt; 
&gt; +    newEvent.initMouseEvent(&quot;click&quot;, false, false, window, 0, 10, 10, 10, 10,
&gt; false, false, false, false, 0, target);
&gt; 
&gt; Will a simple click() work? I have some doubts whether a synthetic mouse event
&gt; should be able to do this - we already block synthetic keyboard events in
&gt; default handlers.

It worked on my local machine, and this is basically a copy/paste from other layout tests I&apos;ve written, so I think it&apos;s fine.

&gt; 
&gt; +    // Prevent from being cached.
&gt; +    header(&quot;Cache-Control: no-cache, private, max-age=0&quot;);
&gt; 
&gt; Counter-intuitively, the directive to prevent caching is &quot;no-store&quot;, not
&gt; &quot;no-cache&quot;. The latter only affects intermediate caches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146305</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-09-10 13:05:34 -0700</bug_when>
    <thetext>&gt; Is that sufficient?  Do I need to check window.opener in all those cases, or is
&gt; it sufficient to just demonstrate it&apos;s proper behavior in the new window case?

It&apos;s definitely best to test as much as practical.


&gt; My thought was that urlSelected would be the only place this gets set to true
&gt; (since that&apos;s the place HTMLAnchorElement::defaultEventHandler() calls into
&gt; FrameLoader), and that it would then set it to false when completed. I don&apos;t
&gt; know if that&apos;s the right answer, but it seemed to handle the future navigation
&gt; case.  

So, m_suppressOpenerInNewFrame is supposed to always be false when entering this function? Could you add an ASSERT to this effect?

With an assertion and a test, it would be just fine.

&gt; HTMLAreaElement inherits from HTMLAnchorElement and uses its
&gt; defaultEventHandler, so this should Just Work.  I&apos;ve manually verified that an
&gt; &lt;area&gt; with rel=&quot;noreferrer&quot; doesn&apos;t send a referrer and follows the same code
&gt; paths as an &lt;a&gt;.  Do you want a layout test for this as well?

Yes, we definitely need at least one test fro AREA. Probably no need to repeat all tests we have for anchor.

&gt; &gt; Will a simple click() work? I have some doubts whether a synthetic mouse event
&gt; &gt; should be able to do this - we already block synthetic keyboard events in
&gt; &gt; default handlers.
&gt; 
&gt; It worked on my local machine, and this is basically a copy/paste from other
&gt; layout tests I&apos;ve written, so I think it&apos;s fine.

Sorry, I was not clear enough. What I&apos;m saying is that we might consider changing this in the future, so it would be easier if we didn&apos;t have to change this test if we do. Not a big deal either way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146362</commentid>
    <comment_count>5</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-09-10 15:07:10 -0700</bug_when>
    <thetext>
&gt; Sorry, I was not clear enough. What I&apos;m saying is that we might consider
&gt; changing this in the future, so it would be easier if we didn&apos;t have to change
&gt; this test if we do. Not a big deal either way.

It appears I can either test window.opener or I can make use of eventSender, but not both.

The issue is that my attempts to set window.opener manually and have it persist through page load have failed (If there&apos;s a trick I need to be using, I&apos;d love to know...).  Therefore, I have to open a new window to get window.opener set, and new windows opened in the test shell apparently don&apos;t have eventSender attached to them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146695</commentid>
    <comment_count>6</comment_count>
      <attachid>39463</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-09-11 11:58:24 -0700</bug_when>
    <thetext>Created attachment 39463
Attempt #2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146741</commentid>
    <comment_count>7</comment_count>
      <attachid>39463</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-09-11 14:30:20 -0700</bug_when>
    <thetext>Comment on attachment 39463
Attempt #2

+    return !ClassNames(getAttribute(relAttr), document()-&gt;inCompatMode()).contains(&quot;noreferrer&quot;);

I don&apos;t think we should be using ClassNames on something that isn&apos;t a list of class names.

&gt; So, m_suppressOpenerInNewFrame is supposed to always be false when entering
&gt; this function? Could you add an ASSERT to this effect?

Is there a reason not to add this ASSERT?

+    if (!m_suppressOpenerInNewFrame)
+        mainFrame-&gt;loader()-&gt;setOpener(frame.get());

One thing I didn&apos;t ask about originally - what makes us believe that it&apos;s ok not to set the internal opener attribute? One example that makes me curious is: can we programmatically navigate a frame with a different origin, but whose opener is same origin? The tests are in FrameLoader::shouldAllowNavigation(), and they rely on opener() value.

Tentatively, I&apos;d say yes, but the patch appears to prevent this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146753</commentid>
    <comment_count>8</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-09-11 14:59:32 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 39463 [details])
&gt; +    return !ClassNames(getAttribute(relAttr),
&gt; document()-&gt;inCompatMode()).contains(&quot;noreferrer&quot;);
&gt; 
&gt; I don&apos;t think we should be using ClassNames on something that isn&apos;t a list of
&gt; class names.

My understanding is that ClassNames was originally more generically named, and that it was given its current name because its only use was to store and access space separated class names (http://trac.webkit.org/changeset/28722).  The behavior of these class strings (as far as I and everyone that I&apos;ve asked can tell) precisely matches the behvaior of space separated lists in HTML5 (http://www.whatwg.org/specs/web-apps/current-work/#space-separated-tokens).  I think using this class is the right answer and the question is primarily when and how it gets renamed back to something more generic :-)

Sorry for not explaining sooner.  Does that seem reasonable?

&gt; 
&gt; &gt; So, m_suppressOpenerInNewFrame is supposed to always be false when entering
&gt; &gt; this function? Could you add an ASSERT to this effect?
&gt; 
&gt; Is there a reason not to add this ASSERT?

Doh, sorry.  I lost that suggestion somehow.  Will do.

&gt; 
&gt; +    if (!m_suppressOpenerInNewFrame)
&gt; +        mainFrame-&gt;loader()-&gt;setOpener(frame.get());
&gt; 
&gt; One thing I didn&apos;t ask about originally - what makes us believe that it&apos;s ok
&gt; not to set the internal opener attribute? One example that makes me curious is:
&gt; can we programmatically navigate a frame with a different origin, but whose
&gt; opener is same origin? The tests are in FrameLoader::shouldAllowNavigation(),
&gt; and they rely on opener() value.
&gt; 
&gt; Tentatively, I&apos;d say yes, but the patch appears to prevent this.

I&apos;ll look into it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146766</commentid>
    <comment_count>9</comment_count>
      <attachid>39463</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-09-11 15:27:09 -0700</bug_when>
    <thetext>Comment on attachment 39463
Attempt #2

&gt; Sorry for not explaining sooner.  Does that seem reasonable?

Probably - it&apos;s the first time I see this class, so I do not have a strong opinion. Does rel attribute value parsing depend on compatMode?

It also seems quite wasteful to temporarily construct a class with a vector of AtomicStrings just to check if there&apos;s a value in the space-separated list.

However, if we decide to reuse the class, it needs to be renamed back.

Marking r-, as the patch will be updated, at least per your above comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151313</commentid>
    <comment_count>10</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-09-30 12:00:13 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 39463 [details])
&gt; &gt; Sorry for not explaining sooner.  Does that seem reasonable?
&gt; 
&gt; Probably - it&apos;s the first time I see this class, so I do not have a strong
&gt; opinion. Does rel attribute value parsing depend on compatMode?
&gt; 
&gt; It also seems quite wasteful to temporarily construct a class with a vector of
&gt; AtomicStrings just to check if there&apos;s a value in the space-separated list.

In my first revision of the patch, I wasn&apos;t temporarily constructing the class, it was a member variable of HTMLAnchorElement.  My thought at the time was that, as more of HTML5 gets implemented, the other link relations will be added, and that this was a decent way of storing those attributes (and also consistent with how ClassNames is used the couple of other places it appears).

&gt; 
&gt; However, if we decide to reuse the class, it needs to be renamed back.

If I do end up using it, do you have a preference whether I rename ClassNames before or after this patch gets completed and committed?

&gt; 
&gt; Marking r-, as the patch will be updated, at least per your above comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151335</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-09-30 13:02:48 -0700</bug_when>
    <thetext>&gt; In my first revision of the patch, I wasn&apos;t temporarily constructing the class,
&gt; it was a member variable of HTMLAnchorElement.  My thought at the time was
&gt; that, as more of HTML5 gets implemented, the other link relations will be
&gt; added, and that this was a decent way of storing those attributes (and also

One significant difference between class names and relation names is that the former can be arbitrary, but the latter come from a predefined set.

&gt; If I do end up using it, do you have a preference whether I rename ClassNames
&gt; before or after this patch gets completed and committed?

I don&apos;t have a particularly strong opinion on this matter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151339</commentid>
    <comment_count>12</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-09-30 13:08:45 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; &gt; In my first revision of the patch, I wasn&apos;t temporarily constructing the class,
&gt; &gt; it was a member variable of HTMLAnchorElement.  My thought at the time was
&gt; &gt; that, as more of HTML5 gets implemented, the other link relations will be
&gt; &gt; added, and that this was a decent way of storing those attributes (and also
&gt; 
&gt; One significant difference between class names and relation names is that the
&gt; former can be arbitrary, but the latter come from a predefined set.
&gt; 
&gt; &gt; If I do end up using it, do you have a preference whether I rename ClassNames
&gt; &gt; before or after this patch gets completed and committed?
&gt; 
&gt; I don&apos;t have a particularly strong opinion on this matter.

You make a good point, I hadn&apos;t thought about the fact that relations are a predefined set.  Perhaps we should parse once in HTMLAnchorElement::parseMappedAttribute() and store bools or a bitmask?  It might look a bit silly when only one of the link relations is implemented though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154172</commentid>
    <comment_count>13</comment_count>
      <attachid>41062</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-10-12 14:56:25 -0700</bug_when>
    <thetext>Created attachment 41062
Attempt #3

Requested ASSERT added.

Changed implementation of rel attribute in HTMLAnchorElement.  Link relations are stored as a bitmask (only one bit is used at the moment, but the definitions are there and ready to be uncommented as more are implemented).  HTMLAnchorElement::setRel() parses a rel string using ClassNames and initializes the bitmask.  hasRel() returns whether a given link relation is set based on the bitmask.  I&apos;ll plan on renaming ClassNames in a later patch.

&gt; One thing I didn&apos;t ask about originally - what makes us believe that it&apos;s ok
&gt; not to set the internal opener attribute? One example that makes me curious is:
&gt; can we programmatically navigate a frame with a different origin, but whose
&gt; opener is same origin? The tests are in FrameLoader::shouldAllowNavigation(),
&gt; and they rely on opener() value.
&gt; 
&gt; Tentatively, I&apos;d say yes, but the patch appears to prevent this.

My interpretation of what the spec says about rel=&quot;noreferrer&quot; is that it is essentially a request by the current page for a total severing of any connection between it and a destination page.  As such, unless I&apos;m misinterpreting your question, I think we want to just not set the internal opener attribute to prevent any connection to the opener under any circumstances, even if it is same origin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154915</commentid>
    <comment_count>14</comment_count>
      <attachid>41062</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-10-15 15:03:38 -0700</bug_when>
    <thetext>Comment on attachment 41062
Attempt #3

&gt; +// const unsigned long RELATION_ALTERNATE   = 0x00000001;

We only use uppercase names for #defined constants - these should use normal interCaps style. But I&apos;d actually suggest using an enum for these (enum members should user InterCaps with an initial capital letter).

&gt; +    void setRel(const AtomicString&amp;);

Why is this an atomic string? Rel values are arbitrary combinations of tokens, and you just parse it immediately anyway. Please use plain String.

&gt; +    unsigned long m_linkRelations;

No need to take 8 bytes on 64 bit systems; I suggest using uint32_t.

r=me on a condition that you address these comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155958</commentid>
    <comment_count>15</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-10-19 15:25:59 -0700</bug_when>
    <thetext>Landed: http://trac.webkit.org/changeset/49809
Fix for win and qt: http://trac.webkit.org/changeset/49812

Thanks for your help, ap!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39091</attachid>
            <date>2009-09-04 15:29:36 -0700</date>
            <delta_ts>2009-09-11 11:58:24 -0700</delta_ts>
            <desc>First pass</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>17760</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODA3NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMDktMDktMDQgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgc3VwcG9ydCBmb3IgbGluayByZWxhdGlvbnMgaW4gSFRNTEFuY2hvckVsZW1lbnQgYW5kCisg
ICAgICAgIGltcGxlbWVudCByZWw9Im5vcmVmZXJyZXIiLgorCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODk4NgorCisgICAgICAgIFRlc3Q6IGh0dHAv
dGVzdHMvbmF2aWdhdGlvbi9uby1yZWZlcnJlci5odG1sCisKKyAgICAgICAgKiBodG1sL0hUTUxB
bmNob3JFbGVtZW50LmNwcDogQWRkIHN1cHBvcnQgZm9yIGxpbmsgcmVsYXRpb25zCisgICAgICAg
IChXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudDo6SFRNTEFuY2hvckVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50OjpyZWwpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OnNldFJlbCk6CisgICAgICAgICogaHRtbC9IVE1MQW5j
aG9yRWxlbWVudC5oOiBBZGQgc3VwcG9ydCBmb3IgbGluayByZWxhdGlvbnMKKyAgICAgICAgKiBs
b2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OkZy
YW1lTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjcmVhdGVXaW5kb3cp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNoYW5nZUxvY2F0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjp1cmxTZWxlY3RlZCk6IEFkZGVkIHBhcmFtZXRlciBm
b3IgcmVmZXJyZXIgcG9saWN5IAorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnJlZGly
ZWN0aW9uVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZEZy
YW1lUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y29udGludWVMb2Fk
QWZ0ZXJOZXdXaW5kb3dQb2xpY3kpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5oOiBV
cGRhdGUgdXJsU2VsZWN0ZWQgcHJvdG90eXBlCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVy
VHlwZXMuaDogQWRkIGVudW0gZm9yIHJlZmVycmVyIHBvbGljeQorICAgICAgICAoV2ViQ29yZTo6
KToKKyAgICAgICAgKiBwYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHA6IFVwZGF0ZSBjYWxs
IHRvIHVybFNlbGVjdGVkKCkKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxl
cjo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQpOgorICAgICAgICAqIHN2Zy9TVkdBRWxlbWVudC5j
cHA6IFVwZGF0ZSBjYWxsIHRvIHVybFNlbGVjdGVkKCkKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FF
bGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKwogMjAwOS0wOS0wNCAgRGF2ZSBIeWF0dCAg
PGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgpJbmRl
eDogV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCShyZXZpc2lvbiA0ODA3NykKKysrIFdlYkNv
cmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3
LDcgQEAKICNpbmNsdWRlICJETlMuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCiAjaW5jbHVkZSAiSFRN
TEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIktleWJv
YXJkRXZlbnQuaCIKQEAgLTQzLDYgKzQ0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
IEhUTUxBbmNob3JFbGVtZW50OjpIVE1MQW5jaG9yRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1l
LCBkb2N1bWVudCwgQ3JlYXRlRWxlbWVudCkKICAgICAsIG1fd2FzU2hpZnRLZXlEb3duT25Nb3Vz
ZURvd24oZmFsc2UpCisgICAgLCBtX2xpbmtSZWxhdGlvbnMoKQogewogfQogCkBAIC0yMDcsNyAr
MjA5LDcgQEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZAogICAgICAg
ICB9CiAKICAgICAgICAgaWYgKCFldnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSAmJiBkb2N1bWVudCgp
LT5mcmFtZSgpKQotICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPnVy
bFNlbGVjdGVkKGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybCksIGdldEF0dHJpYnV0ZSh0YXJn
ZXRBdHRyKSwgZXZ0LCBmYWxzZSwgZmFsc2UsIHRydWUpOworICAgICAgICAgICAgZG9jdW1lbnQo
KS0+ZnJhbWUoKS0+bG9hZGVyKCktPnVybFNlbGVjdGVkKGRvY3VtZW50KCktPmNvbXBsZXRlVVJM
KHVybCksIGdldEF0dHJpYnV0ZSh0YXJnZXRBdHRyKSwgZXZ0LCBmYWxzZSwgZmFsc2UsIHRydWUs
IG1fbGlua1JlbGF0aW9ucy5jb250YWlucygibm9yZWZlcnJlciIpID8gTm9SZWZlcnJlciA6IFNl
bmRSZWZlcnJlcik7CiAKICAgICAgICAgZXZ0LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgIH0g
ZWxzZSBpZiAoaXNMaW5rKCkgJiYgaXNDb250ZW50RWRpdGFibGUoKSkgewpAQCAtMjgwLDkgKzI4
Miw5IEBAIHZvaWQgSFRNTEFuY2hvckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmkKICAgICAgICAg
ICAgICAgICBhdHRyLT5zZXRWYWx1ZShudWxsQXRvbSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBuYW1lQXR0ciB8fAotICAgICAgICAg
ICAgIGF0dHItPm5hbWUoKSA9PSB0aXRsZUF0dHIgfHwKLSAgICAgICAgICAgICBhdHRyLT5uYW1l
KCkgPT0gcmVsQXR0cikgeworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHJlbEF0dHIp
IHsKKyAgICAgICAgc2V0UmVsKGF0dHItPnZhbHVlKCkpOworICAgIH0gZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IG5hbWVBdHRyIHx8IGF0dHItPm5hbWUoKSA9PSB0aXRsZUF0dHIpIHsKICAgICAg
ICAgLy8gRG8gbm90aGluZy4KICAgICB9IGVsc2UKICAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpOwpAQCAtMzI4LDYgKzMzMCwxNiBAQCB2b2lkIEhUTUxBbmNo
b3JFbGVtZW50OjpzZXRIcmVmKGNvbnN0IEF0CiAgICAgc2V0QXR0cmlidXRlKGhyZWZBdHRyLCB2
YWx1ZSk7CiB9CiAKK2NvbnN0IENsYXNzTmFtZXMmIEhUTUxBbmNob3JFbGVtZW50OjpyZWwoKSBj
b25zdAoreworICAgIHJldHVybiBtX2xpbmtSZWxhdGlvbnM7Cit9CisKK3ZvaWQgSFRNTEFuY2hv
ckVsZW1lbnQ6OnNldFJlbChjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQoreworICAgIG1fbGlu
a1JlbGF0aW9ucy5zZXQodmFsdWUsIGRvY3VtZW50KCktPmluQ29tcGF0TW9kZSgpKTsKK30KKwog
Y29uc3QgQXRvbWljU3RyaW5nJiBIVE1MQW5jaG9yRWxlbWVudDo6bmFtZSgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGdldEF0dHJpYnV0ZShuYW1lQXR0cik7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRN
TEFuY2hvckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVs
ZW1lbnQuaAkocmV2aXNpb24gNDgwNzcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogI2lmbmRlZiBIVE1MQW5jaG9y
RWxlbWVudF9oCiAjZGVmaW5lIEhUTUxBbmNob3JFbGVtZW50X2gKIAorI2luY2x1ZGUgIkNsYXNz
TmFtZXMuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC0zNiw2ICszNyw5IEBAIHB1YmxpYzoKICAgICBLVVJMIGhyZWYoKSBjb25zdDsKICAgICB2
b2lkIHNldEhyZWYoY29uc3QgQXRvbWljU3RyaW5nJik7CiAKKyAgICBjb25zdCBDbGFzc05hbWVz
JiByZWwoKSBjb25zdDsKKyAgICB2b2lkIHNldFJlbChjb25zdCBBdG9taWNTdHJpbmcmKTsKKwog
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSgpIGNvbnN0OwogCiAgICAgU3RyaW5nIGhhc2go
KSBjb25zdDsKQEAgLTc0LDYgKzc4LDcgQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxFbGVtZW50
PiBtX3Jvb3RFZGl0YWJsZUVsZW1lbnRGb3JTZWxlY3Rpb25Pbk1vdXNlRG93bjsKICAgICBib29s
IG1fd2FzU2hpZnRLZXlEb3duT25Nb3VzZURvd247CisgICAgQ2xhc3NOYW1lcyBtX2xpbmtSZWxh
dGlvbnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXIuY3BwCShyZXZpc2lvbiA0ODA3NykKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVy
Q2xpZW50LmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
CisjaW5jbHVkZSAiSFRNTEFuY2hvckVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MQXBwbGV0RWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGcmFt
ZUVsZW1lbnQuaCIKQEAgLTI3Miw2ICsyNzMsNyBAQCBGcmFtZUxvYWRlcjo6RnJhbWVMb2FkZXIo
RnJhbWUqIGZyYW1lLCBGCiAgICAgLCBtX2NvbW1pdHRlZEZpcnN0UmVhbERvY3VtZW50TG9hZChm
YWxzZSkKICAgICAsIG1fZGlkUGVyZm9ybUZpcnN0TmF2aWdhdGlvbihmYWxzZSkKICAgICAsIG1f
bG9hZGluZ0Zyb21DYWNoZWRQYWdlKGZhbHNlKQorICAgICwgbV9zdXBwcmVzc09wZW5lckluTmV3
RnJhbWUoZmFsc2UpCiAjaWZuZGVmIE5ERUJVRwogICAgICwgbV9kaWREaXNwYXRjaERpZENvbW1p
dExvYWQoZmFsc2UpCiAjZW5kaWYKQEAgLTMyNCw3ICszMjYsNyBAQCBGcmFtZSogRnJhbWVMb2Fk
ZXI6OmNyZWF0ZVdpbmRvdyhGcmFtZUxvCiAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGZyYW1lTG9h
ZGVyRm9yRnJhbWVMb29rdXAtPmZyYW1lKCktPnRyZWUoKS0+ZmluZChyZXF1ZXN0LmZyYW1lTmFt
ZSgpKTsKICAgICAgICAgaWYgKGZyYW1lICYmIHNob3VsZEFsbG93TmF2aWdhdGlvbihmcmFtZSkp
IHsKICAgICAgICAgICAgIGlmICghcmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKS5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5sb2FkRnJhbWVSZXF1ZXN0
KHJlcXVlc3QsIGZhbHNlLCBmYWxzZSwgMCwgMCk7CisgICAgICAgICAgICAgICAgZnJhbWUtPmxv
YWRlcigpLT5sb2FkRnJhbWVSZXF1ZXN0KHJlcXVlc3QsIGZhbHNlLCBmYWxzZSwgMCwgMCwgU2Vu
ZFJlZmVycmVyKTsKICAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkK
ICAgICAgICAgICAgICAgICBwYWdlLT5jaHJvbWUoKS0+Zm9jdXMoKTsKICAgICAgICAgICAgIGNy
ZWF0ZWQgPSBmYWxzZTsKQEAgLTM5MSwxMCArMzkzLDEwIEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNo
YW5nZUxvY2F0aW9uKGNvbnN0IEsKICAgICBpZiAoZXhlY3V0ZUlmSmF2YVNjcmlwdFVSTChyZXF1
ZXN0LnVybCgpLCB1c2VyR2VzdHVyZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHVybFNlbGVj
dGVkKHJlcXVlc3QsICJfc2VsZiIsIDAsIGxvY2tIaXN0b3J5LCBsb2NrQmFja0ZvcndhcmRMaXN0
LCB1c2VyR2VzdHVyZSk7CisgICAgdXJsU2VsZWN0ZWQocmVxdWVzdCwgIl9zZWxmIiwgMCwgbG9j
a0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QsIHVzZXJHZXN0dXJlLCBTZW5kUmVmZXJyZXIp
OwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjp1cmxTZWxlY3RlZChjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgcGFzc2VkVGFyZ2V0LCBQYXNzUmVmUHRyPEV2ZW50
PiB0cmlnZ2VyaW5nRXZlbnQsIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9ja0JhY2tGb3J3YXJk
TGlzdCwgYm9vbCB1c2VyR2VzdHVyZSkKK3ZvaWQgRnJhbWVMb2FkZXI6OnVybFNlbGVjdGVkKGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBwYXNzZWRUYXJnZXQs
IFBhc3NSZWZQdHI8RXZlbnQ+IHRyaWdnZXJpbmdFdmVudCwgYm9vbCBsb2NrSGlzdG9yeSwgYm9v
bCBsb2NrQmFja0ZvcndhcmRMaXN0LCBib29sIHVzZXJHZXN0dXJlLCBSZWZlcnJlclBvbGljeSBy
ZWZlcnJlclBvbGljeSkKIHsKICAgICBpZiAoZXhlY3V0ZUlmSmF2YVNjcmlwdFVSTChyZXF1ZXN0
LnVybCgpLCB1c2VyR2VzdHVyZSwgZmFsc2UpKQogICAgICAgICByZXR1cm47CkBAIC00MDUsMTEg
KzQwNywxNiBAQCB2b2lkIEZyYW1lTG9hZGVyOjp1cmxTZWxlY3RlZChjb25zdCBSZXNvCiAKICAg
ICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lUmVxdWVzdChyZXF1ZXN0LCB0YXJnZXQpOwogCi0gICAg
aWYgKGZyYW1lUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5odHRwUmVmZXJyZXIoKS5pc0VtcHR5
KCkpCisgICAgaWYgKHJlZmVycmVyUG9saWN5ID09IE5vUmVmZXJyZXIpIHsKKyAgICAgICAgbV9z
dXBwcmVzc09wZW5lckluTmV3RnJhbWUgPSB0cnVlOworICAgICAgICBzZXRPcGVuZXIoMCk7Cisg
ICAgfSBlbHNlIGlmIChmcmFtZVJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuaHR0cFJlZmVycmVy
KCkuaXNFbXB0eSgpKQogICAgICAgICBmcmFtZVJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0
SFRUUFJlZmVycmVyKG1fb3V0Z29pbmdSZWZlcnJlcik7CiAgICAgYWRkSFRUUE9yaWdpbklmTmVl
ZGVkKGZyYW1lUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwgb3V0Z29pbmdPcmlnaW4oKSk7CiAK
LSAgICBsb2FkRnJhbWVSZXF1ZXN0KGZyYW1lUmVxdWVzdCwgbG9ja0hpc3RvcnksIGxvY2tCYWNr
Rm9yd2FyZExpc3QsIHRyaWdnZXJpbmdFdmVudCwgMCk7CisgICAgbG9hZEZyYW1lUmVxdWVzdChm
cmFtZVJlcXVlc3QsIGxvY2tIaXN0b3J5LCBsb2NrQmFja0ZvcndhcmRMaXN0LCB0cmlnZ2VyaW5n
RXZlbnQsIDAsIHJlZmVycmVyUG9saWN5KTsKKworICAgIG1fc3VwcHJlc3NPcGVuZXJJbk5ld0Zy
YW1lID0gZmFsc2U7CiB9CiAKIGJvb2wgRnJhbWVMb2FkZXI6OnJlcXVlc3RGcmFtZShIVE1MRnJh
bWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGNv
bnN0IEF0b21pY1N0cmluZyYgZnJhbWVOYW1lKQpAQCAtMTQ3Niw3ICsxNDgzLDcgQEAgdm9pZCBG
cmFtZUxvYWRlcjo6cmVkaXJlY3Rpb25UaW1lckZpcmVkKAogICAgICAgICBjYXNlIFNjaGVkdWxl
ZFJlZGlyZWN0aW9uOjpoaXN0b3J5TmF2aWdhdGlvbjoKICAgICAgICAgICAgIGlmIChyZWRpcmVj
dGlvbi0+aGlzdG9yeVN0ZXBzID09IDApIHsKICAgICAgICAgICAgICAgICAvLyBTcGVjaWFsIGNh
c2UgZm9yIGdvKDApIGZyb20gYSBmcmFtZSAtPiByZWxvYWQgb25seSB0aGUgZnJhbWUKLSAgICAg
ICAgICAgICAgICB1cmxTZWxlY3RlZChtX1VSTCwgIiIsIDAsIHJlZGlyZWN0aW9uLT5sb2NrSGlz
dG9yeSwgcmVkaXJlY3Rpb24tPmxvY2tCYWNrRm9yd2FyZExpc3QsIHJlZGlyZWN0aW9uLT53YXNV
c2VyR2VzdHVyZSk7CisgICAgICAgICAgICAgICAgdXJsU2VsZWN0ZWQobV9VUkwsICIiLCAwLCBy
ZWRpcmVjdGlvbi0+bG9ja0hpc3RvcnksIHJlZGlyZWN0aW9uLT5sb2NrQmFja0ZvcndhcmRMaXN0
LCByZWRpcmVjdGlvbi0+d2FzVXNlckdlc3R1cmUsIFNlbmRSZWZlcnJlcik7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gZ28oaSE9MCkgZnJv
bSBhIGZyYW1lIG5hdmlnYXRlcyBpbnRvIHRoZSBoaXN0b3J5IG9mIHRoZSBmcmFtZSBvbmx5LApA
QCAtMTQ5MSw3ICsxNDk4LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6cmVkaXJlY3Rpb25UaW1lckZp
cmVkKAogICAgICAgICAgICAgaWYgKCFyZWRpcmVjdGlvbi0+Zm9ybVN0YXRlLT5zb3VyY2VGcmFt
ZSgpLT5sb2FkZXIoKS0+c2hvdWxkQWxsb3dOYXZpZ2F0aW9uKG1fZnJhbWUpKQogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGxvYWRGcmFtZVJlcXVlc3QocmVkaXJlY3Rpb24t
PmZyYW1lUmVxdWVzdCwgcmVkaXJlY3Rpb24tPmxvY2tIaXN0b3J5LCByZWRpcmVjdGlvbi0+bG9j
a0JhY2tGb3J3YXJkTGlzdCwKLSAgICAgICAgICAgICAgICByZWRpcmVjdGlvbi0+ZXZlbnQsIHJl
ZGlyZWN0aW9uLT5mb3JtU3RhdGUpOworICAgICAgICAgICAgICAgIHJlZGlyZWN0aW9uLT5ldmVu
dCwgcmVkaXJlY3Rpb24tPmZvcm1TdGF0ZSwgU2VuZFJlZmVycmVyKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTIyMDcsMTMgKzIyMTQsMTMgQEAgc3RhdGljIGJvb2wgaXNGZWVk
V2l0aE5lc3RlZFByb3RvY29sSW5IVAogfQogCiB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkRnJhbWVS
ZXF1ZXN0KGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgbG9ja0hpc3Rvcnks
IGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCwKLSAgICBQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwg
UGFzc1JlZlB0cjxGb3JtU3RhdGU+IGZvcm1TdGF0ZSkKKyAgICBQYXNzUmVmUHRyPEV2ZW50PiBl
dmVudCwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+IGZvcm1TdGF0ZSwgUmVmZXJyZXJQb2xpY3kgcmVm
ZXJyZXJQb2xpY3kpCiB7ICAgIAogICAgIEtVUkwgdXJsID0gcmVxdWVzdC5yZXNvdXJjZVJlcXVl
c3QoKS51cmwoKTsKIAogICAgIFN0cmluZyByZWZlcnJlcjsKICAgICBTdHJpbmcgYXJnc1JlZmVy
cmVyID0gcmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5odHRwUmVmZXJyZXIoKTsKLSAgICBpZiAo
IWFyZ3NSZWZlcnJlci5pc0VtcHR5KCkpCisgICAgaWYgKHJlZmVycmVyUG9saWN5ID09IE5vUmVm
ZXJyZXIgfHwgIWFyZ3NSZWZlcnJlci5pc0VtcHR5KCkpCiAgICAgICAgIHJlZmVycmVyID0gYXJn
c1JlZmVycmVyOwogICAgIGVsc2UKICAgICAgICAgcmVmZXJyZXIgPSBtX291dGdvaW5nUmVmZXJy
ZXI7CkBAIC00MDk0LDcgKzQxMDEsOCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjb250aW51ZUxvYWRB
ZnRlck5ld1dpCiAKICAgICBtYWluRnJhbWUtPmxvYWRlcigpLT5zZXRPcGVuZWRCeURPTSgpOwog
ICAgIG1haW5GcmFtZS0+bG9hZGVyKCktPm1fY2xpZW50LT5kaXNwYXRjaFNob3coKTsKLSAgICBt
YWluRnJhbWUtPmxvYWRlcigpLT5zZXRPcGVuZXIoZnJhbWUuZ2V0KCkpOworICAgIGlmICghbV9z
dXBwcmVzc09wZW5lckluTmV3RnJhbWUpCisgICAgICAgIG1haW5GcmFtZS0+bG9hZGVyKCktPnNl
dE9wZW5lcihmcmFtZS5nZXQoKSk7CiAgICAgbWFpbkZyYW1lLT5sb2FkZXIoKS0+bG9hZFdpdGhO
YXZpZ2F0aW9uQWN0aW9uKHJlcXVlc3QsIE5hdmlnYXRpb25BY3Rpb24oKSwgZmFsc2UsIEZyYW1l
TG9hZFR5cGVTdGFuZGFyZCwgZm9ybVN0YXRlKTsKIH0KIApJbmRleDogV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5o
CShyZXZpc2lvbiA0ODA3NykKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEzMSw3ICsxMzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHZvaWQgbG9hZFVSTEludG9DaGlsZEZyYW1lKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHJl
ZmVyZXIsIEZyYW1lKik7CiAKICAgICAgICAgdm9pZCBsb2FkRnJhbWVSZXF1ZXN0KGNvbnN0IEZy
YW1lTG9hZFJlcXVlc3QmLCBib29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExp
c3QsICAvLyBDYWxsZWQgYnkgc3VibWl0Rm9ybSwgY2FsbHMgbG9hZFBvc3RSZXF1ZXN0IGFuZCBs
b2FkVVJMLgotICAgICAgICAgICAgUGFzc1JlZlB0cjxFdmVudD4sIFBhc3NSZWZQdHI8Rm9ybVN0
YXRlPik7CisgICAgICAgICAgICBQYXNzUmVmUHRyPEV2ZW50PiwgUGFzc1JlZlB0cjxGb3JtU3Rh
dGU+LCBSZWZlcnJlclBvbGljeSk7CiAKICAgICAgICAgdm9pZCBsb2FkKGNvbnN0IFJlc291cmNl
UmVxdWVzdCYsIGJvb2wgbG9ja0hpc3RvcnkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBDYWxsZWQgYnkgV2ViRnJhbWUsIGNhbGxzIGxvYWQoUmVzb3VyY2VSZXF1
ZXN0LCBTdWJzdGl0dXRlRGF0YSkuCiAgICAgICAgIHZvaWQgbG9hZChjb25zdCBSZXNvdXJjZVJl
cXVlc3QmLCBjb25zdCBTdWJzdGl0dXRlRGF0YSYsIGJvb2wgbG9ja0hpc3RvcnkpOyAgICAgICAg
ICAgICAgICAgLy8gQ2FsbGVkIGJvdGggYnkgV2ViRnJhbWUgYW5kIGludGVybmFsbHksIGNhbGxz
IGxvYWQoRG9jdW1lbnRMb2FkZXIqKS4KQEAgLTI1Myw3ICsyNTMsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhib29sKTsKIAogICAgICAgICB2
b2lkIGNoYW5nZUxvY2F0aW9uKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBi
b29sIGxvY2tIaXN0b3J5ID0gdHJ1ZSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0ID0gdHJ1ZSwg
Ym9vbCB1c2VyR2VzdHVyZSA9IGZhbHNlLCBib29sIHJlZnJlc2ggPSBmYWxzZSk7Ci0gICAgICAg
IHZvaWQgdXJsU2VsZWN0ZWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiB0
YXJnZXQsIFBhc3NSZWZQdHI8RXZlbnQ+LCBib29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNr
Rm9yd2FyZExpc3QsIGJvb2wgdXNlckdlc3R1cmUpOworICAgICAgICB2b2lkIHVybFNlbGVjdGVk
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBQYXNzUmVmUHRy
PEV2ZW50PiwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0LCBib29s
IHVzZXJHZXN0dXJlLCBSZWZlcnJlclBvbGljeSk7CiAgICAgICAgIGJvb2wgcmVxdWVzdEZyYW1l
KEhUTUxGcmFtZU93bmVyRWxlbWVudCosIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBBdG9taWNT
dHJpbmcmIGZyYW1lTmFtZSk7CiAKICAgICAgICAgdm9pZCBzdWJtaXRGb3JtKGNvbnN0IGNoYXIq
IGFjdGlvbiwgY29uc3QgU3RyaW5nJiB1cmwsCkBAIC02MDksNiArNjA5LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgICAgIEZyYW1lKiBtX29wZW5lcjsKICAgICAgICAgSGFzaFNldDxG
cmFtZSo+IG1fb3BlbmVkRnJhbWVzOworICAgICAgICBib29sIG1fc3VwcHJlc3NPcGVuZXJJbk5l
d0ZyYW1lOwogCiAgICAgICAgIGJvb2wgbV9vcGVuZWRCeURPTTsKIApJbmRleDogV2ViQ29yZS9s
b2FkZXIvRnJhbWVMb2FkZXJUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyVHlwZXMuaAkocmV2aXNpb24gNDgwNzcpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlclR5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDExIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgVW5sb2FkRXZlbnRQb2xpY3lVbmxvYWRPbmx5LAogICAgICAg
ICBVbmxvYWRFdmVudFBvbGljeVVubG9hZEFuZFBhZ2VIaWRlCiAgICAgfTsKKyAgICAKKyAgICBl
bnVtIFJlZmVycmVyUG9saWN5IHsKKyAgICAgICAgU2VuZFJlZmVycmVyLAorICAgICAgICBOb1Jl
ZmVycmVyCisgICAgfTsKIH0KIAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BhZ2UvQ29udGV4dE1l
bnVDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVD
b250cm9sbGVyLmNwcAkocmV2aXNpb24gNDgwNzcpCisrKyBXZWJDb3JlL3BhZ2UvQ29udGV4dE1l
bnVDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjExLDcgKzIxMSw3IEBAIHZvaWQg
Q29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUkKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTGluazoKICAgICAgICAgaWYgKEZyYW1lKiB0YXJn
ZXRGcmFtZSA9IHJlc3VsdC50YXJnZXRGcmFtZSgpKQotICAgICAgICAgICAgdGFyZ2V0RnJhbWUt
PmxvYWRlcigpLT5sb2FkRnJhbWVSZXF1ZXN0KEZyYW1lTG9hZFJlcXVlc3QoUmVzb3VyY2VSZXF1
ZXN0KHJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKSwgZnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1Jl
ZmVycmVyKCkpKSwgZmFsc2UsIGZhbHNlLCAwLCAwKTsKKyAgICAgICAgICAgIHRhcmdldEZyYW1l
LT5sb2FkZXIoKS0+bG9hZEZyYW1lUmVxdWVzdChGcmFtZUxvYWRSZXF1ZXN0KFJlc291cmNlUmVx
dWVzdChyZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCksIGZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdS
ZWZlcnJlcigpKSksIGZhbHNlLCBmYWxzZSwgMCwgMCwgU2VuZFJlZmVycmVyKTsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgb3Blbk5ld1dpbmRvdyhyZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCks
IGZyYW1lKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdBRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHQUVsZW1lbnQuY3BwCShyZXZpc2lvbiA0
ODA3NykKKysrIFdlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5o
IgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJNYXBwZWRBdHRyaWJ1dGUu
aCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCkBAIC0xNTIsNyArMTUzLDcgQEAgdm9pZCBTVkdB
RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdgogICAgICAgICAgICAgfQogI2VuZGlmCiAg
ICAgICAgICAgICBpZiAoZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgICAgICAgICBkb2N1
bWVudCgpLT5mcmFtZSgpLT5sb2FkZXIoKS0+dXJsU2VsZWN0ZWQoZG9jdW1lbnQoKS0+Y29tcGxl
dGVVUkwodXJsKSwgdGFyZ2V0LCBldnQsIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgICAg
ICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPnVybFNlbGVjdGVkKGRvY3VtZW50
KCktPmNvbXBsZXRlVVJMKHVybCksIHRhcmdldCwgZXZ0LCBmYWxzZSwgZmFsc2UsIHRydWUsIFNl
bmRSZWZlcnJlcik7CiAgICAgICAgIH0KIAogICAgICAgICBldnQtPnNldERlZmF1bHRIYW5kbGVk
KCk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0ODA3NykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDA5LTA5LTA0ICBOYXRlIENoYXBpbiAg
PGphcGhldEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkIHRlc3QgZm9yIG5vcmVmZXJyZXIgbGluayByZWxhdGlvbi4KKwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjg5ODYKKwor
ICAgICAgICAqIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9uby1yZWZlcnJlci5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24vbm8tcmVmZXJyZXItZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2VzL25vLXJl
ZmVycmVyLWhlbHBlci5waHA6IEFkZGVkLgorCiAyMDA5LTA5LTA0ICBZYWVsIEFoYXJvbiAgPHlh
ZWwuYWhhcm9uQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4K
SW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9uby1yZWZlcnJlci1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9u
L25vLXJlZmVycmVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvbmF2aWdhdGlvbi9uby1yZWZlcnJlci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNCBAQAorVGhpcyB0ZXN0cyB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgIm5v
cmVmZXJyZXIiIGxpbmsgcmVsYXRpb24gb24gYW5jaG9yIHRhZ3MuIFRoZSBsaW5rIGJlbG93IHNo
b3VsZCBub3Qgc2VuZCBhbiBodHRwIHJlZmVycmVyLCBhbmQgdGhlIHJlc3VsdGluZyB3aW5kb3cg
c2hvdWxkIGhhdmUgaXRzIG9wZW5lciBhdHRyaWJ1dGUgc2V0IHRvIG51bGwuIFRoZSB2YWx1ZXMg
b2YgdGhlIHJlZmVycmVyIGFuZCB3aW5kb3cub3BlbmVyIHNob3VsZCBiZSBlbXB0eSBiZWxvdy4K
K1N0YXJ0IG5vIHJlZmVycmVyIHRlc3QKK1JlZmVycmVyOgord2luZG93Lm9wZW5lcjoKXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmln
YXRpb24vbm8tcmVmZXJyZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL25hdmlnYXRpb24vbm8tcmVmZXJyZXIuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9uby1yZWZlcnJlci5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDI4IEBACis8aHRtbD48Ym9keT4KK1RoaXMgdGVzdHMgdGhlIGZ1bmN0aW9uYWxp
dHkgb2YgdGhlICJub3JlZmVycmVyIiBsaW5rIHJlbGF0aW9uIG9uIGFuY2hvciB0YWdzLiBUaGUg
bGluayBiZWxvdyBzaG91bGQgbm90CitzZW5kIGFuIGh0dHAgcmVmZXJyZXIsIGFuZCB0aGUgcmVz
dWx0aW5nIHdpbmRvdyBzaG91bGQgaGF2ZSBpdHMgb3BlbmVyIGF0dHJpYnV0ZSBzZXQgdG8gbnVs
bC4gIFRoZSB2YWx1ZXMKK29mIHRoZSByZWZlcnJlciBhbmQgd2luZG93Lm9wZW5lciBzaG91bGQg
YmUgZW1wdHkgYmVsb3cuCis8YnIvPgorPGEgaWQ9ImxpbmsiIGhyZWY9InJlc291cmNlcy9uby1y
ZWZlcnJlci1oZWxwZXIucGhwIiByZWw9Im5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5TdGFy
dCBubyByZWZlcnJlciB0ZXN0PC9hPgorPHNjcmlwdD4KKyAgICB3aW5kb3cubmFtZSA9ICJjb25z
b2xlV2luZG93IjsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuc2V0Q2FuT3BlbldpbmRvd3ModHJ1ZSk7CisgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAgICB2YXIgdGFyZ2V0ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxpbmsiKTsNCisgICAgdmFyIG5ld0V2ZW50ID0gZG9jdW1l
bnQuY3JlYXRlRXZlbnQoIk1vdXNlRXZlbnQiKTsNCisgICAgbmV3RXZlbnQuaW5pdE1vdXNlRXZl
bnQoImNsaWNrIiwgZmFsc2UsIGZhbHNlLCB3aW5kb3csIDAsIDEwLCAxMCwgMTAsIDEwLCBmYWxz
ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgMCwgdGFyZ2V0KTsNCisgICAgdGFyZ2V0LmRpc3BhdGNo
RXZlbnQobmV3RXZlbnQpOworICAgIAorZnVuY3Rpb24gbG9nKG1zZykNCit7DQorICAgIHZhciBs
aW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7DQorICAgIGxpbmUuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobXNnKSk7DQorICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdjb25zb2xlJykuYXBwZW5kQ2hpbGQobGluZSk7DQorfQorPC9zY3JpcHQ+Cis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKzwvYm9keT48L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2VzL25vLXJlZmVycmVyLWhlbHBlci5waHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Jlc291cmNlcy9u
by1yZWZlcnJlci1oZWxwZXIucGhwCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9uYXZpZ2F0aW9uL3Jlc291cmNlcy9uby1yZWZlcnJlci1oZWxwZXIucGhwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDIzIEBACis8P3BocAorICAgIC8vIFByZXZlbnQgZnJvbSBiZWluZyBj
YWNoZWQuCisgICAgaGVhZGVyKCJDYWNoZS1Db250cm9sOiBuby1jYWNoZSwgcHJpdmF0ZSwgbWF4
LWFnZT0wIik7CisgICAgaGVhZGVyKCJDb250ZW50LVR5cGU6IHRleHQvaHRtbCIpOworPz4KKwor
PGh0bWw+PGJvZHk+Cis8ZGl2IGlkPSJyZWZlcnJlciI+CitSZWZlcnJlcjogPD9waHAgZWNobyAk
X1NFUlZFUlsnSFRUUF9SRUZFUkVSJ107ID8+Cis8L2Rpdj4KKzxici8+Cis8c2NyaXB0PgorICAg
IHZhciBjb25zb2xlV2luZG93ID0gd2luZG93Lm9wZW4oIiIsICJjb25zb2xlV2luZG93Iik7Cisg
ICAgaWYgKGNvbnNvbGVXaW5kb3cpIHsKKyAgICAgICAgY29uc29sZVdpbmRvdy5sb2coZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInJlZmVycmVyIikuaW5uZXJUZXh0KTsKKyAgICAgICAgY29uc29s
ZVdpbmRvdy5sb2coIndpbmRvdy5vcGVuZXI6ICIgKyAod2luZG93Lm9wZW5lciA/IHdpbmRvdy5v
cGVuZXIubG9jYXRpb24gOiAiIikpOworICAgIH0KKyAgICAKKyAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25l
KCk7Cis8L3NjcmlwdD4KKworPC9ib2R5PjwvaHRtbD4K
</data>
<flag name="review"
          id="20125"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39463</attachid>
            <date>2009-09-11 11:58:24 -0700</date>
            <delta_ts>2009-10-12 14:56:25 -0700</delta_ts>
            <desc>Attempt #2</desc>
            <filename>patch2.txt</filename>
            <type>text/plain</type>
            <size>26212</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODMwOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMDktMDktMTEgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgc3VwcG9ydCBmb3IgbGluayByZWxhdGlvbnMgaW4gSFRNTEFuY2hvckVsZW1lbnQgYW5kIGlt
cGxlbWVudCByZWw9Im5vcmVmZXJyZXIiLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yODk4NgorCisgICAgICAgIFRlc3RzOiBodHRwL3Rlc3RzL25h
dmlnYXRpb24vbm8tcmVmZXJyZXItcmVzZXQuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0
cy9uYXZpZ2F0aW9uL25vLXJlZmVycmVyLXNhbWUtd2luZG93Lmh0bWwKKyAgICAgICAgICAgICAg
IGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9uby1yZWZlcnJlci1zdWJmcmFtZS5odG1sCisgICAgICAg
ICAgICAgICBodHRwL3Rlc3RzL25hdmlnYXRpb24vbm8tcmVmZXJyZXItdGFyZ2V0LWJsYW5rLmh0
bWwKKworICAgICAgICAqIGh0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwOiBBZGQgc3VwcG9ydCBm
b3Igbm9yZWZlcnJlciBsaW5rIHJlbGF0aW9uCisgICAgICAgIChXZWJDb3JlOjpIVE1MQW5jaG9y
RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQW5j
aG9yRWxlbWVudDo6c2hvdWxkU2VuZFJlZmVycmVyKToKKyAgICAgICAgKiBodG1sL0hUTUxBbmNo
b3JFbGVtZW50Lmg6IEFkZCBzdXBwb3J0IGZvciBub3JlZmVycmVyIGxpbmsgcmVsYXRpb24KKyAg
ICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVM
b2FkZXI6OkZyYW1lTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjcmVh
dGVXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNoYW5nZUxvY2F0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjp1cmxTZWxlY3RlZCk6IEFkZCBwYXJh
bWV0ZXIgZm9yIHJlZmVycmVyIHBvbGljeQorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6
OnJlZGlyZWN0aW9uVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6
bG9hZEZyYW1lUmVxdWVzdCk6IEFkZCBwYXJhbWV0ZXIgZm9yIHJlZmVycmVyIHBvbGljeQorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNvbnRpbnVlTG9hZEFmdGVyTmV3V2luZG93UG9s
aWN5KTogU3VwcHJlc3Mgb3BlbmVyIGlmIHJlcXVlc3RlZCBieSBSZWZlcnJlclBvbGljeS4KKyAg
ICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuaDogVXBkYXRlIHVybFNlbGVjdGVkIGFuZCBsb2Fk
RnJhbWVSZXF1ZXN0IHByb3RvdHlwZXMKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXJUeXBl
cy5oOiBBZGQgZW51bSBmb3IgcmVmZXJyZXIgcG9saWN5CisgICAgICAgICogcGFnZS9Db250ZXh0
TWVudUNvbnRyb2xsZXIuY3BwOiBVcGRhdGUgY2FsbCB0byB1cmxTZWxlY3RlZCgpCisgICAgICAg
IChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVk
KToKKyAgICAgICAgKiBzdmcvU1ZHQUVsZW1lbnQuY3BwOiBVcGRhdGUgY2FsbCB0byB1cmxTZWxl
Y3RlZCgpCisgICAgICAgIChXZWJDb3JlOjpTVkdBRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cik6CisKIDIwMDktMDktMTEgIFN0ZXZlIEZhbGtlbmJ1cmcgIDxzZmFsa2VuQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MQW5jaG9yRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBbmNo
b3JFbGVtZW50LmNwcAkocmV2aXNpb24gNDgzMDkpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEFuY2hv
ckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAi
RE5TLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5j
bHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCkBAIC0y
MDAsNyArMjAxLDcgQEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZAog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKCFldnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSAmJiBkb2N1
bWVudCgpLT5mcmFtZSgpKQotICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVy
KCktPnVybFNlbGVjdGVkKGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybCksIGdldEF0dHJpYnV0
ZSh0YXJnZXRBdHRyKSwgZXZ0LCBmYWxzZSwgZmFsc2UsIHRydWUpOworICAgICAgICAgICAgZG9j
dW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPnVybFNlbGVjdGVkKGRvY3VtZW50KCktPmNvbXBs
ZXRlVVJMKHVybCksIGdldEF0dHJpYnV0ZSh0YXJnZXRBdHRyKSwgZXZ0LCBmYWxzZSwgZmFsc2Us
IHRydWUsIHNob3VsZFNlbmRSZWZlcnJlcigpID8gU2VuZFJlZmVycmVyIDogTm9SZWZlcnJlcik7
CiAKICAgICAgICAgZXZ0LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgIH0gZWxzZSBpZiAoaXNM
aW5rKCkgJiYgaXNDb250ZW50RWRpdGFibGUoKSkgewpAQCAtMzIxLDYgKzMyMiwxMSBAQCB2b2lk
IEhUTUxBbmNob3JFbGVtZW50OjpzZXRIcmVmKGNvbnN0IEF0CiAgICAgc2V0QXR0cmlidXRlKGhy
ZWZBdHRyLCB2YWx1ZSk7CiB9CiAKK2Jvb2wgSFRNTEFuY2hvckVsZW1lbnQ6OnNob3VsZFNlbmRS
ZWZlcnJlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuICFDbGFzc05hbWVzKGdldEF0dHJpYnV0ZShy
ZWxBdHRyKSwgZG9jdW1lbnQoKS0+aW5Db21wYXRNb2RlKCkpLmNvbnRhaW5zKCJub3JlZmVycmVy
Iik7Cit9CisKIGNvbnN0IEF0b21pY1N0cmluZyYgSFRNTEFuY2hvckVsZW1lbnQ6Om5hbWUoKSBj
b25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobmFtZUF0dHIpOwpJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hU
TUxBbmNob3JFbGVtZW50LmgJKHJldmlzaW9uIDQ4MzA5KQorKysgV2ViQ29yZS9odG1sL0hUTUxB
bmNob3JFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDggQEAgcHVibGljOgog
CiAgICAgYm9vbCBpc0xpdmVMaW5rKCkgY29uc3Q7CiAKKyAgICBib29sIHNob3VsZFNlbmRSZWZl
cnJlcigpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAgSFRNTEFuY2hvckVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1l
TG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJ
KHJldmlzaW9uIDQ4MzA5KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQu
aCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNs
dWRlICJIVE1MQW5jaG9yRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxBcHBsZXRFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lRWxlbWVu
dC5oIgpAQCAtMjcyLDYgKzI3Myw3IEBAIEZyYW1lTG9hZGVyOjpGcmFtZUxvYWRlcihGcmFtZSog
ZnJhbWUsIEYKICAgICAsIG1fY29tbWl0dGVkRmlyc3RSZWFsRG9jdW1lbnRMb2FkKGZhbHNlKQog
ICAgICwgbV9kaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9uKGZhbHNlKQogICAgICwgbV9sb2FkaW5n
RnJvbUNhY2hlZFBhZ2UoZmFsc2UpCisgICAgLCBtX3N1cHByZXNzT3BlbmVySW5OZXdGcmFtZShm
YWxzZSkKICNpZm5kZWYgTkRFQlVHCiAgICAgLCBtX2RpZERpc3BhdGNoRGlkQ29tbWl0TG9hZChm
YWxzZSkKICNlbmRpZgpAQCAtMzI0LDcgKzMyNiw3IEBAIEZyYW1lKiBGcmFtZUxvYWRlcjo6Y3Jl
YXRlV2luZG93KEZyYW1lTG8KICAgICAgICAgRnJhbWUqIGZyYW1lID0gZnJhbWVMb2FkZXJGb3JG
cmFtZUxvb2t1cC0+ZnJhbWUoKS0+dHJlZSgpLT5maW5kKHJlcXVlc3QuZnJhbWVOYW1lKCkpOwog
ICAgICAgICBpZiAoZnJhbWUgJiYgc2hvdWxkQWxsb3dOYXZpZ2F0aW9uKGZyYW1lKSkgewogICAg
ICAgICAgICAgaWYgKCFyZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCktPmxvYWRGcmFtZVJlcXVlc3QocmVxdWVz
dCwgZmFsc2UsIGZhbHNlLCAwLCAwKTsKKyAgICAgICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCkt
PmxvYWRGcmFtZVJlcXVlc3QocmVxdWVzdCwgZmFsc2UsIGZhbHNlLCAwLCAwLCBTZW5kUmVmZXJy
ZXIpOwogICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQogICAgICAg
ICAgICAgICAgIHBhZ2UtPmNocm9tZSgpLT5mb2N1cygpOwogICAgICAgICAgICAgY3JlYXRlZCA9
IGZhbHNlOwpAQCAtMzkxLDEwICszOTMsMTAgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y2hhbmdlTG9j
YXRpb24oY29uc3QgSwogICAgIGlmIChleGVjdXRlSWZKYXZhU2NyaXB0VVJMKHJlcXVlc3QudXJs
KCksIHVzZXJHZXN0dXJlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdXJsU2VsZWN0ZWQocmVx
dWVzdCwgIl9zZWxmIiwgMCwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QsIHVzZXJH
ZXN0dXJlKTsKKyAgICB1cmxTZWxlY3RlZChyZXF1ZXN0LCAiX3NlbGYiLCAwLCBsb2NrSGlzdG9y
eSwgbG9ja0JhY2tGb3J3YXJkTGlzdCwgdXNlckdlc3R1cmUsIFNlbmRSZWZlcnJlcik7CiB9CiAK
LXZvaWQgRnJhbWVMb2FkZXI6OnVybFNlbGVjdGVkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgY29uc3QgU3RyaW5nJiBwYXNzZWRUYXJnZXQsIFBhc3NSZWZQdHI8RXZlbnQ+IHRyaWdn
ZXJpbmdFdmVudCwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0LCBi
b29sIHVzZXJHZXN0dXJlKQordm9pZCBGcmFtZUxvYWRlcjo6dXJsU2VsZWN0ZWQoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIHBhc3NlZFRhcmdldCwgUGFzc1Jl
ZlB0cjxFdmVudD4gdHJpZ2dlcmluZ0V2ZW50LCBib29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tC
YWNrRm9yd2FyZExpc3QsIGJvb2wgdXNlckdlc3R1cmUsIFJlZmVycmVyUG9saWN5IHJlZmVycmVy
UG9saWN5KQogewogICAgIGlmIChleGVjdXRlSWZKYXZhU2NyaXB0VVJMKHJlcXVlc3QudXJsKCks
IHVzZXJHZXN0dXJlLCBmYWxzZSkpCiAgICAgICAgIHJldHVybjsKQEAgLTQwNSwxMSArNDA3LDE2
IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnVybFNlbGVjdGVkKGNvbnN0IFJlc28KIAogICAgIEZyYW1l
TG9hZFJlcXVlc3QgZnJhbWVSZXF1ZXN0KHJlcXVlc3QsIHRhcmdldCk7CiAKLSAgICBpZiAoZnJh
bWVSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLmh0dHBSZWZlcnJlcigpLmlzRW1wdHkoKSkKKyAg
ICBpZiAocmVmZXJyZXJQb2xpY3kgPT0gTm9SZWZlcnJlcikgeworICAgICAgICBtX3N1cHByZXNz
T3BlbmVySW5OZXdGcmFtZSA9IHRydWU7CisgICAgICAgIHNldE9wZW5lcigwKTsKKyAgICB9IGVs
c2UgaWYgKGZyYW1lUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5odHRwUmVmZXJyZXIoKS5pc0Vt
cHR5KCkpCiAgICAgICAgIGZyYW1lUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQUmVm
ZXJyZXIobV9vdXRnb2luZ1JlZmVycmVyKTsKICAgICBhZGRIVFRQT3JpZ2luSWZOZWVkZWQoZnJh
bWVSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLCBvdXRnb2luZ09yaWdpbigpKTsKIAotICAgIGxv
YWRGcmFtZVJlcXVlc3QoZnJhbWVSZXF1ZXN0LCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJk
TGlzdCwgdHJpZ2dlcmluZ0V2ZW50LCAwKTsKKyAgICBsb2FkRnJhbWVSZXF1ZXN0KGZyYW1lUmVx
dWVzdCwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QsIHRyaWdnZXJpbmdFdmVudCwg
MCwgcmVmZXJyZXJQb2xpY3kpOworCisgICAgbV9zdXBwcmVzc09wZW5lckluTmV3RnJhbWUgPSBm
YWxzZTsKIH0KIAogYm9vbCBGcmFtZUxvYWRlcjo6cmVxdWVzdEZyYW1lKEhUTUxGcmFtZU93bmVy
RWxlbWVudCogb3duZXJFbGVtZW50LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgQXRv
bWljU3RyaW5nJiBmcmFtZU5hbWUpCkBAIC0xNDc2LDcgKzE0ODMsNyBAQCB2b2lkIEZyYW1lTG9h
ZGVyOjpyZWRpcmVjdGlvblRpbWVyRmlyZWQoCiAgICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJl
Y3Rpb246Omhpc3RvcnlOYXZpZ2F0aW9uOgogICAgICAgICAgICAgaWYgKHJlZGlyZWN0aW9uLT5o
aXN0b3J5U3RlcHMgPT0gMCkgewogICAgICAgICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBmb3Ig
Z28oMCkgZnJvbSBhIGZyYW1lIC0+IHJlbG9hZCBvbmx5IHRoZSBmcmFtZQotICAgICAgICAgICAg
ICAgIHVybFNlbGVjdGVkKG1fVVJMLCAiIiwgMCwgcmVkaXJlY3Rpb24tPmxvY2tIaXN0b3J5LCBy
ZWRpcmVjdGlvbi0+bG9ja0JhY2tGb3J3YXJkTGlzdCwgcmVkaXJlY3Rpb24tPndhc1VzZXJHZXN0
dXJlKTsKKyAgICAgICAgICAgICAgICB1cmxTZWxlY3RlZChtX1VSTCwgIiIsIDAsIHJlZGlyZWN0
aW9uLT5sb2NrSGlzdG9yeSwgcmVkaXJlY3Rpb24tPmxvY2tCYWNrRm9yd2FyZExpc3QsIHJlZGly
ZWN0aW9uLT53YXNVc2VyR2VzdHVyZSwgU2VuZFJlZmVycmVyKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBnbyhpIT0wKSBmcm9tIGEgZnJh
bWUgbmF2aWdhdGVzIGludG8gdGhlIGhpc3Rvcnkgb2YgdGhlIGZyYW1lIG9ubHksCkBAIC0xNDkx
LDcgKzE0OTgsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpyZWRpcmVjdGlvblRpbWVyRmlyZWQoCiAg
ICAgICAgICAgICBpZiAoIXJlZGlyZWN0aW9uLT5mb3JtU3RhdGUtPnNvdXJjZUZyYW1lKCktPmxv
YWRlcigpLT5zaG91bGRBbGxvd05hdmlnYXRpb24obV9mcmFtZSkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgbG9hZEZyYW1lUmVxdWVzdChyZWRpcmVjdGlvbi0+ZnJhbWVS
ZXF1ZXN0LCByZWRpcmVjdGlvbi0+bG9ja0hpc3RvcnksIHJlZGlyZWN0aW9uLT5sb2NrQmFja0Zv
cndhcmRMaXN0LAotICAgICAgICAgICAgICAgIHJlZGlyZWN0aW9uLT5ldmVudCwgcmVkaXJlY3Rp
b24tPmZvcm1TdGF0ZSk7CisgICAgICAgICAgICAgICAgcmVkaXJlY3Rpb24tPmV2ZW50LCByZWRp
cmVjdGlvbi0+Zm9ybVN0YXRlLCBTZW5kUmVmZXJyZXIpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtMjIzNCw3ICsyMjQxLDcgQEAgc3RhdGljIGJvb2wgaXNGZWVkV2l0aE5lc3Rl
ZFByb3RvY29sSW5IVAogfQogCiB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkRnJhbWVSZXF1ZXN0KGNv
bnN0IEZyYW1lTG9hZFJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9j
a0JhY2tGb3J3YXJkTGlzdCwKLSAgICBQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgUGFzc1JlZlB0
cjxGb3JtU3RhdGU+IGZvcm1TdGF0ZSkKKyAgICBQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgUGFz
c1JlZlB0cjxGb3JtU3RhdGU+IGZvcm1TdGF0ZSwgUmVmZXJyZXJQb2xpY3kgcmVmZXJyZXJQb2xp
Y3kpCiB7ICAgIAogICAgIEtVUkwgdXJsID0gcmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51cmwo
KTsKIApAQCAtMjI1Myw3ICsyMjYwLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZEZyYW1lUmVx
dWVzdChjb25zdAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHNob3VsZEhpZGVSZWZlcnJl
cih1cmwsIHJlZmVycmVyKSkKKyAgICBpZiAoc2hvdWxkSGlkZVJlZmVycmVyKHVybCwgcmVmZXJy
ZXIpIHx8IHJlZmVycmVyUG9saWN5ID09IE5vUmVmZXJyZXIpCiAgICAgICAgIHJlZmVycmVyID0g
U3RyaW5nKCk7CiAgICAgCiAgICAgRnJhbWVMb2FkVHlwZSBsb2FkVHlwZTsKQEAgLTQxMjEsNyAr
NDEyOCw4IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNvbnRpbnVlTG9hZEFmdGVyTmV3V2kKIAogICAg
IG1haW5GcmFtZS0+bG9hZGVyKCktPnNldE9wZW5lZEJ5RE9NKCk7CiAgICAgbWFpbkZyYW1lLT5s
b2FkZXIoKS0+bV9jbGllbnQtPmRpc3BhdGNoU2hvdygpOwotICAgIG1haW5GcmFtZS0+bG9hZGVy
KCktPnNldE9wZW5lcihmcmFtZS5nZXQoKSk7CisgICAgaWYgKCFtX3N1cHByZXNzT3BlbmVySW5O
ZXdGcmFtZSkKKyAgICAgICAgbWFpbkZyYW1lLT5sb2FkZXIoKS0+c2V0T3BlbmVyKGZyYW1lLmdl
dCgpKTsKICAgICBtYWluRnJhbWUtPmxvYWRlcigpLT5sb2FkV2l0aE5hdmlnYXRpb25BY3Rpb24o
cmVxdWVzdCwgTmF2aWdhdGlvbkFjdGlvbigpLCBmYWxzZSwgRnJhbWVMb2FkVHlwZVN0YW5kYXJk
LCBmb3JtU3RhdGUpOwogfQogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHJldmlzaW9uIDQ4MzA5
KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTMx
LDcgKzEzMSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBsb2FkVVJMSW50
b0NoaWxkRnJhbWUoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgcmVmZXJlciwgRnJhbWUqKTsK
IAogICAgICAgICB2b2lkIGxvYWRGcmFtZVJlcXVlc3QoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYs
IGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCwgIC8vIENhbGxlZCBi
eSBzdWJtaXRGb3JtLCBjYWxscyBsb2FkUG9zdFJlcXVlc3QgYW5kIGxvYWRVUkwuCi0gICAgICAg
ICAgICBQYXNzUmVmUHRyPEV2ZW50PiwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+KTsKKyAgICAgICAg
ICAgIFBhc3NSZWZQdHI8RXZlbnQ+LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4sIFJlZmVycmVyUG9s
aWN5KTsKIAogICAgICAgICB2b2lkIGxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBs
b2NrSGlzdG9yeSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENh
bGxlZCBieSBXZWJGcmFtZSwgY2FsbHMgbG9hZChSZXNvdXJjZVJlcXVlc3QsIFN1YnN0aXR1dGVE
YXRhKS4KICAgICAgICAgdm9pZCBsb2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN1
YnN0aXR1dGVEYXRhJiwgYm9vbCBsb2NrSGlzdG9yeSk7ICAgICAgICAgICAgICAgICAvLyBDYWxs
ZWQgYm90aCBieSBXZWJGcmFtZSBhbmQgaW50ZXJuYWxseSwgY2FsbHMgbG9hZChEb2N1bWVudExv
YWRlciopLgpAQCAtMjUzLDcgKzI1Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dm9pZCBzZXREZWZlcnNMb2FkaW5nKGJvb2wpOwogCiAgICAgICAgIHZvaWQgY2hhbmdlTG9jYXRp
b24oY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGJvb2wgbG9ja0hpc3Rvcnkg
PSB0cnVlLCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QgPSB0cnVlLCBib29sIHVzZXJHZXN0dXJl
ID0gZmFsc2UsIGJvb2wgcmVmcmVzaCA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCB1cmxTZWxlY3Rl
ZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIHRhcmdldCwgUGFzc1JlZlB0
cjxFdmVudD4sIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCwgYm9v
bCB1c2VyR2VzdHVyZSk7CisgICAgICAgIHZvaWQgdXJsU2VsZWN0ZWQoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIFBhc3NSZWZQdHI8RXZlbnQ+LCBib29sIGxv
Y2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QsIGJvb2wgdXNlckdlc3R1cmUsIFJl
ZmVycmVyUG9saWN5KTsKICAgICAgICAgYm9vbCByZXF1ZXN0RnJhbWUoSFRNTEZyYW1lT3duZXJF
bGVtZW50KiwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IEF0b21pY1N0cmluZyYgZnJhbWVOYW1l
KTsKIAogICAgICAgICB2b2lkIHN1Ym1pdEZvcm0oY29uc3QgY2hhciogYWN0aW9uLCBjb25zdCBT
dHJpbmcmIHVybCwKQEAgLTYxNCw2ICs2MTQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICAgICAgRnJhbWUqIG1fb3BlbmVyOwogICAgICAgICBIYXNoU2V0PEZyYW1lKj4gbV9vcGVuZWRG
cmFtZXM7CisgICAgICAgIGJvb2wgbV9zdXBwcmVzc09wZW5lckluTmV3RnJhbWU7CiAKICAgICAg
ICAgYm9vbCBtX29wZW5lZEJ5RE9NOwogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
clR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJUeXBlcy5o
CShyZXZpc2lvbiA0ODMwOSkKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyVHlwZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBVbmxvYWRFdmVudFBvbGljeVVubG9hZE9ubHksCiAgICAgICAgIFVubG9hZEV2ZW50UG9s
aWN5VW5sb2FkQW5kUGFnZUhpZGUKICAgICB9OworCisgICAgZW51bSBSZWZlcnJlclBvbGljeSB7
CisgICAgICAgIFNlbmRSZWZlcnJlciwKKyAgICAgICAgTm9SZWZlcnJlcgorICAgIH07CiB9CiAK
ICNlbmRpZgpJbmRleDogV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAJKHJldmlz
aW9uIDQ4MzA5KQorKysgV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIxMSw3ICsyMTEsNyBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxl
cjo6Y29udGV4dE1lbnVJCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnT3Blbkxpbms6CiAgICAgICAgIGlmIChGcmFtZSogdGFyZ2V0RnJhbWUgPSByZXN1bHQudGFy
Z2V0RnJhbWUoKSkKLSAgICAgICAgICAgIHRhcmdldEZyYW1lLT5sb2FkZXIoKS0+bG9hZEZyYW1l
UmVxdWVzdChGcmFtZUxvYWRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdChyZXN1bHQuYWJzb2x1dGVM
aW5rVVJMKCksIGZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZlcnJlcigpKSksIGZhbHNlLCBm
YWxzZSwgMCwgMCk7CisgICAgICAgICAgICB0YXJnZXRGcmFtZS0+bG9hZGVyKCktPmxvYWRGcmFt
ZVJlcXVlc3QoRnJhbWVMb2FkUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QocmVzdWx0LmFic29sdXRl
TGlua1VSTCgpLCBmcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKSkpLCBmYWxzZSwg
ZmFsc2UsIDAsIDAsIFNlbmRSZWZlcnJlcik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG9w
ZW5OZXdXaW5kb3cocmVzdWx0LmFic29sdXRlTGlua1VSTCgpLCBmcmFtZSk7CiAgICAgICAgIGJy
ZWFrOwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHQUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3ZnL1NWR0FFbGVtZW50LmNwcAkocmV2aXNpb24gNDgzMDkpCisrKyBXZWJDb3JlL3N2
Zy9TVkdBRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNs
dWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKICNpbmNsdWRlICJLZXlib2Fy
ZEV2ZW50LmgiCiAjaW5jbHVkZSAiTWFwcGVkQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiTW91c2VF
dmVudC5oIgpAQCAtMTUyLDcgKzE1Myw3IEBAIHZvaWQgU1ZHQUVsZW1lbnQ6OmRlZmF1bHRFdmVu
dEhhbmRsZXIoRXYKICAgICAgICAgICAgIH0KICNlbmRpZgogICAgICAgICAgICAgaWYgKGRvY3Vt
ZW50KCktPmZyYW1lKCkpCi0gICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9h
ZGVyKCktPnVybFNlbGVjdGVkKGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybCksIHRhcmdldCwg
ZXZ0LCBmYWxzZSwgZmFsc2UsIHRydWUpOworICAgICAgICAgICAgICAgIGRvY3VtZW50KCktPmZy
YW1lKCktPmxvYWRlcigpLT51cmxTZWxlY3RlZChkb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1cmwp
LCB0YXJnZXQsIGV2dCwgZmFsc2UsIGZhbHNlLCB0cnVlLCBTZW5kUmVmZXJyZXIpOwogICAgICAg
ICB9CiAKICAgICAgICAgZXZ0LT5zZXREZWZhdWx0SGFuZGxlZCgpOwpJbmRleDogTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNp
b24gNDgzMDkpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwyMyBAQAorMjAwOS0wOS0xMSAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0
ZXN0cyBmb3Igbm9yZWZlcnJlciBsaW5rIHJlbGF0aW9uLgorCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODk4NgorCisgICAgICAgICogaHR0cC90ZXN0
cy9uYXZpZ2F0aW9uL25vLXJlZmVycmVyLXJlc2V0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL25vLXJlZmVycmVyLXJlc2V0Lmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9uby1yZWZlcnJlci1zYW1lLXdpbmRv
dy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9u
by1yZWZlcnJlci1zYW1lLXdpbmRvdy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3Rz
L25hdmlnYXRpb24vbm8tcmVmZXJyZXItc3ViZnJhbWUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24vbm8tcmVmZXJyZXItc3ViZnJhbWUuaHRtbDog
QWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL25vLXJlZmVycmVyLXRhcmdl
dC1ibGFuay1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbmF2aWdh
dGlvbi9uby1yZWZlcnJlci10YXJnZXQtYmxhbmsuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0
cC90ZXN0cy9uYXZpZ2F0aW9uL3Jlc291cmNlcy9uby1yZWZlcnJlci1oZWxwZXIucGhwOiBBZGRl
ZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2VzL25vLXJlZmVycmVy
LXJlc2V0LWhlbHBlci5waHA6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbmF2aWdhdGlv
bi9yZXNvdXJjZXMvbm8tcmVmZXJyZXItc2FtZS13aW5kb3ctaGVscGVyLnBocDogQWRkZWQuCisK
IDIwMDktMDktMTEgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEdl
dCB1c2VyIHNjcmlwdC9zdHlsZXNoZWV0IHRlc3RzIHJ1bm5pbmcgb24gV2luZG93cwpJbmRleDog
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL25vLXJlZmVycmVyLXJlc2V0LWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24v
bm8tcmVmZXJyZXItcmVzZXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL25vLXJlZmVycmVyLXJlc2V0LWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorVGhpcyB0ZXN0cyB3aGV0aGVyIHJlZmVycmVy
IGluZm9ybWF0aW9uIGdldHMgcHJvcGVybHkgc2V0IGFuZCByZXNldCB3aGVuICJub3JlZmVycmVy
IiBsaW5rcyBhcmUgcHJlc2VudC4gV2UgZG8gdGhlIGZvbGxvd2luZzoKKzEuIE9wZW4gYSBsaW5r
IGluIGEgbmV3IHdpbmRvdzogcmVmZXJyZXIgaXMgc2VudCBhbmQgd2luZG93Lm9wZW5lciBpcyBz
ZW50LgorMi4gQ2xpY2sgYSByZWw9Im5vcmVmZXJyZXIiIGxpbms6IHJlZmVycmVyIGFuZCB3aW5k
b3cub3BlbmVyIGFyZSBudWxsZWQuCiszLiBDbGljayBhIGxpbmsgd2l0aG91dCByZWw9Im5vcmVm
ZXJyZXIiOiByZWZlcnJlciBpcyBzZW50LCBidXQgd2luZG93Lm9wZW5lciBpcyBzdGlsbCBudWxs
IChzaW5jZSBpdCB3YXMgbnVsbGVkIGluIHRoZSBwcmV2aW91cyBzdGVwKS4gCitTdGFydCByZXNl
dCB0ZXN0CitSZWZlcnJlcjogaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vbm8tcmVm
ZXJyZXItcmVzZXQuaHRtbAord2luZG93Lm9wZW5lcjogaHR0cDovLzEyNy4wLjAuMTo4MDAwL25h
dmlnYXRpb24vbm8tcmVmZXJyZXItcmVzZXQuaHRtbAorUmVmZXJyZXI6Cit3aW5kb3cub3BlbmVy
OgorUmVmZXJyZXI6IGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9u
by1yZWZlcnJlci1yZXNldC1oZWxwZXIucGhwCit3aW5kb3cub3BlbmVyOgpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9u
by1yZWZlcnJlci1yZXNldC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvbmF2aWdhdGlvbi9uby1yZWZlcnJlci1yZXNldC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL25vLXJlZmVycmVyLXJlc2V0Lmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMzAgQEAKKzxodG1sPjxib2R5PgorVGhpcyB0ZXN0cyB3aGV0
aGVyIHJlZmVycmVyIGluZm9ybWF0aW9uIGdldHMgcHJvcGVybHkgc2V0IGFuZCByZXNldCB3aGVu
ICJub3JlZmVycmVyIiBsaW5rcyBhcmUgcHJlc2VudC4gV2UgZG8gdGhlIGZvbGxvd2luZzo8YnIv
PgorMS4gT3BlbiBhIGxpbmsgaW4gYSBuZXcgd2luZG93OiByZWZlcnJlciBpcyBzZW50IGFuZCB3
aW5kb3cub3BlbmVyIGlzIHNlbnQuPGJyLz4KKzIuIENsaWNrIGEgcmVsPSJub3JlZmVycmVyIiBs
aW5rOiByZWZlcnJlciBhbmQgd2luZG93Lm9wZW5lciBhcmUgbnVsbGVkLjxici8+CiszLiBDbGlj
ayBhIGxpbmsgd2l0aG91dCByZWw9Im5vcmVmZXJyZXIiOiByZWZlcnJlciBpcyBzZW50LCBidXQg
d2luZG93Lm9wZW5lciBpcyBzdGlsbCBudWxsIChzaW5jZSBpdCB3YXMgbnVsbGVkIGluIHRoZSBw
cmV2aW91cyBzdGVwKS4KKzxici8+Cis8YSBpZD0ibGluayIgaHJlZj0icmVzb3VyY2VzL25vLXJl
ZmVycmVyLXJlc2V0LWhlbHBlci5waHAiIHRhcmdldD0iX2JsYW5rIj5TdGFydCByZXNldCB0ZXN0
PC9hPgorPHNjcmlwdD4KKyAgICB3aW5kb3cubmFtZSA9ICJjb25zb2xlV2luZG93IjsKKyAgICB3
aW5kb3cubm9yZWZlcnJlclN0ZXBEb25lID0gZmFsc2U7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0
KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldENhbk9wZW5XaW5kb3dzKHRydWUp
OworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQor
CisgICAgdmFyIHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsaW5rIik7DQorICAg
IGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHRhcmdldC5vZmZzZXRMZWZ0ICsgMiwgdGFyZ2V0Lm9m
ZnNldFRvcCArIDIpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworICAgIGV2ZW50U2Vu
ZGVyLm1vdXNlVXAoKTsKKyAgICAKK2Z1bmN0aW9uIGxvZyhtc2cpDQorew0KKyAgICB2YXIgbGlu
ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOw0KKyAgICBsaW5lLmFwcGVuZENoaWxk
KGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1zZykpOw0KKyAgICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGxpbmUpOw0KK30KKzwvc2NyaXB0PgorPGRpdiBp
ZD0iY29uc29sZSI+PC9kaXY+Cis8L2JvZHk+PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9uYXZpZ2F0aW9uL25vLXJlZmVycmVyLXNhbWUtd2luZG93LWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vbm8tcmVmZXJy
ZXItc2FtZS13aW5kb3ctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9uYXZpZ2F0aW9uL25vLXJlZmVycmVyLXNhbWUtd2luZG93LWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitUaGUgUmVmZXJyZXIgZGlzcGxheWVkIGJl
bG93IHNob3VsZCBiZSBlbXB0eS4KK1JlZmVycmVyOgorUEFTUwpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9uby1yZWZl
cnJlci1zYW1lLXdpbmRvdy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvbmF2aWdhdGlvbi9uby1yZWZlcnJlci1zYW1lLXdpbmRvdy5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL25vLXJlZmVycmVyLXNhbWUtd2lu
ZG93Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjcgQEAKKzxodG1sPjxib2R5PgorVGhp
cyB0ZXN0cyB0aGUgYmFzaWMgZnVuY3Rpb25hbGl0eSBvZiB0aGUgIm5vcmVmZXJyZXIiIGxpbmsg
cmVsYXRpb24gb24gYW5jaG9yIHRhZ3MuIFRoZSBsaW5rIGJlbG93IHNob3VsZCBub3QKK3NlbmQg
YW4gaHR0cCByZWZlcnJlciwgYW5kIHRoZSByZXN1bHRpbmcgd2luZG93IHNob3VsZCBoYXZlIGl0
cyBvcGVuZXIgYXR0cmlidXRlIHNldCB0byBudWxsLiAgVGhlIHZhbHVlcworb2YgdGhlIHJlZmVy
cmVyIGFuZCB3aW5kb3cub3BlbmVyIHNob3VsZCBiZSBlbXB0eSBiZWxvdy4KKzxici8+Cis8YSBp
ZD0ibGluayIgaHJlZj0icmVzb3VyY2VzL25vLXJlZmVycmVyLXNhbWUtd2luZG93LWhlbHBlci5w
aHAiIHJlbD0ibm9yZWZlcnJlciI+U3RhcnQgbm8gcmVmZXJyZXIgdGVzdDwvYT4KKzxzY3JpcHQ+
CisgICAgd2luZG93Lm5hbWUgPSAiY29uc29sZVdpbmRvdyI7CisgICAgaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAg
ICB9CisKKyAgICB2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxpbmsiKTsN
CisgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8odGFyZ2V0Lm9mZnNldExlZnQgKyAyLCB0YXJn
ZXQub2Zmc2V0VG9wICsgMik7CisgICAgZXZlbnRTZW5kZXIubW91c2VEb3duKCk7CisgICAgZXZl
bnRTZW5kZXIubW91c2VVcCgpOworICAgIAorZnVuY3Rpb24gbG9nKG1zZykNCit7DQorICAgIHZh
ciBsaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7DQorICAgIGxpbmUuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobXNnKSk7DQorICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdjb25zb2xlJykuYXBwZW5kQ2hpbGQobGluZSk7DQorfQorPC9zY3JpcHQ+Cis8
ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzwvYm9keT48L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vbm8tcmVmZXJyZXItc3ViZnJhbWUtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9uby1yZWZl
cnJlci1zdWJmcmFtZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL25hdmlnYXRpb24vbm8tcmVmZXJyZXItc3ViZnJhbWUtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKK1RoaXMgdGVzdHMgYmVoYXZpb3Igb2YgIm5vcmVm
ZXJyZXIiIGxpbmtzIGluIHN1YmZyYW1lcy4gQSByZWZlcnJlciBzaG91bGQgbm90IGJlIHNlbnQg
YW5kIHdpbmRvdy5vcGVuZXIgc2hvdWxkIHJlbWFpbiBudWxsLgorTG9hZCBzdWJmcmFtZSAKK1Jl
ZmVycmVyOgord2luZG93Lm9wZW5lcjoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4
OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vbm8tcmVmZXJyZXItc3ViZnJhbWUu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vbm8t
cmVmZXJyZXItc3ViZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvbmF2aWdhdGlvbi9uby1yZWZlcnJlci1zdWJmcmFtZS5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDI1IEBACis8aHRtbD48Ym9keT4KK1RoaXMgdGVzdHMgYmVoYXZpb3Igb2YgIm5v
cmVmZXJyZXIiIGxpbmtzIGluIHN1YmZyYW1lcy4gQSByZWZlcnJlciBzaG91bGQgbm90IGJlIHNl
bnQgYW5kIHdpbmRvdy5vcGVuZXIgc2hvdWxkIHJlbWFpbiBudWxsLjxici8+Cis8YSBpZD0ibGlu
ayIgaHJlZj0icmVzb3VyY2VzL25vLXJlZmVycmVyLWhlbHBlci5waHAiIHJlbD0ibm9yZWZlcnJl
ciIgdGFyZ2V0PSJzdWJmcmFtZSI+TG9hZCBzdWJmcmFtZTwvYT4KKzxpZnJhbWUgaWQ9InN1YmZy
YW1lIiBzcmM9ImFib3V0OmJsYW5rIj48L2lmcmFtZT4KKzxzY3JpcHQ+CisgICAgd2luZG93Lm5h
bWUgPSAiY29uc29sZVdpbmRvdyI7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAgICB2YXIg
dGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxpbmsiKTsNCisgICAgZXZlbnRTZW5k
ZXIubW91c2VNb3ZlVG8odGFyZ2V0Lm9mZnNldExlZnQgKyAyLCB0YXJnZXQub2Zmc2V0VG9wICsg
Mik7CisgICAgZXZlbnRTZW5kZXIubW91c2VEb3duKCk7CisgICAgZXZlbnRTZW5kZXIubW91c2VV
cCgpOworICAgIAorZnVuY3Rpb24gbG9nKG1zZykNCit7DQorICAgIHZhciBsaW5lID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7DQorICAgIGxpbmUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlVGV4dE5vZGUobXNnKSk7DQorICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25z
b2xlJykuYXBwZW5kQ2hpbGQobGluZSk7DQorfQorPC9zY3JpcHQ+Cis8ZGl2IGlkPSJjb25zb2xl
Ij48L2Rpdj4KKzwvYm9keT48L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25h
dmlnYXRpb24vbm8tcmVmZXJyZXItdGFyZ2V0LWJsYW5rLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vbm8tcmVmZXJyZXItdGFyZ2V0
LWJsYW5rLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvbmF2aWdhdGlvbi9uby1yZWZlcnJlci10YXJnZXQtYmxhbmstZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKK1RoaXMgdGVzdHMgdGhlIGZ1bmN0aW9uYWxpdHkgb2Yg
dGhlICJub3JlZmVycmVyIiBsaW5rIHJlbGF0aW9uIG9uIGFuY2hvciB0YWdzLiBUaGUgbGluayBi
ZWxvdyBzaG91bGQgbm90IHNlbmQgYW4gaHR0cCByZWZlcnJlciwgYW5kIHRoZSByZXN1bHRpbmcg
d2luZG93IHNob3VsZCBoYXZlIGl0cyBvcGVuZXIgYXR0cmlidXRlIHNldCB0byBudWxsLiBUaGUg
dmFsdWVzIG9mIHRoZSByZWZlcnJlciBhbmQgd2luZG93Lm9wZW5lciBzaG91bGQgYmUgZW1wdHkg
YmVsb3cuCitTdGFydCBubyByZWZlcnJlciB0ZXN0CitSZWZlcnJlcjoKK3dpbmRvdy5vcGVuZXI6
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9uYXZpZ2F0aW9uL25vLXJlZmVycmVyLXRhcmdldC1ibGFuay5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9uby1yZWZlcnJlci10YXJnZXQtYmxh
bmsuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlv
bi9uby1yZWZlcnJlci10YXJnZXQtYmxhbmsuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy
OCBAQAorPGh0bWw+PGJvZHk+CitUaGlzIHRlc3RzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSAi
bm9yZWZlcnJlciIgbGluayByZWxhdGlvbiBvbiBhbmNob3IgdGFncy4gVGhlIGxpbmsgYmVsb3cg
c2hvdWxkIG5vdAorc2VuZCBhbiBodHRwIHJlZmVycmVyLCBhbmQgdGhlIHJlc3VsdGluZyB3aW5k
b3cgc2hvdWxkIGhhdmUgaXRzIG9wZW5lciBhdHRyaWJ1dGUgc2V0IHRvIG51bGwuICBUaGUgdmFs
dWVzCitvZiB0aGUgcmVmZXJyZXIgYW5kIHdpbmRvdy5vcGVuZXIgc2hvdWxkIGJlIGVtcHR5IGJl
bG93LgorPGJyLz4KKzxhIGlkPSJsaW5rIiBocmVmPSJyZXNvdXJjZXMvbm8tcmVmZXJyZXItaGVs
cGVyLnBocCIgcmVsPSJub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+U3RhcnQgbm8gcmVmZXJy
ZXIgdGVzdDwvYT4KKzxzY3JpcHQ+CisgICAgd2luZG93Lm5hbWUgPSAiY29uc29sZVdpbmRvdyI7
CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
LnNldENhbk9wZW5XaW5kb3dzKHRydWUpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53
YWl0VW50aWxEb25lKCk7CisgICAgfQorCisgICAgdmFyIHRhcmdldCA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJsaW5rIik7DQorICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHRhcmdldC5v
ZmZzZXRMZWZ0ICsgMiwgdGFyZ2V0Lm9mZnNldFRvcCArIDIpOworICAgIGV2ZW50U2VuZGVyLm1v
dXNlRG93bigpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKKworZnVuY3Rpb24gbG9nKG1z
ZykNCit7DQorICAgIHZhciBsaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7DQor
ICAgIGxpbmUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobXNnKSk7DQorICAg
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuYXBwZW5kQ2hpbGQobGluZSk7DQor
fQorPC9zY3JpcHQ+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzwvYm9keT48L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2VzL25vLXJlZmVy
cmVyLWhlbHBlci5waHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZp
Z2F0aW9uL3Jlc291cmNlcy9uby1yZWZlcnJlci1oZWxwZXIucGhwCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Jlc291cmNlcy9uby1yZWZlcnJlci1o
ZWxwZXIucGhwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxIEBACis8P3BocAorICAgIC8vIFBy
ZXZlbnQgZnJvbSBiZWluZyBjYWNoZWQuCisgICAgaGVhZGVyKCJDYWNoZS1Db250cm9sOiBuby1z
dG9yZSwgcHJpdmF0ZSwgbWF4LWFnZT0wIik7CisgICAgaGVhZGVyKCJDb250ZW50LVR5cGU6IHRl
eHQvaHRtbCIpOworPz4KKworPGh0bWw+PGJvZHk+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4K
KzxkaXYgaWQ9InJlZmVycmVyIj4KK1JlZmVycmVyOiA8P3BocCBlY2hvICRfU0VSVkVSWydIVFRQ
X1JFRkVSRVInXTsgPz4KKzwvZGl2PgorPGJyLz4KKzxzY3JpcHQ+CitmdW5jdGlvbiBsb2cobXNn
KQ0KK3sNCisgICAgdmFyIGxpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsNCisg
ICAgbGluZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtc2cpKTsNCisgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChsaW5lKTsNCit9
CisKKyAgICB2YXIgY29uc29sZVdpbmRvdyA9IHdpbmRvdy5vcGVuKCIiLCAiY29uc29sZVdpbmRv
dyIpOworICAgIGlmIChjb25zb2xlV2luZG93KSB7CisJICAgIGNvbnNvbGVXaW5kb3cubG9nKGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZWZlcnJlciIpLmlubmVyVGV4dCk7CisgICAgICAgIGNv
bnNvbGVXaW5kb3cubG9nKCJ3aW5kb3cub3BlbmVyOiAiICsgKHdpbmRvdy5vcGVuZXIgPyB3aW5k
b3cub3BlbmVyLmxvY2F0aW9uIDogIiIpKTsKKyAgICB9CisgICAgCisgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOworPC9zY3JpcHQ+CisKKzwvYm9keT48L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2VzL25vLXJlZmVycmVyLXJlc2V0LWhlbHBlci5w
aHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Jlc291
cmNlcy9uby1yZWZlcnJlci1yZXNldC1oZWxwZXIucGhwCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Jlc291cmNlcy9uby1yZWZlcnJlci1yZXNldC1o
ZWxwZXIucGhwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxIEBACis8P3BocAorICAgIC8vIFBy
ZXZlbnQgZnJvbSBiZWluZyBjYWNoZWQuCisgICAgaGVhZGVyKCJDYWNoZS1Db250cm9sOiBuby1z
dG9yZSwgcHJpdmF0ZSwgbWF4LWFnZT0wIik7CisgICAgaGVhZGVyKCJDb250ZW50LVR5cGU6IHRl
eHQvaHRtbCIpOworPz4KKworPGh0bWw+PGJvZHk+Cis8ZGl2IGlkPSJyZWZlcnJlciI+CitSZWZl
cnJlcjogPD9waHAgZWNobyAkX1NFUlZFUlsnSFRUUF9SRUZFUkVSJ107ID8+Cis8L2Rpdj4KKzxi
ci8+Cis8YSBpZD0ibm9yZWZlcnJlci1saW5rIiBocmVmPSJuby1yZWZlcnJlci1yZXNldC1oZWxw
ZXIucGhwIiByZWw9Im5vcmVmZXJyZXIiPkRvZXNuJ3Qgc2VuZCByZWZlcnJlcjwvYT4KKzxhIGlk
PSJyZWZlcnJlci1saW5rIiBocmVmPSJuby1yZWZlcnJlci1oZWxwZXIucGhwIj5TZW5kcyByZWZl
cnJlcjwvYT4KKzxzY3JpcHQ+CisgICAgdmFyIGNvbnNvbGVXaW5kb3cgPSB3aW5kb3cub3Blbigi
IiwgImNvbnNvbGVXaW5kb3ciKTsKKyAgICBpZiAoY29uc29sZVdpbmRvdykgeworCSAgICBjb25z
b2xlV2luZG93LmxvZyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVmZXJyZXIiKS5pbm5lclRl
eHQpOworICAgICAgICBjb25zb2xlV2luZG93LmxvZygid2luZG93Lm9wZW5lcjogIiArICh3aW5k
b3cub3BlbmVyID8gd2luZG93Lm9wZW5lci5sb2NhdGlvbiA6ICIiKSk7CisgICAgfQorCisgICAg
dmFyIHRhcmdldDsNCisgICAgaWYgKCFjb25zb2xlV2luZG93Lm5vcmVmZXJyZXJTdGVwRG9uZSkg
ew0KKyAgICAgICAgY29uc29sZVdpbmRvdy5ub3JlZmVycmVyU3RlcERvbmUgPSB0cnVlOw0KKyAg
ICAgICAgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5vcmVmZXJyZXItbGluayIp
Ow0KKyAgICB9IGVsc2UgDQorICAgICAgICB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgicmVmZXJyZXItbGluayIpOw0KKyAgICB2YXIgbmV3RXZlbnQgPSBkb2N1bWVudC5jcmVhdGVF
dmVudCgiTW91c2VFdmVudCIpOw0KKyAgICBuZXdFdmVudC5pbml0TW91c2VFdmVudCgiY2xpY2si
LCBmYWxzZSwgZmFsc2UsIHdpbmRvdywgMCwgMTAsIDEwLCAxMCwgMTAsIGZhbHNlLCBmYWxzZSwg
ZmFsc2UsIGZhbHNlLCAwLCB0YXJnZXQpOw0KKyAgICB0YXJnZXQuZGlzcGF0Y2hFdmVudChuZXdF
dmVudCk7Cis8L3NjcmlwdD4KKzwvYm9keT48L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2VzL25vLXJlZmVycmVyLXNhbWUtd2luZG93LWhlbHBl
ci5waHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Jl
c291cmNlcy9uby1yZWZlcnJlci1zYW1lLXdpbmRvdy1oZWxwZXIucGhwCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Jlc291cmNlcy9uby1yZWZlcnJl
ci1zYW1lLXdpbmRvdy1oZWxwZXIucGhwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5IEBACis8
P3BocAorICAgIC8vIFByZXZlbnQgZnJvbSBiZWluZyBjYWNoZWQuCisgICAgaGVhZGVyKCJDYWNo
ZS1Db250cm9sOiBuby1zdG9yZSwgcHJpdmF0ZSwgbWF4LWFnZT0wIik7CisgICAgaGVhZGVyKCJD
b250ZW50LVR5cGU6IHRleHQvaHRtbCIpOworPz4KKworPGh0bWw+PGJvZHk+CitUaGUgUmVmZXJy
ZXIgZGlzcGxheWVkIGJlbG93IHNob3VsZCBiZSBlbXB0eS48YnIvPgorPGRpdiBpZD0icmVmZXJy
ZXIiPlJlZmVycmVyOiA8P3BocCBlY2hvICRfU0VSVkVSWydIVFRQX1JFRkVSRVInXTsgPz48L2Rp
dj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4NCisgICAgdmFyIGxpbmUgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsNCisgICAgbGluZS5hcHBlbmRDaGlsZChkb2N1
bWVudC5jcmVhdGVUZXh0Tm9kZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVmZXJyZXIiKS5p
bm5lclRleHQgPT0gIlJlZmVycmVyOiIgPyAiUEFTUyIgOiAiRkFJTCIpKTsNCisgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChsaW5lKTsKKyAgICAKKyAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5ub3RpZnlEb25lKCk7Cis8L3NjcmlwdD4KKzwvYm9keT48L2h0bWw+Cg==
</data>
<flag name="review"
          id="20563"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41062</attachid>
            <date>2009-10-12 14:56:25 -0700</date>
            <delta_ts>2009-10-15 15:03:38 -0700</delta_ts>
            <desc>Attempt #3</desc>
            <filename>patch3.txt</filename>
            <type>text/plain</type>
            <size>29402</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0OTQ3MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzkgQEAKKzIwMDktMTAtMTIgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgc3VwcG9ydCBmb3IgbGluayByZWxhdGlvbnMgaW4gSFRNTEFuY2hvckVsZW1lbnQgYW5kIGlt
cGxlbWVudCByZWw9Im5vcmVmZXJyZXIiLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yODk4NgorCisgICAgICAgIFRlc3RzOiBodHRwL3Rlc3RzL25h
dmlnYXRpb24vbm8tcmVmZXJyZXItcmVzZXQuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0
cy9uYXZpZ2F0aW9uL25vLXJlZmVycmVyLXNhbWUtd2luZG93Lmh0bWwKKyAgICAgICAgICAgICAg
IGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9uby1yZWZlcnJlci1zdWJmcmFtZS5odG1sCisgICAgICAg
ICAgICAgICBodHRwL3Rlc3RzL25hdmlnYXRpb24vbm8tcmVmZXJyZXItdGFyZ2V0LWJsYW5rLmh0
bWwKKworICAgICAgICAqIGh0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwOiBBZGQgc3VwcG9ydCBm
b3IgbGluayByZWxhdGlvbnMgYW5kIGltcGxlbWVudCBub3JlZmVycmVyCisgICAgICAgIChXZWJD
b3JlOjpIVE1MQW5jaG9yRWxlbWVudDo6SFRNTEFuY2hvckVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50OjpoYXNSZWwpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEFuY2hvckVsZW1lbnQ6OnNldFJlbCk6CisgICAgICAgICogaHRtbC9IVE1MQW5jaG9y
RWxlbWVudC5oOiBBZGQgc3VwcG9ydCBmb3IgbGluayByZWxhdGlvbnMgYW5kIGltcGxlbWVudCBu
b3JlZmVycmVyCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyOjpGcmFtZUxvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZUxvYWRlcjo6Y3JlYXRlV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpj
aGFuZ2VMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6dXJsU2VsZWN0
ZWQpOiBBZGQgcGFyYW1ldGVyIGZvciByZWZlcnJlciBwb2xpY3kKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lTG9hZGVyOjpsb2FkRnJhbWVSZXF1ZXN0KTogQWRkIHBhcmFtZXRlciBmb3IgcmVmZXJy
ZXIgcG9saWN5CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y29udGludWVMb2FkQWZ0
ZXJOZXdXaW5kb3dQb2xpY3kpOiBTdXBwcmVzcyBvcGVuZXIgaWYgcmVxdWVzdGVkIGJ5IFJlZmVy
cmVyUG9saWN5CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmg6IFVwZGF0ZSB1cmxTZWxl
Y3RlZCBhbmQgbG9hZEZyYW1lUmVxdWVzdCBwcm90b3R5cGVzCisgICAgICAgICogbG9hZGVyL0Zy
YW1lTG9hZGVyVHlwZXMuaDogQWRkIGVudW0gZm9yIHJlZmVycmVyIHBvbGljeQorICAgICAgICAq
IGxvYWRlci9SZWRpcmVjdFNjaGVkdWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWRpcmVj
dFNjaGVkdWxlcjo6dGltZXJGaXJlZCk6CisgICAgICAgICogcGFnZS9Db250ZXh0TWVudUNvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpjb250
ZXh0TWVudUl0ZW1TZWxlY3RlZCk6IFVwZGF0ZSBjYWxsIHRvIHVybFNlbGVjdGVkKCkKKyAgICAg
ICAgKiBzdmcvU1ZHQUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQUVsZW1lbnQ6
OmRlZmF1bHRFdmVudEhhbmRsZXIpOiBVcGRhdGUgY2FsbCB0byB1cmxTZWxlY3RlZCgpCisKIDIw
MDktMTAtMTIgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBObyByZXZpZXcsIHJvbGxpbmcgb3V0IHI0OTQyOSwgYmVjYXVzZSBpdCBicm9rZSBsYXlv
dXQgdGVzdHMuCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ5
NDcyKQorKysgV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkROUy5oIgogI2luY2x1ZGUgIkV2ZW50TmFt
ZXMuaCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIK
ICNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAj
aW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgpAQCAtNDMsNiArNDQsNyBAQCB1c2luZyBuYW1lc3Bh
Y2UgSFRNTE5hbWVzOwogSFRNTEFuY2hvckVsZW1lbnQ6OkhUTUxBbmNob3JFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKICAgICA6IEhUTUxF
bGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBDcmVhdGVFbGVtZW50KQogICAgICwgbV93YXNTaGlm
dEtleURvd25Pbk1vdXNlRG93bihmYWxzZSkKKyAgICAsIG1fbGlua1JlbGF0aW9ucygwKQogewog
fQogCkBAIC0yMDAsNyArMjAyLDcgQEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVudDo6ZGVmYXVsdEV2
ZW50SGFuZAogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFldnQtPmRlZmF1bHRQcmV2ZW50ZWQo
KSAmJiBkb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUo
KS0+bG9hZGVyKCktPnVybFNlbGVjdGVkKGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybCksIGdl
dEF0dHJpYnV0ZSh0YXJnZXRBdHRyKSwgZXZ0LCBmYWxzZSwgZmFsc2UsIHRydWUpOworICAgICAg
ICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPnVybFNlbGVjdGVkKGRvY3VtZW50
KCktPmNvbXBsZXRlVVJMKHVybCksIGdldEF0dHJpYnV0ZSh0YXJnZXRBdHRyKSwgZXZ0LCBmYWxz
ZSwgZmFsc2UsIHRydWUsIGhhc1JlbChSRUxBVElPTl9OT1JFRkVSUkVSKSA/IE5vUmVmZXJyZXIg
OiBTZW5kUmVmZXJyZXIpOwogCiAgICAgICAgIGV2dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAg
ICB9IGVsc2UgaWYgKGlzTGluaygpICYmIGlzQ29udGVudEVkaXRhYmxlKCkpIHsKQEAgLTI3NCwx
MCArMjc2LDExIEBAIHZvaWQgSFRNTEFuY2hvckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmkKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG5h
bWVBdHRyIHx8Ci0gICAgICAgICAgICAgYXR0ci0+bmFtZSgpID09IHRpdGxlQXR0ciB8fAotICAg
ICAgICAgICAgIGF0dHItPm5hbWUoKSA9PSByZWxBdHRyKSB7CisgICAgICAgICAgICAgYXR0ci0+
bmFtZSgpID09IHRpdGxlQXR0cikgewogICAgICAgICAvLyBEbyBub3RoaW5nLgotICAgIH0gZWxz
ZQorICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHJlbEF0dHIpCisgICAgICAgIHNldFJl
bChhdHRyLT52YWx1ZSgpKTsKKyAgICBlbHNlCiAgICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KIApAQCAtMzIxLDYgKzMyNCwyMCBAQCB2b2lkIEhUTUxB
bmNob3JFbGVtZW50OjpzZXRIcmVmKGNvbnN0IEF0CiAgICAgc2V0QXR0cmlidXRlKGhyZWZBdHRy
LCB2YWx1ZSk7CiB9CiAKK2Jvb2wgSFRNTEFuY2hvckVsZW1lbnQ6Omhhc1JlbCh1bnNpZ25lZCBs
b25nIHJlbGF0aW9uKSBjb25zdAoreworICAgIHJldHVybiBtX2xpbmtSZWxhdGlvbnMgJiByZWxh
dGlvbjsKK30KKwordm9pZCBIVE1MQW5jaG9yRWxlbWVudDo6c2V0UmVsKGNvbnN0IEF0b21pY1N0
cmluZyYgdmFsdWUpCit7CisgICAgbV9saW5rUmVsYXRpb25zID0gMDsKKyAgICBDbGFzc05hbWVz
IG5ld0xpbmtSZWxhdGlvbnModmFsdWUsIHRydWUpOworICAgIC8vIEZJWE1FOiBBZGQgbGluayBy
ZWxhdGlvbnMgYXMgdGhleSBhcmUgaW1wbGVtZW50ZWQKKyAgICBpZiAobmV3TGlua1JlbGF0aW9u
cy5jb250YWlucygibm9yZWZlcnJlciIpKQorICAgICAgICBtX2xpbmtSZWxhdGlvbnMgfD0gUkVM
QVRJT05fTk9SRUZFUlJFUjsKK30KKwogY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MQW5jaG9yRWxl
bWVudDo6bmFtZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShuYW1lQXR0cik7
CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuaAkocmV2aXNpb24gNDk0NzIpCisrKyBXZWJD
b3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgs
MjcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisvLyBMaW5rIHJlbGF0aW9uIGJpdG1hc2sg
dmFsdWVzLgorLy8gRklYTUU6IFVuY29tbWVudCBhcyB0aGUgdmFyaW91cyBsaW5rIHJlbGF0aW9u
cyBhcmUgaW1wbGVtZW50ZWQuCisvLyBjb25zdCB1bnNpZ25lZCBsb25nIFJFTEFUSU9OX0FMVEVS
TkFURSAgID0gMHgwMDAwMDAwMTsKKy8vIGNvbnN0IHVuc2lnbmVkIGxvbmcgUkVMQVRJT05fQVJD
SElWRVMgICAgPSAweDAwMDAwMDAyOworLy8gY29uc3QgdW5zaWduZWQgbG9uZyBSRUxBVElPTl9B
VVRIT1IgICAgICA9IDB4MDAwMDAwMDQ7CisvLyBjb25zdCB1bnNpZ25lZCBsb25nIFJFTEFUSU9O
X0JPT0tNQVJLICAgID0gMHgwMDAwMDAwODsKKy8vIGNvbnN0IHVuc2lnbmVkIGxvbmcgUkVMQVRJ
T05fRVhURVJOQUwgICAgPSAweDAwMDAwMDEwOworLy8gY29uc3QgdW5zaWduZWQgbG9uZyBSRUxB
VElPTl9GSVJTVCAgICAgICA9IDB4MDAwMDAwMjA7CisvLyBjb25zdCB1bnNpZ25lZCBsb25nIFJF
TEFUSU9OX0hFTFAgICAgICAgID0gMHgwMDAwMDA0MDsKKy8vIGNvbnN0IHVuc2lnbmVkIGxvbmcg
UkVMQVRJT05fSU5ERVggICAgICAgPSAweDAwMDAwMDgwOworLy8gY29uc3QgdW5zaWduZWQgbG9u
ZyBSRUxBVElPTl9MQVNUICAgICAgICA9IDB4MDAwMDAxMDA7CisvLyBjb25zdCB1bnNpZ25lZCBs
b25nIFJFTEFUSU9OX0xJQ0VOU0UgICAgID0gMHgwMDAwMDIwMDsKKy8vIGNvbnN0IHVuc2lnbmVk
IGxvbmcgUkVMQVRJT05fTkVYVCAgICAgICAgPSAweDAwMDAwNDAwOworLy8gY29uc3QgdW5zaWdu
ZWQgbG9uZyBSRUxBVElPTl9OT0ZPTExPVyAgICA9IDB4MDAwMDA4MDA7Citjb25zdCB1bnNpZ25l
ZCBsb25nIFJFTEFUSU9OX05PUkVGRVJSRVIgICAgID0gMHgwMDAwMTAwMDsKKy8vIGNvbnN0IHVu
c2lnbmVkIGxvbmcgUkVMQVRJT05fUFJFViAgICAgICAgPSAweDAwMDAyMDAwOworLy8gY29uc3Qg
dW5zaWduZWQgbG9uZyBSRUxBVElPTl9TRUFSQ0ggICAgICA9IDB4MDAwMDQwMDA7CisvLyBjb25z
dCB1bnNpZ25lZCBsb25nIFJFTEFUSU9OX1NJREVCQVIgICAgID0gMHgwMDAwODAwMDsKKy8vIGNv
bnN0IHVuc2lnbmVkIGxvbmcgUkVMQVRJT05fVEFHICAgICAgICAgPSAweDAwMDEwMDAwOworLy8g
Y29uc3QgdW5zaWduZWQgbG9uZyBSRUxBVElPTl9VUCAgICAgICAgICA9IDB4MDAwMjAwMDA7CisK
IGNsYXNzIEhUTUxBbmNob3JFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MQW5jaG9yRWxlbWVudD4gY3JlYXRlKERvY3VtZW50
Kik7CkBAIC01MSw2ICs3Miw5IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNMaXZlTGluaygpIGNv
bnN0OwogCisgICAgYm9vbCBoYXNSZWwodW5zaWduZWQgbG9uZyByZWxhdGlvbikgY29uc3Q7Cisg
ICAgdm9pZCBzZXRSZWwoY29uc3QgQXRvbWljU3RyaW5nJik7CisKIHByb3RlY3RlZDoKICAgICBI
VE1MQW5jaG9yRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIApAQCAt
NzMsNiArOTcsNyBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fcm9vdEVkaXRh
YmxlRWxlbWVudEZvclNlbGVjdGlvbk9uTW91c2VEb3duOwogICAgIGJvb2wgbV93YXNTaGlmdEtl
eURvd25Pbk1vdXNlRG93bjsKKyAgICB1bnNpZ25lZCBsb25nIG1fbGlua1JlbGF0aW9uczsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJl
dmlzaW9uIDQ5NDcyKQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIK
ICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRl
ICJIVE1MQW5jaG9yRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxBcHBsZXRFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lRWxlbWVudC5o
IgpAQCAtMTk0LDYgKzE5NSw3IEBAIEZyYW1lTG9hZGVyOjpGcmFtZUxvYWRlcihGcmFtZSogZnJh
bWUsIEYKICAgICAsIG1fY29tbWl0dGVkRmlyc3RSZWFsRG9jdW1lbnRMb2FkKGZhbHNlKQogICAg
ICwgbV9kaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9uKGZhbHNlKQogICAgICwgbV9sb2FkaW5nRnJv
bUNhY2hlZFBhZ2UoZmFsc2UpCisgICAgLCBtX3N1cHByZXNzT3BlbmVySW5OZXdGcmFtZShmYWxz
ZSkKICNpZm5kZWYgTkRFQlVHCiAgICAgLCBtX2RpZERpc3BhdGNoRGlkQ29tbWl0TG9hZChmYWxz
ZSkKICNlbmRpZgpAQCAtMjUxLDcgKzI1Myw3IEBAIEZyYW1lKiBGcmFtZUxvYWRlcjo6Y3JlYXRl
V2luZG93KEZyYW1lTG8KICAgICAgICAgRnJhbWUqIGZyYW1lID0gZnJhbWVMb2FkZXJGb3JGcmFt
ZUxvb2t1cC0+ZnJhbWUoKS0+dHJlZSgpLT5maW5kKHJlcXVlc3QuZnJhbWVOYW1lKCkpOwogICAg
ICAgICBpZiAoZnJhbWUgJiYgc2hvdWxkQWxsb3dOYXZpZ2F0aW9uKGZyYW1lKSkgewogICAgICAg
ICAgICAgaWYgKCFyZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCktPmxvYWRGcmFtZVJlcXVlc3QocmVxdWVzdCwg
ZmFsc2UsIGZhbHNlLCAwLCAwKTsKKyAgICAgICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCktPmxv
YWRGcmFtZVJlcXVlc3QocmVxdWVzdCwgZmFsc2UsIGZhbHNlLCAwLCAwLCBTZW5kUmVmZXJyZXIp
OwogICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQogICAgICAgICAg
ICAgICAgIHBhZ2UtPmNocm9tZSgpLT5mb2N1cygpOwogICAgICAgICAgICAgY3JlYXRlZCA9IGZh
bHNlOwpAQCAtMzE4LDExICszMjAsMTMgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y2hhbmdlTG9jYXRp
b24oY29uc3QgSwogICAgIGlmIChtX2ZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZUlmSmF2YVNjcmlw
dFVSTChyZXF1ZXN0LnVybCgpLCB1c2VyR2VzdHVyZSkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IHVybFNlbGVjdGVkKHJlcXVlc3QsICJfc2VsZiIsIDAsIGxvY2tIaXN0b3J5LCBsb2NrQmFja0Zv
cndhcmRMaXN0LCB1c2VyR2VzdHVyZSk7CisgICAgdXJsU2VsZWN0ZWQocmVxdWVzdCwgIl9zZWxm
IiwgMCwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QsIHVzZXJHZXN0dXJlLCBTZW5k
UmVmZXJyZXIpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjp1cmxTZWxlY3RlZChjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgcGFzc2VkVGFyZ2V0LCBQYXNzUmVm
UHRyPEV2ZW50PiB0cmlnZ2VyaW5nRXZlbnQsIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9ja0Jh
Y2tGb3J3YXJkTGlzdCwgYm9vbCB1c2VyR2VzdHVyZSkKK3ZvaWQgRnJhbWVMb2FkZXI6OnVybFNl
bGVjdGVkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBwYXNz
ZWRUYXJnZXQsIFBhc3NSZWZQdHI8RXZlbnQ+IHRyaWdnZXJpbmdFdmVudCwgYm9vbCBsb2NrSGlz
dG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0LCBib29sIHVzZXJHZXN0dXJlLCBSZWZlcnJl
clBvbGljeSByZWZlcnJlclBvbGljeSkKIHsKKyAgICBBU1NFUlQoIW1fc3VwcHJlc3NPcGVuZXJJ
bk5ld0ZyYW1lKTsKKwogICAgIGlmIChtX2ZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZUlmSmF2YVNj
cmlwdFVSTChyZXF1ZXN0LnVybCgpLCB1c2VyR2VzdHVyZSwgZmFsc2UpKQogICAgICAgICByZXR1
cm47CiAKQEAgLTMzMiwxMSArMzM2LDE2IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnVybFNlbGVjdGVk
KGNvbnN0IFJlc28KIAogICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVSZXF1ZXN0KHJlcXVlc3Qs
IHRhcmdldCk7CiAKLSAgICBpZiAoZnJhbWVSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLmh0dHBS
ZWZlcnJlcigpLmlzRW1wdHkoKSkKKyAgICBpZiAocmVmZXJyZXJQb2xpY3kgPT0gTm9SZWZlcnJl
cikgeworICAgICAgICBtX3N1cHByZXNzT3BlbmVySW5OZXdGcmFtZSA9IHRydWU7CisgICAgICAg
IHNldE9wZW5lcigwKTsKKyAgICB9IGVsc2UgaWYgKGZyYW1lUmVxdWVzdC5yZXNvdXJjZVJlcXVl
c3QoKS5odHRwUmVmZXJyZXIoKS5pc0VtcHR5KCkpCiAgICAgICAgIGZyYW1lUmVxdWVzdC5yZXNv
dXJjZVJlcXVlc3QoKS5zZXRIVFRQUmVmZXJyZXIobV9vdXRnb2luZ1JlZmVycmVyKTsKICAgICBh
ZGRIVFRQT3JpZ2luSWZOZWVkZWQoZnJhbWVSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLCBvdXRn
b2luZ09yaWdpbigpKTsKIAotICAgIGxvYWRGcmFtZVJlcXVlc3QoZnJhbWVSZXF1ZXN0LCBsb2Nr
SGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJkTGlzdCwgdHJpZ2dlcmluZ0V2ZW50LCAwKTsKKyAgICBs
b2FkRnJhbWVSZXF1ZXN0KGZyYW1lUmVxdWVzdCwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2Fy
ZExpc3QsIHRyaWdnZXJpbmdFdmVudCwgMCwgcmVmZXJyZXJQb2xpY3kpOworCisgICAgbV9zdXBw
cmVzc09wZW5lckluTmV3RnJhbWUgPSBmYWxzZTsKIH0KIAogYm9vbCBGcmFtZUxvYWRlcjo6cmVx
dWVzdEZyYW1lKEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LCBjb25zdCBTdHJp
bmcmIHVybFN0cmluZywgY29uc3QgQXRvbWljU3RyaW5nJiBmcmFtZU5hbWUpCkBAIC0xODMyLDcg
KzE4NDEsNyBAQCBzdGF0aWMgYm9vbCBpc0ZlZWRXaXRoTmVzdGVkUHJvdG9jb2xJbkhUCiB9CiAK
IHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRGcmFtZVJlcXVlc3QoY29uc3QgRnJhbWVMb2FkUmVxdWVz
dCYgcmVxdWVzdCwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0LAot
ICAgIFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4gZm9ybVN0
YXRlKQorICAgIFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4g
Zm9ybVN0YXRlLCBSZWZlcnJlclBvbGljeSByZWZlcnJlclBvbGljeSkKIHsgICAgCiAgICAgS1VS
TCB1cmwgPSByZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpOwogCkBAIC0xODUxLDcgKzE4
NjAsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkRnJhbWVSZXF1ZXN0KGNvbnN0CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBpZiAoU2VjdXJpdHlPcmlnaW46OnNob3VsZEhpZGVSZWZlcnJlcih1
cmwsIHJlZmVycmVyKSkKKyAgICBpZiAoU2VjdXJpdHlPcmlnaW46OnNob3VsZEhpZGVSZWZlcnJl
cih1cmwsIHJlZmVycmVyKSB8fCByZWZlcnJlclBvbGljeSA9PSBOb1JlZmVycmVyKQogICAgICAg
ICByZWZlcnJlciA9IFN0cmluZygpOwogICAgIAogICAgIEZyYW1lTG9hZFR5cGUgbG9hZFR5cGU7
CkBAIC0zNTUzLDcgKzM1NjIsOCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjb250aW51ZUxvYWRBZnRl
ck5ld1dpCiAKICAgICBtYWluRnJhbWUtPnBhZ2UoKS0+c2V0T3BlbmVkQnlET00oKTsKICAgICBt
YWluRnJhbWUtPmxvYWRlcigpLT5tX2NsaWVudC0+ZGlzcGF0Y2hTaG93KCk7Ci0gICAgbWFpbkZy
YW1lLT5sb2FkZXIoKS0+c2V0T3BlbmVyKGZyYW1lLmdldCgpKTsKKyAgICBpZiAoIW1fc3VwcHJl
c3NPcGVuZXJJbk5ld0ZyYW1lKQorICAgICAgICBtYWluRnJhbWUtPmxvYWRlcigpLT5zZXRPcGVu
ZXIoZnJhbWUuZ2V0KCkpOwogICAgIG1haW5GcmFtZS0+bG9hZGVyKCktPmxvYWRXaXRoTmF2aWdh
dGlvbkFjdGlvbihyZXF1ZXN0LCBOYXZpZ2F0aW9uQWN0aW9uKCksIGZhbHNlLCBGcmFtZUxvYWRU
eXBlU3RhbmRhcmQsIGZvcm1TdGF0ZSk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1l
TG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkocmV2
aXNpb24gNDk0NzIpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDMsNyArMTAzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lk
IGxvYWRVUkxJbnRvQ2hpbGRGcmFtZShjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiByZWZlcmVy
LCBGcmFtZSopOwogCiAgICAgICAgIHZvaWQgbG9hZEZyYW1lUmVxdWVzdChjb25zdCBGcmFtZUxv
YWRSZXF1ZXN0JiwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0LCAg
Ly8gQ2FsbGVkIGJ5IHN1Ym1pdEZvcm0sIGNhbGxzIGxvYWRQb3N0UmVxdWVzdCBhbmQgbG9hZFVS
TC4KLSAgICAgICAgICAgIFBhc3NSZWZQdHI8RXZlbnQ+LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4p
OworICAgICAgICAgICAgUGFzc1JlZlB0cjxFdmVudD4sIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiwg
UmVmZXJyZXJQb2xpY3kpOwogCiAgICAgICAgIHZvaWQgbG9hZChjb25zdCBSZXNvdXJjZVJlcXVl
c3QmLCBib29sIGxvY2tIaXN0b3J5KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gQ2FsbGVkIGJ5IFdlYkZyYW1lLCBjYWxscyBsb2FkKFJlc291cmNlUmVxdWVzdCwg
U3Vic3RpdHV0ZURhdGEpLgogICAgICAgICB2b2lkIGxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiwgY29uc3QgU3Vic3RpdHV0ZURhdGEmLCBib29sIGxvY2tIaXN0b3J5KTsgICAgICAgICAgICAg
ICAgIC8vIENhbGxlZCBib3RoIGJ5IFdlYkZyYW1lIGFuZCBpbnRlcm5hbGx5LCBjYWxscyBsb2Fk
KERvY3VtZW50TG9hZGVyKikuCkBAIC0yMTUsNyArMjE1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9vbCk7CiAKICAgICAgICAgdm9pZCBj
aGFuZ2VMb2NhdGlvbihjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgYm9vbCBs
b2NrSGlzdG9yeSA9IHRydWUsIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCA9IHRydWUsIGJvb2wg
dXNlckdlc3R1cmUgPSBmYWxzZSwgYm9vbCByZWZyZXNoID0gZmFsc2UpOwotICAgICAgICB2b2lk
IHVybFNlbGVjdGVkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0
LCBQYXNzUmVmUHRyPEV2ZW50PiwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0Zvcndh
cmRMaXN0LCBib29sIHVzZXJHZXN0dXJlKTsKKyAgICAgICAgdm9pZCB1cmxTZWxlY3RlZChjb25z
dCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIHRhcmdldCwgUGFzc1JlZlB0cjxFdmVu
dD4sIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCwgYm9vbCB1c2Vy
R2VzdHVyZSwgUmVmZXJyZXJQb2xpY3kpOwogICAgICAgICBib29sIHJlcXVlc3RGcmFtZShIVE1M
RnJhbWVPd25lckVsZW1lbnQqLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgQXRvbWljU3RyaW5n
JiBmcmFtZU5hbWUpOwogCiAgICAgICAgIHZvaWQgc3VibWl0Rm9ybShjb25zdCBjaGFyKiBhY3Rp
b24sIGNvbnN0IFN0cmluZyYgdXJsLApAQCAtNTEzLDYgKzUxMyw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgICAgICBib29sIG1fZGlkUGVyZm9ybUZpcnN0TmF2aWdhdGlvbjsKICAgICAg
ICAgYm9vbCBtX2xvYWRpbmdGcm9tQ2FjaGVkUGFnZTsKKyAgICAgICAgYm9vbCBtX3N1cHByZXNz
T3BlbmVySW5OZXdGcmFtZTsKICAgICAgICAgCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBib29s
IG1fZGlkRGlzcGF0Y2hEaWRDb21taXRMb2FkOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXJUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyVHlw
ZXMuaAkocmV2aXNpb24gNDk0NzIpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlclR5cGVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgVW5sb2FkRXZlbnRQb2xpY3lVbmxvYWRPbmx5LAogICAgICAgICBVbmxvYWRFdmVu
dFBvbGljeVVubG9hZEFuZFBhZ2VIaWRlCiAgICAgfTsKKworICAgIGVudW0gUmVmZXJyZXJQb2xp
Y3kgeworICAgICAgICBTZW5kUmVmZXJyZXIsCisgICAgICAgIE5vUmVmZXJyZXIKKyAgICB9Owog
fQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1JlZGlyZWN0U2NoZWR1bGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9SZWRpcmVjdFNjaGVkdWxlci5jcHAJKHJldmlz
aW9uIDQ5NDcyKQorKysgV2ViQ29yZS9sb2FkZXIvUmVkaXJlY3RTY2hlZHVsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNzcsNyArMjc3LDcgQEAgdm9pZCBSZWRpcmVjdFNjaGVkdWxlcjo6dGlt
ZXJGaXJlZChUaW1lcgogICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpoaXN0b3J5
TmF2aWdhdGlvbjoKICAgICAgICAgICAgIGlmIChyZWRpcmVjdGlvbi0+aGlzdG9yeVN0ZXBzID09
IDApIHsKICAgICAgICAgICAgICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIGdvKDApIGZyb20gYSBm
cmFtZSAtPiByZWxvYWQgb25seSB0aGUgZnJhbWUKLSAgICAgICAgICAgICAgICBsb2FkZXItPnVy
bFNlbGVjdGVkKGxvYWRlci0+dXJsKCksICIiLCAwLCByZWRpcmVjdGlvbi0+bG9ja0hpc3Rvcnks
IHJlZGlyZWN0aW9uLT5sb2NrQmFja0ZvcndhcmRMaXN0LCByZWRpcmVjdGlvbi0+d2FzVXNlckdl
c3R1cmUpOworICAgICAgICAgICAgICAgIGxvYWRlci0+dXJsU2VsZWN0ZWQobG9hZGVyLT51cmwo
KSwgIiIsIDAsIHJlZGlyZWN0aW9uLT5sb2NrSGlzdG9yeSwgcmVkaXJlY3Rpb24tPmxvY2tCYWNr
Rm9yd2FyZExpc3QsIHJlZGlyZWN0aW9uLT53YXNVc2VyR2VzdHVyZSwgU2VuZFJlZmVycmVyKTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBn
byhpIT0wKSBmcm9tIGEgZnJhbWUgbmF2aWdhdGVzIGludG8gdGhlIGhpc3Rvcnkgb2YgdGhlIGZy
YW1lIG9ubHksCkBAIC0yOTMsNyArMjkzLDcgQEAgdm9pZCBSZWRpcmVjdFNjaGVkdWxlcjo6dGlt
ZXJGaXJlZChUaW1lcgogICAgICAgICAgICAgaWYgKCFyZWRpcmVjdGlvbi0+Zm9ybVN0YXRlLT5z
b3VyY2VGcmFtZSgpLT5sb2FkZXIoKS0+c2hvdWxkQWxsb3dOYXZpZ2F0aW9uKG1fZnJhbWUpKQog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGxvYWRlci0+bG9hZEZyYW1lUmVx
dWVzdChyZWRpcmVjdGlvbi0+ZnJhbWVSZXF1ZXN0LCByZWRpcmVjdGlvbi0+bG9ja0hpc3Rvcnks
IHJlZGlyZWN0aW9uLT5sb2NrQmFja0ZvcndhcmRMaXN0LAotICAgICAgICAgICAgICAgIHJlZGly
ZWN0aW9uLT5ldmVudCwgcmVkaXJlY3Rpb24tPmZvcm1TdGF0ZSk7CisgICAgICAgICAgICAgICAg
cmVkaXJlY3Rpb24tPmV2ZW50LCByZWRpcmVjdGlvbi0+Zm9ybVN0YXRlLCBTZW5kUmVmZXJyZXIp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogV2ViQ29yZS9wYWdlL0NvbnRl
eHRNZW51Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0NvbnRleHRN
ZW51Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDQ5NDcyKQorKysgV2ViQ29yZS9wYWdlL0NvbnRl
eHRNZW51Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNyw3ICsyMTcsNyBAQCB2
b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJCiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3Blbkxpbms6CiAgICAgICAgIGlmIChGcmFtZSog
dGFyZ2V0RnJhbWUgPSByZXN1bHQudGFyZ2V0RnJhbWUoKSkKLSAgICAgICAgICAgIHRhcmdldEZy
YW1lLT5sb2FkZXIoKS0+bG9hZEZyYW1lUmVxdWVzdChGcmFtZUxvYWRSZXF1ZXN0KFJlc291cmNl
UmVxdWVzdChyZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCksIGZyYW1lLT5sb2FkZXIoKS0+b3V0Z29p
bmdSZWZlcnJlcigpKSksIGZhbHNlLCBmYWxzZSwgMCwgMCk7CisgICAgICAgICAgICB0YXJnZXRG
cmFtZS0+bG9hZGVyKCktPmxvYWRGcmFtZVJlcXVlc3QoRnJhbWVMb2FkUmVxdWVzdChSZXNvdXJj
ZVJlcXVlc3QocmVzdWx0LmFic29sdXRlTGlua1VSTCgpLCBmcmFtZS0+bG9hZGVyKCktPm91dGdv
aW5nUmVmZXJyZXIoKSkpLCBmYWxzZSwgZmFsc2UsIDAsIDAsIFNlbmRSZWZlcnJlcik7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIG9wZW5OZXdXaW5kb3cocmVzdWx0LmFic29sdXRlTGlua1VS
TCgpLCBmcmFtZSk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHQUVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmNwcAkocmV2aXNp
b24gNDk0NzIpCisrKyBXZWJDb3JlL3N2Zy9TVkdBRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlw
ZXMuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiTWFwcGVkQXR0cmli
dXRlLmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgpAQCAtMTU0LDcgKzE1NSw3IEBAIHZvaWQg
U1ZHQUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXYKICAgICAgICAgICAgIH0KICNlbmRp
ZgogICAgICAgICAgICAgaWYgKGRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgICAgICAgICAg
ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPnVybFNlbGVjdGVkKGRvY3VtZW50KCktPmNv
bXBsZXRlVVJMKHVybCksIHRhcmdldCwgZXZ0LCBmYWxzZSwgZmFsc2UsIHRydWUpOworICAgICAg
ICAgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmxvYWRlcigpLT51cmxTZWxlY3RlZChkb2N1
bWVudCgpLT5jb21wbGV0ZVVSTCh1cmwpLCB0YXJnZXQsIGV2dCwgZmFsc2UsIGZhbHNlLCB0cnVl
LCBTZW5kUmVmZXJyZXIpOwogICAgICAgICB9CiAKICAgICAgICAgZXZ0LT5zZXREZWZhdWx0SGFu
ZGxlZCgpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDk0NzIpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAwOS0xMC0xMiAgTmF0ZSBDaGFw
aW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZCB0ZXN0cyBmb3Igbm9yZWZlcnJlciBsaW5rIHJlbGF0aW9u
LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODk4
NgorCisgICAgICAgICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL25vLXJlZmVycmVyLXJlc2V0LWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL25vLXJl
ZmVycmVyLXJlc2V0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbmF2aWdhdGlv
bi9uby1yZWZlcnJlci1zYW1lLXdpbmRvdy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9uby1yZWZlcnJlci1zYW1lLXdpbmRvdy5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24vbm8tcmVmZXJyZXItc3ViZnJhbWUt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24vbm8t
cmVmZXJyZXItc3ViZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9uYXZp
Z2F0aW9uL25vLXJlZmVycmVyLXRhcmdldC1ibGFuay1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9uby1yZWZlcnJlci10YXJnZXQtYmxhbmsuaHRt
bDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Jlc291cmNlcy9uby1y
ZWZlcnJlci1oZWxwZXIucGhwOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRp
b24vcmVzb3VyY2VzL25vLXJlZmVycmVyLXJlc2V0LWhlbHBlci5waHA6IEFkZGVkLgorICAgICAg
ICAqIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9yZXNvdXJjZXMvbm8tcmVmZXJyZXItc2FtZS13aW5k
b3ctaGVscGVyLnBocDogQWRkZWQuCisKIDIwMDktMTAtMTIgIERpcmsgU2NodWx6ZSAgPGtyaXRA
d2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFaXJjIFNlaWRlbC4KSW5kZXg6IExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9uby1yZWZlcnJlci1yZXNldC1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL25v
LXJlZmVycmVyLXJlc2V0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9uby1yZWZlcnJlci1yZXNldC1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKK1RoaXMgdGVzdHMgd2hldGhlciByZWZlcnJlciBp
bmZvcm1hdGlvbiBnZXRzIHByb3Blcmx5IHNldCBhbmQgcmVzZXQgd2hlbiAibm9yZWZlcnJlciIg
bGlua3MgYXJlIHByZXNlbnQuIFdlIGRvIHRoZSBmb2xsb3dpbmc6CisxLiBPcGVuIGEgbGluayBp
biBhIG5ldyB3aW5kb3c6IHJlZmVycmVyIGlzIHNlbnQgYW5kIHdpbmRvdy5vcGVuZXIgaXMgc2Vu
dC4KKzIuIENsaWNrIGEgcmVsPSJub3JlZmVycmVyIiBsaW5rOiByZWZlcnJlciBhbmQgd2luZG93
Lm9wZW5lciBhcmUgbnVsbGVkLgorMy4gQ2xpY2sgYSBsaW5rIHdpdGhvdXQgcmVsPSJub3JlZmVy
cmVyIjogcmVmZXJyZXIgaXMgc2VudCwgYnV0IHdpbmRvdy5vcGVuZXIgaXMgc3RpbGwgbnVsbCAo
c2luY2UgaXQgd2FzIG51bGxlZCBpbiB0aGUgcHJldmlvdXMgc3RlcCkuIAorU3RhcnQgcmVzZXQg
dGVzdAorUmVmZXJyZXI6IGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL25vLXJlZmVy
cmVyLXJlc2V0Lmh0bWwKK3dpbmRvdy5vcGVuZXI6IGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZp
Z2F0aW9uL25vLXJlZmVycmVyLXJlc2V0Lmh0bWwKK1JlZmVycmVyOgord2luZG93Lm9wZW5lcjoK
K1JlZmVycmVyOiBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvbm8t
cmVmZXJyZXItcmVzZXQtaGVscGVyLnBocAord2luZG93Lm9wZW5lcjoKXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vbm8t
cmVmZXJyZXItcmVzZXQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L25hdmlnYXRpb24vbm8tcmVmZXJyZXItcmVzZXQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9uby1yZWZlcnJlci1yZXNldC5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDMwIEBACis8aHRtbD48Ym9keT4KK1RoaXMgdGVzdHMgd2hldGhl
ciByZWZlcnJlciBpbmZvcm1hdGlvbiBnZXRzIHByb3Blcmx5IHNldCBhbmQgcmVzZXQgd2hlbiAi
bm9yZWZlcnJlciIgbGlua3MgYXJlIHByZXNlbnQuIFdlIGRvIHRoZSBmb2xsb3dpbmc6PGJyLz4K
KzEuIE9wZW4gYSBsaW5rIGluIGEgbmV3IHdpbmRvdzogcmVmZXJyZXIgaXMgc2VudCBhbmQgd2lu
ZG93Lm9wZW5lciBpcyBzZW50Ljxici8+CisyLiBDbGljayBhIHJlbD0ibm9yZWZlcnJlciIgbGlu
azogcmVmZXJyZXIgYW5kIHdpbmRvdy5vcGVuZXIgYXJlIG51bGxlZC48YnIvPgorMy4gQ2xpY2sg
YSBsaW5rIHdpdGhvdXQgcmVsPSJub3JlZmVycmVyIjogcmVmZXJyZXIgaXMgc2VudCwgYnV0IHdp
bmRvdy5vcGVuZXIgaXMgc3RpbGwgbnVsbCAoc2luY2UgaXQgd2FzIG51bGxlZCBpbiB0aGUgcHJl
dmlvdXMgc3RlcCkuCis8YnIvPgorPGEgaWQ9ImxpbmsiIGhyZWY9InJlc291cmNlcy9uby1yZWZl
cnJlci1yZXNldC1oZWxwZXIucGhwIiB0YXJnZXQ9Il9ibGFuayI+U3RhcnQgcmVzZXQgdGVzdDwv
YT4KKzxzY3JpcHQ+CisgICAgd2luZG93Lm5hbWUgPSAiY29uc29sZVdpbmRvdyI7CisgICAgd2lu
ZG93Lm5vcmVmZXJyZXJTdGVwRG9uZSA9IGZhbHNlOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRDYW5PcGVuV2luZG93cyh0cnVlKTsK
KyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKwor
ICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibGluayIpOw0KKyAgICBl
dmVudFNlbmRlci5tb3VzZU1vdmVUbyh0YXJnZXQub2Zmc2V0TGVmdCArIDIsIHRhcmdldC5vZmZz
ZXRUb3AgKyAyKTsKKyAgICBldmVudFNlbmRlci5tb3VzZURvd24oKTsKKyAgICBldmVudFNlbmRl
ci5tb3VzZVVwKCk7CisgICAgCitmdW5jdGlvbiBsb2cobXNnKQ0KK3sNCisgICAgdmFyIGxpbmUg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsNCisgICAgbGluZS5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtc2cpKTsNCisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChsaW5lKTsNCit9Cis8L3NjcmlwdD4KKzxkaXYgaWQ9
ImNvbnNvbGUiPjwvZGl2PgorPC9ib2R5PjwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAv
dGVzdHMvbmF2aWdhdGlvbi9uby1yZWZlcnJlci1zYW1lLXdpbmRvdy1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL25vLXJlZmVycmVy
LXNhbWUtd2luZG93LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvbmF2aWdhdGlvbi9uby1yZWZlcnJlci1zYW1lLXdpbmRvdy1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorVGhlIFJlZmVycmVyIGRpc3BsYXllZCBiZWxv
dyBzaG91bGQgYmUgZW1wdHkuCitSZWZlcnJlcjoKK1BBU1MKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vbm8tcmVmZXJy
ZXItc2FtZS13aW5kb3cuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L25hdmlnYXRpb24vbm8tcmVmZXJyZXItc2FtZS13aW5kb3cuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9uby1yZWZlcnJlci1zYW1lLXdpbmRv
dy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3IEBACis8aHRtbD48Ym9keT4KK1RoaXMg
dGVzdHMgdGhlIGJhc2ljIGZ1bmN0aW9uYWxpdHkgb2YgdGhlICJub3JlZmVycmVyIiBsaW5rIHJl
bGF0aW9uIG9uIGFuY2hvciB0YWdzLiBUaGUgbGluayBiZWxvdyBzaG91bGQgbm90CitzZW5kIGFu
IGh0dHAgcmVmZXJyZXIsIGFuZCB0aGUgcmVzdWx0aW5nIHdpbmRvdyBzaG91bGQgaGF2ZSBpdHMg
b3BlbmVyIGF0dHJpYnV0ZSBzZXQgdG8gbnVsbC4gIFRoZSB2YWx1ZXMKK29mIHRoZSByZWZlcnJl
ciBhbmQgd2luZG93Lm9wZW5lciBzaG91bGQgYmUgZW1wdHkgYmVsb3cuCis8YnIvPgorPGEgaWQ9
ImxpbmsiIGhyZWY9InJlc291cmNlcy9uby1yZWZlcnJlci1zYW1lLXdpbmRvdy1oZWxwZXIucGhw
IiByZWw9Im5vcmVmZXJyZXIiPlN0YXJ0IG5vIHJlZmVycmVyIHRlc3Q8L2E+Cis8c2NyaXB0Pgor
ICAgIHdpbmRvdy5uYW1lID0gImNvbnNvbGVXaW5kb3ciOworICAgIGlmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4
dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAg
fQorCisgICAgdmFyIHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsaW5rIik7DQor
ICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHRhcmdldC5vZmZzZXRMZWZ0ICsgMiwgdGFyZ2V0
Lm9mZnNldFRvcCArIDIpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworICAgIGV2ZW50
U2VuZGVyLm1vdXNlVXAoKTsKKyAgICAKK2Z1bmN0aW9uIGxvZyhtc2cpDQorew0KKyAgICB2YXIg
bGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOw0KKyAgICBsaW5lLmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1zZykpOw0KKyAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGxpbmUpOw0KK30KKzwvc2NyaXB0PgorPGRp
diBpZD0iY29uc29sZSI+PC9kaXY+Cis8L2JvZHk+PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9uYXZpZ2F0aW9uL25vLXJlZmVycmVyLXN1YmZyYW1lLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vbm8tcmVmZXJy
ZXItc3ViZnJhbWUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9uYXZpZ2F0aW9uL25vLXJlZmVycmVyLXN1YmZyYW1lLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACitUaGlzIHRlc3RzIGJlaGF2aW9yIG9mICJub3JlZmVy
cmVyIiBsaW5rcyBpbiBzdWJmcmFtZXMuIEEgcmVmZXJyZXIgc2hvdWxkIG5vdCBiZSBzZW50IGFu
ZCB3aW5kb3cub3BlbmVyIHNob3VsZCByZW1haW4gbnVsbC4KK0xvYWQgc3ViZnJhbWUgCitSZWZl
cnJlcjoKK3dpbmRvdy5vcGVuZXI6ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDog
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL25vLXJlZmVycmVyLXN1YmZyYW1lLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL25vLXJl
ZmVycmVyLXN1YmZyYW1lLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL25hdmlnYXRpb24vbm8tcmVmZXJyZXItc3ViZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwyNSBAQAorPGh0bWw+PGJvZHk+CitUaGlzIHRlc3RzIGJlaGF2aW9yIG9mICJub3Jl
ZmVycmVyIiBsaW5rcyBpbiBzdWJmcmFtZXMuIEEgcmVmZXJyZXIgc2hvdWxkIG5vdCBiZSBzZW50
IGFuZCB3aW5kb3cub3BlbmVyIHNob3VsZCByZW1haW4gbnVsbC48YnIvPgorPGEgaWQ9Imxpbmsi
IGhyZWY9InJlc291cmNlcy9uby1yZWZlcnJlci1oZWxwZXIucGhwIiByZWw9Im5vcmVmZXJyZXIi
IHRhcmdldD0ic3ViZnJhbWUiPkxvYWQgc3ViZnJhbWU8L2E+Cis8aWZyYW1lIGlkPSJzdWJmcmFt
ZSIgc3JjPSJhYm91dDpibGFuayI+PC9pZnJhbWU+Cis8c2NyaXB0PgorICAgIHdpbmRvdy5uYW1l
ID0gImNvbnNvbGVXaW5kb3ciOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
IHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorCisgICAgdmFyIHRh
cmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsaW5rIik7DQorICAgIGV2ZW50U2VuZGVy
Lm1vdXNlTW92ZVRvKHRhcmdldC5vZmZzZXRMZWZ0ICsgMiwgdGFyZ2V0Lm9mZnNldFRvcCArIDIp
OworICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAo
KTsKKyAgICAKK2Z1bmN0aW9uIGxvZyhtc2cpDQorew0KKyAgICB2YXIgbGluZSA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOw0KKyAgICBsaW5lLmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKG1zZykpOw0KKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29s
ZScpLmFwcGVuZENoaWxkKGxpbmUpOw0KK30KKzwvc2NyaXB0PgorPGRpdiBpZD0iY29uc29sZSI+
PC9kaXY+Cis8L2JvZHk+PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZp
Z2F0aW9uL25vLXJlZmVycmVyLXRhcmdldC1ibGFuay1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL25vLXJlZmVycmVyLXRhcmdldC1i
bGFuay1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L25hdmlnYXRpb24vbm8tcmVmZXJyZXItdGFyZ2V0LWJsYW5rLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0IEBACitUaGlzIHRlc3RzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRo
ZSAibm9yZWZlcnJlciIgbGluayByZWxhdGlvbiBvbiBhbmNob3IgdGFncy4gVGhlIGxpbmsgYmVs
b3cgc2hvdWxkIG5vdCBzZW5kIGFuIGh0dHAgcmVmZXJyZXIsIGFuZCB0aGUgcmVzdWx0aW5nIHdp
bmRvdyBzaG91bGQgaGF2ZSBpdHMgb3BlbmVyIGF0dHJpYnV0ZSBzZXQgdG8gbnVsbC4gVGhlIHZh
bHVlcyBvZiB0aGUgcmVmZXJyZXIgYW5kIHdpbmRvdy5vcGVuZXIgc2hvdWxkIGJlIGVtcHR5IGJl
bG93LgorU3RhcnQgbm8gcmVmZXJyZXIgdGVzdAorUmVmZXJyZXI6Cit3aW5kb3cub3BlbmVyOgpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMv
bmF2aWdhdGlvbi9uby1yZWZlcnJlci10YXJnZXQtYmxhbmsuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vbm8tcmVmZXJyZXItdGFyZ2V0LWJsYW5r
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24v
bm8tcmVmZXJyZXItdGFyZ2V0LWJsYW5rLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjgg
QEAKKzxodG1sPjxib2R5PgorVGhpcyB0ZXN0cyB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgIm5v
cmVmZXJyZXIiIGxpbmsgcmVsYXRpb24gb24gYW5jaG9yIHRhZ3MuIFRoZSBsaW5rIGJlbG93IHNo
b3VsZCBub3QKK3NlbmQgYW4gaHR0cCByZWZlcnJlciwgYW5kIHRoZSByZXN1bHRpbmcgd2luZG93
IHNob3VsZCBoYXZlIGl0cyBvcGVuZXIgYXR0cmlidXRlIHNldCB0byBudWxsLiAgVGhlIHZhbHVl
cworb2YgdGhlIHJlZmVycmVyIGFuZCB3aW5kb3cub3BlbmVyIHNob3VsZCBiZSBlbXB0eSBiZWxv
dy4KKzxici8+Cis8YSBpZD0ibGluayIgaHJlZj0icmVzb3VyY2VzL25vLXJlZmVycmVyLWhlbHBl
ci5waHAiIHJlbD0ibm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPlN0YXJ0IG5vIHJlZmVycmVy
IHRlc3Q8L2E+Cis8c2NyaXB0PgorICAgIHdpbmRvdy5uYW1lID0gImNvbnNvbGVXaW5kb3ciOwor
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5z
ZXRDYW5PcGVuV2luZG93cyh0cnVlKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2Fp
dFVudGlsRG9uZSgpOworICAgIH0KKworICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgibGluayIpOw0KKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh0YXJnZXQub2Zm
c2V0TGVmdCArIDIsIHRhcmdldC5vZmZzZXRUb3AgKyAyKTsKKyAgICBldmVudFNlbmRlci5tb3Vz
ZURvd24oKTsKKyAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7CisKK2Z1bmN0aW9uIGxvZyhtc2cp
DQorew0KKyAgICB2YXIgbGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOw0KKyAg
ICBsaW5lLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1zZykpOw0KKyAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGxpbmUpOw0KK30K
Kzwvc2NyaXB0PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8L2JvZHk+PC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Jlc291cmNlcy9uby1yZWZlcnJl
ci1oZWxwZXIucGhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdh
dGlvbi9yZXNvdXJjZXMvbm8tcmVmZXJyZXItaGVscGVyLnBocAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9yZXNvdXJjZXMvbm8tcmVmZXJyZXItaGVs
cGVyLnBocAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMSBAQAorPD9waHAKKyAgICAvLyBQcmV2
ZW50IGZyb20gYmVpbmcgY2FjaGVkLgorICAgIGhlYWRlcigiQ2FjaGUtQ29udHJvbDogbm8tc3Rv
cmUsIHByaXZhdGUsIG1heC1hZ2U9MCIpOworICAgIGhlYWRlcigiQ29udGVudC1UeXBlOiB0ZXh0
L2h0bWwiKTsKKz8+CisKKzxodG1sPjxib2R5PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8
ZGl2IGlkPSJyZWZlcnJlciI+CitSZWZlcnJlcjogPD9waHAgZWNobyAkX1NFUlZFUlsnSFRUUF9S
RUZFUkVSJ107ID8+Cis8L2Rpdj4KKzxici8+Cis8c2NyaXB0PgorZnVuY3Rpb24gbG9nKG1zZykN
Cit7DQorICAgIHZhciBsaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7DQorICAg
IGxpbmUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobXNnKSk7DQorICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuYXBwZW5kQ2hpbGQobGluZSk7DQorfQor
CisgICAgdmFyIGNvbnNvbGVXaW5kb3cgPSB3aW5kb3cub3BlbigiIiwgImNvbnNvbGVXaW5kb3ci
KTsKKyAgICBpZiAoY29uc29sZVdpbmRvdykgeworCSAgICBjb25zb2xlV2luZG93LmxvZyhkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgicmVmZXJyZXIiKS5pbm5lclRleHQpOworICAgICAgICBjb25z
b2xlV2luZG93LmxvZygid2luZG93Lm9wZW5lcjogIiArICh3aW5kb3cub3BlbmVyID8gd2luZG93
Lm9wZW5lci5sb2NhdGlvbiA6ICIiKSk7CisgICAgfQorICAgIAorICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURv
bmUoKTsKKzwvc2NyaXB0PgorCis8L2JvZHk+PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9uYXZpZ2F0aW9uL3Jlc291cmNlcy9uby1yZWZlcnJlci1yZXNldC1oZWxwZXIucGhw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9yZXNvdXJj
ZXMvbm8tcmVmZXJyZXItcmVzZXQtaGVscGVyLnBocAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9yZXNvdXJjZXMvbm8tcmVmZXJyZXItcmVzZXQtaGVs
cGVyLnBocAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMSBAQAorPD9waHAKKyAgICAvLyBQcmV2
ZW50IGZyb20gYmVpbmcgY2FjaGVkLgorICAgIGhlYWRlcigiQ2FjaGUtQ29udHJvbDogbm8tc3Rv
cmUsIHByaXZhdGUsIG1heC1hZ2U9MCIpOworICAgIGhlYWRlcigiQ29udGVudC1UeXBlOiB0ZXh0
L2h0bWwiKTsKKz8+CisKKzxodG1sPjxib2R5PgorPGRpdiBpZD0icmVmZXJyZXIiPgorUmVmZXJy
ZXI6IDw/cGhwIGVjaG8gJF9TRVJWRVJbJ0hUVFBfUkVGRVJFUiddOyA/PgorPC9kaXY+Cis8YnIv
PgorPGEgaWQ9Im5vcmVmZXJyZXItbGluayIgaHJlZj0ibm8tcmVmZXJyZXItcmVzZXQtaGVscGVy
LnBocCIgcmVsPSJub3JlZmVycmVyIj5Eb2Vzbid0IHNlbmQgcmVmZXJyZXI8L2E+Cis8YSBpZD0i
cmVmZXJyZXItbGluayIgaHJlZj0ibm8tcmVmZXJyZXItaGVscGVyLnBocCI+U2VuZHMgcmVmZXJy
ZXI8L2E+Cis8c2NyaXB0PgorICAgIHZhciBjb25zb2xlV2luZG93ID0gd2luZG93Lm9wZW4oIiIs
ICJjb25zb2xlV2luZG93Iik7CisgICAgaWYgKGNvbnNvbGVXaW5kb3cpIHsKKwkgICAgY29uc29s
ZVdpbmRvdy5sb2coZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlZmVycmVyIikuaW5uZXJUZXh0
KTsKKyAgICAgICAgY29uc29sZVdpbmRvdy5sb2coIndpbmRvdy5vcGVuZXI6ICIgKyAod2luZG93
Lm9wZW5lciA/IHdpbmRvdy5vcGVuZXIubG9jYXRpb24gOiAiIikpOworICAgIH0KKworICAgIHZh
ciB0YXJnZXQ7DQorICAgIGlmICghY29uc29sZVdpbmRvdy5ub3JlZmVycmVyU3RlcERvbmUpIHsN
CisgICAgICAgIGNvbnNvbGVXaW5kb3cubm9yZWZlcnJlclN0ZXBEb25lID0gdHJ1ZTsNCisgICAg
ICAgIHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJub3JlZmVycmVyLWxpbmsiKTsN
CisgICAgfSBlbHNlIA0KKyAgICAgICAgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
InJlZmVycmVyLWxpbmsiKTsNCisgICAgdmFyIG5ld0V2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZl
bnQoIk1vdXNlRXZlbnQiKTsNCisgICAgbmV3RXZlbnQuaW5pdE1vdXNlRXZlbnQoImNsaWNrIiwg
ZmFsc2UsIGZhbHNlLCB3aW5kb3csIDAsIDEwLCAxMCwgMTAsIDEwLCBmYWxzZSwgZmFsc2UsIGZh
bHNlLCBmYWxzZSwgMCwgdGFyZ2V0KTsNCisgICAgdGFyZ2V0LmRpc3BhdGNoRXZlbnQobmV3RXZl
bnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9uYXZpZ2F0aW9uL3Jlc291cmNlcy9uby1yZWZlcnJlci1zYW1lLXdpbmRvdy1oZWxwZXIu
cGhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9yZXNv
dXJjZXMvbm8tcmVmZXJyZXItc2FtZS13aW5kb3ctaGVscGVyLnBocAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9yZXNvdXJjZXMvbm8tcmVmZXJyZXIt
c2FtZS13aW5kb3ctaGVscGVyLnBocAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOSBAQAorPD9w
aHAKKyAgICAvLyBQcmV2ZW50IGZyb20gYmVpbmcgY2FjaGVkLgorICAgIGhlYWRlcigiQ2FjaGUt
Q29udHJvbDogbm8tc3RvcmUsIHByaXZhdGUsIG1heC1hZ2U9MCIpOworICAgIGhlYWRlcigiQ29u
dGVudC1UeXBlOiB0ZXh0L2h0bWwiKTsKKz8+CisKKzxodG1sPjxib2R5PgorVGhlIFJlZmVycmVy
IGRpc3BsYXllZCBiZWxvdyBzaG91bGQgYmUgZW1wdHkuPGJyLz4KKzxkaXYgaWQ9InJlZmVycmVy
Ij5SZWZlcnJlcjogPD9waHAgZWNobyAkX1NFUlZFUlsnSFRUUF9SRUZFUkVSJ107ID8+PC9kaXY+
Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+DQorICAgIHZhciBsaW5lID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7DQorICAgIGxpbmUuYXBwZW5kQ2hpbGQoZG9jdW1l
bnQuY3JlYXRlVGV4dE5vZGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlZmVycmVyIikuaW5u
ZXJUZXh0ID09ICJSZWZlcnJlcjoiID8gIlBBU1MiIDogIkZBSUwiKSk7DQorICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuYXBwZW5kQ2hpbGQobGluZSk7CisgICAgCisgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIubm90aWZ5RG9uZSgpOworPC9zY3JpcHQ+Cis8L2JvZHk+PC9odG1sPgo=
</data>
<flag name="review"
          id="22378"
          type_id="1"
          status="+"
          setter="ap"
    />
    <flag name="commit-queue"
          id="22589"
          type_id="3"
          status="-"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>