<?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>35422</bug_id>
          
          <creation_ts>2010-02-25 23:58:53 -0800</creation_ts>
          <short_desc>[Gtk] Layout tables should indicate that they are not data tables via an object attribute</short_desc>
          <delta_ts>2010-10-27 15:17:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Accessibility</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>25531</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Joanmarie Diggs">jdiggs</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>mario</cc>
    
    <cc>walker.willie</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>194013</commentid>
    <comment_count>0</comment_count>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2010-02-25 23:58:53 -0800</bug_when>
    <thetext>The fix for bug #35418 causes &quot;layout tables&quot; (i.e. tables which are not &quot;data tables&quot;) to be exposed to Gtk ATs as tables. This is consistent with how HTML content is presented to ATs by Gecko and with what ATs on the GNOME desktop expect. However, it places the burden on the ATs to determine if a table should be treated as a layout table or a data table.

The way this has been handled by Gecko is via an object attribute associated with the accessible table: layout-guess. If Gecko believes that a table is a &quot;layout table&quot;, it sets the value of layout-guess to &apos;true&apos;. If Gecko believes that a table is a &quot;data table&quot;, it does not associate the layout-guess object attribute with the table. The AT can then take this under advisement when determining how to treat the table&apos;s contents.

I don&apos;t see any reason why we should not follow Gecko&apos;s lead in this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194014</commentid>
    <comment_count>1</comment_count>
      <attachid>49566</attachid>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2010-02-26 00:00:15 -0800</bug_when>
    <thetext>Created attachment 49566
test case: layout table

For this table, the value of the &apos;layout-guess&apos; object attribute for the table should be set to &apos;true&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194015</commentid>
    <comment_count>2</comment_count>
      <attachid>49567</attachid>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2010-02-26 00:01:28 -0800</bug_when>
    <thetext>Created attachment 49567
test case: data table

For this table, there should not be any &apos;layout-guess&apos; object attribute associated with the table.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194016</commentid>
    <comment_count>3</comment_count>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2010-02-26 00:03:27 -0800</bug_when>
    <thetext>Calling dibs on this one. (I don&apos;t have edit bug privs.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298347</commentid>
    <comment_count>4</comment_count>
      <attachid>71628</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2010-10-23 01:02:13 -0700</bug_when>
    <thetext>Created attachment 71628
Patch proposal + Unit test

I&apos;m attaching a patch that would fix this issue, along with an unit test to check it&apos;s behaviour.

The ChangeLog entry included is pretty descriptive and extense so I&apos;d just like to explain here why I didn&apos;t include a Layout test:

  1. The code I&apos;m changing doesn&apos;t really add new functionality other than splitting the behavior of the former isDataTable() function in two: isAccessibilityTable() and a more coherent version of the former isDataTable() function. It&apos;s more like a reorganization of the code to allow asking those two questions separately, where the new isAccessibilityTable() function is basically the same than the old isDataTable() in all the ports but the GTK one.

  2. Such differentiation is only used now in the GTK port (the patch makes sure the rest of the ports keep working exactly as usual), and that change is tested by the unit test provided along with this patch.

  3. I ran all the Layout tests with this patch and they keep passing, confirming the former behaviour keeps working (after replacing isDataTable() with isAccessibilityTable() where needed).

Because of these reasons, I thought a layout test was not actually needed. Now head to the ChangeLog entry if you want more, deeper, details on this patch.

Have a nice weekend!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298976</commentid>
    <comment_count>5</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2010-10-25 11:17:51 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; [...]
&gt;   1. The code I&apos;m changing doesn&apos;t really add new functionality other than splitting the 
&gt;  behavior of the former isDataTable() function in two: isAccessibilityTable() and a more 
&gt;  coherent version of the former isDataTable() function. It&apos;s more like a reorganization of the 
&gt;  code to allow asking those two questions separately, where the new isAccessibilityTable() 
&gt;  function is basically the same than the old isDataTable() in all the ports but the GTK one.
&gt; 
&gt;   2. Such differentiation is only used now in the GTK port (the patch makes sure the rest of 
&gt;  the ports keep working exactly as usual), and that change is tested by the unit test provided 
&gt;  along with this patch.
&gt;  [...]

Even thouugh the changes in WebCore a11y code are really simple (I basically splitted a function in two, but the non-GTK ports keep working exactly as they did before) I think it might be a good idea to get this patch reviewed by someone from Apple. And when I join Apple + a11y code, Chris Fleizach cames to my mind :-). So adding him to CC. 

Feeling like reviewing this patch then, Chris? O:-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299008</commentid>
    <comment_count>6</comment_count>
      <attachid>71628</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-10-25 11:57:03 -0700</bug_when>
    <thetext>Comment on attachment 71628
Patch proposal + Unit test

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

i agree with the refactoring. just have some questions inline

&gt; WebCore/accessibility/AccessibilityTable.cpp:87
&gt; +    return m_isAccessibilityTable;

where does m_isAccessibilityTable get set now that isTableExposableThroughAccessibility() is const

&gt; WebCore/accessibility/AccessibilityTable.cpp:95
&gt; +    // don not consider it a data table is it has an ARIA role

spelling. end sentence with period. capitalize start of sentence

&gt; WebCore/accessibility/AccessibilityTable.cpp:100
&gt; +    // Only &quot;data&quot; tables should be exposed as tables.

sentence should start with capital letter

&gt; WebCore/accessibility/AccessibilityTable.cpp:258
&gt; +

fix this comment (even though it&apos;s not yours to look more like a real sentence

&gt; WebCore/accessibility/AccessibilityTable.cpp:263
&gt; +    // expose it as a table, unless, of course, the aria role is a table

ditto

&gt; WebCore/accessibility/AccessibilityTable.cpp:266
&gt; +

does this still account for role=&quot;table&quot;?

&gt; WebCore/accessibility/AccessibilityTable.cpp:272
&gt; +

you can probably do this in one line

return tableNode &amp;&amp; tableNode-&gt;hasTagName(tableTag)

&gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:336
&gt; +    if (coreObject) {

you should use an early return here if !coreObject)

&gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:344
&gt; +        // Technologies know when an exposed table is not data table

end the sentence with a period

&gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:345
&gt; +        if (coreObject-&gt;isAccessibilityTable() &amp;&amp; !coreObject-&gt;isDataTable()) {

not sure why you want an AXTable, but not a dataTable... wouldn&apos;t that mean the layout-guess is false, because you know it&apos;s an accessibility table.
can you explain to me why this is right?

&gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:347
&gt; +            attributeSet = addAttributeToSet(attributeSet, &quot;layout-guess&quot;, value.utf8().data());

can you not do 


attributeSet = addAttributeToSet(attributeSet, &quot;layout-guess&quot;, &quot;true&quot;);
?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299378</commentid>
    <comment_count>7</comment_count>
      <attachid>71861</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2010-10-26 04:03:47 -0700</bug_when>
    <thetext>Created attachment 71861
Patch proposal + Unit test

Attaching a new patch

(In reply to comment #6)
&gt; (From update of attachment 71628 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=71628&amp;action=review
&gt; 
&gt; i agree with the refactoring. just have some questions inline

That&apos;s a good start!

&gt; &gt; WebCore/accessibility/AccessibilityTable.cpp:87
&gt; &gt; +    return m_isAccessibilityTable;
&gt; 
&gt; where does m_isAccessibilityTable get set now that isTableExposableThroughAccessibility() is const

It&apos;s still set in the same place than before, in the constructor:

   AccessibilityTable::AccessibilityTable(RenderObject* renderer)
       : AccessibilityRenderObject(renderer),
       m_headerContainer(0)
   {
   #if ACCESSIBILITY_TABLES
       m_isAccessibilityTable = isTableExposableThroughAccessibility();
   #else
       m_isAccessibilityTable = false;
   #endif
   }

Other than that, is also redefined in subclasses, such as AccessibilityARIAGrid.

&gt; &gt; WebCore/accessibility/AccessibilityTable.cpp:95
&gt; &gt; +    // don not consider it a data table is it has an ARIA role
&gt; 
&gt; spelling. end sentence with period. capitalize start of sentence

Fixed. Sorry.

&gt; &gt; WebCore/accessibility/AccessibilityTable.cpp:100
&gt; &gt; +    // Only &quot;data&quot; tables should be exposed as tables.
&gt; 
&gt; sentence should start with capital letter

Fixed.

&gt; &gt; WebCore/accessibility/AccessibilityTable.cpp:258
&gt; &gt; +
&gt; 
&gt; fix this comment (even though it&apos;s not yours to look more like a real sentence

No problem. Fixed.

&gt; &gt; WebCore/accessibility/AccessibilityTable.cpp:263
&gt; &gt; +    // expose it as a table, unless, of course, the aria role is a table
&gt; 
&gt; ditto

Fixed.

&gt; &gt; WebCore/accessibility/AccessibilityTable.cpp:266
&gt; &gt; +
&gt; 
&gt; does this still account for role=&quot;table&quot;?

Not sure what you mean here... what I can tell is that it basically keeps the same behaviour than before, but I&apos;m afraid I didn&apos;t enter in such a level of detail to answer this question :-/

&gt; &gt; WebCore/accessibility/AccessibilityTable.cpp:272
&gt; &gt; +
&gt; 
&gt; you can probably do this in one line
&gt; 
&gt; return tableNode &amp;&amp; tableNode-&gt;hasTagName(tableTag)

Sure. Fixed.

&gt; &gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:336
&gt; &gt; +    if (coreObject) {
&gt; 
&gt; you should use an early return here if !coreObject)

Fixed.

&gt; &gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:344
&gt; &gt; +        // Technologies know when an exposed table is not data table
&gt; 
&gt; end the sentence with a period

Fixed.
 
&gt; &gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:345
&gt; &gt; +        if (coreObject-&gt;isAccessibilityTable() &amp;&amp; !coreObject-&gt;isDataTable()) {
&gt; 
&gt; not sure why you want an AXTable, but not a dataTable... wouldn&apos;t that mean the layout-guess is false, because you know it&apos;s an accessibility table.
&gt; can you explain to me why this is right?

Yes. The point is that in the GTK port we expose to accessibiltity every table, no matter it&apos;s a layout or a data table, so isAccessibilityTable() is going to return always &apos;true&apos; as long as the coreObject is an isntance of AccessibilityTable. However, and this is the main reason behind splitting the former isDataTable() function, we need to know when those accessibility tables are not data tables, according to the heuristic used. When that happens we just set an extra &apos;layout-guess&apos; attribute to &apos;true&apos; so ATs can treat them like that (if you have more doubts about why to use this mechanism instead of doing it in other way, I guess Joanmarie&apos;d better answer that).

Hope this helps.

&gt; &gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:347
&gt; &gt; +            attributeSet = addAttributeToSet(attributeSet, &quot;layout-guess&quot;, value.utf8().data());
&gt; 
&gt; can you not do 
&gt; 
&gt; 
&gt; attributeSet = addAttributeToSet(attributeSet, &quot;layout-guess&quot;, &quot;true&quot;);
&gt; ?

Definitely. Fixed

Asking for review again, then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299578</commentid>
    <comment_count>8</comment_count>
      <attachid>71861</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-10-26 10:47:11 -0700</bug_when>
    <thetext>Comment on attachment 71861
Patch proposal + Unit test

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299699</commentid>
    <comment_count>9</comment_count>
      <attachid>71861</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-26 12:19:39 -0700</bug_when>
    <thetext>Comment on attachment 71861
Patch proposal + Unit test

Clearing flags on attachment: 71861

Committed r70554: &lt;http://trac.webkit.org/changeset/70554&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299700</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-26 12:19:45 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300047</commentid>
    <comment_count>11</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2010-10-27 00:39:52 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 71861 [details])
&gt; r=me

Thanks Chris. From now on, there&apos;s no need for you to set the cq+ flag anymore, as I already got commit permissions granted, so I can use webkit-patch myself \o/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300601</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-27 14:49:53 -0700</bug_when>
    <thetext>Many of us us the CQ anyway. :) But you&apos;re always welcome to commit things &quot;by hand&quot; if you prefer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300627</commentid>
    <comment_count>13</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2010-10-27 15:17:58 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Many of us us the CQ anyway. :) But you&apos;re always welcome to commit things &quot;by hand&quot; if you prefer.

You mean using webkit-patch safe land? I&apos;m new here and completely open-minded to suggestions. And using the commit-queue does sound good to me as well (I just did it this way as I thought it was the right way)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>49566</attachid>
            <date>2010-02-26 00:00:15 -0800</date>
            <delta_ts>2010-02-26 00:00:15 -0800</delta_ts>
            <desc>test case: layout table</desc>
            <filename>layout-table.html</filename>
            <type>text/html</type>
            <size>81</size>
            <attacher name="Joanmarie Diggs">jdiggs</attacher>
            
              <data encoding="base64">PGh0bWw+Cjxib2R5Pgo8dGFibGU+Cjx0cj48dGQ+Zm9vPC90ZD48dGQ+YmFyPC90ZD48L3RyPgo8
L3RhYmxlPgo8L2JvZHk+CjwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>49567</attachid>
            <date>2010-02-26 00:01:28 -0800</date>
            <delta_ts>2010-02-26 00:01:28 -0800</delta_ts>
            <desc>test case: data table</desc>
            <filename>data-table.html</filename>
            <type>text/html</type>
            <size>112</size>
            <attacher name="Joanmarie Diggs">jdiggs</attacher>
            
              <data encoding="base64">PGh0bWw+Cjxib2R5Pgo8dGFibGU+Cjx0cj48dGg+T2RkPC90aD48dGg+RXZlbjwvdGg+PC90cj4K
PHRyPjx0ZD4xPC90ZD48dGQ+MjwvdGQ+PC90cj4KPC90YWJsZT4KPC9ib2R5Pgo8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71628</attachid>
            <date>2010-10-23 01:02:13 -0700</date>
            <delta_ts>2010-10-26 04:03:47 -0700</delta_ts>
            <desc>Patch proposal + Unit test</desc>
            <filename>0001-2010-10-22-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>33968</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSAwNGM3YzI1MmNiZjFlN2I0YmY2NjNhOWViM2NlMzU5MzZlZWE3NDg5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBTYXQsIDIzIE9jdCAyMDEwIDA5OjUxOjEzICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gMjAxMC0xMC0yMiAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+
CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBbR3RrXSBMYXlv
dXQgdGFibGVzIHNob3VsZCBpbmRpY2F0ZSB0aGF0IHRoZXkgYXJlIG5vdCBkYXRhIHRhYmxlcyB2
aWEgYW4gb2JqZWN0IGF0dHJpYnV0ZQogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zNTQyMgoKICAgICAgICBTZXQgdGhlICdsYXlvdXQtZ3Vlc3MnIGF0dHJp
YnV0ZSB0byAndHJ1ZScgZm9yIGRhdGEgdGFibGVzLgoKICAgICAgICBSZW9yZ2FuaXplZCBzb21l
IGNvZGUgaW4gQWNjZXNzaWJpbGl0eVRhYmxlIHNvIG5vdyB0aGUgZnVuY3Rpb24KICAgICAgICBp
c0RhdGFUYWJsZSgpIGlzIG1vcmUgY29oZXJlbnQgYnkganVzdCBhbnN3ZXJpbmcgdGhhdCB2ZXJ5
CiAgICAgICAgc3BlY2lmaWMgcXVlc3Rpb24sIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgdGFi
bGUgaXMgYmVpbmcKICAgICAgICBleHBvc2VkIG9yIG5vdCB0byBBc3Npc3RpdmUgVGVjaG5vbG9n
aWVzLgoKICAgICAgICBIZW5jZSwgbm93IGl0J3MgcG9zc2libGUgdG8gbWFrZSB0d28gcXVlc3Rp
b25zIHNlcGFyYXRlbHkgaW5zdGVhZAogICAgICAgIG9mIGp1c3Qgb25lLCBtZWFuaW5nIHRoYXQg
dGhlIG5ldyBmdW5jdGlvbiBpc0FjY2Vzc2libGVUYWJsZSgpIGlzCiAgICAgICAgbm93IHdoYXQg
d2UgZm9ybWVybHkgZGVmaW5lZCBhcyB0aGUgaXNEYXRhVGFibGUoKSBmdW5jdGlvbi4KCiAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaDoKICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aXNBY2Nlc3NpYmlsaXR5VGFibGUpOgogICAgICAgICAg
IE5ldyBmdW5jdGlvbiB0byBhbGxvdyBhc2tpbmcgdGFibGVzIGJvdGggd2hldGhlciB0aGV5IGFy
ZQogICAgICAgICAgIGV4cG9zZWQgYW5kIHdoZXRoZXIgdGhleSBhcmUgZGF0YSB0YWJsZXMsIHdo
aWNoIGFyZSBkaWZmZXJlbnQKICAgICAgICAgICBxdWVzdGlvbnMgd2hvc2UgYW5zd2VycyBtaWdo
dCBiZSB0aGUgc2FtZSBpbiBtYW55IHNpdHVhdGlvbnMsCiAgICAgICAgICAgYnV0IGRpZmZlcmVu
dCBzb21ldGltZXMgKGFzIGl0IGNhbiBoYXBwZW4gaW4gdGhlIEdUSyBwb3J0KS4KICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmg6CiAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHA6CiAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlUYWJsZTo6aGFzQVJJQVJvbGUpOgogICAgICAgICAgIE5ldywgY2hlY2tzIHdoZXRoZXIgdGhl
IHRhYmxlIGhhcyBhIHZhbGlkIEFSSUEgcm9sZS4KICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVRhYmxlOjppc0FjY2Vzc2liaWxpdHlUYWJsZSk6CiAgICAgICAgICAgTmV3LCByZXR1cm5z
IHRoZSB2YWx1ZSBvZiBtX2lzQWNjZXNzaWJpbGl0eVRhYmxlLiBJdCdzCiAgICAgICAgICAgYmFz
aWNhbGx5IHRoZSBmb3JtZXIgaXNEYXRhVGFibGUoKSBmdW5jdGlvbiByZW5hbWVkLgogICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OmlzRGF0YVRhYmxlKToKICAgICAgICAgICBD
aGFuZ2VkIGJlaGF2aW91ci4gSW5zdGVhZCBvZiBqdXN0IHJldHVybmluZyB0aGUgdmFsdWUgb2YK
ICAgICAgICAgICBtX2lzQWNjZXNzaWJpbGl0eVRhYmxlIGFzIGl0IGRpZCBzbyBmYXIgKHdoaWNo
IHdhcyBjb25mdXNpbmcKICAgICAgICAgICBiZWNhdXNlIG9mIHRoYXQncyBub3Qgd2hhdCB0aGUg
bmFtZSBzdWdnZXN0cyksIGZvY3VzIG9uCiAgICAgICAgICAgY2hlY2tpbmcgd2hldGhlciBpdCdz
IGEgZGF0YSB0YWJsZSBvciBub3QgYW5kIHJldHVybiBhIGJvb2wKICAgICAgICAgICB2YWx1ZSBh
Y2NvcmRpbmdseS4gSXQncyBiYXNpY2FsbHkgYSByZW5hbWUgb2YgdGhlIGZvcm1lcgogICAgICAg
ICAgIGlzVGFibGVFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpIGZ1bmN0aW9uLCBidXQg
d2l0aG91dGgKICAgICAgICAgICB0aGUgR1RLLXNwZWNpZmljIGlmLWVuZGlmIHJlZ2lvbiAod2hp
Y2ggZGlkbid0IG1ha2Ugc2Vuc2UKICAgICAgICAgICBoZXJlIG5vdywgYmVjYXVzZSB0aGF0IHdh
cyBhbnN3ZXJpbmcgdGhlIHF1ZXN0aW9uICJpcyB0aGUgdGFibGUKICAgICAgICAgICBleHBvc2Vk
IGluIHRoZSBHVEsgcG9ydD8iLCBpbnN0ZWFkIG9mICJpcyBpdCBhIGRhdGEgdGFibGU/IikuCiAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6aXNUYWJsZUV4cG9zYWJsZVRocm91
Z2hBY2Nlc3NpYmlsaXR5KToKICAgICAgICAgICBVc2VzIHRoZSBoYXNBcmlhUm9sZSgpLCBhbmQg
aXNEYXRhVGFibGUoKSB0byBkZXRlcm1pbmUgd2hldGhlcgogICAgICAgICAgIGEgdGFibGUgc2hv
dWxkIGJlIGV4cG9zZWQgb3Igbm90LiBBbHNvIGluY2x1ZGVzIHRoZSBHVEstc3BlY2lmaWMKICAg
ICAgICAgICBpZi1yZWdpb24gY29taW5nIGZyb20gdGhlIGZvcm1lciBpbXBsZW1lbnRhdGlvbiBv
ZiB0aGUgZnVuY3Rpb24KICAgICAgICAgICBpc1RhYmxlRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2li
aWxpdHkoKSBub3QgdG8gY2hlY2sgd2hldGhlciBpdCdzCiAgICAgICAgICAgYSBkYXRhIHRhYmxl
IGluIGNhc2UgdGhlIHJlc3Qgb2YgdGhlIGNoZWNrcyBzdWNjZWVkZWQgKGFsbAogICAgICAgICAg
IHRhYmxlcyBhcmUgZXhwb3NlZCBpbiB0aGUgR1RLIHBvcnQpLgogICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5VGFibGU6OmFkZENoaWxkcmVuKToKICAgICAgICAgICBSZXBsYWNlIHVzYWdl
IG9mIGlzRGF0YVRhYmxlKCkgd2l0aCBpc0FjY2Vzc2liaWxpdHlUYWJsZSgpLCB0bwogICAgICAg
ICAgIGtlZXAgZXhhY3RseSB0aGUgc2FtZSBiZWhhdmlvdXIgaGFwcGVuaW5nIGJlZm9yZSB0aGlz
IHBhdGNoLgogICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OnJvbGVWYWx1ZSk6
IERpdHRvLgogICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OmFjY2Vzc2liaWxp
dHlJc0lnbm9yZWQpOiBEaXR0by4KICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxl
Ojp0aXRsZSk6IERpdHRvLgoKICAgICAgICBVcGRhdGVkIHVzYWdlIG9mIHRoZSBmb3JtZXIgZnVu
Y3Rpb24gaXNEYXRhVGFibGUoKSBldmVyeXdoZXJlCiAgICAgICAgZWxzZSwgcmVwbGFjaW5nIGl0
IHdpdGggdGhlIG5ldyBpc0FjY2Vzc2liaWxpdHlUYWJsZSgpLCBzbyBrZWVwaW5nCiAgICAgICAg
ZXhhY3RseSB0aGUgc2FtZSBiZWhhdmlvdXIgaGFwcGVuaW5nIGJlZm9yZSB0aGlzIHBhdGNoLgoK
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcDoKICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkOjphZGRDaGlsZHJlbik6CiAgICAgICAg
ICAgVXNlIGlzQWNjZXNzaWJpbGl0eVRhYmxlKCkgaW5zdGVhZCBvZiBpc0RhdGFUYWJsZSgpLgog
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsLmNwcDoKICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbDo6cGFyZW50VGFibGUpOiBE
aXR0by4KICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93LmNw
cDoKICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93OjpkaXNjbG9zZWRS
b3dzKTogRGl0dG8uCiAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdzo6
ZGlzY2xvc2VkQnlSb3cpOiBEaXR0by4KICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFS
SUFHcmlkUm93OjpwYXJlbnRUYWJsZSk6IERpdHRvLgogICAgICAgICogYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcDoKICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eVRhYmxlQ2VsbDo6aXNUYWJsZUNlbGwpOgogICAgICAgICAgIFVzZSBpc0FjY2Vzc2liaWxpdHlU
YWJsZSgpIGluc3RlYWQgb2YgaXNEYXRhVGFibGUoKS4KICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVRhYmxlSGVhZGVyQ29udGFpbmVyLmNwcDoKICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVRhYmxlSGVhZGVyQ29udGFpbmVyOjphZGRDaGlsZHJlbik6IERpdHRvLgog
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuY3BwOgogICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVSb3c6OmlzVGFibGVSb3cpOiBEaXR0bwogICAg
ICAgICogYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW06CiAg
ICAgICAgKC1bQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWRkaXRpb25hbEFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVOYW1lc10pOgogICAgICAgICAgIFVzZSBpc0FjY2Vzc2liaWxpdHlUYWJsZSgp
IGluc3RlYWQgb2YgaXNEYXRhVGFibGUoKS4KICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXNdKTogRGl0dG8uCiAgICAgICAgKC1b
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOl0p
OiBEaXR0by4KICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmls
aXR5UGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzXSk6IERpdHRvLgogICAgICAgICgtW0FjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlTZXRWYWx1ZTpmb3JBdHRyaWJ1dGU6
XSk6IERpdHRvLgogICAgICAgICgtW0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2li
aWxpdHlBdHRyaWJ1dGVWYWx1ZTpmb3JQYXJhbWV0ZXI6XSk6IERpdHRvLgoKICAgICAgICBVc2Ug
dGhlIG5ldyBmdW5jdGlvbiBpc0FjY2Vzc2liaWxpdHlUYWJsZSgpIHRvZ2V0aGVyIHdpdGggdGhl
CiAgICAgICAgbW9kaWZpZWQgaW1wbGVtZW50YXRpb24gb2YgaXNEYXRhVGFibGUoKSB0byBzZXQg
dGhlICdsYXlvdXQtZ3Vlc3MnCiAgICAgICAgYXR0cmlidXRlIHdoZW4gbmVlZGVkLgoKICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcDoK
ICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfZ2V0X2F0dHJpYnV0ZXMpOgogICAgICAgICAgIFNl
dCB0aGUgJ2xheW91dC1ndWVzcycgYXR0cmlidXRlIHRvICd0cnVlJyB0byBoZWxwIEFzc2lzdGl2
ZQogICAgICAgICAgIFRlY2hub2xvZ2llcyBndWVzc2luZyB3aGljaCB0YWJsZXMgYXJlIG5vdCBk
YXRhIHRhYmxlcy4KCjIwMTAtMTAtMjIgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBp
Z2FsaWEuY29tPgoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAg
W0d0a10gTGF5b3V0IHRhYmxlcyBzaG91bGQgaW5kaWNhdGUgdGhhdCB0aGV5IGFyZSBub3QgZGF0
YSB0YWJsZXMgdmlhIGFuIG9iamVjdCBhdHRyaWJ1dGUKICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzU0MjIKCiAgICAgICAgTmV3IHVuaXQgdGVzdCB0byBj
aGVjayB0aGUgJ2xheW91dC1ndWVzcycgYXR0cmlidXRlIGluIHRhYmxlcy4KCiAgICAgICAgKiB0
ZXN0cy90ZXN0YXRrLmM6CiAgICAgICAgKGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZU5hbWVIYXNW
YWx1ZSk6IE5ldywgbG9va3MgZm9yIGEgYXR0cmlidXRlCiAgICAgICAgd2l0aCBhIHNwZWNpZmlj
IHZhbHVlLCBieSB0aGUgbmFtZSBvZiBhdHRyaWJ1dGUuCiAgICAgICAgKGF0a0F0dHJpYnV0ZVNl
dENvbnRhaW5zQXR0cmlidXRlTmFtZSk6IE5ldywganVzdCBjaGVja3Mgd2hldGhlcgogICAgICAg
IGFuIGF0dHJpYnV0ZSB3aXRoIGEgc3BlY2lmaWVkIG5hbWUgaXMgcHJlc2VudCBpbiB0aGUgc2V0
LgogICAgICAgIChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZSk6IE1vZGlmaWVkIHRv
IHJlbGF5IG9uIHRoZSBuZXcKICAgICAgICBmdW5jdGlvbiBhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1
dGVOYW1lSGFzVmFsdWUoKS4KICAgICAgICAodGVzdFdlYmtpdEF0a0xheW91dEFuZERhdGFUYWJs
ZXMpOiBOZXcgdGVzdC4KICAgICAgICAobWFpbik6IEFkZGVkIHRoZSBuZXcgdGVzdC4KLS0tCiBX
ZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgOTMg
KysrKysrKysrKysrKysrKysrKysKIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
QVJJQUdyaWQuY3BwICAgIHwgICAgMiArLQogLi4uL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eUFSSUFHcmlkQ2VsbC5jcHAgICAgfCAgICAyICstCiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eUFSSUFHcmlkUm93LmNwcCB8ICAgIDYgKy0KIFdlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmggICAgICAgIHwgICAgMSArCiBXZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcCAgICAgICB8ICAgODQgKysrKysrKysrKysrLS0t
LS0tCiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmggICAgICAgICB8
ICAgIDUgKy0KIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNw
cCAgIHwgICAgMiArLQogLi4uL0FjY2Vzc2liaWxpdHlUYWJsZUhlYWRlckNvbnRhaW5lci5jcHAg
ICAgICAgICAgfCAgICAyICstCiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRh
YmxlUm93LmNwcCAgICB8ICAgIDIgKy0KIC4uLi9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJBdGsuY3BwICAgICAgICAgIHwgICAxOSArKystCiAuLi4vbWFjL0FjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyLm1tICAgICAgICAgICAgICB8ICAgMTIgKystLQogV2ViS2l0L2d0ay9DaGFuZ2VM
b2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE5ICsrKysKIFdlYktpdC9ndGsv
dGVzdHMvdGVzdGF0ay5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA2NCArKysrKysrKysr
KystLQogMTQgZmlsZXMgY2hhbmdlZCwgMjU5IGluc2VydGlvbnMoKyksIDU0IGRlbGV0aW9ucygt
KQoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggM2I2NmY4My4uNzk0ZTg2YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5NiBAQAorMjAxMC0xMC0yMiAgTWFyaW8gU2Fu
Y2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0d0a10gTGF5b3V0IHRhYmxlcyBzaG91bGQgaW5k
aWNhdGUgdGhhdCB0aGV5IGFyZSBub3QgZGF0YSB0YWJsZXMgdmlhIGFuIG9iamVjdCBhdHRyaWJ1
dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1NDIy
CisKKyAgICAgICAgU2V0IHRoZSAnbGF5b3V0LWd1ZXNzJyBhdHRyaWJ1dGUgdG8gJ3RydWUnIGZv
ciBkYXRhIHRhYmxlcy4KKworICAgICAgICBSZW9yZ2FuaXplZCBzb21lIGNvZGUgaW4gQWNjZXNz
aWJpbGl0eVRhYmxlIHNvIG5vdyB0aGUgZnVuY3Rpb24KKyAgICAgICAgaXNEYXRhVGFibGUoKSBp
cyBtb3JlIGNvaGVyZW50IGJ5IGp1c3QgYW5zd2VyaW5nIHRoYXQgdmVyeQorICAgICAgICBzcGVj
aWZpYyBxdWVzdGlvbiwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSB0YWJsZSBpcyBiZWluZwor
ICAgICAgICBleHBvc2VkIG9yIG5vdCB0byBBc3Npc3RpdmUgVGVjaG5vbG9naWVzLgorCisgICAg
ICAgIEhlbmNlLCBub3cgaXQncyBwb3NzaWJsZSB0byBtYWtlIHR3byBxdWVzdGlvbnMgc2VwYXJh
dGVseSBpbnN0ZWFkCisgICAgICAgIG9mIGp1c3Qgb25lLCBtZWFuaW5nIHRoYXQgdGhlIG5ldyBm
dW5jdGlvbiBpc0FjY2Vzc2libGVUYWJsZSgpIGlzCisgICAgICAgIG5vdyB3aGF0IHdlIGZvcm1l
cmx5IGRlZmluZWQgYXMgdGhlIGlzRGF0YVRhYmxlKCkgZnVuY3Rpb24uCisKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlPYmplY3Q6OmlzQWNjZXNzaWJpbGl0eVRhYmxlKToKKyAgICAgICAgICAgTmV3
IGZ1bmN0aW9uIHRvIGFsbG93IGFza2luZyB0YWJsZXMgYm90aCB3aGV0aGVyIHRoZXkgYXJlCisg
ICAgICAgICAgIGV4cG9zZWQgYW5kIHdoZXRoZXIgdGhleSBhcmUgZGF0YSB0YWJsZXMsIHdoaWNo
IGFyZSBkaWZmZXJlbnQKKyAgICAgICAgICAgcXVlc3Rpb25zIHdob3NlIGFuc3dlcnMgbWlnaHQg
YmUgdGhlIHNhbWUgaW4gbWFueSBzaXR1YXRpb25zLAorICAgICAgICAgICBidXQgZGlmZmVyZW50
IHNvbWV0aW1lcyAoYXMgaXQgY2FuIGhhcHBlbiBpbiB0aGUgR1RLIHBvcnQpLgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmg6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVRhYmxlOjpoYXNBUklBUm9sZSk6CisgICAgICAgICAgIE5ldywgY2hlY2tzIHdoZXRoZXIg
dGhlIHRhYmxlIGhhcyBhIHZhbGlkIEFSSUEgcm9sZS4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlUYWJsZTo6aXNBY2Nlc3NpYmlsaXR5VGFibGUpOgorICAgICAgICAgICBOZXcsIHJl
dHVybnMgdGhlIHZhbHVlIG9mIG1faXNBY2Nlc3NpYmlsaXR5VGFibGUuIEl0J3MKKyAgICAgICAg
ICAgYmFzaWNhbGx5IHRoZSBmb3JtZXIgaXNEYXRhVGFibGUoKSBmdW5jdGlvbiByZW5hbWVkLgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjppc0RhdGFUYWJsZSk6CisgICAg
ICAgICAgIENoYW5nZWQgYmVoYXZpb3VyLiBJbnN0ZWFkIG9mIGp1c3QgcmV0dXJuaW5nIHRoZSB2
YWx1ZSBvZgorICAgICAgICAgICBtX2lzQWNjZXNzaWJpbGl0eVRhYmxlIGFzIGl0IGRpZCBzbyBm
YXIgKHdoaWNoIHdhcyBjb25mdXNpbmcKKyAgICAgICAgICAgYmVjYXVzZSBvZiB0aGF0J3Mgbm90
IHdoYXQgdGhlIG5hbWUgc3VnZ2VzdHMpLCBmb2N1cyBvbgorICAgICAgICAgICBjaGVja2luZyB3
aGV0aGVyIGl0J3MgYSBkYXRhIHRhYmxlIG9yIG5vdCBhbmQgcmV0dXJuIGEgYm9vbAorICAgICAg
ICAgICB2YWx1ZSBhY2NvcmRpbmdseS4gSXQncyBiYXNpY2FsbHkgYSByZW5hbWUgb2YgdGhlIGZv
cm1lcgorICAgICAgICAgICBpc1RhYmxlRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSBm
dW5jdGlvbiwgYnV0IHdpdGhvdXRoCisgICAgICAgICAgIHRoZSBHVEstc3BlY2lmaWMgaWYtZW5k
aWYgcmVnaW9uICh3aGljaCBkaWRuJ3QgbWFrZSBzZW5zZQorICAgICAgICAgICBoZXJlIG5vdywg
YmVjYXVzZSB0aGF0IHdhcyBhbnN3ZXJpbmcgdGhlIHF1ZXN0aW9uICJpcyB0aGUgdGFibGUKKyAg
ICAgICAgICAgZXhwb3NlZCBpbiB0aGUgR1RLIHBvcnQ/IiwgaW5zdGVhZCBvZiAiaXMgaXQgYSBk
YXRhIHRhYmxlPyIpLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjppc1Rh
YmxlRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkpOgorICAgICAgICAgICBVc2VzIHRoZSBo
YXNBcmlhUm9sZSgpLCBhbmQgaXNEYXRhVGFibGUoKSB0byBkZXRlcm1pbmUgd2hldGhlcgorICAg
ICAgICAgICBhIHRhYmxlIHNob3VsZCBiZSBleHBvc2VkIG9yIG5vdC4gQWxzbyBpbmNsdWRlcyB0
aGUgR1RLLXNwZWNpZmljCisgICAgICAgICAgIGlmLXJlZ2lvbiBjb21pbmcgZnJvbSB0aGUgZm9y
bWVyIGltcGxlbWVudGF0aW9uIG9mIHRoZSBmdW5jdGlvbgorICAgICAgICAgICBpc1RhYmxlRXhw
b3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSBub3QgdG8gY2hlY2sgd2hldGhlciBpdCdzCisg
ICAgICAgICAgIGEgZGF0YSB0YWJsZSBpbiBjYXNlIHRoZSByZXN0IG9mIHRoZSBjaGVja3Mgc3Vj
Y2VlZGVkIChhbGwKKyAgICAgICAgICAgdGFibGVzIGFyZSBleHBvc2VkIGluIHRoZSBHVEsgcG9y
dCkuCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OmFkZENoaWxkcmVuKToK
KyAgICAgICAgICAgUmVwbGFjZSB1c2FnZSBvZiBpc0RhdGFUYWJsZSgpIHdpdGggaXNBY2Nlc3Np
YmlsaXR5VGFibGUoKSwgdG8KKyAgICAgICAgICAga2VlcCBleGFjdGx5IHRoZSBzYW1lIGJlaGF2
aW91ciBoYXBwZW5pbmcgYmVmb3JlIHRoaXMgcGF0Y2guCisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5VGFibGU6OnJvbGVWYWx1ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVRhYmxlOjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OnRpdGxlKTogRGl0dG8uCisKKyAgICAgICAg
VXBkYXRlZCB1c2FnZSBvZiB0aGUgZm9ybWVyIGZ1bmN0aW9uIGlzRGF0YVRhYmxlKCkgZXZlcnl3
aGVyZQorICAgICAgICBlbHNlLCByZXBsYWNpbmcgaXQgd2l0aCB0aGUgbmV3IGlzQWNjZXNzaWJp
bGl0eVRhYmxlKCksIHNvIGtlZXBpbmcKKyAgICAgICAgZXhhY3RseSB0aGUgc2FtZSBiZWhhdmlv
dXIgaGFwcGVuaW5nIGJlZm9yZSB0aGlzIHBhdGNoLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eUFSSUFHcmlkOjphZGRDaGlsZHJlbik6CisgICAgICAgICAgIFVzZSBpc0FjY2Vzc2liaWxp
dHlUYWJsZSgpIGluc3RlYWQgb2YgaXNEYXRhVGFibGUoKS4KKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbDo6cGFyZW50VGFibGUpOiBEaXR0by4KKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZFJvdy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c6OmRpc2Nsb3NlZFJvd3MpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdzo6ZGlzY2xvc2VkQnlSb3cp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdzo6cGFy
ZW50VGFibGUpOiBEaXR0by4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlU
YWJsZUNlbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6
aXNUYWJsZUNlbGwpOgorICAgICAgICAgICBVc2UgaXNBY2Nlc3NpYmlsaXR5VGFibGUoKSBpbnN0
ZWFkIG9mIGlzRGF0YVRhYmxlKCkuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5VGFibGVIZWFkZXJDb250YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVRhYmxlSGVhZGVyQ29udGFpbmVyOjphZGRDaGlsZHJlbik6IERpdHRvLgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlUm93LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlUYWJsZVJvdzo6aXNUYWJsZVJvdyk6IERpdHRvCisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW06CisgICAgICAg
ICgtW0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFkZGl0aW9uYWxBY2Nlc3NpYmlsaXR5QXR0
cmlidXRlTmFtZXNdKToKKyAgICAgICAgICAgVXNlIGlzQWNjZXNzaWJpbGl0eVRhYmxlKCkgaW5z
dGVhZCBvZiBpc0RhdGFUYWJsZSgpLgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXNdKTogRGl0dG8uCisgICAgICAgICgtW0Fj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpdKTog
RGl0dG8uCisgICAgICAgICgtW0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxp
dHlQYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXNdKTogRGl0dG8uCisgICAgICAgICgtW0FjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlTZXRWYWx1ZTpmb3JBdHRyaWJ1dGU6
XSk6IERpdHRvLgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3Np
YmlsaXR5QXR0cmlidXRlVmFsdWU6Zm9yUGFyYW1ldGVyOl0pOiBEaXR0by4KKworICAgICAgICBV
c2UgdGhlIG5ldyBmdW5jdGlvbiBpc0FjY2Vzc2liaWxpdHlUYWJsZSgpIHRvZ2V0aGVyIHdpdGgg
dGhlCisgICAgICAgIG1vZGlmaWVkIGltcGxlbWVudGF0aW9uIG9mIGlzRGF0YVRhYmxlKCkgdG8g
c2V0IHRoZSAnbGF5b3V0LWd1ZXNzJworICAgICAgICBhdHRyaWJ1dGUgd2hlbiBuZWVkZWQuCisK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0
ay5jcHA6CisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV9nZXRfYXR0cmlidXRlcyk6CisgICAg
ICAgICAgIFNldCB0aGUgJ2xheW91dC1ndWVzcycgYXR0cmlidXRlIHRvICd0cnVlJyB0byBoZWxw
IEFzc2lzdGl2ZQorICAgICAgICAgICBUZWNobm9sb2dpZXMgZ3Vlc3Npbmcgd2hpY2ggdGFibGVz
IGFyZSBub3QgZGF0YSB0YWJsZXMuCisKIDIwMTAtMTAtMTkgIEFsZXhleSBQcm9za3VyeWFrb3Yg
IDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgQnVpbGQgZml4IChFRkwsIG1heWJlIG1vcmUpLgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5j
cHAgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcAppbmRl
eCAwZDlmODQ1Li44NjUxYTgwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eUFSSUFHcmlkLmNwcAorKysgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eUFSSUFHcmlkLmNwcApAQCAtODMsNyArODMsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlB
UklBR3JpZDo6YWRkQ2hpbGRyZW4oKQogewogICAgIEFTU0VSVCghbV9oYXZlQ2hpbGRyZW4pOyAK
ICAgICAKLSAgICBpZiAoIWlzRGF0YVRhYmxlKCkpIHsKKyAgICBpZiAoIWlzQWNjZXNzaWJpbGl0
eVRhYmxlKCkpIHsKICAgICAgICAgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkQ2hpbGRy
ZW4oKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsLmNwcCBiL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsLmNwcAppbmRleCAxNzcxYmI4Li5jODE1N2Y1
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlk
Q2VsbC5jcHAKKysrIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3Jp
ZENlbGwuY3BwCkBAIC01Nyw3ICs1Nyw3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2li
aWxpdHlBUklBR3JpZENlbGw6OnBhcmVudFRhYmxlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgCiAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKLSAg
ICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5pc0RhdGFUYWJsZSgpKQorICAgIGlmICghcGFyZW50
IHx8ICFwYXJlbnQtPmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybiAwOwog
ICAgIAogICAgIHJldHVybiBwYXJlbnQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93LmNwcCBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cuY3BwCmluZGV4IDdkNTYyZDkuLjJiOTYwMzYgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cuY3Bw
CisrKyBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cuY3Bw
CkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93OjpkaXNjbG9z
ZWRSb3dzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgZGlzY2xvCiAgICAgLy8gVGhlIGNv
bnRpZ3VvdXMgZGlzY2xvc2VkIHJvd3Mgd2lsbCBiZSB0aGUgcm93cyBpbiB0aGUgdGFibGUgdGhh
dCAKICAgICAvLyBoYXZlIGFuIGFyaWEtbGV2ZWwgb2YgcGx1cyAxIGZyb20gdGhpcyByb3cuCiAg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gcGFyZW50T2JqZWN0VW5pZ25vcmVkKCk7
Ci0gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+aXNEYXRhVGFibGUoKSkKKyAgICBpZiAoIXBh
cmVudCB8fCAhcGFyZW50LT5pc0FjY2Vzc2liaWxpdHlUYWJsZSgpKQogICAgICAgICByZXR1cm47
CiAgICAgCiAgICAgLy8gU2VhcmNoIGZvciByb3dzIHRoYXQgbWF0Y2ggdGhlIGNvcnJlY3QgbGV2
ZWwuIApAQCAtOTIsNyArOTIsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5
QVJJQUdyaWRSb3c6OmRpc2Nsb3NlZEJ5Um93KCkgY29uc3QKICAgICAvLyBUaGUgcm93IHRoYXQg
ZGlzY2xvc2VzIHRoaXMgb25lIGlzIHRoZSByb3cgaW4gdGhlIHRhYmxlCiAgICAgLy8gdGhhdCBp
cyBhcmlhLWxldmVsIHN1YnRyYWN0IDEgZnJvbSB0aGlzIHJvdy4KICAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBwYXJlbnQgPSBwYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKLSAgICBpZiAoIXBhcmVu
dCB8fCAhcGFyZW50LT5pc0RhdGFUYWJsZSgpKQorICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQt
PmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIC8v
IElmIHRoZSBsZXZlbCBpcyAxIG9yIGxlc3MsIHRoYW4gbm90aGluZyBkaXNjbG9zZXMgdGhpcyBy
b3cuCkBAIC0xMTksNyArMTE5LDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0
eUFSSUFHcmlkUm93OjpkaXNjbG9zZWRCeVJvdygpIGNvbnN0CiBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c6OnBhcmVudFRhYmxlKCkgY29uc3QKIHsKICAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBwYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKLSAg
ICBpZiAoIXBhcmVudC0+aXNEYXRhVGFibGUoKSkKKyAgICBpZiAoIXBhcmVudC0+aXNBY2Nlc3Np
YmlsaXR5VGFibGUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAgcmV0dXJuIHBhcmVu
dDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0
LmggYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCmluZGV4IGJj
ZjA5ZDIuLjg3MDMyMTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0LmgKKysrIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlP
YmplY3QuaApAQCAtMjg1LDYgKzI4NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNT
bGlkZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRy
b2woKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0xpc3QoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0FjY2Vzc2liaWxpdHlU
YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzRGF0YVRh
YmxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNUYWJsZVJv
dygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzVGFibGVDb2x1
bW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVRhYmxlLmNwcAppbmRleCA3ZjdiNmYyLi41ZWRkMDg3IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcAorKysgYi9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcApAQCAtNjcsMzcgKzY3LDQ1IEBA
IFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVRhYmxlPiBBY2Nlc3NpYmlsaXR5VGFibGU6OmNyZWF0
ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBY2Nlc3Np
YmlsaXR5VGFibGUocmVuZGVyZXIpKTsKIH0KIAotYm9vbCBBY2Nlc3NpYmlsaXR5VGFibGU6Omlz
VGFibGVFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpCitib29sIEFjY2Vzc2liaWxpdHlU
YWJsZTo6aGFzQVJJQVJvbGUoKSBjb25zdAogewotICAgIC8vIHRoZSBmb2xsb3dpbmcgaXMgYSBo
ZXVyaXN0aWMgdXNlZCB0byBkZXRlcm1pbmUgaWYgYQotICAgIC8vIDx0YWJsZT4gc2hvdWxkIGJl
IGV4cG9zZWQgYXMgYW4gQVhUYWJsZS4gVGhlIGdvYWwKLSAgICAvLyBpcyB0byBvbmx5IHNob3cg
ImRhdGEiIHRhYmxlcwotICAgIAotICAgIGlmICghcmVuZGVyZXIoKSkKKyAgICBpZiAoIW1fcmVu
ZGVyZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICAvLyBpZiB0aGUgZGV2ZWxv
cGVyIGFzc2lnbmVkIGFuIGFyaWEgcm9sZSB0byB0aGlzLCB0aGVuIHdlIHNob3VsZG4ndCAKLSAg
ICAvLyBleHBvc2UgaXQgYXMgYSB0YWJsZSwgdW5sZXNzLCBvZiBjb3Vyc2UsIHRoZSBhcmlhIHJv
bGUgaXMgYSB0YWJsZQogICAgIEFjY2Vzc2liaWxpdHlSb2xlIGFyaWFSb2xlID0gYXJpYVJvbGVB
dHRyaWJ1dGUoKTsKICAgICBpZiAoYXJpYVJvbGUgIT0gVW5rbm93blJvbGUpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlU
YWJsZTo6aXNBY2Nlc3NpYmlsaXR5VGFibGUoKSBjb25zdAoreworICAgIGlmICghbV9yZW5kZXJl
cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIFJlbmRlclRhYmxlKiB0YWJsZSA9
IHRvUmVuZGVyVGFibGUobV9yZW5kZXJlcik7Ci0gICAgCi0gICAgLy8gdGhpcyBlbXBsb3lzIGEg
aGV1cmlzdGljIHRvIGRldGVybWluZSBpZiB0aGlzIHRhYmxlIHNob3VsZCBhcHBlYXIuIAotICAg
IC8vIE9ubHkgImRhdGEiIHRhYmxlcyBzaG91bGQgYmUgZXhwb3NlZCBhcyB0YWJsZXMuIAorICAg
IHJldHVybiBtX2lzQWNjZXNzaWJpbGl0eVRhYmxlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlU
YWJsZTo6aXNEYXRhVGFibGUoKSBjb25zdAoreworICAgIGlmICghbV9yZW5kZXJlcikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gZG9uIG5vdCBjb25zaWRlciBpdCBhIGRhdGEgdGFi
bGUgaXMgaXQgaGFzIGFuIEFSSUEgcm9sZQorICAgIGlmIChoYXNBUklBUm9sZSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyB0aGlzIGVtcGxveXMgYSBoZXVyaXN0aWMgdG8gZGV0
ZXJtaW5lIGlmIHRoaXMgdGFibGUgc2hvdWxkIGFwcGVhci4KKyAgICAvLyBPbmx5ICJkYXRhIiB0
YWJsZXMgc2hvdWxkIGJlIGV4cG9zZWQgYXMgdGFibGVzLgogICAgIC8vIFVuZm9ydHVuYXRlbHks
IHRoZXJlIGlzIG5vIGdvb2Qgd2F5IHRvIGRldGVybWluZSB0aGUgZGlmZmVyZW5jZQogICAgIC8v
IGJldHdlZW4gYSAibGF5b3V0IiB0YWJsZSBhbmQgYSAiZGF0YSIgdGFibGUKICAgICAKKyAgICBS
ZW5kZXJUYWJsZSogdGFibGUgPSB0b1JlbmRlclRhYmxlKG1fcmVuZGVyZXIpOwogICAgIE5vZGUq
IHRhYmxlTm9kZSA9IHRhYmxlLT5ub2RlKCk7CiAgICAgaWYgKCF0YWJsZU5vZGUgfHwgIXRhYmxl
Tm9kZS0+aGFzVGFnTmFtZSh0YWJsZVRhZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IC8vIEd0aysgQVRzIGV4cGVjdCBhbGwgdGFibGVzIHRvIGJlIGV4cG9zZWQgYXMgdGFibGVzLgot
I2lmIFBMQVRGT1JNKEdUSykKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgotICAgIAogICAgIC8v
IGlmIHRoZXJlIGlzIGEgY2FwdGlvbiBlbGVtZW50LCBzdW1tYXJ5LCBUSEVBRCwgb3IgVEZPT1Qg
c2VjdGlvbiwgaXQncyBtb3N0IGNlcnRhaW5seSBhIGRhdGEgdGFibGUKICAgICBIVE1MVGFibGVF
bGVtZW50KiB0YWJsZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVFbGVtZW50Kj4odGFi
bGVOb2RlKTsKICAgICBpZiAoIXRhYmxlRWxlbWVudC0+c3VtbWFyeSgpLmlzRW1wdHkoKSB8fCB0
YWJsZUVsZW1lbnQtPnRIZWFkKCkgfHwgdGFibGVFbGVtZW50LT50Rm9vdCgpIHx8IHRhYmxlRWxl
bWVudC0+Y2FwdGlvbigpKQpAQCAtMjQyLDYgKzI1MCwzMiBAQCBib29sIEFjY2Vzc2liaWxpdHlU
YWJsZTo6aXNUYWJsZUV4cG9zYWJsZVRocm91Z2hBY2Nlc3NpYmlsaXR5KCkKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAgICAgCitib29sIEFjY2Vzc2liaWxpdHlUYWJsZTo6aXNUYWJsZUV4cG9zYWJs
ZVRocm91Z2hBY2Nlc3NpYmlsaXR5KCkgY29uc3QKK3sKKyAgICAvLyB0aGUgZm9sbG93aW5nIGlz
IGEgaGV1cmlzdGljIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGEKKyAgICAvLyA8dGFibGU+IHNob3Vs
ZCBiZSBleHBvc2VkIGFzIGFuIEFYVGFibGUuIFRoZSBnb2FsCisgICAgLy8gaXMgdG8gb25seSBz
aG93ICJkYXRhIiB0YWJsZXMKKworICAgIGlmICghbV9yZW5kZXJlcikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgLy8gaWYgdGhlIGRldmVsb3BlciBhc3NpZ25lZCBhbiBhcmlhIHJvbGUg
dG8gdGhpcywgdGhlbiB3ZSBzaG91bGRuJ3QKKyAgICAvLyBleHBvc2UgaXQgYXMgYSB0YWJsZSwg
dW5sZXNzLCBvZiBjb3Vyc2UsIHRoZSBhcmlhIHJvbGUgaXMgYSB0YWJsZQorICAgIGlmIChoYXNB
UklBUm9sZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBHdGsrIEFUcyBleHBl
Y3QgYWxsIHRhYmxlcyB0byBiZSBleHBvc2VkIGFzIHRhYmxlcy4KKyNpZiBQTEFURk9STShHVEsp
CisgICAgTm9kZSogdGFibGVOb2RlID0gdG9SZW5kZXJUYWJsZShtX3JlbmRlcmVyKS0+bm9kZSgp
OworICAgIGlmICghdGFibGVOb2RlIHx8ICF0YWJsZU5vZGUtPmhhc1RhZ05hbWUodGFibGVUYWcp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorCisg
ICAgcmV0dXJuIGlzRGF0YVRhYmxlKCk7Cit9CisKIHZvaWQgQWNjZXNzaWJpbGl0eVRhYmxlOjpj
bGVhckNoaWxkcmVuKCkKIHsKICAgICBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpjbGVhckNo
aWxkcmVuKCk7CkBAIC0yNTEsNyArMjg1LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGU6OmNs
ZWFyQ2hpbGRyZW4oKQogCiB2b2lkIEFjY2Vzc2liaWxpdHlUYWJsZTo6YWRkQ2hpbGRyZW4oKQog
ewotICAgIGlmICghaXNEYXRhVGFibGUoKSkgeworICAgIGlmICghaXNBY2Nlc3NpYmlsaXR5VGFi
bGUoKSkgewogICAgICAgICBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphZGRDaGlsZHJlbigp
OwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDg4LDcgKzUyMiw3IEBAIEFjY2Vzc2liaWxp
dHlUYWJsZUNlbGwqIEFjY2Vzc2liaWxpdHlUYWJsZTo6Y2VsbEZvckNvbHVtbkFuZFJvdyh1bnNp
Z25lZCBjb2x1bW4sCiAKIEFjY2Vzc2liaWxpdHlSb2xlIEFjY2Vzc2liaWxpdHlUYWJsZTo6cm9s
ZVZhbHVlKCkgY29uc3QKIHsKLSAgICBpZiAoIWlzRGF0YVRhYmxlKCkpCisgICAgaWYgKCFpc0Fj
Y2Vzc2liaWxpdHlUYWJsZSgpKQogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6cm9sZVZhbHVlKCk7CiAKICAgICByZXR1cm4gVGFibGVSb2xlOwpAQCAtNTAyLDcgKzUz
Niw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVRhYmxlOjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkg
Y29uc3QKICAgICBpZiAoZGVjaXNpb24gPT0gSWdub3JlT2JqZWN0KQogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAKLSAgICBpZiAoIWlzRGF0YVRhYmxlKCkpCisgICAgaWYgKCFpc0FjY2Vzc2li
aWxpdHlUYWJsZSgpKQogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpOwogICAgICAgICAKICAgICByZXR1cm4gZmFsc2U7CkBA
IC01MTAsNyArNTQ0LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VGFibGU6OmFjY2Vzc2liaWxpdHlJ
c0lnbm9yZWQoKSBjb25zdAogICAgIAogU3RyaW5nIEFjY2Vzc2liaWxpdHlUYWJsZTo6dGl0bGUo
KSBjb25zdAogewotICAgIGlmICghaXNEYXRhVGFibGUoKSkKKyAgICBpZiAoIWlzQWNjZXNzaWJp
bGl0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp0
aXRsZSgpOwogICAgIAogICAgIFN0cmluZyB0aXRsZTsKQEAgLTUzMiwxMiArNTY2LDQgQEAgU3Ry
aW5nIEFjY2Vzc2liaWxpdHlUYWJsZTo6dGl0bGUoKSBjb25zdAogICAgIHJldHVybiB0aXRsZTsK
IH0KIAotYm9vbCBBY2Nlc3NpYmlsaXR5VGFibGU6OmlzRGF0YVRhYmxlKCkgY29uc3QKLXsKLSAg
ICBpZiAoIW1fcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICByZXR1
cm4gbV9pc0FjY2Vzc2liaWxpdHlUYWJsZTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5oIGIv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5oCmluZGV4IDJlZTU4MTIu
LjE2NjYzNjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
VGFibGUuaAorKysgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmgK
QEAgLTUxLDcgKzUxLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFjY2Vzc2li
aWxpdHlUYWJsZT4gY3JlYXRlKFJlbmRlck9iamVjdCopOwogICAgIHZpcnR1YWwgfkFjY2Vzc2li
aWxpdHlUYWJsZSgpOwogCisgICAgdmlydHVhbCBib29sIGlzQWNjZXNzaWJpbGl0eVRhYmxlKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzRGF0YVRhYmxlKCkgY29uc3Q7CisKICAgICB2aXJ0
dWFsIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGVWYWx1ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9v
bCBpc0FyaWFUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgCkBAIC04Niw3ICs4
OCw4IEBAIHByb3RlY3RlZDoKICAgICBBY2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJDb250YWluZXIq
IG1faGVhZGVyQ29udGFpbmVyOwogICAgIG11dGFibGUgYm9vbCBtX2lzQWNjZXNzaWJpbGl0eVRh
YmxlOwogCi0gICAgYm9vbCBpc1RhYmxlRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKTsK
KyAgICBib29sIGhhc0FSSUFSb2xlKCkgY29uc3Q7CisgICAgYm9vbCBpc1RhYmxlRXhwb3NhYmxl
VGhyb3VnaEFjY2Vzc2liaWxpdHkoKSBjb25zdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUgCmRpZmYgLS1naXQgYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxl
Q2VsbC5jcHAgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5j
cHAKaW5kZXggZTJlZmI1ZS4uN2FkNjA2MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwCisrKyBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcApAQCAtODQsNyArODQsNyBAQCBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpwYXJlbnRUYWJsZSgpIGNvbnN0CiBi
b29sIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmlzVGFibGVDZWxsKCkgY29uc3QKIHsKICAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiB0YWJsZSA9IHBhcmVudFRhYmxlKCk7Ci0gICAgaWYgKCF0YWJs
ZSB8fCAhdGFibGUtPmlzRGF0YVRhYmxlKCkpCisgICAgaWYgKCF0YWJsZSB8fCAhdGFibGUtPmlz
QWNjZXNzaWJpbGl0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBy
ZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5VGFibGVIZWFkZXJDb250YWluZXIuY3BwIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlUYWJsZUhlYWRlckNvbnRhaW5lci5jcHAKaW5kZXggZTJkYTgzYy4uZGFkNjk2MyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUhlYWRl
ckNvbnRhaW5lci5jcHAKKysrIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlU
YWJsZUhlYWRlckNvbnRhaW5lci5jcHAKQEAgLTg1LDcgKzg1LDcgQEAgdm9pZCBBY2Nlc3NpYmls
aXR5VGFibGVIZWFkZXJDb250YWluZXI6OmFkZENoaWxkcmVuKCkKICAgICBBU1NFUlQoIW1faGF2
ZUNoaWxkcmVuKTsgCiAgICAgCiAgICAgbV9oYXZlQ2hpbGRyZW4gPSB0cnVlOwotICAgIGlmICgh
bV9wYXJlbnRUYWJsZSB8fCAhbV9wYXJlbnRUYWJsZS0+aXNEYXRhVGFibGUoKSkKKyAgICBpZiAo
IW1fcGFyZW50VGFibGUgfHwgIW1fcGFyZW50VGFibGUtPmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkp
CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFi
bGUqPihtX3BhcmVudFRhYmxlKS0+Y29sdW1uSGVhZGVycyhtX2NoaWxkcmVuKTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuY3BwIGIvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHAKaW5kZXggNWU5ZjA1
Yy4uMDlkYjEzMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlUYWJsZVJvdy5jcHAKKysrIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlU
YWJsZVJvdy5jcHAKQEAgLTY4LDcgKzY4LDcgQEAgQWNjZXNzaWJpbGl0eVJvbGUgQWNjZXNzaWJp
bGl0eVRhYmxlUm93Ojpyb2xlVmFsdWUoKSBjb25zdAogYm9vbCBBY2Nlc3NpYmlsaXR5VGFibGVS
b3c6OmlzVGFibGVSb3coKSBjb25zdAogewogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHRhYmxl
ID0gcGFyZW50VGFibGUoKTsKLSAgICBpZiAoIXRhYmxlIHx8ICF0YWJsZS0+aXNEYXRhVGFibGUo
KSkKKyAgICBpZiAoIXRhYmxlIHx8ICF0YWJsZS0+aXNBY2Nlc3NpYmlsaXR5VGFibGUoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5j
cHAgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
QXRrLmNwcAppbmRleCBhYTg4MjE3Li4zNGQzZThlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAorKysgYi9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcApA
QCAtMzMyLDExICszMzIsMjIgQEAgc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogd2Via2l0X2FjY2Vz
c2libGVfZ2V0X2F0dHJpYnV0ZXMoQXRrT2JqZWN0KiBvYmplY3QpCiAKICAgICBhdHRyaWJ1dGVT
ZXQgPSBhZGRBdHRyaWJ1dGVUb1NldChhdHRyaWJ1dGVTZXQsICJ0b29sa2l0IiwgIldlYktpdEd0
ayIpOwogCi0gICAgaW50IGhlYWRpbmdMZXZlbCA9IGNvcmUob2JqZWN0KS0+aGVhZGluZ0xldmVs
KCk7Ci0gICAgaWYgKGhlYWRpbmdMZXZlbCkgewotICAgICAgICBTdHJpbmcgdmFsdWUgPSBTdHJp
bmc6Om51bWJlcihoZWFkaW5nTGV2ZWwpOwotICAgICAgICBhdHRyaWJ1dGVTZXQgPSBhZGRBdHRy
aWJ1dGVUb1NldChhdHRyaWJ1dGVTZXQsICJsZXZlbCIsIHZhbHVlLnV0ZjgoKS5kYXRhKCkpOwor
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKG9iamVjdCk7CisgICAg
aWYgKGNvcmVPYmplY3QpIHsKKyAgICAgICAgaW50IGhlYWRpbmdMZXZlbCA9IGNvcmVPYmplY3Qt
PmhlYWRpbmdMZXZlbCgpOworICAgICAgICBpZiAoaGVhZGluZ0xldmVsKSB7CisgICAgICAgICAg
ICBTdHJpbmcgdmFsdWUgPSBTdHJpbmc6Om51bWJlcihoZWFkaW5nTGV2ZWwpOworICAgICAgICAg
ICAgYXR0cmlidXRlU2V0ID0gYWRkQXR0cmlidXRlVG9TZXQoYXR0cmlidXRlU2V0LCAibGV2ZWwi
LCB2YWx1ZS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNldCB0aGUg
J2xheW91dC1ndWVzcycgYXR0cmlidXRlIHRvIGhlbHAgQXNzaXN0aXZlCisgICAgICAgIC8vIFRl
Y2hub2xvZ2llcyBrbm93IHdoZW4gYW4gZXhwb3NlZCB0YWJsZSBpcyBub3QgZGF0YSB0YWJsZQor
ICAgICAgICBpZiAoY29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5VGFibGUoKSAmJiAhY29yZU9i
amVjdC0+aXNEYXRhVGFibGUoKSkgeworICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gU3RyaW5n
KCJ0cnVlIik7CisgICAgICAgICAgICBhdHRyaWJ1dGVTZXQgPSBhZGRBdHRyaWJ1dGVUb1NldChh
dHRyaWJ1dGVTZXQsICJsYXlvdXQtZ3Vlc3MiLCB2YWx1ZS51dGY4KCkuZGF0YSgpKTsKKyAgICAg
ICAgfQogICAgIH0KKwogICAgIHJldHVybiBhdHRyaWJ1dGVTZXQ7CiB9CiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW0g
Yi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1t
CmluZGV4IGU0YjdkOGUuLjdhMTNmMTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW0KKysrIGIvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQpAQCAtNjQ3LDcgKzY0Nyw3
IEBAIHN0YXRpYyBXZWJDb3JlVGV4dE1hcmtlclJhbmdlKiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlz
aWJsZVBvc2l0aW9ucyhBWE9iamVjdENhY2hlCiAgICAgaWYgKG1fb2JqZWN0LT5zdXBwb3J0c0FS
SUFEcm9wcGluZygpKQogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmls
aXR5RHJvcEVmZmVjdHNBdHRyaWJ1dGVdOwogCi0gICAgaWYgKG1fb2JqZWN0LT5pc0RhdGFUYWJs
ZSgpICYmIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZSo+KG1fb2JqZWN0KS0+c3VwcG9y
dHNTZWxlY3RlZFJvd3MoKSkKKyAgICBpZiAobV9vYmplY3QtPmlzQWNjZXNzaWJpbGl0eVRhYmxl
KCkgJiYgc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlKj4obV9vYmplY3QpLT5zdXBwb3J0
c1NlbGVjdGVkUm93cygpKQogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3Np
YmlsaXR5U2VsZWN0ZWRSb3dzQXR0cmlidXRlXTsgICAgICAgIAogICAgIAogICAgIGlmIChtX29i
amVjdC0+c3VwcG9ydHNBUklBTGl2ZVJlZ2lvbigpKSB7CkBAIC05NDgsNyArOTQ4LDcgQEAgc3Rh
dGljIFdlYkNvcmVUZXh0TWFya2VyUmFuZ2UqIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9z
aXRpb25zKEFYT2JqZWN0Q2FjaGUKICAgICBlbHNlIGlmIChtX29iamVjdC0+aXNBbmNob3IoKSB8
fCBtX29iamVjdC0+aXNJbWFnZSgpIHx8IG1fb2JqZWN0LT5pc0xpbmsoKSkKICAgICAgICAgb2Jq
ZWN0QXR0cmlidXRlcyA9IGFuY2hvckF0dHJzOwogCi0gICAgZWxzZSBpZiAobV9vYmplY3QtPmlz
RGF0YVRhYmxlKCkpCisgICAgZWxzZSBpZiAobV9vYmplY3QtPmlzQWNjZXNzaWJpbGl0eVRhYmxl
KCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSB0YWJsZUF0dHJzOwogICAgIGVsc2UgaWYg
KG1fb2JqZWN0LT5pc1RhYmxlQ29sdW1uKCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSB0
YWJsZUNvbEF0dHJzOwpAQCAtMTYzNiw3ICsxNjM2LDcgQEAgc3RhdGljIE5TU3RyaW5nKiByb2xl
VmFsdWVUb05TU3RyaW5nKEFjY2Vzc2liaWxpdHlSb2xlIHZhbHVlKQogICAgICAgICB9CiAgICAg
fSAgICAKICAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzRGF0YVRhYmxlKCkpIHsKKyAgICBpZiAo
bV9vYmplY3QtPmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkpIHsKICAgICAgICAgLy8gVE9ETzogZGlz
dGluZ3Vpc2ggYmV0d2VlbiB2aXNpYmxlIGFuZCBub24tdmlzaWJsZSByb3dzCiAgICAgICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Um93c0F0dHJp
YnV0ZV0gfHwgCiAgICAgICAgICAgICBbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNB
Y2Nlc3NpYmlsaXR5VmlzaWJsZVJvd3NBdHRyaWJ1dGVdKSB7CkBAIC0yMDg2LDcgKzIwODYsNyBA
QCBzdGF0aWMgTlNTdHJpbmcqIHJvbGVWYWx1ZVRvTlNTdHJpbmcoQWNjZXNzaWJpbGl0eVJvbGUg
dmFsdWUpCiAgICAgaWYgKG1fb2JqZWN0LT5pc1RleHRDb250cm9sKCkpCiAgICAgICAgIHJldHVy
biB0ZXh0UGFyYW1BdHRyczsKICAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzRGF0YVRhYmxlKCkp
CisgICAgaWYgKG1fb2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlUYWJsZSgpKQogICAgICAgICByZXR1
cm4gdGFibGVQYXJhbUF0dHJzOwogICAgIAogICAgIGlmIChtX29iamVjdC0+aXNNZW51UmVsYXRl
ZCgpKQpAQCAtMjI0Nyw3ICsyMjQ3LDcgQEAgc3RhdGljIE5TU3RyaW5nKiByb2xlVmFsdWVUb05T
U3RyaW5nKEFjY2Vzc2liaWxpdHlSb2xlIHZhbHVlKQogICAgIGVsc2UgaWYgKFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFJvd3NBdHRyaWJ1dGVd
KSB7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciBzZWxlY3RlZFJvd3M7CiAgICAgICAgIGNvbnZlcnRUb1ZlY3RvcihhcnJheSwgc2VsZWN0
ZWRSb3dzKTsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1RyZWUoKSB8fCBtX29iamVjdC0+aXNE
YXRhVGFibGUoKSkKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1RyZWUoKSB8fCBtX29iamVjdC0+
aXNBY2Nlc3NpYmlsaXR5VGFibGUoKSkKICAgICAgICAgICAgIG1fb2JqZWN0LT5zZXRTZWxlY3Rl
ZFJvd3Moc2VsZWN0ZWRSb3dzKTsKICAgICB9IGVsc2UgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1
YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlHcmFiYmVkQXR0cmlidXRlXSkKICAgICAgICAgbV9v
YmplY3QtPnNldEFSSUFHcmFiYmVkKFtudW1iZXIgYm9vbFZhbHVlXSk7CkBAIC0yNTQxLDcgKzI1
NDEsNyBAQCBzdGF0aWMgUmVuZGVyT2JqZWN0KiByZW5kZXJlckZvclZpZXcoTlNWaWV3KiB2aWV3
KQogICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjp2aXNp
YmxlUG9zUmFuZ2UuZW5kXTsKICAgICB9CiAgICAgCi0gICAgaWYgKG1fb2JqZWN0LT5pc0RhdGFU
YWJsZSgpKSB7CisgICAgaWYgKG1fb2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlUYWJsZSgpKSB7CiAg
ICAgICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDZWxs
Rm9yQ29sdW1uQW5kUm93UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKICAgICAgICAgICAgIGlm
IChhcnJheSA9PSBuaWwgfHwgW2FycmF5IGNvdW50XSAhPSAyKQogICAgICAgICAgICAgICAgIHJl
dHVybiBuaWw7CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1dlYktpdC9ndGsv
Q2hhbmdlTG9nCmluZGV4IGQxOTkwMmMuLjI4ZmY4ZWEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsv
Q2hhbmdlTG9nCisrKyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIw
MTAtMTAtMjIgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHdGtdIExheW91
dCB0YWJsZXMgc2hvdWxkIGluZGljYXRlIHRoYXQgdGhleSBhcmUgbm90IGRhdGEgdGFibGVzIHZp
YSBhbiBvYmplY3QgYXR0cmlidXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zNTQyMgorCisgICAgICAgIE5ldyB1bml0IHRlc3QgdG8gY2hlY2sgdGhl
ICdsYXlvdXQtZ3Vlc3MnIGF0dHJpYnV0ZSBpbiB0YWJsZXMuCisKKyAgICAgICAgKiB0ZXN0cy90
ZXN0YXRrLmM6CisgICAgICAgIChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVOYW1lSGFzVmFsdWUp
OiBOZXcsIGxvb2tzIGZvciBhIGF0dHJpYnV0ZQorICAgICAgICB3aXRoIGEgc3BlY2lmaWMgdmFs
dWUsIGJ5IHRoZSBuYW1lIG9mIGF0dHJpYnV0ZS4KKyAgICAgICAgKGF0a0F0dHJpYnV0ZVNldENv
bnRhaW5zQXR0cmlidXRlTmFtZSk6IE5ldywganVzdCBjaGVja3Mgd2hldGhlcgorICAgICAgICBh
biBhdHRyaWJ1dGUgd2l0aCBhIHNwZWNpZmllZCBuYW1lIGlzIHByZXNlbnQgaW4gdGhlIHNldC4K
KyAgICAgICAgKGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKTogTW9kaWZpZWQgdG8g
cmVsYXkgb24gdGhlIG5ldworICAgICAgICBmdW5jdGlvbiBhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1
dGVOYW1lSGFzVmFsdWUoKS4KKyAgICAgICAgKHRlc3RXZWJraXRBdGtMYXlvdXRBbmREYXRhVGFi
bGVzKTogTmV3IHRlc3QuCisgICAgICAgIChtYWluKTogQWRkZWQgdGhlIG5ldyB0ZXN0LgorCiAy
MDEwLTEwLTE5ICBKb29uZSBIdXIgIDxqb29uZUBrbGRwLm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBNYXJ0aW4gUm9iaW5zb24uCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rh
dGsuYyBiL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0ay5jCmluZGV4IGM4ZGY0ZWYuLjk5YzhlNjUg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0ay5jCisrKyBiL1dlYktpdC9ndGsv
dGVzdHMvdGVzdGF0ay5jCkBAIC00Niw2ICs0Niw4IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBjb250
ZW50c0luVGFibGVXaXRoSGVhZGVycyA9ICI8aHRtbD48Ym9keT48dGFibGU+PHRyPjx0aD5mb288
CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBmb3JtV2l0aFRleHRJbnB1dHMgPSAiPGh0bWw+PGJvZHk+
PGZvcm0+PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2VudHJ5JyAvPjwvZm9ybT48L2JvZHk+PC9o
dG1sPiI7CiAKK3N0YXRpYyBjb25zdCBjaGFyKiBsYXlvdXRBbmREYXRhVGFibGVzID0gIjxodG1s
Pjxib2R5Pjx0YWJsZT48dHI+PHRoPk9kZDwvdGg+PHRoPkV2ZW48L3RoPjwvdHI+PHRyPjx0ZD4x
PC90ZD48dGQ+MjwvdGQ+PC90cj48L3RhYmxlPjx0YWJsZT48dHI+PHRkPmZvbzwvdGQ+PHRkPmJh
cjwvdGQ+PC90cj48L3RhYmxlPjwvYm9keT48L2h0bWw+IjsKKwogc3RhdGljIGNvbnN0IGNoYXIq
IGxpc3RzT2ZJdGVtcyA9ICI8aHRtbD48Ym9keT48dWw+PGxpPnRleHQgb25seTwvbGk+PGxpPjxh
IGhyZWY9J2Zvbyc+bGluayBvbmx5PC9hPjwvbGk+PGxpPnRleHQgYW5kIGEgPGEgaHJlZj0nYmFy
Jz5saW5rPC9hPjwvbGk+PC91bD48b2w+PGxpPnRleHQgb25seTwvbGk+PGxpPjxhIGhyZWY9J2Zv
byc+bGluayBvbmx5PC9hPjwvbGk+PGxpPnRleHQgYW5kIGEgPGEgaHJlZj0nYmFyJz5saW5rPC9h
PjwvbGk+PC9vbD48L2JvZHk+PC9odG1sPiI7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiB0ZXh0Rm9y
U2VsZWN0aW9ucyA9ICI8aHRtbD48Ym9keT48cD5BIHBhcmFncmFwaCB3aXRoIHBsYWluIHRleHQ8
L3A+PHA+QSBwYXJhZ3JhcGggd2l0aCA8YSBocmVmPSdodHRwOi8vd2Via2l0Lm9yZyc+YSBsaW5r
PC9hPiBpbiB0aGUgbWlkZGxlPC9wPjwvYm9keT48L2h0bWw+IjsKQEAgLTU5NiwxNSArNTk4LDI1
IEBAIHN0YXRpYyBnaW50IGNvbXBBdGtBdHRyaWJ1dGVOYW1lKEF0a0F0dHJpYnV0ZSogYTEsIEF0
a0F0dHJpYnV0ZSogYTIpCiAgICAgcmV0dXJuIGdfc3RyY21wMChhMS0+bmFtZSwgYTItPm5hbWUp
OwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4gYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUo
QXRrQXR0cmlidXRlU2V0KiBzZXQsIEF0a1RleHRBdHRyaWJ1dGUgYXR0cmlidXRlLCBjb25zdCBn
Y2hhciogdmFsdWUpCitzdGF0aWMgZ2Jvb2xlYW4gYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlTmFt
ZUhhc1ZhbHVlKEF0a0F0dHJpYnV0ZVNldCogc2V0LCBjb25zdCBnY2hhciogYXR0cmlidXRlTmFt
ZSwgY29uc3QgZ2NoYXIqIHZhbHVlKQogewotICAgIEdTTGlzdCAqZWxlbWVudDsKKyAgICBHU0xp
c3QqIGVsZW1lbnQ7CiAgICAgQXRrQXR0cmlidXRlIGF0OwotICAgIGdib29sZWFuIHJlc3VsdDsK
LSAgICBhdC5uYW1lID0gKGdjaGFyICopYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKGF0dHJp
YnV0ZSk7CisgICAgYXQubmFtZSA9IChnY2hhciopYXR0cmlidXRlTmFtZTsKICAgICBlbGVtZW50
ID0gZ19zbGlzdF9maW5kX2N1c3RvbShzZXQsICZhdCwgKEdDb21wYXJlRnVuYyljb21wQXRrQXR0
cmlidXRlTmFtZSk7Ci0gICAgcmVzdWx0ID0gZWxlbWVudCAmJiAhZ19zdHJjbXAwKCgoQXRrQXR0
cmlidXRlKikoZWxlbWVudC0+ZGF0YSkpLT52YWx1ZSwgdmFsdWUpOwotICAgIHJldHVybiByZXN1
bHQ7CisgICAgcmV0dXJuIGVsZW1lbnQgJiYgIWdfc3RyY21wMCgoKEF0a0F0dHJpYnV0ZSopKGVs
ZW1lbnQtPmRhdGEpKS0+dmFsdWUsIHZhbHVlKTsKK30KKworc3RhdGljIGdib29sZWFuIGF0a0F0
dHJpYnV0ZVNldENvbnRhaW5zQXR0cmlidXRlTmFtZShBdGtBdHRyaWJ1dGVTZXQqIHNldCwgY29u
c3QgZ2NoYXIqIGF0dHJpYnV0ZU5hbWUpCit7CisgICAgQXRrQXR0cmlidXRlIGF0OworICAgIGF0
Lm5hbWUgPSAoZ2NoYXIqKWF0dHJpYnV0ZU5hbWU7CisgICAgcmV0dXJuIGdfc2xpc3RfZmluZF9j
dXN0b20oc2V0LCAmYXQsIChHQ29tcGFyZUZ1bmMpY29tcEF0a0F0dHJpYnV0ZU5hbWUpID8gdHJ1
ZSA6IGZhbHNlOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gYXRrQXR0cmlidXRlU2V0QXR0cmlidXRl
SGFzVmFsdWUoQXRrQXR0cmlidXRlU2V0KiBzZXQsIEF0a1RleHRBdHRyaWJ1dGUgYXR0cmlidXRl
LCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgcmV0dXJuIGF0a0F0dHJpYnV0ZVNldEF0dHJp
YnV0ZU5hbWVIYXNWYWx1ZShzZXQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShhdHRyaWJ1
dGUpLCB2YWx1ZSk7CiB9CiAKIHN0YXRpYyBnYm9vbGVhbiBhdGtBdHRyaWJ1dGVTZXRBcmVFcXVh
bChBdGtBdHRyaWJ1dGVTZXQqIHNldDEsIEF0a0F0dHJpYnV0ZVNldCogc2V0MikKQEAgLTk2NCw2
ICs5NzYsNDUgQEAgc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0dldEV4dGVudHModm9pZCkKICAg
ICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKIH0KIAorc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0
a0xheW91dEFuZERhdGFUYWJsZXModm9pZCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3Rf
cmVmX3Npbmsod2ViVmlldyk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvYyA9IHsgMCwgMCwgODAw
LCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3
KSwgJmFsbG9jKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgbGF5
b3V0QW5kRGF0YVRhYmxlcywgMCwgMCwgMCk7CisgICAgR01haW5Mb29wKiBsb29wID0gZ19tYWlu
X2xvb3BfbmV3KDAsIFRSVUUpOworCisgICAgZ19pZGxlX2FkZCgoR1NvdXJjZUZ1bmMpYmFpbF9v
dXQsIGxvb3ApOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIEF0a09iamVjdCog
b2JqID0gZ3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZShHVEtfV0lER0VUKHdlYlZpZXcpKTsKKyAg
ICBnX2Fzc2VydChvYmopOworCisgICAgLy8gQ2hlY2sgdGhlIG5vbi1sYXlvdXQgdGFibGUgKGRh
dGEgdGFibGUpCisKKyAgICBBdGtPYmplY3QqIHRhYmxlMSA9IGF0a19vYmplY3RfcmVmX2FjY2Vz
c2libGVfY2hpbGQob2JqLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEFCTEUodGFibGUxKSk7
CisgICAgQXRrQXR0cmlidXRlU2V0KiBzZXQxID0gYXRrX29iamVjdF9nZXRfYXR0cmlidXRlcyh0
YWJsZTEpOworICAgIGdfYXNzZXJ0KHNldDEpOworICAgIGdfYXNzZXJ0KCFhdGtBdHRyaWJ1dGVT
ZXRDb250YWluc0F0dHJpYnV0ZU5hbWUoc2V0MSwgImxheW91dC1ndWVzcyIpKTsKKyAgICBhdGtf
YXR0cmlidXRlX3NldF9mcmVlKHNldDEpOworCisgICAgLy8gQ2hlY2sgdGhlIGxheW91dCB0YWJs
ZQorCisgICAgQXRrT2JqZWN0KiB0YWJsZTIgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2No
aWxkKG9iaiwgMSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RBQkxFKHRhYmxlMikpOworICAgIEF0
a0F0dHJpYnV0ZVNldCogc2V0MiA9IGF0a19vYmplY3RfZ2V0X2F0dHJpYnV0ZXModGFibGUyKTsK
KyAgICBnX2Fzc2VydChzZXQyKTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRDb250YWlu
c0F0dHJpYnV0ZU5hbWUoc2V0MiwgImxheW91dC1ndWVzcyIpKTsKKyAgICBnX2Fzc2VydChhdGtB
dHRyaWJ1dGVTZXRBdHRyaWJ1dGVOYW1lSGFzVmFsdWUoc2V0MiwgImxheW91dC1ndWVzcyIsICJ0
cnVlIikpOworICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0Mik7CisKKyAgICBnX29iamVj
dF91bnJlZih0YWJsZTEpOworICAgIGdfb2JqZWN0X3VucmVmKHRhYmxlMik7CisgICAgZ19vYmpl
Y3RfdW5yZWYod2ViVmlldyk7Cit9CisKIHN0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtMaXN0c09m
SXRlbXModm9pZCkKIHsKICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9W
SUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CkBAIC0xMTE2LDYgKzExNjcsNyBAQCBpbnQgbWFp
bihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0
ay90ZXh0QXR0cmlidXRlcyIsIHRlc3RXZWJraXRBdGtUZXh0QXR0cmlidXRlcyk7CiAgICAgZ190
ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay90ZXh0U2VsZWN0aW9ucyIsIHRlc3RXZWtpdEF0a1Rl
eHRTZWxlY3Rpb25zKTsKICAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2dldEV4dGVu
dHMiLCB0ZXN0V2Via2l0QXRrR2V0RXh0ZW50cyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Vi
a2l0L2F0ay9sYXlvdXRBbmREYXRhVGFibGVzIiwgdGVzdFdlYmtpdEF0a0xheW91dEFuZERhdGFU
YWJsZXMpOwogICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvbGlzdHNPZkl0ZW1zIiwg
dGVzdFdlYmtpdEF0a0xpc3RzT2ZJdGVtcyk7CiAgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0
L2F0ay90ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbnMiLCB0ZXN0V2Via2l0QXRrVGV4dENoYW5nZWRO
b3RpZmljYXRpb25zKTsKICAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKLS0gCjEuNy4xCgo=
</data>
<flag name="review"
          id="61721"
          type_id="1"
          status="-"
          setter="cfleizach"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71861</attachid>
            <date>2010-10-26 04:03:47 -0700</date>
            <delta_ts>2010-10-26 12:19:39 -0700</delta_ts>
            <desc>Patch proposal + Unit test</desc>
            <filename>0001-2010-10-26-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>33891</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSAwOTc1YjhkMmYxY2FhZTA5NmQ2NTI3NDI5NGRjMDI5MDMzYWZmNWVkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBTYXQsIDIzIE9jdCAyMDEwIDA5OjUxOjEzICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gMjAxMC0xMC0yNiAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+
CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBbR3RrXSBMYXlv
dXQgdGFibGVzIHNob3VsZCBpbmRpY2F0ZSB0aGF0IHRoZXkgYXJlIG5vdCBkYXRhIHRhYmxlcyB2
aWEgYW4gb2JqZWN0IGF0dHJpYnV0ZQogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zNTQyMgoKICAgICAgICBTZXQgdGhlICdsYXlvdXQtZ3Vlc3MnIGF0dHJp
YnV0ZSB0byAndHJ1ZScgZm9yIGRhdGEgdGFibGVzLgoKICAgICAgICBSZW9yZ2FuaXplZCBzb21l
IGNvZGUgaW4gQWNjZXNzaWJpbGl0eVRhYmxlIHNvIG5vdyB0aGUgZnVuY3Rpb24KICAgICAgICBp
c0RhdGFUYWJsZSgpIGlzIG1vcmUgY29oZXJlbnQgYnkganVzdCBhbnN3ZXJpbmcgdGhhdCB2ZXJ5
CiAgICAgICAgc3BlY2lmaWMgcXVlc3Rpb24sIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgdGFi
bGUgaXMgYmVpbmcKICAgICAgICBleHBvc2VkIG9yIG5vdCB0byBBc3Npc3RpdmUgVGVjaG5vbG9n
aWVzLgoKICAgICAgICBIZW5jZSwgbm93IGl0J3MgcG9zc2libGUgdG8gbWFrZSB0d28gcXVlc3Rp
b25zIHNlcGFyYXRlbHkgaW5zdGVhZAogICAgICAgIG9mIGp1c3Qgb25lLCBtZWFuaW5nIHRoYXQg
dGhlIG5ldyBmdW5jdGlvbiBpc0FjY2Vzc2libGVUYWJsZSgpIGlzCiAgICAgICAgbm93IHdoYXQg
d2UgZm9ybWVybHkgZGVmaW5lZCBhcyB0aGUgaXNEYXRhVGFibGUoKSBmdW5jdGlvbi4KCiAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaDoKICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aXNBY2Nlc3NpYmlsaXR5VGFibGUpOgogICAgICAgICAg
IE5ldyBmdW5jdGlvbiB0byBhbGxvdyBhc2tpbmcgdGFibGVzIGJvdGggd2hldGhlciB0aGV5IGFy
ZQogICAgICAgICAgIGV4cG9zZWQgYW5kIHdoZXRoZXIgdGhleSBhcmUgZGF0YSB0YWJsZXMsIHdo
aWNoIGFyZSBkaWZmZXJlbnQKICAgICAgICAgICBxdWVzdGlvbnMgd2hvc2UgYW5zd2VycyBtaWdo
dCBiZSB0aGUgc2FtZSBpbiBtYW55IHNpdHVhdGlvbnMsCiAgICAgICAgICAgYnV0IGRpZmZlcmVu
dCBzb21ldGltZXMgKGFzIGl0IGNhbiBoYXBwZW4gaW4gdGhlIEdUSyBwb3J0KS4KICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmg6CiAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHA6CiAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlUYWJsZTo6aGFzQVJJQVJvbGUpOgogICAgICAgICAgIE5ldywgY2hlY2tzIHdoZXRoZXIgdGhl
IHRhYmxlIGhhcyBhIHZhbGlkIEFSSUEgcm9sZS4KICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVRhYmxlOjppc0FjY2Vzc2liaWxpdHlUYWJsZSk6CiAgICAgICAgICAgTmV3LCByZXR1cm5z
IHRoZSB2YWx1ZSBvZiBtX2lzQWNjZXNzaWJpbGl0eVRhYmxlLiBJdCdzCiAgICAgICAgICAgYmFz
aWNhbGx5IHRoZSBmb3JtZXIgaXNEYXRhVGFibGUoKSBmdW5jdGlvbiByZW5hbWVkLgogICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OmlzRGF0YVRhYmxlKToKICAgICAgICAgICBD
aGFuZ2VkIGJlaGF2aW91ci4gSW5zdGVhZCBvZiBqdXN0IHJldHVybmluZyB0aGUgdmFsdWUgb2YK
ICAgICAgICAgICBtX2lzQWNjZXNzaWJpbGl0eVRhYmxlIGFzIGl0IGRpZCBzbyBmYXIgKHdoaWNo
IHdhcyBjb25mdXNpbmcKICAgICAgICAgICBiZWNhdXNlIG9mIHRoYXQncyBub3Qgd2hhdCB0aGUg
bmFtZSBzdWdnZXN0cyksIGZvY3VzIG9uCiAgICAgICAgICAgY2hlY2tpbmcgd2hldGhlciBpdCdz
IGEgZGF0YSB0YWJsZSBvciBub3QgYW5kIHJldHVybiBhIGJvb2wKICAgICAgICAgICB2YWx1ZSBh
Y2NvcmRpbmdseS4gSXQncyBiYXNpY2FsbHkgYSByZW5hbWUgb2YgdGhlIGZvcm1lcgogICAgICAg
ICAgIGlzVGFibGVFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpIGZ1bmN0aW9uLCBidXQg
d2l0aG91dGgKICAgICAgICAgICB0aGUgR1RLLXNwZWNpZmljIGlmLWVuZGlmIHJlZ2lvbiAod2hp
Y2ggZGlkbid0IG1ha2Ugc2Vuc2UKICAgICAgICAgICBoZXJlIG5vdywgYmVjYXVzZSB0aGF0IHdh
cyBhbnN3ZXJpbmcgdGhlIHF1ZXN0aW9uICJpcyB0aGUgdGFibGUKICAgICAgICAgICBleHBvc2Vk
IGluIHRoZSBHVEsgcG9ydD8iLCBpbnN0ZWFkIG9mICJpcyBpdCBhIGRhdGEgdGFibGU/IikuCiAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6aXNUYWJsZUV4cG9zYWJsZVRocm91
Z2hBY2Nlc3NpYmlsaXR5KToKICAgICAgICAgICBVc2VzIHRoZSBoYXNBcmlhUm9sZSgpLCBhbmQg
aXNEYXRhVGFibGUoKSB0byBkZXRlcm1pbmUgd2hldGhlcgogICAgICAgICAgIGEgdGFibGUgc2hv
dWxkIGJlIGV4cG9zZWQgb3Igbm90LiBBbHNvIGluY2x1ZGVzIHRoZSBHVEstc3BlY2lmaWMKICAg
ICAgICAgICBpZi1yZWdpb24gY29taW5nIGZyb20gdGhlIGZvcm1lciBpbXBsZW1lbnRhdGlvbiBv
ZiB0aGUgZnVuY3Rpb24KICAgICAgICAgICBpc1RhYmxlRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2li
aWxpdHkoKSBub3QgdG8gY2hlY2sgd2hldGhlciBpdCdzCiAgICAgICAgICAgYSBkYXRhIHRhYmxl
IGluIGNhc2UgdGhlIHJlc3Qgb2YgdGhlIGNoZWNrcyBzdWNjZWVkZWQgKGFsbAogICAgICAgICAg
IHRhYmxlcyBhcmUgZXhwb3NlZCBpbiB0aGUgR1RLIHBvcnQpLgogICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5VGFibGU6OmFkZENoaWxkcmVuKToKICAgICAgICAgICBSZXBsYWNlIHVzYWdl
IG9mIGlzRGF0YVRhYmxlKCkgd2l0aCBpc0FjY2Vzc2liaWxpdHlUYWJsZSgpLCB0bwogICAgICAg
ICAgIGtlZXAgZXhhY3RseSB0aGUgc2FtZSBiZWhhdmlvdXIgaGFwcGVuaW5nIGJlZm9yZSB0aGlz
IHBhdGNoLgogICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OnJvbGVWYWx1ZSk6
IERpdHRvLgogICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OmFjY2Vzc2liaWxp
dHlJc0lnbm9yZWQpOiBEaXR0by4KICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxl
Ojp0aXRsZSk6IERpdHRvLgoKICAgICAgICBVcGRhdGVkIHVzYWdlIG9mIHRoZSBmb3JtZXIgZnVu
Y3Rpb24gaXNEYXRhVGFibGUoKSBldmVyeXdoZXJlCiAgICAgICAgZWxzZSwgcmVwbGFjaW5nIGl0
IHdpdGggdGhlIG5ldyBpc0FjY2Vzc2liaWxpdHlUYWJsZSgpLCBzbyBrZWVwaW5nCiAgICAgICAg
ZXhhY3RseSB0aGUgc2FtZSBiZWhhdmlvdXIgaGFwcGVuaW5nIGJlZm9yZSB0aGlzIHBhdGNoLgoK
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcDoKICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkOjphZGRDaGlsZHJlbik6CiAgICAgICAg
ICAgVXNlIGlzQWNjZXNzaWJpbGl0eVRhYmxlKCkgaW5zdGVhZCBvZiBpc0RhdGFUYWJsZSgpLgog
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsLmNwcDoKICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbDo6cGFyZW50VGFibGUpOiBE
aXR0by4KICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93LmNw
cDoKICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93OjpkaXNjbG9zZWRS
b3dzKTogRGl0dG8uCiAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdzo6
ZGlzY2xvc2VkQnlSb3cpOiBEaXR0by4KICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFS
SUFHcmlkUm93OjpwYXJlbnRUYWJsZSk6IERpdHRvLgogICAgICAgICogYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcDoKICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eVRhYmxlQ2VsbDo6aXNUYWJsZUNlbGwpOgogICAgICAgICAgIFVzZSBpc0FjY2Vzc2liaWxpdHlU
YWJsZSgpIGluc3RlYWQgb2YgaXNEYXRhVGFibGUoKS4KICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVRhYmxlSGVhZGVyQ29udGFpbmVyLmNwcDoKICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVRhYmxlSGVhZGVyQ29udGFpbmVyOjphZGRDaGlsZHJlbik6IERpdHRvLgog
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuY3BwOgogICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVSb3c6OmlzVGFibGVSb3cpOiBEaXR0bwogICAg
ICAgICogYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW06CiAg
ICAgICAgKC1bQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWRkaXRpb25hbEFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVOYW1lc10pOgogICAgICAgICAgIFVzZSBpc0FjY2Vzc2liaWxpdHlUYWJsZSgp
IGluc3RlYWQgb2YgaXNEYXRhVGFibGUoKS4KICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXNdKTogRGl0dG8uCiAgICAgICAgKC1b
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOl0p
OiBEaXR0by4KICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmls
aXR5UGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzXSk6IERpdHRvLgogICAgICAgICgtW0FjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlTZXRWYWx1ZTpmb3JBdHRyaWJ1dGU6
XSk6IERpdHRvLgogICAgICAgICgtW0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2li
aWxpdHlBdHRyaWJ1dGVWYWx1ZTpmb3JQYXJhbWV0ZXI6XSk6IERpdHRvLgoKICAgICAgICBVc2Ug
dGhlIG5ldyBmdW5jdGlvbiBpc0FjY2Vzc2liaWxpdHlUYWJsZSgpIHRvZ2V0aGVyIHdpdGggdGhl
CiAgICAgICAgbW9kaWZpZWQgaW1wbGVtZW50YXRpb24gb2YgaXNEYXRhVGFibGUoKSB0byBzZXQg
dGhlICdsYXlvdXQtZ3Vlc3MnCiAgICAgICAgYXR0cmlidXRlIHdoZW4gbmVlZGVkLgoKICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcDoK
ICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfZ2V0X2F0dHJpYnV0ZXMpOgogICAgICAgICAgIFNl
dCB0aGUgJ2xheW91dC1ndWVzcycgYXR0cmlidXRlIHRvICd0cnVlJyB0byBoZWxwIEFzc2lzdGl2
ZQogICAgICAgICAgIFRlY2hub2xvZ2llcyBndWVzc2luZyB3aGljaCB0YWJsZXMgYXJlIG5vdCBk
YXRhIHRhYmxlcy4KCjIwMTAtMTAtMjYgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBp
Z2FsaWEuY29tPgoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAg
W0d0a10gTGF5b3V0IHRhYmxlcyBzaG91bGQgaW5kaWNhdGUgdGhhdCB0aGV5IGFyZSBub3QgZGF0
YSB0YWJsZXMgdmlhIGFuIG9iamVjdCBhdHRyaWJ1dGUKICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzU0MjIKCiAgICAgICAgTmV3IHVuaXQgdGVzdCB0byBj
aGVjayB0aGUgJ2xheW91dC1ndWVzcycgYXR0cmlidXRlIGluIHRhYmxlcy4KCiAgICAgICAgKiB0
ZXN0cy90ZXN0YXRrLmM6CiAgICAgICAgKGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZU5hbWVIYXNW
YWx1ZSk6IE5ldywgbG9va3MgZm9yIGEgYXR0cmlidXRlCiAgICAgICAgd2l0aCBhIHNwZWNpZmlj
IHZhbHVlLCBieSB0aGUgbmFtZSBvZiBhdHRyaWJ1dGUuCiAgICAgICAgKGF0a0F0dHJpYnV0ZVNl
dENvbnRhaW5zQXR0cmlidXRlTmFtZSk6IE5ldywganVzdCBjaGVja3Mgd2hldGhlcgogICAgICAg
IGFuIGF0dHJpYnV0ZSB3aXRoIGEgc3BlY2lmaWVkIG5hbWUgaXMgcHJlc2VudCBpbiB0aGUgc2V0
LgogICAgICAgIChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZSk6IE1vZGlmaWVkIHRv
IHJlbGF5IG9uIHRoZSBuZXcKICAgICAgICBmdW5jdGlvbiBhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1
dGVOYW1lSGFzVmFsdWUoKS4KICAgICAgICAodGVzdFdlYmtpdEF0a0xheW91dEFuZERhdGFUYWJs
ZXMpOiBOZXcgdGVzdC4KICAgICAgICAobWFpbik6IEFkZGVkIHRoZSBuZXcgdGVzdC4KLS0tCiBX
ZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgOTMg
KysrKysrKysrKysrKysrKysrKysKIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
QVJJQUdyaWQuY3BwICAgIHwgICAgMiArLQogLi4uL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eUFSSUFHcmlkQ2VsbC5jcHAgICAgfCAgICAyICstCiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eUFSSUFHcmlkUm93LmNwcCB8ICAgIDYgKy0KIFdlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmggICAgICAgIHwgICAgMSArCiBXZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcCAgICAgICB8ICAgODQgKysrKysrKysrKystLS0t
LS0KIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuaCAgICAgICAgIHwg
ICAgNSArLQogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuY3Bw
ICAgfCAgICAyICstCiAuLi4vQWNjZXNzaWJpbGl0eVRhYmxlSGVhZGVyQ29udGFpbmVyLmNwcCAg
ICAgICAgICB8ICAgIDIgKy0KIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFi
bGVSb3cuY3BwICAgIHwgICAgMiArLQogLi4uL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ckF0ay5jcHAgICAgICAgICAgfCAgIDEzICsrKy0KIC4uLi9tYWMvQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIubW0gICAgICAgICAgICAgIHwgICAxMiArKy0tCiBXZWJLaXQvZ3RrL0NoYW5nZUxv
ZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTkgKysrKwogV2ViS2l0L2d0ay90
ZXN0cy90ZXN0YXRrLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDY0ICsrKysrKysrKysr
Ky0tCiAxNCBmaWxlcyBjaGFuZ2VkLCAyNTQgaW5zZXJ0aW9ucygrKSwgNTMgZGVsZXRpb25zKC0p
CgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCA4ZTRiZmU4Li4zZDgzYzE0IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk2IEBACisyMDEwLTEwLTI2ICBNYXJpbyBTYW5j
aGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR3RrXSBMYXlvdXQgdGFibGVzIHNob3VsZCBpbmRp
Y2F0ZSB0aGF0IHRoZXkgYXJlIG5vdCBkYXRhIHRhYmxlcyB2aWEgYW4gb2JqZWN0IGF0dHJpYnV0
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzU0MjIK
KworICAgICAgICBTZXQgdGhlICdsYXlvdXQtZ3Vlc3MnIGF0dHJpYnV0ZSB0byAndHJ1ZScgZm9y
IGRhdGEgdGFibGVzLgorCisgICAgICAgIFJlb3JnYW5pemVkIHNvbWUgY29kZSBpbiBBY2Nlc3Np
YmlsaXR5VGFibGUgc28gbm93IHRoZSBmdW5jdGlvbgorICAgICAgICBpc0RhdGFUYWJsZSgpIGlz
IG1vcmUgY29oZXJlbnQgYnkganVzdCBhbnN3ZXJpbmcgdGhhdCB2ZXJ5CisgICAgICAgIHNwZWNp
ZmljIHF1ZXN0aW9uLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHRhYmxlIGlzIGJlaW5nCisg
ICAgICAgIGV4cG9zZWQgb3Igbm90IHRvIEFzc2lzdGl2ZSBUZWNobm9sb2dpZXMuCisKKyAgICAg
ICAgSGVuY2UsIG5vdyBpdCdzIHBvc3NpYmxlIHRvIG1ha2UgdHdvIHF1ZXN0aW9ucyBzZXBhcmF0
ZWx5IGluc3RlYWQKKyAgICAgICAgb2YganVzdCBvbmUsIG1lYW5pbmcgdGhhdCB0aGUgbmV3IGZ1
bmN0aW9uIGlzQWNjZXNzaWJsZVRhYmxlKCkgaXMKKyAgICAgICAgbm93IHdoYXQgd2UgZm9ybWVy
bHkgZGVmaW5lZCBhcyB0aGUgaXNEYXRhVGFibGUoKSBmdW5jdGlvbi4KKworICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU9iamVjdDo6aXNBY2Nlc3NpYmlsaXR5VGFibGUpOgorICAgICAgICAgICBOZXcg
ZnVuY3Rpb24gdG8gYWxsb3cgYXNraW5nIHRhYmxlcyBib3RoIHdoZXRoZXIgdGhleSBhcmUKKyAg
ICAgICAgICAgZXhwb3NlZCBhbmQgd2hldGhlciB0aGV5IGFyZSBkYXRhIHRhYmxlcywgd2hpY2gg
YXJlIGRpZmZlcmVudAorICAgICAgICAgICBxdWVzdGlvbnMgd2hvc2UgYW5zd2VycyBtaWdodCBi
ZSB0aGUgc2FtZSBpbiBtYW55IHNpdHVhdGlvbnMsCisgICAgICAgICAgIGJ1dCBkaWZmZXJlbnQg
c29tZXRpbWVzIChhcyBpdCBjYW4gaGFwcGVuIGluIHRoZSBHVEsgcG9ydCkuCisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5VGFibGU6Omhhc0FSSUFSb2xlKToKKyAgICAgICAgICAgTmV3LCBjaGVja3Mgd2hldGhlciB0
aGUgdGFibGUgaGFzIGEgdmFsaWQgQVJJQSByb2xlLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eVRhYmxlOjppc0FjY2Vzc2liaWxpdHlUYWJsZSk6CisgICAgICAgICAgIE5ldywgcmV0
dXJucyB0aGUgdmFsdWUgb2YgbV9pc0FjY2Vzc2liaWxpdHlUYWJsZS4gSXQncworICAgICAgICAg
ICBiYXNpY2FsbHkgdGhlIGZvcm1lciBpc0RhdGFUYWJsZSgpIGZ1bmN0aW9uIHJlbmFtZWQuCisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OmlzRGF0YVRhYmxlKToKKyAgICAg
ICAgICAgQ2hhbmdlZCBiZWhhdmlvdXIuIEluc3RlYWQgb2YganVzdCByZXR1cm5pbmcgdGhlIHZh
bHVlIG9mCisgICAgICAgICAgIG1faXNBY2Nlc3NpYmlsaXR5VGFibGUgYXMgaXQgZGlkIHNvIGZh
ciAod2hpY2ggd2FzIGNvbmZ1c2luZworICAgICAgICAgICBiZWNhdXNlIG9mIHRoYXQncyBub3Qg
d2hhdCB0aGUgbmFtZSBzdWdnZXN0cyksIGZvY3VzIG9uCisgICAgICAgICAgIGNoZWNraW5nIHdo
ZXRoZXIgaXQncyBhIGRhdGEgdGFibGUgb3Igbm90IGFuZCByZXR1cm4gYSBib29sCisgICAgICAg
ICAgIHZhbHVlIGFjY29yZGluZ2x5LiBJdCdzIGJhc2ljYWxseSBhIHJlbmFtZSBvZiB0aGUgZm9y
bWVyCisgICAgICAgICAgIGlzVGFibGVFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpIGZ1
bmN0aW9uLCBidXQgd2l0aG91dGgKKyAgICAgICAgICAgdGhlIEdUSy1zcGVjaWZpYyBpZi1lbmRp
ZiByZWdpb24gKHdoaWNoIGRpZG4ndCBtYWtlIHNlbnNlCisgICAgICAgICAgIGhlcmUgbm93LCBi
ZWNhdXNlIHRoYXQgd2FzIGFuc3dlcmluZyB0aGUgcXVlc3Rpb24gImlzIHRoZSB0YWJsZQorICAg
ICAgICAgICBleHBvc2VkIGluIHRoZSBHVEsgcG9ydD8iLCBpbnN0ZWFkIG9mICJpcyBpdCBhIGRh
dGEgdGFibGU/IikuCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OmlzVGFi
bGVFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSk6CisgICAgICAgICAgIFVzZXMgdGhlIGhh
c0FyaWFSb2xlKCksIGFuZCBpc0RhdGFUYWJsZSgpIHRvIGRldGVybWluZSB3aGV0aGVyCisgICAg
ICAgICAgIGEgdGFibGUgc2hvdWxkIGJlIGV4cG9zZWQgb3Igbm90LiBBbHNvIGluY2x1ZGVzIHRo
ZSBHVEstc3BlY2lmaWMKKyAgICAgICAgICAgaWYtcmVnaW9uIGNvbWluZyBmcm9tIHRoZSBmb3Jt
ZXIgaW1wbGVtZW50YXRpb24gb2YgdGhlIGZ1bmN0aW9uCisgICAgICAgICAgIGlzVGFibGVFeHBv
c2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpIG5vdCB0byBjaGVjayB3aGV0aGVyIGl0J3MKKyAg
ICAgICAgICAgYSBkYXRhIHRhYmxlIGluIGNhc2UgdGhlIHJlc3Qgb2YgdGhlIGNoZWNrcyBzdWNj
ZWVkZWQgKGFsbAorICAgICAgICAgICB0YWJsZXMgYXJlIGV4cG9zZWQgaW4gdGhlIEdUSyBwb3J0
KS4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6YWRkQ2hpbGRyZW4pOgor
ICAgICAgICAgICBSZXBsYWNlIHVzYWdlIG9mIGlzRGF0YVRhYmxlKCkgd2l0aCBpc0FjY2Vzc2li
aWxpdHlUYWJsZSgpLCB0bworICAgICAgICAgICBrZWVwIGV4YWN0bHkgdGhlIHNhbWUgYmVoYXZp
b3VyIGhhcHBlbmluZyBiZWZvcmUgdGhpcyBwYXRjaC4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlUYWJsZTo6cm9sZVZhbHVlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5VGFibGU6OmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6dGl0bGUpOiBEaXR0by4KKworICAgICAgICBV
cGRhdGVkIHVzYWdlIG9mIHRoZSBmb3JtZXIgZnVuY3Rpb24gaXNEYXRhVGFibGUoKSBldmVyeXdo
ZXJlCisgICAgICAgIGVsc2UsIHJlcGxhY2luZyBpdCB3aXRoIHRoZSBuZXcgaXNBY2Nlc3NpYmls
aXR5VGFibGUoKSwgc28ga2VlcGluZworICAgICAgICBleGFjdGx5IHRoZSBzYW1lIGJlaGF2aW91
ciBoYXBwZW5pbmcgYmVmb3JlIHRoaXMgcGF0Y2guCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5QVJJQUdyaWQ6OmFkZENoaWxkcmVuKToKKyAgICAgICAgICAgVXNlIGlzQWNjZXNzaWJpbGl0
eVRhYmxlKCkgaW5zdGVhZCBvZiBpc0RhdGFUYWJsZSgpLgorICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5QVJJQUdyaWRDZWxsOjpwYXJlbnRUYWJsZSk6IERpdHRvLgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdzo6ZGlzY2xvc2VkUm93cyk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93OjpkaXNjbG9zZWRCeVJvdyk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93OjpwYXJl
bnRUYWJsZSk6IERpdHRvLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRh
YmxlQ2VsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpp
c1RhYmxlQ2VsbCk6CisgICAgICAgICAgIFVzZSBpc0FjY2Vzc2liaWxpdHlUYWJsZSgpIGluc3Rl
YWQgb2YgaXNEYXRhVGFibGUoKS4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlUYWJsZUhlYWRlckNvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5VGFibGVIZWFkZXJDb250YWluZXI6OmFkZENoaWxkcmVuKTogRGl0dG8uCisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eVRhYmxlUm93Ojppc1RhYmxlUm93KTogRGl0dG8KKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbToKKyAgICAgICAg
KC1bQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWRkaXRpb25hbEFjY2Vzc2liaWxpdHlBdHRy
aWJ1dGVOYW1lc10pOgorICAgICAgICAgICBVc2UgaXNBY2Nlc3NpYmlsaXR5VGFibGUoKSBpbnN0
ZWFkIG9mIGlzRGF0YVRhYmxlKCkuCisgICAgICAgICgtW0FjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lc10pOiBEaXR0by4KKyAgICAgICAgKC1bQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOl0pOiBE
aXR0by4KKyAgICAgICAgKC1bQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0
eVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lc10pOiBEaXR0by4KKyAgICAgICAgKC1bQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eVNldFZhbHVlOmZvckF0dHJpYnV0ZTpd
KTogRGl0dG8uCisgICAgICAgICgtW0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2li
aWxpdHlBdHRyaWJ1dGVWYWx1ZTpmb3JQYXJhbWV0ZXI6XSk6IERpdHRvLgorCisgICAgICAgIFVz
ZSB0aGUgbmV3IGZ1bmN0aW9uIGlzQWNjZXNzaWJpbGl0eVRhYmxlKCkgdG9nZXRoZXIgd2l0aCB0
aGUKKyAgICAgICAgbW9kaWZpZWQgaW1wbGVtZW50YXRpb24gb2YgaXNEYXRhVGFibGUoKSB0byBz
ZXQgdGhlICdsYXlvdXQtZ3Vlc3MnCisgICAgICAgIGF0dHJpYnV0ZSB3aGVuIG5lZWRlZC4KKwor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRr
LmNwcDoKKyAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9hdHRyaWJ1dGVzKToKKyAgICAg
ICAgICAgU2V0IHRoZSAnbGF5b3V0LWd1ZXNzJyBhdHRyaWJ1dGUgdG8gJ3RydWUnIHRvIGhlbHAg
QXNzaXN0aXZlCisgICAgICAgICAgIFRlY2hub2xvZ2llcyBndWVzc2luZyB3aGljaCB0YWJsZXMg
YXJlIG5vdCBkYXRhIHRhYmxlcy4KKwogMjAxMC0xMC0yNCAgTU9SSVRBIEhhamltZSAgPG1vcnJp
dGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5nLgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAgYi9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcAppbmRleCAwZDlm
ODQ1Li44NjUxYTgwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eUFSSUFHcmlkLmNwcAorKysgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eUFSSUFHcmlkLmNwcApAQCAtODMsNyArODMsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlBUklBR3Jp
ZDo6YWRkQ2hpbGRyZW4oKQogewogICAgIEFTU0VSVCghbV9oYXZlQ2hpbGRyZW4pOyAKICAgICAK
LSAgICBpZiAoIWlzRGF0YVRhYmxlKCkpIHsKKyAgICBpZiAoIWlzQWNjZXNzaWJpbGl0eVRhYmxl
KCkpIHsKICAgICAgICAgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkQ2hpbGRyZW4oKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsLmNwcCBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsLmNwcAppbmRleCAxNzcxYmI4Li5jODE1N2Y1IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5j
cHAKKysrIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwu
Y3BwCkBAIC01Nyw3ICs1Nyw3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlB
UklBR3JpZENlbGw6OnBhcmVudFRhYmxlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
CiAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKLSAgICBpZiAo
IXBhcmVudCB8fCAhcGFyZW50LT5pc0RhdGFUYWJsZSgpKQorICAgIGlmICghcGFyZW50IHx8ICFw
YXJlbnQtPmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAog
ICAgIHJldHVybiBwYXJlbnQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eUFSSUFHcmlkUm93LmNwcCBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5QVJJQUdyaWRSb3cuY3BwCmluZGV4IDdkNTYyZDkuLjJiOTYwMzYgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cuY3BwCisrKyBi
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cuY3BwCkBAIC02
NSw3ICs2NSw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93OjpkaXNjbG9zZWRSb3dz
KEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgZGlzY2xvCiAgICAgLy8gVGhlIGNvbnRpZ3Vv
dXMgZGlzY2xvc2VkIHJvd3Mgd2lsbCBiZSB0aGUgcm93cyBpbiB0aGUgdGFibGUgdGhhdCAKICAg
ICAvLyBoYXZlIGFuIGFyaWEtbGV2ZWwgb2YgcGx1cyAxIGZyb20gdGhpcyByb3cuCiAgICAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gcGFyZW50T2JqZWN0VW5pZ25vcmVkKCk7Ci0gICAg
aWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+aXNEYXRhVGFibGUoKSkKKyAgICBpZiAoIXBhcmVudCB8
fCAhcGFyZW50LT5pc0FjY2Vzc2liaWxpdHlUYWJsZSgpKQogICAgICAgICByZXR1cm47CiAgICAg
CiAgICAgLy8gU2VhcmNoIGZvciByb3dzIHRoYXQgbWF0Y2ggdGhlIGNvcnJlY3QgbGV2ZWwuIApA
QCAtOTIsNyArOTIsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5QVJJQUdy
aWRSb3c6OmRpc2Nsb3NlZEJ5Um93KCkgY29uc3QKICAgICAvLyBUaGUgcm93IHRoYXQgZGlzY2xv
c2VzIHRoaXMgb25lIGlzIHRoZSByb3cgaW4gdGhlIHRhYmxlCiAgICAgLy8gdGhhdCBpcyBhcmlh
LWxldmVsIHN1YnRyYWN0IDEgZnJvbSB0aGlzIHJvdy4KICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBwYXJlbnQgPSBwYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKLSAgICBpZiAoIXBhcmVudCB8fCAh
cGFyZW50LT5pc0RhdGFUYWJsZSgpKQorICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmlzQWNj
ZXNzaWJpbGl0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIC8vIElmIHRo
ZSBsZXZlbCBpcyAxIG9yIGxlc3MsIHRoYW4gbm90aGluZyBkaXNjbG9zZXMgdGhpcyByb3cuCkBA
IC0xMTksNyArMTE5LDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eUFSSUFH
cmlkUm93OjpkaXNjbG9zZWRCeVJvdygpIGNvbnN0CiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nl
c3NpYmlsaXR5QVJJQUdyaWRSb3c6OnBhcmVudFRhYmxlKCkgY29uc3QKIHsKICAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBwYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKLSAgICBpZiAo
IXBhcmVudC0+aXNEYXRhVGFibGUoKSkKKyAgICBpZiAoIXBhcmVudC0+aXNBY2Nlc3NpYmlsaXR5
VGFibGUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAgcmV0dXJuIHBhcmVudDsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmggYi9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCmluZGV4IGYyZTFlZmUu
LjY2NDI0ZWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
T2JqZWN0LmgKKysrIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
aApAQCAtMjg1LDYgKzI4NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNTbGlkZXIo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2woKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0xpc3QoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0FjY2Vzc2liaWxpdHlUYWJsZSgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzRGF0YVRhYmxlKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNUYWJsZVJvdygpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzVGFibGVDb2x1bW4oKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVRhYmxlLmNwcAppbmRleCA3ZjdiNmYyLi5hYTUxZjllIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcAorKysgYi9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcApAQCAtNjcsMzcgKzY3LDQ1IEBAIFBhc3NS
ZWZQdHI8QWNjZXNzaWJpbGl0eVRhYmxlPiBBY2Nlc3NpYmlsaXR5VGFibGU6OmNyZWF0ZShSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBY2Nlc3NpYmlsaXR5
VGFibGUocmVuZGVyZXIpKTsKIH0KIAotYm9vbCBBY2Nlc3NpYmlsaXR5VGFibGU6OmlzVGFibGVF
eHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpCitib29sIEFjY2Vzc2liaWxpdHlUYWJsZTo6
aGFzQVJJQVJvbGUoKSBjb25zdAogewotICAgIC8vIHRoZSBmb2xsb3dpbmcgaXMgYSBoZXVyaXN0
aWMgdXNlZCB0byBkZXRlcm1pbmUgaWYgYQotICAgIC8vIDx0YWJsZT4gc2hvdWxkIGJlIGV4cG9z
ZWQgYXMgYW4gQVhUYWJsZS4gVGhlIGdvYWwKLSAgICAvLyBpcyB0byBvbmx5IHNob3cgImRhdGEi
IHRhYmxlcwotICAgIAotICAgIGlmICghcmVuZGVyZXIoKSkKKyAgICBpZiAoIW1fcmVuZGVyZXIp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICAvLyBpZiB0aGUgZGV2ZWxvcGVyIGFz
c2lnbmVkIGFuIGFyaWEgcm9sZSB0byB0aGlzLCB0aGVuIHdlIHNob3VsZG4ndCAKLSAgICAvLyBl
eHBvc2UgaXQgYXMgYSB0YWJsZSwgdW5sZXNzLCBvZiBjb3Vyc2UsIHRoZSBhcmlhIHJvbGUgaXMg
YSB0YWJsZQogICAgIEFjY2Vzc2liaWxpdHlSb2xlIGFyaWFSb2xlID0gYXJpYVJvbGVBdHRyaWJ1
dGUoKTsKICAgICBpZiAoYXJpYVJvbGUgIT0gVW5rbm93blJvbGUpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlUYWJsZTo6
aXNBY2Nlc3NpYmlsaXR5VGFibGUoKSBjb25zdAoreworICAgIGlmICghbV9yZW5kZXJlcikKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIFJlbmRlclRhYmxlKiB0YWJsZSA9IHRvUmVu
ZGVyVGFibGUobV9yZW5kZXJlcik7Ci0gICAgCi0gICAgLy8gdGhpcyBlbXBsb3lzIGEgaGV1cmlz
dGljIHRvIGRldGVybWluZSBpZiB0aGlzIHRhYmxlIHNob3VsZCBhcHBlYXIuIAotICAgIC8vIE9u
bHkgImRhdGEiIHRhYmxlcyBzaG91bGQgYmUgZXhwb3NlZCBhcyB0YWJsZXMuIAorICAgIHJldHVy
biBtX2lzQWNjZXNzaWJpbGl0eVRhYmxlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlUYWJsZTo6
aXNEYXRhVGFibGUoKSBjb25zdAoreworICAgIGlmICghbV9yZW5kZXJlcikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgLy8gRG8gbm90IGNvbnNpZGVyIGl0IGEgZGF0YSB0YWJsZSBpcyBp
dCBoYXMgYW4gQVJJQSByb2xlLgorICAgIGlmIChoYXNBUklBUm9sZSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAvLyBUaGlzIGVtcGxveXMgYSBoZXVyaXN0aWMgdG8gZGV0ZXJtaW5l
IGlmIHRoaXMgdGFibGUgc2hvdWxkIGFwcGVhci4KKyAgICAvLyBPbmx5ICJkYXRhIiB0YWJsZXMg
c2hvdWxkIGJlIGV4cG9zZWQgYXMgdGFibGVzLgogICAgIC8vIFVuZm9ydHVuYXRlbHksIHRoZXJl
IGlzIG5vIGdvb2Qgd2F5IHRvIGRldGVybWluZSB0aGUgZGlmZmVyZW5jZQotICAgIC8vIGJldHdl
ZW4gYSAibGF5b3V0IiB0YWJsZSBhbmQgYSAiZGF0YSIgdGFibGUKKyAgICAvLyBiZXR3ZWVuIGEg
ImxheW91dCIgdGFibGUgYW5kIGEgImRhdGEiIHRhYmxlLgogICAgIAorICAgIFJlbmRlclRhYmxl
KiB0YWJsZSA9IHRvUmVuZGVyVGFibGUobV9yZW5kZXJlcik7CiAgICAgTm9kZSogdGFibGVOb2Rl
ID0gdGFibGUtPm5vZGUoKTsKICAgICBpZiAoIXRhYmxlTm9kZSB8fCAhdGFibGVOb2RlLT5oYXNU
YWdOYW1lKHRhYmxlVGFnKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgLy8gR3RrKyBB
VHMgZXhwZWN0IGFsbCB0YWJsZXMgdG8gYmUgZXhwb3NlZCBhcyB0YWJsZXMuCi0jaWYgUExBVEZP
Uk0oR1RLKQotICAgIHJldHVybiB0cnVlOwotI2VuZGlmCi0gICAgCiAgICAgLy8gaWYgdGhlcmUg
aXMgYSBjYXB0aW9uIGVsZW1lbnQsIHN1bW1hcnksIFRIRUFELCBvciBURk9PVCBzZWN0aW9uLCBp
dCdzIG1vc3QgY2VydGFpbmx5IGEgZGF0YSB0YWJsZQogICAgIEhUTUxUYWJsZUVsZW1lbnQqIHRh
YmxlRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUVsZW1lbnQqPih0YWJsZU5vZGUpOwog
ICAgIGlmICghdGFibGVFbGVtZW50LT5zdW1tYXJ5KCkuaXNFbXB0eSgpIHx8IHRhYmxlRWxlbWVu
dC0+dEhlYWQoKSB8fCB0YWJsZUVsZW1lbnQtPnRGb290KCkgfHwgdGFibGVFbGVtZW50LT5jYXB0
aW9uKCkpCkBAIC0yNDIsNiArMjUwLDMwIEBAIGJvb2wgQWNjZXNzaWJpbGl0eVRhYmxlOjppc1Rh
YmxlRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKQogICAgIHJldHVybiBmYWxzZTsKIH0K
ICAgICAKK2Jvb2wgQWNjZXNzaWJpbGl0eVRhYmxlOjppc1RhYmxlRXhwb3NhYmxlVGhyb3VnaEFj
Y2Vzc2liaWxpdHkoKSBjb25zdAoreworICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgYSBoZXVyaXN0
aWMgdXNlZCB0byBkZXRlcm1pbmUgaWYgYQorICAgIC8vIDx0YWJsZT4gc2hvdWxkIGJlIGV4cG9z
ZWQgYXMgYW4gQVhUYWJsZS4gVGhlIGdvYWwKKyAgICAvLyBpcyB0byBvbmx5IHNob3cgImRhdGEi
IHRhYmxlcy4KKworICAgIGlmICghbV9yZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gSWYgdGhlIGRldmVsb3BlciBhc3NpZ25lZCBhbiBhcmlhIHJvbGUgdG8gdGhpcywg
dGhlbiB3ZQorICAgIC8vIHNob3VsZG4ndCBleHBvc2UgaXQgYXMgYSB0YWJsZSwgdW5sZXNzLCBv
ZiBjb3Vyc2UsIHRoZSBhcmlhCisgICAgLy8gcm9sZSBpcyBhIHRhYmxlLgorICAgIGlmIChoYXNB
UklBUm9sZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBHdGsrIEFUcyBleHBl
Y3QgYWxsIHRhYmxlcyB0byBiZSBleHBvc2VkIGFzIHRhYmxlcy4KKyNpZiBQTEFURk9STShHVEsp
CisgICAgTm9kZSogdGFibGVOb2RlID0gdG9SZW5kZXJUYWJsZShtX3JlbmRlcmVyKS0+bm9kZSgp
OworICAgIHJldHVybiB0YWJsZU5vZGUgJiYgdGFibGVOb2RlLT5oYXNUYWdOYW1lKHRhYmxlVGFn
KTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGlzRGF0YVRhYmxlKCk7Cit9CisKIHZvaWQgQWNjZXNz
aWJpbGl0eVRhYmxlOjpjbGVhckNoaWxkcmVuKCkKIHsKICAgICBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0OjpjbGVhckNoaWxkcmVuKCk7CkBAIC0yNTEsNyArMjgzLDcgQEAgdm9pZCBBY2Nlc3Np
YmlsaXR5VGFibGU6OmNsZWFyQ2hpbGRyZW4oKQogCiB2b2lkIEFjY2Vzc2liaWxpdHlUYWJsZTo6
YWRkQ2hpbGRyZW4oKQogewotICAgIGlmICghaXNEYXRhVGFibGUoKSkgeworICAgIGlmICghaXNB
Y2Nlc3NpYmlsaXR5VGFibGUoKSkgewogICAgICAgICBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
OjphZGRDaGlsZHJlbigpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDg4LDcgKzUyMCw3
IEBAIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqIEFjY2Vzc2liaWxpdHlUYWJsZTo6Y2VsbEZvckNv
bHVtbkFuZFJvdyh1bnNpZ25lZCBjb2x1bW4sCiAKIEFjY2Vzc2liaWxpdHlSb2xlIEFjY2Vzc2li
aWxpdHlUYWJsZTo6cm9sZVZhbHVlKCkgY29uc3QKIHsKLSAgICBpZiAoIWlzRGF0YVRhYmxlKCkp
CisgICAgaWYgKCFpc0FjY2Vzc2liaWxpdHlUYWJsZSgpKQogICAgICAgICByZXR1cm4gQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6cm9sZVZhbHVlKCk7CiAKICAgICByZXR1cm4gVGFibGVSb2xl
OwpAQCAtNTAyLDcgKzUzNCw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVRhYmxlOjphY2Nlc3NpYmls
aXR5SXNJZ25vcmVkKCkgY29uc3QKICAgICBpZiAoZGVjaXNpb24gPT0gSWdub3JlT2JqZWN0KQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKLSAgICBpZiAoIWlzRGF0YVRhYmxlKCkpCisgICAg
aWYgKCFpc0FjY2Vzc2liaWxpdHlUYWJsZSgpKQogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpOwogICAgICAgICAKICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC01MTAsNyArNTQyLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VGFibGU6
OmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdAogICAgIAogU3RyaW5nIEFjY2Vzc2liaWxp
dHlUYWJsZTo6dGl0bGUoKSBjb25zdAogewotICAgIGlmICghaXNEYXRhVGFibGUoKSkKKyAgICBp
ZiAoIWlzQWNjZXNzaWJpbGl0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0Ojp0aXRsZSgpOwogICAgIAogICAgIFN0cmluZyB0aXRsZTsKQEAgLTUzMiwx
MiArNTY0LDQgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlUYWJsZTo6dGl0bGUoKSBjb25zdAogICAg
IHJldHVybiB0aXRsZTsKIH0KIAotYm9vbCBBY2Nlc3NpYmlsaXR5VGFibGU6OmlzRGF0YVRhYmxl
KCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAKLSAgICByZXR1cm4gbV9pc0FjY2Vzc2liaWxpdHlUYWJsZTsKLX0KLQogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlUYWJsZS5oIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5o
CmluZGV4IDJlZTU4MTIuLjE2NjYzNjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5VGFibGUuaAorKysgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVRhYmxlLmgKQEAgLTUxLDcgKzUxLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEFjY2Vzc2liaWxpdHlUYWJsZT4gY3JlYXRlKFJlbmRlck9iamVjdCopOwogICAgIHZp
cnR1YWwgfkFjY2Vzc2liaWxpdHlUYWJsZSgpOwogCisgICAgdmlydHVhbCBib29sIGlzQWNjZXNz
aWJpbGl0eVRhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzRGF0YVRhYmxlKCkgY29u
c3Q7CisKICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGVWYWx1ZSgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBpc0FyaWFUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgCkBAIC04Niw3ICs4OCw4IEBAIHByb3RlY3RlZDoKICAgICBBY2Nlc3NpYmlsaXR5VGFibGVI
ZWFkZXJDb250YWluZXIqIG1faGVhZGVyQ29udGFpbmVyOwogICAgIG11dGFibGUgYm9vbCBtX2lz
QWNjZXNzaWJpbGl0eVRhYmxlOwogCi0gICAgYm9vbCBpc1RhYmxlRXhwb3NhYmxlVGhyb3VnaEFj
Y2Vzc2liaWxpdHkoKTsKKyAgICBib29sIGhhc0FSSUFSb2xlKCkgY29uc3Q7CisgICAgYm9vbCBp
c1RhYmxlRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSBjb25zdDsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUgCmRpZmYgLS1naXQgYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVRhYmxlQ2VsbC5jcHAgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVRhYmxlQ2VsbC5jcHAKaW5kZXggZTJlZmI1ZS4uN2FkNjA2MyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwCisrKyBiL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcApAQCAtODQsNyArODQs
NyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpwYXJlbnRU
YWJsZSgpIGNvbnN0CiBib29sIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmlzVGFibGVDZWxsKCkg
Y29uc3QKIHsKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiB0YWJsZSA9IHBhcmVudFRhYmxlKCk7
Ci0gICAgaWYgKCF0YWJsZSB8fCAhdGFibGUtPmlzRGF0YVRhYmxlKCkpCisgICAgaWYgKCF0YWJs
ZSB8fCAhdGFibGUtPmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJDb250YWluZXIuY3BwIGIvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUhlYWRlckNvbnRhaW5lci5jcHAKaW5kZXggZTJk
YTgzYy4uZGFkNjk2MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlUYWJsZUhlYWRlckNvbnRhaW5lci5jcHAKKysrIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlUYWJsZUhlYWRlckNvbnRhaW5lci5jcHAKQEAgLTg1LDcgKzg1LDcgQEAg
dm9pZCBBY2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJDb250YWluZXI6OmFkZENoaWxkcmVuKCkKICAg
ICBBU1NFUlQoIW1faGF2ZUNoaWxkcmVuKTsgCiAgICAgCiAgICAgbV9oYXZlQ2hpbGRyZW4gPSB0
cnVlOwotICAgIGlmICghbV9wYXJlbnRUYWJsZSB8fCAhbV9wYXJlbnRUYWJsZS0+aXNEYXRhVGFi
bGUoKSkKKyAgICBpZiAoIW1fcGFyZW50VGFibGUgfHwgIW1fcGFyZW50VGFibGUtPmlzQWNjZXNz
aWJpbGl0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBzdGF0aWNfY2FzdDxB
Y2Nlc3NpYmlsaXR5VGFibGUqPihtX3BhcmVudFRhYmxlKS0+Y29sdW1uSGVhZGVycyhtX2NoaWxk
cmVuKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFi
bGVSb3cuY3BwIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5j
cHAKaW5kZXggNWU5ZjA1Yy4uMDlkYjEzMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHAKKysrIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHAKQEAgLTY4LDcgKzY4LDcgQEAgQWNjZXNzaWJpbGl0
eVJvbGUgQWNjZXNzaWJpbGl0eVRhYmxlUm93Ojpyb2xlVmFsdWUoKSBjb25zdAogYm9vbCBBY2Nl
c3NpYmlsaXR5VGFibGVSb3c6OmlzVGFibGVSb3coKSBjb25zdAogewogICAgIEFjY2Vzc2liaWxp
dHlPYmplY3QqIHRhYmxlID0gcGFyZW50VGFibGUoKTsKLSAgICBpZiAoIXRhYmxlIHx8ICF0YWJs
ZS0+aXNEYXRhVGFibGUoKSkKKyAgICBpZiAoIXRhYmxlIHx8ICF0YWJsZS0+aXNBY2Nlc3NpYmls
aXR5VGFibGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHJldHVybiB0cnVl
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlckF0ay5jcHAgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyQXRrLmNwcAppbmRleCBhYTg4MjE3Li5iNTJhZDE2IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRr
LmNwcAorKysgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyQXRrLmNwcApAQCAtMzI5LDE0ICszMjksMjMgQEAgc3RhdGljIEF0a0F0dHJpYnV0ZVNl
dCogYWRkQXR0cmlidXRlVG9TZXQoQXRrQXR0cmlidXRlU2V0KiBhdHRyaWJ1dGVTZXQsIGNvbnN0
IGMKIHN0YXRpYyBBdGtBdHRyaWJ1dGVTZXQqIHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9hdHRyaWJ1
dGVzKEF0a09iamVjdCogb2JqZWN0KQogewogICAgIEF0a0F0dHJpYnV0ZVNldCogYXR0cmlidXRl
U2V0ID0gMDsKLQogICAgIGF0dHJpYnV0ZVNldCA9IGFkZEF0dHJpYnV0ZVRvU2V0KGF0dHJpYnV0
ZVNldCwgInRvb2xraXQiLCAiV2ViS2l0R3RrIik7CiAKLSAgICBpbnQgaGVhZGluZ0xldmVsID0g
Y29yZShvYmplY3QpLT5oZWFkaW5nTGV2ZWwoKTsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBj
b3JlT2JqZWN0ID0gY29yZShvYmplY3QpOworICAgIGlmICghY29yZU9iamVjdCkKKyAgICAgICAg
cmV0dXJuIGF0dHJpYnV0ZVNldDsKKworICAgIGludCBoZWFkaW5nTGV2ZWwgPSBjb3JlT2JqZWN0
LT5oZWFkaW5nTGV2ZWwoKTsKICAgICBpZiAoaGVhZGluZ0xldmVsKSB7CiAgICAgICAgIFN0cmlu
ZyB2YWx1ZSA9IFN0cmluZzo6bnVtYmVyKGhlYWRpbmdMZXZlbCk7CiAgICAgICAgIGF0dHJpYnV0
ZVNldCA9IGFkZEF0dHJpYnV0ZVRvU2V0KGF0dHJpYnV0ZVNldCwgImxldmVsIiwgdmFsdWUudXRm
OCgpLmRhdGEoKSk7CiAgICAgfQorCisgICAgLy8gU2V0IHRoZSAnbGF5b3V0LWd1ZXNzJyBhdHRy
aWJ1dGUgdG8gaGVscCBBc3Npc3RpdmUKKyAgICAvLyBUZWNobm9sb2dpZXMga25vdyB3aGVuIGFu
IGV4cG9zZWQgdGFibGUgaXMgbm90IGRhdGEgdGFibGUuCisgICAgaWYgKGNvcmVPYmplY3QtPmlz
QWNjZXNzaWJpbGl0eVRhYmxlKCkgJiYgIWNvcmVPYmplY3QtPmlzRGF0YVRhYmxlKCkpCisgICAg
ICAgIGF0dHJpYnV0ZVNldCA9IGFkZEF0dHJpYnV0ZVRvU2V0KGF0dHJpYnV0ZVNldCwgImxheW91
dC1ndWVzcyIsICJ0cnVlIik7CisKICAgICByZXR1cm4gYXR0cmlidXRlU2V0OwogfQogCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyLm1tIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlci5tbQppbmRleCBlNGI3ZDhlLi43YTEzZjExIDEwMDY0NAotLS0gYS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCisrKyBiL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW0KQEAgLTY0Nyw3
ICs2NDcsNyBAQCBzdGF0aWMgV2ViQ29yZVRleHRNYXJrZXJSYW5nZSogdGV4dE1hcmtlclJhbmdl
RnJvbVZpc2libGVQb3NpdGlvbnMoQVhPYmplY3RDYWNoZQogICAgIGlmIChtX29iamVjdC0+c3Vw
cG9ydHNBUklBRHJvcHBpbmcoKSkKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNj
ZXNzaWJpbGl0eURyb3BFZmZlY3RzQXR0cmlidXRlXTsKIAotICAgIGlmIChtX29iamVjdC0+aXNE
YXRhVGFibGUoKSAmJiBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGUqPihtX29iamVjdCkt
PnN1cHBvcnRzU2VsZWN0ZWRSb3dzKCkpCisgICAgaWYgKG1fb2JqZWN0LT5pc0FjY2Vzc2liaWxp
dHlUYWJsZSgpICYmIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZSo+KG1fb2JqZWN0KS0+
c3VwcG9ydHNTZWxlY3RlZFJvd3MoKSkKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5T
QWNjZXNzaWJpbGl0eVNlbGVjdGVkUm93c0F0dHJpYnV0ZV07ICAgICAgICAKICAgICAKICAgICBp
ZiAobV9vYmplY3QtPnN1cHBvcnRzQVJJQUxpdmVSZWdpb24oKSkgewpAQCAtOTQ4LDcgKzk0OCw3
IEBAIHN0YXRpYyBXZWJDb3JlVGV4dE1hcmtlclJhbmdlKiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlz
aWJsZVBvc2l0aW9ucyhBWE9iamVjdENhY2hlCiAgICAgZWxzZSBpZiAobV9vYmplY3QtPmlzQW5j
aG9yKCkgfHwgbV9vYmplY3QtPmlzSW1hZ2UoKSB8fCBtX29iamVjdC0+aXNMaW5rKCkpCiAgICAg
ICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBhbmNob3JBdHRyczsKIAotICAgIGVsc2UgaWYgKG1fb2Jq
ZWN0LT5pc0RhdGFUYWJsZSgpKQorICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc0FjY2Vzc2liaWxp
dHlUYWJsZSgpKQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gdGFibGVBdHRyczsKICAgICBl
bHNlIGlmIChtX29iamVjdC0+aXNUYWJsZUNvbHVtbigpKQogICAgICAgICBvYmplY3RBdHRyaWJ1
dGVzID0gdGFibGVDb2xBdHRyczsKQEAgLTE2MzYsNyArMTYzNiw3IEBAIHN0YXRpYyBOU1N0cmlu
Zyogcm9sZVZhbHVlVG9OU1N0cmluZyhBY2Nlc3NpYmlsaXR5Um9sZSB2YWx1ZSkKICAgICAgICAg
fQogICAgIH0gICAgCiAgICAgCi0gICAgaWYgKG1fb2JqZWN0LT5pc0RhdGFUYWJsZSgpKSB7Cisg
ICAgaWYgKG1fb2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlUYWJsZSgpKSB7CiAgICAgICAgIC8vIFRP
RE86IGRpc3Rpbmd1aXNoIGJldHdlZW4gdmlzaWJsZSBhbmQgbm9uLXZpc2libGUgcm93cwogICAg
ICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVJv
d3NBdHRyaWJ1dGVdIHx8IAogICAgICAgICAgICAgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOk5TQWNjZXNzaWJpbGl0eVZpc2libGVSb3dzQXR0cmlidXRlXSkgewpAQCAtMjA4Niw3ICsy
MDg2LDcgQEAgc3RhdGljIE5TU3RyaW5nKiByb2xlVmFsdWVUb05TU3RyaW5nKEFjY2Vzc2liaWxp
dHlSb2xlIHZhbHVlKQogICAgIGlmIChtX29iamVjdC0+aXNUZXh0Q29udHJvbCgpKQogICAgICAg
ICByZXR1cm4gdGV4dFBhcmFtQXR0cnM7CiAgICAgCi0gICAgaWYgKG1fb2JqZWN0LT5pc0RhdGFU
YWJsZSgpKQorICAgIGlmIChtX29iamVjdC0+aXNBY2Nlc3NpYmlsaXR5VGFibGUoKSkKICAgICAg
ICAgcmV0dXJuIHRhYmxlUGFyYW1BdHRyczsKICAgICAKICAgICBpZiAobV9vYmplY3QtPmlzTWVu
dVJlbGF0ZWQoKSkKQEAgLTIyNDcsNyArMjI0Nyw3IEBAIHN0YXRpYyBOU1N0cmluZyogcm9sZVZh
bHVlVG9OU1N0cmluZyhBY2Nlc3NpYmlsaXR5Um9sZSB2YWx1ZSkKICAgICBlbHNlIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRSb3dzQXR0
cmlidXRlXSkgewogICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3Igc2VsZWN0ZWRSb3dzOwogICAgICAgICBjb252ZXJ0VG9WZWN0b3IoYXJyYXks
IHNlbGVjdGVkUm93cyk7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNUcmVlKCkgfHwgbV9vYmpl
Y3QtPmlzRGF0YVRhYmxlKCkpCisgICAgICAgIGlmIChtX29iamVjdC0+aXNUcmVlKCkgfHwgbV9v
YmplY3QtPmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkpCiAgICAgICAgICAgICBtX29iamVjdC0+c2V0
U2VsZWN0ZWRSb3dzKHNlbGVjdGVkUm93cyk7CiAgICAgfSBlbHNlIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5R3JhYmJlZEF0dHJpYnV0ZV0pCiAgICAg
ICAgIG1fb2JqZWN0LT5zZXRBUklBR3JhYmJlZChbbnVtYmVyIGJvb2xWYWx1ZV0pOwpAQCAtMjU0
MSw3ICsyNTQxLDcgQEAgc3RhdGljIFJlbmRlck9iamVjdCogcmVuZGVyZXJGb3JWaWV3KE5TVmll
dyogdmlldykKICAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRp
b246dmlzaWJsZVBvc1JhbmdlLmVuZF07CiAgICAgfQogICAgIAotICAgIGlmIChtX29iamVjdC0+
aXNEYXRhVGFibGUoKSkgeworICAgIGlmIChtX29iamVjdC0+aXNBY2Nlc3NpYmlsaXR5VGFibGUo
KSkgewogICAgICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmls
aXR5Q2VsbEZvckNvbHVtbkFuZFJvd1BhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7CiAgICAgICAg
ICAgICBpZiAoYXJyYXkgPT0gbmlsIHx8IFthcnJheSBjb3VudF0gIT0gMikKICAgICAgICAgICAg
ICAgICByZXR1cm4gbmlsOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9XZWJL
aXQvZ3RrL0NoYW5nZUxvZwppbmRleCBkMTMwNzY2Li41MjQzODE5IDEwMDY0NAotLS0gYS9XZWJL
aXQvZ3RrL0NoYW5nZUxvZworKysgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIy
IEBACisyMDEwLTEwLTI2ICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR3Rr
XSBMYXlvdXQgdGFibGVzIHNob3VsZCBpbmRpY2F0ZSB0aGF0IHRoZXkgYXJlIG5vdCBkYXRhIHRh
YmxlcyB2aWEgYW4gb2JqZWN0IGF0dHJpYnV0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzU0MjIKKworICAgICAgICBOZXcgdW5pdCB0ZXN0IHRvIGNo
ZWNrIHRoZSAnbGF5b3V0LWd1ZXNzJyBhdHRyaWJ1dGUgaW4gdGFibGVzLgorCisgICAgICAgICog
dGVzdHMvdGVzdGF0ay5jOgorICAgICAgICAoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlTmFtZUhh
c1ZhbHVlKTogTmV3LCBsb29rcyBmb3IgYSBhdHRyaWJ1dGUKKyAgICAgICAgd2l0aCBhIHNwZWNp
ZmljIHZhbHVlLCBieSB0aGUgbmFtZSBvZiBhdHRyaWJ1dGUuCisgICAgICAgIChhdGtBdHRyaWJ1
dGVTZXRDb250YWluc0F0dHJpYnV0ZU5hbWUpOiBOZXcsIGp1c3QgY2hlY2tzIHdoZXRoZXIKKyAg
ICAgICAgYW4gYXR0cmlidXRlIHdpdGggYSBzcGVjaWZpZWQgbmFtZSBpcyBwcmVzZW50IGluIHRo
ZSBzZXQuCisgICAgICAgIChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZSk6IE1vZGlm
aWVkIHRvIHJlbGF5IG9uIHRoZSBuZXcKKyAgICAgICAgZnVuY3Rpb24gYXRrQXR0cmlidXRlU2V0
QXR0cmlidXRlTmFtZUhhc1ZhbHVlKCkuCisgICAgICAgICh0ZXN0V2Via2l0QXRrTGF5b3V0QW5k
RGF0YVRhYmxlcyk6IE5ldyB0ZXN0LgorICAgICAgICAobWFpbik6IEFkZGVkIHRoZSBuZXcgdGVz
dC4KKwogMjAxMC0xMC0yMiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvdGVz
dHMvdGVzdGF0ay5jIGIvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMKaW5kZXggYzhkZjRlZi4u
OGYyMWZmZiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMKKysrIGIvV2Vi
S2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMKQEAgLTQ2LDYgKzQ2LDggQEAgc3RhdGljIGNvbnN0IGNo
YXIqIGNvbnRlbnRzSW5UYWJsZVdpdGhIZWFkZXJzID0gIjxodG1sPjxib2R5Pjx0YWJsZT48dHI+
PHRoPmZvbzwKIAogc3RhdGljIGNvbnN0IGNoYXIqIGZvcm1XaXRoVGV4dElucHV0cyA9ICI8aHRt
bD48Ym9keT48Zm9ybT48aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nZW50cnknIC8+PC9mb3JtPjwv
Ym9keT48L2h0bWw+IjsKIAorc3RhdGljIGNvbnN0IGNoYXIqIGxheW91dEFuZERhdGFUYWJsZXMg
PSAiPGh0bWw+PGJvZHk+PHRhYmxlPjx0cj48dGg+T2RkPC90aD48dGg+RXZlbjwvdGg+PC90cj48
dHI+PHRkPjE8L3RkPjx0ZD4yPC90ZD48L3RyPjwvdGFibGU+PHRhYmxlPjx0cj48dGQ+Zm9vPC90
ZD48dGQ+YmFyPC90ZD48L3RyPjwvdGFibGU+PC9ib2R5PjwvaHRtbD4iOworCiBzdGF0aWMgY29u
c3QgY2hhciogbGlzdHNPZkl0ZW1zID0gIjxodG1sPjxib2R5Pjx1bD48bGk+dGV4dCBvbmx5PC9s
aT48bGk+PGEgaHJlZj0nZm9vJz5saW5rIG9ubHk8L2E+PC9saT48bGk+dGV4dCBhbmQgYSA8YSBo
cmVmPSdiYXInPmxpbms8L2E+PC9saT48L3VsPjxvbD48bGk+dGV4dCBvbmx5PC9saT48bGk+PGEg
aHJlZj0nZm9vJz5saW5rIG9ubHk8L2E+PC9saT48bGk+dGV4dCBhbmQgYSA8YSBocmVmPSdiYXIn
Pmxpbms8L2E+PC9saT48L29sPjwvYm9keT48L2h0bWw+IjsKIAogc3RhdGljIGNvbnN0IGNoYXIq
IHRleHRGb3JTZWxlY3Rpb25zID0gIjxodG1sPjxib2R5PjxwPkEgcGFyYWdyYXBoIHdpdGggcGxh
aW4gdGV4dDwvcD48cD5BIHBhcmFncmFwaCB3aXRoIDxhIGhyZWY9J2h0dHA6Ly93ZWJraXQub3Jn
Jz5hIGxpbms8L2E+IGluIHRoZSBtaWRkbGU8L3A+PC9ib2R5PjwvaHRtbD4iOwpAQCAtNTk2LDE1
ICs1OTgsMjUgQEAgc3RhdGljIGdpbnQgY29tcEF0a0F0dHJpYnV0ZU5hbWUoQXRrQXR0cmlidXRl
KiBhMSwgQXRrQXR0cmlidXRlKiBhMikKICAgICByZXR1cm4gZ19zdHJjbXAwKGExLT5uYW1lLCBh
Mi0+bmFtZSk7CiB9CiAKLXN0YXRpYyBnYm9vbGVhbiBhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVI
YXNWYWx1ZShBdGtBdHRyaWJ1dGVTZXQqIHNldCwgQXRrVGV4dEF0dHJpYnV0ZSBhdHRyaWJ1dGUs
IGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3N0YXRpYyBnYm9vbGVhbiBhdGtBdHRyaWJ1dGVTZXRBdHRy
aWJ1dGVOYW1lSGFzVmFsdWUoQXRrQXR0cmlidXRlU2V0KiBzZXQsIGNvbnN0IGdjaGFyKiBhdHRy
aWJ1dGVOYW1lLCBjb25zdCBnY2hhciogdmFsdWUpCiB7Ci0gICAgR1NMaXN0ICplbGVtZW50Owor
ICAgIEdTTGlzdCogZWxlbWVudDsKICAgICBBdGtBdHRyaWJ1dGUgYXQ7Ci0gICAgZ2Jvb2xlYW4g
cmVzdWx0OwotICAgIGF0Lm5hbWUgPSAoZ2NoYXIgKilhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25h
bWUoYXR0cmlidXRlKTsKKyAgICBhdC5uYW1lID0gKGdjaGFyKilhdHRyaWJ1dGVOYW1lOwogICAg
IGVsZW1lbnQgPSBnX3NsaXN0X2ZpbmRfY3VzdG9tKHNldCwgJmF0LCAoR0NvbXBhcmVGdW5jKWNv
bXBBdGtBdHRyaWJ1dGVOYW1lKTsKLSAgICByZXN1bHQgPSBlbGVtZW50ICYmICFnX3N0cmNtcDAo
KChBdGtBdHRyaWJ1dGUqKShlbGVtZW50LT5kYXRhKSktPnZhbHVlLCB2YWx1ZSk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gZWxlbWVudCAmJiAhZ19zdHJjbXAwKCgoQXRrQXR0cmli
dXRlKikoZWxlbWVudC0+ZGF0YSkpLT52YWx1ZSwgdmFsdWUpOworfQorCitzdGF0aWMgZ2Jvb2xl
YW4gYXRrQXR0cmlidXRlU2V0Q29udGFpbnNBdHRyaWJ1dGVOYW1lKEF0a0F0dHJpYnV0ZVNldCog
c2V0LCBjb25zdCBnY2hhciogYXR0cmlidXRlTmFtZSkKK3sKKyAgICBBdGtBdHRyaWJ1dGUgYXQ7
CisgICAgYXQubmFtZSA9IChnY2hhciopYXR0cmlidXRlTmFtZTsKKyAgICByZXR1cm4gZ19zbGlz
dF9maW5kX2N1c3RvbShzZXQsICZhdCwgKEdDb21wYXJlRnVuYyljb21wQXRrQXR0cmlidXRlTmFt
ZSkgPyB0cnVlIDogZmFsc2U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBhdGtBdHRyaWJ1dGVTZXRB
dHRyaWJ1dGVIYXNWYWx1ZShBdGtBdHRyaWJ1dGVTZXQqIHNldCwgQXRrVGV4dEF0dHJpYnV0ZSBh
dHRyaWJ1dGUsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gYXRrQXR0cmlidXRl
U2V0QXR0cmlidXRlTmFtZUhhc1ZhbHVlKHNldCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1l
KGF0dHJpYnV0ZSksIHZhbHVlKTsKIH0KIAogc3RhdGljIGdib29sZWFuIGF0a0F0dHJpYnV0ZVNl
dEFyZUVxdWFsKEF0a0F0dHJpYnV0ZVNldCogc2V0MSwgQXRrQXR0cmlidXRlU2V0KiBzZXQyKQpA
QCAtOTY0LDYgKzk3Niw0NSBAQCBzdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrR2V0RXh0ZW50cyh2
b2lkKQogICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwogfQogCitzdGF0aWMgdm9pZCB0ZXN0
V2Via2l0QXRrTGF5b3V0QW5kRGF0YVRhYmxlcyh2b2lkKQoreworICAgIFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBn
X29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jID0geyAw
LCAwLCA4MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VU
KHdlYlZpZXcpLCAmYWxsb2MpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJW
aWV3LCBsYXlvdXRBbmREYXRhVGFibGVzLCAwLCAwLCAwKTsKKworICAgIC8vIE1hbnVhbGx5IHNw
aW4gdGhlIG1haW4gY29udGV4dCB0byBnZXQgdGhlIGFjY2Vzc2libGUgb2JqZWN0cworICAgIHdo
aWxlIChnX21haW5fY29udGV4dF9wZW5kaW5nKDApKQorICAgICAgICBnX21haW5fY29udGV4dF9p
dGVyYXRpb24oMCwgVFJVRSk7CisKKyAgICBBdGtPYmplY3QqIG9iaiA9IGd0a193aWRnZXRfZ2V0
X2FjY2Vzc2libGUoR1RLX1dJREdFVCh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQob2JqKTsKKwor
ICAgIC8vIENoZWNrIHRoZSBub24tbGF5b3V0IHRhYmxlIChkYXRhIHRhYmxlKQorCisgICAgQXRr
T2JqZWN0KiB0YWJsZTEgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iaiwgMCk7
CisgICAgZ19hc3NlcnQoQVRLX0lTX1RBQkxFKHRhYmxlMSkpOworICAgIEF0a0F0dHJpYnV0ZVNl
dCogc2V0MSA9IGF0a19vYmplY3RfZ2V0X2F0dHJpYnV0ZXModGFibGUxKTsKKyAgICBnX2Fzc2Vy
dChzZXQxKTsKKyAgICBnX2Fzc2VydCghYXRrQXR0cmlidXRlU2V0Q29udGFpbnNBdHRyaWJ1dGVO
YW1lKHNldDEsICJsYXlvdXQtZ3Vlc3MiKSk7CisgICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShz
ZXQxKTsKKworICAgIC8vIENoZWNrIHRoZSBsYXlvdXQgdGFibGUKKworICAgIEF0a09iamVjdCog
dGFibGUyID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmosIDEpOworICAgIGdf
YXNzZXJ0KEFUS19JU19UQUJMRSh0YWJsZTIpKTsKKyAgICBBdGtBdHRyaWJ1dGVTZXQqIHNldDIg
PSBhdGtfb2JqZWN0X2dldF9hdHRyaWJ1dGVzKHRhYmxlMik7CisgICAgZ19hc3NlcnQoc2V0Mik7
CisgICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0Q29udGFpbnNBdHRyaWJ1dGVOYW1lKHNldDIs
ICJsYXlvdXQtZ3Vlc3MiKSk7CisgICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRl
TmFtZUhhc1ZhbHVlKHNldDIsICJsYXlvdXQtZ3Vlc3MiLCAidHJ1ZSIpKTsKKyAgICBhdGtfYXR0
cmlidXRlX3NldF9mcmVlKHNldDIpOworCisgICAgZ19vYmplY3RfdW5yZWYodGFibGUxKTsKKyAg
ICBnX29iamVjdF91bnJlZih0YWJsZTIpOworICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwor
fQorCiBzdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrTGlzdHNPZkl0ZW1zKHZvaWQpCiB7CiAgICAg
V2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdf
bmV3KCkpOwpAQCAtMTExNiw2ICsxMTY3LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBh
cmd2KQogICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvdGV4dEF0dHJpYnV0ZXMiLCB0
ZXN0V2Via2l0QXRrVGV4dEF0dHJpYnV0ZXMpOwogICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtp
dC9hdGsvdGV4dFNlbGVjdGlvbnMiLCB0ZXN0V2VraXRBdGtUZXh0U2VsZWN0aW9ucyk7CiAgICAg
Z190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRFeHRlbnRzIiwgdGVzdFdlYmtpdEF0a0dl
dEV4dGVudHMpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvbGF5b3V0QW5kRGF0
YVRhYmxlcyIsIHRlc3RXZWJraXRBdGtMYXlvdXRBbmREYXRhVGFibGVzKTsKICAgICBnX3Rlc3Rf
YWRkX2Z1bmMoIi93ZWJraXQvYXRrL2xpc3RzT2ZJdGVtcyIsIHRlc3RXZWJraXRBdGtMaXN0c09m
SXRlbXMpOwogICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvdGV4dENoYW5nZWROb3Rp
ZmljYXRpb25zIiwgdGVzdFdlYmtpdEF0a1RleHRDaGFuZ2VkTm90aWZpY2F0aW9ucyk7CiAgICAg
cmV0dXJuIGdfdGVzdF9ydW4gKCk7Ci0tIAoxLjcuMQoK
</data>

          </attachment>
      

    </bug>

</bugzilla>